UNPKG

iptdevs-design-system

Version:

Library common elements into IPT Plattform.

213 lines 37 kB
import { Component, Input, Output, EventEmitter } from '@angular/core'; import Swal from 'sweetalert2'; import * as i0 from "@angular/core"; import * as i1 from "../../core/utils/base-service/base.service"; import * as i2 from "../../core/services/commercial-service/comercial.service"; import * as i3 from "../logic/cod-self-managed-controls"; import * as i4 from "../logic/local-storage-cod.service"; import * as i5 from "primeng/steps"; import * as i6 from "primeng/api"; import * as i7 from "primeng/tabview"; import * as i8 from "../steps/cod-form-step-one/cod-self-form-step-one.component"; import * as i9 from "../steps/cod-form-step-two/cod-self-form-step-two.component"; import * as i10 from "../steps/cod-form-step-three/cod-self-form-step-three.component"; import * as i11 from "../steps/cod-form-step-four/cod-self-form-step-four.component"; export class CodSelfManagedComponent { constructor(baseService, commercialService, codSelfManagedFormControls, localStorageCodSelfManaged) { this.baseService = baseService; this.commercialService = commercialService; this.codSelfManagedFormControls = codSelfManagedFormControls; this.localStorageCodSelfManaged = localStorageCodSelfManaged; this.okCreatedCOD = new EventEmitter(); this.currentStep = 0; this.loaderMessage = ''; this.isLoading = false; this.formSteps = 4; this.codCreationSubscription = null; this.countInitialStep = 0; this.items = [ { label: 'Datos', icon: 'pi pi-user-edit', id: '1' }, { label: 'Planes', icon: 'pi pi-box', id: '2' }, { label: 'Pago', icon: 'pi pi-wallet', id: '3' }, { label: 'Facturacion', icon: 'pi pi-receipt', id: '4' } ]; } ngOnInit() { this.countInitialStep = 1; this.changeStep(this.currentStep); } ngOnDestroy() { if (this.subscription) { this.subscription.unsubscribe(); } } changeStep(step) { this.currentStep = step; const request = { currentStep: this.currentStep + 1, user_code: this.baseService.getUserCode(), count: this.countInitialStep, token: this.baseService.getUserToken() }; this.commercialService.updateControlStepsCodSelfManaged(request).subscribe((response) => { this.countInitialStep = 0; }); } saveFinancingData(data) { if (data) { const dates = []; data.forEach(p => { const date = p[2]; dates.push(date); }); this.financingData = dates; } } handleIdTypesChanged(idTypes) { this.idTypes = idTypes; } getFormAction(action) { if (!this.financingData && this.localStorageCodSelfManaged.getCodFormData(4, 'payment_method') === '1') { Swal.fire({ title: 'Opss', text: 'Debe hacer el cálculo de las cuotas en el paso 4', icon: 'error' }); return; } const totalData = []; this.subscription = this.codSelfManagedFormControls.getControlValues().subscribe((controls) => { for (let i = 1; i <= this.formSteps; i++) { const controlsByStep = controls[i - 1]; controlsByStep.forEach(control => { const value = this.localStorageCodSelfManaged.getCodFormData(i, control.name); totalData.push({ control: control.name, isRequired: control.required, value, description: control.description }); }); } const validationErrors = this.validateFormData(totalData); if (validationErrors.length > 0) { Swal.fire({ title: 'Error Form Action Validate Error', html: validationErrors.join('<br>'), icon: 'error' }); return; } if (action === 'create') { this.createCOD(totalData); } this.subscription?.unsubscribe(); }); } validateFormData(data) { const errors = []; data.forEach(element => { if (!element.value && element.isRequired) { errors.push(`Revisar el campo: "${element.description}"`); } }); return errors; } createCOD(totalData) { if (this.codCreationSubscription && !this.codCreationSubscription.closed) { return; } this.isLoading = true; this.loaderMessage = 'Creando COD, espere un momento'; const request = this.getCreateCOD(totalData); this.codCreationSubscription = this.commercialService.createCodSelfManaged(request).subscribe({ next: (response) => { this.isLoading = false; this.loaderMessage = ''; if (response.message.code === 1) { Swal.fire({ title: 'Perfecto!', text: 'El COD ha sido creado exitosamente.', icon: 'success' }); this.localStorageCodSelfManaged.clearData(); this.okCreatedCOD.emit(response.data); } else { Swal.fire({ title: 'Warning!', text: response.message.message, icon: 'error' }); } }, error: (err) => { this.isLoading = false; this.loaderMessage = ''; Swal.fire({ title: 'Error en la creación de COD', text: err.message, icon: 'error' }); }, complete: () => { this.codCreationSubscription = null; } }); } getCreateCOD(data) { return { token: this.baseService.getUserToken(), student_name: this.getDataByName(data, 'student_name'), student_last_name: this.getDataByName(data, 'student_last_name'), student_id_card_type: this.getDataByName(data, 'student_id_card_type'), student_id_card: this.getDataByName(data, 'student_id_card'), gender: this.getDataByName(data, 'gender'), birthdate: this.getDataByName(data, 'birthdate'), age: this.getDataByName(data, 'age'), country: this.getDataByName(data, 'country'), state: this.getDataByName(data, 'state'), city: this.getDataByName(data, 'city'), student_email: this.getDataByName(data, 'student_email'), student_phone_indicative: this.getDataByName(data, 'student_phone_indicative'), student_phone_number: this.getDataByName(data, 'student_phone_number'), educational_level: this.getDataByName(data, 'grade'), agreement_by_category: this.getDataByName(data, 'agreement_by_category'), academic_plan: this.getDataByName(data, 'academic_plan'), course_type: this.getDataByName(data, 'course_type'), english_level: this.getDataByName(data, 'english_level'), availible_courses: this.getDataByName(data, 'availible_courses'), course_modality: this.getDataByName(data, 'course_modality'), program_price: this.getDataByName(data, 'program_price'), payment_date: this.getDataByName(data, 'payment_date'), payment_dates: this.financingData, payment_method: this.getDataByName(data, 'payment_method'), quota_times: this.getDataByName(data, 'quota_times'), total_price: this.getDataByName(data, 'total_price'), paid_level: this.getDataByName(data, 'paid_level'), optionsPayments: this.getDataByName(data, 'optionsPayments'), invoicing_name: this.getDataByName(data, 'invoicing_name'), invoicing_Apellido: this.getDataByName(data, 'invoicing_Apellido'), invoicing_idType: this.getDataByName(data, 'invoicing_idType'), invoicing_document: this.getDataByName(data, 'invoicing_document') }; } getDataByName(data, name) { return data.filter(item => item.control === name)[0]?.value || null; } } CodSelfManagedComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CodSelfManagedComponent, deps: [{ token: i1.BaseService }, { token: i2.CommercialService }, { token: i3.CodSelfManagedControls }, { token: i4.LocalStorageCodSelfMaganedService }], target: i0.ɵɵFactoryTarget.Component }); CodSelfManagedComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: CodSelfManagedComponent, selector: "ipt-cod-self-managed", inputs: { user: "user", scorePlacementTest: "scorePlacementTest", codPrevious: "codPrevious" }, outputs: { okCreatedCOD: "okCreatedCOD" }, ngImport: i0, template: "<!-- <p-steps [model]=\"items\" [(activeIndex)]=\"currentStep\" (activeIndexChange)=\"currentStep = $event\" ></p-steps> -->\n<p-steps [model]=\"items\" [(activeIndex)]=\"currentStep\" (activeIndexChange)=\"currentStep = $event\">\n <ng-template pTemplate=\"item\" let-item>\n <span class=\"p-steps-number\">{{ item.id }}</span>\n <i [class]=\"item.icon\"></i>\n <span class=\"p-steps-title\">{{ item.label }}</span>\n </ng-template>\n</p-steps>\n\n<p-tabView [activeIndex]=\"currentStep\" (activeIndexChange)=\"currentStep = $event\">\n <p-tabPanel [disabled]=\"true\">\n <app-cod-self-form-step-one (completed)=\"changeStep($event)\" [userStudent]=\"user\" (idTypesChanged)=\"handleIdTypesChanged($event)\"></app-cod-self-form-step-one>\n </p-tabPanel>\n <p-tabPanel [disabled]=\"true\">\n <app-cod-self-form-step-two (completed)=\"changeStep($event)\" [codPrevious]=\"codPrevious\" [scorePlacementTest]=\"scorePlacementTest\"></app-cod-self-form-step-two>\n </p-tabPanel>\n <p-tabPanel [disabled]=\"true\">\n <app-cod-self-form-step-three (completed)=\"changeStep($event)\" (financingData)=\"saveFinancingData($event)\"></app-cod-self-form-step-three>\n </p-tabPanel>\n <p-tabPanel [disabled]=\"true\">\n <app-cod-self-form-step-four (completed)=\"changeStep($event)\" [idTypes]=\"idTypes\" (action)=\"getFormAction($event)\"></app-cod-self-form-step-four>\n </p-tabPanel>\n</p-tabView>\n", styles: [":host ::ng-deep .p-tabview-nav{display:none!important}:host ::ng-deep .p-steps .p-steps-item.p-highlight .p-steps-title{font-weight:400;color:#fff;font-family:Poppins}:host ::ng-deep .p-steps .p-steps-item .p-menuitem-link{border-radius:4px;background:#2563eb;padding-top:5px;width:4.6rem}\n"], dependencies: [{ kind: "component", type: i5.Steps, selector: "p-steps", inputs: ["activeIndex", "model", "readonly", "style", "styleClass"], outputs: ["activeIndexChange"] }, { kind: "directive", type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i7.TabView, selector: "p-tabView", inputs: ["orientation", "style", "styleClass", "controlClose", "scrollable", "activeIndex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i7.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i8.CodSelfFormStepOneComponent, selector: "app-cod-self-form-step-one", inputs: ["userStudent"], outputs: ["completed", "idTypesChanged"] }, { kind: "component", type: i9.CodSelfFormStepTwoComponent, selector: "app-cod-self-form-step-two", inputs: ["scorePlacementTest", "codPrevious"], outputs: ["completed"] }, { kind: "component", type: i10.CodSelfFormStepThreeComponent, selector: "app-cod-self-form-step-three", outputs: ["completed", "financingData"] }, { kind: "component", type: i11.CodSelfFormStepFourComponent, selector: "app-cod-self-form-step-four", inputs: ["idTypes"], outputs: ["completed", "action"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CodSelfManagedComponent, decorators: [{ type: Component, args: [{ selector: 'ipt-cod-self-managed', template: "<!-- <p-steps [model]=\"items\" [(activeIndex)]=\"currentStep\" (activeIndexChange)=\"currentStep = $event\" ></p-steps> -->\n<p-steps [model]=\"items\" [(activeIndex)]=\"currentStep\" (activeIndexChange)=\"currentStep = $event\">\n <ng-template pTemplate=\"item\" let-item>\n <span class=\"p-steps-number\">{{ item.id }}</span>\n <i [class]=\"item.icon\"></i>\n <span class=\"p-steps-title\">{{ item.label }}</span>\n </ng-template>\n</p-steps>\n\n<p-tabView [activeIndex]=\"currentStep\" (activeIndexChange)=\"currentStep = $event\">\n <p-tabPanel [disabled]=\"true\">\n <app-cod-self-form-step-one (completed)=\"changeStep($event)\" [userStudent]=\"user\" (idTypesChanged)=\"handleIdTypesChanged($event)\"></app-cod-self-form-step-one>\n </p-tabPanel>\n <p-tabPanel [disabled]=\"true\">\n <app-cod-self-form-step-two (completed)=\"changeStep($event)\" [codPrevious]=\"codPrevious\" [scorePlacementTest]=\"scorePlacementTest\"></app-cod-self-form-step-two>\n </p-tabPanel>\n <p-tabPanel [disabled]=\"true\">\n <app-cod-self-form-step-three (completed)=\"changeStep($event)\" (financingData)=\"saveFinancingData($event)\"></app-cod-self-form-step-three>\n </p-tabPanel>\n <p-tabPanel [disabled]=\"true\">\n <app-cod-self-form-step-four (completed)=\"changeStep($event)\" [idTypes]=\"idTypes\" (action)=\"getFormAction($event)\"></app-cod-self-form-step-four>\n </p-tabPanel>\n</p-tabView>\n", styles: [":host ::ng-deep .p-tabview-nav{display:none!important}:host ::ng-deep .p-steps .p-steps-item.p-highlight .p-steps-title{font-weight:400;color:#fff;font-family:Poppins}:host ::ng-deep .p-steps .p-steps-item .p-menuitem-link{border-radius:4px;background:#2563eb;padding-top:5px;width:4.6rem}\n"] }] }], ctorParameters: function () { return [{ type: i1.BaseService }, { type: i2.CommercialService }, { type: i3.CodSelfManagedControls }, { type: i4.LocalStorageCodSelfMaganedService }]; }, propDecorators: { user: [{ type: Input }], scorePlacementTest: [{ type: Input }], codPrevious: [{ type: Input }], okCreatedCOD: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLXNlbGYtbWFuYWdlZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29kLXNlbGYtbWFuYWdlZC9jb2QtZm9ybS1zZWxmLW1hbmFnZWQvY29kLXNlbGYtbWFuYWdlZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29kLXNlbGYtbWFuYWdlZC9jb2QtZm9ybS1zZWxmLW1hbmFnZWQvY29kLXNlbGYtbWFuYWdlZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVkxRixPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFVL0IsTUFBTSxPQUFPLHVCQUF1QjtJQXdCbEMsWUFBb0IsV0FBd0IsRUFDbEMsaUJBQW9DLEVBQ3BDLDBCQUFpRCxFQUNqRCwwQkFBNEQ7UUFIbEQsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDbEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQywrQkFBMEIsR0FBMUIsMEJBQTBCLENBQXVCO1FBQ2pELCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBa0M7UUF0QjVELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUUxQyxnQkFBVyxHQUFXLENBQUMsQ0FBQztRQUV4QixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUMzQixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFDdEIsNEJBQXVCLEdBQXdCLElBQUksQ0FBQztRQUUzRCxxQkFBZ0IsR0FBVSxDQUFDLENBQUM7UUFHNUIsVUFBSyxHQUFlO1lBQ2xCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVB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Q3BELFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUM7WUFDcEQsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQztZQUNsRCxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUM7WUFDNUQsY0FBYyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDO1lBQzFELGtCQUFrQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLG9CQUFvQixDQUFDO1lBQ2xFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDO1lBQzlELGtCQUFrQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLG9CQUFvQixDQUFDO1NBQ25FLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQVcsRUFBRSxJQUFZO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQztJQUN0RSxDQUFDOztvSEE1TVUsdUJBQXVCO3dHQUF2Qix1QkFBdUIsdU1DdEJwQyxnNUNBdUJBOzJGRERhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxzQkFBc0I7dU5BTXZCLElBQUk7c0JBQVosS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuLy9pbXBvcnQgc2VydmljZXNcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9iYXNlLXNlcnZpY2UvYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1lcmNpYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9jb21tZXJjaWFsLXNlcnZpY2UvY29tZXJjaWFsLnNlcnZpY2UnO1xuXG4vL2ltcG9ydCBNb2RlbHNcbmltcG9ydCB7IElVc2VySVBUUnFzIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvdXNlci91c2VyLXJzLm1vZGVsJztcblxuLy9pbXBvcnQgUHJpbWUgbmdcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xuaW1wb3J0IHsgQ29kU2VsZk1hbmFnZWRDb250cm9scywgQ29udHJvbFN0ZXBzIH0gZnJvbSAnLi4vbG9naWMvY29kLXNlbGYtbWFuYWdlZC1jb250cm9scyc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VDb2RTZWxmTWFnYW5lZFNlcnZpY2UgfSBmcm9tICcuLi9sb2dpYy9sb2NhbC1zdG9yYWdlLWNvZC5zZXJ2aWNlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpcHQtY29kLXNlbGYtbWFuYWdlZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2Qtc2VsZi1tYW5hZ2VkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29kLXNlbGYtbWFuYWdlZC5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ29kU2VsZk1hbmFnZWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgdXNlcj86IElVc2VySVBUUnFzO1xuICBASW5wdXQoKSBzY29yZVBsYWNlbWVudFRlc3Q/OmFueTtcbiAgQElucHV0KCkgY29kUHJldmlvdXM/OmFueTtcbiAgQE91dHB1dCgpIG9rQ3JlYXRlZENPRCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHB1YmxpYyBjdXJyZW50U3RlcDogbnVtYmVyID0gMDtcbiAgcHVibGljIGZpbmFuY2luZ0RhdGE/OiBhbnlbXTtcbiAgcHVibGljIGxvYWRlck1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBmb3JtU3RlcHM6IG51bWJlciA9IDQ7XG4gIHB1YmxpYyBjb2RDcmVhdGlvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgY291bnRJbml0aWFsU3RlcDpudW1iZXIgPSAwO1xuICBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIGlkVHlwZXM6IGFueTtcbiAgaXRlbXM6IE1lbnVJdGVtW10gPSBbXG4gICAgeyBsYWJlbDogJ0RhdG9zJywgaWNvbjogJ3BpIHBpLXVzZXItZWRpdCcsIGlkOiAnMScgfSxcbiAgICB7IGxhYmVsOiAnUGxhbmVzJywgaWNvbjogJ3BpIHBpLWJveCcsIGlkOiAnMicgfSxcbiAgICB7IGxhYmVsOiAnUGFnbycsIGljb246ICdwaSBwaS13YWxsZXQnLCBpZDogJzMnIH0sXG4gICAgeyBsYWJlbDogJ0ZhY3R1cmFjaW9uJywgaWNvbjogJ3BpIHBpLXJlY2VpcHQnLCBpZDogJzQnIH1cbiAgXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJhc2VTZXJ2aWNlOiBCYXNlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbW1lcmNpYWxTZXJ2aWNlOiBDb21tZXJjaWFsU2VydmljZSxcbiAgICBwcml2YXRlIGNvZFNlbGZNYW5hZ2VkRm9ybUNvbnRyb2xzOkNvZFNlbGZNYW5hZ2VkQ29udHJvbHMsXG4gICAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VDb2RTZWxmTWFuYWdlZDpMb2NhbFN0b3JhZ2VDb2RTZWxmTWFnYW5lZFNlcnZpY2Upe31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvdW50SW5pdGlhbFN0ZXAgPSAxO1xuICAgIHRoaXMuY2hhbmdlU3RlcCh0aGlzLmN1cnJlbnRTdGVwKTtcblxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVN0ZXAoc3RlcDogYW55KSB7XG4gICAgdGhpcy5jdXJyZW50U3RlcCA9IHN0ZXA7XG5cbiAgICBjb25zdCByZXF1ZXN0OiBhbnkgPSB7XG4gICAgICBjdXJyZW50U3RlcDogdGhpcy5jdXJyZW50U3RlcCArIDEsXG4gICAgICB1c2VyX2NvZGU6IHRoaXMuYmFzZVNlcnZpY2UuZ2V0VXNlckNvZGUoKSxcbiAgICAgIGNvdW50OiB0aGlzLmNvdW50SW5pdGlhbFN0ZXAsXG4gICAgICB0b2tlbjogdGhpcy5iYXNlU2VydmljZS5nZXRVc2VyVG9rZW4oKVxuICAgIH1cbiAgICB0aGlzLmNvbW1lcmNpYWxTZXJ2aWNlLnVwZGF0ZUNvbnRyb2xTdGVwc0NvZFNlbGZNYW5hZ2VkKHJlcXVlc3QpLnN1YnNjcmliZSgocmVzcG9uc2UpPT57XG4gICAgICB0aGlzLmNvdW50SW5pdGlhbFN0ZXAgPSAwO1xuICAgIH0pXG5cbiAgfVxuICBzYXZlRmluYW5jaW5nRGF0YShkYXRhOiBhbnlbXSkge1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBjb25zdCBkYXRlczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGRhdGEuZm9yRWFjaChwID0+IHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHBbMl07XG4gICAgICAgIGRhdGVzLnB1c2goZGF0ZSk7XG4gICAgICB9KVxuICAgICAgdGhpcy5maW5hbmNpbmdEYXRhID0gZGF0ZXM7XG4gICAgfVxuICB9XG4gIGhhbmRsZUlkVHlwZXNDaGFuZ2VkKGlkVHlwZXM6IGFueSkge1xuICAgIHRoaXMuaWRUeXBlcyA9IGlkVHlwZXM7XG4gIH1cbiAgZ2V0Rm9ybUFjdGlvbihhY3Rpb246IHN0cmluZykge1xuICAgIGlmICghdGhpcy5maW5hbmNpbmdEYXRhICYmIHRoaXMubG9jYWxTdG9yYWdlQ29kU2VsZk1hbmFnZWQuZ2V0Q29kRm9ybURhdGEoNCwgJ3BheW1lbnRfbWV0aG9kJykgPT09ICcxJykge1xuICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgdGl0bGU6ICdPcHNzJyxcbiAgICAgICAgdGV4dDogJ0RlYmUgaGFjZXIgZWwgY8OhbGN1bG8gZGUgbGFzIGN1b3RhcyBlbiBlbCBwYXNvIDQnLFxuICAgICAgICBpY29uOiAnZXJyb3InXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0b3RhbERhdGE6IGFueVtdID0gW107XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNvZFNlbGZNYW5hZ2VkRm9ybUNvbnRyb2xzLmdldENvbnRyb2xWYWx1ZXMoKS5zdWJzY3JpYmUoKGNvbnRyb2xzKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLmZvcm1TdGVwczsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xzQnlTdGVwOiBDb250cm9sU3RlcHNbXSA9IGNvbnRyb2xzW2ktMV07XG4gICAgICAgIGNvbnRyb2xzQnlTdGVwLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmxvY2FsU3RvcmFnZUNvZFNlbGZNYW5hZ2VkLmdldENvZEZvcm1EYXRhKGksIGNvbnRyb2wubmFtZSk7XG4gICAgICAgICAgdG90YWxEYXRhLnB1c2goe1xuICAgICAgICAgICAgY29udHJvbDogY29udHJvbC5uYW1lLFxuICAgICAgICAgICAgaXNSZXF1aXJlZDogY29udHJvbC5yZXF1aXJlZCxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGNvbnRyb2wuZGVzY3JpcHRpb25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvcnMgPSB0aGlzLnZhbGlkYXRlRm9ybURhdGEodG90YWxEYXRhKTtcbiAgICAgIGlmICh2YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICB0aXRsZTogJ0Vycm9yIEZvcm0gQWN0aW9uIFZhbGlkYXRlIEVycm9yJyxcbiAgICAgICAgICBodG1sOiB2YWxpZGF0aW9uRXJyb3JzLmpvaW4oJzxicj4nKSxcbiAgICAgICAgICBpY29uOiAnZXJyb3InXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChhY3Rpb24gPT09ICdjcmVhdGUnKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlQ09EKHRvdGFsRGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVGb3JtRGF0YShkYXRhOiBhbnlbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgaWYgKCFlbGVtZW50LnZhbHVlICYmIGVsZW1lbnQuaXNSZXF1aXJlZCkge1xuICAgICAgICBlcnJvcnMucHVzaChgUmV2aXNhciBlbCBjYW1wbzogXCIke2VsZW1lbnQuZGVzY3JpcHRpb259XCJgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgY3JlYXRlQ09EKHRvdGFsRGF0YTogYW55W10pIHtcbiAgICBpZiAodGhpcy5jb2RDcmVhdGlvblN1YnNjcmlwdGlvbiAmJiAhdGhpcy5jb2RDcmVhdGlvblN1YnNjcmlwdGlvbi5jbG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMubG9hZGVyTWVzc2FnZSA9ICdDcmVhbmRvIENPRCwgZXNwZXJlIHVuIG1vbWVudG8nO1xuICAgIGNvbnN0IHJlcXVlc3Q6IGFueSA9IHRoaXMuZ2V0Q3JlYXRlQ09EKHRvdGFsRGF0YSk7XG5cbiAgICB0aGlzLmNvZENyZWF0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5jb21tZXJjaWFsU2VydmljZS5jcmVhdGVDb2RTZWxmTWFuYWdlZChyZXF1ZXN0KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2FkZXJNZXNzYWdlID0gJyc7XG4gICAgICAgIGlmIChyZXNwb25zZS5tZXNzYWdlLmNvZGUgPT09IDEpIHtcbiAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgdGl0bGU6ICdQZXJmZWN0byEnLFxuICAgICAgICAgICAgdGV4dDogJ0VsIENPRCBoYSBzaWRvIGNyZWFkbyBleGl0b3NhbWVudGUuJyxcbiAgICAgICAgICAgIGljb246ICdzdWNjZXNzJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlQ29kU2VsZk1hbmFnZWQuY2xlYXJEYXRhKCk7XG4gICAgICAgICAgdGhpcy5va0NyZWF0ZWRDT0QuZW1pdChyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgdGl0bGU6ICdXYXJuaW5nIScsXG4gICAgICAgICAgICB0ZXh0OiByZXNwb25zZS5tZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgICBpY29uOiAnZXJyb3InXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9hZGVyTWVzc2FnZSA9ICcnO1xuICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgIHRpdGxlOiAnRXJyb3IgZW4gbGEgY3JlYWNpw7NuIGRlIENPRCcsXG4gICAgICAgICAgdGV4dDogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgaWNvbjogJ2Vycm9yJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICB0aGlzLmNvZENyZWF0aW9uU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldENyZWF0ZUNPRChkYXRhOiBhbnlbXSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuOiB0aGlzLmJhc2VTZXJ2aWNlLmdldFVzZXJUb2tlbigpLFxuICAgICAgc3R1ZGVudF9uYW1lOiB0aGlzLmdldERhdGFCeU5hbWUoZGF0YSwgJ3N0dWRlbnRfbmFtZScpLFxuICAgICAgc3R1ZGVudF9sYXN0X25hbWU6IHRoaXMuZ2V0RGF0YUJ5TmFtZShkYXRhLCAnc3R1ZGVudF9sYXN0X25hbWUnKSxcbiAgICAgIHN0dWRlbnRfaWRfY2FyZF90eXBlOiB0aGlzLmdldERhdGFCeU5hbWUoZGF0YSwgJ3N0dWRlbnRfaWRfY2FyZF90eXBlJyksXG4gICAgICBzdHVkZW50X2lkX2NhcmQ6IHRoaXMuZ2V0RGF0YUJ5TmFtZShkYXRhLCAnc3R1ZGVudF9pZF9jYXJkJyksXG4gICAgICBnZW5kZXI6IHRoaXMuZ2V0RGF0YUJ5TmFtZShkYXRhLCAnZ2VuZGVyJyksXG4gICAgICBiaXJ0aGRhdGU6IHRoaXMuZ2V0RGF0YUJ5TmFtZShkYXRhLCAnYmlydGhkYXRlJyksXG4gICAgICBhZ2U6IHRoaXMuZ2V0RGF0YUJ5TmFtZShkYXRhLCAnYWdlJyksXG4gICAgICBjb3VudHJ5OiB0aGlzLmdldERhdGFCeU5hbWUoZGF0YSwgJ2NvdW50cnknKSxcbiAgICAgIHN0YXRlOiB0aGlzLmdldERhdGFCeU5hbWUoZGF0YSwgJ3N0YXRlJyksXG4gICAgICBjaXR5OiB0aGlzLmdldERhdGFCeU5hbWUoZGF0YSwgJ2NpdHknKSxcbiAgICAgIHN0dWRlbnRfZW1haWw6IHRoaXMuZ2V0RGF0YUJ5TmFtZShkYXRhLCAnc3R1ZGVudF9lbWFpbCcpLFxuICAgICAgc3R1ZGVudF9waG9uZV9pbmRpY2F0aXZlOiB0aGlzLmdldERhdGFCeU5hbWUoZGF0YSwgJ3N0dWRlbnRfcGhvbmVfaW5kaWNhdGl2ZScpLFxuICAgICAgc3R1ZGVudF9waG9uZV9udW1iZXI6IHRoaXMuZ2V0RGF0YUJ5TmFtZShkYXRhLCAnc3R1ZGVudF9waG9uZV9udW1iZXInKSxcbiAgICAgIGVkdWNhdGlvbmFsX2xldmVsOiB0aGlzLmdldERhdGFCeU5hbWUoZGF0YSwgJ2dyYWRlJyksXG4gICAgICBhZ3JlZW1lbnRfYnlfY2F0ZWdvcnk6IHRoaXMuZ2V0RGF0YUJ5TmFtZShkYXRhLCAnYWdyZWVtZW50X2J5X2NhdGVnb3J5JyksXG4gICAgICBhY2FkZW1pY19wbGFuOiB0aGlzLmdldERhdGFCeU5hbWUoZGF0YSwgJ2FjYWRlbWljX3BsYW4nKSxcbiAgICAgIGNvdXJzZV90eXBlOiB0aGlzLmdldERhdGFCeU5hbWUoZGF0YSwgJ2NvdXJzZV90eXBlJyksXG4gICAgICBlbmdsaXNoX2xldmVsOiB0aGlzLmdldERhdGFCeU5hbWUoZGF0YSwgJ2VuZ2xpc2hfbGV2ZWwnKSxcbiAgICAgIGF2YWlsaWJsZV9jb3Vyc2VzOiB0aGlzLmdldERhdGFCeU5hbWUoZGF0YSwgJ2F2YWlsaWJsZV9jb3Vyc2VzJyksXG4gICAgICBjb3Vyc2VfbW9kYWxpdHk6IHRoaXMuZ2V0RGF0YUJ5TmFtZShkYXRhLCAnY291cnNlX21vZGFsaXR5JyksXG4gICAgICBwcm9ncmFtX3ByaWNlOiB0aGlzLmdldERhdGFCeU5hbWUoZGF0YSwgJ3Byb2dyYW1fcHJpY2UnKSxcbiAgICAgIHBheW1lbnRfZGF0ZTogdGhpcy5nZXREYXRhQnlOYW1lKGRhdGEsICdwYXltZW50X2RhdGUnKSxcbiAgICAgIHBheW1lbnRfZGF0ZXM6IHRoaXMuZmluYW5jaW5nRGF0YSEsXG4gICAgICBwYXltZW50X21ldGhvZDogdGhpcy5nZXREYXRhQnlOYW1lKGRhdGEsICdwYXltZW50X21ldGhvZCcpLFxuICAgICAgcXVvdGFfdGltZXM6IHRoaXMuZ2V0RGF0YUJ5TmFtZShkYXRhLCAncXVvdGFfdGltZXMnKSxcbiAgICAgIHRvdGFsX3ByaWNlOiB0aGlzLmdldERhdGFCeU5hbWUoZGF0YSwgJ3RvdGFsX3ByaWNlJyksXG4gICAgICBwYWlkX2xldmVsOiB0aGlzLmdldERhdGFCeU5hbWUoZGF0YSwgJ3BhaWRfbGV2ZWwnKSxcbiAgICAgIG9wdGlvbnNQYXltZW50czogdGhpcy5nZXREYXRhQnlOYW1lKGRhdGEsICdvcHRpb25zUGF5bWVudHMnKSxcbiAgICAgIGludm9pY2luZ19uYW1lOiB0aGlzLmdldERhdGFCeU5hbWUoZGF0YSwgJ2ludm9pY2luZ19uYW1lJyksXG4gICAgICBpbnZvaWNpbmdfQXBlbGxpZG86IHRoaXMuZ2V0RGF0YUJ5TmFtZShkYXRhLCAnaW52b2ljaW5nX0FwZWxsaWRvJyksXG4gICAgICBpbnZvaWNpbmdfaWRUeXBlOiB0aGlzLmdldERhdGFCeU5hbWUoZGF0YSwgJ2ludm9pY2luZ19pZFR5cGUnKSxcbiAgICAgIGludm9pY2luZ19kb2N1bWVudDogdGhpcy5nZXREYXRhQnlOYW1lKGRhdGEsICdpbnZvaWNpbmdfZG9jdW1lbnQnKVxuICAgIH07XG4gIH1cblxuICBnZXREYXRhQnlOYW1lKGRhdGE6IGFueVtdLCBuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiBkYXRhLmZpbHRlcihpdGVtID0+IGl0ZW0uY29udHJvbCA9PT0gbmFtZSlbMF0/LnZhbHVlIHx8IG51bGw7XG4gIH1cbn1cbiIsIjwhLS0gPHAtc3RlcHMgW21vZGVsXT1cIml0ZW1zXCIgWyhhY3RpdmVJbmRleCldPVwiY3VycmVudFN0ZXBcIiAoYWN0aXZlSW5kZXhDaGFuZ2UpPVwiY3VycmVudFN0ZXAgPSAkZXZlbnRcIiA+PC9wLXN0ZXBzPiAtLT5cbjxwLXN0ZXBzIFttb2RlbF09XCJpdGVtc1wiIFsoYWN0aXZlSW5kZXgpXT1cImN1cnJlbnRTdGVwXCIgKGFjdGl2ZUluZGV4Q2hhbmdlKT1cImN1cnJlbnRTdGVwID0gJGV2ZW50XCI+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpdGVtXCIgbGV0LWl0ZW0+XG4gICAgPHNwYW4gY2xhc3M9XCJwLXN0ZXBzLW51bWJlclwiPnt7IGl0ZW0uaWQgfX08L3NwYW4+XG4gICAgPGkgW2NsYXNzXT1cIml0ZW0uaWNvblwiPjwvaT5cbiAgICA8c3BhbiBjbGFzcz1cInAtc3RlcHMtdGl0bGVcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLXN0ZXBzPlxuXG48cC10YWJWaWV3IFthY3RpdmVJbmRleF09XCJjdXJyZW50U3RlcFwiIChhY3RpdmVJbmRleENoYW5nZSk9XCJjdXJyZW50U3RlcCA9ICRldmVudFwiPlxuICA8cC10YWJQYW5lbCBbZGlzYWJsZWRdPVwidHJ1ZVwiPlxuICAgIDxhcHAtY29kLXNlbGYtZm9ybS1zdGVwLW9uZSAoY29tcGxldGVkKT1cImNoYW5nZVN0ZXAoJGV2ZW50KVwiIFt1c2VyU3R1ZGVudF09XCJ1c2VyXCIgKGlkVHlwZXNDaGFuZ2VkKT1cImhhbmRsZUlkVHlwZXNDaGFuZ2VkKCRldmVudClcIj48L2FwcC1jb2Qtc2VsZi1mb3JtLXN0ZXAtb25lPlxuICA8L3AtdGFiUGFuZWw+XG4gIDxwLXRhYlBhbmVsIFtkaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgPGFwcC1jb2Qtc2VsZi1mb3JtLXN0ZXAtdHdvIChjb21wbGV0ZWQpPVwiY2hhbmdlU3RlcCgkZXZlbnQpXCIgW2NvZFByZXZpb3VzXT1cImNvZFByZXZpb3VzXCIgW3Njb3JlUGxhY2VtZW50VGVzdF09XCJzY29yZVBsYWNlbWVudFRlc3RcIj48L2FwcC1jb2Qtc2VsZi1mb3JtLXN0ZXAtdHdvPlxuICA8L3AtdGFiUGFuZWw+XG4gIDxwLXRhYlBhbmVsIFtkaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgPGFwcC1jb2Qtc2VsZi1mb3JtLXN0ZXAtdGhyZWUgKGNvbXBsZXRlZCk9XCJjaGFuZ2VTdGVwKCRldmVudClcIiAoZmluYW5jaW5nRGF0YSk9XCJzYXZlRmluYW5jaW5nRGF0YSgkZXZlbnQpXCI+PC9hcHAtY29kLXNlbGYtZm9ybS1zdGVwLXRocmVlPlxuICA8L3AtdGFiUGFuZWw+XG4gIDxwLXRhYlBhbmVsIFtkaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgPGFwcC1jb2Qtc2VsZi1mb3JtLXN0ZXAtZm91ciAoY29tcGxldGVkKT1cImNoYW5nZVN0ZXAoJGV2ZW50KVwiIFtpZFR5cGVzXT1cImlkVHlwZXNcIiAoYWN0aW9uKT1cImdldEZvcm1BY3Rpb24oJGV2ZW50KVwiPjwvYXBwLWNvZC1zZWxmLWZvcm0tc3RlcC1mb3VyPlxuICA8L3AtdGFiUGFuZWw+XG48L3AtdGFiVmlldz5cbiJdfQ==