tango-app-ui-store-builder 1.2.16 → 1.2.17

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 (31) hide show
  1. package/esm2022/lib/components/plano-configurations/plano-configurations.component.mjs +18 -7
  2. package/esm2022/lib/components/plano-tools/allow-edit/allow-edit.component.mjs +4 -3
  3. package/esm2022/lib/components/plano-tools/cad-files/cad-files.component.mjs +5 -4
  4. package/esm2022/lib/components/plano-tools/cad-render/cad-render.component.mjs +4 -3
  5. package/esm2022/lib/components/plano-tools/delete-floor/delete-floor.component.mjs +4 -3
  6. package/esm2022/lib/components/plano-tools/delete-task/delete-task.component.mjs +4 -3
  7. package/esm2022/lib/components/plano-tools/layout-touchup/layout-touchup.component.mjs +134 -0
  8. package/esm2022/lib/components/plano-tools/layout-touchup/touchup-editor/touchup-editor.component.mjs +5103 -0
  9. package/esm2022/lib/components/plano-tools/modify-fixture-numbers/modify-fixture-numbers.component.mjs +4 -3
  10. package/esm2022/lib/components/plano-tools/move-bucket/move-bucket.component.mjs +4 -3
  11. package/esm2022/lib/components/plano-tools/plano-data-export/plano-data-export.component.mjs +4 -3
  12. package/esm2022/lib/components/plano-tools/plano-migrate/plano-migrate.component.mjs +4 -3
  13. package/esm2022/lib/components/plano-tools/store-exports/store-exports.component.mjs +4 -3
  14. package/esm2022/lib/components/plano-tools/swap-template/swap-template.component.mjs +4 -3
  15. package/esm2022/lib/components/plano-tools/tool-page-header/tool-page-header.component.mjs +22 -0
  16. package/esm2022/lib/components/plano-tools/tools-parent/tools-parent.component.mjs +27 -8
  17. package/esm2022/lib/services/store-builder.service.mjs +10 -1
  18. package/esm2022/lib/tango-store-builder-routing.module.mjs +25 -55
  19. package/esm2022/lib/tango-store-builder.module.mjs +10 -1
  20. package/fesm2022/tango-app-ui-store-builder.mjs +5620 -390
  21. package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
  22. package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +4 -4
  23. package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +5 -5
  24. package/lib/components/plano-configurations/plano-configurations.component.d.ts +9 -1
  25. package/lib/components/plano-tools/layout-touchup/layout-touchup.component.d.ts +50 -0
  26. package/lib/components/plano-tools/layout-touchup/touchup-editor/touchup-editor.component.d.ts +331 -0
  27. package/lib/components/plano-tools/tool-page-header/tool-page-header.component.d.ts +8 -0
  28. package/lib/components/plano-tools/tools-parent/tools-parent.component.d.ts +4 -2
  29. package/lib/services/store-builder.service.d.ts +10 -0
  30. package/lib/tango-store-builder.module.d.ts +61 -58
  31. package/package.json +1 -1
@@ -9,20 +9,22 @@ export class ToolsParentComponent {
9
9
  ngbModal;
10
10
  router;
11
11
  gs;
12
+ pageInfo;
12
13
  clientId;
13
14
  destroy$ = new Subject();
14
- constructor(ngbModal, router, gs) {
15
+ constructor(ngbModal, router, gs, pageInfo) {
15
16
  this.ngbModal = ngbModal;
16
17
  this.router = router;
17
18
  this.gs = gs;
19
+ this.pageInfo = pageInfo;
18
20
  }
19
21
  ngOnInit() {
22
+ this.setPageData();
20
23
  this.gs.dataRangeValue
21
24
  .pipe(takeUntil(this.destroy$), // Subscription will be cancelled on component destroy.
22
25
  debounceTime(200), // To avoid immediate frequent calls.
23
26
  filter((data) => !!data), // Filtering null/undefined.
24
- distinctUntilChanged() // Emitting only different values. (Ignores same clientId).
25
- )
27
+ distinctUntilChanged())
26
28
  .subscribe((data) => {
27
29
  if (data?.client) {
28
30
  this.clientId = data?.client;
@@ -33,6 +35,23 @@ export class ToolsParentComponent {
33
35
  }
34
36
  });
35
37
  }
38
+ setPageData() {
39
+ this.pageInfo.setTitle("Plano Tools");
40
+ // this.pageInfo.setBreadcrumbs([
41
+ // {
42
+ // title: "Planogram",
43
+ // path: "/manage/planogram/manage-planograms",
44
+ // isActive: false,
45
+ // isSeparator: false,
46
+ // },
47
+ // {
48
+ // title: "",
49
+ // path: "",
50
+ // isActive: false,
51
+ // isSeparator: true,
52
+ // },
53
+ // ]);
54
+ }
36
55
  onClickCreateFixtureTemplate() {
37
56
  const modelRef = this.ngbModal.open(CreateFixtureTemplateComponent, {
38
57
  centered: true,
@@ -49,11 +68,11 @@ export class ToolsParentComponent {
49
68
  this.destroy$.next();
50
69
  this.destroy$.complete();
51
70
  }
52
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToolsParentComponent, deps: [{ token: i1.NgbModal }, { token: i2.Router }, { token: i3.GlobalStateService }], target: i0.ɵɵFactoryTarget.Component });
53
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ToolsParentComponent, selector: "lib-tools-parent", ngImport: i0, template: "<div class=\"d-flex mb-3\">\r\n <div class=\"d-flex gap-3\">\r\n\r\n <!-- <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/builder\">\r\n Plano Builder\r\n </button> -->\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/migrate\">\r\n Download Layout Images\r\n </button>\r\n \r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/cad-render\">\r\n Check CAD Output\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/allow-edit\">\r\n Allow Edit\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/delete-task\">\r\n Delete Task\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/delete-floor\">\r\n Delete Floor\r\n </button>\r\n\r\n <!-- <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/update-fixture-type\">\r\n Update Fixture Type\r\n </button> -->\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/modify-fixture-numbers\">\r\n Modify Fixture Numbers\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/data-export\">\r\n Data Export\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/store-exports\">\r\n MBQ & Order\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/swap-template\">\r\n Template Swap\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/move-bucket\">\r\n Move Store Bucket\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/cad-files\">\r\n CAD Files\r\n </button>\r\n\r\n <button class=\"btn btn-success\" (click)=\"onClickCreateFixtureTemplate()\">\r\n Create Template\r\n </button>\r\n\r\n </div>\r\n</div>\r\n<hr>\r\n<router-outlet></router-outlet>", styles: [""], dependencies: [{ kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
71
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToolsParentComponent, deps: [{ token: i1.NgbModal }, { token: i2.Router }, { token: i3.GlobalStateService }, { token: i3.PageInfoService }], target: i0.ɵɵFactoryTarget.Component });
72
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ToolsParentComponent, selector: "lib-tools-parent", ngImport: i0, template: "<div class=\"plano-tools-hub\">\n <div class=\"hub-header mb-4\">\n <h4 class=\"mb-1\">Plano Tools</h4>\n <p class=\"text-muted small mb-0\">\n Utilities for managing planograms, layouts, exports and templates.\n </p>\n </div>\n\n <div class=\"tool-section mb-4\">\n <h6 class=\"section-title\">Export &amp; Inspect</h6>\n <div class=\"card-grid\">\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/migrate\">\n <div class=\"icon\"><i class=\"bi bi-images\"></i></div>\n <div class=\"title\">Download Layout Images</div>\n <div class=\"desc\">Export layout images store by store.</div>\n </a>\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/cad-render\">\n <div class=\"icon\"><i class=\"bi bi-bounding-box\"></i></div>\n <div class=\"title\">Check CAD Output</div>\n <div class=\"desc\">Paste CAD data and preview the parsed layout.</div>\n </a>\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/cad-files\">\n <div class=\"icon\"><i class=\"bi bi-folder2-open\"></i></div>\n <div class=\"title\">CAD Files</div>\n <div class=\"desc\">List uploaded CAD &amp; Kissflow files for a store.</div>\n </a>\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/data-export\">\n <div class=\"icon\"><i class=\"bi bi-database-down\"></i></div>\n <div class=\"title\">Data Export</div>\n <div class=\"desc\">Query planogram fixtures and export as Excel.</div>\n </a>\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/store-exports\">\n <div class=\"icon\"><i class=\"bi bi-file-earmark-spreadsheet\"></i></div>\n <div class=\"title\">MBQ &amp; Order</div>\n <div class=\"desc\">Generate per-store fixture export bundles.</div>\n </a>\n </div>\n </div>\n\n <div class=\"tool-section mb-4\">\n <h6 class=\"section-title\">Edit &amp; Modify</h6>\n <div class=\"card-grid\">\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/allow-edit\">\n <div class=\"icon\"><i class=\"bi bi-pencil-square\"></i></div>\n <div class=\"title\">Allow Edit</div>\n <div class=\"desc\">Re-enable editing on a published task without losing responses.</div>\n </a>\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/modify-fixture-numbers\">\n <div class=\"icon\"><i class=\"bi bi-input-cursor-text\"></i></div>\n <div class=\"title\">Modify Fixture Numbers</div>\n <div class=\"desc\">Renumber fixtures in a planogram.</div>\n </a>\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/layout-touchup\">\n <div class=\"icon\"><i class=\"bi bi-arrows-move\"></i></div>\n <div class=\"title\">Layout Touchup</div>\n <div class=\"desc\">Reposition or resize layout elements without invalidating responses.</div>\n </a>\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/swap-template\">\n <div class=\"icon\"><i class=\"bi bi-arrow-left-right\"></i></div>\n <div class=\"title\">Template Swap</div>\n <div class=\"desc\">Replace one fixture template with another.</div>\n </a>\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/move-bucket\">\n <div class=\"icon\"><i class=\"bi bi-arrow-down-up\"></i></div>\n <div class=\"title\">Move Store Bucket</div>\n <div class=\"desc\">Move a floor between Onboarding and ManagePlano.</div>\n </a>\n </div>\n </div>\n\n <div class=\"tool-section mb-4\">\n <h6 class=\"section-title text-danger\">Destructive</h6>\n <div class=\"card-grid\">\n <a class=\"tool-card tool-card-danger\" routerLink=\"/manage/planogram/plano-tools/delete-task\">\n <div class=\"icon\"><i class=\"bi bi-trash\"></i></div>\n <div class=\"title\">Delete Task</div>\n <div class=\"desc\">Remove a task and its responses.</div>\n </a>\n <a class=\"tool-card tool-card-danger\" routerLink=\"/manage/planogram/plano-tools/delete-floor\">\n <div class=\"icon\"><i class=\"bi bi-trash3\"></i></div>\n <div class=\"title\">Delete Floor</div>\n <div class=\"desc\">Remove a floor and all rows referencing it.</div>\n </a>\n </div>\n </div>\n\n <div class=\"tool-section\">\n <h6 class=\"section-title\">Create</h6>\n <div class=\"card-grid\">\n <button type=\"button\" class=\"tool-card tool-card-primary\" (click)=\"onClickCreateFixtureTemplate()\">\n <div class=\"icon\"><i class=\"bi bi-plus-lg text-white\" ></i></div>\n <div class=\"title\">Create Template</div>\n <div class=\"desc\">Start a new fixture template from scratch.</div>\n </button>\n </div>\n </div>\n</div>\n", styles: [".plano-tools-hub{padding:.25rem}.hub-header h4{font-weight:600;color:#0f172a}.section-title{font-weight:600;color:#475569;text-transform:uppercase;letter-spacing:.04em;font-size:.75rem;margin-bottom:.75rem}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:1rem}.tool-card{display:block;width:100%;text-align:left;background:#fff;border:1px solid #e5e7eb;border-radius:10px;padding:1rem 1.1rem;text-decoration:none;color:inherit;transition:border-color .15s,box-shadow .15s,transform .15s;cursor:pointer}.tool-card:hover{border-color:#94a3b8;box-shadow:0 4px 12px #0f172a0f;transform:translateY(-1px)}.tool-card .icon{width:36px;height:36px;border-radius:8px;background:#eff6ff;color:#2563eb;display:flex;align-items:center;justify-content:center;font-size:1.1rem;margin-bottom:.6rem}.tool-card .title{font-weight:600;color:#0f172a;margin-bottom:.25rem}.tool-card .desc{font-size:.825rem;color:#64748b;line-height:1.35}.tool-card.tool-card-danger .icon{background:#fef2f2;color:#dc2626}.tool-card.tool-card-danger:hover{border-color:#fca5a5}.tool-card.tool-card-primary{border-color:#16a34a;background:#f0fdf4}.tool-card.tool-card-primary .icon{background:#16a34a;color:#fff;font-size:1.5rem;line-height:1;font-weight:700}.tool-card.tool-card-primary .title{color:#14532d}.tool-card.tool-card-primary:hover{border-color:#15803d;box-shadow:0 4px 14px #16a34a2e}\n"], dependencies: [{ kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
54
73
  }
55
74
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToolsParentComponent, decorators: [{
56
75
  type: Component,
57
- args: [{ selector: "lib-tools-parent", template: "<div class=\"d-flex mb-3\">\r\n <div class=\"d-flex gap-3\">\r\n\r\n <!-- <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/builder\">\r\n Plano Builder\r\n </button> -->\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/migrate\">\r\n Download Layout Images\r\n </button>\r\n \r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/cad-render\">\r\n Check CAD Output\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/allow-edit\">\r\n Allow Edit\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/delete-task\">\r\n Delete Task\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/delete-floor\">\r\n Delete Floor\r\n </button>\r\n\r\n <!-- <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/update-fixture-type\">\r\n Update Fixture Type\r\n </button> -->\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/modify-fixture-numbers\">\r\n Modify Fixture Numbers\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/data-export\">\r\n Data Export\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/store-exports\">\r\n MBQ & Order\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/swap-template\">\r\n Template Swap\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/move-bucket\">\r\n Move Store Bucket\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/cad-files\">\r\n CAD Files\r\n </button>\r\n\r\n <button class=\"btn btn-success\" (click)=\"onClickCreateFixtureTemplate()\">\r\n Create Template\r\n </button>\r\n\r\n </div>\r\n</div>\r\n<hr>\r\n<router-outlet></router-outlet>" }]
58
- }], ctorParameters: () => [{ type: i1.NgbModal }, { type: i2.Router }, { type: i3.GlobalStateService }] });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHMtcGFyZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL3BsYW5vLXRvb2xzL3Rvb2xzLXBhcmVudC90b29scy1wYXJlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvdG9vbHMtcGFyZW50L3Rvb2xzLXBhcmVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLCtGQUErRixDQUFDO0FBRy9JLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixPQUFPLEVBQ1AsU0FBUyxHQUNWLE1BQU0sTUFBTSxDQUFDOzs7OztBQU9kLE1BQU0sT0FBTyxvQkFBb0I7SUFLckI7SUFDQTtJQUNBO0lBTlYsUUFBUSxDQUFTO0lBRUEsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDaEQsWUFDVSxRQUFrQixFQUNsQixNQUFjLEVBQ2QsRUFBc0I7UUFGdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7SUFDN0IsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWM7YUFDbkIsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsdURBQXVEO1FBQ2pGLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxxQ0FBcUM7UUFDeEQsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsNEJBQTRCO1FBQ3RELG9CQUFvQixFQUFFLENBQUMsMkRBQTJEO1NBQ25GO2FBQ0EsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksRUFBRSxNQUFNLENBQUM7YUFDOUI7aUJBQU07Z0JBQ0wsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBVyxDQUNqRCxDQUFDO2dCQUNGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxFQUFFLE1BQU0sQ0FBQzthQUNwQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDRCQUE0QjtRQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRTtZQUNsRSxRQUFRLEVBQUUsSUFBSTtZQUNkLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3BELFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDOUIsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQ2xCLENBQUMsa0RBQWtELENBQUMsRUFDcEQsRUFBRSxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FDMUQsQ0FBQzthQUNIO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQWpEVSxvQkFBb0I7NEZBQXBCLG9CQUFvQix3RENsQmpDLDAwRUE4RCtCOzs0RkQ1Q2xCLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7IENyZWF0ZUZpeHR1cmVUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9maXh0dXJlLXRlbXBsYXRlLXRhYmxlL3BvcHVwcy9jcmVhdGUtZml4dHVyZS10ZW1wbGF0ZS9jcmVhdGUtZml4dHVyZS10ZW1wbGF0ZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1nbG9iYWxcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQge1xyXG4gIGRlYm91bmNlVGltZSxcclxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcclxuICBmaWx0ZXIsXHJcbiAgU3ViamVjdCxcclxuICB0YWtlVW50aWwsXHJcbn0gZnJvbSBcInJ4anNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpYi10b29scy1wYXJlbnRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3Rvb2xzLXBhcmVudC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vdG9vbHMtcGFyZW50LmNvbXBvbmVudC5zY3NzXCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUb29sc1BhcmVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgY2xpZW50SWQ6IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIG5nYk1vZGFsOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksIC8vIFN1YnNjcmlwdGlvbiB3aWxsIGJlIGNhbmNlbGxlZCBvbiBjb21wb25lbnQgZGVzdHJveS5cclxuICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSwgLy8gVG8gYXZvaWQgaW1tZWRpYXRlIGZyZXF1ZW50IGNhbGxzLlxyXG4gICAgICAgIGZpbHRlcigoZGF0YSkgPT4gISFkYXRhKSwgLy8gRmlsdGVyaW5nIG51bGwvdW5kZWZpbmVkLlxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgLy8gRW1pdHRpbmcgb25seSBkaWZmZXJlbnQgdmFsdWVzLiAoSWdub3JlcyBzYW1lIGNsaWVudElkKS5cclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgYXMgc3RyaW5nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGhlYWRlckRhdGE/LmNsaWVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja0NyZWF0ZUZpeHR1cmVUZW1wbGF0ZSgpIHtcclxuICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKENyZWF0ZUZpeHR1cmVUZW1wbGF0ZUNvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgc2l6ZTogXCJtZFwiLFxyXG4gICAgfSk7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5jbGllbnRJZCA9IHRoaXMuY2xpZW50SWQ7XHJcbiAgICBtb2RlbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgIFtcIi9tYW5hZ2UvcGxhbm9ncmFtL2ZpeHR1cmUtdGVtcGxhdGUvYmFzaWMtZGV0YWlsc1wiXSxcclxuICAgICAgICAgIHsgcXVlcnlQYXJhbXM6IHsgdGVtcGxhdGVJZDogcmVzdWx0Ll9pZCwgaXNFZGl0OiB0cnVlIH0gfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBtYi0zXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4ICBnYXAtM1wiPlxyXG5cclxuICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiByb3V0ZXJMaW5rPVwiL21hbmFnZS9wbGFub2dyYW0vcGxhbm8tdG9vbHMvYnVpbGRlclwiPlxyXG4gICAgICAgICAgICBQbGFubyBCdWlsZGVyXHJcbiAgICAgICAgPC9idXR0b24+IC0tPlxyXG5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgcm91dGVyTGluaz1cIi9tYW5hZ2UvcGxhbm9ncmFtL3BsYW5vLXRvb2xzL21pZ3JhdGVcIj5cclxuICAgICAgICAgICAgRG93bmxvYWQgTGF5b3V0IEltYWdlc1xyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIFxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiByb3V0ZXJMaW5rPVwiL21hbmFnZS9wbGFub2dyYW0vcGxhbm8tdG9vbHMvY2FkLXJlbmRlclwiPlxyXG4gICAgICAgICAgICBDaGVjayBDQUQgT3V0cHV0XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiByb3V0ZXJMaW5rPVwiL21hbmFnZS9wbGFub2dyYW0vcGxhbm8tdG9vbHMvYWxsb3ctZWRpdFwiPlxyXG4gICAgICAgICAgICBBbGxvdyBFZGl0XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiByb3V0ZXJMaW5rPVwiL21hbmFnZS9wbGFub2dyYW0vcGxhbm8tdG9vbHMvZGVsZXRlLXRhc2tcIj5cclxuICAgICAgICAgICAgRGVsZXRlIFRhc2tcclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIHJvdXRlckxpbms9XCIvbWFuYWdlL3BsYW5vZ3JhbS9wbGFuby10b29scy9kZWxldGUtZmxvb3JcIj5cclxuICAgICAgICAgICAgRGVsZXRlIEZsb29yXHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIHJvdXRlckxpbms9XCIvbWFuYWdlL3BsYW5vZ3JhbS9wbGFuby10b29scy91cGRhdGUtZml4dHVyZS10eXBlXCI+XHJcbiAgICAgICAgICAgIFVwZGF0ZSBGaXh0dXJlIFR5cGVcclxuICAgICAgICA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiByb3V0ZXJMaW5rPVwiL21hbmFnZS9wbGFub2dyYW0vcGxhbm8tdG9vbHMvbW9kaWZ5LWZpeHR1cmUtbnVtYmVyc1wiPlxyXG4gICAgICAgICAgICBNb2RpZnkgRml4dHVyZSBOdW1iZXJzXHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiByb3V0ZXJMaW5rPVwiL21hbmFnZS9wbGFub2dyYW0vcGxhbm8tdG9vbHMvZGF0YS1leHBvcnRcIj5cclxuICAgICAgICAgICAgRGF0YSBFeHBvcnRcclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIHJvdXRlckxpbms9XCIvbWFuYWdlL3BsYW5vZ3JhbS9wbGFuby10b29scy9zdG9yZS1leHBvcnRzXCI+XHJcbiAgICAgICAgICAgIE1CUSAmIE9yZGVyXHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiByb3V0ZXJMaW5rPVwiL21hbmFnZS9wbGFub2dyYW0vcGxhbm8tdG9vbHMvc3dhcC10ZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICBUZW1wbGF0ZSBTd2FwXHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiByb3V0ZXJMaW5rPVwiL21hbmFnZS9wbGFub2dyYW0vcGxhbm8tdG9vbHMvbW92ZS1idWNrZXRcIj5cclxuICAgICAgICAgICAgTW92ZSBTdG9yZSBCdWNrZXRcclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIHJvdXRlckxpbms9XCIvbWFuYWdlL3BsYW5vZ3JhbS9wbGFuby10b29scy9jYWQtZmlsZXNcIj5cclxuICAgICAgICAgICAgQ0FEIEZpbGVzXHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiAoY2xpY2spPVwib25DbGlja0NyZWF0ZUZpeHR1cmVUZW1wbGF0ZSgpXCI+XHJcbiAgICAgICAgICAgIENyZWF0ZSBUZW1wbGF0ZVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPGhyPlxyXG48cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+Il19
76
+ args: [{ selector: "lib-tools-parent", template: "<div class=\"plano-tools-hub\">\n <div class=\"hub-header mb-4\">\n <h4 class=\"mb-1\">Plano Tools</h4>\n <p class=\"text-muted small mb-0\">\n Utilities for managing planograms, layouts, exports and templates.\n </p>\n </div>\n\n <div class=\"tool-section mb-4\">\n <h6 class=\"section-title\">Export &amp; Inspect</h6>\n <div class=\"card-grid\">\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/migrate\">\n <div class=\"icon\"><i class=\"bi bi-images\"></i></div>\n <div class=\"title\">Download Layout Images</div>\n <div class=\"desc\">Export layout images store by store.</div>\n </a>\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/cad-render\">\n <div class=\"icon\"><i class=\"bi bi-bounding-box\"></i></div>\n <div class=\"title\">Check CAD Output</div>\n <div class=\"desc\">Paste CAD data and preview the parsed layout.</div>\n </a>\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/cad-files\">\n <div class=\"icon\"><i class=\"bi bi-folder2-open\"></i></div>\n <div class=\"title\">CAD Files</div>\n <div class=\"desc\">List uploaded CAD &amp; Kissflow files for a store.</div>\n </a>\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/data-export\">\n <div class=\"icon\"><i class=\"bi bi-database-down\"></i></div>\n <div class=\"title\">Data Export</div>\n <div class=\"desc\">Query planogram fixtures and export as Excel.</div>\n </a>\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/store-exports\">\n <div class=\"icon\"><i class=\"bi bi-file-earmark-spreadsheet\"></i></div>\n <div class=\"title\">MBQ &amp; Order</div>\n <div class=\"desc\">Generate per-store fixture export bundles.</div>\n </a>\n </div>\n </div>\n\n <div class=\"tool-section mb-4\">\n <h6 class=\"section-title\">Edit &amp; Modify</h6>\n <div class=\"card-grid\">\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/allow-edit\">\n <div class=\"icon\"><i class=\"bi bi-pencil-square\"></i></div>\n <div class=\"title\">Allow Edit</div>\n <div class=\"desc\">Re-enable editing on a published task without losing responses.</div>\n </a>\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/modify-fixture-numbers\">\n <div class=\"icon\"><i class=\"bi bi-input-cursor-text\"></i></div>\n <div class=\"title\">Modify Fixture Numbers</div>\n <div class=\"desc\">Renumber fixtures in a planogram.</div>\n </a>\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/layout-touchup\">\n <div class=\"icon\"><i class=\"bi bi-arrows-move\"></i></div>\n <div class=\"title\">Layout Touchup</div>\n <div class=\"desc\">Reposition or resize layout elements without invalidating responses.</div>\n </a>\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/swap-template\">\n <div class=\"icon\"><i class=\"bi bi-arrow-left-right\"></i></div>\n <div class=\"title\">Template Swap</div>\n <div class=\"desc\">Replace one fixture template with another.</div>\n </a>\n <a class=\"tool-card\" routerLink=\"/manage/planogram/plano-tools/move-bucket\">\n <div class=\"icon\"><i class=\"bi bi-arrow-down-up\"></i></div>\n <div class=\"title\">Move Store Bucket</div>\n <div class=\"desc\">Move a floor between Onboarding and ManagePlano.</div>\n </a>\n </div>\n </div>\n\n <div class=\"tool-section mb-4\">\n <h6 class=\"section-title text-danger\">Destructive</h6>\n <div class=\"card-grid\">\n <a class=\"tool-card tool-card-danger\" routerLink=\"/manage/planogram/plano-tools/delete-task\">\n <div class=\"icon\"><i class=\"bi bi-trash\"></i></div>\n <div class=\"title\">Delete Task</div>\n <div class=\"desc\">Remove a task and its responses.</div>\n </a>\n <a class=\"tool-card tool-card-danger\" routerLink=\"/manage/planogram/plano-tools/delete-floor\">\n <div class=\"icon\"><i class=\"bi bi-trash3\"></i></div>\n <div class=\"title\">Delete Floor</div>\n <div class=\"desc\">Remove a floor and all rows referencing it.</div>\n </a>\n </div>\n </div>\n\n <div class=\"tool-section\">\n <h6 class=\"section-title\">Create</h6>\n <div class=\"card-grid\">\n <button type=\"button\" class=\"tool-card tool-card-primary\" (click)=\"onClickCreateFixtureTemplate()\">\n <div class=\"icon\"><i class=\"bi bi-plus-lg text-white\" ></i></div>\n <div class=\"title\">Create Template</div>\n <div class=\"desc\">Start a new fixture template from scratch.</div>\n </button>\n </div>\n </div>\n</div>\n", styles: [".plano-tools-hub{padding:.25rem}.hub-header h4{font-weight:600;color:#0f172a}.section-title{font-weight:600;color:#475569;text-transform:uppercase;letter-spacing:.04em;font-size:.75rem;margin-bottom:.75rem}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:1rem}.tool-card{display:block;width:100%;text-align:left;background:#fff;border:1px solid #e5e7eb;border-radius:10px;padding:1rem 1.1rem;text-decoration:none;color:inherit;transition:border-color .15s,box-shadow .15s,transform .15s;cursor:pointer}.tool-card:hover{border-color:#94a3b8;box-shadow:0 4px 12px #0f172a0f;transform:translateY(-1px)}.tool-card .icon{width:36px;height:36px;border-radius:8px;background:#eff6ff;color:#2563eb;display:flex;align-items:center;justify-content:center;font-size:1.1rem;margin-bottom:.6rem}.tool-card .title{font-weight:600;color:#0f172a;margin-bottom:.25rem}.tool-card .desc{font-size:.825rem;color:#64748b;line-height:1.35}.tool-card.tool-card-danger .icon{background:#fef2f2;color:#dc2626}.tool-card.tool-card-danger:hover{border-color:#fca5a5}.tool-card.tool-card-primary{border-color:#16a34a;background:#f0fdf4}.tool-card.tool-card-primary .icon{background:#16a34a;color:#fff;font-size:1.5rem;line-height:1;font-weight:700}.tool-card.tool-card-primary .title{color:#14532d}.tool-card.tool-card-primary:hover{border-color:#15803d;box-shadow:0 4px 14px #16a34a2e}\n"] }]
77
+ }], ctorParameters: () => [{ type: i1.NgbModal }, { type: i2.Router }, { type: i3.GlobalStateService }, { type: i3.PageInfoService }] });
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHMtcGFyZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL3BsYW5vLXRvb2xzL3Rvb2xzLXBhcmVudC90b29scy1wYXJlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvdG9vbHMtcGFyZW50L3Rvb2xzLXBhcmVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLCtGQUErRixDQUFDO0FBRy9JLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixPQUFPLEVBQ1AsU0FBUyxHQUNWLE1BQU0sTUFBTSxDQUFDOzs7OztBQU9kLE1BQU0sT0FBTyxvQkFBb0I7SUFLckI7SUFDQTtJQUNBO0lBQ0E7SUFQVixRQUFRLENBQVM7SUFFQSxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUNoRCxZQUNVLFFBQWtCLEVBQ2xCLE1BQWMsRUFDZCxFQUFzQixFQUN0QixRQUF5QjtRQUh6QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxPQUFFLEdBQUYsRUFBRSxDQUFvQjtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtJQUNoQyxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVuQixJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWM7YUFDbkIsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsdURBQXVEO1FBQ2pGLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxxQ0FBcUM7UUFDeEQsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsNEJBQTRCO1FBQ3RELG9CQUFvQixFQUFFLENBQ3ZCO2FBQ0EsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksRUFBRSxNQUFNLENBQUM7YUFDOUI7aUJBQU07Z0JBQ0wsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBVyxDQUNqRCxDQUFDO2dCQUNGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxFQUFFLE1BQU0sQ0FBQzthQUNwQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0QyxpQ0FBaUM7UUFDakMsTUFBTTtRQUNOLDBCQUEwQjtRQUMxQixtREFBbUQ7UUFDbkQsdUJBQXVCO1FBQ3ZCLDBCQUEwQjtRQUMxQixPQUFPO1FBQ1AsTUFBTTtRQUNOLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsdUJBQXVCO1FBQ3ZCLHlCQUF5QjtRQUN6QixPQUFPO1FBQ1AsTUFBTTtJQUNSLENBQUM7SUFFRCw0QkFBNEI7UUFDMUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsOEJBQThCLEVBQUU7WUFDbEUsUUFBUSxFQUFFLElBQUk7WUFDZCxJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNwRCxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzlCLElBQUksTUFBTSxFQUFFO2dCQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUNsQixDQUFDLGtEQUFrRCxDQUFDLEVBQ3BELEVBQUUsV0FBVyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLENBQzFELENBQUM7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzt3R0F0RVUsb0JBQW9COzRGQUFwQixvQkFBb0Isd0RDbEJqQyx1eEpBaUdBOzs0RkQvRWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgQ3JlYXRlRml4dHVyZVRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2ZpeHR1cmUtdGVtcGxhdGUtdGFibGUvcG9wdXBzL2NyZWF0ZS1maXh0dXJlLXRlbXBsYXRlL2NyZWF0ZS1maXh0dXJlLXRlbXBsYXRlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UsIFBhZ2VJbmZvU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHtcclxuICBkZWJvdW5jZVRpbWUsXHJcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXHJcbiAgZmlsdGVyLFxyXG4gIFN1YmplY3QsXHJcbiAgdGFrZVVudGlsLFxyXG59IGZyb20gXCJyeGpzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItdG9vbHMtcGFyZW50XCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi90b29scy1wYXJlbnQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL3Rvb2xzLXBhcmVudC5jb21wb25lbnQuc2Nzc1wiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVG9vbHNQYXJlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGNsaWVudElkOiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBuZ2JNb2RhbDogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFBhZ2VEYXRhKCk7XHJcblxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksIC8vIFN1YnNjcmlwdGlvbiB3aWxsIGJlIGNhbmNlbGxlZCBvbiBjb21wb25lbnQgZGVzdHJveS5cclxuICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSwgLy8gVG8gYXZvaWQgaW1tZWRpYXRlIGZyZXF1ZW50IGNhbGxzLlxyXG4gICAgICAgIGZpbHRlcigoZGF0YSkgPT4gISFkYXRhKSwgLy8gRmlsdGVyaW5nIG51bGwvdW5kZWZpbmVkLlxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIC8vIEVtaXR0aW5nIG9ubHkgZGlmZmVyZW50IHZhbHVlcy4gKElnbm9yZXMgc2FtZSBjbGllbnRJZCkuXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGE/LmNsaWVudCkge1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGRhdGE/LmNsaWVudDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGhlYWRlckRhdGEgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIGFzIHN0cmluZyxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gaGVhZGVyRGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQYWdlRGF0YSgpIHtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoXCJQbGFubyBUb29sc1wiKTtcclxuICAgIC8vIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoW1xyXG4gICAgLy8gICB7XHJcbiAgICAvLyAgICAgdGl0bGU6IFwiUGxhbm9ncmFtXCIsXHJcbiAgICAvLyAgICAgcGF0aDogXCIvbWFuYWdlL3BsYW5vZ3JhbS9tYW5hZ2UtcGxhbm9ncmFtc1wiLFxyXG4gICAgLy8gICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgIC8vICAgICBpc1NlcGFyYXRvcjogZmFsc2UsXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIHtcclxuICAgIC8vICAgICB0aXRsZTogXCJcIixcclxuICAgIC8vICAgICBwYXRoOiBcIlwiLFxyXG4gICAgLy8gICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgIC8vICAgICBpc1NlcGFyYXRvcjogdHJ1ZSxcclxuICAgIC8vICAgfSxcclxuICAgIC8vIF0pO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja0NyZWF0ZUZpeHR1cmVUZW1wbGF0ZSgpIHtcclxuICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKENyZWF0ZUZpeHR1cmVUZW1wbGF0ZUNvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgc2l6ZTogXCJtZFwiLFxyXG4gICAgfSk7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5jbGllbnRJZCA9IHRoaXMuY2xpZW50SWQ7XHJcbiAgICBtb2RlbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgIFtcIi9tYW5hZ2UvcGxhbm9ncmFtL2ZpeHR1cmUtdGVtcGxhdGUvYmFzaWMtZGV0YWlsc1wiXSxcclxuICAgICAgICAgIHsgcXVlcnlQYXJhbXM6IHsgdGVtcGxhdGVJZDogcmVzdWx0Ll9pZCwgaXNFZGl0OiB0cnVlIH0gfSxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJwbGFuby10b29scy1odWJcIj5cbiAgPGRpdiBjbGFzcz1cImh1Yi1oZWFkZXIgbWItNFwiPlxuICAgIDxoNCBjbGFzcz1cIm1iLTFcIj5QbGFubyBUb29sczwvaDQ+XG4gICAgPHAgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG1iLTBcIj5cbiAgICAgIFV0aWxpdGllcyBmb3IgbWFuYWdpbmcgcGxhbm9ncmFtcywgbGF5b3V0cywgZXhwb3J0cyBhbmQgdGVtcGxhdGVzLlxuICAgIDwvcD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInRvb2wtc2VjdGlvbiBtYi00XCI+XG4gICAgPGg2IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkV4cG9ydCAmYW1wOyBJbnNwZWN0PC9oNj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ncmlkXCI+XG4gICAgICA8YSBjbGFzcz1cInRvb2wtY2FyZFwiIHJvdXRlckxpbms9XCIvbWFuYWdlL3BsYW5vZ3JhbS9wbGFuby10b29scy9taWdyYXRlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCI+PGkgY2xhc3M9XCJiaSBiaS1pbWFnZXNcIj48L2k+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPkRvd25sb2FkIExheW91dCBJbWFnZXM8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NcIj5FeHBvcnQgbGF5b3V0IGltYWdlcyBzdG9yZSBieSBzdG9yZS48L2Rpdj5cbiAgICAgIDwvYT5cbiAgICAgIDxhIGNsYXNzPVwidG9vbC1jYXJkXCIgcm91dGVyTGluaz1cIi9tYW5hZ2UvcGxhbm9ncmFtL3BsYW5vLXRvb2xzL2NhZC1yZW5kZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImljb25cIj48aSBjbGFzcz1cImJpIGJpLWJvdW5kaW5nLWJveFwiPjwvaT48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+Q2hlY2sgQ0FEIE91dHB1dDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY1wiPlBhc3RlIENBRCBkYXRhIGFuZCBwcmV2aWV3IHRoZSBwYXJzZWQgbGF5b3V0LjwvZGl2PlxuICAgICAgPC9hPlxuICAgICAgPGEgY2xhc3M9XCJ0b29sLWNhcmRcIiByb3V0ZXJMaW5rPVwiL21hbmFnZS9wbGFub2dyYW0vcGxhbm8tdG9vbHMvY2FkLWZpbGVzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCI+PGkgY2xhc3M9XCJiaSBiaS1mb2xkZXIyLW9wZW5cIj48L2k+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPkNBRCBGaWxlczwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY1wiPkxpc3QgdXBsb2FkZWQgQ0FEICZhbXA7IEtpc3NmbG93IGZpbGVzIGZvciBhIHN0b3JlLjwvZGl2PlxuICAgICAgPC9hPlxuICAgICAgPGEgY2xhc3M9XCJ0b29sLWNhcmRcIiByb3V0ZXJMaW5rPVwiL21hbmFnZS9wbGFub2dyYW0vcGxhbm8tdG9vbHMvZGF0YS1leHBvcnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImljb25cIj48aSBjbGFzcz1cImJpIGJpLWRhdGFiYXNlLWRvd25cIj48L2k+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPkRhdGEgRXhwb3J0PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjXCI+UXVlcnkgcGxhbm9ncmFtIGZpeHR1cmVzIGFuZCBleHBvcnQgYXMgRXhjZWwuPC9kaXY+XG4gICAgICA8L2E+XG4gICAgICA8YSBjbGFzcz1cInRvb2wtY2FyZFwiIHJvdXRlckxpbms9XCIvbWFuYWdlL3BsYW5vZ3JhbS9wbGFuby10b29scy9zdG9yZS1leHBvcnRzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCI+PGkgY2xhc3M9XCJiaSBiaS1maWxlLWVhcm1hcmstc3ByZWFkc2hlZXRcIj48L2k+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPk1CUSAmYW1wOyBPcmRlcjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY1wiPkdlbmVyYXRlIHBlci1zdG9yZSBmaXh0dXJlIGV4cG9ydCBidW5kbGVzLjwvZGl2PlxuICAgICAgPC9hPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwidG9vbC1zZWN0aW9uIG1iLTRcIj5cbiAgICA8aDYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+RWRpdCAmYW1wOyBNb2RpZnk8L2g2PlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWdyaWRcIj5cbiAgICAgIDxhIGNsYXNzPVwidG9vbC1jYXJkXCIgcm91dGVyTGluaz1cIi9tYW5hZ2UvcGxhbm9ncmFtL3BsYW5vLXRvb2xzL2FsbG93LWVkaXRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImljb25cIj48aSBjbGFzcz1cImJpIGJpLXBlbmNpbC1zcXVhcmVcIj48L2k+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPkFsbG93IEVkaXQ8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NcIj5SZS1lbmFibGUgZWRpdGluZyBvbiBhIHB1Ymxpc2hlZCB0YXNrIHdpdGhvdXQgbG9zaW5nIHJlc3BvbnNlcy48L2Rpdj5cbiAgICAgIDwvYT5cbiAgICAgIDxhIGNsYXNzPVwidG9vbC1jYXJkXCIgcm91dGVyTGluaz1cIi9tYW5hZ2UvcGxhbm9ncmFtL3BsYW5vLXRvb2xzL21vZGlmeS1maXh0dXJlLW51bWJlcnNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImljb25cIj48aSBjbGFzcz1cImJpIGJpLWlucHV0LWN1cnNvci10ZXh0XCI+PC9pPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5Nb2RpZnkgRml4dHVyZSBOdW1iZXJzPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjXCI+UmVudW1iZXIgZml4dHVyZXMgaW4gYSBwbGFub2dyYW0uPC9kaXY+XG4gICAgICA8L2E+XG4gICAgICA8YSBjbGFzcz1cInRvb2wtY2FyZFwiIHJvdXRlckxpbms9XCIvbWFuYWdlL3BsYW5vZ3JhbS9wbGFuby10b29scy9sYXlvdXQtdG91Y2h1cFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvblwiPjxpIGNsYXNzPVwiYmkgYmktYXJyb3dzLW1vdmVcIj48L2k+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPkxheW91dCBUb3VjaHVwPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjXCI+UmVwb3NpdGlvbiBvciByZXNpemUgbGF5b3V0IGVsZW1lbnRzIHdpdGhvdXQgaW52YWxpZGF0aW5nIHJlc3BvbnNlcy48L2Rpdj5cbiAgICAgIDwvYT5cbiAgICAgIDxhIGNsYXNzPVwidG9vbC1jYXJkXCIgcm91dGVyTGluaz1cIi9tYW5hZ2UvcGxhbm9ncmFtL3BsYW5vLXRvb2xzL3N3YXAtdGVtcGxhdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImljb25cIj48aSBjbGFzcz1cImJpIGJpLWFycm93LWxlZnQtcmlnaHRcIj48L2k+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlRlbXBsYXRlIFN3YXA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NcIj5SZXBsYWNlIG9uZSBmaXh0dXJlIHRlbXBsYXRlIHdpdGggYW5vdGhlci48L2Rpdj5cbiAgICAgIDwvYT5cbiAgICAgIDxhIGNsYXNzPVwidG9vbC1jYXJkXCIgcm91dGVyTGluaz1cIi9tYW5hZ2UvcGxhbm9ncmFtL3BsYW5vLXRvb2xzL21vdmUtYnVja2V0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCI+PGkgY2xhc3M9XCJiaSBiaS1hcnJvdy1kb3duLXVwXCI+PC9pPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5Nb3ZlIFN0b3JlIEJ1Y2tldDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY1wiPk1vdmUgYSBmbG9vciBiZXR3ZWVuIE9uYm9hcmRpbmcgYW5kIE1hbmFnZVBsYW5vLjwvZGl2PlxuICAgICAgPC9hPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwidG9vbC1zZWN0aW9uIG1iLTRcIj5cbiAgICA8aDYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlIHRleHQtZGFuZ2VyXCI+RGVzdHJ1Y3RpdmU8L2g2PlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWdyaWRcIj5cbiAgICAgIDxhIGNsYXNzPVwidG9vbC1jYXJkIHRvb2wtY2FyZC1kYW5nZXJcIiByb3V0ZXJMaW5rPVwiL21hbmFnZS9wbGFub2dyYW0vcGxhbm8tdG9vbHMvZGVsZXRlLXRhc2tcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImljb25cIj48aSBjbGFzcz1cImJpIGJpLXRyYXNoXCI+PC9pPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5EZWxldGUgVGFzazwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY1wiPlJlbW92ZSBhIHRhc2sgYW5kIGl0cyByZXNwb25zZXMuPC9kaXY+XG4gICAgICA8L2E+XG4gICAgICA8YSBjbGFzcz1cInRvb2wtY2FyZCB0b29sLWNhcmQtZGFuZ2VyXCIgcm91dGVyTGluaz1cIi9tYW5hZ2UvcGxhbm9ncmFtL3BsYW5vLXRvb2xzL2RlbGV0ZS1mbG9vclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvblwiPjxpIGNsYXNzPVwiYmkgYmktdHJhc2gzXCI+PC9pPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5EZWxldGUgRmxvb3I8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NcIj5SZW1vdmUgYSBmbG9vciBhbmQgYWxsIHJvd3MgcmVmZXJlbmNpbmcgaXQuPC9kaXY+XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJ0b29sLXNlY3Rpb25cIj5cbiAgICA8aDYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+Q3JlYXRlPC9oNj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ncmlkXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInRvb2wtY2FyZCB0b29sLWNhcmQtcHJpbWFyeVwiIChjbGljayk9XCJvbkNsaWNrQ3JlYXRlRml4dHVyZVRlbXBsYXRlKClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImljb25cIj48aSBjbGFzcz1cImJpIGJpLXBsdXMtbGcgdGV4dC13aGl0ZVwiID48L2k+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPkNyZWF0ZSBUZW1wbGF0ZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY1wiPlN0YXJ0IGEgbmV3IGZpeHR1cmUgdGVtcGxhdGUgZnJvbSBzY3JhdGNoLjwvZGl2PlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=