@1money/component-ui 0.0.74 → 0.0.76
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/Dialog/Dialog.js +7 -39
- package/es/components/Dialog/constants.d.ts +0 -3
- package/es/components/Dialog/constants.js +1 -4
- package/es/components/Dialog/style/Dialog.css +0 -21
- package/es/components/ProForm/ProForm.js +46 -33
- package/es/components/ProForm/ProFormDependency.js +6 -16
- package/es/components/ProForm/ProFormItem.js +5 -7
- package/es/components/ProForm/ProFormList.js +112 -40
- package/es/components/ProForm/core/constants.d.ts +2 -0
- package/es/components/ProForm/core/constants.js +7 -1
- package/es/components/ProForm/core/devWarning.d.ts +3 -0
- package/es/components/ProForm/core/devWarning.js +22 -0
- package/es/components/ProForm/core/formStore.d.ts +10 -2
- package/es/components/ProForm/core/formStore.js +21 -2
- package/es/components/ProForm/core/hooks/useForm.js +246 -103
- package/es/components/ProForm/core/hooks/useFormCore.js +134 -28
- package/es/components/ProForm/core/interface.d.ts +124 -49
- package/es/components/ProForm/core/runRules.d.ts +44 -12
- package/es/components/ProForm/core/runRules.js +584 -133
- package/es/components/ProForm/core/useFormItem.d.ts +6 -7
- package/es/components/ProForm/core/useFormItem.js +44 -22
- package/es/components/ProForm/core/validationError.d.ts +13 -0
- package/es/components/ProForm/core/validationError.js +29 -0
- package/es/components/ProForm/fields/ProFormCheckboxGroup.js +19 -5
- package/es/components/ProForm/fields/ProFormFieldSet.js +51 -12
- package/es/components/ProForm/fields/ProFormRadioGroup.js +8 -3
- package/es/components/ProForm/fields/ProFormSelect.js +13 -7
- package/es/components/ProForm/fields/createProFormField.js +18 -25
- package/es/components/ProForm/hooks/useFieldRequest.js +10 -8
- package/es/components/ProForm/index.d.ts +2 -1
- package/es/components/ProForm/index.js +4 -1
- package/es/components/ProForm/interface.d.ts +31 -40
- package/es/components/ProForm/layouts/QueryFilter.js +24 -16
- package/es/components/ProForm/style/ProForm.css +0 -1
- package/es/components/ProForm/utils.d.ts +8 -0
- package/es/components/ProForm/utils.js +51 -3
- package/es/components/Table/core/useTableSetup.js +2 -2
- package/es/components/Table/interface.d.ts +1 -1
- package/es/index.css +1 -1
- package/lib/components/Dialog/Dialog.js +6 -38
- package/lib/components/Dialog/constants.d.ts +0 -3
- package/lib/components/Dialog/constants.js +1 -4
- package/lib/components/Dialog/style/Dialog.css +0 -21
- package/lib/components/ProForm/ProForm.js +45 -32
- package/lib/components/ProForm/ProFormDependency.js +5 -15
- package/lib/components/ProForm/ProFormItem.js +5 -7
- package/lib/components/ProForm/ProFormList.js +110 -38
- package/lib/components/ProForm/core/constants.d.ts +2 -0
- package/lib/components/ProForm/core/constants.js +8 -2
- package/lib/components/ProForm/core/devWarning.d.ts +3 -0
- package/lib/components/ProForm/core/devWarning.js +29 -0
- package/lib/components/ProForm/core/formStore.d.ts +10 -2
- package/lib/components/ProForm/core/formStore.js +23 -2
- package/lib/components/ProForm/core/hooks/useForm.js +242 -99
- package/lib/components/ProForm/core/hooks/useFormCore.js +133 -27
- package/lib/components/ProForm/core/interface.d.ts +124 -49
- package/lib/components/ProForm/core/runRules.d.ts +44 -12
- package/lib/components/ProForm/core/runRules.js +587 -133
- package/lib/components/ProForm/core/useFormItem.d.ts +6 -7
- package/lib/components/ProForm/core/useFormItem.js +43 -21
- package/lib/components/ProForm/core/validationError.d.ts +13 -0
- package/lib/components/ProForm/core/validationError.js +36 -0
- package/lib/components/ProForm/fields/ProFormCheckboxGroup.js +18 -4
- package/lib/components/ProForm/fields/ProFormFieldSet.js +51 -12
- package/lib/components/ProForm/fields/ProFormRadioGroup.js +7 -2
- package/lib/components/ProForm/fields/ProFormSelect.js +13 -7
- package/lib/components/ProForm/fields/createProFormField.js +18 -25
- package/lib/components/ProForm/hooks/useFieldRequest.js +10 -8
- package/lib/components/ProForm/index.d.ts +2 -1
- package/lib/components/ProForm/index.js +10 -1
- package/lib/components/ProForm/interface.d.ts +31 -40
- package/lib/components/ProForm/layouts/QueryFilter.js +24 -16
- package/lib/components/ProForm/style/ProForm.css +0 -1
- package/lib/components/ProForm/utils.d.ts +8 -0
- package/lib/components/ProForm/utils.js +52 -3
- package/lib/components/Table/core/useTableSetup.js +2 -2
- package/lib/components/Table/interface.d.ts +1 -1
- package/lib/index.css +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server/examples.generated.json +42 -36
- package/scripts/mcp-server/index.generated.json +23 -67
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
1
2
|
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
2
3
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
3
4
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
@@ -30,6 +31,8 @@ var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, gene
|
|
|
30
31
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
31
32
|
});
|
|
32
33
|
};
|
|
34
|
+
import { resolveValue } from './pathUtils';
|
|
35
|
+
import { devWarnOnce } from './devWarning';
|
|
33
36
|
function isThenable(value) {
|
|
34
37
|
return value !== null && _typeof(value) === 'object' && typeof value.then === 'function';
|
|
35
38
|
}
|
|
@@ -38,75 +41,534 @@ function isEmptyValue(value) {
|
|
|
38
41
|
return value === undefined || value === null || value === '' || Array.isArray(value) && value.length === 0;
|
|
39
42
|
}
|
|
40
43
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* Submit-time validation bypasses this filter and runs every rule.
|
|
44
|
+
* Coerce a thrown/rejected reason into displayable failure content:
|
|
45
|
+
* a non-empty Error.message or a non-empty plain string — otherwise null
|
|
46
|
+
* (caller picks its fallback). Shared with the form-level last-resort nets.
|
|
45
47
|
*/
|
|
46
|
-
export function
|
|
48
|
+
export function coerceFailureReason(reason) {
|
|
49
|
+
if (reason instanceof Error && reason.message) return reason.message;
|
|
50
|
+
if (typeof reason === 'string' && reason) return reason;
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Failure message for a rejected/thrown custom validator:
|
|
55
|
+
* Error.message → plain string reason → rule.message → generic fallback.
|
|
56
|
+
*/
|
|
57
|
+
function resolveFailureMessage(reason, rule) {
|
|
58
|
+
var _a;
|
|
59
|
+
return (_a = coerceFailureReason(reason)) !== null && _a !== void 0 ? _a : rule.message || 'Validation failed';
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Resolve function-form rules into static rules. The
|
|
63
|
+
* context exposes the value snapshot the run was invoked with; function rules
|
|
64
|
+
* must be cheap and side-effect free — they may be resolved more than once
|
|
65
|
+
* per validation pass.
|
|
66
|
+
*/
|
|
67
|
+
export function resolveRules(rules, values, instance) {
|
|
68
|
+
// Fast path: no function rules → nothing to resolve, no ctx allocation.
|
|
69
|
+
// This also makes the engine-internal re-resolution of already-resolved
|
|
70
|
+
// arrays free.
|
|
71
|
+
if (!rules.some(function (rule) {
|
|
72
|
+
return typeof rule === 'function';
|
|
73
|
+
})) {
|
|
74
|
+
return rules;
|
|
75
|
+
}
|
|
76
|
+
// Live-instance members (setFieldsValue, getFieldError, …) are spread in
|
|
77
|
+
// when available; the reads always come from the validation-time snapshot.
|
|
78
|
+
var ctx = Object.assign(Object.assign({}, instance), {
|
|
79
|
+
getFieldValue: function getFieldValue(name) {
|
|
80
|
+
return resolveValue(values, name);
|
|
81
|
+
},
|
|
82
|
+
getFieldsValue: function getFieldsValue() {
|
|
83
|
+
return values;
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
return rules.map(function (rule) {
|
|
87
|
+
if (typeof rule !== 'function') return rule;
|
|
88
|
+
try {
|
|
89
|
+
return rule(ctx);
|
|
90
|
+
} catch (err) {
|
|
91
|
+
// A throwing rule factory must not crash rendering or validation —
|
|
92
|
+
// surface it as a rule that always fails with the thrown reason.
|
|
93
|
+
return {
|
|
94
|
+
validator: function validator() {
|
|
95
|
+
throw err;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Normalize a form/item-level validateTrigger config into the effective
|
|
103
|
+
* interactive event list: item-level (when present) overrides form-level;
|
|
104
|
+
* `false` disables interactive validation entirely.
|
|
105
|
+
*/
|
|
106
|
+
export function normalizeTriggers(itemTrigger, formTrigger) {
|
|
107
|
+
var effective = itemTrigger === undefined ? formTrigger : itemTrigger;
|
|
108
|
+
if (effective === false) return [];
|
|
109
|
+
return Array.isArray(effective) ? effective : [effective];
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Filter rules applicable to an interactive event: the event
|
|
113
|
+
* validates only when it is in the item's effective trigger set. Within the
|
|
114
|
+
* set, a rule WITHOUT `validateTrigger` runs on every event; a rule WITH one
|
|
115
|
+
* runs only on matching events — so a rule trigger outside the item's set
|
|
116
|
+
* never fires interactively. Submit-time validation bypasses this filter and
|
|
117
|
+
* runs every rule.
|
|
118
|
+
*
|
|
119
|
+
* Dev guard: a rule whose (non-empty) trigger set is fully OUTSIDE the
|
|
120
|
+
* active set can never fire interactively — usually a leftover of the
|
|
121
|
+
* pre-0.0.76 override semantics, so it warns once. `validateTrigger: []`
|
|
122
|
+
* is the deliberate submit-only idiom and stays silent.
|
|
123
|
+
*/
|
|
124
|
+
export function filterRulesByTrigger(rules, trigger, activeTriggers, fieldName) {
|
|
125
|
+
if (!activeTriggers.includes(trigger)) return [];
|
|
47
126
|
return rules.filter(function (rule) {
|
|
48
127
|
var ruleTrigger = rule.validateTrigger;
|
|
49
|
-
if (
|
|
50
|
-
|
|
128
|
+
if (ruleTrigger === undefined) return true;
|
|
129
|
+
var ruleTriggers = Array.isArray(ruleTrigger) ? ruleTrigger : [ruleTrigger];
|
|
130
|
+
var matches = ruleTriggers.includes(trigger);
|
|
131
|
+
if (!matches && ruleTriggers.length > 0 && !ruleTriggers.some(function (t) {
|
|
132
|
+
return activeTriggers.includes(t);
|
|
133
|
+
})) {
|
|
134
|
+
var name = fieldName !== null && fieldName !== void 0 ? fieldName : '(unknown)';
|
|
135
|
+
devWarnOnce("trigger:".concat(name, ":").concat(ruleTriggers.join(',')), "[ProForm] Field \"".concat(name, "\": rule validateTrigger [").concat(ruleTriggers.join(', '), "] is outside this field's active trigger set [").concat(activeTriggers.join(', '), "] \u2014 the rule will only run on submit. Include it in the item/form validateTrigger to run it interactively."));
|
|
136
|
+
}
|
|
137
|
+
return matches;
|
|
51
138
|
});
|
|
52
139
|
}
|
|
140
|
+
/** Built-in `type` checks. `enum` is handled separately against `rule.enum`. */
|
|
141
|
+
var TYPE_CHECKS = {
|
|
142
|
+
string: function string(v) {
|
|
143
|
+
return typeof v === 'string';
|
|
144
|
+
},
|
|
145
|
+
number: function number(v) {
|
|
146
|
+
return typeof v === 'number' && !Number.isNaN(v);
|
|
147
|
+
},
|
|
148
|
+
"boolean": function boolean(v) {
|
|
149
|
+
return typeof v === 'boolean';
|
|
150
|
+
},
|
|
151
|
+
method: function method(v) {
|
|
152
|
+
return typeof v === 'function';
|
|
153
|
+
},
|
|
154
|
+
integer: function integer(v) {
|
|
155
|
+
return typeof v === 'number' && Number.isInteger(v);
|
|
156
|
+
},
|
|
157
|
+
"float": function float(v) {
|
|
158
|
+
return typeof v === 'number' && !Number.isNaN(v) && !Number.isInteger(v);
|
|
159
|
+
},
|
|
160
|
+
array: function array(v) {
|
|
161
|
+
return Array.isArray(v);
|
|
162
|
+
},
|
|
163
|
+
object: function object(v) {
|
|
164
|
+
return _typeof(v) === 'object' && v !== null && !Array.isArray(v);
|
|
165
|
+
},
|
|
166
|
+
date: function date(v) {
|
|
167
|
+
return v instanceof Date ? !Number.isNaN(v.getTime()) : typeof (v === null || v === void 0 ? void 0 : v.getTime) === 'function' && !Number.isNaN(v.getTime());
|
|
168
|
+
},
|
|
169
|
+
regexp: function regexp(v) {
|
|
170
|
+
if (v instanceof RegExp) return true;
|
|
171
|
+
if (typeof v !== 'string') return false;
|
|
172
|
+
try {
|
|
173
|
+
new RegExp(v);
|
|
174
|
+
return true;
|
|
175
|
+
} catch (_a) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
hex: function hex(v) {
|
|
180
|
+
return typeof v === 'string' && /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i.test(v);
|
|
181
|
+
},
|
|
182
|
+
// String-only: coercing via String() would let e.g. ['a@b.co'] stringify
|
|
183
|
+
// into a passing value.
|
|
184
|
+
email: function email(v) {
|
|
185
|
+
return typeof v === 'string' && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v);
|
|
186
|
+
},
|
|
187
|
+
url: function url(v) {
|
|
188
|
+
if (typeof v !== 'string') return false;
|
|
189
|
+
try {
|
|
190
|
+
new URL(v);
|
|
191
|
+
return true;
|
|
192
|
+
} catch (_a) {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
/** Friendly generated messages for the legacy type names; others get a generic one. */
|
|
198
|
+
function typeFailureMessage(name, type) {
|
|
199
|
+
if (type === 'number') return "".concat(name, " must be a number");
|
|
200
|
+
if (type === 'email') return "".concat(name, " must be a valid email");
|
|
201
|
+
if (type === 'url') return "".concat(name, " must be a valid URL");
|
|
202
|
+
return "".concat(name, " is not a valid ").concat(type);
|
|
203
|
+
}
|
|
204
|
+
/** Measure a value for len/min/max: string → length, array → count, number → value. */
|
|
205
|
+
function measureValue(value) {
|
|
206
|
+
if (typeof value === 'string') return {
|
|
207
|
+
measured: value.length,
|
|
208
|
+
unit: ' characters'
|
|
209
|
+
};
|
|
210
|
+
if (Array.isArray(value)) return {
|
|
211
|
+
measured: value.length,
|
|
212
|
+
unit: ' items'
|
|
213
|
+
};
|
|
214
|
+
if (typeof value === 'number' && !Number.isNaN(value)) return {
|
|
215
|
+
measured: value,
|
|
216
|
+
unit: ''
|
|
217
|
+
};
|
|
218
|
+
return null;
|
|
219
|
+
}
|
|
53
220
|
/**
|
|
54
221
|
* Evaluate every built-in (non-`validator`) rule kind for a single rule.
|
|
55
|
-
* Returns the error
|
|
222
|
+
* Returns the error content for the first failing check, or null.
|
|
223
|
+
*
|
|
224
|
+
* Empty values (undefined / null / '' / empty array) are only checked by
|
|
225
|
+
* `required` — every other builtin check is skipped, so optional fields
|
|
226
|
+
* don't error until they have content. Custom validators are NOT subject to
|
|
227
|
+
* this skip (they receive the empty value and decide themselves).
|
|
56
228
|
*/
|
|
57
229
|
function checkBuiltinRules(rule, value, name) {
|
|
58
230
|
if (rule.required && isEmptyValue(value)) {
|
|
59
231
|
return rule.message || "".concat(name, " is required");
|
|
60
232
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (
|
|
75
|
-
if (rule.min !== undefined && measured < rule.min) {
|
|
76
|
-
return rule.message || "".concat(name, " must be at least ").concat(rule.min).concat(unit);
|
|
233
|
+
if (isEmptyValue(value)) return null;
|
|
234
|
+
// Non-empty string of only whitespace (the required+whitespace trim idiom).
|
|
235
|
+
if (rule.whitespace && typeof value === 'string' && value.trim() === '') {
|
|
236
|
+
return rule.message || "".concat(name, " cannot be blank");
|
|
237
|
+
}
|
|
238
|
+
// len: exact length/count/value — takes precedence over min/max.
|
|
239
|
+
if (rule.len !== undefined) {
|
|
240
|
+
var m = measureValue(value);
|
|
241
|
+
if (m !== null && m.measured !== rule.len) {
|
|
242
|
+
return rule.message || "".concat(name, " must be exactly ").concat(rule.len).concat(m.unit);
|
|
243
|
+
}
|
|
244
|
+
} else if (rule.min !== undefined || rule.max !== undefined) {
|
|
245
|
+
var _m = measureValue(value);
|
|
246
|
+
if (_m !== null) {
|
|
247
|
+
if (rule.min !== undefined && _m.measured < rule.min) {
|
|
248
|
+
return rule.message || "".concat(name, " must be at least ").concat(rule.min).concat(_m.unit);
|
|
77
249
|
}
|
|
78
|
-
if (rule.max !== undefined && measured > rule.max) {
|
|
79
|
-
return rule.message || "".concat(name, " must be no more than ").concat(rule.max).concat(unit);
|
|
250
|
+
if (rule.max !== undefined && _m.measured > rule.max) {
|
|
251
|
+
return rule.message || "".concat(name, " must be no more than ").concat(rule.max).concat(_m.unit);
|
|
80
252
|
}
|
|
81
253
|
}
|
|
82
254
|
}
|
|
83
|
-
if (rule.pattern && typeof value === 'string'
|
|
84
|
-
|
|
255
|
+
if (rule.pattern && typeof value === 'string') {
|
|
256
|
+
// A /g or /y regex is stateful: lastIndex persists across .test() calls,
|
|
257
|
+
// so repeated runs would alternate pass/fail — reset it every run.
|
|
258
|
+
if (rule.pattern.global || rule.pattern.sticky) rule.pattern.lastIndex = 0;
|
|
259
|
+
if (!rule.pattern.test(value)) {
|
|
260
|
+
return rule.message || "".concat(name, " format is invalid");
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
if (rule.type && rule.type !== 'enum' && !TYPE_CHECKS[rule.type](value)) {
|
|
264
|
+
return rule.message || typeFailureMessage(name, rule.type);
|
|
85
265
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
266
|
+
// enum membership: applies for type 'enum' or whenever rule.enum is present.
|
|
267
|
+
if (rule["enum"] && Array.isArray(rule["enum"]) && !rule["enum"].includes(value)) {
|
|
268
|
+
return rule.message || "".concat(name, " must be one of ").concat(rule["enum"].join(', '));
|
|
269
|
+
}
|
|
270
|
+
return null;
|
|
271
|
+
}
|
|
272
|
+
function toRuleArray(rules) {
|
|
273
|
+
if (!rules) return [];
|
|
274
|
+
return Array.isArray(rules) ? rules : [rules];
|
|
275
|
+
}
|
|
276
|
+
/** Members for deep rules: array → indexed entries, plain object → key entries. */
|
|
277
|
+
function deepMembers(value) {
|
|
278
|
+
if (Array.isArray(value)) return value.map(function (member, index) {
|
|
279
|
+
return [String(index), member];
|
|
280
|
+
});
|
|
281
|
+
if (value && _typeof(value) === 'object') return Object.entries(value);
|
|
282
|
+
return [];
|
|
283
|
+
}
|
|
284
|
+
var PASS = {
|
|
285
|
+
error: null,
|
|
286
|
+
warning: null
|
|
287
|
+
};
|
|
288
|
+
/**
|
|
289
|
+
* Dev guard for the pre-0.0.76 validator contract: returning a string or
|
|
290
|
+
* `false` used to FAIL the rule — under the `(rule, value)` contract return
|
|
291
|
+
* values are ignored and only throw/reject fails. Such a return is almost
|
|
292
|
+
* certainly a legacy validator silently passing, so it warns once.
|
|
293
|
+
*/
|
|
294
|
+
function warnLegacyValidatorReturn(name, result) {
|
|
295
|
+
if (typeof result !== 'string' && result !== false) return;
|
|
296
|
+
devWarnOnce("validator-return:".concat(name), "[ProForm] Field \"".concat(name, "\": a custom validator returned ").concat(typeof result === 'string' ? 'a string' : 'false', " \u2014 return values are IGNORED; validators fail by throwing or rejecting (a thrown Error's message becomes the field error)."));
|
|
297
|
+
}
|
|
298
|
+
/** Run a rule's transform, containing throws as a rule failure. */
|
|
299
|
+
function applyTransform(rule, rawValue) {
|
|
300
|
+
if (typeof rule.transform !== 'function') return {
|
|
301
|
+
ok: true,
|
|
302
|
+
value: rawValue
|
|
303
|
+
};
|
|
304
|
+
try {
|
|
305
|
+
return {
|
|
306
|
+
ok: true,
|
|
307
|
+
value: rule.transform(rawValue)
|
|
308
|
+
};
|
|
309
|
+
} catch (err) {
|
|
310
|
+
return {
|
|
311
|
+
ok: false,
|
|
312
|
+
failure: resolveFailureMessage(err, rule)
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Flatten a rule's deep sources (`fields` per key, then `defaultField` per
|
|
318
|
+
* member) into [subRule, memberValue, memberName] tuples — the single place
|
|
319
|
+
* that knows how deep rules map onto a container value.
|
|
320
|
+
*/
|
|
321
|
+
function deepRuleEntries(rule, value, name) {
|
|
322
|
+
var entries = [];
|
|
323
|
+
if (rule.fields) {
|
|
324
|
+
var source = value;
|
|
325
|
+
for (var _i = 0, _Object$entries = Object.entries(rule.fields); _i < _Object$entries.length; _i++) {
|
|
326
|
+
var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
|
|
327
|
+
key = _Object$entries$_i[0],
|
|
328
|
+
subRules = _Object$entries$_i[1];
|
|
329
|
+
var _iterator = _createForOfIteratorHelper(toRuleArray(subRules)),
|
|
330
|
+
_step;
|
|
331
|
+
try {
|
|
332
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
333
|
+
var subRule = _step.value;
|
|
334
|
+
entries.push([subRule, source[key], "".concat(name, ".").concat(key)]);
|
|
335
|
+
}
|
|
336
|
+
} catch (err) {
|
|
337
|
+
_iterator.e(err);
|
|
338
|
+
} finally {
|
|
339
|
+
_iterator.f();
|
|
340
|
+
}
|
|
89
341
|
}
|
|
90
342
|
}
|
|
91
|
-
if (rule.
|
|
92
|
-
|
|
93
|
-
|
|
343
|
+
if (rule.defaultField) {
|
|
344
|
+
var _iterator2 = _createForOfIteratorHelper(deepMembers(value)),
|
|
345
|
+
_step2;
|
|
346
|
+
try {
|
|
347
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
348
|
+
var _step2$value = _slicedToArray(_step2.value, 2),
|
|
349
|
+
_key = _step2$value[0],
|
|
350
|
+
member = _step2$value[1];
|
|
351
|
+
var _iterator3 = _createForOfIteratorHelper(toRuleArray(rule.defaultField)),
|
|
352
|
+
_step3;
|
|
353
|
+
try {
|
|
354
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
355
|
+
var _subRule = _step3.value;
|
|
356
|
+
entries.push([_subRule, member, "".concat(name, ".").concat(_key)]);
|
|
357
|
+
}
|
|
358
|
+
} catch (err) {
|
|
359
|
+
_iterator3.e(err);
|
|
360
|
+
} finally {
|
|
361
|
+
_iterator3.f();
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
} catch (err) {
|
|
365
|
+
_iterator2.e(err);
|
|
366
|
+
} finally {
|
|
367
|
+
_iterator2.f();
|
|
94
368
|
}
|
|
95
369
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
370
|
+
return entries;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Merge a sub-rule's outcome into the parent's channels. A sub-rule flagged
|
|
374
|
+
* `warningOnly` contributes its failure as a WARNING; otherwise its error
|
|
375
|
+
* blocks. Returns true when a blocking error landed (stop walking).
|
|
376
|
+
*/
|
|
377
|
+
function mergeSubResult(acc, subRule, sub) {
|
|
378
|
+
if (sub.warning !== null && acc.warning === null) acc.warning = sub.warning;
|
|
379
|
+
if (sub.error !== null) {
|
|
380
|
+
if (subRule.warningOnly) {
|
|
381
|
+
if (acc.warning === null) acc.warning = sub.error;
|
|
382
|
+
} else {
|
|
383
|
+
acc.error = sub.error;
|
|
384
|
+
return true;
|
|
100
385
|
}
|
|
101
386
|
}
|
|
102
|
-
|
|
387
|
+
return false;
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Fold one rule's outcome into the run-level channels. A rule flagged
|
|
391
|
+
* `warningOnly` downgrades everything it produced (own checks AND deep
|
|
392
|
+
* sub-rules) to a warning. Returns the blocking error to surface, or null.
|
|
393
|
+
*/
|
|
394
|
+
function foldRuleResult(rule, result, state) {
|
|
395
|
+
var _a;
|
|
396
|
+
if (rule.warningOnly) {
|
|
397
|
+
var content = (_a = result.error) !== null && _a !== void 0 ? _a : result.warning;
|
|
398
|
+
if (content !== null && state.warning === null) state.warning = content;
|
|
399
|
+
return null;
|
|
400
|
+
}
|
|
401
|
+
if (result.warning !== null && state.warning === null) state.warning = result.warning;
|
|
402
|
+
return result.error;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Evaluate ONE rule (transform → builtin checks → validator → deep rules)
|
|
406
|
+
* synchronously. Promise-returning validators are deferred (see runRulesSync).
|
|
407
|
+
*/
|
|
408
|
+
function evalRuleSync(rule, rawValue, name) {
|
|
409
|
+
var prep = applyTransform(rule, rawValue);
|
|
410
|
+
if (!prep.ok) return {
|
|
411
|
+
error: prep.failure,
|
|
412
|
+
warning: null
|
|
413
|
+
};
|
|
414
|
+
var value = prep.value;
|
|
415
|
+
var failure = checkBuiltinRules(rule, value, name);
|
|
416
|
+
if (failure === null && typeof rule.validator === 'function') {
|
|
103
417
|
try {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
418
|
+
var result = rule.validator(rule, value);
|
|
419
|
+
if (isThenable(result)) {
|
|
420
|
+
result.then(function (resolved) {
|
|
421
|
+
return warnLegacyValidatorReturn(name, resolved);
|
|
422
|
+
}, function () {});
|
|
423
|
+
} else {
|
|
424
|
+
warnLegacyValidatorReturn(name, result);
|
|
425
|
+
}
|
|
426
|
+
} catch (err) {
|
|
427
|
+
failure = resolveFailureMessage(err, rule);
|
|
107
428
|
}
|
|
108
429
|
}
|
|
109
|
-
return
|
|
430
|
+
if (failure !== null) return {
|
|
431
|
+
error: failure,
|
|
432
|
+
warning: null
|
|
433
|
+
};
|
|
434
|
+
if ((rule.fields || rule.defaultField) && !isEmptyValue(value)) {
|
|
435
|
+
// Deep rules need a container; a non-empty primitive fails the PARENT
|
|
436
|
+
// (clear attribution) instead of producing confusing child errors.
|
|
437
|
+
if (_typeof(value) !== 'object' || value === null) {
|
|
438
|
+
return {
|
|
439
|
+
error: rule.message || "".concat(name, " must be an object or an array"),
|
|
440
|
+
warning: null
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
var acc = {
|
|
444
|
+
error: null,
|
|
445
|
+
warning: null
|
|
446
|
+
};
|
|
447
|
+
var _iterator4 = _createForOfIteratorHelper(deepRuleEntries(rule, value, name)),
|
|
448
|
+
_step4;
|
|
449
|
+
try {
|
|
450
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
451
|
+
var _step4$value = _slicedToArray(_step4.value, 3),
|
|
452
|
+
subRule = _step4$value[0],
|
|
453
|
+
subValue = _step4$value[1],
|
|
454
|
+
subName = _step4$value[2];
|
|
455
|
+
if (mergeSubResult(acc, subRule, evalRuleSync(subRule, subValue, subName))) break;
|
|
456
|
+
}
|
|
457
|
+
} catch (err) {
|
|
458
|
+
_iterator4.e(err);
|
|
459
|
+
} finally {
|
|
460
|
+
_iterator4.f();
|
|
461
|
+
}
|
|
462
|
+
return acc;
|
|
463
|
+
}
|
|
464
|
+
return PASS;
|
|
465
|
+
}
|
|
466
|
+
/** Async counterpart of evalRuleSync — custom validators are awaited. */
|
|
467
|
+
function evalRuleAsync(rule, rawValue, name) {
|
|
468
|
+
return __awaiter(this, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
469
|
+
var prep, value, failure, result, acc, _iterator5, _step5, _step5$value, subRule, subValue, subName, _t, _t2, _t3, _t4, _t5;
|
|
470
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
471
|
+
while (1) switch (_context.prev = _context.next) {
|
|
472
|
+
case 0:
|
|
473
|
+
prep = applyTransform(rule, rawValue);
|
|
474
|
+
if (prep.ok) {
|
|
475
|
+
_context.next = 1;
|
|
476
|
+
break;
|
|
477
|
+
}
|
|
478
|
+
return _context.abrupt("return", {
|
|
479
|
+
error: prep.failure,
|
|
480
|
+
warning: null
|
|
481
|
+
});
|
|
482
|
+
case 1:
|
|
483
|
+
value = prep.value;
|
|
484
|
+
failure = checkBuiltinRules(rule, value, name);
|
|
485
|
+
if (!(failure === null && typeof rule.validator === 'function')) {
|
|
486
|
+
_context.next = 5;
|
|
487
|
+
break;
|
|
488
|
+
}
|
|
489
|
+
_context.prev = 2;
|
|
490
|
+
_context.next = 3;
|
|
491
|
+
return rule.validator(rule, value);
|
|
492
|
+
case 3:
|
|
493
|
+
result = _context.sent;
|
|
494
|
+
warnLegacyValidatorReturn(name, result);
|
|
495
|
+
_context.next = 5;
|
|
496
|
+
break;
|
|
497
|
+
case 4:
|
|
498
|
+
_context.prev = 4;
|
|
499
|
+
_t = _context["catch"](2);
|
|
500
|
+
failure = resolveFailureMessage(_t, rule);
|
|
501
|
+
case 5:
|
|
502
|
+
if (!(failure !== null)) {
|
|
503
|
+
_context.next = 6;
|
|
504
|
+
break;
|
|
505
|
+
}
|
|
506
|
+
return _context.abrupt("return", {
|
|
507
|
+
error: failure,
|
|
508
|
+
warning: null
|
|
509
|
+
});
|
|
510
|
+
case 6:
|
|
511
|
+
if (!((rule.fields || rule.defaultField) && !isEmptyValue(value))) {
|
|
512
|
+
_context.next = 16;
|
|
513
|
+
break;
|
|
514
|
+
}
|
|
515
|
+
if (!(_typeof(value) !== 'object' || value === null)) {
|
|
516
|
+
_context.next = 7;
|
|
517
|
+
break;
|
|
518
|
+
}
|
|
519
|
+
return _context.abrupt("return", {
|
|
520
|
+
error: rule.message || "".concat(name, " must be an object or an array"),
|
|
521
|
+
warning: null
|
|
522
|
+
});
|
|
523
|
+
case 7:
|
|
524
|
+
acc = {
|
|
525
|
+
error: null,
|
|
526
|
+
warning: null
|
|
527
|
+
};
|
|
528
|
+
_iterator5 = _createForOfIteratorHelper(deepRuleEntries(rule, value, name));
|
|
529
|
+
_context.prev = 8;
|
|
530
|
+
_iterator5.s();
|
|
531
|
+
case 9:
|
|
532
|
+
if ((_step5 = _iterator5.n()).done) {
|
|
533
|
+
_context.next = 12;
|
|
534
|
+
break;
|
|
535
|
+
}
|
|
536
|
+
_step5$value = _slicedToArray(_step5.value, 3), subRule = _step5$value[0], subValue = _step5$value[1], subName = _step5$value[2];
|
|
537
|
+
_t2 = mergeSubResult;
|
|
538
|
+
_t3 = acc;
|
|
539
|
+
_t4 = subRule;
|
|
540
|
+
_context.next = 10;
|
|
541
|
+
return evalRuleAsync(subRule, subValue, subName);
|
|
542
|
+
case 10:
|
|
543
|
+
if (!_t2(_t3, _t4, _context.sent)) {
|
|
544
|
+
_context.next = 11;
|
|
545
|
+
break;
|
|
546
|
+
}
|
|
547
|
+
return _context.abrupt("continue", 12);
|
|
548
|
+
case 11:
|
|
549
|
+
_context.next = 9;
|
|
550
|
+
break;
|
|
551
|
+
case 12:
|
|
552
|
+
_context.next = 14;
|
|
553
|
+
break;
|
|
554
|
+
case 13:
|
|
555
|
+
_context.prev = 13;
|
|
556
|
+
_t5 = _context["catch"](8);
|
|
557
|
+
_iterator5.e(_t5);
|
|
558
|
+
case 14:
|
|
559
|
+
_context.prev = 14;
|
|
560
|
+
_iterator5.f();
|
|
561
|
+
return _context.finish(14);
|
|
562
|
+
case 15:
|
|
563
|
+
return _context.abrupt("return", acc);
|
|
564
|
+
case 16:
|
|
565
|
+
return _context.abrupt("return", PASS);
|
|
566
|
+
case 17:
|
|
567
|
+
case "end":
|
|
568
|
+
return _context.stop();
|
|
569
|
+
}
|
|
570
|
+
}, _callee, null, [[2, 4], [8, 13, 14, 15]]);
|
|
571
|
+
}));
|
|
110
572
|
}
|
|
111
573
|
/**
|
|
112
574
|
* Synchronous rule run. A Promise-returning validator CANNOT be evaluated
|
|
@@ -114,128 +576,117 @@ function checkBuiltinRules(rule, value, name) {
|
|
|
114
576
|
* swallowed) and left to the async runs (blur/submit), which always await it.
|
|
115
577
|
* Failing it instead would mis-report "Validation failed" on every keystroke
|
|
116
578
|
* for perfectly valid input.
|
|
579
|
+
*
|
|
580
|
+
* The per-rule try/catch is the engine's totality choke point: NO input —
|
|
581
|
+
* including exotic values that break a builtin check — may escape as a throw;
|
|
582
|
+
* every failure surfaces through the error/warning channels.
|
|
117
583
|
*/
|
|
118
|
-
export function runRulesSync(name, value, values, rules) {
|
|
119
|
-
var
|
|
120
|
-
|
|
121
|
-
|
|
584
|
+
export function runRulesSync(name, value, values, rules, instance) {
|
|
585
|
+
var state = {
|
|
586
|
+
warning: null
|
|
587
|
+
};
|
|
588
|
+
var _iterator6 = _createForOfIteratorHelper(resolveRules(rules, values, instance)),
|
|
589
|
+
_step6;
|
|
122
590
|
try {
|
|
123
|
-
for (
|
|
124
|
-
var rule =
|
|
125
|
-
var
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
} catch (err) {
|
|
135
|
-
failure = err instanceof Error ? err.message : 'Validation error';
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
if (failure !== null) {
|
|
139
|
-
if (rule.warningOnly) {
|
|
140
|
-
warning = warning !== null && warning !== void 0 ? warning : failure;
|
|
141
|
-
} else {
|
|
142
|
-
return {
|
|
143
|
-
error: failure,
|
|
144
|
-
warning: warning
|
|
145
|
-
};
|
|
146
|
-
}
|
|
591
|
+
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
592
|
+
var rule = _step6.value;
|
|
593
|
+
var result = void 0;
|
|
594
|
+
try {
|
|
595
|
+
result = evalRuleSync(rule, value, name);
|
|
596
|
+
} catch (err) {
|
|
597
|
+
result = {
|
|
598
|
+
error: resolveFailureMessage(err, rule),
|
|
599
|
+
warning: null
|
|
600
|
+
};
|
|
147
601
|
}
|
|
602
|
+
var error = foldRuleResult(rule, result, state);
|
|
603
|
+
if (error !== null) return {
|
|
604
|
+
error: error,
|
|
605
|
+
warning: state.warning
|
|
606
|
+
};
|
|
148
607
|
}
|
|
149
608
|
} catch (err) {
|
|
150
|
-
|
|
609
|
+
_iterator6.e(err);
|
|
151
610
|
} finally {
|
|
152
|
-
|
|
611
|
+
_iterator6.f();
|
|
153
612
|
}
|
|
154
613
|
return {
|
|
155
614
|
error: null,
|
|
156
|
-
warning: warning
|
|
615
|
+
warning: state.warning
|
|
157
616
|
};
|
|
158
617
|
}
|
|
159
618
|
/**
|
|
160
|
-
* Asynchronous rule run. Custom validators are awaited (sync or async)
|
|
161
|
-
*
|
|
619
|
+
* Asynchronous rule run. Custom validators are awaited (sync or async):
|
|
620
|
+
* resolving passes, rejecting/throwing fails. Return values are ignored.
|
|
621
|
+
* Shares the totality choke point with runRulesSync.
|
|
162
622
|
*/
|
|
163
|
-
export function runRulesAsync(name, value, values, rules) {
|
|
164
|
-
return __awaiter(this, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
165
|
-
var
|
|
166
|
-
return _regeneratorRuntime.wrap(function (
|
|
167
|
-
while (1) switch (
|
|
623
|
+
export function runRulesAsync(name, value, values, rules, instance) {
|
|
624
|
+
return __awaiter(this, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
625
|
+
var state, _iterator7, _step7, rule, result, error, _t6, _t7;
|
|
626
|
+
return _regeneratorRuntime.wrap(function (_context2) {
|
|
627
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
168
628
|
case 0:
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
629
|
+
state = {
|
|
630
|
+
warning: null
|
|
631
|
+
};
|
|
632
|
+
_iterator7 = _createForOfIteratorHelper(resolveRules(rules, values, instance));
|
|
633
|
+
_context2.prev = 1;
|
|
634
|
+
_iterator7.s();
|
|
173
635
|
case 2:
|
|
174
|
-
if ((
|
|
175
|
-
|
|
636
|
+
if ((_step7 = _iterator7.n()).done) {
|
|
637
|
+
_context2.next = 8;
|
|
176
638
|
break;
|
|
177
639
|
}
|
|
178
|
-
rule =
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
}
|
|
184
|
-
_context.prev = 3;
|
|
185
|
-
_context.next = 4;
|
|
186
|
-
return Promise.resolve(rule.validator(value, values));
|
|
640
|
+
rule = _step7.value;
|
|
641
|
+
result = void 0;
|
|
642
|
+
_context2.prev = 3;
|
|
643
|
+
_context2.next = 4;
|
|
644
|
+
return evalRuleAsync(rule, value, name);
|
|
187
645
|
case 4:
|
|
188
|
-
result =
|
|
189
|
-
|
|
190
|
-
failure = typeof result === 'string' ? result : 'Validation failed';
|
|
191
|
-
}
|
|
192
|
-
_context.next = 6;
|
|
646
|
+
result = _context2.sent;
|
|
647
|
+
_context2.next = 6;
|
|
193
648
|
break;
|
|
194
649
|
case 5:
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
650
|
+
_context2.prev = 5;
|
|
651
|
+
_t6 = _context2["catch"](3);
|
|
652
|
+
result = {
|
|
653
|
+
error: resolveFailureMessage(_t6, rule),
|
|
654
|
+
warning: null
|
|
655
|
+
};
|
|
198
656
|
case 6:
|
|
199
|
-
|
|
200
|
-
|
|
657
|
+
error = foldRuleResult(rule, result, state);
|
|
658
|
+
if (!(error !== null)) {
|
|
659
|
+
_context2.next = 7;
|
|
201
660
|
break;
|
|
202
661
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
}
|
|
207
|
-
warning = warning !== null && warning !== void 0 ? warning : failure;
|
|
208
|
-
_context.next = 8;
|
|
209
|
-
break;
|
|
210
|
-
case 7:
|
|
211
|
-
return _context.abrupt("return", {
|
|
212
|
-
error: failure,
|
|
213
|
-
warning: warning
|
|
662
|
+
return _context2.abrupt("return", {
|
|
663
|
+
error: error,
|
|
664
|
+
warning: state.warning
|
|
214
665
|
});
|
|
666
|
+
case 7:
|
|
667
|
+
_context2.next = 2;
|
|
668
|
+
break;
|
|
215
669
|
case 8:
|
|
216
|
-
|
|
670
|
+
_context2.next = 10;
|
|
217
671
|
break;
|
|
218
672
|
case 9:
|
|
219
|
-
|
|
220
|
-
|
|
673
|
+
_context2.prev = 9;
|
|
674
|
+
_t7 = _context2["catch"](1);
|
|
675
|
+
_iterator7.e(_t7);
|
|
221
676
|
case 10:
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
677
|
+
_context2.prev = 10;
|
|
678
|
+
_iterator7.f();
|
|
679
|
+
return _context2.finish(10);
|
|
225
680
|
case 11:
|
|
226
|
-
|
|
227
|
-
_iterator2.f();
|
|
228
|
-
return _context.finish(11);
|
|
229
|
-
case 12:
|
|
230
|
-
return _context.abrupt("return", {
|
|
681
|
+
return _context2.abrupt("return", {
|
|
231
682
|
error: null,
|
|
232
|
-
warning: warning
|
|
683
|
+
warning: state.warning
|
|
233
684
|
});
|
|
234
|
-
case
|
|
685
|
+
case 12:
|
|
235
686
|
case "end":
|
|
236
|
-
return
|
|
687
|
+
return _context2.stop();
|
|
237
688
|
}
|
|
238
|
-
},
|
|
689
|
+
}, _callee2, null, [[1, 9, 10, 11], [3, 5]]);
|
|
239
690
|
}));
|
|
240
691
|
}
|
|
241
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3J1blJ1bGVzLmpzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ydW5SdWxlcy50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJpc1RoZW5hYmxlIiwiX3R5cGVvZiIsImlzRW1wdHlWYWx1ZSIsInVuZGVmaW5lZCIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImZpbHRlclJ1bGVzQnlUcmlnZ2VyIiwicnVsZXMiLCJ0cmlnZ2VyIiwiZm9ybVRyaWdnZXIiLCJmaWx0ZXIiLCJydWxlIiwicnVsZVRyaWdnZXIiLCJ2YWxpZGF0ZVRyaWdnZXIiLCJpbmNsdWRlcyIsImNoZWNrQnVpbHRpblJ1bGVzIiwibmFtZSIsInJlcXVpcmVkIiwibWVzc2FnZSIsImNvbmNhdCIsIm1pbiIsIm1heCIsIm1lYXN1cmVkIiwidW5pdCIsIk51bWJlciIsImlzTmFOIiwicGF0dGVybiIsInRlc3QiLCJqb2luIiwidHlwZSIsImVtYWlsUGF0dGVybiIsIlN0cmluZyIsIlVSTCIsIl9hIiwicnVuUnVsZXNTeW5jIiwidmFsdWVzIiwid2FybmluZyIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImZhaWx1cmUiLCJ2YWxpZGF0b3IiLCJlcnIiLCJFcnJvciIsIndhcm5pbmdPbmx5IiwiZXJyb3IiLCJmIiwicnVuUnVsZXNBc3luYyIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfdCIsIl90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O0lBQUEsR0FBQVgsT0FBQTtFQUFBLENBQ2hDLEVBQUE7QURsQ0QiLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvcnVuUnVsZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmZ1bmN0aW9uIGlzVGhlbmFibGUodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICE9PSBudWxsICYmXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpO1xufVxuLyoqIEVtcHR5IGZvciBgcmVxdWlyZWRgOiB1bmRlZmluZWQgLyBudWxsIC8gJycgLyBlbXB0eSBhcnJheS4gKi9cbmZ1bmN0aW9uIGlzRW1wdHlWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgICB2YWx1ZSA9PT0gJycgfHxcbiAgICAgICAgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkpO1xufVxuLyoqXG4gKiBGaWx0ZXIgcnVsZXMgYXBwbGljYWJsZSB0byBhbiBpbnRlcmFjdGl2ZSB0cmlnZ2VyLiBBIHJ1bGUgV0lUSE9VVCBhblxuICogZXhwbGljaXQgYHZhbGlkYXRlVHJpZ2dlcmAgZm9sbG93cyB0aGUgZm9ybS1sZXZlbCB0cmlnZ2VyOyBhIHJ1bGUgV0lUSCBvbmVcbiAqIHJ1bnMgb24gZXhhY3RseSB0aG9zZSB0cmlnZ2VyKHMpLCByZWdhcmRsZXNzIG9mIHRoZSBmb3JtLWxldmVsIHNldHRpbmcuXG4gKiBTdWJtaXQtdGltZSB2YWxpZGF0aW9uIGJ5cGFzc2VzIHRoaXMgZmlsdGVyIGFuZCBydW5zIGV2ZXJ5IHJ1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJSdWxlc0J5VHJpZ2dlcihydWxlcywgdHJpZ2dlciwgZm9ybVRyaWdnZXIpIHtcbiAgICByZXR1cm4gcnVsZXMuZmlsdGVyKChydWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1bGVUcmlnZ2VyID0gcnVsZS52YWxpZGF0ZVRyaWdnZXI7XG4gICAgICAgIGlmICghcnVsZVRyaWdnZXIpXG4gICAgICAgICAgICByZXR1cm4gZm9ybVRyaWdnZXIgPT09IHRyaWdnZXI7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJ1bGVUcmlnZ2VyKVxuICAgICAgICAgICAgPyBydWxlVHJpZ2dlci5pbmNsdWRlcyh0cmlnZ2VyKVxuICAgICAgICAgICAgOiBydWxlVHJpZ2dlciA9PT0gdHJpZ2dlcjtcbiAgICB9KTtcbn1cbi8qKlxuICogRXZhbHVhdGUgZXZlcnkgYnVpbHQtaW4gKG5vbi1gdmFsaWRhdG9yYCkgcnVsZSBraW5kIGZvciBhIHNpbmdsZSBydWxlLlxuICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhlIGZpcnN0IGZhaWxpbmcgY2hlY2ssIG9yIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQnVpbHRpblJ1bGVzKHJ1bGUsIHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKHJ1bGUucmVxdWlyZWQgJiYgaXNFbXB0eVZhbHVlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IGlzIHJlcXVpcmVkYDtcbiAgICB9XG4gICAgLy8gbWluL21heDogc3RyaW5nIOKGkiBsZW5ndGgsIGFycmF5IOKGkiBpdGVtIGNvdW50LCBudW1iZXIg4oaSIG51bWVyaWMgdmFsdWVcbiAgICBpZiAocnVsZS5taW4gIT09IHVuZGVmaW5lZCB8fCBydWxlLm1heCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBtZWFzdXJlZCA9IG51bGw7XG4gICAgICAgIGxldCB1bml0ID0gJyc7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBtZWFzdXJlZCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIHVuaXQgPSAnIGNoYXJhY3RlcnMnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBtZWFzdXJlZCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIHVuaXQgPSAnIGl0ZW1zJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmICFOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICBtZWFzdXJlZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZWFzdXJlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJ1bGUubWluICE9PSB1bmRlZmluZWQgJiYgbWVhc3VyZWQgPCBydWxlLm1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhdCBsZWFzdCAke3J1bGUubWlufSR7dW5pdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJ1bGUubWF4ICE9PSB1bmRlZmluZWQgJiYgbWVhc3VyZWQgPiBydWxlLm1heCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBubyBtb3JlIHRoYW4gJHtydWxlLm1heH0ke3VuaXR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocnVsZS5wYXR0ZXJuICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIXJ1bGUucGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IGZvcm1hdCBpcyBpbnZhbGlkYDtcbiAgICB9XG4gICAgaWYgKHJ1bGUuZW51bSAmJiBBcnJheS5pc0FycmF5KHJ1bGUuZW51bSkgJiYgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFydWxlLmVudW0uaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgb25lIG9mICR7cnVsZS5lbnVtLmpvaW4oJywgJyl9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocnVsZS50eXBlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSAnJykge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCBpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhIG51bWJlcmA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJ1bGUudHlwZSA9PT0gJ2VtYWlsJyAmJiB2YWx1ZSkge1xuICAgICAgICBjb25zdCBlbWFpbFBhdHRlcm4gPSAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLztcbiAgICAgICAgaWYgKCFlbWFpbFBhdHRlcm4udGVzdChTdHJpbmcodmFsdWUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGEgdmFsaWQgZW1haWxgO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChydWxlLnR5cGUgPT09ICd1cmwnICYmIHZhbHVlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgVVJMKFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGEgdmFsaWQgVVJMYDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogU3luY2hyb25vdXMgcnVsZSBydW4uIEEgUHJvbWlzZS1yZXR1cm5pbmcgdmFsaWRhdG9yIENBTk5PVCBiZSBldmFsdWF0ZWRcbiAqIGhlcmUg4oCUIGl0IGlzIGRlZmVycmVkICh0cmVhdGVkIGFzIHBhc3NpbmcgZm9yIHRoaXMgcnVuOyBpdHMgcmVqZWN0aW9uIGlzXG4gKiBzd2FsbG93ZWQpIGFuZCBsZWZ0IHRvIHRoZSBhc3luYyBydW5zIChibHVyL3N1Ym1pdCksIHdoaWNoIGFsd2F5cyBhd2FpdCBpdC5cbiAqIEZhaWxpbmcgaXQgaW5zdGVhZCB3b3VsZCBtaXMtcmVwb3J0IFwiVmFsaWRhdGlvbiBmYWlsZWRcIiBvbiBldmVyeSBrZXlzdHJva2VcbiAqIGZvciBwZXJmZWN0bHkgdmFsaWQgaW5wdXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5SdWxlc1N5bmMobmFtZSwgdmFsdWUsIHZhbHVlcywgcnVsZXMpIHtcbiAgICBsZXQgd2FybmluZyA9IG51bGw7XG4gICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICAgIGxldCBmYWlsdXJlID0gY2hlY2tCdWlsdGluUnVsZXMocnVsZSwgdmFsdWUsIG5hbWUpO1xuICAgICAgICBpZiAoZmFpbHVyZSA9PT0gbnVsbCAmJiB0eXBlb2YgcnVsZS52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcnVsZS52YWxpZGF0b3IodmFsdWUsIHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgaWYgKGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQudGhlbih1bmRlZmluZWQsICgpID0+IHsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBmYWlsdXJlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgPyByZXN1bHQgOiAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBmYWlsdXJlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdWYWxpZGF0aW9uIGVycm9yJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZmFpbHVyZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJ1bGUud2FybmluZ09ubHkpIHtcbiAgICAgICAgICAgICAgICB3YXJuaW5nID0gd2FybmluZyAhPT0gbnVsbCAmJiB3YXJuaW5nICE9PSB2b2lkIDAgPyB3YXJuaW5nIDogZmFpbHVyZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBmYWlsdXJlLCB3YXJuaW5nIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgZXJyb3I6IG51bGwsIHdhcm5pbmcgfTtcbn1cbi8qKlxuICogQXN5bmNocm9ub3VzIHJ1bGUgcnVuLiBDdXN0b20gdmFsaWRhdG9ycyBhcmUgYXdhaXRlZCAoc3luYyBvciBhc3luYykuIEFcbiAqIHZhbGlkYXRvciByZXR1cm5pbmcgYHVuZGVmaW5lZGAgaXMgdHJlYXRlZCBhcyBwYXNzaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuUnVsZXNBc3luYyhuYW1lLCB2YWx1ZSwgdmFsdWVzLCBydWxlcykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCB3YXJuaW5nID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICAgICAgICBsZXQgZmFpbHVyZSA9IGNoZWNrQnVpbHRpblJ1bGVzKHJ1bGUsIHZhbHVlLCBuYW1lKTtcbiAgICAgICAgICAgIGlmIChmYWlsdXJlID09PSBudWxsICYmIHR5cGVvZiBydWxlLnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIFByb21pc2UucmVzb2x2ZShydWxlLnZhbGlkYXRvcih2YWx1ZSwgdmFsdWVzKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHRydWUgJiYgcmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUgPSB0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyA/IHJlc3VsdCA6ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBmYWlsdXJlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdWYWxpZGF0aW9uIGVycm9yJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmFpbHVyZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChydWxlLndhcm5pbmdPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSB3YXJuaW5nICE9PSBudWxsICYmIHdhcm5pbmcgIT09IHZvaWQgMCA/IHdhcm5pbmcgOiBmYWlsdXJlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGZhaWx1cmUsIHdhcm5pbmcgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IG51bGwsIHdhcm5pbmcgfTtcbiAgICB9KTtcbn0iLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
|
|
692
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3J1blJ1bGVzLmpzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ydW5SdWxlcy50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJyZXNvbHZlVmFsdWUiLCJkZXZXYXJuT25jZSIsImlzVGhlbmFibGUiLCJfdHlwZW9mIiwiaXNFbXB0eVZhbHVlIiwidW5kZWZpbmVkIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiY29lcmNlRmFpbHVyZVJlYXNvbiIsInJlYXNvbiIsIkVycm9yIiwibWVzc2FnZSIsInJlc29sdmVGYWlsdXJlTWVzc2FnZSIsInJ1bGUiLCJfYSIsInJlc29sdmVSdWxlcyIsInJ1bGVzIiwidmFsdWVzIiwiaW5zdGFuY2UiLCJzb21lIiwiY3R4IiwiT2JqZWN0IiwiYXNzaWduIiwiZ2V0RmllbGRWYWx1ZSIsIm5hbWUiLCJnZXRGaWVsZHNWYWx1ZSIsIm1hcCIsImVyciIsInZhbGlkYXRvciIsIm5vcm1hbGl6ZVRyaWdnZXJzIiwiaXRlbVRyaWdnZXIiLCJmb3JtVHJpZ2dlciIsImVmZmVjdGl2ZSIsImZpbHRlclJ1bGVzQnlUcmlnZ2VyIiwidHJpZ2dlciIsImFjdGl2ZVRyaWdnZXJzIiwiZmllbGROYW1lIiwiaW5jbHVkZXMiLCJmaWx0ZXIiLCJydWxlVHJpZ2dlciIsInZhbGlkYXRlVHJpZ2dlciIsInJ1bGVUcmlnZ2VycyIsIm1hdGNoZXMiLCJ0IiwiY29uY2F0Iiwiam9pbiIsIlRZUEVfQ0hFQ0tTIiwic3RyaW5nIiwidiIsIm51bWJlciIsIk51bWJlciIsImlzTmFOIiwiYm9vbGVhbiIsIm1ldGhvZCIsImludGVnZXIiLCJpc0ludGVnZXIiLCJmbG9hdCIsImFycmF5Iiwib2JqZWN0IiwiZGF0ZSIsIkRhdGUiLCJnZXRUaW1lIiwicmVnZXhwIiwiUmVnRXhwIiwiaGV4IiwidGVzdCIsImVtYWlsIiwidXJsIiwiVVJMIiwidHlwZUZhaWx1cmVNZXNzYWdlIiwidHlwZSIsIm1lYXN1cmVWYWx1ZSIsIm1lYXN1cmVkIiwidW5pdCIsImNoZWNrQnVpbHRpblJ1bGVzIiwicmVxdWlyZWQiLCJ3aGl0ZXNwYWNlIiwidHJpbSIsImxlbiIsIm0iLCJtaW4iLCJtYXgiLCJwYXR0ZXJuIiwiZ2xvYmFsIiwic3RpY2t5IiwibGFzdEluZGV4IiwidG9SdWxlQXJyYXkiLCJkZWVwTWVtYmVycyIsIm1lbWJlciIsImluZGV4IiwiU3RyaW5nIiwiZW50cmllcyIsIlBBU1MiLCJlcnJvciIsIndhcm5pbmciLCJ3YXJuTGVnYWN5VmFsaWRhdG9yUmV0dXJuIiwiYXBwbHlUcmFuc2Zvcm0iLCJyYXdWYWx1ZSIsInRyYW5zZm9ybSIsIm9rIiwiZmFpbHVyZSIsImRlZXBSdWxlRW50cmllcyIsImZpZWxkcyIsInNvdXJjZSIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiX09iamVjdCRlbnRyaWVzJF9pIiwiX3NsaWNlZFRvQXJyYXkiLCJrZXkiLCJzdWJSdWxlcyIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsInN1YlJ1bGUiLCJwdXNoIiwiZiIsImRlZmF1bHRGaWVsZCIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfc3RlcDIkdmFsdWUiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibWVyZ2VTdWJSZXN1bHQiLCJhY2MiLCJzdWIiLCJ3YXJuaW5nT25seSIsImZvbGRSdWxlUmVzdWx0Iiwic3RhdGUiLCJjb250ZW50IiwiZXZhbFJ1bGVTeW5jIiwicHJlcCIsInJlc29sdmVkIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsIl9zdGVwNCR2YWx1ZSIsInN1YlZhbHVlIiwic3ViTmFtZSIsImV2YWxSdWxlQXN5bmMiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1IiwiX3N0ZXA1JHZhbHVlIiwiX3QiLCJfdDIiLCJfdDMiLCJfdDQiLCJfdDUiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwiYWJydXB0Iiwic2VudCIsImZpbmlzaCIsInN0b3AiLCJydW5SdWxlc1N5bmMiLCJfaXRlcmF0b3I2IiwiX3N0ZXA2IiwicnVuUnVsZXNBc3luYyIsIl9jYWxsZWUyIiwiX2l0ZXJhdG9yNyIsIl9zdGVwNyIsIl90NiIsIl90NyIsIl9jb250ZXh0MiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBSUEsU0FBUyxHQUFJLElBQUksSUFBSSxJQUFJLENBQUNBLFNBQVMsSUFBSyxVQUFVQyxPQUFPLEVBQUVDLFVBQVUsRUFBRUMsQ0FBQyxFQUFFQyxTQUFTLEVBQUU7RUFDckYsU0FBU0MsS0FBS0EsQ0FBQ0MsS0FBSyxFQUFFO0lBQUUsT0FBT0EsS0FBSyxZQUFZSCxDQUFDLEdBQUdHLEtBQUssR0FBRyxJQUFJSCxDQUFDLENBQUMsVUFBVUksT0FBTyxFQUFFO01BQUVBLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDO0lBQUUsQ0FBQyxDQUFDO0VBQUU7RUFDM0csT0FBTyxLQUFLSCxDQUFDLEtBQUtBLENBQUMsR0FBR0ssT0FBTyxDQUFDLEVBQUUsVUFBVUQsT0FBTyxFQUFFRSxNQUFNLEVBQUU7SUFDdkQsU0FBU0MsU0FBU0EsQ0FBQ0osS0FBSyxFQUFFO01BQUUsSUFBSTtRQUFFSyxJQUFJLENBQUNQLFNBQVMsQ0FBQ1EsSUFBSSxDQUFDTixLQUFLLENBQUMsQ0FBQztNQUFFLENBQUMsQ0FBQyxPQUFPTyxDQUFDLEVBQUU7UUFBRUosTUFBTSxDQUFDSSxDQUFDLENBQUM7TUFBRTtJQUFFO0lBQzFGLFNBQVNDLFFBQVFBLENBQUNSLEtBQUssRUFBRTtNQUFFLElBQUk7UUFBRUssSUFBSSxDQUFDUCxTQUFT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VUFBTyxDQUFFO1FBQUE7VUFBQXlFLFNBQUEsQ0FBQS9LLElBQUE7VUFBQTtRQUFBO1VBQUErSyxTQUFBLENBQUEvSyxJQUFBO1VBQUE7UUFBQTtVQUFBK0ssU0FBQSxDQUFBZCxJQUFBO1VBQUFhLEdBQUEsR0FBQUMsU0FBQTtVQUFBSixVQUFBLENBQUExSyxDQUFBLENBQUE2SyxHQUFBO1FBQUE7VUFBQUMsU0FBQSxDQUFBZCxJQUFBO1VBQUFVLFVBQUEsQ0FBQTlDLENBQUE7VUFBQSxPQUFBa0QsU0FBQSxDQUFBWCxNQUFBO1FBQUE7VUFBQSxPQUFBVyxTQUFBLENBQUFiLE1BQUEsV0FFdkQ7WUFBRTdELEtBQUssRUFBRSxJQUFJO1lBQUVDLE9BQU8sRUFBRW1DLEtBQUssQ0FBQ25DO1VBQU8sQ0FBRTtRQUFBO1FBQUE7VUFBQSxPQUFBeUUsU0FBQSxDQUFBVixJQUFBO01BQUE7SUFBQSxHQUFBSyxRQUFBO0VBQUEsQ0FDL0MsRUFBQTtBRHRFRCIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ydW5SdWxlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi9wYXRoVXRpbHMnO1xuaW1wb3J0IHsgZGV2V2Fybk9uY2UgfSBmcm9tICcuL2Rldldhcm5pbmcnO1xuZnVuY3Rpb24gaXNUaGVuYWJsZSh2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7XG59XG4vKiogRW1wdHkgZm9yIGByZXF1aXJlZGA6IHVuZGVmaW5lZCAvIG51bGwgLyAnJyAvIGVtcHR5IGFycmF5LiAqL1xuZnVuY3Rpb24gaXNFbXB0eVZhbHVlKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHZhbHVlID09PSBudWxsIHx8XG4gICAgICAgIHZhbHVlID09PSAnJyB8fFxuICAgICAgICAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSk7XG59XG4vKipcbiAqIENvZXJjZSBhIHRocm93bi9yZWplY3RlZCByZWFzb24gaW50byBkaXNwbGF5YWJsZSBmYWlsdXJlIGNvbnRlbnQ6XG4gKiBhIG5vbi1lbXB0eSBFcnJvci5tZXNzYWdlIG9yIGEgbm9uLWVtcHR5IHBsYWluIHN0cmluZyDigJQgb3RoZXJ3aXNlIG51bGxcbiAqIChjYWxsZXIgcGlja3MgaXRzIGZhbGxiYWNrKS4gU2hhcmVkIHdpdGggdGhlIGZvcm0tbGV2ZWwgbGFzdC1yZXNvcnQgbmV0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvZXJjZUZhaWx1cmVSZWFzb24ocmVhc29uKSB7XG4gICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yICYmIHJlYXNvbi5tZXNzYWdlKVxuICAgICAgICByZXR1cm4gcmVhc29uLm1lc3NhZ2U7XG4gICAgaWYgKHR5cGVvZiByZWFzb24gPT09ICdzdHJpbmcnICYmIHJlYXNvbilcbiAgICAgICAgcmV0dXJuIHJlYXNvbjtcbiAgICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogRmFpbHVyZSBtZXNzYWdlIGZvciBhIHJlamVjdGVkL3Rocm93biBjdXN0b20gdmFsaWRhdG9yOlxuICogRXJyb3IubWVzc2FnZSDihpIgcGxhaW4gc3RyaW5nIHJlYXNvbiDihpIgcnVsZS5tZXNzYWdlIOKGkiBnZW5lcmljIGZhbGxiYWNrLlxuICovXG5mdW5jdGlvbiByZXNvbHZlRmFpbHVyZU1lc3NhZ2UocmVhc29uLCBydWxlKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBjb2VyY2VGYWlsdXJlUmVhc29uKHJlYXNvbikpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChydWxlLm1lc3NhZ2UgfHwgJ1ZhbGlkYXRpb24gZmFpbGVkJyk7XG59XG4vKipcbiAqIFJlc29sdmUgZnVuY3Rpb24tZm9ybSBydWxlcyBpbnRvIHN0YXRpYyBydWxlcy4gVGhlXG4gKiBjb250ZXh0IGV4cG9zZXMgdGhlIHZhbHVlIHNuYXBzaG90IHRoZSBydW4gd2FzIGludm9rZWQgd2l0aDsgZnVuY3Rpb24gcnVsZXNcbiAqIG11c3QgYmUgY2hlYXAgYW5kIHNpZGUtZWZmZWN0IGZyZWUg4oCUIHRoZXkgbWF5IGJlIHJlc29sdmVkIG1vcmUgdGhhbiBvbmNlXG4gKiBwZXIgdmFsaWRhdGlvbiBwYXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVJ1bGVzKHJ1bGVzLCB2YWx1ZXMsIGluc3RhbmNlKSB7XG4gICAgLy8gRmFzdCBwYXRoOiBubyBmdW5jdGlvbiBydWxlcyDihpIgbm90aGluZyB0byByZXNvbHZlLCBubyBjdHggYWxsb2NhdGlvbi5cbiAgICAvLyBUaGlzIGFsc28gbWFrZXMgdGhlIGVuZ2luZS1pbnRlcm5hbCByZS1yZXNvbHV0aW9uIG9mIGFscmVhZHktcmVzb2x2ZWRcbiAgICAvLyBhcnJheXMgZnJlZS5cbiAgICBpZiAoIXJ1bGVzLnNvbWUoKHJ1bGUpID0+IHR5cGVvZiBydWxlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICByZXR1cm4gcnVsZXM7XG4gICAgfVxuICAgIC8vIExpdmUtaW5zdGFuY2UgbWVtYmVycyAoc2V0RmllbGRzVmFsdWUsIGdldEZpZWxkRXJyb3IsIOKApikgYXJlIHNwcmVhZCBpblxuICAgIC8vIHdoZW4gYXZhaWxhYmxlOyB0aGUgcmVhZHMgYWx3YXlzIGNvbWUgZnJvbSB0aGUgdmFsaWRhdGlvbi10aW1lIHNuYXBzaG90LlxuICAgIGNvbnN0IGN0eCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgaW5zdGFuY2UpLCB7IGdldEZpZWxkVmFsdWU6IChuYW1lKSA9PiByZXNvbHZlVmFsdWUodmFsdWVzLCBuYW1lKSwgZ2V0RmllbGRzVmFsdWU6ICgpID0+IHZhbHVlcyB9KTtcbiAgICByZXR1cm4gcnVsZXMubWFwKChydWxlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcnVsZSAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHJldHVybiBydWxlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHJ1bGUoY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBBIHRocm93aW5nIHJ1bGUgZmFjdG9yeSBtdXN0IG5vdCBjcmFzaCByZW5kZXJpbmcgb3IgdmFsaWRhdGlvbiDigJRcbiAgICAgICAgICAgIC8vIHN1cmZhY2UgaXQgYXMgYSBydWxlIHRoYXQgYWx3YXlzIGZhaWxzIHdpdGggdGhlIHRocm93biByZWFzb24uXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogTm9ybWFsaXplIGEgZm9ybS9pdGVtLWxldmVsIHZhbGlkYXRlVHJpZ2dlciBjb25maWcgaW50byB0aGUgZWZmZWN0aXZlXG4gKiBpbnRlcmFjdGl2ZSBldmVudCBsaXN0OiBpdGVtLWxldmVsICh3aGVuIHByZXNlbnQpIG92ZXJyaWRlcyBmb3JtLWxldmVsO1xuICogYGZhbHNlYCBkaXNhYmxlcyBpbnRlcmFjdGl2ZSB2YWxpZGF0aW9uIGVudGlyZWx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVHJpZ2dlcnMoaXRlbVRyaWdnZXIsIGZvcm1UcmlnZ2VyKSB7XG4gICAgY29uc3QgZWZmZWN0aXZlID0gaXRlbVRyaWdnZXIgPT09IHVuZGVmaW5lZCA/IGZvcm1UcmlnZ2VyIDogaXRlbVRyaWdnZXI7XG4gICAgaWYgKGVmZmVjdGl2ZSA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBbXTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShlZmZlY3RpdmUpID8gZWZmZWN0aXZlIDogW2VmZmVjdGl2ZV07XG59XG4vKipcbiAqIEZpbHRlciBydWxlcyBhcHBsaWNhYmxlIHRvIGFuIGludGVyYWN0aXZlIGV2ZW50OiB0aGUgZXZlbnRcbiAqIHZhbGlkYXRlcyBvbmx5IHdoZW4gaXQgaXMgaW4gdGhlIGl0ZW0ncyBlZmZlY3RpdmUgdHJpZ2dlciBzZXQuIFdpdGhpbiB0aGVcbiAqIHNldCwgYSBydWxlIFdJVEhPVVQgYHZhbGlkYXRlVHJpZ2dlcmAgcnVucyBvbiBldmVyeSBldmVudDsgYSBydWxlIFdJVEggb25lXG4gKiBydW5zIG9ubHkgb24gbWF0Y2hpbmcgZXZlbnRzIOKAlCBzbyBhIHJ1bGUgdHJpZ2dlciBvdXRzaWRlIHRoZSBpdGVtJ3Mgc2V0XG4gKiBuZXZlciBmaXJlcyBpbnRlcmFjdGl2ZWx5LiBTdWJtaXQtdGltZSB2YWxpZGF0aW9uIGJ5cGFzc2VzIHRoaXMgZmlsdGVyIGFuZFxuICogcnVucyBldmVyeSBydWxlLlxuICpcbiAqIERldiBndWFyZDogYSBydWxlIHdob3NlIChub24tZW1wdHkpIHRyaWdnZXIgc2V0IGlzIGZ1bGx5IE9VVFNJREUgdGhlXG4gKiBhY3RpdmUgc2V0IGNhbiBuZXZlciBmaXJlIGludGVyYWN0aXZlbHkg4oCUIHVzdWFsbHkgYSBsZWZ0b3ZlciBvZiB0aGVcbiAqIHByZS0wLjAuNzYgb3ZlcnJpZGUgc2VtYW50aWNzLCBzbyBpdCB3YXJucyBvbmNlLiBgdmFsaWRhdGVUcmlnZ2VyOiBbXWBcbiAqIGlzIHRoZSBkZWxpYmVyYXRlIHN1Ym1pdC1vbmx5IGlkaW9tIGFuZCBzdGF5cyBzaWxlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJSdWxlc0J5VHJpZ2dlcihydWxlcywgdHJpZ2dlciwgYWN0aXZlVHJpZ2dlcnMsIGZpZWxkTmFtZSkge1xuICAgIGlmICghYWN0aXZlVHJpZ2dlcnMuaW5jbHVkZXModHJpZ2dlcikpXG4gICAgICAgIHJldHVybiBbXTtcbiAgICByZXR1cm4gcnVsZXMuZmlsdGVyKChydWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1bGVUcmlnZ2VyID0gcnVsZS52YWxpZGF0ZVRyaWdnZXI7XG4gICAgICAgIGlmIChydWxlVHJpZ2dlciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IHJ1bGVUcmlnZ2VycyA9IEFycmF5LmlzQXJyYXkocnVsZVRyaWdnZXIpID8gcnVsZVRyaWdnZXIgOiBbcnVsZVRyaWdnZXJdO1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gcnVsZVRyaWdnZXJzLmluY2x1ZGVzKHRyaWdnZXIpO1xuICAgICAgICBpZiAoIW1hdGNoZXMgJiZcbiAgICAgICAgICAgIHJ1bGVUcmlnZ2Vycy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAhcnVsZVRyaWdnZXJzLnNvbWUoKHQpID0+IGFjdGl2ZVRyaWdnZXJzLmluY2x1ZGVzKHQpKSkge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGZpZWxkTmFtZSAhPT0gbnVsbCAmJiBmaWVsZE5hbWUgIT09IHZvaWQgMCA/IGZpZWxkTmFtZSA6ICcodW5rbm93biknO1xuICAgICAgICAgICAgZGV2V2Fybk9uY2UoYHRyaWdnZXI6JHtuYW1lfToke3J1bGVUcmlnZ2Vycy5qb2luKCcsJyl9YCwgYFtQcm9Gb3JtXSBGaWVsZCBcIiR7bmFtZX1cIjogcnVsZSB2YWxpZGF0ZVRyaWdnZXIgWyR7cnVsZVRyaWdnZXJzLmpvaW4oJywgJyl9XSBpcyBvdXRzaWRlIHRoaXMgZmllbGQncyBhY3RpdmUgdHJpZ2dlciBzZXQgWyR7YWN0aXZlVHJpZ2dlcnMuam9pbignLCAnKX1dIOKAlCB0aGUgcnVsZSB3aWxsIG9ubHkgcnVuIG9uIHN1Ym1pdC4gSW5jbHVkZSBpdCBpbiB0aGUgaXRlbS9mb3JtIHZhbGlkYXRlVHJpZ2dlciB0byBydW4gaXQgaW50ZXJhY3RpdmVseS5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF0Y2hlcztcbiAgICB9KTtcbn1cbi8qKiBCdWlsdC1pbiBgdHlwZWAgY2hlY2tzLiBgZW51bWAgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5IGFnYWluc3QgYHJ1bGUuZW51bWAuICovXG5jb25zdCBUWVBFX0NIRUNLUyA9IHtcbiAgICBzdHJpbmc6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycsXG4gICAgbnVtYmVyOiAodikgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInICYmICFOdW1iZXIuaXNOYU4odiksXG4gICAgYm9vbGVhbjogKHYpID0+IHR5cGVvZiB2ID09PSAnYm9vbGVhbicsXG4gICAgbWV0aG9kOiAodikgPT4gdHlwZW9mIHYgPT09ICdmdW5jdGlvbicsXG4gICAgaW50ZWdlcjogKHYpID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNJbnRlZ2VyKHYpLFxuICAgIGZsb2F0OiAodikgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInICYmICFOdW1iZXIuaXNOYU4odikgJiYgIU51bWJlci5pc0ludGVnZXIodiksXG4gICAgYXJyYXk6ICh2KSA9PiBBcnJheS5pc0FycmF5KHYpLFxuICAgIG9iamVjdDogKHYpID0+IHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2ICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHYpLFxuICAgIGRhdGU6ICh2KSA9PiB2IGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICA/ICFOdW1iZXIuaXNOYU4odi5nZXRUaW1lKCkpXG4gICAgICAgIDogdHlwZW9mICh2ID09PSBudWxsIHx8IHYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHYuZ2V0VGltZSkgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgICFOdW1iZXIuaXNOYU4odi5nZXRUaW1lKCkpLFxuICAgIHJlZ2V4cDogKHYpID0+IHtcbiAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBSZWdFeHApXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiB2ICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBSZWdFeHAodik7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaGV4OiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIC9eIz8oW2EtZjAtOV17Nn18W2EtZjAtOV17M30pJC9pLnRlc3QodiksXG4gICAgLy8gU3RyaW5nLW9ubHk6IGNvZXJjaW5nIHZpYSBTdHJpbmcoKSB3b3VsZCBsZXQgZS5nLiBbJ2FAYi5jbyddIHN0cmluZ2lmeVxuICAgIC8vIGludG8gYSBwYXNzaW5nIHZhbHVlLlxuICAgIGVtYWlsOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvLnRlc3QodiksXG4gICAgdXJsOiAodikgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHYgIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTCh2KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcbn07XG4vKiogRnJpZW5kbHkgZ2VuZXJhdGVkIG1lc3NhZ2VzIGZvciB0aGUgbGVnYWN5IHR5cGUgbmFtZXM7IG90aGVycyBnZXQgYSBnZW5lcmljIG9uZS4gKi9cbmZ1bmN0aW9uIHR5cGVGYWlsdXJlTWVzc2FnZShuYW1lLCB0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gYCR7bmFtZX0gbXVzdCBiZSBhIG51bWJlcmA7XG4gICAgaWYgKHR5cGUgPT09ICdlbWFpbCcpXG4gICAgICAgIHJldHVybiBgJHtuYW1lfSBtdXN0IGJlIGEgdmFsaWQgZW1haWxgO1xuICAgIGlmICh0eXBlID09PSAndXJsJylcbiAgICAgICAgcmV0dXJuIGAke25hbWV9IG11c3QgYmUgYSB2YWxpZCBVUkxgO1xuICAgIHJldHVybiBgJHtuYW1lfSBpcyBub3QgYSB2YWxpZCAke3R5cGV9YDtcbn1cbi8qKiBNZWFzdXJlIGEgdmFsdWUgZm9yIGxlbi9taW4vbWF4OiBzdHJpbmcg4oaSIGxlbmd0aCwgYXJyYXkg4oaSIGNvdW50LCBudW1iZXIg4oaSIHZhbHVlLiAqL1xuZnVuY3Rpb24gbWVhc3VyZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpXG4gICAgICAgIHJldHVybiB7IG1lYXN1cmVkOiB2YWx1ZS5sZW5ndGgsIHVuaXQ6ICcgY2hhcmFjdGVycycgfTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgIHJldHVybiB7IG1lYXN1cmVkOiB2YWx1ZS5sZW5ndGgsIHVuaXQ6ICcgaXRlbXMnIH07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgIU51bWJlci5pc05hTih2YWx1ZSkpXG4gICAgICAgIHJldHVybiB7IG1lYXN1cmVkOiB2YWx1ZSwgdW5pdDogJycgfTtcbiAgICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogRXZhbHVhdGUgZXZlcnkgYnVpbHQtaW4gKG5vbi1gdmFsaWRhdG9yYCkgcnVsZSBraW5kIGZvciBhIHNpbmdsZSBydWxlLlxuICogUmV0dXJucyB0aGUgZXJyb3IgY29udGVudCBmb3IgdGhlIGZpcnN0IGZhaWxpbmcgY2hlY2ssIG9yIG51bGwuXG4gKlxuICogRW1wdHkgdmFsdWVzICh1bmRlZmluZWQgLyBudWxsIC8gJycgLyBlbXB0eSBhcnJheSkgYXJlIG9ubHkgY2hlY2tlZCBieVxuICogYHJlcXVpcmVkYCDigJQgZXZlcnkgb3RoZXIgYnVpbHRpbiBjaGVjayBpcyBza2lwcGVkLCBzbyBvcHRpb25hbCBmaWVsZHNcbiAqIGRvbid0IGVycm9yIHVudGlsIHRoZXkgaGF2ZSBjb250ZW50LiBDdXN0b20gdmFsaWRhdG9ycyBhcmUgTk9UIHN1YmplY3QgdG9cbiAqIHRoaXMgc2tpcCAodGhleSByZWNlaXZlIHRoZSBlbXB0eSB2YWx1ZSBhbmQgZGVjaWRlIHRoZW1zZWx2ZXMpLlxuICovXG5mdW5jdGlvbiBjaGVja0J1aWx0aW5SdWxlcyhydWxlLCB2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChydWxlLnJlcXVpcmVkICYmIGlzRW1wdHlWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBpcyByZXF1aXJlZGA7XG4gICAgfVxuICAgIGlmIChpc0VtcHR5VmFsdWUodmFsdWUpKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAvLyBOb24tZW1wdHkgc3RyaW5nIG9mIG9ubHkgd2hpdGVzcGFjZSAodGhlIHJlcXVpcmVkK3doaXRlc3BhY2UgdHJpbSBpZGlvbSkuXG4gICAgaWYgKHJ1bGUud2hpdGVzcGFjZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBjYW5ub3QgYmUgYmxhbmtgO1xuICAgIH1cbiAgICAvLyBsZW46IGV4YWN0IGxlbmd0aC9jb3VudC92YWx1ZSDigJQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIG1pbi9tYXguXG4gICAgaWYgKHJ1bGUubGVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbSA9IG1lYXN1cmVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGlmIChtICE9PSBudWxsICYmIG0ubWVhc3VyZWQgIT09IHJ1bGUubGVuKSB7XG4gICAgICAgICAgICByZXR1cm4gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgZXhhY3RseSAke3J1bGUubGVufSR7bS51bml0fWA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAocnVsZS5taW4gIT09IHVuZGVmaW5lZCB8fCBydWxlLm1heCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG0gPSBtZWFzdXJlVmFsdWUodmFsdWUpO1xuICAgICAgICBpZiAobSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJ1bGUubWluICE9PSB1bmRlZmluZWQgJiYgbS5tZWFzdXJlZCA8IHJ1bGUubWluKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGF0IGxlYXN0ICR7cnVsZS5taW59JHttLnVuaXR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChydWxlLm1heCAhPT0gdW5kZWZpbmVkICYmIG0ubWVhc3VyZWQgPiBydWxlLm1heCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBubyBtb3JlIHRoYW4gJHtydWxlLm1heH0ke20udW5pdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChydWxlLnBhdHRlcm4gJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBBIC9nIG9yIC95IHJlZ2V4IGlzIHN0YXRlZnVsOiBsYXN0SW5kZXggcGVyc2lzdHMgYWNyb3NzIC50ZXN0KCkgY2FsbHMsXG4gICAgICAgIC8vIHNvIHJlcGVhdGVkIHJ1bnMgd291bGQgYWx0ZXJuYXRlIHBhc3MvZmFpbCDigJQgcmVzZXQgaXQgZXZlcnkgcnVuLlxuICAgICAgICBpZiAocnVsZS5wYXR0ZXJuLmdsb2JhbCB8fCBydWxlLnBhdHRlcm4uc3RpY2t5KVxuICAgICAgICAgICAgcnVsZS5wYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGlmICghcnVsZS5wYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IGZvcm1hdCBpcyBpbnZhbGlkYDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocnVsZS50eXBlICYmIHJ1bGUudHlwZSAhPT0gJ2VudW0nICYmICFUWVBFX0NIRUNLU1tydWxlLnR5cGVdKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gcnVsZS5tZXNzYWdlIHx8IHR5cGVGYWlsdXJlTWVzc2FnZShuYW1lLCBydWxlLnR5cGUpO1xuICAgIH1cbiAgICAvLyBlbnVtIG1lbWJlcnNoaXA6IGFwcGxpZXMgZm9yIHR5cGUgJ2VudW0nIG9yIHdoZW5ldmVyIHJ1bGUuZW51bSBpcyBwcmVzZW50LlxuICAgIGlmIChydWxlLmVudW0gJiYgQXJyYXkuaXNBcnJheShydWxlLmVudW0pICYmICFydWxlLmVudW0uaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBvbmUgb2YgJHtydWxlLmVudW0uam9pbignLCAnKX1gO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIHRvUnVsZUFycmF5KHJ1bGVzKSB7XG4gICAgaWYgKCFydWxlcylcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJ1bGVzKSA/IHJ1bGVzIDogW3J1bGVzXTtcbn1cbi8qKiBNZW1iZXJzIGZvciBkZWVwIHJ1bGVzOiBhcnJheSDihpIgaW5kZXhlZCBlbnRyaWVzLCBwbGFpbiBvYmplY3Qg4oaSIGtleSBlbnRyaWVzLiAqL1xuZnVuY3Rpb24gZGVlcE1lbWJlcnModmFsdWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoKG1lbWJlciwgaW5kZXgpID0+IFtTdHJpbmcoaW5kZXgpLCBtZW1iZXJdKTtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JylcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlKTtcbiAgICByZXR1cm4gW107XG59XG5jb25zdCBQQVNTID0geyBlcnJvcjogbnVsbCwgd2FybmluZzogbnVsbCB9O1xuLyoqXG4gKiBEZXYgZ3VhcmQgZm9yIHRoZSBwcmUtMC4wLjc2IHZhbGlkYXRvciBjb250cmFjdDogcmV0dXJuaW5nIGEgc3RyaW5nIG9yXG4gKiBgZmFsc2VgIHVzZWQgdG8gRkFJTCB0aGUgcnVsZSDigJQgdW5kZXIgdGhlIGAocnVsZSwgdmFsdWUpYCBjb250cmFjdCByZXR1cm5cbiAqIHZhbHVlcyBhcmUgaWdub3JlZCBhbmQgb25seSB0aHJvdy9yZWplY3QgZmFpbHMuIFN1Y2ggYSByZXR1cm4gaXMgYWxtb3N0XG4gKiBjZXJ0YWlubHkgYSBsZWdhY3kgdmFsaWRhdG9yIHNpbGVudGx5IHBhc3NpbmcsIHNvIGl0IHdhcm5zIG9uY2UuXG4gKi9cbmZ1bmN0aW9uIHdhcm5MZWdhY3lWYWxpZGF0b3JSZXR1cm4obmFtZSwgcmVzdWx0KSB7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdzdHJpbmcnICYmIHJlc3VsdCAhPT0gZmFsc2UpXG4gICAgICAgIHJldHVybjtcbiAgICBkZXZXYXJuT25jZShgdmFsaWRhdG9yLXJldHVybjoke25hbWV9YCwgYFtQcm9Gb3JtXSBGaWVsZCBcIiR7bmFtZX1cIjogYSBjdXN0b20gdmFsaWRhdG9yIHJldHVybmVkICR7dHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgPyAnYSBzdHJpbmcnIDogJ2ZhbHNlJ30g4oCUIHJldHVybiB2YWx1ZXMgYXJlIElHTk9SRUQ7IHZhbGlkYXRvcnMgZmFpbCBieSB0aHJvd2luZyBvciByZWplY3RpbmcgKGEgdGhyb3duIEVycm9yJ3MgbWVzc2FnZSBiZWNvbWVzIHRoZSBmaWVsZCBlcnJvcikuYCk7XG59XG4vKiogUnVuIGEgcnVsZSdzIHRyYW5zZm9ybSwgY29udGFpbmluZyB0aHJvd3MgYXMgYSBydWxlIGZhaWx1cmUuICovXG5mdW5jdGlvbiBhcHBseVRyYW5zZm9ybShydWxlLCByYXdWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcnVsZS50cmFuc2Zvcm0gIT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiB7IG9rOiB0cnVlLCB2YWx1ZTogcmF3VmFsdWUgfTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IHJ1bGUudHJhbnNmb3JtKHJhd1ZhbHVlKSB9O1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZmFpbHVyZTogcmVzb2x2ZUZhaWx1cmVNZXNzYWdlKGVyciwgcnVsZSkgfTtcbiAgICB9XG59XG4vKipcbiAqIEZsYXR0ZW4gYSBydWxlJ3MgZGVlcCBzb3VyY2VzIChgZmllbGRzYCBwZXIga2V5LCB0aGVuIGBkZWZhdWx0RmllbGRgIHBlclxuICogbWVtYmVyKSBpbnRvIFtzdWJSdWxlLCBtZW1iZXJWYWx1ZSwgbWVtYmVyTmFtZV0gdHVwbGVzIOKAlCB0aGUgc2luZ2xlIHBsYWNlXG4gKiB0aGF0IGtub3dzIGhvdyBkZWVwIHJ1bGVzIG1hcCBvbnRvIGEgY29udGFpbmVyIHZhbHVlLlxuICovXG5mdW5jdGlvbiBkZWVwUnVsZUVudHJpZXMocnVsZSwgdmFsdWUsIG5hbWUpIHtcbiAgICBjb25zdCBlbnRyaWVzID0gW107XG4gICAgaWYgKHJ1bGUuZmllbGRzKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHZhbHVlO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHN1YlJ1bGVzXSBvZiBPYmplY3QuZW50cmllcyhydWxlLmZpZWxkcykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViUnVsZSBvZiB0b1J1bGVBcnJheShzdWJSdWxlcykpIHtcbiAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2goW3N1YlJ1bGUsIHNvdXJjZVtrZXldLCBgJHtuYW1lfS4ke2tleX1gXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJ1bGUuZGVmYXVsdEZpZWxkKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgbWVtYmVyXSBvZiBkZWVwTWVtYmVycyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViUnVsZSBvZiB0b1J1bGVBcnJheShydWxlLmRlZmF1bHRGaWVsZCkpIHtcbiAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2goW3N1YlJ1bGUsIG1lbWJlciwgYCR7bmFtZX0uJHtrZXl9YF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbnRyaWVzO1xufVxuLyoqXG4gKiBNZXJnZSBhIHN1Yi1ydWxlJ3Mgb3V0Y29tZSBpbnRvIHRoZSBwYXJlbnQncyBjaGFubmVscy4gQSBzdWItcnVsZSBmbGFnZ2VkXG4gKiBgd2FybmluZ09ubHlgIGNvbnRyaWJ1dGVzIGl0cyBmYWlsdXJlIGFzIGEgV0FSTklORzsgb3RoZXJ3aXNlIGl0cyBlcnJvclxuICogYmxvY2tzLiBSZXR1cm5zIHRydWUgd2hlbiBhIGJsb2NraW5nIGVycm9yIGxhbmRlZCAoc3RvcCB3YWxraW5nKS5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VTdWJSZXN1bHQoYWNjLCBzdWJSdWxlLCBzdWIpIHtcbiAgICBpZiAoc3ViLndhcm5pbmcgIT09IG51bGwgJiYgYWNjLndhcm5pbmcgPT09IG51bGwpXG4gICAgICAgIGFjYy53YXJuaW5nID0gc3ViLndhcm5pbmc7XG4gICAgaWYgKHN1Yi5lcnJvciAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc3ViUnVsZS53YXJuaW5nT25seSkge1xuICAgICAgICAgICAgaWYgKGFjYy53YXJuaW5nID09PSBudWxsKVxuICAgICAgICAgICAgICAgIGFjYy53YXJuaW5nID0gc3ViLmVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYWNjLmVycm9yID0gc3ViLmVycm9yO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBGb2xkIG9uZSBydWxlJ3Mgb3V0Y29tZSBpbnRvIHRoZSBydW4tbGV2ZWwgY2hhbm5lbHMuIEEgcnVsZSBmbGFnZ2VkXG4gKiBgd2FybmluZ09ubHlgIGRvd25ncmFkZXMgZXZlcnl0aGluZyBpdCBwcm9kdWNlZCAob3duIGNoZWNrcyBBTkQgZGVlcFxuICogc3ViLXJ1bGVzKSB0byBhIHdhcm5pbmcuIFJldHVybnMgdGhlIGJsb2NraW5nIGVycm9yIHRvIHN1cmZhY2UsIG9yIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGZvbGRSdWxlUmVzdWx0KHJ1bGUsIHJlc3VsdCwgc3RhdGUpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHJ1bGUud2FybmluZ09ubHkpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IChfYSA9IHJlc3VsdC5lcnJvcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcmVzdWx0Lndhcm5pbmc7XG4gICAgICAgIGlmIChjb250ZW50ICE9PSBudWxsICYmIHN0YXRlLndhcm5pbmcgPT09IG51bGwpXG4gICAgICAgICAgICBzdGF0ZS53YXJuaW5nID0gY29udGVudDtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChyZXN1bHQud2FybmluZyAhPT0gbnVsbCAmJiBzdGF0ZS53YXJuaW5nID09PSBudWxsKVxuICAgICAgICBzdGF0ZS53YXJuaW5nID0gcmVzdWx0Lndhcm5pbmc7XG4gICAgcmV0dXJuIHJlc3VsdC5lcnJvcjtcbn1cbi8qKlxuICogRXZhbHVhdGUgT05FIHJ1bGUgKHRyYW5zZm9ybSDihpIgYnVpbHRpbiBjaGVja3Mg4oaSIHZhbGlkYXRvciDihpIgZGVlcCBydWxlcylcbiAqIHN5bmNocm9ub3VzbHkuIFByb21pc2UtcmV0dXJuaW5nIHZhbGlkYXRvcnMgYXJlIGRlZmVycmVkIChzZWUgcnVuUnVsZXNTeW5jKS5cbiAqL1xuZnVuY3Rpb24gZXZhbFJ1bGVTeW5jKHJ1bGUsIHJhd1ZhbHVlLCBuYW1lKSB7XG4gICAgY29uc3QgcHJlcCA9IGFwcGx5VHJhbnNmb3JtKHJ1bGUsIHJhd1ZhbHVlKTtcbiAgICBpZiAoIXByZXAub2spXG4gICAgICAgIHJldHVybiB7IGVycm9yOiBwcmVwLmZhaWx1cmUsIHdhcm5pbmc6IG51bGwgfTtcbiAgICBjb25zdCB2YWx1ZSA9IHByZXAudmFsdWU7XG4gICAgbGV0IGZhaWx1cmUgPSBjaGVja0J1aWx0aW5SdWxlcyhydWxlLCB2YWx1ZSwgbmFtZSk7XG4gICAgaWYgKGZhaWx1cmUgPT09IG51bGwgJiYgdHlwZW9mIHJ1bGUudmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBydWxlLnZhbGlkYXRvcihydWxlLCB2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnRoZW4oKHJlc29sdmVkKSA9PiB3YXJuTGVnYWN5VmFsaWRhdG9yUmV0dXJuKG5hbWUsIHJlc29sdmVkKSwgKCkgPT4geyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHdhcm5MZWdhY3lWYWxpZGF0b3JSZXR1cm4obmFtZSwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBmYWlsdXJlID0gcmVzb2x2ZUZhaWx1cmVNZXNzYWdlKGVyciwgcnVsZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZhaWx1cmUgIT09IG51bGwpXG4gICAgICAgIHJldHVybiB7IGVycm9yOiBmYWlsdXJlLCB3YXJuaW5nOiBudWxsIH07XG4gICAgaWYgKChydWxlLmZpZWxkcyB8fCBydWxlLmRlZmF1bHRGaWVsZCkgJiYgIWlzRW1wdHlWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gRGVlcCBydWxlcyBuZWVkIGEgY29udGFpbmVyOyBhIG5vbi1lbXB0eSBwcmltaXRpdmUgZmFpbHMgdGhlIFBBUkVOVFxuICAgICAgICAvLyAoY2xlYXIgYXR0cmlidXRpb24pIGluc3RlYWQgb2YgcHJvZHVjaW5nIGNvbmZ1c2luZyBjaGlsZCBlcnJvcnMuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcjogcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5YCwgd2FybmluZzogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjYyA9IHsgZXJyb3I6IG51bGwsIHdhcm5pbmc6IG51bGwgfTtcbiAgICAgICAgZm9yIChjb25zdCBbc3ViUnVsZSwgc3ViVmFsdWUsIHN1Yk5hbWVdIG9mIGRlZXBSdWxlRW50cmllcyhydWxlLCB2YWx1ZSwgbmFtZSkpIHtcbiAgICAgICAgICAgIGlmIChtZXJnZVN1YlJlc3VsdChhY2MsIHN1YlJ1bGUsIGV2YWxSdWxlU3luYyhzdWJSdWxlLCBzdWJWYWx1ZSwgc3ViTmFtZSkpKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICAgIHJldHVybiBQQVNTO1xufVxuLyoqIEFzeW5jIGNvdW50ZXJwYXJ0IG9mIGV2YWxSdWxlU3luYyDigJQgY3VzdG9tIHZhbGlkYXRvcnMgYXJlIGF3YWl0ZWQuICovXG5mdW5jdGlvbiBldmFsUnVsZUFzeW5jKHJ1bGUsIHJhd1ZhbHVlLCBuYW1lKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgcHJlcCA9IGFwcGx5VHJhbnNmb3JtKHJ1bGUsIHJhd1ZhbHVlKTtcbiAgICAgICAgaWYgKCFwcmVwLm9rKVxuICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHByZXAuZmFpbHVyZSwgd2FybmluZzogbnVsbCB9O1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHByZXAudmFsdWU7XG4gICAgICAgIGxldCBmYWlsdXJlID0gY2hlY2tCdWlsdGluUnVsZXMocnVsZSwgdmFsdWUsIG5hbWUpO1xuICAgICAgICBpZiAoZmFpbHVyZSA9PT0gbnVsbCAmJiB0eXBlb2YgcnVsZS52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gKHlpZWxkIHJ1bGUudmFsaWRhdG9yKHJ1bGUsIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgd2FybkxlZ2FjeVZhbGlkYXRvclJldHVybihuYW1lLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGZhaWx1cmUgPSByZXNvbHZlRmFpbHVyZU1lc3NhZ2UoZXJyLCBydWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZmFpbHVyZSAhPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBmYWlsdXJlLCB3YXJuaW5nOiBudWxsIH07XG4gICAgICAgIGlmICgocnVsZS5maWVsZHMgfHwgcnVsZS5kZWZhdWx0RmllbGQpICYmICFpc0VtcHR5VmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBEZWVwIHJ1bGVzIG5lZWQgYSBjb250YWluZXI7IGEgbm9uLWVtcHR5IHByaW1pdGl2ZSBmYWlscyB0aGUgUEFSRU5UXG4gICAgICAgICAgICAvLyAoY2xlYXIgYXR0cmlidXRpb24pIGluc3RlYWQgb2YgcHJvZHVjaW5nIGNvbmZ1c2luZyBjaGlsZCBlcnJvcnMuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXlgLCB3YXJuaW5nOiBudWxsIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhY2MgPSB7IGVycm9yOiBudWxsLCB3YXJuaW5nOiBudWxsIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtzdWJSdWxlLCBzdWJWYWx1ZSwgc3ViTmFtZV0gb2YgZGVlcFJ1bGVFbnRyaWVzKHJ1bGUsIHZhbHVlLCBuYW1lKSkge1xuICAgICAgICAgICAgICAgIGlmIChtZXJnZVN1YlJlc3VsdChhY2MsIHN1YlJ1bGUsIHlpZWxkIGV2YWxSdWxlQXN5bmMoc3ViUnVsZSwgc3ViVmFsdWUsIHN1Yk5hbWUpKSlcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQQVNTO1xuICAgIH0pO1xufVxuLyoqXG4gKiBTeW5jaHJvbm91cyBydWxlIHJ1bi4gQSBQcm9taXNlLXJldHVybmluZyB2YWxpZGF0b3IgQ0FOTk9UIGJlIGV2YWx1YXRlZFxuICogaGVyZSDigJQgaXQgaXMgZGVmZXJyZWQgKHRyZWF0ZWQgYXMgcGFzc2luZyBmb3IgdGhpcyBydW47IGl0cyByZWplY3Rpb24gaXNcbiAqIHN3YWxsb3dlZCkgYW5kIGxlZnQgdG8gdGhlIGFzeW5jIHJ1bnMgKGJsdXIvc3VibWl0KSwgd2hpY2ggYWx3YXlzIGF3YWl0IGl0LlxuICogRmFpbGluZyBpdCBpbnN0ZWFkIHdvdWxkIG1pcy1yZXBvcnQgXCJWYWxpZGF0aW9uIGZhaWxlZFwiIG9uIGV2ZXJ5IGtleXN0cm9rZVxuICogZm9yIHBlcmZlY3RseSB2YWxpZCBpbnB1dC5cbiAqXG4gKiBUaGUgcGVyLXJ1bGUgdHJ5L2NhdGNoIGlzIHRoZSBlbmdpbmUncyB0b3RhbGl0eSBjaG9rZSBwb2ludDogTk8gaW5wdXQg4oCUXG4gKiBpbmNsdWRpbmcgZXhvdGljIHZhbHVlcyB0aGF0IGJyZWFrIGEgYnVpbHRpbiBjaGVjayDigJQgbWF5IGVzY2FwZSBhcyBhIHRocm93O1xuICogZXZlcnkgZmFpbHVyZSBzdXJmYWNlcyB0aHJvdWdoIHRoZSBlcnJvci93YXJuaW5nIGNoYW5uZWxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuUnVsZXNTeW5jKG5hbWUsIHZhbHVlLCB2YWx1ZXMsIHJ1bGVzLCBpbnN0YW5jZSkge1xuICAgIGNvbnN0IHN0YXRlID0geyB3YXJuaW5nOiBudWxsIH07XG4gICAgZm9yIChjb25zdCBydWxlIG9mIHJlc29sdmVSdWxlcyhydWxlcywgdmFsdWVzLCBpbnN0YW5jZSkpIHtcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGV2YWxSdWxlU3luYyhydWxlLCB2YWx1ZSwgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmVzdWx0ID0geyBlcnJvcjogcmVzb2x2ZUZhaWx1cmVNZXNzYWdlKGVyciwgcnVsZSksIHdhcm5pbmc6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlcnJvciA9IGZvbGRSdWxlUmVzdWx0KHJ1bGUsIHJlc3VsdCwgc3RhdGUpO1xuICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4geyBlcnJvciwgd2FybmluZzogc3RhdGUud2FybmluZyB9O1xuICAgIH1cbiAgICByZXR1cm4geyBlcnJvcjogbnVsbCwgd2FybmluZzogc3RhdGUud2FybmluZyB9O1xufVxuLyoqXG4gKiBBc3luY2hyb25vdXMgcnVsZSBydW4uIEN1c3RvbSB2YWxpZGF0b3JzIGFyZSBhd2FpdGVkIChzeW5jIG9yIGFzeW5jKTpcbiAqIHJlc29sdmluZyBwYXNzZXMsIHJlamVjdGluZy90aHJvd2luZyBmYWlscy4gUmV0dXJuIHZhbHVlcyBhcmUgaWdub3JlZC5cbiAqIFNoYXJlcyB0aGUgdG90YWxpdHkgY2hva2UgcG9pbnQgd2l0aCBydW5SdWxlc1N5bmMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5SdWxlc0FzeW5jKG5hbWUsIHZhbHVlLCB2YWx1ZXMsIHJ1bGVzLCBpbnN0YW5jZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0geyB3YXJuaW5nOiBudWxsIH07XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiByZXNvbHZlUnVsZXMocnVsZXMsIHZhbHVlcywgaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB5aWVsZCBldmFsUnVsZUFzeW5jKHJ1bGUsIHZhbHVlLCBuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7IGVycm9yOiByZXNvbHZlRmFpbHVyZU1lc3NhZ2UoZXJyLCBydWxlKSwgd2FybmluZzogbnVsbCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBmb2xkUnVsZVJlc3VsdChydWxlLCByZXN1bHQsIHN0YXRlKTtcbiAgICAgICAgICAgIGlmIChlcnJvciAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvciwgd2FybmluZzogc3RhdGUud2FybmluZyB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGVycm9yOiBudWxsLCB3YXJuaW5nOiBzdGF0ZS53YXJuaW5nIH07XG4gICAgfSk7XG59IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
|