buildingproduct-library 0.2.74 → 0.2.76

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.
Files changed (54) hide show
  1. package/assets/images/newtab.svg +11 -0
  2. package/{buildingproduct-library-0.2.74.tgz → buildingproduct-library-0.2.76.tgz} +0 -0
  3. package/bundles/buildingproduct-library.umd.js +527 -411
  4. package/bundles/buildingproduct-library.umd.js.map +1 -1
  5. package/esm2015/lib/account-dropdown/account-dropdown.component.js +16 -16
  6. package/esm2015/lib/account-dropdown/account-dropdown.module.js +6 -2
  7. package/esm2015/lib/checkout/custom-checkout/custom-checkout.component.js +2 -2
  8. package/esm2015/lib/checkout/order-confirmation/order-confirmation.component.js +1 -1
  9. package/esm2015/lib/checkout/order-review/order-review.component.js +1 -1
  10. package/esm2015/lib/custom-cart/addto-saved-carts/addto-saved-carts.component.js +1 -1
  11. package/esm2015/lib/custom-mini-cart/custom-mini-cart.component.js +57 -13
  12. package/esm2015/lib/custom-mini-cart/custom-mini-cart.module.js +1 -1
  13. package/esm2015/lib/custom-navigation/custom-navigation.module.js +1 -11
  14. package/esm2015/lib/custom-order-details/custom-order-details.component.js +8 -6
  15. package/esm2015/lib/custom-order-details/order-detail-grid/order-detail-grid.component.js +2 -2
  16. package/esm2015/lib/custom-order-details/order-detail-list/order-detail-list.component.js +2 -2
  17. package/esm2015/lib/custom-order-history/custom-order-history.component.js +20 -19
  18. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/custom-save-cart-dtl/custom-save-cart-dtl.component.js +28 -17
  19. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-action/saved-cart-details-action.component.js +2 -2
  20. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-overview/saved-cart-details-overview.component.js +2 -2
  21. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details.service.js +28 -10
  22. package/esm2015/lib/custom-saved-cart/custom-saved-cart.component.js +4 -4
  23. package/esm2015/lib/custom-saved-cart/custom-saved-cart.module.js +3 -3
  24. package/esm2015/lib/custom-search/custom-search.component.js +1 -1
  25. package/esm2015/lib/custom-user-account/custom-user-account.component.js +2 -2
  26. package/esm2015/lib/find-store/find-store.component.js +1 -1
  27. package/esm2015/lib/my-account/account-dashboard/account-dashboard.component.js +6 -7
  28. package/esm2015/lib/my-account/invoice-credit/invoice-credit.component.js +26 -25
  29. package/esm2015/lib/my-account/my-account.component.js +11 -1
  30. package/esm2015/lib/my-team/my-team.component.js +29 -10
  31. package/esm2015/lib/my-team/team-member.service.js +8 -36
  32. package/esm2015/lib/services/order.review.js +1 -1
  33. package/esm2015/lib/shared/active-saved-cart/active-saved-cart.component.js +6 -4
  34. package/esm2015/lib/shared/custom-cart-detail/custom-cart-grid/custom-cart-grid.component.js +48 -22
  35. package/esm2015/lib/shared/custom-cart-detail/custom-cart-list/custom-cart-list.component.js +66 -37
  36. package/esm2015/lib/shared/custom-cart-detail/custom-product-quantity-form/custom-product-quantity-form.component.js +2 -4
  37. package/esm2015/lib/shared/saved-cart-popup/saved-cart-popup.component.js +2 -2
  38. package/esm2015/lib/shared/shared-download-order/shared-download-order.component.js +9 -9
  39. package/fesm2015/buildingproduct-library.js +405 -288
  40. package/fesm2015/buildingproduct-library.js.map +1 -1
  41. package/lib/account-dropdown/account-dropdown.component.d.ts +2 -0
  42. package/lib/account-dropdown/account-dropdown.module.d.ts +2 -1
  43. package/lib/custom-mini-cart/custom-mini-cart.component.d.ts +13 -4
  44. package/lib/custom-order-history/custom-order-history.component.d.ts +1 -1
  45. package/lib/custom-saved-cart/custom-saved-cart-details/custom-save-cart-dtl/custom-save-cart-dtl.component.d.ts +1 -0
  46. package/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details.service.d.ts +5 -1
  47. package/lib/my-account/account-dashboard/account-dashboard.component.d.ts +1 -1
  48. package/lib/my-account/invoice-credit/invoice-credit.component.d.ts +2 -4
  49. package/lib/my-team/my-team.component.d.ts +6 -1
  50. package/lib/shared/custom-cart-detail/custom-cart-grid/custom-cart-grid.component.d.ts +9 -10
  51. package/lib/shared/custom-cart-detail/custom-cart-list/custom-cart-list.component.d.ts +9 -18
  52. package/lib/shared/custom-cart-detail/custom-product-quantity-form/custom-product-quantity-form.component.d.ts +1 -2
  53. package/lib/shared/shared-download-order/shared-download-order.component.d.ts +1 -1
  54. package/package.json +1 -1
@@ -6,25 +6,26 @@ import * as i0 from "@angular/core";
6
6
  import * as i1 from "../../../services/cart.service";
7
7
  import * as i2 from "@angular/forms";
8
8
  import * as i3 from "@spartacus/core";
9
- import * as i4 from "@spartacus/storefront";
10
- import * as i5 from "../custom-product-quantity-form/custom-product-quantity-form.component";
11
- import * as i6 from "@ng-bootstrap/ng-bootstrap";
12
- import * as i7 from "@angular/common";
13
- import * as i8 from "../split.pipe";
9
+ import * as i4 from "../../../custom-saved-cart/custom-saved-cart-details/saved-cart-details.service";
10
+ import * as i5 from "@angular/router";
11
+ import * as i6 from "@spartacus/storefront";
12
+ import * as i7 from "../custom-product-quantity-form/custom-product-quantity-form.component";
13
+ import * as i8 from "@ng-bootstrap/ng-bootstrap";
14
+ import * as i9 from "@angular/common";
15
+ import * as i10 from "../split.pipe";
14
16
  export class CustomCartGridComponent {
15
- constructor(cartService, cdr, formBuilder, activeCartService) {
17
+ constructor(cartService, cdr, formBuilder, activeCartService, cmsService, savedCartService, route) {
16
18
  this.cartService = cartService;
17
19
  this.cdr = cdr;
18
20
  this.formBuilder = formBuilder;
19
21
  this.activeCartService = activeCartService;
22
+ this.cmsService = cmsService;
23
+ this.savedCartService = savedCartService;
24
+ this.route = route;
20
25
  this.isFinishedPoduct = false;
21
26
  this.additinalselectedColour = [];
22
27
  this.modalSelectedColour = [];
23
- this.isShow = true;
24
28
  this.showDetails = [];
25
- this.disableAddMore = false;
26
- this.errorIndex = [];
27
- this.rowIndex = 0;
28
29
  this.showWaitCursor = new BehaviorSubject(false);
29
30
  this.updateCartEntry = new EventEmitter();
30
31
  this.isModalSelectedColor = [];
@@ -38,6 +39,7 @@ export class CustomCartGridComponent {
38
39
  this.addToCartError = null;
39
40
  this.errorMessage = 'Some error occurred while processing data';
40
41
  this.showToast = false;
42
+ this.cartPageData = true;
41
43
  this.env = sessionStorage.getItem('env');
42
44
  this.environment = JSON.parse(this.env);
43
45
  }
@@ -45,6 +47,7 @@ export class CustomCartGridComponent {
45
47
  var _a;
46
48
  const cartObj = localStorage.getItem('spartacus⚿dimond-spa⚿cart');
47
49
  this.cartId = (_a = JSON.parse(cartObj)) === null || _a === void 0 ? void 0 : _a.active;
50
+ this.saveCardOrderId = this.route.snapshot.params['savedCartId'];
48
51
  this.productForm = this.formBuilder.group({
49
52
  cart: this.formBuilder.array([]),
50
53
  });
@@ -54,6 +57,14 @@ export class CustomCartGridComponent {
54
57
  this.showDetails[i] = data;
55
58
  }
56
59
  });
60
+ this.cmsService.getCurrentPage().subscribe((data) => {
61
+ if (data.template == "SavedCartDetailsPageTemplate") {
62
+ this.cartPageData = false;
63
+ }
64
+ else {
65
+ this.cartPageData = true;
66
+ }
67
+ });
57
68
  this.cdr.detectChanges();
58
69
  }
59
70
  get cartForm() {
@@ -177,14 +188,29 @@ export class CustomCartGridComponent {
177
188
  }
178
189
  deleteEntry(entNumber) {
179
190
  this.showWaitCursor.next(true);
180
- this.cartService.deleteCartEntry(this.cartId, entNumber).subscribe((data) => {
181
- this.cdr.detectChanges();
182
- this.updateCartEntry.emit();
183
- this.activeCartService.reloadActiveCart();
184
- this.showWaitCursor.next(false);
185
- }, (error) => {
186
- this.showWaitCursor.next(false);
187
- });
191
+ if (this.cartPageData == true) {
192
+ this.cartService.deleteCartEntry(this.cartId, entNumber).subscribe((data) => {
193
+ this.cdr.detectChanges();
194
+ this.updateCartEntry.emit();
195
+ this.activeCartService.reloadActiveCart();
196
+ this.showWaitCursor.next(false);
197
+ }, (error) => {
198
+ this.showWaitCursor.next(false);
199
+ });
200
+ }
201
+ else {
202
+ this.savedCartService.deleteSaveCartEntry(this.saveCardOrderId, entNumber).subscribe((data) => {
203
+ this.cdr.detectChanges();
204
+ this.showToast = true;
205
+ this.showWaitCursor.next(false);
206
+ setTimeout(() => {
207
+ this.showToast = false;
208
+ }, 4000);
209
+ window.location.reload();
210
+ }, (error) => {
211
+ this.showWaitCursor.next(false);
212
+ });
213
+ }
188
214
  }
189
215
  // Check if any value is empty or undefined
190
216
  isNullOrEmpty(value) {
@@ -331,8 +357,8 @@ export class CustomCartGridComponent {
331
357
  this.showToast = false;
332
358
  }
333
359
  }
334
- CustomCartGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomCartGridComponent, deps: [{ token: i1.CartService }, { token: i0.ChangeDetectorRef }, { token: i2.FormBuilder }, { token: i3.ActiveCartService }], target: i0.ɵɵFactoryTarget.Component });
335
- CustomCartGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CustomCartGridComponent, selector: "app-custom-cart-grid", inputs: { additionalPara: "additionalPara", cartDetails: "cartDetails", isCardData: "isCardData" }, outputs: { updateCartEntry: "updateCartEntry" }, viewQueries: [{ propertyName: "closeInviteModal", first: true, predicate: ["closeInviteModal"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"loading\" *ngIf=\"showWaitCursor | async\">Loading&#8230;</div>\r\n<ng-container [formGroup]=\"productForm\">\r\n <ng-container formArrayName=\"cart\" *ngIf=\"hasCartDetails()\">\r\n <div class=\"py-3 mb-200\">\r\n <div class=\"row\">\r\n <div\r\n class=\"col-lg-3 col-sm-6\"\r\n *ngFor=\"let cart of cartForm.controls; let i = index\"\r\n [formGroupName]=\"i\"\r\n >\r\n <div\r\n class=\"cart-grid-tile\"\r\n *ngIf=\"!isNullOrEmpty(cartDetails[i]?.product?.code)\"\r\n >\r\n <div class=\"grid-tile-top position-relative\">\r\n <div\r\n class=\"d-flex justify-content-between align-items-center mb-3\"\r\n >\r\n <span class=\"sku-code\"\r\n >SKU:{{ cartDetails[i]?.product?.code }}</span\r\n >\r\n <span>\r\n <img\r\n class=\"delete-icon\"\r\n src=\"../../../../../assets/images/ionic-trash.svg\"\r\n alt=\"delete\"\r\n (click)=\"deleteEntry(cartDetails[i]?.entryNumber)\"\r\n /></span>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-3 col-3 pr-0\">\r\n <!-- <cx-media\r\n [container]=\"cartDetails[i]?.product?.images\"\r\n format=\"cartIcon\"\r\n role=\"presentation\"\r\n ></cx-media> -->\r\n\r\n <ng-container\r\n *ngIf=\"\r\n cartDetails[i]?.product?.flashingProduct;\r\n else normalImage\r\n \"\r\n >\r\n <a\r\n data-toggle=\"modal\"\r\n class=\"flashing-expand\"\r\n (click)=\"viewImage($event, cartDetails[i])\"\r\n [attr.data-target]=\"'#imageModal'\"\r\n *ngIf=\"hasImage(cartDetails[i]); else hasPdf\"\r\n >\r\n <cx-media\r\n [container]=\"getImageDetails(cartDetails[i])\"\r\n format=\"cartIcon\"\r\n role=\"presentation\"\r\n ></cx-media>\r\n </a>\r\n <ng-template #hasPdf>\r\n <a class=\"flashing-expand flashing-open\" [href]=\"getPdfLink(cartDetails[i])\" target=\"_blank\">\r\n <img\r\n class=\"pdf-icon\"\r\n src=\"../../../../../assets/images/pdf-icon.svg\"\r\n alt=\"Click to open PDF\"\r\n title=\"Click to open PDF\"\r\n />\r\n </a>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #normalImage>\r\n <cx-media\r\n [container]=\"getImageDetails(cartDetails[i])\"\r\n format=\"cartIcon\"\r\n role=\"presentation\"\r\n ></cx-media>\r\n </ng-template>\r\n </div>\r\n <div class=\"col-md-7 col-7 ellipsis\">\r\n <h4\r\n placement=\"top\"\r\n title=\"{{ cartDetails[i]?.product?.name }}\"\r\n >\r\n {{ cartDetails[i]?.product?.name }}\r\n </h4>\r\n </div>\r\n </div>\r\n <span class=\"expandBtn\" (click)=\"arrowHideShow(i)\">\r\n <ng-container *ngIf=\"arrowUpDown[i] == true; else arrowUp\">\r\n <i class=\"fas fa-chevron-up\"></i>\r\n </ng-container>\r\n <ng-template #arrowUp>\r\n <i class=\"fas fa-chevron-down\"></i>\r\n </ng-template>\r\n </span>\r\n </div>\r\n <ng-container *ngIf=\"arrowUpDown[i]\">\r\n <div class=\"grid-tile-middle\">\r\n <ng-container *ngIf=\"cartDetails[i]?.product?.classifications\">\r\n <p class=\"mt-3 mb-0 ellipsis sigleLine_ellipsis\">\r\n <span\r\n *ngFor=\"\r\n let attributes of cartDetails[i]?.product &&\r\n cartDetails[i]?.product?.classifications &&\r\n cartDetails[i]?.product?.classifications[0] &&\r\n cartDetails[i]?.product?.classifications[0]?.features;\r\n last as isLast\r\n \"\r\n >\r\n {{ attributes?.featureValues[0]?.value }}\r\n <span *ngIf=\"!isLast\"> | </span>\r\n <span *ngIf=\"isLast\">mm</span>\r\n </span>\r\n </p>\r\n </ng-container>\r\n <input\r\n type=\"text\"\r\n [value]=\"cartDetails[i].jobReference\"\r\n formControlName=\"jobReference\"\r\n class=\"custom-input-field\"\r\n (blur)=\"updateJobReference($event, cartDetails[i], i)\"\r\n />\r\n <div\r\n class=\"mt-2 text-danger mb-2\"\r\n *ngIf=\"jobReferenceErrors(i)\"\r\n >\r\n Please enter valid Job Reference\r\n </div>\r\n <div\r\n *ngIf=\"!isModalSelectedColor[i]\"\r\n class=\"d-flex align-items-center mb-2\"\r\n >\r\n <span\r\n class=\"color-block\"\r\n *ngIf=\"\r\n cartDetails[i] &&\r\n cartDetails[i].configurationInfos &&\r\n cartDetails[i].configurationInfos[0] &&\r\n cartDetails[i]?.configurationInfos[0]?.configurationValue\r\n \"\r\n [ngStyle]=\"{\r\n background:\r\n cartDetails[i]?.configurationInfos[0]\r\n ?.configurationValue | split : '|' : 2\r\n }\"\r\n ></span>\r\n <a\r\n class=\"more-color\"\r\n [ngClass]=\"{\r\n nolinkForflash: cartDetails[i]?.product?.flashingProduct\r\n }\"\r\n data-toggle=\"collapse\"\r\n href=\"#collapseColours{{ i }}\"\r\n *ngIf=\"\r\n cartDetails[i] &&\r\n cartDetails[i].configurationInfos &&\r\n cartDetails[i].configurationInfos[0] &&\r\n cartDetails[i]?.configurationInfos[0]?.configurationValue\r\n \"\r\n (click)=\"\r\n !cartDetails[i]?.product?.flashingProduct &&\r\n getColours(cartDetails[i], i)\r\n \"\r\n ngbTooltip=\"{{\r\n cartDetails[i]?.configurationInfos[0]?.configurationValue\r\n | split : '|' : 1\r\n }}\"\r\n >\r\n {{\r\n cartDetails[i]?.configurationInfos[0]?.configurationValue\r\n | split : \"|\" : 1\r\n }}\r\n <i\r\n *ngIf=\"!cartDetails[i]?.product?.flashingProduct\"\r\n class=\"fas fa-chevron-down dropdown-icon\"\r\n ></i\r\n ></a>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"\r\n isModalSelectedColor[i] ||\r\n cartDetails[i]?.product?.finishedProduct\r\n \"\r\n class=\"d-flex align-items-center mb-2\"\r\n >\r\n <span\r\n class=\"color-block\"\r\n [ngStyle]=\"{\r\n background:\r\n modalSelectedColour[i]?.hexadecimalCode ||\r\n cartDetails[i]?.product?.bpAdditionalAttribute\r\n ?.colours[0]?.name\r\n }\"\r\n ></span>\r\n <a\r\n class=\"more-color\"\r\n [ngClass]=\"{\r\n nolinkForflash: cartDetails[i]?.product?.flashingProduct\r\n }\"\r\n data-toggle=\"collapse\"\r\n href=\"#collapseColours{{ i }}\"\r\n (click)=\"\r\n !cartDetails[i]?.product?.flashingProduct &&\r\n getColours(cartDetails[i], i)\r\n \"\r\n >\r\n {{\r\n modalSelectedColour[i]?.name ||\r\n cartDetails[i]?.product?.bpAdditionalAttribute\r\n ?.colours[0]?.name\r\n }}\r\n <i\r\n *ngIf=\"!cartDetails[i]?.product?.flashingProduct\"\r\n class=\"fas fa-chevron-down dropdown-icon\"\r\n ></i\r\n ></a>\r\n </div>\r\n\r\n <!-- avaialable colours popup -->\r\n <div\r\n *ngIf=\"cartDetails[i]?.isExpand\"\r\n class=\"collapse colours_container\"\r\n id=\"collapseColours{{ i }}\"\r\n >\r\n <div class=\"card card-body\">\r\n <div\r\n *ngIf=\"\r\n cartDetails[i]?.product?.finishedProduct &&\r\n cartDetails[i]?.product?.variantOptions\r\n \"\r\n class=\"colours m-1 pt-3\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let modalcolour of cartDetails[i]?.product\r\n ?.variantOptions;\r\n let j = index\r\n \"\r\n >\r\n <div\r\n (click)=\"\r\n modalSelectedColor(\r\n $event,\r\n modalcolour.colours[0],\r\n i\r\n )\r\n \"\r\n class=\"colour m-1 mb-3 main\"\r\n [ngStyle]=\"{\r\n background: modalcolour?.colours[0]?.hexadecimalCode\r\n }\"\r\n [ngClass]=\"{\r\n selected:\r\n modalSelectedColour[i]?.hexadecimalCode ==\r\n modalcolour?.colours[0]?.hexadecimalCode\r\n }\"\r\n >\r\n <div class=\"checkbox\"></div>\r\n <p\r\n class=\"colour-title\"\r\n placement=\"bottom\"\r\n ngbTooltip=\"{{ modalcolour?.colours[0]?.name }}\"\r\n >\r\n {{ modalcolour?.colours[0]?.name }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n !cartDetails[i]?.product?.finishedProduct &&\r\n cartDetails[i]?.product?.variantOptions\r\n \"\r\n class=\"colours m-1 pt-3\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let modalcolour of cartDetails[i]?.product\r\n ?.bpAdditionalAttribute?.colours;\r\n let j = index\r\n \"\r\n >\r\n <div\r\n (click)=\"modalSelectedColor($event, modalcolour, i)\"\r\n class=\"colour m-1 mb-3 main\"\r\n [ngStyle]=\"{\r\n background: modalcolour?.hexadecimalCode\r\n }\"\r\n [ngClass]=\"{\r\n selected:\r\n modalSelectedColour[i]?.hexadecimalCode ==\r\n modalcolour?.hexadecimalCode\r\n }\"\r\n >\r\n <div class=\"checkbox\"></div>\r\n <p\r\n class=\"colour-title\"\r\n placement=\"bottom\"\r\n ngbTooltip=\"{{ modalcolour?.name }}\"\r\n >\r\n {{ modalcolour?.name }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"\r\n cartDetails[i]?.product?.bpAdditionalAttribute\r\n ?.additionalColours?.length > 0\r\n \"\r\n >\r\n <a\r\n data-toggle=\"modal\"\r\n data-target=\"#additionalColorsModal\"\r\n >\r\n <u> Additional colors may be avialable </u></a\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <div *ngIf=\"cartDetails[i]?.product?.flashingProduct == false\"\r\n class=\"collapse colours_container\"\r\n id=\"collapseColours{{ i }}\"\r\n >\r\n <div class=\"card card-body\">\r\n <div class=\"colours m-1 pt-3\">\r\n <ng-container\r\n *ngFor=\"\r\n let modalcolour of cartDetails[i]?.product\r\n ?.bpAdditionalAttribute?.colours;\r\n let j = index\r\n \"\r\n >\r\n <div\r\n (click)=\"modalSelectedColor($event, modalcolour, i)\"\r\n class=\"colour m-1 mb-3 main\"\r\n [ngStyle]=\"{\r\n background: modalcolour?.hexadecimalCode\r\n }\"\r\n [ngClass]=\"{\r\n selected:\r\n modalSelectedColour[i]?.hexadecimalCode ==\r\n modalcolour?.hexadecimalCode\r\n }\"\r\n >\r\n <div class=\"checkbox\"></div>\r\n <p\r\n class=\"colour-title\"\r\n placement=\"bottom\"\r\n ngbTooltip=\"{{ modalcolour?.name }}\"\r\n >\r\n {{ modalcolour?.name }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"cartDetails[i]?.product\r\n ?.bpAdditionalAttribute?.additionalColours?.length > 0\">\r\n <a\r\n data-toggle=\"modal\"\r\n data-target=\"#additionalColorsModal\"\r\n >\r\n <u> Additional colors may be avialable </u></a\r\n >\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Additional colours popup-->\r\n <div\r\n class=\"modal fade\"\r\n id=\"additionalColorsModal\"\r\n role=\"dialog\"\r\n aria-labelledby=\"inviteMemberLabel\"\r\n aria-hidden=\"true\"\r\n >\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Additional Colours</h4>\r\n <i\r\n class=\"icon-close invite-pop-close\"\r\n #closeInviteModal\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n ></i>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"more-content\">\r\n <div>\r\n <img\r\n class=\"mr-2\"\r\n src=\"../../../../assets/images/warningicon.svg\"\r\n alt=\"alert\"\r\n />\r\n </div>\r\n <div>{{ additionalPara?.content }}.</div>\r\n </div>\r\n\r\n <div class=\"colours pt-3 pb-3\">\r\n <ng-container\r\n *ngFor=\"\r\n let modalcolour of cartDetails[i]?.product\r\n ?.bpAdditionalAttribute?.additionalColours;\r\n let j = index\r\n \"\r\n >\r\n <div\r\n (click)=\"\r\n addtionalModalSelectedColor(\r\n $event,\r\n modalcolour,\r\n i\r\n )\r\n \"\r\n class=\"colour m-1 mb-3 main\"\r\n [ngStyle]=\"{\r\n background: modalcolour?.hexadecimalCode\r\n }\"\r\n [ngClass]=\"{\r\n selected:\r\n additinalselectedColour[i]?.hexadecimalCode ==\r\n modalcolour?.hexadecimalCode\r\n }\"\r\n >\r\n <div class=\"checkbox\"></div>\r\n <p\r\n class=\"colour-title\"\r\n placement=\"bottom\"\r\n ngbTooltip=\"{{ modalcolour?.name }}\"\r\n >\r\n {{ modalcolour?.name }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div\r\n class=\"m-1 pt-3\"\r\n *ngIf=\"additinalselectedColour[i]\"\r\n >\r\n <h6 class=\"font-weight-bold\">Colour Selection</h6>\r\n <div class=\"selected_color_section\">\r\n <div\r\n class=\"selected_color\"\r\n [ngStyle]=\"{\r\n background:\r\n additinalselectedColour[i]?.hexadecimalCode\r\n }\"\r\n ></div>\r\n <div>{{ additinalselectedColour[i]?.name }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-sm-flex justify-content-end d-block\">\r\n <button\r\n (click)=\"cancel()\"\r\n type=\"button\"\r\n data-dismiss=\"modal\"\r\n class=\"btn mobile-cancel-btn dimond-secondary-btn mr-lg-5\"\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n (click)=\"\r\n proceedWithSubmit(additinalselectedColour, i)\r\n \"\r\n type=\"submit\"\r\n class=\"btn mobile-save-btn dimond-primary-btn float-right\"\r\n >\r\n Proceed\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <a class=\"see-more-link\" (click)=\"showHide(i)\">\r\n {{ showDetails[i] == true ? \"Hide\" : \"See\" }} more details\r\n </a>\r\n <div\r\n *ngIf=\"showDetails[i]\"\r\n class=\"grid\"\r\n [ngClass]=\"{\r\n 'quantity-form-details':\r\n !cartDetails[i]?.product?.finishedProduct\r\n }\"\r\n >\r\n <app-custom-product-quantity-form\r\n [productCode]=\"cartDetails[i]?.product?.code\"\r\n [productDetails]=\"cartDetails[i]\"\r\n [listView]=\"false\"\r\n [accessoriesPrice]=\"cartDetails[i]?.basePrice?.value\"\r\n [selectedColour]=\"selectedColour\"\r\n [finishedVariantDetails]=\"finishedVariantDetails\"\r\n [isFinishedProduct]=\"\r\n cartDetails[i]?.product?.finishedProduct\r\n \"\r\n (updateCartEntires)=\"reoladCartEntires()\"\r\n ></app-custom-product-quantity-form>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"grid-tile-bottom\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6 col-6 border-right\">\r\n <div class=\"total-qty\">\r\n <span\r\n >Total Qty: {{ cartDetails[i]?.quantityDouble\r\n }}{{ cartDetails[i]?.basePrice?.unitType }}</span\r\n ><br />\r\n <span\r\n *ngIf=\"\r\n !cartDetails[i]?.product?.finishedProduct;\r\n else nonAccessories\r\n \"\r\n >{{ cartDetails[i]?.basePrice?.formattedValue }}/{{\r\n cartDetails[i]?.basePrice?.unitType\r\n }}</span\r\n >\r\n <ng-template #nonAccessories>\r\n <span>\r\n <input\r\n class=\"qty_input refernce-input\"\r\n type=\"text\"\r\n formControlName=\"prodQty\"\r\n minlength=\"1\"\r\n maxlength=\"2\"\r\n (blur)=\"updateCart($event, cartDetails[i], i)\"\r\n />\r\n </span>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div\r\n class=\"col-md-6 col-6 d-flex justify-content-end align-items-center text-right\"\r\n >\r\n <div class=\"total-amount text-right\">\r\n <h4>{{ cartDetails[i]?.totalPrice?.formattedValue }}</h4>\r\n <span>excl GST</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n cartDetails[i]?.product?.flashingProduct &&\r\n cartDetails[i]?.productConfiguredInfos &&\r\n cartDetails[i]?.productConfiguredInfos?.length > 0\r\n \"\r\n >\r\n <div\r\n class=\"flashing-block\"\r\n *ngFor=\"let data of cartDetails[i]?.productConfiguredInfos\"\r\n >\r\n <div class=\"grid-tile-top\">\r\n <div>\r\n <h6 class=\"skuId\">SKU: {{ data?.product?.code }}</h6>\r\n <h3 class=\"flash-title\">{{ data?.product?.name }}</h3>\r\n <span *ngIf=\"data?.girth\">Grith: +{{ data?.girth }}mm</span>\r\n </div>\r\n </div>\r\n <div class=\"grid-tile-bottom\">\r\n <div class=\"row\">\r\n <div\r\n class=\"col-md-6 col-6 d-flex align-items-center border-right\"\r\n >\r\n <div class=\"total-qty\">\r\n <div>\r\n Total Qty: {{ data?.quantityDouble\r\n }}{{ data?.unitType }}\r\n </div>\r\n <span\r\n >@{{ data?.basePrice?.formattedValue }}/{{\r\n data?.unitType\r\n }}</span\r\n >\r\n </div>\r\n </div>\r\n <div\r\n class=\"col-md-6 col-6 d-flex justify-content-end align-items-center text-right\"\r\n >\r\n <div class=\"total-amount text-right\">\r\n <h4>{{ data?.totalPrice?.formattedValue }}</h4>\r\n <span>excl GST</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</ng-container>\r\n\r\n<div\r\n class=\"modal fade\"\r\n id=\"imageModal\"\r\n role=\"dialog\"\r\n aria-labelledby=\"imageModal\"\r\n aria-hidden=\"true\"\r\n #imageModal\r\n>\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <i\r\n class=\"icon-close invite-pop-close\"\r\n #closeInviteModal\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n ></i>\r\n </div>\r\n <div class=\"modal-body m-4\">\r\n <img [src]=\"imageModalSrc\" alt=\"alert\" />\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ngb-toast *ngIf=\"showToast\" [autohide]=\"true\" [delay]=\"4000\">\r\n <img src=\"../../../../assets/images/Invited.svg\" />\r\n Cart updated successfully!\r\n <i\r\n class=\"icon-close toast-close\"\r\n aria-label=\"Close\"\r\n (click)=\"closeToast()\"\r\n ></i>\r\n</ngb-toast>\r\n", styles: ["@charset \"UTF-8\";@media screen and (min-width: 1366px){:root{--fontsize12: .75rem;--fontsize14: .875rem;--fontsize16: 1rem;--fontsize17: 1.063rem;--fontsize17-5: 1.1rem;--fontsize18: 1.125rem;--fontsize18-4: 1.5rem;--fontsize20: 1.25rem;--fontsize21: 1.313rem;--fontsize22: 1.375rem;--fontsize23: 1.438rem;--fontsize24: 1.5rem;--fontsize26: 1.625rem;--fontsize28: 1.75rem;--fontsize30: 1.625rem;--fontsize32: 2rem;--fontsize34: 2.125rem;--fontsize36: 2rem;--fontsize40: 2.25rem;--fontsize46: 2.875rem;--fontsize80: 5rem}}@media screen and (max-width: 1365px) and (min-width: 768px){:root{--fontsize12: .75rem;--fontsize14: .875rem;--fontsize16: 1rem;--fontsize17: .9rem;--fontsize17-5: 1rem;--fontsize18: .875rem;--fontsize20: 1rem;--fontsize21: 1.063rem;--fontsize22: 1.125rem;--fontsize23: 1.188rem;--fontsize24: 1rem;--fontsize28: 1.5rem;--fontsize30: 1.25rem;--fontsize32: 1.75rem;--fontsize34: 1.875rem;--fontsize36: 1.625rem;--fontsize40: 2.5rem;--fontsize46: 2.875rem;--fontsize80: 3.5rem}}@media screen and (max-width: 767px){:root{--fontsize12: .75rem;--fontsize14: .875rem;--fontsize16: 1rem;--fontsize16-5: .77rem;--fontsize17: .9rem;--fontsize17-5: 1rem;--fontsize18: .875rem;--fontsize19: .938rem;--fontsize20: 1rem;--fontsize21: 1.063rem;--fontsize22: 1.125rem;--fontsize23: 1.188rem;--fontsize24: 1rem;--fontsize26: 1.25rem;--fontsize28: 1.5rem;--fontsize30: 1.25rem;--fontsize32: 1.75rem;--fontsize34: 1.875rem;--fontsize36: 1.625rem;--fontsize40: 2.5rem;--fontsize46: 2rem;--fontsize80: 2.5rem}}@font-face{font-family:icomoon;font-weight:400;src:url(../assets/fonts/icomoon.ttf) format(\"ttf\"),url(../assets/fonts/icomoon.woff) format(\"woff\");font-weight:normal;font-style:normal;font-display:swap}@font-face{font-family:\"Arial Regular\";src:url(../assets/fonts/arial-webfont.woff) format(\"woff\"),url(../assets/fonts/arial-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Arial Bold\";src:url(../assets/fonts/arialbold-webfont.woff) format(\"woff\"),url(../assets/fonts/arialbold-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Arial Black\";src:url(../assets/fonts/arialblack-webfont.woff) format(\"woff\"),url(../assets/fonts/arialblack-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Helvetica Neue Reqular\";src:url(../assets/fonts/helveticaneue.woff) format(\"woff\"),url(../assets/fonts/helveticaneue.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Helvetica Neue Thin\";src:url(../assets/fonts/helveticaneuethin-webfont.woff) format(\"woff\"),url(../assets/fonts/helveticaneuethin-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Helvetica Neue Medium\";src:url(../assets/fonts/helveticaneuemedium-webfont.woff) format(\"woff\"),url(../assets/fonts/helveticaneuemedium-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}[class*=\" icon-\"],[class^=icon-]{font-family:icomoon!important;font-feature-settings:normal;font-variant:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-style:normal;font-weight:400;line-height:1;text-transform:none;font-display:swap}.icon-right:before{content:\"\\e902\"}.icon-materials:before{content:\"\\e900\"}.icon-natural-lighting:before{content:\"\\e90a\"}.icon-rainwater:before{content:\"\\e901\"}.icon-roofing:before{content:\"\\e90b\"}.icon-flashing{position:relative;display:inline-block;height:32px;text-align:center;width:32px}.icon-flashing:before,.mainnav-link-level-2.show .navTagChild .icon-flashing:before{content:url(../assets/images/icon-flashing-white.svg);height:20px;width:20px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);line-height:15px}li.megamenuSubChild:hover .icon-flashing:before{content:url(../assets/images/icon-flashing-black.svg)}.icon-structural:before{content:\"\\e90c\"}.icon-accessories-old .path1:before{content:\"\\e903\"}.icon-accessories-old .path2:before{margin-left:-1em;content:\"\\e904\"}.icon-accessories-old .path3:before{margin-left:-1em;content:\"\\e905\"}.icon-cladding-old .path1:before{content:\"\\e90d\"}.icon-cladding-old .path2:before{margin-left:-1em;content:\"\\e90e\"}.icon-close:before{content:\"\\e90f\"}.icon-message:before{content:\"\\e910\"}.icon-search .path1:before{content:\"\\e906\"}.icon-search .path2:before{content:\"\\e907\"}.icon-search .path3:before{margin-left:-1.0156em;content:\"\\e908\"}.icon-summary:before{content:\"\\e911\"}.icon-branch:before{content:\"\\e912\"}.icon-delivery:before{content:\"\\e913\"}.icon-downloads:before{content:\"\\e909\"}.icon-drawings:before{content:\"\\e914\"}.icon-full:before{content:\"\\e915\"}.icon-manual:before{content:\"\\e916\"}.icon-payment:before{content:\"\\e917\"}.icon-empty .path1:before{content:\"\\e918\"}.icon-empty .path2:before{margin-left:-1em;content:\"\\e919\"}.icon-empty .path3:before{margin-left:-1em;content:\"\\e91a\"}.icon-product-overview:before{content:\"\\e91b\"}.icon-arrows:before{content:\"\\e91c\"}.icon-selected:before{content:\"\\e91d\"}.icon-accessories:before{content:\"\\e91b\"}.icon-cladding:before{content:\"\\e91e\"}.icon-Triangle:before{content:\"\\e91f\"}.icon-home:before{content:\"\\e920\"}.icon-faq:before{content:\"\\e921\"}.icon-temperature:before{content:\"\\e922\"}body header{font-family:\"Arial Regular\",sans-serif}header{background-color:#1d1d1b;position:sticky;top:0;background-size:100% 25%!important;background-repeat:no-repeat;z-index:10}header .header{max-width:100%;padding:0}header cx-banner cx-media img{margin-top:.7rem;margin-bottom:0}header label{display:inline-flex}header .SiteLinks{height:52px;display:flex;align-items:center;justify-content:space-between;padding-top:5px;padding-bottom:5px}header .SiteLinks cx-paragraph p{color:#fff;font-size:var(--fontsize16);line-height:var(--fontsize16);margin-bottom:0}header .SiteLinks cx-paragraph{font-size:var(--fontsize16)}header .SiteLinks app-account-dropdown,header .SiteLinks app-find-store{width:calc(25% - 25px);max-width:328px;margin-right:25px}header .SiteLinks app-contact-us{width:calc(20% - 25px);max-width:100px;margin-left:auto}header .SiteLinks app-custom-mini-cart{width:10%}header .SiteLinks .preferenceLink{margin-left:auto}header .SiteLinks .preferenceLink cx-generic-link{margin:0}header .SiteLinks .preferenceLink cx-generic-link cx-media img{height:22px;margin:0}header .SiteLogo .storeLogo{position:absolute;z-index:99;left:40px;bottom:10px}header .SiteLogo .homeLogo{max-width:28px;height:28px;position:absolute;z-index:99;bottom:47px}header .NavigationBar{flex:70%;background-color:#b61828;min-height:40px;display:flex;align-items:center;position:relative;z-index:10}header .logoutMenu{margin-top:0!important}header .logoutMenu li{cursor:pointer;background-color:#4c4c4c;color:#fff}header .logoutMenu li:hover{text-decoration:underline;background-color:#4c4c4c}header .MarketingContext{width:100%;margin:auto}.customer-service-icon{cursor:pointer}.helpSupport{width:20rem;border:0;margin-top:.5rem!important;transform:translate(-42%,36px)!important;padding:1rem 1rem 0;background-color:#393939;color:#fff;top:0}.helpSupport .arrow-up{position:absolute;top:-8px;right:44%;width:0;height:0;border-left:15px solid rgba(0,0,0,0);border-right:15px solid rgba(0,0,0,0);border-bottom:15px solid #393939}.helpSupport .contact-us-info .heading{font-family:\"Arial Bold\",sans-serif}.helpSupport .contact-us-info .detail{font-size:var(--fontsize14);line-height:2rem}.helpSupport .contact-us-info .detail .service-icon{height:20px;width:20px;margin-right:10px}.helpSupport .contact-us-info .contactLink a{font-size:var(--fontsize14);text-decoration:underline;text-transform:uppercase}.helpSupport .contact-us-info a{color:#fff;text-decoration:none}.helpSupport .contact-us-info a:hover{text-decoration:underline}.pageTitle{font-family:\"Helvetica Neue Regular\",sans-serif;font-size:var(--fontsize54)}#visualization-container{text-align:center;margin:0 auto}#cds-viewer-container-3d{width:320px;height:200px}#cds-viewer-container-2d{width:320px;height:200px}[aria-label=Close]{cursor:pointer}cx-media.is-missing{background:url(./assets/images/search-noimage.svg);background-size:cover;background-position:center;background-repeat:no-repeat}cx-global-message{position:fixed;top:9rem;width:100%;z-index:13}@media screen and (max-width: 991px){cx-global-message{top:3.75rem}cx-storefront header{background-color:#b61828}cx-storefront header cx-banner cx-media img{margin:auto}cx-storefront header .SiteLogo{width:100%;max-width:211px;margin:auto;padding-left:30px;box-sizing:border-box}cx-storefront header .SiteLogo .storeLogo{position:unset}cx-storefront header .SearchBox{margin:14px 0 10px;width:30px}cx-storefront header .SiteLinks{background-color:transparent;width:110px;margin:auto 25px auto 0}cx-storefront header .SiteLinks app-account-dropdown,cx-storefront header .SiteLinks app-find-store,cx-storefront header .SiteLinks app-contact-us,cx-storefront header .SiteLinks cx-paragraph,cx-storefront header .SiteLinks .preferenceLink{display:none}cx-storefront header .SiteLinks app-custom-mini-cart,cx-storefront header .SiteLinks app-custom-user-account{width:35px}cx-storefront header.is-expanded{overflow-y:auto;position:fixed;bottom:0;top:0;width:calc(100% - 99px)}cx-storefront header.is-expanded .header{background-color:#b61828;margin-left:0}cx-storefront header.is-expanded .PreHeader{position:absolute;right:15px;top:15px}cx-storefront header.is-expanded .SearchBox{display:none}cx-storefront header.is-expanded .SiteLogo{position:absolute;top:25px;z-index:9}cx-storefront header.is-expanded .SiteLinks{background-color:#1d1d1b;width:100%;margin:15px auto 15px 0;height:unset;padding:15px;max-width:100%;position:relative;z-index:9;top:60px}cx-storefront header.is-expanded .SiteLinks app-account-dropdown,cx-storefront header.is-expanded .SiteLinks app-find-store,cx-storefront header.is-expanded .SiteLinks app-contact-us,cx-storefront header.is-expanded .SiteLinks cx-paragraph,cx-storefront header.is-expanded .SiteLinks .preferenceLink{display:block}cx-storefront header.is-expanded .SiteLinks app-custom-mini-cart,cx-storefront header.is-expanded .SiteLinks app-custom-user-account{display:none}cx-storefront header.is-expanded .SiteLinks app-account-dropdown{width:100%;max-width:100%}cx-storefront header.is-expanded .SiteLinks app-find-store{width:50%;max-width:328px;min-width:328px}cx-storefront header.is-expanded .SiteLinks app-contact-us{margin-right:15px;margin-left:auto;width:115px;max-width:unset}cx-storefront header.is-expanded .navigation{position:relative;top:45px}cx-storefront header.is-expanded:before{background-color:#0000004d;right:0;content:\"\";position:fixed;z-index:2;top:0;bottom:0;height:100vh;width:99px}cx-storefront header.is-expanded:after{background-color:transparent}}@media screen and (max-width: 576px){cx-storefront header .SiteLogo{max-width:80px}cx-storefront header .SiteLogo .storeLogo{display:none}cx-storefront header .searchBox{height:45px}cx-storefront header.is-expanded{width:100%}cx-storefront header.is-expanded .header,cx-storefront header.is-expanded .navigation{width:100%}cx-storefront header.is-expanded .SiteLogo{max-width:211px!important}cx-storefront header.is-expanded .SiteLogo .storeLogo{display:block}cx-storefront header.is-expanded .SiteLinks{max-width:100%;width:100%}cx-storefront header.is-expanded .SiteLinks app-account-dropdown,cx-storefront header.is-expanded .SiteLinks app-find-store,cx-storefront header.is-expanded .SiteLinks app-contact-us,cx-storefront header.is-expanded .SiteLinks cx-paragraph,cx-storefront header.is-expanded .SiteLinks .preferenceLink{display:block}cx-storefront header.is-expanded .SiteLinks app-custom-mini-cart,cx-storefront header.is-expanded .SiteLinks app-custom-user-account{display:none}cx-storefront header.is-expanded .SiteLinks app-find-store{width:100%;max-width:100%;margin-bottom:10px}cx-storefront header.is-expanded .SiteLinks app-contact-us{margin-left:0}cx-storefront header.is-expanded .SiteLinks cx-paragraph{margin-left:auto}cx-storefront header.is-expanded:before{display:none}.pageTitle{font-size:28px}}.mb-200{margin-bottom:200px}.cart-grid-tile{border:1px solid #E0E0E0;margin-bottom:20px}.cart-grid-tile .grid-tile-top{background-color:#e8e8e8;border:1px solid #E0E0E0;padding:15px}.cart-grid-tile .grid-tile-top .sku-code{font-size:var(--fontsize14);font-family:\"Arial Bold\",sans-serif;color:#707070}.cart-grid-tile .grid-tile-top .ellipsis{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}.cart-grid-tile .grid-tile-top .sigleLine_ellipsis{-webkit-line-clamp:1}.cart-grid-tile .grid-tile-top .delete-icon{cursor:pointer}.cart-grid-tile .grid-tile-top h4{margin-left:6px;font-size:var(--fontsize14);font-family:\"Arial Bold\",sans-serif}.cart-grid-tile .grid-tile-middle{background-color:#fff;padding:15px}.cart-grid-tile .grid-tile-middle .custom-input-field{width:100%;border:1px solid #C6C6C6;height:40px;margin-bottom:15px;padding-left:15px}.cart-grid-tile .grid-tile-middle .color-block{width:20px;height:20px;border:1px solid #E0E0E0}.cart-grid-tile .grid-tile-middle .more-color{cursor:pointer;color:#b61828;margin-left:10px;-webkit-text-decoration-line:underline;text-decoration-line:underline;text-underline-offset:4px;-webkit-text-decoration-style:dashed;text-decoration-style:dashed;position:relative}.cart-grid-tile .grid-tile-middle .nolinkForflash{cursor:auto!important;text-decoration:none}.cart-grid-tile .grid-tile-middle .more-detail{text-decoration:underline;cursor:pointer;margin-bottom:0}.cart-grid-tile .grid-tile-middle a{color:#262626;text-decoration:underline;cursor:pointer}.cart-grid-tile .grid-tile-middle a:hover{color:#262626}.cart-grid-tile .grid-tile-bottom{background-color:#fff;padding:0 15px;border-top:1px solid #E0E0E0}.cart-grid-tile .grid-tile-bottom .total-qty{font-size:var(--fontsize14);font-family:\"Arial Regular\",sans-serif;padding:15px 0}.cart-grid-tile .grid-tile-bottom .total-amount{padding:15px 0}.cart-grid-tile .grid-tile-bottom .total-amount h4{font-size:var(--fontsize20);margin-bottom:0}.cart-grid-tile .grid-tile-bottom .total-amount span{font-size:var(--fontsize14)}.cart-details-table th{font-size:var(--fontsize14);font-family:\"Arial Bold\",sans-serif}.colours .colour{padding:0 15px;position:relative}.colours .colour .checkbox{display:none}.colours .colour .colour-title{position:absolute;bottom:-48px;width:40px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:var(--fontsize14);text-align:center;cursor:grabbing}.colours .colour.selected{border:1px solid #000000}.colours .colour.selected .checkbox{position:absolute;background:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2217.186%22 height%3D%2217.186%22 viewBox%3D%220 0 17.186 17.186%22%3E%0D %3Cg id%3D%22Group_12857%22 data-name%3D%22Group 12857%22 transform%3D%22translate(0.25 0.25)%22%3E%0D %3Ccircle id%3D%22Ellipse_14%22 data-name%3D%22Ellipse 14%22 cx%3D%228.316%22 cy%3D%228.316%22 r%3D%228.316%22 transform%3D%22translate(0 0.039)%22%2F%3E%0D %3Cpath id%3D%22Icon_ionic-md-checkmark-circle%22 data-name%3D%22Icon ionic-md-checkmark-circle%22 d%3D%22M11.718%2C3.375a8.343%2C8.343%2C0%2C1%2C0%2C8.343%2C8.343A8.367%2C8.367%2C0%2C0%2C0%2C11.718%2C3.375ZM10.005%2C16.166%2C5.729%2C11.89l1.2-1.2%2C3.08%2C3.08%2C6.5-6.5%2C1.2%2C1.2Z%22 transform%3D%22translate(-3.375 -3.375)%22 fill%3D%22%23fff%22%2F%3E%0D %3Cpath id%3D%22Icon_ionic-md-checkmark-circle_-_Outline%22 data-name%3D%22Icon ionic-md-checkmark-circle - Outline%22 d%3D%22M11.718%2C3.125a8.583%2C8.583%2C0%2C0%2C1%2C6.069%2C14.662A8.583%2C8.583%2C0%2C1%2C1%2C5.649%2C5.649%2C8.532%2C8.532%2C0%2C0%2C1%2C11.718%2C3.125Zm0%2C16.686A8.117%2C8.117%2C0%2C1%2C0%2C6%2C17.433%2C8.035%2C8.035%2C0%2C0%2C0%2C11.718%2C19.811ZM16.511%2C6.916l1.553%2C1.553-8.059%2C8.05L5.376%2C11.89l1.553-1.553%2C3.08%2C3.08Zm.846%2C1.553-.846-.846-6.5%2C6.5-3.08-3.08-.846.846%2C3.922%2C3.922Z%22 transform%3D%22translate(-3.375 -3.375)%22%2F%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\") no-repeat center;width:20px;height:20px;display:inline-block;top:10px;left:10px}.colours .colour.main{box-sizing:border-box;width:40px;height:40px;display:inline-block;padding:0;border:1px solid #C6C6C6}.colours_container{width:320px;height:auto;position:absolute;z-index:9}.more-content{display:flex;border:1px solid #548AF7;padding:8px;background-color:#edf5ff}.additional-color-link{cursor:pointer}.expandBtn{z-index:9;cursor:pointer;position:absolute;background-color:#fff;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%;bottom:-24px;left:50%;transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);box-shadow:0 0 6px #00000026;-webkit-box-shadow:0px 0px 6px rgba(0,0,0,.15);-moz-box-shadow:0px 0px 6px rgba(0,0,0,.15)}.see-more-link{z-index:2;position:relative;top:10px;cursor:pointer}.see-more-link:hover{color:#d51317!important}.total-qty .qty_input{width:100%;border:1px solid #C6C6C6}.quantity-form-details{margin-top:-40px;z-index:0}.selected_color_section{display:flex}.selected_color_section .selected_color{width:20px;height:20px;border:1px solid #C6C6C6}::ng-deep app-custom-product-quantity-form .quantity{border:0!important}@media screen and (max-width: 767px){.mobile-cancel-btn{display:block;width:100%;max-width:100%;margin-bottom:1.5rem}.mobile-save-btn{display:block;width:100%;max-width:100%;margin-bottom:1.5rem}}#imageModal.show{display:flex!important;vertical-align:middle!important;align-items:center!important}#imageModal.show .modal-header{justify-content:right;border:none}#imageModal.show .modal-body{text-align:center;vertical-align:middle;margin:0 auto}::ng-deep .toast{top:20%;left:50%;position:fixed;min-width:500px;max-width:500px;transform:translate(-50%);z-index:9999;background-color:#1d1d1b}::ng-deep .toast .toast-body{color:#fff}::ng-deep .toast .toast-body img{margin-right:10px}::ng-deep .toast .toast-body .toast-close{top:50%;right:5%;position:absolute;transform:translate(-50%,-50%);cursor:pointer}::ng-deep .toast .toast-header{background-color:#1d1d1b;color:#fff;padding:15px;border-radius:0}::ng-deep .toast .toast-header .close{color:#fff;opacity:1;text-shadow:none}.flashing-expand{cursor:pointer}.flashing-expand:after{background:url(../../../../../assets/images/expand-icon.svg) no-repeat center;z-index:2;width:24px;content:\"\";height:24px;position:absolute;top:0;right:0}\n"], components: [{ type: i4.MediaComponent, selector: "cx-media", inputs: ["container", "format", "alt", "role", "loading"], outputs: ["loaded"] }, { type: i5.CustomProductQuantityFormComponent, selector: "app-custom-product-quantity-form", inputs: ["hasBundle", "productCode", "productDetails", "unitType", "accessoriesPrice", "selectedColour", "cuttingValidation", "finishedVariantDetails", "finishedAvailableColours", "isFinishedProduct", "isFlashingProduct", "listView"], outputs: ["updateCartEntires"] }, { type: i6.NgbToast, selector: "ngb-toast", inputs: ["delay", "autohide", "animation", "header"], outputs: ["shown", "hidden"], exportAs: ["ngbToast"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { type: i2.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }], pipes: { "async": i7.AsyncPipe, "split": i8.SplitPipe } });
360
+ CustomCartGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomCartGridComponent, deps: [{ token: i1.CartService }, { token: i0.ChangeDetectorRef }, { token: i2.FormBuilder }, { token: i3.ActiveCartService }, { token: i3.CmsService }, { token: i4.SavedCartDetailsService }, { token: i5.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
361
+ CustomCartGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CustomCartGridComponent, selector: "app-custom-cart-grid", inputs: { additionalPara: "additionalPara", cartDetails: "cartDetails", isCardData: "isCardData" }, outputs: { updateCartEntry: "updateCartEntry" }, viewQueries: [{ propertyName: "closeInviteModal", first: true, predicate: ["closeInviteModal"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"loading\" *ngIf=\"showWaitCursor | async\">Loading&#8230;</div>\r\n<ng-container [formGroup]=\"productForm\">\r\n <ng-container formArrayName=\"cart\" *ngIf=\"hasCartDetails()\">\r\n <div class=\"py-3 mb-200\">\r\n <div class=\"row\">\r\n <div\r\n class=\"col-lg-3 col-sm-6\"\r\n *ngFor=\"let cart of cartForm.controls; let i = index\"\r\n [formGroupName]=\"i\"\r\n >\r\n <div\r\n class=\"cart-grid-tile\"\r\n *ngIf=\"!isNullOrEmpty(cartDetails[i]?.product?.code)\"\r\n >\r\n <div class=\"grid-tile-top position-relative\">\r\n <div\r\n class=\"d-flex justify-content-between align-items-center mb-3\"\r\n >\r\n <span class=\"sku-code\"\r\n >SKU:{{ cartDetails[i]?.product?.code }}</span\r\n >\r\n <span>\r\n <img\r\n class=\"delete-icon\"\r\n src=\"../../../../../assets/images/ionic-trash.svg\"\r\n alt=\"delete\"\r\n (click)=\"deleteEntry(cartDetails[i]?.entryNumber)\"\r\n /></span>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-3 col-3 pr-0\">\r\n <!-- <cx-media\r\n [container]=\"cartDetails[i]?.product?.images\"\r\n format=\"cartIcon\"\r\n role=\"presentation\"\r\n ></cx-media> -->\r\n\r\n <ng-container\r\n *ngIf=\"\r\n cartDetails[i]?.product?.flashingProduct;\r\n else normalImage\r\n \"\r\n >\r\n <a\r\n data-toggle=\"modal\"\r\n class=\"flashing-expand\"\r\n (click)=\"viewImage($event, cartDetails[i])\"\r\n [attr.data-target]=\"'#imageModal'\"\r\n *ngIf=\"hasImage(cartDetails[i]); else hasPdf\"\r\n >\r\n <cx-media\r\n [container]=\"getImageDetails(cartDetails[i])\"\r\n format=\"cartIcon\"\r\n role=\"presentation\"\r\n ></cx-media>\r\n </a>\r\n <ng-template #hasPdf>\r\n <a class=\"flashing-expand flashing-open\" [href]=\"getPdfLink(cartDetails[i])\" target=\"_blank\">\r\n <img\r\n class=\"pdf-icon\"\r\n src=\"../../../../../assets/images/pdf-icon.svg\"\r\n alt=\"Click to open PDF\"\r\n title=\"Click to open PDF\"\r\n />\r\n </a>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #normalImage>\r\n <cx-media\r\n [container]=\"getImageDetails(cartDetails[i])\"\r\n format=\"cartIcon\"\r\n role=\"presentation\"\r\n ></cx-media>\r\n </ng-template>\r\n </div>\r\n <div class=\"col-md-7 col-7 ellipsis\">\r\n <h4\r\n placement=\"top\"\r\n title=\"{{ cartDetails[i]?.product?.name }}\"\r\n >\r\n {{ cartDetails[i]?.product?.name }}\r\n </h4>\r\n </div>\r\n </div>\r\n <span class=\"expandBtn\" (click)=\"arrowHideShow(i)\">\r\n <ng-container *ngIf=\"arrowUpDown[i] == true; else arrowUp\">\r\n <i class=\"fas fa-chevron-up\"></i>\r\n </ng-container>\r\n <ng-template #arrowUp>\r\n <i class=\"fas fa-chevron-down\"></i>\r\n </ng-template>\r\n </span>\r\n </div>\r\n <ng-container *ngIf=\"arrowUpDown[i]\">\r\n <div class=\"grid-tile-middle\">\r\n <ng-container *ngIf=\"cartDetails[i]?.product?.classifications\">\r\n <p class=\"mt-3 mb-0 ellipsis sigleLine_ellipsis\">\r\n <span\r\n *ngFor=\"\r\n let attributes of cartDetails[i]?.product &&\r\n cartDetails[i]?.product?.classifications &&\r\n cartDetails[i]?.product?.classifications[0] &&\r\n cartDetails[i]?.product?.classifications[0]?.features;\r\n last as isLast\r\n \"\r\n >\r\n {{ attributes?.featureValues[0]?.value }}\r\n <span *ngIf=\"!isLast\"> | </span>\r\n <span *ngIf=\"isLast\">mm</span>\r\n </span>\r\n </p>\r\n </ng-container>\r\n <input\r\n type=\"text\"\r\n [value]=\"cartDetails[i].jobReference\"\r\n formControlName=\"jobReference\"\r\n class=\"custom-input-field\"\r\n (blur)=\"updateJobReference($event, cartDetails[i], i)\"\r\n />\r\n <div\r\n class=\"mt-2 text-danger mb-2\"\r\n *ngIf=\"jobReferenceErrors(i)\"\r\n >\r\n Please enter valid Job Reference\r\n </div>\r\n <div\r\n *ngIf=\"!isModalSelectedColor[i]\"\r\n class=\"d-flex align-items-center mb-2\"\r\n >\r\n <span\r\n class=\"color-block\"\r\n *ngIf=\"\r\n cartDetails[i] &&\r\n cartDetails[i].configurationInfos &&\r\n cartDetails[i].configurationInfos[0] &&\r\n cartDetails[i]?.configurationInfos[0]?.configurationValue\r\n \"\r\n [ngStyle]=\"{\r\n background:\r\n cartDetails[i]?.configurationInfos[0]\r\n ?.configurationValue | split : '|' : 2\r\n }\"\r\n ></span>\r\n <a\r\n class=\"more-color\"\r\n [ngClass]=\"{\r\n nolinkForflash: cartDetails[i]?.product?.flashingProduct\r\n }\"\r\n data-toggle=\"collapse\"\r\n href=\"#collapseColours{{ i }}\"\r\n *ngIf=\"\r\n cartDetails[i] &&\r\n cartDetails[i].configurationInfos &&\r\n cartDetails[i].configurationInfos[0] &&\r\n cartDetails[i]?.configurationInfos[0]?.configurationValue\r\n \"\r\n (click)=\"\r\n !cartDetails[i]?.product?.flashingProduct &&\r\n getColours(cartDetails[i], i)\r\n \"\r\n ngbTooltip=\"{{\r\n cartDetails[i]?.configurationInfos[0]?.configurationValue\r\n | split : '|' : 1\r\n }}\"\r\n >\r\n {{\r\n cartDetails[i]?.configurationInfos[0]?.configurationValue\r\n | split : \"|\" : 1\r\n }}\r\n <i\r\n *ngIf=\"!cartDetails[i]?.product?.flashingProduct\"\r\n class=\"fas fa-chevron-down dropdown-icon\"\r\n ></i\r\n ></a>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"\r\n isModalSelectedColor[i] ||\r\n modalSelectedColour[i]?.name\r\n \"\r\n class=\"d-flex align-items-center mb-2\"\r\n >\r\n \r\n <span\r\n class=\"color-block\"\r\n [ngStyle]=\"{\r\n background:\r\n modalSelectedColour[i]?.hexadecimalCode ||\r\n cartDetails[i]?.product?.bpAdditionalAttribute\r\n ?.colours[0]?.name\r\n }\"\r\n ></span>\r\n <a\r\n class=\"more-color\"\r\n [ngClass]=\"{\r\n nolinkForflash: cartDetails[i]?.product?.flashingProduct\r\n }\"\r\n data-toggle=\"collapse\"\r\n href=\"#collapseColours{{ i }}\"\r\n (click)=\"\r\n !cartDetails[i]?.product?.flashingProduct &&\r\n getColours(cartDetails[i], i)\r\n \"\r\n >\r\n {{\r\n modalSelectedColour[i]?.name ||\r\n cartDetails[i]?.product?.bpAdditionalAttribute\r\n ?.colours[0]?.name\r\n }}\r\n <i\r\n *ngIf=\"!cartDetails[i]?.product?.flashingProduct\"\r\n class=\"fas fa-chevron-down dropdown-icon\"\r\n ></i\r\n ></a>\r\n </div>\r\n\r\n <!-- avaialable colours popup -->\r\n <div\r\n *ngIf=\"cartDetails[i]?.isExpand\"\r\n class=\"collapse colours_container\"\r\n id=\"collapseColours{{ i }}\"\r\n >\r\n <div class=\"card card-body\">\r\n <div\r\n *ngIf=\"\r\n cartDetails[i]?.product?.finishedProduct &&\r\n cartDetails[i]?.product?.variantOptions\r\n \"\r\n class=\"colours m-1 pt-3\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let modalcolour of cartDetails[i]?.product\r\n ?.variantOptions;\r\n let j = index\r\n \"\r\n >\r\n <div\r\n (click)=\"\r\n modalSelectedColor(\r\n $event,\r\n modalcolour.colours[0],\r\n i\r\n )\r\n \"\r\n class=\"colour m-1 mb-3 main\"\r\n [ngStyle]=\"{\r\n background: modalcolour?.colours[0]?.hexadecimalCode\r\n }\"\r\n [ngClass]=\"{\r\n selected:\r\n modalSelectedColour[i]?.hexadecimalCode ==\r\n modalcolour?.colours[0]?.hexadecimalCode\r\n }\"\r\n >\r\n <div class=\"checkbox\"></div>\r\n <p\r\n class=\"colour-title\"\r\n placement=\"bottom\"\r\n ngbTooltip=\"{{ modalcolour?.colours[0]?.name }}\"\r\n >\r\n {{ modalcolour?.colours[0]?.name }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div\r\n *ngIf=\"!cartDetails[i]?.product?.finishedProduct && cartDetails[i]?.product?.bpAdditionalAttribute?.colours\"\r\n class=\"colours m-1 pt-3\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let modalcolour of cartDetails[i]?.product?.bpAdditionalAttribute?.colours;\r\n let j = index\r\n \"\r\n >\r\n <div\r\n (click)=\"modalSelectedColor($event, modalcolour, i)\"\r\n class=\"colour m-1 mb-3 main\"\r\n [ngStyle]=\"{\r\n background: modalcolour?.hexadecimalCode\r\n }\"\r\n [ngClass]=\"{\r\n selected:\r\n modalSelectedColour[i]?.hexadecimalCode ==\r\n modalcolour?.hexadecimalCode\r\n }\"\r\n >\r\n <div class=\"checkbox\"></div>\r\n <p\r\n class=\"colour-title\"\r\n placement=\"bottom\"\r\n ngbTooltip=\"{{ modalcolour?.name }}\"\r\n >\r\n {{ modalcolour?.name }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"\r\n cartDetails[i]?.product?.bpAdditionalAttribute\r\n ?.additionalColours?.length > 0\r\n \"\r\n >\r\n <a\r\n data-toggle=\"modal\"\r\n data-target=\"#additionalColorsModal\"\r\n >\r\n <u> Additional colors may be avialable </u></a\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <div *ngIf=\"cartDetails[i]?.product?.flashingProduct == false\"\r\n class=\"collapse colours_container\"\r\n id=\"collapseColours{{ i }}\"\r\n >\r\n <div class=\"card card-body\">\r\n <div class=\"colours m-1 pt-3\">\r\n <ng-container\r\n *ngFor=\"\r\n let modalcolour of cartDetails[i]?.product\r\n ?.bpAdditionalAttribute?.colours;\r\n let j = index\r\n \"\r\n >\r\n <div\r\n (click)=\"modalSelectedColor($event, modalcolour, i)\"\r\n class=\"colour m-1 mb-3 main\"\r\n [ngStyle]=\"{\r\n background: modalcolour?.hexadecimalCode\r\n }\"\r\n [ngClass]=\"{\r\n selected:\r\n modalSelectedColour[i]?.hexadecimalCode ==\r\n modalcolour?.hexadecimalCode\r\n }\"\r\n >\r\n <div class=\"checkbox\"></div>\r\n <p\r\n class=\"colour-title\"\r\n placement=\"bottom\"\r\n ngbTooltip=\"{{ modalcolour?.name }}\"\r\n >\r\n {{ modalcolour?.name }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"cartDetails[i]?.product\r\n ?.bpAdditionalAttribute?.additionalColours?.length > 0\">\r\n <a\r\n data-toggle=\"modal\"\r\n data-target=\"#additionalColorsModal\"\r\n >\r\n <u> Additional colors may be avialable </u></a\r\n >\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Additional colours popup-->\r\n <div\r\n class=\"modal fade\"\r\n id=\"additionalColorsModal\"\r\n role=\"dialog\"\r\n aria-labelledby=\"inviteMemberLabel\"\r\n aria-hidden=\"true\"\r\n >\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Additional Colours</h4>\r\n <i\r\n class=\"icon-close invite-pop-close\"\r\n #closeInviteModal\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n ></i>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"more-content\">\r\n <div>\r\n <img\r\n class=\"mr-2\"\r\n src=\"../../../../assets/images/warningicon.svg\"\r\n alt=\"alert\"\r\n />\r\n </div>\r\n <div>{{ additionalPara?.content }}.</div>\r\n </div>\r\n\r\n <div class=\"colours pt-3 pb-3\">\r\n <ng-container\r\n *ngFor=\"\r\n let modalcolour of cartDetails[i]?.product\r\n ?.bpAdditionalAttribute?.additionalColours;\r\n let j = index\r\n \"\r\n >\r\n <div\r\n (click)=\"\r\n addtionalModalSelectedColor(\r\n $event,\r\n modalcolour,\r\n i\r\n )\r\n \"\r\n class=\"colour m-1 mb-3 main\"\r\n [ngStyle]=\"{\r\n background: modalcolour?.hexadecimalCode\r\n }\"\r\n [ngClass]=\"{\r\n selected:\r\n additinalselectedColour[i]?.hexadecimalCode ==\r\n modalcolour?.hexadecimalCode\r\n }\"\r\n >\r\n <div class=\"checkbox\"></div>\r\n <p\r\n class=\"colour-title\"\r\n placement=\"bottom\"\r\n ngbTooltip=\"{{ modalcolour?.name }}\"\r\n >\r\n {{ modalcolour?.name }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div\r\n class=\"m-1 pt-3\"\r\n *ngIf=\"additinalselectedColour[i]\"\r\n >\r\n <h6 class=\"font-weight-bold\">Colour Selection</h6>\r\n <div class=\"selected_color_section\">\r\n <div\r\n class=\"selected_color\"\r\n [ngStyle]=\"{\r\n background:\r\n additinalselectedColour[i]?.hexadecimalCode\r\n }\"\r\n ></div>\r\n <div>{{ additinalselectedColour[i]?.name }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-sm-flex justify-content-end d-block\">\r\n <button\r\n (click)=\"cancel()\"\r\n type=\"button\"\r\n data-dismiss=\"modal\"\r\n class=\"btn mobile-cancel-btn dimond-secondary-btn mr-lg-5\"\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n (click)=\"\r\n proceedWithSubmit(additinalselectedColour, i)\r\n \"\r\n type=\"submit\"\r\n class=\"btn mobile-save-btn dimond-primary-btn float-right\"\r\n >\r\n Proceed\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <a *ngIf=\"!cartDetails[i]?.product?.finishedProduct\" \r\n class=\"see-more-link\" (click)=\"showHide(i)\">\r\n {{ showDetails[i] == true ? \"Hide\" : \"See\" }} more details\r\n </a>\r\n <div\r\n *ngIf=\"showDetails[i]\"\r\n class=\"grid\"\r\n [ngClass]=\"{\r\n 'quantity-form-details':\r\n !cartDetails[i]?.product?.finishedProduct\r\n }\"\r\n >\r\n <app-custom-product-quantity-form\r\n [productCode]=\"cartDetails[i]?.product?.code\"\r\n [productDetails]=\"cartDetails[i]\"\r\n [listView]=\"false\"\r\n [accessoriesPrice]=\"cartDetails[i]?.basePrice?.value\"\r\n [selectedColour]=\"selectedColour\"\r\n [isFinishedProduct]=\"cartDetails[i]?.product?.finishedProduct\"\r\n (updateCartEntires)=\"reoladCartEntires()\"\r\n ></app-custom-product-quantity-form>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"grid-tile-bottom\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6 col-6 border-right\">\r\n <div class=\"total-qty\">\r\n <span\r\n >Total Qty: {{ cartDetails[i]?.quantityDouble\r\n }}{{ cartDetails[i]?.basePrice?.unitType }}</span\r\n ><br />\r\n <span\r\n *ngIf=\"\r\n !cartDetails[i]?.product?.finishedProduct;\r\n else nonAccessories\r\n \"\r\n >{{ cartDetails[i]?.basePrice?.formattedValue }}/{{\r\n cartDetails[i]?.basePrice?.unitType\r\n }}</span\r\n >\r\n <ng-template #nonAccessories>\r\n <span>\r\n <input\r\n class=\"qty_input refernce-input\"\r\n type=\"text\"\r\n formControlName=\"prodQty\"\r\n minlength=\"1\"\r\n maxlength=\"2\"\r\n (blur)=\"updateCart($event, cartDetails[i], i)\"\r\n />\r\n </span>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div\r\n class=\"col-md-6 col-6 d-flex justify-content-end align-items-center text-right\"\r\n >\r\n <div class=\"total-amount text-right\">\r\n <h4>{{ cartDetails[i]?.totalPrice?.formattedValue }}</h4>\r\n <span>excl GST</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n cartDetails[i]?.product?.flashingProduct &&\r\n cartDetails[i]?.productConfiguredInfos &&\r\n cartDetails[i]?.productConfiguredInfos?.length > 0\r\n \"\r\n >\r\n <div\r\n class=\"flashing-block\"\r\n *ngFor=\"let data of cartDetails[i]?.productConfiguredInfos\"\r\n >\r\n <div class=\"grid-tile-top\">\r\n <div>\r\n <h6 class=\"skuId\">SKU: {{ data?.product?.code }}</h6>\r\n <h3 class=\"flash-title\">{{ data?.product?.name }}</h3>\r\n <span *ngIf=\"data?.girth\">Grith: +{{ data?.girth }}mm</span>\r\n </div>\r\n </div>\r\n <div class=\"grid-tile-bottom\">\r\n <div class=\"row\">\r\n <div\r\n class=\"col-md-6 col-6 d-flex align-items-center border-right\"\r\n >\r\n <div class=\"total-qty\">\r\n <div>\r\n Total Qty: {{ data?.quantityDouble\r\n }}{{ data?.unitType }}\r\n </div>\r\n <span\r\n >@{{ data?.basePrice?.formattedValue }}/{{\r\n data?.unitType\r\n }}</span\r\n >\r\n </div>\r\n </div>\r\n <div\r\n class=\"col-md-6 col-6 d-flex justify-content-end align-items-center text-right\"\r\n >\r\n <div class=\"total-amount text-right\">\r\n <h4>{{ data?.totalPrice?.formattedValue }}</h4>\r\n <span>excl GST</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</ng-container>\r\n\r\n<div\r\n class=\"modal fade\"\r\n id=\"imageModal\"\r\n role=\"dialog\"\r\n aria-labelledby=\"imageModal\"\r\n aria-hidden=\"true\"\r\n #imageModal\r\n>\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <i\r\n class=\"icon-close invite-pop-close\"\r\n #closeInviteModal\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n ></i>\r\n </div>\r\n <div class=\"modal-body m-4\">\r\n <img [src]=\"imageModalSrc\" alt=\"alert\" />\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ngb-toast *ngIf=\"showToast\" [autohide]=\"true\" [delay]=\"4000\">\r\n <img src=\"../../../../assets/images/Invited.svg\" />\r\n Cart updated successfully!\r\n <i\r\n class=\"icon-close toast-close\"\r\n aria-label=\"Close\"\r\n (click)=\"closeToast()\"\r\n ></i>\r\n</ngb-toast>\r\n", styles: ["@charset \"UTF-8\";@media screen and (min-width: 1366px){:root{--fontsize12: .75rem;--fontsize14: .875rem;--fontsize16: 1rem;--fontsize17: 1.063rem;--fontsize17-5: 1.1rem;--fontsize18: 1.125rem;--fontsize18-4: 1.5rem;--fontsize20: 1.25rem;--fontsize21: 1.313rem;--fontsize22: 1.375rem;--fontsize23: 1.438rem;--fontsize24: 1.5rem;--fontsize26: 1.625rem;--fontsize28: 1.75rem;--fontsize30: 1.625rem;--fontsize32: 2rem;--fontsize34: 2.125rem;--fontsize36: 2rem;--fontsize40: 2.25rem;--fontsize46: 2.875rem;--fontsize80: 5rem}}@media screen and (max-width: 1365px) and (min-width: 768px){:root{--fontsize12: .75rem;--fontsize14: .875rem;--fontsize16: 1rem;--fontsize17: .9rem;--fontsize17-5: 1rem;--fontsize18: .875rem;--fontsize20: 1rem;--fontsize21: 1.063rem;--fontsize22: 1.125rem;--fontsize23: 1.188rem;--fontsize24: 1rem;--fontsize28: 1.5rem;--fontsize30: 1.25rem;--fontsize32: 1.75rem;--fontsize34: 1.875rem;--fontsize36: 1.625rem;--fontsize40: 2.5rem;--fontsize46: 2.875rem;--fontsize80: 3.5rem}}@media screen and (max-width: 767px){:root{--fontsize12: .75rem;--fontsize14: .875rem;--fontsize16: 1rem;--fontsize16-5: .77rem;--fontsize17: .9rem;--fontsize17-5: 1rem;--fontsize18: .875rem;--fontsize19: .938rem;--fontsize20: 1rem;--fontsize21: 1.063rem;--fontsize22: 1.125rem;--fontsize23: 1.188rem;--fontsize24: 1rem;--fontsize26: 1.25rem;--fontsize28: 1.5rem;--fontsize30: 1.25rem;--fontsize32: 1.75rem;--fontsize34: 1.875rem;--fontsize36: 1.625rem;--fontsize40: 2.5rem;--fontsize46: 2rem;--fontsize80: 2.5rem}}@font-face{font-family:icomoon;font-weight:400;src:url(../assets/fonts/icomoon.ttf) format(\"ttf\"),url(../assets/fonts/icomoon.woff) format(\"woff\");font-weight:normal;font-style:normal;font-display:swap}@font-face{font-family:\"Arial Regular\";src:url(../assets/fonts/arial-webfont.woff) format(\"woff\"),url(../assets/fonts/arial-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Arial Bold\";src:url(../assets/fonts/arialbold-webfont.woff) format(\"woff\"),url(../assets/fonts/arialbold-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Arial Black\";src:url(../assets/fonts/arialblack-webfont.woff) format(\"woff\"),url(../assets/fonts/arialblack-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Helvetica Neue Reqular\";src:url(../assets/fonts/helveticaneue.woff) format(\"woff\"),url(../assets/fonts/helveticaneue.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Helvetica Neue Thin\";src:url(../assets/fonts/helveticaneuethin-webfont.woff) format(\"woff\"),url(../assets/fonts/helveticaneuethin-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Helvetica Neue Medium\";src:url(../assets/fonts/helveticaneuemedium-webfont.woff) format(\"woff\"),url(../assets/fonts/helveticaneuemedium-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}[class*=\" icon-\"],[class^=icon-]{font-family:icomoon!important;font-feature-settings:normal;font-variant:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-style:normal;font-weight:400;line-height:1;text-transform:none;font-display:swap}.icon-right:before{content:\"\\e902\"}.icon-materials:before{content:\"\\e900\"}.icon-natural-lighting:before{content:\"\\e90a\"}.icon-rainwater:before{content:\"\\e901\"}.icon-roofing:before{content:\"\\e90b\"}.icon-flashing{position:relative;display:inline-block;height:32px;text-align:center;width:32px}.icon-flashing:before,.mainnav-link-level-2.show .navTagChild .icon-flashing:before{content:url(../assets/images/icon-flashing-white.svg);height:20px;width:20px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);line-height:15px}li.megamenuSubChild:hover .icon-flashing:before{content:url(../assets/images/icon-flashing-black.svg)}.icon-structural:before{content:\"\\e90c\"}.icon-accessories-old .path1:before{content:\"\\e903\"}.icon-accessories-old .path2:before{margin-left:-1em;content:\"\\e904\"}.icon-accessories-old .path3:before{margin-left:-1em;content:\"\\e905\"}.icon-cladding-old .path1:before{content:\"\\e90d\"}.icon-cladding-old .path2:before{margin-left:-1em;content:\"\\e90e\"}.icon-close:before{content:\"\\e90f\"}.icon-message:before{content:\"\\e910\"}.icon-search .path1:before{content:\"\\e906\"}.icon-search .path2:before{content:\"\\e907\"}.icon-search .path3:before{margin-left:-1.0156em;content:\"\\e908\"}.icon-summary:before{content:\"\\e911\"}.icon-branch:before{content:\"\\e912\"}.icon-delivery:before{content:\"\\e913\"}.icon-downloads:before{content:\"\\e909\"}.icon-drawings:before{content:\"\\e914\"}.icon-full:before{content:\"\\e915\"}.icon-manual:before{content:\"\\e916\"}.icon-payment:before{content:\"\\e917\"}.icon-empty .path1:before{content:\"\\e918\"}.icon-empty .path2:before{margin-left:-1em;content:\"\\e919\"}.icon-empty .path3:before{margin-left:-1em;content:\"\\e91a\"}.icon-product-overview:before{content:\"\\e91b\"}.icon-arrows:before{content:\"\\e91c\"}.icon-selected:before{content:\"\\e91d\"}.icon-accessories:before{content:\"\\e91b\"}.icon-cladding:before{content:\"\\e91e\"}.icon-Triangle:before{content:\"\\e91f\"}.icon-home:before{content:\"\\e920\"}.icon-faq:before{content:\"\\e921\"}.icon-temperature:before{content:\"\\e922\"}body header{font-family:\"Arial Regular\",sans-serif}header{background-color:#1d1d1b;position:sticky;top:0;background-size:100% 25%!important;background-repeat:no-repeat;z-index:10}header .header{max-width:100%;padding:0}header cx-banner cx-media img{margin-top:.7rem;margin-bottom:0}header label{display:inline-flex}header .SiteLinks{height:52px;display:flex;align-items:center;justify-content:space-between;padding-top:5px;padding-bottom:5px}header .SiteLinks cx-paragraph p{color:#fff;font-size:var(--fontsize16);line-height:var(--fontsize16);margin-bottom:0}header .SiteLinks cx-paragraph{font-size:var(--fontsize16)}header .SiteLinks app-account-dropdown,header .SiteLinks app-find-store{width:calc(25% - 25px);max-width:328px;margin-right:25px}header .SiteLinks app-contact-us{width:calc(20% - 25px);max-width:100px;margin-left:auto}header .SiteLinks app-custom-mini-cart{width:10%}header .SiteLinks .preferenceLink{margin-left:auto}header .SiteLinks .preferenceLink cx-generic-link{margin:0}header .SiteLinks .preferenceLink cx-generic-link cx-media img{height:22px;margin:0}header .SiteLogo .storeLogo{position:absolute;z-index:99;left:40px;bottom:10px}header .SiteLogo .homeLogo{max-width:28px;height:28px;position:absolute;z-index:99;bottom:47px}header .NavigationBar{flex:70%;background-color:#b61828;min-height:40px;display:flex;align-items:center;position:relative;z-index:10}header .logoutMenu{margin-top:0!important}header .logoutMenu li{cursor:pointer;background-color:#4c4c4c;color:#fff}header .logoutMenu li:hover{text-decoration:underline;background-color:#4c4c4c}header .MarketingContext{width:100%;margin:auto}.customer-service-icon{cursor:pointer}.helpSupport{width:20rem;border:0;margin-top:.5rem!important;transform:translate(-42%,36px)!important;padding:1rem 1rem 0;background-color:#393939;color:#fff;top:0}.helpSupport .arrow-up{position:absolute;top:-8px;right:44%;width:0;height:0;border-left:15px solid rgba(0,0,0,0);border-right:15px solid rgba(0,0,0,0);border-bottom:15px solid #393939}.helpSupport .contact-us-info .heading{font-family:\"Arial Bold\",sans-serif}.helpSupport .contact-us-info .detail{font-size:var(--fontsize14);line-height:2rem}.helpSupport .contact-us-info .detail .service-icon{height:20px;width:20px;margin-right:10px}.helpSupport .contact-us-info .contactLink a{font-size:var(--fontsize14);text-decoration:underline;text-transform:uppercase}.helpSupport .contact-us-info a{color:#fff;text-decoration:none}.helpSupport .contact-us-info a:hover{text-decoration:underline}.pageTitle{font-family:\"Helvetica Neue Regular\",sans-serif;font-size:var(--fontsize54)}#visualization-container{text-align:center;margin:0 auto}#cds-viewer-container-3d{width:320px;height:200px}#cds-viewer-container-2d{width:320px;height:200px}[aria-label=Close]{cursor:pointer}cx-media.is-missing{background:url(./assets/images/search-noimage.svg);background-size:cover;background-position:center;background-repeat:no-repeat}cx-global-message{position:fixed;top:9rem;width:100%;z-index:13}@media screen and (max-width: 991px){cx-global-message{top:3.75rem}cx-storefront header{background-color:#b61828}cx-storefront header cx-banner cx-media img{margin:auto}cx-storefront header .SiteLogo{width:100%;max-width:211px;margin:auto;padding-left:30px;box-sizing:border-box}cx-storefront header .SiteLogo .storeLogo{position:unset}cx-storefront header .SearchBox{margin:14px 0 10px;width:30px}cx-storefront header .SiteLinks{background-color:transparent;width:110px;margin:auto 25px auto 0}cx-storefront header .SiteLinks app-account-dropdown,cx-storefront header .SiteLinks app-find-store,cx-storefront header .SiteLinks app-contact-us,cx-storefront header .SiteLinks cx-paragraph,cx-storefront header .SiteLinks .preferenceLink{display:none}cx-storefront header .SiteLinks app-custom-mini-cart,cx-storefront header .SiteLinks app-custom-user-account{width:35px}cx-storefront header.is-expanded{overflow-y:auto;position:fixed;bottom:0;top:0;width:calc(100% - 99px)}cx-storefront header.is-expanded .header{background-color:#b61828;margin-left:0}cx-storefront header.is-expanded .PreHeader{position:absolute;right:15px;top:15px}cx-storefront header.is-expanded .SearchBox{display:none}cx-storefront header.is-expanded .SiteLogo{position:absolute;top:25px;z-index:9}cx-storefront header.is-expanded .SiteLinks{background-color:#1d1d1b;width:100%;margin:15px auto 15px 0;height:unset;padding:15px;max-width:100%;position:relative;z-index:9;top:60px}cx-storefront header.is-expanded .SiteLinks app-account-dropdown,cx-storefront header.is-expanded .SiteLinks app-find-store,cx-storefront header.is-expanded .SiteLinks app-contact-us,cx-storefront header.is-expanded .SiteLinks cx-paragraph,cx-storefront header.is-expanded .SiteLinks .preferenceLink{display:block}cx-storefront header.is-expanded .SiteLinks app-custom-mini-cart,cx-storefront header.is-expanded .SiteLinks app-custom-user-account{display:none}cx-storefront header.is-expanded .SiteLinks app-account-dropdown{width:100%;max-width:100%}cx-storefront header.is-expanded .SiteLinks app-find-store{width:50%;max-width:328px;min-width:328px}cx-storefront header.is-expanded .SiteLinks app-contact-us{margin-right:15px;margin-left:auto;width:115px;max-width:unset}cx-storefront header.is-expanded .navigation{position:relative;top:45px}cx-storefront header.is-expanded:before{background-color:#0000004d;right:0;content:\"\";position:fixed;z-index:2;top:0;bottom:0;height:100vh;width:99px}cx-storefront header.is-expanded:after{background-color:transparent}}@media screen and (max-width: 576px){cx-storefront header .SiteLogo{max-width:80px}cx-storefront header .SiteLogo .storeLogo{display:none}cx-storefront header .searchBox{height:45px}cx-storefront header.is-expanded{width:100%}cx-storefront header.is-expanded .header,cx-storefront header.is-expanded .navigation{width:100%}cx-storefront header.is-expanded .SiteLogo{max-width:211px!important}cx-storefront header.is-expanded .SiteLogo .storeLogo{display:block}cx-storefront header.is-expanded .SiteLinks{max-width:100%;width:100%}cx-storefront header.is-expanded .SiteLinks app-account-dropdown,cx-storefront header.is-expanded .SiteLinks app-find-store,cx-storefront header.is-expanded .SiteLinks app-contact-us,cx-storefront header.is-expanded .SiteLinks cx-paragraph,cx-storefront header.is-expanded .SiteLinks .preferenceLink{display:block}cx-storefront header.is-expanded .SiteLinks app-custom-mini-cart,cx-storefront header.is-expanded .SiteLinks app-custom-user-account{display:none}cx-storefront header.is-expanded .SiteLinks app-find-store{width:100%;max-width:100%;margin-bottom:10px}cx-storefront header.is-expanded .SiteLinks app-contact-us{margin-left:0}cx-storefront header.is-expanded .SiteLinks cx-paragraph{margin-left:auto}cx-storefront header.is-expanded:before{display:none}.pageTitle{font-size:28px}}.mb-200{margin-bottom:200px}.cart-grid-tile{border:1px solid #E0E0E0;margin-bottom:20px}.cart-grid-tile .grid-tile-top{background-color:#e8e8e8;border:1px solid #E0E0E0;padding:15px}.cart-grid-tile .grid-tile-top .sku-code{font-size:var(--fontsize14);font-family:\"Arial Bold\",sans-serif;color:#707070}.cart-grid-tile .grid-tile-top .ellipsis{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}.cart-grid-tile .grid-tile-top .sigleLine_ellipsis{-webkit-line-clamp:1}.cart-grid-tile .grid-tile-top .delete-icon{cursor:pointer}.cart-grid-tile .grid-tile-top h4{margin-left:6px;font-size:var(--fontsize14);font-family:\"Arial Bold\",sans-serif}.cart-grid-tile .grid-tile-middle{background-color:#fff;padding:15px}.cart-grid-tile .grid-tile-middle .custom-input-field{width:100%;border:1px solid #C6C6C6;height:40px;margin-bottom:15px;padding-left:15px}.cart-grid-tile .grid-tile-middle .color-block{width:20px;height:20px;border:1px solid #E0E0E0}.cart-grid-tile .grid-tile-middle .more-color{cursor:pointer;color:#b61828;margin-left:10px;-webkit-text-decoration-line:underline;text-decoration-line:underline;text-underline-offset:4px;-webkit-text-decoration-style:dashed;text-decoration-style:dashed;position:relative}.cart-grid-tile .grid-tile-middle .nolinkForflash{cursor:auto!important;text-decoration:none}.cart-grid-tile .grid-tile-middle .more-detail{text-decoration:underline;cursor:pointer;margin-bottom:0}.cart-grid-tile .grid-tile-middle a{color:#262626;text-decoration:underline;cursor:pointer}.cart-grid-tile .grid-tile-middle a:hover{color:#262626}.cart-grid-tile .grid-tile-bottom{background-color:#fff;padding:0 15px;border-top:1px solid #E0E0E0}.cart-grid-tile .grid-tile-bottom .total-qty{font-size:var(--fontsize14);font-family:\"Arial Regular\",sans-serif;padding:15px 0}.cart-grid-tile .grid-tile-bottom .total-amount{padding:15px 0}.cart-grid-tile .grid-tile-bottom .total-amount h4{font-size:var(--fontsize20);margin-bottom:0}.cart-grid-tile .grid-tile-bottom .total-amount span{font-size:var(--fontsize14)}.cart-details-table th{font-size:var(--fontsize14);font-family:\"Arial Bold\",sans-serif}.colours .colour{padding:0 15px;position:relative}.colours .colour .checkbox{display:none}.colours .colour .colour-title{position:absolute;bottom:-48px;width:40px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:var(--fontsize14);text-align:center;cursor:grabbing}.colours .colour.selected{border:1px solid #000000}.colours .colour.selected .checkbox{position:absolute;background:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2217.186%22 height%3D%2217.186%22 viewBox%3D%220 0 17.186 17.186%22%3E%0D %3Cg id%3D%22Group_12857%22 data-name%3D%22Group 12857%22 transform%3D%22translate(0.25 0.25)%22%3E%0D %3Ccircle id%3D%22Ellipse_14%22 data-name%3D%22Ellipse 14%22 cx%3D%228.316%22 cy%3D%228.316%22 r%3D%228.316%22 transform%3D%22translate(0 0.039)%22%2F%3E%0D %3Cpath id%3D%22Icon_ionic-md-checkmark-circle%22 data-name%3D%22Icon ionic-md-checkmark-circle%22 d%3D%22M11.718%2C3.375a8.343%2C8.343%2C0%2C1%2C0%2C8.343%2C8.343A8.367%2C8.367%2C0%2C0%2C0%2C11.718%2C3.375ZM10.005%2C16.166%2C5.729%2C11.89l1.2-1.2%2C3.08%2C3.08%2C6.5-6.5%2C1.2%2C1.2Z%22 transform%3D%22translate(-3.375 -3.375)%22 fill%3D%22%23fff%22%2F%3E%0D %3Cpath id%3D%22Icon_ionic-md-checkmark-circle_-_Outline%22 data-name%3D%22Icon ionic-md-checkmark-circle - Outline%22 d%3D%22M11.718%2C3.125a8.583%2C8.583%2C0%2C0%2C1%2C6.069%2C14.662A8.583%2C8.583%2C0%2C1%2C1%2C5.649%2C5.649%2C8.532%2C8.532%2C0%2C0%2C1%2C11.718%2C3.125Zm0%2C16.686A8.117%2C8.117%2C0%2C1%2C0%2C6%2C17.433%2C8.035%2C8.035%2C0%2C0%2C0%2C11.718%2C19.811ZM16.511%2C6.916l1.553%2C1.553-8.059%2C8.05L5.376%2C11.89l1.553-1.553%2C3.08%2C3.08Zm.846%2C1.553-.846-.846-6.5%2C6.5-3.08-3.08-.846.846%2C3.922%2C3.922Z%22 transform%3D%22translate(-3.375 -3.375)%22%2F%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\") no-repeat center;width:20px;height:20px;display:inline-block;top:10px;left:10px}.colours .colour.main{box-sizing:border-box;width:40px;height:40px;display:inline-block;padding:0;border:1px solid #C6C6C6}.colours_container{width:320px;height:auto;position:absolute;z-index:9}.more-content{display:flex;border:1px solid #548AF7;padding:8px;background-color:#edf5ff}.additional-color-link{cursor:pointer}.expandBtn{z-index:9;cursor:pointer;position:absolute;background-color:#fff;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%;bottom:-24px;left:50%;transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);box-shadow:0 0 6px #00000026;-webkit-box-shadow:0px 0px 6px rgba(0,0,0,.15);-moz-box-shadow:0px 0px 6px rgba(0,0,0,.15)}.see-more-link{z-index:2;position:relative;top:10px;cursor:pointer}.see-more-link:hover{color:#d51317!important}.total-qty .qty_input{width:100%;border:1px solid #C6C6C6}.quantity-form-details{margin-top:-40px;z-index:0}.selected_color_section{display:flex}.selected_color_section .selected_color{width:20px;height:20px;border:1px solid #C6C6C6}::ng-deep app-custom-product-quantity-form .quantity{border:0!important}@media screen and (max-width: 767px){.mobile-cancel-btn{display:block;width:100%;max-width:100%;margin-bottom:1.5rem}.mobile-save-btn{display:block;width:100%;max-width:100%;margin-bottom:1.5rem}}#imageModal.show{display:flex!important;vertical-align:middle!important;align-items:center!important}#imageModal.show .modal-header{justify-content:right;border:none}#imageModal.show .modal-body{text-align:center;vertical-align:middle;margin:0 auto}::ng-deep .toast{top:20%;left:50%;position:fixed;min-width:500px;max-width:500px;transform:translate(-50%);z-index:9999;background-color:#1d1d1b}::ng-deep .toast .toast-body{color:#fff}::ng-deep .toast .toast-body img{margin-right:10px}::ng-deep .toast .toast-body .toast-close{top:50%;right:5%;position:absolute;transform:translate(-50%,-50%);cursor:pointer}::ng-deep .toast .toast-header{background-color:#1d1d1b;color:#fff;padding:15px;border-radius:0}::ng-deep .toast .toast-header .close{color:#fff;opacity:1;text-shadow:none}.flashing-expand{cursor:pointer}.flashing-expand:after{background:url(../../../../../assets/images/expand-icon.svg) no-repeat center;z-index:2;width:24px;content:\"\";height:24px;position:absolute;top:0;right:0}\n"], components: [{ type: i6.MediaComponent, selector: "cx-media", inputs: ["container", "format", "alt", "role", "loading"], outputs: ["loaded"] }, { type: i7.CustomProductQuantityFormComponent, selector: "app-custom-product-quantity-form", inputs: ["hasBundle", "productCode", "productDetails", "unitType", "accessoriesPrice", "selectedColour", "cuttingValidation", "finishedAvailableColours", "isFinishedProduct", "isFlashingProduct", "listView"], outputs: ["updateCartEntires"] }, { type: i8.NgbToast, selector: "ngb-toast", inputs: ["delay", "autohide", "animation", "header"], outputs: ["shown", "hidden"], exportAs: ["ngbToast"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i8.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { type: i2.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }], pipes: { "async": i9.AsyncPipe, "split": i10.SplitPipe } });
336
362
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomCartGridComponent, decorators: [{
337
363
  type: Component,
338
364
  args: [{
@@ -340,7 +366,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
340
366
  templateUrl: './custom-cart-grid.component.html',
341
367
  styleUrls: ['./custom-cart-grid.component.scss'],
342
368
  }]
343
- }], ctorParameters: function () { return [{ type: i1.CartService }, { type: i0.ChangeDetectorRef }, { type: i2.FormBuilder }, { type: i3.ActiveCartService }]; }, propDecorators: { additionalPara: [{
369
+ }], ctorParameters: function () { return [{ type: i1.CartService }, { type: i0.ChangeDetectorRef }, { type: i2.FormBuilder }, { type: i3.ActiveCartService }, { type: i3.CmsService }, { type: i4.SavedCartDetailsService }, { type: i5.ActivatedRoute }]; }, propDecorators: { additionalPara: [{
344
370
  type: Input
345
371
  }], cartDetails: [{
346
372
  type: Input
@@ -352,4 +378,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
352
378
  type: ViewChild,
353
379
  args: ['closeInviteModal']
354
380
  }] } });
355
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWNhcnQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9idWlsZGluZ3Byb2R1Y3RfbGlicmFyeS9zcmMvbGliL3NoYXJlZC9jdXN0b20tY2FydC1kZXRhaWwvY3VzdG9tLWNhcnQtZ3JpZC9jdXN0b20tY2FydC1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J1aWxkaW5ncHJvZHVjdF9saWJyYXJ5L3NyYy9saWIvc2hhcmVkL2N1c3RvbS1jYXJ0LWRldGFpbC9jdXN0b20tY2FydC1ncmlkL2N1c3RvbS1jYXJ0LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd2QyxPQUFPLEVBQUUsU0FBUyxFQUEwQixNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7OztBQU8vQyxNQUFNLE9BQU8sdUJBQXVCO0lBeUNsQyxZQUNVLFdBQXdCLEVBQ3hCLEdBQXNCLEVBQ3RCLFdBQXdCLEVBQ3hCLGlCQUFvQztRQUhwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBNUM5QyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsNEJBQXVCLEdBQVEsRUFBRSxDQUFDO1FBQ2xDLHdCQUFtQixHQUFRLEVBQUUsQ0FBQztRQUM5QixXQUFNLEdBQVksSUFBSSxDQUFDO1FB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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnOyBcclxuaW1wb3J0IHsgQWN0aXZlQ2FydFNlcnZpY2UgfSBmcm9tICdAc3BhcnRhY3VzL2NvcmUnO1xyXG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NhcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ2FydEZvcm0gfSBmcm9tICcuLi8uLi9DdXN0b21Qcm9kdWN0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWN1c3RvbS1jYXJ0LWdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tY2FydC1ncmlkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jdXN0b20tY2FydC1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21DYXJ0R3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBpc0ZpbmlzaGVkUG9kdWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWRkaXRpbmFsc2VsZWN0ZWRDb2xvdXI6IGFueSA9IFtdO1xyXG4gIG1vZGFsU2VsZWN0ZWRDb2xvdXI6IGFueSA9IFtdO1xyXG4gIGlzU2hvdzogYm9vbGVhbiA9IHRydWU7XHJcbiAgc2hvd0RldGFpbHM6IGFueSA9IFtdO1xyXG4gIGRpc2FibGVBZGRNb3JlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZXJyb3JJbmRleDogYW55ID0gW107XHJcbiAgcm93SW5kZXggPSAwO1xyXG4gIGNhcnRJZDogYW55O1xyXG4gIHNob3dXYWl0Q3Vyc29yID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxQYXJhOiBhbnk7XHJcbiAgQElucHV0KCkgY2FydERldGFpbHM6IGFueTtcclxuICBASW5wdXQoKSBpc0NhcmREYXRhOiBhbnk7XHJcbiAgQE91dHB1dCgpIHVwZGF0ZUNhcnRFbnRyeSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2Nsb3NlSW52aXRlTW9kYWwnKSBjbG9zZUludml0ZU1vZGFsOiBhbnk7XHJcbiAgaXNNb2RhbFNlbGVjdGVkQ29sb3I6IGFueSA9IFtdO1xyXG4gIGltYWdlTW9kYWxTcmM6IGFueTtcclxuXHJcbiAgc2VsZWN0ZWRDb2xvdXI6IGFueTtcclxuXHJcbiAgc2VsZWN0ZWRJbmRleDogYW55O1xyXG4gIGFycm93VXBEb3duOiBhbnkgPSBbXTtcclxuICBkZWZhdWx0Q29uZmlnSW5mbzogYW55ID0ge1xyXG4gICAgY29uZmlndXJhdG9yVHlwZTogJ1RFWFRGSUVMRCcsXHJcbiAgICBjb25maWd1cmF0aW9uTGFiZWw6ICdDT0xPUicsXHJcbiAgICBjb25maWd1cmF0aW9uVmFsdWU6ICcnLFxyXG4gIH07XHJcblxyXG4gIHByb2R1Y3RDb2RlOiBhbnk7XHJcbiAgcHJvZHVjdERldGFpbHM6IGFueTtcclxuICBhY2Nlc3Nvcmllc1ByaWNlOiBhbnk7XHJcbiAgZmluaXNoZWRWYXJpYW50RGV0YWlsczogYW55O1xyXG5cclxuICBwcm9kdWN0Rm9ybTogYW55ID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgYWRkVG9DYXJ0RXJyb3I6IGFueSA9IG51bGw7XHJcbiAgZXJyb3JNZXNzYWdlID0gJ1NvbWUgZXJyb3Igb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyBkYXRhJztcclxuICBzaG93VG9hc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbnY6IGFueSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2VudicpO1xyXG4gIGVudmlyb25tZW50IDogYW55ID0gSlNPTi5wYXJzZSh0aGlzLmVudik7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmVDYXJ0U2VydmljZTogQWN0aXZlQ2FydFNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgY2FydE9iajogYW55ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NwYXJ0YWN1c+Kav2RpbW9uZC1zcGHimr9jYXJ0Jyk7XHJcbiAgICB0aGlzLmNhcnRJZCA9IEpTT04ucGFyc2UoY2FydE9iaik/LmFjdGl2ZTtcclxuXHJcbiAgICB0aGlzLnByb2R1Y3RGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIGNhcnQ6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVEZWZhdWx0Q2FydERldGFpbHMoKTtcclxuICAgIHRoaXMuY2FydFNlcnZpY2UuZXhwYW5kQWxsLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2FydERldGFpbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLnNob3dEZXRhaWxzW2ldID0gZGF0YTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FydEZvcm0oKTogRm9ybUFycmF5IHtcclxuICAgIHJldHVybiB0aGlzLnByb2R1Y3RGb3JtLmdldCgnY2FydCcpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGhhc0NhcnREZXRhaWxzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2FydEZvcm0gJiYgT2JqZWN0LmtleXModGhpcy5jYXJ0Rm9ybSk/Lmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEZWZhdWx0Q2FydERldGFpbHMoKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2FydERldGFpbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5jYXJ0Rm9ybT8ucHVzaCh0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKG5ldyBDYXJ0Rm9ybSgpKSk7XHJcbiAgICAgIHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2ldXHJcbiAgICAgICAgLmdldCgnam9iUmVmZXJlbmNlJylcclxuICAgICAgICA/LnNldFZhbHVlKHRoaXMuY2FydERldGFpbHNbaV0/LmpvYlJlZmVyZW5jZSk7XHJcbiAgICAgIGNvbnN0IHF0eSA9IHRoaXMuY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmZpbmlzaGVkUHJvZHVjdFxyXG4gICAgICAgID8gcGFyc2VJbnQodGhpcy5jYXJ0RGV0YWlsc1tpXT8ucXVhbnRpdHkpXHJcbiAgICAgICAgOiB0aGlzLmNhcnREZXRhaWxzW2ldPy5xdWFudGl0eURvdWJsZTtcclxuICAgICAgdGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaV0uZ2V0KCdwcm9kUXR5Jyk/LnNldFZhbHVlKHF0eSk7XHJcbiAgICAgIHRoaXMuaXNNb2RhbFNlbGVjdGVkQ29sb3IucHVzaChmYWxzZSk7XHJcbiAgICAgIHRoaXMuc2hvd0RldGFpbHMucHVzaChmYWxzZSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmNhcnREZXRhaWxzW2ldPy5jb25maWd1cmF0aW9uSW5mb3MgJiZcclxuICAgICAgICB0aGlzLmNhcnREZXRhaWxzW2ldPy5jb25maWd1cmF0aW9uSW5mb3M/Lmxlbmd0aCA+IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBjb25maWcgb2YgdGhpcy5jYXJ0RGV0YWlsc1tpXT8uY29uZmlndXJhdGlvbkluZm9zKSB7XHJcbiAgICAgICAgICBpZiAoY29uZmlnPy5jb25maWd1cmF0aW9uTGFiZWwgPT0gJ0NPTE9SJykge1xyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRDb25maWdJbmZvLmNvbmZpZ3VyYXRpb25WYWx1ZSA9XHJcbiAgICAgICAgICAgICAgY29uZmlnPy5jb25maWd1cmF0aW9uVmFsdWU/LnNwbGl0KCd8JylbMF0gfHwgJyc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuY2FydERldGFpbHNbaV0/LmNvbmZpZ1ZhbHVlcyAmJlxyXG4gICAgICAgICAgdGhpcy5jYXJ0RGV0YWlsc1tpXT8uY29uZmlnVmFsdWVzPy5sZW5ndGggPiAwXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgdGhpcy5jYXJ0RGV0YWlsc1tpXVsnY29uZmlnVmFsdWVzJ10gPSB0aGlzLmRlZmF1bHRDb25maWdJbmZvO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvdXJzKGNhcnREZXRhaWxzOiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb2xvdXIgPVxyXG4gICAgICBjYXJ0RGV0YWlscz8uY29uZmlndXJhdGlvbkluZm9zWzBdPy5jb25maWd1cmF0aW9uVmFsdWUuc3BsaXQoJ3wnKTtcclxuICAgIC8vIGZvciAobGV0IGkgPSAwOyBpID49IHRoaXMuY2FydERldGFpbHMubGVuZ3RoOyBpKyspIHtcclxuICAgIC8vICAgdGhpcy5zaG93RGV0YWlsc1tpXSA9IGZhbHNlO1xyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW5kZXg7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNhcnREZXRhaWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChpICE9IGluZGV4KSB7XHJcbiAgICAgICAgdGhpcy5jYXJ0RGV0YWlsc1tpXS5pc0V4cGFuZCA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2FydERldGFpbHNbaW5kZXhdLmlzRXhwYW5kID0gIXRoaXMuY2FydERldGFpbHNbaW5kZXhdLmlzRXhwYW5kO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWxlY3RlZENvbG91ckNvZGUoY29kZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2FydERldGFpbHNbdGhpcy5zZWxlY3RlZEluZGV4XSAmJlxyXG4gICAgICB0aGlzLmNhcnREZXRhaWxzW3RoaXMuc2VsZWN0ZWRJbmRleF0/LmNvbmZpZ1ZhbHVlc1xyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuY2FydERldGFpbHNbdGhpcy5zZWxlY3RlZEluZGV4XS5jb25maWdWYWx1ZXMuY29uZmlndXJhdGlvblZhbHVlID1cclxuICAgICAgICBjb2RlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKCFjaGFuZ2VzPy5jYXJ0RGV0YWlscz8uZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgdGhpcy51cGRhdGVEZWZhdWx0Q2FydERldGFpbHMoKTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd0hpZGUoaW5kOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd0RldGFpbHNbaW5kXSA9ICF0aGlzLnNob3dEZXRhaWxzW2luZF07XHJcbiAgfVxyXG4gIGFycm93SGlkZVNob3coaWQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5hcnJvd1VwRG93bltpZF0gPSAhdGhpcy5hcnJvd1VwRG93bltpZF07XHJcbiAgfVxyXG4gIG1vZGFsU2VsZWN0ZWRDb2xvcihldmVudDogYW55LCBjb2xvdXI6IGFueSwgaW5kOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBpZiAodGhpcy5pc0ZpbmlzaGVkUG9kdWN0ID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuYWRkaXRpbmFsc2VsZWN0ZWRDb2xvdXJbaW5kXSA9IGNvbG91cjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubW9kYWxTZWxlY3RlZENvbG91cltpbmRdID0gY29sb3VyO1xyXG4gICAgICAvL3RoaXMuYWRkaXRpbmFsc2VsZWN0ZWRDb2xvdXIgPSBjb2xvdXI7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2xvdXIgPSBjb2xvdXI/LmNvZGUgfHwgdGhpcy5zZWxlY3RlZENvbG91cjtcclxuICAgIH1cclxuICAgIHRoaXMuaXNNb2RhbFNlbGVjdGVkQ29sb3JbaW5kXSA9IHRydWU7XHJcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkQ29sb3VyQ29kZShjb2xvdXI/LmNvZGUpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy51cGRhdGVQcm9kdWN0Q29sb3IodGhpcy5jYXJ0RGV0YWlsc1tpbmRdLCBjb2xvdXIsIGluZCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQcm9kdWN0Q29sb3IoY2FydDogYW55LCBjb2xvcjogYW55LCBpbmRleDogYW55KTogdm9pZCB7XHJcbiAgICAvL2V2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjb25zdCBvYmogPSBbXTtcclxuICAgIG9iai5wdXNoKHtcclxuICAgICAgXCJjb25maWd1cmF0b3JUeXBlXCI6IFwiVEVYVEZJRUxEXCIsXHJcbiAgICAgIFwiY29uZmlndXJhdGlvbkxhYmVsXCI6IFwiQ09MT1JcIixcclxuICAgICAgXCJjb25maWd1cmF0aW9uVmFsdWVcIjogY29sb3I/LmNvZGVcclxuICAgIH0pO1xyXG4gICAgdGhpcy51cGRhdGVDYXJ0RGV0YWlscyhjYXJ0LCBpbmRleCwgb2JqKTtcclxuICB9XHJcblxyXG4gIGFkZHRpb25hbE1vZGFsU2VsZWN0ZWRDb2xvcihldmVudDogYW55LCBjb2xvdXI6IGFueSwgaW5kOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBpZiAodGhpcy5pc0ZpbmlzaGVkUG9kdWN0ID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuYWRkaXRpbmFsc2VsZWN0ZWRDb2xvdXJbaW5kXSA9IGNvbG91cjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWRkaXRpbmFsc2VsZWN0ZWRDb2xvdXJbaW5kXSA9IGNvbG91cjtcclxuICAgIH1cclxuICAgLy90aGlzLm1vZGFsU2VsZWN0ZWRDb2xvdXJbaW5kXSA9IGNvbG91cjtcclxuICAgIC8vdGhpcy5zZWxlY3RlZENvbG91ciA9IGNvbG91cj8uY29kZTtcclxuXHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkQ29sb3VyQ29kZSh0aGlzLnNlbGVjdGVkQ29sb3VyKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcm9jZWVkV2l0aFN1Ym1pdChjb2xvcjogYW55LCBpbmQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5pc01vZGFsU2VsZWN0ZWRDb2xvcltpbmRdID0gdHJ1ZTtcclxuICAgIHRoaXMubW9kYWxTZWxlY3RlZENvbG91cltpbmRdID0gY29sb3JbMF07XHJcbiAgICB0aGlzLmNsb3NlSW52aXRlTW9kYWwubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgdGhpcy51cGRhdGVQcm9kdWN0Q29sb3IodGhpcy5jYXJ0RGV0YWlsc1tpbmRdLCBjb2xvclswXSwgaW5kKTtcclxuICAgIHRoaXMuZ2V0Q29sb3Vycyhjb2xvciwgaW5kKVxyXG5cclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMuYWRkaXRpbmFsc2VsZWN0ZWRDb2xvdXIgPSBbXTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUVudHJ5KGVudE51bWJlcjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dXYWl0Q3Vyc29yLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmNhcnRTZXJ2aWNlLmRlbGV0ZUNhcnRFbnRyeSh0aGlzLmNhcnRJZCwgZW50TnVtYmVyKS5zdWJzY3JpYmUoXHJcbiAgICAgIChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0RW50cnkuZW1pdCgpO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlQ2FydFNlcnZpY2UucmVsb2FkQWN0aXZlQ2FydCgpO1xyXG4gICAgICAgIHRoaXMuc2hvd1dhaXRDdXJzb3IubmV4dChmYWxzZSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93V2FpdEN1cnNvci5uZXh0KGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIENoZWNrIGlmIGFueSB2YWx1ZSBpcyBlbXB0eSBvciB1bmRlZmluZWRcclxuICBpc051bGxPckVtcHR5KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PSAnJztcclxuICB9XHJcblxyXG4gIC8vIFVwZGF0ZSBDYXJ0IERldGFpbHMgaWYgUXVhbnRpdHkgQ2hhbmdlZCBmb3IgQWNjZXNzb3JpZXMgb25seVxyXG4gdXBkYXRlQ2FydERldGFpbHMoY2FydDogYW55LCBpbmRleDogYW55LCBjb2xvcj86YW55KTogdm9pZCB7XHJcbiAgICBsZXQgcGF5TG9hZDogYW55ID0ge307XHJcbiAgICB0aGlzLnNob3dXYWl0Q3Vyc29yLm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBlbnRyeU51bWJlciA9IGNhcnQ/LnByb2R1Y3Q/LmVudHJ5TnVtYmVyIHx8IGNhcnQ/LmVudHJ5TnVtYmVyO1xyXG4gICAgaWYgKGNvbG9yKSB7XHJcbiAgICAgIHBheUxvYWQgPSB7XHJcbiAgICAgICAgcXVhbnRpdHk6IHBhcnNlSW50KHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdwcm9kUXR5Jyk/LnZhbHVlKSxcclxuICAgICAgICBcImNvbmZpZ3VyYXRpb25JbmZvc1wiOiBjb2xvclxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY2FydD8ucHJvZHVjdD8uZmluaXNoZWRQcm9kdWN0KSB7XHJcbiAgICAgIHBheUxvYWQgPSB7XHJcbiAgICAgICAgcXVhbnRpdHk6IHBhcnNlSW50KHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdwcm9kUXR5Jyk/LnZhbHVlKSxcclxuICAgICAgICBqb2JSZWZlcmVuY2U6XHJcbiAgICAgICAgICB0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgnam9iUmVmZXJlbmNlJyk/LnZhbHVlLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGF5TG9hZCA9IHtcclxuICAgICAgICBxdWFudGl0eTogMSxcclxuICAgICAgICBwcm9kdWN0OiB7XHJcbiAgICAgICAgICBjb2RlOiBjYXJ0Py5wcm9kdWN0Py5jb2RlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgam9iUmVmZXJlbmNlOlxyXG4gICAgICAgICAgdGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ2pvYlJlZmVyZW5jZScpPy52YWx1ZSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHRoaXMuY2FydFNlcnZpY2VcclxuICAgICAgLnVwZGF0ZUNhcnRFbnRyeSh0aGlzLmNhcnRJZCwgZW50cnlOdW1iZXIsIHBheUxvYWQpXHJcbiAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZT8uc3RhdHVzQ29kZT8udG9Mb3dlckNhc2UoKSA9PSAnc3VjY2VzcycpIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVDYXJ0U2VydmljZS5yZWxvYWRBY3RpdmVDYXJ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FydEVudHJ5LmVtaXQoKTtcclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dUb2FzdCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1dhaXRDdXJzb3IubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd1RvYXN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sIDQwMDApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRUb0NhcnRFcnJvciA9XHJcbiAgICAgICAgICAgICAgcmVzcG9uc2U/LmVycm9yc1swXT8ubWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgIHJlc3BvbnNlPy5lcnJvcnNbMF0/LmVycm9yTWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dXYWl0Q3Vyc29yLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuYWRkVG9DYXJ0RXJyb3IgPVxyXG4gICAgICAgICAgICBlcnJvcj8uZXJyb3I/LmVycm9yc1swXT8ubWVzc2FnZSB8fFxyXG4gICAgICAgICAgICBlcnJvcj8uZXJyb3I/LmVycm9yc1swXT8uZXJyb3JNZXNzYWdlIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgdGhpcy5zaG93V2FpdEN1cnNvci5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgUHJvZHVjdCBRdWFudGl0eSBFcnJvcnNcclxuICBwcm9kUXR5RXJyb3JzKGluZGV4OiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdwcm9kUXR5Jyk/LmVycm9ycyB8fFxyXG4gICAgICAgIHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdwcm9kUXR5Jyk/LmludmFsaWQpICYmXHJcbiAgICAgICh0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgncHJvZFF0eScpPy5kaXJ0eSB8fFxyXG4gICAgICAgIHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdwcm9kUXR5Jyk/LnRvdWNoZWQpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IEpvYiBSZWZlcmVuY2UgRXJyb3JzXHJcbiAgam9iUmVmZXJlbmNlRXJyb3JzKGluZGV4OiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdqb2JSZWZlcmVuY2UnKT8uZXJyb3JzIHx8XHJcbiAgICAgICAgdGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ2pvYlJlZmVyZW5jZScpPy5pbnZhbGlkKSAmJlxyXG4gICAgICAodGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ2pvYlJlZmVyZW5jZScpPy5kaXJ0eSB8fFxyXG4gICAgICAgIHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdqb2JSZWZlcmVuY2UnKT8udG91Y2hlZClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBpcyBGb3JtIFZhbGlkXHJcbiAgaXNGb3JtVmFsaWQoaW5kZXg6IGFueSwgY2FydDogYW55KTogYW55IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XSAmJlxyXG4gICAgICB0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgnam9iUmVmZXJlbmNlJyk/LnZhbGlkICYmXHJcbiAgICAgICh0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgncHJvZFF0eScpPy52YWxpZCB8fFxyXG4gICAgICAgICFjYXJ0Py5wcm9kdWN0Py5maW5pc2hlZFByb2R1Y3QpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gVXBkYXRlIENhcnQgRGV0YWlscyBvbiBjaGFuZ2Ugb2YgSm9iIFJlZmVyZW5jZSBvciBRdWFudGl0eVxyXG4gIHVwZGF0ZUNhcnQoZXZlbnQ6IGFueSwgY2FydDogYW55LCBpbmRleDogYW55KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY29uc3QgdmFsdWUgPSBldmVudD8uY3VycmVudFRhcmdldD8udmFsdWU7XHJcbiAgICBpZiAoIXRoaXMuaXNOdWxsT3JFbXB0eSh2YWx1ZSkgJiYgdGhpcy5pc0Zvcm1WYWxpZChpbmRleCwgY2FydCkpIHtcclxuICAgICAgdGhpcy51cGRhdGVDYXJ0RGV0YWlscyhjYXJ0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVKb2JSZWZlcmVuY2UoZXZlbnQ6IGFueSwgY2FydDogYW55LCBpbmRleDogYW55KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy51cGRhdGVDYXJ0RGV0YWlscyhjYXJ0LCBpbmRleCk7XHJcbiAgfVxyXG5cclxuICByZW9sYWRDYXJ0RW50aXJlcygpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlQ2FydEVudHJ5LmVtaXQoKTtcclxuICB9XHJcblxyXG5cclxuICAvLyBHZXQgdGhlIEltYWdlIERldGFpbHMgYmFzZWQgb24gUHJvZHVjdHNcclxuICBnZXRJbWFnZURldGFpbHMoY2FydERldGFpbHM6IGFueSwgdGh1bWJuYWlsOiBhbnkgPSB0cnVlKTogYW55IHtcclxuICAgIGxldCBpbWFnZVVybDogYW55ID0gY2FydERldGFpbHM/LnByb2R1Y3Q/LmltYWdlcztcclxuICAgIGlmICh0aGlzLmlzQ2FyZERhdGEpIHtcclxuICAgICAgaW1hZ2VVcmwgPSBjYXJ0RGV0YWlscz8ucHJvZHVjdD8uaW1hZ2VzPy5maW5kKChpbWc6IGFueSkgPT4gaW1nLmZvcm1hdCA9PSBcImNhcnRJY29uXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW1hZ2VVcmwgPSBjYXJ0RGV0YWlscz8ucHJvZHVjdD8uaW1hZ2VzPy5HQUxMRVJZPy5jYXJ0SWNvbjtcclxuICAgIH1cclxuICAgIGxldCBzcmNVcmw6IGFueTtcclxuICAgIGlmIChcclxuICAgICAgY2FydERldGFpbHM/LmF0dGFjaG1lbnRzICYmXHJcbiAgICAgIGNhcnREZXRhaWxzPy5hdHRhY2htZW50cz8ubGVuZ3RoICYmXHJcbiAgICAgIGNhcnREZXRhaWxzPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3RcclxuICAgICkge1xyXG4gICAgICBzcmNVcmwgPVxyXG4gICAgICAgIHRodW1ibmFpbCAmJiBjYXJ0RGV0YWlscz8uYXR0YWNobWVudHM/Lmxlbmd0aCA+IDFcclxuICAgICAgICAgID8gY2FydERldGFpbHM/LmF0dGFjaG1lbnRzWzFdPy5kb3dubG9hZFVSTFxyXG4gICAgICAgICAgOiBjYXJ0RGV0YWlscz8uYXR0YWNobWVudHNbMF0/LmRvd25sb2FkVVJMO1xyXG4gICAgICBpbWFnZVVybCA9IHtcclxuICAgICAgICB1cmw6IChcclxuICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnQub2NjQmFzZVVybC5zbGljZSgwLCB0aGlzLmVudmlyb25tZW50Lm9jY0Jhc2VVcmwubGVuZ3RoIC0gMSkgK1xyXG4gICAgICAgICAgc3JjVXJsXHJcbiAgICAgICAgKT8ucmVwbGFjZSgnJmF0dGFjaG1lbnQ9dHJ1ZScsICcnKSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBpbWFnZVVybDtcclxuICB9XHJcblxyXG4gIHZpZXdJbWFnZShldmVudDogYW55LCBjYXJ0RGV0YWlsczogYW55KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5pbWFnZU1vZGFsU3JjID0gdGhpcy5nZXRJbWFnZURldGFpbHMoY2FydERldGFpbHMsIGZhbHNlKT8udXJsO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGRmTGluayhjYXJ0RGV0YWlsczogYW55KTogdm9pZCB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRJbWFnZURldGFpbHMoY2FydERldGFpbHMsIGZhbHNlKT8udXJsO1xyXG4gIH1cclxuXHJcbiAgaGFzSW1hZ2UoY2FydERldGFpbHM6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbWltZVR5cGUgPSBjYXJ0RGV0YWlscz8uYXR0YWNobWVudHNbMF0/Lm1pbWU7XHJcbiAgICBjb25zdCBtaW1lQXJyYXkgPSBbXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCJdO1xyXG4gICAgcmV0dXJuIG1pbWVBcnJheS5pbmNsdWRlcyhtaW1lVHlwZSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVRvYXN0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93VG9hc3QgPSBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImxvYWRpbmdcIiAqbmdJZj1cInNob3dXYWl0Q3Vyc29yIHwgYXN5bmNcIj5Mb2FkaW5nJiM4MjMwOzwvZGl2PlxyXG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwicHJvZHVjdEZvcm1cIj5cclxuICA8bmctY29udGFpbmVyIGZvcm1BcnJheU5hbWU9XCJjYXJ0XCIgKm5nSWY9XCJoYXNDYXJ0RGV0YWlscygpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHktMyBtYi0yMDBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiY29sLWxnLTMgY29sLXNtLTZcIlxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNhcnQgb2YgY2FydEZvcm0uY29udHJvbHM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImNhcnQtZ3JpZC10aWxlXCJcclxuICAgICAgICAgICAgKm5nSWY9XCIhaXNOdWxsT3JFbXB0eShjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uY29kZSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC10aWxlLXRvcCBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNrdS1jb2RlXCJcclxuICAgICAgICAgICAgICAgICAgPlNLVTp7eyBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uY29kZSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRlbGV0ZS1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICBzcmM9XCIuLi8uLi8uLi8uLi8uLi9hc3NldHMvaW1hZ2VzL2lvbmljLXRyYXNoLnN2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgYWx0PVwiZGVsZXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlRW50cnkoY2FydERldGFpbHNbaV0/LmVudHJ5TnVtYmVyKVwiXHJcbiAgICAgICAgICAgICAgICAvPjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLTMgcHItMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDxjeC1tZWRpYVxyXG4gICAgICAgICAgICAgICAgICAgIFtjb250YWluZXJdPVwiY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmltYWdlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0PVwiY2FydEljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICA+PC9jeC1tZWRpYT4gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIG5vcm1hbEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cIm1vZGFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxhc2hpbmctZXhwYW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ2aWV3SW1hZ2UoJGV2ZW50LCBjYXJ0RGV0YWlsc1tpXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10YXJnZXRdPVwiJyNpbWFnZU1vZGFsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhhc0ltYWdlKGNhcnREZXRhaWxzW2ldKTsgZWxzZSBoYXNQZGZcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxjeC1tZWRpYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29udGFpbmVyXT1cImdldEltYWdlRGV0YWlscyhjYXJ0RGV0YWlsc1tpXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9XCJjYXJ0SWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPjwvY3gtbWVkaWE+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaGFzUGRmPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmbGFzaGluZy1leHBhbmQgZmxhc2hpbmctb3BlblwiIFtocmVmXT1cImdldFBkZkxpbmsoY2FydERldGFpbHNbaV0pXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBkZi1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCIuLi8uLi8uLi8uLi8uLi9hc3NldHMvaW1hZ2VzL3BkZi1pY29uLnN2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiQ2xpY2sgdG8gb3BlbiBQREZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ2xpY2sgdG8gb3BlbiBQREZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbEltYWdlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjeC1tZWRpYVxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbnRhaW5lcl09XCJnZXRJbWFnZURldGFpbHMoY2FydERldGFpbHNbaV0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD1cImNhcnRJY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2N4LW1lZGlhPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTcgY29sLTcgZWxsaXBzaXNcIj5cclxuICAgICAgICAgICAgICAgICAgPGg0XHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7IGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5uYW1lIH19XCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV4cGFuZEJ0blwiIChjbGljayk9XCJhcnJvd0hpZGVTaG93KGkpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXJyb3dVcERvd25baV0gPT0gdHJ1ZTsgZWxzZSBhcnJvd1VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tdXBcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYXJyb3dVcD5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1kb3duXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXJyb3dVcERvd25baV1cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC10aWxlLW1pZGRsZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5jbGFzc2lmaWNhdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0zIG1iLTAgZWxsaXBzaXMgc2lnbGVMaW5lX2VsbGlwc2lzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXR0cmlidXRlcyBvZiBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5jbGFzc2lmaWNhdGlvbnMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uY2xhc3NpZmljYXRpb25zWzBdICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmNsYXNzaWZpY2F0aW9uc1swXT8uZmVhdHVyZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgYXMgaXNMYXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGF0dHJpYnV0ZXM/LmZlYXR1cmVWYWx1ZXNbMF0/LnZhbHVlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0xhc3RcIj4gfCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzTGFzdFwiPm1tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY2FydERldGFpbHNbaV0uam9iUmVmZXJlbmNlXCJcclxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiam9iUmVmZXJlbmNlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXN0b20taW5wdXQtZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAoYmx1cik9XCJ1cGRhdGVKb2JSZWZlcmVuY2UoJGV2ZW50LCBjYXJ0RGV0YWlsc1tpXSwgaSlcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtdC0yIHRleHQtZGFuZ2VyIG1iLTJcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImpvYlJlZmVyZW5jZUVycm9ycyhpKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIFBsZWFzZSBlbnRlciB2YWxpZCBKb2IgUmVmZXJlbmNlXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNNb2RhbFNlbGVjdGVkQ29sb3JbaV1cIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1ibG9ja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXS5jb25maWd1cmF0aW9uSW5mb3MgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldLmNvbmZpZ3VyYXRpb25JbmZvc1swXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LmNvbmZpZ3VyYXRpb25JbmZvc1swXT8uY29uZmlndXJhdGlvblZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8uY29uZmlndXJhdGlvbkluZm9zWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPy5jb25maWd1cmF0aW9uVmFsdWUgfCBzcGxpdCA6ICd8JyA6IDJcclxuICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1vcmUtY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgIG5vbGlua0ZvcmZsYXNoOiBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmxhc2hpbmdQcm9kdWN0XHJcbiAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaHJlZj1cIiNjb2xsYXBzZUNvbG91cnN7eyBpIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0gJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldLmNvbmZpZ3VyYXRpb25JbmZvcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0uY29uZmlndXJhdGlvbkluZm9zWzBdICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8uY29uZmlndXJhdGlvbkluZm9zWzBdPy5jb25maWd1cmF0aW9uVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICFjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmxhc2hpbmdQcm9kdWN0ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbG91cnMoY2FydERldGFpbHNbaV0sIGkpXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwie3tcclxuICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5jb25maWd1cmF0aW9uSW5mb3NbMF0/LmNvbmZpZ3VyYXRpb25WYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8IHNwbGl0IDogJ3wnIDogMVxyXG4gICAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8uY29uZmlndXJhdGlvbkluZm9zWzBdPy5jb25maWd1cmF0aW9uVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfCBzcGxpdCA6IFwifFwiIDogMVxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1kb3duIGRyb3Bkb3duLWljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2lcclxuICAgICAgICAgICAgICAgICAgPjwvYT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICBpc01vZGFsU2VsZWN0ZWRDb2xvcltpXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5maW5pc2hlZFByb2R1Y3RcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsU2VsZWN0ZWRDb2xvdXJbaV0/LmhleGFkZWNpbWFsQ29kZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uYnBBZGRpdGlvbmFsQXR0cmlidXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPy5jb2xvdXJzWzBdPy5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtb3JlLWNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBub2xpbmtGb3JmbGFzaDogY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmZsYXNoaW5nUHJvZHVjdFxyXG4gICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCIjY29sbGFwc2VDb2xvdXJze3sgaSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIWNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3QgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29sb3VycyhjYXJ0RGV0YWlsc1tpXSwgaSlcclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgIG1vZGFsU2VsZWN0ZWRDb2xvdXJbaV0/Lm5hbWUgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmJwQWRkaXRpb25hbEF0dHJpYnV0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8uY29sb3Vyc1swXT8ubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1kb3duIGRyb3Bkb3duLWljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2lcclxuICAgICAgICAgICAgICAgICAgPjwvYT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gYXZhaWFsYWJsZSBjb2xvdXJzIHBvcHVwIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNhcnREZXRhaWxzW2ldPy5pc0V4cGFuZFwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sbGFwc2UgY29sb3Vyc19jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICBpZD1cImNvbGxhcHNlQ29sb3Vyc3t7IGkgfX1cIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmluaXNoZWRQcm9kdWN0ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py52YXJpYW50T3B0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3VycyBtLTEgcHQtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbW9kYWxjb2xvdXIgb2YgY2FydERldGFpbHNbaV0/LnByb2R1Y3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8udmFyaWFudE9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxTZWxlY3RlZENvbG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsY29sb3VyLmNvbG91cnNbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3VyIG0tMSBtYi0zIG1haW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IG1vZGFsY29sb3VyPy5jb2xvdXJzWzBdPy5oZXhhZGVjaW1hbENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxTZWxlY3RlZENvbG91cltpXT8uaGV4YWRlY2ltYWxDb2RlID09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsY29sb3VyPy5jb2xvdXJzWzBdPy5oZXhhZGVjaW1hbENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG91ci10aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cInt7IG1vZGFsY29sb3VyPy5jb2xvdXJzWzBdPy5uYW1lIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtb2RhbGNvbG91cj8uY29sb3Vyc1swXT8ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmZpbmlzaGVkUHJvZHVjdCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8udmFyaWFudE9wdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG91cnMgbS0xIHB0LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1vZGFsY29sb3VyIG9mIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmJwQWRkaXRpb25hbEF0dHJpYnV0ZT8uY29sb3VycztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW9kYWxTZWxlY3RlZENvbG9yKCRldmVudCwgbW9kYWxjb2xvdXIsIGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG91ciBtLTEgbWItMyBtYWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBtb2RhbGNvbG91cj8uaGV4YWRlY2ltYWxDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsU2VsZWN0ZWRDb2xvdXJbaV0/LmhleGFkZWNpbWFsQ29kZSA9PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbGNvbG91cj8uaGV4YWRlY2ltYWxDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvdXItdGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJ7eyBtb2RhbGNvbG91cj8ubmFtZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbW9kYWxjb2xvdXI/Lm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5icEFkZGl0aW9uYWxBdHRyaWJ1dGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/LmFkZGl0aW9uYWxDb2xvdXJzPy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwibW9kYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRhcmdldD1cIiNhZGRpdGlvbmFsQ29sb3JzTW9kYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dT4gQWRkaXRpb25hbCBjb2xvcnMgbWF5IGJlIGF2aWFsYWJsZSA8L3U+PC9hXHJcbiAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmZsYXNoaW5nUHJvZHVjdCA9PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbGxhcHNlIGNvbG91cnNfY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAgIGlkPVwiY29sbGFwc2VDb2xvdXJze3sgaSB9fVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvdXJzIG0tMSBwdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtb2RhbGNvbG91ciBvZiBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8uYnBBZGRpdGlvbmFsQXR0cmlidXRlPy5jb2xvdXJzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XHJcbiAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vZGFsU2VsZWN0ZWRDb2xvcigkZXZlbnQsIG1vZGFsY29sb3VyLCBpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3VyIG0tMSBtYi0zIG1haW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbW9kYWxjb2xvdXI/LmhleGFkZWNpbWFsQ29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxTZWxlY3RlZENvbG91cltpXT8uaGV4YWRlY2ltYWxDb2RlID09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbGNvbG91cj8uaGV4YWRlY2ltYWxDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG91ci10aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwie3sgbW9kYWxjb2xvdXI/Lm5hbWUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbW9kYWxjb2xvdXI/Lm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2FydERldGFpbHNbaV0/LnByb2R1Y3RcclxuICAgICAgICAgICAgICAgICAgPy5icEFkZGl0aW9uYWxBdHRyaWJ1dGU/LmFkZGl0aW9uYWxDb2xvdXJzPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwibW9kYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS10YXJnZXQ9XCIjYWRkaXRpb25hbENvbG9yc01vZGFsXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dT4gQWRkaXRpb25hbCBjb2xvcnMgbWF5IGJlIGF2aWFsYWJsZSA8L3U+PC9hXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIEFkZGl0aW9uYWwgY29sb3VycyBwb3B1cC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1vZGFsIGZhZGVcIlxyXG4gICAgICAgICAgICAgICAgICBpZD1cImFkZGl0aW9uYWxDb2xvcnNNb2RhbFwiXHJcbiAgICAgICAgICAgICAgICAgIHJvbGU9XCJkaWFsb2dcIlxyXG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJpbnZpdGVNZW1iZXJMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtbGdcIiByb2xlPVwiZG9jdW1lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiPkFkZGl0aW9uYWwgQ29sb3VyczwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLWNsb3NlIGludml0ZS1wb3AtY2xvc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICNjbG9zZUludml0ZU1vZGFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb3JlLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1yLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCIuLi8uLi8uLi8uLi9hc3NldHMvaW1hZ2VzL3dhcm5pbmdpY29uLnN2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cImFsZXJ0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBhZGRpdGlvbmFsUGFyYT8uY29udGVudCB9fS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3VycyBwdC0zIHBiLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1vZGFsY29sb3VyIG9mIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5icEFkZGl0aW9uYWxBdHRyaWJ1dGU/LmFkZGl0aW9uYWxDb2xvdXJzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHRpb25hbE1vZGFsU2VsZWN0ZWRDb2xvcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsY29sb3VyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvdXIgbS0xIG1iLTMgbWFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBtb2RhbGNvbG91cj8uaGV4YWRlY2ltYWxDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGluYWxzZWxlY3RlZENvbG91cltpXT8uaGV4YWRlY2ltYWxDb2RlID09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbGNvbG91cj8uaGV4YWRlY2ltYWxDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG91ci10aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwie3sgbW9kYWxjb2xvdXI/Lm5hbWUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbW9kYWxjb2xvdXI/Lm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS0xIHB0LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWRkaXRpbmFsc2VsZWN0ZWRDb2xvdXJbaV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZFwiPkNvbG91ciBTZWxlY3Rpb248L2g2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZF9jb2xvcl9zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRfY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW5hbHNlbGVjdGVkQ29sb3VyW2ldPy5oZXhhZGVjaW1hbENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGFkZGl0aW5hbHNlbGVjdGVkQ29sb3VyW2ldPy5uYW1lIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1zbS1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgZC1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWRpc21pc3M9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gbW9iaWxlLWNhbmNlbC1idG4gZGltb25kLXNlY29uZGFyeS1idG4gbXItbGctNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZWVkV2l0aFN1Ym1pdChhZGRpdGluYWxzZWxlY3RlZENvbG91ciwgaSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIG1vYmlsZS1zYXZlLWJ0biBkaW1vbmQtcHJpbWFyeS1idG4gZmxvYXQtcmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2VlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwic2VlLW1vcmUtbGlua1wiIChjbGljayk9XCJzaG93SGlkZShpKVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBzaG93RGV0YWlsc1tpXSA9PSB0cnVlID8gXCJIaWRlXCIgOiBcIlNlZVwiIH19IG1vcmUgZGV0YWlsc1xyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dEZXRhaWxzW2ldXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncmlkXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICdxdWFudGl0eS1mb3JtLWRldGFpbHMnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgIWNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5maW5pc2hlZFByb2R1Y3RcclxuICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXByb2R1Y3QtcXVhbnRpdHktZm9ybVxyXG4gICAgICAgICAgICAgICAgICAgIFtwcm9kdWN0Q29kZV09XCJjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Byb2R1Y3REZXRhaWxzXT1cImNhcnREZXRhaWxzW2ldXCJcclxuICAgICAgICAgICAgICAgICAgICBbbGlzdFZpZXddPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthY2Nlc3Nvcmllc1ByaWNlXT1cImNhcnREZXRhaWxzW2ldPy5iYXNlUHJpY2U/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRDb2xvdXJdPVwic2VsZWN0ZWRDb2xvdXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmaW5pc2hlZFZhcmlhbnREZXRhaWxzXT1cImZpbmlzaGVkVmFyaWFudERldGFpbHNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpc0ZpbmlzaGVkUHJvZHVjdF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5maW5pc2hlZFByb2R1Y3RcclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICh1cGRhdGVDYXJ0RW50aXJlcyk9XCJyZW9sYWRDYXJ0RW50aXJlcygpXCJcclxuICAgICAgICAgICAgICAgICAgPjwvYXBwLWN1c3RvbS1wcm9kdWN0LXF1YW50aXR5LWZvcm0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLXRpbGUtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC02IGJvcmRlci1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG90YWwtcXR5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgID5Ub3RhbCBRdHk6IHt7IGNhcnREZXRhaWxzW2ldPy5xdWFudGl0eURvdWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgfX17eyBjYXJ0RGV0YWlsc1tpXT8uYmFzZVByaWNlPy51bml0VHlwZSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIWNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5maW5pc2hlZFByb2R1Y3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugbm9uQWNjZXNzb3JpZXNcclxuICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+e3sgY2FydERldGFpbHNbaV0/LmJhc2VQcmljZT8uZm9ybWF0dGVkVmFsdWUgfX0ve3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LmJhc2VQcmljZT8udW5pdFR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9uQWNjZXNzb3JpZXM+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJxdHlfaW5wdXQgcmVmZXJuY2UtaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcm9kUXR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5sZW5ndGg9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJ1cGRhdGVDYXJ0KCRldmVudCwgY2FydERldGFpbHNbaV0sIGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1tZC02IGNvbC02IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWNlbnRlciB0ZXh0LXJpZ2h0XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvdGFsLWFtb3VudCB0ZXh0LXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg0Pnt7IGNhcnREZXRhaWxzW2ldPy50b3RhbFByaWNlPy5mb3JtYXR0ZWRWYWx1ZSB9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+ZXhjbCBHU1Q8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3QgJiZcclxuICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Q29uZmlndXJlZEluZm9zICYmXHJcbiAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdENvbmZpZ3VyZWRJbmZvcz8ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsYXNoaW5nLWJsb2NrXCJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRhIG9mIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Q29uZmlndXJlZEluZm9zXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC10aWxlLXRvcFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cInNrdUlkXCI+U0tVOiB7eyBkYXRhPy5wcm9kdWN0Py5jb2RlIH19PC9oNj5cclxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJmbGFzaC10aXRsZVwiPnt7IGRhdGE/LnByb2R1Y3Q/Lm5hbWUgfX08L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YT8uZ2lydGhcIj5Hcml0aDogK3t7IGRhdGE/LmdpcnRoIH19bW08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC10aWxlLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtNiBjb2wtNiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGJvcmRlci1yaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvdGFsLXF0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFRvdGFsIFF0eToge3sgZGF0YT8ucXVhbnRpdHlEb3VibGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fXt7IGRhdGE/LnVuaXRUeXBlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5Ae3sgZGF0YT8uYmFzZVByaWNlPy5mb3JtYXR0ZWRWYWx1ZSB9fS97e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT8udW5pdFR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1tZC02IGNvbC02IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWNlbnRlciB0ZXh0LXJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG90YWwtYW1vdW50IHRleHQtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg0Pnt7IGRhdGE/LnRvdGFsUHJpY2U/LmZvcm1hdHRlZFZhbHVlIH19PC9oND5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+ZXhjbCBHU1Q8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48ZGl2XHJcbiAgY2xhc3M9XCJtb2RhbCBmYWRlXCJcclxuICBpZD1cImltYWdlTW9kYWxcIlxyXG4gIHJvbGU9XCJkaWFsb2dcIlxyXG4gIGFyaWEtbGFiZWxsZWRieT1cImltYWdlTW9kYWxcIlxyXG4gIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgI2ltYWdlTW9kYWxcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtbGdcIiByb2xlPVwiZG9jdW1lbnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICA8aVxyXG4gICAgICAgICAgY2xhc3M9XCJpY29uLWNsb3NlIGludml0ZS1wb3AtY2xvc2VcIlxyXG4gICAgICAgICAgI2Nsb3NlSW52aXRlTW9kYWxcclxuICAgICAgICAgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiXHJcbiAgICAgICAgPjwvaT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IG0tNFwiPlxyXG4gICAgICAgIDxpbWcgW3NyY109XCJpbWFnZU1vZGFsU3JjXCIgYWx0PVwiYWxlcnRcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZ2ItdG9hc3QgKm5nSWY9XCJzaG93VG9hc3RcIiBbYXV0b2hpZGVdPVwidHJ1ZVwiIFtkZWxheV09XCI0MDAwXCI+XHJcbiAgPGltZyBzcmM9XCIuLi8uLi8uLi8uLi9hc3NldHMvaW1hZ2VzL0ludml0ZWQuc3ZnXCIgLz5cclxuICBDYXJ0IHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IVxyXG4gIDxpXHJcbiAgICBjbGFzcz1cImljb24tY2xvc2UgdG9hc3QtY2xvc2VcIlxyXG4gICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcclxuICAgIChjbGljayk9XCJjbG9zZVRvYXN0KClcIlxyXG4gID48L2k+XHJcbjwvbmdiLXRvYXN0PlxyXG4iXX0=
381
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWNhcnQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9idWlsZGluZ3Byb2R1Y3RfbGlicmFyeS9zcmMvbGliL3NoYXJlZC9jdXN0b20tY2FydC1kZXRhaWwvY3VzdG9tLWNhcnQtZ3JpZC9jdXN0b20tY2FydC1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J1aWxkaW5ncHJvZHVjdF9saWJyYXJ5L3NyYy9saWIvc2hhcmVkL2N1c3RvbS1jYXJ0LWRldGFpbC9jdXN0b20tY2FydC1ncmlkL2N1c3RvbS1jYXJ0LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd2QyxPQUFPLEVBQUUsU0FBUyxFQUEwQixNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBUy9DLE1BQU0sT0FBTyx1QkFBdUI7SUE4QmxDLFlBQ1UsV0FBd0IsRUFDeEIsR0FBc0IsRUFDdEIsV0FBd0IsRUFDeEIsaUJBQW9DLEVBQ3BDLFVBQXFCLEVBQ3JCLGdCQUF3QyxFQUN4QyxLQUFxQjtRQU5yQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGVBQVUsR0FBVixVQUFVLENBQVc7UUFDckIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF3QjtRQUN4QyxVQUFLLEdBQUws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c0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJzsgXHJcbmltcG9ydCB7IEFjdGl2ZUNhcnRTZXJ2aWNlLCBDbXNTZXJ2aWNlIH0gZnJvbSAnQHNwYXJ0YWN1cy9jb3JlJztcclxuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyLCBGb3JtQXJyYXkgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENhcnRGb3JtIH0gZnJvbSAnLi4vLi4vQ3VzdG9tUHJvZHVjdCc7XHJcbmltcG9ydCB7IFNhdmVkQ2FydERldGFpbHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY3VzdG9tLXNhdmVkLWNhcnQvY3VzdG9tLXNhdmVkLWNhcnQtZGV0YWlscy9zYXZlZC1jYXJ0LWRldGFpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWN1c3RvbS1jYXJ0LWdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tY2FydC1ncmlkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jdXN0b20tY2FydC1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21DYXJ0R3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBpc0ZpbmlzaGVkUG9kdWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWRkaXRpbmFsc2VsZWN0ZWRDb2xvdXI6IGFueSA9IFtdO1xyXG4gIG1vZGFsU2VsZWN0ZWRDb2xvdXI6IGFueSA9IFtdO1xyXG4gIHNob3dEZXRhaWxzOiBhbnkgPSBbXTtcclxuICBjYXJ0SWQ6IGFueTtcclxuICBzaG93V2FpdEN1cnNvciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxQYXJhOiBhbnk7XHJcbiAgQElucHV0KCkgY2FydERldGFpbHM6IGFueTtcclxuICBASW5wdXQoKSBpc0NhcmREYXRhOiBhbnk7XHJcbiAgQE91dHB1dCgpIHVwZGF0ZUNhcnRFbnRyeSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2Nsb3NlSW52aXRlTW9kYWwnKSBjbG9zZUludml0ZU1vZGFsOiBhbnk7XHJcbiAgaXNNb2RhbFNlbGVjdGVkQ29sb3I6IGFueSA9IFtdO1xyXG4gIGltYWdlTW9kYWxTcmM6IGFueTtcclxuICBzZWxlY3RlZENvbG91cjogYW55O1xyXG4gIHNlbGVjdGVkSW5kZXg6IGFueTtcclxuICBhcnJvd1VwRG93bjogYW55ID0gW107XHJcbiAgZGVmYXVsdENvbmZpZ0luZm86IGFueSA9IHtcclxuICAgIGNvbmZpZ3VyYXRvclR5cGU6ICdURVhURklFTEQnLFxyXG4gICAgY29uZmlndXJhdGlvbkxhYmVsOiAnQ09MT1InLFxyXG4gICAgY29uZmlndXJhdGlvblZhbHVlOiAnJyxcclxuICB9O1xyXG4gIHByb2R1Y3RGb3JtOiBhbnkgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBhZGRUb0NhcnRFcnJvcjogYW55ID0gbnVsbDtcclxuICBlcnJvck1lc3NhZ2UgPSAnU29tZSBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIGRhdGEnO1xyXG4gIHNob3dUb2FzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNhcnRQYWdlRGF0YTpib29sZWFuPXRydWU7XHJcbiAgc2F2ZUNhcmRPcmRlcklkOmFueTtcclxuICBlbnY6IGFueSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2VudicpO1xyXG4gIGVudmlyb25tZW50IDogYW55ID0gSlNPTi5wYXJzZSh0aGlzLmVudik7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmVDYXJ0U2VydmljZTogQWN0aXZlQ2FydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNtc1NlcnZpY2U6Q21zU2VydmljZSxcclxuICAgIHByaXZhdGUgc2F2ZWRDYXJ0U2VydmljZTpTYXZlZENhcnREZXRhaWxzU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNhcnRPYmo6IGFueSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzcGFydGFjdXPimr9kaW1vbmQtc3Bh4pq/Y2FydCcpO1xyXG4gICAgdGhpcy5jYXJ0SWQgPSBKU09OLnBhcnNlKGNhcnRPYmopPy5hY3RpdmU7XHJcbiAgICB0aGlzLnNhdmVDYXJkT3JkZXJJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydzYXZlZENhcnRJZCddO1xyXG4gICAgdGhpcy5wcm9kdWN0Rm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBjYXJ0OiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlRGVmYXVsdENhcnREZXRhaWxzKCk7XHJcbiAgICB0aGlzLmNhcnRTZXJ2aWNlLmV4cGFuZEFsbC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNhcnREZXRhaWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsc1tpXSA9IGRhdGE7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5jbXNTZXJ2aWNlLmdldEN1cnJlbnRQYWdlKCkuc3Vic2NyaWJlKChkYXRhKT0+e1xyXG4gICAgICBpZihkYXRhLnRlbXBsYXRlPT1cIlNhdmVkQ2FydERldGFpbHNQYWdlVGVtcGxhdGVcIil7XHJcbiAgICAgICAgdGhpcy5jYXJ0UGFnZURhdGE9ZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZXtcclxuICAgICAgICB0aGlzLmNhcnRQYWdlRGF0YT10cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhcnRGb3JtKCk6IEZvcm1BcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9kdWN0Rm9ybS5nZXQoJ2NhcnQnKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBoYXNDYXJ0RGV0YWlscygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNhcnRGb3JtICYmIE9iamVjdC5rZXlzKHRoaXMuY2FydEZvcm0pPy5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRGVmYXVsdENhcnREZXRhaWxzKCkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNhcnREZXRhaWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuY2FydEZvcm0/LnB1c2godGhpcy5mb3JtQnVpbGRlci5ncm91cChuZXcgQ2FydEZvcm0oKSkpO1xyXG4gICAgICB0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpXVxyXG4gICAgICAgIC5nZXQoJ2pvYlJlZmVyZW5jZScpXHJcbiAgICAgICAgPy5zZXRWYWx1ZSh0aGlzLmNhcnREZXRhaWxzW2ldPy5qb2JSZWZlcmVuY2UpO1xyXG4gICAgICBjb25zdCBxdHkgPSB0aGlzLmNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5maW5pc2hlZFByb2R1Y3RcclxuICAgICAgICA/IHBhcnNlSW50KHRoaXMuY2FydERldGFpbHNbaV0/LnF1YW50aXR5KVxyXG4gICAgICAgIDogdGhpcy5jYXJ0RGV0YWlsc1tpXT8ucXVhbnRpdHlEb3VibGU7XHJcbiAgICAgIHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2ldLmdldCgncHJvZFF0eScpPy5zZXRWYWx1ZShxdHkpO1xyXG4gICAgICB0aGlzLmlzTW9kYWxTZWxlY3RlZENvbG9yLnB1c2goZmFsc2UpO1xyXG4gICAgICB0aGlzLnNob3dEZXRhaWxzLnB1c2goZmFsc2UpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5jYXJ0RGV0YWlsc1tpXT8uY29uZmlndXJhdGlvbkluZm9zICYmXHJcbiAgICAgICAgdGhpcy5jYXJ0RGV0YWlsc1tpXT8uY29uZmlndXJhdGlvbkluZm9zPy5sZW5ndGggPiAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIGZvciAoY29uc3QgY29uZmlnIG9mIHRoaXMuY2FydERldGFpbHNbaV0/LmNvbmZpZ3VyYXRpb25JbmZvcykge1xyXG4gICAgICAgICAgaWYgKGNvbmZpZz8uY29uZmlndXJhdGlvbkxhYmVsID09ICdDT0xPUicpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnSW5mby5jb25maWd1cmF0aW9uVmFsdWUgPVxyXG4gICAgICAgICAgICAgIGNvbmZpZz8uY29uZmlndXJhdGlvblZhbHVlPy5zcGxpdCgnfCcpWzBdIHx8ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLmNhcnREZXRhaWxzW2ldPy5jb25maWdWYWx1ZXMgJiZcclxuICAgICAgICAgIHRoaXMuY2FydERldGFpbHNbaV0/LmNvbmZpZ1ZhbHVlcz8ubGVuZ3RoID4gMFxyXG4gICAgICAgIClcclxuICAgICAgICAgIHRoaXMuY2FydERldGFpbHNbaV1bJ2NvbmZpZ1ZhbHVlcyddID0gdGhpcy5kZWZhdWx0Q29uZmlnSW5mbztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29sb3VycyhjYXJ0RGV0YWlsczogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sb3VyID1cclxuICAgICAgY2FydERldGFpbHM/LmNvbmZpZ3VyYXRpb25JbmZvc1swXT8uY29uZmlndXJhdGlvblZhbHVlLnNwbGl0KCd8Jyk7XHJcbiAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA+PSB0aGlzLmNhcnREZXRhaWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAvLyAgIHRoaXMuc2hvd0RldGFpbHNbaV0gPSBmYWxzZTtcclxuICAgIC8vIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGV4O1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jYXJ0RGV0YWlscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoaSAhPSBpbmRleCkge1xyXG4gICAgICAgIHRoaXMuY2FydERldGFpbHNbaV0uaXNFeHBhbmQgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNhcnREZXRhaWxzW2luZGV4XS5pc0V4cGFuZCA9ICF0aGlzLmNhcnREZXRhaWxzW2luZGV4XS5pc0V4cGFuZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VsZWN0ZWRDb2xvdXJDb2RlKGNvZGU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNhcnREZXRhaWxzW3RoaXMuc2VsZWN0ZWRJbmRleF0gJiZcclxuICAgICAgdGhpcy5jYXJ0RGV0YWlsc1t0aGlzLnNlbGVjdGVkSW5kZXhdPy5jb25maWdWYWx1ZXNcclxuICAgICkge1xyXG4gICAgICB0aGlzLmNhcnREZXRhaWxzW3RoaXMuc2VsZWN0ZWRJbmRleF0uY29uZmlnVmFsdWVzLmNvbmZpZ3VyYXRpb25WYWx1ZSA9XHJcbiAgICAgICAgY29kZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmICghY2hhbmdlcz8uY2FydERldGFpbHM/LmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlRGVmYXVsdENhcnREZXRhaWxzKCk7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dIaWRlKGluZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dEZXRhaWxzW2luZF0gPSAhdGhpcy5zaG93RGV0YWlsc1tpbmRdO1xyXG4gIH1cclxuICBhcnJvd0hpZGVTaG93KGlkOiBudW1iZXIpIHtcclxuICAgIHRoaXMuYXJyb3dVcERvd25baWRdID0gIXRoaXMuYXJyb3dVcERvd25baWRdO1xyXG4gIH1cclxuICBtb2RhbFNlbGVjdGVkQ29sb3IoZXZlbnQ6IGFueSwgY29sb3VyOiBhbnksIGluZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKHRoaXMuaXNGaW5pc2hlZFBvZHVjdCA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmFkZGl0aW5hbHNlbGVjdGVkQ29sb3VyW2luZF0gPSBjb2xvdXI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1vZGFsU2VsZWN0ZWRDb2xvdXJbaW5kXSA9IGNvbG91cjtcclxuICAgICAgLy90aGlzLmFkZGl0aW5hbHNlbGVjdGVkQ29sb3VyID0gY29sb3VyO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sb3VyID0gY29sb3VyPy5jb2RlIHx8IHRoaXMuc2VsZWN0ZWRDb2xvdXI7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzTW9kYWxTZWxlY3RlZENvbG9yW2luZF0gPSB0cnVlO1xyXG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZENvbG91ckNvZGUoY29sb3VyPy5jb2RlKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMudXBkYXRlUHJvZHVjdENvbG9yKHRoaXMuY2FydERldGFpbHNbaW5kXSwgY29sb3VyLCBpbmQpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUHJvZHVjdENvbG9yKGNhcnQ6IGFueSwgY29sb3I6IGFueSwgaW5kZXg6IGFueSk6IHZvaWQge1xyXG4gICAgLy9ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY29uc3Qgb2JqID0gW107XHJcbiAgICBvYmoucHVzaCh7XHJcbiAgICAgIFwiY29uZmlndXJhdG9yVHlwZVwiOiBcIlRFWFRGSUVMRFwiLFxyXG4gICAgICBcImNvbmZpZ3VyYXRpb25MYWJlbFwiOiBcIkNPTE9SXCIsXHJcbiAgICAgIFwiY29uZmlndXJhdGlvblZhbHVlXCI6IGNvbG9yPy5jb2RlXHJcbiAgICB9KTtcclxuICAgIHRoaXMudXBkYXRlQ2FydERldGFpbHMoY2FydCwgaW5kZXgsIG9iaik7XHJcbiAgfVxyXG5cclxuICBhZGR0aW9uYWxNb2RhbFNlbGVjdGVkQ29sb3IoZXZlbnQ6IGFueSwgY29sb3VyOiBhbnksIGluZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKHRoaXMuaXNGaW5pc2hlZFBvZHVjdCA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmFkZGl0aW5hbHNlbGVjdGVkQ29sb3VyW2luZF0gPSBjb2xvdXI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFkZGl0aW5hbHNlbGVjdGVkQ29sb3VyW2luZF0gPSBjb2xvdXI7XHJcbiAgICB9XHJcbiAgIC8vdGhpcy5tb2RhbFNlbGVjdGVkQ29sb3VyW2luZF0gPSBjb2xvdXI7XHJcbiAgICAvL3RoaXMuc2VsZWN0ZWRDb2xvdXIgPSBjb2xvdXI/LmNvZGU7XHJcblxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZENvbG91ckNvZGUodGhpcy5zZWxlY3RlZENvbG91cik7XHJcblxyXG4gIH1cclxuXHJcbiAgcHJvY2VlZFdpdGhTdWJtaXQoY29sb3I6IGFueSwgaW5kOiBudW1iZXIpIHtcclxuICAgIHRoaXMuaXNNb2RhbFNlbGVjdGVkQ29sb3JbaW5kXSA9IHRydWU7XHJcbiAgICB0aGlzLm1vZGFsU2VsZWN0ZWRDb2xvdXJbaW5kXSA9IGNvbG9yWzBdO1xyXG4gICAgdGhpcy5jbG9zZUludml0ZU1vZGFsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgIHRoaXMudXBkYXRlUHJvZHVjdENvbG9yKHRoaXMuY2FydERldGFpbHNbaW5kXSwgY29sb3JbMF0sIGluZCk7XHJcbiAgICB0aGlzLmdldENvbG91cnMoY29sb3IsIGluZClcclxuXHJcbiAgfVxyXG5cclxuICBjYW5jZWwoKSB7XHJcbiAgICB0aGlzLmFkZGl0aW5hbHNlbGVjdGVkQ29sb3VyID0gW107XHJcbiAgfVxyXG5cclxuICBkZWxldGVFbnRyeShlbnROdW1iZXI6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93V2FpdEN1cnNvci5uZXh0KHRydWUpO1xyXG4gICAgaWYoIHRoaXMuY2FydFBhZ2VEYXRhPT10cnVlICl7XHJcbiAgICAgIHRoaXMuY2FydFNlcnZpY2UuZGVsZXRlQ2FydEVudHJ5KHRoaXMuY2FydElkLCBlbnROdW1iZXIpLnN1YnNjcmliZShcclxuICAgICAgICAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRFbnRyeS5lbWl0KCk7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZUNhcnRTZXJ2aWNlLnJlbG9hZEFjdGl2ZUNhcnQoKTtcclxuICAgICAgICAgIHRoaXMuc2hvd1dhaXRDdXJzb3IubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaG93V2FpdEN1cnNvci5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2V7XHJcbiAgICAgIHRoaXMuc2F2ZWRDYXJ0U2VydmljZS5kZWxldGVTYXZlQ2FydEVudHJ5KHRoaXMuc2F2ZUNhcmRPcmRlcklkLCBlbnROdW1iZXIpLnN1YnNjcmliZShcclxuICAgICAgICAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNob3dXYWl0Q3Vyc29yLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RvYXN0ID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCA0MDAwKTtcclxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3dXYWl0Q3Vyc29yLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBpZiBhbnkgdmFsdWUgaXMgZW1wdHkgb3IgdW5kZWZpbmVkXHJcbiAgaXNOdWxsT3JFbXB0eSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPT0gJyc7XHJcbiAgfVxyXG5cclxuICAvLyBVcGRhdGUgQ2FydCBEZXRhaWxzIGlmIFF1YW50aXR5IENoYW5nZWQgZm9yIEFjY2Vzc29yaWVzIG9ubHlcclxuIHVwZGF0ZUNhcnREZXRhaWxzKGNhcnQ6IGFueSwgaW5kZXg6IGFueSwgY29sb3I/OmFueSk6IHZvaWQge1xyXG4gICAgbGV0IHBheUxvYWQ6IGFueSA9IHt9O1xyXG4gICAgdGhpcy5zaG93V2FpdEN1cnNvci5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgZW50cnlOdW1iZXIgPSBjYXJ0Py5wcm9kdWN0Py5lbnRyeU51bWJlciB8fCBjYXJ0Py5lbnRyeU51bWJlcjtcclxuICAgIGlmIChjb2xvcikge1xyXG4gICAgICBwYXlMb2FkID0ge1xyXG4gICAgICAgIHF1YW50aXR5OiBwYXJzZUludCh0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgncHJvZFF0eScpPy52YWx1ZSksXHJcbiAgICAgICAgXCJjb25maWd1cmF0aW9uSW5mb3NcIjogY29sb3JcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNhcnQ/LnByb2R1Y3Q/LmZpbmlzaGVkUHJvZHVjdCkge1xyXG4gICAgICBwYXlMb2FkID0ge1xyXG4gICAgICAgIHF1YW50aXR5OiBwYXJzZUludCh0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgncHJvZFF0eScpPy52YWx1ZSksXHJcbiAgICAgICAgam9iUmVmZXJlbmNlOlxyXG4gICAgICAgICAgdGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ2pvYlJlZmVyZW5jZScpPy52YWx1ZSxcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBheUxvYWQgPSB7XHJcbiAgICAgICAgcXVhbnRpdHk6IDEsXHJcbiAgICAgICAgcHJvZHVjdDoge1xyXG4gICAgICAgICAgY29kZTogY2FydD8ucHJvZHVjdD8uY29kZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGpvYlJlZmVyZW5jZTpcclxuICAgICAgICAgIHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdqb2JSZWZlcmVuY2UnKT8udmFsdWUsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhcnRTZXJ2aWNlXHJcbiAgICAgIC51cGRhdGVDYXJ0RW50cnkodGhpcy5jYXJ0SWQsIGVudHJ5TnVtYmVyLCBwYXlMb2FkKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LnN0YXR1c0NvZGU/LnRvTG93ZXJDYXNlKCkgPT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2FydFNlcnZpY2UucmVsb2FkQWN0aXZlQ2FydCgpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRFbnRyeS5lbWl0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5zaG93VG9hc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dXYWl0Q3Vyc29yLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNob3dUb2FzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCA0MDAwKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkVG9DYXJ0RXJyb3IgPVxyXG4gICAgICAgICAgICAgIHJlc3BvbnNlPy5lcnJvcnNbMF0/Lm1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgICByZXNwb25zZT8uZXJyb3JzWzBdPy5lcnJvck1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93V2FpdEN1cnNvci5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFkZFRvQ2FydEVycm9yID1cclxuICAgICAgICAgICAgZXJyb3I/LmVycm9yPy5lcnJvcnNbMF0/Lm1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgZXJyb3I/LmVycm9yPy5lcnJvcnNbMF0/LmVycm9yTWVzc2FnZSB8fFxyXG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZTtcclxuICAgICAgICAgIHRoaXMuc2hvd1dhaXRDdXJzb3IubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IFByb2R1Y3QgUXVhbnRpdHkgRXJyb3JzXHJcbiAgcHJvZFF0eUVycm9ycyhpbmRleDogYW55KTogYW55IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICh0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgncHJvZFF0eScpPy5lcnJvcnMgfHxcclxuICAgICAgICB0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgncHJvZFF0eScpPy5pbnZhbGlkKSAmJlxyXG4gICAgICAodGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ3Byb2RRdHknKT8uZGlydHkgfHxcclxuICAgICAgICB0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgncHJvZFF0eScpPy50b3VjaGVkKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIEdldCBKb2IgUmVmZXJlbmNlIEVycm9yc1xyXG4gIGpvYlJlZmVyZW5jZUVycm9ycyhpbmRleDogYW55KTogYW55IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICh0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgnam9iUmVmZXJlbmNlJyk/LmVycm9ycyB8fFxyXG4gICAgICAgIHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdqb2JSZWZlcmVuY2UnKT8uaW52YWxpZCkgJiZcclxuICAgICAgKHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdqb2JSZWZlcmVuY2UnKT8uZGlydHkgfHxcclxuICAgICAgICB0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgnam9iUmVmZXJlbmNlJyk/LnRvdWNoZWQpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2sgaXMgRm9ybSBWYWxpZFxyXG4gIGlzRm9ybVZhbGlkKGluZGV4OiBhbnksIGNhcnQ6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpbmRleF0gJiZcclxuICAgICAgdGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ2pvYlJlZmVyZW5jZScpPy52YWxpZCAmJlxyXG4gICAgICAodGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ3Byb2RRdHknKT8udmFsaWQgfHxcclxuICAgICAgICAhY2FydD8ucHJvZHVjdD8uZmluaXNoZWRQcm9kdWN0KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIFVwZGF0ZSBDYXJ0IERldGFpbHMgb24gY2hhbmdlIG9mIEpvYiBSZWZlcmVuY2Ugb3IgUXVhbnRpdHlcclxuICB1cGRhdGVDYXJ0KGV2ZW50OiBhbnksIGNhcnQ6IGFueSwgaW5kZXg6IGFueSk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQ/LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xyXG4gICAgaWYgKCF0aGlzLmlzTnVsbE9yRW1wdHkodmFsdWUpICYmIHRoaXMuaXNGb3JtVmFsaWQoaW5kZXgsIGNhcnQpKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlQ2FydERldGFpbHMoY2FydCwgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlSm9iUmVmZXJlbmNlKGV2ZW50OiBhbnksIGNhcnQ6IGFueSwgaW5kZXg6IGFueSk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMudXBkYXRlQ2FydERldGFpbHMoY2FydCwgaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcmVvbGFkQ2FydEVudGlyZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZUNhcnRFbnRyeS5lbWl0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gR2V0IHRoZSBJbWFnZSBEZXRhaWxzIGJhc2VkIG9uIFByb2R1Y3RzXHJcbiAgZ2V0SW1hZ2VEZXRhaWxzKGNhcnREZXRhaWxzOiBhbnksIHRodW1ibmFpbDogYW55ID0gdHJ1ZSk6IGFueSB7XHJcbiAgICBsZXQgaW1hZ2VVcmw6IGFueSA9IGNhcnREZXRhaWxzPy5wcm9kdWN0Py5pbWFnZXM7XHJcbiAgICBpZiAodGhpcy5pc0NhcmREYXRhKSB7XHJcbiAgICAgIGltYWdlVXJsID0gY2FydERldGFpbHM/LnByb2R1Y3Q/LmltYWdlcz8uZmluZCgoaW1nOiBhbnkpID0+IGltZy5mb3JtYXQgPT0gXCJjYXJ0SWNvblwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGltYWdlVXJsID0gY2FydERldGFpbHM/LnByb2R1Y3Q/LmltYWdlcz8uR0FMTEVSWT8uY2FydEljb247XHJcbiAgICB9XHJcbiAgICBsZXQgc3JjVXJsOiBhbnk7XHJcbiAgICBpZiAoXHJcbiAgICAgIGNhcnREZXRhaWxzPy5hdHRhY2htZW50cyAmJlxyXG4gICAgICBjYXJ0RGV0YWlscz8uYXR0YWNobWVudHM/Lmxlbmd0aCAmJlxyXG4gICAgICBjYXJ0RGV0YWlscz8ucHJvZHVjdD8uZmxhc2hpbmdQcm9kdWN0XHJcbiAgICApIHtcclxuICAgICAgc3JjVXJsID1cclxuICAgICAgICB0aHVtYm5haWwgJiYgY2FydERldGFpbHM/LmF0dGFjaG1lbnRzPy5sZW5ndGggPiAxXHJcbiAgICAgICAgICA/IGNhcnREZXRhaWxzPy5hdHRhY2htZW50c1sxXT8uZG93bmxvYWRVUkxcclxuICAgICAgICAgIDogY2FydERldGFpbHM/LmF0dGFjaG1lbnRzWzBdPy5kb3dubG9hZFVSTDtcclxuICAgICAgaW1hZ2VVcmwgPSB7XHJcbiAgICAgICAgdXJsOiAoXHJcbiAgICAgICAgICB0aGlzLmVudmlyb25tZW50Lm9jY0Jhc2VVcmwuc2xpY2UoMCwgdGhpcy5lbnZpcm9ubWVudC5vY2NCYXNlVXJsLmxlbmd0aCAtIDEpICtcclxuICAgICAgICAgIHNyY1VybFxyXG4gICAgICAgICk/LnJlcGxhY2UoJyZhdHRhY2htZW50PXRydWUnLCAnJyksXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaW1hZ2VVcmw7XHJcbiAgfVxyXG5cclxuICB2aWV3SW1hZ2UoZXZlbnQ6IGFueSwgY2FydERldGFpbHM6IGFueSk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMuaW1hZ2VNb2RhbFNyYyA9IHRoaXMuZ2V0SW1hZ2VEZXRhaWxzKGNhcnREZXRhaWxzLCBmYWxzZSk/LnVybDtcclxuICB9XHJcblxyXG4gIGdldFBkZkxpbmsoY2FydERldGFpbHM6IGFueSk6IHZvaWQge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0SW1hZ2VEZXRhaWxzKGNhcnREZXRhaWxzLCBmYWxzZSk/LnVybDtcclxuICB9XHJcblxyXG4gIGhhc0ltYWdlKGNhcnREZXRhaWxzOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG1pbWVUeXBlID0gY2FydERldGFpbHM/LmF0dGFjaG1lbnRzWzBdPy5taW1lO1xyXG4gICAgY29uc3QgbWltZUFycmF5ID0gW1wiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiXTtcclxuICAgIHJldHVybiBtaW1lQXJyYXkuaW5jbHVkZXMobWltZVR5cGUpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VUb2FzdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd1RvYXN0ID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJsb2FkaW5nXCIgKm5nSWY9XCJzaG93V2FpdEN1cnNvciB8IGFzeW5jXCI+TG9hZGluZyYjODIzMDs8L2Rpdj5cclxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cInByb2R1Y3RGb3JtXCI+XHJcbiAgPG5nLWNvbnRhaW5lciBmb3JtQXJyYXlOYW1lPVwiY2FydFwiICpuZ0lmPVwiaGFzQ2FydERldGFpbHMoKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInB5LTMgbWItMjAwXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImNvbC1sZy0zIGNvbC1zbS02XCJcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjYXJ0IG9mIGNhcnRGb3JtLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgIFtmb3JtR3JvdXBOYW1lXT1cImlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJjYXJ0LWdyaWQtdGlsZVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzTnVsbE9yRW1wdHkoY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmNvZGUpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtdGlsZS10b3AgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJza3UtY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgID5TS1U6e3sgY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmNvZGUgfX08L3NwYW5cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkZWxldGUtaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3JjPVwiLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy9pb25pYy10cmFzaC5zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgIGFsdD1cImRlbGV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUVudHJ5KGNhcnREZXRhaWxzW2ldPy5lbnRyeU51bWJlcilcIlxyXG4gICAgICAgICAgICAgICAgLz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC0zIHByLTBcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSA8Y3gtbWVkaWFcclxuICAgICAgICAgICAgICAgICAgICBbY29udGFpbmVyXT1cImNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5pbWFnZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdD1cImNhcnRJY29uXCJcclxuICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgPjwvY3gtbWVkaWE+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmxhc2hpbmdQcm9kdWN0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSBub3JtYWxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsYXNoaW5nLWV4cGFuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld0ltYWdlKCRldmVudCwgY2FydERldGFpbHNbaV0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGFyZ2V0XT1cIicjaW1hZ2VNb2RhbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNJbWFnZShjYXJ0RGV0YWlsc1tpXSk7IGVsc2UgaGFzUGRmXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8Y3gtbWVkaWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRhaW5lcl09XCJnZXRJbWFnZURldGFpbHMoY2FydERldGFpbHNbaV0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0PVwiY2FydEljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgID48L2N4LW1lZGlhPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2hhc1BkZj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZmxhc2hpbmctZXhwYW5kIGZsYXNoaW5nLW9wZW5cIiBbaHJlZl09XCJnZXRQZGZMaW5rKGNhcnREZXRhaWxzW2ldKVwiIHRhcmdldD1cIl9ibGFua1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwZGYtaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy9wZGYtaWNvbi5zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIkNsaWNrIHRvIG9wZW4gUERGXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkNsaWNrIHRvIG9wZW4gUERGXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxJbWFnZT5cclxuICAgICAgICAgICAgICAgICAgICA8Y3gtbWVkaWFcclxuICAgICAgICAgICAgICAgICAgICAgIFtjb250YWluZXJdPVwiZ2V0SW1hZ2VEZXRhaWxzKGNhcnREZXRhaWxzW2ldKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9XCJjYXJ0SWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9jeC1tZWRpYT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC03IGNvbC03IGVsbGlwc2lzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxoNFxyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8ubmFtZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2g0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJleHBhbmRCdG5cIiAoY2xpY2spPVwiYXJyb3dIaWRlU2hvdyhpKVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFycm93VXBEb3duW2ldID09IHRydWU7IGVsc2UgYXJyb3dVcFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jaGV2cm9uLXVwXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Fycm93VXA+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tZG93blwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFycm93VXBEb3duW2ldXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtdGlsZS1taWRkbGVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uY2xhc3NpZmljYXRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMyBtYi0wIGVsbGlwc2lzIHNpZ2xlTGluZV9lbGxpcHNpc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGF0dHJpYnV0ZXMgb2YgY2FydERldGFpbHNbaV0/LnByb2R1Y3QgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uY2xhc3NpZmljYXRpb25zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmNsYXNzaWZpY2F0aW9uc1swXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5jbGFzc2lmaWNhdGlvbnNbMF0/LmZlYXR1cmVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0IGFzIGlzTGFzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGVzPy5mZWF0dXJlVmFsdWVzWzBdPy52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNMYXN0XCI+IHwgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0xhc3RcIj5tbTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNhcnREZXRhaWxzW2ldLmpvYlJlZmVyZW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImpvYlJlZmVyZW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLWlucHV0LWZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgKGJsdXIpPVwidXBkYXRlSm9iUmVmZXJlbmNlKCRldmVudCwgY2FydERldGFpbHNbaV0sIGkpXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXQtMiB0ZXh0LWRhbmdlciBtYi0yXCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJqb2JSZWZlcmVuY2VFcnJvcnMoaSlcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICBQbGVhc2UgZW50ZXIgdmFsaWQgSm9iIFJlZmVyZW5jZVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzTW9kYWxTZWxlY3RlZENvbG9yW2ldXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0uY29uZmlndXJhdGlvbkluZm9zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXS5jb25maWd1cmF0aW9uSW5mb3NbMF0gJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5jb25maWd1cmF0aW9uSW5mb3NbMF0/LmNvbmZpZ3VyYXRpb25WYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LmNvbmZpZ3VyYXRpb25JbmZvc1swXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8uY29uZmlndXJhdGlvblZhbHVlIHwgc3BsaXQgOiAnfCcgOiAyXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtb3JlLWNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBub2xpbmtGb3JmbGFzaDogY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmZsYXNoaW5nUHJvZHVjdFxyXG4gICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCIjY29sbGFwc2VDb2xvdXJze3sgaSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXS5jb25maWd1cmF0aW9uSW5mb3MgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldLmNvbmZpZ3VyYXRpb25JbmZvc1swXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LmNvbmZpZ3VyYXRpb25JbmZvc1swXT8uY29uZmlndXJhdGlvblZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAhY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmZsYXNoaW5nUHJvZHVjdCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDb2xvdXJzKGNhcnREZXRhaWxzW2ldLCBpKVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8uY29uZmlndXJhdGlvbkluZm9zWzBdPy5jb25maWd1cmF0aW9uVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfCBzcGxpdCA6ICd8JyA6IDFcclxuICAgICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LmNvbmZpZ3VyYXRpb25JbmZvc1swXT8uY29uZmlndXJhdGlvblZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHwgc3BsaXQgOiBcInxcIiA6IDFcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmxhc2hpbmdQcm9kdWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tZG93biBkcm9wZG93bi1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9pXHJcbiAgICAgICAgICAgICAgICAgID48L2E+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaXNNb2RhbFNlbGVjdGVkQ29sb3JbaV0gfHxcclxuICAgICAgICAgICAgICAgICAgICBtb2RhbFNlbGVjdGVkQ29sb3VyW2ldPy5uYW1lXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsU2VsZWN0ZWRDb2xvdXJbaV0/LmhleGFkZWNpbWFsQ29kZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uYnBBZGRpdGlvbmFsQXR0cmlidXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPy5jb2xvdXJzWzBdPy5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtb3JlLWNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBub2xpbmtGb3JmbGFzaDogY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmZsYXNoaW5nUHJvZHVjdFxyXG4gICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCIjY29sbGFwc2VDb2xvdXJze3sgaSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIWNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3QgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29sb3VycyhjYXJ0RGV0YWlsc1tpXSwgaSlcclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgIG1vZGFsU2VsZWN0ZWRDb2xvdXJbaV0/Lm5hbWUgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmJwQWRkaXRpb25hbEF0dHJpYnV0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8uY29sb3Vyc1swXT8ubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1kb3duIGRyb3Bkb3duLWljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2lcclxuICAgICAgICAgICAgICAgICAgPjwvYT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gYXZhaWFsYWJsZSBjb2xvdXJzIHBvcHVwIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNhcnREZXRhaWxzW2ldPy5pc0V4cGFuZFwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sbGFwc2UgY29sb3Vyc19jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICBpZD1cImNvbGxhcHNlQ29sb3Vyc3t7IGkgfX1cIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmluaXNoZWRQcm9kdWN0ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py52YXJpYW50T3B0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3VycyBtLTEgcHQtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbW9kYWxjb2xvdXIgb2YgY2FydERldGFpbHNbaV0/LnByb2R1Y3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8udmFyaWFudE9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxTZWxlY3RlZENvbG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsY29sb3VyLmNvbG91cnNbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3VyIG0tMSBtYi0zIG1haW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IG1vZGFsY29sb3VyPy5jb2xvdXJzWzBdPy5oZXhhZGVjaW1hbENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxTZWxlY3RlZENvbG91cltpXT8uaGV4YWRlY2ltYWxDb2RlID09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsY29sb3VyPy5jb2xvdXJzWzBdPy5oZXhhZGVjaW1hbENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG91ci10aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cInt7IG1vZGFsY29sb3VyPy5jb2xvdXJzWzBdPy5uYW1lIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtb2RhbGNvbG91cj8uY29sb3Vyc1swXT8ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmluaXNoZWRQcm9kdWN0ICYmIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5icEFkZGl0aW9uYWxBdHRyaWJ1dGU/LmNvbG91cnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvdXJzIG0tMSBwdC0zXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtb2RhbGNvbG91ciBvZiBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uYnBBZGRpdGlvbmFsQXR0cmlidXRlPy5jb2xvdXJzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb2RhbFNlbGVjdGVkQ29sb3IoJGV2ZW50LCBtb2RhbGNvbG91ciwgaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3VyIG0tMSBtYi0zIG1haW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IG1vZGFsY29sb3VyPy5oZXhhZGVjaW1hbENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxTZWxlY3RlZENvbG91cltpXT8uaGV4YWRlY2ltYWxDb2RlID09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsY29sb3VyPy5oZXhhZGVjaW1hbENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG91ci10aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cInt7IG1vZGFsY29sb3VyPy5uYW1lIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtb2RhbGNvbG91cj8ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmJwQWRkaXRpb25hbEF0dHJpYnV0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8uYWRkaXRpb25hbENvbG91cnM/Lmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGFyZ2V0PVwiI2FkZGl0aW9uYWxDb2xvcnNNb2RhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1PiBBZGRpdGlvbmFsIGNvbG9ycyBtYXkgYmUgYXZpYWxhYmxlIDwvdT48L2FcclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmxhc2hpbmdQcm9kdWN0ID09IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sbGFwc2UgY29sb3Vyc19jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgaWQ9XCJjb2xsYXBzZUNvbG91cnN7eyBpIH19XCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG91cnMgbS0xIHB0LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1vZGFsY29sb3VyIG9mIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPy5icEFkZGl0aW9uYWxBdHRyaWJ1dGU/LmNvbG91cnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW9kYWxTZWxlY3RlZENvbG9yKCRldmVudCwgbW9kYWxjb2xvdXIsIGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvdXIgbS0xIG1iLTMgbWFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBtb2RhbGNvbG91cj8uaGV4YWRlY2ltYWxDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbFNlbGVjdGVkQ29sb3VyW2ldPy5oZXhhZGVjaW1hbENvZGUgPT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsY29sb3VyPy5oZXhhZGVjaW1hbENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3VyLXRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJ7eyBtb2RhbGNvbG91cj8ubmFtZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtb2RhbGNvbG91cj8ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdFxyXG4gICAgICAgICAgICAgICAgICA/LmJwQWRkaXRpb25hbEF0dHJpYnV0ZT8uYWRkaXRpb25hbENvbG91cnM/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRhcmdldD1cIiNhZGRpdGlvbmFsQ29sb3JzTW9kYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDx1PiBBZGRpdGlvbmFsIGNvbG9ycyBtYXkgYmUgYXZpYWxhYmxlIDwvdT48L2FcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gQWRkaXRpb25hbCBjb2xvdXJzIHBvcHVwLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW9kYWwgZmFkZVwiXHJcbiAgICAgICAgICAgICAgICAgIGlkPVwiYWRkaXRpb25hbENvbG9yc01vZGFsXCJcclxuICAgICAgICAgICAgICAgICAgcm9sZT1cImRpYWxvZ1wiXHJcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImludml0ZU1lbWJlckxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+QWRkaXRpb25hbCBDb2xvdXJzPC9oND5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tY2xvc2UgaW52aXRlLXBvcC1jbG9zZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgI2Nsb3NlSW52aXRlTW9kYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWRpc21pc3M9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vcmUtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXItMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cIi4uLy4uLy4uLy4uL2Fzc2V0cy9pbWFnZXMvd2FybmluZ2ljb24uc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiYWxlcnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGFkZGl0aW9uYWxQYXJhPy5jb250ZW50IH19LjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvdXJzIHB0LTMgcGItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbW9kYWxjb2xvdXIgb2YgY2FydERldGFpbHNbaV0/LnByb2R1Y3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmJwQWRkaXRpb25hbEF0dHJpYnV0ZT8uYWRkaXRpb25hbENvbG91cnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkdGlvbmFsTW9kYWxTZWxlY3RlZENvbG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxjb2xvdXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG91ciBtLTEgbWItMyBtYWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IG1vZGFsY29sb3VyPy5oZXhhZGVjaW1hbENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW5hbHNlbGVjdGVkQ29sb3VyW2ldPy5oZXhhZGVjaW1hbENvZGUgPT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsY29sb3VyPy5oZXhhZGVjaW1hbENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3VyLXRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJ7eyBtb2RhbGNvbG91cj8ubmFtZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtb2RhbGNvbG91cj8ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtLTEgcHQtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhZGRpdGluYWxzZWxlY3RlZENvbG91cltpXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJmb250LXdlaWdodC1ib2xkXCI+Q29sb3VyIFNlbGVjdGlvbjwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkX2NvbG9yX3NlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RlZF9jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpbmFsc2VsZWN0ZWRDb2xvdXJbaV0/LmhleGFkZWNpbWFsQ29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgYWRkaXRpbmFsc2VsZWN0ZWRDb2xvdXJbaV0/Lm5hbWUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLXNtLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBkLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBtb2JpbGUtY2FuY2VsLWJ0biBkaW1vbmQtc2Vjb25kYXJ5LWJ0biBtci1sZy01XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NlZWRXaXRoU3VibWl0KGFkZGl0aW5hbHNlbGVjdGVkQ29sb3VyLCBpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gbW9iaWxlLXNhdmUtYnRuIGRpbW9uZC1wcmltYXJ5LWJ0biBmbG9hdC1yaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZWVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGEgKm5nSWY9XCIhY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmZpbmlzaGVkUHJvZHVjdFwiIFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VlLW1vcmUtbGlua1wiIChjbGljayk9XCJzaG93SGlkZShpKVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBzaG93RGV0YWlsc1tpXSA9PSB0cnVlID8gXCJIaWRlXCIgOiBcIlNlZVwiIH19IG1vcmUgZGV0YWlsc1xyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dEZXRhaWxzW2ldXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncmlkXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICdxdWFudGl0eS1mb3JtLWRldGFpbHMnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgIWNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5maW5pc2hlZFByb2R1Y3RcclxuICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXByb2R1Y3QtcXVhbnRpdHktZm9ybVxyXG4gICAgICAgICAgICAgICAgICAgIFtwcm9kdWN0Q29kZV09XCJjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Byb2R1Y3REZXRhaWxzXT1cImNhcnREZXRhaWxzW2ldXCJcclxuICAgICAgICAgICAgICAgICAgICBbbGlzdFZpZXddPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthY2Nlc3Nvcmllc1ByaWNlXT1cImNhcnREZXRhaWxzW2ldPy5iYXNlUHJpY2U/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRDb2xvdXJdPVwic2VsZWN0ZWRDb2xvdXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpc0ZpbmlzaGVkUHJvZHVjdF09XCJjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmluaXNoZWRQcm9kdWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAodXBkYXRlQ2FydEVudGlyZXMpPVwicmVvbGFkQ2FydEVudGlyZXMoKVwiXHJcbiAgICAgICAgICAgICAgICAgID48L2FwcC1jdXN0b20tcHJvZHVjdC1xdWFudGl0eS1mb3JtPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC10aWxlLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtNiBib3JkZXItcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvdGFsLXF0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICA+VG90YWwgUXR5OiB7eyBjYXJ0RGV0YWlsc1tpXT8ucXVhbnRpdHlEb3VibGVcclxuICAgICAgICAgICAgICAgICAgICAgIH19e3sgY2FydERldGFpbHNbaV0/LmJhc2VQcmljZT8udW5pdFR5cGUgfX08L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmluaXNoZWRQcm9kdWN0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIG5vbkFjY2Vzc29yaWVzXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPnt7IGNhcnREZXRhaWxzW2ldPy5iYXNlUHJpY2U/LmZvcm1hdHRlZFZhbHVlIH19L3t7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5iYXNlUHJpY2U/LnVuaXRUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vbkFjY2Vzc29yaWVzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicXR5X2lucHV0IHJlZmVybmNlLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHJvZFF0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWlubGVuZ3RoPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwidXBkYXRlQ2FydCgkZXZlbnQsIGNhcnREZXRhaWxzW2ldLCBpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtNiBjb2wtNiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1yaWdodFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbC1hbW91bnQgdGV4dC1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoND57eyBjYXJ0RGV0YWlsc1tpXT8udG90YWxQcmljZT8uZm9ybWF0dGVkVmFsdWUgfX08L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPmV4Y2wgR1NUPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmxhc2hpbmdQcm9kdWN0ICYmXHJcbiAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdENvbmZpZ3VyZWRJbmZvcyAmJlxyXG4gICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3RDb25maWd1cmVkSW5mb3M/Lmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGFzaGluZy1ibG9ja1wiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdENvbmZpZ3VyZWRJbmZvc1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtdGlsZS10b3BcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJza3VJZFwiPlNLVToge3sgZGF0YT8ucHJvZHVjdD8uY29kZSB9fTwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiZmxhc2gtdGl0bGVcIj57eyBkYXRhPy5wcm9kdWN0Py5uYW1lIH19PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGE/LmdpcnRoXCI+R3JpdGg6ICt7eyBkYXRhPy5naXJ0aCB9fW1tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtdGlsZS1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLW1kLTYgY29sLTYgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBib3JkZXItcmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbC1xdHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBUb3RhbCBRdHk6IHt7IGRhdGE/LnF1YW50aXR5RG91YmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX17eyBkYXRhPy51bml0VHlwZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+QHt7IGRhdGE/LmJhc2VQcmljZT8uZm9ybWF0dGVkVmFsdWUgfX0ve3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE/LnVuaXRUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtNiBjb2wtNiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1yaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvdGFsLWFtb3VudCB0ZXh0LXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoND57eyBkYXRhPy50b3RhbFByaWNlPy5mb3JtYXR0ZWRWYWx1ZSB9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPmV4Y2wgR1NUPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPGRpdlxyXG4gIGNsYXNzPVwibW9kYWwgZmFkZVwiXHJcbiAgaWQ9XCJpbWFnZU1vZGFsXCJcclxuICByb2xlPVwiZGlhbG9nXCJcclxuICBhcmlhLWxhYmVsbGVkYnk9XCJpbWFnZU1vZGFsXCJcclxuICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICNpbWFnZU1vZGFsXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCIgcm9sZT1cImRvY3VtZW50XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgPGlcclxuICAgICAgICAgIGNsYXNzPVwiaWNvbi1jbG9zZSBpbnZpdGUtcG9wLWNsb3NlXCJcclxuICAgICAgICAgICNjbG9zZUludml0ZU1vZGFsXHJcbiAgICAgICAgICBkYXRhLWRpc21pc3M9XCJtb2RhbFwiXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgID48L2k+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBtLTRcIj5cclxuICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VNb2RhbFNyY1wiIGFsdD1cImFsZXJ0XCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmdiLXRvYXN0ICpuZ0lmPVwic2hvd1RvYXN0XCIgW2F1dG9oaWRlXT1cInRydWVcIiBbZGVsYXldPVwiNDAwMFwiPlxyXG4gIDxpbWcgc3JjPVwiLi4vLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy9JbnZpdGVkLnN2Z1wiIC8+XHJcbiAgQ2FydCB1cGRhdGVkIHN1Y2Nlc3NmdWxseSFcclxuICA8aVxyXG4gICAgY2xhc3M9XCJpY29uLWNsb3NlIHRvYXN0LWNsb3NlXCJcclxuICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiXHJcbiAgICAoY2xpY2spPVwiY2xvc2VUb2FzdCgpXCJcclxuICA+PC9pPlxyXG48L25nYi10b2FzdD5cclxuIl19