simpo-component-library 1.6.109 → 1.6.113

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,345 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { SimpoElementsModule } from './../../elements/index';
3
+ import { CommonModule } from '@angular/common';
4
+ import { SimpoComponentModule } from '../../components/index';
5
+ import { MatGridListModule } from '@angular/material/grid-list';
6
+ import { SimpoButtonComponent } from '../../elements/simpo-button/simpo-button.component';
7
+ import { AnimationDirective } from '../../directive/animation-directive';
8
+ import { BackgroundDirective } from '../../directive/background-directive';
9
+ import { ContentFitDirective } from '../../directive/content-fit-directive';
10
+ import { BannerContentFitDirective } from '../../directive/banner-content-fit-directive';
11
+ import { BorderDirective } from '../../directive/border-directive';
12
+ import { ButtonDirectiveDirective } from '../../directive/button-directive.directive';
13
+ import { ColumnDirectiveDirective } from '../../directive/column-directive.directive';
14
+ import { ContainerFitDirective } from '../../directive/container-fir.directive';
15
+ import { simpoConetenAlignmentDirective } from '../../directive/content-alignment-directive';
16
+ import { CornerDirective } from '../../directive/corner-directive';
17
+ import { SimpoFooterLayoutDirective } from '../../directive/footer-layout-directive';
18
+ import { HoverDirective } from '../../directive/hover-element-directive';
19
+ import { ImageDirectiveDirective } from '../../directive/image-directive.directive';
20
+ import { OverlayDirective } from '../../directive/overlay-directive';
21
+ import { PositionLayoutDirectiveDirective } from '../../directive/position-layout-directive.directive';
22
+ import { TextBackgroundDirectiveDirective } from '../../directive/text-background-directive.directive';
23
+ import { ObjectPositionDirective } from './../../directive/image-position.directive';
24
+ import BaseSection from '../BaseSection';
25
+ import { SimpoContainerAligment } from '../../directive/container-alignment.directive';
26
+ import { ColorDirective } from './../../directive/color.directive';
27
+ import { TextSizeDirective } from '../../directive/text-size.directive';
28
+ import { SimpoBorderlessDirective } from '../../directive/borderlessImage.directive';
29
+ import { SimpoHoverBorderDirective } from "../../directive/hoverborder.directive";
30
+ import { SanitizeHtmlPipe } from '../../services/sanitizeHtml';
31
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
32
+ import { MatDialogModule } from '@angular/material/dialog';
33
+ import { MatFormFieldModule } from '@angular/material/form-field';
34
+ import { MatInputModule } from '@angular/material/input';
35
+ import { MatSelectModule } from '@angular/material/select';
36
+ import { MatDatepickerModule } from '@angular/material/datepicker';
37
+ import { MatNativeDateModule } from '@angular/material/core';
38
+ import { MatIconModule } from '@angular/material/icon';
39
+ import * as i0 from "@angular/core";
40
+ import * as i1 from "./../../services/events.service";
41
+ import * as i2 from "@angular/material/dialog";
42
+ import * as i3 from "../../services/rest.service";
43
+ import * as i4 from "@angular/material/snack-bar";
44
+ import * as i5 from "@angular/common";
45
+ import * as i6 from "../../elements/simpo-button/simpo-button.component";
46
+ import * as i7 from "../../components/hover-elements/hover-elements.component";
47
+ import * as i8 from "../../components/delete-hover-element/delete-hover-element.component";
48
+ import * as i9 from "@angular/forms";
49
+ import * as i10 from "@angular/material/form-field";
50
+ import * as i11 from "@angular/material/select";
51
+ import * as i12 from "@angular/material/core";
52
+ import * as i13 from "@angular/material/datepicker";
53
+ import * as i14 from "@angular/material/input";
54
+ import * as i15 from "@angular/material/icon";
55
+ export class AppointmentFormComponent extends BaseSection {
56
+ constructor(_eventService, matDialog, restService, snackBar) {
57
+ super();
58
+ this._eventService = _eventService;
59
+ this.matDialog = matDialog;
60
+ this.restService = restService;
61
+ this.snackBar = snackBar;
62
+ this.isMoved = false;
63
+ this.CreateData = {
64
+ appointmentId: "",
65
+ business: {
66
+ id: "",
67
+ name: ""
68
+ },
69
+ clientName: "",
70
+ mobile: "",
71
+ scheduledDate: "",
72
+ services: [
73
+ {
74
+ id: "",
75
+ name: ""
76
+ }
77
+ ],
78
+ time: "",
79
+ message: ""
80
+ };
81
+ this.minDate = new Date();
82
+ this.selectedLocation = "";
83
+ this.selectedServices = [];
84
+ this.dateFilter = (date) => {
85
+ const day = date?.getDay();
86
+ // Disable Sundays
87
+ return day !== 0;
88
+ };
89
+ this.createLoader = false;
90
+ }
91
+ ngOnInit() {
92
+ console.log(this.data);
93
+ this.deleteSelected = this.delete;
94
+ this.content = this.data?.content;
95
+ this.styles = this.data?.styles;
96
+ if (!this.styles || !this.content)
97
+ return;
98
+ this.businessId = localStorage.getItem("bId") ?? localStorage.getItem("businessId"),
99
+ this.businessName = localStorage.getItem("bName") ?? localStorage.getItem("businessName");
100
+ this.getAllServices();
101
+ this.getAllLocations();
102
+ // this.styles.layout.bannerImageDisplay = this.content.image.showImage;
103
+ }
104
+ get stylesLayout() {
105
+ return { ...this.styles?.layout };
106
+ }
107
+ get getJustifyContent() {
108
+ return "justify-content: center !important;";
109
+ }
110
+ get canMergeNavbar() {
111
+ return this.styles?.merge;
112
+ }
113
+ get isBorderlessImage() {
114
+ return this.styles?.borderLessImage && (this.styles?.positionLayout.value == "left" || this.styles?.positionLayout.value == "right");
115
+ }
116
+ get getPositionLayout() {
117
+ return { ...this.styles?.positionLayout };
118
+ }
119
+ editSection() {
120
+ this._eventService.toggleEditorEvent.emit(false);
121
+ setTimeout(() => {
122
+ this._eventService.editSection.emit({ data: this.data });
123
+ }, 100);
124
+ }
125
+ stopPropagation(event) {
126
+ event.stopPropagation();
127
+ }
128
+ opendailogbox(template) {
129
+ this.matDialog.open(template);
130
+ }
131
+ closeDialog() {
132
+ this.matDialog.closeAll();
133
+ }
134
+ onFocus() {
135
+ this.isMoved = true;
136
+ }
137
+ restrictNonNumeric(event) {
138
+ const charCode = event.charCode;
139
+ if (charCode != 0) {
140
+ // Allow only numbers
141
+ if (charCode < 48 || charCode > 57) {
142
+ event.preventDefault();
143
+ }
144
+ }
145
+ }
146
+ onUserNameChange(value) {
147
+ const regex = /^[a-zA-Z\s]*$/;
148
+ if (!regex.test(value)) {
149
+ this.CreateData.clientName = value.replace(/[^a-zA-Z\s]/g, '');
150
+ }
151
+ else {
152
+ this.CreateData.clientName = this.toTitleCase(value);
153
+ }
154
+ }
155
+ toTitleCase(str) {
156
+ return str.replace(/\w\S*/g, function (txt) {
157
+ return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
158
+ });
159
+ }
160
+ getAllServices() {
161
+ this.restService.getAllServices(this.businessId, 1000, 0).subscribe((res) => {
162
+ if (res.data.data.length > 0) {
163
+ this.serviceData = res.data.data;
164
+ console.log(this.serviceData);
165
+ }
166
+ else {
167
+ this.snackBar.open(`Service is not created yet with this business`, 'Close', {
168
+ duration: 1500
169
+ });
170
+ }
171
+ }, (error) => {
172
+ console.error("Error fetching services:", error); // Handle errors gracefully
173
+ });
174
+ }
175
+ getAllLocations() {
176
+ this.restService.getAllLocation(this.businessId, 1000, 0).subscribe((res) => {
177
+ if (res.data.data.length > 0) {
178
+ this.locationData = res.data.data;
179
+ }
180
+ else {
181
+ this.snackBar.open(`Location is not created yet with this business`, 'Close', {
182
+ duration: 1500
183
+ });
184
+ }
185
+ }, (error) => {
186
+ console.error("Error fetching services:", error); // Handle errors gracefully
187
+ });
188
+ }
189
+ formatDate(date) {
190
+ const year = date.getFullYear();
191
+ const month = String(date.getMonth() + 1).padStart(2, '0'); // Months are zero-based
192
+ const day = String(date.getDate()).padStart(2, '0');
193
+ return `${year}-${month}-${day}`;
194
+ }
195
+ getTimeSlots() {
196
+ this.formattedDate = this.formatDate(new Date(this.CreateData.scheduledDate));
197
+ this.restService.getAllTimeSlots(this.selectedLocation, this.formattedDate).subscribe((res) => {
198
+ if (res) {
199
+ this.timeSlotsData = res;
200
+ this.formattedTimeIntervals = this.timeSlotsData.map((interval) => ({
201
+ startTime: interval.startTime.slice(0, 5), // Get HH:MM
202
+ }));
203
+ this.filterTimeSlots();
204
+ }
205
+ else {
206
+ this.snackBar.open(`Time is not created yet with this business`, 'Close', {
207
+ duration: 1500
208
+ });
209
+ }
210
+ }, (error) => {
211
+ console.error("Error fetching services:", error); // Handle errors gracefully
212
+ });
213
+ }
214
+ filterTimeSlots() {
215
+ const now = new Date();
216
+ const selectedDate = new Date(this.CreateData.scheduledDate);
217
+ // Check if the selected date is today
218
+ if (selectedDate.toDateString() === now.toDateString()) {
219
+ const currentTime = now.getHours() * 60 + now.getMinutes(); // Convert current time to total minutes
220
+ // Filter out the time slots that are before the current time
221
+ this.formattedTimeIntervals = this.formattedTimeIntervals.filter((timeSlot) => {
222
+ const [time, period] = timeSlot.startTime.split(' '); // Split time and period
223
+ const [hours, minutes] = time.split(':').map(Number);
224
+ const adjustedHours = (period === 'PM' && hours !== 12) ? hours + 12 : (period === 'AM' && hours === 12) ? 0 : hours; // Adjust for 24-hour format
225
+ const slotTime = adjustedHours * 60 + minutes; // Convert slot time to total minutes
226
+ return slotTime > currentTime; // Only show slots after the current time
227
+ });
228
+ }
229
+ }
230
+ isFormValid() {
231
+ return this.CreateData.clientName !== '' &&
232
+ this.CreateData.mobile !== '' &&
233
+ this.selectedServices.length > 0 &&
234
+ this.selectedLocation !== '' &&
235
+ this.CreateData.scheduledDate !== '' &&
236
+ this.CreateData.message !== '';
237
+ }
238
+ prepareCreateData() {
239
+ this.CreateData.services = [];
240
+ this.serviceData.forEach((service) => {
241
+ if (this.selectedServices.includes(service.id)) {
242
+ this.CreateData.services.push({
243
+ id: service.id,
244
+ name: service.name
245
+ });
246
+ }
247
+ });
248
+ }
249
+ prepareLocationData() {
250
+ this.CreateData.locations = [];
251
+ this.locationData.forEach((location) => {
252
+ if (this.selectedLocation == location.id) {
253
+ this.CreateData.locations.push({
254
+ id: location.id,
255
+ name: location.name
256
+ });
257
+ }
258
+ });
259
+ }
260
+ bookAppointment() {
261
+ this.prepareCreateData();
262
+ this.prepareLocationData();
263
+ this.CreateData.business.id = this.businessId;
264
+ this.CreateData.business.name = this.businessName;
265
+ if (this.CreateData.scheduledDate) {
266
+ const originalDate = new Date(this.CreateData.scheduledDate);
267
+ originalDate.setDate(originalDate.getDate() + 1); // Add one day
268
+ this.CreateData.scheduledDate = originalDate.toISOString().split('T')[0];
269
+ }
270
+ this.createLoader = true;
271
+ this.restService.createAppointment(this.CreateData).subscribe((res) => {
272
+ if (res) {
273
+ this.createLoader = false;
274
+ this.snackBar.open(`Appointment is Created`, 'Close', {
275
+ duration: 1500
276
+ });
277
+ this.matDialog.closeAll();
278
+ }
279
+ }, (error) => {
280
+ this.createLoader = false;
281
+ this.snackBar.open(`Internal Server Error`, 'Close', {
282
+ duration: 1500
283
+ });
284
+ console.error("Error fetching Creation:", error); // Handle errors gracefully
285
+ });
286
+ }
287
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: AppointmentFormComponent, deps: [{ token: i1.EventsService }, { token: i2.MatDialog }, { token: i3.RestService }, { token: i4.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component }); }
288
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: AppointmentFormComponent, isStandalone: true, selector: "simpo-appointment-form", inputs: { data: "data", index: "index", edit: "edit", delete: "delete", customClass: "customClass" }, usesInheritance: true, ngImport: i0, template: "<div [id]=\"data?.id\"\r\n [ngClass]=\"{'mergeNavbar': canMergeNavbar && index == 1, 'justify-content-between d-flex': isBorderlessImage}\"\r\n [simpoBackground]=\"styles?.background\" class=\"total-container\" style=\"overflow-x: hidden;\" simpoHover\r\n (hovering)=\"showEditTabs($event)\" [attr.style]=\"customClass\">\r\n <ng-container *ngTemplateOutlet=\"ImageSection\"></ng-container>\r\n <div class=\"px-4 py-5\" [ngClass]=\"{'col-lg-6 col-xxl-6': isBorderlessImage, 'w-100 col-xxl-8': !isBorderlessImage}\"\r\n [id]=\"data?.id\" #mainContainer [simpoOverlay]=\"styles?.background\" [simpoBorder]=\"styles?.border\">\r\n <div class=\"row g-5 justify-content-start\" [id]=\"data?.id\" [simpoAnimation]=\"styles?.animation\"\r\n [simpoLayout]=\"styles?.layout\" [simpoPositionLayoutDirective]=\"styles?.positionLayout\"\r\n [ngClass]=\"{ 'align-items-stretch': styles?.positionLayout?.value === 'left' || styles?.positionLayout?.value === 'right', 'flex-lg-row': true }\">\r\n <div class=\"col-10 col-sm-8 col-lg-6\" *ngIf=\"content?.image?.showImage && !isBorderlessImage\"\r\n [simpoContainerAlignment]=\"stylesLayout\">\r\n <img loading=\"lazy\" [src]=\"content?.image?.url\" [simpoImageDirective]=\"styles?.image\" [id]=\"data?.id\"\r\n [simpoObjectPosition]=\"content?.image?.position\" [simpoCorner]=\"styles?.corners\"\r\n [class]=\"data?.id+(content?.image?.id || '')\" class=\"d-block w-100 insideImg\" style=\"object-fit: cover;\"\r\n [alt]=\"content?.image?.altText\" width=\"700\" height=\"500\" loading=\"lazy\" />\r\n </div>\r\n <div class=\"d-flex flex-column justify-content-start gap-15\"\r\n [ngClass]=\"{'col-lg-12': isBorderlessImage, 'col-lg-6': !isBorderlessImage}\"\r\n [simpoContainerAlignment]=\"stylesLayout\" [id]=\"data?.id\" [simpoContentAlignment]=\"styles?.contentAlignment\">\r\n <div *ngFor=\"let item of content?.inputText\">\r\n <div [innerHTML]=\"item.value | sanitizeHtml\" class=\"text-element\"\r\n [ngClass]=\"item.label === 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\"></div>\r\n </div>\r\n <div *ngFor=\"let item of content?.listItem?.data\" class=\"carder\">\r\n <div class=\"card_wrapper\">\r\n <div class=\"container_card visible\">\r\n <div class=\"card-section\">\r\n <div class=\"second-part-card\">\r\n\r\n </div>\r\n <div class=\"first-part-card\"\r\n [ngClass]=\"item.inputText[0].label=== 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\">\r\n <img loading=\"lazy\" class=\"tick-img\"\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/933997c1718790303127907598c1696063061900green_verified_image.png\"\r\n alt=\"something\" />\r\n\r\n {{ item.inputText[0].value }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"data?.action && data?.action?.display\" class=\"button-display\"\r\n [simpoContainerAlignment]=\"stylesLayout\">\r\n <div *ngFor=\"let button of data?.action?.buttons\">\r\n <app-button-element [buttonContent]=\"button.content\" [buttonStyle]=\"button.styles\" [buttonId]=\"button.id\"\r\n (click)=\"opendailogbox(dialogBox)\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\"></app-button-element>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div style=\" width: 100%; height: 500px;\">\r\n <img loading=\"lazy\" src=\"../../assets/divider.svg\" style=\"clip-path: polygon(0 55%, 100% 0, 100% 100%, 0% 100%); background-color: red;\">\r\n </div> -->\r\n <div [ngClass]=\"{'hover_effect': edit && false }\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"\r\n [isMerged]=\"styles?.merge ?? false\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</div>\r\n<ng-template #ImageSection>\r\n <div class=\"col-10 col-sm-8 col-lg-6\"\r\n [ngStyle]=\"{'width': styles?.positionLayout?.value === 'right' ? 'fit-content' : ''}\"\r\n style=\"padding: 0px !important;\" *ngIf=\"content?.image?.showImage && isBorderlessImage;\"\r\n [simpoBorderless]=\"getPositionLayout\">\r\n <img loading=\"lazy\" [src]=\"content?.image?.url\" class=\"d-block img-fluid h-100 w-100\"\r\n [alt]=\"content?.image?.altText\" width=\"700\" height=\"500\" loading=\"lazy\" />\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- Dialog template -->\r\n<ng-template #dialogBox class=\"dialogbox\">\r\n <div class=\"appointment-form\">\r\n <div class=\"header-section\">\r\n <div class=\"header-left-side\">\r\n <h2 style=\"text-align: left;\">Book an Appointment</h2>\r\n </div>\r\n <div class=\"header-right-side\">\r\n <mat-icon (click)=\"closeDialog()\">close</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <form>\r\n <div class=\"name-mobile\">\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Name</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <input class=\"inputStyle\" matInput placeholder=\"Enter Your Name\" pattern=\"[a-zA-Z ]*\"\r\n [(ngModel)]=\"CreateData.clientName\" (ngModelChange)=\"onUserNameChange($event)\" [ngModelOptions]=\"{standalone: true}\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Mobile Number</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <input type=\"text\" class=\"inputStyle\" matInput placeholder=\"Enter Your Mobile Number\"\r\n pattern=\"^[0-9]{10,15}$\" maxlength=\"15\" (focus)=\"onFocus()\" (keypress)=\"restrictNonNumeric($event)\"\r\n [(ngModel)]=\"CreateData.mobile\" [ngModelOptions]=\"{standalone: true}\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"name-mobile\">\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Service</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"Select Service\" multiple [(ngModel)]=\"selectedServices\" [ngModelOptions]=\"{standalone: true}\">\r\n <ng-container *ngFor=\"let service of serviceData\">\r\n <mat-option [value]=\"service.id\">\r\n {{ service.name }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Location</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"Select Location\" [(ngModel)]=\"selectedLocation\" [ngModelOptions]=\"{standalone: true}\">\r\n <ng-container *ngFor=\"let location of locationData\">\r\n <mat-option [value]=\"location.id\">\r\n {{ location.name }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"name-mobile\">\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Date</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <input class=\"inputStyle\" matInput [matDatepicker]=\"picker\" placeholder=\"Select Date\"\r\n [(ngModel)]=\"CreateData.scheduledDate\" (ngModelChange)=\"getTimeSlots()\" [min]=\"minDate\"\r\n [matDatepickerFilter]=\"dateFilter\" [ngModelOptions]=\"{standalone: true}\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Time</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"Select Location\" [(ngModel)]=\"CreateData.time\" [ngModelOptions]=\"{standalone: true}\">\r\n <ng-container *ngFor=\"let time of formattedTimeIntervals\">\r\n <mat-option [value]=\"time.startTime\">\r\n {{ time.startTime }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"full-message-section\">\r\n <div class=\"business-field-section\">\r\n <div class=\"input-text\">Message</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <input class=\"inputStyle\" matInput placeholder=\"Enter Your Name\" pattern=\"[a-zA-Z ]*\"\r\n [(ngModel)]=\"CreateData.message\" [ngModelOptions]=\"{standalone: true}\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"bottom-section\">\r\n <div class=\"button-section\">\r\n <button class=\"booking-button\" [disabled]=\"!isFormValid()\" (click)=\"bookAppointment()\">\r\n Book Appointment\r\n </button>\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n </div>\r\n</ng-template>", styles: [".btn-primary{border:none}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.total-container{position:relative;height:auto}.button-display{display:flex;gap:10px}.gap-15{gap:15px}.appointment-form{width:60vw;margin:auto;background-color:#fff;border-radius:8px;padding:20px;box-shadow:0 4px 8px #0000001a}h2{text-align:center;margin-bottom:20px}.form-group{display:flex;flex-direction:column;margin-bottom:15px;width:100%}label{font-weight:700;margin-bottom:5px}input,select,textarea{padding:8px;border:1px solid #ccc;border-radius:4px;font-size:14px}input::placeholder,textarea::placeholder{color:#888}.name-mobile,.date-time{display:flex;justify-content:space-between}textarea{resize:vertical}.book-btn{width:100%;background-color:#007bff;color:#fff;border:none;padding:10px;border-radius:4px;font-size:16px;cursor:pointer}.book-btn:hover{background-color:#0056b3}@media only screen and (max-width: 475px){.col-10{width:100%;max-width:100%;flex-basis:100%;height:32vh;padding-right:13px;padding-left:13px}.total-container{flex-direction:column}.insideImg{height:100%!important}}.text-element{inline-size:100%;overflow-wrap:break-word}.mergeNavbar{margin-top:-175px;padding-top:175px}.container_card .card-section{align-items:center;gap:20px;padding-top:5px;padding-bottom:5px;width:100%;border-radius:10px;opacity:0;transform:translateY(150px);transition:2s all ease}.card_wrapper{display:flex;flex-direction:column;gap:20px}.visible{visibility:visible!important}.visible .card-section{opacity:1;transform:translateY(0)}.first-part-card{min-width:fit-content}.first-part-card .body-large{font-size:1.1rem;font-weight:700}.second-part-card{width:2px;height:2px;border-radius:50%;display:flex;justify-content:center;align-items:center}.third-part-card .heading-large{font-size:1.1rem;font-weight:700}.third-part-card .body-large{font-size:12px;font-weight:400;line-height:15px}.tick-img{width:25px;height:25px;border-radius:50%}.third-part-card{display:flex;flex-direction:column;gap:10px}.sfull-width{width:49%;height:75px}.input-text{margin-bottom:5px}.full-width{width:100%}.bottom-section{width:100%;display:flex;justify-content:right}.button-section{width:30%}.booking-button{background:#0496ff;color:#fff;border:1px solid#0496FF;border-radius:10px;padding:7px 5px}.header-section{display:flex;width:100%;justify-content:space-between}.header-left-side{width:50%}.header-right-side{width:5%;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: SimpoElementsModule }, { kind: "component", type: i6.SimpoButtonComponent, selector: "app-button-element", inputs: ["buttonContent", "buttonStyle", "buttonId", "color", "sectionId"] }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i7.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i8.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "ngmodule", type: MatGridListModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i9.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i13.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i13.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i13.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i14.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i15.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type:
289
+ //directive
290
+ SimpoBorderlessDirective, selector: "[simpoBorderless]", inputs: ["simpoBorderless"] }, { kind: "directive", type: SimpoContainerAligment, selector: "[simpoContainerAlignment]", inputs: ["simpoContainerAlignment"] }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: simpoConetenAlignmentDirective, selector: "[simpoContentAlignment]", inputs: ["simpoContentAlignment"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: ImageDirectiveDirective, selector: "[simpoImageDirective]", inputs: ["simpoImageDirective"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: PositionLayoutDirectiveDirective, selector: "[simpoPositionLayoutDirective]", inputs: ["simpoPositionLayoutDirective"] }, { kind: "directive", type: ObjectPositionDirective, selector: "[simpoObjectPosition]", inputs: ["simpoObjectPosition"] }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }] }); }
291
+ }
292
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: AppointmentFormComponent, decorators: [{
293
+ type: Component,
294
+ args: [{ selector: 'simpo-appointment-form', standalone: true, imports: [
295
+ CommonModule,
296
+ SimpoElementsModule,
297
+ SimpoComponentModule,
298
+ MatGridListModule,
299
+ SimpoButtonComponent,
300
+ SimpoHoverBorderDirective,
301
+ FormsModule,
302
+ ReactiveFormsModule,
303
+ MatSelectModule,
304
+ MatDialogModule,
305
+ MatDatepickerModule,
306
+ MatNativeDateModule,
307
+ MatFormFieldModule,
308
+ MatInputModule,
309
+ MatIconModule,
310
+ //directive
311
+ SimpoBorderlessDirective,
312
+ SimpoContainerAligment,
313
+ AnimationDirective,
314
+ BackgroundDirective,
315
+ BannerContentFitDirective,
316
+ BorderDirective,
317
+ ButtonDirectiveDirective,
318
+ ColumnDirectiveDirective,
319
+ ContainerFitDirective,
320
+ simpoConetenAlignmentDirective,
321
+ ContentFitDirective,
322
+ CornerDirective,
323
+ SimpoFooterLayoutDirective,
324
+ HoverDirective,
325
+ ImageDirectiveDirective,
326
+ OverlayDirective,
327
+ PositionLayoutDirectiveDirective,
328
+ TextBackgroundDirectiveDirective,
329
+ ObjectPositionDirective,
330
+ ColorDirective,
331
+ TextSizeDirective,
332
+ SanitizeHtmlPipe
333
+ ], template: "<div [id]=\"data?.id\"\r\n [ngClass]=\"{'mergeNavbar': canMergeNavbar && index == 1, 'justify-content-between d-flex': isBorderlessImage}\"\r\n [simpoBackground]=\"styles?.background\" class=\"total-container\" style=\"overflow-x: hidden;\" simpoHover\r\n (hovering)=\"showEditTabs($event)\" [attr.style]=\"customClass\">\r\n <ng-container *ngTemplateOutlet=\"ImageSection\"></ng-container>\r\n <div class=\"px-4 py-5\" [ngClass]=\"{'col-lg-6 col-xxl-6': isBorderlessImage, 'w-100 col-xxl-8': !isBorderlessImage}\"\r\n [id]=\"data?.id\" #mainContainer [simpoOverlay]=\"styles?.background\" [simpoBorder]=\"styles?.border\">\r\n <div class=\"row g-5 justify-content-start\" [id]=\"data?.id\" [simpoAnimation]=\"styles?.animation\"\r\n [simpoLayout]=\"styles?.layout\" [simpoPositionLayoutDirective]=\"styles?.positionLayout\"\r\n [ngClass]=\"{ 'align-items-stretch': styles?.positionLayout?.value === 'left' || styles?.positionLayout?.value === 'right', 'flex-lg-row': true }\">\r\n <div class=\"col-10 col-sm-8 col-lg-6\" *ngIf=\"content?.image?.showImage && !isBorderlessImage\"\r\n [simpoContainerAlignment]=\"stylesLayout\">\r\n <img loading=\"lazy\" [src]=\"content?.image?.url\" [simpoImageDirective]=\"styles?.image\" [id]=\"data?.id\"\r\n [simpoObjectPosition]=\"content?.image?.position\" [simpoCorner]=\"styles?.corners\"\r\n [class]=\"data?.id+(content?.image?.id || '')\" class=\"d-block w-100 insideImg\" style=\"object-fit: cover;\"\r\n [alt]=\"content?.image?.altText\" width=\"700\" height=\"500\" loading=\"lazy\" />\r\n </div>\r\n <div class=\"d-flex flex-column justify-content-start gap-15\"\r\n [ngClass]=\"{'col-lg-12': isBorderlessImage, 'col-lg-6': !isBorderlessImage}\"\r\n [simpoContainerAlignment]=\"stylesLayout\" [id]=\"data?.id\" [simpoContentAlignment]=\"styles?.contentAlignment\">\r\n <div *ngFor=\"let item of content?.inputText\">\r\n <div [innerHTML]=\"item.value | sanitizeHtml\" class=\"text-element\"\r\n [ngClass]=\"item.label === 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\"></div>\r\n </div>\r\n <div *ngFor=\"let item of content?.listItem?.data\" class=\"carder\">\r\n <div class=\"card_wrapper\">\r\n <div class=\"container_card visible\">\r\n <div class=\"card-section\">\r\n <div class=\"second-part-card\">\r\n\r\n </div>\r\n <div class=\"first-part-card\"\r\n [ngClass]=\"item.inputText[0].label=== 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\">\r\n <img loading=\"lazy\" class=\"tick-img\"\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/933997c1718790303127907598c1696063061900green_verified_image.png\"\r\n alt=\"something\" />\r\n\r\n {{ item.inputText[0].value }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"data?.action && data?.action?.display\" class=\"button-display\"\r\n [simpoContainerAlignment]=\"stylesLayout\">\r\n <div *ngFor=\"let button of data?.action?.buttons\">\r\n <app-button-element [buttonContent]=\"button.content\" [buttonStyle]=\"button.styles\" [buttonId]=\"button.id\"\r\n (click)=\"opendailogbox(dialogBox)\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\"></app-button-element>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div style=\" width: 100%; height: 500px;\">\r\n <img loading=\"lazy\" src=\"../../assets/divider.svg\" style=\"clip-path: polygon(0 55%, 100% 0, 100% 100%, 0% 100%); background-color: red;\">\r\n </div> -->\r\n <div [ngClass]=\"{'hover_effect': edit && false }\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"\r\n [isMerged]=\"styles?.merge ?? false\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</div>\r\n<ng-template #ImageSection>\r\n <div class=\"col-10 col-sm-8 col-lg-6\"\r\n [ngStyle]=\"{'width': styles?.positionLayout?.value === 'right' ? 'fit-content' : ''}\"\r\n style=\"padding: 0px !important;\" *ngIf=\"content?.image?.showImage && isBorderlessImage;\"\r\n [simpoBorderless]=\"getPositionLayout\">\r\n <img loading=\"lazy\" [src]=\"content?.image?.url\" class=\"d-block img-fluid h-100 w-100\"\r\n [alt]=\"content?.image?.altText\" width=\"700\" height=\"500\" loading=\"lazy\" />\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- Dialog template -->\r\n<ng-template #dialogBox class=\"dialogbox\">\r\n <div class=\"appointment-form\">\r\n <div class=\"header-section\">\r\n <div class=\"header-left-side\">\r\n <h2 style=\"text-align: left;\">Book an Appointment</h2>\r\n </div>\r\n <div class=\"header-right-side\">\r\n <mat-icon (click)=\"closeDialog()\">close</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <form>\r\n <div class=\"name-mobile\">\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Name</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <input class=\"inputStyle\" matInput placeholder=\"Enter Your Name\" pattern=\"[a-zA-Z ]*\"\r\n [(ngModel)]=\"CreateData.clientName\" (ngModelChange)=\"onUserNameChange($event)\" [ngModelOptions]=\"{standalone: true}\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Mobile Number</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <input type=\"text\" class=\"inputStyle\" matInput placeholder=\"Enter Your Mobile Number\"\r\n pattern=\"^[0-9]{10,15}$\" maxlength=\"15\" (focus)=\"onFocus()\" (keypress)=\"restrictNonNumeric($event)\"\r\n [(ngModel)]=\"CreateData.mobile\" [ngModelOptions]=\"{standalone: true}\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"name-mobile\">\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Service</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"Select Service\" multiple [(ngModel)]=\"selectedServices\" [ngModelOptions]=\"{standalone: true}\">\r\n <ng-container *ngFor=\"let service of serviceData\">\r\n <mat-option [value]=\"service.id\">\r\n {{ service.name }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Location</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"Select Location\" [(ngModel)]=\"selectedLocation\" [ngModelOptions]=\"{standalone: true}\">\r\n <ng-container *ngFor=\"let location of locationData\">\r\n <mat-option [value]=\"location.id\">\r\n {{ location.name }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"name-mobile\">\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Date</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <input class=\"inputStyle\" matInput [matDatepicker]=\"picker\" placeholder=\"Select Date\"\r\n [(ngModel)]=\"CreateData.scheduledDate\" (ngModelChange)=\"getTimeSlots()\" [min]=\"minDate\"\r\n [matDatepickerFilter]=\"dateFilter\" [ngModelOptions]=\"{standalone: true}\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Time</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"Select Location\" [(ngModel)]=\"CreateData.time\" [ngModelOptions]=\"{standalone: true}\">\r\n <ng-container *ngFor=\"let time of formattedTimeIntervals\">\r\n <mat-option [value]=\"time.startTime\">\r\n {{ time.startTime }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"full-message-section\">\r\n <div class=\"business-field-section\">\r\n <div class=\"input-text\">Message</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <input class=\"inputStyle\" matInput placeholder=\"Enter Your Name\" pattern=\"[a-zA-Z ]*\"\r\n [(ngModel)]=\"CreateData.message\" [ngModelOptions]=\"{standalone: true}\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"bottom-section\">\r\n <div class=\"button-section\">\r\n <button class=\"booking-button\" [disabled]=\"!isFormValid()\" (click)=\"bookAppointment()\">\r\n Book Appointment\r\n </button>\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n </div>\r\n</ng-template>", styles: [".btn-primary{border:none}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.total-container{position:relative;height:auto}.button-display{display:flex;gap:10px}.gap-15{gap:15px}.appointment-form{width:60vw;margin:auto;background-color:#fff;border-radius:8px;padding:20px;box-shadow:0 4px 8px #0000001a}h2{text-align:center;margin-bottom:20px}.form-group{display:flex;flex-direction:column;margin-bottom:15px;width:100%}label{font-weight:700;margin-bottom:5px}input,select,textarea{padding:8px;border:1px solid #ccc;border-radius:4px;font-size:14px}input::placeholder,textarea::placeholder{color:#888}.name-mobile,.date-time{display:flex;justify-content:space-between}textarea{resize:vertical}.book-btn{width:100%;background-color:#007bff;color:#fff;border:none;padding:10px;border-radius:4px;font-size:16px;cursor:pointer}.book-btn:hover{background-color:#0056b3}@media only screen and (max-width: 475px){.col-10{width:100%;max-width:100%;flex-basis:100%;height:32vh;padding-right:13px;padding-left:13px}.total-container{flex-direction:column}.insideImg{height:100%!important}}.text-element{inline-size:100%;overflow-wrap:break-word}.mergeNavbar{margin-top:-175px;padding-top:175px}.container_card .card-section{align-items:center;gap:20px;padding-top:5px;padding-bottom:5px;width:100%;border-radius:10px;opacity:0;transform:translateY(150px);transition:2s all ease}.card_wrapper{display:flex;flex-direction:column;gap:20px}.visible{visibility:visible!important}.visible .card-section{opacity:1;transform:translateY(0)}.first-part-card{min-width:fit-content}.first-part-card .body-large{font-size:1.1rem;font-weight:700}.second-part-card{width:2px;height:2px;border-radius:50%;display:flex;justify-content:center;align-items:center}.third-part-card .heading-large{font-size:1.1rem;font-weight:700}.third-part-card .body-large{font-size:12px;font-weight:400;line-height:15px}.tick-img{width:25px;height:25px;border-radius:50%}.third-part-card{display:flex;flex-direction:column;gap:10px}.sfull-width{width:49%;height:75px}.input-text{margin-bottom:5px}.full-width{width:100%}.bottom-section{width:100%;display:flex;justify-content:right}.button-section{width:30%}.booking-button{background:#0496ff;color:#fff;border:1px solid#0496FF;border-radius:10px;padding:7px 5px}.header-section{display:flex;width:100%;justify-content:space-between}.header-left-side{width:50%}.header-right-side{width:5%;cursor:pointer}\n"] }]
334
+ }], ctorParameters: () => [{ type: i1.EventsService }, { type: i2.MatDialog }, { type: i3.RestService }, { type: i4.MatSnackBar }], propDecorators: { data: [{
335
+ type: Input
336
+ }], index: [{
337
+ type: Input
338
+ }], edit: [{
339
+ type: Input
340
+ }], delete: [{
341
+ type: Input
342
+ }], customClass: [{
343
+ type: Input
344
+ }] } });
345
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2FwcG9pbnRtZW50LWZvcm0vYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2FwcG9pbnRtZW50LWZvcm0vYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBaUQsTUFBTSxlQUFlLENBQUM7QUFFNUcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM3RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDckYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRXZHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3JGLE9BQU8sV0FBVyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNyRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUcvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQXNEdkQsTUFBTSxPQUFPLHdCQUF5QixTQUFRLFdBQVc7SUFXdkQsWUFDVSxhQUE0QixFQUM1QixTQUFvQixFQUNwQixXQUF3QixFQUN4QixRQUFxQjtRQUc3QixLQUFLLEVBQUUsQ0FBQztRQU5BLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQWdFL0IsWUFBTyxHQUFZLEtBQUssQ0FBQztRQWdDekIsZUFBVSxHQUFRO1lBQ2hCLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLFFBQVEsRUFBRTtnQkFDUixFQUFFLEVBQUUsRUFBRTtnQkFDTixJQUFJLEVBQUUsRUFBRTthQUNUO1lBQ0QsVUFBVSxFQUFFLEVBQUU7WUFDZCxNQUFNLEVBQUUsRUFBRTtZQUNWLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLFFBQVEsRUFBRTtnQkFDUjtvQkFDRSxFQUFFLEVBQUUsRUFBRTtvQkFDTixJQUFJLEVBQUUsRUFBRTtpQkFDVDthQUNGO1lBQ0QsSUFBSSxFQUFFLEVBQUU7WUFDUixPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUE7UUFHRCxZQUFPLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQTRCM0IscUJBQWdCLEdBQVcsRUFBRSxDQUFDO1FBdUI5QixxQkFBZ0IsR0FBYSxFQUFFLENBQUM7UUE2RGhDLGVBQVUsR0FBRyxDQUFDLElBQWlCLEVBQVcsRUFBRTtZQUMxQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDM0Isa0JBQWtCO1lBQ2xCLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUM7UUFvQ0YsaUJBQVksR0FBWSxLQUFLLENBQUM7SUF4UTlCLENBQUM7SUFJRCxRQUFRO1FBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFBO1FBQ2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUMxQyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFDakYsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUE7UUFHM0YsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2Qix3RUFBd0U7SUFDMUUsQ0FBQztJQUNELElBQUksWUFBWTtRQUNkLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFpQixDQUFDO0lBQ25ELENBQUM7SUFDRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLHFDQUFxQyxDQUFDO0lBQy9DLENBQUM7SUFDRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLEtBQUssSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZJLENBQUM7SUFDRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBeUIsQ0FBQztJQUNuRSxDQUFDO0lBRUQsV0FBVztRQUVULElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0QsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUNELGVBQWUsQ0FBQyxLQUFVO1FBRXhCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQXFDO1FBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FFM0IsQ0FBQztJQUNKLENBQUM7SUFHRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBTUQsT0FBTztRQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFvQjtRQUNyQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2xCLHFCQUFxQjtZQUNyQixJQUFJLFFBQVEsR0FBRyxFQUFFLElBQUksUUFBUSxHQUFHLEVBQUUsRUFBRSxDQUFDO2dCQUNuQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBR0QsZ0JBQWdCLENBQUMsS0FBYTtRQUM1QixNQUFNLEtBQUssR0FBRyxlQUFlLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsR0FBVztRQUNyQixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFVBQVUsR0FBRztZQUN4QyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUEyQkQsY0FBYztRQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDakUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNYLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUMvQixDQUFDO2lCQUNJLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLCtDQUErQyxFQUMvQyxPQUFPLEVBQ1A7b0JBQ0UsUUFBUSxFQUFFLElBQUk7aUJBQ2YsQ0FDRixDQUFBO1lBQ0gsQ0FBQztRQUNILENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtRQUMvRSxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFJRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUNqRSxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ1gsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDcEMsQ0FBQztpQkFDSSxDQUFDO2dCQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixnREFBZ0QsRUFDaEQsT0FBTyxFQUNQO29CQUNFLFFBQVEsRUFBRSxJQUFJO2lCQUNmLENBQ0YsQ0FBQTtZQUNILENBQUM7UUFDSCxDQUFDLEVBQ0QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQywyQkFBMkI7UUFDL0UsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBSUQsVUFBVSxDQUFDLElBQVU7UUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtRQUNwRixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVwRCxPQUFPLEdBQUcsSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBTUQsWUFBWTtRQUNWLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQ25GLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDWCxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNSLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDO2dCQUN6QixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ3ZFLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWTtpQkFDeEQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0osSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLENBQUM7aUJBQ0ksQ0FBQztnQkFDSixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEIsNENBQTRDLEVBQzVDLE9BQU8sRUFDUDtvQkFDRSxRQUFRLEVBQUUsSUFBSTtpQkFDZixDQUNGLENBQUE7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDUixPQUFPLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsMkJBQTJCO1FBQy9FLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUdELGVBQWU7UUFDYixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFN0Qsc0NBQXNDO1FBQ3RDLElBQUksWUFBWSxDQUFDLFlBQVksRUFBRSxLQUFLLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBQ3ZELE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsd0NBQXdDO1lBRXBHLDZEQUE2RDtZQUM3RCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUNqRixNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsd0JBQXdCO2dCQUM5RSxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLDRCQUE0QjtnQkFDbEosTUFBTSxRQUFRLEdBQUcsYUFBYSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxxQ0FBcUM7Z0JBQ3BGLE9BQU8sUUFBUSxHQUFHLFdBQVcsQ0FBQyxDQUFDLHlDQUF5QztZQUMxRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBU0QsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEtBQUssRUFBRTtZQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxFQUFFO1lBQzdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssRUFBRTtZQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsS0FBSyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDeEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7b0JBQzVCLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRTtvQkFDZCxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7aUJBQ25CLENBQUMsQ0FBQTtZQUNKLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDMUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7b0JBQzdCLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRTtvQkFDZixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7aUJBQ3BCLENBQUMsQ0FBQTtZQUNKLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFHRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDOUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFFbEQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDN0QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjO1lBQ2hFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0UsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ3pFLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQix3QkFBd0IsRUFDeEIsT0FBTyxFQUNQO29CQUNFLFFBQVEsRUFBRSxJQUFJO2lCQUNmLENBQ0YsQ0FBQTtnQkFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVCLENBQUM7UUFFSCxDQUFDLEVBQ0MsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNSLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQix1QkFBdUIsRUFDdkIsT0FBTyxFQUNQO2dCQUNFLFFBQVEsRUFBRSxJQUFJO2FBQ2YsQ0FDRixDQUFBO1lBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtRQUMvRSxDQUFDLENBQ0YsQ0FBQztJQUVKLENBQUM7OEdBcFVVLHdCQUF3QjtrR0FBeEIsd0JBQXdCLCtNQy9GckMsK3FUQXlMYyxxN0VEdElWLFlBQVkseWxCQUNaLG1CQUFtQixnTUFDbkIsb0JBQW9CLG1XQUNwQixpQkFBaUIsOEJBR2pCLFdBQVcsbTJDQUNYLG1CQUFtQiw4QkFDbkIsZUFBZSxtZ0NBQ2YsZUFBZSw4QkFDZixtQkFBbUIsb2dCQUNuQixtQkFBbUIsOEJBQ25CLGtCQUFrQiw4QkFDbEIsY0FBYywyV0FDZCxhQUFhO2dCQUdiLFdBQVc7Z0JBQ1gsd0JBQXdCLDJGQUN4QixzQkFBc0IsMkdBQ3RCLGtCQUFrQix5RkFDbEIsbUJBQW1CLDBHQUVuQixlQUFlLG1GQUlmLDhCQUE4Qix1R0FDOUIsbUJBQW1CLG1GQUNuQixlQUFlLG1GQUVmLGNBQWMsZ0ZBQ2QsdUJBQXVCLG1HQUN2QixnQkFBZ0IscUZBQ2hCLGdDQUFnQyxxSEFFaEMsdUJBQXVCLDhGQUd2QixnQkFBZ0I7OzJGQUtQLHdCQUF3QjtrQkFoRHBDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBQ3RCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsb0JBQW9CO3dCQUNwQixpQkFBaUI7d0JBQ2pCLG9CQUFvQjt3QkFDcEIseUJBQXlCO3dCQUN6QixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsYUFBYTt3QkFHYixXQUFXO3dCQUNYLHdCQUF3Qjt3QkFDeEIsc0JBQXNCO3dCQUN0QixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIseUJBQXlCO3dCQUN6QixlQUFlO3dCQUNmLHdCQUF3Qjt3QkFDeEIsd0JBQXdCO3dCQUN4QixxQkFBcUI7d0JBQ3JCLDhCQUE4Qjt3QkFDOUIsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLDBCQUEwQjt3QkFDMUIsY0FBYzt3QkFDZCx1QkFBdUI7d0JBQ3ZCLGdCQUFnQjt3QkFDaEIsZ0NBQWdDO3dCQUNoQyxnQ0FBZ0M7d0JBQ2hDLHVCQUF1Qjt3QkFDdkIsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLGdCQUFnQjtxQkFDakI7OEpBTVEsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmFubmVyU3R5bGVzTW9kZWwsIExheU91dE1vZGVsLCBQb3NpdGlvbkxheW91dE1vZGFsIH0gZnJvbSAnLi4vLi4vc3R5bGVzL3N0eWxlLm1vZGVsJztcclxuaW1wb3J0IHsgU2ltcG9FbGVtZW50c01vZHVsZSB9IGZyb20gJy4vLi4vLi4vZWxlbWVudHMvaW5kZXgnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBTaW1wb0NvbXBvbmVudE1vZHVsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvaW5kZXgnO1xyXG5pbXBvcnQgeyBNYXRHcmlkTGlzdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2dyaWQtbGlzdCc7XHJcbmltcG9ydCB7IFNpbXBvQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvc2ltcG8tYnV0dG9uL3NpbXBvLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBbmltYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYW5pbWF0aW9uLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEJhY2tncm91bmREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYmFja2dyb3VuZC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb250ZW50Rml0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtZml0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEJhbm5lckNvbnRlbnRGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYmFubmVyLWNvbnRlbnQtZml0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEJvcmRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ib3JkZXItZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2J1dHRvbi1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29sdW1uRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbHVtbi1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29udGFpbmVyRml0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRhaW5lci1maXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgc2ltcG9Db25ldGVuQWxpZ25tZW50RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtYWxpZ25tZW50LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvcm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb3JuZXItZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2ltcG9Gb290ZXJMYXlvdXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvZm9vdGVyLWxheW91dC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEltYWdlRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2ltYWdlLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL292ZXJsYXktZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgUG9zaXRpb25MYXlvdXREaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvcG9zaXRpb24tbGF5b3V0LWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUZXh0QmFja2dyb3VuZERpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS90ZXh0LWJhY2tncm91bmQtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL2V2ZW50cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT2JqZWN0UG9zaXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLy4uLy4uL2RpcmVjdGl2ZS9pbWFnZS1wb3NpdGlvbi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vQmFzZVNlY3Rpb24nO1xyXG5pbXBvcnQgeyBTaW1wb0NvbnRhaW5lckFsaWdtZW50IH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRhaW5lci1hbGlnbm1lbnQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29sb3JEaXJlY3RpdmUgfSBmcm9tICcuLy4uLy4uL2RpcmVjdGl2ZS9jb2xvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUZXh0U2l6ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS90ZXh0LXNpemUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2ltcG9Cb3JkZXJsZXNzRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JvcmRlcmxlc3NJbWFnZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTaW1wb0hvdmVyQm9yZGVyRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZS9ob3ZlcmJvcmRlci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgU2FuaXRpemVIdG1sUGlwZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nhbml0aXplSHRtbCc7XHJcbmltcG9ydCB7IEJhbm5lckNvbnRlbnRNb2RlbCwgQmFubmVyU2VjdGlvbk1vZGVsIH0gZnJvbSAnLi9hcHBvaW50bWVudC1mb3JtLm1vZGVsJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dDb250ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBNYXROYXRpdmVEYXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcblxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tYXBwb2ludG1lbnQtZm9ybScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBTaW1wb0VsZW1lbnRzTW9kdWxlLFxyXG4gICAgU2ltcG9Db21wb25lbnRNb2R1bGUsXHJcbiAgICBNYXRHcmlkTGlzdE1vZHVsZSxcclxuICAgIFNpbXBvQnV0dG9uQ29tcG9uZW50LFxyXG4gICAgU2ltcG9Ib3ZlckJvcmRlckRpcmVjdGl2ZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE1hdFNlbGVjdE1vZHVsZSxcclxuICAgIE1hdERpYWxvZ01vZHVsZSxcclxuICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXHJcbiAgICBNYXROYXRpdmVEYXRlTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG5cclxuXHJcbiAgICAvL2RpcmVjdGl2ZVxyXG4gICAgU2ltcG9Cb3JkZXJsZXNzRGlyZWN0aXZlLFxyXG4gICAgU2ltcG9Db250YWluZXJBbGlnbWVudCxcclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIEJhY2tncm91bmREaXJlY3RpdmUsXHJcbiAgICBCYW5uZXJDb250ZW50Rml0RGlyZWN0aXZlLFxyXG4gICAgQm9yZGVyRGlyZWN0aXZlLFxyXG4gICAgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgQ29sdW1uRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgQ29udGFpbmVyRml0RGlyZWN0aXZlLFxyXG4gICAgc2ltcG9Db25ldGVuQWxpZ25tZW50RGlyZWN0aXZlLFxyXG4gICAgQ29udGVudEZpdERpcmVjdGl2ZSxcclxuICAgIENvcm5lckRpcmVjdGl2ZSxcclxuICAgIFNpbXBvRm9vdGVyTGF5b3V0RGlyZWN0aXZlLFxyXG4gICAgSG92ZXJEaXJlY3RpdmUsXHJcbiAgICBJbWFnZURpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIE92ZXJsYXlEaXJlY3RpdmUsXHJcbiAgICBQb3NpdGlvbkxheW91dERpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIFRleHRCYWNrZ3JvdW5kRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgT2JqZWN0UG9zaXRpb25EaXJlY3RpdmUsXHJcbiAgICBDb2xvckRpcmVjdGl2ZSxcclxuICAgIFRleHRTaXplRGlyZWN0aXZlLFxyXG4gICAgU2FuaXRpemVIdG1sUGlwZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcG9pbnRtZW50LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9hcHBvaW50bWVudC1mb3JtLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHBvaW50bWVudEZvcm1Db21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGE/OiBCYW5uZXJTZWN0aW9uTW9kZWw7XHJcbiAgQElucHV0KCkgaW5kZXg/OiBudW1iZXI7XHJcbiAgY29udGVudD86IEJhbm5lckNvbnRlbnRNb2RlbDtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xyXG4gIHN0eWxlcz86IEJhbm5lclN0eWxlc01vZGVsO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhclxyXG5cclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBidXNpbmVzc0lkOiBhbnk7XHJcbiAgYnVzaW5lc3NOYW1lOiBhbnk7XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmRhdGEpO1xyXG4gICAgdGhpcy5kZWxldGVTZWxlY3RlZCA9IHRoaXMuZGVsZXRlXHJcbiAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmRhdGE/LmNvbnRlbnQ7XHJcbiAgICB0aGlzLnN0eWxlcyA9IHRoaXMuZGF0YT8uc3R5bGVzO1xyXG4gICAgaWYgKCF0aGlzLnN0eWxlcyB8fCAhdGhpcy5jb250ZW50KSByZXR1cm47XHJcbiAgICB0aGlzLmJ1c2luZXNzSWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImJJZFwiKSA/PyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImJ1c2luZXNzSWRcIiksXHJcbiAgICAgIHRoaXMuYnVzaW5lc3NOYW1lID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJiTmFtZVwiKSA/PyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImJ1c2luZXNzTmFtZVwiKVxyXG5cclxuXHJcbiAgICB0aGlzLmdldEFsbFNlcnZpY2VzKCk7XHJcbiAgICB0aGlzLmdldEFsbExvY2F0aW9ucygpO1xyXG4gICAgLy8gdGhpcy5zdHlsZXMubGF5b3V0LmJhbm5lckltYWdlRGlzcGxheSA9IHRoaXMuY29udGVudC5pbWFnZS5zaG93SW1hZ2U7XHJcbiAgfVxyXG4gIGdldCBzdHlsZXNMYXlvdXQoKSB7XHJcbiAgICByZXR1cm4geyAuLi50aGlzLnN0eWxlcz8ubGF5b3V0IH0gYXMgTGF5T3V0TW9kZWw7XHJcbiAgfVxyXG4gIGdldCBnZXRKdXN0aWZ5Q29udGVudCgpIHtcclxuICAgIHJldHVybiBcImp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XCI7XHJcbiAgfVxyXG4gIGdldCBjYW5NZXJnZU5hdmJhcigpIHtcclxuICAgIHJldHVybiB0aGlzLnN0eWxlcz8ubWVyZ2U7XHJcbiAgfVxyXG4gIGdldCBpc0JvcmRlcmxlc3NJbWFnZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0eWxlcz8uYm9yZGVyTGVzc0ltYWdlICYmICh0aGlzLnN0eWxlcz8ucG9zaXRpb25MYXlvdXQudmFsdWUgPT0gXCJsZWZ0XCIgfHwgdGhpcy5zdHlsZXM/LnBvc2l0aW9uTGF5b3V0LnZhbHVlID09IFwicmlnaHRcIik7XHJcbiAgfVxyXG4gIGdldCBnZXRQb3NpdGlvbkxheW91dCgpIHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuc3R5bGVzPy5wb3NpdGlvbkxheW91dCB9IGFzIFBvc2l0aW9uTGF5b3V0TW9kYWw7XHJcbiAgfVxyXG5cclxuICBlZGl0U2VjdGlvbigpIHtcclxuXHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UudG9nZ2xlRWRpdG9yRXZlbnQuZW1pdChmYWxzZSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmVkaXRTZWN0aW9uLmVtaXQoeyBkYXRhOiB0aGlzLmRhdGEgfSk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuICBzdG9wUHJvcGFnYXRpb24oZXZlbnQ6IGFueSkge1xyXG5cclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgb3BlbmRhaWxvZ2JveCh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KTogdm9pZCB7XHJcbiAgICB0aGlzLm1hdERpYWxvZy5vcGVuKHRlbXBsYXRlLFxyXG4gICAgICAvLyAge3dpZHRoOic1MDBweCd9IFxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICBjbG9zZURpYWxvZygpIHtcclxuICAgIHRoaXMubWF0RGlhbG9nLmNsb3NlQWxsKCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuICBpc01vdmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgb25Gb2N1cygpIHtcclxuICAgIHRoaXMuaXNNb3ZlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXN0cmljdE5vbk51bWVyaWMoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGNvbnN0IGNoYXJDb2RlID0gZXZlbnQuY2hhckNvZGU7XHJcbiAgICBpZiAoY2hhckNvZGUgIT0gMCkge1xyXG4gICAgICAvLyBBbGxvdyBvbmx5IG51bWJlcnNcclxuICAgICAgaWYgKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1Nykge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBvblVzZXJOYW1lQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL15bYS16QS1aXFxzXSokLztcclxuICAgIGlmICghcmVnZXgudGVzdCh2YWx1ZSkpIHtcclxuICAgICAgdGhpcy5DcmVhdGVEYXRhLmNsaWVudE5hbWUgPSB2YWx1ZS5yZXBsYWNlKC9bXmEtekEtWlxcc10vZywgJycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5DcmVhdGVEYXRhLmNsaWVudE5hbWUgPSB0aGlzLnRvVGl0bGVDYXNlKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvVGl0bGVDYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXFx3XFxTKi9nLCBmdW5jdGlvbiAodHh0KSB7XHJcbiAgICAgIHJldHVybiB0eHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eHQuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBDcmVhdGVEYXRhOiBhbnkgPSB7XHJcbiAgICBhcHBvaW50bWVudElkOiBcIlwiLFxyXG4gICAgYnVzaW5lc3M6IHtcclxuICAgICAgaWQ6IFwiXCIsXHJcbiAgICAgIG5hbWU6IFwiXCJcclxuICAgIH0sXHJcbiAgICBjbGllbnROYW1lOiBcIlwiLFxyXG4gICAgbW9iaWxlOiBcIlwiLFxyXG4gICAgc2NoZWR1bGVkRGF0ZTogXCJcIixcclxuICAgIHNlcnZpY2VzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogXCJcIixcclxuICAgICAgICBuYW1lOiBcIlwiXHJcbiAgICAgIH1cclxuICAgIF0sXHJcbiAgICB0aW1lOiBcIlwiLFxyXG4gICAgbWVzc2FnZTogXCJcIlxyXG4gIH1cclxuXHJcblxyXG4gIG1pbkRhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuXHJcbiAgc2VydmljZURhdGE6IGFueTtcclxuICBnZXRBbGxTZXJ2aWNlcygpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0QWxsU2VydmljZXModGhpcy5idXNpbmVzc0lkLCAxMDAwLCAwKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMuZGF0YS5kYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuc2VydmljZURhdGEgPSByZXMuZGF0YS5kYXRhO1xyXG4gICAgICAgICAgY29uc29sZS5sb2codGhpcy5zZXJ2aWNlRGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXHJcbiAgICAgICAgICAgIGBTZXJ2aWNlIGlzIG5vdCBjcmVhdGVkIHlldCB3aXRoIHRoaXMgYnVzaW5lc3NgLFxyXG4gICAgICAgICAgICAnQ2xvc2UnLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHNlcnZpY2VzOlwiLCBlcnJvcik7IC8vIEhhbmRsZSBlcnJvcnMgZ3JhY2VmdWxseVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbG9jYXRpb25EYXRhOiBhbnk7XHJcbiAgc2VsZWN0ZWRMb2NhdGlvbjogc3RyaW5nID0gXCJcIjtcclxuICBnZXRBbGxMb2NhdGlvbnMoKSB7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldEFsbExvY2F0aW9uKHRoaXMuYnVzaW5lc3NJZCwgMTAwMCwgMCkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzLmRhdGEuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2F0aW9uRGF0YSA9IHJlcy5kYXRhLmRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFxyXG4gICAgICAgICAgICBgTG9jYXRpb24gaXMgbm90IGNyZWF0ZWQgeWV0IHdpdGggdGhpcyBidXNpbmVzc2AsXHJcbiAgICAgICAgICAgICdDbG9zZScsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgc2VydmljZXM6XCIsIGVycm9yKTsgLy8gSGFuZGxlIGVycm9ycyBncmFjZWZ1bGx5XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZFNlcnZpY2VzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBmb3JtYXREYXRlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIGNvbnN0IG1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7IC8vIE1vbnRocyBhcmUgemVyby1iYXNlZFxyXG4gICAgY29uc3QgZGF5ID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xyXG5cclxuICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gO1xyXG4gIH1cclxuXHJcblxyXG4gIGZvcm1hdHRlZERhdGU6IGFueTtcclxuICB0aW1lU2xvdHNEYXRhOiBhbnk7XHJcbiAgZm9ybWF0dGVkVGltZUludGVydmFsczogYW55O1xyXG4gIGdldFRpbWVTbG90cygpIHtcclxuICAgIHRoaXMuZm9ybWF0dGVkRGF0ZSA9IHRoaXMuZm9ybWF0RGF0ZShuZXcgRGF0ZSh0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSkpO1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5nZXRBbGxUaW1lU2xvdHModGhpcy5zZWxlY3RlZExvY2F0aW9uLCB0aGlzLmZvcm1hdHRlZERhdGUpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgdGhpcy50aW1lU2xvdHNEYXRhID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5mb3JtYXR0ZWRUaW1lSW50ZXJ2YWxzID0gdGhpcy50aW1lU2xvdHNEYXRhLm1hcCgoaW50ZXJ2YWw6IGFueSkgPT4gKHtcclxuICAgICAgICAgICAgc3RhcnRUaW1lOiBpbnRlcnZhbC5zdGFydFRpbWUuc2xpY2UoMCwgNSksIC8vIEdldCBISDpNTVxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJUaW1lU2xvdHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXHJcbiAgICAgICAgICAgIGBUaW1lIGlzIG5vdCBjcmVhdGVkIHlldCB3aXRoIHRoaXMgYnVzaW5lc3NgLFxyXG4gICAgICAgICAgICAnQ2xvc2UnLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHNlcnZpY2VzOlwiLCBlcnJvcik7IC8vIEhhbmRsZSBlcnJvcnMgZ3JhY2VmdWxseVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIGZpbHRlclRpbWVTbG90cygpIHtcclxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICBjb25zdCBzZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSk7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHNlbGVjdGVkIGRhdGUgaXMgdG9kYXlcclxuICAgIGlmIChzZWxlY3RlZERhdGUudG9EYXRlU3RyaW5nKCkgPT09IG5vdy50b0RhdGVTdHJpbmcoKSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50VGltZSA9IG5vdy5nZXRIb3VycygpICogNjAgKyBub3cuZ2V0TWludXRlcygpOyAvLyBDb252ZXJ0IGN1cnJlbnQgdGltZSB0byB0b3RhbCBtaW51dGVzXHJcblxyXG4gICAgICAvLyBGaWx0ZXIgb3V0IHRoZSB0aW1lIHNsb3RzIHRoYXQgYXJlIGJlZm9yZSB0aGUgY3VycmVudCB0aW1lXHJcbiAgICAgIHRoaXMuZm9ybWF0dGVkVGltZUludGVydmFscyA9IHRoaXMuZm9ybWF0dGVkVGltZUludGVydmFscy5maWx0ZXIoKHRpbWVTbG90OiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBbdGltZSwgcGVyaW9kXSA9IHRpbWVTbG90LnN0YXJ0VGltZS5zcGxpdCgnICcpOyAvLyBTcGxpdCB0aW1lIGFuZCBwZXJpb2RcclxuICAgICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpO1xyXG4gICAgICAgIGNvbnN0IGFkanVzdGVkSG91cnMgPSAocGVyaW9kID09PSAnUE0nICYmIGhvdXJzICE9PSAxMikgPyBob3VycyArIDEyIDogKHBlcmlvZCA9PT0gJ0FNJyAmJiBob3VycyA9PT0gMTIpID8gMCA6IGhvdXJzOyAvLyBBZGp1c3QgZm9yIDI0LWhvdXIgZm9ybWF0XHJcbiAgICAgICAgY29uc3Qgc2xvdFRpbWUgPSBhZGp1c3RlZEhvdXJzICogNjAgKyBtaW51dGVzOyAvLyBDb252ZXJ0IHNsb3QgdGltZSB0byB0b3RhbCBtaW51dGVzXHJcbiAgICAgICAgcmV0dXJuIHNsb3RUaW1lID4gY3VycmVudFRpbWU7IC8vIE9ubHkgc2hvdyBzbG90cyBhZnRlciB0aGUgY3VycmVudCB0aW1lXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGF0ZUZpbHRlciA9IChkYXRlOiBEYXRlIHwgbnVsbCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgY29uc3QgZGF5ID0gZGF0ZT8uZ2V0RGF5KCk7XHJcbiAgICAvLyBEaXNhYmxlIFN1bmRheXNcclxuICAgIHJldHVybiBkYXkgIT09IDA7XHJcbiAgfTtcclxuXHJcblxyXG4gIGlzRm9ybVZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQ3JlYXRlRGF0YS5jbGllbnROYW1lICE9PSAnJyAmJlxyXG4gICAgICB0aGlzLkNyZWF0ZURhdGEubW9iaWxlICE9PSAnJyAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkU2VydmljZXMubGVuZ3RoID4gMCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb24gIT09ICcnICYmXHJcbiAgICAgIHRoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWREYXRlICE9PSAnJyAmJlxyXG4gICAgICB0aGlzLkNyZWF0ZURhdGEubWVzc2FnZSAhPT0gJyc7XHJcbiAgfVxyXG5cclxuICBwcmVwYXJlQ3JlYXRlRGF0YSgpIHtcclxuICAgIHRoaXMuQ3JlYXRlRGF0YS5zZXJ2aWNlcyA9IFtdO1xyXG4gICAgdGhpcy5zZXJ2aWNlRGF0YS5mb3JFYWNoKChzZXJ2aWNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZXJ2aWNlcy5pbmNsdWRlcyhzZXJ2aWNlLmlkKSkge1xyXG4gICAgICAgIHRoaXMuQ3JlYXRlRGF0YS5zZXJ2aWNlcy5wdXNoKHtcclxuICAgICAgICAgIGlkOiBzZXJ2aWNlLmlkLFxyXG4gICAgICAgICAgbmFtZTogc2VydmljZS5uYW1lXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcmVwYXJlTG9jYXRpb25EYXRhKCkge1xyXG4gICAgdGhpcy5DcmVhdGVEYXRhLmxvY2F0aW9ucyA9IFtdO1xyXG4gICAgdGhpcy5sb2NhdGlvbkRhdGEuZm9yRWFjaCgobG9jYXRpb246IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZExvY2F0aW9uID09IGxvY2F0aW9uLmlkKSB7XHJcbiAgICAgICAgdGhpcy5DcmVhdGVEYXRhLmxvY2F0aW9ucy5wdXNoKHtcclxuICAgICAgICAgIGlkOiBsb2NhdGlvbi5pZCxcclxuICAgICAgICAgIG5hbWU6IGxvY2F0aW9uLm5hbWVcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlTG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYm9va0FwcG9pbnRtZW50KCkge1xyXG4gICAgdGhpcy5wcmVwYXJlQ3JlYXRlRGF0YSgpO1xyXG4gICAgdGhpcy5wcmVwYXJlTG9jYXRpb25EYXRhKCk7XHJcbiAgICB0aGlzLkNyZWF0ZURhdGEuYnVzaW5lc3MuaWQgPSB0aGlzLmJ1c2luZXNzSWQ7XHJcbiAgICB0aGlzLkNyZWF0ZURhdGEuYnVzaW5lc3MubmFtZSA9IHRoaXMuYnVzaW5lc3NOYW1lO1xyXG5cclxuICAgIGlmICh0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSkge1xyXG4gICAgICBjb25zdCBvcmlnaW5hbERhdGUgPSBuZXcgRGF0ZSh0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSk7XHJcbiAgICAgIG9yaWdpbmFsRGF0ZS5zZXREYXRlKG9yaWdpbmFsRGF0ZS5nZXREYXRlKCkgKyAxKTsgLy8gQWRkIG9uZSBkYXlcclxuICAgICAgdGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZERhdGUgPSBvcmlnaW5hbERhdGUudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xyXG5cclxuICAgIH1cclxuICAgIHRoaXMuY3JlYXRlTG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuY3JlYXRlQXBwb2ludG1lbnQodGhpcy5DcmVhdGVEYXRhKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICB0aGlzLmNyZWF0ZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcclxuICAgICAgICAgIGBBcHBvaW50bWVudCBpcyBDcmVhdGVkYCxcclxuICAgICAgICAgICdDbG9zZScsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICAgIHRoaXMubWF0RGlhbG9nLmNsb3NlQWxsKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLmNyZWF0ZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcclxuICAgICAgICAgIGBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JgLFxyXG4gICAgICAgICAgJ0Nsb3NlJyxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIENyZWF0aW9uOlwiLCBlcnJvcik7IC8vIEhhbmRsZSBlcnJvcnMgZ3JhY2VmdWxseVxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgW2lkXT1cImRhdGE/LmlkXCJcclxuICBbbmdDbGFzc109XCJ7J21lcmdlTmF2YmFyJzogY2FuTWVyZ2VOYXZiYXIgJiYgaW5kZXggPT0gMSwgJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuIGQtZmxleCc6IGlzQm9yZGVybGVzc0ltYWdlfVwiXHJcbiAgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZXM/LmJhY2tncm91bmRcIiBjbGFzcz1cInRvdGFsLWNvbnRhaW5lclwiIHN0eWxlPVwib3ZlcmZsb3cteDogaGlkZGVuO1wiIHNpbXBvSG92ZXJcclxuICAoaG92ZXJpbmcpPVwic2hvd0VkaXRUYWJzKCRldmVudClcIiBbYXR0ci5zdHlsZV09XCJjdXN0b21DbGFzc1wiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJJbWFnZVNlY3Rpb25cIj48L25nLWNvbnRhaW5lcj5cclxuICA8ZGl2IGNsYXNzPVwicHgtNCBweS01XCIgW25nQ2xhc3NdPVwieydjb2wtbGctNiBjb2wteHhsLTYnOiBpc0JvcmRlcmxlc3NJbWFnZSwgJ3ctMTAwIGNvbC14eGwtOCc6ICFpc0JvcmRlcmxlc3NJbWFnZX1cIlxyXG4gICAgW2lkXT1cImRhdGE/LmlkXCIgI21haW5Db250YWluZXIgW3NpbXBvT3ZlcmxheV09XCJzdHlsZXM/LmJhY2tncm91bmRcIiBbc2ltcG9Cb3JkZXJdPVwic3R5bGVzPy5ib3JkZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgZy01IGp1c3RpZnktY29udGVudC1zdGFydFwiIFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb0FuaW1hdGlvbl09XCJzdHlsZXM/LmFuaW1hdGlvblwiXHJcbiAgICAgIFtzaW1wb0xheW91dF09XCJzdHlsZXM/LmxheW91dFwiIFtzaW1wb1Bvc2l0aW9uTGF5b3V0RGlyZWN0aXZlXT1cInN0eWxlcz8ucG9zaXRpb25MYXlvdXRcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7ICdhbGlnbi1pdGVtcy1zdHJldGNoJzogc3R5bGVzPy5wb3NpdGlvbkxheW91dD8udmFsdWUgPT09ICdsZWZ0JyB8fCBzdHlsZXM/LnBvc2l0aW9uTGF5b3V0Py52YWx1ZSA9PT0gJ3JpZ2h0JywgJ2ZsZXgtbGctcm93JzogdHJ1ZSB9XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTAgY29sLXNtLTggY29sLWxnLTZcIiAqbmdJZj1cImNvbnRlbnQ/LmltYWdlPy5zaG93SW1hZ2UgJiYgIWlzQm9yZGVybGVzc0ltYWdlXCJcclxuICAgICAgICBbc2ltcG9Db250YWluZXJBbGlnbm1lbnRdPVwic3R5bGVzTGF5b3V0XCI+XHJcbiAgICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIFtzcmNdPVwiY29udGVudD8uaW1hZ2U/LnVybFwiIFtzaW1wb0ltYWdlRGlyZWN0aXZlXT1cInN0eWxlcz8uaW1hZ2VcIiBbaWRdPVwiZGF0YT8uaWRcIlxyXG4gICAgICAgICAgW3NpbXBvT2JqZWN0UG9zaXRpb25dPVwiY29udGVudD8uaW1hZ2U/LnBvc2l0aW9uXCIgW3NpbXBvQ29ybmVyXT1cInN0eWxlcz8uY29ybmVyc1wiXHJcbiAgICAgICAgICBbY2xhc3NdPVwiZGF0YT8uaWQrKGNvbnRlbnQ/LmltYWdlPy5pZCB8fCAnJylcIiBjbGFzcz1cImQtYmxvY2sgdy0xMDAgaW5zaWRlSW1nXCIgc3R5bGU9XCJvYmplY3QtZml0OiBjb3ZlcjtcIlxyXG4gICAgICAgICAgW2FsdF09XCJjb250ZW50Py5pbWFnZT8uYWx0VGV4dFwiIHdpZHRoPVwiNzAwXCIgaGVpZ2h0PVwiNTAwXCIgbG9hZGluZz1cImxhenlcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgZ2FwLTE1XCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7J2NvbC1sZy0xMic6IGlzQm9yZGVybGVzc0ltYWdlLCAnY29sLWxnLTYnOiAhaXNCb3JkZXJsZXNzSW1hZ2V9XCJcclxuICAgICAgICBbc2ltcG9Db250YWluZXJBbGlnbm1lbnRdPVwic3R5bGVzTGF5b3V0XCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQ29udGVudEFsaWdubWVudF09XCJzdHlsZXM/LmNvbnRlbnRBbGlnbm1lbnRcIj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbnRlbnQ/LmlucHV0VGV4dFwiPlxyXG4gICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cIml0ZW0udmFsdWUgfCBzYW5pdGl6ZUh0bWxcIiBjbGFzcz1cInRleHQtZWxlbWVudFwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0ubGFiZWwgPT09ICdIZWFkaW5nJyA/ICdoZWFkaW5nLWxhcmdlIGxoLTIgbWItMycgOiAnYm9keS1sYXJnZSdcIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbnRlbnQ/Lmxpc3RJdGVtPy5kYXRhXCIgY2xhc3M9XCJjYXJkZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkX3dyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lcl9jYXJkIHZpc2libGVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Vjb25kLXBhcnQtY2FyZFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpcnN0LXBhcnQtY2FyZFwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uaW5wdXRUZXh0WzBdLmxhYmVsPT09ICdIZWFkaW5nJyA/ICdoZWFkaW5nLWxhcmdlIGxoLTIgbWItMycgOiAnYm9keS1sYXJnZSdcIj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIGNsYXNzPVwidGljay1pbWdcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vcHJvZC1zaW1wby5zMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20vcHJvZC1pbWFnZXMvOTMzOTk3YzE3MTg3OTAzMDMxMjc5MDc1OThjMTY5NjA2MzA2MTkwMGdyZWVuX3ZlcmlmaWVkX2ltYWdlLnBuZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgYWx0PVwic29tZXRoaW5nXCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uaW5wdXRUZXh0WzBdLnZhbHVlIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YT8uYWN0aW9uICYmIGRhdGE/LmFjdGlvbj8uZGlzcGxheVwiIGNsYXNzPVwiYnV0dG9uLWRpc3BsYXlcIlxyXG4gICAgICAgICAgW3NpbXBvQ29udGFpbmVyQWxpZ25tZW50XT1cInN0eWxlc0xheW91dFwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGRhdGE/LmFjdGlvbj8uYnV0dG9uc1wiPlxyXG4gICAgICAgICAgICA8YXBwLWJ1dHRvbi1lbGVtZW50IFtidXR0b25Db250ZW50XT1cImJ1dHRvbi5jb250ZW50XCIgW2J1dHRvblN0eWxlXT1cImJ1dHRvbi5zdHlsZXNcIiBbYnV0dG9uSWRdPVwiYnV0dG9uLmlkXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbmRhaWxvZ2JveChkaWFsb2dCb3gpXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgICAgICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj48L2FwcC1idXR0b24tZWxlbWVudD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8IS0tIDxkaXYgc3R5bGU9XCIgd2lkdGg6IDEwMCU7IGhlaWdodDogNTAwcHg7XCI+XHJcbiAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgIHNyYz1cIi4uLy4uL2Fzc2V0cy9kaXZpZGVyLnN2Z1wiIHN0eWxlPVwiY2xpcC1wYXRoOiBwb2x5Z29uKDAgNTUlLCAxMDAlIDAsIDEwMCUgMTAwJSwgMCUgMTAwJSk7IGJhY2tncm91bmQtY29sb3I6IHJlZDtcIj5cclxuICA8L2Rpdj4gLS0+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGVkaXQgJiYgZmFsc2UgfVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cclxuICAgIDxzaW1wby1ob3Zlci1lbGVtZW50cyBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCIgW2VkaXRPcHRpb25zXT1cImVkaXRcIlxyXG4gICAgICBbaXNNZXJnZWRdPVwic3R5bGVzPy5tZXJnZSA/PyBmYWxzZVwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cInNob3dEZWxldGVcIiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGRlbGV0ZX1cIj5cclxuICAgIDxzaW1wby1kZWxldGUtaG92ZXItZWxlbWVudCBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCI+PC9zaW1wby1kZWxldGUtaG92ZXItZWxlbWVudD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxuZy10ZW1wbGF0ZSAjSW1hZ2VTZWN0aW9uPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtMTAgY29sLXNtLTggY29sLWxnLTZcIlxyXG4gICAgW25nU3R5bGVdPVwieyd3aWR0aCc6IHN0eWxlcz8ucG9zaXRpb25MYXlvdXQ/LnZhbHVlID09PSAncmlnaHQnID8gJ2ZpdC1jb250ZW50JyA6ICcnfVwiXHJcbiAgICBzdHlsZT1cInBhZGRpbmc6IDBweCAhaW1wb3J0YW50O1wiICpuZ0lmPVwiY29udGVudD8uaW1hZ2U/LnNob3dJbWFnZSAmJiBpc0JvcmRlcmxlc3NJbWFnZTtcIlxyXG4gICAgW3NpbXBvQm9yZGVybGVzc109XCJnZXRQb3NpdGlvbkxheW91dFwiPlxyXG4gICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIFtzcmNdPVwiY29udGVudD8uaW1hZ2U/LnVybFwiIGNsYXNzPVwiZC1ibG9jayBpbWctZmx1aWQgaC0xMDAgdy0xMDBcIlxyXG4gICAgICBbYWx0XT1cImNvbnRlbnQ/LmltYWdlPy5hbHRUZXh0XCIgd2lkdGg9XCI3MDBcIiBoZWlnaHQ9XCI1MDBcIiBsb2FkaW5nPVwibGF6eVwiIC8+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuPCEtLSBEaWFsb2cgdGVtcGxhdGUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nQm94IGNsYXNzPVwiZGlhbG9nYm94XCI+XHJcbiAgPGRpdiBjbGFzcz1cImFwcG9pbnRtZW50LWZvcm1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItc2VjdGlvblwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWxlZnQtc2lkZVwiPlxyXG4gICAgICAgIDxoMiBzdHlsZT1cInRleHQtYWxpZ246IGxlZnQ7XCI+Qm9vayBhbiBBcHBvaW50bWVudDwvaDI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJpZ2h0LXNpZGVcIj5cclxuICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGZvcm0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJuYW1lLW1vYmlsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRleHRcIj5OYW1lPC9kaXY+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRTdHlsZVwiIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiRW50ZXIgWW91ciBOYW1lXCIgcGF0dGVybj1cIlthLXpBLVogXSpcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiQ3JlYXRlRGF0YS5jbGllbnROYW1lXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Vc2VyTmFtZUNoYW5nZSgkZXZlbnQpXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNmdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGV4dFwiPk1vYmlsZSBOdW1iZXI8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImlucHV0U3R5bGVcIiBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIkVudGVyIFlvdXIgTW9iaWxlIE51bWJlclwiXHJcbiAgICAgICAgICAgICAgcGF0dGVybj1cIl5bMC05XXsxMCwxNX0kXCIgbWF4bGVuZ3RoPVwiMTVcIiAoZm9jdXMpPVwib25Gb2N1cygpXCIgKGtleXByZXNzKT1cInJlc3RyaWN0Tm9uTnVtZXJpYygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIkNyZWF0ZURhdGEubW9iaWxlXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibmFtZS1tb2JpbGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Z1bGwtd2lkdGhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+U2VydmljZTwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGNsYXNzPVwiaW5wdXRTdHlsZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFNlcnZpY2VcIiBtdWx0aXBsZSBbKG5nTW9kZWwpXT1cInNlbGVjdGVkU2VydmljZXNcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VydmljZSBvZiBzZXJ2aWNlRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInNlcnZpY2UuaWRcIj5cclxuICAgICAgICAgICAgICAgICAge3sgc2VydmljZS5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRleHRcIj5Mb2NhdGlvbjwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGNsYXNzPVwiaW5wdXRTdHlsZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IExvY2F0aW9uXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZExvY2F0aW9uXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxvY2F0aW9uIG9mIGxvY2F0aW9uRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImxvY2F0aW9uLmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGxvY2F0aW9uLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibmFtZS1tb2JpbGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Z1bGwtd2lkdGhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+RGF0ZTwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0U3R5bGVcIiBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBEYXRlXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZVwiIChuZ01vZGVsQ2hhbmdlKT1cImdldFRpbWVTbG90cygpXCIgW21pbl09XCJtaW5EYXRlXCJcclxuICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJkYXRlRmlsdGVyXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdEljb25TdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRleHRcIj5UaW1lPC9kaXY+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgY2xhc3M9XCJpbnB1dFN0eWxlXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgTG9jYXRpb25cIiBbKG5nTW9kZWwpXT1cIkNyZWF0ZURhdGEudGltZVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0aW1lIG9mIGZvcm1hdHRlZFRpbWVJbnRlcnZhbHNcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ0aW1lLnN0YXJ0VGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyB0aW1lLnN0YXJ0VGltZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZnVsbC1tZXNzYWdlLXNlY3Rpb25cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnVzaW5lc3MtZmllbGQtc2VjdGlvblwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRleHRcIj5NZXNzYWdlPC9kaXY+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRTdHlsZVwiIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiRW50ZXIgWW91ciBOYW1lXCIgcGF0dGVybj1cIlthLXpBLVogXSpcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiQ3JlYXRlRGF0YS5tZXNzYWdlXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYm90dG9tLXNlY3Rpb25cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLXNlY3Rpb25cIj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJib29raW5nLWJ1dHRvblwiIFtkaXNhYmxlZF09XCIhaXNGb3JtVmFsaWQoKVwiIChjbGljayk9XCJib29rQXBwb2ludG1lbnQoKVwiPlxyXG4gICAgICAgICAgICBCb29rIEFwcG9pbnRtZW50XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDwvZm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwb2ludG1lbnQtZm9ybS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvc2VjdGlvbnMvYXBwb2ludG1lbnQtZm9ybS9hcHBvaW50bWVudC1mb3JtLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb25Nb2RlbCwgQmFubmVyU3R5bGVzTW9kZWwsIEltYWdlLCBJbnB1dFRleHRNb2RlbCwgTGlzdEl0ZW1Nb2RhbCB9IGZyb20gJy4vLi4vLi4vc3R5bGVzL3N0eWxlLm1vZGVsJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmFubmVyU2VjdGlvbk1vZGVsIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBzZWN0aW9uVHlwZTogc3RyaW5nLFxyXG4gICAgc2VjdGlvbk5hbWU6IHN0cmluZyxcclxuICAgIGNvbnRlbnQ6IEJhbm5lckNvbnRlbnRNb2RlbDtcclxuICAgIHN0eWxlczogQmFubmVyU3R5bGVzTW9kZWw7XHJcbiAgICBhY3Rpb246IEFjdGlvbk1vZGVsO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlTW9kZWwgZXh0ZW5kcyBJbWFnZXtcclxuICAgIHNob3dJbWFnZTpib29sZWFuXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgdGV4dE1vZGVse1xyXG4gICAgdmFsdWUgOiBzdHJpbmdcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEJhbm5lckNvbnRlbnRNb2RlbCB7XHJcbiAgICBpbnB1dFRleHQ6IElucHV0VGV4dE1vZGVsW11cclxuICAgIGltYWdlOkltYWdlTW9kZWw7XHJcbiAgICBsaXN0SXRlbTogTGlzdEl0ZW1Nb2RhbDxCYW5uZXJMaXN0SXRlbT47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmFubmVyTGlzdEl0ZW0ge1xyXG4gIGlucHV0VGV4dDogSW5wdXRUZXh0TW9kZWxbXVxyXG59XHJcbiJdfQ==