tango-app-ui-analyse-trax 3.0.0-dev → 3.3.1-alpha-task.63

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 (92) hide show
  1. package/esm2022/lib/components/action-centre/action-centre.component.mjs +303 -0
  2. package/esm2022/lib/components/activity-log/activity-log.component.mjs +94 -0
  3. package/esm2022/lib/components/add-checklist/add-checklist.component.mjs +1439 -0
  4. package/esm2022/lib/components/add-task/add-task.component.mjs +85 -0
  5. package/esm2022/lib/components/checklist/checklist.component.mjs +252 -0
  6. package/esm2022/lib/components/checklist-configure/checklist-configure.component.mjs +1954 -0
  7. package/esm2022/lib/components/checklistlayout/checklistlayout.component.mjs +12 -0
  8. package/esm2022/lib/components/chip-dropdown/chip-dropdown.component.mjs +84 -0
  9. package/esm2022/lib/components/create-task/create-task.component.mjs +367 -0
  10. package/esm2022/lib/components/create-task/create-task.data.mjs +306 -0
  11. package/esm2022/lib/components/create-task/create-task.interface.mjs +2 -0
  12. package/esm2022/lib/components/custom-select/custom-select.component.mjs +236 -0
  13. package/esm2022/lib/components/dashboard/dashboard.component.mjs +600 -0
  14. package/esm2022/lib/components/dashboard-info/dashboard-info.component.mjs +635 -0
  15. package/esm2022/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.mjs +172 -0
  16. package/esm2022/lib/components/dashboard-layout/dashboard-layout.component.mjs +12 -0
  17. package/esm2022/lib/components/export-gallery/export-gallery.component.mjs +119 -0
  18. package/esm2022/lib/components/flag-layout/flag-layout.component.mjs +12 -0
  19. package/esm2022/lib/components/flags/flags.component.mjs +257 -0
  20. package/esm2022/lib/components/flags/flags.interface.mjs +2 -0
  21. package/esm2022/lib/components/flags-info/flags-info.component.mjs +388 -0
  22. package/esm2022/lib/components/flags-info/flags-info.interface.mjs +2 -0
  23. package/esm2022/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.mjs +71 -0
  24. package/esm2022/lib/components/gallery/gallery.component.mjs +1202 -0
  25. package/esm2022/lib/components/group-select/group-select.component.mjs +155 -0
  26. package/esm2022/lib/components/managechecklist/managechecklist.component.mjs +172 -0
  27. package/esm2022/lib/components/multi-date-datepicker/multi-date-datepicker.component.mjs +117 -0
  28. package/esm2022/lib/components/orders/orders.component.mjs +171 -0
  29. package/esm2022/lib/components/pagination/pagination.component.mjs +62 -0
  30. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +105 -0
  31. package/esm2022/lib/components/reports/date-picker/date-picker.component.mjs +60 -0
  32. package/esm2022/lib/components/reports/reports.component.mjs +299 -0
  33. package/esm2022/lib/components/reports/reports.interface.mjs +2 -0
  34. package/esm2022/lib/components/tango-analyse-trax/tango-analyse-trax.component.mjs +27 -6
  35. package/esm2022/lib/components/task/task.component.mjs +271 -0
  36. package/esm2022/lib/components/task-configure/task-configure.component.mjs +504 -0
  37. package/esm2022/lib/components/task-configure/task-configure.interface.mjs +2 -0
  38. package/esm2022/lib/components/task-info/task-info.component.mjs +300 -0
  39. package/esm2022/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.mjs +203 -0
  40. package/esm2022/lib/components/task-layout/task-layout.component.mjs +12 -0
  41. package/esm2022/lib/components/trax-store/trax-store.component.mjs +153 -0
  42. package/esm2022/lib/components/traxpopup/traxpopup.component.mjs +67 -0
  43. package/esm2022/lib/services/trax.service.mjs +334 -0
  44. package/esm2022/lib/tango-analyse-trax-routing.module.mjs +124 -6
  45. package/esm2022/lib/tango-analyse-trax.module.mjs +147 -9
  46. package/fesm2022/tango-app-ui-analyse-trax.mjs +11512 -21
  47. package/fesm2022/tango-app-ui-analyse-trax.mjs.map +1 -1
  48. package/lib/components/action-centre/action-centre.component.d.ts +56 -0
  49. package/lib/components/activity-log/activity-log.component.d.ts +30 -0
  50. package/lib/components/add-checklist/add-checklist.component.d.ts +99 -0
  51. package/lib/components/add-task/add-task.component.d.ts +38 -0
  52. package/lib/components/checklist/checklist.component.d.ts +39 -0
  53. package/lib/components/checklist-configure/checklist-configure.component.d.ts +160 -0
  54. package/lib/components/checklistlayout/checklistlayout.component.d.ts +5 -0
  55. package/lib/components/chip-dropdown/chip-dropdown.component.d.ts +24 -0
  56. package/lib/components/create-task/create-task.component.d.ts +58 -0
  57. package/lib/components/create-task/create-task.data.d.ts +244 -0
  58. package/lib/components/create-task/create-task.interface.d.ts +147 -0
  59. package/lib/components/custom-select/custom-select.component.d.ts +35 -0
  60. package/lib/components/dashboard/dashboard.component.d.ts +77 -0
  61. package/lib/components/dashboard-info/dashboard-info.component.d.ts +102 -0
  62. package/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.d.ts +40 -0
  63. package/lib/components/dashboard-layout/dashboard-layout.component.d.ts +5 -0
  64. package/lib/components/export-gallery/export-gallery.component.d.ts +33 -0
  65. package/lib/components/flag-layout/flag-layout.component.d.ts +5 -0
  66. package/lib/components/flags/flags.component.d.ts +51 -0
  67. package/lib/components/flags/flags.interface.d.ts +64 -0
  68. package/lib/components/flags-info/flags-info.component.d.ts +62 -0
  69. package/lib/components/flags-info/flags-info.interface.d.ts +212 -0
  70. package/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.d.ts +13 -0
  71. package/lib/components/gallery/gallery.component.d.ts +126 -0
  72. package/lib/components/group-select/group-select.component.d.ts +33 -0
  73. package/lib/components/managechecklist/managechecklist.component.d.ts +32 -0
  74. package/lib/components/multi-date-datepicker/multi-date-datepicker.component.d.ts +27 -0
  75. package/lib/components/orders/orders.component.d.ts +38 -0
  76. package/lib/components/pagination/pagination.component.d.ts +16 -0
  77. package/lib/components/reactive-select/reactive-select.component.d.ts +32 -0
  78. package/lib/components/reports/date-picker/date-picker.component.d.ts +23 -0
  79. package/lib/components/reports/reports.component.d.ts +55 -0
  80. package/lib/components/reports/reports.interface.d.ts +46 -0
  81. package/lib/components/tango-analyse-trax/tango-analyse-trax.component.d.ts +10 -1
  82. package/lib/components/task/task.component.d.ts +59 -0
  83. package/lib/components/task-configure/task-configure.component.d.ts +69 -0
  84. package/lib/components/task-configure/task-configure.interface.d.ts +124 -0
  85. package/lib/components/task-info/task-info.component.d.ts +68 -0
  86. package/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.d.ts +60 -0
  87. package/lib/components/task-layout/task-layout.component.d.ts +5 -0
  88. package/lib/components/trax-store/trax-store.component.d.ts +44 -0
  89. package/lib/components/traxpopup/traxpopup.component.d.ts +23 -0
  90. package/lib/services/trax.service.d.ts +107 -0
  91. package/lib/tango-analyse-trax.module.d.ts +43 -3
  92. package/package.json +1 -1
@@ -0,0 +1,504 @@
1
+ import { Component, ViewChild } from '@angular/core';
2
+ import customParseFormat from 'dayjs/plugin/customParseFormat';
3
+ import { BehaviorSubject, Subject, debounceTime, distinctUntilChanged, takeUntil } from "rxjs";
4
+ import dayjs from 'dayjs';
5
+ import utc from 'dayjs/plugin/utc';
6
+ import { FormControl } from '@angular/forms';
7
+ import { TraxStoreComponent } from '../trax-store/trax-store.component';
8
+ import * as XLSX from 'xlsx';
9
+ import { TraxpopupComponent } from '../traxpopup/traxpopup.component';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/router";
12
+ import * as i2 from "tango-app-ui-global";
13
+ import * as i3 from "../../services/trax.service";
14
+ import * as i4 from "@ng-bootstrap/ng-bootstrap";
15
+ import * as i5 from "tango-app-ui-shared";
16
+ import * as i6 from "@angular/common";
17
+ import * as i7 from "@angular/forms";
18
+ import * as i8 from "ngx-daterangepicker-material";
19
+ import * as i9 from "../chip-dropdown/chip-dropdown.component";
20
+ dayjs.extend(utc);
21
+ dayjs.extend(customParseFormat);
22
+ export class TaskConfigureComponent {
23
+ route;
24
+ gs;
25
+ pageInfo;
26
+ traxService;
27
+ dialog;
28
+ toastService;
29
+ router;
30
+ cd;
31
+ destroy$ = new Subject();
32
+ dayjs = dayjs;
33
+ scheduleDate;
34
+ minDate = this.dayjs().format();
35
+ scheduleEndTime = new FormControl(this.getCurrentTime());
36
+ currentTaskId;
37
+ headerData;
38
+ taskDetails;
39
+ approver = new FormControl();
40
+ priorityType = new FormControl('high');
41
+ allowedStoreLocation = new FormControl(false);
42
+ restrictAttendance = new FormControl(false);
43
+ approversList;
44
+ assignTableApiState = new BehaviorSubject('initial');
45
+ assignTableData;
46
+ itemsPerPage = 10;
47
+ currentPage = 0;
48
+ totalItems = 0;
49
+ paginationSizes = [10, 20, 30];
50
+ pageSize = 10;
51
+ searchInput = new FormControl('');
52
+ selectAllInput = new FormControl(false);
53
+ removedUsers = new Set();
54
+ fileInput;
55
+ constructor(route, gs, pageInfo, traxService, dialog, toastService, router, cd) {
56
+ this.route = route;
57
+ this.gs = gs;
58
+ this.pageInfo = pageInfo;
59
+ this.traxService = traxService;
60
+ this.dialog = dialog;
61
+ this.toastService = toastService;
62
+ this.router = router;
63
+ this.cd = cd;
64
+ this.headerData = JSON.parse(localStorage.getItem('header-filters'));
65
+ this.searchInput.valueChanges.pipe(takeUntil(this.destroy$)).pipe(debounceTime(1000), distinctUntilChanged()).subscribe((val) => {
66
+ if (val === null || val === undefined) {
67
+ return;
68
+ }
69
+ this.currentPage = 0;
70
+ this.getAssignTable();
71
+ });
72
+ this.selectAllInput.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((val) => {
73
+ if (val === null || val === undefined) {
74
+ return;
75
+ }
76
+ if (val) {
77
+ this.assignTableData?.forEach(val => val.checkFlag = true);
78
+ this.removedUsers.clear();
79
+ }
80
+ else {
81
+ this.assignTableData?.forEach(val => { val.checkFlag = false, this.onUserAssignChange(val.checkFlag, val.id); });
82
+ }
83
+ });
84
+ }
85
+ ngOnDestroy() {
86
+ this.destroy$.next(true);
87
+ this.destroy$.complete();
88
+ }
89
+ ngOnInit() {
90
+ this.scheduleDate = { startDate: this.dayjs().format('DD-MM-YYYY'), endDate: this.dayjs().format('DD-MM-YYYY') };
91
+ this.setPageData();
92
+ this.route.queryParams
93
+ .pipe(takeUntil(this.destroy$))
94
+ .subscribe((params) => {
95
+ if (params?.taskId) {
96
+ this.currentTaskId = params.taskId;
97
+ this.getClientUser();
98
+ this.getTask(this.currentTaskId);
99
+ this.getAssignTable();
100
+ }
101
+ });
102
+ // this.gs.dataRangeValue
103
+ // .pipe(takeUntil(this.destroy$))
104
+ // .pipe(debounceTime(1000))
105
+ // .subscribe((data: any) => {
106
+ // if (data?.client) {
107
+ // this.headerData = data;
108
+ // if (this.currentTaskId) {
109
+ // this.getClientUser()
110
+ // this.getTask(this.currentTaskId)
111
+ // this.getAssignTable()
112
+ // }
113
+ // }
114
+ // })
115
+ }
116
+ setPageData() {
117
+ this.pageInfo.setTitle("Tasks");
118
+ this.pageInfo.setDescription("");
119
+ this.pageInfo.setBreadcrumbs([
120
+ { title: "Tango Trax", path: "/manage/trax/dashboard", isActive: false, isSeparator: false },
121
+ { title: "Tango Trax", path: "/manage/trax/dashboard", isActive: false, isSeparator: true }
122
+ ]);
123
+ }
124
+ getTask(id) {
125
+ this.traxService.getTaskconfig(id, this.headerData?.client).pipe(takeUntil(this.destroy$)).subscribe({
126
+ next: (res) => {
127
+ if (res?.code === 200) {
128
+ this.taskDetails = res.data.checkListDetails;
129
+ if (this.taskDetails?.scheduleDate) {
130
+ this.scheduleDate = { startDate: this.dayjs(this.taskDetails.scheduleDate).format('DD-MM-YYYY'), endDate: this.dayjs(this.taskDetails.scheduleDate).format('DD-MM-YYYY') };
131
+ }
132
+ if (!this.taskDetails?.removedUsers?.length) {
133
+ this.selectAllInput.setValue(true, { emitEvent: false });
134
+ }
135
+ if (this.taskDetails?.scheduleEndTime) {
136
+ this.scheduleEndTime.setValue(dayjs(this.taskDetails?.scheduleEndTime, 'hh:mm A').format('HH:mm'));
137
+ }
138
+ if (this.taskDetails?.approver?.length) {
139
+ this.approver.setValue(this.taskDetails?.approver);
140
+ }
141
+ if (this.taskDetails?.priorityType) {
142
+ this.priorityType.setValue(this.taskDetails?.priorityType);
143
+ }
144
+ if (this.taskDetails?.allowedStoreLocation === true || this.taskDetails?.allowedStoreLocation === false) {
145
+ this.allowedStoreLocation.setValue(this.taskDetails?.allowedStoreLocation);
146
+ }
147
+ if (this.taskDetails?.restrictAttendance === true || this.taskDetails?.restrictAttendance === false) {
148
+ this.restrictAttendance.setValue(this.taskDetails?.restrictAttendance);
149
+ }
150
+ }
151
+ }
152
+ });
153
+ }
154
+ getCurrentTime() {
155
+ const now = new Date();
156
+ const hours = now.getHours().toString().padStart(2, '0');
157
+ const minutes = now.getMinutes().toString().padStart(2, '0');
158
+ return `${hours}:${minutes}`;
159
+ }
160
+ get dueDateFormatted() {
161
+ return this.dayjs(this.scheduleDate.startDate, 'DD-MM-YYYY')?.format('DD MMM YYYY');
162
+ }
163
+ get dueTimeFormatted() {
164
+ return dayjs(this.scheduleEndTime.value, 'HH:mm').format('h:mm A');
165
+ }
166
+ getClientUser() {
167
+ this.traxService.getClientUser(this.headerData.client).pipe(takeUntil(this.destroy$)).subscribe((res) => {
168
+ if (res && res.code == 200) {
169
+ this.approversList = res.data.map((item) => { return { name: item.userName, value: item.email }; });
170
+ }
171
+ else {
172
+ this.approversList = [];
173
+ }
174
+ });
175
+ }
176
+ onSubmit(action) {
177
+ const payload = {
178
+ scheduleDate: this.dayjs(this.scheduleDate.startDate, 'DD-MM-YYYY').format('YYYY-MM-DD'),
179
+ scheduleEndTime: this.dayjs(this.scheduleEndTime.value, 'HH:mm').format('hh:mm A'),
180
+ approver: this.approver.value ?? [],
181
+ priorityType: this.priorityType.value,
182
+ allowedStoreLocation: this.allowedStoreLocation.value,
183
+ restrictAttendance: this.restrictAttendance.value,
184
+ client_id: this.headerData?.client,
185
+ submitType: action,
186
+ _id: this.taskDetails?._id,
187
+ removedUsers: [...this.removedUsers],
188
+ ...(action === 'publish') ? { publish: true } : { publish: false }
189
+ };
190
+ this.traxService.configTask(payload).pipe(takeUntil(this.destroy$)).subscribe({
191
+ next: (res) => {
192
+ if (res.code === 200) {
193
+ if (action) {
194
+ this.toastService.getSuccessToast(res?.data?.message || 'Configuration updated successfully');
195
+ this.router.navigate(['manage/trax/task']);
196
+ }
197
+ }
198
+ },
199
+ error: (err) => {
200
+ this.toastService.getErrorToast(err?.error?.error?.message || 'Something went wrong');
201
+ }
202
+ });
203
+ }
204
+ onApproveAdded(event) {
205
+ this.approver.setValue(event);
206
+ }
207
+ getAssignTable() {
208
+ this.assignTableApiState.next('loading');
209
+ const query = {
210
+ "clientId": this.headerData?.client,
211
+ "limit": this.pageSize,
212
+ "offset": this.currentPage > 0 ? this.currentPage - 1 : 0,
213
+ "search": this.searchInput.value,
214
+ "taskId": this.currentTaskId
215
+ };
216
+ this.traxService.getTaskUserDetails(query).pipe(takeUntil(this.destroy$)).subscribe({
217
+ next: (res) => {
218
+ this.assignTableApiState.next('loaded');
219
+ if (res?.data?.count) {
220
+ this.totalItems = res.data.count;
221
+ }
222
+ else {
223
+ this.totalItems = 0;
224
+ }
225
+ if (res?.data?.users) {
226
+ this.assignTableData = res.data.users;
227
+ }
228
+ else {
229
+ this.assignTableData = [];
230
+ }
231
+ },
232
+ error: (e) => {
233
+ this.assignTableApiState.next('loaded');
234
+ }
235
+ });
236
+ }
237
+ onPageSizeChange(pageSize) {
238
+ this.currentPage = 1;
239
+ this.itemsPerPage = pageSize;
240
+ this.pageSize = pageSize;
241
+ this.getAssignTable();
242
+ }
243
+ onPageChange(pageOffset) {
244
+ this.currentPage = pageOffset;
245
+ this.getAssignTable();
246
+ }
247
+ onUserAssignChange(event, id) {
248
+ if (!event) {
249
+ this.removedUsers.add(id);
250
+ }
251
+ else {
252
+ this.removedUsers.delete(id);
253
+ }
254
+ }
255
+ downloadTemplate() {
256
+ let params = {
257
+ limit: 10000,
258
+ offset: 0,
259
+ taskId: this.currentTaskId,
260
+ search: this.searchInput.value,
261
+ clientId: this.headerData.client,
262
+ };
263
+ this.traxService.getTaskUserDetails(params).pipe(takeUntil(this.destroy$)).subscribe((res) => {
264
+ let excelData = [];
265
+ if (res == null) {
266
+ excelData.push({
267
+ storeName: '',
268
+ userEmail: '',
269
+ userName: '',
270
+ userPhone: '',
271
+ city: ''
272
+ });
273
+ }
274
+ if (res && res.code == 200) {
275
+ res.data.users.forEach((item) => {
276
+ excelData.push({
277
+ storeName: item.storeName,
278
+ userEmail: item.userEmail,
279
+ userName: item.userName,
280
+ userPhone: item.userPhone,
281
+ city: item.city
282
+ });
283
+ });
284
+ }
285
+ this.traxService.exportAsExcelFile(excelData, 'CheckList_userList_');
286
+ });
287
+ }
288
+ onFileUpload(event) {
289
+ //Empty sheet validation ---done
290
+ //empty field validation for storeName, userName, userEmail, city. I
291
+ // validate user email
292
+ // Email unique for store
293
+ // Email unique for username
294
+ const target = (event.target);
295
+ // let isExcelFile = !!target.files[0].name.match(/(.xls|.xlsx)/);
296
+ const reader = new FileReader();
297
+ reader.readAsBinaryString(target.files[0]);
298
+ reader.onload = (e) => {
299
+ const bstr = e.target.result;
300
+ const wb = XLSX.read(bstr, { type: 'binary' });
301
+ const wsname = wb.SheetNames[0];
302
+ const ws = wb.Sheets[wsname];
303
+ const jsonWithPosition = [];
304
+ const range = XLSX.utils.decode_range(ws['!ref'] || '');
305
+ const headers = [];
306
+ for (let C = range.s.c; C <= range.e.c; ++C) {
307
+ const cellAddress = XLSX.utils.encode_cell({ r: range.s.r, c: C });
308
+ const header = ws[cellAddress]?.v || `Column${C + 1}`;
309
+ headers.push(header);
310
+ }
311
+ for (let R = range.s.r + 1; R <= range.e.r; ++R) {
312
+ const rowData = { row: R + 1 };
313
+ for (let C = range.s.c; C <= range.e.c; ++C) {
314
+ const cellAddress = XLSX.utils.encode_cell({ r: R, c: C });
315
+ const cell = ws[cellAddress];
316
+ const header = headers[C - range.s.c];
317
+ rowData[header] = cell?.v || "";
318
+ rowData[`column_${header}`] = XLSX.utils.encode_col(C);
319
+ }
320
+ jsonWithPosition.push(rowData);
321
+ }
322
+ const filteredData = jsonWithPosition.filter(row => {
323
+ const keys = Object.keys(row).filter(key => !key.startsWith('column_') && key !== 'row');
324
+ return keys.some(key => row[key] !== undefined && row[key] !== null && row[key] !== "");
325
+ });
326
+ const emptyKeys = [];
327
+ const invalidEmails = [];
328
+ filteredData.forEach((row) => {
329
+ const keys = Object.keys(row).filter(key => !key.startsWith('column_') && key !== 'row');
330
+ keys.forEach((key) => {
331
+ if (key === 'userEmail') {
332
+ const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
333
+ const isValidMail = emailRegex.test(row['userEmail']);
334
+ if (!isValidMail)
335
+ invalidEmails.push(row[`column_${key}`] + row.row);
336
+ }
337
+ if (!row[key] && (key === 'storeName' || key === 'userEmail' || key === 'userName'))
338
+ emptyKeys.push(row[`column_${key}`] + row.row);
339
+ });
340
+ });
341
+ if (emptyKeys.length) {
342
+ return this.toastService.getErrorToast(`Please fill the cells ${emptyKeys.join(', ')}`);
343
+ }
344
+ if (invalidEmails.length) {
345
+ return this.toastService.getErrorToast(`Please enter valid emails at ${invalidEmails.join(', ')}`);
346
+ }
347
+ const groupedByEmail = filteredData.reduce((acc, item) => {
348
+ if (!acc[item.userEmail]) {
349
+ acc[item.userEmail] = [];
350
+ }
351
+ acc[item.userEmail].push(item.storeName);
352
+ return acc;
353
+ }, {});
354
+ const uniqueResult = Object.entries(groupedByEmail).map(([email, storeNames]) => {
355
+ const uniqueStoreNames = new Set(storeNames);
356
+ return {
357
+ userEmail: email,
358
+ isStoreNameUnique: uniqueStoreNames.size === storeNames.length,
359
+ storeNames: Array.from(uniqueStoreNames),
360
+ };
361
+ });
362
+ const notUnique = uniqueResult.filter((item) => !item.isStoreNameUnique).map((item) => item.userEmail);
363
+ if (notUnique.length) {
364
+ return this.toastService.getErrorToast(`${notUnique.join(', ')} should be unique for store name`);
365
+ }
366
+ this.fileInput.nativeElement.value = '';
367
+ event.target.value = '';
368
+ const assignList = filteredData.map((data) => {
369
+ return {
370
+ storeName: data.storeName,
371
+ userEmail: data.userEmail,
372
+ userName: data.userName,
373
+ userPhone: data?.userPhone,
374
+ city: data?.city
375
+ };
376
+ });
377
+ const payload = {
378
+ id: this.currentTaskId,
379
+ uploadUser: true,
380
+ clientId: this.headerData.client,
381
+ assignedUsers: assignList
382
+ };
383
+ this.uploadAssigneesList(payload).subscribe({
384
+ next: (res) => {
385
+ if (res?.data?.validate) {
386
+ this.getAssignTable();
387
+ }
388
+ if (res?.data?.user?.length) {
389
+ const popupcontent = {
390
+ displayprop: false,
391
+ imagesrc: '<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#FEF0C7"/><path d="M27.9998 24.0012V28.0012M27.9998 32.0012H28.0098M26.2898 18.8612L17.8198 33.0012C17.6451 33.3036 17.5527 33.6465 17.5518 33.9957C17.5508 34.3449 17.6413 34.6883 17.8142 34.9917C17.9871 35.2951 18.2365 35.5479 18.5375 35.725C18.8385 35.9021 19.1806 35.9973 19.5298 36.0012H36.4698C36.819 35.9973 37.1611 35.9021 37.4621 35.725C37.7631 35.5479 38.0124 35.2951 38.1854 34.9917C38.3583 34.6883 38.4488 34.3449 38.4478 33.9957C38.4468 33.6465 38.3544 33.3036 38.1798 33.0012L29.7098 18.8612C29.5315 18.5673 29.2805 18.3243 28.981 18.1557C28.6814 17.987 28.3435 17.8984 27.9998 17.8984C27.656 17.8984 27.3181 17.987 27.0186 18.1557C26.7191 18.3243 26.468 18.5673 26.2898 18.8612Z" stroke="#DC6803" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#FFFAEB" stroke-width="8"/></svg>',
392
+ title: `Invite new users added in CSV`,
393
+ content: `This CSV contains new users. Invite users by sending mail to them`,
394
+ buttontype: 'Invite',
395
+ user: res.data.user
396
+ };
397
+ const dialogRef = this.dialog.open(TraxpopupComponent, {
398
+ centered: true, size: 'md'
399
+ });
400
+ dialogRef.componentInstance.data = popupcontent;
401
+ dialogRef.result.then((result) => {
402
+ if (result.message === 'confirm') {
403
+ const payload = {
404
+ id: this.currentTaskId,
405
+ uploadUser: true,
406
+ clientId: this.headerData.client,
407
+ assignedUsers: assignList
408
+ };
409
+ this.uploadAssigneesList(payload, { addUser: true }).pipe(takeUntil(this.destroy$)).subscribe({
410
+ next: (res) => {
411
+ this.getAssignTable();
412
+ }
413
+ });
414
+ }
415
+ });
416
+ }
417
+ },
418
+ error: (err) => {
419
+ this.toastService.getErrorToast(err?.error?.error?.message || 'Something went wrong');
420
+ }
421
+ });
422
+ };
423
+ }
424
+ addStoreComponent() {
425
+ const dialogRef = this.dialog.open(TraxStoreComponent, {
426
+ centered: true, size: 'md'
427
+ });
428
+ dialogRef.componentInstance.data = {
429
+ checklistId: this.currentTaskId,
430
+ obj: {
431
+ checkListId: this.currentTaskId,
432
+ clientId: this.headerData.client
433
+ }
434
+ };
435
+ dialogRef.result.then((res) => {
436
+ if (res) {
437
+ const payload = {
438
+ id: this.currentTaskId,
439
+ uploadUser: true,
440
+ clientId: this.headerData.client,
441
+ assignedUsers: res
442
+ };
443
+ this.uploadAssigneesList(payload, { delete: false }).pipe(takeUntil(this.destroy$)).subscribe({
444
+ next: (res1) => {
445
+ if (res1.code === 200) {
446
+ if (res1?.data?.user?.length) {
447
+ const popupcontent = {
448
+ displayprop: false,
449
+ imagesrc: '<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#FEF0C7"/><path d="M27.9998 24.0012V28.0012M27.9998 32.0012H28.0098M26.2898 18.8612L17.8198 33.0012C17.6451 33.3036 17.5527 33.6465 17.5518 33.9957C17.5508 34.3449 17.6413 34.6883 17.8142 34.9917C17.9871 35.2951 18.2365 35.5479 18.5375 35.725C18.8385 35.9021 19.1806 35.9973 19.5298 36.0012H36.4698C36.819 35.9973 37.1611 35.9021 37.4621 35.725C37.7631 35.5479 38.0124 35.2951 38.1854 34.9917C38.3583 34.6883 38.4488 34.3449 38.4478 33.9957C38.4468 33.6465 38.3544 33.3036 38.1798 33.0012L29.7098 18.8612C29.5315 18.5673 29.2805 18.3243 28.981 18.1557C28.6814 17.987 28.3435 17.8984 27.9998 17.8984C27.656 17.8984 27.3181 17.987 27.0186 18.1557C26.7191 18.3243 26.468 18.5673 26.2898 18.8612Z" stroke="#DC6803" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#FFFAEB" stroke-width="8"/></svg>',
450
+ title: `Invite new users added in CSV`,
451
+ content: `This CSV contains new users. Invite users by sending mail to them`,
452
+ buttontype: 'Invite',
453
+ user: res1.data.user
454
+ };
455
+ const dialogRef = this.dialog.open(TraxpopupComponent, {
456
+ centered: true, size: 'md'
457
+ });
458
+ dialogRef.componentInstance.data = popupcontent;
459
+ dialogRef.result.then((result) => {
460
+ if (result.message === 'confirm') {
461
+ const payload = {
462
+ id: this.currentTaskId,
463
+ uploadUser: true,
464
+ clientId: this.headerData.client,
465
+ assignedUsers: res
466
+ };
467
+ this.uploadAssigneesList(payload, { delete: false, addUser: true }).pipe(takeUntil(this.destroy$)).subscribe({
468
+ next: (res) => {
469
+ this.getAssignTable();
470
+ }
471
+ });
472
+ }
473
+ });
474
+ }
475
+ else {
476
+ this.getAssignTable();
477
+ }
478
+ }
479
+ },
480
+ error: (err) => {
481
+ this.toastService.getErrorToast(err.error.error);
482
+ }
483
+ });
484
+ }
485
+ });
486
+ }
487
+ uploadAssigneesList(payload, extraArgs) {
488
+ const reqPayload = {
489
+ ...payload,
490
+ ...extraArgs
491
+ };
492
+ return this.traxService.uploadTaskAssignees(reqPayload);
493
+ }
494
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskConfigureComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.GlobalStateService }, { token: i2.PageInfoService }, { token: i3.TraxService }, { token: i4.NgbModal }, { token: i5.ToastService }, { token: i1.Router }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
495
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TaskConfigureComponent, selector: "lib-task-configure", viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["file"], descendants: true }], ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"c-card d-flex justify-content-between\">\r\n <div>\r\n <div class=\"checklist-name mb-5\">{{taskDetails?.checkListName}}</div>\r\n <div class=\"checklist-desc\">{{taskDetails?.checkListDescription}}</div>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <button class=\"btn btn-primary me-5\" (click)=\"onSubmit('publish')\" >Publish</button>\r\n <button class=\"btn btn-outline\" (click)=\"onSubmit('save')\" >Save as Draft</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-3\">\r\n <div style=\"height: 80vh; overflow-y: auto;\" class=\"c-card\">\r\n <h2 class=\"mb-5\">Schedule</h2>\r\n <div class=\"d-flex mb-5\" >\r\n <svg class=\"me-4\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M16 2V6M8 2V6M3 10H21M5 4H19C20.1046 4 21 4.89543 21 6V20C21 21.1046 20.1046 22 19 22H5C3.89543 22 3 21.1046 3 20V6C3 4.89543 3.89543 4 5 4Z\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"schedule-text\" >\r\n {{dueDateFormatted}}\r\n </span>\r\n </div>\r\n <div class=\"d-flex mb-5\">\r\n <svg class=\"me-4\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M12 6V12L16 14M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"schedule-text\" >{{dueTimeFormatted}}</span>\r\n </div>\r\n <h2 class=\"mb-5\">Assign</h2>\r\n <div class=\"d-flex mb-5\" >\r\n <svg class=\"me-4\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M16 4H18C18.5304 4 19.0391 4.21071 19.4142 4.58579C19.7893 4.96086 20 5.46957 20 6V20C20 20.5304 19.7893 21.0391 19.4142 21.4142C19.0391 21.7893 18.5304 22 18 22H6C5.46957 22 4.96086 21.7893 4.58579 21.4142C4.21071 21.0391 4 20.5304 4 20V6C4 5.46957 4.21071 4.96086 4.58579 4.58579C4.96086 4.21071 5.46957 4 6 4H8M9 2H15C15.5523 2 16 2.44772 16 3V5C16 5.55228 15.5523 6 15 6H9C8.44772 6 8 5.55228 8 5V3C8 2.44772 8.44772 2 9 2Z\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"schedule-text\" >\r\n Users\r\n </span>\r\n </div>\r\n <div class=\"d-flex mb-5\">\r\n <svg class=\"me-4\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M3.08995 6.88381L3.02401 6.98681C2.30358 8.25569 3.06101 9.87957 4.46464 10.0664C4.58627 10.0813 4.70112 10.0894 4.8145 10.0894C5.55255 10.0894 6.20523 9.77241 6.65953 9.27929L7.21286 8.67867L7.76432 9.28101C8.21367 9.77184 8.8652 10.0894 9.60776 10.0894C10.3471 10.0894 11.0022 9.77149 11.4512 9.28101L12.0044 8.67677L12.5576 9.28101C13.0066 9.77149 13.6617 10.0894 14.401 10.0894C15.1404 10.0894 15.7954 9.77149 16.2445 9.28101L16.7977 8.67678L17.3508 9.28101C17.7999 9.77149 18.4549 10.0894 19.1943 10.0894C19.3041 10.0894 19.4223 10.0812 19.5433 10.0665C20.9772 9.8718 21.7355 8.164 20.9155 6.88431C20.9154 6.88425 20.9154 6.8842 20.9154 6.88414L18.8056 3.59441L18.8056 3.59441L18.8046 3.59294C18.7582 3.52014 18.6649 3.46436 18.5584 3.46436H5.44307C5.3365 3.46436 5.24326 3.52014 5.19681 3.59295L5.19619 3.59391L3.08995 6.88381ZM4.81818 12.7501C4.71644 12.7501 4.616 12.747 4.5169 12.7411V16.6429V18.9644C4.5169 19.8212 5.22663 20.5358 6.11942 20.5358H17.882C18.7748 20.5358 19.4845 19.8212 19.4845 18.9644V16.6429V12.7416C19.3874 12.7471 19.2893 12.7501 19.1906 12.7501C19.0022 12.7501 18.8157 12.74 18.632 12.7203V16.6429V17.3929H17.882H6.11942H5.36942V16.6429V12.7211C5.18866 12.7402 5.00472 12.7501 4.81818 12.7501Z\" stroke=\"#101828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n <span class=\"schedule-text\" >{{taskDetails?.storeCount}} Stores</span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-9\">\r\n <div style=\"height: 80vh; overflow-y: auto;\" class=\"c-card\">\r\n <div class=\"row\">\r\n <div class=\"col-6 mb-5\">\r\n <div class=\"date-picker\">\r\n <label for=\"datepick\" class=\"form-label\">Due date</label>\r\n <div style=\"position: relative;\" >\r\n <svg style=\"position: absolute; top: 12px; left:12px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n </svg>\r\n <input id=\"datepick\" class=\"fx-date-range form-control ps-14\" type=\"text\"\r\n ngxDaterangepickerMd [singleDatePicker]=\"true\" [minDate]=\"minDate\" [drops]=\"'down'\"\r\n [opens]=\"'right'\" [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\"\r\n [showCancel]=\"true\" autocomplete=\"off\" [(ngModel)]=\"scheduleDate\" [autoApply]=\"false\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-6 mb-5\">\r\n <label for=\"timePick\" class=\"form-label\">Due time</label>\r\n <input [formControl]=\"scheduleEndTime\" type=\"time\" class=\"form-control\" id=\"timePick\" placeholder=\"name@example.com\">\r\n </div>\r\n <div class=\"col-6 mb-5\">\r\n <label class=\"form-label\">Approver</label>\r\n <lib-chip-dropdown [data]=\"approversList\" [selectedData]=\"approver.value\" (selectedList)=\"onApproveAdded($event)\" ></lib-chip-dropdown>\r\n\r\n </div>\r\n <div class=\"col-6 mb-5\">\r\n <label for=\"priority\" class=\"form-label\">Priority</label>\r\n <select [formControl]=\"priorityType\" id=\"priority\" class=\"form-select mb-5\">\r\n <option value=\"high\">High</option>\r\n <option value=\"medium\">Medium</option>\r\n <option value=\"medium\">Low</option>\r\n </select>\r\n </div>\r\n\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"toggle-card\" [ngClass]=\"allowedStoreLocation.value ? 'selected' : ''\">\r\n <div class=\"form-check form-switch me-4\">\r\n <input [formControl]=\"allowedStoreLocation\" class=\"form-check-input\" type=\"checkbox\" role=\"switch\" >\r\n </div>\r\n <div>\r\n <div class=\"header\">Geo fencing</div>\r\n <div class=\"desc\">By enabling, the checklist can be filled by the user only when inside the\r\n store.</div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"toggle-card \" [ngClass]=\"restrictAttendance.value ? 'selected' : ''\">\r\n <div class=\"form-check form-switch me-4\">\r\n <input [formControl]=\"restrictAttendance\" class=\"form-check-input\" type=\"checkbox\" role=\"switch\" >\r\n </div>\r\n <div>\r\n <div class=\"header\">Restrict attendance</div>\r\n <div class=\"desc\">By enabling, user can't be able to clockout without completing the task.\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"col-12\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-5\" >\r\n <h2>Assign</h2>\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1 me-2\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-6\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input [formControl]=\"searchInput\" type=\"text\" data-kt-subscription-table-filter=\"search\"\r\n class=\"form-control form-control-solid w-400px ps-14 mx-1 me-4\"\r\n placeholder=\"Search by Store name\">\r\n </div>\r\n <div (click)=\"addStoreComponent()\" class=\"btn btn-primary\">\r\n <svg class=\"mr-3\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16602V15.8327M4.16675 9.99935H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n </svg>\r\n <span>Add Stote</span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <ng-container *ngIf=\"(assignTableApiState | async) === 'loaded' && assignTableData?.length\" >\r\n <div>\r\n <div class=\"table-responsive\">\r\n <table class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th class=\"text-align-left\">\r\n <span><input [formControl]=\"selectAllInput\" class=\"form-check-input h-14px w-14px c-checkbox\" type=\"checkbox\"\r\n name=\"flag\"> <span\r\n class=\"form-check-label mx-4\">StoreName</span></span>\r\n </th>\r\n <th class=\"text-align-left\">\r\n <span>Assigned To</span>\r\n </th>\r\n <th class=\"text-align-left\">\r\n <span>Email </span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let user of assignTableData\" >\r\n <td>\r\n <input [(ngModel)]=\"user.checkFlag\" (ngModelChange)=\"onUserAssignChange($event, user.id)\" class=\"form-check-input h-14px w-14px userFlag c-checkbox\" type=\"checkbox\"\r\n name=\"flag\" /><span class=\"form-check-label mx-4\">{{user?.storeName}}</span>\r\n </td>\r\n <td>{{user?.userName}}</td>\r\n <td>{{user?.userEmail}}</td>\r\n </tbody>\r\n </table>\r\n </div>\r\n <lib-pagination [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\"\r\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"(assignTableApiState | async) === 'loading' || (assignTableApiState | async) === 'initial'\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container >\r\n <div class=\"d-flex flex-column justify-content-center align-items-center\">\r\n <ng-container *ngIf=\"(assignTableApiState | async) === 'loaded' && !assignTableData?.length\" >\r\n <span class=\"mx-14\"><svg class=\"mx-20 mt-12\" width=\"56\" height=\"56\" viewBox=\"0 0 56 56\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#D1FADF\" />\r\n <path\r\n d=\"M25.09 25C25.3251 24.3317 25.7892 23.7681 26.4 23.4091C27.0108 23.0502 27.7289 22.9189 28.4272 23.0387C29.1255 23.1585 29.7588 23.5215 30.2151 24.0635C30.6713 24.6055 30.9211 25.2915 30.92 26C30.92 28 27.92 29 27.92 29M28 33H28.01M38 28C38 33.5228 33.5228 38 28 38C22.4772 38 18 33.5228 18 28C18 22.4772 22.4772 18 28 18C33.5228 18 38 22.4772 38 28Z\"\r\n stroke=\"#039855\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#ECFDF3\" stroke-width=\"8\" />\r\n </svg>\r\n </span>\r\n <h5 class=\"section-leftheading mt-6 mx-10\">Upload to assign users</h5>\r\n <ul class=\"sub-txt mb-5\">\r\n <li>Click \u201CDownload Template\u201D</li>\r\n <li> Add your data to the template file</li>\r\n <li> Upload it below to assign users</li>\r\n </ul> \r\n </ng-container>\r\n \r\n \r\n <div class=\"d-flex\">\r\n <button #upload (click)=\"file.click()\" class=\"btn btn-primary reupload\">\r\n <span class=\"svg-icon svg-icon-primary \">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"mb-2 mx-1\" width=\"21\"\r\n height=\"20\" viewBox=\"0 0 19 19\" fill=\"none\">\r\n <path\r\n d=\"M18 12.5V15.8333C18 16.2754 17.8244 16.6993 17.5118 17.0118C17.1993 17.3244 16.7754 17.5 16.3333 17.5H4.66667C4.22464 17.5 3.80072 17.3244 3.48816 17.0118C3.17559 16.6993 3 16.2754 3 15.8333V12.5M14.6667 6.66667L10.5 2.5M10.5 2.5L6.33333 6.66667M10.5 2.5V12.5\"\r\n stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span class=\"reuploadtext\">\r\n Upload Template\r\n </span>\r\n </button>\r\n <input style=\"visibility: hidden;\" type=\"file\" #file\r\n id=\"kt_account_team_size_select_1\" (change)=\"onFileUpload($event)\" />\r\n \r\n <span (click)=\"downloadTemplate()\" class=\"cstm-blu-btn\">\r\n <svg _ngcontent-ng-c842475337=\"\" xmlns=\"http://www.w3.org/2000/svg\" width=\"21\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" class=\"mb-1\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M5.83333 8.33333L10 12.5M10 12.5L14.1667 8.33333M10 12.5V2.5\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n Download Template\r\n </span>\r\n \r\n </div>\r\n \r\n </div> \r\n </ng-container> \r\n \r\n \r\n \r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".c-card{padding:24px;background:#fff;border-radius:16px}.plain-input{border:none;outline:none;background:transparent;padding:0;margin:0;width:100%;overflow:hidden;color:var(--black, #101828);text-overflow:ellipsis;font-family:Inter;font-size:18px;font-style:normal;font-weight:500;line-height:28px}.plain-input:focus{border-radius:0!important;border:white!important;outline:none!important;box-shadow:none!important}.checklist-name{font-size:20px;font-weight:600;line-height:28px;text-align:left;color:#667085!important}.checklist-desc{font-size:14px;font-weight:400;line-height:18px;text-align:left}:host::ng-deep .date-picker .md-drppicker .btn{line-height:10px!important}:host::ng-deep .date-picker .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .date-picker .md-drppicker.drops-down-right.ltr.show-ranges.shown{top:65px!important}:host::ng-deep .date-picker .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;right:-475px!important;left:unset!important;height:400px!important}:host::ng-deep .date-picker .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .date-picker .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .date-picker .md-drppicker td.active,:host::ng-deep .date-picker .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .date-picker .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .date-picker .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .date-picker .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep .date-picker table th,:host::ng-deep .date-picker table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .date-picker .md-drppicker td.available.prev,:host::ng-deep .date-picker .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .date-picker .md-drppicker td.available.next,:host::ng-deep .date-picker .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .date-picker table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .date-picker .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .date-picker .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .date-picker .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{border:1px solid black;height:100%;width:100%;display:flex;flex-wrap:wrap;border:1px solid #D0D5DD}.outer-container .input-container input{all:unset;flex:1;min-width:50px}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .chip .initials{color:var(--Primary-600, #00A3FF);font-size:12px;font-weight:500;line-height:18px}.outer-container .input-container .chip:nth-child(1){margin-left:0}.toggle-card{padding:16px;display:flex;align-items:center;border-radius:8px;border:1px solid #EAECF0;background:#fff}.toggle-card .header{color:#344054;font-size:16px;font-weight:500;line-height:24px}.toggle-card .desc{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.toggle-card.selected{border:1px solid #6BCAFF}.toggle-card.selected .header{color:#008edf}.toggle-card.selected .desc{color:#00a3ff}.sub-txt{color:#667085;font-size:14px;font-weight:400;line-height:20px;gap:8px}.cstm-blu-btn{padding:8px 14px;border-radius:8px;border:1px solid #EAF8FF;background:#eaf8ff;box-shadow:0 1px 2px #1018280d;color:#009bf3;font-size:14px;font-weight:600;line-height:20px;cursor:pointer;display:flex;align-items:center}.schedule-text{color:#344054;font-size:16px;font-weight:500;line-height:24px}input[type=checkbox].c-checkbox{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #D0D5DD)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}input[type=checkbox].c-checkbox:checked{outline:1px solid var(--primary-600, #00A3FF)!important;background-color:var(--primary-50, #EAF8FF)}input[type=checkbox].c-checkbox:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "directive", type: i7.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i7.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i8.DaterangepickerDirective, selector: "input[ngxDaterangepickerMd]", inputs: ["minDate", "maxDate", "autoApply", "alwaysShowCalendars", "showCustomRangeLabel", "linkedCalendars", "dateLimit", "singleDatePicker", "showWeekNumbers", "showISOWeekNumbers", "showDropdowns", "isInvalidDate", "isCustomDate", "isTooltipDate", "showClearButton", "customRangeDirection", "ranges", "opens", "drops", "firstMonthDayClass", "lastMonthDayClass", "emptyWeekRowClass", "emptyWeekColumnClass", "firstDayOfNextMonthClass", "lastDayOfPreviousMonthClass", "keepCalendarOpeningWithRange", "showRangeLabelOnInput", "showCancel", "lockStartDate", "timePicker", "timePicker24Hour", "timePickerIncrement", "timePickerSeconds", "closeOnAutoApply", "endKeyHolder", "startKey", "locale", "endKey"], outputs: ["change", "rangeClicked", "datesUpdated", "startDateChanged", "endDateChanged", "clearClicked"] }, { kind: "component", type: i9.ChipDropdownComponent, selector: "lib-chip-dropdown", inputs: ["data", "selectedData"], outputs: ["selectedList"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }] });
496
+ }
497
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskConfigureComponent, decorators: [{
498
+ type: Component,
499
+ args: [{ selector: 'lib-task-configure', template: "<div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"c-card d-flex justify-content-between\">\r\n <div>\r\n <div class=\"checklist-name mb-5\">{{taskDetails?.checkListName}}</div>\r\n <div class=\"checklist-desc\">{{taskDetails?.checkListDescription}}</div>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <button class=\"btn btn-primary me-5\" (click)=\"onSubmit('publish')\" >Publish</button>\r\n <button class=\"btn btn-outline\" (click)=\"onSubmit('save')\" >Save as Draft</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-3\">\r\n <div style=\"height: 80vh; overflow-y: auto;\" class=\"c-card\">\r\n <h2 class=\"mb-5\">Schedule</h2>\r\n <div class=\"d-flex mb-5\" >\r\n <svg class=\"me-4\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M16 2V6M8 2V6M3 10H21M5 4H19C20.1046 4 21 4.89543 21 6V20C21 21.1046 20.1046 22 19 22H5C3.89543 22 3 21.1046 3 20V6C3 4.89543 3.89543 4 5 4Z\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"schedule-text\" >\r\n {{dueDateFormatted}}\r\n </span>\r\n </div>\r\n <div class=\"d-flex mb-5\">\r\n <svg class=\"me-4\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M12 6V12L16 14M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"schedule-text\" >{{dueTimeFormatted}}</span>\r\n </div>\r\n <h2 class=\"mb-5\">Assign</h2>\r\n <div class=\"d-flex mb-5\" >\r\n <svg class=\"me-4\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M16 4H18C18.5304 4 19.0391 4.21071 19.4142 4.58579C19.7893 4.96086 20 5.46957 20 6V20C20 20.5304 19.7893 21.0391 19.4142 21.4142C19.0391 21.7893 18.5304 22 18 22H6C5.46957 22 4.96086 21.7893 4.58579 21.4142C4.21071 21.0391 4 20.5304 4 20V6C4 5.46957 4.21071 4.96086 4.58579 4.58579C4.96086 4.21071 5.46957 4 6 4H8M9 2H15C15.5523 2 16 2.44772 16 3V5C16 5.55228 15.5523 6 15 6H9C8.44772 6 8 5.55228 8 5V3C8 2.44772 8.44772 2 9 2Z\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"schedule-text\" >\r\n Users\r\n </span>\r\n </div>\r\n <div class=\"d-flex mb-5\">\r\n <svg class=\"me-4\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M3.08995 6.88381L3.02401 6.98681C2.30358 8.25569 3.06101 9.87957 4.46464 10.0664C4.58627 10.0813 4.70112 10.0894 4.8145 10.0894C5.55255 10.0894 6.20523 9.77241 6.65953 9.27929L7.21286 8.67867L7.76432 9.28101C8.21367 9.77184 8.8652 10.0894 9.60776 10.0894C10.3471 10.0894 11.0022 9.77149 11.4512 9.28101L12.0044 8.67677L12.5576 9.28101C13.0066 9.77149 13.6617 10.0894 14.401 10.0894C15.1404 10.0894 15.7954 9.77149 16.2445 9.28101L16.7977 8.67678L17.3508 9.28101C17.7999 9.77149 18.4549 10.0894 19.1943 10.0894C19.3041 10.0894 19.4223 10.0812 19.5433 10.0665C20.9772 9.8718 21.7355 8.164 20.9155 6.88431C20.9154 6.88425 20.9154 6.8842 20.9154 6.88414L18.8056 3.59441L18.8056 3.59441L18.8046 3.59294C18.7582 3.52014 18.6649 3.46436 18.5584 3.46436H5.44307C5.3365 3.46436 5.24326 3.52014 5.19681 3.59295L5.19619 3.59391L3.08995 6.88381ZM4.81818 12.7501C4.71644 12.7501 4.616 12.747 4.5169 12.7411V16.6429V18.9644C4.5169 19.8212 5.22663 20.5358 6.11942 20.5358H17.882C18.7748 20.5358 19.4845 19.8212 19.4845 18.9644V16.6429V12.7416C19.3874 12.7471 19.2893 12.7501 19.1906 12.7501C19.0022 12.7501 18.8157 12.74 18.632 12.7203V16.6429V17.3929H17.882H6.11942H5.36942V16.6429V12.7211C5.18866 12.7402 5.00472 12.7501 4.81818 12.7501Z\" stroke=\"#101828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n <span class=\"schedule-text\" >{{taskDetails?.storeCount}} Stores</span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-9\">\r\n <div style=\"height: 80vh; overflow-y: auto;\" class=\"c-card\">\r\n <div class=\"row\">\r\n <div class=\"col-6 mb-5\">\r\n <div class=\"date-picker\">\r\n <label for=\"datepick\" class=\"form-label\">Due date</label>\r\n <div style=\"position: relative;\" >\r\n <svg style=\"position: absolute; top: 12px; left:12px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n </svg>\r\n <input id=\"datepick\" class=\"fx-date-range form-control ps-14\" type=\"text\"\r\n ngxDaterangepickerMd [singleDatePicker]=\"true\" [minDate]=\"minDate\" [drops]=\"'down'\"\r\n [opens]=\"'right'\" [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\"\r\n [showCancel]=\"true\" autocomplete=\"off\" [(ngModel)]=\"scheduleDate\" [autoApply]=\"false\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-6 mb-5\">\r\n <label for=\"timePick\" class=\"form-label\">Due time</label>\r\n <input [formControl]=\"scheduleEndTime\" type=\"time\" class=\"form-control\" id=\"timePick\" placeholder=\"name@example.com\">\r\n </div>\r\n <div class=\"col-6 mb-5\">\r\n <label class=\"form-label\">Approver</label>\r\n <lib-chip-dropdown [data]=\"approversList\" [selectedData]=\"approver.value\" (selectedList)=\"onApproveAdded($event)\" ></lib-chip-dropdown>\r\n\r\n </div>\r\n <div class=\"col-6 mb-5\">\r\n <label for=\"priority\" class=\"form-label\">Priority</label>\r\n <select [formControl]=\"priorityType\" id=\"priority\" class=\"form-select mb-5\">\r\n <option value=\"high\">High</option>\r\n <option value=\"medium\">Medium</option>\r\n <option value=\"medium\">Low</option>\r\n </select>\r\n </div>\r\n\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"toggle-card\" [ngClass]=\"allowedStoreLocation.value ? 'selected' : ''\">\r\n <div class=\"form-check form-switch me-4\">\r\n <input [formControl]=\"allowedStoreLocation\" class=\"form-check-input\" type=\"checkbox\" role=\"switch\" >\r\n </div>\r\n <div>\r\n <div class=\"header\">Geo fencing</div>\r\n <div class=\"desc\">By enabling, the checklist can be filled by the user only when inside the\r\n store.</div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"toggle-card \" [ngClass]=\"restrictAttendance.value ? 'selected' : ''\">\r\n <div class=\"form-check form-switch me-4\">\r\n <input [formControl]=\"restrictAttendance\" class=\"form-check-input\" type=\"checkbox\" role=\"switch\" >\r\n </div>\r\n <div>\r\n <div class=\"header\">Restrict attendance</div>\r\n <div class=\"desc\">By enabling, user can't be able to clockout without completing the task.\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"col-12\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-5\" >\r\n <h2>Assign</h2>\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1 me-2\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-6\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input [formControl]=\"searchInput\" type=\"text\" data-kt-subscription-table-filter=\"search\"\r\n class=\"form-control form-control-solid w-400px ps-14 mx-1 me-4\"\r\n placeholder=\"Search by Store name\">\r\n </div>\r\n <div (click)=\"addStoreComponent()\" class=\"btn btn-primary\">\r\n <svg class=\"mr-3\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16602V15.8327M4.16675 9.99935H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n </svg>\r\n <span>Add Stote</span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <ng-container *ngIf=\"(assignTableApiState | async) === 'loaded' && assignTableData?.length\" >\r\n <div>\r\n <div class=\"table-responsive\">\r\n <table class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th class=\"text-align-left\">\r\n <span><input [formControl]=\"selectAllInput\" class=\"form-check-input h-14px w-14px c-checkbox\" type=\"checkbox\"\r\n name=\"flag\"> <span\r\n class=\"form-check-label mx-4\">StoreName</span></span>\r\n </th>\r\n <th class=\"text-align-left\">\r\n <span>Assigned To</span>\r\n </th>\r\n <th class=\"text-align-left\">\r\n <span>Email </span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let user of assignTableData\" >\r\n <td>\r\n <input [(ngModel)]=\"user.checkFlag\" (ngModelChange)=\"onUserAssignChange($event, user.id)\" class=\"form-check-input h-14px w-14px userFlag c-checkbox\" type=\"checkbox\"\r\n name=\"flag\" /><span class=\"form-check-label mx-4\">{{user?.storeName}}</span>\r\n </td>\r\n <td>{{user?.userName}}</td>\r\n <td>{{user?.userEmail}}</td>\r\n </tbody>\r\n </table>\r\n </div>\r\n <lib-pagination [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\"\r\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"(assignTableApiState | async) === 'loading' || (assignTableApiState | async) === 'initial'\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container >\r\n <div class=\"d-flex flex-column justify-content-center align-items-center\">\r\n <ng-container *ngIf=\"(assignTableApiState | async) === 'loaded' && !assignTableData?.length\" >\r\n <span class=\"mx-14\"><svg class=\"mx-20 mt-12\" width=\"56\" height=\"56\" viewBox=\"0 0 56 56\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#D1FADF\" />\r\n <path\r\n d=\"M25.09 25C25.3251 24.3317 25.7892 23.7681 26.4 23.4091C27.0108 23.0502 27.7289 22.9189 28.4272 23.0387C29.1255 23.1585 29.7588 23.5215 30.2151 24.0635C30.6713 24.6055 30.9211 25.2915 30.92 26C30.92 28 27.92 29 27.92 29M28 33H28.01M38 28C38 33.5228 33.5228 38 28 38C22.4772 38 18 33.5228 18 28C18 22.4772 22.4772 18 28 18C33.5228 18 38 22.4772 38 28Z\"\r\n stroke=\"#039855\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#ECFDF3\" stroke-width=\"8\" />\r\n </svg>\r\n </span>\r\n <h5 class=\"section-leftheading mt-6 mx-10\">Upload to assign users</h5>\r\n <ul class=\"sub-txt mb-5\">\r\n <li>Click \u201CDownload Template\u201D</li>\r\n <li> Add your data to the template file</li>\r\n <li> Upload it below to assign users</li>\r\n </ul> \r\n </ng-container>\r\n \r\n \r\n <div class=\"d-flex\">\r\n <button #upload (click)=\"file.click()\" class=\"btn btn-primary reupload\">\r\n <span class=\"svg-icon svg-icon-primary \">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"mb-2 mx-1\" width=\"21\"\r\n height=\"20\" viewBox=\"0 0 19 19\" fill=\"none\">\r\n <path\r\n d=\"M18 12.5V15.8333C18 16.2754 17.8244 16.6993 17.5118 17.0118C17.1993 17.3244 16.7754 17.5 16.3333 17.5H4.66667C4.22464 17.5 3.80072 17.3244 3.48816 17.0118C3.17559 16.6993 3 16.2754 3 15.8333V12.5M14.6667 6.66667L10.5 2.5M10.5 2.5L6.33333 6.66667M10.5 2.5V12.5\"\r\n stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span class=\"reuploadtext\">\r\n Upload Template\r\n </span>\r\n </button>\r\n <input style=\"visibility: hidden;\" type=\"file\" #file\r\n id=\"kt_account_team_size_select_1\" (change)=\"onFileUpload($event)\" />\r\n \r\n <span (click)=\"downloadTemplate()\" class=\"cstm-blu-btn\">\r\n <svg _ngcontent-ng-c842475337=\"\" xmlns=\"http://www.w3.org/2000/svg\" width=\"21\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" class=\"mb-1\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M5.83333 8.33333L10 12.5M10 12.5L14.1667 8.33333M10 12.5V2.5\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n Download Template\r\n </span>\r\n \r\n </div>\r\n \r\n </div> \r\n </ng-container> \r\n \r\n \r\n \r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".c-card{padding:24px;background:#fff;border-radius:16px}.plain-input{border:none;outline:none;background:transparent;padding:0;margin:0;width:100%;overflow:hidden;color:var(--black, #101828);text-overflow:ellipsis;font-family:Inter;font-size:18px;font-style:normal;font-weight:500;line-height:28px}.plain-input:focus{border-radius:0!important;border:white!important;outline:none!important;box-shadow:none!important}.checklist-name{font-size:20px;font-weight:600;line-height:28px;text-align:left;color:#667085!important}.checklist-desc{font-size:14px;font-weight:400;line-height:18px;text-align:left}:host::ng-deep .date-picker .md-drppicker .btn{line-height:10px!important}:host::ng-deep .date-picker .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .date-picker .md-drppicker.drops-down-right.ltr.show-ranges.shown{top:65px!important}:host::ng-deep .date-picker .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;right:-475px!important;left:unset!important;height:400px!important}:host::ng-deep .date-picker .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .date-picker .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .date-picker .md-drppicker td.active,:host::ng-deep .date-picker .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .date-picker .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .date-picker .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .date-picker .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep .date-picker table th,:host::ng-deep .date-picker table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .date-picker .md-drppicker td.available.prev,:host::ng-deep .date-picker .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .date-picker .md-drppicker td.available.next,:host::ng-deep .date-picker .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .date-picker table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .date-picker .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .date-picker .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .date-picker .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{border:1px solid black;height:100%;width:100%;display:flex;flex-wrap:wrap;border:1px solid #D0D5DD}.outer-container .input-container input{all:unset;flex:1;min-width:50px}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .chip .initials{color:var(--Primary-600, #00A3FF);font-size:12px;font-weight:500;line-height:18px}.outer-container .input-container .chip:nth-child(1){margin-left:0}.toggle-card{padding:16px;display:flex;align-items:center;border-radius:8px;border:1px solid #EAECF0;background:#fff}.toggle-card .header{color:#344054;font-size:16px;font-weight:500;line-height:24px}.toggle-card .desc{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.toggle-card.selected{border:1px solid #6BCAFF}.toggle-card.selected .header{color:#008edf}.toggle-card.selected .desc{color:#00a3ff}.sub-txt{color:#667085;font-size:14px;font-weight:400;line-height:20px;gap:8px}.cstm-blu-btn{padding:8px 14px;border-radius:8px;border:1px solid #EAF8FF;background:#eaf8ff;box-shadow:0 1px 2px #1018280d;color:#009bf3;font-size:14px;font-weight:600;line-height:20px;cursor:pointer;display:flex;align-items:center}.schedule-text{color:#344054;font-size:16px;font-weight:500;line-height:24px}input[type=checkbox].c-checkbox{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #D0D5DD)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}input[type=checkbox].c-checkbox:checked{outline:1px solid var(--primary-600, #00A3FF)!important;background-color:var(--primary-50, #EAF8FF)}input[type=checkbox].c-checkbox:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}\n"] }]
500
+ }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.GlobalStateService }, { type: i2.PageInfoService }, { type: i3.TraxService }, { type: i4.NgbModal }, { type: i5.ToastService }, { type: i1.Router }, { type: i0.ChangeDetectorRef }], propDecorators: { fileInput: [{
501
+ type: ViewChild,
502
+ args: ['file']
503
+ }] } });
504
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1jb25maWd1cmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS10cmF4L3NyYy9saWIvY29tcG9uZW50cy90YXNrLWNvbmZpZ3VyZS90YXNrLWNvbmZpZ3VyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL3Rhc2stY29uZmlndXJlL3Rhc2stY29uZmlndXJlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFDdkcsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9GLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQztBQUtuQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFeEUsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7Ozs7O0FBSHRFLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFNbEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBTWhDLE1BQU0sT0FBTyxzQkFBc0I7SUEwQmI7SUFBK0I7SUFBZ0M7SUFDeEU7SUFBa0M7SUFBMEI7SUFBb0M7SUFBd0I7SUExQm5JLFFB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QUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dEQUNaLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTs0Q0FDdkIsQ0FBQzt5Q0FDRixDQUFDLENBQUE7cUNBQ0g7Z0NBRUgsQ0FBQyxDQUFDLENBQUM7NkJBQ0o7aUNBQUk7Z0NBQ0gsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBOzZCQUN0Qjt5QkFFRjtvQkFDSCxDQUFDO29CQUNELEtBQUssRUFBQyxDQUFDLEdBQUcsRUFBQyxFQUFFO3dCQUNYLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7b0JBQ2xELENBQUM7aUJBQ0YsQ0FBQyxDQUFBO2FBRUg7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxPQUFZLEVBQUUsU0FBZTtRQUMvQyxNQUFNLFVBQVUsR0FBRztZQUNqQixHQUFHLE9BQU87WUFDVixHQUFHLFNBQVM7U0FDYixDQUFBO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3pELENBQUM7d0dBL2ZVLHNCQUFzQjs0RkFBdEIsc0JBQXNCLDZKQ3pCbkMsNnRvQkE0UU07OzRGRG5QTyxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0Usb0JBQW9CO21SQTRCWCxTQUFTO3NCQUEzQixTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBjdXN0b21QYXJzZUZvcm1hdCBmcm9tICdkYXlqcy9wbHVnaW4vY3VzdG9tUGFyc2VGb3JtYXQnO1xyXG5pbXBvcnQgeyBUaW1lUGVyaW9kIH0gZnJvbSAnbmd4LWRhdGVyYW5nZXBpY2tlci1tYXRlcmlhbC9kYXRlcmFuZ2VwaWNrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xyXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuaW1wb3J0IHsgSGVhZGVyRmlsdGVyLCBJVGFzaywgVXNlckFzc2lnbkRldGFpbHMgfSBmcm9tICcuL3Rhc2stY29uZmlndXJlLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFRyYXhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJheC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBUcmF4U3RvcmVDb21wb25lbnQgfSBmcm9tICcuLi90cmF4LXN0b3JlL3RyYXgtc3RvcmUuY29tcG9uZW50JztcclxuZGF5anMuZXh0ZW5kKHV0Yyk7XHJcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBUcmF4cG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi90cmF4cG9wdXAvdHJheHBvcHVwLmNvbXBvbmVudCc7XHJcblxyXG5cclxuZGF5anMuZXh0ZW5kKGN1c3RvbVBhcnNlRm9ybWF0KTtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItdGFzay1jb25maWd1cmUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YXNrLWNvbmZpZ3VyZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3Rhc2stY29uZmlndXJlLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFza0NvbmZpZ3VyZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgZGF5anMgPSBkYXlqc1xyXG4gIHNjaGVkdWxlRGF0ZTogYW55O1xyXG4gIG1pbkRhdGU6IGFueSA9IHRoaXMuZGF5anMoKS5mb3JtYXQoKTtcclxuICBzY2hlZHVsZUVuZFRpbWUgPSBuZXcgRm9ybUNvbnRyb2wodGhpcy5nZXRDdXJyZW50VGltZSgpKVxyXG4gIGN1cnJlbnRUYXNrSWQ6IHN0cmluZ1xyXG4gIGhlYWRlckRhdGE6IEhlYWRlckZpbHRlclxyXG4gIHRhc2tEZXRhaWxzOiBJVGFzayB8IHVuZGVmaW5lZFxyXG4gIGFwcHJvdmVyID0gbmV3IEZvcm1Db250cm9sKClcclxuICBwcmlvcml0eVR5cGUgPSBuZXcgRm9ybUNvbnRyb2woJ2hpZ2gnKVxyXG4gIGFsbG93ZWRTdG9yZUxvY2F0aW9uID0gbmV3IEZvcm1Db250cm9sKGZhbHNlKVxyXG4gIHJlc3RyaWN0QXR0ZW5kYW5jZSA9IG5ldyBGb3JtQ29udHJvbChmYWxzZSlcclxuICBhcHByb3ZlcnNMaXN0OiB7IG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9W11cclxuICBhc3NpZ25UYWJsZUFwaVN0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDwnaW5pdGlhbCcgfCAnbG9hZGluZycgfCAnbG9hZGVkJz4oJ2luaXRpYWwnKVxyXG4gIGFzc2lnblRhYmxlRGF0YTogVXNlckFzc2lnbkRldGFpbHNbXSB8IG51bGwgfCB1bmRlZmluZWRcclxuICBpdGVtc1BlclBhZ2UgPSAxMFxyXG4gIGN1cnJlbnRQYWdlID0gMFxyXG4gIHRvdGFsSXRlbXMgPSAwXHJcbiAgcGFnaW5hdGlvblNpemVzID0gWzEwLCAyMCwgMzBdXHJcbiAgcGFnZVNpemUgPSAxMFxyXG4gIHNlYXJjaElucHV0ID0gbmV3IEZvcm1Db250cm9sKCcnKVxyXG4gIHNlbGVjdEFsbElucHV0ID0gbmV3IEZvcm1Db250cm9sKGZhbHNlKVxyXG4gIHJlbW92ZWRVc2VycyA9IG5ldyBTZXQoKVxyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGUnKSBmaWxlSW5wdXQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLCBwcml2YXRlIHBhZ2VJbmZvOiBQYWdlSW5mb1NlcnZpY2UsXHJcbiAgICAgcHJpdmF0ZSB0cmF4U2VydmljZTogVHJheFNlcnZpY2UsIHByaXZhdGUgZGlhbG9nOiBOZ2JNb2RhbCwgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBjZDpDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gICAgICB0aGlzLmhlYWRlckRhdGEgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdoZWFkZXItZmlsdGVycycpIGFzIHN0cmluZykgXHJcblxyXG4gICAgdGhpcy5zZWFyY2hJbnB1dC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnBpcGUoZGVib3VuY2VUaW1lKDEwMDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5zdWJzY3JpYmUoKHZhbCkgPT4ge1xyXG4gICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDBcclxuICAgICAgdGhpcy5nZXRBc3NpZ25UYWJsZSgpXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuc2VsZWN0QWxsSW5wdXQudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhbCkgPT4ge1xyXG4gICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHZhbCkge1xyXG4gICAgICAgIHRoaXMuYXNzaWduVGFibGVEYXRhPy5mb3JFYWNoKHZhbCA9PiB2YWwuY2hlY2tGbGFnID0gdHJ1ZSlcclxuICAgICAgICB0aGlzLnJlbW92ZWRVc2Vycy5jbGVhcigpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hc3NpZ25UYWJsZURhdGE/LmZvckVhY2godmFsID0+IHsgdmFsLmNoZWNrRmxhZyA9IGZhbHNlLCB0aGlzLm9uVXNlckFzc2lnbkNoYW5nZSh2YWwuY2hlY2tGbGFnLCB2YWwuaWQpIH0pXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2NoZWR1bGVEYXRlID0ge3N0YXJ0RGF0ZTp0aGlzLmRheWpzKCkuZm9ybWF0KCdERC1NTS1ZWVlZJyksZW5kRGF0ZTp0aGlzLmRheWpzKCkuZm9ybWF0KCdERC1NTS1ZWVlZJyl9O1xyXG4gICAgdGhpcy5zZXRQYWdlRGF0YSgpXHJcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XHJcbiAgICAgICAgaWYgKHBhcmFtcz8udGFza0lkKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRUYXNrSWQgPSBwYXJhbXMudGFza0lkXHJcbiAgICAgICAgICB0aGlzLmdldENsaWVudFVzZXIoKVxyXG4gICAgICAgICAgdGhpcy5nZXRUYXNrKHRoaXMuY3VycmVudFRhc2tJZClcclxuICAgICAgICAgIHRoaXMuZ2V0QXNzaWduVGFibGUoKVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgLy8gICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAvLyAgIC5waXBlKGRlYm91bmNlVGltZSgxMDAwKSlcclxuICAgIC8vICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgaWYgKGRhdGE/LmNsaWVudCkge1xyXG4gICAgLy8gICAgICAgdGhpcy5oZWFkZXJEYXRhID0gZGF0YTtcclxuICAgIC8vICAgICAgIGlmICh0aGlzLmN1cnJlbnRUYXNrSWQpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5nZXRDbGllbnRVc2VyKClcclxuICAgIC8vICAgICAgICAgdGhpcy5nZXRUYXNrKHRoaXMuY3VycmVudFRhc2tJZClcclxuICAgIC8vICAgICAgICAgdGhpcy5nZXRBc3NpZ25UYWJsZSgpXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KVxyXG4gIH1cclxuXHJcbiAgc2V0UGFnZURhdGEoKSB7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldFRpdGxlKFwiVGFza3NcIik7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldERlc2NyaXB0aW9uKFwiXCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRCcmVhZGNydW1icyhbXHJcbiAgICAgIHsgdGl0bGU6IFwiVGFuZ28gVHJheFwiLCBwYXRoOiBcIi9tYW5hZ2UvdHJheC9kYXNoYm9hcmRcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogXCJUYW5nbyBUcmF4XCIsIHBhdGg6IFwiL21hbmFnZS90cmF4L2Rhc2hib2FyZFwiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiB0cnVlIH1cclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGFzayhpZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFRhc2tjb25maWcoaWQsIHRoaXMuaGVhZGVyRGF0YT8uY2xpZW50ISkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXM/LmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy50YXNrRGV0YWlscyA9IHJlcy5kYXRhLmNoZWNrTGlzdERldGFpbHNcclxuICAgICAgICAgIGlmICh0aGlzLnRhc2tEZXRhaWxzPy5zY2hlZHVsZURhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zY2hlZHVsZURhdGUgPSB7c3RhcnREYXRlOnRoaXMuZGF5anModGhpcy50YXNrRGV0YWlscy5zY2hlZHVsZURhdGUpLmZvcm1hdCgnREQtTU0tWVlZWScpLGVuZERhdGU6dGhpcy5kYXlqcyh0aGlzLnRhc2tEZXRhaWxzLnNjaGVkdWxlRGF0ZSkuZm9ybWF0KCdERC1NTS1ZWVlZJyl9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCF0aGlzLnRhc2tEZXRhaWxzPy5yZW1vdmVkVXNlcnM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdEFsbElucHV0LnNldFZhbHVlKHRydWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMudGFza0RldGFpbHM/LnNjaGVkdWxlRW5kVGltZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNjaGVkdWxlRW5kVGltZS5zZXRWYWx1ZShkYXlqcyh0aGlzLnRhc2tEZXRhaWxzPy5zY2hlZHVsZUVuZFRpbWUsICdoaDptbSAgQScpLmZvcm1hdCgnSEg6bW0nKSlcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy50YXNrRGV0YWlscz8uYXBwcm92ZXI/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmFwcHJvdmVyLnNldFZhbHVlKHRoaXMudGFza0RldGFpbHM/LmFwcHJvdmVyKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnRhc2tEZXRhaWxzPy5wcmlvcml0eVR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmlvcml0eVR5cGUuc2V0VmFsdWUodGhpcy50YXNrRGV0YWlscz8ucHJpb3JpdHlUeXBlKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnRhc2tEZXRhaWxzPy5hbGxvd2VkU3RvcmVMb2NhdGlvbiA9PT0gdHJ1ZSB8fCB0aGlzLnRhc2tEZXRhaWxzPy5hbGxvd2VkU3RvcmVMb2NhdGlvbiA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5hbGxvd2VkU3RvcmVMb2NhdGlvbi5zZXRWYWx1ZSh0aGlzLnRhc2tEZXRhaWxzPy5hbGxvd2VkU3RvcmVMb2NhdGlvbilcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy50YXNrRGV0YWlscz8ucmVzdHJpY3RBdHRlbmRhbmNlID09PSB0cnVlIHx8IHRoaXMudGFza0RldGFpbHM/LnJlc3RyaWN0QXR0ZW5kYW5jZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN0cmljdEF0dGVuZGFuY2Uuc2V0VmFsdWUodGhpcy50YXNrRGV0YWlscz8ucmVzdHJpY3RBdHRlbmRhbmNlKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50VGltZSgpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IGhvdXJzID0gbm93LmdldEhvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgY29uc3QgbWludXRlcyA9IG5vdy5nZXRNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgcmV0dXJuIGAke2hvdXJzfToke21pbnV0ZXN9YDtcclxuICB9XHJcblxyXG4gIGdldCBkdWVEYXRlRm9ybWF0dGVkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXlqcyh0aGlzLnNjaGVkdWxlRGF0ZS5zdGFydERhdGUsJ0RELU1NLVlZWVknKT8uZm9ybWF0KCdERCBNTU0gWVlZWScpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGR1ZVRpbWVGb3JtYXR0ZWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBkYXlqcyh0aGlzLnNjaGVkdWxlRW5kVGltZS52YWx1ZSwgJ0hIOm1tJykuZm9ybWF0KCdoOm1tIEEnKTtcclxuICB9XHJcblxyXG4gIGdldENsaWVudFVzZXIoKSB7XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldENsaWVudFVzZXIodGhpcy5oZWFkZXJEYXRhLmNsaWVudCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICB0aGlzLmFwcHJvdmVyc0xpc3QgPSByZXMuZGF0YS5tYXAoKGl0ZW06IGFueSkgPT4geyByZXR1cm4geyBuYW1lOiBpdGVtLnVzZXJOYW1lLCB2YWx1ZTogaXRlbS5lbWFpbCB9IH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYXBwcm92ZXJzTGlzdCA9IFtdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU3VibWl0KGFjdGlvbjogJ3NhdmUnIHwgJ3B1Ymxpc2gnKSB7ICAgIFxyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBzY2hlZHVsZURhdGU6IHRoaXMuZGF5anModGhpcy5zY2hlZHVsZURhdGUuc3RhcnREYXRlLCdERC1NTS1ZWVlZJykuZm9ybWF0KCdZWVlZLU1NLUREJyksXHJcbiAgICAgIHNjaGVkdWxlRW5kVGltZTogdGhpcy5kYXlqcyh0aGlzLnNjaGVkdWxlRW5kVGltZS52YWx1ZSwgJ0hIOm1tJykuZm9ybWF0KCdoaDptbSAgQScpLFxyXG4gICAgICBhcHByb3ZlcjogdGhpcy5hcHByb3Zlci52YWx1ZSA/PyBbXSxcclxuICAgICAgcHJpb3JpdHlUeXBlOiB0aGlzLnByaW9yaXR5VHlwZS52YWx1ZSxcclxuICAgICAgYWxsb3dlZFN0b3JlTG9jYXRpb246IHRoaXMuYWxsb3dlZFN0b3JlTG9jYXRpb24udmFsdWUsXHJcbiAgICAgIHJlc3RyaWN0QXR0ZW5kYW5jZTogdGhpcy5yZXN0cmljdEF0dGVuZGFuY2UudmFsdWUsXHJcbiAgICAgIGNsaWVudF9pZDogdGhpcy5oZWFkZXJEYXRhPy5jbGllbnQsXHJcbiAgICAgIHN1Ym1pdFR5cGU6IGFjdGlvbixcclxuICAgICAgX2lkOiB0aGlzLnRhc2tEZXRhaWxzPy5faWQsXHJcbiAgICAgIHJlbW92ZWRVc2VyczogWy4uLnRoaXMucmVtb3ZlZFVzZXJzXSxcclxuICAgICAgLi4uKGFjdGlvbiA9PT0gJ3B1Ymxpc2gnKSA/IHsgcHVibGlzaDogdHJ1ZSB9IDogeyBwdWJsaXNoOiBmYWxzZSB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmNvbmZpZ1Rhc2socGF5bG9hZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBpZiAoYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdChyZXM/LmRhdGE/Lm1lc3NhZ2UgfHwgJ0NvbmZpZ3VyYXRpb24gdXBkYXRlZCBzdWNjZXNzZnVsbHknKVxyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ21hbmFnZS90cmF4L3Rhc2snXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/LmVycm9yPy5tZXNzYWdlIHx8ICdTb21ldGhpbmcgd2VudCB3cm9uZycpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvbkFwcHJvdmVBZGRlZChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmFwcHJvdmVyLnNldFZhbHVlKGV2ZW50KVxyXG4gIH1cclxuXHJcbiAgZ2V0QXNzaWduVGFibGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFzc2lnblRhYmxlQXBpU3RhdGUubmV4dCgnbG9hZGluZycpXHJcbiAgICBjb25zdCBxdWVyeTogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckRhdGE/LmNsaWVudCxcclxuICAgICAgXCJsaW1pdFwiOiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgICBcIm9mZnNldFwiOiB0aGlzLmN1cnJlbnRQYWdlID4gMCA/IHRoaXMuY3VycmVudFBhZ2UgLSAxIDogMCxcclxuICAgICAgXCJzZWFyY2hcIjogdGhpcy5zZWFyY2hJbnB1dC52YWx1ZSxcclxuICAgICAgXCJ0YXNrSWRcIjogdGhpcy5jdXJyZW50VGFza0lkXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0VGFza1VzZXJEZXRhaWxzKHF1ZXJ5KS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hc3NpZ25UYWJsZUFwaVN0YXRlLm5leHQoJ2xvYWRlZCcpXHJcbiAgICAgICAgaWYgKHJlcz8uZGF0YT8uY291bnQpIHtcclxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IHJlcy5kYXRhLmNvdW50XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IDBcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcz8uZGF0YT8udXNlcnMpIHtcclxuICAgICAgICAgIHRoaXMuYXNzaWduVGFibGVEYXRhID0gcmVzLmRhdGEudXNlcnNcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hc3NpZ25UYWJsZURhdGEgPSBbXVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hc3NpZ25UYWJsZUFwaVN0YXRlLm5leHQoJ2xvYWRlZCcpXHJcblxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb25QYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZTogYW55KSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gcGFnZVNpemU7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gcGFnZVNpemU7XHJcbiAgICB0aGlzLmdldEFzc2lnblRhYmxlKClcclxuICB9XHJcblxyXG4gIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OiBhbnkpIHtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlT2Zmc2V0XHJcbiAgICB0aGlzLmdldEFzc2lnblRhYmxlKClcclxuICB9XHJcblxyXG4gIG9uVXNlckFzc2lnbkNoYW5nZShldmVudDogYm9vbGVhbiwgaWQ6IHN0cmluZykge1xyXG4gICAgaWYgKCFldmVudCkge1xyXG4gICAgICB0aGlzLnJlbW92ZWRVc2Vycy5hZGQoaWQpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbW92ZWRVc2Vycy5kZWxldGUoaWQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZFRlbXBsYXRlKCkge1xyXG4gICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgbGltaXQ6IDEwMDAwLFxyXG4gICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgIHRhc2tJZDogdGhpcy5jdXJyZW50VGFza0lkLFxyXG4gICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoSW5wdXQudmFsdWUsXHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmhlYWRlckRhdGEuY2xpZW50LFxyXG4gICAgfVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRUYXNrVXNlckRldGFpbHMocGFyYW1zKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgZXhjZWxEYXRhOiBhbnkgPSBbXTtcclxuICAgICAgaWYgKHJlcyA9PSBudWxsKSB7XHJcbiAgICAgICAgZXhjZWxEYXRhLnB1c2goe1xyXG4gICAgICAgICAgc3RvcmVOYW1lOiAnJyxcclxuICAgICAgICAgIHVzZXJFbWFpbDogJycsXHJcbiAgICAgICAgICB1c2VyTmFtZTogJycsXHJcbiAgICAgICAgICB1c2VyUGhvbmU6ICcnLFxyXG4gICAgICAgICAgY2l0eTogJydcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgcmVzLmRhdGEudXNlcnMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICBleGNlbERhdGEucHVzaCh7XHJcbiAgICAgICAgICAgIHN0b3JlTmFtZTogaXRlbS5zdG9yZU5hbWUsXHJcbiAgICAgICAgICAgIHVzZXJFbWFpbDogaXRlbS51c2VyRW1haWwsXHJcbiAgICAgICAgICAgIHVzZXJOYW1lOiBpdGVtLnVzZXJOYW1lLFxyXG4gICAgICAgICAgICB1c2VyUGhvbmU6IGl0ZW0udXNlclBob25lLFxyXG4gICAgICAgICAgICBjaXR5OiBpdGVtLmNpdHlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRyYXhTZXJ2aWNlLmV4cG9ydEFzRXhjZWxGaWxlKGV4Y2VsRGF0YSwgJ0NoZWNrTGlzdF91c2VyTGlzdF8nKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25GaWxlVXBsb2FkKGV2ZW50OiBhbnkpIHtcclxuICAgIC8vRW1wdHkgc2hlZXQgdmFsaWRhdGlvbiAtLS1kb25lXHJcbiAgICAvL2VtcHR5IGZpZWxkIHZhbGlkYXRpb24gZm9yIHN0b3JlTmFtZSwgdXNlck5hbWUsIHVzZXJFbWFpbCwgY2l0eS4gSSBcclxuICAgIC8vIHZhbGlkYXRlIHVzZXIgZW1haWxcclxuICAgIC8vIEVtYWlsIHVuaXF1ZSBmb3Igc3RvcmVcclxuICAgIC8vIEVtYWlsIHVuaXF1ZSBmb3IgdXNlcm5hbWVcclxuICAgIGNvbnN0IHRhcmdldDogRGF0YVRyYW5zZmVyID0gPERhdGFUcmFuc2Zlcj4oZXZlbnQudGFyZ2V0KTtcclxuICAgIC8vIGxldCBpc0V4Y2VsRmlsZSA9ICEhdGFyZ2V0LmZpbGVzWzBdLm5hbWUubWF0Y2goLygueGxzfC54bHN4KS8pO1xyXG5cclxuICAgIGNvbnN0IHJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHRhcmdldC5maWxlc1swXSk7XHJcbiAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBic3RyOiBzdHJpbmcgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgIGNvbnN0IHdiOiBYTFNYLldvcmtCb29rID0gWExTWC5yZWFkKGJzdHIsIHsgdHlwZTogJ2JpbmFyeScgfSk7XHJcbiAgICAgIGNvbnN0IHdzbmFtZTogc3RyaW5nID0gd2IuU2hlZXROYW1lc1swXTtcclxuICAgICAgY29uc3Qgd3M6IFhMU1guV29ya1NoZWV0ID0gd2IuU2hlZXRzW3dzbmFtZV07XHJcblxyXG4gICAgICBjb25zdCBqc29uV2l0aFBvc2l0aW9uOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgY29uc3QgcmFuZ2UgPSBYTFNYLnV0aWxzLmRlY29kZV9yYW5nZSh3c1snIXJlZiddIHx8ICcnKTtcclxuXHJcbiAgICAgIGNvbnN0IGhlYWRlcnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgIGZvciAobGV0IEMgPSByYW5nZS5zLmM7IEMgPD0gcmFuZ2UuZS5jOyArK0MpIHtcclxuICAgICAgICBjb25zdCBjZWxsQWRkcmVzcyA9IFhMU1gudXRpbHMuZW5jb2RlX2NlbGwoeyByOiByYW5nZS5zLnIsIGM6IEMgfSk7XHJcbiAgICAgICAgY29uc3QgaGVhZGVyID0gd3NbY2VsbEFkZHJlc3NdPy52IHx8IGBDb2x1bW4ke0MgKyAxfWA7XHJcbiAgICAgICAgaGVhZGVycy5wdXNoKGhlYWRlcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAobGV0IFIgPSByYW5nZS5zLnIgKyAxOyBSIDw9IHJhbmdlLmUucjsgKytSKSB7XHJcbiAgICAgICAgY29uc3Qgcm93RGF0YTogYW55ID0geyByb3c6IFIgKyAxIH07XHJcblxyXG4gICAgICAgIGZvciAobGV0IEMgPSByYW5nZS5zLmM7IEMgPD0gcmFuZ2UuZS5jOyArK0MpIHtcclxuICAgICAgICAgIGNvbnN0IGNlbGxBZGRyZXNzID0gWExTWC51dGlscy5lbmNvZGVfY2VsbCh7IHI6IFIsIGM6IEMgfSk7XHJcbiAgICAgICAgICBjb25zdCBjZWxsID0gd3NbY2VsbEFkZHJlc3NdO1xyXG4gICAgICAgICAgY29uc3QgaGVhZGVyID0gaGVhZGVyc1tDIC0gcmFuZ2Uucy5jXTtcclxuXHJcbiAgICAgICAgICByb3dEYXRhW2hlYWRlcl0gPSBjZWxsPy52IHx8IFwiXCI7XHJcbiAgICAgICAgICByb3dEYXRhW2Bjb2x1bW5fJHtoZWFkZXJ9YF0gPSBYTFNYLnV0aWxzLmVuY29kZV9jb2woQyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBqc29uV2l0aFBvc2l0aW9uLnB1c2gocm93RGF0YSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkRGF0YSA9IGpzb25XaXRoUG9zaXRpb24uZmlsdGVyKHJvdyA9PiB7XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJvdykuZmlsdGVyKGtleSA9PiAha2V5LnN0YXJ0c1dpdGgoJ2NvbHVtbl8nKSAmJiBrZXkgIT09ICdyb3cnKTtcclxuICAgICAgICByZXR1cm4ga2V5cy5zb21lKGtleSA9PiByb3dba2V5XSAhPT0gdW5kZWZpbmVkICYmIHJvd1trZXldICE9PSBudWxsICYmIHJvd1trZXldICE9PSBcIlwiKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBlbXB0eUtleXM6IGFueVtdID0gW11cclxuICAgICAgY29uc3QgaW52YWxpZEVtYWlsczogYW55W10gPSBbXVxyXG5cclxuICAgICAgZmlsdGVyZWREYXRhLmZvckVhY2goKHJvdykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpLmZpbHRlcihrZXkgPT4gIWtleS5zdGFydHNXaXRoKCdjb2x1bW5fJykgJiYga2V5ICE9PSAncm93JylcclxuXHJcbiAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgIGlmIChrZXkgPT09ICd1c2VyRW1haWwnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVtYWlsUmVnZXggPSAvXlthLXpBLVowLTkuXyUrLV0rQFthLXpBLVowLTkuLV0rXFwuW2EtekEtWl17Mix9JC87XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmFsaWRNYWlsID0gZW1haWxSZWdleC50ZXN0KHJvd1sndXNlckVtYWlsJ10pO1xyXG4gICAgICAgICAgICBpZiAoIWlzVmFsaWRNYWlsKSBpbnZhbGlkRW1haWxzLnB1c2goIHJvd1tgY29sdW1uXyR7a2V5fWBdICsgcm93LnJvdylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghcm93W2tleV0gJiYgKGtleSA9PT0gJ3N0b3JlTmFtZScgfHwga2V5ID09PSAndXNlckVtYWlsJyB8fCBrZXkgPT09J3VzZXJOYW1lJykgKSBlbXB0eUtleXMucHVzaChyb3dbYGNvbHVtbl8ke2tleX1gXSArIHJvdy5yb3cpXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGlmIChlbXB0eUtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoYFBsZWFzZSBmaWxsIHRoZSBjZWxscyAke2VtcHR5S2V5cy5qb2luKCcsICcpfWApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKGludmFsaWRFbWFpbHMubGVuZ3RoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChgUGxlYXNlIGVudGVyIHZhbGlkIGVtYWlscyBhdCAke2ludmFsaWRFbWFpbHMuam9pbignLCAnKX1gKVxyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgY29uc3QgZ3JvdXBlZEJ5RW1haWwgPSBmaWx0ZXJlZERhdGEucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAoIWFjY1tpdGVtLnVzZXJFbWFpbF0pIHtcclxuICAgICAgICAgIGFjY1tpdGVtLnVzZXJFbWFpbF0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWNjW2l0ZW0udXNlckVtYWlsXS5wdXNoKGl0ZW0uc3RvcmVOYW1lKTtcclxuICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4pO1xyXG4gICAgICBcclxuICAgICAgY29uc3QgdW5pcXVlUmVzdWx0ID0gT2JqZWN0LmVudHJpZXMoZ3JvdXBlZEJ5RW1haWwpLm1hcCgoW2VtYWlsLCBzdG9yZU5hbWVzXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHVuaXF1ZVN0b3JlTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oc3RvcmVOYW1lcyBhcyBzdHJpbmcpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB1c2VyRW1haWw6IGVtYWlsLFxyXG4gICAgICAgICAgaXNTdG9yZU5hbWVVbmlxdWU6IHVuaXF1ZVN0b3JlTmFtZXMuc2l6ZSA9PT0gKHN0b3JlTmFtZXMgYXMgQXJyYXk8c3RyaW5nPikubGVuZ3RoLFxyXG4gICAgICAgICAgc3RvcmVOYW1lczogQXJyYXkuZnJvbSh1bmlxdWVTdG9yZU5hbWVzKSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IG5vdFVuaXF1ZSA9IHVuaXF1ZVJlc3VsdC5maWx0ZXIoKGl0ZW0pPT4gIWl0ZW0uaXNTdG9yZU5hbWVVbmlxdWUpLm1hcCgoaXRlbSk9PiBpdGVtLnVzZXJFbWFpbClcclxuXHJcbiAgICAgIGlmKG5vdFVuaXF1ZS5sZW5ndGgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGAke25vdFVuaXF1ZS5qb2luKCcsICcpfSBzaG91bGQgYmUgdW5pcXVlIGZvciBzdG9yZSBuYW1lYClcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnXHJcbiAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9ICcnXHJcblxyXG4gICAgICBjb25zdCBhc3NpZ25MaXN0ID0gZmlsdGVyZWREYXRhLm1hcCgoZGF0YSk9PntcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgc3RvcmVOYW1lOiBkYXRhLnN0b3JlTmFtZSxcclxuICAgICAgICAgIHVzZXJFbWFpbDogZGF0YS51c2VyRW1haWwsXHJcbiAgICAgICAgICB1c2VyTmFtZTogZGF0YS51c2VyTmFtZSxcclxuICAgICAgICAgIHVzZXJQaG9uZTogZGF0YT8udXNlclBob25lLFxyXG4gICAgICAgICAgY2l0eTogZGF0YT8uY2l0eVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcblxyXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgIGlkOiB0aGlzLmN1cnJlbnRUYXNrSWQsXHJcbiAgICAgICAgdXBsb2FkVXNlcjogdHJ1ZSxcclxuICAgICAgICBjbGllbnRJZDogdGhpcy5oZWFkZXJEYXRhLmNsaWVudCxcclxuICAgICAgICBhc3NpZ25lZFVzZXJzOiBhc3NpZ25MaXN0XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudXBsb2FkQXNzaWduZWVzTGlzdChwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6KHJlczphbnkpPT57XHJcbiAgICAgICAgICBpZihyZXM/LmRhdGE/LnZhbGlkYXRlKXtcclxuICAgICAgICAgICAgdGhpcy5nZXRBc3NpZ25UYWJsZSgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiggcmVzPy5kYXRhPy51c2VyPy5sZW5ndGgpe1xyXG4gICAgICAgICAgICBjb25zdCBwb3B1cGNvbnRlbnQgPSB7XHJcbiAgICAgICAgICAgICAgZGlzcGxheXByb3A6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGltYWdlc3JjOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI1NlwiIGhlaWdodD1cIjU2XCIgdmlld0JveD1cIjAgMCA1NiA1NlwiIGZpbGw9XCJub25lXCI+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBmaWxsPVwiI0ZFRjBDN1wiLz48cGF0aCBkPVwiTTI3Ljk5OTggMjQuMDAxMlYyOC4wMDEyTTI3Ljk5OTggMzIuMDAxMkgyOC4wMDk4TTI2LjI4OTggMTguODYxMkwxNy44MTk4IDMzLjAwMTJDMTcuNjQ1MSAzMy4zMDM2IDE3LjU1MjcgMzMuNjQ2NSAxNy41NTE4IDMzLjk5NTdDMTcuNTUwOCAzNC4zNDQ5IDE3LjY0MTMgMzQuNjg4MyAxNy44MTQyIDM0Ljk5MTdDMTcuOTg3MSAzNS4yOTUxIDE4LjIzNjUgMzUuNTQ3OSAxOC41Mzc1IDM1LjcyNUMxOC44Mzg1IDM1LjkwMjEgMTkuMTgwNiAzNS45OTczIDE5LjUyOTggMzYuMDAxMkgzNi40Njk4QzM2LjgxOSAzNS45OTczIDM3LjE2MTEgMzUuOTAyMSAzNy40NjIxIDM1LjcyNUMzNy43NjMxIDM1LjU0NzkgMzguMDEyNCAzNS4yOTUxIDM4LjE4NTQgMzQuOTkxN0MzOC4zNTgzIDM0LjY4ODMgMzguNDQ4OCAzNC4zNDQ5IDM4LjQ0NzggMzMuOTk1N0MzOC40NDY4IDMzLjY0NjUgMzguMzU0NCAzMy4zMDM2IDM4LjE3OTggMzMuMDAxMkwyOS43MDk4IDE4Ljg2MTJDMjkuNTMxNSAxOC41NjczIDI5LjI4MDUgMTguMzI0MyAyOC45ODEgMTguMTU1N0MyOC42ODE0IDE3Ljk4NyAyOC4zNDM1IDE3Ljg5ODQgMjcuOTk5OCAxNy44OTg0QzI3LjY1NiAxNy44OTg0IDI3LjMxODEgMTcuOTg3IDI3LjAxODYgMTguMTU1N0MyNi43MTkxIDE4LjMyNDMgMjYuNDY4IDE4LjU2NzMgMjYuMjg5OCAxOC44NjEyWlwiIHN0cm9rZT1cIiNEQzY4MDNcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgc3Ryb2tlPVwiI0ZGRkFFQlwiIHN0cm9rZS13aWR0aD1cIjhcIi8+PC9zdmc+JyxcclxuICAgICAgICAgICAgICB0aXRsZTogYEludml0ZSBuZXcgdXNlcnMgYWRkZWQgaW4gQ1NWYCxcclxuICAgICAgICAgICAgICBjb250ZW50OiBgVGhpcyBDU1YgY29udGFpbnMgbmV3IHVzZXJzLiBJbnZpdGUgdXNlcnMgYnkgc2VuZGluZyBtYWlsIHRvIHRoZW1gLFxyXG4gICAgICAgICAgICAgIGJ1dHRvbnR5cGU6ICdJbnZpdGUnLFxyXG4gICAgICAgICAgICAgIHVzZXI6IHJlcy5kYXRhLnVzZXJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFRyYXhwb3B1cENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgIGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuZGF0YSA9IHBvcHVwY29udGVudDtcclxuICAgICAgICAgICAgZGlhbG9nUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzdWx0Lm1lc3NhZ2UgPT09ICdjb25maXJtJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMuY3VycmVudFRhc2tJZCxcclxuICAgICAgICAgICAgICAgICAgdXBsb2FkVXNlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRGF0YS5jbGllbnQsXHJcbiAgICAgICAgICAgICAgICAgIGFzc2lnbmVkVXNlcnM6IGFzc2lnbkxpc3RcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkQXNzaWduZWVzTGlzdChwYXlsb2FkLCB7IGFkZFVzZXI6IHRydWUgfSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFzc2lnblRhYmxlKClcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOihlcnIpPT57XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/LmVycm9yPy5tZXNzYWdlIHx8ICdTb21ldGhpbmcgd2VudCB3cm9uZycpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRTdG9yZUNvbXBvbmVudCgpIHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVHJheFN0b3JlQ29tcG9uZW50LCB7XHJcbiAgICAgIGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnXHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5kYXRhID0ge1xyXG4gICAgICBjaGVja2xpc3RJZDogdGhpcy5jdXJyZW50VGFza0lkLFxyXG4gICAgICBvYmo6IHtcclxuICAgICAgICBjaGVja0xpc3RJZDogdGhpcy5jdXJyZW50VGFza0lkLFxyXG4gICAgICAgIGNsaWVudElkOiB0aGlzLmhlYWRlckRhdGEuY2xpZW50XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBkaWFsb2dSZWYucmVzdWx0LnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICAgIGlkOiB0aGlzLmN1cnJlbnRUYXNrSWQsXHJcbiAgICAgICAgICB1cGxvYWRVc2VyOiB0cnVlLFxyXG4gICAgICAgICAgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRGF0YS5jbGllbnQsXHJcbiAgICAgICAgICBhc3NpZ25lZFVzZXJzOiByZXNcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBsb2FkQXNzaWduZWVzTGlzdChwYXlsb2FkLCB7IGRlbGV0ZTogZmFsc2UgfSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzMTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMxLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMxPy5kYXRhPy51c2VyPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBvcHVwY29udGVudCA9IHtcclxuICAgICAgICAgICAgICAgICAgZGlzcGxheXByb3A6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBpbWFnZXNyYzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNTZcIiBoZWlnaHQ9XCI1NlwiIHZpZXdCb3g9XCIwIDAgNTYgNTZcIiBmaWxsPVwibm9uZVwiPjxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgZmlsbD1cIiNGRUYwQzdcIi8+PHBhdGggZD1cIk0yNy45OTk4IDI0LjAwMTJWMjguMDAxMk0yNy45OTk4IDMyLjAwMTJIMjguMDA5OE0yNi4yODk4IDE4Ljg2MTJMMTcuODE5OCAzMy4wMDEyQzE3LjY0NTEgMzMuMzAzNiAxNy41NTI3IDMzLjY0NjUgMTcuNTUxOCAzMy45OTU3QzE3LjU1MDggMzQuMzQ0OSAxNy42NDEzIDM0LjY4ODMgMTcuODE0MiAzNC45OTE3QzE3Ljk4NzEgMzUuMjk1MSAxOC4yMzY1IDM1LjU0NzkgMTguNTM3NSAzNS43MjVDMTguODM4NSAzNS45MDIxIDE5LjE4MDYgMzUuOTk3MyAxOS41Mjk4IDM2LjAwMTJIMzYuNDY5OEMzNi44MTkgMzUuOTk3MyAzNy4xNjExIDM1LjkwMjEgMzcuNDYyMSAzNS43MjVDMzcuNzYzMSAzNS41NDc5IDM4LjAxMjQgMzUuMjk1MSAzOC4xODU0IDM0Ljk5MTdDMzguMzU4MyAzNC42ODgzIDM4LjQ0ODggMzQuMzQ0OSAzOC40NDc4IDMzLjk5NTdDMzguNDQ2OCAzMy42NDY1IDM4LjM1NDQgMzMuMzAzNiAzOC4xNzk4IDMzLjAwMTJMMjkuNzA5OCAxOC44NjEyQzI5LjUzMTUgMTguNTY3MyAyOS4yODA1IDE4LjMyNDMgMjguOTgxIDE4LjE1NTdDMjguNjgxNCAxNy45ODcgMjguMzQzNSAxNy44OTg0IDI3Ljk5OTggMTcuODk4NEMyNy42NTYgMTcuODk4NCAyNy4zMTgxIDE3Ljk4NyAyNy4wMTg2IDE4LjE1NTdDMjYuNzE5MSAxOC4zMjQzIDI2LjQ2OCAxOC41NjczIDI2LjI4OTggMTguODYxMlpcIiBzdHJva2U9XCIjREM2ODAzXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNGRkZBRUJcIiBzdHJva2Utd2lkdGg9XCI4XCIvPjwvc3ZnPicsXHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiBgSW52aXRlIG5ldyB1c2VycyBhZGRlZCBpbiBDU1ZgLFxyXG4gICAgICAgICAgICAgICAgICBjb250ZW50OiBgVGhpcyBDU1YgY29udGFpbnMgbmV3IHVzZXJzLiBJbnZpdGUgdXNlcnMgYnkgc2VuZGluZyBtYWlsIHRvIHRoZW1gLFxyXG4gICAgICAgICAgICAgICAgICBidXR0b250eXBlOiAnSW52aXRlJyxcclxuICAgICAgICAgICAgICAgICAgdXNlcjogcmVzMS5kYXRhLnVzZXJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVHJheHBvcHVwQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICAgIGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5kYXRhID0gcG9wdXBjb250ZW50O1xyXG4gICAgICAgICAgICAgICAgZGlhbG9nUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tZXNzYWdlID09PSAnY29uZmlybScpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMuY3VycmVudFRhc2tJZCxcclxuICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZFVzZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGllbnRJZDogdGhpcy5oZWFkZXJEYXRhLmNsaWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbmVkVXNlcnM6IHJlc1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZEFzc2lnbmVlc0xpc3QocGF5bG9hZCwgeyBkZWxldGU6IGZhbHNlLCBhZGRVc2VyOiB0cnVlIH0pLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFzc2lnblRhYmxlKClcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFzc2lnblRhYmxlKClcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6KGVycik9PntcclxuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChlcnIuZXJyb3IuZXJyb3IpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB1cGxvYWRBc3NpZ25lZXNMaXN0KHBheWxvYWQ6IGFueSwgZXh0cmFBcmdzPzogYW55KSB7XHJcbiAgICBjb25zdCByZXFQYXlsb2FkID0ge1xyXG4gICAgICAuLi5wYXlsb2FkLFxyXG4gICAgICAuLi5leHRyYUFyZ3NcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnRyYXhTZXJ2aWNlLnVwbG9hZFRhc2tBc3NpZ25lZXMocmVxUGF5bG9hZClcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1iLTVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYy1jYXJkIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrbGlzdC1uYW1lIG1iLTVcIj57e3Rhc2tEZXRhaWxzPy5jaGVja0xpc3ROYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2xpc3QtZGVzY1wiPnt7dGFza0RldGFpbHM/LmNoZWNrTGlzdERlc2NyaXB0aW9ufX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1lLTVcIiAoY2xpY2spPVwib25TdWJtaXQoJ3B1Ymxpc2gnKVwiID5QdWJsaXNoPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cIm9uU3VibWl0KCdzYXZlJylcIiA+U2F2ZSBhcyBEcmFmdDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cImhlaWdodDogODB2aDsgb3ZlcmZsb3cteTogYXV0bztcIiBjbGFzcz1cImMtY2FyZFwiPlxyXG4gICAgICAgICAgICA8aDIgY2xhc3M9XCJtYi01XCI+U2NoZWR1bGU8L2gyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1iLTVcIiA+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibWUtNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE2IDJWNk04IDJWNk0zIDEwSDIxTTUgNEgxOUMyMC4xMDQ2IDQgMjEgNC44OTU0MyAyMSA2VjIwQzIxIDIxLjEwNDYgMjAuMTA0NiAyMiAxOSAyMkg1QzMuODk1NDMgMjIgMyAyMS4xMDQ2IDMgMjBWNkMzIDQuODk1NDMgMy44OTU0MyA0IDUgNFpcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2NoZWR1bGUtdGV4dFwiID5cclxuICAgICAgICAgICAgICAgICAgICB7e2R1ZURhdGVGb3JtYXR0ZWR9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJtZS00XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgNlYxMkwxNiAxNE0yMiAxMkMyMiAxNy41MjI4IDE3LjUyMjggMjIgMTIgMjJDNi40NzcxNSAyMiAyIDE3LjUyMjggMiAxMkMyIDYuNDc3MTUgNi40NzcxNSAyIDEyIDJDMTcuNTIyOCAyIDIyIDYuNDc3MTUgMjIgMTJaXCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNjaGVkdWxlLXRleHRcIiA+e3tkdWVUaW1lRm9ybWF0dGVkfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8aDIgY2xhc3M9XCJtYi01XCI+QXNzaWduPC9oMj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYi01XCIgPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm1lLTRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNiA0SDE4QzE4LjUzMDQgNCAxOS4wMzkxIDQuMjEwNzEgMTkuNDE0MiA0LjU4NTc5QzE5Ljc4OTMgNC45NjA4NiAyMCA1LjQ2OTU3IDIwIDZWMjBDMjAgMjAuNTMwNCAxOS43ODkzIDIxLjAzOTEgMTkuNDE0MiAyMS40MTQyQzE5LjAzOTEgMjEuNzg5MyAxOC41MzA0IDIyIDE4IDIySDZDNS40Njk1NyAyMiA0Ljk2MDg2IDIxLjc4OTMgNC41ODU3OSAyMS40MTQyQzQuMjEwNzEgMjEuMDM5MSA0IDIwLjUzMDQgNCAyMFY2QzQgNS40Njk1NyA0LjIxMDcxIDQuOTYwODYgNC41ODU3OSA0LjU4NTc5QzQuOTYwODYgNC4yMTA3MSA1LjQ2OTU3IDQgNiA0SDhNOSAySDE1QzE1LjU1MjMgMiAxNiAyLjQ0NzcyIDE2IDNWNUMxNiA1LjU1MjI4IDE1LjU1MjMgNiAxNSA2SDlDOC40NDc3MiA2IDggNS41NTIyOCA4IDVWM0M4IDIuNDQ3NzIgOC40NDc3MiAyIDkgMlpcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2NoZWR1bGUtdGV4dFwiID5cclxuICAgICAgICAgICAgICAgICAgICBVc2Vyc1xyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJtZS00XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMy4wODk5NSA2Ljg4MzgxTDMuMDI0MDEgNi45ODY4MUMyLjMwMzU4IDguMjU1NjkgMy4wNjEwMSA5Ljg3OTU3IDQuNDY0NjQgMTAuMDY2NEM0LjU4NjI3IDEwLjA4MTMgNC43MDExMiAxMC4wODk0IDQuODE0NSAxMC4wODk0QzUuNTUyNTUgMTAuMDg5NCA2LjIwNTIzIDkuNzcyNDEgNi42NTk1MyA5LjI3OTI5TDcuMjEyODYgOC42Nzg2N0w3Ljc2NDMyIDkuMjgxMDFDOC4yMTM2NyA5Ljc3MTg0IDguODY1MiAxMC4wODk0IDkuNjA3NzYgMTAuMDg5NEMxMC4zNDcxIDEwLjA4OTQgMTEuMDAyMiA5Ljc3MTQ5IDExLjQ1MTIgOS4yODEwMUwxMi4wMDQ0IDguNjc2NzdMMTIuNTU3NiA5LjI4MTAxQzEzLjAwNjYgOS43NzE0OSAxMy42NjE3IDEwLjA4OTQgMTQuNDAxIDEwLjA4OTRDMTUuMTQwNCAxMC4wODk0IDE1Ljc5NTQgOS43NzE0OSAxNi4yNDQ1IDkuMjgxMDFMMTYuNzk3NyA4LjY3Njc4TDE3LjM1MDggOS4yODEwMUMxNy43OTk5IDkuNzcxNDkgMTguNDU0OSAxMC4wODk0IDE5LjE5NDMgMTAuMDg5NEMxOS4zMDQxIDEwLjA4OTQgMTkuNDIyMyAxMC4wODEyIDE5LjU0MzMgMTAuMDY2NUMyMC45NzcyIDkuODcxOCAyMS43MzU1IDguMTY0IDIwLjkxNTUgNi44ODQzMUMyMC45MTU0IDYuODg0MjUgMjAuOTE1NCA2Ljg4NDIgMjAuOTE1NCA2Ljg4NDE0TDE4LjgwNTYgMy41OTQ0MUwxOC44MDU2IDMuNTk0NDFMMTguODA0NiAzLjU5Mjk0QzE4Ljc1ODIgMy41MjAxNCAxOC42NjQ5IDMuNDY0MzYgMTguNTU4NCAzLjQ2NDM2SDUuNDQzMDdDNS4zMzY1IDMuNDY0MzYgNS4yNDMyNiAzLjUyMDE0IDUuMTk2ODEgMy41OTI5NUw1LjE5NjE5IDMuNTkzOTFMMy4wODk5NSA2Ljg4MzgxWk00LjgxODE4IDEyLjc1MDFDNC43MTY0NCAxMi43NTAxIDQuNjE2IDEyLjc0NyA0LjUxNjkgMTIuNzQxMVYxNi42NDI5VjE4Ljk2NDRDNC41MTY5IDE5LjgyMTIgNS4yMjY2MyAyMC41MzU4IDYuMTE5NDIgMjAuNTM1OEgxNy44ODJDMTguNzc0OCAyMC41MzU4IDE5LjQ4NDUgMTkuODIxMiAxOS40ODQ1IDE4Ljk2NDRWMTYuNjQyOVYxMi43NDE2QzE5LjM4NzQgMTIuNzQ3MSAxOS4yODkzIDEyLjc1MDEgMTkuMTkwNiAxMi43NTAxQzE5LjAwMjIgMTIuNzUwMSAxOC44MTU3IDEyLjc0IDE4LjYzMiAxMi43MjAzVjE2LjY0MjlWMTcuMzkyOUgxNy44ODJINi4xMTk0Mkg1LjM2OTQyVjE2LjY0MjlWMTIuNzIxMUM1LjE4ODY2IDEyLjc0MDIgNS4wMDQ3MiAxMi43NTAxIDQuODE4MTggMTIuNzUwMVpcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPlxyXG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzY2hlZHVsZS10ZXh0XCIgPnt7dGFza0RldGFpbHM/LnN0b3JlQ291bnR9fSBTdG9yZXM8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cImhlaWdodDogODB2aDsgb3ZlcmZsb3cteTogYXV0bztcIiBjbGFzcz1cImMtY2FyZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZGF0ZXBpY2tcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5EdWUgZGF0ZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxMnB4OyBsZWZ0OjEycHg7XCIgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTMuMzMzMyAxLjY2NjYzVjQuOTk5OTZNNi42NjY2NyAxLjY2NjYzVjQuOTk5OTZNMi41IDguMzMzMjlIMTcuNU00LjE2NjY3IDMuMzMzMjlIMTUuODMzM0MxNi43NTM4IDMuMzMzMjkgMTcuNSA0LjA3OTQ4IDE3LjUgNC45OTk5NlYxNi42NjY2QzE3LjUgMTcuNTg3MSAxNi43NTM4IDE4LjMzMzMgMTUuODMzMyAxOC4zMzMzSDQuMTY2NjdDMy4yNDYxOSAxOC4zMzMzIDIuNSAxNy41ODcxIDIuNSAxNi42NjY2VjQuOTk5OTZDMi41IDQuMDc5NDggMy4yNDYxOSAzLjMzMzI5IDQuMTY2NjcgMy4zMzMyOVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZGF0ZXBpY2tcIiBjbGFzcz1cImZ4LWRhdGUtcmFuZ2UgZm9ybS1jb250cm9sIHBzLTE0XCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neERhdGVyYW5nZXBpY2tlck1kIFtzaW5nbGVEYXRlUGlja2VyXT1cInRydWVcIiBbbWluRGF0ZV09XCJtaW5EYXRlXCIgW2Ryb3BzXT1cIidkb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wZW5zXT1cIidyaWdodCdcIiBbYWx3YXlzU2hvd0NhbGVuZGFyc109XCJmYWxzZVwiIFtrZWVwQ2FsZW5kYXJPcGVuaW5nV2l0aFJhbmdlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q2FuY2VsXT1cInRydWVcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbKG5nTW9kZWwpXT1cInNjaGVkdWxlRGF0ZVwiIFthdXRvQXBwbHldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsb2NhbGVdPVwieyBmb3JtYXQ6ICdERC1NTS1ZWVlZJywgZmlyc3REYXk6IDEsIG1vbnRoTmFtZXM6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJkYXRlcmFuZ2VcIiBbcmVhZG9ubHldPVwidHJ1ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRpbWVQaWNrXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RHVlIHRpbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xdPVwic2NoZWR1bGVFbmRUaW1lXCIgdHlwZT1cInRpbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwidGltZVBpY2tcIiBwbGFjZWhvbGRlcj1cIm5hbWVAZXhhbXBsZS5jb21cIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkFwcHJvdmVyPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bGliLWNoaXAtZHJvcGRvd24gW2RhdGFdPVwiYXBwcm92ZXJzTGlzdFwiIFtzZWxlY3RlZERhdGFdPVwiYXBwcm92ZXIudmFsdWVcIiAoc2VsZWN0ZWRMaXN0KT1cIm9uQXBwcm92ZUFkZGVkKCRldmVudClcIiA+PC9saWItY2hpcC1kcm9wZG93bj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInByaW9yaXR5XCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UHJpb3JpdHk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgW2Zvcm1Db250cm9sXT1cInByaW9yaXR5VHlwZVwiIGlkPVwicHJpb3JpdHlcIiBjbGFzcz1cImZvcm0tc2VsZWN0IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImhpZ2hcIj5IaWdoPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJtZWRpdW1cIj5NZWRpdW08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm1lZGl1bVwiPkxvdzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvZ2dsZS1jYXJkXCIgW25nQ2xhc3NdPVwiYWxsb3dlZFN0b3JlTG9jYXRpb24udmFsdWUgPyAnc2VsZWN0ZWQnIDogJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbWUtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtmb3JtQ29udHJvbF09XCJhbGxvd2VkU3RvcmVMb2NhdGlvblwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHJvbGU9XCJzd2l0Y2hcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPkdlbyBmZW5jaW5nPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY1wiPkJ5IGVuYWJsaW5nLCB0aGUgY2hlY2tsaXN0IGNhbiBiZSBmaWxsZWQgYnkgdGhlIHVzZXIgb25seSB3aGVuIGluc2lkZSB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvZ2dsZS1jYXJkIFwiIFtuZ0NsYXNzXT1cInJlc3RyaWN0QXR0ZW5kYW5jZS52YWx1ZSA/ICdzZWxlY3RlZCcgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBtZS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2Zvcm1Db250cm9sXT1cInJlc3RyaWN0QXR0ZW5kYW5jZVwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHJvbGU9XCJzd2l0Y2hcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlJlc3RyaWN0IGF0dGVuZGFuY2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjXCI+QnkgZW5hYmxpbmcsIHVzZXIgY2FuJ3QgYmUgYWJsZSB0byBjbG9ja291dCB3aXRob3V0IGNvbXBsZXRpbmcgdGhlIHRhc2suXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTVcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj5Bc3NpZ248L2gyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgbXktMSBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG1zLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgb3BhY2l0eT1cIjAuNVwiIHg9XCIxNy4wMzY1XCIgeT1cIjE1LjEyMjNcIiB3aWR0aD1cIjguMTU1NDZcIiBoZWlnaHQ9XCIyXCIgcng9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoNDUgMTcuMDM2NSAxNS4xMjIzKVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMSAxOUM2LjU1NTU2IDE5IDMgMTUuNDQ0NCAzIDExQzMgNi41NTU1NiA2LjU1NTU2IDMgMTEgM0MxNS40NDQ0IDMgMTkgNi41NTU1NiAxOSAxMUMxOSAxNS40NDQ0IDE1LjQ0NDQgMTkgMTEgMTlaTTExIDVDNy41MzMzMyA1IDUgNy41MzMzMyA1IDExQzUgMTQuNDY2NyA3LjUzMzMzIDE3IDExIDE3QzE0LjQ2NjcgMTcgMTcgMTQuNDY2NyAxNyAxMUMxNyA3LjUzMzMzIDE0LjQ2NjcgNSAxMSA1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xdPVwic2VhcmNoSW5wdXRcIiB0eXBlPVwidGV4dFwiIGRhdGEta3Qtc3Vic2NyaXB0aW9uLXRhYmxlLWZpbHRlcj1cInNlYXJjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zb2xpZCB3LTQwMHB4IHBzLTE0IG14LTEgbWUtNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGJ5IFN0b3JlIG5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiYWRkU3RvcmVDb21wb25lbnQoKVwiICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJtci0zXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjAwMDEgNC4xNjYwMlYxNS44MzI3TTQuMTY2NzUgOS45OTkzNUgxNS44MzM0XCIgc3Ryb2tlPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QWRkIFN0b3RlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGFzc2lnblRhYmxlQXBpU3RhdGUgfCBhc3luYykgPT09ICdsb2FkZWQnICYmIGFzc2lnblRhYmxlRGF0YT8ubGVuZ3RoXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ3LTEwMCB0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWFsaWduLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGlucHV0IFtmb3JtQ29udHJvbF09XCJzZWxlY3RBbGxJbnB1dFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBoLTE0cHggdy0xNHB4IGMtY2hlY2tib3hcIiB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmbGFnXCI+IDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG14LTRcIj5TdG9yZU5hbWU8L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1hbGlnbi1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFzc2lnbmVkIFRvPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1hbGlnbi1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkVtYWlsIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB1c2VyIG9mIGFzc2lnblRhYmxlRGF0YVwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cInVzZXIuY2hlY2tGbGFnXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Vc2VyQXNzaWduQ2hhbmdlKCRldmVudCwgdXNlci5pZClcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgaC0xNHB4IHctMTRweCB1c2VyRmxhZyBjLWNoZWNrYm94XCIgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmbGFnXCIgLz48c3BhbiBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbXgtNFwiPnt7dXNlcj8uc3RvcmVOYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3t1c2VyPy51c2VyTmFtZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3t1c2VyPy51c2VyRW1haWx9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1wYWdpbmF0aW9uIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlXCIgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXNcIiBbcGFnaW5hdGlvblNpemVzXT1cInBhZ2luYXRpb25TaXplc1wiIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCI+PC9saWItcGFnaW5hdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihhc3NpZ25UYWJsZUFwaVN0YXRlIHwgYXN5bmMpID09PSAnbG9hZGluZycgfHwgKGFzc2lnblRhYmxlQXBpU3RhdGUgfCBhc3luYykgPT09ICdpbml0aWFsJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihhc3NpZ25UYWJsZUFwaVN0YXRlIHwgYXN5bmMpID09PSAnbG9hZGVkJyAmJiAhYXNzaWduVGFibGVEYXRhPy5sZW5ndGhcIiAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMTRcIj48c3ZnIGNsYXNzPVwibXgtMjAgbXQtMTJcIiB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgZmlsbD1cIiNEMUZBREZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yNS4wOSAyNUMyNS4zMjUxIDI0LjMzMTcgMjUuNzg5MiAyMy43NjgxIDI2LjQgMjMuNDA5MUMyNy4wMTA4IDIzLjA1MDIgMjcuNzI4OSAyMi45MTg5IDI4LjQyNzIgMjMuMDM4N0MyOS4xMjU1IDIzLjE1ODUgMjkuNzU4OCAyMy41MjE1IDMwLjIxNTEgMjQuMDYzNUMzMC42NzEzIDI0LjYwNTUgMzAuOTIxMSAyNS4yOTE1IDMwLjkyIDI2QzMwLjkyIDI4IDI3LjkyIDI5IDI3LjkyIDI5TTI4IDMzSDI4LjAxTTM4IDI4QzM4IDMzLjUyMjggMzMuNTIyOCAzOCAyOCAzOEMyMi40NzcyIDM4IDE4IDMzLjUyMjggMTggMjhDMTggMjIuNDc3MiAyMi40NzcyIDE4IDI4IDE4QzMzLjUyMjggMTggMzggMjIuNDc3MiAzOCAyOFpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAzOTg1NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNFQ0ZERjNcIiBzdHJva2Utd2lkdGg9XCI4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInNlY3Rpb24tbGVmdGhlYWRpbmcgbXQtNiBteC0xMFwiPlVwbG9hZCB0byBhc3NpZ24gdXNlcnM8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwic3ViLXR4dCBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPkNsaWNrIOKAnERvd25sb2FkIFRlbXBsYXRl4oCdPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+IEFkZCB5b3VyIGRhdGEgdG8gdGhlIHRlbXBsYXRlIGZpbGU8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4gVXBsb2FkIGl0IGJlbG93IHRvIGFzc2lnbiB1c2VyczwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPiAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gI3VwbG9hZCAoY2xpY2spPVwiZmlsZS5jbGljaygpXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcmV1cGxvYWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi1wcmltYXJ5IFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3M9XCJtYi0yIG14LTFcIiB3aWR0aD1cIjIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMTkgMTlcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTggMTIuNVYxNS44MzMzQzE4IDE2LjI3NTQgMTcuODI0NCAxNi42OTkzIDE3LjUxMTggMTcuMDExOEMxNy4xOTkzIDE3LjMyNDQgMTYuNzc1NCAxNy41IDE2LjMzMzMgMTcuNUg0LjY2NjY3QzQuMjI0NjQgMTcuNSAzLjgwMDcyIDE3LjMyNDQgMy40ODgxNiAxNy4wMTE4QzMuMTc1NTkgMTYuNjk5MyAzIDE2LjI3NTQgMyAxNS44MzMzVjEyLjVNMTQuNjY2NyA2LjY2NjY3TDEwLjUgMi41TTEwLjUgMi41TDYuMzMzMzMgNi42NjY2N00xMC41IDIuNVYxMi41XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmV1cGxvYWR0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVcGxvYWQgVGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cInZpc2liaWxpdHk6IGhpZGRlbjtcIiB0eXBlPVwiZmlsZVwiICNmaWxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwia3RfYWNjb3VudF90ZWFtX3NpemVfc2VsZWN0XzFcIiAoY2hhbmdlKT1cIm9uRmlsZVVwbG9hZCgkZXZlbnQpXCIgLz5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJkb3dubG9hZFRlbXBsYXRlKClcIiBjbGFzcz1cImNzdG0tYmx1LWJ0blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIF9uZ2NvbnRlbnQtbmctYzg0MjQ3NTMzNz1cIlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU01LjgzMzMzIDguMzMzMzNMMTAgMTIuNU0xMCAxMi41TDE0LjE2NjcgOC4zMzMzM00xMCAxMi41VjIuNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkIFRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiBcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==