@infordata-web/portal-common-component-lib
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.14.
153 lines • 27.7 kB
JavaScript
import { Component, EventEmitter, Input, Output, ViewChild } from "@angular/core";
import { BehaviorSubject, combineLatest, of, ReplaySubject } from "rxjs";
import { FormGroup } from "@angular/forms";
import { PersonaFisicaDTO } from "../../models/persona-fisica-dto";
import { ComponentOutputStatus } from "../../normalizzazione/component-output-status";
import { DelegheService } from '../../services/deleghe-services/deleghe.service';
import { isNotNull } from "../../utils/fnutils";
import { auditTime, catchError, concatMap, map, startWith, tap } from "rxjs/operators";
const SAMPLE_TIME = 1000;
const EMPTY_PF = {
id: null,
infoAnagrafiche: {
codFiscale: null,
codiceRegione: null,
cognome: null,
nome: null
},
infoNascita: {
comuneNascita: null,
dataNascita: null,
provinciaNascita: null,
nazioneNascita: null,
isNatoEstero: null,
codCatNazioneNascita: null
}
};
export class PersonaFisicaComponent {
constructor(delegheService) {
this.delegheService = delegheService;
this.done = new EventEmitter();
this.changesPF$ = new ReplaySubject(1);
this.changesNascita$ = new ReplaySubject(1);
this.readOnly = false;
this.isPersonaFisicaValid = new BehaviorSubject(false);
this.datiVerifica = {};
}
ngOnInit() {
this.form = new FormGroup({});
let valid = false;
if (!this.infoPersonaFisica) {
this.initPersonaFisica();
valid = false;
}
else {
this.readOnly = true;
}
if (this.idDelega == null || this.nuovaPersona) {
this.readOnly = false;
}
this.namespaceInfoPf = this.namespace + "infoPF";
this.namespaceInfoNascita = this.namespace + "infoNascita";
const mappaProvince$ = this.delegheService.getAllProvince();
this.personaFisicaChangedSub = combineLatest([this.changesPF$, this.changesNascita$, mappaProvince$])
.pipe(map(([validPF, changesNascita, allProvince]) => {
var _a;
let provincia = allProvince[(_a = changesNascita === null || changesNascita === void 0 ? void 0 : changesNascita.output) === null || _a === void 0 ? void 0 : _a.provinciaNascita];
return [validPF, changesNascita, provincia];
}), auditTime(SAMPLE_TIME), concatMap(([infoAnagrafiche, infoNascita, provincia]) => this.getPersonaFisicaValid(infoAnagrafiche, infoNascita, provincia)), startWith(ComponentOutputStatus.of(valid, this.infoPersonaFisica)), tap(pf => this.done.emit(pf)))
.subscribe();
}
getPersonaFisicaValid(infoAnagrafiche, infoNascita, provincia) {
console.log("FORM VALIDITY", infoNascita.status);
if (!infoNascita.status || !infoAnagrafiche.status) {
this.isPersonaFisicaValid.next(false);
return of(ComponentOutputStatus.of(false, EMPTY_PF));
}
return this.validatePersonaFisica(infoAnagrafiche.output, infoNascita.output)
.pipe(tap(() => this.isPersonaFisicaValid.next(true)), map((response) => {
const isPersonaFisicaValid = isNotNull(response);
return this.toValidPf(isPersonaFisicaValid, response, infoAnagrafiche.output, provincia, infoNascita);
}), tap(({ isValid }) => this.isPersonaFisicaValid.next(isValid)), tap(({ persona }) => this.infoPersonaFisica = persona), map(v => ComponentOutputStatus.of(v.isValid, v.persona)), catchError(_ => of(ComponentOutputStatus.of(false, EMPTY_PF))));
}
toValidPf(isPersonaFisicaValid, response, infoAnagrafiche, provincia, infoNascita) {
var _a, _b;
return {
isValid: isPersonaFisicaValid,
persona: {
id: response === null || response === void 0 ? void 0 : response.id,
infoAnagrafiche: {
codFiscale: String(infoAnagrafiche.codFiscale),
codiceRegione: String(provincia === null || provincia === void 0 ? void 0 : provincia.siglaReg),
cognome: String(infoAnagrafiche.cognome),
nome: String(infoAnagrafiche.nome)
},
infoNascita: {
comuneNascita: ((_a = infoNascita === null || infoNascita === void 0 ? void 0 : infoNascita.output) === null || _a === void 0 ? void 0 : _a.comuneNascita) ? String(infoNascita.output.comuneNascita) : null,
dataNascita: infoNascita.output.dataNascita,
provinciaNascita: String(infoNascita.output.provinciaNascita),
nazioneNascita: String(infoNascita.output.nazioneNascita),
codCatNazioneNascita: String(infoNascita.output.codCatNazioneNascita),
isNatoEstero: ((_b = infoNascita.output) === null || _b === void 0 ? void 0 : _b.isNatoEstero) ? infoNascita.output.isNatoEstero : false
}
}
};
}
validatePersonaFisica(infoAnagrafiche, infoNascita) {
// var d = new Date(infoNascita.dataNascita);
// d.toLocaleString('it-IT', { timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone })
return this.delegheService.getValidaPersonaFisica({
codiceFiscale: infoAnagrafiche.codFiscale,
cognome: infoAnagrafiche.cognome,
comune: (infoNascita === null || infoNascita === void 0 ? void 0 : infoNascita.isNatoEstero) ? null : infoNascita === null || infoNascita === void 0 ? void 0 : infoNascita.comuneNascita
// , dataNascita: new Date(moment(infoNascita.dataNascita, 'DD/MM/YYYY').add(23, 'hour').add(59, 'minute').add(59, 'second').toDate())
,
dataNascita: new Date(infoNascita.dataNascita).toISOString(),
nome: infoAnagrafiche.nome,
provinciaNascita: infoNascita.provinciaNascita,
siglaNazione: infoNascita.nazioneNascita,
codCatNazioneNascita: infoNascita === null || infoNascita === void 0 ? void 0 : infoNascita.codCatNazioneNascita
});
}
initPersonaFisica() {
this.infoPersonaFisica = new PersonaFisicaDTO();
}
infoPfReady(inFoPfStatus) {
// console.log("[infoPfReady]", inFoPfStatus);
this.changesPF$.next(inFoPfStatus);
}
infoNascitaReady(infoNascitaPf) {
// console.log("[infoNascitaReady]", infoNascitaPf);
this.changesNascita$.next(infoNascitaPf);
}
ngOnDestroy() {
this.personaFisicaChangedSub.unsubscribe();
}
resetForm() {
this.infoPF._resetForm();
this.infoNascita._resetForm();
}
}
PersonaFisicaComponent.decorators = [
{ type: Component, args: [{
selector: "lib-persona-fisica",
template: "<form [formGroup]=\"form\">\r\n\t<lib-info-pf\r\n\t\t[cfDifferentFrom]=\"cfDifferentFrom\"\r\n\t\t[namespace]=\"namespaceInfoPf\"\r\n\t\t(done)=\"infoPfReady($event)\"\r\n\t\t[infopf]=\"infoPersonaFisica?.infoAnagrafiche\"\r\n\t\t[readOnly]=\"readOnly\"\r\n\t\t[validatorFormControl]=\"true\"\r\n\t\t#infoPF\r\n\t>\r\n\t</lib-info-pf>\r\n\t<lib-info-nascita\r\n\t\t[province]=\"province\"\r\n\t\t(done)=\"infoNascitaReady($event)\"\r\n\t\t[infonascita]=\"infoPersonaFisica?.infoNascita\"\r\n\t\t[readOnly]=\"readOnly\"\r\n\t\t#infoNascita\r\n\t>\r\n\t</lib-info-nascita>\r\n\t<div class=\"collapse-body mt-2\">\r\n\t\t<div class=\"col-md-12\">\r\n\t\t\t<mat-error *ngIf=\"!(isPersonaFisicaValid | async)\">\r\n\t\t\t\t{{'validationPF' | traduzione }}\r\n\t\t\t</mat-error>\r\n\t\t</div>\r\n\t</div>\r\n</form>\r\n",
styles: [""]
},] }
];
PersonaFisicaComponent.ctorParameters = () => [
{ type: DelegheService }
];
PersonaFisicaComponent.propDecorators = {
infoPersonaFisica: [{ type: Input }],
cfDifferentFrom: [{ type: Input }],
province: [{ type: Input }],
nazioni: [{ type: Input }],
namespace: [{ type: Input }],
idDelega: [{ type: Input }],
nuovaPersona: [{ type: Input }],
done: [{ type: Output }],
infoPF: [{ type: ViewChild, args: ['infoPF',] }],
infoNascita: [{ type: ViewChild, args: ['infoNascita',] }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uYS1maXNpY2EuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkQ6L1Byb2dldHRpL0RBRy9zb3JnZW50aS9naXRsYWItdGVybmkvY29tbW9uLWNvbXBvbmVudC1saWIvcHJvamVjdHMvcG9ydGFsLWNvbW1vbi1jb21wb25lbnQtbGliL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9kZXBvc2l0aS9jb21tb24tY29tcG9uZW50L3BlcnNvbmEtZmlzaWNhL3BlcnNvbmEtZmlzaWNhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBcUIsRUFBRSxFQUFFLGFBQWEsRUFBeUIsTUFBTSxNQUFNLENBQUM7QUFDbkgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBS3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUVqRixPQUFPLEVBQUUsU0FBUyxFQUF1QixNQUFNLHFCQUFxQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBVSxHQUFHLEVBQXFCLFNBQVMsRUFBYSxHQUFHLEVBQWtCLE1BQU0sZ0JBQWdCLENBQUM7QUFNN0ksTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBRXpCLE1BQU0sUUFBUSxHQUFxQjtJQUNsQyxFQUFFLEVBQUUsSUFBSTtJQUNSLGVBQWUsRUFBRTtRQUNoQixVQUFVLEVBQUUsSUFBSTtRQUNoQixhQUFhLEVBQUUsSUFBSTtRQUNuQixPQUFPLEVBQUUsSUFBSTtRQUNi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QztJQUVELFdBQVc7UUFDVixJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVNLFNBQVM7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDL0IsQ0FBQzs7O1lBbE1ELFNBQVMsU0FBQztnQkFDVixRQUFRLEVBQUUsb0JBQW9CO2dCQUM5Qix5ekJBQThDOzthQUU5Qzs7O1lBaENRLGNBQWM7OztnQ0FxQ3JCLEtBQUs7OEJBR0wsS0FBSzt1QkFHTCxLQUFLO3NCQUdMLEtBQUs7d0JBR0wsS0FBSzt1QkFHTCxLQUFLOzJCQUVMLEtBQUs7bUJBRUwsTUFBTTtxQkFvQk4sU0FBUyxTQUFDLFFBQVE7MEJBR2xCLFNBQVMsU0FBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuXHRDb21wb25lbnQsXHJcblx0RXZlbnRFbWl0dGVyLFxyXG5cdElucHV0LFxyXG5cdE9uRGVzdHJveSxcclxuXHRPbkluaXQsXHJcblx0T3V0cHV0LFxyXG5cdFZpZXdDaGlsZFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgRU1QVFksIE9ic2VydmFibGUsIG9mLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgUGVyc29uYUZpc2ljYURUTyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcGVyc29uYS1maXNpY2EtZHRvXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudE91dHB1dFN0YXR1cyB9IGZyb20gXCIuLi8uLi9ub3JtYWxpenphemlvbmUvY29tcG9uZW50LW91dHB1dC1zdGF0dXNcIjtcclxuaW1wb3J0IHsgSW5mb0FuYWdyYWZpY2hlUEZEVE8gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2luZm8tYW5hZ3JhZmljaGUtcGZcIjtcclxuaW1wb3J0IHsgSW5mb05hc2NpdGFQRkRUTyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvaW5mby1uYXNjaXRhLXBmLmR0b1wiO1xyXG5pbXBvcnQgeyBMb2NhbGl0YSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcG9ydGFsZS9sb2NhbGl0YVwiO1xyXG5pbXBvcnQgeyBOYXppb25lIH0gZnJvbSBcIi4uLy4uL21vZGVscy9wb3J0YWxlL25hemlvbmVcIjtcclxuaW1wb3J0IHsgRGVsZWdoZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kZWxlZ2hlLXNlcnZpY2VzL2RlbGVnaGUuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGlWZXJpZmljYUNmRFRPIH0gZnJvbSBcIi4uLy4uL21vZGVscy9kYXRpLXZlcmlmY2EtZHRvXCI7XHJcbmltcG9ydCB7IGlzTm90TnVsbCwgaXNOb3RVbmRlZmluZWQsIG5vdCB9IGZyb20gXCIuLi8uLi91dGlscy9mbnV0aWxzXCI7XHJcbmltcG9ydCB7IGF1ZGl0VGltZSwgY2F0Y2hFcnJvciwgY29uY2F0TWFwLCBmaWx0ZXIsIG1hcCwgcGx1Y2ssIHNhbXBsZVRpbWUsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7IFByb3ZpbmNpYUVzdGVzYURUTyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcHJvdmluY2lhRXN0ZXNhRFRPXCI7XHJcbmltcG9ydCB7IEluZm9QZkNvbXBvbmVudCB9IGZyb20gXCIuLi9pbmZvLXBmL2luZm8tcGYuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7SW5mb05hc2NpdGFDb21wb25lbnR9IGZyb20gXCIuLi9pbmZvLW5hc2NpdGEvaW5mby1uYXNjaXRhLmNvbXBvbmVudFwiXHJcblxyXG5jb25zdCBTQU1QTEVfVElNRSA9IDEwMDA7XHJcblxyXG5jb25zdCBFTVBUWV9QRjogUGVyc29uYUZpc2ljYURUTyA9IHtcclxuXHRpZDogbnVsbCxcclxuXHRpbmZvQW5hZ3JhZmljaGU6IHtcclxuXHRcdGNvZEZpc2NhbGU6IG51bGwsXHJcblx0XHRjb2RpY2VSZWdpb25lOiBudWxsLFxyXG5cdFx0Y29nbm9tZTogbnVsbCxcclxuXHRcdG5vbWU6IG51bGxcclxuXHR9LFxyXG5cdGluZm9OYXNjaXRhOiB7XHJcblx0XHRjb211bmVOYXNjaXRhOiBudWxsLFxyXG5cdFx0ZGF0YU5hc2NpdGE6IG51bGwsXHJcblx0XHRwcm92aW5jaWFOYXNjaXRhOiBudWxsLFxyXG5cdFx0bmF6aW9uZU5hc2NpdGE6IG51bGwsXHJcblx0XHRpc05hdG9Fc3Rlcm86IG51bGwsXHJcblx0XHRjb2RDYXROYXppb25lTmFzY2l0YTogbnVsbFxyXG5cdH1cclxufTtcclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6IFwibGliLXBlcnNvbmEtZmlzaWNhXCIsXHJcblx0dGVtcGxhdGVVcmw6IFwiLi9wZXJzb25hLWZpc2ljYS5jb21wb25lbnQuaHRtbFwiLFxyXG5cdHN0eWxlVXJsczogW1wiLi9wZXJzb25hLWZpc2ljYS5jb21wb25lbnQuY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVyc29uYUZpc2ljYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcblx0Zm9ybTogRm9ybUdyb3VwO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdGluZm9QZXJzb25hRmlzaWNhOiBQZXJzb25hRmlzaWNhRFRPO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdGNmRGlmZmVyZW50RnJvbTogc3RyaW5nO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdHByb3ZpbmNlOiBPYnNlcnZhYmxlPEFycmF5PExvY2FsaXRhPj47XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0bmF6aW9uaTogT2JzZXJ2YWJsZTxBcnJheTxOYXppb25lPj47XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0bmFtZXNwYWNlOiBzdHJpbmc7XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0aWREZWxlZ2E6IHN0cmluZztcclxuXHRASW5wdXQoKVxyXG5cdG51b3ZhUGVyc29uYTogYm9vbGVhbjtcclxuXHRAT3V0cHV0KClcclxuXHRkb25lOiBFdmVudEVtaXR0ZXI8XHJcblx0XHRDb21wb25lbnRPdXRwdXRTdGF0dXM8UGVyc29uYUZpc2ljYURUTz5cclxuXHQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wb25lbnRPdXRwdXRTdGF0dXM8UGVyc29uYUZpc2ljYURUTz4+KCk7XHJcblxyXG5cdGNoYW5nZXNQRiQgPSBuZXcgUmVwbGF5U3ViamVjdDxDb21wb25lbnRPdXRwdXRTdGF0dXM8SW5mb0FuYWdyYWZpY2hlUEZEVE8+PigxKTtcclxuXHJcblx0Y2hhbmdlc05hc2NpdGEkID0gbmV3IFJlcGxheVN1YmplY3Q8Q29tcG9uZW50T3V0cHV0U3RhdHVzPEluZm9OYXNjaXRhUEZEVE8+PigxKTtcclxuXHJcblx0bmFtZXNwYWNlSW5mb1BmOiBzdHJpbmc7XHJcblx0bmFtZXNwYWNlSW5mb05hc2NpdGE6IHN0cmluZztcclxuXHJcblx0cGVyc29uYUZpc2ljYUNoYW5nZWRTdWI6IFN1YnNjcmlwdGlvbjtcclxuXHJcblx0cmVhZE9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0aXNQZXJzb25hRmlzaWNhVmFsaWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG5cclxuXHRkYXRpVmVyaWZpY2EgPSB7fSBhcyBEYXRpVmVyaWZpY2FDZkRUTztcclxuXHJcblx0QFZpZXdDaGlsZCgnaW5mb1BGJylcclxuXHRpbmZvUEY6IEluZm9QZkNvbXBvbmVudDtcclxuXHJcblx0QFZpZXdDaGlsZCgnaW5mb05hc2NpdGEnKVxyXG5cdGluZm9OYXNjaXRhOiBJbmZvTmFzY2l0YUNvbXBvbmVudDtcclxuXHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBkZWxlZ2hlU2VydmljZTogRGVsZWdoZVNlcnZpY2UpIHsgfVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHJcblx0XHR0aGlzLmZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHRcdGxldCB2YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0aWYgKCF0aGlzLmluZm9QZXJzb25hRmlzaWNhKSB7XHJcblx0XHRcdHRoaXMuaW5pdFBlcnNvbmFGaXNpY2EoKTtcclxuXHRcdFx0dmFsaWQgPSBmYWxzZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMucmVhZE9ubHkgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmlkRGVsZWdhID09IG51bGwgfHwgdGhpcy5udW92YVBlcnNvbmEpIHtcclxuXHRcdFx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMubmFtZXNwYWNlSW5mb1BmID0gdGhpcy5uYW1lc3BhY2UgKyBcImluZm9QRlwiO1xyXG5cdFx0dGhpcy5uYW1lc3BhY2VJbmZvTmFzY2l0YSA9IHRoaXMubmFtZXNwYWNlICsgXCJpbmZvTmFzY2l0YVwiO1xyXG5cclxuXHRcdGNvbnN0IG1hcHBhUHJvdmluY2UkID0gdGhpcy5kZWxlZ2hlU2VydmljZS5nZXRBbGxQcm92aW5jZSgpO1xyXG5cclxuXHRcdHRoaXMucGVyc29uYUZpc2ljYUNoYW5nZWRTdWIgPSBjb21iaW5lTGF0ZXN0KFxyXG5cdFx0XHRbdGhpcy5jaGFuZ2VzUEYkLCB0aGlzLmNoYW5nZXNOYXNjaXRhJCwgbWFwcGFQcm92aW5jZSRdXHJcblx0XHQpXHJcblx0XHQucGlwZShcclxuXHRcdFx0bWFwKChbdmFsaWRQRiwgY2hhbmdlc05hc2NpdGEsIGFsbFByb3ZpbmNlXSkgPT4ge1xyXG5cdFx0XHRcdGxldCBwcm92aW5jaWEgPSBhbGxQcm92aW5jZVtjaGFuZ2VzTmFzY2l0YT8ub3V0cHV0Py5wcm92aW5jaWFOYXNjaXRhXTtcclxuXHRcdFx0XHRyZXR1cm4gW3ZhbGlkUEYsIGNoYW5nZXNOYXNjaXRhLCBwcm92aW5jaWFdXHJcblx0XHRcdH0pLFxyXG5cdFx0XHRhdWRpdFRpbWUoU0FNUExFX1RJTUUpLFxyXG5cdFx0XHRjb25jYXRNYXAoKFtpbmZvQW5hZ3JhZmljaGUsIGluZm9OYXNjaXRhLCBwcm92aW5jaWFdKSA9PlxyXG5cdFx0XHRcdHRoaXMuZ2V0UGVyc29uYUZpc2ljYVZhbGlkKGluZm9BbmFncmFmaWNoZSwgaW5mb05hc2NpdGEsIHByb3ZpbmNpYSlcclxuXHRcdFx0KSxcclxuXHRcdFx0c3RhcnRXaXRoKENvbXBvbmVudE91dHB1dFN0YXR1cy5vZih2YWxpZCwgdGhpcy5pbmZvUGVyc29uYUZpc2ljYSkpLFxyXG5cdFx0XHR0YXAocGYgPT4gdGhpcy5kb25lLmVtaXQocGYpKVxyXG5cdFx0KVxyXG5cdFx0LnN1YnNjcmliZSgpO1xyXG5cdH1cclxuXHJcblx0Z2V0UGVyc29uYUZpc2ljYVZhbGlkKFxyXG5cdFx0aW5mb0FuYWdyYWZpY2hlOiBDb21wb25lbnRPdXRwdXRTdGF0dXM8SW5mb0FuYWdyYWZpY2hlUEZEVE8+LFxyXG5cdFx0aW5mb05hc2NpdGE6IENvbXBvbmVudE91dHB1dFN0YXR1czxJbmZvTmFzY2l0YVBGRFRPPixcclxuXHRcdHByb3ZpbmNpYT86IFByb3ZpbmNpYUVzdGVzYURUT1xyXG5cdCkge1xyXG5cclxuXHRcdGNvbnNvbGUubG9nKFwiRk9STSBWQUxJRElUWVwiLCBpbmZvTmFzY2l0YS5zdGF0dXMpO1xyXG5cdFx0aWYgKCFpbmZvTmFzY2l0YS5zdGF0dXMgfHwgIWluZm9BbmFncmFmaWNoZS5zdGF0dXMpIHtcclxuXHRcdFxyXG5cdFx0XHR0aGlzLmlzUGVyc29uYUZpc2ljYVZhbGlkLm5leHQoZmFsc2UpO1xyXG5cdFx0XHRyZXR1cm4gb2YoQ29tcG9uZW50T3V0cHV0U3RhdHVzLm9mKGZhbHNlLCBFTVBUWV9QRikpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnZhbGlkYXRlUGVyc29uYUZpc2ljYShpbmZvQW5hZ3JhZmljaGUub3V0cHV0LCBpbmZvTmFzY2l0YS5vdXRwdXQpXHJcblx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdHRhcCgoKSA9PiB0aGlzLmlzUGVyc29uYUZpc2ljYVZhbGlkLm5leHQodHJ1ZSkpLFxyXG5cdFx0XHRcdG1hcCgocmVzcG9uc2U6IHsgaWQ6IHN0cmluZyB9IHwgbnVsbCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXNQZXJzb25hRmlzaWNhVmFsaWQgPSBpc05vdE51bGwocmVzcG9uc2UpO1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMudG9WYWxpZFBmKGlzUGVyc29uYUZpc2ljYVZhbGlkLCByZXNwb25zZSwgaW5mb0FuYWdyYWZpY2hlLm91dHB1dCwgcHJvdmluY2lhLCBpbmZvTmFzY2l0YSlcclxuXHRcdFx0XHR9KSxcclxuXHRcdFx0XHR0YXAoKHsgaXNWYWxpZCB9KSA9PiB0aGlzLmlzUGVyc29uYUZpc2ljYVZhbGlkLm5leHQoaXNWYWxpZCkpLFxyXG5cdFx0XHRcdHRhcCgoeyBwZXJzb25hIH0pID0+IHRoaXMuaW5mb1BlcnNvbmFGaXNpY2EgPSBwZXJzb25hKSxcclxuXHRcdFx0XHRtYXAodiA9PiBDb21wb25lbnRPdXRwdXRTdGF0dXMub2Yodi5pc1ZhbGlkLCB2LnBlcnNvbmEpKSxcclxuXHRcdFx0XHRjYXRjaEVycm9yKF8gPT4gb2YoQ29tcG9uZW50T3V0cHV0U3RhdHVzLm9mKGZhbHNlLCBFTVBUWV9QRikpKVxyXG5cdFx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB0b1ZhbGlkUGYoXHJcblx0XHRpc1BlcnNvbmFGaXNpY2FWYWxpZDogYm9vbGVhbiwgcmVzcG9uc2U6IHsgaWQ6IHN0cmluZzsgfSwgaW5mb0FuYWdyYWZpY2hlOiBJbmZvQW5hZ3JhZmljaGVQRkRUTywgXHJcblx0XHRwcm92aW5jaWE6IFByb3ZpbmNpYUVzdGVzYURUTywgXHJcblx0XHRpbmZvTmFzY2l0YTogQ29tcG9uZW50T3V0cHV0U3RhdHVzPEluZm9OYXNjaXRhUEZEVE8+KTogeyBpc1ZhbGlkOiBib29sZWFuOyBwZXJzb25hOiBQZXJzb25hRmlzaWNhRFRPOyB9IHtcclxuXHRcdFxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aXNWYWxpZDogaXNQZXJzb25hRmlzaWNhVmFsaWQsXHJcblx0XHRcdHBlcnNvbmE6IHtcclxuXHRcdFx0XHRpZDogcmVzcG9uc2U/LmlkLFxyXG5cdFx0XHRcdGluZm9BbmFncmFmaWNoZToge1xyXG5cdFx0XHRcdFx0Y29kRmlzY2FsZTogU3RyaW5nKGluZm9BbmFncmFmaWNoZS5jb2RGaXNjYWxlKSxcclxuXHRcdFx0XHRcdGNvZGljZVJlZ2lvbmU6IFN0cmluZyhwcm92aW5jaWE/LnNpZ2xhUmVnKSxcclxuXHRcdFx0XHRcdGNvZ25vbWU6IFN0cmluZyhpbmZvQW5hZ3JhZmljaGUuY29nbm9tZSksXHJcblx0XHRcdFx0XHRub21lOiBTdHJpbmcoaW5mb0FuYWdyYWZpY2hlLm5vbWUpXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRpbmZvTmFzY2l0YToge1xyXG5cdFx0XHRcdFx0Y29tdW5lTmFzY2l0YTogaW5mb05hc2NpdGE/Lm91dHB1dD8uY29tdW5lTmFzY2l0YSA/IFN0cmluZyhpbmZvTmFzY2l0YS5vdXRwdXQuY29tdW5lTmFzY2l0YSkgOiBudWxsLFxyXG5cdFx0XHRcdFx0ZGF0YU5hc2NpdGE6IGluZm9OYXNjaXRhLm91dHB1dC5kYXRhTmFzY2l0YSxcclxuXHRcdFx0XHRcdHByb3ZpbmNpYU5hc2NpdGE6IFN0cmluZyhpbmZvTmFzY2l0YS5vdXRwdXQucHJvdmluY2lhTmFzY2l0YSksXHJcblx0XHRcdFx0XHRuYXppb25lTmFzY2l0YTogU3RyaW5nKGluZm9OYXNjaXRhLm91dHB1dC5uYXppb25lTmFzY2l0YSksXHJcblx0XHRcdFx0XHRjb2RDYXROYXppb25lTmFzY2l0YTogU3RyaW5nKGluZm9OYXNjaXRhLm91dHB1dC5jb2RDYXROYXppb25lTmFzY2l0YSksXHJcblx0XHRcdFx0XHRpc05hdG9Fc3Rlcm86IGluZm9OYXNjaXRhLm91dHB1dD8uaXNOYXRvRXN0ZXJvID8gaW5mb05hc2NpdGEub3V0cHV0LmlzTmF0b0VzdGVybyA6IGZhbHNlXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGFzIFBlcnNvbmFGaXNpY2FEVE9cclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHR2YWxpZGF0ZVBlcnNvbmFGaXNpY2EoXHJcblx0XHRpbmZvQW5hZ3JhZmljaGU6IEluZm9BbmFncmFmaWNoZVBGRFRPLFxyXG5cdFx0aW5mb05hc2NpdGE6IEluZm9OYXNjaXRhUEZEVE9cclxuXHQpIHtcclxuXHJcblx0XHQvLyB2YXIgZCA9IG5ldyBEYXRlKGluZm9OYXNjaXRhLmRhdGFOYXNjaXRhKTtcclxuXHRcdC8vIGQudG9Mb2NhbGVTdHJpbmcoJ2l0LUlUJywgeyB0aW1lWm9uZTogSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lIH0pXHJcblx0XHRyZXR1cm4gdGhpcy5kZWxlZ2hlU2VydmljZS5nZXRWYWxpZGFQZXJzb25hRmlzaWNhKFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0Y29kaWNlRmlzY2FsZTogaW5mb0FuYWdyYWZpY2hlLmNvZEZpc2NhbGVcclxuXHRcdFx0XHQsIGNvZ25vbWU6IGluZm9BbmFncmFmaWNoZS5jb2dub21lXHJcblx0XHRcdFx0LCBjb211bmU6IGluZm9OYXNjaXRhPy5pc05hdG9Fc3Rlcm8gPyBudWxsIDogaW5mb05hc2NpdGE/LmNvbXVuZU5hc2NpdGFcclxuXHRcdFx0XHQvLyAsIGRhdGFOYXNjaXRhOiBuZXcgRGF0ZShtb21lbnQoaW5mb05hc2NpdGEuZGF0YU5hc2NpdGEsICdERC9NTS9ZWVlZJykuYWRkKDIzLCAnaG91cicpLmFkZCg1OSwgJ21pbnV0ZScpLmFkZCg1OSwgJ3NlY29uZCcpLnRvRGF0ZSgpKVxyXG5cdFx0XHRcdCwgZGF0YU5hc2NpdGE6IG5ldyBEYXRlKGluZm9OYXNjaXRhLmRhdGFOYXNjaXRhKS50b0lTT1N0cmluZygpXHJcblx0XHRcdFx0LCBub21lOiBpbmZvQW5hZ3JhZmljaGUubm9tZVxyXG5cdFx0XHRcdCwgcHJvdmluY2lhTmFzY2l0YTogaW5mb05hc2NpdGEucHJvdmluY2lhTmFzY2l0YVxyXG5cdFx0XHRcdCwgc2lnbGFOYXppb25lOiBpbmZvTmFzY2l0YS5uYXppb25lTmFzY2l0YVxyXG5cdFx0XHRcdCwgY29kQ2F0TmF6aW9uZU5hc2NpdGE6IGluZm9OYXNjaXRhPy5jb2RDYXROYXppb25lTmFzY2l0YVxyXG5cdFx0XHR9IGFzIERhdGlWZXJpZmljYUNmRFRPXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0aW5pdFBlcnNvbmFGaXNpY2EoKSB7XHJcblx0XHR0aGlzLmluZm9QZXJzb25hRmlzaWNhID0gbmV3IFBlcnNvbmFGaXNpY2FEVE8oKTtcclxuXHR9XHJcblxyXG5cdGluZm9QZlJlYWR5KGluRm9QZlN0YXR1czogQ29tcG9uZW50T3V0cHV0U3RhdHVzPEluZm9BbmFncmFmaWNoZVBGRFRPPikge1xyXG5cdFx0Ly8gY29uc29sZS5sb2coXCJbaW5mb1BmUmVhZHldXCIsIGluRm9QZlN0YXR1cyk7XHJcblxyXG5cdFx0dGhpcy5jaGFuZ2VzUEYkLm5leHQoaW5Gb1BmU3RhdHVzKTtcclxuXHR9XHJcblxyXG5cdGluZm9OYXNjaXRhUmVhZHkoaW5mb05hc2NpdGFQZjogQ29tcG9uZW50T3V0cHV0U3RhdHVzPEluZm9OYXNjaXRhUEZEVE8+KSB7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhcIltpbmZvTmFzY2l0YVJlYWR5XVwiLCBpbmZvTmFzY2l0YVBmKTtcclxuXHJcblx0XHR0aGlzLmNoYW5nZXNOYXNjaXRhJC5uZXh0KGluZm9OYXNjaXRhUGYpO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHR0aGlzLnBlcnNvbmFGaXNpY2FDaGFuZ2VkU3ViLnVuc3Vic2NyaWJlKCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgcmVzZXRGb3JtKCkge1xyXG5cdFx0dGhpcy5pbmZvUEYuX3Jlc2V0Rm9ybSgpO1xyXG5cdFx0dGhpcy5pbmZvTmFzY2l0YS5fcmVzZXRGb3JtKCk7XHJcblx0fVxyXG5cclxuXHJcbn1cclxuIl19