@1money/component-ui 0.0.46 → 0.0.47

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 (53) hide show
  1. package/es/components/Table/Table.d.ts +2 -2
  2. package/es/components/Table/Table.js +25 -148
  3. package/es/components/Table/VirtualTable.d.ts +2 -2
  4. package/es/components/Table/VirtualTable.js +30 -143
  5. package/es/components/Table/core/useTableColumns.d.ts +21 -7
  6. package/es/components/Table/core/useTableColumns.js +65 -13
  7. package/es/components/Table/core/useTableDataPipeline.d.ts +13 -6
  8. package/es/components/Table/core/useTableDataPipeline.js +193 -27
  9. package/es/components/Table/core/useTableExpand.d.ts +2 -2
  10. package/es/components/Table/core/useTableSelection.d.ts +3 -5
  11. package/es/components/Table/core/useTableSelection.js +1 -1
  12. package/es/components/Table/core/useTableSetup.d.ts +42 -0
  13. package/es/components/Table/core/useTableSetup.js +175 -0
  14. package/es/components/Table/features/ExpandTrigger.js +2 -1
  15. package/es/components/Table/features/FilterTrigger.d.ts +9 -0
  16. package/es/components/Table/features/FilterTrigger.js +157 -0
  17. package/es/components/Table/features/SelectionColumn.d.ts +3 -2
  18. package/es/components/Table/features/SelectionColumn.js +19 -6
  19. package/es/components/Table/interface.d.ts +102 -21
  20. package/es/components/Table/renderers/BodyCell.d.ts +4 -4
  21. package/es/components/Table/renderers/BodyCell.js +1 -1
  22. package/es/components/Table/renderers/HeaderCell.d.ts +8 -4
  23. package/es/components/Table/renderers/HeaderCell.js +13 -3
  24. package/es/components/Table/style/Table.css +1 -1
  25. package/es/index.css +1 -1
  26. package/lib/components/Table/Table.d.ts +2 -2
  27. package/lib/components/Table/Table.js +24 -150
  28. package/lib/components/Table/VirtualTable.d.ts +2 -2
  29. package/lib/components/Table/VirtualTable.js +28 -144
  30. package/lib/components/Table/core/useTableColumns.d.ts +21 -7
  31. package/lib/components/Table/core/useTableColumns.js +65 -13
  32. package/lib/components/Table/core/useTableDataPipeline.d.ts +13 -6
  33. package/lib/components/Table/core/useTableDataPipeline.js +192 -26
  34. package/lib/components/Table/core/useTableExpand.d.ts +2 -2
  35. package/lib/components/Table/core/useTableSelection.d.ts +3 -5
  36. package/lib/components/Table/core/useTableSelection.js +1 -1
  37. package/lib/components/Table/core/useTableSetup.d.ts +42 -0
  38. package/lib/components/Table/core/useTableSetup.js +184 -0
  39. package/lib/components/Table/features/ExpandTrigger.js +2 -1
  40. package/lib/components/Table/features/FilterTrigger.d.ts +9 -0
  41. package/lib/components/Table/features/FilterTrigger.js +164 -0
  42. package/lib/components/Table/features/SelectionColumn.d.ts +3 -2
  43. package/lib/components/Table/features/SelectionColumn.js +19 -6
  44. package/lib/components/Table/interface.d.ts +102 -21
  45. package/lib/components/Table/renderers/BodyCell.d.ts +4 -4
  46. package/lib/components/Table/renderers/BodyCell.js +1 -1
  47. package/lib/components/Table/renderers/HeaderCell.d.ts +8 -4
  48. package/lib/components/Table/renderers/HeaderCell.js +13 -3
  49. package/lib/components/Table/style/Table.css +1 -1
  50. package/lib/index.css +1 -1
  51. package/package.json +1 -1
  52. package/scripts/mcp-server/examples.generated.json +120 -0
  53. package/scripts/mcp-server/index.generated.json +336 -14
@@ -4,7 +4,7 @@ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
4
4
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
5
5
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
6
6
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
7
- import { useMemo } from 'react';
7
+ import { useMemo, useRef } from 'react';
8
8
  import { useControlledState, useMemoizedFn } from '@1money/hooks';
9
9
  function isColumnGroup(col) {
10
10
  return 'children' in col && Array.isArray(col.children);
@@ -86,17 +86,46 @@ function applySortToData(data, columns, sorterStates) {
86
86
  });
87
87
  return sorted;
88
88
  }
89
- export var applyTablePipeline = function applyTablePipeline(_ref) {
90
- var columns = _ref.columns,
91
- dataSource = _ref.dataSource,
92
- sorter = _ref.sorter,
93
- pagination = _ref.pagination;
89
+ function applyFiltersToData(data, columns, filters) {
90
+ // Resolve which columns have an active filter selection AND a predicate.
91
+ var activeFilters = columns.map(function (col) {
92
+ if (col.key == null) return null;
93
+ var selected = filters[String(col.key)];
94
+ if (!selected || selected.length === 0) return null;
95
+ if (!col.onFilter) return null;
96
+ return {
97
+ onFilter: col.onFilter,
98
+ selected: selected
99
+ };
100
+ }).filter(Boolean);
101
+ if (activeFilters.length === 0) return data;
102
+ return data.filter(function (record) {
103
+ return (
104
+ // Row passes only if EVERY active column has at least one matching selected value.
105
+ activeFilters.every(function (_ref) {
106
+ var onFilter = _ref.onFilter,
107
+ selected = _ref.selected;
108
+ return selected.some(function (value) {
109
+ return onFilter(value, record);
110
+ });
111
+ })
112
+ );
113
+ });
114
+ }
115
+ export var applyTablePipeline = function applyTablePipeline(_ref2) {
116
+ var columns = _ref2.columns,
117
+ dataSource = _ref2.dataSource,
118
+ sorter = _ref2.sorter,
119
+ _ref2$filters = _ref2.filters,
120
+ filters = _ref2$filters === void 0 ? {} : _ref2$filters,
121
+ pagination = _ref2.pagination;
94
122
  var sorterStates = sorter.columnKey != null && sorter.order ? [{
95
123
  columnKey: sorter.columnKey,
96
124
  order: sorter.order
97
125
  }] : [];
98
126
  var leafColumns = flattenColumns(columns);
99
- var sorted = applySortToData(dataSource, leafColumns, sorterStates);
127
+ var filtered = applyFiltersToData(dataSource, leafColumns, filters);
128
+ var sorted = applySortToData(filtered, leafColumns, sorterStates);
100
129
  if (!pagination) {
101
130
  return {
102
131
  currentDataSource: sorted,
@@ -156,24 +185,119 @@ var getControlledSorter = function getControlledSorter(columns) {
156
185
  order: (_a = controlledColumn.sortOrder) !== null && _a !== void 0 ? _a : null
157
186
  };
158
187
  };
159
- export var useTableDataPipeline = function useTableDataPipeline(_ref2) {
160
- var columns = _ref2.columns,
161
- dataSource = _ref2.dataSource,
162
- pagination = _ref2.pagination,
163
- onChange = _ref2.onChange;
188
+ var getInitialFilters = function getInitialFilters(columns) {
189
+ var _a;
190
+ var leaves = flattenColumns(columns);
191
+ var state = {};
192
+ var _iterator4 = _createForOfIteratorHelper(leaves),
193
+ _step4;
194
+ try {
195
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
196
+ var col = _step4.value;
197
+ if (col.key == null) continue;
198
+ var initial = (_a = col.defaultFilteredValue) !== null && _a !== void 0 ? _a : col.filteredValue;
199
+ if (initial !== undefined) {
200
+ state[String(col.key)] = initial !== null && initial !== void 0 ? initial : null;
201
+ }
202
+ }
203
+ } catch (err) {
204
+ _iterator4.e(err);
205
+ } finally {
206
+ _iterator4.f();
207
+ }
208
+ return state;
209
+ };
210
+ var getControlledFilters = function getControlledFilters(columns) {
211
+ var leaves = flattenColumns(columns);
212
+ var hasControlled = false;
213
+ var state = {};
214
+ var _iterator5 = _createForOfIteratorHelper(leaves),
215
+ _step5;
216
+ try {
217
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
218
+ var col = _step5.value;
219
+ if (col.key == null) continue;
220
+ if (col.filteredValue !== undefined) {
221
+ hasControlled = true;
222
+ state[String(col.key)] = col.filteredValue;
223
+ }
224
+ }
225
+ } catch (err) {
226
+ _iterator5.e(err);
227
+ } finally {
228
+ _iterator5.f();
229
+ }
230
+ return hasControlled ? state : undefined;
231
+ };
232
+ /**
233
+ * Returns a value whose reference is preserved across renders as long as the
234
+ * shallow contents are unchanged (per `equal`). Used to stabilise the derived
235
+ * controlled candidates fed to `useControlledState` — they would otherwise be
236
+ * fresh objects every render and thrash the hook's internal `useLayoutEffect`.
237
+ */
238
+ function useStableRef(value, equal) {
239
+ var ref = useRef(value);
240
+ if (!equal(ref.current, value)) {
241
+ ref.current = value;
242
+ }
243
+ return ref.current;
244
+ }
245
+ function sorterEqual(a, b) {
246
+ if (a === b) return true;
247
+ if (!a || !b) return false;
248
+ return a.columnKey === b.columnKey && a.order === b.order;
249
+ }
250
+ function filterValueEqual(a, b) {
251
+ if (a === b) return true;
252
+ if (!a || !b) return false;
253
+ if (a.length !== b.length) return false;
254
+ for (var i = 0; i < a.length; i++) {
255
+ if (a[i] !== b[i]) return false;
256
+ }
257
+ return true;
258
+ }
259
+ function filtersEqual(a, b) {
260
+ if (a === b) return true;
261
+ if (!a || !b) return false;
262
+ var keysA = Object.keys(a);
263
+ var keysB = Object.keys(b);
264
+ if (keysA.length !== keysB.length) return false;
265
+ for (var _i = 0, _keysA = keysA; _i < _keysA.length; _i++) {
266
+ var key = _keysA[_i];
267
+ if (!filterValueEqual(a[key], b[key])) return false;
268
+ }
269
+ return true;
270
+ }
271
+ export var useTableDataPipeline = function useTableDataPipeline(_ref3) {
272
+ var columns = _ref3.columns,
273
+ dataSource = _ref3.dataSource,
274
+ pagination = _ref3.pagination,
275
+ onChange = _ref3.onChange;
164
276
  var _a, _b, _c, _d;
165
- var _useControlledState = useControlledState(getInitialSorter(columns), getControlledSorter(columns)),
277
+ // Sorter / filters are "derived controlled" — the controlled value is built
278
+ // by scanning column props (`sortOrder` / `filteredValue`), so `getControlled*`
279
+ // returns a fresh object every render even when the underlying inputs are
280
+ // unchanged. Without stabilisation, `useControlledState`'s internal
281
+ // `useLayoutEffect([value])` would re-sync on every render → infinite loop.
282
+ // Pin the reference via a shallow-equal ref.
283
+ var controlledSorter = useStableRef(getControlledSorter(columns), sorterEqual);
284
+ var controlledFilters = useStableRef(getControlledFilters(columns), filtersEqual);
285
+ var _useControlledState = useControlledState(getInitialSorter(columns), controlledSorter),
166
286
  _useControlledState2 = _slicedToArray(_useControlledState, 2),
167
287
  sorter = _useControlledState2[0],
168
288
  setSorter = _useControlledState2[1];
169
- var _useControlledState3 = useControlledState(pagination === false ? 1 : (_b = (_a = pagination === null || pagination === void 0 ? void 0 : pagination.defaultCurrent) !== null && _a !== void 0 ? _a : pagination === null || pagination === void 0 ? void 0 : pagination.current) !== null && _b !== void 0 ? _b : 1, pagination === false ? undefined : pagination === null || pagination === void 0 ? void 0 : pagination.current),
289
+ var _useControlledState3 = useControlledState(getInitialFilters(columns), controlledFilters),
170
290
  _useControlledState4 = _slicedToArray(_useControlledState3, 2),
171
- current = _useControlledState4[0],
172
- setCurrent = _useControlledState4[1];
173
- var _useControlledState5 = useControlledState(pagination === false ? 10 : (_d = (_c = pagination === null || pagination === void 0 ? void 0 : pagination.defaultPageSize) !== null && _c !== void 0 ? _c : pagination === null || pagination === void 0 ? void 0 : pagination.pageSize) !== null && _d !== void 0 ? _d : 10, pagination === false ? undefined : pagination === null || pagination === void 0 ? void 0 : pagination.pageSize),
291
+ filters = _useControlledState4[0],
292
+ setFilters = _useControlledState4[1];
293
+ var _useControlledState5 = useControlledState(pagination === false ? 1 : (_b = (_a = pagination === null || pagination === void 0 ? void 0 : pagination.defaultCurrent) !== null && _a !== void 0 ? _a : pagination === null || pagination === void 0 ? void 0 : pagination.current) !== null && _b !== void 0 ? _b : 1, pagination === false ? undefined : pagination === null || pagination === void 0 ? void 0 : pagination.current),
174
294
  _useControlledState6 = _slicedToArray(_useControlledState5, 2),
175
- pageSize = _useControlledState6[0],
176
- setPageSize = _useControlledState6[1];
295
+ current = _useControlledState6[0],
296
+ setCurrent = _useControlledState6[1];
297
+ var _useControlledState7 = useControlledState(pagination === false ? 10 : (_d = (_c = pagination === null || pagination === void 0 ? void 0 : pagination.defaultPageSize) !== null && _c !== void 0 ? _c : pagination === null || pagination === void 0 ? void 0 : pagination.pageSize) !== null && _d !== void 0 ? _d : 10, pagination === false ? undefined : pagination === null || pagination === void 0 ? void 0 : pagination.pageSize),
298
+ _useControlledState8 = _slicedToArray(_useControlledState7, 2),
299
+ pageSize = _useControlledState8[0],
300
+ setPageSize = _useControlledState8[1];
177
301
  var mergedPagination = pagination === false ? false : {
178
302
  current: current,
179
303
  pageSize: pageSize
@@ -201,9 +325,19 @@ export var useTableDataPipeline = function useTableDataPipeline(_ref2) {
201
325
  columns: columns,
202
326
  dataSource: dataSource,
203
327
  sorter: sorter,
328
+ filters: filters,
204
329
  pagination: mergedPagination
205
330
  });
206
- }, [columns, dataSource, sorter, mergedPagination]);
331
+ }, [columns, dataSource, sorter, filters, mergedPagination]);
332
+ var emitChange = useMemoizedFn(function (nextDataSource, action, nextState) {
333
+ onChange === null || onChange === void 0 ? void 0 : onChange({
334
+ currentDataSource: nextDataSource,
335
+ action: action,
336
+ sorter: nextState.sorter,
337
+ filters: nextState.filters,
338
+ pagination: nextState.pagination
339
+ });
340
+ });
207
341
  // useMemoizedFn: stable ref, always calls latest closure — no stale deps risk
208
342
  var wrappedSetSorter = useMemoizedFn(function (updater) {
209
343
  var nextSorter = typeof updater === 'function' ? updater(sorter) : updater;
@@ -221,11 +355,39 @@ export var useTableDataPipeline = function useTableDataPipeline(_ref2) {
221
355
  columns: columns,
222
356
  dataSource: dataSource,
223
357
  sorter: nextSorter,
358
+ filters: filters,
224
359
  pagination: resetPagination
225
360
  });
226
- onChange({
227
- currentDataSource: nextResult.currentDataSource,
228
- action: 'sort'
361
+ emitChange(nextResult.currentDataSource, 'sort', {
362
+ sorter: nextSorter,
363
+ filters: filters,
364
+ pagination: resetPagination
365
+ });
366
+ }
367
+ });
368
+ var wrappedSetFilters = useMemoizedFn(function (updater) {
369
+ var nextFilters = typeof updater === 'function' ? updater(filters) : updater;
370
+ setFilters(nextFilters);
371
+ // Reset pagination to page 1 when filters change
372
+ if (mergedPagination !== false) {
373
+ setCurrent(1);
374
+ }
375
+ if (onChange) {
376
+ var resetPagination = mergedPagination === false ? false : {
377
+ current: 1,
378
+ pageSize: pageSize
379
+ };
380
+ var nextResult = applyTablePipeline({
381
+ columns: columns,
382
+ dataSource: dataSource,
383
+ sorter: sorter,
384
+ filters: nextFilters,
385
+ pagination: resetPagination
386
+ });
387
+ emitChange(nextResult.currentDataSource, 'filter', {
388
+ sorter: sorter,
389
+ filters: nextFilters,
390
+ pagination: resetPagination
229
391
  });
230
392
  }
231
393
  });
@@ -243,20 +405,24 @@ export var useTableDataPipeline = function useTableDataPipeline(_ref2) {
243
405
  columns: columns,
244
406
  dataSource: dataSource,
245
407
  sorter: sorter,
408
+ filters: filters,
246
409
  pagination: nextValue
247
410
  });
248
- onChange({
249
- currentDataSource: nextResult.currentDataSource,
250
- action: 'paginate'
411
+ emitChange(nextResult.currentDataSource, 'paginate', {
412
+ sorter: sorter,
413
+ filters: filters,
414
+ pagination: nextValue
251
415
  });
252
416
  }
253
417
  });
254
418
  return Object.assign(Object.assign({}, result), {
255
419
  sorter: sorter,
256
420
  sorterStates: sorterStates,
421
+ filters: filters,
257
422
  pagination: mergedPagination,
258
423
  setSorter: wrappedSetSorter,
424
+ setFilters: wrappedSetFilters,
259
425
  setPagination: wrappedSetPagination
260
426
  });
261
427
  };
262
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvc3JjL2NvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZURhdGFQaXBlbGluZS50cyIsImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZURhdGFQaXBlbGluZS5qcyJdLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlQ29udHJvbGxlZFN0YXRlIiwidXNlTWVtb2l6ZWRGbiIsImlzQ29sdW1uR3JvdXAiLCJjb2wiLCJBcnJheSIsImlzQXJyYXkiLCJjaGlsZHJlbiIsImZsYXR0ZW5Db2x1bW5zIiwiY29sdW1ucyIsInJlc3VsdCIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsInB1c2giLCJhcHBseSIsIl90b0NvbnN1bWFibGVBcnJheSIsImVyciIsImUiLCJmIiwiZ2V0U29ydEZ1bmN0aW9uIiwic29ydGVyIiwiX3R5cGVvZiIsImNvbXBhcmUiLCJnZXRNdWx0aXBsZVByaW9yaXR5IiwiY29sdW1uIiwibXVsdGlwbGUiLCJhcHBseVNvcnRUb0RhdGEiLCJkYXRhIiwic29ydGVyU3RhdGVzIiwibGVuZ3RoIiwic29ydGVkIiwicnVubmluZ1NvcnRlcnMiLCJtYXAiLCJzdGF0ZSIsImZpbmQiLCJrZXkiLCJjb2x1bW5LZXkiLCJjb21wYXJlRm4iLCJwcmlvcml0eSIsIm9yZGVyIiwiZmlsdGVyIiwiQm9vbGVhbiIsInNvcnQiLCJhIiwiYiIsImFwIiwiYnAiLCJyZWNvcmQxIiwicmVjb3JkMiIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfc3RlcDIkdmFsdWUiLCJhcHBseVRhYmxlUGlwZWxpbmUiLCJfcmVmIiwiZGF0YVNvdXJjZSIsInBhZ2luYXRpb24iLCJsZWFmQ29sdW1ucyIsImN1cnJlbnREYXRhU291cmNlIiwidG90YWwiLCJzdGFydCIsImN1cnJlbnQiLCJwYWdlU2l6ZSIsImVuZCIsInNsaWNlIiwiY29sbGVjdFNvcnRlclN0YXRlcyIsIl9hIiwibGVhdmVzIiwic3RhdGVzIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsInNvcnRPcmRlciIsImRlZmF1bHRTb3J0T3JkZXIiLCJnZXRJbml0aWFsU29ydGVyIiwiZ2V0Q29udHJvbGxlZFNvcnRlciIsImNvbnRyb2xsZWRDb2x1bW4iLCJ1bmRlZmluZWQiLCJ1c2VUYWJsZURhdGFQaXBlbGluZSIsIl9yZWYyIiwib25DaGFuZ2UiLCJfYiIsIl9jIiwiX2QiLCJfdXNlQ29udHJvbGxlZFN0YXRlIiwiX3VzZUNvbnRyb2xsZWRTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNldFNvcnRlciIsIl91c2VDb250cm9sbGVkU3RhdGUzIiwiZGVmYXVsdEN1cnJlbnQiLCJfdXNlQ29udHJvbGxlZFN0YXRlNCIsInNldEN1cnJlbnQiLCJfdXNlQ29udHJvbGxlZFN0YXRlNSIsImRlZmF1bHRQYWdlU2l6ZSIsIl91c2VDb250cm9sbGVkU3RhdGU2Iiwic2V0UGFnZVNpemUiLCJtZXJnZWRQYWdpbmF0aW9uIiwicHJpbWFyeSIsImFkZGl0aW9uYWwiLCJjb25jYXQiLCJ3cmFwcGVkU2V0U29ydGVyIiwidXBkYXRlciIsIm5leHRTb3J0ZXIiLCJyZXNldFBhZ2luYXRpb24iLCJuZXh0UmVzdWx0IiwiYWN0aW9uIiwid3JhcHBlZFNldFBhZ2luYXRpb24iLCJjdXJyZW50VmFsdWUiLCJuZXh0VmFsdWUiLCJPYmplY3QiLCJhc3NpZ24iLCJzZXRQYWdpbmF0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxTQUFTQSxPQUFPLFFBQVEsT0FBTztBQUMvQixTQUFTQyxrQkFBa0IsRUFBRUMsYUFBYSxRQUFRLGVBQWU7QUFJakUsU0FBU0MsYUFBYUEsQ0FBSUMsR0FBdUIsRUFBQTtFQUMvQyxPQUFPLFVBQVUsSUFBSUEsR0FBRyxJQUFJQyxLQUFLLENBQUNDLE9BQU8sQ0FBRUYsR0FBMkIsQ0FBQ0csUUFBUSxDQUFDO0FBQ2xGO0FBRUEsU0FBU0MsY0FBY0EsQ0FBSUMsT0FBNkIsRUFBQTtFQUN0RCxJQUFN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YSxDQUN4QyxVQUNFc0csT0FDa0csRUFDaEc7SUFDRixJQUFJNUMsVUFBVSxLQUFLLEtBQUssRUFBRTtJQUUxQixJQUFNa0QsWUFBWSxHQUFHO01BQUU3QyxPQUFPLEVBQVBBLE9BQU87TUFBRUMsUUFBUSxFQUFSQTtJQUFRLENBQUU7SUFDMUMsSUFBTTZDLFNBQVMsR0FBRyxPQUFPUCxPQUFPLEtBQUssVUFBVSxHQUFHQSxPQUFPLENBQUNNLFlBQVksQ0FBQyxHQUFHTixPQUFPO0lBRWpGVixVQUFVLENBQUNpQixTQUFTLENBQUM5QyxPQUFPLENBQUM7SUFDN0JpQyxXQUFXLENBQUNhLFNBQVMsQ0FBQzdDLFFBQVEsQ0FBQztJQUUvQixJQUFJaUIsUUFBUSxFQUFFO01BQ1osSUFBTXdCLFVBQVUsR0FBR2xELGtCQUFrQixDQUFDO1FBQ3BDaEQsT0FBTyxFQUFQQSxPQUFPO1FBQ1BrRCxVQUFVLEVBQVZBLFVBQVU7UUFDVmxDLE1BQU0sRUFBTkEsTUFBTTtRQUNObUMsVUFBVSxFQUFFbUQ7TUN0R1YsQ0R1R0gsQ0FBQztNQUNGNUIsUUFBUSxDQUFDO1FBQUVyQixpQkFBaUIsRUFBRTZDLFVBQVUsQ0FBQzdDLGlCQUFpQjtRQUFFOEMsTUFBTSxFQUFFO01BQVUsQ0FBRSxDQUFDO0lBQ25GO0VBQ0YsQ0FBQyxDQUNGO0VBRUQsT0FBQUksTUFBQSxDQUFBQyxNQUFBLENBQUFELE1BQUEsQ0FBQUMsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUNLdkcsTUFBTSxDQUFBLEVBQUE7SUFDVGUsTUFBTSxFQUFOQSxNQUFNO0lBQ05RLFlBQVksRUFBWkEsWUFBWTtJQUNaMkIsVUFBVSxFQUFFdUMsZ0JBQWdCO0lBQzVCVCxTQUFTLEVBQUVhLGdCQUFnQjtJQUMzQlcsYUFBYSxFQUFFTDtFQUFvQixDQUFBLENBQUE7QUFFdkMsQ0FBQyIsImZpbGUiOiJjb21wb25lbnRzL1RhYmxlL2NvcmUvdXNlVGFibGVEYXRhUGlwZWxpbmUuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVkU3RhdGUsIHVzZU1lbW9pemVkRm4gfSBmcm9tICdAMW1vbmV5L2hvb2tzJztcbmZ1bmN0aW9uIGlzQ29sdW1uR3JvdXAoY29sKSB7XG4gICAgcmV0dXJuICdjaGlsZHJlbicgaW4gY29sICYmIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKTtcbn1cbmZ1bmN0aW9uIGZsYXR0ZW5Db2x1bW5zKGNvbHVtbnMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICAgIGlmIChpc0NvbHVtbkdyb3VwKGNvbCkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLmZsYXR0ZW5Db2x1bW5zKGNvbC5jaGlsZHJlbikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goY29sKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gZ2V0U29ydEZ1bmN0aW9uKHNvcnRlcikge1xuICAgIGlmICh0eXBlb2Ygc29ydGVyID09PSAnZnVuY3Rpb24nKVxuICAgICAgICByZXR1cm4gc29ydGVyO1xuICAgIGlmIChzb3J0ZXIgJiYgdHlwZW9mIHNvcnRlciA9PT0gJ29iamVjdCcgJiYgJ2NvbXBhcmUnIGluIHNvcnRlcilcbiAgICAgICAgcmV0dXJuIHNvcnRlci5jb21wYXJlO1xuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldE11bHRpcGxlUHJpb3JpdHkoY29sdW1uKSB7XG4gICAgaWYgKGNvbHVtbi5zb3J0ZXIgJiYgdHlwZW9mIGNvbHVtbi5zb3J0ZXIgPT09ICdvYmplY3QnICYmICdtdWx0aXBsZScgaW4gY29sdW1uLnNvcnRlcikge1xuICAgICAgICByZXR1cm4gY29sdW1uLnNvcnRlci5tdWx0aXBsZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gYXBwbHlTb3J0VG9EYXRhKGRhdGEsIGNvbHVtbnMsIHNvcnRlclN0YXRlcykge1xuICAgIGlmIChzb3J0ZXJTdGF0ZXMubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4uZGF0YV07XG4gICAgY29uc3QgcnVubmluZ1NvcnRlcnMgPSBzb3J0ZXJTdGF0ZXNcbiAgICAgICAgLm1hcCgoc3RhdGUpID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5rZXkgPT09IHN0YXRlLmNvbHVtbktleSk7XG4gICAgICAgIGlmICghY29sdW1uKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVGbiA9IGdldFNvcnRGdW5jdGlvbihjb2x1bW4uc29ydGVyKTtcbiAgICAgICAgaWYgKCFjb21wYXJlRm4pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgcHJpb3JpdHkgPSBnZXRNdWx0aXBsZVByaW9yaXR5KGNvbHVtbik7XG4gICAgICAgIHJldHVybiB7IGNvbXBhcmVGbiwgb3JkZXI6IHN0YXRlLm9yZGVyLCBwcmlvcml0eSB9O1xuICAgIH0pXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgaWYgKHJ1bm5pbmdTb3J0ZXJzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgLy8gSGlnaGVyIHByaW9yaXR5IG51bWJlciA9IGNvbXBhcmVkIGZpcnN0XG4gICAgcnVubmluZ1NvcnRlcnMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCBhcCA9IHR5cGVvZiBhLnByaW9yaXR5ID09PSAnbnVtYmVyJyA/IGEucHJpb3JpdHkgOiAwO1xuICAgICAgICBjb25zdCBicCA9IHR5cGVvZiBiLnByaW9yaXR5ID09PSAnbnVtYmVyJyA/IGIucHJpb3JpdHkgOiAwO1xuICAgICAgICByZXR1cm4gYnAgLSBhcDtcbiAgICB9KTtcbiAgICBzb3J0ZWQuc29ydCgocmVjb3JkMSwgcmVjb3JkMikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHsgY29tcGFyZUZuLCBvcmRlciB9IG9mIHJ1bm5pbmdTb3J0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb21wYXJlRm4ocmVjb3JkMSwgcmVjb3JkMik7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yZGVyID09PSAnYXNjZW5kJyA/IHJlc3VsdCA6IC1yZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNvcnRlZDtcbn1cbmV4cG9ydCBjb25zdCBhcHBseVRhYmxlUGlwZWxpbmUgPSAoeyBjb2x1bW5zLCBkYXRhU291cmNlLCBzb3J0ZXIsIHBhZ2luYXRpb24sIH0pID0+IHtcbiAgICBjb25zdCBzb3J0ZXJTdGF0ZXMgPSBzb3J0ZXIuY29sdW1uS2V5ICE9IG51bGwgJiYgc29ydGVyLm9yZGVyXG4gICAgICAgID8gW3sgY29sdW1uS2V5OiBzb3J0ZXIuY29sdW1uS2V5LCBvcmRlcjogc29ydGVyLm9yZGVyIH1dXG4gICAgICAgIDogW107XG4gICAgY29uc3QgbGVhZkNvbHVtbnMgPSBmbGF0dGVuQ29sdW1ucyhjb2x1bW5zKTtcbiAgICBjb25zdCBzb3J0ZWQgPSBhcHBseVNvcnRUb0RhdGEoZGF0YVNvdXJjZSwgbGVhZkNvbHVtbnMsIHNvcnRlclN0YXRlcyk7XG4gICAgaWYgKCFwYWdpbmF0aW9uKSB7XG4gICAgICAgIHJldHVybiB7IGN1cnJlbnREYXRhU291cmNlOiBzb3J0ZWQsIHRvdGFsOiBzb3J0ZWQubGVuZ3RoIH07XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0ID0gKHBhZ2luYXRpb24uY3VycmVudCAtIDEpICogcGFnaW5hdGlvbi5wYWdlU2l6ZTtcbiAgICBjb25zdCBlbmQgPSBzdGFydCArIHBhZ2luYXRpb24ucGFnZVNpemU7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudERhdGFTb3VyY2U6IHNvcnRlZC5zbGljZShzdGFydCwgZW5kKSxcbiAgICAgICAgdG90YWw6IHNvcnRlZC5sZW5ndGgsXG4gICAgfTtcbn07XG5mdW5jdGlvbiBjb2xsZWN0U29ydGVyU3RhdGVzKGNvbHVtbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgbGVhdmVzID0gZmxhdHRlbkNvbHVtbnMoY29sdW1ucyk7XG4gICAgY29uc3Qgc3RhdGVzID0gW107XG4gICAgZm9yIChjb25zdCBjb2wgb2YgbGVhdmVzKSB7XG4gICAgICAgIGNvbnN0IG9yZGVyID0gKF9hID0gY29sLnNvcnRPcmRlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29sLmRlZmF1bHRTb3J0T3JkZXI7XG4gICAgICAgIGlmIChjb2wua2V5ICE9IG51bGwgJiYgb3JkZXIpIHtcbiAgICAgICAgICAgIHN0YXRlcy5wdXNoKHsgY29sdW1uS2V5OiBjb2wua2V5LCBvcmRlciB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RhdGVzO1xufVxuY29uc3QgZ2V0SW5pdGlhbFNvcnRlciA9IChjb2x1bW5zKSA9PiB7XG4gICAgY29uc3Qgc3RhdGVzID0gY29sbGVjdFNvcnRlclN0YXRlcyhjb2x1bW5zKTtcbiAgICBpZiAoc3RhdGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIHJldHVybiB7IGNvbHVtbktleTogc3RhdGVzWzBdLmNvbHVtbktleSwgb3JkZXI6IHN0YXRlc1swXS5vcmRlciB9O1xufTtcbmNvbnN0IGdldENvbnRyb2xsZWRTb3J0ZXIgPSAoY29sdW1ucykgPT4ge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBsZWF2ZXMgPSBmbGF0dGVuQ29sdW1ucyhjb2x1bW5zKTtcbiAgICBjb25zdCBjb250cm9sbGVkQ29sdW1uID0gbGVhdmVzLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLnNvcnRPcmRlciAhPT0gdW5kZWZpbmVkKTtcbiAgICBpZiAoIWNvbnRyb2xsZWRDb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uS2V5OiBjb250cm9sbGVkQ29sdW1uLmtleSxcbiAgICAgICAgb3JkZXI6IChfYSA9IGNvbnRyb2xsZWRDb2x1bW4uc29ydE9yZGVyKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsLFxuICAgIH07XG59O1xuZXhwb3J0IGNvbnN0IHVzZVRhYmxlRGF0YVBpcGVsaW5lID0gKHsgY29sdW1ucywgZGF0YVNvdXJjZSwgcGFnaW5hdGlvbiwgb25DaGFuZ2UsIH0pID0+IHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgY29uc3QgW3NvcnRlciwgc2V0U29ydGVyXSA9IHVzZUNvbnRyb2xsZWRTdGF0ZShnZXRJbml0aWFsU29ydGVyKGNvbHVtbnMpLCBnZXRDb250cm9sbGVkU29ydGVyKGNvbHVtbnMpKTtcbiAgICBjb25zdCBbY3VycmVudCwgc2V0Q3VycmVudF0gPSB1c2VDb250cm9sbGVkU3RhdGUocGFnaW5hdGlvbiA9PT0gZmFsc2UgPyAxIDogKChfYiA9IChfYSA9IHBhZ2luYXRpb24gPT09IG51bGwgfHwgcGFnaW5hdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFnaW5hdGlvbi5kZWZhdWx0Q3VycmVudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcGFnaW5hdGlvbiA9PT0gbnVsbCB8fCBwYWdpbmF0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYWdpbmF0aW9uLmN1cnJlbnQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDEpLCBwYWdpbmF0aW9uID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IHBhZ2luYXRpb24gPT09IG51bGwgfHwgcGFnaW5hdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFnaW5hdGlvbi5jdXJyZW50KTtcbiAgICBjb25zdCBbcGFnZVNpemUsIHNldFBhZ2VTaXplXSA9IHVzZUNvbnRyb2xsZWRTdGF0ZShwYWdpbmF0aW9uID09PSBmYWxzZSA/IDEwIDogKChfZCA9IChfYyA9IHBhZ2luYXRpb24gPT09IG51bGwgfHwgcGFnaW5hdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFnaW5hdGlvbi5kZWZhdWx0UGFnZVNpemUpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IHBhZ2luYXRpb24gPT09IG51bGwgfHwgcGFnaW5hdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFnaW5hdGlvbi5wYWdlU2l6ZSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogMTApLCBwYWdpbmF0aW9uID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IHBhZ2luYXRpb24gPT09IG51bGwgfHwgcGFnaW5hdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFnaW5hdGlvbi5wYWdlU2l6ZSk7XG4gICAgY29uc3QgbWVyZ2VkUGFnaW5hdGlvbiA9IHBhZ2luYXRpb24gPT09IGZhbHNlXG4gICAgICAgID8gZmFsc2VcbiAgICAgICAgOiB7IGN1cnJlbnQsIHBhZ2VTaXplIH07XG4gICAgY29uc3Qgc29ydGVyU3RhdGVzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIC8vIFN0YXJ0IHdpdGggdGhlIHByaW1hcnkgdXNlci10b2dnbGVkIHNvcnRlclxuICAgICAgICBjb25zdCBwcmltYXJ5ID0gc29ydGVyLmNvbHVtbktleSAhPSBudWxsICYmIHNvcnRlci5vcmRlclxuICAgICAgICAgICAgPyBbeyBjb2x1bW5LZXk6IHNvcnRlci5jb2x1bW5LZXksIG9yZGVyOiBzb3J0ZXIub3JkZXIgfV1cbiAgICAgICAgICAgIDogW107XG4gICAgICAgIC8vIENvbGxlY3QgYW55IG90aGVyIGNvbHVtbnMgdGhhdCBoYXZlIGEgY29udHJvbGxlZCBzb3J0T3JkZXIgKGZvciBtdWx0aS1zb3J0KVxuICAgICAgICBjb25zdCBsZWFmQ29sdW1ucyA9IGZsYXR0ZW5Db2x1bW5zKGNvbHVtbnMpO1xuICAgICAgICBjb25zdCBhZGRpdGlvbmFsID0gbGVhZkNvbHVtbnNcbiAgICAgICAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLmtleSAhPSBudWxsICYmIGNvbC5zb3J0T3JkZXIgJiYgY29sLmtleSAhPT0gc29ydGVyLmNvbHVtbktleSlcbiAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gKHsgY29sdW1uS2V5OiBjb2wua2V5LCBvcmRlcjogY29sLnNvcnRPcmRlciB9KSk7XG4gICAgICAgIHJldHVybiBbLi4ucHJpbWFyeSwgLi4uYWRkaXRpb25hbF07XG4gICAgfSwgW3NvcnRlciwgY29sdW1uc10pO1xuICAgIGNvbnN0IHJlc3VsdCA9IHVzZU1lbW8oKCkgPT4gYXBwbHlUYWJsZVBpcGVsaW5lKHtcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgZGF0YVNvdXJjZSxcbiAgICAgICAgc29ydGVyLFxuICAgICAgICBwYWdpbmF0aW9uOiBtZXJnZWRQYWdpbmF0aW9uLFxuICAgIH0pLCBbY29sdW1ucywgZGF0YVNvdXJjZSwgc29ydGVyLCBtZXJnZWRQYWdpbmF0aW9uXSk7XG4gICAgLy8gdXNlTWVtb2l6ZWRGbjogc3RhYmxlIHJlZiwgYWx3YXlzIGNhbGxzIGxhdGVzdCBjbG9zdXJlIOKAlCBubyBzdGFsZSBkZXBzIHJpc2tcbiAgICBjb25zdCB3cmFwcGVkU2V0U29ydGVyID0gdXNlTWVtb2l6ZWRGbigodXBkYXRlcikgPT4ge1xuICAgICAgICBjb25zdCBuZXh0U29ydGVyID0gdHlwZW9mIHVwZGF0ZXIgPT09ICdmdW5jdGlvbicgPyB1cGRhdGVyKHNvcnRlcikgOiB1cGRhdGVyO1xuICAgICAgICBzZXRTb3J0ZXIobmV4dFNvcnRlcik7XG4gICAgICAgIC8vIFJlc2V0IHBhZ2luYXRpb24gdG8gcGFnZSAxIHdoZW4gc29ydGluZyBjaGFuZ2VzXG4gICAgICAgIGlmIChtZXJnZWRQYWdpbmF0aW9uICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgc2V0Q3VycmVudCgxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc2V0UGFnaW5hdGlvbiA9IG1lcmdlZFBhZ2luYXRpb24gPT09IGZhbHNlXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogeyBjdXJyZW50OiAxLCBwYWdlU2l6ZSB9O1xuICAgICAgICAgICAgY29uc3QgbmV4dFJlc3VsdCA9IGFwcGx5VGFibGVQaXBlbGluZSh7XG4gICAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlLFxuICAgICAgICAgICAgICAgIHNvcnRlcjogbmV4dFNvcnRlcixcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiByZXNldFBhZ2luYXRpb24sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG9uQ2hhbmdlKHsgY3VycmVudERhdGFTb3VyY2U6IG5leHRSZXN1bHQuY3VycmVudERhdGFTb3VyY2UsIGFjdGlvbjogJ3NvcnQnIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgd3JhcHBlZFNldFBhZ2luYXRpb24gPSB1c2VNZW1vaXplZEZuKCh1cGRhdGVyKSA9PiB7XG4gICAgICAgIGlmIChwYWdpbmF0aW9uID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0geyBjdXJyZW50LCBwYWdlU2l6ZSB9O1xuICAgICAgICBjb25zdCBuZXh0VmFsdWUgPSB0eXBlb2YgdXBkYXRlciA9PT0gJ2Z1bmN0aW9uJyA/IHVwZGF0ZXIoY3VycmVudFZhbHVlKSA6IHVwZGF0ZXI7XG4gICAgICAgIHNldEN1cnJlbnQobmV4dFZhbHVlLmN1cnJlbnQpO1xuICAgICAgICBzZXRQYWdlU2l6ZShuZXh0VmFsdWUucGFnZVNpemUpO1xuICAgICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRSZXN1bHQgPSBhcHBseVRhYmxlUGlwZWxpbmUoe1xuICAgICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZSxcbiAgICAgICAgICAgICAgICBzb3J0ZXIsXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbjogbmV4dFZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvbkNoYW5nZSh7IGN1cnJlbnREYXRhU291cmNlOiBuZXh0UmVzdWx0LmN1cnJlbnREYXRhU291cmNlLCBhY3Rpb246ICdwYWdpbmF0ZScgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXN1bHQpLCB7IHNvcnRlcixcbiAgICAgICAgc29ydGVyU3RhdGVzLCBwYWdpbmF0aW9uOiBtZXJnZWRQYWdpbmF0aW9uLCBzZXRTb3J0ZXI6IHdyYXBwZWRTZXRTb3J0ZXIsIHNldFBhZ2luYXRpb246IHdyYXBwZWRTZXRQYWdpbmF0aW9uIH0pO1xufTsiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
428
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvc3JjL2NvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZURhdGFQaXBlbGluZS50cyIsImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZURhdGFQaXBlbGluZS5qcyJdLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlUmVmIiwidXNlQ29udHJvbGxlZFN0YXRlIiwidXNlTWVtb2l6ZWRGbiIsImlzQ29sdW1uR3JvdXAiLCJjb2wiLCJBcnJheSIsImlzQXJyYXkiLCJjaGlsZHJlbiIsImZsYXR0ZW5Db2x1bW5zIiwiY29sdW1ucyIsInJlc3VsdCIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsInB1c2giLCJhcHBseSIsIl90b0NvbnN1bWFibGVBcnJheSIsImVyciIsImUiLCJmIiwiZ2V0U29ydEZ1bmN0aW9uIiwic29ydGVyIiwiX3R5cGVvZiIsImNvbXBhcmUiLCJnZXRNdWx0aXBsZVByaW9yaXR5IiwiY29sdW1uIiwibXVsdGlwbGUiLCJhcHBseVNvcnRUb0RhdGEiLCJkYXRhIiwic29ydGVyU3RhdGVzIiwibGVuZ3RoIiwic29ydGVkIiwicnVubmluZ1NvcnRlcnMiLCJtYXAiLCJzdGF0ZSIsImZpbmQiLCJrZXkiLCJjb2x1bW5LZXkiLCJjb21wYXJlRm4iLCJwcmlvcml0eSIsIm9yZGVyIiwiZmlsdGVyIiwiQm9vbGVhbiIsInNvcnQiLCJhIiwiYiIsImFwIiwiYnAiLCJyZWNvcmQxIiwicmVjb3JkMiIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfc3RlcDIkdmFsdWUiLCJhcHBseUZpbHRlcnNUb0RhdGEiLCJmaWx0ZXJzIiwiYWN0aXZlRmlsdGVycyIsInNlbGVjdGVkIiwiU3RyaW5nIiwib25GaWx0ZXIiLCJyZWNvcmQiLCJldmVyeSIsIl9yZWYiLCJzb21lIiwiYXBwbHlUYWJsZVBpcGVsaW5lIiwiX3JlZjIiLCJkYXRhU291cmNlIiwiX3JlZjIkZmlsdGVycyIsInBhZ2luYXRpb24iLCJsZWFmQ29sdW1ucyIsImZpbHRlcmVkIiwiY3VycmVudERhdGFTb3VyY2UiLCJ0b3RhbCIsInN0YXJ0IiwiY3VycmVudCIsInBhZ2VTaXplIiwiZW5kIiwic2xpY2UiLCJjb2xsZWN0U29ydGVyU3RhdGVzIiwiX2EiLCJsZWF2ZXMiLCJzdGF0ZXMiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwic29ydE9yZGVyIiwiZGVmYXVsdFNvcnRPcmRlciIsImdldEluaXRpYWxTb3J0ZXIiLCJnZXRDb250cm9sbGVkU29ydGVyIiwiY29udHJvbGxlZENvbHVtbiIsInVuZGVmaW5lZCIsImdldEluaXRpYWxGaWx0ZXJzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImluaXRpYWwiLCJkZWZhdWx0RmlsdGVyZWRWYWx1ZSIsImZpbHRlcmVkVmFsdWUiLCJnZXRDb250cm9sbGVkRmlsdGVycyIsImhhc0NvbnRyb2xsZWQiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1IiwidXNlU3RhYmxlUmVmIiwiZXF1YWwiLCJyZWYiLCJzb3J0ZXJFcXVhbCIsImZpbHRlclZhbHVlRXF1YWwiLCJpIiwiZmlsdGVyc0VxdWFsIiwia2V5c0EiLCJPYmplY3QiLCJrZXlzIiwia2V5c0IiLCJfaSIsIl9rZXlzQSIsInVzZVRhYmxlRGF0YVBpcGVsaW5lIiwiX3JlZjMiLCJvbkNoYW5nZSIsIl9iIiwiX2MiLCJfZCIsImNvbnRyb2xsZWRTb3J0ZXIiLCJjb250cm9sbGVkRmlsdGVycyIsIl91c2VDb250cm9sbGVkU3RhdGUiLCJfdXNlQ29udHJvbGxlZFN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2V0U29ydGVyIiwiX3VzZUNvbnRyb2xsZWRTdGF0ZTMiLCJfdXNlQ29udHJvbGxlZFN0YXRlNCIsInNldEZpbHRlcnMiLCJfdXNlQ29udHJvbGxlZFN0YXRlNSIsImRlZmF1bHRDdXJyZW50IiwiX3VzZUNvbnRyb2xsZWRTdGF0ZTYiLCJzZXRDdXJyZW50IiwiX3VzZUNvbnRyb2xsZWRTdGF0ZTciLCJkZWZhdWx0UGFnZVNpemUiLCJfdXNlQ29udHJvbGxlZFN0YXRlOCIsInNldFBhZ2VTaXplIiwibWVyZ2VkUGFnaW5hdGlvbiIsInByaW1hcnkiLCJhZGRpdGlvbmFsIiwiY29uY2F0IiwiZW1pdENoYW5nZSIsIm5leHREYXRhU291cmNlIiwiYWN0aW9uIiwibmV4dFN0YXRlIiwid3JhcHBlZFNldFNvcnRlciIsInVwZGF0ZXIiLCJuZXh0U29ydGVyIiwicmVzZXRQYWdpbmF0aW9uIiwibmV4dFJlc3VsdCIsIndyYXBwZWRTZXRGaWx0ZXJzIiwibmV4dEZpbHRlcnMiLCJ3cmFwcGVkU2V0UGFnaW5hdGlvbiIsImN1cnJlbnRWYWx1ZSIsIm5leHRWYWx1ZSIsImFzc2lnbiIsInNldFBhZ2luYXRpb24iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLFNBQVNBLE9BQU8sRUFBRUMsTUFBTSxRQUFRLE9BQU87QUFDdkMsU0FBU0Msa0JBQWtCLEVBQUVDLGFBQWEsUUFBUSxlQUFlO0FBZWpFLFNBQVNDLGFBQWFBLENBQ3BCQyxHQUF1QixFQUFBO0VBRXZCLE9BQU8sVUFBVSxJQUFJQSxHQUFHLElBQUlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFFRixHQUEyQixDQUFDRyxRQUFRLENBQUM7QUFDbEY7QUFFQSxTQUFTQyxjQUFjQSxDQUNyQkMsT0FBNkIsRUFBQTtFQUU3QixJQUFNQyxNQUFNLEdBQXFCLEVBQUU7RUFBQyxJQUFBQyxTQUFBLEdBQUFDLDBCQUFBLENBQ2xCSCxPQUFPO0lBQUFJLEtBQUE7RUFBQTtJQUF6QixLQUFBRixTQUFBLENBQUFHLENBQUEsTUFBQUQsS0FBQSxHQUFBRixTQUFBLENBQUFJLENBQUEsSUFBQUMsSUFBQSxHQUEyQjtNQUFBLElBQWhCWixHQUFHLEdBQUFTLEtBQUEsQ0FBQUksS0FBQTtNQUNaLElBQUlkLGFBQWEsQ0FBQ0MsR0FBRyxDQUFDLEVBQUU7UUFDdEJNLE1BQU0sQ0FBQ1EsSUFBSSxDQUFBQyxLQUFBLENBQVhULE1BQU0sRUFBQVUsa0JBQUEsQ0FBU1osY0FBYyxD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QUNzQixTQUFTLENBQUMvRSxPQUFPLENBQUM7SUFDN0I2RCxXQUFXLENBQUNrQixTQUFTLENBQUM5RSxRQUFRLENBQUM7SUFFL0IsSUFBSXdDLFFBQVEsRUFBRTtNQUNaLElBQU1pQyxVQUFVLEdBQUdwRixrQkFBa0IsQ0FBQztRQUNwQzFELE9BQU8sRUFBUEEsT0FBTztRQUNQNEQsVUFBVSxFQUFWQSxVQUFVO1FBQ1Y1QyxNQUFNLEVBQU5BLE1BQU07UUFDTmlDLE9BQU8sRUFBUEEsT0FBTztRQUNQYSxVQUFVLEVBQUVxRjtNQ3hLVixDRHlLSCxDQUFDO01BQ0ZiLFVBQVUsQ0FBQ1EsVUFBVSxDQUFDN0UsaUJBQWlCLEVBQUUsVUFBVSxFQUFFO1FBQ25EakQsTUFBTSxFQUFOQSxNQUFNO1FBQ05pQyxPQUFPLEVBQVBBLE9BQU87UUFDUGEsVUFBVSxFQUFFcUY7TUN4S1YsQ0R5S0gsQ0FBQztJQUNKO0VBQ0YsQ0FBQyxDQUNGO0VBRUQsT0FBQTdDLE1BQUEsQ0FBQThDLE1BQUEsQ0FBQTlDLE1BQUEsQ0FBQThDLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFDS25KLE1BQU0sQ0FBQSxFQUFBO0lBQ1RlLE1BQU0sRUFBTkEsTUFBTTtJQUNOUSxZQUFZLEVBQVpBLFlBQVk7SUFDWnlCLE9BQU8sRUFBUEEsT0FBTztJQUNQYSxVQUFVLEVBQUVvRSxnQkFBZ0I7SUFDNUJaLFNBQVMsRUFBRW9CLGdCQUFnQjtJQUMzQmpCLFVBQVUsRUFBRXNCLGlCQUFpQjtJQUM3Qk0sYUFBYSxFQUFFSjtFQUFvQixDQUFBLENBQUE7QUFFdkMsQ0FBQyIsImZpbGUiOiJjb21wb25lbnRzL1RhYmxlL2NvcmUvdXNlVGFibGVEYXRhUGlwZWxpbmUuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImltcG9ydCB7IHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZWRTdGF0ZSwgdXNlTWVtb2l6ZWRGbiB9IGZyb20gJ0AxbW9uZXkvaG9va3MnO1xuZnVuY3Rpb24gaXNDb2x1bW5Hcm91cChjb2wpIHtcbiAgICByZXR1cm4gJ2NoaWxkcmVuJyBpbiBjb2wgJiYgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pO1xufVxuZnVuY3Rpb24gZmxhdHRlbkNvbHVtbnMoY29sdW1ucykge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKGlzQ29sdW1uR3JvdXAoY29sKSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uZmxhdHRlbkNvbHVtbnMoY29sLmNoaWxkcmVuKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChjb2wpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXRTb3J0RnVuY3Rpb24oc29ydGVyKSB7XG4gICAgaWYgKHR5cGVvZiBzb3J0ZXIgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiBzb3J0ZXI7XG4gICAgaWYgKHNvcnRlciAmJiB0eXBlb2Ygc29ydGVyID09PSAnb2JqZWN0JyAmJiAnY29tcGFyZScgaW4gc29ydGVyKVxuICAgICAgICByZXR1cm4gc29ydGVyLmNvbXBhcmU7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0TXVsdGlwbGVQcmlvcml0eShjb2x1bW4pIHtcbiAgICBpZiAoY29sdW1uLnNvcnRlciAmJiB0eXBlb2YgY29sdW1uLnNvcnRlciA9PT0gJ29iamVjdCcgJiYgJ211bHRpcGxlJyBpbiBjb2x1bW4uc29ydGVyKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4uc29ydGVyLm11bHRpcGxlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBhcHBseVNvcnRUb0RhdGEoZGF0YSwgY29sdW1ucywgc29ydGVyU3RhdGVzKSB7XG4gICAgaWYgKHNvcnRlclN0YXRlcy5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIGNvbnN0IHNvcnRlZCA9IFsuLi5kYXRhXTtcbiAgICBjb25zdCBydW5uaW5nU29ydGVycyA9IHNvcnRlclN0YXRlc1xuICAgICAgICAubWFwKChzdGF0ZSkgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLmtleSA9PT0gc3RhdGUuY29sdW1uS2V5KTtcbiAgICAgICAgaWYgKCFjb2x1bW4pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgY29tcGFyZUZuID0gZ2V0U29ydEZ1bmN0aW9uKGNvbHVtbi5zb3J0ZXIpO1xuICAgICAgICBpZiAoIWNvbXBhcmVGbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBwcmlvcml0eSA9IGdldE11bHRpcGxlUHJpb3JpdHkoY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIHsgY29tcGFyZUZuLCBvcmRlcjogc3RhdGUub3JkZXIsIHByaW9yaXR5IH07XG4gICAgfSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICBpZiAocnVubmluZ1NvcnRlcnMubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAvLyBIaWdoZXIgcHJpb3JpdHkgbnVtYmVyID0gY29tcGFyZWQgZmlyc3RcbiAgICBydW5uaW5nU29ydGVycy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGFwID0gdHlwZW9mIGEucHJpb3JpdHkgPT09ICdudW1iZXInID8gYS5wcmlvcml0eSA6IDA7XG4gICAgICAgIGNvbnN0IGJwID0gdHlwZW9mIGIucHJpb3JpdHkgPT09ICdudW1iZXInID8gYi5wcmlvcml0eSA6IDA7XG4gICAgICAgIHJldHVybiBicCAtIGFwO1xuICAgIH0pO1xuICAgIHNvcnRlZC5zb3J0KChyZWNvcmQxLCByZWNvcmQyKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgeyBjb21wYXJlRm4sIG9yZGVyIH0gb2YgcnVubmluZ1NvcnRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbXBhcmVGbihyZWNvcmQxLCByZWNvcmQyKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JkZXIgPT09ICdhc2NlbmQnID8gcmVzdWx0IDogLXJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9KTtcbiAgICByZXR1cm4gc29ydGVkO1xufVxuZnVuY3Rpb24gYXBwbHlGaWx0ZXJzVG9EYXRhKGRhdGEsIGNvbHVtbnMsIGZpbHRlcnMpIHtcbiAgICAvLyBSZXNvbHZlIHdoaWNoIGNvbHVtbnMgaGF2ZSBhbiBhY3RpdmUgZmlsdGVyIHNlbGVjdGlvbiBBTkQgYSBwcmVkaWNhdGUuXG4gICAgY29uc3QgYWN0aXZlRmlsdGVycyA9IGNvbHVtbnNcbiAgICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgIGlmIChjb2wua2V5ID09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBmaWx0ZXJzW1N0cmluZyhjb2wua2V5KV07XG4gICAgICAgIGlmICghc2VsZWN0ZWQgfHwgc2VsZWN0ZWQubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmICghY29sLm9uRmlsdGVyKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiB7IG9uRmlsdGVyOiBjb2wub25GaWx0ZXIsIHNlbGVjdGVkIH07XG4gICAgfSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICBpZiAoYWN0aXZlRmlsdGVycy5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIHJldHVybiBkYXRhLmZpbHRlcigocmVjb3JkKSA9PiBcbiAgICAvLyBSb3cgcGFzc2VzIG9ubHkgaWYgRVZFUlkgYWN0aXZlIGNvbHVtbiBoYXMgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIHNlbGVjdGVkIHZhbHVlLlxuICAgIGFjdGl2ZUZpbHRlcnMuZXZlcnkoKHsgb25GaWx0ZXIsIHNlbGVjdGVkIH0pID0+IHNlbGVjdGVkLnNvbWUoKHZhbHVlKSA9PiBvbkZpbHRlcih2YWx1ZSwgcmVjb3JkKSkpKTtcbn1cbmV4cG9ydCBjb25zdCBhcHBseVRhYmxlUGlwZWxpbmUgPSAoeyBjb2x1bW5zLCBkYXRhU291cmNlLCBzb3J0ZXIsIGZpbHRlcnMgPSB7fSwgcGFnaW5hdGlvbiwgfSkgPT4ge1xuICAgIGNvbnN0IHNvcnRlclN0YXRlcyA9IHNvcnRlci5jb2x1bW5LZXkgIT0gbnVsbCAmJiBzb3J0ZXIub3JkZXJcbiAgICAgICAgPyBbeyBjb2x1bW5LZXk6IHNvcnRlci5jb2x1bW5LZXksIG9yZGVyOiBzb3J0ZXIub3JkZXIgfV1cbiAgICAgICAgOiBbXTtcbiAgICBjb25zdCBsZWFmQ29sdW1ucyA9IGZsYXR0ZW5Db2x1bW5zKGNvbHVtbnMpO1xuICAgIGNvbnN0IGZpbHRlcmVkID0gYXBwbHlGaWx0ZXJzVG9EYXRhKGRhdGFTb3VyY2UsIGxlYWZDb2x1bW5zLCBmaWx0ZXJzKTtcbiAgICBjb25zdCBzb3J0ZWQgPSBhcHBseVNvcnRUb0RhdGEoZmlsdGVyZWQsIGxlYWZDb2x1bW5zLCBzb3J0ZXJTdGF0ZXMpO1xuICAgIGlmICghcGFnaW5hdGlvbikge1xuICAgICAgICByZXR1cm4geyBjdXJyZW50RGF0YVNvdXJjZTogc29ydGVkLCB0b3RhbDogc29ydGVkLmxlbmd0aCB9O1xuICAgIH1cbiAgICBjb25zdCBzdGFydCA9IChwYWdpbmF0aW9uLmN1cnJlbnQgLSAxKSAqIHBhZ2luYXRpb24ucGFnZVNpemU7XG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyBwYWdpbmF0aW9uLnBhZ2VTaXplO1xuICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnREYXRhU291cmNlOiBzb3J0ZWQuc2xpY2Uoc3RhcnQsIGVuZCksXG4gICAgICAgIHRvdGFsOiBzb3J0ZWQubGVuZ3RoLFxuICAgIH07XG59O1xuZnVuY3Rpb24gY29sbGVjdFNvcnRlclN0YXRlcyhjb2x1bW5zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGxlYXZlcyA9IGZsYXR0ZW5Db2x1bW5zKGNvbHVtbnMpO1xuICAgIGNvbnN0IHN0YXRlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgY29sIG9mIGxlYXZlcykge1xuICAgICAgICBjb25zdCBvcmRlciA9IChfYSA9IGNvbC5zb3J0T3JkZXIpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGNvbC5kZWZhdWx0U29ydE9yZGVyO1xuICAgICAgICBpZiAoY29sLmtleSAhPSBudWxsICYmIG9yZGVyKSB7XG4gICAgICAgICAgICBzdGF0ZXMucHVzaCh7IGNvbHVtbktleTogY29sLmtleSwgb3JkZXIgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlcztcbn1cbmNvbnN0IGdldEluaXRpYWxTb3J0ZXIgPSAoY29sdW1ucykgPT4ge1xuICAgIGNvbnN0IHN0YXRlcyA9IGNvbGxlY3RTb3J0ZXJTdGF0ZXMoY29sdW1ucyk7XG4gICAgaWYgKHN0YXRlcy5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiB7fTtcbiAgICByZXR1cm4geyBjb2x1bW5LZXk6IHN0YXRlc1swXS5jb2x1bW5LZXksIG9yZGVyOiBzdGF0ZXNbMF0ub3JkZXIgfTtcbn07XG5jb25zdCBnZXRDb250cm9sbGVkU29ydGVyID0gKGNvbHVtbnMpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgbGVhdmVzID0gZmxhdHRlbkNvbHVtbnMoY29sdW1ucyk7XG4gICAgY29uc3QgY29udHJvbGxlZENvbHVtbiA9IGxlYXZlcy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5zb3J0T3JkZXIgIT09IHVuZGVmaW5lZCk7XG4gICAgaWYgKCFjb250cm9sbGVkQ29sdW1uKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbktleTogY29udHJvbGxlZENvbHVtbi5rZXksXG4gICAgICAgIG9yZGVyOiAoX2EgPSBjb250cm9sbGVkQ29sdW1uLnNvcnRPcmRlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbCxcbiAgICB9O1xufTtcbmNvbnN0IGdldEluaXRpYWxGaWx0ZXJzID0gKGNvbHVtbnMpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgbGVhdmVzID0gZmxhdHRlbkNvbHVtbnMoY29sdW1ucyk7XG4gICAgY29uc3Qgc3RhdGUgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBsZWF2ZXMpIHtcbiAgICAgICAgaWYgKGNvbC5rZXkgPT0gbnVsbClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBpbml0aWFsID0gKF9hID0gY29sLmRlZmF1bHRGaWx0ZXJlZFZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBjb2wuZmlsdGVyZWRWYWx1ZTtcbiAgICAgICAgaWYgKGluaXRpYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3RhdGVbU3RyaW5nKGNvbC5rZXkpXSA9IGluaXRpYWwgIT09IG51bGwgJiYgaW5pdGlhbCAhPT0gdm9pZCAwID8gaW5pdGlhbCA6IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlO1xufTtcbmNvbnN0IGdldENvbnRyb2xsZWRGaWx0ZXJzID0gKGNvbHVtbnMpID0+IHtcbiAgICBjb25zdCBsZWF2ZXMgPSBmbGF0dGVuQ29sdW1ucyhjb2x1bW5zKTtcbiAgICBsZXQgaGFzQ29udHJvbGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHN0YXRlID0ge307XG4gICAgZm9yIChjb25zdCBjb2wgb2YgbGVhdmVzKSB7XG4gICAgICAgIGlmIChjb2wua2V5ID09IG51bGwpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKGNvbC5maWx0ZXJlZFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhhc0NvbnRyb2xsZWQgPSB0cnVlO1xuICAgICAgICAgICAgc3RhdGVbU3RyaW5nKGNvbC5rZXkpXSA9IGNvbC5maWx0ZXJlZFZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoYXNDb250cm9sbGVkID8gc3RhdGUgOiB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBSZXR1cm5zIGEgdmFsdWUgd2hvc2UgcmVmZXJlbmNlIGlzIHByZXNlcnZlZCBhY3Jvc3MgcmVuZGVycyBhcyBsb25nIGFzIHRoZVxuICogc2hhbGxvdyBjb250ZW50cyBhcmUgdW5jaGFuZ2VkIChwZXIgYGVxdWFsYCkuIFVzZWQgdG8gc3RhYmlsaXNlIHRoZSBkZXJpdmVkXG4gKiBjb250cm9sbGVkIGNhbmRpZGF0ZXMgZmVkIHRvIGB1c2VDb250cm9sbGVkU3RhdGVgIOKAlCB0aGV5IHdvdWxkIG90aGVyd2lzZSBiZVxuICogZnJlc2ggb2JqZWN0cyBldmVyeSByZW5kZXIgYW5kIHRocmFzaCB0aGUgaG9vaydzIGludGVybmFsIGB1c2VMYXlvdXRFZmZlY3RgLlxuICovXG5mdW5jdGlvbiB1c2VTdGFibGVSZWYodmFsdWUsIGVxdWFsKSB7XG4gICAgY29uc3QgcmVmID0gdXNlUmVmKHZhbHVlKTtcbiAgICBpZiAoIWVxdWFsKHJlZi5jdXJyZW50LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZi5jdXJyZW50O1xufVxuZnVuY3Rpb24gc29ydGVyRXF1YWwoYSwgYikge1xuICAgIGlmIChhID09PSBiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIWEgfHwgIWIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gYS5jb2x1bW5LZXkgPT09IGIuY29sdW1uS2V5ICYmIGEub3JkZXIgPT09IGIub3JkZXI7XG59XG5mdW5jdGlvbiBmaWx0ZXJWYWx1ZUVxdWFsKGEsIGIpIHtcbiAgICBpZiAoYSA9PT0gYilcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKCFhIHx8ICFiKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYVtpXSAhPT0gYltpXSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBmaWx0ZXJzRXF1YWwoYSwgYikge1xuICAgIGlmIChhID09PSBiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIWEgfHwgIWIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICAgIGNvbnN0IGtleXNCID0gT2JqZWN0LmtleXMoYik7XG4gICAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0EpIHtcbiAgICAgICAgaWYgKCFmaWx0ZXJWYWx1ZUVxdWFsKGFba2V5XSwgYltrZXldKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgY29uc3QgdXNlVGFibGVEYXRhUGlwZWxpbmUgPSAoeyBjb2x1bW5zLCBkYXRhU291cmNlLCBwYWdpbmF0aW9uLCBvbkNoYW5nZSwgfSkgPT4ge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAvLyBTb3J0ZXIgLyBmaWx0ZXJzIGFyZSBcImRlcml2ZWQgY29udHJvbGxlZFwiIOKAlCB0aGUgY29udHJvbGxlZCB2YWx1ZSBpcyBidWlsdFxuICAgIC8vIGJ5IHNjYW5uaW5nIGNvbHVtbiBwcm9wcyAoYHNvcnRPcmRlcmAgLyBgZmlsdGVyZWRWYWx1ZWApLCBzbyBgZ2V0Q29udHJvbGxlZCpgXG4gICAgLy8gcmV0dXJucyBhIGZyZXNoIG9iamVjdCBldmVyeSByZW5kZXIgZXZlbiB3aGVuIHRoZSB1bmRlcmx5aW5nIGlucHV0cyBhcmVcbiAgICAvLyB1bmNoYW5nZWQuIFdpdGhvdXQgc3RhYmlsaXNhdGlvbiwgYHVzZUNvbnRyb2xsZWRTdGF0ZWAncyBpbnRlcm5hbFxuICAgIC8vIGB1c2VMYXlvdXRFZmZlY3QoW3ZhbHVlXSlgIHdvdWxkIHJlLXN5bmMgb24gZXZlcnkgcmVuZGVyIOKGkiBpbmZpbml0ZSBsb29wLlxuICAgIC8vIFBpbiB0aGUgcmVmZXJlbmNlIHZpYSBhIHNoYWxsb3ctZXF1YWwgcmVmLlxuICAgIGNvbnN0IGNvbnRyb2xsZWRTb3J0ZXIgPSB1c2VTdGFibGVSZWYoZ2V0Q29udHJvbGxlZFNvcnRlcihjb2x1bW5zKSwgc29ydGVyRXF1YWwpO1xuICAgIGNvbnN0IGNvbnRyb2xsZWRGaWx0ZXJzID0gdXNlU3RhYmxlUmVmKGdldENvbnRyb2xsZWRGaWx0ZXJzKGNvbHVtbnMpLCBmaWx0ZXJzRXF1YWwpO1xuICAgIGNvbnN0IFtzb3J0ZXIsIHNldFNvcnRlcl0gPSB1c2VDb250cm9sbGVkU3RhdGUoZ2V0SW5pdGlhbFNvcnRlcihjb2x1bW5zKSwgY29udHJvbGxlZFNvcnRlcik7XG4gICAgY29uc3QgW2ZpbHRlcnMsIHNldEZpbHRlcnNdID0gdXNlQ29udHJvbGxlZFN0YXRlKGdldEluaXRpYWxGaWx0ZXJzKGNvbHVtbnMpLCBjb250cm9sbGVkRmlsdGVycyk7XG4gICAgY29uc3QgW2N1cnJlbnQsIHNldEN1cnJlbnRdID0gdXNlQ29udHJvbGxlZFN0YXRlKHBhZ2luYXRpb24gPT09IGZhbHNlID8gMSA6ICgoX2IgPSAoX2EgPSBwYWdpbmF0aW9uID09PSBudWxsIHx8IHBhZ2luYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhZ2luYXRpb24uZGVmYXVsdEN1cnJlbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHBhZ2luYXRpb24gPT09IG51bGwgfHwgcGFnaW5hdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFnaW5hdGlvbi5jdXJyZW50KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAxKSwgcGFnaW5hdGlvbiA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBwYWdpbmF0aW9uID09PSBudWxsIHx8IHBhZ2luYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhZ2luYXRpb24uY3VycmVudCk7XG4gICAgY29uc3QgW3BhZ2VTaXplLCBzZXRQYWdlU2l6ZV0gPSB1c2VDb250cm9sbGVkU3RhdGUocGFnaW5hdGlvbiA9PT0gZmFsc2UgPyAxMCA6ICgoX2QgPSAoX2MgPSBwYWdpbmF0aW9uID09PSBudWxsIHx8IHBhZ2luYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhZ2luYXRpb24uZGVmYXVsdFBhZ2VTaXplKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBwYWdpbmF0aW9uID09PSBudWxsIHx8IHBhZ2luYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhZ2luYXRpb24ucGFnZVNpemUpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IDEwKSwgcGFnaW5hdGlvbiA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBwYWdpbmF0aW9uID09PSBudWxsIHx8IHBhZ2luYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhZ2luYXRpb24ucGFnZVNpemUpO1xuICAgIGNvbnN0IG1lcmdlZFBhZ2luYXRpb24gPSBwYWdpbmF0aW9uID09PSBmYWxzZVxuICAgICAgICA/IGZhbHNlXG4gICAgICAgIDogeyBjdXJyZW50LCBwYWdlU2l6ZSB9O1xuICAgIGNvbnN0IHNvcnRlclN0YXRlcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICAvLyBTdGFydCB3aXRoIHRoZSBwcmltYXJ5IHVzZXItdG9nZ2xlZCBzb3J0ZXJcbiAgICAgICAgY29uc3QgcHJpbWFyeSA9IHNvcnRlci5jb2x1bW5LZXkgIT0gbnVsbCAmJiBzb3J0ZXIub3JkZXJcbiAgICAgICAgICAgID8gW3sgY29sdW1uS2V5OiBzb3J0ZXIuY29sdW1uS2V5LCBvcmRlcjogc29ydGVyLm9yZGVyIH1dXG4gICAgICAgICAgICA6IFtdO1xuICAgICAgICAvLyBDb2xsZWN0IGFueSBvdGhlciBjb2x1bW5zIHRoYXQgaGF2ZSBhIGNvbnRyb2xsZWQgc29ydE9yZGVyIChmb3IgbXVsdGktc29ydClcbiAgICAgICAgY29uc3QgbGVhZkNvbHVtbnMgPSBmbGF0dGVuQ29sdW1ucyhjb2x1bW5zKTtcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbCA9IGxlYWZDb2x1bW5zXG4gICAgICAgICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5rZXkgIT0gbnVsbCAmJiBjb2wuc29ydE9yZGVyICYmIGNvbC5rZXkgIT09IHNvcnRlci5jb2x1bW5LZXkpXG4gICAgICAgICAgICAubWFwKChjb2wpID0+ICh7IGNvbHVtbktleTogY29sLmtleSwgb3JkZXI6IGNvbC5zb3J0T3JkZXIgfSkpO1xuICAgICAgICByZXR1cm4gWy4uLnByaW1hcnksIC4uLmFkZGl0aW9uYWxdO1xuICAgIH0sIFtzb3J0ZXIsIGNvbHVtbnNdKTtcbiAgICBjb25zdCByZXN1bHQgPSB1c2VNZW1vKCgpID0+IGFwcGx5VGFibGVQaXBlbGluZSh7XG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgIHNvcnRlcixcbiAgICAgICAgZmlsdGVycyxcbiAgICAgICAgcGFnaW5hdGlvbjogbWVyZ2VkUGFnaW5hdGlvbixcbiAgICB9KSwgW2NvbHVtbnMsIGRhdGFTb3VyY2UsIHNvcnRlciwgZmlsdGVycywgbWVyZ2VkUGFnaW5hdGlvbl0pO1xuICAgIGNvbnN0IGVtaXRDaGFuZ2UgPSB1c2VNZW1vaXplZEZuKChuZXh0RGF0YVNvdXJjZSwgYWN0aW9uLCBuZXh0U3RhdGUpID0+IHtcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKHtcbiAgICAgICAgICAgIGN1cnJlbnREYXRhU291cmNlOiBuZXh0RGF0YVNvdXJjZSxcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIHNvcnRlcjogbmV4dFN0YXRlLnNvcnRlcixcbiAgICAgICAgICAgIGZpbHRlcnM6IG5leHRTdGF0ZS5maWx0ZXJzLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjogbmV4dFN0YXRlLnBhZ2luYXRpb24sXG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIHVzZU1lbW9pemVkRm46IHN0YWJsZSByZWYsIGFsd2F5cyBjYWxscyBsYXRlc3QgY2xvc3VyZSDigJQgbm8gc3RhbGUgZGVwcyByaXNrXG4gICAgY29uc3Qgd3JhcHBlZFNldFNvcnRlciA9IHVzZU1lbW9pemVkRm4oKHVwZGF0ZXIpID0+IHtcbiAgICAgICAgY29uc3QgbmV4dFNvcnRlciA9IHR5cGVvZiB1cGRhdGVyID09PSAnZnVuY3Rpb24nID8gdXBkYXRlcihzb3J0ZXIpIDogdXBkYXRlcjtcbiAgICAgICAgc2V0U29ydGVyKG5leHRTb3J0ZXIpO1xuICAgICAgICAvLyBSZXNldCBwYWdpbmF0aW9uIHRvIHBhZ2UgMSB3aGVuIHNvcnRpbmcgY2hhbmdlc1xuICAgICAgICBpZiAobWVyZ2VkUGFnaW5hdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHNldEN1cnJlbnQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCByZXNldFBhZ2luYXRpb24gPSBtZXJnZWRQYWdpbmF0aW9uID09PSBmYWxzZVxuICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICA6IHsgY3VycmVudDogMSwgcGFnZVNpemUgfTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRSZXN1bHQgPSBhcHBseVRhYmxlUGlwZWxpbmUoe1xuICAgICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZSxcbiAgICAgICAgICAgICAgICBzb3J0ZXI6IG5leHRTb3J0ZXIsXG4gICAgICAgICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiByZXNldFBhZ2luYXRpb24sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVtaXRDaGFuZ2UobmV4dFJlc3VsdC5jdXJyZW50RGF0YVNvdXJjZSwgJ3NvcnQnLCB7XG4gICAgICAgICAgICAgICAgc29ydGVyOiBuZXh0U29ydGVyLFxuICAgICAgICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbjogcmVzZXRQYWdpbmF0aW9uLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB3cmFwcGVkU2V0RmlsdGVycyA9IHVzZU1lbW9pemVkRm4oKHVwZGF0ZXIpID0+IHtcbiAgICAgICAgY29uc3QgbmV4dEZpbHRlcnMgPSB0eXBlb2YgdXBkYXRlciA9PT0gJ2Z1bmN0aW9uJyA/IHVwZGF0ZXIoZmlsdGVycykgOiB1cGRhdGVyO1xuICAgICAgICBzZXRGaWx0ZXJzKG5leHRGaWx0ZXJzKTtcbiAgICAgICAgLy8gUmVzZXQgcGFnaW5hdGlvbiB0byBwYWdlIDEgd2hlbiBmaWx0ZXJzIGNoYW5nZVxuICAgICAgICBpZiAobWVyZ2VkUGFnaW5hdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHNldEN1cnJlbnQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCByZXNldFBhZ2luYXRpb24gPSBtZXJnZWRQYWdpbmF0aW9uID09PSBmYWxzZVxuICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICA6IHsgY3VycmVudDogMSwgcGFnZVNpemUgfTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRSZXN1bHQgPSBhcHBseVRhYmxlUGlwZWxpbmUoe1xuICAgICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZSxcbiAgICAgICAgICAgICAgICBzb3J0ZXIsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogbmV4dEZpbHRlcnMsXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbjogcmVzZXRQYWdpbmF0aW9uLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbWl0Q2hhbmdlKG5leHRSZXN1bHQuY3VycmVudERhdGFTb3VyY2UsICdmaWx0ZXInLCB7XG4gICAgICAgICAgICAgICAgc29ydGVyLFxuICAgICAgICAgICAgICAgIGZpbHRlcnM6IG5leHRGaWx0ZXJzLFxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHJlc2V0UGFnaW5hdGlvbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgd3JhcHBlZFNldFBhZ2luYXRpb24gPSB1c2VNZW1vaXplZEZuKCh1cGRhdGVyKSA9PiB7XG4gICAgICAgIGlmIChwYWdpbmF0aW9uID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0geyBjdXJyZW50LCBwYWdlU2l6ZSB9O1xuICAgICAgICBjb25zdCBuZXh0VmFsdWUgPSB0eXBlb2YgdXBkYXRlciA9PT0gJ2Z1bmN0aW9uJyA/IHVwZGF0ZXIoY3VycmVudFZhbHVlKSA6IHVwZGF0ZXI7XG4gICAgICAgIHNldEN1cnJlbnQobmV4dFZhbHVlLmN1cnJlbnQpO1xuICAgICAgICBzZXRQYWdlU2l6ZShuZXh0VmFsdWUucGFnZVNpemUpO1xuICAgICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRSZXN1bHQgPSBhcHBseVRhYmxlUGlwZWxpbmUoe1xuICAgICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZSxcbiAgICAgICAgICAgICAgICBzb3J0ZXIsXG4gICAgICAgICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiBuZXh0VmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVtaXRDaGFuZ2UobmV4dFJlc3VsdC5jdXJyZW50RGF0YVNvdXJjZSwgJ3BhZ2luYXRlJywge1xuICAgICAgICAgICAgICAgIHNvcnRlcixcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IG5leHRWYWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzdWx0KSwgeyBzb3J0ZXIsXG4gICAgICAgIHNvcnRlclN0YXRlcyxcbiAgICAgICAgZmlsdGVycywgcGFnaW5hdGlvbjogbWVyZ2VkUGFnaW5hdGlvbiwgc2V0U29ydGVyOiB3cmFwcGVkU2V0U29ydGVyLCBzZXRGaWx0ZXJzOiB3cmFwcGVkU2V0RmlsdGVycywgc2V0UGFnaW5hdGlvbjogd3JhcHBlZFNldFBhZ2luYXRpb24gfSk7XG59OyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -1,6 +1,6 @@
1
1
  import type { Key } from 'react';
2
- import type { TableExpandableConfig } from '../interface';
3
- export declare const useTableExpand: <T>({ expandable, }: {
2
+ import type { TableExpandableConfig, TableRecord } from '../interface';
3
+ export declare const useTableExpand: <T extends TableRecord = TableRecord>({ expandable, }: {
4
4
  expandable?: TableExpandableConfig<T>;
5
5
  }) => {
6
6
  mergedExpandedRowKeys: Key[];
@@ -1,15 +1,13 @@
1
1
  import { type Key } from 'react';
2
- import type { TableRowSelection } from '../interface';
3
- export declare const useTableSelection: <T>({ rowSelection, dataSource, currentDataSource, getRowKey, }: {
2
+ import type { TableRecord, TableRowSelection } from '../interface';
3
+ export declare const useTableSelection: <T extends TableRecord = TableRecord>({ rowSelection, dataSource, currentDataSource, getRowKey, }: {
4
4
  rowSelection?: TableRowSelection<T>;
5
5
  dataSource: T[];
6
6
  currentDataSource: T[];
7
7
  getRowKey: (record: T, index: number) => Key;
8
8
  }) => {
9
9
  mergedSelectedRowKeys: Key[];
10
- checkboxPropsMap: Map<Key, Partial<{
11
- disabled: boolean;
12
- }>>;
10
+ checkboxPropsMap: Map<Key, Partial<Omit<import("../../Checkbox").CheckboxProps, "checked" | "defaultChecked" | "onChange">>>;
13
11
  isAllSelected: boolean;
14
12
  isIndeterminate: boolean;
15
13
  triggerSelection: (recordKey: Key) => void;
@@ -141,4 +141,4 @@ export var useTableSelection = function useTableSelection(_ref) {
141
141
  triggerSelectAll: triggerSelectAll
142
142
  };
143
143
  };
144
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvc3JjL2NvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZVNlbGVjdGlvbi50cyIsImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZVNlbGVjdGlvbi5qcyJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlQ29udHJvbGxlZFN0YXRlIiwidXNlTWVtb2l6ZWRGbiIsInVzZVRhYmxlU2VsZWN0aW9uIiwiX3JlZiIsInJvd1NlbGVjdGlvbiIsImRhdGFTb3VyY2UiLCJjdXJyZW50RGF0YVNvdXJjZSIsImdldFJvd0tleSIsIl9hIiwiX3VzZUNvbnRyb2xsZWRTdGF0ZSIsImRlZmF1bHRTZWxlY3RlZFJvd0tleXMiLCJzZWxlY3RlZFJvd0tleXMiLCJfdXNlQ29udHJvbGxlZFN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwibWVyZ2VkU2VsZWN0ZWRSb3dLZXlzIiwic2V0TWVyZ2VkU2VsZWN0ZWRSb3dLZXlzIiwia3ZNYXBSZWYiLCJkYXRhIiwibWFwIiwiTWFwIiwiZ2V0S3ZNYXAiLCJjdXJyZW50IiwiaSIsImxlbmd0aCIsInNldCIsInByZXNlcnZlUmVjb3Jkc1JlZiIsImdldFJlY29yZEJ5S2V5Iiwia2V5IiwiZ2V0IiwicHJlc2VydmVTZWxlY3RlZFJvd0tleXMiLCJuZXh0Q2FjaGUiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJyZWNvcmQiLCJ1bmRlZmluZWQiLCJoYXMiLCJlcnIiLCJlIiwiZiIsImNoZWNrYm94UHJvcHNNYXAiLCJnZXRDaGVja2JveFByb3BzIiwiZm9yRWFjaCIsImluZGV4Iiwic2VsZWN0YWJsZUtleXMiLCJmaWx0ZXIiLCJkaXNhYmxlZCIsInNlbGVjdGVkU2VsZWN0YWJsZUtleXMiLCJpbmNsdWRlcyIsImlzQWxsU2VsZWN0ZWQiLCJpc0luZGV0ZXJtaW5hdGUiLCJyZXNvbHZlUmVjb3JkcyIsImtleXMiLCJ0cmlnZ2VyU2VsZWN0aW9uIiwicmVjb3JkS2V5IiwiX2IiLCJzZWxlY3Rpb25UeXBlIiwidHlwZSIsIm5leHRLZXlzIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5Iiwib25DaGFuZ2UiLCJjYWxsIiwidHJpZ2dlclNlbGVjdEFsbCIsIm1ldGhvZCIsImRpc2FibGVkU2VsZWN0ZWQiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsU0FBU0EsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sUUFBa0IsT0FBTztBQUM1RCxTQUFTQyxrQkFBa0IsRUFBRUMsYUFBYSxRQUFRLGVBQWU7QUFHakUsT0FBTyxJQUFNQyxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQWlCQSxDQUFBQyxJQUFBLEVBVXpCO0VBQUEsSUFUSEMsWUFBWSxHQUFBRCxJQUFBLENBQVpDLFlBQVk7SUFDWkMsVUFBVSxHQUFBRixJQUFBLENBQVZFLFVBQVU7SUFDVkMsaUJBQWlCLEdBQUFILElBQUEsQ0FBakJHLGlCQUFpQjtJQUNqQkMsU0FBUyxHQUFBSixJQUFBLENBQVRJLFNBQVM7RUNMUCxJQUFJQyxFQUFFO0VEWVIsSUFBQUMsbUJBQUEsR0FBMERULGtCQUFrQixDQUMxRSxDQUFBUSxFQUFBLEdBQUFKLFlBQVksS0FBQSxJQUFBLElBQVpBLFlBQVksS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBWkEsWUFBWSxDQUFFTSxzQkFBc0IsTUFBQSxJQUFBLElBQUFGLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxHQUFJLEVBQUUsRUFDMUNKLFlBQVksS0FBQSxJQUFBLElBQVpBLFlBQVksS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBWkEsWUFBWSxDQUFFTyxlQUFlLENBQzlCO0lBQUFDLG9CQUFBLEdBQUFDLGNBQUEsQ0FBQUosbUJBQUE7SUFITUsscUJBQXFCLEdBQUFGLG9CQUFBO0lBQUVHLHdCQUF3QixHQUFBSCxvQkFBQTtFQUt0RDtFQUNBLElBQU1JLFFBQVEs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QUFjLENBQUNPLFFBQVEsQ0FBQyxFQUFFO01BQUVELElBQUksRUFBRU87SUFBTSxDQUFFLENBQUM7RUFDaEYsQ0FBQyxDQUFDO0VBRUYsT0FBTztJQUNMdEQscUJBQXFCLEVBQXJCQSxxQkFBcUI7SUFDckI4QixnQkFBZ0IsRUFBaEJBLGdCQUFnQjtJQUNoQlMsYUFBYSxFQUFiQSxhQUFhO0lBQ2JDLGVBQWUsRUFBZkEsZUFBZTtJQUNmRyxnQkFBZ0IsRUFBaEJBLGdCQUFnQjtJQUNoQlUsZ0JBQWdCLEVBQWhCQTtFQ2hDQSxDRGlDRDtBQUNILENBQUMiLCJmaWxlIjoiY29tcG9uZW50cy9UYWJsZS9jb3JlL3VzZVRhYmxlU2VsZWN0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZWRTdGF0ZSwgdXNlTWVtb2l6ZWRGbiB9IGZyb20gJ0AxbW9uZXkvaG9va3MnO1xuZXhwb3J0IGNvbnN0IHVzZVRhYmxlU2VsZWN0aW9uID0gKHsgcm93U2VsZWN0aW9uLCBkYXRhU291cmNlLCBjdXJyZW50RGF0YVNvdXJjZSwgZ2V0Um93S2V5LCB9KSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IFttZXJnZWRTZWxlY3RlZFJvd0tleXMsIHNldE1lcmdlZFNlbGVjdGVkUm93S2V5c10gPSB1c2VDb250cm9sbGVkU3RhdGUoKF9hID0gcm93U2VsZWN0aW9uID09PSBudWxsIHx8IHJvd1NlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcm93U2VsZWN0aW9uLmRlZmF1bHRTZWxlY3RlZFJvd0tleXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdLCByb3dTZWxlY3Rpb24gPT09IG51bGwgfHwgcm93U2VsZWN0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiByb3dTZWxlY3Rpb24uc2VsZWN0ZWRSb3dLZXlzKTtcbiAgICAvLyBMYXp5IGtleeKGknJlY29yZCBtYXAsIHJlYnVpbHQgd2hlbiBkYXRhU291cmNlIHJlZmVyZW5jZSBjaGFuZ2VzXG4gICAgY29uc3Qga3ZNYXBSZWYgPSB1c2VSZWYoeyBkYXRhOiBbXSwgbWFwOiBuZXcgTWFwKCkgfSk7XG4gICAgY29uc3QgZ2V0S3ZNYXAgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgaWYgKGt2TWFwUmVmLmN1cnJlbnQuZGF0YSAhPT0gZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgY29uc3QgbWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhU291cmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbWFwLnNldChnZXRSb3dLZXkoZGF0YVNvdXJjZVtpXSwgaSksIGRhdGFTb3VyY2VbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga3ZNYXBSZWYuY3VycmVudCA9IHsgZGF0YTogZGF0YVNvdXJjZSwgbWFwIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGt2TWFwUmVmLmN1cnJlbnQubWFwO1xuICAgIH0pO1xuICAgIC8vIENhY2hlIGZvciBwcmVzZXJ2ZVNlbGVjdGVkUm93S2V5czogc3RvcmVzIGtleeKGknJlY29yZCBldmVuIGFjcm9zcyBwYWdpbmF0aW9uXG4gICAgY29uc3QgcHJlc2VydmVSZWNvcmRzUmVmID0gdXNlUmVmKG5ldyBNYXAoKSk7XG4gICAgY29uc3QgZ2V0UmVjb3JkQnlLZXkgPSB1c2VNZW1vaXplZEZuKChrZXkpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gZ2V0S3ZNYXAoKS5nZXQoa2V5KSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcHJlc2VydmVSZWNvcmRzUmVmLmN1cnJlbnQuZ2V0KGtleSk7XG4gICAgfSk7XG4gICAgLy8gVXBkYXRlIGNhY2hlIHdoZW4gc2VsZWN0ZWQga2V5cyBjaGFuZ2VcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIShyb3dTZWxlY3Rpb24gPT09IG51bGwgfHwgcm93U2VsZWN0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiByb3dTZWxlY3Rpb24ucHJlc2VydmVTZWxlY3RlZFJvd0tleXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBuZXh0Q2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIG1lcmdlZFNlbGVjdGVkUm93S2V5cykge1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gZ2V0UmVjb3JkQnlLZXkoa2V5KTtcbiAgICAgICAgICAgIGlmIChyZWNvcmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG5leHRDYWNoZS5zZXQoa2V5LCByZWNvcmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJlc2VydmVSZWNvcmRzUmVmLmN1cnJlbnQuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBuZXh0Q2FjaGUuc2V0KGtleSwgcHJlc2VydmVSZWNvcmRzUmVmLmN1cnJlbnQuZ2V0KGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByZXNlcnZlUmVjb3Jkc1JlZi5jdXJyZW50ID0gbmV4dENhY2hlO1xuICAgIH0sIFttZXJnZWRTZWxlY3RlZFJvd0tleXMsIHJvd1NlbGVjdGlvbiA9PT0gbnVsbCB8fCByb3dTZWxlY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJvd1NlbGVjdGlvbi5wcmVzZXJ2ZVNlbGVjdGVkUm93S2V5cywgZ2V0UmVjb3JkQnlLZXldKTtcbiAgICBjb25zdCBjaGVja2JveFByb3BzTWFwID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgaWYgKCEocm93U2VsZWN0aW9uID09PSBudWxsIHx8IHJvd1NlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcm93U2VsZWN0aW9uLmdldENoZWNrYm94UHJvcHMpKVxuICAgICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgY3VycmVudERhdGFTb3VyY2UuZm9yRWFjaCgocmVjb3JkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gZ2V0Um93S2V5KHJlY29yZCwgaW5kZXgpO1xuICAgICAgICAgICAgbWFwLnNldChrZXksIHJvd1NlbGVjdGlvbi5nZXRDaGVja2JveFByb3BzKHJlY29yZCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9LCBbY3VycmVudERhdGFTb3VyY2UsIGdldFJvd0tleSwgcm93U2VsZWN0aW9uID09PSBudWxsIHx8IHJvd1NlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcm93U2VsZWN0aW9uLmdldENoZWNrYm94UHJvcHNdKTtcbiAgICBjb25zdCBzZWxlY3RhYmxlS2V5cyA9IHVzZU1lbW8oKCkgPT4gY3VycmVudERhdGFTb3VyY2VcbiAgICAgICAgLm1hcCgocmVjb3JkLCBpbmRleCkgPT4gZ2V0Um93S2V5KHJlY29yZCwgaW5kZXgpKVxuICAgICAgICAuZmlsdGVyKChrZXkpID0+IHsgdmFyIF9hOyByZXR1cm4gISgoX2EgPSBjaGVja2JveFByb3BzTWFwLmdldChrZXkpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGlzYWJsZWQpOyB9KSwgW2N1cnJlbnREYXRhU291cmNlLCBnZXRSb3dLZXksIGNoZWNrYm94UHJvcHNNYXBdKTtcbiAgICBjb25zdCBzZWxlY3RlZFNlbGVjdGFibGVLZXlzID0gdXNlTWVtbygoKSA9PiBzZWxlY3RhYmxlS2V5cy5maWx0ZXIoKGtleSkgPT4gbWVyZ2VkU2VsZWN0ZWRSb3dLZXlzLmluY2x1ZGVzKGtleSkpLCBbc2VsZWN0YWJsZUtleXMsIG1lcmdlZFNlbGVjdGVkUm93S2V5c10pO1xuICAgIGNvbnN0IGlzQWxsU2VsZWN0ZWQgPSBzZWxlY3RhYmxlS2V5cy5sZW5ndGggPiAwICYmIHNlbGVjdGVkU2VsZWN0YWJsZUtleXMubGVuZ3RoID09PSBzZWxlY3RhYmxlS2V5cy5sZW5ndGg7XG4gICAgY29uc3QgaXNJbmRldGVybWluYXRlID0gc2VsZWN0ZWRTZWxlY3RhYmxlS2V5cy5sZW5ndGggPiAwICYmICFpc0FsbFNlbGVjdGVkO1xuICAgIGNvbnN0IHJlc29sdmVSZWNvcmRzID0gdXNlTWVtb2l6ZWRGbigoa2V5cykgPT4ge1xuICAgICAgICBpZiAocm93U2VsZWN0aW9uID09PSBudWxsIHx8IHJvd1NlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcm93U2VsZWN0aW9uLnByZXNlcnZlU2VsZWN0ZWRSb3dLZXlzKSB7XG4gICAgICAgICAgICByZXR1cm4ga2V5c1xuICAgICAgICAgICAgICAgIC5tYXAoKGtleSkgPT4gZ2V0UmVjb3JkQnlLZXkoa2V5KSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChyZWNvcmQpID0+IHJlY29yZCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudERhdGFTb3VyY2UuZmlsdGVyKChyZWNvcmQsIGluZGV4KSA9PiBrZXlzLmluY2x1ZGVzKGdldFJvd0tleShyZWNvcmQsIGluZGV4KSkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHRyaWdnZXJTZWxlY3Rpb24gPSB1c2VNZW1vaXplZEZuKChyZWNvcmRLZXkpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uVHlwZSA9IChfYSA9IHJvd1NlbGVjdGlvbiA9PT0gbnVsbCB8fCByb3dTZWxlY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJvd1NlbGVjdGlvbi50eXBlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnY2hlY2tib3gnO1xuICAgICAgICBjb25zdCBuZXh0S2V5cyA9IHNlbGVjdGlvblR5cGUgPT09ICdyYWRpbydcbiAgICAgICAgICAgID8gW3JlY29yZEtleV1cbiAgICAgICAgICAgIDogbWVyZ2VkU2VsZWN0ZWRSb3dLZXlzLmluY2x1ZGVzKHJlY29yZEtleSlcbiAgICAgICAgICAgICAgICA/IG1lcmdlZFNlbGVjdGVkUm93S2V5cy5maWx0ZXIoa2V5ID0+IGtleSAhPT0gcmVjb3JkS2V5KVxuICAgICAgICAgICAgICAgIDogWy4uLm1lcmdlZFNlbGVjdGVkUm93S2V5cywgcmVjb3JkS2V5XTtcbiAgICAgICAgc2V0TWVyZ2VkU2VsZWN0ZWRSb3dLZXlzKG5leHRLZXlzKTtcbiAgICAgICAgKF9iID0gcm93U2VsZWN0aW9uID09PSBudWxsIHx8IHJvd1NlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcm93U2VsZWN0aW9uLm9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChyb3dTZWxlY3Rpb24sIG5leHRLZXlzLCByZXNvbHZlUmVjb3JkcyhuZXh0S2V5cyksIHsgdHlwZTogJ3NpbmdsZScgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgdHJpZ2dlclNlbGVjdEFsbCA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGxldCBuZXh0S2V5cztcbiAgICAgICAgbGV0IG1ldGhvZDtcbiAgICAgICAgaWYgKGlzQWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIG5leHRLZXlzID0gbWVyZ2VkU2VsZWN0ZWRSb3dLZXlzLmZpbHRlcigoa2V5KSA9PiB7IHZhciBfYTsgcmV0dXJuIChfYSA9IGNoZWNrYm94UHJvcHNNYXAuZ2V0KGtleSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kaXNhYmxlZDsgfSk7XG4gICAgICAgICAgICBtZXRob2QgPSAnbm9uZSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkaXNhYmxlZFNlbGVjdGVkID0gbWVyZ2VkU2VsZWN0ZWRSb3dLZXlzLmZpbHRlcigoa2V5KSA9PiB7IHZhciBfYTsgcmV0dXJuIChfYSA9IGNoZWNrYm94UHJvcHNNYXAuZ2V0KGtleSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kaXNhYmxlZDsgfSk7XG4gICAgICAgICAgICBuZXh0S2V5cyA9IFsuLi5kaXNhYmxlZFNlbGVjdGVkLCAuLi5zZWxlY3RhYmxlS2V5c107XG4gICAgICAgICAgICBtZXRob2QgPSAnYWxsJztcbiAgICAgICAgfVxuICAgICAgICBzZXRNZXJnZWRTZWxlY3RlZFJvd0tleXMobmV4dEtleXMpO1xuICAgICAgICAoX2EgPSByb3dTZWxlY3Rpb24gPT09IG51bGwgfHwgcm93U2VsZWN0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiByb3dTZWxlY3Rpb24ub25DaGFuZ2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHJvd1NlbGVjdGlvbiwgbmV4dEtleXMsIHJlc29sdmVSZWNvcmRzKG5leHRLZXlzKSwgeyB0eXBlOiBtZXRob2QgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWVyZ2VkU2VsZWN0ZWRSb3dLZXlzLFxuICAgICAgICBjaGVja2JveFByb3BzTWFwLFxuICAgICAgICBpc0FsbFNlbGVjdGVkLFxuICAgICAgICBpc0luZGV0ZXJtaW5hdGUsXG4gICAgICAgIHRyaWdnZXJTZWxlY3Rpb24sXG4gICAgICAgIHRyaWdnZXJTZWxlY3RBbGwsXG4gICAgfTtcbn07Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
144
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvc3JjL2NvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZVNlbGVjdGlvbi50cyIsImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZVNlbGVjdGlvbi5qcyJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlQ29udHJvbGxlZFN0YXRlIiwidXNlTWVtb2l6ZWRGbiIsInVzZVRhYmxlU2VsZWN0aW9uIiwiX3JlZiIsInJvd1NlbGVjdGlvbiIsImRhdGFTb3VyY2UiLCJjdXJyZW50RGF0YVNvdXJjZSIsImdldFJvd0tleSIsIl9hIiwiX3VzZUNvbnRyb2xsZWRTdGF0ZSIsImRlZmF1bHRTZWxlY3RlZFJvd0tleXMiLCJzZWxlY3RlZFJvd0tleXMiLCJfdXNlQ29udHJvbGxlZFN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwibWVyZ2VkU2VsZWN0ZWRSb3dLZXlzIiwic2V0TWVyZ2VkU2VsZWN0ZWRSb3dLZXlzIiwia3ZNYXBSZWYiLCJkYXRhIiwibWFwIiwiTWFwIiwiZ2V0S3ZNYXAiLCJjdXJyZW50IiwiaSIsImxlbmd0aCIsInNldCIsInByZXNlcnZlUmVjb3Jkc1JlZiIsImdldFJlY29yZEJ5S2V5Iiwia2V5IiwiZ2V0IiwicHJlc2VydmVTZWxlY3RlZFJvd0tleXMiLCJuZXh0Q2FjaGUiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJyZWNvcmQiLCJ1bmRlZmluZWQiLCJoYXMiLCJlcnIiLCJlIiwiZiIsImNoZWNrYm94UHJvcHNNYXAiLCJnZXRDaGVja2JveFByb3BzIiwiZm9yRWFjaCIsImluZGV4Iiwic2VsZWN0YWJsZUtleXMiLCJmaWx0ZXIiLCJkaXNhYmxlZCIsInNlbGVjdGVkU2VsZWN0YWJsZUtleXMiLCJpbmNsdWRlcyIsImlzQWxsU2VsZWN0ZWQiLCJpc0luZGV0ZXJtaW5hdGUiLCJyZXNvbHZlUmVjb3JkcyIsImtleXMiLCJ0cmlnZ2VyU2VsZWN0aW9uIiwicmVjb3JkS2V5IiwiX2IiLCJzZWxlY3Rpb25UeXBlIiwidHlwZSIsIm5leHRLZXlzIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5Iiwib25DaGFuZ2UiLCJjYWxsIiwidHJpZ2dlclNlbGVjdEFsbCIsIm1ldGhvZCIsImRpc2FibGVkU2VsZWN0ZWQiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsU0FBU0EsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sUUFBa0IsT0FBTztBQUM1RCxTQUFTQyxrQkFBa0IsRUFBRUMsYUFBYSxRQUFRLGVBQWU7QUFHakUsT0FBTyxJQUFNQyxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQWlCQSxDQUFBQyxJQUFBLEVBVXpCO0VBQUEsSUFUSEMsWUFBWSxHQUFBRCxJQUFBLENBQVpDLFlBQVk7SUFDWkMsVUFBVSxHQUFBRixJQUFBLENBQVZFLFVBQVU7SUFDVkMsaUJBQWlCLEdBQUFILElBQUEsQ0FBakJHLGlCQUFpQjtJQUNqQkMsU0FBUyxHQUFBSixJQUFBLENBQVRJLFNBQVM7RUNMUCxJQUFJQyxFQUFFO0VEWVIsSUFBQUMsbUJBQUEsR0FBMERULGtCQUFrQixDQUMxRSxDQUFBUSxFQUFBLEdBQUFKLFlBQVksS0FBQSxJQUFBLElBQVpBLFlBQVksS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBWkEsWUFBWSxDQUFFTSxzQkFBc0IsTUFBQSxJQUFBLElBQUFGLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxHQUFJLEVBQUUsRUFDMUNKLFlBQVksS0FBQSxJQUFBLElBQVpBLFlBQVksS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBWkEsWUFBWSxDQUFFTyxlQUFlLENBQzlCO0lBQUFDLG9CQUFBLEdBQUFDLGNBQUEsQ0FBQUosbUJBQUE7SUFITUsscUJBQXFCLEdBQUFGLG9CQUFBO0lBQUVHLHdCQUF3QixHQUFBSCxvQkFBQTtFQUt0RDtFQUNBLElBQU1JLFFBQVEs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QUFjLENBQUNPLFFBQVEsQ0FBQyxFQUFFO01BQUVELElBQUksRUFBRU87SUFBTSxDQUFFLENBQUM7RUFDaEYsQ0FBQyxDQUFDO0VBRUYsT0FBTztJQUNMdEQscUJBQXFCLEVBQXJCQSxxQkFBcUI7SUFDckI4QixnQkFBZ0IsRUFBaEJBLGdCQUFnQjtJQUNoQlMsYUFBYSxFQUFiQSxhQUFhO0lBQ2JDLGVBQWUsRUFBZkEsZUFBZTtJQUNmRyxnQkFBZ0IsRUFBaEJBLGdCQUFnQjtJQUNoQlUsZ0JBQWdCLEVBQWhCQTtFQ2hDQSxDRGlDRDtBQUNILENBQUMiLCJmaWxlIjoiY29tcG9uZW50cy9UYWJsZS9jb3JlL3VzZVRhYmxlU2VsZWN0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZWRTdGF0ZSwgdXNlTWVtb2l6ZWRGbiB9IGZyb20gJ0AxbW9uZXkvaG9va3MnO1xuZXhwb3J0IGNvbnN0IHVzZVRhYmxlU2VsZWN0aW9uID0gKHsgcm93U2VsZWN0aW9uLCBkYXRhU291cmNlLCBjdXJyZW50RGF0YVNvdXJjZSwgZ2V0Um93S2V5LCB9KSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IFttZXJnZWRTZWxlY3RlZFJvd0tleXMsIHNldE1lcmdlZFNlbGVjdGVkUm93S2V5c10gPSB1c2VDb250cm9sbGVkU3RhdGUoKF9hID0gcm93U2VsZWN0aW9uID09PSBudWxsIHx8IHJvd1NlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcm93U2VsZWN0aW9uLmRlZmF1bHRTZWxlY3RlZFJvd0tleXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdLCByb3dTZWxlY3Rpb24gPT09IG51bGwgfHwgcm93U2VsZWN0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiByb3dTZWxlY3Rpb24uc2VsZWN0ZWRSb3dLZXlzKTtcbiAgICAvLyBMYXp5IGtleeKGknJlY29yZCBtYXAsIHJlYnVpbHQgd2hlbiBkYXRhU291cmNlIHJlZmVyZW5jZSBjaGFuZ2VzXG4gICAgY29uc3Qga3ZNYXBSZWYgPSB1c2VSZWYoeyBkYXRhOiBbXSwgbWFwOiBuZXcgTWFwKCkgfSk7XG4gICAgY29uc3QgZ2V0S3ZNYXAgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgaWYgKGt2TWFwUmVmLmN1cnJlbnQuZGF0YSAhPT0gZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgY29uc3QgbWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhU291cmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbWFwLnNldChnZXRSb3dLZXkoZGF0YVNvdXJjZVtpXSwgaSksIGRhdGFTb3VyY2VbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga3ZNYXBSZWYuY3VycmVudCA9IHsgZGF0YTogZGF0YVNvdXJjZSwgbWFwIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGt2TWFwUmVmLmN1cnJlbnQubWFwO1xuICAgIH0pO1xuICAgIC8vIENhY2hlIGZvciBwcmVzZXJ2ZVNlbGVjdGVkUm93S2V5czogc3RvcmVzIGtleeKGknJlY29yZCBldmVuIGFjcm9zcyBwYWdpbmF0aW9uXG4gICAgY29uc3QgcHJlc2VydmVSZWNvcmRzUmVmID0gdXNlUmVmKG5ldyBNYXAoKSk7XG4gICAgY29uc3QgZ2V0UmVjb3JkQnlLZXkgPSB1c2VNZW1vaXplZEZuKChrZXkpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gZ2V0S3ZNYXAoKS5nZXQoa2V5KSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcHJlc2VydmVSZWNvcmRzUmVmLmN1cnJlbnQuZ2V0KGtleSk7XG4gICAgfSk7XG4gICAgLy8gVXBkYXRlIGNhY2hlIHdoZW4gc2VsZWN0ZWQga2V5cyBjaGFuZ2VcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIShyb3dTZWxlY3Rpb24gPT09IG51bGwgfHwgcm93U2VsZWN0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiByb3dTZWxlY3Rpb24ucHJlc2VydmVTZWxlY3RlZFJvd0tleXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBuZXh0Q2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIG1lcmdlZFNlbGVjdGVkUm93S2V5cykge1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gZ2V0UmVjb3JkQnlLZXkoa2V5KTtcbiAgICAgICAgICAgIGlmIChyZWNvcmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG5leHRDYWNoZS5zZXQoa2V5LCByZWNvcmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJlc2VydmVSZWNvcmRzUmVmLmN1cnJlbnQuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBuZXh0Q2FjaGUuc2V0KGtleSwgcHJlc2VydmVSZWNvcmRzUmVmLmN1cnJlbnQuZ2V0KGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByZXNlcnZlUmVjb3Jkc1JlZi5jdXJyZW50ID0gbmV4dENhY2hlO1xuICAgIH0sIFttZXJnZWRTZWxlY3RlZFJvd0tleXMsIHJvd1NlbGVjdGlvbiA9PT0gbnVsbCB8fCByb3dTZWxlY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJvd1NlbGVjdGlvbi5wcmVzZXJ2ZVNlbGVjdGVkUm93S2V5cywgZ2V0UmVjb3JkQnlLZXldKTtcbiAgICBjb25zdCBjaGVja2JveFByb3BzTWFwID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgaWYgKCEocm93U2VsZWN0aW9uID09PSBudWxsIHx8IHJvd1NlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcm93U2VsZWN0aW9uLmdldENoZWNrYm94UHJvcHMpKVxuICAgICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgY3VycmVudERhdGFTb3VyY2UuZm9yRWFjaCgocmVjb3JkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gZ2V0Um93S2V5KHJlY29yZCwgaW5kZXgpO1xuICAgICAgICAgICAgbWFwLnNldChrZXksIHJvd1NlbGVjdGlvbi5nZXRDaGVja2JveFByb3BzKHJlY29yZCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9LCBbY3VycmVudERhdGFTb3VyY2UsIGdldFJvd0tleSwgcm93U2VsZWN0aW9uID09PSBudWxsIHx8IHJvd1NlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcm93U2VsZWN0aW9uLmdldENoZWNrYm94UHJvcHNdKTtcbiAgICBjb25zdCBzZWxlY3RhYmxlS2V5cyA9IHVzZU1lbW8oKCkgPT4gY3VycmVudERhdGFTb3VyY2VcbiAgICAgICAgLm1hcCgocmVjb3JkLCBpbmRleCkgPT4gZ2V0Um93S2V5KHJlY29yZCwgaW5kZXgpKVxuICAgICAgICAuZmlsdGVyKChrZXkpID0+IHsgdmFyIF9hOyByZXR1cm4gISgoX2EgPSBjaGVja2JveFByb3BzTWFwLmdldChrZXkpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGlzYWJsZWQpOyB9KSwgW2N1cnJlbnREYXRhU291cmNlLCBnZXRSb3dLZXksIGNoZWNrYm94UHJvcHNNYXBdKTtcbiAgICBjb25zdCBzZWxlY3RlZFNlbGVjdGFibGVLZXlzID0gdXNlTWVtbygoKSA9PiBzZWxlY3RhYmxlS2V5cy5maWx0ZXIoKGtleSkgPT4gbWVyZ2VkU2VsZWN0ZWRSb3dLZXlzLmluY2x1ZGVzKGtleSkpLCBbc2VsZWN0YWJsZUtleXMsIG1lcmdlZFNlbGVjdGVkUm93S2V5c10pO1xuICAgIGNvbnN0IGlzQWxsU2VsZWN0ZWQgPSBzZWxlY3RhYmxlS2V5cy5sZW5ndGggPiAwICYmIHNlbGVjdGVkU2VsZWN0YWJsZUtleXMubGVuZ3RoID09PSBzZWxlY3RhYmxlS2V5cy5sZW5ndGg7XG4gICAgY29uc3QgaXNJbmRldGVybWluYXRlID0gc2VsZWN0ZWRTZWxlY3RhYmxlS2V5cy5sZW5ndGggPiAwICYmICFpc0FsbFNlbGVjdGVkO1xuICAgIGNvbnN0IHJlc29sdmVSZWNvcmRzID0gdXNlTWVtb2l6ZWRGbigoa2V5cykgPT4ge1xuICAgICAgICBpZiAocm93U2VsZWN0aW9uID09PSBudWxsIHx8IHJvd1NlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcm93U2VsZWN0aW9uLnByZXNlcnZlU2VsZWN0ZWRSb3dLZXlzKSB7XG4gICAgICAgICAgICByZXR1cm4ga2V5c1xuICAgICAgICAgICAgICAgIC5tYXAoKGtleSkgPT4gZ2V0UmVjb3JkQnlLZXkoa2V5KSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChyZWNvcmQpID0+IHJlY29yZCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudERhdGFTb3VyY2UuZmlsdGVyKChyZWNvcmQsIGluZGV4KSA9PiBrZXlzLmluY2x1ZGVzKGdldFJvd0tleShyZWNvcmQsIGluZGV4KSkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHRyaWdnZXJTZWxlY3Rpb24gPSB1c2VNZW1vaXplZEZuKChyZWNvcmRLZXkpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uVHlwZSA9IChfYSA9IHJvd1NlbGVjdGlvbiA9PT0gbnVsbCB8fCByb3dTZWxlY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJvd1NlbGVjdGlvbi50eXBlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnY2hlY2tib3gnO1xuICAgICAgICBjb25zdCBuZXh0S2V5cyA9IHNlbGVjdGlvblR5cGUgPT09ICdyYWRpbydcbiAgICAgICAgICAgID8gW3JlY29yZEtleV1cbiAgICAgICAgICAgIDogbWVyZ2VkU2VsZWN0ZWRSb3dLZXlzLmluY2x1ZGVzKHJlY29yZEtleSlcbiAgICAgICAgICAgICAgICA/IG1lcmdlZFNlbGVjdGVkUm93S2V5cy5maWx0ZXIoa2V5ID0+IGtleSAhPT0gcmVjb3JkS2V5KVxuICAgICAgICAgICAgICAgIDogWy4uLm1lcmdlZFNlbGVjdGVkUm93S2V5cywgcmVjb3JkS2V5XTtcbiAgICAgICAgc2V0TWVyZ2VkU2VsZWN0ZWRSb3dLZXlzKG5leHRLZXlzKTtcbiAgICAgICAgKF9iID0gcm93U2VsZWN0aW9uID09PSBudWxsIHx8IHJvd1NlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcm93U2VsZWN0aW9uLm9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChyb3dTZWxlY3Rpb24sIG5leHRLZXlzLCByZXNvbHZlUmVjb3JkcyhuZXh0S2V5cyksIHsgdHlwZTogJ3NpbmdsZScgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgdHJpZ2dlclNlbGVjdEFsbCA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGxldCBuZXh0S2V5cztcbiAgICAgICAgbGV0IG1ldGhvZDtcbiAgICAgICAgaWYgKGlzQWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIG5leHRLZXlzID0gbWVyZ2VkU2VsZWN0ZWRSb3dLZXlzLmZpbHRlcigoa2V5KSA9PiB7IHZhciBfYTsgcmV0dXJuIChfYSA9IGNoZWNrYm94UHJvcHNNYXAuZ2V0KGtleSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kaXNhYmxlZDsgfSk7XG4gICAgICAgICAgICBtZXRob2QgPSAnbm9uZSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkaXNhYmxlZFNlbGVjdGVkID0gbWVyZ2VkU2VsZWN0ZWRSb3dLZXlzLmZpbHRlcigoa2V5KSA9PiB7IHZhciBfYTsgcmV0dXJuIChfYSA9IGNoZWNrYm94UHJvcHNNYXAuZ2V0KGtleSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kaXNhYmxlZDsgfSk7XG4gICAgICAgICAgICBuZXh0S2V5cyA9IFsuLi5kaXNhYmxlZFNlbGVjdGVkLCAuLi5zZWxlY3RhYmxlS2V5c107XG4gICAgICAgICAgICBtZXRob2QgPSAnYWxsJztcbiAgICAgICAgfVxuICAgICAgICBzZXRNZXJnZWRTZWxlY3RlZFJvd0tleXMobmV4dEtleXMpO1xuICAgICAgICAoX2EgPSByb3dTZWxlY3Rpb24gPT09IG51bGwgfHwgcm93U2VsZWN0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiByb3dTZWxlY3Rpb24ub25DaGFuZ2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHJvd1NlbGVjdGlvbiwgbmV4dEtleXMsIHJlc29sdmVSZWNvcmRzKG5leHRLZXlzKSwgeyB0eXBlOiBtZXRob2QgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWVyZ2VkU2VsZWN0ZWRSb3dLZXlzLFxuICAgICAgICBjaGVja2JveFByb3BzTWFwLFxuICAgICAgICBpc0FsbFNlbGVjdGVkLFxuICAgICAgICBpc0luZGV0ZXJtaW5hdGUsXG4gICAgICAgIHRyaWdnZXJTZWxlY3Rpb24sXG4gICAgICAgIHRyaWdnZXJTZWxlY3RBbGwsXG4gICAgfTtcbn07Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -0,0 +1,42 @@
1
+ import { type HTMLAttributes, type Key, type ReactNode } from 'react';
2
+ import type { TableComponents, TableDirection, TableGetComponentProps, TableLayout, TableProps, TableRecord, TableRowClassName } from '../interface';
3
+ import type { ColumnsType as InternalColumnsType, ExpandableConfig } from '../internal/kernel/interface';
4
+ /** Kernel props that flow identically through `Table` and `VirtualTable`. */
5
+ export interface ForwardedKernelProps<T extends TableRecord> {
6
+ rowKey: string | ((record: T) => Key);
7
+ childrenColumnName?: string;
8
+ indentSize?: number;
9
+ onRow?: TableGetComponentProps<T>;
10
+ rowClassName?: TableRowClassName<T>;
11
+ summary?: (data: readonly T[]) => ReactNode;
12
+ showHeader?: boolean;
13
+ tableLayout?: TableLayout;
14
+ components?: TableComponents<T>;
15
+ direction?: TableDirection;
16
+ rowHoverable?: boolean;
17
+ sticky?: TableProps<T>['sticky'];
18
+ }
19
+ export interface TableSetupResult<T extends TableRecord> {
20
+ prefixCls: string;
21
+ wrapperClassName: string;
22
+ tableClassName: string;
23
+ loading: boolean;
24
+ renderedColumns: InternalColumnsType<T>;
25
+ currentDataSource: T[];
26
+ mergedExpandable: ExpandableConfig<T> | undefined;
27
+ emptyText: ReactNode;
28
+ /** HTML attributes that didn't map to a known TableProps field. Land on the wrapper div. */
29
+ wrapperHtmlProps: HTMLAttributes<HTMLDivElement>;
30
+ forwardedKernelProps: ForwardedKernelProps<T>;
31
+ paginationNode: ReactNode;
32
+ }
33
+ /**
34
+ * Centralises the wiring shared by `Table` and `VirtualTable`:
35
+ * - destructure props
36
+ * - resolve row key
37
+ * - run pipeline / selection / expand / column transforms
38
+ * - build kernel-ready props
39
+ * - split off pass-through HTML attributes so they can land on the outer wrapper
40
+ * div (instead of being spread untyped into the kernel via `rest as object`).
41
+ */
42
+ export declare const useTableSetup: <T extends TableRecord>(props: TableProps<T>) => TableSetupResult<T>;