UNPKG

@infordata-web/portal-common-component-lib

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.14.

139 lines 32.5 kB
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { FormControl, FormGroup, Validators } from '@angular/forms'; import { Subscription } from 'rxjs'; import { debounceTime } from 'rxjs/operators'; export class IndirizzoPagamentoComponent { constructor() { this.selectedProvinciaEmitter = new EventEmitter(); this.selectedComuneEmitter = new EventEmitter(); this.indirizzoEmitter = new EventEmitter(); this.subscription = new Subscription(); // this.initIndirizzoForm(); // this.subscription.add(this.indirizzoForm.controls['isEstero'].valueChanges.subscribe(isEstero => { // this.indirizzoForm.controls['civico'].setValidators(isEstero ? [] : [Validators.required]); // this.indirizzoForm.controls['civico'].patchValue(null); // this.indirizzoForm.controls['civico'].updateValueAndValidity(); // this.indirizzoForm.controls['provincia'].setValidators(isEstero ? [] : [Validators.required]); // this.indirizzoForm.controls['provincia'].patchValue(null); // this.indirizzoForm.controls['provincia'].updateValueAndValidity(); // this.indirizzoForm.controls['comune'].setValidators(isEstero ? [] : [Validators.required]); // this.indirizzoForm.controls['comune'].patchValue(null); // this.indirizzoForm.controls['comune'].updateValueAndValidity(); // this.indirizzoForm.controls['cap'].setValidators(isEstero ? [] : [Validators.required]); // this.indirizzoForm.controls['cap'].patchValue(null); // this.indirizzoForm.controls['cap'].updateValueAndValidity(); // this.indirizzoForm.controls['nazione'].setValidators(isEstero ? [Validators.required] : []); // this.indirizzoForm.controls['nazione'].patchValue(null); // this.indirizzoForm.controls['nazione'].updateValueAndValidity(); // })); // this.subscription.add(this.indirizzoForm.controls['provincia'].valueChanges.subscribe(siglaProvincia => this.selectedProvinciaEmitter.emit(siglaProvincia))); // this.subscription.add(this.indirizzoForm.controls['comune'].valueChanges.subscribe(codiceCatastale => this.selectedComuneEmitter.emit(codiceCatastale))); } set _disableForm(val) { this.disableForm = val; if (this.disableForm) { this.indirizzoForm.disable(); } else { this.indirizzoForm.enable(); } } ngOnInit() { this.initIndirizzoForm(); this.setFormControlsValue(); this.subscription.add(this.indirizzoForm.controls['isEstero'].valueChanges.subscribe(isEstero => { this.indirizzoForm.controls['civico'].setValidators(isEstero ? [] : [Validators.required]); this.indirizzoForm.controls['civico'].patchValue(null); this.indirizzoForm.controls['civico'].updateValueAndValidity(); this.indirizzoForm.controls['provincia'].setValidators(isEstero ? [] : [Validators.required]); this.indirizzoForm.controls['provincia'].patchValue(null); this.indirizzoForm.controls['provincia'].updateValueAndValidity(); this.indirizzoForm.controls['comune'].setValidators(isEstero ? [] : [Validators.required]); this.indirizzoForm.controls['comune'].patchValue(null); this.indirizzoForm.controls['comune'].updateValueAndValidity(); this.indirizzoForm.controls['cap'].setValidators(isEstero ? [] : [Validators.required]); this.indirizzoForm.controls['cap'].patchValue(null); this.indirizzoForm.controls['cap'].updateValueAndValidity(); this.indirizzoForm.controls['nazione'].setValidators(isEstero ? [Validators.required] : []); this.indirizzoForm.controls['nazione'].patchValue(null); this.indirizzoForm.controls['nazione'].updateValueAndValidity(); })); this.subscription.add(this.indirizzoForm.controls['provincia'].valueChanges.subscribe(siglaProvincia => this.selectedProvinciaEmitter.emit(siglaProvincia))); this.subscription.add(this.indirizzoForm.controls['comune'].valueChanges.subscribe(codiceCatastale => this.selectedComuneEmitter.emit(codiceCatastale))); this.indirizzoEmit(); } ngOnDestroy() { this.subscription.unsubscribe(); } initIndirizzoForm() { this.indirizzoForm = new FormGroup({ isEstero: new FormControl(null), indirizzo: new FormControl(null, [Validators.required]), nazione: new FormControl(null), civico: new FormControl(null), provincia: new FormControl(null), comune: new FormControl(null), cap: new FormControl(null), }); } onProvinciaChange(siglaProvincia) { this.indirizzoForm.controls['comune'].patchValue(null); this.indirizzoForm.controls['comune'].markAsTouched(); this.indirizzoForm.controls['cap'].patchValue(null); this.indirizzoForm.controls['cap'].markAsTouched(); } onComuneChange(codiceCatastale) { this.indirizzoForm.controls['cap'].patchValue(null); this.indirizzoForm.controls['cap'].markAsTouched(); } indirizzoEmit() { this.subscription.add(this.indirizzoForm.valueChanges.pipe(debounceTime(500)).subscribe((_) => { const indirizzo = { strada: { civico: this.indirizzoForm.controls['civico'].value, inidirizzo: this.indirizzoForm.controls['indirizzo'].value, tipoToponimo: null }, localita: { cap: this.indirizzoForm.controls['cap'].value, comune: this.indirizzoForm.controls['comune'].value, nazione: this.indirizzoForm.controls['nazione'].value, provincia: this.indirizzoForm.controls['provincia'].value } }; const isValid = this.indirizzoForm.valid; this.indirizzoEmitter.emit({ indirizzo: indirizzo ? indirizzo : null, isValid: isValid }); })); } setFormControlsValue() { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; this.indirizzoForm.controls['isEstero'].setValue(this.indirizzo && ((_b = (_a = this.indirizzo) === null || _a === void 0 ? void 0 : _a.localita) === null || _b === void 0 ? void 0 : _b.comune.startsWith("Z")) ? true : false); this.indirizzoForm.controls['indirizzo'].setValue(this.indirizzo ? this.indirizzo.strada.inidirizzo : null); this.indirizzoForm.controls['nazione'].setValue(this.indirizzo ? (_d = (_c = this.indirizzo) === null || _c === void 0 ? void 0 : _c.localita) === null || _d === void 0 ? void 0 : _d.nazione : null); this.indirizzoForm.controls['civico'].setValue(this.indirizzo ? this.indirizzo.strada.civico : null); this.indirizzoForm.controls['provincia'].setValue(this.indirizzo && !((_f = (_e = this.indirizzo) === null || _e === void 0 ? void 0 : _e.localita) === null || _f === void 0 ? void 0 : _f.comune.startsWith("Z")) ? this.indirizzo.localita.provincia : null); this.indirizzoForm.controls['comune'].setValue(this.indirizzo && !((_h = (_g = this.indirizzo) === null || _g === void 0 ? void 0 : _g.localita) === null || _h === void 0 ? void 0 : _h.comune.startsWith("Z")) ? this.indirizzo.localita.comune : null); this.indirizzoForm.controls['cap'].setValue(this.indirizzo && !((_k = (_j = this.indirizzo) === null || _j === void 0 ? void 0 : _j.localita) === null || _k === void 0 ? void 0 : _k.comune.startsWith("Z")) ? this.indirizzo.localita.cap : null); } } IndirizzoPagamentoComponent.decorators = [ { type: Component, args: [{ selector: 'lib-indirizzo-pagamento', template: "<form [formGroup]=\"indirizzoForm\" [ngxsForm]=\"ngxsFormPath\">\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-12\">\r\n\t\t\t<div class=\"row align-items-center\">\r\n\t\t\t\t<div class=\"col-12 col-md-4\">\r\n\t\t\t\t\t<mat-checkbox formControlName=\"isEstero\" color=\"primary\">\r\n\t\t\t\t\t\t<info-tip-label label=\"indirizzo-estero\"></info-tip-label>\r\n\t\t\t\t\t</mat-checkbox>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"row\">\r\n\t\t\t\t<div class=\"col-12 col-md-4\" *ngIf=\"indirizzoForm.controls['isEstero'].value\">\r\n\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t<mat-label>{{ 'required' | traduzione }}{{ 'nazione' | traduzione }}</mat-label>\r\n\t\t\t\t\t\t<mat-select formControlName=\"nazione\">\r\n\t\t\t\t\t\t\t<mat-option *ngFor=\"let nazione of nazioni\" [value]=\"nazione.codiceCatastale\">\r\n\t\t\t\t\t\t\t\t{{ nazione.denominazione }}\r\n\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t</mat-select>\r\n\t\t\t\t\t\t<mat-error *ngIf=\"indirizzoForm.controls['nazione'].invalid\">\r\n\t\t\t\t\t\t\t{{ 'validation-required' | traduzione }}\r\n\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"col-12\" [ngClass]=\"indirizzoForm.controls['isEstero'].value ? ' col-md-8': ' col-md-10'\">\r\n\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t<mat-label>{{ 'required' | traduzione }}{{'indirizzo' | traduzione }}</mat-label>\r\n\t\t\t\t\t\t<input [maxlength]=\"70\" formControlName=\"indirizzo\" matInput>\r\n\t\t\t\t\t\t<mat-error *ngIf=\"indirizzoForm.controls['indirizzo'].invalid\">\r\n\t\t\t\t\t\t\t{{ 'validation-required' | traduzione }}\r\n\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"col-12 col-md-2\" *ngIf=\"!indirizzoForm.controls['isEstero'].value\">\r\n\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t<mat-label>{{ 'required' | traduzione }}{{'civico' | traduzione }}</mat-label>\r\n\t\t\t\t\t\t<input [maxlength]=\"16\" formControlName=\"civico\" matInput>\r\n\t\t\t\t\t\t<mat-error *ngIf=\"indirizzoForm.controls['civico'].invalid\">\r\n\t\t\t\t\t\t\t{{ 'validation-required' | traduzione }}\r\n\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"row\" *ngIf=\"!indirizzoForm.controls['isEstero'].value\">\r\n\t\t\t\t<div class=\"col-12 col-md-5\">\r\n\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t<mat-label>{{ 'required' | traduzione }}{{ 'provincia' | traduzione }}</mat-label>\r\n\t\t\t\t\t\t<mat-select formControlName=\"provincia\" (valueChange)=\"onProvinciaChange($event)\">\r\n\t\t\t\t\t\t\t<mat-option *ngFor=\"let provincia of province\" [value]=\"provincia.sigla\">\r\n\t\t\t\t\t\t\t\t{{ provincia.denominazione }}\r\n\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t</mat-select>\r\n\t\t\t\t\t\t<mat-error *ngIf=\"indirizzoForm.controls['provincia'].invalid\">\r\n\t\t\t\t\t\t\t{{ 'validation-required' | traduzione }}\r\n\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"col-12 col-md-5\">\r\n\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t<mat-label>{{ 'required' | traduzione }}{{ 'comune' | traduzione }}</mat-label>\r\n\t\t\t\t\t\t<mat-select formControlName=\"comune\" (valueChange)=\"onComuneChange($event)\">\r\n\t\t\t\t\t\t\t<mat-option *ngFor=\"let comune of comuni\" [value]=\"comune.codiceCatastale\">\r\n\t\t\t\t\t\t\t\t{{ comune.denominazione }}\r\n\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t</mat-select>\r\n\t\t\t\t\t\t<mat-error *ngIf=\"indirizzoForm.controls['comune'].invalid\">\r\n\t\t\t\t\t\t\t{{ 'validation-required' | traduzione }}\r\n\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"col-12 col-md-2\">\r\n\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t<mat-label>{{ 'required' | traduzione }}{{ 'cap' | traduzione }}</mat-label>\r\n\t\t\t\t\t\t<mat-select formControlName=\"cap\">\r\n\t\t\t\t\t\t\t<mat-option *ngFor=\"let cap of capOptions\" [value]=\"cap\">\r\n\t\t\t\t\t\t\t\t{{ cap }}\r\n\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t</mat-select>\r\n\t\t\t\t\t\t<mat-error *ngIf=\"indirizzoForm.controls['cap'].invalid\">\r\n\t\t\t\t\t\t\t{{ 'validation-required' | traduzione }}\r\n\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</form>\r\n\r\n\r\n", styles: [""] },] } ]; IndirizzoPagamentoComponent.ctorParameters = () => []; IndirizzoPagamentoComponent.propDecorators = { ngxsFormPath: [{ type: Input }], nazioni: [{ type: Input }], province: [{ type: Input }], comuni: [{ type: Input }], capOptions: [{ type: Input }], indirizzo: [{ type: Input }], _disableForm: [{ type: Input, args: ['disableForm',] }], selectedProvinciaEmitter: [{ type: Output }], selectedComuneEmitter: [{ type: Output }], indirizzoEmitter: [{ type: Output }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kaXJpenpvLXBhZ2FtZW50by5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiRDovUHJvZ2V0dGkvREFHL3NvcmdlbnRpL2dpdGxhYi10ZXJuaS9jb21tb24tY29tcG9uZW50LWxpYi9wcm9qZWN0cy9wb3J0YWwtY29tbW9uLWNvbXBvbmVudC1saWIvc3JjLyIsInNvdXJjZXMiOlsibGliL21vZGFsaXRhLXBhZ2FtZW50by9jb21wb25lbnRzL2luZGlyaXp6by1wYWdhbWVudG8vaW5kaXJpenpvLXBhZ2FtZW50by5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFRNUMsTUFBTSxPQUFPLDJCQUEyQjtJQTZDdkM7UUFaQSw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBR3RELDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFHbkQscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQW1ELENBQUM7UUFJL0UsaUJBQVksR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUd2RCw0QkFBNEI7UUFDNUIscUdBQXFHO1FBQ3JHLCtGQUErRjtRQUMvRiwyREFBMkQ7UUFDM0QsbUVBQW1FO1FBQ25FLGtHQUFrRztRQUNsRyw4REFBOEQ7UUFDOUQsc0VBQXNFO1FBQ3RFLCtGQUErRjtRQUMvRiwyREFBMkQ7UUFDM0QsbUVBQW1FO1FBQ25FLDRGQUE0RjtRQUM1Rix3REFBd0Q7UUFDeEQsZ0VBQWdFO1FBQ2hFLGdHQUFnRztRQUNoRyw0REFBNEQ7UUFDNUQsb0VBQW9FO1FBQ3BFLE9BQU87UUFDUCxnS0FBZ0s7UUFDaEssNEpBQTRKO0lBQzdKLENBQUM7SUE5Q0QsSUFDSSxZQUFZLENBQUMsR0FBWTtRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMzQjthQUFNO1lBQ1IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUF3Q0QsUUFBUTtRQUNQLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDL0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzNGLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDM0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDL0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzVELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1RixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEQsSUFBSSxD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QUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLFFBQVEsMENBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxjQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLFFBQVEsMENBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsSyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxjQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLFFBQVEsMENBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1SixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxjQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLFFBQVEsMENBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2SixDQUFDOzs7WUFoS0QsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSx5QkFBeUI7Z0JBQ25DLHV2SUFBbUQ7O2FBRW5EOzs7OzJCQUdDLEtBQUs7c0JBR0wsS0FBSzt1QkFHTCxLQUFLO3FCQUdMLEtBQUs7eUJBR0wsS0FBSzt3QkFHTCxLQUFLOzJCQUdMLEtBQUssU0FBQyxhQUFhO3VDQVluQixNQUFNO29DQUdOLE1BQU07K0JBR04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtkZWJvdW5jZVRpbWV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtDb211bmVNb2RlbCwgSW5kaXJpenpvTW9kZWwsIExvY2FsaXRhTW9kZWwsIE5hemlvbmVNb2RlbH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VzdHJlbWktcGVyc29uYS1maXNpY2EubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdsaWItaW5kaXJpenpvLXBhZ2FtZW50bycsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2luZGlyaXp6by1wYWdhbWVudG8uY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL2luZGlyaXp6by1wYWdhbWVudG8uY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEluZGlyaXp6b1BhZ2FtZW50b0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcblx0QElucHV0KClcclxuICBuZ3hzRm9ybVBhdGg6IHN0cmluZztcclxuXHJcblx0QElucHV0KClcclxuXHRuYXppb25pOiBOYXppb25lTW9kZWxbXTtcclxuXHJcblx0QElucHV0KClcclxuXHRwcm92aW5jZTogTG9jYWxpdGFNb2RlbFtdO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdGNvbXVuaTogQ29tdW5lTW9kZWxbXTtcclxuXHJcblx0QElucHV0KClcclxuXHRjYXBPcHRpb25zOiBzdHJpbmdbXTtcclxuXHJcblx0QElucHV0KClcclxuXHRpbmRpcml6em86IEluZGlyaXp6b01vZGVsO1xyXG5cclxuXHRASW5wdXQoJ2Rpc2FibGVGb3JtJylcclxuXHRzZXQgX2Rpc2FibGVGb3JtKHZhbDogYm9vbGVhbikge1xyXG5cdCAgdGhpcy5kaXNhYmxlRm9ybSA9IHZhbDtcclxuXHQgIGlmICh0aGlzLmRpc2FibGVGb3JtKSB7XHJcblx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uZGlzYWJsZSgpO1xyXG5cdCAgfSBlbHNlIHtcclxuXHRcdHRoaXMuaW5kaXJpenpvRm9ybS5lbmFibGUoKTtcclxuXHQgIH1cclxuXHR9XHJcblxyXG5cdGRpc2FibGVGb3JtOiBib29sZWFuO1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHRzZWxlY3RlZFByb3ZpbmNpYUVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcblx0QE91dHB1dCgpXHJcblx0c2VsZWN0ZWRDb211bmVFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdGluZGlyaXp6b0VtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaW5kaXJpenpvOiBJbmRpcml6em9Nb2RlbCwgaXNWYWxpZDogYm9vbGVhbiB9PigpO1xyXG5cclxuXHRpbmRpcml6em9Gb3JtOiBGb3JtR3JvdXA7XHJcblxyXG5cdHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0Ly8gdGhpcy5pbml0SW5kaXJpenpvRm9ybSgpO1xyXG5cdFx0Ly8gdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snaXNFc3Rlcm8nXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGlzRXN0ZXJvID0+IHtcclxuXHRcdC8vIFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjaXZpY28nXS5zZXRWYWxpZGF0b3JzKGlzRXN0ZXJvID8gW10gOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG5cdFx0Ly8gXHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ2NpdmljbyddLnBhdGNoVmFsdWUobnVsbCk7XHJcblx0XHQvLyBcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snY2l2aWNvJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0Ly8gXHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ3Byb3ZpbmNpYSddLnNldFZhbGlkYXRvcnMoaXNFc3Rlcm8gPyBbXSA6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcblx0XHQvLyBcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1sncHJvdmluY2lhJ10ucGF0Y2hWYWx1ZShudWxsKTtcclxuXHRcdC8vIFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydwcm92aW5jaWEnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHQvLyBcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snY29tdW5lJ10uc2V0VmFsaWRhdG9ycyhpc0VzdGVybyA/IFtdIDogW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcclxuXHRcdC8vIFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjb211bmUnXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0Ly8gXHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ2NvbXVuZSddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdC8vIFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjYXAnXS5zZXRWYWxpZGF0b3JzKGlzRXN0ZXJvID8gW10gOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG5cdFx0Ly8gXHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ2NhcCddLnBhdGNoVmFsdWUobnVsbCk7XHJcblx0XHQvLyBcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snY2FwJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0Ly8gXHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ25hemlvbmUnXS5zZXRWYWxpZGF0b3JzKGlzRXN0ZXJvID8gW1ZhbGlkYXRvcnMucmVxdWlyZWRdIDogW10pO1xyXG5cdFx0Ly8gXHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ25hemlvbmUnXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0Ly8gXHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ25hemlvbmUnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHQvLyB9KSk7XHJcblx0XHQvLyB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydwcm92aW5jaWEnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHNpZ2xhUHJvdmluY2lhID0+IHRoaXMuc2VsZWN0ZWRQcm92aW5jaWFFbWl0dGVyLmVtaXQoc2lnbGFQcm92aW5jaWEpKSk7XHJcblx0XHQvLyB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjb211bmUnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGNvZGljZUNhdGFzdGFsZSA9PiB0aGlzLnNlbGVjdGVkQ29tdW5lRW1pdHRlci5lbWl0KGNvZGljZUNhdGFzdGFsZSkpKTtcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pbml0SW5kaXJpenpvRm9ybSgpO1xyXG5cdFx0dGhpcy5zZXRGb3JtQ29udHJvbHNWYWx1ZSgpO1xyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snaXNFc3Rlcm8nXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGlzRXN0ZXJvID0+IHtcclxuXHRcdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjaXZpY28nXS5zZXRWYWxpZGF0b3JzKGlzRXN0ZXJvID8gW10gOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG5cdFx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ2NpdmljbyddLnBhdGNoVmFsdWUobnVsbCk7XHJcblx0XHRcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snY2l2aWNvJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ3Byb3ZpbmNpYSddLnNldFZhbGlkYXRvcnMoaXNFc3Rlcm8gPyBbXSA6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcblx0XHRcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1sncHJvdmluY2lhJ10ucGF0Y2hWYWx1ZShudWxsKTtcclxuXHRcdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydwcm92aW5jaWEnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHRcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snY29tdW5lJ10uc2V0VmFsaWRhdG9ycyhpc0VzdGVybyA/IFtdIDogW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcclxuXHRcdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjb211bmUnXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ2NvbXVuZSddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjYXAnXS5zZXRWYWxpZGF0b3JzKGlzRXN0ZXJvID8gW10gOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG5cdFx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ2NhcCddLnBhdGNoVmFsdWUobnVsbCk7XHJcblx0XHRcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snY2FwJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ25hemlvbmUnXS5zZXRWYWxpZGF0b3JzKGlzRXN0ZXJvID8gW1ZhbGlkYXRvcnMucmVxdWlyZWRdIDogW10pO1xyXG5cdFx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ25hemlvbmUnXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ25hemlvbmUnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHR9KSk7XHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydwcm92aW5jaWEnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHNpZ2xhUHJvdmluY2lhID0+IHRoaXMuc2VsZWN0ZWRQcm92aW5jaWFFbWl0dGVyLmVtaXQoc2lnbGFQcm92aW5jaWEpKSk7XHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjb211bmUnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGNvZGljZUNhdGFzdGFsZSA9PiB0aGlzLnNlbGVjdGVkQ29tdW5lRW1pdHRlci5lbWl0KGNvZGljZUNhdGFzdGFsZSkpKTtcclxuXHJcblx0XHR0aGlzLmluZGlyaXp6b0VtaXQoKTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuXHR9XHJcblxyXG5cdGluaXRJbmRpcml6em9Gb3JtKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pbmRpcml6em9Gb3JtID0gbmV3IEZvcm1Hcm91cCh7XHJcblx0XHRcdGlzRXN0ZXJvOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcblx0XHRcdGluZGlyaXp6bzogbmV3IEZvcm1Db250cm9sKG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcblx0XHRcdG5hemlvbmU6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuXHRcdFx0Y2l2aWNvOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcblx0XHRcdHByb3ZpbmNpYTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG5cdFx0XHRjb211bmU6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuXHRcdFx0Y2FwOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdG9uUHJvdmluY2lhQ2hhbmdlKHNpZ2xhUHJvdmluY2lhOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snY29tdW5lJ10ucGF0Y2hWYWx1ZShudWxsKTtcclxuXHRcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snY29tdW5lJ10ubWFya0FzVG91Y2hlZCgpO1xyXG5cdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjYXAnXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjYXAnXS5tYXJrQXNUb3VjaGVkKCk7XHJcblx0fVxyXG5cclxuXHRvbkNvbXVuZUNoYW5nZShjb2RpY2VDYXRhc3RhbGU6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjYXAnXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjYXAnXS5tYXJrQXNUb3VjaGVkKCk7XHJcblx0fVxyXG5cclxuXHRpbmRpcml6em9FbWl0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuaW5kaXJpenpvRm9ybS52YWx1ZUNoYW5nZXMucGlwZShcclxuXHRcdFx0XHRkZWJvdW5jZVRpbWUoNTAwKSxcclxuXHRcdFx0XHQvLyBmaWx0ZXIoKCkgPT4gdGhpcy5pbmRpcml6em9Gb3JtLnZhbGlkKSxcclxuXHRcdFx0KS5zdWJzY3JpYmUoKF8pID0+IHtcclxuXHRcdFx0XHRjb25zdCBpbmRpcml6em86IEluZGlyaXp6b01vZGVsID0ge1xyXG5cdFx0XHRcdFx0c3RyYWRhOiB7XHJcblx0XHRcdFx0XHRcdGNpdmljbzogdGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjaXZpY28nXS52YWx1ZSxcclxuXHRcdFx0XHRcdFx0aW5pZGlyaXp6bzogdGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydpbmRpcml6em8nXS52YWx1ZSxcclxuXHRcdFx0XHRcdFx0dGlwb1RvcG9uaW1vOiBudWxsXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0bG9jYWxpdGE6IHtcclxuXHRcdFx0XHRcdFx0Y2FwOiB0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ2NhcCddLnZhbHVlLFxyXG5cdFx0XHRcdFx0XHRjb211bmU6IHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snY29tdW5lJ10udmFsdWUsXHJcblx0XHRcdFx0XHRcdG5hemlvbmU6IHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snbmF6aW9uZSddLnZhbHVlLFxyXG5cdFx0XHRcdFx0XHRwcm92aW5jaWE6IHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1sncHJvdmluY2lhJ10udmFsdWVcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGlzVmFsaWQgPSB0aGlzLmluZGlyaXp6b0Zvcm0udmFsaWQ7XHJcblx0XHRcdFx0dGhpcy5pbmRpcml6em9FbWl0dGVyLmVtaXQoeyBpbmRpcml6em86IGluZGlyaXp6byA/IGluZGlyaXp6byA6IG51bGwsIGlzVmFsaWQ6IGlzVmFsaWQgfSk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c2V0Rm9ybUNvbnRyb2xzVmFsdWUoKTogdm9pZHtcclxuXHRcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snaXNFc3Rlcm8nXS5zZXRWYWx1ZSh0aGlzLmluZGlyaXp6byAmJiB0aGlzLmluZGlyaXp6bz8ubG9jYWxpdGE/LmNvbXVuZS5zdGFydHNXaXRoKFwiWlwiKSA/ICB0cnVlIDogZmFsc2UpO1xyXG5cdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydpbmRpcml6em8nXS5zZXRWYWx1ZSh0aGlzLmluZGlyaXp6byA/IHRoaXMuaW5kaXJpenpvLnN0cmFkYS5pbmlkaXJpenpvIDogbnVsbCk7XHJcblx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ25hemlvbmUnXS5zZXRWYWx1ZSh0aGlzLmluZGlyaXp6byA/IHRoaXMuaW5kaXJpenpvPy5sb2NhbGl0YT8ubmF6aW9uZSA6IG51bGwpO1xyXG5cdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjaXZpY28nXS5zZXRWYWx1ZSh0aGlzLmluZGlyaXp6byA/IHRoaXMuaW5kaXJpenpvLnN0cmFkYS5jaXZpY28gOiBudWxsKTtcclxuXHRcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1sncHJvdmluY2lhJ10uc2V0VmFsdWUodGhpcy5pbmRpcml6em8gJiYgIXRoaXMuaW5kaXJpenpvPy5sb2NhbGl0YT8uY29tdW5lLnN0YXJ0c1dpdGgoXCJaXCIpID8gdGhpcy5pbmRpcml6em8ubG9jYWxpdGEucHJvdmluY2lhIDogbnVsbCk7XHJcblx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ2NvbXVuZSddLnNldFZhbHVlKHRoaXMuaW5kaXJpenpvICYmICF0aGlzLmluZGlyaXp6bz8ubG9jYWxpdGE/LmNvbXVuZS5zdGFydHNXaXRoKFwiWlwiKSA/IHRoaXMuaW5kaXJpenpvLmxvY2FsaXRhLmNvbXVuZSA6IG51bGwpO1xyXG5cdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjYXAnXS5zZXRWYWx1ZSh0aGlzLmluZGlyaXp6byAmJiAhdGhpcy5pbmRpcml6em8/LmxvY2FsaXRhPy5jb211bmUuc3RhcnRzV2l0aChcIlpcIikgPyB0aGlzLmluZGlyaXp6by5sb2NhbGl0YS5jYXAgOiBudWxsKTtcclxuXHR9XHJcbn1cclxuIl19