tango-app-ui-manage-tickets 3.7.0-beta.4 → 3.7.0-beta.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/audit-mapping-list/audit-mapping-list.component.mjs +486 -0
- package/esm2022/lib/components/audit-report-popup/audit-report-popup.component.mjs +358 -0
- package/esm2022/lib/components/audit-retag/audit-retag.component.mjs +457 -0
- package/esm2022/lib/components/custom-select/custom-select.component.mjs +174 -0
- package/esm2022/lib/components/filter-options/filter-options.component.mjs +41 -0
- package/esm2022/lib/components/footfall-dic/footfall-dic.component.mjs +374 -196
- package/esm2022/lib/components/footfall-dicview/footfall-dicview.component.mjs +1014 -0
- package/esm2022/lib/components/footfall-popup/footfall-popup.component.mjs +15 -0
- package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +3 -3
- package/esm2022/lib/components/remove-audit/remove-audit.component.mjs +80 -0
- package/esm2022/lib/components/start-audit/start-audit.component.mjs +742 -0
- package/esm2022/lib/components/tango-manage-tickets/tango-manage-tickets.component.mjs +7 -3
- package/esm2022/lib/components/ticket-footfall-new/ticket-footfall-new.component.mjs +2173 -0
- package/esm2022/lib/components/ticketclosepopup/ticketclosepopup.component.mjs +43 -0
- package/esm2022/lib/components/tickets/tickets.component.mjs +62 -8
- package/esm2022/lib/components/viewcategory/viewcategory.component.mjs +89 -0
- package/esm2022/lib/services/audit.service.mjs +88 -0
- package/esm2022/lib/services/ticket.service.mjs +128 -33
- package/esm2022/lib/services/timer.service.mjs +84 -0
- package/esm2022/lib/tango-manage-tickets-routing.module.mjs +22 -2
- package/esm2022/lib/tango-manage-tickets.module.mjs +57 -5
- package/fesm2022/tango-app-ui-manage-tickets.mjs +6425 -312
- package/fesm2022/tango-app-ui-manage-tickets.mjs.map +1 -1
- package/lib/components/audit-mapping-list/audit-mapping-list.component.d.ts +73 -0
- package/lib/components/audit-metrics/audit-metrics.component.d.ts +1 -1
- package/lib/components/audit-report-popup/audit-report-popup.component.d.ts +47 -0
- package/lib/components/audit-retag/audit-retag.component.d.ts +59 -0
- package/lib/components/custom-select/custom-select.component.d.ts +34 -0
- package/lib/components/filter-options/filter-options.component.d.ts +15 -0
- package/lib/components/footfall-dic/footfall-dic.component.d.ts +23 -8
- package/lib/components/footfall-dicview/footfall-dicview.component.d.ts +132 -0
- package/lib/components/footfall-popup/footfall-popup.component.d.ts +8 -0
- package/lib/components/remove-audit/remove-audit.component.d.ts +16 -0
- package/lib/components/start-audit/start-audit.component.d.ts +86 -0
- package/lib/components/tango-manage-tickets/tango-manage-tickets.component.d.ts +1 -0
- package/lib/components/ticket-footfall-new/ticket-footfall-new.component.d.ts +251 -0
- package/lib/components/ticketclosepopup/ticketclosepopup.component.d.ts +15 -0
- package/lib/components/tickets/tickets.component.d.ts +4 -0
- package/lib/components/viewcategory/viewcategory.component.d.ts +16 -0
- package/lib/services/audit.service.d.ts +36 -0
- package/lib/services/ticket.service.d.ts +25 -7
- package/lib/services/timer.service.d.ts +22 -0
- package/lib/tango-manage-tickets.module.d.ts +21 -5
- package/package.json +1 -1
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
import { Component, ViewChild, Input } from '@angular/core';
|
|
2
|
+
import * as LZString from 'lz-string';
|
|
3
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@ng-bootstrap/ng-bootstrap";
|
|
6
|
+
import * as i2 from "@angular/router";
|
|
7
|
+
import * as i3 from "../../services/timer.service";
|
|
8
|
+
import * as i4 from "../../services/audit.service";
|
|
9
|
+
import * as i5 from "tango-app-ui-shared";
|
|
10
|
+
import * as i6 from "@angular/common";
|
|
11
|
+
export class AuditReportPopupComponent {
|
|
12
|
+
modalService;
|
|
13
|
+
activeModal;
|
|
14
|
+
router;
|
|
15
|
+
timerService;
|
|
16
|
+
cd;
|
|
17
|
+
apiservice;
|
|
18
|
+
route;
|
|
19
|
+
toast;
|
|
20
|
+
Retagjunkcount = 0;
|
|
21
|
+
Retagemployeecount = 0;
|
|
22
|
+
Retagcustomercount = 0;
|
|
23
|
+
demographicCount;
|
|
24
|
+
retagjunkdata;
|
|
25
|
+
retagemployeedata;
|
|
26
|
+
retagcustomerdata;
|
|
27
|
+
totalfiles;
|
|
28
|
+
auth = false;
|
|
29
|
+
submitauth = false;
|
|
30
|
+
Errormsg = '';
|
|
31
|
+
selectedType;
|
|
32
|
+
confirmerror;
|
|
33
|
+
destroy$ = new Subject();
|
|
34
|
+
timePassed = 0;
|
|
35
|
+
subscription = null;
|
|
36
|
+
formattedTime = '00:00:00';
|
|
37
|
+
category = [];
|
|
38
|
+
constructor(modalService, activeModal, router, timerService, cd, apiservice, route, toast) {
|
|
39
|
+
this.modalService = modalService;
|
|
40
|
+
this.activeModal = activeModal;
|
|
41
|
+
this.router = router;
|
|
42
|
+
this.timerService = timerService;
|
|
43
|
+
this.cd = cd;
|
|
44
|
+
this.apiservice = apiservice;
|
|
45
|
+
this.route = route;
|
|
46
|
+
this.toast = toast;
|
|
47
|
+
}
|
|
48
|
+
ngOnInit() {
|
|
49
|
+
let filedata = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
|
|
50
|
+
this.totalfiles = filedata;
|
|
51
|
+
this.apiservice.getAuditconfig(filedata?.filedetails?.clientId).pipe(takeUntil(this.destroy$)).subscribe({
|
|
52
|
+
next: (res) => {
|
|
53
|
+
if (res && res?.code == 200) {
|
|
54
|
+
this.category = res.data.footfallDirectoryConfigs.taggingLimitation;
|
|
55
|
+
this.category.map((data) => {
|
|
56
|
+
let filterData = JSON.parse(sessionStorage.getItem(data?.type) || '{}');
|
|
57
|
+
data.value = filterData;
|
|
58
|
+
data.count = data?.value?.length;
|
|
59
|
+
});
|
|
60
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ ngOnInit ~ this.category:", this.category);
|
|
61
|
+
let stringifydata = sessionStorage.getItem('audit') || '{}';
|
|
62
|
+
const decompressedData = LZString.decompress(stringifydata);
|
|
63
|
+
var customer = JSON.parse(decompressedData || '{}');
|
|
64
|
+
this.Retagcustomercount = customer.length;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
this.setTimer();
|
|
69
|
+
}
|
|
70
|
+
setTimer() {
|
|
71
|
+
this.subscription = this.timerService.getTimePassed().subscribe(time => {
|
|
72
|
+
this.timePassed = time;
|
|
73
|
+
this.formattedTime = this.timerService.formatTime(time);
|
|
74
|
+
this.cd.detectChanges();
|
|
75
|
+
});
|
|
76
|
+
this.timerService.startTimer();
|
|
77
|
+
document.addEventListener('mousemove', this.handleGlobalMouseEvent);
|
|
78
|
+
document.addEventListener('click', this.handleGlobalMouseEvent);
|
|
79
|
+
document.addEventListener('mouseenter', this.handleGlobalMouseEvent);
|
|
80
|
+
document.addEventListener('scroll', this.handleGlobalMouseEvent);
|
|
81
|
+
}
|
|
82
|
+
handleGlobalMouseEvent = () => {
|
|
83
|
+
this.timerService.startTimer();
|
|
84
|
+
};
|
|
85
|
+
ngOnDestroy() {
|
|
86
|
+
this.destroy$.next(true);
|
|
87
|
+
this.destroy$.complete();
|
|
88
|
+
document.removeEventListener('mousemove', this.handleGlobalMouseEvent);
|
|
89
|
+
document.removeEventListener('click', this.handleGlobalMouseEvent);
|
|
90
|
+
document.removeEventListener('mouseenter', this.handleGlobalMouseEvent);
|
|
91
|
+
document.removeEventListener('scroll', this.handleGlobalMouseEvent);
|
|
92
|
+
this.timerService.clearTimer();
|
|
93
|
+
}
|
|
94
|
+
changebrand() {
|
|
95
|
+
this.auth = true;
|
|
96
|
+
var totalfile = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
|
|
97
|
+
let junkimage = [];
|
|
98
|
+
let employeeimage = [];
|
|
99
|
+
let customerimage = [];
|
|
100
|
+
this.retagjunkdata.map((e) => {
|
|
101
|
+
delete e.img_path;
|
|
102
|
+
delete e.selected;
|
|
103
|
+
delete e.count;
|
|
104
|
+
delete e.dropped;
|
|
105
|
+
delete e.mappedid;
|
|
106
|
+
junkimage.push(e);
|
|
107
|
+
});
|
|
108
|
+
this.retagemployeedata.map((e) => {
|
|
109
|
+
delete e.img_path;
|
|
110
|
+
delete e.selected;
|
|
111
|
+
delete e.count;
|
|
112
|
+
delete e.dropped;
|
|
113
|
+
delete e.mappedid;
|
|
114
|
+
employeeimage.push(e);
|
|
115
|
+
});
|
|
116
|
+
this.retagcustomerdata.map((e) => {
|
|
117
|
+
if (e.count > 1) {
|
|
118
|
+
delete e.img_path;
|
|
119
|
+
delete e.selected;
|
|
120
|
+
delete e.dropped;
|
|
121
|
+
var result = e.mappedid;
|
|
122
|
+
e.mappedid = result;
|
|
123
|
+
e.count = result.length;
|
|
124
|
+
e.mappedid.forEach((e1) => { delete e1.img_path; });
|
|
125
|
+
customerimage.push(e);
|
|
126
|
+
}
|
|
127
|
+
if (e.demographic === 'd' && e.count === 1) {
|
|
128
|
+
delete e.img_path;
|
|
129
|
+
delete e.selected;
|
|
130
|
+
delete e.dropped;
|
|
131
|
+
var result = e.mappedid;
|
|
132
|
+
e.mappedid = result;
|
|
133
|
+
e.count = result.length;
|
|
134
|
+
e.mappedid.forEach((e1) => { delete e1.img_path; });
|
|
135
|
+
customerimage.push(e);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
var obj = {
|
|
139
|
+
auditId: totalfile?.auditId ? totalfile?.auditId : totalfile?.filedetails?.auditId,
|
|
140
|
+
storeId: totalfile?.filedetails?.store_id,
|
|
141
|
+
auditType: totalfile?.filedetails?.type,
|
|
142
|
+
fileDate: totalfile?.filedetails?.file_date,
|
|
143
|
+
beforeCount: totalfile?.totalfiles,
|
|
144
|
+
junkCount: this.Retagjunkcount,
|
|
145
|
+
junk: junkimage ? junkimage : [],
|
|
146
|
+
employeeCount: this.Retagemployeecount,
|
|
147
|
+
employee: employeeimage ? employeeimage : [],
|
|
148
|
+
customerCount: this.Retagcustomercount,
|
|
149
|
+
zoneName: totalfile?.filedetails?.zoneName ? totalfile?.filedetails?.zoneName : '',
|
|
150
|
+
moduleType: this.selectedType,
|
|
151
|
+
customer: customerimage ? customerimage : [],
|
|
152
|
+
timeSpent: this.timePassed
|
|
153
|
+
};
|
|
154
|
+
this.apiservice.saveaudit(obj).pipe(takeUntil(this.destroy$)).subscribe({
|
|
155
|
+
next: (res) => {
|
|
156
|
+
if (res && res.code == 200) {
|
|
157
|
+
this.toast.getSuccessToast(res?.data?.result);
|
|
158
|
+
this.auth = false;
|
|
159
|
+
this.timerService.resetTimer();
|
|
160
|
+
sessionStorage.removeItem('timeSpent');
|
|
161
|
+
this.closepopup();
|
|
162
|
+
sessionStorage.removeItem('employee');
|
|
163
|
+
sessionStorage.removeItem('junk');
|
|
164
|
+
sessionStorage.removeItem('audit');
|
|
165
|
+
sessionStorage.removeItem('totalfiles');
|
|
166
|
+
sessionStorage.removeItem('retag');
|
|
167
|
+
this.router.navigate(['/manage/tickets'], { queryParams: { type: 'footfall' } });
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
this.auth = false;
|
|
171
|
+
if (res && res.code == 203) {
|
|
172
|
+
this.Errormsg = res.error;
|
|
173
|
+
const modalRef = this.modalService.open(this.confirmerror);
|
|
174
|
+
modalRef.result.then((result) => {
|
|
175
|
+
if (result.isConfirmed) {
|
|
176
|
+
this.router.navigate(['/manage/tickets'], { queryParams: { type: 'footfall' } });
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
error: (err) => {
|
|
183
|
+
const errorMessage = err?.error?.message || err?.error?.error || err?.message || 'Invalid status code: undefined';
|
|
184
|
+
this.toast.getErrorToast(errorMessage);
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
nextfile() {
|
|
189
|
+
this.auth = true;
|
|
190
|
+
let totalfile = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
|
|
191
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ totalfile:", totalfile);
|
|
192
|
+
let revisedDetail = [];
|
|
193
|
+
let stringifydata = sessionStorage.getItem('audit') || '{}';
|
|
194
|
+
const decompressedData = LZString.decompress(stringifydata);
|
|
195
|
+
var customer = JSON.parse(decompressedData || '{}');
|
|
196
|
+
customer.map((customerData) => {
|
|
197
|
+
if (customerData.count > 1) {
|
|
198
|
+
// console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ customerData:", customerData)
|
|
199
|
+
let duplicateData = customerData.mappedid.filter((data) => data.img_name != customerData?.img_name);
|
|
200
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ duplicateData:", duplicateData);
|
|
201
|
+
let duplicateImage = [];
|
|
202
|
+
duplicateData.map((dupData) => {
|
|
203
|
+
duplicateImage.push({
|
|
204
|
+
"id": `${totalfile?.filedetails?.storeId}_${totalfile?.filedetails?.Date}_${dupData?.img_name}`,
|
|
205
|
+
"tempId": dupData?.img_name,
|
|
206
|
+
"filePath": dupData?.img_path,
|
|
207
|
+
"isChecked": true
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
let newObj = {
|
|
211
|
+
"id": `${totalfile?.filedetails?.storeId}_${totalfile?.filedetails?.Date}_${customerData?.img_name}`,
|
|
212
|
+
"clientId": totalfile?.filedetails?.clientId,
|
|
213
|
+
"storeId": totalfile?.filedetails?.storeId,
|
|
214
|
+
"tempId": customerData?.img_name,
|
|
215
|
+
"dateString": totalfile?.filedetails?.Date,
|
|
216
|
+
"timeRange": "11AM-12PM",
|
|
217
|
+
"processType": "footfall",
|
|
218
|
+
"revopsType": "duplicate",
|
|
219
|
+
"filePath": customerData?.img_path,
|
|
220
|
+
"status": "submitted",
|
|
221
|
+
"description": "",
|
|
222
|
+
"isChecked": true,
|
|
223
|
+
"type": "tagging-reflect",
|
|
224
|
+
"parent": null,
|
|
225
|
+
"isParent": true,
|
|
226
|
+
"duplicateImage": duplicateImage
|
|
227
|
+
};
|
|
228
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ newObj:", newObj);
|
|
229
|
+
revisedDetail.push(newObj);
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
// console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ customerData:", customerData)
|
|
233
|
+
let newObj = {
|
|
234
|
+
"id": `${totalfile?.filedetails?.storeId}_${totalfile?.filedetails?.Date}_${customerData?.img_name}`,
|
|
235
|
+
"clientId": totalfile?.filedetails?.clientId,
|
|
236
|
+
"storeId": totalfile?.filedetails?.storeId,
|
|
237
|
+
"tempId": customerData?.img_name,
|
|
238
|
+
"dateString": totalfile?.filedetails?.Date,
|
|
239
|
+
"timeRange": "11AM-12PM",
|
|
240
|
+
"processType": "footfall",
|
|
241
|
+
"revopsType": "duplicate",
|
|
242
|
+
"filePath": customerData?.img_path,
|
|
243
|
+
"status": "submitted",
|
|
244
|
+
"description": "",
|
|
245
|
+
"isChecked": true,
|
|
246
|
+
"type": "tagging-reflect",
|
|
247
|
+
"parent": null,
|
|
248
|
+
"isParent": true,
|
|
249
|
+
"duplicateImage": []
|
|
250
|
+
};
|
|
251
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ newObj:", newObj);
|
|
252
|
+
revisedDetail.push(newObj);
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
let count = [];
|
|
256
|
+
this.category.map((data) => {
|
|
257
|
+
count.push({
|
|
258
|
+
name: data.name,
|
|
259
|
+
value: data.count,
|
|
260
|
+
type: data.type
|
|
261
|
+
});
|
|
262
|
+
let filterData = JSON.parse(sessionStorage.getItem(data?.type) || '[]');
|
|
263
|
+
filterData.map((otherData) => {
|
|
264
|
+
let otherObj = {
|
|
265
|
+
"id": `${totalfile?.filedetails?.storeId}_${totalfile?.filedetails?.Date}_${otherData?.img_name}`,
|
|
266
|
+
"clientId": totalfile?.filedetails?.clientId,
|
|
267
|
+
"storeId": totalfile?.filedetails?.storeId,
|
|
268
|
+
"tempId": otherData?.img_name,
|
|
269
|
+
"dateString": totalfile?.filedetails?.Date,
|
|
270
|
+
"processType": "footfall",
|
|
271
|
+
"revopsType": data?.type,
|
|
272
|
+
"filePath": otherData?.img_path,
|
|
273
|
+
"status": "submitted",
|
|
274
|
+
"description": "",
|
|
275
|
+
"isChecked": true,
|
|
276
|
+
"type": "tagging-reflect",
|
|
277
|
+
"parent": null,
|
|
278
|
+
"isParent": false,
|
|
279
|
+
"duplicateImage": []
|
|
280
|
+
};
|
|
281
|
+
revisedDetail.push(otherObj);
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
let ticketType = sessionStorage.getItem('ticketType');
|
|
285
|
+
var obj = {
|
|
286
|
+
"type": "tangoreview",
|
|
287
|
+
"mode": "web",
|
|
288
|
+
"revicedFootfall": this.Retagcustomercount,
|
|
289
|
+
"revicedPerc": Math.round((this.Retagcustomercount / totalfile?.totalfiles) * 100) + "%",
|
|
290
|
+
count: count,
|
|
291
|
+
revisedDetail: revisedDetail
|
|
292
|
+
};
|
|
293
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ obj:", obj);
|
|
294
|
+
// return
|
|
295
|
+
let payload = {
|
|
296
|
+
storeId: totalfile?.filedetails?.storeId,
|
|
297
|
+
"dateString": totalfile?.filedetails?.Date,
|
|
298
|
+
ticketType: ticketType,
|
|
299
|
+
mappingInfo: obj
|
|
300
|
+
};
|
|
301
|
+
this.apiservice.saveaudit(payload).pipe(takeUntil(this.destroy$)).subscribe({
|
|
302
|
+
next: (res) => {
|
|
303
|
+
if (res && res.code == 200) {
|
|
304
|
+
this.auth = false;
|
|
305
|
+
this.timerService.resetTimer();
|
|
306
|
+
sessionStorage.removeItem('timeSpent');
|
|
307
|
+
this.closepopup();
|
|
308
|
+
sessionStorage.removeItem('employee');
|
|
309
|
+
sessionStorage.removeItem('junk');
|
|
310
|
+
sessionStorage.removeItem('audit');
|
|
311
|
+
sessionStorage.removeItem('totalfiles');
|
|
312
|
+
sessionStorage.removeItem('retag');
|
|
313
|
+
var obj = {
|
|
314
|
+
totalfiles: {}
|
|
315
|
+
};
|
|
316
|
+
obj.totalfiles.queueName = totalfile?.filedetails?.queueName;
|
|
317
|
+
sessionStorage.setItem('totalfiles', JSON.stringify(obj));
|
|
318
|
+
this.router.navigate(['/manage/tickets'], { queryParams: { type: 'footfall' } });
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
this.auth = false;
|
|
322
|
+
if (res && res.code == 203) {
|
|
323
|
+
this.Errormsg = res.error;
|
|
324
|
+
const modalRef = this.modalService.open(this.confirmerror);
|
|
325
|
+
modalRef.result.then((result) => {
|
|
326
|
+
if (result.isConfirmed) {
|
|
327
|
+
this.router.navigate(['/manage/tickets'], { queryParams: { type: 'footfall' } });
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
},
|
|
333
|
+
error: (err) => {
|
|
334
|
+
const errorMessage = err?.error?.message || err?.error?.error || err?.message || 'Invalid status code: undefined';
|
|
335
|
+
this.toast.getErrorToast(errorMessage);
|
|
336
|
+
},
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
closepopup() {
|
|
340
|
+
this.activeModal.close();
|
|
341
|
+
}
|
|
342
|
+
reviewdata() {
|
|
343
|
+
this.router.navigate(["/manage/tickets/mapping-list"]);
|
|
344
|
+
this.activeModal.close();
|
|
345
|
+
}
|
|
346
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditReportPopupComponent, deps: [{ token: i1.NgbModal }, { token: i1.NgbActiveModal }, { token: i2.Router }, { token: i3.TimerService }, { token: i0.ChangeDetectorRef }, { token: i4.AuditService }, { token: i2.ActivatedRoute }, { token: i5.ToastService }], target: i0.ɵɵFactoryTarget.Component });
|
|
347
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuditReportPopupComponent, selector: "lib-audit-report-popup", inputs: { selectedType: "selectedType" }, viewQueries: [{ propertyName: "confirmerror", first: true, predicate: ["confirmerror"], descendants: true }], ngImport: i0, template: "<div class=\"modal-body mt-5\">\r\n <div class=\" d-flex align-items-center\">\r\n <div class=\"d-flex justify-content-between w-75\">\r\n <div class=\"d-flex flex-column ms-5\">\r\n <a class=\"btn btn-outline btn-sm py-2 mx-2\" (click)=\"reviewdata()\"><span\r\n class=\"svg-icon svg-icon-primary svg-icon-2x\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M15.8337 10.0001H4.16699M4.16699 10.0001L10.0003 15.8334M4.16699 10.0001L10.0003 4.16675\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span><span class=\"ms-3\">Back to Review</span></a>\r\n </div>\r\n\r\n </div>\r\n <div class=\"d-flex justify-content-between w-100\">\r\n <span class=\"fs-2 text-dark fw-bolder my-3 audit-test\">Audit Report</span>\r\n \r\n </div>\r\n <div class=\"btn btn-sm btn-icon btn-active-color-primary me-10\" (click)=\"closepopup()\" data-bs-dismiss=\"modal\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"6\" y=\"17.3137\" width=\"16\" height=\"2\" rx=\"1\" transform=\"rotate(-45 6 17.3137)\"\r\n fill=\"black\"></rect>\r\n <rect x=\"7.41422\" y=\"6\" width=\"16\" height=\"2\" rx=\"1\" transform=\"rotate(45 7.41422 6)\" fill=\"black\">\r\n </rect>\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"card-body \">\r\n <div class=\" align-items-center text-center mt-5 mb-5 fs-4\">\r\n <span class=\"text-gray-400 me-2\"> Before Count</span>\r\n <span class=\"fw-bold me-10\"> {{totalfiles?.totalfiles}} </span>\r\n <span class=\"text-gray-400 me-2\"> After Count </span>\r\n <span class=\"fw-bold me-10\"> {{Retagcustomercount}} </span>\r\n </div>\r\n <div class=\" mt-5 mx-20 p-10\">\r\n <div *ngFor=\"let item of category\">\r\n <div class=\"d-flex flex-stack \" >\r\n <span class=\"text-gray-500\">{{item.name}}</span>\r\n <button type=\"button\"\r\n class=\"text-dark fs-4 btn btn-icon btn-sm h-auto btn-color-gray-400 btn-active-color-primary justify-content-end\">\r\n {{item.count}} </button>\r\n </div>\r\n <div class=\"separator separator-dashed my-3\"></div>\r\n </div>\r\n \r\n\r\n <div class=\"d-flex flex-stack\">\r\n\r\n <span class=\"text-gray-500\">CUSTOMER</span>\r\n\r\n <button type=\"button\"\r\n class=\"text-dark fs-4 btn btn-icon btn-sm h-auto btn-color-gray-400 btn-active-color-primary justify-content-end\">\r\n {{Retagcustomercount}} </button>\r\n\r\n </div>\r\n\r\n <div class=\"separator separator-dashed my-3\"></div>\r\n\r\n \r\n <div class=\"mt-10 text-center\">\r\n <button class=\"btn btn-primary btn-sm py-2 mx-5 px-8 mt-2\" [disabled]=\"auth\" (click)=\"nextfile()\" > Submit\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #confirmerror let-modal>\r\n <div class=\"w-400px h-auto p-10 card\">\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-label\">{{Errormsg}}</div>\r\n </div>\r\n <div class=\"card-body mt-5\">\r\n <div class=\"w-100 d-flex mt-5\">\r\n <button class=\"btn btn-outline w-50 me-2\" (click)=\"modal.close('isDenied')\">Cancel</button>\r\n <button class=\"btn btn-primary w-50 ms-2\" (click)=\"modal.close('isConfirmed')\">Confirm</button>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".btn.btn-light-primary:hover:not(.btn-active){background-color:#fff!important}.audit-test{font-family:Inter;font-style:normal;font-weight:600!important;font-size:22px!important;line-height:27px;color:#000}.text-gray-500{font-family:Inter;font-style:normal;font-weight:500!important;font-size:14px!important;line-height:17px;color:#5e6278}.ms-25{margin-left:16rem}.text-gray-400{font-family:Inter;font-style:normal;font-weight:500;font-size:14px!important;line-height:17px;letter-spacing:-.02em;color:#676e76}::ng-deep .custom-container .mat-mdc-dialog-container .mdc-dialog__surface{border-radius:10px!important}.svg-icon.svg-icon-2x svg{width:20px!important;height:20px!important}.btn-outline{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d;color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:24px}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
348
|
+
}
|
|
349
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditReportPopupComponent, decorators: [{
|
|
350
|
+
type: Component,
|
|
351
|
+
args: [{ selector: 'lib-audit-report-popup', template: "<div class=\"modal-body mt-5\">\r\n <div class=\" d-flex align-items-center\">\r\n <div class=\"d-flex justify-content-between w-75\">\r\n <div class=\"d-flex flex-column ms-5\">\r\n <a class=\"btn btn-outline btn-sm py-2 mx-2\" (click)=\"reviewdata()\"><span\r\n class=\"svg-icon svg-icon-primary svg-icon-2x\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M15.8337 10.0001H4.16699M4.16699 10.0001L10.0003 15.8334M4.16699 10.0001L10.0003 4.16675\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span><span class=\"ms-3\">Back to Review</span></a>\r\n </div>\r\n\r\n </div>\r\n <div class=\"d-flex justify-content-between w-100\">\r\n <span class=\"fs-2 text-dark fw-bolder my-3 audit-test\">Audit Report</span>\r\n \r\n </div>\r\n <div class=\"btn btn-sm btn-icon btn-active-color-primary me-10\" (click)=\"closepopup()\" data-bs-dismiss=\"modal\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"6\" y=\"17.3137\" width=\"16\" height=\"2\" rx=\"1\" transform=\"rotate(-45 6 17.3137)\"\r\n fill=\"black\"></rect>\r\n <rect x=\"7.41422\" y=\"6\" width=\"16\" height=\"2\" rx=\"1\" transform=\"rotate(45 7.41422 6)\" fill=\"black\">\r\n </rect>\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"card-body \">\r\n <div class=\" align-items-center text-center mt-5 mb-5 fs-4\">\r\n <span class=\"text-gray-400 me-2\"> Before Count</span>\r\n <span class=\"fw-bold me-10\"> {{totalfiles?.totalfiles}} </span>\r\n <span class=\"text-gray-400 me-2\"> After Count </span>\r\n <span class=\"fw-bold me-10\"> {{Retagcustomercount}} </span>\r\n </div>\r\n <div class=\" mt-5 mx-20 p-10\">\r\n <div *ngFor=\"let item of category\">\r\n <div class=\"d-flex flex-stack \" >\r\n <span class=\"text-gray-500\">{{item.name}}</span>\r\n <button type=\"button\"\r\n class=\"text-dark fs-4 btn btn-icon btn-sm h-auto btn-color-gray-400 btn-active-color-primary justify-content-end\">\r\n {{item.count}} </button>\r\n </div>\r\n <div class=\"separator separator-dashed my-3\"></div>\r\n </div>\r\n \r\n\r\n <div class=\"d-flex flex-stack\">\r\n\r\n <span class=\"text-gray-500\">CUSTOMER</span>\r\n\r\n <button type=\"button\"\r\n class=\"text-dark fs-4 btn btn-icon btn-sm h-auto btn-color-gray-400 btn-active-color-primary justify-content-end\">\r\n {{Retagcustomercount}} </button>\r\n\r\n </div>\r\n\r\n <div class=\"separator separator-dashed my-3\"></div>\r\n\r\n \r\n <div class=\"mt-10 text-center\">\r\n <button class=\"btn btn-primary btn-sm py-2 mx-5 px-8 mt-2\" [disabled]=\"auth\" (click)=\"nextfile()\" > Submit\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #confirmerror let-modal>\r\n <div class=\"w-400px h-auto p-10 card\">\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-label\">{{Errormsg}}</div>\r\n </div>\r\n <div class=\"card-body mt-5\">\r\n <div class=\"w-100 d-flex mt-5\">\r\n <button class=\"btn btn-outline w-50 me-2\" (click)=\"modal.close('isDenied')\">Cancel</button>\r\n <button class=\"btn btn-primary w-50 ms-2\" (click)=\"modal.close('isConfirmed')\">Confirm</button>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".btn.btn-light-primary:hover:not(.btn-active){background-color:#fff!important}.audit-test{font-family:Inter;font-style:normal;font-weight:600!important;font-size:22px!important;line-height:27px;color:#000}.text-gray-500{font-family:Inter;font-style:normal;font-weight:500!important;font-size:14px!important;line-height:17px;color:#5e6278}.ms-25{margin-left:16rem}.text-gray-400{font-family:Inter;font-style:normal;font-weight:500;font-size:14px!important;line-height:17px;letter-spacing:-.02em;color:#676e76}::ng-deep .custom-container .mat-mdc-dialog-container .mdc-dialog__surface{border-radius:10px!important}.svg-icon.svg-icon-2x svg{width:20px!important;height:20px!important}.btn-outline{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d;color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:24px}\n"] }]
|
|
352
|
+
}], ctorParameters: () => [{ type: i1.NgbModal }, { type: i1.NgbActiveModal }, { type: i2.Router }, { type: i3.TimerService }, { type: i0.ChangeDetectorRef }, { type: i4.AuditService }, { type: i2.ActivatedRoute }, { type: i5.ToastService }], propDecorators: { selectedType: [{
|
|
353
|
+
type: Input
|
|
354
|
+
}], confirmerror: [{
|
|
355
|
+
type: ViewChild,
|
|
356
|
+
args: ['confirmerror']
|
|
357
|
+
}] } });
|
|
358
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtcmVwb3J0LXBvcHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS10aWNrZXRzL3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC1yZXBvcnQtcG9wdXAvYXVkaXQtcmVwb3J0LXBvcHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS10aWNrZXRzL3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC1yZXBvcnQtcG9wdXAvYXVkaXQtcmVwb3J0LXBvcHVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLEtBQUssRUFBMkMsTUFBTSxlQUFlLENBQUM7QUFHN0csT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFHdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQVF4RCxNQUFNLE9BQU8seUJBQXlCO0lBb0JqQjtJQUNWO0lBQ0E7SUFBd0I7SUFBb0M7SUFDNUQ7SUFBa0M7SUFBK0I7SUFyQjFFLGNBQWMsR0FBUSxDQUFDLENBQUM7SUFDeEIsa0JBQWtCLEdBQVEsQ0FBQyxDQUFDO0lBQzVCLGtCQUFrQixHQUFRLENBQUMsQ0FBQztJQUM1QixnQkFBZ0IsQ0FBTTtJQUN0QixhQUFhLENBQU07SUFDbkIsaUJBQWlCLENBQU07SUFDdkIsaUJBQWlCLENBQU07SUFDdkIsVUFBVSxDQUFNO0lBQ2hCLElBQUksR0FBWSxLQUFLLENBQUM7SUFDdEIsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUM1QixRQUFRLEdBQVEsRUFBRSxDQUFDO0lBQ1YsWUFBWSxDQUFNO0lBQ0EsWUFBWSxDQUFNO0lBQzVCLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzFDLFVBQVUsR0FB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RSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNiLE1BQU0sWUFBWSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksZ0NBQWdDLENBQUM7Z0JBQ2xILElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pDLENBQUM7U0FDRixDQUFDLENBQUE7SUFFSixDQUFDO0lBQ0QsVUFBVTtRQUNSLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQTtRQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUM7d0dBMVZVLHlCQUF5Qjs0RkFBekIseUJBQXlCLHNOQ2R0QyxnaUlBZ0ZjOzs0RkRsRUQseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLHdCQUF3Qjs2UUFpQnpCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ3FCLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIElucHV0LCB2aWV3Q2hpbGQsIE9uRGVzdHJveSwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwsIE5nYkFjdGl2ZU1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBBdWRpdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdWRpdC5zZXJ2aWNlJztcclxuaW1wb3J0ICogYXMgTFpTdHJpbmcgZnJvbSAnbHotc3RyaW5nJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUaW1lclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aW1lci5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWF1ZGl0LXJlcG9ydC1wb3B1cCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F1ZGl0LXJlcG9ydC1wb3B1cC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2F1ZGl0LXJlcG9ydC1wb3B1cC5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1ZGl0UmVwb3J0UG9wdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIFJldGFnanVua2NvdW50OiBhbnkgPSAwO1xyXG4gIFJldGFnZW1wbG95ZWVjb3VudDogYW55ID0gMDtcclxuICBSZXRhZ2N1c3RvbWVyY291bnQ6IGFueSA9IDA7XHJcbiAgZGVtb2dyYXBoaWNDb3VudDogYW55O1xyXG4gIHJldGFnanVua2RhdGE6IGFueTtcclxuICByZXRhZ2VtcGxveWVlZGF0YTogYW55O1xyXG4gIHJldGFnY3VzdG9tZXJkYXRhOiBhbnk7XHJcbiAgdG90YWxmaWxlczogYW55O1xyXG4gIGF1dGg6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzdWJtaXRhdXRoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgRXJyb3Jtc2c6IGFueSA9ICcnO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkVHlwZTogYW55O1xyXG4gIEBWaWV3Q2hpbGQoJ2NvbmZpcm1lcnJvcicpIGNvbmZpcm1lcnJvcjogYW55O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIHRpbWVQYXNzZWQ6IG51bWJlciA9IDA7XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuICBmb3JtYXR0ZWRUaW1lOiBzdHJpbmcgPSAnMDA6MDA6MDAnO1xyXG4gIGNhdGVnb3J5OiBhbnkgPSBbXVxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgcHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcclxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSB0aW1lclNlcnZpY2U6IFRpbWVyU2VydmljZSwgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgYXBpc2VydmljZTogQXVkaXRTZXJ2aWNlLCBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBsZXQgZmlsZWRhdGEgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3RvdGFsZmlsZXMnKSB8fCAne30nKVxyXG4gICAgdGhpcy50b3RhbGZpbGVzID0gZmlsZWRhdGE7XHJcbiAgICB0aGlzLmFwaXNlcnZpY2UuZ2V0QXVkaXRjb25maWcoZmlsZWRhdGE/LmZpbGVkZXRhaWxzPy5jbGllbnRJZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzPy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeSA9IHJlcy5kYXRhLmZvb3RmYWxsRGlyZWN0b3J5Q29uZmlncy50YWdnaW5nTGltaXRhdGlvblxyXG5cclxuXHJcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5Lm1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXJEYXRhID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGRhdGE/LnR5cGUpIHx8ICd7fScpXHJcbiAgICAgICAgICAgIGRhdGEudmFsdWUgPSBmaWx0ZXJEYXRhXHJcbiAgICAgICAgICAgIGRhdGEuY291bnQgPSBkYXRhPy52YWx1ZT8ubGVuZ3RoXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgY29uc29sZS5sb2coXCLwn5qAIH4gQXVkaXRSZXBvcnRQb3B1cENvbXBvbmVudCB+IG5nT25Jbml0IH4gdGhpcy5jYXRlZ29yeTpcIiwgdGhpcy5jYXRlZ29yeSlcclxuICAgICAgICAgIGxldCBzdHJpbmdpZnlkYXRhID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYXVkaXQnKSB8fCAne30nXHJcbiAgICAgICAgICBjb25zdCBkZWNvbXByZXNzZWREYXRhID0gTFpTdHJpbmcuZGVjb21wcmVzcyhzdHJpbmdpZnlkYXRhKTtcclxuICAgICAgICAgIHZhciBjdXN0b21lciA9IEpTT04ucGFyc2UoZGVjb21wcmVzc2VkRGF0YSB8fCAne30nKVxyXG4gICAgICAgICAgdGhpcy5SZXRhZ2N1c3RvbWVyY291bnQgPSBjdXN0b21lci5sZW5ndGhcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICB0aGlzLnNldFRpbWVyKCk7XHJcbiAgfVxyXG5cclxuICBzZXRUaW1lcigpIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy50aW1lclNlcnZpY2UuZ2V0VGltZVBhc3NlZCgpLnN1YnNjcmliZSh0aW1lID0+IHtcclxuICAgICAgdGhpcy50aW1lUGFzc2VkID0gdGltZTtcclxuICAgICAgdGhpcy5mb3JtYXR0ZWRUaW1lID0gdGhpcy50aW1lclNlcnZpY2UuZm9ybWF0VGltZSh0aW1lKTtcclxuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMudGltZXJTZXJ2aWNlLnN0YXJ0VGltZXIoKTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuaGFuZGxlR2xvYmFsTW91c2VFdmVudCk7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlR2xvYmFsTW91c2VFdmVudCk7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgdGhpcy5oYW5kbGVHbG9iYWxNb3VzZUV2ZW50KTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuaGFuZGxlR2xvYmFsTW91c2VFdmVudCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVHbG9iYWxNb3VzZUV2ZW50ID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgdGhpcy50aW1lclNlcnZpY2Uuc3RhcnRUaW1lcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmhhbmRsZUdsb2JhbE1vdXNlRXZlbnQpO1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUdsb2JhbE1vdXNlRXZlbnQpO1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIHRoaXMuaGFuZGxlR2xvYmFsTW91c2VFdmVudCk7XHJcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmhhbmRsZUdsb2JhbE1vdXNlRXZlbnQpO1xyXG4gICAgdGhpcy50aW1lclNlcnZpY2UuY2xlYXJUaW1lcigpXHJcbiAgfVxyXG5cclxuICBjaGFuZ2VicmFuZCgpIHtcclxuICAgIHRoaXMuYXV0aCA9IHRydWU7XHJcbiAgICB2YXIgdG90YWxmaWxlOiBhbnkgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3RvdGFsZmlsZXMnKSB8fCAne30nKTtcclxuXHJcbiAgICBsZXQganVua2ltYWdlOiBhbnkgPSBbXTtcclxuICAgIGxldCBlbXBsb3llZWltYWdlOiBhbnkgPSBbXTtcclxuICAgIGxldCBjdXN0b21lcmltYWdlOiBhbnkgPSBbXTtcclxuXHJcbiAgICB0aGlzLnJldGFnanVua2RhdGEubWFwKChlOiBhbnkpID0+IHtcclxuICAgICAgZGVsZXRlIGUuaW1nX3BhdGg7IGRlbGV0ZSBlLnNlbGVjdGVkOyBkZWxldGUgZS5jb3VudDtcclxuICAgICAgZGVsZXRlIGUuZHJvcHBlZDsgZGVsZXRlIGUubWFwcGVkaWQ7XHJcbiAgICAgIGp1bmtpbWFnZS5wdXNoKGUpO1xyXG4gICAgfSlcclxuICAgIHRoaXMucmV0YWdlbXBsb3llZWRhdGEubWFwKChlOiBhbnkpID0+IHtcclxuICAgICAgZGVsZXRlIGUuaW1nX3BhdGg7IGRlbGV0ZSBlLnNlbGVjdGVkOyBkZWxldGUgZS5jb3VudDtcclxuICAgICAgZGVsZXRlIGUuZHJvcHBlZDsgZGVsZXRlIGUubWFwcGVkaWQ7XHJcbiAgICAgIGVtcGxveWVlaW1hZ2UucHVzaChlKTtcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5yZXRhZ2N1c3RvbWVyZGF0YS5tYXAoKGU6IGFueSkgPT4ge1xyXG5cclxuICAgICAgaWYgKGUuY291bnQgPiAxKSB7XHJcbiAgICAgICAgZGVsZXRlIGUuaW1nX3BhdGg7XHJcbiAgICAgICAgZGVsZXRlIGUuc2VsZWN0ZWQ7XHJcbiAgICAgICAgZGVsZXRlIGUuZHJvcHBlZDtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gZS5tYXBwZWRpZDtcclxuICAgICAgICBlLm1hcHBlZGlkID0gcmVzdWx0XHJcbiAgICAgICAgZS5jb3VudCA9IHJlc3VsdC5sZW5ndGhcclxuICAgICAgICBlLm1hcHBlZGlkLmZvckVhY2goKGUxOiBhbnkpID0+IHsgZGVsZXRlIGUxLmltZ19wYXRoIH0pXHJcbiAgICAgICAgY3VzdG9tZXJpbWFnZS5wdXNoKGUpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGUuZGVtb2dyYXBoaWMgPT09ICdkJyAmJiBlLmNvdW50ID09PSAxKSB7XHJcbiAgICAgICAgZGVsZXRlIGUuaW1nX3BhdGg7XHJcbiAgICAgICAgZGVsZXRlIGUuc2VsZWN0ZWQ7XHJcbiAgICAgICAgZGVsZXRlIGUuZHJvcHBlZDtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gZS5tYXBwZWRpZDtcclxuICAgICAgICBlLm1hcHBlZGlkID0gcmVzdWx0XHJcbiAgICAgICAgZS5jb3VudCA9IHJlc3VsdC5sZW5ndGhcclxuICAgICAgICBlLm1hcHBlZGlkLmZvckVhY2goKGUxOiBhbnkpID0+IHsgZGVsZXRlIGUxLmltZ19wYXRoIH0pXHJcbiAgICAgICAgY3VzdG9tZXJpbWFnZS5wdXNoKGUpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICB2YXIgb2JqOiBhbnkgPSB7XHJcbiAgICAgIGF1ZGl0SWQ6IHRvdGFsZmlsZT8uYXVkaXRJZCA/IHRvdGFsZmlsZT8uYXVkaXRJZCA6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LmF1ZGl0SWQsXHJcbiAgICAgIHN0b3JlSWQ6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LnN0b3JlX2lkLFxyXG4gICAgICBhdWRpdFR5cGU6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LnR5cGUsXHJcbiAgICAgIGZpbGVEYXRlOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5maWxlX2RhdGUsXHJcbiAgICAgIGJlZm9yZUNvdW50OiB0b3RhbGZpbGU/LnRvdGFsZmlsZXMsXHJcbiAgICAgIGp1bmtDb3VudDogdGhpcy5SZXRhZ2p1bmtjb3VudCxcclxuICAgICAganVuazoganVua2ltYWdlID8ganVua2ltYWdlIDogW10sXHJcbiAgICAgIGVtcGxveWVlQ291bnQ6IHRoaXMuUmV0YWdlbXBsb3llZWNvdW50LFxyXG4gICAgICBlbXBsb3llZTogZW1wbG95ZWVpbWFnZSA/IGVtcGxveWVlaW1hZ2UgOiBbXSxcclxuICAgICAgY3VzdG9tZXJDb3VudDogdGhpcy5SZXRhZ2N1c3RvbWVyY291bnQsXHJcbiAgICAgIHpvbmVOYW1lOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy56b25lTmFtZSA/IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LnpvbmVOYW1lIDogJycsXHJcbiAgICAgIG1vZHVsZVR5cGU6IHRoaXMuc2VsZWN0ZWRUeXBlLFxyXG4gICAgICBjdXN0b21lcjogY3VzdG9tZXJpbWFnZSA/IGN1c3RvbWVyaW1hZ2UgOiBbXSxcclxuICAgICAgdGltZVNwZW50OiB0aGlzLnRpbWVQYXNzZWRcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFwaXNlcnZpY2Uuc2F2ZWF1ZGl0KG9iaikucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldFN1Y2Nlc3NUb2FzdChyZXM/LmRhdGE/LnJlc3VsdClcclxuICAgICAgICAgIHRoaXMuYXV0aCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50aW1lclNlcnZpY2UucmVzZXRUaW1lcigpXHJcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCd0aW1lU3BlbnQnKVxyXG4gICAgICAgICAgdGhpcy5jbG9zZXBvcHVwKClcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2VtcGxveWVlJylcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2p1bmsnKVxyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnYXVkaXQnKVxyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndG90YWxmaWxlcycpXHJcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdyZXRhZycpXHJcblxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3RpY2tldHMnXSwgeyBxdWVyeVBhcmFtczogeyB0eXBlOiAnZm9vdGZhbGwnIH0gfSlcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYXV0aCA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDMpIHtcclxuICAgICAgICAgICAgdGhpcy5FcnJvcm1zZyA9IHJlcy5lcnJvclxyXG4gICAgICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5jb25maXJtZXJyb3IpXHJcbiAgICAgICAgICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzQ29uZmlybWVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2UvdGlja2V0cyddLCB7IHF1ZXJ5UGFyYW1zOiB7IHR5cGU6ICdmb290ZmFsbCcgfSB9KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/LmVycm9yPy5lcnJvciB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ0ludmFsaWQgc3RhdHVzIGNvZGU6IHVuZGVmaW5lZCc7XHJcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KGVycm9yTWVzc2FnZSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICBuZXh0ZmlsZSgpIHtcclxuICAgIHRoaXMuYXV0aCA9IHRydWU7XHJcbiAgICBsZXQgdG90YWxmaWxlOiBhbnkgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3RvdGFsZmlsZXMnKSB8fCAne30nKTtcclxuICAgIGNvbnNvbGUubG9nKFwi8J+agCB+IEF1ZGl0UmVwb3J0UG9wdXBDb21wb25lbnQgfiBuZXh0ZmlsZSB+IHRvdGFsZmlsZTpcIiwgdG90YWxmaWxlKVxyXG4gICAgbGV0IHJldmlzZWREZXRhaWw6IGFueSA9IFtdXHJcbiAgICBsZXQgc3RyaW5naWZ5ZGF0YSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2F1ZGl0JykgfHwgJ3t9J1xyXG4gICAgY29uc3QgZGVjb21wcmVzc2VkRGF0YSA9IExaU3RyaW5nLmRlY29tcHJlc3Moc3RyaW5naWZ5ZGF0YSk7XHJcbiAgICB2YXIgY3VzdG9tZXIgPSBKU09OLnBhcnNlKGRlY29tcHJlc3NlZERhdGEgfHwgJ3t9JylcclxuICAgIGN1c3RvbWVyLm1hcCgoY3VzdG9tZXJEYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGN1c3RvbWVyRGF0YS5jb3VudCA+IDEpIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIvCfmoAgfiBBdWRpdFJlcG9ydFBvcHVwQ29tcG9uZW50IH4gbmV4dGZpbGUgfiBjdXN0b21lckRhdGE6XCIsIGN1c3RvbWVyRGF0YSlcclxuICAgICAgICBsZXQgZHVwbGljYXRlRGF0YSA9IGN1c3RvbWVyRGF0YS5tYXBwZWRpZC5maWx0ZXIoKGRhdGE6IGFueSkgPT4gZGF0YS5pbWdfbmFtZSAhPSBjdXN0b21lckRhdGE/LmltZ19uYW1lKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwi8J+agCB+IEF1ZGl0UmVwb3J0UG9wdXBDb21wb25lbnQgfiBuZXh0ZmlsZSB+IGR1cGxpY2F0ZURhdGE6XCIsIGR1cGxpY2F0ZURhdGEpXHJcbiAgICAgICAgbGV0IGR1cGxpY2F0ZUltYWdlOiBhbnkgPSBbXVxyXG4gICAgICAgIGR1cGxpY2F0ZURhdGEubWFwKChkdXBEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIGR1cGxpY2F0ZUltYWdlLnB1c2goXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBcImlkXCI6IGAke3RvdGFsZmlsZT8uZmlsZWRldGFpbHM/LnN0b3JlSWR9XyR7dG90YWxmaWxlPy5maWxlZGV0YWlscz8uRGF0ZX1fJHtkdXBEYXRhPy5pbWdfbmFtZX1gLFxyXG4gICAgICAgICAgICAgIFwidGVtcElkXCI6IGR1cERhdGE/LmltZ19uYW1lLFxyXG4gICAgICAgICAgICAgIFwiZmlsZVBhdGhcIjogZHVwRGF0YT8uaW1nX3BhdGgsXHJcbiAgICAgICAgICAgICAgXCJpc0NoZWNrZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApXHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGV0IG5ld09iajogYW55ID0ge1xyXG4gICAgICAgICAgXCJpZFwiOiBgJHt0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5zdG9yZUlkfV8ke3RvdGFsZmlsZT8uZmlsZWRldGFpbHM/LkRhdGV9XyR7Y3VzdG9tZXJEYXRhPy5pbWdfbmFtZX1gLFxyXG4gICAgICAgICAgXCJjbGllbnRJZFwiOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5jbGllbnRJZCxcclxuICAgICAgICAgIFwic3RvcmVJZFwiOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5zdG9yZUlkLFxyXG4gICAgICAgICAgXCJ0ZW1wSWRcIjogY3VzdG9tZXJEYXRhPy5pbWdfbmFtZSxcclxuICAgICAgICAgIFwiZGF0ZVN0cmluZ1wiOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5EYXRlLFxyXG4gICAgICAgICAgXCJ0aW1lUmFuZ2VcIjogXCIxMUFNLTEyUE1cIixcclxuICAgICAgICAgIFwicHJvY2Vzc1R5cGVcIjogXCJmb290ZmFsbFwiLFxyXG4gICAgICAgICAgXCJyZXZvcHNUeXBlXCI6IFwiZHVwbGljYXRlXCIsXHJcbiAgICAgICAgICBcImZpbGVQYXRoXCI6IGN1c3RvbWVyRGF0YT8uaW1nX3BhdGgsXHJcbiAgICAgICAgICBcInN0YXR1c1wiOiBcInN1Ym1pdHRlZFwiLFxyXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgXCJpc0NoZWNrZWRcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcInRhZ2dpbmctcmVmbGVjdFwiLFxyXG4gICAgICAgICAgXCJwYXJlbnRcIjogbnVsbCxcclxuICAgICAgICAgIFwiaXNQYXJlbnRcIjogdHJ1ZSxcclxuICAgICAgICAgIFwiZHVwbGljYXRlSW1hZ2VcIjogZHVwbGljYXRlSW1hZ2VcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXCLwn5qAIH4gQXVkaXRSZXBvcnRQb3B1cENvbXBvbmVudCB+IG5leHRmaWxlIH4gbmV3T2JqOlwiLCBuZXdPYmopXHJcbiAgICAgICAgcmV2aXNlZERldGFpbC5wdXNoKG5ld09iailcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIvCfmoAgfiBBdWRpdFJlcG9ydFBvcHVwQ29tcG9uZW50IH4gbmV4dGZpbGUgfiBjdXN0b21lckRhdGE6XCIsIGN1c3RvbWVyRGF0YSlcclxuICAgICAgICBsZXQgbmV3T2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICBcImlkXCI6IGAke3RvdGFsZmlsZT8uZmlsZWRldGFpbHM/LnN0b3JlSWR9XyR7dG90YWxmaWxlPy5maWxlZGV0YWlscz8uRGF0ZX1fJHtjdXN0b21lckRhdGE/LmltZ19uYW1lfWAsXHJcbiAgICAgICAgICBcImNsaWVudElkXCI6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LmNsaWVudElkLFxyXG4gICAgICAgICAgXCJzdG9yZUlkXCI6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LnN0b3JlSWQsXHJcbiAgICAgICAgICBcInRlbXBJZFwiOiBjdXN0b21lckRhdGE/LmltZ19uYW1lLFxyXG4gICAgICAgICAgXCJkYXRlU3RyaW5nXCI6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LkRhdGUsXHJcbiAgICAgICAgICBcInRpbWVSYW5nZVwiOiBcIjExQU0tMTJQTVwiLFxyXG4gICAgICAgICAgXCJwcm9jZXNzVHlwZVwiOiBcImZvb3RmYWxsXCIsXHJcbiAgICAgICAgICBcInJldm9wc1R5cGVcIjogXCJkdXBsaWNhdGVcIixcclxuICAgICAgICAgIFwiZmlsZVBhdGhcIjogY3VzdG9tZXJEYXRhPy5pbWdfcGF0aCxcclxuICAgICAgICAgIFwic3RhdHVzXCI6IFwic3VibWl0dGVkXCIsXHJcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICBcImlzQ2hlY2tlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwidGFnZ2luZy1yZWZsZWN0XCIsXHJcbiAgICAgICAgICBcInBhcmVudFwiOiBudWxsLFxyXG4gICAgICAgICAgXCJpc1BhcmVudFwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJkdXBsaWNhdGVJbWFnZVwiOiBbXVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyhcIvCfmoAgfiBBdWRpdFJlcG9ydFBvcHVwQ29tcG9uZW50IH4gbmV4dGZpbGUgfiBuZXdPYmo6XCIsIG5ld09iailcclxuICAgICAgICByZXZpc2VkRGV0YWlsLnB1c2gobmV3T2JqKVxyXG4gICAgICB9XHJcblxyXG5cclxuICAgIH0pXHJcbiAgICBsZXQgY291bnQ6IGFueSA9IFtdXHJcbiAgICB0aGlzLmNhdGVnb3J5Lm1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGNvdW50LnB1c2goe1xyXG4gICAgICAgIG5hbWU6IGRhdGEubmFtZSxcclxuICAgICAgICB2YWx1ZTogZGF0YS5jb3VudCxcclxuICAgICAgICB0eXBlOiBkYXRhLnR5cGVcclxuICAgICAgfSlcclxuICAgICAgbGV0IGZpbHRlckRhdGEgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZGF0YT8udHlwZSkgfHwgJ1tdJylcclxuXHJcbiAgICAgIGZpbHRlckRhdGEubWFwKChvdGhlckRhdGE6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgb3RoZXJPYmo6IGFueSA9IHtcclxuICAgICAgICAgIFwiaWRcIjogYCR7dG90YWxmaWxlPy5maWxlZGV0YWlscz8uc3RvcmVJZH1fJHt0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5EYXRlfV8ke290aGVyRGF0YT8uaW1nX25hbWV9YCxcclxuICAgICAgICAgIFwiY2xpZW50SWRcIjogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uY2xpZW50SWQsXHJcbiAgICAgICAgICBcInN0b3JlSWRcIjogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uc3RvcmVJZCxcclxuICAgICAgICAgIFwidGVtcElkXCI6IG90aGVyRGF0YT8uaW1nX25hbWUsXHJcbiAgICAgICAgICBcImRhdGVTdHJpbmdcIjogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uRGF0ZSxcclxuICAgICAgICAgIFwicHJvY2Vzc1R5cGVcIjogXCJmb290ZmFsbFwiLFxyXG4gICAgICAgICAgXCJyZXZvcHNUeXBlXCI6IGRhdGE/LnR5cGUsXHJcbiAgICAgICAgICBcImZpbGVQYXRoXCI6IG90aGVyRGF0YT8uaW1nX3BhdGgsXHJcbiAgICAgICAgICBcInN0YXR1c1wiOiBcInN1Ym1pdHRlZFwiLFxyXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgXCJpc0NoZWNrZWRcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcInRhZ2dpbmctcmVmbGVjdFwiLFxyXG4gICAgICAgICAgXCJwYXJlbnRcIjogbnVsbCxcclxuICAgICAgICAgIFwiaXNQYXJlbnRcIjogZmFsc2UsXHJcbiAgICAgICAgICBcImR1cGxpY2F0ZUltYWdlXCI6IFtdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldmlzZWREZXRhaWwucHVzaChvdGhlck9iailcclxuICAgICAgfSlcclxuICAgIH0pXHJcblxyXG5cclxuICAgIGxldCB0aWNrZXRUeXBlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndGlja2V0VHlwZScpXHJcblxyXG4gICAgdmFyIG9iajogYW55ID0ge1xyXG4gICAgICBcInR5cGVcIjogXCJ0YW5nb3Jldmlld1wiLFxyXG4gICAgICBcIm1vZGVcIjogXCJ3ZWJcIixcclxuICAgICAgXCJyZXZpY2VkRm9vdGZhbGxcIjogdGhpcy5SZXRhZ2N1c3RvbWVyY291bnQsXHJcblxyXG4gICAgICBcInJldmljZWRQZXJjXCI6IE1hdGgucm91bmQoKHRoaXMuUmV0YWdjdXN0b21lcmNvdW50IC8gdG90YWxmaWxlPy50b3RhbGZpbGVzKSAqIDEwMCkgKyBcIiVcIixcclxuICAgICAgY291bnQ6IGNvdW50LFxyXG4gICAgICByZXZpc2VkRGV0YWlsOiByZXZpc2VkRGV0YWlsXHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhcIvCfmoAgfiBBdWRpdFJlcG9ydFBvcHVwQ29tcG9uZW50IH4gbmV4dGZpbGUgfiBvYmo6XCIsIG9iailcclxuICAgIC8vIHJldHVyblxyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIHN0b3JlSWQ6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LnN0b3JlSWQsXHJcbiAgICAgIFwiZGF0ZVN0cmluZ1wiOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5EYXRlLFxyXG4gICAgICB0aWNrZXRUeXBlOiB0aWNrZXRUeXBlLFxyXG4gICAgICBtYXBwaW5nSW5mbzogb2JqXHJcbiAgICB9XHJcbiAgICB0aGlzLmFwaXNlcnZpY2Uuc2F2ZWF1ZGl0KHBheWxvYWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5hdXRoID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnRpbWVyU2VydmljZS5yZXNldFRpbWVyKClcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3RpbWVTcGVudCcpXHJcbiAgICAgICAgICB0aGlzLmNsb3NlcG9wdXAoKVxyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnZW1wbG95ZWUnKVxyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnanVuaycpXHJcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdhdWRpdCcpXHJcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCd0b3RhbGZpbGVzJylcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3JldGFnJylcclxuICAgICAgICAgIHZhciBvYmo6IGFueSA9IHtcclxuICAgICAgICAgICAgdG90YWxmaWxlczoge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBvYmoudG90YWxmaWxlcy5xdWV1ZU5hbWUgPSB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5xdWV1ZU5hbWVcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3RvdGFsZmlsZXMnLCBKU09OLnN0cmluZ2lmeShvYmopKVxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3RpY2tldHMnXSwgeyBxdWVyeVBhcmFtczogeyB0eXBlOiAnZm9vdGZhbGwnIH0gfSlcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYXV0aCA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDMpIHtcclxuICAgICAgICAgICAgdGhpcy5FcnJvcm1zZyA9IHJlcy5lcnJvclxyXG4gICAgICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5jb25maXJtZXJyb3IpXHJcbiAgICAgICAgICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzQ29uZmlybWVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2UvdGlja2V0cyddLCB7IHF1ZXJ5UGFyYW1zOiB7IHR5cGU6ICdmb290ZmFsbCcgfSB9KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5lcnJvcj8uZXJyb3IgfHwgZXJyPy5tZXNzYWdlIHx8ICdJbnZhbGlkIHN0YXR1cyBjb2RlOiB1bmRlZmluZWQnO1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChlcnJvck1lc3NhZ2UpO1xyXG4gICAgICB9LFxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG4gIGNsb3NlcG9wdXAoKSB7XHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICByZXZpZXdkYXRhKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL21hbmFnZS90aWNrZXRzL21hcHBpbmctbGlzdFwiXSlcclxuICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UoKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IG10LTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gdy03NVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1zLTVcIj5cclxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGJ0bi1zbSBweS0yIG14LTJcIiAoY2xpY2spPVwicmV2aWV3ZGF0YSgpXCI+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi1wcmltYXJ5IHN2Zy1pY29uLTJ4XCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1LjgzMzcgMTAuMDAwMUg0LjE2Njk5TTQuMTY2OTkgMTAuMDAwMUwxMC4wMDAzIDE1LjgzMzRNNC4xNjY5OSAxMC4wMDAxTDEwLjAwMDMgNC4xNjY3NVwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPjxzcGFuIGNsYXNzPVwibXMtM1wiPkJhY2sgdG8gUmV2aWV3PC9zcGFuPjwvYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gdy0xMDBcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmcy0yIHRleHQtZGFyayBmdy1ib2xkZXIgbXktMyBhdWRpdC10ZXN0XCI+QXVkaXQgUmVwb3J0PC9zcGFuPlxyXG4gICAgICAgICAgIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeSBtZS0xMFwiIChjbGljayk9XCJjbG9zZXBvcHVwKClcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IG9wYWNpdHk9XCIwLjVcIiB4PVwiNlwiIHk9XCIxNy4zMTM3XCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjJcIiByeD1cIjFcIiB0cmFuc2Zvcm09XCJyb3RhdGUoLTQ1IDYgMTcuMzEzNylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiYmxhY2tcIj48L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjcuNDE0MjJcIiB5PVwiNlwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIyXCIgcng9XCIxXCIgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDcuNDE0MjIgNilcIiBmaWxsPVwiYmxhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBcclxuICBcclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIiBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgbXQtNSBtYi01IGZzLTRcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWdyYXktNDAwIG1lLTJcIj4gQmVmb3JlIENvdW50PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LWJvbGQgbWUtMTBcIj4ge3t0b3RhbGZpbGVzPy50b3RhbGZpbGVzfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZ3JheS00MDAgbWUtMlwiPiBBZnRlciBDb3VudCA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctYm9sZCBtZS0xMFwiPiB7e1JldGFnY3VzdG9tZXJjb3VudH19IDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiIG10LTUgbXgtMjAgcC0xMFwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNhdGVnb3J5XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTUwMFwiPnt7aXRlbS5uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhcmsgZnMtNCBidG4gYnRuLWljb24gYnRuLXNtIGgtYXV0byAgYnRuLWNvbG9yLWdyYXktNDAwIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeSBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0uY291bnR9fSA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvciBzZXBhcmF0b3ItZGFzaGVkIG15LTNcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgXHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFja1wiPlxyXG5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWdyYXktNTAwXCI+Q1VTVE9NRVI8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhcmsgZnMtNCBidG4gYnRuLWljb24gYnRuLXNtIGgtYXV0byBidG4tY29sb3ItZ3JheS00MDAgYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgIHt7UmV0YWdjdXN0b21lcmNvdW50fX0gPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yIHNlcGFyYXRvci1kYXNoZWQgbXktM1wiPjwvZGl2PlxyXG5cclxuICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xMCB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBweS0yIG14LTUgcHgtOCBtdC0yXCIgIFtkaXNhYmxlZF09XCJhdXRoXCIgKGNsaWNrKT1cIm5leHRmaWxlKClcIiA+IFN1Ym1pdFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb25maXJtZXJyb3IgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cInctNDAwcHggaC1hdXRvIHAtMTAgY2FyZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1sYWJlbFwiPnt7RXJyb3Jtc2d9fTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgbXQtNVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IG10LTVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdy01MCBtZS0yXCIgKGNsaWNrKT1cIm1vZGFsLmNsb3NlKCdpc0RlbmllZCcpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctNTAgbXMtMlwiIChjbGljayk9XCJtb2RhbC5jbG9zZSgnaXNDb25maXJtZWQnKVwiPkNvbmZpcm08L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|