@qbs-origin/origin-form 0.8.6 → 0.8.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/formly/formly-scan-id/formly-scan-id.component.mjs +326 -122
- package/esm2022/lib/formly/formly-sign/formly-sign.component.mjs +76 -47
- package/esm2022/lib/formly/formly-view-documents/formly-view-documents.component.mjs +11 -7
- package/esm2022/lib/origin-form.component.mjs +15 -1
- package/fesm2022/qbs-origin-origin-form.mjs +442 -198
- package/fesm2022/qbs-origin-origin-form.mjs.map +1 -1
- package/lib/formly/formly-scan-id/formly-scan-id.component.d.ts +44 -10
- package/lib/formly/formly-sign/formly-sign.component.d.ts +4 -0
- package/lib/formly/formly-view-documents/formly-view-documents.component.d.ts +1 -0
- package/package.json +2 -2
|
@@ -5,68 +5,95 @@ import { BaseFormlyStepComponent } from '../baseFormlyStepComponent';
|
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "../../origin-form-auth.service";
|
|
7
7
|
import * as i2 from "../../services/dialog.service";
|
|
8
|
-
import * as i3 from "@
|
|
8
|
+
import * as i3 from "@angular/common";
|
|
9
|
+
import * as i4 from "@qbs-origin/sign-lib";
|
|
10
|
+
import * as i5 from "@angular/material/button";
|
|
11
|
+
import * as i6 from "@angular/material/icon";
|
|
12
|
+
import * as i7 from "@angular/material/progress-bar";
|
|
9
13
|
export class FormlySignComponent extends BaseFormlyStepComponent {
|
|
10
14
|
constructor(authService, cdr, dialog) {
|
|
11
15
|
super(cdr);
|
|
12
16
|
this.authService = authService;
|
|
13
17
|
this.dialog = dialog;
|
|
14
18
|
this.canProceed = false;
|
|
19
|
+
this.isInitializing = true;
|
|
20
|
+
this.initError = null;
|
|
21
|
+
this.isSignComplete = false;
|
|
15
22
|
this._signButtonStyle = {};
|
|
16
23
|
this.configService = inject(ConfigService);
|
|
17
24
|
}
|
|
18
25
|
onInit() { }
|
|
19
26
|
async onPageSelectedAsync() {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
Object.keys(styleObj).forEach((key) => {
|
|
24
|
-
const camelKey = key.replace(/-([a-z])/g, (g) => g[1].toUpperCase());
|
|
25
|
-
camelCaseStyle[camelKey] = styleObj[key];
|
|
26
|
-
});
|
|
27
|
-
this._signButtonStyle = camelCaseStyle;
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
this._signButtonStyle = {};
|
|
31
|
-
}
|
|
32
|
-
// Reset component state when page is selected
|
|
33
|
-
this.canProceed = false;
|
|
34
|
-
this.config = await this.getConfig();
|
|
35
|
-
this.addPhoneNumbertoConfig();
|
|
36
|
-
this.config = {
|
|
37
|
-
...this.config,
|
|
38
|
-
ShowConfirm: this.stepData.config.showConfirm ?? false,
|
|
39
|
-
SignMode: this.stepData.config.companySign ?? false ? 'both' : 'client',
|
|
40
|
-
...(Object.keys(this.signButtonStyle).length > 0
|
|
41
|
-
? {
|
|
42
|
-
Styles: {
|
|
43
|
-
...(this.config.Styles || {}),
|
|
44
|
-
buttonStyles: this.signButtonStyle,
|
|
45
|
-
},
|
|
46
|
-
}
|
|
47
|
-
: {}),
|
|
48
|
-
};
|
|
49
|
-
if (this.config.Styles?.buttonStyles) {
|
|
50
|
-
console.log(`🧫 FormlySignComponent: Styles for sign button are sent:`, this.config.Styles.buttonStyles);
|
|
51
|
-
console.log('config', this.config);
|
|
52
|
-
}
|
|
53
|
-
console.log(`🔷 FormlySignComponent: Initializing sign component for step ${this.stepData.identifier}`);
|
|
54
|
-
//very important to trigger input parameter pass to SignLib component
|
|
27
|
+
this.isInitializing = true;
|
|
28
|
+
this.initError = null;
|
|
29
|
+
this.isSignComplete = false;
|
|
55
30
|
this.cdr.detectChanges();
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
31
|
+
try {
|
|
32
|
+
const styleObj = this.props?.['design']?.['.button-otpaction'];
|
|
33
|
+
if (styleObj) {
|
|
34
|
+
const camelCaseStyle = {};
|
|
35
|
+
Object.keys(styleObj).forEach((key) => {
|
|
36
|
+
const camelKey = key.replace(/-([a-z])/g, (g) => g[1].toUpperCase());
|
|
37
|
+
camelCaseStyle[camelKey] = styleObj[key];
|
|
38
|
+
});
|
|
39
|
+
this._signButtonStyle = camelCaseStyle;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
this._signButtonStyle = {};
|
|
43
|
+
}
|
|
44
|
+
// Reset component state when page is selected
|
|
45
|
+
this.canProceed = false;
|
|
46
|
+
this.config = await this.getConfig();
|
|
47
|
+
this.addPhoneNumbertoConfig();
|
|
48
|
+
this.config = {
|
|
49
|
+
...this.config,
|
|
50
|
+
ShowConfirm: this.stepData.config.showConfirm ?? false,
|
|
51
|
+
SignMode: this.stepData.config.companySign ?? false ? 'both' : 'client',
|
|
52
|
+
...(Object.keys(this.signButtonStyle).length > 0
|
|
53
|
+
? {
|
|
54
|
+
Styles: {
|
|
55
|
+
...(this.config.Styles || {}),
|
|
56
|
+
buttonStyles: this.signButtonStyle,
|
|
57
|
+
},
|
|
58
|
+
}
|
|
59
|
+
: {}),
|
|
60
|
+
};
|
|
61
|
+
if (this.config.Styles?.buttonStyles) {
|
|
62
|
+
console.log(`🧫 FormlySignComponent: Styles for sign button are sent:`, this.config.Styles.buttonStyles);
|
|
63
|
+
console.log('config', this.config);
|
|
64
|
+
}
|
|
65
|
+
console.log(`🔷 FormlySignComponent: Initializing sign component for step ${this.stepData.identifier}`);
|
|
66
|
+
this.isInitializing = false;
|
|
67
|
+
//very important to trigger input parameter pass to SignLib component
|
|
68
|
+
this.cdr.detectChanges();
|
|
69
|
+
// Wait a bit for ViewChild to be available and then initialize
|
|
70
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
71
|
+
// Ensure SignLibComponent is properly initialized
|
|
72
|
+
if (this.signLib) {
|
|
73
|
+
console.log(`🔷 FormlySignComponent: SignLibComponent found, calling ngOnInit for step ${this.stepData.identifier}`);
|
|
74
|
+
await this.signLib.ngOnInit();
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
console.warn(`🔷 FormlySignComponent: SignLibComponent not found for step ${this.stepData.identifier}`);
|
|
78
|
+
this.initError = 'Failed to initialize signature component';
|
|
79
|
+
this.cdr.detectChanges();
|
|
80
|
+
}
|
|
62
81
|
}
|
|
63
|
-
|
|
64
|
-
console.
|
|
82
|
+
catch (error) {
|
|
83
|
+
console.error('🔷 FormlySignComponent: Error during initialization:', error);
|
|
84
|
+
this.isInitializing = false;
|
|
85
|
+
this.initError = 'Failed to initialize signature component';
|
|
86
|
+
this.cdr.detectChanges();
|
|
65
87
|
}
|
|
66
88
|
}
|
|
67
89
|
async retryAsync() {
|
|
68
90
|
await this.onPageSelectedAsync();
|
|
69
91
|
}
|
|
92
|
+
async retryInit() {
|
|
93
|
+
this.initError = null;
|
|
94
|
+
this.isSignComplete = false;
|
|
95
|
+
await this.onPageSelectedAsync();
|
|
96
|
+
}
|
|
70
97
|
async getConfig() {
|
|
71
98
|
return {
|
|
72
99
|
AppDataId: this.props['appDataId'],
|
|
@@ -127,6 +154,8 @@ export class FormlySignComponent extends BaseFormlyStepComponent {
|
|
|
127
154
|
libEvent(event) {
|
|
128
155
|
if (event && event.toLowerCase() === 'success') {
|
|
129
156
|
this.canProceed = true;
|
|
157
|
+
this.isSignComplete = true;
|
|
158
|
+
this.cdr.detectChanges();
|
|
130
159
|
}
|
|
131
160
|
this.onEvent(event);
|
|
132
161
|
}
|
|
@@ -161,13 +190,13 @@ export class FormlySignComponent extends BaseFormlyStepComponent {
|
|
|
161
190
|
console.log('🔷 FormlySignComponent: Component cleanup completed');
|
|
162
191
|
}
|
|
163
192
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlySignComponent, deps: [{ token: i1.OriginFormAuthService }, { token: i0.ChangeDetectorRef }, { token: i2.DialogService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
164
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FormlySignComponent, selector: "formly-sign", viewQueries: [{ propertyName: "signLib", first: true, predicate: ["signLib"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<lib-sign #signLib
|
|
193
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FormlySignComponent, selector: "formly-sign", viewQueries: [{ propertyName: "signLib", first: true, predicate: ["signLib"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"sign-container\">\n <!-- Loading State -->\n <div class=\"sign-loading\" *ngIf=\"isInitializing && !initError\">\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n </div>\n\n <!-- Error State -->\n <div class=\"sign-error\" *ngIf=\"initError\" role=\"alert\" aria-live=\"assertive\">\n <mat-icon>error_outline</mat-icon>\n <span>{{ initError }}</span>\n <button mat-stroked-button (click)=\"retryInit()\">\n <mat-icon>refresh</mat-icon>\n Retry\n </button>\n </div>\n\n <!-- Sign Library -->\n <lib-sign #signLib\n [config]=\"config\"\n (event)=\"libEvent($event)\"\n [hidden]=\"isInitializing || initError\">\n </lib-sign>\n\n <!-- Success State -->\n <div class=\"sign-success\" *ngIf=\"isSignComplete\" role=\"status\" aria-live=\"polite\">\n <mat-icon class=\"sign-success__icon\">check_circle</mat-icon>\n </div>\n</div>\n", styles: [":host{display:block}.sign-loading{display:flex;flex-direction:column;align-items:center;gap:16px;padding:32px 16px}.sign-loading mat-progress-bar{width:100%;max-width:400px;border-radius:7px}.sign-error{display:flex;align-items:center;gap:12px;padding:12px 16px;margin:16px auto;max-width:600px;background:#fa896b14;border:1px solid #fa896b;border-radius:7px;color:#2a3547;text-align:left}.sign-error>mat-icon{color:#fa896b;flex-shrink:0}.sign-error>span{flex:1;font-size:14px}.sign-error button{display:flex;align-items:center;gap:6px;min-height:36px;border-radius:7px;flex-shrink:0}@media (max-width: 600px){.sign-error{flex-wrap:wrap}.sign-error button{width:100%;justify-content:center}}.sign-success{display:flex;flex-direction:column;align-items:center;gap:12px;padding:32px 16px;margin:16px auto;max-width:600px;background:#13deb914;border:1px solid #13deb9;border-radius:7px}.sign-success__icon{font-size:48px;width:48px;height:48px;color:#13deb9}:host-context(.dark-theme) .sign-error{background:#fa896b1a;color:#ffffffde}:host-context(.dark-theme) .sign-success{background:#13deb91a}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.SignLibComponent, selector: "lib-sign", inputs: ["config", "instanceId"], outputs: ["event"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }] }); }
|
|
165
194
|
}
|
|
166
195
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlySignComponent, decorators: [{
|
|
167
196
|
type: Component,
|
|
168
|
-
args: [{ selector: 'formly-sign', template: "<lib-sign #signLib
|
|
197
|
+
args: [{ selector: 'formly-sign', template: "<div class=\"sign-container\">\n <!-- Loading State -->\n <div class=\"sign-loading\" *ngIf=\"isInitializing && !initError\">\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n </div>\n\n <!-- Error State -->\n <div class=\"sign-error\" *ngIf=\"initError\" role=\"alert\" aria-live=\"assertive\">\n <mat-icon>error_outline</mat-icon>\n <span>{{ initError }}</span>\n <button mat-stroked-button (click)=\"retryInit()\">\n <mat-icon>refresh</mat-icon>\n Retry\n </button>\n </div>\n\n <!-- Sign Library -->\n <lib-sign #signLib\n [config]=\"config\"\n (event)=\"libEvent($event)\"\n [hidden]=\"isInitializing || initError\">\n </lib-sign>\n\n <!-- Success State -->\n <div class=\"sign-success\" *ngIf=\"isSignComplete\" role=\"status\" aria-live=\"polite\">\n <mat-icon class=\"sign-success__icon\">check_circle</mat-icon>\n </div>\n</div>\n", styles: [":host{display:block}.sign-loading{display:flex;flex-direction:column;align-items:center;gap:16px;padding:32px 16px}.sign-loading mat-progress-bar{width:100%;max-width:400px;border-radius:7px}.sign-error{display:flex;align-items:center;gap:12px;padding:12px 16px;margin:16px auto;max-width:600px;background:#fa896b14;border:1px solid #fa896b;border-radius:7px;color:#2a3547;text-align:left}.sign-error>mat-icon{color:#fa896b;flex-shrink:0}.sign-error>span{flex:1;font-size:14px}.sign-error button{display:flex;align-items:center;gap:6px;min-height:36px;border-radius:7px;flex-shrink:0}@media (max-width: 600px){.sign-error{flex-wrap:wrap}.sign-error button{width:100%;justify-content:center}}.sign-success{display:flex;flex-direction:column;align-items:center;gap:12px;padding:32px 16px;margin:16px auto;max-width:600px;background:#13deb914;border:1px solid #13deb9;border-radius:7px}.sign-success__icon{font-size:48px;width:48px;height:48px;color:#13deb9}:host-context(.dark-theme) .sign-error{background:#fa896b1a;color:#ffffffde}:host-context(.dark-theme) .sign-success{background:#13deb91a}\n"] }]
|
|
169
198
|
}], ctorParameters: () => [{ type: i1.OriginFormAuthService }, { type: i0.ChangeDetectorRef }, { type: i2.DialogService }], propDecorators: { signLib: [{
|
|
170
199
|
type: ViewChild,
|
|
171
200
|
args: ['signLib']
|
|
172
201
|
}] } });
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LXNpZ24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LXNpZ24vZm9ybWx5LXNpZ24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LXNpZ24vZm9ybWx5LXNpZ24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsTUFBTSxHQUdQLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUc1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7O0FBT3JFLE1BQU0sT0FBTyxtQkFDWCxTQUFRLHVCQUF1QjtJQVEvQixZQUNTLFdBQWtDLEVBQ3pDLEdBQXNCLEVBQ2QsTUFBcUI7UUFFN0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBSkosZ0JBQVcsR0FBWCxXQUFXLENBQXVCO1FBRWpDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFQL0IsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUNwQixxQkFBZ0IsR0FBOEIsRUFBRSxDQUFDO1FBRXpELGtCQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBT3RDLENBQUM7SUFFUSxNQUFNLEtBQUksQ0FBQztJQUVYLEtBQUssQ0FBQyxtQkFBbUI7UUFDaEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMvRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lB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O1FBRW5CLE9BQU8sQ0FBQyxHQUFHLENBQUMscURBQXFELENBQUMsQ0FBQztJQUNyRSxDQUFDOytHQTFNVSxtQkFBbUI7bUdBQW5CLG1CQUFtQiw4S0NwQmhDLG9GQUNBOzs0RkRtQmEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGFBQWE7c0pBUUQsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBWaWV3Q2hpbGQsXG4gIGluamVjdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTaWduTGliQ29tcG9uZW50IH0gZnJvbSAnQHFicy1vcmlnaW4vc2lnbi1saWInO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9vdGhlcnMvY29uZmlnLXNlcnZpY2UnO1xuaW1wb3J0IHsgT3JpZ2luRm9ybUF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vb3JpZ2luLWZvcm0tYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBGbHV4VHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9mb3Jtcy5tb2RlbCc7XG5pbXBvcnQgeyBCYXNlRm9ybWx5U3RlcENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2VGb3JtbHlTdGVwQ29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZm9ybWx5LXNpZ24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybWx5LXNpZ24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZm9ybWx5LXNpZ24uY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlTaWduQ29tcG9uZW50XG4gIGV4dGVuZHMgQmFzZUZvcm1seVN0ZXBDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3lcbntcbiAgQFZpZXdDaGlsZCgnc2lnbkxpYicpIHNpZ25MaWI6IFNpZ25MaWJDb21wb25lbnQ7XG4gIGNhblByb2NlZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc2lnbkJ1dHRvblN0eWxlOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gIHB1YmxpYyBjb25maWc6IGFueTtcbiAgY29uZmlnU2VydmljZSA9IGluamVjdChDb25maWdTZXJ2aWNlKTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGF1dGhTZXJ2aWNlOiBPcmlnaW5Gb3JtQXV0aFNlcnZpY2UsXG4gICAgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGRpYWxvZzogRGlhbG9nU2VydmljZVxuICApIHtcbiAgICBzdXBlcihjZHIpO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25Jbml0KCkge31cblxuICBvdmVycmlkZSBhc3luYyBvblBhZ2VTZWxlY3RlZEFzeW5jKCkge1xuICAgIGNvbnN0IHN0eWxlT2JqID0gdGhpcy5wcm9wcz8uWydkZXNpZ24nXT8uWycuYnV0dG9uLW90cGFjdGlvbiddO1xuICAgIGlmIChzdHlsZU9iaikge1xuICAgICAgY29uc3QgY2FtZWxDYXNlU3R5bGU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKHN0eWxlT2JqKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgY29uc3QgY2FtZWxLZXkgPSBrZXkucmVwbGFjZSgvLShbYS16XSkvZywgKGcpID0+IGdbMV0udG9VcHBlckNhc2UoKSk7XG4gICAgICAgIGNhbWVsQ2FzZVN0eWxlW2NhbWVsS2V5XSA9IHN0eWxlT2JqW2tleV07XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3NpZ25CdXR0b25TdHlsZSA9IGNhbWVsQ2FzZVN0eWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zaWduQnV0dG9uU3R5bGUgPSB7fTtcbiAgICB9XG4gICAgLy8gUmVzZXQgY29tcG9uZW50IHN0YXRlIHdoZW4gcGFnZSBpcyBzZWxlY3RlZFxuICAgIHRoaXMuY2FuUHJvY2VlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5jb25maWcgPSBhd2FpdCB0aGlzLmdldENvbmZpZygpO1xuICAgIHRoaXMuYWRkUGhvbmVOdW1iZXJ0b0NvbmZpZygpO1xuXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgIFNob3dDb25maXJtOiB0aGlzLnN0ZXBEYXRhLmNvbmZpZy5zaG93Q29uZmlybSA/PyBmYWxzZSxcbiAgICAgIFNpZ25Nb2RlOiB0aGlzLnN0ZXBEYXRhLmNvbmZpZy5jb21wYW55U2lnbiA/PyBmYWxzZSA/ICdib3RoJyA6ICdjbGllbnQnLFxuICAgICAgLi4uKE9iamVjdC5rZXlzKHRoaXMuc2lnbkJ1dHRvblN0eWxlKS5sZW5ndGggPiAwXG4gICAgICAgID8ge1xuICAgICAgICAgICAgU3R5bGVzOiB7XG4gICAgICAgICAgICAgIC4uLih0aGlzLmNvbmZpZy5TdHlsZXMgfHwge30pLFxuICAgICAgICAgICAgICBidXR0b25TdHlsZXM6IHRoaXMuc2lnbkJ1dHRvblN0eWxlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5jb25maWcuU3R5bGVzPy5idXR0b25TdHlsZXMpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBg8J+nqyBGb3JtbHlTaWduQ29tcG9uZW50OiBTdHlsZXMgZm9yIHNpZ24gYnV0dG9uIGFyZSBzZW50OmAsXG4gICAgICAgIHRoaXMuY29uZmlnLlN0eWxlcy5idXR0b25TdHlsZXNcbiAgICAgICk7XG4gICAgICBjb25zb2xlLmxvZygnY29uZmlnJywgdGhpcy5jb25maWcpO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYPCflLcgRm9ybWx5U2lnbkNvbXBvbmVudDogSW5pdGlhbGl6aW5nIHNpZ24gY29tcG9uZW50IGZvciBzdGVwICR7dGhpcy5zdGVwRGF0YS5pZGVudGlmaWVyfWBcbiAgICApO1xuXG4gICAgLy92ZXJ5IGltcG9ydGFudCB0byB0cmlnZ2VyIGlucHV0IHBhcmFtZXRlciBwYXNzIHRvIFNpZ25MaWIgY29tcG9uZW50XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgLy8gV2FpdCBhIGJpdCBmb3IgVmlld0NoaWxkIHRvIGJlIGF2YWlsYWJsZSBhbmQgdGhlbiBpbml0aWFsaXplXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgNTApKTtcblxuICAgIC8vIEVuc3VyZSBTaWduTGliQ29tcG9uZW50IGlzIHByb3Blcmx5IGluaXRpYWxpemVkXG4gICAgaWYgKHRoaXMuc2lnbkxpYikge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGDwn5S3IEZvcm1seVNpZ25Db21wb25lbnQ6IFNpZ25MaWJDb21wb25lbnQgZm91bmQsIGNhbGxpbmcgbmdPbkluaXQgZm9yIHN0ZXAgJHt0aGlzLnN0ZXBEYXRhLmlkZW50aWZpZXJ9YFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuc2lnbkxpYi5uZ09uSW5pdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGDwn5S3IEZvcm1seVNpZ25Db21wb25lbnQ6IFNpZ25MaWJDb21wb25lbnQgbm90IGZvdW5kIGZvciBzdGVwICR7dGhpcy5zdGVwRGF0YS5pZGVudGlmaWVyfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmV0cnlBc3luYygpIHtcbiAgICBhd2FpdCB0aGlzLm9uUGFnZVNlbGVjdGVkQXN5bmMoKTtcbiAgfVxuXG4gIGFzeW5jIGdldENvbmZpZygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgQXBwRGF0YUlkOiB0aGlzLnByb3BzWydhcHBEYXRhSWQnXSxcbiAgICAgIFN0ZXBJZDogdGhpcy5zdGVwRGF0YS5pZGVudGlmaWVyLFxuICAgICAgVG9rZW46IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VG9rZW4oKSxcbiAgICAgIEJhc2VVcmw6IHRoaXMuY29uZmlnU2VydmljZS5yZWFkQ29uZmlnKCkuYmFzZVVybEdhdGV3YXksXG4gICAgICBBdXRvU2lnbjogdGhpcy5zdGVwRGF0YS5pc1Zpc2libGUgPT09IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFkZFBob25lTnVtYmVydG9Db25maWcoKTogdm9pZCB7XG4gICAgY29uc3QgcGhvbmVLZXkgPSB0aGlzLnN0ZXBEYXRhLmNvbmZpZy5jb21wb25lbnRDb2xsZWN0ZWQ7XG5cbiAgICBpZiAocGhvbmVLZXkpIHtcbiAgICAgIGxldCBwaG9uZU51bWJlciA9IG51bGw7XG5cbiAgICAgIC8vIEdldCByZWZlcmVuY2VzIHRvIHBhcmVudCBmb3JtIGFuZCBtb2RlbCBmcm9tIHByb3BzXG4gICAgICBjb25zdCBwYXJlbnRGb3JtID0gdGhpcy5wcm9wc1sncGFyZW50Rm9ybSddO1xuICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLnByb3BzWydnZXRNb2RlbCddKCk7XG4gICAgICBjb25zdCBmbHV4ID0gdGhpcy5wcm9wc1snZmx1eCddO1xuXG4gICAgICAvLyBGaXJzdCB0cnkgdG8gZ2V0IGZyb20gcGFyZW50IGZvcm0gY29udHJvbCAoZm9yIHZhbGlkYXRlZCBwaG9uZSBudW1iZXJzKVxuICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBwYXJlbnRGb3JtPy5nZXQocGhvbmVLZXkpO1xuICAgICAgcGhvbmVOdW1iZXIgPSBmb3JtQ29udHJvbD8udmFsdWU7XG5cbiAgICAgIC8vIElmIG5vdCBmb3VuZCBpbiBmb3JtIGNvbnRyb2wsIHRyeSBmcm9tIG1vZGVsXG4gICAgICBpZiAoIXBob25lTnVtYmVyICYmIG1vZGVsICYmIG1vZGVsW3Bob25lS2V5XSkge1xuICAgICAgICBwaG9uZU51bWJlciA9IG1vZGVsW3Bob25lS2V5XTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwaG9uZU51bWJlciAmJiBwaG9uZUtleSA9PT0gJ3ZhbGlkYXRlZC1waG9uZScgJiYgZmx1eCkge1xuICAgICAgICBjb25zdCBwaG9uZVN0ZXAgPSBmbHV4LmZpbmQoXG4gICAgICAgICAgKHN0ZXA6IGFueSkgPT4gc3RlcC50eXBlID09PSBGbHV4VHlwZS5QaG9uZVxuICAgICAgICApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcGhvbmVTdGVwICYmXG4gICAgICAgICAgcGhvbmVTdGVwLmNvbmZpZyAmJlxuICAgICAgICAgIHBob25lU3RlcC5jb25maWcuY29tcG9uZW50Q29sbGVjdGVkXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsUGhvbmVLZXkgPSBwaG9uZVN0ZXAuY29uZmlnLmNvbXBvbmVudENvbGxlY3RlZDtcbiAgICAgICAgICAvLyBUcnkgZnJvbSBwYXJlbnQgZm9ybSBmaXJzdCwgdGhlbiBtb2RlbFxuICAgICAgICAgIHBob25lTnVtYmVyID1cbiAgICAgICAgICAgIHBhcmVudEZvcm0/LmdldChvcmlnaW5hbFBob25lS2V5KT8udmFsdWUgfHxcbiAgICAgICAgICAgIChtb2RlbCAmJiBtb2RlbFtvcmlnaW5hbFBob25lS2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBob25lTnVtYmVyKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgICAgIFBob25lTnVtYmVyOiBwaG9uZU51bWJlcixcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAn8J+UtyBGb3JtbHlTaWduQ29tcG9uZW50OiBObyBwaG9uZSBudW1iZXIgZm91bmQgZm9yIGtleTonLFxuICAgICAgICAgIHBob25lS2V5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ/CflLcgRm9ybWx5U2lnbkNvbXBvbmVudDogTm8gY29tcG9uZW50Q29sbGVjdGVkIGtleSBmb3VuZCBpbiBzdGVwIGNvbmZpZydcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgY2FuQWR2YW5jZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FuUHJvY2VlZCkge1xuICAgICAgdGhpcy5kaWFsb2cucG9wRXJyb3IoJ3NpZ25Db21wb25lbnQudmlld2ZpbGVzLndhaXRGb3JTaWduJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbGliRXZlbnQoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCAmJiBldmVudC50b0xvd2VyQ2FzZSgpID09PSAnc3VjY2VzcycpIHtcbiAgICAgIHRoaXMuY2FuUHJvY2VlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMub25FdmVudChldmVudCk7XG4gIH1cblxuICBnZXQgc2lnbkJ1dHRvblN0eWxlKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB0aGlzLl9zaWduQnV0dG9uU3R5bGU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICfwn5S3IEZvcm1seVNpZ25Db21wb25lbnQ6IERlc3Ryb3lpbmcgY29tcG9uZW50IGFuZCBjbGVhbmluZyB1cCBTaWduTGliQ29tcG9uZW50J1xuICAgICk7XG5cbiAgICAvLyBDbGVhbnVwIFNpZ25MaWJDb21wb25lbnQgaWYgaXQgZXhpc3RzXG4gICAgaWYgKHRoaXMuc2lnbkxpYikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQ2FsbCBkZXN0cm95IG1ldGhvZCBpZiBpdCBleGlzdHMgKGNoZWNrIGZvciB2YXJpb3VzIHBvc3NpYmxlIGNsZWFudXAgbWV0aG9kcylcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5zaWduTGliIGFzIGFueSkubmdPbkRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAodGhpcy5zaWduTGliIGFzIGFueSkubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKHRoaXMuc2lnbkxpYiBhcyBhbnkpLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAodGhpcy5zaWduTGliIGFzIGFueSkuZGVzdHJveSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiAodGhpcy5zaWduTGliIGFzIGFueSkuY2xlYW51cCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICh0aGlzLnNpZ25MaWIgYXMgYW55KS5jbGVhbnVwKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDbGVhciBhbnkgcmVmZXJlbmNlc1xuICAgICAgICAodGhpcy5zaWduTGliIGFzIGFueSkgPSBudWxsO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICfwn5S3IEZvcm1seVNpZ25Db21wb25lbnQ6IEVycm9yIGR1cmluZyBTaWduTGliQ29tcG9uZW50IGNsZWFudXA6JyxcbiAgICAgICAgICBlcnJvclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc2V0IGNvbXBvbmVudCBzdGF0ZVxuICAgIHRoaXMuY2FuUHJvY2VlZCA9IGZhbHNlO1xuICAgIHRoaXMuY29uZmlnID0gbnVsbDtcblxuICAgIGNvbnNvbGUubG9nKCfwn5S3IEZvcm1seVNpZ25Db21wb25lbnQ6IENvbXBvbmVudCBjbGVhbnVwIGNvbXBsZXRlZCcpO1xuICB9XG59XG4iLCI8bGliLXNpZ24gI3NpZ25MaWIgW2NvbmZpZ109XCJjb25maWdcIiAoZXZlbnQpPVwibGliRXZlbnQoJGV2ZW50KVwiPiA8L2xpYi1zaWduPlxuIl19
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LXNpZ24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LXNpZ24vZm9ybWx5LXNpZ24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LXNpZ24vZm9ybWx5LXNpZ24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsTUFBTSxHQUdQLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUc1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7OztBQU9yRSxNQUFNLE9BQU8sbUJBQ1gsU0FBUSx1QkFBdUI7SUFXL0IsWUFDUyxXQUFrQyxFQUN6QyxHQUFzQixFQUNkLE1BQXFCO1FBRTdCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUpKLGdCQUFXLEdBQVgsV0FBVyxDQUF1QjtRQUVqQyxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBVi9CLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDL0IsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFDaEMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDeEIscUJBQWdCLEdBQThCLEVBQUUsQ0FBQztRQUV6RCxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQU90QyxDQUFDO0lBRVEsTUFBTSxLQUFJLENBQUM7SUFFWCxLQUFLLENBQUMsbUJBQW1CO1FBQ2hDLElBQUksQ0FBQyxjQUFjLEdBQUcs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QmhDLGk2QkE0QkE7OzRGRFJhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxhQUFhO3NKQVFELE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgVmlld0NoaWxkLFxuICBpbmplY3QsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPbkRlc3Ryb3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2lnbkxpYkNvbXBvbmVudCB9IGZyb20gJ0BxYnMtb3JpZ2luL3NpZ24tbGliJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vb3RoZXJzL2NvbmZpZy1zZXJ2aWNlJztcbmltcG9ydCB7IE9yaWdpbkZvcm1BdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL29yaWdpbi1mb3JtLWF1dGguc2VydmljZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmx1eFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZm9ybXMubW9kZWwnO1xuaW1wb3J0IHsgQmFzZUZvcm1seVN0ZXBDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlRm9ybWx5U3RlcENvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Zvcm1seS1zaWduJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm1seS1zaWduLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2Zvcm1seS1zaWduLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWx5U2lnbkNvbXBvbmVudFxuICBleHRlbmRzIEJhc2VGb3JtbHlTdGVwQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25EZXN0cm95XG57XG4gIEBWaWV3Q2hpbGQoJ3NpZ25MaWInKSBzaWduTGliOiBTaWduTGliQ29tcG9uZW50O1xuICBjYW5Qcm9jZWVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzSW5pdGlhbGl6aW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgaW5pdEVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgaXNTaWduQ29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc2lnbkJ1dHRvblN0eWxlOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gIHB1YmxpYyBjb25maWc6IGFueTtcbiAgY29uZmlnU2VydmljZSA9IGluamVjdChDb25maWdTZXJ2aWNlKTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGF1dGhTZXJ2aWNlOiBPcmlnaW5Gb3JtQXV0aFNlcnZpY2UsXG4gICAgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGRpYWxvZzogRGlhbG9nU2VydmljZVxuICApIHtcbiAgICBzdXBlcihjZHIpO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25Jbml0KCkge31cblxuICBvdmVycmlkZSBhc3luYyBvblBhZ2VTZWxlY3RlZEFzeW5jKCkge1xuICAgIHRoaXMuaXNJbml0aWFsaXppbmcgPSB0cnVlO1xuICAgIHRoaXMuaW5pdEVycm9yID0gbnVsbDtcbiAgICB0aGlzLmlzU2lnbkNvbXBsZXRlID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0eWxlT2JqID0gdGhpcy5wcm9wcz8uWydkZXNpZ24nXT8uWycuYnV0dG9uLW90cGFjdGlvbiddO1xuICAgICAgaWYgKHN0eWxlT2JqKSB7XG4gICAgICAgIGNvbnN0IGNhbWVsQ2FzZVN0eWxlOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKHN0eWxlT2JqKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCBjYW1lbEtleSA9IGtleS5yZXBsYWNlKC8tKFthLXpdKS9nLCAoZykgPT5cbiAgICAgICAgICAgIGdbMV0udG9VcHBlckNhc2UoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgY2FtZWxDYXNlU3R5bGVbY2FtZWxLZXldID0gc3R5bGVPYmpba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3NpZ25CdXR0b25TdHlsZSA9IGNhbWVsQ2FzZVN0eWxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc2lnbkJ1dHRvblN0eWxlID0ge307XG4gICAgICB9XG4gICAgICAvLyBSZXNldCBjb21wb25lbnQgc3RhdGUgd2hlbiBwYWdlIGlzIHNlbGVjdGVkXG4gICAgICB0aGlzLmNhblByb2NlZWQgPSBmYWxzZTtcblxuICAgICAgdGhpcy5jb25maWcgPSBhd2FpdCB0aGlzLmdldENvbmZpZygpO1xuICAgICAgdGhpcy5hZGRQaG9uZU51bWJlcnRvQ29uZmlnKCk7XG5cbiAgICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgICAgU2hvd0NvbmZpcm06IHRoaXMuc3RlcERhdGEuY29uZmlnLnNob3dDb25maXJtID8/IGZhbHNlLFxuICAgICAgICBTaWduTW9kZTpcbiAgICAgICAgICB0aGlzLnN0ZXBEYXRhLmNvbmZpZy5jb21wYW55U2lnbiA/PyBmYWxzZSA/ICdib3RoJyA6ICdjbGllbnQnLFxuICAgICAgICAuLi4oT2JqZWN0LmtleXModGhpcy5zaWduQnV0dG9uU3R5bGUpLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgU3R5bGVzOiB7XG4gICAgICAgICAgICAgICAgLi4uKHRoaXMuY29uZmlnLlN0eWxlcyB8fCB7fSksXG4gICAgICAgICAgICAgICAgYnV0dG9uU3R5bGVzOiB0aGlzLnNpZ25CdXR0b25TdHlsZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLmNvbmZpZy5TdHlsZXM/LmJ1dHRvblN0eWxlcykge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBg8J+nqyBGb3JtbHlTaWduQ29tcG9uZW50OiBTdHlsZXMgZm9yIHNpZ24gYnV0dG9uIGFyZSBzZW50OmAsXG4gICAgICAgICAgdGhpcy5jb25maWcuU3R5bGVzLmJ1dHRvblN0eWxlc1xuICAgICAgICApO1xuICAgICAgICBjb25zb2xlLmxvZygnY29uZmlnJywgdGhpcy5jb25maWcpO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYPCflLcgRm9ybWx5U2lnbkNvbXBvbmVudDogSW5pdGlhbGl6aW5nIHNpZ24gY29tcG9uZW50IGZvciBzdGVwICR7dGhpcy5zdGVwRGF0YS5pZGVudGlmaWVyfWBcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuaXNJbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICAgIC8vdmVyeSBpbXBvcnRhbnQgdG8gdHJpZ2dlciBpbnB1dCBwYXJhbWV0ZXIgcGFzcyB0byBTaWduTGliIGNvbXBvbmVudFxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAvLyBXYWl0IGEgYml0IGZvciBWaWV3Q2hpbGQgdG8gYmUgYXZhaWxhYmxlIGFuZCB0aGVuIGluaXRpYWxpemVcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDUwKSk7XG5cbiAgICAgIC8vIEVuc3VyZSBTaWduTGliQ29tcG9uZW50IGlzIHByb3Blcmx5IGluaXRpYWxpemVkXG4gICAgICBpZiAodGhpcy5zaWduTGliKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGDwn5S3IEZvcm1seVNpZ25Db21wb25lbnQ6IFNpZ25MaWJDb21wb25lbnQgZm91bmQsIGNhbGxpbmcgbmdPbkluaXQgZm9yIHN0ZXAgJHt0aGlzLnN0ZXBEYXRhLmlkZW50aWZpZXJ9YFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLnNpZ25MaWIubmdPbkluaXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBg8J+UtyBGb3JtbHlTaWduQ29tcG9uZW50OiBTaWduTGliQ29tcG9uZW50IG5vdCBmb3VuZCBmb3Igc3RlcCAke3RoaXMuc3RlcERhdGEuaWRlbnRpZmllcn1gXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaW5pdEVycm9yID0gJ0ZhaWxlZCB0byBpbml0aWFsaXplIHNpZ25hdHVyZSBjb21wb25lbnQnO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICfwn5S3IEZvcm1seVNpZ25Db21wb25lbnQ6IEVycm9yIGR1cmluZyBpbml0aWFsaXphdGlvbjonLFxuICAgICAgICBlcnJvclxuICAgICAgKTtcbiAgICAgIHRoaXMuaXNJbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuaW5pdEVycm9yID0gJ0ZhaWxlZCB0byBpbml0aWFsaXplIHNpZ25hdHVyZSBjb21wb25lbnQnO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJldHJ5QXN5bmMoKSB7XG4gICAgYXdhaXQgdGhpcy5vblBhZ2VTZWxlY3RlZEFzeW5jKCk7XG4gIH1cblxuICBhc3luYyByZXRyeUluaXQoKSB7XG4gICAgdGhpcy5pbml0RXJyb3IgPSBudWxsO1xuICAgIHRoaXMuaXNTaWduQ29tcGxldGUgPSBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLm9uUGFnZVNlbGVjdGVkQXN5bmMoKTtcbiAgfVxuXG4gIGFzeW5jIGdldENvbmZpZygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgQXBwRGF0YUlkOiB0aGlzLnByb3BzWydhcHBEYXRhSWQnXSxcbiAgICAgIFN0ZXBJZDogdGhpcy5zdGVwRGF0YS5pZGVudGlmaWVyLFxuICAgICAgVG9rZW46IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VG9rZW4oKSxcbiAgICAgIEJhc2VVcmw6IHRoaXMuY29uZmlnU2VydmljZS5yZWFkQ29uZmlnKCkuYmFzZVVybEdhdGV3YXksXG4gICAgICBBdXRvU2lnbjogdGhpcy5zdGVwRGF0YS5pc1Zpc2libGUgPT09IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFkZFBob25lTnVtYmVydG9Db25maWcoKTogdm9pZCB7XG4gICAgY29uc3QgcGhvbmVLZXkgPSB0aGlzLnN0ZXBEYXRhLmNvbmZpZy5jb21wb25lbnRDb2xsZWN0ZWQ7XG5cbiAgICBpZiAocGhvbmVLZXkpIHtcbiAgICAgIGxldCBwaG9uZU51bWJlciA9IG51bGw7XG5cbiAgICAgIC8vIEdldCByZWZlcmVuY2VzIHRvIHBhcmVudCBmb3JtIGFuZCBtb2RlbCBmcm9tIHByb3BzXG4gICAgICBjb25zdCBwYXJlbnRGb3JtID0gdGhpcy5wcm9wc1sncGFyZW50Rm9ybSddO1xuICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLnByb3BzWydnZXRNb2RlbCddKCk7XG4gICAgICBjb25zdCBmbHV4ID0gdGhpcy5wcm9wc1snZmx1eCddO1xuXG4gICAgICAvLyBGaXJzdCB0cnkgdG8gZ2V0IGZyb20gcGFyZW50IGZvcm0gY29udHJvbCAoZm9yIHZhbGlkYXRlZCBwaG9uZSBudW1iZXJzKVxuICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBwYXJlbnRGb3JtPy5nZXQocGhvbmVLZXkpO1xuICAgICAgcGhvbmVOdW1iZXIgPSBmb3JtQ29udHJvbD8udmFsdWU7XG5cbiAgICAgIC8vIElmIG5vdCBmb3VuZCBpbiBmb3JtIGNvbnRyb2wsIHRyeSBmcm9tIG1vZGVsXG4gICAgICBpZiAoIXBob25lTnVtYmVyICYmIG1vZGVsICYmIG1vZGVsW3Bob25lS2V5XSkge1xuICAgICAgICBwaG9uZU51bWJlciA9IG1vZGVsW3Bob25lS2V5XTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwaG9uZU51bWJlciAmJiBwaG9uZUtleSA9PT0gJ3ZhbGlkYXRlZC1waG9uZScgJiYgZmx1eCkge1xuICAgICAgICBjb25zdCBwaG9uZVN0ZXAgPSBmbHV4LmZpbmQoXG4gICAgICAgICAgKHN0ZXA6IGFueSkgPT4gc3RlcC50eXBlID09PSBGbHV4VHlwZS5QaG9uZVxuICAgICAgICApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcGhvbmVTdGVwICYmXG4gICAgICAgICAgcGhvbmVTdGVwLmNvbmZpZyAmJlxuICAgICAgICAgIHBob25lU3RlcC5jb25maWcuY29tcG9uZW50Q29sbGVjdGVkXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsUGhvbmVLZXkgPSBwaG9uZVN0ZXAuY29uZmlnLmNvbXBvbmVudENvbGxlY3RlZDtcbiAgICAgICAgICAvLyBUcnkgZnJvbSBwYXJlbnQgZm9ybSBmaXJzdCwgdGhlbiBtb2RlbFxuICAgICAgICAgIHBob25lTnVtYmVyID1cbiAgICAgICAgICAgIHBhcmVudEZvcm0/LmdldChvcmlnaW5hbFBob25lS2V5KT8udmFsdWUgfHxcbiAgICAgICAgICAgIChtb2RlbCAmJiBtb2RlbFtvcmlnaW5hbFBob25lS2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBob25lTnVtYmVyKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgICAgIFBob25lTnVtYmVyOiBwaG9uZU51bWJlcixcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAn8J+UtyBGb3JtbHlTaWduQ29tcG9uZW50OiBObyBwaG9uZSBudW1iZXIgZm91bmQgZm9yIGtleTonLFxuICAgICAgICAgIHBob25lS2V5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ/CflLcgRm9ybWx5U2lnbkNvbXBvbmVudDogTm8gY29tcG9uZW50Q29sbGVjdGVkIGtleSBmb3VuZCBpbiBzdGVwIGNvbmZpZydcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgY2FuQWR2YW5jZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FuUHJvY2VlZCkge1xuICAgICAgdGhpcy5kaWFsb2cucG9wRXJyb3IoJ3NpZ25Db21wb25lbnQudmlld2ZpbGVzLndhaXRGb3JTaWduJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbGliRXZlbnQoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCAmJiBldmVudC50b0xvd2VyQ2FzZSgpID09PSAnc3VjY2VzcycpIHtcbiAgICAgIHRoaXMuY2FuUHJvY2VlZCA9IHRydWU7XG4gICAgICB0aGlzLmlzU2lnbkNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgdGhpcy5vbkV2ZW50KGV2ZW50KTtcbiAgfVxuXG4gIGdldCBzaWduQnV0dG9uU3R5bGUoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25CdXR0b25TdHlsZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJ/CflLcgRm9ybWx5U2lnbkNvbXBvbmVudDogRGVzdHJveWluZyBjb21wb25lbnQgYW5kIGNsZWFuaW5nIHVwIFNpZ25MaWJDb21wb25lbnQnXG4gICAgKTtcblxuICAgIC8vIENsZWFudXAgU2lnbkxpYkNvbXBvbmVudCBpZiBpdCBleGlzdHNcbiAgICBpZiAodGhpcy5zaWduTGliKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBDYWxsIGRlc3Ryb3kgbWV0aG9kIGlmIGl0IGV4aXN0cyAoY2hlY2sgZm9yIHZhcmlvdXMgcG9zc2libGUgY2xlYW51cCBtZXRob2RzKVxuICAgICAgICBpZiAodHlwZW9mICh0aGlzLnNpZ25MaWIgYXMgYW55KS5uZ09uRGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICh0aGlzLnNpZ25MaWIgYXMgYW55KS5uZ09uRGVzdHJveSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiAodGhpcy5zaWduTGliIGFzIGFueSkuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICh0aGlzLnNpZ25MaWIgYXMgYW55KS5kZXN0cm95KCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mICh0aGlzLnNpZ25MaWIgYXMgYW55KS5jbGVhbnVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgKHRoaXMuc2lnbkxpYiBhcyBhbnkpLmNsZWFudXAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsZWFyIGFueSByZWZlcmVuY2VzXG4gICAgICAgICh0aGlzLnNpZ25MaWIgYXMgYW55KSA9IG51bGw7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ/CflLcgRm9ybWx5U2lnbkNvbXBvbmVudDogRXJyb3IgZHVyaW5nIFNpZ25MaWJDb21wb25lbnQgY2xlYW51cDonLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgY29tcG9uZW50IHN0YXRlXG4gICAgdGhpcy5jYW5Qcm9jZWVkID0gZmFsc2U7XG4gICAgdGhpcy5jb25maWcgPSBudWxsO1xuXG4gICAgY29uc29sZS5sb2coJ/CflLcgRm9ybWx5U2lnbkNvbXBvbmVudDogQ29tcG9uZW50IGNsZWFudXAgY29tcGxldGVkJyk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzaWduLWNvbnRhaW5lclwiPlxuICA8IS0tIExvYWRpbmcgU3RhdGUgLS0+XG4gIDxkaXYgY2xhc3M9XCJzaWduLWxvYWRpbmdcIiAqbmdJZj1cImlzSW5pdGlhbGl6aW5nICYmICFpbml0RXJyb3JcIj5cbiAgICA8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLWJhcj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBFcnJvciBTdGF0ZSAtLT5cbiAgPGRpdiBjbGFzcz1cInNpZ24tZXJyb3JcIiAqbmdJZj1cImluaXRFcnJvclwiIHJvbGU9XCJhbGVydFwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiPlxuICAgIDxtYXQtaWNvbj5lcnJvcl9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICA8c3Bhbj57eyBpbml0RXJyb3IgfX08L3NwYW4+XG4gICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cInJldHJ5SW5pdCgpXCI+XG4gICAgICA8bWF0LWljb24+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICBSZXRyeVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIFNpZ24gTGlicmFyeSAtLT5cbiAgPGxpYi1zaWduICNzaWduTGliXG4gICAgICAgICAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgICAgICAgICAoZXZlbnQpPVwibGliRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbaGlkZGVuXT1cImlzSW5pdGlhbGl6aW5nIHx8IGluaXRFcnJvclwiPlxuICA8L2xpYi1zaWduPlxuXG4gIDwhLS0gU3VjY2VzcyBTdGF0ZSAtLT5cbiAgPGRpdiBjbGFzcz1cInNpZ24tc3VjY2Vzc1wiICpuZ0lmPVwiaXNTaWduQ29tcGxldGVcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwic2lnbi1zdWNjZXNzX19pY29uXCI+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -7,7 +7,9 @@ import * as i1 from "../../services/applicationData.service";
|
|
|
7
7
|
import * as i2 from "../../services/dialog.service";
|
|
8
8
|
import * as i3 from "@angular/common";
|
|
9
9
|
import * as i4 from "ng2-pdf-viewer";
|
|
10
|
-
import * as i5 from "@angular/material/
|
|
10
|
+
import * as i5 from "@angular/material/button";
|
|
11
|
+
import * as i6 from "@angular/material/icon";
|
|
12
|
+
import * as i7 from "@angular/material/progress-bar";
|
|
11
13
|
export class FormlyViewDocumentsComponent extends BaseFormlyControlComponent {
|
|
12
14
|
constructor(appDataService, dialog, cdr) {
|
|
13
15
|
super(cdr);
|
|
@@ -17,6 +19,7 @@ export class FormlyViewDocumentsComponent extends BaseFormlyControlComponent {
|
|
|
17
19
|
this.currentIndex = 0;
|
|
18
20
|
this.currentPdf = '';
|
|
19
21
|
this.cachedDocuments = {};
|
|
22
|
+
this.docError = null;
|
|
20
23
|
}
|
|
21
24
|
onInit() {
|
|
22
25
|
if (this.isDisplayMode === true) {
|
|
@@ -46,7 +49,7 @@ export class FormlyViewDocumentsComponent extends BaseFormlyControlComponent {
|
|
|
46
49
|
},
|
|
47
50
|
error: (err) => {
|
|
48
51
|
this.isLoading = false;
|
|
49
|
-
this.
|
|
52
|
+
this.docError = this.getErrorTranslationMessage('failToView');
|
|
50
53
|
this.cdr.detectChanges();
|
|
51
54
|
},
|
|
52
55
|
});
|
|
@@ -69,6 +72,7 @@ export class FormlyViewDocumentsComponent extends BaseFormlyControlComponent {
|
|
|
69
72
|
return list;
|
|
70
73
|
}
|
|
71
74
|
retry() {
|
|
75
|
+
this.docError = null;
|
|
72
76
|
this.getDocuments();
|
|
73
77
|
}
|
|
74
78
|
onPageSelected() {
|
|
@@ -105,8 +109,8 @@ export class FormlyViewDocumentsComponent extends BaseFormlyControlComponent {
|
|
|
105
109
|
}
|
|
106
110
|
},
|
|
107
111
|
error: (err) => {
|
|
108
|
-
this.dialog.popErrorTranslation(this.controlData.errorsTranslations, this.langIso, 'failToView');
|
|
109
112
|
this.isLoading = false;
|
|
113
|
+
this.docError = this.getErrorTranslationMessage('failToView');
|
|
110
114
|
this.cdr.detectChanges();
|
|
111
115
|
},
|
|
112
116
|
});
|
|
@@ -157,8 +161,8 @@ export class FormlyViewDocumentsComponent extends BaseFormlyControlComponent {
|
|
|
157
161
|
});
|
|
158
162
|
},
|
|
159
163
|
error: (err) => {
|
|
160
|
-
this.dialog.popErrorTranslation(this.controlData.errorsTranslations, this.langIso, 'failToView');
|
|
161
164
|
this.isLoading = false;
|
|
165
|
+
this.docError = this.getErrorTranslationMessage('failToView');
|
|
162
166
|
this.cdr.detectChanges();
|
|
163
167
|
},
|
|
164
168
|
});
|
|
@@ -236,10 +240,10 @@ export class FormlyViewDocumentsComponent extends BaseFormlyControlComponent {
|
|
|
236
240
|
}
|
|
237
241
|
}
|
|
238
242
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyViewDocumentsComponent, deps: [{ token: i1.ApplicationDataService }, { token: i2.DialogService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
239
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FormlyViewDocumentsComponent, selector: "app-formly-view-documents", usesInheritance: true, ngImport: i0, template: "<
|
|
243
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FormlyViewDocumentsComponent, selector: "app-formly-view-documents", usesInheritance: true, ngImport: i0, template: "<div class=\"view-docs-container\">\n <!-- Empty State -->\n <div class=\"view-docs-empty\" *ngIf=\"!isLoading && (!documents || documents.length === 0) && !docError\">\n <mat-icon class=\"empty-icon\">description</mat-icon>\n <p class=\"empty-text\">{{ getErrorTranslationMessage(\"noDocumentsToShow\") }}</p>\n </div>\n\n <!-- Error State -->\n <div class=\"view-docs-error\" *ngIf=\"docError\" role=\"alert\" aria-live=\"assertive\">\n <mat-icon>error_outline</mat-icon>\n <span>{{ docError }}</span>\n <button mat-stroked-button (click)=\"retry()\" class=\"retry-btn\">\n <mat-icon>refresh</mat-icon>\n Retry\n </button>\n </div>\n\n <!-- Loading State -->\n <div class=\"view-docs-loading\" *ngIf=\"isLoading\">\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n </div>\n\n <!-- Document Viewer -->\n <div class=\"view-docs-content\" *ngIf=\"!isLoading && documents && documents.length > 0 && !docError\">\n <!-- Navigation Bar -->\n <div class=\"doc-nav\">\n <button mat-icon-button\n (click)=\"prevDocument()\"\n [disabled]=\"!canGoBack\"\n class=\"doc-nav__btn\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <div class=\"doc-nav__info\">\n <p class=\"doc-nav__name\" *ngIf=\"currentDocument\">{{ currentDocument.name }}</p>\n <p class=\"doc-nav__counter\">{{ currentIndex + 1 }} / {{ documents.length }}</p>\n </div>\n <button mat-icon-button\n (click)=\"nextDocument()\"\n [disabled]=\"!canGoNext\"\n class=\"doc-nav__btn\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n\n <!-- PDF Viewer -->\n <div class=\"doc-viewer\">\n <pdf-viewer [src]=\"currentPdf\"\n [render-text]=\"true\"\n [original-size]=\"false\"\n [external-link-target]=\"'blank'\"\n class=\"pdf-viewer\"></pdf-viewer>\n </div>\n </div>\n</div>\n", styles: ["@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.view-docs-container{max-width:800px;margin:0 auto 16px;padding:24px;background-color:#fff;border-radius:7px;box-shadow:0 2px 12px #00000014}@media (max-width: 600px){.view-docs-container{padding:16px}}.view-docs-empty{animation:fadeIn .3s ease-out;display:flex;flex-direction:column;align-items:center;gap:12px;padding:48px 16px;text-align:center}.empty-icon{font-size:48px;width:48px;height:48px;color:#a1aab4}.empty-text{font-size:14px;color:#5a6a85;margin:0}.view-docs-error{display:flex;align-items:center;gap:12px;padding:12px 16px;background:#fa896b14;border:1px solid #fa896b;border-radius:7px;color:#2a3547;text-align:left}.view-docs-error>mat-icon{color:#fa896b;flex-shrink:0}.view-docs-error>span{flex:1;font-size:14px}@media (max-width: 600px){.view-docs-error{flex-wrap:wrap}.view-docs-error .retry-btn{width:100%;justify-content:center}}.retry-btn{display:flex;align-items:center;gap:6px;min-height:36px;border-radius:7px;flex-shrink:0}.view-docs-loading{display:flex;flex-direction:column;align-items:center;gap:16px;padding:32px 0}.view-docs-loading mat-progress-bar{width:100%;border-radius:7px}.view-docs-content{animation:fadeIn .3s ease-out}.doc-nav{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:16px}@media (max-width: 600px){.doc-nav{gap:8px}}.doc-nav__btn{color:#5d87ff;flex-shrink:0}.doc-nav__btn:disabled{color:#ccc}.doc-nav__info{display:flex;flex-direction:column;align-items:center;min-width:0}.doc-nav__name{font-size:14px;font-weight:600;color:#2a3547;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:400px}@media (max-width: 600px){.doc-nav__name{max-width:200px;font-size:13px}}.doc-nav__counter{font-size:12px;color:#a1aab4;margin:2px 0 0}.doc-viewer{border:1px solid #e5eaef;border-radius:7px;overflow:hidden}.pdf-viewer{width:100%;height:70vh;max-height:900px;min-height:400px;overflow:auto}@media (max-width: 600px){.pdf-viewer{height:60vh;min-height:300px}}:host-context(.dark-theme) .view-docs-container{background-color:#2a3447;box-shadow:0 2px 12px #0000004d}:host-context(.dark-theme) .doc-nav__name{color:#ffffffde}:host-context(.dark-theme) .doc-nav__counter{color:#fff6}:host-context(.dark-theme) .doc-nav__btn{color:#5d87ff}:host-context(.dark-theme) .doc-nav__btn:disabled{color:#465670}:host-context(.dark-theme) .empty-icon{color:#fff6}:host-context(.dark-theme) .empty-text{color:#fff9}:host-context(.dark-theme) .doc-viewer{border-color:#333f55}:host-context(.dark-theme) .view-docs-error{background:#fa896b1a;color:#ffffffde}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.PdfViewerComponent, selector: "pdf-viewer", inputs: ["src", "c-maps-url", "page", "render-text", "render-text-mode", "original-size", "show-all", "stick-to-page", "zoom", "zoom-scale", "rotation", "external-link-target", "autoresize", "fit-to-page", "show-borders"], outputs: ["after-load-complete", "page-rendered", "pages-initialized", "text-layer-rendered", "error", "on-progress", "pageChange"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }] }); }
|
|
240
244
|
}
|
|
241
245
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyViewDocumentsComponent, decorators: [{
|
|
242
246
|
type: Component,
|
|
243
|
-
args: [{ selector: 'app-formly-view-documents', template: "<
|
|
247
|
+
args: [{ selector: 'app-formly-view-documents', template: "<div class=\"view-docs-container\">\n <!-- Empty State -->\n <div class=\"view-docs-empty\" *ngIf=\"!isLoading && (!documents || documents.length === 0) && !docError\">\n <mat-icon class=\"empty-icon\">description</mat-icon>\n <p class=\"empty-text\">{{ getErrorTranslationMessage(\"noDocumentsToShow\") }}</p>\n </div>\n\n <!-- Error State -->\n <div class=\"view-docs-error\" *ngIf=\"docError\" role=\"alert\" aria-live=\"assertive\">\n <mat-icon>error_outline</mat-icon>\n <span>{{ docError }}</span>\n <button mat-stroked-button (click)=\"retry()\" class=\"retry-btn\">\n <mat-icon>refresh</mat-icon>\n Retry\n </button>\n </div>\n\n <!-- Loading State -->\n <div class=\"view-docs-loading\" *ngIf=\"isLoading\">\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n </div>\n\n <!-- Document Viewer -->\n <div class=\"view-docs-content\" *ngIf=\"!isLoading && documents && documents.length > 0 && !docError\">\n <!-- Navigation Bar -->\n <div class=\"doc-nav\">\n <button mat-icon-button\n (click)=\"prevDocument()\"\n [disabled]=\"!canGoBack\"\n class=\"doc-nav__btn\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <div class=\"doc-nav__info\">\n <p class=\"doc-nav__name\" *ngIf=\"currentDocument\">{{ currentDocument.name }}</p>\n <p class=\"doc-nav__counter\">{{ currentIndex + 1 }} / {{ documents.length }}</p>\n </div>\n <button mat-icon-button\n (click)=\"nextDocument()\"\n [disabled]=\"!canGoNext\"\n class=\"doc-nav__btn\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n\n <!-- PDF Viewer -->\n <div class=\"doc-viewer\">\n <pdf-viewer [src]=\"currentPdf\"\n [render-text]=\"true\"\n [original-size]=\"false\"\n [external-link-target]=\"'blank'\"\n class=\"pdf-viewer\"></pdf-viewer>\n </div>\n </div>\n</div>\n", styles: ["@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.view-docs-container{max-width:800px;margin:0 auto 16px;padding:24px;background-color:#fff;border-radius:7px;box-shadow:0 2px 12px #00000014}@media (max-width: 600px){.view-docs-container{padding:16px}}.view-docs-empty{animation:fadeIn .3s ease-out;display:flex;flex-direction:column;align-items:center;gap:12px;padding:48px 16px;text-align:center}.empty-icon{font-size:48px;width:48px;height:48px;color:#a1aab4}.empty-text{font-size:14px;color:#5a6a85;margin:0}.view-docs-error{display:flex;align-items:center;gap:12px;padding:12px 16px;background:#fa896b14;border:1px solid #fa896b;border-radius:7px;color:#2a3547;text-align:left}.view-docs-error>mat-icon{color:#fa896b;flex-shrink:0}.view-docs-error>span{flex:1;font-size:14px}@media (max-width: 600px){.view-docs-error{flex-wrap:wrap}.view-docs-error .retry-btn{width:100%;justify-content:center}}.retry-btn{display:flex;align-items:center;gap:6px;min-height:36px;border-radius:7px;flex-shrink:0}.view-docs-loading{display:flex;flex-direction:column;align-items:center;gap:16px;padding:32px 0}.view-docs-loading mat-progress-bar{width:100%;border-radius:7px}.view-docs-content{animation:fadeIn .3s ease-out}.doc-nav{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:16px}@media (max-width: 600px){.doc-nav{gap:8px}}.doc-nav__btn{color:#5d87ff;flex-shrink:0}.doc-nav__btn:disabled{color:#ccc}.doc-nav__info{display:flex;flex-direction:column;align-items:center;min-width:0}.doc-nav__name{font-size:14px;font-weight:600;color:#2a3547;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:400px}@media (max-width: 600px){.doc-nav__name{max-width:200px;font-size:13px}}.doc-nav__counter{font-size:12px;color:#a1aab4;margin:2px 0 0}.doc-viewer{border:1px solid #e5eaef;border-radius:7px;overflow:hidden}.pdf-viewer{width:100%;height:70vh;max-height:900px;min-height:400px;overflow:auto}@media (max-width: 600px){.pdf-viewer{height:60vh;min-height:300px}}:host-context(.dark-theme) .view-docs-container{background-color:#2a3447;box-shadow:0 2px 12px #0000004d}:host-context(.dark-theme) .doc-nav__name{color:#ffffffde}:host-context(.dark-theme) .doc-nav__counter{color:#fff6}:host-context(.dark-theme) .doc-nav__btn{color:#5d87ff}:host-context(.dark-theme) .doc-nav__btn:disabled{color:#465670}:host-context(.dark-theme) .empty-icon{color:#fff6}:host-context(.dark-theme) .empty-text{color:#fff9}:host-context(.dark-theme) .doc-viewer{border-color:#333f55}:host-context(.dark-theme) .view-docs-error{background:#fa896b1a;color:#ffffffde}\n"] }]
|
|
244
248
|
}], ctorParameters: () => [{ type: i1.ApplicationDataService }, { type: i2.DialogService }, { type: i0.ChangeDetectorRef }] });
|
|
245
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LXZpZXctZG9jdW1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29yaWdpbi1mb3JtL3NyYy9saWIvZm9ybWx5L2Zvcm1seS12aWV3LWRvY3VtZW50cy9mb3JtbHktdmlldy1kb2N1bWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LXZpZXctZG9jdW1lbnRzL2Zvcm1seS12aWV3LWRvY3VtZW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUk3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7OztBQU8zRSxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsMEJBQTBCO0lBVzFFLFlBQ1UsY0FBc0MsRUFDdEMsTUFBcUIsRUFDN0IsR0FBc0I7UUFFdEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBSkgsbUJBQWMsR0FBZCxjQUFjLENBQXdCO1FBQ3RDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFaL0IsY0FBUyxHQUF3QixFQUFFLENBQUM7UUFFcEMsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFJekIsZUFBVSxHQUFRLEVBQUUsQ0FBQztRQUVyQixvQkFBZSxHQUFRLEVBQUUsQ0FBQztJQVExQixDQUFDO0lBRVEsTUFBTTtRQUNiLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFF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dCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwbGljYXRpb25EYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7IEFwaURvY3VtZW50UmVxdWVzdCwgQXBwbGljYXRpb25HZXRHZW5lcmF0ZWREb2N1bWVudHNEdG8sIENvbnZlcnREb2N1bWVudFRvUGRmUmVxdWVzdCwgR2VuZXJhdGVkRG9jdW1lbnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvYXBwbGljYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi9vdGhlcnMvdXRpbHMnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJhc2VGb3JtbHlDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZUZvcm1seUNvbnRyb2xDb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZm9ybWx5LXZpZXctZG9jdW1lbnRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm1seS12aWV3LWRvY3VtZW50cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9mb3JtbHktdmlldy1kb2N1bWVudHMuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlWaWV3RG9jdW1lbnRzQ29tcG9uZW50IGV4dGVuZHMgQmFzZUZvcm1seUNvbnRyb2xDb21wb25lbnQge1xuICBkb2N1bWVudHM6IEdlbmVyYXRlZERvY3VtZW50W10gPSBbXTtcbiAgaXNEb3dubG9hZGluZzogYm9vbGVhbjtcbiAgY3VycmVudEluZGV4OiBudW1iZXIgPSAwO1xuICBjYW5Hb0JhY2s6IGJvb2xlYW47XG4gIGNhbkdvTmV4dDogYm9vbGVhbjtcblxuICBjdXJyZW50UGRmOiBhbnkgPSAnJztcbiAgY3VycmVudERvY3VtZW50OiBHZW5lcmF0ZWREb2N1bWVudDtcbiAgY2FjaGVkRG9jdW1lbnRzOiBhbnkgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwcERhdGFTZXJ2aWNlOiBBcHBsaWNhdGlvbkRhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlhbG9nOiBEaWFsb2dTZXJ2aWNlLFxuICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgc3VwZXIoY2RyKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG9uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5pc0Rpc3BsYXlNb2RlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmdldERvY3VtZW50cygpO1xuICAgIH1cbiAgfVxuXG4gIGdldERvY3VtZW50cygpIHtcbiAgICBjb25zdCBjb25maWdEb2NzID0gdGhpcy5jb250cm9sRGF0YT8uc3BlY2lmaWNDb250cm9sRGF0YT8uZG9jdW1lbnRzO1xuICAgIGlmIChjb25maWdEb2NzKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICBsZXQgY21kOiBBcHBsaWNhdGlvbkdldEdlbmVyYXRlZERvY3VtZW50c0R0byA9IHtcbiAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmFwcERhdGFJZCxcbiAgICAgICAgY29udHJvbElkOiB0aGlzLmNvbnRyb2xEYXRhLmlkZW50aWZpZXIsXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHRoaXMuaXNEaXNwbGF5TW9kZSxcbiAgICAgICAgYXBwQ29uZmlndXJhdGlvblVVSUQ6IHRoaXMuYXBwSWQsXG4gICAgICAgIGVudmlyb25tZW50OiB0aGlzLmVudixcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuYXBwRGF0YVNlcnZpY2UuZ2V0R2VuZXJhdGVEb2N1bWVudHMoY21kKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmRvY3VtZW50cyA9IHRoaXMub3JkZXJEb2N1bWVudHNBc0NvbmZpZ3VyZWQocmVzdWx0KTtcbiAgICAgICAgICBpZiAodGhpcy5kb2N1bWVudHMgJiYgdGhpcy5kb2N1bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zaG93RG9jdW1lbnQodGhpcy5kb2N1bWVudHNbMF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNoZWNrQ2FuR29CYWNrTmV4dCgpO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5kaWFsb2cucG9wRXJyb3JUcmFuc2xhdGlvbihcbiAgICAgICAgICAgIHRoaXMuY29udHJvbERhdGEuZXJyb3JzVHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgdGhpcy5sYW5nSXNvLFxuICAgICAgICAgICAgJ2ZhaWxUb1ZpZXcnXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvcmRlckRvY3VtZW50c0FzQ29uZmlndXJlZChcbiAgICBkb2N1bWVudHM6IEdlbmVyYXRlZERvY3VtZW50W11cbiAgKTogR2VuZXJhdGVkRG9jdW1lbnRbXSB7XG4gICAgbGV0IGxpc3Q6IEdlbmVyYXRlZERvY3VtZW50W10gPSBbXTtcbiAgICBpZiAoZG9jdW1lbnRzKSB7XG4gICAgICBjb25zdCBjb25maWd1cmFkRG9jdW1lbnRzID1cbiAgICAgICAgdGhpcy5jb250cm9sRGF0YT8uc3BlY2lmaWNDb250cm9sRGF0YT8uZG9jdW1lbnRzO1xuICAgICAgaWYgKGNvbmZpZ3VyYWREb2N1bWVudHMpIHtcbiAgICAgICAgY29uZmlndXJhZERvY3VtZW50cy5mb3JFYWNoKChkOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBmb3VuZCA9IGRvY3VtZW50cy5maW5kKChmOiBhbnkpID0+IGYuZG9jdW1lbnRJZCA9PT0gZC5pZCk7XG4gICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICBsaXN0LnB1c2goZm91bmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgcmV0cnkoKSB7XG4gICAgdGhpcy5nZXREb2N1bWVudHMoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG9uUGFnZVNlbGVjdGVkKCkge1xuICAgIHRoaXMuZ2V0RG9jdW1lbnRzKCk7XG4gIH1cblxuICBhc3luYyBzaG93RG9jdW1lbnQoZG9jOiBHZW5lcmF0ZWREb2N1bWVudCkge1xuICAgIHRoaXMuY3VycmVudERvY3VtZW50ID0gZG9jO1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuY2FjaGVkRG9jdW1lbnRzW2RvYy5kb2N1bWVudElkXTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQZGYgPSBjYWNoZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIGlmIChkb2MuaXNBcGlEb2N1bWVudCA9PT0gdHJ1ZSkge1xuICAgICAgICBsZXQgYXBpUmVxdWVzdDogQXBpRG9jdW1lbnRSZXF1ZXN0ID0ge1xuICAgICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhSWQsXG4gICAgICAgICAgZG9jdW1lbnRJZDogZG9jLmRvY3VtZW50SWQsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYXBwRGF0YVNlcnZpY2UuZG9Eb2N1bWVudFJlcXVlc3QoYXBpUmVxdWVzdCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoZG9jcykgPT4ge1xuICAgICAgICAgICAgaWYgKGRvY3MgJiYgZG9jcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGRvY3MuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGI2NCA9IFV0aWxzLmJhc2U2NHRvQmxvYihkLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmxvYlRvQXJyYXlCdWZmZXIoYjY0KS50aGVuKChyKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZC5kb2N1bWVudElkID09PSBkb2MuZG9jdW1lbnRJZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEN1cnJlbnREb2N1bWVudChkb2MuZG9jdW1lbnRJZCwgcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZERvY3VtZW50c1tkLmRvY3VtZW50SWRdID0gcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5wb3BFcnJvclRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbERhdGEuZXJyb3JzVHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgICAgIHRoaXMubGFuZ0lzbyxcbiAgICAgICAgICAgICAgICAnbm9Eb2N1bWVudHNUb1Nob3cnXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2cucG9wRXJyb3JUcmFuc2xhdGlvbihcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sRGF0YS5lcnJvcnNUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgICAgIHRoaXMubGFuZ0lzbyxcbiAgICAgICAgICAgICAgJ2ZhaWxUb1ZpZXcnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoKGRvYyBhcyBhbnkpLmNvbnRlbnQpIHtcbiAgICAgICAgLy8gRG9jdW1lbnQgaGFzIGNvbnRlbnQgZGlyZWN0bHkgYXZhaWxhYmxlIC0gY29udmVydCB0byBibG9iXG4gICAgICAgIGxldCBjb250ZW50ID0gKGRvYyBhcyBhbnkpLmNvbnRlbnQ7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgY29udGVudCBpcyBhIGRhdGEgVVJMIGFuZCBleHRyYWN0IHRoZSBiYXNlNjQgcGFydFxuICAgICAgICBpZiAoY29udGVudC5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG4gICAgICAgICAgY29uc3QgYmFzZTY0U3RhcnQgPSBjb250ZW50LmluZGV4T2YoJywnKTtcbiAgICAgICAgICBpZiAoYmFzZTY0U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoYmFzZTY0U3RhcnQgKyAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBpZiBkb2N1bWVudCBuZWVkcyBQREYgY29udmVyc2lvblxuICAgICAgICBjb25zdCBvcmlnaW5hbENvbnRlbnQgPSAoZG9jIGFzIGFueSkuY29udGVudDtcbiAgICAgICAgY29uc3QgaXNQZGYgPVxuICAgICAgICAgIG9yaWdpbmFsQ29udGVudC5pbmNsdWRlcygnZGF0YTphcHBsaWNhdGlvbi9wZGYnKSB8fFxuICAgICAgICAgIG9yaWdpbmFsQ29udGVudC5pbmNsdWRlcygnYXBwbGljYXRpb24vcGRmJyk7XG5cbiAgICAgICAgaWYgKCFpc1BkZikge1xuICAgICAgICAgIC8vIEZvciBub24tUERGIGRvY3VtZW50cywgd2UgbmVlZCB0byBjb252ZXJ0IHRvIFBERiBvciBoYW5kbGUgZGlmZmVyZW50bHlcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAnTm9uLVBERiBkb2N1bWVudCBkZXRlY3RlZC4gQ29udmVydGluZyB0byBQREYuLi4nLFxuICAgICAgICAgICAgZG9jLm5hbWVcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vIENhbGwgYmFja2VuZCBjb252ZXJzaW9uIEFQSVxuICAgICAgICAgIHRoaXMuY29udmVydFRvUGRmKGNvbnRlbnQsIGRvYykudGhlbigocGRmQ29udGVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHBkZkNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50RG9jdW1lbnQoZG9jLmRvY3VtZW50SWQsIHBkZkNvbnRlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGI2NCA9IFV0aWxzLmJhc2U2NHRvQmxvYihjb250ZW50KTtcbiAgICAgICAgICB0aGlzLmJsb2JUb0FycmF5QnVmZmVyKGI2NCkudGhlbigocikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50RG9jdW1lbnQoZG9jLmRvY3VtZW50SWQsIHIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEb3dubG9hZCBmaWxlIGNhc2VcbiAgICAgICAgdGhpcy5hcHBEYXRhU2VydmljZVxuICAgICAgICAgIC5kb3dubG9hZEZpbGUodGhpcy5wcm9wc1snYXBwRGF0YUlkJ10sIGRvYy5kb2N1bWVudElkLCBkb2MuZmlsZU5hbWUpXG4gICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmJsb2JUb0FycmF5QnVmZmVyKGRhdGEpLnRoZW4oKHIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEN1cnJlbnREb2N1bWVudChkb2MuZG9jdW1lbnRJZCwgcik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZGlhbG9nLnBvcEVycm9yVHJhbnNsYXRpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sRGF0YS5lcnJvcnNUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgICAgICAgdGhpcy5sYW5nSXNvLFxuICAgICAgICAgICAgICAgICdmYWlsVG9WaWV3J1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldEN1cnJlbnREb2N1bWVudChkb2N1bWVudElkOiBzdHJpbmcsIHI6IGFueSkge1xuICAgIHRoaXMuY2FjaGVkRG9jdW1lbnRzW2RvY3VtZW50SWRdID0gcjtcbiAgICB0aGlzLmN1cnJlbnRQZGYgPSByO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYmxvYlRvQXJyYXlCdWZmZXIoYmxvYjogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCBfKSA9PiB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCk7XG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5leHREb2N1bWVudCgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPCB0aGlzLmRvY3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG4gICAgICB0aGlzLnNob3dEb2N1bWVudCh0aGlzLmRvY3VtZW50c1t0aGlzLmN1cnJlbnRJbmRleF0pO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrQ2FuR29CYWNrTmV4dCgpO1xuICB9XG5cbiAgcHJldkRvY3VtZW50KCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleC0tO1xuICAgICAgdGhpcy5zaG93RG9jdW1lbnQodGhpcy5kb2N1bWVudHNbdGhpcy5jdXJyZW50SW5kZXhdKTtcbiAgICB9XG4gICAgdGhpcy5jaGVja0NhbkdvQmFja05leHQoKTtcbiAgfVxuXG4gIGNoZWNrQ2FuR29CYWNrTmV4dCgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPT09IDApIHtcbiAgICAgIHRoaXMuY2FuR29CYWNrID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FuR29CYWNrID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5kb2N1bWVudHMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jYW5Hb05leHQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhbkdvTmV4dCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydFRvUGRmKFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBkb2M6IEdlbmVyYXRlZERvY3VtZW50XG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gQ2FsbCBiYWNrZW5kIEFQSSB0byBjb252ZXJ0IGRvY3VtZW50IHRvIFBERlxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb252ZXJzaW9uUmVxdWVzdDogQ29udmVydERvY3VtZW50VG9QZGZSZXF1ZXN0ID0ge1xuICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICBmaWxlTmFtZTogZG9jLm5hbWUsXG4gICAgICAgIGRvY3VtZW50SWQ6IGRvYy5kb2N1bWVudElkLFxuICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YUlkLFxuICAgICAgICBhcHBDb25maWd1cmF0aW9uVVVJRDogdGhpcy5hcHBJZCxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuZW52LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgdGhpcy5hcHBEYXRhU2VydmljZS5jb252ZXJ0RG9jdW1lbnRUb1BkZihjb252ZXJzaW9uUmVxdWVzdClcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXNwb25zZT8uc3VjY2VzcyAmJiByZXNwb25zZS5wZGZDb250ZW50KSB7XG4gICAgICAgIC8vIENvbnZlcnQgUERGIGJhc2U2NCB0byBibG9iIGFuZCByZXR1cm5cbiAgICAgICAgY29uc3QgcGRmQmxvYiA9IFV0aWxzLmJhc2U2NHRvQmxvYihyZXNwb25zZS5wZGZDb250ZW50KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmxvYlRvQXJyYXlCdWZmZXIocGRmQmxvYik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQREYgY29udmVyc2lvbiBmYWlsZWQ6JywgcmVzcG9uc2U/LmVycm9yTWVzc2FnZSk7XG4gICAgICAgIHRoaXMuZGlhbG9nLnBvcEVycm9yKFxuICAgICAgICAgIHJlc3BvbnNlPy5lcnJvck1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBjb252ZXJ0IGRvY3VtZW50IHRvIFBERidcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1BERiBjb252ZXJzaW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICB0aGlzLmRpYWxvZy5wb3BFcnJvcignRmFpbGVkIHRvIGNvbnZlcnQgZG9jdW1lbnQgdG8gUERGJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsIjxwICpuZ0lmPVwiaXNMb2FkaW5nID09PSBmYWxzZSAmJiAoIWRvY3VtZW50cyB8fCBkb2N1bWVudHMubGVuZ3RoID09PSAwKVwiPlxuICB7eyBnZXRFcnJvclRyYW5zbGF0aW9uTWVzc2FnZShcIm5vRG9jdW1lbnRzVG9TaG93XCIpIH19XG48L3A+XG5cbjxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiPlxuICA8YnV0dG9uIChjbGljayk9XCJwcmV2RG9jdW1lbnQoKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5Hb0JhY2tcIlxuICAgICAgICAgIGNsYXNzPVwibmF2LWJ1dHRvbiBsYXJnZXItd2lkdGgtbmF2LWJ1dHRvbnNcIj5cbiAgICAmIzg1OTI7XG4gIDwvYnV0dG9uPlxuXG4gIDxwIGNsYXNzPVwiZmlsZS1pbmZvIGZvbnQtcGFyYWdyYXBoXCIgKm5nSWY9XCJjdXJyZW50RG9jdW1lbnRcIj5cbiAgICB7eyB0aGlzLmN1cnJlbnREb2N1bWVudC5uYW1lIH19XG4gIDwvcD5cblxuICA8YnV0dG9uIChjbGljayk9XCJuZXh0RG9jdW1lbnQoKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5Hb05leHRcIlxuICAgICAgICAgIGNsYXNzPVwibmF2LWJ1dHRvbiBsYXJnZXItd2lkdGgtbmF2LWJ1dHRvbnNcIj5cbiAgICAmIzg1OTQ7XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjxtYXQtc3Bpbm5lciAqbmdJZj1cImlzTG9hZGluZyA9PT0gdHJ1ZVwiIGNsYXNzPVwibS14LWF1dG9cIj48L21hdC1zcGlubmVyPlxuPHBkZi12aWV3ZXIgKm5nSWY9XCJpc0xvYWRpbmcgPT09IGZhbHNlXCJcbiAgICAgICAgICAgIFtzcmNdPVwiY3VycmVudFBkZlwiXG4gICAgICAgICAgICBbcmVuZGVyLXRleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbb3JpZ2luYWwtc2l6ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZXh0ZXJuYWwtbGluay10YXJnZXRdPVwiJ2JsYW5rJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInBkZi12aWV3ZXJcIj48L3BkZi12aWV3ZXI+XG4iXX0=
|
|
249
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LXZpZXctZG9jdW1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29yaWdpbi1mb3JtL3NyYy9saWIvZm9ybWx5L2Zvcm1seS12aWV3LWRvY3VtZW50cy9mb3JtbHktdmlldy1kb2N1bWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LXZpZXctZG9jdW1lbnRzL2Zvcm1seS12aWV3LWRvY3VtZW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUk3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7O0FBTzNFLE1BQU0sT0FBTyw0QkFBNkIsU0FBUSwwQkFBMEI7SUFZMUUsWUFDVSxjQUFzQyxFQUN0QyxNQUFxQixFQUM3QixHQUFzQjtRQUV0QixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFKSCxtQkFBYyxHQUFkLGNBQWMsQ0FBd0I7UUFDdEMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQWIvQixjQUFTLEdBQXdCLEVBQUUsQ0FBQztRQUVwQyxpQkFBWSxHQUFXLENBQUMsQ0FBQztRQUl6QixlQUFVLEdBQVEsRUFBRSxDQUFDO1FBRXJCLG9CQUFlLEdBQVEsRUFBRSxDQUFDO1FBQzFCLGFBQVEsR0FBa0IsSUFBSSxDQUFDO0lBUS9CLENBQUM7SUFFUSxNQUFNO1FBQ2IsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxZQUFZLEVBQUUs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SSxDQUFDLFNBQVM7Z0JBQ3pCLG9CQUFvQixFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNoQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUc7YUFDdEIsQ0FBQztZQUVGLE1BQU0sUUFBUSxHQUFHLE1BQU0sY0FBYyxDQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLENBQzVELENBQUM7WUFFRixJQUFJLFFBQVEsRUFBRSxPQUFPLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUM3Qyx3Q0FBd0M7Z0JBQ3hDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN4RCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUNsQixRQUFRLEVBQUUsWUFBWSxJQUFJLG1DQUFtQyxDQUM5RCxDQUFDO2dCQUNGLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQzFELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7K0dBdFFVLDRCQUE0QjttR0FBNUIsNEJBQTRCLHdGQ2J6QywwK0RBc0RBOzs0RkR6Q2EsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHBsaWNhdGlvbkRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBpRG9jdW1lbnRSZXF1ZXN0LCBBcHBsaWNhdGlvbkdldEdlbmVyYXRlZERvY3VtZW50c0R0bywgQ29udmVydERvY3VtZW50VG9QZGZSZXF1ZXN0LCBHZW5lcmF0ZWREb2N1bWVudCB9IGZyb20gJy4uLy4uL21vZGVscy9hcHBsaWNhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uLy4uL290aGVycy91dGlscyc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmFzZUZvcm1seUNvbnRyb2xDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlRm9ybWx5Q29udHJvbENvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1mb3JtbHktdmlldy1kb2N1bWVudHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybWx5LXZpZXctZG9jdW1lbnRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2Zvcm1seS12aWV3LWRvY3VtZW50cy5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1seVZpZXdEb2N1bWVudHNDb21wb25lbnQgZXh0ZW5kcyBCYXNlRm9ybWx5Q29udHJvbENvbXBvbmVudCB7XG4gIGRvY3VtZW50czogR2VuZXJhdGVkRG9jdW1lbnRbXSA9IFtdO1xuICBpc0Rvd25sb2FkaW5nOiBib29sZWFuO1xuICBjdXJyZW50SW5kZXg6IG51bWJlciA9IDA7XG4gIGNhbkdvQmFjazogYm9vbGVhbjtcbiAgY2FuR29OZXh0OiBib29sZWFuO1xuXG4gIGN1cnJlbnRQZGY6IGFueSA9ICcnO1xuICBjdXJyZW50RG9jdW1lbnQ6IEdlbmVyYXRlZERvY3VtZW50O1xuICBjYWNoZWREb2N1bWVudHM6IGFueSA9IHt9O1xuICBkb2NFcnJvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBEYXRhU2VydmljZTogQXBwbGljYXRpb25EYXRhU2VydmljZSxcbiAgICBwcml2YXRlIGRpYWxvZzogRGlhbG9nU2VydmljZSxcbiAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKGNkcik7XG4gIH1cblxuICBvdmVycmlkZSBvbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuaXNEaXNwbGF5TW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5nZXREb2N1bWVudHMoKTtcbiAgICB9XG4gIH1cblxuICBnZXREb2N1bWVudHMoKSB7XG4gICAgY29uc3QgY29uZmlnRG9jcyA9IHRoaXMuY29udHJvbERhdGE/LnNwZWNpZmljQ29udHJvbERhdGE/LmRvY3VtZW50cztcbiAgICBpZiAoY29uZmlnRG9jcykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgbGV0IGNtZDogQXBwbGljYXRpb25HZXRHZW5lcmF0ZWREb2N1bWVudHNEdG8gPSB7XG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhSWQsXG4gICAgICAgIGNvbnRyb2xJZDogdGhpcy5jb250cm9sRGF0YS5pZGVudGlmaWVyLFxuICAgICAgICBpc0Rpc3BsYXlNb2RlOiB0aGlzLmlzRGlzcGxheU1vZGUsXG4gICAgICAgIGFwcENvbmZpZ3VyYXRpb25VVUlEOiB0aGlzLmFwcElkLFxuICAgICAgICBlbnZpcm9ubWVudDogdGhpcy5lbnYsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmFwcERhdGFTZXJ2aWNlLmdldEdlbmVyYXRlRG9jdW1lbnRzKGNtZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5kb2N1bWVudHMgPSB0aGlzLm9yZGVyRG9jdW1lbnRzQXNDb25maWd1cmVkKHJlc3VsdCk7XG4gICAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRzICYmIHRoaXMuZG9jdW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0RvY3VtZW50KHRoaXMuZG9jdW1lbnRzWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jaGVja0NhbkdvQmFja05leHQoKTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmRvY0Vycm9yID0gdGhpcy5nZXRFcnJvclRyYW5zbGF0aW9uTWVzc2FnZSgnZmFpbFRvVmlldycpO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvcmRlckRvY3VtZW50c0FzQ29uZmlndXJlZChcbiAgICBkb2N1bWVudHM6IEdlbmVyYXRlZERvY3VtZW50W11cbiAgKTogR2VuZXJhdGVkRG9jdW1lbnRbXSB7XG4gICAgbGV0IGxpc3Q6IEdlbmVyYXRlZERvY3VtZW50W10gPSBbXTtcbiAgICBpZiAoZG9jdW1lbnRzKSB7XG4gICAgICBjb25zdCBjb25maWd1cmFkRG9jdW1lbnRzID1cbiAgICAgICAgdGhpcy5jb250cm9sRGF0YT8uc3BlY2lmaWNDb250cm9sRGF0YT8uZG9jdW1lbnRzO1xuICAgICAgaWYgKGNvbmZpZ3VyYWREb2N1bWVudHMpIHtcbiAgICAgICAgY29uZmlndXJhZERvY3VtZW50cy5mb3JFYWNoKChkOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBmb3VuZCA9IGRvY3VtZW50cy5maW5kKChmOiBhbnkpID0+IGYuZG9jdW1lbnRJZCA9PT0gZC5pZCk7XG4gICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICBsaXN0LnB1c2goZm91bmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgcmV0cnkoKSB7XG4gICAgdGhpcy5kb2NFcnJvciA9IG51bGw7XG4gICAgdGhpcy5nZXREb2N1bWVudHMoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG9uUGFnZVNlbGVjdGVkKCkge1xuICAgIHRoaXMuZ2V0RG9jdW1lbnRzKCk7XG4gIH1cblxuICBhc3luYyBzaG93RG9jdW1lbnQoZG9jOiBHZW5lcmF0ZWREb2N1bWVudCkge1xuICAgIHRoaXMuY3VycmVudERvY3VtZW50ID0gZG9jO1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuY2FjaGVkRG9jdW1lbnRzW2RvYy5kb2N1bWVudElkXTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQZGYgPSBjYWNoZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIGlmIChkb2MuaXNBcGlEb2N1bWVudCA9PT0gdHJ1ZSkge1xuICAgICAgICBsZXQgYXBpUmVxdWVzdDogQXBpRG9jdW1lbnRSZXF1ZXN0ID0ge1xuICAgICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhSWQsXG4gICAgICAgICAgZG9jdW1lbnRJZDogZG9jLmRvY3VtZW50SWQsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYXBwRGF0YVNlcnZpY2UuZG9Eb2N1bWVudFJlcXVlc3QoYXBpUmVxdWVzdCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoZG9jcykgPT4ge1xuICAgICAgICAgICAgaWYgKGRvY3MgJiYgZG9jcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGRvY3MuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGI2NCA9IFV0aWxzLmJhc2U2NHRvQmxvYihkLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmxvYlRvQXJyYXlCdWZmZXIoYjY0KS50aGVuKChyKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZC5kb2N1bWVudElkID09PSBkb2MuZG9jdW1lbnRJZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEN1cnJlbnREb2N1bWVudChkb2MuZG9jdW1lbnRJZCwgcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZERvY3VtZW50c1tkLmRvY3VtZW50SWRdID0gcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5wb3BFcnJvclRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbERhdGEuZXJyb3JzVHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgICAgIHRoaXMubGFuZ0lzbyxcbiAgICAgICAgICAgICAgICAnbm9Eb2N1bWVudHNUb1Nob3cnXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZG9jRXJyb3IgPSB0aGlzLmdldEVycm9yVHJhbnNsYXRpb25NZXNzYWdlKCdmYWlsVG9WaWV3Jyk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKChkb2MgYXMgYW55KS5jb250ZW50KSB7XG4gICAgICAgIC8vIERvY3VtZW50IGhhcyBjb250ZW50IGRpcmVjdGx5IGF2YWlsYWJsZSAtIGNvbnZlcnQgdG8gYmxvYlxuICAgICAgICBsZXQgY29udGVudCA9IChkb2MgYXMgYW55KS5jb250ZW50O1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGNvbnRlbnQgaXMgYSBkYXRhIFVSTCBhbmQgZXh0cmFjdCB0aGUgYmFzZTY0IHBhcnRcbiAgICAgICAgaWYgKGNvbnRlbnQuc3RhcnRzV2l0aCgnZGF0YTonKSkge1xuICAgICAgICAgIGNvbnN0IGJhc2U2NFN0YXJ0ID0gY29udGVudC5pbmRleE9mKCcsJyk7XG4gICAgICAgICAgaWYgKGJhc2U2NFN0YXJ0ICE9PSAtMSkge1xuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKGJhc2U2NFN0YXJ0ICsgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgZG9jdW1lbnQgbmVlZHMgUERGIGNvbnZlcnNpb25cbiAgICAgICAgY29uc3Qgb3JpZ2luYWxDb250ZW50ID0gKGRvYyBhcyBhbnkpLmNvbnRlbnQ7XG4gICAgICAgIGNvbnN0IGlzUGRmID1cbiAgICAgICAgICBvcmlnaW5hbENvbnRlbnQuaW5jbHVkZXMoJ2RhdGE6YXBwbGljYXRpb24vcGRmJykgfHxcbiAgICAgICAgICBvcmlnaW5hbENvbnRlbnQuaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL3BkZicpO1xuXG4gICAgICAgIGlmICghaXNQZGYpIHtcbiAgICAgICAgICAvLyBGb3Igbm9uLVBERiBkb2N1bWVudHMsIHdlIG5lZWQgdG8gY29udmVydCB0byBQREYgb3IgaGFuZGxlIGRpZmZlcmVudGx5XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgJ05vbi1QREYgZG9jdW1lbnQgZGV0ZWN0ZWQuIENvbnZlcnRpbmcgdG8gUERGLi4uJyxcbiAgICAgICAgICAgIGRvYy5uYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgICAvLyBDYWxsIGJhY2tlbmQgY29udmVyc2lvbiBBUElcbiAgICAgICAgICB0aGlzLmNvbnZlcnRUb1BkZihjb250ZW50LCBkb2MpLnRoZW4oKHBkZkNvbnRlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChwZGZDb250ZW50KSB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudERvY3VtZW50KGRvYy5kb2N1bWVudElkLCBwZGZDb250ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBiNjQgPSBVdGlscy5iYXNlNjR0b0Jsb2IoY29udGVudCk7XG4gICAgICAgICAgdGhpcy5ibG9iVG9BcnJheUJ1ZmZlcihiNjQpLnRoZW4oKHIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudERvY3VtZW50KGRvYy5kb2N1bWVudElkLCByKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRG93bmxvYWQgZmlsZSBjYXNlXG4gICAgICAgIHRoaXMuYXBwRGF0YVNlcnZpY2VcbiAgICAgICAgICAuZG93bmxvYWRGaWxlKHRoaXMucHJvcHNbJ2FwcERhdGFJZCddLCBkb2MuZG9jdW1lbnRJZCwgZG9jLmZpbGVOYW1lKVxuICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5ibG9iVG9BcnJheUJ1ZmZlcihkYXRhKS50aGVuKChyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50RG9jdW1lbnQoZG9jLmRvY3VtZW50SWQsIHIpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmRvY0Vycm9yID0gdGhpcy5nZXRFcnJvclRyYW5zbGF0aW9uTWVzc2FnZSgnZmFpbFRvVmlldycpO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldEN1cnJlbnREb2N1bWVudChkb2N1bWVudElkOiBzdHJpbmcsIHI6IGFueSkge1xuICAgIHRoaXMuY2FjaGVkRG9jdW1lbnRzW2RvY3VtZW50SWRdID0gcjtcbiAgICB0aGlzLmN1cnJlbnRQZGYgPSByO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYmxvYlRvQXJyYXlCdWZmZXIoYmxvYjogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCBfKSA9PiB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCk7XG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5leHREb2N1bWVudCgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPCB0aGlzLmRvY3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG4gICAgICB0aGlzLnNob3dEb2N1bWVudCh0aGlzLmRvY3VtZW50c1t0aGlzLmN1cnJlbnRJbmRleF0pO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrQ2FuR29CYWNrTmV4dCgpO1xuICB9XG5cbiAgcHJldkRvY3VtZW50KCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleC0tO1xuICAgICAgdGhpcy5zaG93RG9jdW1lbnQodGhpcy5kb2N1bWVudHNbdGhpcy5jdXJyZW50SW5kZXhdKTtcbiAgICB9XG4gICAgdGhpcy5jaGVja0NhbkdvQmFja05leHQoKTtcbiAgfVxuXG4gIGNoZWNrQ2FuR29CYWNrTmV4dCgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPT09IDApIHtcbiAgICAgIHRoaXMuY2FuR29CYWNrID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FuR29CYWNrID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5kb2N1bWVudHMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jYW5Hb05leHQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhbkdvTmV4dCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydFRvUGRmKFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBkb2M6IEdlbmVyYXRlZERvY3VtZW50XG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gQ2FsbCBiYWNrZW5kIEFQSSB0byBjb252ZXJ0IGRvY3VtZW50IHRvIFBERlxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb252ZXJzaW9uUmVxdWVzdDogQ29udmVydERvY3VtZW50VG9QZGZSZXF1ZXN0ID0ge1xuICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICBmaWxlTmFtZTogZG9jLm5hbWUsXG4gICAgICAgIGRvY3VtZW50SWQ6IGRvYy5kb2N1bWVudElkLFxuICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YUlkLFxuICAgICAgICBhcHBDb25maWd1cmF0aW9uVVVJRDogdGhpcy5hcHBJZCxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuZW52LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgdGhpcy5hcHBEYXRhU2VydmljZS5jb252ZXJ0RG9jdW1lbnRUb1BkZihjb252ZXJzaW9uUmVxdWVzdClcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXNwb25zZT8uc3VjY2VzcyAmJiByZXNwb25zZS5wZGZDb250ZW50KSB7XG4gICAgICAgIC8vIENvbnZlcnQgUERGIGJhc2U2NCB0byBibG9iIGFuZCByZXR1cm5cbiAgICAgICAgY29uc3QgcGRmQmxvYiA9IFV0aWxzLmJhc2U2NHRvQmxvYihyZXNwb25zZS5wZGZDb250ZW50KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmxvYlRvQXJyYXlCdWZmZXIocGRmQmxvYik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQREYgY29udmVyc2lvbiBmYWlsZWQ6JywgcmVzcG9uc2U/LmVycm9yTWVzc2FnZSk7XG4gICAgICAgIHRoaXMuZGlhbG9nLnBvcEVycm9yKFxuICAgICAgICAgIHJlc3BvbnNlPy5lcnJvck1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBjb252ZXJ0IGRvY3VtZW50IHRvIFBERidcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1BERiBjb252ZXJzaW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICB0aGlzLmRpYWxvZy5wb3BFcnJvcignRmFpbGVkIHRvIGNvbnZlcnQgZG9jdW1lbnQgdG8gUERGJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ2aWV3LWRvY3MtY29udGFpbmVyXCI+XG4gIDwhLS0gRW1wdHkgU3RhdGUgLS0+XG4gIDxkaXYgY2xhc3M9XCJ2aWV3LWRvY3MtZW1wdHlcIiAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgKCFkb2N1bWVudHMgfHwgZG9jdW1lbnRzLmxlbmd0aCA9PT0gMCkgJiYgIWRvY0Vycm9yXCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwiZW1wdHktaWNvblwiPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICA8cCBjbGFzcz1cImVtcHR5LXRleHRcIj57eyBnZXRFcnJvclRyYW5zbGF0aW9uTWVzc2FnZShcIm5vRG9jdW1lbnRzVG9TaG93XCIpIH19PC9wPlxuICA8L2Rpdj5cblxuICA8IS0tIEVycm9yIFN0YXRlIC0tPlxuICA8ZGl2IGNsYXNzPVwidmlldy1kb2NzLWVycm9yXCIgKm5nSWY9XCJkb2NFcnJvclwiIHJvbGU9XCJhbGVydFwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiPlxuICAgIDxtYXQtaWNvbj5lcnJvcl9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICA8c3Bhbj57eyBkb2NFcnJvciB9fTwvc3Bhbj5cbiAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwicmV0cnkoKVwiIGNsYXNzPVwicmV0cnktYnRuXCI+XG4gICAgICA8bWF0LWljb24+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICBSZXRyeVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIExvYWRpbmcgU3RhdGUgLS0+XG4gIDxkaXYgY2xhc3M9XCJ2aWV3LWRvY3MtbG9hZGluZ1wiICpuZ0lmPVwiaXNMb2FkaW5nXCI+XG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1wcm9ncmVzcy1iYXI+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRG9jdW1lbnQgVmlld2VyIC0tPlxuICA8ZGl2IGNsYXNzPVwidmlldy1kb2NzLWNvbnRlbnRcIiAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgZG9jdW1lbnRzICYmIGRvY3VtZW50cy5sZW5ndGggPiAwICYmICFkb2NFcnJvclwiPlxuICAgIDwhLS0gTmF2aWdhdGlvbiBCYXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImRvYy1uYXZcIj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJwcmV2RG9jdW1lbnQoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuR29CYWNrXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkb2MtbmF2X19idG5cIj5cbiAgICAgICAgPG1hdC1pY29uPmNoZXZyb25fbGVmdDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkb2MtbmF2X19pbmZvXCI+XG4gICAgICAgIDxwIGNsYXNzPVwiZG9jLW5hdl9fbmFtZVwiICpuZ0lmPVwiY3VycmVudERvY3VtZW50XCI+e3sgY3VycmVudERvY3VtZW50Lm5hbWUgfX08L3A+XG4gICAgICAgIDxwIGNsYXNzPVwiZG9jLW5hdl9fY291bnRlclwiPnt7IGN1cnJlbnRJbmRleCArIDEgfX0gLyB7eyBkb2N1bWVudHMubGVuZ3RoIH19PC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwibmV4dERvY3VtZW50KClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkdvTmV4dFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZG9jLW5hdl9fYnRuXCI+XG4gICAgICAgIDxtYXQtaWNvbj5jaGV2cm9uX3JpZ2h0PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBQREYgVmlld2VyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkb2Mtdmlld2VyXCI+XG4gICAgICA8cGRmLXZpZXdlciBbc3JjXT1cImN1cnJlbnRQZGZcIlxuICAgICAgICAgICAgICAgICAgW3JlbmRlci10ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW29yaWdpbmFsLXNpemVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW2V4dGVybmFsLWxpbmstdGFyZ2V0XT1cIidibGFuaydcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwZGYtdmlld2VyXCI+PC9wZGYtdmlld2VyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|