tango-app-ui-store-builder 1.0.32 → 1.0.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/manage-plano/popups/create-planogram/create-planogram.component.mjs +21 -55
- package/esm2022/lib/components/manage-plano/rollout-table/rollout-table.component.mjs +4 -2
- package/esm2022/lib/components/manage-plano/verification-table/verification-table.component.mjs +15 -9
- package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +76 -223
- package/esm2022/lib/components/planogram/merch-compliance/merch-compliance.component.mjs +2 -1
- package/esm2022/lib/services/store-builder.service.mjs +1 -10
- package/esm2022/lib/tango-store-builder-routing.module.mjs +1 -6
- package/esm2022/lib/tango-store-builder.module.mjs +4 -1
- package/esm2022/lib/tango-store-plano.module.mjs +20 -18
- package/fesm2022/tango-app-ui-store-builder.mjs +591 -2244
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/manage-plano/popups/create-planogram/create-planogram.component.d.ts +5 -21
- package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +2 -2
- package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +4 -4
- package/lib/components/manage-store-plano/manage-store-plano.component.d.ts +2 -11
- package/lib/services/store-builder.service.d.ts +0 -3
- package/package.json +1 -1
- package/esm2022/lib/components/collection-update-ai/collection-update-ai.component.mjs +0 -1486
- package/lib/components/collection-update-ai/collection-update-ai.component.d.ts +0 -82
package/esm2022/lib/components/manage-plano/popups/create-planogram/create-planogram.component.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component, Input } from "@angular/core";
|
|
2
|
-
import { FormsModule, ReactiveFormsModule
|
|
2
|
+
import { FormsModule, ReactiveFormsModule } from "@angular/forms";
|
|
3
3
|
import { ReactiveSelectComponent } from "../../../reactive-select/reactive-select.component";
|
|
4
4
|
import { firstValueFrom } from "rxjs";
|
|
5
5
|
import { FileUploadComponent } from "../../../file-upload/file-upload.component";
|
|
@@ -9,13 +9,10 @@ import * as i1 from "@ng-bootstrap/ng-bootstrap";
|
|
|
9
9
|
import * as i2 from "../../../../services/store-builder.service";
|
|
10
10
|
import * as i3 from "tango-app-ui-shared";
|
|
11
11
|
import * as i4 from "@angular/forms";
|
|
12
|
-
import * as i5 from "@angular/router";
|
|
13
12
|
export class CreatePlanogramComponent {
|
|
14
13
|
activeModal;
|
|
15
14
|
storeBuilderService;
|
|
16
15
|
toastService;
|
|
17
|
-
fb;
|
|
18
|
-
router;
|
|
19
16
|
clientId;
|
|
20
17
|
selectedStore;
|
|
21
18
|
selectedFloor;
|
|
@@ -28,31 +25,16 @@ export class CreatePlanogramComponent {
|
|
|
28
25
|
];
|
|
29
26
|
selectedStoreFloors = [];
|
|
30
27
|
isLayoutExist = false;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
createStoreForm;
|
|
34
|
-
storeTypeList = [
|
|
35
|
-
{ label: "High Street", value: "HighStreet" },
|
|
36
|
-
{ label: "Mall", value: "mall" },
|
|
37
|
-
{ label: "Kiosk", value: "kiosk" },
|
|
38
|
-
];
|
|
39
|
-
businessTypeList = [
|
|
40
|
-
{ label: "COCO", value: "coco" },
|
|
41
|
-
{ label: "COFO", value: "cofo" },
|
|
42
|
-
{ label: "FOFO", value: "fofo" },
|
|
43
|
-
{ label: "FOCO", value: "foco" },
|
|
44
|
-
];
|
|
45
|
-
constructor(activeModal, storeBuilderService, toastService, fb, router) {
|
|
28
|
+
isProcessing = false;
|
|
29
|
+
constructor(activeModal, storeBuilderService, toastService) {
|
|
46
30
|
this.activeModal = activeModal;
|
|
47
31
|
this.storeBuilderService = storeBuilderService;
|
|
48
32
|
this.toastService = toastService;
|
|
49
|
-
this.fb = fb;
|
|
50
|
-
this.router = router;
|
|
51
33
|
}
|
|
52
34
|
async ngOnInit() {
|
|
53
35
|
await this.getStoreList();
|
|
54
36
|
}
|
|
55
|
-
get
|
|
37
|
+
get isValidToCreate() {
|
|
56
38
|
return this.selectedStore && this.selectedFloor && this.selectedFile;
|
|
57
39
|
}
|
|
58
40
|
async getStoreList() {
|
|
@@ -86,53 +68,37 @@ export class CreatePlanogramComponent {
|
|
|
86
68
|
}
|
|
87
69
|
onFileChange(file) {
|
|
88
70
|
this.selectedFile = file;
|
|
71
|
+
if (file) {
|
|
72
|
+
console.log("DXF selected:", file);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
console.log("DXF cleared");
|
|
76
|
+
}
|
|
89
77
|
}
|
|
90
|
-
async
|
|
91
|
-
if (!this.
|
|
78
|
+
async onCreate() {
|
|
79
|
+
if (!this.isValidToCreate)
|
|
92
80
|
return;
|
|
93
81
|
try {
|
|
94
|
-
this.
|
|
82
|
+
this.isProcessing = true;
|
|
95
83
|
const planoRes = await firstValueFrom(this.storeBuilderService.createPlanoFromCAD(this.selectedFile, this.selectedStore, this.selectedFloor));
|
|
96
84
|
if (!planoRes?.data)
|
|
97
85
|
return;
|
|
98
86
|
this.activeModal.close(planoRes?.data);
|
|
99
87
|
}
|
|
100
88
|
catch (error) {
|
|
101
|
-
this.toastService.getErrorToast(error
|
|
89
|
+
this.toastService.getErrorToast(error.error.error);
|
|
102
90
|
console.log("@@ ~ onCreate [ERR]:", error);
|
|
103
91
|
}
|
|
104
92
|
finally {
|
|
105
|
-
this.
|
|
93
|
+
this.isProcessing = false;
|
|
106
94
|
}
|
|
107
95
|
}
|
|
108
|
-
|
|
109
|
-
// console.log("@@ ~ this.createStoreForm:", this.createStoreForm.value);
|
|
110
|
-
}
|
|
111
|
-
addNewStore() {
|
|
112
|
-
// this.isCreateStoreMode = true;
|
|
113
|
-
// this.createStoreForm = this.fb.group({
|
|
114
|
-
// storeName: ["", Validators.required],
|
|
115
|
-
// businessType: ["", Validators.required],
|
|
116
|
-
// storeType: ["", Validators.required],
|
|
117
|
-
// address: ["", Validators.required],
|
|
118
|
-
// country: ["", Validators.required],
|
|
119
|
-
// state: ["", Validators.required],
|
|
120
|
-
// city: ["", Validators.required],
|
|
121
|
-
// zipCode: ["", Validators.required],
|
|
122
|
-
// });
|
|
123
|
-
const urlTree = this.router.createUrlTree(["/manage/stores/add-single-store"]);
|
|
124
|
-
const url = this.router.serializeUrl(urlTree);
|
|
125
|
-
window.open(url, "_blank");
|
|
126
|
-
}
|
|
96
|
+
onClickCreateStore() { }
|
|
127
97
|
onCancel() {
|
|
128
98
|
this.activeModal.dismiss();
|
|
129
99
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
this.isCreateStoreMode = false;
|
|
133
|
-
}
|
|
134
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreatePlanogramComponent, deps: [{ token: i1.NgbActiveModal }, { token: i2.StoreBuilderService }, { token: i3.ToastService }, { token: i4.FormBuilder }, { token: i5.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
135
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CreatePlanogramComponent, isStandalone: true, selector: "app-create-planogram", inputs: { clientId: "clientId" }, ngImport: i0, template: "<div class=\"modal-wrapper\">\r\n <h3 class=\"mb-4\">Create store layout/plan from CAD</h3>\r\n @if(isCreateStoreMode){\r\n <form [formGroup]=\"createStoreForm\">\r\n <div class=\"row mb-4\">\r\n <div class=\"col-6 mb-4\">\r\n <label for=\"storeName\" class=\"form-label mb-1\">Store name</label>\r\n <input type=\"text\" class=\"form-control\" id=\"storeName\" formControlName=\"storeName\"\r\n placeholder=\"Type store name\" />\r\n <ng-container *ngIf=\"createStoreForm.get('storeName')?.touched && createStoreForm.get('storeName')?.invalid\">\r\n <small class=\"text-danger\" *ngIf=\"createStoreForm.get('storeName')?.hasError('required')\">\r\n Store name is required.\r\n </small>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-6 mb-4\"></div>\r\n <div class=\"col-6 mb-4\">\r\n <lib-reactive-select [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"businessTypeList\"\r\n [label]=\"'Select business type'\" formControlName=\"businessType\">\r\n </lib-reactive-select>\r\n </div>\r\n <div class=\"col-6 mb-4\">\r\n <lib-reactive-select [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"storeTypeList\"\r\n [label]=\"'Select store type'\" formControlName=\"storeType\">\r\n </lib-reactive-select>\r\n </div>\r\n <div class=\"col-12 mb-4\">\r\n <label for=\"address\" class=\"form-label mb-1\">Address</label>\r\n <input type=\"text\" class=\"form-control\" id=\"address\" formControlName=\"address\"\r\n placeholder=\"Search and enter address\" />\r\n <ng-container *ngIf=\"createStoreForm.get('address')?.touched && createStoreForm.get('address')?.invalid\">\r\n <small class=\"text-danger\" *ngIf=\"createStoreForm.get('address')?.hasError('required')\">\r\n Address is required.\r\n </small>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-6 mb-4\">\r\n <label for=\"country\" class=\"form-label mb-1\">Country</label>\r\n <input type=\"text\" class=\"form-control\" id=\"country\" formControlName=\"country\" placeholder=\"Enter Country\" />\r\n <ng-container *ngIf=\"createStoreForm.get('country')?.touched && createStoreForm.get('country')?.invalid\">\r\n <small class=\"text-danger\" *ngIf=\"createStoreForm.get('country')?.hasError('required')\">\r\n Country is required.\r\n </small>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-6 mb-4\">\r\n <label for=\"state\" class=\"form-label mb-1\">State</label>\r\n <input type=\"text\" class=\"form-control\" id=\"state\" formControlName=\"state\" placeholder=\"Enter State\" />\r\n <ng-container *ngIf=\"createStoreForm.get('state')?.touched && createStoreForm.get('state')?.invalid\">\r\n <small class=\"text-danger\" *ngIf=\"createStoreForm.get('state')?.hasError('required')\">\r\n State is required.\r\n </small>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-6 mb-4\">\r\n <label for=\"city\" class=\"form-label mb-1\">City / Town</label>\r\n <input type=\"text\" class=\"form-control\" id=\"city\" formControlName=\"city\" placeholder=\"Enter City / Town\" />\r\n <ng-container *ngIf=\"createStoreForm.get('city')?.touched && createStoreForm.get('city')?.invalid\">\r\n <small class=\"text-danger\" *ngIf=\"createStoreForm.get('city')?.hasError('required')\">\r\n City / Town is required.\r\n </small>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-6 mb-4\">\r\n <label for=\"zipCode\" class=\"form-label mb-1\">Pin / Zip Code</label>\r\n <input type=\"text\" class=\"form-control\" id=\"zipCode\" formControlName=\"zipCode\"\r\n placeholder=\"Enter Pin / Zip Code\" />\r\n <ng-container *ngIf=\"createStoreForm.get('zipCode')?.touched && createStoreForm.get('zipCode')?.invalid\">\r\n <small class=\"text-danger\" *ngIf=\"createStoreForm.get('zipCode')?.hasError('required')\">\r\n Pin / Zip Code is required.\r\n </small>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </form>\r\n }\r\n @else {\r\n <div class=\"row mb-4\">\r\n <div class=\"col-6\">\r\n <lib-reactive-select [search]=\"true\" [(ngModel)]=\"selectedStore\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"storeList\" [label]=\"'Select store'\" [action]=\"true\" (actionClick)=\"addNewStore()\"\r\n [actionLabel]=\"'Create new store'\" (ngModelChange)=\"onStoreChange()\" [disabled]=\"isCADProcessing\">\r\n </lib-reactive-select>\r\n </div>\r\n <div class=\"col-6\">\r\n <lib-reactive-select [(ngModel)]=\"selectedFloor\" [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"floorList\"\r\n [label]=\"'Select floor'\" (ngModelChange)=\"onFloorChange()\" [disabled]=\"isCADProcessing\">\r\n </lib-reactive-select>\r\n </div>\r\n </div>\r\n <div class=\"layout-exist-wrapper\" [class.show]=\"isLayoutExist\">\r\n <div class=\"layout-exist-warning mb-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M9.99965 6.66667V10M9.99965 13.3333H10.008M8.57465 2.38334L1.51632 14.1667C1.37079 14.4187 1.29379 14.7044 1.29298 14.9954C1.29216 15.2865 1.36756 15.5726 1.51167 15.8254C1.65579 16.0783 1.86359 16.289 2.11441 16.4366C2.36523 16.5841 2.65032 16.6635 2.94132 16.6667H17.058C17.349 16.6635 17.6341 16.5841 17.8849 16.4366C18.1357 16.289 18.3435 16.0783 18.4876 15.8254C18.6317 15.5726 18.7071 15.2865 18.7063 14.9954C18.7055 14.7044 18.6285 14.4187 18.483 14.1667L11.4247 2.38334C11.2761 2.13843 11.0669 1.93594 10.8173 1.79541C10.5677 1.65488 10.2861 1.58105 9.99965 1.58105C9.71321 1.58105 9.43159 1.65488 9.18199 1.79541C8.93238 1.93594 8.72321 2.13843 8.57465 2.38334Z\"\r\n stroke=\"#F04438\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n This store already has a Floor {{selectedFloor}} planogram. Overwrite it? This can\u2019t be undone.\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-4\">\r\n <file-upload [disabled]=\"isCADProcessing\" (fileChange)=\"onFileChange($event)\"></file-upload>\r\n\r\n </div>\r\n }\r\n <div class=\"modal-actions\">\r\n @if(isCreateStoreMode){\r\n <button type=\"button\" class=\"btn btn-link me-auto\" (click)=\"onBack()\">Back</button>\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary \" [disabled]=\"createStoreForm.invalid\" (click)=\"onCreateStore()\">\r\n Create\r\n </button>\r\n }@else {\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary \" [disabled]=\"!isValidToCreatePlano || isCADProcessing\"\r\n (click)=\"onCreateLayoutPlano()\">\r\n <span *ngIf=\"!isCADProcessing\">\r\n {{isLayoutExist ? 'Overwrite' : 'Create'}}\r\n </span>\r\n\r\n <svg *ngIf=\"isCADProcessing\" class=\"spinner\" viewBox=\"0 0 50 50\">\r\n <circle class=\"path\" cx=\"25\" cy=\"25\" r=\"20\" fill=\"none\" stroke-width=\"4\"></circle>\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n</div>", styles: [".modal-wrapper{padding:24px}.modal-actions{display:flex;justify-content:end;gap:12px}::ng-deep .counter-container{padding:10px!important;border:.49px solid #d0d5dd!important;background-color:#fff!important;justify-content:space-between!important;margin-bottom:26px!important}::ng-deep .modal-content{border-radius:12px!important}.layout-exist-warning{display:flex;align-items:center;gap:8px;padding:16px;background:#fef3f2;border:1px solid #fda29b;border-radius:8px;color:#d92d20;font-family:Inter;font-weight:600;font-size:14px;line-height:20px}.layout-exist-wrapper{overflow:hidden;max-height:0;opacity:0;transform:translateY(-8px);transition:max-height .25s ease,opacity .2s ease,transform .2s ease}.layout-exist-wrapper.show{max-height:120px;opacity:1;transform:translateY(0)}::ng-deep .create-planogram-modal .modal-dialog{max-width:700px;width:100%}.btn .spinner{height:22px;width:46px;animation:spin .9s linear infinite}.btn .spinner .path{stroke-width:6px;stroke:#fff;stroke-linecap:round;stroke-dasharray:80;stroke-dashoffset:60}@keyframes spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "subTextField", "searchField", "label", "data", "action", "search", "prefix", "actionLabel"], outputs: ["actionClick"] }, { kind: "component", type: FileUploadComponent, selector: "file-upload", inputs: ["disabled"], outputs: ["fileChange"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
100
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreatePlanogramComponent, deps: [{ token: i1.NgbActiveModal }, { token: i2.StoreBuilderService }, { token: i3.ToastService }], target: i0.ɵɵFactoryTarget.Component });
|
|
101
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CreatePlanogramComponent, isStandalone: true, selector: "app-create-planogram", inputs: { clientId: "clientId" }, ngImport: i0, template: "<div class=\"modal-wrapper\">\r\n <h3 class=\"mb-4\">Create store layout/plan from CAD</h3>\r\n <div class=\"row mb-4\">\r\n <div class=\"col-6\">\r\n <lib-reactive-select [search]=\"true\" [(ngModel)]=\"selectedStore\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"storeList\" [label]=\"'Select store'\" [action]=\"true\" (actionClick)=\"onClickCreateStore()\"\r\n [actionLabel]=\"'Create new store'\" (ngModelChange)=\"onStoreChange()\" [disabled]=\"isProcessing\">\r\n </lib-reactive-select>\r\n </div>\r\n <div class=\"col-6\">\r\n <lib-reactive-select [(ngModel)]=\"selectedFloor\" [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"floorList\"\r\n [label]=\"'Select floor'\" (ngModelChange)=\"onFloorChange()\" [disabled]=\"isProcessing\">\r\n </lib-reactive-select>\r\n </div>\r\n </div>\r\n <div class=\"layout-exist-wrapper\" [class.show]=\"isLayoutExist\">\r\n <div class=\"layout-exist-warning mb-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M9.99965 6.66667V10M9.99965 13.3333H10.008M8.57465 2.38334L1.51632 14.1667C1.37079 14.4187 1.29379 14.7044 1.29298 14.9954C1.29216 15.2865 1.36756 15.5726 1.51167 15.8254C1.65579 16.0783 1.86359 16.289 2.11441 16.4366C2.36523 16.5841 2.65032 16.6635 2.94132 16.6667H17.058C17.349 16.6635 17.6341 16.5841 17.8849 16.4366C18.1357 16.289 18.3435 16.0783 18.4876 15.8254C18.6317 15.5726 18.7071 15.2865 18.7063 14.9954C18.7055 14.7044 18.6285 14.4187 18.483 14.1667L11.4247 2.38334C11.2761 2.13843 11.0669 1.93594 10.8173 1.79541C10.5677 1.65488 10.2861 1.58105 9.99965 1.58105C9.71321 1.58105 9.43159 1.65488 9.18199 1.79541C8.93238 1.93594 8.72321 2.13843 8.57465 2.38334Z\"\r\n stroke=\"#F04438\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n This store already has a Floor {{selectedFloor}} planogram. Overwrite it? This can\u2019t be undone.\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-4\">\r\n <file-upload [disabled]=\"isProcessing\" (fileChange)=\"onFileChange($event)\"></file-upload>\r\n\r\n </div>\r\n\r\n <div class=\"modal-actions\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary \" [disabled]=\"!isValidToCreate || isProcessing\" (click)=\"onCreate()\">\r\n <span *ngIf=\"!isProcessing\">\r\n {{isLayoutExist ? 'Overwrite' : 'Create'}}\r\n </span>\r\n\r\n <svg *ngIf=\"isProcessing\" class=\"spinner\" viewBox=\"0 0 50 50\">\r\n <circle class=\"path\" cx=\"25\" cy=\"25\" r=\"20\" fill=\"none\" stroke-width=\"4\"></circle>\r\n </svg>\r\n </button>\r\n </div>\r\n</div>", styles: [".modal-wrapper{padding:24px}.modal-actions{display:flex;justify-content:end;gap:12px}::ng-deep .counter-container{padding:10px!important;border:.49px solid #d0d5dd!important;background-color:#fff!important;justify-content:space-between!important;margin-bottom:26px!important}::ng-deep .modal-content{border-radius:12px!important}.layout-exist-warning{display:flex;align-items:center;gap:8px;padding:16px;background:#fef3f2;border:1px solid #fda29b;border-radius:8px;color:#d92d20;font-family:Inter;font-weight:600;font-size:14px;line-height:20px}.layout-exist-wrapper{overflow:hidden;max-height:0;opacity:0;transform:translateY(-8px);transition:max-height .25s ease,opacity .2s ease,transform .2s ease}.layout-exist-wrapper.show{max-height:120px;opacity:1;transform:translateY(0)}::ng-deep .create-planogram-modal .modal-dialog{max-width:700px;width:100%}.btn .spinner{height:22px;width:46px;animation:spin .9s linear infinite}.btn .spinner .path{stroke-width:6px;stroke:#fff;stroke-linecap:round;stroke-dasharray:80;stroke-dashoffset:60}@keyframes spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "subTextField", "searchField", "label", "data", "action", "search", "prefix", "actionLabel"], outputs: ["actionClick"] }, { kind: "component", type: FileUploadComponent, selector: "file-upload", inputs: ["disabled"], outputs: ["fileChange"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
136
102
|
}
|
|
137
103
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreatePlanogramComponent, decorators: [{
|
|
138
104
|
type: Component,
|
|
@@ -142,8 +108,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
142
108
|
ReactiveSelectComponent,
|
|
143
109
|
FileUploadComponent,
|
|
144
110
|
NgIf,
|
|
145
|
-
], template: "<div class=\"modal-wrapper\">\r\n <h3 class=\"mb-4\">Create store layout/plan from CAD</h3>\r\n
|
|
146
|
-
}], ctorParameters: () => [{ type: i1.NgbActiveModal }, { type: i2.StoreBuilderService }, { type: i3.ToastService }
|
|
111
|
+
], template: "<div class=\"modal-wrapper\">\r\n <h3 class=\"mb-4\">Create store layout/plan from CAD</h3>\r\n <div class=\"row mb-4\">\r\n <div class=\"col-6\">\r\n <lib-reactive-select [search]=\"true\" [(ngModel)]=\"selectedStore\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"storeList\" [label]=\"'Select store'\" [action]=\"true\" (actionClick)=\"onClickCreateStore()\"\r\n [actionLabel]=\"'Create new store'\" (ngModelChange)=\"onStoreChange()\" [disabled]=\"isProcessing\">\r\n </lib-reactive-select>\r\n </div>\r\n <div class=\"col-6\">\r\n <lib-reactive-select [(ngModel)]=\"selectedFloor\" [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"floorList\"\r\n [label]=\"'Select floor'\" (ngModelChange)=\"onFloorChange()\" [disabled]=\"isProcessing\">\r\n </lib-reactive-select>\r\n </div>\r\n </div>\r\n <div class=\"layout-exist-wrapper\" [class.show]=\"isLayoutExist\">\r\n <div class=\"layout-exist-warning mb-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M9.99965 6.66667V10M9.99965 13.3333H10.008M8.57465 2.38334L1.51632 14.1667C1.37079 14.4187 1.29379 14.7044 1.29298 14.9954C1.29216 15.2865 1.36756 15.5726 1.51167 15.8254C1.65579 16.0783 1.86359 16.289 2.11441 16.4366C2.36523 16.5841 2.65032 16.6635 2.94132 16.6667H17.058C17.349 16.6635 17.6341 16.5841 17.8849 16.4366C18.1357 16.289 18.3435 16.0783 18.4876 15.8254C18.6317 15.5726 18.7071 15.2865 18.7063 14.9954C18.7055 14.7044 18.6285 14.4187 18.483 14.1667L11.4247 2.38334C11.2761 2.13843 11.0669 1.93594 10.8173 1.79541C10.5677 1.65488 10.2861 1.58105 9.99965 1.58105C9.71321 1.58105 9.43159 1.65488 9.18199 1.79541C8.93238 1.93594 8.72321 2.13843 8.57465 2.38334Z\"\r\n stroke=\"#F04438\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n This store already has a Floor {{selectedFloor}} planogram. Overwrite it? This can\u2019t be undone.\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-4\">\r\n <file-upload [disabled]=\"isProcessing\" (fileChange)=\"onFileChange($event)\"></file-upload>\r\n\r\n </div>\r\n\r\n <div class=\"modal-actions\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary \" [disabled]=\"!isValidToCreate || isProcessing\" (click)=\"onCreate()\">\r\n <span *ngIf=\"!isProcessing\">\r\n {{isLayoutExist ? 'Overwrite' : 'Create'}}\r\n </span>\r\n\r\n <svg *ngIf=\"isProcessing\" class=\"spinner\" viewBox=\"0 0 50 50\">\r\n <circle class=\"path\" cx=\"25\" cy=\"25\" r=\"20\" fill=\"none\" stroke-width=\"4\"></circle>\r\n </svg>\r\n </button>\r\n </div>\r\n</div>", styles: [".modal-wrapper{padding:24px}.modal-actions{display:flex;justify-content:end;gap:12px}::ng-deep .counter-container{padding:10px!important;border:.49px solid #d0d5dd!important;background-color:#fff!important;justify-content:space-between!important;margin-bottom:26px!important}::ng-deep .modal-content{border-radius:12px!important}.layout-exist-warning{display:flex;align-items:center;gap:8px;padding:16px;background:#fef3f2;border:1px solid #fda29b;border-radius:8px;color:#d92d20;font-family:Inter;font-weight:600;font-size:14px;line-height:20px}.layout-exist-wrapper{overflow:hidden;max-height:0;opacity:0;transform:translateY(-8px);transition:max-height .25s ease,opacity .2s ease,transform .2s ease}.layout-exist-wrapper.show{max-height:120px;opacity:1;transform:translateY(0)}::ng-deep .create-planogram-modal .modal-dialog{max-width:700px;width:100%}.btn .spinner{height:22px;width:46px;animation:spin .9s linear infinite}.btn .spinner .path{stroke-width:6px;stroke:#fff;stroke-linecap:round;stroke-dasharray:80;stroke-dashoffset:60}@keyframes spin{to{transform:rotate(360deg)}}\n"] }]
|
|
112
|
+
}], ctorParameters: () => [{ type: i1.NgbActiveModal }, { type: i2.StoreBuilderService }, { type: i3.ToastService }], propDecorators: { clientId: [{
|
|
147
113
|
type: Input
|
|
148
114
|
}] } });
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBsYW5vZ3JhbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2UtcGxhbm8vcG9wdXBzL2NyZWF0ZS1wbGFub2dyYW0vY3JlYXRlLXBsYW5vZ3JhbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2UtcGxhbm8vcG9wdXBzL2NyZWF0ZS1wbGFub2dyYW0vY3JlYXRlLXBsYW5vZ3JhbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBRUwsV0FBVyxFQUNYLG1CQUFtQixHQUVwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBRTdGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDakYsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7O0FBaUJ2QyxNQUFNLE9BQU8sd0JBQXdCO0lBK0N6QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBbERELFFBQVEsQ0FBUztJQUMxQixhQUFhLENBQVM7SUFDdEIsYUFBYSxDQUFTO0lBQ3RCLFlBQVksR0FBZ0IsSUFBSSxDQUFDO0lBRWpDLFNBQVMsR0FHSCxFQUFFLENBQUM7SUFFVCxTQUFTLEdBR0g7UUFDSixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtRQUM5QixFQUFF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Q3pDLDBDQUEwQztRQUMxQyw2Q0FBNkM7UUFDN0MsMENBQTBDO1FBQzFDLHdDQUF3QztRQUN4Qyx3Q0FBd0M7UUFDeEMsc0NBQXNDO1FBQ3RDLHFDQUFxQztRQUNyQyx3Q0FBd0M7UUFDeEMsTUFBTTtRQUVOLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDO1FBRS9FLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDakMsQ0FBQzt3R0E5SlUsd0JBQXdCOzRGQUF4Qix3QkFBd0Isa0hDN0JyQyxpalBBZ0lNLHNuQ0QxR0YsV0FBVyxtM0JBQ1gsbUJBQW1CLGdWQUNuQix1QkFBdUIseU5BQ3ZCLG1CQUFtQix1R0FDbkIsSUFBSTs7NEZBR0ssd0JBQXdCO2tCQWJwQyxTQUFTOytCQUNFLHNCQUFzQixjQUdwQixJQUFJLFdBQ1A7d0JBQ1AsV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLHVCQUF1Qjt3QkFDdkIsbUJBQW1CO3dCQUNuQixJQUFJO3FCQUNMOytMQUdRLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5pbXBvcnQge1xyXG4gIEZvcm1CdWlsZGVyLFxyXG4gIEZvcm1zTW9kdWxlLFxyXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgUmVhY3RpdmVTZWxlY3RDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vcmVhY3RpdmUtc2VsZWN0L3JlYWN0aXZlLXNlbGVjdC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBGaWxlVXBsb2FkQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uLy4uL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBOZ0lmIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLXNoYXJlZFwiO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtY3JlYXRlLXBsYW5vZ3JhbVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vY3JlYXRlLXBsYW5vZ3JhbS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vY3JlYXRlLXBsYW5vZ3JhbS5jb21wb25lbnQuc2Nzc1wiLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVTZWxlY3RDb21wb25lbnQsXHJcbiAgICBGaWxlVXBsb2FkQ29tcG9uZW50LFxyXG4gICAgTmdJZixcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlUGxhbm9ncmFtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBjbGllbnRJZDogc3RyaW5nO1xyXG4gIHNlbGVjdGVkU3RvcmU6IHN0cmluZztcclxuICBzZWxlY3RlZEZsb29yOiBudW1iZXI7XHJcbiAgc2VsZWN0ZWRGaWxlOiBGaWxlIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHN0b3JlTGlzdDoge1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuICAgIHZhbHVlOiBzdHJpbmc7XHJcbiAgfVtdID0gW107XHJcblxyXG4gIGZsb29yTGlzdDoge1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuICAgIHZhbHVlOiBudW1iZXI7XHJcbiAgfVtdID0gW1xyXG4gICAgeyBsYWJlbDogXCJGbG9vciAxXCIsIHZhbHVlOiAxIH0sXHJcbiAgICB7IGxhYmVsOiBcIkZsb29yIDJcIiwgdmFsdWU6IDIgfSxcclxuICAgIHsgbGFiZWw6IFwiRmxvb3IgM1wiLCB2YWx1ZTogMyB9LFxyXG4gIF07XHJcblxyXG4gIHNlbGVjdGVkU3RvcmVGbG9vcnM6IGFueSA9IFtdO1xyXG5cclxuICBpc0xheW91dEV4aXN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNDQURQcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNDcmVhdGVTdG9yZU1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY3JlYXRlU3RvcmVGb3JtOiBhbnk7XHJcbiAgc3RvcmVUeXBlTGlzdDoge1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuICAgIHZhbHVlOiBzdHJpbmc7XHJcbiAgfVtdID0gW1xyXG4gICAgeyBsYWJlbDogXCJIaWdoIFN0cmVldFwiLCB2YWx1ZTogXCJIaWdoU3RyZWV0XCIgfSxcclxuICAgIHsgbGFiZWw6IFwiTWFsbFwiLCB2YWx1ZTogXCJtYWxsXCIgfSxcclxuICAgIHsgbGFiZWw6IFwiS2lvc2tcIiwgdmFsdWU6IFwia2lvc2tcIiB9LFxyXG4gIF07XHJcblxyXG4gIGJ1c2luZXNzVHlwZUxpc3Q6IHtcclxuICAgIGxhYmVsOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogc3RyaW5nO1xyXG4gIH1bXSA9IFtcclxuICAgIHsgbGFiZWw6IFwiQ09DT1wiLCB2YWx1ZTogXCJjb2NvXCIgfSxcclxuICAgIHsgbGFiZWw6IFwiQ09GT1wiLCB2YWx1ZTogXCJjb2ZvXCIgfSxcclxuICAgIHsgbGFiZWw6IFwiRk9GT1wiLCB2YWx1ZTogXCJmb2ZvXCIgfSxcclxuICAgIHsgbGFiZWw6IFwiRk9DT1wiLCB2YWx1ZTogXCJmb2NvXCIgfSxcclxuICBdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLFxyXG4gICAgcHJpdmF0ZSBzdG9yZUJ1aWxkZXJTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6Um91dGVyLFxyXG4gICkge31cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLmdldFN0b3JlTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzVmFsaWRUb0NyZWF0ZVBsYW5vKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRTdG9yZSAmJiB0aGlzLnNlbGVjdGVkRmxvb3IgJiYgdGhpcy5zZWxlY3RlZEZpbGU7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRTdG9yZUxpc3QoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBzdG9yZXM6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5nZXRBbGxTdG9yZXModGhpcy5jbGllbnRJZClcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zdG9yZUxpc3QgPSBzdG9yZXM/LmRhdGE/Lm1hcCgoczogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHsgbGFiZWw6IHMuc3RvcmVOYW1lLCB2YWx1ZTogcy5zdG9yZUlkIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IGdldFN0b3JlTGlzdCBbRVJSXTpcIiwgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25TdG9yZUNoYW5nZSgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGZsb29yczogYW55ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldFN0b3JlRmxvb3JzTGlzdCh0aGlzLnNlbGVjdGVkU3RvcmUpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZUZsb29ycyA9IGZsb29ycz8uZGF0YSA/PyBbXTtcclxuICAgICAgdGhpcy5vbkZsb29yQ2hhbmdlKCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkBAIH4gZ2V0U3RvcmVMaXN0IFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZsb29yQ2hhbmdlKCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGbG9vcikge1xyXG4gICAgICB0aGlzLmlzTGF5b3V0RXhpc3QgPSB0aGlzLnNlbGVjdGVkU3RvcmVGbG9vcnMuc29tZShcclxuICAgICAgICAoZjogYW55KSA9PiBmLmZsb29yTnVtYmVyID09PSB0aGlzLnNlbGVjdGVkRmxvb3JcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNMYXlvdXRFeGlzdCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25GaWxlQ2hhbmdlKGZpbGU6IEZpbGUgfCBudWxsKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IGZpbGU7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkNyZWF0ZUxheW91dFBsYW5vKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRUb0NyZWF0ZVBsYW5vKSByZXR1cm47XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5pc0NBRFByb2Nlc3NpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgY29uc3QgcGxhbm9SZXM6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5jcmVhdGVQbGFub0Zyb21DQUQoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSEsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RvcmUsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxvb3JcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoIXBsYW5vUmVzPy5kYXRhKSByZXR1cm47XHJcblxyXG4gICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKHBsYW5vUmVzPy5kYXRhKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcclxuICAgICAgICBlcnJvcj8uZXJyb3I/LmVycm9yPy5lcnJNc2cgPz8gXCJGYWlsZWQgdG8gZXh0cmFjdCBwbGFubyBmcm9tIENBRCBmaWxlLlwiXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBvbkNyZWF0ZSBbRVJSXTpcIiwgZXJyb3IpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5pc0NBRFByb2Nlc3NpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9uQ3JlYXRlU3RvcmUoKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcIkBAIH4gdGhpcy5jcmVhdGVTdG9yZUZvcm06XCIsIHRoaXMuY3JlYXRlU3RvcmVGb3JtLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIGFkZE5ld1N0b3JlKCkge1xyXG4gICAgLy8gdGhpcy5pc0NyZWF0ZVN0b3JlTW9kZSA9IHRydWU7XHJcbiAgICAvLyB0aGlzLmNyZWF0ZVN0b3JlRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgLy8gICBzdG9yZU5hbWU6IFtcIlwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIC8vICAgYnVzaW5lc3NUeXBlOiBbXCJcIiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAvLyAgIHN0b3JlVHlwZTogW1wiXCIsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgLy8gICBhZGRyZXNzOiBbXCJcIiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAvLyAgIGNvdW50cnk6IFtcIlwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIC8vICAgc3RhdGU6IFtcIlwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIC8vICAgY2l0eTogW1wiXCIsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgLy8gICB6aXBDb2RlOiBbXCJcIiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAvLyB9KTtcclxuXHJcbiAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbXCIvbWFuYWdlL3N0b3Jlcy9hZGQtc2luZ2xlLXN0b3JlXCJdKTtcclxuXHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLnJvdXRlci5zZXJpYWxpemVVcmwodXJsVHJlZSk7XHJcbiAgICB3aW5kb3cub3Blbih1cmwsIFwiX2JsYW5rXCIpO1xyXG4gIH1cclxuXHJcbiAgb25DYW5jZWwoKSB7XHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoKTtcclxuICB9XHJcblxyXG4gIG9uQmFjaygpe1xyXG4gICAgdGhpcy5jcmVhdGVTdG9yZUZvcm0gPSBudWxsO1xyXG4gICAgdGhpcy5pc0NyZWF0ZVN0b3JlTW9kZSA9IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibW9kYWwtd3JhcHBlclwiPlxyXG4gIDxoMyBjbGFzcz1cIm1iLTRcIj5DcmVhdGUgc3RvcmUgbGF5b3V0L3BsYW4gZnJvbSBDQUQ8L2gzPlxyXG4gIEBpZihpc0NyZWF0ZVN0b3JlTW9kZSl7XHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImNyZWF0ZVN0b3JlRm9ybVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgbWItNFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGZvcj1cInN0b3JlTmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+U3RvcmUgbmFtZTwvbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwic3RvcmVOYW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwic3RvcmVOYW1lXCJcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIHN0b3JlIG5hbWVcIiAvPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNyZWF0ZVN0b3JlRm9ybS5nZXQoJ3N0b3JlTmFtZScpPy50b3VjaGVkICYmIGNyZWF0ZVN0b3JlRm9ybS5nZXQoJ3N0b3JlTmFtZScpPy5pbnZhbGlkXCI+XHJcbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJjcmVhdGVTdG9yZUZvcm0uZ2V0KCdzdG9yZU5hbWUnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICBTdG9yZSBuYW1lIGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IG1iLTRcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgbWItNFwiPlxyXG4gICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgW2lkRmllbGRdPVwiJ3ZhbHVlJ1wiIFtuYW1lRmllbGRdPVwiJ2xhYmVsJ1wiIFtkYXRhXT1cImJ1c2luZXNzVHlwZUxpc3RcIlxyXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ1NlbGVjdCBidXNpbmVzcyB0eXBlJ1wiIGZvcm1Db250cm9sTmFtZT1cImJ1c2luZXNzVHlwZVwiPlxyXG4gICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBtYi00XCI+XHJcbiAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBbaWRGaWVsZF09XCIndmFsdWUnXCIgW25hbWVGaWVsZF09XCInbGFiZWwnXCIgW2RhdGFdPVwic3RvcmVUeXBlTGlzdFwiXHJcbiAgICAgICAgICAgIFtsYWJlbF09XCInU2VsZWN0IHN0b3JlIHR5cGUnXCIgZm9ybUNvbnRyb2xOYW1lPVwic3RvcmVUeXBlXCI+XHJcbiAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi00XCI+XHJcbiAgICAgICAgICA8bGFiZWwgZm9yPVwiYWRkcmVzc1wiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+QWRkcmVzczwvbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiYWRkcmVzc1wiIGZvcm1Db250cm9sTmFtZT1cImFkZHJlc3NcIlxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBhbmQgZW50ZXIgYWRkcmVzc1wiIC8+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3JlYXRlU3RvcmVGb3JtLmdldCgnYWRkcmVzcycpPy50b3VjaGVkICYmIGNyZWF0ZVN0b3JlRm9ybS5nZXQoJ2FkZHJlc3MnKT8uaW52YWxpZFwiPlxyXG4gICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiY3JlYXRlU3RvcmVGb3JtLmdldCgnYWRkcmVzcycpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgIEFkZHJlc3MgaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgbWItNFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGZvcj1cImNvdW50cnlcIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPkNvdW50cnk8L2xhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImNvdW50cnlcIiBmb3JtQ29udHJvbE5hbWU9XCJjb3VudHJ5XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBDb3VudHJ5XCIgLz5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjcmVhdGVTdG9yZUZvcm0uZ2V0KCdjb3VudHJ5Jyk/LnRvdWNoZWQgJiYgY3JlYXRlU3RvcmVGb3JtLmdldCgnY291bnRyeScpPy5pbnZhbGlkXCI+XHJcbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJjcmVhdGVTdG9yZUZvcm0uZ2V0KCdjb3VudHJ5Jyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgQ291bnRyeSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBtYi00XCI+XHJcbiAgICAgICAgICA8bGFiZWwgZm9yPVwic3RhdGVcIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPlN0YXRlPC9sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJzdGF0ZVwiIGZvcm1Db250cm9sTmFtZT1cInN0YXRlXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBTdGF0ZVwiIC8+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3JlYXRlU3RvcmVGb3JtLmdldCgnc3RhdGUnKT8udG91Y2hlZCAmJiBjcmVhdGVTdG9yZUZvcm0uZ2V0KCdzdGF0ZScpPy5pbnZhbGlkXCI+XHJcbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJjcmVhdGVTdG9yZUZvcm0uZ2V0KCdzdGF0ZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgIFN0YXRlIGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IG1iLTRcIj5cclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJjaXR5XCIgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5DaXR5IC8gVG93bjwvbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiY2l0eVwiIGZvcm1Db250cm9sTmFtZT1cImNpdHlcIiBwbGFjZWhvbGRlcj1cIkVudGVyIENpdHkgLyBUb3duXCIgLz5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjcmVhdGVTdG9yZUZvcm0uZ2V0KCdjaXR5Jyk/LnRvdWNoZWQgJiYgY3JlYXRlU3RvcmVGb3JtLmdldCgnY2l0eScpPy5pbnZhbGlkXCI+XHJcbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJjcmVhdGVTdG9yZUZvcm0uZ2V0KCdjaXR5Jyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgQ2l0eSAvIFRvd24gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgbWItNFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGZvcj1cInppcENvZGVcIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPlBpbiAvIFppcCBDb2RlPC9sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJ6aXBDb2RlXCIgZm9ybUNvbnRyb2xOYW1lPVwiemlwQ29kZVwiXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgUGluIC8gWmlwIENvZGVcIiAvPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNyZWF0ZVN0b3JlRm9ybS5nZXQoJ3ppcENvZGUnKT8udG91Y2hlZCAmJiBjcmVhdGVTdG9yZUZvcm0uZ2V0KCd6aXBDb2RlJyk/LmludmFsaWRcIj5cclxuICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImNyZWF0ZVN0b3JlRm9ybS5nZXQoJ3ppcENvZGUnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICBQaW4gLyBaaXAgQ29kZSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICB9XHJcbiAgQGVsc2Uge1xyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi00XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IFtzZWFyY2hdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRTdG9yZVwiIFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgW2RhdGFdPVwic3RvcmVMaXN0XCIgW2xhYmVsXT1cIidTZWxlY3Qgc3RvcmUnXCIgW2FjdGlvbl09XCJ0cnVlXCIgKGFjdGlvbkNsaWNrKT1cImFkZE5ld1N0b3JlKClcIlxyXG4gICAgICAgICAgW2FjdGlvbkxhYmVsXT1cIidDcmVhdGUgbmV3IHN0b3JlJ1wiIChuZ01vZGVsQ2hhbmdlKT1cIm9uU3RvcmVDaGFuZ2UoKVwiIFtkaXNhYmxlZF09XCJpc0NBRFByb2Nlc3NpbmdcIj5cclxuICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRmxvb3JcIiBbaWRGaWVsZF09XCIndmFsdWUnXCIgW25hbWVGaWVsZF09XCInbGFiZWwnXCIgW2RhdGFdPVwiZmxvb3JMaXN0XCJcclxuICAgICAgICAgIFtsYWJlbF09XCInU2VsZWN0IGZsb29yJ1wiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmxvb3JDaGFuZ2UoKVwiIFtkaXNhYmxlZF09XCJpc0NBRFByb2Nlc3NpbmdcIj5cclxuICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LWV4aXN0LXdyYXBwZXJcIiBbY2xhc3Muc2hvd109XCJpc0xheW91dEV4aXN0XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtZXhpc3Qtd2FybmluZyBtYi00XCI+XHJcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICBkPVwiTTkuOTk5NjUgNi42NjY2N1YxME05Ljk5OTY1IDEzLjMzMzNIMTAuMDA4TTguNTc0NjUgMi4zODMzNEwxLjUxNjMyIDE0LjE2NjdDMS4zNzA3OSAxNC40MTg3IDEuMjkzNzkgMTQuNzA0NCAxLjI5Mjk4IDE0Ljk5NTRDMS4yOTIxNiAxNS4yODY1IDEuMzY3NTYgMTUuNTcyNiAxLjUxMTY3IDE1LjgyNTRDMS42NTU3OSAxNi4wNzgzIDEuODYzNTkgMTYuMjg5IDIuMTE0NDEgMTYuNDM2NkMyLjM2NTIzIDE2LjU4NDEgMi42NTAzMiAxNi42NjM1IDIuOTQxMzIgMTYuNjY2N0gxNy4wNThDMTcuMzQ5IDE2LjY2MzUgMTcuNjM0MSAxNi41ODQxIDE3Ljg4NDkgMTYuNDM2NkMxOC4xMzU3IDE2LjI4OSAxOC4zNDM1IDE2LjA3ODMgMTguNDg3NiAxNS44MjU0QzE4LjYzMTcgMTUuNTcyNiAxOC43MDcxIDE1LjI4NjUgMTguNzA2MyAxNC45OTU0QzE4LjcwNTUgMTQuNzA0NCAxOC42Mjg1IDE0LjQxODcgMTguNDgzIDE0LjE2NjdMMTEuNDI0NyAyLjM4MzM0QzExLjI3NjEgMi4xMzg0MyAxMS4wNjY5IDEuOTM1OTQgMTAuODE3MyAxLjc5NTQxQzEwLjU2NzcgMS42NTQ4OCAxMC4yODYxIDEuNTgxMDUgOS45OTk2NSAxLjU4MTA1QzkuNzEzMjEgMS41ODEwNSA5LjQzMTU5IDEuNjU0ODggOS4xODE5OSAxLjc5NTQxQzguOTMyMzggMS45MzU5NCA4LjcyMzIxIDIuMTM4NDMgOC41NzQ2NSAyLjM4MzM0WlwiXHJcbiAgICAgICAgICAgIHN0cm9rZT1cIiNGMDQ0MzhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgVGhpcyBzdG9yZSBhbHJlYWR5IGhhcyBhIEZsb29yIHt7c2VsZWN0ZWRGbG9vcn19IHBsYW5vZ3JhbS4gT3ZlcndyaXRlIGl0PyBUaGlzIGNhbuKAmXQgYmUgdW5kb25lLlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi00XCI+XHJcbiAgICAgIDxmaWxlLXVwbG9hZCBbZGlzYWJsZWRdPVwiaXNDQURQcm9jZXNzaW5nXCIgKGZpbGVDaGFuZ2UpPVwib25GaWxlQ2hhbmdlKCRldmVudClcIj48L2ZpbGUtdXBsb2FkPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gIH1cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYWN0aW9uc1wiPlxyXG4gICAgQGlmKGlzQ3JlYXRlU3RvcmVNb2RlKXtcclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgbWUtYXV0b1wiIChjbGljayk9XCJvbkJhY2soKVwiPkJhY2s8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiAoY2xpY2spPVwib25DYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBcIiBbZGlzYWJsZWRdPVwiY3JlYXRlU3RvcmVGb3JtLmludmFsaWRcIiAoY2xpY2spPVwib25DcmVhdGVTdG9yZSgpXCI+XHJcbiAgICAgICAgQ3JlYXRlXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgfUBlbHNlIHtcclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiAoY2xpY2spPVwib25DYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBcIiBbZGlzYWJsZWRdPVwiIWlzVmFsaWRUb0NyZWF0ZVBsYW5vIHx8IGlzQ0FEUHJvY2Vzc2luZ1wiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ3JlYXRlTGF5b3V0UGxhbm8oKVwiPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzQ0FEUHJvY2Vzc2luZ1wiPlxyXG4gICAgICAgICAge3tpc0xheW91dEV4aXN0ID8gICdPdmVyd3JpdGUnIDogJ0NyZWF0ZSd9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cImlzQ0FEUHJvY2Vzc2luZ1wiIGNsYXNzPVwic3Bpbm5lclwiIHZpZXdCb3g9XCIwIDAgNTAgNTBcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJwYXRoXCIgY3g9XCIyNVwiIGN5PVwiMjVcIiByPVwiMjBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjRcIj48L2NpcmNsZT5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBsYW5vZ3JhbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2UtcGxhbm8vcG9wdXBzL2NyZWF0ZS1wbGFub2dyYW0vY3JlYXRlLXBsYW5vZ3JhbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2UtcGxhbm8vcG9wdXBzL2NyZWF0ZS1wbGFub2dyYW0vY3JlYXRlLXBsYW5vZ3JhbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFN0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQWdCdkMsTUFBTSxPQUFPLHdCQUF3QjtJQTBCekI7SUFDQTtJQUNBO0lBM0JELFFBQVEsQ0FBUztJQUMxQixhQUFhLENBQVM7SUFDdEIsYUFBYSxDQUFTO0lBQ3RCLFlBQVksR0FBZ0IsSUFBSSxDQUFDO0lBRWpDLFNBQVMsR0FHSCxFQUFFLENBQUM7SUFFVCxTQUFTLEdBR0g7UUFDSixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtRQUM5QixFQUFFLEtBQUssRUFBRSxT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QyxZQUFhLEVBQ2xCLElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxhQUFhLENBQ25CLENBQ0YsQ0FBQztZQUVGLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSTtnQkFBRSxPQUFPO1lBRTVCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN4QztRQUFDLE9BQU8sS0FBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM1QztnQkFBUztZQUNSLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixLQUFJLENBQUM7SUFFdkIsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0IsQ0FBQzt3R0FoSFUsd0JBQXdCOzRGQUF4Qix3QkFBd0Isa0hDdkJyQyx5eEZBNENNLHNuQ0Q1QkYsV0FBVyw4VkFDWCxtQkFBbUIsK0JBQ25CLHVCQUF1Qix5TkFDdkIsbUJBQW1CLHVHQUNuQixJQUFJOzs0RkFHSyx3QkFBd0I7a0JBYnBDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBR3BCLElBQUksV0FDUDt3QkFDUCxXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsdUJBQXVCO3dCQUN2QixtQkFBbUI7d0JBQ25CLElBQUk7cUJBQ0w7Z0pBR1EsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IFJlYWN0aXZlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uLy4uL3JlYWN0aXZlLXNlbGVjdC9yZWFjdGl2ZS1zZWxlY3QuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvc3RvcmUtYnVpbGRlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgRmlsZVVwbG9hZENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi8uLi9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgTmdJZiB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1zaGFyZWRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFwcC1jcmVhdGUtcGxhbm9ncmFtXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9jcmVhdGUtcGxhbm9ncmFtLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9jcmVhdGUtcGxhbm9ncmFtLmNvbXBvbmVudC5zY3NzXCIsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZVNlbGVjdENvbXBvbmVudCxcclxuICAgIEZpbGVVcGxvYWRDb21wb25lbnQsXHJcbiAgICBOZ0lmLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVQbGFub2dyYW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGNsaWVudElkOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRTdG9yZTogc3RyaW5nO1xyXG4gIHNlbGVjdGVkRmxvb3I6IG51bWJlcjtcclxuICBzZWxlY3RlZEZpbGU6IEZpbGUgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgc3RvcmVMaXN0OiB7XHJcbiAgICBsYWJlbDogc3RyaW5nO1xyXG4gICAgdmFsdWU6IHN0cmluZztcclxuICB9W10gPSBbXTtcclxuXHJcbiAgZmxvb3JMaXN0OiB7XHJcbiAgICBsYWJlbDogc3RyaW5nO1xyXG4gICAgdmFsdWU6IG51bWJlcjtcclxuICB9W10gPSBbXHJcbiAgICB7IGxhYmVsOiBcIkZsb29yIDFcIiwgdmFsdWU6IDEgfSxcclxuICAgIHsgbGFiZWw6IFwiRmxvb3IgMlwiLCB2YWx1ZTogMiB9LFxyXG4gICAgeyBsYWJlbDogXCJGbG9vciAzXCIsIHZhbHVlOiAzIH0sXHJcbiAgXTtcclxuXHJcbiAgc2VsZWN0ZWRTdG9yZUZsb29yczogYW55ID0gW107XHJcblxyXG4gIGlzTGF5b3V0RXhpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1Byb2Nlc3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcclxuICAgIHByaXZhdGUgc3RvcmVCdWlsZGVyU2VydmljZTogU3RvcmVCdWlsZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5nZXRTdG9yZUxpc3QoKTtcclxuICB9XHJcblxyXG4gIGdldCBpc1ZhbGlkVG9DcmVhdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFN0b3JlICYmIHRoaXMuc2VsZWN0ZWRGbG9vciAmJiB0aGlzLnNlbGVjdGVkRmlsZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFN0b3JlTGlzdCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHN0b3JlczogYW55ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldEFsbFN0b3Jlcyh0aGlzLmNsaWVudElkKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnN0b3JlTGlzdCA9IHN0b3Jlcz8uZGF0YT8ubWFwKChzOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4geyBsYWJlbDogcy5zdG9yZU5hbWUsIHZhbHVlOiBzLnN0b3JlSWQgfTtcclxuICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkBAIH4gZ2V0U3RvcmVMaXN0IFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvblN0b3JlQ2hhbmdlKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZmxvb3JzOiBhbnkgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuZ2V0U3RvcmVGbG9vcnNMaXN0KHRoaXMuc2VsZWN0ZWRTdG9yZSlcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlRmxvb3JzID0gZmxvb3JzPy5kYXRhID8/IFtdO1xyXG4gICAgICB0aGlzLm9uRmxvb3JDaGFuZ2UoKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBnZXRTdG9yZUxpc3QgW0VSUl06XCIsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRmxvb3JDaGFuZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZsb29yKSB7XHJcbiAgICAgIHRoaXMuaXNMYXlvdXRFeGlzdCA9IHRoaXMuc2VsZWN0ZWRTdG9yZUZsb29ycy5zb21lKFxyXG4gICAgICAgIChmOiBhbnkpID0+IGYuZmxvb3JOdW1iZXIgPT09IHRoaXMuc2VsZWN0ZWRGbG9vclxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc0xheW91dEV4aXN0ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZpbGVDaGFuZ2UoZmlsZTogRmlsZSB8IG51bGwpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gZmlsZTtcclxuICAgIGlmIChmaWxlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiRFhGIHNlbGVjdGVkOlwiLCBmaWxlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiRFhGIGNsZWFyZWRcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkNyZWF0ZSgpIHtcclxuICAgIGlmICghdGhpcy5pc1ZhbGlkVG9DcmVhdGUpIHJldHVybjtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmlzUHJvY2Vzc2luZyA9IHRydWU7XHJcblxyXG4gICAgICBjb25zdCBwbGFub1JlczogYW55ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmNyZWF0ZVBsYW5vRnJvbUNBRChcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlISxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZSxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGbG9vclxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghcGxhbm9SZXM/LmRhdGEpIHJldHVybjtcclxuXHJcbiAgICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UocGxhbm9SZXM/LmRhdGEpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGVycm9yLmVycm9yLmVycm9yKTtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IG9uQ3JlYXRlIFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLmlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DbGlja0NyZWF0ZVN0b3JlKCkge31cclxuXHJcbiAgb25DYW5jZWwoKSB7XHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIm1vZGFsLXdyYXBwZXJcIj5cclxuICA8aDMgY2xhc3M9XCJtYi00XCI+Q3JlYXRlIHN0b3JlIGxheW91dC9wbGFuIGZyb20gQ0FEPC9oMz5cclxuICA8ZGl2IGNsYXNzPVwicm93IG1iLTRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBbc2VhcmNoXT1cInRydWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkU3RvcmVcIiBbaWRGaWVsZF09XCIndmFsdWUnXCIgW25hbWVGaWVsZF09XCInbGFiZWwnXCJcclxuICAgICAgICBbZGF0YV09XCJzdG9yZUxpc3RcIiBbbGFiZWxdPVwiJ1NlbGVjdCBzdG9yZSdcIiBbYWN0aW9uXT1cInRydWVcIiAoYWN0aW9uQ2xpY2spPVwib25DbGlja0NyZWF0ZVN0b3JlKClcIlxyXG4gICAgICAgIFthY3Rpb25MYWJlbF09XCInQ3JlYXRlIG5ldyBzdG9yZSdcIiAobmdNb2RlbENoYW5nZSk9XCJvblN0b3JlQ2hhbmdlKClcIiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCI+XHJcbiAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IFsobmdNb2RlbCldPVwic2VsZWN0ZWRGbG9vclwiIFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIiBbZGF0YV09XCJmbG9vckxpc3RcIlxyXG4gICAgICAgIFtsYWJlbF09XCInU2VsZWN0IGZsb29yJ1wiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmxvb3JDaGFuZ2UoKVwiIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmdcIj5cclxuICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImxheW91dC1leGlzdC13cmFwcGVyXCIgW2NsYXNzLnNob3ddPVwiaXNMYXlvdXRFeGlzdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImxheW91dC1leGlzdC13YXJuaW5nIG1iLTRcIj5cclxuICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgPHBhdGhcclxuICAgICAgICAgIGQ9XCJNOS45OTk2NSA2LjY2NjY3VjEwTTkuOTk5NjUgMTMuMzMzM0gxMC4wMDhNOC41NzQ2NSAyLjM4MzM0TDEuNTE2MzIgMTQuMTY2N0MxLjM3MDc5IDE0LjQxODcgMS4yOTM3OSAxNC43MDQ0IDEuMjkyOTggMTQuOTk1NEMxLjI5MjE2IDE1LjI4NjUgMS4zNjc1NiAxNS41NzI2IDEuNTExNjcgMTUuODI1NEMxLjY1NTc5IDE2LjA3ODMgMS44NjM1OSAxNi4yODkgMi4xMTQ0MSAxNi40MzY2QzIuMzY1MjMgMTYuNTg0MSAyLjY1MDMyIDE2LjY2MzUgMi45NDEzMiAxNi42NjY3SDE3LjA1OEMxNy4zNDkgMTYuNjYzNSAxNy42MzQxIDE2LjU4NDEgMTcuODg0OSAxNi40MzY2QzE4LjEzNTcgMTYuMjg5IDE4LjM0MzUgMTYuMDc4MyAxOC40ODc2IDE1LjgyNTRDMTguNjMxNyAxNS41NzI2IDE4LjcwNzEgMTUuMjg2NSAxOC43MDYzIDE0Ljk5NTRDMTguNzA1NSAxNC43MDQ0IDE4LjYyODUgMTQuNDE4NyAxOC40ODMgMTQuMTY2N0wxMS40MjQ3IDIuMzgzMzRDMTEuMjc2MSAyLjEzODQzIDExLjA2NjkgMS45MzU5NCAxMC44MTczIDEuNzk1NDFDMTAuNTY3NyAxLjY1NDg4IDEwLjI4NjEgMS41ODEwNSA5Ljk5OTY1IDEuNTgxMDVDOS43MTMyMSAxLjU4MTA1IDkuNDMxNTkgMS42NTQ4OCA5LjE4MTk5IDEuNzk1NDFDOC45MzIzOCAxLjkzNTk0IDguNzIzMjEgMi4xMzg0MyA4LjU3NDY1IDIuMzgzMzRaXCJcclxuICAgICAgICAgIHN0cm9rZT1cIiNGMDQ0MzhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgPC9zdmc+XHJcblxyXG4gICAgICBUaGlzIHN0b3JlIGFscmVhZHkgaGFzIGEgRmxvb3Ige3tzZWxlY3RlZEZsb29yfX0gcGxhbm9ncmFtLiBPdmVyd3JpdGUgaXQ/IFRoaXMgY2Fu4oCZdCBiZSB1bmRvbmUuXHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cIm1iLTRcIj5cclxuICAgIDxmaWxlLXVwbG9hZCBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCIgKGZpbGVDaGFuZ2UpPVwib25GaWxlQ2hhbmdlKCRldmVudClcIj48L2ZpbGUtdXBsb2FkPlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWFjdGlvbnNcIj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IFwiIFtkaXNhYmxlZF09XCIhaXNWYWxpZFRvQ3JlYXRlIHx8IGlzUHJvY2Vzc2luZ1wiIChjbGljayk9XCJvbkNyZWF0ZSgpXCI+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwiIWlzUHJvY2Vzc2luZ1wiPlxyXG4gICAgICAgIHt7aXNMYXlvdXRFeGlzdCA/ICAnT3ZlcndyaXRlJyA6ICdDcmVhdGUnfX1cclxuICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgPHN2ZyAqbmdJZj1cImlzUHJvY2Vzc2luZ1wiIGNsYXNzPVwic3Bpbm5lclwiIHZpZXdCb3g9XCIwIDAgNTAgNTBcIj5cclxuICAgICAgICA8Y2lyY2xlIGNsYXNzPVwicGF0aFwiIGN4PVwiMjVcIiBjeT1cIjI1XCIgcj1cIjIwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCI0XCI+PC9jaXJjbGU+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|