@firestitch/2fa 12.8.4 → 12.9.1

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 (34) hide show
  1. package/app/enums/index.d.ts +1 -0
  2. package/app/interfaces/index.d.ts +1 -0
  3. package/app/modules/manage/components/2fa-manage/2fa-manage.component.d.ts +4 -3
  4. package/app/modules/manage/components/emails/emails.component.d.ts +2 -0
  5. package/app/modules/manage/components/numbers/numbers.component.d.ts +2 -0
  6. package/app/modules/manage/fs-2f-manage.module.d.ts +23 -23
  7. package/app/modules/manage/services/two-factor-manage.service.d.ts +14 -10
  8. package/app/modules/{manage → verification-methods}/components/verification-methods/index.d.ts +0 -0
  9. package/app/modules/verification-methods/components/verification-methods/verification-methods.component.d.ts +10 -5
  10. package/app/modules/verification-methods/index.d.ts +1 -0
  11. package/bundles/firestitch-2fa.umd.js +190 -165
  12. package/bundles/firestitch-2fa.umd.js.map +1 -1
  13. package/esm2015/app/enums/index.js +2 -0
  14. package/esm2015/app/interfaces/index.js +2 -0
  15. package/esm2015/app/modules/manage/components/2fa-manage/2fa-manage.component.js +9 -6
  16. package/esm2015/app/modules/manage/components/app/app.component.js +3 -3
  17. package/esm2015/app/modules/manage/components/email/email.component.js +3 -3
  18. package/esm2015/app/modules/manage/components/emails/emails.component.js +13 -7
  19. package/esm2015/app/modules/manage/components/manage-methods/manage-methods.component.js +6 -6
  20. package/esm2015/app/modules/manage/components/number/number.component.js +3 -3
  21. package/esm2015/app/modules/manage/components/numbers/numbers.component.js +13 -7
  22. package/esm2015/app/modules/manage/fs-2f-manage.module.js +6 -5
  23. package/esm2015/app/modules/manage/services/two-factor-manage.service.js +33 -23
  24. package/esm2015/app/modules/verification-methods/components/verification-methods/index.js +2 -0
  25. package/esm2015/app/modules/verification-methods/components/verification-methods/verification-methods.component.js +60 -5
  26. package/esm2015/app/modules/verification-methods/index.js +2 -0
  27. package/esm2015/public_api.js +2 -2
  28. package/fesm2015/firestitch-2fa.js +179 -154
  29. package/fesm2015/firestitch-2fa.js.map +1 -1
  30. package/package.json +1 -1
  31. package/public_api.d.ts +2 -2
  32. package/app/modules/manage/components/verification-methods/verification-methods.component.d.ts +0 -20
  33. package/esm2015/app/modules/manage/components/verification-methods/index.js +0 -2
  34. package/esm2015/app/modules/manage/components/verification-methods/verification-methods.component.js +0 -65
@@ -1,20 +0,0 @@
1
- import { OnInit, EventEmitter } from '@angular/core';
2
- import { FsListConfig } from '@firestitch/list';
3
- import { FsPrompt } from '@firestitch/prompt';
4
- import { IFsVerificationMethod } from '../../../../interfaces/verification-method.interface';
5
- import { TwoFactorManageService } from '../../services';
6
- import { VerificationMethodType } from '../../../../enums/verification-method-type.enum';
7
- import * as i0 from "@angular/core";
8
- export declare class VerificationMethodsComponent implements OnInit {
9
- private _prompt;
10
- twoFactorManageService: TwoFactorManageService;
11
- type: any;
12
- deleted: EventEmitter<IFsVerificationMethod>;
13
- listConfig: FsListConfig;
14
- VerificationMethodType: typeof VerificationMethodType;
15
- textMessageAdd: () => void;
16
- constructor(_prompt: FsPrompt);
17
- ngOnInit(): void;
18
- static ɵfac: i0.ɵɵFactoryDeclaration<VerificationMethodsComponent, never>;
19
- static ɵcmp: i0.ɵɵComponentDeclaration<VerificationMethodsComponent, "app-verification-methods", never, { "twoFactorManageService": "twoFactorManageService"; "type": "type"; }, { "deleted": "deleted"; }, never, never>;
20
- }
@@ -1,2 +0,0 @@
1
- export * from './verification-methods.component';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvbWFuYWdlL2NvbXBvbmVudHMvdmVyaWZpY2F0aW9uLW1ldGhvZHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQ0FBa0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdmVyaWZpY2F0aW9uLW1ldGhvZHMuY29tcG9uZW50JztcbiJdfQ==
@@ -1,65 +0,0 @@
1
- import { Component, ChangeDetectionStrategy, Input, Output, EventEmitter, } from '@angular/core';
2
- import { FsPrompt } from '@firestitch/prompt';
3
- import { map, switchMap } from 'rxjs/operators';
4
- import { TwoFactorManageService } from '../../services';
5
- import { VerificationMethodType } from '../../../../enums/verification-method-type.enum';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@firestitch/prompt";
8
- import * as i2 from "@firestitch/list";
9
- import * as i3 from "@firestitch/country";
10
- import * as i4 from "../../../defaulted/components/defaulted/defaulted.component";
11
- import * as i5 from "@angular/common";
12
- import * as i6 from "@firestitch/phone";
13
- export class VerificationMethodsComponent {
14
- constructor(_prompt) {
15
- this._prompt = _prompt;
16
- this.deleted = new EventEmitter();
17
- this.VerificationMethodType = VerificationMethodType;
18
- }
19
- ngOnInit() {
20
- this.listConfig = {
21
- rowActions: [
22
- {
23
- click: (verificationMethod) => {
24
- this._prompt.confirm({
25
- title: 'Confirm',
26
- template: 'Would you like to delete this verification method?',
27
- })
28
- .pipe(switchMap(() => this.twoFactorManageService.accountVerify()), switchMap(() => this.twoFactorManageService
29
- .verificationMethodDelete(verificationMethod)))
30
- .subscribe(() => {
31
- this.deleted.emit(verificationMethod);
32
- });
33
- },
34
- label: 'Delete',
35
- },
36
- ],
37
- fetch: () => {
38
- return this.twoFactorManageService.verificationMethods$
39
- .pipe(map((verificationMethods) => ({
40
- data: verificationMethods.filter((verificationMethod) => {
41
- return verificationMethod.type === this.type;
42
- }),
43
- })));
44
- },
45
- };
46
- }
47
- }
48
- VerificationMethodsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: VerificationMethodsComponent, deps: [{ token: i1.FsPrompt }], target: i0.ɵɵFactoryTarget.Component });
49
- VerificationMethodsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: VerificationMethodsComponent, selector: "app-verification-methods", inputs: { twoFactorManageService: "twoFactorManageService", type: "type" }, outputs: { deleted: "deleted" }, ngImport: i0, template: "<fs-list [config]=\"listConfig\">\n <fs-list-column class=\"col-name\">\n <ng-template fs-list-cell let-row=\"row\">\n <div class=\"row\">\n <ng-container *ngIf=\"row.type === VerificationMethodType.Sms\">\n <fs-country [code]=\"row.phoneCountry\" [showName]=\"false\"></fs-country> {{row.phoneNumber | fsPhone}}\n </ng-container>\n\n <ng-container *ngIf=\"row.type === VerificationMethodType.Email\">\n {{row.email}}\n </ng-container>\n \n <app-defaulted *ngIf=\"row.default\"></app-defaulted>\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>", styles: [":host ::ng-deep .col-name .row{display:flex;align-items:center}fs-country{margin-right:5px}app-defaulted{margin-left:5px}\n"], components: [{ type: i2.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i3.FsCountryComponent, selector: "fs-country", inputs: ["code", "showIcon", "showName", "region", "width"] }, { type: i4.DefaultedComponent, selector: "app-defaulted" }], directives: [{ type: i2.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "fsPhone": i6.FsPhonePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: VerificationMethodsComponent, decorators: [{
51
- type: Component,
52
- args: [{
53
- selector: 'app-verification-methods',
54
- templateUrl: './verification-methods.component.html',
55
- styleUrls: ['./verification-methods.component.scss'],
56
- changeDetection: ChangeDetectionStrategy.OnPush,
57
- }]
58
- }], ctorParameters: function () { return [{ type: i1.FsPrompt }]; }, propDecorators: { twoFactorManageService: [{
59
- type: Input
60
- }], type: [{
61
- type: Input
62
- }], deleted: [{
63
- type: Output
64
- }] } });
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZpY2F0aW9uLW1ldGhvZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21hbmFnZS9jb21wb25lbnRzL3ZlcmlmaWNhdGlvbi1tZXRob2RzL3ZlcmlmaWNhdGlvbi1tZXRob2RzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9tYW5hZ2UvY29tcG9uZW50cy92ZXJpZmljYXRpb24tbWV0aG9kcy92ZXJpZmljYXRpb24tbWV0aG9kcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLHVCQUF1QixFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxHQUN4RSxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHOUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7Ozs7Ozs7QUFTekYsTUFBTSxPQUFPLDRCQUE0QjtJQVd2QyxZQUNVLE9BQWlCO1FBQWpCLFlBQU8sR0FBUCxPQUFPLENBQVU7UUFQVixZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQXlCLENBQUM7UUFHOUQsMkJBQXNCLEdBQUcsc0JBQXNCLENBQUM7SUFNdkQsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsVUFBVSxHQUFHO1lBQ2hCLFVBQVUsRUFBRTtnQkFDVjtvQkFDRSxLQUFLLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO3dCQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQzs0QkFDbkIsS0FBSyxFQUFFLFNBQVM7NEJBQ2hCLFFBQVEsRUFBRSxvREFBb0Q7eUJBQy9ELENBQUM7NkJBQ0MsSUFBSSxDQUNILFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxFQUFFLENBQUMsRUFDNUQsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0I7NkJBQ3hDLHdCQUF3QixDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FDakQ7NkJBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTs0QkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3dCQUN4QyxDQUFDLENBQUMsQ0FBQztvQkFDUCxDQUFDO29CQUNELEtBQUssRUFBRSxRQUFRO2lCQUNoQjthQUNGO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDVixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxvQkFBb0I7cUJBQ3BELElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDNUIsSUFBSSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLGtCQUFrQixFQUFFLEVBQUU7d0JBQ3RELE9BQU8sa0JBQWtCLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQy9DLENBQUMsQ0FBQztpQkFDSCxDQUFDLENBQ0QsQ0FDRixDQUFDO1lBQ04sQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDOzswSEFqRFUsNEJBQTRCOzhHQUE1Qiw0QkFBNEIsNktDbkJ6QyxtbkJBZ0JVOzRGREdHLDRCQUE0QjtrQkFOeEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxXQUFXLEVBQUUsdUNBQXVDO29CQUNwRCxTQUFTLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQztvQkFDcEQsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOytGQUdpQixzQkFBc0I7c0JBQXJDLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFFVyxPQUFPO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBGc0xpc3RDb25maWcgfSBmcm9tICdAZmlyZXN0aXRjaC9saXN0JztcbmltcG9ydCB7IEZzUHJvbXB0IH0gZnJvbSAnQGZpcmVzdGl0Y2gvcHJvbXB0JztcbmltcG9ydCB7IElGc1ZlcmlmaWNhdGlvbk1ldGhvZCB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvdmVyaWZpY2F0aW9uLW1ldGhvZC5pbnRlcmZhY2UnO1xuXG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFR3b0ZhY3Rvck1hbmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBWZXJpZmljYXRpb25NZXRob2RUeXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZW51bXMvdmVyaWZpY2F0aW9uLW1ldGhvZC10eXBlLmVudW0nO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC12ZXJpZmljYXRpb24tbWV0aG9kcycsXG4gIHRlbXBsYXRlVXJsOiAnLi92ZXJpZmljYXRpb24tbWV0aG9kcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZlcmlmaWNhdGlvbi1tZXRob2RzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBWZXJpZmljYXRpb25NZXRob2RzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBwdWJsaWMgdHdvRmFjdG9yTWFuYWdlU2VydmljZTogVHdvRmFjdG9yTWFuYWdlU2VydmljZTtcbiAgQElucHV0KCkgcHVibGljIHR5cGU7XG4gIFxuICBAT3V0cHV0KCkgcHVibGljIGRlbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElGc1ZlcmlmaWNhdGlvbk1ldGhvZD4oKTtcblxuICBwdWJsaWMgbGlzdENvbmZpZzogRnNMaXN0Q29uZmlnO1xuICBwdWJsaWMgVmVyaWZpY2F0aW9uTWV0aG9kVHlwZSA9IFZlcmlmaWNhdGlvbk1ldGhvZFR5cGU7XG4gIHB1YmxpYyB0ZXh0TWVzc2FnZUFkZDogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9wcm9tcHQ6IEZzUHJvbXB0LFxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RDb25maWcgPSB7XG4gICAgICByb3dBY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjbGljazogKHZlcmlmaWNhdGlvbk1ldGhvZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcHJvbXB0LmNvbmZpcm0oe1xuICAgICAgICAgICAgICB0aXRsZTogJ0NvbmZpcm0nLFxuICAgICAgICAgICAgICB0ZW1wbGF0ZTogJ1dvdWxkIHlvdSBsaWtlIHRvIGRlbGV0ZSB0aGlzIHZlcmlmaWNhdGlvbiBtZXRob2Q/JyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnR3b0ZhY3Rvck1hbmFnZVNlcnZpY2UuYWNjb3VudFZlcmlmeSgpKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy50d29GYWN0b3JNYW5hZ2VTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAudmVyaWZpY2F0aW9uTWV0aG9kRGVsZXRlKHZlcmlmaWNhdGlvbk1ldGhvZCkpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlZC5lbWl0KHZlcmlmaWNhdGlvbk1ldGhvZCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbGFiZWw6ICdEZWxldGUnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGZldGNoOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnR3b0ZhY3Rvck1hbmFnZVNlcnZpY2UudmVyaWZpY2F0aW9uTWV0aG9kcyRcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgodmVyaWZpY2F0aW9uTWV0aG9kcykgPT4gKHtcbiAgICAgICAgICAgICAgZGF0YTogdmVyaWZpY2F0aW9uTWV0aG9kcy5maWx0ZXIoKHZlcmlmaWNhdGlvbk1ldGhvZCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB2ZXJpZmljYXRpb25NZXRob2QudHlwZSA9PT0gdGhpcy50eXBlO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG4iLCI8ZnMtbGlzdCBbY29uZmlnXT1cImxpc3RDb25maWdcIj5cbiAgPGZzLWxpc3QtY29sdW1uIGNsYXNzPVwiY29sLW5hbWVcIj5cbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdy50eXBlID09PSBWZXJpZmljYXRpb25NZXRob2RUeXBlLlNtc1wiPlxuICAgICAgICAgIDxmcy1jb3VudHJ5IFtjb2RlXT1cInJvdy5waG9uZUNvdW50cnlcIiBbc2hvd05hbWVdPVwiZmFsc2VcIj48L2ZzLWNvdW50cnk+IHt7cm93LnBob25lTnVtYmVyIHwgZnNQaG9uZX19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cudHlwZSA9PT0gVmVyaWZpY2F0aW9uTWV0aG9kVHlwZS5FbWFpbFwiPlxuICAgICAgICAgIHt7cm93LmVtYWlsfX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICBcbiAgICAgICAgPGFwcC1kZWZhdWx0ZWQgKm5nSWY9XCJyb3cuZGVmYXVsdFwiPjwvYXBwLWRlZmF1bHRlZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZnMtbGlzdC1jb2x1bW4+XG48L2ZzLWxpc3Q+Il19