tango-app-ui-manage-settings 3.0.65-dev → 3.3.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/configurations/configurations.component.mjs +1 -3
- package/esm2022/lib/components/configurations/feature-configuration/feature-configuration.component.mjs +3 -5
- package/esm2022/lib/components/payments-subscription/billing/billing-group-form/billing-group-form.component.mjs +448 -0
- package/esm2022/lib/components/payments-subscription/billing/billing-group-view/billing-group-view.component.mjs +20 -0
- package/esm2022/lib/components/payments-subscription/billing/billing.component.mjs +200 -0
- package/esm2022/lib/components/payments-subscription/billing/request-confirmation/request-confirmation.component.mjs +22 -0
- package/esm2022/lib/components/payments-subscription/invoice-credits/invoice-credits.component.mjs +340 -0
- package/esm2022/lib/components/payments-subscription/invoice-credits/paynow/paynow.component.mjs +127 -0
- package/esm2022/lib/components/payments-subscription/payments-subscription.component.mjs +61 -14
- package/esm2022/lib/components/payments-subscription/request-popups/starttrailrequest/starttrailrequest.component.mjs +25 -0
- package/esm2022/lib/components/payments-subscription/request-popups/subscribe-request/subscribe-request.component.mjs +25 -0
- package/esm2022/lib/components/payments-subscription/subscription-popups/credit-note/credit-note.component.mjs +9 -3
- package/esm2022/lib/components/payments-subscription/subscription-popups/multidropdown/multidropdown.component.mjs +6 -6
- package/esm2022/lib/components/payments-subscription/subscription-popups/needhelp/needhelp.component.mjs +23 -0
- package/esm2022/lib/components/payments-subscription/subscription-popups/unsubscribe-request/unsubscribe-request.component.mjs +8 -5
- package/esm2022/lib/components/payments-subscription/subscription-popups/unsubscribeproduct/unsubscribeproduct.component.mjs +27 -0
- package/esm2022/lib/components/payments-subscription/subscription-popups/upgrade-plan/upgrade-plan.component.mjs +336 -8
- package/esm2022/lib/components/payments-subscription/subscription-popups/viewstores/viewstores.component.mjs +299 -0
- package/esm2022/lib/components/tango-manage-settings/tango-manage-settings.component.mjs +313 -11
- package/esm2022/lib/services/payment-subscription.service.mjs +64 -3
- package/esm2022/lib/services/util.mjs +46 -0
- package/esm2022/lib/tango-manage-settings.module.mjs +48 -3
- package/fesm2022/tango-app-ui-manage-settings.mjs +4050 -1761
- package/fesm2022/tango-app-ui-manage-settings.mjs.map +1 -1
- package/lib/components/activity-logs/activity-logs.component.d.ts +1 -1
- package/lib/components/contact-directory/contact-directory.component.d.ts +1 -1
- package/lib/components/payments-subscription/billing/billing-group-form/billing-group-form.component.d.ts +65 -0
- package/lib/components/payments-subscription/billing/billing-group-view/billing-group-view.component.d.ts +9 -0
- package/lib/components/payments-subscription/billing/billing.component.d.ts +42 -0
- package/lib/components/payments-subscription/billing/request-confirmation/request-confirmation.component.d.ts +10 -0
- package/lib/components/payments-subscription/invoice-credits/invoice-credits.component.d.ts +80 -0
- package/lib/components/payments-subscription/invoice-credits/paynow/paynow.component.d.ts +29 -0
- package/lib/components/payments-subscription/payments-subscription.component.d.ts +8 -0
- package/lib/components/payments-subscription/request-popups/starttrailrequest/starttrailrequest.component.d.ts +11 -0
- package/lib/components/payments-subscription/request-popups/subscribe-request/subscribe-request.component.d.ts +11 -0
- package/lib/components/payments-subscription/subscription-popups/credit-note/credit-note.component.d.ts +3 -1
- package/lib/components/payments-subscription/subscription-popups/needhelp/needhelp.component.d.ts +10 -0
- package/lib/components/payments-subscription/subscription-popups/unsubscribe-request/unsubscribe-request.component.d.ts +3 -2
- package/lib/components/payments-subscription/subscription-popups/unsubscribeproduct/unsubscribeproduct.component.d.ts +13 -0
- package/lib/components/payments-subscription/subscription-popups/upgrade-plan/upgrade-plan.component.d.ts +43 -1
- package/lib/components/payments-subscription/subscription-popups/viewstores/viewstores.component.d.ts +44 -0
- package/lib/components/tango-manage-settings/tango-manage-settings.component.d.ts +35 -4
- package/lib/services/payment-subscription.service.d.ts +21 -0
- package/lib/services/util.d.ts +14 -0
- package/lib/tango-manage-settings.module.d.ts +23 -12
- package/package.json +1 -1
|
@@ -4,17 +4,22 @@ import { TrailExpiredComponent } from '../trail-expired/trail-expired.component'
|
|
|
4
4
|
import { SubscriptionApprovalComponent } from '../subscription-approval/subscription-approval.component';
|
|
5
5
|
import { Subject, takeUntil } from 'rxjs';
|
|
6
6
|
import { ModalContentComponent } from '../model-content/model-content.component';
|
|
7
|
+
import { SubscribeRequestComponent } from '../../request-popups/subscribe-request/subscribe-request.component';
|
|
8
|
+
import { StarttrailrequestComponent } from '../../request-popups/starttrailrequest/starttrailrequest.component';
|
|
7
9
|
import * as i0 from "@angular/core";
|
|
8
10
|
import * as i1 from "@ng-bootstrap/ng-bootstrap";
|
|
9
11
|
import * as i2 from "tango-app-ui-shared";
|
|
10
12
|
import * as i3 from "../../../../services/payment-subscription.service";
|
|
11
|
-
import * as i4 from "
|
|
13
|
+
import * as i4 from "tango-app-ui-global";
|
|
14
|
+
import * as i5 from "@angular/common";
|
|
15
|
+
import * as i6 from "@angular/forms";
|
|
12
16
|
export class UpgradePlanComponent {
|
|
13
17
|
modalService;
|
|
14
18
|
activeModel;
|
|
15
19
|
toast;
|
|
16
20
|
PaymentSubscriptionService;
|
|
17
21
|
changeDetector;
|
|
22
|
+
gs;
|
|
18
23
|
clientId;
|
|
19
24
|
noofstoresdropDown = false;
|
|
20
25
|
AvgstoresdropDown = false;
|
|
@@ -39,15 +44,96 @@ export class UpgradePlanComponent {
|
|
|
39
44
|
confirmedProducts = [];
|
|
40
45
|
destroy$ = new Subject();
|
|
41
46
|
clientinfo;
|
|
42
|
-
|
|
47
|
+
sortBy = 1;
|
|
48
|
+
dataObject = [
|
|
49
|
+
{ Description: 'Stores', Stores: [] },
|
|
50
|
+
];
|
|
51
|
+
$headerFilters;
|
|
52
|
+
availableStores;
|
|
53
|
+
dummyArray;
|
|
54
|
+
selectedText;
|
|
55
|
+
selectedValuesArray = [];
|
|
56
|
+
searchValue;
|
|
57
|
+
showStoreSelection = false;
|
|
58
|
+
showPopuptrail = false;
|
|
59
|
+
showPopupsubscribed = false;
|
|
60
|
+
showMainContent = true;
|
|
61
|
+
loading = true;
|
|
62
|
+
noData = false;
|
|
63
|
+
productList = [];
|
|
64
|
+
dynamicData = {
|
|
65
|
+
limit: 10,
|
|
66
|
+
offset: 1,
|
|
67
|
+
clientId: "",
|
|
68
|
+
searchValue: "",
|
|
69
|
+
sortColumn: '',
|
|
70
|
+
sortBy: '',
|
|
71
|
+
product: [],
|
|
72
|
+
store: [],
|
|
73
|
+
location: []
|
|
74
|
+
};
|
|
75
|
+
userType = '';
|
|
76
|
+
storeList = [];
|
|
77
|
+
selectedStoreList = [];
|
|
78
|
+
totalCount = 0;
|
|
79
|
+
storeProduct;
|
|
80
|
+
selectAll = false;
|
|
81
|
+
showsubscription = false;
|
|
82
|
+
showSubscribe = false;
|
|
83
|
+
notificationDetails = [];
|
|
84
|
+
message;
|
|
85
|
+
selectedProduct = '';
|
|
86
|
+
constructor(modalService, activeModel, toast, PaymentSubscriptionService, changeDetector, gs) {
|
|
43
87
|
this.modalService = modalService;
|
|
44
88
|
this.activeModel = activeModel;
|
|
45
89
|
this.toast = toast;
|
|
46
90
|
this.PaymentSubscriptionService = PaymentSubscriptionService;
|
|
47
91
|
this.changeDetector = changeDetector;
|
|
92
|
+
this.gs = gs;
|
|
93
|
+
this.gs.dataRangeValue.subscribe({
|
|
94
|
+
next: (data) => {
|
|
95
|
+
this.$headerFilters = data;
|
|
96
|
+
},
|
|
97
|
+
});
|
|
48
98
|
}
|
|
49
99
|
ngOnInit() {
|
|
50
|
-
this.
|
|
100
|
+
this.gs.dataRangeValue.pipe(takeUntil(this.destroy$)).subscribe((data) => {
|
|
101
|
+
if (data) {
|
|
102
|
+
this.clientId = data.client;
|
|
103
|
+
this.dynamicData.clientId = this.clientId;
|
|
104
|
+
this.getAvailableStores();
|
|
105
|
+
this.gs.userAccess.pipe(takeUntil(this.destroy$)).subscribe((data) => {
|
|
106
|
+
if (data) {
|
|
107
|
+
this.userType = data.userType;
|
|
108
|
+
this.updatesubscription(this.clientId);
|
|
109
|
+
if (data?.userType == 'tango') {
|
|
110
|
+
// this.getProductList();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
this.clientBillingInfo(this.clientId);
|
|
115
|
+
// this.getpaymentinvoice(this.clientId);
|
|
116
|
+
// this.paymentinvoiceform.disable()
|
|
117
|
+
// this.invoiceTableData();
|
|
118
|
+
}
|
|
119
|
+
else if (!data) {
|
|
120
|
+
const userData = JSON.parse(localStorage.getItem("user-info") || "{}");
|
|
121
|
+
this.clientId = userData.clientId;
|
|
122
|
+
this.dynamicData.clientId = this.clientId;
|
|
123
|
+
this.getAvailableStores();
|
|
124
|
+
this.gs.userAccess.pipe(takeUntil(this.destroy$)).subscribe((data) => {
|
|
125
|
+
if (data) {
|
|
126
|
+
this.userType = data.userType;
|
|
127
|
+
this.updatesubscription(this.clientId);
|
|
128
|
+
if (data?.userType == 'tango') {
|
|
129
|
+
// this.getPricing('standard');
|
|
130
|
+
// this.getProductList();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
this.clientBillingInfo(this.clientId);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
51
137
|
}
|
|
52
138
|
ngOnDestroy() {
|
|
53
139
|
this.destroy$.next(true);
|
|
@@ -104,8 +190,11 @@ export class UpgradePlanComponent {
|
|
|
104
190
|
this.AvgstoresdropDown = !this.AvgstoresdropDown;
|
|
105
191
|
}
|
|
106
192
|
updatesubscription(id) {
|
|
193
|
+
this.loading = true;
|
|
107
194
|
this.PaymentSubscriptionService.clientBillingInfo(id).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
108
195
|
if (res && res.code == 200) {
|
|
196
|
+
this.loading = false;
|
|
197
|
+
this.noData = false;
|
|
109
198
|
this.clientInfo = res.data;
|
|
110
199
|
if (this.clientInfo?.currentPlanInfo?.trialProducts) {
|
|
111
200
|
this.trialproducts = this.clientInfo.currentPlanInfo.trialProducts.map((item) => item.productName);
|
|
@@ -117,6 +206,13 @@ export class UpgradePlanComponent {
|
|
|
117
206
|
this.basePricing();
|
|
118
207
|
this.changeDetector.detectChanges();
|
|
119
208
|
}
|
|
209
|
+
else {
|
|
210
|
+
this.noData = true;
|
|
211
|
+
this.loading = false;
|
|
212
|
+
}
|
|
213
|
+
}, (error) => {
|
|
214
|
+
this.loading = false;
|
|
215
|
+
this.noData = true;
|
|
120
216
|
});
|
|
121
217
|
}
|
|
122
218
|
basePricing() {
|
|
@@ -195,6 +291,11 @@ export class UpgradePlanComponent {
|
|
|
195
291
|
this.clientBillingInfo(this.clientId);
|
|
196
292
|
this.PaymentSubscriptionService.triggerReload();
|
|
197
293
|
this.activeModel.close();
|
|
294
|
+
this.showPopuptrail = false;
|
|
295
|
+
this.showPopupsubscribed = false;
|
|
296
|
+
this.showMainContent = true;
|
|
297
|
+
this.showsubscription = true;
|
|
298
|
+
this.showSubscribe = true;
|
|
198
299
|
}
|
|
199
300
|
clientBillingInfo(id) {
|
|
200
301
|
this.PaymentSubscriptionService.clientBillingInfo(id).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
@@ -204,16 +305,243 @@ export class UpgradePlanComponent {
|
|
|
204
305
|
}
|
|
205
306
|
});
|
|
206
307
|
}
|
|
207
|
-
|
|
208
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: UpgradePlanComponent, selector: "lib-upgrade-plan", inputs: { clientId: "clientId" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, ngImport: i0, template: "<section *ngIf=\"subscription === 'pricingplan'\">\r\n <div *ngIf=\"showNavGroup\" class=\"nav-group nav-group-outline mx-auto mt-8 d-flex justify-content-center\">\r\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3 me-2\"\r\n [ngClass]=\"clientInfo?.currentPlanInfo?.subscriptionPeriod === 'monthly' ? 'activePlanBtn':'inactivePlanBtn'\"\r\n data-kt-plan=\"month\" (click)=\"selectPlan('monthly')\">\r\n Monthly\r\n </button>\r\n\r\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3\"\r\n [ngClass]=\"clientInfo?.currentPlanInfo?.subscriptionPeriod === 'quarterly'? 'activePlanBtn':'inactivePlanBtn'\"\r\n data-kt-plan=\"Quarterly\" (click)=\"selectPlan('quarterly')\">\r\n Quarterly - 10%\r\n </button>\r\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3\"\r\n [ngClass]=\"clientInfo?.currentPlanInfo?.subscriptionPeriod === 'annual'? 'activePlanBtn':'inactivePlanBtn'\"\r\n data-kt-plan=\"annual\" (click)=\"selectPlan('annual')\">\r\n Annual - 15%\r\n </button>\r\n\r\n</div>\r\n\r\n<div class=\"modal-body row \">\r\n <div class=\"col-lg-6 pe-8 vertical\">\r\n\r\n <div class=\"d-flex flex-column fv-row fv-plugins-icon-container\">\r\n <div class=\"py-2\">\r\n <label class=\"headingtext mb-3\">No of Stores </label>\r\n <div class=\"position-relative \">\r\n <div class=\"form-select dropselect levelviewtext\" id=\"currency\" (click)=\"noofstoresDropdown($event)\"\r\n aria-label=\"Default select example\">{{clientInfo?.currentPlanInfo?.totalStores ||\r\n noofstorestype[0]}}</div>\r\n <div *ngIf=\"noofstoresdropDown\" class=\"card py-2 w-100 position-absolute end-0 z-1\">\r\n <ul *ngFor=\"let noofstores of noofstorestype\" class=\"list-unstyled mb-2\">\r\n <li [ngClass]=\"clientInfo?.currentPlanInfo?.totalStores === noofstores ? 'active' : ''\"\r\n class=\"producttext px-5 items cursor-pointer py-4\" (click)=\"noofstoresdata(noofstores)\">\r\n {{ noofstores }}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"py-2\">\r\n <label class=\"headingtext mb-3\">Average Size of Stores </label>\r\n <div class=\"position-relative \">\r\n <div class=\"form-select dropselect levelviewtext\" id=\"currency\" (click)=\"AvgstoresDropdown($event)\"\r\n aria-label=\"Default select example\">{{clientInfo?.currentPlanInfo?.storeSize ||\r\n Avgstorestype[0].value}}</div>\r\n <div *ngIf=\"AvgstoresdropDown\" class=\"card py-2 w-100 position-absolute end-0 z-1\">\r\n <ul *ngFor=\"let Avgstores of Avgstorestype\" class=\"list-unstyled mb-2\">\r\n <li [ngClass]=\"clientInfo?.currentPlanInfo?.storeSize === Avgstores ? 'active' : ''\"\r\n class=\"producttext px-5 items cursor-pointer py-4\" (click)=\"Avgstoresdata(Avgstores.value)\">\r\n {{Avgstores.name}}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"maxcam mt-2\">\r\n Maximum {{clientInfo?.currentPlanInfo?.totalCamera}} Cameras are permitted in stores with square feet between {{clientInfo?.currentPlanInfo?.storeSize}}.\r\n </div>\r\n </div>\r\n\r\n <div class=\"selecttext my-5 mt-12\">Select Products</div>\r\n\r\n <div *ngFor=\"let productlist of clientInfo?.currentPlanInfo?.product\" class=\"form-check form-switch d-flex justify-content-between mt-6\">\r\n <div>\r\n <span><input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" id=\"tangorevop\"\r\n [checked]=\"productlist.active === true\" (change)=\"updateProduct($event,productlist.productName)\" [disabled]=\"productlist.status === 'live' || productlist.status === 'trial' \"></span>\r\n <label for=\"flexSwitchCheckDefault\"\r\n class=\"form-check-label headingtext d-flex\">{{productlist.aliseProductName}} \r\n <span [class]=\"getColorClass(productlist.toolTip)\">\r\n {{productlist.toolTip}} <span *ngIf=\"expiredProducts.length && productlist.productName.includes(expiredProducts)\"><img class=\"ms-2\" src=\"./assets/tango/custompopup-Icons/clockexpiry-icon.svg\" alt=\"\"> \r\n </span> <span *ngIf=\"trialproducts.length && productlist.productName.includes(trialproducts)\">\r\n <img class=\"ms-2\" src=\"./assets/tango/custompopup-Icons/primary-clock-icon.svg\" alt=\"\"> \r\n </span>\r\n </span>\r\n </label>\r\n </div>\r\n <span class=\"view\" (click)=\"showInfo(productlist.productName)\">View Info <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"14\"\r\n viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M9 6.5V9.5C9 9.76522 8.89464 10.0196 8.70711 10.2071C8.51957 10.3946 8.26522 10.5 8 10.5H2.5C2.23478 10.5 1.98043 10.3946 1.79289 10.2071C1.60536 10.0196 1.5 9.76522 1.5 9.5V4C1.5 3.73478 1.60536 3.48043 1.79289 3.29289C1.98043 3.10536 2.23478 3 2.5 3H5.5M7.5 1.5H10.5M10.5 1.5V4.5M10.5 1.5L5 7\"\r\n stroke=\"#009BF3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </div>\r\n\r\n\r\n\r\n\r\n </div>\r\n <div class=\"col-lg-6 px-8\">\r\n <div class=\"pb-6\">\r\n\r\n <div class=\"pricingtext\">{{clientInfo?.currentPlanInfo?.subscriptionType | titlecase}}</div>\r\n\r\n <div class=\"semi mt-2\">\r\n Integrated Solution for Growing Business\r\n </div>\r\n <!-- <div class=\"d-flex\"><span class=\"me-3 mt-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2231_42342)\">\r\n <path\r\n d=\"M7.99967 10.6673V8.00065M7.99967 5.33398H8.00634M14.6663 8.00065C14.6663 11.6826 11.6816 14.6673 7.99967 14.6673C4.31778 14.6673 1.33301 11.6826 1.33301 8.00065C1.33301 4.31875 4.31778 1.33398 7.99967 1.33398C11.6816 1.33398 14.6663 4.31875 14.6663 8.00065Z\"\r\n stroke=\"#B54708\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2231_42342\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n <div class=\"subtext mt-6\">You will only be charged for < Tango Traffic,Tango <br>Zone & Tango RevOps >\r\n </div>\r\n </div> -->\r\n <div class=\"sub1text mt-5\">Starts from <span class=\"billedtext ms-2\"><s><span *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'inr'\">\u20B9</span><span *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'dollar'\">$</span>{{originalPrice}}</s></span><span\r\n class=\"billingtext ms-4\"><span *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'inr'\">\u20B9</span><span\r\n *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'dollar'\">$</span>{{clientInfo?.currentPlanInfo?.price || 0}}</span></div>\r\n <div class=\"sub1text mt-2\">Per store Per month</div>\r\n\r\n </div>\r\n <div class=\"detailstext\">Billing Details</div>\r\n\r\n <div class=\"sub1text py-4\">\r\n <div class=\"mb-4\">Brand Name: {{clientInfo?.clientName}}</div>\r\n <div>Billing Address: {{clientInfo?.billingDetails?.billingAddress || '--'}}</div>\r\n </div>\r\n <div class=\"d-flex justify-content-end subscribe\"> \r\n <button (click)=\"update()\" type=\"button\" tabindex=\"0\"\r\n class=\"btn btn-primary ms-2 ng-star-inserted w-100 btn-block text-nowrap\" *ngIf=\"!clientInfo?.billingDetails?.billingAddress\"><span class=\"submit\">Enter\r\n Billing Details </span></button>\r\n <button (click)=\"confirmation()\" type=\"button\" tabindex=\"0\" *ngIf=\"clientInfo?.billingDetails?.billingAddress\"\r\n class=\"btn btn-primary ms-2 ng-star-inserted w-100 btn-block\" style=\"white-space: nowrap;\" [disabled]=\"disableBtn\"><span\r\n class=\"submit\">Subscribe Now </span></button>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n</section>\r\n\r\n<div *ngIf=\"subscription === 'confirmationmessage'\" class=\"modal-content gifimage\" >\r\n <div class=\"p-6\">\r\n <div><img src=\"./assets/tango/custompopup-Icons/check-icon.svg\" alt=\"\"></div>\r\n <div class=\"heading mt-4 ms-1\">Thanks for the subscription!</div>\r\n <div class=\"d-flex flex-column fv-row fv-plugins-icon-container\">\r\n \r\n <div class=\"contenttext mt-4 mx-2\">You have successfully subscribed to our products \r\n <ul class=\"mt-4\">\r\n <li *ngFor=\"let product of confirmedProducts\">{{product}}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n \r\n <div class=\"d-flex mt-2 py-2\">\r\n <button type=\"button\" tabindex=\"0\" class=\"btn btn-primary px-4 ng-star-inserted w-100\" (click)=\"closePopupAndReloadData()\" style=\"white-space: nowrap;\">\r\n <span class=\"submit\">Okay</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".tabchange{align-items:center;gap:8px;padding:1% 25%}.pricingtext{color:var(--Gray-900, #101828);font-family:Inter;font-size:20px;font-weight:600;line-height:30px}.semi{color:var(--Gray-500, #667085);font-family:Inter;font-size:14px;font-weight:400;line-height:20px}.subtext{color:var(--Error-700, #B42318);font-family:Inter;font-size:12px;font-weight:400;line-height:18px}.billingtext{color:var(--Primary-700, #009BF3);font-family:Inter;font-size:24px;font-weight:600;line-height:32px}.billedtext{color:var(--Primary-700, #009BF3);font-family:Inter;font-size:18px;font-weight:600;line-height:32px;text-decoration-line:\"strikethrough\"}.sub1text{color:var(--Gray-500, #667085);font-family:Inter;font-size:14px;font-weight:400;line-height:20px}.detailstext{color:var(--Gray-500, #667085);font-family:Inter;font-size:18px;font-weight:600;line-height:28px}.maxcam{color:var(--Primary-800, #008EDF);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.selecttext{color:#000;font-family:Inter;font-size:16px;font-weight:500;line-height:24px}.activePlanBtn{border-radius:6px;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a!important;color:var(--Gray-700, #344054);font-size:14px!important;font-weight:500!important;line-height:20px}.inactivePlanBtn{color:var(--Gray-500, #667085)!important;font-size:14px;font-weight:500!important;line-height:20px}.nav-group{background:var(--Gray-50, #F9FAFB)!important;border-radius:8px!important;border:1px solid var(--Gray-100, #F2F4F7)!important;width:fit-content}.form-check-label{color:var(--Gray-700, #344054)!important}.view{color:var(--Primary-700, #009BF3);font-family:Inter;font-size:12px;font-weight:500;line-height:18px;cursor:pointer}.modal-body{padding:4%!important}.vertical{border-right:1px solid var(--Gray-200, #EAECF0)}.subscribe{margin-top:45%}.items:hover,.tems.focus,.items.active,.camera.focus-visible{background:var(--Gray-50, #F9FAFB)}.dropselect{color:var(--Gray-500, #667085);font-family:Inter;font-size:16px;font-style:normal;font-weight:400;line-height:24px;height:45px!important}.producttext{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.heading{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.contenttext{color:var(--Gray-500, #667085);font-family:Inter;font-size:14px;font-style:normal;font-weight:400;line-height:20px}.gifimage{background-size:cover;height:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.TitleCasePipe, name: "titlecase" }] });
|
|
308
|
+
sortStoreSize() {
|
|
309
|
+
this.sortBy *= -1;
|
|
310
|
+
// this.getProductList()
|
|
311
|
+
}
|
|
312
|
+
// getProductList() {
|
|
313
|
+
// this.loading = true;
|
|
314
|
+
// let data = {
|
|
315
|
+
// id: this.clientId,
|
|
316
|
+
// sortColumn: 'storeCount',
|
|
317
|
+
// sortBy: this.sortBy
|
|
318
|
+
// };
|
|
319
|
+
// this.PaymentSubscriptionService.getProductList(data).pipe(takeUntil(this.destroy$)).subscribe((res: any) => {
|
|
320
|
+
// if (res && res.code == 200) {
|
|
321
|
+
// this.loading = false;
|
|
322
|
+
// this.noData = false;
|
|
323
|
+
// this.productList = res.data;
|
|
324
|
+
// this.changeDetector.detectChanges();
|
|
325
|
+
// }
|
|
326
|
+
// else {
|
|
327
|
+
// this.noData = true;
|
|
328
|
+
// this.loading = false;
|
|
329
|
+
// }
|
|
330
|
+
// }, (error: any) => {
|
|
331
|
+
// this.loading = false;
|
|
332
|
+
// this.noData = true;
|
|
333
|
+
// })
|
|
334
|
+
// }
|
|
335
|
+
Dropdown(value, index, event) {
|
|
336
|
+
event.stopPropagation();
|
|
337
|
+
this.dataObject.forEach((item, i) => {
|
|
338
|
+
if (i !== index) {
|
|
339
|
+
item.isOpen = false;
|
|
340
|
+
}
|
|
341
|
+
});
|
|
342
|
+
this.dataObject[index].isOpen = !this.dataObject[index].isOpen;
|
|
343
|
+
}
|
|
344
|
+
getStoreList() {
|
|
345
|
+
this.loading = true;
|
|
346
|
+
this.dynamicData.store = this.selectedValuesArray[0].map((value) => value?.storeId);
|
|
347
|
+
this.PaymentSubscriptionService.getStoreList(this.dynamicData).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
348
|
+
if (res && res.code == 200) {
|
|
349
|
+
this.loading = false;
|
|
350
|
+
this.noData = false;
|
|
351
|
+
this.showMainContent = false;
|
|
352
|
+
this.showPopuptrail = true;
|
|
353
|
+
this.storeList = res.data.data;
|
|
354
|
+
this.storeList.forEach((item) => {
|
|
355
|
+
item.checked = this.selectAll;
|
|
356
|
+
});
|
|
357
|
+
this.selectedValuesArray = this.storeList;
|
|
358
|
+
this.totalCount = res.data.count;
|
|
359
|
+
this.changeDetector.detectChanges();
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
this.noData = true;
|
|
363
|
+
this.loading = false;
|
|
364
|
+
}
|
|
365
|
+
}, (error) => {
|
|
366
|
+
this.loading = false;
|
|
367
|
+
this.noData = true;
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
getStores() {
|
|
371
|
+
return this.selectedStoreList;
|
|
372
|
+
}
|
|
373
|
+
getProduct() {
|
|
374
|
+
if (this.selectedStoreList.length || this.selectAll) {
|
|
375
|
+
return this.storeProduct;
|
|
376
|
+
}
|
|
377
|
+
return [];
|
|
378
|
+
}
|
|
379
|
+
getAvailableStores() {
|
|
380
|
+
this.loading = true;
|
|
381
|
+
this.PaymentSubscriptionService.getStores({ clientId: this.clientId }).subscribe({
|
|
382
|
+
next: (res) => {
|
|
383
|
+
if (res && res.code == 200) {
|
|
384
|
+
this.loading = false;
|
|
385
|
+
this.noData = false;
|
|
386
|
+
this.availableStores = res.data.result;
|
|
387
|
+
this.dataObject[0].Stores = res.data.result;
|
|
388
|
+
this.loadSelectedStores(this.dataObject[0].Stores);
|
|
389
|
+
this.dummyArray = JSON.parse(JSON.stringify(this.dataObject));
|
|
390
|
+
this.changeDetector.detectChanges();
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
this.noData = true;
|
|
394
|
+
this.loading = false;
|
|
395
|
+
}
|
|
396
|
+
},
|
|
397
|
+
error: () => {
|
|
398
|
+
this.availableStores = [];
|
|
399
|
+
this.loading = false;
|
|
400
|
+
this.noData = true;
|
|
401
|
+
},
|
|
402
|
+
complete: () => { },
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
loadSelectedStores(stores) {
|
|
406
|
+
//default all not selected
|
|
407
|
+
// this.selectedValuesArray[0] = [];
|
|
408
|
+
// this.dataObject[0].Stores.forEach((store: any) => {
|
|
409
|
+
// if(stores.includes(store.storeId)) {
|
|
410
|
+
// store.checked = true;
|
|
411
|
+
// this.selectedValuesArray[0].push(store);
|
|
412
|
+
// }
|
|
413
|
+
// });
|
|
414
|
+
//default All selected
|
|
415
|
+
this.dataObject[0].Stores?.forEach((store) => store.checked = true);
|
|
416
|
+
this.selectedValuesArray[0] = this.dataObject[0].Stores;
|
|
417
|
+
this.selectedText = `${this.selectedValuesArray[0].length} Stores Selected`;
|
|
418
|
+
}
|
|
419
|
+
toggleCheckbox(event, store, index, subIndex) {
|
|
420
|
+
const selectedStores = this.dataObject[index].Stores;
|
|
421
|
+
this.selectedValuesArray[index] = this.selectedValuesArray[index] || [];
|
|
422
|
+
if (store === 'Select All') {
|
|
423
|
+
const checked = event.target.checked;
|
|
424
|
+
selectedStores.forEach((item) => item.checked = checked);
|
|
425
|
+
this.selectedValuesArray[index] = checked ? [...selectedStores] : [];
|
|
426
|
+
}
|
|
427
|
+
else {
|
|
428
|
+
const isChecked = event.target.checked;
|
|
429
|
+
const storeIndex = this.selectedValuesArray[index].findIndex((item) => item.storeName === store.storeName);
|
|
430
|
+
isChecked ? this.selectedValuesArray[index].push(store) : this.selectedValuesArray[index].splice(storeIndex, 1);
|
|
431
|
+
this.dataObject[index].Stores[subIndex].checked = isChecked;
|
|
432
|
+
}
|
|
433
|
+
const selectAllElement = document.getElementById(`selectall${index}`);
|
|
434
|
+
if (selectAllElement)
|
|
435
|
+
selectAllElement.checked = selectedStores.every((item) => item.checked);
|
|
436
|
+
this.selectedValuesArray[index].forEach((store) => {
|
|
437
|
+
const checkboxElement = document.getElementById(`option${store.storeName}`);
|
|
438
|
+
if (checkboxElement)
|
|
439
|
+
checkboxElement.checked = store.checked;
|
|
440
|
+
});
|
|
441
|
+
this.selectedText = `${this.selectedValuesArray[0].length} Stores Selected`;
|
|
442
|
+
// this.PaymentSubscriptionService.get('storeList')?.setValue(this.selectedValuesArray[0].map((x:any) => x.storeId));
|
|
443
|
+
}
|
|
444
|
+
searchData(stores, i) {
|
|
445
|
+
if (this.searchValue) {
|
|
446
|
+
let res = stores.filter((item) => {
|
|
447
|
+
// Find the item in selectedValuesArray that matches the current store item
|
|
448
|
+
let findChecked = this.selectedValuesArray[i]?.find((issue) => issue.storeId === item.storeId);
|
|
449
|
+
// Update the item with the found checked status or default to false
|
|
450
|
+
let updatedItem = {
|
|
451
|
+
...item,
|
|
452
|
+
checked: findChecked ? findChecked.checked : false
|
|
453
|
+
};
|
|
454
|
+
return updatedItem;
|
|
455
|
+
}).filter((item) => new RegExp(this.searchValue, 'i').test(item.storeName));
|
|
456
|
+
return res;
|
|
457
|
+
}
|
|
458
|
+
else {
|
|
459
|
+
return stores;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
startTrial(data, type) {
|
|
463
|
+
const modalRef = this.modalService.open(StarttrailrequestComponent, {
|
|
464
|
+
centered: true, size: 'md',
|
|
465
|
+
});
|
|
466
|
+
// modalRef.componentInstance.clientId = this.clientId;
|
|
467
|
+
modalRef.result.then((result) => {
|
|
468
|
+
if (result == 'starttrialproduct') {
|
|
469
|
+
let params = {
|
|
470
|
+
clientId: this.clientId,
|
|
471
|
+
product: [
|
|
472
|
+
{
|
|
473
|
+
type: type,
|
|
474
|
+
name: data
|
|
475
|
+
}
|
|
476
|
+
]
|
|
477
|
+
};
|
|
478
|
+
this.PaymentSubscriptionService.updateProduct(params).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
479
|
+
if (res && res.code == 200) {
|
|
480
|
+
this.showMainContent = false;
|
|
481
|
+
this.showPopuptrail = true;
|
|
482
|
+
this.notificationList();
|
|
483
|
+
}
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
});
|
|
487
|
+
}
|
|
488
|
+
convertUpper(data) {
|
|
489
|
+
let [firstWord, secondWord] = data.replace(/([a-z])([A-Z])/g, '$1 $2').split(' ');
|
|
490
|
+
firstWord = firstWord.charAt(0).toUpperCase() + firstWord.slice(1);
|
|
491
|
+
return firstWord + ' ' + secondWord;
|
|
492
|
+
}
|
|
493
|
+
subscribeproduct(data, type) {
|
|
494
|
+
this.message = data.product;
|
|
495
|
+
const modalRef = this.modalService.open(SubscribeRequestComponent, {
|
|
496
|
+
centered: true, size: 'md',
|
|
497
|
+
});
|
|
498
|
+
modalRef.componentInstance.productName = data.aliseProductName;
|
|
499
|
+
// modalRef.componentInstance.clientId = this.clientId;
|
|
500
|
+
modalRef.result.then((result) => {
|
|
501
|
+
if (result == 'subscribeproduct') {
|
|
502
|
+
let params = {
|
|
503
|
+
clientId: this.clientId,
|
|
504
|
+
product: [
|
|
505
|
+
{
|
|
506
|
+
type: type,
|
|
507
|
+
name: data?.product
|
|
508
|
+
}
|
|
509
|
+
]
|
|
510
|
+
};
|
|
511
|
+
this.PaymentSubscriptionService.updateProduct(params).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
512
|
+
if (res && res.code == 200) {
|
|
513
|
+
this.showMainContent = false;
|
|
514
|
+
this.showPopupsubscribed = true;
|
|
515
|
+
this.notificationList();
|
|
516
|
+
}
|
|
517
|
+
});
|
|
518
|
+
}
|
|
519
|
+
});
|
|
520
|
+
}
|
|
521
|
+
notificationList() {
|
|
522
|
+
this.notificationDetails = [];
|
|
523
|
+
let data = this.clientId;
|
|
524
|
+
this.PaymentSubscriptionService.getNotification(data).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
525
|
+
if (res && res.code == 200) {
|
|
526
|
+
this.notificationDetails = res.data;
|
|
527
|
+
this.notificationDetails.notificationList.forEach((item) => {
|
|
528
|
+
item.producttraildropDown = false;
|
|
529
|
+
});
|
|
530
|
+
// this.currentPlan = res.data.currentPlan;
|
|
531
|
+
this.changeDetector.detectChanges();
|
|
532
|
+
}
|
|
533
|
+
});
|
|
534
|
+
}
|
|
535
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UpgradePlanComponent, deps: [{ token: i1.NgbModal }, { token: i1.NgbActiveModal }, { token: i2.ToastService }, { token: i3.PaymentSubscriptionService }, { token: i0.ChangeDetectorRef }, { token: i4.GlobalStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
536
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: UpgradePlanComponent, selector: "lib-upgrade-plan", inputs: { clientId: "clientId" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, ngImport: i0, template: "<div *ngIf=\"showMainContent\">\r\n<section *ngIf=\"subscription === 'pricingplan'\">\r\n <div *ngIf=\"showNavGroup\" class=\"nav-group nav-group-outline mx-auto mt-8 d-flex justify-content-center\">\r\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3 me-2\"\r\n [ngClass]=\"clientInfo?.currentPlanInfo?.subscriptionPeriod === 'monthly' ? 'activePlanBtn':'inactivePlanBtn'\"\r\n data-kt-plan=\"month\" (click)=\"selectPlan('monthly')\">\r\n Monthly\r\n </button>\r\n\r\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3\"\r\n [ngClass]=\"clientInfo?.currentPlanInfo?.subscriptionPeriod === 'quarterly'? 'activePlanBtn':'inactivePlanBtn'\"\r\n data-kt-plan=\"Quarterly\" (click)=\"selectPlan('quarterly')\">\r\n Quarterly - 10%\r\n </button>\r\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3\"\r\n [ngClass]=\"clientInfo?.currentPlanInfo?.subscriptionPeriod === 'annual'? 'activePlanBtn':'inactivePlanBtn'\"\r\n data-kt-plan=\"annual\" (click)=\"selectPlan('annual')\">\r\n Annual - 15%\r\n </button>\r\n\r\n </div>\r\n\r\n <div class=\"modal-body row \">\r\n\r\n <div class=\"d-flex justify-content-between\">\r\n <div class=\"d-flex justify-content-start flex-column\">\r\n <div class=\"pricingtext mb-1\">{{clientInfo?.currentPlanInfo?.subscriptionType | titlecase}}</div>\r\n <div class=\"semi mb-2\">Integrated Solution for Growing Business</div>\r\n </div>\r\n <div>\r\n <div class=\"d-flex justify-content-start flex-column\">\r\n <div class=\"sub1text mb-1\">Starts from <span class=\"billedtext ms-2\"><s><span\r\n *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'inr'\">\u20B9</span><span\r\n *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'dollar'\">$</span>{{originalPrice}}</s></span><span\r\n class=\"billingtext ms-4\"><span\r\n *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'inr'\">\u20B9</span><span\r\n *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'dollar'\">$</span>{{clientInfo?.currentPlanInfo?.price\r\n || 0}}</span></div>\r\n <div class=\"sub1text mb-2 text-end\">Per store Per month</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!showStoreSelection\" class=\"card-body p-0 mt-4\">\r\n <ng-container *ngIf=\"loading\">\r\n <div\r\n class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"noData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-25\"\r\n src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!loading && !noData\" class=\"table-responsive\">\r\n <table class=\"table bottom-border\">\r\n <thead>\r\n <tr>\r\n <th>Product Info</th>\r\n <th>\r\n <div (click)=\"sortStoreSize()\">\r\n Price\r\n <span class=\"cursor-pointer\"\r\n *ngIf=\"sortBy !== 1\">\r\n <svg width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span class=\"cursor-pointer\"\r\n *ngIf=\"sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </th>\r\n <th></th>\r\n <th>Plan Info</th>\r\n \r\n </tr>\r\n </thead>\r\n <tbody *ngFor=\"let product of clientInfo?.currentPlanInfo?.product;let i=index;\">\r\n <tr>\r\n <td>\r\n <div class=\"table-title subscribedtext text-primary\">\r\n {{convertUpper(product?.productName) || '--'}}\r\n </div>\r\n <div class=\"semi\">{{product?.storeCount\r\n || 0}} stores</div>\r\n </td>\r\n\r\n <td>\r\n <div class=\"semi\">\u20B9 {{(product?.price\r\n || 0) ?.toLocaleString('en-IN')}}</div>\r\n\r\n </td>\r\n <td></td>\r\n <td>\r\n <span *ngIf=\"product?.status ==='live'\" class=\"badge-light-success\">\r\n Subscribed\r\n </span>\r\n <button *ngIf=\"!showSubscribe && product?.status ==='trial'\" type=\"button\" tabindex=\"0\" (click)=\"subscribeproduct(product, 'subscription')\"\r\n \r\n class=\"btn btn-primary ms-2 ng-star-inserted btn-block\" style=\"white-space: nowrap;\"\r\n ><span class=\"submit\">Subscribe Now </span></button>\r\n \r\n \r\n <!-- *ngIf=\"clientInfo?.billingDetails?.billingAddress\" -->\r\n <button *ngIf=\"!showsubscription && !product?.status\" (click)=\"showStoreSelection = true;selectedProduct=product.productName\" type=\"button\" tabindex=\"0\"\r\n class=\"btn btn-primary ms-2 ng-star-inserted w-50 btn-block\" style=\"white-space: nowrap;\"\r\n ><span class=\"submit\">Start Trail </span></button>\r\n \r\n </td>\r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- <div class=\"col-lg-6 pe-8 vertical\">\r\n\r\n <div class=\"d-flex flex-column fv-row fv-plugins-icon-container\">\r\n <div class=\"py-2\">\r\n <label class=\"headingtext mb-3\">No of Stores </label>\r\n <div class=\"position-relative \">\r\n <div class=\"form-select dropselect levelviewtext\" id=\"currency\"\r\n (click)=\"noofstoresDropdown($event)\" aria-label=\"Default select example\">\r\n {{clientInfo?.currentPlanInfo?.totalStores ||\r\n noofstorestype[0]}}</div>\r\n <div *ngIf=\"noofstoresdropDown\" class=\"card py-2 w-100 position-absolute end-0 z-1\">\r\n <ul *ngFor=\"let noofstores of noofstorestype\" class=\"list-unstyled mb-2\">\r\n <li [ngClass]=\"clientInfo?.currentPlanInfo?.totalStores === noofstores ? 'active' : ''\"\r\n class=\"producttext px-5 items cursor-pointer py-4\"\r\n (click)=\"noofstoresdata(noofstores)\">\r\n {{ noofstores }}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"py-2\">\r\n <label class=\"headingtext mb-3\">Average Size of Stores </label>\r\n <div class=\"position-relative \">\r\n <div class=\"form-select dropselect levelviewtext\" id=\"currency\"\r\n (click)=\"AvgstoresDropdown($event)\" aria-label=\"Default select example\">\r\n {{clientInfo?.currentPlanInfo?.storeSize ||\r\n Avgstorestype[0].value}}</div>\r\n <div *ngIf=\"AvgstoresdropDown\" class=\"card py-2 w-100 position-absolute end-0 z-1\">\r\n <ul *ngFor=\"let Avgstores of Avgstorestype\" class=\"list-unstyled mb-2\">\r\n <li [ngClass]=\"clientInfo?.currentPlanInfo?.storeSize === Avgstores ? 'active' : ''\"\r\n class=\"producttext px-5 items cursor-pointer py-4\"\r\n (click)=\"Avgstoresdata(Avgstores.value)\">\r\n {{Avgstores.name}}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"maxcam mt-2\">\r\n Maximum {{clientInfo?.currentPlanInfo?.totalCamera}} Cameras are permitted in stores with square\r\n feet between {{clientInfo?.currentPlanInfo?.storeSize}}.\r\n </div>\r\n </div>\r\n\r\n <div class=\"selecttext my-5 mt-12\">Select Products</div>\r\n\r\n <div *ngFor=\"let productlist of clientInfo?.currentPlanInfo?.product\"\r\n class=\"form-check form-switch d-flex justify-content-between mt-6\">\r\n <div>\r\n <span><input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" id=\"tangorevop\"\r\n [checked]=\"productlist.active === true\"\r\n (change)=\"updateProduct($event,productlist.productName)\"\r\n [disabled]=\"productlist.status === 'live' || productlist.status === 'trial' \"></span>\r\n <label for=\"flexSwitchCheckDefault\"\r\n class=\"form-check-label headingtext d-flex\">{{productlist.aliseProductName}}\r\n <span [class]=\"getColorClass(productlist.toolTip)\">\r\n {{productlist.toolTip}} <span\r\n *ngIf=\"expiredProducts.length && productlist.productName.includes(expiredProducts)\"><img\r\n class=\"ms-2\" src=\"./assets/tango/custompopup-Icons/clockexpiry-icon.svg\" alt=\"\">\r\n </span> <span\r\n *ngIf=\"trialproducts.length && productlist.productName.includes(trialproducts)\">\r\n <img class=\"ms-2\" src=\"./assets/tango/custompopup-Icons/primary-clock-icon.svg\" alt=\"\">\r\n </span>\r\n </span>\r\n </label>\r\n </div>\r\n <span class=\"view\" (click)=\"showInfo(productlist.productName)\">View Info <svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"14\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M9 6.5V9.5C9 9.76522 8.89464 10.0196 8.70711 10.2071C8.51957 10.3946 8.26522 10.5 8 10.5H2.5C2.23478 10.5 1.98043 10.3946 1.79289 10.2071C1.60536 10.0196 1.5 9.76522 1.5 9.5V4C1.5 3.73478 1.60536 3.48043 1.79289 3.29289C1.98043 3.10536 2.23478 3 2.5 3H5.5M7.5 1.5H10.5M10.5 1.5V4.5M10.5 1.5L5 7\"\r\n stroke=\"#009BF3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </div>\r\n\r\n\r\n\r\n\r\n </div>\r\n <div class=\"col-lg-6 px-8\">\r\n <div class=\"pb-6\">\r\n\r\n <div class=\"pricingtext\">{{clientInfo?.currentPlanInfo?.subscriptionType | titlecase}}</div>\r\n\r\n <div class=\"semi mt-2\">\r\n Integrated Solution for Growing Business\r\n </div>\r\n <div class=\"d-flex\"><span class=\"me-3 mt-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2231_42342)\">\r\n <path\r\n d=\"M7.99967 10.6673V8.00065M7.99967 5.33398H8.00634M14.6663 8.00065C14.6663 11.6826 11.6816 14.6673 7.99967 14.6673C4.31778 14.6673 1.33301 11.6826 1.33301 8.00065C1.33301 4.31875 4.31778 1.33398 7.99967 1.33398C11.6816 1.33398 14.6663 4.31875 14.6663 8.00065Z\"\r\n stroke=\"#B54708\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2231_42342\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n <div class=\"subtext mt-6\">You will only be charged for < Tango Traffic,Tango <br>Zone & Tango RevOps >\r\n </div>\r\n </div>\r\n <div class=\"sub1text mt-5\">Starts from <span class=\"billedtext ms-2\"><s><span\r\n *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'inr'\">\u20B9</span><span\r\n *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'dollar'\">$</span>{{originalPrice}}</s></span><span\r\n class=\"billingtext ms-4\"><span\r\n *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'inr'\">\u20B9</span><span\r\n *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'dollar'\">$</span>{{clientInfo?.currentPlanInfo?.price\r\n || 0}}</span></div>\r\n <div class=\"sub1text mt-2\">Per store Per month</div>\r\n\r\n </div>\r\n <div class=\"detailstext\">Billing Details</div>\r\n\r\n <div class=\"sub1text py-4\">\r\n <div class=\"mb-4\">Brand Name: {{clientInfo?.clientName}}</div>\r\n <div>Billing Address: {{clientInfo?.billingDetails?.billingAddress || '--'}}</div>\r\n </div>\r\n <div class=\"d-flex justify-content-end subscribe\">\r\n <button (click)=\"update()\" type=\"button\" tabindex=\"0\"\r\n class=\"btn btn-primary ms-2 ng-star-inserted w-100 btn-block text-nowrap\"\r\n *ngIf=\"!clientInfo?.billingDetails?.billingAddress\"><span class=\"submit\">Enter\r\n Billing Details </span></button>\r\n <button (click)=\"confirmation()\" type=\"button\" tabindex=\"0\"\r\n *ngIf=\"clientInfo?.billingDetails?.billingAddress\"\r\n class=\"btn btn-primary ms-2 ng-star-inserted w-100 btn-block\" style=\"white-space: nowrap;\"\r\n [disabled]=\"disableBtn\"><span class=\"submit\">Subscribe Now </span></button>\r\n </div>\r\n\r\n </div> -->\r\n </div>\r\n<div *ngIf=\"showStoreSelection\" class=\"px-8\">\r\n <div class=\"my-5 dropdown1 cursor-pointer h-700\" *ngFor=\"let item of dataObject; let i = index\">\r\n <label for=\"storeList\" class=\"form-label\">Select Stores</label>\r\n <input type=\"text\" class=\"form-control disable\" id=\"storeName\" [ngModel]=\"selectedText\" [ngModelOptions]=\"{standalone: true}\"\r\n placeholder=\"Select Stores\" (click)=\"Dropdown('Stores',i,$event)\" readonly>\r\n <div *ngIf=\"item.isOpen\" class=\"dropdown-content position-absolute\">\r\n <div class=\"form-check d-flex align-items-center pt-3 px-5\">\r\n <input class=\"form-check-input\" type=\"checkbox\" value=\"Select All\" id=\"selectall{{i}}\"\r\n [checked]=\"selectedValuesArray[i]?.length === item.Stores.length\"\r\n (change)=\"toggleCheckbox($event,'Select All', i,0)\">\r\n <label class=\"form-check-label px-3\" for=\"selectall{{i}}\">\r\n Select All\r\n </label>\r\n </div>\r\n <div class=\"border border-gray mt-3\"></div>\r\n <div class=\"mt-3 d-flex align-items-center mx-3\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3 mt-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\">\r\n <path d=\"M14 14.5L11.1 11.6M12.6667 7.83333C12.6667 10.7789 10.2789 13.1667 7.33333 13.1667C4.38781 13.1667 2 10.7789 2 7.83333C2 4.88781 4.38781 2.5 7.33333 2.5C10.2789 2.5 12.6667 4.88781 12.6667 7.83333Z\" stroke=\"#667085\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <input #searchInput type=\"text\" id=\"searchValue\" name=\"searchValue\" class=\"form-control searchinput ps-14 py-2 me-2 mt-2\"\r\nplaceholder=\"Search\" autocomplete=\"off\" [(ngModel)]=\"searchValue\" [ngModelOptions]=\"{standalone: true}\"/>\r\n </div>\r\n <div *ngFor=\"let store of searchData(item.Stores,i);let j=index;\"\r\n class=\"form-check d-flex align-items-center py-3 px-5\">\r\n <input class=\"form-check-input cursor-pointer\" type=\"checkbox\" [value]=\"store?.storeName\"\r\n id=\"option{{store?.storeName}}\" [checked]=\"store?.checked\" \r\n (change)=\"toggleCheckbox($event,store,i,j)\">\r\n <label class=\"form-check-label px-3 cursor-pointer\" for=\"option{{store?.storeName}}\">\r\n {{ store?.storeName }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- *ngIf=\"clientInfo?.billingDetails?.billingAddress\" -->\r\n <!-- (click)=\"confirmation()\" -->\r\n \r\n <button (click)=\"startTrial(selectedProduct, 'trial')\" type=\"button\" tabindex=\"0\"\r\n class=\"btn btn-primary ng-star-inserted btn-block w-100 mb-8\" style=\"white-space: nowrap;\" [disabled]=\"!selectedValuesArray[0]?.length\"\r\n ><span class=\"submit\">Start Trail</span></button>\r\n\r\n</div>\r\n</section>\r\n\r\n\r\n\r\n</div>\r\n<div *ngIf=\"showPopuptrail\" class=\"modal-content gifimage\">\r\n <div class=\"p-6\">\r\n <div><span><svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#D1FADF\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#ECFDF3\" stroke-width=\"8\"/>\r\n <path d=\"M38 27.0799V27.9999C37.9988 30.1563 37.3005 32.2545 36.0093 33.9817C34.7182 35.7088 32.9033 36.9723 30.8354 37.5838C28.7674 38.1952 26.5573 38.1218 24.5345 37.3744C22.5117 36.6271 20.7847 35.246 19.611 33.4369C18.4373 31.6279 17.8798 29.4879 18.0217 27.3362C18.1636 25.1844 18.9972 23.1362 20.3983 21.4969C21.7994 19.8577 23.6928 18.7152 25.7962 18.24C27.8996 17.7648 30.1003 17.9822 32.07 18.8599M38 19.9999L28 30.0099L25 27.0099\" stroke=\"#039855\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span></div>\r\n <div class=\"heading mt-4 ms-1\">Trail Started Successfully</div>\r\n <div class=\"d-flex flex-column fv-row fv-plugins-icon-container\">\r\n <div class=\"semi my-3 mx-2\">Your Trail has been successfully activated.\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-flex mt-2 py-2\">\r\n <button type=\"button\" tabindex=\"0\" class=\"btn btn-primary px-4 ng-star-inserted w-100\"\r\n (click)=\"closePopupAndReloadData()\" style=\"white-space: nowrap;\">\r\n <span class=\"submit\">Okay</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"showPopupsubscribed\" class=\"modal-content gifimage\">\r\n <div class=\"p-6\">\r\n <div><span><svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#D1FADF\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#ECFDF3\" stroke-width=\"8\"/>\r\n <path d=\"M38 27.0799V27.9999C37.9988 30.1563 37.3005 32.2545 36.0093 33.9817C34.7182 35.7088 32.9033 36.9723 30.8354 37.5838C28.7674 38.1952 26.5573 38.1218 24.5345 37.3744C22.5117 36.6271 20.7847 35.246 19.611 33.4369C18.4373 31.6279 17.8798 29.4879 18.0217 27.3362C18.1636 25.1844 18.9972 23.1362 20.3983 21.4969C21.7994 19.8577 23.6928 18.7152 25.7962 18.24C27.8996 17.7648 30.1003 17.9822 32.07 18.8599M38 19.9999L28 30.0099L25 27.0099\" stroke=\"#039855\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span></div>\r\n <div class=\"heading mt-4 ms-1\">Subscribed Successfully</div>\r\n <div class=\"d-flex flex-column fv-row fv-plugins-icon-container\">\r\n \r\n <div class=\"semi my-3 mx-2\">Your {{message}} subscription has been successfully activated. You will be billed monthly starting from today.\r\n <!-- <ul class=\"mt-4\">\r\n <li *ngFor=\"let product of confirmedProducts\">{{product}}</li>\r\n </ul> -->\r\n </div>\r\n </div>\r\n \r\n <div class=\"d-flex mt-2 py-2\">\r\n <button type=\"button\" tabindex=\"0\" class=\"btn btn-primary px-4 ng-star-inserted w-100\"\r\n (click)=\"closePopupAndReloadData()\" style=\"white-space: nowrap;\">\r\n <span class=\"submit\">Okay</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>", styles: [".tabchange{align-items:center;gap:8px;padding:1% 25%}.pricingtext{color:var(--Gray-900, #101828);font-family:Inter;font-size:20px;font-weight:600;line-height:30px}.semi{color:var(--Gray-500, #667085);font-family:Inter;font-size:14px;font-weight:400;line-height:20px}.subtext{color:var(--Error-700, #B42318);font-family:Inter;font-size:12px;font-weight:400;line-height:18px}.billingtext{color:var(--Primary-700, #009BF3);font-family:Inter;font-size:24px;font-weight:600;line-height:32px}.billedtext{color:var(--Primary-700, #009BF3);font-family:Inter;font-size:18px;font-weight:600;line-height:32px;text-decoration-line:\"strikethrough\"}.sub1text{color:var(--Gray-500, #667085);font-family:Inter;font-size:14px;font-weight:400;line-height:20px}.detailstext{color:var(--Gray-500, #667085);font-family:Inter;font-size:18px;font-weight:600;line-height:28px}.maxcam{color:var(--Primary-800, #008EDF);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.selecttext{color:#000;font-family:Inter;font-size:16px;font-weight:500;line-height:24px}.activePlanBtn{border-radius:6px;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a!important;color:var(--Gray-700, #344054);font-size:14px!important;font-weight:500!important;line-height:20px}.inactivePlanBtn{color:var(--Gray-500, #667085)!important;font-size:14px;font-weight:500!important;line-height:20px}.nav-group{background:var(--Gray-50, #F9FAFB)!important;border-radius:8px!important;border:1px solid var(--Gray-100, #F2F4F7)!important;width:fit-content}.form-check-label{color:var(--Gray-700, #344054)!important}.view{color:var(--Primary-700, #009BF3);font-family:Inter;font-size:12px;font-weight:500;line-height:18px;cursor:pointer}.modal-body{padding:4%!important}.vertical{border-right:1px solid var(--Gray-200, #EAECF0)}.subscribe{margin-top:45%}.items:hover,.tems.focus,.items.active,.camera.focus-visible{background:var(--Gray-50, #F9FAFB)}.dropselect{color:var(--Gray-500, #667085);font-family:Inter;font-size:16px;font-style:normal;font-weight:400;line-height:24px;height:45px!important}.producttext{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.heading{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.contenttext{color:var(--Gray-500, #667085);font-family:Inter;font-size:14px;font-style:normal;font-weight:400;line-height:20px}.gifimage{background-size:cover;height:100%}.dropdown1 .dropdown-title{color:var(--Gray-900, #101828);font-size:16px;font-weight:600;line-height:24px}.dropdown1 .dropdown{position:relative;display:inline-block}.dropdown1 .dropdown span{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;line-height:20px}.dropdown1 .dropdown-content{z-index:1;padding:0;min-height:auto;max-height:285px;overflow:auto;border-radius:12px;background:var(--White, #FFF);box-shadow:0 8px 8px -4px #10182808,0 20px 24px -4px #10182814;width:89%}.dropdown1 .dropdown-content label{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.dropdown1 .dropdown-content a{color:#000;padding:12px 16px;text-decoration:none;display:block}.dropdown1 .dropdown button{padding:10px;font-size:16px;cursor:pointer}.dropdown1 input[type=checkbox]{width:16px!important;height:16px!important;margin:-3px 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}.dropdown1 input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}.dropdown1 input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}\n"], dependencies: [{ 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: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i5.TitleCasePipe, name: "titlecase" }] });
|
|
209
537
|
}
|
|
210
538
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UpgradePlanComponent, decorators: [{
|
|
211
539
|
type: Component,
|
|
212
|
-
args: [{ selector: 'lib-upgrade-plan', template: "<section *ngIf=\"subscription === 'pricingplan'\">\r\n <div *ngIf=\"showNavGroup\" class=\"nav-group nav-group-outline mx-auto mt-8 d-flex justify-content-center\">\r\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3 me-2\"\r\n [ngClass]=\"clientInfo?.currentPlanInfo?.subscriptionPeriod === 'monthly' ? 'activePlanBtn':'inactivePlanBtn'\"\r\n data-kt-plan=\"month\" (click)=\"selectPlan('monthly')\">\r\n Monthly\r\n </button>\r\n\r\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3\"\r\n [ngClass]=\"clientInfo?.currentPlanInfo?.subscriptionPeriod === 'quarterly'? 'activePlanBtn':'inactivePlanBtn'\"\r\n data-kt-plan=\"Quarterly\" (click)=\"selectPlan('quarterly')\">\r\n Quarterly - 10%\r\n </button>\r\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3\"\r\n [ngClass]=\"clientInfo?.currentPlanInfo?.subscriptionPeriod === 'annual'? 'activePlanBtn':'inactivePlanBtn'\"\r\n data-kt-plan=\"annual\" (click)=\"selectPlan('annual')\">\r\n Annual - 15%\r\n </button>\r\n\r\n</div>\r\n\r\n<div class=\"modal-body row \">\r\n <div class=\"col-lg-6 pe-8 vertical\">\r\n\r\n <div class=\"d-flex flex-column fv-row fv-plugins-icon-container\">\r\n <div class=\"py-2\">\r\n <label class=\"headingtext mb-3\">No of Stores </label>\r\n <div class=\"position-relative \">\r\n <div class=\"form-select dropselect levelviewtext\" id=\"currency\" (click)=\"noofstoresDropdown($event)\"\r\n aria-label=\"Default select example\">{{clientInfo?.currentPlanInfo?.totalStores ||\r\n noofstorestype[0]}}</div>\r\n <div *ngIf=\"noofstoresdropDown\" class=\"card py-2 w-100 position-absolute end-0 z-1\">\r\n <ul *ngFor=\"let noofstores of noofstorestype\" class=\"list-unstyled mb-2\">\r\n <li [ngClass]=\"clientInfo?.currentPlanInfo?.totalStores === noofstores ? 'active' : ''\"\r\n class=\"producttext px-5 items cursor-pointer py-4\" (click)=\"noofstoresdata(noofstores)\">\r\n {{ noofstores }}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"py-2\">\r\n <label class=\"headingtext mb-3\">Average Size of Stores </label>\r\n <div class=\"position-relative \">\r\n <div class=\"form-select dropselect levelviewtext\" id=\"currency\" (click)=\"AvgstoresDropdown($event)\"\r\n aria-label=\"Default select example\">{{clientInfo?.currentPlanInfo?.storeSize ||\r\n Avgstorestype[0].value}}</div>\r\n <div *ngIf=\"AvgstoresdropDown\" class=\"card py-2 w-100 position-absolute end-0 z-1\">\r\n <ul *ngFor=\"let Avgstores of Avgstorestype\" class=\"list-unstyled mb-2\">\r\n <li [ngClass]=\"clientInfo?.currentPlanInfo?.storeSize === Avgstores ? 'active' : ''\"\r\n class=\"producttext px-5 items cursor-pointer py-4\" (click)=\"Avgstoresdata(Avgstores.value)\">\r\n {{Avgstores.name}}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"maxcam mt-2\">\r\n Maximum {{clientInfo?.currentPlanInfo?.totalCamera}} Cameras are permitted in stores with square feet between {{clientInfo?.currentPlanInfo?.storeSize}}.\r\n </div>\r\n </div>\r\n\r\n <div class=\"selecttext my-5 mt-12\">Select Products</div>\r\n\r\n <div *ngFor=\"let productlist of clientInfo?.currentPlanInfo?.product\" class=\"form-check form-switch d-flex justify-content-between mt-6\">\r\n <div>\r\n <span><input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" id=\"tangorevop\"\r\n [checked]=\"productlist.active === true\" (change)=\"updateProduct($event,productlist.productName)\" [disabled]=\"productlist.status === 'live' || productlist.status === 'trial' \"></span>\r\n <label for=\"flexSwitchCheckDefault\"\r\n class=\"form-check-label headingtext d-flex\">{{productlist.aliseProductName}} \r\n <span [class]=\"getColorClass(productlist.toolTip)\">\r\n {{productlist.toolTip}} <span *ngIf=\"expiredProducts.length && productlist.productName.includes(expiredProducts)\"><img class=\"ms-2\" src=\"./assets/tango/custompopup-Icons/clockexpiry-icon.svg\" alt=\"\"> \r\n </span> <span *ngIf=\"trialproducts.length && productlist.productName.includes(trialproducts)\">\r\n <img class=\"ms-2\" src=\"./assets/tango/custompopup-Icons/primary-clock-icon.svg\" alt=\"\"> \r\n </span>\r\n </span>\r\n </label>\r\n </div>\r\n <span class=\"view\" (click)=\"showInfo(productlist.productName)\">View Info <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"14\"\r\n viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M9 6.5V9.5C9 9.76522 8.89464 10.0196 8.70711 10.2071C8.51957 10.3946 8.26522 10.5 8 10.5H2.5C2.23478 10.5 1.98043 10.3946 1.79289 10.2071C1.60536 10.0196 1.5 9.76522 1.5 9.5V4C1.5 3.73478 1.60536 3.48043 1.79289 3.29289C1.98043 3.10536 2.23478 3 2.5 3H5.5M7.5 1.5H10.5M10.5 1.5V4.5M10.5 1.5L5 7\"\r\n stroke=\"#009BF3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </div>\r\n\r\n\r\n\r\n\r\n </div>\r\n <div class=\"col-lg-6 px-8\">\r\n <div class=\"pb-6\">\r\n\r\n <div class=\"pricingtext\">{{clientInfo?.currentPlanInfo?.subscriptionType | titlecase}}</div>\r\n\r\n <div class=\"semi mt-2\">\r\n Integrated Solution for Growing Business\r\n </div>\r\n <!-- <div class=\"d-flex\"><span class=\"me-3 mt-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2231_42342)\">\r\n <path\r\n d=\"M7.99967 10.6673V8.00065M7.99967 5.33398H8.00634M14.6663 8.00065C14.6663 11.6826 11.6816 14.6673 7.99967 14.6673C4.31778 14.6673 1.33301 11.6826 1.33301 8.00065C1.33301 4.31875 4.31778 1.33398 7.99967 1.33398C11.6816 1.33398 14.6663 4.31875 14.6663 8.00065Z\"\r\n stroke=\"#B54708\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2231_42342\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n <div class=\"subtext mt-6\">You will only be charged for < Tango Traffic,Tango <br>Zone & Tango RevOps >\r\n </div>\r\n </div> -->\r\n <div class=\"sub1text mt-5\">Starts from <span class=\"billedtext ms-2\"><s><span *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'inr'\">\u20B9</span><span *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'dollar'\">$</span>{{originalPrice}}</s></span><span\r\n class=\"billingtext ms-4\"><span *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'inr'\">\u20B9</span><span\r\n *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'dollar'\">$</span>{{clientInfo?.currentPlanInfo?.price || 0}}</span></div>\r\n <div class=\"sub1text mt-2\">Per store Per month</div>\r\n\r\n </div>\r\n <div class=\"detailstext\">Billing Details</div>\r\n\r\n <div class=\"sub1text py-4\">\r\n <div class=\"mb-4\">Brand Name: {{clientInfo?.clientName}}</div>\r\n <div>Billing Address: {{clientInfo?.billingDetails?.billingAddress || '--'}}</div>\r\n </div>\r\n <div class=\"d-flex justify-content-end subscribe\"> \r\n <button (click)=\"update()\" type=\"button\" tabindex=\"0\"\r\n class=\"btn btn-primary ms-2 ng-star-inserted w-100 btn-block text-nowrap\" *ngIf=\"!clientInfo?.billingDetails?.billingAddress\"><span class=\"submit\">Enter\r\n Billing Details </span></button>\r\n <button (click)=\"confirmation()\" type=\"button\" tabindex=\"0\" *ngIf=\"clientInfo?.billingDetails?.billingAddress\"\r\n class=\"btn btn-primary ms-2 ng-star-inserted w-100 btn-block\" style=\"white-space: nowrap;\" [disabled]=\"disableBtn\"><span\r\n class=\"submit\">Subscribe Now </span></button>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n</section>\r\n\r\n<div *ngIf=\"subscription === 'confirmationmessage'\" class=\"modal-content gifimage\" >\r\n <div class=\"p-6\">\r\n <div><img src=\"./assets/tango/custompopup-Icons/check-icon.svg\" alt=\"\"></div>\r\n <div class=\"heading mt-4 ms-1\">Thanks for the subscription!</div>\r\n <div class=\"d-flex flex-column fv-row fv-plugins-icon-container\">\r\n \r\n <div class=\"contenttext mt-4 mx-2\">You have successfully subscribed to our products \r\n <ul class=\"mt-4\">\r\n <li *ngFor=\"let product of confirmedProducts\">{{product}}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n \r\n <div class=\"d-flex mt-2 py-2\">\r\n <button type=\"button\" tabindex=\"0\" class=\"btn btn-primary px-4 ng-star-inserted w-100\" (click)=\"closePopupAndReloadData()\" style=\"white-space: nowrap;\">\r\n <span class=\"submit\">Okay</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".tabchange{align-items:center;gap:8px;padding:1% 25%}.pricingtext{color:var(--Gray-900, #101828);font-family:Inter;font-size:20px;font-weight:600;line-height:30px}.semi{color:var(--Gray-500, #667085);font-family:Inter;font-size:14px;font-weight:400;line-height:20px}.subtext{color:var(--Error-700, #B42318);font-family:Inter;font-size:12px;font-weight:400;line-height:18px}.billingtext{color:var(--Primary-700, #009BF3);font-family:Inter;font-size:24px;font-weight:600;line-height:32px}.billedtext{color:var(--Primary-700, #009BF3);font-family:Inter;font-size:18px;font-weight:600;line-height:32px;text-decoration-line:\"strikethrough\"}.sub1text{color:var(--Gray-500, #667085);font-family:Inter;font-size:14px;font-weight:400;line-height:20px}.detailstext{color:var(--Gray-500, #667085);font-family:Inter;font-size:18px;font-weight:600;line-height:28px}.maxcam{color:var(--Primary-800, #008EDF);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.selecttext{color:#000;font-family:Inter;font-size:16px;font-weight:500;line-height:24px}.activePlanBtn{border-radius:6px;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a!important;color:var(--Gray-700, #344054);font-size:14px!important;font-weight:500!important;line-height:20px}.inactivePlanBtn{color:var(--Gray-500, #667085)!important;font-size:14px;font-weight:500!important;line-height:20px}.nav-group{background:var(--Gray-50, #F9FAFB)!important;border-radius:8px!important;border:1px solid var(--Gray-100, #F2F4F7)!important;width:fit-content}.form-check-label{color:var(--Gray-700, #344054)!important}.view{color:var(--Primary-700, #009BF3);font-family:Inter;font-size:12px;font-weight:500;line-height:18px;cursor:pointer}.modal-body{padding:4%!important}.vertical{border-right:1px solid var(--Gray-200, #EAECF0)}.subscribe{margin-top:45%}.items:hover,.tems.focus,.items.active,.camera.focus-visible{background:var(--Gray-50, #F9FAFB)}.dropselect{color:var(--Gray-500, #667085);font-family:Inter;font-size:16px;font-style:normal;font-weight:400;line-height:24px;height:45px!important}.producttext{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.heading{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.contenttext{color:var(--Gray-500, #667085);font-family:Inter;font-size:14px;font-style:normal;font-weight:400;line-height:20px}.gifimage{background-size:cover;height:100%}\n"] }]
|
|
213
|
-
}], ctorParameters: () => [{ type: i1.NgbModal }, { type: i1.NgbActiveModal }, { type: i2.ToastService }, { type: i3.PaymentSubscriptionService }, { type: i0.ChangeDetectorRef }], propDecorators: { clientId: [{
|
|
540
|
+
args: [{ selector: 'lib-upgrade-plan', template: "<div *ngIf=\"showMainContent\">\r\n<section *ngIf=\"subscription === 'pricingplan'\">\r\n <div *ngIf=\"showNavGroup\" class=\"nav-group nav-group-outline mx-auto mt-8 d-flex justify-content-center\">\r\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3 me-2\"\r\n [ngClass]=\"clientInfo?.currentPlanInfo?.subscriptionPeriod === 'monthly' ? 'activePlanBtn':'inactivePlanBtn'\"\r\n data-kt-plan=\"month\" (click)=\"selectPlan('monthly')\">\r\n Monthly\r\n </button>\r\n\r\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3\"\r\n [ngClass]=\"clientInfo?.currentPlanInfo?.subscriptionPeriod === 'quarterly'? 'activePlanBtn':'inactivePlanBtn'\"\r\n data-kt-plan=\"Quarterly\" (click)=\"selectPlan('quarterly')\">\r\n Quarterly - 10%\r\n </button>\r\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3\"\r\n [ngClass]=\"clientInfo?.currentPlanInfo?.subscriptionPeriod === 'annual'? 'activePlanBtn':'inactivePlanBtn'\"\r\n data-kt-plan=\"annual\" (click)=\"selectPlan('annual')\">\r\n Annual - 15%\r\n </button>\r\n\r\n </div>\r\n\r\n <div class=\"modal-body row \">\r\n\r\n <div class=\"d-flex justify-content-between\">\r\n <div class=\"d-flex justify-content-start flex-column\">\r\n <div class=\"pricingtext mb-1\">{{clientInfo?.currentPlanInfo?.subscriptionType | titlecase}}</div>\r\n <div class=\"semi mb-2\">Integrated Solution for Growing Business</div>\r\n </div>\r\n <div>\r\n <div class=\"d-flex justify-content-start flex-column\">\r\n <div class=\"sub1text mb-1\">Starts from <span class=\"billedtext ms-2\"><s><span\r\n *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'inr'\">\u20B9</span><span\r\n *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'dollar'\">$</span>{{originalPrice}}</s></span><span\r\n class=\"billingtext ms-4\"><span\r\n *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'inr'\">\u20B9</span><span\r\n *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'dollar'\">$</span>{{clientInfo?.currentPlanInfo?.price\r\n || 0}}</span></div>\r\n <div class=\"sub1text mb-2 text-end\">Per store Per month</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!showStoreSelection\" class=\"card-body p-0 mt-4\">\r\n <ng-container *ngIf=\"loading\">\r\n <div\r\n class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"noData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-25\"\r\n src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!loading && !noData\" class=\"table-responsive\">\r\n <table class=\"table bottom-border\">\r\n <thead>\r\n <tr>\r\n <th>Product Info</th>\r\n <th>\r\n <div (click)=\"sortStoreSize()\">\r\n Price\r\n <span class=\"cursor-pointer\"\r\n *ngIf=\"sortBy !== 1\">\r\n <svg width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span class=\"cursor-pointer\"\r\n *ngIf=\"sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </th>\r\n <th></th>\r\n <th>Plan Info</th>\r\n \r\n </tr>\r\n </thead>\r\n <tbody *ngFor=\"let product of clientInfo?.currentPlanInfo?.product;let i=index;\">\r\n <tr>\r\n <td>\r\n <div class=\"table-title subscribedtext text-primary\">\r\n {{convertUpper(product?.productName) || '--'}}\r\n </div>\r\n <div class=\"semi\">{{product?.storeCount\r\n || 0}} stores</div>\r\n </td>\r\n\r\n <td>\r\n <div class=\"semi\">\u20B9 {{(product?.price\r\n || 0) ?.toLocaleString('en-IN')}}</div>\r\n\r\n </td>\r\n <td></td>\r\n <td>\r\n <span *ngIf=\"product?.status ==='live'\" class=\"badge-light-success\">\r\n Subscribed\r\n </span>\r\n <button *ngIf=\"!showSubscribe && product?.status ==='trial'\" type=\"button\" tabindex=\"0\" (click)=\"subscribeproduct(product, 'subscription')\"\r\n \r\n class=\"btn btn-primary ms-2 ng-star-inserted btn-block\" style=\"white-space: nowrap;\"\r\n ><span class=\"submit\">Subscribe Now </span></button>\r\n \r\n \r\n <!-- *ngIf=\"clientInfo?.billingDetails?.billingAddress\" -->\r\n <button *ngIf=\"!showsubscription && !product?.status\" (click)=\"showStoreSelection = true;selectedProduct=product.productName\" type=\"button\" tabindex=\"0\"\r\n class=\"btn btn-primary ms-2 ng-star-inserted w-50 btn-block\" style=\"white-space: nowrap;\"\r\n ><span class=\"submit\">Start Trail </span></button>\r\n \r\n </td>\r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- <div class=\"col-lg-6 pe-8 vertical\">\r\n\r\n <div class=\"d-flex flex-column fv-row fv-plugins-icon-container\">\r\n <div class=\"py-2\">\r\n <label class=\"headingtext mb-3\">No of Stores </label>\r\n <div class=\"position-relative \">\r\n <div class=\"form-select dropselect levelviewtext\" id=\"currency\"\r\n (click)=\"noofstoresDropdown($event)\" aria-label=\"Default select example\">\r\n {{clientInfo?.currentPlanInfo?.totalStores ||\r\n noofstorestype[0]}}</div>\r\n <div *ngIf=\"noofstoresdropDown\" class=\"card py-2 w-100 position-absolute end-0 z-1\">\r\n <ul *ngFor=\"let noofstores of noofstorestype\" class=\"list-unstyled mb-2\">\r\n <li [ngClass]=\"clientInfo?.currentPlanInfo?.totalStores === noofstores ? 'active' : ''\"\r\n class=\"producttext px-5 items cursor-pointer py-4\"\r\n (click)=\"noofstoresdata(noofstores)\">\r\n {{ noofstores }}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"py-2\">\r\n <label class=\"headingtext mb-3\">Average Size of Stores </label>\r\n <div class=\"position-relative \">\r\n <div class=\"form-select dropselect levelviewtext\" id=\"currency\"\r\n (click)=\"AvgstoresDropdown($event)\" aria-label=\"Default select example\">\r\n {{clientInfo?.currentPlanInfo?.storeSize ||\r\n Avgstorestype[0].value}}</div>\r\n <div *ngIf=\"AvgstoresdropDown\" class=\"card py-2 w-100 position-absolute end-0 z-1\">\r\n <ul *ngFor=\"let Avgstores of Avgstorestype\" class=\"list-unstyled mb-2\">\r\n <li [ngClass]=\"clientInfo?.currentPlanInfo?.storeSize === Avgstores ? 'active' : ''\"\r\n class=\"producttext px-5 items cursor-pointer py-4\"\r\n (click)=\"Avgstoresdata(Avgstores.value)\">\r\n {{Avgstores.name}}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"maxcam mt-2\">\r\n Maximum {{clientInfo?.currentPlanInfo?.totalCamera}} Cameras are permitted in stores with square\r\n feet between {{clientInfo?.currentPlanInfo?.storeSize}}.\r\n </div>\r\n </div>\r\n\r\n <div class=\"selecttext my-5 mt-12\">Select Products</div>\r\n\r\n <div *ngFor=\"let productlist of clientInfo?.currentPlanInfo?.product\"\r\n class=\"form-check form-switch d-flex justify-content-between mt-6\">\r\n <div>\r\n <span><input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" id=\"tangorevop\"\r\n [checked]=\"productlist.active === true\"\r\n (change)=\"updateProduct($event,productlist.productName)\"\r\n [disabled]=\"productlist.status === 'live' || productlist.status === 'trial' \"></span>\r\n <label for=\"flexSwitchCheckDefault\"\r\n class=\"form-check-label headingtext d-flex\">{{productlist.aliseProductName}}\r\n <span [class]=\"getColorClass(productlist.toolTip)\">\r\n {{productlist.toolTip}} <span\r\n *ngIf=\"expiredProducts.length && productlist.productName.includes(expiredProducts)\"><img\r\n class=\"ms-2\" src=\"./assets/tango/custompopup-Icons/clockexpiry-icon.svg\" alt=\"\">\r\n </span> <span\r\n *ngIf=\"trialproducts.length && productlist.productName.includes(trialproducts)\">\r\n <img class=\"ms-2\" src=\"./assets/tango/custompopup-Icons/primary-clock-icon.svg\" alt=\"\">\r\n </span>\r\n </span>\r\n </label>\r\n </div>\r\n <span class=\"view\" (click)=\"showInfo(productlist.productName)\">View Info <svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"14\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M9 6.5V9.5C9 9.76522 8.89464 10.0196 8.70711 10.2071C8.51957 10.3946 8.26522 10.5 8 10.5H2.5C2.23478 10.5 1.98043 10.3946 1.79289 10.2071C1.60536 10.0196 1.5 9.76522 1.5 9.5V4C1.5 3.73478 1.60536 3.48043 1.79289 3.29289C1.98043 3.10536 2.23478 3 2.5 3H5.5M7.5 1.5H10.5M10.5 1.5V4.5M10.5 1.5L5 7\"\r\n stroke=\"#009BF3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </div>\r\n\r\n\r\n\r\n\r\n </div>\r\n <div class=\"col-lg-6 px-8\">\r\n <div class=\"pb-6\">\r\n\r\n <div class=\"pricingtext\">{{clientInfo?.currentPlanInfo?.subscriptionType | titlecase}}</div>\r\n\r\n <div class=\"semi mt-2\">\r\n Integrated Solution for Growing Business\r\n </div>\r\n <div class=\"d-flex\"><span class=\"me-3 mt-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2231_42342)\">\r\n <path\r\n d=\"M7.99967 10.6673V8.00065M7.99967 5.33398H8.00634M14.6663 8.00065C14.6663 11.6826 11.6816 14.6673 7.99967 14.6673C4.31778 14.6673 1.33301 11.6826 1.33301 8.00065C1.33301 4.31875 4.31778 1.33398 7.99967 1.33398C11.6816 1.33398 14.6663 4.31875 14.6663 8.00065Z\"\r\n stroke=\"#B54708\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2231_42342\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n <div class=\"subtext mt-6\">You will only be charged for < Tango Traffic,Tango <br>Zone & Tango RevOps >\r\n </div>\r\n </div>\r\n <div class=\"sub1text mt-5\">Starts from <span class=\"billedtext ms-2\"><s><span\r\n *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'inr'\">\u20B9</span><span\r\n *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'dollar'\">$</span>{{originalPrice}}</s></span><span\r\n class=\"billingtext ms-4\"><span\r\n *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'inr'\">\u20B9</span><span\r\n *ngIf=\"clientInfo?.currentPlanInfo?.currencyType === 'dollar'\">$</span>{{clientInfo?.currentPlanInfo?.price\r\n || 0}}</span></div>\r\n <div class=\"sub1text mt-2\">Per store Per month</div>\r\n\r\n </div>\r\n <div class=\"detailstext\">Billing Details</div>\r\n\r\n <div class=\"sub1text py-4\">\r\n <div class=\"mb-4\">Brand Name: {{clientInfo?.clientName}}</div>\r\n <div>Billing Address: {{clientInfo?.billingDetails?.billingAddress || '--'}}</div>\r\n </div>\r\n <div class=\"d-flex justify-content-end subscribe\">\r\n <button (click)=\"update()\" type=\"button\" tabindex=\"0\"\r\n class=\"btn btn-primary ms-2 ng-star-inserted w-100 btn-block text-nowrap\"\r\n *ngIf=\"!clientInfo?.billingDetails?.billingAddress\"><span class=\"submit\">Enter\r\n Billing Details </span></button>\r\n <button (click)=\"confirmation()\" type=\"button\" tabindex=\"0\"\r\n *ngIf=\"clientInfo?.billingDetails?.billingAddress\"\r\n class=\"btn btn-primary ms-2 ng-star-inserted w-100 btn-block\" style=\"white-space: nowrap;\"\r\n [disabled]=\"disableBtn\"><span class=\"submit\">Subscribe Now </span></button>\r\n </div>\r\n\r\n </div> -->\r\n </div>\r\n<div *ngIf=\"showStoreSelection\" class=\"px-8\">\r\n <div class=\"my-5 dropdown1 cursor-pointer h-700\" *ngFor=\"let item of dataObject; let i = index\">\r\n <label for=\"storeList\" class=\"form-label\">Select Stores</label>\r\n <input type=\"text\" class=\"form-control disable\" id=\"storeName\" [ngModel]=\"selectedText\" [ngModelOptions]=\"{standalone: true}\"\r\n placeholder=\"Select Stores\" (click)=\"Dropdown('Stores',i,$event)\" readonly>\r\n <div *ngIf=\"item.isOpen\" class=\"dropdown-content position-absolute\">\r\n <div class=\"form-check d-flex align-items-center pt-3 px-5\">\r\n <input class=\"form-check-input\" type=\"checkbox\" value=\"Select All\" id=\"selectall{{i}}\"\r\n [checked]=\"selectedValuesArray[i]?.length === item.Stores.length\"\r\n (change)=\"toggleCheckbox($event,'Select All', i,0)\">\r\n <label class=\"form-check-label px-3\" for=\"selectall{{i}}\">\r\n Select All\r\n </label>\r\n </div>\r\n <div class=\"border border-gray mt-3\"></div>\r\n <div class=\"mt-3 d-flex align-items-center mx-3\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3 mt-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\">\r\n <path d=\"M14 14.5L11.1 11.6M12.6667 7.83333C12.6667 10.7789 10.2789 13.1667 7.33333 13.1667C4.38781 13.1667 2 10.7789 2 7.83333C2 4.88781 4.38781 2.5 7.33333 2.5C10.2789 2.5 12.6667 4.88781 12.6667 7.83333Z\" stroke=\"#667085\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <input #searchInput type=\"text\" id=\"searchValue\" name=\"searchValue\" class=\"form-control searchinput ps-14 py-2 me-2 mt-2\"\r\nplaceholder=\"Search\" autocomplete=\"off\" [(ngModel)]=\"searchValue\" [ngModelOptions]=\"{standalone: true}\"/>\r\n </div>\r\n <div *ngFor=\"let store of searchData(item.Stores,i);let j=index;\"\r\n class=\"form-check d-flex align-items-center py-3 px-5\">\r\n <input class=\"form-check-input cursor-pointer\" type=\"checkbox\" [value]=\"store?.storeName\"\r\n id=\"option{{store?.storeName}}\" [checked]=\"store?.checked\" \r\n (change)=\"toggleCheckbox($event,store,i,j)\">\r\n <label class=\"form-check-label px-3 cursor-pointer\" for=\"option{{store?.storeName}}\">\r\n {{ store?.storeName }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- *ngIf=\"clientInfo?.billingDetails?.billingAddress\" -->\r\n <!-- (click)=\"confirmation()\" -->\r\n \r\n <button (click)=\"startTrial(selectedProduct, 'trial')\" type=\"button\" tabindex=\"0\"\r\n class=\"btn btn-primary ng-star-inserted btn-block w-100 mb-8\" style=\"white-space: nowrap;\" [disabled]=\"!selectedValuesArray[0]?.length\"\r\n ><span class=\"submit\">Start Trail</span></button>\r\n\r\n</div>\r\n</section>\r\n\r\n\r\n\r\n</div>\r\n<div *ngIf=\"showPopuptrail\" class=\"modal-content gifimage\">\r\n <div class=\"p-6\">\r\n <div><span><svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#D1FADF\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#ECFDF3\" stroke-width=\"8\"/>\r\n <path d=\"M38 27.0799V27.9999C37.9988 30.1563 37.3005 32.2545 36.0093 33.9817C34.7182 35.7088 32.9033 36.9723 30.8354 37.5838C28.7674 38.1952 26.5573 38.1218 24.5345 37.3744C22.5117 36.6271 20.7847 35.246 19.611 33.4369C18.4373 31.6279 17.8798 29.4879 18.0217 27.3362C18.1636 25.1844 18.9972 23.1362 20.3983 21.4969C21.7994 19.8577 23.6928 18.7152 25.7962 18.24C27.8996 17.7648 30.1003 17.9822 32.07 18.8599M38 19.9999L28 30.0099L25 27.0099\" stroke=\"#039855\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span></div>\r\n <div class=\"heading mt-4 ms-1\">Trail Started Successfully</div>\r\n <div class=\"d-flex flex-column fv-row fv-plugins-icon-container\">\r\n <div class=\"semi my-3 mx-2\">Your Trail has been successfully activated.\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-flex mt-2 py-2\">\r\n <button type=\"button\" tabindex=\"0\" class=\"btn btn-primary px-4 ng-star-inserted w-100\"\r\n (click)=\"closePopupAndReloadData()\" style=\"white-space: nowrap;\">\r\n <span class=\"submit\">Okay</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"showPopupsubscribed\" class=\"modal-content gifimage\">\r\n <div class=\"p-6\">\r\n <div><span><svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#D1FADF\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#ECFDF3\" stroke-width=\"8\"/>\r\n <path d=\"M38 27.0799V27.9999C37.9988 30.1563 37.3005 32.2545 36.0093 33.9817C34.7182 35.7088 32.9033 36.9723 30.8354 37.5838C28.7674 38.1952 26.5573 38.1218 24.5345 37.3744C22.5117 36.6271 20.7847 35.246 19.611 33.4369C18.4373 31.6279 17.8798 29.4879 18.0217 27.3362C18.1636 25.1844 18.9972 23.1362 20.3983 21.4969C21.7994 19.8577 23.6928 18.7152 25.7962 18.24C27.8996 17.7648 30.1003 17.9822 32.07 18.8599M38 19.9999L28 30.0099L25 27.0099\" stroke=\"#039855\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span></div>\r\n <div class=\"heading mt-4 ms-1\">Subscribed Successfully</div>\r\n <div class=\"d-flex flex-column fv-row fv-plugins-icon-container\">\r\n \r\n <div class=\"semi my-3 mx-2\">Your {{message}} subscription has been successfully activated. You will be billed monthly starting from today.\r\n <!-- <ul class=\"mt-4\">\r\n <li *ngFor=\"let product of confirmedProducts\">{{product}}</li>\r\n </ul> -->\r\n </div>\r\n </div>\r\n \r\n <div class=\"d-flex mt-2 py-2\">\r\n <button type=\"button\" tabindex=\"0\" class=\"btn btn-primary px-4 ng-star-inserted w-100\"\r\n (click)=\"closePopupAndReloadData()\" style=\"white-space: nowrap;\">\r\n <span class=\"submit\">Okay</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>", styles: [".tabchange{align-items:center;gap:8px;padding:1% 25%}.pricingtext{color:var(--Gray-900, #101828);font-family:Inter;font-size:20px;font-weight:600;line-height:30px}.semi{color:var(--Gray-500, #667085);font-family:Inter;font-size:14px;font-weight:400;line-height:20px}.subtext{color:var(--Error-700, #B42318);font-family:Inter;font-size:12px;font-weight:400;line-height:18px}.billingtext{color:var(--Primary-700, #009BF3);font-family:Inter;font-size:24px;font-weight:600;line-height:32px}.billedtext{color:var(--Primary-700, #009BF3);font-family:Inter;font-size:18px;font-weight:600;line-height:32px;text-decoration-line:\"strikethrough\"}.sub1text{color:var(--Gray-500, #667085);font-family:Inter;font-size:14px;font-weight:400;line-height:20px}.detailstext{color:var(--Gray-500, #667085);font-family:Inter;font-size:18px;font-weight:600;line-height:28px}.maxcam{color:var(--Primary-800, #008EDF);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.selecttext{color:#000;font-family:Inter;font-size:16px;font-weight:500;line-height:24px}.activePlanBtn{border-radius:6px;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a!important;color:var(--Gray-700, #344054);font-size:14px!important;font-weight:500!important;line-height:20px}.inactivePlanBtn{color:var(--Gray-500, #667085)!important;font-size:14px;font-weight:500!important;line-height:20px}.nav-group{background:var(--Gray-50, #F9FAFB)!important;border-radius:8px!important;border:1px solid var(--Gray-100, #F2F4F7)!important;width:fit-content}.form-check-label{color:var(--Gray-700, #344054)!important}.view{color:var(--Primary-700, #009BF3);font-family:Inter;font-size:12px;font-weight:500;line-height:18px;cursor:pointer}.modal-body{padding:4%!important}.vertical{border-right:1px solid var(--Gray-200, #EAECF0)}.subscribe{margin-top:45%}.items:hover,.tems.focus,.items.active,.camera.focus-visible{background:var(--Gray-50, #F9FAFB)}.dropselect{color:var(--Gray-500, #667085);font-family:Inter;font-size:16px;font-style:normal;font-weight:400;line-height:24px;height:45px!important}.producttext{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.heading{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.contenttext{color:var(--Gray-500, #667085);font-family:Inter;font-size:14px;font-style:normal;font-weight:400;line-height:20px}.gifimage{background-size:cover;height:100%}.dropdown1 .dropdown-title{color:var(--Gray-900, #101828);font-size:16px;font-weight:600;line-height:24px}.dropdown1 .dropdown{position:relative;display:inline-block}.dropdown1 .dropdown span{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;line-height:20px}.dropdown1 .dropdown-content{z-index:1;padding:0;min-height:auto;max-height:285px;overflow:auto;border-radius:12px;background:var(--White, #FFF);box-shadow:0 8px 8px -4px #10182808,0 20px 24px -4px #10182814;width:89%}.dropdown1 .dropdown-content label{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.dropdown1 .dropdown-content a{color:#000;padding:12px 16px;text-decoration:none;display:block}.dropdown1 .dropdown button{padding:10px;font-size:16px;cursor:pointer}.dropdown1 input[type=checkbox]{width:16px!important;height:16px!important;margin:-3px 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}.dropdown1 input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}.dropdown1 input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}\n"] }]
|
|
541
|
+
}], ctorParameters: () => [{ type: i1.NgbModal }, { type: i1.NgbActiveModal }, { type: i2.ToastService }, { type: i3.PaymentSubscriptionService }, { type: i0.ChangeDetectorRef }, { type: i4.GlobalStateService }], propDecorators: { clientId: [{
|
|
214
542
|
type: Input
|
|
215
543
|
}], onDocumentClick: [{
|
|
216
544
|
type: HostListener,
|
|
217
545
|
args: ['document:click', ['$event']]
|
|
218
546
|
}] } });
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBncmFkZS1wbGFuLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1zZXR0aW5ncy9zcmMvbGliL2NvbXBvbmVudHMvcGF5bWVudHMtc3Vic2NyaXB0aW9uL3N1YnNjcmlwdGlvbi1wb3B1cHMvdXBncmFkZS1wbGFuL3VwZ3JhZGUtcGxhbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL3BheW1lbnRzLXN1YnNjcmlwdGlvbi9zdWJzY3JpcHRpb24tcG9wdXBzL3VwZ3JhZGUtcGxhbi91cGdyYWRlLXBsYW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQWEsS0FBSyxFQUFVLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFHekcsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7OztBQU1qRixNQUFNLE9BQU8sb0JBQW9CO0lBMkJYO0lBQStCO0lBQXFDO0lBQTZCO0lBQWdFO0lBMUI1SyxRQUFRLENBQU87SUFDeEIsa0JBQWtCLEdBQVksS0FBSyxDQUFDO0lBQ3BDLGlCQUFpQixHQUFZLEtBQUssQ0FBQztJQUNuQyxjQUFjLEdBQVUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFB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LCBJbnB1dCwgT25Jbml0LCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVXBkYXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vdXBkYXRlL3VwZGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCwgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IFN1Y2Nlc3NmdWxsU3Vic2NyaXB0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vc3VjY2Vzc2Z1bGwtc3Vic2NyaXB0aW9uL3N1Y2Nlc3NmdWxsLXN1YnNjcmlwdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUcmFpbEV4cGlyZWRDb21wb25lbnQgfSBmcm9tICcuLi90cmFpbC1leHBpcmVkL3RyYWlsLWV4cGlyZWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uQXBwcm92YWxDb21wb25lbnQgfSBmcm9tICcuLi9zdWJzY3JpcHRpb24tYXBwcm92YWwvc3Vic2NyaXB0aW9uLWFwcHJvdmFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBQYXltZW50U3Vic2NyaXB0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtc3Vic2NyaXB0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTW9kYWxDb250ZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vbW9kZWwtY29udGVudC9tb2RlbC1jb250ZW50LmNvbXBvbmVudCc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXVwZ3JhZGUtcGxhbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VwZ3JhZGUtcGxhbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3VwZ3JhZGUtcGxhbi5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFVwZ3JhZGVQbGFuQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LE9uSW5pdCB7XHJcbiAgQElucHV0KCkgY2xpZW50SWQ6c3RyaW5nXHJcbiAgbm9vZnN0b3Jlc2Ryb3BEb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQXZnc3RvcmVzZHJvcERvd246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBub29mc3RvcmVzdHlwZTogYW55W10gPSBbJzEoZnJlZSknLCAnMiAtIDI1JywgJzI2IC0gNTAnLCAnNTEgLSA3NScsICc3NiAtIDEwMCcsICcxMDArJ107XHJcbiAgQXZnc3RvcmVzdHlwZTogYW55W10gPSBbe25hbWU6JzUwIC0gNTAwIHNxLmZ0Jyx2YWx1ZTonNTAtNTAwJ30se25hbWU6ICc1MDAgLSA3NTAgc3EuZnQnLHZhbHVlOic1MDAtNzUwJ30se25hbWU6Jzc1MCAtIDEwMDAgc3EuZnQnLHZhbHVlOic3NTAtMTAwMCd9LCB7bmFtZTonMTAwMCAtIDE1MDAgc3EuZnQnLHZhbHVlOicxMDAwLTE1MDAnfSwge25hbWU6JzE1MDAgLSAyMDAwIHNxLmZ0Jyx2YWx1ZTonMTUwMC0yMDAwJ30se25hbWU6ICcyMDAwKyBzcS5mdCcsdmFsdWU6JzIwMDArJ31dO1xyXG4gIHBsYW46IHN0cmluZyA9ICdtb250aGx5JztcclxuICBzaG93TmF2R3JvdXA6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIG5vb2ZzdG9yZXNpdGVtOiBhbnk7XHJcbiAgbm9vZnN0b3Jlc0lzc3VlOiBhbnk7XHJcbiAgQXZnc3RvcmVzaXRlbTogYW55O1xyXG4gIEF2Z3N0b3Jlc0lzc3VlOiBhbnk7XHJcbiAgdXBkYXRlaW5mbzogYW55O1xyXG4gIGFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNsaWVudEluZm86IGFueTtcclxuICBwcmljZTphbnk7XHJcbiAgb3JpZ2luYWxQcmljZTphbnkgPSAwO1xyXG4gIG9sZFByb2R1Y3RzOmFueTtcclxuICBkaXNhYmxlQnRuOmJvb2xlYW4gPSB0cnVlO1xyXG4gIHRyaWFscHJvZHVjdHM6YW55ID0gW107XHJcbiAgZXhwaXJlZFByb2R1Y3RzOmFueSA9W107XHJcbiAgc3Vic2NyaXB0aW9uID0gJ3ByaWNpbmdwbGFuJztcclxuICBjb25maXJtZWRQcm9kdWN0czphbnkgPSBbXTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICBjbGllbnRpbmZvOiBhbnk7XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsIHB1YmxpYyBhY3RpdmVNb2RlbDogTmdiQWN0aXZlTW9kYWwsIHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSwgcHJpdmF0ZSBQYXltZW50U3Vic2NyaXB0aW9uU2VydmljZTogUGF5bWVudFN1YnNjcmlwdGlvblNlcnZpY2UsIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLCkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTp2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlc3Vic2NyaXB0aW9uKHRoaXMuY2xpZW50SWQpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG4gIHNlbGVjdFBsYW4ocGxhbjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNsaWVudEluZm8uY3VycmVudFBsYW5JbmZvLnN1YnNjcmlwdGlvblBlcmlvZCA9IHBsYW47XHJcbiAgICB0aGlzLmJhc2VQcmljaW5nKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoKSB7XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oVXBkYXRlQ29tcG9uZW50LCB7XHJcbiAgICAgIGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnXHJcbiAgICB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLm1vZGFsRGF0YSA9IHtcclxuICAgICAgYnJhbmROYW1lOiB0aGlzLmNsaWVudEluZm8/LmNsaWVudE5hbWUsXHJcbiAgICAgIGdzdE51bWJlcjp0aGlzLmNsaWVudEluZm8/LmJpbGxpbmdEZXRhaWxzPy5nc3ROdW1iZXJ8fCAnJyxcclxuICAgICAgYmlsbGluZ0FkZHJlc3M6dGhpcy5jbGllbnRJbmZvPy5iaWxsaW5nRGV0YWlscz8uYmlsbGluZ0FkZHJlc3N8fCAnJyxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SW5mbz8uY2xpZW50SWRcclxuICAgIH1cclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuY2xpZW50SW5mby5iaWxsaW5nRGV0YWlscy5iaWxsaW5nQWRkcmVzcyA9IHJlc3VsdD8uYmlsbGluZ0FkZHJlc3M7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHRyYWlsZXhwaXJlZCgpIHtcclxuICAgIHRoaXMuYWN0aXZlTW9kZWwuY2xvc2UoKTtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihUcmFpbEV4cGlyZWRDb21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCdcclxuICAgIH0pO1xyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybWF0aW9uKCkge1xyXG4gICAgdGhpcy5hY3RpdmVNb2RlbC5jbG9zZSgpO1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFN1YnNjcmlwdGlvbkFwcHJvdmFsQ29tcG9uZW50LCB7XHJcbiAgICAgIGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnLCBzY3JvbGxhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnByb2R1Y3RzID0gdGhpcy5jbGllbnRJbmZvPy5jdXJyZW50UGxhbkluZm8/LnByb2R1Y3Q7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5jbGllbnRJbmZvID0gdGhpcy5jbGllbnRJbmZvO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlTmF2R3JvdXAoKSB7XHJcbiAgICB0aGlzLnNob3dOYXZHcm91cCA9ICF0aGlzLnNob3dOYXZHcm91cDtcclxuICB9XHJcblxyXG4gIG5vb2ZzdG9yZXNEcm9wZG93bihldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLkF2Z3N0b3Jlc2Ryb3BEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vb2ZzdG9yZXNkcm9wRG93biA9ICF0aGlzLm5vb2ZzdG9yZXNkcm9wRG93bjtcclxuICB9XHJcbiAgQXZnc3RvcmVzRHJvcGRvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5ub29mc3RvcmVzZHJvcERvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuQXZnc3RvcmVzZHJvcERvd24gPSAhdGhpcy5BdmdzdG9yZXNkcm9wRG93bjtcclxuICB9XHJcblxyXG4gIHVwZGF0ZXN1YnNjcmlwdGlvbihpZDogYW55KSB7XHJcbiAgICB0aGlzLlBheW1lbnRTdWJzY3JpcHRpb25TZXJ2aWNlLmNsaWVudEJpbGxpbmdJbmZvKGlkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgIHRoaXMuY2xpZW50SW5mbyA9IHJlcy5kYXRhO1xyXG4gICAgICAgIGlmKHRoaXMuY2xpZW50SW5mbz8uY3VycmVudFBsYW5JbmZvPy50cmlhbFByb2R1Y3RzKSB7XHJcbiAgICAgICAgICB0aGlzLnRyaWFscHJvZHVjdHMgPSB0aGlzLmNsaWVudEluZm8uY3VycmVudFBsYW5JbmZvLnRyaWFsUHJvZHVjdHMubWFwKChpdGVtOmFueSkgPT4gaXRlbS5wcm9kdWN0TmFtZSkgO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmNsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8uZXhwaXJlZFByb2R1Y3RzKSB7XHJcbiAgICAgICAgICB0aGlzLmV4cGlyZWRQcm9kdWN0cyA9IHRoaXMuY2xpZW50SW5mby5jdXJyZW50UGxhbkluZm8uZXhwaXJlZFByb2R1Y3RzLm1hcCgoaXRlbTphbnkpID0+IGl0ZW0ucHJvZHVjdE5hbWUpIDtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5vbGRQcm9kdWN0cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jbGllbnRJbmZvLmN1cnJlbnRQbGFuSW5mby5wcm9kdWN0KSlcclxuICAgICAgICB0aGlzLmJhc2VQcmljaW5nKCk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgYmFzZVByaWNpbmcoKSB7XHJcbiAgICBsZXQgcHJvZHVjdHMgPSB0aGlzLmNsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8ucHJvZHVjdC5maWx0ZXIoKHByb2R1Y3Q6YW55KSA9PiBwcm9kdWN0LmFjdGl2ZSA9PSB0cnVlKS5tYXAoKGl0ZW06YW55KSA9PiBpdGVtLnByb2R1Y3ROYW1lKTtcclxuICAgIGxldCBwYXJhbXM6IGFueSA9IHtcclxuICAgICAgY2FtYXJhUGVyU3FmdDogdGhpcy5jbGllbnRJbmZvLmN1cnJlbnRQbGFuSW5mby5zdG9yZVNpemUsXHJcbiAgICAgIHN0b3Jlc0NvdW50OiB0aGlzLmNsaWVudEluZm8uY3VycmVudFBsYW5JbmZvLnRvdGFsU3RvcmVzLFxyXG4gICAgICBwbGFuTmFtZTogdGhpcy5jbGllbnRJbmZvLmN1cnJlbnRQbGFuSW5mby5zdWJzY3JpcHRpb25QZXJpb2QsXHJcbiAgICAgIHByb2R1Y3RzOiBwcm9kdWN0cyxcclxuICAgICAgY3VycmVuY3lUeXBlOiB0aGlzLmNsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8uY3VycmVuY3lUeXBlIHx8ICdydXBlZXMnXHJcbiAgICB9XHJcbiAgICB0aGlzLlBheW1lbnRTdWJzY3JpcHRpb25TZXJ2aWNlLmJhc2VQcmljaW5nKHBhcmFtcykucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgIHRoaXMuY2xpZW50SW5mby5jdXJyZW50UGxhbkluZm8ucHJpY2UgPSByZXMuZGF0YS5wcmljZTtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsUHJpY2UgPSByZXMuZGF0YS5PcmlnaW5hbFByaWNlO1xyXG4gICAgICAgIHRoaXMuY2xpZW50SW5mby5jdXJyZW50UGxhbkluZm8udG90YWxDYW1lcmEgPSByZXMuZGF0YS5jYW1hcmFDb3VudDtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQcm9kdWN0KGV2ZW50OmFueSxkYXRhOnN0cmluZykge1xyXG4gICAgbGV0IGNoYW5nZXNDb3VudCA9IDA7XHJcbiAgICBsZXQgcHJvZHVjdEluZGV4ID0gdGhpcy5jbGllbnRJbmZvPy5jdXJyZW50UGxhbkluZm8/LnByb2R1Y3QuZmluZEluZGV4KChwcm9kdWN0OmFueSkgPT4gcHJvZHVjdC5wcm9kdWN0TmFtZSA9PSBkYXRhKTtcclxuICAgIGlmKHByb2R1Y3RJbmRleCAhPSAtMSkge1xyXG4gICAgICBpZihldmVudC50YXJnZXQuY2hlY2tlZClcclxuICAgICAgICB0aGlzLmNsaWVudEluZm8uY3VycmVudFBsYW5JbmZvLnByb2R1Y3RbcHJvZHVjdEluZGV4XS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICBlbHNlIFxyXG4gICAgICAgIHRoaXMuY2xpZW50SW5mby5jdXJyZW50UGxhbkluZm8ucHJvZHVjdFtwcm9kdWN0SW5kZXhdLmFjdGl2ZSA9IGZhbHNlOyBcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8ucHJvZHVjdC5mb3JFYWNoKChpdGVtOmFueSkgPT4ge1xyXG4gICAgICBsZXQgZGV0YWlscyA9IHRoaXMub2xkUHJvZHVjdHMuZmluZCgoZWxlOmFueSkgPT4gZWxlLnByb2R1Y3ROYW1lID09IGl0ZW0ucHJvZHVjdE5hbWUpO1xyXG4gICAgICBpZihkZXRhaWxzKSB7XHJcbiAgICAgICAgaWYoZGV0YWlscy5hY3RpdmUgIT0gaXRlbS5hY3RpdmUpIHtcclxuICAgICAgICAgIGNoYW5nZXNDb3VudCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIGlmIChjaGFuZ2VzQ291bnQgPT0gMCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVCdG4gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUJ0biA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5iYXNlUHJpY2luZygpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBub29mc3RvcmVzZGF0YShub29mc3RvcmVzdmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5jbGllbnRJbmZvLmN1cnJlbnRQbGFuSW5mby50b3RhbFN0b3JlcyA9IG5vb2ZzdG9yZXN2YWx1ZTtcclxuICAgIHRoaXMubm9vZnN0b3Jlc2Ryb3BEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmJhc2VQcmljaW5nKCk7XHJcbiAgfVxyXG4gIEF2Z3N0b3Jlc2RhdGEoQXZnc3RvcmVzdmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5jbGllbnRJbmZvLmN1cnJlbnRQbGFuSW5mby5zdG9yZVNpemUgPSBBdmdzdG9yZXN2YWx1ZTtcclxuICAgIHRoaXMuYmFzZVByaWNpbmcoKTtcclxuICAgIHRoaXMuQXZnc3RvcmVzZHJvcERvd24gPSBmYWxzZTtcclxuICB9XHJcbiAgZ2V0Q29sb3JDbGFzcyh0b29sVGlwOiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAodG9vbFRpcCkge1xyXG4gICAgICBjYXNlICdTdWJzY3JpYmVkJzogcmV0dXJuICdiYWRnZSBiYWRnZS1saWdodC1zdWNjZXNzIG14LTQnO1xyXG4gICAgICBjYXNlICdUcmlhbCBFeHBpcmVkJzogcmV0dXJuICdiYWRnZSBiYWRnZS1saWdodC13YXJuaW5nIG14LTQnO1xyXG4gICAgICBjYXNlICdPbiBUcmlhbCc6IHJldHVybiAnYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeSBteC00JztcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCkge1xyXG4gICB0aGlzLkF2Z3N0b3Jlc2Ryb3BEb3duID0gZmFsc2U7XHJcbiAgIHRoaXMubm9vZnN0b3Jlc2Ryb3BEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzaG93SW5mbyhkYXRhOmFueSkge1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsQ29udGVudENvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ2xnJywgc2Nyb2xsYWJsZTogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudXNlciA9IGRhdGE7XHJcbiAgfVxyXG4gIGNsb3NlUG9wdXBBbmRSZWxvYWREYXRhKCkge1xyXG4gICAgdGhpcy5jbGllbnRCaWxsaW5nSW5mbyh0aGlzLmNsaWVudElkKTtcclxuICAgIHRoaXMuUGF5bWVudFN1YnNjcmlwdGlvblNlcnZpY2UudHJpZ2dlclJlbG9hZCgpO1xyXG4gICAgdGhpcy5hY3RpdmVNb2RlbC5jbG9zZSgpO1xyXG4gIH1cclxuICBjbGllbnRCaWxsaW5nSW5mbyhpZDogYW55KSB7XHJcbiAgICB0aGlzLlBheW1lbnRTdWJzY3JpcHRpb25TZXJ2aWNlLmNsaWVudEJpbGxpbmdJbmZvKGlkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgIHRoaXMuY2xpZW50aW5mbyA9IHJlcy5kYXRhO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG5cclxufVxyXG4iLCI8c2VjdGlvbiAqbmdJZj1cInN1YnNjcmlwdGlvbiA9PT0gJ3ByaWNpbmdwbGFuJ1wiPlxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dOYXZHcm91cFwiIGNsYXNzPVwibmF2LWdyb3VwIG5hdi1ncm91cC1vdXRsaW5lIG14LWF1dG8gbXQtOCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tY29sb3ItZ3JheS02MDAgYnRuLWFjdGl2ZSBidG4tYWN0aXZlLXNlY29uZGFyeSBweC02IHB5LTMgbWUtMlwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiY2xpZW50SW5mbz8uY3VycmVudFBsYW5JbmZvPy5zdWJzY3JpcHRpb25QZXJpb2QgPT09ICdtb250aGx5JyA/ICdhY3RpdmVQbGFuQnRuJzonaW5hY3RpdmVQbGFuQnRuJ1wiXHJcbiAgICAgICAgZGF0YS1rdC1wbGFuPVwibW9udGhcIiAoY2xpY2spPVwic2VsZWN0UGxhbignbW9udGhseScpXCI+XHJcbiAgICAgICAgTW9udGhseVxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tY29sb3ItZ3JheS02MDAgYnRuLWFjdGl2ZSBidG4tYWN0aXZlLXNlY29uZGFyeSBweC02IHB5LTNcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImNsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8uc3Vic2NyaXB0aW9uUGVyaW9kID09PSAncXVhcnRlcmx5Jz8gJ2FjdGl2ZVBsYW5CdG4nOidpbmFjdGl2ZVBsYW5CdG4nXCJcclxuICAgICAgICBkYXRhLWt0LXBsYW49XCJRdWFydGVybHlcIiAoY2xpY2spPVwic2VsZWN0UGxhbigncXVhcnRlcmx5JylcIj5cclxuICAgICAgICBRdWFydGVybHkgLSAxMCVcclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tY29sb3ItZ3JheS02MDAgYnRuLWFjdGl2ZSBidG4tYWN0aXZlLXNlY29uZGFyeSBweC02IHB5LTNcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImNsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8uc3Vic2NyaXB0aW9uUGVyaW9kID09PSAnYW5udWFsJz8gJ2FjdGl2ZVBsYW5CdG4nOidpbmFjdGl2ZVBsYW5CdG4nXCJcclxuICAgICAgICBkYXRhLWt0LXBsYW49XCJhbm51YWxcIiAoY2xpY2spPVwic2VsZWN0UGxhbignYW5udWFsJylcIj5cclxuICAgICAgICBBbm51YWwgLSAxNSVcclxuICAgIDwvYnV0dG9uPlxyXG5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwibW9kYWwtYm9keSByb3cgXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTYgcGUtOCB2ZXJ0aWNhbFwiPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGZ2LXJvdyBmdi1wbHVnaW5zLWljb24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0yXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0zXCI+Tm8gb2YgU3RvcmVzIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tc2VsZWN0IGRyb3BzZWxlY3QgbGV2ZWx2aWV3dGV4dFwiIGlkPVwiY3VycmVuY3lcIiAoY2xpY2spPVwibm9vZnN0b3Jlc0Ryb3Bkb3duKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGVmYXVsdCBzZWxlY3QgZXhhbXBsZVwiPnt7Y2xpZW50SW5mbz8uY3VycmVudFBsYW5JbmZvPy50b3RhbFN0b3JlcyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub29mc3RvcmVzdHlwZVswXX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm5vb2ZzdG9yZXNkcm9wRG93blwiIGNsYXNzPVwiY2FyZCBweS0yIHctMTAwIHBvc2l0aW9uLWFic29sdXRlIGVuZC0wIHotMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgKm5nRm9yPVwibGV0IG5vb2ZzdG9yZXMgb2Ygbm9vZnN0b3Jlc3R5cGVcIiBjbGFzcz1cImxpc3QtdW5zdHlsZWQgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cImNsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8udG90YWxTdG9yZXMgPT09IG5vb2ZzdG9yZXMgPyAnYWN0aXZlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb2R1Y3R0ZXh0IHB4LTUgaXRlbXMgY3Vyc29yLXBvaW50ZXIgcHktNFwiIChjbGljayk9XCJub29mc3RvcmVzZGF0YShub29mc3RvcmVzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG5vb2ZzdG9yZXMgfX08L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTJcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTNcIj5BdmVyYWdlIFNpemUgb2YgU3RvcmVzIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tc2VsZWN0IGRyb3BzZWxlY3QgbGV2ZWx2aWV3dGV4dFwiIGlkPVwiY3VycmVuY3lcIiAoY2xpY2spPVwiQXZnc3RvcmVzRHJvcGRvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZWZhdWx0IHNlbGVjdCBleGFtcGxlXCI+e3tjbGllbnRJbmZvPy5jdXJyZW50UGxhbkluZm8/LnN0b3JlU2l6ZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdmdzdG9yZXN0eXBlWzBdLnZhbHVlfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiQXZnc3RvcmVzZHJvcERvd25cIiBjbGFzcz1cImNhcmQgcHktMiB3LTEwMCBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCB6LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsICpuZ0Zvcj1cImxldCBBdmdzdG9yZXMgb2YgQXZnc3RvcmVzdHlwZVwiIGNsYXNzPVwibGlzdC11bnN0eWxlZCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwiY2xpZW50SW5mbz8uY3VycmVudFBsYW5JbmZvPy5zdG9yZVNpemUgPT09IEF2Z3N0b3JlcyA/ICdhY3RpdmUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvZHVjdHRleHQgcHgtNSBpdGVtcyBjdXJzb3ItcG9pbnRlciBweS00XCIgKGNsaWNrKT1cIkF2Z3N0b3Jlc2RhdGEoQXZnc3RvcmVzLnZhbHVlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7QXZnc3RvcmVzLm5hbWV9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXhjYW0gbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgTWF4aW11bSB7e2NsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8udG90YWxDYW1lcmF9fSBDYW1lcmFzIGFyZSBwZXJtaXR0ZWQgaW4gc3RvcmVzIHdpdGggc3F1YXJlIGZlZXQgYmV0d2VlbiB7e2NsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8uc3RvcmVTaXplfX0uXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0dGV4dCBteS01IG10LTEyXCI+U2VsZWN0IFByb2R1Y3RzPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3RsaXN0IG9mIGNsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8ucHJvZHVjdFwiIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtNlwiPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+PGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHJvbGU9XCJzd2l0Y2hcIiBpZD1cInRhbmdvcmV2b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInByb2R1Y3RsaXN0LmFjdGl2ZSA9PT0gdHJ1ZVwiIChjaGFuZ2UpPVwidXBkYXRlUHJvZHVjdCgkZXZlbnQscHJvZHVjdGxpc3QucHJvZHVjdE5hbWUpXCIgW2Rpc2FibGVkXT1cInByb2R1Y3RsaXN0LnN0YXR1cyA9PT0gJ2xpdmUnIHx8IHByb2R1Y3RsaXN0LnN0YXR1cyA9PT0gJ3RyaWFsJyBcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZmxleFN3aXRjaENoZWNrRGVmYXVsdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGhlYWRpbmd0ZXh0IGQtZmxleFwiPnt7cHJvZHVjdGxpc3QuYWxpc2VQcm9kdWN0TmFtZX19IFxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJnZXRDb2xvckNsYXNzKHByb2R1Y3RsaXN0LnRvb2xUaXApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7cHJvZHVjdGxpc3QudG9vbFRpcH19IDxzcGFuICpuZ0lmPVwiZXhwaXJlZFByb2R1Y3RzLmxlbmd0aCAmJiBwcm9kdWN0bGlzdC5wcm9kdWN0TmFtZS5pbmNsdWRlcyhleHBpcmVkUHJvZHVjdHMpXCI+PGltZyBjbGFzcz1cIm1zLTJcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9jdXN0b21wb3B1cC1JY29ucy9jbG9ja2V4cGlyeS1pY29uLnN2Z1wiIGFsdD1cIlwiPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPiA8c3BhbiAqbmdJZj1cInRyaWFscHJvZHVjdHMubGVuZ3RoICYmIHByb2R1Y3RsaXN0LnByb2R1Y3ROYW1lLmluY2x1ZGVzKHRyaWFscHJvZHVjdHMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibXMtMlwiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL2N1c3RvbXBvcHVwLUljb25zL3ByaW1hcnktY2xvY2staWNvbi5zdmdcIiBhbHQ9XCJcIj4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aWV3XCIgKGNsaWNrKT1cInNob3dJbmZvKHByb2R1Y3RsaXN0LnByb2R1Y3ROYW1lKVwiPlZpZXcgSW5mbyA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOSA2LjVWOS41QzkgOS43NjUyMiA4Ljg5NDY0IDEwLjAxOTYgOC43MDcxMSAxMC4yMDcxQzguNTE5NTcgMTAuMzk0NiA4LjI2NTIyIDEwLjUgOCAxMC41SDIuNUMyLjIzNDc4IDEwLjUgMS45ODA0MyAxMC4zOTQ2IDEuNzkyODkgMTAuMjA3MUMxLjYwNTM2IDEwLjAxOTYgMS41IDkuNzY1MjIgMS41IDkuNVY0QzEuNSAzLjczNDc4IDEuNjA1MzYgMy40ODA0MyAxLjc5Mjg5IDMuMjkyODlDMS45ODA0MyAzLjEwNTM2IDIuMjM0NzggMyAyLjUgM0g1LjVNNy41IDEuNUgxMC41TTEwLjUgMS41VjQuNU0xMC41IDEuNUw1IDdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNiBweC04XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBiLTZcIj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmljaW5ndGV4dFwiPnt7Y2xpZW50SW5mbz8uY3VycmVudFBsYW5JbmZvPy5zdWJzY3JpcHRpb25UeXBlIHwgdGl0bGVjYXNlfX08L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZW1pIG10LTJcIj5cclxuICAgICAgICAgICAgICAgIEludGVncmF0ZWQgU29sdXRpb24gZm9yIEdyb3dpbmcgQnVzaW5lc3NcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImQtZmxleFwiPjxzcGFuIGNsYXNzPVwibWUtMyBtdC01XCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjIzMV80MjM0MilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03Ljk5OTY3IDEwLjY2NzNWOC4wMDA2NU03Ljk5OTY3IDUuMzMzOThIOC4wMDYzNE0xNC42NjYzIDguMDAwNjVDMTQuNjY2MyAxMS42ODI2IDExLjY4MTYgMTQuNjY3MyA3Ljk5OTY3IDE0LjY2NzNDNC4zMTc3OCAxNC42NjczIDEuMzMzMDEgMTEuNjgyNiAxLjMzMzAxIDguMDAwNjVDMS4zMzMwMSA0LjMxODc1IDQuMzE3NzggMS4zMzM5OCA3Ljk5OTY3IDEuMzMzOThDMTEuNjgxNiAxLjMzMzk4IDE0LjY2NjMgNC4zMTg3NSAxNC42NjYzIDguMDAwNjVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjU0NzA4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzIyMzFfNDIzNDJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWJ0ZXh0IG10LTZcIj5Zb3Ugd2lsbCBvbmx5IGJlIGNoYXJnZWQgZm9yIDwgVGFuZ28gVHJhZmZpYyxUYW5nbyA8YnI+Wm9uZSAmIFRhbmdvIFJldk9wcyA+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViMXRleHQgbXQtNVwiPlN0YXJ0cyBmcm9tIDxzcGFuIGNsYXNzPVwiYmlsbGVkdGV4dCBtcy0yXCI+PHM+PHNwYW4gKm5nSWY9XCJjbGllbnRJbmZvPy5jdXJyZW50UGxhbkluZm8/LmN1cnJlbmN5VHlwZSA9PT0gJ2lucidcIj7igrk8L3NwYW4+PHNwYW4gKm5nSWY9XCJjbGllbnRJbmZvPy5jdXJyZW50UGxhbkluZm8/LmN1cnJlbmN5VHlwZSA9PT0gJ2RvbGxhcidcIj4kPC9zcGFuPnt7b3JpZ2luYWxQcmljZX19PC9zPjwvc3Bhbj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmlsbGluZ3RleHQgbXMtNFwiPjxzcGFuICpuZ0lmPVwiY2xpZW50SW5mbz8uY3VycmVudFBsYW5JbmZvPy5jdXJyZW5jeVR5cGUgPT09ICdpbnInXCI+4oK5PC9zcGFuPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2xpZW50SW5mbz8uY3VycmVudFBsYW5JbmZvPy5jdXJyZW5jeVR5cGUgPT09ICdkb2xsYXInXCI+JDwvc3Bhbj57e2NsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8ucHJpY2UgfHwgMH19PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViMXRleHQgbXQtMlwiPlBlciBzdG9yZSBQZXIgbW9udGg8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHN0ZXh0XCI+QmlsbGluZyBEZXRhaWxzPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdWIxdGV4dCBweS00XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi00XCI+QnJhbmQgTmFtZToge3tjbGllbnRJbmZvPy5jbGllbnROYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdj5CaWxsaW5nIEFkZHJlc3M6IHt7Y2xpZW50SW5mbz8uYmlsbGluZ0RldGFpbHM/LmJpbGxpbmdBZGRyZXNzIHx8ICctLSd9fTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBzdWJzY3JpYmVcIj4gXHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInVwZGF0ZSgpXCIgdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtcy0yIG5nLXN0YXItaW5zZXJ0ZWQgdy0xMDAgYnRuLWJsb2NrIHRleHQtbm93cmFwXCIgKm5nSWY9XCIhY2xpZW50SW5mbz8uYmlsbGluZ0RldGFpbHM/LmJpbGxpbmdBZGRyZXNzXCI+PHNwYW4gY2xhc3M9XCJzdWJtaXRcIj5FbnRlclxyXG4gICAgICAgICAgICAgICAgICAgIEJpbGxpbmcgRGV0YWlscyA8L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNvbmZpcm1hdGlvbigpXCIgdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiICpuZ0lmPVwiY2xpZW50SW5mbz8uYmlsbGluZ0RldGFpbHM/LmJpbGxpbmdBZGRyZXNzXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTIgbmctc3Rhci1pbnNlcnRlZCB3LTEwMCBidG4tYmxvY2tcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7XCIgW2Rpc2FibGVkXT1cImRpc2FibGVCdG5cIj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3VibWl0XCI+U3Vic2NyaWJlIE5vdyA8L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48L3NlY3Rpb24+XHJcblxyXG48ZGl2ICpuZ0lmPVwic3Vic2NyaXB0aW9uID09PSAnY29uZmlybWF0aW9ubWVzc2FnZSdcIiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgZ2lmaW1hZ2VcIiA+XHJcbiAgICA8ZGl2IGNsYXNzPVwicC02XCI+XHJcbiAgICAgICAgPGRpdj48aW1nIHNyYz1cIi4vYXNzZXRzL3RhbmdvL2N1c3RvbXBvcHVwLUljb25zL2NoZWNrLWljb24uc3ZnXCIgYWx0PVwiXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmcgbXQtNCBtcy0xXCI+VGhhbmtzIGZvciB0aGUgc3Vic2NyaXB0aW9uITwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZnYtcm93IGZ2LXBsdWdpbnMtaWNvbi1jb250YWluZXJcIj5cclxuICAgICAgICBcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnR0ZXh0IG10LTQgbXgtMlwiPllvdSBoYXZlIHN1Y2Nlc3NmdWxseSBzdWJzY3JpYmVkIHRvIG91ciBwcm9kdWN0cyBcclxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm10LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgY29uZmlybWVkUHJvZHVjdHNcIj57e3Byb2R1Y3R9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtdC0yIHB5LTJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcHgtNCBuZy1zdGFyLWluc2VydGVkIHctMTAwXCIgKGNsaWNrKT1cImNsb3NlUG9wdXBBbmRSZWxvYWREYXRhKClcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1Ym1pdFwiPk9rYXk8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
547
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBncmFkZS1wbGFuLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1zZXR0aW5ncy9zcmMvbGliL2NvbXBvbmVudHMvcGF5bWVudHMtc3Vic2NyaXB0aW9uL3N1YnNjcmlwdGlvbi1wb3B1cHMvdXBncmFkZS1wbGFuL3VwZ3JhZGUtcGxhbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL3BheW1lbnRzLXN1YnNjcmlwdGlvbi9zdWJzY3JpcHRpb24tcG9wdXBzL3VwZ3JhZGUtcGxhbi91cGdyYWRlLXBsYW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQWEsS0FBSyxFQUFVLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFHekcsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFakYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDL0csT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0VBQW9FLENBQUM7Ozs7Ozs7O0FBTWhILE1BQU0sT0FBTyxvQkFBb0I7SUFpRVg7SUFBK0I7SUFBcUM7SUFBNkI7SUFBZ0U7SUFBMEM7SUFoRXROLFFBQVEsQ0FBUTtJQUN6QixrQkFBa0IsR0FBWSxLQUFLLENBQUM7SUFDcEMsaUJBQWlCLEdBQVksS0FBSyxDQUFDO0lBQ25DLGNBQWMsR0FBVSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEYsYUFBYSxHQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDcFQsSUFBSSxHQUFXLFNBQVMsQ0FBQztJQUN6QixZQUFZLEdBQVksSUFBSSxDQUFDO0lBQzdCLGNBQWMsQ0FBTTtJQUNwQixlQUFlLENBQU07SUFDckIsYUFBYSxDQUFNO0lBQ25CLGNBQWMsQ0FBTTtJQUNwQixVQUFVLENBQU07SUFDaEIsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixVQUFVLENBQU07SUFDaEIsS0FBSyxDQUFNO0lBQ1gsYUFBYSxHQUFRLENBQUMsQ0FBQztJQUN2QixXQUFXLENBQU07SUFDakIsVUFBVSxHQUFZLElBQUksQ0FBQztJQUMzQixhQUFhLEdBQVEsRUFBRSxDQUFDO0lBQ3hCLGVBQWUsR0FBUSxFQUFFLENBQUM7SUFDMUIsWUFBWSxHQUFHLGFBQWEsQ0FBQztJQUM3QixpQkFBaUIsR0FBUSxFQUFFLENBQUM7SUFDWCxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUMxQyxVQUFVLENBQU07SUFDaEIsTUFBTSxHQUFXLENBQUMsQ0FBQztJQUNuQixVQUFVLEdBQVU7UUFDbEIsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7S0FDdEMsQ0FBQztJQUNGLGNBQWMsQ0FBTTtJQUNwQixlQUFlLENBQVE7SUFDdkIsVUFBVSxDQUFNO0lBQ2hCLFlBQVksQ0FBUztJQUNyQixtQkFBbUIsR0FBVSxFQUFFLENBQUM7SUFDaEMsV0FBVyxDQUFNO0lBQ2pCLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUMzQixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUM1QixlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLE9BQU8sR0FBWSxJQUFJLENBQUM7SUFDeEIsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixXQUFXLEdBQVEsRUFBRSxDQUFDO0lBQ3RCLFdBQVcsR0FBUTtRQUNqQixLQUFLLEVBQUUsRUFBRTtRQUNULE1BQU0sRUFBRSxDQUFDO1FBQ1QsUUFBUSxFQUFFLEVBQUU7UUFDWixXQUFXLEVBQUUsRUFBRTtRQUNmLFVBQVUsRUFBRSxFQUFFO1FBQ2QsTUFBTSxFQUFFLEVBQUU7UUFDVixPQUFPLEVBQUUsRUFBRTtRQUNYLEtBQUssRUFBRSxFQUFFO1FBQ1QsUUFBUSxFQUFFLEVBQUU7S0FDYixDQUFBO0lBQ0QsUUFBUSxHQUFRLEVBQUUsQ0FBQztJQUNuQixTQUFTLEdBQVEsRUFBRSxDQUFDO0lBQ3BCLGlCQUFpQixHQUFRLEVBQUUsQ0FBQztJQUM1QixVQUFVLEdBQVcsQ0FBQyxDQUFDO0lBQ3ZCLFlBQVksQ0FBTTtJQUNsQixTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzNCLGdCQUFnQixHQUFZLEtBQUssQ0FBQztJQUNsQyxhQUFhLEdBQVksS0FBSyxDQUFDO0lBQy9CLG1CQUFtQixHQUFRLEVBQUUsQ0FBQztJQUM5QixPQUFPLENBQU07SUFDYixlQUFlLEdBQVUsRUFBRSxDQUFDO0lBRTVCLFlBQW9CLFlBQXNCLEVBQVMsV0FBMkIsRUFBVSxLQUFtQixFQUFVLDBCQUFzRCxFQUFVLGNBQWlDLEVBQVMsRUFBc0I7UUFBak8saUJBQVksR0FBWixZQUFZLENBQVU7UUFBUyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQVUsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUE0QjtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUFTLE9BQUUsR0FBRixFQUFFLENBQW9CO1FBQ25QLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztZQUMvQixJQUFJLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDN0IsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUM1RSxJQUFJLElBQUksRUFBRTtnQkFDUixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7Z0JBQ3pDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO29CQUN4RSxJQUFJLElBQUksRUFBRTt3QkFDUixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7d0JBQzlCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBRXZDLElBQUksSUFBSSxFQUFFLFFBQVEsSUFBSSxPQUFPLEVBQUU7NEJBQzdCLHlCQUF5Qjt5QkFDMUI7cUJBQ0Y7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7Z0JBRUYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdEMseUNBQXlDO2dCQUN6QyxvQ0FBb0M7Z0JBQ3BDLDJCQUEyQjthQUM1QjtpQkFBTSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNoQixNQUFNLFFBQVEsR0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7Z0JBQzVFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTtnQkFDekMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7b0JBQ3hFLElBQUksSUFBSSxFQUFFO3dCQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzt3QkFDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFFdkMsSUFBSSxJQUFJLEVBQUUsUUFBUSxJQUFJLE9BQU8sRUFBRTs0QkFDN0IsK0JBQStCOzRCQUMvQix5QkFBeUI7eUJBQzFCO3FCQUNGO2dCQUNILENBQUMsQ0FBQyxDQUFBO2dCQUVGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFFdkM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUVMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsVUFBVSxDQUFDLElBQVk7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQ3pELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsTUFBTTtRQUNKLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN2RCxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1NBQzNCLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEdBQUc7WUFDckMsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVTtZQUN0QyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsU0FBUyxJQUFJLEVBQUU7WUFDM0QsY0FBYyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLGNBQWMsSUFBSSxFQUFFO1lBQ3JFLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVE7U0FDcEMsQ0FBQTtRQUNELFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDOUIsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsY0FBYyxHQUFHLE1BQU0sRUFBRSxjQUFjLENBQUM7Z0JBQ3ZFLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDckM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUVMLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM3RCxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1NBQzNCLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFFaEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUU7WUFDckUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJO1NBQzdDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFDO1FBQ2hGLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMxRCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFpQjtRQUNsQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDckQsQ0FBQztJQUNELGlCQUFpQixDQUFDLEtBQWlCO1FBQ2pDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNuRCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsRUFBTztRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsMEJBQTBCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUMxRyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQzNCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFO29CQUNuRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDekc7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUU7b0JBQ3JELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUM3RztnQkFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO2dCQUN0RixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDckM7aUJBQ0k7Z0JBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2FBQ3RCO1FBQ0gsQ0FBQyxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUE7SUFFSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0ksSUFBSSxNQUFNLEdBQVE7WUFDaEIsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLFNBQVM7WUFDeEQsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLFdBQVc7WUFDeEQsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLGtCQUFrQjtZQUM1RCxRQUFRLEVBQUUsUUFBUTtZQUNsQixZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsWUFBWSxJQUFJLFFBQVE7U0FDekUsQ0FBQTtRQUNELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUN4RyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDckM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBVSxFQUFFLElBQVk7UUFDcEMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLENBQUM7UUFDdEgsSUFBSSxZQUFZLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDdEIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDOztnQkFFcEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDeEU7UUFFRCxJQUFJLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDOUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksT0FBTyxFQUFFO2dCQUNYLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUNqQyxZQUFZLEVBQUUsQ0FBQztpQkFDaEI7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxZQUFZLElBQUksQ0FBQyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ3hCO2FBQ0k7WUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztTQUN6QjtRQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxjQUFjLENBQUMsZUFBb0I7UUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLGVBQWUsQ0FBQztRQUM5RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBQ0QsYUFBYSxDQUFDLGNBQW1CO1FBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUM7UUFDM0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUNELGFBQWEsQ0FBQyxPQUFlO1FBQzNCLFFBQVEsT0FBTyxFQUFFO1lBQ2YsS0FBSyxZQUFZLENBQUMsQ0FBQyxPQUFPLGdDQUFnQyxDQUFDO1lBQzNELEtBQUssZUFBZSxDQUFDLENBQUMsT0FBTyxnQ0FBZ0MsQ0FBQztZQUM5RCxLQUFLLFVBQVUsQ0FBQyxDQUFDLE9BQU8sZ0NBQWdDLENBQUM7WUFDekQsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBR0QsZUFBZSxDQUFDLEtBQWlCO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQsUUFBUSxDQUFDLElBQVM7UUFDaEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDN0QsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJO1NBQzdDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ3pDLENBQUM7SUFDRCx1QkFBdUI7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsMEJBQTBCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFFNUIsQ0FBQztJQUNELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDMUcsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUNyQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQUEsQ0FBQztJQUVMLGFBQWE7UUFDWCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLHdCQUF3QjtJQUMxQixDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLHlCQUF5QjtJQUN6QixpQkFBaUI7SUFDakIseUJBQXlCO0lBQ3pCLGdDQUFnQztJQUNoQywwQkFBMEI7SUFDMUIsT0FBTztJQUNQLGtIQUFrSDtJQUNsSCxvQ0FBb0M7SUFDcEMsOEJBQThCO0lBQzlCLDZCQUE2QjtJQUM3QixxQ0FBcUM7SUFDckMsNkNBQTZDO0lBQzdDLFFBQVE7SUFDUixhQUFhO0lBQ2IsNEJBQTRCO0lBQzVCLDhCQUE4QjtJQUM5QixRQUFRO0lBQ1IseUJBQXlCO0lBQ3pCLDRCQUE0QjtJQUM1QiwwQkFBMEI7SUFDMUIsT0FBTztJQUNQLElBQUk7SUFFSixRQUFRLENBQUMsS0FBVSxFQUFFLEtBQWEsRUFBRSxLQUFpQjtRQUNuRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsQ0FBTSxFQUFFLEVBQUU7WUFDNUMsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFO2dCQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2FBQ3JCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2pFLENBQUM7SUFDRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ3hGLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDbkgsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO29CQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ2hDLENBQUMsQ0FBQyxDQUFBO2dCQUNGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQ3JDO2lCQUNJO2dCQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzthQUN0QjtRQUNILENBQUMsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFBO0lBRUosQ0FBQztJQUNELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQTtJQUMvQixDQUFDO0lBQ0QsVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ25ELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQjtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsMEJBQTBCLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM5RSxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztvQkFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBQzVDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO29CQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtvQkFDN0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDckM7cUJBQU87b0JBQ04sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7b0JBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2lCQUN0QjtZQUNILENBQUM7WUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNWLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDckIsQ0FBQztZQUNELFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO1NBQ3BCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxNQUFhO1FBQzlCLDBCQUEwQjtRQUMxQixvQ0FBb0M7UUFDcEMsc0RBQXNEO1FBQ3RELHlDQUF5QztRQUN6Qyw0QkFBNEI7UUFDNUIsK0NBQStDO1FBQy9DLE1BQU07UUFDTixNQUFNO1FBRU4sc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQTtRQUN4RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFDdkQsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLGtCQUFrQixDQUFDO0lBQzlFLENBQUM7SUFDRCxjQUFjLENBQUMsS0FBVSxFQUFFLEtBQVUsRUFBRSxLQUFhLEVBQUUsUUFBZ0I7UUFDcEUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDckQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFeEUsSUFBSSxLQUFLLEtBQUssWUFBWSxFQUFFO1lBQzFCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ3JDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDdEU7YUFBTTtZQUNMLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ3ZDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hILFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztTQUM3RDtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEtBQUssRUFBRSxDQUFxQixDQUFDO1FBQzFGLElBQUksZ0JBQWdCO1lBQUUsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVuRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDckQsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBcUIsQ0FBQztZQUNoRyxJQUFJLGVBQWU7Z0JBQUUsZUFBZSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLGtCQUFrQixDQUFDO1FBQzVFLHFIQUFxSDtJQUN2SCxDQUFDO0lBQ0QsVUFBVSxDQUFDLE1BQVcsRUFBRSxDQUFNO1FBQzVCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQ3BDLDJFQUEyRTtnQkFDM0UsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRXBHLG9FQUFvRTtnQkFDcEUsSUFBSSxXQUFXLEdBQUc7b0JBQ2hCLEdBQUcsSUFBSTtvQkFDUCxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLO2lCQUNuRCxDQUFDO2dCQUVGLE9BQU8sV0FBVyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFFakYsT0FBTyxHQUFHLENBQUM7U0FDWjthQUFNO1lBQ0wsT0FBTyxNQUFNLENBQUM7U0FDZjtJQUVILENBQUM7SUFDRCxVQUFVLENBQUMsSUFBUyxFQUFFLElBQVM7UUFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7WUFDbEUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtTQUMzQixDQUFDLENBQUM7UUFDSCx1REFBdUQ7UUFDdkQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUM5QixJQUFJLE1BQU0sSUFBSSxtQkFBbUIsRUFBRTtnQkFDckMsSUFBSSxNQUFNLEdBQUc7b0JBQ1gsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsSUFBSSxFQUFFLElBQUk7NEJBQ1YsSUFBSSxFQUFFLElBQUk7eUJBRVg7cUJBQ0Y7aUJBQ0YsQ0FBQTtnQkFDRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQzFHLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFO3dCQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQzt3QkFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7d0JBQzNCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO3FCQUN6QjtnQkFDSCxDQUFDLENBQUMsQ0FBQTthQUNIO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDRixDQUFDO0lBR0MsWUFBWSxDQUFDLElBQVk7UUFDdkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRixTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sU0FBUyxHQUFHLEdBQUcsR0FBRyxVQUFVLENBQUM7SUFDdEMsQ0FBQztJQUNELGdCQUFnQixDQUFDLElBQVMsRUFBRSxJQUFTO1FBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQTtRQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRTtZQUNqRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1NBQzNCLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQy9ELHVEQUF1RDtRQUN2RCxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzlCLElBQUksTUFBTSxJQUFJLGtCQUFrQixFQUFFO2dCQUNwQyxJQUFJLE1BQU0sR0FBRztvQkFDWCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3ZCLE9BQU8sRUFBRTt3QkFDUDs0QkFDRSxJQUFJLEVBQUUsSUFBSTs0QkFDVixJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU87eUJBRXBCO3FCQUNGO2lCQUNGLENBQUE7Z0JBQ0QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUMxRyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRTt3QkFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7d0JBQzdCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7d0JBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO3FCQUN6QjtnQkFDSCxDQUFDLENBQUMsQ0FBQTthQUNIO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDRixDQUFDO0lBQ0MsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM5QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUMxRyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBRXBDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtvQkFDOUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLENBQUE7Z0JBQ0YsMkNBQTJDO2dCQUMzQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQ3JDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO3dHQWhpQlUsb0JBQW9COzRGQUFwQixvQkFBb0IsZ0tDbEJqQyxxaHhCQStYTTs7NEZEN1dPLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0I7K09BS25CLFFBQVE7c0JBQWhCLEtBQUs7Z0JBbVJOLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgSW5wdXQsIE9uSW5pdCwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVwZGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL3VwZGF0ZS91cGRhdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTmdiQWN0aXZlTW9kYWwsIE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBTdWNjZXNzZnVsbFN1YnNjcmlwdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL3N1Y2Nlc3NmdWxsLXN1YnNjcmlwdGlvbi9zdWNjZXNzZnVsbC1zdWJzY3JpcHRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJhaWxFeHBpcmVkQ29tcG9uZW50IH0gZnJvbSAnLi4vdHJhaWwtZXhwaXJlZC90cmFpbC1leHBpcmVkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbkFwcHJvdmFsQ29tcG9uZW50IH0gZnJvbSAnLi4vc3Vic2NyaXB0aW9uLWFwcHJvdmFsL3N1YnNjcmlwdGlvbi1hcHByb3ZhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgUGF5bWVudFN1YnNjcmlwdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9wYXltZW50LXN1YnNjcmlwdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1vZGFsQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4uL21vZGVsLWNvbnRlbnQvbW9kZWwtY29udGVudC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuaW1wb3J0IHsgU3Vic2NyaWJlUmVxdWVzdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3JlcXVlc3QtcG9wdXBzL3N1YnNjcmliZS1yZXF1ZXN0L3N1YnNjcmliZS1yZXF1ZXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN0YXJ0dHJhaWxyZXF1ZXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcmVxdWVzdC1wb3B1cHMvc3RhcnR0cmFpbHJlcXVlc3Qvc3RhcnR0cmFpbHJlcXVlc3QuY29tcG9uZW50JztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItdXBncmFkZS1wbGFuJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXBncmFkZS1wbGFuLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdXBncmFkZS1wbGFuLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVXBncmFkZVBsYW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgY2xpZW50SWQ6IHN0cmluZ1xyXG4gIG5vb2ZzdG9yZXNkcm9wRG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEF2Z3N0b3Jlc2Ryb3BEb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbm9vZnN0b3Jlc3R5cGU6IGFueVtdID0gWycxKGZyZWUpJywgJzIgLSAyNScsICcyNiAtIDUwJywgJzUxIC0gNzUnLCAnNzYgLSAxMDAnLCAnMTAwKyddO1xyXG4gIEF2Z3N0b3Jlc3R5cGU6IGFueVtdID0gW3sgbmFtZTogJzUwIC0gNTAwIHNxLmZ0JywgdmFsdWU6ICc1MC01MDAnIH0sIHsgbmFtZTogJzUwMCAtIDc1MCBzcS5mdCcsIHZhbHVlOiAnNTAwLTc1MCcgfSwgeyBuYW1lOiAnNzUwIC0gMTAwMCBzcS5mdCcsIHZhbHVlOiAnNzUwLTEwMDAnIH0sIHsgbmFtZTogJzEwMDAgLSAxNTAwIHNxLmZ0JywgdmFsdWU6ICcxMDAwLTE1MDAnIH0sIHsgbmFtZTogJzE1MDAgLSAyMDAwIHNxLmZ0JywgdmFsdWU6ICcxNTAwLTIwMDAnIH0sIHsgbmFtZTogJzIwMDArIHNxLmZ0JywgdmFsdWU6ICcyMDAwKycgfV07XHJcbiAgcGxhbjogc3RyaW5nID0gJ21vbnRobHknO1xyXG4gIHNob3dOYXZHcm91cDogYm9vbGVhbiA9IHRydWU7XHJcbiAgbm9vZnN0b3Jlc2l0ZW06IGFueTtcclxuICBub29mc3RvcmVzSXNzdWU6IGFueTtcclxuICBBdmdzdG9yZXNpdGVtOiBhbnk7XHJcbiAgQXZnc3RvcmVzSXNzdWU6IGFueTtcclxuICB1cGRhdGVpbmZvOiBhbnk7XHJcbiAgYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2xpZW50SW5mbzogYW55O1xyXG4gIHByaWNlOiBhbnk7XHJcbiAgb3JpZ2luYWxQcmljZTogYW55ID0gMDtcclxuICBvbGRQcm9kdWN0czogYW55O1xyXG4gIGRpc2FibGVCdG46IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHRyaWFscHJvZHVjdHM6IGFueSA9IFtdO1xyXG4gIGV4cGlyZWRQcm9kdWN0czogYW55ID0gW107XHJcbiAgc3Vic2NyaXB0aW9uID0gJ3ByaWNpbmdwbGFuJztcclxuICBjb25maXJtZWRQcm9kdWN0czogYW55ID0gW107XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgY2xpZW50aW5mbzogYW55O1xyXG4gIHNvcnRCeTogbnVtYmVyID0gMTtcclxuICBkYXRhT2JqZWN0OiBhbnlbXSA9IFtcclxuICAgIHsgRGVzY3JpcHRpb246ICdTdG9yZXMnLCBTdG9yZXM6IFtdIH0sXHJcbiAgXTtcclxuICAkaGVhZGVyRmlsdGVyczogYW55O1xyXG4gIGF2YWlsYWJsZVN0b3JlczogYW55W107XHJcbiAgZHVtbXlBcnJheTogYW55O1xyXG4gIHNlbGVjdGVkVGV4dDogc3RyaW5nO1xyXG4gIHNlbGVjdGVkVmFsdWVzQXJyYXk6IGFueVtdID0gW107XHJcbiAgc2VhcmNoVmFsdWU6IGFueTtcclxuICBzaG93U3RvcmVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICBzaG93UG9wdXB0cmFpbCA9IGZhbHNlO1xyXG4gIHNob3dQb3B1cHN1YnNjcmliZWQgPSBmYWxzZTtcclxuICBzaG93TWFpbkNvbnRlbnQgPSB0cnVlO1xyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIG5vRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByb2R1Y3RMaXN0OiBhbnkgPSBbXTtcclxuICBkeW5hbWljRGF0YTogYW55ID0ge1xyXG4gICAgbGltaXQ6IDEwLFxyXG4gICAgb2Zmc2V0OiAxLFxyXG4gICAgY2xpZW50SWQ6IFwiXCIsXHJcbiAgICBzZWFyY2hWYWx1ZTogXCJcIixcclxuICAgIHNvcnRDb2x1bW46ICcnLFxyXG4gICAgc29ydEJ5OiAnJyxcclxuICAgIHByb2R1Y3Q6IFtdLFxyXG4gICAgc3RvcmU6IFtdLFxyXG4gICAgbG9jYXRpb246IFtdXHJcbiAgfVxyXG4gIHVzZXJUeXBlOiBhbnkgPSAnJztcclxuICBzdG9yZUxpc3Q6IGFueSA9IFtdO1xyXG4gIHNlbGVjdGVkU3RvcmVMaXN0OiBhbnkgPSBbXTtcclxuICB0b3RhbENvdW50OiBudW1iZXIgPSAwO1xyXG4gIHN0b3JlUHJvZHVjdDogYW55O1xyXG4gIHNlbGVjdEFsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dzdWJzY3JpcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93U3Vic2NyaWJlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbm90aWZpY2F0aW9uRGV0YWlsczogYW55ID0gW107XHJcbiAgbWVzc2FnZTogYW55O1xyXG4gIHNlbGVjdGVkUHJvZHVjdDpzdHJpbmcgPSAnJztcclxuICBcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsIHB1YmxpYyBhY3RpdmVNb2RlbDogTmdiQWN0aXZlTW9kYWwsIHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSwgcHJpdmF0ZSBQYXltZW50U3Vic2NyaXB0aW9uU2VydmljZTogUGF5bWVudFN1YnNjcmlwdGlvblNlcnZpY2UsIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLCBwdWJsaWMgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSkge1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy4kaGVhZGVyRmlsdGVycyA9IGRhdGE7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YS5jbGllbnQ7XHJcbiAgICAgICAgdGhpcy5keW5hbWljRGF0YS5jbGllbnRJZCA9IHRoaXMuY2xpZW50SWRcclxuICAgICAgICB0aGlzLmdldEF2YWlsYWJsZVN0b3JlcygpO1xyXG4gICAgICAgIHRoaXMuZ3MudXNlckFjY2Vzcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclR5cGUgPSBkYXRhLnVzZXJUeXBlO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZXN1YnNjcmlwdGlvbih0aGlzLmNsaWVudElkKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhPy51c2VyVHlwZSA9PSAndGFuZ28nKSB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5nZXRQcm9kdWN0TGlzdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgdGhpcy5jbGllbnRCaWxsaW5nSW5mbyh0aGlzLmNsaWVudElkKTtcclxuICAgICAgICAvLyB0aGlzLmdldHBheW1lbnRpbnZvaWNlKHRoaXMuY2xpZW50SWQpO1xyXG4gICAgICAgIC8vIHRoaXMucGF5bWVudGludm9pY2Vmb3JtLmRpc2FibGUoKVxyXG4gICAgICAgIC8vIHRoaXMuaW52b2ljZVRhYmxlRGF0YSgpO1xyXG4gICAgICB9IGVsc2UgaWYgKCFkYXRhKSB7XHJcbiAgICAgICAgY29uc3QgdXNlckRhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIikgfHwgXCJ7fVwiKTtcclxuICAgICAgICB0aGlzLmNsaWVudElkID0gdXNlckRhdGEuY2xpZW50SWQ7XHJcbiAgICAgICAgdGhpcy5keW5hbWljRGF0YS5jbGllbnRJZCA9IHRoaXMuY2xpZW50SWRcclxuICAgICAgICB0aGlzLmdldEF2YWlsYWJsZVN0b3JlcygpO1xyXG4gICAgICAgIHRoaXMuZ3MudXNlckFjY2Vzcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclR5cGUgPSBkYXRhLnVzZXJUeXBlO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZXN1YnNjcmlwdGlvbih0aGlzLmNsaWVudElkKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhPy51c2VyVHlwZSA9PSAndGFuZ28nKSB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5nZXRQcmljaW5nKCdzdGFuZGFyZCcpO1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuZ2V0UHJvZHVjdExpc3QoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY2xpZW50QmlsbGluZ0luZm8odGhpcy5jbGllbnRJZCk7XHJcblxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbiAgc2VsZWN0UGxhbihwbGFuOiBzdHJpbmcpIHtcclxuICAgICB0aGlzLmNsaWVudEluZm8uY3VycmVudFBsYW5JbmZvLnN1YnNjcmlwdGlvblBlcmlvZCA9IHBsYW47XHJcbiAgICAgIHRoaXMuYmFzZVByaWNpbmcoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSgpIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihVcGRhdGVDb21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCdcclxuICAgIH0pO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UubW9kYWxEYXRhID0ge1xyXG4gICAgICBicmFuZE5hbWU6IHRoaXMuY2xpZW50SW5mbz8uY2xpZW50TmFtZSxcclxuICAgICAgZ3N0TnVtYmVyOiB0aGlzLmNsaWVudEluZm8/LmJpbGxpbmdEZXRhaWxzPy5nc3ROdW1iZXIgfHwgJycsXHJcbiAgICAgIGJpbGxpbmdBZGRyZXNzOiB0aGlzLmNsaWVudEluZm8/LmJpbGxpbmdEZXRhaWxzPy5iaWxsaW5nQWRkcmVzcyB8fCAnJyxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SW5mbz8uY2xpZW50SWRcclxuICAgIH1cclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuY2xpZW50SW5mby5iaWxsaW5nRGV0YWlscy5iaWxsaW5nQWRkcmVzcyA9IHJlc3VsdD8uYmlsbGluZ0FkZHJlc3M7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHRyYWlsZXhwaXJlZCgpIHtcclxuICAgIHRoaXMuYWN0aXZlTW9kZWwuY2xvc2UoKTtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihUcmFpbEV4cGlyZWRDb21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCdcclxuICAgIH0pO1xyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybWF0aW9uKCkge1xyXG4gICAgdGhpcy5hY3RpdmVNb2RlbC5jbG9zZSgpO1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFN1YnNjcmlwdGlvbkFwcHJvdmFsQ29tcG9uZW50LCB7XHJcbiAgICAgIGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnLCBzY3JvbGxhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnByb2R1Y3RzID0gdGhpcy5jbGllbnRJbmZvPy5jdXJyZW50UGxhbkluZm8/LnByb2R1Y3Q7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5jbGllbnRJbmZvID0gdGhpcy5jbGllbnRJbmZvO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlTmF2R3JvdXAoKSB7XHJcbiAgICB0aGlzLnNob3dOYXZHcm91cCA9ICF0aGlzLnNob3dOYXZHcm91cDtcclxuICB9XHJcblxyXG4gIG5vb2ZzdG9yZXNEcm9wZG93bihldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLkF2Z3N0b3Jlc2Ryb3BEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vb2ZzdG9yZXNkcm9wRG93biA9ICF0aGlzLm5vb2ZzdG9yZXNkcm9wRG93bjtcclxuICB9XHJcbiAgQXZnc3RvcmVzRHJvcGRvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5ub29mc3RvcmVzZHJvcERvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuQXZnc3RvcmVzZHJvcERvd24gPSAhdGhpcy5BdmdzdG9yZXNkcm9wRG93bjtcclxuICB9XHJcblxyXG4gIHVwZGF0ZXN1YnNjcmlwdGlvbihpZDogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5QYXltZW50U3Vic2NyaXB0aW9uU2VydmljZS5jbGllbnRCaWxsaW5nSW5mbyhpZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2xpZW50SW5mbyA9IHJlcy5kYXRhO1xyXG4gICAgICAgIGlmICh0aGlzLmNsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8udHJpYWxQcm9kdWN0cykge1xyXG4gICAgICAgICAgdGhpcy50cmlhbHByb2R1Y3RzID0gdGhpcy5jbGllbnRJbmZvLmN1cnJlbnRQbGFuSW5mby50cmlhbFByb2R1Y3RzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLnByb2R1Y3ROYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY2xpZW50SW5mbz8uY3VycmVudFBsYW5JbmZvPy5leHBpcmVkUHJvZHVjdHMpIHtcclxuICAgICAgICAgIHRoaXMuZXhwaXJlZFByb2R1Y3RzID0gdGhpcy5jbGllbnRJbmZvLmN1cnJlbnRQbGFuSW5mby5leHBpcmVkUHJvZHVjdHMubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0ucHJvZHVjdE5hbWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vbGRQcm9kdWN0cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jbGllbnRJbmZvLmN1cnJlbnRQbGFuSW5mby5wcm9kdWN0KSlcclxuICAgICAgICB0aGlzLmJhc2VQcmljaW5nKCk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICBiYXNlUHJpY2luZygpIHtcclxuICAgIGxldCBwcm9kdWN0cyA9IHRoaXMuY2xpZW50SW5mbz8uY3VycmVudFBsYW5JbmZvPy5wcm9kdWN0LmZpbHRlcigocHJvZHVjdDogYW55KSA9PiBwcm9kdWN0LmFjdGl2ZSA9PSB0cnVlKS5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS5wcm9kdWN0TmFtZSk7XHJcbiAgICBsZXQgcGFyYW1zOiBhbnkgPSB7XHJcbiAgICAgIGNhbWFyYVBlclNxZnQ6IHRoaXMuY2xpZW50SW5mby5jdXJyZW50UGxhbkluZm8uc3RvcmVTaXplLFxyXG4gICAgICBzdG9yZXNDb3VudDogdGhpcy5jbGllbnRJbmZvLmN1cnJlbnRQbGFuSW5mby50b3RhbFN0b3JlcyxcclxuICAgICAgcGxhbk5hbWU6IHRoaXMuY2xpZW50SW5mby5jdXJyZW50UGxhbkluZm8uc3Vic2NyaXB0aW9uUGVyaW9kLFxyXG4gICAgICBwcm9kdWN0czogcHJvZHVjdHMsXHJcbiAgICAgIGN1cnJlbmN5VHlwZTogdGhpcy5jbGllbnRJbmZvPy5jdXJyZW50UGxhbkluZm8/LmN1cnJlbmN5VHlwZSB8fCAncnVwZWVzJ1xyXG4gICAgfVxyXG4gICAgdGhpcy5QYXltZW50U3Vic2NyaXB0aW9uU2VydmljZS5iYXNlUHJpY2luZyhwYXJhbXMpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgdGhpcy5jbGllbnRJbmZvLmN1cnJlbnRQbGFuSW5mby5wcmljZSA9IHJlcy5kYXRhLnByaWNlO1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxQcmljZSA9IHJlcy5kYXRhLk9yaWdpbmFsUHJpY2U7XHJcbiAgICAgICAgdGhpcy5jbGllbnRJbmZvLmN1cnJlbnRQbGFuSW5mby50b3RhbENhbWVyYSA9IHJlcy5kYXRhLmNhbWFyYUNvdW50O1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVByb2R1Y3QoZXZlbnQ6IGFueSwgZGF0YTogc3RyaW5nKSB7XHJcbiAgICBsZXQgY2hhbmdlc0NvdW50ID0gMDtcclxuICAgIGxldCBwcm9kdWN0SW5kZXggPSB0aGlzLmNsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8ucHJvZHVjdC5maW5kSW5kZXgoKHByb2R1Y3Q6IGFueSkgPT4gcHJvZHVjdC5wcm9kdWN0TmFtZSA9PSBkYXRhKTtcclxuICAgIGlmIChwcm9kdWN0SW5kZXggIT0gLTEpIHtcclxuICAgICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKVxyXG4gICAgICAgIHRoaXMuY2xpZW50SW5mby5jdXJyZW50UGxhbkluZm8ucHJvZHVjdFtwcm9kdWN0SW5kZXhdLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLmNsaWVudEluZm8uY3VycmVudFBsYW5JbmZvLnByb2R1Y3RbcHJvZHVjdEluZGV4XS5hY3RpdmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8ucHJvZHVjdC5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgbGV0IGRldGFpbHMgPSB0aGlzLm9sZFByb2R1Y3RzLmZpbmQoKGVsZTogYW55KSA9PiBlbGUucHJvZHVjdE5hbWUgPT0gaXRlbS5wcm9kdWN0TmFtZSk7XHJcbiAgICAgIGlmIChkZXRhaWxzKSB7XHJcbiAgICAgICAgaWYgKGRldGFpbHMuYWN0aXZlICE9IGl0ZW0uYWN0aXZlKSB7XHJcbiAgICAgICAgICBjaGFuZ2VzQ291bnQrKztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICBpZiAoY2hhbmdlc0NvdW50ID09IDApIHtcclxuICAgICAgdGhpcy5kaXNhYmxlQnRuID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmRpc2FibGVCdG4gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuYmFzZVByaWNpbmcoKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbm9vZnN0b3Jlc2RhdGEobm9vZnN0b3Jlc3ZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuY2xpZW50SW5mby5jdXJyZW50UGxhbkluZm8udG90YWxTdG9yZXMgPSBub29mc3RvcmVzdmFsdWU7XHJcbiAgICB0aGlzLm5vb2ZzdG9yZXNkcm9wRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5iYXNlUHJpY2luZygpO1xyXG4gIH1cclxuICBBdmdzdG9yZXNkYXRhKEF2Z3N0b3Jlc3ZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuY2xpZW50SW5mby5jdXJyZW50UGxhbkluZm8uc3RvcmVTaXplID0gQXZnc3RvcmVzdmFsdWU7XHJcbiAgICB0aGlzLmJhc2VQcmljaW5nKCk7XHJcbiAgICB0aGlzLkF2Z3N0b3Jlc2Ryb3BEb3duID0gZmFsc2U7XHJcbiAgfVxyXG4gIGdldENvbG9yQ2xhc3ModG9vbFRpcDogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKHRvb2xUaXApIHtcclxuICAgICAgY2FzZSAnU3Vic2NyaWJlZCc6IHJldHVybiAnYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2VzcyBteC00JztcclxuICAgICAgY2FzZSAnVHJpYWwgRXhwaXJlZCc6IHJldHVybiAnYmFkZ2UgYmFkZ2UtbGlnaHQtd2FybmluZyBteC00JztcclxuICAgICAgY2FzZSAnT24gVHJpYWwnOiByZXR1cm4gJ2JhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnkgbXgtNCc7XHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMuQXZnc3RvcmVzZHJvcERvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubm9vZnN0b3Jlc2Ryb3BEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzaG93SW5mbyhkYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbENvbnRlbnRDb21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdsZycsIHNjcm9sbGFibGU6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnVzZXIgPSBkYXRhO1xyXG4gIH1cclxuICBjbG9zZVBvcHVwQW5kUmVsb2FkRGF0YSgpIHtcclxuICAgIHRoaXMuY2xpZW50QmlsbGluZ0luZm8odGhpcy5jbGllbnRJZCk7XHJcbiAgICB0aGlzLlBheW1lbnRTdWJzY3JpcHRpb25TZXJ2aWNlLnRyaWdnZXJSZWxvYWQoKTtcclxuICAgIHRoaXMuYWN0aXZlTW9kZWwuY2xvc2UoKTtcclxuICAgIHRoaXMuc2hvd1BvcHVwdHJhaWwgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1BvcHVwc3Vic2NyaWJlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93TWFpbkNvbnRlbnQgPSB0cnVlO1xyXG4gICAgdGhpcy5zaG93c3Vic2NyaXB0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuc2hvd1N1YnNjcmliZSA9IHRydWU7XHJcblxyXG4gIH1cclxuICBjbGllbnRCaWxsaW5nSW5mbyhpZDogYW55KSB7XHJcbiAgICB0aGlzLlBheW1lbnRTdWJzY3JpcHRpb25TZXJ2aWNlLmNsaWVudEJpbGxpbmdJbmZvKGlkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgIHRoaXMuY2xpZW50aW5mbyA9IHJlcy5kYXRhO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KX1cclxuXHJcbiAgc29ydFN0b3JlU2l6ZSgpIHtcclxuICAgIHRoaXMuc29ydEJ5ICo9IC0xO1xyXG4gICAgLy8gdGhpcy5nZXRQcm9kdWN0TGlzdCgpXHJcbiAgfVxyXG5cclxuICAvLyBnZXRQcm9kdWN0TGlzdCgpIHtcclxuICAvLyAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgLy8gICBsZXQgZGF0YSA9IHtcclxuICAvLyAgICAgaWQ6IHRoaXMuY2xpZW50SWQsXHJcbiAgLy8gICAgIHNvcnRDb2x1bW46ICdzdG9yZUNvdW50JyxcclxuICAvLyAgICAgc29ydEJ5OiB0aGlzLnNvcnRCeVxyXG4gIC8vICAgfTtcclxuICAvLyAgIHRoaXMuUGF5bWVudFN1YnNjcmlwdGlvblNlcnZpY2UuZ2V0UHJvZHVjdExpc3QoZGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAvLyAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAvLyAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAvLyAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gIC8vICAgICAgIHRoaXMucHJvZHVjdExpc3QgPSByZXMuZGF0YTtcclxuICAvLyAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBlbHNlIHtcclxuICAvLyAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgLy8gICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0sIChlcnJvcjogYW55KSA9PiB7XHJcbiAgLy8gICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gIC8vICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgLy8gICB9KVxyXG4gIC8vIH1cclxuXHJcbiAgRHJvcGRvd24odmFsdWU6IGFueSwgaW5kZXg6IG51bWJlciwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5kYXRhT2JqZWN0LmZvckVhY2goKGl0ZW06IGFueSwgaTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpICE9PSBpbmRleCkge1xyXG4gICAgICAgIGl0ZW0uaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5kYXRhT2JqZWN0W2luZGV4XS5pc09wZW4gPSAhdGhpcy5kYXRhT2JqZWN0W2luZGV4XS5pc09wZW47XHJcbiAgfVxyXG4gIGdldFN0b3JlTGlzdCgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmR5bmFtaWNEYXRhLnN0b3JlID0gdGhpcy5zZWxlY3RlZFZhbHVlc0FycmF5WzBdLm1hcCgodmFsdWU6IGFueSkgPT4gdmFsdWU/LnN0b3JlSWQpXHJcbiAgICB0aGlzLlBheW1lbnRTdWJzY3JpcHRpb25TZXJ2aWNlLmdldFN0b3JlTGlzdCh0aGlzLmR5bmFtaWNEYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93TWFpbkNvbnRlbnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dQb3B1cHRyYWlsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLmRhdGE7XHJcbiAgICAgICAgdGhpcy5zdG9yZUxpc3QuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpdGVtLmNoZWNrZWQgPSB0aGlzLnNlbGVjdEFsbDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXNBcnJheSA9IHRoaXMuc3RvcmVMaXN0O1xyXG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9IHJlcy5kYXRhLmNvdW50O1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSwgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgIH0pXHJcbiAgICBcclxuICB9XHJcbiAgZ2V0U3RvcmVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRTdG9yZUxpc3RcclxuICB9XHJcbiAgZ2V0UHJvZHVjdCgpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkU3RvcmVMaXN0Lmxlbmd0aCB8fCB0aGlzLnNlbGVjdEFsbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zdG9yZVByb2R1Y3Q7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG4gIGdldEF2YWlsYWJsZVN0b3JlcygpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLlBheW1lbnRTdWJzY3JpcHRpb25TZXJ2aWNlLmdldFN0b3Jlcyh7IGNsaWVudElkOiB0aGlzLmNsaWVudElkfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuYXZhaWxhYmxlU3RvcmVzID0gcmVzLmRhdGEucmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy5kYXRhT2JqZWN0WzBdLlN0b3JlcyA9IHJlcy5kYXRhLnJlc3VsdDtcclxuICAgICAgICAgIHRoaXMubG9hZFNlbGVjdGVkU3RvcmVzKHRoaXMuZGF0YU9iamVjdFswXS5TdG9yZXMpXHJcbiAgICAgICAgICB0aGlzLmR1bW15QXJyYXkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YU9iamVjdCkpXHJcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9ICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZVN0b3JlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgfSxcclxuICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBsb2FkU2VsZWN0ZWRTdG9yZXMoc3RvcmVzOiBhbnlbXSkge1xyXG4gICAgLy9kZWZhdWx0IGFsbCBub3Qgc2VsZWN0ZWRcclxuICAgIC8vIHRoaXMuc2VsZWN0ZWRWYWx1ZXNBcnJheVswXSA9IFtdO1xyXG4gICAgLy8gdGhpcy5kYXRhT2JqZWN0WzBdLlN0b3Jlcy5mb3JFYWNoKChzdG9yZTogYW55KSA9PiB7XHJcbiAgICAvLyAgIGlmKHN0b3Jlcy5pbmNsdWRlcyhzdG9yZS5zdG9yZUlkKSkge1xyXG4gICAgLy8gICAgIHN0b3JlLmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgLy8gICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXNBcnJheVswXS5wdXNoKHN0b3JlKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcblxyXG4gICAgLy9kZWZhdWx0IEFsbCBzZWxlY3RlZFxyXG4gICAgdGhpcy5kYXRhT2JqZWN0WzBdLlN0b3Jlcz8uZm9yRWFjaCgoc3RvcmU6IGFueSkgPT4gc3RvcmUuY2hlY2tlZCA9IHRydWUpXHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVzQXJyYXlbMF0gPSB0aGlzLmRhdGFPYmplY3RbMF0uU3RvcmVzXHJcbiAgICB0aGlzLnNlbGVjdGVkVGV4dCA9IGAke3RoaXMuc2VsZWN0ZWRWYWx1ZXNBcnJheVswXS5sZW5ndGh9IFN0b3JlcyBTZWxlY3RlZGA7XHJcbiAgfVxyXG4gIHRvZ2dsZUNoZWNrYm94KGV2ZW50OiBhbnksIHN0b3JlOiBhbnksIGluZGV4OiBudW1iZXIsIHN1YkluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkU3RvcmVzID0gdGhpcy5kYXRhT2JqZWN0W2luZGV4XS5TdG9yZXM7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVzQXJyYXlbaW5kZXhdID0gdGhpcy5zZWxlY3RlZFZhbHVlc0FycmF5W2luZGV4XSB8fCBbXTtcclxuXHJcbiAgICBpZiAoc3RvcmUgPT09ICdTZWxlY3QgQWxsJykge1xyXG4gICAgICBjb25zdCBjaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XHJcbiAgICAgIHNlbGVjdGVkU3RvcmVzLmZvckVhY2goKGl0ZW06IGFueSkgPT4gaXRlbS5jaGVja2VkID0gY2hlY2tlZCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXNBcnJheVtpbmRleF0gPSBjaGVja2VkID8gWy4uLnNlbGVjdGVkU3RvcmVzXSA6IFtdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XHJcbiAgICAgIGNvbnN0IHN0b3JlSW5kZXggPSB0aGlzLnNlbGVjdGVkVmFsdWVzQXJyYXlbaW5kZXhdLmZpbmRJbmRleCgoaXRlbTogYW55KSA9PiBpdGVtLnN0b3JlTmFtZSA9PT0gc3RvcmUuc3RvcmVOYW1lKTtcclxuICAgICAgaXNDaGVja2VkID8gdGhpcy5zZWxlY3RlZFZhbHVlc0FycmF5W2luZGV4XS5wdXNoKHN0b3JlKSA6IHRoaXMuc2VsZWN0ZWRWYWx1ZXNBcnJheVtpbmRleF0uc3BsaWNlKHN0b3JlSW5kZXgsIDEpO1xyXG4gICAgICB0aGlzLmRhdGFPYmplY3RbaW5kZXhdLlN0b3Jlc1tzdWJJbmRleF0uY2hlY2tlZCA9IGlzQ2hlY2tlZDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RBbGxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNlbGVjdGFsbCR7aW5kZXh9YCkgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGlmIChzZWxlY3RBbGxFbGVtZW50KSBzZWxlY3RBbGxFbGVtZW50LmNoZWNrZWQgPSBzZWxlY3RlZFN0b3Jlcy5ldmVyeSgoaXRlbTogYW55KSA9PiBpdGVtLmNoZWNrZWQpO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXNBcnJheVtpbmRleF0uZm9yRWFjaCgoc3RvcmU6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBjaGVja2JveEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgb3B0aW9uJHtzdG9yZS5zdG9yZU5hbWV9YCkgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgaWYgKGNoZWNrYm94RWxlbWVudCkgY2hlY2tib3hFbGVtZW50LmNoZWNrZWQgPSBzdG9yZS5jaGVja2VkO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZFRleHQgPSBgJHt0aGlzLnNlbGVjdGVkVmFsdWVzQXJyYXlbMF0ubGVuZ3RofSBTdG9yZXMgU2VsZWN0ZWRgO1xyXG4gICAgLy8gdGhpcy5QYXltZW50U3Vic2NyaXB0aW9uU2VydmljZS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWVzQXJyYXlbMF0ubWFwKCh4OmFueSkgPT4geC5zdG9yZUlkKSk7XHJcbiAgfVxyXG4gIHNlYXJjaERhdGEoc3RvcmVzOiBhbnksIGk6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoVmFsdWUpIHtcclxuICAgICAgbGV0IHJlcyA9IHN0b3Jlcy5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIEZpbmQgdGhlIGl0ZW0gaW4gc2VsZWN0ZWRWYWx1ZXNBcnJheSB0aGF0IG1hdGNoZXMgdGhlIGN1cnJlbnQgc3RvcmUgaXRlbVxyXG4gICAgICAgIGxldCBmaW5kQ2hlY2tlZCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXNBcnJheVtpXT8uZmluZCgoaXNzdWU6IGFueSkgPT4gaXNzdWUuc3RvcmVJZCA9PT0gaXRlbS5zdG9yZUlkKTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBpdGVtIHdpdGggdGhlIGZvdW5kIGNoZWNrZWQgc3RhdHVzIG9yIGRlZmF1bHQgdG8gZmFsc2VcclxuICAgICAgICBsZXQgdXBkYXRlZEl0ZW0gPSB7XHJcbiAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgY2hlY2tlZDogZmluZENoZWNrZWQgPyBmaW5kQ2hlY2tlZC5jaGVja2VkIDogZmFsc2VcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gdXBkYXRlZEl0ZW07XHJcbiAgICAgIH0pLmZpbHRlcigoaXRlbTogYW55KSA9PiBuZXcgUmVnRXhwKHRoaXMuc2VhcmNoVmFsdWUsICdpJykudGVzdChpdGVtLnN0b3JlTmFtZSkpO1xyXG5cclxuICAgICAgcmV0dXJuIHJlcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBzdG9yZXM7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBzdGFydFRyaWFsKGRhdGE6IGFueSwgdHlwZTogYW55KSB7XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oU3RhcnR0cmFpbHJlcXVlc3RDb21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCcsXHJcbiAgICB9KTtcclxuICAgIC8vIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmNsaWVudElkID0gdGhpcy5jbGllbnRJZDtcclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCA9PSAnc3RhcnR0cmlhbHByb2R1Y3QnKSB7XHJcbiAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgICAgcHJvZHVjdDogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgICBuYW1lOiBkYXRhXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfVxyXG4gICAgdGhpcy5QYXltZW50U3Vic2NyaXB0aW9uU2VydmljZS51cGRhdGVQcm9kdWN0KHBhcmFtcykucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICB0aGlzLnNob3dNYWluQ29udGVudCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd1BvcHVwdHJhaWwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uTGlzdCgpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxufSlcclxufVxyXG5cclxuXHJcbiAgY29udmVydFVwcGVyKGRhdGE6IHN0cmluZykge1xyXG4gICAgbGV0IFtmaXJzdFdvcmQsIHNlY29uZFdvcmRdID0gZGF0YS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEgJDInKS5zcGxpdCgnICcpO1xyXG4gICAgZmlyc3RXb3JkID0gZmlyc3RXb3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgZmlyc3RXb3JkLnNsaWNlKDEpO1xyXG4gICAgcmV0dXJuIGZpcnN0V29yZCArICcgJyArIHNlY29uZFdvcmQ7XHJcbiAgfVxyXG4gIHN1YnNjcmliZXByb2R1Y3QoZGF0YTogYW55LCB0eXBlOiBhbnkpIHtcclxuICAgIHRoaXMubWVzc2FnZSA9IGRhdGEucHJvZHVjdFxyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFN1YnNjcmliZVJlcXVlc3RDb21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCcsXHJcbiAgICB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnByb2R1Y3ROYW1lID0gZGF0YS5hbGlzZVByb2R1Y3ROYW1lO1xyXG4gICAgLy8gbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuY2xpZW50SWQgPSB0aGlzLmNsaWVudElkO1xyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ID09ICdzdWJzY3JpYmVwcm9kdWN0Jykge1xyXG4gICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXHJcbiAgICAgIHByb2R1Y3Q6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgICAgbmFtZTogZGF0YT8ucHJvZHVjdFxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH1cclxuICAgIHRoaXMuUGF5bWVudFN1YnNjcmlwdGlvblNlcnZpY2UudXBkYXRlUHJvZHVjdChwYXJhbXMpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgdGhpcy5zaG93TWFpbkNvbnRlbnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dQb3B1cHN1YnNjcmliZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uTGlzdCgpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxufSlcclxufVxyXG4gIG5vdGlmaWNhdGlvbkxpc3QoKSB7XHJcbiAgICB0aGlzLm5vdGlmaWNhdGlvbkRldGFpbHMgPSBbXTtcclxuICAgIGxldCBkYXRhID0gdGhpcy5jbGllbnRJZDtcclxuICAgIHRoaXMuUGF5bWVudFN1YnNjcmlwdGlvblNlcnZpY2UuZ2V0Tm90aWZpY2F0aW9uKGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25EZXRhaWxzID0gcmVzLmRhdGE7XHJcblxyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uRGV0YWlscy5ub3RpZmljYXRpb25MaXN0LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgaXRlbS5wcm9kdWN0dHJhaWxkcm9wRG93biA9IGZhbHNlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLy8gdGhpcy5jdXJyZW50UGxhbiA9IHJlcy5kYXRhLmN1cnJlbnRQbGFuO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cInNob3dNYWluQ29udGVudFwiPlxyXG48c2VjdGlvbiAqbmdJZj1cInN1YnNjcmlwdGlvbiA9PT0gJ3ByaWNpbmdwbGFuJ1wiPlxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dOYXZHcm91cFwiIGNsYXNzPVwibmF2LWdyb3VwIG5hdi1ncm91cC1vdXRsaW5lIG14LWF1dG8gbXQtOCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWNvbG9yLWdyYXktNjAwIGJ0bi1hY3RpdmUgYnRuLWFjdGl2ZS1zZWNvbmRhcnkgcHgtNiBweS0zIG1lLTJcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJjbGllbnRJbmZvPy5jdXJyZW50UGxhbkluZm8/LnN1YnNjcmlwdGlvblBlcmlvZCA9PT0gJ21vbnRobHknID8gJ2FjdGl2ZVBsYW5CdG4nOidpbmFjdGl2ZVBsYW5CdG4nXCJcclxuICAgICAgICAgICAgZGF0YS1rdC1wbGFuPVwibW9udGhcIiAoY2xpY2spPVwic2VsZWN0UGxhbignbW9udGhseScpXCI+XHJcbiAgICAgICAgICAgIE1vbnRobHlcclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tY29sb3ItZ3JheS02MDAgYnRuLWFjdGl2ZSBidG4tYWN0aXZlLXNlY29uZGFyeSBweC02IHB5LTNcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJjbGllbnRJbmZvPy5jdXJyZW50UGxhbkluZm8/LnN1YnNjcmlwdGlvblBlcmlvZCA9PT0gJ3F1YXJ0ZXJseSc/ICdhY3RpdmVQbGFuQnRuJzonaW5hY3RpdmVQbGFuQnRuJ1wiXHJcbiAgICAgICAgICAgIGRhdGEta3QtcGxhbj1cIlF1YXJ0ZXJseVwiIChjbGljayk9XCJzZWxlY3RQbGFuKCdxdWFydGVybHknKVwiPlxyXG4gICAgICAgICAgICBRdWFydGVybHkgLSAxMCVcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1jb2xvci1ncmF5LTYwMCBidG4tYWN0aXZlIGJ0bi1hY3RpdmUtc2Vjb25kYXJ5IHB4LTYgcHktM1wiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8uc3Vic2NyaXB0aW9uUGVyaW9kID09PSAnYW5udWFsJz8gJ2FjdGl2ZVBsYW5CdG4nOidpbmFjdGl2ZVBsYW5CdG4nXCJcclxuICAgICAgICAgICAgZGF0YS1rdC1wbGFuPVwiYW5udWFsXCIgKGNsaWNrKT1cInNlbGVjdFBsYW4oJ2FubnVhbCcpXCI+XHJcbiAgICAgICAgICAgIEFubnVhbCAtIDE1JVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHJvdyBcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByaWNpbmd0ZXh0IG1iLTFcIj57e2NsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8uc3Vic2NyaXB0aW9uVHlwZSB8IHRpdGxlY2FzZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VtaSBtYi0yXCI+SW50ZWdyYXRlZCBTb2x1dGlvbiBmb3IgR3Jvd2luZyBCdXNpbmVzczwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1YjF0ZXh0IG1iLTFcIj5TdGFydHMgZnJvbSA8c3BhbiBjbGFzcz1cImJpbGxlZHRleHQgbXMtMlwiPjxzPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2xpZW50SW5mbz8uY3VycmVudFBsYW5JbmZvPy5jdXJyZW5jeVR5cGUgPT09ICdpbnInXCI+4oK5PC9zcGFuPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2xpZW50SW5mbz8uY3VycmVudFBsYW5JbmZvPy5jdXJyZW5jeVR5cGUgPT09ICdkb2xsYXInXCI+JDwvc3Bhbj57e29yaWdpbmFsUHJpY2V9fTwvcz48L3NwYW4+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmlsbGluZ3RleHQgbXMtNFwiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjbGllbnRJbmZvPy5jdXJyZW50UGxhbkluZm8/LmN1cnJlbmN5VHlwZSA9PT0gJ2lucidcIj7igrk8L3NwYW4+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8uY3VycmVuY3lUeXBlID09PSAnZG9sbGFyJ1wiPiQ8L3NwYW4+e3tjbGllbnRJbmZvPy5jdXJyZW50UGxhbkluZm8/LnByaWNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAwfX08L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1YjF0ZXh0IG1iLTIgdGV4dC1lbmRcIj5QZXIgc3RvcmUgUGVyIG1vbnRoPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd1N0b3JlU2VsZWN0aW9uXCIgY2xhc3M9XCJjYXJkLWJvZHkgcC0wIG10LTRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub0RhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXNyYyB3LTI1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGEuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nICYmICFub0RhdGFcIiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgIDx0YWJsZSAgY2xhc3M9XCJ0YWJsZSBib3R0b20tYm9yZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+UHJvZHVjdCBJbmZvPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJzb3J0U3RvcmVTaXplKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmljZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic29ydEJ5ICE9PSAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjAwMDE2IDEuMzMzMzdWMTAuNjY2N002LjAwMDE2IDEwLjY2NjdMMTAuNjY2OCA2LjAwMDA0TTYuMDAwMTYgMTAuNjY2N0wxLjMzMzUgNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0QnkgIT09IC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjAwMDE2IDEwLjY2NjdMNi4wMDAxNiAxLjMzMzM3TTYuMDAwMTYgMS4zMzMzN0wxLjMzMzUgNi4wMDAwNE02LjAwMDE2IDEuMzMzMzdMMTAuNjY2OCA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5QbGFuIEluZm88L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keSAgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgY2xpZW50SW5mbz8uY3VycmVudFBsYW5JbmZvPy5wcm9kdWN0O2xldCBpPWluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlIHN1YnNjcmliZWR0ZXh0IHRleHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbnZlcnRVcHBlcihwcm9kdWN0Py5wcm9kdWN0TmFtZSkgfHwgJy0tJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbWlcIj57e3Byb2R1Y3Q/LnN0b3JlQ291bnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgMH19IHN0b3JlczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbWlcIj7igrkge3socHJvZHVjdD8ucHJpY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgMCkgPy50b0xvY2FsZVN0cmluZygnZW4tSU4nKX19PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInByb2R1Y3Q/LnN0YXR1cyA9PT0nbGl2ZSdcIiBjbGFzcz1cImJhZGdlLWxpZ2h0LXN1Y2Nlc3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1YnNjcmliZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFzaG93U3Vic2NyaWJlICYmIHByb2R1Y3Q/LnN0YXR1cyA9PT0ndHJpYWwnXCIgIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIiAoY2xpY2spPVwic3Vic2NyaWJlcHJvZHVjdChwcm9kdWN0LCAnc3Vic2NyaXB0aW9uJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtcy0yIG5nLXN0YXItaW5zZXJ0ZWQgYnRuLWJsb2NrXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48c3BhbiBjbGFzcz1cInN1Ym1pdFwiPlN1YnNjcmliZSBOb3cgPC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gKm5nSWY9XCJjbGllbnRJbmZvPy5iaWxsaW5nRGV0YWlscz8uYmlsbGluZ0FkZHJlc3NcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFzaG93c3Vic2NyaXB0aW9uICYmICFwcm9kdWN0Py5zdGF0dXNcIiAoY2xpY2spPVwic2hvd1N0b3JlU2VsZWN0aW9uID0gdHJ1ZTtzZWxlY3RlZFByb2R1Y3Q9cHJvZHVjdC5wcm9kdWN0TmFtZVwiIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtcy0yIG5nLXN0YXItaW5zZXJ0ZWQgdy01MCBidG4tYmxvY2tcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxzcGFuIGNsYXNzPVwic3VibWl0XCI+U3RhcnQgVHJhaWwgPC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtbGctNiBwZS04IHZlcnRpY2FsXCI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGZ2LXJvdyBmdi1wbHVnaW5zLWljb24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTNcIj5ObyBvZiBTdG9yZXMgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXNlbGVjdCBkcm9wc2VsZWN0IGxldmVsdmlld3RleHRcIiBpZD1cImN1cnJlbmN5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJub29mc3RvcmVzRHJvcGRvd24oJGV2ZW50KVwiIGFyaWEtbGFiZWw9XCJEZWZhdWx0IHNlbGVjdCBleGFtcGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8udG90YWxTdG9yZXMgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vb2ZzdG9yZXN0eXBlWzBdfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm5vb2ZzdG9yZXNkcm9wRG93blwiIGNsYXNzPVwiY2FyZCBweS0yIHctMTAwIHBvc2l0aW9uLWFic29sdXRlIGVuZC0wIHotMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsICpuZ0Zvcj1cImxldCBub29mc3RvcmVzIG9mIG5vb2ZzdG9yZXN0eXBlXCIgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwiY2xpZW50SW5mbz8uY3VycmVudFBsYW5JbmZvPy50b3RhbFN0b3JlcyA9PT0gbm9vZnN0b3JlcyA/ICdhY3RpdmUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb2R1Y3R0ZXh0IHB4LTUgaXRlbXMgY3Vyc29yLXBvaW50ZXIgcHktNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJub29mc3RvcmVzZGF0YShub29mc3RvcmVzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBub29mc3RvcmVzIH19PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0zXCI+QXZlcmFnZSBTaXplIG9mIFN0b3JlcyA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tc2VsZWN0IGRyb3BzZWxlY3QgbGV2ZWx2aWV3dGV4dFwiIGlkPVwiY3VycmVuY3lcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIkF2Z3N0b3Jlc0Ryb3Bkb3duKCRldmVudClcIiBhcmlhLWxhYmVsPVwiRGVmYXVsdCBzZWxlY3QgZXhhbXBsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjbGllbnRJbmZvPy5jdXJyZW50UGxhbkluZm8/LnN0b3JlU2l6ZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZnc3RvcmVzdHlwZVswXS52YWx1ZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJBdmdzdG9yZXNkcm9wRG93blwiIGNsYXNzPVwiY2FyZCBweS0yIHctMTAwIHBvc2l0aW9uLWFic29sdXRlIGVuZC0wIHotMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsICpuZ0Zvcj1cImxldCBBdmdzdG9yZXMgb2YgQXZnc3RvcmVzdHlwZVwiIGNsYXNzPVwibGlzdC11bnN0eWxlZCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cImNsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8uc3RvcmVTaXplID09PSBBdmdzdG9yZXMgPyAnYWN0aXZlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9kdWN0dGV4dCBweC01IGl0ZW1zIGN1cnNvci1wb2ludGVyIHB5LTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiQXZnc3RvcmVzZGF0YShBdmdzdG9yZXMudmFsdWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7QXZnc3RvcmVzLm5hbWV9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1heGNhbSBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgTWF4aW11bSB7e2NsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8udG90YWxDYW1lcmF9fSBDYW1lcmFzIGFyZSBwZXJtaXR0ZWQgaW4gc3RvcmVzIHdpdGggc3F1YXJlXHJcbiAgICAgICAgICAgICAgICAgICAgZmVldCBiZXR3ZWVuIHt7Y2xpZW50SW5mbz8uY3VycmVudFBsYW5JbmZvPy5zdG9yZVNpemV9fS5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3R0ZXh0IG15LTUgbXQtMTJcIj5TZWxlY3QgUHJvZHVjdHM8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3RsaXN0IG9mIGNsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8ucHJvZHVjdFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTZcIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHJvbGU9XCJzd2l0Y2hcIiBpZD1cInRhbmdvcmV2b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwicHJvZHVjdGxpc3QuYWN0aXZlID09PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlUHJvZHVjdCgkZXZlbnQscHJvZHVjdGxpc3QucHJvZHVjdE5hbWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwcm9kdWN0bGlzdC5zdGF0dXMgPT09ICdsaXZlJyB8fCBwcm9kdWN0bGlzdC5zdGF0dXMgPT09ICd0cmlhbCcgXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJmbGV4U3dpdGNoQ2hlY2tEZWZhdWx0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGhlYWRpbmd0ZXh0IGQtZmxleFwiPnt7cHJvZHVjdGxpc3QuYWxpc2VQcm9kdWN0TmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJnZXRDb2xvckNsYXNzKHByb2R1Y3RsaXN0LnRvb2xUaXApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3Byb2R1Y3RsaXN0LnRvb2xUaXB9fSA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZXhwaXJlZFByb2R1Y3RzLmxlbmd0aCAmJiBwcm9kdWN0bGlzdC5wcm9kdWN0TmFtZS5pbmNsdWRlcyhleHBpcmVkUHJvZHVjdHMpXCI+PGltZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1zLTJcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9jdXN0b21wb3B1cC1JY29ucy9jbG9ja2V4cGlyeS1pY29uLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPiA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidHJpYWxwcm9kdWN0cy5sZW5ndGggJiYgcHJvZHVjdGxpc3QucHJvZHVjdE5hbWUuaW5jbHVkZXModHJpYWxwcm9kdWN0cylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibXMtMlwiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL2N1c3RvbXBvcHVwLUljb25zL3ByaW1hcnktY2xvY2staWNvbi5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlld1wiIChjbGljayk9XCJzaG93SW5mbyhwcm9kdWN0bGlzdC5wcm9kdWN0TmFtZSlcIj5WaWV3IEluZm8gPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkgNi41VjkuNUM5IDkuNzY1MjIgOC44OTQ2NCAxMC4wMTk2IDguNzA3MTEgMTAuMjA3MUM4LjUxOTU3IDEwLjM5NDYgOC4yNjUyMiAxMC41IDggMTAuNUgyLjVDMi4yMzQ3OCAxMC41IDEuOTgwNDMgMTAuMzk0NiAxLjc5Mjg5IDEwLjIwNzFDMS42MDUzNiAxMC4wMTk2IDEuNSA5Ljc2NTIyIDEuNSA5LjVWNEMxLjUgMy43MzQ3OCAxLjYwNTM2IDMuNDgwNDMgMS43OTI4OSAzLjI5Mjg5QzEuOTgwNDMgMy4xMDUzNiAyLjIzNDc4IDMgMi41IDNINS41TTcuNSAxLjVIMTAuNU0xMC41IDEuNVY0LjVNMTAuNSAxLjVMNSA3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNiBweC04XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYi02XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByaWNpbmd0ZXh0XCI+e3tjbGllbnRJbmZvPy5jdXJyZW50UGxhbkluZm8/LnN1YnNjcmlwdGlvblR5cGUgfCB0aXRsZWNhc2V9fTwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZW1pIG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICBJbnRlZ3JhdGVkIFNvbHV0aW9uIGZvciBHcm93aW5nIEJ1c2luZXNzXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj48c3BhbiBjbGFzcz1cIm1lLTMgbXQtNVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIyMzFfNDIzNDIpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy45OTk2NyAxMC42NjczVjguMDAwNjVNNy45OTk2NyA1LjMzMzk4SDguMDA2MzRNMTQuNjY2MyA4LjAwMDY1QzE0LjY2NjMgMTEuNjgyNiAxMS42ODE2IDE0LjY2NzMgNy45OTk2NyAxNC42NjczQzQuMzE3NzggMTQuNjY3MyAxLjMzMzAxIDExLjY4MjYgMS4zMzMwMSA4LjAwMDY1QzEuMzMzMDEgNC4zMTg3NSA0LjMxNzc4IDEuMzMzOTggNy45OTk2NyAxLjMzMzk4QzExLjY4MTYgMS4zMzM5OCAxNC42NjYzIDQuMzE4NzUgMTQuNjY2MyA4LjAwMDY1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0I1NDcwOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMjMxXzQyMzQyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VidGV4dCBtdC02XCI+WW91IHdpbGwgb25seSBiZSBjaGFyZ2VkIGZvciA8IFRhbmdvIFRyYWZmaWMsVGFuZ28gPGJyPlpvbmUgJiBUYW5nbyBSZXZPcHMgPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1YjF0ZXh0IG10LTVcIj5TdGFydHMgZnJvbSA8c3BhbiBjbGFzcz1cImJpbGxlZHRleHQgbXMtMlwiPjxzPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjbGllbnRJbmZvPy5jdXJyZW50UGxhbkluZm8/LmN1cnJlbmN5VHlwZSA9PT0gJ2lucidcIj7igrk8L3NwYW4+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8uY3VycmVuY3lUeXBlID09PSAnZG9sbGFyJ1wiPiQ8L3NwYW4+e3tvcmlnaW5hbFByaWNlfX08L3M+PC9zcGFuPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmlsbGluZ3RleHQgbXMtNFwiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNsaWVudEluZm8/LmN1cnJlbnRQbGFuSW5mbz8uY3VycmVuY3lUeXBlID09PSAnaW5yJ1wiPuKCuTwvc3Bhbj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjbGllbnRJbmZvPy5jdXJyZW50UGxhbkluZm8/LmN1cnJlbmN5VHlwZSA9PT0gJ2RvbGxhcidcIj4kPC9zcGFuPnt7Y2xpZW50SW5mbz8uY3VycmVudFBsYW5JbmZvPy5wcmljZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAwfX08L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViMXRleHQgbXQtMlwiPlBlciBzdG9yZSBQZXIgbW9udGg8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsc3RleHRcIj5CaWxsaW5nIERldGFpbHM8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWIxdGV4dCBweS00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNFwiPkJyYW5kIE5hbWU6IHt7Y2xpZW50SW5mbz8uY2xpZW50TmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PkJpbGxpbmcgQWRkcmVzczoge3tjbGllbnRJbmZvPy5iaWxsaW5nRGV0YWlscz8uYmlsbGluZ0FkZHJlc3MgfHwgJy0tJ319PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgc3Vic2NyaWJlXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ1cGRhdGUoKVwiIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTIgbmctc3Rhci1pbnNlcnRlZCB3LTEwMCBidG4tYmxvY2sgdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNsaWVudEluZm8/LmJpbGxpbmdEZXRhaWxzPy5iaWxsaW5nQWRkcmVzc1wiPjxzcGFuIGNsYXNzPVwic3VibWl0XCI+RW50ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgQmlsbGluZyBEZXRhaWxzIDwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNvbmZpcm1hdGlvbigpXCIgdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjbGllbnRJbmZvPy5iaWxsaW5nRGV0YWlscz8uYmlsbGluZ0FkZHJlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTIgbmctc3Rhci1pbnNlcnRlZCB3LTEwMCBidG4tYmxvY2tcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7XCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUJ0blwiPjxzcGFuIGNsYXNzPVwic3VibWl0XCI+U3Vic2NyaWJlIE5vdyA8L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICA8L2Rpdj5cclxuPGRpdiAqbmdJZj1cInNob3dTdG9yZVNlbGVjdGlvblwiIGNsYXNzPVwicHgtOFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm15LTUgZHJvcGRvd24xIGN1cnNvci1wb2ludGVyIGgtNzAwXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YU9iamVjdDsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgIDxsYWJlbCBmb3I9XCJzdG9yZUxpc3RcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5TZWxlY3QgU3RvcmVzPC9sYWJlbD5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBkaXNhYmxlXCIgaWQ9XCJzdG9yZU5hbWVcIiBbbmdNb2RlbF09XCJzZWxlY3RlZFRleHRcIiAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFN0b3Jlc1wiIChjbGljayk9XCJEcm9wZG93bignU3RvcmVzJyxpLCRldmVudClcIiByZWFkb25seT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5pc09wZW5cIiBjbGFzcz1cImRyb3Bkb3duLWNvbnRlbnQgcG9zaXRpb24tYWJzb2x1dGVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwdC0zIHB4LTVcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cIlNlbGVjdCBBbGxcIiBpZD1cInNlbGVjdGFsbHt7aX19XCJcclxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZFZhbHVlc0FycmF5W2ldPy5sZW5ndGggPT09IGl0ZW0uU3RvcmVzLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVDaGVja2JveCgkZXZlbnQsJ1NlbGVjdCBBbGwnLCBpLDApXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIHB4LTNcIiBmb3I9XCJzZWxlY3RhbGx7e2l9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFNlbGVjdCBBbGxcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIGJvcmRlci1ncmF5IG10LTNcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBteC0zXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgbXMtMyBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE3XCIgdmlld0JveD1cIjAgMCAxNiAxN1wiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgMTQuNUwxMS4xIDExLjZNMTIuNjY2NyA3LjgzMzMzQzEyLjY2NjcgMTAuNzc4OSAxMC4yNzg5IDEzLjE2NjcgNy4zMzMzMyAxMy4xNjY3QzQuMzg3ODEgMTMuMTY2NyAyIDEwLjc3ODkgMiA3LjgzMzMzQzIgNC44ODc4MSA0LjM4NzgxIDIuNSA3LjMzMzMzIDIuNUMxMC4yNzg5IDIuNSAxMi42NjY3IDQuODg3ODEgMTIuNjY2NyA3LjgzMzMzWlwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAjc2VhcmNoSW5wdXQgdHlwZT1cInRleHRcIiBpZD1cInNlYXJjaFZhbHVlXCIgbmFtZT1cInNlYXJjaFZhbHVlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VhcmNoaW5wdXQgcHMtMTQgcHktMiBtZS0yIG10LTJcIlxyXG5wbGFjZWhvbGRlcj1cIlNlYXJjaFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFsobmdNb2RlbCldPVwic2VhcmNoVmFsdWVcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCIvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc3RvcmUgb2Ygc2VhcmNoRGF0YShpdGVtLlN0b3JlcyxpKTtsZXQgaj1pbmRleDtcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcHktMyBweC01XCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgdHlwZT1cImNoZWNrYm94XCIgW3ZhbHVlXT1cInN0b3JlPy5zdG9yZU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwib3B0aW9ue3tzdG9yZT8uc3RvcmVOYW1lfX1cIiBbY2hlY2tlZF09XCJzdG9yZT8uY2hlY2tlZFwiIFxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQ2hlY2tib3goJGV2ZW50LHN0b3JlLGksailcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgcHgtMyBjdXJzb3ItcG9pbnRlclwiIGZvcj1cIm9wdGlvbnt7c3RvcmU/LnN0b3JlTmFtZX19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgc3RvcmU/LnN0b3JlTmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gKm5nSWY9XCJjbGllbnRJbmZvPy5iaWxsaW5nRGV0YWlscz8uYmlsbGluZ0FkZHJlc3NcIiAtLT5cclxuICAgIDwhLS0gKGNsaWNrKT1cImNvbmZpcm1hdGlvbigpXCIgLS0+XHJcbiAgICBcclxuICAgIDxidXR0b24gKGNsaWNrKT1cInN0YXJ0VHJpYWwoc2VsZWN0ZWRQcm9kdWN0LCAndHJpYWwnKVwiIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIlxyXG4gICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbmctc3Rhci1pbnNlcnRlZCBidG4tYmxvY2sgdy0xMDAgbWItOFwiIHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcDtcIiBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkVmFsdWVzQXJyYXlbMF0/Lmxlbmd0aFwiXHJcbiAgICA+PHNwYW4gY2xhc3M9XCJzdWJtaXRcIj5TdGFydCBUcmFpbDwvc3Bhbj48L2J1dHRvbj5cclxuXHJcbjwvZGl2PlxyXG48L3NlY3Rpb24+XHJcblxyXG5cclxuXHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwic2hvd1BvcHVwdHJhaWxcIiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgZ2lmaW1hZ2VcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwLTZcIj5cclxuICAgICAgICA8ZGl2PjxzcGFuPjxzdmcgd2lkdGg9XCI1NlwiIGhlaWdodD1cIjU2XCIgdmlld0JveD1cIjAgMCA1NiA1NlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIGZpbGw9XCIjRDFGQURGXCIvPlxyXG4gICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNFQ0ZERjNcIiBzdHJva2Utd2lkdGg9XCI4XCIvPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTM4IDI3LjA3OTlWMjcuOTk5OUMzNy45OTg4IDMwLjE1NjMgMzcuMzAwNSAzMi4yNTQ1IDM2LjAwOTMgMzMuOTgxN0MzNC43MTgyIDM1LjcwODggMzIuOTAzMyAzNi45NzIzIDMwLjgzNTQgMzcuNTgzOEMyOC43Njc0IDM4LjE5NTIgMjYuNTU3MyAzOC4xMjE4IDI0LjUzNDUgMzcuMzc0NEMyMi41MTE3IDM2LjYyNzEgMjAuNzg0NyAzNS4yNDYgMTkuNjExIDMzLjQzNjlDMTguNDM3MyAzMS42Mjc5IDE3Ljg3OTggMjkuNDg3OSAxOC4wMjE3IDI3LjMzNjJDMTguMTYzNiAyNS4xODQ0IDE4Ljk5NzIgMjMuMTM2MiAyMC4zOTgzIDIxLjQ5NjlDMjEuNzk5NCAxOS44NTc3IDIzLjY5MjggMTguNzE1MiAyNS43OTYyIDE4LjI0QzI3Ljg5OTYgMTcuNzY0OCAzMC4xMDAzIDE3Ljk4MjIgMzIuMDcgMTguODU5OU0zOCAxOS45OTk5TDI4IDMwLjAwOTlMMjUgMjcuMDA5OVwiIHN0cm9rZT1cIiMwMzk4NTVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nIG10LTQgbXMtMVwiPlRyYWlsIFN0YXJ0ZWQgU3VjY2Vzc2Z1bGx5PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBmdi1yb3cgZnYtcGx1Z2lucy1pY29uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VtaSBteS0zIG14LTJcIj5Zb3VyIFRyYWlsIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBhY3RpdmF0ZWQuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG10LTIgcHktMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBweC00IG5nLXN0YXItaW5zZXJ0ZWQgdy0xMDBcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlUG9wdXBBbmRSZWxvYWREYXRhKClcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1Ym1pdFwiPk9rYXk8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cInNob3dQb3B1cHN1YnNjcmliZWRcIiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgZ2lmaW1hZ2VcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwLTZcIj5cclxuICAgICAgICA8ZGl2PjxzcGFuPjxzdmcgd2lkdGg9XCI1NlwiIGhlaWdodD1cIjU2XCIgdmlld0JveD1cIjAgMCA1NiA1NlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIGZpbGw9XCIjRDFGQURGXCIvPlxyXG4gICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNFQ0ZERjNcIiBzdHJva2Utd2lkdGg9XCI4XCIvPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTM4IDI3LjA3OTlWMjcuOTk5OUMzNy45OTg4IDMwLjE1NjMgMzcuMzAwNSAzMi4yNTQ1IDM2LjAwOTMgMzMuOTgxN0MzNC43MTgyIDM1LjcwODggMzIuOTAzMyAzNi45NzIzIDMwLjgzNTQgMzcuNTgzOEMyOC43Njc0IDM4LjE5NTIgMjYuNTU3MyAzOC4xMjE4IDI0LjUzNDUgMzcuMzc0NEMyMi41MTE3IDM2LjYyNzEgMjAuNzg0NyAzNS4yNDYgMTkuNjExIDMzLjQzNjlDMTguNDM3MyAzMS42Mjc5IDE3Ljg3OTggMjkuNDg3OSAxOC4wMjE3IDI3LjMzNjJDMTguMTYzNiAyNS4xODQ0IDE4Ljk5NzIgMjMuMTM2MiAyMC4zOTgzIDIxLjQ5NjlDMjEuNzk5NCAxOS44NTc3IDIzLjY5MjggMTguNzE1MiAyNS43OTYyIDE4LjI0QzI3Ljg5OTYgMTcuNzY0OCAzMC4xMDAzIDE3Ljk4MjIgMzIuMDcgMTguODU5OU0zOCAxOS45OTk5TDI4IDMwLjAwOTlMMjUgMjcuMDA5OVwiIHN0cm9rZT1cIiMwMzk4NTVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgPC9zcGFuPjwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRpbmcgbXQtNCBtcy0xXCI+U3Vic2NyaWJlZCBTdWNjZXNzZnVsbHk8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZnYtcm93IGZ2LXBsdWdpbnMtaWNvbi1jb250YWluZXJcIj5cclxuICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VtaSBteS0zIG14LTJcIj5Zb3VyIHt7bWVzc2FnZX19IHN1YnNjcmlwdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgYWN0aXZhdGVkLiBZb3Ugd2lsbCBiZSBiaWxsZWQgbW9udGhseSBzdGFydGluZyBmcm9tIHRvZGF5LlxyXG4gICAgICAgICAgICA8IS0tIDx1bCBjbGFzcz1cIm10LTRcIj5cclxuICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBjb25maXJtZWRQcm9kdWN0c1wiPnt7cHJvZHVjdH19PC9saT5cclxuICAgICAgICAgICAgPC91bD4gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBtdC0yIHB5LTJcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBweC00IG5nLXN0YXItaW5zZXJ0ZWQgdy0xMDBcIlxyXG4gICAgICAgIChjbGljayk9XCJjbG9zZVBvcHVwQW5kUmVsb2FkRGF0YSgpXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3VibWl0XCI+T2theTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
|