@1money/component-ui 0.0.71 → 0.0.74

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 (103) hide show
  1. package/es/components/ProForm/ProForm.d.ts +10 -2
  2. package/es/components/ProForm/ProForm.js +241 -55
  3. package/es/components/ProForm/ProFormDependency.d.ts +11 -2
  4. package/es/components/ProForm/ProFormDependency.js +29 -133
  5. package/es/components/ProForm/ProFormItem.js +146 -52
  6. package/es/components/ProForm/ProFormList.js +114 -62
  7. package/es/components/ProForm/SchemaForm.d.ts +7 -0
  8. package/es/components/ProForm/SchemaForm.js +103 -0
  9. package/es/components/ProForm/Submitter.js +26 -5
  10. package/es/components/ProForm/context.d.ts +30 -3
  11. package/es/components/ProForm/context.js +69 -10
  12. package/es/components/ProForm/core/constants.d.ts +12 -3
  13. package/es/components/ProForm/core/constants.js +18 -7
  14. package/es/components/ProForm/core/formStore.d.ts +24 -0
  15. package/es/components/ProForm/core/formStore.js +101 -0
  16. package/es/components/ProForm/core/hooks/useForm.d.ts +4 -1
  17. package/es/components/ProForm/core/hooks/useForm.js +336 -212
  18. package/es/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
  19. package/es/components/ProForm/core/hooks/useFormCore.js +151 -93
  20. package/es/components/ProForm/core/interface.d.ts +33 -12
  21. package/es/components/ProForm/core/runRules.d.ts +20 -8
  22. package/es/components/ProForm/core/runRules.js +105 -50
  23. package/es/components/ProForm/core/useFormItem.d.ts +10 -1
  24. package/es/components/ProForm/core/useFormItem.js +141 -56
  25. package/es/components/ProForm/fields/ProFormDatePicker.js +4 -1
  26. package/es/components/ProForm/fields/ProFormFieldSet.js +20 -7
  27. package/es/components/ProForm/fields/createProFormField.js +61 -32
  28. package/es/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
  29. package/es/components/ProForm/hooks/useFieldRequest.js +54 -9
  30. package/es/components/ProForm/hooks/useUrlSync.d.ts +16 -0
  31. package/es/components/ProForm/hooks/useUrlSync.js +170 -0
  32. package/es/components/ProForm/index.d.ts +12 -5
  33. package/es/components/ProForm/index.js +7 -2
  34. package/es/components/ProForm/interface.d.ts +185 -28
  35. package/es/components/ProForm/layouts/DialogForm.d.ts +5 -1
  36. package/es/components/ProForm/layouts/DialogForm.js +18 -7
  37. package/es/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  38. package/es/components/ProForm/layouts/DrawerForm.js +17 -7
  39. package/es/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  40. package/es/components/ProForm/layouts/QueryFilter.js +47 -71
  41. package/es/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  42. package/es/components/ProForm/layouts/useOverlayForm.js +27 -8
  43. package/es/components/ProForm/style/ProForm.css +4 -4
  44. package/es/components/ProForm/utils.d.ts +12 -1
  45. package/es/components/ProForm/utils.js +101 -28
  46. package/es/components/ProTable/ProTable.js +3 -3
  47. package/es/components/Tooltip/style/Tooltip.css +1 -0
  48. package/es/index.css +1 -1
  49. package/es/index.d.ts +2 -2
  50. package/es/index.js +2 -2
  51. package/lib/components/ProForm/ProForm.d.ts +10 -2
  52. package/lib/components/ProForm/ProForm.js +239 -53
  53. package/lib/components/ProForm/ProFormDependency.d.ts +11 -2
  54. package/lib/components/ProForm/ProFormDependency.js +30 -135
  55. package/lib/components/ProForm/ProFormItem.js +143 -48
  56. package/lib/components/ProForm/ProFormList.js +112 -60
  57. package/lib/components/ProForm/SchemaForm.d.ts +7 -0
  58. package/lib/components/ProForm/SchemaForm.js +110 -0
  59. package/lib/components/ProForm/Submitter.js +26 -5
  60. package/lib/components/ProForm/context.d.ts +30 -3
  61. package/lib/components/ProForm/context.js +69 -10
  62. package/lib/components/ProForm/core/constants.d.ts +12 -3
  63. package/lib/components/ProForm/core/constants.js +19 -8
  64. package/lib/components/ProForm/core/formStore.d.ts +24 -0
  65. package/lib/components/ProForm/core/formStore.js +110 -0
  66. package/lib/components/ProForm/core/hooks/useForm.d.ts +4 -1
  67. package/lib/components/ProForm/core/hooks/useForm.js +336 -212
  68. package/lib/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
  69. package/lib/components/ProForm/core/hooks/useFormCore.js +150 -92
  70. package/lib/components/ProForm/core/interface.d.ts +33 -12
  71. package/lib/components/ProForm/core/runRules.d.ts +20 -8
  72. package/lib/components/ProForm/core/runRules.js +106 -50
  73. package/lib/components/ProForm/core/useFormItem.d.ts +10 -1
  74. package/lib/components/ProForm/core/useFormItem.js +138 -53
  75. package/lib/components/ProForm/fields/ProFormDatePicker.js +4 -1
  76. package/lib/components/ProForm/fields/ProFormFieldSet.js +19 -6
  77. package/lib/components/ProForm/fields/createProFormField.js +61 -32
  78. package/lib/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
  79. package/lib/components/ProForm/hooks/useFieldRequest.js +53 -8
  80. package/lib/components/ProForm/hooks/useUrlSync.d.ts +16 -0
  81. package/lib/components/ProForm/hooks/useUrlSync.js +178 -0
  82. package/lib/components/ProForm/index.d.ts +12 -5
  83. package/lib/components/ProForm/index.js +16 -1
  84. package/lib/components/ProForm/interface.d.ts +185 -28
  85. package/lib/components/ProForm/layouts/DialogForm.d.ts +5 -1
  86. package/lib/components/ProForm/layouts/DialogForm.js +18 -7
  87. package/lib/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  88. package/lib/components/ProForm/layouts/DrawerForm.js +17 -7
  89. package/lib/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  90. package/lib/components/ProForm/layouts/QueryFilter.js +46 -70
  91. package/lib/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  92. package/lib/components/ProForm/layouts/useOverlayForm.js +30 -8
  93. package/lib/components/ProForm/style/ProForm.css +4 -4
  94. package/lib/components/ProForm/utils.d.ts +12 -1
  95. package/lib/components/ProForm/utils.js +104 -28
  96. package/lib/components/ProTable/ProTable.js +3 -3
  97. package/lib/components/Tooltip/style/Tooltip.css +1 -0
  98. package/lib/index.css +1 -1
  99. package/lib/index.d.ts +2 -2
  100. package/lib/index.js +13 -1
  101. package/package.json +1 -1
  102. package/scripts/mcp-server/examples.generated.json +90 -0
  103. package/scripts/mcp-server/index.generated.json +1866 -212
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports["default"] = exports.ProFormItem = void 0;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
8
11
  var _jsxRuntime = require("react/jsx-runtime");
9
12
  var _react = _interopRequireWildcard(require("react"));
10
13
  var _Grid = require("../Grid");
@@ -13,6 +16,8 @@ var _classnames = _interopRequireWildcard(require("../../utils/classnames"));
13
16
  var _useFormItem2 = require("./core/useFormItem");
14
17
  var _constants = require("./core/constants");
15
18
  var _context = require("./context");
19
+ var _formStore = require("./core/formStore");
20
+ var _pathUtils = require("./core/pathUtils");
16
21
  var _constants2 = require("./constants");
17
22
  var _utils = require("./utils");
18
23
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
@@ -46,7 +51,9 @@ function renderByValueType(valueType, value, props) {
46
51
  return match ? match.label : String(value);
47
52
  }
48
53
  case 'date':
54
+ return value instanceof Date ? (0, _utils.formatDateByPattern)(value, _utils.DATE_FORMAT) : String(value);
49
55
  case 'dateTime':
56
+ return value instanceof Date ? (0, _utils.formatDateByPattern)(value, _utils.DATE_TIME_FORMAT) : String(value);
50
57
  case 'text':
51
58
  default:
52
59
  return String(value);
@@ -59,12 +66,18 @@ var ReadonlyChildBase = function ReadonlyChildBase(_ref) {
59
66
  convertValue = _ref.convertValue,
60
67
  readonlyRender = _ref.readonlyRender,
61
68
  emptyText = _ref.emptyText;
62
- var _useProFormContext = (0, _context.useProFormContext)(),
63
- values = _useProFormContext.values;
64
- var raw = name ? values[name] : undefined;
69
+ var store = (0, _context.useProFormStore)();
70
+ // Subscribe per-field; only a custom readonlyRender (which receives ALL
71
+ // values) needs to track the whole values object.
72
+ var _useStoreSelector = (0, _formStore.useStoreSelector)(store, function (state) {
73
+ return [name ? (0, _pathUtils.resolveValue)(state.values, name) : undefined, readonlyRender ? state.values : undefined];
74
+ }, _formStore.shallowEqualArrays),
75
+ _useStoreSelector2 = (0, _slicedToArray2["default"])(_useStoreSelector, 2),
76
+ raw = _useStoreSelector2[0],
77
+ allValues = _useStoreSelector2[1];
65
78
  var value = convertValue && name ? convertValue(raw, name) : raw;
66
79
  if (readonlyRender) {
67
- var node = readonlyRender(value, values);
80
+ var node = readonlyRender(value, allValues !== null && allValues !== void 0 ? allValues : store.getState().values);
68
81
  return (0, _jsxRuntime.jsx)("span", {
69
82
  children: node !== null && node !== void 0 ? node : emptyText
70
83
  });
@@ -86,14 +99,15 @@ var ReadonlyChild = /*#__PURE__*/(0, _react.memo)(ReadonlyChildBase);
86
99
  var ConvertValueChildBase = function ConvertValueChildBase(_ref2) {
87
100
  var name = _ref2.name,
88
101
  convertValue = _ref2.convertValue,
102
+ _ref2$valuePropName = _ref2.valuePropName,
103
+ valuePropName = _ref2$valuePropName === void 0 ? 'value' : _ref2$valuePropName,
89
104
  children = _ref2.children;
90
- var _useProFormContext2 = (0, _context.useProFormContext)(),
91
- values = _useProFormContext2.values;
92
- var raw = values[name];
93
- var converted = convertValue ? convertValue(raw, name) : raw;
94
- return /*#__PURE__*/_react["default"].cloneElement(children, {
95
- value: converted
105
+ var store = (0, _context.useProFormStore)();
106
+ var raw = (0, _formStore.useStoreSelector)(store, function (state) {
107
+ return (0, _pathUtils.resolveValue)(state.values, name);
96
108
  });
109
+ var converted = convertValue ? convertValue(raw, name) : raw;
110
+ return /*#__PURE__*/_react["default"].cloneElement(children, (0, _defineProperty2["default"])({}, valuePropName, converted));
97
111
  };
98
112
  ConvertValueChildBase.displayName = 'ProFormItemConvertValue';
99
113
  var ConvertValueChild = /*#__PURE__*/(0, _react.memo)(ConvertValueChildBase);
@@ -101,51 +115,118 @@ var ConvertValueChild = /*#__PURE__*/(0, _react.memo)(ConvertValueChildBase);
101
115
  // ProFormItem
102
116
  // ---------------------------------------------------------------------------
103
117
  var ProFormItemBase = function ProFormItemBase(props) {
104
- var children = props.children,
105
- name = props.name,
106
- label = props.label,
107
- description = props.description,
108
- rules = props.rules,
109
- required = props.required,
110
- feedback = props.feedback,
111
- validateStatus = props.validateStatus,
112
- _props$className = props.className,
113
- className = _props$className === void 0 ? '' : _props$className,
114
- _props$prefixCls = props.prefixCls,
115
- prefixCls = _props$prefixCls === void 0 ? 'form-item' : _props$prefixCls,
116
- hidden = props.hidden,
117
- transform = props.transform,
118
- convertValue = props.convertValue,
119
- valueType = props.valueType,
120
- readonlyRender = props.readonlyRender,
121
- colProps = props.colProps,
122
- modeProp = props.mode,
123
- _props$emptyText = props.emptyText,
124
- emptyText = _props$emptyText === void 0 ? EMPTY_TEXT_DEFAULT : _props$emptyText,
125
- valueEnum = props.valueEnum;
126
- var ctx = (0, _context.useProFormContext)();
118
+ var _a;
119
+ // Stable slice only — value/error reactivity lives in useFormItem's
120
+ // per-field subscription, so this shell never re-renders for siblings.
121
+ var ctx = (0, _context.useProFormStable)();
122
+ // Form-level `formItemProps` act as DEFAULTS; props explicitly set on the
123
+ // item win. JSX frequently passes `undefined` for unset props (e.g. the
124
+ // createProFormField pass-through), so only defined values may override.
125
+ var mergedProps = props;
126
+ if (ctx.formItemProps) {
127
+ var merged = Object.assign({}, ctx.formItemProps);
128
+ for (var _i = 0, _Object$keys = Object.keys(props); _i < _Object$keys.length; _i++) {
129
+ var key = _Object$keys[_i];
130
+ var value = props[key];
131
+ if (value !== undefined) merged[key] = value;
132
+ }
133
+ mergedProps = merged;
134
+ }
135
+ var _mergedProps = mergedProps,
136
+ children = _mergedProps.children,
137
+ name = _mergedProps.name,
138
+ label = _mergedProps.label,
139
+ description = _mergedProps.description,
140
+ rules = _mergedProps.rules,
141
+ required = _mergedProps.required,
142
+ feedback = _mergedProps.feedback,
143
+ validateStatus = _mergedProps.validateStatus,
144
+ _mergedProps$classNam = _mergedProps.className,
145
+ className = _mergedProps$classNam === void 0 ? '' : _mergedProps$classNam,
146
+ _mergedProps$prefixCl = _mergedProps.prefixCls,
147
+ prefixCls = _mergedProps$prefixCl === void 0 ? 'form-item' : _mergedProps$prefixCl,
148
+ hidden = _mergedProps.hidden,
149
+ transform = _mergedProps.transform,
150
+ convertValue = _mergedProps.convertValue,
151
+ valueType = _mergedProps.valueType,
152
+ readonlyRender = _mergedProps.readonlyRender,
153
+ colProps = _mergedProps.colProps,
154
+ modeProp = _mergedProps.mode,
155
+ _mergedProps$emptyTex = _mergedProps.emptyText,
156
+ emptyText = _mergedProps$emptyTex === void 0 ? EMPTY_TEXT_DEFAULT : _mergedProps$emptyTex,
157
+ valueEnum = _mergedProps.valueEnum,
158
+ valuePropName = _mergedProps.valuePropName,
159
+ validateDebounce = _mergedProps.validateDebounce;
127
160
  var mergedMode = modeProp !== null && modeProp !== void 0 ? modeProp : ctx.mode;
128
161
  var isReadonly = mergedMode === 'read';
129
162
  var _useFormItem = (0, _useFormItem2.useFormItem)({
130
163
  name: name,
131
164
  rules: rules,
132
165
  required: required,
133
- validateStatus: validateStatus
166
+ validateStatus: validateStatus,
167
+ valuePropName: valuePropName,
168
+ validateDebounce: validateDebounce
134
169
  }),
135
170
  fieldError = _useFormItem.fieldError,
171
+ fieldWarning = _useFormItem.fieldWarning,
136
172
  isRequired = _useFormItem.isRequired,
137
173
  size = _useFormItem.size,
138
174
  labelAlign = _useFormItem.labelAlign,
139
175
  requiredMark = _useFormItem.requiredMark,
140
176
  injectField = _useFormItem.injectField;
141
- // Register / unregister transform
142
- (0, _react.useEffect)(function () {
143
- if (!name || !transform) return;
177
+ // Register transform / valueType DURING render (idempotent ref writes, like
178
+ // registerField): consumers rendered later in the same pass — e.g. a
179
+ // Dependency reading formatted values — must already see them. Effects
180
+ // would register too late (after the whole tree rendered).
181
+ //
182
+ // Each instance tracks the {name, value} PAIR it registered. Removal is
183
+ // always performed with the pair's own name AND value: an item without a
184
+ // transform never touches a same-name sibling's registration, an unmount
185
+ // cleanup can't wipe a successor's (value-guarded), and a NAME change
186
+ // removes the old name's entry with the OLD value before the ref is
187
+ // overwritten (a live single-value ref would leak it).
188
+ var ownTransformRef = (0, _react.useRef)(null);
189
+ var ownValueTypeRef = (0, _react.useRef)(null);
190
+ var prevTransform = ownTransformRef.current;
191
+ if (prevTransform && (prevTransform.name !== name || !transform)) {
192
+ ctx.unregisterTransform(prevTransform.name, prevTransform.fn);
193
+ ownTransformRef.current = null;
194
+ }
195
+ if (name && transform) {
144
196
  ctx.registerTransform(name, transform);
197
+ ownTransformRef.current = {
198
+ name: name,
199
+ fn: transform
200
+ };
201
+ }
202
+ var prevValueType = ownValueTypeRef.current;
203
+ if (prevValueType && (prevValueType.name !== name || !valueType)) {
204
+ ctx.unregisterValueType(prevValueType.name, prevValueType.valueType);
205
+ ownValueTypeRef.current = null;
206
+ }
207
+ if (name && valueType) {
208
+ ctx.registerValueType(name, valueType);
209
+ ownValueTypeRef.current = {
210
+ name: name,
211
+ valueType: valueType
212
+ };
213
+ }
214
+ (0, _react.useEffect)(function () {
215
+ // RE-REGISTER in the body: StrictMode's mount→cleanup→re-run cycle and
216
+ // keyed remounts (old instance's cleanup runs AFTER the new render
217
+ // registered) both end with a cleanup having deleted the entry — the
218
+ // effect body must restore the latest registration.
219
+ var transformReg = ownTransformRef.current;
220
+ if (transformReg) ctx.registerTransform(transformReg.name, transformReg.fn);
221
+ var valueTypeReg = ownValueTypeRef.current;
222
+ if (valueTypeReg) ctx.registerValueType(valueTypeReg.name, valueTypeReg.valueType);
145
223
  return function () {
146
- ctx.unregisterTransform(name);
224
+ var t = ownTransformRef.current;
225
+ if (t) ctx.unregisterTransform(t.name, t.fn);
226
+ var v = ownValueTypeRef.current;
227
+ if (v) ctx.unregisterValueType(v.name, v.valueType);
147
228
  };
148
- }, [name, transform, ctx.registerTransform, ctx.unregisterTransform]);
229
+ }, [name, ctx.registerTransform, ctx.unregisterTransform, ctx.registerValueType, ctx.unregisterValueType]);
149
230
  if (hidden) return null;
150
231
  var controlChild;
151
232
  if (isReadonly) {
@@ -165,6 +246,7 @@ var ProFormItemBase = function ProFormItemBase(props) {
165
246
  controlChild = (0, _jsxRuntime.jsx)(ConvertValueChild, {
166
247
  name: name,
167
248
  convertValue: convertValue,
249
+ valuePropName: valuePropName,
168
250
  children: injected
169
251
  });
170
252
  } else {
@@ -172,13 +254,20 @@ var ProFormItemBase = function ProFormItemBase(props) {
172
254
  }
173
255
  }
174
256
  var classes = (0, _classnames["default"])(prefixCls);
257
+ // Form-level layout.itemGap overrides the size-class margin (inline style
258
+ // wins); itemGap=0 is meaningful.
259
+ var itemGap = (_a = ctx.layout) === null || _a === void 0 ? void 0 : _a.itemGap;
260
+ var gapStyle = itemGap !== undefined ? {
261
+ marginBottom: typeof itemGap === 'number' ? "".concat(itemGap, "px") : itemGap
262
+ } : undefined;
175
263
  var shell = (0, _jsxRuntime.jsxs)("div", {
176
- className: classes(undefined, (0, _classnames.joinCls)(size === 'small' && classes('small'), className)),
264
+ className: classes(undefined, (0, _classnames.joinCls)(classes(size), className)),
265
+ style: gapStyle,
177
266
  children: [label && (0, _jsxRuntime.jsxs)("div", {
178
267
  className: classes('label-wrapper', (0, _classnames.joinCls)(classes('label-wrapper-vertical'), labelAlign && classes("label-wrapper-".concat(labelAlign)))),
179
268
  children: [(0, _jsxRuntime.jsx)(_Typography.TypographyLabel, {
180
269
  as: "label",
181
- size: _constants.FORM_LABEL_SIZE,
270
+ size: _constants.FORM_LABEL_SIZES[size],
182
271
  color: _constants.FORM_LABEL_COLOR,
183
272
  className: classes('label'),
184
273
  children: label
@@ -197,7 +286,13 @@ var ProFormItemBase = function ProFormItemBase(props) {
197
286
  size: _constants.FORM_ERROR_SIZE,
198
287
  color: _constants.FORM_ERROR_COLOR,
199
288
  children: fieldError
200
- }), !fieldError && feedback && (0, _jsxRuntime.jsx)(_Typography.TypographyBody, {
289
+ }), !fieldError && fieldWarning && (0, _jsxRuntime.jsx)(_Typography.TypographyBody, {
290
+ as: "div",
291
+ className: classes('warning'),
292
+ size: _constants.FORM_WARNING_SIZE,
293
+ color: _constants.FORM_WARNING_COLOR,
294
+ children: fieldWarning
295
+ }), !fieldError && !fieldWarning && feedback && (0, _jsxRuntime.jsx)(_Typography.TypographyBody, {
201
296
  as: "div",
202
297
  className: classes('feedback'),
203
298
  size: _constants.FORM_FEEDBACK_SIZE,
@@ -207,12 +302,12 @@ var ProFormItemBase = function ProFormItemBase(props) {
207
302
  })]
208
303
  });
209
304
  if (ctx.grid) {
210
- var merged = Object.assign(Object.assign({}, ctx.colProps), colProps);
211
- var _merged$span = merged.span,
305
+ var _merged = Object.assign(Object.assign({}, ctx.colProps), colProps);
306
+ var _merged$span = _merged.span,
212
307
  span = _merged$span === void 0 ? _constants2.DEFAULT_COL_SPAN : _merged$span,
213
- sm = merged.sm,
214
- md = merged.md,
215
- lg = merged.lg;
308
+ sm = _merged.sm,
309
+ md = _merged.md,
310
+ lg = _merged.lg;
216
311
  return (0, _jsxRuntime.jsx)(_Grid.Col, {
217
312
  span: span,
218
313
  sm: sm,
@@ -226,4 +321,4 @@ var ProFormItemBase = function ProFormItemBase(props) {
226
321
  ProFormItemBase.displayName = 'ProFormItem';
227
322
  var ProFormItem = exports.ProFormItem = /*#__PURE__*/(0, _react.memo)(ProFormItemBase);
228
323
  var _default = exports["default"] = ProFormItem;
229
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtSXRlbS5qcyIsImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtSXRlbS50c3giXSwibmFtZXMiOlsiX2pzeFJ1bnRpbWUiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfR3JpZCIsIl9UeXBvZ3JhcGh5IiwiX2NsYXNzbmFtZXMiLCJfdXNlRm9ybUl0ZW0yIiwiX2NvbnN0YW50cyIsIl9jb250ZXh0IiwiX2NvbnN0YW50czIiLCJfdXRpbHMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJFTVBUWV9URVhUX0RFRkFVTFQiLCJyZW5kZXJCeVZhbHVlVHlwZSIsInZhbHVlVHlwZSIsInZhbHVlIiwicHJvcHMiLCJ1bmRlZmluZWQiLCJyZXBlYXQiLCJTdHJpbmciLCJsZW5ndGgiLCJudW0iLCJOdW1iZXIiLCJpc05hTiIsInRvTG9jYWxlU3RyaW5nIiwidmFsdWVFbnVtIiwib3B0aW9ucyIsInZhbHVlRW51bVRvT3B0aW9ucyIsIm1hdGNoIiwiZmluZCIsIm8iLCJsYWJlbCIsIlJlYWRvbmx5Q2hpbGRCYXNlIiwiX3JlZiIsIm5hbWUiLCJjb252ZXJ0VmFsdWUiLCJyZWFkb25seVJlbmRlciIsImVtcHR5VGV4dCIsIl91c2VQcm9Gb3JtQ29udGV4dCIsInVzZVByb0Zvcm1Db250ZXh0IiwidmFsdWVzIiwicmF3Iiwibm9kZSIsIl9qc3giLCJjaGlsZHJlbiIsInJlbmRlcmVkIiwiZGlzcGxheU5hbWUiLCJSZWFkb25seUNoaWxkIiwibWVtbyIsIkNvbnZlcnRWYWx1ZUNoaWxkQmFzZSIsIl9yZWYyIiwiX3VzZVByb0Zvcm1Db250ZXh0MiIsImNvbnZlcnRlZCIsIlJlYWN0IiwiY2xvbmVFbGVtZW50IiwiQ29udmVydFZhbHVlQ2hpbGQiLCJQcm9Gb3JtSXRlbUJhc2UiLCJkZXNjcmlwdGlvbiIsInJ1bGVzIiwicmVxdWlyZWQiLCJmZWVkYmFjayIsInZhbGlkYXRlU3RhdHVzIiwiX3Byb3BzJGNsYXNzTmFtZSIsImNsYXNzTmFtZSIsIl9wcm9wcyRwcmVmaXhDbHMiLCJwcmVmaXhDbHMiLCJoaWRkZW4iLCJ0cmFuc2Zvcm0iLCJjb2xQcm9wcyIsIm1vZGVQcm9wIiwibW9kZSIsIl9wcm9wcyRlbXB0eVRleHQiLCJjdHgiLCJtZXJnZWRNb2RlIiwiaXNSZWFkb25seSIsIl91c2VGb3JtSXRlbSIsInVzZUZvcm1JdGVtIiwiZmllbGRFcnJvciIsImlzUmVxdWlyZWQiLCJzaXplIiwibGFiZWxBbGlnbiIsInJlcXVpcmVkTWFyayIsImluamVjdEZpZWxkIiwidXNlRWZmZWN0IiwicmVnaXN0ZXJUcmFuc2Zvcm0iLCJ1bnJlZ2lzdGVyVHJhbnNmb3JtIiwiY29udHJvbENoaWxkIiwiaW5qZWN0ZWQiLCJpc1ZhbGlkRWxlbWVudCIsImNsYXNzZXMiLCJjbGFzc25hbWVzIiwic2hlbGwiLCJfanN4cyIsImpvaW5DbHMiLCJjb25jYXQiLCJUeXBvZ3JhcGh5TGFiZWwiLCJhcyIsIkZPUk1fTEFCRUxfU0laRSIsImNvbG9yIiwiRk9STV9MQUJFTF9DT0xPUiIsIlR5cG9ncmFwaHlCb2R5IiwiRk9STV9ERVNDUklQVElPTl9TSVpFIiwiRk9STV9ERVNDUklQVElPTl9DT0xPUiIsIkZPUk1fRVJST1JfU0laRSIsIkZPUk1fRVJST1JfQ09MT1IiLCJGT1JNX0ZFRURCQUNLX1NJWkUiLCJGT1JNX0ZFRURCQUNLX0NPTE9SIiwiZ3JpZCIsIm1lcmdlZCIsImFzc2lnbiIsIl9tZXJnZWQkc3BhbiIsInNwYW4iLCJERUZBVUxUX0NPTF9TUEFOIiwic20iLCJtZCIs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QUFFLEVBQUVBLEVBQUU7TUFBQXZFLFFBQUEsRUFBRytDO0lBQUssQ0FBQSxDQUFPO0VBQy9EO0VBRUEsT0FBT0EsS0FBSztBQUNkLENBQUM7QUFFRG5DLGVBQWUsQ0FBQ1YsV0FBVyxHQUFHLGFBQWE7QUFFcEMsSUFBTXVFLFdBQVcsR0FBQUMsT0FBQSxDQUFBRCxXQUFBLGdCQUFHLElBQUFyRSxXQUFJLEVBQUNRLGVBQWUsQ0FBQztBQUFDLElBQUErRCxRQUFBLEdBQUFELE9BQUEsY0FFbENELFdBQVciLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL1Byb0Zvcm1JdGVtLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCBSZWFjdCwgeyBtZW1vLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDb2wgfSBmcm9tICcuLi9HcmlkJztcbmltcG9ydCB7IFR5cG9ncmFwaHlCb2R5LCBUeXBvZ3JhcGh5TGFiZWwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5JztcbmltcG9ydCB7IGRlZmF1bHQgYXMgY2xhc3NuYW1lcywgam9pbkNscyB9IGZyb20gJy4uLy4uL3V0aWxzL2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRm9ybUl0ZW0gfSBmcm9tICcuL2NvcmUvdXNlRm9ybUl0ZW0nO1xuaW1wb3J0IHsgRk9STV9FUlJPUl9DT0xPUiwgRk9STV9FUlJPUl9TSVpFLCBGT1JNX0RFU0NSSVBUSU9OX0NPTE9SLCBGT1JNX0RFU0NSSVBUSU9OX1NJWkUsIEZPUk1fRkVFREJBQ0tfQ09MT1IsIEZPUk1fRkVFREJBQ0tfU0laRSwgRk9STV9MQUJFTF9DT0xPUiwgRk9STV9MQUJFTF9TSVpFLCB9IGZyb20gJy4vY29yZS9jb25zdGFudHMnO1xuaW1wb3J0IHsgdXNlUHJvRm9ybUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgREVGQVVMVF9DT0xfU1BBTiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbHVlRW51bVRvT3B0aW9ucyB9IGZyb20gJy4vdXRpbHMnO1xuY29uc3QgRU1QVFlfVEVYVF9ERUZBVUxUID0gJy0nO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZWFkLW1vZGUgcmVuZGVyaW5nIGZvciBlYWNoIHN1cHBvcnRlZCB2YWx1ZVR5cGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gcmVuZGVyQnlWYWx1ZVR5cGUodmFsdWVUeXBlLCB2YWx1ZSwgcHJvcHMpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIHN3aXRjaCAodmFsdWVUeXBlKSB7XG4gICAgICAgIGNhc2UgJ3Bhc3N3b3JkJzpcbiAgICAgICAgICAgIHJldHVybiAnKicucmVwZWF0KFN0cmluZyh2YWx1ZSkubGVuZ3RoKTtcbiAgICAgICAgY2FzZSAnc3dpdGNoJzpcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA/ICdPbicgOiAnT2ZmJztcbiAgICAgICAgY2FzZSAnZGlnaXQnOiB7XG4gICAgICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTihudW0pKVxuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIG51bS50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgIGNhc2UgJ3JhZGlvJzpcbiAgICAgICAgY2FzZSAndGFnJzoge1xuICAgICAgICAgICAgaWYgKCFwcm9wcy52YWx1ZUVudW0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdmFsdWVFbnVtVG9PcHRpb25zKHByb3BzLnZhbHVlRW51bSk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IG9wdGlvbnMuZmluZCgobykgPT4gU3RyaW5nKG8udmFsdWUpID09PSBTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaCA/IG1hdGNoLmxhYmVsIDogU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgY2FzZSAnZGF0ZVRpbWUnOlxuICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbn1cbmNvbnN0IFJlYWRvbmx5Q2hpbGRCYXNlID0gKHsgbmFtZSwgdmFsdWVUeXBlLCB2YWx1ZUVudW0sIGNvbnZlcnRWYWx1ZSwgcmVhZG9ubHlSZW5kZXIsIGVtcHR5VGV4dCwgfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWVzIH0gPSB1c2VQcm9Gb3JtQ29udGV4dCgpO1xuICAgIGNvbnN0IHJhdyA9IG5hbWUgPyB2YWx1ZXNbbmFtZV0gOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdmFsdWUgPSBjb252ZXJ0VmFsdWUgJiYgbmFtZSA/IGNvbnZlcnRWYWx1ZShyYXcsIG5hbWUpIDogcmF3O1xuICAgIGlmIChyZWFkb25seVJlbmRlcikge1xuICAgICAgICBjb25zdCBub2RlID0gcmVhZG9ubHlSZW5kZXIodmFsdWUsIHZhbHVlcyk7XG4gICAgICAgIHJldHVybiBfanN4KFwic3BhblwiLCB7IGNoaWxkcmVuOiBub2RlICE9PSBudWxsICYmIG5vZGUgIT09IHZvaWQgMCA/IG5vZGUgOiBlbXB0eVRleHQgfSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICByZXR1cm4gX2pzeChcInNwYW5cIiwgeyBjaGlsZHJlbjogZW1wdHlUZXh0IH0pO1xuICAgIH1cbiAgICBjb25zdCByZW5kZXJlZCA9IHJlbmRlckJ5VmFsdWVUeXBlKHZhbHVlVHlwZSwgdmFsdWUsIHsgdmFsdWVFbnVtIH0pO1xuICAgIHJldHVybiBfanN4KFwic3BhblwiLCB7IGNoaWxkcmVuOiByZW5kZXJlZCAhPT0gbnVsbCAmJiByZW5kZXJlZCAhPT0gdm9pZCAwID8gcmVuZGVyZWQgOiBlbXB0eVRleHQgfSk7XG59O1xuUmVhZG9ubHlDaGlsZEJhc2UuZGlzcGxheU5hbWUgPSAnUHJvRm9ybUl0ZW1SZWFkb25seSc7XG5jb25zdCBSZWFkb25seUNoaWxkID0gbWVtbyhSZWFkb25seUNoaWxkQmFzZSk7XG5jb25zdCBDb252ZXJ0VmFsdWVDaGlsZEJhc2UgPSAoeyBuYW1lLCBjb252ZXJ0VmFsdWUsIGNoaWxkcmVuIH0pID0+IHtcbiAgICBjb25zdCB7IHZhbHVlcyB9ID0gdXNlUHJvRm9ybUNvbnRleHQoKTtcbiAgICBjb25zdCByYXcgPSB2YWx1ZXNbbmFtZV07XG4gICAgY29uc3QgY29udmVydGVkID0gY29udmVydFZhbHVlID8gY29udmVydFZhbHVlKHJhdywgbmFtZSkgOiByYXc7XG4gICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgeyB2YWx1ZTogY29udmVydGVkIH0pO1xufTtcbkNvbnZlcnRWYWx1ZUNoaWxkQmFzZS5kaXNwbGF5TmFtZSA9ICdQcm9Gb3JtSXRlbUNvbnZlcnRWYWx1ZSc7XG5jb25zdCBDb252ZXJ0VmFsdWVDaGlsZCA9IG1lbW8oQ29udmVydFZhbHVlQ2hpbGRCYXNlKTtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHJvRm9ybUl0ZW1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuY29uc3QgUHJvRm9ybUl0ZW1CYXNlID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBjaGlsZHJlbiwgbmFtZSwgbGFiZWwsIGRlc2NyaXB0aW9uLCBydWxlcywgcmVxdWlyZWQsIGZlZWRiYWNrLCB2YWxpZGF0ZVN0YXR1cywgY2xhc3NOYW1lID0gJycsIHByZWZpeENscyA9ICdmb3JtLWl0ZW0nLCBoaWRkZW4sIHRyYW5zZm9ybSwgY29udmVydFZhbHVlLCB2YWx1ZVR5cGUsIHJlYWRvbmx5UmVuZGVyLCBjb2xQcm9wcywgbW9kZTogbW9kZVByb3AsIGVtcHR5VGV4dCA9IEVNUFRZX1RFWFRfREVGQVVMVCwgdmFsdWVFbnVtLCB9ID0gcHJvcHM7XG4gICAgY29uc3QgY3R4ID0gdXNlUHJvRm9ybUNvbnRleHQoKTtcbiAgICBjb25zdCBtZXJnZWRNb2RlID0gbW9kZVByb3AgIT09IG51bGwgJiYgbW9kZVByb3AgIT09IHZvaWQgMCA/IG1vZGVQcm9wIDogY3R4Lm1vZGU7XG4gICAgY29uc3QgaXNSZWFkb25seSA9IG1lcmdlZE1vZGUgPT09ICdyZWFkJztcbiAgICBjb25zdCB7IGZpZWxkRXJyb3IsIGlzUmVxdWlyZWQsIHNpemUsIGxhYmVsQWxpZ24sIHJlcXVpcmVkTWFyaywgaW5qZWN0RmllbGQsIH0gPSB1c2VGb3JtSXRlbSh7IG5hbWUsIHJ1bGVzLCByZXF1aXJlZCwgdmFsaWRhdGVTdGF0dXMgfSk7XG4gICAgLy8gUmVnaXN0ZXIgLyB1bnJlZ2lzdGVyIHRyYW5zZm9ybVxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghbmFtZSB8fCAhdHJhbnNmb3JtKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjdHgucmVnaXN0ZXJUcmFuc2Zvcm0obmFtZSwgdHJhbnNmb3JtKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGN0eC51bnJlZ2lzdGVyVHJhbnNmb3JtKG5hbWUpO1xuICAgICAgICB9O1xuICAgIH0sIFtuYW1lLCB0cmFuc2Zvcm0sIGN0eC5yZWdpc3RlclRyYW5zZm9ybSwgY3R4LnVucmVnaXN0ZXJUcmFuc2Zvcm1dKTtcbiAgICBpZiAoaGlkZGVuKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBsZXQgY29udHJvbENoaWxkO1xuICAgIGlmIChpc1JlYWRvbmx5KSB7XG4gICAgICAgIGNvbnRyb2xDaGlsZCA9IChfanN4KFJlYWRvbmx5Q2hpbGQsIHsgbmFtZTogbmFtZSwgdmFsdWVUeXBlOiB2YWx1ZVR5cGUsIHZhbHVlRW51bTogdmFsdWVFbnVtLCBjb252ZXJ0VmFsdWU6IGNvbnZlcnRWYWx1ZSwgcmVhZG9ubHlSZW5kZXI6IHJlYWRvbmx5UmVuZGVyLCBlbXB0eVRleHQ6IGVtcHR5VGV4dCB9KSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBJbmplY3QgZmlyc3Qgc28gdGhlIHJlYWwgZmllbGQgcmVjZWl2ZXMgdmFsdWUvb25DaGFuZ2Uvb25CbHVyLFxuICAgICAgICAvLyB0aGVuIG9wdGlvbmFsbHkgd3JhcCBpbiBDb252ZXJ0VmFsdWVDaGlsZCB0byBvdmVycmlkZSB0aGUgZGlzcGxheWVkIHZhbHVlLlxuICAgICAgICBjb25zdCBpbmplY3RlZCA9IGluamVjdEZpZWxkKGNoaWxkcmVuKTtcbiAgICAgICAgaWYgKGNvbnZlcnRWYWx1ZSAmJiBuYW1lICYmIFJlYWN0LmlzVmFsaWRFbGVtZW50KGluamVjdGVkKSkge1xuICAgICAgICAgICAgY29udHJvbENoaWxkID0gKF9qc3goQ29udmVydFZhbHVlQ2hpbGQsIHsgbmFtZTogbmFtZSwgY29udmVydFZhbHVlOiBjb252ZXJ0VmFsdWUsIGNoaWxkcmVuOiBpbmplY3RlZCB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb250cm9sQ2hpbGQgPSBpbmplY3RlZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NuYW1lcyhwcmVmaXhDbHMpO1xuICAgIGNvbnN0IHNoZWxsID0gKF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKHVuZGVmaW5lZCwgam9pbkNscyhzaXplID09PSAnc21hbGwnICYmIGNsYXNzZXMoJ3NtYWxsJyksIGNsYXNzTmFtZSkpLCBjaGlsZHJlbjogW2xhYmVsICYmIChfanN4cyhcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnbGFiZWwtd3JhcHBlcicsIGpvaW5DbHMoY2xhc3NlcygnbGFiZWwtd3JhcHBlci12ZXJ0aWNhbCcpLCBsYWJlbEFsaWduICYmIGNsYXNzZXMoYGxhYmVsLXdyYXBwZXItJHtsYWJlbEFsaWdufWApKSksIGNoaWxkcmVuOiBbX2pzeChUeXBvZ3JhcGh5TGFiZWwsIHsgYXM6IFwibGFiZWxcIiwgc2l6ZTogRk9STV9MQUJFTF9TSVpFLCBjb2xvcjogRk9STV9MQUJFTF9DT0xPUiwgY2xhc3NOYW1lOiBjbGFzc2VzKCdsYWJlbCcpLCBjaGlsZHJlbjogbGFiZWwgfSksIGRlc2NyaXB0aW9uICYmIChfanN4KFR5cG9ncmFwaHlCb2R5LCB7IGFzOiBcImRpdlwiLCBjbGFzc05hbWU6IGNsYXNzZXMoJ2Rlc2NyaXB0aW9uJyksIHNpemU6IEZPUk1fREVTQ1JJUFRJT05fU0laRSwgY29sb3I6IEZPUk1fREVTQ1JJUFRJT05fQ09MT1IsIGNoaWxkcmVuOiBkZXNjcmlwdGlvbiB9KSldIH0pKSwgX2pzeHMoXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2NvbnRyb2wnKSwgY2hpbGRyZW46IFtjb250cm9sQ2hpbGQsIGZpZWxkRXJyb3IgJiYgKF9qc3goVHlwb2dyYXBoeUJvZHksIHsgYXM6IFwiZGl2XCIsIGNsYXNzTmFtZTogY2xhc3NlcygnZXJyb3InKSwgc2l6ZTogRk9STV9FUlJPUl9TSVpFLCBjb2xvcjogRk9STV9FUlJPUl9DT0xPUiwgY2hpbGRyZW46IGZpZWxkRXJyb3IgfSkpLCAhZmllbGRFcnJvciAmJiBmZWVkYmFjayAmJiAoX2pzeChUeXBvZ3JhcGh5Qm9keSwgeyBhczogXCJkaXZcIiwgY2xhc3NOYW1lOiBjbGFzc2VzKCdmZWVkYmFjaycpLCBzaXplOiBGT1JNX0ZFRURCQUNLX1NJWkUsIGNvbG9yOiBGT1JNX0ZFRURCQUNLX0NPTE9SLCBjaGlsZHJlbjogZmVlZGJhY2sgfSkpXSB9KV0gfSkpO1xuICAgIGlmIChjdHguZ3JpZCkge1xuICAgICAgICBjb25zdCBtZXJnZWQgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN0eC5jb2xQcm9wcyksIGNvbFByb3BzKTtcbiAgICAgICAgY29uc3QgeyBzcGFuID0gREVGQVVMVF9DT0xfU1BBTiwgc20sIG1kLCBsZyB9ID0gbWVyZ2VkO1xuICAgICAgICByZXR1cm4gX2pzeChDb2wsIHsgc3Bhbjogc3Bhbiwgc206IHNtLCBtZDogbWQsIGxnOiBsZywgY2hpbGRyZW46IHNoZWxsIH0pO1xuICAgIH1cbiAgICByZXR1cm4gc2hlbGw7XG59O1xuUHJvRm9ybUl0ZW1CYXNlLmRpc3BsYXlOYW1lID0gJ1Byb0Zvcm1JdGVtJztcbmV4cG9ydCBjb25zdCBQcm9Gb3JtSXRlbSA9IG1lbW8oUHJvRm9ybUl0ZW1CYXNlKTtcbmV4cG9ydCBkZWZhdWx0IFByb0Zvcm1JdGVtOyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
324
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtSXRlbS5qcyIsImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtSXRlbS50c3giXSwibmFtZXMiOlsiX2pzeFJ1bnRpbWUiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfR3JpZCIsIl9UeXBvZ3JhcGh5IiwiX2NsYXNzbmFtZXMiLCJfdXNlRm9ybUl0ZW0yIiwiX2NvbnN0YW50cyIsIl9jb250ZXh0IiwiX2Zvcm1TdG9yZSIsIl9wYXRoVXRpbHMiLCJfY29uc3RhbnRzMiIsIl91dGlscyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIkVNUFRZX1RFWFRfREVGQVVMVCIsInJlbmRlckJ5VmFsdWVUeXBlIiwidmFsdWVUeXBlIiwidmFsdWUiLCJwcm9wcyIsInVuZGVmaW5lZCIsInJlcGVhdCIsIlN0cmluZyIsImxlbmd0aCIsIm51bSIsIk51bWJlciIsImlzTmFOIiwidG9Mb2NhbGVTdHJpbmciLCJ2YWx1ZUVudW0iLCJvcHRpb25zIiwidmFsdWVFbnVtVG9PcHRpb25zIiwibWF0Y2giLCJmaW5kIiwibyIsImxhYmVsIiwiRGF0ZSIsImZvcm1hdERhdGVCeVBhdHRlcm4iLCJEQVRFX0ZPUk1BVCIsIkRBVEVfVElNRV9GT1JNQVQiLCJSZWFkb25seUNoaWxkQmFzZSIsIl9yZWYiLCJuYW1lIiwiY29udmVydFZhbHVlIiwicmVhZG9ubHlSZW5kZXIiLCJlbXB0eVRleHQiLCJzdG9yZSIsInVzZVByb0Zvcm1TdG9yZSIsIl91c2VTdG9yZVNlbGVjdG9yIiwidXNlU3RvcmVTZWxlY3RvciIsInN0YXRlIiwicmVzb2x2ZVZhbHVlIiwidmFsdWVzIiwic2hhbGxvd0VxdWFsQXJyYXlzIiwiX3VzZVN0b3JlU2VsZWN0b3IyIiwiX3NsaWNlZFRvQXJyYXkyIiwicmF3IiwiYWxsVmFsdWVzIiwibm9kZSIsImdldFN0YXRlIiwiX2pzeCIsImNoaWxkcmVuIiwicmVuZGVyZWQiLCJkaXNwbGF5TmFtZSIsIlJlYWRvbmx5Q2hpbGQiLCJtZW1vIiwiQ29udmVydFZhbHVlQ2hpbGRCYXNlIiwiX3JlZjIiLCJfcmVmMiR2YWx1ZVByb3BOYW1lIiwidmFsdWVQcm9wTmFtZSIsImNvbnZlcnRlZCIsIlJlYWN0IiwiY2xvbmVFbGVtZW50IiwiX2RlZmluZVByb3BlcnR5MiIsIkNvbnZlcnRWYWx1ZUNoaWxkIiwiUHJvRm9ybUl0ZW1CYXNlIiwiX2EiLCJjdHgiLCJ1c2VQcm9Gb3JtU3RhYmxlIiwibWVyZ2VkUHJvcHMiLCJmb3JtSXRlbVByb3BzIiwibWVyZ2VkIiwiYXNzaWduIiwiX2kiLCJfT2JqZWN0JGtleXMiLCJrZXlzIiwia2V5IiwiX21lcmdlZFByb3BzIiwiZGVzY3JpcHRpb24iLCJydWxlcyIsInJlcXVpcmVkIiwiZmVlZGJhY2siLCJ2YWxpZGF0ZVN0YXR1cyIsIl9tZXJnZWRQcm9wcyRjbGFzc05hbSIsImNsYXNzTmFtZSIsIl9tZXJnZWRQcm9wcyRwcmVmaXhDbCIsInByZWZpeENscyIsImhpZGRlbiIsInRyYW5zZm9ybSIsImNvbFByb3BzIiwibW9kZVByb3AiLCJtb2RlIiwiX21lcmdlZFByb3BzJGVtcHR5VGV4IiwidmFsaWRhdGVEZWJvdW5jZSIsIm1lcmdlZE1vZGUiLCJpc1JlYWRvbmx5IiwiX3VzZUZvcm1JdGVtIiwidXNlRm9ybUl0ZW0iLCJmaWVsZEVycm9yIiwiZmllbGRXYXJuaW5nIiwiaXNSZXF1aXJlZCIsInNpemUiLCJsYWJlbEFsaWduIiwicmVxdWlyZWRNYXJrIiwiaW5qZWN0RmllbGQiLCJvd25UcmFuc2Zvcm1SZWYiLCJ1c2VSZWYiLCJvd25WYWx1ZVR5cGVSZWYiLCJwcmV2VHJhbnNmb3JtIiwiY3VycmVudCIsInVucmVnaXN0ZXJUcmFuc2Zvcm0iLCJmbiIsInJlZ2lzdGVyVHJhbnNmb3JtIiwicHJldlZhbHVlVHlwZSIsInVucmVnaXN0ZXJWYWx1ZVR5cGUiLCJyZWdpc3RlclZhbHVlVHlwZSIsInVzZUVmZmVjdCIsInRyYW5zZm9ybVJlZyIsInZhbHVlVHlwZVJlZyIsInYiLCJjb250cm9sQ2hpbGQiLCJpbmplY3RlZCIsImlzVmFsaWRFbGVtZW50IiwiY2xhc3NlcyIsImNsYXNzbmFtZXMiLCJpdGVtR2FwIiwibGF5b3V0IiwiZ2FwU3R5bGUiLCJtYXJnaW5Cb3R0b20iLCJjb25jYXQiLCJzaGVsbCIsIl9qc3hzIiwiam9pbkNscyIsInN0eWxlIiwiVHlwb2dyYXBoeUxhYmVsIiwiYXMiLCJGT1JNX0xBQkVMX1NJWkVTIiwiY29sb3IiLCJGT1JNX0xBQkVMX0NPTE9SIiwiVHlwb2dyYXBoeUJvZHkiLCJGT1JNX0RFU0NSSVBUSU9OX1NJWkUiLCJGT1JNX0RFU0NSSVBUSU9OX0NPTE9SIiwiRk9STV9FUlJPUl9TSVpFIiwiRk9STV9FUlJPUl9DT0xPUiIsIkZPUk1fV0FSTklOR19TSVpFIiwiRk9STV9XQVJOSU5HX0NPTE9SIiwiRk9STV9GRUVEQkFDS19TSVpFIiwiRk9STV9GRUVEQkFDS19DT0xPUiIsImdyaWQiLCJfbWVyZ2VkJHNwYW4iLCJzcGFuIiwiREVGQVVMVF9DT0xfU1BBTiIsInNtIiwibWQiLCJsZyIsIkNvbCIsIlByb0Zvcm1JdGVtIiwiZXhwb3J0cyIsIl9kZWZhdWx0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsSUFBQUEsV0FBQSxHQUFBQyxPQUFBO0FDQUEsSUFBQUMsTUFBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQUcsS0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksV0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssV0FBQSxHQUFBSCx1QkFBQSxDQUFBRixPQUFBO0FBQ0Es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LEdBQUcsQ0FBQ2lGLElBQUksRUFBRTtJQUNaLElBQU03RSxPQUFNLEdBQUF6RSxNQUFBLENBQUEwRSxNQUFBLENBQUExRSxNQUFBLENBQUEwRSxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQVFMLEdBQUcsQ0FBQ3NCLFFBQVEsQ0FBQSxFQUFLQSxRQUFRLENBQUU7SUFDL0MsSUFBQTRELFlBQUEsR0FBZ0Q5RSxPQUFNLENBQTlDK0UsSUFBSTtNQUFKQSxJQUFJLEdBQUFELFlBQUEsY0FBR0UsNEJBQWdCLEdBQUFGLFlBQUE7TUFBRUcsRUFBRSxHQUFhakYsT0FBTSxDQUFyQmlGLEVBQUU7TUFBRUMsRUFBRSxHQUFTbEYsT0FBTSxDQUFqQmtGLEVBQUU7TUFBRUMsRUFBRSxHQUFLbkYsT0FBTSxDQUFibUYsRUFBRTtJQUMzQyxPQUFPLElBQUF4RyxlQUFBLEVBQUN5RyxTQUFHLEVBQUE7TUFBQ0wsSUFBSSxFQUFFQSxJQUFJO01BQUVFLEVBQUUsRUFBRUEsRUFBRTtNQUFFQyxFQUFFLEVBQUVBLEVBQUU7TUFBRUMsRUFBRSxFQUFFQSxFQUFFO01BQUF2RyxRQUFBLEVBQUcrRTtJQUFLLENBQUEsQ0FBTztFQUMvRDtFQUVBLE9BQU9BLEtBQUs7QUFDZCxDQUFDO0FBRURqRSxlQUFlLENBQUNaLFdBQVcsR0FBRyxhQUFhO0FBRXBDLElBQU11RyxXQUFXLEdBQUFDLE9BQUEsQ0FBQUQsV0FBQSxnQkFBRyxJQUFBckcsV0FBSSxFQUFDVSxlQUFlLENBQUM7QUFBQyxJQUFBNkYsUUFBQSxHQUFBRCxPQUFBLGNBRWxDRCxXQUFXIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtSXRlbS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgUmVhY3QsIHsgbWVtbywgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDb2wgfSBmcm9tICcuLi9HcmlkJztcbmltcG9ydCB7IFR5cG9ncmFwaHlCb2R5LCBUeXBvZ3JhcGh5TGFiZWwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5JztcbmltcG9ydCB7IGRlZmF1bHQgYXMgY2xhc3NuYW1lcywgam9pbkNscyB9IGZyb20gJy4uLy4uL3V0aWxzL2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRm9ybUl0ZW0gfSBmcm9tICcuL2NvcmUvdXNlRm9ybUl0ZW0nO1xuaW1wb3J0IHsgRk9STV9FUlJPUl9DT0xPUiwgRk9STV9FUlJPUl9TSVpFLCBGT1JNX1dBUk5JTkdfQ09MT1IsIEZPUk1fV0FSTklOR19TSVpFLCBGT1JNX0RFU0NSSVBUSU9OX0NPTE9SLCBGT1JNX0RFU0NSSVBUSU9OX1NJWkUsIEZPUk1fRkVFREJBQ0tfQ09MT1IsIEZPUk1fRkVFREJBQ0tfU0laRSwgRk9STV9MQUJFTF9DT0xPUiwgRk9STV9MQUJFTF9TSVpFUywgfSBmcm9tICcuL2NvcmUvY29uc3RhbnRzJztcbmltcG9ydCB7IHVzZVByb0Zvcm1TdGFibGUsIHVzZVByb0Zvcm1TdG9yZSB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyB1c2VTdG9yZVNlbGVjdG9yLCBzaGFsbG93RXF1YWxBcnJheXMgfSBmcm9tICcuL2NvcmUvZm9ybVN0b3JlJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJy4vY29yZS9wYXRoVXRpbHMnO1xuaW1wb3J0IHsgREVGQVVMVF9DT0xfU1BBTiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbHVlRW51bVRvT3B0aW9ucywgZm9ybWF0RGF0ZUJ5UGF0dGVybiwgREFURV9GT1JNQVQsIERBVEVfVElNRV9GT1JNQVQgfSBmcm9tICcuL3V0aWxzJztcbmNvbnN0IEVNUFRZX1RFWFRfREVGQVVMVCA9ICctJztcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVhZC1tb2RlIHJlbmRlcmluZyBmb3IgZWFjaCBzdXBwb3J0ZWQgdmFsdWVUeXBlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHJlbmRlckJ5VmFsdWVUeXBlKHZhbHVlVHlwZSwgdmFsdWUsIHByb3BzKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgICBjYXNlICdwYXNzd29yZCc6XG4gICAgICAgICAgICByZXR1cm4gJyonLnJlcGVhdChTdHJpbmcodmFsdWUpLmxlbmd0aCk7XG4gICAgICAgIGNhc2UgJ3N3aXRjaCc6XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPyAnT24nIDogJ09mZic7XG4gICAgICAgIGNhc2UgJ2RpZ2l0Jzoge1xuICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4obnVtKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBudW0udG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICBjYXNlICdyYWRpbyc6XG4gICAgICAgIGNhc2UgJ3RhZyc6IHtcbiAgICAgICAgICAgIGlmICghcHJvcHMudmFsdWVFbnVtKVxuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHZhbHVlRW51bVRvT3B0aW9ucyhwcm9wcy52YWx1ZUVudW0pO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBvcHRpb25zLmZpbmQoKG8pID0+IFN0cmluZyhvLnZhbHVlKSA9PT0gU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaC5sYWJlbCA6IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gZm9ybWF0RGF0ZUJ5UGF0dGVybih2YWx1ZSwgREFURV9GT1JNQVQpIDogU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgY2FzZSAnZGF0ZVRpbWUnOlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IGZvcm1hdERhdGVCeVBhdHRlcm4odmFsdWUsIERBVEVfVElNRV9GT1JNQVQpIDogU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG59XG5jb25zdCBSZWFkb25seUNoaWxkQmFzZSA9ICh7IG5hbWUsIHZhbHVlVHlwZSwgdmFsdWVFbnVtLCBjb252ZXJ0VmFsdWUsIHJlYWRvbmx5UmVuZGVyLCBlbXB0eVRleHQsIH0pID0+IHtcbiAgICBjb25zdCBzdG9yZSA9IHVzZVByb0Zvcm1TdG9yZSgpO1xuICAgIC8vIFN1YnNjcmliZSBwZXItZmllbGQ7IG9ubHkgYSBjdXN0b20gcmVhZG9ubHlSZW5kZXIgKHdoaWNoIHJlY2VpdmVzIEFMTFxuICAgIC8vIHZhbHVlcykgbmVlZHMgdG8gdHJhY2sgdGhlIHdob2xlIHZhbHVlcyBvYmplY3QuXG4gICAgY29uc3QgW3JhdywgYWxsVmFsdWVzXSA9IHVzZVN0b3JlU2VsZWN0b3Ioc3RvcmUsIChzdGF0ZSkgPT4gW1xuICAgICAgICBuYW1lID8gcmVzb2x2ZVZhbHVlKHN0YXRlLnZhbHVlcywgbmFtZSkgOiB1bmRlZmluZWQsXG4gICAgICAgIHJlYWRvbmx5UmVuZGVyID8gc3RhdGUudmFsdWVzIDogdW5kZWZpbmVkLFxuICAgIF0sIHNoYWxsb3dFcXVhbEFycmF5cyk7XG4gICAgY29uc3QgdmFsdWUgPSBjb252ZXJ0VmFsdWUgJiYgbmFtZSA/IGNvbnZlcnRWYWx1ZShyYXcsIG5hbWUpIDogcmF3O1xuICAgIGlmIChyZWFkb25seVJlbmRlcikge1xuICAgICAgICBjb25zdCBub2RlID0gcmVhZG9ubHlSZW5kZXIodmFsdWUsIGFsbFZhbHVlcyAhPT0gbnVsbCAmJiBhbGxWYWx1ZXMgIT09IHZvaWQgMCA/IGFsbFZhbHVlcyA6IHN0b3JlLmdldFN0YXRlKCkudmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIF9qc3goXCJzcGFuXCIsIHsgY2hpbGRyZW46IG5vZGUgIT09IG51bGwgJiYgbm9kZSAhPT0gdm9pZCAwID8gbm9kZSA6IGVtcHR5VGV4dCB9KTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiBfanN4KFwic3BhblwiLCB7IGNoaWxkcmVuOiBlbXB0eVRleHQgfSk7XG4gICAgfVxuICAgIGNvbnN0IHJlbmRlcmVkID0gcmVuZGVyQnlWYWx1ZVR5cGUodmFsdWVUeXBlLCB2YWx1ZSwgeyB2YWx1ZUVudW0gfSk7XG4gICAgcmV0dXJuIF9qc3goXCJzcGFuXCIsIHsgY2hpbGRyZW46IHJlbmRlcmVkICE9PSBudWxsICYmIHJlbmRlcmVkICE9PSB2b2lkIDAgPyByZW5kZXJlZCA6IGVtcHR5VGV4dCB9KTtcbn07XG5SZWFkb25seUNoaWxkQmFzZS5kaXNwbGF5TmFtZSA9ICdQcm9Gb3JtSXRlbVJlYWRvbmx5JztcbmNvbnN0IFJlYWRvbmx5Q2hpbGQgPSBtZW1vKFJlYWRvbmx5Q2hpbGRCYXNlKTtcbmNvbnN0IENvbnZlcnRWYWx1ZUNoaWxkQmFzZSA9ICh7IG5hbWUsIGNvbnZlcnRWYWx1ZSwgdmFsdWVQcm9wTmFtZSA9ICd2YWx1ZScsIGNoaWxkcmVuLCB9KSA9PiB7XG4gICAgY29uc3Qgc3RvcmUgPSB1c2VQcm9Gb3JtU3RvcmUoKTtcbiAgICBjb25zdCByYXcgPSB1c2VTdG9yZVNlbGVjdG9yKHN0b3JlLCAoc3RhdGUpID0+IHJlc29sdmVWYWx1ZShzdGF0ZS52YWx1ZXMsIG5hbWUpKTtcbiAgICBjb25zdCBjb252ZXJ0ZWQgPSBjb252ZXJ0VmFsdWUgPyBjb252ZXJ0VmFsdWUocmF3LCBuYW1lKSA6IHJhdztcbiAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7IFt2YWx1ZVByb3BOYW1lXTogY29udmVydGVkIH0pO1xufTtcbkNvbnZlcnRWYWx1ZUNoaWxkQmFzZS5kaXNwbGF5TmFtZSA9ICdQcm9Gb3JtSXRlbUNvbnZlcnRWYWx1ZSc7XG5jb25zdCBDb252ZXJ0VmFsdWVDaGlsZCA9IG1lbW8oQ29udmVydFZhbHVlQ2hpbGRCYXNlKTtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHJvRm9ybUl0ZW1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuY29uc3QgUHJvRm9ybUl0ZW1CYXNlID0gKHByb3BzKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIC8vIFN0YWJsZSBzbGljZSBvbmx5IOKAlCB2YWx1ZS9lcnJvciByZWFjdGl2aXR5IGxpdmVzIGluIHVzZUZvcm1JdGVtJ3NcbiAgICAvLyBwZXItZmllbGQgc3Vic2NyaXB0aW9uLCBzbyB0aGlzIHNoZWxsIG5ldmVyIHJlLXJlbmRlcnMgZm9yIHNpYmxpbmdzLlxuICAgIGNvbnN0IGN0eCA9IHVzZVByb0Zvcm1TdGFibGUoKTtcbiAgICAvLyBGb3JtLWxldmVsIGBmb3JtSXRlbVByb3BzYCBhY3QgYXMgREVGQVVMVFM7IHByb3BzIGV4cGxpY2l0bHkgc2V0IG9uIHRoZVxuICAgIC8vIGl0ZW0gd2luLiBKU1ggZnJlcXVlbnRseSBwYXNzZXMgYHVuZGVmaW5lZGAgZm9yIHVuc2V0IHByb3BzIChlLmcuIHRoZVxuICAgIC8vIGNyZWF0ZVByb0Zvcm1GaWVsZCBwYXNzLXRocm91Z2gpLCBzbyBvbmx5IGRlZmluZWQgdmFsdWVzIG1heSBvdmVycmlkZS5cbiAgICBsZXQgbWVyZ2VkUHJvcHMgPSBwcm9wcztcbiAgICBpZiAoY3R4LmZvcm1JdGVtUHJvcHMpIHtcbiAgICAgICAgY29uc3QgbWVyZ2VkID0gT2JqZWN0LmFzc2lnbih7fSwgY3R4LmZvcm1JdGVtUHJvcHMpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm9wcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJvcHNba2V5XTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIG1lcmdlZFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgbWVyZ2VkUHJvcHMgPSBtZXJnZWQ7XG4gICAgfVxuICAgIGNvbnN0IHsgY2hpbGRyZW4sIG5hbWUsIGxhYmVsLCBkZXNjcmlwdGlvbiwgcnVsZXMsIHJlcXVpcmVkLCBmZWVkYmFjaywgdmFsaWRhdGVTdGF0dXMsIGNsYXNzTmFtZSA9ICcnLCBwcmVmaXhDbHMgPSAnZm9ybS1pdGVtJywgaGlkZGVuLCB0cmFuc2Zvcm0sIGNvbnZlcnRWYWx1ZSwgdmFsdWVUeXBlLCByZWFkb25seVJlbmRlciwgY29sUHJvcHMsIG1vZGU6IG1vZGVQcm9wLCBlbXB0eVRleHQgPSBFTVBUWV9URVhUX0RFRkFVTFQsIHZhbHVlRW51bSwgdmFsdWVQcm9wTmFtZSwgdmFsaWRhdGVEZWJvdW5jZSwgfSA9IG1lcmdlZFByb3BzO1xuICAgIGNvbnN0IG1lcmdlZE1vZGUgPSBtb2RlUHJvcCAhPT0gbnVsbCAmJiBtb2RlUHJvcCAhPT0gdm9pZCAwID8gbW9kZVByb3AgOiBjdHgubW9kZTtcbiAgICBjb25zdCBpc1JlYWRvbmx5ID0gbWVyZ2VkTW9kZSA9PT0gJ3JlYWQnO1xuICAgIGNvbnN0IHsgZmllbGRFcnJvciwgZmllbGRXYXJuaW5nLCBpc1JlcXVpcmVkLCBzaXplLCBsYWJlbEFsaWduLCByZXF1aXJlZE1hcmssIGluamVjdEZpZWxkLCB9ID0gdXNlRm9ybUl0ZW0oeyBuYW1lLCBydWxlcywgcmVxdWlyZWQsIHZhbGlkYXRlU3RhdHVzLCB2YWx1ZVByb3BOYW1lLCB2YWxpZGF0ZURlYm91bmNlIH0pO1xuICAgIC8vIFJlZ2lzdGVyIHRyYW5zZm9ybSAvIHZhbHVlVHlwZSBEVVJJTkcgcmVuZGVyIChpZGVtcG90ZW50IHJlZiB3cml0ZXMsIGxpa2VcbiAgICAvLyByZWdpc3RlckZpZWxkKTogY29uc3VtZXJzIHJlbmRlcmVkIGxhdGVyIGluIHRoZSBzYW1lIHBhc3Mg4oCUIGUuZy4gYVxuICAgIC8vIERlcGVuZGVuY3kgcmVhZGluZyBmb3JtYXR0ZWQgdmFsdWVzIOKAlCBtdXN0IGFscmVhZHkgc2VlIHRoZW0uIEVmZmVjdHNcbiAgICAvLyB3b3VsZCByZWdpc3RlciB0b28gbGF0ZSAoYWZ0ZXIgdGhlIHdob2xlIHRyZWUgcmVuZGVyZWQpLlxuICAgIC8vXG4gICAgLy8gRWFjaCBpbnN0YW5jZSB0cmFja3MgdGhlIHtuYW1lLCB2YWx1ZX0gUEFJUiBpdCByZWdpc3RlcmVkLiBSZW1vdmFsIGlzXG4gICAgLy8gYWx3YXlzIHBlcmZvcm1lZCB3aXRoIHRoZSBwYWlyJ3Mgb3duIG5hbWUgQU5EIHZhbHVlOiBhbiBpdGVtIHdpdGhvdXQgYVxuICAgIC8vIHRyYW5zZm9ybSBuZXZlciB0b3VjaGVzIGEgc2FtZS1uYW1lIHNpYmxpbmcncyByZWdpc3RyYXRpb24sIGFuIHVubW91bnRcbiAgICAvLyBjbGVhbnVwIGNhbid0IHdpcGUgYSBzdWNjZXNzb3IncyAodmFsdWUtZ3VhcmRlZCksIGFuZCBhIE5BTUUgY2hhbmdlXG4gICAgLy8gcmVtb3ZlcyB0aGUgb2xkIG5hbWUncyBlbnRyeSB3aXRoIHRoZSBPTEQgdmFsdWUgYmVmb3JlIHRoZSByZWYgaXNcbiAgICAvLyBvdmVyd3JpdHRlbiAoYSBsaXZlIHNpbmdsZS12YWx1ZSByZWYgd291bGQgbGVhayBpdCkuXG4gICAgY29uc3Qgb3duVHJhbnNmb3JtUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IG93blZhbHVlVHlwZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBwcmV2VHJhbnNmb3JtID0gb3duVHJhbnNmb3JtUmVmLmN1cnJlbnQ7XG4gICAgaWYgKHByZXZUcmFuc2Zvcm0gJiYgKHByZXZUcmFuc2Zvcm0ubmFtZSAhPT0gbmFtZSB8fCAhdHJhbnNmb3JtKSkge1xuICAgICAgICBjdHgudW5yZWdpc3RlclRyYW5zZm9ybShwcmV2VHJhbnNmb3JtLm5hbWUsIHByZXZUcmFuc2Zvcm0uZm4pO1xuICAgICAgICBvd25UcmFuc2Zvcm1SZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICAgIGlmIChuYW1lICYmIHRyYW5zZm9ybSkge1xuICAgICAgICBjdHgucmVnaXN0ZXJUcmFuc2Zvcm0obmFtZSwgdHJhbnNmb3JtKTtcbiAgICAgICAgb3duVHJhbnNmb3JtUmVmLmN1cnJlbnQgPSB7IG5hbWUsIGZuOiB0cmFuc2Zvcm0gfTtcbiAgICB9XG4gICAgY29uc3QgcHJldlZhbHVlVHlwZSA9IG93blZhbHVlVHlwZVJlZi5jdXJyZW50O1xuICAgIGlmIChwcmV2VmFsdWVUeXBlICYmIChwcmV2VmFsdWVUeXBlLm5hbWUgIT09IG5hbWUgfHwgIXZhbHVlVHlwZSkpIHtcbiAgICAgICAgY3R4LnVucmVnaXN0ZXJWYWx1ZVR5cGUocHJldlZhbHVlVHlwZS5uYW1lLCBwcmV2VmFsdWVUeXBlLnZhbHVlVHlwZSk7XG4gICAgICAgIG93blZhbHVlVHlwZVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKG5hbWUgJiYgdmFsdWVUeXBlKSB7XG4gICAgICAgIGN0eC5yZWdpc3RlclZhbHVlVHlwZShuYW1lLCB2YWx1ZVR5cGUpO1xuICAgICAgICBvd25WYWx1ZVR5cGVSZWYuY3VycmVudCA9IHsgbmFtZSwgdmFsdWVUeXBlIH07XG4gICAgfVxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIC8vIFJFLVJFR0lTVEVSIGluIHRoZSBib2R5OiBTdHJpY3RNb2RlJ3MgbW91bnTihpJjbGVhbnVw4oaScmUtcnVuIGN5Y2xlIGFuZFxuICAgICAgICAvLyBrZXllZCByZW1vdW50cyAob2xkIGluc3RhbmNlJ3MgY2xlYW51cCBydW5zIEFGVEVSIHRoZSBuZXcgcmVuZGVyXG4gICAgICAgIC8vIHJlZ2lzdGVyZWQpIGJvdGggZW5kIHdpdGggYSBjbGVhbnVwIGhhdmluZyBkZWxldGVkIHRoZSBlbnRyeSDigJQgdGhlXG4gICAgICAgIC8vIGVmZmVjdCBib2R5IG11c3QgcmVzdG9yZSB0aGUgbGF0ZXN0IHJlZ2lzdHJhdGlvbi5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtUmVnID0gb3duVHJhbnNmb3JtUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICh0cmFuc2Zvcm1SZWcpXG4gICAgICAgICAgICBjdHgucmVnaXN0ZXJUcmFuc2Zvcm0odHJhbnNmb3JtUmVnLm5hbWUsIHRyYW5zZm9ybVJlZy5mbik7XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZVJlZyA9IG93blZhbHVlVHlwZVJlZi5jdXJyZW50O1xuICAgICAgICBpZiAodmFsdWVUeXBlUmVnKVxuICAgICAgICAgICAgY3R4LnJlZ2lzdGVyVmFsdWVUeXBlKHZhbHVlVHlwZVJlZy5uYW1lLCB2YWx1ZVR5cGVSZWcudmFsdWVUeXBlKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBvd25UcmFuc2Zvcm1SZWYuY3VycmVudDtcbiAgICAgICAgICAgIGlmICh0KVxuICAgICAgICAgICAgICAgIGN0eC51bnJlZ2lzdGVyVHJhbnNmb3JtKHQubmFtZSwgdC5mbik7XG4gICAgICAgICAgICBjb25zdCB2ID0gb3duVmFsdWVUeXBlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICBpZiAodilcbiAgICAgICAgICAgICAgICBjdHgudW5yZWdpc3RlclZhbHVlVHlwZSh2Lm5hbWUsIHYudmFsdWVUeXBlKTtcbiAgICAgICAgfTtcbiAgICB9LCBbbmFtZSwgY3R4LnJlZ2lzdGVyVHJhbnNmb3JtLCBjdHgudW5yZWdpc3RlclRyYW5zZm9ybSwgY3R4LnJlZ2lzdGVyVmFsdWVUeXBlLCBjdHgudW5yZWdpc3RlclZhbHVlVHlwZV0pO1xuICAgIGlmIChoaWRkZW4pXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGxldCBjb250cm9sQ2hpbGQ7XG4gICAgaWYgKGlzUmVhZG9ubHkpIHtcbiAgICAgICAgY29udHJvbENoaWxkID0gKF9qc3goUmVhZG9ubHlDaGlsZCwgeyBuYW1lOiBuYW1lLCB2YWx1ZVR5cGU6IHZhbHVlVHlwZSwgdmFsdWVFbnVtOiB2YWx1ZUVudW0sIGNvbnZlcnRWYWx1ZTogY29udmVydFZhbHVlLCByZWFkb25seVJlbmRlcjogcmVhZG9ubHlSZW5kZXIsIGVtcHR5VGV4dDogZW1wdHlUZXh0IH0pKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIEluamVjdCBmaXJzdCBzbyB0aGUgcmVhbCBmaWVsZCByZWNlaXZlcyB2YWx1ZS9vbkNoYW5nZS9vbkJsdXIsXG4gICAgICAgIC8vIHRoZW4gb3B0aW9uYWxseSB3cmFwIGluIENvbnZlcnRWYWx1ZUNoaWxkIHRvIG92ZXJyaWRlIHRoZSBkaXNwbGF5ZWQgdmFsdWUuXG4gICAgICAgIGNvbnN0IGluamVjdGVkID0gaW5qZWN0RmllbGQoY2hpbGRyZW4pO1xuICAgICAgICBpZiAoY29udmVydFZhbHVlICYmIG5hbWUgJiYgUmVhY3QuaXNWYWxpZEVsZW1lbnQoaW5qZWN0ZWQpKSB7XG4gICAgICAgICAgICBjb250cm9sQ2hpbGQgPSAoX2pzeChDb252ZXJ0VmFsdWVDaGlsZCwgeyBuYW1lOiBuYW1lLCBjb252ZXJ0VmFsdWU6IGNvbnZlcnRWYWx1ZSwgdmFsdWVQcm9wTmFtZTogdmFsdWVQcm9wTmFtZSwgY2hpbGRyZW46IGluamVjdGVkIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRyb2xDaGlsZCA9IGluamVjdGVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzZXMgPSBjbGFzc25hbWVzKHByZWZpeENscyk7XG4gICAgLy8gRm9ybS1sZXZlbCBsYXlvdXQuaXRlbUdhcCBvdmVycmlkZXMgdGhlIHNpemUtY2xhc3MgbWFyZ2luIChpbmxpbmUgc3R5bGVcbiAgICAvLyB3aW5zKTsgaXRlbUdhcD0wIGlzIG1lYW5pbmdmdWwuXG4gICAgY29uc3QgaXRlbUdhcCA9IChfYSA9IGN0eC5sYXlvdXQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pdGVtR2FwO1xuICAgIGNvbnN0IGdhcFN0eWxlID0gaXRlbUdhcCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8geyBtYXJnaW5Cb3R0b206IHR5cGVvZiBpdGVtR2FwID09PSAnbnVtYmVyJyA/IGAke2l0ZW1HYXB9cHhgIDogaXRlbUdhcCB9XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNoZWxsID0gKF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKHVuZGVmaW5lZCwgam9pbkNscyhjbGFzc2VzKHNpemUpLCBjbGFzc05hbWUpKSwgc3R5bGU6IGdhcFN0eWxlLCBjaGlsZHJlbjogW2xhYmVsICYmIChfanN4cyhcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnbGFiZWwtd3JhcHBlcicsIGpvaW5DbHMoY2xhc3NlcygnbGFiZWwtd3JhcHBlci12ZXJ0aWNhbCcpLCBsYWJlbEFsaWduICYmIGNsYXNzZXMoYGxhYmVsLXdyYXBwZXItJHtsYWJlbEFsaWdufWApKSksIGNoaWxkcmVuOiBbX2pzeChUeXBvZ3JhcGh5TGFiZWwsIHsgYXM6IFwibGFiZWxcIiwgc2l6ZTogRk9STV9MQUJFTF9TSVpFU1tzaXplXSwgY29sb3I6IEZPUk1fTEFCRUxfQ09MT1IsIGNsYXNzTmFtZTogY2xhc3NlcygnbGFiZWwnKSwgY2hpbGRyZW46IGxhYmVsIH0pLCBkZXNjcmlwdGlvbiAmJiAoX2pzeChUeXBvZ3JhcGh5Qm9keSwgeyBhczogXCJkaXZcIiwgY2xhc3NOYW1lOiBjbGFzc2VzKCdkZXNjcmlwdGlvbicpLCBzaXplOiBGT1JNX0RFU0NSSVBUSU9OX1NJWkUsIGNvbG9yOiBGT1JNX0RFU0NSSVBUSU9OX0NPTE9SLCBjaGlsZHJlbjogZGVzY3JpcHRpb24gfSkpXSB9KSksIF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdjb250cm9sJyksIGNoaWxkcmVuOiBbY29udHJvbENoaWxkLCBmaWVsZEVycm9yICYmIChfanN4KFR5cG9ncmFwaHlCb2R5LCB7IGFzOiBcImRpdlwiLCBjbGFzc05hbWU6IGNsYXNzZXMoJ2Vycm9yJyksIHNpemU6IEZPUk1fRVJST1JfU0laRSwgY29sb3I6IEZPUk1fRVJST1JfQ09MT1IsIGNoaWxkcmVuOiBmaWVsZEVycm9yIH0pKSwgIWZpZWxkRXJyb3IgJiYgZmllbGRXYXJuaW5nICYmIChfanN4KFR5cG9ncmFwaHlCb2R5LCB7IGFzOiBcImRpdlwiLCBjbGFzc05hbWU6IGNsYXNzZXMoJ3dhcm5pbmcnKSwgc2l6ZTogRk9STV9XQVJOSU5HX1NJWkUsIGNvbG9yOiBGT1JNX1dBUk5JTkdfQ09MT1IsIGNoaWxkcmVuOiBmaWVsZFdhcm5pbmcgfSkpLCAhZmllbGRFcnJvciAmJiAhZmllbGRXYXJuaW5nICYmIGZlZWRiYWNrICYmIChfanN4KFR5cG9ncmFwaHlCb2R5LCB7IGFzOiBcImRpdlwiLCBjbGFzc05hbWU6IGNsYXNzZXMoJ2ZlZWRiYWNrJyksIHNpemU6IEZPUk1fRkVFREJBQ0tfU0laRSwgY29sb3I6IEZPUk1fRkVFREJBQ0tfQ09MT1IsIGNoaWxkcmVuOiBmZWVkYmFjayB9KSldIH0pXSB9KSk7XG4gICAgaWYgKGN0eC5ncmlkKSB7XG4gICAgICAgIGNvbnN0IG1lcmdlZCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY3R4LmNvbFByb3BzKSwgY29sUHJvcHMpO1xuICAgICAgICBjb25zdCB7IHNwYW4gPSBERUZBVUxUX0NPTF9TUEFOLCBzbSwgbWQsIGxnIH0gPSBtZXJnZWQ7XG4gICAgICAgIHJldHVybiBfanN4KENvbCwgeyBzcGFuOiBzcGFuLCBzbTogc20sIG1kOiBtZCwgbGc6IGxnLCBjaGlsZHJlbjogc2hlbGwgfSk7XG4gICAgfVxuICAgIHJldHVybiBzaGVsbDtcbn07XG5Qcm9Gb3JtSXRlbUJhc2UuZGlzcGxheU5hbWUgPSAnUHJvRm9ybUl0ZW0nO1xuZXhwb3J0IGNvbnN0IFByb0Zvcm1JdGVtID0gbWVtbyhQcm9Gb3JtSXRlbUJhc2UpO1xuZXhwb3J0IGRlZmF1bHQgUHJvRm9ybUl0ZW07IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9