simpo-component-library 1.5.0 → 1.5.4
Sign up to get free protection for your applications and to get access to all the features.
- package/esm2022/lib/components/hover-elements/hover-elements.component.mjs +7 -5
- package/esm2022/lib/constants/business.constant.mjs +14 -0
- package/esm2022/lib/directive/background-directive.mjs +1 -1
- package/esm2022/lib/directive/border-directive.mjs +23 -11
- package/esm2022/lib/directive/spacing-horizontal.directive.mjs +48 -0
- package/esm2022/lib/directive/wrap-containers.directive.mjs +31 -0
- package/esm2022/lib/ecommerce/sections/address/address.component.mjs +139 -28
- package/esm2022/lib/ecommerce/sections/authenticate-user/authenticate-user.component.mjs +104 -39
- package/esm2022/lib/ecommerce/sections/cart/cart.component.mjs +296 -61
- package/esm2022/lib/ecommerce/sections/cart/cart.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/checkout/checkout.component.mjs +13 -3
- package/esm2022/lib/ecommerce/sections/featured-category/featured-category.component.mjs +13 -4
- package/esm2022/lib/ecommerce/sections/featured-products/featured-products.component.mjs +212 -42
- package/esm2022/lib/ecommerce/sections/featured-products/featured-products.modal.mjs +11 -2
- package/esm2022/lib/ecommerce/sections/item-varient/item-varient.component.mjs +11 -0
- package/esm2022/lib/ecommerce/sections/order-details/order-details.component.mjs +77 -10
- package/esm2022/lib/ecommerce/sections/pagnination/pagnination.component.mjs +13 -7
- package/esm2022/lib/ecommerce/sections/product-desc/product-desc.component.mjs +272 -39
- package/esm2022/lib/ecommerce/sections/product-desc/product-desc.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/product-list/product-list.component.mjs +252 -33
- package/esm2022/lib/ecommerce/sections/product-list/product-list.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/user-basic-info/user-basic-info.component.mjs +44 -17
- package/esm2022/lib/ecommerce/sections/user-profile/user-profile.component.mjs +301 -28
- package/esm2022/lib/ecommerce/sections/user-profile/user-profile.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.component.mjs +124 -0
- package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.model.mjs +2 -0
- package/esm2022/lib/ecommerce/sections/whislist/whislist.component.mjs +183 -17
- package/esm2022/lib/ecommerce/styles/OrderedItems.modal.mjs +11 -3
- package/esm2022/lib/ecommerce/styles/cart.modal.mjs +2 -1
- package/esm2022/lib/ecommerce/styles/product.modal.mjs +10 -1
- package/esm2022/lib/ecommerce/styles/user.modal.mjs +1 -1
- package/esm2022/lib/elements/below-image-card/below-image-card.component.mjs +3 -3
- package/esm2022/lib/elements/covering-image-card/covering-image-card.component.mjs +3 -3
- package/esm2022/lib/elements/top-of-image-card/top-of-image-card.component.mjs +3 -3
- package/esm2022/lib/pipes/amount.pipe.mjs +35 -0
- package/esm2022/lib/pipes/gender.pipe.mjs +36 -0
- package/esm2022/lib/sections/BaseSection.mjs +1 -1
- package/esm2022/lib/sections/banner-carousel/banner-carousel.component.mjs +3 -3
- package/esm2022/lib/sections/banner-grid-section/banner-grid-section.component.mjs +9 -4
- package/esm2022/lib/sections/banner-grid-section/banner-grid-section.model.mjs +1 -1
- package/esm2022/lib/sections/banner-section/banner-section.component.mjs +3 -3
- package/esm2022/lib/sections/blog-list/blog-list.component.mjs +3 -3
- package/esm2022/lib/sections/carousel-banner/carousel-banner.component.mjs +12 -12
- package/esm2022/lib/sections/carousel-banner/carousel-banner.model.mjs +1 -1
- package/esm2022/lib/sections/choose-us-section/choose-us-section.component.mjs +2 -2
- package/esm2022/lib/sections/contact-us/contact-us.component.mjs +7 -5
- package/esm2022/lib/sections/faq-section/faq-section.component.mjs +3 -3
- package/esm2022/lib/sections/features-section/features-section.component.mjs +3 -3
- package/esm2022/lib/sections/footer-section/footer-section.component.mjs +3 -3
- package/esm2022/lib/sections/header-text/header-text.component.mjs +3 -3
- package/esm2022/lib/sections/image-carousel-section/image-carousel-section.component.mjs +3 -3
- package/esm2022/lib/sections/image-grid-section/image-grid-section.component.mjs +3 -3
- package/esm2022/lib/sections/image-section/image-section.component.mjs +3 -3
- package/esm2022/lib/sections/location-section/location-section.component.mjs +2 -2
- package/esm2022/lib/sections/logo-showcase/logo-showcase.component.mjs +3 -3
- package/esm2022/lib/sections/navbar-section/navbar-section.component.mjs +42 -18
- package/esm2022/lib/sections/navbar-section/navbar-section.model.mjs +1 -1
- package/esm2022/lib/sections/pricing-section/pricing-section.component.mjs +3 -3
- package/esm2022/lib/sections/process-modern/process-modern.component.mjs +3 -3
- package/esm2022/lib/sections/process-section/process-section.component.mjs +3 -3
- package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.component.mjs +3 -3
- package/esm2022/lib/sections/service-section/service-section.component.mjs +1 -1
- package/esm2022/lib/sections/team-member-section/team-member-section.component.mjs +1 -1
- package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.component.mjs +3 -3
- package/esm2022/lib/sections/testimonial-section/testimonial-section.component.mjs +3 -3
- package/esm2022/lib/sections/text-image-section/text-image-section.component.mjs +3 -3
- package/esm2022/lib/sections/text-section/text-section.component.mjs +2 -2
- package/esm2022/lib/sections/video-section/video-section.component.mjs +11 -3
- package/esm2022/lib/sections/view-blog/view-blog.component.mjs +3 -3
- package/esm2022/lib/services/cart.service.mjs +54 -120
- package/esm2022/lib/services/endUser.service.mjs +28 -0
- package/esm2022/lib/services/events.service.mjs +4 -1
- package/esm2022/lib/services/rest.service.mjs +58 -16
- package/esm2022/lib/services/storage.service.mjs +103 -35
- package/esm2022/lib/styles/index.mjs +8 -1
- package/esm2022/lib/styles/style.model.mjs +1 -1
- package/esm2022/lib/styles/types.mjs +1 -1
- package/esm2022/public-api.mjs +4 -1
- package/fesm2022/simpo-component-library.mjs +2524 -712
- package/fesm2022/simpo-component-library.mjs.map +1 -1
- package/lib/components/hover-elements/hover-elements.component.d.ts +2 -1
- package/lib/constants/business.constant.d.ts +11 -0
- package/lib/directive/spacing-horizontal.directive.d.ts +18 -0
- package/lib/directive/wrap-containers.directive.d.ts +14 -0
- package/lib/ecommerce/sections/address/address.component.d.ts +30 -9
- package/lib/ecommerce/sections/authenticate-user/authenticate-user.component.d.ts +31 -6
- package/lib/ecommerce/sections/cart/cart.component.d.ts +26 -11
- package/lib/ecommerce/sections/cart/cart.modal.d.ts +10 -1
- package/lib/ecommerce/sections/checkout/checkout.component.d.ts +2 -0
- package/lib/ecommerce/sections/featured-category/featured-category.component.d.ts +2 -0
- package/lib/ecommerce/sections/featured-products/featured-products.component.d.ts +27 -9
- package/lib/ecommerce/sections/featured-products/featured-products.modal.d.ts +5 -1
- package/lib/ecommerce/sections/item-varient/item-varient.component.d.ts +5 -0
- package/lib/ecommerce/sections/order-details/order-details.component.d.ts +16 -2
- package/lib/ecommerce/sections/pagnination/pagnination.component.d.ts +3 -2
- package/lib/ecommerce/sections/product-desc/product-desc.component.d.ts +33 -4
- package/lib/ecommerce/sections/product-desc/product-desc.modal.d.ts +4 -1
- package/lib/ecommerce/sections/product-list/product-list.component.d.ts +39 -3
- package/lib/ecommerce/sections/product-list/product-list.modal.d.ts +2 -0
- package/lib/ecommerce/sections/user-basic-info/user-basic-info.component.d.ts +11 -1
- package/lib/ecommerce/sections/user-profile/user-profile.component.d.ts +52 -13
- package/lib/ecommerce/sections/user-profile/user-profile.modal.d.ts +6 -8
- package/lib/ecommerce/sections/verify-payment/verify-payment.component.d.ts +34 -0
- package/lib/ecommerce/sections/verify-payment/verify-payment.model.d.ts +23 -0
- package/lib/ecommerce/sections/whislist/whislist.component.d.ts +22 -6
- package/lib/ecommerce/styles/OrderedItems.modal.d.ts +6 -2
- package/lib/ecommerce/styles/cart.modal.d.ts +1 -0
- package/lib/ecommerce/styles/product.modal.d.ts +4 -0
- package/lib/ecommerce/styles/user.modal.d.ts +3 -3
- package/lib/pipes/amount.pipe.d.ts +7 -0
- package/lib/pipes/gender.pipe.d.ts +8 -0
- package/lib/sections/banner-grid-section/banner-grid-section.component.d.ts +1 -0
- package/lib/sections/banner-grid-section/banner-grid-section.model.d.ts +1 -0
- package/lib/sections/carousel-banner/carousel-banner.component.d.ts +7 -5
- package/lib/sections/carousel-banner/carousel-banner.model.d.ts +41 -26
- package/lib/sections/navbar-section/navbar-section.component.d.ts +6 -1
- package/lib/sections/navbar-section/navbar-section.model.d.ts +1 -1
- package/lib/sections/video-section/video-section.component.d.ts +4 -2
- package/lib/services/cart.service.d.ts +13 -8
- package/lib/services/endUser.service.d.ts +13 -0
- package/lib/services/events.service.d.ts +5 -2
- package/lib/services/rest.service.d.ts +16 -2
- package/lib/services/storage.service.d.ts +11 -44
- package/lib/styles/index.d.ts +6 -0
- package/lib/styles/style.model.d.ts +4 -1
- package/lib/styles/types.d.ts +2 -0
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
- package/simpo-component-library-1.5.4.tgz +0 -0
- package/esm2022/lib/ecommerce/json/user-cart.json +0 -40
- package/esm2022/lib/ecommerce/json/user-details.json +0 -15
- package/esm2022/lib/ecommerce/json/user-favourite.json +0 -32
- package/simpo-component-library-1.5.0.tgz +0 -0
@@ -1,27 +1,39 @@
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
1
|
+
import { Component, Input, Optional, Inject, Output, EventEmitter } from '@angular/core';
|
2
2
|
import { MatIcon } from '@angular/material/icon';
|
3
3
|
import { CommonModule } from '@angular/common';
|
4
|
-
import UserDetails from './../../json/user-details.json';
|
5
4
|
import { FormsModule } from '@angular/forms';
|
6
5
|
import { AuthenticateUserComponent } from '../authenticate-user/authenticate-user.component';
|
7
|
-
import { MatDialogModule } from '@angular/material/dialog';
|
6
|
+
import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
7
|
+
import { KEYBOARD_KEYS } from '../../../constants/business.constant';
|
8
|
+
import { HoverDirective } from '../../../directive/hover-element-directive';
|
9
|
+
import BaseSection from '../../../sections/BaseSection';
|
10
|
+
import { DeleteHoverElementComponent } from '../../../components/delete-hover-element/delete-hover-element.component';
|
11
|
+
import { HoverElementsComponent } from '../../../components/hover-elements/hover-elements.component';
|
12
|
+
import { MatBottomSheetModule } from '@angular/material/bottom-sheet';
|
8
13
|
import * as i0 from "@angular/core";
|
9
14
|
import * as i1 from "../../../services/rest.service";
|
10
15
|
import * as i2 from "@angular/material/dialog";
|
11
|
-
import * as i3 from "@angular/
|
12
|
-
import * as i4 from "
|
13
|
-
import * as i5 from "
|
14
|
-
import * as i6 from "
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
) {
|
16
|
+
import * as i3 from "@angular/material/bottom-sheet";
|
17
|
+
import * as i4 from "@angular/router";
|
18
|
+
import * as i5 from "../../../services/storage.service";
|
19
|
+
import * as i6 from "../../../services/events.service";
|
20
|
+
import * as i7 from "@angular/common";
|
21
|
+
import * as i8 from "@angular/forms";
|
22
|
+
export class AddressComponent extends BaseSection {
|
23
|
+
constructor(ngZone, restService, matDialog, matBottomsheet, router, storageService, _eventService, matData, matDialogRef) {
|
24
|
+
super();
|
19
25
|
this.ngZone = ngZone;
|
20
26
|
this.restService = restService;
|
21
27
|
this.matDialog = matDialog;
|
28
|
+
this.matBottomsheet = matBottomsheet;
|
22
29
|
this.router = router;
|
23
30
|
this.storageService = storageService;
|
31
|
+
this._eventService = _eventService;
|
32
|
+
this.matData = matData;
|
33
|
+
this.matDialogRef = matDialogRef;
|
24
34
|
this.addressList = [];
|
35
|
+
this.selectedAddressIdx = 0;
|
36
|
+
this.selectedAddress = new EventEmitter();
|
25
37
|
this.address = {
|
26
38
|
"receiverName": "",
|
27
39
|
"receiverPhone": "",
|
@@ -34,16 +46,18 @@ export class AddressComponent {
|
|
34
46
|
"landmark": "",
|
35
47
|
"zipCode": "",
|
36
48
|
"stateCode": "",
|
37
|
-
"addressType": "",
|
49
|
+
"addressType": "HOME",
|
38
50
|
"geolocation": {
|
39
51
|
"latitude": 0,
|
40
52
|
"longitude": 0
|
41
53
|
}
|
42
54
|
};
|
43
55
|
this.isCart = false;
|
56
|
+
this.editIndex = -1;
|
44
57
|
this.latitute = null;
|
45
58
|
this.longitute = null;
|
46
59
|
this.addNewAddress = false;
|
60
|
+
this.isLoading = false;
|
47
61
|
this.mapCenter = {
|
48
62
|
lat: 0,
|
49
63
|
lng: 0
|
@@ -54,7 +68,6 @@ export class AddressComponent {
|
|
54
68
|
};
|
55
69
|
this.markerOptions = { draggable: true };
|
56
70
|
this.geocoder = new google.maps.Geocoder();
|
57
|
-
this.selectedAddressIdx = -1;
|
58
71
|
this.addessType = [
|
59
72
|
{ key: "HOME", status: false },
|
60
73
|
{ key: "WORK", status: false },
|
@@ -63,15 +76,38 @@ export class AddressComponent {
|
|
63
76
|
}
|
64
77
|
ngOnInit() {
|
65
78
|
this.getCurrentLocation();
|
79
|
+
this.addNewAddress = this.responseData?.length == 0;
|
80
|
+
if (this.matData) {
|
81
|
+
this.responseData = this.matData.addressList;
|
82
|
+
this.data = this.matData?.data;
|
83
|
+
if (this.matData?.address) {
|
84
|
+
this.address = { ...this.matData.address };
|
85
|
+
this.editIndex = this.matData?.editIndex ?? -1;
|
86
|
+
}
|
87
|
+
this.addNewAddress = true;
|
88
|
+
}
|
89
|
+
else {
|
90
|
+
this.addressList = this.responseData;
|
91
|
+
}
|
92
|
+
if (this.addNewAddress && !this.matData) {
|
93
|
+
const userDetails = this.storageService.getUser();
|
94
|
+
this.address = {
|
95
|
+
...this.address,
|
96
|
+
receiverName: userDetails?.contact.name ?? "",
|
97
|
+
receiverEmail: userDetails?.contact.email ?? "",
|
98
|
+
receiverPhone: userDetails?.contact.mobile ?? ""
|
99
|
+
};
|
100
|
+
}
|
66
101
|
}
|
67
102
|
ngOnChanges(changes) {
|
68
|
-
this.addressList = this.responseData;
|
103
|
+
// this.addressList = this.responseData;
|
69
104
|
}
|
70
105
|
checkAddressType(address) {
|
71
106
|
this.addessType.forEach((add) => add.status = (add.key == address.key));
|
72
107
|
this.address.addressType = address.key;
|
73
108
|
}
|
74
109
|
close() {
|
110
|
+
this.matDialogRef.close();
|
75
111
|
}
|
76
112
|
getCurrentLocation() {
|
77
113
|
if (navigator.geolocation) {
|
@@ -129,25 +165,59 @@ export class AddressComponent {
|
|
129
165
|
// this.city = data.long_name;
|
130
166
|
});
|
131
167
|
}
|
168
|
+
addressSelected(index) {
|
169
|
+
this.selectedAddressIdx = index;
|
170
|
+
this.selectedAddress.emit(index);
|
171
|
+
}
|
172
|
+
goToProfile() {
|
173
|
+
if (this.matData) {
|
174
|
+
this.matDialogRef?.close();
|
175
|
+
}
|
176
|
+
else {
|
177
|
+
this.router.navigate(['/profile']);
|
178
|
+
}
|
179
|
+
}
|
132
180
|
updateAddress() {
|
133
181
|
const userDetails = this.storageService.getUser();
|
134
|
-
console.log(userDetails);
|
135
182
|
if (userDetails) {
|
183
|
+
const addressList = userDetails?.addressDetailsList;
|
184
|
+
if (this.matData?.editIndex) {
|
185
|
+
this.addressList.forEach((address, idx) => {
|
186
|
+
if (idx == this.matData.editIndx) {
|
187
|
+
address = this.address;
|
188
|
+
}
|
189
|
+
});
|
190
|
+
}
|
191
|
+
else {
|
192
|
+
addressList.push(this.address);
|
193
|
+
}
|
136
194
|
const payload = {
|
137
195
|
"userId": userDetails.userId,
|
138
|
-
"
|
196
|
+
"businessId": userDetails.businessId,
|
197
|
+
"addressDetailsList": addressList,
|
139
198
|
"contact": userDetails?.contact ?? {},
|
140
199
|
"gender": userDetails?.gender?.length > 0 ? userDetails?.gender : null
|
141
200
|
};
|
201
|
+
this.isLoading = true;
|
142
202
|
this.restService.addUserAddress(payload).subscribe((response) => {
|
203
|
+
this.isLoading = false;
|
143
204
|
this.addNewAddress = false;
|
144
|
-
|
145
|
-
|
205
|
+
if (this.isMobile) {
|
206
|
+
document.body.scrollTop = 0;
|
207
|
+
document.documentElement.scrollTop = 0;
|
208
|
+
}
|
209
|
+
if (userDetails) {
|
210
|
+
userDetails.addressDetailsList.push(this.address);
|
211
|
+
this.storageService.setUser(userDetails);
|
212
|
+
}
|
213
|
+
}, (error) => {
|
214
|
+
this.isLoading = false;
|
146
215
|
});
|
147
216
|
}
|
148
217
|
else {
|
149
|
-
if (window.innerWidth <= 475)
|
150
|
-
this.
|
218
|
+
if (window.innerWidth <= 475) {
|
219
|
+
this.matBottomsheet.open(AuthenticateUserComponent, { data: this.data });
|
220
|
+
}
|
151
221
|
else {
|
152
222
|
this.matDialog.open(AuthenticateUserComponent, {
|
153
223
|
height: '50vh',
|
@@ -157,8 +227,32 @@ export class AddressComponent {
|
|
157
227
|
}
|
158
228
|
}
|
159
229
|
}
|
160
|
-
|
161
|
-
|
230
|
+
validateMobile(event) {
|
231
|
+
if ((!isNaN(Number(event.key)) || event.keyCode == KEYBOARD_KEYS.BACKSPACE || event.keyCode == KEYBOARD_KEYS.TAB) && event.keyCode != KEYBOARD_KEYS.SPACE) {
|
232
|
+
return;
|
233
|
+
}
|
234
|
+
event.preventDefault();
|
235
|
+
}
|
236
|
+
validateName(event) {
|
237
|
+
if ((event.keyCode >= KEYBOARD_KEYS.CHARACTER_A && event.keyCode <= KEYBOARD_KEYS.CHARACTER_Z) || event.keyCode == 16 || event.keyCode == 8 || event.keyCode == 32 || event.keyCode == 46 || event.keyCode == 9) {
|
238
|
+
return;
|
239
|
+
}
|
240
|
+
event.preventDefault();
|
241
|
+
}
|
242
|
+
editSection() {
|
243
|
+
this._eventService.toggleEditorEvent.emit(false);
|
244
|
+
setTimeout(() => {
|
245
|
+
this._eventService.editSection.emit({ data: this.data });
|
246
|
+
}, 100);
|
247
|
+
}
|
248
|
+
get isEmailValid() {
|
249
|
+
return this.address?.receiverEmail?.includes("@") && this.address?.receiverEmail.includes(".com") || (this.address?.receiverEmail?.length == 0);
|
250
|
+
}
|
251
|
+
get isMobile() {
|
252
|
+
return window.innerWidth <= 475;
|
253
|
+
}
|
254
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: AddressComponent, deps: [{ token: i0.NgZone }, { token: i1.RestService }, { token: i2.MatDialog }, { token: i3.MatBottomSheet }, { token: i4.Router }, { token: i5.StorageServiceService }, { token: i6.EventsService }, { token: MAT_DIALOG_DATA, optional: true }, { token: i2.MatDialogRef, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
255
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: AddressComponent, isStandalone: true, selector: "simpo-address", inputs: { responseData: "responseData", data: "data", index: "index", edit: "edit", delete: "delete", isCart: "isCart" }, outputs: { selectedAddress: "selectedAddress" }, providers: [], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<section class=\"address-sec\" (click)=\"editSection()\" simpoHover (hovering)=\"showEditTabs($event)\" >\r\n <div class=\"header\">\r\n <div class=\"new-address-header\">\r\n <mat-icon (click)=\"goToProfile()\" *ngIf=\"!isCart\">keyboard_arrow_left</mat-icon>\r\n <h3>{{isCart ? 'Shipping To' : 'New Address'}}</h3>\r\n </div>\r\n <span class=\"add-address\" *ngIf=\"!addNewAddress\" (click)=\"addNewAddress = true\">+ add address</span>\r\n </div>\r\n <ng-container *ngIf=\"addNewAddress\">\r\n <!-- <p (click)=\"getCurrentLocation()\" class=\"d-flex align-items-center\" style=\"cursor: pointer;\">\r\n <mat-icon>my_location</mat-icon>\r\n <span>Take my current location</span>\r\n </p> -->\r\n <div class=\"forms d-flex flex-wrap\">\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Name</div>\r\n <input type=\"text\" placeholder=\"Enter name\" [(ngModel)]=\"address.receiverName\" (keydown)=\"validateName($event)\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Mobile</div>\r\n <input type=\"text\" placeholder=\"Enter mobile\" [(ngModel)]=\"address.receiverPhone\" (keydown)=\"validateMobile($event)\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Email</div>\r\n <input type=\"text\" placeholder=\"Enter email\" [(ngModel)]=\"address.receiverEmail\">\r\n </div>\r\n <div class=\"form-control-full-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Address</div>\r\n <input type=\"text\" placeholder=\"Enter address\" matGoogleMapsAutocomplete\r\n (onAutocompleteSelected)=\"onAutocompleteSelected($event)\"\r\n (onLocationSelected)=\"onLocationSelected($event)\" [(ngModel)]=\"address.addressLine1\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Locality</div>\r\n <input type=\"text\" placeholder=\"Enter locality\" [(ngModel)]=\"address.localityName\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label\" [style.color]=\"data?.styles?.background?.accentColor\">Landmark</div>\r\n <input type=\"text\" placeholder=\"Enter landmark\" [(ngModel)]=\"address.landmark\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Pincode</div>\r\n <input type=\"text\" placeholder=\"Enter pincode\" [(ngModel)]=\"address.zipCode\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">City</div>\r\n <input type=\"text\" placeholder=\"Enter city\" [(ngModel)]=\"address.cityName\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">State</div>\r\n <input type=\"text\" placeholder=\"Enter state\" [(ngModel)]=\"address.stateName\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Address Type</div>\r\n <div class=\"d-flex\">\r\n <ng-container *ngFor=\"let address of addessType\">\r\n <span class=\"address-type\" (click)=\"checkAddressType(address)\" [ngClass]=\"{'active-address': address.status}\">{{address.key}}</span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"address-list\" *ngIf=\"!addNewAddress\">\r\n <ng-container *ngFor=\"let address of addressList; let idx = index\">\r\n <div class=\"address\" (click)=\"addressSelected(idx)\" [ngClass]=\"{'selected-address': selectedAddressIdx == idx}\">\r\n <div class=\"address-left\">\r\n <div class=\"top\">\r\n <span class=\"fw-bold mr-2\">{{address?.receiverName}}</span>\r\n <span class=\"address-type\">{{address?.addressType}}</span>\r\n </div>\r\n <div class=\"address-det\">{{address.addressLine1}}</div>\r\n <div class=\"phone\">\r\n <span>Phone:</span>\r\n <span class=\"address-phone\">{{address.receiverPhone}}</span>\r\n </div>\r\n </div>\r\n <div class=\"address-right\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"action-btn\" *ngIf=\"addNewAddress\">\r\n <div class=\"error-message\">\r\n <span *ngIf=\"address.receiverPhone?.length != 10 && address.receiverPhone?.length\">*Mobile number is invalid</span>\r\n <span *ngIf=\"!isEmailValid\">*Email is invalid</span>\r\n </div>\r\n <button [disabled]=\"\r\n !address.receiverName || \r\n !address.receiverPhone ||\r\n address.receiverPhone?.length != 10 ||\r\n !isEmailValid || \r\n !address.addressLine1 || \r\n !address.localityName || \r\n !address.zipCode || \r\n !address.cityName ||\r\n !address.stateName || \r\n !address.addressType || isLoading\r\n \" (click)=\"updateAddress()\">{{isLoading ? 'Loading' : 'Update'}}</button>\r\n </div>\r\n</section>\r\n\r\n\r\n<div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></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>", styles: [".address-sec{padding:20px;position:relative}.address-sec .header{display:flex;align-items:center;justify-content:space-between;gap:5px;margin-bottom:20px}.new-address-header{display:flex;align-items:center}.mat-icon{cursor:pointer;margin-right:5px}.action-btn{margin-left:auto;bottom:-20px;position:relative;right:0;display:flex;flex-direction:column;align-items:flex-end}.action-btn button{background-color:#0267c1;color:#fff;padding:10px;width:200px!important;border:none;border-radius:5px}.label:after{content:\"*\"}.active-address{background-color:#0267c1!important;color:#fff!important}.forms{gap:10px;justify-content:space-between}.form-control-group,.form-control-full-group{width:48%}:is(.form-control-group,.form-control-full-group) input{width:100%;padding:10px;border-radius:3px;border:1.5px solid lightgray}.form-control-full-group{width:100%!important}.address-type{width:150px;padding:10px;background-color:#d3d3d35c;color:#000;text-align:center;border-radius:5px;margin:0 5px;cursor:pointer}.address{display:flex;padding:15px;border-radius:5px;box-shadow:0 1px 1px #0000,0 1px 1px #00000030;border:1px solid #d3d3d3b1}.address-list{display:flex;flex-direction:column;gap:10px;height:500px;overflow-y:auto}.address-list .address-left{width:80%}.address-list .address-right{width:20%}.address-list .address-phone{margin-left:10px}.address-list .address-type{background-color:#d3d3d34a;padding:5px 10px;text-align:center;border-radius:5px;margin-left:15px}.address-list .address-det{margin:10px 0}.add-address{color:#0267c1;cursor:pointer;font-weight:600}.address-active{background-color:#0267c1;color:#fff}.selected-address{border:2px solid #0267C1!important}.error-message{color:tomato;display:flex;flex-direction:column;width:100%}@media only screen and (max-width: 475px){.address-list{height:fit-content;max-height:230px}.forms{flex-direction:column}.form-control-group{width:100%}.label{padding-bottom:10px}.address-type-options{position:relative;right:4px}.action-btn{position:relative;bottom:0;top:19px;right:0}.action-btn button{width:100%!important}.address-type{padding:10px 27px}.address-sec{padding:20px 4px}}button:disabled{background-color:#d3d3d3!important}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatBottomSheetModule }, { kind: "component", type: DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }] }); }
|
162
256
|
}
|
163
257
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: AddressComponent, decorators: [{
|
164
258
|
type: Component,
|
@@ -166,15 +260,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
|
|
166
260
|
MatIcon,
|
167
261
|
CommonModule,
|
168
262
|
FormsModule,
|
169
|
-
|
170
|
-
|
171
|
-
|
263
|
+
HoverDirective,
|
264
|
+
MatDialogModule,
|
265
|
+
MatBottomSheetModule,
|
266
|
+
DeleteHoverElementComponent,
|
267
|
+
HoverElementsComponent
|
268
|
+
], providers: [], template: "<section class=\"address-sec\" (click)=\"editSection()\" simpoHover (hovering)=\"showEditTabs($event)\" >\r\n <div class=\"header\">\r\n <div class=\"new-address-header\">\r\n <mat-icon (click)=\"goToProfile()\" *ngIf=\"!isCart\">keyboard_arrow_left</mat-icon>\r\n <h3>{{isCart ? 'Shipping To' : 'New Address'}}</h3>\r\n </div>\r\n <span class=\"add-address\" *ngIf=\"!addNewAddress\" (click)=\"addNewAddress = true\">+ add address</span>\r\n </div>\r\n <ng-container *ngIf=\"addNewAddress\">\r\n <!-- <p (click)=\"getCurrentLocation()\" class=\"d-flex align-items-center\" style=\"cursor: pointer;\">\r\n <mat-icon>my_location</mat-icon>\r\n <span>Take my current location</span>\r\n </p> -->\r\n <div class=\"forms d-flex flex-wrap\">\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Name</div>\r\n <input type=\"text\" placeholder=\"Enter name\" [(ngModel)]=\"address.receiverName\" (keydown)=\"validateName($event)\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Mobile</div>\r\n <input type=\"text\" placeholder=\"Enter mobile\" [(ngModel)]=\"address.receiverPhone\" (keydown)=\"validateMobile($event)\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Email</div>\r\n <input type=\"text\" placeholder=\"Enter email\" [(ngModel)]=\"address.receiverEmail\">\r\n </div>\r\n <div class=\"form-control-full-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Address</div>\r\n <input type=\"text\" placeholder=\"Enter address\" matGoogleMapsAutocomplete\r\n (onAutocompleteSelected)=\"onAutocompleteSelected($event)\"\r\n (onLocationSelected)=\"onLocationSelected($event)\" [(ngModel)]=\"address.addressLine1\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Locality</div>\r\n <input type=\"text\" placeholder=\"Enter locality\" [(ngModel)]=\"address.localityName\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label\" [style.color]=\"data?.styles?.background?.accentColor\">Landmark</div>\r\n <input type=\"text\" placeholder=\"Enter landmark\" [(ngModel)]=\"address.landmark\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Pincode</div>\r\n <input type=\"text\" placeholder=\"Enter pincode\" [(ngModel)]=\"address.zipCode\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">City</div>\r\n <input type=\"text\" placeholder=\"Enter city\" [(ngModel)]=\"address.cityName\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">State</div>\r\n <input type=\"text\" placeholder=\"Enter state\" [(ngModel)]=\"address.stateName\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Address Type</div>\r\n <div class=\"d-flex\">\r\n <ng-container *ngFor=\"let address of addessType\">\r\n <span class=\"address-type\" (click)=\"checkAddressType(address)\" [ngClass]=\"{'active-address': address.status}\">{{address.key}}</span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"address-list\" *ngIf=\"!addNewAddress\">\r\n <ng-container *ngFor=\"let address of addressList; let idx = index\">\r\n <div class=\"address\" (click)=\"addressSelected(idx)\" [ngClass]=\"{'selected-address': selectedAddressIdx == idx}\">\r\n <div class=\"address-left\">\r\n <div class=\"top\">\r\n <span class=\"fw-bold mr-2\">{{address?.receiverName}}</span>\r\n <span class=\"address-type\">{{address?.addressType}}</span>\r\n </div>\r\n <div class=\"address-det\">{{address.addressLine1}}</div>\r\n <div class=\"phone\">\r\n <span>Phone:</span>\r\n <span class=\"address-phone\">{{address.receiverPhone}}</span>\r\n </div>\r\n </div>\r\n <div class=\"address-right\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"action-btn\" *ngIf=\"addNewAddress\">\r\n <div class=\"error-message\">\r\n <span *ngIf=\"address.receiverPhone?.length != 10 && address.receiverPhone?.length\">*Mobile number is invalid</span>\r\n <span *ngIf=\"!isEmailValid\">*Email is invalid</span>\r\n </div>\r\n <button [disabled]=\"\r\n !address.receiverName || \r\n !address.receiverPhone ||\r\n address.receiverPhone?.length != 10 ||\r\n !isEmailValid || \r\n !address.addressLine1 || \r\n !address.localityName || \r\n !address.zipCode || \r\n !address.cityName ||\r\n !address.stateName || \r\n !address.addressType || isLoading\r\n \" (click)=\"updateAddress()\">{{isLoading ? 'Loading' : 'Update'}}</button>\r\n </div>\r\n</section>\r\n\r\n\r\n<div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></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>", styles: [".address-sec{padding:20px;position:relative}.address-sec .header{display:flex;align-items:center;justify-content:space-between;gap:5px;margin-bottom:20px}.new-address-header{display:flex;align-items:center}.mat-icon{cursor:pointer;margin-right:5px}.action-btn{margin-left:auto;bottom:-20px;position:relative;right:0;display:flex;flex-direction:column;align-items:flex-end}.action-btn button{background-color:#0267c1;color:#fff;padding:10px;width:200px!important;border:none;border-radius:5px}.label:after{content:\"*\"}.active-address{background-color:#0267c1!important;color:#fff!important}.forms{gap:10px;justify-content:space-between}.form-control-group,.form-control-full-group{width:48%}:is(.form-control-group,.form-control-full-group) input{width:100%;padding:10px;border-radius:3px;border:1.5px solid lightgray}.form-control-full-group{width:100%!important}.address-type{width:150px;padding:10px;background-color:#d3d3d35c;color:#000;text-align:center;border-radius:5px;margin:0 5px;cursor:pointer}.address{display:flex;padding:15px;border-radius:5px;box-shadow:0 1px 1px #0000,0 1px 1px #00000030;border:1px solid #d3d3d3b1}.address-list{display:flex;flex-direction:column;gap:10px;height:500px;overflow-y:auto}.address-list .address-left{width:80%}.address-list .address-right{width:20%}.address-list .address-phone{margin-left:10px}.address-list .address-type{background-color:#d3d3d34a;padding:5px 10px;text-align:center;border-radius:5px;margin-left:15px}.address-list .address-det{margin:10px 0}.add-address{color:#0267c1;cursor:pointer;font-weight:600}.address-active{background-color:#0267c1;color:#fff}.selected-address{border:2px solid #0267C1!important}.error-message{color:tomato;display:flex;flex-direction:column;width:100%}@media only screen and (max-width: 475px){.address-list{height:fit-content;max-height:230px}.forms{flex-direction:column}.form-control-group{width:100%}.label{padding-bottom:10px}.address-type-options{position:relative;right:4px}.action-btn{position:relative;bottom:0;top:19px;right:0}.action-btn button{width:100%!important}.address-type{padding:10px 27px}.address-sec{padding:20px 4px}}button:disabled{background-color:#d3d3d3!important}\n"] }]
|
269
|
+
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.RestService }, { type: i2.MatDialog }, { type: i3.MatBottomSheet }, { type: i4.Router }, { type: i5.StorageServiceService }, { type: i6.EventsService }, { type: undefined, decorators: [{
|
270
|
+
type: Optional
|
271
|
+
}, {
|
272
|
+
type: Inject,
|
273
|
+
args: [MAT_DIALOG_DATA]
|
274
|
+
}] }, { type: i2.MatDialogRef, decorators: [{
|
275
|
+
type: Optional
|
276
|
+
}] }], propDecorators: { responseData: [{
|
172
277
|
type: Input
|
173
278
|
}], data: [{
|
174
279
|
type: Input
|
175
|
-
}],
|
280
|
+
}], index: [{
|
176
281
|
type: Input
|
177
|
-
}],
|
282
|
+
}], edit: [{
|
283
|
+
type: Input
|
284
|
+
}], delete: [{
|
285
|
+
type: Input
|
286
|
+
}], selectedAddress: [{
|
287
|
+
type: Output
|
288
|
+
}], isCart: [{
|
178
289
|
type: Input
|
179
290
|
}] } });
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2Vjb21tZXJjZS9zZWN0aW9ucy9hZGRyZXNzL2FkZHJlc3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYWRkcmVzcy9hZGRyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWtCLEtBQUssRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLFdBQVcsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDN0YsT0FBTyxFQUFhLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7OztBQW1CdEUsTUFBTSxPQUFPLGdCQUFnQjtJQUszQixZQUNtQixNQUFjLEVBQ2QsV0FBd0IsRUFDeEIsU0FBb0IsRUFDcEIsTUFBYyxFQUNkLGNBQXFDO0lBQ3RELGdFQUFnRTs7UUFML0MsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUlqRCxnQkFBVyxHQUFVLEVBQUUsQ0FBQztRQUN4QixZQUFPLEdBQVE7WUFDcEIsY0FBYyxFQUFFLEVBQUU7WUFDbEIs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LE9BQWdCLENBQUMsQ0FBQztZQUNsRSxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLEdBQUc7Z0JBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztpQkFDN0IsQ0FBQztnQkFDSixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRTtvQkFDN0MsTUFBTSxFQUFFLE1BQU07b0JBQ2QsS0FBSyxFQUFFLE1BQU07b0JBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2lCQUNoQixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7OEdBOUpVLGdCQUFnQjtrR0FBaEIsZ0JBQWdCLGtOQzNCN0Isd2xKQWlGVSw4Z0REOUROLE9BQU8sMElBQ1AsWUFBWSw2VkFDWixXQUFXLDhtQkFDWCxlQUFlOzsyRkFLTixnQkFBZ0I7a0JBWjVCLFNBQVM7K0JBQ0UsZUFBZSxjQUNiLElBQUksV0FDUDt3QkFDUCxPQUFPO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxlQUFlO3FCQUNoQjtzTEFNUSxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkErQkcsTUFBTTtzQkFBZCxLQUFLO2dCQW9CRyxrQkFBa0I7c0JBQTFCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgTmdab25lLCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci1tYXRlcmlhbC1leHRlbnNpb25zL2dvb2dsZS1tYXBzLWF1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCBVc2VyRGV0YWlscyBmcm9tICcuLy4uLy4uL2pzb24vdXNlci1kZXRhaWxzLmpzb24nO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGVVc2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vYXV0aGVudGljYXRlLXVzZXIvYXV0aGVudGljYXRlLXVzZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vLi4vc3R5bGVzL3VzZXIubW9kYWwnO1xyXG5cclxuZGVjbGFyZSB2YXIgZ29vZ2xlOiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLWFkZHJlc3MnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgTWF0SWNvbixcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0RGlhbG9nTW9kdWxlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRkcmVzcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2FkZHJlc3MuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZHJlc3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIHJlc3BvbnNlRGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIGRhdGE6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1hdERpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlU2VydmljZVxyXG4gICAgLy8gcHJpdmF0ZSByZWFkb25seSBtYXREaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxBZGRyZXNzQ29tcG9uZW50PlxyXG4gICkge31cclxuXHJcbiAgcHVibGljIGFkZHJlc3NMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHB1YmxpYyBhZGRyZXNzOiBhbnkgPSB7XHJcbiAgICBcInJlY2VpdmVyTmFtZVwiOiBcIlwiLFxyXG4gICAgXCJyZWNlaXZlclBob25lXCI6IFwiXCIsXHJcbiAgICBcInJlY2VpdmVyRW1haWxcIjogXCJcIixcclxuICAgIFwiY291bnRyeU5hbWVcIjogXCJcIixcclxuICAgIFwic3RhdGVOYW1lXCI6IFwiXCIsXHJcbiAgICBcImNpdHlOYW1lXCI6IFwiXCIsXHJcbiAgICBcImxvY2FsaXR5TmFtZVwiOiBcIlwiLFxyXG4gICAgXCJhZGRyZXNzTGluZTFcIjogXCJcIixcclxuICAgIFwibGFuZG1hcmtcIjogXCJcIixcclxuICAgIFwiemlwQ29kZVwiOiBcIlwiLFxyXG4gICAgXCJzdGF0ZUNvZGVcIjogXCJcIixcclxuICAgIFwiYWRkcmVzc1R5cGVcIjogXCJcIixcclxuICAgIFwiZ2VvbG9jYXRpb25cIjoge1xyXG4gICAgICBcImxhdGl0dWRlXCI6IDAsXHJcbiAgICAgIFwibG9uZ2l0dWRlXCI6IDBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGlzQ2FydDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGxhdGl0dXRlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGxvbmdpdHV0ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHVibGljIGFkZE5ld0FkZHJlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIG1hcENlbnRlcjogZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbCA9IHtcclxuICAgIGxhdDogMCxcclxuICAgIGxuZzogMFxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBtYXJrZXJQb3NpdGlvbjogZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbCA9IHtcclxuICAgIGxhdDogMCxcclxuICAgIGxuZzogMFxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBtYXJrZXJPcHRpb25zOiBnb29nbGUubWFwcy5NYXJrZXJPcHRpb25zID0geyBkcmFnZ2FibGU6IHRydWUgfTtcclxuXHJcbiAgcHJpdmF0ZSBnZW9jb2RlciA9IG5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpO1xyXG5cclxuICBASW5wdXQoKSBzZWxlY3RlZEFkZHJlc3NJZHg6IG51bWJlciA9IC0xO1xyXG4gIHB1YmxpYyBhZGRlc3NUeXBlOiB7IGtleTogc3RyaW5nLCBzdGF0dXM6IGJvb2xlYW4gfVtdID0gW1xyXG4gICAgeyBrZXk6IFwiSE9NRVwiLCBzdGF0dXM6IGZhbHNlIH0sXHJcbiAgICB7IGtleTogXCJXT1JLXCIsIHN0YXR1czogZmFsc2UgfSxcclxuICAgIHsga2V5OiBcIk9USEVSXCIsIHN0YXR1czogZmFsc2UgfVxyXG4gIF07XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICB0aGlzLmdldEN1cnJlbnRMb2NhdGlvbigpO1xyXG4gIH1cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuYWRkcmVzc0xpc3QgPSB0aGlzLnJlc3BvbnNlRGF0YTtcclxuICB9XHJcblxyXG4gIGNoZWNrQWRkcmVzc1R5cGUoYWRkcmVzczogeyBrZXk6IHN0cmluZywgc3RhdHVzOiBib29sZWFuIH0pIHtcclxuICAgIHRoaXMuYWRkZXNzVHlwZS5mb3JFYWNoKChhZGQpPT4gYWRkLnN0YXR1cyA9IChhZGQua2V5ID09IGFkZHJlc3Mua2V5KSk7XHJcbiAgICB0aGlzLmFkZHJlc3MuYWRkcmVzc1R5cGUgPSBhZGRyZXNzLmtleTtcclxuICB9XHJcbiAgY2xvc2UoKSB7XHJcblxyXG4gIH1cclxuICBnZXRDdXJyZW50TG9jYXRpb24oKSB7XHJcbiAgICBpZiAobmF2aWdhdG9yLmdlb2xvY2F0aW9uKSB7XHJcbiAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKHZhbHVlcykgPT4ge1xyXG4gICAgICAgIHRoaXMubGF0aXR1dGUgPSB2YWx1ZXMuY29vcmRzLmxhdGl0dWRlO1xyXG4gICAgICAgIHRoaXMubG9uZ2l0dXRlID0gdmFsdWVzLmNvb3Jkcy5sb25naXR1ZGU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRBZGRyZXNzKCkge1xyXG4gICAgdGhpcy5nZW9jb2Rlci5nZW9jb2RlKHsgbG9jYXRpb246IHRoaXMubWFya2VyUG9zaXRpb24gfSwgKHJlc3VsdHM6IGFueSwgc3RhdHVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHN0YXR1cyA9PT0gJ09LJyAmJiByZXN1bHRzWzBdKSB7XHJcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgIC8vIHRoaXMuYWRkcmVzcyA9IHJlc3VsdHNbMF0uZm9ybWF0dGVkX2FkZHJlc3M7XHJcbiAgICAgICAgICByZXN1bHRzWzBdLmFkZHJlc3NfY29tcG9uZW50cy5mb3JFYWNoKChjb21wb25lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0eXBlcyA9IGNvbXBvbmVudC50eXBlcztcclxuICAgICAgICAgICAgaWYgKHR5cGVzLmluY2x1ZGVzKFwibG9jYWxpdHlcIikpIHtcclxuICAgICAgICAgICAgICAvLyB0aGlzLmNpdHkgPSBjb21wb25lbnQubG9uZ19uYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlcy5pbmNsdWRlcyhcImFkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMVwiKSkge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuc3RhdGUgPSBjb21wb25lbnQubG9uZ19uYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlcy5pbmNsdWRlcyhcImNvdW50cnlcIikpIHtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IGNvbXBvbmVudC5sb25nX25hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHR5cGVzLmluY2x1ZGVzKFwicG9zdGFsX2NvZGVcIikpIHtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnppcCA9IGNvbXBvbmVudC5sb25nX25hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgb25Mb2NhdGlvblNlbGVjdGVkKGxvY2F0aW9uOiBhbnkpIHtcclxuICAgIFxyXG4gICAgdGhpcy5sYXRpdHV0ZSA9IGxvY2F0aW9uLmxhdGl0dWRlO1xyXG4gICAgdGhpcy5sb25naXR1dGUgPSBsb2NhdGlvbi5sb25naXR1ZGU7XHJcbiAgICAgIC8vIHRoaXMuc2V0UG9zaXRpb24oKTsgIC8vIFVwZGF0ZSBtYXAgcG9zaXRpb25cclxuICAgIC8vIHRoaXMudXBkYXRlQWRkcmVzc0ZpZWxkcygpO1xyXG4gIH1cclxuICBvbkF1dG9jb21wbGV0ZVNlbGVjdGVkKHJlc3VsdDogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gICAgLy8gdGhpcy5zZWxlY3RlZENvdW50cnkgPSBudWxsO1xyXG4gICAgLy8gdGhpcy56aXAgPSBcIlwiO1xyXG4gICAgLy8gdGhpcy5zdGF0ZSA9IFwiXCI7XHJcbiAgICAvLyB0aGlzLmNpdHkgPSBcIlwiO1xyXG4gICAgLy8gdGhpcy5hZGRyZXNzID0gcmVzdWx0Py5mb3JtYXR0ZWRfYWRkcmVzcztcclxuICAgIHJlc3VsdD8uYWRkcmVzc19jb21wb25lbnRzLmZvckVhY2goKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YT8udHlwZXMuaW5jbHVkZXMoXCJjb3VudHJ5XCIpKXt9XHJcbiAgICAgICAgLy8gdGhpcy5zZWxlY3RlZENvdW50cnkgPSBkYXRhLmxvbmdfbmFtZTtcclxuICAgICAgZWxzZSBpZiAoZGF0YT8udHlwZXMuaW5jbHVkZXMoXCJwb3N0YWxfY29kZVwiKSl7fVxyXG4gICAgICAgIC8vIHRoaXMuemlwID0gZGF0YS5sb25nX25hbWU7XHJcbiAgICAgIGVsc2UgaWYgKGRhdGE/LnR5cGVzLmluY2x1ZGVzKFwiYWRtaW5pc3RyYXRpdmVfYXJlYV9sZXZlbF8xXCIpKXt9XHJcbiAgICAgICAgLy8gdGhpcy5zdGF0ZSA9IGRhdGEubG9uZ19uYW1lO1xyXG4gICAgICBlbHNlIGlmIChkYXRhPy50eXBlcy5pbmNsdWRlcyhcImxvY2FsaXR5XCIpKXt9XHJcbiAgICAgICAgLy8gdGhpcy5jaXR5ID0gZGF0YS5sb25nX25hbWU7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgdXBkYXRlQWRkcmVzcygpIHtcclxuICAgIGNvbnN0IHVzZXJEZXRhaWxzID0gKHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VXNlcigpIGFzIFVzZXIpO1xyXG4gICAgY29uc29sZS5sb2codXNlckRldGFpbHMpO1xyXG4gICAgaWYgKHVzZXJEZXRhaWxzKSB7XHJcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgXCJ1c2VySWRcIjogdXNlckRldGFpbHMudXNlcklkLFxyXG4gICAgICAgIFwiYWRkcmVzc0RldGFpbHNMaXN0XCI6IFsuLi4odXNlckRldGFpbHM/LmFkZHJlc3NEZXRhaWxzTGlzdCA/PyBbXSksIHRoaXMuYWRkcmVzc10sXHJcbiAgICAgICAgXCJjb250YWN0XCI6IHVzZXJEZXRhaWxzPy5jb250YWN0ID8/IHt9LFxyXG4gICAgICAgIFwiZ2VuZGVyXCI6IHVzZXJEZXRhaWxzPy5nZW5kZXI/Lmxlbmd0aCA+IDAgPyB1c2VyRGV0YWlscz8uZ2VuZGVyICA6ICBudWxsXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZXN0U2VydmljZS5hZGRVc2VyQWRkcmVzcyhwYXlsb2FkKS5zdWJzY3JpYmUoKHJlc3BvbnNlKT0+IHtcclxuICAgICAgICB0aGlzLmFkZE5ld0FkZHJlc3MgPSBmYWxzZTtcclxuICAgICAgICBVc2VyRGV0YWlscy51c2VyID0gdXNlckRldGFpbHMgYXMgbmV2ZXI7XHJcbiAgICAgICAgVXNlckRldGFpbHMudXNlci5hZGRyZXNzRGV0YWlsc0xpc3QucHVzaCh0aGlzLmFkZHJlc3MgYXMgbmV2ZXIpO1xyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NSlcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hdXRoJ10pO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLm1hdERpYWxvZy5vcGVuKEF1dGhlbnRpY2F0ZVVzZXJDb21wb25lbnQsIHtcclxuICAgICAgICAgIGhlaWdodDogJzUwdmgnLFxyXG4gICAgICAgICAgd2lkdGg6ICczNXZ3JyxcclxuICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGNsYXNzPVwiYWRkcmVzcy1zZWNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cclxuICAgICAgICA8aDM+e3tpc0NhcnQgPyAnU2hpcHBpbmcgVG8nIDogJ05ldyBBZGRyZXNzJ319PC9oMz5cclxuICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cImNsb3NlKClcIiAqbmdJZj1cIiFpc0NhcnRcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGQtYWRkcmVzc1wiICpuZ0lmPVwiYWRkcmVzc0xpc3QubGVuZ3RoICYmICFhZGROZXdBZGRyZXNzXCIgKGNsaWNrKT1cImFkZE5ld0FkZHJlc3MgPSB0cnVlXCI+KyBhZGQgYWRkcmVzczwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFhZGRyZXNzTGlzdD8ubGVuZ3RoIHx8IGFkZE5ld0FkZHJlc3NcIj5cclxuICAgICAgICA8cCAoY2xpY2spPVwiZ2V0Q3VycmVudExvY2F0aW9uKClcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPm15X2xvY2F0aW9uPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPHNwYW4+dGFrZSBteSBjdXJyZW50IGxvY2F0aW9uPC9zcGFuPlxyXG4gICAgICAgIDwvcD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybXMgZC1mbGV4IGZsZXgtd3JhcFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj5OYW1lPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIG5hbWVcIiBbKG5nTW9kZWwpXT1cImFkZHJlc3MucmVjZWl2ZXJOYW1lXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj5Nb2JpbGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgbW9iaWxlXCIgWyhuZ01vZGVsKV09XCJhZGRyZXNzLnJlY2VpdmVyUGhvbmVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPkVtYWlsPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGVtYWlsXCIgWyhuZ01vZGVsKV09XCJhZGRyZXNzLnJlY2VpdmVyRW1haWxcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZnVsbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+QWRkcmVzczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBhZGRyZXNzXCIgbWF0R29vZ2xlTWFwc0F1dG9jb21wbGV0ZVxyXG4gICAgICAgICAgICAgICAgICAgIChvbkF1dG9jb21wbGV0ZVNlbGVjdGVkKT1cIm9uQXV0b2NvbXBsZXRlU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uTG9jYXRpb25TZWxlY3RlZCk9XCJvbkxvY2F0aW9uU2VsZWN0ZWQoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwiYWRkcmVzcy5hZGRyZXNzTGluZTFcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPkxvY2FsaXR5PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGxvY2FsaXR5XCIgWyhuZ01vZGVsKV09XCJhZGRyZXNzLmxvY2FsaXR5TmFtZVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+TGFuZG1hcms8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgbGFuZG1hcmtcIiBbKG5nTW9kZWwpXT1cImFkZHJlc3MubGFuZG1hcmtcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPlBpbmNvZGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgcGluY29kZVwiIFsobmdNb2RlbCldPVwiYWRkcmVzcy56aXBDb2RlXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj5DaXR5PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGNpdHlcIiBbKG5nTW9kZWwpXT1cImFkZHJlc3MuY2l0eU5hbWVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPlN0YXRlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHN0YXRlXCIgWyhuZ01vZGVsKV09XCJhZGRyZXNzLnN0YXRlTmFtZVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+QWRkcmVzcyBUeXBlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWRkcmVzcyBvZiBhZGRlc3NUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRkcmVzcy10eXBlXCIgKGNsaWNrKT1cImNoZWNrQWRkcmVzc1R5cGUoYWRkcmVzcylcIiBbbmdDbGFzc109XCJ7J2FjdGl2ZS1hZGRyZXNzJzogYWRkcmVzcy5zdGF0dXN9XCI+e3thZGRyZXNzLmtleX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWRkcmVzcy1saXN0XCIgKm5nSWY9XCJhZGRyZXNzTGlzdC5sZW5ndGggJiYgIWFkZE5ld0FkZHJlc3NcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhZGRyZXNzIG9mIGFkZHJlc3NMaXN0OyBsZXQgaWR4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZHJlc3NcIiAoY2xpY2spPVwic2VsZWN0ZWRBZGRyZXNzSWR4ID0gaWR4XCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZC1hZGRyZXNzJzogc2VsZWN0ZWRBZGRyZXNzSWR4ID09IGlkeH1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRyZXNzLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctYm9sZCBtci0yXCI+e3thZGRyZXNzPy5yZWNlaXZlck5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGRyZXNzLXR5cGVcIj57e2FkZHJlc3M/LmFkZHJlc3NUeXBlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZHJlc3MtZGV0XCI+e3thZGRyZXNzLmFkZHJlc3NMaW5lMX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBob25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlBob25lOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGRyZXNzLXBob25lXCI+e3thZGRyZXNzLnJlY2VpdmVyUGhvbmV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZHJlc3MtcmlnaHRcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnRuXCIgKm5nSWY9XCIhYWRkcmVzc0xpc3QubGVuZ3RoIHx8IGFkZE5ld0FkZHJlc3NcIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ1cGRhdGVBZGRyZXNzKClcIj5VcGRhdGU8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L3NlY3Rpb24+Il19
|
291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2Vjb21tZXJjZS9zZWN0aW9ucy9hZGRyZXNzL2FkZHJlc3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYWRkcmVzcy9hZGRyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWtCLEtBQUssRUFBNEIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25JLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxlQUFlLEVBQWEsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBS3JHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFNUUsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDdEgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFFckcsT0FBTyxFQUFrQixvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7O0FBdUJ0RixNQUFNLE9BQU8sZ0JBQWlCLFNB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ZCxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEosQ0FBQztJQUNELElBQUksUUFBUTtRQUNWLE9BQU8sTUFBTSxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUM7SUFDbEMsQ0FBQzs4R0E5UFUsZ0JBQWdCLGtOQW1CTCxlQUFlO2tHQW5CMUIsZ0JBQWdCLHVPQU5oQixFQUVWLHNFQ3JDSCxxOE1BMEdNLHFzRURoRkYsT0FBTywwSUFDUCxZQUFZLDZWQUNaLFdBQVcsK21CQUNYLGNBQWMsK0VBQ2QsZUFBZSw4QkFDZixvQkFBb0IsK0JBQ3BCLDJCQUEyQixxSEFDM0Isc0JBQXNCOzsyRkFRYixnQkFBZ0I7a0JBbkI1QixTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1A7d0JBQ1AsT0FBTzt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLG9CQUFvQjt3QkFDcEIsMkJBQTJCO3dCQUMzQixzQkFBc0I7cUJBQ3ZCLGFBQ1UsRUFFVjs7MEJBdUJFLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZUFBZTs7MEJBQ2xDLFFBQVE7eUNBbEJGLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUdJLGVBQWU7c0JBQXhCLE1BQU07Z0JBbUNFLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBOZ1pvbmUsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE9wdGlvbmFsLCBJbmplY3QsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQXV0aGVudGljYXRlVXNlckNvbXBvbmVudCB9IGZyb20gJy4uL2F1dGhlbnRpY2F0ZS11c2VyL2F1dGhlbnRpY2F0ZS11c2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nLCBNYXREaWFsb2dNb2R1bGUsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEFERFJFU1NfVFlQRSwgQWRkcmVzc0RldGFpbHMsIFVzZXIgfSBmcm9tICcuLi8uLi9zdHlsZXMvdXNlci5tb2RhbCc7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEtFWUJPQVJEX0tFWVMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYnVzaW5lc3MuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXItbWF0ZXJpYWwtZXh0ZW5zaW9ucy9nb29nbGUtbWFwcy1hdXRvY29tcGxldGUnO1xyXG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vLi4vLi4vc2VjdGlvbnMvQmFzZVNlY3Rpb24nO1xyXG5pbXBvcnQgeyBEZWxldGVIb3ZlckVsZW1lbnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2RlbGV0ZS1ob3Zlci1lbGVtZW50L2RlbGV0ZS1ob3Zlci1lbGVtZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEhvdmVyRWxlbWVudHNDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2hvdmVyLWVsZW1lbnRzL2hvdmVyLWVsZW1lbnRzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFkZHJlc3MgfSBmcm9tICcuLi9jYXJ0L2NhcnQubW9kYWwnO1xyXG5pbXBvcnQgeyBNYXRCb3R0b21TaGVldCwgTWF0Qm90dG9tU2hlZXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9ib3R0b20tc2hlZXQnO1xyXG5cclxuZGVjbGFyZSB2YXIgZ29vZ2xlOiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLWFkZHJlc3MnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgTWF0SWNvbixcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgSG92ZXJEaXJlY3RpdmUsXHJcbiAgICBNYXREaWFsb2dNb2R1bGUsXHJcbiAgICBNYXRCb3R0b21TaGVldE1vZHVsZSxcclxuICAgIERlbGV0ZUhvdmVyRWxlbWVudENvbXBvbmVudCxcclxuICAgIEhvdmVyRWxlbWVudHNDb21wb25lbnRcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG5cclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGRyZXNzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYWRkcmVzcy5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWRkcmVzc0NvbXBvbmVudCBleHRlbmRzIEJhc2VTZWN0aW9uIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG5cclxuICBASW5wdXQoKSByZXNwb25zZURhdGE6IGFueTtcclxuICBASW5wdXQoKSBkYXRhOiBhbnk7IFxyXG4gIEBJbnB1dCgpIGluZGV4PzogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRlbGV0ZT86IGJvb2xlYW47XHJcbiAgcHVibGljIGFkZHJlc3NMaXN0OiBhbnkgPSBbXTtcclxuICBzZWxlY3RlZEFkZHJlc3NJZHg6IG51bWJlciA9IDA7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkQWRkcmVzczogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1hdERpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBtYXRCb3R0b21zaGVldDogTWF0Qm90dG9tU2hlZXQsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBtYXREYXRhOiBhbnksXHJcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgbWF0RGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8QWRkcmVzc0NvbXBvbmVudD5cclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkcmVzczogQWRkcmVzc0RldGFpbHMgPSB7XHJcbiAgICBcInJlY2VpdmVyTmFtZVwiOiBcIlwiLFxyXG4gICAgXCJyZWNlaXZlclBob25lXCI6IFwiXCIsXHJcbiAgICBcInJlY2VpdmVyRW1haWxcIjogXCJcIixcclxuICAgIFwiY291bnRyeU5hbWVcIjogXCJcIixcclxuICAgIFwic3RhdGVOYW1lXCI6IFwiXCIsXHJcbiAgICBcImNpdHlOYW1lXCI6IFwiXCIsXHJcbiAgICBcImxvY2FsaXR5TmFtZVwiOiBcIlwiLFxyXG4gICAgXCJhZGRyZXNzTGluZTFcIjogXCJcIixcclxuICAgIFwibGFuZG1hcmtcIjogXCJcIixcclxuICAgIFwiemlwQ29kZVwiOiBcIlwiLFxyXG4gICAgXCJzdGF0ZUNvZGVcIjogXCJcIixcclxuICAgIFwiYWRkcmVzc1R5cGVcIjogXCJIT01FXCIsXHJcbiAgICBcImdlb2xvY2F0aW9uXCI6IHtcclxuICAgICAgXCJsYXRpdHVkZVwiOiAwLFxyXG4gICAgICBcImxvbmdpdHVkZVwiOiAwXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBpc0NhcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBlZGl0SW5kZXg6IG51bWJlciA9IC0xO1xyXG4gIHByaXZhdGUgbGF0aXR1dGU6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9uZ2l0dXRlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgYWRkTmV3QWRkcmVzczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgbWFwQ2VudGVyOiBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsID0ge1xyXG4gICAgbGF0OiAwLFxyXG4gICAgbG5nOiAwXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIG1hcmtlclBvc2l0aW9uOiBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsID0ge1xyXG4gICAgbGF0OiAwLFxyXG4gICAgbG5nOiAwXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIG1hcmtlck9wdGlvbnM6IGdvb2dsZS5tYXBzLk1hcmtlck9wdGlvbnMgPSB7IGRyYWdnYWJsZTogdHJ1ZSB9O1xyXG5cclxuICBwcml2YXRlIGdlb2NvZGVyID0gbmV3IGdvb2dsZS5tYXBzLkdlb2NvZGVyKCk7XHJcblxyXG4gIHB1YmxpYyBhZGRlc3NUeXBlOiB7IGtleTogc3RyaW5nLCBzdGF0dXM6IGJvb2xlYW4gfVtdID0gW1xyXG4gICAgeyBrZXk6IFwiSE9NRVwiLCBzdGF0dXM6IGZhbHNlIH0sXHJcbiAgICB7IGtleTogXCJXT1JLXCIsIHN0YXR1czogZmFsc2UgfSxcclxuICAgIHsga2V5OiBcIk9USEVSXCIsIHN0YXR1czogZmFsc2UgfVxyXG4gIF07XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRDdXJyZW50TG9jYXRpb24oKTtcclxuICAgIFxyXG4gICAgdGhpcy5hZGROZXdBZGRyZXNzID0gdGhpcy5yZXNwb25zZURhdGE/Lmxlbmd0aCA9PSAwO1xyXG4gICAgaWYgKHRoaXMubWF0RGF0YSkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNlRGF0YSA9IHRoaXMubWF0RGF0YS5hZGRyZXNzTGlzdDtcclxuICAgICAgdGhpcy5kYXRhID0gdGhpcy5tYXREYXRhPy5kYXRhO1xyXG4gICAgICBpZiAodGhpcy5tYXREYXRhPy5hZGRyZXNzKSB7XHJcbiAgICAgICAgdGhpcy5hZGRyZXNzID0gey4uLnRoaXMubWF0RGF0YS5hZGRyZXNzfTtcclxuICAgICAgICB0aGlzLmVkaXRJbmRleCA9IHRoaXMubWF0RGF0YT8uZWRpdEluZGV4ID8/IC0xO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWRkTmV3QWRkcmVzcyA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFkZHJlc3NMaXN0ID0gdGhpcy5yZXNwb25zZURhdGE7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hZGROZXdBZGRyZXNzICYmICF0aGlzLm1hdERhdGEpIHtcclxuICAgICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFVzZXIoKTtcclxuICAgICAgdGhpcy5hZGRyZXNzID0geyBcclxuICAgICAgICAuLi50aGlzLmFkZHJlc3MsXHJcbiAgICAgICAgcmVjZWl2ZXJOYW1lOiB1c2VyRGV0YWlscz8uY29udGFjdC5uYW1lID8/IFwiXCIsXHJcbiAgICAgICAgcmVjZWl2ZXJFbWFpbDogdXNlckRldGFpbHM/LmNvbnRhY3QuZW1haWwgPz8gXCJcIixcclxuICAgICAgICByZWNlaXZlclBob25lOiB1c2VyRGV0YWlscz8uY29udGFjdC5tb2JpbGUgPz8gXCJcIlxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIC8vIHRoaXMuYWRkcmVzc0xpc3QgPSB0aGlzLnJlc3BvbnNlRGF0YTtcclxuICB9XHJcblxyXG4gIGNoZWNrQWRkcmVzc1R5cGUoYWRkcmVzczogeyBrZXk6IHN0cmluZywgc3RhdHVzOiBib29sZWFuIH0pIHtcclxuICAgIHRoaXMuYWRkZXNzVHlwZS5mb3JFYWNoKChhZGQpPT4gYWRkLnN0YXR1cyA9IChhZGQua2V5ID09IGFkZHJlc3Mua2V5KSk7XHJcbiAgICB0aGlzLmFkZHJlc3MuYWRkcmVzc1R5cGUgPSBhZGRyZXNzLmtleSBhcyBBRERSRVNTX1RZUEU7XHJcbiAgfVxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5tYXREaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcbiAgZ2V0Q3VycmVudExvY2F0aW9uKCkge1xyXG4gICAgXHJcbiAgICBpZiAobmF2aWdhdG9yLmdlb2xvY2F0aW9uKSB7XHJcbiAgICAgIFxyXG4gICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKCh2YWx1ZXMpID0+IHtcclxuICAgICAgICB0aGlzLmxhdGl0dXRlID0gdmFsdWVzLmNvb3Jkcy5sYXRpdHVkZTtcclxuICAgICAgICB0aGlzLmxvbmdpdHV0ZSA9IHZhbHVlcy5jb29yZHMubG9uZ2l0dWRlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0QWRkcmVzcygpIHtcclxuICAgIHRoaXMuZ2VvY29kZXIuZ2VvY29kZSh7IGxvY2F0aW9uOiB0aGlzLm1hcmtlclBvc2l0aW9uIH0sIChyZXN1bHRzOiBhbnksIHN0YXR1czogYW55KSA9PiB7XHJcbiAgICAgIGlmIChzdGF0dXMgPT09ICdPSycgJiYgcmVzdWx0c1swXSkge1xyXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAvLyB0aGlzLmFkZHJlc3MgPSByZXN1bHRzWzBdLmZvcm1hdHRlZF9hZGRyZXNzO1xyXG4gICAgICAgICAgcmVzdWx0c1swXS5hZGRyZXNzX2NvbXBvbmVudHMuZm9yRWFjaCgoY29tcG9uZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBjb21wb25lbnQudHlwZXM7XHJcbiAgICAgICAgICAgIGlmICh0eXBlcy5pbmNsdWRlcyhcImxvY2FsaXR5XCIpKSB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5jaXR5ID0gY29tcG9uZW50LmxvbmdfbmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZXMuaW5jbHVkZXMoXCJhZG1pbmlzdHJhdGl2ZV9hcmVhX2xldmVsXzFcIikpIHtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnN0YXRlID0gY29tcG9uZW50LmxvbmdfbmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZXMuaW5jbHVkZXMoXCJjb3VudHJ5XCIpKSB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5zZWxlY3RlZENvdW50cnkgPSBjb21wb25lbnQubG9uZ19uYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlcy5pbmNsdWRlcyhcInBvc3RhbF9jb2RlXCIpKSB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy56aXAgPSBjb21wb25lbnQubG9uZ19uYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG9uTG9jYXRpb25TZWxlY3RlZChsb2NhdGlvbjogYW55KSB7XHJcbiAgICBcclxuICAgIHRoaXMubGF0aXR1dGUgPSBsb2NhdGlvbi5sYXRpdHVkZTtcclxuICAgIHRoaXMubG9uZ2l0dXRlID0gbG9jYXRpb24ubG9uZ2l0dWRlO1xyXG4gICAgICAvLyB0aGlzLnNldFBvc2l0aW9uKCk7ICAvLyBVcGRhdGUgbWFwIHBvc2l0aW9uXHJcbiAgICAvLyB0aGlzLnVwZGF0ZUFkZHJlc3NGaWVsZHMoKTtcclxuICB9XHJcbiAgb25BdXRvY29tcGxldGVTZWxlY3RlZChyZXN1bHQ6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuICAgIC8vIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gbnVsbDtcclxuICAgIC8vIHRoaXMuemlwID0gXCJcIjtcclxuICAgIC8vIHRoaXMuc3RhdGUgPSBcIlwiO1xyXG4gICAgLy8gdGhpcy5jaXR5ID0gXCJcIjtcclxuICAgIC8vIHRoaXMuYWRkcmVzcyA9IHJlc3VsdD8uZm9ybWF0dGVkX2FkZHJlc3M7XHJcbiAgICByZXN1bHQ/LmFkZHJlc3NfY29tcG9uZW50cy5mb3JFYWNoKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGRhdGE/LnR5cGVzLmluY2x1ZGVzKFwiY291bnRyeVwiKSl7fVxyXG4gICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gZGF0YS5sb25nX25hbWU7XHJcbiAgICAgIGVsc2UgaWYgKGRhdGE/LnR5cGVzLmluY2x1ZGVzKFwicG9zdGFsX2NvZGVcIikpe31cclxuICAgICAgICAvLyB0aGlzLnppcCA9IGRhdGEubG9uZ19uYW1lO1xyXG4gICAgICBlbHNlIGlmIChkYXRhPy50eXBlcy5pbmNsdWRlcyhcImFkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMVwiKSl7fVxyXG4gICAgICAgIC8vIHRoaXMuc3RhdGUgPSBkYXRhLmxvbmdfbmFtZTtcclxuICAgICAgZWxzZSBpZiAoZGF0YT8udHlwZXMuaW5jbHVkZXMoXCJsb2NhbGl0eVwiKSl7fVxyXG4gICAgICAgIC8vIHRoaXMuY2l0eSA9IGRhdGEubG9uZ19uYW1lO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGFkZHJlc3NTZWxlY3RlZChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQWRkcmVzc0lkeCA9IGluZGV4O1xyXG4gICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MuZW1pdChpbmRleCk7XHJcbiAgfVxyXG4gIGdvVG9Qcm9maWxlKCkge1xyXG4gICAgaWYgKHRoaXMubWF0RGF0YSkge1xyXG4gICAgICB0aGlzLm1hdERpYWxvZ1JlZj8uY2xvc2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3Byb2ZpbGUnXSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHVwZGF0ZUFkZHJlc3MoKSB7XHJcbiAgICBjb25zdCB1c2VyRGV0YWlscyA9ICh0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFVzZXIoKSBhcyBVc2VyKTtcclxuICAgIGlmICh1c2VyRGV0YWlscykge1xyXG5cclxuICAgICAgY29uc3QgYWRkcmVzc0xpc3QgPSB1c2VyRGV0YWlscz8uYWRkcmVzc0RldGFpbHNMaXN0O1xyXG4gICAgICBpZiAodGhpcy5tYXREYXRhPy5lZGl0SW5kZXgpIHtcclxuICAgICAgICB0aGlzLmFkZHJlc3NMaXN0LmZvckVhY2goKGFkZHJlc3M6IGFueSwgaWR4OiBudW1iZXIpPT4ge1xyXG4gICAgICAgICAgaWYgKGlkeCA9PSB0aGlzLm1hdERhdGEuZWRpdEluZHgpIHtcclxuICAgICAgICAgICAgYWRkcmVzcyA9IHRoaXMuYWRkcmVzcztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFkZHJlc3NMaXN0LnB1c2godGhpcy5hZGRyZXNzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICBcInVzZXJJZFwiOiB1c2VyRGV0YWlscy51c2VySWQsXHJcbiAgICAgICAgXCJidXNpbmVzc0lkXCI6IHVzZXJEZXRhaWxzLmJ1c2luZXNzSWQsXHJcbiAgICAgICAgXCJhZGRyZXNzRGV0YWlsc0xpc3RcIjogYWRkcmVzc0xpc3QsXHJcbiAgICAgICAgXCJjb250YWN0XCI6IHVzZXJEZXRhaWxzPy5jb250YWN0ID8/IHt9LFxyXG4gICAgICAgIFwiZ2VuZGVyXCI6IHVzZXJEZXRhaWxzPy5nZW5kZXI/Lmxlbmd0aCA+IDAgPyB1c2VyRGV0YWlscz8uZ2VuZGVyICA6ICBudWxsXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLmFkZFVzZXJBZGRyZXNzKHBheWxvYWQpLnN1YnNjcmliZSgocmVzcG9uc2UpPT4ge1xyXG4gICAgICAgXHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5hZGROZXdBZGRyZXNzID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGUpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodXNlckRldGFpbHMpIHtcclxuICAgICAgICAgICAgdXNlckRldGFpbHMuYWRkcmVzc0RldGFpbHNMaXN0LnB1c2godGhpcy5hZGRyZXNzIGFzIG5ldmVyKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRVc2VyKHVzZXJEZXRhaWxzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgfSwgKGVycm9yKT0+IHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NSkge1xyXG4gICAgICAgIHRoaXMubWF0Qm90dG9tc2hlZXQub3BlbihBdXRoZW50aWNhdGVVc2VyQ29tcG9uZW50LCB7ZGF0YTogdGhpcy5kYXRhfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tYXREaWFsb2cub3BlbihBdXRoZW50aWNhdGVVc2VyQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICBoZWlnaHQ6ICc1MHZoJyxcclxuICAgICAgICAgIHdpZHRoOiAnMzV2dycsXHJcbiAgICAgICAgICBkYXRhOiB0aGlzLmRhdGFcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICB2YWxpZGF0ZU1vYmlsZShldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKCghaXNOYU4oTnVtYmVyKGV2ZW50LmtleSkpIHx8IGV2ZW50LmtleUNvZGUgPT0gS0VZQk9BUkRfS0VZUy5CQUNLU1BBQ0UgfHwgZXZlbnQua2V5Q29kZSA9PSBLRVlCT0FSRF9LRVlTLlRBQikgJiYgZXZlbnQua2V5Q29kZSAhPSBLRVlCT0FSRF9LRVlTLlNQQUNFKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG4gIHZhbGlkYXRlTmFtZShldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKChldmVudC5rZXlDb2RlID49IEtFWUJPQVJEX0tFWVMuQ0hBUkFDVEVSX0EgJiYgZXZlbnQua2V5Q29kZSA8PSBLRVlCT0FSRF9LRVlTLkNIQVJBQ1RFUl9aKSB8fCBldmVudC5rZXlDb2RlID09IDE2IHx8IGV2ZW50LmtleUNvZGUgPT0gOCB8fCBldmVudC5rZXlDb2RlID09IDMyIHx8IGV2ZW50LmtleUNvZGUgPT0gNDYgfHwgZXZlbnQua2V5Q29kZSA9PSA5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG4gIGVkaXRTZWN0aW9uKCl7XHJcbiAgICBcclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS50b2dnbGVFZGl0b3JFdmVudC5lbWl0KGZhbHNlKTtcclxuICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgIHRoaXMuX2V2ZW50U2VydmljZS5lZGl0U2VjdGlvbi5lbWl0KHtkYXRhOnRoaXMuZGF0YX0pO1xyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcbiAgZ2V0IGlzRW1haWxWYWxpZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmFkZHJlc3M/LnJlY2VpdmVyRW1haWw/LmluY2x1ZGVzKFwiQFwiKSAmJiB0aGlzLmFkZHJlc3M/LnJlY2VpdmVyRW1haWwuaW5jbHVkZXMoXCIuY29tXCIpIHx8ICh0aGlzLmFkZHJlc3M/LnJlY2VpdmVyRW1haWw/Lmxlbmd0aCA9PSAwKTtcclxuICB9XHJcbiAgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxzZWN0aW9uIGNsYXNzPVwiYWRkcmVzcy1zZWNcIiAoY2xpY2spPVwiZWRpdFNlY3Rpb24oKVwiIHNpbXBvSG92ZXIgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCIgPlxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJuZXctYWRkcmVzcy1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJnb1RvUHJvZmlsZSgpXCIgKm5nSWY9XCIhaXNDYXJ0XCI+a2V5Ym9hcmRfYXJyb3dfbGVmdDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDxoMz57e2lzQ2FydCA/ICdTaGlwcGluZyBUbycgOiAnTmV3IEFkZHJlc3MnfX08L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYWRkLWFkZHJlc3NcIiAqbmdJZj1cIiFhZGROZXdBZGRyZXNzXCIgKGNsaWNrKT1cImFkZE5ld0FkZHJlc3MgPSB0cnVlXCI+KyBhZGQgYWRkcmVzczwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFkZE5ld0FkZHJlc3NcIj5cclxuICAgICAgICA8IS0tIDxwIChjbGljayk9XCJnZXRDdXJyZW50TG9jYXRpb24oKVwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+bXlfbG9jYXRpb248L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8c3Bhbj5UYWtlIG15IGN1cnJlbnQgbG9jYXRpb248L3NwYW4+XHJcbiAgICAgICAgPC9wPiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybXMgZC1mbGV4IGZsZXgtd3JhcFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwgcmVxdWlyZWRcIiBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPk5hbWU8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgbmFtZVwiIFsobmdNb2RlbCldPVwiYWRkcmVzcy5yZWNlaXZlck5hbWVcIiAoa2V5ZG93bik9XCJ2YWxpZGF0ZU5hbWUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsIHJlcXVpcmVkXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5Nb2JpbGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgbW9iaWxlXCIgWyhuZ01vZGVsKV09XCJhZGRyZXNzLnJlY2VpdmVyUGhvbmVcIiAoa2V5ZG93bik9XCJ2YWxpZGF0ZU1vYmlsZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwgcmVxdWlyZWRcIiBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPkVtYWlsPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGVtYWlsXCIgWyhuZ01vZGVsKV09XCJhZGRyZXNzLnJlY2VpdmVyRW1haWxcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZnVsbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsIHJlcXVpcmVkXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5BZGRyZXNzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGFkZHJlc3NcIiBtYXRHb29nbGVNYXBzQXV0b2NvbXBsZXRlXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uQXV0b2NvbXBsZXRlU2VsZWN0ZWQpPVwib25BdXRvY29tcGxldGVTZWxlY3RlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAob25Mb2NhdGlvblNlbGVjdGVkKT1cIm9uTG9jYXRpb25TZWxlY3RlZCgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJhZGRyZXNzLmFkZHJlc3NMaW5lMVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsIHJlcXVpcmVkXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5Mb2NhbGl0eTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBsb2NhbGl0eVwiIFsobmdNb2RlbCldPVwiYWRkcmVzcy5sb2NhbGl0eU5hbWVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+TGFuZG1hcms8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgbGFuZG1hcmtcIiBbKG5nTW9kZWwpXT1cImFkZHJlc3MubGFuZG1hcmtcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbCByZXF1aXJlZFwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+UGluY29kZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBwaW5jb2RlXCIgWyhuZ01vZGVsKV09XCJhZGRyZXNzLnppcENvZGVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbCByZXF1aXJlZFwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+Q2l0eTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBjaXR5XCIgWyhuZ01vZGVsKV09XCJhZGRyZXNzLmNpdHlOYW1lXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwgcmVxdWlyZWRcIiBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPlN0YXRlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHN0YXRlXCIgWyhuZ01vZGVsKV09XCJhZGRyZXNzLnN0YXRlTmFtZVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsIHJlcXVpcmVkXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5BZGRyZXNzIFR5cGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhZGRyZXNzIG9mIGFkZGVzc1R5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGRyZXNzLXR5cGVcIiAoY2xpY2spPVwiY2hlY2tBZGRyZXNzVHlwZShhZGRyZXNzKVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlLWFkZHJlc3MnOiBhZGRyZXNzLnN0YXR1c31cIj57e2FkZHJlc3Mua2V5fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgY2xhc3M9XCJhZGRyZXNzLWxpc3RcIiAqbmdJZj1cIiFhZGROZXdBZGRyZXNzXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWRkcmVzcyBvZiBhZGRyZXNzTGlzdDsgbGV0IGlkeCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRyZXNzXCIgKGNsaWNrKT1cImFkZHJlc3NTZWxlY3RlZChpZHgpXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZC1hZGRyZXNzJzogc2VsZWN0ZWRBZGRyZXNzSWR4ID09IGlkeH1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRyZXNzLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctYm9sZCBtci0yXCI+e3thZGRyZXNzPy5yZWNlaXZlck5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGRyZXNzLXR5cGVcIj57e2FkZHJlc3M/LmFkZHJlc3NUeXBlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZHJlc3MtZGV0XCI+e3thZGRyZXNzLmFkZHJlc3NMaW5lMX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBob25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlBob25lOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGRyZXNzLXBob25lXCI+e3thZGRyZXNzLnJlY2VpdmVyUGhvbmV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZHJlc3MtcmlnaHRcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnRuXCIgKm5nSWY9XCJhZGROZXdBZGRyZXNzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJhZGRyZXNzLnJlY2VpdmVyUGhvbmU/Lmxlbmd0aCAhPSAxMCAmJiBhZGRyZXNzLnJlY2VpdmVyUGhvbmU/Lmxlbmd0aFwiPipNb2JpbGUgbnVtYmVyIGlzIGludmFsaWQ8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzRW1haWxWYWxpZFwiPipFbWFpbCBpcyBpbnZhbGlkPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAhYWRkcmVzcy5yZWNlaXZlck5hbWUgfHwgXHJcbiAgICAgICAgICAgICFhZGRyZXNzLnJlY2VpdmVyUGhvbmUgfHxcclxuICAgICAgICAgICAgYWRkcmVzcy5yZWNlaXZlclBob25lPy5sZW5ndGggIT0gMTAgfHxcclxuICAgICAgICAgICAgIWlzRW1haWxWYWxpZCB8fCBcclxuICAgICAgICAgICAgIWFkZHJlc3MuYWRkcmVzc0xpbmUxIHx8IFxyXG4gICAgICAgICAgICAhYWRkcmVzcy5sb2NhbGl0eU5hbWUgfHwgXHJcbiAgICAgICAgICAgICFhZGRyZXNzLnppcENvZGUgfHwgXHJcbiAgICAgICAgICAgICFhZGRyZXNzLmNpdHlOYW1lIHx8XHJcbiAgICAgICAgICAgICFhZGRyZXNzLnN0YXRlTmFtZSB8fCBcclxuICAgICAgICAgICAgIWFkZHJlc3MuYWRkcmVzc1R5cGUgfHwgaXNMb2FkaW5nXHJcbiAgICAgICAgICAgIFwiIChjbGljayk9XCJ1cGRhdGVBZGRyZXNzKClcIj57e2lzTG9hZGluZyA/ICdMb2FkaW5nJyA6ICdVcGRhdGUnfX08L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcblxyXG5cclxuPGRpdiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGVkaXR9XCIgKm5nSWY9XCJzaG93RWRpdG9yc1wiPlxyXG4gICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwic2hvd0RlbGV0ZVwiIFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZGVsZXRlfVwiPlxyXG4gICAgPHNpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50IFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIj48L3NpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50PlxyXG48L2Rpdj4iXX0=
|