valtech-components 2.0.915 → 2.0.917

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.
@@ -0,0 +1,293 @@
1
+ import { Component, computed, EventEmitter, inject, Input, Output, signal } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import { IonButton, IonButtons, IonContent, IonHeader, IonModal, IonSpinner, IonToolbar, } from '@ionic/angular/standalone';
4
+ import { SolidDefaultBlock } from '../../atoms/button/factory';
5
+ import { ComponentStates, InputType } from '../../types';
6
+ import { FormComponent } from '../form/form.component';
7
+ import { DisplayComponent } from '../../atoms/display/display.component';
8
+ import { TextComponent } from '../../atoms/text/text.component';
9
+ import { AuthService } from '../../../services/auth';
10
+ import { I18nService, InputI18nHelper } from '../../../services/i18n';
11
+ import { ToastService } from '../../../services/toast.service';
12
+ import * as i0 from "@angular/core";
13
+ /**
14
+ * `val-change-email-modal` — modal de cambio de email en 3 pasos.
15
+ *
16
+ * Paso 1: contraseña actual + nuevo email → `initiateEmailChange()`
17
+ * Paso 2: código enviado al email actual → `confirmEmailChangeStep1()`
18
+ * Paso 3: código enviado al nuevo email → `confirmEmailChangeStep2()`
19
+ *
20
+ * Si el user no tiene contraseña (cuenta OAuth-only), muestra aviso.
21
+ *
22
+ * @example
23
+ * ```html
24
+ * <val-change-email-modal
25
+ * [isOpen]="isEmailModalOpen()"
26
+ * (changed)="isEmailModalOpen.set(false)"
27
+ * (dismissed)="isEmailModalOpen.set(false)"
28
+ * />
29
+ * ```
30
+ */
31
+ export class ChangeEmailModalComponent {
32
+ constructor() {
33
+ this._isOpen = false;
34
+ /** Emite al completar el cambio de email con éxito. El padre cierra el modal. */
35
+ this.changed = new EventEmitter();
36
+ /** Emite cuando el user cierra el modal. */
37
+ this.dismissed = new EventEmitter();
38
+ this.auth = inject(AuthService);
39
+ this.toast = inject(ToastService);
40
+ this.i18n = inject(I18nService);
41
+ this.i18nHelper = inject(InputI18nHelper);
42
+ this._step = signal('loading');
43
+ this._pendingEmail = signal('');
44
+ this._formState = signal(ComponentStates.ENABLED);
45
+ this.noPasswordTitle = computed(() => this.t('changeEmailNoPasswordTitle'));
46
+ this.noPasswordHint = computed(() => this.t('changeEmailNoPasswordHint'));
47
+ this.step1Props = computed(() => this.i18nHelper.resolveForm({
48
+ nameKey: 'changeEmailTitle',
49
+ i18nNamespace: '_auth',
50
+ sections: [
51
+ {
52
+ name: this.t('changeEmailStep1Description'),
53
+ order: 0,
54
+ fields: [
55
+ {
56
+ type: InputType.PASSWORD,
57
+ name: 'currentPassword',
58
+ token: 'change-email-password',
59
+ labelKey: 'currentPassword',
60
+ hint: '',
61
+ placeholderKey: 'passwordPlaceholder',
62
+ errorKeys: { required: 'currentPasswordRequired' },
63
+ validators: [Validators.required],
64
+ order: 0,
65
+ state: ComponentStates.ENABLED,
66
+ },
67
+ {
68
+ type: InputType.EMAIL,
69
+ name: 'newEmail',
70
+ token: 'change-email-new',
71
+ labelKey: 'changeEmailNewEmail',
72
+ hint: '',
73
+ placeholderKey: 'emailPlaceholder',
74
+ errorKeys: {
75
+ required: 'emailRequired',
76
+ email: 'changeEmailNewEmailInvalid',
77
+ },
78
+ validators: [Validators.required, Validators.email],
79
+ order: 1,
80
+ state: ComponentStates.ENABLED,
81
+ },
82
+ ],
83
+ },
84
+ ],
85
+ actions: {
86
+ ...SolidDefaultBlock('', 'submit'),
87
+ token: 'change-email-initiate',
88
+ textKey: 'changeEmailInitiate',
89
+ },
90
+ state: this._formState(),
91
+ }));
92
+ this.step2Props = computed(() => this.i18nHelper.resolveForm({
93
+ nameKey: 'changeEmailStep2Title',
94
+ i18nNamespace: '_auth',
95
+ sections: [
96
+ {
97
+ name: this.t('changeEmailStep2Description'),
98
+ order: 0,
99
+ fields: [
100
+ {
101
+ type: InputType.PIN_CODE,
102
+ name: 'code',
103
+ token: 'change-email-code-current',
104
+ labelKey: 'changeEmailCodeCurrent',
105
+ hint: '',
106
+ placeholderKey: '',
107
+ errorKeys: { required: 'mfaCodeInvalid' },
108
+ validators: [Validators.required],
109
+ order: 0,
110
+ state: ComponentStates.ENABLED,
111
+ length: 6,
112
+ allowNumbersOnly: true,
113
+ autoFocus: true,
114
+ },
115
+ ],
116
+ },
117
+ ],
118
+ actions: {
119
+ ...SolidDefaultBlock('', 'submit'),
120
+ token: 'change-email-confirm-1',
121
+ textKey: 'changeEmailConfirm1',
122
+ },
123
+ state: this._formState(),
124
+ }));
125
+ this.step3Props = computed(() => {
126
+ const email = this._pendingEmail();
127
+ const desc = this.t('changeEmailStep3Description').replace('{email}', email);
128
+ return this.i18nHelper.resolveForm({
129
+ nameKey: 'changeEmailStep3Title',
130
+ i18nNamespace: '_auth',
131
+ sections: [
132
+ {
133
+ name: desc,
134
+ order: 0,
135
+ fields: [
136
+ {
137
+ type: InputType.PIN_CODE,
138
+ name: 'code',
139
+ token: 'change-email-code-new',
140
+ labelKey: 'changeEmailCodeNew',
141
+ hint: '',
142
+ placeholderKey: '',
143
+ errorKeys: { required: 'mfaCodeInvalid' },
144
+ validators: [Validators.required],
145
+ order: 0,
146
+ state: ComponentStates.ENABLED,
147
+ length: 6,
148
+ allowNumbersOnly: true,
149
+ autoFocus: true,
150
+ },
151
+ ],
152
+ },
153
+ ],
154
+ actions: {
155
+ ...SolidDefaultBlock('', 'submit'),
156
+ token: 'change-email-confirm-2',
157
+ textKey: 'changeEmailConfirm2',
158
+ },
159
+ state: this._formState(),
160
+ });
161
+ });
162
+ }
163
+ set isOpen(value) {
164
+ const opening = value && !this._isOpen;
165
+ this._isOpen = value;
166
+ if (opening) {
167
+ this.resolveMode();
168
+ }
169
+ }
170
+ get isOpen() {
171
+ return this._isOpen;
172
+ }
173
+ t(key) {
174
+ return this.i18n.t(key, '_auth');
175
+ }
176
+ close() {
177
+ this.dismissed.emit();
178
+ }
179
+ resolveMode() {
180
+ this._step.set('loading');
181
+ this._formState.set(ComponentStates.ENABLED);
182
+ this._pendingEmail.set('');
183
+ this.auth.checkHasPassword().subscribe({
184
+ next: res => this._step.set(res.hasPassword ? 'step1' : 'no-password'),
185
+ error: () => this._step.set('step1'),
186
+ });
187
+ }
188
+ handleStep1(event) {
189
+ const currentPassword = event.fields['currentPassword'];
190
+ const newEmail = event.fields['newEmail'];
191
+ if (!currentPassword || !newEmail) {
192
+ this.showToast(this.t('completeAllFields'));
193
+ return;
194
+ }
195
+ this._formState.set(ComponentStates.WORKING);
196
+ this.auth.initiateEmailChange(currentPassword, newEmail).subscribe({
197
+ next: res => {
198
+ this._formState.set(ComponentStates.ENABLED);
199
+ this._pendingEmail.set(res.pendingEmail);
200
+ this._step.set('step2');
201
+ },
202
+ error: err => {
203
+ this._formState.set(ComponentStates.ENABLED);
204
+ this.showToast(this.resolveError(err));
205
+ },
206
+ });
207
+ }
208
+ handleStep2(event) {
209
+ const code = event.fields['code'];
210
+ if (!code) {
211
+ this.showToast(this.t('mfaCodeInvalid'));
212
+ return;
213
+ }
214
+ this._formState.set(ComponentStates.WORKING);
215
+ this.auth.confirmEmailChangeStep1(code).subscribe({
216
+ next: () => {
217
+ this._formState.set(ComponentStates.ENABLED);
218
+ this._step.set('step3');
219
+ },
220
+ error: err => {
221
+ this._formState.set(ComponentStates.ENABLED);
222
+ this.showToast(this.resolveError(err));
223
+ },
224
+ });
225
+ }
226
+ handleStep3(event) {
227
+ const code = event.fields['code'];
228
+ if (!code) {
229
+ this.showToast(this.t('mfaCodeInvalid'));
230
+ return;
231
+ }
232
+ this._formState.set(ComponentStates.WORKING);
233
+ this.auth.confirmEmailChangeStep2(code).subscribe({
234
+ next: () => {
235
+ this._formState.set(ComponentStates.ENABLED);
236
+ this.showToast(this.t('changeEmailSuccess'));
237
+ this.changed.emit();
238
+ },
239
+ error: err => {
240
+ this._formState.set(ComponentStates.ENABLED);
241
+ this.showToast(this.resolveError(err));
242
+ },
243
+ });
244
+ }
245
+ resolveError(err) {
246
+ const code = err?.code;
247
+ switch (code) {
248
+ case 'AUTHV2_INVALID_CURRENT_PASSWORD':
249
+ return this.t('errorCurrentPasswordWrong');
250
+ case 'AUTHV2_EMAIL_SAME_AS_CURRENT':
251
+ return this.t('errorEmailSameAsCurrent');
252
+ case 'AUTHV2_EMAIL_EXISTS':
253
+ return this.t('errorEmailAlreadyInUse');
254
+ case 'AUTHV2_EMAIL_CHANGE_PENDING_EXPIRED':
255
+ return this.t('errorEmailChangePendingExpired');
256
+ case 'AUTHV2_INVALID_CODE':
257
+ return this.t('errorInvalidCode');
258
+ case 'AUTHV2_EXPIRED_CODE':
259
+ return this.t('errorExpiredCode');
260
+ case 'AUTHV2_TOO_MANY_ATTEMPTS':
261
+ return this.t('errorTooManyAttempts');
262
+ default:
263
+ return this.t('errorGeneric');
264
+ }
265
+ }
266
+ showToast(message) {
267
+ this.toast.show({ message, duration: 3500 });
268
+ }
269
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChangeEmailModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
270
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ChangeEmailModalComponent, isStandalone: true, selector: "val-change-email-modal", inputs: { isOpen: "isOpen" }, outputs: { changed: "changed", dismissed: "dismissed" }, ngImport: i0, template: "<ion-modal [isOpen]=\"isOpen\" (didDismiss)=\"close()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"close()\">\n <strong>{{ t('close') }}</strong>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (_step() === 'loading') {\n <div class=\"modal-loading\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n </div>\n } @else if (_step() === 'no-password') {\n <val-display [props]=\"{ content: noPasswordTitle(), size: 'small', color: 'dark' }\" />\n <val-text [props]=\"{ content: noPasswordHint(), size: 'medium', color: 'medium', bold: false }\" />\n } @else if (_step() === 'step1') {\n <val-form [props]=\"step1Props()\" (onSubmit)=\"handleStep1($event)\" />\n } @else if (_step() === 'step2') {\n <val-form [props]=\"step2Props()\" (onSubmit)=\"handleStep2($event)\" />\n } @else if (_step() === 'step3') {\n <val-form [props]=\"step3Props()\" (onSubmit)=\"handleStep3($event)\" />\n }\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n", styles: [".modal-form-section{display:flex;flex-direction:column;gap:16px;max-width:420px;margin:0 auto;padding-top:8px}.modal-loading{display:flex;justify-content:center;padding:40px 0}\n"], dependencies: [{ kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }] }); }
271
+ }
272
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChangeEmailModalComponent, decorators: [{
273
+ type: Component,
274
+ args: [{ selector: 'val-change-email-modal', standalone: true, imports: [
275
+ IonButton,
276
+ IonButtons,
277
+ IonContent,
278
+ IonHeader,
279
+ IonModal,
280
+ IonSpinner,
281
+ IonToolbar,
282
+ FormComponent,
283
+ DisplayComponent,
284
+ TextComponent,
285
+ ], template: "<ion-modal [isOpen]=\"isOpen\" (didDismiss)=\"close()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"close()\">\n <strong>{{ t('close') }}</strong>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (_step() === 'loading') {\n <div class=\"modal-loading\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n </div>\n } @else if (_step() === 'no-password') {\n <val-display [props]=\"{ content: noPasswordTitle(), size: 'small', color: 'dark' }\" />\n <val-text [props]=\"{ content: noPasswordHint(), size: 'medium', color: 'medium', bold: false }\" />\n } @else if (_step() === 'step1') {\n <val-form [props]=\"step1Props()\" (onSubmit)=\"handleStep1($event)\" />\n } @else if (_step() === 'step2') {\n <val-form [props]=\"step2Props()\" (onSubmit)=\"handleStep2($event)\" />\n } @else if (_step() === 'step3') {\n <val-form [props]=\"step3Props()\" (onSubmit)=\"handleStep3($event)\" />\n }\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n", styles: [".modal-form-section{display:flex;flex-direction:column;gap:16px;max-width:420px;margin:0 auto;padding-top:8px}.modal-loading{display:flex;justify-content:center;padding:40px 0}\n"] }]
286
+ }], propDecorators: { isOpen: [{
287
+ type: Input
288
+ }], changed: [{
289
+ type: Output
290
+ }], dismissed: [{
291
+ type: Output
292
+ }] } });
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbmdlLWVtYWlsLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvY2hhbmdlLWVtYWlsLW1vZGFsL2NoYW5nZS1lbWFpbC1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2NoYW5nZS1lbWFpbC1tb2RhbC9jaGFuZ2UtZW1haWwtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLFVBQVUsR0FDWCxNQUFNLDJCQUEyQixDQUFDO0FBRW5DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBa0IsZUFBZSxFQUE0QixTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBSS9EOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQW1CSCxNQUFNLE9BQU8seUJBQXlCO0lBbEJ0QztRQW1CVSxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBY3hCLGlGQUFpRjtRQUN2RSxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU3Qyw0Q0FBNEM7UUFDbEMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFdkMsU0FBSSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQixVQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdCLFNBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0IsZUFBVSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVwQyxVQUFLLEdBQUcsTUFBTSxDQUFpQixTQUFTLENBQUMsQ0FBQztRQUMxQyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQixlQUFVLEdBQUcsTUFBTSxDQUFpQixlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFNckUsb0JBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUM7UUFDdkUsbUJBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7UUFFckUsZUFBVSxHQUFHLFFBQVEsQ0FBZSxHQUFHLEVBQUUsQ0FDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7WUFDMUIsT0FBTyxFQUFFLGtCQUFrQjtZQUMzQixhQUFhLEVBQUUsT0FBTztZQUN0QixRQUFRLEVBQUU7Z0JBQ1I7b0JBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUM7b0JBQzNDLEtBQUssRUFBRSxDQUFDO29CQUNSLE1BQU0sRUFBRTt3QkFDTjs0QkFDRSxJQUFJLEVBQUUsU0FBUyxDQUFDLFFBQVE7NEJBQ3hCLElBQUksRUFBRSxpQkFBaUI7NEJBQ3ZCLEtBQUssRUFBRSx1QkFBdUI7NEJBQzlCLFFBQVEsRUFBRSxpQkFBaUI7NEJBQzNCLElBQUksRUFBRSxFQUFFOzRCQUNSLGNBQWMsRUFBRSxxQkFBcUI7NEJBQ3JDLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSx5QkFBeUIsRUFBRTs0QkFDbEQsVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQzs0QkFDakMsS0FBSyxFQUFFLENBQUM7NEJBQ1IsS0FBSyxFQUFFLGVBQWUsQ0FBQyxPQUFPO3lCQUMvQjt3QkFDRDs0QkFDRSxJQUFJLEVBQUUsU0FBUyxDQUFDLEtBQUs7NEJBQ3JCLElBQUksRUFBRSxVQUFVOzRCQUNoQixLQUFLLEVBQUUsa0JBQWtCOzRCQUN6QixRQUFRLEVBQUUscUJBQXFCOzRCQUMvQixJQUFJLEVBQUUsRUFBRTs0QkFDUixjQUFjLEVBQUUsa0JBQWtCOzRCQUNsQyxTQUFTLEVBQUU7Z0NBQ1QsUUFBUSxFQUFFLGVBQWU7Z0NBQ3pCLEtBQUssRUFBRSw0QkFBNEI7NkJBQ3BDOzRCQUNELFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQzs0QkFDbkQsS0FBSyxFQUFFLENBQUM7NEJBQ1IsS0FBSyxFQUFFLGVBQWUsQ0FBQyxPQUFPO3lCQUMvQjtxQkFDRjtpQkFDRjthQUNGO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQztnQkFDbEMsS0FBSyxFQUFFLHVCQUF1QjtnQkFDOUIsT0FBTyxFQUFFLHFCQUFxQjthQUMvQjtZQUNELEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1NBQ3pCLENBQUMsQ0FDSCxDQUFDO1FBRU8sZUFBVSxHQUFHLFFBQVEsQ0FBZSxHQUFHLEVBQUUsQ0FDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7WUFDMUIsT0FBTyxFQUFFLHVCQUF1QjtZQUNoQyxhQUFhLEVBQUUsT0FBTztZQUN0QixRQUFRLEVBQUU7Z0JBQ1I7b0JBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUM7b0JBQzNDLEtBQUssRUFBRSxDQUFDO29CQUNSLE1BQU0sRUFBRTt3QkFDTjs0QkFDRSxJQUFJLEVBQUUsU0FBUyxDQUFDLFFBQVE7NEJBQ3hCLElBQUksRUFBRSxNQUFNOzRCQUNaLEtBQUssRUFBRSwyQkFBMkI7NEJBQ2xDLFFBQVEsRUFBRSx3QkFBd0I7NEJBQ2xDLElBQUksRUFBRSxFQUFFOzRCQUNSLGNBQWMsRUFBRSxFQUFFOzRCQUNsQixTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUU7NEJBQ3pDLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7NEJBQ2pDLEtBQUssRUFBRSxDQUFDOzRCQUNSLEtBQUssRUFBRSxlQUFlLENBQUMsT0FBTzs0QkFDOUIsTUFBTSxFQUFFLENBQUM7NEJBQ1QsZ0JBQWdCLEVBQUUsSUFBSTs0QkFDdEIsU0FBUyxFQUFFLElBQUk7eUJBQ2hCO3FCQUNGO2lCQUNGO2FBQ0Y7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsR0FBRyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDO2dCQUNsQyxLQUFLLEVBQUUsd0JBQXdCO2dCQUMvQixPQUFPLEVBQUUscUJBQXFCO2FBQy9CO1lBQ0QsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7U0FDekIsQ0FBQyxDQUNILENBQUM7UUFFTyxlQUFVLEdBQUcsUUFBUSxDQUFlLEdBQUcsRUFBRTtZQUNoRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0UsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztnQkFDakMsT0FBTyxFQUFFLHVCQUF1QjtnQkFDaEMsYUFBYSxFQUFFLE9BQU87Z0JBQ3RCLFFBQVEsRUFBRTtvQkFDUjt3QkFDRSxJQUFJLEVBQUUsSUFBSTt3QkFDVixLQUFLLEVBQUUsQ0FBQzt3QkFDUixNQUFNLEVBQUU7NEJBQ047Z0NBQ0UsSUFBSSxFQUFFLFNBQVMsQ0FBQyxRQUFRO2dDQUN4QixJQUFJLEVBQUUsTUFBTTtnQ0FDWixLQUFLLEVBQUUsdUJBQXVCO2dDQUM5QixRQUFRLEVBQUUsb0JBQW9CO2dDQUM5QixJQUFJLEVBQUUsRUFBRTtnQ0FDUixjQUFjLEVBQUUsRUFBRTtnQ0FDbEIsU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFO2dDQUN6QyxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2dDQUNqQyxLQUFLLEVBQUUsQ0FBQztnQ0FDUixLQUFLLEVBQUUsZUFBZSxDQUFDLE9BQU87Z0NBQzlCLE1BQU0sRUFBRSxDQUFDO2dDQUNULGdCQUFnQixFQUFFLElBQUk7Z0NBQ3RCLFNBQVMsRUFBRSxJQUFJOzZCQUNoQjt5QkFDRjtxQkFDRjtpQkFDRjtnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsR0FBRyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDO29CQUNsQyxLQUFLLEVBQUUsd0JBQXdCO29CQUMvQixPQUFPLEVBQUUscUJBQXFCO2lCQUMvQjtnQkFDRCxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTthQUN6QixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztLQXFHSjtJQS9QQyxJQUNJLE1BQU0sQ0FBQyxLQUFjO1FBQ3ZCLE1BQU0sT0FBTyxHQUFHLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBaUJELENBQUMsQ0FBQyxHQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQStIRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUNyQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUN0RSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1NBQ3JDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBaUI7UUFDM0IsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7WUFDNUMsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2pFLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDVixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUIsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWlCO1FBQzNCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUN6QyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNoRCxJQUFJLEVBQUUsR0FBRyxFQUFFO2dCQUNULElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUIsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWlCO1FBQzNCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUN6QyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNoRCxJQUFJLEVBQUUsR0FBRyxFQUFFO2dCQUNULElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QixDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDekMsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxZQUFZLENBQUMsR0FBWTtRQUMvQixNQUFNLElBQUksR0FBSSxHQUF5QixFQUFFLElBQUksQ0FBQztRQUM5QyxRQUFRLElBQUksRUFBRSxDQUFDO1lBQ2IsS0FBSyxpQ0FBaUM7Z0JBQ3BDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQzdDLEtBQUssOEJBQThCO2dCQUNqQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUMzQyxLQUFLLHFCQUFxQjtnQkFDeEIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDMUMsS0FBSyxxQ0FBcUM7Z0JBQ3hDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQ2xELEtBQUsscUJBQXFCO2dCQUN4QixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNwQyxLQUFLLHFCQUFxQjtnQkFDeEIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDcEMsS0FBSywwQkFBMEI7Z0JBQzdCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3hDO2dCQUNFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLFNBQVMsQ0FBQyxPQUFlO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7K0dBalFVLHlCQUF5QjttR0FBekIseUJBQXlCLHlLQzNEdEMsc3lDQStCQSw0T0RjSSxTQUFTLG9QQUNULFVBQVUsOEVBQ1YsVUFBVSx3S0FDVixTQUFTLG9HQUNULFFBQVEsc0RBQ1IsVUFBVSx5R0FDVixVQUFVLG1GQUNWLGFBQWEsOEhBQ2IsZ0JBQWdCLDJFQUNoQixhQUFhOzs0RkFLSix5QkFBeUI7a0JBbEJyQyxTQUFTOytCQUNFLHdCQUF3QixjQUN0QixJQUFJLFdBQ1A7d0JBQ1AsU0FBUzt3QkFDVCxVQUFVO3dCQUNWLFVBQVU7d0JBQ1YsU0FBUzt3QkFDVCxRQUFRO3dCQUNSLFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsYUFBYTtxQkFDZDs4QkFRRyxNQUFNO3NCQURULEtBQUs7Z0JBYUksT0FBTztzQkFBaEIsTUFBTTtnQkFHRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIElvbkJ1dHRvbixcbiAgSW9uQnV0dG9ucyxcbiAgSW9uQ29udGVudCxcbiAgSW9uSGVhZGVyLFxuICBJb25Nb2RhbCxcbiAgSW9uU3Bpbm5lcixcbiAgSW9uVG9vbGJhcixcbn0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5cbmltcG9ydCB7IFNvbGlkRGVmYXVsdEJsb2NrIH0gZnJvbSAnLi4vLi4vYXRvbXMvYnV0dG9uL2ZhY3RvcnknO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RhdGUsIENvbXBvbmVudFN0YXRlcywgRm9ybU1ldGFkYXRhLCBGb3JtU3VibWl0LCBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS9mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UsIElucHV0STE4bkhlbHBlciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdG9hc3Quc2VydmljZSc7XG5cbnR5cGUgRW1haWxNb2RhbFN0ZXAgPSAnbG9hZGluZycgfCAnbm8tcGFzc3dvcmQnIHwgJ3N0ZXAxJyB8ICdzdGVwMicgfCAnc3RlcDMnO1xuXG4vKipcbiAqIGB2YWwtY2hhbmdlLWVtYWlsLW1vZGFsYCDigJQgbW9kYWwgZGUgY2FtYmlvIGRlIGVtYWlsIGVuIDMgcGFzb3MuXG4gKlxuICogUGFzbyAxOiBjb250cmFzZcOxYSBhY3R1YWwgKyBudWV2byBlbWFpbCDihpIgYGluaXRpYXRlRW1haWxDaGFuZ2UoKWBcbiAqIFBhc28gMjogY8OzZGlnbyBlbnZpYWRvIGFsIGVtYWlsIGFjdHVhbCDihpIgYGNvbmZpcm1FbWFpbENoYW5nZVN0ZXAxKClgXG4gKiBQYXNvIDM6IGPDs2RpZ28gZW52aWFkbyBhbCBudWV2byBlbWFpbCDihpIgYGNvbmZpcm1FbWFpbENoYW5nZVN0ZXAyKClgXG4gKlxuICogU2kgZWwgdXNlciBubyB0aWVuZSBjb250cmFzZcOxYSAoY3VlbnRhIE9BdXRoLW9ubHkpLCBtdWVzdHJhIGF2aXNvLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8dmFsLWNoYW5nZS1lbWFpbC1tb2RhbFxuICogICBbaXNPcGVuXT1cImlzRW1haWxNb2RhbE9wZW4oKVwiXG4gKiAgIChjaGFuZ2VkKT1cImlzRW1haWxNb2RhbE9wZW4uc2V0KGZhbHNlKVwiXG4gKiAgIChkaXNtaXNzZWQpPVwiaXNFbWFpbE1vZGFsT3Blbi5zZXQoZmFsc2UpXCJcbiAqIC8+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWNoYW5nZS1lbWFpbC1tb2RhbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBJb25CdXR0b24sXG4gICAgSW9uQnV0dG9ucyxcbiAgICBJb25Db250ZW50LFxuICAgIElvbkhlYWRlcixcbiAgICBJb25Nb2RhbCxcbiAgICBJb25TcGlubmVyLFxuICAgIElvblRvb2xiYXIsXG4gICAgRm9ybUNvbXBvbmVudCxcbiAgICBEaXNwbGF5Q29tcG9uZW50LFxuICAgIFRleHRDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFuZ2UtZW1haWwtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGFuZ2UtZW1haWwtbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2hhbmdlRW1haWxNb2RhbENvbXBvbmVudCB7XG4gIHByaXZhdGUgX2lzT3BlbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBpc09wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBvcGVuaW5nID0gdmFsdWUgJiYgIXRoaXMuX2lzT3BlbjtcbiAgICB0aGlzLl9pc09wZW4gPSB2YWx1ZTtcbiAgICBpZiAob3BlbmluZykge1xuICAgICAgdGhpcy5yZXNvbHZlTW9kZSgpO1xuICAgIH1cbiAgfVxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc09wZW47XG4gIH1cblxuICAvKiogRW1pdGUgYWwgY29tcGxldGFyIGVsIGNhbWJpbyBkZSBlbWFpbCBjb24gw6l4aXRvLiBFbCBwYWRyZSBjaWVycmEgZWwgbW9kYWwuICovXG4gIEBPdXRwdXQoKSBjaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBFbWl0ZSBjdWFuZG8gZWwgdXNlciBjaWVycmEgZWwgbW9kYWwuICovXG4gIEBPdXRwdXQoKSBkaXNtaXNzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBhdXRoID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0b2FzdCA9IGluamVjdChUb2FzdFNlcnZpY2UpO1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIGkxOG5IZWxwZXIgPSBpbmplY3QoSW5wdXRJMThuSGVscGVyKTtcblxuICByZWFkb25seSBfc3RlcCA9IHNpZ25hbDxFbWFpbE1vZGFsU3RlcD4oJ2xvYWRpbmcnKTtcbiAgcmVhZG9ubHkgX3BlbmRpbmdFbWFpbCA9IHNpZ25hbCgnJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1TdGF0ZSA9IHNpZ25hbDxDb21wb25lbnRTdGF0ZT4oQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuXG4gIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksICdfYXV0aCcpO1xuICB9XG5cbiAgcmVhZG9ubHkgbm9QYXNzd29yZFRpdGxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50KCdjaGFuZ2VFbWFpbE5vUGFzc3dvcmRUaXRsZScpKTtcbiAgcmVhZG9ubHkgbm9QYXNzd29yZEhpbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnQoJ2NoYW5nZUVtYWlsTm9QYXNzd29yZEhpbnQnKSk7XG5cbiAgcmVhZG9ubHkgc3RlcDFQcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT5cbiAgICB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ2NoYW5nZUVtYWlsVGl0bGUnLFxuICAgICAgaTE4bk5hbWVzcGFjZTogJ19hdXRoJyxcbiAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiB0aGlzLnQoJ2NoYW5nZUVtYWlsU3RlcDFEZXNjcmlwdGlvbicpLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuUEFTU1dPUkQsXG4gICAgICAgICAgICAgIG5hbWU6ICdjdXJyZW50UGFzc3dvcmQnLFxuICAgICAgICAgICAgICB0b2tlbjogJ2NoYW5nZS1lbWFpbC1wYXNzd29yZCcsXG4gICAgICAgICAgICAgIGxhYmVsS2V5OiAnY3VycmVudFBhc3N3b3JkJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAncGFzc3dvcmRQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czogeyByZXF1aXJlZDogJ2N1cnJlbnRQYXNzd29yZFJlcXVpcmVkJyB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuRU1BSUwsXG4gICAgICAgICAgICAgIG5hbWU6ICduZXdFbWFpbCcsXG4gICAgICAgICAgICAgIHRva2VuOiAnY2hhbmdlLWVtYWlsLW5ldycsXG4gICAgICAgICAgICAgIGxhYmVsS2V5OiAnY2hhbmdlRW1haWxOZXdFbWFpbCcsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcktleTogJ2VtYWlsUGxhY2Vob2xkZXInLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ2VtYWlsUmVxdWlyZWQnLFxuICAgICAgICAgICAgICAgIGVtYWlsOiAnY2hhbmdlRW1haWxOZXdFbWFpbEludmFsaWQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0sXG4gICAgICAgICAgICAgIG9yZGVyOiAxLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICAuLi5Tb2xpZERlZmF1bHRCbG9jaygnJywgJ3N1Ym1pdCcpLFxuICAgICAgICB0b2tlbjogJ2NoYW5nZS1lbWFpbC1pbml0aWF0ZScsXG4gICAgICAgIHRleHRLZXk6ICdjaGFuZ2VFbWFpbEluaXRpYXRlJyxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogdGhpcy5fZm9ybVN0YXRlKCksXG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBzdGVwMlByb3BzID0gY29tcHV0ZWQ8Rm9ybU1ldGFkYXRhPigoKSA9PlxuICAgIHRoaXMuaTE4bkhlbHBlci5yZXNvbHZlRm9ybSh7XG4gICAgICBuYW1lS2V5OiAnY2hhbmdlRW1haWxTdGVwMlRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogdGhpcy50KCdjaGFuZ2VFbWFpbFN0ZXAyRGVzY3JpcHRpb24nKSxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlBJTl9DT0RFLFxuICAgICAgICAgICAgICBuYW1lOiAnY29kZScsXG4gICAgICAgICAgICAgIHRva2VuOiAnY2hhbmdlLWVtYWlsLWNvZGUtY3VycmVudCcsXG4gICAgICAgICAgICAgIGxhYmVsS2V5OiAnY2hhbmdlRW1haWxDb2RlQ3VycmVudCcsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcktleTogJycsXG4gICAgICAgICAgICAgIGVycm9yS2V5czogeyByZXF1aXJlZDogJ21mYUNvZGVJbnZhbGlkJyB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICAgIGxlbmd0aDogNixcbiAgICAgICAgICAgICAgYWxsb3dOdW1iZXJzT25seTogdHJ1ZSxcbiAgICAgICAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgLi4uU29saWREZWZhdWx0QmxvY2soJycsICdzdWJtaXQnKSxcbiAgICAgICAgdG9rZW46ICdjaGFuZ2UtZW1haWwtY29uZmlybS0xJyxcbiAgICAgICAgdGV4dEtleTogJ2NoYW5nZUVtYWlsQ29uZmlybTEnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl9mb3JtU3RhdGUoKSxcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IHN0ZXAzUHJvcHMgPSBjb21wdXRlZDxGb3JtTWV0YWRhdGE+KCgpID0+IHtcbiAgICBjb25zdCBlbWFpbCA9IHRoaXMuX3BlbmRpbmdFbWFpbCgpO1xuICAgIGNvbnN0IGRlc2MgPSB0aGlzLnQoJ2NoYW5nZUVtYWlsU3RlcDNEZXNjcmlwdGlvbicpLnJlcGxhY2UoJ3tlbWFpbH0nLCBlbWFpbCk7XG4gICAgcmV0dXJuIHRoaXMuaTE4bkhlbHBlci5yZXNvbHZlRm9ybSh7XG4gICAgICBuYW1lS2V5OiAnY2hhbmdlRW1haWxTdGVwM1RpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogZGVzYyxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlBJTl9DT0RFLFxuICAgICAgICAgICAgICBuYW1lOiAnY29kZScsXG4gICAgICAgICAgICAgIHRva2VuOiAnY2hhbmdlLWVtYWlsLWNvZGUtbmV3JyxcbiAgICAgICAgICAgICAgbGFiZWxLZXk6ICdjaGFuZ2VFbWFpbENvZGVOZXcnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICcnLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHsgcmVxdWlyZWQ6ICdtZmFDb2RlSW52YWxpZCcgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgICBsZW5ndGg6IDYsXG4gICAgICAgICAgICAgIGFsbG93TnVtYmVyc09ubHk6IHRydWUsXG4gICAgICAgICAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLlNvbGlkRGVmYXVsdEJsb2NrKCcnLCAnc3VibWl0JyksXG4gICAgICAgIHRva2VuOiAnY2hhbmdlLWVtYWlsLWNvbmZpcm0tMicsXG4gICAgICAgIHRleHRLZXk6ICdjaGFuZ2VFbWFpbENvbmZpcm0yJyxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogdGhpcy5fZm9ybVN0YXRlKCksXG4gICAgfSk7XG4gIH0pO1xuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzbWlzc2VkLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZU1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5fc3RlcC5zZXQoJ2xvYWRpbmcnKTtcbiAgICB0aGlzLl9mb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICB0aGlzLl9wZW5kaW5nRW1haWwuc2V0KCcnKTtcbiAgICB0aGlzLmF1dGguY2hlY2tIYXNQYXNzd29yZCgpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiByZXMgPT4gdGhpcy5fc3RlcC5zZXQocmVzLmhhc1Bhc3N3b3JkID8gJ3N0ZXAxJyA6ICduby1wYXNzd29yZCcpLFxuICAgICAgZXJyb3I6ICgpID0+IHRoaXMuX3N0ZXAuc2V0KCdzdGVwMScpLFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU3RlcDEoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50UGFzc3dvcmQgPSBldmVudC5maWVsZHNbJ2N1cnJlbnRQYXNzd29yZCddO1xuICAgIGNvbnN0IG5ld0VtYWlsID0gZXZlbnQuZmllbGRzWyduZXdFbWFpbCddO1xuICAgIGlmICghY3VycmVudFBhc3N3b3JkIHx8ICFuZXdFbWFpbCkge1xuICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdjb21wbGV0ZUFsbEZpZWxkcycpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuV09SS0lORyk7XG4gICAgdGhpcy5hdXRoLmluaXRpYXRlRW1haWxDaGFuZ2UoY3VycmVudFBhc3N3b3JkLCBuZXdFbWFpbCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgIHRoaXMuX2Zvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICB0aGlzLl9wZW5kaW5nRW1haWwuc2V0KHJlcy5wZW5kaW5nRW1haWwpO1xuICAgICAgICB0aGlzLl9zdGVwLnNldCgnc3RlcDInKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgdGhpcy5fZm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMucmVzb2x2ZUVycm9yKGVycikpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVN0ZXAyKGV2ZW50OiBGb3JtU3VibWl0KTogdm9pZCB7XG4gICAgY29uc3QgY29kZSA9IGV2ZW50LmZpZWxkc1snY29kZSddO1xuICAgIGlmICghY29kZSkge1xuICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdtZmFDb2RlSW52YWxpZCcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuV09SS0lORyk7XG4gICAgdGhpcy5hdXRoLmNvbmZpcm1FbWFpbENoYW5nZVN0ZXAxKGNvZGUpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2Zvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICB0aGlzLl9zdGVwLnNldCgnc3RlcDMnKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgdGhpcy5fZm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMucmVzb2x2ZUVycm9yKGVycikpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVN0ZXAzKGV2ZW50OiBGb3JtU3VibWl0KTogdm9pZCB7XG4gICAgY29uc3QgY29kZSA9IGV2ZW50LmZpZWxkc1snY29kZSddO1xuICAgIGlmICghY29kZSkge1xuICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdtZmFDb2RlSW52YWxpZCcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuV09SS0lORyk7XG4gICAgdGhpcy5hdXRoLmNvbmZpcm1FbWFpbENoYW5nZVN0ZXAyKGNvZGUpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2Zvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ2NoYW5nZUVtYWlsU3VjY2VzcycpKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkLmVtaXQoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgdGhpcy5fZm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMucmVzb2x2ZUVycm9yKGVycikpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUVycm9yKGVycjogdW5rbm93bik6IHN0cmluZyB7XG4gICAgY29uc3QgY29kZSA9IChlcnIgYXMgeyBjb2RlPzogc3RyaW5nIH0pPy5jb2RlO1xuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSAnQVVUSFYyX0lOVkFMSURfQ1VSUkVOVF9QQVNTV09SRCc6XG4gICAgICAgIHJldHVybiB0aGlzLnQoJ2Vycm9yQ3VycmVudFBhc3N3b3JkV3JvbmcnKTtcbiAgICAgIGNhc2UgJ0FVVEhWMl9FTUFJTF9TQU1FX0FTX0NVUlJFTlQnOlxuICAgICAgICByZXR1cm4gdGhpcy50KCdlcnJvckVtYWlsU2FtZUFzQ3VycmVudCcpO1xuICAgICAgY2FzZSAnQVVUSFYyX0VNQUlMX0VYSVNUUyc6XG4gICAgICAgIHJldHVybiB0aGlzLnQoJ2Vycm9yRW1haWxBbHJlYWR5SW5Vc2UnKTtcbiAgICAgIGNhc2UgJ0FVVEhWMl9FTUFJTF9DSEFOR0VfUEVORElOR19FWFBJUkVEJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudCgnZXJyb3JFbWFpbENoYW5nZVBlbmRpbmdFeHBpcmVkJyk7XG4gICAgICBjYXNlICdBVVRIVjJfSU5WQUxJRF9DT0RFJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudCgnZXJyb3JJbnZhbGlkQ29kZScpO1xuICAgICAgY2FzZSAnQVVUSFYyX0VYUElSRURfQ09ERSc6XG4gICAgICAgIHJldHVybiB0aGlzLnQoJ2Vycm9yRXhwaXJlZENvZGUnKTtcbiAgICAgIGNhc2UgJ0FVVEhWMl9UT09fTUFOWV9BVFRFTVBUUyc6XG4gICAgICAgIHJldHVybiB0aGlzLnQoJ2Vycm9yVG9vTWFueUF0dGVtcHRzJyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy50KCdlcnJvckdlbmVyaWMnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dUb2FzdChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnRvYXN0LnNob3coeyBtZXNzYWdlLCBkdXJhdGlvbjogMzUwMCB9KTtcbiAgfVxufVxuIiwiPGlvbi1tb2RhbCBbaXNPcGVuXT1cImlzT3BlblwiIChkaWREaXNtaXNzKT1cImNsb3NlKClcIj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIGNvbG9yPVwiZGFya1wiIChjbGljayk9XCJjbG9zZSgpXCI+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2Nsb3NlJykgfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgQGlmIChfc3RlcCgpID09PSAnbG9hZGluZycpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWxvYWRpbmdcIj5cbiAgICAgICAgICA8aW9uLXNwaW5uZXIgbmFtZT1cImNyZXNjZW50XCI+PC9pb24tc3Bpbm5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2UgaWYgKF9zdGVwKCkgPT09ICduby1wYXNzd29yZCcpIHtcbiAgICAgICAgPHZhbC1kaXNwbGF5IFtwcm9wc109XCJ7IGNvbnRlbnQ6IG5vUGFzc3dvcmRUaXRsZSgpLCBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnIH1cIiAvPlxuICAgICAgICA8dmFsLXRleHQgW3Byb3BzXT1cInsgY29udGVudDogbm9QYXNzd29yZEhpbnQoKSwgc2l6ZTogJ21lZGl1bScsIGNvbG9yOiAnbWVkaXVtJywgYm9sZDogZmFsc2UgfVwiIC8+XG4gICAgICAgIH0gQGVsc2UgaWYgKF9zdGVwKCkgPT09ICdzdGVwMScpIHtcbiAgICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJzdGVwMVByb3BzKClcIiAob25TdWJtaXQpPVwiaGFuZGxlU3RlcDEoJGV2ZW50KVwiIC8+XG4gICAgICAgIH0gQGVsc2UgaWYgKF9zdGVwKCkgPT09ICdzdGVwMicpIHtcbiAgICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJzdGVwMlByb3BzKClcIiAob25TdWJtaXQpPVwiaGFuZGxlU3RlcDIoJGV2ZW50KVwiIC8+XG4gICAgICAgIH0gQGVsc2UgaWYgKF9zdGVwKCkgPT09ICdzdGVwMycpIHtcbiAgICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJzdGVwM1Byb3BzKClcIiAob25TdWJtaXQpPVwiaGFuZGxlU3RlcDMoJGV2ZW50KVwiIC8+XG4gICAgICAgIH1cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2lvbi1jb250ZW50PlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG4iXX0=
@@ -71,6 +71,9 @@ export class FunHeaderComponent {
71
71
  const style = {};
72
72
  const isDark = this.theme.IsDark;
73
73
  const background = isDark ? this.props.backgroundDark || this.props.background : this.props.background;
74
+ if (this.props.paddingBottom) {
75
+ style['paddingBottom'] = this.props.paddingBottom;
76
+ }
74
77
  if (!background) {
75
78
  // Default gradient if no background specified
76
79
  style['background'] = isDark
@@ -82,7 +85,8 @@ export class FunHeaderComponent {
82
85
  if (this.props.gradient) {
83
86
  const targetColor = this.resolveBackgroundColor(background);
84
87
  const gradientPercentage = isDark ? '80%' : '90%';
85
- style['background'] = `linear-gradient(180deg, var(--ion-background-color) 12%, ${targetColor} ${gradientPercentage})`;
88
+ style['background'] =
89
+ `linear-gradient(180deg, var(--ion-background-color) 12%, ${targetColor} ${gradientPercentage})`;
86
90
  return style;
87
91
  }
88
92
  // Handle different background types
@@ -182,7 +186,7 @@ export class FunHeaderComponent {
182
186
  <img
183
187
  [src]="getImageSrc()"
184
188
  [ngStyle]="{
185
- content: isImageVariable(props.image) ? 'var(' + props.image + ')' : undefined
189
+ content: isImageVariable(props.image) ? 'var(' + props.image + ')' : undefined,
186
190
  }"
187
191
  alt="header logo"
188
192
  />
@@ -209,7 +213,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
209
213
  <img
210
214
  [src]="getImageSrc()"
211
215
  [ngStyle]="{
212
- content: isImageVariable(props.image) ? 'var(' + props.image + ')' : undefined
216
+ content: isImageVariable(props.image) ? 'var(' + props.image + ')' : undefined,
213
217
  }"
214
218
  alt="header logo"
215
219
  />
@@ -222,4 +226,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
222
226
  }], propDecorators: { props: [{
223
227
  type: Input
224
228
  }] } });
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2Z1bi1oZWFkZXIvZnVuLWhlYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7QUFHL0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBK0JILE1BQU0sT0FBTyxrQkFBa0I7SUE5Qi9CO1FBK0JVLFVBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFckM7O1dBRUc7UUFDTSxVQUFLLEdBQXNCO1lBQ2xDLE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsU0FBUztnQkFDaEIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLE9BQU8sRUFBRTtvQkFDUCxRQUFRLEVBQUUsUUFBUTtvQkFDbEIsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtpQkFDbkU7YUFDRjtTQUNGLENBQUM7S0FpSUg7SUEvSEM7O09BRUc7SUFDSCxlQUFlLENBQUMsS0FBYztRQUM1QixP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bmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbkNvbCwgSW9uR3JpZCwgSW9uUm93IH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBCYW5uZXJDb21wb25lbnQgfSBmcm9tICcuLi9iYW5uZXIvYmFubmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS5zZXJ2aWNlJztcbmltcG9ydCB7IEZ1bkhlYWRlck1ldGFkYXRhIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogdmFsLWZ1bi1oZWFkZXJcbiAqXG4gKiBBIGRlY29yYXRpdmUgaGVhZGVyIGNvbXBvbmVudCB3aXRoIGZsZXhpYmxlIGJhY2tncm91bmQgb3B0aW9ucyxcbiAqIG9wdGlvbmFsIGxvZ28sIGFuZCBpbnRlZ3JhdGVkIGJhbm5lciBjb250ZW50LiBTdXBwb3J0cyBkYXJrIG1vZGUsXG4gKiBncmFkaWVudHMsIGltYWdlcyB3aXRoIG92ZXJsYXlzLCBhbmQgdmFyaW91cyBzdHlsaW5nIG9wdGlvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIDx2YWwtZnVuLWhlYWRlclxuICogICBbcHJvcHNdPVwie1xuICogICAgIGltYWdlOiAnL2Fzc2V0cy9sb2dvLnBuZycsXG4gKiAgICAgYmFja2dyb3VuZDogJ3ByaW1hcnknLFxuICogICAgIGdyYWRpZW50OiB0cnVlLFxuICogICAgIGNvbnRlbnQ6IHtcbiAqICAgICAgIHRpdGxlOiAnV2VsY29tZScsXG4gKiAgICAgICBkZXNjcmlwdGlvbjogJ0dldCBzdGFydGVkIHdpdGggb3VyIHBsYXRmb3JtJ1xuICogICAgIH0sXG4gKiAgICAgcm91bmRlZDogdHJ1ZSxcbiAqICAgICBzaGFkb3dlZDogdHJ1ZVxuICogICB9XCJcbiAqID48L3ZhbC1mdW4taGVhZGVyPlxuICpcbiAqIEBpbnB1dCBwcm9wcyAtIEhlYWRlciBjb25maWd1cmF0aW9uXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1mdW4taGVhZGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQmFubmVyQ29tcG9uZW50LCBJb25HcmlkLCBJb25Sb3csIElvbkNvbF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGlvbi1ncmlkPlxuICAgICAgPGlvbi1yb3dcbiAgICAgICAgY2xhc3M9XCJpb24tanVzdGlmeS1jb250ZW50LWNlbnRlciBoZWFkZXItZ3JvdW5kXCJcbiAgICAgICAgW2NsYXNzLmJvcmRlcmVkXT1cInByb3BzLmJvcmRlcmVkXCJcbiAgICAgICAgW2NsYXNzLnNoYWRvd2VkXT1cInByb3BzLnNoYWRvd2VkXCJcbiAgICAgICAgW2NsYXNzLnJvdW5kZWRdPVwicHJvcHMucm91bmRlZFwiXG4gICAgICAgIFtuZ1N0eWxlXT1cImhlYWRlclN0eWxlKClcIlxuICAgICAgPlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiMTJcIiBzaXplLW1kPVwiMTJcIiBzaXplLWxnPVwiOFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdW4taW1hZ2UtY29udGFpbmVyXCIgKm5nSWY9XCJwcm9wcy5pbWFnZVwiPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICBbc3JjXT1cImdldEltYWdlU3JjKClcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgY29udGVudDogaXNJbWFnZVZhcmlhYmxlKHByb3BzLmltYWdlKSA/ICd2YXIoJyArIHByb3BzLmltYWdlICsgJyknIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICBhbHQ9XCJoZWFkZXIgbG9nb1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx2YWwtYmFubmVyIFtwcm9wc109XCJwcm9wcy5jb250ZW50XCIgLz5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2Z1bi1oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRnVuSGVhZGVyQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSB0aGVtZSA9IGluamVjdChUaGVtZVNlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBIZWFkZXIgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIEBJbnB1dCgpIHByb3BzOiBGdW5IZWFkZXJNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50OiB7XG4gICAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgICAgYm9yZGVyZWQ6IGZhbHNlLFxuICAgICAgY2xvc2FibGU6IGZhbHNlLFxuICAgICAgbW9kZTogJ2NvbHVtbicsXG4gICAgICBhbGlnbm1lbnQ6ICdjZW50ZXInLFxuICAgICAgY29udGVudDoge1xuICAgICAgICBwb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICAgIHRpdGxlOiB7IGNvbnRlbnQ6ICcnLCBzaXplOiAnbWVkaXVtJywgY29sb3I6ICdsaWdodCcsIGJvbGQ6IHRydWUgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIGltYWdlIGlzIGEgQ1NTIHZhcmlhYmxlIChzdGFydHMgd2l0aCAtLSlcbiAgICovXG4gIGlzSW1hZ2VWYXJpYWJsZShpbWFnZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpbWFnZT8uc3RhcnRzV2l0aCgnLS0nKSB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGltYWdlIHNvdXJjZSwgaGFuZGxpbmcgQ1NTIHZhcmlhYmxlc1xuICAgKi9cbiAgZ2V0SW1hZ2VTcmMoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMucHJvcHMuaW1hZ2UpIHJldHVybiAnJztcbiAgICByZXR1cm4gdGhpcy5pc0ltYWdlVmFyaWFibGUodGhpcy5wcm9wcy5pbWFnZSkgPyAnJyA6IHRoaXMucHJvcHMuaW1hZ2U7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgaGVhZGVyIGJhY2tncm91bmQgc3R5bGVzXG4gICAqIFN1cHBvcnRzOiBpbWFnZXMsIGdyYWRpZW50cywgY29sb3JzLCBDU1MgdmFyaWFibGVzLCBhbmQgZGFyayBtb2RlXG4gICAqL1xuICBoZWFkZXJTdHlsZSgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBzdHlsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGNvbnN0IGlzRGFyayA9IHRoaXMudGhlbWUuSXNEYXJrO1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSBpc0RhcmsgPyB0aGlzLnByb3BzLmJhY2tncm91bmREYXJrIHx8IHRoaXMucHJvcHMuYmFja2dyb3VuZCA6IHRoaXMucHJvcHMuYmFja2dyb3VuZDtcblxuICAgIGlmICghYmFja2dyb3VuZCkge1xuICAgICAgLy8gRGVmYXVsdCBncmFkaWVudCBpZiBubyBiYWNrZ3JvdW5kIHNwZWNpZmllZFxuICAgICAgc3R5bGVbJ2JhY2tncm91bmQnXSA9IGlzRGFya1xuICAgICAgICA/ICdsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCB2YXIoLS1pb24tYmFja2dyb3VuZC1jb2xvcikgMTIlLCB2YXIoLS1pb24tY29sb3ItZGFyaykgODAlKSdcbiAgICAgICAgOiAnbGluZWFyLWdyYWRpZW50KDE4MGRlZywgdmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IpIDEyJSwgdmFyKC0taW9uLWNvbG9yLXNlY29uZGFyeSkgOTAlKSc7XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfVxuXG4gICAgLy8gSWYgZ3JhZGllbnQgaXMgZW5hYmxlZCwgY3JlYXRlIGF1dG9tYXRpYyBncmFkaWVudCBmcm9tIC0taW9uLWJhY2tncm91bmQtY29sb3IgdG8gdGhlIHNwZWNpZmllZCBjb2xvclxuICAgIGlmICh0aGlzLnByb3BzLmdyYWRpZW50KSB7XG4gICAgICBjb25zdCB0YXJnZXRDb2xvciA9IHRoaXMucmVzb2x2ZUJhY2tncm91bmRDb2xvcihiYWNrZ3JvdW5kKTtcbiAgICAgIGNvbnN0IGdyYWRpZW50UGVyY2VudGFnZSA9IGlzRGFyayA/ICc4MCUnIDogJzkwJSc7XG4gICAgICBzdHlsZVsnYmFja2dyb3VuZCddID0gYGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHZhcigtLWlvbi1iYWNrZ3JvdW5kLWNvbG9yKSAxMiUsICR7dGFyZ2V0Q29sb3J9ICR7Z3JhZGllbnRQZXJjZW50YWdlfSlgO1xuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgYmFja2dyb3VuZCB0eXBlc1xuICAgIGlmICh0aGlzLmlzQmFja2dyb3VuZEltYWdlKGJhY2tncm91bmQpKSB7XG4gICAgICB0aGlzLmFwcGx5SW1hZ2VCYWNrZ3JvdW5kKHN0eWxlLCBiYWNrZ3JvdW5kKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNHcmFkaWVudChiYWNrZ3JvdW5kKSkge1xuICAgICAgc3R5bGVbJ2JhY2tncm91bmQnXSA9IGJhY2tncm91bmQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzQ1NTVmFyaWFibGUoYmFja2dyb3VuZCkpIHtcbiAgICAgIHN0eWxlWydiYWNrZ3JvdW5kJ10gPSBgdmFyKCR7YmFja2dyb3VuZH0pYDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb2xvclZhbHVlKGJhY2tncm91bmQpKSB7XG4gICAgICBzdHlsZVsnYmFja2dyb3VuZCddID0gYmFja2dyb3VuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXNzdW1lIGl0J3MgYW4gSW9uaWMgY29sb3IgbmFtZVxuICAgICAgc3R5bGVbJ2JhY2tncm91bmQnXSA9IGB2YXIoLS1pb24tY29sb3ItJHtiYWNrZ3JvdW5kfSlgO1xuICAgIH1cblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGJhY2tncm91bmQgY29sb3IgZm9yIGdyYWRpZW50IGdlbmVyYXRpb25cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZUJhY2tncm91bmRDb2xvcihiYWNrZ3JvdW5kOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzQ1NTVmFyaWFibGUoYmFja2dyb3VuZCkpIHtcbiAgICAgIHJldHVybiBgdmFyKCR7YmFja2dyb3VuZH0pYDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb2xvclZhbHVlKGJhY2tncm91bmQpKSB7XG4gICAgICByZXR1cm4gYmFja2dyb3VuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXNzdW1lIGl0J3MgYW4gSW9uaWMgY29sb3IgbmFtZVxuICAgICAgcmV0dXJuIGB2YXIoLS1pb24tY29sb3ItJHtiYWNrZ3JvdW5kfSlgO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBiYWNrZ3JvdW5kIGlzIGFuIGltYWdlIFVSTFxuICAgKi9cbiAgcHJpdmF0ZSBpc0JhY2tncm91bmRJbWFnZShiZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbG93ZXIgPSBiZy50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKFxuICAgICAgbG93ZXIuaW5jbHVkZXMoJy5qcGcnKSB8fFxuICAgICAgbG93ZXIuaW5jbHVkZXMoJy5wbmcnKSB8fFxuICAgICAgbG93ZXIuaW5jbHVkZXMoJy5qcGVnJykgfHxcbiAgICAgIGxvd2VyLmluY2x1ZGVzKCcud2VicCcpIHx8XG4gICAgICBsb3dlci5pbmNsdWRlcygnLnN2ZycpIHx8XG4gICAgICBsb3dlci5zdGFydHNXaXRoKCd1cmwoJylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGJhY2tncm91bmQgaXMgYSBncmFkaWVudFxuICAgKi9cbiAgcHJpdmF0ZSBpc0dyYWRpZW50KGJnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYmcuaW5jbHVkZXMoJ2xpbmVhci1ncmFkaWVudCcpIHx8IGJnLmluY2x1ZGVzKCdyYWRpYWwtZ3JhZGllbnQnKSB8fCBiZy5pbmNsdWRlcygnY29uaWMtZ3JhZGllbnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBiYWNrZ3JvdW5kIGlzIGEgQ1NTIHZhcmlhYmxlXG4gICAqL1xuICBwcml2YXRlIGlzQ1NTVmFyaWFibGUoYmc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBiZy5zdGFydHNXaXRoKCctLScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGJhY2tncm91bmQgaXMgYSBkaXJlY3QgY29sb3IgdmFsdWVcbiAgICovXG4gIHByaXZhdGUgaXNDb2xvclZhbHVlKGJnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYmcuc3RhcnRzV2l0aCgnIycpIHx8IGJnLnN0YXJ0c1dpdGgoJ3JnYicpIHx8IGJnLnN0YXJ0c1dpdGgoJ2hzbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGltYWdlIGJhY2tncm91bmQgd2l0aCBvcHRpb25hbCBvdmVybGF5XG4gICAqL1xuICBwcml2YXRlIGFwcGx5SW1hZ2VCYWNrZ3JvdW5kKHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBiYWNrZ3JvdW5kOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpbWFnZVVybCA9IGJhY2tncm91bmQuc3RhcnRzV2l0aCgndXJsKCcpID8gYmFja2dyb3VuZCA6IGB1cmwoJHtiYWNrZ3JvdW5kfSlgO1xuXG4gICAgaWYgKHRoaXMucHJvcHMub3ZlcmxheSkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IHRoaXMucHJvcHMub3ZlcmxheU9wYWNpdHkgfHwgMC4zO1xuICAgICAgY29uc3QgaXNEYXJrID0gdGhpcy50aGVtZS5Jc0Rhcms7XG4gICAgICBjb25zdCBvdmVybGF5Q29sb3IgPSBpc0RhcmsgPyBgcmdiYSgwLDAsMCwke29wYWNpdHl9KWAgOiBgcmdiYSgyNTUsMjU1LDI1NSwke29wYWNpdHl9KWA7XG5cbiAgICAgIHN0eWxlWydiYWNrZ3JvdW5kSW1hZ2UnXSA9IGBsaW5lYXItZ3JhZGllbnQoMGRlZywgJHtvdmVybGF5Q29sb3J9LCAke292ZXJsYXlDb2xvcn0pLCAke2ltYWdlVXJsfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlWydiYWNrZ3JvdW5kSW1hZ2UnXSA9IGltYWdlVXJsO1xuICAgIH1cblxuICAgIHN0eWxlWydiYWNrZ3JvdW5kU2l6ZSddID0gJ2NvdmVyJztcbiAgICBzdHlsZVsnYmFja2dyb3VuZFBvc2l0aW9uJ10gPSAnY2VudGVyJztcbiAgICBzdHlsZVsnYmFja2dyb3VuZFJlcGVhdCddID0gJ25vLXJlcGVhdCc7XG4gIH1cbn1cbiJdfQ==
229
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2Z1bi1oZWFkZXIvZnVuLWhlYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7QUFHL0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBK0JILE1BQU0sT0FBTyxrQkFBa0I7SUE5Qi9CO1FBK0JVLFVBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFckM7O1dBRUc7UUFDTSxVQUFLLEdBQXNCO1lBQ2xDLE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsU0FBUztnQkFDaEIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLE9BQU8sRUFBRTtvQkFDUCxRQUFRLEVBQUUsUUFBUTtvQkFDbEIsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtpQkFDbkU7YUFDRjtTQUNGLENBQUM7S0FzSUg7SUFwSUM7O09BRUc7SUFDSCxlQUFlLENBQUMsS0FBYztRQUM1QixP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LE1BQU0sQ0FBQyxZQUN2RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1QlQ7OEJBU1EsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uQ29sLCBJb25HcmlkLCBJb25Sb3cgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IEJhbm5lckNvbXBvbmVudCB9IGZyb20gJy4uL2Jhbm5lci9iYW5uZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFRoZW1lU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgRnVuSGVhZGVyTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiB2YWwtZnVuLWhlYWRlclxuICpcbiAqIEEgZGVjb3JhdGl2ZSBoZWFkZXIgY29tcG9uZW50IHdpdGggZmxleGlibGUgYmFja2dyb3VuZCBvcHRpb25zLFxuICogb3B0aW9uYWwgbG9nbywgYW5kIGludGVncmF0ZWQgYmFubmVyIGNvbnRlbnQuIFN1cHBvcnRzIGRhcmsgbW9kZSxcbiAqIGdyYWRpZW50cywgaW1hZ2VzIHdpdGggb3ZlcmxheXMsIGFuZCB2YXJpb3VzIHN0eWxpbmcgb3B0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogPHZhbC1mdW4taGVhZGVyXG4gKiAgIFtwcm9wc109XCJ7XG4gKiAgICAgaW1hZ2U6ICcvYXNzZXRzL2xvZ28ucG5nJyxcbiAqICAgICBiYWNrZ3JvdW5kOiAncHJpbWFyeScsXG4gKiAgICAgZ3JhZGllbnQ6IHRydWUsXG4gKiAgICAgY29udGVudDoge1xuICogICAgICAgdGl0bGU6ICdXZWxjb21lJyxcbiAqICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IHN0YXJ0ZWQgd2l0aCBvdXIgcGxhdGZvcm0nXG4gKiAgICAgfSxcbiAqICAgICByb3VuZGVkOiB0cnVlLFxuICogICAgIHNoYWRvd2VkOiB0cnVlXG4gKiAgIH1cIlxuICogPjwvdmFsLWZ1bi1oZWFkZXI+XG4gKlxuICogQGlucHV0IHByb3BzIC0gSGVhZGVyIGNvbmZpZ3VyYXRpb25cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWZ1bi1oZWFkZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBCYW5uZXJDb21wb25lbnQsIElvbkdyaWQsIElvblJvdywgSW9uQ29sXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8aW9uLWdyaWQ+XG4gICAgICA8aW9uLXJvd1xuICAgICAgICBjbGFzcz1cImlvbi1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGhlYWRlci1ncm91bmRcIlxuICAgICAgICBbY2xhc3MuYm9yZGVyZWRdPVwicHJvcHMuYm9yZGVyZWRcIlxuICAgICAgICBbY2xhc3Muc2hhZG93ZWRdPVwicHJvcHMuc2hhZG93ZWRcIlxuICAgICAgICBbY2xhc3Mucm91bmRlZF09XCJwcm9wcy5yb3VuZGVkXCJcbiAgICAgICAgW25nU3R5bGVdPVwiaGVhZGVyU3R5bGUoKVwiXG4gICAgICA+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCIxMlwiIHNpemUtbWQ9XCIxMlwiIHNpemUtbGc9XCI4XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZ1bi1pbWFnZS1jb250YWluZXJcIiAqbmdJZj1cInByb3BzLmltYWdlXCI+XG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgIFtzcmNdPVwiZ2V0SW1hZ2VTcmMoKVwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICBjb250ZW50OiBpc0ltYWdlVmFyaWFibGUocHJvcHMuaW1hZ2UpID8gJ3ZhcignICsgcHJvcHMuaW1hZ2UgKyAnKScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICBhbHQ9XCJoZWFkZXIgbG9nb1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx2YWwtYmFubmVyIFtwcm9wc109XCJwcm9wcy5jb250ZW50XCIgLz5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2Z1bi1oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRnVuSGVhZGVyQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSB0aGVtZSA9IGluamVjdChUaGVtZVNlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBIZWFkZXIgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIEBJbnB1dCgpIHByb3BzOiBGdW5IZWFkZXJNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50OiB7XG4gICAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgICAgYm9yZGVyZWQ6IGZhbHNlLFxuICAgICAgY2xvc2FibGU6IGZhbHNlLFxuICAgICAgbW9kZTogJ2NvbHVtbicsXG4gICAgICBhbGlnbm1lbnQ6ICdjZW50ZXInLFxuICAgICAgY29udGVudDoge1xuICAgICAgICBwb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICAgIHRpdGxlOiB7IGNvbnRlbnQ6ICcnLCBzaXplOiAnbWVkaXVtJywgY29sb3I6ICdsaWdodCcsIGJvbGQ6IHRydWUgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIGltYWdlIGlzIGEgQ1NTIHZhcmlhYmxlIChzdGFydHMgd2l0aCAtLSlcbiAgICovXG4gIGlzSW1hZ2VWYXJpYWJsZShpbWFnZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpbWFnZT8uc3RhcnRzV2l0aCgnLS0nKSB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGltYWdlIHNvdXJjZSwgaGFuZGxpbmcgQ1NTIHZhcmlhYmxlc1xuICAgKi9cbiAgZ2V0SW1hZ2VTcmMoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMucHJvcHMuaW1hZ2UpIHJldHVybiAnJztcbiAgICByZXR1cm4gdGhpcy5pc0ltYWdlVmFyaWFibGUodGhpcy5wcm9wcy5pbWFnZSkgPyAnJyA6IHRoaXMucHJvcHMuaW1hZ2U7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgaGVhZGVyIGJhY2tncm91bmQgc3R5bGVzXG4gICAqIFN1cHBvcnRzOiBpbWFnZXMsIGdyYWRpZW50cywgY29sb3JzLCBDU1MgdmFyaWFibGVzLCBhbmQgZGFyayBtb2RlXG4gICAqL1xuICBoZWFkZXJTdHlsZSgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBzdHlsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGNvbnN0IGlzRGFyayA9IHRoaXMudGhlbWUuSXNEYXJrO1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSBpc0RhcmsgPyB0aGlzLnByb3BzLmJhY2tncm91bmREYXJrIHx8IHRoaXMucHJvcHMuYmFja2dyb3VuZCA6IHRoaXMucHJvcHMuYmFja2dyb3VuZDtcblxuICAgIGlmICh0aGlzLnByb3BzLnBhZGRpbmdCb3R0b20pIHtcbiAgICAgIHN0eWxlWydwYWRkaW5nQm90dG9tJ10gPSB0aGlzLnByb3BzLnBhZGRpbmdCb3R0b207XG4gICAgfVxuXG4gICAgaWYgKCFiYWNrZ3JvdW5kKSB7XG4gICAgICAvLyBEZWZhdWx0IGdyYWRpZW50IGlmIG5vIGJhY2tncm91bmQgc3BlY2lmaWVkXG4gICAgICBzdHlsZVsnYmFja2dyb3VuZCddID0gaXNEYXJrXG4gICAgICAgID8gJ2xpbmVhci1ncmFkaWVudCgxODBkZWcsIHZhcigtLWlvbi1iYWNrZ3JvdW5kLWNvbG9yKSAxMiUsIHZhcigtLWlvbi1jb2xvci1kYXJrKSA4MCUpJ1xuICAgICAgICA6ICdsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCB2YXIoLS1pb24tYmFja2dyb3VuZC1jb2xvcikgMTIlLCB2YXIoLS1pb24tY29sb3Itc2Vjb25kYXJ5KSA5MCUpJztcbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9XG5cbiAgICAvLyBJZiBncmFkaWVudCBpcyBlbmFibGVkLCBjcmVhdGUgYXV0b21hdGljIGdyYWRpZW50IGZyb20gLS1pb24tYmFja2dyb3VuZC1jb2xvciB0byB0aGUgc3BlY2lmaWVkIGNvbG9yXG4gICAgaWYgKHRoaXMucHJvcHMuZ3JhZGllbnQpIHtcbiAgICAgIGNvbnN0IHRhcmdldENvbG9yID0gdGhpcy5yZXNvbHZlQmFja2dyb3VuZENvbG9yKGJhY2tncm91bmQpO1xuICAgICAgY29uc3QgZ3JhZGllbnRQZXJjZW50YWdlID0gaXNEYXJrID8gJzgwJScgOiAnOTAlJztcbiAgICAgIHN0eWxlWydiYWNrZ3JvdW5kJ10gPVxuICAgICAgICBgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgdmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IpIDEyJSwgJHt0YXJnZXRDb2xvcn0gJHtncmFkaWVudFBlcmNlbnRhZ2V9KWA7XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGRpZmZlcmVudCBiYWNrZ3JvdW5kIHR5cGVzXG4gICAgaWYgKHRoaXMuaXNCYWNrZ3JvdW5kSW1hZ2UoYmFja2dyb3VuZCkpIHtcbiAgICAgIHRoaXMuYXBwbHlJbWFnZUJhY2tncm91bmQoc3R5bGUsIGJhY2tncm91bmQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0dyYWRpZW50KGJhY2tncm91bmQpKSB7XG4gICAgICBzdHlsZVsnYmFja2dyb3VuZCddID0gYmFja2dyb3VuZDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNDU1NWYXJpYWJsZShiYWNrZ3JvdW5kKSkge1xuICAgICAgc3R5bGVbJ2JhY2tncm91bmQnXSA9IGB2YXIoJHtiYWNrZ3JvdW5kfSlgO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0NvbG9yVmFsdWUoYmFja2dyb3VuZCkpIHtcbiAgICAgIHN0eWxlWydiYWNrZ3JvdW5kJ10gPSBiYWNrZ3JvdW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBc3N1bWUgaXQncyBhbiBJb25pYyBjb2xvciBuYW1lXG4gICAgICBzdHlsZVsnYmFja2dyb3VuZCddID0gYHZhcigtLWlvbi1jb2xvci0ke2JhY2tncm91bmR9KWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYmFja2dyb3VuZCBjb2xvciBmb3IgZ3JhZGllbnQgZ2VuZXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlQmFja2dyb3VuZENvbG9yKGJhY2tncm91bmQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNDU1NWYXJpYWJsZShiYWNrZ3JvdW5kKSkge1xuICAgICAgcmV0dXJuIGB2YXIoJHtiYWNrZ3JvdW5kfSlgO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0NvbG9yVmFsdWUoYmFja2dyb3VuZCkpIHtcbiAgICAgIHJldHVybiBiYWNrZ3JvdW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBc3N1bWUgaXQncyBhbiBJb25pYyBjb2xvciBuYW1lXG4gICAgICByZXR1cm4gYHZhcigtLWlvbi1jb2xvci0ke2JhY2tncm91bmR9KWA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGJhY2tncm91bmQgaXMgYW4gaW1hZ2UgVVJMXG4gICAqL1xuICBwcml2YXRlIGlzQmFja2dyb3VuZEltYWdlKGJnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBsb3dlciA9IGJnLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoXG4gICAgICBsb3dlci5pbmNsdWRlcygnLmpwZycpIHx8XG4gICAgICBsb3dlci5pbmNsdWRlcygnLnBuZycpIHx8XG4gICAgICBsb3dlci5pbmNsdWRlcygnLmpwZWcnKSB8fFxuICAgICAgbG93ZXIuaW5jbHVkZXMoJy53ZWJwJykgfHxcbiAgICAgIGxvd2VyLmluY2x1ZGVzKCcuc3ZnJykgfHxcbiAgICAgIGxvd2VyLnN0YXJ0c1dpdGgoJ3VybCgnKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYmFja2dyb3VuZCBpcyBhIGdyYWRpZW50XG4gICAqL1xuICBwcml2YXRlIGlzR3JhZGllbnQoYmc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBiZy5pbmNsdWRlcygnbGluZWFyLWdyYWRpZW50JykgfHwgYmcuaW5jbHVkZXMoJ3JhZGlhbC1ncmFkaWVudCcpIHx8IGJnLmluY2x1ZGVzKCdjb25pYy1ncmFkaWVudCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGJhY2tncm91bmQgaXMgYSBDU1MgdmFyaWFibGVcbiAgICovXG4gIHByaXZhdGUgaXNDU1NWYXJpYWJsZShiZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGJnLnN0YXJ0c1dpdGgoJy0tJyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYmFja2dyb3VuZCBpcyBhIGRpcmVjdCBjb2xvciB2YWx1ZVxuICAgKi9cbiAgcHJpdmF0ZSBpc0NvbG9yVmFsdWUoYmc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBiZy5zdGFydHNXaXRoKCcjJykgfHwgYmcuc3RhcnRzV2l0aCgncmdiJykgfHwgYmcuc3RhcnRzV2l0aCgnaHNsJyk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgaW1hZ2UgYmFja2dyb3VuZCB3aXRoIG9wdGlvbmFsIG92ZXJsYXlcbiAgICovXG4gIHByaXZhdGUgYXBwbHlJbWFnZUJhY2tncm91bmQoc3R5bGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGJhY2tncm91bmQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGltYWdlVXJsID0gYmFja2dyb3VuZC5zdGFydHNXaXRoKCd1cmwoJykgPyBiYWNrZ3JvdW5kIDogYHVybCgke2JhY2tncm91bmR9KWA7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5vdmVybGF5KSB7XG4gICAgICBjb25zdCBvcGFjaXR5ID0gdGhpcy5wcm9wcy5vdmVybGF5T3BhY2l0eSB8fCAwLjM7XG4gICAgICBjb25zdCBpc0RhcmsgPSB0aGlzLnRoZW1lLklzRGFyaztcbiAgICAgIGNvbnN0IG92ZXJsYXlDb2xvciA9IGlzRGFyayA/IGByZ2JhKDAsMCwwLCR7b3BhY2l0eX0pYCA6IGByZ2JhKDI1NSwyNTUsMjU1LCR7b3BhY2l0eX0pYDtcblxuICAgICAgc3R5bGVbJ2JhY2tncm91bmRJbWFnZSddID0gYGxpbmVhci1ncmFkaWVudCgwZGVnLCAke292ZXJsYXlDb2xvcn0sICR7b3ZlcmxheUNvbG9yfSksICR7aW1hZ2VVcmx9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVbJ2JhY2tncm91bmRJbWFnZSddID0gaW1hZ2VVcmw7XG4gICAgfVxuXG4gICAgc3R5bGVbJ2JhY2tncm91bmRTaXplJ10gPSAnY292ZXInO1xuICAgIHN0eWxlWydiYWNrZ3JvdW5kUG9zaXRpb24nXSA9ICdjZW50ZXInO1xuICAgIHN0eWxlWydiYWNrZ3JvdW5kUmVwZWF0J10gPSAnbm8tcmVwZWF0JztcbiAgfVxufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2Z1bi1oZWFkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhbm5lck1ldGFkYXRhIH0gZnJvbSAnLi4vYmFubmVyL3R5cGVzJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgZnVuIGhlYWRlciBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVuSGVhZGVyTWV0YWRhdGEge1xuICAvKiogT3B0aW9uYWwgdG9rZW4gZm9yIHRyYWNraW5nL2FuYWx5dGljcyAqL1xuICB0b2tlbj86IHN0cmluZztcbiAgLyoqIExvZ28gaW1hZ2UgcGF0aCBvciBDU1MgdmFyaWFibGUgKGUuZy4sICctLW15LWxvZ28nKSAqL1xuICBpbWFnZT86IHN0cmluZztcbiAgLyoqIEJhY2tncm91bmQgaW1hZ2UgVVJMLCBncmFkaWVudCwgY29sb3IsIG9yIENTUyB2YXJpYWJsZSAqL1xuICBiYWNrZ3JvdW5kPzogc3RyaW5nO1xuICAvKiogRGFyayBtb2RlIGJhY2tncm91bmQgKG9wdGlvbmFsLCBmYWxscyBiYWNrIHRvIGJhY2tncm91bmQpICovXG4gIGJhY2tncm91bmREYXJrPzogc3RyaW5nO1xuICAvKiogQ3JlYXRlIGF1dG9tYXRpYyBncmFkaWVudCBmcm9tIC0taW9uLWJhY2tncm91bmQtY29sb3IgdG8gYmFja2dyb3VuZCBjb2xvciAqL1xuICBncmFkaWVudD86IGJvb2xlYW47XG4gIC8qKiBBZGQgb3ZlcmxheSBmb3IgYmV0dGVyIHRleHQgY29udHJhc3Qgb24gaW1hZ2VzICovXG4gIG92ZXJsYXk/OiBib29sZWFuO1xuICAvKiogT3ZlcmxheSBvcGFjaXR5ICgwLTEsIGRlZmF1bHQ6IDAuMykgKi9cbiAgb3ZlcmxheU9wYWNpdHk/OiBudW1iZXI7XG4gIC8qKiBCYW5uZXIgY29udGVudCBjb25maWd1cmF0aW9uICovXG4gIGNvbnRlbnQ6IEJhbm5lck1ldGFkYXRhO1xuICAvKiogQWRkIGJvcmRlciBhcm91bmQgdGhlIGhlYWRlciAqL1xuICBib3JkZXJlZD86IGJvb2xlYW47XG4gIC8qKiBBZGQgYm94IHNoYWRvdyB0byB0aGUgaGVhZGVyICovXG4gIHNoYWRvd2VkPzogYm9vbGVhbjtcbiAgLyoqIEFkZCByb3VuZGVkIGJvdHRvbSBjb3JuZXJzICovXG4gIHJvdW5kZWQ/OiBib29sZWFuO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2Z1bi1oZWFkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhbm5lck1ldGFkYXRhIH0gZnJvbSAnLi4vYmFubmVyL3R5cGVzJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgZnVuIGhlYWRlciBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVuSGVhZGVyTWV0YWRhdGEge1xuICAvKiogT3B0aW9uYWwgdG9rZW4gZm9yIHRyYWNraW5nL2FuYWx5dGljcyAqL1xuICB0b2tlbj86IHN0cmluZztcbiAgLyoqIExvZ28gaW1hZ2UgcGF0aCBvciBDU1MgdmFyaWFibGUgKGUuZy4sICctLW15LWxvZ28nKSAqL1xuICBpbWFnZT86IHN0cmluZztcbiAgLyoqIEJhY2tncm91bmQgaW1hZ2UgVVJMLCBncmFkaWVudCwgY29sb3IsIG9yIENTUyB2YXJpYWJsZSAqL1xuICBiYWNrZ3JvdW5kPzogc3RyaW5nO1xuICAvKiogRGFyayBtb2RlIGJhY2tncm91bmQgKG9wdGlvbmFsLCBmYWxscyBiYWNrIHRvIGJhY2tncm91bmQpICovXG4gIGJhY2tncm91bmREYXJrPzogc3RyaW5nO1xuICAvKiogQ3JlYXRlIGF1dG9tYXRpYyBncmFkaWVudCBmcm9tIC0taW9uLWJhY2tncm91bmQtY29sb3IgdG8gYmFja2dyb3VuZCBjb2xvciAqL1xuICBncmFkaWVudD86IGJvb2xlYW47XG4gIC8qKiBBZGQgb3ZlcmxheSBmb3IgYmV0dGVyIHRleHQgY29udHJhc3Qgb24gaW1hZ2VzICovXG4gIG92ZXJsYXk/OiBib29sZWFuO1xuICAvKiogT3ZlcmxheSBvcGFjaXR5ICgwLTEsIGRlZmF1bHQ6IDAuMykgKi9cbiAgb3ZlcmxheU9wYWNpdHk/OiBudW1iZXI7XG4gIC8qKiBCYW5uZXIgY29udGVudCBjb25maWd1cmF0aW9uICovXG4gIGNvbnRlbnQ6IEJhbm5lck1ldGFkYXRhO1xuICAvKiogQWRkIGJvcmRlciBhcm91bmQgdGhlIGhlYWRlciAqL1xuICBib3JkZXJlZD86IGJvb2xlYW47XG4gIC8qKiBBZGQgYm94IHNoYWRvdyB0byB0aGUgaGVhZGVyICovXG4gIHNoYWRvd2VkPzogYm9vbGVhbjtcbiAgLyoqIEFkZCByb3VuZGVkIGJvdHRvbSBjb3JuZXJzICovXG4gIHJvdW5kZWQ/OiBib29sZWFuO1xuICAvKiogT3ZlcnJpZGUgYm90dG9tIHBhZGRpbmcgKGUuZy4gJzgwcHgnKSB0byBjb250cm9sIG92ZXJsYXAgc3BhY2UgKi9cbiAgcGFkZGluZ0JvdHRvbT86IHN0cmluZztcbn1cbiJdfQ==