@ajf/material 18.2.4 → 18.3.0
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/audio/src/audio.d.ts +11 -5
- package/esm2022/audio/src/audio.mjs +47 -32
- package/esm2022/form-builder/form-builder-service.mjs +2 -2
- package/esm2022/forms/date-input-field.mjs +14 -9
- package/esm2022/forms/field-service.mjs +2 -2
- package/esm2022/forms/form.mjs +3 -3
- package/esm2022/node-icon/node-icon.mjs +2 -2
- package/esm2022/signature/signature.mjs +9 -8
- package/fesm2022/ajf-material-audio.mjs +46 -31
- package/fesm2022/ajf-material-audio.mjs.map +1 -1
- package/fesm2022/ajf-material-form-builder.mjs +1 -1
- package/fesm2022/ajf-material-form-builder.mjs.map +1 -1
- package/fesm2022/ajf-material-forms.mjs +29 -26
- package/fesm2022/ajf-material-forms.mjs.map +1 -1
- package/fesm2022/ajf-material-node-icon.mjs +1 -1
- package/fesm2022/ajf-material-node-icon.mjs.map +1 -1
- package/fesm2022/ajf-material-signature.mjs +8 -7
- package/fesm2022/ajf-material-signature.mjs.map +1 -1
- package/forms/date-input-field.d.ts +2 -0
- package/package.json +2 -2
package/audio/src/audio.d.ts
CHANGED
|
@@ -21,21 +21,27 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import { AjfAudio } from '@ajf/core/audio';
|
|
23
23
|
import { ChangeDetectorRef, OnDestroy } from '@angular/core';
|
|
24
|
+
import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
|
|
24
25
|
import * as i0 from "@angular/core";
|
|
25
26
|
export declare class AjfAudioComponent extends AjfAudio implements OnDestroy {
|
|
27
|
+
private _sanitizer;
|
|
26
28
|
readonly: boolean;
|
|
27
29
|
isRecording: boolean;
|
|
28
|
-
audioUrl: string | null;
|
|
29
30
|
private mediaRecorder;
|
|
30
31
|
private audioChunks;
|
|
31
|
-
|
|
32
|
-
constructor(cdr: ChangeDetectorRef);
|
|
32
|
+
constructor(cdr: ChangeDetectorRef, _sanitizer: DomSanitizer);
|
|
33
33
|
ngOnDestroy(): void;
|
|
34
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Sanitizes the audio source for playback, either from the base64 content
|
|
36
|
+
* or, as a fallback, from the stored url.
|
|
37
|
+
*/
|
|
38
|
+
get safeAudioSrc(): SafeUrl | string | null;
|
|
35
39
|
startRecording(): Promise<void>;
|
|
36
40
|
stopRecording(): void;
|
|
41
|
+
/**
|
|
42
|
+
* Clears the recording value and preview (keeps the old url to delete old audio from storage)
|
|
43
|
+
*/
|
|
37
44
|
clearRecording(): void;
|
|
38
|
-
private revokeUrls;
|
|
39
45
|
static ɵfac: i0.ɵɵFactoryDeclaration<AjfAudioComponent, never>;
|
|
40
46
|
static ɵcmp: i0.ɵɵComponentDeclaration<AjfAudioComponent, "ajf-audio", never, { "readonly": { "alias": "readonly"; "required": false; }; }, {}, never, never, false, never>;
|
|
41
47
|
}
|
|
@@ -23,33 +23,36 @@ import { AjfAudio } from '@ajf/core/audio';
|
|
|
23
23
|
import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation, } from '@angular/core';
|
|
24
24
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
25
25
|
import * as i0 from "@angular/core";
|
|
26
|
-
import * as i1 from "@angular/
|
|
27
|
-
import * as i2 from "@angular/
|
|
28
|
-
import * as i3 from "@angular/material/
|
|
29
|
-
import * as i4 from "@angular/material/
|
|
26
|
+
import * as i1 from "@angular/platform-browser";
|
|
27
|
+
import * as i2 from "@angular/common";
|
|
28
|
+
import * as i3 from "@angular/material/button";
|
|
29
|
+
import * as i4 from "@angular/material/icon";
|
|
30
|
+
import * as i5 from "@angular/material/tooltip";
|
|
30
31
|
export class AjfAudioComponent extends AjfAudio {
|
|
31
|
-
constructor(cdr) {
|
|
32
|
+
constructor(cdr, _sanitizer) {
|
|
32
33
|
super(cdr);
|
|
34
|
+
this._sanitizer = _sanitizer;
|
|
33
35
|
this.readonly = false;
|
|
34
36
|
this.isRecording = false;
|
|
35
|
-
this.audioUrl = null;
|
|
36
37
|
this.mediaRecorder = null;
|
|
37
38
|
this.audioChunks = [];
|
|
38
|
-
// Keep track of object URLs to revoke them
|
|
39
|
-
this.createdUrls = [];
|
|
40
39
|
}
|
|
41
40
|
ngOnDestroy() {
|
|
42
41
|
this.stopRecording();
|
|
43
|
-
this.revokeUrls();
|
|
44
42
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
this.
|
|
43
|
+
/**
|
|
44
|
+
* Sanitizes the audio source for playback, either from the base64 content
|
|
45
|
+
* or, as a fallback, from the stored url.
|
|
46
|
+
*/
|
|
47
|
+
get safeAudioSrc() {
|
|
48
|
+
if (!this.value)
|
|
49
|
+
return null;
|
|
50
|
+
if (!this.value.content && this.value.deleteUrl)
|
|
51
|
+
return null;
|
|
52
|
+
const rawUrl = this.value.content && this.value.content.length ? this.value.content : this.value.url;
|
|
53
|
+
if (!rawUrl)
|
|
54
|
+
return null;
|
|
55
|
+
return this._sanitizer.bypassSecurityTrustUrl(rawUrl);
|
|
53
56
|
}
|
|
54
57
|
async startRecording() {
|
|
55
58
|
try {
|
|
@@ -61,14 +64,21 @@ export class AjfAudioComponent extends AjfAudio {
|
|
|
61
64
|
};
|
|
62
65
|
this.mediaRecorder.onstop = () => {
|
|
63
66
|
const audioBlob = new Blob(this.audioChunks, { type: 'audio/webm' });
|
|
64
|
-
// Create a temporary URL for immediate playback if needed,
|
|
65
|
-
// but primarily we converts to base64 for value.
|
|
66
67
|
const reader = new FileReader();
|
|
67
68
|
reader.readAsDataURL(audioBlob);
|
|
68
69
|
reader.onloadend = () => {
|
|
69
70
|
const base64data = reader.result;
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
const head = 'data:audio/webm;base64,';
|
|
72
|
+
const audioFileSize = Math.round(((base64data.length - head.length) * 3) / 4);
|
|
73
|
+
// Keeps the old url to delete old audio from storage
|
|
74
|
+
this.value = {
|
|
75
|
+
name: 'audio.webm',
|
|
76
|
+
type: 'audio/webm',
|
|
77
|
+
size: audioFileSize,
|
|
78
|
+
content: base64data,
|
|
79
|
+
url: this.value?.url ?? undefined,
|
|
80
|
+
deleteUrl: false,
|
|
81
|
+
};
|
|
72
82
|
this._cdr.markForCheck();
|
|
73
83
|
};
|
|
74
84
|
};
|
|
@@ -88,24 +98,29 @@ export class AjfAudioComponent extends AjfAudio {
|
|
|
88
98
|
this._cdr.markForCheck();
|
|
89
99
|
}
|
|
90
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Clears the recording value and preview (keeps the old url to delete old audio from storage)
|
|
103
|
+
*/
|
|
91
104
|
clearRecording() {
|
|
92
|
-
this.audioUrl = null;
|
|
93
105
|
this.audioChunks = [];
|
|
94
|
-
this.value =
|
|
106
|
+
this.value = {
|
|
107
|
+
name: 'audio.webm',
|
|
108
|
+
type: 'audio/webm',
|
|
109
|
+
size: undefined,
|
|
110
|
+
content: undefined,
|
|
111
|
+
url: this.value?.url ?? undefined,
|
|
112
|
+
deleteUrl: true,
|
|
113
|
+
};
|
|
95
114
|
this._cdr.markForCheck();
|
|
96
115
|
}
|
|
97
|
-
|
|
98
|
-
this.createdUrls.forEach(url => URL.revokeObjectURL(url));
|
|
99
|
-
this.createdUrls = [];
|
|
100
|
-
}
|
|
101
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfAudioComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
116
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfAudioComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
102
117
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfAudioComponent, selector: "ajf-audio", inputs: { readonly: "readonly" }, providers: [
|
|
103
118
|
{
|
|
104
119
|
provide: NG_VALUE_ACCESSOR,
|
|
105
120
|
useExisting: AjfAudioComponent,
|
|
106
121
|
multi: true,
|
|
107
122
|
},
|
|
108
|
-
], usesInheritance: true, ngImport: i0, template: "<div class=\"ajf-field-wrapper\">\n <div class=\"ajf-audio-controls\">\n <!-- Start Recording Button -->\n <button\n mat-mini-fab\n color=\"primary\"\n (click)=\"startRecording()\"\n *ngIf=\"!isRecording && !
|
|
123
|
+
], usesInheritance: true, ngImport: i0, template: "<div class=\"ajf-field-wrapper\">\n <div class=\"ajf-audio-controls\">\n <!-- Start Recording Button -->\n <button\n mat-mini-fab\n color=\"primary\"\n (click)=\"startRecording()\"\n *ngIf=\"!isRecording && !safeAudioSrc\"\n [disabled]=\"readonly\"\n matTooltip=\"Start Recording\"\n >\n <mat-icon>mic</mat-icon>\n </button>\n\n <!-- Stop Recording Button -->\n <button\n mat-mini-fab\n color=\"warn\"\n (click)=\"stopRecording()\"\n *ngIf=\"isRecording\"\n matTooltip=\"Stop Recording\"\n >\n <mat-icon>stop</mat-icon>\n </button>\n\n <!-- Recording Indicator -->\n <div *ngIf=\"isRecording\" class=\"recording-indicator\">\n <mat-icon>fiber_manual_record</mat-icon>\n Recording...\n </div>\n\n <!-- Playback -->\n <audio *ngIf=\"safeAudioSrc\" [src]=\"safeAudioSrc\" controls></audio>\n\n <!-- Delete/Reset Button -->\n <button\n mat-icon-button\n color=\"warn\"\n (click)=\"clearRecording()\"\n *ngIf=\"safeAudioSrc\"\n [disabled]=\"readonly\"\n matTooltip=\"Delete Audio\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n</div>\n", styles: [".ajf-audio-controls{display:flex;align-items:center;gap:16px;margin-top:8px}.ajf-audio-controls .recording-indicator{color:#f44336;animation:pulse 1.5s infinite;display:flex;align-items:center;gap:4px;font-weight:500}.ajf-audio-controls audio{height:36px;outline:none}@keyframes pulse{0%{opacity:1}50%{opacity:.5}to{opacity:1}}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i3.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
109
124
|
}
|
|
110
125
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfAudioComponent, decorators: [{
|
|
111
126
|
type: Component,
|
|
@@ -115,8 +130,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
115
130
|
useExisting: AjfAudioComponent,
|
|
116
131
|
multi: true,
|
|
117
132
|
},
|
|
118
|
-
], template: "<div class=\"ajf-field-wrapper\">\n <div class=\"ajf-audio-controls\">\n <!-- Start Recording Button -->\n <button\n mat-mini-fab\n color=\"primary\"\n (click)=\"startRecording()\"\n *ngIf=\"!isRecording && !
|
|
119
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { readonly: [{
|
|
133
|
+
], template: "<div class=\"ajf-field-wrapper\">\n <div class=\"ajf-audio-controls\">\n <!-- Start Recording Button -->\n <button\n mat-mini-fab\n color=\"primary\"\n (click)=\"startRecording()\"\n *ngIf=\"!isRecording && !safeAudioSrc\"\n [disabled]=\"readonly\"\n matTooltip=\"Start Recording\"\n >\n <mat-icon>mic</mat-icon>\n </button>\n\n <!-- Stop Recording Button -->\n <button\n mat-mini-fab\n color=\"warn\"\n (click)=\"stopRecording()\"\n *ngIf=\"isRecording\"\n matTooltip=\"Stop Recording\"\n >\n <mat-icon>stop</mat-icon>\n </button>\n\n <!-- Recording Indicator -->\n <div *ngIf=\"isRecording\" class=\"recording-indicator\">\n <mat-icon>fiber_manual_record</mat-icon>\n Recording...\n </div>\n\n <!-- Playback -->\n <audio *ngIf=\"safeAudioSrc\" [src]=\"safeAudioSrc\" controls></audio>\n\n <!-- Delete/Reset Button -->\n <button\n mat-icon-button\n color=\"warn\"\n (click)=\"clearRecording()\"\n *ngIf=\"safeAudioSrc\"\n [disabled]=\"readonly\"\n matTooltip=\"Delete Audio\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n</div>\n", styles: [".ajf-audio-controls{display:flex;align-items:center;gap:16px;margin-top:8px}.ajf-audio-controls .recording-indicator{color:#f44336;animation:pulse 1.5s infinite;display:flex;align-items:center;gap:4px;font-weight:500}.ajf-audio-controls audio{height:36px;outline:none}@keyframes pulse{0%{opacity:1}50%{opacity:.5}to{opacity:1}}\n"] }]
|
|
134
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.DomSanitizer }], propDecorators: { readonly: [{
|
|
120
135
|
type: Input
|
|
121
136
|
}] } });
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC9hdWRpby9zcmMvYXVkaW8udHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC9hdWRpby9zcmMvYXVkaW8uaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsS0FBSyxFQUVMLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBZ0JqRCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsUUFBUTtJQVU3QyxZQUFZLEdBQXNCO1FBQ2hDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQVZKLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsYUFBUSxHQUFrQixJQUFJLENBQUM7UUFDdkIsa0JBQWEsR0FBeUIsSUFBSSxDQUFDO1FBQzNDLGdCQUFXLEdBQVUsRUFBRSxDQUFDO1FBQ2hDLDJDQUEyQztRQUNuQyxnQkFBVyxHQUFhLEVBQUUsQ0FBQztJQUluQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELGtEQUFrRDtJQUN6QyxVQUFVLENBQUMsS0FBb0I7UUFDdEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4Qiw0RUFBNEU7UUFDNUUsNkRBQTZEO1FBQzdELHlGQUF5RjtRQUN6RixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYztRQUNsQixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUV0QixJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQztZQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDL0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFDO2dCQUNuRSwyREFBMkQ7Z0JBQzNELGlEQUFpRDtnQkFFakQsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDaEMsTUFBTSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUU7b0JBQ3RCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFnQixDQUFDO29CQUMzQyxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7b0JBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzNCLENBQUMsQ0FBQztZQUNKLENBQUMsQ0FBQztZQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUN4QixDQUFDOytHQWpGVSxpQkFBaUI7bUdBQWpCLGlCQUFpQixzRUFSakI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsaUJBQWlCO2dCQUM5QixLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsaURDN0NILHNxQ0ErQ0E7OzRGREFhLGlCQUFpQjtrQkFkN0IsU0FBUzsrQkFDRSxXQUFXLG1CQUdKLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksYUFDMUI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxtQkFBbUI7NEJBQzlCLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO3NGQUdRLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKEMpIEdudWNvb3Agc29jLiBjb29wLlxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBBZHZhbmNlZCBKU09OIGZvcm1zIChhamYpLlxuICpcbiAqIEFkdmFuY2VkIEpTT04gZm9ybXMgKGFqZikgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXNcbiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLFxuICogb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBBZHZhbmNlZCBKU09OIGZvcm1zIChhamYpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBBZmZlcm9cbiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggQWR2YW5jZWQgSlNPTiBmb3JtcyAoYWpmKS5cbiAqIElmIG5vdCwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uXG4gKlxuICovXG5cbmltcG9ydCB7QWpmQXVkaW99IGZyb20gJ0BhamYvY29yZS9hdWRpbyc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhamYtYXVkaW8nLFxuICB0ZW1wbGF0ZVVybDogJ2F1ZGlvLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnYXVkaW8uc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogQWpmQXVkaW9Db21wb25lbnQsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBamZBdWRpb0NvbXBvbmVudCBleHRlbmRzIEFqZkF1ZGlvIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcblxuICBpc1JlY29yZGluZyA9IGZhbHNlO1xuICBhdWRpb1VybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbWVkaWFSZWNvcmRlcjogTWVkaWFSZWNvcmRlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGF1ZGlvQ2h1bmtzOiBhbnlbXSA9IFtdO1xuICAvLyBLZWVwIHRyYWNrIG9mIG9iamVjdCBVUkxzIHRvIHJldm9rZSB0aGVtXG4gIHByaXZhdGUgY3JlYXRlZFVybHM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IoY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKGNkcik7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BSZWNvcmRpbmcoKTtcbiAgICB0aGlzLnJldm9rZVVybHMoKTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIHdyaXRlVmFsdWUgdG8gaGFuZGxlIGF1ZGlvVXJsIGNyZWF0aW9uXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICAvLyBJZiB3ZSBoYXZlIGEgdmFsdWUgKGJhc2U2NCkgYnV0IG5vIFVSTCwgY3JlYXRlIG9uZSBmb3IgcGxheWJhY2sgaWYgbmVlZGVkXG4gICAgLy8gSG93ZXZlciwgZm9yIDxhdWRpbyBzcmM9XCJkYXRhOi4uLlwiPiBiYXNlNjQgd29ya3MgZGlyZWN0bHkuXG4gICAgLy8gSWYgdGhlIHZhbHVlIGlzIGEgYmxvYiBVUkwsIHdlIG1pZ2h0IG5lZWQgaGFuZGxpbmcsIGJ1dCBoZXJlIHdlIGFzc3VtZSBiYXNlNjQgc3RvcmFnZS5cbiAgICB0aGlzLmF1ZGlvVXJsID0gdmFsdWU7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRSZWNvcmRpbmcoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHthdWRpbzogdHJ1ZX0pO1xuICAgICAgdGhpcy5tZWRpYVJlY29yZGVyID0gbmV3IE1lZGlhUmVjb3JkZXIoc3RyZWFtKTtcbiAgICAgIHRoaXMuYXVkaW9DaHVua3MgPSBbXTtcblxuICAgICAgdGhpcy5tZWRpYVJlY29yZGVyLm9uZGF0YWF2YWlsYWJsZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgdGhpcy5hdWRpb0NodW5rcy5wdXNoKGV2ZW50LmRhdGEpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5tZWRpYVJlY29yZGVyLm9uc3RvcCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgYXVkaW9CbG9iID0gbmV3IEJsb2IodGhpcy5hdWRpb0NodW5rcywge3R5cGU6ICdhdWRpby93ZWJtJ30pO1xuICAgICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgVVJMIGZvciBpbW1lZGlhdGUgcGxheWJhY2sgaWYgbmVlZGVkLFxuICAgICAgICAvLyBidXQgcHJpbWFyaWx5IHdlIGNvbnZlcnRzIHRvIGJhc2U2NCBmb3IgdmFsdWUuXG5cbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYXVkaW9CbG9iKTtcbiAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBiYXNlNjRkYXRhID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IGJhc2U2NGRhdGE7XG4gICAgICAgICAgdGhpcy5hdWRpb1VybCA9IGJhc2U2NGRhdGE7XG4gICAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9O1xuICAgICAgfTtcblxuICAgICAgdGhpcy5tZWRpYVJlY29yZGVyLnN0YXJ0KCk7XG4gICAgICB0aGlzLmlzUmVjb3JkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFjY2Vzc2luZyBtaWNyb3Bob25lOicsIGVycik7XG4gICAgfVxuICB9XG5cbiAgc3RvcFJlY29yZGluZygpIHtcbiAgICBpZiAodGhpcy5tZWRpYVJlY29yZGVyICYmIHRoaXMuaXNSZWNvcmRpbmcpIHtcbiAgICAgIHRoaXMubWVkaWFSZWNvcmRlci5zdG9wKCk7XG4gICAgICB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLm1lZGlhUmVjb3JkZXIuc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKTtcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclJlY29yZGluZygpIHtcbiAgICB0aGlzLmF1ZGlvVXJsID0gbnVsbDtcbiAgICB0aGlzLmF1ZGlvQ2h1bmtzID0gW107XG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXZva2VVcmxzKCkge1xuICAgIHRoaXMuY3JlYXRlZFVybHMuZm9yRWFjaCh1cmwgPT4gVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpKTtcbiAgICB0aGlzLmNyZWF0ZWRVcmxzID0gW107XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhamYtZmllbGQtd3JhcHBlclwiPlxuICA8ZGl2IGNsYXNzPVwiYWpmLWF1ZGlvLWNvbnRyb2xzXCI+XG4gICAgPCEtLSBTdGFydCBSZWNvcmRpbmcgQnV0dG9uIC0tPlxuICAgIDxidXR0b25cbiAgICAgIG1hdC1taW5pLWZhYlxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgIChjbGljayk9XCJzdGFydFJlY29yZGluZygpXCJcbiAgICAgICpuZ0lmPVwiIWlzUmVjb3JkaW5nICYmICFhdWRpb1VybFwiXG4gICAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIlxuICAgICAgbWF0VG9vbHRpcD1cIlN0YXJ0IFJlY29yZGluZ1wiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPm1pYzwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8IS0tIFN0b3AgUmVjb3JkaW5nIEJ1dHRvbiAtLT5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtbWluaS1mYWJcbiAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICAoY2xpY2spPVwic3RvcFJlY29yZGluZygpXCJcbiAgICAgICpuZ0lmPVwiaXNSZWNvcmRpbmdcIlxuICAgICAgbWF0VG9vbHRpcD1cIlN0b3AgUmVjb3JkaW5nXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+c3RvcDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8IS0tIFJlY29yZGluZyBJbmRpY2F0b3IgLS0+XG4gICAgPGRpdiAqbmdJZj1cImlzUmVjb3JkaW5nXCIgY2xhc3M9XCJyZWNvcmRpbmctaW5kaWNhdG9yXCI+XG4gICAgICA8bWF0LWljb24+ZmliZXJfbWFudWFsX3JlY29yZDwvbWF0LWljb24+XG4gICAgICBSZWNvcmRpbmcuLi5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUGxheWJhY2sgLS0+XG4gICAgPGF1ZGlvICpuZ0lmPVwiYXVkaW9VcmxcIiBbc3JjXT1cImF1ZGlvVXJsXCIgY29udHJvbHM+PC9hdWRpbz5cblxuICAgIDwhLS0gRGVsZXRlL1Jlc2V0IEJ1dHRvbiAtLT5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICAoY2xpY2spPVwiY2xlYXJSZWNvcmRpbmcoKVwiXG4gICAgICAqbmdJZj1cImF1ZGlvVXJsXCJcbiAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seVwiXG4gICAgICBtYXRUb29sdGlwPVwiRGVsZXRlIEF1ZGlvXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC9hdWRpby9zcmMvYXVkaW8udHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC9hdWRpby9zcmMvYXVkaW8uaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsS0FBSyxFQUVMLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQWlCakQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFFBQVE7SUFPN0MsWUFBWSxHQUFzQixFQUFVLFVBQXdCO1FBQ2xFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUQrQixlQUFVLEdBQVYsVUFBVSxDQUFjO1FBTjNELGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDWixrQkFBYSxHQUF5QixJQUFJLENBQUM7UUFDM0MsZ0JBQVcsR0FBVSxFQUFFLENBQUM7SUFJaEMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksWUFBWTtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUU3RCxNQUFNLE1BQU0sR0FDVixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxJ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QUFDO1lBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDWixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1gsSUFBSSxFQUFFLFlBQVk7WUFDbEIsSUFBSSxFQUFFLFlBQVk7WUFDbEIsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPLEVBQUUsU0FBUztZQUNsQixHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksU0FBUztZQUNqQyxTQUFTLEVBQUUsSUFBSTtTQUNoQixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMzQixDQUFDOytHQTdGVSxpQkFBaUI7bUdBQWpCLGlCQUFpQixzRUFSakI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsaUJBQWlCO2dCQUM5QixLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsaURDOUNILHNyQ0ErQ0E7OzRGRENhLGlCQUFpQjtrQkFkN0IsU0FBUzsrQkFDRSxXQUFXLG1CQUdKLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksYUFDMUI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxtQkFBbUI7NEJBQzlCLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lIQUdRLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKEMpIEdudWNvb3Agc29jLiBjb29wLlxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBBZHZhbmNlZCBKU09OIGZvcm1zIChhamYpLlxuICpcbiAqIEFkdmFuY2VkIEpTT04gZm9ybXMgKGFqZikgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXNcbiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLFxuICogb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBBZHZhbmNlZCBKU09OIGZvcm1zIChhamYpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBBZmZlcm9cbiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggQWR2YW5jZWQgSlNPTiBmb3JtcyAoYWpmKS5cbiAqIElmIG5vdCwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uXG4gKlxuICovXG5cbmltcG9ydCB7QWpmQXVkaW99IGZyb20gJ0BhamYvY29yZS9hdWRpbyc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtEb21TYW5pdGl6ZXIsIFNhZmVVcmx9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhamYtYXVkaW8nLFxuICB0ZW1wbGF0ZVVybDogJ2F1ZGlvLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnYXVkaW8uc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogQWpmQXVkaW9Db21wb25lbnQsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBamZBdWRpb0NvbXBvbmVudCBleHRlbmRzIEFqZkF1ZGlvIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcblxuICBpc1JlY29yZGluZyA9IGZhbHNlO1xuICBwcml2YXRlIG1lZGlhUmVjb3JkZXI6IE1lZGlhUmVjb3JkZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBhdWRpb0NodW5rczogYW55W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIF9zYW5pdGl6ZXI6IERvbVNhbml0aXplcikge1xuICAgIHN1cGVyKGNkcik7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BSZWNvcmRpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZXMgdGhlIGF1ZGlvIHNvdXJjZSBmb3IgcGxheWJhY2ssIGVpdGhlciBmcm9tIHRoZSBiYXNlNjQgY29udGVudFxuICAgKiBvciwgYXMgYSBmYWxsYmFjaywgZnJvbSB0aGUgc3RvcmVkIHVybC5cbiAgICovXG4gIGdldCBzYWZlQXVkaW9TcmMoKTogU2FmZVVybCB8IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghdGhpcy52YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKCF0aGlzLnZhbHVlLmNvbnRlbnQgJiYgdGhpcy52YWx1ZS5kZWxldGVVcmwpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcmF3VXJsID1cbiAgICAgIHRoaXMudmFsdWUuY29udGVudCAmJiB0aGlzLnZhbHVlLmNvbnRlbnQubGVuZ3RoID8gdGhpcy52YWx1ZS5jb250ZW50IDogdGhpcy52YWx1ZS51cmw7XG4gICAgaWYgKCFyYXdVcmwpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKHJhd1VybCk7XG4gIH1cblxuICBhc3luYyBzdGFydFJlY29yZGluZygpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoe2F1ZGlvOiB0cnVlfSk7XG4gICAgICB0aGlzLm1lZGlhUmVjb3JkZXIgPSBuZXcgTWVkaWFSZWNvcmRlcihzdHJlYW0pO1xuICAgICAgdGhpcy5hdWRpb0NodW5rcyA9IFtdO1xuXG4gICAgICB0aGlzLm1lZGlhUmVjb3JkZXIub25kYXRhYXZhaWxhYmxlID0gZXZlbnQgPT4ge1xuICAgICAgICB0aGlzLmF1ZGlvQ2h1bmtzLnB1c2goZXZlbnQuZGF0YSk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLm1lZGlhUmVjb3JkZXIub25zdG9wID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBhdWRpb0Jsb2IgPSBuZXcgQmxvYih0aGlzLmF1ZGlvQ2h1bmtzLCB7dHlwZTogJ2F1ZGlvL3dlYm0nfSk7XG5cbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYXVkaW9CbG9iKTtcbiAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBiYXNlNjRkYXRhID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XG4gICAgICAgICAgY29uc3QgaGVhZCA9ICdkYXRhOmF1ZGlvL3dlYm07YmFzZTY0LCc7XG4gICAgICAgICAgY29uc3QgYXVkaW9GaWxlU2l6ZSA9IE1hdGgucm91bmQoKChiYXNlNjRkYXRhLmxlbmd0aCAtIGhlYWQubGVuZ3RoKSAqIDMpIC8gNCk7XG4gICAgICAgICAgLy8gS2VlcHMgdGhlIG9sZCB1cmwgdG8gZGVsZXRlIG9sZCBhdWRpbyBmcm9tIHN0b3JhZ2VcbiAgICAgICAgICB0aGlzLnZhbHVlID0ge1xuICAgICAgICAgICAgbmFtZTogJ2F1ZGlvLndlYm0nLFxuICAgICAgICAgICAgdHlwZTogJ2F1ZGlvL3dlYm0nLFxuICAgICAgICAgICAgc2l6ZTogYXVkaW9GaWxlU2l6ZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGJhc2U2NGRhdGEsXG4gICAgICAgICAgICB1cmw6IHRoaXMudmFsdWU/LnVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICBkZWxldGVVcmw6IGZhbHNlLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9O1xuICAgICAgfTtcblxuICAgICAgdGhpcy5tZWRpYVJlY29yZGVyLnN0YXJ0KCk7XG4gICAgICB0aGlzLmlzUmVjb3JkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFjY2Vzc2luZyBtaWNyb3Bob25lOicsIGVycik7XG4gICAgfVxuICB9XG5cbiAgc3RvcFJlY29yZGluZygpIHtcbiAgICBpZiAodGhpcy5tZWRpYVJlY29yZGVyICYmIHRoaXMuaXNSZWNvcmRpbmcpIHtcbiAgICAgIHRoaXMubWVkaWFSZWNvcmRlci5zdG9wKCk7XG4gICAgICB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLm1lZGlhUmVjb3JkZXIuc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKTtcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSByZWNvcmRpbmcgdmFsdWUgYW5kIHByZXZpZXcgKGtlZXBzIHRoZSBvbGQgdXJsIHRvIGRlbGV0ZSBvbGQgYXVkaW8gZnJvbSBzdG9yYWdlKVxuICAgKi9cbiAgY2xlYXJSZWNvcmRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5hdWRpb0NodW5rcyA9IFtdO1xuICAgIHRoaXMudmFsdWUgPSB7XG4gICAgICBuYW1lOiAnYXVkaW8ud2VibScsXG4gICAgICB0eXBlOiAnYXVkaW8vd2VibScsXG4gICAgICBzaXplOiB1bmRlZmluZWQsXG4gICAgICBjb250ZW50OiB1bmRlZmluZWQsXG4gICAgICB1cmw6IHRoaXMudmFsdWU/LnVybCA/PyB1bmRlZmluZWQsXG4gICAgICBkZWxldGVVcmw6IHRydWUsXG4gICAgfTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhamYtZmllbGQtd3JhcHBlclwiPlxuICA8ZGl2IGNsYXNzPVwiYWpmLWF1ZGlvLWNvbnRyb2xzXCI+XG4gICAgPCEtLSBTdGFydCBSZWNvcmRpbmcgQnV0dG9uIC0tPlxuICAgIDxidXR0b25cbiAgICAgIG1hdC1taW5pLWZhYlxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgIChjbGljayk9XCJzdGFydFJlY29yZGluZygpXCJcbiAgICAgICpuZ0lmPVwiIWlzUmVjb3JkaW5nICYmICFzYWZlQXVkaW9TcmNcIlxuICAgICAgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCJcbiAgICAgIG1hdFRvb2x0aXA9XCJTdGFydCBSZWNvcmRpbmdcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5taWM8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPCEtLSBTdG9wIFJlY29yZGluZyBCdXR0b24gLS0+XG4gICAgPGJ1dHRvblxuICAgICAgbWF0LW1pbmktZmFiXG4gICAgICBjb2xvcj1cIndhcm5cIlxuICAgICAgKGNsaWNrKT1cInN0b3BSZWNvcmRpbmcoKVwiXG4gICAgICAqbmdJZj1cImlzUmVjb3JkaW5nXCJcbiAgICAgIG1hdFRvb2x0aXA9XCJTdG9wIFJlY29yZGluZ1wiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPnN0b3A8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPCEtLSBSZWNvcmRpbmcgSW5kaWNhdG9yIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJpc1JlY29yZGluZ1wiIGNsYXNzPVwicmVjb3JkaW5nLWluZGljYXRvclwiPlxuICAgICAgPG1hdC1pY29uPmZpYmVyX21hbnVhbF9yZWNvcmQ8L21hdC1pY29uPlxuICAgICAgUmVjb3JkaW5nLi4uXG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFBsYXliYWNrIC0tPlxuICAgIDxhdWRpbyAqbmdJZj1cInNhZmVBdWRpb1NyY1wiIFtzcmNdPVwic2FmZUF1ZGlvU3JjXCIgY29udHJvbHM+PC9hdWRpbz5cblxuICAgIDwhLS0gRGVsZXRlL1Jlc2V0IEJ1dHRvbiAtLT5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICAoY2xpY2spPVwiY2xlYXJSZWNvcmRpbmcoKVwiXG4gICAgICAqbmdJZj1cInNhZmVBdWRpb1NyY1wiXG4gICAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIlxuICAgICAgbWF0VG9vbHRpcD1cIkRlbGV0ZSBBdWRpb1wiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|