@1money/component-ui 0.0.76 → 0.0.77

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 (145) hide show
  1. package/es/components/ProForm/ProForm.d.ts +1 -1
  2. package/es/components/ProForm/ProForm.js +2 -3
  3. package/es/components/ProForm/ProFormDependency.d.ts +2 -1
  4. package/es/components/ProForm/ProFormDependency.js +1 -1
  5. package/es/components/ProForm/ProFormItem.d.ts +7 -2
  6. package/es/components/ProForm/ProFormItem.js +1 -1
  7. package/es/components/ProForm/ProFormList.d.ts +6 -1
  8. package/es/components/ProForm/ProFormList.js +13 -5
  9. package/es/components/ProForm/SchemaForm.d.ts +1 -1
  10. package/es/components/ProForm/SchemaForm.js +8 -5
  11. package/es/components/ProForm/context.d.ts +8 -7
  12. package/es/components/ProForm/context.js +1 -1
  13. package/es/components/ProForm/core/constants.d.ts +1 -1
  14. package/es/components/ProForm/core/constants.js +2 -2
  15. package/es/components/ProForm/core/formStore.d.ts +4 -4
  16. package/es/components/ProForm/core/formStore.js +1 -1
  17. package/es/components/ProForm/core/hooks/useForm.d.ts +1 -1
  18. package/es/components/ProForm/core/hooks/useForm.js +34 -9
  19. package/es/components/ProForm/core/hooks/useFormCore.d.ts +2 -2
  20. package/es/components/ProForm/core/hooks/useFormCore.js +17 -123
  21. package/es/components/ProForm/core/interface.d.ts +70 -91
  22. package/es/components/ProForm/core/namePathType.d.ts +25 -0
  23. package/es/components/ProForm/core/namePathType.js +2 -0
  24. package/es/components/ProForm/core/pathUtils.d.ts +5 -3
  25. package/es/components/ProForm/core/pathUtils.js +19 -1
  26. package/es/components/ProForm/core/runRules.d.ts +8 -17
  27. package/es/components/ProForm/core/runRules.js +22 -129
  28. package/es/components/ProForm/core/useFormItem.d.ts +1 -1
  29. package/es/components/ProForm/core/useFormItem.js +14 -66
  30. package/es/components/ProForm/core/validationError.d.ts +2 -2
  31. package/es/components/ProForm/core/validationError.js +1 -1
  32. package/es/components/ProForm/fields/ProFormCheckbox.d.ts +1 -1
  33. package/es/components/ProForm/fields/ProFormCheckboxGroup.d.ts +1 -1
  34. package/es/components/ProForm/fields/ProFormCheckboxGroup.js +1 -1
  35. package/es/components/ProForm/fields/ProFormDatePicker.d.ts +1 -1
  36. package/es/components/ProForm/fields/ProFormDatePicker.js +1 -1
  37. package/es/components/ProForm/fields/ProFormFieldSet.d.ts +7 -2
  38. package/es/components/ProForm/fields/ProFormFieldSet.js +5 -7
  39. package/es/components/ProForm/fields/ProFormPassword.d.ts +1 -1
  40. package/es/components/ProForm/fields/ProFormRadioGroup.d.ts +1 -1
  41. package/es/components/ProForm/fields/ProFormRadioGroup.js +1 -1
  42. package/es/components/ProForm/fields/ProFormSelect.d.ts +1 -1
  43. package/es/components/ProForm/fields/ProFormSelect.js +1 -1
  44. package/es/components/ProForm/fields/ProFormSlider.d.ts +1 -1
  45. package/es/components/ProForm/fields/ProFormSwitch.d.ts +1 -1
  46. package/es/components/ProForm/fields/ProFormText.d.ts +1 -1
  47. package/es/components/ProForm/fields/ProFormTextArea.d.ts +1 -1
  48. package/es/components/ProForm/fields/ProFormUpload.d.ts +1 -1
  49. package/es/components/ProForm/fields/ProFormUpload.js +1 -1
  50. package/es/components/ProForm/fields/createProFormField.d.ts +8 -2
  51. package/es/components/ProForm/fields/createProFormField.js +3 -3
  52. package/es/components/ProForm/hooks/useFieldRequest.d.ts +1 -1
  53. package/es/components/ProForm/hooks/useFieldRequest.js +1 -1
  54. package/es/components/ProForm/hooks/useUrlSync.d.ts +8 -7
  55. package/es/components/ProForm/hooks/useUrlSync.js +1 -1
  56. package/es/components/ProForm/index.d.ts +35 -26
  57. package/es/components/ProForm/index.js +1 -1
  58. package/es/components/ProForm/interface.d.ts +96 -91
  59. package/es/components/ProForm/layouts/DialogForm.d.ts +1 -1
  60. package/es/components/ProForm/layouts/DialogForm.js +1 -1
  61. package/es/components/ProForm/layouts/DrawerForm.d.ts +1 -1
  62. package/es/components/ProForm/layouts/DrawerForm.js +1 -1
  63. package/es/components/ProForm/layouts/QueryFilter.d.ts +1 -1
  64. package/es/components/ProForm/layouts/QueryFilter.js +1 -1
  65. package/es/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  66. package/es/components/ProForm/layouts/useOverlayForm.js +1 -1
  67. package/es/components/ProForm/utils.d.ts +8 -8
  68. package/es/components/ProForm/utils.js +1 -1
  69. package/es/index.css +1 -1
  70. package/es/index.d.ts +1 -1
  71. package/es/index.js +1 -1
  72. package/lib/components/ProForm/ProForm.d.ts +1 -1
  73. package/lib/components/ProForm/ProForm.js +2 -3
  74. package/lib/components/ProForm/ProFormDependency.d.ts +2 -1
  75. package/lib/components/ProForm/ProFormDependency.js +1 -1
  76. package/lib/components/ProForm/ProFormItem.d.ts +7 -2
  77. package/lib/components/ProForm/ProFormItem.js +1 -1
  78. package/lib/components/ProForm/ProFormList.d.ts +6 -1
  79. package/lib/components/ProForm/ProFormList.js +13 -5
  80. package/lib/components/ProForm/SchemaForm.d.ts +1 -1
  81. package/lib/components/ProForm/SchemaForm.js +8 -5
  82. package/lib/components/ProForm/context.d.ts +8 -7
  83. package/lib/components/ProForm/context.js +1 -1
  84. package/lib/components/ProForm/core/constants.d.ts +1 -1
  85. package/lib/components/ProForm/core/constants.js +2 -2
  86. package/lib/components/ProForm/core/formStore.d.ts +4 -4
  87. package/lib/components/ProForm/core/formStore.js +1 -1
  88. package/lib/components/ProForm/core/hooks/useForm.d.ts +1 -1
  89. package/lib/components/ProForm/core/hooks/useForm.js +34 -9
  90. package/lib/components/ProForm/core/hooks/useFormCore.d.ts +2 -2
  91. package/lib/components/ProForm/core/hooks/useFormCore.js +16 -122
  92. package/lib/components/ProForm/core/interface.d.ts +70 -91
  93. package/lib/components/ProForm/core/namePathType.d.ts +25 -0
  94. package/lib/components/ProForm/core/namePathType.js +6 -0
  95. package/lib/components/ProForm/core/pathUtils.d.ts +5 -3
  96. package/lib/components/ProForm/core/pathUtils.js +20 -1
  97. package/lib/components/ProForm/core/runRules.d.ts +8 -17
  98. package/lib/components/ProForm/core/runRules.js +22 -130
  99. package/lib/components/ProForm/core/useFormItem.d.ts +1 -1
  100. package/lib/components/ProForm/core/useFormItem.js +17 -69
  101. package/lib/components/ProForm/core/validationError.d.ts +2 -2
  102. package/lib/components/ProForm/core/validationError.js +1 -1
  103. package/lib/components/ProForm/fields/ProFormCheckbox.d.ts +1 -1
  104. package/lib/components/ProForm/fields/ProFormCheckboxGroup.d.ts +1 -1
  105. package/lib/components/ProForm/fields/ProFormCheckboxGroup.js +1 -1
  106. package/lib/components/ProForm/fields/ProFormDatePicker.d.ts +1 -1
  107. package/lib/components/ProForm/fields/ProFormDatePicker.js +1 -1
  108. package/lib/components/ProForm/fields/ProFormFieldSet.d.ts +7 -2
  109. package/lib/components/ProForm/fields/ProFormFieldSet.js +5 -7
  110. package/lib/components/ProForm/fields/ProFormPassword.d.ts +1 -1
  111. package/lib/components/ProForm/fields/ProFormRadioGroup.d.ts +1 -1
  112. package/lib/components/ProForm/fields/ProFormRadioGroup.js +1 -1
  113. package/lib/components/ProForm/fields/ProFormSelect.d.ts +1 -1
  114. package/lib/components/ProForm/fields/ProFormSelect.js +1 -1
  115. package/lib/components/ProForm/fields/ProFormSlider.d.ts +1 -1
  116. package/lib/components/ProForm/fields/ProFormSwitch.d.ts +1 -1
  117. package/lib/components/ProForm/fields/ProFormText.d.ts +1 -1
  118. package/lib/components/ProForm/fields/ProFormTextArea.d.ts +1 -1
  119. package/lib/components/ProForm/fields/ProFormUpload.d.ts +1 -1
  120. package/lib/components/ProForm/fields/ProFormUpload.js +1 -1
  121. package/lib/components/ProForm/fields/createProFormField.d.ts +8 -2
  122. package/lib/components/ProForm/fields/createProFormField.js +3 -3
  123. package/lib/components/ProForm/hooks/useFieldRequest.d.ts +1 -1
  124. package/lib/components/ProForm/hooks/useFieldRequest.js +1 -1
  125. package/lib/components/ProForm/hooks/useUrlSync.d.ts +8 -7
  126. package/lib/components/ProForm/hooks/useUrlSync.js +1 -1
  127. package/lib/components/ProForm/index.d.ts +35 -26
  128. package/lib/components/ProForm/index.js +1 -1
  129. package/lib/components/ProForm/interface.d.ts +96 -91
  130. package/lib/components/ProForm/layouts/DialogForm.d.ts +1 -1
  131. package/lib/components/ProForm/layouts/DialogForm.js +1 -1
  132. package/lib/components/ProForm/layouts/DrawerForm.d.ts +1 -1
  133. package/lib/components/ProForm/layouts/DrawerForm.js +1 -1
  134. package/lib/components/ProForm/layouts/QueryFilter.d.ts +1 -1
  135. package/lib/components/ProForm/layouts/QueryFilter.js +1 -1
  136. package/lib/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  137. package/lib/components/ProForm/layouts/useOverlayForm.js +1 -1
  138. package/lib/components/ProForm/utils.d.ts +8 -8
  139. package/lib/components/ProForm/utils.js +1 -1
  140. package/lib/index.css +1 -1
  141. package/lib/index.d.ts +1 -1
  142. package/lib/index.js +1 -1
  143. package/package.json +1 -1
  144. package/scripts/mcp-server/examples.generated.json +53 -17
  145. package/scripts/mcp-server/index.generated.json +1734 -160
@@ -3,15 +3,12 @@ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
3
3
  import { useMemo, useRef } from 'react';
4
4
  import useEventCallback from '@1money/hooks/useEventCallback';
5
5
  import useMemoizedFn from '@1money/hooks/useMemoizedFn';
6
- import { resolveValue, setNestedValue } from '../pathUtils';
7
- import { runRulesSync } from '../runRules';
6
+ import { mergeValuesPatch, resolveValue, setNestedValue } from '../pathUtils';
8
7
  import { createFormStore, sameValidationNode } from '../formStore';
9
8
  export var useFormCore = function useFormCore() {
10
9
  var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
11
10
  var _config$initialValues = config.initialValues,
12
11
  initialValues = _config$initialValues === void 0 ? {} : _config$initialValues,
13
- onFinish = config.onFinish,
14
- onFinishFailed = config.onFinishFailed,
15
12
  onValuesChange = config.onValuesChange,
16
13
  onReset = config.onReset,
17
14
  _config$size = config.size,
@@ -167,92 +164,6 @@ export var useFormCore = function useFormCore() {
167
164
  fieldMountCountsRef.current[name] = count;
168
165
  }
169
166
  });
170
- var validateField = useMemoizedFn(function (name) {
171
- var rules = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
172
- var providedValue = arguments.length > 2 ? arguments[2] : undefined;
173
- // A sync run commits immediately, so it is always current — bumping the
174
- // epoch here SUPERSEDES any in-flight async run for this field.
175
- beginValidationRun(name);
176
- var currentValues = store.getState().values;
177
- var value = providedValue !== undefined ? providedValue : resolveValue(currentValues, name);
178
- var _runRulesSync = runRulesSync(name, value, currentValues, rules, ruleContextInstanceRef.current),
179
- error = _runRulesSync.error,
180
- warning = _runRulesSync.warning;
181
- setFieldWarning(name, warning);
182
- if (error !== null) {
183
- setFieldError(name, error);
184
- return false;
185
- }
186
- if (store.getState().errors[name]) {
187
- setFieldError(name, null);
188
- }
189
- return true;
190
- });
191
- var validateFields = useMemoizedFn(function () {
192
- var fieldsRulesToValidate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : fieldRulesRef.current;
193
- var isValid = true;
194
- Object.keys(fieldsRulesToValidate).forEach(function (name) {
195
- var rules = fieldsRulesToValidate[name];
196
- if (!validateField(name, rules)) {
197
- isValid = false;
198
- }
199
- });
200
- return isValid;
201
- });
202
- var handleSubmitInternal = useMemoizedFn(function () {
203
- var state = store.getState();
204
- var currentValues = state.values;
205
- var currentRules = fieldRulesRef.current;
206
- var hasErrors = false;
207
- var failedErrors = {};
208
- // MERGE over the current maps: only fields in the rule registry are
209
- // re-decided — a manually-set error on a field without rules survives.
210
- var newErrors = Object.assign({}, state.errors);
211
- var newWarnings = Object.assign({}, state.warnings);
212
- Object.keys(currentRules).forEach(function (fieldName) {
213
- beginValidationRun(fieldName);
214
- var value = resolveValue(currentValues, fieldName);
215
- var _runRulesSync2 = runRulesSync(fieldName, value, currentValues, currentRules[fieldName], ruleContextInstanceRef.current),
216
- error = _runRulesSync2.error,
217
- warning = _runRulesSync2.warning;
218
- if (error !== null) {
219
- newErrors[fieldName] = error;
220
- failedErrors[fieldName] = error;
221
- hasErrors = true;
222
- } else {
223
- delete newErrors[fieldName];
224
- }
225
- if (warning !== null) {
226
- newWarnings[fieldName] = warning;
227
- } else {
228
- delete newWarnings[fieldName];
229
- }
230
- });
231
- store.setState({
232
- errors: newErrors,
233
- warnings: newWarnings
234
- });
235
- if (!hasErrors) {
236
- onFinish === null || onFinish === void 0 ? void 0 : onFinish(currentValues);
237
- return {
238
- success: true,
239
- values: currentValues
240
- };
241
- } else {
242
- onFinishFailed === null || onFinishFailed === void 0 ? void 0 : onFinishFailed({
243
- values: currentValues,
244
- errors: failedErrors
245
- });
246
- return {
247
- success: false,
248
- errors: failedErrors
249
- };
250
- }
251
- });
252
- var handleSubmit = useEventCallback(function (e) {
253
- e === null || e === void 0 ? void 0 : e.preventDefault();
254
- return handleSubmitInternal();
255
- });
256
167
  // Pure state API: the imperative resetFields()
257
168
  // never fires onReset. The callback belongs to the reset ACTION layer
258
169
  // (submitter button / native reset event), which fires it exactly once.
@@ -276,30 +187,36 @@ export var useFormCore = function useFormCore() {
276
187
  var getFieldValue = useMemoizedFn(function (name) {
277
188
  return resolveValue(store.getState().values, name);
278
189
  });
279
- var getFieldsValue = useMemoizedFn(function () {
280
- return store.getState().values;
190
+ var getFieldsValue = useMemoizedFn(function (nameList) {
191
+ var values = store.getState().values;
192
+ if (!nameList) return values;
193
+ return nameList.reduce(function (acc, name) {
194
+ acc[name] = resolveValue(values, name);
195
+ return acc;
196
+ }, {});
281
197
  });
282
198
  var setFieldsValue = useMemoizedFn(function (newValues) {
199
+ var valuesPatch = newValues;
283
200
  var prev = store.getState().values;
284
201
  var updatedValues;
285
- if (Object.keys(newValues).some(function (key) {
202
+ if (Object.keys(valuesPatch).some(function (key) {
286
203
  return key.includes('.');
287
204
  })) {
288
205
  // Dot-path keys write into the NESTED structure (the setFieldValue
289
206
  // contract) — a shallow merge would land them as literal top-level
290
207
  // keys that the nested-aware readers never find.
291
208
  updatedValues = prev;
292
- for (var _i = 0, _Object$entries = Object.entries(newValues); _i < _Object$entries.length; _i++) {
209
+ for (var _i = 0, _Object$entries = Object.entries(valuesPatch); _i < _Object$entries.length; _i++) {
293
210
  var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
294
211
  key = _Object$entries$_i[0],
295
212
  value = _Object$entries$_i[1];
296
- updatedValues = key.includes('.') ? setNestedValue(updatedValues, key, value) : Object.assign(Object.assign({}, updatedValues), _defineProperty({}, key, value));
213
+ updatedValues = key.includes('.') ? setNestedValue(updatedValues, key, value) : mergeValuesPatch(updatedValues, _defineProperty({}, key, value));
297
214
  }
298
215
  } else {
299
- updatedValues = Object.assign(Object.assign({}, prev), newValues);
216
+ updatedValues = mergeValuesPatch(prev, valuesPatch);
300
217
  }
301
218
  commitValues(updatedValues);
302
- onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(newValues, updatedValues);
219
+ onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(valuesPatch, updatedValues);
303
220
  });
304
221
  // Seed the rule-context instance with the core methods exactly once —
305
222
  // useForm's richer instance must not be downgraded on later renders.
@@ -314,35 +231,16 @@ export var useFormCore = function useFormCore() {
314
231
  }
315
232
  var formInstance = useMemo(function () {
316
233
  return {
317
- submit: handleSubmitInternal,
318
234
  resetFields: resetFields,
319
235
  getFieldValue: getFieldValue,
320
236
  getFieldsValue: getFieldsValue,
321
237
  setFieldsValue: setFieldsValue,
322
- setFieldValue: setFieldValue,
323
- validateFields: validateFields
238
+ setFieldValue: setFieldValue
324
239
  };
325
- }, [handleSubmitInternal, resetFields, getFieldValue, getFieldsValue, setFieldsValue, setFieldValue, validateFields]);
240
+ }, [resetFields, getFieldValue, getFieldsValue, setFieldsValue, setFieldValue]);
326
241
  // Render-time snapshot — kept for the UseFormCoreReturn contract. Reactive
327
242
  // consumers must go through the store, never through these fields.
328
243
  var state = store.getState();
329
- var coreContextShape = {
330
- values: state.values,
331
- errors: state.errors,
332
- warnings: state.warnings,
333
- touched: state.touched,
334
- formInstance: formInstance,
335
- setFieldValue: setFieldValue,
336
- setFieldError: setFieldError,
337
- setFieldWarning: setFieldWarning,
338
- validateField: validateField,
339
- registerField: registerField,
340
- unregisterField: unregisterField,
341
- size: size,
342
- labelAlign: labelAlign,
343
- disabled: disabled,
344
- validateTrigger: validateTrigger
345
- };
346
244
  return {
347
245
  values: state.values,
348
246
  errors: state.errors,
@@ -362,17 +260,13 @@ export var useFormCore = function useFormCore() {
362
260
  setFieldsValue: setFieldsValue,
363
261
  getFieldValue: getFieldValue,
364
262
  getFieldsValue: getFieldsValue,
365
- validateField: validateField,
366
- validateFields: validateFields,
367
263
  registerField: registerField,
368
264
  unregisterField: unregisterField,
369
265
  retainField: retainField,
370
266
  releaseField: releaseField,
371
- handleSubmit: handleSubmit,
372
267
  handleReset: handleReset,
373
268
  resetFields: resetFields,
374
269
  formInstance: formInstance,
375
- coreContextShape: coreContextShape,
376
270
  store: store,
377
271
  getInitialValues: function getInitialValues() {
378
272
  return mountInitialValues;
@@ -380,4 +274,4 @@ export var useFormCore = function useFormCore() {
380
274
  };
381
275
  };
382
276
  export default useFormCore;
383
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS50cyIsImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIl0sIm5hbWVzIjpbInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VFdmVudENhbGxiYWNrIiwidXNlTWVtb2l6ZWRGbiIsInJlc29sdmVWYWx1ZSIsInNldE5lc3RlZFZhbHVlIiwicnVuUnVsZXNTeW5jIiwiY3JlYXRlRm9ybVN0b3JlIiwic2FtZVZhbGlkYXRpb25Ob2RlIiwidXNlRm9ybUNvcmUiLCJjb25maWciLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJfY29uZmlnJGluaXRpYWxWYWx1ZXMiLCJpbml0aWFsVmFsdWVzIiwib25GaW5pc2giLCJvbkZpbmlzaEZhaWxlZCIsIm9uVmFsdWVzQ2hhbmdlIiwib25SZXNldCIsIl9jb25maWckc2l6ZSIsInNpemUiLCJfY29uZmlnJGxhYmVsQWxpZ24iLCJsYWJlbEFsaWduIiwiX2NvbmZpZyRkaXNhYmxlZCIsImRpc2FibGVkIiwiX2NvbmZpZyR2YWxpZGF0ZVRyaWdnIiwidmFsaWRhdGVUcmlnZ2VyIiwiaW5pdGlhbFZhbHVlc1JlZiIsImN1cnJlbnQiLCJtb3VudEluaXRpYWxWYWx1ZXMiLCJzdG9yZVJlZiIsInN0b3JlIiwiZmllbGRSdWxlc1JlZiIsInZhbGlkYXRpb25FcG9jaFJlZiIsImJlZ2luVmFsaWRhdGlvblJ1biIsIm5hbWUiLCJuZXh0IiwiaXNWYWxpZGF0aW9uUnVuQ3VycmVudCIsImVwb2NoIiwiaW52YWxpZGF0ZVZhbGlkYXRpb25SdW5zIiwibmFtZXMiLCJrZXlzIiwiT2JqZWN0IiwiZm9yRWFjaCIsImtleSIsInJ1bGVDb250ZXh0SW5zdGFuY2VSZWYiLCJzZXRSdWxlQ29udGV4dEluc3RhbmNlIiwiaW5zdGFuY2UiLCJnZXRSdWxlQ29udGV4dEluc3RhbmNlIiwiY29tbWl0VmFsdWVzIiwibmV3VmFsdWVzIiwic2V0U3RhdGUiLCJ2YWx1ZXMiLCJzZXRGaWVsZFZhbHVlIiwidmFsdWUiLCJwcmV2IiwiZ2V0U3RhdGUiLCJpbmNsdWRlcyIsImFzc2lnbiIsIl9kZWZpbmVQcm9wZXJ0eSIsInNldEZpZWxkRXJyb3IiLCJlcnJvciIsImVycm9ycyIsIm5ld0Vycm9ycyIsInNldEZpZWxkV2FybmluZyIsIndhcm5pbmciLCJ3YXJuaW5ncyIsIm5ld1dhcm5pbmdzIiwiZmllbGRNb3VudENvdW50c1JlZiIsImZpZWxkUmVnaXN0cmF0aW9uT3duZWRSZWYiLCJyZWdpc3RlckZpZWxkIiwicnVsZXMiLCJnZXRGaWVsZFJ1bGVzIiwidW5yZWdpc3RlckZpZWxkIiwicmV0YWluRmllbGQiLCJyZWxlYXNlRmllbGQiLCJjb3VudCIsInZhbGlkYXRlRmllbGQiLCJwcm92aWRlZFZhbHVlIiwiY3VycmVudFZhbHVlcyIsIl9ydW5SdWxlc1N5bmMiLCJ2YWxpZGF0ZUZpZWxkcyIsImZpZWxkc1J1bGVzVG9WYWxpZGF0ZSIsImlzVmFsaWQiLCJoYW5kbGVTdWJtaXRJbnRlcm5hbCIsInN0YXRlIiwiY3VycmVudFJ1bGVzIiwiaGFzRXJyb3JzIiwiZmFpbGVkRXJyb3JzIiwiZmllbGROYW1lIiwiX3J1blJ1bGVzU3luYzIiLCJzdWNjZXNzIiwiaGFuZGxlU3VibWl0IiwiZSIsInByZXZlbnREZWZhdWx0IiwicmVzZXRGaWVsZHMiLCJ0b3VjaGVkIiwidmFsaWRhdGluZyIsImhhbmRsZVJlc2V0IiwiZ2V0RmllbGRWYWx1ZSIsImdldEZpZWxkc1ZhbHVlIiwic2V0RmllbGRzVmFsdWUiLCJ1cGRhdGVkVmFsdWVzIiwic29tZSIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsIl9zbGljZWRUb0FycmF5IiwiZm9ybUluc3RhbmNlIiwic3VibWl0IiwiY29yZUNvbnRleHRTaGFwZSIsImZpZWxkUnVsZXMiLCJnZXRJbml0aWFsVmFs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b3JtQ29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiaW1wb3J0IHsgdXNlTWVtbywgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQDFtb25leS9ob29rcy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUsIHNldE5lc3RlZFZhbHVlIH0gZnJvbSAnLi4vcGF0aFV0aWxzJztcbmltcG9ydCB7IHJ1blJ1bGVzU3luYyB9IGZyb20gJy4uL3J1blJ1bGVzJztcbmltcG9ydCB7IGNyZWF0ZUZvcm1TdG9yZSwgc2FtZVZhbGlkYXRpb25Ob2RlIH0gZnJvbSAnLi4vZm9ybVN0b3JlJztcbmV4cG9ydCBjb25zdCB1c2VGb3JtQ29yZSA9IChjb25maWcgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHsgaW5pdGlhbFZhbHVlcyA9IHt9LCBvbkZpbmlzaCwgb25GaW5pc2hGYWlsZWQsIG9uVmFsdWVzQ2hhbmdlLCBvblJlc2V0LCBzaXplID0gJ2xhcmdlJywgbGFiZWxBbGlnbiA9ICdsZWZ0JywgZGlzYWJsZWQgPSBmYWxzZSwgdmFsaWRhdGVUcmlnZ2VyID0gJ29uQ2hhbmdlJywgfSA9IGNvbmZpZztcbiAgICAvLyBpbml0aWFsVmFsdWVzIGlzIE1PVU5ULU9OTFkgKHRoZSBkb2N1bWVudGVkIGNvbnRyYWN0KTogZnJlZXplIHRoZSBmaXJzdFxuICAgIC8vIHJlbmRlcidzIHZhbHVlIHNvIHJlc2V0RmllbGRzIGFsd2F5cyByZXN0b3JlcyB0aGUgbW91bnQtdGltZSBkZWZhdWx0cyxcbiAgICAvLyBldmVuIHdoZW4gdGhlIGNvbnN1bWVyIHJlLXJlbmRlcnMgd2l0aCBhIGRpZmZlcmVudCAoZS5nLiBjb250cm9sbGVkKVxuICAgIC8vIGluaXRpYWxWYWx1ZXMgb2JqZWN0LlxuICAgIGNvbnN0IGluaXRpYWxWYWx1ZXNSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgaWYgKGluaXRpYWxWYWx1ZXNSZWYuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICBpbml0aWFsVmFsdWVzUmVmLmN1cnJlbnQgPSBpbml0aWFsVmFsdWVzO1xuICAgIH1cbiAgICBjb25zdCBtb3VudEluaXRpYWxWYWx1ZXMgPSBpbml0aWFsVmFsdWVzUmVmLmN1cnJlbnQ7XG4gICAgLy8gQWxsIHZvbGF0aWxlIGZvcm0gc3RhdGUgbGl2ZXMgaW4gYW4gZXh0ZXJuYWwgc3RvcmUsIE5PVCBSZWFjdCBzdGF0ZSDigJQgYVxuICAgIC8vIGtleXN0cm9rZSBtdXN0IG5ldmVyIHJlLXJlbmRlciB0aGUgY29tcG9uZW50IHRoYXQgb3ducyB0aGUgZm9ybS4gRmllbGRzXG4gICAgLy8gYW5kIHdhdGNoZXJzIHN1YnNjcmliZSB3aXRoIHBlci1maWVsZCBzZWxlY3RvcnMgKHVzZVN0b3JlU2VsZWN0b3IpOyBldmVyeVxuICAgIC8vIG11dGF0b3IgYmVsb3cgcmVhZHMgdGhlIExBVEVTVCBzdGF0ZSB2aWEgc3RvcmUuZ2V0U3RhdGUoKSwgd2hpY2ggYWxzb1xuICAgIC8vIGtlZXBzIG11bHRpcGxlIHdyaXRlcyBpbiB0aGUgc2FtZSB0aWNrIHZpc2libGUgdG8gZWFjaCBvdGhlci5cbiAgICBjb25zdCBzdG9yZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBpZiAoc3RvcmVSZWYuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICBzdG9yZVJlZi5jdXJyZW50ID0gY3JlYXRlRm9ybVN0b3JlKG1vdW50SW5pdGlhbFZhbHVlcyk7XG4gICAgfVxuICAgIGNvbnN0IHN0b3JlID0gc3RvcmVSZWYuY3VycmVudDtcbiAgICAvLyBMaXZlIHJ1bGUgcmVnaXN0cnkg4oCUIE9ORSBzdGFibGUgb2JqZWN0IG11dGF0ZWQgaW4gcGxhY2UuIFJlZ2lzdHJhdGlvbiBtdXN0XG4gICAgLy8gbm90IHRyaWdnZXIgcmVuZGVycywgYW5kIHN1Ym1pdC10aW1lIHZhbGlkYXRpb24gbXVzdCBhbHdheXMgcmVhZCB0aGUgbGF0ZXN0XG4gICAgLy8gcnVsZXMgKHRoZXkgY2FuIGNoYW5nZSBiZXR3ZWVuIHJlbmRlcnMsIGUuZy4gYSBjb25kaXRpb25hbCBgcmVxdWlyZWRgKS5cbiAgICBjb25zdCBmaWVsZFJ1bGVzUmVmID0gdXNlUmVmKHt9KTtcbiAgICAvLyBQZXItZmllbGQgdmFsaWRhdGlvbiBydW4gZXBvY2hzLiBFVkVSWSB2YWxpZGF0aW9uIHJ1biAoc3luYyBvciBhc3luYylcbiAgICAvLyBidW1wcyBpdHMgZmllbGQncyBlcG9jaDsgYW4gYXN5bmMgcnVuIHJlLWNoZWNrcyBpdHMgY2FwdHVyZWQgZXBvY2ggYXRcbiAgICAvLyBzZXR0bGUgdGltZSBhbmQgZGlzY2FyZHMgYSBTVEFMRSBvdXRjb21lIOKAlCB0aGUgc2FtZSBwcm90ZWN0aW9uIGFzXG4gICAgLy8gcmMtZmllbGQtZm9ybSdzIHZhbGlkYXRlUHJvbWlzZSBpZGVudGl0eSBjaGVjay4gV2l0aG91dCBpdCwgYSBzbG93IGFzeW5jXG4gICAgLy8gdmFsaWRhdG9yIChlLmcuIGEgc2VydmVyLXNpZGUgdW5pcXVlbmVzcyBjaGVjayBzdGFydGVkIG9uIGJsdXIpIGNvdWxkXG4gICAgLy8gc2V0dGxlIGFmdGVyIHRoZSB1c2VyIGFscmVhZHkgZml4ZWQgdGhlIHZhbHVlIGFuZCBzdGFtcCBhIHN0YWxlIGVycm9yXG4gICAgLy8gb3ZlciBhIG5ld2VyLCBwYXNzaW5nIHJlc3VsdC5cbiAgICBjb25zdCB2YWxpZGF0aW9uRXBvY2hSZWYgPSB1c2VSZWYoe30pO1xuICAgIGNvbnN0IGJlZ2luVmFsaWRhdGlvblJ1biA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgbmV4dCA9ICh2YWxpZGF0aW9uRXBvY2hSZWYuY3VycmVudFtuYW1lXSB8fCAwKSArIDE7XG4gICAgICAgIHZhbGlkYXRpb25FcG9jaFJlZi5jdXJyZW50W25hbWVdID0gbmV4dDtcbiAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gICAgY29uc3QgaXNWYWxpZGF0aW9uUnVuQ3VycmVudCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIGVwb2NoKSA9PiB2YWxpZGF0aW9uRXBvY2hSZWYuY3VycmVudFtuYW1lXSA9PT0gZXBvY2gpO1xuICAgIC8vIEJ1bXAgKG5ldmVyIGRlbGV0ZSDigJQgZGVsZXRpb24gd291bGQgbGV0IGEgbmV3IHJ1biByZS1pc3N1ZSBhbiBvbGQgZXBvY2hcbiAgICAvLyBudW1iZXIgYW5kIGNvbGxpZGUgd2l0aCBhIHN0aWxsLWluLWZsaWdodCBwcmUtcmVzZXQgcnVuKS5cbiAgICBjb25zdCBpbnZhbGlkYXRlVmFsaWRhdGlvblJ1bnMgPSB1c2VNZW1vaXplZEZuKChuYW1lcykgPT4ge1xuICAgICAgICBjb25zdCBrZXlzID0gbmFtZXMgIT09IG51bGwgJiYgbmFtZXMgIT09IHZvaWQgMCA/IG5hbWVzIDogT2JqZWN0LmtleXModmFsaWRhdGlvbkVwb2NoUmVmLmN1cnJlbnQpO1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25FcG9jaFJlZi5jdXJyZW50W2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25FcG9jaFJlZi5jdXJyZW50W2tleV0gKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gSW5zdGFuY2UgaGFuZGVkIHRvIGZ1bmN0aW9uLWZvcm0gcnVsZXMuIERlZmF1bHRzIHRvIHRoZSBjb3JlIG1ldGhvZHNcbiAgICAvLyAoYXNzaWduZWQgYXQgdGhlIGVuZCBvZiB0aGlzIGhvb2sgYm9keSk7IHVzZUZvcm0gdXBncmFkZXMgaXQgdG8gdGhlIEZVTExcbiAgICAvLyBmb3JtIGluc3RhbmNlIG9uY2UgaXQgaGFzIGJ1aWx0IG9uZSwgc28gcnVsZXMgc2VlIHRoZSBzYW1lIGNvbnRleHQgb25cbiAgICAvLyBldmVyeSBwYXRoIChpbnRlcmFjdGl2ZSwgYmx1ciwgc3VibWl0KS5cbiAgICBjb25zdCBydWxlQ29udGV4dEluc3RhbmNlUmVmID0gdXNlUmVmKHt9KTtcbiAgICBjb25zdCBzZXRSdWxlQ29udGV4dEluc3RhbmNlID0gdXNlTWVtb2l6ZWRGbigoaW5zdGFuY2UpID0+IHtcbiAgICAgICAgcnVsZUNvbnRleHRJbnN0YW5jZVJlZi5jdXJyZW50ID0gaW5zdGFuY2U7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSA9IHVzZU1lbW9pemVkRm4oKCkgPT4gcnVsZUNvbnRleHRJbnN0YW5jZVJlZi5jdXJyZW50KTtcbiAgICBjb25zdCBjb21taXRWYWx1ZXMgPSB1c2VNZW1vaXplZEZuKChuZXdWYWx1ZXMpID0+IHtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB2YWx1ZXM6IG5ld1ZhbHVlcyB9KTtcbiAgICB9KTtcbiAgICAvLyBOT1RFOiBzZXR0aW5nIGEgdmFsdWUgZG9lcyBOT1QgdG91Y2ggdGhlIGZpZWxkJ3MgZXJyb3Ig4oCUIGVycm9ycyBhcmVcbiAgICAvLyBjbGVhcmVkIGV4Y2x1c2l2ZWx5IGJ5IHZhbGlkYXRpb24gcnVucyAod2hvc2UgdGltaW5nIGZvbGxvd3MgdGhlXG4gICAgLy8gdmFsaWRhdGVUcmlnZ2VyIGNvbmZpZyksIHNvIGFuIG9uQmx1ci1vbmx5IGZpZWxkIGtlZXBzIGl0cyBlcnJvciB3aGlsZVxuICAgIC8vIHRoZSB1c2VyIGlzIHN0aWxsIHR5cGluZy5cbiAgICBjb25zdCBzZXRGaWVsZFZhbHVlID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgcHJldiA9IHN0b3JlLmdldFN0YXRlKCkudmFsdWVzO1xuICAgICAgICBjb25zdCBuZXdWYWx1ZXMgPSBuYW1lLmluY2x1ZGVzKCcuJylcbiAgICAgICAgICAgID8gc2V0TmVzdGVkVmFsdWUocHJldiwgbmFtZSwgdmFsdWUpXG4gICAgICAgICAgICA6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB2YWx1ZSB9KTtcbiAgICAgICAgY29tbWl0VmFsdWVzKG5ld1ZhbHVlcyk7XG4gICAgICAgIG9uVmFsdWVzQ2hhbmdlID09PSBudWxsIHx8IG9uVmFsdWVzQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblZhbHVlc0NoYW5nZSh7IFtuYW1lXTogdmFsdWUgfSwgbmV3VmFsdWVzKTtcbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZEVycm9yID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JzID0gc3RvcmUuZ2V0U3RhdGUoKS5lcnJvcnM7XG4gICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCFlcnJvcnNbbmFtZV0pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgbmV3RXJyb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgZXJyb3JzKTtcbiAgICAgICAgICAgIGRlbGV0ZSBuZXdFcnJvcnNbbmFtZV07XG4gICAgICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IGVycm9yczogbmV3RXJyb3JzIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzYW1lVmFsaWRhdGlvbk5vZGUoZXJyb3JzW25hbWVdLCBlcnJvcikpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHsgZXJyb3JzOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGVycm9ycyksIHsgW25hbWVdOiBlcnJvciB9KSB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZFdhcm5pbmcgPSB1c2VNZW1vaXplZEZuKChuYW1lLCB3YXJuaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHdhcm5pbmdzID0gc3RvcmUuZ2V0U3RhdGUoKS53YXJuaW5ncztcbiAgICAgICAgaWYgKHdhcm5pbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghd2FybmluZ3NbbmFtZV0pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgbmV3V2FybmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB3YXJuaW5ncyk7XG4gICAgICAgICAgICBkZWxldGUgbmV3V2FybmluZ3NbbmFtZV07XG4gICAgICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHdhcm5pbmdzOiBuZXdXYXJuaW5ncyB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2FtZVZhbGlkYXRpb25Ob2RlKHdhcm5pbmdzW25hbWVdLCB3YXJuaW5nKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB3YXJuaW5nczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB3YXJuaW5ncyksIHsgW25hbWVdOiB3YXJuaW5nIH0pIH0pO1xuICAgIH0pO1xuICAgIC8vIE1vdW50ZWQtaW5zdGFuY2UgY291bnRzIHBlciBmaWVsZCBuYW1lLCBwbHVzIHdoZXRoZXIgdGhlIENVUlJFTlQgcnVsZXNcbiAgICAvLyByZWdpc3RyYXRpb24gd2FzIG1hZGUgYnkgYSBjb3VudGVkIGluc3RhbmNlLiBSdWxlcyBhcmUgcmVtb3ZlZCBvbmx5IHdoZW5cbiAgICAvLyB0aGUgTEFTVCBtb3VudGVkIGluc3RhbmNlIGZvciBhIG5hbWUgcmVsZWFzZXM6IHdpdGggdHdvIHNhbWUtbmFtZSBmaWVsZHNcbiAgICAvLyBtb3VudGVkLCB0aGUgZmlyc3QgdW5tb3VudCBtdXN0IG5vdCB3aXBlIHRoZSByZWdpc3RyYXRpb24gd2hpbGUgdGhlXG4gICAgLy8gc3Vydml2b3IgKHBvc3NpYmx5IG1lbW8tYmFpbGVkLCBzbyBub3QgcmUtcmVuZGVyaW5nIHRvIHJlLXJlZ2lzdGVyKSBzdGlsbFxuICAgIC8vIHJlbGllcyBvbiBpdCBmb3Igc3VibWl0LXRpbWUgdmFsaWRhdGlvbi4gQSBNQU5VQUwgcmVnaXN0ZXJGaWVsZCAobm9cbiAgICAvLyBtb3VudGVkIGhvbGRlciwgb3duZWQ9ZmFsc2UpIHN1cnZpdmVzIHRoZSB1bm1vdW50IG9mIHBpZ2d5YmFja2luZ1xuICAgIC8vIGluc3RhbmNlcyB0aGF0IG5ldmVyIHJlZ2lzdGVyZWQgcnVsZXMgdGhlbXNlbHZlcy5cbiAgICAvLyBOT1RFOiBjYWxsZXJzIG11c3QgcmV0YWluIEJFRk9SRSByZWdpc3RlcmluZyAocmV0YWluIGVmZmVjdCBkZWNsYXJlZFxuICAgIC8vIGZpcnN0KSwgb3IgdGhlIHJlZ2lzdHJhdGlvbiBpcyBtaXNjbGFzc2lmaWVkIGFzIG1hbnVhbCBhbmQgbGVha3MuXG4gICAgY29uc3QgZmllbGRNb3VudENvdW50c1JlZiA9IHVzZVJlZih7fSk7XG4gICAgY29uc3QgZmllbGRSZWdpc3RyYXRpb25Pd25lZFJlZiA9IHVzZVJlZih7fSk7XG4gICAgY29uc3QgcmVnaXN0ZXJGaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHJ1bGVzKSA9PiB7XG4gICAgICAgIGZpZWxkUnVsZXNSZWYuY3VycmVudFtuYW1lXSA9IHJ1bGVzO1xuICAgICAgICBmaWVsZFJlZ2lzdHJhdGlvbk93bmVkUmVmLmN1cnJlbnRbbmFtZV0gPSAoZmllbGRNb3VudENvdW50c1JlZi5jdXJyZW50W25hbWVdIHx8IDApID4gMDtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZFJ1bGVzID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gZmllbGRSdWxlc1JlZi5jdXJyZW50W25hbWVdO1xuICAgIH0pO1xuICAgIGNvbnN0IHVucmVnaXN0ZXJGaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgZGVsZXRlIGZpZWxkUnVsZXNSZWYuY3VycmVudFtuYW1lXTtcbiAgICAgICAgZGVsZXRlIGZpZWxkUmVnaXN0cmF0aW9uT3duZWRSZWYuY3VycmVudFtuYW1lXTtcbiAgICB9KTtcbiAgICBjb25zdCByZXRhaW5GaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgZmllbGRNb3VudENvdW50c1JlZi5jdXJyZW50W25hbWVdID0gKGZpZWxkTW91bnRDb3VudHNSZWYuY3VycmVudFtuYW1lXSB8fCAwKSArIDE7XG4gICAgfSk7XG4gICAgY29uc3QgcmVsZWFzZUZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBjb3VudCA9IChmaWVsZE1vdW50Q291bnRzUmVmLmN1cnJlbnRbbmFtZV0gfHwgMCkgLSAxO1xuICAgICAgICBpZiAoY291bnQgPD0gMCkge1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkTW91bnRDb3VudHNSZWYuY3VycmVudFtuYW1lXTtcbiAgICAgICAgICAgIGlmIChmaWVsZFJlZ2lzdHJhdGlvbk93bmVkUmVmLmN1cnJlbnRbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZmllbGRSdWxlc1JlZi5jdXJyZW50W25hbWVdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWVsZFJlZ2lzdHJhdGlvbk93bmVkUmVmLmN1cnJlbnRbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmaWVsZE1vdW50Q291bnRzUmVmLmN1cnJlbnRbbmFtZV0gPSBjb3VudDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHZhbGlkYXRlRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBydWxlcyA9IFtdLCBwcm92aWRlZFZhbHVlKSA9PiB7XG4gICAgICAgIC8vIEEgc3luYyBydW4gY29tbWl0cyBpbW1lZGlhdGVseSwgc28gaXQgaXMgYWx3YXlzIGN1cnJlbnQg4oCUIGJ1bXBpbmcgdGhlXG4gICAgICAgIC8vIGVwb2NoIGhlcmUgU1VQRVJTRURFUyBhbnkgaW4tZmxpZ2h0IGFzeW5jIHJ1biBmb3IgdGhpcyBmaWVsZC5cbiAgICAgICAgYmVnaW5WYWxpZGF0aW9uUnVuKG5hbWUpO1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gc3RvcmUuZ2V0U3RhdGUoKS52YWx1ZXM7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcHJvdmlkZWRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gcHJvdmlkZWRWYWx1ZSA6IHJlc29sdmVWYWx1ZShjdXJyZW50VmFsdWVzLCBuYW1lKTtcbiAgICAgICAgY29uc3QgeyBlcnJvciwgd2FybmluZyB9ID0gcnVuUnVsZXNTeW5jKG5hbWUsIHZhbHVlLCBjdXJyZW50VmFsdWVzLCBydWxlcywgcnVsZUNvbnRleHRJbnN0YW5jZVJlZi5jdXJyZW50KTtcbiAgICAgICAgc2V0RmllbGRXYXJuaW5nKG5hbWUsIHdhcm5pbmcpO1xuICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdG9yZS5nZXRTdGF0ZSgpLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgc2V0RmllbGRFcnJvcihuYW1lLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkcyA9IHVzZU1lbW9pemVkRm4oKGZpZWxkc1J1bGVzVG9WYWxpZGF0ZSA9IGZpZWxkUnVsZXNSZWYuY3VycmVudCkgPT4ge1xuICAgICAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgIE9iamVjdC5rZXlzKGZpZWxkc1J1bGVzVG9WYWxpZGF0ZSkuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmaWVsZHNSdWxlc1RvVmFsaWRhdGVbbmFtZV07XG4gICAgICAgICAgICBpZiAoIXZhbGlkYXRlRmllbGQobmFtZSwgcnVsZXMpKSB7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWQ7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlU3VibWl0SW50ZXJuYWwgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gc3RhdGUudmFsdWVzO1xuICAgICAgICBjb25zdCBjdXJyZW50UnVsZXMgPSBmaWVsZFJ1bGVzUmVmLmN1cnJlbnQ7XG4gICAgICAgIGxldCBoYXNFcnJvcnMgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZmFpbGVkRXJyb3JzID0ge307XG4gICAgICAgIC8vIE1FUkdFIG92ZXIgdGhlIGN1cnJlbnQgbWFwczogb25seSBmaWVsZHMgaW4gdGhlIHJ1bGUgcmVnaXN0cnkgYXJlXG4gICAgICAgIC8vIHJlLWRlY2lkZWQg4oCUIGEgbWFudWFsbHktc2V0IGVycm9yIG9uIGEgZmllbGQgd2l0aG91dCBydWxlcyBzdXJ2aXZlcy5cbiAgICAgICAgY29uc3QgbmV3RXJyb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuZXJyb3JzKTtcbiAgICAgICAgY29uc3QgbmV3V2FybmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS53YXJuaW5ncyk7XG4gICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRSdWxlcykuZm9yRWFjaCgoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICBiZWdpblZhbGlkYXRpb25SdW4oZmllbGROYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVzb2x2ZVZhbHVlKGN1cnJlbnRWYWx1ZXMsIGZpZWxkTmFtZSk7XG4gICAgICAgICAgICBjb25zdCB7IGVycm9yLCB3YXJuaW5nIH0gPSBydW5SdWxlc1N5bmMoZmllbGROYW1lLCB2YWx1ZSwgY3VycmVudFZhbHVlcywgY3VycmVudFJ1bGVzW2ZpZWxkTmFtZV0sIHJ1bGVDb250ZXh0SW5zdGFuY2VSZWYuY3VycmVudCk7XG4gICAgICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBuZXdFcnJvcnNbZmllbGROYW1lXSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIGZhaWxlZEVycm9yc1tmaWVsZE5hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdFcnJvcnNbZmllbGROYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh3YXJuaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbmV3V2FybmluZ3NbZmllbGROYW1lXSA9IHdhcm5pbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3V2FybmluZ3NbZmllbGROYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHsgZXJyb3JzOiBuZXdFcnJvcnMsIHdhcm5pbmdzOiBuZXdXYXJuaW5ncyB9KTtcbiAgICAgICAgaWYgKCFoYXNFcnJvcnMpIHtcbiAgICAgICAgICAgIG9uRmluaXNoID09PSBudWxsIHx8IG9uRmluaXNoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaChjdXJyZW50VmFsdWVzKTtcbiAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHZhbHVlczogY3VycmVudFZhbHVlcyB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb25GaW5pc2hGYWlsZWQgPT09IG51bGwgfHwgb25GaW5pc2hGYWlsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoRmFpbGVkKHsgdmFsdWVzOiBjdXJyZW50VmFsdWVzLCBlcnJvcnM6IGZhaWxlZEVycm9ycyB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcnM6IGZhaWxlZEVycm9ycyB9O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVN1Ym1pdEludGVybmFsKCk7XG4gICAgfSk7XG4gICAgLy8gUHVyZSBzdGF0ZSBBUEk6IHRoZSBpbXBlcmF0aXZlIHJlc2V0RmllbGRzKClcbiAgICAvLyBuZXZlciBmaXJlcyBvblJlc2V0LiBUaGUgY2FsbGJhY2sgYmVsb25ncyB0byB0aGUgcmVzZXQgQUNUSU9OIGxheWVyXG4gICAgLy8gKHN1Ym1pdHRlciBidXR0b24gLyBuYXRpdmUgcmVzZXQgZXZlbnQpLCB3aGljaCBmaXJlcyBpdCBleGFjdGx5IG9uY2UuXG4gICAgY29uc3QgcmVzZXRGaWVsZHMgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgLy8gSW52YWxpZGF0ZSBpbi1mbGlnaHQgYXN5bmMgdmFsaWRhdGlvbiBydW5zIOKAlCB0aGVpciByZXN1bHRzIGJlbG9uZyB0b1xuICAgICAgICAvLyBwcmUtcmVzZXQgdmFsdWVzIGFuZCBtdXN0IG5vdCBzdGFtcCBlcnJvcnMgb250byB0aGUgcmVzZXQgZm9ybS5cbiAgICAgICAgaW52YWxpZGF0ZVZhbGlkYXRpb25SdW5zKCk7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHZhbHVlczogbW91bnRJbml0aWFsVmFsdWVzLFxuICAgICAgICAgICAgZXJyb3JzOiB7fSxcbiAgICAgICAgICAgIHdhcm5pbmdzOiB7fSxcbiAgICAgICAgICAgIHRvdWNoZWQ6IHt9LFxuICAgICAgICAgICAgdmFsaWRhdGluZzoge30sXG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVJlc2V0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmVzZXRGaWVsZHMoKTtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RmllbGRWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVWYWx1ZShzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcywgbmFtZSk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RmllbGRzVmFsdWUgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHN0b3JlLmdldFN0YXRlKCkudmFsdWVzO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkc1ZhbHVlID0gdXNlTWVtb2l6ZWRGbigobmV3VmFsdWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcztcbiAgICAgICAgbGV0IHVwZGF0ZWRWYWx1ZXM7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhuZXdWYWx1ZXMpLnNvbWUoKGtleSkgPT4ga2V5LmluY2x1ZGVzKCcuJykpKSB7XG4gICAgICAgICAgICAvLyBEb3QtcGF0aCBrZXlzIHdyaXRlIGludG8gdGhlIE5FU1RFRCBzdHJ1Y3R1cmUgKHRoZSBzZXRGaWVsZFZhbHVlXG4gICAgICAgICAgICAvLyBjb250cmFjdCkg4oCUIGEgc2hhbGxvdyBtZXJnZSB3b3VsZCBsYW5kIHRoZW0gYXMgbGl0ZXJhbCB0b3AtbGV2ZWxcbiAgICAgICAgICAgIC8vIGtleXMgdGhhdCB0aGUgbmVzdGVkLWF3YXJlIHJlYWRlcnMgbmV2ZXIgZmluZC5cbiAgICAgICAgICAgIHVwZGF0ZWRWYWx1ZXMgPSBwcmV2O1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobmV3VmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZWRWYWx1ZXMgPSBrZXkuaW5jbHVkZXMoJy4nKVxuICAgICAgICAgICAgICAgICAgICA/IHNldE5lc3RlZFZhbHVlKHVwZGF0ZWRWYWx1ZXMsIGtleSwgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB1cGRhdGVkVmFsdWVzKSwgeyBba2V5XTogdmFsdWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1cGRhdGVkVmFsdWVzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgbmV3VmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgICBjb21taXRWYWx1ZXModXBkYXRlZFZhbHVlcyk7XG4gICAgICAgIG9uVmFsdWVzQ2hhbmdlID09PSBudWxsIHx8IG9uVmFsdWVzQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblZhbHVlc0NoYW5nZShuZXdWYWx1ZXMsIHVwZGF0ZWRWYWx1ZXMpO1xuICAgIH0pO1xuICAgIC8vIFNlZWQgdGhlIHJ1bGUtY29udGV4dCBpbnN0YW5jZSB3aXRoIHRoZSBjb3JlIG1ldGhvZHMgZXhhY3RseSBvbmNlIOKAlFxuICAgIC8vIHVzZUZvcm0ncyByaWNoZXIgaW5zdGFuY2UgbXVzdCBub3QgYmUgZG93bmdyYWRlZCBvbiBsYXRlciByZW5kZXJzLlxuICAgIGlmIChPYmplY3Qua2V5cyhydWxlQ29udGV4dEluc3RhbmNlUmVmLmN1cnJlbnQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBydWxlQ29udGV4dEluc3RhbmNlUmVmLmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBnZXRGaWVsZFZhbHVlLFxuICAgICAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICAgICAgc2V0RmllbGRzVmFsdWUsXG4gICAgICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgZm9ybUluc3RhbmNlID0gdXNlTWVtbygoKSA9PiAoe1xuICAgICAgICBzdWJtaXQ6IGhhbmRsZVN1Ym1pdEludGVybmFsLFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkcyxcbiAgICB9KSwgW1xuICAgICAgICBoYW5kbGVTdWJtaXRJbnRlcm5hbCxcbiAgICAgICAgcmVzZXRGaWVsZHMsXG4gICAgICAgIGdldEZpZWxkVmFsdWUsXG4gICAgICAgIGdldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgdmFsaWRhdGVGaWVsZHMsXG4gICAgXSk7XG4gICAgLy8gUmVuZGVyLXRpbWUgc25hcHNob3Qg4oCUIGtlcHQgZm9yIHRoZSBVc2VGb3JtQ29yZVJldHVybiBjb250cmFjdC4gUmVhY3RpdmVcbiAgICAvLyBjb25zdW1lcnMgbXVzdCBnbyB0aHJvdWdoIHRoZSBzdG9yZSwgbmV2ZXIgdGhyb3VnaCB0aGVzZSBmaWVsZHMuXG4gICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGNvcmVDb250ZXh0U2hhcGUgPSB7XG4gICAgICAgIHZhbHVlczogc3RhdGUudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IHN0YXRlLmVycm9ycyxcbiAgICAgICAgd2FybmluZ3M6IHN0YXRlLndhcm5pbmdzLFxuICAgICAgICB0b3VjaGVkOiBzdGF0ZS50b3VjaGVkLFxuICAgICAgICBmb3JtSW5zdGFuY2UsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgIHNldEZpZWxkRXJyb3IsXG4gICAgICAgIHNldEZpZWxkV2FybmluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZCxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBzaXplLFxuICAgICAgICBsYWJlbEFsaWduLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgdmFsaWRhdGVUcmlnZ2VyLFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVzOiBzdGF0ZS52YWx1ZXMsXG4gICAgICAgIGVycm9yczogc3RhdGUuZXJyb3JzLFxuICAgICAgICB3YXJuaW5nczogc3RhdGUud2FybmluZ3MsXG4gICAgICAgIHRvdWNoZWQ6IHN0YXRlLnRvdWNoZWQsXG4gICAgICAgIC8vIExpdmUgcmVnaXN0cnkg4oCUIHN0YWJsZSBpZGVudGl0eSwgbXV0YXRlZCBpbiBwbGFjZSBieSByZWdpc3Rlci91bnJlZ2lzdGVyLlxuICAgICAgICBmaWVsZFJ1bGVzOiBmaWVsZFJ1bGVzUmVmLmN1cnJlbnQsXG4gICAgICAgIGdldEZpZWxkUnVsZXMsXG4gICAgICAgIGdldFJ1bGVDb250ZXh0SW5zdGFuY2UsXG4gICAgICAgIHNldFJ1bGVDb250ZXh0SW5zdGFuY2UsXG4gICAgICAgIGJlZ2luVmFsaWRhdGlvblJ1bixcbiAgICAgICAgaXNWYWxpZGF0aW9uUnVuQ3VycmVudCxcbiAgICAgICAgaW52YWxpZGF0ZVZhbGlkYXRpb25SdW5zLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yLFxuICAgICAgICBzZXRGaWVsZFdhcm5pbmcsXG4gICAgICAgIHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBnZXRGaWVsZFZhbHVlLFxuICAgICAgICBnZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgdmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZHMsXG4gICAgICAgIHJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgcmV0YWluRmllbGQsXG4gICAgICAgIHJlbGVhc2VGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICAgICAgcmVzZXRGaWVsZHMsXG4gICAgICAgIGZvcm1JbnN0YW5jZSxcbiAgICAgICAgY29yZUNvbnRleHRTaGFwZSxcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIGdldEluaXRpYWxWYWx1ZXM6ICgpID0+IG1vdW50SW5pdGlhbFZhbHVlcyxcbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IHVzZUZvcm1Db3JlOyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
277
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS50cyIsImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIl0sIm5hbWVzIjpbInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VFdmVudENhbGxiYWNrIiwidXNlTWVtb2l6ZWRGbiIsIm1lcmdlVmFsdWVzUGF0Y2giLCJyZXNvbHZlVmFsdWUiLCJzZXROZXN0ZWRWYWx1ZSIsImNyZWF0ZUZvcm1TdG9yZSIsInNhbWVWYWxpZGF0aW9uTm9kZSIsInVzZUZvcm1Db3JlIiwiY29uZmlnIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiX2NvbmZpZyRpbml0aWFsVmFsdWVzIiwiaW5pdGlhbFZhbHVlcyIsIm9uVmFsdWVzQ2hhbmdlIiwib25SZXNldCIsIl9jb25maWckc2l6ZSIsInNpemUiLCJfY29uZmlnJGxhYmVsQWxpZ24iLCJsYWJlbEFsaWduIiwiX2NvbmZpZyRkaXNhYmxlZCIsImRpc2FibGVkIiwiX2NvbmZpZyR2YWxpZGF0ZVRyaWdnIiwidmFsaWRhdGVUcmlnZ2VyIiwiaW5pdGlhbFZhbHVlc1JlZiIsImN1cnJlbnQiLCJtb3VudEluaXRpYWxWYWx1ZXMiLCJzdG9yZVJlZiIsInN0b3JlIiwiZmllbGRSdWxlc1JlZiIsInZhbGlkYXRpb25FcG9jaFJlZiIsImJlZ2luVmFsaWRhdGlvblJ1biIsIm5hbWUiLCJuZXh0IiwiaXNWYWxpZGF0aW9uUnVuQ3VycmVudCIsImVwb2NoIiwiaW52YWxpZGF0ZVZhbGlkYXRpb25SdW5zIiwibmFtZXMiLCJrZXlzIiwiT2JqZWN0IiwiZm9yRWFjaCIsImtleSIsInJ1bGVDb250ZXh0SW5zdGFuY2VSZWYiLCJzZXRSdWxlQ29udGV4dEluc3RhbmNlIiwiaW5zdGFuY2UiLCJnZXRSdWxlQ29udGV4dEluc3RhbmNlIiwiY29tbWl0VmFsdWVzIiwibmV3VmFsdWVzIiwic2V0U3RhdGUiLCJ2YWx1ZXMiLCJzZXRGaWVsZFZhbHVlIiwidmFsdWUiLCJwcmV2IiwiZ2V0U3RhdGUiLCJpbmNsdWRlcyIsImFzc2lnbiIsIl9kZWZpbmVQcm9wZXJ0eSIsInNldEZpZWxkRXJyb3IiLCJlcnJvciIsImVycm9ycyIsIm5ld0Vycm9ycyIsInNldEZpZWxkV2FybmluZyIsIndhcm5pbmciLCJ3YXJuaW5ncyIsIm5ld1dhcm5pbmdzIiwiZmllbGRNb3VudENvdW50c1JlZiIsImZpZWxkUmVnaXN0cmF0aW9uT3duZWRSZWYiLCJyZWdpc3RlckZpZWxkIiwicnVsZXMiLCJnZXRGaWVsZFJ1bGVzIiwidW5yZWdpc3RlckZpZWxkIiwicmV0YWluRmllbGQiLCJyZWxlYXNlRmllbGQiLCJjb3VudCIsInJlc2V0RmllbGRzIiwidG91Y2hlZCIsInZhbGlkYXRpbmciLCJoYW5kbGVSZXNldCIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImdldEZpZWxkVmFsdWUiLCJnZXRGaWVsZHNWYWx1ZSIsIm5hbWVMaXN0IiwicmVkdWNlIiwiYWNjIiwic2V0RmllbGRzVmFsdWUiLCJ2YWx1ZXNQYXRjaCIsInVwZGF0ZWRWYWx1ZXMiLCJzb21lIiwiX2kiLCJfT2JqZWN0JGVudHJpZXMiLCJlbnRyaWVzIiwiX09iamVjdCRlbnRyaWVzJF9pIiwiX3NsaWNlZFRvQXJyYXkiLCJmb3JtSW5zdGFuY2UiLCJzdGF0ZSIsImZpZWxkUnVsZXMiLCJnZXRJbml0aWFsVmFsdWVzIl0sIm1hcHBpbmdzIjoiOztBQUFBLFNBQVNBLE9BQU8sRUFBRUMsTUFBTSxRQUFRLE9BQU87QUFFdkMsT0FBT0MsZ0JBQWdCLE1BQU0sZ0NBQWdDO0FBQzdELE9BQU9DLGFBQWEsTUFBTSw2QkFBNkI7QUFDdkQsU0FBU0MsZ0JBQWdCLEVBQUVDLFlBQVksRUFBRUMsY0FBYyxRQUFRLGNBQWM7QUFDN0UsU0FBU0MsZUFBZSxFQUFFQyxrQkFBa0IsUUFBUSxjQUFjO0FBV2xFLE9BQU8sSUFBTUMsV0FBVyxHQUFHLFNBQWRBLFdBQVdB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S0FBSyxDQUFDcEIsT0FBTztJQUN0QjtJQUNBcUIsVUFBVSxFQUFFbkUsYUFBYSxDQUFDSixPQUFPO0lBQ2pDNEMsYUFBYSxFQUFiQSxhQUFhO0lBQ2J4QixzQkFBc0IsRUFBdEJBLHNCQUFzQjtJQUN0QkYsc0JBQXNCLEVBQXRCQSxzQkFBc0I7SUFDdEJaLGtCQUFrQixFQUFsQkEsa0JBQWtCO0lBQ2xCRyxzQkFBc0IsRUFBdEJBLHNCQUFzQjtJQUN0QkUsd0JBQXdCLEVBQXhCQSx3QkFBd0I7SUFDeEJjLGFBQWEsRUFBYkEsYUFBYTtJQUNiTyxhQUFhLEVBQWJBLGFBQWE7SUFDYkksZUFBZSxFQUFmQSxlQUFlO0lBQ2Z3QixjQUFjLEVBQWRBLGNBQWM7SUFDZEwsYUFBYSxFQUFiQSxhQUFhO0lBQ2JDLGNBQWMsRUFBRUEsY0FBNEQ7SUFDNUVkLGFBQWEsRUFBYkEsYUFBYTtJQUNiRyxlQUFlLEVBQWZBLGVBQWU7SUFDZkMsV0FBVyxFQUFYQSxXQUFXO0lBQ1hDLFlBQVksRUFBWkEsWUFBWTtJQUNaSyxXQUFXLEVBQVhBLFdBQVc7SUFDWEgsV0FBVyxFQUFYQSxXQUFXO0lBQ1hvQixZQUFZLEVBQVpBLFlBQVk7SUFDWmxFLEtBQUssRUFBTEEsS0FBSztJQUNMcUUsZ0JBQWdCLEVBQUUsU0FBbEJBLGdCQUFnQkEsQ0FBQTtNQUFBLE9BQVF2RSxrQkFBa0I7SUFBQTtFQ3pDMUMsQ0QwQ0Q7QUFDSCxDQUFDO0FBRUQsZUFBZW5CLFdBQVciLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybUNvcmUuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImltcG9ydCB7IHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VFdmVudENhbGxiYWNrIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgdXNlTWVtb2l6ZWRGbiBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZU1lbW9pemVkRm4nO1xuaW1wb3J0IHsgbWVyZ2VWYWx1ZXNQYXRjaCwgcmVzb2x2ZVZhbHVlLCBzZXROZXN0ZWRWYWx1ZSB9IGZyb20gJy4uL3BhdGhVdGlscyc7XG5pbXBvcnQgeyBjcmVhdGVGb3JtU3RvcmUsIHNhbWVWYWxpZGF0aW9uTm9kZSB9IGZyb20gJy4uL2Zvcm1TdG9yZSc7XG5leHBvcnQgY29uc3QgdXNlRm9ybUNvcmUgPSAoY29uZmlnID0ge30pID0+IHtcbiAgICBjb25zdCB7IGluaXRpYWxWYWx1ZXMgPSB7fSwgb25WYWx1ZXNDaGFuZ2UsIG9uUmVzZXQsIHNpemUgPSAnbGFyZ2UnLCBsYWJlbEFsaWduID0gJ2xlZnQnLCBkaXNhYmxlZCA9IGZhbHNlLCB2YWxpZGF0ZVRyaWdnZXIgPSAnb25DaGFuZ2UnLCB9ID0gY29uZmlnO1xuICAgIC8vIGluaXRpYWxWYWx1ZXMgaXMgTU9VTlQtT05MWSAodGhlIGRvY3VtZW50ZWQgY29udHJhY3QpOiBmcmVlemUgdGhlIGZpcnN0XG4gICAgLy8gcmVuZGVyJ3MgdmFsdWUgc28gcmVzZXRGaWVsZHMgYWx3YXlzIHJlc3RvcmVzIHRoZSBtb3VudC10aW1lIGRlZmF1bHRzLFxuICAgIC8vIGV2ZW4gd2hlbiB0aGUgY29uc3VtZXIgcmUtcmVuZGVycyB3aXRoIGEgZGlmZmVyZW50IChlLmcuIGNvbnRyb2xsZWQpXG4gICAgLy8gaW5pdGlhbFZhbHVlcyBvYmplY3QuXG4gICAgY29uc3QgaW5pdGlhbFZhbHVlc1JlZiA9IHVzZVJlZihudWxsKTtcbiAgICBpZiAoaW5pdGlhbFZhbHVlc1JlZi5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIGluaXRpYWxWYWx1ZXNSZWYuY3VycmVudCA9IGluaXRpYWxWYWx1ZXM7XG4gICAgfVxuICAgIGNvbnN0IG1vdW50SW5pdGlhbFZhbHVlcyA9IGluaXRpYWxWYWx1ZXNSZWYuY3VycmVudDtcbiAgICAvLyBBbGwgdm9sYXRpbGUgZm9ybSBzdGF0ZSBsaXZlcyBpbiBhbiBleHRlcm5hbCBzdG9yZSwgTk9UIFJlYWN0IHN0YXRlIOKAlCBhXG4gICAgLy8ga2V5c3Ryb2tlIG11c3QgbmV2ZXIgcmUtcmVuZGVyIHRoZSBjb21wb25lbnQgdGhhdCBvd25zIHRoZSBmb3JtLiBGaWVsZHNcbiAgICAvLyBhbmQgd2F0Y2hlcnMgc3Vic2NyaWJlIHdpdGggcGVyLWZpZWxkIHNlbGVjdG9ycyAodXNlU3RvcmVTZWxlY3Rvcik7IGV2ZXJ5XG4gICAgLy8gbXV0YXRvciBiZWxvdyByZWFkcyB0aGUgTEFURVNUIHN0YXRlIHZpYSBzdG9yZS5nZXRTdGF0ZSgpLCB3aGljaCBhbHNvXG4gICAgLy8ga2VlcHMgbXVsdGlwbGUgd3JpdGVzIGluIHRoZSBzYW1lIHRpY2sgdmlzaWJsZSB0byBlYWNoIG90aGVyLlxuICAgIGNvbnN0IHN0b3JlUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGlmIChzdG9yZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIHN0b3JlUmVmLmN1cnJlbnQgPSBjcmVhdGVGb3JtU3RvcmUobW91bnRJbml0aWFsVmFsdWVzKTtcbiAgICB9XG4gICAgY29uc3Qgc3RvcmUgPSBzdG9yZVJlZi5jdXJyZW50O1xuICAgIC8vIExpdmUgcnVsZSByZWdpc3RyeSDigJQgT05FIHN0YWJsZSBvYmplY3QgbXV0YXRlZCBpbiBwbGFjZS4gUmVnaXN0cmF0aW9uIG11c3RcbiAgICAvLyBub3QgdHJpZ2dlciByZW5kZXJzLCBhbmQgc3VibWl0LXRpbWUgdmFsaWRhdGlvbiBtdXN0IGFsd2F5cyByZWFkIHRoZSBsYXRlc3RcbiAgICAvLyBydWxlcyAodGhleSBjYW4gY2hhbmdlIGJldHdlZW4gcmVuZGVycywgZS5nLiBhIGNvbmRpdGlvbmFsIGByZXF1aXJlZGApLlxuICAgIGNvbnN0IGZpZWxkUnVsZXNSZWYgPSB1c2VSZWYoe30pO1xuICAgIC8vIFBlci1maWVsZCB2YWxpZGF0aW9uIHJ1biBlcG9jaHMuIEVWRVJZIHZhbGlkYXRpb24gcnVuIChzeW5jIG9yIGFzeW5jKVxuICAgIC8vIGJ1bXBzIGl0cyBmaWVsZCdzIGVwb2NoOyBhbiBhc3luYyBydW4gcmUtY2hlY2tzIGl0cyBjYXB0dXJlZCBlcG9jaCBhdFxuICAgIC8vIHNldHRsZSB0aW1lIGFuZCBkaXNjYXJkcyBhIFNUQUxFIG91dGNvbWUg4oCUIHRoZSBzYW1lIHByb3RlY3Rpb24gYXNcbiAgICAvLyByYy1maWVsZC1mb3JtJ3MgdmFsaWRhdGVQcm9taXNlIGlkZW50aXR5IGNoZWNrLiBXaXRob3V0IGl0LCBhIHNsb3cgYXN5bmNcbiAgICAvLyB2YWxpZGF0b3IgKGUuZy4gYSBzZXJ2ZXItc2lkZSB1bmlxdWVuZXNzIGNoZWNrIHN0YXJ0ZWQgb24gYmx1cikgY291bGRcbiAgICAvLyBzZXR0bGUgYWZ0ZXIgdGhlIHVzZXIgYWxyZWFkeSBmaXhlZCB0aGUgdmFsdWUgYW5kIHN0YW1wIGEgc3RhbGUgZXJyb3JcbiAgICAvLyBvdmVyIGEgbmV3ZXIsIHBhc3NpbmcgcmVzdWx0LlxuICAgIGNvbnN0IHZhbGlkYXRpb25FcG9jaFJlZiA9IHVzZVJlZih7fSk7XG4gICAgY29uc3QgYmVnaW5WYWxpZGF0aW9uUnVuID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBuZXh0ID0gKHZhbGlkYXRpb25FcG9jaFJlZi5jdXJyZW50W25hbWVdIHx8IDApICsgMTtcbiAgICAgICAgdmFsaWRhdGlvbkVwb2NoUmVmLmN1cnJlbnRbbmFtZV0gPSBuZXh0O1xuICAgICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgICBjb25zdCBpc1ZhbGlkYXRpb25SdW5DdXJyZW50ID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgZXBvY2gpID0+IHZhbGlkYXRpb25FcG9jaFJlZi5jdXJyZW50W25hbWVdID09PSBlcG9jaCk7XG4gICAgLy8gQnVtcCAobmV2ZXIgZGVsZXRlIOKAlCBkZWxldGlvbiB3b3VsZCBsZXQgYSBuZXcgcnVuIHJlLWlzc3VlIGFuIG9sZCBlcG9jaFxuICAgIC8vIG51bWJlciBhbmQgY29sbGlkZSB3aXRoIGEgc3RpbGwtaW4tZmxpZ2h0IHByZS1yZXNldCBydW4pLlxuICAgIGNvbnN0IGludmFsaWRhdGVWYWxpZGF0aW9uUnVucyA9IHVzZU1lbW9pemVkRm4oKG5hbWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBuYW1lcyAhPT0gbnVsbCAmJiBuYW1lcyAhPT0gdm9pZCAwID8gbmFtZXMgOiBPYmplY3Qua2V5cyh2YWxpZGF0aW9uRXBvY2hSZWYuY3VycmVudCk7XG4gICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsaWRhdGlvbkVwb2NoUmVmLmN1cnJlbnRba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGlvbkVwb2NoUmVmLmN1cnJlbnRba2V5XSArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICAvLyBJbnN0YW5jZSBoYW5kZWQgdG8gZnVuY3Rpb24tZm9ybSBydWxlcy4gRGVmYXVsdHMgdG8gdGhlIGNvcmUgbWV0aG9kc1xuICAgIC8vIChhc3NpZ25lZCBhdCB0aGUgZW5kIG9mIHRoaXMgaG9vayBib2R5KTsgdXNlRm9ybSB1cGdyYWRlcyBpdCB0byB0aGUgRlVMTFxuICAgIC8vIGZvcm0gaW5zdGFuY2Ugb25jZSBpdCBoYXMgYnVpbHQgb25lLCBzbyBydWxlcyBzZWUgdGhlIHNhbWUgY29udGV4dCBvblxuICAgIC8vIGV2ZXJ5IHBhdGggKGludGVyYWN0aXZlLCBibHVyLCBzdWJtaXQpLlxuICAgIGNvbnN0IHJ1bGVDb250ZXh0SW5zdGFuY2VSZWYgPSB1c2VSZWYoe30pO1xuICAgIGNvbnN0IHNldFJ1bGVDb250ZXh0SW5zdGFuY2UgPSB1c2VNZW1vaXplZEZuKChpbnN0YW5jZSkgPT4ge1xuICAgICAgICBydWxlQ29udGV4dEluc3RhbmNlUmVmLmN1cnJlbnQgPSBpbnN0YW5jZTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRSdWxlQ29udGV4dEluc3RhbmNlID0gdXNlTWVtb2l6ZWRGbigoKSA9PiBydWxlQ29udGV4dEluc3RhbmNlUmVmLmN1cnJlbnQpO1xuICAgIGNvbnN0IGNvbW1pdFZhbHVlcyA9IHVzZU1lbW9pemVkRm4oKG5ld1ZhbHVlcykgPT4ge1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHZhbHVlczogbmV3VmFsdWVzIH0pO1xuICAgIH0pO1xuICAgIC8vIE5PVEU6IHNldHRpbmcgYSB2YWx1ZSBkb2VzIE5PVCB0b3VjaCB0aGUgZmllbGQncyBlcnJvciDigJQgZXJyb3JzIGFyZVxuICAgIC8vIGNsZWFyZWQgZXhjbHVzaXZlbHkgYnkgdmFsaWRhdGlvbiBydW5zICh3aG9zZSB0aW1pbmcgZm9sbG93cyB0aGVcbiAgICAvLyB2YWxpZGF0ZVRyaWdnZXIgY29uZmlnKSwgc28gYW4gb25CbHVyLW9ubHkgZmllbGQga2VlcHMgaXRzIGVycm9yIHdoaWxlXG4gICAgLy8gdGhlIHVzZXIgaXMgc3RpbGwgdHlwaW5nLlxuICAgIGNvbnN0IHNldEZpZWxkVmFsdWUgPSB1c2VNZW1vaXplZEZuKChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBwcmV2ID0gc3RvcmUuZ2V0U3RhdGUoKS52YWx1ZXM7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IG5hbWUuaW5jbHVkZXMoJy4nKVxuICAgICAgICAgICAgPyBzZXROZXN0ZWRWYWx1ZShwcmV2LCBuYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgIDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IHZhbHVlIH0pO1xuICAgICAgICBjb21taXRWYWx1ZXMobmV3VmFsdWVzKTtcbiAgICAgICAgb25WYWx1ZXNDaGFuZ2UgPT09IG51bGwgfHwgb25WYWx1ZXNDaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVmFsdWVzQ2hhbmdlKHsgW25hbWVdOiB2YWx1ZSB9LCBuZXdWYWx1ZXMpO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkRXJyb3IgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBzdG9yZS5nZXRTdGF0ZSgpLmVycm9ycztcbiAgICAgICAgaWYgKGVycm9yID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoIWVycm9yc1tuYW1lXSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBuZXdFcnJvcnMgPSBPYmplY3QuYXNzaWduKHt9LCBlcnJvcnMpO1xuICAgICAgICAgICAgZGVsZXRlIG5ld0Vycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIHN0b3JlLnNldFN0YXRlKHsgZXJyb3JzOiBuZXdFcnJvcnMgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNhbWVWYWxpZGF0aW9uTm9kZShlcnJvcnNbbmFtZV0sIGVycm9yKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyBlcnJvcnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZXJyb3JzKSwgeyBbbmFtZV06IGVycm9yIH0pIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkV2FybmluZyA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHdhcm5pbmcpID0+IHtcbiAgICAgICAgY29uc3Qgd2FybmluZ3MgPSBzdG9yZS5nZXRTdGF0ZSgpLndhcm5pbmdzO1xuICAgICAgICBpZiAod2FybmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCF3YXJuaW5nc1tuYW1lXSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBuZXdXYXJuaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHdhcm5pbmdzKTtcbiAgICAgICAgICAgIGRlbGV0ZSBuZXdXYXJuaW5nc1tuYW1lXTtcbiAgICAgICAgICAgIHN0b3JlLnNldFN0YXRlKHsgd2FybmluZ3M6IG5ld1dhcm5pbmdzIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzYW1lVmFsaWRhdGlvbk5vZGUod2FybmluZ3NbbmFtZV0sIHdhcm5pbmcpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHdhcm5pbmdzOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHdhcm5pbmdzKSwgeyBbbmFtZV06IHdhcm5pbmcgfSkgfSk7XG4gICAgfSk7XG4gICAgLy8gTW91bnRlZC1pbnN0YW5jZSBjb3VudHMgcGVyIGZpZWxkIG5hbWUsIHBsdXMgd2hldGhlciB0aGUgQ1VSUkVOVCBydWxlc1xuICAgIC8vIHJlZ2lzdHJhdGlvbiB3YXMgbWFkZSBieSBhIGNvdW50ZWQgaW5zdGFuY2UuIFJ1bGVzIGFyZSByZW1vdmVkIG9ubHkgd2hlblxuICAgIC8vIHRoZSBMQVNUIG1vdW50ZWQgaW5zdGFuY2UgZm9yIGEgbmFtZSByZWxlYXNlczogd2l0aCB0d28gc2FtZS1uYW1lIGZpZWxkc1xuICAgIC8vIG1vdW50ZWQsIHRoZSBmaXJzdCB1bm1vdW50IG11c3Qgbm90IHdpcGUgdGhlIHJlZ2lzdHJhdGlvbiB3aGlsZSB0aGVcbiAgICAvLyBzdXJ2aXZvciAocG9zc2libHkgbWVtby1iYWlsZWQsIHNvIG5vdCByZS1yZW5kZXJpbmcgdG8gcmUtcmVnaXN0ZXIpIHN0aWxsXG4gICAgLy8gcmVsaWVzIG9uIGl0IGZvciBzdWJtaXQtdGltZSB2YWxpZGF0aW9uLiBBIE1BTlVBTCByZWdpc3RlckZpZWxkIChub1xuICAgIC8vIG1vdW50ZWQgaG9sZGVyLCBvd25lZD1mYWxzZSkgc3Vydml2ZXMgdGhlIHVubW91bnQgb2YgcGlnZ3liYWNraW5nXG4gICAgLy8gaW5zdGFuY2VzIHRoYXQgbmV2ZXIgcmVnaXN0ZXJlZCBydWxlcyB0aGVtc2VsdmVzLlxuICAgIC8vIE5PVEU6IGNhbGxlcnMgbXVzdCByZXRhaW4gQkVGT1JFIHJlZ2lzdGVyaW5nIChyZXRhaW4gZWZmZWN0IGRlY2xhcmVkXG4gICAgLy8gZmlyc3QpLCBvciB0aGUgcmVnaXN0cmF0aW9uIGlzIG1pc2NsYXNzaWZpZWQgYXMgbWFudWFsIGFuZCBsZWFrcy5cbiAgICBjb25zdCBmaWVsZE1vdW50Q291bnRzUmVmID0gdXNlUmVmKHt9KTtcbiAgICBjb25zdCBmaWVsZFJlZ2lzdHJhdGlvbk93bmVkUmVmID0gdXNlUmVmKHt9KTtcbiAgICBjb25zdCByZWdpc3RlckZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgcnVsZXMpID0+IHtcbiAgICAgICAgZmllbGRSdWxlc1JlZi5jdXJyZW50W25hbWVdID0gcnVsZXM7XG4gICAgICAgIGZpZWxkUmVnaXN0cmF0aW9uT3duZWRSZWYuY3VycmVudFtuYW1lXSA9IChmaWVsZE1vdW50Q291bnRzUmVmLmN1cnJlbnRbbmFtZV0gfHwgMCkgPiAwO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldEZpZWxkUnVsZXMgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiBmaWVsZFJ1bGVzUmVmLmN1cnJlbnRbbmFtZV07XG4gICAgfSk7XG4gICAgY29uc3QgdW5yZWdpc3RlckZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICBkZWxldGUgZmllbGRSdWxlc1JlZi5jdXJyZW50W25hbWVdO1xuICAgICAgICBkZWxldGUgZmllbGRSZWdpc3RyYXRpb25Pd25lZFJlZi5jdXJyZW50W25hbWVdO1xuICAgIH0pO1xuICAgIGNvbnN0IHJldGFpbkZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICBmaWVsZE1vdW50Q291bnRzUmVmLmN1cnJlbnRbbmFtZV0gPSAoZmllbGRNb3VudENvdW50c1JlZi5jdXJyZW50W25hbWVdIHx8IDApICsgMTtcbiAgICB9KTtcbiAgICBjb25zdCByZWxlYXNlRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gKGZpZWxkTW91bnRDb3VudHNSZWYuY3VycmVudFtuYW1lXSB8fCAwKSAtIDE7XG4gICAgICAgIGlmIChjb3VudCA8PSAwKSB7XG4gICAgICAgICAgICBkZWxldGUgZmllbGRNb3VudENvdW50c1JlZi5jdXJyZW50W25hbWVdO1xuICAgICAgICAgICAgaWYgKGZpZWxkUmVnaXN0cmF0aW9uT3duZWRSZWYuY3VycmVudFtuYW1lXSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWVsZFJ1bGVzUmVmLmN1cnJlbnRbbmFtZV07XG4gICAgICAgICAgICAgICAgZGVsZXRlIGZpZWxkUmVnaXN0cmF0aW9uT3duZWRSZWYuY3VycmVudFtuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkTW91bnRDb3VudHNSZWYuY3VycmVudFtuYW1lXSA9IGNvdW50O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gUHVyZSBzdGF0ZSBBUEk6IHRoZSBpbXBlcmF0aXZlIHJlc2V0RmllbGRzKClcbiAgICAvLyBuZXZlciBmaXJlcyBvblJlc2V0LiBUaGUgY2FsbGJhY2sgYmVsb25ncyB0byB0aGUgcmVzZXQgQUNUSU9OIGxheWVyXG4gICAgLy8gKHN1Ym1pdHRlciBidXR0b24gLyBuYXRpdmUgcmVzZXQgZXZlbnQpLCB3aGljaCBmaXJlcyBpdCBleGFjdGx5IG9uY2UuXG4gICAgY29uc3QgcmVzZXRGaWVsZHMgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgLy8gSW52YWxpZGF0ZSBpbi1mbGlnaHQgYXN5bmMgdmFsaWRhdGlvbiBydW5zIOKAlCB0aGVpciByZXN1bHRzIGJlbG9uZyB0b1xuICAgICAgICAvLyBwcmUtcmVzZXQgdmFsdWVzIGFuZCBtdXN0IG5vdCBzdGFtcCBlcnJvcnMgb250byB0aGUgcmVzZXQgZm9ybS5cbiAgICAgICAgaW52YWxpZGF0ZVZhbGlkYXRpb25SdW5zKCk7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHZhbHVlczogbW91bnRJbml0aWFsVmFsdWVzLFxuICAgICAgICAgICAgZXJyb3JzOiB7fSxcbiAgICAgICAgICAgIHdhcm5pbmdzOiB7fSxcbiAgICAgICAgICAgIHRvdWNoZWQ6IHt9LFxuICAgICAgICAgICAgdmFsaWRhdGluZzoge30sXG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVJlc2V0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmVzZXRGaWVsZHMoKTtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RmllbGRWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVWYWx1ZShzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcywgbmFtZSk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RmllbGRzVmFsdWUgPSB1c2VNZW1vaXplZEZuKChuYW1lTGlzdCkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcztcbiAgICAgICAgaWYgKCFuYW1lTGlzdClcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICAgIHJldHVybiBuYW1lTGlzdC5yZWR1Y2UoKGFjYywgbmFtZSkgPT4ge1xuICAgICAgICAgICAgYWNjW25hbWVdID0gcmVzb2x2ZVZhbHVlKHZhbHVlcywgbmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRzVmFsdWUgPSB1c2VNZW1vaXplZEZuKChuZXdWYWx1ZXMpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWVzUGF0Y2ggPSBuZXdWYWx1ZXM7XG4gICAgICAgIGNvbnN0IHByZXYgPSBzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcztcbiAgICAgICAgbGV0IHVwZGF0ZWRWYWx1ZXM7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh2YWx1ZXNQYXRjaCkuc29tZSgoa2V5KSA9PiBrZXkuaW5jbHVkZXMoJy4nKSkpIHtcbiAgICAgICAgICAgIC8vIERvdC1wYXRoIGtleXMgd3JpdGUgaW50byB0aGUgTkVTVEVEIHN0cnVjdHVyZSAodGhlIHNldEZpZWxkVmFsdWVcbiAgICAgICAgICAgIC8vIGNvbnRyYWN0KSDigJQgYSBzaGFsbG93IG1lcmdlIHdvdWxkIGxhbmQgdGhlbSBhcyBsaXRlcmFsIHRvcC1sZXZlbFxuICAgICAgICAgICAgLy8ga2V5cyB0aGF0IHRoZSBuZXN0ZWQtYXdhcmUgcmVhZGVycyBuZXZlciBmaW5kLlxuICAgICAgICAgICAgdXBkYXRlZFZhbHVlcyA9IHByZXY7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZXNQYXRjaCkpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVkVmFsdWVzID0ga2V5LmluY2x1ZGVzKCcuJylcbiAgICAgICAgICAgICAgICAgICAgPyBzZXROZXN0ZWRWYWx1ZSh1cGRhdGVkVmFsdWVzLCBrZXksIHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA6IG1lcmdlVmFsdWVzUGF0Y2godXBkYXRlZFZhbHVlcywgeyBba2V5XTogdmFsdWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1cGRhdGVkVmFsdWVzID0gbWVyZ2VWYWx1ZXNQYXRjaChwcmV2LCB2YWx1ZXNQYXRjaCk7XG4gICAgICAgIH1cbiAgICAgICAgY29tbWl0VmFsdWVzKHVwZGF0ZWRWYWx1ZXMpO1xuICAgICAgICBvblZhbHVlc0NoYW5nZSA9PT0gbnVsbCB8fCBvblZhbHVlc0NoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25WYWx1ZXNDaGFuZ2UodmFsdWVzUGF0Y2gsIHVwZGF0ZWRWYWx1ZXMpO1xuICAgIH0pO1xuICAgIC8vIFNlZWQgdGhlIHJ1bGUtY29udGV4dCBpbnN0YW5jZSB3aXRoIHRoZSBjb3JlIG1ldGhvZHMgZXhhY3RseSBvbmNlIOKAlFxuICAgIC8vIHVzZUZvcm0ncyByaWNoZXIgaW5zdGFuY2UgbXVzdCBub3QgYmUgZG93bmdyYWRlZCBvbiBsYXRlciByZW5kZXJzLlxuICAgIGlmIChPYmplY3Qua2V5cyhydWxlQ29udGV4dEluc3RhbmNlUmVmLmN1cnJlbnQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBydWxlQ29udGV4dEluc3RhbmNlUmVmLmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBnZXRGaWVsZFZhbHVlOiBnZXRGaWVsZFZhbHVlLFxuICAgICAgICAgICAgZ2V0RmllbGRzVmFsdWU6IGdldEZpZWxkc1ZhbHVlLFxuICAgICAgICAgICAgc2V0RmllbGRWYWx1ZTogc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgICAgIHNldEZpZWxkc1ZhbHVlOiBzZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgICAgIHJlc2V0RmllbGRzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBmb3JtSW5zdGFuY2UgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHJlc2V0RmllbGRzLFxuICAgICAgICBnZXRGaWVsZFZhbHVlOiBnZXRGaWVsZFZhbHVlLFxuICAgICAgICBnZXRGaWVsZHNWYWx1ZTogZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkc1ZhbHVlOiBzZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZTogc2V0RmllbGRWYWx1ZSxcbiAgICB9KSwgW1xuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgIF0pO1xuICAgIC8vIFJlbmRlci10aW1lIHNuYXBzaG90IOKAlCBrZXB0IGZvciB0aGUgVXNlRm9ybUNvcmVSZXR1cm4gY29udHJhY3QuIFJlYWN0aXZlXG4gICAgLy8gY29uc3VtZXJzIG11c3QgZ28gdGhyb3VnaCB0aGUgc3RvcmUsIG5ldmVyIHRocm91Z2ggdGhlc2UgZmllbGRzLlxuICAgIGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZXM6IHN0YXRlLnZhbHVlcyxcbiAgICAgICAgZXJyb3JzOiBzdGF0ZS5lcnJvcnMsXG4gICAgICAgIHdhcm5pbmdzOiBzdGF0ZS53YXJuaW5ncyxcbiAgICAgICAgdG91Y2hlZDogc3RhdGUudG91Y2hlZCxcbiAgICAgICAgLy8gTGl2ZSByZWdpc3RyeSDigJQgc3RhYmxlIGlkZW50aXR5LCBtdXRhdGVkIGluIHBsYWNlIGJ5IHJlZ2lzdGVyL3VucmVnaXN0ZXIuXG4gICAgICAgIGZpZWxkUnVsZXM6IGZpZWxkUnVsZXNSZWYuY3VycmVudCxcbiAgICAgICAgZ2V0RmllbGRSdWxlcyxcbiAgICAgICAgZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSxcbiAgICAgICAgc2V0UnVsZUNvbnRleHRJbnN0YW5jZSxcbiAgICAgICAgYmVnaW5WYWxpZGF0aW9uUnVuLFxuICAgICAgICBpc1ZhbGlkYXRpb25SdW5DdXJyZW50LFxuICAgICAgICBpbnZhbGlkYXRlVmFsaWRhdGlvblJ1bnMsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgIHNldEZpZWxkRXJyb3IsXG4gICAgICAgIHNldEZpZWxkV2FybmluZyxcbiAgICAgICAgc2V0RmllbGRzVmFsdWUsXG4gICAgICAgIGdldEZpZWxkVmFsdWUsXG4gICAgICAgIGdldEZpZWxkc1ZhbHVlOiBnZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkLFxuICAgICAgICByZXRhaW5GaWVsZCxcbiAgICAgICAgcmVsZWFzZUZpZWxkLFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICAgICAgcmVzZXRGaWVsZHMsXG4gICAgICAgIGZvcm1JbnN0YW5jZSxcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIGdldEluaXRpYWxWYWx1ZXM6ICgpID0+IG1vdW50SW5pdGlhbFZhbHVlcyxcbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IHVzZUZvcm1Db3JlOyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=