axidio-styleguide-library1-v2 0.2.11 → 0.2.13

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.
@@ -9,249 +9,182 @@ export class AxTableComponent {
9
9
  this.clickEvent = new EventEmitter();
10
10
  this.isHeaderVisible = true;
11
11
  this.isUserSort = false;
12
- this.itemsPerPage = 0;
13
- /**
14
- * Current page displayed in pagination
15
- */
16
- this.currentPage = 1;
17
- /**
18
- * Number of stores that can be displayed in each page
19
- */
12
+ this.tableHeadList = [];
13
+ this.masterList = [];
14
+ this.itemList = [];
15
+ this.currentList = [];
20
16
  this.pageSize = 10;
21
- /**
22
- * Sort direction of selected column in the table
23
- */
24
- this.sortDirection = 'asc';
25
- /**
26
- * Selected column for sorting
27
- */
17
+ this.currentPage = 1;
18
+ this.totalItems = 0;
19
+ this.totalPages = 1;
20
+ this.goToPageNumber = 1;
21
+ this.pagesToShow = [];
28
22
  this.sortColumn = '';
29
- /**
30
- * Master store list for the selected state
31
- */
32
- this.masterList = [];
23
+ this.sortDirection = '';
33
24
  this.chartConfiguration = {};
34
25
  this.defaultConfiguration = {};
35
- this.totalPages = 1;
36
- this.goToPageNumber = 1; // Fixed: renamed from goToPageValue to match template
37
- // Add pagesToShow property for pagination display
38
- this.pagesToShow = [];
39
26
  }
40
27
  ngOnInit() {
41
- var self = this;
28
+ if (!this.tableData || !this.tableData.data?.length)
29
+ return;
30
+ this.initializeTable();
31
+ }
32
+ initializeTable() {
42
33
  this.tableHeadList = Object.keys(this.tableData.data[0]);
43
- for (var i in this.defaultConfiguration) {
44
- this.chartConfiguration[i] = ChartHelper.getValueByConfigurationType(i, this.defaultConfiguration, this.customChartConfiguration);
45
- }
46
- this.masterList = [...self.tableData.data];
34
+ this.setupChartConfiguration();
35
+ this.masterList = [...this.tableData.data];
47
36
  this.itemList = [...this.masterList];
48
37
  this.totalItems = this.itemList.length;
49
38
  this.calculateTotalPages();
50
- this.generatePagesToShow(); // Generate pages to show
51
- if (this.tableData.metaData.isPaginationHidden) {
52
- this.currentList = this.itemList;
39
+ this.generatePagesToShow();
40
+ this.setHeaderVisibility();
41
+ this.loadPage();
42
+ }
43
+ setupChartConfiguration() {
44
+ for (const key in this.defaultConfiguration) {
45
+ this.chartConfiguration[key] = ChartHelper.getValueByConfigurationType(key, this.defaultConfiguration, this.customChartConfiguration);
53
46
  }
54
- else {
55
- this.loadPage();
47
+ }
48
+ setHeaderVisibility() {
49
+ const meta = this.tableData.metaData;
50
+ if (meta.isHeaderVisible !== undefined) {
51
+ this.isHeaderVisible = meta.isHeaderVisible;
56
52
  }
57
- if (this.tableData.metaData.isHeaderVisible != undefined)
58
- this.isHeaderVisible = this.tableData.metaData.isHeaderVisible;
59
53
  }
60
54
  loadPage() {
61
- const startIndex = (this.currentPage - 1) * this.pageSize;
62
- const endIndex = startIndex + this.pageSize;
63
- this.currentList = this.itemList.slice(startIndex, endIndex);
55
+ if (this.tableData.metaData.isPaginationHidden) {
56
+ this.currentList = this.itemList;
57
+ return;
58
+ }
59
+ const start = (this.currentPage - 1) * this.pageSize;
60
+ const end = start + this.pageSize;
61
+ this.currentList = this.itemList.slice(start, end);
64
62
  }
65
63
  calculateTotalPages() {
66
64
  this.totalPages = Math.ceil(this.totalItems / this.pageSize);
67
65
  this.goToPageNumber = this.currentPage;
68
66
  }
69
- preventNegative(event) {
70
- // Block characters: -, +, e (all invalid for page number)
71
- if (event.key === '-' || event.key === '+' || event.key.toLowerCase() === 'e') {
72
- event.preventDefault();
73
- }
74
- }
75
- // Generate array of page numbers to show in pagination
76
67
  generatePagesToShow() {
77
- this.pagesToShow = [];
78
68
  const maxPagesToShow = 5;
79
- let startPage = Math.max(1, this.currentPage - Math.floor(maxPagesToShow / 2));
80
- let endPage = Math.min(this.totalPages, startPage + maxPagesToShow - 1);
81
- // Adjust start page if we're near the end
82
- if (endPage - startPage + 1 < maxPagesToShow) {
83
- startPage = Math.max(1, endPage - maxPagesToShow + 1);
84
- }
85
- for (let i = startPage; i <= endPage; i++) {
86
- this.pagesToShow.push(i);
69
+ let start = Math.max(1, this.currentPage - Math.floor(maxPagesToShow / 2));
70
+ let end = Math.min(this.totalPages, start + maxPagesToShow - 1);
71
+ if (end - start + 1 < maxPagesToShow) {
72
+ start = Math.max(1, end - maxPagesToShow + 1);
87
73
  }
74
+ this.pagesToShow = Array.from({ length: end - start + 1 }, (_, i) => start + i);
88
75
  }
89
- onPaginationChange() {
76
+ refreshPagination() {
90
77
  this.loadPage();
91
78
  this.goToPageNumber = this.currentPage;
92
79
  this.generatePagesToShow();
93
80
  }
94
- // Navigation methods for pagination buttons
95
81
  goToFirstPage() {
96
82
  if (this.currentPage !== 1) {
97
83
  this.currentPage = 1;
98
- this.onPaginationChange();
84
+ this.refreshPagination();
99
85
  }
100
86
  }
101
87
  goToPreviousPage() {
102
88
  if (this.currentPage > 1) {
103
89
  this.currentPage--;
104
- this.onPaginationChange();
90
+ this.refreshPagination();
105
91
  }
106
92
  }
107
93
  goToNextPage() {
108
94
  if (this.currentPage < this.totalPages) {
109
95
  this.currentPage++;
110
- this.onPaginationChange();
96
+ this.refreshPagination();
111
97
  }
112
98
  }
113
99
  goToLastPage() {
114
100
  if (this.currentPage !== this.totalPages) {
115
101
  this.currentPage = this.totalPages;
116
- this.onPaginationChange();
117
- }
118
- }
119
- goToPage(page) {
120
- if (page >= 1 && page <= this.totalPages && page !== this.currentPage) {
121
- this.currentPage = page;
122
- this.onPaginationChange();
102
+ this.refreshPagination();
123
103
  }
124
104
  }
125
- // Fixed: renamed method to match template
126
105
  goToSpecificPage() {
127
- if (this.goToPageNumber === null || this.goToPageNumber === undefined) {
128
- this.goToPageNumber = this.currentPage;
129
- return;
130
- }
131
- const pageNum = parseInt(this.goToPageNumber.toString(), 10);
132
- if (isNaN(pageNum) || pageNum < 1) {
133
- this.goToPageNumber = 1;
134
- }
135
- else if (pageNum > this.totalPages) {
136
- this.goToPageNumber = this.totalPages;
137
- }
138
- // Update current page and load data
139
- this.currentPage = this.goToPageNumber;
140
- this.onPaginationChange();
106
+ let pageNum = Number(this.goToPageNumber);
107
+ if (isNaN(pageNum) || pageNum < 1)
108
+ pageNum = 1;
109
+ if (pageNum > this.totalPages)
110
+ pageNum = this.totalPages;
111
+ this.currentPage = pageNum;
112
+ this.refreshPagination();
141
113
  }
142
- validateNumberInput(event) {
143
- const charCode = event.which ? event.which : event.keyCode;
144
- if (charCode > 31 && (charCode < 48 || charCode > 57)) {
145
- return false;
146
- }
147
- return true;
148
- }
149
- /**
150
- * Returns the width of the column
151
- * @param id - column id
152
- */
153
- getWidthById(id, index) {
154
- if (this.tableHeadList.length == 3) {
155
- if (index == 1)
156
- return '60%';
157
- else
158
- return '20%';
114
+ preventNegative(event) {
115
+ const invalidKeys = ['-', '+', 'e'];
116
+ if (invalidKeys.includes(event.key.toLowerCase())) {
117
+ event.preventDefault();
159
118
  }
160
- var width = 100 / this.tableHeadList.length;
161
- return width + '%';
162
119
  }
163
- /**
164
- * Sorts the column that is being passed as the param
165
- * @param id - Column id
166
- */
167
120
  sortByColumn(id) {
168
- if (id === 'viewDetails' || this.tableData.metaData.isHeaderSortHidden) {
121
+ const meta = this.tableData.metaData;
122
+ if (id === 'viewDetails' || meta.isHeaderSortHidden)
169
123
  return;
170
- }
171
- if (!this.isUserSort)
172
- this.isUserSort = true;
124
+ this.isUserSort = true;
173
125
  if (id !== this.sortColumn) {
174
126
  this.sortColumn = id;
175
- this.sortDirection = 'asc'; // Reset to ascending when changing columns
127
+ this.sortDirection = 'asc';
176
128
  }
177
- else {
178
- if (this.sortDirection === 'asc') {
179
- this.sortDirection = 'desc';
180
- }
181
- else {
182
- this.sortDirection = 'asc';
183
- }
129
+ else if (this.sortDirection === 'asc') {
130
+ this.sortDirection = 'desc';
184
131
  }
185
- function compare(v1, v2) {
186
- const num1 = parseFloat(v1);
187
- const num2 = parseFloat(v2);
188
- if (!isNaN(num1) && !isNaN(num2)) {
189
- return num1 - num2;
190
- }
191
- return v1 < v2 ? -1 : v1 > v2 ? 1 : 0;
132
+ else {
133
+ this.resetSort();
134
+ return;
192
135
  }
136
+ this.sortItemList();
137
+ this.currentPage = 1;
138
+ this.refreshPagination();
139
+ }
140
+ sortItemList() {
141
+ const compare = (a, b) => {
142
+ const numA = parseFloat(a);
143
+ const numB = parseFloat(b);
144
+ if (!isNaN(numA) && !isNaN(numB))
145
+ return numA - numB;
146
+ return a < b ? -1 : a > b ? 1 : 0;
147
+ };
193
148
  this.itemList.sort((a, b) => {
194
- const res = compare(a[id], b[id]);
195
- return this.sortDirection === 'asc' ? res : -res;
149
+ const result = compare(a[this.sortColumn], b[this.sortColumn]);
150
+ return this.sortDirection === 'asc' ? result : -result;
196
151
  });
197
- // Reset to first page after sorting
152
+ }
153
+ resetSort() {
154
+ this.sortColumn = '';
155
+ this.sortDirection = '';
156
+ this.itemList = [...this.masterList];
198
157
  this.currentPage = 1;
199
- this.totalItems = this.itemList.length;
200
- this.calculateTotalPages();
201
- this.generatePagesToShow();
202
- this.loadPage();
158
+ this.refreshPagination();
203
159
  }
204
- /**
205
- * Returns whether column being passed as the param is currently being sorted or not
206
- * @param id column id
207
- */
208
160
  checkIfColumnCurrentlyBeingSorted(id) {
209
161
  return this.sortColumn === id;
210
162
  }
211
- /**
212
- * Returns the sort direction that is being currently sorted
213
- */
214
- getSortDirection() {
215
- return this.sortDirection === 'asc' ? 'arrow-up' : 'arrow-down';
163
+ onSearch(event) {
164
+ const searchText = (event.target.value || '').trim().toLowerCase();
165
+ this.itemList = searchText
166
+ ? this.masterList.filter(row => this.tableHeadList.some(col => row[col]?.toString().toLowerCase().includes(searchText)))
167
+ : [...this.masterList];
168
+ this.currentPage = 1;
169
+ this.totalItems = this.itemList.length;
170
+ this.calculateTotalPages();
171
+ this.refreshPagination();
216
172
  }
217
- onEnter(event) {
218
- this.itemList = this.masterList;
219
- let searchText = event.target.value;
220
- var self = this;
221
- if (this.itemList) {
222
- if (searchText) {
223
- this.itemList = this.itemList.filter(function matches(store) {
224
- let match = false;
225
- self.tableHeadList.map(function (tableHead) {
226
- if (store[tableHead]) {
227
- let searchableString = store[tableHead] + '';
228
- if (searchableString
229
- .toLowerCase()
230
- .includes(searchText.toLowerCase())) {
231
- match = true;
232
- }
233
- }
234
- });
235
- return match;
236
- });
237
- }
238
- // Reset pagination after search
239
- this.currentPage = 1;
240
- this.totalItems = this.itemList.length;
241
- this.calculateTotalPages();
242
- this.generatePagesToShow();
243
- this.loadPage();
173
+ getWidthById(_, index) {
174
+ if (this.tableHeadList.length === 3) {
175
+ return index === 1 ? '60%' : '20%';
244
176
  }
177
+ return `${100 / this.tableHeadList.length}%`;
245
178
  }
246
- handleClick(d) {
247
- this.clickEvent.emit(d);
179
+ handleClick(row) {
180
+ this.clickEvent.emit(row);
248
181
  }
249
182
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AxTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
250
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AxTableComponent, selector: "lib-ax-table", inputs: { tableData: "tableData", customChartConfiguration: "customChartConfiguration" }, outputs: { clickEvent: "clickEvent" }, ngImport: i0, template: "<!-- <div class=\"header-alt lib-display-flex lib-justify-content-space-between\">\r\n <lib-header-alt [title]=\"tableData.metaData.title\" *ngIf=\"!isHeaderVisible\"></lib-header-alt>\r\n <input type=\"text\" *ngIf=\"!tableData.metaData.isSearchHidden\" class=\"float-right padding-5 input-style\"\r\n id=\"exampleInputEmail1\" autocomplete=\"off\" placeholder=\" Search \" aria-describedby=\"emailHelp\"\r\n (keyup)=\"onEnter($event)\" />\r\n</div>\r\n<div class=\"table-header\"></div>\r\n<div class=\"table-wrapper\">\r\n <table class=\"table table-bordered table-hover\">\r\n <thead class=\"table-thead\">\r\n <tr class=\"table-header\">\r\n <th *ngFor=\"let header of tableHeadList; index as i\" class=\"header-cell\" [ngClass]=\"\r\n !tableData.metaData.isHeaderAlignedToCenter\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right'\r\n : 'textalign-left'\r\n : 'textalign-center'\r\n \" [style.width]=\"getWidthById(header, i)\" [style.backgroundColor]=\"tableData.metaData.headerColor\"\r\n [style.color]=\"tableData.metaData.headerTextColor\" (click)=\"sortByColumn(header)\">\r\n <span *ngIf=\"\r\n (!tableData.metaData.isFirstColumnHeaderHidden && i == 0) || i > 0\r\n \" [ngClass]=\"\r\n !tableData.metaData.isHeaderSortHidden\r\n ? 'cursor-pointer'\r\n : 'cursor-default'\r\n \">{{ header }}</span>\r\n <i *ngIf=\"\r\n (!isUserSort || checkIfColumnCurrentlyBeingSorted(header)) &&\r\n !tableData.metaData.isHeaderSortHidden\r\n \" class=\"sort-icons fa\" [ngClass]=\"\r\n !isUserSort\r\n ? 'fa-sort'\r\n : sortDirection == 'asc'\r\n ? 'fa-sort-asc'\r\n : 'fa-sort-desc'\r\n \"></i>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-body\">\r\n <tr *ngFor=\"let store of currentList\" [ngClass]=\"\r\n tableData?.highlightedTexts?.includes(store[tableHeadList[0]])\r\n ? 'font-weight-bold'\r\n : ''\r\n \">\r\n <td (click)=\"handleClick(store)\" class=\"table-cell\" *ngFor=\"let header of tableHeadList; index as i\"\r\n [style.width]=\"getWidthById(header, i)\" [ngClass]=\"\r\n !tableData.metaData.isAllAlignedToRight\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right last-column-color'\r\n : 'textalign-left'\r\n : 'textalign-right'\r\n \" [style.cursor]=\"\r\n tableData.metaData.hasDrillDown ? 'pointer' : 'default'\r\n \">\r\n <span>{{ store[header] }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n\r\n<div class=\"pagination-container\" *ngIf=\"itemList && itemList.length && !tableData.metaData.isPaginationHidden\">\r\n <div class=\"results-summary\">\r\n Showing <b>{{ (currentPage - 1) * pageSize + 1 }}</b> to\r\n <b>{{ currentPage * pageSize > totalItems ? totalItems : currentPage * pageSize }}</b>\r\n of <b>{{ totalItems }}</b> entries\r\n </div>\r\n\r\n <ngb-pagination \r\n [collectionSize]=\"totalItems\" \r\n [(page)]=\"currentPage\" \r\n [pageSize]=\"pageSize\" \r\n [maxSize]=\"5\"\r\n [rotate]=\"true\" \r\n [boundaryLinks]=\"true\" \r\n (pageChange)=\"onPaginationChange()\" \r\n class=\"sb-pagination\">\r\n </ngb-pagination>\r\n\r\n <div class=\"go-to-page\">\r\n <label for=\"gotoPageInput\">Go to page</label>\r\n <input \r\n id=\"gotoPageInput\" \r\n type=\"number\" \r\n [min]=\"1\" \r\n [max]=\"totalPages\" \r\n [ngModel]=\"goToPageValue\"\r\n (ngModelChange)=\"goToPageValue = $event; goToPage()\"\r\n (keypress)=\"validateNumberInput($event)\">\r\n </div>\r\n</div> -->\r\n\r\n\r\n\r\n<div class=\"d-flex align-items-center justify-content-between w-100\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <lib-header-alt [title]=\"tableData.metaData.title\" *ngIf=\"!isHeaderVisible\"></lib-header-alt>\r\n </div>\r\n\r\n <input type=\"text\" *ngIf=\"!tableData.metaData.isSearchHidden\"\r\n class=\"form-control custom-input medium-font-size textbox-ax-common\" id=\"exampleInputEmail1\" autocomplete=\"off\"\r\n placeholder=\" Search \" aria-describedby=\"emailHelp\" (keyup)=\"onEnter($event)\" />\r\n</div>\r\n\r\n<div class=\"popup-body-for-scroll\">\r\n <div class=\"table-wrapper\">\r\n\r\n <div class=\"table-responsive border\">\r\n <table class=\"table table-bordered table-hover align-middle mb-0\">\r\n <thead class=\"table-dark\">\r\n <tr class=\"table-header\">\r\n <th *ngFor=\"let header of tableHeadList; index as i\" [ngClass]=\"\r\n !tableData.metaData.isHeaderAlignedToCenter\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right'\r\n : 'textalign-left'\r\n : 'textalign-center'\r\n \" [style.width]=\"getWidthById(header, i)\" [style.backgroundColor]=\"tableData.metaData.headerColor\"\r\n [style.color]=\"tableData.metaData.headerTextColor\" (click)=\"sortByColumn(header)\">\r\n <span *ngIf=\"\r\n (!tableData.metaData.isFirstColumnHeaderHidden && i == 0) || i > 0\r\n \" [ngClass]=\"\r\n !tableData.metaData.isHeaderSortHidden\r\n ? 'cursor-pointer'\r\n : 'cursor-default'\r\n \">{{ header }}</span>\r\n <i *ngIf=\"\r\n (!isUserSort || checkIfColumnCurrentlyBeingSorted(header)) &&\r\n !tableData.metaData.isHeaderSortHidden\r\n \" class=\"sort-icons fa\" [ngClass]=\"\r\n !isUserSort\r\n ? 'fa-sort'\r\n : sortDirection == 'asc'\r\n ? 'fa-sort-asc'\r\n : 'fa-sort-desc'\r\n \"></i>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr *ngFor=\"let store of currentList\" [ngClass]=\"\r\n tableData?.highlightedTexts?.includes(store[tableHeadList[0]])\r\n ? 'font-weight-bold'\r\n : ''\r\n \">\r\n <td (click)=\"handleClick(store)\" class=\"table-cell\" *ngFor=\"let header of tableHeadList; index as i\"\r\n [style.width]=\"getWidthById(header, i)\" [ngClass]=\"\r\n !tableData.metaData.isAllAlignedToRight\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right last-column-color'\r\n : 'textalign-left'\r\n : 'textalign-right'\r\n \" [style.cursor]=\"\r\n tableData.metaData.hasDrillDown ? 'pointer' : 'default'\r\n \">\r\n <span>{{ store[header] }}</span>\r\n </td>\r\n </tr>\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"pagination-bar mt-0\">\r\n <span>Go To</span>\r\n <input type=\"number\" class=\"page-input\" min=\"1\" [max]=\"totalPages\" (keyup.enter)=\"goToSpecificPage()\" [(ngModel)]=\"goToPageNumber\"\r\n (keypress)=\"preventNegative($event)\"\r\n >\r\n\r\n <span> {{ (currentList.length > 0 ? ((currentPage - 1) * pageSize + 1) : 0) }} -\r\n {{ ((currentPage - 1) * pageSize + currentList.length) }} of\r\n {{ totalItems | number }}</span>\r\n\r\n <button [disabled]=\"currentPage === 1\" (click)=\"goToFirstPage()\" class=\"pagination-btn\" title=\"First Page\">\r\n <i class=\"bi bi-chevron-double-left\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === 1\" (click)=\"goToPreviousPage()\" class=\"pagination-btn\" title=\"Previous Page\">\r\n <i class=\"bi bi-chevron-left\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === totalPages\" (click)=\"goToNextPage()\" class=\"pagination-btn\" title=\"Next Page\">\r\n <i class=\"bi bi-chevron-right\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === totalPages\" (click)=\"goToLastPage()\" class=\"pagination-btn\" title=\"Last Page\">\r\n <i class=\"bi bi-chevron-double-right\"></i>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n</div>", styles: [".modal-dialog{max-height:90vh;height:90vh;margin:5vh auto;display:flex;flex-direction:column}.modal-content{height:100%;display:flex;flex-direction:column;max-height:100%;overflow:hidden}.modal-header{flex-shrink:0;border-bottom:1px solid #dee2e6;padding:1rem}.modal-body{flex:1;overflow:hidden;padding:1rem;display:flex;flex-direction:column;min-height:0}.modal-footer{flex-shrink:0;border-top:1px solid #dee2e6;padding:1rem}.pagination-bar{display:flex;align-items:center;justify-content:flex-end;font-size:15px;gap:10px;width:100%;border:var(--table-border);border-top:0;background:var(--table-bg);color:var(--font-color);padding:12px 4px}.page-input::placeholder{color:var(--font-color)}.pagination-btn{background:none;border:none;color:var(--font-color, #444);border-radius:5px;transition:background .15s,color .15s;font-size:1.14rem;display:inline-flex;align-items:center;justify-content:center}.pagination-btn[disabled]{color:#c3c3c3!important;cursor:not-allowed}.pagination-btn:not([disabled]):hover,.pagination-btn:not([disabled]):focus{background:#e6f0ff!important;color:#1976d2!important;outline:none}.page-input{width:45px;text-align:center;font-size:15px;border:var(--table-border);height:32px;background:var(--table-bg);color:var(--font-color)}.popup-body-for-scroll{overflow:hidden;display:flex;flex-direction:column;flex:1;min-height:0;max-height:90%;gap:.5rem}.d-flex.align-items-center.justify-content-between.w-100{margin-bottom:0;flex-shrink:0}.table-wrapper{background-color:var(--background-color, #ffffff);color:var(--bs-body-color, #212529);box-shadow:0 0 8px #0000000f;flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;margin-bottom:0}.table-responsive{width:100%;overflow:auto;flex:1;min-height:0}table{width:100%;background-color:var(--background-color, #ffffff);margin-bottom:0}table th,table td{vertical-align:middle;white-space:nowrap;background-color:var(--background-color, #ffffff);color:var(--bs-body-color, #212529);border:var(--border, 1px solid #dee2e6);padding:8px 12px}thead th{background-color:var(--bs-tertiary-bg, #f8f9fa);color:var(--bs-body-color, #212529);font-weight:600;position:sticky;top:0;z-index:2}.table-responsive::-webkit-scrollbar{width:6px;height:6px}.table-responsive::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}.table-responsive::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.table-responsive::-webkit-scrollbar-thumb:hover{background:#a8a8a8}.sort-icons{margin-left:5px;color:var(--bs-body-color, #212529)}.textalign-left{text-align:left}.textalign-right{text-align:right}.textalign-center{text-align:center}.last-column-color{color:var(--link-menu, #2b6ecf)}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-bold{font-weight:700}.pagination-section{flex-shrink:0;background-color:var(--background-color, #ffffff);border:1px solid #dee2e6;border-radius:8px;margin-top:0;margin-bottom:0;padding:.5rem;min-height:60px;max-height:70px;overflow:visible;position:relative;z-index:1}@media (max-width: 575.98px){.modal-dialog{margin:0;max-height:100vh;height:100vh;width:100%;max-width:100%}.modal-content{max-height:100vh;border-radius:0;height:100vh}.modal-body{padding:.75rem}table th,table td{padding:6px 8px;font-size:.875rem}.pagination-section{margin-top:.25rem;padding:.5rem;max-height:118px}}@media (min-width: 576px) and (max-width: 767.98px){.modal-dialog{max-width:95%;margin:2.5vh auto;max-height:95vh;height:95vh}.modal-content{max-height:95vh;height:100%}}@media (min-width: 768px) and (max-width: 991.98px){.modal-dialog{max-width:90%;margin:5vh auto;max-height:90vh;height:90vh}.modal-content{max-height:90vh;height:100%}}@media (min-width: 992px){.modal-dialog{max-width:85%;margin:5vh auto;max-height:90vh;height:90vh}.modal-content{max-height:90vh;height:100%}}@media (min-width: 1200px){.modal-dialog{max-width:1140px}}.custom-input{max-width:300px;margin-left:auto}.d-flex.align-items-center.justify-content-between.w-100{margin-bottom:.5rem;flex-shrink:0}.modal-backdrop{z-index:1040}.modal{z-index:1050}.modal.show .modal-dialog{transform:none}.modal-dialog{position:relative;width:auto;pointer-events:none}.modal-dialog .modal-content{pointer-events:auto}.pagination-section .btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.2}.page-gap{gap:5px}.pagination-section .form-control{height:30px;font-size:.875rem}.pagination-section span{font-size:.875rem;line-height:1.2}@media (max-width: 480px){.table-responsive{font-size:.8rem}table th,table td{min-width:80px;padding:4px 6px}.pagination-section .btn{padding:.25rem .5rem;font-size:.8rem}.page-gap{gap:0}}@media (max-width: 576px){.page-gap{gap:0}}@media print{.modal-dialog{max-height:none;height:auto}.table-responsive{overflow:visible}.pagination-section{display:none}}@media screen and (max-width: 768px) and (max-height: 900px){.popup-body-for-scroll{max-height:85%}}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.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: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.HeaderAltComponent, selector: "lib-header-alt", inputs: ["title"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }] }); }
183
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AxTableComponent, selector: "lib-ax-table", inputs: { tableData: "tableData", customChartConfiguration: "customChartConfiguration" }, outputs: { clickEvent: "clickEvent" }, ngImport: i0, template: "<div class=\"d-flex align-items-center justify-content-between w-100\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <lib-header-alt [title]=\"tableData.metaData.title\" *ngIf=\"!isHeaderVisible\"></lib-header-alt>\r\n </div>\r\n\r\n <input\r\n *ngIf=\"!tableData.metaData.isSearchHidden\"\r\n type=\"text\"\r\n class=\"form-control custom-input medium-font-size textbox-ax-common\"\r\n placeholder=\"Search\"\r\n autocomplete=\"off\"\r\n (keyup)=\"onSearch($event)\"\r\n />\r\n</div>\r\n\r\n<div class=\"popup-body-for-scroll\">\r\n <div class=\"table-wrapper\">\r\n <div class=\"table-responsive border\">\r\n <table class=\"table table-bordered table-hover align-middle mb-0\">\r\n <thead class=\"table-dark\">\r\n <tr class=\"table-header\">\r\n <th\r\n *ngFor=\"let header of tableHeadList; index as i\"\r\n (click)=\"sortByColumn(header)\"\r\n [ngClass]=\"\r\n !tableData.metaData.isHeaderAlignedToCenter\r\n ? i === tableHeadList.length - 1\r\n ? 'textalign-right'\r\n : 'textalign-left'\r\n : 'textalign-center'\r\n \"\r\n [style.width]=\"getWidthById(header, i)\"\r\n [style.backgroundColor]=\"tableData.metaData.headerColor\"\r\n [style.color]=\"tableData.metaData.headerTextColor\"\r\n >\r\n <span\r\n *ngIf=\"(!tableData.metaData.isFirstColumnHeaderHidden && i === 0) || i > 0\"\r\n [ngClass]=\"\r\n !tableData.metaData.isHeaderSortHidden ? 'cursor-pointer' : 'cursor-default'\r\n \"\r\n >\r\n {{ header }}\r\n </span>\r\n\r\n <i\r\n *ngIf=\"checkIfColumnCurrentlyBeingSorted(header) || !isUserSort\"\r\n class=\"sort-icons fa\"\r\n [ngClass]=\"\r\n sortColumn === header\r\n ? (sortDirection === 'asc'\r\n ? 'fa-sort-asc'\r\n : sortDirection === 'desc'\r\n ? 'fa-sort-desc'\r\n : 'fa-sort')\r\n : 'fa-sort'\r\n \"\r\n ></i>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr\r\n *ngFor=\"let row of currentList\"\r\n [ngClass]=\"tableData?.highlightedTexts?.includes(row[tableHeadList[0]]) ? 'font-weight-bold' : ''\"\r\n >\r\n <td\r\n *ngFor=\"let header of tableHeadList; index as i\"\r\n (click)=\"handleClick(row)\"\r\n class=\"table-cell\"\r\n [style.width]=\"getWidthById(header, i)\"\r\n [ngClass]=\"\r\n !tableData.metaData.isAllAlignedToRight\r\n ? i === tableHeadList.length - 1\r\n ? 'textalign-right last-column-color'\r\n : 'textalign-left'\r\n : 'textalign-right'\r\n \"\r\n [style.cursor]=\"tableData.metaData.hasDrillDown ? 'pointer' : 'default'\"\r\n >\r\n <span>{{ row[header] }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"pagination-bar mt-0\">\r\n <span>Go To</span>\r\n <input\r\n type=\"number\"\r\n class=\"page-input\"\r\n min=\"1\"\r\n [max]=\"totalPages\"\r\n [(ngModel)]=\"goToPageNumber\"\r\n (keypress)=\"preventNegative($event)\"\r\n (keyup.enter)=\"goToSpecificPage()\"\r\n />\r\n\r\n <span>\r\n {{ currentList.length > 0 ? (currentPage - 1) * pageSize + 1 : 0 }} -\r\n {{ (currentPage - 1) * pageSize + currentList.length }} of {{ totalItems | number }}\r\n </span>\r\n\r\n <button [disabled]=\"currentPage === 1\" (click)=\"goToFirstPage()\" class=\"pagination-btn\" title=\"First Page\">\r\n <i class=\"bi bi-chevron-double-left\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === 1\" (click)=\"goToPreviousPage()\" class=\"pagination-btn\" title=\"Previous Page\">\r\n <i class=\"bi bi-chevron-left\"></i>\r\n </button>\r\n <button\r\n [disabled]=\"currentPage === totalPages\"\r\n (click)=\"goToNextPage()\"\r\n class=\"pagination-btn\"\r\n title=\"Next Page\"\r\n >\r\n <i class=\"bi bi-chevron-right\"></i>\r\n </button>\r\n <button\r\n [disabled]=\"currentPage === totalPages\"\r\n (click)=\"goToLastPage()\"\r\n class=\"pagination-btn\"\r\n title=\"Last Page\"\r\n >\r\n <i class=\"bi bi-chevron-double-right\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n</div>", styles: [".modal-dialog{max-height:90vh;height:90vh;margin:5vh auto;display:flex;flex-direction:column}.modal-content{height:100%;display:flex;flex-direction:column;max-height:100%;overflow:hidden}.modal-header{flex-shrink:0;border-bottom:1px solid #dee2e6;padding:1rem}.modal-body{flex:1;overflow:hidden;padding:1rem;display:flex;flex-direction:column;min-height:0}.modal-footer{flex-shrink:0;border-top:1px solid #dee2e6;padding:1rem}.pagination-bar{display:flex;align-items:center;justify-content:flex-end;font-size:15px;gap:10px;width:100%;border:var(--table-border);border-top:0;background:var(--table-bg);color:var(--font-color);padding:12px 4px}.page-input::placeholder{color:var(--font-color)}.pagination-btn{background:none;border:none;color:var(--font-color, #444);border-radius:5px;transition:background .15s,color .15s;font-size:1.14rem;display:inline-flex;align-items:center;justify-content:center}.pagination-btn[disabled]{color:#c3c3c3!important;cursor:not-allowed}.pagination-btn:not([disabled]):hover,.pagination-btn:not([disabled]):focus{background:#e6f0ff!important;color:#1976d2!important;outline:none}.page-input{width:45px;text-align:center;font-size:15px;border:var(--table-border);height:32px;background:var(--table-bg);color:var(--font-color)}.popup-body-for-scroll{overflow:hidden;display:flex;flex-direction:column;flex:1;min-height:0;max-height:90%;gap:.5rem}.d-flex.align-items-center.justify-content-between.w-100{margin-bottom:0;flex-shrink:0}.table-wrapper{background-color:var(--background-color, #ffffff);color:var(--bs-body-color, #212529);box-shadow:0 0 8px #0000000f;flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;margin-bottom:0}.table-responsive{width:100%;overflow:auto;flex:1;min-height:0}table{width:100%;background-color:var(--background-color, #ffffff);margin-bottom:0}table th,table td{vertical-align:middle;white-space:nowrap;background-color:var(--background-color, #ffffff);color:var(--bs-body-color, #212529);border:var(--border, 1px solid #dee2e6);padding:8px 12px}thead th{background-color:var(--bs-tertiary-bg, #f8f9fa);color:var(--bs-body-color, #212529);font-weight:600;position:sticky;top:0;z-index:2}.table-responsive::-webkit-scrollbar{width:6px;height:6px}.table-responsive::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}.table-responsive::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.table-responsive::-webkit-scrollbar-thumb:hover{background:#a8a8a8}.sort-icons{margin-left:5px;color:var(--bs-body-color, #212529)}.textalign-left{text-align:left}.textalign-right{text-align:right}.textalign-center{text-align:center}.last-column-color{color:var(--link-menu, #2b6ecf)}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-bold{font-weight:700}.pagination-section{flex-shrink:0;background-color:var(--background-color, #ffffff);border:1px solid #dee2e6;border-radius:8px;margin-top:0;margin-bottom:0;padding:.5rem;min-height:60px;max-height:70px;overflow:visible;position:relative;z-index:1}@media (max-width: 575.98px){.modal-dialog{margin:0;max-height:100vh;height:100vh;width:100%;max-width:100%}.modal-content{max-height:100vh;border-radius:0;height:100vh}.modal-body{padding:.75rem}table th,table td{padding:6px 8px;font-size:.875rem}.pagination-section{margin-top:.25rem;padding:.5rem;max-height:118px}}@media (min-width: 576px) and (max-width: 767.98px){.modal-dialog{max-width:95%;margin:2.5vh auto;max-height:95vh;height:95vh}.modal-content{max-height:95vh;height:100%}}@media (min-width: 768px) and (max-width: 991.98px){.modal-dialog{max-width:90%;margin:5vh auto;max-height:90vh;height:90vh}.modal-content{max-height:90vh;height:100%}}@media (min-width: 992px){.modal-dialog{max-width:85%;margin:5vh auto;max-height:90vh;height:90vh}.modal-content{max-height:90vh;height:100%}}@media (min-width: 1200px){.modal-dialog{max-width:1140px}}.custom-input{max-width:300px;margin-left:auto}.d-flex.align-items-center.justify-content-between.w-100{margin-bottom:.5rem;flex-shrink:0}.modal-backdrop{z-index:1040}.modal{z-index:1050}.modal.show .modal-dialog{transform:none}.modal-dialog{position:relative;width:auto;pointer-events:none}.modal-dialog .modal-content{pointer-events:auto}.pagination-section .btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.2}.page-gap{gap:5px}.pagination-section .form-control{height:30px;font-size:.875rem}.pagination-section span{font-size:.875rem;line-height:1.2}@media (max-width: 480px){.table-responsive{font-size:.8rem}table th,table td{min-width:80px;padding:4px 6px}.pagination-section .btn{padding:.25rem .5rem;font-size:.8rem}.page-gap{gap:0}}@media (max-width: 576px){.page-gap{gap:0}}@media print{.modal-dialog{max-height:none;height:auto}.table-responsive{overflow:visible}.pagination-section{display:none}}@media screen and (max-width: 768px) and (max-height: 900px){.popup-body-for-scroll{max-height:85%}}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.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: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.HeaderAltComponent, selector: "lib-header-alt", inputs: ["title"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }] }); }
251
184
  }
252
185
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AxTableComponent, decorators: [{
253
186
  type: Component,
254
- args: [{ selector: 'lib-ax-table', template: "<!-- <div class=\"header-alt lib-display-flex lib-justify-content-space-between\">\r\n <lib-header-alt [title]=\"tableData.metaData.title\" *ngIf=\"!isHeaderVisible\"></lib-header-alt>\r\n <input type=\"text\" *ngIf=\"!tableData.metaData.isSearchHidden\" class=\"float-right padding-5 input-style\"\r\n id=\"exampleInputEmail1\" autocomplete=\"off\" placeholder=\" Search \" aria-describedby=\"emailHelp\"\r\n (keyup)=\"onEnter($event)\" />\r\n</div>\r\n<div class=\"table-header\"></div>\r\n<div class=\"table-wrapper\">\r\n <table class=\"table table-bordered table-hover\">\r\n <thead class=\"table-thead\">\r\n <tr class=\"table-header\">\r\n <th *ngFor=\"let header of tableHeadList; index as i\" class=\"header-cell\" [ngClass]=\"\r\n !tableData.metaData.isHeaderAlignedToCenter\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right'\r\n : 'textalign-left'\r\n : 'textalign-center'\r\n \" [style.width]=\"getWidthById(header, i)\" [style.backgroundColor]=\"tableData.metaData.headerColor\"\r\n [style.color]=\"tableData.metaData.headerTextColor\" (click)=\"sortByColumn(header)\">\r\n <span *ngIf=\"\r\n (!tableData.metaData.isFirstColumnHeaderHidden && i == 0) || i > 0\r\n \" [ngClass]=\"\r\n !tableData.metaData.isHeaderSortHidden\r\n ? 'cursor-pointer'\r\n : 'cursor-default'\r\n \">{{ header }}</span>\r\n <i *ngIf=\"\r\n (!isUserSort || checkIfColumnCurrentlyBeingSorted(header)) &&\r\n !tableData.metaData.isHeaderSortHidden\r\n \" class=\"sort-icons fa\" [ngClass]=\"\r\n !isUserSort\r\n ? 'fa-sort'\r\n : sortDirection == 'asc'\r\n ? 'fa-sort-asc'\r\n : 'fa-sort-desc'\r\n \"></i>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-body\">\r\n <tr *ngFor=\"let store of currentList\" [ngClass]=\"\r\n tableData?.highlightedTexts?.includes(store[tableHeadList[0]])\r\n ? 'font-weight-bold'\r\n : ''\r\n \">\r\n <td (click)=\"handleClick(store)\" class=\"table-cell\" *ngFor=\"let header of tableHeadList; index as i\"\r\n [style.width]=\"getWidthById(header, i)\" [ngClass]=\"\r\n !tableData.metaData.isAllAlignedToRight\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right last-column-color'\r\n : 'textalign-left'\r\n : 'textalign-right'\r\n \" [style.cursor]=\"\r\n tableData.metaData.hasDrillDown ? 'pointer' : 'default'\r\n \">\r\n <span>{{ store[header] }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n\r\n<div class=\"pagination-container\" *ngIf=\"itemList && itemList.length && !tableData.metaData.isPaginationHidden\">\r\n <div class=\"results-summary\">\r\n Showing <b>{{ (currentPage - 1) * pageSize + 1 }}</b> to\r\n <b>{{ currentPage * pageSize > totalItems ? totalItems : currentPage * pageSize }}</b>\r\n of <b>{{ totalItems }}</b> entries\r\n </div>\r\n\r\n <ngb-pagination \r\n [collectionSize]=\"totalItems\" \r\n [(page)]=\"currentPage\" \r\n [pageSize]=\"pageSize\" \r\n [maxSize]=\"5\"\r\n [rotate]=\"true\" \r\n [boundaryLinks]=\"true\" \r\n (pageChange)=\"onPaginationChange()\" \r\n class=\"sb-pagination\">\r\n </ngb-pagination>\r\n\r\n <div class=\"go-to-page\">\r\n <label for=\"gotoPageInput\">Go to page</label>\r\n <input \r\n id=\"gotoPageInput\" \r\n type=\"number\" \r\n [min]=\"1\" \r\n [max]=\"totalPages\" \r\n [ngModel]=\"goToPageValue\"\r\n (ngModelChange)=\"goToPageValue = $event; goToPage()\"\r\n (keypress)=\"validateNumberInput($event)\">\r\n </div>\r\n</div> -->\r\n\r\n\r\n\r\n<div class=\"d-flex align-items-center justify-content-between w-100\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <lib-header-alt [title]=\"tableData.metaData.title\" *ngIf=\"!isHeaderVisible\"></lib-header-alt>\r\n </div>\r\n\r\n <input type=\"text\" *ngIf=\"!tableData.metaData.isSearchHidden\"\r\n class=\"form-control custom-input medium-font-size textbox-ax-common\" id=\"exampleInputEmail1\" autocomplete=\"off\"\r\n placeholder=\" Search \" aria-describedby=\"emailHelp\" (keyup)=\"onEnter($event)\" />\r\n</div>\r\n\r\n<div class=\"popup-body-for-scroll\">\r\n <div class=\"table-wrapper\">\r\n\r\n <div class=\"table-responsive border\">\r\n <table class=\"table table-bordered table-hover align-middle mb-0\">\r\n <thead class=\"table-dark\">\r\n <tr class=\"table-header\">\r\n <th *ngFor=\"let header of tableHeadList; index as i\" [ngClass]=\"\r\n !tableData.metaData.isHeaderAlignedToCenter\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right'\r\n : 'textalign-left'\r\n : 'textalign-center'\r\n \" [style.width]=\"getWidthById(header, i)\" [style.backgroundColor]=\"tableData.metaData.headerColor\"\r\n [style.color]=\"tableData.metaData.headerTextColor\" (click)=\"sortByColumn(header)\">\r\n <span *ngIf=\"\r\n (!tableData.metaData.isFirstColumnHeaderHidden && i == 0) || i > 0\r\n \" [ngClass]=\"\r\n !tableData.metaData.isHeaderSortHidden\r\n ? 'cursor-pointer'\r\n : 'cursor-default'\r\n \">{{ header }}</span>\r\n <i *ngIf=\"\r\n (!isUserSort || checkIfColumnCurrentlyBeingSorted(header)) &&\r\n !tableData.metaData.isHeaderSortHidden\r\n \" class=\"sort-icons fa\" [ngClass]=\"\r\n !isUserSort\r\n ? 'fa-sort'\r\n : sortDirection == 'asc'\r\n ? 'fa-sort-asc'\r\n : 'fa-sort-desc'\r\n \"></i>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr *ngFor=\"let store of currentList\" [ngClass]=\"\r\n tableData?.highlightedTexts?.includes(store[tableHeadList[0]])\r\n ? 'font-weight-bold'\r\n : ''\r\n \">\r\n <td (click)=\"handleClick(store)\" class=\"table-cell\" *ngFor=\"let header of tableHeadList; index as i\"\r\n [style.width]=\"getWidthById(header, i)\" [ngClass]=\"\r\n !tableData.metaData.isAllAlignedToRight\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right last-column-color'\r\n : 'textalign-left'\r\n : 'textalign-right'\r\n \" [style.cursor]=\"\r\n tableData.metaData.hasDrillDown ? 'pointer' : 'default'\r\n \">\r\n <span>{{ store[header] }}</span>\r\n </td>\r\n </tr>\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"pagination-bar mt-0\">\r\n <span>Go To</span>\r\n <input type=\"number\" class=\"page-input\" min=\"1\" [max]=\"totalPages\" (keyup.enter)=\"goToSpecificPage()\" [(ngModel)]=\"goToPageNumber\"\r\n (keypress)=\"preventNegative($event)\"\r\n >\r\n\r\n <span> {{ (currentList.length > 0 ? ((currentPage - 1) * pageSize + 1) : 0) }} -\r\n {{ ((currentPage - 1) * pageSize + currentList.length) }} of\r\n {{ totalItems | number }}</span>\r\n\r\n <button [disabled]=\"currentPage === 1\" (click)=\"goToFirstPage()\" class=\"pagination-btn\" title=\"First Page\">\r\n <i class=\"bi bi-chevron-double-left\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === 1\" (click)=\"goToPreviousPage()\" class=\"pagination-btn\" title=\"Previous Page\">\r\n <i class=\"bi bi-chevron-left\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === totalPages\" (click)=\"goToNextPage()\" class=\"pagination-btn\" title=\"Next Page\">\r\n <i class=\"bi bi-chevron-right\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === totalPages\" (click)=\"goToLastPage()\" class=\"pagination-btn\" title=\"Last Page\">\r\n <i class=\"bi bi-chevron-double-right\"></i>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n</div>", styles: [".modal-dialog{max-height:90vh;height:90vh;margin:5vh auto;display:flex;flex-direction:column}.modal-content{height:100%;display:flex;flex-direction:column;max-height:100%;overflow:hidden}.modal-header{flex-shrink:0;border-bottom:1px solid #dee2e6;padding:1rem}.modal-body{flex:1;overflow:hidden;padding:1rem;display:flex;flex-direction:column;min-height:0}.modal-footer{flex-shrink:0;border-top:1px solid #dee2e6;padding:1rem}.pagination-bar{display:flex;align-items:center;justify-content:flex-end;font-size:15px;gap:10px;width:100%;border:var(--table-border);border-top:0;background:var(--table-bg);color:var(--font-color);padding:12px 4px}.page-input::placeholder{color:var(--font-color)}.pagination-btn{background:none;border:none;color:var(--font-color, #444);border-radius:5px;transition:background .15s,color .15s;font-size:1.14rem;display:inline-flex;align-items:center;justify-content:center}.pagination-btn[disabled]{color:#c3c3c3!important;cursor:not-allowed}.pagination-btn:not([disabled]):hover,.pagination-btn:not([disabled]):focus{background:#e6f0ff!important;color:#1976d2!important;outline:none}.page-input{width:45px;text-align:center;font-size:15px;border:var(--table-border);height:32px;background:var(--table-bg);color:var(--font-color)}.popup-body-for-scroll{overflow:hidden;display:flex;flex-direction:column;flex:1;min-height:0;max-height:90%;gap:.5rem}.d-flex.align-items-center.justify-content-between.w-100{margin-bottom:0;flex-shrink:0}.table-wrapper{background-color:var(--background-color, #ffffff);color:var(--bs-body-color, #212529);box-shadow:0 0 8px #0000000f;flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;margin-bottom:0}.table-responsive{width:100%;overflow:auto;flex:1;min-height:0}table{width:100%;background-color:var(--background-color, #ffffff);margin-bottom:0}table th,table td{vertical-align:middle;white-space:nowrap;background-color:var(--background-color, #ffffff);color:var(--bs-body-color, #212529);border:var(--border, 1px solid #dee2e6);padding:8px 12px}thead th{background-color:var(--bs-tertiary-bg, #f8f9fa);color:var(--bs-body-color, #212529);font-weight:600;position:sticky;top:0;z-index:2}.table-responsive::-webkit-scrollbar{width:6px;height:6px}.table-responsive::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}.table-responsive::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.table-responsive::-webkit-scrollbar-thumb:hover{background:#a8a8a8}.sort-icons{margin-left:5px;color:var(--bs-body-color, #212529)}.textalign-left{text-align:left}.textalign-right{text-align:right}.textalign-center{text-align:center}.last-column-color{color:var(--link-menu, #2b6ecf)}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-bold{font-weight:700}.pagination-section{flex-shrink:0;background-color:var(--background-color, #ffffff);border:1px solid #dee2e6;border-radius:8px;margin-top:0;margin-bottom:0;padding:.5rem;min-height:60px;max-height:70px;overflow:visible;position:relative;z-index:1}@media (max-width: 575.98px){.modal-dialog{margin:0;max-height:100vh;height:100vh;width:100%;max-width:100%}.modal-content{max-height:100vh;border-radius:0;height:100vh}.modal-body{padding:.75rem}table th,table td{padding:6px 8px;font-size:.875rem}.pagination-section{margin-top:.25rem;padding:.5rem;max-height:118px}}@media (min-width: 576px) and (max-width: 767.98px){.modal-dialog{max-width:95%;margin:2.5vh auto;max-height:95vh;height:95vh}.modal-content{max-height:95vh;height:100%}}@media (min-width: 768px) and (max-width: 991.98px){.modal-dialog{max-width:90%;margin:5vh auto;max-height:90vh;height:90vh}.modal-content{max-height:90vh;height:100%}}@media (min-width: 992px){.modal-dialog{max-width:85%;margin:5vh auto;max-height:90vh;height:90vh}.modal-content{max-height:90vh;height:100%}}@media (min-width: 1200px){.modal-dialog{max-width:1140px}}.custom-input{max-width:300px;margin-left:auto}.d-flex.align-items-center.justify-content-between.w-100{margin-bottom:.5rem;flex-shrink:0}.modal-backdrop{z-index:1040}.modal{z-index:1050}.modal.show .modal-dialog{transform:none}.modal-dialog{position:relative;width:auto;pointer-events:none}.modal-dialog .modal-content{pointer-events:auto}.pagination-section .btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.2}.page-gap{gap:5px}.pagination-section .form-control{height:30px;font-size:.875rem}.pagination-section span{font-size:.875rem;line-height:1.2}@media (max-width: 480px){.table-responsive{font-size:.8rem}table th,table td{min-width:80px;padding:4px 6px}.pagination-section .btn{padding:.25rem .5rem;font-size:.8rem}.page-gap{gap:0}}@media (max-width: 576px){.page-gap{gap:0}}@media print{.modal-dialog{max-height:none;height:auto}.table-responsive{overflow:visible}.pagination-section{display:none}}@media screen and (max-width: 768px) and (max-height: 900px){.popup-body-for-scroll{max-height:85%}}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"] }]
187
+ args: [{ selector: 'lib-ax-table', template: "<div class=\"d-flex align-items-center justify-content-between w-100\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <lib-header-alt [title]=\"tableData.metaData.title\" *ngIf=\"!isHeaderVisible\"></lib-header-alt>\r\n </div>\r\n\r\n <input\r\n *ngIf=\"!tableData.metaData.isSearchHidden\"\r\n type=\"text\"\r\n class=\"form-control custom-input medium-font-size textbox-ax-common\"\r\n placeholder=\"Search\"\r\n autocomplete=\"off\"\r\n (keyup)=\"onSearch($event)\"\r\n />\r\n</div>\r\n\r\n<div class=\"popup-body-for-scroll\">\r\n <div class=\"table-wrapper\">\r\n <div class=\"table-responsive border\">\r\n <table class=\"table table-bordered table-hover align-middle mb-0\">\r\n <thead class=\"table-dark\">\r\n <tr class=\"table-header\">\r\n <th\r\n *ngFor=\"let header of tableHeadList; index as i\"\r\n (click)=\"sortByColumn(header)\"\r\n [ngClass]=\"\r\n !tableData.metaData.isHeaderAlignedToCenter\r\n ? i === tableHeadList.length - 1\r\n ? 'textalign-right'\r\n : 'textalign-left'\r\n : 'textalign-center'\r\n \"\r\n [style.width]=\"getWidthById(header, i)\"\r\n [style.backgroundColor]=\"tableData.metaData.headerColor\"\r\n [style.color]=\"tableData.metaData.headerTextColor\"\r\n >\r\n <span\r\n *ngIf=\"(!tableData.metaData.isFirstColumnHeaderHidden && i === 0) || i > 0\"\r\n [ngClass]=\"\r\n !tableData.metaData.isHeaderSortHidden ? 'cursor-pointer' : 'cursor-default'\r\n \"\r\n >\r\n {{ header }}\r\n </span>\r\n\r\n <i\r\n *ngIf=\"checkIfColumnCurrentlyBeingSorted(header) || !isUserSort\"\r\n class=\"sort-icons fa\"\r\n [ngClass]=\"\r\n sortColumn === header\r\n ? (sortDirection === 'asc'\r\n ? 'fa-sort-asc'\r\n : sortDirection === 'desc'\r\n ? 'fa-sort-desc'\r\n : 'fa-sort')\r\n : 'fa-sort'\r\n \"\r\n ></i>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr\r\n *ngFor=\"let row of currentList\"\r\n [ngClass]=\"tableData?.highlightedTexts?.includes(row[tableHeadList[0]]) ? 'font-weight-bold' : ''\"\r\n >\r\n <td\r\n *ngFor=\"let header of tableHeadList; index as i\"\r\n (click)=\"handleClick(row)\"\r\n class=\"table-cell\"\r\n [style.width]=\"getWidthById(header, i)\"\r\n [ngClass]=\"\r\n !tableData.metaData.isAllAlignedToRight\r\n ? i === tableHeadList.length - 1\r\n ? 'textalign-right last-column-color'\r\n : 'textalign-left'\r\n : 'textalign-right'\r\n \"\r\n [style.cursor]=\"tableData.metaData.hasDrillDown ? 'pointer' : 'default'\"\r\n >\r\n <span>{{ row[header] }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"pagination-bar mt-0\">\r\n <span>Go To</span>\r\n <input\r\n type=\"number\"\r\n class=\"page-input\"\r\n min=\"1\"\r\n [max]=\"totalPages\"\r\n [(ngModel)]=\"goToPageNumber\"\r\n (keypress)=\"preventNegative($event)\"\r\n (keyup.enter)=\"goToSpecificPage()\"\r\n />\r\n\r\n <span>\r\n {{ currentList.length > 0 ? (currentPage - 1) * pageSize + 1 : 0 }} -\r\n {{ (currentPage - 1) * pageSize + currentList.length }} of {{ totalItems | number }}\r\n </span>\r\n\r\n <button [disabled]=\"currentPage === 1\" (click)=\"goToFirstPage()\" class=\"pagination-btn\" title=\"First Page\">\r\n <i class=\"bi bi-chevron-double-left\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === 1\" (click)=\"goToPreviousPage()\" class=\"pagination-btn\" title=\"Previous Page\">\r\n <i class=\"bi bi-chevron-left\"></i>\r\n </button>\r\n <button\r\n [disabled]=\"currentPage === totalPages\"\r\n (click)=\"goToNextPage()\"\r\n class=\"pagination-btn\"\r\n title=\"Next Page\"\r\n >\r\n <i class=\"bi bi-chevron-right\"></i>\r\n </button>\r\n <button\r\n [disabled]=\"currentPage === totalPages\"\r\n (click)=\"goToLastPage()\"\r\n class=\"pagination-btn\"\r\n title=\"Last Page\"\r\n >\r\n <i class=\"bi bi-chevron-double-right\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n</div>", styles: [".modal-dialog{max-height:90vh;height:90vh;margin:5vh auto;display:flex;flex-direction:column}.modal-content{height:100%;display:flex;flex-direction:column;max-height:100%;overflow:hidden}.modal-header{flex-shrink:0;border-bottom:1px solid #dee2e6;padding:1rem}.modal-body{flex:1;overflow:hidden;padding:1rem;display:flex;flex-direction:column;min-height:0}.modal-footer{flex-shrink:0;border-top:1px solid #dee2e6;padding:1rem}.pagination-bar{display:flex;align-items:center;justify-content:flex-end;font-size:15px;gap:10px;width:100%;border:var(--table-border);border-top:0;background:var(--table-bg);color:var(--font-color);padding:12px 4px}.page-input::placeholder{color:var(--font-color)}.pagination-btn{background:none;border:none;color:var(--font-color, #444);border-radius:5px;transition:background .15s,color .15s;font-size:1.14rem;display:inline-flex;align-items:center;justify-content:center}.pagination-btn[disabled]{color:#c3c3c3!important;cursor:not-allowed}.pagination-btn:not([disabled]):hover,.pagination-btn:not([disabled]):focus{background:#e6f0ff!important;color:#1976d2!important;outline:none}.page-input{width:45px;text-align:center;font-size:15px;border:var(--table-border);height:32px;background:var(--table-bg);color:var(--font-color)}.popup-body-for-scroll{overflow:hidden;display:flex;flex-direction:column;flex:1;min-height:0;max-height:90%;gap:.5rem}.d-flex.align-items-center.justify-content-between.w-100{margin-bottom:0;flex-shrink:0}.table-wrapper{background-color:var(--background-color, #ffffff);color:var(--bs-body-color, #212529);box-shadow:0 0 8px #0000000f;flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;margin-bottom:0}.table-responsive{width:100%;overflow:auto;flex:1;min-height:0}table{width:100%;background-color:var(--background-color, #ffffff);margin-bottom:0}table th,table td{vertical-align:middle;white-space:nowrap;background-color:var(--background-color, #ffffff);color:var(--bs-body-color, #212529);border:var(--border, 1px solid #dee2e6);padding:8px 12px}thead th{background-color:var(--bs-tertiary-bg, #f8f9fa);color:var(--bs-body-color, #212529);font-weight:600;position:sticky;top:0;z-index:2}.table-responsive::-webkit-scrollbar{width:6px;height:6px}.table-responsive::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}.table-responsive::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.table-responsive::-webkit-scrollbar-thumb:hover{background:#a8a8a8}.sort-icons{margin-left:5px;color:var(--bs-body-color, #212529)}.textalign-left{text-align:left}.textalign-right{text-align:right}.textalign-center{text-align:center}.last-column-color{color:var(--link-menu, #2b6ecf)}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-bold{font-weight:700}.pagination-section{flex-shrink:0;background-color:var(--background-color, #ffffff);border:1px solid #dee2e6;border-radius:8px;margin-top:0;margin-bottom:0;padding:.5rem;min-height:60px;max-height:70px;overflow:visible;position:relative;z-index:1}@media (max-width: 575.98px){.modal-dialog{margin:0;max-height:100vh;height:100vh;width:100%;max-width:100%}.modal-content{max-height:100vh;border-radius:0;height:100vh}.modal-body{padding:.75rem}table th,table td{padding:6px 8px;font-size:.875rem}.pagination-section{margin-top:.25rem;padding:.5rem;max-height:118px}}@media (min-width: 576px) and (max-width: 767.98px){.modal-dialog{max-width:95%;margin:2.5vh auto;max-height:95vh;height:95vh}.modal-content{max-height:95vh;height:100%}}@media (min-width: 768px) and (max-width: 991.98px){.modal-dialog{max-width:90%;margin:5vh auto;max-height:90vh;height:90vh}.modal-content{max-height:90vh;height:100%}}@media (min-width: 992px){.modal-dialog{max-width:85%;margin:5vh auto;max-height:90vh;height:90vh}.modal-content{max-height:90vh;height:100%}}@media (min-width: 1200px){.modal-dialog{max-width:1140px}}.custom-input{max-width:300px;margin-left:auto}.d-flex.align-items-center.justify-content-between.w-100{margin-bottom:.5rem;flex-shrink:0}.modal-backdrop{z-index:1040}.modal{z-index:1050}.modal.show .modal-dialog{transform:none}.modal-dialog{position:relative;width:auto;pointer-events:none}.modal-dialog .modal-content{pointer-events:auto}.pagination-section .btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.2}.page-gap{gap:5px}.pagination-section .form-control{height:30px;font-size:.875rem}.pagination-section span{font-size:.875rem;line-height:1.2}@media (max-width: 480px){.table-responsive{font-size:.8rem}table th,table td{min-width:80px;padding:4px 6px}.pagination-section .btn{padding:.25rem .5rem;font-size:.8rem}.page-gap{gap:0}}@media (max-width: 576px){.page-gap{gap:0}}@media print{.modal-dialog{max-height:none;height:auto}.table-responsive{overflow:visible}.pagination-section{display:none}}@media screen and (max-width: 768px) and (max-height: 900px){.popup-body-for-scroll{max-height:85%}}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"] }]
255
188
  }], ctorParameters: () => [], propDecorators: { tableData: [{
256
189
  type: Input
257
190
  }], customChartConfiguration: [{
@@ -259,4 +192,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
259
192
  }], clickEvent: [{
260
193
  type: Output
261
194
  }] } });
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXgtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2F4LXRhYmxlL2F4LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9heC10YWJsZS9heC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDOzs7OztBQU8xQyxNQUFNLE9BQU8sZ0JBQWdCO0lBMEQzQjtRQXZEVSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMvQyxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUVoQyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBUzVCLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBS3pCOztXQUVHO1FBQ0gsZ0JBQVcsR0FBUSxDQUFDLENBQUM7UUFDckI7O1dBRUc7UUFDSCxhQUFRLEdBQVEsRUFBRSxDQUFDO1FBS25COztXQUVHO1FBQ0gsa0JBQWEsR0FBUSxLQUFLLENBQUM7UUFDM0I7O1dBRUc7UUFDSCxlQUFVLEdBQVEsRUFBRSxDQUFDO1FBS3JCOztXQUVHO1FBQ0gsZUFBVSxHQUFRLEVBQUUsQ0FBQztRQUNyQix1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFFN0IseUJBQW9CLEdBQVEsRUFBRSxDQUFDO1FBRS9CLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFDdkIsbUJBQWMsR0FBVyxDQUFDLENBQUMsQ0FBQyxzREFBc0Q7UUFFbEYsa0RBQWtEO1FBQ2xELGdCQUFXLEdBQWEsRUFBRSxDQUFDO0lBRVgsQ0FBQztJQUVqQixRQUFR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NEJBQ2YsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFDO29CQUNILE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELGdDQUFnQztZQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxDQUFNO1FBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLENBQUM7K0dBeFNVLGdCQUFnQjttR0FBaEIsZ0JBQWdCLHFMQ1I3QixrdVFBNkxNOzs0RkRyTE8sZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLGNBQWM7d0RBS2YsU0FBUztzQkFBakIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IENoYXJ0SGVscGVyIGZyb20gJy4uL2NoYXJ0LWhlbHBlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1heC10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F4LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9heC10YWJsZS5jb21wb25lbnQubGVzcycsICcuLi9jb21tb24tc3R5bGVzLmxlc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEF4VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHRhYmxlRGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbjogYW55O1xyXG4gIEBPdXRwdXQoKSBjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgaXNIZWFkZXJWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgaXNVc2VyU29ydDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICB0YWJsZUhlYWRMaXN0OiBhbnk7XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3Qgb2Ygc3RvcmVzIGluZm9ybWF0aW9uIGZvciB0aGUgc2VsZWN0ZWQgc3RhdGVcclxuICAgKi9cclxuICBpdGVtTGlzdDogYW55O1xyXG5cclxuICBpdGVtc1BlclBhZ2U6IG51bWJlciA9IDA7XHJcbiAgLyoqXHJcbiAgICogVG90YWwgbnVtYmVyIG9mIHN0b3JlcyBpbiBzZWxlY3RlZCBzdGF0ZVxyXG4gICAqL1xyXG4gIHRvdGFsSXRlbXM6IGFueTtcclxuICAvKipcclxuICAgKiBDdXJyZW50IHBhZ2UgZGlzcGxheWVkIGluIHBhZ2luYXRpb25cclxuICAgKi9cclxuICBjdXJyZW50UGFnZTogYW55ID0gMTtcclxuICAvKipcclxuICAgKiBOdW1iZXIgb2Ygc3RvcmVzIHRoYXQgY2FuIGJlIGRpc3BsYXllZCBpbiBlYWNoIHBhZ2VcclxuICAgKi9cclxuICBwYWdlU2l6ZTogYW55ID0gMTA7XHJcbiAgLyoqXHJcbiAgICogU2VsZWN0ZWQgcGFnZSBzdG9yZSBsaXN0XHJcbiAgICovXHJcbiAgY3VycmVudExpc3Q6IGFueTtcclxuICAvKipcclxuICAgKiBTb3J0IGRpcmVjdGlvbiBvZiBzZWxlY3RlZCBjb2x1bW4gIGluIHRoZSB0YWJsZVxyXG4gICAqL1xyXG4gIHNvcnREaXJlY3Rpb246IGFueSA9ICdhc2MnO1xyXG4gIC8qKlxyXG4gICAqIFNlbGVjdGVkIGNvbHVtbiBmb3Igc29ydGluZ1xyXG4gICAqL1xyXG4gIHNvcnRDb2x1bW46IGFueSA9ICcnO1xyXG4gIC8qKlxyXG4gICAqIFNlbGVjdG9yIGZvciBsaXN0ZW5pbmcgdG8gdGhlIGNoYW5nZXMgb2Ygc2VhcmNoIHRleHQgZW50ZXJlZCBpbiB0aGUgaGVhZGVyXHJcbiAgICovXHJcbiAgc2VhcmNoVGV4dEZlYXR1cmUkOiBhbnk7XHJcbiAgLyoqXHJcbiAgICogTWFzdGVyIHN0b3JlIGxpc3QgZm9yIHRoZSBzZWxlY3RlZCBzdGF0ZVxyXG4gICAqL1xyXG4gIG1hc3Rlckxpc3Q6IGFueSA9IFtdO1xyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogYW55ID0ge307XHJcblxyXG4gIGRlZmF1bHRDb25maWd1cmF0aW9uOiBhbnkgPSB7fTtcclxuXHJcbiAgdG90YWxQYWdlczogbnVtYmVyID0gMTtcclxuICBnb1RvUGFnZU51bWJlcjogbnVtYmVyID0gMTsgLy8gRml4ZWQ6IHJlbmFtZWQgZnJvbSBnb1RvUGFnZVZhbHVlIHRvIG1hdGNoIHRlbXBsYXRlXHJcblxyXG4gIC8vIEFkZCBwYWdlc1RvU2hvdyBwcm9wZXJ0eSBmb3IgcGFnaW5hdGlvbiBkaXNwbGF5XHJcbiAgcGFnZXNUb1Nob3c6IG51bWJlcltdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIHRoaXMudGFibGVIZWFkTGlzdCA9IE9iamVjdC5rZXlzKHRoaXMudGFibGVEYXRhLmRhdGFbMF0pO1xyXG4gICAgZm9yICh2YXIgaSBpbiB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uW2ldID0gQ2hhcnRIZWxwZXIuZ2V0VmFsdWVCeUNvbmZpZ3VyYXRpb25UeXBlKFxyXG4gICAgICAgIGksXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbixcclxuICAgICAgICB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tYXN0ZXJMaXN0ID0gWy4uLnNlbGYudGFibGVEYXRhLmRhdGFdO1xyXG4gICAgdGhpcy5pdGVtTGlzdCA9IFsuLi50aGlzLm1hc3Rlckxpc3RdO1xyXG4gICAgdGhpcy50b3RhbEl0ZW1zID0gdGhpcy5pdGVtTGlzdC5sZW5ndGg7XHJcbiAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZXMoKTtcclxuICAgIHRoaXMuZ2VuZXJhdGVQYWdlc1RvU2hvdygpOyAvLyBHZW5lcmF0ZSBwYWdlcyB0byBzaG93XHJcblxyXG4gICAgaWYgKHRoaXMudGFibGVEYXRhLm1ldGFEYXRhLmlzUGFnaW5hdGlvbkhpZGRlbikge1xyXG4gICAgICB0aGlzLmN1cnJlbnRMaXN0ID0gdGhpcy5pdGVtTGlzdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubG9hZFBhZ2UoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRhYmxlRGF0YS5tZXRhRGF0YS5pc0hlYWRlclZpc2libGUgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLmlzSGVhZGVyVmlzaWJsZSA9IHRoaXMudGFibGVEYXRhLm1ldGFEYXRhLmlzSGVhZGVyVmlzaWJsZTtcclxuICB9XHJcblxyXG4gIGxvYWRQYWdlKCkge1xyXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9ICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplO1xyXG4gICAgY29uc3QgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgdGhpcy5wYWdlU2l6ZTtcclxuICAgIHRoaXMuY3VycmVudExpc3QgPSB0aGlzLml0ZW1MaXN0LnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZVRvdGFsUGFnZXMoKSB7XHJcbiAgICB0aGlzLnRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy50b3RhbEl0ZW1zIC8gdGhpcy5wYWdlU2l6ZSk7XHJcbiAgICB0aGlzLmdvVG9QYWdlTnVtYmVyID0gdGhpcy5jdXJyZW50UGFnZTtcclxuICB9XHJcbiAgcHJldmVudE5lZ2F0aXZlKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgLy8gQmxvY2sgY2hhcmFjdGVyczogLSwgKywgZSAoYWxsIGludmFsaWQgZm9yIHBhZ2UgbnVtYmVyKVxyXG4gIGlmIChldmVudC5rZXkgPT09ICctJyB8fCBldmVudC5rZXkgPT09ICcrJyB8fCBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2UnKSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxufVxyXG5cclxuICAvLyBHZW5lcmF0ZSBhcnJheSBvZiBwYWdlIG51bWJlcnMgdG8gc2hvdyBpbiBwYWdpbmF0aW9uXHJcbiAgZ2VuZXJhdGVQYWdlc1RvU2hvdygpIHtcclxuICAgIHRoaXMucGFnZXNUb1Nob3cgPSBbXTtcclxuICAgIGNvbnN0IG1heFBhZ2VzVG9TaG93ID0gNTtcclxuICAgIGxldCBzdGFydFBhZ2UgPSBNYXRoLm1heCgxLCB0aGlzLmN1cnJlbnRQYWdlIC0gTWF0aC5mbG9vcihtYXhQYWdlc1RvU2hvdyAvIDIpKTtcclxuICAgIGxldCBlbmRQYWdlID0gTWF0aC5taW4odGhpcy50b3RhbFBhZ2VzLCBzdGFydFBhZ2UgKyBtYXhQYWdlc1RvU2hvdyAtIDEpO1xyXG4gICAgXHJcbiAgICAvLyBBZGp1c3Qgc3RhcnQgcGFnZSBpZiB3ZSdyZSBuZWFyIHRoZSBlbmRcclxuICAgIGlmIChlbmRQYWdlIC0gc3RhcnRQYWdlICsgMSA8IG1heFBhZ2VzVG9TaG93KSB7XHJcbiAgICAgIHN0YXJ0UGFnZSA9IE1hdGgubWF4KDEsIGVuZFBhZ2UgLSBtYXhQYWdlc1RvU2hvdyArIDEpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBmb3IgKGxldCBpID0gc3RhcnRQYWdlOyBpIDw9IGVuZFBhZ2U7IGkrKykge1xyXG4gICAgICB0aGlzLnBhZ2VzVG9TaG93LnB1c2goaSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblBhZ2luYXRpb25DaGFuZ2UoKSB7XHJcbiAgICB0aGlzLmxvYWRQYWdlKCk7XHJcbiAgICB0aGlzLmdvVG9QYWdlTnVtYmVyID0gdGhpcy5jdXJyZW50UGFnZTtcclxuICAgIHRoaXMuZ2VuZXJhdGVQYWdlc1RvU2hvdygpO1xyXG4gIH1cclxuXHJcbiAgLy8gTmF2aWdhdGlvbiBtZXRob2RzIGZvciBwYWdpbmF0aW9uIGJ1dHRvbnNcclxuICBnb1RvRmlyc3RQYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgIT09IDEpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgIHRoaXMub25QYWdpbmF0aW9uQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnb1RvUHJldmlvdXNQYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiAxKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UtLTtcclxuICAgICAgdGhpcy5vblBhZ2luYXRpb25DaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdvVG9OZXh0UGFnZSgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlIDwgdGhpcy50b3RhbFBhZ2VzKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UrKztcclxuICAgICAgdGhpcy5vblBhZ2luYXRpb25DaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdvVG9MYXN0UGFnZSgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlICE9PSB0aGlzLnRvdGFsUGFnZXMpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMudG90YWxQYWdlcztcclxuICAgICAgdGhpcy5vblBhZ2luYXRpb25DaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdvVG9QYWdlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgaWYgKHBhZ2UgPj0gMSAmJiBwYWdlIDw9IHRoaXMudG90YWxQYWdlcyAmJiBwYWdlICE9PSB0aGlzLmN1cnJlbnRQYWdlKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlO1xyXG4gICAgICB0aGlzLm9uUGFnaW5hdGlvbkNoYW5nZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gRml4ZWQ6IHJlbmFtZWQgbWV0aG9kIHRvIG1hdGNoIHRlbXBsYXRlXHJcbiAgZ29Ub1NwZWNpZmljUGFnZSgpIHtcclxuICAgIGlmICh0aGlzLmdvVG9QYWdlTnVtYmVyID09PSBudWxsIHx8IHRoaXMuZ29Ub1BhZ2VOdW1iZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmdvVG9QYWdlTnVtYmVyID0gdGhpcy5jdXJyZW50UGFnZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhZ2VOdW0gPSBwYXJzZUludCh0aGlzLmdvVG9QYWdlTnVtYmVyLnRvU3RyaW5nKCksIDEwKTtcclxuICAgIFxyXG4gICAgaWYgKGlzTmFOKHBhZ2VOdW0pIHx8IHBhZ2VOdW0gPCAxKSB7XHJcbiAgICAgIHRoaXMuZ29Ub1BhZ2VOdW1iZXIgPSAxO1xyXG4gICAgfSBlbHNlIGlmIChwYWdlTnVtID4gdGhpcy50b3RhbFBhZ2VzKSB7XHJcbiAgICAgIHRoaXMuZ29Ub1BhZ2VOdW1iZXIgPSB0aGlzLnRvdGFsUGFnZXM7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIFVwZGF0ZSBjdXJyZW50IHBhZ2UgYW5kIGxvYWQgZGF0YVxyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMuZ29Ub1BhZ2VOdW1iZXI7XHJcbiAgICB0aGlzLm9uUGFnaW5hdGlvbkNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVOdW1iZXJJbnB1dChldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY2hhckNvZGUgPSBldmVudC53aGljaCA/IGV2ZW50LndoaWNoIDogZXZlbnQua2V5Q29kZTtcclxuICAgIGlmIChjaGFyQ29kZSA+IDMxICYmIChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtblxyXG4gICAqIEBwYXJhbSBpZCAtIGNvbHVtbiBpZFxyXG4gICAqL1xyXG4gIGdldFdpZHRoQnlJZChpZCwgaW5kZXgpIHtcclxuICAgIGlmICh0aGlzLnRhYmxlSGVhZExpc3QubGVuZ3RoID09IDMpIHtcclxuICAgICAgaWYgKGluZGV4ID09IDEpIHJldHVybiAnNjAlJztcclxuICAgICAgZWxzZSByZXR1cm4gJzIwJSc7XHJcbiAgICB9XHJcbiAgICB2YXIgd2lkdGggPSAxMDAgLyB0aGlzLnRhYmxlSGVhZExpc3QubGVuZ3RoO1xyXG4gICAgcmV0dXJuIHdpZHRoICsgJyUnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29ydHMgdGhlIGNvbHVtbiB0aGF0IGlzIGJlaW5nIHBhc3NlZCBhcyB0aGUgcGFyYW1cclxuICAgKiBAcGFyYW0gaWQgLSBDb2x1bW4gaWRcclxuICAgKi9cclxuICBzb3J0QnlDb2x1bW4oaWQpIHtcclxuICAgIGlmIChpZCA9PT0gJ3ZpZXdEZXRhaWxzJyB8fCB0aGlzLnRhYmxlRGF0YS5tZXRhRGF0YS5pc0hlYWRlclNvcnRIaWRkZW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmlzVXNlclNvcnQpIHRoaXMuaXNVc2VyU29ydCA9IHRydWU7XHJcbiAgICBpZiAoaWQgIT09IHRoaXMuc29ydENvbHVtbikge1xyXG4gICAgICB0aGlzLnNvcnRDb2x1bW4gPSBpZDtcclxuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gJ2FzYyc7IC8vIFJlc2V0IHRvIGFzY2VuZGluZyB3aGVuIGNoYW5naW5nIGNvbHVtbnNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnNvcnREaXJlY3Rpb24gPT09ICdhc2MnKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gJ2Rlc2MnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9ICdhc2MnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY29tcGFyZSh2MSwgdjIpIHtcclxuICAgICAgY29uc3QgbnVtMSA9IHBhcnNlRmxvYXQodjEpO1xyXG4gICAgICBjb25zdCBudW0yID0gcGFyc2VGbG9hdCh2Mik7XHJcbiAgICAgIGlmICghaXNOYU4obnVtMSkgJiYgIWlzTmFOKG51bTIpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bTEgLSBudW0yO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB2MSA8IHYyID8gLTEgOiB2MSA+IHYyID8gMSA6IDA7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuaXRlbUxpc3Quc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICBjb25zdCByZXMgPSBjb21wYXJlKGFbaWRdLCBiW2lkXSk7XHJcbiAgICAgIHJldHVybiB0aGlzLnNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gcmVzIDogLXJlcztcclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICAvLyBSZXNldCB0byBmaXJzdCBwYWdlIGFmdGVyIHNvcnRpbmdcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy50b3RhbEl0ZW1zID0gdGhpcy5pdGVtTGlzdC5sZW5ndGg7XHJcbiAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZXMoKTtcclxuICAgIHRoaXMuZ2VuZXJhdGVQYWdlc1RvU2hvdygpO1xyXG4gICAgdGhpcy5sb2FkUGFnZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB3aGV0aGVyIGNvbHVtbiBiZWluZyBwYXNzZWQgYXMgdGhlIHBhcmFtIGlzIGN1cnJlbnRseSBiZWluZyBzb3J0ZWQgb3Igbm90XHJcbiAgICogQHBhcmFtIGlkIGNvbHVtbiBpZFxyXG4gICAqL1xyXG4gIGNoZWNrSWZDb2x1bW5DdXJyZW50bHlCZWluZ1NvcnRlZChpZCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc29ydENvbHVtbiA9PT0gaWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBzb3J0IGRpcmVjdGlvbiB0aGF0IGlzIGJlaW5nIGN1cnJlbnRseSBzb3J0ZWRcclxuICAgKi9cclxuICBnZXRTb3J0RGlyZWN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAnYXJyb3ctdXAnIDogJ2Fycm93LWRvd24nO1xyXG4gIH1cclxuXHJcbiAgb25FbnRlcihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLml0ZW1MaXN0ID0gdGhpcy5tYXN0ZXJMaXN0O1xyXG4gICAgbGV0IHNlYXJjaFRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBcclxuICAgIGlmICh0aGlzLml0ZW1MaXN0KSB7XHJcbiAgICAgIGlmIChzZWFyY2hUZXh0KSB7XHJcbiAgICAgICAgdGhpcy5pdGVtTGlzdCA9IHRoaXMuaXRlbUxpc3QuZmlsdGVyKGZ1bmN0aW9uIG1hdGNoZXMoc3RvcmU6IGFueSkge1xyXG4gICAgICAgICAgbGV0IG1hdGNoID0gZmFsc2U7XHJcbiAgICAgICAgICBzZWxmLnRhYmxlSGVhZExpc3QubWFwKGZ1bmN0aW9uICh0YWJsZUhlYWQpIHtcclxuICAgICAgICAgICAgaWYgKHN0b3JlW3RhYmxlSGVhZF0pIHtcclxuICAgICAgICAgICAgICBsZXQgc2VhcmNoYWJsZVN0cmluZyA9IHN0b3JlW3RhYmxlSGVhZF0gKyAnJztcclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBzZWFyY2hhYmxlU3RyaW5nXHJcbiAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgIC5pbmNsdWRlcyhzZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRjaCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiBtYXRjaDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gUmVzZXQgcGFnaW5hdGlvbiBhZnRlciBzZWFyY2hcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IHRoaXMuaXRlbUxpc3QubGVuZ3RoO1xyXG4gICAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZXMoKTtcclxuICAgICAgdGhpcy5nZW5lcmF0ZVBhZ2VzVG9TaG93KCk7XHJcbiAgICAgIHRoaXMubG9hZFBhZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUNsaWNrKGQ6IGFueSkge1xyXG4gICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZCk7XHJcbiAgfVxyXG59IiwiPCEtLSA8ZGl2IGNsYXNzPVwiaGVhZGVyLWFsdCBsaWItZGlzcGxheS1mbGV4IGxpYi1qdXN0aWZ5LWNvbnRlbnQtc3BhY2UtYmV0d2VlblwiPlxyXG4gIDxsaWItaGVhZGVyLWFsdCBbdGl0bGVdPVwidGFibGVEYXRhLm1ldGFEYXRhLnRpdGxlXCIgKm5nSWY9XCIhaXNIZWFkZXJWaXNpYmxlXCI+PC9saWItaGVhZGVyLWFsdD5cclxuICA8aW5wdXQgdHlwZT1cInRleHRcIiAqbmdJZj1cIiF0YWJsZURhdGEubWV0YURhdGEuaXNTZWFyY2hIaWRkZW5cIiBjbGFzcz1cImZsb2F0LXJpZ2h0IHBhZGRpbmctNSBpbnB1dC1zdHlsZVwiXHJcbiAgICBpZD1cImV4YW1wbGVJbnB1dEVtYWlsMVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIHBsYWNlaG9sZGVyPVwiICBTZWFyY2ggIFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJlbWFpbEhlbHBcIlxyXG4gICAgKGtleXVwKT1cIm9uRW50ZXIoJGV2ZW50KVwiIC8+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwidGFibGUtaGVhZGVyXCI+PC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJ0YWJsZS13cmFwcGVyXCI+XHJcbiAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXJcIj5cclxuICAgIDx0aGVhZCBjbGFzcz1cInRhYmxlLXRoZWFkXCI+XHJcbiAgICAgIDx0ciBjbGFzcz1cInRhYmxlLWhlYWRlclwiPlxyXG4gICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIHRhYmxlSGVhZExpc3Q7IGluZGV4IGFzIGlcIiBjbGFzcz1cImhlYWRlci1jZWxsXCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICF0YWJsZURhdGEubWV0YURhdGEuaXNIZWFkZXJBbGlnbmVkVG9DZW50ZXJcclxuICAgICAgICAgICAgICA/IGkgPT0gdGFibGVIZWFkTGlzdC5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgICAgICA/ICd0ZXh0YWxpZ24tcmlnaHQnXHJcbiAgICAgICAgICAgICAgICA6ICd0ZXh0YWxpZ24tbGVmdCdcclxuICAgICAgICAgICAgICA6ICd0ZXh0YWxpZ24tY2VudGVyJ1xyXG4gICAgICAgICAgXCIgW3N0eWxlLndpZHRoXT1cImdldFdpZHRoQnlJZChoZWFkZXIsIGkpXCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJ0YWJsZURhdGEubWV0YURhdGEuaGVhZGVyQ29sb3JcIlxyXG4gICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYmxlRGF0YS5tZXRhRGF0YS5oZWFkZXJUZXh0Q29sb3JcIiAoY2xpY2spPVwic29ydEJ5Q29sdW1uKGhlYWRlcilcIj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgKCF0YWJsZURhdGEubWV0YURhdGEuaXNGaXJzdENvbHVtbkhlYWRlckhpZGRlbiAmJiBpID09IDApIHx8IGkgPiAwXHJcbiAgICAgICAgICAgIFwiIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICF0YWJsZURhdGEubWV0YURhdGEuaXNIZWFkZXJTb3J0SGlkZGVuXHJcbiAgICAgICAgICAgICAgICA/ICdjdXJzb3ItcG9pbnRlcidcclxuICAgICAgICAgICAgICAgIDogJ2N1cnNvci1kZWZhdWx0J1xyXG4gICAgICAgICAgICBcIj57eyBoZWFkZXIgfX08L3NwYW4+XHJcbiAgICAgICAgICA8aSAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICghaXNVc2VyU29ydCB8fCBjaGVja0lmQ29sdW1uQ3VycmVudGx5QmVpbmdTb3J0ZWQoaGVhZGVyKSkgJiZcclxuICAgICAgICAgICAgICAhdGFibGVEYXRhLm1ldGFEYXRhLmlzSGVhZGVyU29ydEhpZGRlblxyXG4gICAgICAgICAgICBcIiBjbGFzcz1cInNvcnQtaWNvbnMgZmFcIiBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAhaXNVc2VyU29ydFxyXG4gICAgICAgICAgICAgICAgPyAnZmEtc29ydCdcclxuICAgICAgICAgICAgICAgIDogc29ydERpcmVjdGlvbiA9PSAnYXNjJ1xyXG4gICAgICAgICAgICAgICAgPyAnZmEtc29ydC1hc2MnXHJcbiAgICAgICAgICAgICAgICA6ICdmYS1zb3J0LWRlc2MnXHJcbiAgICAgICAgICAgIFwiPjwvaT5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90aGVhZD5cclxuICAgIDx0Ym9keSBjbGFzcz1cInRhYmxlLWJvZHlcIj5cclxuICAgICAgPHRyICpuZ0Zvcj1cImxldCBzdG9yZSBvZiBjdXJyZW50TGlzdFwiIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgdGFibGVEYXRhPy5oaWdobGlnaHRlZFRleHRzPy5pbmNsdWRlcyhzdG9yZVt0YWJsZUhlYWRMaXN0WzBdXSlcclxuICAgICAgICAgICAgPyAnZm9udC13ZWlnaHQtYm9sZCdcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgIFwiPlxyXG4gICAgICAgIDx0ZCAoY2xpY2spPVwiaGFuZGxlQ2xpY2soc3RvcmUpXCIgY2xhc3M9XCJ0YWJsZS1jZWxsXCIgKm5nRm9yPVwibGV0IGhlYWRlciBvZiB0YWJsZUhlYWRMaXN0OyBpbmRleCBhcyBpXCJcclxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJnZXRXaWR0aEJ5SWQoaGVhZGVyLCBpKVwiIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAhdGFibGVEYXRhLm1ldGFEYXRhLmlzQWxsQWxpZ25lZFRvUmlnaHRcclxuICAgICAgICAgICAgICA/IGkgPT0gdGFibGVIZWFkTGlzdC5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgICAgICA/ICd0ZXh0YWxpZ24tcmlnaHQgbGFzdC1jb2x1bW4tY29sb3InXHJcbiAgICAgICAgICAgICAgICA6ICd0ZXh0YWxpZ24tbGVmdCdcclxuICAgICAgICAgICAgICA6ICd0ZXh0YWxpZ24tcmlnaHQnXHJcbiAgICAgICAgICBcIiBbc3R5bGUuY3Vyc29yXT1cIlxyXG4gICAgICAgICAgICB0YWJsZURhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnXHJcbiAgICAgICAgICBcIj5cclxuICAgICAgICAgIDxzcGFuPnt7IHN0b3JlW2hlYWRlcl0gfX08L3NwYW4+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGJvZHk+XHJcbiAgPC90YWJsZT5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwicGFnaW5hdGlvbi1jb250YWluZXJcIiAqbmdJZj1cIml0ZW1MaXN0ICYmIGl0ZW1MaXN0Lmxlbmd0aCAmJiAhdGFibGVEYXRhLm1ldGFEYXRhLmlzUGFnaW5hdGlvbkhpZGRlblwiPlxyXG4gIDxkaXYgY2xhc3M9XCJyZXN1bHRzLXN1bW1hcnlcIj5cclxuICAgIFNob3dpbmcgPGI+e3sgKGN1cnJlbnRQYWdlIC0gMSkgKiBwYWdlU2l6ZSArIDEgfX08L2I+IHRvXHJcbiAgICA8Yj57eyBjdXJyZW50UGFnZSAqIHBhZ2VTaXplID4gdG90YWxJdGVtcyA/IHRvdGFsSXRlbXMgOiBjdXJyZW50UGFnZSAqIHBhZ2VTaXplIH19PC9iPlxyXG4gICAgb2YgPGI+e3sgdG90YWxJdGVtcyB9fTwvYj4gZW50cmllc1xyXG4gIDwvZGl2PlxyXG5cclxuICA8bmdiLXBhZ2luYXRpb24gXHJcbiAgICBbY29sbGVjdGlvblNpemVdPVwidG90YWxJdGVtc1wiIFxyXG4gICAgWyhwYWdlKV09XCJjdXJyZW50UGFnZVwiIFxyXG4gICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCIgXHJcbiAgICBbbWF4U2l6ZV09XCI1XCJcclxuICAgIFtyb3RhdGVdPVwidHJ1ZVwiIFxyXG4gICAgW2JvdW5kYXJ5TGlua3NdPVwidHJ1ZVwiIFxyXG4gICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdpbmF0aW9uQ2hhbmdlKClcIiBcclxuICAgIGNsYXNzPVwic2ItcGFnaW5hdGlvblwiPlxyXG4gIDwvbmdiLXBhZ2luYXRpb24+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJnby10by1wYWdlXCI+XHJcbiAgICA8bGFiZWwgZm9yPVwiZ290b1BhZ2VJbnB1dFwiPkdvIHRvIHBhZ2U8L2xhYmVsPlxyXG4gICAgPGlucHV0IFxyXG4gICAgICBpZD1cImdvdG9QYWdlSW5wdXRcIiBcclxuICAgICAgdHlwZT1cIm51bWJlclwiIFxyXG4gICAgICBbbWluXT1cIjFcIiBcclxuICAgICAgW21heF09XCJ0b3RhbFBhZ2VzXCIgXHJcbiAgICAgIFtuZ01vZGVsXT1cImdvVG9QYWdlVmFsdWVcIlxyXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJnb1RvUGFnZVZhbHVlID0gJGV2ZW50OyBnb1RvUGFnZSgpXCJcclxuICAgICAgKGtleXByZXNzKT1cInZhbGlkYXRlTnVtYmVySW5wdXQoJGV2ZW50KVwiPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4gLS0+XHJcblxyXG5cclxuXHJcbjxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctMTAwXCI+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgIDxsaWItaGVhZGVyLWFsdCBbdGl0bGVdPVwidGFibGVEYXRhLm1ldGFEYXRhLnRpdGxlXCIgKm5nSWY9XCIhaXNIZWFkZXJWaXNpYmxlXCI+PC9saWItaGVhZGVyLWFsdD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKm5nSWY9XCIhdGFibGVEYXRhLm1ldGFEYXRhLmlzU2VhcmNoSGlkZGVuXCJcclxuICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1pbnB1dCBtZWRpdW0tZm9udC1zaXplIHRleHRib3gtYXgtY29tbW9uXCIgaWQ9XCJleGFtcGxlSW5wdXRFbWFpbDFcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgcGxhY2Vob2xkZXI9XCIgIFNlYXJjaCAgXCIgYXJpYS1kZXNjcmliZWRieT1cImVtYWlsSGVscFwiIChrZXl1cCk9XCJvbkVudGVyKCRldmVudClcIiAvPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJwb3B1cC1ib2R5LWZvci1zY3JvbGxcIj5cclxuICA8ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlclwiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlIGJvcmRlclwiPlxyXG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciBhbGlnbi1taWRkbGUgbWItMFwiPlxyXG4gICAgICAgIDx0aGVhZCBjbGFzcz1cInRhYmxlLWRhcmtcIj5cclxuICAgICAgICAgIDx0ciBjbGFzcz1cInRhYmxlLWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGhlYWRlciBvZiB0YWJsZUhlYWRMaXN0OyBpbmRleCBhcyBpXCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICF0YWJsZURhdGEubWV0YURhdGEuaXNIZWFkZXJBbGlnbmVkVG9DZW50ZXJcclxuICAgICAgICAgICAgICA/IGkgPT0gdGFibGVIZWFkTGlzdC5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgICAgICA/ICd0ZXh0YWxpZ24tcmlnaHQnXHJcbiAgICAgICAgICAgICAgICA6ICd0ZXh0YWxpZ24tbGVmdCdcclxuICAgICAgICAgICAgICA6ICd0ZXh0YWxpZ24tY2VudGVyJ1xyXG4gICAgICAgICAgXCIgW3N0eWxlLndpZHRoXT1cImdldFdpZHRoQnlJZChoZWFkZXIsIGkpXCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJ0YWJsZURhdGEubWV0YURhdGEuaGVhZGVyQ29sb3JcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJsZURhdGEubWV0YURhdGEuaGVhZGVyVGV4dENvbG9yXCIgKGNsaWNrKT1cInNvcnRCeUNvbHVtbihoZWFkZXIpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJcclxuICAgICAgICAgICAgICAoIXRhYmxlRGF0YS5tZXRhRGF0YS5pc0ZpcnN0Q29sdW1uSGVhZGVySGlkZGVuICYmIGkgPT0gMCkgfHwgaSA+IDBcclxuICAgICAgICAgICAgXCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgIXRhYmxlRGF0YS5tZXRhRGF0YS5pc0hlYWRlclNvcnRIaWRkZW5cclxuICAgICAgICAgICAgICAgID8gJ2N1cnNvci1wb2ludGVyJ1xyXG4gICAgICAgICAgICAgICAgOiAnY3Vyc29yLWRlZmF1bHQnXHJcbiAgICAgICAgICAgIFwiPnt7IGhlYWRlciB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8aSAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICghaXNVc2VyU29ydCB8fCBjaGVja0lmQ29sdW1uQ3VycmVudGx5QmVpbmdTb3J0ZWQoaGVhZGVyKSkgJiZcclxuICAgICAgICAgICAgICAhdGFibGVEYXRhLm1ldGFEYXRhLmlzSGVhZGVyU29ydEhpZGRlblxyXG4gICAgICAgICAgICBcIiBjbGFzcz1cInNvcnQtaWNvbnMgZmFcIiBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAhaXNVc2VyU29ydFxyXG4gICAgICAgICAgICAgICAgPyAnZmEtc29ydCdcclxuICAgICAgICAgICAgICAgIDogc29ydERpcmVjdGlvbiA9PSAnYXNjJ1xyXG4gICAgICAgICAgICAgICAgPyAnZmEtc29ydC1hc2MnXHJcbiAgICAgICAgICAgICAgICA6ICdmYS1zb3J0LWRlc2MnXHJcbiAgICAgICAgICAgIFwiPjwvaT5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90aGVhZD5cclxuXHJcbiAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBzdG9yZSBvZiBjdXJyZW50TGlzdFwiIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgdGFibGVEYXRhPy5oaWdobGlnaHRlZFRleHRzPy5pbmNsdWRlcyhzdG9yZVt0YWJsZUhlYWRMaXN0WzBdXSlcclxuICAgICAgICAgICAgPyAnZm9udC13ZWlnaHQtYm9sZCdcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgIFwiPlxyXG4gICAgICAgICAgICA8dGQgKGNsaWNrKT1cImhhbmRsZUNsaWNrKHN0b3JlKVwiIGNsYXNzPVwidGFibGUtY2VsbFwiICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgdGFibGVIZWFkTGlzdDsgaW5kZXggYXMgaVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImdldFdpZHRoQnlJZChoZWFkZXIsIGkpXCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICF0YWJsZURhdGEubWV0YURhdGEuaXNBbGxBbGlnbmVkVG9SaWdodFxyXG4gICAgICAgICAgICAgID8gaSA9PSB0YWJsZUhlYWRMaXN0Lmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgICAgID8gJ3RleHRhbGlnbi1yaWdodCBsYXN0LWNvbHVtbi1jb2xvcidcclxuICAgICAgICAgICAgICAgIDogJ3RleHRhbGlnbi1sZWZ0J1xyXG4gICAgICAgICAgICAgIDogJ3RleHRhbGlnbi1yaWdodCdcclxuICAgICAgICAgIFwiIFtzdHlsZS5jdXJzb3JdPVwiXHJcbiAgICAgICAgICAgIHRhYmxlRGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd24gPyAncG9pbnRlcicgOiAnZGVmYXVsdCdcclxuICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IHN0b3JlW2hlYWRlcl0gfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICA8L3Rib2R5PlxyXG4gICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFnaW5hdGlvbi1iYXIgbXQtMFwiPlxyXG4gICAgICA8c3Bhbj5HbyBUbzwvc3Bhbj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cInBhZ2UtaW5wdXRcIiBtaW49XCIxXCIgW21heF09XCJ0b3RhbFBhZ2VzXCIgKGtleXVwLmVudGVyKT1cImdvVG9TcGVjaWZpY1BhZ2UoKVwiIFsobmdNb2RlbCldPVwiZ29Ub1BhZ2VOdW1iZXJcIlxyXG4gICAgICAgIChrZXlwcmVzcyk9XCJwcmV2ZW50TmVnYXRpdmUoJGV2ZW50KVwiXHJcbiAgICAgID5cclxuXHJcbiAgICAgIDxzcGFuPiB7eyAoY3VycmVudExpc3QubGVuZ3RoID4gMCA/ICgoY3VycmVudFBhZ2UgLSAxKSAqIHBhZ2VTaXplICsgMSkgOiAwKSB9fSAtXHJcbiAgICAgICAge3sgKChjdXJyZW50UGFnZSAtIDEpICogcGFnZVNpemUgKyBjdXJyZW50TGlzdC5sZW5ndGgpIH19IG9mXHJcbiAgICAgICAge3sgdG90YWxJdGVtcyB8IG51bWJlciB9fTwvc3Bhbj5cclxuXHJcbiAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSAxXCIgKGNsaWNrKT1cImdvVG9GaXJzdFBhZ2UoKVwiIGNsYXNzPVwicGFnaW5hdGlvbi1idG5cIiB0aXRsZT1cIkZpcnN0IFBhZ2VcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWNoZXZyb24tZG91YmxlLWxlZnRcIj48L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gMVwiIChjbGljayk9XCJnb1RvUHJldmlvdXNQYWdlKClcIiBjbGFzcz1cInBhZ2luYXRpb24tYnRuXCIgdGl0bGU9XCJQcmV2aW91cyBQYWdlXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1jaGV2cm9uLWxlZnRcIj48L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gdG90YWxQYWdlc1wiIChjbGljayk9XCJnb1RvTmV4dFBhZ2UoKVwiIGNsYXNzPVwicGFnaW5hdGlvbi1idG5cIiB0aXRsZT1cIk5leHQgUGFnZVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiYmkgYmktY2hldnJvbi1yaWdodFwiPjwvaT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSB0b3RhbFBhZ2VzXCIgKGNsaWNrKT1cImdvVG9MYXN0UGFnZSgpXCIgY2xhc3M9XCJwYWdpbmF0aW9uLWJ0blwiIHRpdGxlPVwiTGFzdCBQYWdlXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1jaGV2cm9uLWRvdWJsZS1yaWdodFwiPjwvaT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXgtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2F4LXRhYmxlL2F4LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9heC10YWJsZS9heC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDOzs7OztBQU8xQyxNQUFNLE9BQU8sZ0JBQWdCO0lBMEIzQjtRQXZCVSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUUvQyxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRW5CLGtCQUFhLEdBQWEsRUFBRSxDQUFDO1FBQzdCLGVBQVUsR0FBVSxFQUFFLENBQUM7UUFDdkIsYUFBUSxHQUFVLEVBQUUsQ0FBQztRQUNyQixnQkFBVyxHQUFVLEVBQUUsQ0FBQztRQUV4QixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUNuQixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUUzQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGtCQUFhLEdBQXdCLEVBQUUsQ0FBQztRQUV4Qyx1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFDN0IseUJBQW9CLEdBQVEsRUFBRSxDQUFDO0lBRWhCLENBQUM7SUFFaEIsUUFBUTtR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QUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFlBQVksQ0FBQyxDQUFTLEVBQUUsS0FBYTtRQUNuQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQztJQUMvQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQVE7UUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQzsrR0F2TlUsZ0JBQWdCO21HQUFoQixnQkFBZ0IscUxDUjdCLHUwSkErSE07OzRGRHZITyxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0UsY0FBYzt3REFLZixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSAnLi4vY2hhcnQtaGVscGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWF4LXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXgtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2F4LXRhYmxlLmNvbXBvbmVudC5sZXNzJywgJy4uL2NvbW1vbi1zdHlsZXMubGVzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXhUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgdGFibGVEYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgaXNIZWFkZXJWaXNpYmxlID0gdHJ1ZTtcclxuICBpc1VzZXJTb3J0ID0gZmFsc2U7XHJcblxyXG4gIHRhYmxlSGVhZExpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgbWFzdGVyTGlzdDogYW55W10gPSBbXTtcclxuICBpdGVtTGlzdDogYW55W10gPSBbXTtcclxuICBjdXJyZW50TGlzdDogYW55W10gPSBbXTtcclxuXHJcbiAgcGFnZVNpemUgPSAxMDtcclxuICBjdXJyZW50UGFnZSA9IDE7XHJcbiAgdG90YWxJdGVtcyA9IDA7XHJcbiAgdG90YWxQYWdlcyA9IDE7XHJcbiAgZ29Ub1BhZ2VOdW1iZXIgPSAxO1xyXG4gIHBhZ2VzVG9TaG93OiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICBzb3J0Q29sdW1uID0gJyc7XHJcbiAgc29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgfCAnJyA9ICcnO1xyXG5cclxuICBjaGFydENvbmZpZ3VyYXRpb246IGFueSA9IHt9O1xyXG4gIGRlZmF1bHRDb25maWd1cmF0aW9uOiBhbnkgPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy50YWJsZURhdGEgfHwgIXRoaXMudGFibGVEYXRhLmRhdGE/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6ZVRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVUYWJsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMudGFibGVIZWFkTGlzdCA9IE9iamVjdC5rZXlzKHRoaXMudGFibGVEYXRhLmRhdGFbMF0pO1xyXG4gICAgdGhpcy5zZXR1cENoYXJ0Q29uZmlndXJhdGlvbigpO1xyXG4gICAgdGhpcy5tYXN0ZXJMaXN0ID0gWy4uLnRoaXMudGFibGVEYXRhLmRhdGFdO1xyXG4gICAgdGhpcy5pdGVtTGlzdCA9IFsuLi50aGlzLm1hc3Rlckxpc3RdO1xyXG4gICAgdGhpcy50b3RhbEl0ZW1zID0gdGhpcy5pdGVtTGlzdC5sZW5ndGg7XHJcblxyXG4gICAgdGhpcy5jYWxjdWxhdGVUb3RhbFBhZ2VzKCk7XHJcbiAgICB0aGlzLmdlbmVyYXRlUGFnZXNUb1Nob3coKTtcclxuICAgIHRoaXMuc2V0SGVhZGVyVmlzaWJpbGl0eSgpO1xyXG4gICAgdGhpcy5sb2FkUGFnZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cENoYXJ0Q29uZmlndXJhdGlvbigpOiB2b2lkIHtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb25ba2V5XSA9IENoYXJ0SGVscGVyLmdldFZhbHVlQnlDb25maWd1cmF0aW9uVHlwZShcclxuICAgICAgICBrZXksXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbixcclxuICAgICAgICB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRIZWFkZXJWaXNpYmlsaXR5KCk6IHZvaWQge1xyXG4gICAgY29uc3QgbWV0YSA9IHRoaXMudGFibGVEYXRhLm1ldGFEYXRhO1xyXG4gICAgaWYgKG1ldGEuaXNIZWFkZXJWaXNpYmxlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSBtZXRhLmlzSGVhZGVyVmlzaWJsZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZFBhZ2UoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50YWJsZURhdGEubWV0YURhdGEuaXNQYWdpbmF0aW9uSGlkZGVuKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudExpc3QgPSB0aGlzLml0ZW1MaXN0O1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhcnQgPSAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZTtcclxuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZTtcclxuICAgIHRoaXMuY3VycmVudExpc3QgPSB0aGlzLml0ZW1MaXN0LnNsaWNlKHN0YXJ0LCBlbmQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVUb3RhbFBhZ2VzKCk6IHZvaWQge1xyXG4gICAgdGhpcy50b3RhbFBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWxJdGVtcyAvIHRoaXMucGFnZVNpemUpO1xyXG4gICAgdGhpcy5nb1RvUGFnZU51bWJlciA9IHRoaXMuY3VycmVudFBhZ2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlUGFnZXNUb1Nob3coKTogdm9pZCB7XHJcbiAgICBjb25zdCBtYXhQYWdlc1RvU2hvdyA9IDU7XHJcbiAgICBsZXQgc3RhcnQgPSBNYXRoLm1heCgxLCB0aGlzLmN1cnJlbnRQYWdlIC0gTWF0aC5mbG9vcihtYXhQYWdlc1RvU2hvdyAvIDIpKTtcclxuICAgIGxldCBlbmQgPSBNYXRoLm1pbih0aGlzLnRvdGFsUGFnZXMsIHN0YXJ0ICsgbWF4UGFnZXNUb1Nob3cgLSAxKTtcclxuXHJcbiAgICBpZiAoZW5kIC0gc3RhcnQgKyAxIDwgbWF4UGFnZXNUb1Nob3cpIHtcclxuICAgICAgc3RhcnQgPSBNYXRoLm1heCgxLCBlbmQgLSBtYXhQYWdlc1RvU2hvdyArIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnZXNUb1Nob3cgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBlbmQgLSBzdGFydCArIDEgfSwgKF8sIGkpID0+IHN0YXJ0ICsgaSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZnJlc2hQYWdpbmF0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkUGFnZSgpO1xyXG4gICAgdGhpcy5nb1RvUGFnZU51bWJlciA9IHRoaXMuY3VycmVudFBhZ2U7XHJcbiAgICB0aGlzLmdlbmVyYXRlUGFnZXNUb1Nob3coKTtcclxuICB9XHJcblxyXG4gIGdvVG9GaXJzdFBhZ2UoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSAhPT0gMSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgICAgdGhpcy5yZWZyZXNoUGFnaW5hdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ29Ub1ByZXZpb3VzUGFnZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID4gMSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLS07XHJcbiAgICAgIHRoaXMucmVmcmVzaFBhZ2luYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdvVG9OZXh0UGFnZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlIDwgdGhpcy50b3RhbFBhZ2VzKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UrKztcclxuICAgICAgdGhpcy5yZWZyZXNoUGFnaW5hdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ29Ub0xhc3RQYWdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgIT09IHRoaXMudG90YWxQYWdlcykge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy50b3RhbFBhZ2VzO1xyXG4gICAgICB0aGlzLnJlZnJlc2hQYWdpbmF0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnb1RvU3BlY2lmaWNQYWdlKCk6IHZvaWQge1xyXG4gICAgbGV0IHBhZ2VOdW0gPSBOdW1iZXIodGhpcy5nb1RvUGFnZU51bWJlcik7XHJcblxyXG4gICAgaWYgKGlzTmFOKHBhZ2VOdW0pIHx8IHBhZ2VOdW0gPCAxKSBwYWdlTnVtID0gMTtcclxuICAgIGlmIChwYWdlTnVtID4gdGhpcy50b3RhbFBhZ2VzKSBwYWdlTnVtID0gdGhpcy50b3RhbFBhZ2VzO1xyXG5cclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlTnVtO1xyXG4gICAgdGhpcy5yZWZyZXNoUGFnaW5hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHJldmVudE5lZ2F0aXZlKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnZhbGlkS2V5cyA9IFsnLScsICcrJywgJ2UnXTtcclxuICAgIGlmIChpbnZhbGlkS2V5cy5pbmNsdWRlcyhldmVudC5rZXkudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNvcnRCeUNvbHVtbihpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBtZXRhID0gdGhpcy50YWJsZURhdGEubWV0YURhdGE7XHJcbiAgICBpZiAoaWQgPT09ICd2aWV3RGV0YWlscycgfHwgbWV0YS5pc0hlYWRlclNvcnRIaWRkZW4pIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmlzVXNlclNvcnQgPSB0cnVlO1xyXG5cclxuICAgIGlmIChpZCAhPT0gdGhpcy5zb3J0Q29sdW1uKSB7XHJcbiAgICAgIHRoaXMuc29ydENvbHVtbiA9IGlkO1xyXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSAnYXNjJztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zb3J0RGlyZWN0aW9uID09PSAnYXNjJykge1xyXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSAnZGVzYyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlc2V0U29ydCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zb3J0SXRlbUxpc3QoKTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy5yZWZyZXNoUGFnaW5hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzb3J0SXRlbUxpc3QoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb21wYXJlID0gKGE6IGFueSwgYjogYW55KTogbnVtYmVyID0+IHtcclxuICAgICAgY29uc3QgbnVtQSA9IHBhcnNlRmxvYXQoYSk7XHJcbiAgICAgIGNvbnN0IG51bUIgPSBwYXJzZUZsb2F0KGIpO1xyXG4gICAgICBpZiAoIWlzTmFOKG51bUEpICYmICFpc05hTihudW1CKSkgcmV0dXJuIG51bUEgLSBudW1CO1xyXG4gICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuaXRlbUxpc3Quc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBjb21wYXJlKGFbdGhpcy5zb3J0Q29sdW1uXSwgYlt0aGlzLnNvcnRDb2x1bW5dKTtcclxuICAgICAgcmV0dXJuIHRoaXMuc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyByZXN1bHQgOiAtcmVzdWx0O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0U29ydCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc29ydENvbHVtbiA9ICcnO1xyXG4gICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gJyc7XHJcbiAgICB0aGlzLml0ZW1MaXN0ID0gWy4uLnRoaXMubWFzdGVyTGlzdF07XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMucmVmcmVzaFBhZ2luYXRpb24oKTtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZDb2x1bW5DdXJyZW50bHlCZWluZ1NvcnRlZChpZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zb3J0Q29sdW1uID09PSBpZDtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlYXJjaFRleHQgPSAoZXZlbnQudGFyZ2V0LnZhbHVlIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIHRoaXMuaXRlbUxpc3QgPSBzZWFyY2hUZXh0XHJcbiAgICAgID8gdGhpcy5tYXN0ZXJMaXN0LmZpbHRlcihyb3cgPT5cclxuICAgICAgICAgIHRoaXMudGFibGVIZWFkTGlzdC5zb21lKFxyXG4gICAgICAgICAgICBjb2wgPT4gcm93W2NvbF0/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXh0KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgOiBbLi4udGhpcy5tYXN0ZXJMaXN0XTtcclxuXHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMudG90YWxJdGVtcyA9IHRoaXMuaXRlbUxpc3QubGVuZ3RoO1xyXG4gICAgdGhpcy5jYWxjdWxhdGVUb3RhbFBhZ2VzKCk7XHJcbiAgICB0aGlzLnJlZnJlc2hQYWdpbmF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBnZXRXaWR0aEJ5SWQoXzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLnRhYmxlSGVhZExpc3QubGVuZ3RoID09PSAzKSB7XHJcbiAgICAgIHJldHVybiBpbmRleCA9PT0gMSA/ICc2MCUnIDogJzIwJSc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7MTAwIC8gdGhpcy50YWJsZUhlYWRMaXN0Lmxlbmd0aH0lYDtcclxuICB9XHJcblxyXG4gIGhhbmRsZUNsaWNrKHJvdzogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChyb3cpO1xyXG4gIH1cclxufSIsIjxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctMTAwXCI+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgIDxsaWItaGVhZGVyLWFsdCBbdGl0bGVdPVwidGFibGVEYXRhLm1ldGFEYXRhLnRpdGxlXCIgKm5nSWY9XCIhaXNIZWFkZXJWaXNpYmxlXCI+PC9saWItaGVhZGVyLWFsdD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGlucHV0XHJcbiAgICAqbmdJZj1cIiF0YWJsZURhdGEubWV0YURhdGEuaXNTZWFyY2hIaWRkZW5cIlxyXG4gICAgdHlwZT1cInRleHRcIlxyXG4gICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWlucHV0IG1lZGl1bS1mb250LXNpemUgdGV4dGJveC1heC1jb21tb25cIlxyXG4gICAgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIlxyXG4gICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgIChrZXl1cCk9XCJvblNlYXJjaCgkZXZlbnQpXCJcclxuICAvPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJwb3B1cC1ib2R5LWZvci1zY3JvbGxcIj5cclxuICA8ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmUgYm9yZGVyXCI+XHJcbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIGFsaWduLW1pZGRsZSBtYi0wXCI+XHJcbiAgICAgICAgPHRoZWFkIGNsYXNzPVwidGFibGUtZGFya1wiPlxyXG4gICAgICAgICAgPHRyIGNsYXNzPVwidGFibGUtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgdGFibGVIZWFkTGlzdDsgaW5kZXggYXMgaVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNvcnRCeUNvbHVtbihoZWFkZXIpXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICF0YWJsZURhdGEubWV0YURhdGEuaXNIZWFkZXJBbGlnbmVkVG9DZW50ZXJcclxuICAgICAgICAgICAgICAgICAgPyBpID09PSB0YWJsZUhlYWRMaXN0Lmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgICAgICAgICA/ICd0ZXh0YWxpZ24tcmlnaHQnXHJcbiAgICAgICAgICAgICAgICAgICAgOiAndGV4dGFsaWduLWxlZnQnXHJcbiAgICAgICAgICAgICAgICAgIDogJ3RleHRhbGlnbi1jZW50ZXInXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiZ2V0V2lkdGhCeUlkKGhlYWRlciwgaSlcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwidGFibGVEYXRhLm1ldGFEYXRhLmhlYWRlckNvbG9yXCJcclxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFibGVEYXRhLm1ldGFEYXRhLmhlYWRlclRleHRDb2xvclwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIoIXRhYmxlRGF0YS5tZXRhRGF0YS5pc0ZpcnN0Q29sdW1uSGVhZGVySGlkZGVuICYmIGkgPT09IDApIHx8IGkgPiAwXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICAhdGFibGVEYXRhLm1ldGFEYXRhLmlzSGVhZGVyU29ydEhpZGRlbiA/ICdjdXJzb3ItcG9pbnRlcicgOiAnY3Vyc29yLWRlZmF1bHQnXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IGhlYWRlciB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY2hlY2tJZkNvbHVtbkN1cnJlbnRseUJlaW5nU29ydGVkKGhlYWRlcikgfHwgIWlzVXNlclNvcnRcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzb3J0LWljb25zIGZhXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICBzb3J0Q29sdW1uID09PSBoZWFkZXJcclxuICAgICAgICAgICAgICAgICAgICA/IChzb3J0RGlyZWN0aW9uID09PSAnYXNjJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdmYS1zb3J0LWFzYydcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0RGlyZWN0aW9uID09PSAnZGVzYydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdmYS1zb3J0LWRlc2MnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZmEtc29ydCcpXHJcbiAgICAgICAgICAgICAgICAgICAgOiAnZmEtc29ydCdcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90aGVhZD5cclxuXHJcbiAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgPHRyXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCByb3cgb2YgY3VycmVudExpc3RcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ0YWJsZURhdGE/LmhpZ2hsaWdodGVkVGV4dHM/LmluY2x1ZGVzKHJvd1t0YWJsZUhlYWRMaXN0WzBdXSkgPyAnZm9udC13ZWlnaHQtYm9sZCcgOiAnJ1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgdGFibGVIZWFkTGlzdDsgaW5kZXggYXMgaVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKHJvdylcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtY2VsbFwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImdldFdpZHRoQnlJZChoZWFkZXIsIGkpXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICF0YWJsZURhdGEubWV0YURhdGEuaXNBbGxBbGlnbmVkVG9SaWdodFxyXG4gICAgICAgICAgICAgICAgICA/IGkgPT09IHRhYmxlSGVhZExpc3QubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICAgICAgICAgID8gJ3RleHRhbGlnbi1yaWdodCBsYXN0LWNvbHVtbi1jb2xvcidcclxuICAgICAgICAgICAgICAgICAgICA6ICd0ZXh0YWxpZ24tbGVmdCdcclxuICAgICAgICAgICAgICAgICAgOiAndGV4dGFsaWduLXJpZ2h0J1xyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmN1cnNvcl09XCJ0YWJsZURhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IHJvd1toZWFkZXJdIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3Rib2R5PlxyXG4gICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFnaW5hdGlvbi1iYXIgbXQtMFwiPlxyXG4gICAgICA8c3Bhbj5HbyBUbzwvc3Bhbj5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgY2xhc3M9XCJwYWdlLWlucHV0XCJcclxuICAgICAgICBtaW49XCIxXCJcclxuICAgICAgICBbbWF4XT1cInRvdGFsUGFnZXNcIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwiZ29Ub1BhZ2VOdW1iZXJcIlxyXG4gICAgICAgIChrZXlwcmVzcyk9XCJwcmV2ZW50TmVnYXRpdmUoJGV2ZW50KVwiXHJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cImdvVG9TcGVjaWZpY1BhZ2UoKVwiXHJcbiAgICAgIC8+XHJcblxyXG4gICAgICA8c3Bhbj5cclxuICAgICAgICB7eyBjdXJyZW50TGlzdC5sZW5ndGggPiAwID8gKGN1cnJlbnRQYWdlIC0gMSkgKiBwYWdlU2l6ZSArIDEgOiAwIH19IC1cclxuICAgICAgICB7eyAoY3VycmVudFBhZ2UgLSAxKSAqIHBhZ2VTaXplICsgY3VycmVudExpc3QubGVuZ3RoIH19IG9mIHt7IHRvdGFsSXRlbXMgfCBudW1iZXIgfX1cclxuICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IDFcIiAoY2xpY2spPVwiZ29Ub0ZpcnN0UGFnZSgpXCIgY2xhc3M9XCJwYWdpbmF0aW9uLWJ0blwiIHRpdGxlPVwiRmlyc3QgUGFnZVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiYmkgYmktY2hldnJvbi1kb3VibGUtbGVmdFwiPjwvaT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSAxXCIgKGNsaWNrKT1cImdvVG9QcmV2aW91c1BhZ2UoKVwiIGNsYXNzPVwicGFnaW5hdGlvbi1idG5cIiB0aXRsZT1cIlByZXZpb3VzIFBhZ2VcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWNoZXZyb24tbGVmdFwiPjwvaT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IHRvdGFsUGFnZXNcIlxyXG4gICAgICAgIChjbGljayk9XCJnb1RvTmV4dFBhZ2UoKVwiXHJcbiAgICAgICAgY2xhc3M9XCJwYWdpbmF0aW9uLWJ0blwiXHJcbiAgICAgICAgdGl0bGU9XCJOZXh0IFBhZ2VcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1jaGV2cm9uLXJpZ2h0XCI+PC9pPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gdG90YWxQYWdlc1wiXHJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9MYXN0UGFnZSgpXCJcclxuICAgICAgICBjbGFzcz1cInBhZ2luYXRpb24tYnRuXCJcclxuICAgICAgICB0aXRsZT1cIkxhc3QgUGFnZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWNoZXZyb24tZG91YmxlLXJpZ2h0XCI+PC9pPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=