@igo2/auth 1.14.3 → 1.14.4

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 (53) hide show
  1. package/esm2020/igo2-auth.mjs +4 -4
  2. package/esm2020/lib/auth-form/auth-facebook.component.mjs +60 -60
  3. package/esm2020/lib/auth-form/auth-form.component.mjs +276 -276
  4. package/esm2020/lib/auth-form/auth-google.component.mjs +98 -98
  5. package/esm2020/lib/auth-form/auth-intern.component.mjs +118 -118
  6. package/esm2020/lib/auth-form/auth-microsoft.component.mjs +93 -93
  7. package/esm2020/lib/auth-form/auth-microsoftb2c.component.mjs +92 -92
  8. package/esm2020/lib/auth-form/index.mjs +4 -4
  9. package/esm2020/lib/auth-routing.module.mjs +23 -23
  10. package/esm2020/lib/auth.module.mjs +90 -90
  11. package/esm2020/lib/shared/admin.guard.mjs +32 -32
  12. package/esm2020/lib/shared/auth-microsoft.provider.mjs +83 -83
  13. package/esm2020/lib/shared/auth-msalBroadcastServiceb2c.service.mjs +37 -37
  14. package/esm2020/lib/shared/auth-msalServiceb2c.service..mjs +79 -79
  15. package/esm2020/lib/shared/auth.guard.mjs +31 -31
  16. package/esm2020/lib/shared/auth.interceptor.mjs +154 -154
  17. package/esm2020/lib/shared/auth.interface.mjs +1 -1
  18. package/esm2020/lib/shared/auth.service.mjs +159 -159
  19. package/esm2020/lib/shared/logged.guard.mjs +31 -31
  20. package/esm2020/lib/shared/profils.guard.mjs +36 -36
  21. package/esm2020/lib/shared/protected.directive.mjs +18 -18
  22. package/esm2020/lib/shared/storage.interface.mjs +1 -1
  23. package/esm2020/lib/shared/storage.service.mjs +90 -90
  24. package/esm2020/lib/shared/token.service.mjs +46 -46
  25. package/esm2020/public_api.mjs +18 -18
  26. package/fesm2015/igo2-auth.mjs +1579 -1579
  27. package/fesm2020/igo2-auth.mjs +1477 -1477
  28. package/index.d.ts +5 -5
  29. package/lib/auth-form/auth-facebook.component.d.ts +18 -18
  30. package/lib/auth-form/auth-form.component.d.ts +42 -42
  31. package/lib/auth-form/auth-google.component.d.ts +24 -24
  32. package/lib/auth-form/auth-intern.component.d.ts +21 -21
  33. package/lib/auth-form/auth-microsoft.component.d.ts +23 -23
  34. package/lib/auth-form/auth-microsoftb2c.component.d.ts +23 -23
  35. package/lib/auth-form/index.d.ts +4 -4
  36. package/lib/auth-routing.module.d.ts +7 -7
  37. package/lib/auth.module.d.ts +23 -23
  38. package/lib/shared/admin.guard.d.ts +13 -13
  39. package/lib/shared/auth-microsoft.provider.d.ts +30 -30
  40. package/lib/shared/auth-msalBroadcastServiceb2c.service.d.ts +15 -15
  41. package/lib/shared/auth-msalServiceb2c.service..d.ts +33 -33
  42. package/lib/shared/auth.guard.d.ts +13 -13
  43. package/lib/shared/auth.interceptor.d.ts +24 -24
  44. package/lib/shared/auth.interface.d.ts +99 -99
  45. package/lib/shared/auth.service.d.ts +44 -44
  46. package/lib/shared/logged.guard.d.ts +13 -13
  47. package/lib/shared/profils.guard.d.ts +13 -13
  48. package/lib/shared/protected.directive.d.ts +8 -8
  49. package/lib/shared/storage.interface.d.ts +4 -4
  50. package/lib/shared/storage.service.d.ts +18 -18
  51. package/lib/shared/token.service.d.ts +15 -15
  52. package/package.json +3 -3
  53. package/public_api.d.ts +15 -15
@@ -1,5 +1,5 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public_api';
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
5
5
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWdvMi1hdXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvYXV0aC9zcmMvaWdvMi1hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljX2FwaSc7XG4iXX0=
@@ -1,61 +1,61 @@
1
- import { Component, ChangeDetectionStrategy, Output, EventEmitter } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../shared/auth.service";
4
- import * as i2 from "@igo2/core";
5
- export class AuthFacebookComponent {
6
- constructor(authService, config, appRef) {
7
- this.authService = authService;
8
- this.config = config;
9
- this.appRef = appRef;
10
- this.login = new EventEmitter();
11
- this.options = this.config.getConfig('auth.facebook') || {};
12
- if (this.options.appId) {
13
- this.loadSDKFacebook();
14
- }
15
- else {
16
- console.warn('Facebook authentification needs "appId" option');
17
- }
18
- }
19
- subscribeEvents() {
20
- window.FB.Event.subscribe('auth.statusChange', rep => {
21
- this.statusChangeCallback(rep);
22
- });
23
- }
24
- statusChangeCallback(response) {
25
- if (response.status === 'connected') {
26
- const accessToken = response.authResponse.accessToken;
27
- this.loginFacebook(accessToken);
28
- }
29
- }
30
- loginFacebook(token) {
31
- this.authService.loginWithToken(token, 'facebook').subscribe(() => {
32
- this.appRef.tick();
33
- this.login.emit(true);
34
- });
35
- }
36
- loadSDKFacebook() {
37
- if (document.getElementById('facebook-jssdk')) {
38
- return;
39
- }
40
- const urlSDK = 'https://connect.facebook.net/fr_CA/sdk.js#xfbml=1&version=v2.9';
41
- const fjs = document.getElementsByTagName('script')[0];
42
- const js = document.createElement('script');
43
- js.id = 'facebook-jssdk';
44
- js.src = `${urlSDK}&appId=${this.options.appId}`;
45
- js.onload = () => {
46
- this.subscribeEvents();
47
- };
48
- fjs.parentNode.insertBefore(js, fjs);
49
- }
50
- }
51
- AuthFacebookComponent.ɵfac = function AuthFacebookComponent_Factory(t) { return new (t || AuthFacebookComponent)(i0.ɵɵdirectiveInject(i1.AuthService), i0.ɵɵdirectiveInject(i2.ConfigService), i0.ɵɵdirectiveInject(i0.ApplicationRef)); };
52
- AuthFacebookComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AuthFacebookComponent, selectors: [["igo-auth-facebook"]], outputs: { login: "login" }, decls: 1, vars: 0, consts: [["scope", "public_profile,email", "data-max-rows", "1", "data-size", "large", "data-button-type", "login_with", "data-show-faces", "false", "data-auto-logout-link", "false", "data-use-continue-as", "false", 1, "fb-login-button"]], template: function AuthFacebookComponent_Template(rf, ctx) { if (rf & 1) {
53
- i0.ɵɵelement(0, "div", 0);
54
- } }, styles: ["[_nghost-%COMP%]{padding:10px 10px 10px 0;display:inline-block;position:relative;top:-3px}"], changeDetection: 0 });
55
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AuthFacebookComponent, [{
56
- type: Component,
57
- args: [{ selector: 'igo-auth-facebook', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div scope=\"public_profile,email\"\n class=\"fb-login-button\" data-max-rows=\"1\" data-size=\"large\"\n data-button-type=\"login_with\" data-show-faces=\"false\"\n data-auto-logout-link=\"false\" data-use-continue-as=\"false\">\n</div>\n", styles: [":host{padding:10px 10px 10px 0;display:inline-block;position:relative;top:-3px}\n"] }]
58
- }], function () { return [{ type: i1.AuthService }, { type: i2.ConfigService }, { type: i0.ApplicationRef }]; }, { login: [{
59
- type: Output
60
- }] }); })();
1
+ import { Component, ChangeDetectionStrategy, Output, EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../shared/auth.service";
4
+ import * as i2 from "@igo2/core";
5
+ export class AuthFacebookComponent {
6
+ constructor(authService, config, appRef) {
7
+ this.authService = authService;
8
+ this.config = config;
9
+ this.appRef = appRef;
10
+ this.login = new EventEmitter();
11
+ this.options = this.config.getConfig('auth.facebook') || {};
12
+ if (this.options.appId) {
13
+ this.loadSDKFacebook();
14
+ }
15
+ else {
16
+ console.warn('Facebook authentification needs "appId" option');
17
+ }
18
+ }
19
+ subscribeEvents() {
20
+ window.FB.Event.subscribe('auth.statusChange', rep => {
21
+ this.statusChangeCallback(rep);
22
+ });
23
+ }
24
+ statusChangeCallback(response) {
25
+ if (response.status === 'connected') {
26
+ const accessToken = response.authResponse.accessToken;
27
+ this.loginFacebook(accessToken);
28
+ }
29
+ }
30
+ loginFacebook(token) {
31
+ this.authService.loginWithToken(token, 'facebook').subscribe(() => {
32
+ this.appRef.tick();
33
+ this.login.emit(true);
34
+ });
35
+ }
36
+ loadSDKFacebook() {
37
+ if (document.getElementById('facebook-jssdk')) {
38
+ return;
39
+ }
40
+ const urlSDK = 'https://connect.facebook.net/fr_CA/sdk.js#xfbml=1&version=v2.9';
41
+ const fjs = document.getElementsByTagName('script')[0];
42
+ const js = document.createElement('script');
43
+ js.id = 'facebook-jssdk';
44
+ js.src = `${urlSDK}&appId=${this.options.appId}`;
45
+ js.onload = () => {
46
+ this.subscribeEvents();
47
+ };
48
+ fjs.parentNode.insertBefore(js, fjs);
49
+ }
50
+ }
51
+ AuthFacebookComponent.ɵfac = function AuthFacebookComponent_Factory(t) { return new (t || AuthFacebookComponent)(i0.ɵɵdirectiveInject(i1.AuthService), i0.ɵɵdirectiveInject(i2.ConfigService), i0.ɵɵdirectiveInject(i0.ApplicationRef)); };
52
+ AuthFacebookComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AuthFacebookComponent, selectors: [["igo-auth-facebook"]], outputs: { login: "login" }, decls: 1, vars: 0, consts: [["scope", "public_profile,email", "data-max-rows", "1", "data-size", "large", "data-button-type", "login_with", "data-show-faces", "false", "data-auto-logout-link", "false", "data-use-continue-as", "false", 1, "fb-login-button"]], template: function AuthFacebookComponent_Template(rf, ctx) { if (rf & 1) {
53
+ i0.ɵɵelement(0, "div", 0);
54
+ } }, styles: ["[_nghost-%COMP%]{padding:10px 10px 10px 0;display:inline-block;position:relative;top:-3px}"], changeDetection: 0 });
55
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AuthFacebookComponent, [{
56
+ type: Component,
57
+ args: [{ selector: 'igo-auth-facebook', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div scope=\"public_profile,email\"\n class=\"fb-login-button\" data-max-rows=\"1\" data-size=\"large\"\n data-button-type=\"login_with\" data-show-faces=\"false\"\n data-auto-logout-link=\"false\" data-use-continue-as=\"false\">\n</div>\n", styles: [":host{padding:10px 10px 10px 0;display:inline-block;position:relative;top:-3px}\n"] }]
58
+ }], function () { return [{ type: i1.AuthService }, { type: i2.ConfigService }, { type: i0.ApplicationRef }]; }, { login: [{
59
+ type: Output
60
+ }] }); })();
61
61
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1mYWNlYm9vay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoL3NyYy9saWIvYXV0aC1mb3JtL2F1dGgtZmFjZWJvb2suY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXV0aC9zcmMvbGliL2F1dGgtZm9ybS9hdXRoLWZhY2Vib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsdUJBQXVCLEVBRXZCLE1BQU0sRUFDTixZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7Ozs7QUFZdkIsTUFBTSxPQUFPLHFCQUFxQjtJQUtoQyxZQUNVLFdBQXdCLEVBQ3hCLE1BQXFCLEVBQ3JCLE1BQXNCO1FBRnRCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFMdEIsVUFBSyxHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO1FBT25FLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTVELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO2FBQU07WUFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxDQUFDLENBQUM7U0FDaEU7SUFDSCxDQUFDO0lBRU8sZUFBZTtRQUNwQixNQUFjLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDNUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFFBQVE7UUFDbkMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUNuQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztZQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFLO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2hFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUM3QyxPQUFPO1NBQ1I7UUFFRCxNQUFNLE1BQU0sR0FDVixnRUFBZ0UsQ0FBQztRQUVuRSxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkQsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxFQUFFLENBQUMsRUFBRSxHQUFHLGdCQUFnQixDQUFDO1FBQ3pCLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLFVBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqRCxFQUFFLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUNmLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUM7UUFDRixHQUFHLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQzs7MEZBdkRVLHFCQUFxQjt3RUFBckIscUJBQXFCO1FDbEJsQyx5QkFJTTs7dUZEY08scUJBQXFCO2NBTmpDLFNBQVM7MkJBQ0UsbUJBQW1CLG1CQUdaLHVCQUF1QixDQUFDLE1BQU07dUhBS3JDLEtBQUs7a0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIEFwcGxpY2F0aW9uUmVmLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xuaW1wb3J0IHsgQXV0aEZhY2Vib29rT3B0aW9ucyB9IGZyb20gJy4uL3NoYXJlZC9hdXRoLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9hdXRoLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tYXV0aC1mYWNlYm9vaycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRoLWZhY2Vib29rLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXV0aC1mYWNlYm9vay5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBdXRoRmFjZWJvb2tDb21wb25lbnQge1xuICBwcml2YXRlIG9wdGlvbnM6IEF1dGhGYWNlYm9va09wdGlvbnM7XG5cbiAgQE91dHB1dCgpIGxvZ2luOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmXG4gICkge1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuY29uZmlnLmdldENvbmZpZygnYXV0aC5mYWNlYm9vaycpIHx8IHt9O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcHBJZCkge1xuICAgICAgdGhpcy5sb2FkU0RLRmFjZWJvb2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdGYWNlYm9vayBhdXRoZW50aWZpY2F0aW9uIG5lZWRzIFwiYXBwSWRcIiBvcHRpb24nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZUV2ZW50cygpIHtcbiAgICAod2luZG93IGFzIGFueSkuRkIuRXZlbnQuc3Vic2NyaWJlKCdhdXRoLnN0YXR1c0NoYW5nZScsIHJlcCA9PiB7XG4gICAgICB0aGlzLnN0YXR1c0NoYW5nZUNhbGxiYWNrKHJlcCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXR1c0NoYW5nZUNhbGxiYWNrKHJlc3BvbnNlKSB7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gJ2Nvbm5lY3RlZCcpIHtcbiAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gcmVzcG9uc2UuYXV0aFJlc3BvbnNlLmFjY2Vzc1Rva2VuO1xuICAgICAgdGhpcy5sb2dpbkZhY2Vib29rKGFjY2Vzc1Rva2VuKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvZ2luRmFjZWJvb2sodG9rZW4pIHtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmxvZ2luV2l0aFRva2VuKHRva2VuLCAnZmFjZWJvb2snKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5hcHBSZWYudGljaygpO1xuICAgICAgdGhpcy5sb2dpbi5lbWl0KHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkU0RLRmFjZWJvb2soKSB7XG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWNlYm9vay1qc3NkaycpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXJsU0RLID1cbiAgICAgICdodHRwczovL2Nvbm5lY3QuZmFjZWJvb2submV0L2ZyX0NBL3Nkay5qcyN4ZmJtbD0xJnZlcnNpb249djIuOSc7XG5cbiAgICBjb25zdCBmanMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07XG4gICAgY29uc3QganMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBqcy5pZCA9ICdmYWNlYm9vay1qc3Nkayc7XG4gICAganMuc3JjID0gYCR7dXJsU0RLfSZhcHBJZD0ke3RoaXMub3B0aW9ucy5hcHBJZH1gO1xuICAgIGpzLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuc3Vic2NyaWJlRXZlbnRzKCk7XG4gICAgfTtcbiAgICBmanMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoanMsIGZqcyk7XG4gIH1cbn1cbiIsIjxkaXYgc2NvcGU9XCJwdWJsaWNfcHJvZmlsZSxlbWFpbFwiXG4gICAgIGNsYXNzPVwiZmItbG9naW4tYnV0dG9uXCIgZGF0YS1tYXgtcm93cz1cIjFcIiBkYXRhLXNpemU9XCJsYXJnZVwiXG4gICAgIGRhdGEtYnV0dG9uLXR5cGU9XCJsb2dpbl93aXRoXCIgZGF0YS1zaG93LWZhY2VzPVwiZmFsc2VcIlxuICAgICBkYXRhLWF1dG8tbG9nb3V0LWxpbms9XCJmYWxzZVwiIGRhdGEtdXNlLWNvbnRpbnVlLWFzPVwiZmFsc2VcIj5cbjwvZGl2PlxuIl19