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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/esm2022/lib/components/audit-mapping-list/audit-mapping-list.component.mjs +486 -0
  2. package/esm2022/lib/components/audit-report-popup/audit-report-popup.component.mjs +358 -0
  3. package/esm2022/lib/components/audit-retag/audit-retag.component.mjs +457 -0
  4. package/esm2022/lib/components/custom-select/custom-select.component.mjs +174 -0
  5. package/esm2022/lib/components/filter-options/filter-options.component.mjs +41 -0
  6. package/esm2022/lib/components/footfall-dic/footfall-dic.component.mjs +374 -196
  7. package/esm2022/lib/components/footfall-dicview/footfall-dicview.component.mjs +1014 -0
  8. package/esm2022/lib/components/footfall-popup/footfall-popup.component.mjs +15 -0
  9. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +3 -3
  10. package/esm2022/lib/components/remove-audit/remove-audit.component.mjs +80 -0
  11. package/esm2022/lib/components/start-audit/start-audit.component.mjs +742 -0
  12. package/esm2022/lib/components/tango-manage-tickets/tango-manage-tickets.component.mjs +7 -3
  13. package/esm2022/lib/components/ticket-footfall-new/ticket-footfall-new.component.mjs +2214 -0
  14. package/esm2022/lib/components/ticketclosepopup/ticketclosepopup.component.mjs +43 -0
  15. package/esm2022/lib/components/tickets/tickets.component.mjs +62 -8
  16. package/esm2022/lib/components/viewcategory/viewcategory.component.mjs +89 -0
  17. package/esm2022/lib/services/audit.service.mjs +88 -0
  18. package/esm2022/lib/services/ticket.service.mjs +128 -33
  19. package/esm2022/lib/services/timer.service.mjs +84 -0
  20. package/esm2022/lib/tango-manage-tickets-routing.module.mjs +22 -2
  21. package/esm2022/lib/tango-manage-tickets.module.mjs +57 -5
  22. package/fesm2022/tango-app-ui-manage-tickets.mjs +6466 -312
  23. package/fesm2022/tango-app-ui-manage-tickets.mjs.map +1 -1
  24. package/lib/components/audit-mapping-list/audit-mapping-list.component.d.ts +73 -0
  25. package/lib/components/audit-metrics/audit-metrics.component.d.ts +1 -1
  26. package/lib/components/audit-report-popup/audit-report-popup.component.d.ts +47 -0
  27. package/lib/components/audit-retag/audit-retag.component.d.ts +59 -0
  28. package/lib/components/custom-select/custom-select.component.d.ts +34 -0
  29. package/lib/components/filter-options/filter-options.component.d.ts +15 -0
  30. package/lib/components/footfall-dic/footfall-dic.component.d.ts +23 -8
  31. package/lib/components/footfall-dicview/footfall-dicview.component.d.ts +132 -0
  32. package/lib/components/footfall-popup/footfall-popup.component.d.ts +8 -0
  33. package/lib/components/remove-audit/remove-audit.component.d.ts +16 -0
  34. package/lib/components/start-audit/start-audit.component.d.ts +86 -0
  35. package/lib/components/tango-manage-tickets/tango-manage-tickets.component.d.ts +1 -0
  36. package/lib/components/ticket-footfall-new/ticket-footfall-new.component.d.ts +256 -0
  37. package/lib/components/ticketclosepopup/ticketclosepopup.component.d.ts +15 -0
  38. package/lib/components/tickets/tickets.component.d.ts +4 -0
  39. package/lib/components/viewcategory/viewcategory.component.d.ts +16 -0
  40. package/lib/services/audit.service.d.ts +36 -0
  41. package/lib/services/ticket.service.d.ts +25 -7
  42. package/lib/services/timer.service.d.ts +22 -0
  43. package/lib/tango-manage-tickets.module.d.ts +21 -5
  44. package/package.json +1 -1
@@ -57,6 +57,9 @@ export class TicketsComponent {
57
57
  assignStores = [];
58
58
  issueTypeList = [];
59
59
  queryTypeList = [];
60
+ ClusterList;
61
+ filterByCluster;
62
+ showClusterFilter = false;
60
63
  constructor(cd, router, route, gs, modalService, service, excelservice) {
61
64
  this.cd = cd;
62
65
  this.router = router;
@@ -83,6 +86,8 @@ export class TicketsComponent {
83
86
  this.issueTypeList = [];
84
87
  this.filterByQueryType = [];
85
88
  this.queryTypeList = [];
89
+ this.filterByCluster = [];
90
+ this.ClusterList = [];
86
91
  this.dataObject = [];
87
92
  this.gs.manageRefreshTrigger.next(true);
88
93
  this.getInitload();
@@ -96,6 +101,7 @@ export class TicketsComponent {
96
101
  userType: this.users.userType,
97
102
  };
98
103
  this.getstoreFilter();
104
+ this.getAllGroups();
99
105
  }
100
106
  },
101
107
  });
@@ -168,17 +174,26 @@ export class TicketsComponent {
168
174
  { Description: "Store ID", Issues: this.storeList },
169
175
  { Description: "Deployed Status", Issues: this.statusType },
170
176
  ];
177
+ if (this.showClusterFilter) {
178
+ this.dataObject.push({ Description: "Clusters", Issues: this.ClusterList });
179
+ }
171
180
  }
172
181
  else if (this.type === 'infra' || this.type === 'dataMismatch') {
173
182
  this.dataObject = [
174
183
  { Description: "Store ID", Issues: this.storeList },
175
184
  { Description: "Status", Issues: this.statusType },
176
185
  ];
186
+ if (this.showClusterFilter) {
187
+ this.dataObject.push({ Description: "Clusters", Issues: this.ClusterList });
188
+ }
177
189
  }
178
190
  else if (this.type === 'mat') {
179
191
  this.dataObject = [
180
192
  { Description: "Status", Issues: this.statusType },
181
193
  ];
194
+ if (this.showClusterFilter) {
195
+ this.dataObject.push({ Description: "Clusters", Issues: this.ClusterList });
196
+ }
182
197
  }
183
198
  }
184
199
  this.getTable();
@@ -213,6 +228,9 @@ export class TicketsComponent {
213
228
  { Description: "Deployed Status", Issues: this.statusType },
214
229
  { Description: this.typeName, Issues: this.userList },
215
230
  ];
231
+ if (this.showClusterFilter) {
232
+ this.dataObject.push({ Description: "Clusters", Issues: this.ClusterList });
233
+ }
216
234
  }
217
235
  else if (this.users.userType === "tango" && this.type === 'infra') {
218
236
  this.dataObject = [
@@ -220,6 +238,9 @@ export class TicketsComponent {
220
238
  { Description: "Status", Issues: this.statusType },
221
239
  { Description: this.typeName, Issues: this.userList },
222
240
  ];
241
+ if (this.showClusterFilter) {
242
+ this.dataObject.push({ Description: "Clusters", Issues: this.ClusterList });
243
+ }
223
244
  }
224
245
  else if (this.users.userType === "tango" && this.type === 'dataMismatch') {
225
246
  this.dataObject = [
@@ -227,11 +248,17 @@ export class TicketsComponent {
227
248
  { Description: "Query Type", Issues: this.queryTypeList },
228
249
  { Description: "Status", Issues: this.statusType },
229
250
  ];
251
+ if (this.showClusterFilter) {
252
+ this.dataObject.push({ Description: "Clusters", Issues: this.ClusterList });
253
+ }
230
254
  }
231
255
  else if (this.type === 'mat') {
232
256
  this.dataObject = [
233
257
  { Description: "Status", Issues: this.statusType },
234
258
  ];
259
+ if (this.showClusterFilter) {
260
+ this.dataObject.push({ Description: "Clusters", Issues: this.ClusterList });
261
+ }
235
262
  }
236
263
  });
237
264
  }
@@ -270,6 +297,9 @@ export class TicketsComponent {
270
297
  obj.sortColumName = this.sortedColumn;
271
298
  obj.sortBy = this.sortDirection;
272
299
  }
300
+ if (this.filterByCluster?.length) {
301
+ obj.filterByCluster = this.filterByCluster ? this.filterByCluster : [];
302
+ }
273
303
  if (this.type === "installation" || this.type === "infra") {
274
304
  if (this.filterByStores?.length) {
275
305
  obj.storeIdFilter = this.filterByStores ? this.filterByStores : [];
@@ -296,6 +326,9 @@ export class TicketsComponent {
296
326
  if (this.filterByQueryType?.length) {
297
327
  obj.filterByQueryType = this.filterByQueryType ? this.filterByQueryType : [];
298
328
  }
329
+ if (this.filterByCluster?.length) {
330
+ obj.filterByCluster = this.filterByCluster ? this.filterByCluster : [];
331
+ }
299
332
  }
300
333
  if (this.type === "installation") {
301
334
  this.service
@@ -409,6 +442,26 @@ export class TicketsComponent {
409
442
  : [];
410
443
  this.assignTicket = this.selectAll; // Update assignTicket based on selectAll state
411
444
  }
445
+ getAllGroups() {
446
+ this.ClusterList = [];
447
+ if (this.headerFilters?.clients[0] && this.headerFilters?.clients[0] != '') {
448
+ this.service.getclusters({ clientId: this.headerFilters?.clients[0], group: [], city: [] }).subscribe({
449
+ next: (res) => {
450
+ if (res && res.code == 200) {
451
+ this.showClusterFilter = true;
452
+ this.ClusterList = res?.data?.groupData;
453
+ this.ClusterList.forEach((element) => {
454
+ element.text = element.groupName;
455
+ element.id = element.groupName;
456
+ });
457
+ }
458
+ else {
459
+ this.ClusterList = [];
460
+ }
461
+ }
462
+ });
463
+ }
464
+ }
412
465
  updateCheck(event, ticketId) {
413
466
  const ticket = this.tableListArray.find((obj) => obj.ticketId === ticketId);
414
467
  if (ticket) {
@@ -474,9 +527,9 @@ export class TicketsComponent {
474
527
  if (element.Description === "Query Type") {
475
528
  this.filterByQueryType = element.Issues.map((val) => val?.id);
476
529
  }
477
- // if (element.Description === "Issue Type") {
478
- // this.issueType = element.Issues.map((val: any) => val?.id);
479
- // }
530
+ if (element.Description === "Clusters") {
531
+ this.filterByCluster = element.Issues.map((val) => val?.id);
532
+ }
480
533
  });
481
534
  }
482
535
  this.currentPage = 1;
@@ -534,8 +587,9 @@ export class TicketsComponent {
534
587
  obj.filterByQueryType = this.filterByQueryType ? this.filterByQueryType : [];
535
588
  }
536
589
  }
537
- // console.log(obj)
538
- // return
590
+ if (this.filterByCluster?.length) {
591
+ obj.filterByCluster = this.filterByCluster ? this.filterByCluster : [];
592
+ }
539
593
  if (this.type === "installation") {
540
594
  this.service
541
595
  .getInstallationList(obj)
@@ -784,10 +838,10 @@ export class TicketsComponent {
784
838
  }
785
839
  }
786
840
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TicketsComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.GlobalStateService }, { token: i3.NgbModal }, { token: i4.TicketService }, { token: i5.ExcelService }], target: i0.ɵɵFactoryTarget.Component });
787
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TicketsComponent, selector: "lib-tickets", ngImport: i0, template: "<div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span *ngIf=\"type !=='dataMismatch' && type !== 'mat'\" class=\"card-label mb-2\">{{type | titlecase}}</span>\r\n <span *ngIf=\"type ==='dataMismatch'\" class=\"card-label mb-2\">Data Mismatch</span>\r\n <span *ngIf=\"type ==='mat'\" class=\"card-label mb-2\">Employee Mat</span>\r\n\r\n <!-- <span class=\"text-sub mb-2\">Last updated 1 hour ago</span> -->\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div *ngIf=\"!assignTicket\" class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></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 type=\"text\" class=\"form-control ps-14 me-2\" placeholder=\"Search\" autocomplete=\"off\"\r\n (change)=\"searchData()\" [(ngModel)]=\"searchValue\" />\r\n <lib-filters *ngIf=\"users.userType === 'tango' && userList?.length || users.userType === 'client' && storeList?.length\" [dataObject]=\"dataObject\"\r\n (appliedFilters)=\"applyFilters($event)\"></lib-filters>\r\n\r\n <button type=\"button\" *ngIf=\"!noData&&!loading\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\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.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"assignTicket\" class=\"d-flex\">\r\n <button type=\"button\" (click)=\"addAssignTicket()\"\r\n class=\"btn mx-2 btn-primary rounded-3 text-nowrap border-val\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99984 4.1665V15.8332M4.1665 9.99984H15.8332\" stroke=\"white\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2 text-white\">Assign Ticket</span>\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body\">\r\n\r\n\r\n <ul *ngIf=\"!loading && listArray?.length && type !== 'mat' && type !== 'dataMismatch'\" class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap horizontal-scroll\">\r\n <li class=\"nav-item\" *ngFor=\"let obj of listArray.slice().reverse()\" (click)=\"selectedTabs(obj)\">\r\n <a [ngClass]=\"{'active': selectedTab === obj.name}\" class=\"nav-link cursor-pointer no-border me-2\">\r\n {{obj.name | titlecase}} <span class=\"mx-2\"\r\n [ngClass]=\"selectedTab === obj.name ? 'text-border-priamry' : 'text-border'\">{{obj.count}}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n <ul *ngIf=\"!loading && listArray?.length && type === 'dataMismatch'\" class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap horizontal-scroll\">\r\n <li class=\"nav-item\" *ngFor=\"let obj of listArray.slice().reverse()\" (click)=\"selectedTabs(obj)\">\r\n <a [ngClass]=\"selectedTab === transformName(obj.name) ? 'active' : ''\" class=\"nav-link cursor-pointer no-border me-2\">\r\n {{obj.name | titlecase}} <span class=\"mx-2\"\r\n [ngClass]=\"selectedTab === transformName(obj.name) ? 'text-border-priamry' : 'text-border'\">{{obj.count}}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n <div *ngIf=\"loading\" 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 <div *ngIf=\"noData\" class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"table-responsive mt-5\">\r\n <table class=\"table bottom-border text-nowrap \">\r\n <thead>\r\n <tr>\r\n <th class=\"cursor-pointer\" >\r\n \r\n <input *ngIf=\"this.users.userType ==='tango'\"\r\n class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\" [(ngModel)]=\"selectAll\"\r\n (click)=\"selectAllStore($event)\"> <span class=\"cursor-pointer\" (click)=\"onSort('ticketId')\"> Ticket ID <svg\r\n [ngClass]=\"sortedColumn === 'ticketId' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'ticketId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span> \r\n </th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type !=='dataMismatch'\" (click)=\"onSort('issueDate')\"> Created Date\r\n <svg [ngClass]=\"sortedColumn === 'issueDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='infra'\" (click)=\"onSort('createdAt')\"> Created Time\r\n <svg [ngClass]=\"sortedColumn === 'createdAt' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'createdAt' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='infra'\" (click)=\"onSort('issueClosedDate')\"> Closed Time\r\n <svg [ngClass]=\"sortedColumn === 'issueClosedDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueClosedDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('createdAt')\"> Created Date\r\n <svg [ngClass]=\"sortedColumn === 'createdAt' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'createdAt' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" ><span (click)=\"onSort('issueDate')\">Issue Date\r\n <svg [ngClass]=\"sortedColumn === 'issueDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"cursor-pointer\" *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"cursor-pointer\" (click)=\"onSort('clientName')\">Brand Name<svg\r\n [ngClass]=\"sortedColumn === 'clientName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clientName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"cursor-pointer\" (click)=\"onSort('clientId')\">Brand ID<svg\r\n [ngClass]=\"sortedColumn === 'clientId' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clientId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('storeName')\">Store Name<svg\r\n [ngClass]=\"sortedColumn === 'storeName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('storeId')\">Store ID<svg\r\n [ngClass]=\"sortedColumn === 'storeId' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"this.users.userType ==='tango' && (type ==='infra'||type ==='dataMismatch'||type ==='mat')\" (click)=\"onSort('userName')\">Resolved By<svg [ngClass]=\"sortedColumn === 'userName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'userName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"this.users.userType ==='tango' && type ==='installation'\" (click)=\"onSort('userName')\">Installed By<svg [ngClass]=\"sortedColumn === 'userName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'userName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('issueType')\">Issue Type\r\n <svg [ngClass]=\"sortedColumn === 'issueType' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueType' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('type')\">Query Type\r\n <svg [ngClass]=\"sortedColumn === 'type' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'type' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('reportedFootfall')\">Reported Footfall\r\n <svg [ngClass]=\"sortedColumn === 'reportedFootfall' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'reportedFootfall' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('mappedCount')\">Unique Images\r\n <svg [ngClass]=\"sortedColumn === 'mappedCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'mappedCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('successPercentage')\">Success Percentage\r\n <svg [ngClass]=\"sortedColumn === 'successPercentage' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'successPercentage' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='installation'\" (click)=\"onSort('status')\">Deployed Status<svg\r\n [ngClass]=\"sortedColumn === 'status' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'status' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type ==='dataMismatch' ||type ==='mat'|| type ==='infra'\" class=\"cursor-pointer\" (click)=\"onSort('status')\">Status<svg\r\n [ngClass]=\"sortedColumn === 'status' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'status' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n<!-- added config and total downtime as per the prioduct team requirement -->\r\n <th>Configured Ticket Time\r\n </th> \r\n\r\n <th >Total Downtime\r\n </th>\r\n<!-- -->\r\n\r\n <th *ngIf=\"type !== 'mat' && type !== 'dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('primaryIssue')\">Primary Issues<svg\r\n [ngClass]=\"sortedColumn === 'primaryIssue' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'primaryIssue' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type !== 'mat' && type !== 'dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('secondaryIssue')\">Secondary Issues<svg\r\n [ngClass]=\"sortedColumn === 'secondaryIssue' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'secondaryIssue' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type!=='installation'\">Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of tableListArray\">\r\n <td>\r\n <input *ngIf=\"this.users.userType ==='tango'\" class=\"form-check-input cursor-pointer me-4 mt-3\" type=\"checkbox\" [(ngModel)]=\"obj.checked\"\r\n (change)=\"updateCheck($event,obj?.ticketId)\">\r\n <span *ngIf=\"type === 'dataMismatch' || type === 'mat' || type === 'infra'\"\r\n class=\"txt-light-primary cursor-pointer\" (click)=\"tickets(type,obj.clientId,obj.storeId,obj.clientName)\">\r\n {{obj.ticketId}}\r\n </span>\r\n <span *ngIf=\"type === 'installation'\">\r\n {{obj.ticketId}}\r\n </span>\r\n </td>\r\n <td *ngIf=\"type === 'dataMismatch'\">\r\n {{obj?.createdAt |\r\n date: 'dd MMM, yyyy'}}</td>\r\n <td *ngIf=\"type === 'dataMismatch'\">\r\n {{obj?.issueDate |\r\n date: 'dd MMM, yyyy'}}</td>\r\n <td *ngIf=\"type !== 'dataMismatch'\">\r\n {{obj?.createdAt |\r\n date: 'dd MMM, yyyy'}}\r\n </td>\r\n <td *ngIf=\"type === 'infra'\">\r\n {{obj?.createdAt |\r\n date: 'hh:mm a' | uppercase}}\r\n </td>\r\n <td *ngIf=\"type === 'infra'\">\r\n {{obj?.issueClosedDate?(obj?.issueClosedDate |\r\n date: 'hh:mm a' | uppercase):\"--\"}}\r\n </td>\r\n <td *ngIf=\"this.users.userType ==='tango'\">\r\n <div class=\"table-title cursor-pointer\" (click)=\"clientTickets(obj.clientId,obj.storeId,obj.clientName)\">\r\n <span class=\"txt-light-primary\">\r\n {{obj.clientName}}\r\n </span>\r\n </div>\r\n </td>\r\n <td *ngIf=\"this.users.userType ==='tango'\">{{obj.clientId}}\r\n </td>\r\n <td>\r\n <div class=\"table-title cursor-pointer\" (click)=\"storeTickets(obj.clientId,obj.storeId,obj.clientName)\">\r\n <span class=\"txt-light-primary\">\r\n {{obj.storeName}}\r\n </span>\r\n </div>\r\n </td>\r\n <td>{{obj.storeId}}\r\n </td>\r\n \r\n <td *ngIf=\"this.users.userType ==='tango'\">\r\n <div class=\"table-title cursor-pointer\" >\r\n <span >\r\n {{obj.userName}}\r\n </span>\r\n </div>\r\n </td>\r\n <td *ngIf=\"type ==='dataMismatch' && obj.issueType ==='lowcount'\" >Low Count</td>\r\n <td *ngIf=\"type ==='dataMismatch' && obj.issueType ==='highcount'\">High Count</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.type ? obj?.type:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.reportedFootfall ? obj?.reportedFootfall:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.mappedCount ? obj?.mappedCount:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.successPercentage ? obj?.successPercentage:'--'}}</td>\r\n <td *ngIf=\"type==='installation'\">\r\n <span *ngIf=\"obj.installationStatus ==='paired' || obj.installationStatus ==='onboarded'\"\r\n class=\"badge badge-light-primary mx-4\">{{obj.installationStatus | titlecase}}</span>\r\n <span *ngIf=\"obj.installationStatus ==='live'\" class=\"badge badge-light-success mx-4\">Live</span>\r\n <span *ngIf=\"obj.installationStatus ==='installationfailed'\"\r\n class=\"badge badge-light-warning mx-4\">Installationfailed</span>\r\n <span *ngIf=\"obj.installationStatus ==='deployed'\"\r\n class=\"badge badge-light-success mx-4 text-capitalize\">deployed</span>\r\n </td>\r\n <td *ngIf=\"type==='infra' || type==='mat' || type==='dataMismatch'\">\r\n <span *ngIf=\"obj.status ==='open'\" class=\"badge badge-light-danger\">Open</span>\r\n <span *ngIf=\"obj.status ==='closed'\" class=\"badge badge-light-success\">Closed</span>\r\n <span *ngIf=\"obj.status ==='inprogress'\" class=\"badge badge-light-primary\">In\r\n Progress</span>\r\n </td>\r\n <td *ngIf=\"type==='infra'\">\r\n{{obj.configuredDownTime?obj.configuredDownTime*60:0 || 0 }} {{obj.configuredDownTime > 1? 'mins' : 'min'}} \r\n </td>\r\n <td *ngIf=\"type==='infra'\"> \r\n{{obj.totalDownTime || 0 }} {{obj.totalDownTime > 1? 'mins' : 'min'}} \r\n </td>\r\n <td *ngIf=\"type==='installation' || type==='infra'\">\r\n <div>\r\n <span *ngIf=\"obj.primaryIssue !=='-'\">{{obj.primaryIssue ? obj.primaryIssue :'Issue not identified'}}</span>\r\n <span *ngIf=\"obj.primaryIssue ==='-'\">Issue not identified</span>\r\n </div>\r\n </td>\r\n <td *ngIf=\"type==='installation' || type==='infra'\">\r\n <span *ngIf=\"obj.secondaryIssue\">{{obj.secondaryIssue}}</span>\r\n </td>\r\n <td *ngIf=\"type==='infra' || type ==='dataMismatch'\">\r\n <span class=\"mx-2 cursor-pointer\" *ngIf=\"this.users.userType ==='tango'\" (click)=\"commentModal(obj)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <path\r\n d=\"M17.6431 12.5C17.6431 12.942 17.4675 13.366 17.1549 13.6785C16.8423 13.9911 16.4184 14.1667 15.9764 14.1667H5.9764L2.64307 17.5V4.16667C2.64307 3.72464 2.81866 3.30072 3.13122 2.98816C3.44378 2.67559 3.86771 2.5 4.30973 2.5H15.9764C16.4184 2.5 16.8423 2.67559 17.1549 2.98816C17.4675 3.30072 17.6431 3.72464 17.6431 4.16667V12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <span class=\"mx-2 cursor-pointer\" (click)=\"tickets(type,obj.clientId,obj.storeId,obj.clientName)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10640_18061)\">\r\n <path\r\n d=\"M0.976562 10C0.976562 10 4.3099 3.33337 10.1432 3.33337C15.9766 3.33337 19.3099 10 19.3099 10C19.3099 10 15.9766 16.6667 10.1432 16.6667C4.3099 16.6667 0.976562 10 0.976562 10Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.1432 12.5C11.5239 12.5 12.6432 11.3808 12.6432 10C12.6432 8.61933 11.5239 7.50004 10.1432 7.50004C8.76252 7.50004 7.64323 8.61933 7.64323 10C7.64323 11.3808 8.76252 12.5 10.1432 12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_10640_18061\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.143066)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </td>\r\n <td *ngIf=\"type === 'mat'\">\r\n <span class=\"mx-2 cursor-pointer\" (click)=\"routeToMat(obj.storeId,obj.clientId,obj.clientName)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10640_18061)\">\r\n <path\r\n d=\"M0.976562 10C0.976562 10 4.3099 3.33337 10.1432 3.33337C15.9766 3.33337 19.3099 10 19.3099 10C19.3099 10 15.9766 16.6667 10.1432 16.6667C4.3099 16.6667 0.976562 10 0.976562 10Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.1432 12.5C11.5239 12.5 12.6432 11.3808 12.6432 10C12.6432 8.61933 11.5239 7.50004 10.1432 7.50004C8.76252 7.50004 7.64323 8.61933 7.64323 10C7.64323 11.3808 8.76252 12.5 10.1432 12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_10640_18061\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.143066)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span> \r\n \r\n </td>\r\n \r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"my-3\">\r\n <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n</div>", styles: [".nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.text-border{border-radius:16px!important;background:var(--Gray-100, #F2F4F7)!important;color:var(--Gray-700, #344054);text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important}.text-border-priamry{border-radius:16px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.text-sub{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-weight:400!important;line-height:20px}.border-val{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}td{vertical-align:middle;line-height:35px!important}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-weight:500!important}.table-sub{line-height:30px!important;color:var(--Gray-500, #667085)!important}.txt-light-primary{color:#009bf3!important}input[type=checkbox]{width:16px!important;height:16px!important;margin:0 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}.img-src{width:25%;height:20%}.rotate{rotate:180deg;transition:1s}.viewbutton{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);box-shadow:0 1px 2px #1018280d;padding:10px 16px;justify-content:center;align-items:center;gap:10px;color:var(--Gray-700, #344054);font-family:Inter;font-size:12px;font-weight:600}.horizontal-scroll{overflow-x:auto;overflow-y:hidden;white-space:nowrap}\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: "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.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: "component", type: i8.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i8.FiltersComponent, selector: "lib-filters", inputs: ["dataObject"], outputs: ["appliedFilters"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i6.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i6.DatePipe, name: "date" }] });
841
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TicketsComponent, selector: "lib-tickets", ngImport: i0, template: "<div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span *ngIf=\"type !=='dataMismatch' && type !== 'mat'\" class=\"card-label mb-2\">{{type | titlecase}}</span>\r\n <span *ngIf=\"type ==='dataMismatch'\" class=\"card-label mb-2\">Data Mismatch</span>\r\n <span *ngIf=\"type ==='mat'\" class=\"card-label mb-2\">Employee Mat</span>\r\n\r\n <!-- <span class=\"text-sub mb-2\">Last updated 1 hour ago</span> -->\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div *ngIf=\"!assignTicket\" class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></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 type=\"text\" class=\"form-control ps-14 me-2\" placeholder=\"Search\" autocomplete=\"off\"\r\n (change)=\"searchData()\" [(ngModel)]=\"searchValue\" />\r\n <lib-filters *ngIf=\"users.userType === 'tango' && userList?.length || users.userType === 'client' && storeList?.length\" [dataObject]=\"dataObject\"\r\n (appliedFilters)=\"applyFilters($event)\"></lib-filters>\r\n\r\n <button type=\"button\" *ngIf=\"!noData&&!loading\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\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.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"assignTicket\" class=\"d-flex\">\r\n <button type=\"button\" (click)=\"addAssignTicket()\"\r\n class=\"btn mx-2 btn-primary rounded-3 text-nowrap border-val\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99984 4.1665V15.8332M4.1665 9.99984H15.8332\" stroke=\"white\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2 text-white\">Assign Ticket</span>\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body\">\r\n\r\n\r\n <ul *ngIf=\"!loading && listArray?.length && type !== 'mat' && type !== 'dataMismatch'\" class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap horizontal-scroll\">\r\n <li class=\"nav-item\" *ngFor=\"let obj of listArray.slice().reverse()\" (click)=\"selectedTabs(obj)\">\r\n <a [ngClass]=\"{'active': selectedTab === obj.name}\" class=\"nav-link cursor-pointer no-border me-2\">\r\n {{obj.name | titlecase}} <span class=\"mx-2\"\r\n [ngClass]=\"selectedTab === obj.name ? 'text-border-priamry' : 'text-border'\">{{obj.count}}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n <ul *ngIf=\"!loading && listArray?.length && type === 'dataMismatch'\" class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap horizontal-scroll\">\r\n <li class=\"nav-item\" *ngFor=\"let obj of listArray.slice().reverse()\" (click)=\"selectedTabs(obj)\">\r\n <a [ngClass]=\"selectedTab === transformName(obj.name) ? 'active' : ''\" class=\"nav-link cursor-pointer no-border me-2\">\r\n {{obj.name | titlecase}} <span class=\"mx-2\"\r\n [ngClass]=\"selectedTab === transformName(obj.name) ? 'text-border-priamry' : 'text-border'\">{{obj.count}}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n <div *ngIf=\"loading\" 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 <div *ngIf=\"noData\" class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"table-responsive mt-5\">\r\n <table class=\"table bottom-border text-nowrap \">\r\n <thead>\r\n <tr>\r\n <th class=\"cursor-pointer\" >\r\n \r\n <input *ngIf=\"this.users.userType ==='tango'\"\r\n class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\" [(ngModel)]=\"selectAll\"\r\n (click)=\"selectAllStore($event)\"> <span class=\"cursor-pointer\" (click)=\"onSort('ticketId')\"> Ticket ID <svg\r\n [ngClass]=\"sortedColumn === 'ticketId' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'ticketId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span> \r\n </th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type !=='dataMismatch'\" (click)=\"onSort('issueDate')\"> Created Date\r\n <svg [ngClass]=\"sortedColumn === 'issueDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='infra'\" (click)=\"onSort('createdAt')\"> Created Time\r\n <svg [ngClass]=\"sortedColumn === 'createdAt' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'createdAt' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='infra'\" (click)=\"onSort('issueClosedDate')\"> Closed Date\r\n <svg [ngClass]=\"sortedColumn === 'issueClosedDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueClosedDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='infra'\" (click)=\"onSort('issueClosedDate')\"> Closed Time\r\n <svg [ngClass]=\"sortedColumn === 'issueClosedDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueClosedDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('createdAt')\"> Created Date\r\n <svg [ngClass]=\"sortedColumn === 'createdAt' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'createdAt' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" ><span (click)=\"onSort('issueDate')\">Issue Date\r\n <svg [ngClass]=\"sortedColumn === 'issueDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"cursor-pointer\" *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"cursor-pointer\" (click)=\"onSort('clientName')\">Brand Name<svg\r\n [ngClass]=\"sortedColumn === 'clientName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clientName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"cursor-pointer\" (click)=\"onSort('clientId')\">Brand ID<svg\r\n [ngClass]=\"sortedColumn === 'clientId' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clientId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('storeName')\">Store Name<svg\r\n [ngClass]=\"sortedColumn === 'storeName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('storeId')\">Store ID<svg\r\n [ngClass]=\"sortedColumn === 'storeId' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"this.users.userType ==='tango' && (type ==='infra'||type ==='dataMismatch'||type ==='mat')\" (click)=\"onSort('userName')\">Resolved By<svg [ngClass]=\"sortedColumn === 'userName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'userName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"this.users.userType ==='tango' && type ==='installation'\" (click)=\"onSort('userName')\">Installed By<svg [ngClass]=\"sortedColumn === 'userName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'userName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('issueType')\">Issue Type\r\n <svg [ngClass]=\"sortedColumn === 'issueType' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueType' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('type')\">Query Type\r\n <svg [ngClass]=\"sortedColumn === 'type' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'type' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('reportedFootfall')\">Reported Footfall\r\n <svg [ngClass]=\"sortedColumn === 'reportedFootfall' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'reportedFootfall' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('mappedCount')\">Unique Images\r\n <svg [ngClass]=\"sortedColumn === 'mappedCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'mappedCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('successPercentage')\">Success Percentage\r\n <svg [ngClass]=\"sortedColumn === 'successPercentage' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'successPercentage' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='installation'\" (click)=\"onSort('status')\">Deployed Status<svg\r\n [ngClass]=\"sortedColumn === 'status' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'status' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type ==='dataMismatch' ||type ==='mat'|| type ==='infra'\" class=\"cursor-pointer\" (click)=\"onSort('status')\">Status<svg\r\n [ngClass]=\"sortedColumn === 'status' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'status' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n<!-- added config and total downtime as per the prioduct team requirement -->\r\n <th *ngIf=\"type==='infra'\">Configured Ticket Time\r\n </th> \r\n\r\n <th *ngIf=\"type==='infra'\" >Total Downtime\r\n </th>\r\n<!-- -->\r\n\r\n <th *ngIf=\"type !== 'mat' && type !== 'dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('primaryIssue')\">Primary Issues<svg\r\n [ngClass]=\"sortedColumn === 'primaryIssue' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'primaryIssue' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type !== 'mat' && type !== 'dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('secondaryIssue')\">Secondary Issues<svg\r\n [ngClass]=\"sortedColumn === 'secondaryIssue' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'secondaryIssue' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type!=='installation'\">Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of tableListArray\">\r\n <td>\r\n <input *ngIf=\"this.users.userType ==='tango'\" class=\"form-check-input cursor-pointer me-4 mt-3\" type=\"checkbox\" [(ngModel)]=\"obj.checked\"\r\n (change)=\"updateCheck($event,obj?.ticketId)\">\r\n <span *ngIf=\"type === 'dataMismatch' || type === 'mat' || type === 'infra'\"\r\n class=\"txt-light-primary cursor-pointer\" (click)=\"tickets(type,obj.clientId,obj.storeId,obj.clientName)\">\r\n {{obj.ticketId}}\r\n </span>\r\n <span *ngIf=\"type === 'installation'\">\r\n {{obj.ticketId}}\r\n </span>\r\n </td>\r\n <td *ngIf=\"type === 'dataMismatch'\">\r\n {{obj?.createdAt |\r\n date: 'dd MMM, yyyy'}}</td>\r\n <td *ngIf=\"type === 'dataMismatch'\">\r\n {{obj?.issueDate |\r\n date: 'dd MMM, yyyy'}}</td>\r\n <td *ngIf=\"type !== 'dataMismatch'\">\r\n {{obj?.createdAt |\r\n date: 'dd MMM, yyyy'}}\r\n </td>\r\n <td *ngIf=\"type === 'infra'\">\r\n {{obj?.createdAt |\r\n date: 'hh:mm a' | uppercase}}\r\n </td>\r\n <td *ngIf=\"type === 'infra'\">\r\n {{obj?.issueClosedDate?(obj?.issueClosedDate |\r\n date: 'dd MMM, yyyy'):\"--\"}}\r\n </td>\r\n <td *ngIf=\"type === 'infra'\">\r\n {{obj?.issueClosedDate?(obj?.issueClosedDate |\r\n date: 'hh:mm a' | uppercase):\"--\"}}\r\n </td>\r\n <td *ngIf=\"this.users.userType ==='tango'\">\r\n <div class=\"table-title cursor-pointer\" (click)=\"clientTickets(obj.clientId,obj.storeId,obj.clientName)\">\r\n <span class=\"txt-light-primary\">\r\n {{obj.clientName}}\r\n </span>\r\n </div>\r\n </td>\r\n <td *ngIf=\"this.users.userType ==='tango'\">{{obj.clientId}}\r\n </td>\r\n <td>\r\n <div class=\"table-title cursor-pointer\" (click)=\"storeTickets(obj.clientId,obj.storeId,obj.clientName)\">\r\n <span class=\"txt-light-primary\">\r\n {{obj.storeName}}\r\n </span>\r\n </div>\r\n </td>\r\n <td>{{obj.storeId}}\r\n </td>\r\n \r\n <td *ngIf=\"this.users.userType ==='tango'\">\r\n <div class=\"table-title cursor-pointer\" >\r\n <span >\r\n {{obj.userName}}\r\n </span>\r\n </div>\r\n </td>\r\n <td *ngIf=\"type ==='dataMismatch' && obj.issueType ==='lowcount'\" >Low Count</td>\r\n <td *ngIf=\"type ==='dataMismatch' && obj.issueType ==='highcount'\">High Count</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.type ? obj?.type:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.reportedFootfall ? obj?.reportedFootfall:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.mappedCount ? obj?.mappedCount:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.successPercentage ? obj?.successPercentage:'--'}}</td>\r\n <td *ngIf=\"type==='installation'\">\r\n <span *ngIf=\"obj.installationStatus ==='paired' || obj.installationStatus ==='onboarded'\"\r\n class=\"badge badge-light-primary mx-4\">{{obj.installationStatus | titlecase}}</span>\r\n <span *ngIf=\"obj.installationStatus ==='live'\" class=\"badge badge-light-success mx-4\">Live</span>\r\n <span *ngIf=\"obj.installationStatus ==='installationfailed'\"\r\n class=\"badge badge-light-warning mx-4\">Installationfailed</span>\r\n <span *ngIf=\"obj.installationStatus ==='deployed'\"\r\n class=\"badge badge-light-success mx-4 text-capitalize\">deployed</span>\r\n </td>\r\n <td *ngIf=\"type==='infra' || type==='mat' || type==='dataMismatch'\">\r\n <span *ngIf=\"obj.status ==='open'\" class=\"badge badge-light-danger\">Open</span>\r\n <span *ngIf=\"obj.status ==='closed'\" class=\"badge badge-light-success\">Closed</span>\r\n <span *ngIf=\"obj.status ==='inprogress'\" class=\"badge badge-light-primary\">In\r\n Progress</span>\r\n </td>\r\n <td *ngIf=\"type==='infra'\">\r\n{{obj.configuredDownTime?obj.configuredDownTime*60:0 || 0 }} {{obj.configuredDownTime > 1? 'mins' : 'min'}} \r\n </td>\r\n <td *ngIf=\"type==='infra'\"> \r\n{{obj.totalDownTime || 0 }} {{obj.totalDownTime > 1? 'mins' : 'min'}} \r\n </td>\r\n <td *ngIf=\"type==='installation' || type==='infra'\">\r\n <div>\r\n <span *ngIf=\"obj.primaryIssue !=='-'\">{{obj.primaryIssue ? obj.primaryIssue :'Issue not identified'}}</span>\r\n <span *ngIf=\"obj.primaryIssue ==='-'\">Issue not identified</span>\r\n </div>\r\n </td>\r\n <td *ngIf=\"type==='installation' || type==='infra'\">\r\n <span *ngIf=\"obj.secondaryIssue\">{{obj.secondaryIssue}}</span>\r\n </td>\r\n <td *ngIf=\"type==='infra' || type ==='dataMismatch'\">\r\n <span class=\"mx-2 cursor-pointer\" *ngIf=\"this.users.userType ==='tango'\" (click)=\"commentModal(obj)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <path\r\n d=\"M17.6431 12.5C17.6431 12.942 17.4675 13.366 17.1549 13.6785C16.8423 13.9911 16.4184 14.1667 15.9764 14.1667H5.9764L2.64307 17.5V4.16667C2.64307 3.72464 2.81866 3.30072 3.13122 2.98816C3.44378 2.67559 3.86771 2.5 4.30973 2.5H15.9764C16.4184 2.5 16.8423 2.67559 17.1549 2.98816C17.4675 3.30072 17.6431 3.72464 17.6431 4.16667V12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <span class=\"mx-2 cursor-pointer\" (click)=\"tickets(type,obj.clientId,obj.storeId,obj.clientName)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10640_18061)\">\r\n <path\r\n d=\"M0.976562 10C0.976562 10 4.3099 3.33337 10.1432 3.33337C15.9766 3.33337 19.3099 10 19.3099 10C19.3099 10 15.9766 16.6667 10.1432 16.6667C4.3099 16.6667 0.976562 10 0.976562 10Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.1432 12.5C11.5239 12.5 12.6432 11.3808 12.6432 10C12.6432 8.61933 11.5239 7.50004 10.1432 7.50004C8.76252 7.50004 7.64323 8.61933 7.64323 10C7.64323 11.3808 8.76252 12.5 10.1432 12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_10640_18061\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.143066)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </td>\r\n <td *ngIf=\"type === 'mat'\">\r\n <span class=\"mx-2 cursor-pointer\" (click)=\"routeToMat(obj.storeId,obj.clientId,obj.clientName)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10640_18061)\">\r\n <path\r\n d=\"M0.976562 10C0.976562 10 4.3099 3.33337 10.1432 3.33337C15.9766 3.33337 19.3099 10 19.3099 10C19.3099 10 15.9766 16.6667 10.1432 16.6667C4.3099 16.6667 0.976562 10 0.976562 10Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.1432 12.5C11.5239 12.5 12.6432 11.3808 12.6432 10C12.6432 8.61933 11.5239 7.50004 10.1432 7.50004C8.76252 7.50004 7.64323 8.61933 7.64323 10C7.64323 11.3808 8.76252 12.5 10.1432 12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_10640_18061\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.143066)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span> \r\n \r\n </td>\r\n \r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"my-3\">\r\n <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n</div>", styles: [".nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.text-border{border-radius:16px!important;background:var(--Gray-100, #F2F4F7)!important;color:var(--Gray-700, #344054);text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important}.text-border-priamry{border-radius:16px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.text-sub{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-weight:400!important;line-height:20px}.border-val{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}td{vertical-align:middle;line-height:35px!important}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-weight:500!important}.table-sub{line-height:30px!important;color:var(--Gray-500, #667085)!important}.txt-light-primary{color:#009bf3!important}input[type=checkbox]{width:16px!important;height:16px!important;margin:0 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}.img-src{width:25%;height:20%}.rotate{rotate:180deg;transition:1s}.viewbutton{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);box-shadow:0 1px 2px #1018280d;padding:10px 16px;justify-content:center;align-items:center;gap:10px;color:var(--Gray-700, #344054);font-family:Inter;font-size:12px;font-weight:600}.horizontal-scroll{overflow-x:auto;overflow-y:hidden;white-space:nowrap}\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: "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.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: "component", type: i8.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i8.FiltersComponent, selector: "lib-filters", inputs: ["dataObject"], outputs: ["appliedFilters"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i6.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i6.DatePipe, name: "date" }] });
788
842
  }
789
843
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TicketsComponent, decorators: [{
790
844
  type: Component,
791
- args: [{ selector: "lib-tickets", template: "<div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span *ngIf=\"type !=='dataMismatch' && type !== 'mat'\" class=\"card-label mb-2\">{{type | titlecase}}</span>\r\n <span *ngIf=\"type ==='dataMismatch'\" class=\"card-label mb-2\">Data Mismatch</span>\r\n <span *ngIf=\"type ==='mat'\" class=\"card-label mb-2\">Employee Mat</span>\r\n\r\n <!-- <span class=\"text-sub mb-2\">Last updated 1 hour ago</span> -->\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div *ngIf=\"!assignTicket\" class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></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 type=\"text\" class=\"form-control ps-14 me-2\" placeholder=\"Search\" autocomplete=\"off\"\r\n (change)=\"searchData()\" [(ngModel)]=\"searchValue\" />\r\n <lib-filters *ngIf=\"users.userType === 'tango' && userList?.length || users.userType === 'client' && storeList?.length\" [dataObject]=\"dataObject\"\r\n (appliedFilters)=\"applyFilters($event)\"></lib-filters>\r\n\r\n <button type=\"button\" *ngIf=\"!noData&&!loading\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\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.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"assignTicket\" class=\"d-flex\">\r\n <button type=\"button\" (click)=\"addAssignTicket()\"\r\n class=\"btn mx-2 btn-primary rounded-3 text-nowrap border-val\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99984 4.1665V15.8332M4.1665 9.99984H15.8332\" stroke=\"white\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2 text-white\">Assign Ticket</span>\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body\">\r\n\r\n\r\n <ul *ngIf=\"!loading && listArray?.length && type !== 'mat' && type !== 'dataMismatch'\" class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap horizontal-scroll\">\r\n <li class=\"nav-item\" *ngFor=\"let obj of listArray.slice().reverse()\" (click)=\"selectedTabs(obj)\">\r\n <a [ngClass]=\"{'active': selectedTab === obj.name}\" class=\"nav-link cursor-pointer no-border me-2\">\r\n {{obj.name | titlecase}} <span class=\"mx-2\"\r\n [ngClass]=\"selectedTab === obj.name ? 'text-border-priamry' : 'text-border'\">{{obj.count}}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n <ul *ngIf=\"!loading && listArray?.length && type === 'dataMismatch'\" class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap horizontal-scroll\">\r\n <li class=\"nav-item\" *ngFor=\"let obj of listArray.slice().reverse()\" (click)=\"selectedTabs(obj)\">\r\n <a [ngClass]=\"selectedTab === transformName(obj.name) ? 'active' : ''\" class=\"nav-link cursor-pointer no-border me-2\">\r\n {{obj.name | titlecase}} <span class=\"mx-2\"\r\n [ngClass]=\"selectedTab === transformName(obj.name) ? 'text-border-priamry' : 'text-border'\">{{obj.count}}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n <div *ngIf=\"loading\" 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 <div *ngIf=\"noData\" class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"table-responsive mt-5\">\r\n <table class=\"table bottom-border text-nowrap \">\r\n <thead>\r\n <tr>\r\n <th class=\"cursor-pointer\" >\r\n \r\n <input *ngIf=\"this.users.userType ==='tango'\"\r\n class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\" [(ngModel)]=\"selectAll\"\r\n (click)=\"selectAllStore($event)\"> <span class=\"cursor-pointer\" (click)=\"onSort('ticketId')\"> Ticket ID <svg\r\n [ngClass]=\"sortedColumn === 'ticketId' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'ticketId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span> \r\n </th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type !=='dataMismatch'\" (click)=\"onSort('issueDate')\"> Created Date\r\n <svg [ngClass]=\"sortedColumn === 'issueDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='infra'\" (click)=\"onSort('createdAt')\"> Created Time\r\n <svg [ngClass]=\"sortedColumn === 'createdAt' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'createdAt' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='infra'\" (click)=\"onSort('issueClosedDate')\"> Closed Time\r\n <svg [ngClass]=\"sortedColumn === 'issueClosedDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueClosedDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('createdAt')\"> Created Date\r\n <svg [ngClass]=\"sortedColumn === 'createdAt' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'createdAt' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" ><span (click)=\"onSort('issueDate')\">Issue Date\r\n <svg [ngClass]=\"sortedColumn === 'issueDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"cursor-pointer\" *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"cursor-pointer\" (click)=\"onSort('clientName')\">Brand Name<svg\r\n [ngClass]=\"sortedColumn === 'clientName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clientName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"cursor-pointer\" (click)=\"onSort('clientId')\">Brand ID<svg\r\n [ngClass]=\"sortedColumn === 'clientId' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clientId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('storeName')\">Store Name<svg\r\n [ngClass]=\"sortedColumn === 'storeName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('storeId')\">Store ID<svg\r\n [ngClass]=\"sortedColumn === 'storeId' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"this.users.userType ==='tango' && (type ==='infra'||type ==='dataMismatch'||type ==='mat')\" (click)=\"onSort('userName')\">Resolved By<svg [ngClass]=\"sortedColumn === 'userName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'userName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"this.users.userType ==='tango' && type ==='installation'\" (click)=\"onSort('userName')\">Installed By<svg [ngClass]=\"sortedColumn === 'userName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'userName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('issueType')\">Issue Type\r\n <svg [ngClass]=\"sortedColumn === 'issueType' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueType' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('type')\">Query Type\r\n <svg [ngClass]=\"sortedColumn === 'type' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'type' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('reportedFootfall')\">Reported Footfall\r\n <svg [ngClass]=\"sortedColumn === 'reportedFootfall' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'reportedFootfall' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('mappedCount')\">Unique Images\r\n <svg [ngClass]=\"sortedColumn === 'mappedCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'mappedCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('successPercentage')\">Success Percentage\r\n <svg [ngClass]=\"sortedColumn === 'successPercentage' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'successPercentage' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='installation'\" (click)=\"onSort('status')\">Deployed Status<svg\r\n [ngClass]=\"sortedColumn === 'status' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'status' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type ==='dataMismatch' ||type ==='mat'|| type ==='infra'\" class=\"cursor-pointer\" (click)=\"onSort('status')\">Status<svg\r\n [ngClass]=\"sortedColumn === 'status' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'status' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n<!-- added config and total downtime as per the prioduct team requirement -->\r\n <th>Configured Ticket Time\r\n </th> \r\n\r\n <th >Total Downtime\r\n </th>\r\n<!-- -->\r\n\r\n <th *ngIf=\"type !== 'mat' && type !== 'dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('primaryIssue')\">Primary Issues<svg\r\n [ngClass]=\"sortedColumn === 'primaryIssue' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'primaryIssue' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type !== 'mat' && type !== 'dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('secondaryIssue')\">Secondary Issues<svg\r\n [ngClass]=\"sortedColumn === 'secondaryIssue' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'secondaryIssue' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type!=='installation'\">Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of tableListArray\">\r\n <td>\r\n <input *ngIf=\"this.users.userType ==='tango'\" class=\"form-check-input cursor-pointer me-4 mt-3\" type=\"checkbox\" [(ngModel)]=\"obj.checked\"\r\n (change)=\"updateCheck($event,obj?.ticketId)\">\r\n <span *ngIf=\"type === 'dataMismatch' || type === 'mat' || type === 'infra'\"\r\n class=\"txt-light-primary cursor-pointer\" (click)=\"tickets(type,obj.clientId,obj.storeId,obj.clientName)\">\r\n {{obj.ticketId}}\r\n </span>\r\n <span *ngIf=\"type === 'installation'\">\r\n {{obj.ticketId}}\r\n </span>\r\n </td>\r\n <td *ngIf=\"type === 'dataMismatch'\">\r\n {{obj?.createdAt |\r\n date: 'dd MMM, yyyy'}}</td>\r\n <td *ngIf=\"type === 'dataMismatch'\">\r\n {{obj?.issueDate |\r\n date: 'dd MMM, yyyy'}}</td>\r\n <td *ngIf=\"type !== 'dataMismatch'\">\r\n {{obj?.createdAt |\r\n date: 'dd MMM, yyyy'}}\r\n </td>\r\n <td *ngIf=\"type === 'infra'\">\r\n {{obj?.createdAt |\r\n date: 'hh:mm a' | uppercase}}\r\n </td>\r\n <td *ngIf=\"type === 'infra'\">\r\n {{obj?.issueClosedDate?(obj?.issueClosedDate |\r\n date: 'hh:mm a' | uppercase):\"--\"}}\r\n </td>\r\n <td *ngIf=\"this.users.userType ==='tango'\">\r\n <div class=\"table-title cursor-pointer\" (click)=\"clientTickets(obj.clientId,obj.storeId,obj.clientName)\">\r\n <span class=\"txt-light-primary\">\r\n {{obj.clientName}}\r\n </span>\r\n </div>\r\n </td>\r\n <td *ngIf=\"this.users.userType ==='tango'\">{{obj.clientId}}\r\n </td>\r\n <td>\r\n <div class=\"table-title cursor-pointer\" (click)=\"storeTickets(obj.clientId,obj.storeId,obj.clientName)\">\r\n <span class=\"txt-light-primary\">\r\n {{obj.storeName}}\r\n </span>\r\n </div>\r\n </td>\r\n <td>{{obj.storeId}}\r\n </td>\r\n \r\n <td *ngIf=\"this.users.userType ==='tango'\">\r\n <div class=\"table-title cursor-pointer\" >\r\n <span >\r\n {{obj.userName}}\r\n </span>\r\n </div>\r\n </td>\r\n <td *ngIf=\"type ==='dataMismatch' && obj.issueType ==='lowcount'\" >Low Count</td>\r\n <td *ngIf=\"type ==='dataMismatch' && obj.issueType ==='highcount'\">High Count</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.type ? obj?.type:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.reportedFootfall ? obj?.reportedFootfall:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.mappedCount ? obj?.mappedCount:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.successPercentage ? obj?.successPercentage:'--'}}</td>\r\n <td *ngIf=\"type==='installation'\">\r\n <span *ngIf=\"obj.installationStatus ==='paired' || obj.installationStatus ==='onboarded'\"\r\n class=\"badge badge-light-primary mx-4\">{{obj.installationStatus | titlecase}}</span>\r\n <span *ngIf=\"obj.installationStatus ==='live'\" class=\"badge badge-light-success mx-4\">Live</span>\r\n <span *ngIf=\"obj.installationStatus ==='installationfailed'\"\r\n class=\"badge badge-light-warning mx-4\">Installationfailed</span>\r\n <span *ngIf=\"obj.installationStatus ==='deployed'\"\r\n class=\"badge badge-light-success mx-4 text-capitalize\">deployed</span>\r\n </td>\r\n <td *ngIf=\"type==='infra' || type==='mat' || type==='dataMismatch'\">\r\n <span *ngIf=\"obj.status ==='open'\" class=\"badge badge-light-danger\">Open</span>\r\n <span *ngIf=\"obj.status ==='closed'\" class=\"badge badge-light-success\">Closed</span>\r\n <span *ngIf=\"obj.status ==='inprogress'\" class=\"badge badge-light-primary\">In\r\n Progress</span>\r\n </td>\r\n <td *ngIf=\"type==='infra'\">\r\n{{obj.configuredDownTime?obj.configuredDownTime*60:0 || 0 }} {{obj.configuredDownTime > 1? 'mins' : 'min'}} \r\n </td>\r\n <td *ngIf=\"type==='infra'\"> \r\n{{obj.totalDownTime || 0 }} {{obj.totalDownTime > 1? 'mins' : 'min'}} \r\n </td>\r\n <td *ngIf=\"type==='installation' || type==='infra'\">\r\n <div>\r\n <span *ngIf=\"obj.primaryIssue !=='-'\">{{obj.primaryIssue ? obj.primaryIssue :'Issue not identified'}}</span>\r\n <span *ngIf=\"obj.primaryIssue ==='-'\">Issue not identified</span>\r\n </div>\r\n </td>\r\n <td *ngIf=\"type==='installation' || type==='infra'\">\r\n <span *ngIf=\"obj.secondaryIssue\">{{obj.secondaryIssue}}</span>\r\n </td>\r\n <td *ngIf=\"type==='infra' || type ==='dataMismatch'\">\r\n <span class=\"mx-2 cursor-pointer\" *ngIf=\"this.users.userType ==='tango'\" (click)=\"commentModal(obj)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <path\r\n d=\"M17.6431 12.5C17.6431 12.942 17.4675 13.366 17.1549 13.6785C16.8423 13.9911 16.4184 14.1667 15.9764 14.1667H5.9764L2.64307 17.5V4.16667C2.64307 3.72464 2.81866 3.30072 3.13122 2.98816C3.44378 2.67559 3.86771 2.5 4.30973 2.5H15.9764C16.4184 2.5 16.8423 2.67559 17.1549 2.98816C17.4675 3.30072 17.6431 3.72464 17.6431 4.16667V12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <span class=\"mx-2 cursor-pointer\" (click)=\"tickets(type,obj.clientId,obj.storeId,obj.clientName)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10640_18061)\">\r\n <path\r\n d=\"M0.976562 10C0.976562 10 4.3099 3.33337 10.1432 3.33337C15.9766 3.33337 19.3099 10 19.3099 10C19.3099 10 15.9766 16.6667 10.1432 16.6667C4.3099 16.6667 0.976562 10 0.976562 10Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.1432 12.5C11.5239 12.5 12.6432 11.3808 12.6432 10C12.6432 8.61933 11.5239 7.50004 10.1432 7.50004C8.76252 7.50004 7.64323 8.61933 7.64323 10C7.64323 11.3808 8.76252 12.5 10.1432 12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_10640_18061\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.143066)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </td>\r\n <td *ngIf=\"type === 'mat'\">\r\n <span class=\"mx-2 cursor-pointer\" (click)=\"routeToMat(obj.storeId,obj.clientId,obj.clientName)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10640_18061)\">\r\n <path\r\n d=\"M0.976562 10C0.976562 10 4.3099 3.33337 10.1432 3.33337C15.9766 3.33337 19.3099 10 19.3099 10C19.3099 10 15.9766 16.6667 10.1432 16.6667C4.3099 16.6667 0.976562 10 0.976562 10Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.1432 12.5C11.5239 12.5 12.6432 11.3808 12.6432 10C12.6432 8.61933 11.5239 7.50004 10.1432 7.50004C8.76252 7.50004 7.64323 8.61933 7.64323 10C7.64323 11.3808 8.76252 12.5 10.1432 12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_10640_18061\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.143066)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span> \r\n \r\n </td>\r\n \r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"my-3\">\r\n <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n</div>", styles: [".nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.text-border{border-radius:16px!important;background:var(--Gray-100, #F2F4F7)!important;color:var(--Gray-700, #344054);text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important}.text-border-priamry{border-radius:16px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.text-sub{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-weight:400!important;line-height:20px}.border-val{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}td{vertical-align:middle;line-height:35px!important}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-weight:500!important}.table-sub{line-height:30px!important;color:var(--Gray-500, #667085)!important}.txt-light-primary{color:#009bf3!important}input[type=checkbox]{width:16px!important;height:16px!important;margin:0 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}.img-src{width:25%;height:20%}.rotate{rotate:180deg;transition:1s}.viewbutton{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);box-shadow:0 1px 2px #1018280d;padding:10px 16px;justify-content:center;align-items:center;gap:10px;color:var(--Gray-700, #344054);font-family:Inter;font-size:12px;font-weight:600}.horizontal-scroll{overflow-x:auto;overflow-y:hidden;white-space:nowrap}\n"] }]
845
+ args: [{ selector: "lib-tickets", template: "<div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span *ngIf=\"type !=='dataMismatch' && type !== 'mat'\" class=\"card-label mb-2\">{{type | titlecase}}</span>\r\n <span *ngIf=\"type ==='dataMismatch'\" class=\"card-label mb-2\">Data Mismatch</span>\r\n <span *ngIf=\"type ==='mat'\" class=\"card-label mb-2\">Employee Mat</span>\r\n\r\n <!-- <span class=\"text-sub mb-2\">Last updated 1 hour ago</span> -->\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div *ngIf=\"!assignTicket\" class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></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 type=\"text\" class=\"form-control ps-14 me-2\" placeholder=\"Search\" autocomplete=\"off\"\r\n (change)=\"searchData()\" [(ngModel)]=\"searchValue\" />\r\n <lib-filters *ngIf=\"users.userType === 'tango' && userList?.length || users.userType === 'client' && storeList?.length\" [dataObject]=\"dataObject\"\r\n (appliedFilters)=\"applyFilters($event)\"></lib-filters>\r\n\r\n <button type=\"button\" *ngIf=\"!noData&&!loading\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\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.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"assignTicket\" class=\"d-flex\">\r\n <button type=\"button\" (click)=\"addAssignTicket()\"\r\n class=\"btn mx-2 btn-primary rounded-3 text-nowrap border-val\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99984 4.1665V15.8332M4.1665 9.99984H15.8332\" stroke=\"white\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2 text-white\">Assign Ticket</span>\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body\">\r\n\r\n\r\n <ul *ngIf=\"!loading && listArray?.length && type !== 'mat' && type !== 'dataMismatch'\" class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap horizontal-scroll\">\r\n <li class=\"nav-item\" *ngFor=\"let obj of listArray.slice().reverse()\" (click)=\"selectedTabs(obj)\">\r\n <a [ngClass]=\"{'active': selectedTab === obj.name}\" class=\"nav-link cursor-pointer no-border me-2\">\r\n {{obj.name | titlecase}} <span class=\"mx-2\"\r\n [ngClass]=\"selectedTab === obj.name ? 'text-border-priamry' : 'text-border'\">{{obj.count}}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n <ul *ngIf=\"!loading && listArray?.length && type === 'dataMismatch'\" class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap horizontal-scroll\">\r\n <li class=\"nav-item\" *ngFor=\"let obj of listArray.slice().reverse()\" (click)=\"selectedTabs(obj)\">\r\n <a [ngClass]=\"selectedTab === transformName(obj.name) ? 'active' : ''\" class=\"nav-link cursor-pointer no-border me-2\">\r\n {{obj.name | titlecase}} <span class=\"mx-2\"\r\n [ngClass]=\"selectedTab === transformName(obj.name) ? 'text-border-priamry' : 'text-border'\">{{obj.count}}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n <div *ngIf=\"loading\" 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 <div *ngIf=\"noData\" class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"table-responsive mt-5\">\r\n <table class=\"table bottom-border text-nowrap \">\r\n <thead>\r\n <tr>\r\n <th class=\"cursor-pointer\" >\r\n \r\n <input *ngIf=\"this.users.userType ==='tango'\"\r\n class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\" [(ngModel)]=\"selectAll\"\r\n (click)=\"selectAllStore($event)\"> <span class=\"cursor-pointer\" (click)=\"onSort('ticketId')\"> Ticket ID <svg\r\n [ngClass]=\"sortedColumn === 'ticketId' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'ticketId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span> \r\n </th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type !=='dataMismatch'\" (click)=\"onSort('issueDate')\"> Created Date\r\n <svg [ngClass]=\"sortedColumn === 'issueDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='infra'\" (click)=\"onSort('createdAt')\"> Created Time\r\n <svg [ngClass]=\"sortedColumn === 'createdAt' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'createdAt' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='infra'\" (click)=\"onSort('issueClosedDate')\"> Closed Date\r\n <svg [ngClass]=\"sortedColumn === 'issueClosedDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueClosedDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='infra'\" (click)=\"onSort('issueClosedDate')\"> Closed Time\r\n <svg [ngClass]=\"sortedColumn === 'issueClosedDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueClosedDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('createdAt')\"> Created Date\r\n <svg [ngClass]=\"sortedColumn === 'createdAt' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'createdAt' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" ><span (click)=\"onSort('issueDate')\">Issue Date\r\n <svg [ngClass]=\"sortedColumn === 'issueDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"cursor-pointer\" *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"cursor-pointer\" (click)=\"onSort('clientName')\">Brand Name<svg\r\n [ngClass]=\"sortedColumn === 'clientName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clientName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"cursor-pointer\" (click)=\"onSort('clientId')\">Brand ID<svg\r\n [ngClass]=\"sortedColumn === 'clientId' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clientId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('storeName')\">Store Name<svg\r\n [ngClass]=\"sortedColumn === 'storeName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('storeId')\">Store ID<svg\r\n [ngClass]=\"sortedColumn === 'storeId' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"this.users.userType ==='tango' && (type ==='infra'||type ==='dataMismatch'||type ==='mat')\" (click)=\"onSort('userName')\">Resolved By<svg [ngClass]=\"sortedColumn === 'userName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'userName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"this.users.userType ==='tango' && type ==='installation'\" (click)=\"onSort('userName')\">Installed By<svg [ngClass]=\"sortedColumn === 'userName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'userName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('issueType')\">Issue Type\r\n <svg [ngClass]=\"sortedColumn === 'issueType' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueType' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('type')\">Query Type\r\n <svg [ngClass]=\"sortedColumn === 'type' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'type' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('reportedFootfall')\">Reported Footfall\r\n <svg [ngClass]=\"sortedColumn === 'reportedFootfall' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'reportedFootfall' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('mappedCount')\">Unique Images\r\n <svg [ngClass]=\"sortedColumn === 'mappedCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'mappedCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('successPercentage')\">Success Percentage\r\n <svg [ngClass]=\"sortedColumn === 'successPercentage' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'successPercentage' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='installation'\" (click)=\"onSort('status')\">Deployed Status<svg\r\n [ngClass]=\"sortedColumn === 'status' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'status' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type ==='dataMismatch' ||type ==='mat'|| type ==='infra'\" class=\"cursor-pointer\" (click)=\"onSort('status')\">Status<svg\r\n [ngClass]=\"sortedColumn === 'status' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'status' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n<!-- added config and total downtime as per the prioduct team requirement -->\r\n <th *ngIf=\"type==='infra'\">Configured Ticket Time\r\n </th> \r\n\r\n <th *ngIf=\"type==='infra'\" >Total Downtime\r\n </th>\r\n<!-- -->\r\n\r\n <th *ngIf=\"type !== 'mat' && type !== 'dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('primaryIssue')\">Primary Issues<svg\r\n [ngClass]=\"sortedColumn === 'primaryIssue' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'primaryIssue' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type !== 'mat' && type !== 'dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('secondaryIssue')\">Secondary Issues<svg\r\n [ngClass]=\"sortedColumn === 'secondaryIssue' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'secondaryIssue' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type!=='installation'\">Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of tableListArray\">\r\n <td>\r\n <input *ngIf=\"this.users.userType ==='tango'\" class=\"form-check-input cursor-pointer me-4 mt-3\" type=\"checkbox\" [(ngModel)]=\"obj.checked\"\r\n (change)=\"updateCheck($event,obj?.ticketId)\">\r\n <span *ngIf=\"type === 'dataMismatch' || type === 'mat' || type === 'infra'\"\r\n class=\"txt-light-primary cursor-pointer\" (click)=\"tickets(type,obj.clientId,obj.storeId,obj.clientName)\">\r\n {{obj.ticketId}}\r\n </span>\r\n <span *ngIf=\"type === 'installation'\">\r\n {{obj.ticketId}}\r\n </span>\r\n </td>\r\n <td *ngIf=\"type === 'dataMismatch'\">\r\n {{obj?.createdAt |\r\n date: 'dd MMM, yyyy'}}</td>\r\n <td *ngIf=\"type === 'dataMismatch'\">\r\n {{obj?.issueDate |\r\n date: 'dd MMM, yyyy'}}</td>\r\n <td *ngIf=\"type !== 'dataMismatch'\">\r\n {{obj?.createdAt |\r\n date: 'dd MMM, yyyy'}}\r\n </td>\r\n <td *ngIf=\"type === 'infra'\">\r\n {{obj?.createdAt |\r\n date: 'hh:mm a' | uppercase}}\r\n </td>\r\n <td *ngIf=\"type === 'infra'\">\r\n {{obj?.issueClosedDate?(obj?.issueClosedDate |\r\n date: 'dd MMM, yyyy'):\"--\"}}\r\n </td>\r\n <td *ngIf=\"type === 'infra'\">\r\n {{obj?.issueClosedDate?(obj?.issueClosedDate |\r\n date: 'hh:mm a' | uppercase):\"--\"}}\r\n </td>\r\n <td *ngIf=\"this.users.userType ==='tango'\">\r\n <div class=\"table-title cursor-pointer\" (click)=\"clientTickets(obj.clientId,obj.storeId,obj.clientName)\">\r\n <span class=\"txt-light-primary\">\r\n {{obj.clientName}}\r\n </span>\r\n </div>\r\n </td>\r\n <td *ngIf=\"this.users.userType ==='tango'\">{{obj.clientId}}\r\n </td>\r\n <td>\r\n <div class=\"table-title cursor-pointer\" (click)=\"storeTickets(obj.clientId,obj.storeId,obj.clientName)\">\r\n <span class=\"txt-light-primary\">\r\n {{obj.storeName}}\r\n </span>\r\n </div>\r\n </td>\r\n <td>{{obj.storeId}}\r\n </td>\r\n \r\n <td *ngIf=\"this.users.userType ==='tango'\">\r\n <div class=\"table-title cursor-pointer\" >\r\n <span >\r\n {{obj.userName}}\r\n </span>\r\n </div>\r\n </td>\r\n <td *ngIf=\"type ==='dataMismatch' && obj.issueType ==='lowcount'\" >Low Count</td>\r\n <td *ngIf=\"type ==='dataMismatch' && obj.issueType ==='highcount'\">High Count</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.type ? obj?.type:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.reportedFootfall ? obj?.reportedFootfall:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.mappedCount ? obj?.mappedCount:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.successPercentage ? obj?.successPercentage:'--'}}</td>\r\n <td *ngIf=\"type==='installation'\">\r\n <span *ngIf=\"obj.installationStatus ==='paired' || obj.installationStatus ==='onboarded'\"\r\n class=\"badge badge-light-primary mx-4\">{{obj.installationStatus | titlecase}}</span>\r\n <span *ngIf=\"obj.installationStatus ==='live'\" class=\"badge badge-light-success mx-4\">Live</span>\r\n <span *ngIf=\"obj.installationStatus ==='installationfailed'\"\r\n class=\"badge badge-light-warning mx-4\">Installationfailed</span>\r\n <span *ngIf=\"obj.installationStatus ==='deployed'\"\r\n class=\"badge badge-light-success mx-4 text-capitalize\">deployed</span>\r\n </td>\r\n <td *ngIf=\"type==='infra' || type==='mat' || type==='dataMismatch'\">\r\n <span *ngIf=\"obj.status ==='open'\" class=\"badge badge-light-danger\">Open</span>\r\n <span *ngIf=\"obj.status ==='closed'\" class=\"badge badge-light-success\">Closed</span>\r\n <span *ngIf=\"obj.status ==='inprogress'\" class=\"badge badge-light-primary\">In\r\n Progress</span>\r\n </td>\r\n <td *ngIf=\"type==='infra'\">\r\n{{obj.configuredDownTime?obj.configuredDownTime*60:0 || 0 }} {{obj.configuredDownTime > 1? 'mins' : 'min'}} \r\n </td>\r\n <td *ngIf=\"type==='infra'\"> \r\n{{obj.totalDownTime || 0 }} {{obj.totalDownTime > 1? 'mins' : 'min'}} \r\n </td>\r\n <td *ngIf=\"type==='installation' || type==='infra'\">\r\n <div>\r\n <span *ngIf=\"obj.primaryIssue !=='-'\">{{obj.primaryIssue ? obj.primaryIssue :'Issue not identified'}}</span>\r\n <span *ngIf=\"obj.primaryIssue ==='-'\">Issue not identified</span>\r\n </div>\r\n </td>\r\n <td *ngIf=\"type==='installation' || type==='infra'\">\r\n <span *ngIf=\"obj.secondaryIssue\">{{obj.secondaryIssue}}</span>\r\n </td>\r\n <td *ngIf=\"type==='infra' || type ==='dataMismatch'\">\r\n <span class=\"mx-2 cursor-pointer\" *ngIf=\"this.users.userType ==='tango'\" (click)=\"commentModal(obj)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <path\r\n d=\"M17.6431 12.5C17.6431 12.942 17.4675 13.366 17.1549 13.6785C16.8423 13.9911 16.4184 14.1667 15.9764 14.1667H5.9764L2.64307 17.5V4.16667C2.64307 3.72464 2.81866 3.30072 3.13122 2.98816C3.44378 2.67559 3.86771 2.5 4.30973 2.5H15.9764C16.4184 2.5 16.8423 2.67559 17.1549 2.98816C17.4675 3.30072 17.6431 3.72464 17.6431 4.16667V12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <span class=\"mx-2 cursor-pointer\" (click)=\"tickets(type,obj.clientId,obj.storeId,obj.clientName)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10640_18061)\">\r\n <path\r\n d=\"M0.976562 10C0.976562 10 4.3099 3.33337 10.1432 3.33337C15.9766 3.33337 19.3099 10 19.3099 10C19.3099 10 15.9766 16.6667 10.1432 16.6667C4.3099 16.6667 0.976562 10 0.976562 10Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.1432 12.5C11.5239 12.5 12.6432 11.3808 12.6432 10C12.6432 8.61933 11.5239 7.50004 10.1432 7.50004C8.76252 7.50004 7.64323 8.61933 7.64323 10C7.64323 11.3808 8.76252 12.5 10.1432 12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_10640_18061\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.143066)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </td>\r\n <td *ngIf=\"type === 'mat'\">\r\n <span class=\"mx-2 cursor-pointer\" (click)=\"routeToMat(obj.storeId,obj.clientId,obj.clientName)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10640_18061)\">\r\n <path\r\n d=\"M0.976562 10C0.976562 10 4.3099 3.33337 10.1432 3.33337C15.9766 3.33337 19.3099 10 19.3099 10C19.3099 10 15.9766 16.6667 10.1432 16.6667C4.3099 16.6667 0.976562 10 0.976562 10Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.1432 12.5C11.5239 12.5 12.6432 11.3808 12.6432 10C12.6432 8.61933 11.5239 7.50004 10.1432 7.50004C8.76252 7.50004 7.64323 8.61933 7.64323 10C7.64323 11.3808 8.76252 12.5 10.1432 12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_10640_18061\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.143066)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span> \r\n \r\n </td>\r\n \r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"my-3\">\r\n <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n</div>", styles: [".nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.text-border{border-radius:16px!important;background:var(--Gray-100, #F2F4F7)!important;color:var(--Gray-700, #344054);text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important}.text-border-priamry{border-radius:16px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.text-sub{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-weight:400!important;line-height:20px}.border-val{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}td{vertical-align:middle;line-height:35px!important}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-weight:500!important}.table-sub{line-height:30px!important;color:var(--Gray-500, #667085)!important}.txt-light-primary{color:#009bf3!important}input[type=checkbox]{width:16px!important;height:16px!important;margin:0 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}.img-src{width:25%;height:20%}.rotate{rotate:180deg;transition:1s}.viewbutton{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);box-shadow:0 1px 2px #1018280d;padding:10px 16px;justify-content:center;align-items:center;gap:10px;color:var(--Gray-700, #344054);font-family:Inter;font-size:12px;font-weight:600}.horizontal-scroll{overflow-x:auto;overflow-y:hidden;white-space:nowrap}\n"] }]
792
846
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.GlobalStateService }, { type: i3.NgbModal }, { type: i4.TicketService }, { type: i5.ExcelService }] });
793
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlja2V0cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2UtdGlja2V0cy9zcmMvbGliL2NvbXBvbmVudHMvdGlja2V0cy90aWNrZXRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS10aWNrZXRzL3NyYy9saWIvY29tcG9uZW50cy90aWNrZXRzL3RpY2tldHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBR2hGLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBR2hGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7Ozs7O0FBTWpGLE1BQU0sT0FBTyxnQkFBZ0I7SUF5Q2pCO0lBQ0E7SUFDQTtJQUNEO0lBQ0M7SUFDQTtJQUNBO0lBOUNWLElBQUksR0FBRyxPQUFPLENBQUM7SUFDZixXQUFXLEdBQVEsRUFBRSxDQUFDO0lBQ3RCLFdBQVcsR0FBUSxPQUFPLENBQUM7SUFDM0Isc0JBQXNCO0lBQ3RCLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDbEIsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUNoQixVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsZUFBZSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMvQixRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ0csUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDMUMsWUFBWSxHQUFZLEtBQUssQ0FBQztJQUM5QixjQUFjLEdBQVEsRUFBRSxDQUFDO0lBQ3pCLGlCQUFpQixHQUFRLEVBQUUsQ0FBQztJQUM1QixjQUFjLEdBQVEsRUFBRSxDQUFDO0lBQ3pCLGlCQUFpQixHQUFRLEVBQUUsQ0FBQztJQUM1QixTQUFTLEdBQVEsRUFBRSxDQUFDO0lBQ3BCLFlBQVksQ0FBUztJQUNyQixhQUFhLENBQVM7SUFDdEIsYUFBYSxDQUFNO0lBQ25CLFlBQVksQ0FBTTtJQUNsQixRQUFRLEdBQVEsRUFBRSxDQUFDO0lBQ25CLFVBQVUsR0FBTSxFQUFFLENBQUM7SUFDbkIsU0FBUyxHQUFRLEVBQUUsQ0FBQztJQUNwQixVQUFVLENBQWlDO0lBQzNDLFFBQVEsQ0FBUztJQUNqQixLQUFLLENBQU07SUFDWCxLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLE1BQU0sR0FBVyxDQUFDLENBQUM7SUFDbkIsTUFBTSxHQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLGFBQWEsR0FBUSxFQUFFLENBQUM7SUFDeEIsU0FBUyxHQUFRLEVBQUUsQ0FBQztJQUNwQixjQUFjLEdBQVEsRUFBRSxDQUFDO0lBQ3pCLE9BQU8sR0FBWSxJQUFJLENBQUM7SUFDeEIsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixTQUFTLEdBQVEsS0FBSyxDQUFDO0lBQ3ZCLFlBQVksR0FBUSxFQUFFLENBQUM7SUFDdkIsYUFBYSxHQUFNLEVBQUUsQ0FBQztJQUN0QixhQUFhLEdBQU0sRUFBRSxDQUFDO0lBRXRCLFlBQ1UsRUFBcUIsRUFDckIsTUFBYyxFQUNkLEtBQXFCLEVBQ3RCLEVBQXNCLEVBQ3JCLFlBQXNCLEVBQ3RCLE9BQXNCLEVBQ3RCLFlBQTBCO1FBTjFCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUN0QixPQUFFLEdBQUYsRUFBRSxDQUFvQjtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUN0QixZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQ3RCLGlCQUFZLEdBQVosWUFBWSxDQUFjO0lBQ2pDLENBQUM7SUFFSixRQUFRO1FBQ04sTUFBTSxRQUFRLEdBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVztZQUNyQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQy9CLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsY0FBYyxHQUFFLEVBQUUsQ0FBQztZQUFDLElBQUksQ0FBQyxTQUFTLEdBQUMsRUFBRSxDQUFBO1lBQzFDLElBQUksQ0FBQyxpQkFBaUIsR0FBQyxFQUFFLENBQUM7WUFBQyxJQUFJLENBQUMsVUFBVSxHQUFFLEVBQUUsQ0FBQTtZQUM5QyxJQUFJLENBQUMsY0FBYyxHQUFFLEVBQUUsQ0FBQztZQUFDLElBQUksQ0FBQyxRQUFRLEdBQUMsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxTQUFTLEdBQUMsRUFBRSxDQUFDO1lBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRSxFQUFFLENBQUE7WUFDekMsSUFBSSxDQUFDLGlCQUFpQixHQUFFLEVBQUUsQ0FBQztZQUFDLElBQUksQ0FBQyxhQUFhLEdBQUMsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxVQUFVLEdBQUMsRUFBRSxDQUFBO1lBQ2xCLElBQUksQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3ZDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQztnQkFDaEUsSUFBSSxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUU7b0JBQ2xCLElBQUksSUFBSSxFQUFFO3dCQUNSLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO3dCQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHOzRCQUNsQixLQUFLLEVBQUUsS0FBSzs0QkFDWixNQUFNLEVBQUUsQ0FBQzs0QkFDVCxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO3lCQUM5QixDQUFDO3dCQUNGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztxQkFDdkI7Z0JBQ0gsQ0FBQzthQUNGLENBQUMsQ0FBQztZQUNILElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO2dCQUMvQixJQUFJLENBQUMsVUFBVSxHQUFHO29CQUNoQixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRTtvQkFDdEMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUU7b0JBQ2hDLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBRTtvQkFDeEQsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUU7aUJBQ3JDLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQztnQkFFOUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxPQUFPLElBQUssSUFBSSxDQUFDLElBQUksS0FBSSxPQUFPLEVBQUM7b0JBQzNELElBQUksQ0FBQyxVQUFVLEdBQUk7d0JBQ2pCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFO3dCQUM1QixFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRTt3QkFDekMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRTt3QkFDL0MsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUU7cUJBQ2pDLENBQUM7aUJBQ0w7cUJBQUk7b0JBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRzt3QkFDaEIsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUU7d0JBQzVCLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFO3dCQUN6QyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRTtxQkFDakMsQ0FBQztpQkFDSDtnQkFDQyxJQUFJLENBQUMsYUFBYSxHQUFHO29CQUNuQixFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRTtvQkFDdkMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUU7aUJBQ3RDLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGFBQWEsR0FBRztvQkFDbkIsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUU7b0JBQ3BDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFO2lCQUNyQyxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBQyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNELGNBQWM7UUFDWixJQUFJLENBQUMsT0FBTzthQUNULGFBQWEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFDLFFBQVEsRUFBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQzNFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNuQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztvQkFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTt3QkFDdEMsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO3dCQUMvQixPQUFPLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7b0JBQy9CLENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssT0FBTyxFQUFDO3dCQUNqQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7cUJBQ3BCO3lCQUFNO3dCQUNMLElBQUcsSUFBSSxDQUFDLElBQUksS0FBSSxjQUFjLEVBQUM7NEJBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUc7Z0NBQ2hCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQ0FDbkQsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7NkJBQzVELENBQUM7eUJBQ0g7NkJBQU0sSUFBRyxJQUFJLENBQUMsSUFBSSxLQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFJLGNBQWMsRUFBQzs0QkFDNUQsSUFBSSxDQUFDLFVBQVUsR0FBRztnQ0FDaEIsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO2dDQUNuRCxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7NkJBQ25ELENBQUM7eUJBQ0g7NkJBQUssSUFBRyxJQUFJLENBQUMsSUFBSSxLQUFJLEtBQUssRUFBRTs0QkFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRztnQ0FDaEIsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFOzZCQUNuRCxDQUFDO3lCQUNIO3FCQUNBO29CQUNELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztpQkFDakI7cUJBQUk7b0JBQ0YsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2lCQUNsQjtZQUNILENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFCLENBQUM7WUFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztTQUNyQixDQUFDLENBQUM7SUFDSCxDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxPQUFPO2FBQ1QsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7YUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDdEIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7b0JBQ3RDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztvQkFDaEMsT0FBTyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUM3QixDQUFDLENBQUMsQ0FBQzthQUNKO1lBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFJLGNBQWMsQ0FBQyxFQUFFO2dCQUNwRSxJQUFJLENBQUMsVUFBVSxHQUFHO29CQUNoQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ25ELEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUMzRCxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO2lCQUN0RCxDQUFDO2FBQ0Y7aUJBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxPQUFPLElBQUssSUFBSSxDQUFDLElBQUksS0FBSSxPQUFPLEVBQUU7Z0JBQ3BFLElBQUksQ0FBQyxVQUFVLEdBQUc7b0JBQ2hCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtvQkFDbkQsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNsRCxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO2lCQUN0RCxDQUFDO2FBQ0Y7aUJBQU0sSUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksS0FBSSxjQUFjLEVBQUM7Z0JBQ3hFLElBQUksQ0FBQyxVQUFVLEdBQUc7b0JBQ2hCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtvQkFDbkQsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUN6RCxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7aUJBQ25ELENBQUM7YUFDRjtpQkFBTSxJQUFHLElBQUksQ0FBQyxJQUFJLEtBQUksS0FBSyxFQUFDO2dCQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHO29CQUNoQixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7aUJBQ25ELENBQUM7YUFDRjtRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFDRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBQyxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFjO1FBQ25CLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxNQUFNLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4RDthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7WUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7U0FDeEI7UUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUNELFVBQVU7UUFDUixJQUFJLEdBQUcsR0FBd0I7WUFDN0IsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTztZQUNyQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUztZQUM3QyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsT0FBTztZQUN6QyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3JELFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3JELE1BQU0sRUFBRSxJQUFJO1NBQ2IsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixHQUFHLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDdEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQ2pDO1FBQ0QsSUFBRyxJQUFJLENBQUMsSUFBSSxLQUFLLGNBQWMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBQztZQUN2RCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFO2dCQUMvQixHQUFHLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNwRTtZQUNELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUU7Z0JBQy9CLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ25FO1lBQ0QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFO2dCQUNsQyxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDdkU7U0FDRjthQUFLLElBQUcsSUFBSSxDQUFDLElBQUksS0FBSSxLQUFLLEVBQUM7WUFDMUIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRTtnQkFDL0IsR0FBRyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDbkU7U0FDRjthQUFPO1lBQ04sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRTtnQkFDL0IsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDckU7WUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFO2dCQUMvQixHQUFHLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNyRTtZQUNELElBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBQztnQkFDaEMsR0FBRyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDaEY7U0FDRjtRQUNDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUU7WUFDaEMsSUFBSSxDQUFDLE9BQU87aUJBQ1Qsc0JBQXNCLENBQUMsR0FBRyxDQUFDO2lCQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDOUIsU0FBUyxDQUFDO2dCQUNULElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUE7Z0JBRXhELENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDbkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQztnQkFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQzthQUNuQixDQUFDLENBQUM7U0FDTjthQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7WUFDaEMsSUFBSSxDQUFDLE9BQU87aUJBQ1QsZUFBZSxDQUFDLEdBQUcsQ0FBQztpQkFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzlCLFNBQVMsQ0FBQztnQkFDVCxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFFZixJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7Z0JBRW5ELENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDbkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQztnQkFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQzthQUNuQixDQUFDLENBQUM7U0FDTjthQUFPLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7WUFDL0IsSUFBSSxDQUFDLE9BQU87aUJBQ1QsYUFBYSxDQUFDLEdBQUcsQ0FBQztpQkFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzlCLFNBQVMsQ0FBQztnQkFDVCxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFFZixJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUE7Z0JBRWpELENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDbkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQztnQkFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQzthQUNuQixDQUFDLENBQUM7U0FDTjthQUFLLElBQUcsSUFBSSxDQUFDLElBQUksS0FBRyxjQUFjLEVBQUM7WUFDbEMsSUFBSSxDQUFDLE9BQU87aUJBQ1gsc0JBQXNCLENBQUMsR0FBRyxDQUFDO2lCQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDOUIsU0FBUyxDQUFDO2dCQUNULElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUE7Z0JBQ3pELENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDbkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQztnQkFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQzthQUNuQixDQUFDLENBQUM7U0FDSjtJQUlILENBQUM7SUFFRCxZQUFZLENBQUMsSUFBUztRQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFDLEVBQUUsQ0FBQztRQUNkLElBQUcsSUFBSSxDQUFDLElBQUksS0FBSSxjQUFjLEVBQUM7WUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNyRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUNELGFBQWEsQ0FBQyxJQUFZO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV0RCxDQUFDO0lBQ0QsWUFBWSxDQUFDLFVBQWtCO1FBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUUsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFnQjtRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUNELGNBQWMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMxRSxvR0FBb0c7UUFDcEcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUztZQUNoQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDckQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLCtDQUErQztJQUNyRixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVUsRUFBRSxRQUFhO1FBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUNyQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQ3hDLENBQUM7UUFFRixJQUFJLE1BQU0sRUFBRTtZQUNWLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDdEMsNkZBQTZGO1lBQzdGLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ2xDO2lCQUFNO2dCQUNMLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNwQzthQUNGO1lBQ0QsNERBQTREO1lBQzVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0RSxpRkFBaUY7WUFDakYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3pFO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM1RCxRQUFRLEVBQUUsSUFBSTtZQUNkLElBQUksRUFBRSxJQUFJO1lBQ1YsVUFBVSxFQUFFLElBQUk7WUFDaEIsUUFBUSxFQUFDLFFBQVE7U0FDbEIsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3hELFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDOUIsSUFBSSxNQUFNLEtBQUssUUFBUSxFQUFFO2dCQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ2pCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQVU7UUFDckIsSUFBSSxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQ2pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxPQUFPLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRTtvQkFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2lCQUNqRTtnQkFDRixJQUFHLElBQUksQ0FBQyxJQUFJLEtBQUksY0FBYyxFQUFDO29CQUM5QixJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFO3dCQUNwQyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7cUJBQ2pFO2lCQUNGO2dCQUFDLElBQUcsSUFBSSxDQUFDLElBQUksS0FBRyxjQUFjLEVBQUM7b0JBQzlCLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxpQkFBaUIsRUFBRTt3QkFDN0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3FCQUNqRTtpQkFDRjtnQkFDQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUksY0FBYyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUcsT0FBTyxDQUFDLEVBQUU7b0JBQzNGLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO3dCQUN6QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztxQkFDcEU7aUJBQ0Y7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztpQkFDN0I7Z0JBQ0QsSUFBSSxPQUFPLENBQUMsV0FBVyxLQUFLLFlBQVksRUFBRTtvQkFDeEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7aUJBQ3BFO2dCQUNELDhDQUE4QztnQkFDOUMsZ0VBQWdFO2dCQUNoRSxJQUFJO1lBQ04sQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUMsRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxHQUFHLEdBQXdCO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU87WUFDckMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLFNBQVM7WUFDN0MsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLE9BQU87WUFDekMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyRCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyRCxNQUFNLEVBQUUsS0FBSztTQUNkLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBRyxJQUFJLENBQUMsSUFBSSxLQUFJLGNBQWMsRUFBQztnQkFDN0IsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUN2QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDakM7aUJBQU07Z0JBQ1AsR0FBRyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDL0I7U0FDRjtRQUNELElBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxjQUFjLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUM7WUFDekQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRTtnQkFDL0IsR0FBRyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDcEU7WUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFO2dCQUMvQixHQUFHLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNuRTtZQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRTtnQkFDbEMsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ3ZFO1NBQ0Y7YUFBTSxJQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUU7Z0JBQy9CLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ25FO1NBQ0Y7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUU7Z0JBQy9CLEdBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ3JFO1lBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRTtnQkFDL0IsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDckU7WUFDRCxJQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLEVBQUM7Z0JBQ2hDLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ2hGO1NBQ0E7UUFDQyxtQkFBbUI7UUFDbkIsU0FBUztRQUNULElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUU7WUFDaEMsSUFBSSxDQUFDLE9BQU87aUJBQ1QsbUJBQW1CLENBQUMsR0FBRyxDQUFDO2lCQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDOUIsU0FBUyxDQUFDO2dCQUNULElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTt3QkFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQzt3QkFDbkMsSUFBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUksQ0FBQyxFQUFDOzRCQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzs0QkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7eUJBQ3BCOzZCQUFNOzRCQUNQLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7NEJBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7NEJBQ2xDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLEVBQUU7Z0NBQUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTs2QkFBRTtpQ0FBTTtnQ0FBRSxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTs2QkFBRTs0QkFDckgsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7NEJBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDOzRCQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzs0QkFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRSxLQUFLLENBQUM7NEJBQ3pCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7eUJBQ3ZCO3FCQUNGO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO3dCQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztxQkFDcEI7Z0JBQ0gsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUNuQixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMxQixDQUFDO2dCQUNELFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO2FBQ25CLENBQUMsQ0FBQztTQUNOO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtZQUNoQyxJQUFJLENBQUMsT0FBTztpQkFDVCxZQUFZLENBQUMsR0FBRyxDQUFDO2lCQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDOUIsU0FBUyxDQUFDO2dCQUNULElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTt3QkFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQzt3QkFDbkMsSUFBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUksQ0FBQyxFQUFDOzRCQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzs0QkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7eUJBQ3BCOzZCQUFNOzRCQUNQLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7NEJBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7NEJBQ2xDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLEVBQUU7Z0NBQUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTs2QkFBRTtpQ0FBTTtnQ0FBRSxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTs2QkFBRTs0QkFDckgsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7NEJBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDOzRCQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzs0QkFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRSxLQUFLLENBQUM7eUJBQ3hCO3FCQUNGO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO3dCQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztxQkFDcEI7Z0JBQ0gsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUNuQixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMxQixDQUFDO2dCQUNELFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO2FBQ25CLENBQUMsQ0FBQztTQUNOO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTztpQkFDVCxVQUFVLENBQUMsR0FBRyxDQUFDO2lCQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUM5QixTQUFTLENBQUM7Z0JBQ1QsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFO3dCQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDO3dCQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDO3dCQUN4QyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO3dCQUNsQyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxFQUFFOzRCQUFFLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7eUJBQUU7NkJBQU07NEJBQUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUE7eUJBQUU7d0JBQWMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7d0JBQ3RKLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO3FCQUNyQjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzt3QkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7cUJBQ3BCO2dCQUNILENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDbkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQztnQkFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQzthQUNuQixDQUFDLENBQUM7U0FBRTthQUFNLElBQUcsSUFBSSxDQUFDLElBQUksS0FBRyxjQUFjLEVBQUM7WUFDdkMsSUFBSSxDQUFDLE9BQU87aUJBQ1gsa0JBQWtCLENBQUMsR0FBRyxDQUFDO2lCQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDOUIsU0FBUyxDQUFDO2dCQUNULElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTt3QkFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQzt3QkFDckMsSUFBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUksQ0FBQyxFQUFDOzRCQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzs0QkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7eUJBQ3BCOzZCQUFNOzRCQUNQLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUM7NEJBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7NEJBQ2xDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLEVBQUU7Z0NBQUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTs2QkFBRTtpQ0FBTTtnQ0FBRSxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTs2QkFBRTs0QkFDckgsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7NEJBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDOzRCQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzs0QkFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRSxLQUFLLENBQUM7NEJBQ3pCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7eUJBQ3ZCO3FCQUNGO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO3dCQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztxQkFDcEI7Z0JBQ0gsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUNuQixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMxQixDQUFDO2dCQUNELFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO2FBQ25CLENBQUMsQ0FBQztTQUNKO0lBQ1AsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUFZLEVBQUUsUUFBYTtRQUN0QyxJQUFJLElBQUksR0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztRQUN2QixZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFO1lBQ3BELFdBQVcsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELFVBQVUsQ0FBQyxPQUFZLEVBQUUsUUFBYSxFQUFDLFVBQWM7UUFDbkQsSUFBSSxJQUFJLEdBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQSxDQUFDLENBQUEsUUFBUSxDQUFDO1FBQ25ELFlBQVksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7WUFDM0MsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTtTQUNsQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsWUFBWSxDQUFDLEdBQU87UUFDbEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDN0QsUUFBUSxFQUFFLElBQUk7WUFDZCxJQUFJLEVBQUUsSUFBSTtZQUNWLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFFBQVEsRUFBQyxRQUFRO1NBQ2xCLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUNuRCxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ2hDLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFRLEVBQUMsUUFBWSxFQUFDLE9BQVcsRUFBQyxVQUFjO1FBQ3RELElBQUcsSUFBSSxLQUFJLEtBQUssRUFBQztZQUNmLElBQUksSUFBSSxHQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUEsQ0FBQyxDQUFBLFFBQVEsQ0FBQztZQUNuRCxZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO2dCQUMzQyxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFO2FBQ2xDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDVCxJQUFJLElBQUksR0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztZQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztZQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFBLENBQUMsQ0FBQSxRQUFRLENBQUM7WUFDbkQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsNkJBQTZCLENBQUMsRUFBRTtnQkFDcEQsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFFO2FBQzVDLENBQUMsQ0FBQztTQUNKO0lBQ0MsQ0FBQztJQUVELGFBQWEsQ0FBQyxRQUFZLEVBQUMsT0FBVyxFQUFDLFVBQWM7UUFDbkQsSUFBSSxJQUFJLEdBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQSxDQUFDLENBQUEsUUFBUSxDQUFDO1FBQ25ELFlBQVksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsWUFBWSxDQUFDLFFBQVksRUFBQyxPQUFXLEVBQUMsVUFBYztRQUNsRCxJQUFJLElBQUksR0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFBLENBQUMsQ0FBQSxRQUFRLENBQUM7UUFDbkQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsd0JBQXdCLENBQUMsRUFBRTtZQUMvQyxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxXQUFXLENBQUMsUUFBWSxFQUFDLE9BQVc7UUFDbEMsSUFBSSxJQUFJLEdBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLEVBQUU7WUFDeEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQ3hCO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDdEI7SUFDSCxDQUFDO3dHQTN0QlUsZ0JBQWdCOzRGQUFoQixnQkFBZ0IsbURDZDdCLDRxbkNBc2JNOzs0RkR4YU8sZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7IEFkZENzbU1vZGFsQ29tcG9uZW50IH0gZnJvbSBcIi4uL2FkZC1jc20tbW9kYWwvYWRkLWNzbS1tb2RhbC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgVGlja2V0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy90aWNrZXQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFeGNlbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leGNlbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tbWVudE1vZGVsQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbW1lbnQtbW9kZWwvY29tbWVudC1tb2RlbC5jb21wb25lbnRcIjtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLXRpY2tldHNcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3RpY2tldHMuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL3RpY2tldHMuY29tcG9uZW50LnNjc3NcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFRpY2tldHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgdHlwZSA9IFwiSW5mcmFcIjtcclxuICBzZWFyY2hWYWx1ZTogYW55ID0gXCJcIjtcclxuICBzZWxlY3RlZFRhYjogYW55ID0gXCJ0b3RhbFwiO1xyXG4gIC8vIHBhZ2luYXRpb25WYXJpYWJsZXNcclxuICBpdGVtc1BlclBhZ2UgPSAxMDtcclxuICBjdXJyZW50UGFnZSA9IDE7XHJcbiAgdG90YWxJdGVtcyA9IDA7XHJcbiAgcGFnaW5hdGlvblNpemVzID0gWzEwLCAyMCwgMzBdO1xyXG4gIHBhZ2VTaXplID0gMTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgYXNzaWduVGlja2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZmlsdGVyQnlTdG9yZXM6IGFueSA9IFtdO1xyXG4gIGZpbHRlckJ5aW5zdGFsbGVkOiBhbnkgPSBbXTtcclxuICBmaWx0ZXJCeVN0YXR1czogYW55ID0gW107XHJcbiAgZmlsdGVyQnlRdWVyeVR5cGU6IGFueSA9IFtdO1xyXG4gIGlzc3VlVHlwZTogYW55ID0gW107XHJcbiAgc29ydGVkQ29sdW1uOiBzdHJpbmc7XHJcbiAgc29ydERpcmVjdGlvbjogbnVtYmVyO1xyXG4gIGhlYWRlckZpbHRlcnM6IGFueTtcclxuICB1c2VyTGlzdF9yZXE6IGFueTtcclxuICB1c2VyTGlzdDogYW55ID0gW107XHJcbiAgZGF0YU9iamVjdDogYW55PVtdO1xyXG4gIHN0b3JlTGlzdDogYW55ID0gW107XHJcbiAgc3RhdHVzVHlwZTogeyB0ZXh0OiBzdHJpbmc7IGlkOiBzdHJpbmcgfVtdO1xyXG4gIHR5cGVOYW1lOiBzdHJpbmc7XHJcbiAgdXNlcnM6IGFueTtcclxuICBsaW1pdDogbnVtYmVyID0gMTA7XHJcbiAgb2Zmc2V0OiBudW1iZXIgPSAxO1xyXG4gIHNvcnRCeTogYW55ID0gLTE7XHJcbiAgc29ydENvbHVtTmFtZTogYW55ID0gXCJcIjtcclxuICBsaXN0QXJyYXk6IGFueSA9IFtdO1xyXG4gIHRhYmxlTGlzdEFycmF5OiBhbnkgPSBbXTtcclxuICBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBub0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZWxlY3RBbGw6IGFueSA9IGZhbHNlO1xyXG4gIGFzc2lnblN0b3JlczogYW55ID0gW107XHJcbiAgaXNzdWVUeXBlTGlzdDogYW55PVtdO1xyXG4gIHF1ZXJ5VHlwZUxpc3Q6IGFueT1bXTtcclxuICBcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHVibGljIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIHNlcnZpY2U6IFRpY2tldFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGV4Y2Vsc2VydmljZTogRXhjZWxTZXJ2aWNlLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCB1c2VyRGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInVzZXItaW5mb1wiKSB8fCBcInt9XCIpO1xyXG4gICAgdGhpcy51c2VycyA9IHVzZXJEYXRhO1xyXG4gICAgdGhpcy5yb3V0ZT8ucXVlcnlQYXJhbXNcclxuICAgICAgPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XHJcbiAgICAgICAgdGhpcy50eXBlID0gcGFyYW1zLnR5cGU7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJCeVN0b3JlcyA9W107IHRoaXMuc3RvcmVMaXN0PVtdXHJcbiAgICAgICAgdGhpcy5maWx0ZXJCeWluc3RhbGxlZD1bXTsgdGhpcy5zdGF0dXNUeXBlID1bXVxyXG4gICAgICAgIHRoaXMuZmlsdGVyQnlTdGF0dXMgPVtdOyB0aGlzLnVzZXJMaXN0PVtdO1xyXG4gICAgICAgIHRoaXMuaXNzdWVUeXBlPVtdOyB0aGlzLmlzc3VlVHlwZUxpc3QgPVtdXHJcbiAgICAgICAgdGhpcy5maWx0ZXJCeVF1ZXJ5VHlwZSA9W107IHRoaXMucXVlcnlUeXBlTGlzdD1bXTtcclxuICAgICAgICB0aGlzLmRhdGFPYmplY3Q9W11cclxuICAgICAgICB0aGlzLmdzLm1hbmFnZVJlZnJlc2hUcmlnZ2VyLm5leHQodHJ1ZSlcclxuICAgICAgICB0aGlzLmdldEluaXRsb2FkKCk7XHJcbiAgICAgICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuaGVhZGVyRmlsdGVycyA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgdGhpcy51c2VyTGlzdF9yZXEgPSB7XHJcbiAgICAgICAgICAgICAgICBsaW1pdDogMTAwMDAsXHJcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXHJcbiAgICAgICAgICAgICAgICB1c2VyVHlwZTogdGhpcy51c2Vycy51c2VyVHlwZSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0c3RvcmVGaWx0ZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy50eXBlID09PSBcImluc3RhbGxhdGlvblwiKSB7XHJcbiAgICAgICAgICB0aGlzLnR5cGVOYW1lID0gXCJJbnN0YWxsZWQgQnlcIjtcclxuICAgICAgICAgIHRoaXMuc3RhdHVzVHlwZSA9IFtcclxuICAgICAgICAgICAgeyB0ZXh0OiBcIk9uYm9hcmRlZFwiLCBpZDogXCJvbmJvYXJkZWRcIiB9LFxyXG4gICAgICAgICAgICB7IHRleHQ6IFwiUGFpcmVkXCIsIGlkOiBcInBhaXJlZFwiIH0sXHJcbiAgICAgICAgICAgIHsgdGV4dDogXCJJbnN0YWxsYXRpb25mYWlsZWRcIiwgaWQ6IFwiaW5zdGFsbGF0aW9uZmFpbGVkXCIgfSxcclxuICAgICAgICAgICAgeyB0ZXh0OiBcIkRlcGxveWVkXCIsIGlkOiBcImRlcGxveWVkXCIgfSxcclxuICAgICAgICAgIF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudHlwZU5hbWUgPSBcIlJlc29sdmVkIEJ5XCI7XHJcbiAgICAgICAgIFxyXG4gICAgICAgICAgaWYgKHRoaXMudXNlcnMudXNlclR5cGUgPT09IFwidGFuZ29cIiAmJiAgdGhpcy50eXBlID09PSdpbmZyYScpeyBcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXNUeXBlICA9IFtcclxuICAgICAgICAgICAgICB7IHRleHQ6IFwiT3BlblwiLCBpZDogXCJvcGVuXCIgfSxcclxuICAgICAgICAgICAgICB7IHRleHQ6IFwiSW4gUHJvZ3Jlc3NcIiwgaWQ6IFwiaW5wcm9ncmVzc1wiIH0sXHJcbiAgICAgICAgICAgICAgeyB0ZXh0OiBcIlJlZnJlc2ggVGlja2V0XCIsIGlkOiBcInJlZnJlc2h0aWNrZXRcIiB9LFxyXG4gICAgICAgICAgICAgIHsgdGV4dDogXCJDbG9zZWRcIiwgaWQ6IFwiY2xvc2VkXCIgfSxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIHRoaXMuc3RhdHVzVHlwZSA9IFtcclxuICAgICAgICAgICAgeyB0ZXh0OiBcIk9wZW5cIiwgaWQ6IFwib3BlblwiIH0sXHJcbiAgICAgICAgICAgIHsgdGV4dDogXCJJbiBQcm9ncmVzc1wiLCBpZDogXCJpbnByb2dyZXNzXCIgfSxcclxuICAgICAgICAgICAgeyB0ZXh0OiBcIkNsb3NlZFwiLCBpZDogXCJjbG9zZWRcIiB9LFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmlzc3VlVHlwZUxpc3QgPSBbXHJcbiAgICAgICAgICAgIHsgdGV4dDogXCJIaWdoIENvdW50XCIsIGlkOiBcImhpZ2hjb3VudFwiIH0sXHJcbiAgICAgICAgICAgIHsgdGV4dDogXCJMb3cgQ291bnRcIiwgaWQ6IFwibG93Y291bnRcIiB9LFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICAgIHRoaXMucXVlcnlUeXBlTGlzdCA9IFtcclxuICAgICAgICAgICAgeyB0ZXh0OiBcIkludGVybmFsXCIsIGlkOiBcImludGVybmFsXCIgfSxcclxuICAgICAgICAgICAgeyB0ZXh0OiBcIkV4dGVybmFsXCIsIGlkOiBcImV4dGVybmFsXCIgfSxcclxuICAgICAgICAgIF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgZ2V0SW5pdGxvYWQoKSB7XHJcbiAgICB0aGlzLnNlYXJjaFZhbHVlID0gXCJcIjtcclxuICAgIHRoaXMubGltaXQgPSAxMDtcclxuICAgIHRoaXMucGFnZVNpemUgPSAxMDtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9IFwidG90YWxcIjtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zb3J0ZWRDb2x1bW49Jyc7XHJcbiAgfVxyXG4gIGdldHN0b3JlRmlsdGVyKCkge1xyXG4gICAgdGhpcy5zZXJ2aWNlXHJcbiAgICAgIC5nZXRTb3RyZXNMaXN0KHsgaXNzdWVUeXBlOiB0aGlzLnR5cGUsY2xpZW50SWQ6dGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudHMgfSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHsgIFxyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSByZXM/LmRhdGE/LmRhdGE7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC50ZXh0ID0gZWxlbWVudC5zdG9yZUlkO1xyXG4gICAgICAgICAgICBlbGVtZW50LmlkID0gZWxlbWVudC5zdG9yZUlkO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZih0aGlzLnVzZXJzLnVzZXJUeXBlID09PSBcInRhbmdvXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmdldHVzZXJsaXN0KCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZih0aGlzLnR5cGUgPT09J2luc3RhbGxhdGlvbicpe1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFPYmplY3QgPSBbXHJcbiAgICAgICAgICAgICAgeyBEZXNjcmlwdGlvbjogXCJTdG9yZSBJRFwiLCBJc3N1ZXM6IHRoaXMuc3RvcmVMaXN0IH0sXHJcbiAgICAgICAgICAgICAgeyBEZXNjcmlwdGlvbjogXCJEZXBsb3llZCBTdGF0dXNcIiwgSXNzdWVzOiB0aGlzLnN0YXR1c1R5cGUgfSxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgIH0gZWxzZSBpZih0aGlzLnR5cGUgPT09J2luZnJhJyB8fCB0aGlzLnR5cGUgPT09J2RhdGFNaXNtYXRjaCcpe1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFPYmplY3QgPSBbXHJcbiAgICAgICAgICAgICAgeyBEZXNjcmlwdGlvbjogXCJTdG9yZSBJRFwiLCBJc3N1ZXM6IHRoaXMuc3RvcmVMaXN0IH0sXHJcbiAgICAgICAgICAgICAgeyBEZXNjcmlwdGlvbjogXCJTdGF0dXNcIiwgSXNzdWVzOiB0aGlzLnN0YXR1c1R5cGUgfSxcclxuICAgICAgICAgICAgXTsgXHJcbiAgICAgICAgICB9ZWxzZSBpZih0aGlzLnR5cGUgPT09J21hdCcgKXtcclxuICAgICAgICAgICAgdGhpcy5kYXRhT2JqZWN0ID0gW1xyXG4gICAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IFwiU3RhdHVzXCIsIElzc3VlczogdGhpcy5zdGF0dXNUeXBlIH0sXHJcbiAgICAgICAgICAgIF07IFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5nZXRUYWJsZSgpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgIHRoaXMuZ2V0VGFibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7fSxcclxuICB9KTtcclxuICB9XHJcbiAgZ2V0dXNlcmxpc3QoKSB7XHJcbiAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgLmdldFVzZXJMaXN0KHRoaXMudXNlckxpc3RfcmVxKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnVzZXJMaXN0ID0gcmVzPy5kYXRhPy5yZXN1bHQ7XHJcbiAgICAgICAgICB0aGlzLnVzZXJMaXN0Py5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC50ZXh0ID0gZWxlbWVudC51c2VyTmFtZTtcclxuICAgICAgICAgICAgZWxlbWVudC5pZCA9IGVsZW1lbnQuZW1haWw7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMudXNlcnMudXNlclR5cGUgPT09IFwidGFuZ29cIiAmJiAodGhpcy50eXBlID09PSdpbnN0YWxsYXRpb24nKSkge1xyXG4gICAgICAgICAgdGhpcy5kYXRhT2JqZWN0ID0gW1xyXG4gICAgICAgICAgICB7IERlc2NyaXB0aW9uOiBcIlN0b3JlIElEXCIsIElzc3VlczogdGhpcy5zdG9yZUxpc3QgfSxcclxuICAgICAgICAgICAgeyBEZXNjcmlwdGlvbjogXCJEZXBsb3llZCBTdGF0dXNcIiwgSXNzdWVzOiB0aGlzLnN0YXR1c1R5cGUgfSxcclxuICAgICAgICAgICAgeyBEZXNjcmlwdGlvbjogdGhpcy50eXBlTmFtZSwgSXNzdWVzOiB0aGlzLnVzZXJMaXN0IH0sXHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNlcnMudXNlclR5cGUgPT09IFwidGFuZ29cIiAmJiAgdGhpcy50eXBlID09PSdpbmZyYScpIHtcclxuICAgICAgICAgIHRoaXMuZGF0YU9iamVjdCA9IFtcclxuICAgICAgICAgICAgeyBEZXNjcmlwdGlvbjogXCJTdG9yZSBJRFwiLCBJc3N1ZXM6IHRoaXMuc3RvcmVMaXN0IH0sXHJcbiAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IFwiU3RhdHVzXCIsIElzc3VlczogdGhpcy5zdGF0dXNUeXBlIH0sXHJcbiAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IHRoaXMudHlwZU5hbWUsIElzc3VlczogdGhpcy51c2VyTGlzdCB9LFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICAgfSBlbHNlIGlmKHRoaXMudXNlcnMudXNlclR5cGUgPT09IFwidGFuZ29cIiAmJiB0aGlzLnR5cGUgPT09J2RhdGFNaXNtYXRjaCcpe1xyXG4gICAgICAgICAgdGhpcy5kYXRhT2JqZWN0ID0gW1xyXG4gICAgICAgICAgICB7IERlc2NyaXB0aW9uOiBcIlN0b3JlIElEXCIsIElzc3VlczogdGhpcy5zdG9yZUxpc3QgfSxcclxuICAgICAgICAgICAgeyBEZXNjcmlwdGlvbjogXCJRdWVyeSBUeXBlXCIsIElzc3VlczogdGhpcy5xdWVyeVR5cGVMaXN0IH0sXHJcbiAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IFwiU3RhdHVzXCIsIElzc3VlczogdGhpcy5zdGF0dXNUeXBlIH0sXHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgICB9IGVsc2UgaWYodGhpcy50eXBlID09PSdtYXQnKXtcclxuICAgICAgICAgIHRoaXMuZGF0YU9iamVjdCA9IFtcclxuICAgICAgICAgICAgeyBEZXNjcmlwdGlvbjogXCJTdGF0dXNcIiwgSXNzdWVzOiB0aGlzLnN0YXR1c1R5cGUgfSxcclxuICAgICAgICAgIF07XHJcbiAgICAgICAgIH0gXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbiAgc2VhcmNoRGF0YSgpIHtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgdGhpcy5saW1pdD0xMDtcclxuICAgIHRoaXMuZ2V0VGFibGUoKTtcclxuICB9XHJcblxyXG4gIG9uU29ydChjb2x1bW46IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuc29ydGVkQ29sdW1uID09PSBjb2x1bW4pIHtcclxuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gdGhpcy5zb3J0RGlyZWN0aW9uID09PSAxID8gLTEgOiAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zb3J0ZWRDb2x1bW4gPSBjb2x1bW47XHJcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IDE7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldFRhYmxlKCk7XHJcbiAgfVxyXG4gIGV4cG9ydFhMU1goKSB7XHJcbiAgICBsZXQgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzPy5jbGllbnRzLFxyXG4gICAgICBmcm9tRGF0ZTogdGhpcy5oZWFkZXJGaWx0ZXJzPy5kYXRlPy5zdGFydERhdGUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5oZWFkZXJGaWx0ZXJzPy5kYXRlPy5lbmREYXRlLFxyXG4gICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxyXG4gICAgICBsaW1pdDogdGhpcy5saW1pdCxcclxuICAgICAgZmlsdGVySXNzdWU6IHRoaXMuc2VsZWN0ZWRUYWIgPyB0aGlzLnNlbGVjdGVkVGFiIDogXCJcIixcclxuICAgICAgc2VhcmNoVmFsdWU6IHRoaXMuc2VhcmNoVmFsdWUgPyB0aGlzLnNlYXJjaFZhbHVlIDogXCJcIixcclxuICAgICAgZXhwb3J0OiB0cnVlLFxyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLnNvcnRlZENvbHVtbikge1xyXG4gICAgICBvYmouc29ydENvbHVtTmFtZSA9IHRoaXMuc29ydGVkQ29sdW1uO1xyXG4gICAgICBvYmouc29ydEJ5ID0gdGhpcy5zb3J0RGlyZWN0aW9uO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy50eXBlID09PSBcImluc3RhbGxhdGlvblwiIHx8IHRoaXMudHlwZSA9PT0gXCJpbmZyYVwiKXtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyQnlTdG9yZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIG9iai5zdG9yZUlkRmlsdGVyID0gdGhpcy5maWx0ZXJCeVN0b3JlcyA/IHRoaXMuZmlsdGVyQnlTdG9yZXMgOiBbXTtcclxuICAgICAgfSBcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyQnlTdGF0dXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIG9iai5zdGF0dXNGaWx0ZXIgPSB0aGlzLmZpbHRlckJ5U3RhdHVzID8gdGhpcy5maWx0ZXJCeVN0YXR1cyA6IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlckJ5aW5zdGFsbGVkPy5sZW5ndGgpIHtcclxuICAgICAgICBvYmoudXNlckZpbHRlciA9IHRoaXMuZmlsdGVyQnlpbnN0YWxsZWQgPyB0aGlzLmZpbHRlckJ5aW5zdGFsbGVkIDogW107XHJcbiAgICAgIH1cclxuICAgIH1lbHNlIGlmKHRoaXMudHlwZSA9PT1cIm1hdFwiKXtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyQnlTdGF0dXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIG9iai5zdGF0dXNGaWx0ZXIgPSB0aGlzLmZpbHRlckJ5U3RhdHVzID8gdGhpcy5maWx0ZXJCeVN0YXR1cyA6IFtdO1xyXG4gICAgICB9XHJcbiAgICB9ICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyQnlTdG9yZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIG9iai5maWx0ZXJCeVN0b3JlcyA9IHRoaXMuZmlsdGVyQnlTdG9yZXMgPyB0aGlzLmZpbHRlckJ5U3RvcmVzIDogW107XHJcbiAgICAgIH0gXHJcbiAgICAgIGlmICh0aGlzLmZpbHRlckJ5U3RhdHVzPy5sZW5ndGgpIHtcclxuICAgICAgICBvYmouZmlsdGVyQnlTdGF0dXMgPSB0aGlzLmZpbHRlckJ5U3RhdHVzID8gdGhpcy5maWx0ZXJCeVN0YXR1cyA6IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXMuZmlsdGVyQnlRdWVyeVR5cGU/Lmxlbmd0aCl7XHJcbiAgICAgICAgb2JqLmZpbHRlckJ5UXVlcnlUeXBlID0gdGhpcy5maWx0ZXJCeVF1ZXJ5VHlwZSA/IHRoaXMuZmlsdGVyQnlRdWVyeVR5cGUgOiBbXTtcclxuICAgIH1cclxuICB9XHJcbiAgICBpZiAodGhpcy50eXBlID09PSBcImluc3RhbGxhdGlvblwiKSB7XHJcbiAgICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAgIC5leHBvcnRJbnN0YWxsYXRpb25MaXN0KG9iailcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5leGNlbHNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgJ0luc3RhbGxhdGlvbicpXHJcblxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHt9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IFwiaW5mcmFcIikge1xyXG4gICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAuZXhwb3J0SW5mcmFMaXN0KG9iailcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgICB0aGlzLmV4Y2Vsc2VydmljZS5zYXZlQXNFeGNlbEZpbGUocmVzLCAnSW5mcmEnKVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7fSxcclxuICAgICAgICB9KTtcclxuICAgIH0gIGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gXCJtYXRcIikge1xyXG4gICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAuZXhwb3J0TWF0TGlzdChvYmopXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgdGhpcy5leGNlbHNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgJ01hdCcpXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHt9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfWVsc2UgaWYodGhpcy50eXBlPT09J2RhdGFNaXNtYXRjaCcpe1xyXG4gICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgLmV4cG9ydERhdGFNaXNtYXRjaExpc3Qob2JqKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5leGNlbHNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgJ0RhdGEgTWlzbWF0Y2gnKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7fSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZFRhYnModHlwZTogYW55KSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgIHRoaXMubGltaXQ9MTA7XHJcbiAgICBpZih0aGlzLnR5cGUgPT09J2RhdGFNaXNtYXRjaCcpe1xyXG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9IHR5cGUubmFtZS5yZXBsYWNlKC9cXHMrL2csICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLmxpbWl0ID0gMTA7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gMTA7XHJcbiAgICB0aGlzLmdldFRhYmxlKCk7XHJcbiAgICB0aGlzLnRyYW5zZm9ybU5hbWUodHlwZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiID0gdHlwZS5uYW1lO1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgICB0aGlzLmxpbWl0ID0gMTA7XHJcbiAgICAgIHRoaXMucGFnZVNpemUgPSAxMDtcclxuICAgIHRoaXMuZ2V0VGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgdHJhbnNmb3JtTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIG5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICcnKTtcclxuICAgIFxyXG4gIH1cclxuICBvblBhZ2VDaGFuZ2UocGFnZU9mZnNldDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gTnVtYmVyKHBhZ2VPZmZzZXQpO1xyXG4gICAgdGhpcy5vZmZzZXQgPSBOdW1iZXIocGFnZU9mZnNldCk7XHJcbiAgICB0aGlzLmxpbWl0ID0xMDtcclxuICAgIHRoaXMuZ2V0VGFibGUoKTtcclxuICB9XHJcblxyXG4gIG9uUGFnZVNpemVDaGFuZ2UocGFnZVNpemU6IG51bWJlcikge1xyXG4gICAgdGhpcy5wYWdlU2l6ZSA9IE51bWJlcihwYWdlU2l6ZSk7XHJcbiAgICB0aGlzLmxpbWl0ID0gTnVtYmVyKHBhZ2VTaXplKTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgdGhpcy5nZXRUYWJsZSgpO1xyXG4gIH1cclxuICBzZWxlY3RBbGxTdG9yZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdEFsbCA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xyXG4gICAgdGhpcy50YWJsZUxpc3RBcnJheS5mb3JFYWNoKChvYmo6IGFueSkgPT4gKG9iai5jaGVja2VkID0gdGhpcy5zZWxlY3RBbGwpKTtcclxuICAgIC8vIElmIGFsbCBjaGVja2JveGVzIGFyZSBjaGVja2VkLCBhc3NpZ24gYWxsIHRpY2tldElkcyB0byBhc3NpZ25TdG9yZXMsIG90aGVyd2lzZSBjbGVhciBhc3NpZ25TdG9yZXNcclxuICAgIHRoaXMuYXNzaWduU3RvcmVzID0gdGhpcy5zZWxlY3RBbGxcclxuICAgICAgPyB0aGlzLnRhYmxlTGlzdEFycmF5Lm1hcCgob2JqOiBhbnkpID0+IG9iai50aWNrZXRJZClcclxuICAgICAgOiBbXTtcclxuICAgIHRoaXMuYXNzaWduVGlja2V0ID0gdGhpcy5zZWxlY3RBbGw7IC8vIFVwZGF0ZSBhc3NpZ25UaWNrZXQgYmFzZWQgb24gc2VsZWN0QWxsIHN0YXRlXHJcbiAgfVxyXG5cclxuICB1cGRhdGVDaGVjayhldmVudDogYW55LCB0aWNrZXRJZDogYW55KSB7XHJcbiAgICBjb25zdCB0aWNrZXQgPSB0aGlzLnRhYmxlTGlzdEFycmF5LmZpbmQoXHJcbiAgICAgIChvYmo6IGFueSkgPT4gb2JqLnRpY2tldElkID09PSB0aWNrZXRJZFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGlja2V0KSB7XHJcbiAgICAgIHRpY2tldC5jaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XHJcbiAgICAgIC8vIElmIHRoZSBjaGVja2JveCBpcyBjaGVja2VkLCBhZGQgb3IgcmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIGFycmF5IGZyb20gdGhlIHNlbGVjdGVkIGFycmF5c1xyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgICB0aGlzLmFzc2lnblN0b3Jlcy5wdXNoKHRpY2tldElkKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYXNzaWduU3RvcmVzLmluZGV4T2YodGlja2V0SWQpO1xyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgIHRoaXMuYXNzaWduU3RvcmVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIFVwZGF0ZSBzZWxlY3RBbGwgYmFzZWQgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgY2hlY2tib3hlc1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbCA9IHRoaXMudGFibGVMaXN0QXJyYXkuZXZlcnkoKG9iajogYW55KSA9PiBvYmouY2hlY2tlZCk7XHJcbiAgICAgIC8vIFVwZGF0ZSBhc3NpZ25UaWNrZXQgYmFzZWQgb24gd2hldGhlciBhbnkgaW5kaXZpZHVhbCB0aWNrZXQgY2hlY2tib3ggaXMgY2hlY2tlZFxyXG4gICAgICB0aGlzLmFzc2lnblRpY2tldCA9IHRoaXMudGFibGVMaXN0QXJyYXkuc29tZSgob2JqOiBhbnkpID0+IG9iai5jaGVja2VkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEFzc2lnblRpY2tldCgpIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBZGRDc21Nb2RhbENvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgc2l6ZTogXCJtZFwiLFxyXG4gICAgICBzY3JvbGxhYmxlOiB0cnVlLFxyXG4gICAgICBiYWNrZHJvcDpcInN0YXRpY1wiXHJcbiAgICB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpY2tldElkID0gdGhpcy5hc3NpZ25TdG9yZXM7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQgPT09IFwic3VibWl0XCIpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gXCJcIjtcclxuICAgICAgICB0aGlzLmFzc2lnblN0b3JlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hc3NpZ25UaWNrZXQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdldFRhYmxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXJzKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudD8ubGVuZ3RoKSB7XHJcbiAgICAgIGV2ZW50LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIlN0b3JlIElEXCIpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyQnlTdG9yZXMgPSBlbGVtZW50Lklzc3Vlcy5tYXAoKHZhbDogYW55KSA9PiB2YWw/LmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICBpZih0aGlzLnR5cGUgIT09J2luc3RhbGxhdGlvbicpe1xyXG4gICAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIlN0YXR1c1wiKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlckJ5U3RhdHVzID0gZWxlbWVudC5Jc3N1ZXMubWFwKCh2YWw6IGFueSkgPT4gdmFsPy5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGlmKHRoaXMudHlwZT09PSdpbnN0YWxsYXRpb24nKXtcclxuICAgICAgICBpZiAoZWxlbWVudC5EZXNjcmlwdGlvbiA9PT0gXCJEZXBsb3llZCBTdGF0dXNcIikge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJCeVN0YXR1cyA9IGVsZW1lbnQuSXNzdWVzLm1hcCgodmFsOiBhbnkpID0+IHZhbD8uaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnVzZXJzLnVzZXJUeXBlID09PSBcInRhbmdvXCIgJiYgKHRoaXMudHlwZSA9PT0naW5zdGFsbGF0aW9uJyB8fCB0aGlzLnR5cGU9PT0naW5mcmEnKSkge1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuRGVzY3JpcHRpb24gPT09IHRoaXMudHlwZU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJCeWluc3RhbGxlZCA9IGVsZW1lbnQuSXNzdWVzLm1hcCgodmFsOiBhbnkpID0+IHZhbD8uaWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlckJ5aW5zdGFsbGVkID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIlF1ZXJ5IFR5cGVcIikge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJCeVF1ZXJ5VHlwZSA9IGVsZW1lbnQuSXNzdWVzLm1hcCgodmFsOiBhbnkpID0+IHZhbD8uaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiAoZWxlbWVudC5EZXNjcmlwdGlvbiA9PT0gXCJJc3N1ZSBUeXBlXCIpIHtcclxuICAgICAgICAvLyAgIHRoaXMuaXNzdWVUeXBlID0gZWxlbWVudC5Jc3N1ZXMubWFwKCh2YWw6IGFueSkgPT4gdmFsPy5pZCk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgIHRoaXMubGltaXQ9MTA7XHJcbiAgICB0aGlzLmdldFRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRUYWJsZSgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgbGV0IG9iajogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycz8uY2xpZW50cyxcclxuICAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRmlsdGVycz8uZGF0ZT8uc3RhcnREYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuaGVhZGVyRmlsdGVycz8uZGF0ZT8uZW5kRGF0ZSxcclxuICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcclxuICAgICAgbGltaXQ6IHRoaXMubGltaXQsXHJcbiAgICAgIGZpbHRlcklzc3VlOiB0aGlzLnNlbGVjdGVkVGFiID8gdGhpcy5zZWxlY3RlZFRhYiA6IFwiXCIsXHJcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLnNlYXJjaFZhbHVlID8gdGhpcy5zZWFyY2hWYWx1ZSA6IFwiXCIsXHJcbiAgICAgIGV4cG9ydDogZmFsc2UsXHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMuc29ydGVkQ29sdW1uKSB7XHJcbiAgICAgIGlmKHRoaXMudHlwZSA9PT0nZGF0YU1pc21hdGNoJyl7XHJcbiAgICAgICAgb2JqLnNvcnRDb2x1bW5OYW1lID0gdGhpcy5zb3J0ZWRDb2x1bW47XHJcbiAgICAgICAgb2JqLnNvcnRCeSA9IHRoaXMuc29ydERpcmVjdGlvbjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgb2JqLnNvcnRDb2x1bU5hbWUgPSB0aGlzLnNvcnRlZENvbHVtbjtcclxuICAgICAgb2JqLnNvcnRCeSA9IHRoaXMuc29ydERpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYodGhpcy50eXBlID09PSBcImluc3RhbGxhdGlvblwiIHx8IHRoaXMudHlwZSA9PT0gXCJpbmZyYVwiKXtcclxuICAgIGlmICh0aGlzLmZpbHRlckJ5U3RvcmVzPy5sZW5ndGgpIHtcclxuICAgICAgb2JqLnN0b3JlSWRGaWx0ZXIgPSB0aGlzLmZpbHRlckJ5U3RvcmVzID8gdGhpcy5maWx0ZXJCeVN0b3JlcyA6IFtdO1xyXG4gICAgfSBcclxuICAgIGlmICh0aGlzLmZpbHRlckJ5U3RhdHVzPy5sZW5ndGgpIHtcclxuICAgICAgb2JqLnN0YXR1c0ZpbHRlciA9IHRoaXMuZmlsdGVyQnlTdGF0dXMgPyB0aGlzLmZpbHRlckJ5U3RhdHVzIDogW107XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWx0ZXJCeWluc3RhbGxlZD8ubGVuZ3RoKSB7XHJcbiAgICAgIG9iai51c2VyRmlsdGVyID0gdGhpcy5maWx0ZXJCeWluc3RhbGxlZCA/IHRoaXMuZmlsdGVyQnlpbnN0YWxsZWQgOiBbXTtcclxuICAgIH1cclxuICB9IGVsc2UgaWYodGhpcy50eXBlID09PSBcIm1hdFwiKXtcclxuICAgIGlmICh0aGlzLmZpbHRlckJ5U3RhdHVzPy5sZW5ndGgpIHtcclxuICAgICAgb2JqLnN0YXR1c0ZpbHRlciA9IHRoaXMuZmlsdGVyQnlTdGF0dXMgPyB0aGlzLmZpbHRlckJ5U3RhdHVzIDogW107XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmICh0aGlzLmZpbHRlckJ5U3RvcmVzPy5sZW5ndGgpIHtcclxuICAgICAgb2JqLmZpbHRlckJ5U3RvcmVzID0gdGhpcy5maWx0ZXJCeVN0b3JlcyA/IHRoaXMuZmlsdGVyQnlTdG9yZXMgOiBbXTtcclxuICAgIH0gXHJcbiAgICBpZiAodGhpcy5maWx0ZXJCeVN0YXR1cz8ubGVuZ3RoKSB7XHJcbiAgICAgIG9iai5maWx0ZXJCeVN0YXR1cyA9IHRoaXMuZmlsdGVyQnlTdGF0dXMgPyB0aGlzLmZpbHRlckJ5U3RhdHVzIDogW107XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmZpbHRlckJ5UXVlcnlUeXBlPy5sZW5ndGgpe1xyXG4gICAgICBvYmouZmlsdGVyQnlRdWVyeVR5cGUgPSB0aGlzLmZpbHRlckJ5UXVlcnlUeXBlID8gdGhpcy5maWx0ZXJCeVF1ZXJ5VHlwZSA6IFtdO1xyXG4gIH1cclxuICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhvYmopXHJcbiAgICAvLyByZXR1cm5cclxuICAgIGlmICh0aGlzLnR5cGUgPT09IFwiaW5zdGFsbGF0aW9uXCIpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgLmdldEluc3RhbGxhdGlvbkxpc3Qob2JqKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmxpc3RBcnJheSA9IHJlcy5kYXRhLnJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgIGlmKHJlcy5kYXRhLnJlc3VsdC5sZW5ndGggPT09MCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMudGFibGVMaXN0QXJyYXkgPSByZXMuZGF0YS5yZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSByZXMuZGF0YT8uY291bnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50b3RhbEl0ZW1zIDwgMTApIHsgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbdGhpcy50b3RhbEl0ZW1zXSB9IGVsc2UgeyB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxMCwgMjAsIDMwXSB9XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuYXNzaWduVGlja2V0ID1mYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge30sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gXCJpbmZyYVwiKSB7XHJcbiAgICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAgIC5nZXRJbmZyYUxpc3Qob2JqKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmxpc3RBcnJheSA9IHJlcy5kYXRhLnJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgIGlmKHJlcy5kYXRhLnJlc3VsdC5sZW5ndGggPT09MCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMudGFibGVMaXN0QXJyYXkgPSByZXMuZGF0YS5yZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSByZXMuZGF0YT8uY291bnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50b3RhbEl0ZW1zIDwgMTApIHsgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbdGhpcy50b3RhbEl0ZW1zXSB9IGVsc2UgeyB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxMCwgMjAsIDMwXSB9XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuYXNzaWduVGlja2V0ID1mYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge30sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gXCJtYXRcIikge1xyXG4gICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAuZ2V0TWF0TGlzdChvYmopXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMubGlzdEFycmF5ID0gcmVzPy5kYXRhPy5yZXNwb25zZTtcclxuICAgICAgICAgICAgICB0aGlzLnRhYmxlTGlzdEFycmF5ID0gcmVzPy5kYXRhPy5yZXN1bHQ7XHJcbiAgICAgICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gcmVzLmRhdGE/LmNvdW50O1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnRvdGFsSXRlbXMgPCAxMCkgeyB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFt0aGlzLnRvdGFsSXRlbXNdIH0gZWxzZSB7IHRoaXMucGFnaW5hdGlvblNpemVzID0gWzEwLCAyMCwgMzBdIH0gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge30sXHJcbiAgICAgICAgfSk7IH0gZWxzZSBpZih0aGlzLnR5cGU9PT0nZGF0YU1pc21hdGNoJyl7XHJcbiAgICAgICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAgIC5nZXREYXRhTWlzbWF0aExpc3Qob2JqKVxyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0QXJyYXkgPSByZXM/LmRhdGE/LnJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgaWYocmVzLmRhdGEucmVzdWx0Lmxlbmd0aCA9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlTGlzdEFycmF5ID0gcmVzPy5kYXRhPy5yZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IHJlcy5kYXRhPy5jb3VudDtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudG90YWxJdGVtcyA8IDEwKSB7IHRoaXMucGFnaW5hdGlvblNpemVzID0gW3RoaXMudG90YWxJdGVtc10gfSBlbHNlIHsgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF0gfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXNzaWduVGlja2V0ID1mYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7fSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICB9XHJcblxyXG4gIHJvdXRlVG9TdG9yZShzdG9yZUlkOiBhbnksIGNsaWVudElkOiBhbnkpIHtcclxuICAgIGxldCBkYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgfHwgXCJcIik7XHJcbiAgICBkYXRhLnN0b3JlID0gc3RvcmVJZDtcclxuICAgIGRhdGEuY2xpZW50ID0gY2xpZW50SWQ7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dChkYXRhKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS9zdG9yZXMvaW5mcmEtdGlja2V0J10sIHsgXHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IHN0b3JlSWQ6IHN0b3JlSWQgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJvdXRlVG9NYXQoc3RvcmVJZDogYW55LCBjbGllbnRJZDogYW55LGNsaWVudE5hbWU6YW55KSB7XHJcbiAgICBsZXQgZGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIHx8IFwiXCIpO1xyXG4gICAgZGF0YS5zdG9yZSA9IHN0b3JlSWQ7XHJcbiAgICBkYXRhLmNsaWVudCA9IGNsaWVudElkO1xyXG4gICAgZGF0YS5jbGllbnROYW1lID0gY2xpZW50TmFtZSA/IGNsaWVudE5hbWU6J1N0b3Jlcyc7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dChkYXRhKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS9zdG9yZXMvbWF0J10sIHsgXHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IHN0b3JlSWQ6IHN0b3JlSWQgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGNvbW1lbnRNb2RhbChvYmo6YW55KXtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihDb21tZW50TW9kZWxDb21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIHNpemU6IFwibWRcIixcclxuICAgICAgc2Nyb2xsYWJsZTogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3A6XCJzdGF0aWNcIlxyXG4gICAgfSk7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50aWNrZXRJZCA9IG9iai50aWNrZXRJZDtcclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB0aWNrZXRzKHR5cGU6YW55LGNsaWVudElkOmFueSxzdG9yZUlkOmFueSxjbGllbnROYW1lOmFueSl7XHJcbiAgICBpZih0eXBlID09PSdtYXQnKXtcclxuICAgICAgbGV0IGRhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSB8fCBcIlwiKTtcclxuICAgICAgZGF0YS5zdG9yZSA9IHN0b3JlSWQ7XHJcbiAgICAgIGRhdGEuY2xpZW50ID0gY2xpZW50SWQ7XHJcbiAgICAgIGRhdGEuY2xpZW50TmFtZSA9IGNsaWVudE5hbWUgPyBjbGllbnROYW1lOidTdG9yZXMnO1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KGRhdGEpO1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2Uvc3RvcmVzL21hdCddLCB7IFxyXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7IHN0b3JlSWQ6IHN0b3JlSWQgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgbGV0IGRhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSB8fCBcIlwiKTtcclxuICBkYXRhLnN0b3JlID0gc3RvcmVJZDtcclxuICBkYXRhLmNsaWVudCA9IGNsaWVudElkO1xyXG4gIGRhdGEuY2xpZW50TmFtZSA9IGNsaWVudE5hbWUgPyBjbGllbnROYW1lOidTdG9yZXMnO1xyXG4gIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIiwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dChkYXRhKTtcclxuICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2Uvc3RvcmVzL2luZnJhLXRpY2tldCddLCB7IFxyXG4gICAgcXVlcnlQYXJhbXM6IHsgc3RvcmVJZDogc3RvcmVJZCx0eXBlOnR5cGUgfVxyXG4gIH0pO1xyXG59XHJcbiAgfVxyXG5cclxuICBjbGllbnRUaWNrZXRzKGNsaWVudElkOmFueSxzdG9yZUlkOmFueSxjbGllbnROYW1lOmFueSl7XHJcbiAgICBsZXQgZGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIHx8IFwiXCIpO1xyXG4gICAgZGF0YS5zdG9yZSA9IHN0b3JlSWQ7XHJcbiAgICBkYXRhLmNsaWVudCA9IGNsaWVudElkO1xyXG4gICAgZGF0YS5jbGllbnROYW1lID0gY2xpZW50TmFtZSA/IGNsaWVudE5hbWU6J1N0b3Jlcyc7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dChkYXRhKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS9zdG9yZXMnXSk7XHJcbiAgfVxyXG4gIHN0b3JlVGlja2V0cyhjbGllbnRJZDphbnksc3RvcmVJZDphbnksY2xpZW50TmFtZTphbnkpe1xyXG4gICAgbGV0IGRhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSB8fCBcIlwiKTtcclxuICAgIGRhdGEuc3RvcmUgPSBzdG9yZUlkO1xyXG4gICAgZGF0YS5jbGllbnQgPSBjbGllbnRJZDtcclxuICAgIGRhdGEuY2xpZW50TmFtZSA9IGNsaWVudE5hbWUgPyBjbGllbnROYW1lOidTdG9yZXMnO1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQoZGF0YSk7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2Uvc3RvcmVzL2NhbWVyYXMnXSwgeyBcclxuICAgICAgcXVlcnlQYXJhbXM6IHsgc3RvcmVJZDogc3RvcmVJZCB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgdXNlclRpY2tldHMoY2xpZW50SWQ6YW55LHN0b3JlSWQ6YW55KXtcclxuICAgIGxldCBkYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgfHwgXCJcIik7XHJcbiAgICBkYXRhLnN0b3JlID0gc3RvcmVJZDtcclxuICAgIGRhdGEuY2xpZW50ID0gY2xpZW50SWQ7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dChkYXRhKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS91c2VycyddKTtcclxuICB9XHJcblxyXG4gIHNldHBhZ2VTaXplKCkge1xyXG4gICAgaWYgKHRoaXMudG90YWxJdGVtcyA8IDEwKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRvdGFsSXRlbXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYWdlU2l6ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtM1wiPlxyXG4gICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0eXBlICE9PSdkYXRhTWlzbWF0Y2gnICYmIHR5cGUgIT09ICdtYXQnXCIgY2xhc3M9XCJjYXJkLWxhYmVsIG1iLTJcIj57e3R5cGUgfCB0aXRsZWNhc2V9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0eXBlID09PSdkYXRhTWlzbWF0Y2gnXCIgY2xhc3M9XCJjYXJkLWxhYmVsIG1iLTJcIj5EYXRhIE1pc21hdGNoPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInR5cGUgPT09J21hdCdcIiBjbGFzcz1cImNhcmQtbGFiZWwgbWItMlwiPkVtcGxveWVlIE1hdDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YiBtYi0yXCI+TGFzdCB1cGRhdGVkIDEgaG91ciBhZ288L3NwYW4+IC0tPlxyXG4gICAgICAgIDwvaDM+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWFzc2lnblRpY2tldFwiIGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG1zLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjE3LjAzNjVcIiB5PVwiMTUuMTIyM1wiIHdpZHRoPVwiOC4xNTU0NlwiIGhlaWdodD1cIjJcIiByeD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSg0NSAxNy4wMzY1IDE1LjEyMjMpXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMSAxOUM2LjU1NTU2IDE5IDMgMTUuNDQ0NCAzIDExQzMgNi41NTU1NiA2LjU1NTU2IDMgMTEgM0MxNS40NDQ0IDMgMTkgNi41NTU1NiAxOSAxMUMxOSAxNS40NDQ0IDE1LjQ0NDQgMTkgMTEgMTlaTTExIDVDNy41MzMzMyA1IDUgNy41MzMzMyA1IDExQzUgMTQuNDY2NyA3LjUzMzMzIDE3IDExIDE3QzE0LjQ2NjcgMTcgMTcgMTQuNDY2NyAxNyAxMUMxNyA3LjUzMzMzIDE0LjQ2NjcgNSAxMSA1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBzLTE0IG1lLTJcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VhcmNoRGF0YSgpXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpYi1maWx0ZXJzICpuZ0lmPVwidXNlcnMudXNlclR5cGUgPT09ICd0YW5nbycgJiYgdXNlckxpc3Q/Lmxlbmd0aCB8fCB1c2Vycy51c2VyVHlwZSA9PT0gJ2NsaWVudCcgJiYgc3RvcmVMaXN0Py5sZW5ndGhcIiBbZGF0YU9iamVjdF09XCJkYXRhT2JqZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGxpZWRGaWx0ZXJzKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCI+PC9saWItZmlsdGVycz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCIhbm9EYXRhJiYhbG9hZGluZ1wiIChjbGljayk9XCJleHBvcnRYTFNYKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBteC0yIGJ0bi1vdXRsaW5lIGJ0bi1vdXRsaW5lLWRlZmF1bHQgcm91bmRlZC0zIHRleHQtbm93cmFwIGJvcmRlci12YWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMlwiPkV4cG9ydDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFzc2lnblRpY2tldFwiIGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWRkQXNzaWduVGlja2V0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIG14LTIgYnRuLXByaW1hcnkgIHJvdW5kZWQtMyB0ZXh0LW5vd3JhcCBib3JkZXItdmFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS45OTk4NCA0LjE2NjVWMTUuODMzMk00LjE2NjUgOS45OTk4NEgxNS44MzMyXCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0yIHRleHQtd2hpdGVcIj5Bc3NpZ24gVGlja2V0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuXHJcblxyXG4gICAgICAgIDx1bCAqbmdJZj1cIiFsb2FkaW5nICYmIGxpc3RBcnJheT8ubGVuZ3RoICYmIHR5cGUgIT09ICdtYXQnICYmIHR5cGUgIT09ICdkYXRhTWlzbWF0Y2gnXCIgY2xhc3M9XCJuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFiczEgbmF2LWxpbmUtdGFicyBib3JkZXItdHJhbnNwYXJlbnQgZmxleC1ub3dyYXAgaG9yaXpvbnRhbC1zY3JvbGxcIj5cclxuICAgICAgICAgICAgPGxpICBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nRm9yPVwibGV0IG9iaiBvZiBsaXN0QXJyYXkuc2xpY2UoKS5yZXZlcnNlKClcIiAoY2xpY2spPVwic2VsZWN0ZWRUYWJzKG9iailcIj5cclxuICAgICAgICAgICAgICAgIDxhICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IHNlbGVjdGVkVGFiID09PSBvYmoubmFtZX1cIiBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyIG5vLWJvcmRlciBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tvYmoubmFtZSB8IHRpdGxlY2FzZX19IDxzcGFuIGNsYXNzPVwibXgtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSBvYmoubmFtZSA/ICd0ZXh0LWJvcmRlci1wcmlhbXJ5JyA6ICd0ZXh0LWJvcmRlcidcIj57e29iai5jb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgICAgPHVsICpuZ0lmPVwiIWxvYWRpbmcgJiYgbGlzdEFycmF5Py5sZW5ndGggJiYgdHlwZSA9PT0gJ2RhdGFNaXNtYXRjaCdcIiBjbGFzcz1cIm5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzMSBuYXYtbGluZS10YWJzIGJvcmRlci10cmFuc3BhcmVudCBmbGV4LW5vd3JhcCBob3Jpem9udGFsLXNjcm9sbFwiPlxyXG4gICAgICAgICAgICA8bGkgIGNsYXNzPVwibmF2LWl0ZW1cIiAqbmdGb3I9XCJsZXQgb2JqIG9mIGxpc3RBcnJheS5zbGljZSgpLnJldmVyc2UoKVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMob2JqKVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSB0cmFuc2Zvcm1OYW1lKG9iai5uYW1lKSA/ICdhY3RpdmUnIDogJydcIiBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyIG5vLWJvcmRlciBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tvYmoubmFtZSB8IHRpdGxlY2FzZX19IDxzcGFuIGNsYXNzPVwibXgtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSB0cmFuc2Zvcm1OYW1lKG9iai5uYW1lKSA/ICd0ZXh0LWJvcmRlci1wcmlhbXJ5JyA6ICd0ZXh0LWJvcmRlcidcIj57e29iai5jb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJub0RhdGFcIiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGEuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nICYmICFub0RhdGFcIiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmUgbXQtNVwiPlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwIFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJ0aGlzLnVzZXJzLnVzZXJUeXBlID09PSd0YW5nbydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlciBtZS00XCIgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJzZWxlY3RBbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RBbGxTdG9yZSgkZXZlbnQpXCI+ICA8c3BhbiAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3RpY2tldElkJylcIj4gVGlja2V0IElEIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAndGlja2V0SWQnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICd0aWNrZXRJZCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPiAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwidHlwZSAhPT0nZGF0YU1pc21hdGNoJ1wiIChjbGljayk9XCJvblNvcnQoJ2lzc3VlRGF0ZScpXCI+IENyZWF0ZWQgRGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdpc3N1ZURhdGUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ2lzc3VlRGF0ZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwidHlwZSA9PT0naW5mcmEnXCIgKGNsaWNrKT1cIm9uU29ydCgnY3JlYXRlZEF0JylcIj4gQ3JlYXRlZCBUaW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdjcmVhdGVkQXQnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdjcmVhdGVkQXQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cInR5cGUgPT09J2luZnJhJ1wiIChjbGljayk9XCJvblNvcnQoJ2lzc3VlQ2xvc2VkRGF0ZScpXCI+IENsb3NlZCBUaW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnaXNzdWVDbG9zZWREYXRlJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ2lzc3VlQ2xvc2VkRGF0ZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCJ0eXBlID09PSdkYXRhTWlzbWF0Y2gnXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ2NyZWF0ZWRBdCcpXCI+IENyZWF0ZWQgRGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ2NyZWF0ZWRBdCcgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdjcmVhdGVkQXQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwidHlwZSA9PT0nZGF0YU1pc21hdGNoJ1wiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiA+PHNwYW4gKGNsaWNrKT1cIm9uU29ydCgnaXNzdWVEYXRlJylcIj5Jc3N1ZSBEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdpc3N1ZURhdGUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdpc3N1ZURhdGUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LnVzZXJUeXBlID09PSAndGFuZ28nXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ2NsaWVudE5hbWUnKVwiPkJyYW5kIE5hbWU8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnY2xpZW50TmFtZScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnY2xpZW50TmFtZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LnVzZXJUeXBlID09PSAndGFuZ28nXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ2NsaWVudElkJylcIj5CcmFuZCBJRDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdjbGllbnRJZCcgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnY2xpZW50SWQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3N0b3JlTmFtZScpXCI+U3RvcmUgTmFtZTxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZU5hbWUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N0b3JlTmFtZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3N0b3JlSWQnKVwiPlN0b3JlIElEPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N0b3JlSWQnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N0b3JlSWQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwidGhpcy51c2Vycy51c2VyVHlwZSA9PT0ndGFuZ28nICYmICh0eXBlID09PSdpbmZyYSd8fHR5cGUgPT09J2RhdGFNaXNtYXRjaCd8fHR5cGUgPT09J21hdCcpXCIgKGNsaWNrKT1cIm9uU29ydCgndXNlck5hbWUnKVwiPlJlc29sdmVkIEJ5PHN2ZyBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICd1c2VyTmFtZScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAndXNlck5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cInRoaXMudXNlcnMudXNlclR5cGUgPT09J3RhbmdvJyAmJiB0eXBlID09PSdpbnN0YWxsYXRpb24nXCIgKGNsaWNrKT1cIm9uU29ydCgndXNlck5hbWUnKVwiPkluc3RhbGxlZCBCeTxzdmcgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAndXNlck5hbWUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3VzZXJOYW1lJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwidHlwZSA9PT0nZGF0YU1pc21hdGNoJ1wiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdpc3N1ZVR5cGUnKVwiPklzc3VlIFR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnaXNzdWVUeXBlJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdpc3N1ZVR5cGUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwidHlwZSA9PT0nZGF0YU1pc21hdGNoJ1wiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCd0eXBlJylcIj5RdWVyeSBUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3R5cGUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3R5cGUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwidHlwZSA9PT0nZGF0YU1pc21hdGNoJ1wiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdyZXBvcnRlZEZvb3RmYWxsJylcIj5SZXBvcnRlZCBGb290ZmFsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdyZXBvcnRlZEZvb3RmYWxsJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdyZXBvcnRlZEZvb3RmYWxsJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCdcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnbWFwcGVkQ291bnQnKVwiPlVuaXF1ZSBJbWFnZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnbWFwcGVkQ291bnQnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ21hcHBlZENvdW50JyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCdcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnc3VjY2Vzc1BlcmNlbnRhZ2UnKVwiPlN1Y2Nlc3MgUGVyY2VudGFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdzdWNjZXNzUGVyY2VudGFnZScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnc3VjY2Vzc1BlcmNlbnRhZ2UnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgICpuZ0lmPVwidHlwZSA9PT0naW5zdGFsbGF0aW9uJ1wiIChjbGljayk9XCJvblNvcnQoJ3N0YXR1cycpXCI+RGVwbG95ZWQgU3RhdHVzPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnc3RhdHVzJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N0YXR1cycgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggICpuZ0lmPVwidHlwZSA9PT0nZGF0YU1pc21hdGNoJyB8fHR5cGUgPT09J21hdCd8fCB0eXBlID09PSdpbmZyYSdcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnc3RhdHVzJylcIj5TdGF0dXM8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdzdGF0dXMnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnc3RhdHVzJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbjwhLS0gYWRkZWQgY29uZmlnIGFuZCB0b3RhbCBkb3dudGltZSBhcyBwZXIgdGhlIHByaW9kdWN0IHRlYW0gcmVxdWlyZW1lbnQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+Q29uZmlndXJlZCBUaWNrZXQgVGltZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPiBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoICA+VG90YWwgRG93bnRpbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuPCEtLSAgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggICpuZ0lmPVwidHlwZSAhPT0gJ21hdCcgJiYgdHlwZSAhPT0gJ2RhdGFNaXNtYXRjaCdcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgncHJpbWFyeUlzc3VlJylcIj5QcmltYXJ5IElzc3VlczxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdwcmltYXJ5SXNzdWUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3ByaW1hcnlJc3N1ZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggICpuZ0lmPVwidHlwZSAhPT0gJ21hdCcgJiYgdHlwZSAhPT0gJ2RhdGFNaXNtYXRjaCdcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnc2Vjb25kYXJ5SXNzdWUnKVwiPlNlY29uZGFyeSBJc3N1ZXM8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnc2Vjb25kYXJ5SXNzdWUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3NlY29uZGFyeUlzc3VlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwidHlwZSE9PSdpbnN0YWxsYXRpb24nXCI+QWN0aW9uczwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBvYmogb2YgdGFibGVMaXN0QXJyYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwidGhpcy51c2Vycy51c2VyVHlwZSA9PT0ndGFuZ28nXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyIG1lLTQgbXQtM1wiIHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwib2JqLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlQ2hlY2soJGV2ZW50LG9iaj8udGlja2V0SWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInR5cGUgPT09ICdkYXRhTWlzbWF0Y2gnIHx8IHR5cGUgPT09ICdtYXQnIHx8IHR5cGUgPT09ICdpbmZyYSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHh0LWxpZ2h0LXByaW1hcnkgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwidGlja2V0cyh0eXBlLG9iai5jbGllbnRJZCxvYmouc3RvcmVJZCxvYmouY2xpZW50TmFtZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29iai50aWNrZXRJZH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInR5cGUgPT09ICdpbnN0YWxsYXRpb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvYmoudGlja2V0SWR9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ0eXBlID09PSAnZGF0YU1pc21hdGNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvYmo/LmNyZWF0ZWRBdCB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiAnZGQgTU1NLCB5eXl5J319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwidHlwZSA9PT0gJ2RhdGFNaXNtYXRjaCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b2JqPy5pc3N1ZURhdGUgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTogJ2RkIE1NTSwgeXl5eSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInR5cGUgIT09ICdkYXRhTWlzbWF0Y2gnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29iaj8uY3JlYXRlZEF0IHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU6ICdkZCBNTU0sIHl5eXknfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwidHlwZSA9PT0gJ2luZnJhJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvYmo/LmNyZWF0ZWRBdCB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTogJ2hoOm1tIGEnIHwgdXBwZXJjYXNlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwidHlwZSA9PT0gJ2luZnJhJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvYmo/Lmlzc3VlQ2xvc2VkRGF0ZT8ob2JqPy5pc3N1ZUNsb3NlZERhdGUgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU6ICdoaDptbSBhJyB8IHVwcGVyY2FzZSk6XCItLVwifX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwidGhpcy51c2Vycy51c2VyVHlwZSA9PT0ndGFuZ28nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGUgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xpZW50VGlja2V0cyhvYmouY2xpZW50SWQsb2JqLnN0b3JlSWQsb2JqLmNsaWVudE5hbWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0eHQtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29iai5jbGllbnROYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwidGhpcy51c2Vycy51c2VyVHlwZSA9PT0ndGFuZ28nXCI+e3tvYmouY2xpZW50SWR9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGUgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic3RvcmVUaWNrZXRzKG9iai5jbGllbnRJZCxvYmouc3RvcmVJZCxvYmouY2xpZW50TmFtZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInR4dC1saWdodC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b2JqLnN0b3JlTmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e29iai5zdG9yZUlkfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwidGhpcy51c2Vycy51c2VyVHlwZSA9PT0ndGFuZ28nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGUgY3Vyc29yLXBvaW50ZXJcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29iai51c2VyTmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCcgJiYgb2JqLmlzc3VlVHlwZSA9PT0nbG93Y291bnQnXCIgPkxvdyBDb3VudDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCcgJiYgb2JqLmlzc3VlVHlwZSA9PT0naGlnaGNvdW50J1wiPkhpZ2ggQ291bnQ8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemVcIiAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCdcIj57e29iaj8udHlwZSA/IG9iaj8udHlwZTonLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemVcIiAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCdcIj57e29iaj8ucmVwb3J0ZWRGb290ZmFsbCA/IG9iaj8ucmVwb3J0ZWRGb290ZmFsbDonLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemVcIiAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCdcIj57e29iaj8ubWFwcGVkQ291bnQgPyBvYmo/Lm1hcHBlZENvdW50OictLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2FwaXRhbGl6ZVwiICpuZ0lmPVwidHlwZSA9PT0nZGF0YU1pc21hdGNoJ1wiPnt7b2JqPy5zdWNjZXNzUGVyY2VudGFnZSA/IG9iaj8uc3VjY2Vzc1BlcmNlbnRhZ2U6Jy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwidHlwZT09PSdpbnN0YWxsYXRpb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9iai5pbnN0YWxsYXRpb25TdGF0dXMgPT09J3BhaXJlZCcgfHwgb2JqLmluc3RhbGxhdGlvblN0YXR1cyA9PT0nb25ib2FyZGVkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5IG14LTRcIj57e29iai5pbnN0YWxsYXRpb25TdGF0dXMgfCB0aXRsZWNhc2V9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqLmluc3RhbGxhdGlvblN0YXR1cyA9PT0nbGl2ZSdcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXN1Y2Nlc3MgbXgtNFwiPkxpdmU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9iai5pbnN0YWxsYXRpb25TdGF0dXMgPT09J2luc3RhbGxhdGlvbmZhaWxlZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtd2FybmluZyBteC00XCI+SW5zdGFsbGF0aW9uZmFpbGVkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmouaW5zdGFsbGF0aW9uU3RhdHVzID09PSdkZXBsb3llZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2VzcyBteC00IHRleHQtY2FwaXRhbGl6ZVwiPmRlcGxveWVkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ0eXBlPT09J2luZnJhJyB8fCB0eXBlPT09J21hdCcgfHwgdHlwZT09PSdkYXRhTWlzbWF0Y2gnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9iai5zdGF0dXMgPT09J29wZW4nXCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kYW5nZXJcIj5PcGVuPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmouc3RhdHVzID09PSdjbG9zZWQnXCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1zdWNjZXNzXCI+Q2xvc2VkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmouc3RhdHVzID09PSdpbnByb2dyZXNzJ1wiIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeVwiPkluXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3Jlc3M8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAgKm5nSWY9XCJ0eXBlPT09J2luZnJhJ1wiPlxyXG57e29iai5jb25maWd1cmVkRG93blRpbWU/b2JqLmNvbmZpZ3VyZWREb3duVGltZSo2MDowIHx8IDAgfX0ge3tvYmouY29uZmlndXJlZERvd25UaW1lID4gMT8gJ21pbnMnIDogJ21pbid9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAgKm5nSWY9XCJ0eXBlPT09J2luZnJhJ1wiPiBcclxue3tvYmoudG90YWxEb3duVGltZSB8fCAwIH19IHt7b2JqLnRvdGFsRG93blRpbWUgPiAxPyAnbWlucycgOiAnbWluJ319IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ0eXBlPT09J2luc3RhbGxhdGlvbicgfHwgdHlwZT09PSdpbmZyYSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmoucHJpbWFyeUlzc3VlICE9PSctJ1wiPnt7b2JqLnByaW1hcnlJc3N1ZSA/IG9iai5wcmltYXJ5SXNzdWUgOidJc3N1ZSBub3QgaWRlbnRpZmllZCd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9iai5wcmltYXJ5SXNzdWUgPT09Jy0nXCI+SXNzdWUgbm90IGlkZW50aWZpZWQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwidHlwZT09PSdpbnN0YWxsYXRpb24nIHx8IHR5cGU9PT0naW5mcmEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9iai5zZWNvbmRhcnlJc3N1ZVwiPnt7b2JqLnNlY29uZGFyeUlzc3VlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInR5cGU9PT0naW5mcmEnIHx8IHR5cGUgPT09J2RhdGFNaXNtYXRjaCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMiBjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwidGhpcy51c2Vycy51c2VyVHlwZSA9PT0ndGFuZ28nXCIgKGNsaWNrKT1cImNvbW1lbnRNb2RhbChvYmopXCI+PHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMSAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE3LjY0MzEgMTIuNUMxNy42NDMxIDEyLjk0MiAxNy40Njc1IDEzLjM2NiAxNy4xNTQ5IDEzLjY3ODVDMTYuODQyMyAxMy45OTExIDE2LjQxODQgMTQuMTY2NyAxNS45NzY0IDE0LjE2NjdINS45NzY0TDIuNjQzMDcgMTcuNVY0LjE2NjY3QzIuNjQzMDcgMy43MjQ2NCAyLjgxODY2IDMuMzAwNzIgMy4xMzEyMiAyLjk4ODE2QzMuNDQzNzggMi42NzU1OSAzLjg2NzcxIDIuNSA0LjMwOTczIDIuNUgxNS45NzY0QzE2LjQxODQgMi41IDE2Ljg0MjMgMi42NzU1OSAxNy4xNTQ5IDIuOTg4MTZDMTcuNDY3NSAzLjMwMDcyIDE3LjY0MzEgMy43MjQ2NCAxNy42NDMxIDQuMTY2NjdWMTIuNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwidGlja2V0cyh0eXBlLG9iai5jbGllbnRJZCxvYmouc3RvcmVJZCxvYmouY2xpZW50TmFtZSlcIj48c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIxIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xMDY0MF8xODA2MSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0wLjk3NjU2MiAxMEMwLjk3NjU2MiAxMCA0LjMwOTkgMy4zMzMzNyAxMC4xNDMyIDMuMzMzMzdDMTUuOTc2NiAzLjMzMzM3IDE5LjMwOTkgMTAgMTkuMzA5OSAxMEMxOS4zMDk5IDEwIDE1Ljk3NjYgMTYuNjY2NyAxMC4xNDMyIDE2LjY2NjdDNC4zMDk5IDE2LjY2NjcgMC45NzY1NjIgMTAgMC45NzY1NjIgMTBaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuMTQzMiAxMi41QzExLjUyMzkgMTIuNSAxMi42NDMyIDExLjM4MDggMTIuNjQzMiAxMEMxMi42NDMyIDguNjE5MzMgMTEuNTIzOSA3LjUwMDA0IDEwLjE0MzIgNy41MDAwNEM4Ljc2MjUyIDcuNTAwMDQgNy42NDMyMyA4LjYxOTMzIDcuNjQzMjMgMTBDNy42NDMyMyAxMS4zODA4IDguNzYyNTIgMTIuNSAxMC4xNDMyIDEyLjVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xMDY0MF8xODA2MVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLjE0MzA2NilcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwidHlwZSA9PT0gJ21hdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMiBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJyb3V0ZVRvTWF0KG9iai5zdG9yZUlkLG9iai5jbGllbnRJZCxvYmouY2xpZW50TmFtZSlcIj48c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjEgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTA2NDBfMTgwNjEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTAuOTc2NTYyIDEwQzAuOTc2NTYyIDEwIDQuMzA5OSAzLjMzMzM3IDEwLjE0MzIgMy4zMzMzN0MxNS45NzY2IDMuMzMzMzcgMTkuMzA5OSAxMCAxOS4zMDk5IDEwQzE5LjMwOTkgMTAgMTUuOTc2NiAxNi42NjY3IDEwLjE0MzIgMTYuNjY2N0M0LjMwOTkgMTYuNjY2NyAwLjk3NjU2MiAxMCAwLjk3NjU2MiAxMFpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMC4xNDMyIDEyLjVDMTEuNTIzOSAxMi41IDEyLjY0MzIgMTEuMzgwOCAxMi42NDMyIDEwQzEyLjY0MzIgOC42MTkzMyAxMS41MjM5IDcuNTAwMDQgMTAuMTQzMiA3LjUwMDA0QzguNzYyNTIgNy41MDAwNCA3LjY0MzIzIDguNjE5MzMgNy42NDMyMyAxMEM3LjY0MzIzIDExLjM4MDggOC43NjI1MiAxMi41IDEwLjE0MzIgMTIuNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTA2NDBfMTgwNjFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLjE0MzA2NilcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWxvYWRpbmcgJiYgIW5vRGF0YVwiIGNsYXNzPVwibXktM1wiPlxyXG4gICAgICAgICAgICA8bGliLXBhZ2luYXRpb24gW2l0ZW1zUGVyUGFnZV09XCJwYWdlU2l6ZVwiIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZVwiIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXNcIlxyXG4gICAgICAgICAgICAgICAgW3BhZ2luYXRpb25TaXplc109XCJwYWdpbmF0aW9uU2l6ZXNcIiBbcGFnZVNpemVdPVwic2V0cGFnZVNpemUoKVwiIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
847
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlja2V0cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2UtdGlja2V0cy9zcmMvbGliL2NvbXBvbmVudHMvdGlja2V0cy90aWNrZXRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS10aWNrZXRzL3NyYy9saWIvY29tcG9uZW50cy90aWNrZXRzL3RpY2tldHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBR2hGLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBR2hGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7Ozs7O0FBTWpGLE1BQU0sT0FBTyxnQkFBZ0I7SUEyQ2pCO0lBQ0E7SUFDQTtJQUNEO0lBQ0M7SUFDQTtJQUNBO0lBaERWLElBQUksR0FBRyxPQUFPLENBQUM7SUFDZixXQUFXLEdBQVEsRUFBRSxDQUFDO0lBQ3RCLFdBQVcsR0FBUSxPQUFPLENBQUM7SUFDM0Isc0JBQXNCO0lBQ3RCLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDbEIsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUNoQixVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsZUFBZSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMvQixRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ0csUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDMUMsWUFBWSxHQUFZLEtBQUssQ0FBQztJQUM5QixjQUFjLEdBQVEsRUFBRSxDQUFDO0lBQ3pCLGlCQUFpQixHQUFRLEVB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QUMsd0JBQXdCLENBQUMsRUFBRTtZQUMvQyxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxXQUFXLENBQUMsUUFBYSxFQUFFLE9BQVk7UUFDckMsSUFBSSxJQUFJLEdBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLEVBQUU7WUFDeEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQ3hCO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDdEI7SUFDSCxDQUFDO3dHQXh4QlUsZ0JBQWdCOzRGQUFoQixnQkFBZ0IsbURDZDdCLDZ5cENBa2NNOzs0RkRwYk8sZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7IEFkZENzbU1vZGFsQ29tcG9uZW50IH0gZnJvbSBcIi4uL2FkZC1jc20tbW9kYWwvYWRkLWNzbS1tb2RhbC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgVGlja2V0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy90aWNrZXQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFeGNlbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leGNlbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tbWVudE1vZGVsQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbW1lbnQtbW9kZWwvY29tbWVudC1tb2RlbC5jb21wb25lbnRcIjtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLXRpY2tldHNcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3RpY2tldHMuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL3RpY2tldHMuY29tcG9uZW50LnNjc3NcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFRpY2tldHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgdHlwZSA9IFwiSW5mcmFcIjtcclxuICBzZWFyY2hWYWx1ZTogYW55ID0gXCJcIjtcclxuICBzZWxlY3RlZFRhYjogYW55ID0gXCJ0b3RhbFwiO1xyXG4gIC8vIHBhZ2luYXRpb25WYXJpYWJsZXNcclxuICBpdGVtc1BlclBhZ2UgPSAxMDtcclxuICBjdXJyZW50UGFnZSA9IDE7XHJcbiAgdG90YWxJdGVtcyA9IDA7XHJcbiAgcGFnaW5hdGlvblNpemVzID0gWzEwLCAyMCwgMzBdO1xyXG4gIHBhZ2VTaXplID0gMTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgYXNzaWduVGlja2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZmlsdGVyQnlTdG9yZXM6IGFueSA9IFtdO1xyXG4gIGZpbHRlckJ5aW5zdGFsbGVkOiBhbnkgPSBbXTtcclxuICBmaWx0ZXJCeVN0YXR1czogYW55ID0gW107XHJcbiAgZmlsdGVyQnlRdWVyeVR5cGU6IGFueSA9IFtdO1xyXG4gIGlzc3VlVHlwZTogYW55ID0gW107XHJcbiAgc29ydGVkQ29sdW1uOiBzdHJpbmc7XHJcbiAgc29ydERpcmVjdGlvbjogbnVtYmVyO1xyXG4gIGhlYWRlckZpbHRlcnM6IGFueTtcclxuICB1c2VyTGlzdF9yZXE6IGFueTtcclxuICB1c2VyTGlzdDogYW55ID0gW107XHJcbiAgZGF0YU9iamVjdDogYW55ID0gW107XHJcbiAgc3RvcmVMaXN0OiBhbnkgPSBbXTtcclxuICBzdGF0dXNUeXBlOiB7IHRleHQ6IHN0cmluZzsgaWQ6IHN0cmluZyB9W107XHJcbiAgdHlwZU5hbWU6IHN0cmluZztcclxuICB1c2VyczogYW55O1xyXG4gIGxpbWl0OiBudW1iZXIgPSAxMDtcclxuICBvZmZzZXQ6IG51bWJlciA9IDE7XHJcbiAgc29ydEJ5OiBhbnkgPSAtMTtcclxuICBzb3J0Q29sdW1OYW1lOiBhbnkgPSBcIlwiO1xyXG4gIGxpc3RBcnJheTogYW55ID0gW107XHJcbiAgdGFibGVMaXN0QXJyYXk6IGFueSA9IFtdO1xyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIG5vRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdEFsbDogYW55ID0gZmFsc2U7XHJcbiAgYXNzaWduU3RvcmVzOiBhbnkgPSBbXTtcclxuICBpc3N1ZVR5cGVMaXN0OiBhbnkgPSBbXTtcclxuICBxdWVyeVR5cGVMaXN0OiBhbnkgPSBbXTtcclxuICBDbHVzdGVyTGlzdDogYW55W107XHJcbiAgZmlsdGVyQnlDbHVzdGVyOiBhbnlbXTtcclxuICBzaG93Q2x1c3RlckZpbHRlcjogYm9vbGVhbiA9IGZhbHNlXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHB1YmxpYyBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBUaWNrZXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBleGNlbHNlcnZpY2U6IEV4Y2VsU2VydmljZSxcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVzZXJEYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlci1pbmZvXCIpIHx8IFwie31cIik7XHJcbiAgICB0aGlzLnVzZXJzID0gdXNlckRhdGE7XHJcbiAgICB0aGlzLnJvdXRlPy5xdWVyeVBhcmFtc1xyXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgICB0aGlzLnR5cGUgPSBwYXJhbXMudHlwZTtcclxuICAgICAgICB0aGlzLmZpbHRlckJ5U3RvcmVzID0gW107IHRoaXMuc3RvcmVMaXN0ID0gW11cclxuICAgICAgICB0aGlzLmZpbHRlckJ5aW5zdGFsbGVkID0gW107IHRoaXMuc3RhdHVzVHlwZSA9IFtdXHJcbiAgICAgICAgdGhpcy5maWx0ZXJCeVN0YXR1cyA9IFtdOyB0aGlzLnVzZXJMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5pc3N1ZVR5cGUgPSBbXTsgdGhpcy5pc3N1ZVR5cGVMaXN0ID0gW11cclxuICAgICAgICB0aGlzLmZpbHRlckJ5UXVlcnlUeXBlID0gW107IHRoaXMucXVlcnlUeXBlTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyQnlDbHVzdGVyID0gW107IHRoaXMuQ2x1c3Rlckxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMuZGF0YU9iamVjdCA9IFtdXHJcbiAgICAgICAgdGhpcy5ncy5tYW5hZ2VSZWZyZXNoVHJpZ2dlci5uZXh0KHRydWUpXHJcbiAgICAgICAgdGhpcy5nZXRJbml0bG9hZCgpO1xyXG4gICAgICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWU/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICB0aGlzLmhlYWRlckZpbHRlcnMgPSBkYXRhO1xyXG4gICAgICAgICAgICAgIHRoaXMudXNlckxpc3RfcmVxID0ge1xyXG4gICAgICAgICAgICAgICAgbGltaXQ6IDEwMDAwLFxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxyXG4gICAgICAgICAgICAgICAgdXNlclR5cGU6IHRoaXMudXNlcnMudXNlclR5cGUsXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB0aGlzLmdldHN0b3JlRmlsdGVyKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRBbGxHcm91cHMoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09IFwiaW5zdGFsbGF0aW9uXCIpIHtcclxuICAgICAgICAgIHRoaXMudHlwZU5hbWUgPSBcIkluc3RhbGxlZCBCeVwiO1xyXG4gICAgICAgICAgdGhpcy5zdGF0dXNUeXBlID0gW1xyXG4gICAgICAgICAgICB7IHRleHQ6IFwiT25ib2FyZGVkXCIsIGlkOiBcIm9uYm9hcmRlZFwiIH0sXHJcbiAgICAgICAgICAgIHsgdGV4dDogXCJQYWlyZWRcIiwgaWQ6IFwicGFpcmVkXCIgfSxcclxuICAgICAgICAgICAgeyB0ZXh0OiBcIkluc3RhbGxhdGlvbmZhaWxlZFwiLCBpZDogXCJpbnN0YWxsYXRpb25mYWlsZWRcIiB9LFxyXG4gICAgICAgICAgICB7IHRleHQ6IFwiRGVwbG95ZWRcIiwgaWQ6IFwiZGVwbG95ZWRcIiB9LFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50eXBlTmFtZSA9IFwiUmVzb2x2ZWQgQnlcIjtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy51c2Vycy51c2VyVHlwZSA9PT0gXCJ0YW5nb1wiICYmIHRoaXMudHlwZSA9PT0gJ2luZnJhJykge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1c1R5cGUgPSBbXHJcbiAgICAgICAgICAgICAgeyB0ZXh0OiBcIk9wZW5cIiwgaWQ6IFwib3BlblwiIH0sXHJcbiAgICAgICAgICAgICAgeyB0ZXh0OiBcIkluIFByb2dyZXNzXCIsIGlkOiBcImlucHJvZ3Jlc3NcIiB9LFxyXG4gICAgICAgICAgICAgIHsgdGV4dDogXCJSZWZyZXNoIFRpY2tldFwiLCBpZDogXCJyZWZyZXNodGlja2V0XCIgfSxcclxuICAgICAgICAgICAgICB7IHRleHQ6IFwiQ2xvc2VkXCIsIGlkOiBcImNsb3NlZFwiIH0sXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1c1R5cGUgPSBbXHJcbiAgICAgICAgICAgICAgeyB0ZXh0OiBcIk9wZW5cIiwgaWQ6IFwib3BlblwiIH0sXHJcbiAgICAgICAgICAgICAgeyB0ZXh0OiBcIkluIFByb2dyZXNzXCIsIGlkOiBcImlucHJvZ3Jlc3NcIiB9LFxyXG4gICAgICAgICAgICAgIHsgdGV4dDogXCJDbG9zZWRcIiwgaWQ6IFwiY2xvc2VkXCIgfSxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuaXNzdWVUeXBlTGlzdCA9IFtcclxuICAgICAgICAgICAgeyB0ZXh0OiBcIkhpZ2ggQ291bnRcIiwgaWQ6IFwiaGlnaGNvdW50XCIgfSxcclxuICAgICAgICAgICAgeyB0ZXh0OiBcIkxvdyBDb3VudFwiLCBpZDogXCJsb3djb3VudFwiIH0sXHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgICAgdGhpcy5xdWVyeVR5cGVMaXN0ID0gW1xyXG4gICAgICAgICAgICB7IHRleHQ6IFwiSW50ZXJuYWxcIiwgaWQ6IFwiaW50ZXJuYWxcIiB9LFxyXG4gICAgICAgICAgICB7IHRleHQ6IFwiRXh0ZXJuYWxcIiwgaWQ6IFwiZXh0ZXJuYWxcIiB9LFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBnZXRJbml0bG9hZCgpIHtcclxuICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBcIlwiO1xyXG4gICAgdGhpcy5saW1pdCA9IDEwO1xyXG4gICAgdGhpcy5wYWdlU2l6ZSA9IDEwO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiID0gXCJ0b3RhbFwiO1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLnNvcnRlZENvbHVtbiA9ICcnO1xyXG4gIH1cclxuICBnZXRzdG9yZUZpbHRlcigpIHtcclxuICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAuZ2V0U290cmVzTGlzdCh7IGlzc3VlVHlwZTogdGhpcy50eXBlLCBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudHMgfSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcz8uZGF0YT8uZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgZWxlbWVudC50ZXh0ID0gZWxlbWVudC5zdG9yZUlkO1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQuaWQgPSBlbGVtZW50LnN0b3JlSWQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAodGhpcy51c2Vycy51c2VyVHlwZSA9PT0gXCJ0YW5nb1wiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXR1c2VybGlzdCgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdpbnN0YWxsYXRpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFPYmplY3QgPSBbXHJcbiAgICAgICAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IFwiU3RvcmUgSURcIiwgSXNzdWVzOiB0aGlzLnN0b3JlTGlzdCB9LFxyXG4gICAgICAgICAgICAgICAgICB7IERlc2NyaXB0aW9uOiBcIkRlcGxveWVkIFN0YXR1c1wiLCBJc3N1ZXM6IHRoaXMuc3RhdHVzVHlwZSB9LFxyXG5cclxuICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaG93Q2x1c3RlckZpbHRlcikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRhdGFPYmplY3QucHVzaCh7IERlc2NyaXB0aW9uOiBcIkNsdXN0ZXJzXCIsIElzc3VlczogdGhpcy5DbHVzdGVyTGlzdCB9LClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ2luZnJhJyB8fCB0aGlzLnR5cGUgPT09ICdkYXRhTWlzbWF0Y2gnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFPYmplY3QgPSBbXHJcbiAgICAgICAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IFwiU3RvcmUgSURcIiwgSXNzdWVzOiB0aGlzLnN0b3JlTGlzdCB9LFxyXG4gICAgICAgICAgICAgICAgICB7IERlc2NyaXB0aW9uOiBcIlN0YXR1c1wiLCBJc3N1ZXM6IHRoaXMuc3RhdHVzVHlwZSB9LFxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NsdXN0ZXJGaWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhT2JqZWN0LnB1c2goeyBEZXNjcmlwdGlvbjogXCJDbHVzdGVyc1wiLCBJc3N1ZXM6IHRoaXMuQ2x1c3Rlckxpc3QgfSwpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdtYXQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFPYmplY3QgPSBbXHJcbiAgICAgICAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IFwiU3RhdHVzXCIsIElzc3VlczogdGhpcy5zdGF0dXNUeXBlIH0sXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaG93Q2x1c3RlckZpbHRlcikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRhdGFPYmplY3QucHVzaCh7IERlc2NyaXB0aW9uOiBcIkNsdXN0ZXJzXCIsIElzc3VlczogdGhpcy5DbHVzdGVyTGlzdCB9LClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5nZXRUYWJsZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRUYWJsZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBnZXR1c2VybGlzdCgpIHtcclxuICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAuZ2V0VXNlckxpc3QodGhpcy51c2VyTGlzdF9yZXEpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMudXNlckxpc3QgPSByZXM/LmRhdGE/LnJlc3VsdDtcclxuICAgICAgICAgIHRoaXMudXNlckxpc3Q/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LnRleHQgPSBlbGVtZW50LnVzZXJOYW1lO1xyXG4gICAgICAgICAgICBlbGVtZW50LmlkID0gZWxlbWVudC5lbWFpbDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlcnMudXNlclR5cGUgPT09IFwidGFuZ29cIiAmJiAodGhpcy50eXBlID09PSAnaW5zdGFsbGF0aW9uJykpIHtcclxuICAgICAgICAgIHRoaXMuZGF0YU9iamVjdCA9IFtcclxuICAgICAgICAgICAgeyBEZXNjcmlwdGlvbjogXCJTdG9yZSBJRFwiLCBJc3N1ZXM6IHRoaXMuc3RvcmVMaXN0IH0sXHJcbiAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IFwiRGVwbG95ZWQgU3RhdHVzXCIsIElzc3VlczogdGhpcy5zdGF0dXNUeXBlIH0sXHJcbiAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IHRoaXMudHlwZU5hbWUsIElzc3VlczogdGhpcy51c2VyTGlzdCB9LFxyXG5cclxuICAgICAgICAgIF07XHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93Q2x1c3RlckZpbHRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFPYmplY3QucHVzaCh7IERlc2NyaXB0aW9uOiBcIkNsdXN0ZXJzXCIsIElzc3VlczogdGhpcy5DbHVzdGVyTGlzdCB9LClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNlcnMudXNlclR5cGUgPT09IFwidGFuZ29cIiAmJiB0aGlzLnR5cGUgPT09ICdpbmZyYScpIHtcclxuICAgICAgICAgIHRoaXMuZGF0YU9iamVjdCA9IFtcclxuICAgICAgICAgICAgeyBEZXNjcmlwdGlvbjogXCJTdG9yZSBJRFwiLCBJc3N1ZXM6IHRoaXMuc3RvcmVMaXN0IH0sXHJcbiAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IFwiU3RhdHVzXCIsIElzc3VlczogdGhpcy5zdGF0dXNUeXBlIH0sXHJcbiAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IHRoaXMudHlwZU5hbWUsIElzc3VlczogdGhpcy51c2VyTGlzdCB9LFxyXG5cclxuICAgICAgICAgIF07XHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93Q2x1c3RlckZpbHRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFPYmplY3QucHVzaCh7IERlc2NyaXB0aW9uOiBcIkNsdXN0ZXJzXCIsIElzc3VlczogdGhpcy5DbHVzdGVyTGlzdCB9LClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNlcnMudXNlclR5cGUgPT09IFwidGFuZ29cIiAmJiB0aGlzLnR5cGUgPT09ICdkYXRhTWlzbWF0Y2gnKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFPYmplY3QgPSBbXHJcbiAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IFwiU3RvcmUgSURcIiwgSXNzdWVzOiB0aGlzLnN0b3JlTGlzdCB9LFxyXG4gICAgICAgICAgICB7IERlc2NyaXB0aW9uOiBcIlF1ZXJ5IFR5cGVcIiwgSXNzdWVzOiB0aGlzLnF1ZXJ5VHlwZUxpc3QgfSxcclxuICAgICAgICAgICAgeyBEZXNjcmlwdGlvbjogXCJTdGF0dXNcIiwgSXNzdWVzOiB0aGlzLnN0YXR1c1R5cGUgfSxcclxuXHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0NsdXN0ZXJGaWx0ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhT2JqZWN0LnB1c2goeyBEZXNjcmlwdGlvbjogXCJDbHVzdGVyc1wiLCBJc3N1ZXM6IHRoaXMuQ2x1c3Rlckxpc3QgfSwpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdtYXQnKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFPYmplY3QgPSBbXHJcbiAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IFwiU3RhdHVzXCIsIElzc3VlczogdGhpcy5zdGF0dXNUeXBlIH0sXHJcblxyXG4gICAgICAgICAgXTtcclxuICAgICAgICAgIGlmICh0aGlzLnNob3dDbHVzdGVyRmlsdGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YU9iamVjdC5wdXNoKHsgRGVzY3JpcHRpb246IFwiQ2x1c3RlcnNcIiwgSXNzdWVzOiB0aGlzLkNsdXN0ZXJMaXN0IH0sKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuICBzZWFyY2hEYXRhKCkge1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLmxpbWl0ID0gMTA7XHJcbiAgICB0aGlzLmdldFRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBvblNvcnQoY29sdW1uOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLnNvcnRlZENvbHVtbiA9PT0gY29sdW1uKSB7XHJcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IHRoaXMuc29ydERpcmVjdGlvbiA9PT0gMSA/IC0xIDogMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc29ydGVkQ29sdW1uID0gY29sdW1uO1xyXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSAxO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRUYWJsZSgpO1xyXG4gIH1cclxuICBleHBvcnRYTFNYKCkge1xyXG4gICAgbGV0IG9iajogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycz8uY2xpZW50cyxcclxuICAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRmlsdGVycz8uZGF0ZT8uc3RhcnREYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuaGVhZGVyRmlsdGVycz8uZGF0ZT8uZW5kRGF0ZSxcclxuICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcclxuICAgICAgbGltaXQ6IHRoaXMubGltaXQsXHJcbiAgICAgIGZpbHRlcklzc3VlOiB0aGlzLnNlbGVjdGVkVGFiID8gdGhpcy5zZWxlY3RlZFRhYiA6IFwiXCIsXHJcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLnNlYXJjaFZhbHVlID8gdGhpcy5zZWFyY2hWYWx1ZSA6IFwiXCIsXHJcbiAgICAgIGV4cG9ydDogdHJ1ZSxcclxuICAgIH07XHJcbiAgICBpZiAodGhpcy5zb3J0ZWRDb2x1bW4pIHtcclxuICAgICAgb2JqLnNvcnRDb2x1bU5hbWUgPSB0aGlzLnNvcnRlZENvbHVtbjtcclxuICAgICAgb2JqLnNvcnRCeSA9IHRoaXMuc29ydERpcmVjdGlvbjtcclxuICAgIH1cclxuICAgICBpZiAodGhpcy5maWx0ZXJCeUNsdXN0ZXI/Lmxlbmd0aCkge1xyXG4gICAgICBvYmouZmlsdGVyQnlDbHVzdGVyID0gdGhpcy5maWx0ZXJCeUNsdXN0ZXIgPyB0aGlzLmZpbHRlckJ5Q2x1c3RlciA6IFtdO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gXCJpbnN0YWxsYXRpb25cIiB8fCB0aGlzLnR5cGUgPT09IFwiaW5mcmFcIikge1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJCeVN0b3Jlcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgb2JqLnN0b3JlSWRGaWx0ZXIgPSB0aGlzLmZpbHRlckJ5U3RvcmVzID8gdGhpcy5maWx0ZXJCeVN0b3JlcyA6IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlckJ5U3RhdHVzPy5sZW5ndGgpIHtcclxuICAgICAgICBvYmouc3RhdHVzRmlsdGVyID0gdGhpcy5maWx0ZXJCeVN0YXR1cyA/IHRoaXMuZmlsdGVyQnlTdGF0dXMgOiBbXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWx0ZXJCeWluc3RhbGxlZD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgb2JqLnVzZXJGaWx0ZXIgPSB0aGlzLmZpbHRlckJ5aW5zdGFsbGVkID8gdGhpcy5maWx0ZXJCeWluc3RhbGxlZCA6IFtdO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gXCJtYXRcIikge1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJCeVN0YXR1cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgb2JqLnN0YXR1c0ZpbHRlciA9IHRoaXMuZmlsdGVyQnlTdGF0dXMgPyB0aGlzLmZpbHRlckJ5U3RhdHVzIDogW107XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlckJ5U3RvcmVzPy5sZW5ndGgpIHtcclxuICAgICAgICBvYmouZmlsdGVyQnlTdG9yZXMgPSB0aGlzLmZpbHRlckJ5U3RvcmVzID8gdGhpcy5maWx0ZXJCeVN0b3JlcyA6IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlckJ5U3RhdHVzPy5sZW5ndGgpIHtcclxuICAgICAgICBvYmouZmlsdGVyQnlTdGF0dXMgPSB0aGlzLmZpbHRlckJ5U3RhdHVzID8gdGhpcy5maWx0ZXJCeVN0YXR1cyA6IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlckJ5UXVlcnlUeXBlPy5sZW5ndGgpIHtcclxuICAgICAgICBvYmouZmlsdGVyQnlRdWVyeVR5cGUgPSB0aGlzLmZpbHRlckJ5UXVlcnlUeXBlID8gdGhpcy5maWx0ZXJCeVF1ZXJ5VHlwZSA6IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlckJ5Q2x1c3Rlcj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgb2JqLmZpbHRlckJ5Q2x1c3RlciA9IHRoaXMuZmlsdGVyQnlDbHVzdGVyID8gdGhpcy5maWx0ZXJCeUNsdXN0ZXIgOiBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gXCJpbnN0YWxsYXRpb25cIikge1xyXG4gICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAuZXhwb3J0SW5zdGFsbGF0aW9uTGlzdChvYmopXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhjZWxzZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsICdJbnN0YWxsYXRpb24nKVxyXG5cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gXCJpbmZyYVwiKSB7XHJcbiAgICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAgIC5leHBvcnRJbmZyYUxpc3Qob2JqKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5leGNlbHNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgJ0luZnJhJylcclxuXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IFwibWF0XCIpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgLmV4cG9ydE1hdExpc3Qob2JqKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5leGNlbHNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgJ01hdCcpXHJcblxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnZGF0YU1pc21hdGNoJykge1xyXG4gICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAuZXhwb3J0RGF0YU1pc21hdGNoTGlzdChvYmopXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhjZWxzZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsICdEYXRhIE1pc21hdGNoJylcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZFRhYnModHlwZTogYW55KSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgIHRoaXMubGltaXQgPSAxMDtcclxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdkYXRhTWlzbWF0Y2gnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSB0eXBlLm5hbWUucmVwbGFjZSgvXFxzKy9nLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgICAgdGhpcy5saW1pdCA9IDEwO1xyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgIHRoaXMuZ2V0VGFibGUoKTtcclxuICAgICAgdGhpcy50cmFuc2Zvcm1OYW1lKHR5cGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHR5cGUubmFtZTtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgICAgdGhpcy5saW1pdCA9IDEwO1xyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgIHRoaXMuZ2V0VGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgdHJhbnNmb3JtTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIG5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICcnKTtcclxuXHJcbiAgfVxyXG4gIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OiBudW1iZXIpIHtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBOdW1iZXIocGFnZU9mZnNldCk7XHJcbiAgICB0aGlzLm9mZnNldCA9IE51bWJlcihwYWdlT2Zmc2V0KTtcclxuICAgIHRoaXMubGltaXQgPSAxMDtcclxuICAgIHRoaXMuZ2V0VGFibGUoKTtcclxuICB9XHJcblxyXG4gIG9uUGFnZVNpemVDaGFuZ2UocGFnZVNpemU6IG51bWJlcikge1xyXG4gICAgdGhpcy5wYWdlU2l6ZSA9IE51bWJlcihwYWdlU2l6ZSk7XHJcbiAgICB0aGlzLmxpbWl0ID0gTnVtYmVyKHBhZ2VTaXplKTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgdGhpcy5nZXRUYWJsZSgpO1xyXG4gIH1cclxuICBzZWxlY3RBbGxTdG9yZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdEFsbCA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xyXG4gICAgdGhpcy50YWJsZUxpc3RBcnJheS5mb3JFYWNoKChvYmo6IGFueSkgPT4gKG9iai5jaGVja2VkID0gdGhpcy5zZWxlY3RBbGwpKTtcclxuICAgIC8vIElmIGFsbCBjaGVja2JveGVzIGFyZSBjaGVja2VkLCBhc3NpZ24gYWxsIHRpY2tldElkcyB0byBhc3NpZ25TdG9yZXMsIG90aGVyd2lzZSBjbGVhciBhc3NpZ25TdG9yZXNcclxuICAgIHRoaXMuYXNzaWduU3RvcmVzID0gdGhpcy5zZWxlY3RBbGxcclxuICAgICAgPyB0aGlzLnRhYmxlTGlzdEFycmF5Lm1hcCgob2JqOiBhbnkpID0+IG9iai50aWNrZXRJZClcclxuICAgICAgOiBbXTtcclxuICAgIHRoaXMuYXNzaWduVGlja2V0ID0gdGhpcy5zZWxlY3RBbGw7IC8vIFVwZGF0ZSBhc3NpZ25UaWNrZXQgYmFzZWQgb24gc2VsZWN0QWxsIHN0YXRlXHJcbiAgfVxyXG4gIGdldEFsbEdyb3VwcygpIHtcclxuICAgIHRoaXMuQ2x1c3Rlckxpc3QgPSBbXTtcclxuICAgIGlmICh0aGlzLmhlYWRlckZpbHRlcnM/LmNsaWVudHNbMF0gJiYgdGhpcy5oZWFkZXJGaWx0ZXJzPy5jbGllbnRzWzBdICE9ICcnKSB7XHJcbiAgICAgIHRoaXMuc2VydmljZS5nZXRjbHVzdGVycyh7IGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnM/LmNsaWVudHNbMF0sIGdyb3VwOiBbXSwgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NsdXN0ZXJGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLkNsdXN0ZXJMaXN0ID0gcmVzPy5kYXRhPy5ncm91cERhdGFcclxuICAgICAgICAgICAgdGhpcy5DbHVzdGVyTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBlbGVtZW50LnRleHQgPSBlbGVtZW50Lmdyb3VwTmFtZTtcclxuICAgICAgICAgICAgICBlbGVtZW50LmlkID0gZWxlbWVudC5ncm91cE5hbWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5DbHVzdGVyTGlzdCA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUNoZWNrKGV2ZW50OiBhbnksIHRpY2tldElkOiBhbnkpIHtcclxuICAgIGNvbnN0IHRpY2tldCA9IHRoaXMudGFibGVMaXN0QXJyYXkuZmluZChcclxuICAgICAgKG9iajogYW55KSA9PiBvYmoudGlja2V0SWQgPT09IHRpY2tldElkXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0aWNrZXQpIHtcclxuICAgICAgdGlja2V0LmNoZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZDtcclxuICAgICAgLy8gSWYgdGhlIGNoZWNrYm94IGlzIGNoZWNrZWQsIGFkZCBvciByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgYXJyYXkgZnJvbSB0aGUgc2VsZWN0ZWQgYXJyYXlzXHJcbiAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMuYXNzaWduU3RvcmVzLnB1c2godGlja2V0SWQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hc3NpZ25TdG9yZXMuaW5kZXhPZih0aWNrZXRJZCk7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgdGhpcy5hc3NpZ25TdG9yZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gVXBkYXRlIHNlbGVjdEFsbCBiYXNlZCBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiBjaGVja2JveGVzXHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gdGhpcy50YWJsZUxpc3RBcnJheS5ldmVyeSgob2JqOiBhbnkpID0+IG9iai5jaGVja2VkKTtcclxuICAgICAgLy8gVXBkYXRlIGFzc2lnblRpY2tldCBiYXNlZCBvbiB3aGV0aGVyIGFueSBpbmRpdmlkdWFsIHRpY2tldCBjaGVja2JveCBpcyBjaGVja2VkXHJcbiAgICAgIHRoaXMuYXNzaWduVGlja2V0ID0gdGhpcy50YWJsZUxpc3RBcnJheS5zb21lKChvYmo6IGFueSkgPT4gb2JqLmNoZWNrZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQXNzaWduVGlja2V0KCkge1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEFkZENzbU1vZGFsQ29tcG9uZW50LCB7XHJcbiAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICBzaXplOiBcIm1kXCIsXHJcbiAgICAgIHNjcm9sbGFibGU6IHRydWUsXHJcbiAgICAgIGJhY2tkcm9wOiBcInN0YXRpY1wiXHJcbiAgICB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpY2tldElkID0gdGhpcy5hc3NpZ25TdG9yZXM7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQgPT09IFwic3VibWl0XCIpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gXCJcIjtcclxuICAgICAgICB0aGlzLmFzc2lnblN0b3JlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hc3NpZ25UaWNrZXQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdldFRhYmxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXJzKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudD8ubGVuZ3RoKSB7XHJcbiAgICAgIGV2ZW50LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIlN0b3JlIElEXCIpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyQnlTdG9yZXMgPSBlbGVtZW50Lklzc3Vlcy5tYXAoKHZhbDogYW55KSA9PiB2YWw/LmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gJ2luc3RhbGxhdGlvbicpIHtcclxuICAgICAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIlN0YXR1c1wiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQnlTdGF0dXMgPSBlbGVtZW50Lklzc3Vlcy5tYXAoKHZhbDogYW55KSA9PiB2YWw/LmlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGlmICh0aGlzLnR5cGUgPT09ICdpbnN0YWxsYXRpb24nKSB7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5EZXNjcmlwdGlvbiA9PT0gXCJEZXBsb3llZCBTdGF0dXNcIikge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckJ5U3RhdHVzID0gZWxlbWVudC5Jc3N1ZXMubWFwKCh2YWw6IGFueSkgPT4gdmFsPy5pZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnVzZXJzLnVzZXJUeXBlID09PSBcInRhbmdvXCIgJiYgKHRoaXMudHlwZSA9PT0gJ2luc3RhbGxhdGlvbicgfHwgdGhpcy50eXBlID09PSAnaW5mcmEnKSkge1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuRGVzY3JpcHRpb24gPT09IHRoaXMudHlwZU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJCeWluc3RhbGxlZCA9IGVsZW1lbnQuSXNzdWVzLm1hcCgodmFsOiBhbnkpID0+IHZhbD8uaWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlckJ5aW5zdGFsbGVkID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIlF1ZXJ5IFR5cGVcIikge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJCeVF1ZXJ5VHlwZSA9IGVsZW1lbnQuSXNzdWVzLm1hcCgodmFsOiBhbnkpID0+IHZhbD8uaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZWxlbWVudC5EZXNjcmlwdGlvbiA9PT0gXCJDbHVzdGVyc1wiKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlckJ5Q2x1c3RlciA9IGVsZW1lbnQuSXNzdWVzLm1hcCgodmFsOiBhbnkpID0+IHZhbD8uaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLmxpbWl0ID0gMTA7XHJcbiAgICB0aGlzLmdldFRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRUYWJsZSgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgbGV0IG9iajogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycz8uY2xpZW50cyxcclxuICAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRmlsdGVycz8uZGF0ZT8uc3RhcnREYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuaGVhZGVyRmlsdGVycz8uZGF0ZT8uZW5kRGF0ZSxcclxuICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcclxuICAgICAgbGltaXQ6IHRoaXMubGltaXQsXHJcbiAgICAgIGZpbHRlcklzc3VlOiB0aGlzLnNlbGVjdGVkVGFiID8gdGhpcy5zZWxlY3RlZFRhYiA6IFwiXCIsXHJcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLnNlYXJjaFZhbHVlID8gdGhpcy5zZWFyY2hWYWx1ZSA6IFwiXCIsXHJcbiAgICAgIGV4cG9ydDogZmFsc2UsXHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMuc29ydGVkQ29sdW1uKSB7XHJcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdkYXRhTWlzbWF0Y2gnKSB7XHJcbiAgICAgICAgb2JqLnNvcnRDb2x1bW5OYW1lID0gdGhpcy5zb3J0ZWRDb2x1bW47XHJcbiAgICAgICAgb2JqLnNvcnRCeSA9IHRoaXMuc29ydERpcmVjdGlvbjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvYmouc29ydENvbHVtTmFtZSA9IHRoaXMuc29ydGVkQ29sdW1uO1xyXG4gICAgICAgIG9iai5zb3J0QnkgPSB0aGlzLnNvcnREaXJlY3Rpb247XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnR5cGUgPT09IFwiaW5zdGFsbGF0aW9uXCIgfHwgdGhpcy50eXBlID09PSBcImluZnJhXCIpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyQnlTdG9yZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIG9iai5zdG9yZUlkRmlsdGVyID0gdGhpcy5maWx0ZXJCeVN0b3JlcyA/IHRoaXMuZmlsdGVyQnlTdG9yZXMgOiBbXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWx0ZXJCeVN0YXR1cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgb2JqLnN0YXR1c0ZpbHRlciA9IHRoaXMuZmlsdGVyQnlTdGF0dXMgPyB0aGlzLmZpbHRlckJ5U3RhdHVzIDogW107XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZmlsdGVyQnlpbnN0YWxsZWQ/Lmxlbmd0aCkge1xyXG4gICAgICAgIG9iai51c2VyRmlsdGVyID0gdGhpcy5maWx0ZXJCeWluc3RhbGxlZCA/IHRoaXMuZmlsdGVyQnlpbnN0YWxsZWQgOiBbXTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IFwibWF0XCIpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyQnlTdGF0dXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIG9iai5zdGF0dXNGaWx0ZXIgPSB0aGlzLmZpbHRlckJ5U3RhdHVzID8gdGhpcy5maWx0ZXJCeVN0YXR1cyA6IFtdO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJCeVN0b3Jlcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgb2JqLmZpbHRlckJ5U3RvcmVzID0gdGhpcy5maWx0ZXJCeVN0b3JlcyA/IHRoaXMuZmlsdGVyQnlTdG9yZXMgOiBbXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWx0ZXJCeVN0YXR1cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgb2JqLmZpbHRlckJ5U3RhdHVzID0gdGhpcy5maWx0ZXJCeVN0YXR1cyA/IHRoaXMuZmlsdGVyQnlTdGF0dXMgOiBbXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWx0ZXJCeVF1ZXJ5VHlwZT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgb2JqLmZpbHRlckJ5UXVlcnlUeXBlID0gdGhpcy5maWx0ZXJCeVF1ZXJ5VHlwZSA/IHRoaXMuZmlsdGVyQnlRdWVyeVR5cGUgOiBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmlsdGVyQnlDbHVzdGVyPy5sZW5ndGgpIHtcclxuICAgICAgb2JqLmZpbHRlckJ5Q2x1c3RlciA9IHRoaXMuZmlsdGVyQnlDbHVzdGVyID8gdGhpcy5maWx0ZXJCeUNsdXN0ZXIgOiBbXTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnR5cGUgPT09IFwiaW5zdGFsbGF0aW9uXCIpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgLmdldEluc3RhbGxhdGlvbkxpc3Qob2JqKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmxpc3RBcnJheSA9IHJlcy5kYXRhLnJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5yZXN1bHQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZUxpc3RBcnJheSA9IHJlcy5kYXRhLnJlc3VsdDtcclxuICAgICAgICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IHJlcy5kYXRhPy5jb3VudDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRvdGFsSXRlbXMgPCAxMCkgeyB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFt0aGlzLnRvdGFsSXRlbXNdIH0gZWxzZSB7IHRoaXMucGFnaW5hdGlvblNpemVzID0gWzEwLCAyMCwgMzBdIH1cclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2lnblRpY2tldCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBcImluZnJhXCIpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgLmdldEluZnJhTGlzdChvYmopXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMubGlzdEFycmF5ID0gcmVzLmRhdGEucmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnJlc3VsdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlTGlzdEFycmF5ID0gcmVzLmRhdGEucmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gcmVzLmRhdGE/LmNvdW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudG90YWxJdGVtcyA8IDEwKSB7IHRoaXMucGFnaW5hdGlvblNpemVzID0gW3RoaXMudG90YWxJdGVtc10gfSBlbHNlIHsgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF0gfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXNzaWduVGlja2V0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBcIm1hdFwiKSB7XHJcbiAgICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAgIC5nZXRNYXRMaXN0KG9iailcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5saXN0QXJyYXkgPSByZXM/LmRhdGE/LnJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgIHRoaXMudGFibGVMaXN0QXJyYXkgPSByZXM/LmRhdGE/LnJlc3VsdDtcclxuICAgICAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSByZXMuZGF0YT8uY291bnQ7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMudG90YWxJdGVtcyA8IDEwKSB7IHRoaXMucGFnaW5hdGlvblNpemVzID0gW3RoaXMudG90YWxJdGVtc10gfSBlbHNlIHsgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF0gfSB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnZGF0YU1pc21hdGNoJykge1xyXG4gICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAuZ2V0RGF0YU1pc21hdGhMaXN0KG9iailcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5saXN0QXJyYXkgPSByZXM/LmRhdGE/LnJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5yZXN1bHQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZUxpc3RBcnJheSA9IHJlcz8uZGF0YT8ucmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gcmVzLmRhdGE/LmNvdW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudG90YWxJdGVtcyA8IDEwKSB7IHRoaXMucGFnaW5hdGlvblNpemVzID0gW3RoaXMudG90YWxJdGVtc10gfSBlbHNlIHsgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF0gfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXNzaWduVGlja2V0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcm91dGVUb1N0b3JlKHN0b3JlSWQ6IGFueSwgY2xpZW50SWQ6IGFueSkge1xyXG4gICAgbGV0IGRhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSB8fCBcIlwiKTtcclxuICAgIGRhdGEuc3RvcmUgPSBzdG9yZUlkO1xyXG4gICAgZGF0YS5jbGllbnQgPSBjbGllbnRJZDtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIiwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KGRhdGEpO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3N0b3Jlcy9pbmZyYS10aWNrZXQnXSwge1xyXG4gICAgICBxdWVyeVBhcmFtczogeyBzdG9yZUlkOiBzdG9yZUlkIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICByb3V0ZVRvTWF0KHN0b3JlSWQ6IGFueSwgY2xpZW50SWQ6IGFueSwgY2xpZW50TmFtZTogYW55KSB7XHJcbiAgICBsZXQgZGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIHx8IFwiXCIpO1xyXG4gICAgZGF0YS5zdG9yZSA9IHN0b3JlSWQ7XHJcbiAgICBkYXRhLmNsaWVudCA9IGNsaWVudElkO1xyXG4gICAgZGF0YS5jbGllbnROYW1lID0gY2xpZW50TmFtZSA/IGNsaWVudE5hbWUgOiAnU3RvcmVzJztcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIiwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KGRhdGEpO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3N0b3Jlcy9tYXQnXSwge1xyXG4gICAgICBxdWVyeVBhcmFtczogeyBzdG9yZUlkOiBzdG9yZUlkIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBjb21tZW50TW9kYWwob2JqOiBhbnkpIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihDb21tZW50TW9kZWxDb21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIHNpemU6IFwibWRcIixcclxuICAgICAgc2Nyb2xsYWJsZTogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCJcclxuICAgIH0pO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGlja2V0SWQgPSBvYmoudGlja2V0SWQ7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdGlja2V0cyh0eXBlOiBhbnksIGNsaWVudElkOiBhbnksIHN0b3JlSWQ6IGFueSwgY2xpZW50TmFtZTogYW55KSB7XHJcbiAgICBpZiAodHlwZSA9PT0gJ21hdCcpIHtcclxuICAgICAgbGV0IGRhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSB8fCBcIlwiKTtcclxuICAgICAgZGF0YS5zdG9yZSA9IHN0b3JlSWQ7XHJcbiAgICAgIGRhdGEuY2xpZW50ID0gY2xpZW50SWQ7XHJcbiAgICAgIGRhdGEuY2xpZW50TmFtZSA9IGNsaWVudE5hbWUgPyBjbGllbnROYW1lIDogJ1N0b3Jlcyc7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIiwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQoZGF0YSk7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS9zdG9yZXMvbWF0J10sIHtcclxuICAgICAgICBxdWVyeVBhcmFtczogeyBzdG9yZUlkOiBzdG9yZUlkIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgZGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIHx8IFwiXCIpO1xyXG4gICAgICBkYXRhLnN0b3JlID0gc3RvcmVJZDtcclxuICAgICAgZGF0YS5jbGllbnQgPSBjbGllbnRJZDtcclxuICAgICAgZGF0YS5jbGllbnROYW1lID0gY2xpZW50TmFtZSA/IGNsaWVudE5hbWUgOiAnU3RvcmVzJztcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dChkYXRhKTtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3N0b3Jlcy9pbmZyYS10aWNrZXQnXSwge1xyXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7IHN0b3JlSWQ6IHN0b3JlSWQsIHR5cGU6IHR5cGUgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsaWVudFRpY2tldHMoY2xpZW50SWQ6IGFueSwgc3RvcmVJZDogYW55LCBjbGllbnROYW1lOiBhbnkpIHtcclxuICAgIGxldCBkYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgfHwgXCJcIik7XHJcbiAgICBkYXRhLnN0b3JlID0gc3RvcmVJZDtcclxuICAgIGRhdGEuY2xpZW50ID0gY2xpZW50SWQ7XHJcbiAgICBkYXRhLmNsaWVudE5hbWUgPSBjbGllbnROYW1lID8gY2xpZW50TmFtZSA6ICdTdG9yZXMnO1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQoZGF0YSk7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2Uvc3RvcmVzJ10pO1xyXG4gIH1cclxuICBzdG9yZVRpY2tldHMoY2xpZW50SWQ6IGFueSwgc3RvcmVJZDogYW55LCBjbGllbnROYW1lOiBhbnkpIHtcclxuICAgIGxldCBkYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgfHwgXCJcIik7XHJcbiAgICBkYXRhLnN0b3JlID0gc3RvcmVJZDtcclxuICAgIGRhdGEuY2xpZW50ID0gY2xpZW50SWQ7XHJcbiAgICBkYXRhLmNsaWVudE5hbWUgPSBjbGllbnROYW1lID8gY2xpZW50TmFtZSA6ICdTdG9yZXMnO1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQoZGF0YSk7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2Uvc3RvcmVzL2NhbWVyYXMnXSwge1xyXG4gICAgICBxdWVyeVBhcmFtczogeyBzdG9yZUlkOiBzdG9yZUlkIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICB1c2VyVGlja2V0cyhjbGllbnRJZDogYW55LCBzdG9yZUlkOiBhbnkpIHtcclxuICAgIGxldCBkYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgfHwgXCJcIik7XHJcbiAgICBkYXRhLnN0b3JlID0gc3RvcmVJZDtcclxuICAgIGRhdGEuY2xpZW50ID0gY2xpZW50SWQ7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dChkYXRhKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS91c2VycyddKTtcclxuICB9XHJcblxyXG4gIHNldHBhZ2VTaXplKCkge1xyXG4gICAgaWYgKHRoaXMudG90YWxJdGVtcyA8IDEwKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRvdGFsSXRlbXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYWdlU2l6ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtM1wiPlxyXG4gICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0eXBlICE9PSdkYXRhTWlzbWF0Y2gnICYmIHR5cGUgIT09ICdtYXQnXCIgY2xhc3M9XCJjYXJkLWxhYmVsIG1iLTJcIj57e3R5cGUgfCB0aXRsZWNhc2V9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0eXBlID09PSdkYXRhTWlzbWF0Y2gnXCIgY2xhc3M9XCJjYXJkLWxhYmVsIG1iLTJcIj5EYXRhIE1pc21hdGNoPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInR5cGUgPT09J21hdCdcIiBjbGFzcz1cImNhcmQtbGFiZWwgbWItMlwiPkVtcGxveWVlIE1hdDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YiBtYi0yXCI+TGFzdCB1cGRhdGVkIDEgaG91ciBhZ288L3NwYW4+IC0tPlxyXG4gICAgICAgIDwvaDM+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWFzc2lnblRpY2tldFwiIGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG1zLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjE3LjAzNjVcIiB5PVwiMTUuMTIyM1wiIHdpZHRoPVwiOC4xNTU0NlwiIGhlaWdodD1cIjJcIiByeD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSg0NSAxNy4wMzY1IDE1LjEyMjMpXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMSAxOUM2LjU1NTU2IDE5IDMgMTUuNDQ0NCAzIDExQzMgNi41NTU1NiA2LjU1NTU2IDMgMTEgM0MxNS40NDQ0IDMgMTkgNi41NTU1NiAxOSAxMUMxOSAxNS40NDQ0IDE1LjQ0NDQgMTkgMTEgMTlaTTExIDVDNy41MzMzMyA1IDUgNy41MzMzMyA1IDExQzUgMTQuNDY2NyA3LjUzMzMzIDE3IDExIDE3QzE0LjQ2NjcgMTcgMTcgMTQuNDY2NyAxNyAxMUMxNyA3LjUzMzMzIDE0LjQ2NjcgNSAxMSA1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBzLTE0IG1lLTJcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VhcmNoRGF0YSgpXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpYi1maWx0ZXJzICpuZ0lmPVwidXNlcnMudXNlclR5cGUgPT09ICd0YW5nbycgJiYgdXNlckxpc3Q/Lmxlbmd0aCB8fCB1c2Vycy51c2VyVHlwZSA9PT0gJ2NsaWVudCcgJiYgc3RvcmVMaXN0Py5sZW5ndGhcIiBbZGF0YU9iamVjdF09XCJkYXRhT2JqZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGxpZWRGaWx0ZXJzKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCI+PC9saWItZmlsdGVycz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCIhbm9EYXRhJiYhbG9hZGluZ1wiIChjbGljayk9XCJleHBvcnRYTFNYKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBteC0yIGJ0bi1vdXRsaW5lIGJ0bi1vdXRsaW5lLWRlZmF1bHQgcm91bmRlZC0zIHRleHQtbm93cmFwIGJvcmRlci12YWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMlwiPkV4cG9ydDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFzc2lnblRpY2tldFwiIGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWRkQXNzaWduVGlja2V0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIG14LTIgYnRuLXByaW1hcnkgIHJvdW5kZWQtMyB0ZXh0LW5vd3JhcCBib3JkZXItdmFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS45OTk4NCA0LjE2NjVWMTUuODMzMk00LjE2NjUgOS45OTk4NEgxNS44MzMyXCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0yIHRleHQtd2hpdGVcIj5Bc3NpZ24gVGlja2V0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuXHJcblxyXG4gICAgICAgIDx1bCAqbmdJZj1cIiFsb2FkaW5nICYmIGxpc3RBcnJheT8ubGVuZ3RoICYmIHR5cGUgIT09ICdtYXQnICYmIHR5cGUgIT09ICdkYXRhTWlzbWF0Y2gnXCIgY2xhc3M9XCJuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFiczEgbmF2LWxpbmUtdGFicyBib3JkZXItdHJhbnNwYXJlbnQgZmxleC1ub3dyYXAgaG9yaXpvbnRhbC1zY3JvbGxcIj5cclxuICAgICAgICAgICAgPGxpICBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nRm9yPVwibGV0IG9iaiBvZiBsaXN0QXJyYXkuc2xpY2UoKS5yZXZlcnNlKClcIiAoY2xpY2spPVwic2VsZWN0ZWRUYWJzKG9iailcIj5cclxuICAgICAgICAgICAgICAgIDxhICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IHNlbGVjdGVkVGFiID09PSBvYmoubmFtZX1cIiBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyIG5vLWJvcmRlciBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tvYmoubmFtZSB8IHRpdGxlY2FzZX19IDxzcGFuIGNsYXNzPVwibXgtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSBvYmoubmFtZSA/ICd0ZXh0LWJvcmRlci1wcmlhbXJ5JyA6ICd0ZXh0LWJvcmRlcidcIj57e29iai5jb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgICAgPHVsICpuZ0lmPVwiIWxvYWRpbmcgJiYgbGlzdEFycmF5Py5sZW5ndGggJiYgdHlwZSA9PT0gJ2RhdGFNaXNtYXRjaCdcIiBjbGFzcz1cIm5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzMSBuYXYtbGluZS10YWJzIGJvcmRlci10cmFuc3BhcmVudCBmbGV4LW5vd3JhcCBob3Jpem9udGFsLXNjcm9sbFwiPlxyXG4gICAgICAgICAgICA8bGkgIGNsYXNzPVwibmF2LWl0ZW1cIiAqbmdGb3I9XCJsZXQgb2JqIG9mIGxpc3RBcnJheS5zbGljZSgpLnJldmVyc2UoKVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMob2JqKVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSB0cmFuc2Zvcm1OYW1lKG9iai5uYW1lKSA/ICdhY3RpdmUnIDogJydcIiBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyIG5vLWJvcmRlciBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tvYmoubmFtZSB8IHRpdGxlY2FzZX19IDxzcGFuIGNsYXNzPVwibXgtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSB0cmFuc2Zvcm1OYW1lKG9iai5uYW1lKSA/ICd0ZXh0LWJvcmRlci1wcmlhbXJ5JyA6ICd0ZXh0LWJvcmRlcidcIj57e29iai5jb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJub0RhdGFcIiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGEuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nICYmICFub0RhdGFcIiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmUgbXQtNVwiPlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwIFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJ0aGlzLnVzZXJzLnVzZXJUeXBlID09PSd0YW5nbydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlciBtZS00XCIgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJzZWxlY3RBbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RBbGxTdG9yZSgkZXZlbnQpXCI+ICA8c3BhbiAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3RpY2tldElkJylcIj4gVGlja2V0IElEIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAndGlja2V0SWQnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICd0aWNrZXRJZCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPiAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwidHlwZSAhPT0nZGF0YU1pc21hdGNoJ1wiIChjbGljayk9XCJvblNvcnQoJ2lzc3VlRGF0ZScpXCI+IENyZWF0ZWQgRGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdpc3N1ZURhdGUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ2lzc3VlRGF0ZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwidHlwZSA9PT0naW5mcmEnXCIgKGNsaWNrKT1cIm9uU29ydCgnY3JlYXRlZEF0JylcIj4gQ3JlYXRlZCBUaW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdjcmVhdGVkQXQnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdjcmVhdGVkQXQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cInR5cGUgPT09J2luZnJhJ1wiIChjbGljayk9XCJvblNvcnQoJ2lzc3VlQ2xvc2VkRGF0ZScpXCI+IENsb3NlZCBEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnaXNzdWVDbG9zZWREYXRlJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ2lzc3VlQ2xvc2VkRGF0ZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCJ0eXBlID09PSdpbmZyYSdcIiAoY2xpY2spPVwib25Tb3J0KCdpc3N1ZUNsb3NlZERhdGUnKVwiPiBDbG9zZWQgVGltZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ2lzc3VlQ2xvc2VkRGF0ZScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdpc3N1ZUNsb3NlZERhdGUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwidHlwZSA9PT0nZGF0YU1pc21hdGNoJ1wiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdjcmVhdGVkQXQnKVwiPiBDcmVhdGVkIERhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdjcmVhdGVkQXQnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnY3JlYXRlZEF0JyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCdcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgPjxzcGFuIChjbGljayk9XCJvblNvcnQoJ2lzc3VlRGF0ZScpXCI+SXNzdWUgRGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnaXNzdWVEYXRlJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnaXNzdWVEYXRlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJ1wiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdjbGllbnROYW1lJylcIj5CcmFuZCBOYW1lPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ2NsaWVudE5hbWUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ2NsaWVudE5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJ1wiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdjbGllbnRJZCcpXCI+QnJhbmQgSUQ8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnY2xpZW50SWQnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ2NsaWVudElkJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdzdG9yZU5hbWUnKVwiPlN0b3JlIE5hbWU8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnc3RvcmVOYW1lJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZU5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdzdG9yZUlkJylcIj5TdG9yZSBJRDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZUlkJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZUlkJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cInRoaXMudXNlcnMudXNlclR5cGUgPT09J3RhbmdvJyAmJiAodHlwZSA9PT0naW5mcmEnfHx0eXBlID09PSdkYXRhTWlzbWF0Y2gnfHx0eXBlID09PSdtYXQnKVwiIChjbGljayk9XCJvblNvcnQoJ3VzZXJOYW1lJylcIj5SZXNvbHZlZCBCeTxzdmcgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAndXNlck5hbWUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3VzZXJOYW1lJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCJ0aGlzLnVzZXJzLnVzZXJUeXBlID09PSd0YW5nbycgJiYgdHlwZSA9PT0naW5zdGFsbGF0aW9uJ1wiIChjbGljayk9XCJvblNvcnQoJ3VzZXJOYW1lJylcIj5JbnN0YWxsZWQgQnk8c3ZnIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3VzZXJOYW1lJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICd1c2VyTmFtZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCdcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnaXNzdWVUeXBlJylcIj5Jc3N1ZSBUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ2lzc3VlVHlwZScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnaXNzdWVUeXBlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCdcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgndHlwZScpXCI+UXVlcnkgVHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICd0eXBlJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICd0eXBlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCdcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgncmVwb3J0ZWRGb290ZmFsbCcpXCI+UmVwb3J0ZWQgRm9vdGZhbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAncmVwb3J0ZWRGb290ZmFsbCcgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAncmVwb3J0ZWRGb290ZmFsbCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJ0eXBlID09PSdkYXRhTWlzbWF0Y2gnXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ21hcHBlZENvdW50JylcIj5VbmlxdWUgSW1hZ2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ21hcHBlZENvdW50JyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdtYXBwZWRDb3VudCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJ0eXBlID09PSdkYXRhTWlzbWF0Y2gnXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3N1Y2Nlc3NQZXJjZW50YWdlJylcIj5TdWNjZXNzIFBlcmNlbnRhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnc3VjY2Vzc1BlcmNlbnRhZ2UnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N1Y2Nlc3NQZXJjZW50YWdlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICAqbmdJZj1cInR5cGUgPT09J2luc3RhbGxhdGlvbidcIiAoY2xpY2spPVwib25Tb3J0KCdzdGF0dXMnKVwiPkRlcGxveWVkIFN0YXR1czxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N0YXR1cycgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdzdGF0dXMnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCcgfHx0eXBlID09PSdtYXQnfHwgdHlwZSA9PT0naW5mcmEnXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3N0YXR1cycpXCI+U3RhdHVzPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnc3RhdHVzJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N0YXR1cycgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG48IS0tIGFkZGVkIGNvbmZpZyBhbmQgdG90YWwgZG93bnRpbWUgYXMgcGVyIHRoZSBwcmlvZHVjdCB0ZWFtIHJlcXVpcmVtZW50IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwidHlwZT09PSdpbmZyYSdcIj5Db25maWd1cmVkIFRpY2tldCBUaW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+IFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJ0eXBlPT09J2luZnJhJ1wiID5Ub3RhbCBEb3dudGltZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG48IS0tICAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAgKm5nSWY9XCJ0eXBlICE9PSAnbWF0JyAmJiB0eXBlICE9PSAnZGF0YU1pc21hdGNoJ1wiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdwcmltYXJ5SXNzdWUnKVwiPlByaW1hcnkgSXNzdWVzPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3ByaW1hcnlJc3N1ZScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAncHJpbWFyeUlzc3VlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAgKm5nSWY9XCJ0eXBlICE9PSAnbWF0JyAmJiB0eXBlICE9PSAnZGF0YU1pc21hdGNoJ1wiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdzZWNvbmRhcnlJc3N1ZScpXCI+U2Vjb25kYXJ5IElzc3VlczxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdzZWNvbmRhcnlJc3N1ZScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnc2Vjb25kYXJ5SXNzdWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJ0eXBlIT09J2luc3RhbGxhdGlvbidcIj5BY3Rpb25zPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IG9iaiBvZiB0YWJsZUxpc3RBcnJheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJ0aGlzLnVzZXJzLnVzZXJUeXBlID09PSd0YW5nbydcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXIgbWUtNCBtdC0zXCIgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJvYmouY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVDaGVjaygkZXZlbnQsb2JqPy50aWNrZXRJZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidHlwZSA9PT0gJ2RhdGFNaXNtYXRjaCcgfHwgdHlwZSA9PT0gJ21hdCcgfHwgdHlwZSA9PT0gJ2luZnJhJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0eHQtbGlnaHQtcHJpbWFyeSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJ0aWNrZXRzKHR5cGUsb2JqLmNsaWVudElkLG9iai5zdG9yZUlkLG9iai5jbGllbnROYW1lKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b2JqLnRpY2tldElkfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidHlwZSA9PT0gJ2luc3RhbGxhdGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29iai50aWNrZXRJZH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInR5cGUgPT09ICdkYXRhTWlzbWF0Y2gnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29iaj8uY3JlYXRlZEF0IHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU6ICdkZCBNTU0sIHl5eXknfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ0eXBlID09PSAnZGF0YU1pc21hdGNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvYmo/Lmlzc3VlRGF0ZSB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiAnZGQgTU1NLCB5eXl5J319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwidHlwZSAhPT0gJ2RhdGFNaXNtYXRjaCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b2JqPy5jcmVhdGVkQXQgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTogJ2RkIE1NTSwgeXl5eSd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ0eXBlID09PSAnaW5mcmEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29iaj8uY3JlYXRlZEF0IHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiAnaGg6bW0gYScgfCB1cHBlcmNhc2V9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ0eXBlID09PSAnaW5mcmEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29iaj8uaXNzdWVDbG9zZWREYXRlPyhvYmo/Lmlzc3VlQ2xvc2VkRGF0ZSB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTogJ2RkIE1NTSwgeXl5eScpOlwiLS1cIn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInR5cGUgPT09ICdpbmZyYSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b2JqPy5pc3N1ZUNsb3NlZERhdGU/KG9iaj8uaXNzdWVDbG9zZWREYXRlIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiAnaGg6bW0gYScgfCB1cHBlcmNhc2UpOlwiLS1cIn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInRoaXMudXNlcnMudXNlclR5cGUgPT09J3RhbmdvJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImNsaWVudFRpY2tldHMob2JqLmNsaWVudElkLG9iai5zdG9yZUlkLG9iai5jbGllbnROYW1lKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHh0LWxpZ2h0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvYmouY2xpZW50TmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInRoaXMudXNlcnMudXNlclR5cGUgPT09J3RhbmdvJ1wiPnt7b2JqLmNsaWVudElkfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInN0b3JlVGlja2V0cyhvYmouY2xpZW50SWQsb2JqLnN0b3JlSWQsb2JqLmNsaWVudE5hbWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0eHQtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29iai5zdG9yZU5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvYmouc3RvcmVJZH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInRoaXMudXNlcnMudXNlclR5cGUgPT09J3RhbmdvJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlIGN1cnNvci1wb2ludGVyXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvYmoudXNlck5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ0eXBlID09PSdkYXRhTWlzbWF0Y2gnICYmIG9iai5pc3N1ZVR5cGUgPT09J2xvd2NvdW50J1wiID5Mb3cgQ291bnQ8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ0eXBlID09PSdkYXRhTWlzbWF0Y2gnICYmIG9iai5pc3N1ZVR5cGUgPT09J2hpZ2hjb3VudCdcIj5IaWdoIENvdW50PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jYXBpdGFsaXplXCIgKm5nSWY9XCJ0eXBlID09PSdkYXRhTWlzbWF0Y2gnXCI+e3tvYmo/LnR5cGUgPyBvYmo/LnR5cGU6Jy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jYXBpdGFsaXplXCIgKm5nSWY9XCJ0eXBlID09PSdkYXRhTWlzbWF0Y2gnXCI+e3tvYmo/LnJlcG9ydGVkRm9vdGZhbGwgPyBvYmo/LnJlcG9ydGVkRm9vdGZhbGw6Jy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jYXBpdGFsaXplXCIgKm5nSWY9XCJ0eXBlID09PSdkYXRhTWlzbWF0Y2gnXCI+e3tvYmo/Lm1hcHBlZENvdW50ID8gb2JqPy5tYXBwZWRDb3VudDonLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemVcIiAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCdcIj57e29iaj8uc3VjY2Vzc1BlcmNlbnRhZ2UgPyBvYmo/LnN1Y2Nlc3NQZXJjZW50YWdlOictLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInR5cGU9PT0naW5zdGFsbGF0aW9uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmouaW5zdGFsbGF0aW9uU3RhdHVzID09PSdwYWlyZWQnIHx8IG9iai5pbnN0YWxsYXRpb25TdGF0dXMgPT09J29uYm9hcmRlZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeSBteC00XCI+e3tvYmouaW5zdGFsbGF0aW9uU3RhdHVzIHwgdGl0bGVjYXNlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9iai5pbnN0YWxsYXRpb25TdGF0dXMgPT09J2xpdmUnXCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1zdWNjZXNzIG14LTRcIj5MaXZlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmouaW5zdGFsbGF0aW9uU3RhdHVzID09PSdpbnN0YWxsYXRpb25mYWlsZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXdhcm5pbmcgbXgtNFwiPkluc3RhbGxhdGlvbmZhaWxlZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqLmluc3RhbGxhdGlvblN0YXR1cyA9PT0nZGVwbG95ZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXN1Y2Nlc3MgbXgtNCB0ZXh0LWNhcGl0YWxpemVcIj5kZXBsb3llZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwidHlwZT09PSdpbmZyYScgfHwgdHlwZT09PSdtYXQnIHx8IHR5cGU9PT0nZGF0YU1pc21hdGNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmouc3RhdHVzID09PSdvcGVuJ1wiIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtZGFuZ2VyXCI+T3Blbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqLnN0YXR1cyA9PT0nY2xvc2VkJ1wiIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2Vzc1wiPkNsb3NlZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqLnN0YXR1cyA9PT0naW5wcm9ncmVzcydcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnlcIj5JblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dyZXNzPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgICpuZ0lmPVwidHlwZT09PSdpbmZyYSdcIj5cclxue3tvYmouY29uZmlndXJlZERvd25UaW1lP29iai5jb25maWd1cmVkRG93blRpbWUqNjA6MCB8fCAwIH19IHt7b2JqLmNvbmZpZ3VyZWREb3duVGltZSA+IDE/ICdtaW5zJyA6ICdtaW4nfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgICpuZ0lmPVwidHlwZT09PSdpbmZyYSdcIj4gXHJcbnt7b2JqLnRvdGFsRG93blRpbWUgfHwgMCB9fSB7e29iai50b3RhbERvd25UaW1lID4gMT8gJ21pbnMnIDogJ21pbid9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwidHlwZT09PSdpbnN0YWxsYXRpb24nIHx8IHR5cGU9PT0naW5mcmEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqLnByaW1hcnlJc3N1ZSAhPT0nLSdcIj57e29iai5wcmltYXJ5SXNzdWUgPyBvYmoucHJpbWFyeUlzc3VlIDonSXNzdWUgbm90IGlkZW50aWZpZWQnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmoucHJpbWFyeUlzc3VlID09PSctJ1wiPklzc3VlIG5vdCBpZGVudGlmaWVkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInR5cGU9PT0naW5zdGFsbGF0aW9uJyB8fCB0eXBlPT09J2luZnJhJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmouc2Vjb25kYXJ5SXNzdWVcIj57e29iai5zZWNvbmRhcnlJc3N1ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ0eXBlPT09J2luZnJhJyB8fCB0eXBlID09PSdkYXRhTWlzbWF0Y2gnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTIgY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cInRoaXMudXNlcnMudXNlclR5cGUgPT09J3RhbmdvJ1wiIChjbGljayk9XCJjb21tZW50TW9kYWwob2JqKVwiPjxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjEgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNy42NDMxIDEyLjVDMTcuNjQzMSAxMi45NDIgMTcuNDY3NSAxMy4zNjYgMTcuMTU0OSAxMy42Nzg1QzE2Ljg0MjMgMTMuOTkxMSAxNi40MTg0IDE0LjE2NjcgMTUuOTc2NCAxNC4xNjY3SDUuOTc2NEwyLjY0MzA3IDE3LjVWNC4xNjY2N0MyLjY0MzA3IDMuNzI0NjQgMi44MTg2NiAzLjMwMDcyIDMuMTMxMjIgMi45ODgxNkMzLjQ0Mzc4IDIuNjc1NTkgMy44Njc3MSAyLjUgNC4zMDk3MyAyLjVIMTUuOTc2NEMxNi40MTg0IDIuNSAxNi44NDIzIDIuNjc1NTkgMTcuMTU0OSAyLjk4ODE2QzE3LjQ2NzUgMy4zMDA3MiAxNy42NDMxIDMuNzI0NjQgMTcuNjQzMSA0LjE2NjY3VjEyLjVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0yIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInRpY2tldHModHlwZSxvYmouY2xpZW50SWQsb2JqLnN0b3JlSWQsb2JqLmNsaWVudE5hbWUpXCI+PHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMSAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTA2NDBfMTgwNjEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMC45NzY1NjIgMTBDMC45NzY1NjIgMTAgNC4zMDk5IDMuMzMzMzcgMTAuMTQzMiAzLjMzMzM3QzE1Ljk3NjYgMy4zMzMzNyAxOS4zMDk5IDEwIDE5LjMwOTkgMTBDMTkuMzA5OSAxMCAxNS45NzY2IDE2LjY2NjcgMTAuMTQzMiAxNi42NjY3QzQuMzA5OSAxNi42NjY3IDAuOTc2NTYyIDEwIDAuOTc2NTYyIDEwWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwLjE0MzIgMTIuNUMxMS41MjM5IDEyLjUgMTIuNjQzMiAxMS4zODA4IDEyLjY0MzIgMTBDMTIuNjQzMiA4LjYxOTMzIDExLjUyMzkgNy41MDAwNCAxMC4xNDMyIDcuNTAwMDRDOC43NjI1MiA3LjUwMDA0IDcuNjQzMjMgOC42MTkzMyA3LjY0MzIzIDEwQzcuNjQzMjMgMTEuMzgwOCA4Ljc2MjUyIDEyLjUgMTAuMTQzMiAxMi41WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTA2NDBfMTgwNjFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC4xNDMwNjYpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInR5cGUgPT09ICdtYXQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwicm91dGVUb01hdChvYmouc3RvcmVJZCxvYmouY2xpZW50SWQsb2JqLmNsaWVudE5hbWUpXCI+PHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIxIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzEwNjQwXzE4MDYxKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0wLjk3NjU2MiAxMEMwLjk3NjU2MiAxMCA0LjMwOTkgMy4zMzMzNyAxMC4xNDMyIDMuMzMzMzdDMTUuOTc2NiAzLjMzMzM3IDE5LjMwOTkgMTAgMTkuMzA5OSAxMEMxOS4zMDk5IDEwIDE1Ljk3NjYgMTYuNjY2NyAxMC4xNDMyIDE2LjY2NjdDNC4zMDk5IDE2LjY2NjcgMC45NzY1NjIgMTAgMC45NzY1NjIgMTBaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuMTQzMiAxMi41QzExLjUyMzkgMTIuNSAxMi42NDMyIDExLjM4MDggMTIuNjQzMiAxMEMxMi42NDMyIDguNjE5MzMgMTEuNTIzOSA3LjUwMDA0IDEwLjE0MzIgNy41MDAwNEM4Ljc2MjUyIDcuNTAwMDQgNy42NDMyMyA4LjYxOTMzIDcuNjQzMjMgMTBDNy42NDMyMyAxMS4zODA4IDguNzYyNTIgMTIuNSAxMC4xNDMyIDEyLjVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzEwNjQwXzE4MDYxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC4xNDMwNjYpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nICYmICFub0RhdGFcIiBjbGFzcz1cIm15LTNcIj5cclxuICAgICAgICAgICAgPGxpYi1wYWdpbmF0aW9uIFtpdGVtc1BlclBhZ2VdPVwicGFnZVNpemVcIiBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2VcIiBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zXCJcclxuICAgICAgICAgICAgICAgIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCIgW3BhZ2VTaXplXT1cInNldHBhZ2VTaXplKClcIiAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCI+PC9saWItcGFnaW5hdGlvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=