iptdevs-design-system 3.1.669 → 3.1.671

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,18 +1,28 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import Swal from 'sweetalert2';
2
3
  import * as i0 from "@angular/core";
3
4
  import * as i1 from "../../core/utils/base-service/base.service";
4
5
  import * as i2 from "../../core/services/commercial-service/comercial.service";
5
- import * as i3 from "primeng/steps";
6
- import * as i4 from "primeng/tabview";
7
- import * as i5 from "../steps/cod-form-step-one/cod-self-form-step-one.component";
8
- import * as i6 from "../steps/cod-form-step-two/cod-self-form-step-two.component";
9
- import * as i7 from "../steps/cod-form-step-three/cod-self-form-step-three.component";
10
- import * as i8 from "../steps/cod-form-step-four/cod-self-form-step-four.component";
6
+ import * as i3 from "../logic/cod-self-managed-controls";
7
+ import * as i4 from "../logic/local-storage-cod.service";
8
+ import * as i5 from "primeng/steps";
9
+ import * as i6 from "primeng/tabview";
10
+ import * as i7 from "../steps/cod-form-step-one/cod-self-form-step-one.component";
11
+ import * as i8 from "../steps/cod-form-step-two/cod-self-form-step-two.component";
12
+ import * as i9 from "../steps/cod-form-step-three/cod-self-form-step-three.component";
13
+ import * as i10 from "../steps/cod-form-step-four/cod-self-form-step-four.component";
11
14
  export class CodSelfManagedComponent {
12
- constructor(baseService, commercialService) {
15
+ constructor(baseService, commercialService, codSelfManagedFormControls, localStorageCodSelfManaged) {
13
16
  this.baseService = baseService;
14
17
  this.commercialService = commercialService;
18
+ this.codSelfManagedFormControls = codSelfManagedFormControls;
19
+ this.localStorageCodSelfManaged = localStorageCodSelfManaged;
20
+ this.okCreatedCOD = new EventEmitter();
15
21
  this.currentStep = 0;
22
+ this.loaderMessage = '';
23
+ this.isLoading = false;
24
+ this.formSteps = 4;
25
+ this.codCreationSubscription = null;
16
26
  this.countInitialStep = 0;
17
27
  this.items = [
18
28
  { label: 'Datos', id: '1' },
@@ -56,17 +66,141 @@ export class CodSelfManagedComponent {
56
66
  this.idTypes = idTypes;
57
67
  console.log(this.idTypes);
58
68
  }
69
+ getFormAction(action) {
70
+ if (!this.financingData && this.localStorageCodSelfManaged.getCodFormData(4, 'payment_method') === '1') {
71
+ Swal.fire({
72
+ title: 'Querido asesor',
73
+ text: 'Debe hacer el cálculo de las cuotas en el paso 4',
74
+ icon: 'error'
75
+ });
76
+ return;
77
+ }
78
+ const totalData = [];
79
+ this.subscription = this.codSelfManagedFormControls.getControlValues().subscribe((controls) => {
80
+ for (let i = 1; i <= this.formSteps; i++) {
81
+ let controlsByStep = controls[i - 1];
82
+ controlsByStep.forEach(control => {
83
+ let value = this.localStorageCodSelfManaged.getCodFormData(i, control.name);
84
+ totalData.push({
85
+ control: control.name,
86
+ isRequired: control.required,
87
+ value,
88
+ description: control.description
89
+ });
90
+ });
91
+ }
92
+ // Validar errores
93
+ for (let i = 0; i < totalData.length; i++) {
94
+ const element = totalData[i];
95
+ if (!element.value && element.isRequired) {
96
+ Swal.fire({
97
+ title: 'Error Form Action Validate Error',
98
+ text: `Revisar el campo: "${element.description}"`,
99
+ icon: 'error'
100
+ });
101
+ break;
102
+ }
103
+ }
104
+ if (action === 'create')
105
+ this.createCOD(totalData);
106
+ });
107
+ this.subscription?.unsubscribe();
108
+ }
109
+ createCOD(totalData) {
110
+ if (this.codCreationSubscription && !this.codCreationSubscription.closed) {
111
+ return;
112
+ }
113
+ this.isLoading = true;
114
+ this.loaderMessage = 'Creando COD, espere un momento';
115
+ let request = this.getCreateCOD(totalData);
116
+ console.log(request);
117
+ // this.commercialService.createCOD(request).subscribe({
118
+ // next: (response: any) => {
119
+ // if (response.message.code === 1) {
120
+ // this.isLoading = false;
121
+ // this.loaderMessage = '';
122
+ // Swal.fire({
123
+ // title: 'Perfecto!',
124
+ // text: 'El COD ha sido creado exitosamente.',
125
+ // icon: 'success'
126
+ // })
127
+ // this.localStorageCodSelfManaged.clearData();
128
+ // this.okCreatedCOD.emit(true);
129
+ // }else{
130
+ // this.isLoading = false;
131
+ // this.loaderMessage = '';
132
+ // Swal.fire({
133
+ // title: 'Warning!',
134
+ // text: response.message.message,
135
+ // icon: 'error'
136
+ // })
137
+ // }
138
+ // },
139
+ // error: (err: any) => {
140
+ // this.isLoading = false;
141
+ // this.loaderMessage = '';
142
+ // Swal.fire({
143
+ // title: 'Error in cod creation',
144
+ // text: err.message,
145
+ // icon: 'error'
146
+ // })
147
+ // },
148
+ // complete: () => {
149
+ // this.codCreationSubscription = null;
150
+ // }
151
+ // })
152
+ }
153
+ getCreateCOD(data) {
154
+ let request = {
155
+ token: this.baseService.getUserToken(),
156
+ student_name: data.filter(data => data.control === 'student_name')[0].value,
157
+ student_last_name: data.filter(data => data.control === 'student_last_name')[0].value,
158
+ student_id_card_type: data.filter(data => data.control === 'student_id_card_type')[0].value,
159
+ student_id_card: data.filter(data => data.control === 'student_id_card')[0].value,
160
+ gender: data.filter(data => data.control === 'gender')[0].value,
161
+ birthdate: data.filter(data => data.control === 'birthdate')[0].value,
162
+ age: data.filter(data => data.control === 'age')[0].value,
163
+ country: data.filter(data => data.control === 'country')[0].value,
164
+ state: data.filter(data => data.control === 'state')[0].value,
165
+ city: data.filter(data => data.control === 'city')[0].value,
166
+ student_email: data.filter(data => data.control === 'student_email')[0].value,
167
+ student_phone_indicative: data.filter(data => data.control === 'student_phone_indicative')[0].value,
168
+ student_phone_number: data.filter(data => data.control === 'student_phone_number')[0].value,
169
+ educational_level: data.filter(data => data.control === 'grade')[0].value,
170
+ agreement_by_category: data.filter(data => data.control === 'agreement_by_category')[0].value,
171
+ academic_plan: data.filter(data => data.control === 'academic_plan')[0].value,
172
+ course_type: data.filter(data => data.control === 'course_type')[0].value,
173
+ english_level: data.filter(data => data.control === 'english_level')[0].value,
174
+ availible_courses: data.filter(data => data.control === 'availible_courses')[0].value,
175
+ course_modality: data.filter(data => data.control === 'course_modality')[0].value,
176
+ program_price: data.filter(data => data.control === 'program_price')[0].value,
177
+ payment_date: data.filter(data => data.control === 'payment_date')[0].value,
178
+ payment_method: data.filter(data => data.control === 'payment_method')[0].value,
179
+ quota_times: data.filter(data => data.control === 'quota_times')[0].value,
180
+ total_price: data.filter(data => data.control === 'total_price')[0].value,
181
+ paid_level: data.filter(data => data.control === 'paid_level')[0].value,
182
+ payment_dates: this.financingData,
183
+ optionsPayments: data.filter(data => data.control === 'optionsPayments')[0].value,
184
+ invoicing_name: data.filter(data => data.control === 'invoicing_name')[0].value,
185
+ invoicing_Apellido: data.filter(data => data.control === 'invoicing_Apellido')[0].value,
186
+ invoicing_idType: data.filter(data => data.control === 'invoicing_idType')[0].value,
187
+ invoicing_document: data.filter(data => data.control === 'invoicing_document')[0].value,
188
+ };
189
+ return request;
190
+ }
59
191
  }
60
- CodSelfManagedComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CodSelfManagedComponent, deps: [{ token: i1.BaseService }, { token: i2.CommercialService }], target: i0.ɵɵFactoryTarget.Component });
61
- 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" }, ngImport: i0, template: "<p-steps [model]=\"items\" [(activeIndex)]=\"currentStep\" (activeIndexChange)=\"currentStep = $event\" ></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\"></app-cod-self-form-step-four>\n </p-tabPanel>\n</p-tabView>\n", styles: [":host ::ng-deep .p-tabview-nav{display:none!important}\n"], dependencies: [{ kind: "component", type: i3.Steps, selector: "p-steps", inputs: ["activeIndex", "model", "readonly", "style", "styleClass"], outputs: ["activeIndexChange"] }, { kind: "component", type: i4.TabView, selector: "p-tabView", inputs: ["orientation", "style", "styleClass", "controlClose", "scrollable", "activeIndex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i4.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i5.CodSelfFormStepOneComponent, selector: "app-cod-self-form-step-one", inputs: ["userStudent"], outputs: ["completed", "idTypesChanged"] }, { kind: "component", type: i6.CodSelfFormStepTwoComponent, selector: "app-cod-self-form-step-two", inputs: ["scorePlacementTest", "codPrevious"], outputs: ["completed"] }, { kind: "component", type: i7.CodSelfFormStepThreeComponent, selector: "app-cod-self-form-step-three", outputs: ["completed", "financingData"] }, { kind: "component", type: i8.CodSelfFormStepFourComponent, selector: "app-cod-self-form-step-four", inputs: ["idTypes"], outputs: ["completed"] }] });
192
+ 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 });
193
+ 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\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}\n"], dependencies: [{ kind: "component", type: i5.Steps, selector: "p-steps", inputs: ["activeIndex", "model", "readonly", "style", "styleClass"], outputs: ["activeIndexChange"] }, { kind: "component", type: i6.TabView, selector: "p-tabView", inputs: ["orientation", "style", "styleClass", "controlClose", "scrollable", "activeIndex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i6.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i7.CodSelfFormStepOneComponent, selector: "app-cod-self-form-step-one", inputs: ["userStudent"], outputs: ["completed", "idTypesChanged"] }, { kind: "component", type: i8.CodSelfFormStepTwoComponent, selector: "app-cod-self-form-step-two", inputs: ["scorePlacementTest", "codPrevious"], outputs: ["completed"] }, { kind: "component", type: i9.CodSelfFormStepThreeComponent, selector: "app-cod-self-form-step-three", outputs: ["completed", "financingData"] }, { kind: "component", type: i10.CodSelfFormStepFourComponent, selector: "app-cod-self-form-step-four", inputs: ["idTypes"], outputs: ["completed", "action"] }] });
62
194
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CodSelfManagedComponent, decorators: [{
63
195
  type: Component,
64
- args: [{ selector: 'ipt-cod-self-managed', template: "<p-steps [model]=\"items\" [(activeIndex)]=\"currentStep\" (activeIndexChange)=\"currentStep = $event\" ></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\"></app-cod-self-form-step-four>\n </p-tabPanel>\n</p-tabView>\n", styles: [":host ::ng-deep .p-tabview-nav{display:none!important}\n"] }]
65
- }], ctorParameters: function () { return [{ type: i1.BaseService }, { type: i2.CommercialService }]; }, propDecorators: { user: [{
196
+ args: [{ selector: 'ipt-cod-self-managed', template: "<p-steps [model]=\"items\" [(activeIndex)]=\"currentStep\" (activeIndexChange)=\"currentStep = $event\" ></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}\n"] }]
197
+ }], ctorParameters: function () { return [{ type: i1.BaseService }, { type: i2.CommercialService }, { type: i3.CodSelfManagedControls }, { type: i4.LocalStorageCodSelfMaganedService }]; }, propDecorators: { user: [{
66
198
  type: Input
67
199
  }], scorePlacementTest: [{
68
200
  type: Input
69
201
  }], codPrevious: [{
70
202
  type: Input
203
+ }], okCreatedCOD: [{
204
+ type: Output
71
205
  }] } });
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLXNlbGYtbWFuYWdlZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29kLXNlbGYtbWFuYWdlZC9jb2QtZm9ybS1zZWxmLW1hbmFnZWQvY29kLXNlbGYtbWFuYWdlZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29kLXNlbGYtbWFuYWdlZC9jb2QtZm9ybS1zZWxmLW1hbmFnZWQvY29kLXNlbGYtbWFuYWdlZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7QUFtQnBFLE1BQU0sT0FBTyx1QkFBdUI7SUFtQmxDLFlBQW9CLFdBQXdCLEVBQ2xDLGlCQUFvQztRQUQxQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNsQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBZHZDLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO1FBRy9CLHFCQUFnQixHQUFVLENBQUMsQ0FBQztRQUc1QixVQUFLLEdBQWE7WUFDaEIsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUM7WUFDakMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUM7WUFDakMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUM7WUFDakMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUM7U0FDakMsQ0FBQztJQUc4QyxDQUFDO0lBRWpELFFBQVE7UUFDTixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXBDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVM7UUFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFFeEIsTUFBTSxPQUFPLEdBQVE7WUFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQztZQUNqQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7WUFDekMsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDNUIsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFO1NBQ3ZDLENBQUE7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0NBQWdDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFDLEVBQUU7WUFDckYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQTtJQUVKLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxJQUFXO1FBQzNCLElBQUksSUFBSSxFQUFFO1lBQ1IsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2YsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25CLENBQUMsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsT0FBWTtRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QixDQUFDOztvSEE3RFUsdUJBQXVCO3dHQUF2Qix1QkFBdUIsNEpDbkJwQyx3aENBZ0JBOzJGREdhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxzQkFBc0I7a0lBTXZCLElBQUk7c0JBQVosS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuLy9pbXBvcnQgc2VydmljZXNcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9iYXNlLXNlcnZpY2UvYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1lcmNpYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9jb21tZXJjaWFsLXNlcnZpY2UvY29tZXJjaWFsLnNlcnZpY2UnO1xuXG4vL2ltcG9ydCBNb2RlbHNcbmltcG9ydCB7IElVc2VySVBUUnFzIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvdXNlci91c2VyLXJzLm1vZGVsJztcblxuLy9pbXBvcnQgUHJpbWUgbmdcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lwdC1jb2Qtc2VsZi1tYW5hZ2VkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvZC1zZWxmLW1hbmFnZWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb2Qtc2VsZi1tYW5hZ2VkLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDb2RTZWxmTWFuYWdlZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcblxuICBASW5wdXQoKSB1c2VyPzogSVVzZXJJUFRScXM7XG4gIEBJbnB1dCgpIHNjb3JlUGxhY2VtZW50VGVzdD86YW55O1xuICBASW5wdXQoKSBjb2RQcmV2aW91cz86YW55O1xuXG4gIHB1YmxpYyBjdXJyZW50U3RlcDogbnVtYmVyID0gMDtcbiAgcHVibGljIGZpbmFuY2luZ0RhdGE/OiBhbnlbXTtcblxuICBjb3VudEluaXRpYWxTdGVwOm51bWJlciA9IDA7XG4gIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgaWRUeXBlczogYW55O1xuICBpdGVtczogTWVudUl0ZW1bXT1bXG4gICAgeyBsYWJlbDogJ0RhdG9zJywgICAgICAgIGlkOiAnMSd9LFxuICAgIHsgbGFiZWw6ICdQbGFuZXMnLCAgICAgICBpZDogJzInfSxcbiAgICB7IGxhYmVsOiAnUGFnbycsICAgICAgICAgaWQ6ICczJ30sXG4gICAgeyBsYWJlbDogJ0ZhY3R1cmFjaW9uJywgaWQ6ICc0J31cbiAgXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJhc2VTZXJ2aWNlOiBCYXNlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbW1lcmNpYWxTZXJ2aWNlOiBDb21tZXJjaWFsU2VydmljZSl7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY291bnRJbml0aWFsU3RlcCA9IDE7XG4gICAgdGhpcy5jaGFuZ2VTdGVwKHRoaXMuY3VycmVudFN0ZXApO1xuXG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU3RlcChzdGVwOiBhbnkpIHtcbiAgICB0aGlzLmN1cnJlbnRTdGVwID0gc3RlcDtcblxuICAgIGNvbnN0IHJlcXVlc3Q6IGFueSA9IHtcbiAgICAgIGN1cnJlbnRTdGVwOiB0aGlzLmN1cnJlbnRTdGVwICsgMSxcbiAgICAgIHVzZXJfY29kZTogdGhpcy5iYXNlU2VydmljZS5nZXRVc2VyQ29kZSgpLFxuICAgICAgY291bnQ6IHRoaXMuY291bnRJbml0aWFsU3RlcCxcbiAgICAgIHRva2VuOiB0aGlzLmJhc2VTZXJ2aWNlLmdldFVzZXJUb2tlbigpXG4gICAgfVxuICAgIHRoaXMuY29tbWVyY2lhbFNlcnZpY2UudXBkYXRlQ29udHJvbFN0ZXBzQ29kU2VsZk1hbmFnZWQocmVxdWVzdCkuc3Vic2NyaWJlKChyZXNwb25zZSk9PntcbiAgICAgIHRoaXMuY291bnRJbml0aWFsU3RlcCA9IDA7XG4gICAgfSlcblxuICB9XG4gIHNhdmVGaW5hbmNpbmdEYXRhKGRhdGE6IGFueVtdKSB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGNvbnN0IGRhdGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZGF0YS5mb3JFYWNoKHAgPT4ge1xuICAgICAgICBjb25zdCBkYXRlID0gcFsyXTtcbiAgICAgICAgZGF0ZXMucHVzaChkYXRlKTtcbiAgICAgIH0pXG4gICAgICB0aGlzLmZpbmFuY2luZ0RhdGEgPSBkYXRlcztcbiAgICB9XG4gIH1cbiAgaGFuZGxlSWRUeXBlc0NoYW5nZWQoaWRUeXBlczogYW55KSB7XG4gICAgdGhpcy5pZFR5cGVzID0gaWRUeXBlcztcbiAgICBjb25zb2xlLmxvZyh0aGlzLmlkVHlwZXMpO1xuICB9XG59XG4iLCI8cC1zdGVwcyBbbW9kZWxdPVwiaXRlbXNcIiBbKGFjdGl2ZUluZGV4KV09XCJjdXJyZW50U3RlcFwiIChhY3RpdmVJbmRleENoYW5nZSk9XCJjdXJyZW50U3RlcCA9ICRldmVudFwiID48L3Atc3RlcHM+XG5cbjxwLXRhYlZpZXcgW2FjdGl2ZUluZGV4XT1cImN1cnJlbnRTdGVwXCIgKGFjdGl2ZUluZGV4Q2hhbmdlKT1cImN1cnJlbnRTdGVwID0gJGV2ZW50XCI+XG4gIDxwLXRhYlBhbmVsIFtkaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgPGFwcC1jb2Qtc2VsZi1mb3JtLXN0ZXAtb25lIChjb21wbGV0ZWQpPVwiY2hhbmdlU3RlcCgkZXZlbnQpXCIgW3VzZXJTdHVkZW50XT1cInVzZXJcIiAoaWRUeXBlc0NoYW5nZWQpPVwiaGFuZGxlSWRUeXBlc0NoYW5nZWQoJGV2ZW50KVwiPjwvYXBwLWNvZC1zZWxmLWZvcm0tc3RlcC1vbmU+XG4gIDwvcC10YWJQYW5lbD5cbiAgPHAtdGFiUGFuZWwgW2Rpc2FibGVkXT1cInRydWVcIj5cbiAgICA8YXBwLWNvZC1zZWxmLWZvcm0tc3RlcC10d28gKGNvbXBsZXRlZCk9XCJjaGFuZ2VTdGVwKCRldmVudClcIiBbY29kUHJldmlvdXNdPVwiY29kUHJldmlvdXNcIiBbc2NvcmVQbGFjZW1lbnRUZXN0XT1cInNjb3JlUGxhY2VtZW50VGVzdFwiPjwvYXBwLWNvZC1zZWxmLWZvcm0tc3RlcC10d28+XG4gIDwvcC10YWJQYW5lbD5cbiAgPHAtdGFiUGFuZWwgW2Rpc2FibGVkXT1cInRydWVcIj5cbiAgICA8YXBwLWNvZC1zZWxmLWZvcm0tc3RlcC10aHJlZSAoY29tcGxldGVkKT1cImNoYW5nZVN0ZXAoJGV2ZW50KVwiIChmaW5hbmNpbmdEYXRhKT1cInNhdmVGaW5hbmNpbmdEYXRhKCRldmVudClcIj48L2FwcC1jb2Qtc2VsZi1mb3JtLXN0ZXAtdGhyZWU+XG4gIDwvcC10YWJQYW5lbD5cbiAgPHAtdGFiUGFuZWwgW2Rpc2FibGVkXT1cInRydWVcIj5cbiAgICA8YXBwLWNvZC1zZWxmLWZvcm0tc3RlcC1mb3VyIChjb21wbGV0ZWQpPVwiY2hhbmdlU3RlcCgkZXZlbnQpXCIgW2lkVHlwZXNdPVwiaWRUeXBlc1wiPjwvYXBwLWNvZC1zZWxmLWZvcm0tc3RlcC1mb3VyPlxuICA8L3AtdGFiUGFuZWw+XG48L3AtdGFiVmlldz5cbiJdfQ==
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLXNlbGYtbWFuYWdlZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29kLXNlbGYtbWFuYWdlZC9jb2QtZm9ybS1zZWxmLW1hbmFnZWQvY29kLXNlbGYtbWFuYWdlZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29kLXNlbGYtbWFuYWdlZC9jb2QtZm9ybS1zZWxmLW1hbmFnZWQvY29kLXNlbGYtbWFuYWdlZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVkxRixPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7Ozs7Ozs7Ozs7OztBQVUvQixNQUFNLE9BQU8sdUJBQXVCO0lBd0JsQyxZQUFvQixXQUF3QixFQUNsQyxpQkFBb0MsRUFDcEMsMEJBQWlELEVBQ2pELDBCQUE0RDtRQUhsRCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNsQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBdUI7UUFDakQsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUFrQztRQXRCNUQsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTlDLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO1FBRXhCLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBQzNCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsY0FBUyxHQUFXLENBQUMsQ0FBQztRQUN0Qiw0QkFBdUIsR0FBd0IsSUFBSSxDQUFDO1FBRTNELHFCQUFnQixHQUFVLENBQUMsQ0FBQztRQUc1QixVQUFLLEdBQWE7WUFDaEIsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFTLEVBQUUsRUFB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QyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDakYsY0FBYyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztZQUMvRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDdkYsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQ25GLGtCQUFrQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztTQUN4RixDQUFBO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7b0hBak1VLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLHVNQ3RCcEMsMmpDQWdCQTsyRkRNYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usc0JBQXNCO3VOQU12QixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbi8vaW1wb3J0IHNlcnZpY2VzXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvYmFzZS1zZXJ2aWNlL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tZXJjaWFsU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvY29tbWVyY2lhbC1zZXJ2aWNlL2NvbWVyY2lhbC5zZXJ2aWNlJztcblxuLy9pbXBvcnQgTW9kZWxzXG5pbXBvcnQgeyBJVXNlcklQVFJxcyB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3VzZXIvdXNlci1ycy5tb2RlbCc7XG5cbi8vaW1wb3J0IFByaW1lIG5nXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcbmltcG9ydCB7IENvZFNlbGZNYW5hZ2VkQ29udHJvbHMsIENvbnRyb2xTdGVwcyB9IGZyb20gJy4uL2xvZ2ljL2NvZC1zZWxmLW1hbmFnZWQtY29udHJvbHMnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlQ29kU2VsZk1hZ2FuZWRTZXJ2aWNlIH0gZnJvbSAnLi4vbG9naWMvbG9jYWwtc3RvcmFnZS1jb2Quc2VydmljZSc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaXB0LWNvZC1zZWxmLW1hbmFnZWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29kLXNlbGYtbWFuYWdlZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvZC1zZWxmLW1hbmFnZWQuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIENvZFNlbGZNYW5hZ2VkQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuXG4gIEBJbnB1dCgpIHVzZXI/OiBJVXNlcklQVFJxcztcbiAgQElucHV0KCkgc2NvcmVQbGFjZW1lbnRUZXN0Pzphbnk7XG4gIEBJbnB1dCgpIGNvZFByZXZpb3VzPzphbnk7XG4gIEBPdXRwdXQoKSBva0NyZWF0ZWRDT0QgPSBuZXcgRXZlbnRFbWl0dGVyPEJvb2xlYW4+KCk7XG5cbiAgcHVibGljIGN1cnJlbnRTdGVwOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgZmluYW5jaW5nRGF0YT86IGFueVtdO1xuICBwdWJsaWMgbG9hZGVyTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGZvcm1TdGVwczogbnVtYmVyID0gNDtcbiAgcHVibGljIGNvZENyZWF0aW9uU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcblxuICBjb3VudEluaXRpYWxTdGVwOm51bWJlciA9IDA7XG4gIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgaWRUeXBlczogYW55O1xuICBpdGVtczogTWVudUl0ZW1bXT1bXG4gICAgeyBsYWJlbDogJ0RhdG9zJywgICAgICAgIGlkOiAnMSd9LFxuICAgIHsgbGFiZWw6ICdQbGFuZXMnLCAgICAgICBpZDogJzInfSxcbiAgICB7IGxhYmVsOiAnUGFnbycsICAgICAgICAgaWQ6ICczJ30sXG4gICAgeyBsYWJlbDogJ0ZhY3R1cmFjaW9uJywgaWQ6ICc0J31cbiAgXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJhc2VTZXJ2aWNlOiBCYXNlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbW1lcmNpYWxTZXJ2aWNlOiBDb21tZXJjaWFsU2VydmljZSxcbiAgICBwcml2YXRlIGNvZFNlbGZNYW5hZ2VkRm9ybUNvbnRyb2xzOkNvZFNlbGZNYW5hZ2VkQ29udHJvbHMsXG4gICAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VDb2RTZWxmTWFuYWdlZDpMb2NhbFN0b3JhZ2VDb2RTZWxmTWFnYW5lZFNlcnZpY2Upe31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvdW50SW5pdGlhbFN0ZXAgPSAxO1xuICAgIHRoaXMuY2hhbmdlU3RlcCh0aGlzLmN1cnJlbnRTdGVwKTtcblxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVN0ZXAoc3RlcDogYW55KSB7XG4gICAgdGhpcy5jdXJyZW50U3RlcCA9IHN0ZXA7XG5cbiAgICBjb25zdCByZXF1ZXN0OiBhbnkgPSB7XG4gICAgICBjdXJyZW50U3RlcDogdGhpcy5jdXJyZW50U3RlcCArIDEsXG4gICAgICB1c2VyX2NvZGU6IHRoaXMuYmFzZVNlcnZpY2UuZ2V0VXNlckNvZGUoKSxcbiAgICAgIGNvdW50OiB0aGlzLmNvdW50SW5pdGlhbFN0ZXAsXG4gICAgICB0b2tlbjogdGhpcy5iYXNlU2VydmljZS5nZXRVc2VyVG9rZW4oKVxuICAgIH1cbiAgICB0aGlzLmNvbW1lcmNpYWxTZXJ2aWNlLnVwZGF0ZUNvbnRyb2xTdGVwc0NvZFNlbGZNYW5hZ2VkKHJlcXVlc3QpLnN1YnNjcmliZSgocmVzcG9uc2UpPT57XG4gICAgICB0aGlzLmNvdW50SW5pdGlhbFN0ZXAgPSAwO1xuICAgIH0pXG5cbiAgfVxuICBzYXZlRmluYW5jaW5nRGF0YShkYXRhOiBhbnlbXSkge1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBjb25zdCBkYXRlczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGRhdGEuZm9yRWFjaChwID0+IHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHBbMl07XG4gICAgICAgIGRhdGVzLnB1c2goZGF0ZSk7XG4gICAgICB9KVxuICAgICAgdGhpcy5maW5hbmNpbmdEYXRhID0gZGF0ZXM7XG4gICAgfVxuICB9XG4gIGhhbmRsZUlkVHlwZXNDaGFuZ2VkKGlkVHlwZXM6IGFueSkge1xuICAgIHRoaXMuaWRUeXBlcyA9IGlkVHlwZXM7XG4gICAgY29uc29sZS5sb2codGhpcy5pZFR5cGVzKTtcbiAgfVxuICBnZXRGb3JtQWN0aW9uKGFjdGlvbjogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmZpbmFuY2luZ0RhdGEgJiYgdGhpcy5sb2NhbFN0b3JhZ2VDb2RTZWxmTWFuYWdlZC5nZXRDb2RGb3JtRGF0YSg0LCAncGF5bWVudF9tZXRob2QnKSA9PT0gJzEnKSB7XG4gICAgICBTd2FsLmZpcmUoe1xuICAgICAgICB0aXRsZTogJ1F1ZXJpZG8gYXNlc29yJyxcbiAgICAgICAgdGV4dDogJ0RlYmUgaGFjZXIgZWwgY8OhbGN1bG8gZGUgbGFzIGN1b3RhcyBlbiBlbCBwYXNvIDQnLFxuICAgICAgICBpY29uOiAnZXJyb3InXG4gICAgICB9KVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0b3RhbERhdGE6IGFueVtdID0gW107XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNvZFNlbGZNYW5hZ2VkRm9ybUNvbnRyb2xzLmdldENvbnRyb2xWYWx1ZXMoKS5zdWJzY3JpYmUoKGNvbnRyb2xzKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLmZvcm1TdGVwczsgaSsrKSB7XG4gICAgICAgIGxldCBjb250cm9sc0J5U3RlcDogQ29udHJvbFN0ZXBzW10gPSBjb250cm9sc1tpLTFdO1xuICAgICAgICBjb250cm9sc0J5U3RlcC5mb3JFYWNoKGNvbnRyb2wgPT4ge1xuICAgICAgICAgIGxldCB2YWx1ZSA9IHRoaXMubG9jYWxTdG9yYWdlQ29kU2VsZk1hbmFnZWQuZ2V0Q29kRm9ybURhdGEoaSwgY29udHJvbC5uYW1lKTtcbiAgICAgICAgICB0b3RhbERhdGEucHVzaCh7XG4gICAgICAgICAgICBjb250cm9sOiBjb250cm9sLm5hbWUsXG4gICAgICAgICAgICBpc1JlcXVpcmVkOiBjb250cm9sLnJlcXVpcmVkLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogY29udHJvbC5kZXNjcmlwdGlvblxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICAgIC8vIFZhbGlkYXIgZXJyb3Jlc1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0b3RhbERhdGFbaV07XG4gICAgICAgICAgaWYgKCFlbGVtZW50LnZhbHVlICYmIGVsZW1lbnQuaXNSZXF1aXJlZCkge1xuICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgdGl0bGU6ICdFcnJvciBGb3JtIEFjdGlvbiBWYWxpZGF0ZSBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IGBSZXZpc2FyIGVsIGNhbXBvOiBcIiR7ZWxlbWVudC5kZXNjcmlwdGlvbn1cImAsXG4gICAgICAgICAgICAgIGljb246ICdlcnJvcidcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb24gPT09ICdjcmVhdGUnKSB0aGlzLmNyZWF0ZUNPRCh0b3RhbERhdGEpO1xuICAgICAgICB9KVxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG5cbiAgY3JlYXRlQ09EKHRvdGFsRGF0YTphbnlbXSl7XG4gICAgaWYgKHRoaXMuY29kQ3JlYXRpb25TdWJzY3JpcHRpb24gJiYgIXRoaXMuY29kQ3JlYXRpb25TdWJzY3JpcHRpb24uY2xvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmxvYWRlck1lc3NhZ2UgPSAnQ3JlYW5kbyBDT0QsIGVzcGVyZSB1biBtb21lbnRvJ1xuICAgIGxldCByZXF1ZXN0OiBhbnkgPSB0aGlzLmdldENyZWF0ZUNPRCh0b3RhbERhdGEpO1xuICAgIGNvbnNvbGUubG9nKHJlcXVlc3QpO1xuICAgIC8vIHRoaXMuY29tbWVyY2lhbFNlcnZpY2UuY3JlYXRlQ09EKHJlcXVlc3QpLnN1YnNjcmliZSh7XG4gICAgLy8gICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgIC8vICAgICBpZiAocmVzcG9uc2UubWVzc2FnZS5jb2RlID09PSAxKSB7XG4gICAgLy8gICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAvLyAgICAgICB0aGlzLmxvYWRlck1lc3NhZ2UgPSAnJztcbiAgICAvLyAgICAgICBTd2FsLmZpcmUoe1xuICAgIC8vICAgICAgICAgdGl0bGU6ICdQZXJmZWN0byEnLFxuICAgIC8vICAgICAgICAgdGV4dDogJ0VsIENPRCBoYSBzaWRvIGNyZWFkbyBleGl0b3NhbWVudGUuJyxcbiAgICAvLyAgICAgICAgIGljb246ICdzdWNjZXNzJ1xuICAgIC8vICAgICAgIH0pXG4gICAgLy8gICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VDb2RTZWxmTWFuYWdlZC5jbGVhckRhdGEoKTtcbiAgICAvLyAgICAgICB0aGlzLm9rQ3JlYXRlZENPRC5lbWl0KHRydWUpO1xuICAgIC8vICAgICB9ZWxzZXtcbiAgICAvLyAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIC8vICAgICAgIHRoaXMubG9hZGVyTWVzc2FnZSA9ICcnO1xuXG4gICAgLy8gICAgICAgU3dhbC5maXJlKHtcbiAgICAvLyAgICAgICAgIHRpdGxlOiAnV2FybmluZyEnLFxuICAgIC8vICAgICAgICAgdGV4dDogcmVzcG9uc2UubWVzc2FnZS5tZXNzYWdlLFxuICAgIC8vICAgICAgICAgaWNvbjogJ2Vycm9yJ1xuICAgIC8vICAgICAgIH0pXG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH0sXG4gICAgLy8gICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgLy8gICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgLy8gICAgIHRoaXMubG9hZGVyTWVzc2FnZSA9ICcnO1xuICAgIC8vICAgICBTd2FsLmZpcmUoe1xuICAgIC8vICAgICAgIHRpdGxlOiAnRXJyb3IgaW4gY29kIGNyZWF0aW9uJyxcbiAgICAvLyAgICAgICB0ZXh0OiBlcnIubWVzc2FnZSxcbiAgICAvLyAgICAgICBpY29uOiAnZXJyb3InXG4gICAgLy8gICAgIH0pXG4gICAgLy8gICB9LFxuICAgIC8vICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAvLyAgICAgdGhpcy5jb2RDcmVhdGlvblN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgLy8gICB9XG4gICAgLy8gfSlcbiAgfVxuXG4gIGdldENyZWF0ZUNPRChkYXRhOiBhbnlbXSk6IGFueSB7XG4gICAgbGV0IHJlcXVlc3Q6IGFueSA9IHtcbiAgICAgIHRva2VuOiB0aGlzLmJhc2VTZXJ2aWNlLmdldFVzZXJUb2tlbigpLFxuICAgICAgc3R1ZGVudF9uYW1lOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3N0dWRlbnRfbmFtZScpWzBdLnZhbHVlLFxuICAgICAgc3R1ZGVudF9sYXN0X25hbWU6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnc3R1ZGVudF9sYXN0X25hbWUnKVswXS52YWx1ZSxcbiAgICAgIHN0dWRlbnRfaWRfY2FyZF90eXBlOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3N0dWRlbnRfaWRfY2FyZF90eXBlJylbMF0udmFsdWUsXG4gICAgICBzdHVkZW50X2lkX2NhcmQ6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnc3R1ZGVudF9pZF9jYXJkJylbMF0udmFsdWUsXG4gICAgICBnZW5kZXI6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnZ2VuZGVyJylbMF0udmFsdWUsXG4gICAgICBiaXJ0aGRhdGU6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnYmlydGhkYXRlJylbMF0udmFsdWUsXG4gICAgICBhZ2U6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnYWdlJylbMF0udmFsdWUsXG4gICAgICBjb3VudHJ5OiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ2NvdW50cnknKVswXS52YWx1ZSxcbiAgICAgIHN0YXRlOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3N0YXRlJylbMF0udmFsdWUsXG4gICAgICBjaXR5OiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ2NpdHknKVswXS52YWx1ZSxcbiAgICAgIHN0dWRlbnRfZW1haWw6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnc3R1ZGVudF9lbWFpbCcpWzBdLnZhbHVlLFxuICAgICAgc3R1ZGVudF9waG9uZV9pbmRpY2F0aXZlOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3N0dWRlbnRfcGhvbmVfaW5kaWNhdGl2ZScpWzBdLnZhbHVlLFxuICAgICAgc3R1ZGVudF9waG9uZV9udW1iZXI6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnc3R1ZGVudF9waG9uZV9udW1iZXInKVswXS52YWx1ZSxcbiAgICAgIGVkdWNhdGlvbmFsX2xldmVsOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ2dyYWRlJylbMF0udmFsdWUsXG4gICAgICBhZ3JlZW1lbnRfYnlfY2F0ZWdvcnk6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnYWdyZWVtZW50X2J5X2NhdGVnb3J5JylbMF0udmFsdWUsXG4gICAgICBhY2FkZW1pY19wbGFuOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ2FjYWRlbWljX3BsYW4nKVswXS52YWx1ZSxcbiAgICAgIGNvdXJzZV90eXBlOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ2NvdXJzZV90eXBlJylbMF0udmFsdWUsXG4gICAgICBlbmdsaXNoX2xldmVsOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ2VuZ2xpc2hfbGV2ZWwnKVswXS52YWx1ZSxcbiAgICAgIGF2YWlsaWJsZV9jb3Vyc2VzOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ2F2YWlsaWJsZV9jb3Vyc2VzJylbMF0udmFsdWUsXG4gICAgICBjb3Vyc2VfbW9kYWxpdHk6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnY291cnNlX21vZGFsaXR5JylbMF0udmFsdWUsXG4gICAgICBwcm9ncmFtX3ByaWNlOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3Byb2dyYW1fcHJpY2UnKVswXS52YWx1ZSxcbiAgICAgIHBheW1lbnRfZGF0ZTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdwYXltZW50X2RhdGUnKVswXS52YWx1ZSxcbiAgICAgIHBheW1lbnRfbWV0aG9kOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3BheW1lbnRfbWV0aG9kJylbMF0udmFsdWUsXG4gICAgICBxdW90YV90aW1lczogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdxdW90YV90aW1lcycpWzBdLnZhbHVlLFxuICAgICAgdG90YWxfcHJpY2U6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAndG90YWxfcHJpY2UnKVswXS52YWx1ZSxcbiAgICAgIHBhaWRfbGV2ZWw6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAncGFpZF9sZXZlbCcpWzBdLnZhbHVlLFxuICAgICAgcGF5bWVudF9kYXRlczogdGhpcy5maW5hbmNpbmdEYXRhISxcbiAgICAgIG9wdGlvbnNQYXltZW50czogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdvcHRpb25zUGF5bWVudHMnKVswXS52YWx1ZSxcbiAgICAgIGludm9pY2luZ19uYW1lOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ2ludm9pY2luZ19uYW1lJylbMF0udmFsdWUsXG4gICAgICBpbnZvaWNpbmdfQXBlbGxpZG86IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnaW52b2ljaW5nX0FwZWxsaWRvJylbMF0udmFsdWUsXG4gICAgICBpbnZvaWNpbmdfaWRUeXBlOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ2ludm9pY2luZ19pZFR5cGUnKVswXS52YWx1ZSxcbiAgICAgIGludm9pY2luZ19kb2N1bWVudDogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdpbnZvaWNpbmdfZG9jdW1lbnQnKVswXS52YWx1ZSxcbiAgICB9XG4gICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH1cbn1cbiIsIjxwLXN0ZXBzIFttb2RlbF09XCJpdGVtc1wiIFsoYWN0aXZlSW5kZXgpXT1cImN1cnJlbnRTdGVwXCIgKGFjdGl2ZUluZGV4Q2hhbmdlKT1cImN1cnJlbnRTdGVwID0gJGV2ZW50XCIgPjwvcC1zdGVwcz5cblxuPHAtdGFiVmlldyBbYWN0aXZlSW5kZXhdPVwiY3VycmVudFN0ZXBcIiAoYWN0aXZlSW5kZXhDaGFuZ2UpPVwiY3VycmVudFN0ZXAgPSAkZXZlbnRcIj5cbiAgPHAtdGFiUGFuZWwgW2Rpc2FibGVkXT1cInRydWVcIj5cbiAgICA8YXBwLWNvZC1zZWxmLWZvcm0tc3RlcC1vbmUgKGNvbXBsZXRlZCk9XCJjaGFuZ2VTdGVwKCRldmVudClcIiBbdXNlclN0dWRlbnRdPVwidXNlclwiIChpZFR5cGVzQ2hhbmdlZCk9XCJoYW5kbGVJZFR5cGVzQ2hhbmdlZCgkZXZlbnQpXCI+PC9hcHAtY29kLXNlbGYtZm9ybS1zdGVwLW9uZT5cbiAgPC9wLXRhYlBhbmVsPlxuICA8cC10YWJQYW5lbCBbZGlzYWJsZWRdPVwidHJ1ZVwiPlxuICAgIDxhcHAtY29kLXNlbGYtZm9ybS1zdGVwLXR3byAoY29tcGxldGVkKT1cImNoYW5nZVN0ZXAoJGV2ZW50KVwiIFtjb2RQcmV2aW91c109XCJjb2RQcmV2aW91c1wiIFtzY29yZVBsYWNlbWVudFRlc3RdPVwic2NvcmVQbGFjZW1lbnRUZXN0XCI+PC9hcHAtY29kLXNlbGYtZm9ybS1zdGVwLXR3bz5cbiAgPC9wLXRhYlBhbmVsPlxuICA8cC10YWJQYW5lbCBbZGlzYWJsZWRdPVwidHJ1ZVwiPlxuICAgIDxhcHAtY29kLXNlbGYtZm9ybS1zdGVwLXRocmVlIChjb21wbGV0ZWQpPVwiY2hhbmdlU3RlcCgkZXZlbnQpXCIgKGZpbmFuY2luZ0RhdGEpPVwic2F2ZUZpbmFuY2luZ0RhdGEoJGV2ZW50KVwiPjwvYXBwLWNvZC1zZWxmLWZvcm0tc3RlcC10aHJlZT5cbiAgPC9wLXRhYlBhbmVsPlxuICA8cC10YWJQYW5lbCBbZGlzYWJsZWRdPVwidHJ1ZVwiPlxuICAgIDxhcHAtY29kLXNlbGYtZm9ybS1zdGVwLWZvdXIgKGNvbXBsZXRlZCk9XCJjaGFuZ2VTdGVwKCRldmVudClcIiBbaWRUeXBlc109XCJpZFR5cGVzXCIgKGFjdGlvbik9XCJnZXRGb3JtQWN0aW9uKCRldmVudClcIj48L2FwcC1jb2Qtc2VsZi1mb3JtLXN0ZXAtZm91cj5cbiAgPC9wLXRhYlBhbmVsPlxuPC9wLXRhYlZpZXc+XG4iXX0=
@@ -19,6 +19,7 @@ export class CodSelfFormStepFourComponent extends CodSelfManagedSteps {
19
19
  this.fb = fb;
20
20
  this.messageService = messageService;
21
21
  this.completed = new EventEmitter();
22
+ this.action = new EventEmitter();
22
23
  this.controls = new CodSelfManagedControls().controls[3];
23
24
  this.messageInfo = "Datos de facturacion de acuerdo a tu eleccion";
24
25
  this.visible = false;
@@ -111,9 +112,11 @@ export class CodSelfFormStepFourComponent extends CodSelfManagedSteps {
111
112
  // }
112
113
  sendForm() {
113
114
  // Aquí va la lógica para enviar el formulario
115
+ this.codSelfFormStepFour.markAllAsTouched();
116
+ // if (this.codSelfFormStepFour.invalid || this.termsCheckboxStatus === false) return;
117
+ this.action.emit('create');
114
118
  console.log('Ejecuta endpoint');
115
- // Movernos al siguiente paso
116
- this.completed.emit(4);
119
+ // this.completed.emit(4);
117
120
  }
118
121
  onReject() {
119
122
  this.messageService.clear('confirm');
@@ -181,7 +184,7 @@ export class CodSelfFormStepFourComponent extends CodSelfManagedSteps {
181
184
  }
182
185
  }
183
186
  CodSelfFormStepFourComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CodSelfFormStepFourComponent, deps: [{ token: i1.FormBuilder }, { token: i2.MessageService }], target: i0.ɵɵFactoryTarget.Component });
184
- CodSelfFormStepFourComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: CodSelfFormStepFourComponent, selector: "app-cod-self-form-step-four", inputs: { idTypes: "idTypes" }, outputs: { completed: "completed" }, usesInheritance: true, ngImport: i0, template: "<div class=\"container-main\">\n <div class=\"container-form\">\n <h2>Datos de Facturacion</h2>\n <p-toast position=\"top-center\" key=\"confirm\" (onClose)=\"onReject()\" [baseZIndex]=\"10\">\n <ng-template let-message pTemplate=\"message\">\n <div class=\"flex flex-column align-items-start\" style=\"flex: 1\">\n <div class=\"flex align-items-center gap-2\">\n <img src=\"https://qa.iptdev.com.co/assets/logos/reading.png\" style=\"width: 65px;\" shape=\"circle\" />\n <span class=\"font-bold text-900\">Jacob</span>\n </div>\n <div class=\"font-medium text-lg my-3 text-900\">{{ messageInfo }}</div>\n </div>\n </ng-template>\n </p-toast>\n <i class=\"pi pi-exclamation-circle cursor-pointer w-auto mb-4\" (click)=\"showConfirm()\" pTooltip=\"Mas info.\" tooltipPosition=\"bottom\"></i>\n <form autocomplete=\"off\" [formGroup]=\"codSelfFormStepFour\" class=\"grid mt-2 flex flex-column align-items-center\">\n <div class=\"container__body__select flex justify-content-center flex-wrap\">\n <div class=\"container__type__payments\" *ngIf=\"isSelectionOptionPayments\">\n <div class=\"flex flex-column gap-3\">\n <h3>\u00BFComo quieres pagar?</h3>\n <div *ngFor=\"let category of OptionPayments; index as ind\" class=\"field-checkbox\">\n <p-radioButton\n [inputId]=\"category.key\"\n name=\"category\"\n [value]=\"category\"\n [(ngModel)]=\"selectedOptionPayments\"\n [disabled]=\"disableweekdays[ind]\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"selectOpcionsPayments($event)\"\n ></p-radioButton>\n <label [for]=\"category.key\" class=\"ml-2\">\n {{ category.name }}\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"container__opstion__instalations\" *ngIf=\"!isSelectionOptionPayments\">\n <!-- Vista para la opci\u00F3n de pago \"Instalaciones\" -->\n <div *ngIf=\"getViewBasedOnPaymentOption() === 'in'\">\n <div class=\"container__info flex flex-column align-items-center justify-content-center mt-1 mb-4\" *ngIf=\"isEditBillingData\">\n\n <img\n src=\"https://qa.iptdev.com.co/assets/logos/lobo-web.png\"\n alt=\"Receipt Icon\"\n shape=\"circle\"\n class=\"circular-image\"\n />\n <strong>{{ codSelfFormStepFour.get('invoicing_name')?.value }} {{ codSelfFormStepFour.get('invoicing_Apellido')?.value }}</strong>\n <span>{{ getIdTypeDescription(codSelfFormStepFour.get('invoicing_idType')?.value) }} {{ codSelfFormStepFour.get('invoicing_document')?.value }}</span>\n\n <div class=\"container-button\">\n <ipt-button\n [label]=\"'Modificar Datos'\"\n (onClick)=\"editBillingData()\"\n [primary]=\"false\">\n </ipt-button>\n </div>\n </div>\n <div class=\"m-3\" *ngIf=\"!isEditBillingData\">\n <h3>Completa los nuevos datos para la emision de tu factura</h3>\n <div class=\"flex gap-1 md:gap-4 xl:gap-8 m-1 p-2 border-round bg-blue-500 text-white\">\n <div class=\"container_icon flex mr-4 justify-content-center align-items-start mt-1\">\n <i class=\"pi pi-info-circle cursor-pointer w-auto mb-4\" pTooltip=\"Mas info.\" tooltipPosition=\"bottom\"></i>\n </div>\n <div class=\"flex flex-column container_info_span flex align-items-center justify-content-center\">\n <span>Si proporcionas datos de un tercero, confirmas que los datos son correctos y que tienes su consentimiento para el uso de la informacion. Estos datos se trataran de acuerdo a nuestra <a href=\"\">Declaracion de Privacidad</a></span>\n </div>\n </div>\n <div>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Nombres'\"\n [control]=\"codSelfFormStepFour.controls['invoicing_name']\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Apellido'\"\n [control]=\"codSelfFormStepFour.controls['invoicing_Apellido']\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"codSelfFormStepFour.controls['invoicing_idType'].value\"\n [control]=\"codSelfFormStepFour.controls['invoicing_idType']\"\n [selectCode]=\"codSelfFormStepFour.controls['invoicing_idType'].value === null ? 'Tipo de documento' : codSelfFormStepFour.controls['invoicing_idType'].value\"\n [isRequired]=\"true\"\n [data]=\"idTypes\"\n (eventSelect)=\"selectIdType($event)\"\n [defaultText]=\"'Tipo de documento'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Documento'\"\n [control]=\"codSelfFormStepFour.controls['invoicing_document']\"\n ></ipt-input>\n </div>\n <div class=\"flex justify-content-end mt-3 align-items-center gap-3\">\n <button\n pButton\n [disabled]=\"!codSelfFormStepFour.valid\"\n label=\"Continuar\"\n type=\"button\"\n (click)=\"updateDatosBillingData()\"\n ></button>\n </div>\n </div>\n </div>\n\n <!-- Vista para la opci\u00F3n de pago \"Transferencia\" -->\n <div *ngIf=\"getViewBasedOnPaymentOption() === 'tr'\">\n <h3>Completa los datos para Transferencia</h3>\n <!-- Aqu\u00ED puedes agregar el formulario espec\u00EDfico para Transferencia -->\n </div>\n </div>\n </div>\n </form>\n\n <div class=\"flex justify-content-between mt-3 align-items-center gap-3\">\n <button\n pButton\n icon=\"pi pi-arrow-left\"\n type=\"button\"\n (click)=\"back()\"\n ></button>\n <button\n *ngIf=\"!isSelectionOptionPayments && isEditBillingData && codSelfFormStepFour.valid\"\n pButton\n label=\"Guardar\"\n type=\"button\"\n (click)=\"sendForm()\"\n ></button>\n </div>\n </div>\n</div>\n\n<div>\n <pre>{{ codSelfFormStepFour.value | json }}</pre>\n <div>\n <pre>{{ codSelfFormStepFour.valid | json }}</pre>\n </div>\n</div>\n", styles: [".container-form{margin:5%;border-radius:6px;border:1px solid #2563eb;box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;padding:1rem}.error-message{font-size:x-small;color:red}:host ::ng-deep .p-toast{width:20rem!important}.circular-image{width:50px;height:50px;border-radius:50%;object-fit:cover;border:none}.container-button{width:10rem;margin-top:3%}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.ButtonComponent, selector: "ipt-button", inputs: ["primary", "size", "label", "buttonType", "isEnabled"], outputs: ["onClick"] }, { kind: "component", type: i5.InputComponent, selector: "ipt-input", inputs: ["inputType", "placeHolder", "validateText", "withPipe", "list", "iconUrl", "control", "prefix", "thousands", "decimal", "disabledSel"], outputs: ["dateSelected"] }, { kind: "component", type: i6.SelectComponent, selector: "ipt-select", inputs: ["isRequired", "data", "defaultText", "selectCode", "disabledSel", "initialValue", "control"], outputs: ["eventSelect"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i9.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i10.RadioButton, selector: "p-radioButton", inputs: ["value", "formControlName", "name", "disabled", "label", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "labelStyleClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "pipe", type: i3.JsonPipe, name: "json" }] });
187
+ CodSelfFormStepFourComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: CodSelfFormStepFourComponent, selector: "app-cod-self-form-step-four", inputs: { idTypes: "idTypes" }, outputs: { completed: "completed", action: "action" }, usesInheritance: true, ngImport: i0, template: "<div class=\"container-main\">\n <div class=\"container-form\">\n <h2>Datos de Facturacion</h2>\n <p-toast position=\"top-center\" key=\"confirm\" (onClose)=\"onReject()\" [baseZIndex]=\"10\">\n <ng-template let-message pTemplate=\"message\">\n <div class=\"flex flex-column align-items-start\" style=\"flex: 1\">\n <div class=\"flex align-items-center gap-2\">\n <img src=\"https://qa.iptdev.com.co/assets/logos/reading.png\" style=\"width: 65px;\" shape=\"circle\" />\n <span class=\"font-bold text-900\">Jacob</span>\n </div>\n <div class=\"font-medium text-lg my-3 text-900\">{{ messageInfo }}</div>\n </div>\n </ng-template>\n </p-toast>\n <i class=\"pi pi-exclamation-circle cursor-pointer w-auto mb-4\" (click)=\"showConfirm()\" pTooltip=\"Mas info.\" tooltipPosition=\"bottom\"></i>\n <form autocomplete=\"off\" [formGroup]=\"codSelfFormStepFour\" class=\"grid mt-2 flex flex-column align-items-center\">\n <div class=\"container__body__select flex justify-content-center flex-wrap\">\n <div class=\"container__type__payments\" *ngIf=\"isSelectionOptionPayments\">\n <div class=\"flex flex-column gap-3\">\n <h3>\u00BFComo quieres pagar?</h3>\n <div *ngFor=\"let category of OptionPayments; index as ind\" class=\"field-checkbox\">\n <p-radioButton\n [inputId]=\"category.key\"\n name=\"category\"\n [value]=\"category\"\n [(ngModel)]=\"selectedOptionPayments\"\n [disabled]=\"disableweekdays[ind]\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"selectOpcionsPayments($event)\"\n ></p-radioButton>\n <label [for]=\"category.key\" class=\"ml-2\">\n {{ category.name }}\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"container__opstion__instalations\" *ngIf=\"!isSelectionOptionPayments\">\n <!-- Vista para la opci\u00F3n de pago \"Instalaciones\" -->\n <div *ngIf=\"getViewBasedOnPaymentOption() === 'in'\">\n <div class=\"container__info flex flex-column align-items-center justify-content-center mt-1 mb-4\" *ngIf=\"isEditBillingData\">\n\n <img\n src=\"https://qa.iptdev.com.co/assets/logos/lobo-web.png\"\n alt=\"Receipt Icon\"\n shape=\"circle\"\n class=\"circular-image\"\n />\n <strong>{{ codSelfFormStepFour.get('invoicing_name')?.value }} {{ codSelfFormStepFour.get('invoicing_Apellido')?.value }}</strong>\n <span>{{ getIdTypeDescription(codSelfFormStepFour.get('invoicing_idType')?.value) }} {{ codSelfFormStepFour.get('invoicing_document')?.value }}</span>\n\n <div class=\"container-button\">\n <ipt-button\n [label]=\"'Modificar Datos'\"\n (onClick)=\"editBillingData()\"\n [primary]=\"false\">\n </ipt-button>\n </div>\n </div>\n <div class=\"m-3\" *ngIf=\"!isEditBillingData\">\n <h3>Completa los nuevos datos para la emision de tu factura</h3>\n <div class=\"flex gap-1 md:gap-4 xl:gap-8 m-1 p-2 border-round bg-blue-500 text-white\">\n <div class=\"container_icon flex mr-4 justify-content-center align-items-start mt-1\">\n <i class=\"pi pi-info-circle cursor-pointer w-auto mb-4\" pTooltip=\"Mas info.\" tooltipPosition=\"bottom\"></i>\n </div>\n <div class=\"flex flex-column container_info_span flex align-items-center justify-content-center\">\n <span>Si proporcionas datos de un tercero, confirmas que los datos son correctos y que tienes su consentimiento para el uso de la informacion. Estos datos se trataran de acuerdo a nuestra <a href=\"\">Declaracion de Privacidad</a></span>\n </div>\n </div>\n <div>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Nombres'\"\n [control]=\"codSelfFormStepFour.controls['invoicing_name']\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Apellido'\"\n [control]=\"codSelfFormStepFour.controls['invoicing_Apellido']\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"codSelfFormStepFour.controls['invoicing_idType'].value\"\n [control]=\"codSelfFormStepFour.controls['invoicing_idType']\"\n [selectCode]=\"codSelfFormStepFour.controls['invoicing_idType'].value === null ? 'Tipo de documento' : codSelfFormStepFour.controls['invoicing_idType'].value\"\n [isRequired]=\"true\"\n [data]=\"idTypes\"\n (eventSelect)=\"selectIdType($event)\"\n [defaultText]=\"'Tipo de documento'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Documento'\"\n [control]=\"codSelfFormStepFour.controls['invoicing_document']\"\n ></ipt-input>\n </div>\n <div class=\"flex justify-content-end mt-3 align-items-center gap-3\">\n <button\n pButton\n [disabled]=\"!codSelfFormStepFour.valid\"\n label=\"Continuar\"\n type=\"button\"\n (click)=\"updateDatosBillingData()\"\n ></button>\n </div>\n </div>\n </div>\n\n <!-- Vista para la opci\u00F3n de pago \"Transferencia\" -->\n <div *ngIf=\"getViewBasedOnPaymentOption() === 'tr'\">\n <h3>Completa los datos para Transferencia</h3>\n <!-- Aqu\u00ED puedes agregar el formulario espec\u00EDfico para Transferencia -->\n </div>\n </div>\n </div>\n </form>\n\n <div class=\"flex justify-content-between mt-3 align-items-center gap-3\">\n <button\n pButton\n icon=\"pi pi-arrow-left\"\n type=\"button\"\n (click)=\"back()\"\n ></button>\n <button\n *ngIf=\"!isSelectionOptionPayments && isEditBillingData && codSelfFormStepFour.valid\"\n pButton\n label=\"Guardar\"\n type=\"button\"\n (click)=\"sendForm()\"\n ></button>\n </div>\n </div>\n</div>\n\n<div>\n <pre>{{ codSelfFormStepFour.value | json }}</pre>\n <div>\n <pre>{{ codSelfFormStepFour.valid | json }}</pre>\n </div>\n</div>\n", styles: [".container-form{margin:5%;border-radius:6px;border:1px solid #2563eb;box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;padding:1rem}.error-message{font-size:x-small;color:red}:host ::ng-deep .p-toast{width:20rem!important}.circular-image{width:50px;height:50px;border-radius:50%;object-fit:cover;border:none}.container-button{width:10rem;margin-top:3%}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.ButtonComponent, selector: "ipt-button", inputs: ["primary", "size", "label", "buttonType", "isEnabled"], outputs: ["onClick"] }, { kind: "component", type: i5.InputComponent, selector: "ipt-input", inputs: ["inputType", "placeHolder", "validateText", "withPipe", "list", "iconUrl", "control", "prefix", "thousands", "decimal", "disabledSel"], outputs: ["dateSelected"] }, { kind: "component", type: i6.SelectComponent, selector: "ipt-select", inputs: ["isRequired", "data", "defaultText", "selectCode", "disabledSel", "initialValue", "control"], outputs: ["eventSelect"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i9.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i10.RadioButton, selector: "p-radioButton", inputs: ["value", "formControlName", "name", "disabled", "label", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "labelStyleClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "pipe", type: i3.JsonPipe, name: "json" }] });
185
188
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CodSelfFormStepFourComponent, decorators: [{
186
189
  type: Component,
187
190
  args: [{ selector: 'app-cod-self-form-step-four', template: "<div class=\"container-main\">\n <div class=\"container-form\">\n <h2>Datos de Facturacion</h2>\n <p-toast position=\"top-center\" key=\"confirm\" (onClose)=\"onReject()\" [baseZIndex]=\"10\">\n <ng-template let-message pTemplate=\"message\">\n <div class=\"flex flex-column align-items-start\" style=\"flex: 1\">\n <div class=\"flex align-items-center gap-2\">\n <img src=\"https://qa.iptdev.com.co/assets/logos/reading.png\" style=\"width: 65px;\" shape=\"circle\" />\n <span class=\"font-bold text-900\">Jacob</span>\n </div>\n <div class=\"font-medium text-lg my-3 text-900\">{{ messageInfo }}</div>\n </div>\n </ng-template>\n </p-toast>\n <i class=\"pi pi-exclamation-circle cursor-pointer w-auto mb-4\" (click)=\"showConfirm()\" pTooltip=\"Mas info.\" tooltipPosition=\"bottom\"></i>\n <form autocomplete=\"off\" [formGroup]=\"codSelfFormStepFour\" class=\"grid mt-2 flex flex-column align-items-center\">\n <div class=\"container__body__select flex justify-content-center flex-wrap\">\n <div class=\"container__type__payments\" *ngIf=\"isSelectionOptionPayments\">\n <div class=\"flex flex-column gap-3\">\n <h3>\u00BFComo quieres pagar?</h3>\n <div *ngFor=\"let category of OptionPayments; index as ind\" class=\"field-checkbox\">\n <p-radioButton\n [inputId]=\"category.key\"\n name=\"category\"\n [value]=\"category\"\n [(ngModel)]=\"selectedOptionPayments\"\n [disabled]=\"disableweekdays[ind]\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"selectOpcionsPayments($event)\"\n ></p-radioButton>\n <label [for]=\"category.key\" class=\"ml-2\">\n {{ category.name }}\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"container__opstion__instalations\" *ngIf=\"!isSelectionOptionPayments\">\n <!-- Vista para la opci\u00F3n de pago \"Instalaciones\" -->\n <div *ngIf=\"getViewBasedOnPaymentOption() === 'in'\">\n <div class=\"container__info flex flex-column align-items-center justify-content-center mt-1 mb-4\" *ngIf=\"isEditBillingData\">\n\n <img\n src=\"https://qa.iptdev.com.co/assets/logos/lobo-web.png\"\n alt=\"Receipt Icon\"\n shape=\"circle\"\n class=\"circular-image\"\n />\n <strong>{{ codSelfFormStepFour.get('invoicing_name')?.value }} {{ codSelfFormStepFour.get('invoicing_Apellido')?.value }}</strong>\n <span>{{ getIdTypeDescription(codSelfFormStepFour.get('invoicing_idType')?.value) }} {{ codSelfFormStepFour.get('invoicing_document')?.value }}</span>\n\n <div class=\"container-button\">\n <ipt-button\n [label]=\"'Modificar Datos'\"\n (onClick)=\"editBillingData()\"\n [primary]=\"false\">\n </ipt-button>\n </div>\n </div>\n <div class=\"m-3\" *ngIf=\"!isEditBillingData\">\n <h3>Completa los nuevos datos para la emision de tu factura</h3>\n <div class=\"flex gap-1 md:gap-4 xl:gap-8 m-1 p-2 border-round bg-blue-500 text-white\">\n <div class=\"container_icon flex mr-4 justify-content-center align-items-start mt-1\">\n <i class=\"pi pi-info-circle cursor-pointer w-auto mb-4\" pTooltip=\"Mas info.\" tooltipPosition=\"bottom\"></i>\n </div>\n <div class=\"flex flex-column container_info_span flex align-items-center justify-content-center\">\n <span>Si proporcionas datos de un tercero, confirmas que los datos son correctos y que tienes su consentimiento para el uso de la informacion. Estos datos se trataran de acuerdo a nuestra <a href=\"\">Declaracion de Privacidad</a></span>\n </div>\n </div>\n <div>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Nombres'\"\n [control]=\"codSelfFormStepFour.controls['invoicing_name']\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Apellido'\"\n [control]=\"codSelfFormStepFour.controls['invoicing_Apellido']\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"codSelfFormStepFour.controls['invoicing_idType'].value\"\n [control]=\"codSelfFormStepFour.controls['invoicing_idType']\"\n [selectCode]=\"codSelfFormStepFour.controls['invoicing_idType'].value === null ? 'Tipo de documento' : codSelfFormStepFour.controls['invoicing_idType'].value\"\n [isRequired]=\"true\"\n [data]=\"idTypes\"\n (eventSelect)=\"selectIdType($event)\"\n [defaultText]=\"'Tipo de documento'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Documento'\"\n [control]=\"codSelfFormStepFour.controls['invoicing_document']\"\n ></ipt-input>\n </div>\n <div class=\"flex justify-content-end mt-3 align-items-center gap-3\">\n <button\n pButton\n [disabled]=\"!codSelfFormStepFour.valid\"\n label=\"Continuar\"\n type=\"button\"\n (click)=\"updateDatosBillingData()\"\n ></button>\n </div>\n </div>\n </div>\n\n <!-- Vista para la opci\u00F3n de pago \"Transferencia\" -->\n <div *ngIf=\"getViewBasedOnPaymentOption() === 'tr'\">\n <h3>Completa los datos para Transferencia</h3>\n <!-- Aqu\u00ED puedes agregar el formulario espec\u00EDfico para Transferencia -->\n </div>\n </div>\n </div>\n </form>\n\n <div class=\"flex justify-content-between mt-3 align-items-center gap-3\">\n <button\n pButton\n icon=\"pi pi-arrow-left\"\n type=\"button\"\n (click)=\"back()\"\n ></button>\n <button\n *ngIf=\"!isSelectionOptionPayments && isEditBillingData && codSelfFormStepFour.valid\"\n pButton\n label=\"Guardar\"\n type=\"button\"\n (click)=\"sendForm()\"\n ></button>\n </div>\n </div>\n</div>\n\n<div>\n <pre>{{ codSelfFormStepFour.value | json }}</pre>\n <div>\n <pre>{{ codSelfFormStepFour.valid | json }}</pre>\n </div>\n</div>\n", styles: [".container-form{margin:5%;border-radius:6px;border:1px solid #2563eb;box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;padding:1rem}.error-message{font-size:x-small;color:red}:host ::ng-deep .p-toast{width:20rem!important}.circular-image{width:50px;height:50px;border-radius:50%;object-fit:cover;border:none}.container-button{width:10rem;margin-top:3%}\n"] }]
@@ -189,5 +192,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImpor
189
192
  type: Input
190
193
  }], completed: [{
191
194
  type: Output
195
+ }], action: [{
196
+ type: Output
192
197
  }] } });
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLXNlbGYtZm9ybS1zdGVwLWZvdXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvZC1zZWxmLW1hbmFnZWQvc3RlcHMvY29kLWZvcm0tc3RlcC1mb3VyL2NvZC1zZWxmLWZvcm0tc3RlcC1mb3VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2Rlc2lnbi1zeXN0ZW0vc3JjL2xpYi9jb2Qtc2VsZi1tYW5hZ2VkL3N0ZXBzL2NvZC1mb3JtLXN0ZXAtZm91ci9jb2Qtc2VsZi1mb3JtLXN0ZXAtZm91ci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPcEUsT0FBTyxFQUFFLG1CQUFtQixFQUF5QixNQUFNLG9DQUFvQyxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7Ozs7QUFPL0UsTUFBTSxPQUFPLDRCQUE2QixTQUFRLG1CQUFtQjtJQW9CbkUsWUFDVSxFQUFlLEVBQ2YsY0FBOEI7UUFFdEMsS0FBSyxFQUFFLENBQUM7UUFIQSxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBbkI5QixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVqRCxhQUFRLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRCxnQkFBVyxHQUFXLCtDQUErQyxDQUFDO1FBQ3RFLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFHekIsOEJBQXlCLEdBQUcsS0FBSyxDQUFDO1FBQ2xD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LENBQUM7WUFDakIsS0FBSyxHQUFHO2dCQUNOLE9BQU8sS0FBSyxDQUFDO1lBQ2YsS0FBSyxHQUFHO2dCQUNOLE9BQU8sS0FBSyxDQUFDO1lBQ2YsS0FBSyxHQUFHO2dCQUNOLE9BQU8sS0FBSyxDQUFDO1lBQ2Y7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7U0FDYjtJQUNILENBQUM7O3lIQXpMVSw0QkFBNEI7NkdBQTVCLDRCQUE0QiwrSkNoQnpDLHNyTkE0SUE7MkZENUhhLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDRSw2QkFBNkI7K0hBTTlCLE9BQU87c0JBQWYsS0FBSztnQkFDSSxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuLy9pbXBvcnQgUHJpbWVuZ1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5cbi8vIGltcG9ydCBNb2RlbHNcbmltcG9ydCB7IEl3ZWVrRGF5c1JxIH0gZnJvbSAnLi8uLi8uLi8uLi9jb3JlL21vZGVscy9hY2FkZW1pYy9hY2FkZW1pYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29kU2VsZk1hbmFnZWRTdGVwcywgbG9jYWxTdG9yYWdlVmFsdWVzVHdvIH0gZnJvbSAnLi4vLi4vbG9naWMvY29kLXNlbGYtbWFuYWdlZC1zdGVwcyc7XG5pbXBvcnQgeyBDb2RTZWxmTWFuYWdlZENvbnRyb2xzIH0gZnJvbSAnLi4vLi4vbG9naWMvY29kLXNlbGYtbWFuYWdlZC1jb250cm9scyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jb2Qtc2VsZi1mb3JtLXN0ZXAtZm91cicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2Qtc2VsZi1mb3JtLXN0ZXAtZm91ci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvZC1zZWxmLWZvcm0tc3RlcC1mb3VyLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29kU2VsZkZvcm1TdGVwRm91ckNvbXBvbmVudCBleHRlbmRzIENvZFNlbGZNYW5hZ2VkU3RlcHMgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIGlkVHlwZXM6IGFueTtcbiAgQE91dHB1dCgpIGNvbXBsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIGNvbnRyb2xzID0gbmV3IENvZFNlbGZNYW5hZ2VkQ29udHJvbHMoKS5jb250cm9sc1szXTtcbiAgbWVzc2FnZUluZm86IHN0cmluZyA9IFwiRGF0b3MgZGUgZmFjdHVyYWNpb24gZGUgYWN1ZXJkbyBhIHR1IGVsZWNjaW9uXCI7XG4gIHZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29kU2VsZkZvcm1TdGVwRm91ciE6IEZvcm1Hcm91cDtcbiAgc2VsZWN0ZWRPcHRpb25QYXltZW50cz86IEl3ZWVrRGF5c1JxO1xuICBtZXNzYWdlQWxlcnRQbGFjZW1lbnRUZXN0ID0gZmFsc2U7XG4gIGRpc2FibGV3ZWVrZGF5czogYm9vbGVhbltdID0gW107XG4gIGlzU2VsZWN0aW9uT3B0aW9uUGF5bWVudHMgPSB0cnVlO1xuICBpc0VkaXRCaWxsaW5nRGF0YSA9IHRydWU7XG5cbiAgT3B0aW9uUGF5bWVudHM6IGFueVtdID0gW1xuICAgIHsgY29kZTogMSwga2V5OiAnaW4nLCBuYW1lOiAnSW5zdGFsYWNpb25lcycgfSxcbiAgICB7IGNvZGU6IDMsIGtleTogJ3RyJywgbmFtZTogJ1RyYW5zZmVyZW5jaWEnIH0sXG4gIF07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5pbml0Rm9ybSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gdGhpcy5nZXRQYXJhbWVudGVycygpO1xuICAgIHRoaXMuc3RhcnRMb2NhbFN0b3JhZ2VXb3JrKCk7XG4gICAgdGhpcy5nZXREYXRhVXNlcigpO1xuICAgIGNvbnNvbGUubG9nKCdpZFR5cGVzJyx0aGlzLmlkVHlwZXMpO1xuICAgIFxuICB9XG4gIGluaXRGb3JtKCkge1xuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ciA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgb3B0aW9uc1BheW1lbnRzOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBpbnZvaWNpbmdfbmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgaW52b2ljaW5nX0FwZWxsaWRvOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBpbnZvaWNpbmdfaWRUeXBlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBpbnZvaWNpbmdfZG9jdW1lbnQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICB9KTtcbiAgfVxuICBnZXREYXRhVXNlcigpe1xuICAgIGNvbnN0IG5hbWVTdHVkZW50ID0gdGhpcy5sb2NhbFN0b3JhZ2VDT0QuZ2V0Q29kRm9ybURhdGEoMSwgJ3N0dWRlbnRfbmFtZScpXG4gICAgY29uc3QgbGFzdE5hbWVTdHVkZW50ID0gdGhpcy5sb2NhbFN0b3JhZ2VDT0QuZ2V0Q29kRm9ybURhdGEoMSwgJ3N0dWRlbnRfbGFzdF9uYW1lJylcbiAgICBjb25zdCB0eXBlSWRDYXJkU3R1ZGVudCA9IHRoaXMubG9jYWxTdG9yYWdlQ09ELmdldENvZEZvcm1EYXRhKDEsICdzdHVkZW50X2lkX2NhcmRfdHlwZScpXG4gICAgY29uc3QgaWRDYXJkU3R1ZGVudCA9IHRoaXMubG9jYWxTdG9yYWdlQ09ELmdldENvZEZvcm1EYXRhKDEsICdzdHVkZW50X2lkX2NhcmQnKVxuXG4gICAgY29uc29sZS5sb2coJ25hbWVTdHVkZW50JyxuYW1lU3R1ZGVudCk7XG4gICAgY29uc29sZS5sb2coJ2xhc3ROYW1lU3R1ZGVudCcsbGFzdE5hbWVTdHVkZW50KTtcbiAgICBjb25zb2xlLmxvZygndHlwZUlkQ2FyZFN0dWRlbnQnLHR5cGVJZENhcmRTdHVkZW50KTtcbiAgICBjb25zb2xlLmxvZygnaWRDYXJkU3R1ZGVudCcsaWRDYXJkU3R1ZGVudCk7XG5cbiAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19uYW1lJ10uc2V0VmFsdWUobmFtZVN0dWRlbnQpO1xuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX0FwZWxsaWRvJ10uc2V0VmFsdWUobGFzdE5hbWVTdHVkZW50KTtcbiAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19pZFR5cGUnXS5zZXRWYWx1ZSh0eXBlSWRDYXJkU3R1ZGVudCk7XG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfZG9jdW1lbnQnXS5zZXRWYWx1ZShpZENhcmRTdHVkZW50KTtcbiAgfVxuXG5cblxuICBiYWNrKCkge1xuICAgIGlmICghdGhpcy5pc1NlbGVjdGlvbk9wdGlvblBheW1lbnRzICYmICF0aGlzLmlzRWRpdEJpbGxpbmdEYXRhKSB7XG4gICAgICAvLyBWb2x2ZXIgYSBsYSBlZGljacOzbiBkZSBkYXRvcyBkZSBmYWN0dXJhY2nDs25cbiAgICAgIHRoaXMuaXNFZGl0QmlsbGluZ0RhdGEgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNTZWxlY3Rpb25PcHRpb25QYXltZW50cyAmJiB0aGlzLmlzRWRpdEJpbGxpbmdEYXRhKSB7XG4gICAgICAvLyBWb2x2ZXIgYSBsYSBzZWxlY2Npw7NuIGRlIG9wY2lvbmVzIGRlIHBhZ29cbiAgICAgIHRoaXMuaXNTZWxlY3Rpb25PcHRpb25QYXltZW50cyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFZvbHZlciBhbCBwYXNvIGFudGVyaW9yXG4gICAgICB0aGlzLmNvbXBsZXRlZC5lbWl0KDIpO1xuICAgIH1cbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25PcHRpb25QYXltZW50cykge1xuICAgICAgLy8gQXZhbnphciBhIGxhIGVkaWNpw7NuIGRlIGRhdG9zIGRlIGZhY3R1cmFjacOzblxuICAgICAgdGhpcy5pc1NlbGVjdGlvbk9wdGlvblBheW1lbnRzID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pc0VkaXRCaWxsaW5nRGF0YSkge1xuICAgICAgLy8gRmluYWxpemFyIGxhIGVkaWNpw7NuIGRlIGRhdG9zIGRlIGZhY3R1cmFjacOzblxuICAgICAgdGhpcy5pc0VkaXRCaWxsaW5nRGF0YSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbXBsZXRhciBlbCBmb3JtdWxhcmlvIHkgcHJvY2VkZXJcbiAgICAgIHRoaXMuc2VuZEZvcm0oKTtcbiAgICB9XG4gIH1cblxuICBzdGFydExvY2FsU3RvcmFnZVdvcmsoKSB7XG4gICAgdGhpcy5jb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4ge1xuICAgICAgbGV0IGxvY2FsU3RvcmFnZVZhbHVlOiBsb2NhbFN0b3JhZ2VWYWx1ZXNUd28gPSB0aGlzLnJlYWRBbmRXcml0ZUxTKDQsIGNvbnRyb2wubmFtZSk7XG4gICAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbY29udHJvbC5uYW1lXS5zZXRWYWx1ZShsb2NhbFN0b3JhZ2VWYWx1ZS52YWx1ZSk7XG4gICAgICB0aGlzLmxpc3RlbkZvcm1DaGFuZ2VzKDQsIGNvbnRyb2wubmFtZSwgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzW2NvbnRyb2wubmFtZV0udmFsdWVDaGFuZ2VzKTtcbiAgICB9KTtcbiAgfVxuICBlZGl0QmlsbGluZ0RhdGEoKSB7XG4gICAgLy8gQWN0aXZhciBsYSBlZGljacOzbiBkZSBkYXRvcyBkZSBmYWN0dXJhY2nDs25cbiAgICB0aGlzLmlzRWRpdEJpbGxpbmdEYXRhID0gZmFsc2U7XG4gIH1cblxuICB1cGRhdGVEYXRvc0JpbGxpbmdEYXRhKCkge1xuICAgIC8vIEd1YXJkYXIgZGF0b3MgZGUgZmFjdHVyYWNpw7NuIHkgcmVncmVzYXIgYSBsYSB2aXN0YSBkZSByZXN1bWVuXG4gICAgdGhpcy5pc0VkaXRCaWxsaW5nRGF0YSA9IHRydWU7XG4gIH1cblxuICAvLyBnZXRQYXJhbWVudGVycygpIHtcbiAgLy8gICB0aGlzLnBhcmFtZXRlclNlcnZpY2UuZ2V0Q2FyZFR5cGVzKCdjb2wnKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gIC8vICAgICB0aGlzLmlkVHlwZXMgPSByZXNwb25zZS5kYXRhO1xuICAvLyAgIH0pO1xuICAvLyB9XG5cbiAgc2VuZEZvcm0oKSB7XG4gICAgLy8gQXF1w60gdmEgbGEgbMOzZ2ljYSBwYXJhIGVudmlhciBlbCBmb3JtdWxhcmlvXG4gICAgY29uc29sZS5sb2coJ0VqZWN1dGEgZW5kcG9pbnQnKTtcbiAgICAvLyBNb3Zlcm5vcyBhbCBzaWd1aWVudGUgcGFzb1xuICAgIHRoaXMuY29tcGxldGVkLmVtaXQoNCk7XG4gIH1cblxuICBvblJlamVjdCgpIHtcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNsZWFyKCdjb25maXJtJyk7XG4gICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gIH1cblxuICBzaG93Q29uZmlybSgpIHtcbiAgICBpZiAoIXRoaXMudmlzaWJsZSkge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBrZXk6ICdjb25maXJtJywgc3RpY2t5OiB0cnVlLCBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnQ2FuIHlvdSBzZW5kIG1lIHRoZSByZXBvcnQ/JywgbGlmZTogMTAwMDAgfSk7XG4gICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdE9wY2lvbnNQYXltZW50cyhldmU6IEl3ZWVrRGF5c1JxKSB7XG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvblBheW1lbnRzID0gZXZlO1xuICAgIHRoaXMuaXNTZWxlY3Rpb25PcHRpb25QYXltZW50cyA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25QYXltZW50cyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydvcHRpb25zUGF5bWVudHMnXS5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkT3B0aW9uUGF5bWVudHMuY29kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snb3B0aW9uc1BheW1lbnRzJ10uc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0SWRUeXBlKGlkVHlwZTogYW55KSB7XG4gICAgaWYgKGlkVHlwZSAhPT0gJ1RpcG8gZGUgZG9jdW1lbnRvJykge1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfaWRUeXBlJ10uc2V0VmFsdWUoaWRUeXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfaWRUeXBlJ10uc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgLy8gTcOpdG9kbyBwYXJhIGRldGVybWluYXIgbGEgdmlzdGEgYmFzYWRhIGVuIGVsIGPDs2RpZ28gZGUgbGEgb3BjacOzbiBkZSBwYWdvIHNlbGVjY2lvbmFkYVxuICBnZXRWaWV3QmFzZWRPblBheW1lbnRPcHRpb24oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvblBheW1lbnRzPy5jb2RlID09PSAxKSB7XG4gICAgICByZXR1cm4gJ2luJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25QYXltZW50cz8uY29kZSA9PT0gMykge1xuICAgICAgcmV0dXJuICd0cic7XG4gICAgfVxuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH1cblxuICBnZXRJZFR5cGVEZXNjcmlwdGlvbihpZFR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChpZFR5cGUpIHtcbiAgICAgIGNhc2UgJzAnOlxuICAgICAgICByZXR1cm4gJ04vQSc7XG4gICAgICBjYXNlICcxJzpcbiAgICAgICAgcmV0dXJuICdDLkMnO1xuICAgICAgY2FzZSAnMic6XG4gICAgICAgIHJldHVybiAnVC5JJztcbiAgICAgIGNhc2UgJzMnOlxuICAgICAgICByZXR1cm4gJ0MuRSc7XG4gICAgICBjYXNlICc0JzpcbiAgICAgICAgcmV0dXJuICdQLkUuUCc7XG4gICAgICBjYXNlICc1JzpcbiAgICAgICAgcmV0dXJuICdSLlUuTSc7XG4gICAgICBjYXNlICc2JzpcbiAgICAgICAgcmV0dXJuICdQLlAuVCc7XG4gICAgICBjYXNlICc3JzpcbiAgICAgICAgcmV0dXJuICdQLkEnO1xuICAgICAgY2FzZSAnOCc6XG4gICAgICAgIHJldHVybiAnUi5DJztcbiAgICAgIGNhc2UgJzknOlxuICAgICAgICByZXR1cm4gJ0MuRCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLW1haW5cIj5cbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mb3JtXCI+XG4gICAgPGgyPkRhdG9zIGRlIEZhY3R1cmFjaW9uPC9oMj5cbiAgICA8cC10b2FzdCBwb3NpdGlvbj1cInRvcC1jZW50ZXJcIiBrZXk9XCJjb25maXJtXCIgKG9uQ2xvc2UpPVwib25SZWplY3QoKVwiIFtiYXNlWkluZGV4XT1cIjEwXCI+XG4gICAgICA8bmctdGVtcGxhdGUgbGV0LW1lc3NhZ2UgcFRlbXBsYXRlPVwibWVzc2FnZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1zdGFydFwiIHN0eWxlPVwiZmxleDogMVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3FhLmlwdGRldi5jb20uY28vYXNzZXRzL2xvZ29zL3JlYWRpbmcucG5nXCIgc3R5bGU9XCJ3aWR0aDogNjVweDtcIiBzaGFwZT1cImNpcmNsZVwiIC8+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZCB0ZXh0LTkwMFwiPkphY29iPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LWxnIG15LTMgdGV4dC05MDBcIj57eyBtZXNzYWdlSW5mbyB9fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9wLXRvYXN0PlxuICAgIDxpIGNsYXNzPVwicGkgcGktZXhjbGFtYXRpb24tY2lyY2xlIGN1cnNvci1wb2ludGVyIHctYXV0byBtYi00XCIgKGNsaWNrKT1cInNob3dDb25maXJtKClcIiBwVG9vbHRpcD1cIk1hcyBpbmZvLlwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiPjwvaT5cbiAgICA8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImNvZFNlbGZGb3JtU3RlcEZvdXJcIiBjbGFzcz1cImdyaWQgbXQtMiBmbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lcl9fYm9keV9fc2VsZWN0IGZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LXdyYXBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lcl9fdHlwZV9fcGF5bWVudHNcIiAqbmdJZj1cImlzU2VsZWN0aW9uT3B0aW9uUGF5bWVudHNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBnYXAtM1wiPlxuICAgICAgICAgICAgPGgzPsK/Q29tbyBxdWllcmVzIHBhZ2FyPzwvaDM+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBPcHRpb25QYXltZW50czsgaW5kZXggYXMgaW5kXCIgY2xhc3M9XCJmaWVsZC1jaGVja2JveFwiPlxuICAgICAgICAgICAgICA8cC1yYWRpb0J1dHRvblxuICAgICAgICAgICAgICAgIFtpbnB1dElkXT1cImNhdGVnb3J5LmtleVwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY2F0ZWdvcnlcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRPcHRpb25QYXltZW50c1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGV3ZWVrZGF5c1tpbmRdXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdE9wY2lvbnNQYXltZW50cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwvcC1yYWRpb0J1dHRvbj5cbiAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiY2F0ZWdvcnkua2V5XCIgY2xhc3M9XCJtbC0yXCI+XG4gICAgICAgICAgICAgICAge3sgY2F0ZWdvcnkubmFtZSB9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJfX29wc3Rpb25fX2luc3RhbGF0aW9uc1wiICpuZ0lmPVwiIWlzU2VsZWN0aW9uT3B0aW9uUGF5bWVudHNcIj5cbiAgICAgICAgICA8IS0tIFZpc3RhIHBhcmEgbGEgb3BjacOzbiBkZSBwYWdvIFwiSW5zdGFsYWNpb25lc1wiIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRWaWV3QmFzZWRPblBheW1lbnRPcHRpb24oKSA9PT0gJ2luJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lcl9faW5mbyBmbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTEgbWItNFwiICpuZ0lmPVwiaXNFZGl0QmlsbGluZ0RhdGFcIj5cblxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vcWEuaXB0ZGV2LmNvbS5jby9hc3NldHMvbG9nb3MvbG9iby13ZWIucG5nXCJcbiAgICAgICAgICAgICAgYWx0PVwiUmVjZWlwdCBJY29uXCJcbiAgICAgICAgICAgICAgc2hhcGU9XCJjaXJjbGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNpcmN1bGFyLWltYWdlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzdHJvbmc+e3sgY29kU2VsZkZvcm1TdGVwRm91ci5nZXQoJ2ludm9pY2luZ19uYW1lJyk/LnZhbHVlIH19IHt7IGNvZFNlbGZGb3JtU3RlcEZvdXIuZ2V0KCdpbnZvaWNpbmdfQXBlbGxpZG8nKT8udmFsdWUgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgZ2V0SWRUeXBlRGVzY3JpcHRpb24oY29kU2VsZkZvcm1TdGVwRm91ci5nZXQoJ2ludm9pY2luZ19pZFR5cGUnKT8udmFsdWUpIH19IHt7IGNvZFNlbGZGb3JtU3RlcEZvdXIuZ2V0KCdpbnZvaWNpbmdfZG9jdW1lbnQnKT8udmFsdWUgfX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1idXR0b25cIj5cbiAgICAgICAgICAgICAgICA8aXB0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidNb2RpZmljYXIgRGF0b3MnXCJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImVkaXRCaWxsaW5nRGF0YSgpXCJcbiAgICAgICAgICAgICAgICAgIFtwcmltYXJ5XT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgPC9pcHQtYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tM1wiICpuZ0lmPVwiIWlzRWRpdEJpbGxpbmdEYXRhXCI+XG4gICAgICAgICAgICAgIDxoMz5Db21wbGV0YSBsb3MgbnVldm9zIGRhdG9zIHBhcmEgbGEgZW1pc2lvbiBkZSB0dSBmYWN0dXJhPC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTEgbWQ6Z2FwLTQgeGw6Z2FwLTggbS0xIHAtMiBib3JkZXItcm91bmQgYmctYmx1ZS01MDAgdGV4dC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJfaWNvbiBmbGV4IG1yLTQganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1zdGFydCBtdC0xXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlIGN1cnNvci1wb2ludGVyIHctYXV0byBtYi00XCIgcFRvb2x0aXA9XCJNYXMgaW5mby5cIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIj48L2k+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gY29udGFpbmVyX2luZm9fc3BhbiBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5TaSBwcm9wb3JjaW9uYXMgZGF0b3MgZGUgdW4gdGVyY2VybywgY29uZmlybWFzIHF1ZSBsb3MgZGF0b3Mgc29uIGNvcnJlY3RvcyB5IHF1ZSB0aWVuZXMgc3UgY29uc2VudGltaWVudG8gcGFyYSBlbCB1c28gZGUgbGEgaW5mb3JtYWNpb24uIEVzdG9zIGRhdG9zIHNlIHRyYXRhcmFuIGRlIGFjdWVyZG8gYSBudWVzdHJhIDxhIGhyZWY9XCJcIj5EZWNsYXJhY2lvbiBkZSBQcml2YWNpZGFkPC9hPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICAgICAgW2lucHV0VHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidOb21icmVzJ1wiXG4gICAgICAgICAgICAgICAgICBbY29udHJvbF09XCJjb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfbmFtZSddXCJcbiAgICAgICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICAgICAgW2lucHV0VHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidBcGVsbGlkbydcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX0FwZWxsaWRvJ11cIlxuICAgICAgICAgICAgICAgID48L2lwdC1pbnB1dD5cbiAgICAgICAgICAgICAgICA8aXB0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgW2luaXRpYWxWYWx1ZV09XCJjb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfaWRUeXBlJ10udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX2lkVHlwZSddXCJcbiAgICAgICAgICAgICAgICAgIFtzZWxlY3RDb2RlXT1cImNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19pZFR5cGUnXS52YWx1ZSA9PT0gbnVsbCA/ICdUaXBvIGRlIGRvY3VtZW50bycgOiBjb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfaWRUeXBlJ10udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbZGF0YV09XCJpZFR5cGVzXCJcbiAgICAgICAgICAgICAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RJZFR5cGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbZGVmYXVsdFRleHRdPVwiJ1RpcG8gZGUgZG9jdW1lbnRvJ1wiXG4gICAgICAgICAgICAgICAgPjwvaXB0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8aXB0LWlucHV0XG4gICAgICAgICAgICAgICAgICBbaW5wdXRUeXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICBbcGxhY2VIb2xkZXJdPVwiJ0RvY3VtZW50bydcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX2RvY3VtZW50J11cIlxuICAgICAgICAgICAgICAgID48L2lwdC1pbnB1dD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgbXQtMyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNvZFNlbGZGb3JtU3RlcEZvdXIudmFsaWRcIlxuICAgICAgICAgICAgICAgICAgbGFiZWw9XCJDb250aW51YXJcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlRGF0b3NCaWxsaW5nRGF0YSgpXCJcbiAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFZpc3RhIHBhcmEgbGEgb3BjacOzbiBkZSBwYWdvIFwiVHJhbnNmZXJlbmNpYVwiIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRWaWV3QmFzZWRPblBheW1lbnRPcHRpb24oKSA9PT0gJ3RyJ1wiPlxuICAgICAgICAgICAgPGgzPkNvbXBsZXRhIGxvcyBkYXRvcyBwYXJhIFRyYW5zZmVyZW5jaWE8L2gzPlxuICAgICAgICAgICAgPCEtLSBBcXXDrSBwdWVkZXMgYWdyZWdhciBlbCBmb3JtdWxhcmlvIGVzcGVjw61maWNvIHBhcmEgVHJhbnNmZXJlbmNpYSAtLT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtdC0zIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBwQnV0dG9uXG4gICAgICAgIGljb249XCJwaSBwaS1hcnJvdy1sZWZ0XCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJiYWNrKClcIlxuICAgICAgPjwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIiFpc1NlbGVjdGlvbk9wdGlvblBheW1lbnRzICYmIGlzRWRpdEJpbGxpbmdEYXRhICYmIGNvZFNlbGZGb3JtU3RlcEZvdXIudmFsaWRcIlxuICAgICAgICBwQnV0dG9uXG4gICAgICAgIGxhYmVsPVwiR3VhcmRhclwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwic2VuZEZvcm0oKVwiXG4gICAgICA+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXY+XG4gIDxwcmU+e3sgY29kU2VsZkZvcm1TdGVwRm91ci52YWx1ZSB8IGpzb24gfX08L3ByZT5cbiAgPGRpdj5cbiAgICA8cHJlPnt7IGNvZFNlbGZGb3JtU3RlcEZvdXIudmFsaWQgfCBqc29uIH19PC9wcmU+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLXNlbGYtZm9ybS1zdGVwLWZvdXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvZC1zZWxmLW1hbmFnZWQvc3RlcHMvY29kLWZvcm0tc3RlcC1mb3VyL2NvZC1zZWxmLWZvcm0tc3RlcC1mb3VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2Rlc2lnbi1zeXN0ZW0vc3JjL2xpYi9jb2Qtc2VsZi1tYW5hZ2VkL3N0ZXBzL2NvZC1mb3JtLXN0ZXAtZm91ci9jb2Qtc2VsZi1mb3JtLXN0ZXAtZm91ci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPcEUsT0FBTyxFQUFFLG1CQUFtQixFQUF5QixNQUFNLG9DQUFvQyxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7Ozs7QUFPL0UsTUFBTSxPQUFPLDRCQUE2QixTQUFRLG1CQUFtQjtJQW9CbkUsWUFDVSxFQUFlLEVBQ2YsY0FBOEI7UUFFdEMsS0FBSyxFQUFFLENBQUM7UUFIQSxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBbkI5QixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN2QyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUU5QyxhQUFRLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRCxnQkFBVyxHQUFXLCtDQUErQyxDQUFDO1FBQ3RFLFlBQU8sR0FBWSxLQUFLLENB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R0FBRztnQkFDTixPQUFPLE9BQU8sQ0FBQztZQUNqQixLQUFLLEdBQUc7Z0JBQ04sT0FBTyxPQUFPLENBQUM7WUFDakIsS0FBSyxHQUFHO2dCQUNOLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLEtBQUssR0FBRztnQkFDTixPQUFPLEtBQUssQ0FBQztZQUNmLEtBQUssR0FBRztnQkFDTixPQUFPLEtBQUssQ0FBQztZQUNmLEtBQUssR0FBRztnQkFDTixPQUFPLEtBQUssQ0FBQztZQUNmO2dCQUNFLE9BQU8sRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDOzt5SEEzTFUsNEJBQTRCOzZHQUE1Qiw0QkFBNEIsaUxDaEJ6Qyxzck5BNElBOzJGRDVIYSw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0UsNkJBQTZCOytIQU05QixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0ksU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vL2ltcG9ydCBQcmltZW5nXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuLy8gaW1wb3J0IE1vZGVsc1xuaW1wb3J0IHsgSXdlZWtEYXlzUnEgfSBmcm9tICcuLy4uLy4uLy4uL2NvcmUvbW9kZWxzL2FjYWRlbWljL2FjYWRlbWljLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb2RTZWxmTWFuYWdlZFN0ZXBzLCBsb2NhbFN0b3JhZ2VWYWx1ZXNUd28gfSBmcm9tICcuLi8uLi9sb2dpYy9jb2Qtc2VsZi1tYW5hZ2VkLXN0ZXBzJztcbmltcG9ydCB7IENvZFNlbGZNYW5hZ2VkQ29udHJvbHMgfSBmcm9tICcuLi8uLi9sb2dpYy9jb2Qtc2VsZi1tYW5hZ2VkLWNvbnRyb2xzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNvZC1zZWxmLWZvcm0tc3RlcC1mb3VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvZC1zZWxmLWZvcm0tc3RlcC1mb3VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29kLXNlbGYtZm9ybS1zdGVwLWZvdXIuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDb2RTZWxmRm9ybVN0ZXBGb3VyQ29tcG9uZW50IGV4dGVuZHMgQ29kU2VsZk1hbmFnZWRTdGVwcyBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgaWRUeXBlczogYW55O1xuICBAT3V0cHV0KCkgY29tcGxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBhY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBjb250cm9scyA9IG5ldyBDb2RTZWxmTWFuYWdlZENvbnRyb2xzKCkuY29udHJvbHNbM107XG4gIG1lc3NhZ2VJbmZvOiBzdHJpbmcgPSBcIkRhdG9zIGRlIGZhY3R1cmFjaW9uIGRlIGFjdWVyZG8gYSB0dSBlbGVjY2lvblwiO1xuICB2aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIGNvZFNlbGZGb3JtU3RlcEZvdXIhOiBGb3JtR3JvdXA7XG4gIHNlbGVjdGVkT3B0aW9uUGF5bWVudHM/OiBJd2Vla0RheXNScTtcbiAgbWVzc2FnZUFsZXJ0UGxhY2VtZW50VGVzdCA9IGZhbHNlO1xuICBkaXNhYmxld2Vla2RheXM6IGJvb2xlYW5bXSA9IFtdO1xuICBpc1NlbGVjdGlvbk9wdGlvblBheW1lbnRzID0gdHJ1ZTtcbiAgaXNFZGl0QmlsbGluZ0RhdGEgPSB0cnVlO1xuICBPcHRpb25QYXltZW50czogYW55W10gPSBbXG4gICAgeyBjb2RlOiAxLCBrZXk6ICdpbicsIG5hbWU6ICdJbnN0YWxhY2lvbmVzJyB9LFxuICAgIHsgY29kZTogMywga2V5OiAndHInLCBuYW1lOiAnVHJhbnNmZXJlbmNpYScgfSxcbiAgXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmluaXRGb3JtKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyB0aGlzLmdldFBhcmFtZW50ZXJzKCk7XG4gICAgdGhpcy5zdGFydExvY2FsU3RvcmFnZVdvcmsoKTtcbiAgICB0aGlzLmdldERhdGFVc2VyKCk7XG4gICAgY29uc29sZS5sb2coJ2lkVHlwZXMnLHRoaXMuaWRUeXBlcyk7XG5cbiAgfVxuICBpbml0Rm9ybSgpIHtcbiAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG9wdGlvbnNQYXltZW50czogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgaW52b2ljaW5nX25hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGludm9pY2luZ19BcGVsbGlkbzogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgaW52b2ljaW5nX2lkVHlwZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgaW52b2ljaW5nX2RvY3VtZW50OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgfSk7XG4gIH1cbiAgZ2V0RGF0YVVzZXIoKXtcbiAgICBjb25zdCBuYW1lU3R1ZGVudCA9IHRoaXMubG9jYWxTdG9yYWdlQ09ELmdldENvZEZvcm1EYXRhKDEsICdzdHVkZW50X25hbWUnKVxuICAgIGNvbnN0IGxhc3ROYW1lU3R1ZGVudCA9IHRoaXMubG9jYWxTdG9yYWdlQ09ELmdldENvZEZvcm1EYXRhKDEsICdzdHVkZW50X2xhc3RfbmFtZScpXG4gICAgY29uc3QgdHlwZUlkQ2FyZFN0dWRlbnQgPSB0aGlzLmxvY2FsU3RvcmFnZUNPRC5nZXRDb2RGb3JtRGF0YSgxLCAnc3R1ZGVudF9pZF9jYXJkX3R5cGUnKVxuICAgIGNvbnN0IGlkQ2FyZFN0dWRlbnQgPSB0aGlzLmxvY2FsU3RvcmFnZUNPRC5nZXRDb2RGb3JtRGF0YSgxLCAnc3R1ZGVudF9pZF9jYXJkJylcblxuICAgIGNvbnNvbGUubG9nKCduYW1lU3R1ZGVudCcsbmFtZVN0dWRlbnQpO1xuICAgIGNvbnNvbGUubG9nKCdsYXN0TmFtZVN0dWRlbnQnLGxhc3ROYW1lU3R1ZGVudCk7XG4gICAgY29uc29sZS5sb2coJ3R5cGVJZENhcmRTdHVkZW50Jyx0eXBlSWRDYXJkU3R1ZGVudCk7XG4gICAgY29uc29sZS5sb2coJ2lkQ2FyZFN0dWRlbnQnLGlkQ2FyZFN0dWRlbnQpO1xuXG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfbmFtZSddLnNldFZhbHVlKG5hbWVTdHVkZW50KTtcbiAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19BcGVsbGlkbyddLnNldFZhbHVlKGxhc3ROYW1lU3R1ZGVudCk7XG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfaWRUeXBlJ10uc2V0VmFsdWUodHlwZUlkQ2FyZFN0dWRlbnQpO1xuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX2RvY3VtZW50J10uc2V0VmFsdWUoaWRDYXJkU3R1ZGVudCk7XG4gIH1cblxuXG5cbiAgYmFjaygpIHtcbiAgICBpZiAoIXRoaXMuaXNTZWxlY3Rpb25PcHRpb25QYXltZW50cyAmJiAhdGhpcy5pc0VkaXRCaWxsaW5nRGF0YSkge1xuICAgICAgLy8gVm9sdmVyIGEgbGEgZWRpY2nDs24gZGUgZGF0b3MgZGUgZmFjdHVyYWNpw7NuXG4gICAgICB0aGlzLmlzRWRpdEJpbGxpbmdEYXRhID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzU2VsZWN0aW9uT3B0aW9uUGF5bWVudHMgJiYgdGhpcy5pc0VkaXRCaWxsaW5nRGF0YSkge1xuICAgICAgLy8gVm9sdmVyIGEgbGEgc2VsZWNjacOzbiBkZSBvcGNpb25lcyBkZSBwYWdvXG4gICAgICB0aGlzLmlzU2VsZWN0aW9uT3B0aW9uUGF5bWVudHMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWb2x2ZXIgYWwgcGFzbyBhbnRlcmlvclxuICAgICAgdGhpcy5jb21wbGV0ZWQuZW1pdCgyKTtcbiAgICB9XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uT3B0aW9uUGF5bWVudHMpIHtcbiAgICAgIC8vIEF2YW56YXIgYSBsYSBlZGljacOzbiBkZSBkYXRvcyBkZSBmYWN0dXJhY2nDs25cbiAgICAgIHRoaXMuaXNTZWxlY3Rpb25PcHRpb25QYXltZW50cyA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNFZGl0QmlsbGluZ0RhdGEpIHtcbiAgICAgIC8vIEZpbmFsaXphciBsYSBlZGljacOzbiBkZSBkYXRvcyBkZSBmYWN0dXJhY2nDs25cbiAgICAgIHRoaXMuaXNFZGl0QmlsbGluZ0RhdGEgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb21wbGV0YXIgZWwgZm9ybXVsYXJpbyB5IHByb2NlZGVyXG4gICAgICB0aGlzLnNlbmRGb3JtKCk7XG4gICAgfVxuICB9XG5cbiAgc3RhcnRMb2NhbFN0b3JhZ2VXb3JrKCkge1xuICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IHtcbiAgICAgIGxldCBsb2NhbFN0b3JhZ2VWYWx1ZTogbG9jYWxTdG9yYWdlVmFsdWVzVHdvID0gdGhpcy5yZWFkQW5kV3JpdGVMUyg0LCBjb250cm9sLm5hbWUpO1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzW2NvbnRyb2wubmFtZV0uc2V0VmFsdWUobG9jYWxTdG9yYWdlVmFsdWUudmFsdWUpO1xuICAgICAgdGhpcy5saXN0ZW5Gb3JtQ2hhbmdlcyg0LCBjb250cm9sLm5hbWUsIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1tjb250cm9sLm5hbWVdLnZhbHVlQ2hhbmdlcyk7XG4gICAgfSk7XG4gIH1cbiAgZWRpdEJpbGxpbmdEYXRhKCkge1xuICAgIC8vIEFjdGl2YXIgbGEgZWRpY2nDs24gZGUgZGF0b3MgZGUgZmFjdHVyYWNpw7NuXG4gICAgdGhpcy5pc0VkaXRCaWxsaW5nRGF0YSA9IGZhbHNlO1xuICB9XG5cbiAgdXBkYXRlRGF0b3NCaWxsaW5nRGF0YSgpIHtcbiAgICAvLyBHdWFyZGFyIGRhdG9zIGRlIGZhY3R1cmFjacOzbiB5IHJlZ3Jlc2FyIGEgbGEgdmlzdGEgZGUgcmVzdW1lblxuICAgIHRoaXMuaXNFZGl0QmlsbGluZ0RhdGEgPSB0cnVlO1xuICB9XG5cbiAgLy8gZ2V0UGFyYW1lbnRlcnMoKSB7XG4gIC8vICAgdGhpcy5wYXJhbWV0ZXJTZXJ2aWNlLmdldENhcmRUeXBlcygnY29sJykuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAvLyAgICAgdGhpcy5pZFR5cGVzID0gcmVzcG9uc2UuZGF0YTtcbiAgLy8gICB9KTtcbiAgLy8gfVxuXG4gIHNlbmRGb3JtKCkge1xuICAgIC8vIEFxdcOtIHZhIGxhIGzDs2dpY2EgcGFyYSBlbnZpYXIgZWwgZm9ybXVsYXJpb1xuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgLy8gaWYgKHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5pbnZhbGlkIHx8IHRoaXMudGVybXNDaGVja2JveFN0YXR1cyA9PT0gZmFsc2UpIHJldHVybjtcbiAgICAgICB0aGlzLmFjdGlvbi5lbWl0KCdjcmVhdGUnKTtcbiAgICBjb25zb2xlLmxvZygnRWplY3V0YSBlbmRwb2ludCcpO1xuICAgIC8vIHRoaXMuY29tcGxldGVkLmVtaXQoNCk7XG4gIH1cblxuICBvblJlamVjdCgpIHtcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNsZWFyKCdjb25maXJtJyk7XG4gICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gIH1cblxuICBzaG93Q29uZmlybSgpIHtcbiAgICBpZiAoIXRoaXMudmlzaWJsZSkge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBrZXk6ICdjb25maXJtJywgc3RpY2t5OiB0cnVlLCBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnQ2FuIHlvdSBzZW5kIG1lIHRoZSByZXBvcnQ/JywgbGlmZTogMTAwMDAgfSk7XG4gICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdE9wY2lvbnNQYXltZW50cyhldmU6IEl3ZWVrRGF5c1JxKSB7XG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvblBheW1lbnRzID0gZXZlO1xuICAgIHRoaXMuaXNTZWxlY3Rpb25PcHRpb25QYXltZW50cyA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25QYXltZW50cyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydvcHRpb25zUGF5bWVudHMnXS5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkT3B0aW9uUGF5bWVudHMuY29kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snb3B0aW9uc1BheW1lbnRzJ10uc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0SWRUeXBlKGlkVHlwZTogYW55KSB7XG4gICAgaWYgKGlkVHlwZSAhPT0gJ1RpcG8gZGUgZG9jdW1lbnRvJykge1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfaWRUeXBlJ10uc2V0VmFsdWUoaWRUeXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfaWRUeXBlJ10uc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgLy8gTcOpdG9kbyBwYXJhIGRldGVybWluYXIgbGEgdmlzdGEgYmFzYWRhIGVuIGVsIGPDs2RpZ28gZGUgbGEgb3BjacOzbiBkZSBwYWdvIHNlbGVjY2lvbmFkYVxuICBnZXRWaWV3QmFzZWRPblBheW1lbnRPcHRpb24oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvblBheW1lbnRzPy5jb2RlID09PSAxKSB7XG4gICAgICByZXR1cm4gJ2luJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25QYXltZW50cz8uY29kZSA9PT0gMykge1xuICAgICAgcmV0dXJuICd0cic7XG4gICAgfVxuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH1cblxuICBnZXRJZFR5cGVEZXNjcmlwdGlvbihpZFR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChpZFR5cGUpIHtcbiAgICAgIGNhc2UgJzAnOlxuICAgICAgICByZXR1cm4gJ04vQSc7XG4gICAgICBjYXNlICcxJzpcbiAgICAgICAgcmV0dXJuICdDLkMnO1xuICAgICAgY2FzZSAnMic6XG4gICAgICAgIHJldHVybiAnVC5JJztcbiAgICAgIGNhc2UgJzMnOlxuICAgICAgICByZXR1cm4gJ0MuRSc7XG4gICAgICBjYXNlICc0JzpcbiAgICAgICAgcmV0dXJuICdQLkUuUCc7XG4gICAgICBjYXNlICc1JzpcbiAgICAgICAgcmV0dXJuICdSLlUuTSc7XG4gICAgICBjYXNlICc2JzpcbiAgICAgICAgcmV0dXJuICdQLlAuVCc7XG4gICAgICBjYXNlICc3JzpcbiAgICAgICAgcmV0dXJuICdQLkEnO1xuICAgICAgY2FzZSAnOCc6XG4gICAgICAgIHJldHVybiAnUi5DJztcbiAgICAgIGNhc2UgJzknOlxuICAgICAgICByZXR1cm4gJ0MuRCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLW1haW5cIj5cbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mb3JtXCI+XG4gICAgPGgyPkRhdG9zIGRlIEZhY3R1cmFjaW9uPC9oMj5cbiAgICA8cC10b2FzdCBwb3NpdGlvbj1cInRvcC1jZW50ZXJcIiBrZXk9XCJjb25maXJtXCIgKG9uQ2xvc2UpPVwib25SZWplY3QoKVwiIFtiYXNlWkluZGV4XT1cIjEwXCI+XG4gICAgICA8bmctdGVtcGxhdGUgbGV0LW1lc3NhZ2UgcFRlbXBsYXRlPVwibWVzc2FnZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1zdGFydFwiIHN0eWxlPVwiZmxleDogMVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3FhLmlwdGRldi5jb20uY28vYXNzZXRzL2xvZ29zL3JlYWRpbmcucG5nXCIgc3R5bGU9XCJ3aWR0aDogNjVweDtcIiBzaGFwZT1cImNpcmNsZVwiIC8+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZCB0ZXh0LTkwMFwiPkphY29iPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LWxnIG15LTMgdGV4dC05MDBcIj57eyBtZXNzYWdlSW5mbyB9fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9wLXRvYXN0PlxuICAgIDxpIGNsYXNzPVwicGkgcGktZXhjbGFtYXRpb24tY2lyY2xlIGN1cnNvci1wb2ludGVyIHctYXV0byBtYi00XCIgKGNsaWNrKT1cInNob3dDb25maXJtKClcIiBwVG9vbHRpcD1cIk1hcyBpbmZvLlwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiPjwvaT5cbiAgICA8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImNvZFNlbGZGb3JtU3RlcEZvdXJcIiBjbGFzcz1cImdyaWQgbXQtMiBmbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lcl9fYm9keV9fc2VsZWN0IGZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LXdyYXBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lcl9fdHlwZV9fcGF5bWVudHNcIiAqbmdJZj1cImlzU2VsZWN0aW9uT3B0aW9uUGF5bWVudHNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBnYXAtM1wiPlxuICAgICAgICAgICAgPGgzPsK/Q29tbyBxdWllcmVzIHBhZ2FyPzwvaDM+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBPcHRpb25QYXltZW50czsgaW5kZXggYXMgaW5kXCIgY2xhc3M9XCJmaWVsZC1jaGVja2JveFwiPlxuICAgICAgICAgICAgICA8cC1yYWRpb0J1dHRvblxuICAgICAgICAgICAgICAgIFtpbnB1dElkXT1cImNhdGVnb3J5LmtleVwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY2F0ZWdvcnlcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRPcHRpb25QYXltZW50c1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGV3ZWVrZGF5c1tpbmRdXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdE9wY2lvbnNQYXltZW50cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwvcC1yYWRpb0J1dHRvbj5cbiAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiY2F0ZWdvcnkua2V5XCIgY2xhc3M9XCJtbC0yXCI+XG4gICAgICAgICAgICAgICAge3sgY2F0ZWdvcnkubmFtZSB9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJfX29wc3Rpb25fX2luc3RhbGF0aW9uc1wiICpuZ0lmPVwiIWlzU2VsZWN0aW9uT3B0aW9uUGF5bWVudHNcIj5cbiAgICAgICAgICA8IS0tIFZpc3RhIHBhcmEgbGEgb3BjacOzbiBkZSBwYWdvIFwiSW5zdGFsYWNpb25lc1wiIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRWaWV3QmFzZWRPblBheW1lbnRPcHRpb24oKSA9PT0gJ2luJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lcl9faW5mbyBmbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTEgbWItNFwiICpuZ0lmPVwiaXNFZGl0QmlsbGluZ0RhdGFcIj5cblxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vcWEuaXB0ZGV2LmNvbS5jby9hc3NldHMvbG9nb3MvbG9iby13ZWIucG5nXCJcbiAgICAgICAgICAgICAgYWx0PVwiUmVjZWlwdCBJY29uXCJcbiAgICAgICAgICAgICAgc2hhcGU9XCJjaXJjbGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNpcmN1bGFyLWltYWdlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzdHJvbmc+e3sgY29kU2VsZkZvcm1TdGVwRm91ci5nZXQoJ2ludm9pY2luZ19uYW1lJyk/LnZhbHVlIH19IHt7IGNvZFNlbGZGb3JtU3RlcEZvdXIuZ2V0KCdpbnZvaWNpbmdfQXBlbGxpZG8nKT8udmFsdWUgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgZ2V0SWRUeXBlRGVzY3JpcHRpb24oY29kU2VsZkZvcm1TdGVwRm91ci5nZXQoJ2ludm9pY2luZ19pZFR5cGUnKT8udmFsdWUpIH19IHt7IGNvZFNlbGZGb3JtU3RlcEZvdXIuZ2V0KCdpbnZvaWNpbmdfZG9jdW1lbnQnKT8udmFsdWUgfX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1idXR0b25cIj5cbiAgICAgICAgICAgICAgICA8aXB0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidNb2RpZmljYXIgRGF0b3MnXCJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImVkaXRCaWxsaW5nRGF0YSgpXCJcbiAgICAgICAgICAgICAgICAgIFtwcmltYXJ5XT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgPC9pcHQtYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tM1wiICpuZ0lmPVwiIWlzRWRpdEJpbGxpbmdEYXRhXCI+XG4gICAgICAgICAgICAgIDxoMz5Db21wbGV0YSBsb3MgbnVldm9zIGRhdG9zIHBhcmEgbGEgZW1pc2lvbiBkZSB0dSBmYWN0dXJhPC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTEgbWQ6Z2FwLTQgeGw6Z2FwLTggbS0xIHAtMiBib3JkZXItcm91bmQgYmctYmx1ZS01MDAgdGV4dC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJfaWNvbiBmbGV4IG1yLTQganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1zdGFydCBtdC0xXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlIGN1cnNvci1wb2ludGVyIHctYXV0byBtYi00XCIgcFRvb2x0aXA9XCJNYXMgaW5mby5cIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIj48L2k+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gY29udGFpbmVyX2luZm9fc3BhbiBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5TaSBwcm9wb3JjaW9uYXMgZGF0b3MgZGUgdW4gdGVyY2VybywgY29uZmlybWFzIHF1ZSBsb3MgZGF0b3Mgc29uIGNvcnJlY3RvcyB5IHF1ZSB0aWVuZXMgc3UgY29uc2VudGltaWVudG8gcGFyYSBlbCB1c28gZGUgbGEgaW5mb3JtYWNpb24uIEVzdG9zIGRhdG9zIHNlIHRyYXRhcmFuIGRlIGFjdWVyZG8gYSBudWVzdHJhIDxhIGhyZWY9XCJcIj5EZWNsYXJhY2lvbiBkZSBQcml2YWNpZGFkPC9hPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICAgICAgW2lucHV0VHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidOb21icmVzJ1wiXG4gICAgICAgICAgICAgICAgICBbY29udHJvbF09XCJjb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfbmFtZSddXCJcbiAgICAgICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICAgICAgW2lucHV0VHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidBcGVsbGlkbydcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX0FwZWxsaWRvJ11cIlxuICAgICAgICAgICAgICAgID48L2lwdC1pbnB1dD5cbiAgICAgICAgICAgICAgICA8aXB0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgW2luaXRpYWxWYWx1ZV09XCJjb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfaWRUeXBlJ10udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX2lkVHlwZSddXCJcbiAgICAgICAgICAgICAgICAgIFtzZWxlY3RDb2RlXT1cImNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19pZFR5cGUnXS52YWx1ZSA9PT0gbnVsbCA/ICdUaXBvIGRlIGRvY3VtZW50bycgOiBjb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfaWRUeXBlJ10udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbZGF0YV09XCJpZFR5cGVzXCJcbiAgICAgICAgICAgICAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RJZFR5cGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbZGVmYXVsdFRleHRdPVwiJ1RpcG8gZGUgZG9jdW1lbnRvJ1wiXG4gICAgICAgICAgICAgICAgPjwvaXB0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8aXB0LWlucHV0XG4gICAgICAgICAgICAgICAgICBbaW5wdXRUeXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICBbcGxhY2VIb2xkZXJdPVwiJ0RvY3VtZW50bydcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX2RvY3VtZW50J11cIlxuICAgICAgICAgICAgICAgID48L2lwdC1pbnB1dD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgbXQtMyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNvZFNlbGZGb3JtU3RlcEZvdXIudmFsaWRcIlxuICAgICAgICAgICAgICAgICAgbGFiZWw9XCJDb250aW51YXJcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlRGF0b3NCaWxsaW5nRGF0YSgpXCJcbiAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFZpc3RhIHBhcmEgbGEgb3BjacOzbiBkZSBwYWdvIFwiVHJhbnNmZXJlbmNpYVwiIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRWaWV3QmFzZWRPblBheW1lbnRPcHRpb24oKSA9PT0gJ3RyJ1wiPlxuICAgICAgICAgICAgPGgzPkNvbXBsZXRhIGxvcyBkYXRvcyBwYXJhIFRyYW5zZmVyZW5jaWE8L2gzPlxuICAgICAgICAgICAgPCEtLSBBcXXDrSBwdWVkZXMgYWdyZWdhciBlbCBmb3JtdWxhcmlvIGVzcGVjw61maWNvIHBhcmEgVHJhbnNmZXJlbmNpYSAtLT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtdC0zIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBwQnV0dG9uXG4gICAgICAgIGljb249XCJwaSBwaS1hcnJvdy1sZWZ0XCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJiYWNrKClcIlxuICAgICAgPjwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIiFpc1NlbGVjdGlvbk9wdGlvblBheW1lbnRzICYmIGlzRWRpdEJpbGxpbmdEYXRhICYmIGNvZFNlbGZGb3JtU3RlcEZvdXIudmFsaWRcIlxuICAgICAgICBwQnV0dG9uXG4gICAgICAgIGxhYmVsPVwiR3VhcmRhclwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwic2VuZEZvcm0oKVwiXG4gICAgICA+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXY+XG4gIDxwcmU+e3sgY29kU2VsZkZvcm1TdGVwRm91ci52YWx1ZSB8IGpzb24gfX08L3ByZT5cbiAgPGRpdj5cbiAgICA8cHJlPnt7IGNvZFNlbGZGb3JtU3RlcEZvdXIudmFsaWQgfCBqc29uIH19PC9wcmU+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=