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.

143 lines 34.9 kB
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"; import { ModalitaPagamentoService } from "../../services/modalita-pagamento.service"; import { take } from "rxjs/operators"; export class BonificoSepaComponent { constructor(modalitaPagamentoService) { this.modalitaPagamentoService = modalitaPagamentoService; this.viewSessoPF = false; this.validateSepaPersonaFisicaEmitter = new EventEmitter(); this.resetEstremiPersonaFisicaSepaFormEmitter = new EventEmitter(); this.bonificoSepaReady = new EventEmitter(); this.personaFisicaEmitter = new EventEmitter(); this.setComuni = new EventEmitter(); this.getCapOptions = new EventEmitter(); this.resetIndirizzoForm = new EventEmitter(); this.indirizzoEmitter = 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, indirizzoDelegato: this.sepaForm.get('existsDelegatoRiscossione').value === true ? this.indirizzo : null }; const isFormValid = this.sepaForm.valid; const isFormDelegatoValid = this.sepaForm.get('existsDelegatoRiscossione').value === true ? this.isDelegatoValid && this.isIndirizzoValid : 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(); this.resetIndirizzoForm.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; }; } 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([]); } } onIndirizzoReady(event) { this.indirizzo = event.indirizzo; this.isIndirizzoValid = event.isValid; this.indirizzoEmitter.emit({ indirizzo: event.indirizzo, isValid: event.isValid }); } 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); } } BonificoSepaComponent.decorators = [ { type: Component, args: [{ selector: "lib-bonifico-sepa", template: "<form [formGroup]=\"sepaForm\" [ngxsForm]=\"sepaFormPath\">\r\n\t<div class=\"row\" *ngIf=\"viewDelegato\">\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\t\t<lib-indirizzo-pagamento [ngxsFormPath]=\"indirizzoVagliaFormPath\"\r\n\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 [province]=\"province\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t [comuni]=\"comuni\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t [capOptions]=\"capOptions\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t [indirizzo]=\"bonificoSepa?.indirizzoDelegato\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t (selectedProvinciaEmitter)=\"getComuni($event)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t (selectedComuneEmitter)=\"getCap($event)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t (indirizzoEmitter)=\"onIndirizzoReady($event)\">\r\n\t\t\t</lib-indirizzo-pagamento>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"row\" [ngClass]=\"viewDelegato ? 'mt-4': null\">\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\t\t\t formControlName=\"iban\"\r\n\t\t\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 = () => [ { type: ModalitaPagamentoService } ]; BonificoSepaComponent.propDecorators = { viewDelegato: [{ type: Input }], bonificoSepa: [{ type: Input }], nazioni: [{ type: Input }], province: [{ type: Input }], comuni: [{ type: Input }], capOptions: [{ type: Input }], isPersonaFisicaSepaValid: [{ type: Input }], sepaFormPath: [{ type: Input }], estremiPFSepaFormPath: [{ type: Input }], viewSessoPF: [{ type: Input }], validateAndGetResidenza: [{ type: Input }], indirizzoVagliaFormPath: [{ type: Input }], validateSepaPersonaFisicaEmitter: [{ type: Output }], resetEstremiPersonaFisicaSepaFormEmitter: [{ type: Output }], bonificoSepaReady: [{ type: Output }], personaFisicaEmitter: [{ type: Output }], setComuni: [{ type: Output }], getCapOptions: [{ type: Output }], resetIndirizzoForm: [{ type: Output }], indirizzoEmitter: [{ type: Output }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9uaWZpY28tc2VwYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovUHJvZ2V0dGkvREFHL3NvcmdlbnRpL2dpdGxhYi1zb2Z0d2FyZWZhY3RvcnkvY29tbW9uLWNvbXBvbmVudC1saWIvcHJvamVjdHMvcG9ydGFsLWNvbW1vbi1jb21wb25lbnQtbGliL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9tb2RhbGl0YS1wYWdhbWVudG8vY29tcG9uZW50cy9ib25pZmljby1zZXBhL2JvbmlmaWNvLXNlcGEuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFrQixXQUFXLEVBQUUsU0FBUyxFQUFlLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hHLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUV0RSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRXZDLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQ25GLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQU9wQyxNQUFNLE9BQU8scUJBQXFCO0lBa0ZqQyxZQUFvQix3QkFBa0Q7UUFBbEQsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQXBEdEUsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFTN0IscUNBQWdDLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUc1RCw2Q0FBd0MsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBR3BFLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFxRCxDQUFDO1FBRzFGLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUF5RCxDQUFDO1FBR2pHLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUc5QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFHM0MsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUc5QyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBbUQsQ0FBQztRQUl2RixvQkFBZSxHQUFHLGVBQWUsQ0FBQztRQUVsQyxtQkFBYyxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBRWpILGtCQUFhLEdBQUcsQ0FBQyxFQUFDLE1BQU0sRUFBQyxTQUFTLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsc0JBQXNCLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxTQUFTLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsa0JBQWtCLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsd0JBQXdCLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsOEJBQThCLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxTQUFTLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsdUJBQXVCLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxTQUFTLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsb0JBQW9CLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxTQUFTLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsc0JBQXNCLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxTQUFTLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsb0JBQW9CLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsNkJBQTZCLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxTQUFTLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsd0JBQXdCLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsNkJBQTZCLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxTQUFTLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsd0JBQXdCLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxPQUFPLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsNkJBQTZCLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsdUJBQXVCLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsc0JBQXNCLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxZQUFZLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsc0JBQXNCLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxPQUFPLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsaUNBQWlDLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxhQUFhLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsb0JBQW9CLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsOEJBQThCLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsMkJBQTJCLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQywwQkFBMEIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQywwQkFBMEIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQywwQkFBMEIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxxQkFBcUIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQywwQkFBMEIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQywwQkFBMEIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyw4QkFBOEIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxpQkFBaUIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLGVBQWUsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyx1QkFBdUIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyw0QkFBNEIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyx1QkFBdUIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLGdCQUFnQixFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsTUFBTSxFQUFDLHdCQUF3QixFQUFDLEVBQUMsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsTUFBTSxFQUFDLDZCQUE2QixFQUFDLEVBQUMsRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsTUFBTSxFQUFD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QWUsQ0FBQyxDQUFDO1FBQy9GLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxXQUFXLENBQUMsQ0FBQztJQUM5QyxDQUFDOzs7WUE1TEQsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLG90R0FBNkM7O2FBRTdDOzs7WUFQTyx3QkFBd0I7OzsyQkFVOUIsS0FBSzsyQkFHTCxLQUFLO3NCQUdMLEtBQUs7dUJBR0wsS0FBSztxQkFHTCxLQUFLO3lCQUdMLEtBQUs7dUNBR0wsS0FBSzsyQkFHTCxLQUFLO29DQUdMLEtBQUs7MEJBR0wsS0FBSztzQ0FHTCxLQUFLO3NDQUdMLEtBQUs7K0NBR0wsTUFBTTt1REFHTixNQUFNO2dDQUdOLE1BQU07bUNBR04sTUFBTTt3QkFHTixNQUFNOzRCQUdOLE1BQU07aUNBR04sTUFBTTsrQkFHTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnN9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge2dldEVycm9yTWVzc2FnZX0gZnJvbSAnLi4vLi4vdXRpbHMvdmFsaWRhdG9ycy1tZXNzYWdlcy51dGlscyc7XHJcbmltcG9ydCB7Q29tdW5lTW9kZWwsIERhdGlQZXJzb25hRmlzaWNhTW9kZWwsIEluZGlyaXp6b01vZGVsLCBMb2NhbGl0YU1vZGVsLCBOYXppb25lTW9kZWwsIFZlcmlmaWNhUGZSZXNwb25zZURUT30gZnJvbSBcIi4uLy4uL21vZGVscy9lc3RyZW1pLXBlcnNvbmEtZmlzaWNhLm1vZGVsXCI7XHJcbmltcG9ydCB7aWJhblZhbGlkYXRvcn0gZnJvbSBcIm5neC1pYmFuXCI7XHJcbmltcG9ydCB7Qm9uaWZpY29TZXBhTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHMvYm9uaWZpY28tc2VwYS5tb2RlbFwiO1xyXG5pbXBvcnQge01vZGFsaXRhUGFnYW1lbnRvU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL21vZGFsaXRhLXBhZ2FtZW50by5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7dGFrZX0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogXCJsaWItYm9uaWZpY28tc2VwYVwiLFxyXG5cdHRlbXBsYXRlVXJsOiBcIi4vYm9uaWZpY28tc2VwYS5jb21wb25lbnQuaHRtbFwiLFxyXG5cdHN0eWxlVXJsczogW1wiLi9ib25pZmljby1zZXBhLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQm9uaWZpY29TZXBhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblx0QElucHV0KClcclxuXHR2aWV3RGVsZWdhdG86IGJvb2xlYW47XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0Ym9uaWZpY29TZXBhOiBCb25pZmljb1NlcGFNb2RlbDtcclxuXHJcblx0QElucHV0KClcclxuXHRuYXppb25pOiBOYXppb25lTW9kZWxbXTtcclxuXHJcblx0QElucHV0KClcclxuXHRwcm92aW5jZTogTG9jYWxpdGFNb2RlbFtdO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdGNvbXVuaTogQ29tdW5lTW9kZWxbXTtcclxuXHJcblx0QElucHV0KClcclxuXHRjYXBPcHRpb25zOiBzdHJpbmdbXTtcclxuXHJcblx0QElucHV0KClcclxuXHRpc1BlcnNvbmFGaXNpY2FTZXBhVmFsaWQ6IGJvb2xlYW47XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0c2VwYUZvcm1QYXRoOiBzdHJpbmc7XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0ZXN0cmVtaVBGU2VwYUZvcm1QYXRoOiBzdHJpbmc7XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0dmlld1Nlc3NvUEY6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0QElucHV0KClcclxuXHR2YWxpZGF0ZUFuZEdldFJlc2lkZW56YTogVmVyaWZpY2FQZlJlc3BvbnNlRFRPO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdGluZGlyaXp6b1ZhZ2xpYUZvcm1QYXRoOiBzdHJpbmc7XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdHZhbGlkYXRlU2VwYVBlcnNvbmFGaXNpY2FFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHRyZXNldEVzdHJlbWlQZXJzb25hRmlzaWNhU2VwYUZvcm1FbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHRib25pZmljb1NlcGFSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBib25pZmljbzogQm9uaWZpY29TZXBhTW9kZWwsIGlzVmFsaWQ6IGJvb2xlYW4gfT4oKTtcclxuXHJcblx0QE91dHB1dCgpXHJcblx0cGVyc29uYUZpc2ljYUVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcGVyc29uYTogRGF0aVBlcnNvbmFGaXNpY2FNb2RlbCwgaXNWYWxpZDogYm9vbGVhbiB9PigpO1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHRzZXRDb211bmkgPSBuZXcgRXZlbnRFbWl0dGVyPENvbXVuZU1vZGVsW10+KCk7XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdGdldENhcE9wdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcblx0QE91dHB1dCgpXHJcblx0cmVzZXRJbmRpcml6em9Gb3JtID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHRpbmRpcml6em9FbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjx7IGluZGlyaXp6bzogSW5kaXJpenpvTW9kZWwsIGlzVmFsaWQ6IGJvb2xlYW4gfT4oKTtcclxuXHJcblx0c2VwYUZvcm06IEZvcm1Hcm91cDtcclxuXHJcblx0Z2V0RXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlO1xyXG5cclxuXHRpYmFuVmFsaWRhdG9ycyA9IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCB0aGlzLnNlcGFDb3VudHJpZXNWYWxpZGF0b3IoKSwgaWJhblZhbGlkYXRvcigpLCB0aGlzLm5vU3BhY2VzVmFsaWRhdG9yKCldO1xyXG5cclxuXHRzZXBhQ291bnRyaWVzID0gW3tcIm5hbWVcIjpcIkF1c3RyaWFcIixcImNvZGVcIjpcIkFUXCIsXCJpYmFuXCI6XCJBVDQ5MzIwMDA1NjU2MzI4OTk3NFwifSx7XCJuYW1lXCI6XCJCZWxnaXVtXCIsXCJjb2RlXCI6XCJCRVwiLFwiaWJhblwiOlwiQkU2NTU2MTY4OTUyODg5NlwifSx7XCJuYW1lXCI6XCJCdWxnYXJpYVwiLFwiY29kZVwiOlwiQkdcIixcImliYW5cIjpcIkJHOTJUVEJCOTQwMDY1NTkyNjYxODhcIn0se1wibmFtZVwiOlwiQ3lwcnVzXCIsXCJjb2RlXCI6XCJDWVwiLFwiaWJhblwiOlwiQ1k1MjY2NTU2MTQxNjc3MjM2OTQ1Nzg2NDQzN1wifSx7XCJuYW1lXCI6XCJDcm9hdGlhXCIsXCJjb2RlXCI6XCJIUlwiLFwiaWJhblwiOlwiSFI1NTIzNDAwMDk4NjYzMjY2MjQ2XCJ9LHtcIm5hbWVcIjpcIkRlbm1hcmtcIixcImNvZGVcIjpcIkRLXCIsXCJpYmFuXCI6XCJESzI1NTA1MTU5MTgzMjg1MjhcIn0se1wibmFtZVwiOlwiRXN0b25pYVwiLFwiY29kZVwiOlwiRUVcIixcImliYW5cIjpcIkVFNTkxMjg2NjUzODY3NDkxNzg2XCJ9LHtcIm5hbWVcIjpcIkZpbmxhbmRcIixcImNvZGVcIjpcIkZJXCIsXCJpYmFuXCI6XCJGSTg0Nzk0ODY5MTE3ODg1OThcIn0se1wibmFtZVwiOlwiRnJhbmNlXCIsXCJjb2RlXCI6XCJGUlwiLFwiaWJhblwiOlwiRlI4NTE0NTA4MDAwNzA3MjM5NDg4NzM4SjIxXCJ9LHtcIm5hbWVcIjpcIkdlcm1hbnlcIixcImNvZGVcIjpcIkRFXCIsXCJpYmFuXCI6XCJERTE0NTAwMTA1MTc0MTg1NDg0MTc3XCJ9LHtcIm5hbWVcIjpcIkdyZWVjZVwiLFwiY29kZVwiOlwiR1JcIixcImliYW5cIjpcIkdSOTIwMTQ5NDQ5MTU4ODE0MTU0OTUzMTc5OVwifSx7XCJuYW1lXCI6XCJJcmVsYW5kXCIsXCJjb2RlXCI6XCJJRVwiLFwiaWJhblwiOlwiSUUyOUFJQks5MzExNTIxMjM0NTY3OFwifSx7XCJuYW1lXCI6XCJJdGFseVwiLFwiY29kZVwiOlwiSVRcIixcImliYW5cIjpcIklUNzdSMDMwMDIwMzI4MDY0ODQxOTY2ODI1M1wifSx7XCJuYW1lXCI6XCJMYXR2aWFcIixcImNvZGVcIjpcIkxWXCIsXCJpYmFuXCI6XCJMVjgwQkFOSzAwMDA0MzUxOTUwMDFcIn0se1wibmFtZVwiOlwiTGl0aHVhbmlhXCIsXCJjb2RlXCI6XCJMVFwiLFwiaWJhblwiOlwiTFQyNzUxNjgxNzk5OTM2NDU0MjhcIn0se1wibmFtZVwiOlwiTHV4ZW1ib3VyZ1wiLFwiY29kZVwiOlwiTFVcIixcImliYW5cIjpcIkxVMzUwMTA2ODE0MzMxNzE2NDI1XCJ9LHtcIm5hbWVcIjpcIk1hbHRhXCIsXCJjb2RlXCI6XCJNVFwiLFwiaWJhblwiOlwiTVQ1NFdMQ0kxMjM3NzUyOTY4NTU4OTQ1NDc0NzgzNVwifSx7XCJuYW1lXCI6XCJOZXRoZXJsYW5kc1wiLFwiY29kZVwiOlwiTkxcIixcImliYW5cIjpcIk5MMTNJTkdCNjc1NTAzNzM5N1wifSx7XCJuYW1lXCI6XCJQb2xhbmRcIixcImNvZGVcIjpcIlBMXCIsXCJpYmFuXCI6XCJQTDA2MTA5MDI0MDIzOTYyMjM2MjYzNjY2NjY0XCJ9LHtcIm5hbWVcIjpcIlBvcnR1Z2FsXCIsXCJjb2RlXCI6XCJQVFwiLFwiaWJhblwiOlwiUFQyNjAwMzUwNjUxNjk5NTIzNDM2OTQ4MlwifSx7XCJuYW1lXCI6XCJDemVjaCBSZXB1YmxpY1wiLFwiY29kZVwiOlwiQ1pcIixcImliYW5cIjpcIkNaMTM1MDUxNTM0MzI5MTI0MzI2MTIyMlwifSx7XCJuYW1lXCI6XCJSb21hbmlhXCIsXCJjb2RlXCI6XCJST1wiLFwiaWJhblwiOlwiUk82NFJaQlIyMzM1NTIxOTI2NzY4MjYyXCJ9LHtcIm5hbWVcIjpcIlNsb3Zha2lhXCIsXCJjb2RlXCI6XCJTS1wiLFwiaWJhblwiOlwiU0s2MDUzNDE5NTg5MTQyNjQzODI4MjYyXCJ9LHtcIm5hbWVcIjpcIlNsb3ZlbmlhXCIsXCJjb2RlXCI6XCJTSVwiLFwiaWJhblwiOlwiU0k5Nzk3NTQyNjY3ODMzMjc4NlwifSx7XCJuYW1lXCI6XCJTcGFpblwiLFwiY29kZVwiOlwiRVNcIixcImliYW5cIjpcIkVTNzIzMTkwNDk3NzQ5MjU2OTk0NDE1OFwifSx7XCJuYW1lXCI6XCJTd2VkZW5cIixcImNvZGVcIjpcIlNFXCIsXCJpYmFuXCI6XCJTRTQ5NDk5OTYxOTU3NDk3NTU1NzIxMzZcIn0se1wibmFtZVwiOlwiSHVuZ2FyeVwiLFwiY29kZVwiOlwiSFVcIixcImliYW5cIjpcIkhVNDIxMTc3MzAxNjExMTExMDE4MDAwMDAwMDBcIn0se1wibmFtZVwiOlwiTm9yd2F5XCIsXCJjb2RlXCI6XCJOT1wiLFwiaWJhblwiOlwiTk85Mzg2MDExMTE3OTQ3XCJ9LHtcIm5hbWVcIjpcIkxpZWNodGVuc3RlaW5cIixcImNvZGVcIjpcIkxJXCIsXCJpYmFuXCI6XCJMSTcwMDg4MDA2ODMxNDY1Mjc0ODRcIn0se1wibmFtZVwiOlwiSWNlbGFuZFwiLFwiY29kZVwiOlwiSVNcIixcImliYW5cIjpcIklTMTQwMTU5MjYwMDc2NTQ1NTEwNzMwMzM5XCJ9LHtcIm5hbWVcIjpcIlN3aXR6ZXJsYW5kXCIsXCJjb2RlXCI6XCJDSFwiLFwiaWJhblwiOlwiQ0g0Nzg5MTQ0NjIzMzI4MjYzMTM5XCJ9LHtcIm5hbWVcIjpcIlVuaXRlZCBLaW5nZG9tXCIsXCJjb2RlXCI6XCJHQlwiLFwiaWJhblwiOlwiR0IwOUJBUkMyMDA0MDQxNjI4OTY2OVwifSx7XCJuYW1lXCI6XCJNb25hY29cIixcImNvZGVcIjpcIk1DXCIsXCJpYmFuXCI6XCJNQzIxMTI3MzkwMDA0MDcxNzk4NDYxMjRGMDhcIn0se1wibmFtZVwiOlwiQW5kb3JyYVwiLFwiY29kZVwiOlwiQURcIixcImliYW5cIjpcIkFENTEyNzYzODU3NDI2Mjk5NTc3NTc0NFwifSx7XCJuYW1lXCI6XCJTYW4gTWFyaW5vXCIsXCJjb2RlXCI6XCJTTVwiLFwiaWJhblwiOlwiU004NlUwMzIyNTA5ODAwMDAwMDAwMjcwMTAwXCJ9LHtcIm5hbWVcIjpcIkhvbHkgU2VlIChWYXRpY2FuIENpdHkgU3RhdGUpXCIsXCJjb2RlXCI6XCJWQVwiLFwiaWJhblwiOlwiVkE1OTAwMTEyMzAwMDAxMjM0NTY3OFwifV07XHJcblxyXG5cdGRlbGVnYXRvOiBEYXRpUGVyc29uYUZpc2ljYU1vZGVsO1xyXG5cclxuXHRpc0RlbGVnYXRvVmFsaWQ6IGJvb2xlYW47XHJcblxyXG5cdGluZGlyaXp6bzogSW5kaXJpenpvTW9kZWw7XHJcblxyXG5cdGlzSW5kaXJpenpvVmFsaWQ6IGJvb2xlYW47XHJcblxyXG5cdGNhcDogc3RyaW5nW107XHJcblxyXG5cdGNvZGljZUNhdGFzdGFsZTogc3RyaW5nO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsaXRhUGFnYW1lbnRvU2VydmljZTogTW9kYWxpdGFQYWdhbWVudG9TZXJ2aWNlKSB7XHJcblx0XHQvLyB0aGlzLmluaXRTZXBhRm9ybSgpO1xyXG5cdH1cclxuXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLmluaXRTZXBhRm9ybSgpO1xyXG5cclxuXHRcdHRoaXMuc2VwYUZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIC8vIGlmICh0aGlzLnNlcGFGb3JtLnZhbGlkKSB7XHJcbiAgICAgICAgY29uc3QgYm9uaWZpY29TZXBhOiBCb25pZmljb1NlcGFNb2RlbCA9IHtcclxuXHRcdFx0XHRcdGliYW46IHRoaXMuc2VwYUZvcm0uZ2V0KCdpYmFuJykudmFsdWUsXHJcblx0XHRcdFx0XHRkZWxlZ2F0bzogdGhpcy5zZXBhRm9ybS5nZXQoJ2V4aXN0c0RlbGVnYXRvUmlzY29zc2lvbmUnKS52YWx1ZSxcclxuXHRcdFx0XHRcdGRlbGVnYXRvUmlzY29zc2lvbmU6IHRoaXMuc2VwYUZvcm0uZ2V0KCdleGlzdHNEZWxlZ2F0b1Jpc2Nvc3Npb25lJykudmFsdWUgPyB0aGlzLmRlbGVnYXRvIDogbnVsbCxcclxuXHRcdFx0XHRcdGluZGlyaXp6b0RlbGVnYXRvOiB0aGlzLnNlcGFGb3JtLmdldCgnZXhpc3RzRGVsZWdhdG9SaXNjb3NzaW9uZScpLnZhbHVlID09PSB0cnVlID8gdGhpcy5pbmRpcml6em8gOiBudWxsXHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0Y29uc3QgaXNGb3JtVmFsaWQgPSB0aGlzLnNlcGFGb3JtLnZhbGlkO1xyXG5cdFx0XHRcdGNvbnN0IGlzRm9ybURlbGVnYXRvVmFsaWQgPSB0aGlzLnNlcGFGb3JtLmdldCgnZXhpc3RzRGVsZWdhdG9SaXNjb3NzaW9uZScpLnZhbHVlID09PSB0cnVlID8gdGhpcy5pc0RlbGVnYXRvVmFsaWQgJiYgdGhpcy5pc0luZGlyaXp6b1ZhbGlkIDogdHJ1ZTtcclxuICAgICAgICBjb25zdCBpc1ZhbGlkID0gaXNGb3JtVmFsaWQgJiYgaXNGb3JtRGVsZWdhdG9WYWxpZDtcclxuXHJcbiAgICAgICAgdGhpcy5ib25pZmljb1NlcGFSZWFkeS5lbWl0KHsgYm9uaWZpY286IGJvbmlmaWNvU2VwYSwgaXNWYWxpZCB9KTtcclxuICAgICAgIC8vfVxyXG4gICAgfSk7XHJcblx0fVxyXG5cclxuXHRpbml0U2VwYUZvcm0oKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlcGFGb3JtID0gbmV3IEZvcm1Hcm91cCh7XHJcblx0XHRcdGV4aXN0c0RlbGVnYXRvUmlzY29zc2lvbmU6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmJvbmlmaWNvU2VwYSAhPSBudWxsID8gdGhpcy5ib25pZmljb1NlcGEuZGVsZWdhdG8gOiBmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuXHRcdFx0aWJhbjogbmV3IEZvcm1Db250cm9sKHRoaXMuYm9uaWZpY29TZXBhPy5pYmFuLCB0aGlzLmliYW5WYWxpZGF0b3JzKSxcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0b25WYWxpZGF0ZVNlcGFQZXJzb25hRmlzaWNhKCk6IHZvaWQge1xyXG5cdFx0dGhpcy52YWxpZGF0ZVNlcGFQZXJzb25hRmlzaWNhRW1pdHRlci5lbWl0KCk7XHJcblx0fVxyXG5cclxuXHRvbkV4aXN0c0RlbGVnYXRvUmlzY29zc2lvbmVDaGFuZ2UodGlwbyk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aXBvLnZhbHVlKSB7XHJcblx0XHRcdHRoaXMucmVzZXRFc3RyZW1pUGVyc29uYUZpc2ljYVNlcGFGb3JtRW1pdHRlci5lbWl0KCk7XHJcblx0XHRcdHRoaXMucmVzZXRJbmRpcml6em9Gb3JtLmVtaXQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHNlcGFDb3VudHJpZXNWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xyXG5cdFx0cmV0dXJuIChmb3JtOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcclxuXHRcdCAgY29uc3QgaWJhbiA9IGZvcm0udmFsdWU7XHJcblx0XHQgIGlmICghaWJhbiB8fCBpYmFuPy5sZW5ndGggPCAyKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHQgIH1cclxuXHJcblx0XHQgIGNvbnN0IGNvdW50cnlDb2RlOiBzdHJpbmcgPSBpYmFuLnN1YnN0cmluZygwLCAyKTtcclxuXHRcdCAgaWYgKCF0aGlzLnNlcGFDb3VudHJpZXMuc29tZSgoZWxlbWVudCkgPT4gZWxlbWVudC5jb2RlID09PSBjb3VudHJ5Q29kZSkpIHtcclxuXHRcdFx0XHRyZXR1cm4geyBpYmFuRXh0cmFTZXBhOiB0cnVlIH07XHJcblx0XHQgIH1cclxuXHJcblx0XHQgIHJldHVybiBudWxsO1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdG9uRGVsZWdhdG9SaXNjb3NzaW9uZVJlYWR5KGV2ZW50OiB7IHBlcnNvbmE6IERhdGlQZXJzb25hRmlzaWNhTW9kZWwsIGlzVmFsaWQ6IGJvb2xlYW4gfSl7XHJcblx0XHR0aGlzLmRlbGVnYXRvID0gZXZlbnQucGVyc29uYTtcclxuXHRcdHRoaXMuaXNEZWxlZ2F0b1ZhbGlkID0gZXZlbnQuaXNWYWxpZDtcclxuXHRcdHRoaXMucGVyc29uYUZpc2ljYUVtaXR0ZXIuZW1pdCh7IHBlcnNvbmE6IGV2ZW50LnBlcnNvbmEsIGlzVmFsaWQ6IGV2ZW50LmlzVmFsaWQgfSk7XHJcblx0fVxyXG5cclxuXHRjb252ZXJ0VG9VcHBlcmNhc2UodmFsdWU6IHN0cmluZykge1xyXG5cdFx0dGhpcy5zZXBhRm9ybS5nZXQoJ2liYW4nKS5zZXRWYWx1ZSh2YWx1ZS50b1VwcGVyQ2FzZSgpKTtcclxuXHR9XHJcblxyXG5cdG5vU3BhY2VzVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcclxuXHRcdHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG5cdFx0XHRjb25zdCBoYXNTcGFjZXMgPSAvXFxzLy50ZXN0KGNvbnRyb2wudmFsdWUpO1xyXG5cdFx0XHRyZXR1cm4gaGFzU3BhY2VzID8geyBzcGFjZXNJYmFuOiB0cnVlIH0gOiBudWxsO1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGdldENvbXVuaShzaWdsYVByb3ZpbmNpYTogc3RyaW5nKTogdm9pZCB7XHJcblx0XHRpZiAoc2lnbGFQcm92aW5jaWEpIHtcclxuXHRcdFx0dGhpcy5tb2RhbGl0YVBhZ2FtZW50b1NlcnZpY2UuZ2V0Q29tdW5pJChzaWdsYVByb3ZpbmNpYSkucGlwZSh0YWtlKDEpKVxyXG5cdFx0XHRcdC5zdWJzY3JpYmUoY29tdW5pID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRDb211bmkuZW1pdChjb211bmkpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBjb211bmUgPSBjb211bmkuZmluZChjb211bmVJdGVtID0+IGNvbXVuZUl0ZW0uY29kaWNlQ2F0YXN0YWxlID09PSB0aGlzLmNvZGljZUNhdGFzdGFsZSk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FwT3B0aW9ucy5lbWl0KGNvbXVuZT8uY29kaWNlSXN0YXQpO1xyXG5cdFx0XHRcdH0pXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNldENvbXVuaS5lbWl0KFtdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG9uSW5kaXJpenpvUmVhZHkoZXZlbnQ6IHsgaW5kaXJpenpvOiBJbmRpcml6em9Nb2RlbCwgaXNWYWxpZDogYm9vbGVhbiB9KSB7XHJcblx0XHR0aGlzLmluZGlyaXp6byA9IGV2ZW50LmluZGlyaXp6bztcclxuXHRcdHRoaXMuaXNJbmRpcml6em9WYWxpZCA9IGV2ZW50LmlzVmFsaWQ7XHJcblx0XHR0aGlzLmluZGlyaXp6b0VtaXR0ZXIuZW1pdCh7IGluZGlyaXp6bzogZXZlbnQuaW5kaXJpenpvLCBpc1ZhbGlkOiBldmVudC5pc1ZhbGlkIH0pO1xyXG5cdH1cclxuXHJcblx0Z2V0Q2FwKGNvZGljZUNhdGFzdGFsZTogc3RyaW5nKTogdm9pZCB7XHJcblx0XHRpZiAoY29kaWNlQ2F0YXN0YWxlKSB7XHJcblx0XHRcdHRoaXMuY29kaWNlQ2F0YXN0YWxlID0gY29kaWNlQ2F0YXN0YWxlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgY29tdW5lID0gdGhpcy5jb211bmk/LmZpbmQoY29tdW5lSXRlbSA9PiBjb211bmVJdGVtLmNvZGljZUNhdGFzdGFsZSA9PT0gY29kaWNlQ2F0YXN0YWxlKTtcclxuXHRcdHRoaXMuZ2V0Q2FwT3B0aW9ucy5lbWl0KGNvbXVuZT8uY29kaWNlSXN0YXQpO1xyXG5cdH1cclxuXHJcbn1cclxuIl19