@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.
- package/es/components/ProForm/ProForm.d.ts +1 -1
- package/es/components/ProForm/ProForm.js +2 -3
- package/es/components/ProForm/ProFormDependency.d.ts +2 -1
- package/es/components/ProForm/ProFormDependency.js +1 -1
- package/es/components/ProForm/ProFormItem.d.ts +7 -2
- package/es/components/ProForm/ProFormItem.js +1 -1
- package/es/components/ProForm/ProFormList.d.ts +6 -1
- package/es/components/ProForm/ProFormList.js +13 -5
- package/es/components/ProForm/SchemaForm.d.ts +1 -1
- package/es/components/ProForm/SchemaForm.js +8 -5
- package/es/components/ProForm/context.d.ts +8 -7
- package/es/components/ProForm/context.js +1 -1
- package/es/components/ProForm/core/constants.d.ts +1 -1
- package/es/components/ProForm/core/constants.js +2 -2
- package/es/components/ProForm/core/formStore.d.ts +4 -4
- package/es/components/ProForm/core/formStore.js +1 -1
- package/es/components/ProForm/core/hooks/useForm.d.ts +1 -1
- package/es/components/ProForm/core/hooks/useForm.js +34 -9
- package/es/components/ProForm/core/hooks/useFormCore.d.ts +2 -2
- package/es/components/ProForm/core/hooks/useFormCore.js +17 -123
- package/es/components/ProForm/core/interface.d.ts +70 -91
- package/es/components/ProForm/core/namePathType.d.ts +25 -0
- package/es/components/ProForm/core/namePathType.js +2 -0
- package/es/components/ProForm/core/pathUtils.d.ts +5 -3
- package/es/components/ProForm/core/pathUtils.js +19 -1
- package/es/components/ProForm/core/runRules.d.ts +8 -17
- package/es/components/ProForm/core/runRules.js +22 -129
- package/es/components/ProForm/core/useFormItem.d.ts +1 -1
- package/es/components/ProForm/core/useFormItem.js +14 -66
- package/es/components/ProForm/core/validationError.d.ts +2 -2
- package/es/components/ProForm/core/validationError.js +1 -1
- package/es/components/ProForm/fields/ProFormCheckbox.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormCheckboxGroup.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormCheckboxGroup.js +1 -1
- package/es/components/ProForm/fields/ProFormDatePicker.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormDatePicker.js +1 -1
- package/es/components/ProForm/fields/ProFormFieldSet.d.ts +7 -2
- package/es/components/ProForm/fields/ProFormFieldSet.js +5 -7
- package/es/components/ProForm/fields/ProFormPassword.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormRadioGroup.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormRadioGroup.js +1 -1
- package/es/components/ProForm/fields/ProFormSelect.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormSelect.js +1 -1
- package/es/components/ProForm/fields/ProFormSlider.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormSwitch.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormText.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormTextArea.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormUpload.d.ts +1 -1
- package/es/components/ProForm/fields/ProFormUpload.js +1 -1
- package/es/components/ProForm/fields/createProFormField.d.ts +8 -2
- package/es/components/ProForm/fields/createProFormField.js +3 -3
- package/es/components/ProForm/hooks/useFieldRequest.d.ts +1 -1
- package/es/components/ProForm/hooks/useFieldRequest.js +1 -1
- package/es/components/ProForm/hooks/useUrlSync.d.ts +8 -7
- package/es/components/ProForm/hooks/useUrlSync.js +1 -1
- package/es/components/ProForm/index.d.ts +35 -26
- package/es/components/ProForm/index.js +1 -1
- package/es/components/ProForm/interface.d.ts +96 -91
- package/es/components/ProForm/layouts/DialogForm.d.ts +1 -1
- package/es/components/ProForm/layouts/DialogForm.js +1 -1
- package/es/components/ProForm/layouts/DrawerForm.d.ts +1 -1
- package/es/components/ProForm/layouts/DrawerForm.js +1 -1
- package/es/components/ProForm/layouts/QueryFilter.d.ts +1 -1
- package/es/components/ProForm/layouts/QueryFilter.js +1 -1
- package/es/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
- package/es/components/ProForm/layouts/useOverlayForm.js +1 -1
- package/es/components/ProForm/utils.d.ts +8 -8
- package/es/components/ProForm/utils.js +1 -1
- package/es/index.css +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/lib/components/ProForm/ProForm.d.ts +1 -1
- package/lib/components/ProForm/ProForm.js +2 -3
- package/lib/components/ProForm/ProFormDependency.d.ts +2 -1
- package/lib/components/ProForm/ProFormDependency.js +1 -1
- package/lib/components/ProForm/ProFormItem.d.ts +7 -2
- package/lib/components/ProForm/ProFormItem.js +1 -1
- package/lib/components/ProForm/ProFormList.d.ts +6 -1
- package/lib/components/ProForm/ProFormList.js +13 -5
- package/lib/components/ProForm/SchemaForm.d.ts +1 -1
- package/lib/components/ProForm/SchemaForm.js +8 -5
- package/lib/components/ProForm/context.d.ts +8 -7
- package/lib/components/ProForm/context.js +1 -1
- package/lib/components/ProForm/core/constants.d.ts +1 -1
- package/lib/components/ProForm/core/constants.js +2 -2
- package/lib/components/ProForm/core/formStore.d.ts +4 -4
- package/lib/components/ProForm/core/formStore.js +1 -1
- package/lib/components/ProForm/core/hooks/useForm.d.ts +1 -1
- package/lib/components/ProForm/core/hooks/useForm.js +34 -9
- package/lib/components/ProForm/core/hooks/useFormCore.d.ts +2 -2
- package/lib/components/ProForm/core/hooks/useFormCore.js +16 -122
- package/lib/components/ProForm/core/interface.d.ts +70 -91
- package/lib/components/ProForm/core/namePathType.d.ts +25 -0
- package/lib/components/ProForm/core/namePathType.js +6 -0
- package/lib/components/ProForm/core/pathUtils.d.ts +5 -3
- package/lib/components/ProForm/core/pathUtils.js +20 -1
- package/lib/components/ProForm/core/runRules.d.ts +8 -17
- package/lib/components/ProForm/core/runRules.js +22 -130
- package/lib/components/ProForm/core/useFormItem.d.ts +1 -1
- package/lib/components/ProForm/core/useFormItem.js +17 -69
- package/lib/components/ProForm/core/validationError.d.ts +2 -2
- package/lib/components/ProForm/core/validationError.js +1 -1
- package/lib/components/ProForm/fields/ProFormCheckbox.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormCheckboxGroup.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormCheckboxGroup.js +1 -1
- package/lib/components/ProForm/fields/ProFormDatePicker.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormDatePicker.js +1 -1
- package/lib/components/ProForm/fields/ProFormFieldSet.d.ts +7 -2
- package/lib/components/ProForm/fields/ProFormFieldSet.js +5 -7
- package/lib/components/ProForm/fields/ProFormPassword.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormRadioGroup.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormRadioGroup.js +1 -1
- package/lib/components/ProForm/fields/ProFormSelect.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormSelect.js +1 -1
- package/lib/components/ProForm/fields/ProFormSlider.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormSwitch.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormText.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormTextArea.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormUpload.d.ts +1 -1
- package/lib/components/ProForm/fields/ProFormUpload.js +1 -1
- package/lib/components/ProForm/fields/createProFormField.d.ts +8 -2
- package/lib/components/ProForm/fields/createProFormField.js +3 -3
- package/lib/components/ProForm/hooks/useFieldRequest.d.ts +1 -1
- package/lib/components/ProForm/hooks/useFieldRequest.js +1 -1
- package/lib/components/ProForm/hooks/useUrlSync.d.ts +8 -7
- package/lib/components/ProForm/hooks/useUrlSync.js +1 -1
- package/lib/components/ProForm/index.d.ts +35 -26
- package/lib/components/ProForm/index.js +1 -1
- package/lib/components/ProForm/interface.d.ts +96 -91
- package/lib/components/ProForm/layouts/DialogForm.d.ts +1 -1
- package/lib/components/ProForm/layouts/DialogForm.js +1 -1
- package/lib/components/ProForm/layouts/DrawerForm.d.ts +1 -1
- package/lib/components/ProForm/layouts/DrawerForm.js +1 -1
- package/lib/components/ProForm/layouts/QueryFilter.d.ts +1 -1
- package/lib/components/ProForm/layouts/QueryFilter.js +1 -1
- package/lib/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
- package/lib/components/ProForm/layouts/useOverlayForm.js +1 -1
- package/lib/components/ProForm/utils.d.ts +8 -8
- package/lib/components/ProForm/utils.js +1 -1
- package/lib/index.css +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server/examples.generated.json +53 -17
- package/scripts/mcp-server/index.generated.json +1734 -160
|
@@ -11,14 +11,11 @@ var _react = require("react");
|
|
|
11
11
|
var _useEventCallback = _interopRequireDefault(require("@1money/hooks/useEventCallback"));
|
|
12
12
|
var _useMemoizedFn = _interopRequireDefault(require("@1money/hooks/useMemoizedFn"));
|
|
13
13
|
var _pathUtils = require("../pathUtils");
|
|
14
|
-
var _runRules = require("../runRules");
|
|
15
14
|
var _formStore = require("../formStore");
|
|
16
15
|
var useFormCore = exports.useFormCore = function useFormCore() {
|
|
17
16
|
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
18
17
|
var _config$initialValues = config.initialValues,
|
|
19
18
|
initialValues = _config$initialValues === void 0 ? {} : _config$initialValues,
|
|
20
|
-
onFinish = config.onFinish,
|
|
21
|
-
onFinishFailed = config.onFinishFailed,
|
|
22
19
|
onValuesChange = config.onValuesChange,
|
|
23
20
|
onReset = config.onReset,
|
|
24
21
|
_config$size = config.size,
|
|
@@ -174,92 +171,6 @@ var useFormCore = exports.useFormCore = function useFormCore() {
|
|
|
174
171
|
fieldMountCountsRef.current[name] = count;
|
|
175
172
|
}
|
|
176
173
|
});
|
|
177
|
-
var validateField = (0, _useMemoizedFn["default"])(function (name) {
|
|
178
|
-
var rules = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
179
|
-
var providedValue = arguments.length > 2 ? arguments[2] : undefined;
|
|
180
|
-
// A sync run commits immediately, so it is always current — bumping the
|
|
181
|
-
// epoch here SUPERSEDES any in-flight async run for this field.
|
|
182
|
-
beginValidationRun(name);
|
|
183
|
-
var currentValues = store.getState().values;
|
|
184
|
-
var value = providedValue !== undefined ? providedValue : (0, _pathUtils.resolveValue)(currentValues, name);
|
|
185
|
-
var _runRulesSync = (0, _runRules.runRulesSync)(name, value, currentValues, rules, ruleContextInstanceRef.current),
|
|
186
|
-
error = _runRulesSync.error,
|
|
187
|
-
warning = _runRulesSync.warning;
|
|
188
|
-
setFieldWarning(name, warning);
|
|
189
|
-
if (error !== null) {
|
|
190
|
-
setFieldError(name, error);
|
|
191
|
-
return false;
|
|
192
|
-
}
|
|
193
|
-
if (store.getState().errors[name]) {
|
|
194
|
-
setFieldError(name, null);
|
|
195
|
-
}
|
|
196
|
-
return true;
|
|
197
|
-
});
|
|
198
|
-
var validateFields = (0, _useMemoizedFn["default"])(function () {
|
|
199
|
-
var fieldsRulesToValidate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : fieldRulesRef.current;
|
|
200
|
-
var isValid = true;
|
|
201
|
-
Object.keys(fieldsRulesToValidate).forEach(function (name) {
|
|
202
|
-
var rules = fieldsRulesToValidate[name];
|
|
203
|
-
if (!validateField(name, rules)) {
|
|
204
|
-
isValid = false;
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
return isValid;
|
|
208
|
-
});
|
|
209
|
-
var handleSubmitInternal = (0, _useMemoizedFn["default"])(function () {
|
|
210
|
-
var state = store.getState();
|
|
211
|
-
var currentValues = state.values;
|
|
212
|
-
var currentRules = fieldRulesRef.current;
|
|
213
|
-
var hasErrors = false;
|
|
214
|
-
var failedErrors = {};
|
|
215
|
-
// MERGE over the current maps: only fields in the rule registry are
|
|
216
|
-
// re-decided — a manually-set error on a field without rules survives.
|
|
217
|
-
var newErrors = Object.assign({}, state.errors);
|
|
218
|
-
var newWarnings = Object.assign({}, state.warnings);
|
|
219
|
-
Object.keys(currentRules).forEach(function (fieldName) {
|
|
220
|
-
beginValidationRun(fieldName);
|
|
221
|
-
var value = (0, _pathUtils.resolveValue)(currentValues, fieldName);
|
|
222
|
-
var _runRulesSync2 = (0, _runRules.runRulesSync)(fieldName, value, currentValues, currentRules[fieldName], ruleContextInstanceRef.current),
|
|
223
|
-
error = _runRulesSync2.error,
|
|
224
|
-
warning = _runRulesSync2.warning;
|
|
225
|
-
if (error !== null) {
|
|
226
|
-
newErrors[fieldName] = error;
|
|
227
|
-
failedErrors[fieldName] = error;
|
|
228
|
-
hasErrors = true;
|
|
229
|
-
} else {
|
|
230
|
-
delete newErrors[fieldName];
|
|
231
|
-
}
|
|
232
|
-
if (warning !== null) {
|
|
233
|
-
newWarnings[fieldName] = warning;
|
|
234
|
-
} else {
|
|
235
|
-
delete newWarnings[fieldName];
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
store.setState({
|
|
239
|
-
errors: newErrors,
|
|
240
|
-
warnings: newWarnings
|
|
241
|
-
});
|
|
242
|
-
if (!hasErrors) {
|
|
243
|
-
onFinish === null || onFinish === void 0 ? void 0 : onFinish(currentValues);
|
|
244
|
-
return {
|
|
245
|
-
success: true,
|
|
246
|
-
values: currentValues
|
|
247
|
-
};
|
|
248
|
-
} else {
|
|
249
|
-
onFinishFailed === null || onFinishFailed === void 0 ? void 0 : onFinishFailed({
|
|
250
|
-
values: currentValues,
|
|
251
|
-
errors: failedErrors
|
|
252
|
-
});
|
|
253
|
-
return {
|
|
254
|
-
success: false,
|
|
255
|
-
errors: failedErrors
|
|
256
|
-
};
|
|
257
|
-
}
|
|
258
|
-
});
|
|
259
|
-
var handleSubmit = (0, _useEventCallback["default"])(function (e) {
|
|
260
|
-
e === null || e === void 0 ? void 0 : e.preventDefault();
|
|
261
|
-
return handleSubmitInternal();
|
|
262
|
-
});
|
|
263
174
|
// Pure state API: the imperative resetFields()
|
|
264
175
|
// never fires onReset. The callback belongs to the reset ACTION layer
|
|
265
176
|
// (submitter button / native reset event), which fires it exactly once.
|
|
@@ -283,30 +194,36 @@ var useFormCore = exports.useFormCore = function useFormCore() {
|
|
|
283
194
|
var getFieldValue = (0, _useMemoizedFn["default"])(function (name) {
|
|
284
195
|
return (0, _pathUtils.resolveValue)(store.getState().values, name);
|
|
285
196
|
});
|
|
286
|
-
var getFieldsValue = (0, _useMemoizedFn["default"])(function () {
|
|
287
|
-
|
|
197
|
+
var getFieldsValue = (0, _useMemoizedFn["default"])(function (nameList) {
|
|
198
|
+
var values = store.getState().values;
|
|
199
|
+
if (!nameList) return values;
|
|
200
|
+
return nameList.reduce(function (acc, name) {
|
|
201
|
+
acc[name] = (0, _pathUtils.resolveValue)(values, name);
|
|
202
|
+
return acc;
|
|
203
|
+
}, {});
|
|
288
204
|
});
|
|
289
205
|
var setFieldsValue = (0, _useMemoizedFn["default"])(function (newValues) {
|
|
206
|
+
var valuesPatch = newValues;
|
|
290
207
|
var prev = store.getState().values;
|
|
291
208
|
var updatedValues;
|
|
292
|
-
if (Object.keys(
|
|
209
|
+
if (Object.keys(valuesPatch).some(function (key) {
|
|
293
210
|
return key.includes('.');
|
|
294
211
|
})) {
|
|
295
212
|
// Dot-path keys write into the NESTED structure (the setFieldValue
|
|
296
213
|
// contract) — a shallow merge would land them as literal top-level
|
|
297
214
|
// keys that the nested-aware readers never find.
|
|
298
215
|
updatedValues = prev;
|
|
299
|
-
for (var _i = 0, _Object$entries = Object.entries(
|
|
216
|
+
for (var _i = 0, _Object$entries = Object.entries(valuesPatch); _i < _Object$entries.length; _i++) {
|
|
300
217
|
var _Object$entries$_i = (0, _slicedToArray2["default"])(_Object$entries[_i], 2),
|
|
301
218
|
key = _Object$entries$_i[0],
|
|
302
219
|
value = _Object$entries$_i[1];
|
|
303
|
-
updatedValues = key.includes('.') ? (0, _pathUtils.setNestedValue)(updatedValues, key, value) :
|
|
220
|
+
updatedValues = key.includes('.') ? (0, _pathUtils.setNestedValue)(updatedValues, key, value) : (0, _pathUtils.mergeValuesPatch)(updatedValues, (0, _defineProperty2["default"])({}, key, value));
|
|
304
221
|
}
|
|
305
222
|
} else {
|
|
306
|
-
updatedValues =
|
|
223
|
+
updatedValues = (0, _pathUtils.mergeValuesPatch)(prev, valuesPatch);
|
|
307
224
|
}
|
|
308
225
|
commitValues(updatedValues);
|
|
309
|
-
onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(
|
|
226
|
+
onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(valuesPatch, updatedValues);
|
|
310
227
|
});
|
|
311
228
|
// Seed the rule-context instance with the core methods exactly once —
|
|
312
229
|
// useForm's richer instance must not be downgraded on later renders.
|
|
@@ -321,35 +238,16 @@ var useFormCore = exports.useFormCore = function useFormCore() {
|
|
|
321
238
|
}
|
|
322
239
|
var formInstance = (0, _react.useMemo)(function () {
|
|
323
240
|
return {
|
|
324
|
-
submit: handleSubmitInternal,
|
|
325
241
|
resetFields: resetFields,
|
|
326
242
|
getFieldValue: getFieldValue,
|
|
327
243
|
getFieldsValue: getFieldsValue,
|
|
328
244
|
setFieldsValue: setFieldsValue,
|
|
329
|
-
setFieldValue: setFieldValue
|
|
330
|
-
validateFields: validateFields
|
|
245
|
+
setFieldValue: setFieldValue
|
|
331
246
|
};
|
|
332
|
-
}, [
|
|
247
|
+
}, [resetFields, getFieldValue, getFieldsValue, setFieldsValue, setFieldValue]);
|
|
333
248
|
// Render-time snapshot — kept for the UseFormCoreReturn contract. Reactive
|
|
334
249
|
// consumers must go through the store, never through these fields.
|
|
335
250
|
var state = store.getState();
|
|
336
|
-
var coreContextShape = {
|
|
337
|
-
values: state.values,
|
|
338
|
-
errors: state.errors,
|
|
339
|
-
warnings: state.warnings,
|
|
340
|
-
touched: state.touched,
|
|
341
|
-
formInstance: formInstance,
|
|
342
|
-
setFieldValue: setFieldValue,
|
|
343
|
-
setFieldError: setFieldError,
|
|
344
|
-
setFieldWarning: setFieldWarning,
|
|
345
|
-
validateField: validateField,
|
|
346
|
-
registerField: registerField,
|
|
347
|
-
unregisterField: unregisterField,
|
|
348
|
-
size: size,
|
|
349
|
-
labelAlign: labelAlign,
|
|
350
|
-
disabled: disabled,
|
|
351
|
-
validateTrigger: validateTrigger
|
|
352
|
-
};
|
|
353
251
|
return {
|
|
354
252
|
values: state.values,
|
|
355
253
|
errors: state.errors,
|
|
@@ -369,17 +267,13 @@ var useFormCore = exports.useFormCore = function useFormCore() {
|
|
|
369
267
|
setFieldsValue: setFieldsValue,
|
|
370
268
|
getFieldValue: getFieldValue,
|
|
371
269
|
getFieldsValue: getFieldsValue,
|
|
372
|
-
validateField: validateField,
|
|
373
|
-
validateFields: validateFields,
|
|
374
270
|
registerField: registerField,
|
|
375
271
|
unregisterField: unregisterField,
|
|
376
272
|
retainField: retainField,
|
|
377
273
|
releaseField: releaseField,
|
|
378
|
-
handleSubmit: handleSubmit,
|
|
379
274
|
handleReset: handleReset,
|
|
380
275
|
resetFields: resetFields,
|
|
381
276
|
formInstance: formInstance,
|
|
382
|
-
coreContextShape: coreContextShape,
|
|
383
277
|
store: store,
|
|
384
278
|
getInitialValues: function getInitialValues() {
|
|
385
279
|
return mountInitialValues;
|
|
@@ -387,4 +281,4 @@ var useFormCore = exports.useFormCore = function useFormCore() {
|
|
|
387
281
|
};
|
|
388
282
|
};
|
|
389
283
|
var _default = exports["default"] = useFormCore;
|
|
390
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS50cyIsImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIl0sIm5hbWVzIjpbIl9yZWFjdCIsInJlcXVpcmUiLCJfdXNlRXZlbnRDYWxsYmFjayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXNlTWVtb2l6ZWRGbiIsIl9wYXRoVXRpbHMiLCJfcnVuUnVsZXMiLCJfZm9ybVN0b3JlIiwidXNlRm9ybUNvcmUiLCJleHBvcnRzIiwiY29uZmlnIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiX2NvbmZpZyRpbml0aWFsVmFsdWVzIiwiaW5pdGlhbFZhbHVlcyIsIm9uRmluaXNoIiwib25GaW5pc2hGYWlsZWQiLCJvblZhbHVlc0NoYW5nZSIsIm9uUmVzZXQiLCJfY29uZmlnJHNpemUiLCJzaXplIiwiX2NvbmZpZyRsYWJlbEFsaWduIiwibGFiZWxBbGlnbiIsIl9jb25maWckZGlzYWJsZWQiLCJkaXNhYmxlZCIsIl9jb25maWckdmFsaWRhdGVUcmlnZyIsInZhbGlkYXRlVHJpZ2dlciIsImluaXRpYWxWYWx1ZXNSZWYiLCJ1c2VSZWYiLCJjdXJyZW50IiwibW91bnRJbml0aWFsVmFsdWVzIiwic3RvcmVSZWYiLCJjcmVhdGVGb3JtU3RvcmUiLCJzdG9yZSIsImZpZWxkUnVsZXNSZWYiLCJ2YWxpZGF0aW9uRXBvY2hSZWYiLCJiZWdpblZhbGlkYXRpb25SdW4iLCJ1c2VNZW1vaXplZEZuIiwibmFtZSIsIm5leHQiLCJpc1ZhbGlkYXRpb25SdW5DdXJyZW50IiwiZXBvY2giLCJpbnZhbGlkYXRlVmFsaWRhdGlvblJ1bnMiLCJuYW1lcyIsImtleXMiLCJPYmplY3QiLCJmb3JFYWNoIiwia2V5IiwicnVsZUNvbnRleHRJbnN0YW5jZVJlZiIsInNldFJ1bGVDb250ZXh0SW5zdGFuY2UiLCJpbnN0YW5jZSIsImdldFJ1bGVDb250ZXh0SW5zdGFuY2UiLCJjb21taXRWYWx1ZXMiLCJuZXdWYWx1ZXMiLCJzZXRTdGF0ZSIsInZhbHVlcyIsInNldEZpZWxkVmFsdWUiLCJ2YWx1ZSIsInByZXYiLCJnZXRTdGF0ZSIsImluY2x1ZGVzIiwic2V0TmVzdGVkVmFsdWUiLCJhc3NpZ24iLCJfZGVmaW5lUHJvcGVydHkyIiwic2V0RmllbGRFcnJvciIsImVycm9yIiwiZXJyb3JzIiwibmV3RXJyb3JzIiwic2FtZVZhbGlkYXRpb25Ob2RlIiwic2V0RmllbGRXYXJuaW5nIiwid2FybmluZyIsIndhcm5pbmdzIiwibmV3V2FybmluZ3MiLCJmaWVsZE1vdW50Q291bnRzUmVmIiwiZmllbGRSZWdpc3RyYXRpb25Pd25lZFJlZiIsInJlZ2lzdGVyRmllbGQiLCJydWxlcyIsImdldEZpZWxkUnVsZXMiLCJ1bnJlZ2lzdGVyRmllbGQiLCJyZXRhaW5GaWVsZCIsInJlbGVhc2VGaWVsZCIsImNvdW50IiwidmFsaWRhdGVGaWVsZCIsInByb3ZpZGVkVmFsdWUiLCJjdXJyZW50VmFsdWVzIiwicmVzb2x2ZVZhbHVlIiwiX3J1blJ1bGVzU3luYyIsInJ1blJ1bGVzU3luYyIsInZhbGlkYXRlRmllbGRzIiwiZmllbGRzUnVsZXNUb1ZhbGlkYXRlIiwiaXNWYWxpZCIsImhhbmRsZVN1Ym1pdEludGVybmFsIiwic3RhdGUiLCJjdXJyZW50UnVsZXMiLCJoYXNFcnJvcnMiLCJmYWlsZWRFcnJvcnMiLCJmaWVsZE5hbWUiLCJfcnVuUnVsZXNTeW5jMiIsInN1Y2Nlc3MiLCJoYW5kbGVTdWJtaXQiLCJ1c2VFdmVudENhbGxiYWNrIiwiZSIsInByZXZlbnREZWZhdWx0IiwicmVzZXRGaWVsZHMiLCJ0b3VjaGVkIiwidmFsaWRhdGluZyIsImhhbmRsZVJlc2V0IiwiZ2V0RmllbGRWYWx1ZSIsImdldEZpZWxkc1ZhbHVlIiwic2V0RmllbGRzVmFsdWUiLCJ1cGRhdGVkVmFsdWVzIiwic29tZSIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsIl9zbGljZWRUb0FycmF5MiIsImZvcm1JbnN0YW5jZSIsInVzZU1lbW8iLCJzdWJtaXQiLCJjb3JlQ29udGV4dFNoYXBlIiwiZmllbGRSdWxlcyIsImdldEluaXRpYWxWYWx1ZXMiLCJfZGVmYXVsdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGNBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLFVBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFNBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFVBQUEsR0FBQU4sT0FBQTtBQVVPLElBQU1PLFdBQVcsR0FBQUMsT0FBQSxDQUFBRCxXQUFBLEdBQUcsU0FBZEEsV0FBV0EsQ0FBQSxFQUV1RTtFQUFBLElBRDdGRSxNQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUE0QixDQUFBLENBQUU7RUFFOUIsSUFBQUcscUJBQUEsR0FVSUosTUFBTSxDQVRSSyxhQUFhO0lBQWJBLGFBQWEsR0FBQUQscUJBQUEsY0FBRyxDQUFBLENBQUUsR0FBQUEscUJBQUE7SUFDbEJFLFFBQVEsR0FRTk4sTUFBTSxDQVJSTSxRQUFRO0lBQ1JDLGNBQWMsR0FPWlAsTUFBTSxDQVBSTyxjQUFjO0lBQ2RDLGNBQWMsR0FNWlIsTUFBTSxDQU5SUSxjQUFjO0lBQ2RDLE9BQU8sR0FLTFQsTUFBTSxDQUxSUyxPQUFPO0lBQUFDLFlBQUEsR0FLTFYsTUFBTSxDQUpSVyxJQUFJO0lBQUpBLElBQUksR0FBQUQsWUFBQSxjQUFHLE9BQU8sR0FBQUEsWUFBQTtJQUFBRSxrQkFBQSxHQUlaWixNQUFNLENBSFJhLFVBQVU7SUFBVkEsVUFBVSxHQUFBRCxrQkFBQSxjQUFHLE1BQU0sR0FBQUEsa0JBQUE7SUFBQUUsZ0JBQUEs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RyxlQUFlLEVBQWZBLGVBQWU7SUFDZkMsV0FBVyxFQUFYQSxXQUFXO0lBQ1hDLFlBQVksRUFBWkEsWUFBWTtJQUNabUIsWUFBWSxFQUFaQSxZQUFZO0lBQ1pPLFdBQVcsRUFBWEEsV0FBVztJQUNYSCxXQUFXLEVBQVhBLFdBQVc7SUFDWGMsWUFBWSxFQUFaQSxZQUFZO0lBQ1pHLGdCQUFnQixFQUFoQkEsZ0JBQWdCO0lBQ2hCdkYsS0FBSyxFQUFMQSxLQUFLO0lBQ0x5RixnQkFBZ0IsRUFBRSxTQUFsQkEsZ0JBQWdCQSxDQUFBO01BQUEsT0FBUTVGLGtCQUFrQjtJQUFBO0VDdEUxQyxDRHVFRDtBQUNILENBQUM7QUFBQyxJQUFBNkYsUUFBQSxHQUFBbkgsT0FBQSxjQUVhRCxXQUFXIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJpbXBvcnQgeyB1c2VNZW1vLCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnQDFtb25leS9ob29rcy91c2VNZW1vaXplZEZuJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSwgc2V0TmVzdGVkVmFsdWUgfSBmcm9tICcuLi9wYXRoVXRpbHMnO1xuaW1wb3J0IHsgcnVuUnVsZXNTeW5jIH0gZnJvbSAnLi4vcnVuUnVsZXMnO1xuaW1wb3J0IHsgY3JlYXRlRm9ybVN0b3JlLCBzYW1lVmFsaWRhdGlvbk5vZGUgfSBmcm9tICcuLi9mb3JtU3RvcmUnO1xuZXhwb3J0IGNvbnN0IHVzZUZvcm1Db3JlID0gKGNvbmZpZyA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBpbml0aWFsVmFsdWVzID0ge30sIG9uRmluaXNoLCBvbkZpbmlzaEZhaWxlZCwgb25WYWx1ZXNDaGFuZ2UsIG9uUmVzZXQsIHNpemUgPSAnbGFyZ2UnLCBsYWJlbEFsaWduID0gJ2xlZnQnLCBkaXNhYmxlZCA9IGZhbHNlLCB2YWxpZGF0ZVRyaWdnZXIgPSAnb25DaGFuZ2UnLCB9ID0gY29uZmlnO1xuICAgIC8vIGluaXRpYWxWYWx1ZXMgaXMgTU9VTlQtT05MWSAodGhlIGRvY3VtZW50ZWQgY29udHJhY3QpOiBmcmVlemUgdGhlIGZpcnN0XG4gICAgLy8gcmVuZGVyJ3MgdmFsdWUgc28gcmVzZXRGaWVsZHMgYWx3YXlzIHJlc3RvcmVzIHRoZSBtb3VudC10aW1lIGRlZmF1bHRzLFxuICAgIC8vIGV2ZW4gd2hlbiB0aGUgY29uc3VtZXIgcmUtcmVuZGVycyB3aXRoIGEgZGlmZmVyZW50IChlLmcuIGNvbnRyb2xsZWQpXG4gICAgLy8gaW5pdGlhbFZhbHVlcyBvYmplY3QuXG4gICAgY29uc3QgaW5pdGlhbFZhbHVlc1JlZiA9IHVzZVJlZihudWxsKTtcbiAgICBpZiAoaW5pdGlhbFZhbHVlc1JlZi5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIGluaXRpYWxWYWx1ZXNSZWYuY3VycmVudCA9IGluaXRpYWxWYWx1ZXM7XG4gICAgfVxuICAgIGNvbnN0IG1vdW50SW5pdGlhbFZhbHVlcyA9IGluaXRpYWxWYWx1ZXNSZWYuY3VycmVudDtcbiAgICAvLyBBbGwgdm9sYXRpbGUgZm9ybSBzdGF0ZSBsaXZlcyBpbiBhbiBleHRlcm5hbCBzdG9yZSwgTk9UIFJlYWN0IHN0YXRlIOKAlCBhXG4gICAgLy8ga2V5c3Ryb2tlIG11c3QgbmV2ZXIgcmUtcmVuZGVyIHRoZSBjb21wb25lbnQgdGhhdCBvd25zIHRoZSBmb3JtLiBGaWVsZHNcbiAgICAvLyBhbmQgd2F0Y2hlcnMgc3Vic2NyaWJlIHdpdGggcGVyLWZpZWxkIHNlbGVjdG9ycyAodXNlU3RvcmVTZWxlY3Rvcik7IGV2ZXJ5XG4gICAgLy8gbXV0YXRvciBiZWxvdyByZWFkcyB0aGUgTEFURVNUIHN0YXRlIHZpYSBzdG9yZS5nZXRTdGF0ZSgpLCB3aGljaCBhbHNvXG4gICAgLy8ga2VlcHMgbXVsdGlwbGUgd3JpdGVzIGluIHRoZSBzYW1lIHRpY2sgdmlzaWJsZSB0byBlYWNoIG90aGVyLlxuICAgIGNvbnN0IHN0b3JlUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGlmIChzdG9yZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIHN0b3JlUmVmLmN1cnJlbnQgPSBjcmVhdGVGb3JtU3RvcmUobW91bnRJbml0aWFsVmFsdWVzKTtcbiAgICB9XG4gICAgY29uc3Qgc3RvcmUgPSBzdG9yZVJlZi5jdXJyZW50O1xuICAgIC8vIExpdmUgcnVsZSByZWdpc3RyeSDigJQgT05FIHN0YWJsZSBvYmplY3QgbXV0YXRlZCBpbiBwbGFjZS4gUmVnaXN0cmF0aW9uIG11c3RcbiAgICAvLyBub3QgdHJpZ2dlciByZW5kZXJzLCBhbmQgc3VibWl0LXRpbWUgdmFsaWRhdGlvbiBtdXN0IGFsd2F5cyByZWFkIHRoZSBsYXRlc3RcbiAgICAvLyBydWxlcyAodGhleSBjYW4gY2hhbmdlIGJldHdlZW4gcmVuZGVycywgZS5nLiBhIGNvbmRpdGlvbmFsIGByZXF1aXJlZGApLlxuICAgIGNvbnN0IGZpZWxkUnVsZXNSZWYgPSB1c2VSZWYoe30pO1xuICAgIC8vIFBlci1maWVsZCB2YWxpZGF0aW9uIHJ1biBlcG9jaHMuIEVWRVJZIHZhbGlkYXRpb24gcnVuIChzeW5jIG9yIGFzeW5jKVxuICAgIC8vIGJ1bXBzIGl0cyBmaWVsZCdzIGVwb2NoOyBhbiBhc3luYyBydW4gcmUtY2hlY2tzIGl0cyBjYXB0dXJlZCBlcG9jaCBhdFxuICAgIC8vIHNldHRsZSB0aW1lIGFuZCBkaXNjYXJkcyBhIFNUQUxFIG91dGNvbWUg4oCUIHRoZSBzYW1lIHByb3RlY3Rpb24gYXNcbiAgICAvLyByYy1maWVsZC1mb3JtJ3MgdmFsaWRhdGVQcm9taXNlIGlkZW50aXR5IGNoZWNrLiBXaXRob3V0IGl0LCBhIHNsb3cgYXN5bmNcbiAgICAvLyB2YWxpZGF0b3IgKGUuZy4gYSBzZXJ2ZXItc2lkZSB1bmlxdWVuZXNzIGNoZWNrIHN0YXJ0ZWQgb24gYmx1cikgY291bGRcbiAgICAvLyBzZXR0bGUgYWZ0ZXIgdGhlIHVzZXIgYWxyZWFkeSBmaXhlZCB0aGUgdmFsdWUgYW5kIHN0YW1wIGEgc3RhbGUgZXJyb3JcbiAgICAvLyBvdmVyIGEgbmV3ZXIsIHBhc3NpbmcgcmVzdWx0LlxuICAgIGNvbnN0IHZhbGlkYXRpb25FcG9jaFJlZiA9IHVzZVJlZih7fSk7XG4gICAgY29uc3QgYmVnaW5WYWxpZGF0aW9uUnVuID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBuZXh0ID0gKHZhbGlkYXRpb25FcG9jaFJlZi5jdXJyZW50W25hbWVdIHx8IDApICsgMTtcbiAgICAgICAgdmFsaWRhdGlvbkVwb2NoUmVmLmN1cnJlbnRbbmFtZV0gPSBuZXh0O1xuICAgICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgICBjb25zdCBpc1ZhbGlkYXRpb25SdW5DdXJyZW50ID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgZXBvY2gpID0+IHZhbGlkYXRpb25FcG9jaFJlZi5jdXJyZW50W25hbWVdID09PSBlcG9jaCk7XG4gICAgLy8gQnVtcCAobmV2ZXIgZGVsZXRlIOKAlCBkZWxldGlvbiB3b3VsZCBsZXQgYSBuZXcgcnVuIHJlLWlzc3VlIGFuIG9sZCBlcG9jaFxuICAgIC8vIG51bWJlciBhbmQgY29sbGlkZSB3aXRoIGEgc3RpbGwtaW4tZmxpZ2h0IHByZS1yZXNldCBydW4pLlxuICAgIGNvbnN0IGludmFsaWRhdGVWYWxpZGF0aW9uUnVucyA9IHVzZU1lbW9pemVkRm4oKG5hbWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBuYW1lcyAhPT0gbnVsbCAmJiBuYW1lcyAhPT0gdm9pZCAwID8gbmFtZXMgOiBPYmplY3Qua2V5cyh2YWxpZGF0aW9uRXBvY2hSZWYuY3VycmVudCk7XG4gICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsaWRhdGlvbkVwb2NoUmVmLmN1cnJlbnRba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGlvbkVwb2NoUmVmLmN1cnJlbnRba2V5XSArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICAvLyBJbnN0YW5jZSBoYW5kZWQgdG8gZnVuY3Rpb24tZm9ybSBydWxlcy4gRGVmYXVsdHMgdG8gdGhlIGNvcmUgbWV0aG9kc1xuICAgIC8vIChhc3NpZ25lZCBhdCB0aGUgZW5kIG9mIHRoaXMgaG9vayBib2R5KTsgdXNlRm9ybSB1cGdyYWRlcyBpdCB0byB0aGUgRlVMTFxuICAgIC8vIGZvcm0gaW5zdGFuY2Ugb25jZSBpdCBoYXMgYnVpbHQgb25lLCBzbyBydWxlcyBzZWUgdGhlIHNhbWUgY29udGV4dCBvblxuICAgIC8vIGV2ZXJ5IHBhdGggKGludGVyYWN0aXZlLCBibHVyLCBzdWJtaXQpLlxuICAgIGNvbnN0IHJ1bGVDb250ZXh0SW5zdGFuY2VSZWYgPSB1c2VSZWYoe30pO1xuICAgIGNvbnN0IHNldFJ1bGVDb250ZXh0SW5zdGFuY2UgPSB1c2VNZW1vaXplZEZuKChpbnN0YW5jZSkgPT4ge1xuICAgICAgICBydWxlQ29udGV4dEluc3RhbmNlUmVmLmN1cnJlbnQgPSBpbnN0YW5jZTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRSdWxlQ29udGV4dEluc3RhbmNlID0gdXNlTWVtb2l6ZWRGbigoKSA9PiBydWxlQ29udGV4dEluc3RhbmNlUmVmLmN1cnJlbnQpO1xuICAgIGNvbnN0IGNvbW1pdFZhbHVlcyA9IHVzZU1lbW9pemVkRm4oKG5ld1ZhbHVlcykgPT4ge1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHZhbHVlczogbmV3VmFsdWVzIH0pO1xuICAgIH0pO1xuICAgIC8vIE5PVEU6IHNldHRpbmcgYSB2YWx1ZSBkb2VzIE5PVCB0b3VjaCB0aGUgZmllbGQncyBlcnJvciDigJQgZXJyb3JzIGFyZVxuICAgIC8vIGNsZWFyZWQgZXhjbHVzaXZlbHkgYnkgdmFsaWRhdGlvbiBydW5zICh3aG9zZSB0aW1pbmcgZm9sbG93cyB0aGVcbiAgICAvLyB2YWxpZGF0ZVRyaWdnZXIgY29uZmlnKSwgc28gYW4gb25CbHVyLW9ubHkgZmllbGQga2VlcHMgaXRzIGVycm9yIHdoaWxlXG4gICAgLy8gdGhlIHVzZXIgaXMgc3RpbGwgdHlwaW5nLlxuICAgIGNvbnN0IHNldEZpZWxkVmFsdWUgPSB1c2VNZW1vaXplZEZuKChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBwcmV2ID0gc3RvcmUuZ2V0U3RhdGUoKS52YWx1ZXM7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IG5hbWUuaW5jbHVkZXMoJy4nKVxuICAgICAgICAgICAgPyBzZXROZXN0ZWRWYWx1ZShwcmV2LCBuYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgIDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IHZhbHVlIH0pO1xuICAgICAgICBjb21taXRWYWx1ZXMobmV3VmFsdWVzKTtcbiAgICAgICAgb25WYWx1ZXNDaGFuZ2UgPT09IG51bGwgfHwgb25WYWx1ZXNDaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVmFsdWVzQ2hhbmdlKHsgW25hbWVdOiB2YWx1ZSB9LCBuZXdWYWx1ZXMpO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkRXJyb3IgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBzdG9yZS5nZXRTdGF0ZSgpLmVycm9ycztcbiAgICAgICAgaWYgKGVycm9yID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoIWVycm9yc1tuYW1lXSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBuZXdFcnJvcnMgPSBPYmplY3QuYXNzaWduKHt9LCBlcnJvcnMpO1xuICAgICAgICAgICAgZGVsZXRlIG5ld0Vycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIHN0b3JlLnNldFN0YXRlKHsgZXJyb3JzOiBuZXdFcnJvcnMgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNhbWVWYWxpZGF0aW9uTm9kZShlcnJvcnNbbmFtZV0sIGVycm9yKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyBlcnJvcnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZXJyb3JzKSwgeyBbbmFtZV06IGVycm9yIH0pIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkV2FybmluZyA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHdhcm5pbmcpID0+IHtcbiAgICAgICAgY29uc3Qgd2FybmluZ3MgPSBzdG9yZS5nZXRTdGF0ZSgpLndhcm5pbmdzO1xuICAgICAgICBpZiAod2FybmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCF3YXJuaW5nc1tuYW1lXSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBuZXdXYXJuaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHdhcm5pbmdzKTtcbiAgICAgICAgICAgIGRlbGV0ZSBuZXdXYXJuaW5nc1tuYW1lXTtcbiAgICAgICAgICAgIHN0b3JlLnNldFN0YXRlKHsgd2FybmluZ3M6IG5ld1dhcm5pbmdzIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzYW1lVmFsaWRhdGlvbk5vZGUod2FybmluZ3NbbmFtZV0sIHdhcm5pbmcpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHdhcm5pbmdzOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHdhcm5pbmdzKSwgeyBbbmFtZV06IHdhcm5pbmcgfSkgfSk7XG4gICAgfSk7XG4gICAgLy8gTW91bnRlZC1pbnN0YW5jZSBjb3VudHMgcGVyIGZpZWxkIG5hbWUsIHBsdXMgd2hldGhlciB0aGUgQ1VSUkVOVCBydWxlc1xuICAgIC8vIHJlZ2lzdHJhdGlvbiB3YXMgbWFkZSBieSBhIGNvdW50ZWQgaW5zdGFuY2UuIFJ1bGVzIGFyZSByZW1vdmVkIG9ubHkgd2hlblxuICAgIC8vIHRoZSBMQVNUIG1vdW50ZWQgaW5zdGFuY2UgZm9yIGEgbmFtZSByZWxlYXNlczogd2l0aCB0d28gc2FtZS1uYW1lIGZpZWxkc1xuICAgIC8vIG1vdW50ZWQsIHRoZSBmaXJzdCB1bm1vdW50IG11c3Qgbm90IHdpcGUgdGhlIHJlZ2lzdHJhdGlvbiB3aGlsZSB0aGVcbiAgICAvLyBzdXJ2aXZvciAocG9zc2libHkgbWVtby1iYWlsZWQsIHNvIG5vdCByZS1yZW5kZXJpbmcgdG8gcmUtcmVnaXN0ZXIpIHN0aWxsXG4gICAgLy8gcmVsaWVzIG9uIGl0IGZvciBzdWJtaXQtdGltZSB2YWxpZGF0aW9uLiBBIE1BTlVBTCByZWdpc3RlckZpZWxkIChub1xuICAgIC8vIG1vdW50ZWQgaG9sZGVyLCBvd25lZD1mYWxzZSkgc3Vydml2ZXMgdGhlIHVubW91bnQgb2YgcGlnZ3liYWNraW5nXG4gICAgLy8gaW5zdGFuY2VzIHRoYXQgbmV2ZXIgcmVnaXN0ZXJlZCBydWxlcyB0aGVtc2VsdmVzLlxuICAgIC8vIE5PVEU6IGNhbGxlcnMgbXVzdCByZXRhaW4gQkVGT1JFIHJlZ2lzdGVyaW5nIChyZXRhaW4gZWZmZWN0IGRlY2xhcmVkXG4gICAgLy8gZmlyc3QpLCBvciB0aGUgcmVnaXN0cmF0aW9uIGlzIG1pc2NsYXNzaWZpZWQgYXMgbWFudWFsIGFuZCBsZWFrcy5cbiAgICBjb25zdCBmaWVsZE1vdW50Q291bnRzUmVmID0gdXNlUmVmKHt9KTtcbiAgICBjb25zdCBmaWVsZFJlZ2lzdHJhdGlvbk93bmVkUmVmID0gdXNlUmVmKHt9KTtcbiAgICBjb25zdCByZWdpc3RlckZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgcnVsZXMpID0+IHtcbiAgICAgICAgZmllbGRSdWxlc1JlZi5jdXJyZW50W25hbWVdID0gcnVsZXM7XG4gICAgICAgIGZpZWxkUmVnaXN0cmF0aW9uT3duZWRSZWYuY3VycmVudFtuYW1lXSA9IChmaWVsZE1vdW50Q291bnRzUmVmLmN1cnJlbnRbbmFtZV0gfHwgMCkgPiAwO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldEZpZWxkUnVsZXMgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiBmaWVsZFJ1bGVzUmVmLmN1cnJlbnRbbmFtZV07XG4gICAgfSk7XG4gICAgY29uc3QgdW5yZWdpc3RlckZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICBkZWxldGUgZmllbGRSdWxlc1JlZi5jdXJyZW50W25hbWVdO1xuICAgICAgICBkZWxldGUgZmllbGRSZWdpc3RyYXRpb25Pd25lZFJlZi5jdXJyZW50W25hbWVdO1xuICAgIH0pO1xuICAgIGNvbnN0IHJldGFpbkZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICBmaWVsZE1vdW50Q291bnRzUmVmLmN1cnJlbnRbbmFtZV0gPSAoZmllbGRNb3VudENvdW50c1JlZi5jdXJyZW50W25hbWVdIHx8IDApICsgMTtcbiAgICB9KTtcbiAgICBjb25zdCByZWxlYXNlRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gKGZpZWxkTW91bnRDb3VudHNSZWYuY3VycmVudFtuYW1lXSB8fCAwKSAtIDE7XG4gICAgICAgIGlmIChjb3VudCA8PSAwKSB7XG4gICAgICAgICAgICBkZWxldGUgZmllbGRNb3VudENvdW50c1JlZi5jdXJyZW50W25hbWVdO1xuICAgICAgICAgICAgaWYgKGZpZWxkUmVnaXN0cmF0aW9uT3duZWRSZWYuY3VycmVudFtuYW1lXSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWVsZFJ1bGVzUmVmLmN1cnJlbnRbbmFtZV07XG4gICAgICAgICAgICAgICAgZGVsZXRlIGZpZWxkUmVnaXN0cmF0aW9uT3duZWRSZWYuY3VycmVudFtuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkTW91bnRDb3VudHNSZWYuY3VycmVudFtuYW1lXSA9IGNvdW50O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHJ1bGVzID0gW10sIHByb3ZpZGVkVmFsdWUpID0+IHtcbiAgICAgICAgLy8gQSBzeW5jIHJ1biBjb21taXRzIGltbWVkaWF0ZWx5LCBzbyBpdCBpcyBhbHdheXMgY3VycmVudCDigJQgYnVtcGluZyB0aGVcbiAgICAgICAgLy8gZXBvY2ggaGVyZSBTVVBFUlNFREVTIGFueSBpbi1mbGlnaHQgYXN5bmMgcnVuIGZvciB0aGlzIGZpZWxkLlxuICAgICAgICBiZWdpblZhbGlkYXRpb25SdW4obmFtZSk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPSBzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcztcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwcm92aWRlZFZhbHVlICE9PSB1bmRlZmluZWQgPyBwcm92aWRlZFZhbHVlIDogcmVzb2x2ZVZhbHVlKGN1cnJlbnRWYWx1ZXMsIG5hbWUpO1xuICAgICAgICBjb25zdCB7IGVycm9yLCB3YXJuaW5nIH0gPSBydW5SdWxlc1N5bmMobmFtZSwgdmFsdWUsIGN1cnJlbnRWYWx1ZXMsIHJ1bGVzLCBydWxlQ29udGV4dEluc3RhbmNlUmVmLmN1cnJlbnQpO1xuICAgICAgICBzZXRGaWVsZFdhcm5pbmcobmFtZSwgd2FybmluZyk7XG4gICAgICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0b3JlLmdldFN0YXRlKCkuZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICBzZXRGaWVsZEVycm9yKG5hbWUsIG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICAgIGNvbnN0IHZhbGlkYXRlRmllbGRzID0gdXNlTWVtb2l6ZWRGbigoZmllbGRzUnVsZXNUb1ZhbGlkYXRlID0gZmllbGRSdWxlc1JlZi5jdXJyZW50KSA9PiB7XG4gICAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgT2JqZWN0LmtleXMoZmllbGRzUnVsZXNUb1ZhbGlkYXRlKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydWxlcyA9IGZpZWxkc1J1bGVzVG9WYWxpZGF0ZVtuYW1lXTtcbiAgICAgICAgICAgIGlmICghdmFsaWRhdGVGaWVsZChuYW1lLCBydWxlcykpIHtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaXNWYWxpZDtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVTdWJtaXRJbnRlcm5hbCA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPSBzdGF0ZS52YWx1ZXM7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSdWxlcyA9IGZpZWxkUnVsZXNSZWYuY3VycmVudDtcbiAgICAgICAgbGV0IGhhc0Vycm9ycyA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmYWlsZWRFcnJvcnMgPSB7fTtcbiAgICAgICAgLy8gTUVSR0Ugb3ZlciB0aGUgY3VycmVudCBtYXBzOiBvbmx5IGZpZWxkcyBpbiB0aGUgcnVsZSByZWdpc3RyeSBhcmVcbiAgICAgICAgLy8gcmUtZGVjaWRlZCDigJQgYSBtYW51YWxseS1zZXQgZXJyb3Igb24gYSBmaWVsZCB3aXRob3V0IHJ1bGVzIHN1cnZpdmVzLlxuICAgICAgICBjb25zdCBuZXdFcnJvcnMgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5lcnJvcnMpO1xuICAgICAgICBjb25zdCBuZXdXYXJuaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLndhcm5pbmdzKTtcbiAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudFJ1bGVzKS5mb3JFYWNoKChmaWVsZE5hbWUpID0+IHtcbiAgICAgICAgICAgIGJlZ2luVmFsaWRhdGlvblJ1bihmaWVsZE5hbWUpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXNvbHZlVmFsdWUoY3VycmVudFZhbHVlcywgZmllbGROYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHsgZXJyb3IsIHdhcm5pbmcgfSA9IHJ1blJ1bGVzU3luYyhmaWVsZE5hbWUsIHZhbHVlLCBjdXJyZW50VmFsdWVzLCBjdXJyZW50UnVsZXNbZmllbGROYW1lXSwgcnVsZUNvbnRleHRJbnN0YW5jZVJlZi5jdXJyZW50KTtcbiAgICAgICAgICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG5ld0Vycm9yc1tmaWVsZE5hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgZmFpbGVkRXJyb3JzW2ZpZWxkTmFtZV0gPSBlcnJvcjtcbiAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld0Vycm9yc1tmaWVsZE5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHdhcm5pbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBuZXdXYXJuaW5nc1tmaWVsZE5hbWVdID0gd2FybmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdXYXJuaW5nc1tmaWVsZE5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyBlcnJvcnM6IG5ld0Vycm9ycywgd2FybmluZ3M6IG5ld1dhcm5pbmdzIH0pO1xuICAgICAgICBpZiAoIWhhc0Vycm9ycykge1xuICAgICAgICAgICAgb25GaW5pc2ggPT09IG51bGwgfHwgb25GaW5pc2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoKGN1cnJlbnRWYWx1ZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgdmFsdWVzOiBjdXJyZW50VmFsdWVzIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvbkZpbmlzaEZhaWxlZCA9PT0gbnVsbCB8fCBvbkZpbmlzaEZhaWxlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2hGYWlsZWQoeyB2YWx1ZXM6IGN1cnJlbnRWYWx1ZXMsIGVycm9yczogZmFpbGVkRXJyb3JzIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yczogZmFpbGVkRXJyb3JzIH07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVTdWJtaXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gaGFuZGxlU3VibWl0SW50ZXJuYWwoKTtcbiAgICB9KTtcbiAgICAvLyBQdXJlIHN0YXRlIEFQSTogdGhlIGltcGVyYXRpdmUgcmVzZXRGaWVsZHMoKVxuICAgIC8vIG5ldmVyIGZpcmVzIG9uUmVzZXQuIFRoZSBjYWxsYmFjayBiZWxvbmdzIHRvIHRoZSByZXNldCBBQ1RJT04gbGF5ZXJcbiAgICAvLyAoc3VibWl0dGVyIGJ1dHRvbiAvIG5hdGl2ZSByZXNldCBldmVudCksIHdoaWNoIGZpcmVzIGl0IGV4YWN0bHkgb25jZS5cbiAgICBjb25zdCByZXNldEZpZWxkcyA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICAvLyBJbnZhbGlkYXRlIGluLWZsaWdodCBhc3luYyB2YWxpZGF0aW9uIHJ1bnMg4oCUIHRoZWlyIHJlc3VsdHMgYmVsb25nIHRvXG4gICAgICAgIC8vIHByZS1yZXNldCB2YWx1ZXMgYW5kIG11c3Qgbm90IHN0YW1wIGVycm9ycyBvbnRvIHRoZSByZXNldCBmb3JtLlxuICAgICAgICBpbnZhbGlkYXRlVmFsaWRhdGlvblJ1bnMoKTtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdmFsdWVzOiBtb3VudEluaXRpYWxWYWx1ZXMsXG4gICAgICAgICAgICBlcnJvcnM6IHt9LFxuICAgICAgICAgICAgd2FybmluZ3M6IHt9LFxuICAgICAgICAgICAgdG91Y2hlZDoge30sXG4gICAgICAgICAgICB2YWxpZGF0aW5nOiB7fSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXNldEZpZWxkcygpO1xuICAgICAgICBvblJlc2V0ID09PSBudWxsIHx8IG9uUmVzZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUmVzZXQoKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZFZhbHVlID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZVZhbHVlKHN0b3JlLmdldFN0YXRlKCkudmFsdWVzLCBuYW1lKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZHNWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gc3RvcmUuZ2V0U3RhdGUoKS52YWx1ZXM7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRzVmFsdWUgPSB1c2VNZW1vaXplZEZuKChuZXdWYWx1ZXMpID0+IHtcbiAgICAgICAgY29uc3QgcHJldiA9IHN0b3JlLmdldFN0YXRlKCkudmFsdWVzO1xuICAgICAgICBsZXQgdXBkYXRlZFZhbHVlcztcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG5ld1ZhbHVlcykuc29tZSgoa2V5KSA9PiBrZXkuaW5jbHVkZXMoJy4nKSkpIHtcbiAgICAgICAgICAgIC8vIERvdC1wYXRoIGtleXMgd3JpdGUgaW50byB0aGUgTkVTVEVEIHN0cnVjdHVyZSAodGhlIHNldEZpZWxkVmFsdWVcbiAgICAgICAgICAgIC8vIGNvbnRyYWN0KSDigJQgYSBzaGFsbG93IG1lcmdlIHdvdWxkIGxhbmQgdGhlbSBhcyBsaXRlcmFsIHRvcC1sZXZlbFxuICAgICAgICAgICAgLy8ga2V5cyB0aGF0IHRoZSBuZXN0ZWQtYXdhcmUgcmVhZGVycyBuZXZlciBmaW5kLlxuICAgICAgICAgICAgdXBkYXRlZFZhbHVlcyA9IHByZXY7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhuZXdWYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlZFZhbHVlcyA9IGtleS5pbmNsdWRlcygnLicpXG4gICAgICAgICAgICAgICAgICAgID8gc2V0TmVzdGVkVmFsdWUodXBkYXRlZFZhbHVlcywga2V5LCB2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHVwZGF0ZWRWYWx1ZXMpLCB7IFtrZXldOiB2YWx1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVwZGF0ZWRWYWx1ZXMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCBuZXdWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbW1pdFZhbHVlcyh1cGRhdGVkVmFsdWVzKTtcbiAgICAgICAgb25WYWx1ZXNDaGFuZ2UgPT09IG51bGwgfHwgb25WYWx1ZXNDaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVmFsdWVzQ2hhbmdlKG5ld1ZhbHVlcywgdXBkYXRlZFZhbHVlcyk7XG4gICAgfSk7XG4gICAgLy8gU2VlZCB0aGUgcnVsZS1jb250ZXh0IGluc3RhbmNlIHdpdGggdGhlIGNvcmUgbWV0aG9kcyBleGFjdGx5IG9uY2Ug4oCUXG4gICAgLy8gdXNlRm9ybSdzIHJpY2hlciBpbnN0YW5jZSBtdXN0IG5vdCBiZSBkb3duZ3JhZGVkIG9uIGxhdGVyIHJlbmRlcnMuXG4gICAgaWYgKE9iamVjdC5rZXlzKHJ1bGVDb250ZXh0SW5zdGFuY2VSZWYuY3VycmVudCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJ1bGVDb250ZXh0SW5zdGFuY2VSZWYuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGdldEZpZWxkVmFsdWUsXG4gICAgICAgICAgICBnZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgICAgICBzZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgICAgIHJlc2V0RmllbGRzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBmb3JtSW5zdGFuY2UgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHN1Ym1pdDogaGFuZGxlU3VibWl0SW50ZXJuYWwsXG4gICAgICAgIHJlc2V0RmllbGRzLFxuICAgICAgICBnZXRGaWVsZFZhbHVlLFxuICAgICAgICBnZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzLFxuICAgIH0pLCBbXG4gICAgICAgIGhhbmRsZVN1Ym1pdEludGVybmFsLFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkcyxcbiAgICBdKTtcbiAgICAvLyBSZW5kZXItdGltZSBzbmFwc2hvdCDigJQga2VwdCBmb3IgdGhlIFVzZUZvcm1Db3JlUmV0dXJuIGNvbnRyYWN0LiBSZWFjdGl2ZVxuICAgIC8vIGNvbnN1bWVycyBtdXN0IGdvIHRocm91Z2ggdGhlIHN0b3JlLCBuZXZlciB0aHJvdWdoIHRoZXNlIGZpZWxkcy5cbiAgICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgY29uc3QgY29yZUNvbnRleHRTaGFwZSA9IHtcbiAgICAgICAgdmFsdWVzOiBzdGF0ZS52YWx1ZXMsXG4gICAgICAgIGVycm9yczogc3RhdGUuZXJyb3JzLFxuICAgICAgICB3YXJuaW5nczogc3RhdGUud2FybmluZ3MsXG4gICAgICAgIHRvdWNoZWQ6IHN0YXRlLnRvdWNoZWQsXG4gICAgICAgIGZvcm1JbnN0YW5jZSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcixcbiAgICAgICAgc2V0RmllbGRXYXJuaW5nLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkLFxuICAgICAgICByZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHNpemUsXG4gICAgICAgIGxhYmVsQWxpZ24sXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICB2YWxpZGF0ZVRyaWdnZXIsXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZXM6IHN0YXRlLnZhbHVlcyxcbiAgICAgICAgZXJyb3JzOiBzdGF0ZS5lcnJvcnMsXG4gICAgICAgIHdhcm5pbmdzOiBzdGF0ZS53YXJuaW5ncyxcbiAgICAgICAgdG91Y2hlZDogc3RhdGUudG91Y2hlZCxcbiAgICAgICAgLy8gTGl2ZSByZWdpc3RyeSDigJQgc3RhYmxlIGlkZW50aXR5LCBtdXRhdGVkIGluIHBsYWNlIGJ5IHJlZ2lzdGVyL3VucmVnaXN0ZXIuXG4gICAgICAgIGZpZWxkUnVsZXM6IGZpZWxkUnVsZXNSZWYuY3VycmVudCxcbiAgICAgICAgZ2V0RmllbGRSdWxlcyxcbiAgICAgICAgZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSxcbiAgICAgICAgc2V0UnVsZUNvbnRleHRJbnN0YW5jZSxcbiAgICAgICAgYmVnaW5WYWxpZGF0aW9uUnVuLFxuICAgICAgICBpc1ZhbGlkYXRpb25SdW5DdXJyZW50LFxuICAgICAgICBpbnZhbGlkYXRlVmFsaWRhdGlvblJ1bnMsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgIHNldEZpZWxkRXJyb3IsXG4gICAgICAgIHNldEZpZWxkV2FybmluZyxcbiAgICAgICAgc2V0RmllbGRzVmFsdWUsXG4gICAgICAgIGdldEZpZWxkVmFsdWUsXG4gICAgICAgIGdldEZpZWxkc1ZhbHVlLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkcyxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkLFxuICAgICAgICByZXRhaW5GaWVsZCxcbiAgICAgICAgcmVsZWFzZUZpZWxkLFxuICAgICAgICBoYW5kbGVTdWJtaXQsXG4gICAgICAgIGhhbmRsZVJlc2V0LFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZm9ybUluc3RhbmNlLFxuICAgICAgICBjb3JlQ29udGV4dFNoYXBlLFxuICAgICAgICBzdG9yZSxcbiAgICAgICAgZ2V0SW5pdGlhbFZhbHVlczogKCkgPT4gbW91bnRJbml0aWFsVmFsdWVzLFxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ybUNvcmU7Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|
|
284
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS50cyIsImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIl0sIm5hbWVzIjpbIl9yZWFjdCIsInJlcXVpcmUiLCJfdXNlRXZlbnRDYWxsYmFjayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXNlTWVtb2l6ZWRGbiIsIl9wYXRoVXRpbHMiLCJfZm9ybVN0b3JlIiwidXNlRm9ybUNvcmUiLCJleHBvcnRzIiwiY29uZmlnIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiX2NvbmZpZyRpbml0aWFsVmFsdWVzIiwiaW5pdGlhbFZhbHVlcyIsIm9uVmFsdWVzQ2hhbmdlIiwib25SZXNldCIsIl9jb25maWckc2l6ZSIsInNpemUiLCJfY29uZmlnJGxhYmVsQWxpZ24iLCJsYWJlbEFsaWduIiwiX2NvbmZpZyRkaXNhYmxlZCIsImRpc2FibGVkIiwiX2NvbmZpZyR2YWxpZGF0ZVRyaWdnIiwidmFsaWRhdGVUcmlnZ2VyIiwiaW5pdGlhbFZhbHVlc1JlZiIsInVzZVJlZiIsImN1cnJlbnQiLCJtb3VudEluaXRpYWxWYWx1ZXMiLCJzdG9yZVJlZiIsImNyZWF0ZUZvcm1TdG9yZSIsInN0b3JlIiwiZmllbGRSdWxlc1JlZiIsInZhbGlkYXRpb25FcG9jaFJlZiIsImJlZ2luVmFsaWRhdGlvblJ1biIsInVzZU1lbW9pemVkRm4iLCJuYW1lIiwibmV4dCIsImlzVmFsaWRhdGlvblJ1bkN1cnJlbnQiLCJlcG9jaCIsImludmFsaWRhdGVWYWxpZGF0aW9uUnVucyIsIm5hbWVzIiwia2V5cyIsIk9iamVjdCIsImZvckVhY2giLCJrZXkiLCJydWxlQ29udGV4dEluc3RhbmNlUmVmIiwic2V0UnVsZUNvbnRleHRJbnN0YW5jZSIsImluc3RhbmNlIiwiZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSIsImNvbW1pdFZhbHVlcyIsIm5ld1ZhbHVlcyIsInNldFN0YXRlIiwidmFsdWVzIiwic2V0RmllbGRWYWx1ZSIsInZhbHVlIiwicHJldiIsImdldFN0YXRlIiwiaW5jbHVkZXMiLCJzZXROZXN0ZWRWYWx1ZSIsImFzc2lnbiIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJzZXRGaWVsZEVycm9yIiwiZXJyb3IiLCJlcnJvcnMiLCJuZXdFcnJvcnMiLCJzYW1lVmFsaWRhdGlvbk5vZGUiLCJzZXRGaWVsZFdhcm5pbmciLCJ3YXJuaW5nIiwid2FybmluZ3MiLCJuZXdXYXJuaW5ncyIsImZpZWxkTW91bnRDb3VudHNSZWYiLCJmaWVsZFJlZ2lzdHJhdGlvbk93bmVkUmVmIiwicmVnaXN0ZXJGaWVsZCIsInJ1bGVzIiwiZ2V0RmllbGRSdWxlcyIsInVucmVnaXN0ZXJGaWVsZCIsInJldGFpbkZpZWxkIiwicmVsZWFzZUZpZWxkIiwiY291bnQiLCJyZXNldEZpZWxkcyIsInRvdWNoZWQiLCJ2YWxpZGF0aW5nIiwiaGFuZGxlUmVzZXQiLCJ1c2VFdmVudENhbGxiYWNrIiwiZSIsInByZXZlbnREZWZhdWx0IiwiZ2V0RmllbGRWYWx1ZSIsInJlc29sdmVWYWx1ZSIsImdldEZpZWxkc1ZhbHVlIiwibmFtZUxpc3QiLCJyZWR1Y2UiLCJhY2MiLCJzZXRGaWVsZHNWYWx1ZSIsInZhbHVlc1BhdGNoIiwidXBkYXRlZFZhbHVlcyIsInNvbWUiLCJfaSIsIl9PYmplY3QkZW50cmllcyIsImVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJfc2xpY2VkVG9BcnJheTIiLCJtZXJnZVZhbHVlc1BhdGNoIiwiZm9ybUluc3RhbmNlIiwidXNlTWVtbyIsInN0YXRlIiwiZmllbGRSdWxlcyIsImdldEluaXRpYWxWYWx1ZXMiLCJfZGVmYXVsdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGNBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLFVBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQUwsT0FBQTtBQVdPLElBQU1NLFdBQVcsR0FBQUMsT0FBQSxDQUFBRCxXQUFBLEdBQUcsU0FBZEEsV0FBV0EsQ0FBQSxFQUUyRTtFQUFBLElBRGpHRSxNQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFvQyxDQUFBLENBQUU7RUFFdEMsSUFBQUcscUJBQUEsR0FRSUosTUFBTSxDQVBSSyxhQUFhO0lBQWJBLGFBQWEsR0FBQUQscUJBQUEsY0FBRyxDQUFBLENBQUUsR0FBQUEscUJBQUE7SUFDbEJFLGNBQWMsR0FNWk4sTUFBTSxDQU5STSxjQUFjO0lBQ2RDLE9BQU8sR0FLTFAsTUFBTSxDQUxSTyxPQUFPO0lBQUFDLFlBQUEsR0FLTFIsTUFBTSxDQUpSUyxJQUFJO0lBQUpBLElBQUksR0FBQUQsWUFBQSxjQUFHLE9BQU8sR0FBQUEsWUFBQTtJQUFBRSxrQkFBQSxHQUlaVixNQUFNLENBSFJXLFVBQVU7SUFBVkEsVUFBVSxHQUFBRCxrQkFBQSxjQUFHLE1BQU0sR0FBQUEsa0JBQUE7SUFBQUUsZ0JBQUEsR0FHakJaLE1BQU0sQ0FGUmEsUUFBUTtJQUFSQSxRQUFRLEdBQUFELGdCQUFBLGNBQUcsS0FBSyxHQUFBQSxnQkFBQTtJQUFBRSxxQkFBQSxHQUVkZCxNQUFNLENBRFJlLGVBQWU7SUFBZkEsZUFBZSxHQUFBRCxxQkFBQSxjQUFHLFVBQVUsR0FBQUEscUJBQUE7RUFHOUI7RUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFNRSxnQkFBZ0IsR0FBRyxJQUFBQyxhQUFNLEVBQTZCLElBQUksQ0FBQztFQUNqRSxJQUFJRCxnQkFBZ0IsQ0FBQ0UsT0FBTyxLQUFLLElBQUksRUFBRTtJQUNyQ0YsZ0JBQWdCLENBQUNFLE9BQU8sR0FBR2IsYUFBb0M7RUFDakU7RUFDQSxJQUFNYyxrQkFBa0IsR0FBR0gsZ0JBQWdCLENBQUNFLE9BQU87RUFFbkQ7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQU1FLFFBQVEsR0FBRyxJQUFBSCxhQUFNLEVBQW1CLElBQUksQ0FBQztFQUMvQyxJQUFJRyxRQUFRLENBQUNGLE9BQU8sS0FBSyxJQUFJLEVBQUU7SUFDN0JFLFFBQVEsQ0FBQ0YsT0FBTyxHQUFHLElBQUFHLDBCQUFlLEVBQUNGLGtCQUFrQixDQUFDO0VBQ3hEO0VBQ0EsSUFBTUcsS0FBSyxHQUFHRixRQUFRLENBQUNGLE9BQU87RUFFOUI7RUFDQTtFQUNBO0VBQ0EsSUFBTUssYUFBYSxHQUFHLElBQUFOLGFBQU0sRUFBcUMsQ0FBQSxDQUFFLENBQUM7RUFFcEU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFNTyxrQkFBa0IsR0FBRyxJQUFBUCxhQUFNLEVBQXlCLENBQUEsQ0FBRSxDQUFDO0VBQzdELElBQU1RLGtCQUFrQixHQUFHLElBQUFDLHlCQUFhLEVBQUMsVUFBQ0MsSUFBWSxFQUFZO0lBQ2hFLElBQU1DLElBQUksR0FBRyxDQUFDSixrQkFBa0IsQ0FBQ04sT0FBTyxDQUFDUyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUN4REgsa0JBQWtCLENBQUNOLE9BQU8sQ0FBQ1MsSUFBSSxDQUFDLEdBQUdDLElBQUk7SUFDdkMsT0FBT0EsSUFBSTtFQUNiLENBQUMsQ0FBQztFQUNGLElBQU1DLHNCQUFzQixHQUFHLElBQUFILHlCQUFhLEVBQzFDLFVBQUNDLElBQVksRUFBRUcsS0FBYTtJQUFBLE9BQWNOLGtCQUFrQixDQUFDTixPQUFPLENBQUNTLElBQUksQ0FBQyxLQUFLRyxLQUFLO0VBQUEsRUFDckY7RUFDRDtFQUNBO0VBQ0EsSUFBTUMsd0JBQXdCLEdBQUcsSUFBQUwseUJBQWEsRUFBQyxVQUFDTSxLQUFnQixFQUFJO0lBQ2xFLElBQU1DLElBQUksR0FBR0QsS0FBSyxLQUFBLElBQUEsSUFBTEEsS0FBSyxLQUFBLEtBQUEsQ0FBQSxHQUFMQSxLQUFLLEdBQUlFLE1BQU0sQ0FBQ0QsSUFBSSxDQUFDVCxrQkFBa0IsQ0FBQ04sT0FBTyxDQUFDO0lBQzdEZSxJQUFJLENBQUNFLE9BQU8sQ0FBQyxVQUFDQyxHQUFHLEVBQUk7TUFDbkIsSUFBSVosa0JBQWtCLENBQUNOLE9BQU8sQ0FBQ2tCLEdBQUcsQ0FBQyxLQUFLakMsU0FBUyxFQUFFO1FBQ2pEcUIsa0JBQWtCLENBQUNOLE9BQU8sQ0FBQ2tCLEdBQUcsQ0FBQyxJQUFJLENBQUM7TUFDdEM7SUFDRixDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7RUFFRjtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQU1DLHNCQUFzQixHQUFHLElBQUFwQixhQUFNLEVBQStCLENBQUEsQ0FBRSxDQUFDO0VBQ3ZFLElBQU1xQixzQkFBc0IsR0FBRyxJQUFBWix5QkFBYSxFQUFDLFVBQUNhLFFBQXNDLEVBQUk7SUFDdEZGLHNCQUFzQixDQUFDbkIsT0FBTyxHQUFHcUIsUUFBUTtFQUMzQyxDQUFDLENBQUM7RUFDRixJQUFNQyxzQkFBc0IsR0FBRyxJQUFBZCx5QkFBYSxFQUFDO0lBQUEsT0FBTVcsc0JBQXNCLENBQUNuQixPQUFPO0VBQUEsRUFBQztFQUVsRixJQUFNdUIsWUFBWSxHQUFHLElBQUFmLHlCQUFhLEVBQUMsVUFBQ2dCLFNBQThCLEVBQUk7SUFDcEVwQixLQUFLLENBQUNxQixRQUFRLENBQUM7TUFBRUMsTUFBTSxFQUFFRjtJQUFTLENBQUUsQ0FBQztFQUN2QyxDQUFDLENBQUM7RUFFRjtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQU1HLGFBQWEsR0FBRyxJQUFBbkIseUJBQWEsRUFBQyxVQUFDQyxJQUFZLEVBQUVtQixLQUFVLEVBQUk7SUFDL0QsSUFBTUMsSUFBSSxHQUFHekIsS0FBSyxDQUFDMEIsUUFBUSxDQUFBLENBQUUsQ0FBQ0osTUFBTTtJQUNwQyxJQUFNRixTQUFTLEdBQUdmLElBQUksQ0FBQ3NCLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FDaEMsSUFBQUMseUJBQWMsRUFBQ0gsSUFBSSxFQUFFcEIsSUFBSSxFQUFFbUIsS0FBSyxDQUFDLEdBQ2xDWixNQUFBLENBQUFpQixNQUFBLENBQUFqQixNQUFBLENBQUFpQixNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQU1KLElBQUksQ0FBQSxNQUFBSyxnQkFBQSxpQkFBR3pCLElBQUksRUFBR21CLEtBQUssQ0FBQSxDQUFFO0lBQzlCTCxZQUFZLENBQUNDLFNBQVMsQ0FBQztJQUN2QnBDLGNBQWMsS0FBQSxJQUFBLElBQWRBLGNBQWMsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBZEEsY0FBYyxLQUFBOEMsZ0JBQUEsaUJBQU16QixJQUFJLEVBQUdtQixLQUFLLEdBQWtDSixTQUFtQixDQUFDO0VBQ3hGLENBQUMsQ0FBQztFQUVGLElBQU1XLGFBQWEsR0FBRyxJQUFBM0IseUJBQWEsRUFBQyxVQUFDQyxJQUFZLEVBQUUyQixLQUF1QixFQUFJO0lBQzVFLElBQU1DLE1BQU0sR0FBR2pDLEtBQUssQ0FBQzBCLFFBQVEsQ0FBQSxDQUFFLENBQUNPLE1BQU07SUFDdEMsSUFBSUQsS0FBSyxLQUFLLElBQUksRUFBRTtNQUNsQixJQUFJLENBQUNDLE1BQU0sQ0FBQzVCLElBQUksQ0FBQyxFQUFFO01BQ25CLElBQU02QixTQUFTLEdBQUF0QixNQUFBLENBQUFpQixNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQVFJLE1BQU0sQ0FBRTtNQUMvQixPQUFPQyxTQUFTLENBQUM3QixJQUFJLENBQUM7TUFDdEJMLEtBQUssQ0FBQ3FCLFFBQVEsQ0FBQztRQUFFWSxNQUFNLEVBQUVDO01BQVMsQ0FBRSxDQUFDO01BQ3JDO0lBQ0Y7SUFDQSxJQUFJLElBQUFDLDZCQUFrQixFQUFDRixNQUFNLENBQUM1QixJQUFJLENBQUMsRUFBRTJCLEtBQUssQ0FBQyxFQUFFO0lBQzdDaEMsS0FBSyxDQUFDcUIsUUFBUSxDQUFDO01BQUVZLE1BQU0sRUFBQXJCLE1BQUEsQ0FBQWlCLE1BQUEsQ0FBQWpCLE1BQUEsQ0FBQWlCLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBT0ksTUFBTSxDQUFBLE1BQUFILGdCQUFBLGlCQUFHekIsSUFBSSxFQUFHMkIsS0FBSyxDQUFBO0lBQUUsQ0FBRSxDQUFDO0VBQzFELENBQUMsQ0FBQztFQUVGLElBQU1JLGVBQWUsR0FBRyxJQUFBaEMseUJBQWEsRUFBQyxVQUFDQyxJQUFZLEVBQUVnQyxPQUF5QixFQUFJO0lBQ2hGLElBQU1DLFFBQVEsR0FBR3RDLEtBQUssQ0FBQzBCLFFBQVEsQ0FBQSxDQUFFLENBQUNZLFFBQVE7SUFDMUMsSUFBSUQsT0FBTyxLQUFLLElBQUksRUFBRTtNQUNwQixJQUFJLENBQUNDLFFBQVEsQ0FBQ2pDLElBQUksQ0FBQyxFQUFFO01BQ3JCLElBQU1rQyxXQUFXLEdBQUEzQixNQUFBLENBQUFpQixNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQVFTLFFBQVEsQ0FBRTtNQUNuQyxPQUFPQyxXQUFXLENBQUNsQyxJQUFJLENBQUM7TUFDeEJMLEtBQUssQ0FBQ3FCLFFBQVEsQ0FBQztRQUFFaUIsUUFBUSxFQUFFQztNQUFXLENBQUUsQ0FBQztNQUN6QztJQUNGO0lBQ0EsSUFBSSxJQUFBSiw2QkFBa0IsRUFBQ0csUUFBUSxDQUFDakMsSUFBSSxDQUFDLEVBQUVnQyxPQUFPLENBQUMsRUFBRTtJQUNqRHJDLEtBQUssQ0FBQ3FCLFFBQVEsQ0FBQztNQUFFaUIsUUFBUSxFQUFBMUIsTUFBQSxDQUFBaUIsTUFBQSxDQUFBakIsTUFBQSxDQUFBaUIsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFPUyxRQUFRLENBQUEsTUFBQVIsZ0JBQUEsaUJBQUd6QixJQUFJLEVBQUdnQyxPQUFPLENBQUE7SUFBRSxDQUFFLENBQUM7RUFDaEUsQ0FBQyxDQUFDO0VBRUY7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFNRyxtQkFBbUIsR0FBRyxJQUFBN0MsYUFBTSxFQUF5QixDQUFBLENBQUUsQ0FBQztFQUM5RCxJQUFNOEMseUJBQXlCLEdBQUcsSUFBQTlDLGFBQU0sRUFBMEIsQ0FBQSxDQUFFLENBQUM7RUFFckUsSUFBTStDLGFBQWEsR0FBRyxJQUFBdEMseUJBQWEsRUFBQyxVQUFDQyxJQUFZLEVBQUVzQyxLQUF5QixFQUFJO0lBQzlFMUMsYUFBYSxDQUFDTCxPQUFPLENBQUNTLElBQUksQ0FBQyxHQUFHc0MsS0FBSztJQUNuQ0YseUJBQXlCLENBQUM3QyxPQUFPLENBQUNTLElBQUksQ0FBQyxHQUFHLENBQUNtQyxtQkFBbUIsQ0FBQzVDLE9BQU8sQ0FBQ1MsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDeEYsQ0FBQyxDQUFDO0VBRUYsSUFBTXVDLGFBQWEsR0FBRyxJQUFBeEMseUJBQWEsRUFBQyxVQUFDQyxJQUFZLEVBQW9DO0lBQ25GLE9BQU9KLGFBQWEsQ0FBQ0wsT0FBTyxDQUFDUyxJQUFJLENBQUM7RUFDcEMsQ0FBQyxDQUFDO0VBRUYsSUFBTXdDLGVBQWUsR0FBRyxJQUFBekMseUJBQWEsRUFBQyxVQUFDQyxJQUFZLEVBQUk7SUFDckQsT0FBT0osYUFBYSxDQUFDTCxPQUFPLENBQUNTLElBQUksQ0FBQztJQUNsQyxPQUFPb0MseUJBQXlCLENBQUM3QyxPQUFPLENBQUNTLElBQUksQ0FBQztFQUNoRCxDQUFDLENBQUM7RUFFRixJQUFNeUMsV0FBVyxHQUFHLElBQUExQyx5QkFBYSxFQUFDLFVBQUNDLElBQVksRUFBSTtJQUNqRG1DLG1CQUFtQixDQUFDNUMsT0FBTyxDQUFDUyxJQUFJLENBQUMsR0FBRyxDQUFDbUMsbUJBQW1CLENBQUM1QyxPQUFPLENBQUNTLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQ2xGLENBQUMsQ0FBQztFQUNGLElBQU0wQyxZQUFZLEdBQUcsSUFBQTNDLHlCQUFhLEVBQUMsVUFBQ0MsSUFBWSxFQUFJO0lBQ2xELElBQU0yQyxLQUFLLEdBQUcsQ0FBQ1IsbUJBQW1CLENBQUM1QyxPQUFPLENBQUNTLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQzFELElBQUkyQyxLQUFLLElBQUksQ0FBQyxFQUFFO01BQ2QsT0FBT1IsbUJBQW1CLENBQUM1QyxPQUFPLENBQUNTLElBQUksQ0FBQztNQUN4QyxJQUFJb0MseUJBQXlCLENBQUM3QyxPQUFPLENBQUNTLElBQUksQ0FBQyxFQUFFO1FBQzNDLE9BQU9KLGFBQWEsQ0FBQ0wsT0FBTyxDQUFDUyxJQUFJLENBQUM7UUFDbEMsT0FBT29DLHlCQUF5QixDQUFDN0MsT0FBTyxDQUFDUyxJQUFJLENBQUM7TUFDaEQ7SUFDRixDQUFDLE1BQU07TUFDTG1DLG1CQUFtQixDQUFDNUMsT0FBTyxDQUFDUyxJQUFJLENBQUMsR0FBRzJDLEtBQUs7SUFDM0M7RUFDRixDQUFDLENBQUM7RUFFRjtFQUNBO0VBQ0E7RUFDQSxJQUFNQyxXQUFXLEdBQUcsSUFBQTdDLHlCQUFhLEVBQUMsWUFBSztJQUNyQztJQUNBO0lBQ0FLLHdCQUF3QixDQUFBLENBQUU7SUFDMUJULEtBQUssQ0FBQ3FCLFFBQVEsQ0FBQztNQUNiQyxNQUFNLEVBQUV6QixrQkFBa0I7TUFDMUJvQyxNQUFNLEVBQUUsQ0FBQSxDQUFFO01BQ1ZLLFFBQVEsRUFBRSxDQUFBLENBQUU7TUFDWlksT0FBTyxFQUFFLENBQUEsQ0FBRTtNQUNYQyxVQUFVLEVBQUUsQ0FBQTtJQ2hDVixDRGlDSCxDQUFDO0VBQ0osQ0FBQyxDQUFDO0VBRUYsSUFBTUMsV0FBVyxHQUFHLElBQUFDLDRCQUFnQixFQUFDLFVBQUNDLENBQWEsRUFBSTtJQUNyREEsQ0FBQyxLQUFBLElBQUEsSUFBREEsQ0FBQyxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFEQSxDQUFDLENBQUVDLGNBQWMsQ0FBQSxDQUFFO0lBQ25CTixXQUFXLENBQUEsQ0FBRTtJQUNiaEUsT0FBTyxLQUFBLElBQUEsSUFBUEEsT0FBTyxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFQQSxPQUFPLENBQUEsQ0FBSTtFQUNiLENBQUMsQ0FBQztFQUVGLElBQU11RSxhQUFhLEdBQUcsSUFBQXBELHlCQUFhLEVBQUMsVUFBQ0MsSUFBWSxFQUFTO0lBQ3hELE9BQU8sSUFBQW9ELHVCQUFZLEVBQUN6RCxLQUFLLENBQUMwQixRQUFRLENBQUEsQ0FBRSxDQUFDSixNQUFNLEVBQUVqQixJQUFJLENBQUM7RUFDcEQsQ0FBQyxDQUFDO0VBRUYsSUFBTXFELGNBQWMsR0FBRyxJQUFBdEQseUJBQWEsRUFBQyxVQUFDdUQsUUFBbUIsRUFBeUI7SUFDaEYsSUFBTXJDLE1BQU0sR0FBR3RCLEtBQUssQ0FBQzBCLFFBQVEsQ0FBQSxDQUFFLENBQUNKLE1BQU07SUFDdEMsSUFBSSxDQUFDcUMsUUFBUSxFQUFFLE9BQU9yQyxNQUFNO0lBQzVCLE9BQU9xQyxRQUFRLENBQUNDLE1BQU0sQ0FBc0IsVUFBQ0MsR0FBRyxFQUFFeEQsSUFBSSxFQUFJO01BQ3hEd0QsR0FBRyxDQUFDeEQsSUFBSSxDQUFDLEdBQUcsSUFBQW9ELHVCQUFZLEVBQUNuQyxNQUFNLEVBQUVqQixJQUFJLENBQUM7TUFDdEMsT0FBT3dELEdBQUc7SUFDWixDQUFDLEVBQUUsQ0FBQSxDQUFFLENBQUM7RUFDUixDQUFDLENBQUM7RUFFRixJQUFNQyxjQUFjLEdBQUcsSUFBQTFELHlCQUFhLEVBQUMsVUFBQ2dCLFNBQXFDLEVBQUk7SUFDN0UsSUFBTTJDLFdBQVcsR0FBRzNDLFNBQWdDO0lBQ3BELElBQU1LLElBQUksR0FBR3pCLEtBQUssQ0FBQzBCLFFBQVEsQ0FBQSxDQUFFLENBQUNKLE1BQU07SUFDcEMsSUFBSTBDLGFBQWtDO0lBQ3RDLElBQUlwRCxNQUFNLENBQUNELElBQUksQ0FBQ29ELFdBQVcsQ0FBQyxDQUFDRSxJQUFJLENBQUMsVUFBQ25ELEdBQUc7TUFBQSxPQUFLQSxHQUFHLENBQUNhLFFBQVEsQ0FBQyxHQUFHLENBQUM7SUFBQSxFQUFDLEVBQUU7TUFDN0Q7TUFDQTtNQUNBO01BQ0FxQyxhQUFhLEdBQUd2QyxJQUFJO01BQ3BCLFNBQUF5QyxFQUFBLE1BQUFDLGVBQUEsR0FBMkJ2RCxNQUFNLENBQUN3RCxPQUFPLENBQUNMLFdBQVcsQ0FBQyxFQUFBRyxFQUFBLEdBQUFDLGVBQUEsQ0FBQXZGLE1BQUEsRUFBQXNGLEVBQUEsSUFBRTtRQUFuRCxJQUFBRyxrQkFBQSxPQUFBQyxlQUFBLGFBQUFILGVBQUEsQ0FBQUQsRUFBQTtVQUFPcEQsR0FBRyxHQUFBdUQsa0JBQUE7VUFBRTdDLEtBQUssR0FBQTZDLGtCQUFBO1FBQ3BCTCxhQUFhLEdBQUdsRCxHQUFHLENBQUNhLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FDN0IsSUFBQUMseUJBQWMsRUFBQ29DLGFBQWEsRUFBRWxELEdBQUcsRUFBRVUsS0FBSyxDQUFDLEdBQ3pDLElBQUErQywyQkFBZ0IsRUFBQ1AsYUFBYSxNQUFBbEMsZ0JBQUEsaUJBQUtoQixHQUFHLEVBQUdVLEtBQUssQ0FBRSxDQUFDO01BQ3ZEO0lBQ0YsQ0FBQyxNQUFNO01BQ0x3QyxhQUFhLEdBQUcsSUFBQU8sMkJBQWdCLEVBQUM5QyxJQUFJLEVBQUVzQyxXQUFXLENBQUM7SUFDckQ7SUFDQTVDLFlBQVksQ0FBQzZDLGFBQWEsQ0FBQztJQUMzQmhGLGNBQWMsS0FBQSxJQUFBLElBQWRBLGNBQWMsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBZEEsY0FBYyxDQUFHK0UsV0FBeUMsRUFBRUMsYUFBdUIsQ0FBQztFQUN0RixDQUFDLENBQUM7RUFFRjtFQUNBO0VBQ0EsSUFBSXBELE1BQU0sQ0FBQ0QsSUFBSSxDQUFDSSxzQkFBc0IsQ0FBQ25CLE9BQU8sQ0FBQyxDQUFDaEIsTUFBTSxLQUFLLENBQUMsRUFBRTtJQUM1RG1DLHNCQUFzQixDQUFDbkIsT0FBTyxHQUFHO01BQy9CNEQsYUFBYSxFQUFFQSxhQUEwRDtNQUN6RUUsY0FBYyxFQUFFQSxjQUE0RDtNQUM1RW5DLGFBQWEsRUFBRUEsYUFBMEQ7TUFDekV1QyxjQUFjLEVBQUVBLGNBQTREO01BQzVFYixXQUFXLEVBQVhBO0lDbkNFLENEb0NIO0VBQ0g7RUFFQSxJQUFNdUIsWUFBWSxHQUFHLElBQUFDLGNBQU8sRUFDMUI7SUFBQSxPQUFPO01BQ0x4QixXQUFXLEVBQVhBLFdBQVc7TUFDWE8sYUFBYSxFQUFFQSxhQUEwRDtNQUN6RUUsY0FBYyxFQUFFQSxjQUE0RDtNQUM1RUksY0FBYyxFQUFFQSxjQUE0RDtNQUM1RXZDLGFBQWEsRUFBRUE7SUNyQ2pCLENEc0NDO0VBQUEsQ0FBQyxFQUNGLENBQ0UwQixXQUFXLEVBQ1hPLGFBQWEsRUFDYkUsY0FBYyxFQUNkSSxjQUFjLEVBQ2R2QyxhQUFhLENBQ2QsQ0FDRjtFQUVEO0VBQ0E7RUFDQSxJQUFNbUQsS0FBSyxHQUFHMUUsS0FBSyxDQUFDMEIsUUFBUSxDQUFBLENBQUU7RUFFOUIsT0FBTztJQUNMSixNQUFNLEVBQUVvRCxLQUFLLENBQUNwRCxNQUFNO0lBQ3BCVyxNQUFNLEVBQUV5QyxLQUFLLENBQUN6QyxNQUFNO0lBQ3BCSyxRQUFRLEVBQUVvQyxLQUFLLENBQUNwQyxRQUFRO0lBQ3hCWSxPQUFPLEVBQUV3QixLQUFLLENBQUN4QixPQUFPO0lBQ3RCO0lBQ0F5QixVQUFVLEVBQUUxRSxhQUFhLENBQUNMLE9BQU87SUFDakNnRCxhQUFhLEVBQWJBLGFBQWE7SUFDYjFCLHNCQUFzQixFQUF0QkEsc0JBQXNCO0lBQ3RCRixzQkFBc0IsRUFBdEJBLHNCQUFzQjtJQUN0QmIsa0JBQWtCLEVBQWxCQSxrQkFBa0I7SUFDbEJJLHNCQUFzQixFQUF0QkEsc0JBQXNCO0lBQ3RCRSx3QkFBd0IsRUFBeEJBLHdCQUF3QjtJQUN4QmMsYUFBYSxFQUFiQSxhQUFhO0lBQ2JRLGFBQWEsRUFBYkEsYUFBYTtJQUNiSyxlQUFlLEVBQWZBLGVBQWU7SUFDZjBCLGNBQWMsRUFBZEEsY0FBYztJQUNkTixhQUFhLEVBQWJBLGFBQWE7SUFDYkUsY0FBYyxFQUFFQSxjQUE0RDtJQUM1RWhCLGFBQWEsRUFBYkEsYUFBYTtJQUNiRyxlQUFlLEVBQWZBLGVBQWU7SUFDZkMsV0FBVyxFQUFYQSxXQUFXO0lBQ1hDLFlBQVksRUFBWkEsWUFBWTtJQUNaSyxXQUFXLEVBQVhBLFdBQVc7SUFDWEgsV0FBVyxFQUFYQSxXQUFXO0lBQ1h1QixZQUFZLEVBQVpBLFlBQVk7SUFDWnhFLEtBQUssRUFBTEEsS0FBSztJQUNMNEUsZ0JBQWdCLEVBQUUsU0FBbEJBLGdCQUFnQkEsQ0FBQTtNQUFBLE9BQVEvRSxrQkFBa0I7SUFBQTtFQ3pDMUMsQ0QwQ0Q7QUFDSCxDQUFDO0FBQUMsSUFBQWdGLFFBQUEsR0FBQXBHLE9BQUEsY0FFYUQsV0FBVyIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiaW1wb3J0IHsgdXNlTWVtbywgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQDFtb25leS9ob29rcy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgeyBtZXJnZVZhbHVlc1BhdGNoLCByZXNvbHZlVmFsdWUsIHNldE5lc3RlZFZhbHVlIH0gZnJvbSAnLi4vcGF0aFV0aWxzJztcbmltcG9ydCB7IGNyZWF0ZUZvcm1TdG9yZSwgc2FtZVZhbGlkYXRpb25Ob2RlIH0gZnJvbSAnLi4vZm9ybVN0b3JlJztcbmV4cG9ydCBjb25zdCB1c2VGb3JtQ29yZSA9IChjb25maWcgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHsgaW5pdGlhbFZhbHVlcyA9IHt9LCBvblZhbHVlc0NoYW5nZSwgb25SZXNldCwgc2l6ZSA9ICdsYXJnZScsIGxhYmVsQWxpZ24gPSAnbGVmdCcsIGRpc2FibGVkID0gZmFsc2UsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScsIH0gPSBjb25maWc7XG4gICAgLy8gaW5pdGlhbFZhbHVlcyBpcyBNT1VOVC1PTkxZICh0aGUgZG9jdW1lbnRlZCBjb250cmFjdCk6IGZyZWV6ZSB0aGUgZmlyc3RcbiAgICAvLyByZW5kZXIncyB2YWx1ZSBzbyByZXNldEZpZWxkcyBhbHdheXMgcmVzdG9yZXMgdGhlIG1vdW50LXRpbWUgZGVmYXVsdHMsXG4gICAgLy8gZXZlbiB3aGVuIHRoZSBjb25zdW1lciByZS1yZW5kZXJzIHdpdGggYSBkaWZmZXJlbnQgKGUuZy4gY29udHJvbGxlZClcbiAgICAvLyBpbml0aWFsVmFsdWVzIG9iamVjdC5cbiAgICBjb25zdCBpbml0aWFsVmFsdWVzUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGlmIChpbml0aWFsVmFsdWVzUmVmLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgaW5pdGlhbFZhbHVlc1JlZi5jdXJyZW50ID0gaW5pdGlhbFZhbHVlcztcbiAgICB9XG4gICAgY29uc3QgbW91bnRJbml0aWFsVmFsdWVzID0gaW5pdGlhbFZhbHVlc1JlZi5jdXJyZW50O1xuICAgIC8vIEFsbCB2b2xhdGlsZSBmb3JtIHN0YXRlIGxpdmVzIGluIGFuIGV4dGVybmFsIHN0b3JlLCBOT1QgUmVhY3Qgc3RhdGUg4oCUIGFcbiAgICAvLyBrZXlzdHJva2UgbXVzdCBuZXZlciByZS1yZW5kZXIgdGhlIGNvbXBvbmVudCB0aGF0IG93bnMgdGhlIGZvcm0uIEZpZWxkc1xuICAgIC8vIGFuZCB3YXRjaGVycyBzdWJzY3JpYmUgd2l0aCBwZXItZmllbGQgc2VsZWN0b3JzICh1c2VTdG9yZVNlbGVjdG9yKTsgZXZlcnlcbiAgICAvLyBtdXRhdG9yIGJlbG93IHJlYWRzIHRoZSBMQVRFU1Qgc3RhdGUgdmlhIHN0b3JlLmdldFN0YXRlKCksIHdoaWNoIGFsc29cbiAgICAvLyBrZWVwcyBtdWx0aXBsZSB3cml0ZXMgaW4gdGhlIHNhbWUgdGljayB2aXNpYmxlIHRvIGVhY2ggb3RoZXIuXG4gICAgY29uc3Qgc3RvcmVSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgaWYgKHN0b3JlUmVmLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgc3RvcmVSZWYuY3VycmVudCA9IGNyZWF0ZUZvcm1TdG9yZShtb3VudEluaXRpYWxWYWx1ZXMpO1xuICAgIH1cbiAgICBjb25zdCBzdG9yZSA9IHN0b3JlUmVmLmN1cnJlbnQ7XG4gICAgLy8gTGl2ZSBydWxlIHJlZ2lzdHJ5IOKAlCBPTkUgc3RhYmxlIG9iamVjdCBtdXRhdGVkIGluIHBsYWNlLiBSZWdpc3RyYXRpb24gbXVzdFxuICAgIC8vIG5vdCB0cmlnZ2VyIHJlbmRlcnMsIGFuZCBzdWJtaXQtdGltZSB2YWxpZGF0aW9uIG11c3QgYWx3YXlzIHJlYWQgdGhlIGxhdGVzdFxuICAgIC8vIHJ1bGVzICh0aGV5IGNhbiBjaGFuZ2UgYmV0d2VlbiByZW5kZXJzLCBlLmcuIGEgY29uZGl0aW9uYWwgYHJlcXVpcmVkYCkuXG4gICAgY29uc3QgZmllbGRSdWxlc1JlZiA9IHVzZVJlZih7fSk7XG4gICAgLy8gUGVyLWZpZWxkIHZhbGlkYXRpb24gcnVuIGVwb2Nocy4gRVZFUlkgdmFsaWRhdGlvbiBydW4gKHN5bmMgb3IgYXN5bmMpXG4gICAgLy8gYnVtcHMgaXRzIGZpZWxkJ3MgZXBvY2g7IGFuIGFzeW5jIHJ1biByZS1jaGVja3MgaXRzIGNhcHR1cmVkIGVwb2NoIGF0XG4gICAgLy8gc2V0dGxlIHRpbWUgYW5kIGRpc2NhcmRzIGEgU1RBTEUgb3V0Y29tZSDigJQgdGhlIHNhbWUgcHJvdGVjdGlvbiBhc1xuICAgIC8vIHJjLWZpZWxkLWZvcm0ncyB2YWxpZGF0ZVByb21pc2UgaWRlbnRpdHkgY2hlY2suIFdpdGhvdXQgaXQsIGEgc2xvdyBhc3luY1xuICAgIC8vIHZhbGlkYXRvciAoZS5nLiBhIHNlcnZlci1zaWRlIHVuaXF1ZW5lc3MgY2hlY2sgc3RhcnRlZCBvbiBibHVyKSBjb3VsZFxuICAgIC8vIHNldHRsZSBhZnRlciB0aGUgdXNlciBhbHJlYWR5IGZpeGVkIHRoZSB2YWx1ZSBhbmQgc3RhbXAgYSBzdGFsZSBlcnJvclxuICAgIC8vIG92ZXIgYSBuZXdlciwgcGFzc2luZyByZXN1bHQuXG4gICAgY29uc3QgdmFsaWRhdGlvbkVwb2NoUmVmID0gdXNlUmVmKHt9KTtcbiAgICBjb25zdCBiZWdpblZhbGlkYXRpb25SdW4gPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHQgPSAodmFsaWRhdGlvbkVwb2NoUmVmLmN1cnJlbnRbbmFtZV0gfHwgMCkgKyAxO1xuICAgICAgICB2YWxpZGF0aW9uRXBvY2hSZWYuY3VycmVudFtuYW1lXSA9IG5leHQ7XG4gICAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pO1xuICAgIGNvbnN0IGlzVmFsaWRhdGlvblJ1bkN1cnJlbnQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBlcG9jaCkgPT4gdmFsaWRhdGlvbkVwb2NoUmVmLmN1cnJlbnRbbmFtZV0gPT09IGVwb2NoKTtcbiAgICAvLyBCdW1wIChuZXZlciBkZWxldGUg4oCUIGRlbGV0aW9uIHdvdWxkIGxldCBhIG5ldyBydW4gcmUtaXNzdWUgYW4gb2xkIGVwb2NoXG4gICAgLy8gbnVtYmVyIGFuZCBjb2xsaWRlIHdpdGggYSBzdGlsbC1pbi1mbGlnaHQgcHJlLXJlc2V0IHJ1bikuXG4gICAgY29uc3QgaW52YWxpZGF0ZVZhbGlkYXRpb25SdW5zID0gdXNlTWVtb2l6ZWRGbigobmFtZXMpID0+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IG5hbWVzICE9PSBudWxsICYmIG5hbWVzICE9PSB2b2lkIDAgPyBuYW1lcyA6IE9iamVjdC5rZXlzKHZhbGlkYXRpb25FcG9jaFJlZi5jdXJyZW50KTtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uRXBvY2hSZWYuY3VycmVudFtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW9uRXBvY2hSZWYuY3VycmVudFtrZXldICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIEluc3RhbmNlIGhhbmRlZCB0byBmdW5jdGlvbi1mb3JtIHJ1bGVzLiBEZWZhdWx0cyB0byB0aGUgY29yZSBtZXRob2RzXG4gICAgLy8gKGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgdGhpcyBob29rIGJvZHkpOyB1c2VGb3JtIHVwZ3JhZGVzIGl0IHRvIHRoZSBGVUxMXG4gICAgLy8gZm9ybSBpbnN0YW5jZSBvbmNlIGl0IGhhcyBidWlsdCBvbmUsIHNvIHJ1bGVzIHNlZSB0aGUgc2FtZSBjb250ZXh0IG9uXG4gICAgLy8gZXZlcnkgcGF0aCAoaW50ZXJhY3RpdmUsIGJsdXIsIHN1Ym1pdCkuXG4gICAgY29uc3QgcnVsZUNvbnRleHRJbnN0YW5jZVJlZiA9IHVzZVJlZih7fSk7XG4gICAgY29uc3Qgc2V0UnVsZUNvbnRleHRJbnN0YW5jZSA9IHVzZU1lbW9pemVkRm4oKGluc3RhbmNlKSA9PiB7XG4gICAgICAgIHJ1bGVDb250ZXh0SW5zdGFuY2VSZWYuY3VycmVudCA9IGluc3RhbmNlO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldFJ1bGVDb250ZXh0SW5zdGFuY2UgPSB1c2VNZW1vaXplZEZuKCgpID0+IHJ1bGVDb250ZXh0SW5zdGFuY2VSZWYuY3VycmVudCk7XG4gICAgY29uc3QgY29tbWl0VmFsdWVzID0gdXNlTWVtb2l6ZWRGbigobmV3VmFsdWVzKSA9PiB7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHsgdmFsdWVzOiBuZXdWYWx1ZXMgfSk7XG4gICAgfSk7XG4gICAgLy8gTk9URTogc2V0dGluZyBhIHZhbHVlIGRvZXMgTk9UIHRvdWNoIHRoZSBmaWVsZCdzIGVycm9yIOKAlCBlcnJvcnMgYXJlXG4gICAgLy8gY2xlYXJlZCBleGNsdXNpdmVseSBieSB2YWxpZGF0aW9uIHJ1bnMgKHdob3NlIHRpbWluZyBmb2xsb3dzIHRoZVxuICAgIC8vIHZhbGlkYXRlVHJpZ2dlciBjb25maWcpLCBzbyBhbiBvbkJsdXItb25seSBmaWVsZCBrZWVwcyBpdHMgZXJyb3Igd2hpbGVcbiAgICAvLyB0aGUgdXNlciBpcyBzdGlsbCB0eXBpbmcuXG4gICAgY29uc3Qgc2V0RmllbGRWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcztcbiAgICAgICAgY29uc3QgbmV3VmFsdWVzID0gbmFtZS5pbmNsdWRlcygnLicpXG4gICAgICAgICAgICA/IHNldE5lc3RlZFZhbHVlKHByZXYsIG5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogdmFsdWUgfSk7XG4gICAgICAgIGNvbW1pdFZhbHVlcyhuZXdWYWx1ZXMpO1xuICAgICAgICBvblZhbHVlc0NoYW5nZSA9PT0gbnVsbCB8fCBvblZhbHVlc0NoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25WYWx1ZXNDaGFuZ2UoeyBbbmFtZV06IHZhbHVlIH0sIG5ld1ZhbHVlcyk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRFcnJvciA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHN0b3JlLmdldFN0YXRlKCkuZXJyb3JzO1xuICAgICAgICBpZiAoZXJyb3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghZXJyb3JzW25hbWVdKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIGVycm9ycyk7XG4gICAgICAgICAgICBkZWxldGUgbmV3RXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyBlcnJvcnM6IG5ld0Vycm9ycyB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2FtZVZhbGlkYXRpb25Ob2RlKGVycm9yc1tuYW1lXSwgZXJyb3IpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IGVycm9yczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBlcnJvcnMpLCB7IFtuYW1lXTogZXJyb3IgfSkgfSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRXYXJuaW5nID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgd2FybmluZykgPT4ge1xuICAgICAgICBjb25zdCB3YXJuaW5ncyA9IHN0b3JlLmdldFN0YXRlKCkud2FybmluZ3M7XG4gICAgICAgIGlmICh3YXJuaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoIXdhcm5pbmdzW25hbWVdKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IG5ld1dhcm5pbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgd2FybmluZ3MpO1xuICAgICAgICAgICAgZGVsZXRlIG5ld1dhcm5pbmdzW25hbWVdO1xuICAgICAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB3YXJuaW5nczogbmV3V2FybmluZ3MgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNhbWVWYWxpZGF0aW9uTm9kZSh3YXJuaW5nc1tuYW1lXSwgd2FybmluZykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHsgd2FybmluZ3M6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgd2FybmluZ3MpLCB7IFtuYW1lXTogd2FybmluZyB9KSB9KTtcbiAgICB9KTtcbiAgICAvLyBNb3VudGVkLWluc3RhbmNlIGNvdW50cyBwZXIgZmllbGQgbmFtZSwgcGx1cyB3aGV0aGVyIHRoZSBDVVJSRU5UIHJ1bGVzXG4gICAgLy8gcmVnaXN0cmF0aW9uIHdhcyBtYWRlIGJ5IGEgY291bnRlZCBpbnN0YW5jZS4gUnVsZXMgYXJlIHJlbW92ZWQgb25seSB3aGVuXG4gICAgLy8gdGhlIExBU1QgbW91bnRlZCBpbnN0YW5jZSBmb3IgYSBuYW1lIHJlbGVhc2VzOiB3aXRoIHR3byBzYW1lLW5hbWUgZmllbGRzXG4gICAgLy8gbW91bnRlZCwgdGhlIGZpcnN0IHVubW91bnQgbXVzdCBub3Qgd2lwZSB0aGUgcmVnaXN0cmF0aW9uIHdoaWxlIHRoZVxuICAgIC8vIHN1cnZpdm9yIChwb3NzaWJseSBtZW1vLWJhaWxlZCwgc28gbm90IHJlLXJlbmRlcmluZyB0byByZS1yZWdpc3Rlcikgc3RpbGxcbiAgICAvLyByZWxpZXMgb24gaXQgZm9yIHN1Ym1pdC10aW1lIHZhbGlkYXRpb24uIEEgTUFOVUFMIHJlZ2lzdGVyRmllbGQgKG5vXG4gICAgLy8gbW91bnRlZCBob2xkZXIsIG93bmVkPWZhbHNlKSBzdXJ2aXZlcyB0aGUgdW5tb3VudCBvZiBwaWdneWJhY2tpbmdcbiAgICAvLyBpbnN0YW5jZXMgdGhhdCBuZXZlciByZWdpc3RlcmVkIHJ1bGVzIHRoZW1zZWx2ZXMuXG4gICAgLy8gTk9URTogY2FsbGVycyBtdXN0IHJldGFpbiBCRUZPUkUgcmVnaXN0ZXJpbmcgKHJldGFpbiBlZmZlY3QgZGVjbGFyZWRcbiAgICAvLyBmaXJzdCksIG9yIHRoZSByZWdpc3RyYXRpb24gaXMgbWlzY2xhc3NpZmllZCBhcyBtYW51YWwgYW5kIGxlYWtzLlxuICAgIGNvbnN0IGZpZWxkTW91bnRDb3VudHNSZWYgPSB1c2VSZWYoe30pO1xuICAgIGNvbnN0IGZpZWxkUmVnaXN0cmF0aW9uT3duZWRSZWYgPSB1c2VSZWYoe30pO1xuICAgIGNvbnN0IHJlZ2lzdGVyRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBydWxlcykgPT4ge1xuICAgICAgICBmaWVsZFJ1bGVzUmVmLmN1cnJlbnRbbmFtZV0gPSBydWxlcztcbiAgICAgICAgZmllbGRSZWdpc3RyYXRpb25Pd25lZFJlZi5jdXJyZW50W25hbWVdID0gKGZpZWxkTW91bnRDb3VudHNSZWYuY3VycmVudFtuYW1lXSB8fCAwKSA+IDA7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RmllbGRSdWxlcyA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkUnVsZXNSZWYuY3VycmVudFtuYW1lXTtcbiAgICB9KTtcbiAgICBjb25zdCB1bnJlZ2lzdGVyRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBmaWVsZFJ1bGVzUmVmLmN1cnJlbnRbbmFtZV07XG4gICAgICAgIGRlbGV0ZSBmaWVsZFJlZ2lzdHJhdGlvbk93bmVkUmVmLmN1cnJlbnRbbmFtZV07XG4gICAgfSk7XG4gICAgY29uc3QgcmV0YWluRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIGZpZWxkTW91bnRDb3VudHNSZWYuY3VycmVudFtuYW1lXSA9IChmaWVsZE1vdW50Q291bnRzUmVmLmN1cnJlbnRbbmFtZV0gfHwgMCkgKyAxO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlbGVhc2VGaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgY291bnQgPSAoZmllbGRNb3VudENvdW50c1JlZi5jdXJyZW50W25hbWVdIHx8IDApIC0gMTtcbiAgICAgICAgaWYgKGNvdW50IDw9IDApIHtcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZE1vdW50Q291bnRzUmVmLmN1cnJlbnRbbmFtZV07XG4gICAgICAgICAgICBpZiAoZmllbGRSZWdpc3RyYXRpb25Pd25lZFJlZi5jdXJyZW50W25hbWVdKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGZpZWxkUnVsZXNSZWYuY3VycmVudFtuYW1lXTtcbiAgICAgICAgICAgICAgICBkZWxldGUgZmllbGRSZWdpc3RyYXRpb25Pd25lZFJlZi5jdXJyZW50W25hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZmllbGRNb3VudENvdW50c1JlZi5jdXJyZW50W25hbWVdID0gY291bnQ7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBQdXJlIHN0YXRlIEFQSTogdGhlIGltcGVyYXRpdmUgcmVzZXRGaWVsZHMoKVxuICAgIC8vIG5ldmVyIGZpcmVzIG9uUmVzZXQuIFRoZSBjYWxsYmFjayBiZWxvbmdzIHRvIHRoZSByZXNldCBBQ1RJT04gbGF5ZXJcbiAgICAvLyAoc3VibWl0dGVyIGJ1dHRvbiAvIG5hdGl2ZSByZXNldCBldmVudCksIHdoaWNoIGZpcmVzIGl0IGV4YWN0bHkgb25jZS5cbiAgICBjb25zdCByZXNldEZpZWxkcyA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICAvLyBJbnZhbGlkYXRlIGluLWZsaWdodCBhc3luYyB2YWxpZGF0aW9uIHJ1bnMg4oCUIHRoZWlyIHJlc3VsdHMgYmVsb25nIHRvXG4gICAgICAgIC8vIHByZS1yZXNldCB2YWx1ZXMgYW5kIG11c3Qgbm90IHN0YW1wIGVycm9ycyBvbnRvIHRoZSByZXNldCBmb3JtLlxuICAgICAgICBpbnZhbGlkYXRlVmFsaWRhdGlvblJ1bnMoKTtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdmFsdWVzOiBtb3VudEluaXRpYWxWYWx1ZXMsXG4gICAgICAgICAgICBlcnJvcnM6IHt9LFxuICAgICAgICAgICAgd2FybmluZ3M6IHt9LFxuICAgICAgICAgICAgdG91Y2hlZDoge30sXG4gICAgICAgICAgICB2YWxpZGF0aW5nOiB7fSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXNldEZpZWxkcygpO1xuICAgICAgICBvblJlc2V0ID09PSBudWxsIHx8IG9uUmVzZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUmVzZXQoKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZFZhbHVlID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZVZhbHVlKHN0b3JlLmdldFN0YXRlKCkudmFsdWVzLCBuYW1lKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZHNWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHN0b3JlLmdldFN0YXRlKCkudmFsdWVzO1xuICAgICAgICBpZiAoIW5hbWVMaXN0KVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnJlZHVjZSgoYWNjLCBuYW1lKSA9PiB7XG4gICAgICAgICAgICBhY2NbbmFtZV0gPSByZXNvbHZlVmFsdWUodmFsdWVzLCBuYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZHNWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5ld1ZhbHVlcykgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZXNQYXRjaCA9IG5ld1ZhbHVlcztcbiAgICAgICAgY29uc3QgcHJldiA9IHN0b3JlLmdldFN0YXRlKCkudmFsdWVzO1xuICAgICAgICBsZXQgdXBkYXRlZFZhbHVlcztcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlc1BhdGNoKS5zb21lKChrZXkpID0+IGtleS5pbmNsdWRlcygnLicpKSkge1xuICAgICAgICAgICAgLy8gRG90LXBhdGgga2V5cyB3cml0ZSBpbnRvIHRoZSBORVNURUQgc3RydWN0dXJlICh0aGUgc2V0RmllbGRWYWx1ZVxuICAgICAgICAgICAgLy8gY29udHJhY3QpIOKAlCBhIHNoYWxsb3cgbWVyZ2Ugd291bGQgbGFuZCB0aGVtIGFzIGxpdGVyYWwgdG9wLWxldmVsXG4gICAgICAgICAgICAvLyBrZXlzIHRoYXQgdGhlIG5lc3RlZC1hd2FyZSByZWFkZXJzIG5ldmVyIGZpbmQuXG4gICAgICAgICAgICB1cGRhdGVkVmFsdWVzID0gcHJldjtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlc1BhdGNoKSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZWRWYWx1ZXMgPSBrZXkuaW5jbHVkZXMoJy4nKVxuICAgICAgICAgICAgICAgICAgICA/IHNldE5lc3RlZFZhbHVlKHVwZGF0ZWRWYWx1ZXMsIGtleSwgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIDogbWVyZ2VWYWx1ZXNQYXRjaCh1cGRhdGVkVmFsdWVzLCB7IFtrZXldOiB2YWx1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVwZGF0ZWRWYWx1ZXMgPSBtZXJnZVZhbHVlc1BhdGNoKHByZXYsIHZhbHVlc1BhdGNoKTtcbiAgICAgICAgfVxuICAgICAgICBjb21taXRWYWx1ZXModXBkYXRlZFZhbHVlcyk7XG4gICAgICAgIG9uVmFsdWVzQ2hhbmdlID09PSBudWxsIHx8IG9uVmFsdWVzQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblZhbHVlc0NoYW5nZSh2YWx1ZXNQYXRjaCwgdXBkYXRlZFZhbHVlcyk7XG4gICAgfSk7XG4gICAgLy8gU2VlZCB0aGUgcnVsZS1jb250ZXh0IGluc3RhbmNlIHdpdGggdGhlIGNvcmUgbWV0aG9kcyBleGFjdGx5IG9uY2Ug4oCUXG4gICAgLy8gdXNlRm9ybSdzIHJpY2hlciBpbnN0YW5jZSBtdXN0IG5vdCBiZSBkb3duZ3JhZGVkIG9uIGxhdGVyIHJlbmRlcnMuXG4gICAgaWYgKE9iamVjdC5rZXlzKHJ1bGVDb250ZXh0SW5zdGFuY2VSZWYuY3VycmVudCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJ1bGVDb250ZXh0SW5zdGFuY2VSZWYuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGdldEZpZWxkVmFsdWU6IGdldEZpZWxkVmFsdWUsXG4gICAgICAgICAgICBnZXRGaWVsZHNWYWx1ZTogZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgICAgICBzZXRGaWVsZFZhbHVlOiBzZXRGaWVsZFZhbHVlLFxuICAgICAgICAgICAgc2V0RmllbGRzVmFsdWU6IHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICAgICAgcmVzZXRGaWVsZHMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKHtcbiAgICAgICAgcmVzZXRGaWVsZHMsXG4gICAgICAgIGdldEZpZWxkVmFsdWU6IGdldEZpZWxkVmFsdWUsXG4gICAgICAgIGdldEZpZWxkc1ZhbHVlOiBnZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRzVmFsdWU6IHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlOiBzZXRGaWVsZFZhbHVlLFxuICAgIH0pLCBbXG4gICAgICAgIHJlc2V0RmllbGRzLFxuICAgICAgICBnZXRGaWVsZFZhbHVlLFxuICAgICAgICBnZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgXSk7XG4gICAgLy8gUmVuZGVyLXRpbWUgc25hcHNob3Qg4oCUIGtlcHQgZm9yIHRoZSBVc2VGb3JtQ29yZVJldHVybiBjb250cmFjdC4gUmVhY3RpdmVcbiAgICAvLyBjb25zdW1lcnMgbXVzdCBnbyB0aHJvdWdoIHRoZSBzdG9yZSwgbmV2ZXIgdGhyb3VnaCB0aGVzZSBmaWVsZHMuXG4gICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlczogc3RhdGUudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IHN0YXRlLmVycm9ycyxcbiAgICAgICAgd2FybmluZ3M6IHN0YXRlLndhcm5pbmdzLFxuICAgICAgICB0b3VjaGVkOiBzdGF0ZS50b3VjaGVkLFxuICAgICAgICAvLyBMaXZlIHJlZ2lzdHJ5IOKAlCBzdGFibGUgaWRlbnRpdHksIG11dGF0ZWQgaW4gcGxhY2UgYnkgcmVnaXN0ZXIvdW5yZWdpc3Rlci5cbiAgICAgICAgZmllbGRSdWxlczogZmllbGRSdWxlc1JlZi5jdXJyZW50LFxuICAgICAgICBnZXRGaWVsZFJ1bGVzLFxuICAgICAgICBnZXRSdWxlQ29udGV4dEluc3RhbmNlLFxuICAgICAgICBzZXRSdWxlQ29udGV4dEluc3RhbmNlLFxuICAgICAgICBiZWdpblZhbGlkYXRpb25SdW4sXG4gICAgICAgIGlzVmFsaWRhdGlvblJ1bkN1cnJlbnQsXG4gICAgICAgIGludmFsaWRhdGVWYWxpZGF0aW9uUnVucyxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcixcbiAgICAgICAgc2V0RmllbGRXYXJuaW5nLFxuICAgICAgICBzZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWU6IGdldEZpZWxkc1ZhbHVlLFxuICAgICAgICByZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHJldGFpbkZpZWxkLFxuICAgICAgICByZWxlYXNlRmllbGQsXG4gICAgICAgIGhhbmRsZVJlc2V0LFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZm9ybUluc3RhbmNlLFxuICAgICAgICBzdG9yZSxcbiAgICAgICAgZ2V0SW5pdGlhbFZhbHVlczogKCkgPT4gbW91bnRJbml0aWFsVmFsdWVzLFxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ybUNvcmU7Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|