@infordata-web/portal-common-component-lib
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.14.
98 lines • 27.1 kB
JavaScript
import { Component, EventEmitter, Input, Output } from "@angular/core";
import { FormControl, FormGroup, Validators } from "@angular/forms";
import { getErrorMessage } from '../../utils/validators-messages.utils';
import { ibanValidator } from "ngx-iban";
export class BonificoSepaComponent {
constructor() {
this.viewSessoPF = false;
this.validateSepaPersonaFisicaEmitter = new EventEmitter();
this.resetEstremiPersonaFisicaSepaFormEmitter = new EventEmitter();
this.bonificoSepaReady = new EventEmitter();
this.personaFisicaEmitter = new EventEmitter();
this.getErrorMessage = getErrorMessage;
this.ibanValidators = [Validators.required, this.sepaCountriesValidator(), ibanValidator(), this.noSpacesValidator()];
this.sepaCountries = [{ "name": "Austria", "code": "AT", "iban": "AT493200056563289974" }, { "name": "Belgium", "code": "BE", "iban": "BE65561689528896" }, { "name": "Bulgaria", "code": "BG", "iban": "BG92TTBB94006559266188" }, { "name": "Cyprus", "code": "CY", "iban": "CY52665561416772369457864437" }, { "name": "Croatia", "code": "HR", "iban": "HR5523400098663266246" }, { "name": "Denmark", "code": "DK", "iban": "DK2550515918328528" }, { "name": "Estonia", "code": "EE", "iban": "EE591286653867491786" }, { "name": "Finland", "code": "FI", "iban": "FI8479486911788598" }, { "name": "France", "code": "FR", "iban": "FR8514508000707239488738J21" }, { "name": "Germany", "code": "DE", "iban": "DE14500105174185484177" }, { "name": "Greece", "code": "GR", "iban": "GR9201494491588141549531799" }, { "name": "Ireland", "code": "IE", "iban": "IE29AIBK93115212345678" }, { "name": "Italy", "code": "IT", "iban": "IT77R0300203280648419668253" }, { "name": "Latvia", "code": "LV", "iban": "LV80BANK0000435195001" }, { "name": "Lithuania", "code": "LT", "iban": "LT275168179993645428" }, { "name": "Luxembourg", "code": "LU", "iban": "LU350106814331716425" }, { "name": "Malta", "code": "MT", "iban": "MT54WLCI12377529685589454747835" }, { "name": "Netherlands", "code": "NL", "iban": "NL13INGB6755037397" }, { "name": "Poland", "code": "PL", "iban": "PL06109024023962236263666664" }, { "name": "Portugal", "code": "PT", "iban": "PT26003506516995234369482" }, { "name": "Czech Republic", "code": "CZ", "iban": "CZ1350515343291243261222" }, { "name": "Romania", "code": "RO", "iban": "RO64RZBR2335521926768262" }, { "name": "Slovakia", "code": "SK", "iban": "SK6053419589142643828262" }, { "name": "Slovenia", "code": "SI", "iban": "SI97975426678332786" }, { "name": "Spain", "code": "ES", "iban": "ES7231904977492569944158" }, { "name": "Sweden", "code": "SE", "iban": "SE4949996195749755572136" }, { "name": "Hungary", "code": "HU", "iban": "HU42117730161111101800000000" }, { "name": "Norway", "code": "NO", "iban": "NO9386011117947" }, { "name": "Liechtenstein", "code": "LI", "iban": "LI7008800683146527484" }, { "name": "Iceland", "code": "IS", "iban": "IS140159260076545510730339" }, { "name": "Switzerland", "code": "CH", "iban": "CH4789144623328263139" }, { "name": "United Kingdom", "code": "GB", "iban": "GB09BARC20040416289669" }, { "name": "Monaco", "code": "MC", "iban": "MC2112739000407179846124F08" }, { "name": "Andorra", "code": "AD", "iban": "AD5127638574262995775744" }, { "name": "San Marino", "code": "SM", "iban": "SM86U0322509800000000270100" }, { "name": "Holy See (Vatican City State)", "code": "VA", "iban": "VA59001123000012345678" }];
// this.initSepaForm();
}
ngOnInit() {
this.initSepaForm();
this.sepaForm.valueChanges.subscribe(() => {
// if (this.sepaForm.valid) {
const bonificoSepa = {
iban: this.sepaForm.get('iban').value,
delegato: this.sepaForm.get('existsDelegatoRiscossione').value,
delegatoRiscossione: this.sepaForm.get('existsDelegatoRiscossione').value ? this.delegato : null,
};
const isFormValid = this.sepaForm.valid;
const isFormDelegatoValid = this.sepaForm.get('existsDelegatoRiscossione').value === true ? this.isDelegatoValid : true;
const isValid = isFormValid && isFormDelegatoValid;
this.bonificoSepaReady.emit({ bonifico: bonificoSepa, isValid });
//}
});
}
initSepaForm() {
var _a;
this.sepaForm = new FormGroup({
existsDelegatoRiscossione: new FormControl(this.bonificoSepa != null ? this.bonificoSepa.delegato : false, [Validators.required]),
iban: new FormControl((_a = this.bonificoSepa) === null || _a === void 0 ? void 0 : _a.iban, this.ibanValidators),
});
}
onValidateSepaPersonaFisica() {
this.validateSepaPersonaFisicaEmitter.emit();
}
onExistsDelegatoRiscossioneChange(tipo) {
if (!tipo.value) {
this.resetEstremiPersonaFisicaSepaFormEmitter.emit();
}
}
sepaCountriesValidator() {
return (form) => {
const iban = form.value;
if (!iban || (iban === null || iban === void 0 ? void 0 : iban.length) < 2) {
return null;
}
const countryCode = iban.substring(0, 2);
if (!this.sepaCountries.some((element) => element.code === countryCode)) {
return { ibanExtraSepa: true };
}
return null;
};
}
onDelegatoRiscossioneReady(event) {
this.delegato = event.persona;
this.isDelegatoValid = event.isValid;
this.personaFisicaEmitter.emit({ persona: event.persona, isValid: event.isValid });
}
convertToUppercase(value) {
this.sepaForm.get('iban').setValue(value.toUpperCase());
}
noSpacesValidator() {
return (control) => {
const hasSpaces = /\s/.test(control.value);
return hasSpaces ? { spacesIban: true } : null;
};
}
}
BonificoSepaComponent.decorators = [
{ type: Component, args: [{
selector: "lib-bonifico-sepa",
template: "<form [formGroup]=\"sepaForm\" [ngxsForm]=\"sepaFormPath\">\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-md-8\">\r\n\t\t\t<label id=\"existsDelegatoRiscossioneLabel\">{{ \"exists-delegato-riscossione\" | traduzione }}</label>\r\n\t\t\t<mat-radio-group class=\"radio-group\" aria-labelledby=\"existsDelegatoRiscossioneLabel\"\r\n\t\t\t\t\t\t\t\t\t\t\t formControlName=\"existsDelegatoRiscossione\"\r\n\t\t\t\t\t\t\t\t\t\t\t (change)=\"onExistsDelegatoRiscossioneChange($event)\">\r\n\t\t\t\t<mat-radio-button class=\"radio-button pl-2\" [value]=\"true\">\r\n\t\t\t\t\t{{ \"si\" | traduzione }}\r\n\t\t\t\t</mat-radio-button>\r\n\t\t\t\t<mat-radio-button class=\"radio-button pl-2\" [value]=\"false\">\r\n\t\t\t\t\t{{ \"no\" | traduzione }}\r\n\t\t\t\t</mat-radio-button>\r\n\t\t\t</mat-radio-group>\r\n\t\t\t<br/>\r\n\t\t\t<mat-hint *infoTip=\"'exists-delegato-riscossione'\"></mat-hint>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div *ngIf=\"sepaForm.controls['existsDelegatoRiscossione'].value\" class=\"row mt-3\">\r\n\t\t<div class=\"col-12\">\r\n\t\t\t<div class=\"row mt-4\">\r\n\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t<lib-estremi-persona-fisica [ngxsFormPath]=\"estremiPFSepaFormPath\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[province]=\"province\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[nazioni]=\"nazioni\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[isPersonaFisicaValid]=\"isPersonaFisicaSepaValid\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[personaFisica]=\"bonificoSepa?.delegatoRiscossione\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[viewSessoPF]=\"viewSessoPF\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(validatePersonaFisicaEmitter)=\"onValidateSepaPersonaFisica()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(personaFisicaEmitter)=\"onDelegatoRiscossioneReady($event)\">\r\n\t\t\t\t\t</lib-estremi-persona-fisica>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<lib-dati-residenza [validateAndGetResidenza]=\"validateAndGetResidenza\"></lib-dati-residenza>\r\n\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"row my-4 mt-4\">\r\n\t\t<div class=\"col-md-4\">\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<input matInput placeholder=\"{{ 'required' | traduzione }}{{ 'codice-iban' | traduzione }}\"\r\n\t\t\t\t\tformControlName=\"iban\"\r\n\t\t\t\t\t(input)=\"convertToUppercase($event.target.value)\"/>\r\n\t\t\t\t<mat-error *ngIf=\"sepaForm.controls['iban'].invalid\">\r\n\t\t\t\t\t{{ getErrorMessage(sepaForm.controls['iban']) | traduzione }}\r\n\t\t\t\t</mat-error>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\t</div>\r\n</form>\r\n",
styles: [""]
},] }
];
BonificoSepaComponent.ctorParameters = () => [];
BonificoSepaComponent.propDecorators = {
bonificoSepa: [{ type: Input }],
nazioni: [{ type: Input }],
province: [{ type: Input }],
isPersonaFisicaSepaValid: [{ type: Input }],
sepaFormPath: [{ type: Input }],
estremiPFSepaFormPath: [{ type: Input }],
viewSessoPF: [{ type: Input }],
validateAndGetResidenza: [{ type: Input }],
validateSepaPersonaFisicaEmitter: [{ type: Output }],
resetEstremiPersonaFisicaSepaFormEmitter: [{ type: Output }],
bonificoSepaReady: [{ type: Output }],
personaFisicaEmitter: [{ type: Output }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9uaWZpY28tc2VwYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiRDovUHJvZ2V0dGkvREFHL3NvcmdlbnRpL2dpdGxhYi10ZXJuaS9jb21tb24tY29tcG9uZW50LWxpYi9wcm9qZWN0cy9wb3J0YWwtY29tbW9uLWNvbXBvbmVudC1saWIvc3JjLyIsInNvdXJjZXMiOlsibGliL21vZGFsaXRhLXBhZ2FtZW50by9jb21wb25lbnRzL2JvbmlmaWNvLXNlcGEvYm9uaWZpY28tc2VwYS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQWtCLFdBQVcsRUFBRSxTQUFTLEVBQWUsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEcsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBRXRFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFRdkMsTUFBTSxPQUFPLHFCQUFxQjtJQWtEakM7UUE3QkEsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFNN0IscUNBQWdDLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUc1RCw2Q0FBd0MsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBR3BFLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFxRCxDQUFDO1FBRzFGLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUF5RCxDQUFDO1FBSWpHLG9CQUFlLEdBQUcsZUFBZSxDQUFDO1FBRWxDLG1CQUFjLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFFakgsa0JBQWEsR0FBRyxDQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxzQkFBc0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxrQkFBa0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyx3QkFBd0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyw4QkFBOEIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyx1QkFBdUIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxvQkFBb0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxzQkFBc0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxvQkFBb0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyw2QkFBNkIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyx3QkFBd0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyw2QkFBNkIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyx3QkFBd0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyw2QkFBNkIsRUFB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LEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQWE7UUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxpQkFBaUI7UUFDaEIsT0FBTyxDQUFDLE9BQXdCLEVBQWlDLEVBQUU7WUFDbEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEQsQ0FBQyxDQUFDO0lBQ0gsQ0FBQzs7O1lBL0hELFNBQVMsU0FBQztnQkFDVixRQUFRLEVBQUUsbUJBQW1CO2dCQUM3QixxL0VBQTZDOzthQUU3Qzs7OzsyQkFHQyxLQUFLO3NCQUdMLEtBQUs7dUJBR0wsS0FBSzt1Q0FHTCxLQUFLOzJCQUdMLEtBQUs7b0NBR0wsS0FBSzswQkFHTCxLQUFLO3NDQUdMLEtBQUs7K0NBR0wsTUFBTTt1REFHTixNQUFNO2dDQUdOLE1BQU07bUNBR04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHtnZXRFcnJvck1lc3NhZ2V9IGZyb20gJy4uLy4uL3V0aWxzL3ZhbGlkYXRvcnMtbWVzc2FnZXMudXRpbHMnO1xyXG5pbXBvcnQge0RhdGlQZXJzb25hRmlzaWNhTW9kZWwsIExvY2FsaXRhTW9kZWwsIE5hemlvbmVNb2RlbCwgVmVyaWZpY2FQZlJlc3BvbnNlRFRPfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2VzdHJlbWktcGVyc29uYS1maXNpY2EubW9kZWxcIjtcclxuaW1wb3J0IHtpYmFuVmFsaWRhdG9yfSBmcm9tIFwibmd4LWliYW5cIjtcclxuaW1wb3J0IHtCb25pZmljb1NlcGFNb2RlbH0gZnJvbSBcIi4uLy4uL21vZGVscy9ib25pZmljby1zZXBhLm1vZGVsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogXCJsaWItYm9uaWZpY28tc2VwYVwiLFxyXG5cdHRlbXBsYXRlVXJsOiBcIi4vYm9uaWZpY28tc2VwYS5jb21wb25lbnQuaHRtbFwiLFxyXG5cdHN0eWxlVXJsczogW1wiLi9ib25pZmljby1zZXBhLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQm9uaWZpY29TZXBhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblx0QElucHV0KClcclxuXHRib25pZmljb1NlcGE6IEJvbmlmaWNvU2VwYU1vZGVsO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdG5hemlvbmk6IE5hemlvbmVNb2RlbFtdO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdHByb3ZpbmNlOiBMb2NhbGl0YU1vZGVsW107XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0aXNQZXJzb25hRmlzaWNhU2VwYVZhbGlkOiBib29sZWFuO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdHNlcGFGb3JtUGF0aDogc3RyaW5nO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdGVzdHJlbWlQRlNlcGFGb3JtUGF0aDogc3RyaW5nO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdHZpZXdTZXNzb1BGOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0dmFsaWRhdGVBbmRHZXRSZXNpZGVuemE6IFZlcmlmaWNhUGZSZXNwb25zZURUTztcclxuXHJcblx0QE91dHB1dCgpXHJcblx0dmFsaWRhdGVTZXBhUGVyc29uYUZpc2ljYUVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdHJlc2V0RXN0cmVtaVBlcnNvbmFGaXNpY2FTZXBhRm9ybUVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdGJvbmlmaWNvU2VwYVJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGJvbmlmaWNvOiBCb25pZmljb1NlcGFNb2RlbCwgaXNWYWxpZDogYm9vbGVhbiB9PigpO1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHRwZXJzb25hRmlzaWNhRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8eyBwZXJzb25hOiBEYXRpUGVyc29uYUZpc2ljYU1vZGVsLCBpc1ZhbGlkOiBib29sZWFuIH0+KCk7XHJcblxyXG5cdHNlcGFGb3JtOiBGb3JtR3JvdXA7XHJcblxyXG5cdGdldEVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZTtcclxuXHJcblx0aWJhblZhbGlkYXRvcnMgPSBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgdGhpcy5zZXBhQ291bnRyaWVzVmFsaWRhdG9yKCksIGliYW5WYWxpZGF0b3IoKSwgdGhpcy5ub1NwYWNlc1ZhbGlkYXRvcigpXTtcclxuXHJcblx0c2VwYUNvdW50cmllcyA9IFt7XCJuYW1lXCI6XCJBdXN0cmlhXCIsXCJjb2RlXCI6XCJBVFwiLFwiaWJhblwiOlwiQVQ0OTMyMDAwNTY1NjMyODk5NzRcIn0se1wibmFtZVwiOlwiQmVsZ2l1bVwiLFwiY29kZVwiOlwiQkVcIixcImliYW5cIjpcIkJFNjU1NjE2ODk1Mjg4OTZcIn0se1wibmFtZVwiOlwiQnVsZ2FyaWFcIixcImNvZGVcIjpcIkJHXCIsXCJpYmFuXCI6XCJCRzkyVFRCQjk0MDA2NTU5MjY2MTg4XCJ9LHtcIm5hbWVcIjpcIkN5cHJ1c1wiLFwiY29kZVwiOlwiQ1lcIixcImliYW5cIjpcIkNZNTI2NjU1NjE0MTY3NzIzNjk0NTc4NjQ0MzdcIn0se1wibmFtZVwiOlwiQ3JvYXRpYVwiLFwiY29kZVwiOlwiSFJcIixcImliYW5cIjpcIkhSNTUyMzQwMDA5ODY2MzI2NjI0NlwifSx7XCJuYW1lXCI6XCJEZW5tYXJrXCIsXCJjb2RlXCI6XCJES1wiLFwiaWJhblwiOlwiREsyNTUwNTE1OTE4MzI4NTI4XCJ9LHtcIm5hbWVcIjpcIkVzdG9uaWFcIixcImNvZGVcIjpcIkVFXCIsXCJpYmFuXCI6XCJFRTU5MTI4NjY1Mzg2NzQ5MTc4NlwifSx7XCJuYW1lXCI6XCJGaW5sYW5kXCIsXCJjb2RlXCI6XCJGSVwiLFwiaWJhblwiOlwiRkk4NDc5NDg2OTExNzg4NTk4XCJ9LHtcIm5hbWVcIjpcIkZyYW5jZVwiLFwiY29kZVwiOlwiRlJcIixcImliYW5cIjpcIkZSODUxNDUwODAwMDcwNzIzOTQ4ODczOEoyMVwifSx7XCJuYW1lXCI6XCJHZXJtYW55XCIsXCJjb2RlXCI6XCJERVwiLFwiaWJhblwiOlwiREUxNDUwMDEwNTE3NDE4NTQ4NDE3N1wifSx7XCJuYW1lXCI6XCJHcmVlY2VcIixcImNvZGVcIjpcIkdSXCIsXCJpYmFuXCI6XCJHUjkyMDE0OTQ0OTE1ODgxNDE1NDk1MzE3OTlcIn0se1wibmFtZVwiOlwiSXJlbGFuZFwiLFwiY29kZVwiOlwiSUVcIixcImliYW5cIjpcIklFMjlBSUJLOTMxMTUyMTIzNDU2NzhcIn0se1wibmFtZVwiOlwiSXRhbHlcIixcImNvZGVcIjpcIklUXCIsXCJpYmFuXCI6XCJJVDc3UjAzMDAyMDMyODA2NDg0MTk2NjgyNTNcIn0se1wibmFtZVwiOlwiTGF0dmlhXCIsXCJjb2RlXCI6XCJMVlwiLFwiaWJhblwiOlwiTFY4MEJBTkswMDAwNDM1MTk1MDAxXCJ9LHtcIm5hbWVcIjpcIkxpdGh1YW5pYVwiLFwiY29kZVwiOlwiTFRcIixcImliYW5cIjpcIkxUMjc1MTY4MTc5OTkzNjQ1NDI4XCJ9LHtcIm5hbWVcIjpcIkx1eGVtYm91cmdcIixcImNvZGVcIjpcIkxVXCIsXCJpYmFuXCI6XCJMVTM1MDEwNjgxNDMzMTcxNjQyNVwifSx7XCJuYW1lXCI6XCJNYWx0YVwiLFwiY29kZVwiOlwiTVRcIixcImliYW5cIjpcIk1UNTRXTENJMTIzNzc1Mjk2ODU1ODk0NTQ3NDc4MzVcIn0se1wibmFtZVwiOlwiTmV0aGVybGFuZHNcIixcImNvZGVcIjpcIk5MXCIsXCJpYmFuXCI6XCJOTDEzSU5HQjY3NTUwMzczOTdcIn0se1wibmFtZVwiOlwiUG9sYW5kXCIsXCJjb2RlXCI6XCJQTFwiLFwiaWJhblwiOlwiUEwwNjEwOTAyNDAyMzk2MjIzNjI2MzY2NjY2NFwifSx7XCJuYW1lXCI6XCJQb3J0dWdhbFwiLFwiY29kZVwiOlwiUFRcIixcImliYW5cIjpcIlBUMjYwMDM1MDY1MTY5OTUyMzQzNjk0ODJcIn0se1wibmFtZVwiOlwiQ3plY2ggUmVwdWJsaWNcIixcImNvZGVcIjpcIkNaXCIsXCJpYmFuXCI6XCJDWjEzNTA1MTUzNDMyOTEyNDMyNjEyMjJcIn0se1wibmFtZVwiOlwiUm9tYW5pYVwiLFwiY29kZVwiOlwiUk9cIixcImliYW5cIjpcIlJPNjRSWkJSMjMzNTUyMTkyNjc2ODI2MlwifSx7XCJuYW1lXCI6XCJTbG92YWtpYVwiLFwiY29kZVwiOlwiU0tcIixcImliYW5cIjpcIlNLNjA1MzQxOTU4OTE0MjY0MzgyODI2MlwifSx7XCJuYW1lXCI6XCJTbG92ZW5pYVwiLFwiY29kZVwiOlwiU0lcIixcImliYW5cIjpcIlNJOTc5NzU0MjY2NzgzMzI3ODZcIn0se1wibmFtZVwiOlwiU3BhaW5cIixcImNvZGVcIjpcIkVTXCIsXCJpYmFuXCI6XCJFUzcyMzE5MDQ5Nzc0OTI1Njk5NDQxNThcIn0se1wibmFtZVwiOlwiU3dlZGVuXCIsXCJjb2RlXCI6XCJTRVwiLFwiaWJhblwiOlwiU0U0OTQ5OTk2MTk1NzQ5NzU1NTcyMTM2XCJ9LHtcIm5hbWVcIjpcIkh1bmdhcnlcIixcImNvZGVcIjpcIkhVXCIsXCJpYmFuXCI6XCJIVTQyMTE3NzMwMTYxMTExMTAxODAwMDAwMDAwXCJ9LHtcIm5hbWVcIjpcIk5vcndheVwiLFwiY29kZVwiOlwiTk9cIixcImliYW5cIjpcIk5POTM4NjAxMTExNzk0N1wifSx7XCJuYW1lXCI6XCJMaWVjaHRlbnN0ZWluXCIsXCJjb2RlXCI6XCJMSVwiLFwiaWJhblwiOlwiTEk3MDA4ODAwNjgzMTQ2NTI3NDg0XCJ9LHtcIm5hbWVcIjpcIkljZWxhbmRcIixcImNvZGVcIjpcIklTXCIsXCJpYmFuXCI6XCJJUzE0MDE1OTI2MDA3NjU0NTUxMDczMDMzOVwifSx7XCJuYW1lXCI6XCJTd2l0emVybGFuZFwiLFwiY29kZVwiOlwiQ0hcIixcImliYW5cIjpcIkNINDc4OTE0NDYyMzMyODI2MzEzOVwifSx7XCJuYW1lXCI6XCJVbml0ZWQgS2luZ2RvbVwiLFwiY29kZVwiOlwiR0JcIixcImliYW5cIjpcIkdCMDlCQVJDMjAwNDA0MTYyODk2NjlcIn0se1wibmFtZVwiOlwiTW9uYWNvXCIsXCJjb2RlXCI6XCJNQ1wiLFwiaWJhblwiOlwiTUMyMTEyNzM5MDAwNDA3MTc5ODQ2MTI0RjA4XCJ9LHtcIm5hbWVcIjpcIkFuZG9ycmFcIixcImNvZGVcIjpcIkFEXCIsXCJpYmFuXCI6XCJBRDUxMjc2Mzg1NzQyNjI5OTU3NzU3NDRcIn0se1wibmFtZVwiOlwiU2FuIE1hcmlub1wiLFwiY29kZVwiOlwiU01cIixcImliYW5cIjpcIlNNODZVMDMyMjUwOTgwMDAwMDAwMDI3MDEwMFwifSx7XCJuYW1lXCI6XCJIb2x5IFNlZSAoVmF0aWNhbiBDaXR5IFN0YXRlKVwiLFwiY29kZVwiOlwiVkFcIixcImliYW5cIjpcIlZBNTkwMDExMjMwMDAwMTIzNDU2NzhcIn1dO1xyXG5cclxuXHRkZWxlZ2F0bzogRGF0aVBlcnNvbmFGaXNpY2FNb2RlbDtcclxuXHJcblx0aXNEZWxlZ2F0b1ZhbGlkOiBib29sZWFuO1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdC8vIHRoaXMuaW5pdFNlcGFGb3JtKCk7XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuaW5pdFNlcGFGb3JtKCk7XHJcblxyXG5cdFx0dGhpcy5zZXBhRm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgLy8gaWYgKHRoaXMuc2VwYUZvcm0udmFsaWQpIHtcclxuICAgICAgICBjb25zdCBib25pZmljb1NlcGE6IEJvbmlmaWNvU2VwYU1vZGVsID0ge1xyXG5cdFx0XHRcdFx0aWJhbjogdGhpcy5zZXBhRm9ybS5nZXQoJ2liYW4nKS52YWx1ZSxcclxuXHRcdFx0XHRcdGRlbGVnYXRvOiB0aGlzLnNlcGFGb3JtLmdldCgnZXhpc3RzRGVsZWdhdG9SaXNjb3NzaW9uZScpLnZhbHVlLFxyXG5cdFx0XHRcdFx0ZGVsZWdhdG9SaXNjb3NzaW9uZTogdGhpcy5zZXBhRm9ybS5nZXQoJ2V4aXN0c0RlbGVnYXRvUmlzY29zc2lvbmUnKS52YWx1ZSA/IHRoaXMuZGVsZWdhdG8gOiBudWxsLFxyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdGNvbnN0IGlzRm9ybVZhbGlkID0gdGhpcy5zZXBhRm9ybS52YWxpZDtcclxuXHRcdFx0XHRjb25zdCBpc0Zvcm1EZWxlZ2F0b1ZhbGlkID0gdGhpcy5zZXBhRm9ybS5nZXQoJ2V4aXN0c0RlbGVnYXRvUmlzY29zc2lvbmUnKS52YWx1ZSA9PT0gdHJ1ZSA/IHRoaXMuaXNEZWxlZ2F0b1ZhbGlkIDogdHJ1ZTtcclxuICAgICAgICBjb25zdCBpc1ZhbGlkID0gaXNGb3JtVmFsaWQgJiYgaXNGb3JtRGVsZWdhdG9WYWxpZDtcclxuXHJcbiAgICAgICAgdGhpcy5ib25pZmljb1NlcGFSZWFkeS5lbWl0KHsgYm9uaWZpY286IGJvbmlmaWNvU2VwYSwgaXNWYWxpZCB9KTtcclxuICAgICAgIC8vfVxyXG4gICAgfSk7XHJcblx0fVxyXG5cclxuXHRpbml0U2VwYUZvcm0oKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlcGFGb3JtID0gbmV3IEZvcm1Hcm91cCh7XHJcblx0XHRcdGV4aXN0c0RlbGVnYXRvUmlzY29zc2lvbmU6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmJvbmlmaWNvU2VwYSAhPSBudWxsID8gdGhpcy5ib25pZmljb1NlcGEuZGVsZWdhdG8gOiBmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuXHRcdFx0aWJhbjogbmV3IEZvcm1Db250cm9sKHRoaXMuYm9uaWZpY29TZXBhPy5pYmFuLCB0aGlzLmliYW5WYWxpZGF0b3JzKSxcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0b25WYWxpZGF0ZVNlcGFQZXJzb25hRmlzaWNhKCk6IHZvaWQge1xyXG5cdFx0dGhpcy52YWxpZGF0ZVNlcGFQZXJzb25hRmlzaWNhRW1pdHRlci5lbWl0KCk7XHJcblx0fVxyXG5cclxuXHRvbkV4aXN0c0RlbGVnYXRvUmlzY29zc2lvbmVDaGFuZ2UodGlwbyk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aXBvLnZhbHVlKSB7XHJcblx0XHRcdHRoaXMucmVzZXRFc3RyZW1pUGVyc29uYUZpc2ljYVNlcGFGb3JtRW1pdHRlci5lbWl0KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRzZXBhQ291bnRyaWVzVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcclxuXHRcdHJldHVybiAoZm9ybTogQWJzdHJhY3RDb250cm9sKSA9PiB7XHJcblx0XHQgIGNvbnN0IGliYW4gPSBmb3JtLnZhbHVlO1xyXG5cdFx0ICBpZiAoIWliYW4gfHwgaWJhbj8ubGVuZ3RoIDwgMikge1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0ICB9XHJcblxyXG5cdFx0ICBjb25zdCBjb3VudHJ5Q29kZTogc3RyaW5nID0gaWJhbi5zdWJzdHJpbmcoMCwgMik7XHJcblx0XHQgIGlmICghdGhpcy5zZXBhQ291bnRyaWVzLnNvbWUoKGVsZW1lbnQpID0+IGVsZW1lbnQuY29kZSA9PT0gY291bnRyeUNvZGUpKSB7XHJcblx0XHRcdFx0cmV0dXJuIHsgaWJhbkV4dHJhU2VwYTogdHJ1ZSB9O1xyXG5cdFx0ICB9XHJcblxyXG5cdFx0ICByZXR1cm4gbnVsbDtcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRvbkRlbGVnYXRvUmlzY29zc2lvbmVSZWFkeShldmVudDogeyBwZXJzb25hOiBEYXRpUGVyc29uYUZpc2ljYU1vZGVsLCBpc1ZhbGlkOiBib29sZWFuIH0pe1xyXG5cdFx0dGhpcy5kZWxlZ2F0byA9IGV2ZW50LnBlcnNvbmE7XHJcblx0XHR0aGlzLmlzRGVsZWdhdG9WYWxpZCA9IGV2ZW50LmlzVmFsaWQ7XHJcblx0XHR0aGlzLnBlcnNvbmFGaXNpY2FFbWl0dGVyLmVtaXQoeyBwZXJzb25hOiBldmVudC5wZXJzb25hLCBpc1ZhbGlkOiBldmVudC5pc1ZhbGlkIH0pO1xyXG5cdH1cclxuXHJcblx0Y29udmVydFRvVXBwZXJjYXNlKHZhbHVlOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMuc2VwYUZvcm0uZ2V0KCdpYmFuJykuc2V0VmFsdWUodmFsdWUudG9VcHBlckNhc2UoKSk7XHJcblx0fVxyXG5cclxuXHRub1NwYWNlc1ZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XHJcblx0XHRyZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuXHRcdFx0Y29uc3QgaGFzU3BhY2VzID0gL1xccy8udGVzdChjb250cm9sLnZhbHVlKTtcclxuXHRcdFx0cmV0dXJuIGhhc1NwYWNlcyA/IHsgc3BhY2VzSWJhbjogdHJ1ZSB9IDogbnVsbDtcclxuXHRcdH07XHJcblx0fVxyXG5cclxufVxyXG4iXX0=