simpo-component-library 1.6.109 → 1.6.112

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 "@simpo-ui/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2FwcG9pbnRtZW50LWZvcm0vYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2FwcG9pbnRtZW50LWZvcm0vYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBaUQsTUFBTSxlQUFlLENBQUM7QUFFNUcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0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Qjt3QkFDcEIseUJBQXlCO3dCQUN6QixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsYUFBYTt3QkFHYixXQUFXO3dCQUNYLHdCQUF3Qjt3QkFDeEIsc0JBQXNCO3dCQUN0QixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIseUJBQXlCO3dCQUN6QixlQUFlO3dCQUNmLHdCQUF3Qjt3QkFDeEIsd0JBQXdCO3dCQUN4QixxQkFBcUI7d0JBQ3JCLDhCQUE4Qjt3QkFDOUIsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLDBCQUEwQjt3QkFDMUIsY0FBYzt3QkFDZCx1QkFBdUI7d0JBQ3ZCLGdCQUFnQjt3QkFDaEIsZ0NBQWdDO3dCQUNoQyxnQ0FBZ0M7d0JBQ2hDLHVCQUF1Qjt3QkFDdkIsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLGdCQUFnQjtxQkFDakI7OEpBTVEsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmFubmVyU3R5bGVzTW9kZWwsIExheU91dE1vZGVsLCBQb3NpdGlvbkxheW91dE1vZGFsIH0gZnJvbSAnLi4vLi4vc3R5bGVzL3N0eWxlLm1vZGVsJztcclxuaW1wb3J0IHsgU2ltcG9FbGVtZW50c01vZHVsZSB9IGZyb20gJy4vLi4vLi4vZWxlbWVudHMvaW5kZXgnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBTaW1wb0NvbXBvbmVudE1vZHVsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvaW5kZXgnO1xyXG5pbXBvcnQgeyBNYXRHcmlkTGlzdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2dyaWQtbGlzdCc7XHJcbmltcG9ydCB7IFNpbXBvQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvc2ltcG8tYnV0dG9uL3NpbXBvLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBbmltYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYW5pbWF0aW9uLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEJhY2tncm91bmREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYmFja2dyb3VuZC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb250ZW50Rml0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtZml0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEJhbm5lckNvbnRlbnRGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYmFubmVyLWNvbnRlbnQtZml0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEJvcmRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ib3JkZXItZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2J1dHRvbi1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29sdW1uRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbHVtbi1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29udGFpbmVyRml0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRhaW5lci1maXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgc2ltcG9Db25ldGVuQWxpZ25tZW50RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtYWxpZ25tZW50LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvcm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb3JuZXItZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2ltcG9Gb290ZXJMYXlvdXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvZm9vdGVyLWxheW91dC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEltYWdlRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2ltYWdlLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL292ZXJsYXktZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgUG9zaXRpb25MYXlvdXREaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvcG9zaXRpb24tbGF5b3V0LWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUZXh0QmFja2dyb3VuZERpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS90ZXh0LWJhY2tncm91bmQtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL2V2ZW50cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT2JqZWN0UG9zaXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLy4uLy4uL2RpcmVjdGl2ZS9pbWFnZS1wb3NpdGlvbi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vQmFzZVNlY3Rpb24nO1xyXG5pbXBvcnQgeyBTaW1wb0NvbnRhaW5lckFsaWdtZW50IH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRhaW5lci1hbGlnbm1lbnQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29sb3JEaXJlY3RpdmUgfSBmcm9tICcuLy4uLy4uL2RpcmVjdGl2ZS9jb2xvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUZXh0U2l6ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS90ZXh0LXNpemUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2ltcG9Cb3JkZXJsZXNzRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JvcmRlcmxlc3NJbWFnZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTaW1wb0hvdmVyQm9yZGVyRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZS9ob3ZlcmJvcmRlci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgU2FuaXRpemVIdG1sUGlwZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nhbml0aXplSHRtbCc7XHJcbmltcG9ydCB7IEJhbm5lckNvbnRlbnRNb2RlbCwgQmFubmVyU2VjdGlvbk1vZGVsIH0gZnJvbSAnLi9hcHBvaW50bWVudC1mb3JtLm1vZGVsJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dDb250ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBNYXROYXRpdmVEYXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICdAc2ltcG8tdWkvc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLWFwcG9pbnRtZW50LWZvcm0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgU2ltcG9FbGVtZW50c01vZHVsZSxcclxuICAgIFNpbXBvQ29tcG9uZW50TW9kdWxlLFxyXG4gICAgTWF0R3JpZExpc3RNb2R1bGUsXHJcbiAgICBTaW1wb0J1dHRvbkNvbXBvbmVudCxcclxuICAgIFNpbXBvSG92ZXJCb3JkZXJEaXJlY3RpdmUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBNYXREaWFsb2dNb2R1bGUsXHJcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxyXG4gICAgTWF0TmF0aXZlRGF0ZU1vZHVsZSxcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuXHJcblxyXG4gICAgLy9kaXJlY3RpdmVcclxuICAgIFNpbXBvQm9yZGVybGVzc0RpcmVjdGl2ZSxcclxuICAgIFNpbXBvQ29udGFpbmVyQWxpZ21lbnQsXHJcbiAgICBBbmltYXRpb25EaXJlY3RpdmUsXHJcbiAgICBCYWNrZ3JvdW5kRGlyZWN0aXZlLFxyXG4gICAgQmFubmVyQ29udGVudEZpdERpcmVjdGl2ZSxcclxuICAgIEJvcmRlckRpcmVjdGl2ZSxcclxuICAgIEJ1dHRvbkRpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIENvbHVtbkRpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIENvbnRhaW5lckZpdERpcmVjdGl2ZSxcclxuICAgIHNpbXBvQ29uZXRlbkFsaWdubWVudERpcmVjdGl2ZSxcclxuICAgIENvbnRlbnRGaXREaXJlY3RpdmUsXHJcbiAgICBDb3JuZXJEaXJlY3RpdmUsXHJcbiAgICBTaW1wb0Zvb3RlckxheW91dERpcmVjdGl2ZSxcclxuICAgIEhvdmVyRGlyZWN0aXZlLFxyXG4gICAgSW1hZ2VEaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBPdmVybGF5RGlyZWN0aXZlLFxyXG4gICAgUG9zaXRpb25MYXlvdXREaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBUZXh0QmFja2dyb3VuZERpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIE9iamVjdFBvc2l0aW9uRGlyZWN0aXZlLFxyXG4gICAgQ29sb3JEaXJlY3RpdmUsXHJcbiAgICBUZXh0U2l6ZURpcmVjdGl2ZSxcclxuICAgIFNhbml0aXplSHRtbFBpcGVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHBvaW50bWVudC1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXBwb2ludG1lbnRGb3JtQ29tcG9uZW50IGV4dGVuZHMgQmFzZVNlY3Rpb24gaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSBkYXRhPzogQmFubmVyU2VjdGlvbk1vZGVsO1xyXG4gIEBJbnB1dCgpIGluZGV4PzogbnVtYmVyO1xyXG4gIGNvbnRlbnQ/OiBCYW5uZXJDb250ZW50TW9kZWw7XHJcbiAgQElucHV0KCkgZWRpdD86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZGVsZXRlPzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBjdXN0b21DbGFzcz86IHN0cmluZztcclxuICBzdHlsZXM/OiBCYW5uZXJTdHlsZXNNb2RlbDtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtYXREaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXJcclxuXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgYnVzaW5lc3NJZDogYW55O1xyXG4gIGJ1c2luZXNzTmFtZTogYW55O1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2codGhpcy5kYXRhKTtcclxuICAgIHRoaXMuZGVsZXRlU2VsZWN0ZWQgPSB0aGlzLmRlbGV0ZVxyXG4gICAgdGhpcy5jb250ZW50ID0gdGhpcy5kYXRhPy5jb250ZW50O1xyXG4gICAgdGhpcy5zdHlsZXMgPSB0aGlzLmRhdGE/LnN0eWxlcztcclxuICAgIGlmICghdGhpcy5zdHlsZXMgfHwgIXRoaXMuY29udGVudCkgcmV0dXJuO1xyXG4gICAgdGhpcy5idXNpbmVzc0lkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpLFxyXG4gICAgICB0aGlzLmJ1c2luZXNzTmFtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYk5hbWVcIikgPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc05hbWVcIilcclxuXHJcblxyXG4gICAgdGhpcy5nZXRBbGxTZXJ2aWNlcygpO1xyXG4gICAgdGhpcy5nZXRBbGxMb2NhdGlvbnMoKTtcclxuICAgIC8vIHRoaXMuc3R5bGVzLmxheW91dC5iYW5uZXJJbWFnZURpc3BsYXkgPSB0aGlzLmNvbnRlbnQuaW1hZ2Uuc2hvd0ltYWdlO1xyXG4gIH1cclxuICBnZXQgc3R5bGVzTGF5b3V0KCkge1xyXG4gICAgcmV0dXJuIHsgLi4udGhpcy5zdHlsZXM/LmxheW91dCB9IGFzIExheU91dE1vZGVsO1xyXG4gIH1cclxuICBnZXQgZ2V0SnVzdGlmeUNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gXCJqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50O1wiO1xyXG4gIH1cclxuICBnZXQgY2FuTWVyZ2VOYXZiYXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdHlsZXM/Lm1lcmdlO1xyXG4gIH1cclxuICBnZXQgaXNCb3JkZXJsZXNzSW1hZ2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdHlsZXM/LmJvcmRlckxlc3NJbWFnZSAmJiAodGhpcy5zdHlsZXM/LnBvc2l0aW9uTGF5b3V0LnZhbHVlID09IFwibGVmdFwiIHx8IHRoaXMuc3R5bGVzPy5wb3NpdGlvbkxheW91dC52YWx1ZSA9PSBcInJpZ2h0XCIpO1xyXG4gIH1cclxuICBnZXQgZ2V0UG9zaXRpb25MYXlvdXQoKSB7XHJcbiAgICByZXR1cm4geyAuLi50aGlzLnN0eWxlcz8ucG9zaXRpb25MYXlvdXQgfSBhcyBQb3NpdGlvbkxheW91dE1vZGFsO1xyXG4gIH1cclxuXHJcbiAgZWRpdFNlY3Rpb24oKSB7XHJcblxyXG4gICAgdGhpcy5fZXZlbnRTZXJ2aWNlLnRvZ2dsZUVkaXRvckV2ZW50LmVtaXQoZmFsc2UpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2V2ZW50U2VydmljZS5lZGl0U2VjdGlvbi5lbWl0KHsgZGF0YTogdGhpcy5kYXRhIH0pO1xyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcbiAgc3RvcFByb3BhZ2F0aW9uKGV2ZW50OiBhbnkpIHtcclxuXHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG9wZW5kYWlsb2dib3godGVtcGxhdGU6IFRlbXBsYXRlUmVmPEhUTUxEaXZFbGVtZW50Pik6IHZvaWQge1xyXG4gICAgdGhpcy5tYXREaWFsb2cub3Blbih0ZW1wbGF0ZSxcclxuICAgICAgLy8gIHt3aWR0aDonNTAwcHgnfSBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgY2xvc2VEaWFsb2coKSB7XHJcbiAgICB0aGlzLm1hdERpYWxvZy5jbG9zZUFsbCgpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbiAgaXNNb3ZlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9uRm9jdXMoKSB7XHJcbiAgICB0aGlzLmlzTW92ZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmVzdHJpY3ROb25OdW1lcmljKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBjb25zdCBjaGFyQ29kZSA9IGV2ZW50LmNoYXJDb2RlO1xyXG4gICAgaWYgKGNoYXJDb2RlICE9IDApIHtcclxuICAgICAgLy8gQWxsb3cgb25seSBudW1iZXJzXHJcbiAgICAgIGlmIChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgb25Vc2VyTmFtZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCByZWdleCA9IC9eW2EtekEtWlxcc10qJC87XHJcbiAgICBpZiAoIXJlZ2V4LnRlc3QodmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuQ3JlYXRlRGF0YS5jbGllbnROYW1lID0gdmFsdWUucmVwbGFjZSgvW15hLXpBLVpcXHNdL2csICcnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuQ3JlYXRlRGF0YS5jbGllbnROYW1lID0gdGhpcy50b1RpdGxlQ2FzZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b1RpdGxlQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcd1xcUyovZywgZnVuY3Rpb24gKHR4dCkge1xyXG4gICAgICByZXR1cm4gdHh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgQ3JlYXRlRGF0YTogYW55ID0ge1xyXG4gICAgYXBwb2ludG1lbnRJZDogXCJcIixcclxuICAgIGJ1c2luZXNzOiB7XHJcbiAgICAgIGlkOiBcIlwiLFxyXG4gICAgICBuYW1lOiBcIlwiXHJcbiAgICB9LFxyXG4gICAgY2xpZW50TmFtZTogXCJcIixcclxuICAgIG1vYmlsZTogXCJcIixcclxuICAgIHNjaGVkdWxlZERhdGU6IFwiXCIsXHJcbiAgICBzZXJ2aWNlczogW1xyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IFwiXCIsXHJcbiAgICAgICAgbmFtZTogXCJcIlxyXG4gICAgICB9XHJcbiAgICBdLFxyXG4gICAgdGltZTogXCJcIixcclxuICAgIG1lc3NhZ2U6IFwiXCJcclxuICB9XHJcblxyXG5cclxuICBtaW5EYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcclxuXHJcblxyXG4gIHNlcnZpY2VEYXRhOiBhbnk7XHJcbiAgZ2V0QWxsU2VydmljZXMoKSB7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldEFsbFNlcnZpY2VzKHRoaXMuYnVzaW5lc3NJZCwgMTAwMCwgMCkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzLmRhdGEuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNlcnZpY2VEYXRhID0gcmVzLmRhdGEuZGF0YTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuc2VydmljZURhdGEpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFxyXG4gICAgICAgICAgICBgU2VydmljZSBpcyBub3QgY3JlYXRlZCB5ZXQgd2l0aCB0aGlzIGJ1c2luZXNzYCxcclxuICAgICAgICAgICAgJ0Nsb3NlJyxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBzZXJ2aWNlczpcIiwgZXJyb3IpOyAvLyBIYW5kbGUgZXJyb3JzIGdyYWNlZnVsbHlcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGxvY2F0aW9uRGF0YTogYW55O1xyXG4gIHNlbGVjdGVkTG9jYXRpb246IHN0cmluZyA9IFwiXCI7XHJcbiAgZ2V0QWxsTG9jYXRpb25zKCkge1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5nZXRBbGxMb2NhdGlvbih0aGlzLmJ1c2luZXNzSWQsIDEwMDAsIDApLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5kYXRhLmRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5sb2NhdGlvbkRhdGEgPSByZXMuZGF0YS5kYXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcclxuICAgICAgICAgICAgYExvY2F0aW9uIGlzIG5vdCBjcmVhdGVkIHlldCB3aXRoIHRoaXMgYnVzaW5lc3NgLFxyXG4gICAgICAgICAgICAnQ2xvc2UnLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHNlcnZpY2VzOlwiLCBlcnJvcik7IC8vIEhhbmRsZSBlcnJvcnMgZ3JhY2VmdWxseVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRTZXJ2aWNlczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgZm9ybWF0RGF0ZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICBjb25zdCBtb250aCA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpOyAvLyBNb250aHMgYXJlIHplcm8tYmFzZWRcclxuICAgIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcclxuXHJcbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcclxuICB9XHJcblxyXG5cclxuICBmb3JtYXR0ZWREYXRlOiBhbnk7XHJcbiAgdGltZVNsb3RzRGF0YTogYW55O1xyXG4gIGZvcm1hdHRlZFRpbWVJbnRlcnZhbHM6IGFueTtcclxuICBnZXRUaW1lU2xvdHMoKSB7XHJcbiAgICB0aGlzLmZvcm1hdHRlZERhdGUgPSB0aGlzLmZvcm1hdERhdGUobmV3IERhdGUodGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZERhdGUpKTtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0QWxsVGltZVNsb3RzKHRoaXMuc2VsZWN0ZWRMb2NhdGlvbiwgdGhpcy5mb3JtYXR0ZWREYXRlKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgIHRoaXMudGltZVNsb3RzRGF0YSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuZm9ybWF0dGVkVGltZUludGVydmFscyA9IHRoaXMudGltZVNsb3RzRGF0YS5tYXAoKGludGVydmFsOiBhbnkpID0+ICh7XHJcbiAgICAgICAgICAgIHN0YXJ0VGltZTogaW50ZXJ2YWwuc3RhcnRUaW1lLnNsaWNlKDAsIDUpLCAvLyBHZXQgSEg6TU1cclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyVGltZVNsb3RzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFxyXG4gICAgICAgICAgICBgVGltZSBpcyBub3QgY3JlYXRlZCB5ZXQgd2l0aCB0aGlzIGJ1c2luZXNzYCxcclxuICAgICAgICAgICAgJ0Nsb3NlJyxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBzZXJ2aWNlczpcIiwgZXJyb3IpOyAvLyBIYW5kbGUgZXJyb3JzIGdyYWNlZnVsbHlcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICBmaWx0ZXJUaW1lU2xvdHMoKSB7XHJcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gbmV3IERhdGUodGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZERhdGUpO1xyXG5cclxuICAgIC8vIENoZWNrIGlmIHRoZSBzZWxlY3RlZCBkYXRlIGlzIHRvZGF5XHJcbiAgICBpZiAoc2VsZWN0ZWREYXRlLnRvRGF0ZVN0cmluZygpID09PSBub3cudG9EYXRlU3RyaW5nKCkpIHtcclxuICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBub3cuZ2V0SG91cnMoKSAqIDYwICsgbm93LmdldE1pbnV0ZXMoKTsgLy8gQ29udmVydCBjdXJyZW50IHRpbWUgdG8gdG90YWwgbWludXRlc1xyXG5cclxuICAgICAgLy8gRmlsdGVyIG91dCB0aGUgdGltZSBzbG90cyB0aGF0IGFyZSBiZWZvcmUgdGhlIGN1cnJlbnQgdGltZVxyXG4gICAgICB0aGlzLmZvcm1hdHRlZFRpbWVJbnRlcnZhbHMgPSB0aGlzLmZvcm1hdHRlZFRpbWVJbnRlcnZhbHMuZmlsdGVyKCh0aW1lU2xvdDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgW3RpbWUsIHBlcmlvZF0gPSB0aW1lU2xvdC5zdGFydFRpbWUuc3BsaXQoJyAnKTsgLy8gU3BsaXQgdGltZSBhbmQgcGVyaW9kXHJcbiAgICAgICAgY29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKTtcclxuICAgICAgICBjb25zdCBhZGp1c3RlZEhvdXJzID0gKHBlcmlvZCA9PT0gJ1BNJyAmJiBob3VycyAhPT0gMTIpID8gaG91cnMgKyAxMiA6IChwZXJpb2QgPT09ICdBTScgJiYgaG91cnMgPT09IDEyKSA/IDAgOiBob3VyczsgLy8gQWRqdXN0IGZvciAyNC1ob3VyIGZvcm1hdFxyXG4gICAgICAgIGNvbnN0IHNsb3RUaW1lID0gYWRqdXN0ZWRIb3VycyAqIDYwICsgbWludXRlczsgLy8gQ29udmVydCBzbG90IHRpbWUgdG8gdG90YWwgbWludXRlc1xyXG4gICAgICAgIHJldHVybiBzbG90VGltZSA+IGN1cnJlbnRUaW1lOyAvLyBPbmx5IHNob3cgc2xvdHMgYWZ0ZXIgdGhlIGN1cnJlbnQgdGltZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRhdGVGaWx0ZXIgPSAoZGF0ZTogRGF0ZSB8IG51bGwpOiBib29sZWFuID0+IHtcclxuICAgIGNvbnN0IGRheSA9IGRhdGU/LmdldERheSgpO1xyXG4gICAgLy8gRGlzYWJsZSBTdW5kYXlzXHJcbiAgICByZXR1cm4gZGF5ICE9PSAwO1xyXG4gIH07XHJcblxyXG5cclxuICBpc0Zvcm1WYWxpZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLkNyZWF0ZURhdGEuY2xpZW50TmFtZSAhPT0gJycgJiZcclxuICAgICAgdGhpcy5DcmVhdGVEYXRhLm1vYmlsZSAhPT0gJycgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZFNlcnZpY2VzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZExvY2F0aW9uICE9PSAnJyAmJlxyXG4gICAgICB0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSAhPT0gJycgJiZcclxuICAgICAgdGhpcy5DcmVhdGVEYXRhLm1lc3NhZ2UgIT09ICcnO1xyXG4gIH1cclxuXHJcbiAgcHJlcGFyZUNyZWF0ZURhdGEoKSB7XHJcbiAgICB0aGlzLkNyZWF0ZURhdGEuc2VydmljZXMgPSBbXTtcclxuICAgIHRoaXMuc2VydmljZURhdGEuZm9yRWFjaCgoc2VydmljZTogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VydmljZXMuaW5jbHVkZXMoc2VydmljZS5pZCkpIHtcclxuICAgICAgICB0aGlzLkNyZWF0ZURhdGEuc2VydmljZXMucHVzaCh7XHJcbiAgICAgICAgICBpZDogc2VydmljZS5pZCxcclxuICAgICAgICAgIG5hbWU6IHNlcnZpY2UubmFtZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJlcGFyZUxvY2F0aW9uRGF0YSgpIHtcclxuICAgIHRoaXMuQ3JlYXRlRGF0YS5sb2NhdGlvbnMgPSBbXTtcclxuICAgIHRoaXMubG9jYXRpb25EYXRhLmZvckVhY2goKGxvY2F0aW9uOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMb2NhdGlvbiA9PSBsb2NhdGlvbi5pZCkge1xyXG4gICAgICAgIHRoaXMuQ3JlYXRlRGF0YS5sb2NhdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICBpZDogbG9jYXRpb24uaWQsXHJcbiAgICAgICAgICBuYW1lOiBsb2NhdGlvbi5uYW1lXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNyZWF0ZUxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGJvb2tBcHBvaW50bWVudCgpIHtcclxuICAgIHRoaXMucHJlcGFyZUNyZWF0ZURhdGEoKTtcclxuICAgIHRoaXMucHJlcGFyZUxvY2F0aW9uRGF0YSgpO1xyXG4gICAgdGhpcy5DcmVhdGVEYXRhLmJ1c2luZXNzLmlkID0gdGhpcy5idXNpbmVzc0lkO1xyXG4gICAgdGhpcy5DcmVhdGVEYXRhLmJ1c2luZXNzLm5hbWUgPSB0aGlzLmJ1c2luZXNzTmFtZTtcclxuXHJcbiAgICBpZiAodGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZERhdGUpIHtcclxuICAgICAgY29uc3Qgb3JpZ2luYWxEYXRlID0gbmV3IERhdGUodGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZERhdGUpO1xyXG4gICAgICBvcmlnaW5hbERhdGUuc2V0RGF0ZShvcmlnaW5hbERhdGUuZ2V0RGF0ZSgpICsgMSk7IC8vIEFkZCBvbmUgZGF5XHJcbiAgICAgIHRoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWREYXRlID0gb3JpZ2luYWxEYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLmNyZWF0ZUxvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmNyZWF0ZUFwcG9pbnRtZW50KHRoaXMuQ3JlYXRlRGF0YSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXHJcbiAgICAgICAgICBgQXBwb2ludG1lbnQgaXMgQ3JlYXRlZGAsXHJcbiAgICAgICAgICAnQ2xvc2UnLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgICB0aGlzLm1hdERpYWxvZy5jbG9zZUFsbCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXHJcbiAgICAgICAgICBgSW50ZXJuYWwgU2VydmVyIEVycm9yYCxcclxuICAgICAgICAgICdDbG9zZScsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBDcmVhdGlvbjpcIiwgZXJyb3IpOyAvLyBIYW5kbGUgZXJyb3JzIGdyYWNlZnVsbHlcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IFtpZF09XCJkYXRhPy5pZFwiXHJcbiAgW25nQ2xhc3NdPVwieydtZXJnZU5hdmJhcic6IGNhbk1lcmdlTmF2YmFyICYmIGluZGV4ID09IDEsICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBkLWZsZXgnOiBpc0JvcmRlcmxlc3NJbWFnZX1cIlxyXG4gIFtzaW1wb0JhY2tncm91bmRdPVwic3R5bGVzPy5iYWNrZ3JvdW5kXCIgY2xhc3M9XCJ0b3RhbC1jb250YWluZXJcIiBzdHlsZT1cIm92ZXJmbG93LXg6IGhpZGRlbjtcIiBzaW1wb0hvdmVyXHJcbiAgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCIgW2F0dHIuc3R5bGVdPVwiY3VzdG9tQ2xhc3NcIj5cclxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiSW1hZ2VTZWN0aW9uXCI+PC9uZy1jb250YWluZXI+XHJcbiAgPGRpdiBjbGFzcz1cInB4LTQgcHktNVwiIFtuZ0NsYXNzXT1cInsnY29sLWxnLTYgY29sLXh4bC02JzogaXNCb3JkZXJsZXNzSW1hZ2UsICd3LTEwMCBjb2wteHhsLTgnOiAhaXNCb3JkZXJsZXNzSW1hZ2V9XCJcclxuICAgIFtpZF09XCJkYXRhPy5pZFwiICNtYWluQ29udGFpbmVyIFtzaW1wb092ZXJsYXldPVwic3R5bGVzPy5iYWNrZ3JvdW5kXCIgW3NpbXBvQm9yZGVyXT1cInN0eWxlcz8uYm9yZGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGctNSBqdXN0aWZ5LWNvbnRlbnQtc3RhcnRcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9BbmltYXRpb25dPVwic3R5bGVzPy5hbmltYXRpb25cIlxyXG4gICAgICBbc2ltcG9MYXlvdXRdPVwic3R5bGVzPy5sYXlvdXRcIiBbc2ltcG9Qb3NpdGlvbkxheW91dERpcmVjdGl2ZV09XCJzdHlsZXM/LnBvc2l0aW9uTGF5b3V0XCJcclxuICAgICAgW25nQ2xhc3NdPVwieyAnYWxpZ24taXRlbXMtc3RyZXRjaCc6IHN0eWxlcz8ucG9zaXRpb25MYXlvdXQ/LnZhbHVlID09PSAnbGVmdCcgfHwgc3R5bGVzPy5wb3NpdGlvbkxheW91dD8udmFsdWUgPT09ICdyaWdodCcsICdmbGV4LWxnLXJvdyc6IHRydWUgfVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwIGNvbC1zbS04IGNvbC1sZy02XCIgKm5nSWY9XCJjb250ZW50Py5pbWFnZT8uc2hvd0ltYWdlICYmICFpc0JvcmRlcmxlc3NJbWFnZVwiXHJcbiAgICAgICAgW3NpbXBvQ29udGFpbmVyQWxpZ25tZW50XT1cInN0eWxlc0xheW91dFwiPlxyXG4gICAgICAgIDxpbWcgbG9hZGluZz1cImxhenlcIiBbc3JjXT1cImNvbnRlbnQ/LmltYWdlPy51cmxcIiBbc2ltcG9JbWFnZURpcmVjdGl2ZV09XCJzdHlsZXM/LmltYWdlXCIgW2lkXT1cImRhdGE/LmlkXCJcclxuICAgICAgICAgIFtzaW1wb09iamVjdFBvc2l0aW9uXT1cImNvbnRlbnQ/LmltYWdlPy5wb3NpdGlvblwiIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIlxyXG4gICAgICAgICAgW2NsYXNzXT1cImRhdGE/LmlkKyhjb250ZW50Py5pbWFnZT8uaWQgfHwgJycpXCIgY2xhc3M9XCJkLWJsb2NrIHctMTAwIGluc2lkZUltZ1wiIHN0eWxlPVwib2JqZWN0LWZpdDogY292ZXI7XCJcclxuICAgICAgICAgIFthbHRdPVwiY29udGVudD8uaW1hZ2U/LmFsdFRleHRcIiB3aWR0aD1cIjcwMFwiIGhlaWdodD1cIjUwMFwiIGxvYWRpbmc9XCJsYXp5XCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LXN0YXJ0IGdhcC0xNVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieydjb2wtbGctMTInOiBpc0JvcmRlcmxlc3NJbWFnZSwgJ2NvbC1sZy02JzogIWlzQm9yZGVybGVzc0ltYWdlfVwiXHJcbiAgICAgICAgW3NpbXBvQ29udGFpbmVyQWxpZ25tZW50XT1cInN0eWxlc0xheW91dFwiIFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb0NvbnRlbnRBbGlnbm1lbnRdPVwic3R5bGVzPy5jb250ZW50QWxpZ25tZW50XCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb250ZW50Py5pbnB1dFRleHRcIj5cclxuICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJpdGVtLnZhbHVlIHwgc2FuaXRpemVIdG1sXCIgY2xhc3M9XCJ0ZXh0LWVsZW1lbnRcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLmxhYmVsID09PSAnSGVhZGluZycgPyAnaGVhZGluZy1sYXJnZSBsaC0yIG1iLTMnIDogJ2JvZHktbGFyZ2UnXCI+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb250ZW50Py5saXN0SXRlbT8uZGF0YVwiIGNsYXNzPVwiY2FyZGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZF93cmFwcGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJfY2FyZCB2aXNpYmxlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY29uZC1wYXJ0LWNhcmRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaXJzdC1wYXJ0LWNhcmRcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLmlucHV0VGV4dFswXS5sYWJlbD09PSAnSGVhZGluZycgPyAnaGVhZGluZy1sYXJnZSBsaC0yIG1iLTMnIDogJ2JvZHktbGFyZ2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbWcgbG9hZGluZz1cImxhenlcIiBjbGFzcz1cInRpY2staW1nXCJcclxuICAgICAgICAgICAgICAgICAgICBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzkzMzk5N2MxNzE4NzkwMzAzMTI3OTA3NTk4YzE2OTYwNjMwNjE5MDBncmVlbl92ZXJpZmllZF9pbWFnZS5wbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgIGFsdD1cInNvbWV0aGluZ1wiIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICB7eyBpdGVtLmlucHV0VGV4dFswXS52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImRhdGE/LmFjdGlvbiAmJiBkYXRhPy5hY3Rpb24/LmRpc3BsYXlcIiBjbGFzcz1cImJ1dHRvbi1kaXNwbGF5XCJcclxuICAgICAgICAgIFtzaW1wb0NvbnRhaW5lckFsaWdubWVudF09XCJzdHlsZXNMYXlvdXRcIj5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNcIj5cclxuICAgICAgICAgICAgPGFwcC1idXR0b24tZWxlbWVudCBbYnV0dG9uQ29udGVudF09XCJidXR0b24uY29udGVudFwiIFtidXR0b25TdHlsZV09XCJidXR0b24uc3R5bGVzXCIgW2J1dHRvbklkXT1cImJ1dHRvbi5pZFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5kYWlsb2dib3goZGlhbG9nQm94KVwiIFtzZWN0aW9uSWRdPVwiZGF0YT8uaWRcIlxyXG4gICAgICAgICAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+PC9hcHAtYnV0dG9uLWVsZW1lbnQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSA8ZGl2IHN0eWxlPVwiIHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDUwMHB4O1wiPlxyXG4gICAgPGltZyBsb2FkaW5nPVwibGF6eVwiICBzcmM9XCIuLi8uLi9hc3NldHMvZGl2aWRlci5zdmdcIiBzdHlsZT1cImNsaXAtcGF0aDogcG9seWdvbigwIDU1JSwgMTAwJSAwLCAxMDAlIDEwMCUsIDAlIDEwMCUpOyBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7XCI+XHJcbiAgPC9kaXY+IC0tPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0ICYmIGZhbHNlIH1cIiAqbmdJZj1cInNob3dFZGl0b3JzXCI+XHJcbiAgICA8c2ltcG8taG92ZXItZWxlbWVudHMgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiIFtlZGl0T3B0aW9uc109XCJlZGl0XCJcclxuICAgICAgW2lzTWVyZ2VkXT1cInN0eWxlcz8ubWVyZ2UgPz8gZmFsc2VcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBkZWxldGV9XCI+XHJcbiAgICA8c2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiPjwvc2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQ+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48bmctdGVtcGxhdGUgI0ltYWdlU2VjdGlvbj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLTEwIGNvbC1zbS04IGNvbC1sZy02XCJcclxuICAgIFtuZ1N0eWxlXT1cInsnd2lkdGgnOiBzdHlsZXM/LnBvc2l0aW9uTGF5b3V0Py52YWx1ZSA9PT0gJ3JpZ2h0JyA/ICdmaXQtY29udGVudCcgOiAnJ31cIlxyXG4gICAgc3R5bGU9XCJwYWRkaW5nOiAwcHggIWltcG9ydGFudDtcIiAqbmdJZj1cImNvbnRlbnQ/LmltYWdlPy5zaG93SW1hZ2UgJiYgaXNCb3JkZXJsZXNzSW1hZ2U7XCJcclxuICAgIFtzaW1wb0JvcmRlcmxlc3NdPVwiZ2V0UG9zaXRpb25MYXlvdXRcIj5cclxuICAgIDxpbWcgbG9hZGluZz1cImxhenlcIiBbc3JjXT1cImNvbnRlbnQ/LmltYWdlPy51cmxcIiBjbGFzcz1cImQtYmxvY2sgaW1nLWZsdWlkIGgtMTAwIHctMTAwXCJcclxuICAgICAgW2FsdF09XCJjb250ZW50Py5pbWFnZT8uYWx0VGV4dFwiIHdpZHRoPVwiNzAwXCIgaGVpZ2h0PVwiNTAwXCIgbG9hZGluZz1cImxhenlcIiAvPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbjwhLS0gRGlhbG9nIHRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0JveCBjbGFzcz1cImRpYWxvZ2JveFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJhcHBvaW50bWVudC1mb3JtXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXNlY3Rpb25cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1sZWZ0LXNpZGVcIj5cclxuICAgICAgICA8aDIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0O1wiPkJvb2sgYW4gQXBwb2ludG1lbnQ8L2gyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yaWdodC1zaWRlXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJjbG9zZURpYWxvZygpXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxmb3JtPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibmFtZS1tb2JpbGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Z1bGwtd2lkdGhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+TmFtZTwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0U3R5bGVcIiBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIkVudGVyIFlvdXIgTmFtZVwiIHBhdHRlcm49XCJbYS16QS1aIF0qXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIkNyZWF0ZURhdGEuY2xpZW50TmFtZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uVXNlck5hbWVDaGFuZ2UoJGV2ZW50KVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRleHRcIj5Nb2JpbGUgTnVtYmVyPC9kaXY+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dFN0eWxlXCIgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJFbnRlciBZb3VyIE1vYmlsZSBOdW1iZXJcIlxyXG4gICAgICAgICAgICAgIHBhdHRlcm49XCJeWzAtOV17MTAsMTV9JFwiIG1heGxlbmd0aD1cIjE1XCIgKGZvY3VzKT1cIm9uRm9jdXMoKVwiIChrZXlwcmVzcyk9XCJyZXN0cmljdE5vbk51bWVyaWMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJDcmVhdGVEYXRhLm1vYmlsZVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm5hbWUtbW9iaWxlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNmdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGV4dFwiPlNlcnZpY2U8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBjbGFzcz1cImlucHV0U3R5bGVcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBTZXJ2aWNlXCIgbXVsdGlwbGUgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFNlcnZpY2VzXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlcnZpY2Ugb2Ygc2VydmljZURhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJzZXJ2aWNlLmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHNlcnZpY2UubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Z1bGwtd2lkdGhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+TG9jYXRpb248L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBjbGFzcz1cImlucHV0U3R5bGVcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBMb2NhdGlvblwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRMb2NhdGlvblwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsb2NhdGlvbiBvZiBsb2NhdGlvbkRhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJsb2NhdGlvbi5pZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBsb2NhdGlvbi5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm5hbWUtbW9iaWxlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNmdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGV4dFwiPkRhdGU8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFN0eWxlXCIgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgRGF0ZVwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJDcmVhdGVEYXRhLnNjaGVkdWxlZERhdGVcIiAobmdNb2RlbENoYW5nZSk9XCJnZXRUaW1lU2xvdHMoKVwiIFttaW5dPVwibWluRGF0ZVwiXHJcbiAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiZGF0ZUZpbHRlclwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRJY29uU3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Z1bGwtd2lkdGhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+VGltZTwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGNsYXNzPVwiaW5wdXRTdHlsZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IExvY2F0aW9uXCIgWyhuZ01vZGVsKV09XCJDcmVhdGVEYXRhLnRpbWVcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGltZSBvZiBmb3JtYXR0ZWRUaW1lSW50ZXJ2YWxzXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidGltZS5zdGFydFRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgdGltZS5zdGFydFRpbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImZ1bGwtbWVzc2FnZS1zZWN0aW9uXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1c2luZXNzLWZpZWxkLXNlY3Rpb25cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+TWVzc2FnZTwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0U3R5bGVcIiBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIkVudGVyIFlvdXIgTmFtZVwiIHBhdHRlcm49XCJbYS16QS1aIF0qXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIkNyZWF0ZURhdGEubWVzc2FnZVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImJvdHRvbS1zZWN0aW9uXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1zZWN0aW9uXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYm9va2luZy1idXR0b25cIiBbZGlzYWJsZWRdPVwiIWlzRm9ybVZhbGlkKClcIiAoY2xpY2spPVwiYm9va0FwcG9pbnRtZW50KClcIj5cclxuICAgICAgICAgICAgQm9vayBBcHBvaW50bWVudFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwb2ludG1lbnQtZm9ybS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvc2VjdGlvbnMvYXBwb2ludG1lbnQtZm9ybS9hcHBvaW50bWVudC1mb3JtLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb25Nb2RlbCwgQmFubmVyU3R5bGVzTW9kZWwsIEltYWdlLCBJbnB1dFRleHRNb2RlbCwgTGlzdEl0ZW1Nb2RhbCB9IGZyb20gJy4vLi4vLi4vc3R5bGVzL3N0eWxlLm1vZGVsJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmFubmVyU2VjdGlvbk1vZGVsIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBzZWN0aW9uVHlwZTogc3RyaW5nLFxyXG4gICAgc2VjdGlvbk5hbWU6IHN0cmluZyxcclxuICAgIGNvbnRlbnQ6IEJhbm5lckNvbnRlbnRNb2RlbDtcclxuICAgIHN0eWxlczogQmFubmVyU3R5bGVzTW9kZWw7XHJcbiAgICBhY3Rpb246IEFjdGlvbk1vZGVsO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlTW9kZWwgZXh0ZW5kcyBJbWFnZXtcclxuICAgIHNob3dJbWFnZTpib29sZWFuXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgdGV4dE1vZGVse1xyXG4gICAgdmFsdWUgOiBzdHJpbmdcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEJhbm5lckNvbnRlbnRNb2RlbCB7XHJcbiAgICBpbnB1dFRleHQ6IElucHV0VGV4dE1vZGVsW11cclxuICAgIGltYWdlOkltYWdlTW9kZWw7XHJcbiAgICBsaXN0SXRlbTogTGlzdEl0ZW1Nb2RhbDxCYW5uZXJMaXN0SXRlbT47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmFubmVyTGlzdEl0ZW0ge1xyXG4gIGlucHV0VGV4dDogSW5wdXRUZXh0TW9kZWxbXVxyXG59XHJcbiJdfQ==