cps-ui-kit 0.135.0 → 0.136.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/esm2020/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +3 -3
  2. package/esm2020/lib/components/cps-datepicker/cps-datepicker.component.mjs +3 -3
  3. package/esm2020/lib/components/cps-select/cps-select.component.mjs +3 -3
  4. package/esm2020/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +79 -0
  5. package/esm2020/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +344 -0
  6. package/esm2020/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +120 -0
  7. package/esm2020/lib/components/cps-table/cps-table.component.mjs +3 -3
  8. package/esm2020/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +2 -2
  9. package/esm2020/lib/components/cps-table/directives/cps-table-column-sortable.directive.mjs +5 -3
  10. package/esm2020/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +3 -3
  11. package/esm2020/lib/components/cps-tree-select/cps-tree-select.component.mjs +3 -3
  12. package/esm2020/lib/components/cps-tree-table/cps-tree-table.component.mjs +279 -110
  13. package/esm2020/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.mjs +2 -2
  14. package/esm2020/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.mjs +4 -3
  15. package/esm2020/lib/components/cps-tree-table/directives/cps-tree-table-header-selectable.directive.mjs +2 -1
  16. package/esm2020/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.mjs +2 -1
  17. package/esm2020/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +2 -1
  18. package/fesm2015/cps-ui-kit.mjs +529 -325
  19. package/fesm2015/cps-ui-kit.mjs.map +1 -1
  20. package/fesm2020/cps-ui-kit.mjs +520 -321
  21. package/fesm2020/cps-ui-kit.mjs.map +1 -1
  22. package/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.d.ts +24 -0
  23. package/lib/components/cps-table/{table-column-filter → components/internal/table-column-filter}/table-column-filter.component.d.ts +6 -3
  24. package/lib/components/cps-table/{table-column-filter → components/internal}/table-column-filter-constraint/table-column-filter-constraint.component.d.ts +3 -3
  25. package/lib/components/cps-table/directives/cps-table-column-filter.directive.d.ts +1 -1
  26. package/lib/components/cps-table/directives/cps-table-column-sortable.directive.d.ts +3 -2
  27. package/lib/components/cps-tree-table/cps-tree-table.component.d.ts +22 -14
  28. package/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.d.ts +1 -1
  29. package/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.d.ts +2 -2
  30. package/package.json +1 -1
  31. package/styles/_colors.scss +2 -0
  32. package/esm2020/lib/components/cps-table/table-column-filter/table-column-filter-constraint/table-column-filter-constraint.component.mjs +0 -120
  33. package/esm2020/lib/components/cps-table/table-column-filter/table-column-filter.component.mjs +0 -322
  34. package/esm2020/lib/components/cps-tree-table/tree-table-sort-icon/tree-table-sort-icon.component.mjs +0 -71
  35. package/lib/components/cps-tree-table/tree-table-sort-icon/tree-table-sort-icon.component.d.ts +0 -21
@@ -18,6 +18,10 @@ import { CpsTreeTableColumnSortableDirective } from './directives/cps-tree-table
18
18
  import { TreeTableUnsortDirective } from './directives/internal/tree-table-unsort.directive';
19
19
  import { TableRowMenuComponent } from '../cps-table/table-row-menu/table-row-menu.component';
20
20
  import { convertSize } from '../../utils/internal/size-utils';
21
+ import { CpsTreeTableHeaderSelectableDirective } from './directives/cps-tree-table-header-selectable.directive';
22
+ import { CpsTreeTableRowSelectableDirective } from './directives/cps-tree-table-row-selectable.directive';
23
+ import { CpsTreetableRowTogglerDirective } from './directives/cps-tree-table-row-toggler.directive';
24
+ import { fromEvent } from 'rxjs';
21
25
  import * as i0 from "@angular/core";
22
26
  import * as i1 from "@angular/forms";
23
27
  import * as i2 from "@angular/common";
@@ -36,6 +40,11 @@ export class CpsTreeTableComponent {
36
40
  this.colFieldName = 'field';
37
41
  this.minWidth = '';
38
42
  this.minWidthForBodyOnly = true;
43
+ /**
44
+ * Whether the cell widths scale according to their content or not.
45
+ * @group Props
46
+ */
47
+ this.autoLayout = true;
39
48
  this.striped = true;
40
49
  this.bordered = true;
41
50
  this.size = 'normal';
@@ -111,22 +120,23 @@ export class CpsTreeTableComponent {
111
120
  this.rowOptions = [];
112
121
  this.selectedRows = [];
113
122
  this.virtualScrollItemSize = 0;
114
- this.defScrollHeightPx = 0;
115
- this.defScrollHeightPxInitial = 0;
116
123
  this.defScrollHeight = '';
117
- this.scrollbarWidth = 0;
118
- this.scrollbarVisible = true;
119
- this.resizeObserver = new ResizeObserver((entries) => {
124
+ this._defScrollHeightPx = 0;
125
+ this._defScrollHeightPxInitial = 0;
126
+ this._scrollbarWidth = 0;
127
+ this._scrollbarVisible = true;
128
+ this._needRecalcAutoLayout = true;
129
+ this._resizeObserver = new ResizeObserver((entries) => {
120
130
  entries.forEach((entry) => {
121
131
  const body = entry.target;
122
- this.scrollbarVisible = body.scrollHeight > body.clientHeight;
123
- if (this.scrollbarVisible && this.virtualScroll)
124
- this.scrollableBody.style.setProperty('overflow', 'auto', 'important');
125
- let wScroll = this.scrollbarVisible ? this.scrollbarWidth : 0;
132
+ this._scrollbarVisible = body.scrollHeight > body.clientHeight;
133
+ if (this._scrollbarVisible && this.virtualScroll)
134
+ this._scrollableBody.style.setProperty('overflow', 'auto', 'important');
135
+ let wScroll = this._scrollbarVisible ? this._scrollbarWidth : 0;
126
136
  if (wScroll > 0)
127
137
  wScroll -= 1;
128
- this.headerBox.style.paddingRight = `${wScroll}px`;
129
- this.headerBox.style.borderRight =
138
+ this._headerBox.style.paddingRight = `${wScroll}px`;
139
+ this._headerBox.style.borderRight =
130
140
  wScroll > 0 ? '1px solid #d7d5d5' : 'unset';
131
141
  });
132
142
  });
@@ -142,7 +152,7 @@ export class CpsTreeTableComponent {
142
152
  if (this.virtualScroll) {
143
153
  window.addEventListener('resize', this._onWindowResize.bind(this));
144
154
  if (this.defScrollHeight && this.defScrollHeight !== 'flex') {
145
- this.defScrollHeightPx = parseInt(this.scrollHeight, 10);
155
+ this._defScrollHeightPx = parseInt(this.scrollHeight, 10);
146
156
  }
147
157
  }
148
158
  if (this.paginator) {
@@ -169,28 +179,182 @@ export class CpsTreeTableComponent {
169
179
  }
170
180
  ngAfterViewInit() {
171
181
  this._setMinWidthOverall();
172
- this.scrollableBody = this.primengTreeTable.el.nativeElement.querySelector('.p-treetable-scrollable-body');
173
- if (this.scrollableBody) {
182
+ this._scrollableBody = this.primengTreeTable.el.nativeElement.querySelector('.p-treetable-scrollable-body');
183
+ if (this._scrollableBody) {
174
184
  if (this.minWidthForBodyOnly && this.minWidth) {
175
- const table = this.scrollableBody.querySelector('table');
185
+ const table = this._scrollableBody.querySelector('table');
176
186
  if (table)
177
187
  table.style.minWidth = this.minWidth;
178
188
  }
179
- if (this.virtualScroll && this.defScrollHeight === 'flex') {
180
- this.defScrollHeightPx = this.scrollableBody.clientHeight;
181
- this.defScrollHeightPxInitial = this.defScrollHeightPx;
189
+ if (this.virtualScroll) {
190
+ if (this.defScrollHeight === 'flex') {
191
+ this._defScrollHeightPx = this._scrollableBody.clientHeight;
192
+ this._defScrollHeightPxInitial = this._defScrollHeightPx;
193
+ }
194
+ if (this.autoLayout) {
195
+ this._scrollSubscription = fromEvent(this._scrollableBody, 'scroll').subscribe(() => {
196
+ this._calcAutoLayoutHeaderWidths(true);
197
+ });
198
+ }
182
199
  }
183
- this.headerBox = this.primengTreeTable.el.nativeElement.querySelector('.p-treetable-scrollable-header-box');
184
- if (this.headerBox) {
200
+ this._headerBox = this.primengTreeTable.el.nativeElement.querySelector('.p-treetable-scrollable-header-box');
201
+ if (this._headerBox) {
185
202
  if (this.minWidthForBodyOnly && this.minWidth) {
186
- const table = this.headerBox.querySelector('table');
203
+ const table = this._headerBox.querySelector('table');
187
204
  if (table)
188
205
  table.style.minWidth = this.minWidth;
189
206
  }
190
- this.scrollbarWidth = DomHandler.calculateScrollbarWidth();
191
- this.resizeObserver.observe(this.scrollableBody);
207
+ this._scrollbarWidth = DomHandler.calculateScrollbarWidth();
208
+ this._resizeObserver.observe(this._scrollableBody);
209
+ }
210
+ if (this._needRecalcAutoLayout) {
211
+ this._calcAutoLayoutHeaderWidths();
212
+ this.cdRef.detectChanges();
213
+ }
214
+ }
215
+ if (!this.scrollable) {
216
+ const tableWrapper = this.primengTreeTable.el?.nativeElement?.querySelector('.p-treetable-wrapper');
217
+ if (tableWrapper && this.minWidthForBodyOnly && this.minWidth) {
218
+ const table = tableWrapper.querySelector('table');
219
+ if (table)
220
+ table.style.minWidth = this.minWidth;
221
+ }
222
+ }
223
+ }
224
+ ngAfterViewChecked() {
225
+ if (this._needRecalcAutoLayout) {
226
+ this._calcAutoLayoutHeaderWidths();
227
+ this.cdRef.detectChanges();
228
+ }
229
+ if (!this.virtualScroll)
230
+ return;
231
+ if (!this._defScrollHeightPx && this.defScrollHeight === 'flex') {
232
+ this._defScrollHeightPx = this._scrollableBody.clientHeight;
233
+ this._defScrollHeightPxInitial = this._defScrollHeightPx;
234
+ this.cdRef.detectChanges();
235
+ }
236
+ if (!this.virtualScrollItemSize) {
237
+ this._recalcVirtualHeight();
238
+ this.cdRef.detectChanges();
239
+ }
240
+ }
241
+ ngOnChanges(changes) {
242
+ if (this.loading) {
243
+ this.clearSelection();
244
+ if (this.clearGlobalFilterOnLoading)
245
+ this.clearGlobalFilter();
246
+ }
247
+ if (this.virtualScrollItemHeight)
248
+ this.virtualScrollItemSize = this.virtualScrollItemHeight;
249
+ this._setMinWidthOverall();
250
+ const dataChanges = changes?.data;
251
+ if (dataChanges?.previousValue !== dataChanges?.currentValue) {
252
+ this.clearSelection();
253
+ }
254
+ this._calcAutoLayoutHeaderWidths(true);
255
+ }
256
+ ngOnDestroy() {
257
+ this._resizeObserver?.disconnect();
258
+ if (this.virtualScroll) {
259
+ if (this.autoLayout)
260
+ this._scrollSubscription?.unsubscribe();
261
+ window.removeEventListener('resize', this._onWindowResize.bind(this));
262
+ }
263
+ }
264
+ _calcAutoLayoutHeaderWidths(forced = false) {
265
+ if (!this.autoLayout || !this.scrollable)
266
+ return;
267
+ if (!this._needRecalcAutoLayout && !forced)
268
+ return;
269
+ const headerRows = this._headerBox?.querySelectorAll('tr');
270
+ if (!headerRows?.length)
271
+ return;
272
+ const headerCells = headerRows[headerRows.length - 1]?.querySelectorAll('th');
273
+ if (!headerCells?.length)
274
+ return;
275
+ let hasSelectableCell = false;
276
+ let hasRowMenuCell = false;
277
+ const ths = Array.from(headerCells);
278
+ if (ths.map((th) => th.offsetWidth).every((w) => w === 0))
279
+ return;
280
+ const thWidths = ths.map((th) => {
281
+ const wprev = th.style.width;
282
+ const isSelectableCell = th.classList.contains('cps-treetable-selectable-cell');
283
+ const isRowCell = th.classList.contains('cps-treetable-row-menu-cell');
284
+ if (isSelectableCell)
285
+ hasSelectableCell = true;
286
+ if (isRowCell)
287
+ hasRowMenuCell = true;
288
+ let thWidth = 55;
289
+ if (!isSelectableCell && !isRowCell) {
290
+ th.style.width = 'min-content';
291
+ th.style.display = 'block';
292
+ thWidth = th.offsetWidth;
293
+ th.style.width = wprev;
294
+ th.style.display = '';
192
295
  }
296
+ return thWidth;
297
+ });
298
+ const bodyRows = this._scrollableBody?.querySelectorAll('tr');
299
+ if (!bodyRows?.length)
300
+ return;
301
+ const tdWidths = [];
302
+ bodyRows.forEach((tr) => {
303
+ const tds = tr?.querySelectorAll('td');
304
+ tds?.forEach((td, idx) => {
305
+ const wprev = td.style.width;
306
+ const isSelectableOrRowMenuCell = td.classList.contains('cps-treetable-selectable-cell') ||
307
+ td.classList.contains('cps-treetable-row-menu-cell');
308
+ let tdWidth = 55;
309
+ if (!isSelectableOrRowMenuCell) {
310
+ td.style.width = 'min-content';
311
+ td.style.display = 'block';
312
+ tdWidth = td.offsetWidth;
313
+ td.style.width = wprev;
314
+ td.style.display = '';
315
+ }
316
+ if (!tdWidths[idx])
317
+ tdWidths[idx] = 0;
318
+ tdWidths[idx] = Math.max(tdWidths[idx], tdWidth);
319
+ });
320
+ });
321
+ if (thWidths.length !== tdWidths.length)
322
+ return;
323
+ const maxWidths = thWidths.map((v, idx) => Math.max(v, tdWidths[idx]));
324
+ let sum = maxWidths.reduce((a, b) => a + b, 0);
325
+ if (hasSelectableCell) {
326
+ sum -= 55;
327
+ maxWidths.shift();
328
+ }
329
+ if (hasRowMenuCell) {
330
+ sum -= 55;
331
+ maxWidths.pop();
193
332
  }
333
+ const percentages = maxWidths.map((v) => (v / sum) * 100);
334
+ headerCells.forEach((th, idx) => {
335
+ if ((hasSelectableCell && idx === 0) ||
336
+ (hasRowMenuCell && idx === headerCells.length - 1)) {
337
+ th.style.width = '55px';
338
+ }
339
+ else
340
+ th.style.width = percentages[hasSelectableCell ? idx - 1 : idx] + '%';
341
+ });
342
+ bodyRows.forEach((tr) => {
343
+ const tds = tr?.querySelectorAll('td');
344
+ tds?.forEach((td, idx) => {
345
+ if ((hasSelectableCell && idx === 0) ||
346
+ (hasRowMenuCell && idx === tds.length - 1)) {
347
+ td.style.width = '55px';
348
+ }
349
+ else {
350
+ td.style.width = percentages[hasSelectableCell ? idx - 1 : idx] + '%';
351
+ }
352
+ td.style.opacity = '1';
353
+ if (this.bordered)
354
+ td.style.borderLeftColor = 'var(--cps-color-line-mid)';
355
+ });
356
+ });
357
+ this._needRecalcAutoLayout = false;
194
358
  }
195
359
  _updateVirtualScrollItemSize() {
196
360
  if (!this.virtualScroll || this.virtualScrollItemHeight)
@@ -218,19 +382,6 @@ export class CpsTreeTableComponent {
218
382
  });
219
383
  this.virtualScrollItemSize = h;
220
384
  }
221
- ngAfterViewChecked() {
222
- if (!this.virtualScroll)
223
- return;
224
- if (!this.defScrollHeightPx && this.defScrollHeight === 'flex') {
225
- this.defScrollHeightPx = this.scrollableBody.clientHeight;
226
- this.defScrollHeightPxInitial = this.defScrollHeightPx;
227
- this.cdRef.detectChanges();
228
- }
229
- if (!this.virtualScrollItemSize) {
230
- this._recalcVirtualHeight();
231
- this.cdRef.detectChanges();
232
- }
233
- }
234
385
  _setMinWidthOverall() {
235
386
  if (this.minWidthForBodyOnly || !this.minWidth || !this.primengTreeTable)
236
387
  return;
@@ -247,37 +398,20 @@ export class CpsTreeTableComponent {
247
398
  const scrollableWrapper = this.primengTreeTable.el?.nativeElement?.querySelector('.p-treetable-scrollable-wrapper');
248
399
  if (scrollableWrapper)
249
400
  scrollableWrapper.style.minWidth = this.minWidth;
401
+ if (!this.scrollable) {
402
+ const tableWrapper = this.primengTreeTable.el?.nativeElement?.querySelector('.p-treetable-wrapper');
403
+ if (tableWrapper)
404
+ tableWrapper.style.minWidth = this.minWidth;
405
+ }
250
406
  const treeTableHeader = this.primengTreeTable.el?.nativeElement?.querySelector('.p-treetable-header');
251
407
  if (treeTableHeader)
252
408
  treeTableHeader.style.minWidth = this.minWidth;
253
409
  }
254
- ngOnChanges(changes) {
255
- if (this.loading) {
256
- this.clearSelection();
257
- if (this.clearGlobalFilterOnLoading)
258
- this.clearGlobalFilter();
259
- }
260
- if (this.virtualScrollItemHeight)
261
- this.virtualScrollItemSize = this.virtualScrollItemHeight;
262
- this._setMinWidthOverall();
263
- const dataChanges = changes?.data;
264
- if (dataChanges?.previousValue !== dataChanges?.currentValue) {
265
- this.clearSelection();
266
- }
267
- }
268
- ngOnDestroy() {
269
- this.resizeObserver?.disconnect();
270
- if (this.virtualScroll)
271
- window.removeEventListener('resize', this._onWindowResize.bind(this));
272
- }
273
- clearGlobalFilter() {
274
- this.globalFilterComp?.clear();
275
- }
276
410
  _onWindowResize() {
277
411
  // if (this.defScrollHeight === 'flex')
278
412
  // this.defScrollHeightPx = this.scrollableBody.clientHeight;
279
- clearTimeout(this.windowResizeDebouncer);
280
- this.windowResizeDebouncer = setTimeout(() => {
413
+ clearTimeout(this._windowResizeDebouncer);
414
+ this._windowResizeDebouncer = setTimeout(() => {
281
415
  this._recalcVirtualHeight();
282
416
  }, 100);
283
417
  }
@@ -312,12 +446,9 @@ export class CpsTreeTableComponent {
312
446
  }
313
447
  return classesList.join(' ');
314
448
  }
315
- onSortFunction(event) {
316
- this.customSortFunction.emit(event);
317
- }
318
449
  _recalcVirtualHeight() {
319
- if (!this.scrollbarVisible && this.virtualScroll)
320
- this.scrollableBody.style.setProperty('overflow', 'hidden', 'important');
450
+ if (!this._scrollbarVisible && this.virtualScroll)
451
+ this._scrollableBody.style.setProperty('overflow', 'hidden', 'important');
321
452
  setTimeout(() => {
322
453
  if (this.virtualScroll && this.defScrollHeight) {
323
454
  this._updateVirtualScrollItemSize();
@@ -330,58 +461,20 @@ export class CpsTreeTableComponent {
330
461
  else {
331
462
  const curHeight = this.virtualScrollItemSize * itemsLen + 2;
332
463
  if (this.defScrollHeight === 'flex') {
333
- if (curHeight >= this.defScrollHeightPxInitial) {
464
+ if (curHeight >= this._defScrollHeightPxInitial) {
334
465
  this.scrollHeight = 'flex';
335
- this.scrollableBody.style.height = '100%';
466
+ this._scrollableBody.style.height = '100%';
336
467
  this.cdRef.markForCheck();
337
468
  return;
338
469
  }
339
470
  }
340
471
  this.scrollHeight =
341
- Math.min(this.defScrollHeightPx, curHeight) + 'px';
472
+ Math.min(this._defScrollHeightPx, curHeight) + 'px';
342
473
  }
343
474
  this.cdRef.markForCheck();
344
475
  }
345
476
  });
346
477
  }
347
- onFilterGlobal(value) {
348
- this.primengTreeTable.filterGlobal(value, 'contains');
349
- }
350
- onClickAdditionalBtnOnSelect() {
351
- this.additionalBtnOnSelectClicked.emit(this.selectedRows);
352
- }
353
- onClickActionBtn() {
354
- this.actionBtnClicked.emit();
355
- }
356
- onReloadData() {
357
- if (this.dataReloadBtnDisabled)
358
- return;
359
- this.dataReloadBtnClicked.emit();
360
- }
361
- onColumnsToggle(event) {
362
- if (this.columnsToggleBtnDisabled)
363
- return;
364
- this.colToggleMenu?.toggle(event);
365
- }
366
- removeSelected() {
367
- this.selectedRows.forEach((row) => this._removeNodeFromData(row, false));
368
- this.data = [...this.data];
369
- this.rowsRemoved.emit(this.selectedRows);
370
- this.clearSelection();
371
- this._recalcVirtualHeight();
372
- }
373
- clearSelection() {
374
- this.selectedRows = [];
375
- }
376
- onEditRowClicked(node) {
377
- this.editRowBtnClicked.emit(node);
378
- }
379
- onRemoveRowClicked(node) {
380
- this.selectedRows = this.selectedRows.filter((v) => v !== node);
381
- this._removeNodeFromData(node);
382
- this.rowsRemoved.emit([node]);
383
- this._recalcVirtualHeight();
384
- }
385
478
  _removeNodeFromData(nodeToRemove, single = true) {
386
479
  const _findTopSortOrder = (_node) => {
387
480
  if (!_node)
@@ -428,10 +521,63 @@ export class CpsTreeTableComponent {
428
521
  }
429
522
  }
430
523
  }
524
+ clearGlobalFilter() {
525
+ this.globalFilterComp?.clear();
526
+ }
527
+ onSortFunction(event) {
528
+ this.customSortFunction.emit(event);
529
+ }
530
+ onFilterGlobal(value) {
531
+ this.primengTreeTable.filterGlobal(value, 'contains');
532
+ }
533
+ onClickAdditionalBtnOnSelect() {
534
+ this.additionalBtnOnSelectClicked.emit(this.selectedRows);
535
+ }
536
+ onClickActionBtn() {
537
+ this.actionBtnClicked.emit();
538
+ }
539
+ onReloadData() {
540
+ if (this.dataReloadBtnDisabled)
541
+ return;
542
+ this.dataReloadBtnClicked.emit();
543
+ }
544
+ onColumnsToggle(event) {
545
+ if (this.columnsToggleBtnDisabled)
546
+ return;
547
+ this.colToggleMenu?.toggle(event);
548
+ }
549
+ removeSelected() {
550
+ this.selectedRows.forEach((row) => this._removeNodeFromData(row, false));
551
+ this.data = [...this.data];
552
+ this.rowsRemoved.emit(this.selectedRows);
553
+ this.clearSelection();
554
+ this._recalcVirtualHeight();
555
+ setTimeout(() => {
556
+ this._calcAutoLayoutHeaderWidths(true);
557
+ });
558
+ }
559
+ clearSelection() {
560
+ this.selectedRows = [];
561
+ }
562
+ onEditRowClicked(node) {
563
+ this.editRowBtnClicked.emit(node);
564
+ }
565
+ onRemoveRowClicked(node) {
566
+ this.selectedRows = this.selectedRows.filter((v) => v !== node);
567
+ this._removeNodeFromData(node);
568
+ this.rowsRemoved.emit([node]);
569
+ this._recalcVirtualHeight();
570
+ setTimeout(() => {
571
+ this._calcAutoLayoutHeaderWidths(true);
572
+ });
573
+ }
431
574
  toggleAllColumns() {
432
575
  this.selectedColumns =
433
576
  this.selectedColumns.length < this.columns.length ? this.columns : [];
434
577
  this.columnsSelected.emit(this.selectedColumns);
578
+ setTimeout(() => {
579
+ this._calcAutoLayoutHeaderWidths(true);
580
+ });
435
581
  }
436
582
  isColumnSelected(col) {
437
583
  return !!find(this.selectedColumns, (item) => isEqual(item, col));
@@ -468,6 +614,9 @@ export class CpsTreeTableComponent {
468
614
  pageCount: Math.ceil(this.getPageCount())
469
615
  };
470
616
  this.pageChanged.emit(state);
617
+ setTimeout(() => {
618
+ this._calcAutoLayoutHeaderWidths(true);
619
+ });
471
620
  }
472
621
  onLazyLoaded(event) {
473
622
  this.lazyLoaded.emit(event);
@@ -475,10 +624,16 @@ export class CpsTreeTableComponent {
475
624
  onNodeExpanded(event) {
476
625
  this.nodeExpanded.emit(event);
477
626
  this._recalcVirtualHeight();
627
+ setTimeout(() => {
628
+ this._calcAutoLayoutHeaderWidths(true);
629
+ });
478
630
  }
479
631
  onNodeCollapsed(event) {
480
632
  this.nodeCollapsed.emit(event);
481
633
  this._recalcVirtualHeight();
634
+ setTimeout(() => {
635
+ this._calcAutoLayoutHeaderWidths(true);
636
+ });
482
637
  }
483
638
  onNodeSelected(event) {
484
639
  this.nodeSelected.emit(event);
@@ -488,10 +643,16 @@ export class CpsTreeTableComponent {
488
643
  }
489
644
  onSort(event) {
490
645
  this.sorted.emit(event);
646
+ setTimeout(() => {
647
+ this._calcAutoLayoutHeaderWidths(true);
648
+ });
491
649
  }
492
650
  onFilter(event) {
493
651
  this.filtered.emit(event);
494
652
  this._recalcVirtualHeight();
653
+ setTimeout(() => {
654
+ this._calcAutoLayoutHeaderWidths(true);
655
+ });
495
656
  }
496
657
  onSelectColumn(col) {
497
658
  let res = [];
@@ -508,13 +669,16 @@ export class CpsTreeTableComponent {
508
669
  }
509
670
  this.selectedColumns = res;
510
671
  this.columnsSelected.emit(this.selectedColumns);
672
+ setTimeout(() => {
673
+ this._calcAutoLayoutHeaderWidths(true);
674
+ });
511
675
  }
512
676
  onSelectionChanged(selection) {
513
677
  this.selectionChanged.emit(selection);
514
678
  }
515
679
  }
516
680
  CpsTreeTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsTreeTableComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
517
- CpsTreeTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CpsTreeTableComponent, isStandalone: true, selector: "cps-tree-table", inputs: { data: "data", columns: "columns", colHeaderName: "colHeaderName", colFieldName: "colFieldName", minWidth: "minWidth", minWidthForBodyOnly: "minWidthForBodyOnly", striped: "striped", bordered: "bordered", size: "size", selectable: "selectable", rowHover: "rowHover", showRowMenu: "showRowMenu", loading: "loading", tableStyle: "tableStyle", tableStyleClass: "tableStyleClass", sortable: "sortable", sortMode: "sortMode", customSort: "customSort", hasToolbar: "hasToolbar", toolbarSize: "toolbarSize", toolbarTitle: "toolbarTitle", toolbarIcon: "toolbarIcon", toolbarIconColor: "toolbarIconColor", scrollable: "scrollable", scrollHeight: "scrollHeight", virtualScroll: "virtualScroll", virtualScrollItemHeight: "virtualScrollItemHeight", numToleratedItems: "numToleratedItems", paginator: "paginator", alwaysShowPaginator: "alwaysShowPaginator", rowsPerPageOptions: "rowsPerPageOptions", first: "first", rows: "rows", resetPageOnRowsChange: "resetPageOnRowsChange", resetPageOnSort: "resetPageOnSort", totalRecords: "totalRecords", emptyMessage: "emptyMessage", emptyBodyHeight: "emptyBodyHeight", lazy: "lazy", lazyLoadOnInit: "lazyLoadOnInit", showGlobalFilter: "showGlobalFilter", globalFilterPlaceholder: "globalFilterPlaceholder", globalFilterFields: "globalFilterFields", clearGlobalFilterOnLoading: "clearGlobalFilterOnLoading", showRemoveBtnOnSelect: "showRemoveBtnOnSelect", removeBtnOnSelectDisabled: "removeBtnOnSelectDisabled", showAdditionalBtnOnSelect: "showAdditionalBtnOnSelect", additionalBtnOnSelectTitle: "additionalBtnOnSelectTitle", additionalBtnOnSelectDisabled: "additionalBtnOnSelectDisabled", showActionBtn: "showActionBtn", actionBtnTitle: "actionBtnTitle", actionBtnDisabled: "actionBtnDisabled", showDataReloadBtn: "showDataReloadBtn", dataReloadBtnDisabled: "dataReloadBtnDisabled", showColumnsToggleBtn: "showColumnsToggleBtn", columnsToggleBtnDisabled: "columnsToggleBtnDisabled" }, outputs: { selectionChanged: "selectionChanged", actionBtnClicked: "actionBtnClicked", additionalBtnOnSelectClicked: "additionalBtnOnSelectClicked", editRowBtnClicked: "editRowBtnClicked", rowsRemoved: "rowsRemoved", pageChanged: "pageChanged", sorted: "sorted", filtered: "filtered", columnsSelected: "columnsSelected", lazyLoaded: "lazyLoaded", dataReloadBtnClicked: "dataReloadBtnClicked", nodeExpanded: "nodeExpanded", nodeCollapsed: "nodeCollapsed", nodeSelected: "nodeSelected", nodeUnselected: "nodeUnselected", customSortFunction: "customSortFunction" }, providers: [
681
+ CpsTreeTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CpsTreeTableComponent, isStandalone: true, selector: "cps-tree-table", inputs: { data: "data", columns: "columns", colHeaderName: "colHeaderName", colFieldName: "colFieldName", minWidth: "minWidth", minWidthForBodyOnly: "minWidthForBodyOnly", autoLayout: "autoLayout", striped: "striped", bordered: "bordered", size: "size", selectable: "selectable", rowHover: "rowHover", showRowMenu: "showRowMenu", loading: "loading", tableStyle: "tableStyle", tableStyleClass: "tableStyleClass", sortable: "sortable", sortMode: "sortMode", customSort: "customSort", hasToolbar: "hasToolbar", toolbarSize: "toolbarSize", toolbarTitle: "toolbarTitle", toolbarIcon: "toolbarIcon", toolbarIconColor: "toolbarIconColor", scrollable: "scrollable", scrollHeight: "scrollHeight", virtualScroll: "virtualScroll", virtualScrollItemHeight: "virtualScrollItemHeight", numToleratedItems: "numToleratedItems", paginator: "paginator", alwaysShowPaginator: "alwaysShowPaginator", rowsPerPageOptions: "rowsPerPageOptions", first: "first", rows: "rows", resetPageOnRowsChange: "resetPageOnRowsChange", resetPageOnSort: "resetPageOnSort", totalRecords: "totalRecords", emptyMessage: "emptyMessage", emptyBodyHeight: "emptyBodyHeight", lazy: "lazy", lazyLoadOnInit: "lazyLoadOnInit", showGlobalFilter: "showGlobalFilter", globalFilterPlaceholder: "globalFilterPlaceholder", globalFilterFields: "globalFilterFields", clearGlobalFilterOnLoading: "clearGlobalFilterOnLoading", showRemoveBtnOnSelect: "showRemoveBtnOnSelect", removeBtnOnSelectDisabled: "removeBtnOnSelectDisabled", showAdditionalBtnOnSelect: "showAdditionalBtnOnSelect", additionalBtnOnSelectTitle: "additionalBtnOnSelectTitle", additionalBtnOnSelectDisabled: "additionalBtnOnSelectDisabled", showActionBtn: "showActionBtn", actionBtnTitle: "actionBtnTitle", actionBtnDisabled: "actionBtnDisabled", showDataReloadBtn: "showDataReloadBtn", dataReloadBtnDisabled: "dataReloadBtnDisabled", showColumnsToggleBtn: "showColumnsToggleBtn", columnsToggleBtnDisabled: "columnsToggleBtnDisabled" }, outputs: { selectionChanged: "selectionChanged", actionBtnClicked: "actionBtnClicked", additionalBtnOnSelectClicked: "additionalBtnOnSelectClicked", editRowBtnClicked: "editRowBtnClicked", rowsRemoved: "rowsRemoved", pageChanged: "pageChanged", sorted: "sorted", filtered: "filtered", columnsSelected: "columnsSelected", lazyLoaded: "lazyLoaded", dataReloadBtnClicked: "dataReloadBtnClicked", nodeExpanded: "nodeExpanded", nodeCollapsed: "nodeCollapsed", nodeSelected: "nodeSelected", nodeUnselected: "nodeUnselected", customSortFunction: "customSortFunction" }, providers: [
518
682
  TreeTableService,
519
683
  {
520
684
  provide: TreeTable,
@@ -522,7 +686,7 @@ CpsTreeTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
522
686
  // eslint-disable-next-line no-use-before-define
523
687
  deps: [CpsTreeTableComponent]
524
688
  }
525
- ], queries: [{ propertyName: "toolbarTemplate", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "headerTemplate", first: true, predicate: ["header"], descendants: true }, { propertyName: "nestedHeaderTemplate", first: true, predicate: ["nestedHeader"], descendants: true }, { propertyName: "bodyTemplate", first: true, predicate: ["body"], descendants: true }], viewQueries: [{ propertyName: "primengTreeTable", first: true, predicate: ["primengTreeTable"], descendants: true, static: true }, { propertyName: "globalFilterComp", first: true, predicate: ["globalFilterComp"], descendants: true }, { propertyName: "colToggleMenu", first: true, predicate: ["colToggleMenu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<p-treeTable\n #primengTreeTable\n ttWithUnsort\n [ngClass]=\"{\n 'cps-treetable-loading': loading,\n 'cps-treetable-flex': defScrollHeight === 'flex',\n 'cps-treetable-nonvirtual': !virtualScroll\n }\"\n [value]=\"data\"\n [scrollable]=\"scrollable\"\n [scrollHeight]=\"scrollHeight\"\n [virtualScroll]=\"virtualScroll\"\n [virtualScrollItemSize]=\"virtualScrollItemSize\"\n [virtualScrollOptions]=\"{\n numToleratedItems: numToleratedItems,\n autoSize: false\n }\"\n [columns]=\"selectedColumns\"\n [loading]=\"loading\"\n [rowHover]=\"rowHover\"\n [lazy]=\"lazy\"\n [(selection)]=\"selectedRows\"\n (selectionChange)=\"onSelectionChanged($event)\"\n compareSelectionBy=\"equals\"\n [lazyLoadOnInit]=\"lazyLoadOnInit\"\n [styleClass]=\"styleClass\"\n [tableStyle]=\"tableStyle\"\n [tableStyleClass]=\"tableStyleClass\"\n [customSort]=\"customSort\"\n [sortMode]=\"sortMode\"\n [globalFilterFields]=\"globalFilterFields\"\n [paginator]=\"paginator\"\n [showCurrentPageReport]=\"true\"\n [alwaysShowPaginator]=\"alwaysShowPaginator\"\n [rows]=\"rows\"\n [first]=\"first\"\n [totalRecords]=\"totalRecords\"\n [resetPageOnSort]=\"resetPageOnSort\"\n currentPageReportTemplate=\"{first} - {last} of {totalRecords}\"\n (onPage)=\"onPageChange($event)\"\n (onSort)=\"onSort($event)\"\n (onFilter)=\"onFilter($event)\"\n (onLazyLoad)=\"onLazyLoaded($event)\"\n (sortFunction)=\"onSortFunction($event)\"\n (onNodeExpand)=\"onNodeExpanded($event)\"\n (onNodeCollapse)=\"onNodeCollapsed($event)\"\n (onNodeSelect)=\"onNodeSelected($event)\"\n (onNodeUnselect)=\"onNodeUnselected($event)\">\n <ng-template pTemplate=\"caption\" *ngIf=\"hasToolbar\">\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-container *ngTemplateOutlet=\"toolbarTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!toolbarTemplate\">\n <div class=\"cps-treetable-tbar-left\">\n <div *ngIf=\"toolbarIcon\" class=\"cps-treetable-tbar-icon\">\n <cps-icon [icon]=\"toolbarIcon\" [color]=\"toolbarIconColor\"></cps-icon>\n </div>\n <div class=\"cps-treetable-tbar-title\">{{ toolbarTitle }}</div>\n <div *ngIf=\"showGlobalFilter\" class=\"cps-treetable-tbar-global-filter\">\n <cps-input\n #globalFilterComp\n prefixIcon=\"search\"\n [placeholder]=\"globalFilterPlaceholder\"\n (valueChanged)=\"onFilterGlobal($event)\"\n [clearable]=\"true\"\n [disabled]=\"loading\"\n [appearance]=\"toolbarSize === 'small' ? 'underlined' : 'outlined'\"\n [hideDetails]=\"true\">\n </cps-input>\n </div>\n </div>\n <div class=\"cps-treetable-tbar-right\">\n <div\n *ngIf=\"showRemoveBtnOnSelect && selectedRows.length > 0\"\n class=\"cps-treetable-tbar-btn-on-select\">\n <cps-button\n label=\"Remove\"\n [disabled]=\"removeBtnOnSelectDisabled\"\n color=\"prepared\"\n type=\"borderless\"\n icon=\"remove\"\n [size]=\"toolbarSize\"\n (clicked)=\"removeSelected()\">\n </cps-button>\n </div>\n <div\n *ngIf=\"showAdditionalBtnOnSelect && selectedRows.length > 0\"\n class=\"cps-treetable-tbar-btn-on-select\">\n <cps-button\n [label]=\"additionalBtnOnSelectTitle\"\n [disabled]=\"additionalBtnOnSelectDisabled\"\n color=\"prepared\"\n type=\"borderless\"\n [size]=\"toolbarSize\"\n (clicked)=\"onClickAdditionalBtnOnSelect()\">\n </cps-button>\n </div>\n <div *ngIf=\"showActionBtn\" class=\"cps-treetable-tbar-action-btn\">\n <cps-button\n [label]=\"actionBtnTitle\"\n [disabled]=\"actionBtnDisabled\"\n color=\"prepared\"\n type=\"outlined\"\n [size]=\"toolbarSize\"\n (clicked)=\"onClickActionBtn()\">\n </cps-button>\n </div>\n <div\n *ngIf=\"showColumnsToggleBtn && columns.length > 0\"\n class=\"cps-treetable-tbar-coltoggle-btn\"\n [ngClass]=\"{ 'btn-disabled': columnsToggleBtnDisabled }\">\n <cps-icon\n icon=\"columns\"\n size=\"normal\"\n [color]=\"\n columnsToggleBtnDisabled ? 'text-lightest' : 'prepared-lighten1'\n \"\n (click)=\"onColumnsToggle($event)\"></cps-icon>\n <cps-menu #colToggleMenu [withArrow]=\"false\">\n <div class=\"cps-treetable-coltoggle-menu\">\n <div\n class=\"cps-treetable-coltoggle-menu-item select-all-option\"\n [class.allselected]=\"selectedColumns.length === columns.length\"\n (click)=\"toggleAllColumns()\">\n <span class=\"cps-treetable-coltoggle-menu-item-left\">\n <span class=\"cps-treetable-coltoggle-menu-item-check\"> </span>\n <span class=\"cps-treetable-coltoggle-menu-item-label\"\n >Show all columns</span\n >\n </span>\n </div>\n <div\n *ngFor=\"let col of columns\"\n class=\"cps-treetable-coltoggle-menu-item\"\n (click)=\"onSelectColumn(col)\"\n [class.selected]=\"isColumnSelected(col)\">\n <span class=\"cps-treetable-coltoggle-menu-item-left\">\n <span class=\"cps-treetable-coltoggle-menu-item-check\"></span>\n <span class=\"cps-treetable-coltoggle-menu-item-label\">{{\n col[colHeaderName]\n }}</span>\n </span>\n </div>\n </div>\n </cps-menu>\n </div>\n <div\n *ngIf=\"showDataReloadBtn\"\n class=\"cps-treetable-tbar-reload-btn\"\n [ngClass]=\"{ 'btn-disabled': dataReloadBtnDisabled }\">\n <cps-icon\n icon=\"refresh\"\n size=\"18\"\n [color]=\"dataReloadBtnDisabled ? 'text-light' : 'prepared-lighten1'\"\n (click)=\"onReloadData()\">\n </cps-icon>\n </div>\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"header\" *ngIf=\"nestedHeaderTemplate\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"\n nestedHeaderTemplate;\n context: {\n $implicit: columns,\n }\n \"></ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"header\" *ngIf=\"!nestedHeaderTemplate\" let-columns>\n <tr>\n <!-- <th style=\"width: 3rem\" *ngIf=\"reorderableRows\"></th> -->\n <th style=\"width: 55px\" *ngIf=\"selectable\">\n <p-treeTableHeaderCheckbox></p-treeTableHeaderCheckbox>\n </th>\n <ng-container *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n headerTemplate;\n context: {\n $implicit: columns,\n }\n \"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!headerTemplate && columns.length > 0\">\n <ng-container *ngIf=\"sortable\">\n <th\n *ngFor=\"let col of columns\"\n [cpsTTColSortable]=\"col[colFieldName]\">\n {{ col[colHeaderName] }}\n </th>\n </ng-container>\n <ng-container *ngIf=\"!sortable\">\n <th *ngFor=\"let col of columns\">\n {{ col[colHeaderName] }}\n </th>\n </ng-container>\n </ng-container>\n <th class=\"cps-treetable-row-menu-cell\" *ngIf=\"showRowMenu\"></th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-rowData=\"rowData\"\n let-columns=\"columns\"\n let-rowNode\n let-rowIndex=\"rowIndex\">\n <tr\n [ttRow]=\"rowNode\"\n [ngClass]=\"{\n 'cps-treetable-row-selected':\n selectable && primengTreeTable.isSelected(rowNode.node)\n }\">\n <!-- <td *ngIf=\"reorderableRows\" class=\"cps-table-row-drag-handle-cell\">\n <span class=\"cps-table-row-drag-handle\" pReorderableRowHandle>\u2630</span>\n </td> -->\n <td style=\"width: 55px\" *ngIf=\"selectable\">\n <p-treeTableCheckbox [value]=\"rowNode\"></p-treeTableCheckbox>\n </td>\n <ng-container *ngIf=\"bodyTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n bodyTemplate;\n context: {\n $implicit: rowNode,\n rowIndex: rowIndex,\n columns: columns,\n rowData: rowData\n }\n \">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!bodyTemplate\">\n <ng-container *ngIf=\"columns.length > 0\">\n <td *ngFor=\"let col of columns; let i = index\">\n <span *ngIf=\"i === 0\" style=\"display: flex\">\n <p-treeTableToggler [rowNode]=\"rowNode\"> </p-treeTableToggler>\n {{ rowData[col[colFieldName]] }}\n </span>\n <ng-container *ngIf=\"i > 0\">{{\n rowData[col[colFieldName]]\n }}</ng-container>\n </td>\n </ng-container>\n </ng-container>\n <td *ngIf=\"showRowMenu\" class=\"cps-treetable-row-menu-cell\">\n <table-row-menu\n (editRowBtnClicked)=\"onEditRowClicked(rowNode.node)\"\n (removeRowBtnClicked)=\"onRemoveRowClicked(rowNode.node)\">\n </table-row-menu>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td\n colspan=\"100\"\n class=\"cps-treetable-empty-message-td\"\n [ngStyle]=\"{ height: emptyBodyHeight }\">\n {{ emptyMessage }}\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"loadingicon\">\n <cps-loader [fullScreen]=\"false\" opacity=\"0\"></cps-loader>\n </ng-template>\n <ng-template pTemplate=\"paginatorleft\">\n <div class=\"cps-table-paginator-itms-per-page\">\n <span class=\"cps-table-paginator-items-per-page-title\"\n >Rows per page:\n </span>\n <cps-select\n [options]=\"rowOptions\"\n [hideDetails]=\"true\"\n [(ngModel)]=\"rows\"\n (valueChanged)=\"onRowsPerPageChanged()\"\n [returnObject]=\"false\"\n optionsClass=\"cps-paginator-page-options\">\n </cps-select>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"paginatorfirstpagelinkicon\">\n <AngleDoubleLeftIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatorpreviouspagelinkicon\">\n <AngleLeftIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatornextpagelinkicon\">\n <AngleRightIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatorlastpagelinkicon\">\n <AngleDoubleRightIcon />\n </ng-template>\n</p-treeTable>\n", styles: [":host ::ng-deep .p-treetable{position:relative}:host ::ng-deep .p-component,:host ::ng-deep .p-component *{box-sizing:border-box}:host ::ng-deep .p-component{font-family:Source Sans Pro,sans-serif;font-size:14px;font-weight:400}:host ::ng-deep .p-treetable-scrollable-wrapper{position:relative}:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable,:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable .p-treetable-scrollable-wrapper,:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable .p-treetable-scrollable-view{height:unset}:host ::ng-deep .cps-treetable-bottom-bordered>.p-treetable-scrollable-wrapper{border-bottom:1px solid var(--cps-color-line-mid)}:host ::ng-deep .p-treetable .p-treetable-scrollable-header,:host ::ng-deep .p-treetable .p-treetable-scrollable-footer{background:white}:host ::ng-deep .p-treetable-scrollable-header,:host ::ng-deep .p-treetable-scrollable-footer{overflow:hidden}:host ::ng-deep .p-treetable table{border-collapse:collapse;width:100%;table-layout:fixed}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th{text-align:left;padding:1rem;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 1px;font-weight:700;color:var(--cps-color-text-mild);background:white;transition:box-shadow .2s}:host ::ng-deep .p-treetable-scrollable-body{overflow:auto!important;position:relative}:host ::ng-deep .cps-treetable-flex .p-treetable-scrollable-body{height:100%}:host ::ng-deep .p-treetable .p-treetable-tbody>tr{background:#ffffff;color:var(--cps-color-text-dark);transition:box-shadow .2s}:host ::ng-deep .p-treetable .p-treetable-tbody>tr.cps-treetable-row-selected{background-color:#f1ebed!important}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td{text-align:left;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;padding:1rem;overflow:hidden}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:first-child{border-width:0 0 1px 1px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:last-child{border-width:0 1px 1px 0}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler{width:1rem;height:1rem;color:var(--cps-color-text-dark);border:0 none;background:transparent;border-radius:50%;margin-right:.5rem}:host ::ng-deep .p-treetable-toggler{cursor:pointer;-webkit-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;overflow:hidden;position:relative}:host ::ng-deep .p-ripple{overflow:hidden;position:relative}:host ::ng-deep .p-link:focus{outline:0 none;outline-offset:0;box-shadow:unset}:host ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:14px;font-family:Source Sans Pro,sans-serif;border-radius:6px}:host ::ng-deep input[type=button],:host ::ng-deep input[type=submit],:host ::ng-deep input[type=reset],:host ::ng-deep input[type=file]::-webkit-file-upload-button,:host ::ng-deep button{border-radius:0}:host ::ng-deep .p-treetable .p-treetable-tbody>tr:focus{outline:0 none;outline-offset:-.15rem}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler:enabled:hover{color:var(--cps-color-calm);border-color:transparent;background:unset}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler:focus{outline:0 none;outline-offset:0;box-shadow:unset}:host ::ng-deep .p-treetable .p-paginator-bottom{border-width:0 1px 1px 1px;border-radius:0}:host ::ng-deep .p-paginator{background:white;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;color:var(--cps-color-text-dark);padding:1rem;border:solid var(--cps-color-line-mid)}:host ::ng-deep .p-paginator-left-content{margin-right:auto}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page{display:inline-flex;align-items:center}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-table-paginator-items-per-page-title{font-family:Source Sans Pro,sans-serif;font-size:14px;margin-right:12px;cursor:default}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box{min-height:32px!important;background:transparent!important}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box .cps-select-box-items{font-size:14px!important}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box .cps-select-box-chevron .cps-icon{width:14px;height:14px}:host ::ng-deep .p-paginator .p-paginator-current{background-color:transparent;border:0 none;color:var(--cps-color-text-dark);min-width:3rem;margin:.143rem;padding:0 .5rem;font-family:Source Sans Pro,sans-serif;font-size:14px;height:unset}:host ::ng-deep .p-paginator-page,:host ::ng-deep .p-paginator-next,:host ::ng-deep .p-paginator-last,:host ::ng-deep .p-paginator-first,:host ::ng-deep .p-paginator-prev,:host ::ng-deep .p-paginator-current{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1;-webkit-user-select:none;user-select:none;overflow:hidden;position:relative}:host ::ng-deep .p-paginator-current{cursor:default}:host ::ng-deep .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):hover{background:var(--cps-color-highlight-hover);border-color:unset}:host ::ng-deep .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):active{background:var(--cps-color-highlight-active)}:host ::ng-deep .p-paginator .p-paginator-first,:host ::ng-deep .p-paginator .p-paginator-prev,:host ::ng-deep .p-paginator .p-paginator-next,:host ::ng-deep .p-paginator .p-paginator-last{background-color:transparent;border:1px solid var(--cps-color-text-dark);border-radius:4px;color:var(--cps-color-text-dark);min-width:32px;height:32px;margin:.143rem;transition:box-shadow .2s}:host ::ng-deep .p-disabled,:host ::ng-deep .p-disabled *{cursor:default!important;pointer-events:none}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background:var(--cps-color-calm);border-color:var(--cps-color-calm);color:#fff}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:var(--cps-color-highlight-hover);border-color:unset}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):active{background:var(--cps-color-highlight-active)}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page{background-color:transparent;border:1px solid var(--cps-color-text-dark);border-radius:4px;color:var(--cps-color-text-dark);min-width:32px;height:32px;margin:.143rem;transition:box-shadow .2s}:host ::ng-deep .p-paginator-element:focus{z-index:1;position:relative}:host ::ng-deep span.p-paginator-icon{display:contents}:host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:.4}:host ::ng-deep .cps-treetable-empty-message-td{text-align:center!important;font-weight:600;background:white}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-header{border-width:1px 1px 0 1px}:host ::ng-deep .p-treetable .p-treetable-header{font-weight:600;display:flex;justify-content:space-between;align-items:center;padding:0 10px;border:unset;background:unset;border-top:1px solid var(--cps-color-line-mid);border-right:1px solid var(--cps-color-line-mid);border-left:4px solid var(--cps-color-surprise)!important;border-radius:4px 4px 0 0;font-size:16px;line-height:150%;background-color:#fff;color:var(--cps-color-text-darkest);overflow:auto}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left{display:flex;align-items:center}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-global-filter{margin-left:12px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-icon{display:flex;margin-right:8px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-title{cursor:default}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right{display:flex;align-items:center}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-btn-on-select{margin-right:4px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-action-btn{margin-right:4px;margin-left:8px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn{display:contents}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn cps-icon{margin-left:12px;margin-right:4px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn:not(.btn-disabled) cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn:not(.btn-disabled) cps-icon{cursor:pointer}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn:not(.btn-disabled) cps-icon:hover .cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn:not(.btn-disabled) cps-icon:hover .cps-icon{color:var(--cps-color-prepared)!important}:host ::ng-deep .cps-tbar-small.p-treetable .p-treetable-header{height:43px}:host ::ng-deep .cps-tbar-normal.p-treetable .p-treetable-header{height:72px}:host ::ng-deep .p-treetable .p-treetable-footer{background:white;color:#343a40;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;padding:1rem;font-weight:700}:host ::ng-deep .p-treetable .p-treetable-tfoot>tr>td{text-align:left;padding:1rem;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;font-weight:700;color:#343a40;background:white}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th:hover sortalticon{opacity:1}:host ::ng-deep .p-treetable .p-sortable-column:not(.p-highlight):hover{background:white;color:var(--cps-color-text-mild)}:host ::ng-deep .p-treetable .p-sortable-column.p-highlight:hover{background:white;color:var(--cps-color-text-mild)}:host ::ng-deep .p-treetable .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon{color:var(--cps-color-text-dark)}:host ::ng-deep .p-treetable .p-sortable-column .p-sortable-column-icon{color:var(--cps-color-text-mild);margin-left:.5rem}:host ::ng-deep .p-treetable .p-sortable-column.p-highlight .p-sortable-column-icon{color:var(--cps-color-calm)}:host ::ng-deep .p-icon-wrapper{display:inline-flex}:host ::ng-deep .p-icon{display:inline-block;width:1rem;height:1rem}:host ::ng-deep .p-sortable-column-icon{width:13px;height:13px}:host ::ng-deep .p-treetable .p-sortable-column .p-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center}:host ::ng-deep .p-treetable .p-sortable-column .p-column-title,:host ::ng-deep .p-treetable .p-sortable-column .p-sortable-column-icon,:host ::ng-deep .p-treetable .p-sortable-column .p-sortable-column-badge{vertical-align:unset}:host ::ng-deep .p-treetable .p-sortable-column .p-sortable-column-badge{border-radius:50%;height:1.125rem;min-width:1.125rem;line-height:1.125rem;color:var(--cps-color-calm);background:var(--cps-color-highlight-active);margin-left:.5rem}:host ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none}:host ::ng-deep .p-treetable .p-sortable-column{cursor:pointer;-webkit-user-select:none;user-select:none}:host ::ng-deep .p-treetable .p-sortable-column:focus{box-shadow:none;outline:0 none}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler.p-icon{width:2rem;height:2rem}:host ::ng-deep .p-treetable .p-treetable-tbody>tr.p-highlight{background:#eff6ff;color:#1d4ed8}:host ::ng-deep .p-treetable.p-treetable-hoverable-rows .p-treetable-tbody>tr:not(.p-highlight):hover{background:var(--cps-color-highlight-hover)}:host ::ng-deep .p-treetable-hoverable-rows .p-treetable-tbody>tr{cursor:auto}:host ::ng-deep .p-treetable .p-column-resizer-helper{background:#3b82f6}:host ::ng-deep .p-treetable .p-treetable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:1001;top:0;left:0;width:100%;height:100%;background-color:#fff;transition-duration:.2s;border:1px solid var(--cps-color-line-mid)}:host ::ng-deep .p-treetable.cps-tbar-small .p-treetable-loading-overlay{top:43px;height:calc(100% - 43px)}:host ::ng-deep .p-treetable.cps-tbar-normal .p-treetable-loading-overlay{top:72px;height:calc(100% - 72px)}:host ::ng-deep .cps-treetable-loading .p-treetable{min-height:200px}:host ::ng-deep .cps-treetable-loading .p-treetable.cps-tbar-normal{min-height:272px}:host ::ng-deep .cps-treetable-loading .p-treetable.cps-tbar-small{min-height:243px}:host ::ng-deep .cps-table-col-filter-menu-open .cps-table-col-filter-menu-button{color:var(--cps-color-text-dark)}:host ::ng-deep sortalticon{opacity:0}:host ::ng-deep p-treetablesorticon{display:inline-flex;align-items:baseline}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-footer{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-top{border-width:0 1px 0 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-bottom{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th{border-width:1px 0 1px 1px}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th:last-child{border-width:1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tbody>tr>td{border-width:0 0 1px 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tfoot>tr>td{border-width:1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tbody>tr>td:last-child{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:only-child{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-tbody>tr>td{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-tfoot>tr>td{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-footer{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-thead>tr>th{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-tbody>tr>td{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-tfoot>tr>td{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-footer{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-striped .p-treetable-tbody>tr:nth-child(odd){background:var(--cps-color-bg-light)}:host ::ng-deep .p-treetable.p-treetable-striped .p-treetable-tbody>tr:nth-child(even){background:#ffffff}:host ::ng-deep .cps-treetable-row-menu-cell{width:55px;border-left:none!important}:host ::ng-deep td:has(p-treetablecheckbox){text-align:center!important}:host ::ng-deep th:has(p-treetableheadercheckbox){text-align:center!important;width:55px!important}:host ::ng-deep .p-checkbox{display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:bottom;position:relative;width:18px;height:18px}:host ::ng-deep .p-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}:host ::ng-deep .p-hidden-accessible input,:host ::ng-deep .p-hidden-accessible select{transform:scale(0)}:host ::ng-deep .p-checkbox .p-checkbox-box{background:#ffffff;width:18px;height:18px;color:var(--cps-color-text-dark);border:2px solid var(--cps-color-text-mild);border-radius:2px;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s}:host ::ng-deep .p-checkbox-box{display:flex;justify-content:center;align-items:center}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:var(--cps-color-calm);background:var(--cps-color-calm)}:host ::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:var(--cps-color-calm);background:var(--cps-color-calm);color:#fff}:host ::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{border-color:var(--cps-color-calm)}:host ::ng-deep .p-checkbox .p-checkbox-box .p-icon{width:14px;height:14px}:host ::ng-deep .p-checkbox .p-checkbox-box .p-checkbox-icon{transition-duration:.2s;color:#fff;font-size:14px}:host ::ng-deep .p-checkbox .p-checkbox-box minusicon .p-checkbox-icon{color:var(--cps-color-calm);width:12px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td p-treetablecheckbox .p-checkbox{margin-right:0}::ng-deep .p-scrollbar-measure{width:100px;height:100px;overflow:scroll;position:absolute;top:-9999px}.cps-treetable-coltoggle-menu{display:block;max-height:242px;overflow-x:hidden;background:white}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item{padding:12px;justify-content:space-between;display:flex;cursor:pointer}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item:hover{background:var(--cps-color-highlight-hover)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-label{color:var(--cps-color-text-dark)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-left{display:flex;align-items:center;margin-right:8px}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-check{background-color:transparent;border:0;width:16px;height:16px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0,0,.2,.1),background-color 90ms cubic-bezier(0,0,.2,.1);margin-right:8px;opacity:0}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-check:after{color:var(--cps-color-calm);top:4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box;position:absolute;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected{font-weight:600}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected .cps-treetable-coltoggle-menu-item-label,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected .cps-treetable-coltoggle-menu-item-label{color:var(--cps-color-calm)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected .cps-treetable-coltoggle-menu-item-check,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected .cps-treetable-coltoggle-menu-item-check{opacity:1}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected{background:#efe4e7}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.highlighten{background:#f5eeef}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected.highlighten{background:#e6d4d9}.cps-treetable-coltoggle-menu .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}::ng-deep .cps-select-options-menu.cps-paginator-page-options .cps-select-options-option{font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TreeTableModule }, { kind: "component", type: i3.TreeTable, selector: "p-treeTable", inputs: ["columns", "style", "styleClass", "tableStyle", "tableStyleClass", "autoLayout", "lazy", "lazyLoadOnInit", "paginator", "rows", "first", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "customSort", "selectionMode", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "compareSelectionBy", "rowHover", "loading", "loadingIcon", "showLoader", "scrollable", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "frozenColumns", "resizableColumns", "columnResizeMode", "reorderableColumns", "contextMenu", "rowTrackBy", "filters", "globalFilterFields", "filterDelay", "filterMode", "filterLocale", "virtualRowHeight", "value", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection"], outputs: ["selectionChange", "contextMenuSelectionChange", "onFilter", "onNodeExpand", "onNodeCollapse", "onPage", "onSort", "onLazyLoad", "sortFunction", "onColResize", "onColReorder", "onNodeSelect", "onNodeUnselect", "onContextMenuSelect", "onHeaderCheckboxToggle", "onEditInit", "onEditComplete", "onEditCancel"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i3.TreeTableToggler, selector: "p-treeTableToggler", inputs: ["rowNode"] }, { kind: "directive", type: i3.TTRow, selector: "[ttRow]", inputs: ["ttRow"] }, { kind: "component", type: i3.TTCheckbox, selector: "p-treeTableCheckbox", inputs: ["disabled", "value"] }, { kind: "component", type: i3.TTHeaderCheckbox, selector: "p-treeTableHeaderCheckbox" }, { kind: "component", type: CpsInputComponent, selector: "cps-input", inputs: ["label", "hint", "placeholder", "disabled", "readonly", "width", "type", "loading", "clearable", "prefixIcon", "prefixIconClickable", "prefixIconSize", "prefixText", "hideDetails", "persistentClear", "error", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "appearance", "valueToDisplay", "value"], outputs: ["valueChanged", "focused", "prefixIconClicked", "blurred", "cleared", "enterClicked"] }, { kind: "component", type: CpsButtonComponent, selector: "cps-button", inputs: ["color", "contentColor", "type", "label", "icon", "iconPosition", "size", "width", "height", "disabled", "loading"], outputs: ["clicked"] }, { kind: "component", type: CpsMenuComponent, selector: "cps-menu", inputs: ["header", "items", "withArrow", "compressed", "focusOnShow", "persistent", "containerClass", "showTransitionOptions", "hideTransitionOptions"], outputs: ["menuShown", "menuHidden", "beforeMenuHidden", "contentClicked"] }, { kind: "component", type: CpsIconComponent, selector: "cps-icon", inputs: ["icon", "size", "color"] }, { kind: "component", type: CpsSelectComponent, selector: "cps-select", inputs: ["label", "placeholder", "hint", "returnObject", "multiple", "disabled", "width", "selectAll", "chips", "closableChips", "clearable", "openOnClear", "options", "optionLabel", "optionValue", "optionInfo", "hideDetails", "persistentClear", "prefixIcon", "prefixIconSize", "loading", "virtualScroll", "numToleratedItems", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "optionsClass", "appearance", "value"], outputs: ["valueChanged"] }, { kind: "component", type: CpsLoaderComponent, selector: "cps-loader", inputs: ["fullScreen", "opacity", "labelColor", "showLabel"] }, { kind: "component", type: AngleDoubleLeftIcon, selector: "AngleDoubleLeftIcon" }, { kind: "component", type: AngleLeftIcon, selector: "AngleLeftIcon" }, { kind: "component", type: AngleRightIcon, selector: "AngleRightIcon" }, { kind: "component", type: AngleDoubleRightIcon, selector: "AngleDoubleRightIcon" }, { kind: "directive", type: CpsTreeTableColumnSortableDirective, selector: "[cpsTTColSortable]", inputs: ["cpsTTColSortable"] }, { kind: "directive", type: TreeTableUnsortDirective, selector: "[ttWithUnsort]" }, { kind: "component", type: TableRowMenuComponent, selector: "table-row-menu", outputs: ["editRowBtnClicked", "removeRowBtnClicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
689
+ ], queries: [{ propertyName: "toolbarTemplate", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "headerTemplate", first: true, predicate: ["header"], descendants: true }, { propertyName: "nestedHeaderTemplate", first: true, predicate: ["nestedHeader"], descendants: true }, { propertyName: "bodyTemplate", first: true, predicate: ["body"], descendants: true }], viewQueries: [{ propertyName: "primengTreeTable", first: true, predicate: ["primengTreeTable"], descendants: true, static: true }, { propertyName: "globalFilterComp", first: true, predicate: ["globalFilterComp"], descendants: true }, { propertyName: "colToggleMenu", first: true, predicate: ["colToggleMenu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<p-treeTable\n #primengTreeTable\n ttWithUnsort\n [ngClass]=\"{\n 'cps-treetable-loading': loading,\n 'cps-treetable-flex': defScrollHeight === 'flex',\n 'cps-treetable-nonvirtual': !virtualScroll,\n 'cps-treetable-autolayout-calced': autoLayout && scrollable,\n }\"\n [value]=\"data\"\n [autoLayout]=\"autoLayout && !scrollable\"\n [scrollable]=\"scrollable\"\n [scrollHeight]=\"scrollHeight\"\n [virtualScroll]=\"virtualScroll\"\n [virtualScrollItemSize]=\"virtualScrollItemSize\"\n [virtualScrollOptions]=\"{\n numToleratedItems: numToleratedItems,\n autoSize: false\n }\"\n [columns]=\"selectedColumns\"\n [loading]=\"loading\"\n [rowHover]=\"rowHover\"\n [lazy]=\"lazy\"\n [(selection)]=\"selectedRows\"\n (selectionChange)=\"onSelectionChanged($event)\"\n compareSelectionBy=\"equals\"\n [lazyLoadOnInit]=\"lazyLoadOnInit\"\n [styleClass]=\"styleClass\"\n [tableStyle]=\"tableStyle\"\n [tableStyleClass]=\"tableStyleClass\"\n [customSort]=\"customSort\"\n [sortMode]=\"sortMode\"\n [globalFilterFields]=\"globalFilterFields\"\n [paginator]=\"paginator\"\n [showCurrentPageReport]=\"true\"\n [alwaysShowPaginator]=\"alwaysShowPaginator\"\n [rows]=\"rows\"\n [first]=\"first\"\n [totalRecords]=\"totalRecords\"\n [resetPageOnSort]=\"resetPageOnSort\"\n currentPageReportTemplate=\"{first} - {last} of {totalRecords}\"\n (onPage)=\"onPageChange($event)\"\n (onSort)=\"onSort($event)\"\n (onFilter)=\"onFilter($event)\"\n (onLazyLoad)=\"onLazyLoaded($event)\"\n (sortFunction)=\"onSortFunction($event)\"\n (onNodeExpand)=\"onNodeExpanded($event)\"\n (onNodeCollapse)=\"onNodeCollapsed($event)\"\n (onNodeSelect)=\"onNodeSelected($event)\"\n (onNodeUnselect)=\"onNodeUnselected($event)\">\n <ng-template pTemplate=\"caption\" *ngIf=\"hasToolbar\">\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-container *ngTemplateOutlet=\"toolbarTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!toolbarTemplate\">\n <div class=\"cps-treetable-tbar-left\">\n <div *ngIf=\"toolbarIcon\" class=\"cps-treetable-tbar-icon\">\n <cps-icon [icon]=\"toolbarIcon\" [color]=\"toolbarIconColor\"></cps-icon>\n </div>\n <div class=\"cps-treetable-tbar-title\">{{ toolbarTitle }}</div>\n <div *ngIf=\"showGlobalFilter\" class=\"cps-treetable-tbar-global-filter\">\n <cps-input\n #globalFilterComp\n prefixIcon=\"search\"\n [placeholder]=\"globalFilterPlaceholder\"\n (valueChanged)=\"onFilterGlobal($event)\"\n [clearable]=\"true\"\n [disabled]=\"loading\"\n [appearance]=\"toolbarSize === 'small' ? 'underlined' : 'outlined'\"\n [hideDetails]=\"true\">\n </cps-input>\n </div>\n </div>\n <div class=\"cps-treetable-tbar-right\">\n <div\n *ngIf=\"showRemoveBtnOnSelect && selectedRows.length > 0\"\n class=\"cps-treetable-tbar-btn-on-select\">\n <cps-button\n label=\"Remove\"\n [disabled]=\"removeBtnOnSelectDisabled\"\n color=\"prepared\"\n type=\"borderless\"\n icon=\"remove\"\n [size]=\"toolbarSize\"\n (clicked)=\"removeSelected()\">\n </cps-button>\n </div>\n <div\n *ngIf=\"showAdditionalBtnOnSelect && selectedRows.length > 0\"\n class=\"cps-treetable-tbar-btn-on-select\">\n <cps-button\n [label]=\"additionalBtnOnSelectTitle\"\n [disabled]=\"additionalBtnOnSelectDisabled\"\n color=\"prepared\"\n type=\"borderless\"\n [size]=\"toolbarSize\"\n (clicked)=\"onClickAdditionalBtnOnSelect()\">\n </cps-button>\n </div>\n <div *ngIf=\"showActionBtn\" class=\"cps-treetable-tbar-action-btn\">\n <cps-button\n [label]=\"actionBtnTitle\"\n [disabled]=\"actionBtnDisabled\"\n color=\"prepared\"\n type=\"outlined\"\n [size]=\"toolbarSize\"\n (clicked)=\"onClickActionBtn()\">\n </cps-button>\n </div>\n <div\n *ngIf=\"showColumnsToggleBtn && columns.length > 0\"\n class=\"cps-treetable-tbar-coltoggle-btn\"\n [ngClass]=\"{ 'btn-disabled': columnsToggleBtnDisabled }\">\n <cps-icon\n icon=\"columns\"\n size=\"normal\"\n [color]=\"\n columnsToggleBtnDisabled ? 'text-lightest' : 'prepared-lighten1'\n \"\n (click)=\"onColumnsToggle($event)\"></cps-icon>\n <cps-menu #colToggleMenu [withArrow]=\"false\">\n <div class=\"cps-treetable-coltoggle-menu\">\n <div\n class=\"cps-treetable-coltoggle-menu-item select-all-option\"\n [class.allselected]=\"selectedColumns.length === columns.length\"\n (click)=\"toggleAllColumns()\">\n <span class=\"cps-treetable-coltoggle-menu-item-left\">\n <span class=\"cps-treetable-coltoggle-menu-item-check\"> </span>\n <span class=\"cps-treetable-coltoggle-menu-item-label\"\n >Show all columns</span\n >\n </span>\n </div>\n <div\n *ngFor=\"let col of columns\"\n class=\"cps-treetable-coltoggle-menu-item\"\n (click)=\"onSelectColumn(col)\"\n [class.selected]=\"isColumnSelected(col)\">\n <span class=\"cps-treetable-coltoggle-menu-item-left\">\n <span class=\"cps-treetable-coltoggle-menu-item-check\"></span>\n <span class=\"cps-treetable-coltoggle-menu-item-label\">{{\n col[colHeaderName]\n }}</span>\n </span>\n </div>\n </div>\n </cps-menu>\n </div>\n <div\n *ngIf=\"showDataReloadBtn\"\n class=\"cps-treetable-tbar-reload-btn\"\n [ngClass]=\"{ 'btn-disabled': dataReloadBtnDisabled }\">\n <cps-icon\n icon=\"refresh\"\n size=\"18\"\n [color]=\"dataReloadBtnDisabled ? 'text-light' : 'prepared-lighten1'\"\n (click)=\"onReloadData()\">\n </cps-icon>\n </div>\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"header\" *ngIf=\"nestedHeaderTemplate\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"\n nestedHeaderTemplate;\n context: {\n $implicit: columns,\n }\n \"></ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"header\" *ngIf=\"!nestedHeaderTemplate\" let-columns>\n <tr>\n <!-- <th style=\"width: 3rem\" *ngIf=\"reorderableRows\"></th> -->\n <th *ngIf=\"selectable\" cpsTTHdrSelectable></th>\n <ng-container *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n headerTemplate;\n context: {\n $implicit: columns,\n }\n \"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!headerTemplate && columns.length > 0\">\n <ng-container *ngIf=\"sortable\">\n <th\n *ngFor=\"let col of columns\"\n [cpsTTColSortable]=\"col[colFieldName]\">\n {{ col[colHeaderName] }}\n </th>\n </ng-container>\n <ng-container *ngIf=\"!sortable\">\n <th *ngFor=\"let col of columns\">\n {{ col[colHeaderName] }}\n </th>\n </ng-container>\n </ng-container>\n <th class=\"cps-treetable-row-menu-cell\" *ngIf=\"showRowMenu\"></th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-rowData=\"rowData\"\n let-columns=\"columns\"\n let-rowNode\n let-rowIndex=\"rowIndex\">\n <tr\n [ttRow]=\"rowNode\"\n [ngClass]=\"{\n 'cps-treetable-row-selected':\n selectable && primengTreeTable.isSelected(rowNode.node)\n }\">\n <!-- <td *ngIf=\"reorderableRows\" class=\"cps-table-row-drag-handle-cell\">\n <span class=\"cps-table-row-drag-handle\" pReorderableRowHandle>\u2630</span>\n </td> -->\n <td [cpsTTRowSelectable]=\"rowNode\" *ngIf=\"selectable\"></td>\n <ng-container *ngIf=\"bodyTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n bodyTemplate;\n context: {\n $implicit: rowNode,\n rowIndex: rowIndex,\n columns: columns,\n rowData: rowData\n }\n \">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!bodyTemplate\">\n <ng-container *ngIf=\"columns.length > 0\">\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <td *ngIf=\"i === 0\" [cpsTTRowToggler]=\"rowNode\">\n {{ rowData[col[colFieldName]] }}\n </td>\n <td *ngIf=\"i > 0\">{{ rowData[col[colFieldName]] }}</td>\n </ng-container>\n </ng-container>\n </ng-container>\n <td *ngIf=\"showRowMenu\" class=\"cps-treetable-row-menu-cell\">\n <table-row-menu\n (editRowBtnClicked)=\"onEditRowClicked(rowNode.node)\"\n (removeRowBtnClicked)=\"onRemoveRowClicked(rowNode.node)\">\n </table-row-menu>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td\n colspan=\"100\"\n class=\"cps-treetable-empty-message-td\"\n [ngStyle]=\"{ height: emptyBodyHeight }\">\n {{ emptyMessage }}\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"loadingicon\">\n <cps-loader [fullScreen]=\"false\" opacity=\"0\"></cps-loader>\n </ng-template>\n <ng-template pTemplate=\"paginatorleft\">\n <div class=\"cps-table-paginator-itms-per-page\">\n <span class=\"cps-table-paginator-items-per-page-title\"\n >Rows per page:\n </span>\n <cps-select\n [options]=\"rowOptions\"\n [hideDetails]=\"true\"\n [(ngModel)]=\"rows\"\n (valueChanged)=\"onRowsPerPageChanged()\"\n [returnObject]=\"false\"\n optionsClass=\"cps-paginator-page-options\">\n </cps-select>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"paginatorfirstpagelinkicon\">\n <AngleDoubleLeftIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatorpreviouspagelinkicon\">\n <AngleLeftIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatornextpagelinkicon\">\n <AngleRightIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatorlastpagelinkicon\">\n <AngleDoubleRightIcon />\n </ng-template>\n</p-treeTable>\n", styles: [":host ::ng-deep .p-treetable{position:relative}:host ::ng-deep .p-component,:host ::ng-deep .p-component *{box-sizing:border-box}:host ::ng-deep .p-component{font-family:Source Sans Pro,sans-serif;font-size:14px;font-weight:400}:host ::ng-deep .p-treetable-scrollable-wrapper{position:relative}:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable,:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable .p-treetable-scrollable-wrapper,:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable .p-treetable-scrollable-view{height:unset}:host ::ng-deep .cps-treetable-bottom-bordered>.p-treetable-scrollable-wrapper{border-bottom:1px solid var(--cps-color-line-mid)}:host ::ng-deep .p-treetable .p-treetable-scrollable-header,:host ::ng-deep .p-treetable .p-treetable-scrollable-footer{background:white}:host ::ng-deep .p-treetable-scrollable-header,:host ::ng-deep .p-treetable-scrollable-footer{overflow:hidden}:host ::ng-deep .p-treetable table{border-collapse:collapse;width:100%;table-layout:fixed}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th{text-align:left;padding:1rem;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 1px;font-weight:400;color:var(--cps-color-text-mild);background:white;transition:box-shadow .2s;overflow:hidden}:host ::ng-deep .p-treetable-scrollable-body{overflow:auto!important;position:relative}:host ::ng-deep .cps-treetable-flex .p-treetable-scrollable-body{height:100%}:host ::ng-deep .p-treetable .p-treetable-tbody{background:#ffffff}:host ::ng-deep .p-treetable .p-treetable-tbody>tr{background:#ffffff;color:var(--cps-color-text-dark);transition:box-shadow .2s}:host ::ng-deep .p-treetable .p-treetable-tbody>tr.cps-treetable-row-selected{background-color:var(--cps-color-highlight-active)!important}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td{text-align:left;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;padding:1rem;overflow:hidden}:host ::ng-deep .cps-treetable-autolayout-calced .p-treetable .p-treetable-scrollable-body .p-treetable-tbody>tr>td:not(.cps-treetable-row-toggler-cell):not(.cps-treetable-selectable-cell):not(.cps-treetable-row-menu-cell):not(.cps-treetable-empty-message-td){opacity:0;border-left-color:transparent}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:first-child{border-width:0 0 1px 1px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:last-child{border-width:0 1px 1px 0}:host ::ng-deep .p-treetable-auto-layout table{table-layout:auto}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler{width:1rem;height:1rem;color:var(--cps-color-text-dark);border:0 none;background:transparent;border-radius:50%;margin-right:.5rem}:host ::ng-deep .p-treetable-toggler{cursor:pointer;-webkit-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;overflow:hidden;position:relative}:host ::ng-deep .p-ripple{overflow:hidden;position:relative}:host ::ng-deep .p-link:focus{outline:0 none;outline-offset:0;box-shadow:unset}:host ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:14px;font-family:Source Sans Pro,sans-serif;border-radius:6px}:host ::ng-deep input[type=button],:host ::ng-deep input[type=submit],:host ::ng-deep input[type=reset],:host ::ng-deep input[type=file]::-webkit-file-upload-button,:host ::ng-deep button{border-radius:0}:host ::ng-deep .p-treetable .p-treetable-tbody>tr:focus{outline:0 none;outline-offset:-.15rem}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler:enabled:hover{color:var(--cps-color-calm);border-color:transparent;background:unset}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler:focus{outline:0 none;outline-offset:0;box-shadow:unset}:host ::ng-deep .p-treetable .p-paginator-bottom{border-width:0 1px 1px 1px;border-radius:0}:host ::ng-deep .p-paginator{background:white;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;color:var(--cps-color-text-dark);padding:1rem;border:solid var(--cps-color-line-mid)}:host ::ng-deep .p-paginator-left-content{margin-right:auto}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page{display:inline-flex;align-items:center}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-table-paginator-items-per-page-title{font-family:Source Sans Pro,sans-serif;font-size:14px;margin-right:12px;cursor:default}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box{min-height:32px!important;background:transparent!important}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box .cps-select-box-items{font-size:14px!important}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box .cps-select-box-chevron .cps-icon{width:14px;height:14px}:host ::ng-deep .p-paginator .p-paginator-current{background-color:transparent;border:0 none;color:var(--cps-color-text-dark);min-width:3rem;margin:.143rem;padding:0 .5rem;font-family:Source Sans Pro,sans-serif;font-size:14px;height:unset}:host ::ng-deep .p-paginator-page,:host ::ng-deep .p-paginator-next,:host ::ng-deep .p-paginator-last,:host ::ng-deep .p-paginator-first,:host ::ng-deep .p-paginator-prev,:host ::ng-deep .p-paginator-current{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1;-webkit-user-select:none;user-select:none;overflow:hidden;position:relative}:host ::ng-deep .p-paginator-current{cursor:default}:host ::ng-deep .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):hover{background:var(--cps-color-highlight-hover);border-color:unset}:host ::ng-deep .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):active{background:var(--cps-color-highlight-active)}:host ::ng-deep .p-paginator .p-paginator-first,:host ::ng-deep .p-paginator .p-paginator-prev,:host ::ng-deep .p-paginator .p-paginator-next,:host ::ng-deep .p-paginator .p-paginator-last{background-color:transparent;border:1px solid var(--cps-color-text-dark);border-radius:4px;color:var(--cps-color-text-dark);min-width:32px;height:32px;margin:.143rem;transition:box-shadow .2s}:host ::ng-deep .p-disabled,:host ::ng-deep .p-disabled *{cursor:default!important;pointer-events:none}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background:var(--cps-color-calm);border-color:var(--cps-color-calm);color:#fff}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:var(--cps-color-highlight-hover);border-color:unset}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):active{background:var(--cps-color-highlight-active)}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page{background-color:transparent;border:1px solid var(--cps-color-text-dark);border-radius:4px;color:var(--cps-color-text-dark);min-width:32px;height:32px;margin:.143rem;transition:box-shadow .2s}:host ::ng-deep .p-paginator-element:focus{z-index:1;position:relative}:host ::ng-deep span.p-paginator-icon{display:contents}:host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:.4}:host ::ng-deep .cps-treetable-empty-message-td{text-align:center!important;font-weight:600;background:white}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-header{border-width:1px 1px 0 1px}:host ::ng-deep .p-treetable .p-treetable-header{font-weight:600;display:flex;justify-content:space-between;align-items:center;padding:0 10px;border:unset;background:unset;border-top:1px solid var(--cps-color-line-mid);border-right:1px solid var(--cps-color-line-mid);border-left:4px solid var(--cps-color-surprise)!important;border-radius:4px 4px 0 0;font-size:16px;line-height:150%;background-color:#fff;color:var(--cps-color-text-darkest);overflow:auto}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left{display:flex;align-items:center}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-global-filter{margin-left:12px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-icon{display:flex;margin-right:8px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-title{cursor:default}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right{display:flex;align-items:center}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-btn-on-select{margin-right:4px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-action-btn{margin-right:4px;margin-left:8px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn{display:contents}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn cps-icon{margin-left:12px;margin-right:4px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn:not(.btn-disabled) cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn:not(.btn-disabled) cps-icon{cursor:pointer}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn:not(.btn-disabled) cps-icon:hover .cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn:not(.btn-disabled) cps-icon:hover .cps-icon{color:var(--cps-color-prepared)!important}:host ::ng-deep .cps-tbar-small.p-treetable .p-treetable-header{height:43px}:host ::ng-deep .cps-tbar-normal.p-treetable .p-treetable-header{height:72px}:host ::ng-deep .p-treetable .p-treetable-footer{background:white;color:#343a40;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;padding:1rem;font-weight:700}:host ::ng-deep .p-treetable .p-treetable-tfoot>tr>td{text-align:left;padding:1rem;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;font-weight:700;color:#343a40;background:white}:host ::ng-deep .p-treetable .p-sortable-column:not(.p-highlight):hover .cps-sortable-column-icon.sort-unsorted .sort-unsorted-arrow-up{border-bottom-color:var(--cps-color-text-mild)}:host ::ng-deep .p-treetable .p-sortable-column:not(.p-highlight):hover .cps-sortable-column-icon.sort-unsorted .sort-unsorted-arrow-down{border-top-color:var(--cps-color-text-mild)}:host ::ng-deep .p-icon-wrapper{display:inline-flex}:host ::ng-deep .p-icon{display:inline-block;width:1rem;height:1rem}:host ::ng-deep .p-treetable .p-sortable-column .cps-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center;font-size:12px;vertical-align:top;color:var(--cps-color-calm);margin-left:.25rem}:host ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none}:host ::ng-deep .p-treetable .p-sortable-column{cursor:pointer;-webkit-user-select:none;user-select:none}:host ::ng-deep .p-treetable .p-sortable-column:focus{box-shadow:none;outline:0 none}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler.p-icon{width:2rem;height:2rem}:host ::ng-deep .p-treetable .p-treetable-tbody>tr.p-highlight{background:#eff6ff;color:#1d4ed8}:host ::ng-deep .p-treetable.p-treetable-hoverable-rows .p-treetable-tbody>tr:not(.p-highlight):hover{background:var(--cps-color-highlight-hover)}:host ::ng-deep .p-treetable-hoverable-rows .p-treetable-tbody>tr{cursor:auto}:host ::ng-deep .p-treetable .p-column-resizer-helper{background:#3b82f6}:host ::ng-deep .p-treetable .p-treetable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:1001;top:0;left:0;width:100%;height:100%;background-color:#fff;transition-duration:.2s;border:1px solid var(--cps-color-line-mid)}:host ::ng-deep .p-treetable.cps-tbar-small .p-treetable-loading-overlay{top:43px;height:calc(100% - 43px)}:host ::ng-deep .p-treetable.cps-tbar-normal .p-treetable-loading-overlay{top:72px;height:calc(100% - 72px)}:host ::ng-deep .cps-treetable-loading .p-treetable{min-height:200px}:host ::ng-deep .cps-treetable-loading .p-treetable.cps-tbar-normal{min-height:272px}:host ::ng-deep .cps-treetable-loading .p-treetable.cps-tbar-small{min-height:243px}:host ::ng-deep .cps-table-col-filter-menu-open .cps-table-col-filter-menu-button{color:var(--cps-color-text-dark)}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-footer{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-top{border-width:0 1px 0 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-bottom{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th{border-width:1px 0 1px 1px}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th:last-child{border-width:1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tbody>tr>td{border-width:0 0 1px 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tfoot>tr>td{border-width:1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tbody>tr>td:last-child{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:only-child{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-tbody>tr>td{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-tfoot>tr>td{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-footer{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-thead>tr>th{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-tbody>tr>td{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-tfoot>tr>td{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-footer{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-striped .p-treetable-tbody>tr:nth-child(odd){background:var(--cps-color-bg-light)}:host ::ng-deep .p-treetable.p-treetable-striped .p-treetable-tbody>tr:nth-child(even){background:#ffffff}:host ::ng-deep .cps-treetable-row-menu-cell{width:55px;border-left:none!important}:host ::ng-deep .cps-treetable-selectable-cell{width:55px;text-align:center!important}:host ::ng-deep .p-checkbox{display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:bottom;position:relative;width:18px;height:18px}:host ::ng-deep .p-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}:host ::ng-deep .p-hidden-accessible input,:host ::ng-deep .p-hidden-accessible select{transform:scale(0)}:host ::ng-deep .p-checkbox .p-checkbox-box{background:#ffffff;width:18px;height:18px;color:var(--cps-color-text-dark);border:2px solid var(--cps-color-text-mild);border-radius:2px;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s}:host ::ng-deep .p-checkbox-box{display:flex;justify-content:center;align-items:center}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:var(--cps-color-calm);background:var(--cps-color-calm)}:host ::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:var(--cps-color-calm);background:var(--cps-color-calm);color:#fff}:host ::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{border-color:var(--cps-color-calm)}:host ::ng-deep .p-checkbox .p-checkbox-box .p-icon{width:14px;height:14px}:host ::ng-deep .p-checkbox .p-checkbox-box .p-checkbox-icon{transition-duration:.2s;color:#fff;font-size:14px}:host ::ng-deep .p-checkbox .p-checkbox-box minusicon .p-checkbox-icon{color:var(--cps-color-calm);width:12px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td p-treetablecheckbox .p-checkbox{margin-right:0}::ng-deep .p-scrollbar-measure{width:100px;height:100px;overflow:scroll;position:absolute;top:-9999px}.cps-treetable-coltoggle-menu{display:block;max-height:242px;overflow-x:hidden;background:white}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item{padding:12px;justify-content:space-between;display:flex;cursor:pointer}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item:hover{background:var(--cps-color-highlight-hover)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-label{color:var(--cps-color-text-dark)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-left{display:flex;align-items:center;margin-right:8px}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-check{background-color:transparent;border:0;width:16px;height:16px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0,0,.2,.1),background-color 90ms cubic-bezier(0,0,.2,.1);margin-right:8px;opacity:0}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-check:after{color:var(--cps-color-calm);top:4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box;position:absolute;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected{font-weight:600}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected .cps-treetable-coltoggle-menu-item-label,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected .cps-treetable-coltoggle-menu-item-label{color:var(--cps-color-calm)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected .cps-treetable-coltoggle-menu-item-check,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected .cps-treetable-coltoggle-menu-item-check{opacity:1}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected{background:var(--cps-color-highlight-selected)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.highlighten{background:var(--cps-color-highlight-active)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected.highlighten{background:var(--cps-color-highlight-selected-dark)}.cps-treetable-coltoggle-menu .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}::ng-deep .cps-select-options-menu.cps-paginator-page-options .cps-select-options-option{font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TreeTableModule }, { kind: "component", type: i3.TreeTable, selector: "p-treeTable", inputs: ["columns", "style", "styleClass", "tableStyle", "tableStyleClass", "autoLayout", "lazy", "lazyLoadOnInit", "paginator", "rows", "first", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "customSort", "selectionMode", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "compareSelectionBy", "rowHover", "loading", "loadingIcon", "showLoader", "scrollable", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "frozenColumns", "resizableColumns", "columnResizeMode", "reorderableColumns", "contextMenu", "rowTrackBy", "filters", "globalFilterFields", "filterDelay", "filterMode", "filterLocale", "virtualRowHeight", "value", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection"], outputs: ["selectionChange", "contextMenuSelectionChange", "onFilter", "onNodeExpand", "onNodeCollapse", "onPage", "onSort", "onLazyLoad", "sortFunction", "onColResize", "onColReorder", "onNodeSelect", "onNodeUnselect", "onContextMenuSelect", "onHeaderCheckboxToggle", "onEditInit", "onEditComplete", "onEditCancel"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.TTRow, selector: "[ttRow]", inputs: ["ttRow"] }, { kind: "component", type: CpsInputComponent, selector: "cps-input", inputs: ["label", "hint", "placeholder", "disabled", "readonly", "width", "type", "loading", "clearable", "prefixIcon", "prefixIconClickable", "prefixIconSize", "prefixText", "hideDetails", "persistentClear", "error", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "appearance", "valueToDisplay", "value"], outputs: ["valueChanged", "focused", "prefixIconClicked", "blurred", "cleared", "enterClicked"] }, { kind: "component", type: CpsButtonComponent, selector: "cps-button", inputs: ["color", "contentColor", "type", "label", "icon", "iconPosition", "size", "width", "height", "disabled", "loading"], outputs: ["clicked"] }, { kind: "component", type: CpsMenuComponent, selector: "cps-menu", inputs: ["header", "items", "withArrow", "compressed", "focusOnShow", "persistent", "containerClass", "showTransitionOptions", "hideTransitionOptions"], outputs: ["menuShown", "menuHidden", "beforeMenuHidden", "contentClicked"] }, { kind: "component", type: CpsIconComponent, selector: "cps-icon", inputs: ["icon", "size", "color"] }, { kind: "component", type: CpsSelectComponent, selector: "cps-select", inputs: ["label", "placeholder", "hint", "returnObject", "multiple", "disabled", "width", "selectAll", "chips", "closableChips", "clearable", "openOnClear", "options", "optionLabel", "optionValue", "optionInfo", "hideDetails", "persistentClear", "prefixIcon", "prefixIconSize", "loading", "virtualScroll", "numToleratedItems", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "optionsClass", "appearance", "value"], outputs: ["valueChanged"] }, { kind: "component", type: CpsLoaderComponent, selector: "cps-loader", inputs: ["fullScreen", "opacity", "labelColor", "showLabel"] }, { kind: "component", type: AngleDoubleLeftIcon, selector: "AngleDoubleLeftIcon" }, { kind: "component", type: AngleLeftIcon, selector: "AngleLeftIcon" }, { kind: "component", type: AngleRightIcon, selector: "AngleRightIcon" }, { kind: "component", type: AngleDoubleRightIcon, selector: "AngleDoubleRightIcon" }, { kind: "directive", type: CpsTreeTableColumnSortableDirective, selector: "[cpsTTColSortable]", inputs: ["cpsTTColSortable"] }, { kind: "directive", type: CpsTreeTableHeaderSelectableDirective, selector: "[cpsTTHdrSelectable]" }, { kind: "directive", type: CpsTreeTableRowSelectableDirective, selector: "[cpsTTRowSelectable]", inputs: ["cpsTTRowSelectable"] }, { kind: "directive", type: CpsTreetableRowTogglerDirective, selector: "[cpsTTRowToggler]", inputs: ["cpsTTRowToggler"] }, { kind: "directive", type: TreeTableUnsortDirective, selector: "[ttWithUnsort]" }, { kind: "component", type: TableRowMenuComponent, selector: "table-row-menu", outputs: ["editRowBtnClicked", "removeRowBtnClicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
526
690
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsTreeTableComponent, decorators: [{
527
691
  type: Component,
528
692
  args: [{ selector: 'cps-tree-table', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
@@ -540,6 +704,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
540
704
  AngleRightIcon,
541
705
  AngleDoubleRightIcon,
542
706
  CpsTreeTableColumnSortableDirective,
707
+ CpsTreeTableHeaderSelectableDirective,
708
+ CpsTreeTableRowSelectableDirective,
709
+ CpsTreetableRowTogglerDirective,
543
710
  TreeTableUnsortDirective,
544
711
  TableRowMenuComponent
545
712
  ], providers: [
@@ -550,7 +717,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
550
717
  // eslint-disable-next-line no-use-before-define
551
718
  deps: [CpsTreeTableComponent]
552
719
  }
553
- ], template: "<p-treeTable\n #primengTreeTable\n ttWithUnsort\n [ngClass]=\"{\n 'cps-treetable-loading': loading,\n 'cps-treetable-flex': defScrollHeight === 'flex',\n 'cps-treetable-nonvirtual': !virtualScroll\n }\"\n [value]=\"data\"\n [scrollable]=\"scrollable\"\n [scrollHeight]=\"scrollHeight\"\n [virtualScroll]=\"virtualScroll\"\n [virtualScrollItemSize]=\"virtualScrollItemSize\"\n [virtualScrollOptions]=\"{\n numToleratedItems: numToleratedItems,\n autoSize: false\n }\"\n [columns]=\"selectedColumns\"\n [loading]=\"loading\"\n [rowHover]=\"rowHover\"\n [lazy]=\"lazy\"\n [(selection)]=\"selectedRows\"\n (selectionChange)=\"onSelectionChanged($event)\"\n compareSelectionBy=\"equals\"\n [lazyLoadOnInit]=\"lazyLoadOnInit\"\n [styleClass]=\"styleClass\"\n [tableStyle]=\"tableStyle\"\n [tableStyleClass]=\"tableStyleClass\"\n [customSort]=\"customSort\"\n [sortMode]=\"sortMode\"\n [globalFilterFields]=\"globalFilterFields\"\n [paginator]=\"paginator\"\n [showCurrentPageReport]=\"true\"\n [alwaysShowPaginator]=\"alwaysShowPaginator\"\n [rows]=\"rows\"\n [first]=\"first\"\n [totalRecords]=\"totalRecords\"\n [resetPageOnSort]=\"resetPageOnSort\"\n currentPageReportTemplate=\"{first} - {last} of {totalRecords}\"\n (onPage)=\"onPageChange($event)\"\n (onSort)=\"onSort($event)\"\n (onFilter)=\"onFilter($event)\"\n (onLazyLoad)=\"onLazyLoaded($event)\"\n (sortFunction)=\"onSortFunction($event)\"\n (onNodeExpand)=\"onNodeExpanded($event)\"\n (onNodeCollapse)=\"onNodeCollapsed($event)\"\n (onNodeSelect)=\"onNodeSelected($event)\"\n (onNodeUnselect)=\"onNodeUnselected($event)\">\n <ng-template pTemplate=\"caption\" *ngIf=\"hasToolbar\">\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-container *ngTemplateOutlet=\"toolbarTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!toolbarTemplate\">\n <div class=\"cps-treetable-tbar-left\">\n <div *ngIf=\"toolbarIcon\" class=\"cps-treetable-tbar-icon\">\n <cps-icon [icon]=\"toolbarIcon\" [color]=\"toolbarIconColor\"></cps-icon>\n </div>\n <div class=\"cps-treetable-tbar-title\">{{ toolbarTitle }}</div>\n <div *ngIf=\"showGlobalFilter\" class=\"cps-treetable-tbar-global-filter\">\n <cps-input\n #globalFilterComp\n prefixIcon=\"search\"\n [placeholder]=\"globalFilterPlaceholder\"\n (valueChanged)=\"onFilterGlobal($event)\"\n [clearable]=\"true\"\n [disabled]=\"loading\"\n [appearance]=\"toolbarSize === 'small' ? 'underlined' : 'outlined'\"\n [hideDetails]=\"true\">\n </cps-input>\n </div>\n </div>\n <div class=\"cps-treetable-tbar-right\">\n <div\n *ngIf=\"showRemoveBtnOnSelect && selectedRows.length > 0\"\n class=\"cps-treetable-tbar-btn-on-select\">\n <cps-button\n label=\"Remove\"\n [disabled]=\"removeBtnOnSelectDisabled\"\n color=\"prepared\"\n type=\"borderless\"\n icon=\"remove\"\n [size]=\"toolbarSize\"\n (clicked)=\"removeSelected()\">\n </cps-button>\n </div>\n <div\n *ngIf=\"showAdditionalBtnOnSelect && selectedRows.length > 0\"\n class=\"cps-treetable-tbar-btn-on-select\">\n <cps-button\n [label]=\"additionalBtnOnSelectTitle\"\n [disabled]=\"additionalBtnOnSelectDisabled\"\n color=\"prepared\"\n type=\"borderless\"\n [size]=\"toolbarSize\"\n (clicked)=\"onClickAdditionalBtnOnSelect()\">\n </cps-button>\n </div>\n <div *ngIf=\"showActionBtn\" class=\"cps-treetable-tbar-action-btn\">\n <cps-button\n [label]=\"actionBtnTitle\"\n [disabled]=\"actionBtnDisabled\"\n color=\"prepared\"\n type=\"outlined\"\n [size]=\"toolbarSize\"\n (clicked)=\"onClickActionBtn()\">\n </cps-button>\n </div>\n <div\n *ngIf=\"showColumnsToggleBtn && columns.length > 0\"\n class=\"cps-treetable-tbar-coltoggle-btn\"\n [ngClass]=\"{ 'btn-disabled': columnsToggleBtnDisabled }\">\n <cps-icon\n icon=\"columns\"\n size=\"normal\"\n [color]=\"\n columnsToggleBtnDisabled ? 'text-lightest' : 'prepared-lighten1'\n \"\n (click)=\"onColumnsToggle($event)\"></cps-icon>\n <cps-menu #colToggleMenu [withArrow]=\"false\">\n <div class=\"cps-treetable-coltoggle-menu\">\n <div\n class=\"cps-treetable-coltoggle-menu-item select-all-option\"\n [class.allselected]=\"selectedColumns.length === columns.length\"\n (click)=\"toggleAllColumns()\">\n <span class=\"cps-treetable-coltoggle-menu-item-left\">\n <span class=\"cps-treetable-coltoggle-menu-item-check\"> </span>\n <span class=\"cps-treetable-coltoggle-menu-item-label\"\n >Show all columns</span\n >\n </span>\n </div>\n <div\n *ngFor=\"let col of columns\"\n class=\"cps-treetable-coltoggle-menu-item\"\n (click)=\"onSelectColumn(col)\"\n [class.selected]=\"isColumnSelected(col)\">\n <span class=\"cps-treetable-coltoggle-menu-item-left\">\n <span class=\"cps-treetable-coltoggle-menu-item-check\"></span>\n <span class=\"cps-treetable-coltoggle-menu-item-label\">{{\n col[colHeaderName]\n }}</span>\n </span>\n </div>\n </div>\n </cps-menu>\n </div>\n <div\n *ngIf=\"showDataReloadBtn\"\n class=\"cps-treetable-tbar-reload-btn\"\n [ngClass]=\"{ 'btn-disabled': dataReloadBtnDisabled }\">\n <cps-icon\n icon=\"refresh\"\n size=\"18\"\n [color]=\"dataReloadBtnDisabled ? 'text-light' : 'prepared-lighten1'\"\n (click)=\"onReloadData()\">\n </cps-icon>\n </div>\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"header\" *ngIf=\"nestedHeaderTemplate\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"\n nestedHeaderTemplate;\n context: {\n $implicit: columns,\n }\n \"></ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"header\" *ngIf=\"!nestedHeaderTemplate\" let-columns>\n <tr>\n <!-- <th style=\"width: 3rem\" *ngIf=\"reorderableRows\"></th> -->\n <th style=\"width: 55px\" *ngIf=\"selectable\">\n <p-treeTableHeaderCheckbox></p-treeTableHeaderCheckbox>\n </th>\n <ng-container *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n headerTemplate;\n context: {\n $implicit: columns,\n }\n \"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!headerTemplate && columns.length > 0\">\n <ng-container *ngIf=\"sortable\">\n <th\n *ngFor=\"let col of columns\"\n [cpsTTColSortable]=\"col[colFieldName]\">\n {{ col[colHeaderName] }}\n </th>\n </ng-container>\n <ng-container *ngIf=\"!sortable\">\n <th *ngFor=\"let col of columns\">\n {{ col[colHeaderName] }}\n </th>\n </ng-container>\n </ng-container>\n <th class=\"cps-treetable-row-menu-cell\" *ngIf=\"showRowMenu\"></th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-rowData=\"rowData\"\n let-columns=\"columns\"\n let-rowNode\n let-rowIndex=\"rowIndex\">\n <tr\n [ttRow]=\"rowNode\"\n [ngClass]=\"{\n 'cps-treetable-row-selected':\n selectable && primengTreeTable.isSelected(rowNode.node)\n }\">\n <!-- <td *ngIf=\"reorderableRows\" class=\"cps-table-row-drag-handle-cell\">\n <span class=\"cps-table-row-drag-handle\" pReorderableRowHandle>\u2630</span>\n </td> -->\n <td style=\"width: 55px\" *ngIf=\"selectable\">\n <p-treeTableCheckbox [value]=\"rowNode\"></p-treeTableCheckbox>\n </td>\n <ng-container *ngIf=\"bodyTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n bodyTemplate;\n context: {\n $implicit: rowNode,\n rowIndex: rowIndex,\n columns: columns,\n rowData: rowData\n }\n \">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!bodyTemplate\">\n <ng-container *ngIf=\"columns.length > 0\">\n <td *ngFor=\"let col of columns; let i = index\">\n <span *ngIf=\"i === 0\" style=\"display: flex\">\n <p-treeTableToggler [rowNode]=\"rowNode\"> </p-treeTableToggler>\n {{ rowData[col[colFieldName]] }}\n </span>\n <ng-container *ngIf=\"i > 0\">{{\n rowData[col[colFieldName]]\n }}</ng-container>\n </td>\n </ng-container>\n </ng-container>\n <td *ngIf=\"showRowMenu\" class=\"cps-treetable-row-menu-cell\">\n <table-row-menu\n (editRowBtnClicked)=\"onEditRowClicked(rowNode.node)\"\n (removeRowBtnClicked)=\"onRemoveRowClicked(rowNode.node)\">\n </table-row-menu>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td\n colspan=\"100\"\n class=\"cps-treetable-empty-message-td\"\n [ngStyle]=\"{ height: emptyBodyHeight }\">\n {{ emptyMessage }}\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"loadingicon\">\n <cps-loader [fullScreen]=\"false\" opacity=\"0\"></cps-loader>\n </ng-template>\n <ng-template pTemplate=\"paginatorleft\">\n <div class=\"cps-table-paginator-itms-per-page\">\n <span class=\"cps-table-paginator-items-per-page-title\"\n >Rows per page:\n </span>\n <cps-select\n [options]=\"rowOptions\"\n [hideDetails]=\"true\"\n [(ngModel)]=\"rows\"\n (valueChanged)=\"onRowsPerPageChanged()\"\n [returnObject]=\"false\"\n optionsClass=\"cps-paginator-page-options\">\n </cps-select>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"paginatorfirstpagelinkicon\">\n <AngleDoubleLeftIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatorpreviouspagelinkicon\">\n <AngleLeftIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatornextpagelinkicon\">\n <AngleRightIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatorlastpagelinkicon\">\n <AngleDoubleRightIcon />\n </ng-template>\n</p-treeTable>\n", styles: [":host ::ng-deep .p-treetable{position:relative}:host ::ng-deep .p-component,:host ::ng-deep .p-component *{box-sizing:border-box}:host ::ng-deep .p-component{font-family:Source Sans Pro,sans-serif;font-size:14px;font-weight:400}:host ::ng-deep .p-treetable-scrollable-wrapper{position:relative}:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable,:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable .p-treetable-scrollable-wrapper,:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable .p-treetable-scrollable-view{height:unset}:host ::ng-deep .cps-treetable-bottom-bordered>.p-treetable-scrollable-wrapper{border-bottom:1px solid var(--cps-color-line-mid)}:host ::ng-deep .p-treetable .p-treetable-scrollable-header,:host ::ng-deep .p-treetable .p-treetable-scrollable-footer{background:white}:host ::ng-deep .p-treetable-scrollable-header,:host ::ng-deep .p-treetable-scrollable-footer{overflow:hidden}:host ::ng-deep .p-treetable table{border-collapse:collapse;width:100%;table-layout:fixed}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th{text-align:left;padding:1rem;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 1px;font-weight:700;color:var(--cps-color-text-mild);background:white;transition:box-shadow .2s}:host ::ng-deep .p-treetable-scrollable-body{overflow:auto!important;position:relative}:host ::ng-deep .cps-treetable-flex .p-treetable-scrollable-body{height:100%}:host ::ng-deep .p-treetable .p-treetable-tbody>tr{background:#ffffff;color:var(--cps-color-text-dark);transition:box-shadow .2s}:host ::ng-deep .p-treetable .p-treetable-tbody>tr.cps-treetable-row-selected{background-color:#f1ebed!important}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td{text-align:left;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;padding:1rem;overflow:hidden}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:first-child{border-width:0 0 1px 1px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:last-child{border-width:0 1px 1px 0}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler{width:1rem;height:1rem;color:var(--cps-color-text-dark);border:0 none;background:transparent;border-radius:50%;margin-right:.5rem}:host ::ng-deep .p-treetable-toggler{cursor:pointer;-webkit-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;overflow:hidden;position:relative}:host ::ng-deep .p-ripple{overflow:hidden;position:relative}:host ::ng-deep .p-link:focus{outline:0 none;outline-offset:0;box-shadow:unset}:host ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:14px;font-family:Source Sans Pro,sans-serif;border-radius:6px}:host ::ng-deep input[type=button],:host ::ng-deep input[type=submit],:host ::ng-deep input[type=reset],:host ::ng-deep input[type=file]::-webkit-file-upload-button,:host ::ng-deep button{border-radius:0}:host ::ng-deep .p-treetable .p-treetable-tbody>tr:focus{outline:0 none;outline-offset:-.15rem}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler:enabled:hover{color:var(--cps-color-calm);border-color:transparent;background:unset}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler:focus{outline:0 none;outline-offset:0;box-shadow:unset}:host ::ng-deep .p-treetable .p-paginator-bottom{border-width:0 1px 1px 1px;border-radius:0}:host ::ng-deep .p-paginator{background:white;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;color:var(--cps-color-text-dark);padding:1rem;border:solid var(--cps-color-line-mid)}:host ::ng-deep .p-paginator-left-content{margin-right:auto}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page{display:inline-flex;align-items:center}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-table-paginator-items-per-page-title{font-family:Source Sans Pro,sans-serif;font-size:14px;margin-right:12px;cursor:default}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box{min-height:32px!important;background:transparent!important}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box .cps-select-box-items{font-size:14px!important}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box .cps-select-box-chevron .cps-icon{width:14px;height:14px}:host ::ng-deep .p-paginator .p-paginator-current{background-color:transparent;border:0 none;color:var(--cps-color-text-dark);min-width:3rem;margin:.143rem;padding:0 .5rem;font-family:Source Sans Pro,sans-serif;font-size:14px;height:unset}:host ::ng-deep .p-paginator-page,:host ::ng-deep .p-paginator-next,:host ::ng-deep .p-paginator-last,:host ::ng-deep .p-paginator-first,:host ::ng-deep .p-paginator-prev,:host ::ng-deep .p-paginator-current{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1;-webkit-user-select:none;user-select:none;overflow:hidden;position:relative}:host ::ng-deep .p-paginator-current{cursor:default}:host ::ng-deep .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):hover{background:var(--cps-color-highlight-hover);border-color:unset}:host ::ng-deep .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):active{background:var(--cps-color-highlight-active)}:host ::ng-deep .p-paginator .p-paginator-first,:host ::ng-deep .p-paginator .p-paginator-prev,:host ::ng-deep .p-paginator .p-paginator-next,:host ::ng-deep .p-paginator .p-paginator-last{background-color:transparent;border:1px solid var(--cps-color-text-dark);border-radius:4px;color:var(--cps-color-text-dark);min-width:32px;height:32px;margin:.143rem;transition:box-shadow .2s}:host ::ng-deep .p-disabled,:host ::ng-deep .p-disabled *{cursor:default!important;pointer-events:none}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background:var(--cps-color-calm);border-color:var(--cps-color-calm);color:#fff}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:var(--cps-color-highlight-hover);border-color:unset}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):active{background:var(--cps-color-highlight-active)}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page{background-color:transparent;border:1px solid var(--cps-color-text-dark);border-radius:4px;color:var(--cps-color-text-dark);min-width:32px;height:32px;margin:.143rem;transition:box-shadow .2s}:host ::ng-deep .p-paginator-element:focus{z-index:1;position:relative}:host ::ng-deep span.p-paginator-icon{display:contents}:host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:.4}:host ::ng-deep .cps-treetable-empty-message-td{text-align:center!important;font-weight:600;background:white}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-header{border-width:1px 1px 0 1px}:host ::ng-deep .p-treetable .p-treetable-header{font-weight:600;display:flex;justify-content:space-between;align-items:center;padding:0 10px;border:unset;background:unset;border-top:1px solid var(--cps-color-line-mid);border-right:1px solid var(--cps-color-line-mid);border-left:4px solid var(--cps-color-surprise)!important;border-radius:4px 4px 0 0;font-size:16px;line-height:150%;background-color:#fff;color:var(--cps-color-text-darkest);overflow:auto}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left{display:flex;align-items:center}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-global-filter{margin-left:12px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-icon{display:flex;margin-right:8px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-title{cursor:default}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right{display:flex;align-items:center}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-btn-on-select{margin-right:4px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-action-btn{margin-right:4px;margin-left:8px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn{display:contents}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn cps-icon{margin-left:12px;margin-right:4px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn:not(.btn-disabled) cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn:not(.btn-disabled) cps-icon{cursor:pointer}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn:not(.btn-disabled) cps-icon:hover .cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn:not(.btn-disabled) cps-icon:hover .cps-icon{color:var(--cps-color-prepared)!important}:host ::ng-deep .cps-tbar-small.p-treetable .p-treetable-header{height:43px}:host ::ng-deep .cps-tbar-normal.p-treetable .p-treetable-header{height:72px}:host ::ng-deep .p-treetable .p-treetable-footer{background:white;color:#343a40;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;padding:1rem;font-weight:700}:host ::ng-deep .p-treetable .p-treetable-tfoot>tr>td{text-align:left;padding:1rem;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;font-weight:700;color:#343a40;background:white}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th:hover sortalticon{opacity:1}:host ::ng-deep .p-treetable .p-sortable-column:not(.p-highlight):hover{background:white;color:var(--cps-color-text-mild)}:host ::ng-deep .p-treetable .p-sortable-column.p-highlight:hover{background:white;color:var(--cps-color-text-mild)}:host ::ng-deep .p-treetable .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon{color:var(--cps-color-text-dark)}:host ::ng-deep .p-treetable .p-sortable-column .p-sortable-column-icon{color:var(--cps-color-text-mild);margin-left:.5rem}:host ::ng-deep .p-treetable .p-sortable-column.p-highlight .p-sortable-column-icon{color:var(--cps-color-calm)}:host ::ng-deep .p-icon-wrapper{display:inline-flex}:host ::ng-deep .p-icon{display:inline-block;width:1rem;height:1rem}:host ::ng-deep .p-sortable-column-icon{width:13px;height:13px}:host ::ng-deep .p-treetable .p-sortable-column .p-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center}:host ::ng-deep .p-treetable .p-sortable-column .p-column-title,:host ::ng-deep .p-treetable .p-sortable-column .p-sortable-column-icon,:host ::ng-deep .p-treetable .p-sortable-column .p-sortable-column-badge{vertical-align:unset}:host ::ng-deep .p-treetable .p-sortable-column .p-sortable-column-badge{border-radius:50%;height:1.125rem;min-width:1.125rem;line-height:1.125rem;color:var(--cps-color-calm);background:var(--cps-color-highlight-active);margin-left:.5rem}:host ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none}:host ::ng-deep .p-treetable .p-sortable-column{cursor:pointer;-webkit-user-select:none;user-select:none}:host ::ng-deep .p-treetable .p-sortable-column:focus{box-shadow:none;outline:0 none}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler.p-icon{width:2rem;height:2rem}:host ::ng-deep .p-treetable .p-treetable-tbody>tr.p-highlight{background:#eff6ff;color:#1d4ed8}:host ::ng-deep .p-treetable.p-treetable-hoverable-rows .p-treetable-tbody>tr:not(.p-highlight):hover{background:var(--cps-color-highlight-hover)}:host ::ng-deep .p-treetable-hoverable-rows .p-treetable-tbody>tr{cursor:auto}:host ::ng-deep .p-treetable .p-column-resizer-helper{background:#3b82f6}:host ::ng-deep .p-treetable .p-treetable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:1001;top:0;left:0;width:100%;height:100%;background-color:#fff;transition-duration:.2s;border:1px solid var(--cps-color-line-mid)}:host ::ng-deep .p-treetable.cps-tbar-small .p-treetable-loading-overlay{top:43px;height:calc(100% - 43px)}:host ::ng-deep .p-treetable.cps-tbar-normal .p-treetable-loading-overlay{top:72px;height:calc(100% - 72px)}:host ::ng-deep .cps-treetable-loading .p-treetable{min-height:200px}:host ::ng-deep .cps-treetable-loading .p-treetable.cps-tbar-normal{min-height:272px}:host ::ng-deep .cps-treetable-loading .p-treetable.cps-tbar-small{min-height:243px}:host ::ng-deep .cps-table-col-filter-menu-open .cps-table-col-filter-menu-button{color:var(--cps-color-text-dark)}:host ::ng-deep sortalticon{opacity:0}:host ::ng-deep p-treetablesorticon{display:inline-flex;align-items:baseline}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-footer{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-top{border-width:0 1px 0 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-bottom{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th{border-width:1px 0 1px 1px}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th:last-child{border-width:1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tbody>tr>td{border-width:0 0 1px 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tfoot>tr>td{border-width:1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tbody>tr>td:last-child{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:only-child{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-tbody>tr>td{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-tfoot>tr>td{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-footer{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-thead>tr>th{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-tbody>tr>td{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-tfoot>tr>td{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-footer{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-striped .p-treetable-tbody>tr:nth-child(odd){background:var(--cps-color-bg-light)}:host ::ng-deep .p-treetable.p-treetable-striped .p-treetable-tbody>tr:nth-child(even){background:#ffffff}:host ::ng-deep .cps-treetable-row-menu-cell{width:55px;border-left:none!important}:host ::ng-deep td:has(p-treetablecheckbox){text-align:center!important}:host ::ng-deep th:has(p-treetableheadercheckbox){text-align:center!important;width:55px!important}:host ::ng-deep .p-checkbox{display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:bottom;position:relative;width:18px;height:18px}:host ::ng-deep .p-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}:host ::ng-deep .p-hidden-accessible input,:host ::ng-deep .p-hidden-accessible select{transform:scale(0)}:host ::ng-deep .p-checkbox .p-checkbox-box{background:#ffffff;width:18px;height:18px;color:var(--cps-color-text-dark);border:2px solid var(--cps-color-text-mild);border-radius:2px;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s}:host ::ng-deep .p-checkbox-box{display:flex;justify-content:center;align-items:center}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:var(--cps-color-calm);background:var(--cps-color-calm)}:host ::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:var(--cps-color-calm);background:var(--cps-color-calm);color:#fff}:host ::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{border-color:var(--cps-color-calm)}:host ::ng-deep .p-checkbox .p-checkbox-box .p-icon{width:14px;height:14px}:host ::ng-deep .p-checkbox .p-checkbox-box .p-checkbox-icon{transition-duration:.2s;color:#fff;font-size:14px}:host ::ng-deep .p-checkbox .p-checkbox-box minusicon .p-checkbox-icon{color:var(--cps-color-calm);width:12px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td p-treetablecheckbox .p-checkbox{margin-right:0}::ng-deep .p-scrollbar-measure{width:100px;height:100px;overflow:scroll;position:absolute;top:-9999px}.cps-treetable-coltoggle-menu{display:block;max-height:242px;overflow-x:hidden;background:white}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item{padding:12px;justify-content:space-between;display:flex;cursor:pointer}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item:hover{background:var(--cps-color-highlight-hover)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-label{color:var(--cps-color-text-dark)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-left{display:flex;align-items:center;margin-right:8px}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-check{background-color:transparent;border:0;width:16px;height:16px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0,0,.2,.1),background-color 90ms cubic-bezier(0,0,.2,.1);margin-right:8px;opacity:0}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-check:after{color:var(--cps-color-calm);top:4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box;position:absolute;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected{font-weight:600}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected .cps-treetable-coltoggle-menu-item-label,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected .cps-treetable-coltoggle-menu-item-label{color:var(--cps-color-calm)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected .cps-treetable-coltoggle-menu-item-check,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected .cps-treetable-coltoggle-menu-item-check{opacity:1}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected{background:#efe4e7}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.highlighten{background:#f5eeef}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected.highlighten{background:#e6d4d9}.cps-treetable-coltoggle-menu .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}::ng-deep .cps-select-options-menu.cps-paginator-page-options .cps-select-options-option{font-size:14px}\n"] }]
720
+ ], template: "<p-treeTable\n #primengTreeTable\n ttWithUnsort\n [ngClass]=\"{\n 'cps-treetable-loading': loading,\n 'cps-treetable-flex': defScrollHeight === 'flex',\n 'cps-treetable-nonvirtual': !virtualScroll,\n 'cps-treetable-autolayout-calced': autoLayout && scrollable,\n }\"\n [value]=\"data\"\n [autoLayout]=\"autoLayout && !scrollable\"\n [scrollable]=\"scrollable\"\n [scrollHeight]=\"scrollHeight\"\n [virtualScroll]=\"virtualScroll\"\n [virtualScrollItemSize]=\"virtualScrollItemSize\"\n [virtualScrollOptions]=\"{\n numToleratedItems: numToleratedItems,\n autoSize: false\n }\"\n [columns]=\"selectedColumns\"\n [loading]=\"loading\"\n [rowHover]=\"rowHover\"\n [lazy]=\"lazy\"\n [(selection)]=\"selectedRows\"\n (selectionChange)=\"onSelectionChanged($event)\"\n compareSelectionBy=\"equals\"\n [lazyLoadOnInit]=\"lazyLoadOnInit\"\n [styleClass]=\"styleClass\"\n [tableStyle]=\"tableStyle\"\n [tableStyleClass]=\"tableStyleClass\"\n [customSort]=\"customSort\"\n [sortMode]=\"sortMode\"\n [globalFilterFields]=\"globalFilterFields\"\n [paginator]=\"paginator\"\n [showCurrentPageReport]=\"true\"\n [alwaysShowPaginator]=\"alwaysShowPaginator\"\n [rows]=\"rows\"\n [first]=\"first\"\n [totalRecords]=\"totalRecords\"\n [resetPageOnSort]=\"resetPageOnSort\"\n currentPageReportTemplate=\"{first} - {last} of {totalRecords}\"\n (onPage)=\"onPageChange($event)\"\n (onSort)=\"onSort($event)\"\n (onFilter)=\"onFilter($event)\"\n (onLazyLoad)=\"onLazyLoaded($event)\"\n (sortFunction)=\"onSortFunction($event)\"\n (onNodeExpand)=\"onNodeExpanded($event)\"\n (onNodeCollapse)=\"onNodeCollapsed($event)\"\n (onNodeSelect)=\"onNodeSelected($event)\"\n (onNodeUnselect)=\"onNodeUnselected($event)\">\n <ng-template pTemplate=\"caption\" *ngIf=\"hasToolbar\">\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-container *ngTemplateOutlet=\"toolbarTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!toolbarTemplate\">\n <div class=\"cps-treetable-tbar-left\">\n <div *ngIf=\"toolbarIcon\" class=\"cps-treetable-tbar-icon\">\n <cps-icon [icon]=\"toolbarIcon\" [color]=\"toolbarIconColor\"></cps-icon>\n </div>\n <div class=\"cps-treetable-tbar-title\">{{ toolbarTitle }}</div>\n <div *ngIf=\"showGlobalFilter\" class=\"cps-treetable-tbar-global-filter\">\n <cps-input\n #globalFilterComp\n prefixIcon=\"search\"\n [placeholder]=\"globalFilterPlaceholder\"\n (valueChanged)=\"onFilterGlobal($event)\"\n [clearable]=\"true\"\n [disabled]=\"loading\"\n [appearance]=\"toolbarSize === 'small' ? 'underlined' : 'outlined'\"\n [hideDetails]=\"true\">\n </cps-input>\n </div>\n </div>\n <div class=\"cps-treetable-tbar-right\">\n <div\n *ngIf=\"showRemoveBtnOnSelect && selectedRows.length > 0\"\n class=\"cps-treetable-tbar-btn-on-select\">\n <cps-button\n label=\"Remove\"\n [disabled]=\"removeBtnOnSelectDisabled\"\n color=\"prepared\"\n type=\"borderless\"\n icon=\"remove\"\n [size]=\"toolbarSize\"\n (clicked)=\"removeSelected()\">\n </cps-button>\n </div>\n <div\n *ngIf=\"showAdditionalBtnOnSelect && selectedRows.length > 0\"\n class=\"cps-treetable-tbar-btn-on-select\">\n <cps-button\n [label]=\"additionalBtnOnSelectTitle\"\n [disabled]=\"additionalBtnOnSelectDisabled\"\n color=\"prepared\"\n type=\"borderless\"\n [size]=\"toolbarSize\"\n (clicked)=\"onClickAdditionalBtnOnSelect()\">\n </cps-button>\n </div>\n <div *ngIf=\"showActionBtn\" class=\"cps-treetable-tbar-action-btn\">\n <cps-button\n [label]=\"actionBtnTitle\"\n [disabled]=\"actionBtnDisabled\"\n color=\"prepared\"\n type=\"outlined\"\n [size]=\"toolbarSize\"\n (clicked)=\"onClickActionBtn()\">\n </cps-button>\n </div>\n <div\n *ngIf=\"showColumnsToggleBtn && columns.length > 0\"\n class=\"cps-treetable-tbar-coltoggle-btn\"\n [ngClass]=\"{ 'btn-disabled': columnsToggleBtnDisabled }\">\n <cps-icon\n icon=\"columns\"\n size=\"normal\"\n [color]=\"\n columnsToggleBtnDisabled ? 'text-lightest' : 'prepared-lighten1'\n \"\n (click)=\"onColumnsToggle($event)\"></cps-icon>\n <cps-menu #colToggleMenu [withArrow]=\"false\">\n <div class=\"cps-treetable-coltoggle-menu\">\n <div\n class=\"cps-treetable-coltoggle-menu-item select-all-option\"\n [class.allselected]=\"selectedColumns.length === columns.length\"\n (click)=\"toggleAllColumns()\">\n <span class=\"cps-treetable-coltoggle-menu-item-left\">\n <span class=\"cps-treetable-coltoggle-menu-item-check\"> </span>\n <span class=\"cps-treetable-coltoggle-menu-item-label\"\n >Show all columns</span\n >\n </span>\n </div>\n <div\n *ngFor=\"let col of columns\"\n class=\"cps-treetable-coltoggle-menu-item\"\n (click)=\"onSelectColumn(col)\"\n [class.selected]=\"isColumnSelected(col)\">\n <span class=\"cps-treetable-coltoggle-menu-item-left\">\n <span class=\"cps-treetable-coltoggle-menu-item-check\"></span>\n <span class=\"cps-treetable-coltoggle-menu-item-label\">{{\n col[colHeaderName]\n }}</span>\n </span>\n </div>\n </div>\n </cps-menu>\n </div>\n <div\n *ngIf=\"showDataReloadBtn\"\n class=\"cps-treetable-tbar-reload-btn\"\n [ngClass]=\"{ 'btn-disabled': dataReloadBtnDisabled }\">\n <cps-icon\n icon=\"refresh\"\n size=\"18\"\n [color]=\"dataReloadBtnDisabled ? 'text-light' : 'prepared-lighten1'\"\n (click)=\"onReloadData()\">\n </cps-icon>\n </div>\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"header\" *ngIf=\"nestedHeaderTemplate\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"\n nestedHeaderTemplate;\n context: {\n $implicit: columns,\n }\n \"></ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"header\" *ngIf=\"!nestedHeaderTemplate\" let-columns>\n <tr>\n <!-- <th style=\"width: 3rem\" *ngIf=\"reorderableRows\"></th> -->\n <th *ngIf=\"selectable\" cpsTTHdrSelectable></th>\n <ng-container *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n headerTemplate;\n context: {\n $implicit: columns,\n }\n \"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!headerTemplate && columns.length > 0\">\n <ng-container *ngIf=\"sortable\">\n <th\n *ngFor=\"let col of columns\"\n [cpsTTColSortable]=\"col[colFieldName]\">\n {{ col[colHeaderName] }}\n </th>\n </ng-container>\n <ng-container *ngIf=\"!sortable\">\n <th *ngFor=\"let col of columns\">\n {{ col[colHeaderName] }}\n </th>\n </ng-container>\n </ng-container>\n <th class=\"cps-treetable-row-menu-cell\" *ngIf=\"showRowMenu\"></th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-rowData=\"rowData\"\n let-columns=\"columns\"\n let-rowNode\n let-rowIndex=\"rowIndex\">\n <tr\n [ttRow]=\"rowNode\"\n [ngClass]=\"{\n 'cps-treetable-row-selected':\n selectable && primengTreeTable.isSelected(rowNode.node)\n }\">\n <!-- <td *ngIf=\"reorderableRows\" class=\"cps-table-row-drag-handle-cell\">\n <span class=\"cps-table-row-drag-handle\" pReorderableRowHandle>\u2630</span>\n </td> -->\n <td [cpsTTRowSelectable]=\"rowNode\" *ngIf=\"selectable\"></td>\n <ng-container *ngIf=\"bodyTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n bodyTemplate;\n context: {\n $implicit: rowNode,\n rowIndex: rowIndex,\n columns: columns,\n rowData: rowData\n }\n \">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!bodyTemplate\">\n <ng-container *ngIf=\"columns.length > 0\">\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <td *ngIf=\"i === 0\" [cpsTTRowToggler]=\"rowNode\">\n {{ rowData[col[colFieldName]] }}\n </td>\n <td *ngIf=\"i > 0\">{{ rowData[col[colFieldName]] }}</td>\n </ng-container>\n </ng-container>\n </ng-container>\n <td *ngIf=\"showRowMenu\" class=\"cps-treetable-row-menu-cell\">\n <table-row-menu\n (editRowBtnClicked)=\"onEditRowClicked(rowNode.node)\"\n (removeRowBtnClicked)=\"onRemoveRowClicked(rowNode.node)\">\n </table-row-menu>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td\n colspan=\"100\"\n class=\"cps-treetable-empty-message-td\"\n [ngStyle]=\"{ height: emptyBodyHeight }\">\n {{ emptyMessage }}\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"loadingicon\">\n <cps-loader [fullScreen]=\"false\" opacity=\"0\"></cps-loader>\n </ng-template>\n <ng-template pTemplate=\"paginatorleft\">\n <div class=\"cps-table-paginator-itms-per-page\">\n <span class=\"cps-table-paginator-items-per-page-title\"\n >Rows per page:\n </span>\n <cps-select\n [options]=\"rowOptions\"\n [hideDetails]=\"true\"\n [(ngModel)]=\"rows\"\n (valueChanged)=\"onRowsPerPageChanged()\"\n [returnObject]=\"false\"\n optionsClass=\"cps-paginator-page-options\">\n </cps-select>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"paginatorfirstpagelinkicon\">\n <AngleDoubleLeftIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatorpreviouspagelinkicon\">\n <AngleLeftIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatornextpagelinkicon\">\n <AngleRightIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatorlastpagelinkicon\">\n <AngleDoubleRightIcon />\n </ng-template>\n</p-treeTable>\n", styles: [":host ::ng-deep .p-treetable{position:relative}:host ::ng-deep .p-component,:host ::ng-deep .p-component *{box-sizing:border-box}:host ::ng-deep .p-component{font-family:Source Sans Pro,sans-serif;font-size:14px;font-weight:400}:host ::ng-deep .p-treetable-scrollable-wrapper{position:relative}:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable,:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable .p-treetable-scrollable-wrapper,:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable .p-treetable-scrollable-view{height:unset}:host ::ng-deep .cps-treetable-bottom-bordered>.p-treetable-scrollable-wrapper{border-bottom:1px solid var(--cps-color-line-mid)}:host ::ng-deep .p-treetable .p-treetable-scrollable-header,:host ::ng-deep .p-treetable .p-treetable-scrollable-footer{background:white}:host ::ng-deep .p-treetable-scrollable-header,:host ::ng-deep .p-treetable-scrollable-footer{overflow:hidden}:host ::ng-deep .p-treetable table{border-collapse:collapse;width:100%;table-layout:fixed}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th{text-align:left;padding:1rem;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 1px;font-weight:400;color:var(--cps-color-text-mild);background:white;transition:box-shadow .2s;overflow:hidden}:host ::ng-deep .p-treetable-scrollable-body{overflow:auto!important;position:relative}:host ::ng-deep .cps-treetable-flex .p-treetable-scrollable-body{height:100%}:host ::ng-deep .p-treetable .p-treetable-tbody{background:#ffffff}:host ::ng-deep .p-treetable .p-treetable-tbody>tr{background:#ffffff;color:var(--cps-color-text-dark);transition:box-shadow .2s}:host ::ng-deep .p-treetable .p-treetable-tbody>tr.cps-treetable-row-selected{background-color:var(--cps-color-highlight-active)!important}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td{text-align:left;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;padding:1rem;overflow:hidden}:host ::ng-deep .cps-treetable-autolayout-calced .p-treetable .p-treetable-scrollable-body .p-treetable-tbody>tr>td:not(.cps-treetable-row-toggler-cell):not(.cps-treetable-selectable-cell):not(.cps-treetable-row-menu-cell):not(.cps-treetable-empty-message-td){opacity:0;border-left-color:transparent}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:first-child{border-width:0 0 1px 1px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:last-child{border-width:0 1px 1px 0}:host ::ng-deep .p-treetable-auto-layout table{table-layout:auto}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler{width:1rem;height:1rem;color:var(--cps-color-text-dark);border:0 none;background:transparent;border-radius:50%;margin-right:.5rem}:host ::ng-deep .p-treetable-toggler{cursor:pointer;-webkit-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;overflow:hidden;position:relative}:host ::ng-deep .p-ripple{overflow:hidden;position:relative}:host ::ng-deep .p-link:focus{outline:0 none;outline-offset:0;box-shadow:unset}:host ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:14px;font-family:Source Sans Pro,sans-serif;border-radius:6px}:host ::ng-deep input[type=button],:host ::ng-deep input[type=submit],:host ::ng-deep input[type=reset],:host ::ng-deep input[type=file]::-webkit-file-upload-button,:host ::ng-deep button{border-radius:0}:host ::ng-deep .p-treetable .p-treetable-tbody>tr:focus{outline:0 none;outline-offset:-.15rem}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler:enabled:hover{color:var(--cps-color-calm);border-color:transparent;background:unset}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler:focus{outline:0 none;outline-offset:0;box-shadow:unset}:host ::ng-deep .p-treetable .p-paginator-bottom{border-width:0 1px 1px 1px;border-radius:0}:host ::ng-deep .p-paginator{background:white;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;color:var(--cps-color-text-dark);padding:1rem;border:solid var(--cps-color-line-mid)}:host ::ng-deep .p-paginator-left-content{margin-right:auto}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page{display:inline-flex;align-items:center}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-table-paginator-items-per-page-title{font-family:Source Sans Pro,sans-serif;font-size:14px;margin-right:12px;cursor:default}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box{min-height:32px!important;background:transparent!important}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box .cps-select-box-items{font-size:14px!important}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box .cps-select-box-chevron .cps-icon{width:14px;height:14px}:host ::ng-deep .p-paginator .p-paginator-current{background-color:transparent;border:0 none;color:var(--cps-color-text-dark);min-width:3rem;margin:.143rem;padding:0 .5rem;font-family:Source Sans Pro,sans-serif;font-size:14px;height:unset}:host ::ng-deep .p-paginator-page,:host ::ng-deep .p-paginator-next,:host ::ng-deep .p-paginator-last,:host ::ng-deep .p-paginator-first,:host ::ng-deep .p-paginator-prev,:host ::ng-deep .p-paginator-current{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1;-webkit-user-select:none;user-select:none;overflow:hidden;position:relative}:host ::ng-deep .p-paginator-current{cursor:default}:host ::ng-deep .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):hover{background:var(--cps-color-highlight-hover);border-color:unset}:host ::ng-deep .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):active{background:var(--cps-color-highlight-active)}:host ::ng-deep .p-paginator .p-paginator-first,:host ::ng-deep .p-paginator .p-paginator-prev,:host ::ng-deep .p-paginator .p-paginator-next,:host ::ng-deep .p-paginator .p-paginator-last{background-color:transparent;border:1px solid var(--cps-color-text-dark);border-radius:4px;color:var(--cps-color-text-dark);min-width:32px;height:32px;margin:.143rem;transition:box-shadow .2s}:host ::ng-deep .p-disabled,:host ::ng-deep .p-disabled *{cursor:default!important;pointer-events:none}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background:var(--cps-color-calm);border-color:var(--cps-color-calm);color:#fff}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:var(--cps-color-highlight-hover);border-color:unset}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):active{background:var(--cps-color-highlight-active)}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page{background-color:transparent;border:1px solid var(--cps-color-text-dark);border-radius:4px;color:var(--cps-color-text-dark);min-width:32px;height:32px;margin:.143rem;transition:box-shadow .2s}:host ::ng-deep .p-paginator-element:focus{z-index:1;position:relative}:host ::ng-deep span.p-paginator-icon{display:contents}:host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:.4}:host ::ng-deep .cps-treetable-empty-message-td{text-align:center!important;font-weight:600;background:white}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-header{border-width:1px 1px 0 1px}:host ::ng-deep .p-treetable .p-treetable-header{font-weight:600;display:flex;justify-content:space-between;align-items:center;padding:0 10px;border:unset;background:unset;border-top:1px solid var(--cps-color-line-mid);border-right:1px solid var(--cps-color-line-mid);border-left:4px solid var(--cps-color-surprise)!important;border-radius:4px 4px 0 0;font-size:16px;line-height:150%;background-color:#fff;color:var(--cps-color-text-darkest);overflow:auto}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left{display:flex;align-items:center}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-global-filter{margin-left:12px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-icon{display:flex;margin-right:8px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-title{cursor:default}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right{display:flex;align-items:center}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-btn-on-select{margin-right:4px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-action-btn{margin-right:4px;margin-left:8px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn{display:contents}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn cps-icon{margin-left:12px;margin-right:4px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn:not(.btn-disabled) cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn:not(.btn-disabled) cps-icon{cursor:pointer}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn:not(.btn-disabled) cps-icon:hover .cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn:not(.btn-disabled) cps-icon:hover .cps-icon{color:var(--cps-color-prepared)!important}:host ::ng-deep .cps-tbar-small.p-treetable .p-treetable-header{height:43px}:host ::ng-deep .cps-tbar-normal.p-treetable .p-treetable-header{height:72px}:host ::ng-deep .p-treetable .p-treetable-footer{background:white;color:#343a40;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;padding:1rem;font-weight:700}:host ::ng-deep .p-treetable .p-treetable-tfoot>tr>td{text-align:left;padding:1rem;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;font-weight:700;color:#343a40;background:white}:host ::ng-deep .p-treetable .p-sortable-column:not(.p-highlight):hover .cps-sortable-column-icon.sort-unsorted .sort-unsorted-arrow-up{border-bottom-color:var(--cps-color-text-mild)}:host ::ng-deep .p-treetable .p-sortable-column:not(.p-highlight):hover .cps-sortable-column-icon.sort-unsorted .sort-unsorted-arrow-down{border-top-color:var(--cps-color-text-mild)}:host ::ng-deep .p-icon-wrapper{display:inline-flex}:host ::ng-deep .p-icon{display:inline-block;width:1rem;height:1rem}:host ::ng-deep .p-treetable .p-sortable-column .cps-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center;font-size:12px;vertical-align:top;color:var(--cps-color-calm);margin-left:.25rem}:host ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none}:host ::ng-deep .p-treetable .p-sortable-column{cursor:pointer;-webkit-user-select:none;user-select:none}:host ::ng-deep .p-treetable .p-sortable-column:focus{box-shadow:none;outline:0 none}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler.p-icon{width:2rem;height:2rem}:host ::ng-deep .p-treetable .p-treetable-tbody>tr.p-highlight{background:#eff6ff;color:#1d4ed8}:host ::ng-deep .p-treetable.p-treetable-hoverable-rows .p-treetable-tbody>tr:not(.p-highlight):hover{background:var(--cps-color-highlight-hover)}:host ::ng-deep .p-treetable-hoverable-rows .p-treetable-tbody>tr{cursor:auto}:host ::ng-deep .p-treetable .p-column-resizer-helper{background:#3b82f6}:host ::ng-deep .p-treetable .p-treetable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:1001;top:0;left:0;width:100%;height:100%;background-color:#fff;transition-duration:.2s;border:1px solid var(--cps-color-line-mid)}:host ::ng-deep .p-treetable.cps-tbar-small .p-treetable-loading-overlay{top:43px;height:calc(100% - 43px)}:host ::ng-deep .p-treetable.cps-tbar-normal .p-treetable-loading-overlay{top:72px;height:calc(100% - 72px)}:host ::ng-deep .cps-treetable-loading .p-treetable{min-height:200px}:host ::ng-deep .cps-treetable-loading .p-treetable.cps-tbar-normal{min-height:272px}:host ::ng-deep .cps-treetable-loading .p-treetable.cps-tbar-small{min-height:243px}:host ::ng-deep .cps-table-col-filter-menu-open .cps-table-col-filter-menu-button{color:var(--cps-color-text-dark)}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-footer{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-top{border-width:0 1px 0 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-bottom{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th{border-width:1px 0 1px 1px}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th:last-child{border-width:1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tbody>tr>td{border-width:0 0 1px 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tfoot>tr>td{border-width:1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tbody>tr>td:last-child{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:only-child{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-tbody>tr>td{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-tfoot>tr>td{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-footer{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-thead>tr>th{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-tbody>tr>td{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-tfoot>tr>td{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-footer{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-striped .p-treetable-tbody>tr:nth-child(odd){background:var(--cps-color-bg-light)}:host ::ng-deep .p-treetable.p-treetable-striped .p-treetable-tbody>tr:nth-child(even){background:#ffffff}:host ::ng-deep .cps-treetable-row-menu-cell{width:55px;border-left:none!important}:host ::ng-deep .cps-treetable-selectable-cell{width:55px;text-align:center!important}:host ::ng-deep .p-checkbox{display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:bottom;position:relative;width:18px;height:18px}:host ::ng-deep .p-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}:host ::ng-deep .p-hidden-accessible input,:host ::ng-deep .p-hidden-accessible select{transform:scale(0)}:host ::ng-deep .p-checkbox .p-checkbox-box{background:#ffffff;width:18px;height:18px;color:var(--cps-color-text-dark);border:2px solid var(--cps-color-text-mild);border-radius:2px;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s}:host ::ng-deep .p-checkbox-box{display:flex;justify-content:center;align-items:center}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:var(--cps-color-calm);background:var(--cps-color-calm)}:host ::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:var(--cps-color-calm);background:var(--cps-color-calm);color:#fff}:host ::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{border-color:var(--cps-color-calm)}:host ::ng-deep .p-checkbox .p-checkbox-box .p-icon{width:14px;height:14px}:host ::ng-deep .p-checkbox .p-checkbox-box .p-checkbox-icon{transition-duration:.2s;color:#fff;font-size:14px}:host ::ng-deep .p-checkbox .p-checkbox-box minusicon .p-checkbox-icon{color:var(--cps-color-calm);width:12px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td p-treetablecheckbox .p-checkbox{margin-right:0}::ng-deep .p-scrollbar-measure{width:100px;height:100px;overflow:scroll;position:absolute;top:-9999px}.cps-treetable-coltoggle-menu{display:block;max-height:242px;overflow-x:hidden;background:white}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item{padding:12px;justify-content:space-between;display:flex;cursor:pointer}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item:hover{background:var(--cps-color-highlight-hover)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-label{color:var(--cps-color-text-dark)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-left{display:flex;align-items:center;margin-right:8px}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-check{background-color:transparent;border:0;width:16px;height:16px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0,0,.2,.1),background-color 90ms cubic-bezier(0,0,.2,.1);margin-right:8px;opacity:0}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-check:after{color:var(--cps-color-calm);top:4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box;position:absolute;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected{font-weight:600}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected .cps-treetable-coltoggle-menu-item-label,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected .cps-treetable-coltoggle-menu-item-label{color:var(--cps-color-calm)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected .cps-treetable-coltoggle-menu-item-check,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected .cps-treetable-coltoggle-menu-item-check{opacity:1}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected{background:var(--cps-color-highlight-selected)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.highlighten{background:var(--cps-color-highlight-active)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected.highlighten{background:var(--cps-color-highlight-selected-dark)}.cps-treetable-coltoggle-menu .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}::ng-deep .cps-select-options-menu.cps-paginator-page-options .cps-select-options-option{font-size:14px}\n"] }]
554
721
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { data: [{
555
722
  type: Input
556
723
  }], columns: [{
@@ -563,6 +730,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
563
730
  type: Input
564
731
  }], minWidthForBodyOnly: [{
565
732
  type: Input
733
+ }], autoLayout: [{
734
+ type: Input
566
735
  }], striped: [{
567
736
  type: Input
568
737
  }], bordered: [{
@@ -717,4 +886,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
717
886
  type: ViewChild,
718
887
  args: ['colToggleMenu']
719
888
  }] } });
720
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvY3BzLXRyZWUtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDaEIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdEUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixF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QUFlO3NCQURyQixZQUFZO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSW5DLGNBQWM7c0JBRHBCLFlBQVk7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJbEMsb0JBQW9CO3NCQUQxQixZQUFZO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSXhDLFlBQVk7c0JBRGxCLFlBQVk7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJdkMsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUkvQyxnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBSTdCLGFBQWE7c0JBRFosU0FBUzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgVHJlZVRhYmxlLFxuICBUcmVlVGFibGVTZXJ2aWNlLFxuICBUcmVlVGFibGVNb2R1bGVcbn0gZnJvbSAncHJpbWVuZy90cmVldGFibGUnO1xuaW1wb3J0IHsgRG9tSGFuZGxlciB9IGZyb20gJ3ByaW1lbmcvZG9tJztcbmltcG9ydCB7IEFuZ2xlRG91YmxlTGVmdEljb24gfSBmcm9tICdwcmltZW5nL2ljb25zL2FuZ2xlZG91YmxlbGVmdCc7XG5pbXBvcnQgeyBBbmdsZUxlZnRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9hbmdsZWxlZnQnO1xuaW1wb3J0IHsgQW5nbGVSaWdodEljb24gfSBmcm9tICdwcmltZW5nL2ljb25zL2FuZ2xlcmlnaHQnO1xuaW1wb3J0IHsgQW5nbGVEb3VibGVSaWdodEljb24gfSBmcm9tICdwcmltZW5nL2ljb25zL2FuZ2xlZG91YmxlcmlnaHQnO1xuaW1wb3J0IHsgU29ydEV2ZW50IH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgZmluZCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBDcHNJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1pbnB1dC9jcHMtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IENwc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1idXR0b24vY3BzLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzTWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1tZW51L2Nwcy1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLWljb24vY3BzLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IENwc1NlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1zZWxlY3QvY3BzLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLWxvYWRlci9jcHMtbG9hZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNUcmVlVGFibGVDb2x1bW5Tb3J0YWJsZURpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9jcHMtdHJlZS10YWJsZS1jb2x1bW4tc29ydGFibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRyZWVUYWJsZVVuc29ydERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9pbnRlcm5hbC90cmVlLXRhYmxlLXVuc29ydC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGFibGVSb3dNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLXRhYmxlL3RhYmxlLXJvdy1tZW51L3RhYmxlLXJvdy1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjb252ZXJ0U2l6ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2ludGVybmFsL3NpemUtdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJlZVRhYmxlRmFjdG9yeSh0YWJsZUNvbXBvbmVudDogQ3BzVHJlZVRhYmxlQ29tcG9uZW50KSB7XG4gIHJldHVybiB0YWJsZUNvbXBvbmVudC5wcmltZW5nVHJlZVRhYmxlO1xufVxuXG5leHBvcnQgdHlwZSBDcHNUcmVlVGFibGVTaXplID0gJ3NtYWxsJyB8ICdub3JtYWwnIHwgJ2xhcmdlJztcbmV4cG9ydCB0eXBlIENwc1RyZWVUYWJsZVRvb2xiYXJTaXplID0gJ3NtYWxsJyB8ICdub3JtYWwnO1xuZXhwb3J0IHR5cGUgQ3BzVHJlZVRhYmxlU29ydE1vZGUgPSAnc2luZ2xlJyB8ICdtdWx0aXBsZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcHMtdHJlZS10YWJsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyZWVUYWJsZU1vZHVsZSxcbiAgICBDcHNJbnB1dENvbXBvbmVudCxcbiAgICBDcHNCdXR0b25Db21wb25lbnQsXG4gICAgQ3BzTWVudUNvbXBvbmVudCxcbiAgICBDcHNJY29uQ29tcG9uZW50LFxuICAgIENwc1NlbGVjdENvbXBvbmVudCxcbiAgICBDcHNMb2FkZXJDb21wb25lbnQsXG4gICAgQW5nbGVEb3VibGVMZWZ0SWNvbixcbiAgICBBbmdsZUxlZnRJY29uLFxuICAgIEFuZ2xlUmlnaHRJY29uLFxuICAgIEFuZ2xlRG91YmxlUmlnaHRJY29uLFxuICAgIENwc1RyZWVUYWJsZUNvbHVtblNvcnRhYmxlRGlyZWN0aXZlLFxuICAgIFRyZWVUYWJsZVVuc29ydERpcmVjdGl2ZSxcbiAgICBUYWJsZVJvd01lbnVDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nwcy10cmVlLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgVHJlZVRhYmxlU2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBUcmVlVGFibGUsXG4gICAgICB1c2VGYWN0b3J5OiB0cmVlVGFibGVGYWN0b3J5LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICBkZXBzOiBbQ3BzVHJlZVRhYmxlQ29tcG9uZW50XVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDcHNUcmVlVGFibGVDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25DaGFuZ2VzXG57XG4gIEBJbnB1dCgpIGRhdGE6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGNvbHVtbnM6IHsgW2tleTogc3RyaW5nXTogYW55IH1bXSA9IFtdO1xuICBASW5wdXQoKSBjb2xIZWFkZXJOYW1lID0gJ2hlYWRlcic7XG4gIEBJbnB1dCgpIGNvbEZpZWxkTmFtZSA9ICdmaWVsZCc7XG4gIEBJbnB1dCgpIG1pbldpZHRoOiBudW1iZXIgfCBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgbWluV2lkdGhGb3JCb2R5T25seSA9IHRydWU7XG5cbiAgQElucHV0KCkgc3RyaXBlZCA9IHRydWU7XG4gIEBJbnB1dCgpIGJvcmRlcmVkID0gdHJ1ZTtcbiAgQElucHV0KCkgc2l6ZTogQ3BzVHJlZVRhYmxlU2l6ZSA9ICdub3JtYWwnO1xuICBASW5wdXQoKSBzZWxlY3RhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJvd0hvdmVyID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd1Jvd01lbnUgPSBmYWxzZTtcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHRhYmxlU3R5bGUgPSB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIHRhYmxlU3R5bGVDbGFzcyA9ICcnO1xuXG4gIEBJbnB1dCgpIHNvcnRhYmxlID0gZmFsc2U7IC8vIG1ha2VzIGFsbCBzb3J0YWJsZSBpZiBjb2x1bW5zIGFyZSBwcm92aWRlZFxuICBASW5wdXQoKSBzb3J0TW9kZTogQ3BzVHJlZVRhYmxlU29ydE1vZGUgPSAnc2luZ2xlJztcbiAgQElucHV0KCkgY3VzdG9tU29ydCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGhhc1Rvb2xiYXIgPSB0cnVlO1xuICBASW5wdXQoKSB0b29sYmFyU2l6ZTogQ3BzVHJlZVRhYmxlVG9vbGJhclNpemUgPSAnbm9ybWFsJztcbiAgQElucHV0KCkgdG9vbGJhclRpdGxlID0gJyc7XG4gIEBJbnB1dCgpIHRvb2xiYXJJY29uID0gJyc7XG4gIEBJbnB1dCgpIHRvb2xiYXJJY29uQ29sb3IgPSAnJztcblxuICBASW5wdXQoKSBzY3JvbGxhYmxlID0gdHJ1ZTtcbiAgQElucHV0KCkgc2Nyb2xsSGVpZ2h0ID0gJyc7IC8vICdmbGV4JyBvciB2YWx1ZSsncHgnXG4gIEBJbnB1dCgpIHZpcnR1YWxTY3JvbGwgPSBmYWxzZTsgLy8gd29ya3Mgb25seSBpZiBzY3JvbGxhYmxlIGlzIHRydWVcbiAgQElucHV0KCkgdmlydHVhbFNjcm9sbEl0ZW1IZWlnaHQgPSAwO1xuICBASW5wdXQoKSBudW1Ub2xlcmF0ZWRJdGVtcyA9IDEwO1xuXG4gIEBJbnB1dCgpIHBhZ2luYXRvciA9IGZhbHNlO1xuICBASW5wdXQoKSBhbHdheXNTaG93UGFnaW5hdG9yID0gdHJ1ZTtcbiAgQElucHV0KCkgcm93c1BlclBhZ2VPcHRpb25zOiBudW1iZXJbXSA9IFtdO1xuICBASW5wdXQoKSBmaXJzdCA9IDA7XG4gIEBJbnB1dCgpIHJvd3MgPSAwO1xuICBASW5wdXQoKSByZXNldFBhZ2VPblJvd3NDaGFuZ2UgPSBmYWxzZTtcbiAgQElucHV0KCkgcmVzZXRQYWdlT25Tb3J0ID0gdHJ1ZTtcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzID0gMDtcblxuICBASW5wdXQoKSBlbXB0eU1lc3NhZ2UgPSAnTm8gZGF0YSc7XG4gIEBJbnB1dCgpIGVtcHR5Qm9keUhlaWdodDogbnVtYmVyIHwgc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KCkgbGF6eSA9IGZhbHNlO1xuICBASW5wdXQoKSBsYXp5TG9hZE9uSW5pdCA9IHRydWU7XG5cbiAgQElucHV0KCkgc2hvd0dsb2JhbEZpbHRlciA9IGZhbHNlO1xuICBASW5wdXQoKSBnbG9iYWxGaWx0ZXJQbGFjZWhvbGRlciA9ICdTZWFyY2gnO1xuICBASW5wdXQoKSBnbG9iYWxGaWx0ZXJGaWVsZHM6IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIGNsZWFyR2xvYmFsRmlsdGVyT25Mb2FkaW5nID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2hvd1JlbW92ZUJ0bk9uU2VsZWN0ID0gdHJ1ZTtcbiAgQElucHV0KCkgcmVtb3ZlQnRuT25TZWxlY3REaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNob3dBZGRpdGlvbmFsQnRuT25TZWxlY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgYWRkaXRpb25hbEJ0bk9uU2VsZWN0VGl0bGUgPSAnU2VsZWN0IGFjdGlvbic7XG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxCdG5PblNlbGVjdERpc2FibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2hvd0FjdGlvbkJ0biA9IGZhbHNlO1xuICBASW5wdXQoKSBhY3Rpb25CdG5UaXRsZSA9ICdBY3Rpb24nO1xuICBASW5wdXQoKSBhY3Rpb25CdG5EaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNob3dEYXRhUmVsb2FkQnRuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRhdGFSZWxvYWRCdG5EaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNob3dDb2x1bW5zVG9nZ2xlQnRuID0gZmFsc2U7IC8vIGlmIGV4dGVybmFsIGJvZHkgdGVtcGxhdGUgaXMgcHJvdmlkZWQsIHVzZSBjb2x1bW5zU2VsZWN0ZWQgZXZlbnQgZW1pdHRlclxuICBASW5wdXQoKSBjb2x1bW5zVG9nZ2xlQnRuRGlzYWJsZWQgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG4gIEBPdXRwdXQoKSBhY3Rpb25CdG5DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgYWRkaXRpb25hbEJ0bk9uU2VsZWN0Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG4gIEBPdXRwdXQoKSBlZGl0Um93QnRuQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcm93c1JlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuICBAT3V0cHV0KCkgcGFnZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNvcnRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZmlsdGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGNvbHVtbnNTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBba2V5OiBzdHJpbmddOiBhbnkgfVtdPigpO1xuICBAT3V0cHV0KCkgbGF6eUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZGF0YVJlbG9hZEJ0bkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG5vZGVFeHBhbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbm9kZUNvbGxhcHNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbm9kZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBub2RlVW5zZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBjdXN0b20gc29ydGluZy4gY3VzdG9tU29ydCBtdXN0IGJlIHRydWUuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSBzb3J0IG1ldGEuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGN1c3RvbVNvcnRGdW5jdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAQ29udGVudENoaWxkKCd0b29sYmFyJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHB1YmxpYyB0b29sYmFyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2hlYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgaGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ25lc3RlZEhlYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgbmVzdGVkSGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2JvZHknLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHVibGljIGJvZHlUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZCgncHJpbWVuZ1RyZWVUYWJsZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaW1lbmdUcmVlVGFibGUhOiBUcmVlVGFibGU7XG5cbiAgQFZpZXdDaGlsZCgnZ2xvYmFsRmlsdGVyQ29tcCcpXG4gIGdsb2JhbEZpbHRlckNvbXAhOiBDcHNJbnB1dENvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKCdjb2xUb2dnbGVNZW51JylcbiAgY29sVG9nZ2xlTWVudSE6IENwc01lbnVDb21wb25lbnQ7XG5cbiAgc2VsZWN0ZWRDb2x1bW5zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9W10gPSBbXTtcblxuICByb3dPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBudW1iZXIgfVtdID0gW107XG5cbiAgc2VsZWN0ZWRSb3dzOiBhbnlbXSA9IFtdO1xuXG4gIHZpcnR1YWxTY3JvbGxJdGVtU2l6ZSA9IDA7XG4gIGRlZlNjcm9sbEhlaWdodFB4ID0gMDtcbiAgZGVmU2Nyb2xsSGVpZ2h0UHhJbml0aWFsID0gMDtcbiAgZGVmU2Nyb2xsSGVpZ2h0ID0gJyc7XG5cbiAgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xuICB3aW5kb3dSZXNpemVEZWJvdW5jZXI6IGFueTtcblxuICBoZWFkZXJCb3g6IGFueTtcbiAgc2Nyb2xsYWJsZUJvZHk6IGFueTtcbiAgc2Nyb2xsYmFyV2lkdGggPSAwO1xuICBzY3JvbGxiYXJWaXNpYmxlID0gdHJ1ZTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICAgIGVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IGVudHJ5LnRhcmdldDtcbiAgICAgICAgdGhpcy5zY3JvbGxiYXJWaXNpYmxlID0gYm9keS5zY3JvbGxIZWlnaHQgPiBib2R5LmNsaWVudEhlaWdodDtcblxuICAgICAgICBpZiAodGhpcy5zY3JvbGxiYXJWaXNpYmxlICYmIHRoaXMudmlydHVhbFNjcm9sbClcbiAgICAgICAgICB0aGlzLnNjcm9sbGFibGVCb2R5LnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgICAgJ292ZXJmbG93JyxcbiAgICAgICAgICAgICdhdXRvJyxcbiAgICAgICAgICAgICdpbXBvcnRhbnQnXG4gICAgICAgICAgKTtcblxuICAgICAgICBsZXQgd1Njcm9sbCA9IHRoaXMuc2Nyb2xsYmFyVmlzaWJsZSA/IHRoaXMuc2Nyb2xsYmFyV2lkdGggOiAwO1xuICAgICAgICBpZiAod1Njcm9sbCA+IDApIHdTY3JvbGwgLT0gMTtcblxuICAgICAgICB0aGlzLmhlYWRlckJveC5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHt3U2Nyb2xsfXB4YDtcbiAgICAgICAgdGhpcy5oZWFkZXJCb3guc3R5bGUuYm9yZGVyUmlnaHQgPVxuICAgICAgICAgIHdTY3JvbGwgPiAwID8gJzFweCBzb2xpZCAjZDdkNWQ1JyA6ICd1bnNldCc7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zY3JvbGxhYmxlKSB0aGlzLnZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcbiAgICB0aGlzLmVtcHR5Qm9keUhlaWdodCA9IGNvbnZlcnRTaXplKHRoaXMuZW1wdHlCb2R5SGVpZ2h0KTtcbiAgICB0aGlzLm1pbldpZHRoID0gY29udmVydFNpemUodGhpcy5taW5XaWR0aCk7XG5cbiAgICBpZiAodGhpcy5zaG93QWRkaXRpb25hbEJ0bk9uU2VsZWN0KSB0aGlzLnNob3dSZW1vdmVCdG5PblNlbGVjdCA9IGZhbHNlO1xuXG4gICAgdGhpcy5kZWZTY3JvbGxIZWlnaHQgPSB0aGlzLnNjcm9sbEhlaWdodDtcbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25XaW5kb3dSZXNpemUuYmluZCh0aGlzKSk7XG5cbiAgICAgIGlmICh0aGlzLmRlZlNjcm9sbEhlaWdodCAmJiB0aGlzLmRlZlNjcm9sbEhlaWdodCAhPT0gJ2ZsZXgnKSB7XG4gICAgICAgIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0UHggPSBwYXJzZUludCh0aGlzLnNjcm9sbEhlaWdodCwgMTApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgaWYgKHRoaXMucm93c1BlclBhZ2VPcHRpb25zLmxlbmd0aCA8IDEpXG4gICAgICAgIHRoaXMucm93c1BlclBhZ2VPcHRpb25zID0gWzUsIDEwLCAyNSwgNTBdO1xuXG4gICAgICBpZiAoIXRoaXMucm93cykgdGhpcy5yb3dzID0gdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnNbMF07XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5pbmNsdWRlcyh0aGlzLnJvd3MpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb3dzUGVyUGFnZU9wdGlvbnMgbXVzdCBpbmNsdWRlIHJvd3MnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnJvd09wdGlvbnMgPSB0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5tYXAoKHYpID0+ICh7XG4gICAgICAgIGxhYmVsOiAnJyArIHYsXG4gICAgICAgIHZhbHVlOiB2XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zaG93R2xvYmFsRmlsdGVyICYmXG4gICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcz8ubGVuZ3RoIDwgMSAmJlxuICAgICAgdGhpcy5kYXRhPy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcyA9IE9iamVjdC5rZXlzKHRoaXMuZGF0YVswXS5kYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXRNaW5XaWR0aE92ZXJhbGwoKTtcblxuICAgIHRoaXMuc2Nyb2xsYWJsZUJvZHkgPSB0aGlzLnByaW1lbmdUcmVlVGFibGUuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5wLXRyZWV0YWJsZS1zY3JvbGxhYmxlLWJvZHknXG4gICAgKTtcbiAgICBpZiAodGhpcy5zY3JvbGxhYmxlQm9keSkge1xuICAgICAgaWYgKHRoaXMubWluV2lkdGhGb3JCb2R5T25seSAmJiB0aGlzLm1pbldpZHRoKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5zY3JvbGxhYmxlQm9keS5xdWVyeVNlbGVjdG9yKCd0YWJsZScpO1xuICAgICAgICBpZiAodGFibGUpIHRhYmxlLnN0eWxlLm1pbldpZHRoID0gdGhpcy5taW5XaWR0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbCAmJiB0aGlzLmRlZlNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnKSB7XG4gICAgICAgIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0UHggPSB0aGlzLnNjcm9sbGFibGVCb2R5LmNsaWVudEhlaWdodDtcbiAgICAgICAgdGhpcy5kZWZTY3JvbGxIZWlnaHRQeEluaXRpYWwgPSB0aGlzLmRlZlNjcm9sbEhlaWdodFB4O1xuICAgICAgfVxuXG4gICAgICB0aGlzLmhlYWRlckJveCA9IHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcucC10cmVldGFibGUtc2Nyb2xsYWJsZS1oZWFkZXItYm94J1xuICAgICAgKTtcblxuICAgICAgaWYgKHRoaXMuaGVhZGVyQm94KSB7XG4gICAgICAgIGlmICh0aGlzLm1pbldpZHRoRm9yQm9keU9ubHkgJiYgdGhpcy5taW5XaWR0aCkge1xuICAgICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5oZWFkZXJCb3gucXVlcnlTZWxlY3RvcigndGFibGUnKTtcbiAgICAgICAgICBpZiAodGFibGUpIHRhYmxlLnN0eWxlLm1pbldpZHRoID0gdGhpcy5taW5XaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2Nyb2xsYmFyV2lkdGggPSBEb21IYW5kbGVyLmNhbGN1bGF0ZVNjcm9sbGJhcldpZHRoKCk7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnNjcm9sbGFibGVCb2R5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVWaXJ0dWFsU2Nyb2xsSXRlbVNpemUoKSB7XG4gICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGwgfHwgdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbUhlaWdodCkgcmV0dXJuO1xuXG4gICAgY29uc3QgdHJzID0gdGhpcy5wcmltZW5nVHJlZVRhYmxlPy5lbD8ubmF0aXZlRWxlbWVudFxuICAgICAgPy5xdWVyeVNlbGVjdG9yKCcucC10cmVldGFibGUtdGJvZHknKVxuICAgICAgPy5xdWVyeVNlbGVjdG9yQWxsKCd0cicpO1xuXG4gICAgaWYgKCF0cnM/Lmxlbmd0aCkgcmV0dXJuO1xuICAgIGlmICghdHJzWzBdPy5vZmZzZXRIZWlnaHQpIHJldHVybjtcblxuICAgIGxldCBoID0gMDtcbiAgICB0cnMuZm9yRWFjaCgodHI6IEhUTUxFbGVtZW50LCBpZHg6IG51bWJlcikgPT4ge1xuICAgICAgbGV0IHJoID0gMDtcbiAgICAgIGNvbnN0IHRkcyA9IHRyPy5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpO1xuICAgICAgdGRzPy5mb3JFYWNoKCh0ZDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgdGQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIGlmICh0ZC5vZmZzZXRIZWlnaHQpIHJoID0gTWF0aC5tYXgocmgsIHRkLm9mZnNldEhlaWdodCk7XG4gICAgICAgIHRkLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgIH0pO1xuICAgICAgaWYgKHJoKSB7XG4gICAgICAgIGggPSBpZHggPT09IDAgPyByaCA6IE1hdGgubWluKGgsIHJoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMudmlydHVhbFNjcm9sbEl0ZW1TaXplID0gaDtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbCkgcmV0dXJuO1xuXG4gICAgaWYgKCF0aGlzLmRlZlNjcm9sbEhlaWdodFB4ICYmIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ID09PSAnZmxleCcpIHtcbiAgICAgIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0UHggPSB0aGlzLnNjcm9sbGFibGVCb2R5LmNsaWVudEhlaWdodDtcbiAgICAgIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0UHhJbml0aWFsID0gdGhpcy5kZWZTY3JvbGxIZWlnaHRQeDtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUpIHtcbiAgICAgIHRoaXMuX3JlY2FsY1ZpcnR1YWxIZWlnaHQoKTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldE1pbldpZHRoT3ZlcmFsbCgpIHtcbiAgICBpZiAodGhpcy5taW5XaWR0aEZvckJvZHlPbmx5IHx8ICF0aGlzLm1pbldpZHRoIHx8ICF0aGlzLnByaW1lbmdUcmVlVGFibGUpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCB0cmVlVGFibGVNYWluID1cbiAgICAgIHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5lbD8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcignLnAtdHJlZXRhYmxlJyk7XG4gICAgaWYgKHRyZWVUYWJsZU1haW4pIHtcbiAgICAgIHRyZWVUYWJsZU1haW4uc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gICAgICBjb25zdCBwYWdpbmF0b3JFbCA9IHRyZWVUYWJsZU1haW4ucXVlcnlTZWxlY3RvcignLnAtcGFnaW5hdG9yJyk7XG4gICAgICBpZiAocGFnaW5hdG9yRWwpIHBhZ2luYXRvckVsLnN0eWxlLm1pbldpZHRoID0gdGhpcy5taW5XaWR0aDtcbiAgICAgIGNvbnN0IGxvYWRpbmdPdmVybGF5ID0gdHJlZVRhYmxlTWFpbi5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLnAtdHJlZXRhYmxlLWxvYWRpbmctb3ZlcmxheSdcbiAgICAgICk7XG4gICAgICBpZiAobG9hZGluZ092ZXJsYXkpIGxvYWRpbmdPdmVybGF5LnN0eWxlLm1pbldpZHRoID0gdGhpcy5taW5XaWR0aDtcbiAgICB9XG5cbiAgICBjb25zdCBzY3JvbGxhYmxlV3JhcHBlciA9XG4gICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZWw/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcucC10cmVldGFibGUtc2Nyb2xsYWJsZS13cmFwcGVyJ1xuICAgICAgKTtcbiAgICBpZiAoc2Nyb2xsYWJsZVdyYXBwZXIpIHNjcm9sbGFibGVXcmFwcGVyLnN0eWxlLm1pbldpZHRoID0gdGhpcy5taW5XaWR0aDtcblxuICAgIGNvbnN0IHRyZWVUYWJsZUhlYWRlciA9XG4gICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZWw/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcucC10cmVldGFibGUtaGVhZGVyJ1xuICAgICAgKTtcbiAgICBpZiAodHJlZVRhYmxlSGVhZGVyKSB0cmVlVGFibGVIZWFkZXIuc3R5bGUubWluV2lkdGggPSB0aGlzLm1pbldpZHRoO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIGlmICh0aGlzLmNsZWFyR2xvYmFsRmlsdGVyT25Mb2FkaW5nKSB0aGlzLmNsZWFyR2xvYmFsRmlsdGVyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbEl0ZW1IZWlnaHQpXG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxJdGVtU2l6ZSA9IHRoaXMudmlydHVhbFNjcm9sbEl0ZW1IZWlnaHQ7XG5cbiAgICB0aGlzLl9zZXRNaW5XaWR0aE92ZXJhbGwoKTtcblxuICAgIGNvbnN0IGRhdGFDaGFuZ2VzID0gY2hhbmdlcz8uZGF0YTtcbiAgICBpZiAoZGF0YUNoYW5nZXM/LnByZXZpb3VzVmFsdWUgIT09IGRhdGFDaGFuZ2VzPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbClcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9vbldpbmRvd1Jlc2l6ZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIGNsZWFyR2xvYmFsRmlsdGVyKCkge1xuICAgIHRoaXMuZ2xvYmFsRmlsdGVyQ29tcD8uY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uV2luZG93UmVzaXplKCkge1xuICAgIC8vIGlmICh0aGlzLmRlZlNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnKVxuICAgIC8vICAgdGhpcy5kZWZTY3JvbGxIZWlnaHRQeCA9IHRoaXMuc2Nyb2xsYWJsZUJvZHkuY2xpZW50SGVpZ2h0O1xuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMud2luZG93UmVzaXplRGVib3VuY2VyKTtcbiAgICB0aGlzLndpbmRvd1Jlc2l6ZURlYm91bmNlciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fcmVjYWxjVmlydHVhbEhlaWdodCgpO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBnZXQgc3R5bGVDbGFzcygpIHtcbiAgICBjb25zdCBjbGFzc2VzTGlzdCA9IFtdO1xuICAgIHN3aXRjaCAodGhpcy5zaXplKSB7XG4gICAgICBjYXNlICdzbWFsbCc6XG4gICAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ3AtdHJlZXRhYmxlLXNtJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbGFyZ2UnOlxuICAgICAgICBjbGFzc2VzTGlzdC5wdXNoKCdwLXRyZWV0YWJsZS1sZycpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzVG9vbGJhcikge1xuICAgICAgc3dpdGNoICh0aGlzLnRvb2xiYXJTaXplKSB7XG4gICAgICAgIGNhc2UgJ3NtYWxsJzpcbiAgICAgICAgICBjbGFzc2VzTGlzdC5wdXNoKCdjcHMtdGJhci1zbWFsbCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdub3JtYWwnOlxuICAgICAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ2Nwcy10YmFyLW5vcm1hbCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5zdHJpcGVkKSB7XG4gICAgICBjbGFzc2VzTGlzdC5wdXNoKCdwLXRyZWV0YWJsZS1zdHJpcGVkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmJvcmRlcmVkKSB7XG4gICAgICBjbGFzc2VzTGlzdC5wdXNoKCdwLXRyZWV0YWJsZS1ncmlkbGluZXMnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zY3JvbGxIZWlnaHQgJiYgIXRoaXMubG9hZGluZyAmJiB0aGlzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgY2xhc3Nlc0xpc3QucHVzaCgnY3BzLXRyZWV0YWJsZS1ib3R0b20tYm9yZGVyZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3Nlc0xpc3Quam9pbignICcpO1xuICB9XG5cbiAgb25Tb3J0RnVuY3Rpb24oZXZlbnQ6IFNvcnRFdmVudCkge1xuICAgIHRoaXMuY3VzdG9tU29ydEZ1bmN0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVjYWxjVmlydHVhbEhlaWdodCgpIHtcbiAgICBpZiAoIXRoaXMuc2Nyb2xsYmFyVmlzaWJsZSAmJiB0aGlzLnZpcnR1YWxTY3JvbGwpXG4gICAgICB0aGlzLnNjcm9sbGFibGVCb2R5LnN0eWxlLnNldFByb3BlcnR5KCdvdmVyZmxvdycsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwgJiYgdGhpcy5kZWZTY3JvbGxIZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlydHVhbFNjcm9sbEl0ZW1TaXplKCk7XG4gICAgICAgIGNvbnN0IGl0ZW1zTGVuID0gdGhpcy5wcmltZW5nVHJlZVRhYmxlLnNlcmlhbGl6ZWRWYWx1ZS5sZW5ndGg7XG4gICAgICAgIGlmIChpdGVtc0xlbiA8IDEpIHtcbiAgICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9IHRoaXMuZW1wdHlCb2R5SGVpZ2h0XG4gICAgICAgICAgICA/IChgY2FsYygke3RoaXMuZW1wdHlCb2R5SGVpZ2h0fSArIDFweClgIGFzIHN0cmluZylcbiAgICAgICAgICAgIDogdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgKyAxICsgJ3B4JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjdXJIZWlnaHQgPSB0aGlzLnZpcnR1YWxTY3JvbGxJdGVtU2l6ZSAqIGl0ZW1zTGVuICsgMjtcbiAgICAgICAgICBpZiAodGhpcy5kZWZTY3JvbGxIZWlnaHQgPT09ICdmbGV4Jykge1xuICAgICAgICAgICAgaWYgKGN1ckhlaWdodCA+PSB0aGlzLmRlZlNjcm9sbEhlaWdodFB4SW5pdGlhbCkge1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9ICdmbGV4JztcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxhYmxlQm9keS5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICAgICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPVxuICAgICAgICAgICAgTWF0aC5taW4odGhpcy5kZWZTY3JvbGxIZWlnaHRQeCwgY3VySGVpZ2h0KSArICdweCc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uRmlsdGVyR2xvYmFsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZmlsdGVyR2xvYmFsKHZhbHVlLCAnY29udGFpbnMnKTtcbiAgfVxuXG4gIG9uQ2xpY2tBZGRpdGlvbmFsQnRuT25TZWxlY3QoKSB7XG4gICAgdGhpcy5hZGRpdGlvbmFsQnRuT25TZWxlY3RDbGlja2VkLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICB9XG5cbiAgb25DbGlja0FjdGlvbkJ0bigpIHtcbiAgICB0aGlzLmFjdGlvbkJ0bkNsaWNrZWQuZW1pdCgpO1xuICB9XG5cbiAgb25SZWxvYWREYXRhKCkge1xuICAgIGlmICh0aGlzLmRhdGFSZWxvYWRCdG5EaXNhYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuZGF0YVJlbG9hZEJ0bkNsaWNrZWQuZW1pdCgpO1xuICB9XG5cbiAgb25Db2x1bW5zVG9nZ2xlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zVG9nZ2xlQnRuRGlzYWJsZWQpIHJldHVybjtcbiAgICB0aGlzLmNvbFRvZ2dsZU1lbnU/LnRvZ2dsZShldmVudCk7XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkUm93cy5mb3JFYWNoKChyb3cpID0+IHRoaXMuX3JlbW92ZU5vZGVGcm9tRGF0YShyb3csIGZhbHNlKSk7XG4gICAgdGhpcy5kYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgdGhpcy5yb3dzUmVtb3ZlZC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5fcmVjYWxjVmlydHVhbEhlaWdodCgpO1xuICB9XG5cbiAgY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcbiAgfVxuXG4gIG9uRWRpdFJvd0NsaWNrZWQobm9kZTogYW55KSB7XG4gICAgdGhpcy5lZGl0Um93QnRuQ2xpY2tlZC5lbWl0KG5vZGUpO1xuICB9XG5cbiAgb25SZW1vdmVSb3dDbGlja2VkKG5vZGU6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gdGhpcy5zZWxlY3RlZFJvd3MuZmlsdGVyKCh2OiBhbnkpID0+IHYgIT09IG5vZGUpO1xuICAgIHRoaXMuX3JlbW92ZU5vZGVGcm9tRGF0YShub2RlKTtcbiAgICB0aGlzLnJvd3NSZW1vdmVkLmVtaXQoW25vZGVdKTtcbiAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gIH1cblxuICBwcml2YXRlIF9yZW1vdmVOb2RlRnJvbURhdGEobm9kZVRvUmVtb3ZlOiBhbnksIHNpbmdsZSA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zdCBfZmluZFRvcFNvcnRPcmRlciA9IChfbm9kZTogYW55KTogYW55ID0+IHtcbiAgICAgIGlmICghX25vZGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAodHlwZW9mIF9ub2RlLl9kZWZhdWx0U29ydE9yZGVyID09PSAnbnVtYmVyJylcbiAgICAgICAgcmV0dXJuIF9ub2RlLl9kZWZhdWx0U29ydE9yZGVyO1xuICAgICAgcmV0dXJuIF9maW5kVG9wU29ydE9yZGVyKF9ub2RlLnBhcmVudCk7XG4gICAgfTtcblxuICAgIGNvbnN0IF9yZW1vdmVGcm9tQ2hpbGRyZW4gPSAoX25vZGU6IGFueSkgPT4ge1xuICAgICAgaWYgKCFfbm9kZT8uY2hpbGRyZW4pIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGlkeCA9IF9ub2RlLmNoaWxkcmVuLmluZGV4T2Yobm9kZVRvUmVtb3ZlKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBfbm9kZS5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgaWYgKF9ub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGRlbGV0ZSBfbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgX25vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoX3JlbW92ZUZyb21DaGlsZHJlbihjaGlsZCkpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gbG9jYXRlIHRvcCBsZXZlbCBub2RlXG4gICAgY29uc3Qgc29ydE9yZGVyID0gX2ZpbmRUb3BTb3J0T3JkZXIobm9kZVRvUmVtb3ZlKTtcbiAgICBpZiAoc29ydE9yZGVyID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICBjb25zdCBub2RlID0gdGhpcy5kYXRhLmZpbmQoKG4pID0+IG4uX2RlZmF1bHRTb3J0T3JkZXIgPT09IHNvcnRPcmRlcik7XG4gICAgaWYgKCFub2RlKSByZXR1cm47XG5cbiAgICAvLyByZW1vdmUgdGhlIG5vZGUgaXRzZWxmIG9yIHJlbW92ZSBpdHMgY2hpbGRcbiAgICBpZiAobm9kZVRvUmVtb3ZlID09PSBub2RlKSB7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuZmlsdGVyKCh2OiBhbnkpID0+IHYgIT09IG5vZGVUb1JlbW92ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIF9yZW1vdmVGcm9tQ2hpbGRyZW4obm9kZSk7XG4gICAgICAgIGlmIChzaW5nbGUpIHRoaXMuZGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUFsbENvbHVtbnMoKSB7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPVxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoIDwgdGhpcy5jb2x1bW5zLmxlbmd0aCA/IHRoaXMuY29sdW1ucyA6IFtdO1xuICAgIHRoaXMuY29sdW1uc1NlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZENvbHVtbnMpO1xuICB9XG5cbiAgaXNDb2x1bW5TZWxlY3RlZChjb2w6IGFueSkge1xuICAgIHJldHVybiAhIWZpbmQodGhpcy5zZWxlY3RlZENvbHVtbnMsIChpdGVtKSA9PiBpc0VxdWFsKGl0ZW0sIGNvbCkpO1xuICB9XG5cbiAgb25Sb3dzUGVyUGFnZUNoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMucmVzZXRQYWdlT25Sb3dzQ2hhbmdlKSB7XG4gICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZmlyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZVBhZ2UodGhpcy5nZXRQYWdlKCkpO1xuICB9XG5cbiAgZ2V0UGFnZUNvdW50KCkge1xuICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5wcmltZW5nVHJlZVRhYmxlLnRvdGFsUmVjb3JkcyAvIHRoaXMucm93cyk7XG4gIH1cblxuICBnZXRQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5wcmltZW5nVHJlZVRhYmxlLmZpcnN0IC8gdGhpcy5yb3dzKTtcbiAgfVxuXG4gIGNoYW5nZVBhZ2UocDogbnVtYmVyKSB7XG4gICAgY29uc3QgcGMgPSBNYXRoLmNlaWwodGhpcy5nZXRQYWdlQ291bnQoKSk7XG5cbiAgICBpZiAocCA+PSAwICYmIHAgPCBwYykge1xuICAgICAgdGhpcy5maXJzdCA9IHRoaXMucm93cyAqIHA7XG4gICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUub25QYWdlQ2hhbmdlKHtcbiAgICAgICAgZmlyc3Q6IHRoaXMuZmlyc3QsXG4gICAgICAgIHJvd3M6IHRoaXMucm93c1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpcnN0ID0gZXZlbnQuZmlyc3Q7XG4gICAgdGhpcy5yb3dzID0gZXZlbnQucm93cztcblxuICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgcGFnZTogdGhpcy5nZXRQYWdlKCksXG4gICAgICBmaXJzdDogdGhpcy5maXJzdCxcbiAgICAgIHJvd3M6IHRoaXMucm93cyxcbiAgICAgIHBhZ2VDb3VudDogTWF0aC5jZWlsKHRoaXMuZ2V0UGFnZUNvdW50KCkpXG4gICAgfTtcblxuICAgIHRoaXMucGFnZUNoYW5nZWQuZW1pdChzdGF0ZSk7XG4gIH1cblxuICBvbkxhenlMb2FkZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubGF6eUxvYWRlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uTm9kZUV4cGFuZGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vZGVFeHBhbmRlZC5lbWl0KGV2ZW50KTtcbiAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gIH1cblxuICBvbk5vZGVDb2xsYXBzZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubm9kZUNvbGxhcHNlZC5lbWl0KGV2ZW50KTtcbiAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gIH1cblxuICBvbk5vZGVTZWxlY3RlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5ub2RlU2VsZWN0ZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvbk5vZGVVbnNlbGVjdGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vZGVVbnNlbGVjdGVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25Tb3J0KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNvcnRlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uRmlsdGVyKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpbHRlcmVkLmVtaXQoZXZlbnQpO1xuICAgIHRoaXMuX3JlY2FsY1ZpcnR1YWxIZWlnaHQoKTtcbiAgfVxuXG4gIG9uU2VsZWN0Q29sdW1uKGNvbDogYW55KSB7XG4gICAgbGV0IHJlcyA9IFtdIGFzIGFueTtcbiAgICBpZiAodGhpcy5pc0NvbHVtblNlbGVjdGVkKGNvbCkpIHtcbiAgICAgIHJlcyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbHRlcigodjogYW55KSA9PiAhaXNFcXVhbCh2LCBjb2wpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKG8pID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNvbWUoKHY6IGFueSkgPT4gaXNFcXVhbCh2LCBvKSkgfHxcbiAgICAgICAgICBpc0VxdWFsKGNvbCwgbylcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzLnB1c2gobyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHJlcztcbiAgICB0aGlzLmNvbHVtbnNTZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWRDb2x1bW5zKTtcbiAgfVxuXG4gIG9uU2VsZWN0aW9uQ2hhbmdlZChzZWxlY3Rpb246IGFueVtdKSB7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkLmVtaXQoc2VsZWN0aW9uKTtcbiAgfVxufVxuIiwiPHAtdHJlZVRhYmxlXG4gICNwcmltZW5nVHJlZVRhYmxlXG4gIHR0V2l0aFVuc29ydFxuICBbbmdDbGFzc109XCJ7XG4gICAgJ2Nwcy10cmVldGFibGUtbG9hZGluZyc6IGxvYWRpbmcsXG4gICAgJ2Nwcy10cmVldGFibGUtZmxleCc6IGRlZlNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnLFxuICAgICdjcHMtdHJlZXRhYmxlLW5vbnZpcnR1YWwnOiAhdmlydHVhbFNjcm9sbFxuICB9XCJcbiAgW3ZhbHVlXT1cImRhdGFcIlxuICBbc2Nyb2xsYWJsZV09XCJzY3JvbGxhYmxlXCJcbiAgW3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHRcIlxuICBbdmlydHVhbFNjcm9sbF09XCJ2aXJ0dWFsU2Nyb2xsXCJcbiAgW3ZpcnR1YWxTY3JvbGxJdGVtU2l6ZV09XCJ2aXJ0dWFsU2Nyb2xsSXRlbVNpemVcIlxuICBbdmlydHVhbFNjcm9sbE9wdGlvbnNdPVwie1xuICAgIG51bVRvbGVyYXRlZEl0ZW1zOiBudW1Ub2xlcmF0ZWRJdGVtcyxcbiAgICBhdXRvU2l6ZTogZmFsc2VcbiAgfVwiXG4gIFtjb2x1bW5zXT1cInNlbGVjdGVkQ29sdW1uc1wiXG4gIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICBbcm93SG92ZXJdPVwicm93SG92ZXJcIlxuICBbbGF6eV09XCJsYXp5XCJcbiAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkUm93c1wiXG4gIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICBjb21wYXJlU2VsZWN0aW9uQnk9XCJlcXVhbHNcIlxuICBbbGF6eUxvYWRPbkluaXRdPVwibGF6eUxvYWRPbkluaXRcIlxuICBbc3R5bGVDbGFzc109XCJzdHlsZUNsYXNzXCJcbiAgW3RhYmxlU3R5bGVdPVwidGFibGVTdHlsZVwiXG4gIFt0YWJsZVN0eWxlQ2xhc3NdPVwidGFibGVTdHlsZUNsYXNzXCJcbiAgW2N1c3RvbVNvcnRdPVwiY3VzdG9tU29ydFwiXG4gIFtzb3J0TW9kZV09XCJzb3J0TW9kZVwiXG4gIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCJcbiAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxuICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxuICBbYWx3YXlzU2hvd1BhZ2luYXRvcl09XCJhbHdheXNTaG93UGFnaW5hdG9yXCJcbiAgW3Jvd3NdPVwicm93c1wiXG4gIFtmaXJzdF09XCJmaXJzdFwiXG4gIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcbiAgW3Jlc2V0UGFnZU9uU29ydF09XCJyZXNldFBhZ2VPblNvcnRcIlxuICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie2ZpcnN0fSAtIHtsYXN0fSBvZiB7dG90YWxSZWNvcmRzfVwiXG4gIChvblBhZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAob25Tb3J0KT1cIm9uU29ydCgkZXZlbnQpXCJcbiAgKG9uRmlsdGVyKT1cIm9uRmlsdGVyKCRldmVudClcIlxuICAob25MYXp5TG9hZCk9XCJvbkxhenlMb2FkZWQoJGV2ZW50KVwiXG4gIChzb3J0RnVuY3Rpb24pPVwib25Tb3J0RnVuY3Rpb24oJGV2ZW50KVwiXG4gIChvbk5vZGVFeHBhbmQpPVwib25Ob2RlRXhwYW5kZWQoJGV2ZW50KVwiXG4gIChvbk5vZGVDb2xsYXBzZSk9XCJvbk5vZGVDb2xsYXBzZWQoJGV2ZW50KVwiXG4gIChvbk5vZGVTZWxlY3QpPVwib25Ob2RlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gIChvbk5vZGVVbnNlbGVjdCk9XCJvbk5vZGVVbnNlbGVjdGVkKCRldmVudClcIj5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIiAqbmdJZj1cImhhc1Rvb2xiYXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidG9vbGJhclRlbXBsYXRlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9vbGJhclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0b29sYmFyVGVtcGxhdGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItbGVmdFwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwidG9vbGJhckljb25cIiBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1pY29uXCI+XG4gICAgICAgICAgPGNwcy1pY29uIFtpY29uXT1cInRvb2xiYXJJY29uXCIgW2NvbG9yXT1cInRvb2xiYXJJY29uQ29sb3JcIj48L2Nwcy1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci10aXRsZVwiPnt7IHRvb2xiYXJUaXRsZSB9fTwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0dsb2JhbEZpbHRlclwiIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWdsb2JhbC1maWx0ZXJcIj5cbiAgICAgICAgICA8Y3BzLWlucHV0XG4gICAgICAgICAgICAjZ2xvYmFsRmlsdGVyQ29tcFxuICAgICAgICAgICAgcHJlZml4SWNvbj1cInNlYXJjaFwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZ2xvYmFsRmlsdGVyUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlZCk9XCJvbkZpbHRlckdsb2JhbCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiXG4gICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJ0b29sYmFyU2l6ZSA9PT0gJ3NtYWxsJyA/ICd1bmRlcmxpbmVkJyA6ICdvdXRsaW5lZCdcIlxuICAgICAgICAgICAgW2hpZGVEZXRhaWxzXT1cInRydWVcIj5cbiAgICAgICAgICA8L2Nwcy1pbnB1dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItcmlnaHRcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd1JlbW92ZUJ0bk9uU2VsZWN0ICYmIHNlbGVjdGVkUm93cy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1idG4tb24tc2VsZWN0XCI+XG4gICAgICAgICAgPGNwcy1idXR0b25cbiAgICAgICAgICAgIGxhYmVsPVwiUmVtb3ZlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZW1vdmVCdG5PblNlbGVjdERpc2FibGVkXCJcbiAgICAgICAgICAgIGNvbG9yPVwicHJlcGFyZWRcIlxuICAgICAgICAgICAgdHlwZT1cImJvcmRlcmxlc3NcIlxuICAgICAgICAgICAgaWNvbj1cInJlbW92ZVwiXG4gICAgICAgICAgICBbc2l6ZV09XCJ0b29sYmFyU2l6ZVwiXG4gICAgICAgICAgICAoY2xpY2tlZCk9XCJyZW1vdmVTZWxlY3RlZCgpXCI+XG4gICAgICAgICAgPC9jcHMtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd0FkZGl0aW9uYWxCdG5PblNlbGVjdCAmJiBzZWxlY3RlZFJvd3MubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItYnRuLW9uLXNlbGVjdFwiPlxuICAgICAgICAgIDxjcHMtYnV0dG9uXG4gICAgICAgICAgICBbbGFiZWxdPVwiYWRkaXRpb25hbEJ0bk9uU2VsZWN0VGl0bGVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFkZGl0aW9uYWxCdG5PblNlbGVjdERpc2FibGVkXCJcbiAgICAgICAgICAgIGNvbG9yPVwicHJlcGFyZWRcIlxuICAgICAgICAgICAgdHlwZT1cImJvcmRlcmxlc3NcIlxuICAgICAgICAgICAgW3NpemVdPVwidG9vbGJhclNpemVcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwib25DbGlja0FkZGl0aW9uYWxCdG5PblNlbGVjdCgpXCI+XG4gICAgICAgICAgPC9jcHMtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dBY3Rpb25CdG5cIiBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1hY3Rpb24tYnRuXCI+XG4gICAgICAgICAgPGNwcy1idXR0b25cbiAgICAgICAgICAgIFtsYWJlbF09XCJhY3Rpb25CdG5UaXRsZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uQnRuRGlzYWJsZWRcIlxuICAgICAgICAgICAgY29sb3I9XCJwcmVwYXJlZFwiXG4gICAgICAgICAgICB0eXBlPVwib3V0bGluZWRcIlxuICAgICAgICAgICAgW3NpemVdPVwidG9vbGJhclNpemVcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwib25DbGlja0FjdGlvbkJ0bigpXCI+XG4gICAgICAgICAgPC9jcHMtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd0NvbHVtbnNUb2dnbGVCdG4gJiYgY29sdW1ucy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1jb2x0b2dnbGUtYnRuXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdidG4tZGlzYWJsZWQnOiBjb2x1bW5zVG9nZ2xlQnRuRGlzYWJsZWQgfVwiPlxuICAgICAgICAgIDxjcHMtaWNvblxuICAgICAgICAgICAgaWNvbj1cImNvbHVtbnNcIlxuICAgICAgICAgICAgc2l6ZT1cIm5vcm1hbFwiXG4gICAgICAgICAgICBbY29sb3JdPVwiXG4gICAgICAgICAgICAgIGNvbHVtbnNUb2dnbGVCdG5EaXNhYmxlZCA/ICd0ZXh0LWxpZ2h0ZXN0JyA6ICdwcmVwYXJlZC1saWdodGVuMSdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25Db2x1bW5zVG9nZ2xlKCRldmVudClcIj48L2Nwcy1pY29uPlxuICAgICAgICAgIDxjcHMtbWVudSAjY29sVG9nZ2xlTWVudSBbd2l0aEFycm93XT1cImZhbHNlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudVwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0gc2VsZWN0LWFsbC1vcHRpb25cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hbGxzZWxlY3RlZF09XCJzZWxlY3RlZENvbHVtbnMubGVuZ3RoID09PSBjb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbENvbHVtbnMoKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWNoZWNrXCI+IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPlNob3cgYWxsIGNvbHVtbnM8L3NwYW5cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0Q29sdW1uKGNvbClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpc0NvbHVtblNlbGVjdGVkKGNvbClcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy10cmVldGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbS1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy10cmVldGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbS1jaGVja1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWxhYmVsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgY29sW2NvbEhlYWRlck5hbWVdXG4gICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9jcHMtbWVudT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNob3dEYXRhUmVsb2FkQnRuXCJcbiAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1yZWxvYWQtYnRuXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdidG4tZGlzYWJsZWQnOiBkYXRhUmVsb2FkQnRuRGlzYWJsZWQgfVwiPlxuICAgICAgICAgIDxjcHMtaWNvblxuICAgICAgICAgICAgaWNvbj1cInJlZnJlc2hcIlxuICAgICAgICAgICAgc2l6ZT1cIjE4XCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJkYXRhUmVsb2FkQnRuRGlzYWJsZWQgPyAndGV4dC1saWdodCcgOiAncHJlcGFyZWQtbGlnaHRlbjEnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblJlbG9hZERhdGEoKVwiPlxuICAgICAgICAgIDwvY3BzLWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiICpuZ0lmPVwibmVzdGVkSGVhZGVyVGVtcGxhdGVcIiBsZXQtY29sdW1ucz5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgbmVzdGVkSGVhZGVyVGVtcGxhdGU7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAkaW1wbGljaXQ6IGNvbHVtbnMsXG4gICAgICAgIH1cbiAgICAgIFwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiAqbmdJZj1cIiFuZXN0ZWRIZWFkZXJUZW1wbGF0ZVwiIGxldC1jb2x1bW5zPlxuICAgIDx0cj5cbiAgICAgIDwhLS0gPHRoIHN0eWxlPVwid2lkdGg6IDNyZW1cIiAqbmdJZj1cInJlb3JkZXJhYmxlUm93c1wiPjwvdGg+IC0tPlxuICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDU1cHhcIiAqbmdJZj1cInNlbGVjdGFibGVcIj5cbiAgICAgICAgPHAtdHJlZVRhYmxlSGVhZGVyQ2hlY2tib3g+PC9wLXRyZWVUYWJsZUhlYWRlckNoZWNrYm94PlxuICAgICAgPC90aD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXJUZW1wbGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGhlYWRlclRlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbHVtbnMsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGVhZGVyVGVtcGxhdGUgJiYgY29sdW1ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzb3J0YWJsZVwiPlxuICAgICAgICAgIDx0aFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCJcbiAgICAgICAgICAgIFtjcHNUVENvbFNvcnRhYmxlXT1cImNvbFtjb2xGaWVsZE5hbWVdXCI+XG4gICAgICAgICAgICB7eyBjb2xbY29sSGVhZGVyTmFtZV0gfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzb3J0YWJsZVwiPlxuICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cbiAgICAgICAgICAgIHt7IGNvbFtjb2xIZWFkZXJOYW1lXSB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8dGggY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXJvdy1tZW51LWNlbGxcIiAqbmdJZj1cInNob3dSb3dNZW51XCI+PC90aD5cbiAgICA8L3RyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZVxuICAgIHBUZW1wbGF0ZT1cImJvZHlcIlxuICAgIGxldC1yb3dEYXRhPVwicm93RGF0YVwiXG4gICAgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICBsZXQtcm93Tm9kZVxuICAgIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XG4gICAgPHRyXG4gICAgICBbdHRSb3ddPVwicm93Tm9kZVwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdjcHMtdHJlZXRhYmxlLXJvdy1zZWxlY3RlZCc6XG4gICAgICAgICAgc2VsZWN0YWJsZSAmJiBwcmltZW5nVHJlZVRhYmxlLmlzU2VsZWN0ZWQocm93Tm9kZS5ub2RlKVxuICAgICAgfVwiPlxuICAgICAgPCEtLSA8dGQgKm5nSWY9XCJyZW9yZGVyYWJsZVJvd3NcIiBjbGFzcz1cImNwcy10YWJsZS1yb3ctZHJhZy1oYW5kbGUtY2VsbFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy10YWJsZS1yb3ctZHJhZy1oYW5kbGVcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+4piwPC9zcGFuPlxuICAgICAgPC90ZD4gLS0+XG4gICAgICA8dGQgc3R5bGU9XCJ3aWR0aDogNTVweFwiICpuZ0lmPVwic2VsZWN0YWJsZVwiPlxuICAgICAgICA8cC10cmVlVGFibGVDaGVja2JveCBbdmFsdWVdPVwicm93Tm9kZVwiPjwvcC10cmVlVGFibGVDaGVja2JveD5cbiAgICAgIDwvdGQ+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYm9keVRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgYm9keVRlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAkaW1wbGljaXQ6IHJvd05vZGUsXG4gICAgICAgICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgICAgICAgY29sdW1uczogY29sdW1ucyxcbiAgICAgICAgICAgICAgcm93RGF0YTogcm93RGF0YVxuICAgICAgICAgICAgfVxuICAgICAgICAgIFwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFib2R5VGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaSA9PT0gMFwiIHN0eWxlPVwiZGlzcGxheTogZmxleFwiPlxuICAgICAgICAgICAgICA8cC10cmVlVGFibGVUb2dnbGVyIFtyb3dOb2RlXT1cInJvd05vZGVcIj4gPC9wLXRyZWVUYWJsZVRvZ2dsZXI+XG4gICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sW2NvbEZpZWxkTmFtZV1dIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaSA+IDBcIj57e1xuICAgICAgICAgICAgICByb3dEYXRhW2NvbFtjb2xGaWVsZE5hbWVdXVxuICAgICAgICAgICAgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHRkICpuZ0lmPVwic2hvd1Jvd01lbnVcIiBjbGFzcz1cImNwcy10cmVldGFibGUtcm93LW1lbnUtY2VsbFwiPlxuICAgICAgICA8dGFibGUtcm93LW1lbnVcbiAgICAgICAgICAoZWRpdFJvd0J0bkNsaWNrZWQpPVwib25FZGl0Um93Q2xpY2tlZChyb3dOb2RlLm5vZGUpXCJcbiAgICAgICAgICAocmVtb3ZlUm93QnRuQ2xpY2tlZCk9XCJvblJlbW92ZVJvd0NsaWNrZWQocm93Tm9kZS5ub2RlKVwiPlxuICAgICAgICA8L3RhYmxlLXJvdy1tZW51PlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgPHRyPlxuICAgICAgPHRkXG4gICAgICAgIGNvbHNwYW49XCIxMDBcIlxuICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtZW1wdHktbWVzc2FnZS10ZFwiXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBlbXB0eUJvZHlIZWlnaHQgfVwiPlxuICAgICAgICB7eyBlbXB0eU1lc3NhZ2UgfX1cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxvYWRpbmdpY29uXCI+XG4gICAgPGNwcy1sb2FkZXIgW2Z1bGxTY3JlZW5dPVwiZmFsc2VcIiBvcGFjaXR5PVwiMFwiPjwvY3BzLWxvYWRlcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInBhZ2luYXRvcmxlZnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3BzLXRhYmxlLXBhZ2luYXRvci1pdG1zLXBlci1wYWdlXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNwcy10YWJsZS1wYWdpbmF0b3ItaXRlbXMtcGVyLXBhZ2UtdGl0bGVcIlxuICAgICAgICA+Um93cyBwZXIgcGFnZTpcbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxjcHMtc2VsZWN0XG4gICAgICAgIFtvcHRpb25zXT1cInJvd09wdGlvbnNcIlxuICAgICAgICBbaGlkZURldGFpbHNdPVwidHJ1ZVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicm93c1wiXG4gICAgICAgICh2YWx1ZUNoYW5nZWQpPVwib25Sb3dzUGVyUGFnZUNoYW5nZWQoKVwiXG4gICAgICAgIFtyZXR1cm5PYmplY3RdPVwiZmFsc2VcIlxuICAgICAgICBvcHRpb25zQ2xhc3M9XCJjcHMtcGFnaW5hdG9yLXBhZ2Utb3B0aW9uc1wiPlxuICAgICAgPC9jcHMtc2VsZWN0PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JmaXJzdHBhZ2VsaW5raWNvblwiPlxuICAgIDxBbmdsZURvdWJsZUxlZnRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JwcmV2aW91c3BhZ2VsaW5raWNvblwiPlxuICAgIDxBbmdsZUxlZnRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JuZXh0cGFnZWxpbmtpY29uXCI+XG4gICAgPEFuZ2xlUmlnaHRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JsYXN0cGFnZWxpbmtpY29uXCI+XG4gICAgPEFuZ2xlRG91YmxlUmlnaHRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtdHJlZVRhYmxlPlxuIl19
889
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvY3BzLXRyZWUtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDaEIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdEUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDNUcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDN0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDN0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ2hILE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzFHLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3BHLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFFL0MsTUFBTSxVQUFVLGdCQUFnQixDQUFDLGNBQXFDO0lBQ3BFLE9BQU8sY0FBYyxDQUFDLGdCQUFnQixDQUFDO0FBQ3pDLENBQUM7QUEwQ0QsTUFBTSxPQUFPLHFCQUFxQjtJQW1KaEMsa0RBQWtEO0lBQ2xELFlBQW9CLEtBQXdCO1FBQXhCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBakpuQyxTQUFJLEdBQVUsRUFBRSxDQUFDO1FBQ2pCLFlBQU8sR0FBNkIsRUFBRSxDQUFDO1FBQ3ZDLGtCQUFhLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLGlCQUFZLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLGFBQVEsR0FBb0IsRUFBRSxDQUFDO1FBQy9CLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUVwQzs7O1dBR0c7UUFDTSxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBRWxCLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDZixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLFNBQUksR0FBcUIsUUFBUSxDQUFDO1FBQ2xDLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsYUFBUSxHQUFHLElBQUksQ0FBQztRQUNoQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLGVBQVUsR0FBRyxTQUFTLENBQUM7UUFDdkIsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFFckIsYUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLDZDQUE2QztRQUMvRCxhQUFRLEdBQXlCLFFBQVEsQ0FBQztRQUMxQyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRW5CLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsZ0JBQVcsR0FBNEIsUUFBUSxDQUFDO1FBQ2hELGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUV0QixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGlCQUFZLEdBQUcsRUFBRSxDQUFDLENBQUMsdUJBQXVCO1FBQzFDLGtCQUFhLEdBQUcsS0FBSyxDQUFDLENBQUMsbUNBQW1DO1FBQzFELDRCQUF1QixHQUFHLENBQUMsQ0FBQztRQUM1QixzQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFFdkIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQix3QkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDM0IsdUJBQWtCLEdBQWEsRUFBRSxDQUFDO1FBQ2xDLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ1QsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRWpCLGlCQUFZLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLG9CQUFlLEdBQW9CLEVBQUUsQ0FBQztRQUV0QyxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2IsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFFdEIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLDRCQUF1QixHQUFHLFFBQVEsQ0FBQztRQUNuQyx1QkFBa0IsR0FBYSxFQUFFLENBQUM7UUFDbEMsK0JBQTBCLEdBQUcsS0FBSyxDQUFDO1FBRW5DLDBCQUFxQixHQUFHLElBQUksQ0FBQztRQUM3Qiw4QkFBeUIsR0FBRyxLQUFLLENBQUM7UUFFbEMsOEJBQXlCLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLCtCQUEwQixHQUFHLGVBQWUsQ0FBQztRQUM3QyxrQ0FBNkIsR0FBRyxLQUFLLENBQUM7UUFFdEMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsbUJBQWMsR0FBRyxRQUFRLENBQUM7UUFDMUIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRTFCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQiwwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFFOUIseUJBQW9CLEdBQUcsS0FBSyxDQUFDLENBQUMsMkVBQTJFO1FBQ3pHLDZCQUF3QixHQUFHLEtBQUssQ0FBQztRQUVoQyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBQzdDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDNUMsaUNBQTRCLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUN6RCxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzVDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUN4QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdEMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDakMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbkMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBNEIsQ0FBQztRQUMvRCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNyQyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQy9DLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN2QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDeEMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3ZDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVuRDs7OztXQUlHO1FBQ08sdUJBQWtCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUF1QjFFLG9CQUFlLEdBQTZCLEVBQUUsQ0FBQztRQUUvQyxlQUFVLEdBQXVDLEVBQUUsQ0FBQztRQUVwRCxpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUV6QiwwQkFBcUIsR0FBRyxDQUFDLENBQUM7UUFDMUIsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFFYix1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDdkIsOEJBQXlCLEdBQUcsQ0FBQyxDQUFDO1FBUTlCLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLHNCQUFpQixHQUFHLElBQUksQ0FBQztRQUV6QiwwQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFJbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3BELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDeEIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFFL0QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGFBQWE7b0JBQzlDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FDcEMsVUFBVSxFQUNWLE1BQU0sRUFDTixXQUFXLENBQ1osQ0FBQztnQkFFSixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxPQUFPLEdBQUcsQ0FBQztvQkFBRSxPQUFPLElBQUksQ0FBQyxDQUFDO2dCQUU5QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsR0FBRyxPQUFPLElBQUksQ0FBQztnQkFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVztvQkFDL0IsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNoRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUNqRCxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTNDLElBQUksSUFBSSxDQUFDLHlCQUF5QjtZQUFFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFFdkUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3pDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFbkUsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssTUFBTSxFQUFFO2dCQUMzRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDM0Q7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO2dCQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNsRDtnQkFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztpQkFDekQ7YUFDRjtZQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDcEQsS0FBSyxFQUFFLEVBQUUsR0FBRyxDQUFDO2dCQUNiLEtBQUssRUFBRSxDQUFDO2FBQ1QsQ0FBQyxDQUFDLENBQUM7U0FDTDtRQUVELElBQ0UsSUFBSSxDQUFDLGdCQUFnQjtZQUNyQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxHQUFHLENBQUM7WUFDbkMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUNyQjtZQUNBLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDMUQ7UUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUUzQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FDekUsOEJBQThCLENBQy9CLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzFELElBQUksS0FBSztvQkFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQ2pEO1lBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN0QixJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssTUFBTSxFQUFFO29CQUNuQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUM7b0JBQzVELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7aUJBQzFEO2dCQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FDbEMsSUFBSSxDQUFDLGVBQWUsRUFDcEIsUUFBUSxDQUNULENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTt3QkFDZixJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pDLENBQUMsQ0FBQyxDQUFDO2lCQUNKO2FBQ0Y7WUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FDcEUsb0NBQW9DLENBQ3JDLENBQUM7WUFFRixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ25CLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQzdDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNyRCxJQUFJLEtBQUs7d0JBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztpQkFDakQ7Z0JBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQ3BEO1lBRUQsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7Z0JBQzlCLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQzVCO1NBQ0Y7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixNQUFNLFlBQVksR0FDaEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUNwRCxzQkFBc0IsQ0FDdkIsQ0FBQztZQUNKLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUM3RCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLEtBQUs7b0JBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUNqRDtTQUNGO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM5QixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUVoQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssTUFBTSxFQUFFO1lBQy9ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQztZQUM1RCxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQ3pELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQy9CLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxJQUFJLENBQUMsMEJBQTBCO2dCQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQy9EO1FBRUQsSUFBSSxJQUFJLENBQUMsdUJBQXVCO1lBQzlCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUM7UUFFNUQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFM0IsTUFBTSxXQUFXLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQztRQUNsQyxJQUFJLFdBQVcsRUFBRSxhQUFhLEtBQUssV0FBVyxFQUFFLFlBQVksRUFBRTtZQUM1RCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkI7UUFDRCxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ25DLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLElBQUksQ0FBQyxVQUFVO2dCQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUM3RCxNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDdkU7SUFDSCxDQUFDO0lBRU8sMkJBQTJCLENBQUMsTUFBTSxHQUFHLEtBQUs7UUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFFakQsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRW5ELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNO1lBQUUsT0FBTztRQUVoQyxNQUFNLFdBQVcsR0FDZixVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU07WUFBRSxPQUFPO1FBRWpDLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQztRQUUzQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUFFLE9BQU87UUFFdkUsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFO1lBQ25DLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBRTdCLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQzVDLCtCQUErQixDQUNoQyxDQUFDO1lBRUYsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUV2RSxJQUFJLGdCQUFnQjtnQkFBRSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFDL0MsSUFBSSxTQUFTO2dCQUFFLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFFckMsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbkMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDO2dCQUMvQixFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7Z0JBQzNCLE9BQU8sR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDO2dCQUN6QixFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzthQUN2QjtZQUNELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU07WUFBRSxPQUFPO1FBRTlCLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztRQUM5QixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBZSxFQUFFLEVBQUU7WUFDbkMsTUFBTSxHQUFHLEdBQUcsRUFBRSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFlLEVBQUUsR0FBVyxFQUFFLEVBQUU7Z0JBQzVDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUM3QixNQUFNLHlCQUF5QixHQUM3QixFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQywrQkFBK0IsQ0FBQztvQkFDdEQsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsNkJBQTZCLENBQUMsQ0FBQztnQkFFdkQsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMseUJBQXlCLEVBQUU7b0JBQzlCLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQztvQkFDL0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO29CQUMzQixPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQztvQkFDekIsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO29CQUN2QixFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7aUJBQ3ZCO2dCQUNELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO29CQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNuRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUVoRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RSxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQyxJQUFJLGlCQUFpQixFQUFFO1lBQ3JCLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDVixTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDbkI7UUFDRCxJQUFJLGNBQWMsRUFBRTtZQUNsQixHQUFHLElBQUksRUFBRSxDQUFDO1lBQ1YsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ2pCO1FBRUQsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFFMUQsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQU8sRUFBRSxHQUFXLEVBQUUsRUFBRTtZQUMzQyxJQUNFLENBQUMsaUJBQWlCLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztnQkFDaEMsQ0FBQyxjQUFjLElBQUksR0FBRyxLQUFLLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQ2xEO2dCQUNBLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQzthQUN6Qjs7Z0JBQ0MsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBZSxFQUFFLEVBQUU7WUFDbkMsTUFBTSxHQUFHLEdBQUcsRUFBRSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFlLEVBQUUsR0FBVyxFQUFFLEVBQUU7Z0JBQzVDLElBQ0UsQ0FBQyxpQkFBaUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO29CQUNoQyxDQUFDLGNBQWMsSUFBSSxHQUFHLEtBQUssR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDMUM7b0JBQ0EsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO2lCQUN6QjtxQkFBTTtvQkFDTCxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztpQkFDdkU7Z0JBQ0QsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO2dCQUN2QixJQUFJLElBQUksQ0FBQyxRQUFRO29CQUNmLEVBQUUsQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLDJCQUEyQixDQUFDO1lBQzNELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFFTyw0QkFBNEI7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLHVCQUF1QjtZQUFFLE9BQU87UUFFaEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxhQUFhO1lBQ2xELEVBQUUsYUFBYSxDQUFDLG9CQUFvQixDQUFDO1lBQ3JDLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNO1lBQUUsT0FBTztRQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVk7WUFBRSxPQUFPO1FBRWxDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFlLEVBQUUsR0FBVyxFQUFFLEVBQUU7WUFDM0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1gsTUFBTSxHQUFHLEdBQUcsRUFBRSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFlLEVBQUUsRUFBRTtnQkFDL0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO2dCQUMzQixJQUFJLEVBQUUsQ0FBQyxZQUFZO29CQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3hELEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksRUFBRSxFQUFFO2dCQUNOLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ3RDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtZQUN0RSxPQUFPO1FBRVQsTUFBTSxhQUFhLEdBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6RSxJQUFJLGFBQWEsRUFBRTtZQUNqQixhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7WUFDdEMsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNoRSxJQUFJLFdBQVc7Z0JBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUM1RCxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsYUFBYSxDQUNoRCw4QkFBOEIsQ0FDL0IsQ0FBQztZQUNGLElBQUksY0FBYztnQkFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ25FO1FBRUQsTUFBTSxpQkFBaUIsR0FDckIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUNwRCxpQ0FBaUMsQ0FDbEMsQ0FBQztRQUNKLElBQUksaUJBQWlCO1lBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRXhFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLE1BQU0sWUFBWSxHQUNoQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQ3BELHNCQUFzQixDQUN2QixDQUFDO1lBQ0osSUFBSSxZQUFZO2dCQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDL0Q7UUFFRCxNQUFNLGVBQWUsR0FDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUNwRCxxQkFBcUIsQ0FDdEIsQ0FBQztRQUNKLElBQUksZUFBZTtZQUFFLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdEUsQ0FBQztJQUVPLGVBQWU7UUFDckIsdUNBQXVDO1FBQ3ZDLCtEQUErRDtRQUUvRCxZQUFZLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDNUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDOUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN2QixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDakIsS0FBSyxPQUFPO2dCQUNWLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDbkMsTUFBTTtZQUNSLEtBQUssT0FBTztnQkFDVixXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ25DLE1BQU07U0FDVDtRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3hCLEtBQUssT0FBTztvQkFDVixXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7b0JBQ25DLE1BQU07Z0JBQ1IsS0FBSyxRQUFRO29CQUNYLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDcEMsTUFBTTthQUNUO1NBQ0Y7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsV0FBVyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLFdBQVcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztTQUMzQztRQUVELElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzlELFdBQVcsQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQztTQUNuRDtRQUVELE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGFBQWE7WUFDL0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFNUUsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUM5QyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7Z0JBQzlELElBQUksUUFBUSxHQUFHLENBQUMsRUFBRTtvQkFDaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZTt3QkFDdEMsQ0FBQyxDQUFFLFFBQVEsSUFBSSxDQUFDLGVBQWUsU0FBb0I7d0JBQ25ELENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztpQkFDM0M7cUJBQU07b0JBQ0wsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7b0JBQzVELElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxNQUFNLEVBQUU7d0JBQ25DLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRTs0QkFDL0MsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7NEJBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7NEJBQzNDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7NEJBQzFCLE9BQU87eUJBQ1I7cUJBQ0Y7b0JBQ0QsSUFBSSxDQUFDLFlBQVk7d0JBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO2lCQUN2RDtnQkFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQzNCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsWUFBaUIsRUFBRSxNQUFNLEdBQUcsSUFBSTtRQUMxRCxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBVSxFQUFPLEVBQUU7WUFDNUMsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTyxTQUFTLENBQUM7WUFDN0IsSUFBSSxPQUFPLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxRQUFRO2dCQUM3QyxPQUFPLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztZQUNqQyxPQUFPLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUM7UUFFRixNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQ25DLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2pELElBQUksR0FBRyxJQUFJLENBQUMsRUFBRTtnQkFDWixLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUMvQixPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUM7aUJBQ3ZCO2dCQUNELE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsS0FBSyxNQUFNLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO29CQUNsQyxJQUFJLG1CQUFtQixDQUFDLEtBQUssQ0FBQzt3QkFBRSxPQUFPLElBQUksQ0FBQztpQkFDN0M7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7YUFDZDtRQUNILENBQUMsQ0FBQztRQUVGLHdCQUF3QjtRQUN4QixNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRCxJQUFJLFNBQVMsS0FBSyxTQUFTO1lBQUUsT0FBTztRQUNwQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUVsQiw2Q0FBNkM7UUFDN0MsSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxZQUFZLENBQUMsQ0FBQztTQUM5RDthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqQixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxNQUFNO29CQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN4QztTQUNGO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWdCO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCw0QkFBNEI7UUFDMUIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLHFCQUFxQjtZQUFFLE9BQU87UUFDdkMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBVTtRQUN4QixJQUFJLElBQUksQ0FBQyx3QkFBd0I7WUFBRSxPQUFPO1FBQzFDLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBUztRQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFTO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLGVBQWU7WUFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDaEQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFRO1FBQ3ZCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztTQUNqQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELFVBQVUsQ0FBQyxDQUFTO1FBQ2xCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDO2dCQUNqQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTthQUNoQixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVTtRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBRXZCLE1BQU0sS0FBSyxHQUFHO1lBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDcEIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUMxQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVTtRQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBVTtRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFVO1FBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBVTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVU7UUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsR0FBUTtRQUNyQixJQUFJLEdBQUcsR0FBRyxFQUFTLENBQUM7UUFDcEIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDOUIsR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNqRTthQUFNO1lBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDekIsSUFDRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDcEQsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFDZjtvQkFDQSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNiO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNoRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLFNBQWdCO1FBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7a0hBeHhCVSxxQkFBcUI7c0dBQXJCLHFCQUFxQiw0Z0ZBVnJCO1FBQ1QsZ0JBQWdCO1FBQ2hCO1lBQ0UsT0FBTyxFQUFFLFNBQVM7WUFDbEIsVUFBVSxFQUFFLGdCQUFnQjtZQUM1QixnREFBZ0Q7WUFDaEQsSUFBSSxFQUFFLENBQUMscUJBQXFCLENBQUM7U0FDOUI7S0FDRiw0dkJDeEZILGtsVkFxU0EsZ3RtQkQzT0ksV0FBVyw4VkFDWCxZQUFZLHlsQkFDWixlQUFlLCtsREFDZixpQkFBaUIscWdCQUNqQixrQkFBa0IsMk1BQ2xCLGdCQUFnQiwwUkFDaEIsZ0JBQWdCLHdGQUNoQixrQkFBa0IsMmlCQUNsQixrQkFBa0IscUhBQ2xCLG1CQUFtQixnRUFDbkIsYUFBYSwwREFDYixjQUFjLDJEQUNkLG9CQUFvQixpRUFDcEIsbUNBQW1DLDZGQUNuQyxxQ0FBcUMsaUVBQ3JDLGtDQUFrQyxpR0FDbEMsK0JBQStCLDJGQUMvQix3QkFBd0IsMkRBQ3hCLHFCQUFxQjsyRkFjWixxQkFBcUI7a0JBckNqQyxTQUFTOytCQUNFLGdCQUFnQixjQUNkLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxXQUFXO3dCQUNYLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxvQkFBb0I7d0JBQ3BCLG1DQUFtQzt3QkFDbkMscUNBQXFDO3dCQUNyQyxrQ0FBa0M7d0JBQ2xDLCtCQUErQjt3QkFDL0Isd0JBQXdCO3dCQUN4QixxQkFBcUI7cUJBQ3RCLGFBR1U7d0JBQ1QsZ0JBQWdCO3dCQUNoQjs0QkFDRSxPQUFPLEVBQUUsU0FBUzs0QkFDbEIsVUFBVSxFQUFFLGdCQUFnQjs0QkFDNUIsZ0RBQWdEOzRCQUNoRCxJQUFJLEVBQUUsdUJBQXVCO3lCQUM5QjtxQkFDRjt3R0FLUSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFNRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQUVHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBRUcseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFDRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUVHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBRUksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyw0QkFBNEI7c0JBQXJDLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBT0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUdBLGVBQWU7c0JBRHJCLFlBQVk7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJbkMsY0FBYztzQkFEcEIsWUFBWTt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUlsQyxvQkFBb0I7c0JBRDFCLFlBQVk7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJeEMsWUFBWTtzQkFEbEIsWUFBWTt1QkFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUl2QyxnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSS9DLGdCQUFnQjtzQkFEZixTQUFTO3VCQUFDLGtCQUFrQjtnQkFJN0IsYUFBYTtzQkFEWixTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBUcmVlVGFibGUsXG4gIFRyZWVUYWJsZVNlcnZpY2UsXG4gIFRyZWVUYWJsZU1vZHVsZVxufSBmcm9tICdwcmltZW5nL3RyZWV0YWJsZSc7XG5pbXBvcnQgeyBEb21IYW5kbGVyIH0gZnJvbSAncHJpbWVuZy9kb20nO1xuaW1wb3J0IHsgQW5nbGVEb3VibGVMZWZ0SWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvYW5nbGVkb3VibGVsZWZ0JztcbmltcG9ydCB7IEFuZ2xlTGVmdEljb24gfSBmcm9tICdwcmltZW5nL2ljb25zL2FuZ2xlbGVmdCc7XG5pbXBvcnQgeyBBbmdsZVJpZ2h0SWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvYW5nbGVyaWdodCc7XG5pbXBvcnQgeyBBbmdsZURvdWJsZVJpZ2h0SWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvYW5nbGVkb3VibGVyaWdodCc7XG5pbXBvcnQgeyBTb3J0RXZlbnQgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBmaW5kLCBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IENwc0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLWlucHV0L2Nwcy1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLWJ1dHRvbi9jcHMtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLW1lbnUvY3BzLW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IENwc0ljb25Db21wb25lbnQgfSBmcm9tICcuLi9jcHMtaWNvbi9jcHMtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLXNlbGVjdC9jcHMtc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtbG9hZGVyL2Nwcy1sb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENwc1RyZWVUYWJsZUNvbHVtblNvcnRhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Nwcy10cmVlLXRhYmxlLWNvbHVtbi1zb3J0YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVHJlZVRhYmxlVW5zb3J0RGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2ludGVybmFsL3RyZWUtdGFibGUtdW5zb3J0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUYWJsZVJvd01lbnVDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtdGFibGUvdGFibGUtcm93LW1lbnUvdGFibGUtcm93LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IGNvbnZlcnRTaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJuYWwvc2l6ZS11dGlscyc7XG5pbXBvcnQgeyBDcHNUcmVlVGFibGVIZWFkZXJTZWxlY3RhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Nwcy10cmVlLXRhYmxlLWhlYWRlci1zZWxlY3RhYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDcHNUcmVlVGFibGVSb3dTZWxlY3RhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Nwcy10cmVlLXRhYmxlLXJvdy1zZWxlY3RhYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDcHNUcmVldGFibGVSb3dUb2dnbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Nwcy10cmVlLXRhYmxlLXJvdy10b2dnbGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJlZVRhYmxlRmFjdG9yeSh0YWJsZUNvbXBvbmVudDogQ3BzVHJlZVRhYmxlQ29tcG9uZW50KSB7XG4gIHJldHVybiB0YWJsZUNvbXBvbmVudC5wcmltZW5nVHJlZVRhYmxlO1xufVxuXG5leHBvcnQgdHlwZSBDcHNUcmVlVGFibGVTaXplID0gJ3NtYWxsJyB8ICdub3JtYWwnIHwgJ2xhcmdlJztcbmV4cG9ydCB0eXBlIENwc1RyZWVUYWJsZVRvb2xiYXJTaXplID0gJ3NtYWxsJyB8ICdub3JtYWwnO1xuZXhwb3J0IHR5cGUgQ3BzVHJlZVRhYmxlU29ydE1vZGUgPSAnc2luZ2xlJyB8ICdtdWx0aXBsZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcHMtdHJlZS10YWJsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyZWVUYWJsZU1vZHVsZSxcbiAgICBDcHNJbnB1dENvbXBvbmVudCxcbiAgICBDcHNCdXR0b25Db21wb25lbnQsXG4gICAgQ3BzTWVudUNvbXBvbmVudCxcbiAgICBDcHNJY29uQ29tcG9uZW50LFxuICAgIENwc1NlbGVjdENvbXBvbmVudCxcbiAgICBDcHNMb2FkZXJDb21wb25lbnQsXG4gICAgQW5nbGVEb3VibGVMZWZ0SWNvbixcbiAgICBBbmdsZUxlZnRJY29uLFxuICAgIEFuZ2xlUmlnaHRJY29uLFxuICAgIEFuZ2xlRG91YmxlUmlnaHRJY29uLFxuICAgIENwc1RyZWVUYWJsZUNvbHVtblNvcnRhYmxlRGlyZWN0aXZlLFxuICAgIENwc1RyZWVUYWJsZUhlYWRlclNlbGVjdGFibGVEaXJlY3RpdmUsXG4gICAgQ3BzVHJlZVRhYmxlUm93U2VsZWN0YWJsZURpcmVjdGl2ZSxcbiAgICBDcHNUcmVldGFibGVSb3dUb2dnbGVyRGlyZWN0aXZlLFxuICAgIFRyZWVUYWJsZVVuc29ydERpcmVjdGl2ZSxcbiAgICBUYWJsZVJvd01lbnVDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nwcy10cmVlLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgVHJlZVRhYmxlU2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBUcmVlVGFibGUsXG4gICAgICB1c2VGYWN0b3J5OiB0cmVlVGFibGVGYWN0b3J5LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICBkZXBzOiBbQ3BzVHJlZVRhYmxlQ29tcG9uZW50XVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDcHNUcmVlVGFibGVDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25DaGFuZ2VzXG57XG4gIEBJbnB1dCgpIGRhdGE6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGNvbHVtbnM6IHsgW2tleTogc3RyaW5nXTogYW55IH1bXSA9IFtdO1xuICBASW5wdXQoKSBjb2xIZWFkZXJOYW1lID0gJ2hlYWRlcic7XG4gIEBJbnB1dCgpIGNvbEZpZWxkTmFtZSA9ICdmaWVsZCc7XG4gIEBJbnB1dCgpIG1pbldpZHRoOiBudW1iZXIgfCBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgbWluV2lkdGhGb3JCb2R5T25seSA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNlbGwgd2lkdGhzIHNjYWxlIGFjY29yZGluZyB0byB0aGVpciBjb250ZW50IG9yIG5vdC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBhdXRvTGF5b3V0ID0gdHJ1ZTtcblxuICBASW5wdXQoKSBzdHJpcGVkID0gdHJ1ZTtcbiAgQElucHV0KCkgYm9yZGVyZWQgPSB0cnVlO1xuICBASW5wdXQoKSBzaXplOiBDcHNUcmVlVGFibGVTaXplID0gJ25vcm1hbCc7XG4gIEBJbnB1dCgpIHNlbGVjdGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgcm93SG92ZXIgPSB0cnVlO1xuICBASW5wdXQoKSBzaG93Um93TWVudSA9IGZhbHNlO1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG5cbiAgQElucHV0KCkgdGFibGVTdHlsZSA9IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgdGFibGVTdHlsZUNsYXNzID0gJyc7XG5cbiAgQElucHV0KCkgc29ydGFibGUgPSBmYWxzZTsgLy8gbWFrZXMgYWxsIHNvcnRhYmxlIGlmIGNvbHVtbnMgYXJlIHByb3ZpZGVkXG4gIEBJbnB1dCgpIHNvcnRNb2RlOiBDcHNUcmVlVGFibGVTb3J0TW9kZSA9ICdzaW5nbGUnO1xuICBASW5wdXQoKSBjdXN0b21Tb3J0ID0gZmFsc2U7XG5cbiAgQElucHV0KCkgaGFzVG9vbGJhciA9IHRydWU7XG4gIEBJbnB1dCgpIHRvb2xiYXJTaXplOiBDcHNUcmVlVGFibGVUb29sYmFyU2l6ZSA9ICdub3JtYWwnO1xuICBASW5wdXQoKSB0b29sYmFyVGl0bGUgPSAnJztcbiAgQElucHV0KCkgdG9vbGJhckljb24gPSAnJztcbiAgQElucHV0KCkgdG9vbGJhckljb25Db2xvciA9ICcnO1xuXG4gIEBJbnB1dCgpIHNjcm9sbGFibGUgPSB0cnVlO1xuICBASW5wdXQoKSBzY3JvbGxIZWlnaHQgPSAnJzsgLy8gJ2ZsZXgnIG9yIHZhbHVlKydweCdcbiAgQElucHV0KCkgdmlydHVhbFNjcm9sbCA9IGZhbHNlOyAvLyB3b3JrcyBvbmx5IGlmIHNjcm9sbGFibGUgaXMgdHJ1ZVxuICBASW5wdXQoKSB2aXJ0dWFsU2Nyb2xsSXRlbUhlaWdodCA9IDA7XG4gIEBJbnB1dCgpIG51bVRvbGVyYXRlZEl0ZW1zID0gMTA7XG5cbiAgQElucHV0KCkgcGFnaW5hdG9yID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFsd2F5c1Nob3dQYWdpbmF0b3IgPSB0cnVlO1xuICBASW5wdXQoKSByb3dzUGVyUGFnZU9wdGlvbnM6IG51bWJlcltdID0gW107XG4gIEBJbnB1dCgpIGZpcnN0ID0gMDtcbiAgQElucHV0KCkgcm93cyA9IDA7XG4gIEBJbnB1dCgpIHJlc2V0UGFnZU9uUm93c0NoYW5nZSA9IGZhbHNlO1xuICBASW5wdXQoKSByZXNldFBhZ2VPblNvcnQgPSB0cnVlO1xuICBASW5wdXQoKSB0b3RhbFJlY29yZHMgPSAwO1xuXG4gIEBJbnB1dCgpIGVtcHR5TWVzc2FnZSA9ICdObyBkYXRhJztcbiAgQElucHV0KCkgZW1wdHlCb2R5SGVpZ2h0OiBudW1iZXIgfCBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSBsYXp5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGxhenlMb2FkT25Jbml0ID0gdHJ1ZTtcblxuICBASW5wdXQoKSBzaG93R2xvYmFsRmlsdGVyID0gZmFsc2U7XG4gIEBJbnB1dCgpIGdsb2JhbEZpbHRlclBsYWNlaG9sZGVyID0gJ1NlYXJjaCc7XG4gIEBJbnB1dCgpIGdsb2JhbEZpbHRlckZpZWxkczogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCkgY2xlYXJHbG9iYWxGaWx0ZXJPbkxvYWRpbmcgPSBmYWxzZTtcblxuICBASW5wdXQoKSBzaG93UmVtb3ZlQnRuT25TZWxlY3QgPSB0cnVlO1xuICBASW5wdXQoKSByZW1vdmVCdG5PblNlbGVjdERpc2FibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2hvd0FkZGl0aW9uYWxCdG5PblNlbGVjdCA9IGZhbHNlO1xuICBASW5wdXQoKSBhZGRpdGlvbmFsQnRuT25TZWxlY3RUaXRsZSA9ICdTZWxlY3QgYWN0aW9uJztcbiAgQElucHV0KCkgYWRkaXRpb25hbEJ0bk9uU2VsZWN0RGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBzaG93QWN0aW9uQnRuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFjdGlvbkJ0blRpdGxlID0gJ0FjdGlvbic7XG4gIEBJbnB1dCgpIGFjdGlvbkJ0bkRpc2FibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2hvd0RhdGFSZWxvYWRCdG4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGF0YVJlbG9hZEJ0bkRpc2FibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2hvd0NvbHVtbnNUb2dnbGVCdG4gPSBmYWxzZTsgLy8gaWYgZXh0ZXJuYWwgYm9keSB0ZW1wbGF0ZSBpcyBwcm92aWRlZCwgdXNlIGNvbHVtbnNTZWxlY3RlZCBldmVudCBlbWl0dGVyXG4gIEBJbnB1dCgpIGNvbHVtbnNUb2dnbGVCdG5EaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcbiAgQE91dHB1dCgpIGFjdGlvbkJ0bkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBhZGRpdGlvbmFsQnRuT25TZWxlY3RDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcbiAgQE91dHB1dCgpIGVkaXRSb3dCdG5DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSByb3dzUmVtb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc29ydGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBmaWx0ZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgY29sdW1uc1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7IFtrZXk6IHN0cmluZ106IGFueSB9W10+KCk7XG4gIEBPdXRwdXQoKSBsYXp5TG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBkYXRhUmVsb2FkQnRuQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbm9kZUV4cGFuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBub2RlQ29sbGFwc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBub2RlU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG5vZGVVbnNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdG8gaW1wbGVtZW50IGN1c3RvbSBzb3J0aW5nLiBjdXN0b21Tb3J0IG11c3QgYmUgdHJ1ZS5cbiAgICogQHBhcmFtIHthbnl9IGFueSAtIHNvcnQgbWV0YS5cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgY3VzdG9tU29ydEZ1bmN0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBDb250ZW50Q2hpbGQoJ3Rvb2xiYXInLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHVibGljIHRvb2xiYXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQENvbnRlbnRDaGlsZCgnaGVhZGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHB1YmxpYyBoZWFkZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQENvbnRlbnRDaGlsZCgnbmVzdGVkSGVhZGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHB1YmxpYyBuZXN0ZWRIZWFkZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQENvbnRlbnRDaGlsZCgnYm9keScsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgYm9keVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAVmlld0NoaWxkKCdwcmltZW5nVHJlZVRhYmxlJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpbWVuZ1RyZWVUYWJsZSE6IFRyZWVUYWJsZTtcblxuICBAVmlld0NoaWxkKCdnbG9iYWxGaWx0ZXJDb21wJylcbiAgZ2xvYmFsRmlsdGVyQ29tcCE6IENwc0lucHV0Q29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbFRvZ2dsZU1lbnUnKVxuICBjb2xUb2dnbGVNZW51ITogQ3BzTWVudUNvbXBvbmVudDtcblxuICBzZWxlY3RlZENvbHVtbnM6IHsgW2tleTogc3RyaW5nXTogYW55IH1bXSA9IFtdO1xuXG4gIHJvd09wdGlvbnM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IG51bWJlciB9W10gPSBbXTtcblxuICBzZWxlY3RlZFJvd3M6IGFueVtdID0gW107XG5cbiAgdmlydHVhbFNjcm9sbEl0ZW1TaXplID0gMDtcbiAgZGVmU2Nyb2xsSGVpZ2h0ID0gJyc7XG5cbiAgcHJpdmF0ZSBfZGVmU2Nyb2xsSGVpZ2h0UHggPSAwO1xuICBwcml2YXRlIF9kZWZTY3JvbGxIZWlnaHRQeEluaXRpYWwgPSAwO1xuXG4gIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcbiAgcHJpdmF0ZSBfd2luZG93UmVzaXplRGVib3VuY2VyOiBhbnk7XG4gIHByaXZhdGUgX3Njcm9sbFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIF9oZWFkZXJCb3g6IGFueTtcbiAgcHJpdmF0ZSBfc2Nyb2xsYWJsZUJvZHk6IGFueTtcbiAgcHJpdmF0ZSBfc2Nyb2xsYmFyV2lkdGggPSAwO1xuICBwcml2YXRlIF9zY3JvbGxiYXJWaXNpYmxlID0gdHJ1ZTtcblxuICBwcml2YXRlIF9uZWVkUmVjYWxjQXV0b0xheW91dCA9IHRydWU7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICB0aGlzLl9yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICBjb25zdCBib2R5ID0gZW50cnkudGFyZ2V0O1xuICAgICAgICB0aGlzLl9zY3JvbGxiYXJWaXNpYmxlID0gYm9keS5zY3JvbGxIZWlnaHQgPiBib2R5LmNsaWVudEhlaWdodDtcblxuICAgICAgICBpZiAodGhpcy5fc2Nyb2xsYmFyVmlzaWJsZSAmJiB0aGlzLnZpcnR1YWxTY3JvbGwpXG4gICAgICAgICAgdGhpcy5fc2Nyb2xsYWJsZUJvZHkuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgICAnb3ZlcmZsb3cnLFxuICAgICAgICAgICAgJ2F1dG8nLFxuICAgICAgICAgICAgJ2ltcG9ydGFudCdcbiAgICAgICAgICApO1xuXG4gICAgICAgIGxldCB3U2Nyb2xsID0gdGhpcy5fc2Nyb2xsYmFyVmlzaWJsZSA/IHRoaXMuX3Njcm9sbGJhcldpZHRoIDogMDtcbiAgICAgICAgaWYgKHdTY3JvbGwgPiAwKSB3U2Nyb2xsIC09IDE7XG5cbiAgICAgICAgdGhpcy5faGVhZGVyQm94LnN0eWxlLnBhZGRpbmdSaWdodCA9IGAke3dTY3JvbGx9cHhgO1xuICAgICAgICB0aGlzLl9oZWFkZXJCb3guc3R5bGUuYm9yZGVyUmlnaHQgPVxuICAgICAgICAgIHdTY3JvbGwgPiAwID8gJzFweCBzb2xpZCAjZDdkNWQ1JyA6ICd1bnNldCc7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zY3JvbGxhYmxlKSB0aGlzLnZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcbiAgICB0aGlzLmVtcHR5Qm9keUhlaWdodCA9IGNvbnZlcnRTaXplKHRoaXMuZW1wdHlCb2R5SGVpZ2h0KTtcbiAgICB0aGlzLm1pbldpZHRoID0gY29udmVydFNpemUodGhpcy5taW5XaWR0aCk7XG5cbiAgICBpZiAodGhpcy5zaG93QWRkaXRpb25hbEJ0bk9uU2VsZWN0KSB0aGlzLnNob3dSZW1vdmVCdG5PblNlbGVjdCA9IGZhbHNlO1xuXG4gICAgdGhpcy5kZWZTY3JvbGxIZWlnaHQgPSB0aGlzLnNjcm9sbEhlaWdodDtcbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25XaW5kb3dSZXNpemUuYmluZCh0aGlzKSk7XG5cbiAgICAgIGlmICh0aGlzLmRlZlNjcm9sbEhlaWdodCAmJiB0aGlzLmRlZlNjcm9sbEhlaWdodCAhPT0gJ2ZsZXgnKSB7XG4gICAgICAgIHRoaXMuX2RlZlNjcm9sbEhlaWdodFB4ID0gcGFyc2VJbnQodGhpcy5zY3JvbGxIZWlnaHQsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIGlmICh0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5sZW5ndGggPCAxKVxuICAgICAgICB0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucyA9IFs1LCAxMCwgMjUsIDUwXTtcblxuICAgICAgaWYgKCF0aGlzLnJvd3MpIHRoaXMucm93cyA9IHRoaXMucm93c1BlclBhZ2VPcHRpb25zWzBdO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmICghdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnMuaW5jbHVkZXModGhpcy5yb3dzKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncm93c1BlclBhZ2VPcHRpb25zIG11c3QgaW5jbHVkZSByb3dzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5yb3dPcHRpb25zID0gdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnMubWFwKCh2KSA9PiAoe1xuICAgICAgICBsYWJlbDogJycgKyB2LFxuICAgICAgICB2YWx1ZTogdlxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuc2hvd0dsb2JhbEZpbHRlciAmJlxuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHM/Lmxlbmd0aCA8IDEgJiZcbiAgICAgIHRoaXMuZGF0YT8ubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMgPSBPYmplY3Qua2V5cyh0aGlzLmRhdGFbMF0uZGF0YSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc2V0TWluV2lkdGhPdmVyYWxsKCk7XG5cbiAgICB0aGlzLl9zY3JvbGxhYmxlQm9keSA9IHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnLnAtdHJlZXRhYmxlLXNjcm9sbGFibGUtYm9keSdcbiAgICApO1xuICAgIGlmICh0aGlzLl9zY3JvbGxhYmxlQm9keSkge1xuICAgICAgaWYgKHRoaXMubWluV2lkdGhGb3JCb2R5T25seSAmJiB0aGlzLm1pbldpZHRoKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fc2Nyb2xsYWJsZUJvZHkucXVlcnlTZWxlY3RvcigndGFibGUnKTtcbiAgICAgICAgaWYgKHRhYmxlKSB0YWJsZS5zdHlsZS5taW5XaWR0aCA9IHRoaXMubWluV2lkdGg7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ID09PSAnZmxleCcpIHtcbiAgICAgICAgICB0aGlzLl9kZWZTY3JvbGxIZWlnaHRQeCA9IHRoaXMuX3Njcm9sbGFibGVCb2R5LmNsaWVudEhlaWdodDtcbiAgICAgICAgICB0aGlzLl9kZWZTY3JvbGxIZWlnaHRQeEluaXRpYWwgPSB0aGlzLl9kZWZTY3JvbGxIZWlnaHRQeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hdXRvTGF5b3V0KSB7XG4gICAgICAgICAgdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KFxuICAgICAgICAgICAgdGhpcy5fc2Nyb2xsYWJsZUJvZHksXG4gICAgICAgICAgICAnc2Nyb2xsJ1xuICAgICAgICAgICkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKHRydWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2hlYWRlckJveCA9IHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcucC10cmVldGFibGUtc2Nyb2xsYWJsZS1oZWFkZXItYm94J1xuICAgICAgKTtcblxuICAgICAgaWYgKHRoaXMuX2hlYWRlckJveCkge1xuICAgICAgICBpZiAodGhpcy5taW5XaWR0aEZvckJvZHlPbmx5ICYmIHRoaXMubWluV2lkdGgpIHtcbiAgICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuX2hlYWRlckJveC5xdWVyeVNlbGVjdG9yKCd0YWJsZScpO1xuICAgICAgICAgIGlmICh0YWJsZSkgdGFibGUuc3R5bGUubWluV2lkdGggPSB0aGlzLm1pbldpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2Nyb2xsYmFyV2lkdGggPSBEb21IYW5kbGVyLmNhbGN1bGF0ZVNjcm9sbGJhcldpZHRoKCk7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5fc2Nyb2xsYWJsZUJvZHkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fbmVlZFJlY2FsY0F1dG9MYXlvdXQpIHtcbiAgICAgICAgdGhpcy5fY2FsY0F1dG9MYXlvdXRIZWFkZXJXaWR0aHMoKTtcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnNjcm9sbGFibGUpIHtcbiAgICAgIGNvbnN0IHRhYmxlV3JhcHBlciA9XG4gICAgICAgIHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5lbD8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAnLnAtdHJlZXRhYmxlLXdyYXBwZXInXG4gICAgICAgICk7XG4gICAgICBpZiAodGFibGVXcmFwcGVyICYmIHRoaXMubWluV2lkdGhGb3JCb2R5T25seSAmJiB0aGlzLm1pbldpZHRoKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGFibGVXcmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlJyk7XG4gICAgICAgIGlmICh0YWJsZSkgdGFibGUuc3R5bGUubWluV2lkdGggPSB0aGlzLm1pbldpZHRoO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5fbmVlZFJlY2FsY0F1dG9MYXlvdXQpIHtcbiAgICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKCk7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGwpIHJldHVybjtcblxuICAgIGlmICghdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHggJiYgdGhpcy5kZWZTY3JvbGxIZWlnaHQgPT09ICdmbGV4Jykge1xuICAgICAgdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHggPSB0aGlzLl9zY3JvbGxhYmxlQm9keS5jbGllbnRIZWlnaHQ7XG4gICAgICB0aGlzLl9kZWZTY3JvbGxIZWlnaHRQeEluaXRpYWwgPSB0aGlzLl9kZWZTY3JvbGxIZWlnaHRQeDtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUpIHtcbiAgICAgIHRoaXMuX3JlY2FsY1ZpcnR1YWxIZWlnaHQoKTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICBpZiAodGhpcy5jbGVhckdsb2JhbEZpbHRlck9uTG9hZGluZykgdGhpcy5jbGVhckdsb2JhbEZpbHRlcigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGxJdGVtSGVpZ2h0KVxuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSB0aGlzLnZpcnR1YWxTY3JvbGxJdGVtSGVpZ2h0O1xuXG4gICAgdGhpcy5fc2V0TWluV2lkdGhPdmVyYWxsKCk7XG5cbiAgICBjb25zdCBkYXRhQ2hhbmdlcyA9IGNoYW5nZXM/LmRhdGE7XG4gICAgaWYgKGRhdGFDaGFuZ2VzPy5wcmV2aW91c1ZhbHVlICE9PSBkYXRhQ2hhbmdlcz8uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKHRydWUpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICBpZiAodGhpcy5hdXRvTGF5b3V0KSB0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25XaW5kb3dSZXNpemUuYmluZCh0aGlzKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2FsY0F1dG9MYXlvdXRIZWFkZXJXaWR0aHMoZm9yY2VkID0gZmFsc2UpIHtcbiAgICBpZiAoIXRoaXMuYXV0b0xheW91dCB8fCAhdGhpcy5zY3JvbGxhYmxlKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuX25lZWRSZWNhbGNBdXRvTGF5b3V0ICYmICFmb3JjZWQpIHJldHVybjtcblxuICAgIGNvbnN0IGhlYWRlclJvd3MgPSB0aGlzLl9oZWFkZXJCb3g/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJyk7XG4gICAgaWYgKCFoZWFkZXJSb3dzPy5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IGhlYWRlckNlbGxzID1cbiAgICAgIGhlYWRlclJvd3NbaGVhZGVyUm93cy5sZW5ndGggLSAxXT8ucXVlcnlTZWxlY3RvckFsbCgndGgnKTtcbiAgICBpZiAoIWhlYWRlckNlbGxzPy5sZW5ndGgpIHJldHVybjtcblxuICAgIGxldCBoYXNTZWxlY3RhYmxlQ2VsbCA9IGZhbHNlO1xuICAgIGxldCBoYXNSb3dNZW51Q2VsbCA9IGZhbHNlO1xuXG4gICAgY29uc3QgdGhzID0gQXJyYXkuZnJvbShoZWFkZXJDZWxscyk7XG4gICAgaWYgKHRocy5tYXAoKHRoOiBhbnkpID0+IHRoLm9mZnNldFdpZHRoKS5ldmVyeSgodykgPT4gdyA9PT0gMCkpIHJldHVybjtcblxuICAgIGNvbnN0IHRoV2lkdGhzID0gdGhzLm1hcCgodGg6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgd3ByZXYgPSB0aC5zdHlsZS53aWR0aDtcblxuICAgICAgY29uc3QgaXNTZWxlY3RhYmxlQ2VsbCA9IHRoLmNsYXNzTGlzdC5jb250YWlucyhcbiAgICAgICAgJ2Nwcy10cmVldGFibGUtc2VsZWN0YWJsZS1jZWxsJ1xuICAgICAgKTtcblxuICAgICAgY29uc3QgaXNSb3dDZWxsID0gdGguY2xhc3NMaXN0LmNvbnRhaW5zKCdjcHMtdHJlZXRhYmxlLXJvdy1tZW51LWNlbGwnKTtcblxuICAgICAgaWYgKGlzU2VsZWN0YWJsZUNlbGwpIGhhc1NlbGVjdGFibGVDZWxsID0gdHJ1ZTtcbiAgICAgIGlmIChpc1Jvd0NlbGwpIGhhc1Jvd01lbnVDZWxsID0gdHJ1ZTtcblxuICAgICAgbGV0IHRoV2lkdGggPSA1NTtcbiAgICAgIGlmICghaXNTZWxlY3RhYmxlQ2VsbCAmJiAhaXNSb3dDZWxsKSB7XG4gICAgICAgIHRoLnN0eWxlLndpZHRoID0gJ21pbi1jb250ZW50JztcbiAgICAgICAgdGguc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIHRoV2lkdGggPSB0aC5vZmZzZXRXaWR0aDtcbiAgICAgICAgdGguc3R5bGUud2lkdGggPSB3cHJldjtcbiAgICAgICAgdGguc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoV2lkdGg7XG4gICAgfSk7XG5cbiAgICBjb25zdCBib2R5Um93cyA9IHRoaXMuX3Njcm9sbGFibGVCb2R5Py5xdWVyeVNlbGVjdG9yQWxsKCd0cicpO1xuICAgIGlmICghYm9keVJvd3M/Lmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgdGRXaWR0aHM6IG51bWJlcltdID0gW107XG4gICAgYm9keVJvd3MuZm9yRWFjaCgodHI6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCB0ZHMgPSB0cj8ucXVlcnlTZWxlY3RvckFsbCgndGQnKTtcbiAgICAgIHRkcz8uZm9yRWFjaCgodGQ6IEhUTUxFbGVtZW50LCBpZHg6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCB3cHJldiA9IHRkLnN0eWxlLndpZHRoO1xuICAgICAgICBjb25zdCBpc1NlbGVjdGFibGVPclJvd01lbnVDZWxsID1cbiAgICAgICAgICB0ZC5jbGFzc0xpc3QuY29udGFpbnMoJ2Nwcy10cmVldGFibGUtc2VsZWN0YWJsZS1jZWxsJykgfHxcbiAgICAgICAgICB0ZC5jbGFzc0xpc3QuY29udGFpbnMoJ2Nwcy10cmVldGFibGUtcm93LW1lbnUtY2VsbCcpO1xuXG4gICAgICAgIGxldCB0ZFdpZHRoID0gNTU7XG4gICAgICAgIGlmICghaXNTZWxlY3RhYmxlT3JSb3dNZW51Q2VsbCkge1xuICAgICAgICAgIHRkLnN0eWxlLndpZHRoID0gJ21pbi1jb250ZW50JztcbiAgICAgICAgICB0ZC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICB0ZFdpZHRoID0gdGQub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgdGQuc3R5bGUud2lkdGggPSB3cHJldjtcbiAgICAgICAgICB0ZC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0ZFdpZHRoc1tpZHhdKSB0ZFdpZHRoc1tpZHhdID0gMDtcbiAgICAgICAgdGRXaWR0aHNbaWR4XSA9IE1hdGgubWF4KHRkV2lkdGhzW2lkeF0sIHRkV2lkdGgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhXaWR0aHMubGVuZ3RoICE9PSB0ZFdpZHRocy5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IG1heFdpZHRocyA9IHRoV2lkdGhzLm1hcCgodiwgaWR4KSA9PiBNYXRoLm1heCh2LCB0ZFdpZHRoc1tpZHhdKSk7XG4gICAgbGV0IHN1bSA9IG1heFdpZHRocy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgICBpZiAoaGFzU2VsZWN0YWJsZUNlbGwpIHtcbiAgICAgIHN1bSAtPSA1NTtcbiAgICAgIG1heFdpZHRocy5zaGlmdCgpO1xuICAgIH1cbiAgICBpZiAoaGFzUm93TWVudUNlbGwpIHtcbiAgICAgIHN1bSAtPSA1NTtcbiAgICAgIG1heFdpZHRocy5wb3AoKTtcbiAgICB9XG5cbiAgICBjb25zdCBwZXJjZW50YWdlcyA9IG1heFdpZHRocy5tYXAoKHYpID0+ICh2IC8gc3VtKSAqIDEwMCk7XG5cbiAgICBoZWFkZXJDZWxscy5mb3JFYWNoKCh0aDogYW55LCBpZHg6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAoaGFzU2VsZWN0YWJsZUNlbGwgJiYgaWR4ID09PSAwKSB8fFxuICAgICAgICAoaGFzUm93TWVudUNlbGwgJiYgaWR4ID09PSBoZWFkZXJDZWxscy5sZW5ndGggLSAxKVxuICAgICAgKSB7XG4gICAgICAgIHRoLnN0eWxlLndpZHRoID0gJzU1cHgnO1xuICAgICAgfSBlbHNlXG4gICAgICAgIHRoLnN0eWxlLndpZHRoID0gcGVyY2VudGFnZXNbaGFzU2VsZWN0YWJsZUNlbGwgPyBpZHggLSAxIDogaWR4XSArICclJztcbiAgICB9KTtcblxuICAgIGJvZHlSb3dzLmZvckVhY2goKHRyOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgdGRzID0gdHI/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJyk7XG4gICAgICB0ZHM/LmZvckVhY2goKHRkOiBIVE1MRWxlbWVudCwgaWR4OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChoYXNTZWxlY3RhYmxlQ2VsbCAmJiBpZHggPT09IDApIHx8XG4gICAgICAgICAgKGhhc1Jvd01lbnVDZWxsICYmIGlkeCA9PT0gdGRzLmxlbmd0aCAtIDEpXG4gICAgICAgICkge1xuICAgICAgICAgIHRkLnN0eWxlLndpZHRoID0gJzU1cHgnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRkLnN0eWxlLndpZHRoID0gcGVyY2VudGFnZXNbaGFzU2VsZWN0YWJsZUNlbGwgPyBpZHggLSAxIDogaWR4XSArICclJztcbiAgICAgICAgfVxuICAgICAgICB0ZC5zdHlsZS5vcGFjaXR5ID0gJzEnO1xuICAgICAgICBpZiAodGhpcy5ib3JkZXJlZClcbiAgICAgICAgICB0ZC5zdHlsZS5ib3JkZXJMZWZ0Q29sb3IgPSAndmFyKC0tY3BzLWNvbG9yLWxpbmUtbWlkKSc7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX25lZWRSZWNhbGNBdXRvTGF5b3V0ID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVWaXJ0dWFsU2Nyb2xsSXRlbVNpemUoKSB7XG4gICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGwgfHwgdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbUhlaWdodCkgcmV0dXJuO1xuXG4gICAgY29uc3QgdHJzID0gdGhpcy5wcmltZW5nVHJlZVRhYmxlPy5lbD8ubmF0aXZlRWxlbWVudFxuICAgICAgPy5xdWVyeVNlbGVjdG9yKCcucC10cmVldGFibGUtdGJvZHknKVxuICAgICAgPy5xdWVyeVNlbGVjdG9yQWxsKCd0cicpO1xuXG4gICAgaWYgKCF0cnM/Lmxlbmd0aCkgcmV0dXJuO1xuICAgIGlmICghdHJzWzBdPy5vZmZzZXRIZWlnaHQpIHJldHVybjtcblxuICAgIGxldCBoID0gMDtcbiAgICB0cnMuZm9yRWFjaCgodHI6IEhUTUxFbGVtZW50LCBpZHg6IG51bWJlcikgPT4ge1xuICAgICAgbGV0IHJoID0gMDtcbiAgICAgIGNvbnN0IHRkcyA9IHRyPy5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpO1xuICAgICAgdGRzPy5mb3JFYWNoKCh0ZDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgdGQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIGlmICh0ZC5vZmZzZXRIZWlnaHQpIHJoID0gTWF0aC5tYXgocmgsIHRkLm9mZnNldEhlaWdodCk7XG4gICAgICAgIHRkLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgIH0pO1xuICAgICAgaWYgKHJoKSB7XG4gICAgICAgIGggPSBpZHggPT09IDAgPyByaCA6IE1hdGgubWluKGgsIHJoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMudmlydHVhbFNjcm9sbEl0ZW1TaXplID0gaDtcbiAgfVxuXG4gIHByaXZhdGUgX3NldE1pbldpZHRoT3ZlcmFsbCgpIHtcbiAgICBpZiAodGhpcy5taW5XaWR0aEZvckJvZHlPbmx5IHx8ICF0aGlzLm1pbldpZHRoIHx8ICF0aGlzLnByaW1lbmdUcmVlVGFibGUpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCB0cmVlVGFibGVNYWluID1cbiAgICAgIHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5lbD8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcignLnAtdHJlZXRhYmxlJyk7XG4gICAgaWYgKHRyZWVUYWJsZU1haW4pIHtcbiAgICAgIHRyZWVUYWJsZU1haW4uc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gICAgICBjb25zdCBwYWdpbmF0b3JFbCA9IHRyZWVUYWJsZU1haW4ucXVlcnlTZWxlY3RvcignLnAtcGFnaW5hdG9yJyk7XG4gICAgICBpZiAocGFnaW5hdG9yRWwpIHBhZ2luYXRvckVsLnN0eWxlLm1pbldpZHRoID0gdGhpcy5taW5XaWR0aDtcbiAgICAgIGNvbnN0IGxvYWRpbmdPdmVybGF5ID0gdHJlZVRhYmxlTWFpbi5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLnAtdHJlZXRhYmxlLWxvYWRpbmctb3ZlcmxheSdcbiAgICAgICk7XG4gICAgICBpZiAobG9hZGluZ092ZXJsYXkpIGxvYWRpbmdPdmVybGF5LnN0eWxlLm1pbldpZHRoID0gdGhpcy5taW5XaWR0aDtcbiAgICB9XG5cbiAgICBjb25zdCBzY3JvbGxhYmxlV3JhcHBlciA9XG4gICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZWw/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcucC10cmVldGFibGUtc2Nyb2xsYWJsZS13cmFwcGVyJ1xuICAgICAgKTtcbiAgICBpZiAoc2Nyb2xsYWJsZVdyYXBwZXIpIHNjcm9sbGFibGVXcmFwcGVyLnN0eWxlLm1pbldpZHRoID0gdGhpcy5taW5XaWR0aDtcblxuICAgIGlmICghdGhpcy5zY3JvbGxhYmxlKSB7XG4gICAgICBjb25zdCB0YWJsZVdyYXBwZXIgPVxuICAgICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZWw/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgJy5wLXRyZWV0YWJsZS13cmFwcGVyJ1xuICAgICAgICApO1xuICAgICAgaWYgKHRhYmxlV3JhcHBlcikgdGFibGVXcmFwcGVyLnN0eWxlLm1pbldpZHRoID0gdGhpcy5taW5XaWR0aDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmVlVGFibGVIZWFkZXIgPVxuICAgICAgdGhpcy5wcmltZW5nVHJlZVRhYmxlLmVsPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLnAtdHJlZXRhYmxlLWhlYWRlcidcbiAgICAgICk7XG4gICAgaWYgKHRyZWVUYWJsZUhlYWRlcikgdHJlZVRhYmxlSGVhZGVyLnN0eWxlLm1pbldpZHRoID0gdGhpcy5taW5XaWR0aDtcbiAgfVxuXG4gIHByaXZhdGUgX29uV2luZG93UmVzaXplKCkge1xuICAgIC8vIGlmICh0aGlzLmRlZlNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnKVxuICAgIC8vICAgdGhpcy5kZWZTY3JvbGxIZWlnaHRQeCA9IHRoaXMuc2Nyb2xsYWJsZUJvZHkuY2xpZW50SGVpZ2h0O1xuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3dpbmRvd1Jlc2l6ZURlYm91bmNlcik7XG4gICAgdGhpcy5fd2luZG93UmVzaXplRGVib3VuY2VyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGdldCBzdHlsZUNsYXNzKCkge1xuICAgIGNvbnN0IGNsYXNzZXNMaXN0ID0gW107XG4gICAgc3dpdGNoICh0aGlzLnNpemUpIHtcbiAgICAgIGNhc2UgJ3NtYWxsJzpcbiAgICAgICAgY2xhc3Nlc0xpc3QucHVzaCgncC10cmVldGFibGUtc20nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsYXJnZSc6XG4gICAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ3AtdHJlZXRhYmxlLWxnJyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNUb29sYmFyKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMudG9vbGJhclNpemUpIHtcbiAgICAgICAgY2FzZSAnc21hbGwnOlxuICAgICAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ2Nwcy10YmFyLXNtYWxsJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ25vcm1hbCc6XG4gICAgICAgICAgY2xhc3Nlc0xpc3QucHVzaCgnY3BzLXRiYXItbm9ybWFsJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnN0cmlwZWQpIHtcbiAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ3AtdHJlZXRhYmxlLXN0cmlwZWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYm9yZGVyZWQpIHtcbiAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ3AtdHJlZXRhYmxlLWdyaWRsaW5lcycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNjcm9sbEhlaWdodCAmJiAhdGhpcy5sb2FkaW5nICYmIHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICBjbGFzc2VzTGlzdC5wdXNoKCdjcHMtdHJlZXRhYmxlLWJvdHRvbS1ib3JkZXJlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc2VzTGlzdC5qb2luKCcgJyk7XG4gIH1cblxuICBwcml2YXRlIF9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCkge1xuICAgIGlmICghdGhpcy5fc2Nyb2xsYmFyVmlzaWJsZSAmJiB0aGlzLnZpcnR1YWxTY3JvbGwpXG4gICAgICB0aGlzLl9zY3JvbGxhYmxlQm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cnLCAnaGlkZGVuJywgJ2ltcG9ydGFudCcpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsICYmIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpO1xuICAgICAgICBjb25zdCBpdGVtc0xlbiA9IHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5zZXJpYWxpemVkVmFsdWUubGVuZ3RoO1xuICAgICAgICBpZiAoaXRlbXNMZW4gPCAxKSB7XG4gICAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSB0aGlzLmVtcHR5Qm9keUhlaWdodFxuICAgICAgICAgICAgPyAoYGNhbGMoJHt0aGlzLmVtcHR5Qm9keUhlaWdodH0gKyAxcHgpYCBhcyBzdHJpbmcpXG4gICAgICAgICAgICA6IHRoaXMudmlydHVhbFNjcm9sbEl0ZW1TaXplICsgMSArICdweCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY3VySGVpZ2h0ID0gdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgKiBpdGVtc0xlbiArIDI7XG4gICAgICAgICAgaWYgKHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ID09PSAnZmxleCcpIHtcbiAgICAgICAgICAgIGlmIChjdXJIZWlnaHQgPj0gdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHhJbml0aWFsKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsSGVpZ2h0ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICB0aGlzLl9zY3JvbGxhYmxlQm9keS5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICAgICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPVxuICAgICAgICAgICAgTWF0aC5taW4odGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHgsIGN1ckhlaWdodCkgKyAncHgnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9yZW1vdmVOb2RlRnJvbURhdGEobm9kZVRvUmVtb3ZlOiBhbnksIHNpbmdsZSA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zdCBfZmluZFRvcFNvcnRPcmRlciA9IChfbm9kZTogYW55KTogYW55ID0+IHtcbiAgICAgIGlmICghX25vZGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAodHlwZW9mIF9ub2RlLl9kZWZhdWx0U29ydE9yZGVyID09PSAnbnVtYmVyJylcbiAgICAgICAgcmV0dXJuIF9ub2RlLl9kZWZhdWx0U29ydE9yZGVyO1xuICAgICAgcmV0dXJuIF9maW5kVG9wU29ydE9yZGVyKF9ub2RlLnBhcmVudCk7XG4gICAgfTtcblxuICAgIGNvbnN0IF9yZW1vdmVGcm9tQ2hpbGRyZW4gPSAoX25vZGU6IGFueSkgPT4ge1xuICAgICAgaWYgKCFfbm9kZT8uY2hpbGRyZW4pIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGlkeCA9IF9ub2RlLmNoaWxkcmVuLmluZGV4T2Yobm9kZVRvUmVtb3ZlKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBfbm9kZS5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgaWYgKF9ub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGRlbGV0ZSBfbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgX25vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoX3JlbW92ZUZyb21DaGlsZHJlbihjaGlsZCkpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gbG9jYXRlIHRvcCBsZXZlbCBub2RlXG4gICAgY29uc3Qgc29ydE9yZGVyID0gX2ZpbmRUb3BTb3J0T3JkZXIobm9kZVRvUmVtb3ZlKTtcbiAgICBpZiAoc29ydE9yZGVyID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICBjb25zdCBub2RlID0gdGhpcy5kYXRhLmZpbmQoKG4pID0+IG4uX2RlZmF1bHRTb3J0T3JkZXIgPT09IHNvcnRPcmRlcik7XG4gICAgaWYgKCFub2RlKSByZXR1cm47XG5cbiAgICAvLyByZW1vdmUgdGhlIG5vZGUgaXRzZWxmIG9yIHJlbW92ZSBpdHMgY2hpbGRcbiAgICBpZiAobm9kZVRvUmVtb3ZlID09PSBub2RlKSB7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuZmlsdGVyKCh2OiBhbnkpID0+IHYgIT09IG5vZGVUb1JlbW92ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIF9yZW1vdmVGcm9tQ2hpbGRyZW4obm9kZSk7XG4gICAgICAgIGlmIChzaW5nbGUpIHRoaXMuZGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNsZWFyR2xvYmFsRmlsdGVyKCkge1xuICAgIHRoaXMuZ2xvYmFsRmlsdGVyQ29tcD8uY2xlYXIoKTtcbiAgfVxuXG4gIG9uU29ydEZ1bmN0aW9uKGV2ZW50OiBTb3J0RXZlbnQpIHtcbiAgICB0aGlzLmN1c3RvbVNvcnRGdW5jdGlvbi5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uRmlsdGVyR2xvYmFsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZmlsdGVyR2xvYmFsKHZhbHVlLCAnY29udGFpbnMnKTtcbiAgfVxuXG4gIG9uQ2xpY2tBZGRpdGlvbmFsQnRuT25TZWxlY3QoKSB7XG4gICAgdGhpcy5hZGRpdGlvbmFsQnRuT25TZWxlY3RDbGlja2VkLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICB9XG5cbiAgb25DbGlja0FjdGlvbkJ0bigpIHtcbiAgICB0aGlzLmFjdGlvbkJ0bkNsaWNrZWQuZW1pdCgpO1xuICB9XG5cbiAgb25SZWxvYWREYXRhKCkge1xuICAgIGlmICh0aGlzLmRhdGFSZWxvYWRCdG5EaXNhYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuZGF0YVJlbG9hZEJ0bkNsaWNrZWQuZW1pdCgpO1xuICB9XG5cbiAgb25Db2x1bW5zVG9nZ2xlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zVG9nZ2xlQnRuRGlzYWJsZWQpIHJldHVybjtcbiAgICB0aGlzLmNvbFRvZ2dsZU1lbnU/LnRvZ2dsZShldmVudCk7XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkUm93cy5mb3JFYWNoKChyb3cpID0+IHRoaXMuX3JlbW92ZU5vZGVGcm9tRGF0YShyb3csIGZhbHNlKSk7XG4gICAgdGhpcy5kYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgdGhpcy5yb3dzUmVtb3ZlZC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5fcmVjYWxjVmlydHVhbEhlaWdodCgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fY2FsY0F1dG9MYXlvdXRIZWFkZXJXaWR0aHModHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBjbGVhclNlbGVjdGlvbigpIHtcbiAgICB0aGlzLnNlbGVjdGVkUm93cyA9IFtdO1xuICB9XG5cbiAgb25FZGl0Um93Q2xpY2tlZChub2RlOiBhbnkpIHtcbiAgICB0aGlzLmVkaXRSb3dCdG5DbGlja2VkLmVtaXQobm9kZSk7XG4gIH1cblxuICBvblJlbW92ZVJvd0NsaWNrZWQobm9kZTogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSB0aGlzLnNlbGVjdGVkUm93cy5maWx0ZXIoKHY6IGFueSkgPT4gdiAhPT0gbm9kZSk7XG4gICAgdGhpcy5fcmVtb3ZlTm9kZUZyb21EYXRhKG5vZGUpO1xuICAgIHRoaXMucm93c1JlbW92ZWQuZW1pdChbbm9kZV0pO1xuICAgIHRoaXMuX3JlY2FsY1ZpcnR1YWxIZWlnaHQoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlQWxsQ29sdW1ucygpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9XG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPCB0aGlzLmNvbHVtbnMubGVuZ3RoID8gdGhpcy5jb2x1bW5zIDogW107XG4gICAgdGhpcy5jb2x1bW5zU2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkQ29sdW1ucyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQ29sdW1uU2VsZWN0ZWQoY29sOiBhbnkpIHtcbiAgICByZXR1cm4gISFmaW5kKHRoaXMuc2VsZWN0ZWRDb2x1bW5zLCAoaXRlbSkgPT4gaXNFcXVhbChpdGVtLCBjb2wpKTtcbiAgfVxuXG4gIG9uUm93c1BlclBhZ2VDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLnJlc2V0UGFnZU9uUm93c0NoYW5nZSkge1xuICAgICAgdGhpcy5wcmltZW5nVHJlZVRhYmxlLmZpcnN0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VQYWdlKHRoaXMuZ2V0UGFnZSgpKTtcbiAgfVxuXG4gIGdldFBhZ2VDb3VudCgpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMucHJpbWVuZ1RyZWVUYWJsZS50b3RhbFJlY29yZHMgLyB0aGlzLnJvd3MpO1xuICB9XG5cbiAgZ2V0UGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5maXJzdCAvIHRoaXMucm93cyk7XG4gIH1cblxuICBjaGFuZ2VQYWdlKHA6IG51bWJlcikge1xuICAgIGNvbnN0IHBjID0gTWF0aC5jZWlsKHRoaXMuZ2V0UGFnZUNvdW50KCkpO1xuXG4gICAgaWYgKHAgPj0gMCAmJiBwIDwgcGMpIHtcbiAgICAgIHRoaXMuZmlyc3QgPSB0aGlzLnJvd3MgKiBwO1xuICAgICAgdGhpcy5wcmltZW5nVHJlZVRhYmxlLm9uUGFnZUNoYW5nZSh7XG4gICAgICAgIGZpcnN0OiB0aGlzLmZpcnN0LFxuICAgICAgICByb3dzOiB0aGlzLnJvd3NcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uUGFnZUNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5maXJzdCA9IGV2ZW50LmZpcnN0O1xuICAgIHRoaXMucm93cyA9IGV2ZW50LnJvd3M7XG5cbiAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgIHBhZ2U6IHRoaXMuZ2V0UGFnZSgpLFxuICAgICAgZmlyc3Q6IHRoaXMuZmlyc3QsXG4gICAgICByb3dzOiB0aGlzLnJvd3MsXG4gICAgICBwYWdlQ291bnQ6IE1hdGguY2VpbCh0aGlzLmdldFBhZ2VDb3VudCgpKVxuICAgIH07XG5cbiAgICB0aGlzLnBhZ2VDaGFuZ2VkLmVtaXQoc3RhdGUpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fY2FsY0F1dG9MYXlvdXRIZWFkZXJXaWR0aHModHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBvbkxhenlMb2FkZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubGF6eUxvYWRlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uTm9kZUV4cGFuZGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vZGVFeHBhbmRlZC5lbWl0KGV2ZW50KTtcbiAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uTm9kZUNvbGxhcHNlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5ub2RlQ29sbGFwc2VkLmVtaXQoZXZlbnQpO1xuICAgIHRoaXMuX3JlY2FsY1ZpcnR1YWxIZWlnaHQoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgb25Ob2RlU2VsZWN0ZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubm9kZVNlbGVjdGVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25Ob2RlVW5zZWxlY3RlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5ub2RlVW5zZWxlY3RlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uU29ydChldmVudDogYW55KSB7XG4gICAgdGhpcy5zb3J0ZWQuZW1pdChldmVudCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRmlsdGVyKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpbHRlcmVkLmVtaXQoZXZlbnQpO1xuICAgIHRoaXMuX3JlY2FsY1ZpcnR1YWxIZWlnaHQoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgb25TZWxlY3RDb2x1bW4oY29sOiBhbnkpIHtcbiAgICBsZXQgcmVzID0gW10gYXMgYW55O1xuICAgIGlmICh0aGlzLmlzQ29sdW1uU2VsZWN0ZWQoY29sKSkge1xuICAgICAgcmVzID0gdGhpcy5zZWxlY3RlZENvbHVtbnMuZmlsdGVyKCh2OiBhbnkpID0+ICFpc0VxdWFsKHYsIGNvbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgobykgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc29tZSgodjogYW55KSA9PiBpc0VxdWFsKHYsIG8pKSB8fFxuICAgICAgICAgIGlzRXF1YWwoY29sLCBvKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXMucHVzaChvKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gcmVzO1xuICAgIHRoaXMuY29sdW1uc1NlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZENvbHVtbnMpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fY2FsY0F1dG9MYXlvdXRIZWFkZXJXaWR0aHModHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBvblNlbGVjdGlvbkNoYW5nZWQoc2VsZWN0aW9uOiBhbnlbXSkge1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHNlbGVjdGlvbik7XG4gIH1cbn1cbiIsIjxwLXRyZWVUYWJsZVxuICAjcHJpbWVuZ1RyZWVUYWJsZVxuICB0dFdpdGhVbnNvcnRcbiAgW25nQ2xhc3NdPVwie1xuICAgICdjcHMtdHJlZXRhYmxlLWxvYWRpbmcnOiBsb2FkaW5nLFxuICAgICdjcHMtdHJlZXRhYmxlLWZsZXgnOiBkZWZTY3JvbGxIZWlnaHQgPT09ICdmbGV4JyxcbiAgICAnY3BzLXRyZWV0YWJsZS1ub252aXJ0dWFsJzogIXZpcnR1YWxTY3JvbGwsXG4gICAgJ2Nwcy10cmVldGFibGUtYXV0b2xheW91dC1jYWxjZWQnOiBhdXRvTGF5b3V0ICYmIHNjcm9sbGFibGUsXG4gIH1cIlxuICBbdmFsdWVdPVwiZGF0YVwiXG4gIFthdXRvTGF5b3V0XT1cImF1dG9MYXlvdXQgJiYgIXNjcm9sbGFibGVcIlxuICBbc2Nyb2xsYWJsZV09XCJzY3JvbGxhYmxlXCJcbiAgW3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHRcIlxuICBbdmlydHVhbFNjcm9sbF09XCJ2aXJ0dWFsU2Nyb2xsXCJcbiAgW3ZpcnR1YWxTY3JvbGxJdGVtU2l6ZV09XCJ2aXJ0dWFsU2Nyb2xsSXRlbVNpemVcIlxuICBbdmlydHVhbFNjcm9sbE9wdGlvbnNdPVwie1xuICAgIG51bVRvbGVyYXRlZEl0ZW1zOiBudW1Ub2xlcmF0ZWRJdGVtcyxcbiAgICBhdXRvU2l6ZTogZmFsc2VcbiAgfVwiXG4gIFtjb2x1bW5zXT1cInNlbGVjdGVkQ29sdW1uc1wiXG4gIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICBbcm93SG92ZXJdPVwicm93SG92ZXJcIlxuICBbbGF6eV09XCJsYXp5XCJcbiAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkUm93c1wiXG4gIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICBjb21wYXJlU2VsZWN0aW9uQnk9XCJlcXVhbHNcIlxuICBbbGF6eUxvYWRPbkluaXRdPVwibGF6eUxvYWRPbkluaXRcIlxuICBbc3R5bGVDbGFzc109XCJzdHlsZUNsYXNzXCJcbiAgW3RhYmxlU3R5bGVdPVwidGFibGVTdHlsZVwiXG4gIFt0YWJsZVN0eWxlQ2xhc3NdPVwidGFibGVTdHlsZUNsYXNzXCJcbiAgW2N1c3RvbVNvcnRdPVwiY3VzdG9tU29ydFwiXG4gIFtzb3J0TW9kZV09XCJzb3J0TW9kZVwiXG4gIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCJcbiAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxuICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxuICBbYWx3YXlzU2hvd1BhZ2luYXRvcl09XCJhbHdheXNTaG93UGFnaW5hdG9yXCJcbiAgW3Jvd3NdPVwicm93c1wiXG4gIFtmaXJzdF09XCJmaXJzdFwiXG4gIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcbiAgW3Jlc2V0UGFnZU9uU29ydF09XCJyZXNldFBhZ2VPblNvcnRcIlxuICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie2ZpcnN0fSAtIHtsYXN0fSBvZiB7dG90YWxSZWNvcmRzfVwiXG4gIChvblBhZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAob25Tb3J0KT1cIm9uU29ydCgkZXZlbnQpXCJcbiAgKG9uRmlsdGVyKT1cIm9uRmlsdGVyKCRldmVudClcIlxuICAob25MYXp5TG9hZCk9XCJvbkxhenlMb2FkZWQoJGV2ZW50KVwiXG4gIChzb3J0RnVuY3Rpb24pPVwib25Tb3J0RnVuY3Rpb24oJGV2ZW50KVwiXG4gIChvbk5vZGVFeHBhbmQpPVwib25Ob2RlRXhwYW5kZWQoJGV2ZW50KVwiXG4gIChvbk5vZGVDb2xsYXBzZSk9XCJvbk5vZGVDb2xsYXBzZWQoJGV2ZW50KVwiXG4gIChvbk5vZGVTZWxlY3QpPVwib25Ob2RlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gIChvbk5vZGVVbnNlbGVjdCk9XCJvbk5vZGVVbnNlbGVjdGVkKCRldmVudClcIj5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIiAqbmdJZj1cImhhc1Rvb2xiYXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidG9vbGJhclRlbXBsYXRlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9vbGJhclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0b29sYmFyVGVtcGxhdGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItbGVmdFwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwidG9vbGJhckljb25cIiBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1pY29uXCI+XG4gICAgICAgICAgPGNwcy1pY29uIFtpY29uXT1cInRvb2xiYXJJY29uXCIgW2NvbG9yXT1cInRvb2xiYXJJY29uQ29sb3JcIj48L2Nwcy1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci10aXRsZVwiPnt7IHRvb2xiYXJUaXRsZSB9fTwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0dsb2JhbEZpbHRlclwiIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWdsb2JhbC1maWx0ZXJcIj5cbiAgICAgICAgICA8Y3BzLWlucHV0XG4gICAgICAgICAgICAjZ2xvYmFsRmlsdGVyQ29tcFxuICAgICAgICAgICAgcHJlZml4SWNvbj1cInNlYXJjaFwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZ2xvYmFsRmlsdGVyUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlZCk9XCJvbkZpbHRlckdsb2JhbCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiXG4gICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJ0b29sYmFyU2l6ZSA9PT0gJ3NtYWxsJyA/ICd1bmRlcmxpbmVkJyA6ICdvdXRsaW5lZCdcIlxuICAgICAgICAgICAgW2hpZGVEZXRhaWxzXT1cInRydWVcIj5cbiAgICAgICAgICA8L2Nwcy1pbnB1dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItcmlnaHRcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd1JlbW92ZUJ0bk9uU2VsZWN0ICYmIHNlbGVjdGVkUm93cy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1idG4tb24tc2VsZWN0XCI+XG4gICAgICAgICAgPGNwcy1idXR0b25cbiAgICAgICAgICAgIGxhYmVsPVwiUmVtb3ZlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZW1vdmVCdG5PblNlbGVjdERpc2FibGVkXCJcbiAgICAgICAgICAgIGNvbG9yPVwicHJlcGFyZWRcIlxuICAgICAgICAgICAgdHlwZT1cImJvcmRlcmxlc3NcIlxuICAgICAgICAgICAgaWNvbj1cInJlbW92ZVwiXG4gICAgICAgICAgICBbc2l6ZV09XCJ0b29sYmFyU2l6ZVwiXG4gICAgICAgICAgICAoY2xpY2tlZCk9XCJyZW1vdmVTZWxlY3RlZCgpXCI+XG4gICAgICAgICAgPC9jcHMtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd0FkZGl0aW9uYWxCdG5PblNlbGVjdCAmJiBzZWxlY3RlZFJvd3MubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItYnRuLW9uLXNlbGVjdFwiPlxuICAgICAgICAgIDxjcHMtYnV0dG9uXG4gICAgICAgICAgICBbbGFiZWxdPVwiYWRkaXRpb25hbEJ0bk9uU2VsZWN0VGl0bGVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFkZGl0aW9uYWxCdG5PblNlbGVjdERpc2FibGVkXCJcbiAgICAgICAgICAgIGNvbG9yPVwicHJlcGFyZWRcIlxuICAgICAgICAgICAgdHlwZT1cImJvcmRlcmxlc3NcIlxuICAgICAgICAgICAgW3NpemVdPVwidG9vbGJhclNpemVcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwib25DbGlja0FkZGl0aW9uYWxCdG5PblNlbGVjdCgpXCI+XG4gICAgICAgICAgPC9jcHMtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dBY3Rpb25CdG5cIiBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1hY3Rpb24tYnRuXCI+XG4gICAgICAgICAgPGNwcy1idXR0b25cbiAgICAgICAgICAgIFtsYWJlbF09XCJhY3Rpb25CdG5UaXRsZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uQnRuRGlzYWJsZWRcIlxuICAgICAgICAgICAgY29sb3I9XCJwcmVwYXJlZFwiXG4gICAgICAgICAgICB0eXBlPVwib3V0bGluZWRcIlxuICAgICAgICAgICAgW3NpemVdPVwidG9vbGJhclNpemVcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwib25DbGlja0FjdGlvbkJ0bigpXCI+XG4gICAgICAgICAgPC9jcHMtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd0NvbHVtbnNUb2dnbGVCdG4gJiYgY29sdW1ucy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1jb2x0b2dnbGUtYnRuXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdidG4tZGlzYWJsZWQnOiBjb2x1bW5zVG9nZ2xlQnRuRGlzYWJsZWQgfVwiPlxuICAgICAgICAgIDxjcHMtaWNvblxuICAgICAgICAgICAgaWNvbj1cImNvbHVtbnNcIlxuICAgICAgICAgICAgc2l6ZT1cIm5vcm1hbFwiXG4gICAgICAgICAgICBbY29sb3JdPVwiXG4gICAgICAgICAgICAgIGNvbHVtbnNUb2dnbGVCdG5EaXNhYmxlZCA/ICd0ZXh0LWxpZ2h0ZXN0JyA6ICdwcmVwYXJlZC1saWdodGVuMSdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25Db2x1bW5zVG9nZ2xlKCRldmVudClcIj48L2Nwcy1pY29uPlxuICAgICAgICAgIDxjcHMtbWVudSAjY29sVG9nZ2xlTWVudSBbd2l0aEFycm93XT1cImZhbHNlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudVwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0gc2VsZWN0LWFsbC1vcHRpb25cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hbGxzZWxlY3RlZF09XCJzZWxlY3RlZENvbHVtbnMubGVuZ3RoID09PSBjb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbENvbHVtbnMoKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWNoZWNrXCI+IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPlNob3cgYWxsIGNvbHVtbnM8L3NwYW5cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0Q29sdW1uKGNvbClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpc0NvbHVtblNlbGVjdGVkKGNvbClcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy10cmVldGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbS1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy10cmVldGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbS1jaGVja1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWxhYmVsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgY29sW2NvbEhlYWRlck5hbWVdXG4gICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9jcHMtbWVudT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNob3dEYXRhUmVsb2FkQnRuXCJcbiAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1yZWxvYWQtYnRuXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdidG4tZGlzYWJsZWQnOiBkYXRhUmVsb2FkQnRuRGlzYWJsZWQgfVwiPlxuICAgICAgICAgIDxjcHMtaWNvblxuICAgICAgICAgICAgaWNvbj1cInJlZnJlc2hcIlxuICAgICAgICAgICAgc2l6ZT1cIjE4XCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJkYXRhUmVsb2FkQnRuRGlzYWJsZWQgPyAndGV4dC1saWdodCcgOiAncHJlcGFyZWQtbGlnaHRlbjEnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblJlbG9hZERhdGEoKVwiPlxuICAgICAgICAgIDwvY3BzLWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiICpuZ0lmPVwibmVzdGVkSGVhZGVyVGVtcGxhdGVcIiBsZXQtY29sdW1ucz5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgbmVzdGVkSGVhZGVyVGVtcGxhdGU7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAkaW1wbGljaXQ6IGNvbHVtbnMsXG4gICAgICAgIH1cbiAgICAgIFwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiAqbmdJZj1cIiFuZXN0ZWRIZWFkZXJUZW1wbGF0ZVwiIGxldC1jb2x1bW5zPlxuICAgIDx0cj5cbiAgICAgIDwhLS0gPHRoIHN0eWxlPVwid2lkdGg6IDNyZW1cIiAqbmdJZj1cInJlb3JkZXJhYmxlUm93c1wiPjwvdGg+IC0tPlxuICAgICAgPHRoICpuZ0lmPVwic2VsZWN0YWJsZVwiIGNwc1RUSGRyU2VsZWN0YWJsZT48L3RoPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlclRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICRpbXBsaWNpdDogY29sdW1ucyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFoZWFkZXJUZW1wbGF0ZSAmJiBjb2x1bW5zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNvcnRhYmxlXCI+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIlxuICAgICAgICAgICAgW2Nwc1RUQ29sU29ydGFibGVdPVwiY29sW2NvbEZpZWxkTmFtZV1cIj5cbiAgICAgICAgICAgIHt7IGNvbFtjb2xIZWFkZXJOYW1lXSB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNvcnRhYmxlXCI+XG4gICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxuICAgICAgICAgICAge3sgY29sW2NvbEhlYWRlck5hbWVdIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDx0aCBjbGFzcz1cImNwcy10cmVldGFibGUtcm93LW1lbnUtY2VsbFwiICpuZ0lmPVwic2hvd1Jvd01lbnVcIj48L3RoPlxuICAgIDwvdHI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgcFRlbXBsYXRlPVwiYm9keVwiXG4gICAgbGV0LXJvd0RhdGE9XCJyb3dEYXRhXCJcbiAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICAgIGxldC1yb3dOb2RlXG4gICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgICA8dHJcbiAgICAgIFt0dFJvd109XCJyb3dOb2RlXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2Nwcy10cmVldGFibGUtcm93LXNlbGVjdGVkJzpcbiAgICAgICAgICBzZWxlY3RhYmxlICYmIHByaW1lbmdUcmVlVGFibGUuaXNTZWxlY3RlZChyb3dOb2RlLm5vZGUpXG4gICAgICB9XCI+XG4gICAgICA8IS0tIDx0ZCAqbmdJZj1cInJlb3JkZXJhYmxlUm93c1wiIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1kcmFnLWhhbmRsZS1jZWxsXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1kcmFnLWhhbmRsZVwiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT7imLA8L3NwYW4+XG4gICAgICA8L3RkPiAtLT5cbiAgICAgIDx0ZCBbY3BzVFRSb3dTZWxlY3RhYmxlXT1cInJvd05vZGVcIiAqbmdJZj1cInNlbGVjdGFibGVcIj48L3RkPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJvZHlUZW1wbGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGJvZHlUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgJGltcGxpY2l0OiByb3dOb2RlLFxuICAgICAgICAgICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMsXG4gICAgICAgICAgICAgIHJvd0RhdGE6IHJvd0RhdGFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYm9keVRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiaSA9PT0gMFwiIFtjcHNUVFJvd1RvZ2dsZXJdPVwicm93Tm9kZVwiPlxuICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbFtjb2xGaWVsZE5hbWVdXSB9fVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImkgPiAwXCI+e3sgcm93RGF0YVtjb2xbY29sRmllbGROYW1lXV0gfX08L3RkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHRkICpuZ0lmPVwic2hvd1Jvd01lbnVcIiBjbGFzcz1cImNwcy10cmVldGFibGUtcm93LW1lbnUtY2VsbFwiPlxuICAgICAgICA8dGFibGUtcm93LW1lbnVcbiAgICAgICAgICAoZWRpdFJvd0J0bkNsaWNrZWQpPVwib25FZGl0Um93Q2xpY2tlZChyb3dOb2RlLm5vZGUpXCJcbiAgICAgICAgICAocmVtb3ZlUm93QnRuQ2xpY2tlZCk9XCJvblJlbW92ZVJvd0NsaWNrZWQocm93Tm9kZS5ub2RlKVwiPlxuICAgICAgICA8L3RhYmxlLXJvdy1tZW51PlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgPHRyPlxuICAgICAgPHRkXG4gICAgICAgIGNvbHNwYW49XCIxMDBcIlxuICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtZW1wdHktbWVzc2FnZS10ZFwiXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBlbXB0eUJvZHlIZWlnaHQgfVwiPlxuICAgICAgICB7eyBlbXB0eU1lc3NhZ2UgfX1cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxvYWRpbmdpY29uXCI+XG4gICAgPGNwcy1sb2FkZXIgW2Z1bGxTY3JlZW5dPVwiZmFsc2VcIiBvcGFjaXR5PVwiMFwiPjwvY3BzLWxvYWRlcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInBhZ2luYXRvcmxlZnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3BzLXRhYmxlLXBhZ2luYXRvci1pdG1zLXBlci1wYWdlXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNwcy10YWJsZS1wYWdpbmF0b3ItaXRlbXMtcGVyLXBhZ2UtdGl0bGVcIlxuICAgICAgICA+Um93cyBwZXIgcGFnZTpcbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxjcHMtc2VsZWN0XG4gICAgICAgIFtvcHRpb25zXT1cInJvd09wdGlvbnNcIlxuICAgICAgICBbaGlkZURldGFpbHNdPVwidHJ1ZVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicm93c1wiXG4gICAgICAgICh2YWx1ZUNoYW5nZWQpPVwib25Sb3dzUGVyUGFnZUNoYW5nZWQoKVwiXG4gICAgICAgIFtyZXR1cm5PYmplY3RdPVwiZmFsc2VcIlxuICAgICAgICBvcHRpb25zQ2xhc3M9XCJjcHMtcGFnaW5hdG9yLXBhZ2Utb3B0aW9uc1wiPlxuICAgICAgPC9jcHMtc2VsZWN0PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JmaXJzdHBhZ2VsaW5raWNvblwiPlxuICAgIDxBbmdsZURvdWJsZUxlZnRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JwcmV2aW91c3BhZ2VsaW5raWNvblwiPlxuICAgIDxBbmdsZUxlZnRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JuZXh0cGFnZWxpbmtpY29uXCI+XG4gICAgPEFuZ2xlUmlnaHRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JsYXN0cGFnZWxpbmtpY29uXCI+XG4gICAgPEFuZ2xlRG91YmxlUmlnaHRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtdHJlZVRhYmxlPlxuIl19