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.

141 lines 29.6 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mby1uYXNjaXRhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJEOi9Qcm9nZXR0aS9EQUcvc29yZ2VudGkvZ2l0bGFiLXRlcm5pL2NvbW1vbi1jb21wb25lbnQtbGliL3Byb2plY3RzL3BvcnRhbC1jb21tb24tY29tcG9uZW50LWxpYi9zcmMvIiwic291cmNlcyI6WyJsaWIvZGVwb3NpdGkvY29tbW9uLWNvbXBvbmVudC9pbmZvLW5hc2NpdGEvaW5mby1uYXNjaXRhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3BFLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRWpDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFLcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBUXRFLE1BQU0sT0FBTyxvQkFBb0I7SUErQmhDLFlBQ1MsR0FBbUIsRUFDbkIsVUFBNkIsRUFDN0IsaUJBQW9DLEVBQ3BDLGlCQUFvQztRQUhwQyxRQUFHLEdBQUgsR0FBRyxDQUFnQjtRQUNuQixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUM3QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFqQzdDLFlBQU8sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBWXJCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFHMUIsU0FBSSxHQUVBLElBQUksWUFBWSxFQUEyQyxDQUFDO1FBU2hFLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxpQkFBWSxHQUFHLE1BQU0sQ0FBQztRQVFyQixJQUFJLENBQUMsUUFBUSxHQUFHLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFBO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNqQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELFFBQVE7O1FBQ1AsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLHVCQUF1QjtRQUN2Qiw2Q0FBNkM7UUFDN0MsbURBQW1EO1FBQ25ELE1BQU0sWUFBWSxHQUFHLE9BQUEsSUFBSSxDQUFDLFdBQVcsMENBQUUsWUFBWSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBRTVGLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUQ7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksV0FBVyxDQUN4QyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUN4QyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FDckIsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRXhELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxXQUFXLENBQ3ZDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUM3RCxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FDckIsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDM0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxXQUFXLENBQ3BDLEVBQUUsS0FBSyxFQUFFLE9BQUEsSUFBSSxDQUFDLFdBQVcsMENBQUUsYUFBYSxFQUFDLENBQUMsT0FBQyxJQUFJLENBQUMsV0FBVywwQ0FBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUNqSCxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FDckIsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNyRCxNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FDbEMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUN4RCxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQ3JELENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFakQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLFdBQVcsQ0FDM0MsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQ2pFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUNyQixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUduRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUVwQixJQUFJLENBQUMsYUFBYSxHQUFHLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3ZELFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FDdkIsQ0FBQztTQUNGO2FBQU07WUFDTixJQUFJLENBQUMsYUFBYSxHQUFHLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3ZELEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVE7Z0JBQ3ZCLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNyQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUNqRSxFQUNELFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFDdkIsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ2hCLElBQUksUUFBUSxFQUFFO29CQUNiLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUM5QixhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3hCLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUMzQjtxQkFBTTtvQkFDTixvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDL0IsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN2QixnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztpQkFDMUI7WUFDRixDQUFDLENBQUMsQ0FDRixDQUFDO1NBQ0Y7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFOztZQUNULE1BQU0sV0FBVyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUMzQyxXQUFXLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuRixVQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQywwQ0FBRSxLQUFLLEVBQUU7Z0JBQzlDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUNwRSxtQ0FBbUM7Z0JBQ25DLFVBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsMENBQUUsS0FBSyxFQUFFO29CQUNyRCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFDLE9BQUEsT0FBTyxDQUFDLGVBQWUsV0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQywwQ0FBRSxLQUFLLENBQUEsQ0FBQSxFQUFBLENBQUMsQ0FBQztvQkFDakksSUFBRyxlQUFlLEVBQUU7d0JBQ25CLFdBQVcsQ0FBQyxvQkFBb0IsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDO3dCQUNuRSxXQUFXLENBQUMsY0FBYyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7d0JBQ25ELFdBQVcsQ0FBQyxhQUFhLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQztxQkFDNUQ7aUJBQ0Q7Z0JBQ0QsV0FBVyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQzthQUNwQztpQkFBTTtnQkFDTixXQUFXLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDaEMsV0FBVyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ3RFLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FDaEQsa0JBQWtCLENBQ2xCLENBQUMsS0FBSyxDQUFDO2dCQUNSLFdBQVcsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUNyRCxXQUFXLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDekM7WUFDRCxPQUFPLFdBQVcsQ0FBQztRQUNwQixDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUMzQixHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUNuQixxQkFBcUIsQ0FBQyxFQUFFLENBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQ2hDLFdBQVcsQ0FDWCxDQUNELENBQ0QsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqRSxJQUFJLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ2hELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUUsRUFDdkMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsRUFDNUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDaEIsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUN2RCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFVBQVU7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDMUM7SUFDRixDQUFDO0lBRUQsZUFBZTtRQUNkLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2xELE9BQU8sa0JBQWtCLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVc7UUFDVixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxhQUFhLENBQUMsRUFBVSxFQUFFLEVBQVU7UUFDbkMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZUFBZSxLQUFLLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDekUsQ0FBQztJQUVNLFVBQVU7O1FBQ2hCLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsS0FBSyxHQUFHO0lBQ3BCLENBQUM7OztZQTVMRCxTQUFTLFNBQUM7Z0JBQ1YsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsODlHQUE0Qzs7YUFFNUM7OztZQVRRLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsaUJBQWlCO1lBRGpCLGlCQUFpQjs7OzBCQWF4QixLQUFLO3VCQUdMLEtBQUs7d0JBR0wsS0FBSzt1QkFHTCxLQUFLO21CQUdMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG5cdENvbXBvbmVudCxcclxuXHRFdmVudEVtaXR0ZXIsXHJcblx0SW5wdXQsXHJcblx0T25DaGFuZ2VzLFxyXG5cdE9uRGVzdHJveSxcclxuXHRPbkluaXQsXHJcblx0T3V0cHV0LFxyXG5cdFNpbXBsZUNoYW5nZXMsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBNQVRfTU9NRU5UX0RBVEVfQURBUFRFUl9PUFRJT05TLCBNb21lbnREYXRlQWRhcHRlciB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC1tb21lbnQtYWRhcHRlclwiO1xyXG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgTUFUX0RBVEVfRk9STUFUUywgTUFUX0RBVEVfTE9DQUxFIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2NvcmVcIjtcclxuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgSW5mb05hc2NpdGFQRkRUTyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvaW5mby1uYXNjaXRhLXBmLmR0b1wiO1xyXG5pbXBvcnQgeyBOYXppb25lRFRPIH0gZnJvbSBcIi4uLy4uL21vZGVscy9uYXppb25lLmR0b1wiO1xyXG5pbXBvcnQgeyBDb211bmUgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BvcnRhbGUvY29tdW5lXCI7XHJcbmltcG9ydCB7IExvY2FsaXRhIH0gZnJvbSBcIi4uLy4uL21vZGVscy9wb3J0YWxlL2xvY2FsaXRhXCI7XHJcbmltcG9ydCB7IE5hemlvbmUgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BvcnRhbGUvbmF6aW9uZVwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnRPdXRwdXRTdGF0dXMgfSBmcm9tIFwiLi4vLi4vbm9ybWFsaXp6YXppb25lL2NvbXBvbmVudC1vdXRwdXQtc3RhdHVzXCI7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBUZXJyaXRvcmlvU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy90ZXJyaXRvcmlvL3RlcnJpdG9yaW8tc2VydmljZVwiO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uLnNlcnZpY2VcIjtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogXCJsaWItaW5mby1uYXNjaXRhXCIsXHJcblx0dGVtcGxhdGVVcmw6IFwiLi9pbmZvLW5hc2NpdGEuY29tcG9uZW50Lmh0bWxcIixcclxuXHRzdHlsZVVybHM6IFtcIi4vaW5mby1uYXNjaXRhLmNvbXBvbmVudC5jc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbmZvTmFzY2l0YUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG5cclxuXHRtYXhEYXRlID0gbmV3IERhdGUoKTtcclxuXHJcblx0QElucHV0KClcclxuXHRpbmZvbmFzY2l0YTogSW5mb05hc2NpdGFQRkRUTztcclxuXHJcblx0QElucHV0KClcclxuXHRwcm92aW5jZTogT2JzZXJ2YWJsZTxBcnJheTxMb2NhbGl0YT4+O1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdG5hbWVzcGFjZTogc3RyaW5nO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdHJlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdGRvbmU6IEV2ZW50RW1pdHRlcjxcclxuXHRcdENvbXBvbmVudE91dHB1dFN0YXR1czxJbmZvTmFzY2l0YVBGRFRPPlxyXG5cdD4gPSBuZXcgRXZlbnRFbWl0dGVyPENvbXBvbmVudE91dHB1dFN0YXR1czxJbmZvTmFzY2l0YVBGRFRPPj4oKTtcclxuXHJcblx0Zm9ybTogRm9ybUdyb3VwO1xyXG5cdHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cdGNvbXVuaSQ6IE9ic2VydmFibGU8QXJyYXk8Q29tdW5lPj47XHJcblx0aXNOYXRvRXN0ZXJvJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHJcblx0bmF6aW9uaSQ6IE9ic2VydmFibGU8QXJyYXk8TmF6aW9uZT4+O1xyXG5cdG5hemlvbmk6IEFycmF5PE5hemlvbmU+O1xyXG5cdElUQUxJQSA9ICdJVCc7XHJcblx0SVRBTElBQ29kQ2F0ID0gJ1owMDAnO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgbXNnOiBNZXNzYWdlU2VydmljZSxcclxuXHRcdHByaXZhdGUgdGVycml0b3JpbzogVGVycml0b3Jpb1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSxcclxuXHRcdHByaXZhdGUgdGVycml0b3Jpb1NlcnZpY2U6IFRlcnJpdG9yaW9TZXJ2aWNlXHJcblx0KSB7XHJcblx0XHR0aGlzLm5hemlvbmkkID0gdGVycml0b3Jpb1NlcnZpY2UuZ2V0TmF6aW9uaSQoKTtcclxuXHRcdHRoaXMubmF6aW9uaSQuc3Vic2NyaWJlKG5hemlvbmkgPT4ge1xyXG5cdFx0XHR0aGlzLm5hemlvbmkgPSBuYXppb25pO1xyXG5cdFx0fSlcclxuXHR9XHJcblxyXG5cdG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHRcdHRoaXMuaW5pdGlhbGl6ZSgpO1xyXG5cdH1cclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblx0XHQvLyBjb25zb2xlLmxvZygnW0luZm9OYXNjaXRhQ29tcG9uZW50XSBpbmZvbmFzY2l0YScsIHRoaXMuaW5mb25hc2NpdGEpO1xyXG5cdFx0dGhpcy5mb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblx0XHR0aGlzLmluaXRpYWxpemUoKTtcclxuXHRcdC8vIGNvbnN0IGlzTmF0b0VzdGVybyA9XHJcblx0XHQvLyBcdHRoaXMuaW5mb25hc2NpdGEuY29tdW5lTmFzY2l0YSAhPSBudWxsICYmXHJcblx0XHQvLyBcdHRoaXMuaW5mb25hc2NpdGEuY29tdW5lTmFzY2l0YS5zdGFydHNXaXRoKFwiWlwiKTtcclxuXHRcdGNvbnN0IGlzTmF0b0VzdGVybyA9IHRoaXMuaW5mb25hc2NpdGE/LmlzTmF0b0VzdGVybyA/IHRoaXMuaW5mb25hc2NpdGEuaXNOYXRvRXN0ZXJvIDogZmFsc2U7XHJcblxyXG5cdFx0aWYgKCFpc05hdG9Fc3Rlcm8pIHtcclxuXHRcdFx0dGhpcy5pbmZvbmFzY2l0YS5uYXppb25lTmFzY2l0YSA9IHRoaXMuSVRBTElBO1xyXG5cdFx0XHR0aGlzLmluZm9uYXNjaXRhLmNvZENhdE5hemlvbmVOYXNjaXRhID0gdGhpcy5JVEFMSUFDb2RDYXQ7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgaXNOYXRvRXN0ZXJvQ2hlY2sgPSBuZXcgRm9ybUNvbnRyb2woXHJcblx0XHRcdHsgdmFsdWU6IGlzTmF0b0VzdGVybywgZGlzYWJsZWQ6IGZhbHNlIH0sXHJcblx0XHRcdFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG5cdFx0KTtcclxuXHRcdHRoaXMuZm9ybS5hZGRDb250cm9sKFwiaXNOYXRvRXN0ZXJvXCIsIGlzTmF0b0VzdGVyb0NoZWNrKTtcclxuXHRcdFx0XHJcblx0XHRjb25zdCBwcm92aW5jaWFOYXNjaXRhID0gbmV3IEZvcm1Db250cm9sKFxyXG5cdFx0XHR7IHZhbHVlOiB0aGlzLmluZm9uYXNjaXRhLnByb3ZpbmNpYU5hc2NpdGEsIGRpc2FibGVkOiBmYWxzZSB9LFxyXG5cdFx0XHRbVmFsaWRhdG9ycy5yZXF1aXJlZF1cclxuXHRcdCk7XHJcblx0XHR0aGlzLmZvcm0uYWRkQ29udHJvbChcInByb3ZpbmNpYU5hc2NpdGFcIiwgcHJvdmluY2lhTmFzY2l0YSk7XHJcblx0XHRjb25zdCBjb211bmVOYXNjaXRhID0gbmV3IEZvcm1Db250cm9sKFxyXG5cdFx0XHR7IHZhbHVlOiB0aGlzLmluZm9uYXNjaXRhPy5jb211bmVOYXNjaXRhID8gdGhpcy5pbmZvbmFzY2l0YT8uY29tdW5lTmFzY2l0YSA6IHRoaXMuSVRBTElBQ29kQ2F0LCBkaXNhYmxlZDogZmFsc2UgfSxcclxuXHRcdFx0W1ZhbGlkYXRvcnMucmVxdWlyZWRdXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5mb3JtLmFkZENvbnRyb2woXCJjb211bmVOYXNjaXRhXCIsIGNvbXVuZU5hc2NpdGEpO1xyXG5cdFx0Y29uc3QgZGF0YU5hc2NpdGEgPSBuZXcgRm9ybUNvbnRyb2woXHJcblx0XHRcdHsgdmFsdWU6IHRoaXMuaW5mb25hc2NpdGEuZGF0YU5hc2NpdGEsIGRpc2FibGVkOiBmYWxzZSB9LFxyXG5cdFx0XHRbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdGlvblNlcnZpY2UuVmFsaWRhdGVEYXRlXVxyXG5cdFx0KTtcclxuXHRcdHRoaXMuZm9ybS5hZGRDb250cm9sKFwiZGF0YU5hc2NpdGFcIiwgZGF0YU5hc2NpdGEpO1xyXG5cclxuXHRcdGNvbnN0IGNvZENhdE5hemlvbmVOYXNjaXRhID0gbmV3IEZvcm1Db250cm9sKFxyXG5cdFx0XHR7IHZhbHVlOiB0aGlzLmluZm9uYXNjaXRhLmNvZENhdE5hemlvbmVOYXNjaXRhLCBkaXNhYmxlZDogZmFsc2UgfSxcclxuXHRcdFx0W1ZhbGlkYXRvcnMucmVxdWlyZWRdXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5mb3JtLmFkZENvbnRyb2woXCJjb2RDYXROYXppb25lTmFzY2l0YVwiLCBjb2RDYXROYXppb25lTmFzY2l0YSk7XHJcblxyXG5cclxuXHRcdGlmICh0aGlzLnJlYWRPbmx5KSB7XHJcblx0XHRcdHRoaXMuZm9ybS5kaXNhYmxlKCk7XHJcblxyXG5cdFx0XHR0aGlzLmlzTmF0b0VzdGVybyQgPSBpc05hdG9Fc3Rlcm9DaGVjay52YWx1ZUNoYW5nZXMucGlwZShcclxuXHRcdFx0XHRzdGFydFdpdGgoaXNOYXRvRXN0ZXJvKVxyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5pc05hdG9Fc3Rlcm8kID0gaXNOYXRvRXN0ZXJvQ2hlY2sudmFsdWVDaGFuZ2VzLnBpcGUoXHJcblx0XHRcdFx0dGFwKGlzRXN0ZXJvID0+IGlzRXN0ZXJvXHJcblx0XHRcdFx0XHQ/IGNvZENhdE5hemlvbmVOYXNjaXRhLnNldFZhbHVlKG51bGwpXHJcblx0XHRcdFx0XHQ6IChwcm92aW5jaWFOYXNjaXRhLnNldFZhbHVlKG51bGwpLCBjb211bmVOYXNjaXRhLnNldFZhbHVlKG51bGwpKVxyXG5cdFx0XHRcdCksXHJcblx0XHRcdFx0c3RhcnRXaXRoKGlzTmF0b0VzdGVybyksXHJcblx0XHRcdFx0dGFwKChpc0VzdGVybykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGlzRXN0ZXJvKSB7XHJcblx0XHRcdFx0XHRcdGNvZENhdE5hemlvbmVOYXNjaXRhLmVuYWJsZSgpO1xyXG5cdFx0XHRcdFx0XHRjb211bmVOYXNjaXRhLmRpc2FibGUoKTtcclxuXHRcdFx0XHRcdFx0cHJvdmluY2lhTmFzY2l0YS5kaXNhYmxlKCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRjb2RDYXROYXppb25lTmFzY2l0YS5kaXNhYmxlKCk7XHJcblx0XHRcdFx0XHRcdGNvbXVuZU5hc2NpdGEuZW5hYmxlKCk7XHJcblx0XHRcdFx0XHRcdHByb3ZpbmNpYU5hc2NpdGEuZW5hYmxlKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGNoYW5nZXMkID0gdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG5cdFx0XHRtYXAoKF8pID0+IHtcclxuXHRcdFx0XHRjb25zdCBpbmZvbmFzY2l0YSA9IG5ldyBJbmZvTmFzY2l0YVBGRFRPKCk7XHJcblx0XHRcdFx0aW5mb25hc2NpdGEuZGF0YU5hc2NpdGEgPSBtb21lbnQodGhpcy5mb3JtLmNvbnRyb2xzW1wiZGF0YU5hc2NpdGFcIl0udmFsdWUpLnRvRGF0ZSgpO1xyXG5cdFx0XHRcdGlmICh0aGlzLmZvcm0uY29udHJvbHNbXCJpc05hdG9Fc3Rlcm9cIl0/LnZhbHVlKSB7XHJcblx0XHRcdFx0XHRpbmZvbmFzY2l0YS5pc05hdG9Fc3Rlcm8gPSB0aGlzLmZvcm0uY29udHJvbHNbXCJpc05hdG9Fc3Rlcm9cIl0udmFsdWU7XHJcblx0XHRcdFx0XHQvL2luZm9uYXNjaXRhLmNvbXVuZU5hc2NpdGEgPSBudWxsO1xyXG5cdFx0XHRcdFx0aWYodGhpcy5mb3JtLmNvbnRyb2xzW1wiY29kQ2F0TmF6aW9uZU5hc2NpdGFcIl0/LnZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdGxldCBuYXppb25lU2VsZWN0ZWQgPSB0aGlzLm5hemlvbmkuZmluZChuYXppb25lID0+IG5hemlvbmUuY29kaWNlQ2F0YXN0YWxlID09IHRoaXMuZm9ybS5jb250cm9sc1tcImNvZENhdE5hemlvbmVOYXNjaXRhXCJdPy52YWx1ZSk7XHJcblx0XHRcdFx0XHRcdGlmKG5hemlvbmVTZWxlY3RlZCkge1xyXG5cdFx0XHRcdFx0XHRcdGluZm9uYXNjaXRhLmNvZENhdE5hemlvbmVOYXNjaXRhID0gbmF6aW9uZVNlbGVjdGVkLmNvZGljZUNhdGFzdGFsZTtcclxuXHRcdFx0XHRcdFx0XHRpbmZvbmFzY2l0YS5uYXppb25lTmFzY2l0YSA9IG5hemlvbmVTZWxlY3RlZC5zaWdsYTtcclxuXHRcdFx0XHRcdFx0XHRpbmZvbmFzY2l0YS5jb211bmVOYXNjaXRhID0gbmF6aW9uZVNlbGVjdGVkLmNvZGljZUNhdGFzdGFsZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aW5mb25hc2NpdGEucHJvdmluY2lhTmFzY2l0YSA9IFwiRUVcIjtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aW5mb25hc2NpdGEuaXNOYXRvRXN0ZXJvID0gbnVsbDtcclxuXHRcdFx0XHRcdGluZm9uYXNjaXRhLmNvbXVuZU5hc2NpdGEgPSB0aGlzLmZvcm0uY29udHJvbHNbXCJjb211bmVOYXNjaXRhXCJdLnZhbHVlO1xyXG5cdFx0XHRcdFx0aW5mb25hc2NpdGEucHJvdmluY2lhTmFzY2l0YSA9IHRoaXMuZm9ybS5jb250cm9sc1tcclxuXHRcdFx0XHRcdFx0XCJwcm92aW5jaWFOYXNjaXRhXCJcclxuXHRcdFx0XHRcdF0udmFsdWU7XHJcblx0XHRcdFx0XHRpbmZvbmFzY2l0YS5jb2RDYXROYXppb25lTmFzY2l0YSA9IHRoaXMuSVRBTElBQ29kQ2F0O1xyXG5cdFx0XHRcdFx0aW5mb25hc2NpdGEubmF6aW9uZU5hc2NpdGEgPSB0aGlzLklUQUxJQTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGluZm9uYXNjaXRhO1xyXG5cdFx0XHR9KSxcclxuXHRcdFx0c3RhcnRXaXRoKHRoaXMuaW5mb25hc2NpdGEpLFxyXG5cdFx0XHRtYXAoKGluZm9uYXNjaXRhKSA9PlxyXG5cdFx0XHRcdENvbXBvbmVudE91dHB1dFN0YXR1cy5vZihcclxuXHRcdFx0XHRcdHRoaXMuZm9ybS52YWxpZCB8fCB0aGlzLnJlYWRPbmx5LFxyXG5cdFx0XHRcdFx0aW5mb25hc2NpdGFcclxuXHRcdFx0XHQpXHJcblx0XHRcdClcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb24gPSBjaGFuZ2VzJC5zdWJzY3JpYmUoKF8pID0+IHRoaXMuZG9uZS5lbWl0KF8pKTtcclxuXHJcblx0XHR0aGlzLmNvbXVuaSQgPSBwcm92aW5jaWFOYXNjaXRhLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG5cdFx0XHR0YXAoXyA9PiBjb211bmVOYXNjaXRhLnNldFZhbHVlKG51bGwpICksXHJcblx0XHRcdHN0YXJ0V2l0aCh0aGlzLmluZm9uYXNjaXRhLnByb3ZpbmNpYU5hc2NpdGEpLFxyXG5cdFx0XHRmaWx0ZXIoKHgpID0+IHgpLFxyXG5cdFx0XHRzd2l0Y2hNYXAoKHZhbHVlKSA9PiB0aGlzLnRlcnJpdG9yaW8uZ2V0Q29tdW5pJCh2YWx1ZSkpXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBpbml0aWFsaXplKCkge1xyXG5cdFx0aWYgKCF0aGlzLmluZm9uYXNjaXRhKSB7XHJcblx0XHRcdHRoaXMuaW5mb25hc2NpdGEgPSB0aGlzLmluaXRJbmZvTmFzY2l0YSgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aW5pdEluZm9OYXNjaXRhKCk6IEluZm9OYXNjaXRhUEZEVE8ge1xyXG5cdFx0Y29uc3QgaW5pdEluZm9OYXNjaXRhTmV3ID0gbmV3IEluZm9OYXNjaXRhUEZEVE8oKTtcclxuXHRcdHJldHVybiBpbml0SW5mb05hc2NpdGFOZXc7XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblx0fVxyXG5cclxuXHRjb21wYXJlQ29tdW5pKGMxOiBDb211bmUsIGMyOiBDb211bmUpIHtcclxuXHRcdHJldHVybiBjMSAmJiBjMiA/IGMxLmNvZGljZUNhdGFzdGFsZSA9PT0gYzIuY29kaWNlQ2F0YXN0YWxlIDogYzEgPT09IGMyO1xyXG5cdH1cclxuXHJcblx0cHVibGljIF9yZXNldEZvcm0oKSB7XHJcblx0XHR0aGlzLmZvcm0/LnJlc2V0KCk7XHJcblx0fVxyXG59XHJcbiJdfQ==