@infordata-web/portal-common-component-lib
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.14.
141 lines • 29.6 kB
JavaScript
import { Component, EventEmitter, Input, Output, } from "@angular/core";
import { FormControl, FormGroup, Validators } from "@angular/forms";
import * as moment from "moment";
import { filter, map, startWith, switchMap, tap } from "rxjs/operators";
import { InfoNascitaPFDTO } from "../../models/info-nascita-pf.dto";
import { ComponentOutputStatus } from "../../normalizzazione/component-output-status";
import { MessageService } from "../../services/message.service";
import { TerritorioService } from "../../services/territorio/territorio-service";
import { ValidationService } from "../../services/validation.service";
export class InfoNascitaComponent {
constructor(msg, territorio, validationService, territorioService) {
this.msg = msg;
this.territorio = territorio;
this.validationService = validationService;
this.territorioService = territorioService;
this.maxDate = new Date();
this.readOnly = false;
this.done = new EventEmitter();
this.ITALIA = 'IT';
this.ITALIACodCat = 'Z000';
this.nazioni$ = territorioService.getNazioni$();
this.nazioni$.subscribe(nazioni => {
this.nazioni = nazioni;
});
}
ngOnChanges(changes) {
this.initialize();
}
ngOnInit() {
var _a, _b, _c;
// console.log('[InfoNascitaComponent] infonascita', this.infonascita);
this.form = new FormGroup({});
this.initialize();
// const isNatoEstero =
// this.infonascita.comuneNascita != null &&
// this.infonascita.comuneNascita.startsWith("Z");
const isNatoEstero = ((_a = this.infonascita) === null || _a === void 0 ? void 0 : _a.isNatoEstero) ? this.infonascita.isNatoEstero : false;
if (!isNatoEstero) {
this.infonascita.nazioneNascita = this.ITALIA;
this.infonascita.codCatNazioneNascita = this.ITALIACodCat;
}
const isNatoEsteroCheck = new FormControl({ value: isNatoEstero, disabled: false }, [Validators.required]);
this.form.addControl("isNatoEstero", isNatoEsteroCheck);
const provinciaNascita = new FormControl({ value: this.infonascita.provinciaNascita, disabled: false }, [Validators.required]);
this.form.addControl("provinciaNascita", provinciaNascita);
const comuneNascita = new FormControl({ value: ((_b = this.infonascita) === null || _b === void 0 ? void 0 : _b.comuneNascita) ? (_c = this.infonascita) === null || _c === void 0 ? void 0 : _c.comuneNascita : this.ITALIACodCat, disabled: false }, [Validators.required]);
this.form.addControl("comuneNascita", comuneNascita);
const dataNascita = new FormControl({ value: this.infonascita.dataNascita, disabled: false }, [Validators.required, ValidationService.ValidateDate]);
this.form.addControl("dataNascita", dataNascita);
const codCatNazioneNascita = new FormControl({ value: this.infonascita.codCatNazioneNascita, disabled: false }, [Validators.required]);
this.form.addControl("codCatNazioneNascita", codCatNazioneNascita);
if (this.readOnly) {
this.form.disable();
this.isNatoEstero$ = isNatoEsteroCheck.valueChanges.pipe(startWith(isNatoEstero));
}
else {
this.isNatoEstero$ = isNatoEsteroCheck.valueChanges.pipe(tap(isEstero => isEstero
? codCatNazioneNascita.setValue(null)
: (provinciaNascita.setValue(null), comuneNascita.setValue(null))), startWith(isNatoEstero), tap((isEstero) => {
if (isEstero) {
codCatNazioneNascita.enable();
comuneNascita.disable();
provinciaNascita.disable();
}
else {
codCatNazioneNascita.disable();
comuneNascita.enable();
provinciaNascita.enable();
}
}));
}
const changes$ = this.form.valueChanges.pipe(map((_) => {
var _a, _b;
const infonascita = new InfoNascitaPFDTO();
infonascita.dataNascita = moment(this.form.controls["dataNascita"].value).toDate();
if ((_a = this.form.controls["isNatoEstero"]) === null || _a === void 0 ? void 0 : _a.value) {
infonascita.isNatoEstero = this.form.controls["isNatoEstero"].value;
//infonascita.comuneNascita = null;
if ((_b = this.form.controls["codCatNazioneNascita"]) === null || _b === void 0 ? void 0 : _b.value) {
let nazioneSelected = this.nazioni.find(nazione => { var _a; return nazione.codiceCatastale == ((_a = this.form.controls["codCatNazioneNascita"]) === null || _a === void 0 ? void 0 : _a.value); });
if (nazioneSelected) {
infonascita.codCatNazioneNascita = nazioneSelected.codiceCatastale;
infonascita.nazioneNascita = nazioneSelected.sigla;
infonascita.comuneNascita = nazioneSelected.codiceCatastale;
}
}
infonascita.provinciaNascita = "EE";
}
else {
infonascita.isNatoEstero = null;
infonascita.comuneNascita = this.form.controls["comuneNascita"].value;
infonascita.provinciaNascita = this.form.controls["provinciaNascita"].value;
infonascita.codCatNazioneNascita = this.ITALIACodCat;
infonascita.nazioneNascita = this.ITALIA;
}
return infonascita;
}), startWith(this.infonascita), map((infonascita) => ComponentOutputStatus.of(this.form.valid || this.readOnly, infonascita)));
this.subscription = changes$.subscribe((_) => this.done.emit(_));
this.comuni$ = provinciaNascita.valueChanges.pipe(tap(_ => comuneNascita.setValue(null)), startWith(this.infonascita.provinciaNascita), filter((x) => x), switchMap((value) => this.territorio.getComuni$(value)));
}
initialize() {
if (!this.infonascita) {
this.infonascita = this.initInfoNascita();
}
}
initInfoNascita() {
const initInfoNascitaNew = new InfoNascitaPFDTO();
return initInfoNascitaNew;
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
compareComuni(c1, c2) {
return c1 && c2 ? c1.codiceCatastale === c2.codiceCatastale : c1 === c2;
}
_resetForm() {
var _a;
(_a = this.form) === null || _a === void 0 ? void 0 : _a.reset();
}
}
InfoNascitaComponent.decorators = [
{ type: Component, args: [{
selector: "lib-info-nascita",
template: "<div [formGroup]=\"form\">\r\n\t<mat-checkbox formControlName=\"isNatoEstero\" *ngIf=\"!readOnly\">\r\n\t\t<!-- {{'localita-nascita-estera' | traduzione}} -->\r\n\t\t<info-tip-label label=\"localita-nascita-estera\"></info-tip-label>\r\n\t</mat-checkbox>\r\n\r\n\t<div class=\"row my-2\">\r\n\t\t<div class=\"col-md-4\" *ngIf=\"!(isNatoEstero$ | async)\">\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<mat-label>{{'required' | traduzione}}{{'provincia-nascita' | traduzione}}</mat-label>\r\n\t\t\t\t<mat-select placeholder=\"{{'seleziona' | traduzione}}\" formControlName=\"provinciaNascita\">\r\n\t\t\t\t\t<mat-option *ngFor=\"let provincia of province | async\" [value]=\"provincia.sigla\">\r\n\t\t\t\t\t\t{{ provincia.denominazione }}\r\n\t\t\t\t\t</mat-option>\r\n\t\t\t\t</mat-select>\r\n\t\t\t\t<mat-error *ngIf=\"form.controls['provinciaNascita'].invalid\">\r\n\t\t\t\t\t{{\r\n\t\t\t\t\tmsg.produceMessage(\r\n\t\t\t\t\t\"obbligatorio\",\r\n\t\t\t\t\tform.controls[\"provinciaNascita\"]\r\n\t\t\t\t\t) | traduzione\r\n\t\t\t\t\t}}\r\n\t\t\t\t</mat-error>\r\n\t\t\t\t<mat-hint *infoTip=\"'provincia-nascita'\"></mat-hint>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\r\n\t\t<div class=\"col-md-4\" *ngIf=\"!(isNatoEstero$ | async)\">\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<mat-label>{{'required' | traduzione}}{{'comune-nascita' | traduzione}}</mat-label>\r\n\t\t\t\t<mat-select placeholder=\"{{'seleziona' | traduzione}}\" formControlName=\"comuneNascita\">\r\n\t\t\t\t\t<mat-option *ngFor=\"let comune of comuni$ | async\" [value]=\"comune.codiceCatastale\">\r\n\t\t\t\t\t\t{{ comune.denominazione }}\r\n\t\t\t\t\t</mat-option>\r\n\t\t\t\t</mat-select>\r\n\t\t\t\t<mat-error *ngIf=\"form.controls['comuneNascita'].invalid\">\r\n\t\t\t\t\t{{\r\n\t\t\t\t\tmsg.produceMessage(\"obbligatorio\", form.controls[\"comuneNascita\"]) | traduzione\r\n\t\t\t\t\t}}\r\n\t\t\t\t</mat-error>\r\n\t\t\t\t<mat-hint *infoTip=\"'comune-nascita'\"></mat-hint>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\r\n\t\t<div class=\"col-md-4\" *ngIf=\"isNatoEstero$ | async\">\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<mat-label>{{'required' | traduzione}}{{'nazione-nascita' | traduzione}}</mat-label>\r\n\t\t\t\t<mat-select placeholder=\"{{'seleziona' | traduzione}}\" formControlName=\"codCatNazioneNascita\">\r\n\t\t\t\t\t<mat-option *ngFor=\"let nazione of nazioni$ | async\" [value]=\"nazione.codiceCatastale\">\r\n\t\t\t\t\t\t{{ nazione.denominazione }}\r\n\t\t\t\t\t</mat-option>\r\n\t\t\t\t</mat-select>\r\n\t\t\t\t<mat-error *ngIf=\"form.controls['codCatNazioneNascita'].invalid\">\r\n\t\t\t\t\t{{\r\n\t\t\t\t\tmsg.produceMessage(\"obbligatorio\", form.controls[\"codCatNazioneNascita\"]) | traduzione\r\n\t\t\t\t\t}}\r\n\t\t\t\t</mat-error>\r\n\t\t\t\t<mat-hint *infoTip=\"'nazione-nascita'\"></mat-hint>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\r\n\t\t<div class=\"col-md-4\">\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<input [max]=\"maxDate\" matInput [matDatepicker]=\"dataNascita\"\r\n\t\t\t\t\tplaceholder=\"{{'required' | traduzione}}{{'data-nascita' | traduzione}}\" formControlName=\"dataNascita\" />\r\n\t\t\t\t<mat-datepicker-toggle matSuffix [for]=\"dataNascita\"></mat-datepicker-toggle>\r\n\t\t\t\t<mat-datepicker #dataNascita></mat-datepicker>\r\n\t\t\t\t<mat-error *ngIf=\"form.controls['dataNascita'].invalid\">\r\n\t\t\t\t\t{{ msg.getErrorData(form.controls[\"dataNascita\"]) | traduzione }}\r\n\t\t\t\t</mat-error>\r\n\t\t\t\t<mat-hint *infoTip=\"'data-nascita'\"></mat-hint>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n",
styles: [""]
},] }
];
InfoNascitaComponent.ctorParameters = () => [
{ type: MessageService },
{ type: TerritorioService },
{ type: ValidationService },
{ type: TerritorioService }
];
InfoNascitaComponent.propDecorators = {
infonascita: [{ type: Input }],
province: [{ type: Input }],
namespace: [{ type: Input }],
readOnly: [{ type: Input }],
done: [{ type: Output }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mby1uYXNjaXRhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9nZXR0aS9EQUcvc29yZ2VudGkvZ2l0bGFiLXNvZnR3YXJlZmFjdG9yeS9jb21tb24tY29tcG9uZW50LWxpYi9wcm9qZWN0cy9wb3J0YWwtY29tbW9uLWNvbXBvbmVudC1saWIvc3JjLyIsInNvdXJjZXMiOlsibGliL2RlcG9zaXRpL2NvbW1vbi1jb21wb25lbnQvaW5mby1uYXNjaXRhL2luZm8tbmFzY2l0YS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sR0FFTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdwRSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUVqQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBS3BFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQVF0RSxNQUFNLE9BQU8sb0JBQW9CO0lBK0JoQyxZQUNTLEdBQW1CLEVBQ25CLFVBQTZCLEVBQzdCLGlCQUFvQyxFQUNwQyxpQkFBb0M7UUFIcEMsUUFBRyxHQUFILEdBQUcsQ0FBZ0I7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDN0Isc0JBQWlC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SSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDdkQsQ0FBQztJQUNILENBQUM7SUFFTyxVQUFVO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQzFDO0lBQ0YsQ0FBQztJQUVELGVBQWU7UUFDZCxNQUFNLGtCQUFrQixHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNsRCxPQUFPLGtCQUFrQixDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsYUFBYSxDQUFDLEVBQVUsRUFBRSxFQUFVO1FBQ25DLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWUsS0FBSyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3pFLENBQUM7SUFFTSxVQUFVOztRQUNoQixNQUFBLElBQUksQ0FBQyxJQUFJLDBDQUFFLEtBQUssR0FBRztJQUNwQixDQUFDOzs7WUE1TEQsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLDg5R0FBNEM7O2FBRTVDOzs7WUFUUSxjQUFjO1lBQ2QsaUJBQWlCO1lBQ2pCLGlCQUFpQjtZQURqQixpQkFBaUI7OzswQkFheEIsS0FBSzt1QkFHTCxLQUFLO3dCQUdMLEtBQUs7dUJBR0wsS0FBSzttQkFHTCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuXHRDb21wb25lbnQsXHJcblx0RXZlbnRFbWl0dGVyLFxyXG5cdElucHV0LFxyXG5cdE9uQ2hhbmdlcyxcclxuXHRPbkRlc3Ryb3ksXHJcblx0T25Jbml0LFxyXG5cdE91dHB1dCxcclxuXHRTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgTUFUX01PTUVOVF9EQVRFX0FEQVBURVJfT1BUSU9OUywgTW9tZW50RGF0ZUFkYXB0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXJcIjtcclxuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIsIE1BVF9EQVRFX0ZPUk1BVFMsIE1BVF9EQVRFX0xPQ0FMRSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEluZm9OYXNjaXRhUEZEVE8gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2luZm8tbmFzY2l0YS1wZi5kdG9cIjtcclxuaW1wb3J0IHsgTmF6aW9uZURUTyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvbmF6aW9uZS5kdG9cIjtcclxuaW1wb3J0IHsgQ29tdW5lIH0gZnJvbSBcIi4uLy4uL21vZGVscy9wb3J0YWxlL2NvbXVuZVwiO1xyXG5pbXBvcnQgeyBMb2NhbGl0YSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcG9ydGFsZS9sb2NhbGl0YVwiO1xyXG5pbXBvcnQgeyBOYXppb25lIH0gZnJvbSBcIi4uLy4uL21vZGVscy9wb3J0YWxlL25hemlvbmVcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50T3V0cHV0U3RhdHVzIH0gZnJvbSBcIi4uLy4uL25vcm1hbGl6emF6aW9uZS9jb21wb25lbnQtb3V0cHV0LXN0YXR1c1wiO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVGVycml0b3Jpb1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdGVycml0b3Jpby90ZXJyaXRvcmlvLXNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlXCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6IFwibGliLWluZm8tbmFzY2l0YVwiLFxyXG5cdHRlbXBsYXRlVXJsOiBcIi4vaW5mby1uYXNjaXRhLmNvbXBvbmVudC5odG1sXCIsXHJcblx0c3R5bGVVcmxzOiBbXCIuL2luZm8tbmFzY2l0YS5jb21wb25lbnQuY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5mb05hc2NpdGFDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuXHJcblx0bWF4RGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0aW5mb25hc2NpdGE6IEluZm9OYXNjaXRhUEZEVE87XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0cHJvdmluY2U6IE9ic2VydmFibGU8QXJyYXk8TG9jYWxpdGE+PjtcclxuXHJcblx0QElucHV0KClcclxuXHRuYW1lc3BhY2U6IHN0cmluZztcclxuXHJcblx0QElucHV0KClcclxuXHRyZWFkT25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHRkb25lOiBFdmVudEVtaXR0ZXI8XHJcblx0XHRDb21wb25lbnRPdXRwdXRTdGF0dXM8SW5mb05hc2NpdGFQRkRUTz5cclxuXHQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wb25lbnRPdXRwdXRTdGF0dXM8SW5mb05hc2NpdGFQRkRUTz4+KCk7XHJcblxyXG5cdGZvcm06IEZvcm1Hcm91cDtcclxuXHRzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHRjb211bmkkOiBPYnNlcnZhYmxlPEFycmF5PENvbXVuZT4+O1xyXG5cdGlzTmF0b0VzdGVybyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcblxyXG5cdG5hemlvbmkkOiBPYnNlcnZhYmxlPEFycmF5PE5hemlvbmU+PjtcclxuXHRuYXppb25pOiBBcnJheTxOYXppb25lPjtcclxuXHRJVEFMSUEgPSAnSVQnO1xyXG5cdElUQUxJQUNvZENhdCA9ICdaMDAwJztcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIG1zZzogTWVzc2FnZVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHRlcnJpdG9yaW86IFRlcnJpdG9yaW9TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHRlcnJpdG9yaW9TZXJ2aWNlOiBUZXJyaXRvcmlvU2VydmljZVxyXG5cdCkge1xyXG5cdFx0dGhpcy5uYXppb25pJCA9IHRlcnJpdG9yaW9TZXJ2aWNlLmdldE5hemlvbmkkKCk7XHJcblx0XHR0aGlzLm5hemlvbmkkLnN1YnNjcmliZShuYXppb25pID0+IHtcclxuXHRcdFx0dGhpcy5uYXppb25pID0gbmF6aW9uaTtcclxuXHRcdH0pXHJcblx0fVxyXG5cclxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcblx0XHR0aGlzLmluaXRpYWxpemUoKTtcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCkge1xyXG5cdFx0Ly8gY29uc29sZS5sb2coJ1tJbmZvTmFzY2l0YUNvbXBvbmVudF0gaW5mb25hc2NpdGEnLCB0aGlzLmluZm9uYXNjaXRhKTtcclxuXHRcdHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cdFx0dGhpcy5pbml0aWFsaXplKCk7XHJcblx0XHQvLyBjb25zdCBpc05hdG9Fc3Rlcm8gPVxyXG5cdFx0Ly8gXHR0aGlzLmluZm9uYXNjaXRhLmNvbXVuZU5hc2NpdGEgIT0gbnVsbCAmJlxyXG5cdFx0Ly8gXHR0aGlzLmluZm9uYXNjaXRhLmNvbXVuZU5hc2NpdGEuc3RhcnRzV2l0aChcIlpcIik7XHJcblx0XHRjb25zdCBpc05hdG9Fc3Rlcm8gPSB0aGlzLmluZm9uYXNjaXRhPy5pc05hdG9Fc3Rlcm8gPyB0aGlzLmluZm9uYXNjaXRhLmlzTmF0b0VzdGVybyA6IGZhbHNlO1xyXG5cclxuXHRcdGlmICghaXNOYXRvRXN0ZXJvKSB7XHJcblx0XHRcdHRoaXMuaW5mb25hc2NpdGEubmF6aW9uZU5hc2NpdGEgPSB0aGlzLklUQUxJQTtcclxuXHRcdFx0dGhpcy5pbmZvbmFzY2l0YS5jb2RDYXROYXppb25lTmFzY2l0YSA9IHRoaXMuSVRBTElBQ29kQ2F0O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGlzTmF0b0VzdGVyb0NoZWNrID0gbmV3IEZvcm1Db250cm9sKFxyXG5cdFx0XHR7IHZhbHVlOiBpc05hdG9Fc3Rlcm8sIGRpc2FibGVkOiBmYWxzZSB9LFxyXG5cdFx0XHRbVmFsaWRhdG9ycy5yZXF1aXJlZF1cclxuXHRcdCk7XHJcblx0XHR0aGlzLmZvcm0uYWRkQ29udHJvbChcImlzTmF0b0VzdGVyb1wiLCBpc05hdG9Fc3Rlcm9DaGVjayk7XHJcblx0XHRcdFxyXG5cdFx0Y29uc3QgcHJvdmluY2lhTmFzY2l0YSA9IG5ldyBGb3JtQ29udHJvbChcclxuXHRcdFx0eyB2YWx1ZTogdGhpcy5pbmZvbmFzY2l0YS5wcm92aW5jaWFOYXNjaXRhLCBkaXNhYmxlZDogZmFsc2UgfSxcclxuXHRcdFx0W1ZhbGlkYXRvcnMucmVxdWlyZWRdXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5mb3JtLmFkZENvbnRyb2woXCJwcm92aW5jaWFOYXNjaXRhXCIsIHByb3ZpbmNpYU5hc2NpdGEpO1xyXG5cdFx0Y29uc3QgY29tdW5lTmFzY2l0YSA9IG5ldyBGb3JtQ29udHJvbChcclxuXHRcdFx0eyB2YWx1ZTogdGhpcy5pbmZvbmFzY2l0YT8uY29tdW5lTmFzY2l0YSA/IHRoaXMuaW5mb25hc2NpdGE/LmNvbXVuZU5hc2NpdGEgOiB0aGlzLklUQUxJQUNvZENhdCwgZGlzYWJsZWQ6IGZhbHNlIH0sXHJcblx0XHRcdFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG5cdFx0KTtcclxuXHRcdHRoaXMuZm9ybS5hZGRDb250cm9sKFwiY29tdW5lTmFzY2l0YVwiLCBjb211bmVOYXNjaXRhKTtcclxuXHRcdGNvbnN0IGRhdGFOYXNjaXRhID0gbmV3IEZvcm1Db250cm9sKFxyXG5cdFx0XHR7IHZhbHVlOiB0aGlzLmluZm9uYXNjaXRhLmRhdGFOYXNjaXRhLCBkaXNhYmxlZDogZmFsc2UgfSxcclxuXHRcdFx0W1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRpb25TZXJ2aWNlLlZhbGlkYXRlRGF0ZV1cclxuXHRcdCk7XHJcblx0XHR0aGlzLmZvcm0uYWRkQ29udHJvbChcImRhdGFOYXNjaXRhXCIsIGRhdGFOYXNjaXRhKTtcclxuXHJcblx0XHRjb25zdCBjb2RDYXROYXppb25lTmFzY2l0YSA9IG5ldyBGb3JtQ29udHJvbChcclxuXHRcdFx0eyB2YWx1ZTogdGhpcy5pbmZvbmFzY2l0YS5jb2RDYXROYXppb25lTmFzY2l0YSwgZGlzYWJsZWQ6IGZhbHNlIH0sXHJcblx0XHRcdFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG5cdFx0KTtcclxuXHRcdHRoaXMuZm9ybS5hZGRDb250cm9sKFwiY29kQ2F0TmF6aW9uZU5hc2NpdGFcIiwgY29kQ2F0TmF6aW9uZU5hc2NpdGEpO1xyXG5cclxuXHJcblx0XHRpZiAodGhpcy5yZWFkT25seSkge1xyXG5cdFx0XHR0aGlzLmZvcm0uZGlzYWJsZSgpO1xyXG5cclxuXHRcdFx0dGhpcy5pc05hdG9Fc3Rlcm8kID0gaXNOYXRvRXN0ZXJvQ2hlY2sudmFsdWVDaGFuZ2VzLnBpcGUoXHJcblx0XHRcdFx0c3RhcnRXaXRoKGlzTmF0b0VzdGVybylcclxuXHRcdFx0KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuaXNOYXRvRXN0ZXJvJCA9IGlzTmF0b0VzdGVyb0NoZWNrLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG5cdFx0XHRcdHRhcChpc0VzdGVybyA9PiBpc0VzdGVyb1xyXG5cdFx0XHRcdFx0PyBjb2RDYXROYXppb25lTmFzY2l0YS5zZXRWYWx1ZShudWxsKVxyXG5cdFx0XHRcdFx0OiAocHJvdmluY2lhTmFzY2l0YS5zZXRWYWx1ZShudWxsKSwgY29tdW5lTmFzY2l0YS5zZXRWYWx1ZShudWxsKSlcclxuXHRcdFx0XHQpLFxyXG5cdFx0XHRcdHN0YXJ0V2l0aChpc05hdG9Fc3Rlcm8pLFxyXG5cdFx0XHRcdHRhcCgoaXNFc3Rlcm8pID0+IHtcclxuXHRcdFx0XHRcdGlmIChpc0VzdGVybykge1xyXG5cdFx0XHRcdFx0XHRjb2RDYXROYXppb25lTmFzY2l0YS5lbmFibGUoKTtcclxuXHRcdFx0XHRcdFx0Y29tdW5lTmFzY2l0YS5kaXNhYmxlKCk7XHJcblx0XHRcdFx0XHRcdHByb3ZpbmNpYU5hc2NpdGEuZGlzYWJsZSgpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Y29kQ2F0TmF6aW9uZU5hc2NpdGEuZGlzYWJsZSgpO1xyXG5cdFx0XHRcdFx0XHRjb211bmVOYXNjaXRhLmVuYWJsZSgpO1xyXG5cdFx0XHRcdFx0XHRwcm92aW5jaWFOYXNjaXRhLmVuYWJsZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0XHRjb25zdCBjaGFuZ2VzJCA9IHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZShcclxuXHRcdFx0bWFwKChfKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgaW5mb25hc2NpdGEgPSBuZXcgSW5mb05hc2NpdGFQRkRUTygpO1xyXG5cdFx0XHRcdGluZm9uYXNjaXRhLmRhdGFOYXNjaXRhID0gbW9tZW50KHRoaXMuZm9ybS5jb250cm9sc1tcImRhdGFOYXNjaXRhXCJdLnZhbHVlKS50b0RhdGUoKTtcclxuXHRcdFx0XHRpZiAodGhpcy5mb3JtLmNvbnRyb2xzW1wiaXNOYXRvRXN0ZXJvXCJdPy52YWx1ZSkge1xyXG5cdFx0XHRcdFx0aW5mb25hc2NpdGEuaXNOYXRvRXN0ZXJvID0gdGhpcy5mb3JtLmNvbnRyb2xzW1wiaXNOYXRvRXN0ZXJvXCJdLnZhbHVlO1xyXG5cdFx0XHRcdFx0Ly9pbmZvbmFzY2l0YS5jb211bmVOYXNjaXRhID0gbnVsbDtcclxuXHRcdFx0XHRcdGlmKHRoaXMuZm9ybS5jb250cm9sc1tcImNvZENhdE5hemlvbmVOYXNjaXRhXCJdPy52YWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRsZXQgbmF6aW9uZVNlbGVjdGVkID0gdGhpcy5uYXppb25pLmZpbmQobmF6aW9uZSA9PiBuYXppb25lLmNvZGljZUNhdGFzdGFsZSA9PSB0aGlzLmZvcm0uY29udHJvbHNbXCJjb2RDYXROYXppb25lTmFzY2l0YVwiXT8udmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRpZihuYXppb25lU2VsZWN0ZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRpbmZvbmFzY2l0YS5jb2RDYXROYXppb25lTmFzY2l0YSA9IG5hemlvbmVTZWxlY3RlZC5jb2RpY2VDYXRhc3RhbGU7XHJcblx0XHRcdFx0XHRcdFx0aW5mb25hc2NpdGEubmF6aW9uZU5hc2NpdGEgPSBuYXppb25lU2VsZWN0ZWQuc2lnbGE7XHJcblx0XHRcdFx0XHRcdFx0aW5mb25hc2NpdGEuY29tdW5lTmFzY2l0YSA9IG5hemlvbmVTZWxlY3RlZC5jb2RpY2VDYXRhc3RhbGU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGluZm9uYXNjaXRhLnByb3ZpbmNpYU5hc2NpdGEgPSBcIkVFXCI7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGluZm9uYXNjaXRhLmlzTmF0b0VzdGVybyA9IG51bGw7XHJcblx0XHRcdFx0XHRpbmZvbmFzY2l0YS5jb211bmVOYXNjaXRhID0gdGhpcy5mb3JtLmNvbnRyb2xzW1wiY29tdW5lTmFzY2l0YVwiXS52YWx1ZTtcclxuXHRcdFx0XHRcdGluZm9uYXNjaXRhLnByb3ZpbmNpYU5hc2NpdGEgPSB0aGlzLmZvcm0uY29udHJvbHNbXHJcblx0XHRcdFx0XHRcdFwicHJvdmluY2lhTmFzY2l0YVwiXHJcblx0XHRcdFx0XHRdLnZhbHVlO1xyXG5cdFx0XHRcdFx0aW5mb25hc2NpdGEuY29kQ2F0TmF6aW9uZU5hc2NpdGEgPSB0aGlzLklUQUxJQUNvZENhdDtcclxuXHRcdFx0XHRcdGluZm9uYXNjaXRhLm5hemlvbmVOYXNjaXRhID0gdGhpcy5JVEFMSUE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBpbmZvbmFzY2l0YTtcclxuXHRcdFx0fSksXHJcblx0XHRcdHN0YXJ0V2l0aCh0aGlzLmluZm9uYXNjaXRhKSxcclxuXHRcdFx0bWFwKChpbmZvbmFzY2l0YSkgPT5cclxuXHRcdFx0XHRDb21wb25lbnRPdXRwdXRTdGF0dXMub2YoXHJcblx0XHRcdFx0XHR0aGlzLmZvcm0udmFsaWQgfHwgdGhpcy5yZWFkT25seSxcclxuXHRcdFx0XHRcdGluZm9uYXNjaXRhXHJcblx0XHRcdFx0KVxyXG5cdFx0XHQpXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9uID0gY2hhbmdlcyQuc3Vic2NyaWJlKChfKSA9PiB0aGlzLmRvbmUuZW1pdChfKSk7XHJcblxyXG5cdFx0dGhpcy5jb211bmkkID0gcHJvdmluY2lhTmFzY2l0YS52YWx1ZUNoYW5nZXMucGlwZShcclxuXHRcdFx0dGFwKF8gPT4gY29tdW5lTmFzY2l0YS5zZXRWYWx1ZShudWxsKSApLFxyXG5cdFx0XHRzdGFydFdpdGgodGhpcy5pbmZvbmFzY2l0YS5wcm92aW5jaWFOYXNjaXRhKSxcclxuXHRcdFx0ZmlsdGVyKCh4KSA9PiB4KSxcclxuXHRcdFx0c3dpdGNoTWFwKCh2YWx1ZSkgPT4gdGhpcy50ZXJyaXRvcmlvLmdldENvbXVuaSQodmFsdWUpKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaW5pdGlhbGl6ZSgpIHtcclxuXHRcdGlmICghdGhpcy5pbmZvbmFzY2l0YSkge1xyXG5cdFx0XHR0aGlzLmluZm9uYXNjaXRhID0gdGhpcy5pbml0SW5mb05hc2NpdGEoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGluaXRJbmZvTmFzY2l0YSgpOiBJbmZvTmFzY2l0YVBGRFRPIHtcclxuXHRcdGNvbnN0IGluaXRJbmZvTmFzY2l0YU5ldyA9IG5ldyBJbmZvTmFzY2l0YVBGRFRPKCk7XHJcblx0XHRyZXR1cm4gaW5pdEluZm9OYXNjaXRhTmV3O1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cdH1cclxuXHJcblx0Y29tcGFyZUNvbXVuaShjMTogQ29tdW5lLCBjMjogQ29tdW5lKSB7XHJcblx0XHRyZXR1cm4gYzEgJiYgYzIgPyBjMS5jb2RpY2VDYXRhc3RhbGUgPT09IGMyLmNvZGljZUNhdGFzdGFsZSA6IGMxID09PSBjMjtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBfcmVzZXRGb3JtKCkge1xyXG5cdFx0dGhpcy5mb3JtPy5yZXNldCgpO1xyXG5cdH1cclxufVxyXG4iXX0=