@acorex/data-grid 3.0.25 → 3.0.26

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 (68) hide show
  1. package/README.md +2 -2
  2. package/acorex-data-grid.d.ts +4 -4
  3. package/acorex-data-grid.metadata.json +1 -1
  4. package/bundles/acorex-data-grid.umd.js +1933 -1933
  5. package/bundles/acorex-data-grid.umd.js.map +1 -1
  6. package/bundles/acorex-data-grid.umd.min.js +1 -1
  7. package/bundles/acorex-data-grid.umd.min.js.map +1 -1
  8. package/esm2015/acorex-data-grid.js +4 -4
  9. package/esm2015/lib/data-grid/columns/check-column.component.js +104 -104
  10. package/esm2015/lib/data-grid/columns/column.component.js +204 -204
  11. package/esm2015/lib/data-grid/columns/command-column.component.js +103 -103
  12. package/esm2015/lib/data-grid/columns/date-column.component.js +114 -114
  13. package/esm2015/lib/data-grid/columns/row-number-column.component.js +39 -39
  14. package/esm2015/lib/data-grid/columns/selection-column.component.js +42 -42
  15. package/esm2015/lib/data-grid/columns/text-column.component.js +81 -81
  16. package/esm2015/lib/data-grid/datagrid.component.js +709 -709
  17. package/esm2015/lib/data-grid/datagrid.events.js +1 -1
  18. package/esm2015/lib/data-grid/datagrid.module.js +98 -98
  19. package/esm2015/lib/data-grid/filters/filter.component.js +25 -25
  20. package/esm2015/lib/data-grid/templates/cell-template.component.js +47 -47
  21. package/esm2015/lib/data-grid/templates/detail-template.component.js +45 -45
  22. package/esm2015/lib/data-grid/templates/row-template.component.js +40 -40
  23. package/esm2015/lib/data-lov/data-lov-popup/data-lov-popup.component.js +121 -121
  24. package/esm2015/lib/data-lov/data-lov.component.js +206 -206
  25. package/esm2015/lib/data-lov/data-lov.module.js +21 -21
  26. package/esm2015/public-api.js +17 -17
  27. package/esm5/acorex-data-grid.js +4 -4
  28. package/esm5/lib/data-grid/columns/check-column.component.js +102 -102
  29. package/esm5/lib/data-grid/columns/column.component.js +206 -206
  30. package/esm5/lib/data-grid/columns/command-column.component.js +98 -98
  31. package/esm5/lib/data-grid/columns/date-column.component.js +119 -119
  32. package/esm5/lib/data-grid/columns/row-number-column.component.js +42 -42
  33. package/esm5/lib/data-grid/columns/selection-column.component.js +46 -46
  34. package/esm5/lib/data-grid/columns/text-column.component.js +81 -81
  35. package/esm5/lib/data-grid/datagrid.component.js +767 -767
  36. package/esm5/lib/data-grid/datagrid.events.js +1 -1
  37. package/esm5/lib/data-grid/datagrid.module.js +101 -101
  38. package/esm5/lib/data-grid/filters/filter.component.js +16 -16
  39. package/esm5/lib/data-grid/templates/cell-template.component.js +46 -46
  40. package/esm5/lib/data-grid/templates/detail-template.component.js +49 -49
  41. package/esm5/lib/data-grid/templates/row-template.component.js +44 -44
  42. package/esm5/lib/data-lov/data-lov-popup/data-lov-popup.component.js +127 -127
  43. package/esm5/lib/data-lov/data-lov.component.js +216 -216
  44. package/esm5/lib/data-lov/data-lov.module.js +24 -24
  45. package/esm5/public-api.js +17 -17
  46. package/fesm2015/acorex-data-grid.js +1856 -1856
  47. package/fesm2015/acorex-data-grid.js.map +1 -1
  48. package/fesm5/acorex-data-grid.js +1935 -1935
  49. package/fesm5/acorex-data-grid.js.map +1 -1
  50. package/lib/data-grid/columns/check-column.component.d.ts +30 -30
  51. package/lib/data-grid/columns/column.component.d.ts +29 -29
  52. package/lib/data-grid/columns/command-column.component.d.ts +22 -22
  53. package/lib/data-grid/columns/date-column.component.d.ts +27 -27
  54. package/lib/data-grid/columns/row-number-column.component.d.ts +7 -7
  55. package/lib/data-grid/columns/selection-column.component.d.ts +8 -8
  56. package/lib/data-grid/columns/text-column.component.d.ts +20 -20
  57. package/lib/data-grid/datagrid.component.d.ts +129 -129
  58. package/lib/data-grid/datagrid.events.d.ts +20 -20
  59. package/lib/data-grid/datagrid.module.d.ts +3 -3
  60. package/lib/data-grid/filters/filter.component.d.ts +2 -2
  61. package/lib/data-grid/templates/cell-template.component.d.ts +17 -17
  62. package/lib/data-grid/templates/detail-template.component.d.ts +16 -16
  63. package/lib/data-grid/templates/row-template.component.d.ts +15 -15
  64. package/lib/data-lov/data-lov-popup/data-lov-popup.component.d.ts +29 -29
  65. package/lib/data-lov/data-lov.component.d.ts +39 -39
  66. package/lib/data-lov/data-lov.module.d.ts +2 -2
  67. package/package.json +26 -26
  68. package/public-api.d.ts +17 -17
@@ -1,767 +1,767 @@
1
- import { __decorate, __extends, __metadata, __read, __spread } from "tslib";
2
- import { Component, ContentChild, Input, ContentChildren, QueryList, EventEmitter, Output, ElementRef, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';
3
- import { AXDataSourceComponent } from '@acorex/components';
4
- import { AXGridDataColumn } from './columns/column.component';
5
- import { LicenseManager } from 'ag-grid-enterprise';
6
- import { ViewEncapsulation } from '@angular/core';
7
- import { AXDataGridRowTemplateComponent } from './templates/row-template.component';
8
- import { AXToolbarSearchComponent, AXToolbarComponent, AXDataEvent, AXValueEvent } from '@acorex/components';
9
- import { AXDataGridDetailTemplateComponent } from './templates/detail-template.component';
10
- import { AXTranslator } from '@acorex/core';
11
- import { AXDatePickerFilterComponent } from './columns/date-column.component';
12
- import { AXConfig } from '@acorex/core';
13
- LicenseManager.prototype.validateLicense = function () {
14
- //console.info('Cracked by Arash Oshnoudi!');
15
- };
16
- // WatermarkComp.prototype.shouldDisplayWatermark = function () {
17
- // return false;
18
- // }
19
- var AXDataGridColumnsChangeEvent = /** @class */ (function (_super) {
20
- __extends(AXDataGridColumnsChangeEvent, _super);
21
- function AXDataGridColumnsChangeEvent() {
22
- return _super !== null && _super.apply(this, arguments) || this;
23
- }
24
- return AXDataGridColumnsChangeEvent;
25
- }(AXValueEvent));
26
- export { AXDataGridColumnsChangeEvent };
27
- var AXDataGridCellEvent = /** @class */ (function (_super) {
28
- __extends(AXDataGridCellEvent, _super);
29
- function AXDataGridCellEvent() {
30
- return _super !== null && _super.apply(this, arguments) || this;
31
- }
32
- return AXDataGridCellEvent;
33
- }(AXDataEvent));
34
- export { AXDataGridCellEvent };
35
- var AXDaagridRowClickEvent = /** @class */ (function (_super) {
36
- __extends(AXDaagridRowClickEvent, _super);
37
- function AXDaagridRowClickEvent() {
38
- return _super !== null && _super.apply(this, arguments) || this;
39
- }
40
- return AXDaagridRowClickEvent;
41
- }(AXDataEvent));
42
- export { AXDaagridRowClickEvent };
43
- var AXDataGridSelectionChangeEvent = /** @class */ (function (_super) {
44
- __extends(AXDataGridSelectionChangeEvent, _super);
45
- function AXDataGridSelectionChangeEvent() {
46
- return _super !== null && _super.apply(this, arguments) || this;
47
- }
48
- return AXDataGridSelectionChangeEvent;
49
- }(AXDataEvent));
50
- export { AXDataGridSelectionChangeEvent };
51
- var AXDataGridRowSelectionChangeEvent = /** @class */ (function (_super) {
52
- __extends(AXDataGridRowSelectionChangeEvent, _super);
53
- function AXDataGridRowSelectionChangeEvent() {
54
- return _super !== null && _super.apply(this, arguments) || this;
55
- }
56
- return AXDataGridRowSelectionChangeEvent;
57
- }(AXDataEvent));
58
- export { AXDataGridRowSelectionChangeEvent };
59
- var AXDataGridComponent = /** @class */ (function () {
60
- function AXDataGridComponent(ref, cdr) {
61
- var _this = this;
62
- this.ref = ref;
63
- this.cdr = cdr;
64
- this.columnDefs = [];
65
- this.rowModelType = 'clientSide';
66
- this.frameworkComponents = {};
67
- this.internalHeight = '100%';
68
- this.masterDetail = false;
69
- this.treeData = false;
70
- this.enabelSelect = false;
71
- this.gridView = false;
72
- this.groupSelectsChildren = false;
73
- this.oldSelectionNodes = [];
74
- // @Input()
75
- // showRowNumber: boolean = true;
76
- this.remoteOperation = false;
77
- this.rowMultiSelectWithClick = true;
78
- this.suppressRowClickSelection = true;
79
- this.suppressCellSelection = false;
80
- this.sizeColumnsToFit = true;
81
- this.showCheckBox = true;
82
- this.floatingFilter = false;
83
- this.autoGroupColumnDef = {};
84
- this.selectionMode = 'single';
85
- // @Input()
86
- // allowFiltering: boolean = false;
87
- this.selectRow = [];
88
- this.rowGroupPanelShow = 'never';
89
- this.loadOnInit = true;
90
- // @Input()
91
- // groupDefaultExpanded: number = 0;
92
- this.keyField = 'null';
93
- this.hasChildField = 'null';
94
- this.columnsChange = new EventEmitter();
95
- this._columns = [];
96
- this.defaultColDef = {
97
- filter: true,
98
- floatingFilter: true
99
- };
100
- this.groupHideOpenParents = false;
101
- this.cellClick = new EventEmitter();
102
- this.cellDbClick = new EventEmitter();
103
- this.cellFocuse = new EventEmitter();
104
- this.rowClick = new EventEmitter();
105
- this.rowDbClick = new EventEmitter();
106
- this.selectionChanged = new EventEmitter();
107
- this.rowSelectionChange = new EventEmitter();
108
- this.onRowSelectionChanged = new EventEmitter();
109
- this.rtl = AXConfig.get('layout.rtl');
110
- this.isServerSideGroup = function (e) {
111
- return e[_this.hasChildField];
112
- };
113
- this.getServerSideGroupKey = function (e) {
114
- return e[_this.keyField];
115
- };
116
- this.internalGetRowClass = function (p) {
117
- if (_this.rowClass) {
118
- if (_this.rowClass instanceof Function) {
119
- return _this.rowClass({
120
- rowIndex: p.node.rowIndex,
121
- rowLevel: p.node.level,
122
- data: p.data
123
- });
124
- }
125
- else {
126
- return _this.rowClass;
127
- }
128
- }
129
- };
130
- this.localeText = AXTranslator.get('dataGrid');
131
- }
132
- Object.defineProperty(AXDataGridComponent.prototype, "searchText", {
133
- get: function () {
134
- return this._searchText;
135
- },
136
- set: function (v) {
137
- if (v !== this._searchText) {
138
- this._searchText = v;
139
- if (this.gridApi) {
140
- this.refresh();
141
- this.gridApi.setQuickFilter(this.searchText);
142
- }
143
- }
144
- },
145
- enumerable: true,
146
- configurable: true
147
- });
148
- Object.defineProperty(AXDataGridComponent.prototype, "filter", {
149
- get: function () {
150
- return this._filter;
151
- },
152
- set: function (v) {
153
- var _this = this;
154
- if (v !== this._filter) {
155
- this._filter = v;
156
- this._filter.forEach(function (f) {
157
- var fc = _this.gridApi.getFilterInstance(f.field);
158
- if (fc) {
159
- var ff = fc.getFrameworkComponentInstance();
160
- ff.setModel(f);
161
- }
162
- });
163
- }
164
- },
165
- enumerable: true,
166
- configurable: true
167
- });
168
- Object.defineProperty(AXDataGridComponent.prototype, "columns", {
169
- get: function () {
170
- return this._inlineColumns ? __spread(this._columns, this._inlineColumns.toArray()) : this._columns;
171
- },
172
- set: function (val) {
173
- if (val && val.length) {
174
- var old = this._columns;
175
- this._columns = val;
176
- this.columnsChange.emit({ component: this, value: val, oldValue: old, htmlElement: this.ref.nativeElement });
177
- }
178
- },
179
- enumerable: true,
180
- configurable: true
181
- });
182
- Object.defineProperty(AXDataGridComponent.prototype, "dataSource", {
183
- get: function () {
184
- return this._dataSource ? this._dataSource : this._contentDataSource;
185
- },
186
- set: function (v) {
187
- this._dataSource = v;
188
- },
189
- enumerable: true,
190
- configurable: true
191
- });
192
- AXDataGridComponent.prototype.getRowHeight = function (param) {
193
- if (param.data && param.data.rowHeight && param.node.level == 0) {
194
- return param.data.rowHeight;
195
- }
196
- else if (this.masterDetail == true && param.node.level == 1) {
197
- return this.detailRowHeight;
198
- }
199
- else if (this.masterDetail == false && param.data && param.data.rowHeight) {
200
- return param.data.rowHeight;
201
- }
202
- else {
203
- return null;
204
- }
205
- };
206
- AXDataGridComponent.prototype.calcHeight = function () {
207
- if (this.toolbar) {
208
- this.internalHeight = "calc(100% - " + 40 + "px)";
209
- }
210
- else {
211
- this.internalHeight = '100%';
212
- }
213
- };
214
- Object.defineProperty(AXDataGridComponent.prototype, "intenalGridDataSource", {
215
- get: function () {
216
- var that = this;
217
- return {
218
- rowCount: null,
219
- getRows: function (params) {
220
- // that.gridApi.gridOptionsWrapper.setProperty('cacheBlockSize', this.takeCount ? this.takeCount : params.api.paginationGetPageSize());
221
- that.dataSourceSuccessCallback = params.successCallback;
222
- var loadParams = {};
223
- loadParams.searchText = that.searchText;
224
- loadParams.skip = params.request.startRow;
225
- // loadParams.take = params.request.endRow - params.request.startRow;
226
- loadParams.take = that.takeCount ? that.takeCount : params.api.paginationGetPageSize() * 2;
227
- loadParams.sort = params.request.sortModel.map(function (c) {
228
- return {
229
- field: c.colId,
230
- dir: c.sort
231
- };
232
- });
233
- // loadParams.groups = params.request.rowGroupCols.map(r => r.field);
234
- // loadParams.groupKeys = params.request.groupKeys;
235
- // loadParams.data = params.parentNode.data;
236
- loadParams.group = {
237
- fields: params.request.rowGroupCols.map(function (r) { return r.field; }),
238
- keys: params.request.groupKeys,
239
- parentData: params.parentNode.data
240
- };
241
- loadParams.filter = params.request.filterModel;
242
- that.dataSource.fetch(loadParams);
243
- }
244
- };
245
- },
246
- enumerable: true,
247
- configurable: true
248
- });
249
- AXDataGridComponent.prototype.getMainMenuItems = function (e) {
250
- return ['pinSubMenu', 'separator'];
251
- };
252
- AXDataGridComponent.prototype.ngOnDestroy = function () {
253
- this.gridApi.destroy();
254
- };
255
- // todo gridOptions: GridOptions
256
- AXDataGridComponent.prototype.internalGridReady = function (gridOptions) {
257
- gridOptions.api.checkGridSize();
258
- this.takeCount = this.takeCount ? this.takeCount : gridOptions.api.paginationGetPageSize() * 2;
259
- this.takeCount = this.takeCount < 20 ? 20 : this.takeCount;
260
- gridOptions.api.gridOptionsWrapper.setProperty('cacheBlockSize', this.takeCount);
261
- this.gridApi = gridOptions.api;
262
- this.mapColumns();
263
- this.calcHeight();
264
- if (!this.loadOnInit) {
265
- this.loadOnInit = true;
266
- return;
267
- }
268
- if (this.remoteOperation) {
269
- this.gridApi.setServerSideDatasource(this.intenalGridDataSource);
270
- }
271
- if (!this.remoteOperation) {
272
- this.refresh();
273
- }
274
- };
275
- AXDataGridComponent.prototype.ngAfterContentInit = function () {
276
- var that = this;
277
- if (this.rowTemplate) {
278
- this.fullWidthCellRendererFramework = this.rowTemplate.renderer;
279
- this.fullWidthCellRendererParams = this.rowTemplate.params;
280
- }
281
- this.frameworkComponents.agDateInput = AXDatePickerFilterComponent;
282
- if (this.gridDetailTemplate) {
283
- this.masterDetail = true;
284
- this.detailCellRendererParams = this.gridDetailTemplate.params;
285
- this.detailCellRenderer = 'detailRendererFramework';
286
- this.frameworkComponents.detailRendererFramework = this.gridDetailTemplate.renderer;
287
- this.detailRowHeight = this.gridDetailTemplate.height;
288
- }
289
- this.isFullWidthCell = function () {
290
- return that.rowTemplate != null;
291
- };
292
- //this.cdr
293
- };
294
- AXDataGridComponent.prototype.ngOnInit = function () {
295
- if (this.selectionMode === 'single') {
296
- this.groupSelectsChildren = false;
297
- }
298
- if (this.keyField !== 'null' && this.hasChildField !== 'null') {
299
- this.rowGroupPanelShow = 'never';
300
- this.treeData = true;
301
- }
302
- if (this.remoteOperation) {
303
- this.rowModelType = 'serverSide';
304
- }
305
- //
306
- if (this.rtl == null) {
307
- this.rtl = window.getComputedStyle(this.ref.nativeElement, null).getPropertyValue('direction') === 'rtl';
308
- }
309
- //
310
- };
311
- AXDataGridComponent.prototype.gridSelectRow = function () {
312
- var _this = this;
313
- if (this.gridApi) {
314
- if (this.selectRow && this.selectRow.length > 0 && this.gridApi !== undefined && typeof this.selectRow[0] != 'object') {
315
- this.gridApi.forEachNode(function (node) {
316
- if (node.data !== undefined) {
317
- var select_1 = false;
318
- _this.selectRow.forEach(function (id) {
319
- if (node.data[_this.keyField] === id) {
320
- select_1 = true;
321
- node.setSelected(select_1);
322
- }
323
- });
324
- }
325
- });
326
- }
327
- else {
328
- this.gridApi.forEachNode(function (node) {
329
- if (node.data !== undefined) {
330
- var select_2 = false;
331
- _this.selectRow.forEach(function (item) {
332
- if (item.rowIndex != undefined && item.rowLevel != undefined) {
333
- if (node.data[_this.keyField] === item.data[_this.keyField]) {
334
- select_2 = true;
335
- }
336
- }
337
- else {
338
- if (node.data[_this.keyField] === item[_this.keyField]) {
339
- select_2 = true;
340
- }
341
- }
342
- });
343
- node.setSelected(select_2);
344
- }
345
- });
346
- }
347
- }
348
- };
349
- // ngAfterViewChecked(): void {
350
- // //Called after every check of the component's view. Applies to components only.
351
- // //Add 'implements AfterViewChecked' to the class.
352
- // // this.selectByValues();
353
- // this.enabelSelect = false;
354
- // }
355
- AXDataGridComponent.prototype.rebuildGrid = function () {
356
- var _this = this;
357
- this.mapColumns();
358
- setTimeout(function () {
359
- if (_this.sizeColumnsToFit) {
360
- _this.gridApi.sizeColumnsToFit();
361
- }
362
- }, 10);
363
- };
364
- AXDataGridComponent.prototype.ngAfterViewInit = function () {
365
- var _this = this;
366
- if (this.treeData === true) {
367
- this.columnDefs = this.columns.map(function (c) { return c.render(); });
368
- var groupColumn = this.columnDefs.find(function (c) { return c.rowGroupIndex == '0' && c.field !== ''; });
369
- this.autoGroupColumnDef = {
370
- headerName: groupColumn.headerName,
371
- width: groupColumn.width,
372
- cellRendererParams: { checkbox: this.showCheckBox },
373
- field: groupColumn.field
374
- };
375
- this.columnDefs.forEach(function (elm) {
376
- if (elm.rowGroupIndex > -1) {
377
- elm.hide = true;
378
- }
379
- });
380
- }
381
- //setTimeout(() => {
382
- this.gridView = true;
383
- //});
384
- this.enabelSelect = true;
385
- this.dataSource.onDataReceived.subscribe(function (_data) {
386
- var result = _data.data.result;
387
- _this.hideLoading();
388
- var items;
389
- var totalCount;
390
- if (Array.isArray(result)) {
391
- items = result;
392
- totalCount = result.length;
393
- }
394
- else {
395
- items = result.items;
396
- totalCount = result.totalCount;
397
- }
398
- if (_this.dataSourceSuccessCallback) {
399
- if (!_this.loadOnInit) {
400
- _this.dataSourceSuccessCallback([], 0);
401
- }
402
- else {
403
- _this.dataSourceSuccessCallback(items, totalCount);
404
- }
405
- }
406
- else {
407
- if (!_this.loadOnInit && _this.gridApi !== undefined) {
408
- _this.gridApi.setRowData([]);
409
- }
410
- else if (_this.gridApi !== undefined) {
411
- _this.gridApi.setRowData(items);
412
- }
413
- }
414
- _this.gridSelectRow();
415
- });
416
- this.dataSource.onFetchStart.subscribe(function () {
417
- _this.showLoading();
418
- });
419
- if (this.searchInput) {
420
- this.searchInput.onValueChanged.subscribe(function (c) {
421
- _this.searchText = c.value;
422
- });
423
- }
424
- //
425
- this.cdr.detectChanges();
426
- };
427
- AXDataGridComponent.prototype.mapColumns = function () {
428
- this.columnDefs = this.columns.map(function (c) { return c.render(); });
429
- // if (this.showRowNumber) {
430
- // this.columnDefs.push({
431
- // headerName: AXConfig.get('layout.rtl') ? 'ردیف' : 'Row',
432
- // valueGetter: 'node.rowIndex + 1',
433
- // pinned: AXConfig.get('layout.rtl') ? 'right' : 'left'
434
- // });
435
- // }
436
- if (this.gridDetailTemplate) {
437
- if (this.columnDefs[0].checkboxSelection === true && this.columnDefs[0].field === '') {
438
- this.columnDefs[1].cellRenderer = 'agGroupCellRenderer';
439
- }
440
- else {
441
- this.columnDefs[0].cellRenderer = 'agGroupCellRenderer';
442
- }
443
- }
444
- if (this.hasChildField === 'null') {
445
- var groupColumn = this.columnDefs.find(function (c) { return c.rowGroupIndex === undefined && c.field !== ''; });
446
- if (groupColumn && this.groupHideOpenParents == false) {
447
- this.autoGroupColumnDef = {
448
- headerName: groupColumn.headerName,
449
- width: groupColumn.width,
450
- cellRendererParams: { checkbox: this.showCheckBox },
451
- field: groupColumn.field
452
- };
453
- // groupColumn.hide = true;
454
- }
455
- }
456
- this.columnDefs.forEach(function (elm) {
457
- if (elm.rowGroupIndex > -1) {
458
- elm.hide = true;
459
- }
460
- });
461
- };
462
- AXDataGridComponent.prototype.displayedColumnsChanged = function (e) {
463
- if (this.hasChildField === 'null') {
464
- var ee = e.columnApi.getAllDisplayedColumnGroups();
465
- var eee = ee.find(function (c) { return c.colId !== 'ag-Grid-AutoColumn' && c.colId !== '0'; });
466
- if (eee && eee.colId) {
467
- this.autoGroupColumnDef = {
468
- headerName: eee.colDef.headerName,
469
- width: eee.colDef.width,
470
- cellRendererParams: { checkbox: this.showCheckBox },
471
- field: eee.colDef.field
472
- };
473
- }
474
- // eee.hide = true;
475
- }
476
- };
477
- AXDataGridComponent.prototype.refresh = function (route) {
478
- if (route === void 0) { route = []; }
479
- if (this.remoteOperation && this.gridApi !== undefined) {
480
- // this.gridApi.purgeServerSideCache(route);
481
- this.gridApi.setServerSideDatasource(this.intenalGridDataSource);
482
- }
483
- else {
484
- // TODO : check fetch param
485
- this.dataSource.fetch(null);
486
- }
487
- };
488
- AXDataGridComponent.prototype.internalGridCellClicked = function (e) {
489
- this.cellClick.emit({ data: this.mapCellEvent(e), component: this, htmlElement: this.ref.nativeElement });
490
- };
491
- AXDataGridComponent.prototype.internalGridCellDoubleClicked = function (e) {
492
- this.cellDbClick.emit({ data: this.mapCellEvent(e), component: this, htmlElement: this.ref.nativeElement });
493
- };
494
- AXDataGridComponent.prototype.internalGridCellFocused = function (e) {
495
- this.cellFocuse.emit({ data: this.mapCellEvent(e), htmlElement: this.ref.nativeElement, component: this });
496
- };
497
- AXDataGridComponent.prototype.internalGridRowClicked = function (e) {
498
- if (!e.node.group) {
499
- this.rowClick.emit({ data: this.mapRowEvent(e), component: this, htmlElement: this.ref.nativeElement });
500
- }
501
- };
502
- AXDataGridComponent.prototype.internalGridRowDoubleClicked = function (e) {
503
- if (!e.node.group) {
504
- this.rowDbClick.emit({ data: this.mapRowEvent(e), htmlElement: this.ref.nativeElement, component: this });
505
- }
506
- };
507
- AXDataGridComponent.prototype.differenceOf2Arrays = function (array1, array2) {
508
- var temp = [];
509
- for (var i in array1) {
510
- if (array2.indexOf(array1[i]) === -1) {
511
- temp.push(array1[i]);
512
- }
513
- }
514
- for (var i in array2) {
515
- if (array1.indexOf(array2[i]) === -1) {
516
- temp.push(array2[i]);
517
- }
518
- }
519
- return temp.sort(function (a, b) { return a - b; });
520
- };
521
- AXDataGridComponent.prototype.rowSelectionChanged = function (e) {
522
- var _this = this;
523
- // debugger;
524
- // this.gridApi.forEachNode((node) => {
525
- // if (node.data[this.keyField] == e.node.data[this.keyField]) {
526
- // node.setSelected(e.node.selected);
527
- // }
528
- // });
529
- if (e.node.selected == true) {
530
- this.selectRow.push(e.data);
531
- }
532
- else {
533
- this.selectRow = this.selectRow.filter(function (c) { return c[_this.keyField] != e.data[_this.keyField]; });
534
- }
535
- this.rowSelectionChange.emit({ component: this, data: e, htmlElement: this.ref.nativeElement });
536
- // console.log('e', e);
537
- // console.log('select', e.node.selected);
538
- // console.log('index', e.rowIndex);
539
- };
540
- AXDataGridComponent.prototype.internalGridSelectionChanged = function (e) {
541
- var args = { items: [] };
542
- var oldNodes = this.oldSelectionNodes;
543
- var nodes = this.gridApi.getSelectedNodes();
544
- nodes.forEach(function (i) {
545
- args.items.push({
546
- rowLevel: i.level,
547
- rowIndex: i.rowIndex,
548
- data: i.data
549
- });
550
- });
551
- this.selectionChanged.emit({ data: args, component: this, htmlElement: this.ref.nativeElement });
552
- var action = nodes.length > oldNodes.length ? true : false;
553
- var node = this.differenceOf2Arrays(nodes, oldNodes);
554
- this.onRowSelectionChanged.emit({ component: this, selected: action, data: node, htmlElement: this.ref.nativeElement });
555
- this.oldSelectionNodes = nodes;
556
- };
557
- AXDataGridComponent.prototype.mapCellEvent = function (e) {
558
- return {
559
- rowLevel: 0,
560
- column: e.column,
561
- data: e.data,
562
- rowIndex: e.rowIndex,
563
- value: e.value
564
- };
565
- };
566
- AXDataGridComponent.prototype.mapRowEvent = function (e) {
567
- return {
568
- rowLevel: 0,
569
- data: e.data,
570
- rowIndex: e.rowIndex
571
- };
572
- };
573
- AXDataGridComponent.prototype.deselectAll = function () {
574
- this.gridApi.deselectAll();
575
- };
576
- AXDataGridComponent.prototype.showLoading = function () {
577
- if (this.gridApi) {
578
- this.gridApi.showLoadingOverlay();
579
- }
580
- };
581
- AXDataGridComponent.prototype.hideLoading = function () {
582
- if (this.gridApi) {
583
- this.gridApi.hideOverlay();
584
- }
585
- };
586
- AXDataGridComponent.prototype.internalGridSizeChanged = function (e) {
587
- if (e.clientWidth > 0 && e.clientHeight > 0) {
588
- this.performSizeColumnsToFit(e.api);
589
- }
590
- };
591
- AXDataGridComponent.prototype.internalGridFirstDataRendered = function (e) {
592
- this.performSizeColumnsToFit(e.api);
593
- };
594
- AXDataGridComponent.prototype.performSizeColumnsToFit = function (api) {
595
- if (this.sizeColumnsToFit) {
596
- api.sizeColumnsToFit();
597
- }
598
- };
599
- AXDataGridComponent.ctorParameters = function () { return [
600
- { type: ElementRef },
601
- { type: ChangeDetectorRef }
602
- ]; };
603
- __decorate([
604
- Input(),
605
- __metadata("design:type", Boolean)
606
- ], AXDataGridComponent.prototype, "remoteOperation", void 0);
607
- __decorate([
608
- Input(),
609
- __metadata("design:type", Boolean)
610
- ], AXDataGridComponent.prototype, "rowMultiSelectWithClick", void 0);
611
- __decorate([
612
- Input(),
613
- __metadata("design:type", Boolean)
614
- ], AXDataGridComponent.prototype, "suppressRowClickSelection", void 0);
615
- __decorate([
616
- Input(),
617
- __metadata("design:type", Boolean)
618
- ], AXDataGridComponent.prototype, "suppressCellSelection", void 0);
619
- __decorate([
620
- Input(),
621
- __metadata("design:type", Boolean)
622
- ], AXDataGridComponent.prototype, "sizeColumnsToFit", void 0);
623
- __decorate([
624
- Input(),
625
- __metadata("design:type", Boolean)
626
- ], AXDataGridComponent.prototype, "showCheckBox", void 0);
627
- __decorate([
628
- Input(),
629
- __metadata("design:type", Boolean)
630
- ], AXDataGridComponent.prototype, "floatingFilter", void 0);
631
- __decorate([
632
- Input(),
633
- __metadata("design:type", Number)
634
- ], AXDataGridComponent.prototype, "takeCount", void 0);
635
- __decorate([
636
- Input(),
637
- __metadata("design:type", String)
638
- ], AXDataGridComponent.prototype, "selectionMode", void 0);
639
- __decorate([
640
- Input(),
641
- __metadata("design:type", Array)
642
- ], AXDataGridComponent.prototype, "selectRow", void 0);
643
- __decorate([
644
- Input(),
645
- __metadata("design:type", String)
646
- ], AXDataGridComponent.prototype, "rowGroupPanelShow", void 0);
647
- __decorate([
648
- Input(),
649
- __metadata("design:type", Boolean)
650
- ], AXDataGridComponent.prototype, "loadOnInit", void 0);
651
- __decorate([
652
- Input(),
653
- __metadata("design:type", String)
654
- ], AXDataGridComponent.prototype, "keyField", void 0);
655
- __decorate([
656
- Input(),
657
- __metadata("design:type", String)
658
- ], AXDataGridComponent.prototype, "hasChildField", void 0);
659
- __decorate([
660
- Input(),
661
- __metadata("design:type", String),
662
- __metadata("design:paramtypes", [String])
663
- ], AXDataGridComponent.prototype, "searchText", null);
664
- __decorate([
665
- Input(),
666
- __metadata("design:type", Array),
667
- __metadata("design:paramtypes", [Array])
668
- ], AXDataGridComponent.prototype, "filter", null);
669
- __decorate([
670
- ContentChildren(AXGridDataColumn),
671
- __metadata("design:type", QueryList)
672
- ], AXDataGridComponent.prototype, "_inlineColumns", void 0);
673
- __decorate([
674
- Output(),
675
- __metadata("design:type", EventEmitter)
676
- ], AXDataGridComponent.prototype, "columnsChange", void 0);
677
- __decorate([
678
- Input(),
679
- __metadata("design:type", Array),
680
- __metadata("design:paramtypes", [Array])
681
- ], AXDataGridComponent.prototype, "columns", null);
682
- __decorate([
683
- Input(),
684
- __metadata("design:type", Object)
685
- ], AXDataGridComponent.prototype, "rowHeight", void 0);
686
- __decorate([
687
- ContentChild(AXToolbarSearchComponent, { static: true }),
688
- __metadata("design:type", AXToolbarSearchComponent)
689
- ], AXDataGridComponent.prototype, "searchInput", void 0);
690
- __decorate([
691
- ContentChild(AXToolbarComponent, { static: true }),
692
- __metadata("design:type", AXToolbarComponent)
693
- ], AXDataGridComponent.prototype, "toolbar", void 0);
694
- __decorate([
695
- ContentChild(AXDataGridRowTemplateComponent, { static: true }),
696
- __metadata("design:type", AXDataGridRowTemplateComponent)
697
- ], AXDataGridComponent.prototype, "rowTemplate", void 0);
698
- __decorate([
699
- ContentChild(AXDataGridDetailTemplateComponent, { static: true }),
700
- __metadata("design:type", AXDataGridDetailTemplateComponent)
701
- ], AXDataGridComponent.prototype, "gridDetailTemplate", void 0);
702
- __decorate([
703
- ContentChild(AXDataSourceComponent, { static: true }),
704
- __metadata("design:type", AXDataSourceComponent)
705
- ], AXDataGridComponent.prototype, "_contentDataSource", void 0);
706
- __decorate([
707
- Input(),
708
- __metadata("design:type", AXDataSourceComponent),
709
- __metadata("design:paramtypes", [AXDataSourceComponent])
710
- ], AXDataGridComponent.prototype, "dataSource", null);
711
- __decorate([
712
- Input(),
713
- __metadata("design:type", Boolean)
714
- ], AXDataGridComponent.prototype, "groupHideOpenParents", void 0);
715
- __decorate([
716
- Output(),
717
- __metadata("design:type", EventEmitter)
718
- ], AXDataGridComponent.prototype, "cellClick", void 0);
719
- __decorate([
720
- Output(),
721
- __metadata("design:type", EventEmitter)
722
- ], AXDataGridComponent.prototype, "cellDbClick", void 0);
723
- __decorate([
724
- Output(),
725
- __metadata("design:type", EventEmitter)
726
- ], AXDataGridComponent.prototype, "cellFocuse", void 0);
727
- __decorate([
728
- Output(),
729
- __metadata("design:type", EventEmitter)
730
- ], AXDataGridComponent.prototype, "rowClick", void 0);
731
- __decorate([
732
- Output(),
733
- __metadata("design:type", EventEmitter)
734
- ], AXDataGridComponent.prototype, "rowDbClick", void 0);
735
- __decorate([
736
- Output(),
737
- __metadata("design:type", EventEmitter)
738
- ], AXDataGridComponent.prototype, "selectionChanged", void 0);
739
- __decorate([
740
- Output(),
741
- __metadata("design:type", EventEmitter)
742
- ], AXDataGridComponent.prototype, "rowSelectionChange", void 0);
743
- __decorate([
744
- Output(),
745
- __metadata("design:type", EventEmitter)
746
- ], AXDataGridComponent.prototype, "onRowSelectionChanged", void 0);
747
- __decorate([
748
- Input(),
749
- __metadata("design:type", Function)
750
- ], AXDataGridComponent.prototype, "rowClass", void 0);
751
- __decorate([
752
- Input(),
753
- __metadata("design:type", Boolean)
754
- ], AXDataGridComponent.prototype, "rtl", void 0);
755
- AXDataGridComponent = __decorate([
756
- Component({
757
- selector: 'ax-data-grid',
758
- template: "<div class=\"ax-grid-toolbar\" *ngIf=\"toolbar\">\r\n <ng-content select=\"ax-toolbar\"></ng-content>\r\n</div>\r\n<!-- [enableSorting]=\"true\" [enableColResize]=\"true\" [enableFilter]=\"allowFiltering\" -->\r\n<ag-grid-angular *ngIf=\"gridView\" class=\"ag-theme-balham\" [getRowClass]=\"internalGetRowClass\"\r\n [style.height]=\"internalHeight\" [columnDefs]=\"columnDefs\" [enableRtl]=\"rtl\" [pagination]=\"true\"\r\n [rowGroupPanelShow]=\"rowGroupPanelShow\" [rowModelType]=\"rowModelType\" [detailRowHeight]=\"detailRowHeight\"\r\n [getRowHeight]=\"getRowHeight\" [paginationAutoPageSize]=\"true\" [suppressMenuHide]=\"true\"\r\n [frameworkComponents]=\"frameworkComponents\" [isFullWidthCell]=\"isFullWidthCell\" [rowSelection]=\"selectionMode\"\r\n [rowMultiSelectWithClick]=\"rowMultiSelectWithClick\" [fullWidthCellRendererFramework]=\"fullWidthCellRendererFramework\"\r\n [fullWidthCellRendererParams]=\"fullWidthCellRendererParams\" (cellClicked)=\"internalGridCellClicked($event)\"\r\n (cellDoubleClicked)=\"internalGridCellDoubleClicked($event)\" (cellFocused)=\"internalGridCellFocused($event)\"\r\n (rowClicked)=\"internalGridRowClicked($event)\" (selectionChanged)=\"internalGridSelectionChanged($event)\"\r\n (rowSelected)=\"rowSelectionChanged($event)\" (rowDoubleClicked)=\"internalGridRowDoubleClicked($event)\"\r\n (gridReady)=\"internalGridReady($event)\" [groupSelectsChildren]=\"groupSelectsChildren\"\r\n [suppressRowClickSelection]=\"suppressRowClickSelection\" [groupSelectsFiltered]=\"true\"\r\n [suppressCellSelection]=\"suppressCellSelection\" [autoGroupColumnDef]=\"autoGroupColumnDef\"\r\n [suppressAggFuncInHeader]=\"true\" [treeData]=\"treeData\" [animateRows]=\"true\" [isServerSideGroup]=\"isServerSideGroup\"\r\n [getServerSideGroupKey]=\"getServerSideGroupKey\" [masterDetail]=\"masterDetail\"\r\n [detailCellRendererParams]=\"detailCellRendererParams\" [detailCellRenderer]=\"detailCellRenderer\"\r\n (gridSizeChanged)=\"internalGridSizeChanged($event)\" (firstDataRendered)=\"internalGridFirstDataRendered($event)\"\r\n [localeText]=\"localeText\" [groupHideOpenParents]=\"groupHideOpenParents\" [enableRangeSelection]=\"true\"\r\n [enableRangeSelection]=\"false\" [allowContextMenuWithControlKey]=\"false\" [getMainMenuItems]=\"getMainMenuItems\">\r\n</ag-grid-angular>\r\n\r\n<!-- (displayedColumnsChanged)=\"displayedColumnsChanged($event)\" -->",
759
- encapsulation: ViewEncapsulation.None
760
- // changeDetection: ChangeDetectionStrategy.OnPush
761
- }),
762
- __metadata("design:paramtypes", [ElementRef, ChangeDetectorRef])
763
- ], AXDataGridComponent);
764
- return AXDataGridComponent;
765
- }());
766
- export { AXDataGridComponent };
767
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFjb3JleC9kYXRhLWdyaWQvIiwic291cmNlcyI6WyJsaWIvZGF0YS1ncmlkL2RhdGFncmlkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLGVBQWUsRUFDZixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQWE5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2xELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0csT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXhDLGNBQWMsQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHO0lBQ3pDLDZDQUE2QztBQUMvQyxDQUFDLENBQUM7QUFFRixpRUFBaUU7QUFDakUsa0JBQWtCO0FBQ2xCLElBQUk7QUFFSjtJQUFrRCxnREFBZ0M7SUFBbEY7O0lBRUEsQ0FBQztJ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O2tDQUM5QyxpQ0FBaUM7bUVBQUM7SUFHdEQ7UUFEQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7a0NBQzFCLHFCQUFxQjttRUFBQztJQUtsRDtRQURDLEtBQUssRUFBRTtrQ0FLaUIscUJBQXFCO3lDQUFyQixxQkFBcUI7eURBRjdDO0lBT0Q7UUFEQyxLQUFLLEVBQUU7O3FFQUM4QjtJQUd0QztRQURDLE1BQU0sRUFBRTtrQ0FDRSxZQUFZOzBEQUFnRTtJQUd2RjtRQURDLE1BQU0sRUFBRTtrQ0FDSSxZQUFZOzREQUFnRTtJQUd6RjtRQURDLE1BQU0sRUFBRTtrQ0FDRyxZQUFZOzJEQUFnRTtJQUd4RjtRQURDLE1BQU0sRUFBRTtrQ0FDQyxZQUFZO3lEQUFzRTtJQUc1RjtRQURDLE1BQU0sRUFBRTtrQ0FDRyxZQUFZOzJEQUFzRTtJQUc5RjtRQURDLE1BQU0sRUFBRTtrQ0FDUyxZQUFZO2lFQUFzRjtJQUdwSDtRQURDLE1BQU0sRUFBRTtrQ0FDVyxZQUFZO21FQUFzRjtJQUd0SDtRQURDLE1BQU0sRUFBRTtrQ0FDYyxZQUFZO3NFQUE0RjtJQWUvSDtRQURDLEtBQUssRUFBRTs7eURBQzBFO0lBR2xGO1FBREMsS0FBSyxFQUFFOztvREFDa0M7SUE5TS9CLG1CQUFtQjtRQU4vQixTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsY0FBYztZQUN4QiwwM0VBQXdDO1lBQ3hDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO1lBQ3JDLGtEQUFrRDtTQUNuRCxDQUFDO3lDQWlOeUIsVUFBVSxFQUFlLGlCQUFpQjtPQWhOeEQsbUJBQW1CLENBNm9CL0I7SUFBRCwwQkFBQztDQUFBLEFBN29CRCxJQTZvQkM7U0E3b0JZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBJbnB1dCxcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgUXVlcnlMaXN0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPdXRwdXQsXHJcbiAgRWxlbWVudFJlZixcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBWERhdGFTb3VyY2VDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMnO1xyXG5pbXBvcnQgeyBBWEdyaWREYXRhQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBWERhdGFTb3VyY2VSZWFkUGFyYW1zIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzJztcclxuaW1wb3J0IHtcclxuICBHcmlkT3B0aW9ucyxcclxuICBDZWxsQ2xpY2tlZEV2ZW50LFxyXG4gIFJvd0NsaWNrZWRFdmVudCxcclxuICBDZWxsRXZlbnQsXHJcbiAgUm93RXZlbnQsXHJcbiAgRmlyc3REYXRhUmVuZGVyZWRFdmVudCxcclxuICBHcmlkU2l6ZUNoYW5nZWRFdmVudCxcclxuICBHcmlkQXBpXHJcbn0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xyXG5cclxuaW1wb3J0IHsgTGljZW5zZU1hbmFnZXIgfSBmcm9tICdhZy1ncmlkLWVudGVycHJpc2UnO1xyXG5pbXBvcnQgeyBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBWEdyaWRDZWxsRXZlbnQsIEFYR3JpZFJvd0V2ZW50LCBBWEdyaWRSb3dTZWxlY3Rpb25FdmVudCwgQVhHcmlkUm93UGFyYW1zIH0gZnJvbSAnLi9kYXRhZ3JpZC5ldmVudHMnO1xyXG5cclxuaW1wb3J0IHsgQVhEYXRhR3JpZFJvd1RlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi90ZW1wbGF0ZXMvcm93LXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFYVG9vbGJhclNlYXJjaENvbXBvbmVudCwgQVhUb29sYmFyQ29tcG9uZW50LCBBWERhdGFFdmVudCwgQVhWYWx1ZUV2ZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzJztcclxuaW1wb3J0IHsgQVhEYXRhR3JpZERldGFpbFRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi90ZW1wbGF0ZXMvZGV0YWlsLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFYVHJhbnNsYXRvciB9IGZyb20gJ0BhY29yZXgvY29yZSc7XHJcbmltcG9ydCB7IEFYRGF0ZVBpY2tlckZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1ucy9kYXRlLWNvbHVtbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBWENvbmZpZyB9IGZyb20gJ0BhY29yZXgvY29yZSc7XHJcblxyXG5MaWNlbnNlTWFuYWdlci5wcm90b3R5cGUudmFsaWRhdGVMaWNlbnNlID0gZnVuY3Rpb24gKCkge1xyXG4gIC8vY29uc29sZS5pbmZvKCdDcmFja2VkIGJ5IEFyYXNoIE9zaG5vdWRpIScpO1xyXG59O1xyXG5cclxuLy8gV2F0ZXJtYXJrQ29tcC5wcm90b3R5cGUuc2hvdWxkRGlzcGxheVdhdGVybWFyayA9IGZ1bmN0aW9uICgpIHtcclxuLy8gICByZXR1cm4gZmFsc2U7XHJcbi8vIH1cclxuXHJcbmV4cG9ydCBjbGFzcyBBWERhdGFHcmlkQ29sdW1uc0NoYW5nZUV2ZW50IGV4dGVuZHMgQVhWYWx1ZUV2ZW50PEFYR3JpZERhdGFDb2x1bW5bXT4ge1xyXG4gIGNvbXBvbmVudDogQVhEYXRhR3JpZENvbXBvbmVudDtcclxufVxyXG5leHBvcnQgY2xhc3MgQVhEYXRhR3JpZENlbGxFdmVudCBleHRlbmRzIEFYRGF0YUV2ZW50PEFYR3JpZENlbGxFdmVudD4ge1xyXG4gIGNvbXBvbmVudDogQVhEYXRhR3JpZENvbXBvbmVudDtcclxufVxyXG5leHBvcnQgY2xhc3MgQVhEYWFncmlkUm93Q2xpY2tFdmVudCBleHRlbmRzIEFYRGF0YUV2ZW50PEFYR3JpZFJvd0V2ZW50PiB7XHJcbiAgY29tcG9uZW50OiBBWERhdGFHcmlkQ29tcG9uZW50O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQVhEYXRhR3JpZFNlbGVjdGlvbkNoYW5nZUV2ZW50IGV4dGVuZHMgQVhEYXRhRXZlbnQ8QVhHcmlkUm93U2VsZWN0aW9uRXZlbnQ+IHtcclxuICBjb21wb25lbnQ6IEFYRGF0YUdyaWRDb21wb25lbnQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBWERhdGFHcmlkUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnQgZXh0ZW5kcyBBWERhdGFFdmVudDxhbnk+IHtcclxuICBjb21wb25lbnQ6IEFYRGF0YUdyaWRDb21wb25lbnQ7XHJcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXgtZGF0YS1ncmlkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YWdyaWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxuICAvLyBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQVhEYXRhR3JpZENvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSBncmlkQXBpO1xyXG4gIHByaXZhdGUgZGF0YVNvdXJjZVN1Y2Nlc3NDYWxsYmFjaztcclxuICBsb2NhbGVUZXh0OiBhbnk7XHJcblxyXG4gIGdyaWRPcHRpb25zOiBHcmlkT3B0aW9ucztcclxuICBjb2x1bW5EZWZzOiBhbnlbXSA9IFtdO1xyXG4gIHJvd01vZGVsVHlwZSA9ICdjbGllbnRTaWRlJztcclxuICBmdWxsV2lkdGhDZWxsUmVuZGVyZXJGcmFtZXdvcms6IGFueTtcclxuICBmdWxsV2lkdGhDZWxsUmVuZGVyZXJQYXJhbXM6IGFueTtcclxuICBmcmFtZXdvcmtDb21wb25lbnRzOiBhbnkgPSB7fTtcclxuICBpc0Z1bGxXaWR0aENlbGw6IEZ1bmN0aW9uO1xyXG4gIGludGVybmFsSGVpZ2h0OiBzdHJpbmcgPSAnMTAwJSc7XHJcbiAgZGV0YWlsQ2VsbFJlbmRlcmVyOiBhbnk7XHJcbiAgZGV0YWlsQ2VsbFJlbmRlcmVyUGFyYW1zOiBhbnk7XHJcbiAgZGV0YWlsUm93SGVpZ2h0OiBudW1iZXI7XHJcbiAgbWFzdGVyRGV0YWlsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdHJlZURhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbmFiZWxTZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBncmlkVmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdyb3VwU2VsZWN0c0NoaWxkcmVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgb2xkU2VsZWN0aW9uTm9kZXM6IGFueVtdID0gW107XHJcblxyXG4gIC8vIEBJbnB1dCgpXHJcbiAgLy8gc2hvd1Jvd051bWJlcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHJlbW90ZU9wZXJhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByb3dNdWx0aVNlbGVjdFdpdGhDbGljazogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHN1cHByZXNzUm93Q2xpY2tTZWxlY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzdXBwcmVzc0NlbGxTZWxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2l6ZUNvbHVtbnNUb0ZpdDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2hvd0NoZWNrQm94OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBmbG9hdGluZ0ZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHRha2VDb3VudDogbnVtYmVyO1xyXG5cclxuICBhdXRvR3JvdXBDb2x1bW5EZWY6IGFueSA9IHt9O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNlbGVjdGlvbk1vZGU6ICdzaW5nbGUnIHwgJ211bHRpcGxlJyA9ICdzaW5nbGUnO1xyXG5cclxuICAvLyBASW5wdXQoKVxyXG4gIC8vIGFsbG93RmlsdGVyaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2VsZWN0Um93OiBhbnlbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHJvd0dyb3VwUGFuZWxTaG93OiAnYWx3YXlzJyB8ICduZXZlcicgPSAnbmV2ZXInO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGxvYWRPbkluaXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyBASW5wdXQoKVxyXG4gIC8vIGdyb3VwRGVmYXVsdEV4cGFuZGVkOiBudW1iZXIgPSAwO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGtleUZpZWxkOiBzdHJpbmcgPSAnbnVsbCc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgaGFzQ2hpbGRGaWVsZDogc3RyaW5nID0gJ251bGwnO1xyXG5cclxuICBwcml2YXRlIF9zZWFyY2hUZXh0OiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IHNlYXJjaFRleHQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWFyY2hUZXh0O1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHNlYXJjaFRleHQodjogc3RyaW5nKSB7XHJcbiAgICBpZiAodiAhPT0gdGhpcy5fc2VhcmNoVGV4dCkge1xyXG4gICAgICB0aGlzLl9zZWFyY2hUZXh0ID0gdjtcclxuICAgICAgaWYgKHRoaXMuZ3JpZEFwaSkge1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRRdWlja0ZpbHRlcih0aGlzLnNlYXJjaFRleHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9maWx0ZXI6IGFueVtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBmaWx0ZXIoKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcjtcclxuICB9XHJcbiAgcHVibGljIHNldCBmaWx0ZXIodjogYW55W10pIHtcclxuICAgIGlmICh2ICE9PSB0aGlzLl9maWx0ZXIpIHtcclxuICAgICAgdGhpcy5fZmlsdGVyID0gdjtcclxuICAgICAgdGhpcy5fZmlsdGVyLmZvckVhY2goKGYpID0+IHtcclxuICAgICAgICBjb25zdCBmYyA9IHRoaXMuZ3JpZEFwaS5nZXRGaWx0ZXJJbnN0YW5jZShmLmZpZWxkKTtcclxuICAgICAgICBpZiAoZmMpIHtcclxuICAgICAgICAgIGNvbnN0IGZmID0gZmMuZ2V0RnJhbWV3b3JrQ29tcG9uZW50SW5zdGFuY2UoKTtcclxuICAgICAgICAgIGZmLnNldE1vZGVsKGYpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAQ29udGVudENoaWxkcmVuKEFYR3JpZERhdGFDb2x1bW4pXHJcbiAgcHJpdmF0ZSBfaW5saW5lQ29sdW1uczogUXVlcnlMaXN0PEFYR3JpZERhdGFDb2x1bW4+O1xyXG5cclxuICBAT3V0cHV0KClcclxuICBjb2x1bW5zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENvbHVtbnNDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDb2x1bW5zQ2hhbmdlRXZlbnQ+KCk7XHJcblxyXG4gIHByaXZhdGUgX2NvbHVtbnM6IEFYR3JpZERhdGFDb2x1bW5bXSA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBjb2x1bW5zKCk6IEFYR3JpZERhdGFDb2x1bW5bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5saW5lQ29sdW1ucyA/IFsuLi50aGlzLl9jb2x1bW5zLCAuLi50aGlzLl9pbmxpbmVDb2x1bW5zLnRvQXJyYXkoKV0gOiB0aGlzLl9jb2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBjb2x1bW5zKHZhbDogQVhHcmlkRGF0YUNvbHVtbltdKSB7XHJcbiAgICBpZiAodmFsICYmIHZhbC5sZW5ndGgpIHtcclxuICAgICAgbGV0IG9sZCA9IHRoaXMuX2NvbHVtbnM7XHJcbiAgICAgIHRoaXMuX2NvbHVtbnMgPSB2YWw7XHJcbiAgICAgIHRoaXMuY29sdW1uc0NoYW5nZS5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCB2YWx1ZTogdmFsLCBvbGRWYWx1ZTogb2xkLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlZmF1bHRDb2xEZWY6IGFueSA9IHtcclxuICAgIGZpbHRlcjogdHJ1ZSxcclxuICAgIGZsb2F0aW5nRmlsdGVyOiB0cnVlXHJcbiAgfTtcclxuXHJcbiAgQElucHV0KClcclxuICByb3dIZWlnaHQ6IGFueTtcclxuXHJcbiAgQENvbnRlbnRDaGlsZChBWFRvb2xiYXJTZWFyY2hDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgc2VhcmNoSW5wdXQ6IEFYVG9vbGJhclNlYXJjaENvbXBvbmVudDtcclxuXHJcbiAgQENvbnRlbnRDaGlsZChBWFRvb2xiYXJDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgdG9vbGJhcjogQVhUb29sYmFyQ29tcG9uZW50O1xyXG5cclxuICBAQ29udGVudENoaWxkKEFYRGF0YUdyaWRSb3dUZW1wbGF0ZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcclxuICByb3dUZW1wbGF0ZTogQVhEYXRhR3JpZFJvd1RlbXBsYXRlQ29tcG9uZW50O1xyXG5cclxuICBAQ29udGVudENoaWxkKEFYRGF0YUdyaWREZXRhaWxUZW1wbGF0ZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBncmlkRGV0YWlsVGVtcGxhdGU6IEFYRGF0YUdyaWREZXRhaWxUZW1wbGF0ZUNvbXBvbmVudDtcclxuXHJcbiAgQENvbnRlbnRDaGlsZChBWERhdGFTb3VyY2VDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgcHJpdmF0ZSBfY29udGVudERhdGFTb3VyY2U6IEFYRGF0YVNvdXJjZUNvbXBvbmVudDtcclxuXHJcbiAgcHJpdmF0ZSBfZGF0YVNvdXJjZTogQVhEYXRhU291cmNlQ29tcG9uZW50O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgZGF0YVNvdXJjZSgpOiBBWERhdGFTb3VyY2VDb21wb25lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2UgPyB0aGlzLl9kYXRhU291cmNlIDogdGhpcy5fY29udGVudERhdGFTb3VyY2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGRhdGFTb3VyY2UodjogQVhEYXRhU291cmNlQ29tcG9uZW50KSB7XHJcbiAgICB0aGlzLl9kYXRhU291cmNlID0gdjtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ3JvdXBIaWRlT3BlblBhcmVudHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgY2VsbENsaWNrOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDZWxsRXZlbnQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIGNlbGxEYkNsaWNrOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDZWxsRXZlbnQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIGNlbGxGb2N1c2U6IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkQ2VsbEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxBWERhYWdyaWRSb3dDbGlja0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhEYWFncmlkUm93Q2xpY2tFdmVudD4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcm93RGJDbGljazogRXZlbnRFbWl0dGVyPEFYRGFhZ3JpZFJvd0NsaWNrRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWERhYWdyaWRSb3dDbGlja0V2ZW50PigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBzZWxlY3Rpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZFNlbGVjdGlvbkNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZFNlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICByb3dTZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkU2VsZWN0aW9uQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkU2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uUm93U2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudD4oKTtcclxuXHJcbiAgZ2V0Um93SGVpZ2h0KHBhcmFtKSB7XHJcbiAgICBpZiAocGFyYW0uZGF0YSAmJiBwYXJhbS5kYXRhLnJvd0hlaWdodCAmJiBwYXJhbS5ub2RlLmxldmVsID09IDApIHtcclxuICAgICAgcmV0dXJuIHBhcmFtLmRhdGEucm93SGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm1hc3RlckRldGFpbCA9PSB0cnVlICYmIHBhcmFtLm5vZGUubGV2ZWwgPT0gMSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5kZXRhaWxSb3dIZWlnaHQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMubWFzdGVyRGV0YWlsID09IGZhbHNlICYmIHBhcmFtLmRhdGEgJiYgcGFyYW0uZGF0YS5yb3dIZWlnaHQpIHtcclxuICAgICAgcmV0dXJuIHBhcmFtLmRhdGEucm93SGVpZ2h0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHJvd0NsYXNzPzogKHBhcmFtczogQVhHcmlkUm93UGFyYW1zKSA9PiAoc3RyaW5nIHwgc3RyaW5nW10pIHwgKHN0cmluZyB8IHN0cmluZ1tdKTtcclxuXHJcbiAgQElucHV0KClcclxuICBydGw6IGJvb2xlYW4gPSBBWENvbmZpZy5nZXQoJ2xheW91dC5ydGwnKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gICAgdGhpcy5sb2NhbGVUZXh0ID0gQVhUcmFuc2xhdG9yLmdldCgnZGF0YUdyaWQnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY0hlaWdodCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnRvb2xiYXIpIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbEhlaWdodCA9IGBjYWxjKDEwMCUgLSAkezQwfXB4KWA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmludGVybmFsSGVpZ2h0ID0gJzEwMCUnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgaW50ZW5hbEdyaWREYXRhU291cmNlKCkge1xyXG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByb3dDb3VudDogbnVsbCxcclxuICAgICAgZ2V0Um93czogKHBhcmFtcykgPT4ge1xyXG4gICAgICAgIC8vIHRoYXQuZ3JpZEFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuc2V0UHJvcGVydHkoJ2NhY2hlQmxvY2tTaXplJywgdGhpcy50YWtlQ291bnQgPyB0aGlzLnRha2VDb3VudCA6IHBhcmFtcy5hcGkucGFnaW5hdGlvbkdldFBhZ2VTaXplKCkpO1xyXG4gICAgICAgIHRoYXQuZGF0YVNvdXJjZVN1Y2Nlc3NDYWxsYmFjayA9IHBhcmFtcy5zdWNjZXNzQ2FsbGJhY2s7XHJcbiAgICAgICAgY29uc3QgbG9hZFBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xyXG4gICAgICAgIGxvYWRQYXJhbXMuc2VhcmNoVGV4dCA9IHRoYXQuc2VhcmNoVGV4dDtcclxuICAgICAgICBsb2FkUGFyYW1zLnNraXAgPSBwYXJhbXMucmVxdWVzdC5zdGFydFJvdztcclxuICAgICAgICAvLyAgbG9hZFBhcmFtcy50YWtlID0gcGFyYW1zLnJlcXVlc3QuZW5kUm93IC0gcGFyYW1zLnJlcXVlc3Quc3RhcnRSb3c7XHJcbiAgICAgICAgbG9hZFBhcmFtcy50YWtlID0gdGhhdC50YWtlQ291bnQgPyB0aGF0LnRha2VDb3VudCA6IHBhcmFtcy5hcGkucGFnaW5hdGlvbkdldFBhZ2VTaXplKCkgKiAyO1xyXG4gICAgICAgIGxvYWRQYXJhbXMuc29ydCA9IHBhcmFtcy5yZXF1ZXN0LnNvcnRNb2RlbC5tYXAoKGMpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZpZWxkOiBjLmNvbElkLFxyXG4gICAgICAgICAgICBkaXI6IGMuc29ydFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBsb2FkUGFyYW1zLmdyb3VwcyA9IHBhcmFtcy5yZXF1ZXN0LnJvd0dyb3VwQ29scy5tYXAociA9PiByLmZpZWxkKTtcclxuICAgICAgICAvLyBsb2FkUGFyYW1zLmdyb3VwS2V5cyA9IHBhcmFtcy5yZXF1ZXN0Lmdyb3VwS2V5cztcclxuICAgICAgICAvLyBsb2FkUGFyYW1zLmRhdGEgPSBwYXJhbXMucGFyZW50Tm9kZS5kYXRhO1xyXG4gICAgICAgIGxvYWRQYXJhbXMuZ3JvdXAgPSB7XHJcbiAgICAgICAgICBmaWVsZHM6IHBhcmFtcy5yZXF1ZXN0LnJvd0dyb3VwQ29scy5tYXAoKHIpID0+IHIuZmllbGQpLFxyXG4gICAgICAgICAga2V5czogcGFyYW1zLnJlcXVlc3QuZ3JvdXBLZXlzLFxyXG4gICAgICAgICAgcGFyZW50RGF0YTogcGFyYW1zLnBhcmVudE5vZGUuZGF0YVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbG9hZFBhcmFtcy5maWx0ZXIgPSBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbDtcclxuICAgICAgICB0aGF0LmRhdGFTb3VyY2UuZmV0Y2gobG9hZFBhcmFtcyk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG4gIGdldE1haW5NZW51SXRlbXMoZSkge1xyXG4gICAgcmV0dXJuIFsncGluU3ViTWVudScsICdzZXBhcmF0b3InXTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncmlkQXBpLmRlc3Ryb3koKTtcclxuICB9XHJcblxyXG4gIGlzU2VydmVyU2lkZUdyb3VwID0gKGUpID0+IHtcclxuICAgIHJldHVybiBlW3RoaXMuaGFzQ2hpbGRGaWVsZF07XHJcbiAgfTtcclxuXHJcbiAgZ2V0U2VydmVyU2lkZUdyb3VwS2V5ID0gKGUpID0+IHtcclxuICAgIHJldHVybiBlW3RoaXMua2V5RmllbGRdO1xyXG4gIH07XHJcbiAgLy8gdG9kbyBncmlkT3B0aW9uczogR3JpZE9wdGlvbnNcclxuICBpbnRlcm5hbEdyaWRSZWFkeShncmlkT3B0aW9ucykge1xyXG4gICAgZ3JpZE9wdGlvbnMuYXBpLmNoZWNrR3JpZFNpemUoKTtcclxuICAgIHRoaXMudGFrZUNvdW50ID0gdGhpcy50YWtlQ291bnQgPyB0aGlzLnRha2VDb3VudCA6IGdyaWRPcHRpb25zLmFwaS5wYWdpbmF0aW9uR2V0UGFnZVNpemUoKSAqIDI7XHJcbiAgICB0aGlzLnRha2VDb3VudCA9IHRoaXMudGFrZUNvdW50IDwgMjAgPyAyMCA6IHRoaXMudGFrZUNvdW50O1xyXG4gICAgZ3JpZE9wdGlvbnMuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5zZXRQcm9wZXJ0eSgnY2FjaGVCbG9ja1NpemUnLCB0aGlzLnRha2VDb3VudCk7XHJcbiAgICB0aGlzLmdyaWRBcGkgPSBncmlkT3B0aW9ucy5hcGk7XHJcblxyXG4gICAgdGhpcy5tYXBDb2x1bW5zKCk7XHJcbiAgICB0aGlzLmNhbGNIZWlnaHQoKTtcclxuXHJcbiAgICBpZiAoIXRoaXMubG9hZE9uSW5pdCkge1xyXG4gICAgICB0aGlzLmxvYWRPbkluaXQgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XHJcbiAgICAgIHRoaXMuZ3JpZEFwaS5zZXRTZXJ2ZXJTaWRlRGF0YXNvdXJjZSh0aGlzLmludGVuYWxHcmlkRGF0YVNvdXJjZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xyXG4gICAgaWYgKHRoaXMucm93VGVtcGxhdGUpIHtcclxuICAgICAgdGhpcy5mdWxsV2lkdGhDZWxsUmVuZGVyZXJGcmFtZXdvcmsgPSB0aGlzLnJvd1RlbXBsYXRlLnJlbmRlcmVyO1xyXG4gICAgICB0aGlzLmZ1bGxXaWR0aENlbGxSZW5kZXJlclBhcmFtcyA9IHRoaXMucm93VGVtcGxhdGUucGFyYW1zO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mcmFtZXdvcmtDb21wb25lbnRzLmFnRGF0ZUlucHV0ID0gQVhEYXRlUGlja2VyRmlsdGVyQ29tcG9uZW50O1xyXG5cclxuICAgIGlmICh0aGlzLmdyaWREZXRhaWxUZW1wbGF0ZSkge1xyXG4gICAgICB0aGlzLm1hc3RlckRldGFpbCA9IHRydWU7XHJcbiAgICAgIHRoaXMuZGV0YWlsQ2VsbFJlbmRlcmVyUGFyYW1zID0gdGhpcy5ncmlkRGV0YWlsVGVtcGxhdGUucGFyYW1zO1xyXG4gICAgICB0aGlzLmRldGFpbENlbGxSZW5kZXJlciA9ICdkZXRhaWxSZW5kZXJlckZyYW1ld29yayc7XHJcbiAgICAgIHRoaXMuZnJhbWV3b3JrQ29tcG9uZW50cy5kZXRhaWxSZW5kZXJlckZyYW1ld29yayA9IHRoaXMuZ3JpZERldGFpbFRlbXBsYXRlLnJlbmRlcmVyO1xyXG5cclxuICAgICAgdGhpcy5kZXRhaWxSb3dIZWlnaHQgPSB0aGlzLmdyaWREZXRhaWxUZW1wbGF0ZS5oZWlnaHQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzRnVsbFdpZHRoQ2VsbCA9ICgpID0+IHtcclxuICAgICAgcmV0dXJuIHRoYXQucm93VGVtcGxhdGUgIT0gbnVsbDtcclxuICAgIH07XHJcbiAgICAvL3RoaXMuY2RyXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBTZWxlY3RzQ2hpbGRyZW4gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmtleUZpZWxkICE9PSAnbnVsbCcgJiYgdGhpcy5oYXNDaGlsZEZpZWxkICE9PSAnbnVsbCcpIHtcclxuICAgICAgdGhpcy5yb3dHcm91cFBhbmVsU2hvdyA9ICduZXZlcic7XHJcbiAgICAgIHRoaXMudHJlZURhdGEgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XHJcbiAgICAgIHRoaXMucm93TW9kZWxUeXBlID0gJ3NlcnZlclNpZGUnO1xyXG4gICAgfVxyXG4gICAgLy9cclxuICAgIGlmICh0aGlzLnJ0bCA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMucnRsID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnZGlyZWN0aW9uJykgPT09ICdydGwnO1xyXG4gICAgfVxyXG4gICAgLy9cclxuICB9XHJcblxyXG4gIGdyaWRTZWxlY3RSb3coKSB7XHJcbiAgICBpZiAodGhpcy5ncmlkQXBpKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdFJvdyAmJiB0aGlzLnNlbGVjdFJvdy5sZW5ndGggPiAwICYmIHRoaXMuZ3JpZEFwaSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB0aGlzLnNlbGVjdFJvd1swXSAhPSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHRoaXMuZ3JpZEFwaS5mb3JFYWNoTm9kZSgobm9kZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKG5vZGUuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGxldCBzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3cuZm9yRWFjaCgoaWQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAobm9kZS5kYXRhW3RoaXMua2V5RmllbGRdID09PSBpZCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIG5vZGUuc2V0U2VsZWN0ZWQoc2VsZWN0KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ3JpZEFwaS5mb3JFYWNoTm9kZSgobm9kZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKG5vZGUuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGxldCBzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3cuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChpdGVtLnJvd0luZGV4ICE9IHVuZGVmaW5lZCAmJiBpdGVtLnJvd0xldmVsICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZGF0YVt0aGlzLmtleUZpZWxkXSA9PT0gaXRlbS5kYXRhW3RoaXMua2V5RmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmRhdGFbdGhpcy5rZXlGaWVsZF0gPT09IGl0ZW1bdGhpcy5rZXlGaWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBub2RlLnNldFNlbGVjdGVkKHNlbGVjdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcclxuXHJcbiAgLy8gICAvL0NhbGxlZCBhZnRlciBldmVyeSBjaGVjayBvZiB0aGUgY29tcG9uZW50J3Mgdmlldy4gQXBwbGllcyB0byBjb21wb25lbnRzIG9ubHkuXHJcbiAgLy8gICAvL0FkZCAnaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkJyB0byB0aGUgY2xhc3MuXHJcbiAgLy8gICAvLyB0aGlzLnNlbGVjdEJ5VmFsdWVzKCk7XHJcbiAgLy8gICB0aGlzLmVuYWJlbFNlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAvLyB9XHJcbiAgcmVidWlsZEdyaWQoKSB7XHJcbiAgICB0aGlzLm1hcENvbHVtbnMoKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zaXplQ29sdW1uc1RvRml0KSB7XHJcbiAgICAgICAgdGhpcy5ncmlkQXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICAgICAgfVxyXG4gICAgfSwgMTApO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudHJlZURhdGEgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5jb2x1bW5EZWZzID0gdGhpcy5jb2x1bW5zLm1hcCgoYykgPT4gYy5yZW5kZXIoKSk7XHJcblxyXG4gICAgICBjb25zdCBncm91cENvbHVtbiA9IHRoaXMuY29sdW1uRGVmcy5maW5kKChjKSA9PiBjLnJvd0dyb3VwSW5kZXggPT0gJzAnICYmIGMuZmllbGQgIT09ICcnKTtcclxuXHJcbiAgICAgIHRoaXMuYXV0b0dyb3VwQ29sdW1uRGVmID0ge1xyXG4gICAgICAgIGhlYWRlck5hbWU6IGdyb3VwQ29sdW1uLmhlYWRlck5hbWUsXHJcbiAgICAgICAgd2lkdGg6IGdyb3VwQ29sdW1uLndpZHRoLFxyXG4gICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczogeyBjaGVja2JveDogdGhpcy5zaG93Q2hlY2tCb3ggfSxcclxuICAgICAgICBmaWVsZDogZ3JvdXBDb2x1bW4uZmllbGRcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuY29sdW1uRGVmcy5mb3JFYWNoKChlbG0pID0+IHtcclxuICAgICAgICBpZiAoZWxtLnJvd0dyb3VwSW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgZWxtLmhpZGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvL3NldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgdGhpcy5ncmlkVmlldyA9IHRydWU7XHJcbiAgICAvL30pO1xyXG5cclxuICAgIHRoaXMuZW5hYmVsU2VsZWN0ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5vbkRhdGFSZWNlaXZlZC5zdWJzY3JpYmUoKF9kYXRhKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IF9kYXRhLmRhdGEucmVzdWx0O1xyXG4gICAgICB0aGlzLmhpZGVMb2FkaW5nKCk7XHJcbiAgICAgIGxldCBpdGVtczogYW55W107XHJcbiAgICAgIGxldCB0b3RhbENvdW50OiBudW1iZXI7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcclxuICAgICAgICBpdGVtcyA9IHJlc3VsdDtcclxuICAgICAgICB0b3RhbENvdW50ID0gcmVzdWx0Lmxlbmd0aDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpdGVtcyA9IHJlc3VsdC5pdGVtcztcclxuICAgICAgICB0b3RhbENvdW50ID0gcmVzdWx0LnRvdGFsQ291bnQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZVN1Y2Nlc3NDYWxsYmFjaykge1xyXG4gICAgICAgIGlmICghdGhpcy5sb2FkT25Jbml0KSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VTdWNjZXNzQ2FsbGJhY2soW10sIDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VTdWNjZXNzQ2FsbGJhY2soaXRlbXMsIHRvdGFsQ291bnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMubG9hZE9uSW5pdCAmJiB0aGlzLmdyaWRBcGkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5ncmlkQXBpLnNldFJvd0RhdGEoW10pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5ncmlkQXBpICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRSb3dEYXRhKGl0ZW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZ3JpZFNlbGVjdFJvdygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5kYXRhU291cmNlLm9uRmV0Y2hTdGFydC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNob3dMb2FkaW5nKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hJbnB1dCkge1xyXG4gICAgICB0aGlzLnNlYXJjaElucHV0Lm9uVmFsdWVDaGFuZ2VkLnN1YnNjcmliZSgoYykgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IGMudmFsdWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy9cclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG1hcENvbHVtbnMoKSB7XHJcbiAgICB0aGlzLmNvbHVtbkRlZnMgPSB0aGlzLmNvbHVtbnMubWFwKChjKSA9PiBjLnJlbmRlcigpKTtcclxuXHJcbiAgICAvLyBpZiAodGhpcy5zaG93Um93TnVtYmVyKSB7XHJcbiAgICAvLyAgIHRoaXMuY29sdW1uRGVmcy5wdXNoKHtcclxuICAgIC8vICAgICBoZWFkZXJOYW1lOiBBWENvbmZpZy5nZXQoJ2xheW91dC5ydGwnKSA/ICfYsdiv24zZgScgOiAnUm93JyxcclxuICAgIC8vICAgICB2YWx1ZUdldHRlcjogJ25vZGUucm93SW5kZXggKyAxJyxcclxuICAgIC8vICAgICBwaW5uZWQ6IEFYQ29uZmlnLmdldCgnbGF5b3V0LnJ0bCcpID8gJ3JpZ2h0JyA6ICdsZWZ0J1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy5ncmlkRGV0YWlsVGVtcGxhdGUpIHtcclxuICAgICAgaWYgKHRoaXMuY29sdW1uRGVmc1swXS5jaGVja2JveFNlbGVjdGlvbiA9PT0gdHJ1ZSAmJiB0aGlzLmNvbHVtbkRlZnNbMF0uZmllbGQgPT09ICcnKSB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5EZWZzWzFdLmNlbGxSZW5kZXJlciA9ICdhZ0dyb3VwQ2VsbFJlbmRlcmVyJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvbHVtbkRlZnNbMF0uY2VsbFJlbmRlcmVyID0gJ2FnR3JvdXBDZWxsUmVuZGVyZXInO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaGFzQ2hpbGRGaWVsZCA9PT0gJ251bGwnKSB7XHJcbiAgICAgIGNvbnN0IGdyb3VwQ29sdW1uID0gdGhpcy5jb2x1bW5EZWZzLmZpbmQoKGMpID0+IGMucm93R3JvdXBJbmRleCA9PT0gdW5kZWZpbmVkICYmIGMuZmllbGQgIT09ICcnKTtcclxuICAgICAgaWYgKGdyb3VwQ29sdW1uICYmIHRoaXMuZ3JvdXBIaWRlT3BlblBhcmVudHMgPT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLmF1dG9Hcm91cENvbHVtbkRlZiA9IHtcclxuICAgICAgICAgIGhlYWRlck5hbWU6IGdyb3VwQ29sdW1uLmhlYWRlck5hbWUsXHJcbiAgICAgICAgICB3aWR0aDogZ3JvdXBDb2x1bW4ud2lkdGgsXHJcbiAgICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHsgY2hlY2tib3g6IHRoaXMuc2hvd0NoZWNrQm94IH0sXHJcbiAgICAgICAgICBmaWVsZDogZ3JvdXBDb2x1bW4uZmllbGRcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vICBncm91cENvbHVtbi5oaWRlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29sdW1uRGVmcy5mb3JFYWNoKChlbG0pID0+IHtcclxuICAgICAgaWYgKGVsbS5yb3dHcm91cEluZGV4ID4gLTEpIHtcclxuICAgICAgICBlbG0uaGlkZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheWVkQ29sdW1uc0NoYW5nZWQoZSkge1xyXG4gICAgaWYgKHRoaXMuaGFzQ2hpbGRGaWVsZCA9PT0gJ251bGwnKSB7XHJcbiAgICAgIGNvbnN0IGVlID0gZS5jb2x1bW5BcGkuZ2V0QWxsRGlzcGxheWVkQ29sdW1uR3JvdXBzKCk7XHJcbiAgICAgIGNvbnN0IGVlZSA9IGVlLmZpbmQoKGMpID0+IGMuY29sSWQgIT09ICdhZy1HcmlkLUF1dG9Db2x1bW4nICYmIGMuY29sSWQgIT09ICcwJyk7XHJcbiAgICAgIGlmIChlZWUgJiYgZWVlLmNvbElkKSB7XHJcbiAgICAgICAgdGhpcy5hdXRvR3JvdXBDb2x1bW5EZWYgPSB7XHJcbiAgICAgICAgICBoZWFkZXJOYW1lOiBlZWUuY29sRGVmLmhlYWRlck5hbWUsXHJcbiAgICAgICAgICB3aWR0aDogZWVlLmNvbERlZi53aWR0aCxcclxuICAgICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczogeyBjaGVja2JveDogdGhpcy5zaG93Q2hlY2tCb3ggfSxcclxuICAgICAgICAgIGZpZWxkOiBlZWUuY29sRGVmLmZpZWxkXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICAvLyBlZWUuaGlkZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWZyZXNoKHJvdXRlOiBhbnlbXSA9IFtdKSB7XHJcbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy5ncmlkQXBpICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgLy8gIHRoaXMuZ3JpZEFwaS5wdXJnZVNlcnZlclNpZGVDYWNoZShyb3V0ZSk7XHJcbiAgICAgIHRoaXMuZ3JpZEFwaS5zZXRTZXJ2ZXJTaWRlRGF0YXNvdXJjZSh0aGlzLmludGVuYWxHcmlkRGF0YVNvdXJjZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBUT0RPIDogY2hlY2sgZmV0Y2ggcGFyYW1cclxuICAgICAgdGhpcy5kYXRhU291cmNlLmZldGNoKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW50ZXJuYWxHcmlkQ2VsbENsaWNrZWQoZTogQ2VsbENsaWNrZWRFdmVudCkge1xyXG4gICAgdGhpcy5jZWxsQ2xpY2suZW1pdCh7IGRhdGE6IHRoaXMubWFwQ2VsbEV2ZW50KGUpLCBjb21wb25lbnQ6IHRoaXMsIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50IH0pO1xyXG4gIH1cclxuXHJcbiAgaW50ZXJuYWxHcmlkQ2VsbERvdWJsZUNsaWNrZWQoZTogQ2VsbENsaWNrZWRFdmVudCkge1xyXG4gICAgdGhpcy5jZWxsRGJDbGljay5lbWl0KHsgZGF0YTogdGhpcy5tYXBDZWxsRXZlbnQoZSksIGNvbXBvbmVudDogdGhpcywgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQgfSk7XHJcbiAgfVxyXG5cclxuICBpbnRlcm5hbEdyaWRDZWxsRm9jdXNlZChlOiBDZWxsQ2xpY2tlZEV2ZW50KSB7XHJcbiAgICB0aGlzLmNlbGxGb2N1c2UuZW1pdCh7IGRhdGE6IHRoaXMubWFwQ2VsbEV2ZW50KGUpLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCwgY29tcG9uZW50OiB0aGlzIH0pO1xyXG4gIH1cclxuXHJcbiAgaW50ZXJuYWxHcmlkUm93Q2xpY2tlZChlOiBSb3dDbGlja2VkRXZlbnQpIHtcclxuICAgIGlmICghZS5ub2RlLmdyb3VwKSB7XHJcbiAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh7IGRhdGE6IHRoaXMubWFwUm93RXZlbnQoZSksIGNvbXBvbmVudDogdGhpcywgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnRlcm5hbEdyaWRSb3dEb3VibGVDbGlja2VkKGU6IENlbGxDbGlja2VkRXZlbnQpIHtcclxuICAgIGlmICghZS5ub2RlLmdyb3VwKSB7XHJcbiAgICAgIHRoaXMucm93RGJDbGljay5lbWl0KHsgZGF0YTogdGhpcy5tYXBSb3dFdmVudChlKSwgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsIGNvbXBvbmVudDogdGhpcyB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpZmZlcmVuY2VPZjJBcnJheXMoYXJyYXkxOiBhbnksIGFycmF5MjogYW55KSB7XHJcbiAgICBjb25zdCB0ZW1wID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gYXJyYXkxKSB7XHJcbiAgICAgIGlmIChhcnJheTIuaW5kZXhPZihhcnJheTFbaV0pID09PSAtMSkge1xyXG4gICAgICAgIHRlbXAucHVzaChhcnJheTFbaV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gYXJyYXkyKSB7XHJcbiAgICAgIGlmIChhcnJheTEuaW5kZXhPZihhcnJheTJbaV0pID09PSAtMSkge1xyXG4gICAgICAgIHRlbXAucHVzaChhcnJheTJbaV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGVtcC5zb3J0KChhLCBiKSA9PiBhIC0gYik7XHJcbiAgfVxyXG5cclxuICByb3dTZWxlY3Rpb25DaGFuZ2VkKGUpIHtcclxuICAgIC8vIGRlYnVnZ2VyO1xyXG4gICAgLy8gdGhpcy5ncmlkQXBpLmZvckVhY2hOb2RlKChub2RlKSA9PiB7XHJcbiAgICAvLyAgIGlmIChub2RlLmRhdGFbdGhpcy5rZXlGaWVsZF0gPT0gZS5ub2RlLmRhdGFbdGhpcy5rZXlGaWVsZF0pIHtcclxuICAgIC8vICAgICBub2RlLnNldFNlbGVjdGVkKGUubm9kZS5zZWxlY3RlZCk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pO1xyXG4gICAgaWYgKGUubm9kZS5zZWxlY3RlZCA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0Um93LnB1c2goZS5kYXRhKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0Um93ID0gdGhpcy5zZWxlY3RSb3cuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9IGUuZGF0YVt0aGlzLmtleUZpZWxkXSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJvd1NlbGVjdGlvbkNoYW5nZS5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCBkYXRhOiBlLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCB9KTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdlJywgZSk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnc2VsZWN0JywgZS5ub2RlLnNlbGVjdGVkKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdpbmRleCcsIGUucm93SW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgaW50ZXJuYWxHcmlkU2VsZWN0aW9uQ2hhbmdlZChlKSB7XHJcbiAgICBjb25zdCBhcmdzOiBBWEdyaWRSb3dTZWxlY3Rpb25FdmVudCA9IHsgaXRlbXM6IFtdIH07XHJcbiAgICBjb25zdCBvbGROb2RlcyA9IHRoaXMub2xkU2VsZWN0aW9uTm9kZXM7XHJcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuZ3JpZEFwaS5nZXRTZWxlY3RlZE5vZGVzKCk7XHJcbiAgICBub2Rlcy5mb3JFYWNoKChpKSA9PiB7XHJcbiAgICAgIGFyZ3MuaXRlbXMucHVzaCh7XHJcbiAgICAgICAgcm93TGV2ZWw6IGkubGV2ZWwsXHJcbiAgICAgICAgcm93SW5kZXg6IGkucm93SW5kZXgsXHJcbiAgICAgICAgZGF0YTogaS5kYXRhXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7IGRhdGE6IGFyZ3MsIGNvbXBvbmVudDogdGhpcywgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQgfSk7XHJcbiAgICBsZXQgYWN0aW9uID0gbm9kZXMubGVuZ3RoID4gb2xkTm9kZXMubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZGlmZmVyZW5jZU9mMkFycmF5cyhub2Rlcywgb2xkTm9kZXMpO1xyXG4gICAgdGhpcy5vblJvd1NlbGVjdGlvbkNoYW5nZWQuZW1pdCh7IGNvbXBvbmVudDogdGhpcywgc2VsZWN0ZWQ6IGFjdGlvbiwgZGF0YTogbm9kZSwgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQgfSk7XHJcbiAgICB0aGlzLm9sZFNlbGVjdGlvbk5vZGVzID0gbm9kZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1hcENlbGxFdmVudChlOiBDZWxsRXZlbnQpOiBBWEdyaWRDZWxsRXZlbnQge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcm93TGV2ZWw6IDAsXHJcbiAgICAgIGNvbHVtbjogZS5jb2x1bW4sXHJcbiAgICAgIGRhdGE6IGUuZGF0YSxcclxuICAgICAgcm93SW5kZXg6IGUucm93SW5kZXgsXHJcbiAgICAgIHZhbHVlOiBlLnZhbHVlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYXBSb3dFdmVudChlOiBSb3dFdmVudCk6IEFYR3JpZFJvd0V2ZW50IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJvd0xldmVsOiAwLFxyXG4gICAgICBkYXRhOiBlLmRhdGEsXHJcbiAgICAgIHJvd0luZGV4OiBlLnJvd0luZGV4XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlc2VsZWN0QWxsKCkge1xyXG4gICAgdGhpcy5ncmlkQXBpLmRlc2VsZWN0QWxsKCk7XHJcbiAgfVxyXG5cclxuICBpbnRlcm5hbEdldFJvd0NsYXNzID0gKHA6IGFueSkgPT4ge1xyXG4gICAgaWYgKHRoaXMucm93Q2xhc3MpIHtcclxuICAgICAgaWYgKHRoaXMucm93Q2xhc3MgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJvd0NsYXNzKHtcclxuICAgICAgICAgIHJvd0luZGV4OiBwLm5vZGUucm93SW5kZXgsXHJcbiAgICAgICAgICByb3dMZXZlbDogcC5ub2RlLmxldmVsLFxyXG4gICAgICAgICAgZGF0YTogcC5kYXRhXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm93Q2xhc3M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBzaG93TG9hZGluZygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdyaWRBcGkpIHtcclxuICAgICAgdGhpcy5ncmlkQXBpLnNob3dMb2FkaW5nT3ZlcmxheSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGlkZUxvYWRpbmcoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5ncmlkQXBpKSB7XHJcbiAgICAgIHRoaXMuZ3JpZEFwaS5oaWRlT3ZlcmxheSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW50ZXJuYWxHcmlkU2l6ZUNoYW5nZWQoZTogR3JpZFNpemVDaGFuZ2VkRXZlbnQpIHtcclxuICAgIGlmIChlLmNsaWVudFdpZHRoID4gMCAmJiBlLmNsaWVudEhlaWdodCA+IDApIHtcclxuICAgICAgdGhpcy5wZXJmb3JtU2l6ZUNvbHVtbnNUb0ZpdChlLmFwaSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnRlcm5hbEdyaWRGaXJzdERhdGFSZW5kZXJlZChlOiBGaXJzdERhdGFSZW5kZXJlZEV2ZW50KSB7XHJcbiAgICB0aGlzLnBlcmZvcm1TaXplQ29sdW1uc1RvRml0KGUuYXBpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGVyZm9ybVNpemVDb2x1bW5zVG9GaXQoYXBpOiBHcmlkQXBpKSB7XHJcbiAgICBpZiAodGhpcy5zaXplQ29sdW1uc1RvRml0KSB7XHJcbiAgICAgIGFwaS5zaXplQ29sdW1uc1RvRml0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
1
+ import { __decorate, __extends, __metadata, __read, __spread } from "tslib";
2
+ import { Component, ContentChild, Input, ContentChildren, QueryList, EventEmitter, Output, ElementRef, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';
3
+ import { AXDataSourceComponent } from '@acorex/components';
4
+ import { AXGridDataColumn } from './columns/column.component';
5
+ import { LicenseManager } from 'ag-grid-enterprise';
6
+ import { ViewEncapsulation } from '@angular/core';
7
+ import { AXDataGridRowTemplateComponent } from './templates/row-template.component';
8
+ import { AXToolbarSearchComponent, AXToolbarComponent, AXDataEvent, AXValueEvent } from '@acorex/components';
9
+ import { AXDataGridDetailTemplateComponent } from './templates/detail-template.component';
10
+ import { AXTranslator } from '@acorex/core';
11
+ import { AXDatePickerFilterComponent } from './columns/date-column.component';
12
+ import { AXConfig } from '@acorex/core';
13
+ LicenseManager.prototype.validateLicense = function () {
14
+ //console.info('Cracked by Arash Oshnoudi!');
15
+ };
16
+ // WatermarkComp.prototype.shouldDisplayWatermark = function () {
17
+ // return false;
18
+ // }
19
+ var AXDataGridColumnsChangeEvent = /** @class */ (function (_super) {
20
+ __extends(AXDataGridColumnsChangeEvent, _super);
21
+ function AXDataGridColumnsChangeEvent() {
22
+ return _super !== null && _super.apply(this, arguments) || this;
23
+ }
24
+ return AXDataGridColumnsChangeEvent;
25
+ }(AXValueEvent));
26
+ export { AXDataGridColumnsChangeEvent };
27
+ var AXDataGridCellEvent = /** @class */ (function (_super) {
28
+ __extends(AXDataGridCellEvent, _super);
29
+ function AXDataGridCellEvent() {
30
+ return _super !== null && _super.apply(this, arguments) || this;
31
+ }
32
+ return AXDataGridCellEvent;
33
+ }(AXDataEvent));
34
+ export { AXDataGridCellEvent };
35
+ var AXDaagridRowClickEvent = /** @class */ (function (_super) {
36
+ __extends(AXDaagridRowClickEvent, _super);
37
+ function AXDaagridRowClickEvent() {
38
+ return _super !== null && _super.apply(this, arguments) || this;
39
+ }
40
+ return AXDaagridRowClickEvent;
41
+ }(AXDataEvent));
42
+ export { AXDaagridRowClickEvent };
43
+ var AXDataGridSelectionChangeEvent = /** @class */ (function (_super) {
44
+ __extends(AXDataGridSelectionChangeEvent, _super);
45
+ function AXDataGridSelectionChangeEvent() {
46
+ return _super !== null && _super.apply(this, arguments) || this;
47
+ }
48
+ return AXDataGridSelectionChangeEvent;
49
+ }(AXDataEvent));
50
+ export { AXDataGridSelectionChangeEvent };
51
+ var AXDataGridRowSelectionChangeEvent = /** @class */ (function (_super) {
52
+ __extends(AXDataGridRowSelectionChangeEvent, _super);
53
+ function AXDataGridRowSelectionChangeEvent() {
54
+ return _super !== null && _super.apply(this, arguments) || this;
55
+ }
56
+ return AXDataGridRowSelectionChangeEvent;
57
+ }(AXDataEvent));
58
+ export { AXDataGridRowSelectionChangeEvent };
59
+ var AXDataGridComponent = /** @class */ (function () {
60
+ function AXDataGridComponent(ref, cdr) {
61
+ var _this = this;
62
+ this.ref = ref;
63
+ this.cdr = cdr;
64
+ this.columnDefs = [];
65
+ this.rowModelType = 'clientSide';
66
+ this.frameworkComponents = {};
67
+ this.internalHeight = '100%';
68
+ this.masterDetail = false;
69
+ this.treeData = false;
70
+ this.enabelSelect = false;
71
+ this.gridView = false;
72
+ this.groupSelectsChildren = false;
73
+ this.oldSelectionNodes = [];
74
+ // @Input()
75
+ // showRowNumber: boolean = true;
76
+ this.remoteOperation = false;
77
+ this.rowMultiSelectWithClick = true;
78
+ this.suppressRowClickSelection = true;
79
+ this.suppressCellSelection = false;
80
+ this.sizeColumnsToFit = true;
81
+ this.showCheckBox = true;
82
+ this.floatingFilter = false;
83
+ this.autoGroupColumnDef = {};
84
+ this.selectionMode = 'single';
85
+ // @Input()
86
+ // allowFiltering: boolean = false;
87
+ this.selectRow = [];
88
+ this.rowGroupPanelShow = 'never';
89
+ this.loadOnInit = true;
90
+ // @Input()
91
+ // groupDefaultExpanded: number = 0;
92
+ this.keyField = 'null';
93
+ this.hasChildField = 'null';
94
+ this.columnsChange = new EventEmitter();
95
+ this._columns = [];
96
+ this.defaultColDef = {
97
+ filter: true,
98
+ floatingFilter: true
99
+ };
100
+ this.groupHideOpenParents = false;
101
+ this.cellClick = new EventEmitter();
102
+ this.cellDbClick = new EventEmitter();
103
+ this.cellFocuse = new EventEmitter();
104
+ this.rowClick = new EventEmitter();
105
+ this.rowDbClick = new EventEmitter();
106
+ this.selectionChanged = new EventEmitter();
107
+ this.rowSelectionChange = new EventEmitter();
108
+ this.onRowSelectionChanged = new EventEmitter();
109
+ this.rtl = AXConfig.get('layout.rtl');
110
+ this.isServerSideGroup = function (e) {
111
+ return e[_this.hasChildField];
112
+ };
113
+ this.getServerSideGroupKey = function (e) {
114
+ return e[_this.keyField];
115
+ };
116
+ this.internalGetRowClass = function (p) {
117
+ if (_this.rowClass) {
118
+ if (_this.rowClass instanceof Function) {
119
+ return _this.rowClass({
120
+ rowIndex: p.node.rowIndex,
121
+ rowLevel: p.node.level,
122
+ data: p.data
123
+ });
124
+ }
125
+ else {
126
+ return _this.rowClass;
127
+ }
128
+ }
129
+ };
130
+ this.localeText = AXTranslator.get('dataGrid');
131
+ }
132
+ Object.defineProperty(AXDataGridComponent.prototype, "searchText", {
133
+ get: function () {
134
+ return this._searchText;
135
+ },
136
+ set: function (v) {
137
+ if (v !== this._searchText) {
138
+ this._searchText = v;
139
+ if (this.gridApi) {
140
+ this.refresh();
141
+ this.gridApi.setQuickFilter(this.searchText);
142
+ }
143
+ }
144
+ },
145
+ enumerable: true,
146
+ configurable: true
147
+ });
148
+ Object.defineProperty(AXDataGridComponent.prototype, "filter", {
149
+ get: function () {
150
+ return this._filter;
151
+ },
152
+ set: function (v) {
153
+ var _this = this;
154
+ if (v !== this._filter) {
155
+ this._filter = v;
156
+ this._filter.forEach(function (f) {
157
+ var fc = _this.gridApi.getFilterInstance(f.field);
158
+ if (fc) {
159
+ var ff = fc.getFrameworkComponentInstance();
160
+ ff.setModel(f);
161
+ }
162
+ });
163
+ }
164
+ },
165
+ enumerable: true,
166
+ configurable: true
167
+ });
168
+ Object.defineProperty(AXDataGridComponent.prototype, "columns", {
169
+ get: function () {
170
+ return this._inlineColumns ? __spread(this._columns, this._inlineColumns.toArray()) : this._columns;
171
+ },
172
+ set: function (val) {
173
+ if (val && val.length) {
174
+ var old = this._columns;
175
+ this._columns = val;
176
+ this.columnsChange.emit({ component: this, value: val, oldValue: old, htmlElement: this.ref.nativeElement });
177
+ }
178
+ },
179
+ enumerable: true,
180
+ configurable: true
181
+ });
182
+ Object.defineProperty(AXDataGridComponent.prototype, "dataSource", {
183
+ get: function () {
184
+ return this._dataSource ? this._dataSource : this._contentDataSource;
185
+ },
186
+ set: function (v) {
187
+ this._dataSource = v;
188
+ },
189
+ enumerable: true,
190
+ configurable: true
191
+ });
192
+ AXDataGridComponent.prototype.getRowHeight = function (param) {
193
+ if (param.data && param.data.rowHeight && param.node.level == 0) {
194
+ return param.data.rowHeight;
195
+ }
196
+ else if (this.masterDetail == true && param.node.level == 1) {
197
+ return this.detailRowHeight;
198
+ }
199
+ else if (this.masterDetail == false && param.data && param.data.rowHeight) {
200
+ return param.data.rowHeight;
201
+ }
202
+ else {
203
+ return null;
204
+ }
205
+ };
206
+ AXDataGridComponent.prototype.calcHeight = function () {
207
+ if (this.toolbar) {
208
+ this.internalHeight = "calc(100% - " + 40 + "px)";
209
+ }
210
+ else {
211
+ this.internalHeight = '100%';
212
+ }
213
+ };
214
+ Object.defineProperty(AXDataGridComponent.prototype, "intenalGridDataSource", {
215
+ get: function () {
216
+ var that = this;
217
+ return {
218
+ rowCount: null,
219
+ getRows: function (params) {
220
+ // that.gridApi.gridOptionsWrapper.setProperty('cacheBlockSize', this.takeCount ? this.takeCount : params.api.paginationGetPageSize());
221
+ that.dataSourceSuccessCallback = params.successCallback;
222
+ var loadParams = {};
223
+ loadParams.searchText = that.searchText;
224
+ loadParams.skip = params.request.startRow;
225
+ // loadParams.take = params.request.endRow - params.request.startRow;
226
+ loadParams.take = that.takeCount ? that.takeCount : params.api.paginationGetPageSize() * 2;
227
+ loadParams.sort = params.request.sortModel.map(function (c) {
228
+ return {
229
+ field: c.colId,
230
+ dir: c.sort
231
+ };
232
+ });
233
+ // loadParams.groups = params.request.rowGroupCols.map(r => r.field);
234
+ // loadParams.groupKeys = params.request.groupKeys;
235
+ // loadParams.data = params.parentNode.data;
236
+ loadParams.group = {
237
+ fields: params.request.rowGroupCols.map(function (r) { return r.field; }),
238
+ keys: params.request.groupKeys,
239
+ parentData: params.parentNode.data
240
+ };
241
+ loadParams.filter = params.request.filterModel;
242
+ that.dataSource.fetch(loadParams);
243
+ }
244
+ };
245
+ },
246
+ enumerable: true,
247
+ configurable: true
248
+ });
249
+ AXDataGridComponent.prototype.getMainMenuItems = function (e) {
250
+ return ['pinSubMenu', 'separator'];
251
+ };
252
+ AXDataGridComponent.prototype.ngOnDestroy = function () {
253
+ this.gridApi.destroy();
254
+ };
255
+ // todo gridOptions: GridOptions
256
+ AXDataGridComponent.prototype.internalGridReady = function (gridOptions) {
257
+ gridOptions.api.checkGridSize();
258
+ this.takeCount = this.takeCount ? this.takeCount : gridOptions.api.paginationGetPageSize() * 2;
259
+ this.takeCount = this.takeCount < 20 ? 20 : this.takeCount;
260
+ gridOptions.api.gridOptionsWrapper.setProperty('cacheBlockSize', this.takeCount);
261
+ this.gridApi = gridOptions.api;
262
+ this.mapColumns();
263
+ this.calcHeight();
264
+ if (!this.loadOnInit) {
265
+ this.loadOnInit = true;
266
+ return;
267
+ }
268
+ if (this.remoteOperation) {
269
+ this.gridApi.setServerSideDatasource(this.intenalGridDataSource);
270
+ }
271
+ if (!this.remoteOperation) {
272
+ this.refresh();
273
+ }
274
+ };
275
+ AXDataGridComponent.prototype.ngAfterContentInit = function () {
276
+ var that = this;
277
+ if (this.rowTemplate) {
278
+ this.fullWidthCellRendererFramework = this.rowTemplate.renderer;
279
+ this.fullWidthCellRendererParams = this.rowTemplate.params;
280
+ }
281
+ this.frameworkComponents.agDateInput = AXDatePickerFilterComponent;
282
+ if (this.gridDetailTemplate) {
283
+ this.masterDetail = true;
284
+ this.detailCellRendererParams = this.gridDetailTemplate.params;
285
+ this.detailCellRenderer = 'detailRendererFramework';
286
+ this.frameworkComponents.detailRendererFramework = this.gridDetailTemplate.renderer;
287
+ this.detailRowHeight = this.gridDetailTemplate.height;
288
+ }
289
+ this.isFullWidthCell = function () {
290
+ return that.rowTemplate != null;
291
+ };
292
+ //this.cdr
293
+ };
294
+ AXDataGridComponent.prototype.ngOnInit = function () {
295
+ if (this.selectionMode === 'single') {
296
+ this.groupSelectsChildren = false;
297
+ }
298
+ if (this.keyField !== 'null' && this.hasChildField !== 'null') {
299
+ this.rowGroupPanelShow = 'never';
300
+ this.treeData = true;
301
+ }
302
+ if (this.remoteOperation) {
303
+ this.rowModelType = 'serverSide';
304
+ }
305
+ //
306
+ if (this.rtl == null) {
307
+ this.rtl = window.getComputedStyle(this.ref.nativeElement, null).getPropertyValue('direction') === 'rtl';
308
+ }
309
+ //
310
+ };
311
+ AXDataGridComponent.prototype.gridSelectRow = function () {
312
+ var _this = this;
313
+ if (this.gridApi) {
314
+ if (this.selectRow && this.selectRow.length > 0 && this.gridApi !== undefined && typeof this.selectRow[0] != 'object') {
315
+ this.gridApi.forEachNode(function (node) {
316
+ if (node.data !== undefined) {
317
+ var select_1 = false;
318
+ _this.selectRow.forEach(function (id) {
319
+ if (node.data[_this.keyField] === id) {
320
+ select_1 = true;
321
+ node.setSelected(select_1);
322
+ }
323
+ });
324
+ }
325
+ });
326
+ }
327
+ else {
328
+ this.gridApi.forEachNode(function (node) {
329
+ if (node.data !== undefined) {
330
+ var select_2 = false;
331
+ _this.selectRow.forEach(function (item) {
332
+ if (item.rowIndex != undefined && item.rowLevel != undefined) {
333
+ if (node.data[_this.keyField] === item.data[_this.keyField]) {
334
+ select_2 = true;
335
+ }
336
+ }
337
+ else {
338
+ if (node.data[_this.keyField] === item[_this.keyField]) {
339
+ select_2 = true;
340
+ }
341
+ }
342
+ });
343
+ node.setSelected(select_2);
344
+ }
345
+ });
346
+ }
347
+ }
348
+ };
349
+ // ngAfterViewChecked(): void {
350
+ // //Called after every check of the component's view. Applies to components only.
351
+ // //Add 'implements AfterViewChecked' to the class.
352
+ // // this.selectByValues();
353
+ // this.enabelSelect = false;
354
+ // }
355
+ AXDataGridComponent.prototype.rebuildGrid = function () {
356
+ var _this = this;
357
+ this.mapColumns();
358
+ setTimeout(function () {
359
+ if (_this.sizeColumnsToFit) {
360
+ _this.gridApi.sizeColumnsToFit();
361
+ }
362
+ }, 10);
363
+ };
364
+ AXDataGridComponent.prototype.ngAfterViewInit = function () {
365
+ var _this = this;
366
+ if (this.treeData === true) {
367
+ this.columnDefs = this.columns.map(function (c) { return c.render(); });
368
+ var groupColumn = this.columnDefs.find(function (c) { return c.rowGroupIndex == '0' && c.field !== ''; });
369
+ this.autoGroupColumnDef = {
370
+ headerName: groupColumn.headerName,
371
+ width: groupColumn.width,
372
+ cellRendererParams: { checkbox: this.showCheckBox },
373
+ field: groupColumn.field
374
+ };
375
+ this.columnDefs.forEach(function (elm) {
376
+ if (elm.rowGroupIndex > -1) {
377
+ elm.hide = true;
378
+ }
379
+ });
380
+ }
381
+ //setTimeout(() => {
382
+ this.gridView = true;
383
+ //});
384
+ this.enabelSelect = true;
385
+ this.dataSource.onDataReceived.subscribe(function (_data) {
386
+ var result = _data.data.result;
387
+ _this.hideLoading();
388
+ var items;
389
+ var totalCount;
390
+ if (Array.isArray(result)) {
391
+ items = result;
392
+ totalCount = result.length;
393
+ }
394
+ else {
395
+ items = result.items;
396
+ totalCount = result.totalCount;
397
+ }
398
+ if (_this.dataSourceSuccessCallback) {
399
+ if (!_this.loadOnInit) {
400
+ _this.dataSourceSuccessCallback([], 0);
401
+ }
402
+ else {
403
+ _this.dataSourceSuccessCallback(items, totalCount);
404
+ }
405
+ }
406
+ else {
407
+ if (!_this.loadOnInit && _this.gridApi !== undefined) {
408
+ _this.gridApi.setRowData([]);
409
+ }
410
+ else if (_this.gridApi !== undefined) {
411
+ _this.gridApi.setRowData(items);
412
+ }
413
+ }
414
+ _this.gridSelectRow();
415
+ });
416
+ this.dataSource.onFetchStart.subscribe(function () {
417
+ _this.showLoading();
418
+ });
419
+ if (this.searchInput) {
420
+ this.searchInput.onValueChanged.subscribe(function (c) {
421
+ _this.searchText = c.value;
422
+ });
423
+ }
424
+ //
425
+ this.cdr.detectChanges();
426
+ };
427
+ AXDataGridComponent.prototype.mapColumns = function () {
428
+ this.columnDefs = this.columns.map(function (c) { return c.render(); });
429
+ // if (this.showRowNumber) {
430
+ // this.columnDefs.push({
431
+ // headerName: AXConfig.get('layout.rtl') ? 'ردیف' : 'Row',
432
+ // valueGetter: 'node.rowIndex + 1',
433
+ // pinned: AXConfig.get('layout.rtl') ? 'right' : 'left'
434
+ // });
435
+ // }
436
+ if (this.gridDetailTemplate) {
437
+ if (this.columnDefs[0].checkboxSelection === true && this.columnDefs[0].field === '') {
438
+ this.columnDefs[1].cellRenderer = 'agGroupCellRenderer';
439
+ }
440
+ else {
441
+ this.columnDefs[0].cellRenderer = 'agGroupCellRenderer';
442
+ }
443
+ }
444
+ if (this.hasChildField === 'null') {
445
+ var groupColumn = this.columnDefs.find(function (c) { return c.rowGroupIndex === undefined && c.field !== ''; });
446
+ if (groupColumn && this.groupHideOpenParents == false) {
447
+ this.autoGroupColumnDef = {
448
+ headerName: groupColumn.headerName,
449
+ width: groupColumn.width,
450
+ cellRendererParams: { checkbox: this.showCheckBox },
451
+ field: groupColumn.field
452
+ };
453
+ // groupColumn.hide = true;
454
+ }
455
+ }
456
+ this.columnDefs.forEach(function (elm) {
457
+ if (elm.rowGroupIndex > -1) {
458
+ elm.hide = true;
459
+ }
460
+ });
461
+ };
462
+ AXDataGridComponent.prototype.displayedColumnsChanged = function (e) {
463
+ if (this.hasChildField === 'null') {
464
+ var ee = e.columnApi.getAllDisplayedColumnGroups();
465
+ var eee = ee.find(function (c) { return c.colId !== 'ag-Grid-AutoColumn' && c.colId !== '0'; });
466
+ if (eee && eee.colId) {
467
+ this.autoGroupColumnDef = {
468
+ headerName: eee.colDef.headerName,
469
+ width: eee.colDef.width,
470
+ cellRendererParams: { checkbox: this.showCheckBox },
471
+ field: eee.colDef.field
472
+ };
473
+ }
474
+ // eee.hide = true;
475
+ }
476
+ };
477
+ AXDataGridComponent.prototype.refresh = function (route) {
478
+ if (route === void 0) { route = []; }
479
+ if (this.remoteOperation && this.gridApi !== undefined) {
480
+ // this.gridApi.purgeServerSideCache(route);
481
+ this.gridApi.setServerSideDatasource(this.intenalGridDataSource);
482
+ }
483
+ else {
484
+ // TODO : check fetch param
485
+ this.dataSource.fetch(null);
486
+ }
487
+ };
488
+ AXDataGridComponent.prototype.internalGridCellClicked = function (e) {
489
+ this.cellClick.emit({ data: this.mapCellEvent(e), component: this, htmlElement: this.ref.nativeElement });
490
+ };
491
+ AXDataGridComponent.prototype.internalGridCellDoubleClicked = function (e) {
492
+ this.cellDbClick.emit({ data: this.mapCellEvent(e), component: this, htmlElement: this.ref.nativeElement });
493
+ };
494
+ AXDataGridComponent.prototype.internalGridCellFocused = function (e) {
495
+ this.cellFocuse.emit({ data: this.mapCellEvent(e), htmlElement: this.ref.nativeElement, component: this });
496
+ };
497
+ AXDataGridComponent.prototype.internalGridRowClicked = function (e) {
498
+ if (!e.node.group) {
499
+ this.rowClick.emit({ data: this.mapRowEvent(e), component: this, htmlElement: this.ref.nativeElement });
500
+ }
501
+ };
502
+ AXDataGridComponent.prototype.internalGridRowDoubleClicked = function (e) {
503
+ if (!e.node.group) {
504
+ this.rowDbClick.emit({ data: this.mapRowEvent(e), htmlElement: this.ref.nativeElement, component: this });
505
+ }
506
+ };
507
+ AXDataGridComponent.prototype.differenceOf2Arrays = function (array1, array2) {
508
+ var temp = [];
509
+ for (var i in array1) {
510
+ if (array2.indexOf(array1[i]) === -1) {
511
+ temp.push(array1[i]);
512
+ }
513
+ }
514
+ for (var i in array2) {
515
+ if (array1.indexOf(array2[i]) === -1) {
516
+ temp.push(array2[i]);
517
+ }
518
+ }
519
+ return temp.sort(function (a, b) { return a - b; });
520
+ };
521
+ AXDataGridComponent.prototype.rowSelectionChanged = function (e) {
522
+ var _this = this;
523
+ // debugger;
524
+ // this.gridApi.forEachNode((node) => {
525
+ // if (node.data[this.keyField] == e.node.data[this.keyField]) {
526
+ // node.setSelected(e.node.selected);
527
+ // }
528
+ // });
529
+ if (e.node.selected == true) {
530
+ this.selectRow.push(e.data);
531
+ }
532
+ else {
533
+ this.selectRow = this.selectRow.filter(function (c) { return c[_this.keyField] != e.data[_this.keyField]; });
534
+ }
535
+ this.rowSelectionChange.emit({ component: this, data: e, htmlElement: this.ref.nativeElement });
536
+ // console.log('e', e);
537
+ // console.log('select', e.node.selected);
538
+ // console.log('index', e.rowIndex);
539
+ };
540
+ AXDataGridComponent.prototype.internalGridSelectionChanged = function (e) {
541
+ var args = { items: [] };
542
+ var oldNodes = this.oldSelectionNodes;
543
+ var nodes = this.gridApi.getSelectedNodes();
544
+ nodes.forEach(function (i) {
545
+ args.items.push({
546
+ rowLevel: i.level,
547
+ rowIndex: i.rowIndex,
548
+ data: i.data
549
+ });
550
+ });
551
+ this.selectionChanged.emit({ data: args, component: this, htmlElement: this.ref.nativeElement });
552
+ var action = nodes.length > oldNodes.length ? true : false;
553
+ var node = this.differenceOf2Arrays(nodes, oldNodes);
554
+ this.onRowSelectionChanged.emit({ component: this, selected: action, data: node, htmlElement: this.ref.nativeElement });
555
+ this.oldSelectionNodes = nodes;
556
+ };
557
+ AXDataGridComponent.prototype.mapCellEvent = function (e) {
558
+ return {
559
+ rowLevel: 0,
560
+ column: e.column,
561
+ data: e.data,
562
+ rowIndex: e.rowIndex,
563
+ value: e.value
564
+ };
565
+ };
566
+ AXDataGridComponent.prototype.mapRowEvent = function (e) {
567
+ return {
568
+ rowLevel: 0,
569
+ data: e.data,
570
+ rowIndex: e.rowIndex
571
+ };
572
+ };
573
+ AXDataGridComponent.prototype.deselectAll = function () {
574
+ this.gridApi.deselectAll();
575
+ };
576
+ AXDataGridComponent.prototype.showLoading = function () {
577
+ if (this.gridApi) {
578
+ this.gridApi.showLoadingOverlay();
579
+ }
580
+ };
581
+ AXDataGridComponent.prototype.hideLoading = function () {
582
+ if (this.gridApi) {
583
+ this.gridApi.hideOverlay();
584
+ }
585
+ };
586
+ AXDataGridComponent.prototype.internalGridSizeChanged = function (e) {
587
+ if (e.clientWidth > 0 && e.clientHeight > 0) {
588
+ this.performSizeColumnsToFit(e.api);
589
+ }
590
+ };
591
+ AXDataGridComponent.prototype.internalGridFirstDataRendered = function (e) {
592
+ this.performSizeColumnsToFit(e.api);
593
+ };
594
+ AXDataGridComponent.prototype.performSizeColumnsToFit = function (api) {
595
+ if (this.sizeColumnsToFit) {
596
+ api.sizeColumnsToFit();
597
+ }
598
+ };
599
+ AXDataGridComponent.ctorParameters = function () { return [
600
+ { type: ElementRef },
601
+ { type: ChangeDetectorRef }
602
+ ]; };
603
+ __decorate([
604
+ Input(),
605
+ __metadata("design:type", Boolean)
606
+ ], AXDataGridComponent.prototype, "remoteOperation", void 0);
607
+ __decorate([
608
+ Input(),
609
+ __metadata("design:type", Boolean)
610
+ ], AXDataGridComponent.prototype, "rowMultiSelectWithClick", void 0);
611
+ __decorate([
612
+ Input(),
613
+ __metadata("design:type", Boolean)
614
+ ], AXDataGridComponent.prototype, "suppressRowClickSelection", void 0);
615
+ __decorate([
616
+ Input(),
617
+ __metadata("design:type", Boolean)
618
+ ], AXDataGridComponent.prototype, "suppressCellSelection", void 0);
619
+ __decorate([
620
+ Input(),
621
+ __metadata("design:type", Boolean)
622
+ ], AXDataGridComponent.prototype, "sizeColumnsToFit", void 0);
623
+ __decorate([
624
+ Input(),
625
+ __metadata("design:type", Boolean)
626
+ ], AXDataGridComponent.prototype, "showCheckBox", void 0);
627
+ __decorate([
628
+ Input(),
629
+ __metadata("design:type", Boolean)
630
+ ], AXDataGridComponent.prototype, "floatingFilter", void 0);
631
+ __decorate([
632
+ Input(),
633
+ __metadata("design:type", Number)
634
+ ], AXDataGridComponent.prototype, "takeCount", void 0);
635
+ __decorate([
636
+ Input(),
637
+ __metadata("design:type", String)
638
+ ], AXDataGridComponent.prototype, "selectionMode", void 0);
639
+ __decorate([
640
+ Input(),
641
+ __metadata("design:type", Array)
642
+ ], AXDataGridComponent.prototype, "selectRow", void 0);
643
+ __decorate([
644
+ Input(),
645
+ __metadata("design:type", String)
646
+ ], AXDataGridComponent.prototype, "rowGroupPanelShow", void 0);
647
+ __decorate([
648
+ Input(),
649
+ __metadata("design:type", Boolean)
650
+ ], AXDataGridComponent.prototype, "loadOnInit", void 0);
651
+ __decorate([
652
+ Input(),
653
+ __metadata("design:type", String)
654
+ ], AXDataGridComponent.prototype, "keyField", void 0);
655
+ __decorate([
656
+ Input(),
657
+ __metadata("design:type", String)
658
+ ], AXDataGridComponent.prototype, "hasChildField", void 0);
659
+ __decorate([
660
+ Input(),
661
+ __metadata("design:type", String),
662
+ __metadata("design:paramtypes", [String])
663
+ ], AXDataGridComponent.prototype, "searchText", null);
664
+ __decorate([
665
+ Input(),
666
+ __metadata("design:type", Array),
667
+ __metadata("design:paramtypes", [Array])
668
+ ], AXDataGridComponent.prototype, "filter", null);
669
+ __decorate([
670
+ ContentChildren(AXGridDataColumn),
671
+ __metadata("design:type", QueryList)
672
+ ], AXDataGridComponent.prototype, "_inlineColumns", void 0);
673
+ __decorate([
674
+ Output(),
675
+ __metadata("design:type", EventEmitter)
676
+ ], AXDataGridComponent.prototype, "columnsChange", void 0);
677
+ __decorate([
678
+ Input(),
679
+ __metadata("design:type", Array),
680
+ __metadata("design:paramtypes", [Array])
681
+ ], AXDataGridComponent.prototype, "columns", null);
682
+ __decorate([
683
+ Input(),
684
+ __metadata("design:type", Object)
685
+ ], AXDataGridComponent.prototype, "rowHeight", void 0);
686
+ __decorate([
687
+ ContentChild(AXToolbarSearchComponent, { static: true }),
688
+ __metadata("design:type", AXToolbarSearchComponent)
689
+ ], AXDataGridComponent.prototype, "searchInput", void 0);
690
+ __decorate([
691
+ ContentChild(AXToolbarComponent, { static: true }),
692
+ __metadata("design:type", AXToolbarComponent)
693
+ ], AXDataGridComponent.prototype, "toolbar", void 0);
694
+ __decorate([
695
+ ContentChild(AXDataGridRowTemplateComponent, { static: true }),
696
+ __metadata("design:type", AXDataGridRowTemplateComponent)
697
+ ], AXDataGridComponent.prototype, "rowTemplate", void 0);
698
+ __decorate([
699
+ ContentChild(AXDataGridDetailTemplateComponent, { static: true }),
700
+ __metadata("design:type", AXDataGridDetailTemplateComponent)
701
+ ], AXDataGridComponent.prototype, "gridDetailTemplate", void 0);
702
+ __decorate([
703
+ ContentChild(AXDataSourceComponent, { static: true }),
704
+ __metadata("design:type", AXDataSourceComponent)
705
+ ], AXDataGridComponent.prototype, "_contentDataSource", void 0);
706
+ __decorate([
707
+ Input(),
708
+ __metadata("design:type", AXDataSourceComponent),
709
+ __metadata("design:paramtypes", [AXDataSourceComponent])
710
+ ], AXDataGridComponent.prototype, "dataSource", null);
711
+ __decorate([
712
+ Input(),
713
+ __metadata("design:type", Boolean)
714
+ ], AXDataGridComponent.prototype, "groupHideOpenParents", void 0);
715
+ __decorate([
716
+ Output(),
717
+ __metadata("design:type", EventEmitter)
718
+ ], AXDataGridComponent.prototype, "cellClick", void 0);
719
+ __decorate([
720
+ Output(),
721
+ __metadata("design:type", EventEmitter)
722
+ ], AXDataGridComponent.prototype, "cellDbClick", void 0);
723
+ __decorate([
724
+ Output(),
725
+ __metadata("design:type", EventEmitter)
726
+ ], AXDataGridComponent.prototype, "cellFocuse", void 0);
727
+ __decorate([
728
+ Output(),
729
+ __metadata("design:type", EventEmitter)
730
+ ], AXDataGridComponent.prototype, "rowClick", void 0);
731
+ __decorate([
732
+ Output(),
733
+ __metadata("design:type", EventEmitter)
734
+ ], AXDataGridComponent.prototype, "rowDbClick", void 0);
735
+ __decorate([
736
+ Output(),
737
+ __metadata("design:type", EventEmitter)
738
+ ], AXDataGridComponent.prototype, "selectionChanged", void 0);
739
+ __decorate([
740
+ Output(),
741
+ __metadata("design:type", EventEmitter)
742
+ ], AXDataGridComponent.prototype, "rowSelectionChange", void 0);
743
+ __decorate([
744
+ Output(),
745
+ __metadata("design:type", EventEmitter)
746
+ ], AXDataGridComponent.prototype, "onRowSelectionChanged", void 0);
747
+ __decorate([
748
+ Input(),
749
+ __metadata("design:type", Function)
750
+ ], AXDataGridComponent.prototype, "rowClass", void 0);
751
+ __decorate([
752
+ Input(),
753
+ __metadata("design:type", Boolean)
754
+ ], AXDataGridComponent.prototype, "rtl", void 0);
755
+ AXDataGridComponent = __decorate([
756
+ Component({
757
+ selector: 'ax-data-grid',
758
+ template: "<div class=\"ax-grid-toolbar\" *ngIf=\"toolbar\">\n <ng-content select=\"ax-toolbar\"></ng-content>\n</div>\n<!-- [enableSorting]=\"true\" [enableColResize]=\"true\" [enableFilter]=\"allowFiltering\" -->\n<ag-grid-angular *ngIf=\"gridView\" class=\"ag-theme-balham\" [getRowClass]=\"internalGetRowClass\"\n [style.height]=\"internalHeight\" [columnDefs]=\"columnDefs\" [enableRtl]=\"rtl\" [pagination]=\"true\"\n [rowGroupPanelShow]=\"rowGroupPanelShow\" [rowModelType]=\"rowModelType\" [detailRowHeight]=\"detailRowHeight\"\n [getRowHeight]=\"getRowHeight\" [paginationAutoPageSize]=\"true\" [suppressMenuHide]=\"true\"\n [frameworkComponents]=\"frameworkComponents\" [isFullWidthCell]=\"isFullWidthCell\" [rowSelection]=\"selectionMode\"\n [rowMultiSelectWithClick]=\"rowMultiSelectWithClick\" [fullWidthCellRendererFramework]=\"fullWidthCellRendererFramework\"\n [fullWidthCellRendererParams]=\"fullWidthCellRendererParams\" (cellClicked)=\"internalGridCellClicked($event)\"\n (cellDoubleClicked)=\"internalGridCellDoubleClicked($event)\" (cellFocused)=\"internalGridCellFocused($event)\"\n (rowClicked)=\"internalGridRowClicked($event)\" (selectionChanged)=\"internalGridSelectionChanged($event)\"\n (rowSelected)=\"rowSelectionChanged($event)\" (rowDoubleClicked)=\"internalGridRowDoubleClicked($event)\"\n (gridReady)=\"internalGridReady($event)\" [groupSelectsChildren]=\"groupSelectsChildren\"\n [suppressRowClickSelection]=\"suppressRowClickSelection\" [groupSelectsFiltered]=\"true\"\n [suppressCellSelection]=\"suppressCellSelection\" [autoGroupColumnDef]=\"autoGroupColumnDef\"\n [suppressAggFuncInHeader]=\"true\" [treeData]=\"treeData\" [animateRows]=\"true\" [isServerSideGroup]=\"isServerSideGroup\"\n [getServerSideGroupKey]=\"getServerSideGroupKey\" [masterDetail]=\"masterDetail\"\n [detailCellRendererParams]=\"detailCellRendererParams\" [detailCellRenderer]=\"detailCellRenderer\"\n (gridSizeChanged)=\"internalGridSizeChanged($event)\" (firstDataRendered)=\"internalGridFirstDataRendered($event)\"\n [localeText]=\"localeText\" [groupHideOpenParents]=\"groupHideOpenParents\" [enableRangeSelection]=\"true\"\n [enableRangeSelection]=\"false\" [allowContextMenuWithControlKey]=\"false\" [getMainMenuItems]=\"getMainMenuItems\">\n</ag-grid-angular>\n\n<!-- (displayedColumnsChanged)=\"displayedColumnsChanged($event)\" -->",
759
+ encapsulation: ViewEncapsulation.None
760
+ // changeDetection: ChangeDetectionStrategy.OnPush
761
+ }),
762
+ __metadata("design:paramtypes", [ElementRef, ChangeDetectorRef])
763
+ ], AXDataGridComponent);
764
+ return AXDataGridComponent;
765
+ }());
766
+ export { AXDataGridComponent };
767
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFjb3JleC9kYXRhLWdyaWQvIiwic291cmNlcyI6WyJsaWIvZGF0YS1ncmlkL2RhdGFncmlkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLGVBQWUsRUFDZixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQWE5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2xELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0csT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXhDLGNBQWMsQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHO0lBQ3pDLDZDQUE2QztBQUMvQyxDQUFDLENBQUM7QUFFRixpRUFBaUU7QUFDakUsa0JBQWtCO0FBQ2xCLElBQUk7QUFFSjtJQUFrRCxnREFBZ0M7SUFBbEY7O0lBRUEsQ0FBQztJ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O2tDQUM5QyxpQ0FBaUM7bUVBQUM7SUFHdEQ7UUFEQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7a0NBQzFCLHFCQUFxQjttRUFBQztJQUtsRDtRQURDLEtBQUssRUFBRTtrQ0FLaUIscUJBQXFCO3lDQUFyQixxQkFBcUI7eURBRjdDO0lBT0Q7UUFEQyxLQUFLLEVBQUU7O3FFQUM4QjtJQUd0QztRQURDLE1BQU0sRUFBRTtrQ0FDRSxZQUFZOzBEQUFnRTtJQUd2RjtRQURDLE1BQU0sRUFBRTtrQ0FDSSxZQUFZOzREQUFnRTtJQUd6RjtRQURDLE1BQU0sRUFBRTtrQ0FDRyxZQUFZOzJEQUFnRTtJQUd4RjtRQURDLE1BQU0sRUFBRTtrQ0FDQyxZQUFZO3lEQUFzRTtJQUc1RjtRQURDLE1BQU0sRUFBRTtrQ0FDRyxZQUFZOzJEQUFzRTtJQUc5RjtRQURDLE1BQU0sRUFBRTtrQ0FDUyxZQUFZO2lFQUFzRjtJQUdwSDtRQURDLE1BQU0sRUFBRTtrQ0FDVyxZQUFZO21FQUFzRjtJQUd0SDtRQURDLE1BQU0sRUFBRTtrQ0FDYyxZQUFZO3NFQUE0RjtJQWUvSDtRQURDLEtBQUssRUFBRTs7eURBQzBFO0lBR2xGO1FBREMsS0FBSyxFQUFFOztvREFDa0M7SUE5TS9CLG1CQUFtQjtRQU4vQixTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsY0FBYztZQUN4Qix3MEVBQXdDO1lBQ3hDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO1lBQ3JDLGtEQUFrRDtTQUNuRCxDQUFDO3lDQWlOeUIsVUFBVSxFQUFlLGlCQUFpQjtPQWhOeEQsbUJBQW1CLENBNm9CL0I7SUFBRCwwQkFBQztDQUFBLEFBN29CRCxJQTZvQkM7U0E3b0JZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBJbnB1dCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBFbGVtZW50UmVmLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWERhdGFTb3VyY2VDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQVhHcmlkRGF0YUNvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgR3JpZE9wdGlvbnMsXG4gIENlbGxDbGlja2VkRXZlbnQsXG4gIFJvd0NsaWNrZWRFdmVudCxcbiAgQ2VsbEV2ZW50LFxuICBSb3dFdmVudCxcbiAgRmlyc3REYXRhUmVuZGVyZWRFdmVudCxcbiAgR3JpZFNpemVDaGFuZ2VkRXZlbnQsXG4gIEdyaWRBcGlcbn0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuXG5pbXBvcnQgeyBMaWNlbnNlTWFuYWdlciB9IGZyb20gJ2FnLWdyaWQtZW50ZXJwcmlzZSc7XG5pbXBvcnQgeyBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhHcmlkQ2VsbEV2ZW50LCBBWEdyaWRSb3dFdmVudCwgQVhHcmlkUm93U2VsZWN0aW9uRXZlbnQsIEFYR3JpZFJvd1BhcmFtcyB9IGZyb20gJy4vZGF0YWdyaWQuZXZlbnRzJztcblxuaW1wb3J0IHsgQVhEYXRhR3JpZFJvd1RlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi90ZW1wbGF0ZXMvcm93LXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFRvb2xiYXJTZWFyY2hDb21wb25lbnQsIEFYVG9vbGJhckNvbXBvbmVudCwgQVhEYXRhRXZlbnQsIEFYVmFsdWVFdmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWERhdGFHcmlkRGV0YWlsVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL3RlbXBsYXRlcy9kZXRhaWwtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IEFYVHJhbnNsYXRvciB9IGZyb20gJ0BhY29yZXgvY29yZSc7XG5pbXBvcnQgeyBBWERhdGVQaWNrZXJGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbHVtbnMvZGF0ZS1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IEFYQ29uZmlnIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcblxuTGljZW5zZU1hbmFnZXIucHJvdG90eXBlLnZhbGlkYXRlTGljZW5zZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy9jb25zb2xlLmluZm8oJ0NyYWNrZWQgYnkgQXJhc2ggT3Nobm91ZGkhJyk7XG59O1xuXG4vLyBXYXRlcm1hcmtDb21wLnByb3RvdHlwZS5zaG91bGREaXNwbGF5V2F0ZXJtYXJrID0gZnVuY3Rpb24gKCkge1xuLy8gICByZXR1cm4gZmFsc2U7XG4vLyB9XG5cbmV4cG9ydCBjbGFzcyBBWERhdGFHcmlkQ29sdW1uc0NoYW5nZUV2ZW50IGV4dGVuZHMgQVhWYWx1ZUV2ZW50PEFYR3JpZERhdGFDb2x1bW5bXT4ge1xuICBjb21wb25lbnQ6IEFYRGF0YUdyaWRDb21wb25lbnQ7XG59XG5leHBvcnQgY2xhc3MgQVhEYXRhR3JpZENlbGxFdmVudCBleHRlbmRzIEFYRGF0YUV2ZW50PEFYR3JpZENlbGxFdmVudD4ge1xuICBjb21wb25lbnQ6IEFYRGF0YUdyaWRDb21wb25lbnQ7XG59XG5leHBvcnQgY2xhc3MgQVhEYWFncmlkUm93Q2xpY2tFdmVudCBleHRlbmRzIEFYRGF0YUV2ZW50PEFYR3JpZFJvd0V2ZW50PiB7XG4gIGNvbXBvbmVudDogQVhEYXRhR3JpZENvbXBvbmVudDtcbn1cblxuZXhwb3J0IGNsYXNzIEFYRGF0YUdyaWRTZWxlY3Rpb25DaGFuZ2VFdmVudCBleHRlbmRzIEFYRGF0YUV2ZW50PEFYR3JpZFJvd1NlbGVjdGlvbkV2ZW50PiB7XG4gIGNvbXBvbmVudDogQVhEYXRhR3JpZENvbXBvbmVudDtcbn1cblxuZXhwb3J0IGNsYXNzIEFYRGF0YUdyaWRSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudCBleHRlbmRzIEFYRGF0YUV2ZW50PGFueT4ge1xuICBjb21wb25lbnQ6IEFYRGF0YUdyaWRDb21wb25lbnQ7XG4gIHNlbGVjdGVkOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1kYXRhLWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YWdyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG4gIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEFYRGF0YUdyaWRDb21wb25lbnQge1xuICBwcml2YXRlIGdyaWRBcGk7XG4gIHByaXZhdGUgZGF0YVNvdXJjZVN1Y2Nlc3NDYWxsYmFjaztcbiAgbG9jYWxlVGV4dDogYW55O1xuXG4gIGdyaWRPcHRpb25zOiBHcmlkT3B0aW9ucztcbiAgY29sdW1uRGVmczogYW55W10gPSBbXTtcbiAgcm93TW9kZWxUeXBlID0gJ2NsaWVudFNpZGUnO1xuICBmdWxsV2lkdGhDZWxsUmVuZGVyZXJGcmFtZXdvcms6IGFueTtcbiAgZnVsbFdpZHRoQ2VsbFJlbmRlcmVyUGFyYW1zOiBhbnk7XG4gIGZyYW1ld29ya0NvbXBvbmVudHM6IGFueSA9IHt9O1xuICBpc0Z1bGxXaWR0aENlbGw6IEZ1bmN0aW9uO1xuICBpbnRlcm5hbEhlaWdodDogc3RyaW5nID0gJzEwMCUnO1xuICBkZXRhaWxDZWxsUmVuZGVyZXI6IGFueTtcbiAgZGV0YWlsQ2VsbFJlbmRlcmVyUGFyYW1zOiBhbnk7XG4gIGRldGFpbFJvd0hlaWdodDogbnVtYmVyO1xuICBtYXN0ZXJEZXRhaWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdHJlZURhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZW5hYmVsU2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gIGdyaWRWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gIGdyb3VwU2VsZWN0c0NoaWxkcmVuOiBib29sZWFuID0gZmFsc2U7XG4gIG9sZFNlbGVjdGlvbk5vZGVzOiBhbnlbXSA9IFtdO1xuXG4gIC8vIEBJbnB1dCgpXG4gIC8vIHNob3dSb3dOdW1iZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByZW1vdGVPcGVyYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgcm93TXVsdGlTZWxlY3RXaXRoQ2xpY2s6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc3VwcHJlc3NDZWxsU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNpemVDb2x1bW5zVG9GaXQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHNob3dDaGVja0JveDogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgZmxvYXRpbmdGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICB0YWtlQ291bnQ6IG51bWJlcjtcblxuICBhdXRvR3JvdXBDb2x1bW5EZWY6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgpXG4gIHNlbGVjdGlvbk1vZGU6ICdzaW5nbGUnIHwgJ211bHRpcGxlJyA9ICdzaW5nbGUnO1xuXG4gIC8vIEBJbnB1dCgpXG4gIC8vIGFsbG93RmlsdGVyaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2VsZWN0Um93OiBhbnlbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHJvd0dyb3VwUGFuZWxTaG93OiAnYWx3YXlzJyB8ICduZXZlcicgPSAnbmV2ZXInO1xuXG4gIEBJbnB1dCgpXG4gIGxvYWRPbkluaXQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIEBJbnB1dCgpXG4gIC8vIGdyb3VwRGVmYXVsdEV4cGFuZGVkOiBudW1iZXIgPSAwO1xuXG4gIEBJbnB1dCgpXG4gIGtleUZpZWxkOiBzdHJpbmcgPSAnbnVsbCc7XG5cbiAgQElucHV0KClcbiAgaGFzQ2hpbGRGaWVsZDogc3RyaW5nID0gJ251bGwnO1xuXG4gIHByaXZhdGUgX3NlYXJjaFRleHQ6IHN0cmluZztcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBzZWFyY2hUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFRleHQ7XG4gIH1cbiAgcHVibGljIHNldCBzZWFyY2hUZXh0KHY6IHN0cmluZykge1xuICAgIGlmICh2ICE9PSB0aGlzLl9zZWFyY2hUZXh0KSB7XG4gICAgICB0aGlzLl9zZWFyY2hUZXh0ID0gdjtcbiAgICAgIGlmICh0aGlzLmdyaWRBcGkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRRdWlja0ZpbHRlcih0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ZpbHRlcjogYW55W107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgZmlsdGVyKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyO1xuICB9XG4gIHB1YmxpYyBzZXQgZmlsdGVyKHY6IGFueVtdKSB7XG4gICAgaWYgKHYgIT09IHRoaXMuX2ZpbHRlcikge1xuICAgICAgdGhpcy5fZmlsdGVyID0gdjtcbiAgICAgIHRoaXMuX2ZpbHRlci5mb3JFYWNoKChmKSA9PiB7XG4gICAgICAgIGNvbnN0IGZjID0gdGhpcy5ncmlkQXBpLmdldEZpbHRlckluc3RhbmNlKGYuZmllbGQpO1xuICAgICAgICBpZiAoZmMpIHtcbiAgICAgICAgICBjb25zdCBmZiA9IGZjLmdldEZyYW1ld29ya0NvbXBvbmVudEluc3RhbmNlKCk7XG4gICAgICAgICAgZmYuc2V0TW9kZWwoZik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBDb250ZW50Q2hpbGRyZW4oQVhHcmlkRGF0YUNvbHVtbilcbiAgcHJpdmF0ZSBfaW5saW5lQ29sdW1uczogUXVlcnlMaXN0PEFYR3JpZERhdGFDb2x1bW4+O1xuXG4gIEBPdXRwdXQoKVxuICBjb2x1bW5zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENvbHVtbnNDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDb2x1bW5zQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSBfY29sdW1uczogQVhHcmlkRGF0YUNvbHVtbltdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgY29sdW1ucygpOiBBWEdyaWREYXRhQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLl9pbmxpbmVDb2x1bW5zID8gWy4uLnRoaXMuX2NvbHVtbnMsIC4uLnRoaXMuX2lubGluZUNvbHVtbnMudG9BcnJheSgpXSA6IHRoaXMuX2NvbHVtbnM7XG4gIH1cblxuICBwdWJsaWMgc2V0IGNvbHVtbnModmFsOiBBWEdyaWREYXRhQ29sdW1uW10pIHtcbiAgICBpZiAodmFsICYmIHZhbC5sZW5ndGgpIHtcbiAgICAgIGxldCBvbGQgPSB0aGlzLl9jb2x1bW5zO1xuICAgICAgdGhpcy5fY29sdW1ucyA9IHZhbDtcbiAgICAgIHRoaXMuY29sdW1uc0NoYW5nZS5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCB2YWx1ZTogdmFsLCBvbGRWYWx1ZTogb2xkLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCB9KTtcbiAgICB9XG4gIH1cblxuICBkZWZhdWx0Q29sRGVmOiBhbnkgPSB7XG4gICAgZmlsdGVyOiB0cnVlLFxuICAgIGZsb2F0aW5nRmlsdGVyOiB0cnVlXG4gIH07XG5cbiAgQElucHV0KClcbiAgcm93SGVpZ2h0OiBhbnk7XG5cbiAgQENvbnRlbnRDaGlsZChBWFRvb2xiYXJTZWFyY2hDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHNlYXJjaElucHV0OiBBWFRvb2xiYXJTZWFyY2hDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZChBWFRvb2xiYXJDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHRvb2xiYXI6IEFYVG9vbGJhckNvbXBvbmVudDtcblxuICBAQ29udGVudENoaWxkKEFYRGF0YUdyaWRSb3dUZW1wbGF0ZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcm93VGVtcGxhdGU6IEFYRGF0YUdyaWRSb3dUZW1wbGF0ZUNvbXBvbmVudDtcblxuICBAQ29udGVudENoaWxkKEFYRGF0YUdyaWREZXRhaWxUZW1wbGF0ZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ3JpZERldGFpbFRlbXBsYXRlOiBBWERhdGFHcmlkRGV0YWlsVGVtcGxhdGVDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZChBWERhdGFTb3VyY2VDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgX2NvbnRlbnREYXRhU291cmNlOiBBWERhdGFTb3VyY2VDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfZGF0YVNvdXJjZTogQVhEYXRhU291cmNlQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgZGF0YVNvdXJjZSgpOiBBWERhdGFTb3VyY2VDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlID8gdGhpcy5fZGF0YVNvdXJjZSA6IHRoaXMuX2NvbnRlbnREYXRhU291cmNlO1xuICB9XG5cbiAgcHVibGljIHNldCBkYXRhU291cmNlKHY6IEFYRGF0YVNvdXJjZUNvbXBvbmVudCkge1xuICAgIHRoaXMuX2RhdGFTb3VyY2UgPSB2O1xuICB9XG5cbiAgQElucHV0KClcbiAgZ3JvdXBIaWRlT3BlblBhcmVudHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KClcbiAgY2VsbENsaWNrOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDZWxsRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGNlbGxEYkNsaWNrOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDZWxsRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGNlbGxGb2N1c2U6IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkQ2VsbEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxBWERhYWdyaWRSb3dDbGlja0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhEYWFncmlkUm93Q2xpY2tFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgcm93RGJDbGljazogRXZlbnRFbWl0dGVyPEFYRGFhZ3JpZFJvd0NsaWNrRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWERhYWdyaWRSb3dDbGlja0V2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICBzZWxlY3Rpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZFNlbGVjdGlvbkNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZFNlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICByb3dTZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkU2VsZWN0aW9uQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkU2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uUm93U2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudD4oKTtcblxuICBnZXRSb3dIZWlnaHQocGFyYW0pIHtcbiAgICBpZiAocGFyYW0uZGF0YSAmJiBwYXJhbS5kYXRhLnJvd0hlaWdodCAmJiBwYXJhbS5ub2RlLmxldmVsID09IDApIHtcbiAgICAgIHJldHVybiBwYXJhbS5kYXRhLnJvd0hlaWdodDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWFzdGVyRGV0YWlsID09IHRydWUgJiYgcGFyYW0ubm9kZS5sZXZlbCA9PSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZXRhaWxSb3dIZWlnaHQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1hc3RlckRldGFpbCA9PSBmYWxzZSAmJiBwYXJhbS5kYXRhICYmIHBhcmFtLmRhdGEucm93SGVpZ2h0KSB7XG4gICAgICByZXR1cm4gcGFyYW0uZGF0YS5yb3dIZWlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHJvd0NsYXNzPzogKHBhcmFtczogQVhHcmlkUm93UGFyYW1zKSA9PiAoc3RyaW5nIHwgc3RyaW5nW10pIHwgKHN0cmluZyB8IHN0cmluZ1tdKTtcblxuICBASW5wdXQoKVxuICBydGw6IGJvb2xlYW4gPSBBWENvbmZpZy5nZXQoJ2xheW91dC5ydGwnKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5sb2NhbGVUZXh0ID0gQVhUcmFuc2xhdG9yLmdldCgnZGF0YUdyaWQnKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0hlaWdodCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50b29sYmFyKSB7XG4gICAgICB0aGlzLmludGVybmFsSGVpZ2h0ID0gYGNhbGMoMTAwJSAtICR7NDB9cHgpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnRlcm5hbEhlaWdodCA9ICcxMDAlJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBpbnRlbmFsR3JpZERhdGFTb3VyY2UoKSB7XG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvd0NvdW50OiBudWxsLFxuICAgICAgZ2V0Um93czogKHBhcmFtcykgPT4ge1xuICAgICAgICAvLyB0aGF0LmdyaWRBcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLnNldFByb3BlcnR5KCdjYWNoZUJsb2NrU2l6ZScsIHRoaXMudGFrZUNvdW50ID8gdGhpcy50YWtlQ291bnQgOiBwYXJhbXMuYXBpLnBhZ2luYXRpb25HZXRQYWdlU2l6ZSgpKTtcbiAgICAgICAgdGhhdC5kYXRhU291cmNlU3VjY2Vzc0NhbGxiYWNrID0gcGFyYW1zLnN1Y2Nlc3NDYWxsYmFjaztcbiAgICAgICAgY29uc3QgbG9hZFBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xuICAgICAgICBsb2FkUGFyYW1zLnNlYXJjaFRleHQgPSB0aGF0LnNlYXJjaFRleHQ7XG4gICAgICAgIGxvYWRQYXJhbXMuc2tpcCA9IHBhcmFtcy5yZXF1ZXN0LnN0YXJ0Um93O1xuICAgICAgICAvLyAgbG9hZFBhcmFtcy50YWtlID0gcGFyYW1zLnJlcXVlc3QuZW5kUm93IC0gcGFyYW1zLnJlcXVlc3Quc3RhcnRSb3c7XG4gICAgICAgIGxvYWRQYXJhbXMudGFrZSA9IHRoYXQudGFrZUNvdW50ID8gdGhhdC50YWtlQ291bnQgOiBwYXJhbXMuYXBpLnBhZ2luYXRpb25HZXRQYWdlU2l6ZSgpICogMjtcbiAgICAgICAgbG9hZFBhcmFtcy5zb3J0ID0gcGFyYW1zLnJlcXVlc3Quc29ydE1vZGVsLm1hcCgoYykgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmaWVsZDogYy5jb2xJZCxcbiAgICAgICAgICAgIGRpcjogYy5zb3J0XG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGxvYWRQYXJhbXMuZ3JvdXBzID0gcGFyYW1zLnJlcXVlc3Qucm93R3JvdXBDb2xzLm1hcChyID0+IHIuZmllbGQpO1xuICAgICAgICAvLyBsb2FkUGFyYW1zLmdyb3VwS2V5cyA9IHBhcmFtcy5yZXF1ZXN0Lmdyb3VwS2V5cztcbiAgICAgICAgLy8gbG9hZFBhcmFtcy5kYXRhID0gcGFyYW1zLnBhcmVudE5vZGUuZGF0YTtcbiAgICAgICAgbG9hZFBhcmFtcy5ncm91cCA9IHtcbiAgICAgICAgICBmaWVsZHM6IHBhcmFtcy5yZXF1ZXN0LnJvd0dyb3VwQ29scy5tYXAoKHIpID0+IHIuZmllbGQpLFxuICAgICAgICAgIGtleXM6IHBhcmFtcy5yZXF1ZXN0Lmdyb3VwS2V5cyxcbiAgICAgICAgICBwYXJlbnREYXRhOiBwYXJhbXMucGFyZW50Tm9kZS5kYXRhXG4gICAgICAgIH07XG4gICAgICAgIGxvYWRQYXJhbXMuZmlsdGVyID0gcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWw7XG4gICAgICAgIHRoYXQuZGF0YVNvdXJjZS5mZXRjaChsb2FkUGFyYW1zKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGdldE1haW5NZW51SXRlbXMoZSkge1xuICAgIHJldHVybiBbJ3BpblN1Yk1lbnUnLCAnc2VwYXJhdG9yJ107XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmdyaWRBcGkuZGVzdHJveSgpO1xuICB9XG5cbiAgaXNTZXJ2ZXJTaWRlR3JvdXAgPSAoZSkgPT4ge1xuICAgIHJldHVybiBlW3RoaXMuaGFzQ2hpbGRGaWVsZF07XG4gIH07XG5cbiAgZ2V0U2VydmVyU2lkZUdyb3VwS2V5ID0gKGUpID0+IHtcbiAgICByZXR1cm4gZVt0aGlzLmtleUZpZWxkXTtcbiAgfTtcbiAgLy8gdG9kbyBncmlkT3B0aW9uczogR3JpZE9wdGlvbnNcbiAgaW50ZXJuYWxHcmlkUmVhZHkoZ3JpZE9wdGlvbnMpIHtcbiAgICBncmlkT3B0aW9ucy5hcGkuY2hlY2tHcmlkU2l6ZSgpO1xuICAgIHRoaXMudGFrZUNvdW50ID0gdGhpcy50YWtlQ291bnQgPyB0aGlzLnRha2VDb3VudCA6IGdyaWRPcHRpb25zLmFwaS5wYWdpbmF0aW9uR2V0UGFnZVNpemUoKSAqIDI7XG4gICAgdGhpcy50YWtlQ291bnQgPSB0aGlzLnRha2VDb3VudCA8IDIwID8gMjAgOiB0aGlzLnRha2VDb3VudDtcbiAgICBncmlkT3B0aW9ucy5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLnNldFByb3BlcnR5KCdjYWNoZUJsb2NrU2l6ZScsIHRoaXMudGFrZUNvdW50KTtcbiAgICB0aGlzLmdyaWRBcGkgPSBncmlkT3B0aW9ucy5hcGk7XG5cbiAgICB0aGlzLm1hcENvbHVtbnMoKTtcbiAgICB0aGlzLmNhbGNIZWlnaHQoKTtcblxuICAgIGlmICghdGhpcy5sb2FkT25Jbml0KSB7XG4gICAgICB0aGlzLmxvYWRPbkluaXQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xuICAgICAgdGhpcy5ncmlkQXBpLnNldFNlcnZlclNpZGVEYXRhc291cmNlKHRoaXMuaW50ZW5hbEdyaWREYXRhU291cmNlKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgaWYgKHRoaXMucm93VGVtcGxhdGUpIHtcbiAgICAgIHRoaXMuZnVsbFdpZHRoQ2VsbFJlbmRlcmVyRnJhbWV3b3JrID0gdGhpcy5yb3dUZW1wbGF0ZS5yZW5kZXJlcjtcbiAgICAgIHRoaXMuZnVsbFdpZHRoQ2VsbFJlbmRlcmVyUGFyYW1zID0gdGhpcy5yb3dUZW1wbGF0ZS5wYXJhbXM7XG4gICAgfVxuICAgIHRoaXMuZnJhbWV3b3JrQ29tcG9uZW50cy5hZ0RhdGVJbnB1dCA9IEFYRGF0ZVBpY2tlckZpbHRlckNvbXBvbmVudDtcblxuICAgIGlmICh0aGlzLmdyaWREZXRhaWxUZW1wbGF0ZSkge1xuICAgICAgdGhpcy5tYXN0ZXJEZXRhaWwgPSB0cnVlO1xuICAgICAgdGhpcy5kZXRhaWxDZWxsUmVuZGVyZXJQYXJhbXMgPSB0aGlzLmdyaWREZXRhaWxUZW1wbGF0ZS5wYXJhbXM7XG4gICAgICB0aGlzLmRldGFpbENlbGxSZW5kZXJlciA9ICdkZXRhaWxSZW5kZXJlckZyYW1ld29yayc7XG4gICAgICB0aGlzLmZyYW1ld29ya0NvbXBvbmVudHMuZGV0YWlsUmVuZGVyZXJGcmFtZXdvcmsgPSB0aGlzLmdyaWREZXRhaWxUZW1wbGF0ZS5yZW5kZXJlcjtcblxuICAgICAgdGhpcy5kZXRhaWxSb3dIZWlnaHQgPSB0aGlzLmdyaWREZXRhaWxUZW1wbGF0ZS5oZWlnaHQ7XG4gICAgfVxuICAgIHRoaXMuaXNGdWxsV2lkdGhDZWxsID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoYXQucm93VGVtcGxhdGUgIT0gbnVsbDtcbiAgICB9O1xuICAgIC8vdGhpcy5jZHJcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICB0aGlzLmdyb3VwU2VsZWN0c0NoaWxkcmVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmtleUZpZWxkICE9PSAnbnVsbCcgJiYgdGhpcy5oYXNDaGlsZEZpZWxkICE9PSAnbnVsbCcpIHtcbiAgICAgIHRoaXMucm93R3JvdXBQYW5lbFNob3cgPSAnbmV2ZXInO1xuICAgICAgdGhpcy50cmVlRGF0YSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xuICAgICAgdGhpcy5yb3dNb2RlbFR5cGUgPSAnc2VydmVyU2lkZSc7XG4gICAgfVxuICAgIC8vXG4gICAgaWYgKHRoaXMucnRsID09IG51bGwpIHtcbiAgICAgIHRoaXMucnRsID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnZGlyZWN0aW9uJykgPT09ICdydGwnO1xuICAgIH1cbiAgICAvL1xuICB9XG5cbiAgZ3JpZFNlbGVjdFJvdygpIHtcbiAgICBpZiAodGhpcy5ncmlkQXBpKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RSb3cgJiYgdGhpcy5zZWxlY3RSb3cubGVuZ3RoID4gMCAmJiB0aGlzLmdyaWRBcGkgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdGhpcy5zZWxlY3RSb3dbMF0gIT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhpcy5ncmlkQXBpLmZvckVhY2hOb2RlKChub2RlKSA9PiB7XG4gICAgICAgICAgaWYgKG5vZGUuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXQgc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFJvdy5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAobm9kZS5kYXRhW3RoaXMua2V5RmllbGRdID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHNlbGVjdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZChzZWxlY3QpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ncmlkQXBpLmZvckVhY2hOb2RlKChub2RlKSA9PiB7XG4gICAgICAgICAgaWYgKG5vZGUuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXQgc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFJvdy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpdGVtLnJvd0luZGV4ICE9IHVuZGVmaW5lZCAmJiBpdGVtLnJvd0xldmVsICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmRhdGFbdGhpcy5rZXlGaWVsZF0gPT09IGl0ZW0uZGF0YVt0aGlzLmtleUZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZGF0YVt0aGlzLmtleUZpZWxkXSA9PT0gaXRlbVt0aGlzLmtleUZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZChzZWxlY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuXG4gIC8vICAgLy9DYWxsZWQgYWZ0ZXIgZXZlcnkgY2hlY2sgb2YgdGhlIGNvbXBvbmVudCdzIHZpZXcuIEFwcGxpZXMgdG8gY29tcG9uZW50cyBvbmx5LlxuICAvLyAgIC8vQWRkICdpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQnIHRvIHRoZSBjbGFzcy5cbiAgLy8gICAvLyB0aGlzLnNlbGVjdEJ5VmFsdWVzKCk7XG4gIC8vICAgdGhpcy5lbmFiZWxTZWxlY3QgPSBmYWxzZTtcblxuICAvLyB9XG4gIHJlYnVpbGRHcmlkKCkge1xuICAgIHRoaXMubWFwQ29sdW1ucygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2l6ZUNvbHVtbnNUb0ZpdCkge1xuICAgICAgICB0aGlzLmdyaWRBcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xuICAgICAgfVxuICAgIH0sIDEwKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmVlRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5jb2x1bW5EZWZzID0gdGhpcy5jb2x1bW5zLm1hcCgoYykgPT4gYy5yZW5kZXIoKSk7XG5cbiAgICAgIGNvbnN0IGdyb3VwQ29sdW1uID0gdGhpcy5jb2x1bW5EZWZzLmZpbmQoKGMpID0+IGMucm93R3JvdXBJbmRleCA9PSAnMCcgJiYgYy5maWVsZCAhPT0gJycpO1xuXG4gICAgICB0aGlzLmF1dG9Hcm91cENvbHVtbkRlZiA9IHtcbiAgICAgICAgaGVhZGVyTmFtZTogZ3JvdXBDb2x1bW4uaGVhZGVyTmFtZSxcbiAgICAgICAgd2lkdGg6IGdyb3VwQ29sdW1uLndpZHRoLFxuICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHsgY2hlY2tib3g6IHRoaXMuc2hvd0NoZWNrQm94IH0sXG4gICAgICAgIGZpZWxkOiBncm91cENvbHVtbi5maWVsZFxuICAgICAgfTtcblxuICAgICAgdGhpcy5jb2x1bW5EZWZzLmZvckVhY2goKGVsbSkgPT4ge1xuICAgICAgICBpZiAoZWxtLnJvd0dyb3VwSW5kZXggPiAtMSkge1xuICAgICAgICAgIGVsbS5oaWRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vc2V0VGltZW91dCgoKSA9PiB7XG4gICAgdGhpcy5ncmlkVmlldyA9IHRydWU7XG4gICAgLy99KTtcblxuICAgIHRoaXMuZW5hYmVsU2VsZWN0ID0gdHJ1ZTtcbiAgICB0aGlzLmRhdGFTb3VyY2Uub25EYXRhUmVjZWl2ZWQuc3Vic2NyaWJlKChfZGF0YSkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gX2RhdGEuZGF0YS5yZXN1bHQ7XG4gICAgICB0aGlzLmhpZGVMb2FkaW5nKCk7XG4gICAgICBsZXQgaXRlbXM6IGFueVtdO1xuICAgICAgbGV0IHRvdGFsQ291bnQ6IG51bWJlcjtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgaXRlbXMgPSByZXN1bHQ7XG4gICAgICAgIHRvdGFsQ291bnQgPSByZXN1bHQubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbXMgPSByZXN1bHQuaXRlbXM7XG4gICAgICAgIHRvdGFsQ291bnQgPSByZXN1bHQudG90YWxDb3VudDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2VTdWNjZXNzQ2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvYWRPbkluaXQpIHtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VTdWNjZXNzQ2FsbGJhY2soW10sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZVN1Y2Nlc3NDYWxsYmFjayhpdGVtcywgdG90YWxDb3VudCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghdGhpcy5sb2FkT25Jbml0ICYmIHRoaXMuZ3JpZEFwaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5ncmlkQXBpLnNldFJvd0RhdGEoW10pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ3JpZEFwaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5ncmlkQXBpLnNldFJvd0RhdGEoaXRlbXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZ3JpZFNlbGVjdFJvdygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5kYXRhU291cmNlLm9uRmV0Y2hTdGFydC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5zaG93TG9hZGluZygpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQpIHtcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXQub25WYWx1ZUNoYW5nZWQuc3Vic2NyaWJlKChjKSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IGMudmFsdWU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy9cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBtYXBDb2x1bW5zKCkge1xuICAgIHRoaXMuY29sdW1uRGVmcyA9IHRoaXMuY29sdW1ucy5tYXAoKGMpID0+IGMucmVuZGVyKCkpO1xuXG4gICAgLy8gaWYgKHRoaXMuc2hvd1Jvd051bWJlcikge1xuICAgIC8vICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgIC8vICAgICBoZWFkZXJOYW1lOiBBWENvbmZpZy5nZXQoJ2xheW91dC5ydGwnKSA/ICfYsdiv24zZgScgOiAnUm93JyxcbiAgICAvLyAgICAgdmFsdWVHZXR0ZXI6ICdub2RlLnJvd0luZGV4ICsgMScsXG4gICAgLy8gICAgIHBpbm5lZDogQVhDb25maWcuZ2V0KCdsYXlvdXQucnRsJykgPyAncmlnaHQnIDogJ2xlZnQnXG4gICAgLy8gICB9KTtcbiAgICAvLyB9XG5cbiAgICBpZiAodGhpcy5ncmlkRGV0YWlsVGVtcGxhdGUpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbkRlZnNbMF0uY2hlY2tib3hTZWxlY3Rpb24gPT09IHRydWUgJiYgdGhpcy5jb2x1bW5EZWZzWzBdLmZpZWxkID09PSAnJykge1xuICAgICAgICB0aGlzLmNvbHVtbkRlZnNbMV0uY2VsbFJlbmRlcmVyID0gJ2FnR3JvdXBDZWxsUmVuZGVyZXInO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2x1bW5EZWZzWzBdLmNlbGxSZW5kZXJlciA9ICdhZ0dyb3VwQ2VsbFJlbmRlcmVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNDaGlsZEZpZWxkID09PSAnbnVsbCcpIHtcbiAgICAgIGNvbnN0IGdyb3VwQ29sdW1uID0gdGhpcy5jb2x1bW5EZWZzLmZpbmQoKGMpID0+IGMucm93R3JvdXBJbmRleCA9PT0gdW5kZWZpbmVkICYmIGMuZmllbGQgIT09ICcnKTtcbiAgICAgIGlmIChncm91cENvbHVtbiAmJiB0aGlzLmdyb3VwSGlkZU9wZW5QYXJlbnRzID09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuYXV0b0dyb3VwQ29sdW1uRGVmID0ge1xuICAgICAgICAgIGhlYWRlck5hbWU6IGdyb3VwQ29sdW1uLmhlYWRlck5hbWUsXG4gICAgICAgICAgd2lkdGg6IGdyb3VwQ29sdW1uLndpZHRoLFxuICAgICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczogeyBjaGVja2JveDogdGhpcy5zaG93Q2hlY2tCb3ggfSxcbiAgICAgICAgICBmaWVsZDogZ3JvdXBDb2x1bW4uZmllbGRcbiAgICAgICAgfTtcbiAgICAgICAgLy8gIGdyb3VwQ29sdW1uLmhpZGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29sdW1uRGVmcy5mb3JFYWNoKChlbG0pID0+IHtcbiAgICAgIGlmIChlbG0ucm93R3JvdXBJbmRleCA+IC0xKSB7XG4gICAgICAgIGVsbS5oaWRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGRpc3BsYXllZENvbHVtbnNDaGFuZ2VkKGUpIHtcbiAgICBpZiAodGhpcy5oYXNDaGlsZEZpZWxkID09PSAnbnVsbCcpIHtcbiAgICAgIGNvbnN0IGVlID0gZS5jb2x1bW5BcGkuZ2V0QWxsRGlzcGxheWVkQ29sdW1uR3JvdXBzKCk7XG4gICAgICBjb25zdCBlZWUgPSBlZS5maW5kKChjKSA9PiBjLmNvbElkICE9PSAnYWctR3JpZC1BdXRvQ29sdW1uJyAmJiBjLmNvbElkICE9PSAnMCcpO1xuICAgICAgaWYgKGVlZSAmJiBlZWUuY29sSWQpIHtcbiAgICAgICAgdGhpcy5hdXRvR3JvdXBDb2x1bW5EZWYgPSB7XG4gICAgICAgICAgaGVhZGVyTmFtZTogZWVlLmNvbERlZi5oZWFkZXJOYW1lLFxuICAgICAgICAgIHdpZHRoOiBlZWUuY29sRGVmLndpZHRoLFxuICAgICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczogeyBjaGVja2JveDogdGhpcy5zaG93Q2hlY2tCb3ggfSxcbiAgICAgICAgICBmaWVsZDogZWVlLmNvbERlZi5maWVsZFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgLy8gZWVlLmhpZGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJlZnJlc2gocm91dGU6IGFueVtdID0gW10pIHtcbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy5ncmlkQXBpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vICB0aGlzLmdyaWRBcGkucHVyZ2VTZXJ2ZXJTaWRlQ2FjaGUocm91dGUpO1xuICAgICAgdGhpcy5ncmlkQXBpLnNldFNlcnZlclNpZGVEYXRhc291cmNlKHRoaXMuaW50ZW5hbEdyaWREYXRhU291cmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETyA6IGNoZWNrIGZldGNoIHBhcmFtXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZmV0Y2gobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgaW50ZXJuYWxHcmlkQ2VsbENsaWNrZWQoZTogQ2VsbENsaWNrZWRFdmVudCkge1xuICAgIHRoaXMuY2VsbENsaWNrLmVtaXQoeyBkYXRhOiB0aGlzLm1hcENlbGxFdmVudChlKSwgY29tcG9uZW50OiB0aGlzLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCB9KTtcbiAgfVxuXG4gIGludGVybmFsR3JpZENlbGxEb3VibGVDbGlja2VkKGU6IENlbGxDbGlja2VkRXZlbnQpIHtcbiAgICB0aGlzLmNlbGxEYkNsaWNrLmVtaXQoeyBkYXRhOiB0aGlzLm1hcENlbGxFdmVudChlKSwgY29tcG9uZW50OiB0aGlzLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCB9KTtcbiAgfVxuXG4gIGludGVybmFsR3JpZENlbGxGb2N1c2VkKGU6IENlbGxDbGlja2VkRXZlbnQpIHtcbiAgICB0aGlzLmNlbGxGb2N1c2UuZW1pdCh7IGRhdGE6IHRoaXMubWFwQ2VsbEV2ZW50KGUpLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCwgY29tcG9uZW50OiB0aGlzIH0pO1xuICB9XG5cbiAgaW50ZXJuYWxHcmlkUm93Q2xpY2tlZChlOiBSb3dDbGlja2VkRXZlbnQpIHtcbiAgICBpZiAoIWUubm9kZS5ncm91cCkge1xuICAgICAgdGhpcy5yb3dDbGljay5lbWl0KHsgZGF0YTogdGhpcy5tYXBSb3dFdmVudChlKSwgY29tcG9uZW50OiB0aGlzLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCB9KTtcbiAgICB9XG4gIH1cblxuICBpbnRlcm5hbEdyaWRSb3dEb3VibGVDbGlja2VkKGU6IENlbGxDbGlja2VkRXZlbnQpIHtcbiAgICBpZiAoIWUubm9kZS5ncm91cCkge1xuICAgICAgdGhpcy5yb3dEYkNsaWNrLmVtaXQoeyBkYXRhOiB0aGlzLm1hcFJvd0V2ZW50KGUpLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCwgY29tcG9uZW50OiB0aGlzIH0pO1xuICAgIH1cbiAgfVxuXG4gIGRpZmZlcmVuY2VPZjJBcnJheXMoYXJyYXkxOiBhbnksIGFycmF5MjogYW55KSB7XG4gICAgY29uc3QgdGVtcCA9IFtdO1xuICAgIGZvciAoY29uc3QgaSBpbiBhcnJheTEpIHtcbiAgICAgIGlmIChhcnJheTIuaW5kZXhPZihhcnJheTFbaV0pID09PSAtMSkge1xuICAgICAgICB0ZW1wLnB1c2goYXJyYXkxW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBpIGluIGFycmF5Mikge1xuICAgICAgaWYgKGFycmF5MS5pbmRleE9mKGFycmF5MltpXSkgPT09IC0xKSB7XG4gICAgICAgIHRlbXAucHVzaChhcnJheTJbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGVtcC5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIH1cblxuICByb3dTZWxlY3Rpb25DaGFuZ2VkKGUpIHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICAvLyB0aGlzLmdyaWRBcGkuZm9yRWFjaE5vZGUoKG5vZGUpID0+IHtcbiAgICAvLyAgIGlmIChub2RlLmRhdGFbdGhpcy5rZXlGaWVsZF0gPT0gZS5ub2RlLmRhdGFbdGhpcy5rZXlGaWVsZF0pIHtcbiAgICAvLyAgICAgbm9kZS5zZXRTZWxlY3RlZChlLm5vZGUuc2VsZWN0ZWQpO1xuICAgIC8vICAgfVxuICAgIC8vIH0pO1xuICAgIGlmIChlLm5vZGUuc2VsZWN0ZWQgPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RSb3cucHVzaChlLmRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdFJvdyA9IHRoaXMuc2VsZWN0Um93LmZpbHRlcigoYykgPT4gY1t0aGlzLmtleUZpZWxkXSAhPSBlLmRhdGFbdGhpcy5rZXlGaWVsZF0pO1xuICAgIH1cbiAgICB0aGlzLnJvd1NlbGVjdGlvbkNoYW5nZS5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCBkYXRhOiBlLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCB9KTtcbiAgICAvLyBjb25zb2xlLmxvZygnZScsIGUpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzZWxlY3QnLCBlLm5vZGUuc2VsZWN0ZWQpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdpbmRleCcsIGUucm93SW5kZXgpO1xuICB9XG5cbiAgaW50ZXJuYWxHcmlkU2VsZWN0aW9uQ2hhbmdlZChlKSB7XG4gICAgY29uc3QgYXJnczogQVhHcmlkUm93U2VsZWN0aW9uRXZlbnQgPSB7IGl0ZW1zOiBbXSB9O1xuICAgIGNvbnN0IG9sZE5vZGVzID0gdGhpcy5vbGRTZWxlY3Rpb25Ob2RlcztcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuZ3JpZEFwaS5nZXRTZWxlY3RlZE5vZGVzKCk7XG4gICAgbm9kZXMuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgYXJncy5pdGVtcy5wdXNoKHtcbiAgICAgICAgcm93TGV2ZWw6IGkubGV2ZWwsXG4gICAgICAgIHJvd0luZGV4OiBpLnJvd0luZGV4LFxuICAgICAgICBkYXRhOiBpLmRhdGFcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHsgZGF0YTogYXJncywgY29tcG9uZW50OiB0aGlzLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCB9KTtcbiAgICBsZXQgYWN0aW9uID0gbm9kZXMubGVuZ3RoID4gb2xkTm9kZXMubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmRpZmZlcmVuY2VPZjJBcnJheXMobm9kZXMsIG9sZE5vZGVzKTtcbiAgICB0aGlzLm9uUm93U2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCBzZWxlY3RlZDogYWN0aW9uLCBkYXRhOiBub2RlLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCB9KTtcbiAgICB0aGlzLm9sZFNlbGVjdGlvbk5vZGVzID0gbm9kZXM7XG4gIH1cblxuICBwcml2YXRlIG1hcENlbGxFdmVudChlOiBDZWxsRXZlbnQpOiBBWEdyaWRDZWxsRXZlbnQge1xuICAgIHJldHVybiB7XG4gICAgICByb3dMZXZlbDogMCxcbiAgICAgIGNvbHVtbjogZS5jb2x1bW4sXG4gICAgICBkYXRhOiBlLmRhdGEsXG4gICAgICByb3dJbmRleDogZS5yb3dJbmRleCxcbiAgICAgIHZhbHVlOiBlLnZhbHVlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwUm93RXZlbnQoZTogUm93RXZlbnQpOiBBWEdyaWRSb3dFdmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvd0xldmVsOiAwLFxuICAgICAgZGF0YTogZS5kYXRhLFxuICAgICAgcm93SW5kZXg6IGUucm93SW5kZXhcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGRlc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuZ3JpZEFwaS5kZXNlbGVjdEFsbCgpO1xuICB9XG5cbiAgaW50ZXJuYWxHZXRSb3dDbGFzcyA9IChwOiBhbnkpID0+IHtcbiAgICBpZiAodGhpcy5yb3dDbGFzcykge1xuICAgICAgaWYgKHRoaXMucm93Q2xhc3MgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dDbGFzcyh7XG4gICAgICAgICAgcm93SW5kZXg6IHAubm9kZS5yb3dJbmRleCxcbiAgICAgICAgICByb3dMZXZlbDogcC5ub2RlLmxldmVsLFxuICAgICAgICAgIGRhdGE6IHAuZGF0YVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd0NsYXNzO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBzaG93TG9hZGluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ncmlkQXBpKSB7XG4gICAgICB0aGlzLmdyaWRBcGkuc2hvd0xvYWRpbmdPdmVybGF5KCk7XG4gICAgfVxuICB9XG5cbiAgaGlkZUxvYWRpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZ3JpZEFwaSkge1xuICAgICAgdGhpcy5ncmlkQXBpLmhpZGVPdmVybGF5KCk7XG4gICAgfVxuICB9XG5cbiAgaW50ZXJuYWxHcmlkU2l6ZUNoYW5nZWQoZTogR3JpZFNpemVDaGFuZ2VkRXZlbnQpIHtcbiAgICBpZiAoZS5jbGllbnRXaWR0aCA+IDAgJiYgZS5jbGllbnRIZWlnaHQgPiAwKSB7XG4gICAgICB0aGlzLnBlcmZvcm1TaXplQ29sdW1uc1RvRml0KGUuYXBpKTtcbiAgICB9XG4gIH1cblxuICBpbnRlcm5hbEdyaWRGaXJzdERhdGFSZW5kZXJlZChlOiBGaXJzdERhdGFSZW5kZXJlZEV2ZW50KSB7XG4gICAgdGhpcy5wZXJmb3JtU2l6ZUNvbHVtbnNUb0ZpdChlLmFwaSk7XG4gIH1cblxuICBwcml2YXRlIHBlcmZvcm1TaXplQ29sdW1uc1RvRml0KGFwaTogR3JpZEFwaSkge1xuICAgIGlmICh0aGlzLnNpemVDb2x1bW5zVG9GaXQpIHtcbiAgICAgIGFwaS5zaXplQ29sdW1uc1RvRml0KCk7XG4gICAgfVxuICB9XG59XG4iXX0=