tango-app-ui-store-ticket-infra 3.7.7 → 3.7.9
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/tango-store-infra/tango-store-infra.component.mjs +122 -13
- package/esm2022/lib/components/ticket-infra-v2/file-logs/file-logs.component.mjs +210 -0
- package/esm2022/lib/components/ticket-infra-v2/remote-terminal/remote-terminal.component.mjs +355 -0
- package/esm2022/lib/services/tickets.service.mjs +17 -1
- package/esm2022/lib/tango-store-infra.module.mjs +5 -3
- package/fesm2022/tango-app-ui-store-ticket-infra.mjs +705 -34
- package/fesm2022/tango-app-ui-store-ticket-infra.mjs.map +1 -1
- package/lib/components/tango-store-infra/tango-store-infra.component.d.ts +25 -2
- package/lib/components/ticket-infra-v2/file-logs/file-logs.component.d.ts +76 -0
- package/lib/components/ticket-infra-v2/remote-terminal/remote-terminal.component.d.ts +76 -0
- package/lib/services/tickets.service.d.ts +4 -0
- package/lib/tango-store-infra.module.d.ts +9 -7
- package/package.json +1 -1
|
@@ -1,19 +1,27 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
2
|
import { Subject, takeUntil } from 'rxjs';
|
|
3
|
+
import { RemoteTerminalComponent } from '../ticket-infra-v2/remote-terminal/remote-terminal.component';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
import * as i1 from "tango-app-ui-global";
|
|
5
6
|
import * as i2 from "@angular/router";
|
|
6
|
-
import * as i3 from "
|
|
7
|
-
import * as i4 from "
|
|
8
|
-
import * as i5 from "
|
|
9
|
-
import * as i6 from "
|
|
10
|
-
import * as i7 from "../ticket-
|
|
11
|
-
import * as i8 from "../
|
|
7
|
+
import * as i3 from "../../services/tickets.service";
|
|
8
|
+
import * as i4 from "@ng-bootstrap/ng-bootstrap";
|
|
9
|
+
import * as i5 from "tango-app-ui-shared";
|
|
10
|
+
import * as i6 from "@angular/common";
|
|
11
|
+
import * as i7 from "../ticket-infra/ticket-infra.component";
|
|
12
|
+
import * as i8 from "../summary-infra/summary-infra.component";
|
|
13
|
+
import * as i9 from "../footfall-directory/footfall-directory.component";
|
|
14
|
+
import * as i10 from "../ticket-camera-angle/ticket-camera-angle.component";
|
|
15
|
+
import * as i11 from "../ticket-infra-v2/ticket-infra-v2.component";
|
|
16
|
+
import * as i12 from "../ticket-infra-v2/file-logs/file-logs.component";
|
|
12
17
|
export class TangoStoreInfraComponent {
|
|
13
18
|
pageInfo;
|
|
14
19
|
router;
|
|
15
20
|
gs;
|
|
16
21
|
route;
|
|
22
|
+
ticketsService;
|
|
23
|
+
modal;
|
|
24
|
+
authService;
|
|
17
25
|
selectedTab;
|
|
18
26
|
detach = new Subject();
|
|
19
27
|
storeId;
|
|
@@ -21,11 +29,14 @@ export class TangoStoreInfraComponent {
|
|
|
21
29
|
selectedTab1;
|
|
22
30
|
subTabFromUrlApplied = false;
|
|
23
31
|
clientName;
|
|
24
|
-
constructor(pageInfo, router, gs, route) {
|
|
32
|
+
constructor(pageInfo, router, gs, route, ticketsService, modal, authService) {
|
|
25
33
|
this.pageInfo = pageInfo;
|
|
26
34
|
this.router = router;
|
|
27
35
|
this.gs = gs;
|
|
28
36
|
this.route = route;
|
|
37
|
+
this.ticketsService = ticketsService;
|
|
38
|
+
this.modal = modal;
|
|
39
|
+
this.authService = authService;
|
|
29
40
|
}
|
|
30
41
|
headerFilters;
|
|
31
42
|
ngOnDestroy() {
|
|
@@ -74,7 +85,7 @@ export class TangoStoreInfraComponent {
|
|
|
74
85
|
this.gs.dataRangeValue.pipe(takeUntil(this.detach)).subscribe({
|
|
75
86
|
next: (data) => {
|
|
76
87
|
if (data) {
|
|
77
|
-
this.headerFilters = data;
|
|
88
|
+
this.headerFilters = { ...data };
|
|
78
89
|
this.storeId =
|
|
79
90
|
data && data.store ? data.store : this.router.url.split("/")[3];
|
|
80
91
|
this.clientName = data?.clientName ? data?.clientName : '';
|
|
@@ -86,6 +97,9 @@ export class TangoStoreInfraComponent {
|
|
|
86
97
|
}
|
|
87
98
|
this.updateStoreIdQueryParam(this.storeId);
|
|
88
99
|
this.setPageData();
|
|
100
|
+
this.loadStoreName(this.storeId);
|
|
101
|
+
this.loadLiveStatus(this.storeId, data);
|
|
102
|
+
this.loadClient(data);
|
|
89
103
|
}
|
|
90
104
|
},
|
|
91
105
|
});
|
|
@@ -169,6 +183,76 @@ export class TangoStoreInfraComponent {
|
|
|
169
183
|
}
|
|
170
184
|
this.pageInfo.setBreadcrumbs(breadcrumbs);
|
|
171
185
|
}
|
|
186
|
+
// Store name for the card above the tabs. The header filter doesn't carry it on
|
|
187
|
+
// this page, so it comes from get-store. '--' while loading or on failure.
|
|
188
|
+
storeNameFromApi = '';
|
|
189
|
+
get storeName() { return this.storeNameFromApi || '--'; }
|
|
190
|
+
// Open / close time from the store profile, as the store header shows them.
|
|
191
|
+
storeOpen = '';
|
|
192
|
+
storeClose = '';
|
|
193
|
+
loadStoreName(storeId) {
|
|
194
|
+
this.storeNameFromApi = '';
|
|
195
|
+
this.storeOpen = '';
|
|
196
|
+
this.storeClose = '';
|
|
197
|
+
if (!storeId)
|
|
198
|
+
return;
|
|
199
|
+
this.ticketsService.getStoreDetails(storeId).pipe(takeUntil(this.detach)).subscribe({
|
|
200
|
+
next: (res) => {
|
|
201
|
+
// Ignore a late reply for a store that is no longer selected.
|
|
202
|
+
if (storeId !== this.storeId)
|
|
203
|
+
return;
|
|
204
|
+
this.storeNameFromApi = res?.data?.storeName || '';
|
|
205
|
+
this.storeOpen = res?.data?.storeProfile?.open || '';
|
|
206
|
+
this.storeClose = res?.data?.storeProfile?.close || '';
|
|
207
|
+
},
|
|
208
|
+
error: () => { },
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
// The store-card buttons (Terminal access, File access, Call) are for Tango users only.
|
|
212
|
+
get isTango() { return this.gs.userAccess.value?.userType === 'tango'; }
|
|
213
|
+
// ...and only for Infra V2 clients. Same call and field the Tickets page uses for
|
|
214
|
+
// its Infra V2 tab. Hidden while loading or on error.
|
|
215
|
+
infraTicketType = null;
|
|
216
|
+
clientDisplayName = '';
|
|
217
|
+
get showStoreActions() { return this.isTango && this.infraTicketType === 'V2'; }
|
|
218
|
+
loadClient(header) {
|
|
219
|
+
this.infraTicketType = null;
|
|
220
|
+
this.clientDisplayName = '';
|
|
221
|
+
const clientId = header?.client || String(this.storeId || '').split('-')[0];
|
|
222
|
+
if (!clientId)
|
|
223
|
+
return;
|
|
224
|
+
this.authService.getBrandDetails(clientId).pipe(takeUntil(this.detach)).subscribe({
|
|
225
|
+
next: (res) => {
|
|
226
|
+
this.infraTicketType = res?.data?.ticketConfigs?.infraTicketType ?? null;
|
|
227
|
+
this.clientDisplayName = res?.data?.clientName || '';
|
|
228
|
+
},
|
|
229
|
+
error: () => { },
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
// Live / Not Live beside the name, by the same rule as the Summary card's tiles.
|
|
233
|
+
// Empty - and hidden - while loading, for a non-V2 client, or for a store V2
|
|
234
|
+
// does not count (inactive, or no first file yet).
|
|
235
|
+
liveStatus = '';
|
|
236
|
+
loadLiveStatus(storeId, header) {
|
|
237
|
+
this.liveStatus = '';
|
|
238
|
+
const clientId = header?.client || String(storeId || '').split('-')[0];
|
|
239
|
+
if (!storeId || !clientId || !header?.date?.endDate)
|
|
240
|
+
return;
|
|
241
|
+
const body = {
|
|
242
|
+
clientId: [clientId], fromDate: header.date.startDate || header.date.endDate, toDate: header.date.endDate,
|
|
243
|
+
search: storeId, offset: 1, limit: 50,
|
|
244
|
+
};
|
|
245
|
+
this.ticketsService.storeLiveStatus(body).pipe(takeUntil(this.detach)).subscribe({
|
|
246
|
+
next: (res) => {
|
|
247
|
+
if (storeId !== this.storeId)
|
|
248
|
+
return;
|
|
249
|
+
// search is a partial match (406-1 also finds 406-10), so pick the exact store.
|
|
250
|
+
const row = (res?.data?.rows ?? []).find((r) => r.storeId === storeId);
|
|
251
|
+
this.liveStatus = row?.status === 'Live' || row?.status === 'Not Live' ? row.status : '';
|
|
252
|
+
},
|
|
253
|
+
error: () => { },
|
|
254
|
+
});
|
|
255
|
+
}
|
|
172
256
|
selectedTabs(value) {
|
|
173
257
|
this.selectedTab = value;
|
|
174
258
|
if (this.selectedTab === 'infra') {
|
|
@@ -186,11 +270,36 @@ export class TangoStoreInfraComponent {
|
|
|
186
270
|
queryParams['type'] = type === 'ticketsV2' ? 'infrav2' : 'infra';
|
|
187
271
|
this.router.navigate([], { relativeTo: this.route, queryParams: queryParams });
|
|
188
272
|
}
|
|
189
|
-
|
|
190
|
-
|
|
273
|
+
// Terminal access pop-up: opens at once, then fills from /remote/session.
|
|
274
|
+
// Every call is audit-logged as a session opened, Cancel included.
|
|
275
|
+
session = null;
|
|
276
|
+
sessionState = 'loading';
|
|
277
|
+
sessionError = '';
|
|
278
|
+
openTerminal(tpl) {
|
|
279
|
+
this.session = null;
|
|
280
|
+
this.sessionError = '';
|
|
281
|
+
this.sessionState = 'loading';
|
|
282
|
+
this.modal.open(tpl, { centered: true });
|
|
283
|
+
this.ticketsService.remoteSession(this.storeId).pipe(takeUntil(this.detach)).subscribe({
|
|
284
|
+
next: (res) => { this.session = res?.data ?? null; this.sessionState = 'ready'; },
|
|
285
|
+
// The API's own message: "Store not found", "No edge agent...", "not configured".
|
|
286
|
+
error: (err) => { this.sessionError = err?.error?.error || ''; this.sessionState = 'error'; },
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
// Connect: swap the confirmation for the terminal pop-up. Static backdrop and
|
|
290
|
+
// no Esc, so a stray click cannot drop a live shell; it closes via Close.
|
|
291
|
+
connect(confirmRef) {
|
|
292
|
+
confirmRef.close();
|
|
293
|
+
const ref = this.modal.open(RemoteTerminalComponent, {
|
|
294
|
+
size: 'xl', centered: true, backdrop: 'static', keyboard: false, modalDialogClass: 'remote-terminal-modal',
|
|
295
|
+
});
|
|
296
|
+
ref.componentInstance.session = this.session;
|
|
297
|
+
}
|
|
298
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TangoStoreInfraComponent, deps: [{ token: i1.PageInfoService }, { token: i2.Router }, { token: i1.GlobalStateService }, { token: i2.ActivatedRoute }, { token: i3.TicketsService }, { token: i4.NgbModal }, { token: i5.AuthService }], target: i0.ɵɵFactoryTarget.Component });
|
|
299
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TangoStoreInfraComponent, selector: "lib-tango-store-infra", ngImport: i0, template: "<!-- Store card: name and timings from get-store, Live status from the V2 store list. -->\r\n<div class=\"card mb-5 py-4 px-5\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"me-3\"><svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#D1FADF\"/>\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#ECFDF3\" stroke-width=\"6\"/>\r\n <path d=\"M15.6799 18.8039L15.6267 18.8871C15.0686 19.8741 15.6644 21.1215 16.7361 21.2646C16.8331 21.2765 16.9235 21.2828 17.0118 21.2828C17.5899 21.2828 18.1011 21.0348 18.4574 20.648L19.0107 20.0474L19.5621 20.6498C19.9141 21.0342 20.4241 21.2828 21.0061 21.2828C21.5856 21.2828 22.0985 21.0338 22.4502 20.6498L23.0033 20.0455L23.5565 20.6498C23.9081 21.0338 24.4211 21.2828 25.0005 21.2828C25.58 21.2828 26.0929 21.0338 26.4445 20.6498L26.9977 20.0455L27.5509 20.6498C27.9025 21.0338 28.4155 21.2828 28.9949 21.2828C29.0803 21.2828 29.1733 21.2765 29.2697 21.2647C30.3649 21.1154 30.9627 19.8012 30.324 18.8044C30.324 18.8043 30.324 18.8043 30.3239 18.8042L28.5658 16.0628L28.5658 16.0628L28.5648 16.0614C28.5496 16.0375 28.5121 16.012 28.465 16.012H17.5356C17.4884 16.012 17.4509 16.0375 17.4357 16.0614L17.4351 16.0623L15.6799 18.8039ZM28.6514 23.7372V26.8691V27.6191H27.9014H18.0992H17.3492V26.8691V23.7376C17.239 23.7458 17.1274 23.7501 17.0148 23.7501C16.9725 23.7501 16.9305 23.7494 16.8888 23.7482V26.8691V28.8036C16.8888 29.4471 17.4227 29.9882 18.0992 29.9882H27.9014C28.5779 29.9882 29.1118 29.4471 29.1118 28.8036V26.8691V23.7484C29.072 23.7495 29.032 23.7501 28.9918 23.7501C28.8774 23.7501 28.7639 23.7457 28.6514 23.7372Z\" stroke=\"#027A48\" stroke-width=\"1.5\"/>\r\n </svg></span>\r\n <div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"store-card-name\">{{ storeName }}</span>\r\n <span *ngIf=\"liveStatus\" class=\"live-status ms-4\" [class.down]=\"liveStatus === 'Not Live'\">\r\n <span class=\"live-dot\"></span>{{ liveStatus }}\r\n </span>\r\n </div>\r\n <div class=\"store-card-meta d-flex align-items-center mt-1\">\r\n <span>{{ storeId || '--' }}</span>\r\n <span class=\"mx-2\">\u00B7</span>\r\n <svg class=\"me-1\" width=\"14\" height=\"14\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 4.5V9L12 10.5M16.5 9C16.5 13.1421 13.1421 16.5 9 16.5C4.85786 16.5 1.5 13.1421 1.5 9C1.5 4.85786 4.85786 1.5 9 1.5C13.1421 1.5 16.5 4.85786 16.5 9Z\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>{{ storeOpen || '--' }} - {{ storeClose || '--' }}</span>\r\n </div>\r\n </div>\r\n <!-- Tango users of Infra V2 clients only. The hovered button expands; Terminal access is expanded while none is. -->\r\n <div *ngIf=\"showStoreActions\" class=\"store-actions ms-auto d-flex align-items-center gap-3\">\r\n <button type=\"button\" class=\"store-act is-default\" (click)=\"openTerminal(terminalTpl)\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"2.5\" y=\"3.5\" width=\"19\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.8\"/>\r\n <path d=\"M8 21H16M12 16.5V21M6.5 8L9 10L6.5 12M11 12H14\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">Terminal access</span>\r\n </button>\r\n <button type=\"button\" class=\"store-act\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 7.5C3 6.4 3.9 5.5 5 5.5H9.2L11.2 7.5H19C20.1 7.5 21 8.4 21 9.5V17C21 18.1 20.1 19 19 19H5C3.9 19 3 18.1 3 17V7.5Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">File access</span>\r\n </button>\r\n <button type=\"button\" class=\"store-act\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M8.6 4.5L6.4 3.6C5.8 3.4 5.1 3.6 4.7 4.1L3.5 5.6C3.1 6.1 3 6.8 3.2 7.4C4.9 12.7 9.3 17.1 14.6 18.8C15.2 19 15.9 18.9 16.4 18.5L17.9 17.3C18.4 16.9 18.6 16.2 18.4 15.6L17.5 13.4C17.3 12.8 16.6 12.5 16 12.6L13.6 13.1C11.9 12.2 10.8 11.1 9.9 9.4L10.4 7C10.5 6.4 10.2 5.7 9.6 5.5L8.6 4.5Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">Call</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"card mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item\" (click)=\"selectedTabs('infra')\"><a [ngClass]=\"selectedTab ==='infra' ? 'active' :''\"\r\n class=\"nav-link cursor-pointer no-border me-6 \">Infra</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('dataMismatch')\">\r\n <a [ngClass]=\"selectedTab ==='dataMismatch' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Data Mismatch</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('cameraAngleChange')\">\r\n <a [ngClass]=\"selectedTab ==='cameraAngleChange' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Camera Angle</a>\r\n </li>\r\n <!-- File logs, at the right end of the row: its own page at ?type=fileLogs. Tango only. -->\r\n <li *ngIf=\"isTango\" class=\"nav-item ms-auto\" (click)=\"selectedTabs('fileLogs')\">\r\n <a [ngClass]=\"selectedTab ==='fileLogs' ? 'active' :''\" class=\"nav-link cursor-pointer file-logs-link\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M14 3H7C5.9 3 5 3.9 5 5V19C5 20.1 5.9 21 7 21H17C18.1 21 19 20.1 19 19V8L14 3Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 3V8H19M9 13H15M9 17H13\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n File logs\r\n </a>\r\n </li>\r\n\r\n <!-- <li *ngIf=\"(gs.userAccess | async)?.userType === 'tango' || clientData?.isVMS\" class=\"nav-item\" (click)=\"selectedTabs('footfall')\">\r\n <a [ngClass]=\"selectedTab ==='footfall' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Footfall Directory</a>\r\n </li> -->\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra'\" class=\"mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('summary')\"><a [ngClass]=\"selectedTab1 ==='summary' ? 'active' :''\"\r\n class=\"nav-link nav-link1 cursor-pointer no-border me-6 \">Summary</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('tickets')\">\r\n <a [ngClass]=\"selectedTab1 ==='tickets' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V1</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('ticketsV2')\">\r\n <a [ngClass]=\"selectedTab1 ==='ticketsV2' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V2</a>\r\n </li>\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='summary'\">\r\n <lib-summary-infra [selectedTab]=\"selectedTab\"></lib-summary-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='tickets'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='ticketsV2'\">\r\n <lib-ticket-infra-v2 [selectedTab]=\"selectedTab\"></lib-ticket-infra-v2>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='dataMismatch'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n\r\n<div *ngIf=\"selectedTab ==='cameraAngleChange'\">\r\n <lib-ticket-camera-angle [selectedTab]=\"selectedTab\"></lib-ticket-camera-angle>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='footfall'\">\r\n <lib-footfall-directory [selectedTab]=\"selectedTab\"></lib-footfall-directory>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='fileLogs' && isTango\">\r\n <lib-file-logs [storeId]=\"storeId\" [clientId]=\"headerFilters?.client\" [date]=\"headerFilters?.date?.endDate\"></lib-file-logs>\r\n</div>\r\n<router-outlet></router-outlet>\r\n\r\n<!-- Terminal access confirmation. Filled from /infra/v2/remote/session; Client name from the client record. -->\r\n<ng-template #terminalTpl let-modal>\r\n <div class=\"access-modal\">\r\n <div class=\"access-head\">\r\n <span class=\"access-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"2.5\" y=\"3.5\" width=\"19\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.8\"/>\r\n <path d=\"M8 21H16M12 16.5V21M6.5 8L9 10L6.5 12M11 12H14\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <span class=\"access-title fs-4 text-gray-800 fw-bold\">Open terminal access?</span>\r\n </div>\r\n <div class=\"access-body\">\r\n <p class=\"access-text\">This opens a command window on the store system. Commands run on the live system.</p>\r\n <div class=\"access-box\">\r\n <!-- Loading: shimmering placeholder rows (see .skel). -->\r\n <ng-container *ngIf=\"sessionState === 'loading'\">\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n </ng-container>\r\n <div *ngIf=\"sessionState === 'error'\" class=\"access-note error\">{{ sessionError || \"Couldn't open the session.\" }}</div>\r\n <ng-container *ngIf=\"sessionState === 'ready'\">\r\n <div class=\"access-row\"><span class=\"access-label\">Client name</span><span class=\"access-value\">{{ clientDisplayName || '--' }}</span></div>\r\n <div class=\"access-row\"><span class=\"access-label\">Store ID</span><span class=\"access-value\">{{ session?.storeId || '--' }}</span></div>\r\n <div class=\"access-row\"><span class=\"access-label\">Store name</span><span class=\"access-value\">{{ session?.storeName || '--' }}</span></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"access-foot\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"modal.close()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"sessionState !== 'ready'\" (click)=\"connect(modal)\">Connect</button>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.nav-item1 .nav-link1.active{border:none;border-radius:0;background:var(--Primary-50, #EAF8FF);border-bottom:2px solid #009BF3!important;padding:8px 12px}.nav-item1 .nav-link1:hover{border:none}.nav-item .nav-link.file-logs-link{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;border-radius:6px}.nav-item .nav-link.file-logs-link:hover{border-bottom:1px solid transparent}.store-card-name{font-size:18px;line-height:28px;font-weight:600;color:var(--Gray-900, #101828)}.store-act{display:inline-flex;align-items:center;height:44px;padding:0 12px;border:0;border-radius:12px;background:var(--Primary-700, #009BF3);color:#fff;font-size:15px;font-weight:700;transition:background-color .3s ease,color .3s ease,padding .3s ease}.store-act svg{flex-shrink:0}.store-act .act-label{max-width:0;opacity:0;margin-left:0;overflow:hidden;white-space:nowrap;transition:max-width .3s ease,opacity .2s ease,margin-left .3s ease}.store-actions:not(:has(.store-act:hover)) .store-act.is-default,.store-act:hover{background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);padding:0 18px}.store-actions:not(:has(.store-act:hover)) .store-act.is-default .act-label,.store-act:hover .act-label{max-width:160px;opacity:1;margin-left:8px}.store-card-meta{font-size:12px;line-height:18px;font-weight:500;color:var(--Gray-500, #667085)}.live-status{display:inline-flex;align-items:center;padding:2px 8px;border-radius:16px;font-size:12px;line-height:18px;font-weight:500;background:#ecfdf3;border:1px solid #ABEFC6;color:#067647}.live-status .live-dot{width:6px;height:6px;border-radius:50%;background:#17b26a;margin-right:6px}.live-status.down{background:#fef3f2;border-color:#fecdca;color:#b42318}.live-status.down .live-dot{background:#d92d20}.access-modal{background:#fff;border-radius:16px;overflow:hidden}.access-head{display:flex;align-items:center;gap:16px;padding:20px 24px;border-bottom:1px solid var(--Gray-200, #EAECF0)}.access-icon{display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;flex-shrink:0;border-radius:12px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)}.access-title{flex:1}.access-body{padding:20px 24px 0}.access-text{margin:0 0 20px;font-size:14px;line-height:20px;color:var(--Gray-500, #667085)}.access-box{padding:16px 20px;border:1px solid var(--Gray-200, #EAECF0);border-radius:12px;background:var(--Gray-50, #F9FAFB)}.access-row{display:flex;align-items:center;padding:8px 0}.access-label{width:180px;flex-shrink:0;font-size:12px;line-height:18px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--Gray-500, #667085)}.access-value{font-size:14px;line-height:20px;font-weight:500;color:var(--Gray-900, #101828)}.skel{display:inline-block;height:14px;margin:3px 0;border-radius:6px;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%;animation:skel-shimmer 1.5s linear infinite}@keyframes skel-shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.skel-label{width:110px;margin-right:70px}.skel-value{width:160px}.access-note{padding:8px 0;font-size:14px;line-height:20px;color:var(--Gray-500, #667085)}.access-note.error{color:var(--Error-700, #B42318)}.access-foot{display:flex;justify-content:flex-end;gap:12px;padding:24px}.access-foot .btn{font-size:14px!important;line-height:20px!important;padding:8px 16px!important}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i7.TicketInfraComponent, selector: "lib-ticket-infra", inputs: ["selectedTab"] }, { kind: "component", type: i8.SummaryInfraComponent, selector: "lib-summary-infra", inputs: ["selectedTab"] }, { kind: "component", type: i9.FootfallDirectoryComponent, selector: "lib-footfall-directory", inputs: ["selectedTab"] }, { kind: "component", type: i10.TicketCameraAngleComponent, selector: "lib-ticket-camera-angle", inputs: ["selectedTab"] }, { kind: "component", type: i11.TicketInfraV2Component, selector: "lib-ticket-infra-v2", inputs: ["selectedTab"] }, { kind: "component", type: i12.FileLogsComponent, selector: "lib-file-logs", inputs: ["storeId", "clientId", "date"] }] });
|
|
191
300
|
}
|
|
192
301
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TangoStoreInfraComponent, decorators: [{
|
|
193
302
|
type: Component,
|
|
194
|
-
args: [{ selector: 'lib-tango-store-infra', template: "<div class=\"card mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item\" (click)=\"selectedTabs('infra')\"><a [ngClass]=\"selectedTab ==='infra' ? 'active' :''\"\r\n class=\"nav-link cursor-pointer no-border me-6 \">Infra</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('dataMismatch')\">\r\n <a [ngClass]=\"selectedTab ==='dataMismatch' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Data Mismatch</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('cameraAngleChange')\">\r\n <a [ngClass]=\"selectedTab ==='cameraAngleChange' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Camera Angle</a>\r\n </li>\r\n\r\n <!-- <li *ngIf=\"(gs.userAccess | async)?.userType === 'tango' || clientData?.isVMS\" class=\"nav-item\" (click)=\"selectedTabs('footfall')\">\r\n <a [ngClass]=\"selectedTab ==='footfall' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Footfall Directory</a>\r\n </li> -->\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra'\" class=\"mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('summary')\"><a [ngClass]=\"selectedTab1 ==='summary' ? 'active' :''\"\r\n class=\"nav-link nav-link1 cursor-pointer no-border me-6 \">Summary</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('tickets')\">\r\n <a [ngClass]=\"selectedTab1 ==='tickets' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V1</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('ticketsV2')\">\r\n <a [ngClass]=\"selectedTab1 ==='ticketsV2' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V2</a>\r\n </li>\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='summary'\">\r\n <lib-summary-infra [selectedTab]=\"selectedTab\"></lib-summary-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='tickets'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='ticketsV2'\">\r\n <lib-ticket-infra-v2 [selectedTab]=\"selectedTab\"></lib-ticket-infra-v2>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='dataMismatch'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n\r\n<div *ngIf=\"selectedTab ==='cameraAngleChange'\">\r\n <lib-ticket-camera-angle [selectedTab]=\"selectedTab\"></lib-ticket-camera-angle>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='footfall'\">\r\n <lib-footfall-directory [selectedTab]=\"selectedTab\"></lib-footfall-directory>\r\n</div>\r\n<router-outlet></router-outlet>", styles: [".nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.nav-item1 .nav-link1.active{border:none;border-radius:0;background:var(--Primary-50, #EAF8FF);border-bottom:2px solid #009BF3!important;padding:8px 12px}.nav-item1 .nav-link1:hover{border:none}\n"] }]
|
|
195
|
-
}], ctorParameters: () => [{ type: i1.PageInfoService }, { type: i2.Router }, { type: i1.GlobalStateService }, { type: i2.ActivatedRoute }] });
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuZ28tc3RvcmUtaW5mcmEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtdGlja2V0LWluZnJhL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1zdG9yZS1pbmZyYS90YW5nby1zdG9yZS1pbmZyYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS10aWNrZXQtaW5mcmEvc3JjL2xpYi9jb21wb25lbnRzL3RhbmdvLXN0b3JlLWluZnJhL3RhbmdvLXN0b3JlLWluZnJhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBUTFDLE1BQU0sT0FBTyx3QkFBd0I7SUFRZjtJQUFpQztJQUFxQjtJQUE4QjtJQVB4RyxXQUFXLENBQU07SUFDVCxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUMvQixPQUFPLENBQU07SUFDYixJQUFJLENBQU07SUFDVixZQUFZLENBQU07SUFDVixvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDckMsVUFBVSxDQUFNO0lBQ2hCLFlBQW9CLFFBQXdCLEVBQVMsTUFBYSxFQUFRLEVBQXFCLEVBQVMsS0FBb0I7UUFBeEcsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQVEsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFlO0lBRTVILENBQUM7SUFDRCxhQUFhLENBQUs7SUFDbEIsV0FBVztRQUNULElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENB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QUMsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQzt3R0E3S1ksd0JBQXdCOzRGQUF4Qix3QkFBd0IsNkRDVnJDLDQvRkFpRCtCOzs0RkR2Q2xCLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXRhbmdvLXN0b3JlLWluZnJhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFuZ28tc3RvcmUtaW5mcmEuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi90YW5nby1zdG9yZS1pbmZyYS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhbmdvU3RvcmVJbmZyYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxPbkRlc3Ryb3kge1xyXG4gIHNlbGVjdGVkVGFiOiBhbnk7XHJcbiAgcHJpdmF0ZSBkZXRhY2ggPSBuZXcgU3ViamVjdCgpO1xyXG4gIHN0b3JlSWQ6IGFueTtcclxuICB0eXBlOiBhbnk7XHJcbiAgc2VsZWN0ZWRUYWIxOiBhbnk7XHJcbiAgcHJpdmF0ZSBzdWJUYWJGcm9tVXJsQXBwbGllZCA9IGZhbHNlO1xyXG4gIGNsaWVudE5hbWU6IGFueTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhZ2VJbmZvOlBhZ2VJbmZvU2VydmljZSxwcml2YXRlIHJvdXRlcjpSb3V0ZXIscHVibGljIGdzOkdsb2JhbFN0YXRlU2VydmljZSxwcml2YXRlIHJvdXRlOkFjdGl2YXRlZFJvdXRlKXtcclxuXHJcbiAgfVxyXG4gIGhlYWRlckZpbHRlcnM6YW55O1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXRhY2gubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGV0YWNoLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG4gIGNsaWVudERhdGE6YW55O1xyXG4gICB1c2VyVHlwZTphbnk7XHJcbnByaXZhdGUgaXNTdG9yZUlkVmFsaWRGb3JDbGllbnQoc3RvcmVJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgaWYgKCFzdG9yZUlkIHx8ICF0aGlzLnVzZXJUeXBlPy5jbGllbnRJZCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAvLyAvLyBUYW5nbyB1c2VycyBjYW4gYWNjZXNzIGFsbFxyXG4gIC8vIGlmICh0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlID09PSAndGFuZ28nKSB7XHJcbiAgLy8gICByZXR1cm4gdHJ1ZTtcclxuICAvLyB9XHJcblxyXG4gIGNvbnN0IHN0b3JlQ2xpZW50SWQgPSBzdG9yZUlkLnNwbGl0KCctJylbMF07XHJcbiAgcmV0dXJuIHN0b3JlQ2xpZW50SWQgPT09IFN0cmluZyh0aGlzLnVzZXJUeXBlLmNsaWVudElkKTtcclxufVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgdGhpcy51c2VyVHlwZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIikgfHwgJ3t9Jyk7XHJcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICBjb25zdCB0eXBlID0gcGFyYW1zWyd0eXBlJ10gPyBwYXJhbXNbJ3R5cGUnXSA6ICdpbmZyYSc7XHJcbiAgICAgIGlmKHR5cGUgPT09J2luZnJhdjInKXtcclxuICAgICAgICAvLyBFdmVyeSBJbmZyYSBibG9jayBpcyBnYXRlZCBvbiBzZWxlY3RlZFRhYiA9PT0gJ2luZnJhJywgc28gdGhpcyByZWFkc1xyXG4gICAgICAgIC8vIGFzIFwidGhlIEluZnJhIHRhYiwgb3BlbmVkIG9uIFRpY2tldHMgVjJcIiByYXRoZXIgdGhhbiBhIHRhYiBvZiBpdHMgb3duLlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSAnaW5mcmEnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHR5cGU7XHJcbiAgICAgIH1cclxuICAgICAgLy8gT25seSBvbiB0aGUgZmlyc3QgZW1pc3Npb246IHNlbGVjdGVkVGFiczEoKSByZXdyaXRlcyBgdHlwZWAsIHdoaWNoXHJcbiAgICAgIC8vIGZpcmVzIHRoaXMgc3Vic2NyaXB0aW9uIGFnYWluLCBhbmQgd2l0aG91dCB0aGUgZ3VhcmQgdGhhdCB3b3VsZCB1bmRvXHJcbiAgICAgIC8vIHRoZSBjbGljayAtIFN1bW1hcnkgaW4gcGFydGljdWxhciB3b3VsZCBib3VuY2UgdG8gVGlja2V0cyBWMS5cclxuICAgICAgaWYoIXRoaXMuc3ViVGFiRnJvbVVybEFwcGxpZWQpe1xyXG4gICAgICAgIHRoaXMuc3ViVGFiRnJvbVVybEFwcGxpZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmKHR5cGUgPT09J2luZnJhdjInKXtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIxID0gJ3RpY2tldHNWMidcclxuICAgICAgICB9IGVsc2UgaWYodGhpcy5zZWxlY3RlZFRhYiA9PT0naW5mcmEnKXtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIxID0ndGlja2V0cydcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgICAgICAgIGNvbnN0IGNsaWVudERhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjbGllbnQtZGV0YWlsc1wiKSB8fCBcInt9XCIpO1xyXG4gICAgdGhpcy5jbGllbnREYXRhID0gY2xpZW50RGF0YTtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgIHRoaXMuaGVhZGVyRmlsdGVycyA9IGRhdGE7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlSWQgPVxyXG4gICAgICAgICAgICBkYXRhICYmIGRhdGEuc3RvcmUgPyBkYXRhLnN0b3JlIDogdGhpcy5yb3V0ZXIudXJsLnNwbGl0KFwiL1wiKVszXTtcclxuICAgICAgICAgICAgdGhpcy5jbGllbnROYW1lID0gZGF0YT8uY2xpZW50TmFtZSA/IGRhdGE/LmNsaWVudE5hbWU6Jyc7XHJcbiAgICAgICAgICAgICBpZiAodGhpcy5ncy51c2VyQWNjZXNzLnZhbHVlPy51c2VyVHlwZSAhPT0gJ3RhbmdvJykge1xyXG4gICAgICAgICAgICAgaWYgKCF0aGlzLmlzU3RvcmVJZFZhbGlkRm9yQ2xpZW50KHRoaXMuc3RvcmVJZCkpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2Vycm9yLzQwNCddKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgICAgIHRoaXMudXBkYXRlU3RvcmVJZFF1ZXJ5UGFyYW0odGhpcy5zdG9yZUlkKTtcclxuICAgICAgICAgIHRoaXMuc2V0UGFnZURhdGEoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIH1cclxuICAgIHVwZGF0ZVN0b3JlSWRRdWVyeVBhcmFtKHN0b3JlSWQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlICE9PSAndGFuZ28nKSB7XHJcbiAgICAgICBpZiAoIXRoaXMuaXNTdG9yZUlkVmFsaWRGb3JDbGllbnQoc3RvcmVJZCkpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2Vycm9yLzQwNCddKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcbn1cclxuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IC4uLnRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfTtcclxuICAgICAgLy8gVXBkYXRlIHN0b3JlSWQgaW4gcXVlcnlQYXJhbXNcclxuICAgICAgcXVlcnlQYXJhbXMuc3RvcmVJZCA9IHN0b3JlSWQ7XHJcbiAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBzYW1lIHJvdXRlIHdpdGggdXBkYXRlZCBxdWVyeVBhcmFtc1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgeyBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScgfSk7XHJcbiAgICB9XHJcbiAgc2V0UGFnZURhdGEoKXtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoXCJUaWNrZXRzXCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXREZXNjcmlwdGlvbihcclxuICAgICAgXCJWaWV3LCBzaGFyZSwgZG93bmxvYWQgYW5kIGJlbmNobWFyayB0aGUgc3RvcmVzIHBlcmZvcm1hbmNlIGluIG9uZSBzY3JlZW5cIlxyXG4gICAgKTtcclxuICAgIGxldCBicmVhZGNydW1iczogYW55W10gPSBbXTtcclxuICAgIGNvbnN0IGNvbW1vbkJyZWFkY3J1bWJzID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY2xpZW50TmFtZSxcclxuICAgICAgICBwYXRoOiBcIi9tYW5hZ2Uvc3RvcmVzXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmNsaWVudE5hbWUsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3N0b3Jlc1wiLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLnN0b3JlSWQsXHJcbiAgICAgICAgcGF0aDogYC9tYW5hZ2Uvc3RvcmVzL2NhbWVyYXM/c3RvcmVJZD0ke3RoaXMuc3RvcmVJZH1gLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5zdG9yZUlkLFxyXG4gICAgICAgIHBhdGg6IGAvbWFuYWdlL3N0b3Jlcy9jYW1lcmFzP3N0b3JlSWQ9JHt0aGlzLnN0b3JlSWR9YCxcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5ncy51c2VyQWNjZXNzLnZhbHVlPy51c2VyVHlwZSA9PT0gXCJ0YW5nb1wiKSB7XHJcbiAgICAgIGJyZWFkY3J1bWJzID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIk1hbmFnZVwiLFxyXG4gICAgICAgICAgcGF0aDogXCIvbWFuYWdlL2JyYW5kc1wiLFxyXG4gICAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGl0bGU6IFwiTWFuYWdlXCIsXHJcbiAgICAgICAgICBwYXRoOiBcIi9tYW5hZ2UvYnJhbmRzXCIsXHJcbiAgICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgICBpc1NlcGFyYXRvcjogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLmNvbW1vbkJyZWFkY3J1bWJzLFxyXG4gICAgICBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlID09PSBcImNsaWVudFwiKSB7XHJcbiAgICAgIGJyZWFkY3J1bWJzID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIk1hbmFnZVwiLFxyXG4gICAgICAgICAgcGF0aDogXCIvbWFuYWdlL3N1bW1hcnlcIixcclxuICAgICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIk1hbmFnZVwiLFxyXG4gICAgICAgICAgcGF0aDogXCIvbWFuYWdlL3N1bW1hcnlcIixcclxuICAgICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICAgIGlzU2VwYXJhdG9yOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4uY29tbW9uQnJlYWRjcnVtYnMsXHJcbiAgICAgIF07XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoYnJlYWRjcnVtYnMpO1xyXG4gIH1cclxuc2VsZWN0ZWRUYWJzKHZhbHVlOmFueSl7XHJcbiAgdGhpcy5zZWxlY3RlZFRhYiA9IHZhbHVlO1xyXG4gIGlmKHRoaXMuc2VsZWN0ZWRUYWIgPT09J2luZnJhJyl7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiMSA9J3RpY2tldHMnXHJcbiAgfVxyXG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyAuLi50aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zIH07XHJcbiAgICAgIHF1ZXJ5UGFyYW1zWyd0eXBlJ10gPSB2YWx1ZTtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHsgcmVsYXRpdmVUbzp0aGlzLnJvdXRlLCBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXN9KTtcclxufVxyXG5cclxuc2VsZWN0ZWRUYWJzMSh0eXBlOmFueSl7XHJcbiAgdGhpcy5zZWxlY3RlZFRhYjEgPSB0eXBlO1xyXG4gIC8vIEtlZXAgdGhlIFVSTCBpbiBzdGVwLCB0aGUgc2FtZSB3YXkgc2VsZWN0ZWRUYWJzKCkgZG9lcyBmb3IgdGhlIHRvcCB0YWJzLlxyXG4gIC8vIFN1bW1hcnkgaGFzIG5vIGB0eXBlYCBvZiBpdHMgb3duLCBzbyBpdCBzaGFyZXMgJ2luZnJhJyB3aXRoIFRpY2tldHMgVjEuXHJcbiAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IC4uLnRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfTtcclxuICAgICAgcXVlcnlQYXJhbXNbJ3R5cGUnXSA9IHR5cGUgPT09ICd0aWNrZXRzVjInID8gJ2luZnJhdjInIDogJ2luZnJhJztcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHsgcmVsYXRpdmVUbzp0aGlzLnJvdXRlLCBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXN9KTtcclxufVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2FyZCBtYi01IHB5LTMgcHgtNVwiPlxyXG4gICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzMSBuYXYtbGluZS10YWJzIGJvcmRlci10cmFuc3BhcmVudCBmbGV4LW5vd3JhcFwiPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMoJ2luZnJhJylcIj48YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYiA9PT0naW5mcmEnID8gJ2FjdGl2ZScgOicnXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyIG5vLWJvcmRlciBtZS02IFwiPkluZnJhPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMoJ2RhdGFNaXNtYXRjaCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYiA9PT0nZGF0YU1pc21hdGNoJyA/ICdhY3RpdmUnIDonJ1wiIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbWUtNlwiPkRhdGEgTWlzbWF0Y2g8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFicygnY2FtZXJhQW5nbGVDaGFuZ2UnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIgPT09J2NhbWVyYUFuZ2xlQ2hhbmdlJyA/ICdhY3RpdmUnIDonJ1wiIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbWUtNlwiPkNhbWVyYSBBbmdsZTwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuXHJcbiAgICAgICAgICAgICA8IS0tIDxsaSAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJyB8fCBjbGllbnREYXRhPy5pc1ZNU1wiIGNsYXNzPVwibmF2LWl0ZW1cIiAoY2xpY2spPVwic2VsZWN0ZWRUYWJzKCdmb290ZmFsbCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYiA9PT0nZm9vdGZhbGwnID8gJ2FjdGl2ZScgOicnXCIgY2xhc3M9XCJuYXYtbGluayBjdXJzb3ItcG9pbnRlciBtZS02XCI+Rm9vdGZhbGwgRGlyZWN0b3J5PC9hPlxyXG4gICAgICAgICAgICA8L2xpPiAtLT5cclxuICAgICAgICA8L3VsPlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGVkVGFiID09PSdpbmZyYSdcIiBjbGFzcz1cIm1iLTUgcHktMyBweC01XCI+XHJcbiAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFiczEgbmF2LWxpbmUtdGFicyBib3JkZXItdHJhbnNwYXJlbnQgZmxleC1ub3dyYXBcIj5cclxuICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBuYXYtaXRlbTFcIiAoY2xpY2spPVwic2VsZWN0ZWRUYWJzMSgnc3VtbWFyeScpXCI+PGEgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIxID09PSdzdW1tYXJ5JyA/ICdhY3RpdmUnIDonJ1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIG5hdi1saW5rMSBjdXJzb3ItcG9pbnRlciBuby1ib3JkZXIgbWUtNiBcIj5TdW1tYXJ5PC9hPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gbmF2LWl0ZW0xXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFiczEoJ3RpY2tldHMnKVwiPlxyXG4gICAgICAgICAgICA8YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYjEgPT09J3RpY2tldHMnID8gJ2FjdGl2ZScgOicnXCIgY2xhc3M9XCJuYXYtbGluayBuYXYtbGluazEgY3Vyc29yLXBvaW50ZXIgbWUtNlwiPlRpY2tldHMgVjE8L2E+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBuYXYtaXRlbTFcIiAoY2xpY2spPVwic2VsZWN0ZWRUYWJzMSgndGlja2V0c1YyJylcIj5cclxuICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIxID09PSd0aWNrZXRzVjInID8gJ2FjdGl2ZScgOicnXCIgY2xhc3M9XCJuYXYtbGluayBuYXYtbGluazEgY3Vyc29yLXBvaW50ZXIgbWUtNlwiPlRpY2tldHMgVjI8L2E+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09J2luZnJhJyAmJiBzZWxlY3RlZFRhYjEgPT09J3N1bW1hcnknXCI+XHJcbiAgICA8bGliLXN1bW1hcnktaW5mcmEgW3NlbGVjdGVkVGFiXT1cInNlbGVjdGVkVGFiXCI+PC9saWItc3VtbWFyeS1pbmZyYT5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0naW5mcmEnICYmIHNlbGVjdGVkVGFiMSA9PT0ndGlja2V0cydcIj5cclxuICAgIDxsaWItdGlja2V0LWluZnJhIFtzZWxlY3RlZFRhYl09XCJzZWxlY3RlZFRhYlwiPjwvbGliLXRpY2tldC1pbmZyYT5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0naW5mcmEnICYmIHNlbGVjdGVkVGFiMSA9PT0ndGlja2V0c1YyJ1wiPlxyXG4gICAgPGxpYi10aWNrZXQtaW5mcmEtdjIgW3NlbGVjdGVkVGFiXT1cInNlbGVjdGVkVGFiXCI+PC9saWItdGlja2V0LWluZnJhLXYyPlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGVkVGFiID09PSdkYXRhTWlzbWF0Y2gnXCI+XHJcbiAgICA8bGliLXRpY2tldC1pbmZyYSBbc2VsZWN0ZWRUYWJdPVwic2VsZWN0ZWRUYWJcIj48L2xpYi10aWNrZXQtaW5mcmE+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGVkVGFiID09PSdjYW1lcmFBbmdsZUNoYW5nZSdcIj5cclxuICAgIDxsaWItdGlja2V0LWNhbWVyYS1hbmdsZSBbc2VsZWN0ZWRUYWJdPVwic2VsZWN0ZWRUYWJcIj48L2xpYi10aWNrZXQtY2FtZXJhLWFuZ2xlPlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGVkVGFiID09PSdmb290ZmFsbCdcIj5cclxuICAgIDxsaWItZm9vdGZhbGwtZGlyZWN0b3J5IFtzZWxlY3RlZFRhYl09XCJzZWxlY3RlZFRhYlwiPjwvbGliLWZvb3RmYWxsLWRpcmVjdG9yeT5cclxuPC9kaXY+XHJcbjxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD4iXX0=
|
|
303
|
+
args: [{ selector: 'lib-tango-store-infra', template: "<!-- Store card: name and timings from get-store, Live status from the V2 store list. -->\r\n<div class=\"card mb-5 py-4 px-5\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"me-3\"><svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#D1FADF\"/>\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#ECFDF3\" stroke-width=\"6\"/>\r\n <path d=\"M15.6799 18.8039L15.6267 18.8871C15.0686 19.8741 15.6644 21.1215 16.7361 21.2646C16.8331 21.2765 16.9235 21.2828 17.0118 21.2828C17.5899 21.2828 18.1011 21.0348 18.4574 20.648L19.0107 20.0474L19.5621 20.6498C19.9141 21.0342 20.4241 21.2828 21.0061 21.2828C21.5856 21.2828 22.0985 21.0338 22.4502 20.6498L23.0033 20.0455L23.5565 20.6498C23.9081 21.0338 24.4211 21.2828 25.0005 21.2828C25.58 21.2828 26.0929 21.0338 26.4445 20.6498L26.9977 20.0455L27.5509 20.6498C27.9025 21.0338 28.4155 21.2828 28.9949 21.2828C29.0803 21.2828 29.1733 21.2765 29.2697 21.2647C30.3649 21.1154 30.9627 19.8012 30.324 18.8044C30.324 18.8043 30.324 18.8043 30.3239 18.8042L28.5658 16.0628L28.5658 16.0628L28.5648 16.0614C28.5496 16.0375 28.5121 16.012 28.465 16.012H17.5356C17.4884 16.012 17.4509 16.0375 17.4357 16.0614L17.4351 16.0623L15.6799 18.8039ZM28.6514 23.7372V26.8691V27.6191H27.9014H18.0992H17.3492V26.8691V23.7376C17.239 23.7458 17.1274 23.7501 17.0148 23.7501C16.9725 23.7501 16.9305 23.7494 16.8888 23.7482V26.8691V28.8036C16.8888 29.4471 17.4227 29.9882 18.0992 29.9882H27.9014C28.5779 29.9882 29.1118 29.4471 29.1118 28.8036V26.8691V23.7484C29.072 23.7495 29.032 23.7501 28.9918 23.7501C28.8774 23.7501 28.7639 23.7457 28.6514 23.7372Z\" stroke=\"#027A48\" stroke-width=\"1.5\"/>\r\n </svg></span>\r\n <div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"store-card-name\">{{ storeName }}</span>\r\n <span *ngIf=\"liveStatus\" class=\"live-status ms-4\" [class.down]=\"liveStatus === 'Not Live'\">\r\n <span class=\"live-dot\"></span>{{ liveStatus }}\r\n </span>\r\n </div>\r\n <div class=\"store-card-meta d-flex align-items-center mt-1\">\r\n <span>{{ storeId || '--' }}</span>\r\n <span class=\"mx-2\">\u00B7</span>\r\n <svg class=\"me-1\" width=\"14\" height=\"14\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 4.5V9L12 10.5M16.5 9C16.5 13.1421 13.1421 16.5 9 16.5C4.85786 16.5 1.5 13.1421 1.5 9C1.5 4.85786 4.85786 1.5 9 1.5C13.1421 1.5 16.5 4.85786 16.5 9Z\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>{{ storeOpen || '--' }} - {{ storeClose || '--' }}</span>\r\n </div>\r\n </div>\r\n <!-- Tango users of Infra V2 clients only. The hovered button expands; Terminal access is expanded while none is. -->\r\n <div *ngIf=\"showStoreActions\" class=\"store-actions ms-auto d-flex align-items-center gap-3\">\r\n <button type=\"button\" class=\"store-act is-default\" (click)=\"openTerminal(terminalTpl)\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"2.5\" y=\"3.5\" width=\"19\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.8\"/>\r\n <path d=\"M8 21H16M12 16.5V21M6.5 8L9 10L6.5 12M11 12H14\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">Terminal access</span>\r\n </button>\r\n <button type=\"button\" class=\"store-act\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 7.5C3 6.4 3.9 5.5 5 5.5H9.2L11.2 7.5H19C20.1 7.5 21 8.4 21 9.5V17C21 18.1 20.1 19 19 19H5C3.9 19 3 18.1 3 17V7.5Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">File access</span>\r\n </button>\r\n <button type=\"button\" class=\"store-act\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M8.6 4.5L6.4 3.6C5.8 3.4 5.1 3.6 4.7 4.1L3.5 5.6C3.1 6.1 3 6.8 3.2 7.4C4.9 12.7 9.3 17.1 14.6 18.8C15.2 19 15.9 18.9 16.4 18.5L17.9 17.3C18.4 16.9 18.6 16.2 18.4 15.6L17.5 13.4C17.3 12.8 16.6 12.5 16 12.6L13.6 13.1C11.9 12.2 10.8 11.1 9.9 9.4L10.4 7C10.5 6.4 10.2 5.7 9.6 5.5L8.6 4.5Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">Call</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"card mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item\" (click)=\"selectedTabs('infra')\"><a [ngClass]=\"selectedTab ==='infra' ? 'active' :''\"\r\n class=\"nav-link cursor-pointer no-border me-6 \">Infra</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('dataMismatch')\">\r\n <a [ngClass]=\"selectedTab ==='dataMismatch' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Data Mismatch</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('cameraAngleChange')\">\r\n <a [ngClass]=\"selectedTab ==='cameraAngleChange' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Camera Angle</a>\r\n </li>\r\n <!-- File logs, at the right end of the row: its own page at ?type=fileLogs. Tango only. -->\r\n <li *ngIf=\"isTango\" class=\"nav-item ms-auto\" (click)=\"selectedTabs('fileLogs')\">\r\n <a [ngClass]=\"selectedTab ==='fileLogs' ? 'active' :''\" class=\"nav-link cursor-pointer file-logs-link\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M14 3H7C5.9 3 5 3.9 5 5V19C5 20.1 5.9 21 7 21H17C18.1 21 19 20.1 19 19V8L14 3Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 3V8H19M9 13H15M9 17H13\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n File logs\r\n </a>\r\n </li>\r\n\r\n <!-- <li *ngIf=\"(gs.userAccess | async)?.userType === 'tango' || clientData?.isVMS\" class=\"nav-item\" (click)=\"selectedTabs('footfall')\">\r\n <a [ngClass]=\"selectedTab ==='footfall' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Footfall Directory</a>\r\n </li> -->\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra'\" class=\"mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('summary')\"><a [ngClass]=\"selectedTab1 ==='summary' ? 'active' :''\"\r\n class=\"nav-link nav-link1 cursor-pointer no-border me-6 \">Summary</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('tickets')\">\r\n <a [ngClass]=\"selectedTab1 ==='tickets' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V1</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('ticketsV2')\">\r\n <a [ngClass]=\"selectedTab1 ==='ticketsV2' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V2</a>\r\n </li>\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='summary'\">\r\n <lib-summary-infra [selectedTab]=\"selectedTab\"></lib-summary-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='tickets'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='ticketsV2'\">\r\n <lib-ticket-infra-v2 [selectedTab]=\"selectedTab\"></lib-ticket-infra-v2>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='dataMismatch'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n\r\n<div *ngIf=\"selectedTab ==='cameraAngleChange'\">\r\n <lib-ticket-camera-angle [selectedTab]=\"selectedTab\"></lib-ticket-camera-angle>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='footfall'\">\r\n <lib-footfall-directory [selectedTab]=\"selectedTab\"></lib-footfall-directory>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='fileLogs' && isTango\">\r\n <lib-file-logs [storeId]=\"storeId\" [clientId]=\"headerFilters?.client\" [date]=\"headerFilters?.date?.endDate\"></lib-file-logs>\r\n</div>\r\n<router-outlet></router-outlet>\r\n\r\n<!-- Terminal access confirmation. Filled from /infra/v2/remote/session; Client name from the client record. -->\r\n<ng-template #terminalTpl let-modal>\r\n <div class=\"access-modal\">\r\n <div class=\"access-head\">\r\n <span class=\"access-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"2.5\" y=\"3.5\" width=\"19\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.8\"/>\r\n <path d=\"M8 21H16M12 16.5V21M6.5 8L9 10L6.5 12M11 12H14\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <span class=\"access-title fs-4 text-gray-800 fw-bold\">Open terminal access?</span>\r\n </div>\r\n <div class=\"access-body\">\r\n <p class=\"access-text\">This opens a command window on the store system. Commands run on the live system.</p>\r\n <div class=\"access-box\">\r\n <!-- Loading: shimmering placeholder rows (see .skel). -->\r\n <ng-container *ngIf=\"sessionState === 'loading'\">\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n </ng-container>\r\n <div *ngIf=\"sessionState === 'error'\" class=\"access-note error\">{{ sessionError || \"Couldn't open the session.\" }}</div>\r\n <ng-container *ngIf=\"sessionState === 'ready'\">\r\n <div class=\"access-row\"><span class=\"access-label\">Client name</span><span class=\"access-value\">{{ clientDisplayName || '--' }}</span></div>\r\n <div class=\"access-row\"><span class=\"access-label\">Store ID</span><span class=\"access-value\">{{ session?.storeId || '--' }}</span></div>\r\n <div class=\"access-row\"><span class=\"access-label\">Store name</span><span class=\"access-value\">{{ session?.storeName || '--' }}</span></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"access-foot\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"modal.close()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"sessionState !== 'ready'\" (click)=\"connect(modal)\">Connect</button>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.nav-item1 .nav-link1.active{border:none;border-radius:0;background:var(--Primary-50, #EAF8FF);border-bottom:2px solid #009BF3!important;padding:8px 12px}.nav-item1 .nav-link1:hover{border:none}.nav-item .nav-link.file-logs-link{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;border-radius:6px}.nav-item .nav-link.file-logs-link:hover{border-bottom:1px solid transparent}.store-card-name{font-size:18px;line-height:28px;font-weight:600;color:var(--Gray-900, #101828)}.store-act{display:inline-flex;align-items:center;height:44px;padding:0 12px;border:0;border-radius:12px;background:var(--Primary-700, #009BF3);color:#fff;font-size:15px;font-weight:700;transition:background-color .3s ease,color .3s ease,padding .3s ease}.store-act svg{flex-shrink:0}.store-act .act-label{max-width:0;opacity:0;margin-left:0;overflow:hidden;white-space:nowrap;transition:max-width .3s ease,opacity .2s ease,margin-left .3s ease}.store-actions:not(:has(.store-act:hover)) .store-act.is-default,.store-act:hover{background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);padding:0 18px}.store-actions:not(:has(.store-act:hover)) .store-act.is-default .act-label,.store-act:hover .act-label{max-width:160px;opacity:1;margin-left:8px}.store-card-meta{font-size:12px;line-height:18px;font-weight:500;color:var(--Gray-500, #667085)}.live-status{display:inline-flex;align-items:center;padding:2px 8px;border-radius:16px;font-size:12px;line-height:18px;font-weight:500;background:#ecfdf3;border:1px solid #ABEFC6;color:#067647}.live-status .live-dot{width:6px;height:6px;border-radius:50%;background:#17b26a;margin-right:6px}.live-status.down{background:#fef3f2;border-color:#fecdca;color:#b42318}.live-status.down .live-dot{background:#d92d20}.access-modal{background:#fff;border-radius:16px;overflow:hidden}.access-head{display:flex;align-items:center;gap:16px;padding:20px 24px;border-bottom:1px solid var(--Gray-200, #EAECF0)}.access-icon{display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;flex-shrink:0;border-radius:12px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)}.access-title{flex:1}.access-body{padding:20px 24px 0}.access-text{margin:0 0 20px;font-size:14px;line-height:20px;color:var(--Gray-500, #667085)}.access-box{padding:16px 20px;border:1px solid var(--Gray-200, #EAECF0);border-radius:12px;background:var(--Gray-50, #F9FAFB)}.access-row{display:flex;align-items:center;padding:8px 0}.access-label{width:180px;flex-shrink:0;font-size:12px;line-height:18px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--Gray-500, #667085)}.access-value{font-size:14px;line-height:20px;font-weight:500;color:var(--Gray-900, #101828)}.skel{display:inline-block;height:14px;margin:3px 0;border-radius:6px;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%;animation:skel-shimmer 1.5s linear infinite}@keyframes skel-shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.skel-label{width:110px;margin-right:70px}.skel-value{width:160px}.access-note{padding:8px 0;font-size:14px;line-height:20px;color:var(--Gray-500, #667085)}.access-note.error{color:var(--Error-700, #B42318)}.access-foot{display:flex;justify-content:flex-end;gap:12px;padding:24px}.access-foot .btn{font-size:14px!important;line-height:20px!important;padding:8px 16px!important}\n"] }]
|
|
304
|
+
}], ctorParameters: () => [{ type: i1.PageInfoService }, { type: i2.Router }, { type: i1.GlobalStateService }, { type: i2.ActivatedRoute }, { type: i3.TicketsService }, { type: i4.NgbModal }, { type: i5.AuthService }] });
|
|
305
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuZ28tc3RvcmUtaW5mcmEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtdGlja2V0LWluZnJhL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1zdG9yZS1pbmZyYS90YW5nby1zdG9yZS1pbmZyYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS10aWNrZXQtaW5mcmEvc3JjL2xpYi9jb21wb25lbnRzL3RhbmdvLXN0b3JlLWluZnJhL3RhbmdvLXN0b3JlLWluZnJhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWtDLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSzFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDOzs7Ozs7Ozs7Ozs7OztBQU92RyxNQUFNLE9BQU8sd0JBQXdCO0lBUWY7SUFBaUM7SUFBcUI7SUFBOEI7SUFBNkI7SUFBc0M7SUFBdUI7SUFQbE0sV0FBVyxDQUFNO0lBQ1QsTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDL0IsT0FBTyxDQUFNO0lBQ2IsSUFBSSxDQUFNO0lBQ1YsWUFBWSxDQUFNO0lBQ1Ysb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBQ3JDLFVBQVUsQ0FBTTtJQUNoQixZQUFvQixRQUF3QixFQUFTLE1BQWEsRUFBUSxFQUFxQixFQUFTLEtBQW9CLEVBQVMsY0FBNkIsRUFBUyxLQUFjLEVBQVMsV0FBdUI7UUFBck0sYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQVEsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFlO1FBQVMsbUJBQWMs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b21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UsIFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBUaWNrZXRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RpY2tldHMuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlbW90ZVRlcm1pbmFsQ29tcG9uZW50IH0gZnJvbSAnLi4vdGlja2V0LWluZnJhLXYyL3JlbW90ZS10ZXJtaW5hbC9yZW1vdGUtdGVybWluYWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXRhbmdvLXN0b3JlLWluZnJhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFuZ28tc3RvcmUtaW5mcmEuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi90YW5nby1zdG9yZS1pbmZyYS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhbmdvU3RvcmVJbmZyYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxPbkRlc3Ryb3kge1xyXG4gIHNlbGVjdGVkVGFiOiBhbnk7XHJcbiAgcHJpdmF0ZSBkZXRhY2ggPSBuZXcgU3ViamVjdCgpO1xyXG4gIHN0b3JlSWQ6IGFueTtcclxuICB0eXBlOiBhbnk7XHJcbiAgc2VsZWN0ZWRUYWIxOiBhbnk7XHJcbiAgcHJpdmF0ZSBzdWJUYWJGcm9tVXJsQXBwbGllZCA9IGZhbHNlO1xyXG4gIGNsaWVudE5hbWU6IGFueTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhZ2VJbmZvOlBhZ2VJbmZvU2VydmljZSxwcml2YXRlIHJvdXRlcjpSb3V0ZXIscHVibGljIGdzOkdsb2JhbFN0YXRlU2VydmljZSxwcml2YXRlIHJvdXRlOkFjdGl2YXRlZFJvdXRlLHByaXZhdGUgdGlja2V0c1NlcnZpY2U6VGlja2V0c1NlcnZpY2UscHJpdmF0ZSBtb2RhbDpOZ2JNb2RhbCxwcml2YXRlIGF1dGhTZXJ2aWNlOkF1dGhTZXJ2aWNlKXtcclxuXHJcbiAgfVxyXG4gIGhlYWRlckZpbHRlcnM6YW55O1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXRhY2gubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGV0YWNoLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG4gIGNsaWVudERhdGE6YW55O1xyXG4gICB1c2VyVHlwZTphbnk7XHJcbnByaXZhdGUgaXNTdG9yZUlkVmFsaWRGb3JDbGllbnQoc3RvcmVJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgaWYgKCFzdG9yZUlkIHx8ICF0aGlzLnVzZXJUeXBlPy5jbGllbnRJZCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAvLyAvLyBUYW5nbyB1c2VycyBjYW4gYWNjZXNzIGFsbFxyXG4gIC8vIGlmICh0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlID09PSAndGFuZ28nKSB7XHJcbiAgLy8gICByZXR1cm4gdHJ1ZTtcclxuICAvLyB9XHJcblxyXG4gIGNvbnN0IHN0b3JlQ2xpZW50SWQgPSBzdG9yZUlkLnNwbGl0KCctJylbMF07XHJcbiAgcmV0dXJuIHN0b3JlQ2xpZW50SWQgPT09IFN0cmluZyh0aGlzLnVzZXJUeXBlLmNsaWVudElkKTtcclxufVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgdGhpcy51c2VyVHlwZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIikgfHwgJ3t9Jyk7XHJcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICBjb25zdCB0eXBlID0gcGFyYW1zWyd0eXBlJ10gPyBwYXJhbXNbJ3R5cGUnXSA6ICdpbmZyYSc7XHJcbiAgICAgIGlmKHR5cGUgPT09J2luZnJhdjInKXtcclxuICAgICAgICAvLyBFdmVyeSBJbmZyYSBibG9jayBpcyBnYXRlZCBvbiBzZWxlY3RlZFRhYiA9PT0gJ2luZnJhJywgc28gdGhpcyByZWFkc1xyXG4gICAgICAgIC8vIGFzIFwidGhlIEluZnJhIHRhYiwgb3BlbmVkIG9uIFRpY2tldHMgVjJcIiByYXRoZXIgdGhhbiBhIHRhYiBvZiBpdHMgb3duLlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSAnaW5mcmEnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHR5cGU7XHJcbiAgICAgIH1cclxuICAgICAgLy8gT25seSBvbiB0aGUgZmlyc3QgZW1pc3Npb246IHNlbGVjdGVkVGFiczEoKSByZXdyaXRlcyBgdHlwZWAsIHdoaWNoXHJcbiAgICAgIC8vIGZpcmVzIHRoaXMgc3Vic2NyaXB0aW9uIGFnYWluLCBhbmQgd2l0aG91dCB0aGUgZ3VhcmQgdGhhdCB3b3VsZCB1bmRvXHJcbiAgICAgIC8vIHRoZSBjbGljayAtIFN1bW1hcnkgaW4gcGFydGljdWxhciB3b3VsZCBib3VuY2UgdG8gVGlja2V0cyBWMS5cclxuICAgICAgaWYoIXRoaXMuc3ViVGFiRnJvbVVybEFwcGxpZWQpe1xyXG4gICAgICAgIHRoaXMuc3ViVGFiRnJvbVVybEFwcGxpZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmKHR5cGUgPT09J2luZnJhdjInKXtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIxID0gJ3RpY2tldHNWMidcclxuICAgICAgICB9IGVsc2UgaWYodGhpcy5zZWxlY3RlZFRhYiA9PT0naW5mcmEnKXtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIxID0ndGlja2V0cydcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgICAgICAgIGNvbnN0IGNsaWVudERhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjbGllbnQtZGV0YWlsc1wiKSB8fCBcInt9XCIpO1xyXG4gICAgdGhpcy5jbGllbnREYXRhID0gY2xpZW50RGF0YTtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgIHRoaXMuaGVhZGVyRmlsdGVycyA9IHsgLi4uZGF0YSB9O1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUlkID1cclxuICAgICAgICAgICAgZGF0YSAmJiBkYXRhLnN0b3JlID8gZGF0YS5zdG9yZSA6IHRoaXMucm91dGVyLnVybC5zcGxpdChcIi9cIilbM107XHJcbiAgICAgICAgICAgIHRoaXMuY2xpZW50TmFtZSA9IGRhdGE/LmNsaWVudE5hbWUgPyBkYXRhPy5jbGllbnROYW1lOicnO1xyXG4gICAgICAgICAgICAgaWYgKHRoaXMuZ3MudXNlckFjY2Vzcy52YWx1ZT8udXNlclR5cGUgIT09ICd0YW5nbycpIHtcclxuICAgICAgICAgICAgIGlmICghdGhpcy5pc1N0b3JlSWRWYWxpZEZvckNsaWVudCh0aGlzLnN0b3JlSWQpKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9lcnJvci80MDQnXSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0b3JlSWRRdWVyeVBhcmFtKHRoaXMuc3RvcmVJZCk7XHJcbiAgICAgICAgICB0aGlzLnNldFBhZ2VEYXRhKCk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRTdG9yZU5hbWUodGhpcy5zdG9yZUlkKTtcclxuICAgICAgICAgIHRoaXMubG9hZExpdmVTdGF0dXModGhpcy5zdG9yZUlkLCBkYXRhKTtcclxuICAgICAgICAgIHRoaXMubG9hZENsaWVudChkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIH1cclxuICAgIHVwZGF0ZVN0b3JlSWRRdWVyeVBhcmFtKHN0b3JlSWQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlICE9PSAndGFuZ28nKSB7XHJcbiAgICAgICBpZiAoIXRoaXMuaXNTdG9yZUlkVmFsaWRGb3JDbGllbnQoc3RvcmVJZCkpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2Vycm9yLzQwNCddKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcbn1cclxuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IC4uLnRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfTtcclxuICAgICAgLy8gVXBkYXRlIHN0b3JlSWQgaW4gcXVlcnlQYXJhbXNcclxuICAgICAgcXVlcnlQYXJhbXMuc3RvcmVJZCA9IHN0b3JlSWQ7XHJcbiAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBzYW1lIHJvdXRlIHdpdGggdXBkYXRlZCBxdWVyeVBhcmFtc1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgeyBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScgfSk7XHJcbiAgICB9XHJcbiAgc2V0UGFnZURhdGEoKXtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoXCJUaWNrZXRzXCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXREZXNjcmlwdGlvbihcclxuICAgICAgXCJWaWV3LCBzaGFyZSwgZG93bmxvYWQgYW5kIGJlbmNobWFyayB0aGUgc3RvcmVzIHBlcmZvcm1hbmNlIGluIG9uZSBzY3JlZW5cIlxyXG4gICAgKTtcclxuICAgIGxldCBicmVhZGNydW1iczogYW55W10gPSBbXTtcclxuICAgIGNvbnN0IGNvbW1vbkJyZWFkY3J1bWJzID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY2xpZW50TmFtZSxcclxuICAgICAgICBwYXRoOiBcIi9tYW5hZ2Uvc3RvcmVzXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmNsaWVudE5hbWUsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3N0b3Jlc1wiLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLnN0b3JlSWQsXHJcbiAgICAgICAgcGF0aDogYC9tYW5hZ2Uvc3RvcmVzL2NhbWVyYXM/c3RvcmVJZD0ke3RoaXMuc3RvcmVJZH1gLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5zdG9yZUlkLFxyXG4gICAgICAgIHBhdGg6IGAvbWFuYWdlL3N0b3Jlcy9jYW1lcmFzP3N0b3JlSWQ9JHt0aGlzLnN0b3JlSWR9YCxcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5ncy51c2VyQWNjZXNzLnZhbHVlPy51c2VyVHlwZSA9PT0gXCJ0YW5nb1wiKSB7XHJcbiAgICAgIGJyZWFkY3J1bWJzID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIk1hbmFnZVwiLFxyXG4gICAgICAgICAgcGF0aDogXCIvbWFuYWdlL2JyYW5kc1wiLFxyXG4gICAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGl0bGU6IFwiTWFuYWdlXCIsXHJcbiAgICAgICAgICBwYXRoOiBcIi9tYW5hZ2UvYnJhbmRzXCIsXHJcbiAgICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgICBpc1NlcGFyYXRvcjogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLmNvbW1vbkJyZWFkY3J1bWJzLFxyXG4gICAgICBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlID09PSBcImNsaWVudFwiKSB7XHJcbiAgICAgIGJyZWFkY3J1bWJzID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIk1hbmFnZVwiLFxyXG4gICAgICAgICAgcGF0aDogXCIvbWFuYWdlL3N1bW1hcnlcIixcclxuICAgICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIk1hbmFnZVwiLFxyXG4gICAgICAgICAgcGF0aDogXCIvbWFuYWdlL3N1bW1hcnlcIixcclxuICAgICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICAgIGlzU2VwYXJhdG9yOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4uY29tbW9uQnJlYWRjcnVtYnMsXHJcbiAgICAgIF07XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoYnJlYWRjcnVtYnMpO1xyXG4gIH1cclxuLy8gU3RvcmUgbmFtZSBmb3IgdGhlIGNhcmQgYWJvdmUgdGhlIHRhYnMuIFRoZSBoZWFkZXIgZmlsdGVyIGRvZXNuJ3QgY2FycnkgaXQgb25cclxuLy8gdGhpcyBwYWdlLCBzbyBpdCBjb21lcyBmcm9tIGdldC1zdG9yZS4gJy0tJyB3aGlsZSBsb2FkaW5nIG9yIG9uIGZhaWx1cmUuXHJcbnByaXZhdGUgc3RvcmVOYW1lRnJvbUFwaSA9ICcnO1xyXG5nZXQgc3RvcmVOYW1lKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnN0b3JlTmFtZUZyb21BcGkgfHwgJy0tJzsgfVxyXG4vLyBPcGVuIC8gY2xvc2UgdGltZSBmcm9tIHRoZSBzdG9yZSBwcm9maWxlLCBhcyB0aGUgc3RvcmUgaGVhZGVyIHNob3dzIHRoZW0uXHJcbnN0b3JlT3BlbiA9ICcnO1xyXG5zdG9yZUNsb3NlID0gJyc7XHJcblxyXG5wcml2YXRlIGxvYWRTdG9yZU5hbWUoc3RvcmVJZDogYW55KTogdm9pZCB7XHJcbiAgdGhpcy5zdG9yZU5hbWVGcm9tQXBpID0gJyc7XHJcbiAgdGhpcy5zdG9yZU9wZW4gPSAnJztcclxuICB0aGlzLnN0b3JlQ2xvc2UgPSAnJztcclxuICBpZiAoIXN0b3JlSWQpIHJldHVybjtcclxuICB0aGlzLnRpY2tldHNTZXJ2aWNlLmdldFN0b3JlRGV0YWlscyhzdG9yZUlkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRldGFjaCkpLnN1YnNjcmliZSh7XHJcbiAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgLy8gSWdub3JlIGEgbGF0ZSByZXBseSBmb3IgYSBzdG9yZSB0aGF0IGlzIG5vIGxvbmdlciBzZWxlY3RlZC5cclxuICAgICAgaWYgKHN0b3JlSWQgIT09IHRoaXMuc3RvcmVJZCkgcmV0dXJuO1xyXG4gICAgICB0aGlzLnN0b3JlTmFtZUZyb21BcGkgPSByZXM/LmRhdGE/LnN0b3JlTmFtZSB8fCAnJztcclxuICAgICAgdGhpcy5zdG9yZU9wZW4gPSByZXM/LmRhdGE/LnN0b3JlUHJvZmlsZT8ub3BlbiB8fCAnJztcclxuICAgICAgdGhpcy5zdG9yZUNsb3NlID0gcmVzPy5kYXRhPy5zdG9yZVByb2ZpbGU/LmNsb3NlIHx8ICcnO1xyXG4gICAgfSxcclxuICAgIGVycm9yOiAoKSA9PiB7fSxcclxuICB9KTtcclxufVxyXG5cclxuLy8gVGhlIHN0b3JlLWNhcmQgYnV0dG9ucyAoVGVybWluYWwgYWNjZXNzLCBGaWxlIGFjY2VzcywgQ2FsbCkgYXJlIGZvciBUYW5nbyB1c2VycyBvbmx5LlxyXG5nZXQgaXNUYW5nbygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZ3MudXNlckFjY2Vzcy52YWx1ZT8udXNlclR5cGUgPT09ICd0YW5nbyc7IH1cclxuXHJcbi8vIC4uLmFuZCBvbmx5IGZvciBJbmZyYSBWMiBjbGllbnRzLiBTYW1lIGNhbGwgYW5kIGZpZWxkIHRoZSBUaWNrZXRzIHBhZ2UgdXNlcyBmb3JcclxuLy8gaXRzIEluZnJhIFYyIHRhYi4gSGlkZGVuIHdoaWxlIGxvYWRpbmcgb3Igb24gZXJyb3IuXHJcbmluZnJhVGlja2V0VHlwZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbmNsaWVudERpc3BsYXlOYW1lID0gJyc7XHJcbmdldCBzaG93U3RvcmVBY3Rpb25zKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5pc1RhbmdvICYmIHRoaXMuaW5mcmFUaWNrZXRUeXBlID09PSAnVjInOyB9XHJcblxyXG5wcml2YXRlIGxvYWRDbGllbnQoaGVhZGVyOiBhbnkpOiB2b2lkIHtcclxuICB0aGlzLmluZnJhVGlja2V0VHlwZSA9IG51bGw7XHJcbiAgdGhpcy5jbGllbnREaXNwbGF5TmFtZSA9ICcnO1xyXG4gIGNvbnN0IGNsaWVudElkID0gaGVhZGVyPy5jbGllbnQgfHwgU3RyaW5nKHRoaXMuc3RvcmVJZCB8fCAnJykuc3BsaXQoJy0nKVswXTtcclxuICBpZiAoIWNsaWVudElkKSByZXR1cm47XHJcbiAgdGhpcy5hdXRoU2VydmljZS5nZXRCcmFuZERldGFpbHMoY2xpZW50SWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGV0YWNoKSkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmluZnJhVGlja2V0VHlwZSA9IHJlcz8uZGF0YT8udGlja2V0Q29uZmlncz8uaW5mcmFUaWNrZXRUeXBlID8/IG51bGw7XHJcbiAgICAgIHRoaXMuY2xpZW50RGlzcGxheU5hbWUgPSByZXM/LmRhdGE/LmNsaWVudE5hbWUgfHwgJyc7XHJcbiAgICB9LFxyXG4gICAgZXJyb3I6ICgpID0+IHt9LFxyXG4gIH0pO1xyXG59XHJcblxyXG4vLyBMaXZlIC8gTm90IExpdmUgYmVzaWRlIHRoZSBuYW1lLCBieSB0aGUgc2FtZSBydWxlIGFzIHRoZSBTdW1tYXJ5IGNhcmQncyB0aWxlcy5cclxuLy8gRW1wdHkgLSBhbmQgaGlkZGVuIC0gd2hpbGUgbG9hZGluZywgZm9yIGEgbm9uLVYyIGNsaWVudCwgb3IgZm9yIGEgc3RvcmUgVjJcclxuLy8gZG9lcyBub3QgY291bnQgKGluYWN0aXZlLCBvciBubyBmaXJzdCBmaWxlIHlldCkuXHJcbmxpdmVTdGF0dXM6ICcnIHwgJ0xpdmUnIHwgJ05vdCBMaXZlJyA9ICcnO1xyXG5cclxucHJpdmF0ZSBsb2FkTGl2ZVN0YXR1cyhzdG9yZUlkOiBhbnksIGhlYWRlcjogYW55KTogdm9pZCB7XHJcbiAgdGhpcy5saXZlU3RhdHVzID0gJyc7XHJcbiAgY29uc3QgY2xpZW50SWQgPSBoZWFkZXI/LmNsaWVudCB8fCBTdHJpbmcoc3RvcmVJZCB8fCAnJykuc3BsaXQoJy0nKVswXTtcclxuICBpZiAoIXN0b3JlSWQgfHwgIWNsaWVudElkIHx8ICFoZWFkZXI/LmRhdGU/LmVuZERhdGUpIHJldHVybjtcclxuICBjb25zdCBib2R5ID0ge1xyXG4gICAgY2xpZW50SWQ6IFtjbGllbnRJZF0sIGZyb21EYXRlOiBoZWFkZXIuZGF0ZS5zdGFydERhdGUgfHwgaGVhZGVyLmRhdGUuZW5kRGF0ZSwgdG9EYXRlOiBoZWFkZXIuZGF0ZS5lbmREYXRlLFxyXG4gICAgc2VhcmNoOiBzdG9yZUlkLCBvZmZzZXQ6IDEsIGxpbWl0OiA1MCxcclxuICB9O1xyXG4gIHRoaXMudGlja2V0c1NlcnZpY2Uuc3RvcmVMaXZlU3RhdHVzKGJvZHkpLnBpcGUodGFrZVVudGlsKHRoaXMuZGV0YWNoKSkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoc3RvcmVJZCAhPT0gdGhpcy5zdG9yZUlkKSByZXR1cm47XHJcbiAgICAgIC8vIHNlYXJjaCBpcyBhIHBhcnRpYWwgbWF0Y2ggKDQwNi0xIGFsc28gZmluZHMgNDA2LTEwKSwgc28gcGljayB0aGUgZXhhY3Qgc3RvcmUuXHJcbiAgICAgIGNvbnN0IHJvdyA9IChyZXM/LmRhdGE/LnJvd3MgPz8gW10pLmZpbmQoKHI6IGFueSkgPT4gci5zdG9yZUlkID09PSBzdG9yZUlkKTtcclxuICAgICAgdGhpcy5saXZlU3RhdHVzID0gcm93Py5zdGF0dXMgPT09ICdMaXZlJyB8fCByb3c/LnN0YXR1cyA9PT0gJ05vdCBMaXZlJyA/IHJvdy5zdGF0dXMgOiAnJztcclxuICAgIH0sXHJcbiAgICBlcnJvcjogKCkgPT4ge30sXHJcbiAgfSk7XHJcbn1cclxuXHJcbnNlbGVjdGVkVGFicyh2YWx1ZTphbnkpe1xyXG4gIHRoaXMuc2VsZWN0ZWRUYWIgPSB2YWx1ZTtcclxuICBpZih0aGlzLnNlbGVjdGVkVGFiID09PSdpbmZyYScpe1xyXG4gICAgdGhpcy5zZWxlY3RlZFRhYjEgPSd0aWNrZXRzJ1xyXG4gIH1cclxuICBjb25zdCBxdWVyeVBhcmFtcyA9IHsgLi4udGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyB9O1xyXG4gICAgICBxdWVyeVBhcmFtc1sndHlwZSddID0gdmFsdWU7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7IHJlbGF0aXZlVG86dGhpcy5yb3V0ZSwgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zfSk7XHJcbn1cclxuXHJcbnNlbGVjdGVkVGFiczEodHlwZTphbnkpe1xyXG4gIHRoaXMuc2VsZWN0ZWRUYWIxID0gdHlwZTtcclxuICAvLyBLZWVwIHRoZSBVUkwgaW4gc3RlcCwgdGhlIHNhbWUgd2F5IHNlbGVjdGVkVGFicygpIGRvZXMgZm9yIHRoZSB0b3AgdGFicy5cclxuICAvLyBTdW1tYXJ5IGhhcyBubyBgdHlwZWAgb2YgaXRzIG93biwgc28gaXQgc2hhcmVzICdpbmZyYScgd2l0aCBUaWNrZXRzIFYxLlxyXG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyAuLi50aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zIH07XHJcbiAgICAgIHF1ZXJ5UGFyYW1zWyd0eXBlJ10gPSB0eXBlID09PSAndGlja2V0c1YyJyA/ICdpbmZyYXYyJyA6ICdpbmZyYSc7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7IHJlbGF0aXZlVG86dGhpcy5yb3V0ZSwgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zfSk7XHJcbn1cclxuXHJcbi8vIFRlcm1pbmFsIGFjY2VzcyBwb3AtdXA6IG9wZW5zIGF0IG9uY2UsIHRoZW4gZmlsbHMgZnJvbSAvcmVtb3RlL3Nlc3Npb24uXHJcbi8vIEV2ZXJ5IGNhbGwgaXMgYXVkaXQtbG9nZ2VkIGFzIGEgc2Vzc2lvbiBvcGVuZWQsIENhbmNlbCBpbmNsdWRlZC5cclxuc2Vzc2lvbjogYW55ID0gbnVsbDtcclxuc2Vzc2lvblN0YXRlOiAnbG9hZGluZycgfCAncmVhZHknIHwgJ2Vycm9yJyA9ICdsb2FkaW5nJztcclxuc2Vzc2lvbkVycm9yID0gJyc7XHJcblxyXG5vcGVuVGVybWluYWwodHBsOiBUZW1wbGF0ZVJlZjxhbnk+KTogdm9pZCB7XHJcbiAgdGhpcy5zZXNzaW9uID0gbnVsbDtcclxuICB0aGlzLnNlc3Npb25FcnJvciA9ICcnO1xyXG4gIHRoaXMuc2Vzc2lvblN0YXRlID0gJ2xvYWRpbmcnO1xyXG4gIHRoaXMubW9kYWwub3Blbih0cGwsIHsgY2VudGVyZWQ6IHRydWUgfSk7XHJcbiAgdGhpcy50aWNrZXRzU2VydmljZS5yZW1vdGVTZXNzaW9uKHRoaXMuc3RvcmVJZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKS5zdWJzY3JpYmUoe1xyXG4gICAgbmV4dDogKHJlczogYW55KSA9PiB7IHRoaXMuc2Vzc2lvbiA9IHJlcz8uZGF0YSA/PyBudWxsOyB0aGlzLnNlc3Npb25TdGF0ZSA9ICdyZWFkeSc7IH0sXHJcbiAgICAvLyBUaGUgQVBJJ3Mgb3duIG1lc3NhZ2U6IFwiU3RvcmUgbm90IGZvdW5kXCIsIFwiTm8gZWRnZSBhZ2VudC4uLlwiLCBcIm5vdCBjb25maWd1cmVkXCIuXHJcbiAgICBlcnJvcjogKGVycjogYW55KSA9PiB7IHRoaXMuc2Vzc2lvbkVycm9yID0gZXJyPy5lcnJvcj8uZXJyb3IgfHwgJyc7IHRoaXMuc2Vzc2lvblN0YXRlID0gJ2Vycm9yJzsgfSxcclxuICB9KTtcclxufVxyXG5cclxuLy8gQ29ubmVjdDogc3dhcCB0aGUgY29uZmlybWF0aW9uIGZvciB0aGUgdGVybWluYWwgcG9wLXVwLiBTdGF0aWMgYmFja2Ryb3AgYW5kXHJcbi8vIG5vIEVzYywgc28gYSBzdHJheSBjbGljayBjYW5ub3QgZHJvcCBhIGxpdmUgc2hlbGw7IGl0IGNsb3NlcyB2aWEgQ2xvc2UuXHJcbmNvbm5lY3QoY29uZmlybVJlZjogYW55KTogdm9pZCB7XHJcbiAgY29uZmlybVJlZi5jbG9zZSgpO1xyXG4gIGNvbnN0IHJlZiA9IHRoaXMubW9kYWwub3BlbihSZW1vdGVUZXJtaW5hbENvbXBvbmVudCwge1xyXG4gICAgc2l6ZTogJ3hsJywgY2VudGVyZWQ6IHRydWUsIGJhY2tkcm9wOiAnc3RhdGljJywga2V5Ym9hcmQ6IGZhbHNlLCBtb2RhbERpYWxvZ0NsYXNzOiAncmVtb3RlLXRlcm1pbmFsLW1vZGFsJyxcclxuICB9KTtcclxuICByZWYuY29tcG9uZW50SW5zdGFuY2Uuc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcclxufVxyXG5cclxufVxyXG4iLCI8IS0tIFN0b3JlIGNhcmQ6IG5hbWUgYW5kIHRpbWluZ3MgZnJvbSBnZXQtc3RvcmUsIExpdmUgc3RhdHVzIGZyb20gdGhlIFYyIHN0b3JlIGxpc3QuIC0tPlxyXG48ZGl2IGNsYXNzPVwiY2FyZCBtYi01IHB5LTQgcHgtNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTNcIj48c3ZnIHdpZHRoPVwiNDZcIiBoZWlnaHQ9XCI0NlwiIHZpZXdCb3g9XCIwIDAgNDYgNDZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgPHJlY3QgeD1cIjNcIiB5PVwiM1wiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHJ4PVwiMjBcIiBmaWxsPVwiI0QxRkFERlwiLz5cclxuICAgICAgICAgICAgPHJlY3QgeD1cIjNcIiB5PVwiM1wiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHJ4PVwiMjBcIiBzdHJva2U9XCIjRUNGREYzXCIgc3Ryb2tlLXdpZHRoPVwiNlwiLz5cclxuICAgICAgICAgICAgPHBhdGggZD1cIk0xNS42Nzk5IDE4LjgwMzlMMTUuNjI2NyAxOC44ODcxQzE1LjA2ODYgMTkuODc0MSAxNS42NjQ0IDIxLjEyMTUgMTYuNzM2MSAyMS4yNjQ2QzE2LjgzMzEgMjEuMjc2NSAxNi45MjM1IDIxLjI4MjggMTcuMDExOCAyMS4yODI4QzE3LjU4OTkgMjEuMjgyOCAxOC4xMDExIDIxLjAzNDggMTguNDU3NCAyMC42NDhMMTkuMDEwNyAyMC4wNDc0TDE5LjU2MjEgMjAuNjQ5OEMxOS45MTQxIDIxLjAzNDIgMjAuNDI0MSAyMS4yODI4IDIxLjAwNjEgMjEuMjgyOEMyMS41ODU2IDIxLjI4MjggMjIuMDk4NSAyMS4wMzM4IDIyLjQ1MDIgMjAuNjQ5OEwyMy4wMDMzIDIwLjA0NTVMMjMuNTU2NSAyMC42NDk4QzIzLjkwODEgMjEuMDMzOCAyNC40MjExIDIxLjI4MjggMjUuMDAwNSAyMS4yODI4QzI1LjU4IDIxLjI4MjggMjYuMDkyOSAyMS4wMzM4IDI2LjQ0NDUgMjAuNjQ5OEwyNi45OTc3IDIwLjA0NTVMMjcuNTUwOSAyMC42NDk4QzI3LjkwMjUgMjEuMDMzOCAyOC40MTU1IDIxLjI4MjggMjguOTk0OSAyMS4yODI4QzI5LjA4MDMgMjEuMjgyOCAyOS4xNzMzIDIxLjI3NjUgMjkuMjY5NyAyMS4yNjQ3QzMwLjM2NDkgMjEuMTE1NCAzMC45NjI3IDE5LjgwMTIgMzAuMzI0IDE4LjgwNDRDMzAuMzI0IDE4LjgwNDMgMzAuMzI0IDE4LjgwNDMgMzAuMzIzOSAxOC44MDQyTDI4LjU2NTggMTYuMDYyOEwyOC41NjU4IDE2LjA2MjhMMjguNTY0OCAxNi4wNjE0QzI4LjU0OTYgMTYuMDM3NSAyOC41MTIxIDE2LjAxMiAyOC40NjUgMTYuMDEySDE3LjUzNTZDMTcuNDg4NCAxNi4wMTIgMTcuNDUwOSAxNi4wMzc1IDE3LjQzNTcgMTYuMDYxNEwxNy40MzUxIDE2LjA2MjNMMTUuNjc5OSAxOC44MDM5Wk0yOC42NTE0IDIzLjczNzJWMjYuODY5MVYyNy42MTkxSDI3LjkwMTRIMTguMDk5MkgxNy4zNDkyVjI2Ljg2OTFWMjMuNzM3NkMxNy4yMzkgMjMuNzQ1OCAxNy4xMjc0IDIzLjc1MDEgMTcuMDE0OCAyMy43NTAxQzE2Ljk3MjUgMjMuNzUwMSAxNi45MzA1IDIzLjc0OTQgMTYuODg4OCAyMy43NDgyVjI2Ljg2OTFWMjguODAzNkMxNi44ODg4IDI5LjQ0NzEgMTcuNDIyNyAyOS45ODgyIDE4LjA5OTIgMjkuOTg4MkgyNy45MDE0QzI4LjU3NzkgMjkuOTg4MiAyOS4xMTE4IDI5LjQ0NzEgMjkuMTExOCAyOC44MDM2VjI2Ljg2OTFWMjMuNzQ4NEMyOS4wNzIgMjMuNzQ5NSAyOS4wMzIgMjMuNzUwMSAyOC45OTE4IDIzLjc1MDFDMjguODc3NCAyMy43NTAxIDI4Ljc2MzkgMjMuNzQ1NyAyOC42NTE0IDIzLjczNzJaXCIgc3Ryb2tlPVwiIzAyN0E0OFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiLz5cclxuICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RvcmUtY2FyZC1uYW1lXCI+e3sgc3RvcmVOYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJsaXZlU3RhdHVzXCIgY2xhc3M9XCJsaXZlLXN0YXR1cyBtcy00XCIgW2NsYXNzLmRvd25dPVwibGl2ZVN0YXR1cyA9PT0gJ05vdCBMaXZlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGl2ZS1kb3RcIj48L3NwYW4+e3sgbGl2ZVN0YXR1cyB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0b3JlLWNhcmQtbWV0YSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG10LTFcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHN0b3JlSWQgfHwgJy0tJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMlwiPsK3PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm1lLTFcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDQuNVY5TDEyIDEwLjVNMTYuNSA5QzE2LjUgMTMuMTQyMSAxMy4xNDIxIDE2LjUgOSAxNi41QzQuODU3ODYgMTYuNSAxLjUgMTMuMTQyMSAxLjUgOUMxLjUgNC44NTc4NiA0Ljg1Nzg2IDEuNSA5IDEuNUMxMy4xNDIxIDEuNSAxNi41IDQuODU3ODYgMTYuNSA5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjRcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBzdG9yZU9wZW4gfHwgJy0tJyB9fSAtIHt7IHN0b3JlQ2xvc2UgfHwgJy0tJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBUYW5nbyB1c2VycyBvZiBJbmZyYSBWMiBjbGllbnRzIG9ubHkuIFRoZSBob3ZlcmVkIGJ1dHRvbiBleHBhbmRzOyBUZXJtaW5hbCBhY2Nlc3MgaXMgZXhwYW5kZWQgd2hpbGUgbm9uZSBpcy4gLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dTdG9yZUFjdGlvbnNcIiBjbGFzcz1cInN0b3JlLWFjdGlvbnMgbXMtYXV0byBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic3RvcmUtYWN0IGlzLWRlZmF1bHRcIiAoY2xpY2spPVwib3BlblRlcm1pbmFsKHRlcm1pbmFsVHBsKVwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIzLjVcIiB3aWR0aD1cIjE5XCIgaGVpZ2h0PVwiMTNcIiByeD1cIjJcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04IDIxSDE2TTEyIDE2LjVWMjFNNi41IDhMOSAxMEw2LjUgMTJNMTEgMTJIMTRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz48c3BhbiBjbGFzcz1cImFjdC1sYWJlbFwiPlRlcm1pbmFsIGFjY2Vzczwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic3RvcmUtYWN0XCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgNy41QzMgNi40IDMuOSA1LjUgNSA1LjVIOS4yTDExLjIgNy41SDE5QzIwLjEgNy41IDIxIDguNCAyMSA5LjVWMTdDMjEgMTguMSAyMC4xIDE5IDE5IDE5SDVDMy45IDE5IDMgMTguMSAzIDE3VjcuNVpcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwiYWN0LWxhYmVsXCI+RmlsZSBhY2Nlc3M8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInN0b3JlLWFjdFwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjYgNC41TDYuNCAzLjZDNS44IDMuNCA1LjEgMy42IDQuNyA0LjFMMy41IDUuNkMzLjEgNi4xIDMgNi44IDMuMiA3LjRDNC45IDEyLjcgOS4zIDE3LjEgMTQuNiAxOC44QzE1LjIgMTkgMTUuOSAxOC45IDE2LjQgMTguNUwxNy45IDE3LjNDMTguNCAxNi45IDE4LjYgMTYuMiAxOC40IDE1LjZMMTcuNSAxMy40QzE3LjMgMTIuOCAxNi42IDEyLjUgMTYgMTIuNkwxMy42IDEzLjFDMTEuOSAxMi4yIDEwLjggMTEuMSA5LjkgOS40TDEwLjQgN0MxMC41IDYuNCAxMC4yIDUuNyA5LjYgNS41TDguNiA0LjVaXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS44XCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz48c3BhbiBjbGFzcz1cImFjdC1sYWJlbFwiPkNhbGw8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwiY2FyZCBtYi01IHB5LTMgcHgtNVwiPlxyXG4gICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzMSBuYXYtbGluZS10YWJzIGJvcmRlci10cmFuc3BhcmVudCBmbGV4LW5vd3JhcFwiPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMoJ2luZnJhJylcIj48YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYiA9PT0naW5mcmEnID8gJ2FjdGl2ZScgOicnXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyIG5vLWJvcmRlciBtZS02IFwiPkluZnJhPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMoJ2RhdGFNaXNtYXRjaCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYiA9PT0nZGF0YU1pc21hdGNoJyA/ICdhY3RpdmUnIDonJ1wiIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbWUtNlwiPkRhdGEgTWlzbWF0Y2g8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFicygnY2FtZXJhQW5nbGVDaGFuZ2UnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIgPT09J2NhbWVyYUFuZ2xlQ2hhbmdlJyA/ICdhY3RpdmUnIDonJ1wiIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbWUtNlwiPkNhbWVyYSBBbmdsZTwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPCEtLSBGaWxlIGxvZ3MsIGF0IHRoZSByaWdodCBlbmQgb2YgdGhlIHJvdzogaXRzIG93biBwYWdlIGF0ID90eXBlPWZpbGVMb2dzLiBUYW5nbyBvbmx5LiAtLT5cclxuICAgICAgICAgICAgPGxpICpuZ0lmPVwiaXNUYW5nb1wiIGNsYXNzPVwibmF2LWl0ZW0gbXMtYXV0b1wiIChjbGljayk9XCJzZWxlY3RlZFRhYnMoJ2ZpbGVMb2dzJylcIj5cclxuICAgICAgICAgICAgICAgIDxhIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSdmaWxlTG9ncycgPyAnYWN0aXZlJyA6JydcIiBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyIGZpbGUtbG9ncy1saW5rXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgM0g3QzUuOSAzIDUgMy45IDUgNVYxOUM1IDIwLjEgNS45IDIxIDcgMjFIMTdDMTguMSAyMSAxOSAyMC4xIDE5IDE5VjhMMTQgM1pcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNCAzVjhIMTlNOSAxM0gxNU05IDE3SDEzXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS44XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIEZpbGUgbG9nc1xyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG5cclxuICAgICAgICAgICAgIDwhLS0gPGxpICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LnVzZXJUeXBlID09PSAndGFuZ28nIHx8IGNsaWVudERhdGE/LmlzVk1TXCIgY2xhc3M9XCJuYXYtaXRlbVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMoJ2Zvb3RmYWxsJylcIj5cclxuICAgICAgICAgICAgICAgIDxhIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSdmb290ZmFsbCcgPyAnYWN0aXZlJyA6JydcIiBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyIG1lLTZcIj5Gb290ZmFsbCBEaXJlY3Rvcnk8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+IC0tPlxyXG4gICAgICAgIDwvdWw+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09J2luZnJhJ1wiIGNsYXNzPVwibWItNSBweS0zIHB4LTVcIj5cclxuICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzMSBuYXYtbGluZS10YWJzIGJvcmRlci10cmFuc3BhcmVudCBmbGV4LW5vd3JhcFwiPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG5hdi1pdGVtMVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMxKCdzdW1tYXJ5JylcIj48YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYjEgPT09J3N1bW1hcnknID8gJ2FjdGl2ZScgOicnXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgbmF2LWxpbmsxIGN1cnNvci1wb2ludGVyIG5vLWJvcmRlciBtZS02IFwiPlN1bW1hcnk8L2E+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBuYXYtaXRlbTFcIiAoY2xpY2spPVwic2VsZWN0ZWRUYWJzMSgndGlja2V0cycpXCI+XHJcbiAgICAgICAgICAgIDxhIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiMSA9PT0ndGlja2V0cycgPyAnYWN0aXZlJyA6JydcIiBjbGFzcz1cIm5hdi1saW5rIG5hdi1saW5rMSBjdXJzb3ItcG9pbnRlciBtZS02XCI+VGlja2V0cyBWMTwvYT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG5hdi1pdGVtMVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMxKCd0aWNrZXRzVjInKVwiPlxyXG4gICAgICAgICAgICA8YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYjEgPT09J3RpY2tldHNWMicgPyAnYWN0aXZlJyA6JydcIiBjbGFzcz1cIm5hdi1saW5rIG5hdi1saW5rMSBjdXJzb3ItcG9pbnRlciBtZS02XCI+VGlja2V0cyBWMjwvYT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0naW5mcmEnICYmIHNlbGVjdGVkVGFiMSA9PT0nc3VtbWFyeSdcIj5cclxuICAgIDxsaWItc3VtbWFyeS1pbmZyYSBbc2VsZWN0ZWRUYWJdPVwic2VsZWN0ZWRUYWJcIj48L2xpYi1zdW1tYXJ5LWluZnJhPlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGVkVGFiID09PSdpbmZyYScgJiYgc2VsZWN0ZWRUYWIxID09PSd0aWNrZXRzJ1wiPlxyXG4gICAgPGxpYi10aWNrZXQtaW5mcmEgW3NlbGVjdGVkVGFiXT1cInNlbGVjdGVkVGFiXCI+PC9saWItdGlja2V0LWluZnJhPlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGVkVGFiID09PSdpbmZyYScgJiYgc2VsZWN0ZWRUYWIxID09PSd0aWNrZXRzVjInXCI+XHJcbiAgICA8bGliLXRpY2tldC1pbmZyYS12MiBbc2VsZWN0ZWRUYWJdPVwic2VsZWN0ZWRUYWJcIj48L2xpYi10aWNrZXQtaW5mcmEtdjI+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09J2RhdGFNaXNtYXRjaCdcIj5cclxuICAgIDxsaWItdGlja2V0LWluZnJhIFtzZWxlY3RlZFRhYl09XCJzZWxlY3RlZFRhYlwiPjwvbGliLXRpY2tldC1pbmZyYT5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09J2NhbWVyYUFuZ2xlQ2hhbmdlJ1wiPlxyXG4gICAgPGxpYi10aWNrZXQtY2FtZXJhLWFuZ2xlIFtzZWxlY3RlZFRhYl09XCJzZWxlY3RlZFRhYlwiPjwvbGliLXRpY2tldC1jYW1lcmEtYW5nbGU+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09J2Zvb3RmYWxsJ1wiPlxyXG4gICAgPGxpYi1mb290ZmFsbC1kaXJlY3RvcnkgW3NlbGVjdGVkVGFiXT1cInNlbGVjdGVkVGFiXCI+PC9saWItZm9vdGZhbGwtZGlyZWN0b3J5PlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGVkVGFiID09PSdmaWxlTG9ncycgJiYgaXNUYW5nb1wiPlxyXG4gICAgPGxpYi1maWxlLWxvZ3MgW3N0b3JlSWRdPVwic3RvcmVJZFwiIFtjbGllbnRJZF09XCJoZWFkZXJGaWx0ZXJzPy5jbGllbnRcIiBbZGF0ZV09XCJoZWFkZXJGaWx0ZXJzPy5kYXRlPy5lbmREYXRlXCI+PC9saWItZmlsZS1sb2dzPlxyXG48L2Rpdj5cclxuPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxyXG5cclxuPCEtLSBUZXJtaW5hbCBhY2Nlc3MgY29uZmlybWF0aW9uLiBGaWxsZWQgZnJvbSAvaW5mcmEvdjIvcmVtb3RlL3Nlc3Npb247IENsaWVudCBuYW1lIGZyb20gdGhlIGNsaWVudCByZWNvcmQuIC0tPlxyXG48bmctdGVtcGxhdGUgI3Rlcm1pbmFsVHBsIGxldC1tb2RhbD5cclxuICAgIDxkaXYgY2xhc3M9XCJhY2Nlc3MtbW9kYWxcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLWhlYWRcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY2Nlc3MtaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIyXCIgaGVpZ2h0PVwiMjJcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIzLjVcIiB3aWR0aD1cIjE5XCIgaGVpZ2h0PVwiMTNcIiByeD1cIjJcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04IDIxSDE2TTEyIDE2LjVWMjFNNi41IDhMOSAxMEw2LjUgMTJNMTEgMTJIMTRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFjY2Vzcy10aXRsZSBmcy00IHRleHQtZ3JheS04MDAgZnctYm9sZFwiPk9wZW4gdGVybWluYWwgYWNjZXNzPzwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLWJvZHlcIj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJhY2Nlc3MtdGV4dFwiPlRoaXMgb3BlbnMgYSBjb21tYW5kIHdpbmRvdyBvbiB0aGUgc3RvcmUgc3lzdGVtLiBDb21tYW5kcyBydW4gb24gdGhlIGxpdmUgc3lzdGVtLjwvcD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjY2Vzcy1ib3hcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gTG9hZGluZzogc2hpbW1lcmluZyBwbGFjZWhvbGRlciByb3dzIChzZWUgLnNrZWwpLiAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZXNzaW9uU3RhdGUgPT09ICdsb2FkaW5nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2Nlc3Mtcm93XCI+PHNwYW4gY2xhc3M9XCJza2VsIHNrZWwtbGFiZWxcIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJza2VsIHNrZWwtdmFsdWVcIj48L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjY2Vzcy1yb3dcIj48c3BhbiBjbGFzcz1cInNrZWwgc2tlbC1sYWJlbFwiPjwvc3Bhbj48c3BhbiBjbGFzcz1cInNrZWwgc2tlbC12YWx1ZVwiPjwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLXJvd1wiPjxzcGFuIGNsYXNzPVwic2tlbCBza2VsLWxhYmVsXCI+PC9zcGFuPjxzcGFuIGNsYXNzPVwic2tlbCBza2VsLXZhbHVlXCI+PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2Vzc2lvblN0YXRlID09PSAnZXJyb3InXCIgY2xhc3M9XCJhY2Nlc3Mtbm90ZSBlcnJvclwiPnt7IHNlc3Npb25FcnJvciB8fCBcIkNvdWxkbid0IG9wZW4gdGhlIHNlc3Npb24uXCIgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZXNzaW9uU3RhdGUgPT09ICdyZWFkeSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLXJvd1wiPjxzcGFuIGNsYXNzPVwiYWNjZXNzLWxhYmVsXCI+Q2xpZW50IG5hbWU8L3NwYW4+PHNwYW4gY2xhc3M9XCJhY2Nlc3MtdmFsdWVcIj57eyBjbGllbnREaXNwbGF5TmFtZSB8fCAnLS0nIH19PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2Nlc3Mtcm93XCI+PHNwYW4gY2xhc3M9XCJhY2Nlc3MtbGFiZWxcIj5TdG9yZSBJRDwvc3Bhbj48c3BhbiBjbGFzcz1cImFjY2Vzcy12YWx1ZVwiPnt7IHNlc3Npb24/LnN0b3JlSWQgfHwgJy0tJyB9fTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLXJvd1wiPjxzcGFuIGNsYXNzPVwiYWNjZXNzLWxhYmVsXCI+U3RvcmUgbmFtZTwvc3Bhbj48c3BhbiBjbGFzcz1cImFjY2Vzcy12YWx1ZVwiPnt7IHNlc3Npb24/LnN0b3JlTmFtZSB8fCAnLS0nIH19PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY2Nlc3MtZm9vdFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIChjbGljayk9XCJtb2RhbC5jbG9zZSgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgW2Rpc2FibGVkXT1cInNlc3Npb25TdGF0ZSAhPT0gJ3JlYWR5J1wiIChjbGljayk9XCJjb25uZWN0KG1vZGFsKVwiPkNvbm5lY3Q8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|