tango-app-ui-manage-tickets 3.7.0-beta.4 → 3.7.0-beta.41

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 (44) hide show
  1. package/esm2022/lib/components/audit-mapping-list/audit-mapping-list.component.mjs +486 -0
  2. package/esm2022/lib/components/audit-report-popup/audit-report-popup.component.mjs +358 -0
  3. package/esm2022/lib/components/audit-retag/audit-retag.component.mjs +457 -0
  4. package/esm2022/lib/components/custom-select/custom-select.component.mjs +174 -0
  5. package/esm2022/lib/components/filter-options/filter-options.component.mjs +41 -0
  6. package/esm2022/lib/components/footfall-dic/footfall-dic.component.mjs +374 -196
  7. package/esm2022/lib/components/footfall-dicview/footfall-dicview.component.mjs +1014 -0
  8. package/esm2022/lib/components/footfall-popup/footfall-popup.component.mjs +15 -0
  9. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +3 -3
  10. package/esm2022/lib/components/remove-audit/remove-audit.component.mjs +80 -0
  11. package/esm2022/lib/components/start-audit/start-audit.component.mjs +742 -0
  12. package/esm2022/lib/components/tango-manage-tickets/tango-manage-tickets.component.mjs +7 -3
  13. package/esm2022/lib/components/ticket-footfall-new/ticket-footfall-new.component.mjs +2214 -0
  14. package/esm2022/lib/components/ticketclosepopup/ticketclosepopup.component.mjs +43 -0
  15. package/esm2022/lib/components/tickets/tickets.component.mjs +62 -8
  16. package/esm2022/lib/components/viewcategory/viewcategory.component.mjs +89 -0
  17. package/esm2022/lib/services/audit.service.mjs +88 -0
  18. package/esm2022/lib/services/ticket.service.mjs +128 -33
  19. package/esm2022/lib/services/timer.service.mjs +84 -0
  20. package/esm2022/lib/tango-manage-tickets-routing.module.mjs +22 -2
  21. package/esm2022/lib/tango-manage-tickets.module.mjs +57 -5
  22. package/fesm2022/tango-app-ui-manage-tickets.mjs +6466 -312
  23. package/fesm2022/tango-app-ui-manage-tickets.mjs.map +1 -1
  24. package/lib/components/audit-mapping-list/audit-mapping-list.component.d.ts +73 -0
  25. package/lib/components/audit-metrics/audit-metrics.component.d.ts +1 -1
  26. package/lib/components/audit-report-popup/audit-report-popup.component.d.ts +47 -0
  27. package/lib/components/audit-retag/audit-retag.component.d.ts +59 -0
  28. package/lib/components/custom-select/custom-select.component.d.ts +34 -0
  29. package/lib/components/filter-options/filter-options.component.d.ts +15 -0
  30. package/lib/components/footfall-dic/footfall-dic.component.d.ts +23 -8
  31. package/lib/components/footfall-dicview/footfall-dicview.component.d.ts +132 -0
  32. package/lib/components/footfall-popup/footfall-popup.component.d.ts +8 -0
  33. package/lib/components/remove-audit/remove-audit.component.d.ts +16 -0
  34. package/lib/components/start-audit/start-audit.component.d.ts +86 -0
  35. package/lib/components/tango-manage-tickets/tango-manage-tickets.component.d.ts +1 -0
  36. package/lib/components/ticket-footfall-new/ticket-footfall-new.component.d.ts +256 -0
  37. package/lib/components/ticketclosepopup/ticketclosepopup.component.d.ts +15 -0
  38. package/lib/components/tickets/tickets.component.d.ts +4 -0
  39. package/lib/components/viewcategory/viewcategory.component.d.ts +16 -0
  40. package/lib/services/audit.service.d.ts +36 -0
  41. package/lib/services/ticket.service.d.ts +25 -7
  42. package/lib/services/timer.service.d.ts +22 -0
  43. package/lib/tango-manage-tickets.module.d.ts +21 -5
  44. 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=