verben-authentication-ui 0.3.8 → 0.3.9

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 (25) hide show
  1. package/esm2022/lib/components/auth-callback/auth-callback.component.mjs +48 -0
  2. package/esm2022/lib/components/auth-callback/auth-callback.module.mjs +18 -0
  3. package/esm2022/lib/components/o-auth/o-auth.component.mjs +53 -81
  4. package/esm2022/lib/components/sign-in/sign-in.component.mjs +103 -35
  5. package/esm2022/lib/components/sign-up/sign-up.component.mjs +1 -1
  6. package/esm2022/lib/components/user-management/user-management.component.mjs +2 -2
  7. package/esm2022/lib/components/user-request/user-request.component.mjs +58 -61
  8. package/esm2022/lib/components/user-request-approval/user-request-approval.component.mjs +2 -2
  9. package/esm2022/lib/models/UserRequest.mjs +1 -1
  10. package/esm2022/lib/models/log-in.mjs +1 -1
  11. package/esm2022/lib/models/oauth-response.mjs +2 -0
  12. package/esm2022/lib/services/http-web-request.service.mjs +1 -2
  13. package/esm2022/public-api.mjs +3 -1
  14. package/fesm2022/verben-authentication-ui.mjs +271 -174
  15. package/fesm2022/verben-authentication-ui.mjs.map +1 -1
  16. package/lib/components/auth-callback/auth-callback.component.d.ts +17 -0
  17. package/lib/components/auth-callback/auth-callback.module.d.ts +8 -0
  18. package/lib/components/o-auth/o-auth.component.d.ts +10 -18
  19. package/lib/components/sign-in/sign-in.component.d.ts +17 -5
  20. package/lib/components/user-request/user-request.component.d.ts +6 -5
  21. package/lib/models/UserRequest.d.ts +2 -0
  22. package/lib/models/log-in.d.ts +1 -0
  23. package/lib/models/oauth-response.d.ts +6 -0
  24. package/package.json +1 -1
  25. package/public-api.d.ts +2 -0
@@ -0,0 +1,48 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/router";
4
+ export class AuthCallbackComponent {
5
+ router;
6
+ code = '';
7
+ previousUrl = '';
8
+ redirectText;
9
+ width = 40;
10
+ height = 40;
11
+ color = 'black';
12
+ constructor(router) {
13
+ this.router = router;
14
+ }
15
+ ngOnInit() {
16
+ this.handleRedirect();
17
+ }
18
+ handleRedirect() {
19
+ const params = new URLSearchParams(window.location.search);
20
+ const code = params.get('code');
21
+ const stateParam = params.get('state');
22
+ if (code && stateParam) {
23
+ try {
24
+ const state = JSON.parse(decodeURIComponent(stateParam));
25
+ const returnTo = state.returnTo || '/';
26
+ this.router.navigate([returnTo], { queryParams: { code } });
27
+ }
28
+ catch (e) {
29
+ const msg = e;
30
+ }
31
+ }
32
+ }
33
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthCallbackComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
34
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AuthCallbackComponent, selector: "verben-auth-callback", inputs: { redirectText: "redirectText", width: "width", height: "height", color: "color" }, ngImport: i0, template: "<section class=\"wrapper\"> \n <div class=\"flexWrapper\"> \n <p class=\"{{redirectText}}\">Redirecting ...</p>\n <div class=\"loader\"></div>\n </div>\n</section>", styles: [".wrapper{width:100%;min-height:100%;display:flex;align-items:center;justify-content:center}.flexWrapper{display:flex;align-items:center;justify-content:center}.loader{border:2px solid white;border-radius:50%;border-top:2px solid black;width:40px;height:40px;-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] });
35
+ }
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthCallbackComponent, decorators: [{
37
+ type: Component,
38
+ args: [{ selector: 'verben-auth-callback', template: "<section class=\"wrapper\"> \n <div class=\"flexWrapper\"> \n <p class=\"{{redirectText}}\">Redirecting ...</p>\n <div class=\"loader\"></div>\n </div>\n</section>", styles: [".wrapper{width:100%;min-height:100%;display:flex;align-items:center;justify-content:center}.flexWrapper{display:flex;align-items:center;justify-content:center}.loader{border:2px solid white;border-radius:50%;border-top:2px solid black;width:40px;height:40px;-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
39
+ }], ctorParameters: () => [{ type: i1.Router }], propDecorators: { redirectText: [{
40
+ type: Input
41
+ }], width: [{
42
+ type: Input
43
+ }], height: [{
44
+ type: Input
45
+ }], color: [{
46
+ type: Input
47
+ }] } });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1jYWxsYmFjay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL2F1dGgtY2FsbGJhY2svYXV0aC1jYWxsYmFjay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL2F1dGgtY2FsbGJhY2svYXV0aC1jYWxsYmFjay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7O0FBUXpELE1BQU0sT0FBTyxxQkFBcUI7SUFTWjtJQVJwQixJQUFJLEdBQVcsRUFBRSxDQUFDO0lBQ2xCLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDaEIsWUFBWSxDQUFTO0lBQ3JCLEtBQUssR0FBVSxFQUFFLENBQUM7SUFDbEIsTUFBTSxHQUFVLEVBQUUsQ0FBQztJQUNuQixLQUFLLEdBQVUsT0FBTyxDQUFDO0lBR2hDLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUcsQ0FBQztJQUV0QyxRQUFRO1FBQ04sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdkMsSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDO2dCQUNILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDekQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUQsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1osTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFBO1lBQ2QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO3dHQTdCVSxxQkFBcUI7NEZBQXJCLHFCQUFxQix3SkNSbEMseUxBS1U7OzRGREdHLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxzQkFBc0I7MkVBT3ZCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2ZXJiZW4tYXV0aC1jYWxsYmFjaycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRoLWNhbGxiYWNrLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2F1dGgtY2FsbGJhY2suY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgQXV0aENhbGxiYWNrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29kZTogc3RyaW5nID0gJyc7XG4gIHByZXZpb3VzVXJsOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgcmVkaXJlY3RUZXh0PzpzdHJpbmc7XG4gIEBJbnB1dCgpIHdpZHRoOm51bWJlciA9IDQwO1xuICBASW5wdXQoKSBoZWlnaHQ6bnVtYmVyID0gNDA7XG4gIEBJbnB1dCgpIGNvbG9yOnN0cmluZyA9ICdibGFjayc7XG4gIFxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5oYW5kbGVSZWRpcmVjdCgpO1xuICB9XG5cbiAgaGFuZGxlUmVkaXJlY3QoKSB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICBjb25zdCBjb2RlID0gcGFyYW1zLmdldCgnY29kZScpO1xuICAgIGNvbnN0IHN0YXRlUGFyYW0gPSBwYXJhbXMuZ2V0KCdzdGF0ZScpO1xuXG4gICAgaWYgKGNvZGUgJiYgc3RhdGVQYXJhbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBKU09OLnBhcnNlKGRlY29kZVVSSUNvbXBvbmVudChzdGF0ZVBhcmFtKSk7XG4gICAgICAgIGNvbnN0IHJldHVyblRvID0gc3RhdGUucmV0dXJuVG8gfHwgJy8nO1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcmV0dXJuVG9dLCB7IHF1ZXJ5UGFyYW1zOiB7IGNvZGUgfSB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICBjb25zdCBtc2cgPSBlXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cIndyYXBwZXJcIj4gXG4gICAgPGRpdiBjbGFzcz1cImZsZXhXcmFwcGVyXCI+IFxuICAgICAgICA8cCBjbGFzcz1cInt7cmVkaXJlY3RUZXh0fX1cIj5SZWRpcmVjdGluZyAuLi48L3A+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkZXJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbjwvc2VjdGlvbj4iXX0=
@@ -0,0 +1,18 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { AuthCallbackComponent } from './auth-callback.component';
4
+ import * as i0 from "@angular/core";
5
+ export class AuthCallbackModule {
6
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthCallbackModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AuthCallbackModule, declarations: [AuthCallbackComponent], imports: [CommonModule], exports: [AuthCallbackComponent] });
8
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthCallbackModule, imports: [CommonModule] });
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthCallbackModule, decorators: [{
11
+ type: NgModule,
12
+ args: [{
13
+ declarations: [AuthCallbackComponent],
14
+ imports: [CommonModule],
15
+ exports: [AuthCallbackComponent]
16
+ }]
17
+ }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1jYWxsYmFjay5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL2F1dGgtY2FsbGJhY2svYXV0aC1jYWxsYmFjay5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBT2xFLE1BQU0sT0FBTyxrQkFBa0I7d0dBQWxCLGtCQUFrQjt5R0FBbEIsa0JBQWtCLGlCQUpkLHFCQUFxQixhQUMxQixZQUFZLGFBQ1oscUJBQXFCO3lHQUVwQixrQkFBa0IsWUFIbkIsWUFBWTs7NEZBR1gsa0JBQWtCO2tCQUw5QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNyQyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDO2lCQUNqQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQXV0aENhbGxiYWNrQ29tcG9uZW50IH0gZnJvbSAnLi9hdXRoLWNhbGxiYWNrLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0F1dGhDYWxsYmFja0NvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBleHBvcnRzOiBbQXV0aENhbGxiYWNrQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBBdXRoQ2FsbGJhY2tNb2R1bGUge30iXX0=
@@ -1,79 +1,41 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { MechanismType } from '../../models/auth-mechanism';
3
- import { ErrorResponse } from '../../models/ErrorResponse';
4
3
  import * as i0 from "@angular/core";
5
4
  import * as i1 from "@angular/router";
6
5
  import * as i2 from "../../services/http-web-request.service";
7
6
  import * as i3 from "../../services/util.service";
8
- import * as i4 from "../../services/environment.service";
9
- import * as i5 from "@angular/common";
10
- import * as i6 from "verben-ng-ui";
7
+ import * as i4 from "@angular/common";
8
+ import * as i5 from "verben-ng-ui";
11
9
  export class OAuthComponent {
12
10
  route;
13
11
  server;
14
12
  utilService;
15
- envSvc;
16
- clientId = 'YOUR_CLIENT_ID_FROM_BACKEND';
13
+ router;
17
14
  showGoogle = false;
18
15
  showMicrosoft = false;
19
16
  showApple = false;
20
17
  authMechanisms = null;
21
- redirectUri = 'http://localhost:4200/documentation/login';
22
- apiKey;
23
18
  microsoftClick = new EventEmitter();
24
- onSubmitGoogleAuth = new EventEmitter();
25
19
  googleClick = new EventEmitter();
26
20
  appleClick = new EventEmitter();
27
- code = '';
28
- googleRedirectUrl = '';
29
- constructor(route, server, utilService, envSvc) {
21
+ page = '';
22
+ constructor(route, server, utilService, router) {
30
23
  this.route = route;
31
24
  this.server = server;
32
25
  this.utilService = utilService;
33
- this.envSvc = envSvc;
26
+ this.router = router;
34
27
  }
35
28
  ngOnInit() {
29
+ this.loadPage();
36
30
  this.loadGoogleScript();
37
- this.route.queryParams.subscribe(params => {
38
- this.code = params['code'];
39
- });
40
- if (this.code) {
41
- console.log('Code from URL:', this.code);
42
- this.verifyUserDetails();
43
- }
44
31
  if (this.authMechanisms !== null) {
45
- this.showMicrosoft = this.authMechanisms.some(item => item.AuthMechanism.includes(MechanismType.MicrosoftAD));
46
- this.showGoogle = this.authMechanisms.some(item => item.AuthMechanism.includes(MechanismType.Google));
47
- if (this.showGoogle) {
48
- const data = this.authMechanisms.find(item => item.AuthMechanism.includes(MechanismType.Google));
49
- this.clientId = data?.ClientId;
50
- this.googleRedirectUrl = data?.RedirectUri;
51
- }
52
- this.showApple = this.authMechanisms.some(item => item.AuthMechanism.includes(MechanismType.Apple));
32
+ this.authMechanisms = this.authMechanisms.filter((item) => item.AuthMechanism !== MechanismType.InApp);
53
33
  }
54
34
  }
55
- async verifyUserDetails() {
56
- if (this.authMechanisms !== null && this.apiKey) {
57
- const data = this.authMechanisms.find(item => item.AuthMechanism.includes(MechanismType.Google));
58
- const payload = {
59
- AuthCode: this.code,
60
- APIKey: this.apiKey,
61
- AuthMechanism: data.AuthMechanism
62
- };
63
- this.utilService.sendBI(true);
64
- const res = await this.server.post(`Authentication/GetUserDetails`, payload);
65
- this.utilService.sendBI(false);
66
- if (res instanceof ErrorResponse) {
67
- this.onSubmitGoogleAuth.emit(res);
68
- }
69
- else {
70
- var result = res;
71
- this.onSubmitGoogleAuth.emit(result);
72
- }
73
- }
35
+ loadPage() {
36
+ this.page = this.router.url;
74
37
  }
75
38
  loadGoogleScript() {
76
- console.log('checking here');
77
39
  if (!document.getElementById('google-jssdk')) {
78
40
  const script = document.createElement('script');
79
41
  script.src = 'https://accounts.google.com/gsi/client';
@@ -85,53 +47,63 @@ export class OAuthComponent {
85
47
  document.head.appendChild(script);
86
48
  }
87
49
  }
88
- oAuthWithMicrosoft() {
89
- this.microsoftClick.emit();
90
- }
91
- oAuthWithGoogle() {
92
- const redirectUri = encodeURIComponent(this.redirectUri);
50
+ oAuthWithGoogle(data) {
51
+ const redirectUri = encodeURIComponent(data.RedirectUri);
93
52
  const scope = encodeURIComponent('openid email profile');
94
53
  const responseType = 'code';
95
- const authUrl = `https://accounts.google.com/o/oauth2/v2/auth?client_id=${this.clientId}&redirect_uri=${redirectUri}&response_type=${responseType}&scope=${scope}`;
96
- window.location.href = authUrl; // Redirects the current window
97
- }
98
- exchangeCodeForToken(authCode) {
99
- console.log('Exchanging code for token:', authCode);
100
- // this.http.post('/api/auth/google/token', { code: authCode }).subscribe({
101
- // next: (response) => {
102
- // console.log('Token received:', response);
103
- // // Handle successful login (store token, etc.)
104
- // },
105
- // error: (err) => {
106
- // console.error('Error exchanging code for token:', err);
107
- // }
108
- // });
109
- }
110
- handleCredentialResponse(response) {
111
- console.log('Encoded JWT ID token:', response.credential);
54
+ const state = encodeURIComponent(JSON.stringify({ returnTo: this.page }));
55
+ const authUrl = `https://accounts.google.com/o/oauth2/v2/auth?client_id=${data.ClientId}&redirect_uri=${redirectUri}&response_type=${responseType}&scope=${scope}&state=${state}`;
56
+ window.location.href = authUrl;
112
57
  }
113
58
  oAuthWithApple() {
114
59
  this.appleClick.emit();
115
60
  }
116
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OAuthComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.HttpWebRequestService }, { token: i3.UtilService }, { token: i4.EnvironmentService }], target: i0.ɵɵFactoryTarget.Component });
117
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OAuthComponent, selector: "verben-o-auth", inputs: { authMechanisms: "authMechanisms", redirectUri: "redirectUri", apiKey: "apiKey" }, outputs: { microsoftClick: "microsoftClick", onSubmitGoogleAuth: "onSubmitGoogleAuth", googleClick: "googleClick", appleClick: "appleClick" }, ngImport: i0, template: "<section class=\"oauthWrapper\"> \n <div class=\"OrFlexWrapper\">\n <hr/>\n <span>OR</span>\n <hr/>\n </div>\n <span *ngIf=\"showMicrosoft\"> \n <verbena-button\n svg=\"microsoft-logo\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n text=\"Continue with Microsoft\"\n bgColor=\"white\"\n textColor=\"black\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333] mt-2\"\n (click)=\"oAuthWithMicrosoft()\"\n ></verbena-button>\n </span> \n\n <span *ngIf=\"showGoogle\"> \n <verbena-button\n svg=\"google-logo\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n text=\"Continue with Google\"\n bgColor=\"white\"\n textColor=\"black\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333] mt-2\"\n (click)=\"oAuthWithGoogle()\"\n ></verbena-button>\n\n <!-- <div id=\"g_id_onload\"\n data-client_id=\"834995866282-l8gkp0r3v3a1bdvfmaumurki7ndar3m4.apps.googleusercontent.com\"\n data-context=\"signin\"\n data-ux_mode=\"popup\"\n data-login_uri=\"http://localhost:5124/Authentication/ExternalCallback\"\n data-itp_support=\"true\">\n</div>\n\n<div class=\"g_id_signin\"\n data-type=\"standard\"\n data-shape=\"rectangular\"\n data-theme=\"outline\"\n data-text=\"signin_with\"\n data-size=\"large\"\n data-logo_alignment=\"center\">\n</div> -->\n </span>\n \n <span *ngIf=\"showApple\"> \n <verbena-button\n svg=\"apple-logo\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n text=\"Continue with Apple\"\n bgColor=\"white\"\n textColor=\"black\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333] mt-2\"\n (click)=\"oAuthWithApple()\"\n ></verbena-button>\n </span>\n</section>\n", styles: ["hr{height:1px;margin:0;border:1px solid #66666640;flex:1}.OR{margin:0 2px;color:#666}.oauthWrapper{display:flex;flex-direction:column;gap:12px}.OrFlexWrapper{display:flex;align-items:center;gap:8px}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }] });
61
+ oAuthWithMicrosoft() {
62
+ this.microsoftClick.emit();
63
+ }
64
+ checkForValue(value) {
65
+ switch (value) {
66
+ case MechanismType.Google:
67
+ return 'google-logo';
68
+ break;
69
+ case MechanismType.Apple:
70
+ return 'apple-logo';
71
+ break;
72
+ case MechanismType.MicrosoftAD:
73
+ return 'microsoft-logo';
74
+ break;
75
+ default:
76
+ return '';
77
+ }
78
+ }
79
+ handleOauthClick(value) {
80
+ switch (value.AuthMechanism) {
81
+ case MechanismType.Google:
82
+ return this.oAuthWithGoogle(value);
83
+ break;
84
+ case MechanismType.Apple:
85
+ return this.oAuthWithApple();
86
+ break;
87
+ case MechanismType.MicrosoftAD:
88
+ return this.oAuthWithMicrosoft();
89
+ break;
90
+ default:
91
+ return '';
92
+ }
93
+ }
94
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OAuthComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.HttpWebRequestService }, { token: i3.UtilService }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
95
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OAuthComponent, selector: "verben-o-auth", inputs: { authMechanisms: "authMechanisms" }, outputs: { microsoftClick: "microsoftClick", googleClick: "googleClick", appleClick: "appleClick" }, ngImport: i0, template: "<section class=\"oauthWrapper\"> \n <div class=\"OrFlexWrapper\">\n <hr/>\n <span>OR</span>\n <hr/>\n </div>\n <div class=\"btnWrapper\">\n <div *ngFor=\"let btn of authMechanisms, let i = index\"> \n <verbena-button\n [svg]=\"checkForValue(btn.AuthMechanism)\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n [text]=\"'Continue with ' + btn.AuthMechanism\"\n bgColor=\"white\"\n textColor=\"black\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333] mt-2\"\n (click)=\"handleOauthClick(btn)\"\n ></verbena-button>\n </div> \n </div> \n</section>\n", styles: ["hr{height:1px;margin:0;border:1px solid #66666640;flex:1}.OR{margin:0 2px;color:#666}.oauthWrapper{display:flex;flex-direction:column;gap:12px}.btnWrapper{display:flex;flex-direction:column;gap:10px}.OrFlexWrapper{display:flex;align-items:center;gap:8px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i5.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }] });
118
96
  }
119
97
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OAuthComponent, decorators: [{
120
98
  type: Component,
121
- args: [{ selector: 'verben-o-auth', template: "<section class=\"oauthWrapper\"> \n <div class=\"OrFlexWrapper\">\n <hr/>\n <span>OR</span>\n <hr/>\n </div>\n <span *ngIf=\"showMicrosoft\"> \n <verbena-button\n svg=\"microsoft-logo\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n text=\"Continue with Microsoft\"\n bgColor=\"white\"\n textColor=\"black\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333] mt-2\"\n (click)=\"oAuthWithMicrosoft()\"\n ></verbena-button>\n </span> \n\n <span *ngIf=\"showGoogle\"> \n <verbena-button\n svg=\"google-logo\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n text=\"Continue with Google\"\n bgColor=\"white\"\n textColor=\"black\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333] mt-2\"\n (click)=\"oAuthWithGoogle()\"\n ></verbena-button>\n\n <!-- <div id=\"g_id_onload\"\n data-client_id=\"834995866282-l8gkp0r3v3a1bdvfmaumurki7ndar3m4.apps.googleusercontent.com\"\n data-context=\"signin\"\n data-ux_mode=\"popup\"\n data-login_uri=\"http://localhost:5124/Authentication/ExternalCallback\"\n data-itp_support=\"true\">\n</div>\n\n<div class=\"g_id_signin\"\n data-type=\"standard\"\n data-shape=\"rectangular\"\n data-theme=\"outline\"\n data-text=\"signin_with\"\n data-size=\"large\"\n data-logo_alignment=\"center\">\n</div> -->\n </span>\n \n <span *ngIf=\"showApple\"> \n <verbena-button\n svg=\"apple-logo\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n text=\"Continue with Apple\"\n bgColor=\"white\"\n textColor=\"black\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333] mt-2\"\n (click)=\"oAuthWithApple()\"\n ></verbena-button>\n </span>\n</section>\n", styles: ["hr{height:1px;margin:0;border:1px solid #66666640;flex:1}.OR{margin:0 2px;color:#666}.oauthWrapper{display:flex;flex-direction:column;gap:12px}.OrFlexWrapper{display:flex;align-items:center;gap:8px}\n"] }]
122
- }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.HttpWebRequestService }, { type: i3.UtilService }, { type: i4.EnvironmentService }], propDecorators: { authMechanisms: [{
123
- type: Input
124
- }], redirectUri: [{
125
- type: Input
126
- }], apiKey: [{
99
+ args: [{ selector: 'verben-o-auth', template: "<section class=\"oauthWrapper\"> \n <div class=\"OrFlexWrapper\">\n <hr/>\n <span>OR</span>\n <hr/>\n </div>\n <div class=\"btnWrapper\">\n <div *ngFor=\"let btn of authMechanisms, let i = index\"> \n <verbena-button\n [svg]=\"checkForValue(btn.AuthMechanism)\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n [text]=\"'Continue with ' + btn.AuthMechanism\"\n bgColor=\"white\"\n textColor=\"black\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333] mt-2\"\n (click)=\"handleOauthClick(btn)\"\n ></verbena-button>\n </div> \n </div> \n</section>\n", styles: ["hr{height:1px;margin:0;border:1px solid #66666640;flex:1}.OR{margin:0 2px;color:#666}.oauthWrapper{display:flex;flex-direction:column;gap:12px}.btnWrapper{display:flex;flex-direction:column;gap:10px}.OrFlexWrapper{display:flex;align-items:center;gap:8px}\n"] }]
100
+ }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.HttpWebRequestService }, { type: i3.UtilService }, { type: i1.Router }], propDecorators: { authMechanisms: [{
127
101
  type: Input
128
102
  }], microsoftClick: [{
129
103
  type: Output
130
- }], onSubmitGoogleAuth: [{
131
- type: Output
132
104
  }], googleClick: [{
133
105
  type: Output
134
106
  }], appleClick: [{
135
107
  type: Output
136
108
  }] } });
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1hdXRoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL2NvbXBvbmVudHMvby1hdXRoL28tYXV0aC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL28tYXV0aC9vLWF1dGguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWlCLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7QUFjM0QsTUFBTSxPQUFPLGNBQWM7SUFlZjtJQUNBO0lBQ0E7SUFDQTtJQWpCVixRQUFRLEdBQVcsNkJBQTZCLENBQUM7SUFDakQsVUFBVSxHQUFXLEtBQUssQ0FBQztJQUMzQixhQUFhLEdBQVcsS0FBSyxDQUFDO0lBQzlCLFNBQVMsR0FBVyxLQUFLLENBQUM7SUFDakIsY0FBYyxHQUEwQixJQUFJLENBQUE7SUFDNUMsV0FBVyxHQUFVLDJDQUEyQyxDQUFBO0lBQ2hFLE1BQU0sQ0FBUTtJQUNiLGNBQWMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQzFDLGtCQUFrQixHQUFtRCxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ3hGLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQ3ZDLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQ2hELElBQUksR0FBVSxFQUFFLENBQUM7SUFDakIsaUJBQWlCLEdBQVksRUFBRSxDQUFBO0lBQy9CLFlBQ1UsS0FBcUIsRUFDckIsTUFBNkIsRUFDN0IsV0FBd0IsRUFDeEIsTUFBMEI7UUFIMUIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7UUFDN0IsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7SUFFcEMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFDRixJQUFHLElBQUksQ0FBQyxJQUFJLEVBQUMsQ0FBQztZQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1FBQ3pCLENBQUM7UUFDQyxJQUFHLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNsRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQ3ZELENBQUM7WUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQy9DLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FDbEQsQ0FBQztZQUNGLElBQUcsSUFBSSxDQUFDLFVBQVUsRUFBQyxDQUFDO2dCQUNqQixNQUFNLElBQUksR0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNoRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQ2xELENBQUE7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEVBQUUsUUFBUSxDQUFDO2dCQUMvQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxFQUFFLFdBQVcsQ0FBQTtZQUM1QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQ2pELENBQUM7UUFDTixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUI7UUFDckIsSUFBRyxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFDLENBQUM7WUFDOUMsTUFBTSxJQUFJLEdBQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUNsRCxDQUFBO1lBQ0QsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsUUFBUSxFQUFDLElBQUksQ0FBQyxJQUFJO2dCQUNsQixNQUFNLEVBQUMsSUFBSSxDQUFDLE1BQU07Z0JBQ2xCLGFBQWEsRUFBQyxJQUFJLENBQUMsYUFBYTthQUNqQyxDQUFBO1lBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDaEMsK0JBQStCLEVBQUMsT0FBTyxDQUN4QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsSUFBSSxHQUFHLFlBQVksYUFBYSxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksTUFBTSxHQUFHLEdBQXVCLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkMsQ0FBQztRQUNILENBQUM7SUFHSCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzdDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsTUFBTSxDQUFDLEdBQUcsR0FBRyx3Q0FBd0MsQ0FBQztZQUN0RCxNQUFNLENBQUMsRUFBRSxHQUFHLGNBQWMsQ0FBQztZQUMzQixNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNwQixNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNwQixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUMvRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFSCxlQUFlO1FBQ2IsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDekQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDO1FBRTVCLE1BQU0sT0FBTyxHQUFHLDBEQUEwRCxJQUFJLENBQUMsUUFBUSxpQkFBaUIsV0FBVyxrQkFBa0IsWUFBWSxVQUFVLEtBQUssRUFBRSxDQUFDO1FBRW5LLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLCtCQUErQjtJQUNqRSxDQUFDO0lBRUQsb0JBQW9CLENBQUMsUUFBZ0I7UUFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVwRCwyRUFBMkU7UUFDM0UsNEJBQTRCO1FBQzVCLG9EQUFvRDtRQUNwRCx5REFBeUQ7UUFDekQsU0FBUztRQUNULHdCQUF3QjtRQUN4QixrRUFBa0U7UUFDbEUsUUFBUTtRQUNSLE1BQU07SUFDUixDQUFDO0lBR0Msd0JBQXdCLENBQUMsUUFBYTtRQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQzt3R0E5SFUsY0FBYzs0RkFBZCxjQUFjLGdTQ3BCM0IsMHVFQTZFQTs7NEZEekRhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0UsZUFBZTtrTEFTaEIsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRoTWVjaGFuaXNtLCBNZWNoYW5pc21UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2F1dGgtbWVjaGFuaXNtJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEh0dHBXZWJSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAtd2ViLXJlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBVdGlsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3V0aWwuc2VydmljZSc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnZpcm9ubWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEVycm9yUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvRXJyb3JSZXNwb25zZSc7XG5pbXBvcnQgeyBSZXNwb25zZUtleVZhbHVlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1Jlc3BvbnNlS2V5VmFsdWUnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgZ29vZ2xlOiBhbnk7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmVyYmVuLW8tYXV0aCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9vLWF1dGguY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vby1hdXRoLmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIE9BdXRoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY2xpZW50SWQ6IHN0cmluZyA9ICdZT1VSX0NMSUVOVF9JRF9GUk9NX0JBQ0tFTkQnO1xuICBzaG93R29vZ2xlOmJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd01pY3Jvc29mdDpib29sZWFuID0gZmFsc2U7XG4gIHNob3dBcHBsZTpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1dGhNZWNoYW5pc21zOkF1dGhNZWNoYW5pc21bXSB8IG51bGwgPSBudWxsXG4gIEBJbnB1dCgpIHJlZGlyZWN0VXJpOnN0cmluZyA9ICdodHRwOi8vbG9jYWxob3N0OjQyMDAvZG9jdW1lbnRhdGlvbi9sb2dpbidcbiAgQElucHV0KCkgYXBpS2V5PzpzdHJpbmdcbiAgQE91dHB1dCgpIG1pY3Jvc29mdENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgb25TdWJtaXRHb29nbGVBdXRoOiBFdmVudEVtaXR0ZXI8UmVzcG9uc2VLZXlWYWx1ZSB8IEVycm9yUmVzcG9uc2U+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZ29vZ2xlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBhcHBsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBjb2RlOnN0cmluZyA9ICcnO1xuICBnb29nbGVSZWRpcmVjdFVybCA6IHN0cmluZyA9ICcnXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgc2VydmVyOiBIdHRwV2ViUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1dGlsU2VydmljZTogVXRpbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbnZTdmM6IEVudmlyb25tZW50U2VydmljZSxcbiAgKXsgXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRHb29nbGVTY3JpcHQoKTsgXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgIHRoaXMuY29kZSA9IHBhcmFtc1snY29kZSddO1xuICAgIH0pO1xuICAgICBpZih0aGlzLmNvZGUpeyBcbiAgICAgIGNvbnNvbGUubG9nKCdDb2RlIGZyb20gVVJMOicsIHRoaXMuY29kZSk7XG4gICAgICB0aGlzLnZlcmlmeVVzZXJEZXRhaWxzKClcbiAgICAgfVxuICAgICAgIGlmKHRoaXMuYXV0aE1lY2hhbmlzbXMgIT09IG51bGwgKXsgXG4gICAgICAgIHRoaXMuc2hvd01pY3Jvc29mdCA9IHRoaXMuYXV0aE1lY2hhbmlzbXMuc29tZShpdGVtID0+XG4gICAgICAgICAgIGl0ZW0uQXV0aE1lY2hhbmlzbS5pbmNsdWRlcyhNZWNoYW5pc21UeXBlLk1pY3Jvc29mdEFEKVxuICAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zaG93R29vZ2xlID0gdGhpcy5hdXRoTWVjaGFuaXNtcy5zb21lKGl0ZW0gPT5cbiAgICAgICAgICAgaXRlbS5BdXRoTWVjaGFuaXNtLmluY2x1ZGVzKE1lY2hhbmlzbVR5cGUuR29vZ2xlKVxuICAgICAgICAgKTtcbiAgICAgICAgIGlmKHRoaXMuc2hvd0dvb2dsZSl7IFxuICAgICAgICAgICAgY29uc3QgZGF0YTphbnkgPSB0aGlzLmF1dGhNZWNoYW5pc21zLmZpbmQoaXRlbSA9PlxuICAgICAgICAgICAgIGl0ZW0uQXV0aE1lY2hhbmlzbS5pbmNsdWRlcyhNZWNoYW5pc21UeXBlLkdvb2dsZSlcbiAgICAgICAgICAgKVxuICAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YT8uQ2xpZW50SWQ7XG4gICAgICAgICAgIHRoaXMuZ29vZ2xlUmVkaXJlY3RVcmwgPSBkYXRhPy5SZWRpcmVjdFVyaVxuICAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dBcHBsZSA9IHRoaXMuYXV0aE1lY2hhbmlzbXMuc29tZShpdGVtID0+XG4gICAgICAgICAgIGl0ZW0uQXV0aE1lY2hhbmlzbS5pbmNsdWRlcyhNZWNoYW5pc21UeXBlLkFwcGxlKVxuICAgICAgICAgKTtcbiAgICAgfVxuICB9XG4gIFxuICBhc3luYyB2ZXJpZnlVc2VyRGV0YWlscygpeyBcbiAgICBpZih0aGlzLmF1dGhNZWNoYW5pc21zICE9PSBudWxsICYmIHRoaXMuYXBpS2V5KXsgXG4gICAgICBjb25zdCBkYXRhOmFueSA9IHRoaXMuYXV0aE1lY2hhbmlzbXMuZmluZChpdGVtID0+XG4gICAgICAgIGl0ZW0uQXV0aE1lY2hhbmlzbS5pbmNsdWRlcyhNZWNoYW5pc21UeXBlLkdvb2dsZSlcbiAgICAgIClcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7IFxuICAgICAgICBBdXRoQ29kZTp0aGlzLmNvZGUsXG4gICAgICAgIEFQSUtleTp0aGlzLmFwaUtleSxcbiAgICAgICAgQXV0aE1lY2hhbmlzbTpkYXRhLkF1dGhNZWNoYW5pc21cbiAgICAgIH1cblxuICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgICBgQXV0aGVudGljYXRpb24vR2V0VXNlckRldGFpbHNgLHBheWxvYWRcbiAgICAgICk7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICB0aGlzLm9uU3VibWl0R29vZ2xlQXV0aC5lbWl0KHJlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVzIGFzIFJlc3BvbnNlS2V5VmFsdWU7XG4gICAgICAgIHRoaXMub25TdWJtaXRHb29nbGVBdXRoLmVtaXQocmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgIFxuICB9XG5cbiAgbG9hZEdvb2dsZVNjcmlwdCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnY2hlY2tpbmcgaGVyZScpOyAgXG4gICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29vZ2xlLWpzc2RrJykpIHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgc2NyaXB0LnNyYyA9ICdodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20vZ3NpL2NsaWVudCc7XG4gICAgICBzY3JpcHQuaWQgPSAnZ29vZ2xlLWpzc2RrJztcbiAgICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgICBzY3JpcHQuZGVmZXIgPSB0cnVlO1xuICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IGNvbnNvbGUubG9nKCdHb29nbGUgU0RLIGxvYWRlZCcpO1xuICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiBjb25zb2xlLmxvZygnRXJyb3IgbG9hZGluZyBHb29nbGUgU0RLJyk7XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuICB9XG5cbiAgb0F1dGhXaXRoTWljcm9zb2Z0KCl7XG4gICAgdGhpcy5taWNyb3NvZnRDbGljay5lbWl0KCk7IFxuICB9XG5cbm9BdXRoV2l0aEdvb2dsZSgpIHtcbiAgY29uc3QgcmVkaXJlY3RVcmkgPSBlbmNvZGVVUklDb21wb25lbnQodGhpcy5yZWRpcmVjdFVyaSk7XG4gIGNvbnN0IHNjb3BlID0gZW5jb2RlVVJJQ29tcG9uZW50KCdvcGVuaWQgZW1haWwgcHJvZmlsZScpO1xuICBjb25zdCByZXNwb25zZVR5cGUgPSAnY29kZSc7XG5cbiAgY29uc3QgYXV0aFVybCA9IGBodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20vby9vYXV0aDIvdjIvYXV0aD9jbGllbnRfaWQ9JHt0aGlzLmNsaWVudElkfSZyZWRpcmVjdF91cmk9JHtyZWRpcmVjdFVyaX0mcmVzcG9uc2VfdHlwZT0ke3Jlc3BvbnNlVHlwZX0mc2NvcGU9JHtzY29wZX1gO1xuXG4gIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYXV0aFVybDsgLy8gUmVkaXJlY3RzIHRoZSBjdXJyZW50IHdpbmRvd1xufVxuXG5leGNoYW5nZUNvZGVGb3JUb2tlbihhdXRoQ29kZTogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnNvbGUubG9nKCdFeGNoYW5naW5nIGNvZGUgZm9yIHRva2VuOicsIGF1dGhDb2RlKTtcblxuICAvLyB0aGlzLmh0dHAucG9zdCgnL2FwaS9hdXRoL2dvb2dsZS90b2tlbicsIHsgY29kZTogYXV0aENvZGUgfSkuc3Vic2NyaWJlKHtcbiAgLy8gICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAvLyAgICAgICAgIGNvbnNvbGUubG9nKCdUb2tlbiByZWNlaXZlZDonLCByZXNwb25zZSk7XG4gIC8vICAgICAgICAgLy8gSGFuZGxlIHN1Y2Nlc3NmdWwgbG9naW4gKHN0b3JlIHRva2VuLCBldGMuKVxuICAvLyAgICAgfSxcbiAgLy8gICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gIC8vICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZXhjaGFuZ2luZyBjb2RlIGZvciB0b2tlbjonLCBlcnIpO1xuICAvLyAgICAgfVxuICAvLyB9KTtcbn1cblxuXG4gIGhhbmRsZUNyZWRlbnRpYWxSZXNwb25zZShyZXNwb25zZTogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0VuY29kZWQgSldUIElEIHRva2VuOicsIHJlc3BvbnNlLmNyZWRlbnRpYWwpXG4gIH1cbiAgb0F1dGhXaXRoQXBwbGUoKXtcbiAgICB0aGlzLmFwcGxlQ2xpY2suZW1pdCgpOyBcbiAgfVxuXG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cIm9hdXRoV3JhcHBlclwiPiBcbiAgICA8ZGl2IGNsYXNzPVwiT3JGbGV4V3JhcHBlclwiPlxuICAgICAgICA8aHIvPlxuICAgICAgICA8c3Bhbj5PUjwvc3Bhbj5cbiAgICAgICAgPGhyLz5cbiAgICA8L2Rpdj5cbiAgICAgPHNwYW4gKm5nSWY9XCJzaG93TWljcm9zb2Z0XCI+IFxuICAgICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgIHN2Zz1cIm1pY3Jvc29mdC1sb2dvXCJcbiAgICAgICBbc3ZnSGVpZ2h0XT1cIjI0XCJcbiAgICAgICBbc3ZnV2lkdGhdPVwiMjRcIlxuICAgICAgIHRleHQ9XCJDb250aW51ZSB3aXRoIE1pY3Jvc29mdFwiXG4gICAgICAgYmdDb2xvcj1cIndoaXRlXCJcbiAgICAgICB0ZXh0Q29sb3I9XCJibGFja1wiXG4gICAgICAgYm9yZGVyPVwiMXB4IHNvbGlkICMzMzNcIlxuICAgICAgIGJvcmRlclJhZGl1cz1cIjQwcHhcIlxuICAgICAgIHBkPVwiMTBweCAyMHB4XCJcbiAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgIHN2Z1Bvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgYnV0dG9uQ2xhc3M9XCJmb250LW5vcm1hbCB0ZXh0LVsyNHB4XSBsZWFkaW5nLVsyOS4wNXB4XSB0ZXh0LVsjMzMzXSBtdC0yXCJcbiAgICAgICAoY2xpY2spPVwib0F1dGhXaXRoTWljcm9zb2Z0KClcIlxuICAgICAgID48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICA8L3NwYW4+IFxuXG4gICAgPHNwYW4gKm5nSWY9XCJzaG93R29vZ2xlXCI+IFxuICAgICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICBzdmc9XCJnb29nbGUtbG9nb1wiXG4gICAgICBbc3ZnSGVpZ2h0XT1cIjI0XCJcbiAgICAgIFtzdmdXaWR0aF09XCIyNFwiXG4gICAgICB0ZXh0PVwiQ29udGludWUgd2l0aCBHb29nbGVcIlxuICAgICAgYmdDb2xvcj1cIndoaXRlXCJcbiAgICAgIHRleHRDb2xvcj1cImJsYWNrXCJcbiAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCAjMzMzXCJcbiAgICAgIGJvcmRlclJhZGl1cz1cIjQwcHhcIlxuICAgICAgcGQ9XCIxMHB4IDIwcHhcIlxuICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgIHN2Z1Bvc2l0aW9uPVwibGVmdFwiXG4gICAgICBidXR0b25DbGFzcz1cImZvbnQtbm9ybWFsIHRleHQtWzI0cHhdIGxlYWRpbmctWzI5LjA1cHhdIHRleHQtWyMzMzNdIG10LTJcIlxuICAgICAgKGNsaWNrKT1cIm9BdXRoV2l0aEdvb2dsZSgpXCJcbiAgICAgID48L3ZlcmJlbmEtYnV0dG9uPlxuXG4gICAgICA8IS0tIDxkaXYgaWQ9XCJnX2lkX29ubG9hZFwiXG4gICAgIGRhdGEtY2xpZW50X2lkPVwiODM0OTk1ODY2MjgyLWw4Z2twMHIzdjNhMWJkdmZtYXVtdXJraTduZGFyM200LmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tXCJcbiAgICAgZGF0YS1jb250ZXh0PVwic2lnbmluXCJcbiAgICAgZGF0YS11eF9tb2RlPVwicG9wdXBcIlxuICAgICBkYXRhLWxvZ2luX3VyaT1cImh0dHA6Ly9sb2NhbGhvc3Q6NTEyNC9BdXRoZW50aWNhdGlvbi9FeHRlcm5hbENhbGxiYWNrXCJcbiAgICAgZGF0YS1pdHBfc3VwcG9ydD1cInRydWVcIj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZ19pZF9zaWduaW5cIlxuICAgICBkYXRhLXR5cGU9XCJzdGFuZGFyZFwiXG4gICAgIGRhdGEtc2hhcGU9XCJyZWN0YW5ndWxhclwiXG4gICAgIGRhdGEtdGhlbWU9XCJvdXRsaW5lXCJcbiAgICAgZGF0YS10ZXh0PVwic2lnbmluX3dpdGhcIlxuICAgICBkYXRhLXNpemU9XCJsYXJnZVwiXG4gICAgIGRhdGEtbG9nb19hbGlnbm1lbnQ9XCJjZW50ZXJcIj5cbjwvZGl2PiAtLT5cbiAgICA8L3NwYW4+XG4gICBcbiAgICA8c3BhbiAqbmdJZj1cInNob3dBcHBsZVwiPiBcbiAgICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgc3ZnPVwiYXBwbGUtbG9nb1wiXG4gICAgICBbc3ZnSGVpZ2h0XT1cIjI0XCJcbiAgICAgIFtzdmdXaWR0aF09XCIyNFwiXG4gICAgICB0ZXh0PVwiQ29udGludWUgd2l0aCBBcHBsZVwiXG4gICAgICBiZ0NvbG9yPVwid2hpdGVcIlxuICAgICAgdGV4dENvbG9yPVwiYmxhY2tcIlxuICAgICAgYm9yZGVyPVwiMXB4IHNvbGlkICMzMzNcIlxuICAgICAgYm9yZGVyUmFkaXVzPVwiNDBweFwiXG4gICAgICBwZD1cIjEwcHggMjBweFwiXG4gICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgc3ZnUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgIGJ1dHRvbkNsYXNzPVwiZm9udC1ub3JtYWwgdGV4dC1bMjRweF0gbGVhZGluZy1bMjkuMDVweF0gdGV4dC1bIzMzM10gbXQtMlwiXG4gICAgICAoY2xpY2spPVwib0F1dGhXaXRoQXBwbGUoKVwiXG4gICAgICA+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICA8L3NwYW4+XG48L3NlY3Rpb24+XG4iXX0=
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1hdXRoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL2NvbXBvbmVudHMvby1hdXRoL28tYXV0aC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL28tYXV0aC9vLWF1dGguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWlCLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7O0FBZ0IzRSxNQUFNLE9BQU8sY0FBYztJQVdmO0lBQ0E7SUFDQTtJQUNBO0lBYlYsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUM1QixhQUFhLEdBQVksS0FBSyxDQUFDO0lBQy9CLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDbEIsY0FBYyxHQUEyQixJQUFJLENBQUM7SUFDN0MsY0FBYyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDMUMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDdkMsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDaEQsSUFBSSxHQUFXLEVBQUUsQ0FBQztJQUVsQixZQUNVLEtBQXFCLEVBQ3JCLE1BQTZCLEVBQzdCLFdBQXdCLEVBQ3hCLE1BQWM7UUFIZCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUF1QjtRQUM3QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQ3JCLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsRUFBRSxD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QUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDN0IsTUFBTTtZQUNSLEtBQUssYUFBYSxDQUFDLFdBQVc7Z0JBQzVCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ2pDLE1BQU07WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO3dHQTNGVSxjQUFjOzRGQUFkLGNBQWMsd01DakIzQix5ekJBMEJBOzs0RkRUYSxjQUFjO2tCQUwxQixTQUFTOytCQUNFLGVBQWU7c0tBUWhCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRoTWVjaGFuaXNtLCBNZWNoYW5pc21UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2F1dGgtbWVjaGFuaXNtJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSHR0cFdlYlJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC13ZWItcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFV0aWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXRpbC5zZXJ2aWNlJztcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBnb29nbGU6IGFueTtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2ZXJiZW4tby1hdXRoJyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tYXV0aC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9vLWF1dGguY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIE9BdXRoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgc2hvd0dvb2dsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93TWljcm9zb2Z0OiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dBcHBsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhdXRoTWVjaGFuaXNtczogQXV0aE1lY2hhbmlzbVtdIHwgbnVsbCA9IG51bGw7XG4gIEBPdXRwdXQoKSBtaWNyb3NvZnRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGdvb2dsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgYXBwbGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgcGFnZTogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBzZXJ2ZXI6IEh0dHBXZWJSZXF1ZXN0U2VydmljZSxcbiAgICBwcml2YXRlIHV0aWxTZXJ2aWNlOiBVdGlsU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRQYWdlKCk7XG4gICAgdGhpcy5sb2FkR29vZ2xlU2NyaXB0KCk7XG4gICAgaWYgKHRoaXMuYXV0aE1lY2hhbmlzbXMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuYXV0aE1lY2hhbmlzbXMgPSB0aGlzLmF1dGhNZWNoYW5pc21zLmZpbHRlcihcbiAgICAgICAgKGl0ZW0pID0+IGl0ZW0uQXV0aE1lY2hhbmlzbSAhPT0gTWVjaGFuaXNtVHlwZS5JbkFwcFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBsb2FkUGFnZSgpIHtcbiAgICB0aGlzLnBhZ2UgPSB0aGlzLnJvdXRlci51cmw7XG4gIH1cblxuICBsb2FkR29vZ2xlU2NyaXB0KCk6IHZvaWQge1xuICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvb2dsZS1qc3NkaycpKSB7XG4gICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIHNjcmlwdC5zcmMgPSAnaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tL2dzaS9jbGllbnQnO1xuICAgICAgc2NyaXB0LmlkID0gJ2dvb2dsZS1qc3Nkayc7XG4gICAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuICAgICAgc2NyaXB0LmRlZmVyID0gdHJ1ZTtcbiAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiBjb25zb2xlLmxvZygnR29vZ2xlIFNESyBsb2FkZWQnKTtcbiAgICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4gY29uc29sZS5sb2coJ0Vycm9yIGxvYWRpbmcgR29vZ2xlIFNESycpO1xuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cbiAgfVxuXG4gIG9BdXRoV2l0aEdvb2dsZShkYXRhOiBBdXRoTWVjaGFuaXNtKSB7XG4gICAgY29uc3QgcmVkaXJlY3RVcmkgPSBlbmNvZGVVUklDb21wb25lbnQoZGF0YS5SZWRpcmVjdFVyaSk7XG4gICAgY29uc3Qgc2NvcGUgPSBlbmNvZGVVUklDb21wb25lbnQoJ29wZW5pZCBlbWFpbCBwcm9maWxlJyk7XG4gICAgY29uc3QgcmVzcG9uc2VUeXBlID0gJ2NvZGUnO1xuICAgIGNvbnN0IHN0YXRlID0gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHsgcmV0dXJuVG86IHRoaXMucGFnZSB9KSk7XG4gICAgY29uc3QgYXV0aFVybCA9IGBodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20vby9vYXV0aDIvdjIvYXV0aD9jbGllbnRfaWQ9JHtkYXRhLkNsaWVudElkfSZyZWRpcmVjdF91cmk9JHtyZWRpcmVjdFVyaX0mcmVzcG9uc2VfdHlwZT0ke3Jlc3BvbnNlVHlwZX0mc2NvcGU9JHtzY29wZX0mc3RhdGU9JHtzdGF0ZX1gO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYXV0aFVybDtcbiAgfVxuXG4gIG9BdXRoV2l0aEFwcGxlKCkge1xuICAgIHRoaXMuYXBwbGVDbGljay5lbWl0KCk7XG4gIH1cblxuICBvQXV0aFdpdGhNaWNyb3NvZnQoKSB7XG4gICAgdGhpcy5taWNyb3NvZnRDbGljay5lbWl0KCk7XG4gIH1cblxuICBjaGVja0ZvclZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlIE1lY2hhbmlzbVR5cGUuR29vZ2xlOlxuICAgICAgICByZXR1cm4gJ2dvb2dsZS1sb2dvJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE1lY2hhbmlzbVR5cGUuQXBwbGU6XG4gICAgICAgIHJldHVybiAnYXBwbGUtbG9nbyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBNZWNoYW5pc21UeXBlLk1pY3Jvc29mdEFEOlxuICAgICAgICByZXR1cm4gJ21pY3Jvc29mdC1sb2dvJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlT2F1dGhDbGljayh2YWx1ZTogQXV0aE1lY2hhbmlzbSkge1xuICAgIHN3aXRjaCAodmFsdWUuQXV0aE1lY2hhbmlzbSkge1xuICAgICAgY2FzZSBNZWNoYW5pc21UeXBlLkdvb2dsZTpcbiAgICAgICAgcmV0dXJuIHRoaXMub0F1dGhXaXRoR29vZ2xlKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE1lY2hhbmlzbVR5cGUuQXBwbGU6XG4gICAgICAgIHJldHVybiB0aGlzLm9BdXRoV2l0aEFwcGxlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBNZWNoYW5pc21UeXBlLk1pY3Jvc29mdEFEOlxuICAgICAgICByZXR1cm4gdGhpcy5vQXV0aFdpdGhNaWNyb3NvZnQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cIm9hdXRoV3JhcHBlclwiPiBcbiAgICA8ZGl2IGNsYXNzPVwiT3JGbGV4V3JhcHBlclwiPlxuICAgICAgICA8aHIvPlxuICAgICAgICA8c3Bhbj5PUjwvc3Bhbj5cbiAgICAgICAgPGhyLz5cbiAgICA8L2Rpdj5cbiAgICAgPGRpdiBjbGFzcz1cImJ0bldyYXBwZXJcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGJ0biBvZiBhdXRoTWVjaGFuaXNtcywgbGV0IGkgPSBpbmRleFwiPiBcbiAgICAgICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgIFtzdmddPVwiY2hlY2tGb3JWYWx1ZShidG4uQXV0aE1lY2hhbmlzbSlcIlxuICAgICAgICBbc3ZnSGVpZ2h0XT1cIjI0XCJcbiAgICAgICAgW3N2Z1dpZHRoXT1cIjI0XCJcbiAgICAgICAgW3RleHRdPVwiJ0NvbnRpbnVlIHdpdGggJyArIGJ0bi5BdXRoTWVjaGFuaXNtXCJcbiAgICAgICAgYmdDb2xvcj1cIndoaXRlXCJcbiAgICAgICAgdGV4dENvbG9yPVwiYmxhY2tcIlxuICAgICAgICBib3JkZXI9XCIxcHggc29saWQgIzMzM1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjQwcHhcIlxuICAgICAgICBwZD1cIjEwcHggMjBweFwiXG4gICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgIHN2Z1Bvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgIGJ1dHRvbkNsYXNzPVwiZm9udC1ub3JtYWwgdGV4dC1bMjRweF0gbGVhZGluZy1bMjkuMDVweF0gdGV4dC1bIzMzM10gbXQtMlwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVPYXV0aENsaWNrKGJ0bilcIlxuICAgICAgICA+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgIDwvZGl2PiBcbiAgICAgPC9kaXY+IFxuPC9zZWN0aW9uPlxuIl19