@firestitch/list 13.0.1 → 13.0.3

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 (191) hide show
  1. package/app/classes/actions-controller.d.ts +20 -20
  2. package/app/classes/columns-controller.d.ts +71 -71
  3. package/app/classes/data-controller.d.ts +91 -91
  4. package/app/classes/external-params-controller.d.ts +32 -32
  5. package/app/classes/index.d.ts +2 -2
  6. package/app/classes/list-controller.d.ts +191 -191
  7. package/app/classes/pagination-controller.d.ts +198 -196
  8. package/app/classes/persistance-controller.d.ts +10 -10
  9. package/app/classes/reorder-controller.d.ts +68 -68
  10. package/app/classes/selection-controller.d.ts +155 -155
  11. package/app/classes/sorting-controller.d.ts +65 -65
  12. package/app/components/body/body.component.d.ts +28 -28
  13. package/app/components/body/row/actions/actions.component.d.ts +36 -36
  14. package/app/components/body/row/cell/cell.component.d.ts +22 -22
  15. package/app/components/body/row/inline-action/inline-action.component.d.ts +13 -13
  16. package/app/components/body/row/menu-action/menu-action.component.d.ts +20 -20
  17. package/app/components/body/row/row.component.d.ts +85 -85
  18. package/app/components/customize-cols/customize-cols.component.d.ts +17 -17
  19. package/app/components/footer/footer-row/footer-cell/footer-cell.component.d.ts +7 -7
  20. package/app/components/footer/footer-row/footer-row.component.d.ts +14 -14
  21. package/app/components/footer/footer.component.d.ts +15 -15
  22. package/app/components/head/head-cell/head-cell.component.d.ts +14 -14
  23. package/app/components/head/head.component.d.ts +49 -49
  24. package/app/components/list/list.component.d.ts +128 -126
  25. package/app/components/loader/loader.component.d.ts +14 -14
  26. package/app/components/manage-saved-filters/manage-saved-filters.component.d.ts +13 -13
  27. package/app/components/pagination/pagination.component.d.ts +14 -14
  28. package/app/components/saved-filters/saved-filters.component.d.ts +15 -15
  29. package/app/components/status/status.component.d.ts +21 -21
  30. package/app/directives/cell/cell.directive.d.ts +8 -8
  31. package/app/directives/column/column.directive.d.ts +33 -33
  32. package/app/directives/content/content.directive.d.ts +5 -5
  33. package/app/directives/content-init/content-init.directive.d.ts +9 -9
  34. package/app/directives/draggable-list/draggable-list.directive.d.ts +95 -95
  35. package/app/directives/draggable-row/draggable-row.directive.d.ts +23 -23
  36. package/app/directives/empty-state/empty-state.directive.d.ts +5 -5
  37. package/app/directives/footer/footer.directive.d.ts +8 -8
  38. package/app/directives/group-expand-trigger/group-expand-trigger.directive.d.ts +10 -10
  39. package/app/directives/group-footer/group-footer.directive.d.ts +6 -6
  40. package/app/directives/group-header/group-header.directive.d.ts +6 -6
  41. package/app/directives/header/header.directive.d.ts +8 -8
  42. package/app/directives/heading/heading.directive.d.ts +5 -5
  43. package/app/directives/heading-container/heading-container.directive.d.ts +5 -5
  44. package/app/directives/index.d.ts +3 -3
  45. package/app/directives/subheading/subheading.directive.d.ts +5 -5
  46. package/app/enums/button-type.enum.d.ts +7 -7
  47. package/app/enums/page-change-type.enum.d.ts +4 -4
  48. package/app/enums/pagination-strategy.enum.d.ts +5 -5
  49. package/app/enums/row-type.enum.d.ts +6 -6
  50. package/app/enums/state.enum.d.ts +9 -9
  51. package/app/fs-list.module.d.ts +60 -60
  52. package/app/fs-list.providers.d.ts +3 -3
  53. package/app/interfaces/cellconfig.interface.d.ts +5 -5
  54. package/app/interfaces/column-config.interface.d.ts +2 -2
  55. package/app/interfaces/draggable-list.interface.d.ts +7 -7
  56. package/app/interfaces/external-params.interface.d.ts +13 -13
  57. package/app/interfaces/index.d.ts +4 -4
  58. package/app/interfaces/listconfig.interface.d.ts +247 -247
  59. package/app/interfaces/pagination-state.interface.d.ts +9 -0
  60. package/app/interfaces/pagination.interface.d.ts +13 -13
  61. package/app/interfaces/sorting-change-event.interface.d.ts +4 -4
  62. package/app/models/column-async-attribute.d.ts +5 -5
  63. package/app/models/column-attributes.d.ts +39 -39
  64. package/app/models/column.model.d.ts +60 -60
  65. package/app/models/row/base-row.d.ts +13 -13
  66. package/app/models/row/child-row.d.ts +12 -12
  67. package/app/models/row/group-footer-row.d.ts +10 -10
  68. package/app/models/row/group-row.d.ts +16 -16
  69. package/app/models/row/simple-row.d.ts +5 -5
  70. package/app/models/row-action.model.d.ts +29 -29
  71. package/app/models/row.d.ts +34 -34
  72. package/app/models/styleConfig.model.d.ts +31 -31
  73. package/app/pipes/action-label.d.ts +8 -8
  74. package/app/pipes/index.d.ts +1 -1
  75. package/app/services/group-expand-notifier.service.d.ts +11 -11
  76. package/bundles/firestitch-list.umd.js +7218 -0
  77. package/bundles/firestitch-list.umd.js.map +1 -0
  78. package/{esm2020/app/classes/actions-controller.mjs → esm2015/app/classes/actions-controller.js} +55 -55
  79. package/{esm2020/app/classes/columns-controller.mjs → esm2015/app/classes/columns-controller.js} +205 -205
  80. package/esm2015/app/classes/data-controller.js +365 -0
  81. package/esm2015/app/classes/external-params-controller.js +147 -0
  82. package/{esm2020/app/classes/index.mjs → esm2015/app/classes/index.js} +3 -3
  83. package/esm2015/app/classes/list-controller.js +754 -0
  84. package/esm2015/app/classes/pagination-controller.js +479 -0
  85. package/{esm2020/app/classes/persistance-controller.mjs → esm2015/app/classes/persistance-controller.js} +19 -19
  86. package/esm2015/app/classes/reorder-controller.js +183 -0
  87. package/esm2015/app/classes/selection-controller.js +468 -0
  88. package/{esm2020/app/classes/sorting-controller.mjs → esm2015/app/classes/sorting-controller.js} +183 -183
  89. package/esm2015/app/components/body/body.component.js +69 -0
  90. package/esm2015/app/components/body/row/actions/actions.component.js +102 -0
  91. package/esm2015/app/components/body/row/cell/cell.component.js +113 -0
  92. package/esm2015/app/components/body/row/inline-action/inline-action.component.js +37 -0
  93. package/esm2015/app/components/body/row/menu-action/menu-action.component.js +50 -0
  94. package/esm2015/app/components/body/row/row.component.js +330 -0
  95. package/esm2015/app/components/customize-cols/customize-cols.component.js +72 -0
  96. package/esm2015/app/components/footer/footer-row/footer-cell/footer-cell.component.js +20 -0
  97. package/esm2015/app/components/footer/footer-row/footer-row.component.js +33 -0
  98. package/esm2015/app/components/footer/footer.component.js +36 -0
  99. package/esm2015/app/components/head/head-cell/head-cell.component.js +34 -0
  100. package/esm2015/app/components/head/head.component.js +108 -0
  101. package/esm2015/app/components/list/list.component.js +397 -0
  102. package/esm2015/app/components/loader/loader.component.js +45 -0
  103. package/esm2015/app/components/manage-saved-filters/manage-saved-filters.component.js +79 -0
  104. package/esm2015/app/components/pagination/pagination.component.js +42 -0
  105. package/esm2015/app/components/saved-filters/saved-filters.component.js +32 -0
  106. package/esm2015/app/components/status/status.component.js +72 -0
  107. package/{esm2020/app/directives/cell/cell.directive.mjs → esm2015/app/directives/cell/cell.directive.js} +18 -18
  108. package/{esm2020/app/directives/column/column.directive.mjs → esm2015/app/directives/column/column.directive.js} +112 -112
  109. package/{esm2020/app/directives/content/content.directive.mjs → esm2015/app/directives/content/content.directive.js} +13 -13
  110. package/{esm2020/app/directives/content-init/content-init.directive.mjs → esm2015/app/directives/content-init/content-init.directive.js} +22 -22
  111. package/esm2015/app/directives/draggable-list/draggable-list.directive.js +330 -0
  112. package/esm2015/app/directives/draggable-row/draggable-row.directive.js +79 -0
  113. package/{esm2020/app/directives/empty-state/empty-state.directive.mjs → esm2015/app/directives/empty-state/empty-state.directive.js} +13 -13
  114. package/{esm2020/app/directives/footer/footer.directive.mjs → esm2015/app/directives/footer/footer.directive.js} +18 -18
  115. package/{esm2020/app/directives/group-expand-trigger/group-expand-trigger.directive.mjs → esm2015/app/directives/group-expand-trigger/group-expand-trigger.directive.js} +26 -26
  116. package/{esm2020/app/directives/group-footer/group-footer.directive.mjs → esm2015/app/directives/group-footer/group-footer.directive.js} +14 -14
  117. package/{esm2020/app/directives/group-header/group-header.directive.mjs → esm2015/app/directives/group-header/group-header.directive.js} +14 -14
  118. package/{esm2020/app/directives/header/header.directive.mjs → esm2015/app/directives/header/header.directive.js} +18 -18
  119. package/{esm2020/app/directives/heading/heading.directive.mjs → esm2015/app/directives/heading/heading.directive.js} +13 -13
  120. package/{esm2020/app/directives/heading-container/heading-container.directive.mjs → esm2015/app/directives/heading-container/heading-container.directive.js} +13 -13
  121. package/{esm2020/app/directives/index.mjs → esm2015/app/directives/index.js} +4 -4
  122. package/{esm2020/app/directives/subheading/subheading.directive.mjs → esm2015/app/directives/subheading/subheading.directive.js} +13 -13
  123. package/{esm2020/app/enums/button-type.enum.mjs → esm2015/app/enums/button-type.enum.js} +9 -9
  124. package/{esm2020/app/enums/page-change-type.enum.mjs → esm2015/app/enums/page-change-type.enum.js} +6 -6
  125. package/{esm2020/app/enums/pagination-strategy.enum.mjs → esm2015/app/enums/pagination-strategy.enum.js} +7 -7
  126. package/{esm2020/app/enums/row-type.enum.mjs → esm2015/app/enums/row-type.enum.js} +7 -7
  127. package/{esm2020/app/enums/state.enum.mjs → esm2015/app/enums/state.enum.js} +11 -11
  128. package/{esm2020/app/fs-list.module.mjs → esm2015/app/fs-list.module.js} +246 -246
  129. package/{esm2020/app/fs-list.providers.mjs → esm2015/app/fs-list.providers.js} +4 -4
  130. package/{esm2020/app/interfaces/cellconfig.interface.mjs → esm2015/app/interfaces/cellconfig.interface.js} +2 -2
  131. package/{esm2020/app/interfaces/column-config.interface.mjs → esm2015/app/interfaces/column-config.interface.js} +1 -1
  132. package/{esm2020/app/interfaces/draggable-list.interface.mjs → esm2015/app/interfaces/draggable-list.interface.js} +2 -2
  133. package/esm2015/app/interfaces/external-params.interface.js +2 -0
  134. package/{esm2020/app/interfaces/index.mjs → esm2015/app/interfaces/index.js} +5 -5
  135. package/{esm2020/app/interfaces/listconfig.interface.mjs → esm2015/app/interfaces/listconfig.interface.js} +1 -1
  136. package/esm2015/app/interfaces/pagination-state.interface.js +2 -0
  137. package/esm2015/app/interfaces/pagination.interface.js +2 -0
  138. package/{esm2020/app/interfaces/sorting-change-event.interface.mjs → esm2015/app/interfaces/sorting-change-event.interface.js} +2 -2
  139. package/{esm2020/app/models/column-async-attribute.mjs → esm2015/app/models/column-async-attribute.js} +13 -13
  140. package/{esm2020/app/models/column-attributes.mjs → esm2015/app/models/column-attributes.js} +130 -130
  141. package/{esm2020/app/models/column.model.mjs → esm2015/app/models/column.model.js} +162 -162
  142. package/{esm2020/app/models/row/base-row.mjs → esm2015/app/models/row/base-row.js} +23 -23
  143. package/{esm2020/app/models/row/child-row.mjs → esm2015/app/models/row/child-row.js} +28 -28
  144. package/{esm2020/app/models/row/group-footer-row.mjs → esm2015/app/models/row/group-footer-row.js} +20 -20
  145. package/{esm2020/app/models/row/group-row.mjs → esm2015/app/models/row/group-row.js} +44 -44
  146. package/{esm2020/app/models/row/simple-row.mjs → esm2015/app/models/row/simple-row.js} +10 -10
  147. package/esm2015/app/models/row-action.model.js +90 -0
  148. package/{esm2020/app/models/row.mjs → esm2015/app/models/row.js} +88 -88
  149. package/{esm2020/app/models/styleConfig.model.mjs → esm2015/app/models/styleConfig.model.js} +75 -75
  150. package/{esm2020/app/pipes/action-label.mjs → esm2015/app/pipes/action-label.js} +17 -17
  151. package/{esm2020/app/pipes/index.mjs → esm2015/app/pipes/index.js} +1 -1
  152. package/{esm2020/app/services/group-expand-notifier.service.mjs → esm2015/app/services/group-expand-notifier.service.js} +26 -26
  153. package/{esm2020/firestitch-list.mjs → esm2015/firestitch-list.js} +4 -4
  154. package/{esm2020/public_api.mjs → esm2015/public_api.js} +46 -46
  155. package/fesm2015/{firestitch-list.mjs → firestitch-list.js} +5803 -5709
  156. package/fesm2015/firestitch-list.js.map +1 -0
  157. package/firestitch-list.d.ts +5 -5
  158. package/package.json +7 -20
  159. package/public_api.d.ts +41 -40
  160. package/esm2020/app/classes/data-controller.mjs +0 -367
  161. package/esm2020/app/classes/external-params-controller.mjs +0 -147
  162. package/esm2020/app/classes/list-controller.mjs +0 -752
  163. package/esm2020/app/classes/pagination-controller.mjs +0 -467
  164. package/esm2020/app/classes/reorder-controller.mjs +0 -182
  165. package/esm2020/app/classes/selection-controller.mjs +0 -468
  166. package/esm2020/app/components/body/body.component.mjs +0 -64
  167. package/esm2020/app/components/body/row/actions/actions.component.mjs +0 -97
  168. package/esm2020/app/components/body/row/cell/cell.component.mjs +0 -107
  169. package/esm2020/app/components/body/row/inline-action/inline-action.component.mjs +0 -33
  170. package/esm2020/app/components/body/row/menu-action/menu-action.component.mjs +0 -46
  171. package/esm2020/app/components/body/row/row.component.mjs +0 -321
  172. package/esm2020/app/components/customize-cols/customize-cols.component.mjs +0 -68
  173. package/esm2020/app/components/footer/footer-row/footer-cell/footer-cell.component.mjs +0 -16
  174. package/esm2020/app/components/footer/footer-row/footer-row.component.mjs +0 -28
  175. package/esm2020/app/components/footer/footer.component.mjs +0 -31
  176. package/esm2020/app/components/head/head-cell/head-cell.component.mjs +0 -29
  177. package/esm2020/app/components/head/head.component.mjs +0 -103
  178. package/esm2020/app/components/list/list.component.mjs +0 -388
  179. package/esm2020/app/components/loader/loader.component.mjs +0 -40
  180. package/esm2020/app/components/manage-saved-filters/manage-saved-filters.component.mjs +0 -76
  181. package/esm2020/app/components/pagination/pagination.component.mjs +0 -37
  182. package/esm2020/app/components/saved-filters/saved-filters.component.mjs +0 -29
  183. package/esm2020/app/components/status/status.component.mjs +0 -66
  184. package/esm2020/app/directives/draggable-list/draggable-list.directive.mjs +0 -328
  185. package/esm2020/app/directives/draggable-row/draggable-row.directive.mjs +0 -78
  186. package/esm2020/app/interfaces/external-params.interface.mjs +0 -2
  187. package/esm2020/app/interfaces/pagination.interface.mjs +0 -2
  188. package/esm2020/app/models/row-action.model.mjs +0 -90
  189. package/fesm2015/firestitch-list.mjs.map +0 -1
  190. package/fesm2020/firestitch-list.mjs +0 -5844
  191. package/fesm2020/firestitch-list.mjs.map +0 -1
@@ -1,467 +0,0 @@
1
- import { BehaviorSubject, Subject } from 'rxjs';
2
- import { distinctUntilChanged, takeUntil } from 'rxjs/operators';
3
- import { isObject } from 'lodash-es';
4
- import { PageChangeType } from '../enums/page-change-type.enum';
5
- import { PaginationStrategy } from '../enums/pagination-strategy.enum';
6
- export class PaginationController {
7
- constructor() {
8
- this.limit = 25;
9
- this.manual = false;
10
- this.page = 1; // Active page
11
- this.offset = 0;
12
- // public pagesArray = [];
13
- this.displayed = 0;
14
- this._pages$ = new BehaviorSubject(0); // Total pages
15
- this._strategy = PaginationStrategy.None;
16
- this._removedRows = 0;
17
- this._pageChanged$ = new Subject();
18
- this._pageReset$ = new Subject();
19
- this._onDestroy$ = new Subject();
20
- this._loadMoreEnabled = false;
21
- this._infinityScrollEnabled = false;
22
- this._loadMoreText = 'Load More';
23
- this._limits = [10, 25, 50, 100, 200];
24
- }
25
- // Total pages
26
- set pages(value) {
27
- this._pages$.next(value);
28
- }
29
- get pages() {
30
- return this._pages$.getValue();
31
- }
32
- get pages$() {
33
- return this._pages$
34
- .pipe(distinctUntilChanged());
35
- }
36
- /**
37
- * Fire if page was changed
38
- */
39
- get pageChanged$() {
40
- return this._pageChanged$.pipe(takeUntil(this._onDestroy$));
41
- }
42
- get pageReset$() {
43
- return this._pageReset$.asObservable();
44
- }
45
- /**
46
- * Get enabled
47
- */
48
- get enabled() {
49
- return !this.hasNoneStrategy;
50
- }
51
- /**
52
- * Get Limits
53
- */
54
- get limits() {
55
- return this._limits;
56
- }
57
- /**
58
- * Set limits, update pages array and set new limit per page
59
- *
60
- * @param value
61
- */
62
- set limits(value) {
63
- this._limits = value;
64
- if (this.limits.length > 0 && this.limits.indexOf(this.limit) === -1) {
65
- this.limit = this.limits[0];
66
- }
67
- else if (this.limits.length === 0) {
68
- this.limit = this.records;
69
- }
70
- }
71
- /**
72
- * Get query for request
73
- */
74
- get query() {
75
- switch (this.strategy) {
76
- case PaginationStrategy.Page:
77
- return this.queryPageStrategy;
78
- case PaginationStrategy.Offset:
79
- return this.queryOffsetStrategy;
80
- }
81
- return {};
82
- }
83
- get loadMoreQuery() {
84
- switch (this.strategy) {
85
- case PaginationStrategy.Page:
86
- return this.query;
87
- case PaginationStrategy.Offset:
88
- const query = this.queryOffsetStrategy;
89
- query.limit = query.offset + query.limit;
90
- query.offset = 0;
91
- return query;
92
- }
93
- return {};
94
- }
95
- /**
96
- * Query for Page Strategy
97
- */
98
- get queryPageStrategy() {
99
- return this.hasNoneStrategy
100
- ? {}
101
- : {
102
- page: this.page || 1,
103
- limit: this.limit || 10,
104
- };
105
- }
106
- /**
107
- * Query for Offset Strategy
108
- */
109
- get queryOffsetStrategy() {
110
- const page = this.page - 1 || 0;
111
- const limit = this.limit || 5;
112
- return {
113
- offset: page * limit,
114
- limit,
115
- };
116
- }
117
- /**
118
- * Get query for load only count of deleted rows
119
- */
120
- get loadDeletedOffsetQuery() {
121
- const paginationOffset = this.limit * this.page;
122
- const actualOffset = Math.min(this.records, paginationOffset);
123
- const offset = Math.max(0, actualOffset - this._removedRows);
124
- return {
125
- offset,
126
- limit: this._removedRows,
127
- };
128
- }
129
- get initialized() {
130
- return !!this.pages;
131
- }
132
- get strategy() {
133
- return this._strategy;
134
- }
135
- set strategy(strategy) {
136
- this._strategy = (strategy === undefined) ? PaginationStrategy.Page : strategy;
137
- }
138
- /**
139
- * Check if pagination in Page Strategy Mode
140
- */
141
- get hasPageStrategy() {
142
- return this.strategy === PaginationStrategy.Page;
143
- }
144
- /**
145
- * Check if pagination in Offset Strategy Mode
146
- */
147
- get hasOffsetStrategy() {
148
- return this.strategy === PaginationStrategy.Offset;
149
- }
150
- /**
151
- * Check if pagination in None Strategy Mode
152
- */
153
- get hasNoneStrategy() {
154
- return this.strategy === PaginationStrategy.None;
155
- }
156
- /**
157
- * If prev page can be activated
158
- *
159
- */
160
- get hasPrevPage() {
161
- switch (this.strategy) {
162
- case PaginationStrategy.Page:
163
- return this._hasPrevPagePageStrategy;
164
- case PaginationStrategy.Offset:
165
- return this._hasPrevPageOffsetStrategy;
166
- }
167
- return false;
168
- }
169
- /**
170
- * If next page can be activated
171
- */
172
- get hasNextPage() {
173
- switch (this.strategy) {
174
- case PaginationStrategy.Page:
175
- return this._hasNextPagePageStrategy;
176
- case PaginationStrategy.Offset:
177
- return this._hasNextPageOffsetStrategy;
178
- }
179
- return false;
180
- }
181
- get loadMoreEnabled() {
182
- return this._loadMoreEnabled;
183
- }
184
- get loadMoreText() {
185
- return this._loadMoreText;
186
- }
187
- get infinityScrollEnabled() {
188
- return this._infinityScrollEnabled;
189
- }
190
- /**
191
- * SP-T1974
192
- * Showing 26-50 of 333 results sorted by Name, Ascending
193
- * Showing 0 results sorted by Name, Ascending
194
- */
195
- get statusLabel() {
196
- const current = (this.page - 1) * this.limit;
197
- const from = current + 1;
198
- const to = Math.min(this.records, current + this.limit);
199
- return `${from}-${to}`;
200
- }
201
- initWithConfig(config, loadMore, infinityScrollEnabled = false) {
202
- if (config) {
203
- if (config.limits) {
204
- this.limits = config.limits;
205
- }
206
- if (config.limit) {
207
- this.limit = config.limit;
208
- }
209
- this.strategy = config.strategy;
210
- }
211
- if (loadMore) {
212
- this.setLoadMore(loadMore);
213
- }
214
- this._infinityScrollEnabled = infinityScrollEnabled;
215
- }
216
- /**
217
- * If pagination has prev page when Page Strategy
218
- */
219
- get _hasPrevPagePageStrategy() {
220
- return this.page > 1 && this.pages > 1;
221
- }
222
- /**
223
- * If pagination has prev page when Offset Strategy
224
- */
225
- get _hasPrevPageOffsetStrategy() {
226
- return this.offset >= this.limit && this.records > 1;
227
- }
228
- /**
229
- * If pagination has next page when Page Strategy
230
- */
231
- get _hasNextPagePageStrategy() {
232
- return this.page < this.pages && this.pages > 1;
233
- }
234
- /**
235
- * If pagination has next page when Offset Strategy
236
- */
237
- get _hasNextPageOffsetStrategy() {
238
- return (this.offset + this.limit) < this.records && this.records > 1;
239
- }
240
- /**
241
- * Update paging config and all related fields
242
- *
243
- * @param config
244
- * @param displayedRecords
245
- * @param loadMoreOperation
246
- */
247
- updatePaging(config, displayedRecords = 0, loadMoreOperation = false) {
248
- if (!loadMoreOperation) {
249
- this._fromParams(config);
250
- this.displayed = displayedRecords;
251
- }
252
- else {
253
- this.records = config.records;
254
- if (this.records < this.displayed) {
255
- this.displayed = this.records;
256
- }
257
- this._removedRows = 0;
258
- }
259
- this._updateTotalPages();
260
- }
261
- // /**
262
- // * Update paging when data source not remove
263
- // * @param {any[]} rows
264
- // */
265
- /*public updatePagingManual(rows: any[]) {
266
- if (Array.isArray(rows) && rows.length > 0) {
267
- this.records = rows.length;
268
- this.pages = Math.ceil(rows.length / this.limit);
269
- }
270
-
271
- this.updatePagesArray();
272
- this.updateDisplayed();
273
- }*/
274
- /**
275
- * Update pages array with new pages count
276
- */
277
- // public updatePagesArray() {
278
- // const MIDDLE = 2;
279
- // const pagesArr = [];
280
- // let from = 0;
281
- // let to = 0;
282
- // if (this.page < MIDDLE) {
283
- // from = MIDDLE - 1;
284
- // to = MIDDLE + 1;
285
- // } else if (this.page >= MIDDLE && this.page <= this.pages - MIDDLE + 1) {
286
- // from = this.page - 1;
287
- // to = this.page + 1;
288
- // } else if (this.page > this.pages - MIDDLE + 1) {
289
- // from = this.pages - MIDDLE - 1;
290
- // to = this.pages;
291
- // }
292
- // if (!this.pages || this.pages < 5) {
293
- // from = 1;
294
- // to = this.pages || 0;
295
- // }
296
- // for (let i = from; i <= to; i++) {
297
- // pagesArr.push(i);
298
- // }
299
- // this.pagesArray = Object.assign([], pagesArr);
300
- // }
301
- setLoadMore(config) {
302
- this._loadMoreEnabled = !!config;
303
- if (this._loadMoreEnabled && isObject(config) && config.label) {
304
- this._loadMoreText = config.label;
305
- }
306
- }
307
- /**
308
- * Update dispayed records counter
309
- */
310
- // public updateDisplayed() {
311
- // this.displayed = this.getVisibleRecords();
312
- // }
313
- /**
314
- * Return count of records that could be shown on page
315
- */
316
- // public getVisibleRecords() {
317
- // const diff = this.hasOffsetStrategy
318
- // ? this.records - this.offset
319
- // : this.limit;
320
- //
321
- // return diff < this.limit
322
- // ? diff
323
- // : this.displayed;
324
- // }
325
- getVisibleRecords() {
326
- return this.displayed;
327
- }
328
- /**
329
- * Set new limit
330
- *
331
- * @param limit
332
- */
333
- setLimit(limit) {
334
- this.limit = limit;
335
- this.resetPaging();
336
- this._pageChanged$.next({
337
- type: PageChangeType.LimitChanged,
338
- payload: limit,
339
- });
340
- }
341
- /**
342
- * If page is activate page
343
- *
344
- * @param page
345
- */
346
- isActive(page) {
347
- return page === this.page;
348
- }
349
- /**
350
- * Go to page
351
- *
352
- * @param page
353
- */
354
- goToPage(page) {
355
- if (page >= 1 && this.page !== page) {
356
- this.page = page;
357
- this._updateOffset();
358
- this._pageChanged$.next({
359
- type: PageChangeType.Default,
360
- payload: page,
361
- });
362
- }
363
- }
364
- /**
365
- * Reset paging like it was just initialized
366
- */
367
- resetPaging() {
368
- this.page = 1;
369
- this.offset = 0;
370
- }
371
- /**
372
- * Go to next page
373
- */
374
- goNext() {
375
- if (this.hasNextPage) {
376
- this.page++;
377
- this._updateOffset();
378
- this._pageChanged$.next({
379
- type: PageChangeType.Default,
380
- payload: this.page,
381
- });
382
- }
383
- }
384
- /**
385
- * Go to first page
386
- */
387
- goFirst() {
388
- if (this.page > 1) {
389
- this.page = 1;
390
- this._updateOffset();
391
- this._pageChanged$.next({
392
- type: PageChangeType.Default,
393
- payload: this.page,
394
- });
395
- }
396
- }
397
- /**
398
- * Go to prev page
399
- */
400
- goPrev() {
401
- if (this.page > 1) {
402
- this.page--;
403
- this._updateOffset();
404
- this._pageChanged$.next({
405
- type: PageChangeType.Default,
406
- payload: this.page,
407
- });
408
- }
409
- }
410
- /**
411
- * Go to last page
412
- */
413
- goLast() {
414
- if (this.page !== this.pages) {
415
- this.page = this.pages;
416
- this._updateOffset();
417
- this._pageChanged$.next({
418
- type: PageChangeType.Default,
419
- payload: this.page,
420
- });
421
- }
422
- }
423
- /**
424
- * Update count of deleted rows. This count will be applied for offset calc
425
- *
426
- * @param count
427
- */
428
- removeRows(count) {
429
- this._removedRows += count;
430
- }
431
- updatePagination() {
432
- this._updateTotalPages();
433
- }
434
- /**
435
- * Destroy
436
- */
437
- destroy() {
438
- this._onDestroy$.next();
439
- this._onDestroy$.complete();
440
- }
441
- /**
442
- * Update paging state
443
- *
444
- * @param params
445
- */
446
- _fromParams(params) {
447
- if (!this.loadMoreEnabled) {
448
- this.limit = params.limit ?? 25;
449
- }
450
- this.records = params.records;
451
- this.manual = params.manual;
452
- this.pages = params.pages || 0;
453
- }
454
- /**
455
- * Calc and update offset
456
- */
457
- _updateOffset() {
458
- this.offset = this.limit * (this.page - 1);
459
- }
460
- /**
461
- * Calc and update total count of pages
462
- */
463
- _updateTotalPages() {
464
- this.pages = Math.ceil(this.records / this.limit);
465
- }
466
- }
467
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9jbGFzc2VzL3BhZ2luYXRpb24tY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVyQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFTdkUsTUFBTSxPQUFPLG9CQUFvQjtJQTBCL0I7UUF4Qk8sVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVYLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFZixTQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYztRQUN4QixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLDBCQUEwQjtRQUNuQixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRWIsWUFBTyxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYztRQUV4RCxjQUFTLEdBQXVCLGtCQUFrQixDQUFDLElBQUksQ0FBQztRQUN4RCxpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUVqQixrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7UUFDMUMsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2xDLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUU1QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLGtCQUFhLEdBQUcsV0FBVyxDQUFDO1FBQzVCLFlBQU8sR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUUxQixDQUFDO0lBRWhCLGNBQWM7SUFDZCxJQUFXLEtBQUssQ0FBQyxLQUFhO1FBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU87YUFDaEIsSUFBSSxDQUNILG9CQUFvQixFQUFFLENBQ3ZCLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQVcsTUFBTSxDQUFDLEtBQUs7UUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFFckIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3BFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3QjthQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsS0FBSztRQUNkLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNyQixLQUFLLGtCQUFrQixDQUFDLElBQUk7Z0JBQzFCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQ2hDLEtBQUssa0JBQWtCLENBQUMsTUFBTTtnQkFDNUIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7U0FDbkM7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3JCLEtBQUssa0JBQWtCLENBQUMsSUFBSTtnQkFDMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3BCLEtBQUssa0JBQWtCLENBQUMsTUFBTTtnQkFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO2dCQUV2QyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDekMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBRWpCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGlCQUFpQjtRQUMxQixPQUFPLElBQUksQ0FBQyxlQUFlO1lBQ3pCLENBQUMsQ0FBQyxFQUFFO1lBQ0osQ0FBQyxDQUFDO2dCQUNBLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7Z0JBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7YUFDeEIsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsbUJBQW1CO1FBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUU5QixPQUFPO1lBQ0wsTUFBTSxFQUFFLElBQUksR0FBRyxLQUFLO1lBQ3BCLEtBQUs7U0FDTixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxzQkFBc0I7UUFDL0IsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDaEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDOUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU3RCxPQUFPO1lBQ0wsTUFBTTtZQUNOLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWTtTQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFXLFFBQVEsQ0FBQyxRQUE0QjtRQUM5QyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUNqRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLGtCQUFrQixDQUFDLElBQUksQ0FBQztJQUNuRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGlCQUFpQjtRQUMxQixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssa0JBQWtCLENBQUMsTUFBTSxDQUFDO0lBQ3JELENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssa0JBQWtCLENBQUMsSUFBSSxDQUFDO0lBQ25ELENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFZLFdBQVc7UUFDckIsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3JCLEtBQUssa0JBQWtCLENBQUMsSUFBSTtnQkFDMUIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUM7WUFDdkMsS0FBSyxrQkFBa0IsQ0FBQyxNQUFNO2dCQUM1QixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQztTQUMxQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxXQUFXO1FBQ3BCLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNyQixLQUFLLGtCQUFrQixDQUFDLElBQUk7Z0JBQzFCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDO1lBQ3ZDLEtBQUssa0JBQWtCLENBQUMsTUFBTTtnQkFDNUIsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUM7U0FDMUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQVcscUJBQXFCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDO0lBQ3JDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBVyxXQUFXO1FBQ3BCLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDekIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEQsT0FBTyxHQUFHLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU0sY0FBYyxDQUNuQixNQUF3QixFQUN4QixRQUF3QyxFQUN4QyxxQkFBcUIsR0FBRyxLQUFLO1FBRzdCLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO2dCQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDN0I7WUFFRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUMzQjtZQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztTQUNqQztRQUVELElBQUksUUFBUSxFQUFFO1lBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM1QjtRQUVELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxxQkFBcUIsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFZLHdCQUF3QjtRQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVksMEJBQTBCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7T0FFRztJQUNILElBQVksd0JBQXdCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7T0FFRztJQUNILElBQVksMEJBQTBCO1FBQ3BDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxZQUFZLENBQUMsTUFBTSxFQUFFLGdCQUFnQixHQUFHLENBQUMsRUFBRSxpQkFBaUIsR0FBRyxLQUFLO1FBQ3pFLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUM7U0FDbkM7YUFBTTtZQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUU5QixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQy9CO1lBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7U0FDdkI7UUFFRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTTtJQUNOLCtDQUErQztJQUMvQyx5QkFBeUI7SUFDekIsTUFBTTtJQUNOOzs7Ozs7OztPQVFHO0lBRUg7O09BRUc7SUFDSCw4QkFBOEI7SUFDOUIsc0JBQXNCO0lBQ3RCLHlCQUF5QjtJQUV6QixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLDhCQUE4QjtJQUM5Qix5QkFBeUI7SUFDekIsdUJBQXVCO0lBQ3ZCLDhFQUE4RTtJQUM5RSw0QkFBNEI7SUFDNUIsMEJBQTBCO0lBQzFCLHNEQUFzRDtJQUN0RCxzQ0FBc0M7SUFDdEMsdUJBQXVCO0lBQ3ZCLE1BQU07SUFFTix5Q0FBeUM7SUFDekMsZ0JBQWdCO0lBQ2hCLDRCQUE0QjtJQUM1QixNQUFNO0lBRU4sdUNBQXVDO0lBQ3ZDLHdCQUF3QjtJQUN4QixNQUFNO0lBRU4sbURBQW1EO0lBQ25ELElBQUk7SUFFRyxXQUFXLENBQUMsTUFBc0M7UUFDdkQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFakMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFLLE1BQStCLENBQUMsS0FBSyxFQUFFO1lBQ3ZGLElBQUksQ0FBQyxhQUFhLEdBQUksTUFBK0IsQ0FBQyxLQUFLLENBQUM7U0FDN0Q7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCw2QkFBNkI7SUFDN0IsK0NBQStDO0lBQy9DLElBQUk7SUFFSjs7T0FFRztJQUNILCtCQUErQjtJQUMvQix3Q0FBd0M7SUFDeEMsbUNBQW1DO0lBQ25DLG9CQUFvQjtJQUNwQixFQUFFO0lBQ0YsNkJBQTZCO0lBQzdCLGFBQWE7SUFDYix3QkFBd0I7SUFDeEIsSUFBSTtJQUVHLGlCQUFpQjtRQUN0QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxRQUFRLENBQUMsS0FBSztRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDdEIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxZQUFZO1lBQ2pDLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxRQUFRLENBQUMsSUFBSTtRQUNsQixPQUFPLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksUUFBUSxDQUFDLElBQUk7UUFDbEIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ25DLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBRWpCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUVyQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztnQkFDdEIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxPQUFPO2dCQUM1QixPQUFPLEVBQUUsSUFBSTthQUNkLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNoQixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU07UUFDWCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRVosSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBRXJCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO2dCQUN0QixJQUFJLEVBQUUsY0FBYyxDQUFDLE9BQU87Z0JBQzVCLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSTthQUNuQixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDWixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBRWQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBRXJCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO2dCQUN0QixJQUFJLEVBQUUsY0FBYyxDQUFDLE9BQU87Z0JBQzVCLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSTthQUNuQixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU07UUFDWCxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVaLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUVyQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztnQkFDdEIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxPQUFPO2dCQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUk7YUFDbkIsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNO1FBQ1gsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBRXZCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUVyQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztnQkFDdEIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxPQUFPO2dCQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUk7YUFDbkIsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFVBQVUsQ0FBQyxLQUFhO1FBQzdCLElBQUksQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTztRQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLFdBQVcsQ0FBQyxNQUFNO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7U0FDakM7UUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRTVCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssYUFBYTtRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7IFBhZ2VDaGFuZ2VUeXBlIH0gZnJvbSAnLi4vZW51bXMvcGFnZS1jaGFuZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IFBhZ2luYXRpb25TdHJhdGVneSB9IGZyb20gJy4uL2VudW1zL3BhZ2luYXRpb24tc3RyYXRlZ3kuZW51bSc7XG5pbXBvcnQge1xuICBGc0xpc3RMb2FkTW9yZUNvbmZpZyxcbiAgRnNQYWdpbmcsXG4gIFBhZ2VDaGFuZ2UsXG4gIFF1ZXJ5T2Zmc2V0U3RyYXRlZ3ksXG4gIFF1ZXJ5UGFnZVN0cmF0ZWd5LFxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25Db250cm9sbGVyIHtcblxuICBwdWJsaWMgbGltaXQgPSAyNTtcbiAgcHVibGljIHJlY29yZHM6IG51bWJlcjtcbiAgcHVibGljIG1hbnVhbCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBwYWdlID0gMTsgLy8gQWN0aXZlIHBhZ2VcbiAgcHVibGljIG9mZnNldCA9IDA7XG5cbiAgLy8gcHVibGljIHBhZ2VzQXJyYXkgPSBbXTtcbiAgcHVibGljIGRpc3BsYXllZCA9IDA7XG5cbiAgcHJpdmF0ZSBfcGFnZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApOyAvLyBUb3RhbCBwYWdlc1xuXG4gIHByaXZhdGUgX3N0cmF0ZWd5OiBQYWdpbmF0aW9uU3RyYXRlZ3kgPSBQYWdpbmF0aW9uU3RyYXRlZ3kuTm9uZTtcbiAgcHJpdmF0ZSBfcmVtb3ZlZFJvd3MgPSAwO1xuXG4gIHByaXZhdGUgX3BhZ2VDaGFuZ2VkJCA9IG5ldyBTdWJqZWN0PFBhZ2VDaGFuZ2U+KCk7XG4gIHByaXZhdGUgX3BhZ2VSZXNldCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9vbkRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIF9sb2FkTW9yZUVuYWJsZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaW5maW5pdHlTY3JvbGxFbmFibGVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2xvYWRNb3JlVGV4dCA9ICdMb2FkIE1vcmUnO1xuICBwcml2YXRlIF9saW1pdHMgPSBbMTAsIDI1LCA1MCwgMTAwLCAyMDBdO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvLyBUb3RhbCBwYWdlc1xuICBwdWJsaWMgc2V0IHBhZ2VzKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlcyQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBhZ2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VzJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBwYWdlcyQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZXMkXG4gICAgICAucGlwZShcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmlyZSBpZiBwYWdlIHdhcyBjaGFuZ2VkXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhZ2VDaGFuZ2VkJCgpOiBPYnNlcnZhYmxlPFBhZ2VDaGFuZ2U+IHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZUNoYW5nZWQkLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGFnZVJlc2V0JCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZVJlc2V0JC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZW5hYmxlZFxuICAgKi9cbiAgcHVibGljIGdldCBlbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5oYXNOb25lU3RyYXRlZ3k7XG4gIH1cblxuICAvKipcbiAgICogR2V0IExpbWl0c1xuICAgKi9cbiAgcHVibGljIGdldCBsaW1pdHMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9saW1pdHM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGxpbWl0cywgdXBkYXRlIHBhZ2VzIGFycmF5IGFuZCBzZXQgbmV3IGxpbWl0IHBlciBwYWdlXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHNldCBsaW1pdHModmFsdWUpIHtcbiAgICB0aGlzLl9saW1pdHMgPSB2YWx1ZTtcblxuICAgIGlmICh0aGlzLmxpbWl0cy5sZW5ndGggPiAwICYmIHRoaXMubGltaXRzLmluZGV4T2YodGhpcy5saW1pdCkgPT09IC0xKSB7XG4gICAgICB0aGlzLmxpbWl0ID0gdGhpcy5saW1pdHNbMF07XG4gICAgfSBlbHNlIGlmICh0aGlzLmxpbWl0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMubGltaXQgPSB0aGlzLnJlY29yZHM7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBxdWVyeSBmb3IgcmVxdWVzdFxuICAgKi9cbiAgcHVibGljIGdldCBxdWVyeSgpIHtcbiAgICBzd2l0Y2ggKHRoaXMuc3RyYXRlZ3kpIHtcbiAgICAgIGNhc2UgUGFnaW5hdGlvblN0cmF0ZWd5LlBhZ2U6XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5UGFnZVN0cmF0ZWd5O1xuICAgICAgY2FzZSBQYWdpbmF0aW9uU3RyYXRlZ3kuT2Zmc2V0OlxuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeU9mZnNldFN0cmF0ZWd5O1xuICAgIH1cblxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9hZE1vcmVRdWVyeSgpIHtcbiAgICBzd2l0Y2ggKHRoaXMuc3RyYXRlZ3kpIHtcbiAgICAgIGNhc2UgUGFnaW5hdGlvblN0cmF0ZWd5LlBhZ2U6XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5O1xuICAgICAgY2FzZSBQYWdpbmF0aW9uU3RyYXRlZ3kuT2Zmc2V0OlxuICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMucXVlcnlPZmZzZXRTdHJhdGVneTtcblxuICAgICAgICBxdWVyeS5saW1pdCA9IHF1ZXJ5Lm9mZnNldCArIHF1ZXJ5LmxpbWl0O1xuICAgICAgICBxdWVyeS5vZmZzZXQgPSAwO1xuXG4gICAgICAgIHJldHVybiBxdWVyeTtcbiAgICB9XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogUXVlcnkgZm9yIFBhZ2UgU3RyYXRlZ3lcbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlcnlQYWdlU3RyYXRlZ3koKTogUXVlcnlQYWdlU3RyYXRlZ3kge1xuICAgIHJldHVybiB0aGlzLmhhc05vbmVTdHJhdGVneVxuICAgICAgPyB7fVxuICAgICAgOiB7XG4gICAgICAgIHBhZ2U6IHRoaXMucGFnZSB8fCAxLFxuICAgICAgICBsaW1pdDogdGhpcy5saW1pdCB8fCAxMCxcbiAgICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUXVlcnkgZm9yIE9mZnNldCBTdHJhdGVneVxuICAgKi9cbiAgcHVibGljIGdldCBxdWVyeU9mZnNldFN0cmF0ZWd5KCk6IFF1ZXJ5T2Zmc2V0U3RyYXRlZ3kge1xuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBhZ2UgLSAxIHx8IDA7XG4gICAgY29uc3QgbGltaXQgPSB0aGlzLmxpbWl0IHx8IDU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgb2Zmc2V0OiBwYWdlICogbGltaXQsXG4gICAgICBsaW1pdCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBxdWVyeSBmb3IgbG9hZCBvbmx5IGNvdW50IG9mIGRlbGV0ZWQgcm93c1xuICAgKi9cbiAgcHVibGljIGdldCBsb2FkRGVsZXRlZE9mZnNldFF1ZXJ5KCkge1xuICAgIGNvbnN0IHBhZ2luYXRpb25PZmZzZXQgPSB0aGlzLmxpbWl0ICogdGhpcy5wYWdlO1xuICAgIGNvbnN0IGFjdHVhbE9mZnNldCA9IE1hdGgubWluKHRoaXMucmVjb3JkcywgcGFnaW5hdGlvbk9mZnNldCk7XG4gICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5tYXgoMCwgYWN0dWFsT2Zmc2V0IC0gdGhpcy5fcmVtb3ZlZFJvd3MpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9mZnNldCxcbiAgICAgIGxpbWl0OiB0aGlzLl9yZW1vdmVkUm93cyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldCBpbml0aWFsaXplZCgpIHtcbiAgICByZXR1cm4gISF0aGlzLnBhZ2VzO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJhdGVneSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RyYXRlZ3k7XG4gIH1cblxuICBwdWJsaWMgc2V0IHN0cmF0ZWd5KHN0cmF0ZWd5OiBQYWdpbmF0aW9uU3RyYXRlZ3kpIHtcbiAgICB0aGlzLl9zdHJhdGVneSA9IChzdHJhdGVneSA9PT0gdW5kZWZpbmVkKSA/IFBhZ2luYXRpb25TdHJhdGVneS5QYWdlIDogc3RyYXRlZ3k7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgcGFnaW5hdGlvbiBpbiBQYWdlIFN0cmF0ZWd5IE1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzUGFnZVN0cmF0ZWd5KCkge1xuICAgIHJldHVybiB0aGlzLnN0cmF0ZWd5ID09PSBQYWdpbmF0aW9uU3RyYXRlZ3kuUGFnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwYWdpbmF0aW9uIGluIE9mZnNldCBTdHJhdGVneSBNb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhhc09mZnNldFN0cmF0ZWd5KCkge1xuICAgIHJldHVybiB0aGlzLnN0cmF0ZWd5ID09PSBQYWdpbmF0aW9uU3RyYXRlZ3kuT2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHBhZ2luYXRpb24gaW4gTm9uZSBTdHJhdGVneSBNb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhhc05vbmVTdHJhdGVneSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdHJhdGVneSA9PT0gUGFnaW5hdGlvblN0cmF0ZWd5Lk5vbmU7XG4gIH1cblxuICAvKipcbiAgICogSWYgcHJldiBwYWdlIGNhbiBiZSBhY3RpdmF0ZWRcbiAgICpcbiAgICovXG4gIHB1YmxpYyAgZ2V0IGhhc1ByZXZQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAodGhpcy5zdHJhdGVneSkge1xuICAgICAgY2FzZSBQYWdpbmF0aW9uU3RyYXRlZ3kuUGFnZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1ByZXZQYWdlUGFnZVN0cmF0ZWd5O1xuICAgICAgY2FzZSBQYWdpbmF0aW9uU3RyYXRlZ3kuT2Zmc2V0OlxuICAgICAgICByZXR1cm4gdGhpcy5faGFzUHJldlBhZ2VPZmZzZXRTdHJhdGVneTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSWYgbmV4dCBwYWdlIGNhbiBiZSBhY3RpdmF0ZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzTmV4dFBhZ2UoKTogYm9vbGVhbiB7IC8vIE5lZWQgdG8gY2hlY2sgaWYgcGFnZXMgPT09IHBhZ2UgJiYgcGFnZSA9PT0gMVxuICAgIHN3aXRjaCAodGhpcy5zdHJhdGVneSkge1xuICAgICAgY2FzZSBQYWdpbmF0aW9uU3RyYXRlZ3kuUGFnZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc05leHRQYWdlUGFnZVN0cmF0ZWd5O1xuICAgICAgY2FzZSBQYWdpbmF0aW9uU3RyYXRlZ3kuT2Zmc2V0OlxuICAgICAgICByZXR1cm4gdGhpcy5faGFzTmV4dFBhZ2VPZmZzZXRTdHJhdGVneTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxvYWRNb3JlRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZE1vcmVFbmFibGVkO1xuICB9XG5cbiAgcHVibGljIGdldCBsb2FkTW9yZVRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZE1vcmVUZXh0O1xuICB9XG5cbiAgcHVibGljIGdldCBpbmZpbml0eVNjcm9sbEVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luZmluaXR5U2Nyb2xsRW5hYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTUC1UMTk3NFxuICAgKiBTaG93aW5nIDI2LTUwIG9mIDMzMyByZXN1bHRzIHNvcnRlZCBieSBOYW1lLCBBc2NlbmRpbmdcbiAgICogU2hvd2luZyAwIHJlc3VsdHMgc29ydGVkIGJ5IE5hbWUsIEFzY2VuZGluZ1xuICAgKi9cbiAgcHVibGljIGdldCBzdGF0dXNMYWJlbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGN1cnJlbnQgPSAodGhpcy5wYWdlIC0gMSkgKiB0aGlzLmxpbWl0O1xuICAgIGNvbnN0IGZyb20gPSBjdXJyZW50ICsgMTtcbiAgICBjb25zdCB0byA9IE1hdGgubWluKHRoaXMucmVjb3JkcywgY3VycmVudCArIHRoaXMubGltaXQpO1xuXG4gICAgcmV0dXJuIGAke2Zyb219LSR7dG99YDtcbiAgfVxuXG4gIHB1YmxpYyBpbml0V2l0aENvbmZpZyhcbiAgICBjb25maWc6IEZzUGFnaW5nIHwgZmFsc2UsXG4gICAgbG9hZE1vcmU6IEZzTGlzdExvYWRNb3JlQ29uZmlnIHwgYm9vbGVhbixcbiAgICBpbmZpbml0eVNjcm9sbEVuYWJsZWQgPSBmYWxzZSxcbiAgKSB7XG5cbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICBpZiAoY29uZmlnLmxpbWl0cykge1xuICAgICAgICB0aGlzLmxpbWl0cyA9IGNvbmZpZy5saW1pdHM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcubGltaXQpIHtcbiAgICAgICAgdGhpcy5saW1pdCA9IGNvbmZpZy5saW1pdDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdHJhdGVneSA9IGNvbmZpZy5zdHJhdGVneTtcbiAgICB9XG5cbiAgICBpZiAobG9hZE1vcmUpIHtcbiAgICAgIHRoaXMuc2V0TG9hZE1vcmUobG9hZE1vcmUpO1xuICAgIH1cblxuICAgIHRoaXMuX2luZmluaXR5U2Nyb2xsRW5hYmxlZCA9IGluZmluaXR5U2Nyb2xsRW5hYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBwYWdpbmF0aW9uIGhhcyBwcmV2IHBhZ2Ugd2hlbiBQYWdlIFN0cmF0ZWd5XG4gICAqL1xuICBwcml2YXRlIGdldCBfaGFzUHJldlBhZ2VQYWdlU3RyYXRlZ3koKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGFnZSA+IDEgJiYgdGhpcy5wYWdlcyA+IDE7XG4gIH1cblxuICAvKipcbiAgICogSWYgcGFnaW5hdGlvbiBoYXMgcHJldiBwYWdlIHdoZW4gT2Zmc2V0IFN0cmF0ZWd5XG4gICAqL1xuICBwcml2YXRlIGdldCBfaGFzUHJldlBhZ2VPZmZzZXRTdHJhdGVneSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vZmZzZXQgPj0gdGhpcy5saW1pdCAmJiB0aGlzLnJlY29yZHMgPiAxO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHBhZ2luYXRpb24gaGFzIG5leHQgcGFnZSB3aGVuIFBhZ2UgU3RyYXRlZ3lcbiAgICovXG4gIHByaXZhdGUgZ2V0IF9oYXNOZXh0UGFnZVBhZ2VTdHJhdGVneSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlIDwgdGhpcy5wYWdlcyAmJiB0aGlzLnBhZ2VzID4gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBwYWdpbmF0aW9uIGhhcyBuZXh0IHBhZ2Ugd2hlbiBPZmZzZXQgU3RyYXRlZ3lcbiAgICovXG4gIHByaXZhdGUgZ2V0IF9oYXNOZXh0UGFnZU9mZnNldFN0cmF0ZWd5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5vZmZzZXQgKyB0aGlzLmxpbWl0KSA8IHRoaXMucmVjb3JkcyAmJiB0aGlzLnJlY29yZHMgPiAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBwYWdpbmcgY29uZmlnIGFuZCBhbGwgcmVsYXRlZCBmaWVsZHNcbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZ1xuICAgKiBAcGFyYW0gZGlzcGxheWVkUmVjb3Jkc1xuICAgKiBAcGFyYW0gbG9hZE1vcmVPcGVyYXRpb25cbiAgICovXG4gIHB1YmxpYyB1cGRhdGVQYWdpbmcoY29uZmlnLCBkaXNwbGF5ZWRSZWNvcmRzID0gMCwgbG9hZE1vcmVPcGVyYXRpb24gPSBmYWxzZSkge1xuICAgIGlmICghbG9hZE1vcmVPcGVyYXRpb24pIHtcbiAgICAgIHRoaXMuX2Zyb21QYXJhbXMoY29uZmlnKTtcbiAgICAgIHRoaXMuZGlzcGxheWVkID0gZGlzcGxheWVkUmVjb3JkcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWNvcmRzID0gY29uZmlnLnJlY29yZHM7XG5cbiAgICAgIGlmICh0aGlzLnJlY29yZHMgPCB0aGlzLmRpc3BsYXllZCkge1xuICAgICAgICB0aGlzLmRpc3BsYXllZCA9IHRoaXMucmVjb3JkcztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVtb3ZlZFJvd3MgPSAwO1xuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZVRvdGFsUGFnZXMoKTtcbiAgfVxuXG4gIC8vIC8qKlxuICAvLyAgKiBVcGRhdGUgcGFnaW5nIHdoZW4gZGF0YSBzb3VyY2Ugbm90IHJlbW92ZVxuICAvLyAgKiBAcGFyYW0ge2FueVtdfSByb3dzXG4gIC8vICAqL1xuICAvKnB1YmxpYyB1cGRhdGVQYWdpbmdNYW51YWwocm93czogYW55W10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyb3dzKSAmJiByb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucmVjb3JkcyA9IHJvd3MubGVuZ3RoO1xuICAgICAgdGhpcy5wYWdlcyA9IE1hdGguY2VpbChyb3dzLmxlbmd0aCAvIHRoaXMubGltaXQpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUGFnZXNBcnJheSgpO1xuICAgIHRoaXMudXBkYXRlRGlzcGxheWVkKCk7XG4gIH0qL1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgcGFnZXMgYXJyYXkgd2l0aCBuZXcgcGFnZXMgY291bnRcbiAgICovXG4gIC8vIHB1YmxpYyB1cGRhdGVQYWdlc0FycmF5KCkge1xuICAvLyAgIGNvbnN0IE1JRERMRSA9IDI7XG4gIC8vICAgY29uc3QgcGFnZXNBcnIgPSBbXTtcblxuICAvLyAgIGxldCBmcm9tID0gMDtcbiAgLy8gICBsZXQgdG8gPSAwO1xuICAvLyAgIGlmICh0aGlzLnBhZ2UgPCBNSURETEUpIHtcbiAgLy8gICAgIGZyb20gPSBNSURETEUgLSAxO1xuICAvLyAgICAgdG8gPSBNSURETEUgKyAxO1xuICAvLyAgIH0gZWxzZSBpZiAodGhpcy5wYWdlID49IE1JRERMRSAmJiB0aGlzLnBhZ2UgPD0gdGhpcy5wYWdlcyAtIE1JRERMRSArIDEpIHtcbiAgLy8gICAgIGZyb20gPSB0aGlzLnBhZ2UgLSAxO1xuICAvLyAgICAgdG8gPSB0aGlzLnBhZ2UgKyAxO1xuICAvLyAgIH0gZWxzZSBpZiAodGhpcy5wYWdlID4gdGhpcy5wYWdlcyAtIE1JRERMRSArIDEpIHtcbiAgLy8gICAgIGZyb20gPSB0aGlzLnBhZ2VzIC0gTUlERExFIC0gMTtcbiAgLy8gICAgIHRvID0gdGhpcy5wYWdlcztcbiAgLy8gICB9XG5cbiAgLy8gICBpZiAoIXRoaXMucGFnZXMgfHwgdGhpcy5wYWdlcyA8IDUpIHtcbiAgLy8gICAgIGZyb20gPSAxO1xuICAvLyAgICAgdG8gPSB0aGlzLnBhZ2VzIHx8IDA7XG4gIC8vICAgfVxuXG4gIC8vICAgZm9yIChsZXQgaSA9IGZyb207IGkgPD0gdG87IGkrKykge1xuICAvLyAgICAgcGFnZXNBcnIucHVzaChpKTtcbiAgLy8gICB9XG5cbiAgLy8gICB0aGlzLnBhZ2VzQXJyYXkgPSBPYmplY3QuYXNzaWduKFtdLCBwYWdlc0Fycik7XG4gIC8vIH1cblxuICBwdWJsaWMgc2V0TG9hZE1vcmUoY29uZmlnOiBGc0xpc3RMb2FkTW9yZUNvbmZpZyB8IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9sb2FkTW9yZUVuYWJsZWQgPSAhIWNvbmZpZztcblxuICAgIGlmICh0aGlzLl9sb2FkTW9yZUVuYWJsZWQgJiYgaXNPYmplY3QoY29uZmlnKSAmJiAoY29uZmlnIGFzIEZzTGlzdExvYWRNb3JlQ29uZmlnKS5sYWJlbCkge1xuICAgICAgdGhpcy5fbG9hZE1vcmVUZXh0ID0gKGNvbmZpZyBhcyBGc0xpc3RMb2FkTW9yZUNvbmZpZykubGFiZWw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBkaXNwYXllZCByZWNvcmRzIGNvdW50ZXJcbiAgICovXG4gIC8vIHB1YmxpYyB1cGRhdGVEaXNwbGF5ZWQoKSB7XG4gIC8vICAgdGhpcy5kaXNwbGF5ZWQgPSB0aGlzLmdldFZpc2libGVSZWNvcmRzKCk7XG4gIC8vIH1cblxuICAvKipcbiAgICogUmV0dXJuIGNvdW50IG9mIHJlY29yZHMgdGhhdCBjb3VsZCBiZSBzaG93biBvbiBwYWdlXG4gICAqL1xuICAvLyBwdWJsaWMgZ2V0VmlzaWJsZVJlY29yZHMoKSB7XG4gIC8vICAgY29uc3QgZGlmZiA9IHRoaXMuaGFzT2Zmc2V0U3RyYXRlZ3lcbiAgLy8gICAgID8gdGhpcy5yZWNvcmRzIC0gdGhpcy5vZmZzZXRcbiAgLy8gICAgIDogdGhpcy5saW1pdDtcbiAgLy9cbiAgLy8gICByZXR1cm4gZGlmZiA8IHRoaXMubGltaXRcbiAgLy8gICAgID8gZGlmZlxuICAvLyAgICAgOiB0aGlzLmRpc3BsYXllZDtcbiAgLy8gfVxuXG4gIHB1YmxpYyBnZXRWaXNpYmxlUmVjb3JkcygpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG5ldyBsaW1pdFxuICAgKlxuICAgKiBAcGFyYW0gbGltaXRcbiAgICovXG4gIHB1YmxpYyBzZXRMaW1pdChsaW1pdCkge1xuICAgIHRoaXMubGltaXQgPSBsaW1pdDtcbiAgICB0aGlzLnJlc2V0UGFnaW5nKCk7XG5cbiAgICB0aGlzLl9wYWdlQ2hhbmdlZCQubmV4dCh7XG4gICAgICB0eXBlOiBQYWdlQ2hhbmdlVHlwZS5MaW1pdENoYW5nZWQsXG4gICAgICBwYXlsb2FkOiBsaW1pdCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBwYWdlIGlzIGFjdGl2YXRlIHBhZ2VcbiAgICpcbiAgICogQHBhcmFtIHBhZ2VcbiAgICovXG4gIHB1YmxpYyBpc0FjdGl2ZShwYWdlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBhZ2UgPT09IHRoaXMucGFnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHbyB0byBwYWdlXG4gICAqXG4gICAqIEBwYXJhbSBwYWdlXG4gICAqL1xuICBwdWJsaWMgZ29Ub1BhZ2UocGFnZSkge1xuICAgIGlmIChwYWdlID49IDEgJiYgdGhpcy5wYWdlICE9PSBwYWdlKSB7XG4gICAgICB0aGlzLnBhZ2UgPSBwYWdlO1xuXG4gICAgICB0aGlzLl91cGRhdGVPZmZzZXQoKTtcblxuICAgICAgdGhpcy5fcGFnZUNoYW5nZWQkLm5leHQoe1xuICAgICAgICB0eXBlOiBQYWdlQ2hhbmdlVHlwZS5EZWZhdWx0LFxuICAgICAgICBwYXlsb2FkOiBwYWdlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHBhZ2luZyBsaWtlIGl0IHdhcyBqdXN0IGluaXRpYWxpemVkXG4gICAqL1xuICBwdWJsaWMgcmVzZXRQYWdpbmcoKSB7XG4gICAgdGhpcy5wYWdlID0gMTtcbiAgICB0aGlzLm9mZnNldCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogR28gdG8gbmV4dCBwYWdlXG4gICAqL1xuICBwdWJsaWMgZ29OZXh0KCkge1xuICAgIGlmICh0aGlzLmhhc05leHRQYWdlKSB7XG4gICAgICB0aGlzLnBhZ2UrKztcblxuICAgICAgdGhpcy5fdXBkYXRlT2Zmc2V0KCk7XG5cbiAgICAgIHRoaXMuX3BhZ2VDaGFuZ2VkJC5uZXh0KHtcbiAgICAgICAgdHlwZTogUGFnZUNoYW5nZVR5cGUuRGVmYXVsdCxcbiAgICAgICAgcGF5bG9hZDogdGhpcy5wYWdlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdvIHRvIGZpcnN0IHBhZ2VcbiAgICovXG4gIHB1YmxpYyBnb0ZpcnN0KCkge1xuICAgIGlmICh0aGlzLnBhZ2UgPiAxKSB7XG4gICAgICB0aGlzLnBhZ2UgPSAxO1xuXG4gICAgICB0aGlzLl91cGRhdGVPZmZzZXQoKTtcblxuICAgICAgdGhpcy5fcGFnZUNoYW5nZWQkLm5leHQoe1xuICAgICAgICB0eXBlOiBQYWdlQ2hhbmdlVHlwZS5EZWZhdWx0LFxuICAgICAgICBwYXlsb2FkOiB0aGlzLnBhZ2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR28gdG8gcHJldiBwYWdlXG4gICAqL1xuICBwdWJsaWMgZ29QcmV2KCkge1xuICAgIGlmICh0aGlzLnBhZ2UgPiAxKSB7XG4gICAgICB0aGlzLnBhZ2UtLTtcblxuICAgICAgdGhpcy5fdXBkYXRlT2Zmc2V0KCk7XG5cbiAgICAgIHRoaXMuX3BhZ2VDaGFuZ2VkJC5uZXh0KHtcbiAgICAgICAgdHlwZTogUGFnZUNoYW5nZVR5cGUuRGVmYXVsdCxcbiAgICAgICAgcGF5bG9hZDogdGhpcy5wYWdlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdvIHRvIGxhc3QgcGFnZVxuICAgKi9cbiAgcHVibGljIGdvTGFzdCgpIHtcbiAgICBpZiAodGhpcy5wYWdlICE9PSB0aGlzLnBhZ2VzKSB7XG4gICAgICB0aGlzLnBhZ2UgPSB0aGlzLnBhZ2VzO1xuXG4gICAgICB0aGlzLl91cGRhdGVPZmZzZXQoKTtcblxuICAgICAgdGhpcy5fcGFnZUNoYW5nZWQkLm5leHQoe1xuICAgICAgICB0eXBlOiBQYWdlQ2hhbmdlVHlwZS5EZWZhdWx0LFxuICAgICAgICBwYXlsb2FkOiB0aGlzLnBhZ2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGNvdW50IG9mIGRlbGV0ZWQgcm93cy4gVGhpcyBjb3VudCB3aWxsIGJlIGFwcGxpZWQgZm9yIG9mZnNldCBjYWxjXG4gICAqXG4gICAqIEBwYXJhbSBjb3VudFxuICAgKi9cbiAgcHVibGljIHJlbW92ZVJvd3MoY291bnQ6IG51bWJlcikge1xuICAgIHRoaXMuX3JlbW92ZWRSb3dzICs9IGNvdW50O1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVBhZ2luYXRpb24oKSB7XG4gICAgdGhpcy5fdXBkYXRlVG90YWxQYWdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lcbiAgICovXG4gIHB1YmxpYyBkZXN0cm95KCkge1xuICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgcGFnaW5nIHN0YXRlXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIHByaXZhdGUgX2Zyb21QYXJhbXMocGFyYW1zKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmxvYWRNb3JlRW5hYmxlZCkge1xuICAgICAgdGhpcy5saW1pdCA9IHBhcmFtcy5saW1pdCA/PyAyNTtcbiAgICB9XG5cbiAgICB0aGlzLnJlY29yZHMgPSBwYXJhbXMucmVjb3JkcztcbiAgICB0aGlzLm1hbnVhbCA9IHBhcmFtcy5tYW51YWw7XG5cbiAgICB0aGlzLnBhZ2VzID0gcGFyYW1zLnBhZ2VzIHx8IDA7XG4gIH1cblxuICAvKipcbiAgICogQ2FsYyBhbmQgdXBkYXRlIG9mZnNldFxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlT2Zmc2V0KCkge1xuICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5saW1pdCAqICh0aGlzLnBhZ2UgLSAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjIGFuZCB1cGRhdGUgdG90YWwgY291bnQgb2YgcGFnZXNcbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZVRvdGFsUGFnZXMoKSB7XG4gICAgdGhpcy5wYWdlcyA9IE1hdGguY2VpbCh0aGlzLnJlY29yZHMgLyB0aGlzLmxpbWl0KTtcbiAgfVxufVxuIl19