@infordata-web/portal-common-component-lib
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.14.
147 lines • 31.3 kB
JavaScript
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { FormControl, FormGroup, Validators } from '@angular/forms';
import { Subscription } from 'rxjs';
import { take } from 'rxjs/operators';
import { getErrorMessage } from '../../utils/validators-messages.utils';
import { ModalitaPagamentoService } from '../../services/modalita-pagamento.service';
import { ValidateName, ValidatePhone } from '../../utils/validators.utils';
export class VagliaBdiComponent {
constructor(modalitaPagamentoService) {
this.modalitaPagamentoService = modalitaPagamentoService;
this.setComuni = new EventEmitter();
this.getCapOptions = new EventEmitter();
this.resetIndirizzoForm = new EventEmitter();
this.vagliaReady = new EventEmitter();
this.indirizzoEmitter = new EventEmitter();
this.subscription = new Subscription();
this.getErrorMessage = getErrorMessage;
// this.initVagliaForm();
}
ngOnInit() {
this.initVagliaForm();
this.vagliaForm.setValidators(form => {
return (!form.get('pec').value && !form.get('email').value) &&
(form.get('domicilioRichiedenteCoincideConResidenza').value === false) ?
{ requiredMail: true } : null;
});
this.subscription.add(this.vagliaForm.controls['domicilioRichiedenteCoincideConResidenza'].valueChanges.subscribe(isDomicilio => {
if (isDomicilio) {
this.vagliaForm.controls['nome'].setValidators([]);
this.vagliaForm.controls['nome'].patchValue(null);
this.vagliaForm.controls['nome'].updateValueAndValidity();
this.vagliaForm.controls['cognome'].setValidators([]);
this.vagliaForm.controls['cognome'].patchValue(null);
this.vagliaForm.controls['cognome'].updateValueAndValidity();
this.vagliaForm.controls["email"].patchValue(null);
this.vagliaForm.controls["pec"].patchValue(null);
this.vagliaForm.controls["telefono"].patchValue(null);
this.resetIndirizzoForm.emit();
}
else {
this.vagliaForm.controls['nome'].setValidators([Validators.required, ValidateName]),
this.vagliaForm.controls['nome'].updateValueAndValidity();
this.vagliaForm.controls['cognome'].setValidators([Validators.required, ValidateName]),
this.vagliaForm.controls['cognome'].updateValueAndValidity();
}
}));
this.vagliaForm.valueChanges.subscribe(() => {
// if (this.vagliaForm.valid) {
const vaglia = {
intestatarioStudioLegale: this.vagliaForm.get('intestatoSudioLegale').value,
domicilioRichiedenteCoincideConResidenza: this.vagliaForm.get('domicilioRichiedenteCoincideConResidenza').value,
nome: this.vagliaForm.get('nome').value,
denominazione: this.vagliaForm.get('cognome').value,
contatti: this.vagliaForm.get('domicilioRichiedenteCoincideConResidenza').value === true ? null :
{
email: this.vagliaForm.get('email').value,
pec: this.vagliaForm.get('pec').value,
telefono: this.vagliaForm.get('telefono').value,
},
indirizzo: this.vagliaForm.get('domicilioRichiedenteCoincideConResidenza').value === true ? null : this.indirizzo
};
const isFormValid = this.vagliaForm.valid;
const isFormIndirizzoValid = this.vagliaForm.get('domicilioRichiedenteCoincideConResidenza').value === true ? true : this.isIndirizzoValid;
const isValid = isFormValid && isFormIndirizzoValid;
this.vagliaReady.emit({ vaglia: vaglia, isValid });
//}
});
}
initVagliaForm() {
var _a, _b, _c, _d, _e, _f, _g, _h;
this.vagliaForm = new FormGroup({
nome: new FormControl((_a = this.vagliaBDI) === null || _a === void 0 ? void 0 : _a.nome),
cognome: new FormControl((_b = this.vagliaBDI) === null || _b === void 0 ? void 0 : _b.denominazione),
email: new FormControl((_d = (_c = this.vagliaBDI) === null || _c === void 0 ? void 0 : _c.contatti) === null || _d === void 0 ? void 0 : _d.email, [this.ValidateMail, Validators.maxLength(200)]),
pec: new FormControl((_f = (_e = this.vagliaBDI) === null || _e === void 0 ? void 0 : _e.contatti) === null || _f === void 0 ? void 0 : _f.pec, [this.ValidateMail, Validators.maxLength(200)]),
telefono: new FormControl((_h = (_g = this.vagliaBDI) === null || _g === void 0 ? void 0 : _g.contatti) === null || _h === void 0 ? void 0 : _h.telefono, [ValidatePhone]),
intestatoSudioLegale: new FormControl(this.vagliaBDI != null ? this.vagliaBDI.intestatarioStudioLegale : false, this.isAntistatario ? [Validators.required] : null),
domicilioRichiedenteCoincideConResidenza: new FormControl(this.vagliaBDI != null ? this.vagliaBDI.domicilioRichiedenteCoincideConResidenza : false, [Validators.required]),
});
}
getComuni(siglaProvincia) {
if (siglaProvincia) {
this.modalitaPagamentoService.getComuni$(siglaProvincia).pipe(take(1))
.subscribe(comuni => {
this.setComuni.emit(comuni);
const comune = comuni.find(comuneItem => comuneItem.codiceCatastale === this.codiceCatastale);
this.getCapOptions.emit(comune === null || comune === void 0 ? void 0 : comune.codiceIstat);
});
}
else {
this.setComuni.emit([]);
}
}
getCap(codiceCatastale) {
var _a;
if (codiceCatastale) {
this.codiceCatastale = codiceCatastale;
}
const comune = (_a = this.comuni) === null || _a === void 0 ? void 0 : _a.find(comuneItem => comuneItem.codiceCatastale === codiceCatastale);
this.getCapOptions.emit(comune === null || comune === void 0 ? void 0 : comune.codiceIstat);
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
ValidateMail(control) {
if (!control.value) {
return null;
}
const formatoEmail = /^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$/;
if (formatoEmail.test(control.value)) {
return null;
}
return { invalidMail: true };
}
onIndirizzoReady(event) {
this.indirizzo = event.indirizzo;
this.isIndirizzoValid = event.isValid;
this.indirizzoEmitter.emit({ indirizzo: event.indirizzo, isValid: event.isValid });
}
}
VagliaBdiComponent.decorators = [
{ type: Component, args: [{
selector: 'lib-vaglia-bdi',
template: "<form [formGroup]=\"vagliaForm\" [ngxsForm]=\"vagliaFormPath\">\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-12\">\r\n\t\t\t<div class=\"col-12\">\r\n\t\t\t\t<h3 class=\"h5 mb-0\">{{ \"accreditamento-bdi\" | traduzione }}</h3>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"col-md-12 my-3\">\r\n\t\t\t\t<div class=\"alert alert-primary\" role=\"alert\">\r\n\t\t\t\t\t<p>\r\n\t\t\t\t\t\t{{ \"nota-bdi\" | traduzione }}\r\n\t\t\t\t\t</p>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"row\" *ngIf=\"viewCoincideResidenza\">\r\n\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t<mat-radio-group class=\"radio-group\"\r\n\t\t\t\t\t\t\t\t\taria-labelledby=\"radio-group-label-1\"\r\n\t\t\t\t\t\t\t\t\tformControlName=\"domicilioRichiedenteCoincideConResidenza\">\r\n\t\t\t\t\t\t<mat-radio-button class=\"radio-button pl-2\" [value]=\"true\">\r\n\t\t\t\t\t\t\t{{ \"domicilio-coincide-con-residenza\" | traduzione }}\r\n\t\t\t\t\t\t</mat-radio-button>\r\n\t\t\t\t\t\t<mat-radio-button class=\"radio-button pl-2\" [value]=\"false\">\r\n\t\t\t\t\t\t\t{{ \"domicilio-non-coincide-con-residenza\" | traduzione }}\r\n\t\t\t\t\t\t</mat-radio-button>\r\n\t\t\t\t\t</mat-radio-group>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"col-12\" *ngIf=\"!vagliaForm.controls['domicilioRichiedenteCoincideConResidenza'].value\">\r\n\t\t\t\t<div class=\"row my-2\">\r\n\t\t\t\t\t<div class=\"col-md-6\">\r\n\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t<input matInput [maxlength]=\"100\" placeholder=\"{{ 'required' | traduzione }}{{ 'nome' | traduzione }}\" formControlName=\"nome\" />\r\n\t\t\t\t\t\t\t<mat-error *ngIf=\"vagliaForm.controls['nome'].invalid\">\r\n\t\t\t\t\t\t\t\t{{ getErrorMessage(vagliaForm.controls['nome']) | traduzione }}\r\n\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"col-md-6\">\r\n\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t<input matInput [maxlength]=\"100\" placeholder=\"{{ 'required' | traduzione }}{{ 'denominazione' | traduzione }}\" formControlName=\"cognome\" />\r\n\t\t\t\t\t\t\t<mat-error *ngIf=\"vagliaForm.controls['cognome'].invalid\">\r\n\t\t\t\t\t\t\t\t{{ getErrorMessage(vagliaForm.controls['cognome']) | traduzione }}\r\n\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<lib-indirizzo-pagamento [ngxsFormPath]=\"indirizzoVagliaFormPath\"\r\n\t\t\t\t\t\t\t\t[nazioni]=\"nazioni\"\r\n\t\t\t\t\t\t\t\t[province]=\"province\"\r\n\t\t\t\t\t\t\t\t[comuni]=\"comuni\"\r\n\t\t\t\t\t\t\t\t[capOptions]=\"capOptions\"\r\n\t\t\t\t\t\t\t\t[indirizzo]=\"vagliaBDI?.indirizzo\"\r\n\t\t\t\t\t\t\t\t(selectedProvinciaEmitter)=\"getComuni($event)\"\r\n\t\t\t\t\t\t\t\t(selectedComuneEmitter)=\"getCap($event)\"\r\n\t\t\t\t\t\t\t\t(indirizzoEmitter)=\"onIndirizzoReady($event)\">\r\n\t\t\t\t>\r\n\t\t\t\t</lib-indirizzo-pagamento>\r\n\t\t\t\t<div class=\"row mt-2\">\r\n\t\t\t\t\t<div class=\"col-12 col-md-4\">\r\n\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t<mat-label>{{ 'required' | traduzione }}{{'email' | traduzione}}</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"email\" />\r\n\t\t\t\t\t\t\t<mat-error *ngIf=\"vagliaForm.controls['email'].invalid\">\r\n\t\t\t\t\t\t\t\t{{ getErrorMessage(vagliaForm.controls['email']) | traduzione }}\r\n\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"col-12 col-md-4\">\r\n\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t<mat-label>{{ 'required' | traduzione }}{{'pec' | traduzione}}</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"pec\" />\r\n\t\t\t\t\t\t\t<mat-error *ngIf=\"vagliaForm.controls['pec'].invalid\">\r\n\t\t\t\t\t\t\t\t{{ getErrorMessage(vagliaForm.controls['pec']) | traduzione }}\r\n\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"col-12 col-md-4\">\r\n\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t<mat-label>{{ \"telefono\" | traduzione }}</mat-label>\r\n\t\t\t\t\t\t\t<input matInput [maxlength]=\"20\" formControlName=\"telefono\" />\r\n\t\t\t\t\t\t\t<mat-error *ngIf=\"vagliaForm.controls['telefono'].invalid\">\r\n\t\t\t\t\t\t\t\t{{ getErrorMessage(vagliaForm.controls['telefono']) | traduzione }}\r\n\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"col-md-12\">\r\n\t\t\t\t\t\t<mat-error *ngIf=\"vagliaForm.getError('requiredMail')\">\r\n\t\t\t\t\t\t\t{{ \"validation-requiredMail\" | traduzione }}\r\n\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<ng-container *ngIf=\"isAntistatario\">\r\n\t\t\t\t<div class=\"col-12 mt-3\">\r\n\t\t\t\t\t<h3 class=\"h5 mb-0\">{{ \"intestatario\" | traduzione }}</h3>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"col-md-12 my-3\">\r\n\t\t\t\t\t<mat-radio-group class=\"radio-group\" aria-labelledby=\"radio-group-label-1\" formControlName=\"intestatoSudioLegale\">\r\n\t\t\t\t\t\t<mat-radio-button class=\"radio-button\" [value]=\"false\">{{ \"me-medesimo\" | traduzione }} </mat-radio-button>\r\n\t\t\t\t\t\t<mat-radio-button class=\"pl-3 radio-button\" [value]=\"true\">{{ \"studio-legale\" | traduzione }} </mat-radio-button>\r\n\t\t\t\t\t</mat-radio-group>\r\n\t\t\t\t</div>\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n\t</div>\r\n</form>\r\n\r\n",
styles: [""]
},] }
];
VagliaBdiComponent.ctorParameters = () => [
{ type: ModalitaPagamentoService }
];
VagliaBdiComponent.propDecorators = {
viewCoincideResidenza: [{ type: Input }],
vagliaBDI: [{ type: Input }],
comuni: [{ type: Input }],
capOptions: [{ type: Input }],
isAntistatario: [{ type: Input }],
nazioni: [{ type: Input }],
province: [{ type: Input }],
vagliaFormPath: [{ type: Input }],
indirizzoVagliaFormPath: [{ type: Input }],
setComuni: [{ type: Output }],
getCapOptions: [{ type: Output }],
resetIndirizzoForm: [{ type: Output }],
vagliaReady: [{ type: Output }],
indirizzoEmitter: [{ type: Output }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFnbGlhLWJkaS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovUHJvZ2V0dGkvREFHL3NvcmdlbnRpL2dpdGxhYi1zb2Z0d2FyZWZhY3RvcnkvY29tbW9uLWNvbXBvbmVudC1saWIvcHJvamVjdHMvcG9ydGFsLWNvbW1vbi1jb21wb25lbnQtbGliL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9tb2RhbGl0YS1wYWdhbWVudG8vY29tcG9uZW50cy92YWdsaWEtYmRpL3ZhZ2xpYS1iZGkuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hGLE9BQU8sRUFBa0IsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDdEUsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFFbkYsT0FBTyxFQUFDLFlBQVksRUFBRSxhQUFhLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQU96RSxNQUFNLE9BQU8sa0JBQWtCO0lBeUQ5QixZQUFvQix3QkFBa0Q7UUFBbEQsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQTNCdEUsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRzlDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUczQyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRzlDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWdELENBQUM7UUFHL0UscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQW1ELENB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WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHt0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7Q29tdW5lTW9kZWwsIEluZGlyaXp6b01vZGVsLCBMb2NhbGl0YU1vZGVsLCBOYXppb25lTW9kZWx9IGZyb20gJy4uLy4uL21vZGVscy9lc3RyZW1pLXBlcnNvbmEtZmlzaWNhLm1vZGVsJztcclxuaW1wb3J0IHtnZXRFcnJvck1lc3NhZ2V9IGZyb20gJy4uLy4uL3V0aWxzL3ZhbGlkYXRvcnMtbWVzc2FnZXMudXRpbHMnO1xyXG5pbXBvcnQge01vZGFsaXRhUGFnYW1lbnRvU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kYWxpdGEtcGFnYW1lbnRvLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZhZ2xpYUJESU1vZGVsfSBmcm9tICcuLi8uLi9tb2RlbHMvdmFnbGlhLWJkaS5tb2RlbCc7XHJcbmltcG9ydCB7VmFsaWRhdGVOYW1lLCBWYWxpZGF0ZVBob25lfSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JzLnV0aWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnbGliLXZhZ2xpYS1iZGknLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi92YWdsaWEtYmRpLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi92YWdsaWEtYmRpLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWYWdsaWFCZGlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG5cdEBJbnB1dCgpXHJcbiAgdmlld0NvaW5jaWRlUmVzaWRlbnphOiBib29sZWFuO1xyXG5cclxuXHRASW5wdXQoKVxyXG4gIHZhZ2xpYUJESTogVmFnbGlhQkRJTW9kZWw7XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0Y29tdW5pOiBDb211bmVNb2RlbFtdO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdGNhcE9wdGlvbnM6IHN0cmluZ1tdO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdGlzQW50aXN0YXRhcmlvOiBib29sZWFuO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdG5hemlvbmk6IE5hemlvbmVNb2RlbFtdO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdHByb3ZpbmNlOiBMb2NhbGl0YU1vZGVsW107XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0dmFnbGlhRm9ybVBhdGg6IHN0cmluZztcclxuXHJcblx0QElucHV0KClcclxuXHRpbmRpcml6em9WYWdsaWFGb3JtUGF0aDogc3RyaW5nO1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHRzZXRDb211bmkgPSBuZXcgRXZlbnRFbWl0dGVyPENvbXVuZU1vZGVsW10+KCk7XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdGdldENhcE9wdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcblx0QE91dHB1dCgpXHJcblx0cmVzZXRJbmRpcml6em9Gb3JtID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHR2YWdsaWFSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8eyB2YWdsaWE6IFZhZ2xpYUJESU1vZGVsLCBpc1ZhbGlkOiBib29sZWFuIH0+KCk7XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdGluZGlyaXp6b0VtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaW5kaXJpenpvOiBJbmRpcml6em9Nb2RlbCwgaXNWYWxpZDogYm9vbGVhbiB9PigpO1xyXG5cclxuXHRjYXA6IHN0cmluZ1tdO1xyXG5cclxuXHR2YWdsaWFGb3JtOiBGb3JtR3JvdXA7XHJcblxyXG5cdGNvZGljZUNhdGFzdGFsZTogc3RyaW5nO1xyXG5cclxuXHRwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cclxuXHRnZXRFcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2U7XHJcblxyXG5cdGluZGlyaXp6bzogSW5kaXJpenpvTW9kZWw7XHJcblx0aXNJbmRpcml6em9WYWxpZDogYm9vbGVhbjtcclxuXHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBtb2RhbGl0YVBhZ2FtZW50b1NlcnZpY2U6IE1vZGFsaXRhUGFnYW1lbnRvU2VydmljZSkge1xyXG5cdFx0Ly8gdGhpcy5pbml0VmFnbGlhRm9ybSgpO1xyXG5cdH1cclxuXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLmluaXRWYWdsaWFGb3JtKCk7XHJcblx0XHR0aGlzLnZhZ2xpYUZvcm0uc2V0VmFsaWRhdG9ycyhmb3JtID0+IHtcclxuXHRcdFx0cmV0dXJuICghZm9ybS5nZXQoJ3BlYycpLnZhbHVlICYmICFmb3JtLmdldCgnZW1haWwnKS52YWx1ZSkgJiZcclxuXHRcdFx0XHRcdChmb3JtLmdldCgnZG9taWNpbGlvUmljaGllZGVudGVDb2luY2lkZUNvblJlc2lkZW56YScpLnZhbHVlID09PSBmYWxzZSkgP1xyXG5cdFx0XHR7cmVxdWlyZWRNYWlsOiB0cnVlfSA6IG51bGw7XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy52YWdsaWFGb3JtLmNvbnRyb2xzWydkb21pY2lsaW9SaWNoaWVkZW50ZUNvaW5jaWRlQ29uUmVzaWRlbnphJ10udmFsdWVDaGFuZ2VzLnN1YnNjcmliZShpc0RvbWljaWxpbyA9PiB7XHJcblx0XHRcdGlmKGlzRG9taWNpbGlvKXtcclxuXHRcdFx0XHR0aGlzLnZhZ2xpYUZvcm0uY29udHJvbHNbJ25vbWUnXS5zZXRWYWxpZGF0b3JzKFtdKTtcclxuXHRcdFx0XHR0aGlzLnZhZ2xpYUZvcm0uY29udHJvbHNbJ25vbWUnXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0XHRcdHRoaXMudmFnbGlhRm9ybS5jb250cm9sc1snbm9tZSddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdFx0XHR0aGlzLnZhZ2xpYUZvcm0uY29udHJvbHNbJ2NvZ25vbWUnXS5zZXRWYWxpZGF0b3JzKFtdKTtcclxuXHRcdFx0XHR0aGlzLnZhZ2xpYUZvcm0uY29udHJvbHNbJ2NvZ25vbWUnXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0XHRcdHRoaXMudmFnbGlhRm9ybS5jb250cm9sc1snY29nbm9tZSddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdFx0XHR0aGlzLnZhZ2xpYUZvcm0uY29udHJvbHNbXCJlbWFpbFwiXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0XHRcdHRoaXMudmFnbGlhRm9ybS5jb250cm9sc1tcInBlY1wiXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0XHRcdHRoaXMudmFnbGlhRm9ybS5jb250cm9sc1tcInRlbGVmb25vXCJdLnBhdGNoVmFsdWUobnVsbCk7XHJcblx0XHRcdFx0dGhpcy5yZXNldEluZGlyaXp6b0Zvcm0uZW1pdCgpO1xyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHR0aGlzLnZhZ2xpYUZvcm0uY29udHJvbHNbJ25vbWUnXS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0ZU5hbWVdKSxcclxuXHRcdFx0XHR0aGlzLnZhZ2xpYUZvcm0uY29udHJvbHNbJ25vbWUnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHRcdFx0dGhpcy52YWdsaWFGb3JtLmNvbnRyb2xzWydjb2dub21lJ10uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdGVOYW1lXSksXHJcblx0XHRcdFx0dGhpcy52YWdsaWFGb3JtLmNvbnRyb2xzWydjb2dub21lJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KSk7XHJcblxyXG5cdFx0dGhpcy52YWdsaWFGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAvLyBpZiAodGhpcy52YWdsaWFGb3JtLnZhbGlkKSB7XHJcbiAgICAgICAgY29uc3QgdmFnbGlhOiBWYWdsaWFCRElNb2RlbCA9IHtcclxuXHRcdFx0XHRcdGludGVzdGF0YXJpb1N0dWRpb0xlZ2FsZTogdGhpcy52YWdsaWFGb3JtLmdldCgnaW50ZXN0YXRvU3VkaW9MZWdhbGUnKS52YWx1ZSxcclxuXHRcdFx0XHRcdGRvbWljaWxpb1JpY2hpZWRlbnRlQ29pbmNpZGVDb25SZXNpZGVuemE6IHRoaXMudmFnbGlhRm9ybS5nZXQoJ2RvbWljaWxpb1JpY2hpZWRlbnRlQ29pbmNpZGVDb25SZXNpZGVuemEnKS52YWx1ZSxcclxuXHRcdFx0XHRcdG5vbWU6IHRoaXMudmFnbGlhRm9ybS5nZXQoJ25vbWUnKS52YWx1ZSxcclxuXHRcdFx0XHRcdGRlbm9taW5hemlvbmU6ICB0aGlzLnZhZ2xpYUZvcm0uZ2V0KCdjb2dub21lJykudmFsdWUsXHJcblx0XHRcdFx0XHRjb250YXR0aTogdGhpcy52YWdsaWFGb3JtLmdldCgnZG9taWNpbGlvUmljaGllZGVudGVDb2luY2lkZUNvblJlc2lkZW56YScpLnZhbHVlID09PSB0cnVlID8gbnVsbCA6XHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0ZW1haWw6IHRoaXMudmFnbGlhRm9ybS5nZXQoJ2VtYWlsJykudmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRwZWM6IHRoaXMudmFnbGlhRm9ybS5nZXQoJ3BlYycpLnZhbHVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0dGVsZWZvbm86IHRoaXMudmFnbGlhRm9ybS5nZXQoJ3RlbGVmb25vJykudmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGluZGlyaXp6bzogdGhpcy52YWdsaWFGb3JtLmdldCgnZG9taWNpbGlvUmljaGllZGVudGVDb2luY2lkZUNvblJlc2lkZW56YScpLnZhbHVlID09PSB0cnVlID8gbnVsbCA6IHRoaXMuaW5kaXJpenpvXHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0Y29uc3QgaXNGb3JtVmFsaWQgPSB0aGlzLnZhZ2xpYUZvcm0udmFsaWQ7XHJcblx0XHRcdFx0Y29uc3QgaXNGb3JtSW5kaXJpenpvVmFsaWQgPSB0aGlzLnZhZ2xpYUZvcm0uZ2V0KCdkb21pY2lsaW9SaWNoaWVkZW50ZUNvaW5jaWRlQ29uUmVzaWRlbnphJykudmFsdWUgPT09IHRydWUgPyB0cnVlIDogdGhpcy5pc0luZGlyaXp6b1ZhbGlkO1xyXG4gICAgICAgIGNvbnN0IGlzVmFsaWQgPSBpc0Zvcm1WYWxpZCAmJiBpc0Zvcm1JbmRpcml6em9WYWxpZDtcclxuXHJcbiAgICAgICAgdGhpcy52YWdsaWFSZWFkeS5lbWl0KHsgdmFnbGlhOiB2YWdsaWEsIGlzVmFsaWQgfSk7XHJcbiAgICAgICAvL31cclxuICAgIH0pO1xyXG5cclxuXHR9XHJcblxyXG5cdGluaXRWYWdsaWFGb3JtKCk6IHZvaWQge1xyXG5cdFx0dGhpcy52YWdsaWFGb3JtID0gbmV3IEZvcm1Hcm91cCh7XHJcblx0XHRcdG5vbWU6IG5ldyBGb3JtQ29udHJvbCh0aGlzLnZhZ2xpYUJEST8ubm9tZSksXHJcblx0XHRcdGNvZ25vbWU6IG5ldyBGb3JtQ29udHJvbCh0aGlzLnZhZ2xpYUJEST8uZGVub21pbmF6aW9uZSksXHJcblx0XHRcdGVtYWlsOiBuZXcgRm9ybUNvbnRyb2wodGhpcy52YWdsaWFCREk/LmNvbnRhdHRpPy5lbWFpbCwgW3RoaXMuVmFsaWRhdGVNYWlsLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyMDApXSksXHJcblx0XHRcdHBlYzogbmV3IEZvcm1Db250cm9sKHRoaXMudmFnbGlhQkRJPy5jb250YXR0aT8ucGVjLCBbdGhpcy5WYWxpZGF0ZU1haWwsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDIwMCldKSxcclxuXHRcdFx0dGVsZWZvbm86IG5ldyBGb3JtQ29udHJvbCh0aGlzLnZhZ2xpYUJEST8uY29udGF0dGk/LnRlbGVmb25vLCBbVmFsaWRhdGVQaG9uZV0pLFxyXG5cdFx0XHRpbnRlc3RhdG9TdWRpb0xlZ2FsZTogbmV3IEZvcm1Db250cm9sKHRoaXMudmFnbGlhQkRJICE9IG51bGwgPyB0aGlzLnZhZ2xpYUJESS5pbnRlc3RhdGFyaW9TdHVkaW9MZWdhbGUgOiBmYWxzZSwgdGhpcy5pc0FudGlzdGF0YXJpbyA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IG51bGwpLFxyXG5cdFx0XHRkb21pY2lsaW9SaWNoaWVkZW50ZUNvaW5jaWRlQ29uUmVzaWRlbnphOiBuZXcgRm9ybUNvbnRyb2wodGhpcy52YWdsaWFCREkgIT0gbnVsbCA/IHRoaXMudmFnbGlhQkRJLmRvbWljaWxpb1JpY2hpZWRlbnRlQ29pbmNpZGVDb25SZXNpZGVuemEgOiBmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29tdW5pKHNpZ2xhUHJvdmluY2lhOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdGlmIChzaWdsYVByb3ZpbmNpYSkge1xyXG5cdFx0XHR0aGlzLm1vZGFsaXRhUGFnYW1lbnRvU2VydmljZS5nZXRDb211bmkkKHNpZ2xhUHJvdmluY2lhKS5waXBlKHRha2UoMSkpXHJcblx0XHRcdFx0LnN1YnNjcmliZShjb211bmkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldENvbXVuaS5lbWl0KGNvbXVuaSk7XHJcblx0XHRcdFx0XHRjb25zdCBjb211bmUgPSBjb211bmkuZmluZChjb211bmVJdGVtID0+IGNvbXVuZUl0ZW0uY29kaWNlQ2F0YXN0YWxlID09PSB0aGlzLmNvZGljZUNhdGFzdGFsZSk7XHJcblx0XHRcdFx0XHR0aGlzLmdldENhcE9wdGlvbnMuZW1pdChjb211bmU/LmNvZGljZUlzdGF0KTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5zZXRDb211bmkuZW1pdChbXSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRDYXAoY29kaWNlQ2F0YXN0YWxlOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdGlmIChjb2RpY2VDYXRhc3RhbGUpIHtcclxuXHRcdFx0dGhpcy5jb2RpY2VDYXRhc3RhbGUgPSBjb2RpY2VDYXRhc3RhbGU7XHJcblx0XHR9XHJcblx0XHRjb25zdCBjb211bmUgPSB0aGlzLmNvbXVuaT8uZmluZChjb211bmVJdGVtID0+IGNvbXVuZUl0ZW0uY29kaWNlQ2F0YXN0YWxlID09PSBjb2RpY2VDYXRhc3RhbGUpO1xyXG5cdFx0dGhpcy5nZXRDYXBPcHRpb25zLmVtaXQoY29tdW5lPy5jb2RpY2VJc3RhdCk7XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblx0fVxyXG5cclxuXHRWYWxpZGF0ZU1haWwoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XHJcblx0XHRpZiAoIWNvbnRyb2wudmFsdWUpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0XHRjb25zdCBmb3JtYXRvRW1haWw6IFJlZ0V4cCA9IC9eKFthLXpBLVowLTlfXFwtXFwuXSspQChbYS16QS1aMC05X1xcLVxcLl0rKVxcLihbYS16QS1aXXsyLDV9KSQvO1xyXG5cdFx0aWYgKGZvcm1hdG9FbWFpbC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHsgaW52YWxpZE1haWw6IHRydWUgfTtcclxuXHR9XHJcblxyXG5cdG9uSW5kaXJpenpvUmVhZHkoZXZlbnQ6IHsgaW5kaXJpenpvOiBJbmRpcml6em9Nb2RlbCwgaXNWYWxpZDogYm9vbGVhbiB9KSB7XHJcblx0XHR0aGlzLmluZGlyaXp6byA9IGV2ZW50LmluZGlyaXp6bztcclxuXHRcdHRoaXMuaXNJbmRpcml6em9WYWxpZCA9IGV2ZW50LmlzVmFsaWQ7XHJcblx0XHR0aGlzLmluZGlyaXp6b0VtaXR0ZXIuZW1pdCh7IGluZGlyaXp6bzogZXZlbnQuaW5kaXJpenpvLCBpc1ZhbGlkOiBldmVudC5pc1ZhbGlkIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=