valtech-components 2.0.652 → 2.0.654
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/molecules/phone-input/phone-input.component.mjs +39 -25
- package/fesm2022/valtech-components.mjs +37 -23
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +1 -1
- package/lib/components/atoms/text/text.component.d.ts +1 -1
- package/lib/components/molecules/features-list/features-list.component.d.ts +2 -2
- package/lib/components/molecules/phone-input/phone-input.component.d.ts +1 -0
- package/lib/components/organisms/article/article.component.d.ts +4 -4
- package/lib/components/organisms/toolbar/toolbar.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
2
|
import { Component, inject, Input, Output, EventEmitter } from '@angular/core';
|
|
3
3
|
import { ReactiveFormsModule, FormControl } from '@angular/forms';
|
|
4
|
-
import {
|
|
4
|
+
import { IonSelect, IonSelectOption, IonNote, IonIcon, } from '@ionic/angular/standalone';
|
|
5
5
|
import { addIcons } from 'ionicons';
|
|
6
6
|
import { callOutline, chevronDownOutline } from 'ionicons/icons';
|
|
7
7
|
import { PresetService } from '../../../services/presets';
|
|
@@ -183,6 +183,20 @@ export class PhoneInputComponent {
|
|
|
183
183
|
this.internalNumberControl.setValue(value);
|
|
184
184
|
this.updateMainControl();
|
|
185
185
|
}
|
|
186
|
+
onNumberInputNative(event) {
|
|
187
|
+
const input = event.target;
|
|
188
|
+
// Filter non-numeric characters except spaces and dashes
|
|
189
|
+
let value = (input.value || '').replace(/[^\d\s\-]/g, '');
|
|
190
|
+
// Apply max digits limit
|
|
191
|
+
if (this.resolvedProps.maxDigits) {
|
|
192
|
+
const digitsOnly = value.replace(/\D/g, '');
|
|
193
|
+
if (digitsOnly.length > this.resolvedProps.maxDigits) {
|
|
194
|
+
value = digitsOnly.substring(0, this.resolvedProps.maxDigits);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
this.internalNumberControl.setValue(value);
|
|
198
|
+
this.updateMainControl();
|
|
199
|
+
}
|
|
186
200
|
onBlur() {
|
|
187
201
|
this.resolvedProps.control?.markAsTouched();
|
|
188
202
|
}
|
|
@@ -251,19 +265,19 @@ export class PhoneInputComponent {
|
|
|
251
265
|
}
|
|
252
266
|
|
|
253
267
|
<div class="number-input">
|
|
254
|
-
<ion-
|
|
255
|
-
|
|
268
|
+
<ion-icon name="call-outline" aria-hidden="true" class="phone-icon"></ion-icon>
|
|
269
|
+
<input
|
|
256
270
|
type="tel"
|
|
257
271
|
inputmode="tel"
|
|
272
|
+
[formControl]="internalNumberControl"
|
|
258
273
|
[placeholder]="getPlaceholder()"
|
|
259
|
-
[disabled]="resolvedProps.state === states.DISABLED"
|
|
260
|
-
[readonly]="resolvedProps.state === states.WORKING"
|
|
261
|
-
[
|
|
262
|
-
(
|
|
263
|
-
(
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
</ion-input>
|
|
274
|
+
[attr.disabled]="resolvedProps.state === states.DISABLED ? true : null"
|
|
275
|
+
[attr.readonly]="resolvedProps.state === states.WORKING ? true : null"
|
|
276
|
+
[maxLength]="resolvedProps.maxDigits || 15"
|
|
277
|
+
(input)="onNumberInputNative($event)"
|
|
278
|
+
(blur)="onBlur()"
|
|
279
|
+
class="phone-native-input"
|
|
280
|
+
/>
|
|
267
281
|
</div>
|
|
268
282
|
</div>
|
|
269
283
|
|
|
@@ -277,11 +291,11 @@ export class PhoneInputComponent {
|
|
|
277
291
|
</ion-note>
|
|
278
292
|
}
|
|
279
293
|
</div>
|
|
280
|
-
`, isInline: true, styles: [":host{display:block;width:100%}.phone-input-container.has-error .phone-input-wrapper{border-color:var(--ion-color-danger)}.phone-label{display:block;font-size:14px;font-weight:
|
|
294
|
+
`, isInline: true, styles: [":host{display:block;width:100%}.phone-input-container.has-error .phone-input-wrapper{border-color:var(--ion-color-danger)}.phone-label{display:block;font-size:14px;font-weight:700;color:var(--ion-color-dark);margin-bottom:8px}.phone-input-wrapper{display:flex;align-items:stretch;border:1px solid var(--ion-border-color, #e0e0e0);border-radius:28px;background:var(--ion-background-color, #fff);overflow:hidden;transition:border-color .2s;height:56px}.phone-input-wrapper:focus-within{border-color:var(--ion-color-primary)}.phone-input-wrapper.disabled{opacity:.5;pointer-events:none}.country-selector{flex-shrink:0;border-right:1px solid var(--ion-border-color, #e0e0e0);background:var(--ion-color-light-tint, #f5f5f5);display:flex;align-items:center;padding:0 4px 0 12px}.country-selector ion-select{--background: transparent;--border-style: none;--border-width: 0;--border-color: transparent;--border-radius: 0;--box-shadow: none;--padding-start: 4px;--padding-end: 4px;--padding-top: 0;--padding-bottom: 0;--highlight-color-focused: transparent;--highlight-color-valid: transparent;--highlight-color-invalid: transparent;min-width:80px;max-width:100px}.country-selector ion-select::part(container){border:none;box-shadow:none}.country-selector ion-select::part(icon){opacity:.6}.country-selector .flag{margin-right:4px}.dial-code-display{flex-shrink:0;padding:0 12px;font-weight:500;color:var(--ion-color-medium-shade);border-right:1px solid var(--ion-border-color, #e0e0e0);background:var(--ion-color-light-tint, #f5f5f5);display:flex;align-items:center}.number-input{flex:1;display:flex;align-items:center;background:transparent;padding:0 16px 0 12px}.number-input .phone-icon{color:var(--ion-color-medium);font-size:18px;margin-right:10px;flex-shrink:0}.number-input .phone-native-input{flex:1;width:100%;height:100%;border:none;outline:none;background:transparent;font-size:16px;font-family:inherit;color:var(--ion-text-color, #000)}.number-input .phone-native-input::placeholder{color:var(--ion-color-medium, #92949c)}.number-input .phone-native-input:focus{outline:none;border:none}.number-input .phone-native-input:disabled{opacity:.5;cursor:not-allowed}.hint{display:block;font-size:12px;color:var(--ion-color-medium);margin-top:4px;padding-left:4px}.error-message{display:block;font-size:12px;margin-top:4px;padding-left:4px}::ng-deep .country-select-popover{--width: 200px}::ng-deep .country-select-popover .flag{margin-right:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
|
|
281
295
|
}
|
|
282
296
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhoneInputComponent, decorators: [{
|
|
283
297
|
type: Component,
|
|
284
|
-
args: [{ selector: 'val-phone-input', standalone: true, imports: [CommonModule, ReactiveFormsModule,
|
|
298
|
+
args: [{ selector: 'val-phone-input', standalone: true, imports: [CommonModule, ReactiveFormsModule, IonSelect, IonSelectOption, IonNote, IonIcon], template: `
|
|
285
299
|
<div class="phone-input-container" [class]="resolvedProps.cssClass" [class.has-error]="hasError">
|
|
286
300
|
@if (resolvedProps.label) {
|
|
287
301
|
<label class="phone-label">{{ getLabel() }}</label>
|
|
@@ -314,19 +328,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
314
328
|
}
|
|
315
329
|
|
|
316
330
|
<div class="number-input">
|
|
317
|
-
<ion-
|
|
318
|
-
|
|
331
|
+
<ion-icon name="call-outline" aria-hidden="true" class="phone-icon"></ion-icon>
|
|
332
|
+
<input
|
|
319
333
|
type="tel"
|
|
320
334
|
inputmode="tel"
|
|
335
|
+
[formControl]="internalNumberControl"
|
|
321
336
|
[placeholder]="getPlaceholder()"
|
|
322
|
-
[disabled]="resolvedProps.state === states.DISABLED"
|
|
323
|
-
[readonly]="resolvedProps.state === states.WORKING"
|
|
324
|
-
[
|
|
325
|
-
(
|
|
326
|
-
(
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
</ion-input>
|
|
337
|
+
[attr.disabled]="resolvedProps.state === states.DISABLED ? true : null"
|
|
338
|
+
[attr.readonly]="resolvedProps.state === states.WORKING ? true : null"
|
|
339
|
+
[maxLength]="resolvedProps.maxDigits || 15"
|
|
340
|
+
(input)="onNumberInputNative($event)"
|
|
341
|
+
(blur)="onBlur()"
|
|
342
|
+
class="phone-native-input"
|
|
343
|
+
/>
|
|
330
344
|
</div>
|
|
331
345
|
</div>
|
|
332
346
|
|
|
@@ -340,7 +354,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
340
354
|
</ion-note>
|
|
341
355
|
}
|
|
342
356
|
</div>
|
|
343
|
-
`, styles: [":host{display:block;width:100%}.phone-input-container.has-error .phone-input-wrapper{border-color:var(--ion-color-danger)}.phone-label{display:block;font-size:14px;font-weight:
|
|
357
|
+
`, styles: [":host{display:block;width:100%}.phone-input-container.has-error .phone-input-wrapper{border-color:var(--ion-color-danger)}.phone-label{display:block;font-size:14px;font-weight:700;color:var(--ion-color-dark);margin-bottom:8px}.phone-input-wrapper{display:flex;align-items:stretch;border:1px solid var(--ion-border-color, #e0e0e0);border-radius:28px;background:var(--ion-background-color, #fff);overflow:hidden;transition:border-color .2s;height:56px}.phone-input-wrapper:focus-within{border-color:var(--ion-color-primary)}.phone-input-wrapper.disabled{opacity:.5;pointer-events:none}.country-selector{flex-shrink:0;border-right:1px solid var(--ion-border-color, #e0e0e0);background:var(--ion-color-light-tint, #f5f5f5);display:flex;align-items:center;padding:0 4px 0 12px}.country-selector ion-select{--background: transparent;--border-style: none;--border-width: 0;--border-color: transparent;--border-radius: 0;--box-shadow: none;--padding-start: 4px;--padding-end: 4px;--padding-top: 0;--padding-bottom: 0;--highlight-color-focused: transparent;--highlight-color-valid: transparent;--highlight-color-invalid: transparent;min-width:80px;max-width:100px}.country-selector ion-select::part(container){border:none;box-shadow:none}.country-selector ion-select::part(icon){opacity:.6}.country-selector .flag{margin-right:4px}.dial-code-display{flex-shrink:0;padding:0 12px;font-weight:500;color:var(--ion-color-medium-shade);border-right:1px solid var(--ion-border-color, #e0e0e0);background:var(--ion-color-light-tint, #f5f5f5);display:flex;align-items:center}.number-input{flex:1;display:flex;align-items:center;background:transparent;padding:0 16px 0 12px}.number-input .phone-icon{color:var(--ion-color-medium);font-size:18px;margin-right:10px;flex-shrink:0}.number-input .phone-native-input{flex:1;width:100%;height:100%;border:none;outline:none;background:transparent;font-size:16px;font-family:inherit;color:var(--ion-text-color, #000)}.number-input .phone-native-input::placeholder{color:var(--ion-color-medium, #92949c)}.number-input .phone-native-input:focus{outline:none;border:none}.number-input .phone-native-input:disabled{opacity:.5;cursor:not-allowed}.hint{display:block;font-size:12px;color:var(--ion-color-medium);margin-top:4px;padding-left:4px}.error-message{display:block;font-size:12px;margin-top:4px;padding-left:4px}::ng-deep .country-select-popover{--width: 200px}::ng-deep .country-select-popover .flag{margin-right:8px}\n"] }]
|
|
344
358
|
}], propDecorators: { preset: [{
|
|
345
359
|
type: Input
|
|
346
360
|
}], props: [{
|
|
@@ -348,4 +362,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
348
362
|
}], phoneChange: [{
|
|
349
363
|
type: Output
|
|
350
364
|
}] } });
|
|
351
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9waG9uZS1pbnB1dC9waG9uZS1pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUErQyxNQUFNLGVBQWUsQ0FBQztBQUM1SCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUNMLFFBQVEsRUFDUixTQUFTLEVBQ1QsZUFBZSxFQUNmLE9BQU8sRUFDUCxPQUFPLEdBQ1IsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEVBQTBELG9CQUFvQixFQUFFLE1BQU0sU0FBUyxDQUFDOzs7QUFFdkcsUUFBUSxDQUFDLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztBQW9FOUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBQ0gsTUFBTSxPQUFPLG1CQUFtQjtJQWhHaEM7UUFpR1UsWUFBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQVd4Qzs7V0FFRztRQUNNLFVBQUssR0FBZ0MsRUFBRSxDQUFDO1FBRWpEOztXQUVHO1FBQ0gsa0JBQWEs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QUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsNkJBQTZCO1FBQzdCLE9BQU8sVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQzsrR0E3TlUsbUJBQW1CO21HQUFuQixtQkFBbUIsdUxBNUZwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyRFQsNitGQTVEUyxZQUFZLDhCQUFFLG1CQUFtQiw2ZEFBRSxRQUFRLDhlQUFFLFNBQVMsa1ZBQUUsZUFBZSw2RkFBRSxPQUFPLGdGQUFFLE9BQU87OzRGQTZGeEYsbUJBQW1CO2tCQWhHL0IsU0FBUzsrQkFDRSxpQkFBaUIsY0FDZixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxZQUMxRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyRFQ7OEJBMkNRLE1BQU07c0JBQWQsS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBT0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIElvbklucHV0LFxuICBJb25TZWxlY3QsXG4gIElvblNlbGVjdE9wdGlvbixcbiAgSW9uTm90ZSxcbiAgSW9uSWNvbixcbn0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgY2FsbE91dGxpbmUsIGNoZXZyb25Eb3duT3V0bGluZSB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcbmltcG9ydCB7IFByZXNldFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcmVzZXRzJztcbmltcG9ydCB7IENvbXBvbmVudFN0YXRlcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IFBob25lSW5wdXRNZXRhZGF0YSwgUGhvbmVJbnB1dENoYW5nZUV2ZW50LCBDb3VudHJ5Q29kZSwgQ09NTU9OX0NPVU5UUllfQ09ERVMgfSBmcm9tICcuL3R5cGVzJztcblxuYWRkSWNvbnMoeyBjYWxsT3V0bGluZSwgY2hldnJvbkRvd25PdXRsaW5lIH0pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtcGhvbmUtaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBJb25JbnB1dCwgSW9uU2VsZWN0LCBJb25TZWxlY3RPcHRpb24sIElvbk5vdGUsIElvbkljb25dLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJwaG9uZS1pbnB1dC1jb250YWluZXJcIiBbY2xhc3NdPVwicmVzb2x2ZWRQcm9wcy5jc3NDbGFzc1wiIFtjbGFzcy5oYXMtZXJyb3JdPVwiaGFzRXJyb3JcIj5cbiAgICAgIEBpZiAocmVzb2x2ZWRQcm9wcy5sYWJlbCkge1xuICAgICAgICA8bGFiZWwgY2xhc3M9XCJwaG9uZS1sYWJlbFwiPnt7IGdldExhYmVsKCkgfX08L2xhYmVsPlxuICAgICAgfVxuXG4gICAgICA8ZGl2IGNsYXNzPVwicGhvbmUtaW5wdXQtd3JhcHBlclwiIFtjbGFzcy5kaXNhYmxlZF09XCJyZXNvbHZlZFByb3BzLnN0YXRlID09PSBzdGF0ZXMuRElTQUJMRURcIj5cbiAgICAgICAgQGlmIChyZXNvbHZlZFByb3BzLnNob3dDb3VudHJ5U2VsZWN0b3IgIT09IGZhbHNlKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50cnktc2VsZWN0b3JcIj5cbiAgICAgICAgICAgIDxpb24tc2VsZWN0XG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJpbnRlcm5hbENvdW50cnlDb250cm9sXCJcbiAgICAgICAgICAgICAgaW50ZXJmYWNlPVwicG9wb3ZlclwiXG4gICAgICAgICAgICAgIFtpbnRlcmZhY2VPcHRpb25zXT1cInsgY3NzQ2xhc3M6ICdjb3VudHJ5LXNlbGVjdC1wb3BvdmVyJyB9XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlc29sdmVkUHJvcHMuc3RhdGUgPT09IHN0YXRlcy5ESVNBQkxFRFwiXG4gICAgICAgICAgICAgIChpb25DaGFuZ2UpPVwib25Db3VudHJ5Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBAZm9yIChjb3VudHJ5IG9mIGdldENvdW50cnlMaXN0KCk7IHRyYWNrIGNvdW50cnkuY29kZSkge1xuICAgICAgICAgICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiBbdmFsdWVdPVwiY291bnRyeS5jb2RlXCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKHJlc29sdmVkUHJvcHMuc2hvd0ZsYWcgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxhZ1wiPnt7IGNvdW50cnkuZmxhZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHt7IGNvdW50cnkuZGlhbENvZGUgfX1cbiAgICAgICAgICAgICAgICA8L2lvbi1zZWxlY3Qtb3B0aW9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2lvbi1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaWFsLWNvZGUtZGlzcGxheVwiPlxuICAgICAgICAgICAge3sgZ2V0U2VsZWN0ZWRDb3VudHJ5KCk/LmRpYWxDb2RlIHx8ICcrMScgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJudW1iZXItaW5wdXRcIj5cbiAgICAgICAgICA8aW9uLWlucHV0XG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiaW50ZXJuYWxOdW1iZXJDb250cm9sXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZWxcIlxuICAgICAgICAgICAgaW5wdXRtb2RlPVwidGVsXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnZXRQbGFjZWhvbGRlcigpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZXNvbHZlZFByb3BzLnN0YXRlID09PSBzdGF0ZXMuRElTQUJMRURcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlc29sdmVkUHJvcHMuc3RhdGUgPT09IHN0YXRlcy5XT1JLSU5HXCJcbiAgICAgICAgICAgIFttYXhsZW5ndGhdPVwicmVzb2x2ZWRQcm9wcy5tYXhEaWdpdHMgfHwgMTVcIlxuICAgICAgICAgICAgKGlvbklucHV0KT1cIm9uTnVtYmVySW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoaW9uQmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJjYWxsLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWlucHV0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAaWYgKHJlc29sdmVkUHJvcHMuaGludCAmJiAhaGFzRXJyb3IpIHtcbiAgICAgICAgPGlvbi1ub3RlIGNsYXNzPVwiaGludFwiPnt7IGdldEhpbnQoKSB9fTwvaW9uLW5vdGU+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoaGFzRXJyb3IgJiYgcmVzb2x2ZWRQcm9wcy5zaG93RXJyb3JzKSB7XG4gICAgICAgIDxpb24tbm90ZSBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiBjb2xvcj1cImRhbmdlclwiPlxuICAgICAgICAgIHt7IGdldEVycm9yTWVzc2FnZSgpIH19XG4gICAgICAgIDwvaW9uLW5vdGU+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL3Bob25lLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtcGhvbmUtaW5wdXRcbiAqXG4gKiBBIHBob25lIG51bWJlciBpbnB1dCB3aXRoIGNvdW50cnkgY29kZSBzZWxlY3Rvci5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZVxuICogYGBgaHRtbFxuICogPHZhbC1waG9uZS1pbnB1dFxuICogICBbcHJvcHNdPVwie1xuICogICAgIGNvbnRyb2w6IHBob25lQ29udHJvbCxcbiAqICAgICBwbGFjZWhvbGRlcjogJ1Bob25lIG51bWJlcicsXG4gKiAgICAgZGVmYXVsdENvdW50cnk6ICdNWCdcbiAqICAgfVwiXG4gKiA+PC92YWwtcGhvbmUtaW5wdXQ+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBXaXRoIGN1c3RvbSBjb3VudHJpZXNcbiAqIGBgYGh0bWxcbiAqIDx2YWwtcGhvbmUtaW5wdXRcbiAqICAgW3Byb3BzXT1cIntcbiAqICAgICBjb250cm9sOiBwaG9uZUNvbnRyb2wsXG4gKiAgICAgbGFiZWw6ICdQaG9uZScsXG4gKiAgICAgY291bnRyeUNvZGVzOiBteUNvdW50cnlDb2RlcyxcbiAqICAgICBwcmVmZXJyZWRDb3VudHJpZXM6IFsnTVgnLCAnVVMnLCAnRVMnXSxcbiAqICAgICBzaG93RXJyb3JzOiB0cnVlXG4gKiAgIH1cIlxuICogICAocGhvbmVDaGFuZ2UpPVwib25QaG9uZUNoYW5nZSgkZXZlbnQpXCJcbiAqID48L3ZhbC1waG9uZS1pbnB1dD5cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUGhvbmVJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHByZXNldHMgPSBpbmplY3QoUHJlc2V0U2VydmljZSk7XG5cbiAgLyoqXG4gICAqIFByZXNldCBuYW1lIHRvIGFwcGx5LiBQcmVzZXRzIGRlZmluZSByZXVzYWJsZSBwaG9uZSBpbnB1dCBjb25maWd1cmF0aW9uc1xuICAgKiB0aGF0IGNhbiBiZSByZWdpc3RlcmVkIGF0IGFwcCBsZXZlbCB2aWEgcHJvdmlkZVZhbHRlY2hQcmVzZXRzKCkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIDx2YWwtcGhvbmUtaW5wdXQgcHJlc2V0PVwiZm9ybS1maWVsZFwiIFtwcm9wc109XCJ7IGNvbnRyb2w6IGN0cmwgfVwiPjwvdmFsLXBob25lLWlucHV0PlxuICAgKi9cbiAgQElucHV0KCkgcHJlc2V0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQaG9uZSBpbnB1dCBjb25maWd1cmF0aW9uIG9iamVjdC4gVmFsdWVzIGhlcmUgb3ZlcnJpZGUgcHJlc2V0IHZhbHVlcy5cbiAgICovXG4gIEBJbnB1dCgpIHByb3BzOiBQYXJ0aWFsPFBob25lSW5wdXRNZXRhZGF0YT4gPSB7fTtcblxuICAvKipcbiAgICogUmVzb2x2ZWQgcHJvcHMgYWZ0ZXIgbWVyZ2luZyBwcmVzZXQgKyBleHBsaWNpdCBwcm9wcy5cbiAgICovXG4gIHJlc29sdmVkUHJvcHM6IFBob25lSW5wdXRNZXRhZGF0YSA9IHt9IGFzIFBob25lSW5wdXRNZXRhZGF0YTtcblxuICBAT3V0cHV0KCkgcGhvbmVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFBob25lSW5wdXRDaGFuZ2VFdmVudD4oKTtcblxuICBzdGF0ZXMgPSBDb21wb25lbnRTdGF0ZXM7XG5cbiAgaW50ZXJuYWxDb3VudHJ5Q29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KCcnKTtcbiAgaW50ZXJuYWxOdW1iZXJDb250cm9sID0gbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJycpO1xuXG4gIHByaXZhdGUgdmFsdWVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlzSW50ZXJuYWxVcGRhdGUgPSBmYWxzZTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc29sdmVQcm9wcygpO1xuICAgIHRoaXMuc2V0dXBDb21wb25lbnQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sncHJlc2V0J10gfHwgY2hhbmdlc1sncHJvcHMnXSkge1xuICAgICAgdGhpcy5yZXNvbHZlUHJvcHMoKTtcbiAgICAgIHRoaXMuc2V0dXBDb21wb25lbnQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIHByZXNldCBjb25maWd1cmF0aW9uIHdpdGggZXhwbGljaXQgcHJvcHMuXG4gICAqIEV4cGxpY2l0IHByb3BzIHRha2UgcHJlY2VkZW5jZSBvdmVyIHByZXNldCB2YWx1ZXMuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVQcm9wcygpOiB2b2lkIHtcbiAgICBjb25zdCBwcmVzZXRQcm9wcyA9IHRoaXMucHJlc2V0XG4gICAgICA/ICh0aGlzLnByZXNldHMuZ2V0KCdwaG9uZUlucHV0JywgdGhpcy5wcmVzZXQpIGFzIFBhcnRpYWw8UGhvbmVJbnB1dE1ldGFkYXRhPilcbiAgICAgIDoge307XG5cbiAgICB0aGlzLnJlc29sdmVkUHJvcHMgPSB7XG4gICAgICAuLi5wcmVzZXRQcm9wcyxcbiAgICAgIC4uLnRoaXMucHJvcHMsXG4gICAgfSBhcyBQaG9uZUlucHV0TWV0YWRhdGE7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQ29tcG9uZW50KCk6IHZvaWQge1xuICAgIC8vIFNldCBkZWZhdWx0IGNvdW50cnlcbiAgICBjb25zdCBkZWZhdWx0Q291bnRyeSA9IHRoaXMucmVzb2x2ZWRQcm9wcy5kZWZhdWx0Q291bnRyeSB8fCAnVVMnO1xuICAgIHRoaXMuaW50ZXJuYWxDb3VudHJ5Q29udHJvbC5zZXRWYWx1ZShkZWZhdWx0Q291bnRyeSk7XG5cbiAgICAvLyBTeW5jIHdpdGggZXh0ZXJuYWwgY29udHJvbHMgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy5yZXNvbHZlZFByb3BzLmNvdW50cnlDb250cm9sKSB7XG4gICAgICB0aGlzLmludGVybmFsQ291bnRyeUNvbnRyb2wgPSB0aGlzLnJlc29sdmVkUHJvcHMuY291bnRyeUNvbnRyb2w7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlc29sdmVkUHJvcHMubnVtYmVyQ29udHJvbCkge1xuICAgICAgdGhpcy5pbnRlcm5hbE51bWJlckNvbnRyb2wgPSB0aGlzLnJlc29sdmVkUHJvcHMubnVtYmVyQ29udHJvbDtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBpbml0aWFsIHZhbHVlIGZyb20gbWFpbiBjb250cm9sXG4gICAgaWYgKHRoaXMucmVzb2x2ZWRQcm9wcy5jb250cm9sPy52YWx1ZSkge1xuICAgICAgdGhpcy5wYXJzZVBob25lTnVtYmVyKHRoaXMucmVzb2x2ZWRQcm9wcy5jb250cm9sLnZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gbWFpbiBjb250cm9sIGNoYW5nZXNcbiAgICB0aGlzLnZhbHVlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudmFsdWVTdWJzY3JpcHRpb24gPSB0aGlzLnJlc29sdmVkUHJvcHMuY29udHJvbD8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgJiYgIXRoaXMuaXNJbnRlcm5hbFVwZGF0ZSkge1xuICAgICAgICB0aGlzLnBhcnNlUGhvbmVOdW1iZXIodmFsdWUpO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlUGhvbmVOdW1iZXIodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgIC8vIFRyeSB0byBleHRyYWN0IGNvdW50cnkgY29kZVxuICAgIGNvbnN0IGNvdW50cmllcyA9IHRoaXMuZ2V0Q291bnRyeUxpc3QoKTtcbiAgICBmb3IgKGNvbnN0IGNvdW50cnkgb2YgY291bnRyaWVzKSB7XG4gICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChjb3VudHJ5LmRpYWxDb2RlKSkge1xuICAgICAgICB0aGlzLmludGVybmFsQ291bnRyeUNvbnRyb2wuc2V0VmFsdWUoY291bnRyeS5jb2RlKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbE51bWJlckNvbnRyb2wuc2V0VmFsdWUodmFsdWUuc3Vic3RyaW5nKGNvdW50cnkuZGlhbENvZGUubGVuZ3RoKS50cmltKCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gY291bnRyeSBjb2RlIGZvdW5kLCBqdXN0IHNldCB0aGUgbnVtYmVyXG4gICAgdGhpcy5pbnRlcm5hbE51bWJlckNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICB9XG5cbiAgZ2V0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZFByb3BzLmxhYmVsIHx8ICcnO1xuICB9XG5cbiAgZ2V0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgZm9ybWF0IGZyb20gc2VsZWN0ZWQgY291bnRyeSBpZiBhdmFpbGFibGVcbiAgICBjb25zdCBjb3VudHJ5ID0gdGhpcy5nZXRTZWxlY3RlZENvdW50cnkoKTtcbiAgICBpZiAoY291bnRyeT8uZm9ybWF0ICYmICF0aGlzLnJlc29sdmVkUHJvcHMucGxhY2Vob2xkZXIpIHtcbiAgICAgIHJldHVybiBjb3VudHJ5LmZvcm1hdDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRQcm9wcy5wbGFjZWhvbGRlciB8fCAnJztcbiAgfVxuXG4gIGdldEhpbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZFByb3BzLmhpbnQgfHwgJyc7XG4gIH1cblxuICBnZXRDb3VudHJ5TGlzdCgpOiBDb3VudHJ5Q29kZVtdIHtcbiAgICBjb25zdCBjb3VudHJpZXMgPSB0aGlzLnJlc29sdmVkUHJvcHMuY291bnRyeUNvZGVzIHx8IENPTU1PTl9DT1VOVFJZX0NPREVTO1xuXG4gICAgLy8gU29ydCBieSBwcmVmZXJyZWQgY291bnRyaWVzIGZpcnN0XG4gICAgaWYgKHRoaXMucmVzb2x2ZWRQcm9wcy5wcmVmZXJyZWRDb3VudHJpZXM/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgcHJlZmVycmVkID0gdGhpcy5yZXNvbHZlZFByb3BzLnByZWZlcnJlZENvdW50cmllcztcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLmNvdW50cmllcy5maWx0ZXIoYyA9PiBwcmVmZXJyZWQuaW5jbHVkZXMoYy5jb2RlKSksXG4gICAgICAgIC4uLmNvdW50cmllcy5maWx0ZXIoYyA9PiAhcHJlZmVycmVkLmluY2x1ZGVzKGMuY29kZSkpLFxuICAgICAgXTtcbiAgICB9XG5cbiAgICByZXR1cm4gY291bnRyaWVzO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRDb3VudHJ5KCk6IENvdW50cnlDb2RlIHwgbnVsbCB7XG4gICAgY29uc3QgY29kZSA9IHRoaXMuaW50ZXJuYWxDb3VudHJ5Q29udHJvbC52YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5nZXRDb3VudHJ5TGlzdCgpLmZpbmQoYyA9PiBjLmNvZGUgPT09IGNvZGUpIHx8IG51bGw7XG4gIH1cblxuICBnZXQgaGFzRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMucmVzb2x2ZWRQcm9wcy5jb250cm9sPy50b3VjaGVkICYmIHRoaXMucmVzb2x2ZWRQcm9wcy5jb250cm9sPy5pbnZhbGlkKTtcbiAgfVxuXG4gIGdldEVycm9yTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5yZXNvbHZlZFByb3BzLmNvbnRyb2w/LmVycm9ycyB8fCAhdGhpcy5yZXNvbHZlZFByb3BzLmVycm9ycykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucmVzb2x2ZWRQcm9wcy5jb250cm9sLmVycm9ycyk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgZXJyb3JLZXlzKSB7XG4gICAgICBpZiAodGhpcy5yZXNvbHZlZFByb3BzLmVycm9yc1trZXldKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVkUHJvcHMuZXJyb3JzW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgb25Db3VudHJ5Q2hhbmdlKGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlTWFpbkNvbnRyb2woKTtcbiAgfVxuXG4gIG9uTnVtYmVySW5wdXQoZXZlbnQ6IEN1c3RvbUV2ZW50KTogdm9pZCB7XG4gICAgLy8gRmlsdGVyIG5vbi1udW1lcmljIGNoYXJhY3RlcnMgZXhjZXB0IHNwYWNlcyBhbmQgZGFzaGVzXG4gICAgbGV0IHZhbHVlID0gKGV2ZW50LmRldGFpbC52YWx1ZSB8fCAnJykucmVwbGFjZSgvW15cXGRcXHNcXC1dL2csICcnKTtcblxuICAgIC8vIEFwcGx5IG1heCBkaWdpdHMgbGltaXRcbiAgICBpZiAodGhpcy5yZXNvbHZlZFByb3BzLm1heERpZ2l0cykge1xuICAgICAgY29uc3QgZGlnaXRzT25seSA9IHZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgICBpZiAoZGlnaXRzT25seS5sZW5ndGggPiB0aGlzLnJlc29sdmVkUHJvcHMubWF4RGlnaXRzKSB7XG4gICAgICAgIHZhbHVlID0gZGlnaXRzT25seS5zdWJzdHJpbmcoMCwgdGhpcy5yZXNvbHZlZFByb3BzLm1heERpZ2l0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbnRlcm5hbE51bWJlckNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlTWFpbkNvbnRyb2woKTtcbiAgfVxuXG4gIG9uQmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLnJlc29sdmVkUHJvcHMuY29udHJvbD8ubWFya0FzVG91Y2hlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNYWluQ29udHJvbCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb3VudHJ5ID0gdGhpcy5nZXRTZWxlY3RlZENvdW50cnkoKTtcbiAgICBjb25zdCBudW1iZXIgPSB0aGlzLmludGVybmFsTnVtYmVyQ29udHJvbC52YWx1ZSB8fCAnJztcbiAgICBjb25zdCBmdWxsTnVtYmVyID0gY291bnRyeSA/IGAke2NvdW50cnkuZGlhbENvZGV9JHtudW1iZXJ9YCA6IG51bWJlcjtcblxuICAgIHRoaXMuaXNJbnRlcm5hbFVwZGF0ZSA9IHRydWU7XG4gICAgdGhpcy5yZXNvbHZlZFByb3BzLmNvbnRyb2w/LnNldFZhbHVlKGZ1bGxOdW1iZXIpO1xuICAgIHRoaXMuaXNJbnRlcm5hbFVwZGF0ZSA9IGZhbHNlO1xuXG4gICAgLy8gRW1pdCBjaGFuZ2UgZXZlbnRcbiAgICBjb25zdCBkaWdpdHNPbmx5ID0gbnVtYmVyLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMudmFsaWRhdGVOdW1iZXIoZGlnaXRzT25seSk7XG5cbiAgICB0aGlzLnBob25lQ2hhbmdlLmVtaXQoe1xuICAgICAgZnVsbE51bWJlcixcbiAgICAgIG51bWJlcixcbiAgICAgIGNvdW50cnksXG4gICAgICBpc1ZhbGlkLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZU51bWJlcihkaWdpdHNPbmx5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5yZXNvbHZlZFByb3BzLm1pbkRpZ2l0cyAmJiBkaWdpdHNPbmx5Lmxlbmd0aCA8IHRoaXMucmVzb2x2ZWRQcm9wcy5taW5EaWdpdHMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVzb2x2ZWRQcm9wcy5tYXhEaWdpdHMgJiYgZGlnaXRzT25seS5sZW5ndGggPiB0aGlzLnJlc29sdmVkUHJvcHMubWF4RGlnaXRzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlc29sdmVkUHJvcHMucGF0dGVybikge1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHRoaXMucmVzb2x2ZWRQcm9wcy5wYXR0ZXJuKTtcbiAgICAgIHJldHVybiByZWdleC50ZXN0KGRpZ2l0c09ubHkpO1xuICAgIH1cbiAgICAvLyBEZWZhdWx0OiBhdCBsZWFzdCA3IGRpZ2l0c1xuICAgIHJldHVybiBkaWdpdHNPbmx5Lmxlbmd0aCA+PSA3O1xuICB9XG59XG4iXX0=
|
|
365
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9waG9uZS1pbnB1dC9waG9uZS1pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUErQyxNQUFNLGVBQWUsQ0FBQztBQUM1SCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUNMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsT0FBTyxFQUNQLE9BQU8sR0FDUixNQUFNLDJCQUEyQixDQUFDO0FBRW5DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBMEQsb0JBQW9CLEVBQUUsTUFBTSxTQUFTLENBQUM7OztBQUV2RyxRQUFRLENBQUMsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0FBb0U5Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFDSCxNQUFNLE9BQU8sbUJBQW1CO0lBaEdoQztRQWlHVSxZQUFPLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBV3hDOztXQUVHO1FBQ00sVUFBSyxHQUFnQyxFQUFFLENBQUM7UUFFakQ7O1dBRUc7UUFDSCxrQkFBYSxHQUF1QixFQUF3QixDQUFDO1FBRW5ELGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQXlCLENBQUM7UUFFbEUsV0FBTSxHQUFHLGVBQWUsQ0FBQztRQUV6QiwyQkFBc0IsR0FBRyxJQUFJLFdBQVcsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUNyRCwwQkFBcUIsR0FBRyxJQUFJLFdBQVcsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUU1QyxzQkFBaUIsR0FBd0IsSUFBSSxDQUFDO1FBQzlDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztLQWlObEM7SUEvTUMsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssWUFBWTtRQUNsQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTTtZQUM3QixDQUFDLENBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQWlDO1lBQzlFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFUCxJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLEdBQUcsV0FBVztZQUNkLEdBQUcsSUFBSSxDQUFDLEtBQUs7U0FDUSxDQUFDO0lBQzFCLENBQUM7SUFFTyxjQUFjO1FBQ3BCLHNCQUFzQjtRQUN0QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUM7UUFDakUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVyRCwwQ0FBMEM7UUFDMUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztRQUNoRSxDQUFDO1FBRUQsd0NBQXdDO1FBQ3hDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFFRCxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xGLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQWE7UUFDcEMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBRW5CLDhCQUE4QjtRQUM5QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEMsS0FBSyxNQUFNLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNoQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRixPQUFPO1lBQ1QsQ0FBQztRQUNILENBQUM7UUFFRCxnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxjQUFjO1FBQ1osZ0RBQWdEO1FBQ2hELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFDLElBQUksT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ3hCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLElBQUksb0JBQW9CLENBQUM7UUFFMUUsb0NBQW9DO1FBQ3BDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNsRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDO1lBQ3hELE9BQU87Z0JBQ0wsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BELEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdEQsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUM7UUFDL0MsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDbEUsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEUsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRSxLQUFLLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFrQjtRQUNoQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWtCO1FBQzlCLHlEQUF5RDtRQUN6RCxJQUFJLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakUseUJBQXlCO1FBQ3pCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1QyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDckQsS0FBSyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDaEUsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFZO1FBQzlCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUEwQixDQUFDO1FBQy9DLHlEQUF5RDtRQUN6RCxJQUFJLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUxRCx5QkFBeUI7UUFDekIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNyRCxLQUFLLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNoRSxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3RELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFckUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUU5QixvQkFBb0I7UUFDcEIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVoRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNwQixVQUFVO1lBQ1YsTUFBTTtZQUNOLE9BQU87WUFDUCxPQUFPO1NBQ1IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGNBQWMsQ0FBQyxVQUFrQjtRQUN2QyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyRixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyRixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELDZCQUE2QjtRQUM3QixPQUFPLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7K0dBOU9VLG1CQUFtQjttR0FBbkIsbUJBQW1CLHVMQTVGcEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkRULHM5RUE1RFMsWUFBWSw4QkFBRSxtQkFBbUIsMGtCQUFFLFNBQVMsa1ZBQUUsZUFBZSw2RkFBRSxPQUFPLGdGQUFFLE9BQU87OzRGQTZGOUUsbUJBQW1CO2tCQWhHL0IsU0FBUzsrQkFDRSxpQkFBaUIsY0FDZixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLFlBQ2hGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJEVDs4QkEyQ1EsTUFBTTtzQkFBZCxLQUFLO2dCQUtHLEtBQUs7c0JBQWIsS0FBSztnQkFPSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgSW9uU2VsZWN0LFxuICBJb25TZWxlY3RPcHRpb24sXG4gIElvbk5vdGUsXG4gIElvbkljb24sXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGNhbGxPdXRsaW5lLCBjaGV2cm9uRG93bk91dGxpbmUgfSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyBQcmVzZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJlc2V0cyc7XG5pbXBvcnQgeyBDb21wb25lbnRTdGF0ZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBQaG9uZUlucHV0TWV0YWRhdGEsIFBob25lSW5wdXRDaGFuZ2VFdmVudCwgQ291bnRyeUNvZGUsIENPTU1PTl9DT1VOVFJZX0NPREVTIH0gZnJvbSAnLi90eXBlcyc7XG5cbmFkZEljb25zKHsgY2FsbE91dGxpbmUsIGNoZXZyb25Eb3duT3V0bGluZSB9KTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXBob25lLWlucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgSW9uU2VsZWN0LCBJb25TZWxlY3RPcHRpb24sIElvbk5vdGUsIElvbkljb25dLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJwaG9uZS1pbnB1dC1jb250YWluZXJcIiBbY2xhc3NdPVwicmVzb2x2ZWRQcm9wcy5jc3NDbGFzc1wiIFtjbGFzcy5oYXMtZXJyb3JdPVwiaGFzRXJyb3JcIj5cbiAgICAgIEBpZiAocmVzb2x2ZWRQcm9wcy5sYWJlbCkge1xuICAgICAgICA8bGFiZWwgY2xhc3M9XCJwaG9uZS1sYWJlbFwiPnt7IGdldExhYmVsKCkgfX08L2xhYmVsPlxuICAgICAgfVxuXG4gICAgICA8ZGl2IGNsYXNzPVwicGhvbmUtaW5wdXQtd3JhcHBlclwiIFtjbGFzcy5kaXNhYmxlZF09XCJyZXNvbHZlZFByb3BzLnN0YXRlID09PSBzdGF0ZXMuRElTQUJMRURcIj5cbiAgICAgICAgQGlmIChyZXNvbHZlZFByb3BzLnNob3dDb3VudHJ5U2VsZWN0b3IgIT09IGZhbHNlKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50cnktc2VsZWN0b3JcIj5cbiAgICAgICAgICAgIDxpb24tc2VsZWN0XG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJpbnRlcm5hbENvdW50cnlDb250cm9sXCJcbiAgICAgICAgICAgICAgaW50ZXJmYWNlPVwicG9wb3ZlclwiXG4gICAgICAgICAgICAgIFtpbnRlcmZhY2VPcHRpb25zXT1cInsgY3NzQ2xhc3M6ICdjb3VudHJ5LXNlbGVjdC1wb3BvdmVyJyB9XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlc29sdmVkUHJvcHMuc3RhdGUgPT09IHN0YXRlcy5ESVNBQkxFRFwiXG4gICAgICAgICAgICAgIChpb25DaGFuZ2UpPVwib25Db3VudHJ5Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBAZm9yIChjb3VudHJ5IG9mIGdldENvdW50cnlMaXN0KCk7IHRyYWNrIGNvdW50cnkuY29kZSkge1xuICAgICAgICAgICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiBbdmFsdWVdPVwiY291bnRyeS5jb2RlXCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKHJlc29sdmVkUHJvcHMuc2hvd0ZsYWcgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxhZ1wiPnt7IGNvdW50cnkuZmxhZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHt7IGNvdW50cnkuZGlhbENvZGUgfX1cbiAgICAgICAgICAgICAgICA8L2lvbi1zZWxlY3Qtb3B0aW9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2lvbi1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaWFsLWNvZGUtZGlzcGxheVwiPlxuICAgICAgICAgICAge3sgZ2V0U2VsZWN0ZWRDb3VudHJ5KCk/LmRpYWxDb2RlIHx8ICcrMScgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJudW1iZXItaW5wdXRcIj5cbiAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNhbGwtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwicGhvbmUtaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGVsXCJcbiAgICAgICAgICAgIGlucHV0bW9kZT1cInRlbFwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiaW50ZXJuYWxOdW1iZXJDb250cm9sXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnZXRQbGFjZWhvbGRlcigpXCJcbiAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cInJlc29sdmVkUHJvcHMuc3RhdGUgPT09IHN0YXRlcy5ESVNBQkxFRCA/IHRydWUgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLnJlYWRvbmx5XT1cInJlc29sdmVkUHJvcHMuc3RhdGUgPT09IHN0YXRlcy5XT1JLSU5HID8gdHJ1ZSA6IG51bGxcIlxuICAgICAgICAgICAgW21heExlbmd0aF09XCJyZXNvbHZlZFByb3BzLm1heERpZ2l0cyB8fCAxNVwiXG4gICAgICAgICAgICAoaW5wdXQpPVwib25OdW1iZXJJbnB1dE5hdGl2ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAgICAgICAgIGNsYXNzPVwicGhvbmUtbmF0aXZlLWlucHV0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAaWYgKHJlc29sdmVkUHJvcHMuaGludCAmJiAhaGFzRXJyb3IpIHtcbiAgICAgICAgPGlvbi1ub3RlIGNsYXNzPVwiaGludFwiPnt7IGdldEhpbnQoKSB9fTwvaW9uLW5vdGU+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoaGFzRXJyb3IgJiYgcmVzb2x2ZWRQcm9wcy5zaG93RXJyb3JzKSB7XG4gICAgICAgIDxpb24tbm90ZSBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiBjb2xvcj1cImRhbmdlclwiPlxuICAgICAgICAgIHt7IGdldEVycm9yTWVzc2FnZSgpIH19XG4gICAgICAgIDwvaW9uLW5vdGU+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL3Bob25lLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtcGhvbmUtaW5wdXRcbiAqXG4gKiBBIHBob25lIG51bWJlciBpbnB1dCB3aXRoIGNvdW50cnkgY29kZSBzZWxlY3Rvci5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZVxuICogYGBgaHRtbFxuICogPHZhbC1waG9uZS1pbnB1dFxuICogICBbcHJvcHNdPVwie1xuICogICAgIGNvbnRyb2w6IHBob25lQ29udHJvbCxcbiAqICAgICBwbGFjZWhvbGRlcjogJ1Bob25lIG51bWJlcicsXG4gKiAgICAgZGVmYXVsdENvdW50cnk6ICdNWCdcbiAqICAgfVwiXG4gKiA+PC92YWwtcGhvbmUtaW5wdXQ+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBXaXRoIGN1c3RvbSBjb3VudHJpZXNcbiAqIGBgYGh0bWxcbiAqIDx2YWwtcGhvbmUtaW5wdXRcbiAqICAgW3Byb3BzXT1cIntcbiAqICAgICBjb250cm9sOiBwaG9uZUNvbnRyb2wsXG4gKiAgICAgbGFiZWw6ICdQaG9uZScsXG4gKiAgICAgY291bnRyeUNvZGVzOiBteUNvdW50cnlDb2RlcyxcbiAqICAgICBwcmVmZXJyZWRDb3VudHJpZXM6IFsnTVgnLCAnVVMnLCAnRVMnXSxcbiAqICAgICBzaG93RXJyb3JzOiB0cnVlXG4gKiAgIH1cIlxuICogICAocGhvbmVDaGFuZ2UpPVwib25QaG9uZUNoYW5nZSgkZXZlbnQpXCJcbiAqID48L3ZhbC1waG9uZS1pbnB1dD5cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUGhvbmVJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHByZXNldHMgPSBpbmplY3QoUHJlc2V0U2VydmljZSk7XG5cbiAgLyoqXG4gICAqIFByZXNldCBuYW1lIHRvIGFwcGx5LiBQcmVzZXRzIGRlZmluZSByZXVzYWJsZSBwaG9uZSBpbnB1dCBjb25maWd1cmF0aW9uc1xuICAgKiB0aGF0IGNhbiBiZSByZWdpc3RlcmVkIGF0IGFwcCBsZXZlbCB2aWEgcHJvdmlkZVZhbHRlY2hQcmVzZXRzKCkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIDx2YWwtcGhvbmUtaW5wdXQgcHJlc2V0PVwiZm9ybS1maWVsZFwiIFtwcm9wc109XCJ7IGNvbnRyb2w6IGN0cmwgfVwiPjwvdmFsLXBob25lLWlucHV0PlxuICAgKi9cbiAgQElucHV0KCkgcHJlc2V0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQaG9uZSBpbnB1dCBjb25maWd1cmF0aW9uIG9iamVjdC4gVmFsdWVzIGhlcmUgb3ZlcnJpZGUgcHJlc2V0IHZhbHVlcy5cbiAgICovXG4gIEBJbnB1dCgpIHByb3BzOiBQYXJ0aWFsPFBob25lSW5wdXRNZXRhZGF0YT4gPSB7fTtcblxuICAvKipcbiAgICogUmVzb2x2ZWQgcHJvcHMgYWZ0ZXIgbWVyZ2luZyBwcmVzZXQgKyBleHBsaWNpdCBwcm9wcy5cbiAgICovXG4gIHJlc29sdmVkUHJvcHM6IFBob25lSW5wdXRNZXRhZGF0YSA9IHt9IGFzIFBob25lSW5wdXRNZXRhZGF0YTtcblxuICBAT3V0cHV0KCkgcGhvbmVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFBob25lSW5wdXRDaGFuZ2VFdmVudD4oKTtcblxuICBzdGF0ZXMgPSBDb21wb25lbnRTdGF0ZXM7XG5cbiAgaW50ZXJuYWxDb3VudHJ5Q29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KCcnKTtcbiAgaW50ZXJuYWxOdW1iZXJDb250cm9sID0gbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJycpO1xuXG4gIHByaXZhdGUgdmFsdWVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlzSW50ZXJuYWxVcGRhdGUgPSBmYWxzZTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc29sdmVQcm9wcygpO1xuICAgIHRoaXMuc2V0dXBDb21wb25lbnQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sncHJlc2V0J10gfHwgY2hhbmdlc1sncHJvcHMnXSkge1xuICAgICAgdGhpcy5yZXNvbHZlUHJvcHMoKTtcbiAgICAgIHRoaXMuc2V0dXBDb21wb25lbnQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIHByZXNldCBjb25maWd1cmF0aW9uIHdpdGggZXhwbGljaXQgcHJvcHMuXG4gICAqIEV4cGxpY2l0IHByb3BzIHRha2UgcHJlY2VkZW5jZSBvdmVyIHByZXNldCB2YWx1ZXMuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVQcm9wcygpOiB2b2lkIHtcbiAgICBjb25zdCBwcmVzZXRQcm9wcyA9IHRoaXMucHJlc2V0XG4gICAgICA/ICh0aGlzLnByZXNldHMuZ2V0KCdwaG9uZUlucHV0JywgdGhpcy5wcmVzZXQpIGFzIFBhcnRpYWw8UGhvbmVJbnB1dE1ldGFkYXRhPilcbiAgICAgIDoge307XG5cbiAgICB0aGlzLnJlc29sdmVkUHJvcHMgPSB7XG4gICAgICAuLi5wcmVzZXRQcm9wcyxcbiAgICAgIC4uLnRoaXMucHJvcHMsXG4gICAgfSBhcyBQaG9uZUlucHV0TWV0YWRhdGE7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQ29tcG9uZW50KCk6IHZvaWQge1xuICAgIC8vIFNldCBkZWZhdWx0IGNvdW50cnlcbiAgICBjb25zdCBkZWZhdWx0Q291bnRyeSA9IHRoaXMucmVzb2x2ZWRQcm9wcy5kZWZhdWx0Q291bnRyeSB8fCAnVVMnO1xuICAgIHRoaXMuaW50ZXJuYWxDb3VudHJ5Q29udHJvbC5zZXRWYWx1ZShkZWZhdWx0Q291bnRyeSk7XG5cbiAgICAvLyBTeW5jIHdpdGggZXh0ZXJuYWwgY29udHJvbHMgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy5yZXNvbHZlZFByb3BzLmNvdW50cnlDb250cm9sKSB7XG4gICAgICB0aGlzLmludGVybmFsQ291bnRyeUNvbnRyb2wgPSB0aGlzLnJlc29sdmVkUHJvcHMuY291bnRyeUNvbnRyb2w7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlc29sdmVkUHJvcHMubnVtYmVyQ29udHJvbCkge1xuICAgICAgdGhpcy5pbnRlcm5hbE51bWJlckNvbnRyb2wgPSB0aGlzLnJlc29sdmVkUHJvcHMubnVtYmVyQ29udHJvbDtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBpbml0aWFsIHZhbHVlIGZyb20gbWFpbiBjb250cm9sXG4gICAgaWYgKHRoaXMucmVzb2x2ZWRQcm9wcy5jb250cm9sPy52YWx1ZSkge1xuICAgICAgdGhpcy5wYXJzZVBob25lTnVtYmVyKHRoaXMucmVzb2x2ZWRQcm9wcy5jb250cm9sLnZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gbWFpbiBjb250cm9sIGNoYW5nZXNcbiAgICB0aGlzLnZhbHVlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudmFsdWVTdWJzY3JpcHRpb24gPSB0aGlzLnJlc29sdmVkUHJvcHMuY29udHJvbD8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgJiYgIXRoaXMuaXNJbnRlcm5hbFVwZGF0ZSkge1xuICAgICAgICB0aGlzLnBhcnNlUGhvbmVOdW1iZXIodmFsdWUpO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlUGhvbmVOdW1iZXIodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgIC8vIFRyeSB0byBleHRyYWN0IGNvdW50cnkgY29kZVxuICAgIGNvbnN0IGNvdW50cmllcyA9IHRoaXMuZ2V0Q291bnRyeUxpc3QoKTtcbiAgICBmb3IgKGNvbnN0IGNvdW50cnkgb2YgY291bnRyaWVzKSB7XG4gICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChjb3VudHJ5LmRpYWxDb2RlKSkge1xuICAgICAgICB0aGlzLmludGVybmFsQ291bnRyeUNvbnRyb2wuc2V0VmFsdWUoY291bnRyeS5jb2RlKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbE51bWJlckNvbnRyb2wuc2V0VmFsdWUodmFsdWUuc3Vic3RyaW5nKGNvdW50cnkuZGlhbENvZGUubGVuZ3RoKS50cmltKCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gY291bnRyeSBjb2RlIGZvdW5kLCBqdXN0IHNldCB0aGUgbnVtYmVyXG4gICAgdGhpcy5pbnRlcm5hbE51bWJlckNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICB9XG5cbiAgZ2V0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZFByb3BzLmxhYmVsIHx8ICcnO1xuICB9XG5cbiAgZ2V0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgZm9ybWF0IGZyb20gc2VsZWN0ZWQgY291bnRyeSBpZiBhdmFpbGFibGVcbiAgICBjb25zdCBjb3VudHJ5ID0gdGhpcy5nZXRTZWxlY3RlZENvdW50cnkoKTtcbiAgICBpZiAoY291bnRyeT8uZm9ybWF0ICYmICF0aGlzLnJlc29sdmVkUHJvcHMucGxhY2Vob2xkZXIpIHtcbiAgICAgIHJldHVybiBjb3VudHJ5LmZvcm1hdDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRQcm9wcy5wbGFjZWhvbGRlciB8fCAnJztcbiAgfVxuXG4gIGdldEhpbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZFByb3BzLmhpbnQgfHwgJyc7XG4gIH1cblxuICBnZXRDb3VudHJ5TGlzdCgpOiBDb3VudHJ5Q29kZVtdIHtcbiAgICBjb25zdCBjb3VudHJpZXMgPSB0aGlzLnJlc29sdmVkUHJvcHMuY291bnRyeUNvZGVzIHx8IENPTU1PTl9DT1VOVFJZX0NPREVTO1xuXG4gICAgLy8gU29ydCBieSBwcmVmZXJyZWQgY291bnRyaWVzIGZpcnN0XG4gICAgaWYgKHRoaXMucmVzb2x2ZWRQcm9wcy5wcmVmZXJyZWRDb3VudHJpZXM/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgcHJlZmVycmVkID0gdGhpcy5yZXNvbHZlZFByb3BzLnByZWZlcnJlZENvdW50cmllcztcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLmNvdW50cmllcy5maWx0ZXIoYyA9PiBwcmVmZXJyZWQuaW5jbHVkZXMoYy5jb2RlKSksXG4gICAgICAgIC4uLmNvdW50cmllcy5maWx0ZXIoYyA9PiAhcHJlZmVycmVkLmluY2x1ZGVzKGMuY29kZSkpLFxuICAgICAgXTtcbiAgICB9XG5cbiAgICByZXR1cm4gY291bnRyaWVzO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRDb3VudHJ5KCk6IENvdW50cnlDb2RlIHwgbnVsbCB7XG4gICAgY29uc3QgY29kZSA9IHRoaXMuaW50ZXJuYWxDb3VudHJ5Q29udHJvbC52YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5nZXRDb3VudHJ5TGlzdCgpLmZpbmQoYyA9PiBjLmNvZGUgPT09IGNvZGUpIHx8IG51bGw7XG4gIH1cblxuICBnZXQgaGFzRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMucmVzb2x2ZWRQcm9wcy5jb250cm9sPy50b3VjaGVkICYmIHRoaXMucmVzb2x2ZWRQcm9wcy5jb250cm9sPy5pbnZhbGlkKTtcbiAgfVxuXG4gIGdldEVycm9yTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5yZXNvbHZlZFByb3BzLmNvbnRyb2w/LmVycm9ycyB8fCAhdGhpcy5yZXNvbHZlZFByb3BzLmVycm9ycykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucmVzb2x2ZWRQcm9wcy5jb250cm9sLmVycm9ycyk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgZXJyb3JLZXlzKSB7XG4gICAgICBpZiAodGhpcy5yZXNvbHZlZFByb3BzLmVycm9yc1trZXldKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVkUHJvcHMuZXJyb3JzW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgb25Db3VudHJ5Q2hhbmdlKGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlTWFpbkNvbnRyb2woKTtcbiAgfVxuXG4gIG9uTnVtYmVySW5wdXQoZXZlbnQ6IEN1c3RvbUV2ZW50KTogdm9pZCB7XG4gICAgLy8gRmlsdGVyIG5vbi1udW1lcmljIGNoYXJhY3RlcnMgZXhjZXB0IHNwYWNlcyBhbmQgZGFzaGVzXG4gICAgbGV0IHZhbHVlID0gKGV2ZW50LmRldGFpbC52YWx1ZSB8fCAnJykucmVwbGFjZSgvW15cXGRcXHNcXC1dL2csICcnKTtcblxuICAgIC8vIEFwcGx5IG1heCBkaWdpdHMgbGltaXRcbiAgICBpZiAodGhpcy5yZXNvbHZlZFByb3BzLm1heERpZ2l0cykge1xuICAgICAgY29uc3QgZGlnaXRzT25seSA9IHZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgICBpZiAoZGlnaXRzT25seS5sZW5ndGggPiB0aGlzLnJlc29sdmVkUHJvcHMubWF4RGlnaXRzKSB7XG4gICAgICAgIHZhbHVlID0gZGlnaXRzT25seS5zdWJzdHJpbmcoMCwgdGhpcy5yZXNvbHZlZFByb3BzLm1heERpZ2l0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbnRlcm5hbE51bWJlckNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlTWFpbkNvbnRyb2woKTtcbiAgfVxuXG4gIG9uTnVtYmVySW5wdXROYXRpdmUoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAvLyBGaWx0ZXIgbm9uLW51bWVyaWMgY2hhcmFjdGVycyBleGNlcHQgc3BhY2VzIGFuZCBkYXNoZXNcbiAgICBsZXQgdmFsdWUgPSAoaW5wdXQudmFsdWUgfHwgJycpLnJlcGxhY2UoL1teXFxkXFxzXFwtXS9nLCAnJyk7XG5cbiAgICAvLyBBcHBseSBtYXggZGlnaXRzIGxpbWl0XG4gICAgaWYgKHRoaXMucmVzb2x2ZWRQcm9wcy5tYXhEaWdpdHMpIHtcbiAgICAgIGNvbnN0IGRpZ2l0c09ubHkgPSB2YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpO1xuICAgICAgaWYgKGRpZ2l0c09ubHkubGVuZ3RoID4gdGhpcy5yZXNvbHZlZFByb3BzLm1heERpZ2l0cykge1xuICAgICAgICB2YWx1ZSA9IGRpZ2l0c09ubHkuc3Vic3RyaW5nKDAsIHRoaXMucmVzb2x2ZWRQcm9wcy5tYXhEaWdpdHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW50ZXJuYWxOdW1iZXJDb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZU1haW5Db250cm9sKCk7XG4gIH1cblxuICBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNvbHZlZFByb3BzLmNvbnRyb2w/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWFpbkNvbnRyb2woKTogdm9pZCB7XG4gICAgY29uc3QgY291bnRyeSA9IHRoaXMuZ2V0U2VsZWN0ZWRDb3VudHJ5KCk7XG4gICAgY29uc3QgbnVtYmVyID0gdGhpcy5pbnRlcm5hbE51bWJlckNvbnRyb2wudmFsdWUgfHwgJyc7XG4gICAgY29uc3QgZnVsbE51bWJlciA9IGNvdW50cnkgPyBgJHtjb3VudHJ5LmRpYWxDb2RlfSR7bnVtYmVyfWAgOiBudW1iZXI7XG5cbiAgICB0aGlzLmlzSW50ZXJuYWxVcGRhdGUgPSB0cnVlO1xuICAgIHRoaXMucmVzb2x2ZWRQcm9wcy5jb250cm9sPy5zZXRWYWx1ZShmdWxsTnVtYmVyKTtcbiAgICB0aGlzLmlzSW50ZXJuYWxVcGRhdGUgPSBmYWxzZTtcblxuICAgIC8vIEVtaXQgY2hhbmdlIGV2ZW50XG4gICAgY29uc3QgZGlnaXRzT25seSA9IG51bWJlci5yZXBsYWNlKC9cXEQvZywgJycpO1xuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLnZhbGlkYXRlTnVtYmVyKGRpZ2l0c09ubHkpO1xuXG4gICAgdGhpcy5waG9uZUNoYW5nZS5lbWl0KHtcbiAgICAgIGZ1bGxOdW1iZXIsXG4gICAgICBudW1iZXIsXG4gICAgICBjb3VudHJ5LFxuICAgICAgaXNWYWxpZCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVOdW1iZXIoZGlnaXRzT25seTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMucmVzb2x2ZWRQcm9wcy5taW5EaWdpdHMgJiYgZGlnaXRzT25seS5sZW5ndGggPCB0aGlzLnJlc29sdmVkUHJvcHMubWluRGlnaXRzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlc29sdmVkUHJvcHMubWF4RGlnaXRzICYmIGRpZ2l0c09ubHkubGVuZ3RoID4gdGhpcy5yZXNvbHZlZFByb3BzLm1heERpZ2l0cykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZXNvbHZlZFByb3BzLnBhdHRlcm4pIHtcbiAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCh0aGlzLnJlc29sdmVkUHJvcHMucGF0dGVybik7XG4gICAgICByZXR1cm4gcmVnZXgudGVzdChkaWdpdHNPbmx5KTtcbiAgICB9XG4gICAgLy8gRGVmYXVsdDogYXQgbGVhc3QgNyBkaWdpdHNcbiAgICByZXR1cm4gZGlnaXRzT25seS5sZW5ndGggPj0gNztcbiAgfVxufVxuIl19
|
|
@@ -12760,6 +12760,20 @@ class PhoneInputComponent {
|
|
|
12760
12760
|
this.internalNumberControl.setValue(value);
|
|
12761
12761
|
this.updateMainControl();
|
|
12762
12762
|
}
|
|
12763
|
+
onNumberInputNative(event) {
|
|
12764
|
+
const input = event.target;
|
|
12765
|
+
// Filter non-numeric characters except spaces and dashes
|
|
12766
|
+
let value = (input.value || '').replace(/[^\d\s\-]/g, '');
|
|
12767
|
+
// Apply max digits limit
|
|
12768
|
+
if (this.resolvedProps.maxDigits) {
|
|
12769
|
+
const digitsOnly = value.replace(/\D/g, '');
|
|
12770
|
+
if (digitsOnly.length > this.resolvedProps.maxDigits) {
|
|
12771
|
+
value = digitsOnly.substring(0, this.resolvedProps.maxDigits);
|
|
12772
|
+
}
|
|
12773
|
+
}
|
|
12774
|
+
this.internalNumberControl.setValue(value);
|
|
12775
|
+
this.updateMainControl();
|
|
12776
|
+
}
|
|
12763
12777
|
onBlur() {
|
|
12764
12778
|
this.resolvedProps.control?.markAsTouched();
|
|
12765
12779
|
}
|
|
@@ -12828,19 +12842,19 @@ class PhoneInputComponent {
|
|
|
12828
12842
|
}
|
|
12829
12843
|
|
|
12830
12844
|
<div class="number-input">
|
|
12831
|
-
<ion-
|
|
12832
|
-
|
|
12845
|
+
<ion-icon name="call-outline" aria-hidden="true" class="phone-icon"></ion-icon>
|
|
12846
|
+
<input
|
|
12833
12847
|
type="tel"
|
|
12834
12848
|
inputmode="tel"
|
|
12849
|
+
[formControl]="internalNumberControl"
|
|
12835
12850
|
[placeholder]="getPlaceholder()"
|
|
12836
|
-
[disabled]="resolvedProps.state === states.DISABLED"
|
|
12837
|
-
[readonly]="resolvedProps.state === states.WORKING"
|
|
12838
|
-
[
|
|
12839
|
-
(
|
|
12840
|
-
(
|
|
12841
|
-
|
|
12842
|
-
|
|
12843
|
-
</ion-input>
|
|
12851
|
+
[attr.disabled]="resolvedProps.state === states.DISABLED ? true : null"
|
|
12852
|
+
[attr.readonly]="resolvedProps.state === states.WORKING ? true : null"
|
|
12853
|
+
[maxLength]="resolvedProps.maxDigits || 15"
|
|
12854
|
+
(input)="onNumberInputNative($event)"
|
|
12855
|
+
(blur)="onBlur()"
|
|
12856
|
+
class="phone-native-input"
|
|
12857
|
+
/>
|
|
12844
12858
|
</div>
|
|
12845
12859
|
</div>
|
|
12846
12860
|
|
|
@@ -12854,11 +12868,11 @@ class PhoneInputComponent {
|
|
|
12854
12868
|
</ion-note>
|
|
12855
12869
|
}
|
|
12856
12870
|
</div>
|
|
12857
|
-
`, isInline: true, styles: [":host{display:block;width:100%}.phone-input-container.has-error .phone-input-wrapper{border-color:var(--ion-color-danger)}.phone-label{display:block;font-size:14px;font-weight:
|
|
12871
|
+
`, isInline: true, styles: [":host{display:block;width:100%}.phone-input-container.has-error .phone-input-wrapper{border-color:var(--ion-color-danger)}.phone-label{display:block;font-size:14px;font-weight:700;color:var(--ion-color-dark);margin-bottom:8px}.phone-input-wrapper{display:flex;align-items:stretch;border:1px solid var(--ion-border-color, #e0e0e0);border-radius:28px;background:var(--ion-background-color, #fff);overflow:hidden;transition:border-color .2s;height:56px}.phone-input-wrapper:focus-within{border-color:var(--ion-color-primary)}.phone-input-wrapper.disabled{opacity:.5;pointer-events:none}.country-selector{flex-shrink:0;border-right:1px solid var(--ion-border-color, #e0e0e0);background:var(--ion-color-light-tint, #f5f5f5);display:flex;align-items:center;padding:0 4px 0 12px}.country-selector ion-select{--background: transparent;--border-style: none;--border-width: 0;--border-color: transparent;--border-radius: 0;--box-shadow: none;--padding-start: 4px;--padding-end: 4px;--padding-top: 0;--padding-bottom: 0;--highlight-color-focused: transparent;--highlight-color-valid: transparent;--highlight-color-invalid: transparent;min-width:80px;max-width:100px}.country-selector ion-select::part(container){border:none;box-shadow:none}.country-selector ion-select::part(icon){opacity:.6}.country-selector .flag{margin-right:4px}.dial-code-display{flex-shrink:0;padding:0 12px;font-weight:500;color:var(--ion-color-medium-shade);border-right:1px solid var(--ion-border-color, #e0e0e0);background:var(--ion-color-light-tint, #f5f5f5);display:flex;align-items:center}.number-input{flex:1;display:flex;align-items:center;background:transparent;padding:0 16px 0 12px}.number-input .phone-icon{color:var(--ion-color-medium);font-size:18px;margin-right:10px;flex-shrink:0}.number-input .phone-native-input{flex:1;width:100%;height:100%;border:none;outline:none;background:transparent;font-size:16px;font-family:inherit;color:var(--ion-text-color, #000)}.number-input .phone-native-input::placeholder{color:var(--ion-color-medium, #92949c)}.number-input .phone-native-input:focus{outline:none;border:none}.number-input .phone-native-input:disabled{opacity:.5;cursor:not-allowed}.hint{display:block;font-size:12px;color:var(--ion-color-medium);margin-top:4px;padding-left:4px}.error-message{display:block;font-size:12px;margin-top:4px;padding-left:4px}::ng-deep .country-select-popover{--width: 200px}::ng-deep .country-select-popover .flag{margin-right:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
|
|
12858
12872
|
}
|
|
12859
12873
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhoneInputComponent, decorators: [{
|
|
12860
12874
|
type: Component,
|
|
12861
|
-
args: [{ selector: 'val-phone-input', standalone: true, imports: [CommonModule, ReactiveFormsModule,
|
|
12875
|
+
args: [{ selector: 'val-phone-input', standalone: true, imports: [CommonModule, ReactiveFormsModule, IonSelect, IonSelectOption, IonNote, IonIcon], template: `
|
|
12862
12876
|
<div class="phone-input-container" [class]="resolvedProps.cssClass" [class.has-error]="hasError">
|
|
12863
12877
|
@if (resolvedProps.label) {
|
|
12864
12878
|
<label class="phone-label">{{ getLabel() }}</label>
|
|
@@ -12891,19 +12905,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
12891
12905
|
}
|
|
12892
12906
|
|
|
12893
12907
|
<div class="number-input">
|
|
12894
|
-
<ion-
|
|
12895
|
-
|
|
12908
|
+
<ion-icon name="call-outline" aria-hidden="true" class="phone-icon"></ion-icon>
|
|
12909
|
+
<input
|
|
12896
12910
|
type="tel"
|
|
12897
12911
|
inputmode="tel"
|
|
12912
|
+
[formControl]="internalNumberControl"
|
|
12898
12913
|
[placeholder]="getPlaceholder()"
|
|
12899
|
-
[disabled]="resolvedProps.state === states.DISABLED"
|
|
12900
|
-
[readonly]="resolvedProps.state === states.WORKING"
|
|
12901
|
-
[
|
|
12902
|
-
(
|
|
12903
|
-
(
|
|
12904
|
-
|
|
12905
|
-
|
|
12906
|
-
</ion-input>
|
|
12914
|
+
[attr.disabled]="resolvedProps.state === states.DISABLED ? true : null"
|
|
12915
|
+
[attr.readonly]="resolvedProps.state === states.WORKING ? true : null"
|
|
12916
|
+
[maxLength]="resolvedProps.maxDigits || 15"
|
|
12917
|
+
(input)="onNumberInputNative($event)"
|
|
12918
|
+
(blur)="onBlur()"
|
|
12919
|
+
class="phone-native-input"
|
|
12920
|
+
/>
|
|
12907
12921
|
</div>
|
|
12908
12922
|
</div>
|
|
12909
12923
|
|
|
@@ -12917,7 +12931,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
12917
12931
|
</ion-note>
|
|
12918
12932
|
}
|
|
12919
12933
|
</div>
|
|
12920
|
-
`, styles: [":host{display:block;width:100%}.phone-input-container.has-error .phone-input-wrapper{border-color:var(--ion-color-danger)}.phone-label{display:block;font-size:14px;font-weight:
|
|
12934
|
+
`, styles: [":host{display:block;width:100%}.phone-input-container.has-error .phone-input-wrapper{border-color:var(--ion-color-danger)}.phone-label{display:block;font-size:14px;font-weight:700;color:var(--ion-color-dark);margin-bottom:8px}.phone-input-wrapper{display:flex;align-items:stretch;border:1px solid var(--ion-border-color, #e0e0e0);border-radius:28px;background:var(--ion-background-color, #fff);overflow:hidden;transition:border-color .2s;height:56px}.phone-input-wrapper:focus-within{border-color:var(--ion-color-primary)}.phone-input-wrapper.disabled{opacity:.5;pointer-events:none}.country-selector{flex-shrink:0;border-right:1px solid var(--ion-border-color, #e0e0e0);background:var(--ion-color-light-tint, #f5f5f5);display:flex;align-items:center;padding:0 4px 0 12px}.country-selector ion-select{--background: transparent;--border-style: none;--border-width: 0;--border-color: transparent;--border-radius: 0;--box-shadow: none;--padding-start: 4px;--padding-end: 4px;--padding-top: 0;--padding-bottom: 0;--highlight-color-focused: transparent;--highlight-color-valid: transparent;--highlight-color-invalid: transparent;min-width:80px;max-width:100px}.country-selector ion-select::part(container){border:none;box-shadow:none}.country-selector ion-select::part(icon){opacity:.6}.country-selector .flag{margin-right:4px}.dial-code-display{flex-shrink:0;padding:0 12px;font-weight:500;color:var(--ion-color-medium-shade);border-right:1px solid var(--ion-border-color, #e0e0e0);background:var(--ion-color-light-tint, #f5f5f5);display:flex;align-items:center}.number-input{flex:1;display:flex;align-items:center;background:transparent;padding:0 16px 0 12px}.number-input .phone-icon{color:var(--ion-color-medium);font-size:18px;margin-right:10px;flex-shrink:0}.number-input .phone-native-input{flex:1;width:100%;height:100%;border:none;outline:none;background:transparent;font-size:16px;font-family:inherit;color:var(--ion-text-color, #000)}.number-input .phone-native-input::placeholder{color:var(--ion-color-medium, #92949c)}.number-input .phone-native-input:focus{outline:none;border:none}.number-input .phone-native-input:disabled{opacity:.5;cursor:not-allowed}.hint{display:block;font-size:12px;color:var(--ion-color-medium);margin-top:4px;padding-left:4px}.error-message{display:block;font-size:12px;margin-top:4px;padding-left:4px}::ng-deep .country-select-popover{--width: 200px}::ng-deep .country-select-popover .flag{margin-right:8px}\n"] }]
|
|
12921
12935
|
}], propDecorators: { preset: [{
|
|
12922
12936
|
type: Input
|
|
12923
12937
|
}], props: [{
|