tango-app-ui-analyse-zone 3.3.1-beta.9 → 3.7.1-beta.2

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 (46) hide show
  1. package/esm2022/lib/components/customer-journey-chart/customer-journey-chart.component.mjs +280 -0
  2. package/esm2022/lib/components/interation-table-client430/interation-table-client430.component.mjs +205 -0
  3. package/esm2022/lib/components/interation-table-client459/interation-table-client459.component.mjs +87 -0
  4. package/esm2022/lib/components/overallcards/overallcards.component.mjs +108 -11
  5. package/esm2022/lib/components/passerby-table/passerby-table.component.mjs +118 -0
  6. package/esm2022/lib/components/segmentation/segmentation.component.mjs +457 -0
  7. package/esm2022/lib/components/services/zone.service.mjs +61 -7
  8. package/esm2022/lib/components/services/zonev2.service.mjs +12 -4
  9. package/esm2022/lib/components/tango-analyse-zone/tango-analyse-zone.component.mjs +62 -16
  10. package/esm2022/lib/components/top-performing-zones/top-performing-zones.component.mjs +7 -8
  11. package/esm2022/lib/components/zone-concentration/concentrationheatmap/concentrationheatmap.component.mjs +34 -5
  12. package/esm2022/lib/components/zone-concentration/zone-concentration.component.mjs +134 -44
  13. package/esm2022/lib/components/zone-summary-table/zone-summary-table.component.mjs +60 -12
  14. package/esm2022/lib/components/zone-v2/customer-journey/customer-journey.component.mjs +31 -86
  15. package/esm2022/lib/components/zone-v2/image-directory/image-directory.component.mjs +4 -4
  16. package/esm2022/lib/components/zone-v2/image-directory-view/image-directory-view.component.mjs +4 -4
  17. package/esm2022/lib/components/zone-v2/reactive-select/reactive-select.component.mjs +4 -4
  18. package/esm2022/lib/components/zone-v2/store-heatmap/store-heatmap.component.mjs +67 -48
  19. package/esm2022/lib/components/zone-v2/store-heatmap/store-zoom-heatmap/store-zoom-heatmap.component.mjs +4 -9
  20. package/esm2022/lib/components/zone-v2/summary-table/summary-table.component.mjs +69 -14
  21. package/esm2022/lib/components/zone-v2/top-performing/top-performing.component.mjs +22 -14
  22. package/esm2022/lib/components/zone-v2/zone-v2.component.mjs +46 -16
  23. package/esm2022/lib/components/zone-v2/zones-cards/zones-cards.component.mjs +7 -5
  24. package/esm2022/lib/tango-analyse-zone-routing.module.mjs +5 -5
  25. package/esm2022/lib/tango-analyse-zone.module.mjs +21 -6
  26. package/fesm2022/tango-app-ui-analyse-zone.mjs +1869 -338
  27. package/fesm2022/tango-app-ui-analyse-zone.mjs.map +1 -1
  28. package/lib/components/customer-journey-chart/customer-journey-chart.component.d.ts +50 -0
  29. package/lib/components/interation-table-client430/interation-table-client430.component.d.ts +28 -0
  30. package/lib/components/interation-table-client459/interation-table-client459.component.d.ts +24 -0
  31. package/lib/components/overallcards/overallcards.component.d.ts +18 -3
  32. package/lib/components/passerby-table/passerby-table.component.d.ts +32 -0
  33. package/lib/components/segmentation/segmentation.component.d.ts +57 -0
  34. package/lib/components/services/zone.service.d.ts +22 -3
  35. package/lib/components/services/zonev2.service.d.ts +4 -0
  36. package/lib/components/tango-analyse-zone/tango-analyse-zone.component.d.ts +13 -2
  37. package/lib/components/top-performing-zones/top-performing-zones.component.d.ts +3 -3
  38. package/lib/components/zone-concentration/concentrationheatmap/concentrationheatmap.component.d.ts +5 -0
  39. package/lib/components/zone-concentration/zone-concentration.component.d.ts +7 -3
  40. package/lib/components/zone-summary-table/zone-summary-table.component.d.ts +2 -1
  41. package/lib/components/zone-v2/customer-journey/customer-journey.component.d.ts +2 -1
  42. package/lib/components/zone-v2/summary-table/summary-table.component.d.ts +2 -1
  43. package/lib/components/zone-v2/zone-v2.component.d.ts +9 -1
  44. package/lib/components/zone-v2/zones-cards/zones-cards.component.d.ts +1 -0
  45. package/lib/tango-analyse-zone.module.d.ts +11 -6
  46. package/package.json +1 -1
@@ -0,0 +1,205 @@
1
+ import { Component } from '@angular/core';
2
+ import { Subject, debounceTime, takeUntil } from 'rxjs';
3
+ import * as am5 from "@amcharts/amcharts5";
4
+ import * as am5xy from "@amcharts/amcharts5/xy";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../services/zone.service";
7
+ import * as i2 from "tango-app-ui-global";
8
+ import * as i3 from "tango-app-ui-shared";
9
+ import * as i4 from "@angular/common";
10
+ export class InterationTableClient430Component {
11
+ ZoneService;
12
+ changeDetector;
13
+ gs;
14
+ toast;
15
+ el;
16
+ cardData = {};
17
+ cardDataLoading = true;
18
+ cardNoData = false;
19
+ headerData;
20
+ isExport = false;
21
+ root;
22
+ destroy$ = new Subject();
23
+ constructor(ZoneService, changeDetector, gs, toast, el) {
24
+ this.ZoneService = ZoneService;
25
+ this.changeDetector = changeDetector;
26
+ this.gs = gs;
27
+ this.toast = toast;
28
+ this.el = el;
29
+ }
30
+ ngOnInit() {
31
+ this.gs.dataRangeValue
32
+ .pipe(takeUntil(this.destroy$), debounceTime(300))
33
+ .subscribe((data) => {
34
+ this.headerData = data;
35
+ this.getCardData();
36
+ });
37
+ }
38
+ ngOnDestroy() {
39
+ // this.zone.runOutsideAngular(() => {
40
+ if (this.root) {
41
+ this.root.dispose();
42
+ }
43
+ // });
44
+ this.destroy$.next();
45
+ this.destroy$.complete();
46
+ }
47
+ getCardData() {
48
+ this.cardDataLoading = true;
49
+ this.cardNoData = true;
50
+ const requestData = {
51
+ fromDate: this.headerData.date.startDate,
52
+ toDate: this.headerData.date.endDate,
53
+ storeId: this.headerData.stores.filter((store) => store.checked).map((store) => store.storeId),
54
+ clientId: this.headerData.client,
55
+ export: false,
56
+ };
57
+ this.ZoneService.getInterationTable430Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response) => {
58
+ this.cardDataLoading = false;
59
+ if (response?.code === 200 && response?.status === "success") {
60
+ console.log(this.cardData);
61
+ this.cardData = response.data.data;
62
+ this.cardNoData = this.cardData.length === 0;
63
+ setTimeout(() => {
64
+ this.createChart(this.cardData); // Call this method after data is set
65
+ }, 200);
66
+ // this.createChart(this.cardData);
67
+ }
68
+ else {
69
+ this.cardData = [];
70
+ this.cardNoData = true;
71
+ }
72
+ }, error => {
73
+ this.cardData = [];
74
+ this.cardNoData = true;
75
+ this.changeDetector.detectChanges();
76
+ });
77
+ }
78
+ createChart(cardData) {
79
+ setTimeout(() => {
80
+ const chartDiv = document.getElementById("chartdiv");
81
+ if (!chartDiv) {
82
+ console.error("Could not find HTML element with id `chartdiv`");
83
+ return;
84
+ }
85
+ if (this.root) {
86
+ this.root.dispose();
87
+ }
88
+ this.root = am5.Root.new('chartdiv');
89
+ const chart = this.root.container.children.push(am5xy.XYChart.new(this.root, {
90
+ panX: false,
91
+ panY: false,
92
+ paddingLeft: 0,
93
+ wheelX: "panX",
94
+ wheelY: "zoomX",
95
+ layout: this.root.verticalLayout
96
+ }));
97
+ const legend = chart.children.push(am5.Legend.new(this.root, {
98
+ centerX: am5.p50,
99
+ x: am5.p50
100
+ }));
101
+ const data = cardData.map((item) => ({
102
+ year: item.store_name,
103
+ customerCountOver10Min: item.customer_count_over10min,
104
+ customerCountLessThanMin: item.customer_count_lessthanamin
105
+ }));
106
+ const xRenderer = am5xy.AxisRendererX.new(this.root, {
107
+ cellStartLocation: 0.1,
108
+ cellEndLocation: 0.9,
109
+ minorGridEnabled: true
110
+ });
111
+ const xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(this.root, {
112
+ categoryField: "year",
113
+ renderer: xRenderer,
114
+ tooltip: am5.Tooltip.new(this.root, {})
115
+ }));
116
+ xRenderer.grid.template.setAll({
117
+ location: 1
118
+ });
119
+ xAxis.data.setAll(data);
120
+ xAxis.get("renderer").labels.template.setAll({
121
+ visible: false
122
+ });
123
+ const yAxis = chart.yAxes.push(am5xy.ValueAxis.new(this.root, {
124
+ renderer: am5xy.AxisRendererY.new(this.root, {
125
+ strokeOpacity: 0.1
126
+ })
127
+ }));
128
+ // Use an arrow function to ensure `this` is bound correctly
129
+ const makeSeries = (name, fieldName) => {
130
+ const series = chart.series.push(am5xy.ColumnSeries.new(this.root, {
131
+ name: name,
132
+ xAxis: xAxis,
133
+ yAxis: yAxis,
134
+ valueYField: fieldName,
135
+ categoryXField: "year"
136
+ }));
137
+ series.columns.template.setAll({
138
+ tooltipText: "{name}: {valueY}",
139
+ width: am5.percent(90),
140
+ tooltipY: 0,
141
+ strokeOpacity: 0
142
+ });
143
+ series.data.setAll(data);
144
+ series.appear();
145
+ series.bullets.push(() => {
146
+ return am5.Bullet.new(this.root, {
147
+ locationY: 0,
148
+ sprite: am5.Label.new(this.root, {
149
+ text: "{valueY}",
150
+ fill: this.root.interfaceColors.get("alternativeText"),
151
+ centerY: 0,
152
+ centerX: am5.p50,
153
+ populateText: true
154
+ })
155
+ });
156
+ });
157
+ legend.data.push(series);
158
+ };
159
+ makeSeries("Customer spent more than 10 mins", "customerCountOver10Min");
160
+ makeSeries("Billing Conversion", "customerCountLessThanMin");
161
+ chart.appear(1000, 100);
162
+ }, 100);
163
+ }
164
+ onExport() {
165
+ const requestData = {
166
+ fromDate: this.headerData.date.startDate,
167
+ toDate: this.headerData.date.endDate,
168
+ storeId: this.headerData.stores.filter((store) => store.checked).map((store) => store.storeId),
169
+ clientId: this.headerData.client,
170
+ export: true,
171
+ };
172
+ this.ZoneService.getInterationTable430DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({
173
+ next: (res) => {
174
+ this.ZoneService.saveAsExcelFile(res, 'CustomerFunnel');
175
+ },
176
+ error: (e) => {
177
+ this.toast.getErrorToast('Something went Wrong..');
178
+ }
179
+ });
180
+ }
181
+ onRateExport() {
182
+ const requestData = {
183
+ fromDate: this.headerData.date.startDate,
184
+ toDate: this.headerData.date.endDate,
185
+ storeId: this.headerData.stores.filter((store) => store.checked).map((store) => store.storeId),
186
+ clientId: this.headerData.client,
187
+ export: true,
188
+ };
189
+ this.ZoneService.zoneInteractionTableExport_430(requestData).pipe(takeUntil(this.destroy$)).subscribe({
190
+ next: (res) => {
191
+ this.ZoneService.saveAsExcelFile(res, 'InteractionvsConversion');
192
+ },
193
+ error: (e) => {
194
+ this.toast.getErrorToast('Something went Wrong..');
195
+ }
196
+ });
197
+ }
198
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InterationTableClient430Component, deps: [{ token: i1.ZoneService }, { token: i0.ChangeDetectorRef }, { token: i2.GlobalStateService }, { token: i3.ToastService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
199
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: InterationTableClient430Component, selector: "lib-interation-table-client430", ngImport: i0, template: "\r\n<div class=\"row\">\r\n\r\n<div class=\"col-6 ps-5 pe-0\" *ngIf=\"!cardNoData\" >\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start flex-column headtext p-3\">Customer Funnel</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- overflowfunnel -->\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" class=\"body me-4\">\r\n <div *ngFor=\"let item of cardData\" class=\"m-4\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Passer By\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.passer_by || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Drop In Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.drop_in_rate || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Customer Attended\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.customer_attended || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Interaction Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ item.interaction_rate || '--' }} %</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall_overamin_inzone || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.billing_conversion_rate || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Count\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.greeting_count || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Interaction Time\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.avg_interaction_time || '--' }} Mins\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n \r\n\r\n <!-- <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n \r\n <th>Interaction Rate</th>\r\n <th>Customer Attended</th>\r\n <th>Passer By</th>\r\n \r\n <th>Drop In Rate</th>\r\n <th>Billing Conversion</th>\r\n <th>Footfall</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.interaction_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.customer_attended }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.passer_by }}</div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.zonename }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.drop_in_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall_overamin_inzone }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall }}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div> -->\r\n </div>\r\n</div>\r\n\r\n<div class=\"col-6 ps-7 pe-0\" *ngIf=\"!cardNoData\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start flex-column headtext p-3\">Interaction vs Conversion</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!-- [disabled]=\"!cardData.length\" -->\r\n <button type=\"button\" (click)=\"onRateExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body mb-14 p-0\">\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" id=\"chartdiv\"></div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n \r\n</div>\r\n", styles: [".table-title-primary{color:var(--Primary-700, #009BF3);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.table-title{color:var(--Gray-900, #101828);font-size:14px;font-weight:700;line-height:20px}.subtext{color:var(--Gray-800, #1D2939);font-size:14px;font-weight:500;line-height:20px}.headcount{color:var(--Gray-900, #101828);font-size:20px;font-weight:600;line-height:30px}.headtext{color:var(--Gray-700, #344054);font-size:18px;font-weight:600;line-height:28px}.subratetext{color:var(--Gray-500, #667085);font-size:12px;font-weight:500;line-height:18px}#zonechartdiv{width:100%;height:365px;margin-bottom:6%}.invoicesearch{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-style:normal;font-weight:500!important;line-height:20px}.exportwidth{width:40%}.invoicesearch::placeholder{color:var(--Gray-700, #344054)!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.activePlanBtn{border-radius:6px;background:var(--Primary-50, #EAF8FF);color:var(--Gray-700, #344054);font-size:14px!important;font-weight:500!important;line-height:20px}.inactivePlanBtn{color:var(--Gray-500, #667085)!important;font-size:14px;font-weight:500!important;line-height:20px}.overalltext{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px}.borderdashed{border-bottom:1px solid var(--Gray-200, #EAECF0)}.conc{width:110%}.overallstore{width:155%}table td{height:70px!important;align-items:center;gap:12px;align-self:stretch}table tr{vertical-align:middle}::ng-deep .carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:-4%;margin-left:15%}.category_active{border-bottom:3px solid #009EF7!important;border-radius:3px;margin-bottom:3px!important}.timer_active{color:var(--Primary-700, #009BF3);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.cardimg{width:100%;height:350px}.form-control:disabled{background-color:#f9fafb!important}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-container{position:relative;max-height:400px;overflow-y:auto}.fixed-header th{position:sticky;top:0;background-color:#fff;z-index:2}.table.bottom-border thead th{border-bottom:2px solid #dee2e6}.table.bottom-border tbody tr td{border-bottom:1px solid #dee2e6}.table.bottom-border th,.table.bottom-border td{padding:8px 16px;white-space:nowrap}.table-responsive::-webkit-scrollbar{width:6px}.table-responsive::-webkit-scrollbar-thumb{background-color:#ddd;border-radius:4px}.rotate{transform:rotate(180deg)}.no-wrap-list{white-space:nowrap;overflow-x:auto;overflow-y:hidden;padding:0;margin:0;display:flex;flex-wrap:nowrap;-ms-overflow-style:none;scrollbar-width:none}.no-wrap-list::-webkit-scrollbar{display:none}.concheatmap{margin-top:10%}.right-border{border-right:1px solid #D0D5DD;padding-right:15px}.image-container{position:relative;display:inline-block}::ng-deep .carousel-control-next{position:absolute;top:40%!important;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff!important;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease;height:20px!important;background-color:transparent}::ng-deep .carousel-control-prev{position:absolute;top:40%!important;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff!important;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease;height:20px!important;background-color:transparent!important}::ng-deep .carousel-control-next-icon{display:inline-block;width:5rem;height:7rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}::ng-deep .carousel-control-prev-icon{display:inline-block;width:5rem;height:7rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.icon-overlay{position:absolute;cursor:pointer;top:10px;right:10px}::ng-deep .carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:8px;height:8px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#009bf3;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}#chartdiv{width:100%;height:272px}.overflowfunnel{overflow-y:scroll;max-height:286px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
200
+ }
201
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InterationTableClient430Component, decorators: [{
202
+ type: Component,
203
+ args: [{ selector: 'lib-interation-table-client430', template: "\r\n<div class=\"row\">\r\n\r\n<div class=\"col-6 ps-5 pe-0\" *ngIf=\"!cardNoData\" >\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start flex-column headtext p-3\">Customer Funnel</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- overflowfunnel -->\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" class=\"body me-4\">\r\n <div *ngFor=\"let item of cardData\" class=\"m-4\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Passer By\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.passer_by || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Drop In Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.drop_in_rate || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Customer Attended\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.customer_attended || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Interaction Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ item.interaction_rate || '--' }} %</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall_overamin_inzone || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.billing_conversion_rate || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Count\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.greeting_count || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Interaction Time\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.avg_interaction_time || '--' }} Mins\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n \r\n\r\n <!-- <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n \r\n <th>Interaction Rate</th>\r\n <th>Customer Attended</th>\r\n <th>Passer By</th>\r\n \r\n <th>Drop In Rate</th>\r\n <th>Billing Conversion</th>\r\n <th>Footfall</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.interaction_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.customer_attended }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.passer_by }}</div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.zonename }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.drop_in_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall_overamin_inzone }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall }}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div> -->\r\n </div>\r\n</div>\r\n\r\n<div class=\"col-6 ps-7 pe-0\" *ngIf=\"!cardNoData\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start flex-column headtext p-3\">Interaction vs Conversion</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!-- [disabled]=\"!cardData.length\" -->\r\n <button type=\"button\" (click)=\"onRateExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body mb-14 p-0\">\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" id=\"chartdiv\"></div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n \r\n</div>\r\n", styles: [".table-title-primary{color:var(--Primary-700, #009BF3);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.table-title{color:var(--Gray-900, #101828);font-size:14px;font-weight:700;line-height:20px}.subtext{color:var(--Gray-800, #1D2939);font-size:14px;font-weight:500;line-height:20px}.headcount{color:var(--Gray-900, #101828);font-size:20px;font-weight:600;line-height:30px}.headtext{color:var(--Gray-700, #344054);font-size:18px;font-weight:600;line-height:28px}.subratetext{color:var(--Gray-500, #667085);font-size:12px;font-weight:500;line-height:18px}#zonechartdiv{width:100%;height:365px;margin-bottom:6%}.invoicesearch{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-style:normal;font-weight:500!important;line-height:20px}.exportwidth{width:40%}.invoicesearch::placeholder{color:var(--Gray-700, #344054)!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.activePlanBtn{border-radius:6px;background:var(--Primary-50, #EAF8FF);color:var(--Gray-700, #344054);font-size:14px!important;font-weight:500!important;line-height:20px}.inactivePlanBtn{color:var(--Gray-500, #667085)!important;font-size:14px;font-weight:500!important;line-height:20px}.overalltext{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px}.borderdashed{border-bottom:1px solid var(--Gray-200, #EAECF0)}.conc{width:110%}.overallstore{width:155%}table td{height:70px!important;align-items:center;gap:12px;align-self:stretch}table tr{vertical-align:middle}::ng-deep .carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:-4%;margin-left:15%}.category_active{border-bottom:3px solid #009EF7!important;border-radius:3px;margin-bottom:3px!important}.timer_active{color:var(--Primary-700, #009BF3);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.cardimg{width:100%;height:350px}.form-control:disabled{background-color:#f9fafb!important}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-container{position:relative;max-height:400px;overflow-y:auto}.fixed-header th{position:sticky;top:0;background-color:#fff;z-index:2}.table.bottom-border thead th{border-bottom:2px solid #dee2e6}.table.bottom-border tbody tr td{border-bottom:1px solid #dee2e6}.table.bottom-border th,.table.bottom-border td{padding:8px 16px;white-space:nowrap}.table-responsive::-webkit-scrollbar{width:6px}.table-responsive::-webkit-scrollbar-thumb{background-color:#ddd;border-radius:4px}.rotate{transform:rotate(180deg)}.no-wrap-list{white-space:nowrap;overflow-x:auto;overflow-y:hidden;padding:0;margin:0;display:flex;flex-wrap:nowrap;-ms-overflow-style:none;scrollbar-width:none}.no-wrap-list::-webkit-scrollbar{display:none}.concheatmap{margin-top:10%}.right-border{border-right:1px solid #D0D5DD;padding-right:15px}.image-container{position:relative;display:inline-block}::ng-deep .carousel-control-next{position:absolute;top:40%!important;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff!important;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease;height:20px!important;background-color:transparent}::ng-deep .carousel-control-prev{position:absolute;top:40%!important;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff!important;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease;height:20px!important;background-color:transparent!important}::ng-deep .carousel-control-next-icon{display:inline-block;width:5rem;height:7rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}::ng-deep .carousel-control-prev-icon{display:inline-block;width:5rem;height:7rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.icon-overlay{position:absolute;cursor:pointer;top:10px;right:10px}::ng-deep .carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:8px;height:8px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#009bf3;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}#chartdiv{width:100%;height:272px}.overflowfunnel{overflow-y:scroll;max-height:286px}\n"] }]
204
+ }], ctorParameters: () => [{ type: i1.ZoneService }, { type: i0.ChangeDetectorRef }, { type: i2.GlobalStateService }, { type: i3.ToastService }, { type: i0.ElementRef }] });
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhdGlvbi10YWJsZS1jbGllbnQ0MzAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS16b25lL3NyYy9saWIvY29tcG9uZW50cy9pbnRlcmF0aW9uLXRhYmxlLWNsaWVudDQzMC9pbnRlcmF0aW9uLXRhYmxlLWNsaWVudDQzMC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXpvbmUvc3JjL2xpYi9jb21wb25lbnRzL2ludGVyYXRpb24tdGFibGUtY2xpZW50NDMwL2ludGVyYXRpb24tdGFibGUtY2xpZW50NDMwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBR3pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUV2RCxPQUFPLEtBQUssR0FBRyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sS0FBSyxLQUFLLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQWVoRCxNQUFNLE9BQU8saUNBQWlDO0lBUXhCO0lBQWlDO0lBQXlDO0lBQStCO0lBQTRCO0lBUHpKLFFBQVEsR0FBUSxFQUFFLENBQUM7SUFDbkIsZUFBZSxHQUFZLElBQUksQ0FBQztJQUNoQyxVQUFVLEdBQVksS0FBSyxDQUFDO0lBQzVCLFVBQVUsQ0FBTTtJQUNoQixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQ2xCLElBQUksQ0FBWTtJQUNoQixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUN2QyxZQUFvQixXQUF3QixFQUFTLGNBQWlDLEVBQVEsRUFBc0IsRUFBUyxLQUFtQixFQUFTLEVBQWM7UUFBbkosZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBUyxtQkFBYyxHQUFkLGNBQWMs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QWxOVSxpQ0FBaUM7NEZBQWpDLGlDQUFpQyxzRUNyQjlDLHk5ZEF3U0E7OzRGRG5SYSxpQ0FBaUM7a0JBTDdDLFNBQVM7K0JBQ0UsZ0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBab25lU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3pvbmUuc2VydmljZSc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgKiBhcyBhbTUgZnJvbSBcIkBhbWNoYXJ0cy9hbWNoYXJ0czVcIjtcclxuaW1wb3J0ICogYXMgYW01eHkgZnJvbSBcIkBhbWNoYXJ0cy9hbWNoYXJ0czUveHlcIjtcclxuaW1wb3J0ICogYXMgYW01dGhlbWVzX0FuaW1hdGVkIGZyb20gXCJAYW1jaGFydHMvYW1jaGFydHM1L3RoZW1lcy9BbmltYXRlZFwiO1xyXG5cclxuaW50ZXJmYWNlIENoYXJ0RGF0YSB7XHJcbiAgeWVhcjogc3RyaW5nOyAgLy8gb3Igc3RvcmUgbmFtZSwgZGVwZW5kaW5nIG9uIHlvdXIgcmVxdWlyZW1lbnRcclxuICBjdXN0b21lckNvdW50T3ZlcjEwTWluOiBudW1iZXI7XHJcbiAgY3VzdG9tZXJDb3VudExlc3NUaGFuTWluOiBudW1iZXI7XHJcbn1cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1pbnRlcmF0aW9uLXRhYmxlLWNsaWVudDQzMCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ludGVyYXRpb24tdGFibGUtY2xpZW50NDMwLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vaW50ZXJhdGlvbi10YWJsZS1jbGllbnQ0MzAuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnRlcmF0aW9uVGFibGVDbGllbnQ0MzBDb21wb25lbnQge1xyXG4gIGNhcmREYXRhOiBhbnkgPSB7fTtcclxuICBjYXJkRGF0YUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGNhcmROb0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoZWFkZXJEYXRhOiBhbnk7XHJcbiAgaXNFeHBvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHJvb3QhOiBhbTUuUm9vdDtcclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIFpvbmVTZXJ2aWNlOiBab25lU2VydmljZSxwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixwdWJsaWMgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UscHJpdmF0ZSBlbDogRWxlbWVudFJlZiwpIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLCBkZWJvdW5jZVRpbWUoMzAwKSlcclxuICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaGVhZGVyRGF0YSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5nZXRDYXJkRGF0YSgpO1xyXG59KVxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIC8vIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnJvb3QpIHtcclxuICAgICAgICB0aGlzLnJvb3QuZGlzcG9zZSgpO1xyXG4gICAgICB9XHJcbiAgICAvLyB9KTtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2FyZERhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhcmREYXRhTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmNhcmROb0RhdGEgPSB0cnVlO1xyXG4gICAgY29uc3QgcmVxdWVzdERhdGEgPSB7XHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5zdGFydERhdGUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZSxcclxuICAgICAgc3RvcmVJZDogdGhpcy5oZWFkZXJEYXRhLnN0b3Jlcy5maWx0ZXIoKHN0b3JlOiBhbnkpID0+IHN0b3JlLmNoZWNrZWQpLm1hcCgoc3RvcmU6IGFueSkgPT4gc3RvcmUuc3RvcmVJZCksXHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmhlYWRlckRhdGEuY2xpZW50LFxyXG4gICAgICBleHBvcnQ6IGZhbHNlLFxyXG4gICAgfTtcclxuICBcclxuICAgIHRoaXMuWm9uZVNlcnZpY2UuZ2V0SW50ZXJhdGlvblRhYmxlNDMwRGF0YShyZXF1ZXN0RGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmNhcmREYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBpZiAocmVzcG9uc2U/LmNvZGUgPT09IDIwMCAmJiByZXNwb25zZT8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2FyZERhdGEpO1xyXG4gICAgICAgIHRoaXMuY2FyZERhdGEgPSByZXNwb25zZS5kYXRhLmRhdGFcclxuICAgICAgICB0aGlzLmNhcmROb0RhdGEgPSB0aGlzLmNhcmREYXRhLmxlbmd0aCA9PT0gMDtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlQ2hhcnQodGhpcy5jYXJkRGF0YSk7IC8vIENhbGwgdGhpcyBtZXRob2QgYWZ0ZXIgZGF0YSBpcyBzZXRcclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgIC8vIHRoaXMuY3JlYXRlQ2hhcnQodGhpcy5jYXJkRGF0YSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jYXJkRGF0YSA9IFtdO1xyXG4gICAgICAgIHRoaXMuY2FyZE5vRGF0YSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBlcnJvciA9PiB7XHJcbiAgICAgIHRoaXMuY2FyZERhdGEgPSBbXTtcclxuICAgICAgdGhpcy5jYXJkTm9EYXRhID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgXHJcblxyXG4gIGNyZWF0ZUNoYXJ0KGNhcmREYXRhOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNoYXJ0RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjaGFydGRpdlwiKTtcclxuICAgICAgaWYgKCFjaGFydERpdikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZCBub3QgZmluZCBIVE1MIGVsZW1lbnQgd2l0aCBpZCBgY2hhcnRkaXZgXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBpZiAodGhpcy5yb290KSB7XHJcbiAgICAgICAgdGhpcy5yb290LmRpc3Bvc2UoKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICB0aGlzLnJvb3QgPSBhbTUuUm9vdC5uZXcoJ2NoYXJ0ZGl2Jyk7XHJcbiAgXHJcbiAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5yb290LmNvbnRhaW5lci5jaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgIGFtNXh5LlhZQ2hhcnQubmV3KHRoaXMucm9vdCwge1xyXG4gICAgICAgICAgcGFuWDogZmFsc2UsXHJcbiAgICAgICAgICBwYW5ZOiBmYWxzZSxcclxuICAgICAgICAgIHBhZGRpbmdMZWZ0OiAwLFxyXG4gICAgICAgICAgd2hlZWxYOiBcInBhblhcIixcclxuICAgICAgICAgIHdoZWVsWTogXCJ6b29tWFwiLFxyXG4gICAgICAgICAgbGF5b3V0OiB0aGlzLnJvb3QudmVydGljYWxMYXlvdXRcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIFxyXG4gICAgICBjb25zdCBsZWdlbmQgPSBjaGFydC5jaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgIGFtNS5MZWdlbmQubmV3KHRoaXMucm9vdCwge1xyXG4gICAgICAgICAgY2VudGVyWDogYW01LnA1MCxcclxuICAgICAgICAgIHg6IGFtNS5wNTBcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIFxyXG4gICAgICBjb25zdCBkYXRhOiBDaGFydERhdGFbXSA9IGNhcmREYXRhLm1hcCgoaXRlbTogYW55KSA9PiAoe1xyXG4gICAgICAgIHllYXI6IGl0ZW0uc3RvcmVfbmFtZSxcclxuICAgICAgICBjdXN0b21lckNvdW50T3ZlcjEwTWluOiBpdGVtLmN1c3RvbWVyX2NvdW50X292ZXIxMG1pbixcclxuICAgICAgICBjdXN0b21lckNvdW50TGVzc1RoYW5NaW46IGl0ZW0uY3VzdG9tZXJfY291bnRfbGVzc3RoYW5hbWluXHJcbiAgICAgIH0pKTtcclxuICBcclxuICAgICAgY29uc3QgeFJlbmRlcmVyID0gYW01eHkuQXhpc1JlbmRlcmVyWC5uZXcodGhpcy5yb290LCB7XHJcbiAgICAgICAgY2VsbFN0YXJ0TG9jYXRpb246IDAuMSxcclxuICAgICAgICBjZWxsRW5kTG9jYXRpb246IDAuOSxcclxuICAgICAgICBtaW5vckdyaWRFbmFibGVkOiB0cnVlXHJcbiAgICAgIH0pO1xyXG4gIFxyXG4gICAgICBjb25zdCB4QXhpcyA9IGNoYXJ0LnhBeGVzLnB1c2goXHJcbiAgICAgICAgYW01eHkuQ2F0ZWdvcnlBeGlzLm5ldyh0aGlzLnJvb3QsIHtcclxuICAgICAgICAgIGNhdGVnb3J5RmllbGQ6IFwieWVhclwiLFxyXG4gICAgICAgICAgcmVuZGVyZXI6IHhSZW5kZXJlcixcclxuICAgICAgICAgIHRvb2x0aXA6IGFtNS5Ub29sdGlwLm5ldyh0aGlzLnJvb3QsIHt9KVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgXHJcbiAgICAgIHhSZW5kZXJlci5ncmlkLnRlbXBsYXRlLnNldEFsbCh7XHJcbiAgICAgICAgbG9jYXRpb246IDFcclxuICAgICAgfSk7XHJcbiAgXHJcbiAgICAgIHhBeGlzLmRhdGEuc2V0QWxsKGRhdGEpO1xyXG4gIFxyXG4gICAgICB4QXhpcy5nZXQoXCJyZW5kZXJlclwiKS5sYWJlbHMudGVtcGxhdGUuc2V0QWxsKHtcclxuICAgICAgICB2aXNpYmxlOiBmYWxzZVxyXG4gICAgICB9KTtcclxuICBcclxuICAgICAgY29uc3QgeUF4aXMgPSBjaGFydC55QXhlcy5wdXNoKFxyXG4gICAgICAgIGFtNXh5LlZhbHVlQXhpcy5uZXcodGhpcy5yb290LCB7XHJcbiAgICAgICAgICByZW5kZXJlcjogYW01eHkuQXhpc1JlbmRlcmVyWS5uZXcodGhpcy5yb290LCB7XHJcbiAgICAgICAgICAgIHN0cm9rZU9wYWNpdHk6IDAuMVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIFxyXG4gICAgICAvLyBVc2UgYW4gYXJyb3cgZnVuY3Rpb24gdG8gZW5zdXJlIGB0aGlzYCBpcyBib3VuZCBjb3JyZWN0bHlcclxuICAgICAgY29uc3QgbWFrZVNlcmllcyA9IChuYW1lOiBzdHJpbmcsIGZpZWxkTmFtZToga2V5b2YgQ2hhcnREYXRhKTogdm9pZCA9PiB7XHJcbiAgICAgICAgY29uc3Qgc2VyaWVzID0gY2hhcnQuc2VyaWVzLnB1c2goYW01eHkuQ29sdW1uU2VyaWVzLm5ldyh0aGlzLnJvb3QsIHtcclxuICAgICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgICB4QXhpczogeEF4aXMsXHJcbiAgICAgICAgICB5QXhpczogeUF4aXMsXHJcbiAgICAgICAgICB2YWx1ZVlGaWVsZDogZmllbGROYW1lLFxyXG4gICAgICAgICAgY2F0ZWdvcnlYRmllbGQ6IFwieWVhclwiXHJcbiAgICAgICAgfSkpO1xyXG4gIFxyXG4gICAgICAgIHNlcmllcy5jb2x1bW5zLnRlbXBsYXRlLnNldEFsbCh7XHJcbiAgICAgICAgICB0b29sdGlwVGV4dDogXCJ7bmFtZX06IHt2YWx1ZVl9XCIsXHJcbiAgICAgICAgICB3aWR0aDogYW01LnBlcmNlbnQoOTApLFxyXG4gICAgICAgICAgdG9vbHRpcFk6IDAsXHJcbiAgICAgICAgICBzdHJva2VPcGFjaXR5OiAwXHJcbiAgICAgICAgfSk7XHJcbiAgXHJcbiAgICAgICAgc2VyaWVzLmRhdGEuc2V0QWxsKGRhdGEpO1xyXG4gICAgICAgIHNlcmllcy5hcHBlYXIoKTtcclxuICBcclxuICAgICAgICBzZXJpZXMuYnVsbGV0cy5wdXNoKCgpID0+IHtcclxuICAgICAgICAgIHJldHVybiBhbTUuQnVsbGV0Lm5ldyh0aGlzLnJvb3QsIHtcclxuICAgICAgICAgICAgbG9jYXRpb25ZOiAwLFxyXG4gICAgICAgICAgICBzcHJpdGU6IGFtNS5MYWJlbC5uZXcodGhpcy5yb290LCB7XHJcbiAgICAgICAgICAgICAgdGV4dDogXCJ7dmFsdWVZfVwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IHRoaXMucm9vdC5pbnRlcmZhY2VDb2xvcnMuZ2V0KFwiYWx0ZXJuYXRpdmVUZXh0XCIpLFxyXG4gICAgICAgICAgICAgIGNlbnRlclk6IDAsXHJcbiAgICAgICAgICAgICAgY2VudGVyWDogYW01LnA1MCxcclxuICAgICAgICAgICAgICBwb3B1bGF0ZVRleHQ6IHRydWVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gIFxyXG4gICAgICAgIGxlZ2VuZC5kYXRhLnB1c2goc2VyaWVzKTtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgbWFrZVNlcmllcyhcIkN1c3RvbWVyIHNwZW50IG1vcmUgdGhhbiAxMCBtaW5zXCIsIFwiY3VzdG9tZXJDb3VudE92ZXIxME1pblwiKTtcclxuICAgICAgbWFrZVNlcmllcyhcIkJpbGxpbmcgQ29udmVyc2lvblwiLCBcImN1c3RvbWVyQ291bnRMZXNzVGhhbk1pblwiKTtcclxuICBcclxuICAgICAgY2hhcnQuYXBwZWFyKDEwMDAsIDEwMCk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuICBcclxuICBvbkV4cG9ydCgpIHtcclxuICAgIGNvbnN0IHJlcXVlc3REYXRhID0ge1xyXG4gICAgICBmcm9tRGF0ZTogdGhpcy5oZWFkZXJEYXRhLmRhdGUuc3RhcnREYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuaGVhZGVyRGF0YS5kYXRlLmVuZERhdGUsXHJcbiAgICAgIHN0b3JlSWQ6IHRoaXMuaGVhZGVyRGF0YS5zdG9yZXMuZmlsdGVyKChzdG9yZTogYW55KSA9PiBzdG9yZS5jaGVja2VkKS5tYXAoKHN0b3JlOiBhbnkpID0+IHN0b3JlLnN0b3JlSWQpLFxyXG4gICAgICBjbGllbnRJZDogdGhpcy5oZWFkZXJEYXRhLmNsaWVudCxcclxuICAgICAgZXhwb3J0OiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLlpvbmVTZXJ2aWNlLmdldEludGVyYXRpb25UYWJsZTQzMERhdGFFeHBvcnQocmVxdWVzdERhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ab25lU2VydmljZS5zYXZlQXNFeGNlbEZpbGUocmVzLCAnQ3VzdG9tZXJGdW5uZWwnKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdTb21ldGhpbmcgd2VudCBXcm9uZy4uJylcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgb25SYXRlRXhwb3J0KCkge1xyXG4gICAgY29uc3QgcmVxdWVzdERhdGEgPSB7XHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5zdGFydERhdGUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZSxcclxuICAgICAgc3RvcmVJZDogdGhpcy5oZWFkZXJEYXRhLnN0b3Jlcy5maWx0ZXIoKHN0b3JlOiBhbnkpID0+IHN0b3JlLmNoZWNrZWQpLm1hcCgoc3RvcmU6IGFueSkgPT4gc3RvcmUuc3RvcmVJZCksXHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmhlYWRlckRhdGEuY2xpZW50LFxyXG4gICAgICBleHBvcnQ6IHRydWUsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuWm9uZVNlcnZpY2Uuem9uZUludGVyYWN0aW9uVGFibGVFeHBvcnRfNDMwKHJlcXVlc3REYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMuWm9uZVNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgJ0ludGVyYWN0aW9udnNDb252ZXJzaW9uJyk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnU29tZXRoaW5nIHdlbnQgV3JvbmcuLicpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxufVxyXG4iLCJcclxuPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuPGRpdiBjbGFzcz1cImNvbC02IHBzLTUgcGUtMFwiICpuZ0lmPVwiIWNhcmROb0RhdGFcIiA+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcC0yXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gaGVhZHRleHQgcC0zXCI+Q3VzdG9tZXIgRnVubmVsPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uRXhwb3J0KClcIiBjbGFzcz1cImJ0bi1vdXRsaW5lIGJ0biBhbGlnbi1pdGVtcy1lbmQgdGV4dC1ub3dyYXAgaW52aGVhZGVyIG1lLTRcIiBbZGlzYWJsZWRdPVwiIWNhcmREYXRhLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMlwiPkV4cG9ydDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gb3ZlcmZsb3dmdW5uZWwgLS0+XHJcbiAgICAgIDxkaXYgICpuZ0lmPVwiIWNhcmREYXRhTG9hZGluZyAmJiAhY2FyZE5vRGF0YVwiIGNsYXNzPVwiYm9keSBtZS00XCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjYXJkRGF0YVwiIGNsYXNzPVwibS00XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFja1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJhbGx0ZXh0IG1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgUGFzc2VyIEJ5XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFibGUtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5wYXNzZXJfYnkgfHwgJy0tJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlcmRhc2hlZCBteS0yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFja1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJhbGx0ZXh0IG1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgRm9vdGZhbGxcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmZvb3RmYWxsIHx8ICctLScgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXJkYXNoZWQgbXktMlwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2tcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVyYWxsdGV4dCBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERyb3AgSW4gUmF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZHJvcF9pbl9yYXRlIHx8ICctLScgfX0lXHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyZGFzaGVkIG15LTJcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmFsbHRleHQgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lciBBdHRlbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uY3VzdG9tZXJfYXR0ZW5kZWQgfHwgJy0tJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlcmRhc2hlZCBteS0yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFja1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJhbGx0ZXh0IG1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJhY3Rpb24gUmF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyByb3VuZG9mKG92ZXJhbGxTdG9yZURhdGE/LmNvbmNlbnRyYXRpb25SYXRlKSB8fCAgJzAnIH19ICU8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyBpdGVtLmludGVyYWN0aW9uX3JhdGUgfHwgJy0tJyB9fSAlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyZGFzaGVkIG15LTJcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmFsbHRleHQgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCaWxsaW5nIENvbnZlcnNpb25cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmZvb3RmYWxsX292ZXJhbWluX2luem9uZSB8fCAnLS0nIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyZGFzaGVkIG15LTJcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmFsbHRleHQgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCaWxsaW5nIENvbnZlcnNpb24gUmF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uYmlsbGluZ19jb252ZXJzaW9uX3JhdGUgfHwgJy0tJyB9fSVcclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXJkYXNoZWQgbXktMlwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2tcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVyYWxsdGV4dCBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEdyZWV0aW5ncyBDb3VudFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZ3JlZXRpbmdfY291bnQgfHwgJy0tJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlcmRhc2hlZCBteS0yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFja1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJhbGx0ZXh0IG1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXZnIEludGVyYWN0aW9uIFRpbWVcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmF2Z19pbnRlcmFjdGlvbl90aW1lIHx8ICctLScgfX0gTWluc1xyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhcmREYXRhTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMTVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyIG15LTE3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYXJkTm9EYXRhICYmICFjYXJkRGF0YUxvYWRpbmdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uIG1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhMS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YW1haW50ZXh0IG10LTNcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGFzdWJ0ZXh0XCI+VGhlcmUgaXMgbm8gcmVzdWx0IGZvciBJbnRlcmF0aW9uIFRhYmxlIEFuYWx5c2lzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgICAgIFxyXG5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0wXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0zIGFnZXJhbmdlc2Nyb2xsXCI+XHJcbiAgICAgICAgICAgICAgICA8dGFibGUgKm5nSWY9XCIhY2FyZERhdGFMb2FkaW5nICYmICFjYXJkTm9EYXRhXCIgY2xhc3M9XCJ0YWJsZSBib3R0b20tYm9yZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZml4ZWQtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5JbnRlcmFjdGlvbiBSYXRlPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkN1c3RvbWVyIEF0dGVuZGVkPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBhc3NlciBCeTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkRyb3AgSW4gUmF0ZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5CaWxsaW5nIENvbnZlcnNpb248L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+Rm9vdGZhbGw8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNhcmREYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGUgc3Vic2NyaWJlZHRleHRcIj57eyBpdGVtLmludGVyYWN0aW9uX3JhdGUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZSBzdWJzY3JpYmVkdGV4dFwiPnt7IGl0ZW0uY3VzdG9tZXJfYXR0ZW5kZWQgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZSBzdWJzY3JpYmVkdGV4dFwiPnt7IGl0ZW0ucGFzc2VyX2J5IH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZSBzdWJzY3JpYmVkdGV4dFwiPnt7IGl0ZW0uem9uZW5hbWUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZSBzdWJzY3JpYmVkdGV4dFwiPnt7IGl0ZW0uZHJvcF9pbl9yYXRlIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGUgc3Vic2NyaWJlZHRleHRcIj57eyBpdGVtLmZvb3RmYWxsX292ZXJhbWluX2luem9uZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlIHN1YnNjcmliZWR0ZXh0XCI+e3sgaXRlbS5mb290ZmFsbCB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYXJkRGF0YUxvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXIgbXktMTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhcmROb0RhdGEgJiYgIWNhcmREYXRhTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtbiBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhMS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhbWFpbnRleHQgbXQtM1wiPk5vIGRhdGEgZm91bmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhc3VidGV4dFwiPlRoZXJlIGlzIG5vIHJlc3VsdCBmb3IgSW50ZXJhdGlvbiBUYWJsZSBBbmFseXNpczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PiAtLT5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJjb2wtNiBwcy03IHBlLTBcIiAqbmdJZj1cIiFjYXJkTm9EYXRhXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gaGVhZHRleHQgcC0zXCI+SW50ZXJhY3Rpb24gdnMgQ29udmVyc2lvbjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFtkaXNhYmxlZF09XCIhY2FyZERhdGEubGVuZ3RoXCIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25SYXRlRXhwb3J0KClcIiBjbGFzcz1cImJ0bi1vdXRsaW5lIGJ0biBhbGlnbi1pdGVtcy1lbmQgdGV4dC1ub3dyYXAgaW52aGVhZGVyIG1lLTRcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTJcIj5FeHBvcnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IG1iLTE0IHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjYXJkRGF0YUxvYWRpbmcgJiYgIWNhcmROb0RhdGFcIiBpZD1cImNoYXJ0ZGl2XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FyZERhdGFMb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhcmROb0RhdGEgJiYgIWNhcmREYXRhTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FyZC1ib2R5IG1iLTEzIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhMS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhbWFpbnRleHQgbXQtM1wiPk5vIGRhdGEgZm91bmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhc3VidGV4dFwiPlRoZXJlIGlzIG5vIHJlc3VsdCBmb3IgR2VuZGVyIEFuYWx5c2lzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuICAgIFxyXG48L2Rpdj5cclxuIl19
@@ -0,0 +1,87 @@
1
+ import { Component } from '@angular/core';
2
+ import { Subject, debounceTime, takeUntil } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../services/zone.service";
5
+ import * as i2 from "tango-app-ui-global";
6
+ import * as i3 from "tango-app-ui-shared";
7
+ import * as i4 from "@angular/common";
8
+ export class InterationTableClient459Component {
9
+ ZoneService;
10
+ changeDetector;
11
+ gs;
12
+ toast;
13
+ cardData = {};
14
+ cardDataLoading = true;
15
+ cardNoData = false;
16
+ headerData;
17
+ isExport = false;
18
+ destroy$ = new Subject();
19
+ constructor(ZoneService, changeDetector, gs, toast) {
20
+ this.ZoneService = ZoneService;
21
+ this.changeDetector = changeDetector;
22
+ this.gs = gs;
23
+ this.toast = toast;
24
+ }
25
+ ngOnInit() {
26
+ this.gs.dataRangeValue
27
+ .pipe(takeUntil(this.destroy$), debounceTime(300))
28
+ .subscribe((data) => {
29
+ this.headerData = data;
30
+ this.getCardData();
31
+ });
32
+ }
33
+ ngOnDestroy() {
34
+ this.destroy$.next();
35
+ this.destroy$.complete();
36
+ }
37
+ getCardData() {
38
+ this.cardDataLoading = true;
39
+ this.cardNoData = true;
40
+ const requestData = {
41
+ fromDate: this.headerData.date.startDate,
42
+ toDate: this.headerData.date.endDate,
43
+ storeId: this.headerData.stores.filter((store) => store.checked).map((store) => store.storeId),
44
+ clientId: this.headerData.client,
45
+ export: false,
46
+ };
47
+ this.ZoneService.getInterationTable459Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response) => {
48
+ this.cardDataLoading = false;
49
+ if (response?.code === 200 && response?.status === "success") {
50
+ this.cardData = response.data.data;
51
+ this.cardNoData = this.cardData.length === 0;
52
+ }
53
+ else {
54
+ this.cardData = [];
55
+ this.cardNoData = true;
56
+ }
57
+ }, error => {
58
+ this.cardData = [];
59
+ this.cardNoData = true;
60
+ this.changeDetector.detectChanges();
61
+ });
62
+ }
63
+ onExport() {
64
+ const requestData = {
65
+ fromDate: this.headerData.date.startDate,
66
+ toDate: this.headerData.date.endDate,
67
+ storeId: this.headerData.stores.filter((store) => store.checked).map((store) => store.storeId),
68
+ clientId: this.headerData.client,
69
+ export: true,
70
+ };
71
+ this.ZoneService.getInterationTable459DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({
72
+ next: (res) => {
73
+ this.ZoneService.saveAsExcelFile(res, 'QueueManagement');
74
+ },
75
+ error: (e) => {
76
+ this.toast.getErrorToast('Something went Wrong..');
77
+ }
78
+ });
79
+ }
80
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InterationTableClient459Component, deps: [{ token: i1.ZoneService }, { token: i0.ChangeDetectorRef }, { token: i2.GlobalStateService }, { token: i3.ToastService }], target: i0.ɵɵFactoryTarget.Component });
81
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: InterationTableClient459Component, selector: "lib-interation-table-client459", ngImport: i0, template: "<div *ngIf=\"!cardNoData\" class=\"col-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-4\">\r\n <div class=\"card-title align-items-start flex-column headtext p-3\">Queue Management</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Store ID</th>\r\n <th>Date</th>\r\n <th>Zone Name</th>\r\n <th>Hour</th>\r\n <th>Footfall</th>\r\n <th>Avg Time Spent (Mins)</th>\r\n <!-- <th>Min Time Spent</th>\r\n <th>Max Time Spent</th> -->\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.store_id || '--'}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.date || '--'}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.zone_name || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.hour || '0' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.Footfall.toFixed(0)}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.avg_time_spent || '--'}}</div>\r\n </td>\r\n \r\n <!-- <td>\r\n <div class=\"table-title subscribedtext\">{{ item.min_time_spent || '--' }}</div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.max_time_spent || '--' }}</div>\r\n </td> -->\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".subtext{color:var(--Gray-800, #1D2939);font-size:13px;font-weight:500;line-height:20px}.headcount{color:var(--Gray-900, #101828);font-size:20px;font-weight:600;line-height:30px}.headtext{color:var(--Gray-700, #344054);font-size:18px;font-weight:600;line-height:28px}.ratecards{padding:30px;width:47%;border-radius:12px;background:var(--White, #FFF)}.primarybar{background:#00a3ff}.card{border-radius:12px}#genderchartdiv{width:100%;height:241px;margin-bottom:6%}table th,table td{height:37.5px!important;padding:0 22px!important;align-items:center;gap:12px;align-self:stretch}table tr{vertical-align:middle}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}::ng-deep .custom-tooltip{border-radius:8px;background:var(--White, #FFF);padding:8px 12px;color:var(--Gray-700, #344054);text-align:center;font-family:Inter;font-size:12px;font-weight:600;line-height:18px}.agerangescroll{overflow-y:scroll;overflow-x:hidden;height:275px}.fixed-header th{position:sticky;top:0;background-color:#fff;z-index:2}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
82
+ }
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InterationTableClient459Component, decorators: [{
84
+ type: Component,
85
+ args: [{ selector: 'lib-interation-table-client459', template: "<div *ngIf=\"!cardNoData\" class=\"col-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-4\">\r\n <div class=\"card-title align-items-start flex-column headtext p-3\">Queue Management</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Store ID</th>\r\n <th>Date</th>\r\n <th>Zone Name</th>\r\n <th>Hour</th>\r\n <th>Footfall</th>\r\n <th>Avg Time Spent (Mins)</th>\r\n <!-- <th>Min Time Spent</th>\r\n <th>Max Time Spent</th> -->\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.store_id || '--'}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.date || '--'}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.zone_name || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.hour || '0' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.Footfall.toFixed(0)}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.avg_time_spent || '--'}}</div>\r\n </td>\r\n \r\n <!-- <td>\r\n <div class=\"table-title subscribedtext\">{{ item.min_time_spent || '--' }}</div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.max_time_spent || '--' }}</div>\r\n </td> -->\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".subtext{color:var(--Gray-800, #1D2939);font-size:13px;font-weight:500;line-height:20px}.headcount{color:var(--Gray-900, #101828);font-size:20px;font-weight:600;line-height:30px}.headtext{color:var(--Gray-700, #344054);font-size:18px;font-weight:600;line-height:28px}.ratecards{padding:30px;width:47%;border-radius:12px;background:var(--White, #FFF)}.primarybar{background:#00a3ff}.card{border-radius:12px}#genderchartdiv{width:100%;height:241px;margin-bottom:6%}table th,table td{height:37.5px!important;padding:0 22px!important;align-items:center;gap:12px;align-self:stretch}table tr{vertical-align:middle}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}::ng-deep .custom-tooltip{border-radius:8px;background:var(--White, #FFF);padding:8px 12px;color:var(--Gray-700, #344054);text-align:center;font-family:Inter;font-size:12px;font-weight:600;line-height:18px}.agerangescroll{overflow-y:scroll;overflow-x:hidden;height:275px}.fixed-header th{position:sticky;top:0;background-color:#fff;z-index:2}\n"] }]
86
+ }], ctorParameters: () => [{ type: i1.ZoneService }, { type: i0.ChangeDetectorRef }, { type: i2.GlobalStateService }, { type: i3.ToastService }] });
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhdGlvbi10YWJsZS1jbGllbnQ0NTkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS16b25lL3NyYy9saWIvY29tcG9uZW50cy9pbnRlcmF0aW9uLXRhYmxlLWNsaWVudDQ1OS9pbnRlcmF0aW9uLXRhYmxlLWNsaWVudDQ1OS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXpvbmUvc3JjL2xpYi9jb21wb25lbnRzL2ludGVyYXRpb24tdGFibGUtY2xpZW50NDU5L2ludGVyYXRpb24tdGFibGUtY2xpZW50NDU5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBU3ZELE1BQU0sT0FBTyxpQ0FBaUM7SUFPeEI7SUFBaUM7SUFBeUM7SUFBK0I7SUFON0gsUUFBUSxHQUFRLEVBQUUsQ0FBQztJQUNuQixlQUFlLEdBQVksSUFBSSxDQUFDO0lBQ2hDLFVBQVUsR0FBWSxLQUFLLENBQUM7SUFDNUIsVUFBVSxDQUFNO0lBQ2hCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDbEIsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDdkMsWUFBb0IsV0FBd0IsRUFBUyxjQUFpQyxFQUFRLEVBQXNCLEVBQVMsS0FBbUI7UUFBNUgsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBUyxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFBUSxPQUFFLEdBQUYsRUFBRSxDQUFvQjtRQUFTLFVBQUssR0FBTCxLQUFLLENBQWM7SUFBRyxDQUFDO0lBRXBKLFFBQVE7UUFDTixJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWM7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QUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNyRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDWixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUMzRCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtZQUNwRCxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQzt3R0FuRVUsaUNBQWlDOzRGQUFqQyxpQ0FBaUMsc0VDWjlDLDBsS0EyRk07OzRGRC9FTyxpQ0FBaUM7a0JBTjdDLFNBQVM7K0JBQ0UsZ0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBab25lU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3pvbmUuc2VydmljZSc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItaW50ZXJhdGlvbi10YWJsZS1jbGllbnQ0NTknLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnRlcmF0aW9uLXRhYmxlLWNsaWVudDQ1OS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2ludGVyYXRpb24tdGFibGUtY2xpZW50NDU5LmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEludGVyYXRpb25UYWJsZUNsaWVudDQ1OUNvbXBvbmVudCB7XHJcbiAgY2FyZERhdGE6IGFueSA9IHt9O1xyXG4gIGNhcmREYXRhTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgY2FyZE5vRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhlYWRlckRhdGE6IGFueTtcclxuICBpc0V4cG9ydDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgWm9uZVNlcnZpY2U6IFpvbmVTZXJ2aWNlLHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLHB1YmxpYyBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlXHJcbiAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCksIGRlYm91bmNlVGltZSgzMDApKVxyXG4gICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJEYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLmdldENhcmREYXRhKCk7XHJcbn0pXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2FyZERhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhcmREYXRhTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmNhcmROb0RhdGEgPSB0cnVlO1xyXG4gICAgY29uc3QgcmVxdWVzdERhdGEgPSB7XHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5zdGFydERhdGUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZSxcclxuICAgICAgc3RvcmVJZDogdGhpcy5oZWFkZXJEYXRhLnN0b3Jlcy5maWx0ZXIoKHN0b3JlOiBhbnkpID0+IHN0b3JlLmNoZWNrZWQpLm1hcCgoc3RvcmU6IGFueSkgPT4gc3RvcmUuc3RvcmVJZCksXHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmhlYWRlckRhdGEuY2xpZW50LFxyXG4gICAgICBleHBvcnQ6IGZhbHNlLFxyXG4gICAgfTtcclxuICBcclxuICAgIHRoaXMuWm9uZVNlcnZpY2UuZ2V0SW50ZXJhdGlvblRhYmxlNDU5RGF0YShyZXF1ZXN0RGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmNhcmREYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBpZiAocmVzcG9uc2U/LmNvZGUgPT09IDIwMCAmJiByZXNwb25zZT8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgIHRoaXMuY2FyZERhdGEgPSByZXNwb25zZS5kYXRhLmRhdGFcclxuICAgICAgICB0aGlzLmNhcmROb0RhdGEgPSB0aGlzLmNhcmREYXRhLmxlbmd0aCA9PT0gMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNhcmREYXRhID0gW107XHJcbiAgICAgICAgdGhpcy5jYXJkTm9EYXRhID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGVycm9yID0+IHtcclxuICAgICAgdGhpcy5jYXJkRGF0YSA9IFtdO1xyXG4gICAgICB0aGlzLmNhcmROb0RhdGEgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBvbkV4cG9ydCgpIHtcclxuICAgIGNvbnN0IHJlcXVlc3REYXRhID0ge1xyXG4gICAgICBmcm9tRGF0ZTogdGhpcy5oZWFkZXJEYXRhLmRhdGUuc3RhcnREYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuaGVhZGVyRGF0YS5kYXRlLmVuZERhdGUsXHJcbiAgICAgIHN0b3JlSWQ6IHRoaXMuaGVhZGVyRGF0YS5zdG9yZXMuZmlsdGVyKChzdG9yZTogYW55KSA9PiBzdG9yZS5jaGVja2VkKS5tYXAoKHN0b3JlOiBhbnkpID0+IHN0b3JlLnN0b3JlSWQpLFxyXG4gICAgICBjbGllbnRJZDogdGhpcy5oZWFkZXJEYXRhLmNsaWVudCxcclxuICAgICAgZXhwb3J0OiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLlpvbmVTZXJ2aWNlLmdldEludGVyYXRpb25UYWJsZTQ1OURhdGFFeHBvcnQocmVxdWVzdERhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ab25lU2VydmljZS5zYXZlQXNFeGNlbEZpbGUocmVzLCAnUXVldWVNYW5hZ2VtZW50Jyk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnU29tZXRoaW5nIHdlbnQgV3JvbmcuLicpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG59IiwiPGRpdiAqbmdJZj1cIiFjYXJkTm9EYXRhXCIgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwLTRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBoZWFkdGV4dCBwLTNcIj5RdWV1ZSBNYW5hZ2VtZW50PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uRXhwb3J0KClcIiBjbGFzcz1cImJ0bi1vdXRsaW5lIGJ0biBhbGlnbi1pdGVtcy1lbmQgdGV4dC1ub3dyYXAgaW52aGVhZGVyIG1lLTRcIiBbZGlzYWJsZWRdPVwiIWNhcmREYXRhLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMlwiPkV4cG9ydDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0wXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0zIGFnZXJhbmdlc2Nyb2xsXCI+XHJcbiAgICAgICAgICAgICAgICA8dGFibGUgKm5nSWY9XCIhY2FyZERhdGFMb2FkaW5nICYmICFjYXJkTm9EYXRhXCIgY2xhc3M9XCJ0YWJsZSBib3R0b20tYm9yZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZml4ZWQtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5TdG9yZSBJRDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5EYXRlPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlpvbmUgTmFtZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgPHRoPkhvdXI8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIDx0aD5Gb290ZmFsbDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5BdmcgVGltZSBTcGVudCAoTWlucyk8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDx0aD5NaW4gVGltZSBTcGVudDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5NYXggVGltZSBTcGVudDwvdGg+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNhcmREYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlIHN1YnNjcmliZWR0ZXh0XCI+e3sgaXRlbS5zdG9yZV9pZCB8fCAnLS0nfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZSBzdWJzY3JpYmVkdGV4dFwiPnt7IGl0ZW0uZGF0ZSB8fCAnLS0nfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZSBzdWJzY3JpYmVkdGV4dFwiPnt7IGl0ZW0uem9uZV9uYW1lIHx8ICctLScgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGUgc3Vic2NyaWJlZHRleHRcIj57eyBpdGVtLmhvdXIgfHwgJzAnIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGUgc3Vic2NyaWJlZHRleHRcIj57eyBpdGVtLkZvb3RmYWxsLnRvRml4ZWQoMCl9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlIHN1YnNjcmliZWR0ZXh0XCI+e3sgaXRlbS5hdmdfdGltZV9zcGVudCB8fCAnLS0nfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZSBzdWJzY3JpYmVkdGV4dFwiPnt7IGl0ZW0ubWluX3RpbWVfc3BlbnQgfHwgJy0tJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGUgc3Vic2NyaWJlZHRleHRcIj57eyBpdGVtLm1heF90aW1lX3NwZW50IHx8ICctLScgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhcmREYXRhTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0xNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lciBteS0xN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FyZE5vRGF0YSAmJiAhY2FyZERhdGFMb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uIG1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGFtYWludGV4dCBtdC0zXCI+Tm8gZGF0YSBmb3VuZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGFzdWJ0ZXh0XCI+VGhlcmUgaXMgbm8gcmVzdWx0IGZvciBJbnRlcmF0aW9uIFRhYmxlIEFuYWx5c2lzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19