@1money/component-ui 0.0.73 → 0.0.75

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 (91) hide show
  1. package/es/components/Dialog/Dialog.js +7 -39
  2. package/es/components/Dialog/constants.d.ts +0 -3
  3. package/es/components/Dialog/constants.js +1 -4
  4. package/es/components/Dialog/style/Dialog.css +0 -21
  5. package/es/components/ProForm/ProForm.js +201 -48
  6. package/es/components/ProForm/ProFormDependency.d.ts +11 -2
  7. package/es/components/ProForm/ProFormDependency.js +29 -136
  8. package/es/components/ProForm/ProFormItem.js +81 -24
  9. package/es/components/ProForm/ProFormList.js +114 -62
  10. package/es/components/ProForm/Submitter.js +15 -4
  11. package/es/components/ProForm/context.d.ts +11 -3
  12. package/es/components/ProForm/context.js +32 -12
  13. package/es/components/ProForm/core/constants.d.ts +10 -2
  14. package/es/components/ProForm/core/constants.js +17 -3
  15. package/es/components/ProForm/core/formStore.d.ts +24 -0
  16. package/es/components/ProForm/core/formStore.js +101 -0
  17. package/es/components/ProForm/core/hooks/useForm.d.ts +4 -1
  18. package/es/components/ProForm/core/hooks/useForm.js +220 -120
  19. package/es/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
  20. package/es/components/ProForm/core/hooks/useFormCore.js +114 -90
  21. package/es/components/ProForm/core/runRules.d.ts +5 -3
  22. package/es/components/ProForm/core/runRules.js +13 -5
  23. package/es/components/ProForm/core/useFormItem.d.ts +2 -2
  24. package/es/components/ProForm/core/useFormItem.js +46 -23
  25. package/es/components/ProForm/fields/ProFormFieldSet.js +20 -7
  26. package/es/components/ProForm/fields/createProFormField.js +14 -4
  27. package/es/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
  28. package/es/components/ProForm/hooks/useFieldRequest.js +54 -9
  29. package/es/components/ProForm/hooks/useUrlSync.d.ts +16 -0
  30. package/es/components/ProForm/hooks/useUrlSync.js +170 -0
  31. package/es/components/ProForm/index.d.ts +2 -2
  32. package/es/components/ProForm/index.js +1 -1
  33. package/es/components/ProForm/interface.d.ts +105 -23
  34. package/es/components/ProForm/layouts/DialogForm.js +17 -7
  35. package/es/components/ProForm/layouts/DrawerForm.js +16 -7
  36. package/es/components/ProForm/layouts/QueryFilter.js +46 -135
  37. package/es/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  38. package/es/components/ProForm/layouts/useOverlayForm.js +27 -8
  39. package/es/components/ProForm/style/ProForm.css +0 -7
  40. package/es/components/ProForm/utils.js +32 -8
  41. package/es/components/ProTable/ProTable.js +3 -3
  42. package/es/index.css +1 -1
  43. package/es/index.d.ts +1 -1
  44. package/es/index.js +1 -1
  45. package/lib/components/Dialog/Dialog.js +6 -38
  46. package/lib/components/Dialog/constants.d.ts +0 -3
  47. package/lib/components/Dialog/constants.js +1 -4
  48. package/lib/components/Dialog/style/Dialog.css +0 -21
  49. package/lib/components/ProForm/ProForm.js +201 -48
  50. package/lib/components/ProForm/ProFormDependency.d.ts +11 -2
  51. package/lib/components/ProForm/ProFormDependency.js +30 -138
  52. package/lib/components/ProForm/ProFormItem.js +78 -21
  53. package/lib/components/ProForm/ProFormList.js +112 -60
  54. package/lib/components/ProForm/Submitter.js +15 -4
  55. package/lib/components/ProForm/context.d.ts +11 -3
  56. package/lib/components/ProForm/context.js +33 -13
  57. package/lib/components/ProForm/core/constants.d.ts +10 -2
  58. package/lib/components/ProForm/core/constants.js +18 -4
  59. package/lib/components/ProForm/core/formStore.d.ts +24 -0
  60. package/lib/components/ProForm/core/formStore.js +110 -0
  61. package/lib/components/ProForm/core/hooks/useForm.d.ts +4 -1
  62. package/lib/components/ProForm/core/hooks/useForm.js +220 -120
  63. package/lib/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
  64. package/lib/components/ProForm/core/hooks/useFormCore.js +113 -89
  65. package/lib/components/ProForm/core/runRules.d.ts +5 -3
  66. package/lib/components/ProForm/core/runRules.js +13 -5
  67. package/lib/components/ProForm/core/useFormItem.d.ts +2 -2
  68. package/lib/components/ProForm/core/useFormItem.js +44 -21
  69. package/lib/components/ProForm/fields/ProFormFieldSet.js +19 -6
  70. package/lib/components/ProForm/fields/createProFormField.js +14 -4
  71. package/lib/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
  72. package/lib/components/ProForm/hooks/useFieldRequest.js +53 -8
  73. package/lib/components/ProForm/hooks/useUrlSync.d.ts +16 -0
  74. package/lib/components/ProForm/hooks/useUrlSync.js +178 -0
  75. package/lib/components/ProForm/index.d.ts +2 -2
  76. package/lib/components/ProForm/index.js +1 -1
  77. package/lib/components/ProForm/interface.d.ts +105 -23
  78. package/lib/components/ProForm/layouts/DialogForm.js +17 -7
  79. package/lib/components/ProForm/layouts/DrawerForm.js +16 -7
  80. package/lib/components/ProForm/layouts/QueryFilter.js +45 -134
  81. package/lib/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  82. package/lib/components/ProForm/layouts/useOverlayForm.js +30 -8
  83. package/lib/components/ProForm/style/ProForm.css +0 -7
  84. package/lib/components/ProForm/utils.js +32 -8
  85. package/lib/components/ProTable/ProTable.js +3 -3
  86. package/lib/index.css +1 -1
  87. package/lib/index.d.ts +1 -1
  88. package/lib/index.js +1 -1
  89. package/package.json +1 -1
  90. package/scripts/mcp-server/examples.generated.json +36 -0
  91. package/scripts/mcp-server/index.generated.json +538 -16
@@ -1,4 +1,5 @@
1
1
  import _typeof from "@babel/runtime/helpers/esm/typeof";
2
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
3
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
4
  import _regeneratorRuntime from "@babel/runtime/regenerator";
4
5
  var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
@@ -49,8 +50,14 @@ import { ProFormStableContext, ProFormStateContext } from './context';
49
50
  import { Submitter } from './Submitter';
50
51
  import { CSS_PREFIX } from './constants';
51
52
  import { stableSerialize, transformSubmitValues, omitNilValues, formatDateValues } from './utils';
53
+ import { useShallowStable } from './core/formStore';
54
+ import { useUrlSync } from './hooks/useUrlSync';
55
+ import { resolveValue } from './core/pathUtils';
52
56
  var classes = classnames(CSS_PREFIX);
53
57
  var formClasses = classnames('form');
58
+ var DEFAULT_COL_PROPS = {
59
+ span: 24
60
+ };
54
61
  var ProFormBase = function ProFormBase(props) {
55
62
  var children = props.children,
56
63
  className = props.className,
@@ -71,6 +78,15 @@ var ProFormBase = function ProFormBase(props) {
71
78
  onFinishFailed = props.onFinishFailed,
72
79
  onValuesChange = props.onValuesChange,
73
80
  onReset = props.onReset,
81
+ onInit = props.onInit,
82
+ onLoadingChange = props.onLoadingChange,
83
+ syncToUrl = props.syncToUrl,
84
+ _props$syncToUrlAsImp = props.syncToUrlAsImportant,
85
+ syncToUrlAsImportant = _props$syncToUrlAsImp === void 0 ? false : _props$syncToUrlAsImp,
86
+ extraUrlParams = props.extraUrlParams,
87
+ _props$autoFocusFirst = props.autoFocusFirstInput,
88
+ autoFocusFirstInput = _props$autoFocusFirst === void 0 ? false : _props$autoFocusFirst,
89
+ formComponentType = props.formComponentType,
74
90
  formRef = props.formRef,
75
91
  _props$omitNil = props.omitNil,
76
92
  omitNil = _props$omitNil === void 0 ? true : _props$omitNil,
@@ -78,8 +94,9 @@ var ProFormBase = function ProFormBase(props) {
78
94
  dateFormatter = _props$dateFormatter === void 0 ? 'string' : _props$dateFormatter,
79
95
  fieldProps = props.fieldProps,
80
96
  formItemProps = props.formItemProps,
97
+ layout = props.layout,
81
98
  _props$size = props.size,
82
- size = _props$size === void 0 ? 'middle' : _props$size,
99
+ size = _props$size === void 0 ? 'large' : _props$size,
83
100
  _props$labelAlign = props.labelAlign,
84
101
  labelAlign = _props$labelAlign === void 0 ? 'left' : _props$labelAlign,
85
102
  _props$disabled = props.disabled,
@@ -91,16 +108,22 @@ var ProFormBase = function ProFormBase(props) {
91
108
  _props$validateTrigge = props.validateTrigger,
92
109
  validateTrigger = _props$validateTrigge === void 0 ? 'onChange' : _props$validateTrigge,
93
110
  _prefixCls = props.prefixCls,
94
- rest = __rest(props, ["children", "className", "submitter", "readonly", "mode", "grid", "colProps", "rowProps", "loading", "request", "params", "initialValues", "onFinish", "onFinishFailed", "onValuesChange", "onReset", "formRef", "omitNil", "dateFormatter", "fieldProps", "formItemProps", "size", "labelAlign", "disabled", "colon", "requiredMark", "validateTrigger", "prefixCls"]);
111
+ rest = __rest(props, ["children", "className", "submitter", "readonly", "mode", "grid", "colProps", "rowProps", "loading", "request", "params", "initialValues", "onFinish", "onFinishFailed", "onValuesChange", "onReset", "onInit", "onLoadingChange", "syncToUrl", "syncToUrlAsImportant", "extraUrlParams", "autoFocusFirstInput", "formComponentType", "formRef", "omitNil", "dateFormatter", "fieldProps", "formItemProps", "layout", "size", "labelAlign", "disabled", "colon", "requiredMark", "validateTrigger", "prefixCls"]);
95
112
  var mode = modeProp !== null && modeProp !== void 0 ? modeProp : readonly ? 'read' : 'edit';
96
113
  var _useSafeState = useSafeState(false),
97
114
  _useSafeState2 = _slicedToArray(_useSafeState, 2),
98
115
  requestLoading = _useSafeState2[0],
99
116
  setRequestLoading = _useSafeState2[1];
117
+ // useSafeState for the RENDERED submitting state (its setter is unmount-safe
118
+ // — the finally below runs after awaiting onFinish, when the typical
119
+ // submit-then-close flow may already have unmounted the form on React
120
+ // 16/17). The ref is the synchronous re-entry guard; @1money/hooks has no
121
+ // single hook that is both unmount-safe and synchronously readable.
100
122
  var _useSafeState3 = useSafeState(false),
101
123
  _useSafeState4 = _slicedToArray(_useSafeState3, 2),
102
124
  submitting = _useSafeState4[0],
103
125
  setSubmitting = _useSafeState4[1];
126
+ var submittingRef = useRef(false);
104
127
  var isLoading = loading || requestLoading || submitting;
105
128
  // ── Transform / valueType registries ──
106
129
  var transformKeyRef = useRef({});
@@ -108,16 +131,25 @@ var ProFormBase = function ProFormBase(props) {
108
131
  var registerTransform = useMemoizedFn(function (name, fn) {
109
132
  transformKeyRef.current[name] = fn;
110
133
  });
111
- var unregisterTransform = useMemoizedFn(function (name) {
112
- delete transformKeyRef.current[name];
134
+ // The optional second argument guards removal: delete only when the registry
135
+ // still holds the CALLER'S registration, so an unmounting instance can never
136
+ // wipe a same-name sibling's or successor's entry.
137
+ var unregisterTransform = useMemoizedFn(function (name, fn) {
138
+ if (fn === undefined || transformKeyRef.current[name] === fn) {
139
+ delete transformKeyRef.current[name];
140
+ }
113
141
  });
114
142
  var registerValueType = useMemoizedFn(function (name, valueType) {
115
143
  valueTypeRef.current[name] = valueType;
116
144
  });
117
- var unregisterValueType = useMemoizedFn(function (name) {
118
- delete valueTypeRef.current[name];
145
+ var unregisterValueType = useMemoizedFn(function (name, valueType) {
146
+ if (valueType === undefined || valueTypeRef.current[name] === valueType) {
147
+ delete valueTypeRef.current[name];
148
+ }
119
149
  });
120
150
  var onFinishRef = useLatest(onFinish);
151
+ var onInitRef = useLatest(onInit);
152
+ var onLoadingChangeRef = useLatest(onLoadingChange);
121
153
  // Submit pipeline: dates → field transforms → omitNil
122
154
  var applyPipeline = useMemoizedFn(function (values) {
123
155
  var result = formatDateValues(values, dateFormatter, valueTypeRef.current);
@@ -125,57 +157,124 @@ var ProFormBase = function ProFormBase(props) {
125
157
  if (omitNil) result = omitNilValues(result);
126
158
  return result;
127
159
  });
160
+ // Same pipeline WITHOUT omitNil — single-field readers must not see a field
161
+ // vanish just because its current value is empty.
162
+ var formatValuesKeepNil = useMemoizedFn(function (values) {
163
+ var result = formatDateValues(values, dateFormatter, valueTypeRef.current);
164
+ return transformSubmitValues(result, transformKeyRef.current);
165
+ });
166
+ // ── URL sync (syncToUrl / syncToUrlAsImportant / extraUrlParams) ──
167
+ var _useUrlSync = useUrlSync({
168
+ syncToUrl: syncToUrl,
169
+ extraUrlParams: extraUrlParams
170
+ }),
171
+ urlInitialValues = _useUrlSync.urlInitialValues,
172
+ onUrlSyncFinish = _useUrlSync.onUrlSyncFinish,
173
+ onUrlSyncReset = _useUrlSync.onUrlSyncReset;
174
+ // initialValues is MOUNT-ONLY (documented contract; useFormCore re-freezes
175
+ // as a safety net) — compute the URL merge once so the freeze is visible
176
+ // where the props enter, instead of recomputing dead spreads per render.
177
+ var mergedInitialValuesRef = useRef(null);
178
+ if (mergedInitialValuesRef.current === null) {
179
+ mergedInitialValuesRef.current = syncToUrl ? syncToUrlAsImportant ? Object.assign(Object.assign({}, initialValues), urlInitialValues) : Object.assign(Object.assign({}, urlInitialValues), initialValues) : initialValues !== null && initialValues !== void 0 ? initialValues : {};
180
+ }
181
+ var mergedInitialValues = mergedInitialValuesRef.current;
182
+ // Bumped on every reset — an in-flight submit captures it and aborts when
183
+ // it changed underneath (the user discarded the submission's values).
184
+ var resetEpochRef = useRef(0);
185
+ // Reset chain: form-level onReset receives the (post-reset) formatted
186
+ // values, then the form's own URL params are cleared. useMemoizedFn defers
187
+ // execution to event time, when `formInstance` (created just below) exists.
188
+ var fireFormReset = useMemoizedFn(function () {
189
+ resetEpochRef.current += 1;
190
+ var finalValues = applyPipeline(formInstance.getFieldsValue());
191
+ onReset === null || onReset === void 0 ? void 0 : onReset(finalValues);
192
+ onUrlSyncReset();
193
+ });
128
194
  // ── Form engine (useForm with async validation) ──
129
195
  var _useForm = useForm({
130
- initialValues: initialValues,
196
+ initialValues: mergedInitialValues,
131
197
  onValuesChange: onValuesChange,
132
- onReset: onReset,
198
+ onReset: fireFormReset,
133
199
  size: size,
134
200
  labelAlign: labelAlign,
135
- disabled: disabled || isLoading,
201
+ disabled: disabled,
136
202
  colon: colon,
137
203
  requiredMark: requiredMark,
138
204
  validateTrigger: validateTrigger
139
205
  }),
140
206
  formInstance = _useForm.formInstance,
141
- internals = _useForm.internals;
207
+ internals = _useForm.internals,
208
+ store = _useForm.store;
142
209
  // ── Async submit with transform pipeline ──
210
+ // Re-entry guard: a second submit while one is in flight is ignored (the
211
+ // ref catches two calls in the same tick).
143
212
  var wrappedHandleSubmit = useEventCallback(function (e) {
144
213
  return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
145
- var _a, validatedValues, pipelined, typed, _t;
214
+ var _a, _b, _c, epoch, validatedValues, pipelined, result, typed, _t;
146
215
  return _regeneratorRuntime.wrap(function (_context) {
147
216
  while (1) switch (_context.prev = _context.next) {
148
217
  case 0:
149
218
  e === null || e === void 0 ? void 0 : e.preventDefault();
219
+ if (!submittingRef.current) {
220
+ _context.next = 1;
221
+ break;
222
+ }
223
+ return _context.abrupt("return");
224
+ case 1:
225
+ submittingRef.current = true;
150
226
  setSubmitting(true);
151
- _context.prev = 1;
152
- _context.next = 2;
227
+ (_a = onLoadingChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onLoadingChangeRef, true);
228
+ epoch = resetEpochRef.current;
229
+ _context.prev = 2;
230
+ _context.next = 3;
153
231
  return formInstance.validateFields();
154
- case 2:
232
+ case 3:
155
233
  validatedValues = _context.sent;
234
+ if (!(epoch !== resetEpochRef.current)) {
235
+ _context.next = 4;
236
+ break;
237
+ }
238
+ return _context.abrupt("return");
239
+ case 4:
156
240
  pipelined = applyPipeline(validatedValues);
157
- _context.next = 3;
158
- return (_a = onFinishRef.current) === null || _a === void 0 ? void 0 : _a.call(onFinishRef, pipelined);
159
- case 3:
160
241
  _context.next = 5;
242
+ return (_b = onFinishRef.current) === null || _b === void 0 ? void 0 : _b.call(onFinishRef, pipelined);
243
+ case 5:
244
+ result = _context.sent;
245
+ // Sync the URL unless onFinish explicitly returned false (a throw above
246
+ // also skips — a failed submit must not pollute the URL), and only if
247
+ // the user did NOT reset the form while the submit was in flight.
248
+ if (result !== false && epoch === resetEpochRef.current) {
249
+ onUrlSyncFinish(pipelined);
250
+ }
251
+ _context.next = 8;
161
252
  break;
162
- case 4:
163
- _context.prev = 4;
164
- _t = _context["catch"](1);
253
+ case 6:
254
+ _context.prev = 6;
255
+ _t = _context["catch"](2);
256
+ if (!(epoch !== resetEpochRef.current)) {
257
+ _context.next = 7;
258
+ break;
259
+ }
260
+ return _context.abrupt("return");
261
+ case 7:
165
262
  typed = _t;
166
263
  onFinishFailed === null || onFinishFailed === void 0 ? void 0 : onFinishFailed({
167
264
  values: typed.values,
168
265
  errors: typed.errors
169
266
  });
170
- case 5:
171
- _context.prev = 5;
267
+ case 8:
268
+ _context.prev = 8;
269
+ submittingRef.current = false;
172
270
  setSubmitting(false);
173
- return _context.finish(5);
174
- case 6:
271
+ (_c = onLoadingChangeRef.current) === null || _c === void 0 ? void 0 : _c.call(onLoadingChangeRef, false);
272
+ return _context.finish(8);
273
+ case 9:
175
274
  case "end":
176
275
  return _context.stop();
177
276
  }
178
- }, _callee, null, [[1, 4, 5, 6]]);
277
+ }, _callee, null, [[2, 6, 8, 9]]);
179
278
  }));
180
279
  });
181
280
  // ── ProForm instance: superset of FormInstance ──
@@ -184,9 +283,18 @@ var ProFormBase = function ProFormBase(props) {
184
283
  getFieldsFormatValue: function getFieldsFormatValue() {
185
284
  return applyPipeline(formInstance.getFieldsValue());
186
285
  },
286
+ getFieldFormatValue: function getFieldFormatValue(name) {
287
+ return resolveValue(formatValuesKeepNil(formInstance.getFieldsValue()), name);
288
+ },
289
+ getFieldFormatValueObject: function getFieldFormatValueObject(name) {
290
+ var formatted = formatValuesKeepNil(formInstance.getFieldsValue());
291
+ if (!name) return formatted;
292
+ var topKey = name.split('.')[0];
293
+ return _defineProperty({}, topKey, formatted[topKey]);
294
+ },
187
295
  validateFieldsReturnFormatValue: function validateFieldsReturnFormatValue() {
188
296
  return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
189
- var vals, _t2;
297
+ var vals, errors, _t2;
190
298
  return _regeneratorRuntime.wrap(function (_context2) {
191
299
  while (1) switch (_context2.prev = _context2.next) {
192
300
  case 0:
@@ -202,8 +310,12 @@ var ProFormBase = function ProFormBase(props) {
202
310
  case 2:
203
311
  _context2.prev = 2;
204
312
  _t2 = _context2["catch"](0);
313
+ // validateFields rejects with an Error carrying the field errors map
314
+ // (same shape wrappedHandleSubmit consumes above).
315
+ errors = _t2.errors;
205
316
  return _context2.abrupt("return", {
206
- success: false
317
+ success: false,
318
+ errors: errors !== null && errors !== void 0 ? errors : {}
207
319
  });
208
320
  case 3:
209
321
  case "end":
@@ -226,7 +338,20 @@ var ProFormBase = function ProFormBase(props) {
226
338
  var serializedParams = useMemo(function () {
227
339
  return stableSerialize(params);
228
340
  }, [params]);
341
+ // onInit fires exactly once: after the FIRST request resolves when a
342
+ // request is configured, otherwise right after mount.
343
+ var initFiredRef = useRef(false);
344
+ var fireInit = useMemoizedFn(function () {
345
+ var _a;
346
+ if (initFiredRef.current) return;
347
+ initFiredRef.current = true;
348
+ (_a = onInitRef.current) === null || _a === void 0 ? void 0 : _a.call(onInitRef, applyPipeline(formInstance.getFieldsValue()), proFormFormInstance);
349
+ });
229
350
  useEffect(function () {
351
+ // Staleness guard: if params change again before this fetch resolves, the
352
+ // cleanup marks it stale so the late response can't overwrite the values
353
+ // a newer request already (or will) set.
354
+ var stale = false;
230
355
  var fetchData = function fetchData() {
231
356
  return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
232
357
  var requestFn, data;
@@ -246,12 +371,17 @@ var ProFormBase = function ProFormBase(props) {
246
371
  return requestFn(params);
247
372
  case 3:
248
373
  data = _context3.sent;
249
- if (data && _typeof(data) === 'object') {
374
+ if (!stale && data && _typeof(data) === 'object') {
250
375
  formInstance.setFieldsValue(data);
251
376
  }
252
377
  case 4:
253
378
  _context3.prev = 4;
254
- setRequestLoading(false);
379
+ if (!stale) {
380
+ setRequestLoading(false);
381
+ // Only a NON-superseded settle initializes the form: a stale
382
+ // request's data was discarded, so its values must not be reported.
383
+ fireInit();
384
+ }
255
385
  return _context3.finish(4);
256
386
  case 5:
257
387
  case "end":
@@ -262,22 +392,32 @@ var ProFormBase = function ProFormBase(props) {
262
392
  };
263
393
  if (requestRef.current) {
264
394
  fetchData();
395
+ } else {
396
+ fireInit();
265
397
  }
398
+ return function () {
399
+ stale = true;
400
+ };
266
401
  // Re-fetch ONLY when params change by VALUE: depending on the raw `params`
267
402
  // reference would re-run on every render for inline object literals and,
268
403
  // combined with the loading setState, loop forever.
269
404
  }, [serializedParams]);
405
+ // ── autoFocusFirstInput ──
406
+ var formElRef = useRef(null);
407
+ useEffect(function () {
408
+ var _a;
409
+ if (!autoFocusFirstInput || mode === 'read') return;
410
+ var firstInput = (_a = formElRef.current) === null || _a === void 0 ? void 0 : _a.querySelector('input:not([type="hidden"]):not([disabled]), textarea:not([disabled]), select:not([disabled])');
411
+ firstInput === null || firstInput === void 0 ? void 0 : firstInput.focus();
412
+ // Mount-only by design.
413
+ }, []);
270
414
  // ── Split context ──
271
- // Volatile slice: changes on every value/error update (per keystroke).
272
- var stateValue = useMemo(function () {
273
- return {
274
- values: internals.values,
275
- errors: internals.errors,
276
- warnings: internals.warnings,
277
- touched: internals.touched,
278
- validating: internals.validating
279
- };
280
- }, [internals.values, internals.errors, internals.warnings, internals.touched, internals.validating]);
415
+ // Form-level prop bags are often inline literals: keep their identity
416
+ // stable while shallow-equal so the stable slice doesn't churn per render.
417
+ var stableFieldProps = useShallowStable(fieldProps);
418
+ var stableFormItemProps = useShallowStable(formItemProps);
419
+ var stableColProps = useShallowStable(colProps);
420
+ var stableLayout = useShallowStable(layout);
281
421
  // Stable slice: configuration + identity-stable dispatchers/instance.
282
422
  // Changes only when form-level props change — NOT on keystrokes, so
283
423
  // subscribers like Submitter and the field factories skip those renders.
@@ -293,7 +433,10 @@ var ProFormBase = function ProFormBase(props) {
293
433
  unregisterField: internals.unregisterField,
294
434
  size: size,
295
435
  labelAlign: labelAlign,
296
- disabled: disabled || isLoading,
436
+ // Submitting/loading does NOT disable fields — only the
437
+ // explicit `disabled` prop does. Keeping isLoading out of this slice
438
+ // means a submit cycle no longer re-renders every field shell.
439
+ disabled: disabled,
297
440
  colon: colon,
298
441
  requiredMark: requiredMark,
299
442
  validateTrigger: validateTrigger,
@@ -301,27 +444,37 @@ var ProFormBase = function ProFormBase(props) {
301
444
  readonly: readonly,
302
445
  mode: mode,
303
446
  grid: grid,
304
- colProps: colProps !== null && colProps !== void 0 ? colProps : {
305
- span: 24
306
- },
447
+ colProps: stableColProps !== null && stableColProps !== void 0 ? stableColProps : DEFAULT_COL_PROPS,
307
448
  registerTransform: registerTransform,
308
449
  unregisterTransform: unregisterTransform,
309
450
  registerValueType: registerValueType,
310
451
  unregisterValueType: unregisterValueType,
311
- fieldProps: fieldProps,
312
- formItemProps: formItemProps
452
+ fieldProps: stableFieldProps,
453
+ formItemProps: stableFormItemProps,
454
+ layout: stableLayout,
455
+ formComponentType: formComponentType
313
456
  };
314
- }, [proFormFormInstance, internals.setFieldValue, internals.setFieldError, internals.setFieldWarning, internals.validateField, internals.validateFieldAsync, internals.registerField, internals.unregisterField, size, labelAlign, disabled, isLoading, colon, requiredMark, validateTrigger, readonly, mode, grid, colProps, registerTransform, unregisterTransform, registerValueType, unregisterValueType, fieldProps, formItemProps]);
457
+ }, [proFormFormInstance, internals.setFieldValue, internals.setFieldError, internals.setFieldWarning, internals.validateField, internals.validateFieldAsync, internals.registerField, internals.unregisterField, size, labelAlign, disabled, colon, requiredMark, validateTrigger, readonly, mode, grid, stableColProps, registerTransform, unregisterTransform, registerValueType, unregisterValueType, stableFieldProps, stableFormItemProps, stableLayout, formComponentType]);
315
458
  var WrapperComponent = grid ? Row : Fragment;
316
459
  var wrapperProps = grid ? Object.assign({}, rowProps) : {};
460
+ // Reset callback chain: the Submitter resets the values first, then the
461
+ // submitter-level onReset, then the form-level onReset (with finalValues)
462
+ // and the URL cleanup — fired exactly once per reset action.
463
+ var handleSubmitterReset = useMemoizedFn(function () {
464
+ var _a;
465
+ if (_typeof(submitter) === 'object') (_a = submitter.onReset) === null || _a === void 0 ? void 0 : _a.call(submitter);
466
+ fireFormReset();
467
+ });
317
468
  var submitterNode = submitter !== false && mode !== 'read' ? _jsx(Submitter, Object.assign({}, _typeof(submitter) === 'object' ? submitter : {}, {
469
+ onReset: handleSubmitterReset,
318
470
  loading: isLoading
319
471
  })) : null;
320
472
  return _jsx(ProFormStableContext.Provider, {
321
473
  value: stableValue,
322
474
  children: _jsx(ProFormStateContext.Provider, {
323
- value: stateValue,
475
+ value: store,
324
476
  children: _jsxs("form", Object.assign({}, rest, {
477
+ ref: formElRef,
325
478
  className: formClasses(undefined, joinCls(classes(), className)),
326
479
  onSubmit: wrappedHandleSubmit,
327
480
  onReset: internals.handleReset,
@@ -335,4 +488,4 @@ var ProFormBase = function ProFormBase(props) {
335
488
  ProFormBase.displayName = 'ProForm';
336
489
  export var ProForm = /*#__PURE__*/memo(ProFormBase);
337
490
  export default ProForm;
338
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtLmpzIiwiY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL1Byb0Zvcm0udHN4Il0sIm5hbWVzIjpbIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsImFkb3B0IiwidmFsdWUiLCJyZXNvbHZlIiwiUHJvbWlzZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIl9fcmVzdCIsInMiLCJ0IiwicCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImluZGV4T2YiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJpIiwibGVuZ3RoIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiUmVhY3QiLCJtZW1vIiwidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVJlZiIsIkZyYWdtZW50IiwidXNlTGF0ZXN0IiwidXNlU2FmZVN0YXRlIiwidXNlTWVtb2l6ZWRGbiIsInVzZUV2ZW50Q2FsbGJhY2siLCJkZWZhdWx0IiwiY2xhc3NuYW1lcyIsImpvaW5DbHMiLCJSb3ciLCJ1c2VGb3JtIiwiUHJvRm9ybVN0YWJsZUNvbnRleHQiLCJQcm9Gb3JtU3RhdGVDb250ZXh0IiwiU3VibWl0dGVyIiwiQ1NTX1BSRUZJWCIsInN0YWJsZVNlcmlhbGl6ZSIsInRyYW5zZm9ybVN1Ym1pdFZhbHVlcyIsIm9taXROaWxWYWx1ZXMiLCJmb3JtYXREYXRlVmFsdWVzIiwiY2xhc3NlcyIsImZvcm1DbGFzc2VzIiwiUHJvRm9ybUJhc2UiLCJwcm9wcyIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwic3VibWl0dGVyIiwiX3Byb3BzJHJlYWRvbmx5IiwicmVhZG9ubHkiLCJtb2RlUHJvcCIsIm1vZGUiLCJfcHJvcHMkZ3JpZCIsImdyaWQiLCJjb2xQcm9wcyIsInJvd1Byb3BzIiwiX3Byb3BzJGxvYWRpbmciLCJsb2FkaW5nIiwicmVxdWVzdCIsInBhcmFtcyIsImluaXRpYWxWYWx1ZXMiLCJvbkZpbmlzaCIsIm9uRmluaXNoRmFpbGVkIiwib25WYWx1ZXNDaGFuZ2UiLCJvblJlc2V0IiwiZm9ybVJlZiIsIl9wcm9wcyRvbWl0TmlsIiwib21pdE5pbCIsIl9wcm9wcyRkYXRlRm9ybWF0dGVyIiwiZGF0ZUZvcm1hdHRlciIsImZpZWxkUHJvcHMiLCJmb3JtSXRlbVByb3BzIiwiX3Byb3BzJHNpemUiLCJzaXplIiwiX3Byb3BzJGxhYmVsQWxpZ24iLCJsYWJlbEFsaWduIiwiX3Byb3BzJGRpc2FibGVkIiwiZGlzYWJsZWQiLCJfcHJvcHMkY29sb24iLCJjb2xvbiIsIl9wcm9wcyRyZXF1aXJlZE1hcmsiLCJyZXF1aXJlZE1hcmsiLCJfcHJvcHMkdmFsaWRhdGVUcmlnZ2UiLCJ2YWxpZGF0ZVRyaWdnZXIiLCJfcHJlZml4Q2xzIiwicHJlZml4Q2xzIiwicmVzdCIsIl91c2VTYWZlU3RhdGUiLCJfdXNlU2FmZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwicmVxdWVzdExvYWRpbmciLCJzZXRSZXF1ZXN0TG9hZGluZyIsIl91c2VTYWZlU3RhdGUzIiwiX3VzZVNhZmVTdGF0ZTQiLCJzdWJtaXR0aW5nIiwic2V0U3VibWl0dGluZyIsImlzTG9hZGluZyIsInRyYW5zZm9ybUtleVJlZiIsInZhbHVlVHlwZVJlZiIsInJlZ2lzdGVyVHJhbnNmb3JtIiwibmFtZSIsImZuIiwiY3VycmVudCIsInVucmVnaXN0ZXJUcmFuc2Zvcm0iLCJyZWdpc3RlclZhbHVlVHlwZSIsInZhbHVlVHlwZSIsInVucmVnaXN0ZXJWYWx1ZVR5cGUiLCJvbkZpbmlzaFJlZiIsImFwcGx5UGlwZWxpbmUiLCJ2YWx1ZXMiLCJfdXNlRm9ybSIsImZvcm1JbnN0YW5jZSIsImludGVybmFscyIsIndyYXBwZWRIYW5kbGVTdWJtaXQiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJfYSIsInZhbGlkYXRlZFZhbHVlcyIsInBpcGVsaW5lZCIsInR5cGVkIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwicHJldmVudERlZmF1bHQiLCJ2YWxpZGF0ZUZpZWxkcyIsInNlbnQiLCJlcnJvcnMiLCJmaW5pc2giLCJzdG9wIiwicHJvRm9ybUZvcm1JbnN0YW5jZSIsImFzc2lnbiIsImdldEZpZWxkc0Zvcm1hdFZhbHVlIiwiZ2V0RmllbGRzVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkc1JldHVybkZvcm1hdFZhbHVlIiwiX2NhbGxlZTIiLCJ2YWxzIiwiX3QyIiwiX2NvbnRleHQyIiwiYWJydXB0Iiwic3VjY2VzcyIsInN1Ym1pdEZvcm0iLCJyZXF1ZXN0UmVmIiwic2VyaWFsaXplZFBhcmFtcyIsImZldGNoRGF0YSIsIl9jYWxsZWUzIiwicmVxdWVzdEZuIiwiZGF0YSIsIl9jb250ZXh0MyIsIl90eXBlb2YiLCJzZXRGaWVsZHNWYWx1ZSIsInN0YXRlVmFsdWUiLCJ3YXJuaW5ncyIsInRvdWNoZWQiLCJ2YWxpZGF0aW5nIiwic3RhYmxlVmFsdWUiLCJzZXRGaWVsZFZhbHVlIiwic2V0RmllbGRFcnJvciIsInNldEZpZWxkV2FybmluZyIsInZhbGlkYXRlRmllbGQiLCJ2YWxpZGF0ZUZpZWxkQXN5bmMiLCJyZWdpc3RlckZpZWxkIiwidW5yZWdpc3RlckZpZWxkIiwic3BhbiIsIldyYXBwZXJDb21wb25lbnQiLCJ3cmFwcGVyUHJvcHMiLCJzdWJtaXR0ZXJOb2RlIiwiUHJvdmlkZXIiLCJ1bmRlZmluZWQiLCJvblN1Ym1pdCIsImhhbmRsZVJlc2V0IiwiZGlzcGxheU5hbWUiLCJQcm9Gb3JtIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFJQSxTQUFTLEdBQUksSUFBSSxJQUFJLElBQUksQ0FBQ0EsU0FBUyxJQUFLLFVBQVVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxDQUFDLEVBQUVDLFNBQVMsRUFBRTtFQUNyRixTQUFTQyxLQUFLQSxDQUFDQyxL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QUVnRCxTQUFTLENBQUMyRCxXQUFXO1FBQUE5SCxRQUFBLEVBQUEsQ0FFOUI5QixJQUFBLENBQUNzSixnQkFBZ0IsRUFBQWhLLE1BQUEsQ0FBQStILE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBS2tDLFlBQVksRUFBQTtVQUFBekgsUUFBQSxFQUFHQTtRQUFRLENBQUEsQ0FBQSxDQUFvQixFQUNoRTBILGFBQWE7TUFBQSxDQUFBLENBQUE7SUFDVCxDQUFBO0VBQ3NCLENBQUEsQ0FDRDtBQUVwQyxDQUFDO0FBRUQ1SCxXQUFXLENBQUNpSSxXQUFXLEdBQUcsU0FBUztBQVduQyxPQUFPLElBQU1DLE9BQU8sZ0JBQUcxSixJQUFJLENBQUN3QixXQUFXLENBQWdDO0FBRXZFLGVBQWVrSSxPQUFPIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IFJlYWN0LCB7IG1lbW8sIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VMYXRlc3QgZnJvbSAnQDFtb25leS9ob29rcy91c2VMYXRlc3QnO1xuaW1wb3J0IHVzZVNhZmVTdGF0ZSBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZVNhZmVTdGF0ZSc7XG5pbXBvcnQgdXNlTWVtb2l6ZWRGbiBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZU1lbW9pemVkRm4nO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQDFtb25leS9ob29rcy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgY2xhc3NuYW1lcywgam9pbkNscyB9IGZyb20gJy4uLy4uL3V0aWxzL2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgUm93IH0gZnJvbSAnLi4vR3JpZCc7XG5pbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAnLi9jb3JlL2hvb2tzL3VzZUZvcm0nO1xuaW1wb3J0IHsgUHJvRm9ybVN0YWJsZUNvbnRleHQsIFByb0Zvcm1TdGF0ZUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgU3VibWl0dGVyIH0gZnJvbSAnLi9TdWJtaXR0ZXInO1xuaW1wb3J0IHsgQ1NTX1BSRUZJWCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IHN0YWJsZVNlcmlhbGl6ZSwgdHJhbnNmb3JtU3VibWl0VmFsdWVzLCBvbWl0TmlsVmFsdWVzLCBmb3JtYXREYXRlVmFsdWVzIH0gZnJvbSAnLi91dGlscyc7XG5jb25zdCBjbGFzc2VzID0gY2xhc3NuYW1lcyhDU1NfUFJFRklYKTtcbmNvbnN0IGZvcm1DbGFzc2VzID0gY2xhc3NuYW1lcygnZm9ybScpO1xuY29uc3QgUHJvRm9ybUJhc2UgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCB7IGNoaWxkcmVuLCBjbGFzc05hbWUsIHN1Ym1pdHRlciwgcmVhZG9ubHkgPSBmYWxzZSwgbW9kZTogbW9kZVByb3AsIGdyaWQgPSBmYWxzZSwgY29sUHJvcHMsIHJvd1Byb3BzLCBsb2FkaW5nID0gZmFsc2UsIHJlcXVlc3QsIHBhcmFtcywgaW5pdGlhbFZhbHVlcywgb25GaW5pc2gsIG9uRmluaXNoRmFpbGVkLCBvblZhbHVlc0NoYW5nZSwgb25SZXNldCwgZm9ybVJlZiwgb21pdE5pbCA9IHRydWUsIGRhdGVGb3JtYXR0ZXIgPSAnc3RyaW5nJywgZmllbGRQcm9wcywgZm9ybUl0ZW1Qcm9wcywgc2l6ZSA9ICdtaWRkbGUnLCBsYWJlbEFsaWduID0gJ2xlZnQnLCBkaXNhYmxlZCA9IGZhbHNlLCBjb2xvbiA9IHRydWUsIHJlcXVpcmVkTWFyayA9IHRydWUsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScsIHByZWZpeENsczogX3ByZWZpeENscyB9ID0gcHJvcHMsIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwic3VibWl0dGVyXCIsIFwicmVhZG9ubHlcIiwgXCJtb2RlXCIsIFwiZ3JpZFwiLCBcImNvbFByb3BzXCIsIFwicm93UHJvcHNcIiwgXCJsb2FkaW5nXCIsIFwicmVxdWVzdFwiLCBcInBhcmFtc1wiLCBcImluaXRpYWxWYWx1ZXNcIiwgXCJvbkZpbmlzaFwiLCBcIm9uRmluaXNoRmFpbGVkXCIsIFwib25WYWx1ZXNDaGFuZ2VcIiwgXCJvblJlc2V0XCIsIFwiZm9ybVJlZlwiLCBcIm9taXROaWxcIiwgXCJkYXRlRm9ybWF0dGVyXCIsIFwiZmllbGRQcm9wc1wiLCBcImZvcm1JdGVtUHJvcHNcIiwgXCJzaXplXCIsIFwibGFiZWxBbGlnblwiLCBcImRpc2FibGVkXCIsIFwiY29sb25cIiwgXCJyZXF1aXJlZE1hcmtcIiwgXCJ2YWxpZGF0ZVRyaWdnZXJcIiwgXCJwcmVmaXhDbHNcIl0pO1xuICAgIGNvbnN0IG1vZGUgPSBtb2RlUHJvcCAhPT0gbnVsbCAmJiBtb2RlUHJvcCAhPT0gdm9pZCAwID8gbW9kZVByb3AgOiAocmVhZG9ubHkgPyAncmVhZCcgOiAnZWRpdCcpO1xuICAgIGNvbnN0IFtyZXF1ZXN0TG9hZGluZywgc2V0UmVxdWVzdExvYWRpbmddID0gdXNlU2FmZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbc3VibWl0dGluZywgc2V0U3VibWl0dGluZ10gPSB1c2VTYWZlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IGlzTG9hZGluZyA9IGxvYWRpbmcgfHwgcmVxdWVzdExvYWRpbmcgfHwgc3VibWl0dGluZztcbiAgICAvLyDilIDilIAgVHJhbnNmb3JtIC8gdmFsdWVUeXBlIHJlZ2lzdHJpZXMg4pSA4pSAXG4gICAgY29uc3QgdHJhbnNmb3JtS2V5UmVmID0gdXNlUmVmKHt9KTtcbiAgICBjb25zdCB2YWx1ZVR5cGVSZWYgPSB1c2VSZWYoe30pO1xuICAgIGNvbnN0IHJlZ2lzdGVyVHJhbnNmb3JtID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgZm4pID0+IHtcbiAgICAgICAgdHJhbnNmb3JtS2V5UmVmLmN1cnJlbnRbbmFtZV0gPSBmbjtcbiAgICB9KTtcbiAgICBjb25zdCB1bnJlZ2lzdGVyVHJhbnNmb3JtID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICBkZWxldGUgdHJhbnNmb3JtS2V5UmVmLmN1cnJlbnRbbmFtZV07XG4gICAgfSk7XG4gICAgY29uc3QgcmVnaXN0ZXJWYWx1ZVR5cGUgPSB1c2VNZW1vaXplZEZuKChuYW1lLCB2YWx1ZVR5cGUpID0+IHtcbiAgICAgICAgdmFsdWVUeXBlUmVmLmN1cnJlbnRbbmFtZV0gPSB2YWx1ZVR5cGU7XG4gICAgfSk7XG4gICAgY29uc3QgdW5yZWdpc3RlclZhbHVlVHlwZSA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgZGVsZXRlIHZhbHVlVHlwZVJlZi5jdXJyZW50W25hbWVdO1xuICAgIH0pO1xuICAgIGNvbnN0IG9uRmluaXNoUmVmID0gdXNlTGF0ZXN0KG9uRmluaXNoKTtcbiAgICAvLyBTdWJtaXQgcGlwZWxpbmU6IGRhdGVzIOKGkiBmaWVsZCB0cmFuc2Zvcm1zIOKGkiBvbWl0TmlsXG4gICAgY29uc3QgYXBwbHlQaXBlbGluZSA9IHVzZU1lbW9pemVkRm4oKHZhbHVlcykgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gZm9ybWF0RGF0ZVZhbHVlcyh2YWx1ZXMsIGRhdGVGb3JtYXR0ZXIsIHZhbHVlVHlwZVJlZi5jdXJyZW50KTtcbiAgICAgICAgcmVzdWx0ID0gdHJhbnNmb3JtU3VibWl0VmFsdWVzKHJlc3VsdCwgdHJhbnNmb3JtS2V5UmVmLmN1cnJlbnQpO1xuICAgICAgICBpZiAob21pdE5pbClcbiAgICAgICAgICAgIHJlc3VsdCA9IG9taXROaWxWYWx1ZXMocmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgICAvLyDilIDilIAgRm9ybSBlbmdpbmUgKHVzZUZvcm0gd2l0aCBhc3luYyB2YWxpZGF0aW9uKSDilIDilIBcbiAgICBjb25zdCB7IGZvcm1JbnN0YW5jZSwgaW50ZXJuYWxzIH0gPSB1c2VGb3JtKHtcbiAgICAgICAgaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgb25WYWx1ZXNDaGFuZ2UsXG4gICAgICAgIG9uUmVzZXQsXG4gICAgICAgIHNpemUsXG4gICAgICAgIGxhYmVsQWxpZ24sXG4gICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCB8fCBpc0xvYWRpbmcsXG4gICAgICAgIGNvbG9uLFxuICAgICAgICByZXF1aXJlZE1hcmssXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICB9KTtcbiAgICAvLyDilIDilIAgQXN5bmMgc3VibWl0IHdpdGggdHJhbnNmb3JtIHBpcGVsaW5lIOKUgOKUgFxuICAgIGNvbnN0IHdyYXBwZWRIYW5kbGVTdWJtaXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgc2V0U3VibWl0dGluZyh0cnVlKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhbHVlcyA9IHlpZWxkIGZvcm1JbnN0YW5jZS52YWxpZGF0ZUZpZWxkcygpO1xuICAgICAgICAgICAgY29uc3QgcGlwZWxpbmVkID0gYXBwbHlQaXBlbGluZSh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgeWllbGQgKChfYSA9IG9uRmluaXNoUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKG9uRmluaXNoUmVmLCBwaXBlbGluZWQpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zdCB0eXBlZCA9IGVycjtcbiAgICAgICAgICAgIG9uRmluaXNoRmFpbGVkID09PSBudWxsIHx8IG9uRmluaXNoRmFpbGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaEZhaWxlZCh7IHZhbHVlczogdHlwZWQudmFsdWVzLCBlcnJvcnM6IHR5cGVkLmVycm9ycyB9KTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHNldFN1Ym1pdHRpbmcoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIC8vIOKUgOKUgCBQcm9Gb3JtIGluc3RhbmNlOiBzdXBlcnNldCBvZiBGb3JtSW5zdGFuY2Ug4pSA4pSAXG4gICAgY29uc3QgcHJvRm9ybUZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUluc3RhbmNlKSwgeyBnZXRGaWVsZHNGb3JtYXRWYWx1ZTogKCkgPT4gYXBwbHlQaXBlbGluZShmb3JtSW5zdGFuY2UuZ2V0RmllbGRzVmFsdWUoKSksIHZhbGlkYXRlRmllbGRzUmV0dXJuRm9ybWF0VmFsdWU6ICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxzID0geWllbGQgZm9ybUluc3RhbmNlLnZhbGlkYXRlRmllbGRzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgdmFsdWVzOiBhcHBseVBpcGVsaW5lKHZhbHMpIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSwgc3VibWl0Rm9ybTogd3JhcHBlZEhhbmRsZVN1Ym1pdCB9KSksIFtmb3JtSW5zdGFuY2UsIGFwcGx5UGlwZWxpbmUsIHdyYXBwZWRIYW5kbGVTdWJtaXRdKTtcbiAgICAvLyDilIDilIAgU3luYyB0byBmb3JtUmVmIHByb3Ag4pSA4pSAXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGZvcm1SZWYpIHtcbiAgICAgICAgICAgIGZvcm1SZWYuY3VycmVudCA9IHByb0Zvcm1Gb3JtSW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICB9LCBbZm9ybVJlZiwgcHJvRm9ybUZvcm1JbnN0YW5jZV0pO1xuICAgIC8vIOKUgOKUgCByZXF1ZXN0IC8gcGFyYW1zIGF1dG8tbG9hZCDilIDilIBcbiAgICBjb25zdCByZXF1ZXN0UmVmID0gdXNlTGF0ZXN0KHJlcXVlc3QpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRQYXJhbXMgPSB1c2VNZW1vKCgpID0+IHN0YWJsZVNlcmlhbGl6ZShwYXJhbXMpLCBbcGFyYW1zXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgZmV0Y2hEYXRhID0gKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Rm4gPSByZXF1ZXN0UmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICBpZiAoIXJlcXVlc3RGbilcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBzZXRSZXF1ZXN0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkIHJlcXVlc3RGbihwYXJhbXMpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBmb3JtSW5zdGFuY2Uuc2V0RmllbGRzVmFsdWUoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgc2V0UmVxdWVzdExvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJlcXVlc3RSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgZmV0Y2hEYXRhKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmUtZmV0Y2ggT05MWSB3aGVuIHBhcmFtcyBjaGFuZ2UgYnkgVkFMVUU6IGRlcGVuZGluZyBvbiB0aGUgcmF3IGBwYXJhbXNgXG4gICAgICAgIC8vIHJlZmVyZW5jZSB3b3VsZCByZS1ydW4gb24gZXZlcnkgcmVuZGVyIGZvciBpbmxpbmUgb2JqZWN0IGxpdGVyYWxzIGFuZCxcbiAgICAgICAgLy8gY29tYmluZWQgd2l0aCB0aGUgbG9hZGluZyBzZXRTdGF0ZSwgbG9vcCBmb3JldmVyLlxuICAgIH0sIFtzZXJpYWxpemVkUGFyYW1zXSk7XG4gICAgLy8g4pSA4pSAIFNwbGl0IGNvbnRleHQg4pSA4pSAXG4gICAgLy8gVm9sYXRpbGUgc2xpY2U6IGNoYW5nZXMgb24gZXZlcnkgdmFsdWUvZXJyb3IgdXBkYXRlIChwZXIga2V5c3Ryb2tlKS5cbiAgICBjb25zdCBzdGF0ZVZhbHVlID0gdXNlTWVtbygoKSA9PiAoe1xuICAgICAgICB2YWx1ZXM6IGludGVybmFscy52YWx1ZXMsXG4gICAgICAgIGVycm9yczogaW50ZXJuYWxzLmVycm9ycyxcbiAgICAgICAgd2FybmluZ3M6IGludGVybmFscy53YXJuaW5ncyxcbiAgICAgICAgdG91Y2hlZDogaW50ZXJuYWxzLnRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmc6IGludGVybmFscy52YWxpZGF0aW5nLFxuICAgIH0pLCBbXG4gICAgICAgIGludGVybmFscy52YWx1ZXMsXG4gICAgICAgIGludGVybmFscy5lcnJvcnMsXG4gICAgICAgIGludGVybmFscy53YXJuaW5ncyxcbiAgICAgICAgaW50ZXJuYWxzLnRvdWNoZWQsXG4gICAgICAgIGludGVybmFscy52YWxpZGF0aW5nLFxuICAgIF0pO1xuICAgIC8vIFN0YWJsZSBzbGljZTogY29uZmlndXJhdGlvbiArIGlkZW50aXR5LXN0YWJsZSBkaXNwYXRjaGVycy9pbnN0YW5jZS5cbiAgICAvLyBDaGFuZ2VzIG9ubHkgd2hlbiBmb3JtLWxldmVsIHByb3BzIGNoYW5nZSDigJQgTk9UIG9uIGtleXN0cm9rZXMsIHNvXG4gICAgLy8gc3Vic2NyaWJlcnMgbGlrZSBTdWJtaXR0ZXIgYW5kIHRoZSBmaWVsZCBmYWN0b3JpZXMgc2tpcCB0aG9zZSByZW5kZXJzLlxuICAgIGNvbnN0IHN0YWJsZVZhbHVlID0gdXNlTWVtbygoKSA9PiAoe1xuICAgICAgICBmb3JtSW5zdGFuY2U6IHByb0Zvcm1Gb3JtSW5zdGFuY2UsXG4gICAgICAgIHNldEZpZWxkVmFsdWU6IGludGVybmFscy5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yOiBpbnRlcm5hbHMuc2V0RmllbGRFcnJvcixcbiAgICAgICAgc2V0RmllbGRXYXJuaW5nOiBpbnRlcm5hbHMuc2V0RmllbGRXYXJuaW5nLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkOiBpbnRlcm5hbHMudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jOiBpbnRlcm5hbHMudmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICByZWdpc3RlckZpZWxkOiBpbnRlcm5hbHMucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkOiBpbnRlcm5hbHMudW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBzaXplLFxuICAgICAgICBsYWJlbEFsaWduLFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQgfHwgaXNMb2FkaW5nLFxuICAgICAgICBjb2xvbixcbiAgICAgICAgcmVxdWlyZWRNYXJrLFxuICAgICAgICB2YWxpZGF0ZVRyaWdnZXIsXG4gICAgICAgIC8vIFByb0Zvcm0gc3BlY2lmaWNzXG4gICAgICAgIHJlYWRvbmx5LFxuICAgICAgICBtb2RlLFxuICAgICAgICBncmlkLFxuICAgICAgICBjb2xQcm9wczogY29sUHJvcHMgIT09IG51bGwgJiYgY29sUHJvcHMgIT09IHZvaWQgMCA/IGNvbFByb3BzIDogeyBzcGFuOiAyNCB9LFxuICAgICAgICByZWdpc3RlclRyYW5zZm9ybSxcbiAgICAgICAgdW5yZWdpc3RlclRyYW5zZm9ybSxcbiAgICAgICAgcmVnaXN0ZXJWYWx1ZVR5cGUsXG4gICAgICAgIHVucmVnaXN0ZXJWYWx1ZVR5cGUsXG4gICAgICAgIGZpZWxkUHJvcHMsXG4gICAgICAgIGZvcm1JdGVtUHJvcHMsXG4gICAgfSksIFtcbiAgICAgICAgcHJvRm9ybUZvcm1JbnN0YW5jZSxcbiAgICAgICAgaW50ZXJuYWxzLnNldEZpZWxkVmFsdWUsXG4gICAgICAgIGludGVybmFscy5zZXRGaWVsZEVycm9yLFxuICAgICAgICBpbnRlcm5hbHMuc2V0RmllbGRXYXJuaW5nLFxuICAgICAgICBpbnRlcm5hbHMudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgaW50ZXJuYWxzLnZhbGlkYXRlRmllbGRBc3luYyxcbiAgICAgICAgaW50ZXJuYWxzLnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGludGVybmFscy51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHNpemUsXG4gICAgICAgIGxhYmVsQWxpZ24sXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBpc0xvYWRpbmcsXG4gICAgICAgIGNvbG9uLFxuICAgICAgICByZXF1aXJlZE1hcmssXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICAgICAgcmVhZG9ubHksXG4gICAgICAgIG1vZGUsXG4gICAgICAgIGdyaWQsXG4gICAgICAgIGNvbFByb3BzLFxuICAgICAgICByZWdpc3RlclRyYW5zZm9ybSxcbiAgICAgICAgdW5yZWdpc3RlclRyYW5zZm9ybSxcbiAgICAgICAgcmVnaXN0ZXJWYWx1ZVR5cGUsXG4gICAgICAgIHVucmVnaXN0ZXJWYWx1ZVR5cGUsXG4gICAgICAgIGZpZWxkUHJvcHMsXG4gICAgICAgIGZvcm1JdGVtUHJvcHMsXG4gICAgXSk7XG4gICAgY29uc3QgV3JhcHBlckNvbXBvbmVudCA9IGdyaWQgPyBSb3cgOiBGcmFnbWVudDtcbiAgICBjb25zdCB3cmFwcGVyUHJvcHMgPSBncmlkID8gT2JqZWN0LmFzc2lnbih7fSwgcm93UHJvcHMpIDoge307XG4gICAgY29uc3Qgc3VibWl0dGVyTm9kZSA9IHN1Ym1pdHRlciAhPT0gZmFsc2UgJiYgbW9kZSAhPT0gJ3JlYWQnID8gKF9qc3goU3VibWl0dGVyLCBPYmplY3QuYXNzaWduKHt9LCAodHlwZW9mIHN1Ym1pdHRlciA9PT0gJ29iamVjdCcgPyBzdWJtaXR0ZXIgOiB7fSksIHsgbG9hZGluZzogaXNMb2FkaW5nIH0pKSkgOiBudWxsO1xuICAgIHJldHVybiAoX2pzeChQcm9Gb3JtU3RhYmxlQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogc3RhYmxlVmFsdWUsIGNoaWxkcmVuOiBfanN4KFByb0Zvcm1TdGF0ZUNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IHN0YXRlVmFsdWUsIGNoaWxkcmVuOiBfanN4cyhcImZvcm1cIiwgT2JqZWN0LmFzc2lnbih7fSwgcmVzdCwgeyBjbGFzc05hbWU6IGZvcm1DbGFzc2VzKHVuZGVmaW5lZCwgam9pbkNscyhjbGFzc2VzKCksIGNsYXNzTmFtZSkpLCBvblN1Ym1pdDogd3JhcHBlZEhhbmRsZVN1Ym1pdCwgb25SZXNldDogaW50ZXJuYWxzLmhhbmRsZVJlc2V0LCBjaGlsZHJlbjogW19qc3goV3JhcHBlckNvbXBvbmVudCwgT2JqZWN0LmFzc2lnbih7fSwgd3JhcHBlclByb3BzLCB7IGNoaWxkcmVuOiBjaGlsZHJlbiB9KSksIHN1Ym1pdHRlck5vZGVdIH0pKSB9KSB9KSk7XG59O1xuUHJvRm9ybUJhc2UuZGlzcGxheU5hbWUgPSAnUHJvRm9ybSc7XG5leHBvcnQgY29uc3QgUHJvRm9ybSA9IG1lbW8oUHJvRm9ybUJhc2UpO1xuZXhwb3J0IGRlZmF1bHQgUHJvRm9ybTsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
491
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtLmpzIiwiY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL1Byb0Zvcm0udHN4Il0sIm5hbWVzIjpbIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsImFkb3B0IiwidmFsdWUiLCJyZXNvbHZlIiwiUHJvbWlzZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIl9fcmVzdCIsInMiLCJ0IiwicCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImluZGV4T2YiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJpIiwibGVuZ3RoIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiUmVhY3QiLCJtZW1vIiwidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVJlZiIsIkZyYWdtZW50IiwidXNlTGF0ZXN0IiwidXNlU2FmZVN0YXRlIiwidXNlTWVtb2l6ZWRGbiIsInVzZUV2ZW50Q2FsbGJhY2siLCJkZWZhdWx0IiwiY2xhc3NuYW1lcyIsImpvaW5DbHMiLCJSb3ciLCJ1c2VGb3JtIiwiUHJvRm9ybVN0YWJsZUNvbnRleHQiLCJQcm9Gb3JtU3RhdGVDb250ZXh0IiwiU3VibWl0dGVyIiwiQ1NTX1BSRUZJWCIsInN0YWJsZVNlcmlhbGl6ZSIsInRyYW5zZm9ybVN1Ym1pdFZhbHVlcyIsIm9taXROaWxWYWx1ZXMiLCJmb3JtYXREYXRlVmFsdWVzIiwidXNlU2hhbGxvd1N0YWJsZSIsInVzZVVybFN5bmMiLCJyZXNvbHZlVmFsdWUiLCJjbGFzc2VzIiwiZm9ybUNsYXNzZXMiLCJERUZBVUxUX0NPTF9QUk9QUyIsInNwYW4iLCJQcm9Gb3JtQmFzZSIsInByb3BzIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJzdWJtaXR0ZXIiLCJfcHJvcHMkcmVhZG9ubHkiLCJyZWFkb25seSIsIm1vZGVQcm9wIiwibW9kZSIsIl9wcm9wcyRncmlkIiwiZ3JpZCIsImNvbFByb3BzIiwicm93UHJvcHMiLCJfcHJvcHMkbG9hZGluZyIsImxvYWRpbmciLCJyZXF1ZXN0IiwicGFyYW1zIiwiaW5pdGlhbFZhbHVlcyIsIm9uRmluaXNoIiwib25GaW5pc2hGYWlsZWQiLCJvblZhbHVlc0NoYW5nZSIsIm9uUmVzZXQiLCJvbkluaXQiLCJvbkxvYWRpbmdDaGFuZ2UiLCJzeW5jVG9VcmwiLCJfcHJvcHMkc3luY1RvVXJsQXNJbXAiLCJzeW5jVG9VcmxBc0ltcG9ydGFudCIsImV4dHJhVXJsUGFyYW1zIiwiX3Byb3BzJGF1dG9Gb2N1c0ZpcnN0IiwiYXV0b0ZvY3VzRmlyc3RJbnB1dCIsImZvcm1Db21wb25lbnRUeXBlIiwiZm9ybVJlZiIsIl9wcm9wcyRvbWl0TmlsIiwib21pdE5pbCIsIl9wcm9wcyRkYXRlRm9ybWF0dGVyIiwiZGF0ZUZvcm1hdHRlciIsImZpZWxkUHJvcHMiLCJmb3JtSXRlbVByb3BzIiwibGF5b3V0IiwiX3Byb3BzJHNpemUiLCJzaXplIiwiX3Byb3BzJGxhYmVsQWxpZ24iLCJsYWJlbEFsaWduIiwiX3Byb3BzJGRpc2FibGVkIiwiZGlzYWJsZWQiLCJfcHJvcHMkY29sb24iLCJjb2xvbiIsIl9wcm9wcyRyZXF1aXJlZE1hcmsiLCJyZXF1aXJlZE1hcmsiLCJfcHJvcHMkdmFsaWRhdGVUcmlnZ2UiLCJ2YWxpZGF0ZVRyaWdnZXIiLCJfcHJlZml4Q2xzIiwicHJlZml4Q2xzIiwicmVzdCIsIl91c2VTYWZlU3RhdGUiLCJfdXNlU2FmZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwicmVxdWVzdExvYWRpbmciLCJzZXRSZXF1ZXN0TG9hZGluZyIsIl91c2VTYWZlU3RhdGUzIiwiX3VzZVNhZmVTdGF0ZTQiLCJzdWJtaXR0aW5nIiwic2V0U3VibWl0dGluZyIsInN1Ym1pdHRpbmdSZWYiLCJpc0xvYWRpbmciLCJ0cmFuc2Zvcm1LZXlSZWYiLCJ2YWx1ZVR5cGVSZWYiLCJyZWdpc3RlclRyYW5zZm9ybSIsIm5hbWUiLCJmbiIsImN1cnJlbnQiLCJ1bnJlZ2lzdGVyVHJhbnNmb3JtIiwidW5kZWZpbmVkIiwicmVnaXN0ZXJWYWx1ZVR5cGUiLCJ2YWx1ZVR5cGUiLCJ1bnJlZ2lzdGVyVmFsdWVUeXBlIiwib25GaW5pc2hSZWYiLCJvbkluaXRSZWYiLCJvbkxvYWRpbmdDaGFuZ2VSZWYiLCJhcHBseVBpcGVsaW5lIiwidmFsdWVzIiwiZm9ybWF0VmFsdWVzS2VlcE5pbCIsIl91c2VVcmxTeW5jIiwidXJsSW5pdGlhbFZhbHVlcyIsIm9uVXJsU3luY0ZpbmlzaCIsIm9uVXJsU3luY1Jlc2V0IiwibWVyZ2VkSW5pdGlhbFZhbHVlc1JlZiIsImFzc2lnbiIsIm1lcmdlZEluaXRpYWxWYWx1ZXMiLCJyZXNldEVwb2NoUmVmIiwiZmlyZUZvcm1SZXNldCIsImZpbmFsVmFsdWVzIiwiZm9ybUluc3RhbmNlIiwiZ2V0RmllbGRzVmFsdWUiLCJfdXNlRm9ybSIsImludGVybmFscyIsInN0b3JlIiwid3JhcHBlZEhhbmRsZVN1Ym1pdCIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIl9hIiwiX2IiLCJfYyIsImVwb2NoIiwidmFsaWRhdGVkVmFsdWVzIiwicGlwZWxpbmVkIiwidHlwZWQiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJwcmV2ZW50RGVmYXVsdCIsImFicnVwdCIsInZhbGlkYXRlRmllbGRzIiwic2VudCIsImVycm9ycyIsImZpbmlzaCIsInN0b3AiLCJwcm9Gb3JtRm9ybUluc3RhbmNlIiwiZ2V0RmllbGRzRm9ybWF0VmFsdWUiLCJnZXRGaWVsZEZvcm1hdFZhbHVlIiwiZ2V0RmllbGRGb3JtYXRWYWx1ZU9iamVjdCIsImZvcm1hdHRlZCIsInRvcEtleSIsInNwbGl0IiwiX2RlZmluZVByb3BlcnR5IiwidmFsaWRhdGVGaWVsZHNSZXR1cm5Gb3JtYXRWYWx1ZSIsIl9jYWxsZWUyIiwidmFscyIsIl90MiIsIl9jb250ZXh0MiIsInN1Y2Nlc3MiLCJzdWJtaXRGb3JtIiwicmVxdWVzdFJlZiIsInNlcmlhbGl6ZWRQYXJhbXMiLCJpbml0RmlyZWRSZWYiLCJmaXJlSW5pdCIsInN0YWxlIiwiZmV0Y2hEYXRhIiwiX2NhbGxlZTMiLCJyZXF1ZXN0Rm4iLCJkYXRhIiwiX2NvbnRleHQzIiwiX3R5cGVvZiIsInNldEZpZWxkc1ZhbHVlIiwiZm9ybUVsUmVmIiwiZmlyc3RJbnB1dCIsInF1ZXJ5U2VsZWN0b3IiLCJmb2N1cyIsInN0YWJsZUZpZWxkUHJvcHMiLCJzdGFibGVGb3JtSXRlbVByb3BzIiwic3RhYmxlQ29sUHJvcHMiLCJzdGFibGVMYXlvdXQiLCJzdGFibGVWYWx1ZSIsInNldEZpZWxkVmFsdWUiLCJzZXRGaWVsZEVycm9yIiwic2V0RmllbGRXYXJuaW5nIiwidmFsaWRhdGVGaWVsZCIsInZhbGlkYXRlRmllbGRBc3luYyIsInJlZ2lzdGVyRmllbGQiLCJ1bnJlZ2lzdGVyRmllbGQiLCJXcmFwcGVyQ29tcG9uZW50Iiwid3JhcHBlclByb3BzIiwiaGFuZGxlU3VibWl0dGVyUmVzZXQiLCJzdWJtaXR0ZXJOb2RlIiwiUHJvdmlkZXIiLCJyZWYiLCJvblN1Ym1pdCIsImhhbmRsZVJlc2V0IiwiZGlzcGxheU5hbWUiLCJQcm9Gb3JtIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUEsSUFBSUEsU0FBUyxHQUFJLElBQUksSUFBSSxJQUFJLENBQUNBLFNBQVMsSUFBSyxVQUFVQyxPQUFPLEVBQUVDLFVBQVUsRUFBRUMsQ0FBQyxFQUFFQyxTQUFTLEVBQUU7RUFDckYsU0FBU0MsS0FBS0EsQ0FBQ0MsS0FBSyxFQUFFO0lBQUUsT0FBT0EsS0FBSyxZQUFZSCxDQUFDLEdBQUdHLEtBQUssR0FBRyxJQUFJSCxDQUFDLENBQUMsVUFBVUksT0FBTyxFQUFFO01BQUVBLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDO0lBQUUsQ0FBQyxDQUFDO0VBQUU7RUFDM0csT0FBTyxLQUFLSCxDQUFDLEtBQUtBLENB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RWpHLElBQUEsQ0FBQ2tCLG9CQUFvQixDQUFDcUwsUUFBUSxFQUFBO0lBQUNsTyxLQUFLLEVBQUVzTixXQUFXO0lBQUF4SixRQUFBLEVBRy9DbkMsSUFBQSxDQUFDbUIsbUJBQW1CLENBQUNvTCxRQUFRLEVBQUE7TUFBQ2xPLEtBQUssRUFBRTRKLEtBQUs7TUFBQTlGLFFBQUEsRUFDeENqQyxLQUFBLENBQUEsTUFBQSxFQUFBWixNQUFBLENBQUFrSSxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQ01sQyxJQUFJLEVBQUE7UUFDUmtILEdBQUcsRUFBRXJCLFNBQVM7UUFDZC9JLFNBQVMsRUFBRU4sV0FBVyxDQUFDMkUsU0FBUyxFQUFFMUYsT0FBTyxDQUFDYyxPQUFPLENBQUEsQ0FBRSxFQUFFTyxTQUFTLENBQUMsQ0FBQztRQUNoRXFLLFFBQVEsRUFBRXZFLG1CQUFtQjtRQUM3QjVFLE9BQU8sRUFBRTBFLFNBQVMsQ0FBQzBFLFdBQVc7UUFBQXZLLFFBQUEsRUFBQSxDQUU5Qm5DLElBQUEsQ0FBQ21NLGdCQUFnQixFQUFBN00sTUFBQSxDQUFBa0ksTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFLNEUsWUFBWSxFQUFBO1VBQUFqSyxRQUFBLEVBQUdBO1FBQVEsQ0FBQSxDQUFBLENBQW9CLEVBQ2hFbUssYUFBYTtNQUFBLENBQUEsQ0FBQTtJQUNULENBQUE7RUFDc0IsQ0FBQSxDQUNEO0FBRXBDLENBQUM7QUFFRHJLLFdBQVcsQ0FBQzBLLFdBQVcsR0FBRyxTQUFTO0FBV25DLE9BQU8sSUFBTUMsT0FBTyxnQkFBR3hNLElBQUksQ0FBQzZCLFdBQVcsQ0FBZ0M7QUFFdkUsZUFBZTJLLE9BQU8iLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL1Byb0Zvcm0uanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgUmVhY3QsIHsgbWVtbywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUxhdGVzdCBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZUxhdGVzdCc7XG5pbXBvcnQgdXNlU2FmZVN0YXRlIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlU2FmZVN0YXRlJztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBjbGFzc25hbWVzLCBqb2luQ2xzIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBSb3cgfSBmcm9tICcuLi9HcmlkJztcbmltcG9ydCB7IHVzZUZvcm0gfSBmcm9tICcuL2NvcmUvaG9va3MvdXNlRm9ybSc7XG5pbXBvcnQgeyBQcm9Gb3JtU3RhYmxlQ29udGV4dCwgUHJvRm9ybVN0YXRlQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyBTdWJtaXR0ZXIgfSBmcm9tICcuL1N1Ym1pdHRlcic7XG5pbXBvcnQgeyBDU1NfUFJFRklYIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgc3RhYmxlU2VyaWFsaXplLCB0cmFuc2Zvcm1TdWJtaXRWYWx1ZXMsIG9taXROaWxWYWx1ZXMsIGZvcm1hdERhdGVWYWx1ZXMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IHVzZVNoYWxsb3dTdGFibGUgfSBmcm9tICcuL2NvcmUvZm9ybVN0b3JlJztcbmltcG9ydCB7IHVzZVVybFN5bmMgfSBmcm9tICcuL2hvb2tzL3VzZVVybFN5bmMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi9jb3JlL3BhdGhVdGlscyc7XG5jb25zdCBjbGFzc2VzID0gY2xhc3NuYW1lcyhDU1NfUFJFRklYKTtcbmNvbnN0IGZvcm1DbGFzc2VzID0gY2xhc3NuYW1lcygnZm9ybScpO1xuY29uc3QgREVGQVVMVF9DT0xfUFJPUFMgPSB7IHNwYW46IDI0IH07XG5jb25zdCBQcm9Gb3JtQmFzZSA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgY2hpbGRyZW4sIGNsYXNzTmFtZSwgc3VibWl0dGVyLCByZWFkb25seSA9IGZhbHNlLCBtb2RlOiBtb2RlUHJvcCwgZ3JpZCA9IGZhbHNlLCBjb2xQcm9wcywgcm93UHJvcHMsIGxvYWRpbmcgPSBmYWxzZSwgcmVxdWVzdCwgcGFyYW1zLCBpbml0aWFsVmFsdWVzLCBvbkZpbmlzaCwgb25GaW5pc2hGYWlsZWQsIG9uVmFsdWVzQ2hhbmdlLCBvblJlc2V0LCBvbkluaXQsIG9uTG9hZGluZ0NoYW5nZSwgc3luY1RvVXJsLCBzeW5jVG9VcmxBc0ltcG9ydGFudCA9IGZhbHNlLCBleHRyYVVybFBhcmFtcywgYXV0b0ZvY3VzRmlyc3RJbnB1dCA9IGZhbHNlLCBmb3JtQ29tcG9uZW50VHlwZSwgZm9ybVJlZiwgb21pdE5pbCA9IHRydWUsIGRhdGVGb3JtYXR0ZXIgPSAnc3RyaW5nJywgZmllbGRQcm9wcywgZm9ybUl0ZW1Qcm9wcywgbGF5b3V0LCBzaXplID0gJ2xhcmdlJywgbGFiZWxBbGlnbiA9ICdsZWZ0JywgZGlzYWJsZWQgPSBmYWxzZSwgY29sb24gPSB0cnVlLCByZXF1aXJlZE1hcmsgPSB0cnVlLCB2YWxpZGF0ZVRyaWdnZXIgPSAnb25DaGFuZ2UnLCBwcmVmaXhDbHM6IF9wcmVmaXhDbHMgfSA9IHByb3BzLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInN1Ym1pdHRlclwiLCBcInJlYWRvbmx5XCIsIFwibW9kZVwiLCBcImdyaWRcIiwgXCJjb2xQcm9wc1wiLCBcInJvd1Byb3BzXCIsIFwibG9hZGluZ1wiLCBcInJlcXVlc3RcIiwgXCJwYXJhbXNcIiwgXCJpbml0aWFsVmFsdWVzXCIsIFwib25GaW5pc2hcIiwgXCJvbkZpbmlzaEZhaWxlZFwiLCBcIm9uVmFsdWVzQ2hhbmdlXCIsIFwib25SZXNldFwiLCBcIm9uSW5pdFwiLCBcIm9uTG9hZGluZ0NoYW5nZVwiLCBcInN5bmNUb1VybFwiLCBcInN5bmNUb1VybEFzSW1wb3J0YW50XCIsIFwiZXh0cmFVcmxQYXJhbXNcIiwgXCJhdXRvRm9jdXNGaXJzdElucHV0XCIsIFwiZm9ybUNvbXBvbmVudFR5cGVcIiwgXCJmb3JtUmVmXCIsIFwib21pdE5pbFwiLCBcImRhdGVGb3JtYXR0ZXJcIiwgXCJmaWVsZFByb3BzXCIsIFwiZm9ybUl0ZW1Qcm9wc1wiLCBcImxheW91dFwiLCBcInNpemVcIiwgXCJsYWJlbEFsaWduXCIsIFwiZGlzYWJsZWRcIiwgXCJjb2xvblwiLCBcInJlcXVpcmVkTWFya1wiLCBcInZhbGlkYXRlVHJpZ2dlclwiLCBcInByZWZpeENsc1wiXSk7XG4gICAgY29uc3QgbW9kZSA9IG1vZGVQcm9wICE9PSBudWxsICYmIG1vZGVQcm9wICE9PSB2b2lkIDAgPyBtb2RlUHJvcCA6IChyZWFkb25seSA/ICdyZWFkJyA6ICdlZGl0Jyk7XG4gICAgY29uc3QgW3JlcXVlc3RMb2FkaW5nLCBzZXRSZXF1ZXN0TG9hZGluZ10gPSB1c2VTYWZlU3RhdGUoZmFsc2UpO1xuICAgIC8vIHVzZVNhZmVTdGF0ZSBmb3IgdGhlIFJFTkRFUkVEIHN1Ym1pdHRpbmcgc3RhdGUgKGl0cyBzZXR0ZXIgaXMgdW5tb3VudC1zYWZlXG4gICAgLy8g4oCUIHRoZSBmaW5hbGx5IGJlbG93IHJ1bnMgYWZ0ZXIgYXdhaXRpbmcgb25GaW5pc2gsIHdoZW4gdGhlIHR5cGljYWxcbiAgICAvLyBzdWJtaXQtdGhlbi1jbG9zZSBmbG93IG1heSBhbHJlYWR5IGhhdmUgdW5tb3VudGVkIHRoZSBmb3JtIG9uIFJlYWN0XG4gICAgLy8gMTYvMTcpLiBUaGUgcmVmIGlzIHRoZSBzeW5jaHJvbm91cyByZS1lbnRyeSBndWFyZDsgQDFtb25leS9ob29rcyBoYXMgbm9cbiAgICAvLyBzaW5nbGUgaG9vayB0aGF0IGlzIGJvdGggdW5tb3VudC1zYWZlIGFuZCBzeW5jaHJvbm91c2x5IHJlYWRhYmxlLlxuICAgIGNvbnN0IFtzdWJtaXR0aW5nLCBzZXRTdWJtaXR0aW5nXSA9IHVzZVNhZmVTdGF0ZShmYWxzZSk7XG4gICAgY29uc3Qgc3VibWl0dGluZ1JlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgY29uc3QgaXNMb2FkaW5nID0gbG9hZGluZyB8fCByZXF1ZXN0TG9hZGluZyB8fCBzdWJtaXR0aW5nO1xuICAgIC8vIOKUgOKUgCBUcmFuc2Zvcm0gLyB2YWx1ZVR5cGUgcmVnaXN0cmllcyDilIDilIBcbiAgICBjb25zdCB0cmFuc2Zvcm1LZXlSZWYgPSB1c2VSZWYoe30pO1xuICAgIGNvbnN0IHZhbHVlVHlwZVJlZiA9IHVzZVJlZih7fSk7XG4gICAgY29uc3QgcmVnaXN0ZXJUcmFuc2Zvcm0gPSB1c2VNZW1vaXplZEZuKChuYW1lLCBmbikgPT4ge1xuICAgICAgICB0cmFuc2Zvcm1LZXlSZWYuY3VycmVudFtuYW1lXSA9IGZuO1xuICAgIH0pO1xuICAgIC8vIFRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgZ3VhcmRzIHJlbW92YWw6IGRlbGV0ZSBvbmx5IHdoZW4gdGhlIHJlZ2lzdHJ5XG4gICAgLy8gc3RpbGwgaG9sZHMgdGhlIENBTExFUidTIHJlZ2lzdHJhdGlvbiwgc28gYW4gdW5tb3VudGluZyBpbnN0YW5jZSBjYW4gbmV2ZXJcbiAgICAvLyB3aXBlIGEgc2FtZS1uYW1lIHNpYmxpbmcncyBvciBzdWNjZXNzb3IncyBlbnRyeS5cbiAgICBjb25zdCB1bnJlZ2lzdGVyVHJhbnNmb3JtID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgZm4pID0+IHtcbiAgICAgICAgaWYgKGZuID09PSB1bmRlZmluZWQgfHwgdHJhbnNmb3JtS2V5UmVmLmN1cnJlbnRbbmFtZV0gPT09IGZuKSB7XG4gICAgICAgICAgICBkZWxldGUgdHJhbnNmb3JtS2V5UmVmLmN1cnJlbnRbbmFtZV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZWdpc3RlclZhbHVlVHlwZSA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlVHlwZSkgPT4ge1xuICAgICAgICB2YWx1ZVR5cGVSZWYuY3VycmVudFtuYW1lXSA9IHZhbHVlVHlwZTtcbiAgICB9KTtcbiAgICBjb25zdCB1bnJlZ2lzdGVyVmFsdWVUeXBlID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgdmFsdWVUeXBlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZVR5cGUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZVR5cGVSZWYuY3VycmVudFtuYW1lXSA9PT0gdmFsdWVUeXBlKSB7XG4gICAgICAgICAgICBkZWxldGUgdmFsdWVUeXBlUmVmLmN1cnJlbnRbbmFtZV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBvbkZpbmlzaFJlZiA9IHVzZUxhdGVzdChvbkZpbmlzaCk7XG4gICAgY29uc3Qgb25Jbml0UmVmID0gdXNlTGF0ZXN0KG9uSW5pdCk7XG4gICAgY29uc3Qgb25Mb2FkaW5nQ2hhbmdlUmVmID0gdXNlTGF0ZXN0KG9uTG9hZGluZ0NoYW5nZSk7XG4gICAgLy8gU3VibWl0IHBpcGVsaW5lOiBkYXRlcyDihpIgZmllbGQgdHJhbnNmb3JtcyDihpIgb21pdE5pbFxuICAgIGNvbnN0IGFwcGx5UGlwZWxpbmUgPSB1c2VNZW1vaXplZEZuKCh2YWx1ZXMpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGZvcm1hdERhdGVWYWx1ZXModmFsdWVzLCBkYXRlRm9ybWF0dGVyLCB2YWx1ZVR5cGVSZWYuY3VycmVudCk7XG4gICAgICAgIHJlc3VsdCA9IHRyYW5zZm9ybVN1Ym1pdFZhbHVlcyhyZXN1bHQsIHRyYW5zZm9ybUtleVJlZi5jdXJyZW50KTtcbiAgICAgICAgaWYgKG9taXROaWwpXG4gICAgICAgICAgICByZXN1bHQgPSBvbWl0TmlsVmFsdWVzKHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gICAgLy8gU2FtZSBwaXBlbGluZSBXSVRIT1VUIG9taXROaWwg4oCUIHNpbmdsZS1maWVsZCByZWFkZXJzIG11c3Qgbm90IHNlZSBhIGZpZWxkXG4gICAgLy8gdmFuaXNoIGp1c3QgYmVjYXVzZSBpdHMgY3VycmVudCB2YWx1ZSBpcyBlbXB0eS5cbiAgICBjb25zdCBmb3JtYXRWYWx1ZXNLZWVwTmlsID0gdXNlTWVtb2l6ZWRGbigodmFsdWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdERhdGVWYWx1ZXModmFsdWVzLCBkYXRlRm9ybWF0dGVyLCB2YWx1ZVR5cGVSZWYuY3VycmVudCk7XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1TdWJtaXRWYWx1ZXMocmVzdWx0LCB0cmFuc2Zvcm1LZXlSZWYuY3VycmVudCk7XG4gICAgfSk7XG4gICAgLy8g4pSA4pSAIFVSTCBzeW5jIChzeW5jVG9VcmwgLyBzeW5jVG9VcmxBc0ltcG9ydGFudCAvIGV4dHJhVXJsUGFyYW1zKSDilIDilIBcbiAgICBjb25zdCB7IHVybEluaXRpYWxWYWx1ZXMsIG9uVXJsU3luY0ZpbmlzaCwgb25VcmxTeW5jUmVzZXQgfSA9IHVzZVVybFN5bmMoe1xuICAgICAgICBzeW5jVG9VcmwsXG4gICAgICAgIGV4dHJhVXJsUGFyYW1zLFxuICAgIH0pO1xuICAgIC8vIGluaXRpYWxWYWx1ZXMgaXMgTU9VTlQtT05MWSAoZG9jdW1lbnRlZCBjb250cmFjdDsgdXNlRm9ybUNvcmUgcmUtZnJlZXplc1xuICAgIC8vIGFzIGEgc2FmZXR5IG5ldCkg4oCUIGNvbXB1dGUgdGhlIFVSTCBtZXJnZSBvbmNlIHNvIHRoZSBmcmVlemUgaXMgdmlzaWJsZVxuICAgIC8vIHdoZXJlIHRoZSBwcm9wcyBlbnRlciwgaW5zdGVhZCBvZiByZWNvbXB1dGluZyBkZWFkIHNwcmVhZHMgcGVyIHJlbmRlci5cbiAgICBjb25zdCBtZXJnZWRJbml0aWFsVmFsdWVzUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGlmIChtZXJnZWRJbml0aWFsVmFsdWVzUmVmLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgbWVyZ2VkSW5pdGlhbFZhbHVlc1JlZi5jdXJyZW50ID0gc3luY1RvVXJsXG4gICAgICAgICAgICA/IChzeW5jVG9VcmxBc0ltcG9ydGFudFxuICAgICAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBpbml0aWFsVmFsdWVzKSwgdXJsSW5pdGlhbFZhbHVlcykgOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHVybEluaXRpYWxWYWx1ZXMpLCBpbml0aWFsVmFsdWVzKSlcbiAgICAgICAgICAgIDogKGluaXRpYWxWYWx1ZXMgIT09IG51bGwgJiYgaW5pdGlhbFZhbHVlcyAhPT0gdm9pZCAwID8gaW5pdGlhbFZhbHVlcyA6IHt9KTtcbiAgICB9XG4gICAgY29uc3QgbWVyZ2VkSW5pdGlhbFZhbHVlcyA9IG1lcmdlZEluaXRpYWxWYWx1ZXNSZWYuY3VycmVudDtcbiAgICAvLyBCdW1wZWQgb24gZXZlcnkgcmVzZXQg4oCUIGFuIGluLWZsaWdodCBzdWJtaXQgY2FwdHVyZXMgaXQgYW5kIGFib3J0cyB3aGVuXG4gICAgLy8gaXQgY2hhbmdlZCB1bmRlcm5lYXRoICh0aGUgdXNlciBkaXNjYXJkZWQgdGhlIHN1Ym1pc3Npb24ncyB2YWx1ZXMpLlxuICAgIGNvbnN0IHJlc2V0RXBvY2hSZWYgPSB1c2VSZWYoMCk7XG4gICAgLy8gUmVzZXQgY2hhaW46IGZvcm0tbGV2ZWwgb25SZXNldCByZWNlaXZlcyB0aGUgKHBvc3QtcmVzZXQpIGZvcm1hdHRlZFxuICAgIC8vIHZhbHVlcywgdGhlbiB0aGUgZm9ybSdzIG93biBVUkwgcGFyYW1zIGFyZSBjbGVhcmVkLiB1c2VNZW1vaXplZEZuIGRlZmVyc1xuICAgIC8vIGV4ZWN1dGlvbiB0byBldmVudCB0aW1lLCB3aGVuIGBmb3JtSW5zdGFuY2VgIChjcmVhdGVkIGp1c3QgYmVsb3cpIGV4aXN0cy5cbiAgICBjb25zdCBmaXJlRm9ybVJlc2V0ID0gdXNlTWVtb2l6ZWRGbigoKSA9PiB7XG4gICAgICAgIHJlc2V0RXBvY2hSZWYuY3VycmVudCArPSAxO1xuICAgICAgICBjb25zdCBmaW5hbFZhbHVlcyA9IGFwcGx5UGlwZWxpbmUoZm9ybUluc3RhbmNlLmdldEZpZWxkc1ZhbHVlKCkpO1xuICAgICAgICBvblJlc2V0ID09PSBudWxsIHx8IG9uUmVzZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUmVzZXQoZmluYWxWYWx1ZXMpO1xuICAgICAgICBvblVybFN5bmNSZXNldCgpO1xuICAgIH0pO1xuICAgIC8vIOKUgOKUgCBGb3JtIGVuZ2luZSAodXNlRm9ybSB3aXRoIGFzeW5jIHZhbGlkYXRpb24pIOKUgOKUgFxuICAgIGNvbnN0IHsgZm9ybUluc3RhbmNlLCBpbnRlcm5hbHMsIHN0b3JlIH0gPSB1c2VGb3JtKHtcbiAgICAgICAgaW5pdGlhbFZhbHVlczogbWVyZ2VkSW5pdGlhbFZhbHVlcyxcbiAgICAgICAgb25WYWx1ZXNDaGFuZ2UsXG4gICAgICAgIG9uUmVzZXQ6IGZpcmVGb3JtUmVzZXQsXG4gICAgICAgIHNpemUsXG4gICAgICAgIGxhYmVsQWxpZ24sXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBjb2xvbixcbiAgICAgICAgcmVxdWlyZWRNYXJrLFxuICAgICAgICB2YWxpZGF0ZVRyaWdnZXIsXG4gICAgfSk7XG4gICAgLy8g4pSA4pSAIEFzeW5jIHN1Ym1pdCB3aXRoIHRyYW5zZm9ybSBwaXBlbGluZSDilIDilIBcbiAgICAvLyBSZS1lbnRyeSBndWFyZDogYSBzZWNvbmQgc3VibWl0IHdoaWxlIG9uZSBpcyBpbiBmbGlnaHQgaXMgaWdub3JlZCAodGhlXG4gICAgLy8gcmVmIGNhdGNoZXMgdHdvIGNhbGxzIGluIHRoZSBzYW1lIHRpY2spLlxuICAgIGNvbnN0IHdyYXBwZWRIYW5kbGVTdWJtaXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoc3VibWl0dGluZ1JlZi5jdXJyZW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBzdWJtaXR0aW5nUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBzZXRTdWJtaXR0aW5nKHRydWUpO1xuICAgICAgICAoX2EgPSBvbkxvYWRpbmdDaGFuZ2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwob25Mb2FkaW5nQ2hhbmdlUmVmLCB0cnVlKTtcbiAgICAgICAgY29uc3QgZXBvY2ggPSByZXNldEVwb2NoUmVmLmN1cnJlbnQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRWYWx1ZXMgPSB5aWVsZCBmb3JtSW5zdGFuY2UudmFsaWRhdGVGaWVsZHMoKTtcbiAgICAgICAgICAgIC8vIEEgcmVzZXQgZHVyaW5nIChhc3luYykgdmFsaWRhdGlvbiBkaXNjYXJkcyB0aGlzIHN1Ym1pc3Npb24gZW50aXJlbHk6XG4gICAgICAgICAgICAvLyB2YWxpZGF0ZUZpZWxkcyByZS1yZWFkcyB0aGUgbGl2ZSBzdG9yZSwgc28gcHJvY2VlZGluZyB3b3VsZCBoYW5kXG4gICAgICAgICAgICAvLyBvbkZpbmlzaCB0aGUgUE9TVC1yZXNldCB2YWx1ZXMuXG4gICAgICAgICAgICBpZiAoZXBvY2ggIT09IHJlc2V0RXBvY2hSZWYuY3VycmVudClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBwaXBlbGluZWQgPSBhcHBseVBpcGVsaW5lKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCAoKF9iID0gb25GaW5pc2hSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwob25GaW5pc2hSZWYsIHBpcGVsaW5lZCkpO1xuICAgICAgICAgICAgLy8gU3luYyB0aGUgVVJMIHVubGVzcyBvbkZpbmlzaCBleHBsaWNpdGx5IHJldHVybmVkIGZhbHNlIChhIHRocm93IGFib3ZlXG4gICAgICAgICAgICAvLyBhbHNvIHNraXBzIOKAlCBhIGZhaWxlZCBzdWJtaXQgbXVzdCBub3QgcG9sbHV0ZSB0aGUgVVJMKSwgYW5kIG9ubHkgaWZcbiAgICAgICAgICAgIC8vIHRoZSB1c2VyIGRpZCBOT1QgcmVzZXQgdGhlIGZvcm0gd2hpbGUgdGhlIHN1Ym1pdCB3YXMgaW4gZmxpZ2h0LlxuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gZmFsc2UgJiYgZXBvY2ggPT09IHJlc2V0RXBvY2hSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIG9uVXJsU3luY0ZpbmlzaChwaXBlbGluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIEEgcmVzZXQgZHVyaW5nIHZhbGlkYXRpb24gYWxzbyBpbnZhbGlkYXRlcyB0aGUgRkFJTFVSRSBjYWxsYmFjayDigJRcbiAgICAgICAgICAgIC8vIHRoZSBlcnJvciBjYXJyaWVzIHBvc3QtcmVzZXQgdmFsdWVzIGZvciBhIGRpc2NhcmRlZCBzdWJtaXNzaW9uLlxuICAgICAgICAgICAgLy8gKEZpZWxkIGVycm9ycyBzdGFtcGVkIGJ5IHRoZSBkZWFkIHZhbGlkYXRpb24gbWF5IHN0aWxsIGFwcGVhcjsgYVxuICAgICAgICAgICAgLy8gZGVlcGVyIHZhbGlkYXRpb24tZXBvY2ggd291bGQgYmUgbmVlZGVkIHRvIHN1cHByZXNzIHRob3NlLilcbiAgICAgICAgICAgIGlmIChlcG9jaCAhPT0gcmVzZXRFcG9jaFJlZi5jdXJyZW50KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVkID0gZXJyO1xuICAgICAgICAgICAgb25GaW5pc2hGYWlsZWQgPT09IG51bGwgfHwgb25GaW5pc2hGYWlsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoRmFpbGVkKHsgdmFsdWVzOiB0eXBlZC52YWx1ZXMsIGVycm9yczogdHlwZWQuZXJyb3JzIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgc3VibWl0dGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBzZXRTdWJtaXR0aW5nKGZhbHNlKTtcbiAgICAgICAgICAgIChfYyA9IG9uTG9hZGluZ0NoYW5nZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuY2FsbChvbkxvYWRpbmdDaGFuZ2VSZWYsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICAvLyDilIDilIAgUHJvRm9ybSBpbnN0YW5jZTogc3VwZXJzZXQgb2YgRm9ybUluc3RhbmNlIOKUgOKUgFxuICAgIGNvbnN0IHByb0Zvcm1Gb3JtSW5zdGFuY2UgPSB1c2VNZW1vKCgpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZvcm1JbnN0YW5jZSksIHsgZ2V0RmllbGRzRm9ybWF0VmFsdWU6ICgpID0+IGFwcGx5UGlwZWxpbmUoZm9ybUluc3RhbmNlLmdldEZpZWxkc1ZhbHVlKCkpLCBnZXRGaWVsZEZvcm1hdFZhbHVlOiAobmFtZSkgPT4gcmVzb2x2ZVZhbHVlKGZvcm1hdFZhbHVlc0tlZXBOaWwoZm9ybUluc3RhbmNlLmdldEZpZWxkc1ZhbHVlKCkpLCBuYW1lKSwgZ2V0RmllbGRGb3JtYXRWYWx1ZU9iamVjdDogKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdFZhbHVlc0tlZXBOaWwoZm9ybUluc3RhbmNlLmdldEZpZWxkc1ZhbHVlKCkpO1xuICAgICAgICAgICAgaWYgKCFuYW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWQ7XG4gICAgICAgICAgICBjb25zdCB0b3BLZXkgPSBuYW1lLnNwbGl0KCcuJylbMF07XG4gICAgICAgICAgICByZXR1cm4geyBbdG9wS2V5XTogZm9ybWF0dGVkW3RvcEtleV0gfTtcbiAgICAgICAgfSwgdmFsaWRhdGVGaWVsZHNSZXR1cm5Gb3JtYXRWYWx1ZTogKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHMgPSB5aWVsZCBmb3JtSW5zdGFuY2UudmFsaWRhdGVGaWVsZHMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCB2YWx1ZXM6IGFwcGx5UGlwZWxpbmUodmFscykgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAvLyB2YWxpZGF0ZUZpZWxkcyByZWplY3RzIHdpdGggYW4gRXJyb3IgY2FycnlpbmcgdGhlIGZpZWxkIGVycm9ycyBtYXBcbiAgICAgICAgICAgICAgICAvLyAoc2FtZSBzaGFwZSB3cmFwcGVkSGFuZGxlU3VibWl0IGNvbnN1bWVzIGFib3ZlKS5cbiAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9ycyB9ID0gZXJyO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcnM6IGVycm9ycyAhPT0gbnVsbCAmJiBlcnJvcnMgIT09IHZvaWQgMCA/IGVycm9ycyA6IHt9IH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLCBzdWJtaXRGb3JtOiB3cmFwcGVkSGFuZGxlU3VibWl0IH0pKSwgW2Zvcm1JbnN0YW5jZSwgYXBwbHlQaXBlbGluZSwgd3JhcHBlZEhhbmRsZVN1Ym1pdF0pO1xuICAgIC8vIOKUgOKUgCBTeW5jIHRvIGZvcm1SZWYgcHJvcCDilIDilIBcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoZm9ybVJlZikge1xuICAgICAgICAgICAgZm9ybVJlZi5jdXJyZW50ID0gcHJvRm9ybUZvcm1JbnN0YW5jZTtcbiAgICAgICAgfVxuICAgIH0sIFtmb3JtUmVmLCBwcm9Gb3JtRm9ybUluc3RhbmNlXSk7XG4gICAgLy8g4pSA4pSAIHJlcXVlc3QgLyBwYXJhbXMgYXV0by1sb2FkIOKUgOKUgFxuICAgIGNvbnN0IHJlcXVlc3RSZWYgPSB1c2VMYXRlc3QocmVxdWVzdCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFBhcmFtcyA9IHVzZU1lbW8oKCkgPT4gc3RhYmxlU2VyaWFsaXplKHBhcmFtcyksIFtwYXJhbXNdKTtcbiAgICAvLyBvbkluaXQgZmlyZXMgZXhhY3RseSBvbmNlOiBhZnRlciB0aGUgRklSU1QgcmVxdWVzdCByZXNvbHZlcyB3aGVuIGFcbiAgICAvLyByZXF1ZXN0IGlzIGNvbmZpZ3VyZWQsIG90aGVyd2lzZSByaWdodCBhZnRlciBtb3VudC5cbiAgICBjb25zdCBpbml0RmlyZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IGZpcmVJbml0ID0gdXNlTWVtb2l6ZWRGbigoKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGluaXRGaXJlZFJlZi5jdXJyZW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpbml0RmlyZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIChfYSA9IG9uSW5pdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChvbkluaXRSZWYsIGFwcGx5UGlwZWxpbmUoZm9ybUluc3RhbmNlLmdldEZpZWxkc1ZhbHVlKCkpLCBwcm9Gb3JtRm9ybUluc3RhbmNlKTtcbiAgICB9KTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAvLyBTdGFsZW5lc3MgZ3VhcmQ6IGlmIHBhcmFtcyBjaGFuZ2UgYWdhaW4gYmVmb3JlIHRoaXMgZmV0Y2ggcmVzb2x2ZXMsIHRoZVxuICAgICAgICAvLyBjbGVhbnVwIG1hcmtzIGl0IHN0YWxlIHNvIHRoZSBsYXRlIHJlc3BvbnNlIGNhbid0IG92ZXJ3cml0ZSB0aGUgdmFsdWVzXG4gICAgICAgIC8vIGEgbmV3ZXIgcmVxdWVzdCBhbHJlYWR5IChvciB3aWxsKSBzZXQuXG4gICAgICAgIGxldCBzdGFsZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmZXRjaERhdGEgPSAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RGbiA9IHJlcXVlc3RSZWYuY3VycmVudDtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdEZuKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHNldFJlcXVlc3RMb2FkaW5nKHRydWUpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geWllbGQgcmVxdWVzdEZuKHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgaWYgKCFzdGFsZSAmJiBkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBmb3JtSW5zdGFuY2Uuc2V0RmllbGRzVmFsdWUoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzdGFsZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRSZXF1ZXN0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgYSBOT04tc3VwZXJzZWRlZCBzZXR0bGUgaW5pdGlhbGl6ZXMgdGhlIGZvcm06IGEgc3RhbGVcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWVzdCdzIGRhdGEgd2FzIGRpc2NhcmRlZCwgc28gaXRzIHZhbHVlcyBtdXN0IG5vdCBiZSByZXBvcnRlZC5cbiAgICAgICAgICAgICAgICAgICAgZmlyZUluaXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmVxdWVzdFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBmZXRjaERhdGEoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZpcmVJbml0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIHN0YWxlID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gUmUtZmV0Y2ggT05MWSB3aGVuIHBhcmFtcyBjaGFuZ2UgYnkgVkFMVUU6IGRlcGVuZGluZyBvbiB0aGUgcmF3IGBwYXJhbXNgXG4gICAgICAgIC8vIHJlZmVyZW5jZSB3b3VsZCByZS1ydW4gb24gZXZlcnkgcmVuZGVyIGZvciBpbmxpbmUgb2JqZWN0IGxpdGVyYWxzIGFuZCxcbiAgICAgICAgLy8gY29tYmluZWQgd2l0aCB0aGUgbG9hZGluZyBzZXRTdGF0ZSwgbG9vcCBmb3JldmVyLlxuICAgIH0sIFtzZXJpYWxpemVkUGFyYW1zXSk7XG4gICAgLy8g4pSA4pSAIGF1dG9Gb2N1c0ZpcnN0SW5wdXQg4pSA4pSAXG4gICAgY29uc3QgZm9ybUVsUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCFhdXRvRm9jdXNGaXJzdElucHV0IHx8IG1vZGUgPT09ICdyZWFkJylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlyc3RJbnB1dCA9IChfYSA9IGZvcm1FbFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucXVlcnlTZWxlY3RvcignaW5wdXQ6bm90KFt0eXBlPVwiaGlkZGVuXCJdKTpub3QoW2Rpc2FibGVkXSksIHRleHRhcmVhOm5vdChbZGlzYWJsZWRdKSwgc2VsZWN0Om5vdChbZGlzYWJsZWRdKScpO1xuICAgICAgICBmaXJzdElucHV0ID09PSBudWxsIHx8IGZpcnN0SW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpcnN0SW5wdXQuZm9jdXMoKTtcbiAgICAgICAgLy8gTW91bnQtb25seSBieSBkZXNpZ24uXG4gICAgfSwgW10pO1xuICAgIC8vIOKUgOKUgCBTcGxpdCBjb250ZXh0IOKUgOKUgFxuICAgIC8vIEZvcm0tbGV2ZWwgcHJvcCBiYWdzIGFyZSBvZnRlbiBpbmxpbmUgbGl0ZXJhbHM6IGtlZXAgdGhlaXIgaWRlbnRpdHlcbiAgICAvLyBzdGFibGUgd2hpbGUgc2hhbGxvdy1lcXVhbCBzbyB0aGUgc3RhYmxlIHNsaWNlIGRvZXNuJ3QgY2h1cm4gcGVyIHJlbmRlci5cbiAgICBjb25zdCBzdGFibGVGaWVsZFByb3BzID0gdXNlU2hhbGxvd1N0YWJsZShmaWVsZFByb3BzKTtcbiAgICBjb25zdCBzdGFibGVGb3JtSXRlbVByb3BzID0gdXNlU2hhbGxvd1N0YWJsZShmb3JtSXRlbVByb3BzKTtcbiAgICBjb25zdCBzdGFibGVDb2xQcm9wcyA9IHVzZVNoYWxsb3dTdGFibGUoY29sUHJvcHMpO1xuICAgIGNvbnN0IHN0YWJsZUxheW91dCA9IHVzZVNoYWxsb3dTdGFibGUobGF5b3V0KTtcbiAgICAvLyBTdGFibGUgc2xpY2U6IGNvbmZpZ3VyYXRpb24gKyBpZGVudGl0eS1zdGFibGUgZGlzcGF0Y2hlcnMvaW5zdGFuY2UuXG4gICAgLy8gQ2hhbmdlcyBvbmx5IHdoZW4gZm9ybS1sZXZlbCBwcm9wcyBjaGFuZ2Ug4oCUIE5PVCBvbiBrZXlzdHJva2VzLCBzb1xuICAgIC8vIHN1YnNjcmliZXJzIGxpa2UgU3VibWl0dGVyIGFuZCB0aGUgZmllbGQgZmFjdG9yaWVzIHNraXAgdGhvc2UgcmVuZGVycy5cbiAgICBjb25zdCBzdGFibGVWYWx1ZSA9IHVzZU1lbW8oKCkgPT4gKHtcbiAgICAgICAgZm9ybUluc3RhbmNlOiBwcm9Gb3JtRm9ybUluc3RhbmNlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlOiBpbnRlcm5hbHMuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcjogaW50ZXJuYWxzLnNldEZpZWxkRXJyb3IsXG4gICAgICAgIHNldEZpZWxkV2FybmluZzogaW50ZXJuYWxzLnNldEZpZWxkV2FybmluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZDogaW50ZXJuYWxzLnZhbGlkYXRlRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRBc3luYzogaW50ZXJuYWxzLnZhbGlkYXRlRmllbGRBc3luYyxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZDogaW50ZXJuYWxzLnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHVucmVnaXN0ZXJGaWVsZDogaW50ZXJuYWxzLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgbGFiZWxBbGlnbixcbiAgICAgICAgLy8gU3VibWl0dGluZy9sb2FkaW5nIGRvZXMgTk9UIGRpc2FibGUgZmllbGRzIOKAlCBvbmx5IHRoZVxuICAgICAgICAvLyBleHBsaWNpdCBgZGlzYWJsZWRgIHByb3AgZG9lcy4gS2VlcGluZyBpc0xvYWRpbmcgb3V0IG9mIHRoaXMgc2xpY2VcbiAgICAgICAgLy8gbWVhbnMgYSBzdWJtaXQgY3ljbGUgbm8gbG9uZ2VyIHJlLXJlbmRlcnMgZXZlcnkgZmllbGQgc2hlbGwuXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBjb2xvbixcbiAgICAgICAgcmVxdWlyZWRNYXJrLFxuICAgICAgICB2YWxpZGF0ZVRyaWdnZXIsXG4gICAgICAgIC8vIFByb0Zvcm0gc3BlY2lmaWNzXG4gICAgICAgIHJlYWRvbmx5LFxuICAgICAgICBtb2RlLFxuICAgICAgICBncmlkLFxuICAgICAgICBjb2xQcm9wczogc3RhYmxlQ29sUHJvcHMgIT09IG51bGwgJiYgc3RhYmxlQ29sUHJvcHMgIT09IHZvaWQgMCA/IHN0YWJsZUNvbFByb3BzIDogREVGQVVMVF9DT0xfUFJPUFMsXG4gICAgICAgIHJlZ2lzdGVyVHJhbnNmb3JtLFxuICAgICAgICB1bnJlZ2lzdGVyVHJhbnNmb3JtLFxuICAgICAgICByZWdpc3RlclZhbHVlVHlwZSxcbiAgICAgICAgdW5yZWdpc3RlclZhbHVlVHlwZSxcbiAgICAgICAgZmllbGRQcm9wczogc3RhYmxlRmllbGRQcm9wcyxcbiAgICAgICAgZm9ybUl0ZW1Qcm9wczogc3RhYmxlRm9ybUl0ZW1Qcm9wcyxcbiAgICAgICAgbGF5b3V0OiBzdGFibGVMYXlvdXQsXG4gICAgICAgIGZvcm1Db21wb25lbnRUeXBlLFxuICAgIH0pLCBbXG4gICAgICAgIHByb0Zvcm1Gb3JtSW5zdGFuY2UsXG4gICAgICAgIGludGVybmFscy5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBpbnRlcm5hbHMuc2V0RmllbGRFcnJvcixcbiAgICAgICAgaW50ZXJuYWxzLnNldEZpZWxkV2FybmluZyxcbiAgICAgICAgaW50ZXJuYWxzLnZhbGlkYXRlRmllbGQsXG4gICAgICAgIGludGVybmFscy52YWxpZGF0ZUZpZWxkQXN5bmMsXG4gICAgICAgIGludGVybmFscy5yZWdpc3RlckZpZWxkLFxuICAgICAgICBpbnRlcm5hbHMudW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBzaXplLFxuICAgICAgICBsYWJlbEFsaWduLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgY29sb24sXG4gICAgICAgIHJlcXVpcmVkTWFyayxcbiAgICAgICAgdmFsaWRhdGVUcmlnZ2VyLFxuICAgICAgICByZWFkb25seSxcbiAgICAgICAgbW9kZSxcbiAgICAgICAgZ3JpZCxcbiAgICAgICAgc3RhYmxlQ29sUHJvcHMsXG4gICAgICAgIHJlZ2lzdGVyVHJhbnNmb3JtLFxuICAgICAgICB1bnJlZ2lzdGVyVHJhbnNmb3JtLFxuICAgICAgICByZWdpc3RlclZhbHVlVHlwZSxcbiAgICAgICAgdW5yZWdpc3RlclZhbHVlVHlwZSxcbiAgICAgICAgc3RhYmxlRmllbGRQcm9wcyxcbiAgICAgICAgc3RhYmxlRm9ybUl0ZW1Qcm9wcyxcbiAgICAgICAgc3RhYmxlTGF5b3V0LFxuICAgICAgICBmb3JtQ29tcG9uZW50VHlwZSxcbiAgICBdKTtcbiAgICBjb25zdCBXcmFwcGVyQ29tcG9uZW50ID0gZ3JpZCA/IFJvdyA6IEZyYWdtZW50O1xuICAgIGNvbnN0IHdyYXBwZXJQcm9wcyA9IGdyaWQgPyBPYmplY3QuYXNzaWduKHt9LCByb3dQcm9wcykgOiB7fTtcbiAgICAvLyBSZXNldCBjYWxsYmFjayBjaGFpbjogdGhlIFN1Ym1pdHRlciByZXNldHMgdGhlIHZhbHVlcyBmaXJzdCwgdGhlbiB0aGVcbiAgICAvLyBzdWJtaXR0ZXItbGV2ZWwgb25SZXNldCwgdGhlbiB0aGUgZm9ybS1sZXZlbCBvblJlc2V0ICh3aXRoIGZpbmFsVmFsdWVzKVxuICAgIC8vIGFuZCB0aGUgVVJMIGNsZWFudXAg4oCUIGZpcmVkIGV4YWN0bHkgb25jZSBwZXIgcmVzZXQgYWN0aW9uLlxuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdHRlclJlc2V0ID0gdXNlTWVtb2l6ZWRGbigoKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdWJtaXR0ZXIgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgKF9hID0gc3VibWl0dGVyLm9uUmVzZXQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHN1Ym1pdHRlcik7XG4gICAgICAgIGZpcmVGb3JtUmVzZXQoKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdWJtaXR0ZXJOb2RlID0gc3VibWl0dGVyICE9PSBmYWxzZSAmJiBtb2RlICE9PSAncmVhZCcgPyAoX2pzeChTdWJtaXR0ZXIsIE9iamVjdC5hc3NpZ24oe30sICh0eXBlb2Ygc3VibWl0dGVyID09PSAnb2JqZWN0JyA/IHN1Ym1pdHRlciA6IHt9KSwgeyBvblJlc2V0OiBoYW5kbGVTdWJtaXR0ZXJSZXNldCwgbG9hZGluZzogaXNMb2FkaW5nIH0pKSkgOiBudWxsO1xuICAgIHJldHVybiAoX2pzeChQcm9Gb3JtU3RhYmxlQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogc3RhYmxlVmFsdWUsIGNoaWxkcmVuOiBfanN4KFByb0Zvcm1TdGF0ZUNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IHN0b3JlLCBjaGlsZHJlbjogX2pzeHMoXCJmb3JtXCIsIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgcmVmOiBmb3JtRWxSZWYsIGNsYXNzTmFtZTogZm9ybUNsYXNzZXModW5kZWZpbmVkLCBqb2luQ2xzKGNsYXNzZXMoKSwgY2xhc3NOYW1lKSksIG9uU3VibWl0OiB3cmFwcGVkSGFuZGxlU3VibWl0LCBvblJlc2V0OiBpbnRlcm5hbHMuaGFuZGxlUmVzZXQsIGNoaWxkcmVuOiBbX2pzeChXcmFwcGVyQ29tcG9uZW50LCBPYmplY3QuYXNzaWduKHt9LCB3cmFwcGVyUHJvcHMsIHsgY2hpbGRyZW46IGNoaWxkcmVuIH0pKSwgc3VibWl0dGVyTm9kZV0gfSkpIH0pIH0pKTtcbn07XG5Qcm9Gb3JtQmFzZS5kaXNwbGF5TmFtZSA9ICdQcm9Gb3JtJztcbmV4cG9ydCBjb25zdCBQcm9Gb3JtID0gbWVtbyhQcm9Gb3JtQmFzZSk7XG5leHBvcnQgZGVmYXVsdCBQcm9Gb3JtOyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -1,4 +1,13 @@
1
- import React from 'react';
1
+ import type { ReactElement } from 'react';
2
2
  import type { ProFormDependencyProps } from './interface';
3
- export declare const ProFormDependency: React.NamedExoticComponent<ProFormDependencyProps>;
3
+ /**
4
+ * Generic-aware component type — `memo()` erases generics, so the export is
5
+ * re-asserted to keep `<ProForm.Dependency<MyValues> name={['a']}>` fully
6
+ * typed (autocompleted `name`, typed `form` in children).
7
+ */
8
+ export interface ProFormDependencyComponent {
9
+ <Values = Record<string, unknown>>(props: ProFormDependencyProps<Values>): ReactElement | null;
10
+ displayName?: string;
11
+ }
12
+ export declare const ProFormDependency: ProFormDependencyComponent;
4
13
  export default ProFormDependency;