@1money/component-ui 0.0.99 → 0.0.100
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/business/Dialog/VerificationDialog/VerificationDialog.js +38 -39
- package/es/business/Dialog/variants/LoadingDialog.js +17 -17
- package/es/business/Filter/DateRange/DateRange.js +14 -14
- package/es/business/Select/Country/CountrySelect.js +71 -40
- package/es/business/Select/Country/interface.d.ts +31 -15
- package/es/business/Select/Country/style/CountrySelect.css +33 -0
- package/es/business/Select/Country/style/css.js +2 -0
- package/es/business/Select/Country/style/index.d.ts +1 -0
- package/es/business/Select/Country/style/index.js +2 -0
- package/es/business/shared/formCore/useSubmitAction.js +19 -19
- package/es/components/Icons/Illustrations.js +15 -15
- package/es/components/Notification/NotificationStatic.js +27 -32
- package/es/components/ProForm/ProForm.js +47 -51
- package/es/components/ProForm/Submitter.js +8 -8
- package/es/components/ProForm/core/hooks/useForm.js +77 -88
- package/es/components/ProForm/core/runRules.js +56 -61
- package/es/components/ProForm/hooks/useFieldRequest.js +19 -19
- package/es/components/ProForm/layouts/useOverlayForm.js +9 -11
- package/es/components/ProTable/ProTable.js +8 -8
- package/es/components/ProTable/useFetchData.js +23 -23
- package/es/components/Select/SelectOptionContent.js +8 -1
- package/es/components/Select/interface.d.ts +9 -0
- package/es/components/Select/interface.js +1 -1
- package/es/components/Select/style/Select.css +7 -0
- package/es/components/Spinner/Spinner.js +11 -11
- package/es/components/Table/internal/kernel/Table.js +8 -8
- package/es/index.css +1 -1
- package/lib/business/Dialog/BaseDialog/BaseDialog.js +2 -3
- package/lib/business/Dialog/Descriptions/Descriptions.js +2 -3
- package/lib/business/Dialog/DetailsDialog/DetailsDialog.js +2 -3
- package/lib/business/Dialog/FormDialog/FormDialog.js +2 -3
- package/lib/business/Dialog/VerificationDialog/VerificationDialog.js +39 -41
- package/lib/business/Dialog/variants/LoadingDialog.js +18 -19
- package/lib/business/FieldList/index.js +2 -3
- package/lib/business/Filter/DateRange/DateRange.js +14 -14
- package/lib/business/Select/Country/CountrySelect.js +71 -40
- package/lib/business/Select/Country/interface.d.ts +31 -15
- package/lib/business/Select/Country/style/CountrySelect.css +33 -0
- package/lib/business/Select/Country/style/css.js +4 -0
- package/lib/business/Select/Country/style/index.d.ts +1 -0
- package/lib/business/Select/Country/style/index.js +4 -0
- package/lib/business/shared/formCore/useSubmitAction.js +19 -19
- package/lib/components/Accordion/Accordion.js +2 -3
- package/lib/components/Accordion/index.js +2 -3
- package/lib/components/ActionBar/ActionBar.js +2 -3
- package/lib/components/Alert/Alert.js +2 -3
- package/lib/components/Alert/index.js +2 -3
- package/lib/components/Button/Button.js +2 -3
- package/lib/components/Button/index.js +2 -3
- package/lib/components/Calendar/Calendar.js +2 -3
- package/lib/components/Calendar/index.js +2 -3
- package/lib/components/Carousel/Carousel.js +2 -3
- package/lib/components/Carousel/index.js +2 -3
- package/lib/components/Cell/Cell.js +2 -3
- package/lib/components/Cell/index.js +2 -3
- package/lib/components/Checkbox/BaseCheckbox.js +2 -3
- package/lib/components/Checkbox/Checkbox.js +2 -3
- package/lib/components/Checkbox/CheckboxGroup.js +2 -3
- package/lib/components/Checkbox/index.js +2 -3
- package/lib/components/CoachMark/CoachMark.js +2 -3
- package/lib/components/CoachMark/index.js +2 -3
- package/lib/components/Copy/Clipboard.js +2 -3
- package/lib/components/Copy/Copy.js +2 -3
- package/lib/components/Copy/index.js +2 -3
- package/lib/components/Dialog/index.js +2 -3
- package/lib/components/Divider/Divider.js +2 -3
- package/lib/components/Drawer/Drawer.js +2 -3
- package/lib/components/Empty/Empty.js +2 -3
- package/lib/components/Empty/index.js +2 -3
- package/lib/components/Flex/Flex.js +2 -3
- package/lib/components/FormLayout/FormLayout.js +2 -3
- package/lib/components/Grid/Col.js +2 -3
- package/lib/components/Grid/Row.js +2 -3
- package/lib/components/Icons/Illustrations.js +15 -15
- package/lib/components/Icons/Logo.js +2 -3
- package/lib/components/Icons/Wrapper.js +2 -3
- package/lib/components/Icons/index.js +2 -3
- package/lib/components/Input/Amount/Amount.js +2 -3
- package/lib/components/Input/Amount/index.js +2 -3
- package/lib/components/Input/FieldShell/FieldShell.js +2 -3
- package/lib/components/Input/FieldShell/index.js +2 -3
- package/lib/components/Input/Input/Input.js +2 -3
- package/lib/components/Input/Input/index.js +2 -3
- package/lib/components/Input/Mask/Mask.js +2 -3
- package/lib/components/Input/Mask/index.js +2 -3
- package/lib/components/Input/OTP/index.js +2 -3
- package/lib/components/Input/Password/Password.js +2 -3
- package/lib/components/Input/Password/index.js +2 -3
- package/lib/components/Input/Search/Search.js +2 -3
- package/lib/components/Input/Search/index.js +2 -3
- package/lib/components/Input/TextArea/TextArea.js +2 -3
- package/lib/components/Input/TextArea/index.js +2 -3
- package/lib/components/Input/Trade/Trade.js +2 -3
- package/lib/components/Input/Trade/index.js +2 -3
- package/lib/components/Input/index.js +2 -3
- package/lib/components/Link/Link.js +2 -3
- package/lib/components/Link/index.js +2 -3
- package/lib/components/Navigation/Nav.js +2 -3
- package/lib/components/Navigation/Navigation.js +2 -3
- package/lib/components/Navigation/NavigationStepper.js +2 -3
- package/lib/components/Navigation/index.js +2 -3
- package/lib/components/Notification/Notification.js +2 -3
- package/lib/components/Notification/NotificationStatic.js +28 -34
- package/lib/components/Notification/index.js +2 -3
- package/lib/components/Pagination/Pagination.js +2 -3
- package/lib/components/Pagination/index.js +2 -3
- package/lib/components/PanelLayout/PanelLayout.js +2 -3
- package/lib/components/Popconfirm/Popconfirm.js +2 -3
- package/lib/components/Popconfirm/index.js +2 -3
- package/lib/components/Portal/index.js +2 -3
- package/lib/components/ProForm/ProForm.js +48 -53
- package/lib/components/ProForm/ProFormDependency.js +2 -3
- package/lib/components/ProForm/ProFormItem.js +2 -3
- package/lib/components/ProForm/Submitter.js +8 -8
- package/lib/components/ProForm/core/devWarning.js +2 -3
- package/lib/components/ProForm/core/hooks/useForm.js +78 -90
- package/lib/components/ProForm/core/runRules.js +56 -61
- package/lib/components/ProForm/core/useFormItem.js +2 -3
- package/lib/components/ProForm/fields/ProFormFieldSet.js +2 -3
- package/lib/components/ProForm/hooks/useFieldRequest.js +19 -19
- package/lib/components/ProForm/layouts/QueryFilter.js +2 -3
- package/lib/components/ProForm/layouts/useOverlayForm.js +10 -13
- package/lib/components/ProTable/ProTable.js +8 -8
- package/lib/components/ProTable/index.js +2 -3
- package/lib/components/ProTable/useFetchData.js +23 -23
- package/lib/components/Progress/Progress.js +2 -3
- package/lib/components/Progress/index.js +2 -3
- package/lib/components/Radio/Radio.js +2 -3
- package/lib/components/Radio/RadioGroup.js +2 -3
- package/lib/components/Radio/index.js +2 -3
- package/lib/components/ResizeObserver/Collection.js +2 -3
- package/lib/components/ResizeObserver/ResizeObserver.js +2 -3
- package/lib/components/ResizeObserver/SingleObserver/index.js +2 -3
- package/lib/components/ResizeObserver/useResizeObserver.js +2 -3
- package/lib/components/ResizeObserver/utils/reactUtil.js +2 -3
- package/lib/components/Segment/Segment.js +2 -3
- package/lib/components/Segment/index.js +2 -3
- package/lib/components/Select/Select.js +2 -3
- package/lib/components/Select/SelectCustom.js +2 -3
- package/lib/components/Select/SelectOptionContent.js +8 -1
- package/lib/components/Select/interface.d.ts +9 -0
- package/lib/components/Select/interface.js +1 -1
- package/lib/components/Select/style/Select.css +7 -0
- package/lib/components/Skeleton/Skeleton.js +2 -3
- package/lib/components/Skeleton/index.js +2 -3
- package/lib/components/Slider/Slider.js +2 -3
- package/lib/components/Slider/index.js +2 -3
- package/lib/components/Space/Space.js +2 -3
- package/lib/components/Spinner/Spinner.js +12 -13
- package/lib/components/Spinner/index.js +2 -3
- package/lib/components/Step/Step.js +2 -3
- package/lib/components/Step/index.js +2 -3
- package/lib/components/Switch/Switch.js +2 -3
- package/lib/components/Switch/index.js +2 -3
- package/lib/components/Table/core/useTableSetup.js +2 -3
- package/lib/components/Table/internal/index.js +2 -3
- package/lib/components/Table/internal/kernel/Body/BodyRow.js +2 -3
- package/lib/components/Table/internal/kernel/Body/ExpandedRow.js +2 -3
- package/lib/components/Table/internal/kernel/Body/MeasureCell.js +2 -3
- package/lib/components/Table/internal/kernel/Body/MeasureRow.js +2 -3
- package/lib/components/Table/internal/kernel/Body/index.js +2 -3
- package/lib/components/Table/internal/kernel/Cell/index.js +2 -3
- package/lib/components/Table/internal/kernel/Cell/useCellRender.js +2 -3
- package/lib/components/Table/internal/kernel/ColGroup.js +2 -3
- package/lib/components/Table/internal/kernel/FixedHolder/index.js +2 -3
- package/lib/components/Table/internal/kernel/Footer/Cell.js +2 -3
- package/lib/components/Table/internal/kernel/Footer/Row.js +2 -3
- package/lib/components/Table/internal/kernel/Footer/SummaryContext.js +2 -3
- package/lib/components/Table/internal/kernel/Footer/index.js +2 -3
- package/lib/components/Table/internal/kernel/Header/Header.js +2 -3
- package/lib/components/Table/internal/kernel/Header/HeaderRow.js +2 -3
- package/lib/components/Table/internal/kernel/Panel/index.js +2 -3
- package/lib/components/Table/internal/kernel/Table.js +9 -10
- package/lib/components/Table/internal/kernel/VirtualTable/BodyGrid.js +2 -3
- package/lib/components/Table/internal/kernel/VirtualTable/BodyLine.js +2 -3
- package/lib/components/Table/internal/kernel/VirtualTable/VirtualCell.js +2 -3
- package/lib/components/Table/internal/kernel/VirtualTable/index.js +2 -3
- package/lib/components/Table/internal/kernel/context/PerfContext.js +2 -3
- package/lib/components/Table/internal/kernel/hooks/useColumns/index.js +2 -3
- package/lib/components/Table/internal/kernel/hooks/useColumns/useWidthColumns.js +2 -3
- package/lib/components/Table/internal/kernel/hooks/useExpand.js +2 -3
- package/lib/components/Table/internal/kernel/hooks/useFixedInfo.js +2 -3
- package/lib/components/Table/internal/kernel/hooks/useFlattenRecords.js +2 -3
- package/lib/components/Table/internal/kernel/hooks/useHover.js +2 -3
- package/lib/components/Table/internal/kernel/hooks/useRenderTimes.js +2 -3
- package/lib/components/Table/internal/kernel/hooks/useSticky.js +2 -3
- package/lib/components/Table/internal/kernel/index.js +2 -3
- package/lib/components/Table/internal/kernel/selector-context/Immutable.js +2 -3
- package/lib/components/Table/internal/kernel/selector-context/context.js +2 -3
- package/lib/components/Table/internal/kernel/stickyScrollBar.js +2 -3
- package/lib/components/Table/internal/kernel/utils/expandUtil.js +2 -3
- package/lib/components/Table/internal/kernel/utils/useMemo.js +2 -3
- package/lib/components/Tabs/Tabs.js +2 -3
- package/lib/components/Tabs/index.js +2 -3
- package/lib/components/Tag/Tag.js +2 -3
- package/lib/components/Tag/index.js +2 -3
- package/lib/components/Tooltip/Tooltip.js +2 -3
- package/lib/components/Tooltip/index.js +2 -3
- package/lib/components/Tour/index.js +2 -3
- package/lib/components/Trigger/Trigger.js +2 -3
- package/lib/components/Typography/index.js +2 -3
- package/lib/components/Typography/utils.js +2 -3
- package/lib/components/Upload/Upload.js +2 -3
- package/lib/components/Upload/UploadFileBar.js +2 -3
- package/lib/components/Upload/index.js +2 -3
- package/lib/components/VirtualList/Filler.js +2 -3
- package/lib/components/VirtualList/Item.js +2 -3
- package/lib/components/VirtualList/ScrollBar.js +2 -3
- package/lib/components/VirtualList/VirtualList.js +2 -3
- package/lib/components/VirtualList/hooks/useChildren.js +2 -3
- package/lib/components/VirtualList/hooks/useDiffItem.js +2 -3
- package/lib/components/VirtualList/hooks/useGetSize.js +2 -3
- package/lib/components/VirtualList/hooks/useHeights.js +2 -3
- package/lib/components/VirtualList/hooks/useScrollDrag.js +2 -3
- package/lib/components/VirtualList/hooks/useScrollTo.js +2 -3
- package/lib/index.css +1 -1
- package/lib/stories/docs/ComponentDocsPage.js +2 -3
- package/package.json +23 -17
|
@@ -10,7 +10,6 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
|
|
|
10
10
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
11
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
14
13
|
var _react = _interopRequireWildcard(require("react"));
|
|
15
14
|
var _useEventCallback = _interopRequireDefault(require("@1money/hooks/useEventCallback"));
|
|
16
15
|
var _useMemoizedFn = _interopRequireDefault(require("@1money/hooks/useMemoizedFn"));
|
|
@@ -19,8 +18,9 @@ var _pathUtils = require("../pathUtils");
|
|
|
19
18
|
var _runRules = require("../runRules");
|
|
20
19
|
var _formStore = require("../formStore");
|
|
21
20
|
var _validationError = require("../validationError");
|
|
22
|
-
function
|
|
23
|
-
function
|
|
21
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t6 in e) "default" !== _t6 && {}.hasOwnProperty.call(e, _t6) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t6)) && (i.get || i.set) ? o(f, _t6, i) : f[_t6] = e[_t6]); return f; })(e, t); }
|
|
22
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
23
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
24
24
|
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; } } }; }
|
|
25
25
|
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
26
26
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
@@ -184,16 +184,16 @@ var useForm = exports.useForm = function useForm() {
|
|
|
184
184
|
// Async field validation – each rule is processed exactly once
|
|
185
185
|
// ---------------------------------------------------------------------------
|
|
186
186
|
var validateFieldAsync = (0, _useMemoizedFn["default"])(function (name, value, rules) {
|
|
187
|
-
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator
|
|
187
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee() {
|
|
188
188
|
var _a, epoch, values, resolved, flagged, outcome, _yield$runRulesAsync, error, warning, isCurrent, clearFlags, _t;
|
|
189
|
-
return _regenerator
|
|
190
|
-
while (1) switch (_context.
|
|
189
|
+
return _regenerator().w(function (_context) {
|
|
190
|
+
while (1) switch (_context.p = _context.n) {
|
|
191
191
|
case 0:
|
|
192
192
|
if (!(!rules || rules.length === 0)) {
|
|
193
|
-
_context.
|
|
193
|
+
_context.n = 1;
|
|
194
194
|
break;
|
|
195
195
|
}
|
|
196
|
-
return _context.
|
|
196
|
+
return _context.a(2, {
|
|
197
197
|
isValid: true,
|
|
198
198
|
error: null
|
|
199
199
|
});
|
|
@@ -215,11 +215,11 @@ var useForm = exports.useForm = function useForm() {
|
|
|
215
215
|
error: null,
|
|
216
216
|
warning: null
|
|
217
217
|
};
|
|
218
|
-
_context.
|
|
219
|
-
_context.
|
|
218
|
+
_context.p = 2;
|
|
219
|
+
_context.n = 3;
|
|
220
220
|
return (0, _runRules.runRulesAsync)(name, value, values, resolved, formCore.getRuleContextInstance());
|
|
221
221
|
case 3:
|
|
222
|
-
_yield$runRulesAsync = _context.
|
|
222
|
+
_yield$runRulesAsync = _context.v;
|
|
223
223
|
error = _yield$runRulesAsync.error;
|
|
224
224
|
warning = _yield$runRulesAsync.warning;
|
|
225
225
|
outcome = {
|
|
@@ -227,11 +227,11 @@ var useForm = exports.useForm = function useForm() {
|
|
|
227
227
|
error: error,
|
|
228
228
|
warning: warning
|
|
229
229
|
};
|
|
230
|
-
_context.
|
|
230
|
+
_context.n = 5;
|
|
231
231
|
break;
|
|
232
232
|
case 4:
|
|
233
|
-
_context.
|
|
234
|
-
_t = _context
|
|
233
|
+
_context.p = 4;
|
|
234
|
+
_t = _context.v;
|
|
235
235
|
// The engine contains rule-level throws itself; this is a last-resort
|
|
236
236
|
// net so an unexpected failure surfaces as a field error instead of
|
|
237
237
|
// leaving the field marked valid.
|
|
@@ -241,21 +241,18 @@ var useForm = exports.useForm = function useForm() {
|
|
|
241
241
|
warning: null
|
|
242
242
|
};
|
|
243
243
|
case 5:
|
|
244
|
-
_context.
|
|
244
|
+
_context.p = 5;
|
|
245
245
|
isCurrent = formCore.isValidationRunCurrent(name, epoch);
|
|
246
246
|
clearFlags = flagged.filter(function (flaggedName) {
|
|
247
247
|
return lastAsyncEpochRef.current[flaggedName] === epoch;
|
|
248
248
|
});
|
|
249
249
|
commitRuleOutcomes(isCurrent ? [outcome] : [], clearFlags);
|
|
250
|
-
return _context.
|
|
250
|
+
return _context.f(5);
|
|
251
251
|
case 6:
|
|
252
|
-
return _context.
|
|
252
|
+
return _context.a(2, {
|
|
253
253
|
isValid: outcome.error === null,
|
|
254
254
|
error: outcome.error
|
|
255
255
|
});
|
|
256
|
-
case 7:
|
|
257
|
-
case "end":
|
|
258
|
-
return _context.stop();
|
|
259
256
|
}
|
|
260
257
|
}, _callee, null, [[2, 4, 5, 6]]);
|
|
261
258
|
}));
|
|
@@ -264,10 +261,10 @@ var useForm = exports.useForm = function useForm() {
|
|
|
264
261
|
// Async field blur handler
|
|
265
262
|
// ---------------------------------------------------------------------------
|
|
266
263
|
var handleFieldBlur = (0, _useEventCallback["default"])(function (name, fieldTrigger) {
|
|
267
|
-
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator
|
|
264
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee2() {
|
|
268
265
|
var touched, rules, values, applicable;
|
|
269
|
-
return _regenerator
|
|
270
|
-
while (1) switch (_context2.
|
|
266
|
+
return _regenerator().w(function (_context2) {
|
|
267
|
+
while (1) switch (_context2.n) {
|
|
271
268
|
case 0:
|
|
272
269
|
touched = store.getState().touched;
|
|
273
270
|
if (!touched[name]) {
|
|
@@ -277,22 +274,21 @@ var useForm = exports.useForm = function useForm() {
|
|
|
277
274
|
}
|
|
278
275
|
rules = formCore.getFieldRules(name);
|
|
279
276
|
if (rules) {
|
|
280
|
-
_context2.
|
|
277
|
+
_context2.n = 1;
|
|
281
278
|
break;
|
|
282
279
|
}
|
|
283
|
-
return _context2.
|
|
280
|
+
return _context2.a(2);
|
|
284
281
|
case 1:
|
|
285
282
|
values = formCore.getFieldsValue();
|
|
286
283
|
applicable = (0, _runRules.filterRulesByTrigger)((0, _runRules.resolveRules)(rules, values, formCore.getRuleContextInstance()), 'onBlur', (0, _runRules.normalizeTriggers)(fieldTrigger, validateTrigger), name);
|
|
287
284
|
if (!(applicable.length > 0)) {
|
|
288
|
-
_context2.
|
|
285
|
+
_context2.n = 2;
|
|
289
286
|
break;
|
|
290
287
|
}
|
|
291
|
-
_context2.
|
|
288
|
+
_context2.n = 2;
|
|
292
289
|
return validateFieldAsync(name, (0, _pathUtils.resolveValue)(values, name), applicable);
|
|
293
290
|
case 2:
|
|
294
|
-
|
|
295
|
-
return _context2.stop();
|
|
291
|
+
return _context2.a(2);
|
|
296
292
|
}
|
|
297
293
|
}, _callee2);
|
|
298
294
|
}));
|
|
@@ -301,10 +297,10 @@ var useForm = exports.useForm = function useForm() {
|
|
|
301
297
|
// Validate all fields async
|
|
302
298
|
// ---------------------------------------------------------------------------
|
|
303
299
|
var validateFieldsAsync = (0, _useMemoizedFn["default"])(function (nameList) {
|
|
304
|
-
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator
|
|
300
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee4() {
|
|
305
301
|
var fieldsToValidate, fieldErrors, resolvedByField, epochByField, _iterator2, _step2, name, rules, flagged, outcomes, clearFlags;
|
|
306
|
-
return _regenerator
|
|
307
|
-
while (1) switch (_context4.
|
|
302
|
+
return _regenerator().w(function (_context4) {
|
|
303
|
+
while (1) switch (_context4.p = _context4.n) {
|
|
308
304
|
case 0:
|
|
309
305
|
fieldsToValidate = nameList || Object.keys(formCore.fieldRules);
|
|
310
306
|
fieldErrors = {}; // Resolve every field once up front: the flag decision needs resolved
|
|
@@ -340,35 +336,35 @@ var useForm = exports.useForm = function useForm() {
|
|
|
340
336
|
lastAsyncEpochRef.current[name] = epochByField.get(name);
|
|
341
337
|
});
|
|
342
338
|
outcomes = [];
|
|
343
|
-
_context4.
|
|
344
|
-
_context4.
|
|
339
|
+
_context4.p = 1;
|
|
340
|
+
_context4.n = 2;
|
|
345
341
|
return Promise.all(fieldsToValidate.map(function (name) {
|
|
346
|
-
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator
|
|
342
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee3() {
|
|
347
343
|
var _a, resolved, error, warning, _yield$runRulesAsync2, epoch, _t2;
|
|
348
|
-
return _regenerator
|
|
349
|
-
while (1) switch (_context3.
|
|
344
|
+
return _regenerator().w(function (_context3) {
|
|
345
|
+
while (1) switch (_context3.p = _context3.n) {
|
|
350
346
|
case 0:
|
|
351
347
|
resolved = resolvedByField.get(name);
|
|
352
348
|
if (resolved) {
|
|
353
|
-
_context3.
|
|
349
|
+
_context3.n = 1;
|
|
354
350
|
break;
|
|
355
351
|
}
|
|
356
|
-
return _context3.
|
|
352
|
+
return _context3.a(2);
|
|
357
353
|
case 1:
|
|
358
354
|
error = null;
|
|
359
355
|
warning = null;
|
|
360
|
-
_context3.
|
|
361
|
-
_context3.
|
|
356
|
+
_context3.p = 2;
|
|
357
|
+
_context3.n = 3;
|
|
362
358
|
return (0, _runRules.runRulesAsync)(name, (0, _pathUtils.resolveValue)(formCore.getFieldsValue(), name), formCore.getFieldsValue(), resolved, formCore.getRuleContextInstance());
|
|
363
359
|
case 3:
|
|
364
|
-
_yield$runRulesAsync2 = _context3.
|
|
360
|
+
_yield$runRulesAsync2 = _context3.v;
|
|
365
361
|
error = _yield$runRulesAsync2.error;
|
|
366
362
|
warning = _yield$runRulesAsync2.warning;
|
|
367
|
-
_context3.
|
|
363
|
+
_context3.n = 5;
|
|
368
364
|
break;
|
|
369
365
|
case 4:
|
|
370
|
-
_context3.
|
|
371
|
-
_t2 = _context3
|
|
366
|
+
_context3.p = 4;
|
|
367
|
+
_t2 = _context3.v;
|
|
372
368
|
// Last-resort net (see validateFieldAsync) — keep the normal
|
|
373
369
|
// constructed-error flow so onFinishFailed gets a real payload.
|
|
374
370
|
error = (_a = (0, _runRules.coerceFailureReason)(_t2)) !== null && _a !== void 0 ? _a : 'Validation failed';
|
|
@@ -388,39 +384,35 @@ var useForm = exports.useForm = function useForm() {
|
|
|
388
384
|
fieldErrors[name] = error;
|
|
389
385
|
}
|
|
390
386
|
case 6:
|
|
391
|
-
|
|
392
|
-
return _context3.stop();
|
|
387
|
+
return _context3.a(2);
|
|
393
388
|
}
|
|
394
389
|
}, _callee3, null, [[2, 4]]);
|
|
395
390
|
}));
|
|
396
391
|
}));
|
|
397
392
|
case 2:
|
|
398
|
-
_context4.
|
|
393
|
+
_context4.p = 2;
|
|
399
394
|
clearFlags = flagged.filter(function (name) {
|
|
400
395
|
return lastAsyncEpochRef.current[name] === epochByField.get(name);
|
|
401
396
|
});
|
|
402
397
|
commitRuleOutcomes(outcomes, clearFlags);
|
|
403
|
-
return _context4.
|
|
398
|
+
return _context4.f(2);
|
|
404
399
|
case 3:
|
|
405
400
|
if (!(Object.keys(fieldErrors).length > 0)) {
|
|
406
|
-
_context4.
|
|
401
|
+
_context4.n = 4;
|
|
407
402
|
break;
|
|
408
403
|
}
|
|
409
404
|
throw new _validationError.FormValidationError(formCore.getFieldsValue(), fieldErrors);
|
|
410
405
|
case 4:
|
|
411
406
|
if (!nameList) {
|
|
412
|
-
_context4.
|
|
407
|
+
_context4.n = 5;
|
|
413
408
|
break;
|
|
414
409
|
}
|
|
415
|
-
return _context4.
|
|
410
|
+
return _context4.a(2, nameList.reduce(function (acc, name) {
|
|
416
411
|
acc[name] = (0, _pathUtils.resolveValue)(formCore.getFieldsValue(), name);
|
|
417
412
|
return acc;
|
|
418
413
|
}, {}));
|
|
419
414
|
case 5:
|
|
420
|
-
return _context4.
|
|
421
|
-
case 6:
|
|
422
|
-
case "end":
|
|
423
|
-
return _context4.stop();
|
|
415
|
+
return _context4.a(2, formCore.getFieldsValue());
|
|
424
416
|
}
|
|
425
417
|
}, _callee4, null, [[1,, 2, 3]]);
|
|
426
418
|
}));
|
|
@@ -545,23 +537,23 @@ var useForm = exports.useForm = function useForm() {
|
|
|
545
537
|
// handleSubmit / handleReset – for <form> event handlers
|
|
546
538
|
// ---------------------------------------------------------------------------
|
|
547
539
|
var handleSubmit = (0, _useEventCallback["default"])(function (e) {
|
|
548
|
-
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator
|
|
540
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee5() {
|
|
549
541
|
var validatedValues, _t3;
|
|
550
|
-
return _regenerator
|
|
551
|
-
while (1) switch (_context5.
|
|
542
|
+
return _regenerator().w(function (_context5) {
|
|
543
|
+
while (1) switch (_context5.p = _context5.n) {
|
|
552
544
|
case 0:
|
|
553
545
|
e === null || e === void 0 ? void 0 : e.preventDefault();
|
|
554
|
-
_context5.
|
|
555
|
-
_context5.
|
|
546
|
+
_context5.p = 1;
|
|
547
|
+
_context5.n = 2;
|
|
556
548
|
return validateFieldsAsync();
|
|
557
549
|
case 2:
|
|
558
|
-
validatedValues = _context5.
|
|
550
|
+
validatedValues = _context5.v;
|
|
559
551
|
onFinish === null || onFinish === void 0 ? void 0 : onFinish(validatedValues);
|
|
560
|
-
_context5.
|
|
552
|
+
_context5.n = 4;
|
|
561
553
|
break;
|
|
562
554
|
case 3:
|
|
563
|
-
_context5.
|
|
564
|
-
_t3 = _context5
|
|
555
|
+
_context5.p = 3;
|
|
556
|
+
_t3 = _context5.v;
|
|
565
557
|
// Only a VALIDATION failure reaches onFinishFailed — an exception out
|
|
566
558
|
// of the consumer's own onFinish is not a validation result and is
|
|
567
559
|
// surfaced instead of being misreported.
|
|
@@ -574,8 +566,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
574
566
|
console.error('[ProForm] onFinish threw during submit:', _t3);
|
|
575
567
|
}
|
|
576
568
|
case 4:
|
|
577
|
-
|
|
578
|
-
return _context5.stop();
|
|
569
|
+
return _context5.a(2);
|
|
579
570
|
}
|
|
580
571
|
}, _callee5, null, [[1, 3]]);
|
|
581
572
|
}));
|
|
@@ -692,48 +683,45 @@ var useForm = exports.useForm = function useForm() {
|
|
|
692
683
|
});
|
|
693
684
|
});
|
|
694
685
|
var submitWithValidation = (0, _useMemoizedFn["default"])(function (callback) {
|
|
695
|
-
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator
|
|
686
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee6() {
|
|
696
687
|
var validatedValues, _t4, _t5;
|
|
697
|
-
return _regenerator
|
|
698
|
-
while (1) switch (_context6.
|
|
688
|
+
return _regenerator().w(function (_context6) {
|
|
689
|
+
while (1) switch (_context6.p = _context6.n) {
|
|
699
690
|
case 0:
|
|
700
|
-
_context6.
|
|
701
|
-
_context6.
|
|
691
|
+
_context6.p = 0;
|
|
692
|
+
_context6.n = 1;
|
|
702
693
|
return validateFieldsAsync();
|
|
703
694
|
case 1:
|
|
704
|
-
validatedValues = _context6.
|
|
705
|
-
_context6.
|
|
695
|
+
validatedValues = _context6.v;
|
|
696
|
+
_context6.n = 3;
|
|
706
697
|
break;
|
|
707
698
|
case 2:
|
|
708
|
-
_context6.
|
|
709
|
-
_t4 = _context6
|
|
710
|
-
return _context6.
|
|
699
|
+
_context6.p = 2;
|
|
700
|
+
_t4 = _context6.v;
|
|
701
|
+
return _context6.a(2, undefined);
|
|
711
702
|
case 3:
|
|
712
703
|
if (!callback) {
|
|
713
|
-
_context6.
|
|
704
|
+
_context6.n = 7;
|
|
714
705
|
break;
|
|
715
706
|
}
|
|
716
|
-
_context6.
|
|
717
|
-
_context6.
|
|
707
|
+
_context6.p = 4;
|
|
708
|
+
_context6.n = 5;
|
|
718
709
|
return callback(validatedValues);
|
|
719
710
|
case 5:
|
|
720
|
-
_context6.
|
|
711
|
+
_context6.n = 7;
|
|
721
712
|
break;
|
|
722
713
|
case 6:
|
|
723
|
-
_context6.
|
|
724
|
-
_t5 = _context6
|
|
714
|
+
_context6.p = 6;
|
|
715
|
+
_t5 = _context6.v;
|
|
725
716
|
// A throwing callback is a consumer bug, not a validation failure —
|
|
726
717
|
// surface it (mirroring rc-field-form's onFinish handling) instead
|
|
727
718
|
// of swallowing it silently.
|
|
728
719
|
console.error('[ProForm] submit callback threw:', _t5);
|
|
729
|
-
return _context6.
|
|
720
|
+
return _context6.a(2, undefined);
|
|
730
721
|
case 7:
|
|
731
|
-
return _context6.
|
|
732
|
-
case 8:
|
|
733
|
-
case "end":
|
|
734
|
-
return _context6.stop();
|
|
722
|
+
return _context6.a(2, validatedValues);
|
|
735
723
|
}
|
|
736
|
-
}, _callee6, null, [[
|
|
724
|
+
}, _callee6, null, [[4, 6], [0, 2]]);
|
|
737
725
|
}));
|
|
738
726
|
});
|
|
739
727
|
var formInstance = (0, _react.useMemo)(function () {
|
|
@@ -805,4 +793,4 @@ var useForm = exports.useForm = function useForm() {
|
|
|
805
793
|
};
|
|
806
794
|
};
|
|
807
795
|
var _default = exports["default"] = useForm;
|
|
808
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtLnRzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfdXNlRXZlbnRDYWxsYmFjayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXNlTWVtb2l6ZWRGbiIsIl91c2VGb3JtQ29yZSIsIl9wYXRoVXRpbHMiLCJfcnVuUnVsZXMiLCJfZm9ybVN0b3JlIiwiX3ZhbGlkYXRpb25FcnJvciIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiYWRvcHQiLCJyZXNvbHZlIiwiUHJvbWlzZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJyZWplY3RlZCIsInJlc3VsdCIsInRoZW4iLCJhcHBseSIsIl9fcmVzdCIsInAiLCJwcm90b3R5cGUiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJhc1J1bGVBcnJheSIsInJ1bGUiLCJydWxlSGFzVmFsaWRhdG9yIiwidmFsaWRhdG9yIiwiZGVmYXVsdEZpZWxkIiwic29tZSIsImZpZWxkcyIsInZhbHVlcyIsInN1YiIsImhhc1Jlc29sdmVkVmFsaWRhdG9yIiwicmVzb2x2ZWQiLCJ1c2VGb3JtIiwiZXhwb3J0cyIsImNvbmZpZyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIm9uRmluaXNoIiwib25GaW5pc2hGYWlsZWQiLCJvblJlc2V0IiwiX2NvbmZpZyR2YWxpZGF0ZVRyaWdnIiwidmFsaWRhdGVUcmlnZ2VyIiwiZm9ybUNvcmUiLCJ1c2VGb3JtQ29yZSIsInN0b3JlIiwibGFzdEFzeW5jRXBvY2hSZWYiLCJ1c2VSZWYiLCJtYXJrVmFsaWRhdGluZyIsInVzZU1lbW9pemVkRm4iLCJuYW1lcyIsImFzc2lnbiIsImdldFN0YXRlIiwidmFsaWRhdGluZyIsImZvckVhY2giLCJzZXRTdGF0ZSIsImNvbW1pdFJ1bGVPdXRjb21lcyIsIm91dGNvbWVzIiwiY2xlYXJWYWxpZGF0aW5nIiwic3RhdGUiLCJlcnJvcnNDaGFuZ2VkIiwid2FybmluZ3NDaGFuZ2VkIiwibmV3RXJyb3JzIiwiZXJyb3JzIiwibmV3V2FybmluZ3MiLCJ3YXJuaW5ncyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiX3N0ZXAkdmFsdWUiLCJlcnJvciIsIndhcm5pbmciLCJzYW1lVmFsaWRhdGlvbk5vZGUiLCJlcnIiLCJmbGFnc1RvQ2xlYXIiLCJmaWx0ZXIiLCJwYXRjaCIsIm5ld1ZhbGlkYXRpbmciLCJrZXlzIiwidmFsaWRhdGVGaWVsZEFzeW5jIiwicnVsZXMiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIl9hIiwiZXBvY2giLCJmbGFnZ2VkIiwib3V0Y29tZSIsIl95aWVsZCRydW5SdWxlc0FzeW5jIiwiaXNDdXJyZW50IiwiY2xlYXJGbGFncyIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsImFicnVwdCIsImlzVmFsaWQiLCJiZWdpblZhbGlkYXRpb25SdW4iLCJnZXRGaWVsZHNWYWx1ZSIsInJlc29sdmVSdWxlcyIsImdldFJ1bGVDb250ZXh0SW5zdGFuY2UiLCJmbGFnZ2VkTmFtZSIsImN1cnJlbnQiLCJydW5SdWxlc0FzeW5jIiwic2VudCIsImNvZXJjZUZhaWx1cmVSZWFzb24iLCJpc1ZhbGlkYXRpb25SdW5DdXJyZW50IiwiZmluaXNoIiwic3RvcCIsImhhbmRsZUZpZWxkQmx1ciIsInVzZUV2ZW50Q2FsbGJhY2siLCJmaWVsZFRyaWdnZXIiLCJfY2FsbGVlMiIsInRvdWNoZWQiLCJhcHBsaWNhYmxlIiwiX2NvbnRleHQyIiwiX2RlZmluZVByb3BlcnR5MiIsImdldEZpZWxkUnVsZXMiLCJmaWx0ZXJSdWxlc0J5VHJpZ2dlciIsIm5vcm1hbGl6ZVRyaWdnZXJzIiwicmVzb2x2ZVZhbHVlIiwidmFsaWRhdGVGaWVsZHNBc3luYyIsIm5hbWVMaXN0IiwiX2NhbGxlZTQiLCJmaWVsZHNUb1ZhbGlkYXRlIiwiZmllbGRFcnJvcnMiLCJyZXNvbHZlZEJ5RmllbGQiLCJlcG9jaEJ5RmllbGQiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiX2NvbnRleHQ0IiwiZmllbGRSdWxlcyIsIk1hcCIsImFsbCIsIm1hcCIsIl9jYWxsZWUzIiwiX3lpZWxkJHJ1blJ1bGVzQXN5bmMyIiwiX3QyIiwiX2NvbnRleHQzIiwicHVzaCIsIkZvcm1WYWxpZGF0aW9uRXJyb3IiLCJyZWR1Y2UiLCJhY2MiLCJkZWZpbmVGaWVsZCIsImZpZWxkT3B0aW9ucyIsIl9maWVsZE9wdGlvbnMkcnVsZXMiLCJGaWVsZENvbXBvbmVudCIsIm1lbW8iLCJjaGlsZHJlbiIsInJlbmRlciIsInByb3BzIiwiX3VzZVN0b3JlU2VsZWN0b3IiLCJ1c2VTdG9yZVNlbGVjdG9yIiwic2hhbGxvd0VxdWFsQXJyYXlzIiwiX3VzZVN0b3JlU2VsZWN0b3IyIiwiX3NsaWNlZFRvQXJyYXkyIiwiZmllbGRWYWx1ZSIsImZpZWxkRXJyb3IiLCJmaWVsZFRvdWNoZWQiLCJmaWVsZFZhbGlkYXRpbmciLCJ1c2VFZmZlY3QiLCJyZXRhaW5GaWVsZCIsImV4aXN0aW5nUnVsZXMiLCJyZWdpc3RlckZpZWxkIiwicmVsZWFzZUZpZWxkIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJzZXRGaWVsZFZhbHVlIiwiaGFuZGxlQmx1ciIsImZpZWxkUHJvcHMiLCJvbkNoYW5nZSIsIm9uQmx1ciIsImhhbmRsZU1lcmdlQ2hhbmdlIiwiX3R5cGVvZjIiLCJ0YXJnZXQiLCJSZWFjdCIsImlzVmFsaWRFbGVtZW50IiwiaGFuZGxlTWVyZ2VCbHVyIiwiZG9tU2FmZVByb3BzIiwiY2xvbmVFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsIkZyYWdtZW50IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImNoaWxkIiwiaW5kZXgiLCJrZXkiLCJkaXNwbGF5TmFtZSIsImhhbmRsZVN1Ym1pdCIsIl9jYWxsZWU1IiwidmFsaWRhdGVkVmFsdWVzIiwiX3QzIiwiX2NvbnRleHQ1IiwicHJldmVudERlZmF1bHQiLCJjb25zb2xlIiwiaGFuZGxlUmVzZXQiLCJyZXNldEZpZWxkcyIsImdldEZpZWxkRXJyb3IiLCJnZXRGaWVsZFdhcm5pbmciLCJnZXRGaWVsZHNFcnJvciIsImlzRmllbGRUb3VjaGVkIiwiaXNGaWVsZHNUb3VjaGVkIiwiYWxsRmllbGRzVG91Y2hlZCIsImV2ZXJ5IiwiaXNGaWVsZFZhbGlkYXRpbmciLCJzZXRGaWVsZHNFcnJvciIsImZpZWxkc0Vycm9yIiwiZW50cmllcyIsIl9yZWYiLCJfcmVmMiIsInNldEZpZWxkRXJyb3IiLCJzZXRGaWVsZFRvdWNoZWQiLCJpc1RvdWNoZWQiLCJzZXRGaWVsZHNUb3VjaGVkIiwiZmllbGRzVG91Y2giLCJyZXNldEZvcm1GaWVsZHMiLCJpbml0aWFsVmFsdWVzIiwiZ2V0SW5pdGlhbFZhbHVlcyIsIm5ld1ZhbHVlcyIsImZpZWxkIiwiaW5pdGlhbCIsImluY2x1ZGVzIiwic2V0TmVzdGVkVmFsdWUiLCJpbnZhbGlkYXRlVmFsaWRhdGlvblJ1bnMiLCJuZXdUb3VjaGVkIiwic3VibWl0V2l0aFZhbGlkYXRpb24iLCJjYWxsYmFjayIsIl9jYWxsZWU2IiwiX3Q0IiwiX3Q1IiwiX2NvbnRleHQ2IiwiZm9ybUluc3RhbmNlIiwidXNlTWVtbyIsImdldEZpZWxkVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkcyIsInNldEZpZWxkc1ZhbHVlIiwic3VibWl0IiwidW5yZWdpc3RlckZpZWxkIiwic2V0UnVsZUNvbnRleHRJbnN0YW5jZSIsImludGVybmFscyIsInNldEZpZWxkV2FybmluZyIsIl9kZWZhdWx0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBR0EsSUFBQUMsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGNBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLFlBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFNBQUEsR0FBQU4sT0FBQTtBQU9BLElBQUFPLFVBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLGdCQUFBLEdBQUFSLE9BQUE7QUFBeUQsU0FBQVMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFYLHdCQUFBVyxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLFFBQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFB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QUFZLEVBQVpBLFlBQVk7TUFDWk8sV0FBVyxFQUFYQTtJQzVKRixDRDZKQztFQUFBLENBQUMsRUFDRixDQUNFcEosS0FBSyxFQUNMRixRQUFRLENBQUN1RixVQUFVLEVBQ25CdkYsUUFBUSxDQUFDMEgsYUFBYSxFQUN0QjFILFFBQVEsQ0FBQ3FLLGFBQWEsRUFDdEJySyxRQUFRLENBQUNtTSxlQUFlLEVBQ3hCaEssa0JBQWtCLEVBQ2xCbkMsUUFBUSxDQUFDdUgsYUFBYSxFQUN0QnZILFFBQVEsQ0FBQ2dNLGVBQWUsRUFDeEJoTSxRQUFRLENBQUNxSCxXQUFXLEVBQ3BCckgsUUFBUSxDQUFDd0gsWUFBWSxFQUNyQnVCLFlBQVksRUFDWk8sV0FBVyxDQUNaLENBQ0Y7RUFFRCxPQUFPO0lBQUVvQyxZQUFZLEVBQVpBLFlBQVk7SUFBRVEsU0FBUyxFQUFUQSxTQUFTO0lBQUVoTSxLQUFLLEVBQUxBO0VBQUssQ0FBRTtBQUMzQyxDQUFDO0FBQUMsSUFBQWtNLFFBQUEsR0FBQTdNLE9BQUEsY0FFYUQsT0FBTyIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IHVzZU1lbW8sIHVzZUVmZmVjdCwgdXNlUmVmLCBtZW1vLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnQDFtb25leS9ob29rcy91c2VNZW1vaXplZEZuJztcbmltcG9ydCB7IHVzZUZvcm1Db3JlIH0gZnJvbSAnLi91c2VGb3JtQ29yZSc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUsIHNldE5lc3RlZFZhbHVlIH0gZnJvbSAnLi4vcGF0aFV0aWxzJztcbmltcG9ydCB7IGNvZXJjZUZhaWx1cmVSZWFzb24sIGZpbHRlclJ1bGVzQnlUcmlnZ2VyLCBub3JtYWxpemVUcmlnZ2VycywgcmVzb2x2ZVJ1bGVzLCBydW5SdWxlc0FzeW5jLCB9IGZyb20gJy4uL3J1blJ1bGVzJztcbmltcG9ydCB7IHVzZVN0b3JlU2VsZWN0b3IsIHNoYWxsb3dFcXVhbEFycmF5cywgc2FtZVZhbGlkYXRpb25Ob2RlIH0gZnJvbSAnLi4vZm9ybVN0b3JlJztcbmltcG9ydCB7IEZvcm1WYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuLi92YWxpZGF0aW9uRXJyb3InO1xuLyoqXG4gKiBPbmx5IHJ1bGVzIHdpdGggYSBjdXN0b20gYHZhbGlkYXRvcmAgY2FuIGJlIGdlbnVpbmVseSBhc3luY2hyb25vdXMg4oCUXG4gKiBidWlsdGluIHJ1bGVzIHJlc29sdmUgd2l0aGluIGEgbWljcm90YXNrLCBzbyBmbGlwcGluZyBgdmFsaWRhdGluZ2AgZm9yXG4gKiB0aGVtIHdvdWxkIG9ubHkgY2h1cm4gc3Vic2NyaWJlcnMgd2l0aG91dCBldmVyIGJlaW5nIHZpc2libGUuIERlY2lkZWQgb25cbiAqIFJFU09MVkVEIHJ1bGVzOiBhIGZ1bmN0aW9uLWZvcm0gcnVsZSB0aGF0IHJlc29sdmVzIHRvIGJ1aWx0aW4tb25seSBjaGVja3NcbiAqIG11c3Qgbm90IGZsaWNrZXIgdGhlIGZsYWcuXG4gKlxuICogVGhlIGFzeW5jIGVuZ2luZSBhd2FpdHMgdmFsaWRhdG9ycyBuZXN0ZWQgaW5zaWRlIGBmaWVsZHNgIC8gYGRlZmF1bHRGaWVsZGBcbiAqIHRvbywgc28gdGhlIGRlY2lzaW9uIG11c3QgZGVzY2VuZCB0aGUgc2FtZSB3YXkg4oCUIG90aGVyd2lzZSBhIGRlZXAtb25seVxuICogdmFsaWRhdG9yIChlLmcuIGB7IGRlZmF1bHRGaWVsZDogeyB2YWxpZGF0b3IgfSB9YCkgcnVucyBwZW5kaW5nIHdpdGggdGhlXG4gKiBmbGFnIHN0dWNrIGZhbHNlLCBhbmQgYGlzRmllbGRWYWxpZGF0aW5nKG5hbWUpYCB1bmRlci1yZXBvcnRzIGZvciB0aGUgd2hvbGVcbiAqIHdpbmRvdy4gT3Zlci1mbGFnZ2luZyB3aGVuIHRoZSBkZWVwIHZhbGlkYXRvciB3b24ndCBhY3R1YWxseSBmaXJlIChlbXB0eSAvXG4gKiBwcmltaXRpdmUgdmFsdWUpIGlzIGFjY2VwdGFibGU6IHRoZSBmbGFnIGlzIGRlY2lkZWQgb24gcnVsZSBTSEFQRSwgZXhhY3RseVxuICogYXMgdGhlIHRvcC1sZXZlbCBjYXNlIGFscmVhZHkgb3Zlci1mbGFncyBhIHZhbGlkYXRvciBzaG9ydC1jaXJjdWl0ZWQgYnkgYW5cbiAqIGVhcmxpZXIgYnVpbHRpbiBmYWlsdXJlOyB0aGUgcnVuIGNsZWFycyBpdCBvbiBzZXR0bGUgZWl0aGVyIHdheS5cbiAqL1xuY29uc3QgYXNSdWxlQXJyYXkgPSAocnVsZSkgPT4gcnVsZSA/IChBcnJheS5pc0FycmF5KHJ1bGUpID8gcnVsZSA6IFtydWxlXSkgOiBbXTtcbmNvbnN0IHJ1bGVIYXNWYWxpZGF0b3IgPSAocnVsZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgcnVsZS52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChhc1J1bGVBcnJheShydWxlLmRlZmF1bHRGaWVsZCkuc29tZShydWxlSGFzVmFsaWRhdG9yKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKHJ1bGUuZmllbGRzKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJ1bGUuZmllbGRzKS5zb21lKChzdWIpID0+IGFzUnVsZUFycmF5KHN1Yikuc29tZShydWxlSGFzVmFsaWRhdG9yKSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5jb25zdCBoYXNSZXNvbHZlZFZhbGlkYXRvciA9IChyZXNvbHZlZCkgPT4gcmVzb2x2ZWQuc29tZShydWxlSGFzVmFsaWRhdG9yKTtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gdXNlRm9ybVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgY29uc3QgdXNlRm9ybSA9IChjb25maWcgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHsgb25GaW5pc2gsIG9uRmluaXNoRmFpbGVkLCBvblJlc2V0LCB2YWxpZGF0ZVRyaWdnZXIgPSAnb25DaGFuZ2UnLCB9ID0gY29uZmlnO1xuICAgIGNvbnN0IGZvcm1Db3JlID0gdXNlRm9ybUNvcmUoY29uZmlnKTtcbiAgICBjb25zdCB7IHN0b3JlIH0gPSBmb3JtQ29yZTtcbiAgICAvLyBFcG9jaCBvZiB0aGUgTEFURVNUIGFzeW5jIHJ1biB0aGF0IHJhaXNlZCBlYWNoIGZpZWxkJ3MgYHZhbGlkYXRpbmdgIGZsYWcuXG4gICAgLy8gQSBzZXR0bGluZyBydW4gY2xlYXJzIHRoZSBmbGFnIG9ubHkgd2hpbGUgaXQgaXMgc3RpbGwgdGhlIGxhdGVzdCByYWlzZXIg4oCUXG4gICAgLy8gYW4gb2xkZXIgcnVuIG11c3Qgbm90IGJsYW5rIHRoZSBzcGlubmVyIG9mIGEgbmV3ZXIgb25lLCBhbmQgYSBydW5cbiAgICAvLyBzdXBlcnNlZGVkIGJ5IGEgU1lOQyBjb21taXQgKHdoaWNoIG5ldmVyIHRvdWNoZXMgZmxhZ3MpIG11c3Qgc3RpbGwgY2xlYW5cbiAgICAvLyB1cCBhZnRlciBpdHNlbGYuXG4gICAgY29uc3QgbGFzdEFzeW5jRXBvY2hSZWYgPSB1c2VSZWYoe30pO1xuICAgIC8vIE1hcmsgZmllbGRzIGFzIHZhbGlkYXRpbmcgaW4gT05FIGNvbW1pdC4gdmFsaWRhdGluZyAvIHRvdWNoZWQgbGl2ZSBpbiB0aGVcbiAgICAvLyBzdG9yZSBhbG9uZ3NpZGUgdmFsdWVzIOKAlCBmbGlwcGluZyB0aGVtIChlLmcuIGFzeW5jIHZhbGlkYXRpb24gYXJvdW5kIGFcbiAgICAvLyBibHVyKSBtdXN0IG5vdCByZS1yZW5kZXIgdGhlIGZvcm0gcm9vdCwgb25seSB0aGUgZmllbGRzIHRoYXQgc3Vic2NyaWJlZC5cbiAgICBjb25zdCBtYXJrVmFsaWRhdGluZyA9IHVzZU1lbW9pemVkRm4oKG5hbWVzKSA9PiB7XG4gICAgICAgIGlmIChuYW1lcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG5leHQgPSBPYmplY3QuYXNzaWduKHt9LCBzdG9yZS5nZXRTdGF0ZSgpLnZhbGlkYXRpbmcpO1xuICAgICAgICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBuZXh0W25hbWVdID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHsgdmFsaWRhdGluZzogbmV4dCB9KTtcbiAgICB9KTtcbiAgICAvLyBGb2xkIHBlci1maWVsZCBydWxlIG91dGNvbWVzIGludG8gQVQgTU9TVCBvbmUgc3RvcmUgY29tbWl0OiBlcnJvcnMgYW5kXG4gICAgLy8gd2FybmluZ3MgYXJlIG1lcmdlZCBvdmVyIHRoZSBjdXJyZW50IG1hcHMgYW5kIHRoZSBgY2xlYXJWYWxpZGF0aW5nYCBmbGFnc1xuICAgIC8vIGFyZSByZW1vdmVkIGluIHRoZSBTQU1FIHBhdGNoLiBBIG5vLW9wIG91dGNvbWUgY29tbWl0cyBub3RoaW5nIGF0IGFsbCDigJRcbiAgICAvLyBwZXItZmllbGQgY29tbWl0cyBoZXJlIHByZXZpb3VzbHkgbWFkZSBzdWJtaXQtdGltZSB2YWxpZGF0aW9uIHN3ZWVwIGV2ZXJ5XG4gICAgLy8gc3Vic2NyaWJlciBPKGZpZWxkcykgdGltZXMuXG4gICAgY29uc3QgY29tbWl0UnVsZU91dGNvbWVzID0gdXNlTWVtb2l6ZWRGbigob3V0Y29tZXMsIGNsZWFyVmFsaWRhdGluZykgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgICAgIGxldCBlcnJvcnNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGxldCB3YXJuaW5nc0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgbmV3RXJyb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuZXJyb3JzKTtcbiAgICAgICAgY29uc3QgbmV3V2FybmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS53YXJuaW5ncyk7XG4gICAgICAgIGZvciAoY29uc3QgeyBuYW1lLCBlcnJvciwgd2FybmluZyB9IG9mIG91dGNvbWVzKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZSBpbiBuZXdFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld0Vycm9yc1tuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIXNhbWVWYWxpZGF0aW9uTm9kZShuZXdFcnJvcnNbbmFtZV0sIGVycm9yKSkge1xuICAgICAgICAgICAgICAgIG5ld0Vycm9yc1tuYW1lXSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIGVycm9yc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHdhcm5pbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZSBpbiBuZXdXYXJuaW5ncykge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3V2FybmluZ3NbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIXNhbWVWYWxpZGF0aW9uTm9kZShuZXdXYXJuaW5nc1tuYW1lXSwgd2FybmluZykpIHtcbiAgICAgICAgICAgICAgICBuZXdXYXJuaW5nc1tuYW1lXSA9IHdhcm5pbmc7XG4gICAgICAgICAgICAgICAgd2FybmluZ3NDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmbGFnc1RvQ2xlYXIgPSBjbGVhclZhbGlkYXRpbmcuZmlsdGVyKChuYW1lKSA9PiBuYW1lIGluIHN0YXRlLnZhbGlkYXRpbmcpO1xuICAgICAgICBjb25zdCBwYXRjaCA9IHt9O1xuICAgICAgICBpZiAoZXJyb3JzQ2hhbmdlZClcbiAgICAgICAgICAgIHBhdGNoLmVycm9ycyA9IG5ld0Vycm9ycztcbiAgICAgICAgaWYgKHdhcm5pbmdzQ2hhbmdlZClcbiAgICAgICAgICAgIHBhdGNoLndhcm5pbmdzID0gbmV3V2FybmluZ3M7XG4gICAgICAgIGlmIChmbGFnc1RvQ2xlYXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnZhbGlkYXRpbmcpO1xuICAgICAgICAgICAgZmxhZ3NUb0NsZWFyLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tuYW1lXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGF0Y2gudmFsaWRhdGluZyA9IG5ld1ZhbGlkYXRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHBhdGNoKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgc3RvcmUuc2V0U3RhdGUocGF0Y2gpO1xuICAgIH0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEFzeW5jIGZpZWxkIHZhbGlkYXRpb24g4oCTIGVhY2ggcnVsZSBpcyBwcm9jZXNzZWQgZXhhY3RseSBvbmNlXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZEFzeW5jID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgdmFsdWUsIHJ1bGVzKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXJ1bGVzIHx8IHJ1bGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIC8vIENhcHR1cmUgdGhpcyBydW4ncyBlcG9jaDogaWYgYSBORVdFUiBydW4gKHN5bmMgb3IgYXN5bmMpIHN0YXJ0cyBmb3JcbiAgICAgICAgLy8gdGhlIGZpZWxkIGJlZm9yZSB0aGlzIG9uZSBzZXR0bGVzLCB0aGUgb3V0Y29tZSBiZWxvdyBpcyBzdGFsZSBhbmQgaXNcbiAgICAgICAgLy8gZGlzY2FyZGVkIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmcgdGhlIG5ld2VyIHJlc3VsdC5cbiAgICAgICAgY29uc3QgZXBvY2ggPSBmb3JtQ29yZS5iZWdpblZhbGlkYXRpb25SdW4obmFtZSk7XG4gICAgICAgIC8vIFJlc29sdmUgb25jZTogdGhlIGZsYWcgZGVjaXNpb24gbmVlZHMgcmVzb2x2ZWQgcnVsZXMsIGFuZCBwYXNzaW5nIHRoZVxuICAgICAgICAvLyByZXNvbHZlZCBhcnJheSBvbndhcmQgc3BhcmVzIHRoZSBlbmdpbmUgYSByZS1yZXNvbHV0aW9uLlxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpO1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVSdWxlcyhydWxlcywgdmFsdWVzLCBmb3JtQ29yZS5nZXRSdWxlQ29udGV4dEluc3RhbmNlKCkpO1xuICAgICAgICBjb25zdCBmbGFnZ2VkID0gaGFzUmVzb2x2ZWRWYWxpZGF0b3IocmVzb2x2ZWQpID8gW25hbWVdIDogW107XG4gICAgICAgIG1hcmtWYWxpZGF0aW5nKGZsYWdnZWQpO1xuICAgICAgICBmbGFnZ2VkLmZvckVhY2goKGZsYWdnZWROYW1lKSA9PiB7XG4gICAgICAgICAgICBsYXN0QXN5bmNFcG9jaFJlZi5jdXJyZW50W2ZsYWdnZWROYW1lXSA9IGVwb2NoO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IG91dGNvbWUgPSB7IG5hbWUsIGVycm9yOiBudWxsLCB3YXJuaW5nOiBudWxsIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IGVycm9yLCB3YXJuaW5nIH0gPSB5aWVsZCBydW5SdWxlc0FzeW5jKG5hbWUsIHZhbHVlLCB2YWx1ZXMsIHJlc29sdmVkLCBmb3JtQ29yZS5nZXRSdWxlQ29udGV4dEluc3RhbmNlKCkpO1xuICAgICAgICAgICAgb3V0Y29tZSA9IHsgbmFtZSwgZXJyb3IsIHdhcm5pbmcgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBUaGUgZW5naW5lIGNvbnRhaW5zIHJ1bGUtbGV2ZWwgdGhyb3dzIGl0c2VsZjsgdGhpcyBpcyBhIGxhc3QtcmVzb3J0XG4gICAgICAgICAgICAvLyBuZXQgc28gYW4gdW5leHBlY3RlZCBmYWlsdXJlIHN1cmZhY2VzIGFzIGEgZmllbGQgZXJyb3IgaW5zdGVhZCBvZlxuICAgICAgICAgICAgLy8gbGVhdmluZyB0aGUgZmllbGQgbWFya2VkIHZhbGlkLlxuICAgICAgICAgICAgb3V0Y29tZSA9IHsgbmFtZSwgZXJyb3I6IChfYSA9IGNvZXJjZUZhaWx1cmVSZWFzb24oZXJyKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ1ZhbGlkYXRpb24gZmFpbGVkJywgd2FybmluZzogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgY29uc3QgaXNDdXJyZW50ID0gZm9ybUNvcmUuaXNWYWxpZGF0aW9uUnVuQ3VycmVudChuYW1lLCBlcG9jaCk7XG4gICAgICAgICAgICBjb25zdCBjbGVhckZsYWdzID0gZmxhZ2dlZC5maWx0ZXIoKGZsYWdnZWROYW1lKSA9PiBsYXN0QXN5bmNFcG9jaFJlZi5jdXJyZW50W2ZsYWdnZWROYW1lXSA9PT0gZXBvY2gpO1xuICAgICAgICAgICAgY29tbWl0UnVsZU91dGNvbWVzKGlzQ3VycmVudCA/IFtvdXRjb21lXSA6IFtdLCBjbGVhckZsYWdzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgQ0FMTEVSIGdldHMgdGhpcyBydW4ncyBvd24gcmVzdWx0IGVpdGhlciB3YXkgKGl0cyBwcm9taXNlIGlzXG4gICAgICAgIC8vIGFib3V0IHRoZSB2YWx1ZSBpdCB3YXMgYXNrZWQgdG8gdmFsaWRhdGUpOyBvbmx5IHRoZSBTVE9SRSBjb21taXQgaXNcbiAgICAgICAgLy8gc3RhbGVuZXNzLWd1YXJkZWQuXG4gICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IG91dGNvbWUuZXJyb3IgPT09IG51bGwsIGVycm9yOiBvdXRjb21lLmVycm9yIH07XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEFzeW5jIGZpZWxkIGJsdXIgaGFuZGxlclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGhhbmRsZUZpZWxkQmx1ciA9IHVzZUV2ZW50Q2FsbGJhY2soKG5hbWUsIGZpZWxkVHJpZ2dlcikgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRvdWNoZWQgPSBzdG9yZS5nZXRTdGF0ZSgpLnRvdWNoZWQ7XG4gICAgICAgIGlmICghdG91Y2hlZFtuYW1lXSkge1xuICAgICAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB0b3VjaGVkOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRvdWNoZWQpLCB7IFtuYW1lXTogdHJ1ZSB9KSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmdldEZpZWxkUnVsZXMobmFtZSk7XG4gICAgICAgIGlmICghcnVsZXMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlKCk7XG4gICAgICAgIGNvbnN0IGFwcGxpY2FibGUgPSBmaWx0ZXJSdWxlc0J5VHJpZ2dlcihyZXNvbHZlUnVsZXMocnVsZXMsIHZhbHVlcywgZm9ybUNvcmUuZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSgpKSwgJ29uQmx1cicsIG5vcm1hbGl6ZVRyaWdnZXJzKGZpZWxkVHJpZ2dlciwgdmFsaWRhdGVUcmlnZ2VyKSwgbmFtZSk7XG4gICAgICAgIGlmIChhcHBsaWNhYmxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbGlkYXRlRmllbGRBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUodmFsdWVzLCBuYW1lKSwgYXBwbGljYWJsZSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gVmFsaWRhdGUgYWxsIGZpZWxkcyBhc3luY1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHZhbGlkYXRlRmllbGRzQXN5bmMgPSB1c2VNZW1vaXplZEZuKChuYW1lTGlzdCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkc1RvVmFsaWRhdGUgPSBuYW1lTGlzdCB8fCBPYmplY3Qua2V5cyhmb3JtQ29yZS5maWVsZFJ1bGVzKTtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB7fTtcbiAgICAgICAgLy8gUmVzb2x2ZSBldmVyeSBmaWVsZCBvbmNlIHVwIGZyb250OiB0aGUgZmxhZyBkZWNpc2lvbiBuZWVkcyByZXNvbHZlZFxuICAgICAgICAvLyBydWxlcywgYW5kIHRoZSByZXNvbHZlZCBhcnJheXMgYXJlIHJldXNlZCBmb3IgdGhlIGFjdHVhbCBydW5zLiBFYWNoXG4gICAgICAgIC8vIGZpZWxkIGFsc28gY2FwdHVyZXMgaXRzIHZhbGlkYXRpb24gZXBvY2gg4oCUIGEgZmllbGQgd2hvc2UgdmFsdWVcbiAgICAgICAgLy8gY2hhbmdlcyBtaWQtc3VibWl0IGdldHMgYSBuZXdlciBydW4sIGFuZCB0aGlzIHJ1bidzIHN0YWxlIG91dGNvbWVcbiAgICAgICAgLy8gbXVzdCBub3Qgb3ZlcndyaXRlIGl0IGluIHRoZSBzdG9yZS5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWRCeUZpZWxkID0gbmV3IE1hcCgpO1xuICAgICAgICBjb25zdCBlcG9jaEJ5RmllbGQgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBmaWVsZHNUb1ZhbGlkYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmZpZWxkUnVsZXNbbmFtZV07XG4gICAgICAgICAgICBpZiAocnVsZXMpIHtcbiAgICAgICAgICAgICAgICBlcG9jaEJ5RmllbGQuc2V0KG5hbWUsIGZvcm1Db3JlLmJlZ2luVmFsaWRhdGlvblJ1bihuYW1lKSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRCeUZpZWxkLnNldChuYW1lLCByZXNvbHZlUnVsZXMocnVsZXMsIGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlKCksIGZvcm1Db3JlLmdldFJ1bGVDb250ZXh0SW5zdGFuY2UoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE9uZSBjb21taXQgdG8gcmFpc2UgdGhlIHZhbGlkYXRpbmcgZmxhZ3MgKHZhbGlkYXRvci1iZWFyaW5nIGZpZWxkc1xuICAgICAgICAvLyBvbmx5KSwgb25lIGNvbW1pdCB0byBsYW5kIGV2ZXJ5IGVycm9yL3dhcm5pbmcgYW5kIGNsZWFyIHRoZSBmbGFncy5cbiAgICAgICAgY29uc3QgZmxhZ2dlZCA9IGZpZWxkc1RvVmFsaWRhdGUuZmlsdGVyKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVkQnlGaWVsZC5nZXQobmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWQgPyBoYXNSZXNvbHZlZFZhbGlkYXRvcihyZXNvbHZlZCkgOiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1hcmtWYWxpZGF0aW5nKGZsYWdnZWQpO1xuICAgICAgICBmbGFnZ2VkLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGxhc3RBc3luY0Vwb2NoUmVmLmN1cnJlbnRbbmFtZV0gPSBlcG9jaEJ5RmllbGQuZ2V0KG5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgb3V0Y29tZXMgPSBbXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHlpZWxkIFByb21pc2UuYWxsKGZpZWxkc1RvVmFsaWRhdGUubWFwKChuYW1lKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlZEJ5RmllbGQuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzb2x2ZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgICAgIGxldCB3YXJuaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAoeyBlcnJvciwgd2FybmluZyB9ID0geWllbGQgcnVuUnVsZXNBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUoZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgbmFtZSksIGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlKCksIHJlc29sdmVkLCBmb3JtQ29yZS5nZXRSdWxlQ29udGV4dEluc3RhbmNlKCkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAvLyBMYXN0LXJlc29ydCBuZXQgKHNlZSB2YWxpZGF0ZUZpZWxkQXN5bmMpIOKAlCBrZWVwIHRoZSBub3JtYWxcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3RydWN0ZWQtZXJyb3IgZmxvdyBzbyBvbkZpbmlzaEZhaWxlZCBnZXRzIGEgcmVhbCBwYXlsb2FkLlxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IChfYSA9IGNvZXJjZUZhaWx1cmVSZWFzb24oZXJyKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ1ZhbGlkYXRpb24gZmFpbGVkJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVGhlIHN0b3JlIGNvbW1pdCBpcyBzdGFsZW5lc3MtZ3VhcmRlZDsgdGhlIFNVQk1JVCBkZWNpc2lvblxuICAgICAgICAgICAgICAgIC8vIChmaWVsZEVycm9ycyAvIHRoZSB0aHJvd24gRm9ybVZhbGlkYXRpb25FcnJvcikgc3RpbGwgcmVmbGVjdHNcbiAgICAgICAgICAgICAgICAvLyB0aGlzIHJ1bidzIG93biByZXN1bHRzIGZvciB0aGUgdmFsdWVzIGl0IHZhbGlkYXRlZC5cbiAgICAgICAgICAgICAgICBjb25zdCBlcG9jaCA9IGVwb2NoQnlGaWVsZC5nZXQobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGVwb2NoICE9PSB1bmRlZmluZWQgJiYgZm9ybUNvcmUuaXNWYWxpZGF0aW9uUnVuQ3VycmVudChuYW1lLCBlcG9jaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0Y29tZXMucHVzaCh7IG5hbWUsIGVycm9yLCB3YXJuaW5nIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRFcnJvcnNbbmFtZV0gPSBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgY29uc3QgY2xlYXJGbGFncyA9IGZsYWdnZWQuZmlsdGVyKChuYW1lKSA9PiBsYXN0QXN5bmNFcG9jaFJlZi5jdXJyZW50W25hbWVdID09PSBlcG9jaEJ5RmllbGQuZ2V0KG5hbWUpKTtcbiAgICAgICAgICAgIGNvbW1pdFJ1bGVPdXRjb21lcyhvdXRjb21lcywgY2xlYXJGbGFncyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGZpZWxkRXJyb3JzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRm9ybVZhbGlkYXRpb25FcnJvcihmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBmaWVsZEVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWVMaXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZUxpc3QucmVkdWNlKChhY2MsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBhY2NbbmFtZV0gPSByZXNvbHZlVmFsdWUoZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgbmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKTtcbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZGVmaW5lRmllbGQg4oCTIHVzZWQgYnkgc3RhbmRhbG9uZSAobm9uLVByb0Zvcm0pIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGRlZmluZUZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgZmllbGRPcHRpb25zID0ge30pID0+IHtcbiAgICAgICAgY29uc3QgeyBydWxlcyA9IFtdIH0gPSBmaWVsZE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IEZpZWxkQ29tcG9uZW50ID0gbWVtbygoX2EpID0+IHtcbiAgICAgICAgICAgIHZhciB7IGNoaWxkcmVuLCByZW5kZXIgfSA9IF9hLCBwcm9wcyA9IF9fcmVzdChfYSwgW1wiY2hpbGRyZW5cIiwgXCJyZW5kZXJcIl0pO1xuICAgICAgICAgICAgLy8gUGVyLWZpZWxkIHN0b3JlIHN1YnNjcmlwdGlvbjogdGhpcyBmaWVsZCByZS1yZW5kZXJzIG9ubHkgd2hlbiBpdHNcbiAgICAgICAgICAgIC8vIG93biB2YWx1ZS9lcnJvci90b3VjaGVkL3ZhbGlkYXRpbmcgc2xpY2UgY2hhbmdlcy4gRG90LXBhdGhzXG4gICAgICAgICAgICAvLyByZXNvbHZlIGludG8gdGhlIG5lc3RlZCB2YWx1ZXMgbGlrZSBldmVyeXdoZXJlIGVsc2UuXG4gICAgICAgICAgICBjb25zdCBbZmllbGRWYWx1ZSwgZmllbGRFcnJvciwgZmllbGRUb3VjaGVkLCBmaWVsZFZhbGlkYXRpbmddID0gdXNlU3RvcmVTZWxlY3RvcihzdG9yZSwgKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIChfYSA9IHJlc29sdmVWYWx1ZShzdGF0ZS52YWx1ZXMsIG5hbWUpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3JzW25hbWVdLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS50b3VjaGVkW25hbWVdLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS52YWxpZGF0aW5nW25hbWVdLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9LCBzaGFsbG93RXF1YWxBcnJheXMpO1xuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBNb3VudC1jb3VudGVkOiByZWxlYXNlRmllbGQgcmVtb3ZlcyB0aGUgcnVsZXMgb25seSB3aGVuIHRoZVxuICAgICAgICAgICAgICAgIC8vIExBU1Qgc2FtZS1uYW1lIGluc3RhbmNlIHVubW91bnRzIOKAlCBhbiBpbnN0YW5jZSB0aGF0IHBpZ2d5YmFja2VkXG4gICAgICAgICAgICAgICAgLy8gb24gYW4gZXhpc3RpbmcgcmVnaXN0cmF0aW9uIChlLmcuIGEgUHJvRm9ybS5JdGVtJ3MpIGNhbiBuZXZlclxuICAgICAgICAgICAgICAgIC8vIHdpcGUgaXQgb24gaXRzIG93biB1bm1vdW50LlxuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnJldGFpbkZpZWxkKG5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUnVsZXMgPSBmb3JtQ29yZS5nZXRGaWVsZFJ1bGVzKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmdSdWxlcyAmJiBydWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQobmFtZSwgcnVsZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZWxlYXNlRmllbGQobmFtZSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sIFtdKTsgLy8gT25seSByZWdpc3RlciBvbiBtb3VudFxuICAgICAgICAgICAgY29uc3QgaGFuZGxlRmllbGRDaGFuZ2UgPSB1c2VFdmVudENhbGxiYWNrKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkVmFsdWUobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIFRvdWNoZWQgaXMgc2V0IGJ5IHRoZSB1c2VyIGNoYW5nZSB0cmlnZ2VyIChtYXRjaGluZyB0aGVcbiAgICAgICAgICAgICAgICAvLyBQcm9Gb3JtLkl0ZW0gcGF0aCkg4oCUIHByb2dyYW1tYXRpYyBzZXRGaWVsZHNWYWx1ZSBkb2VzIG5vdC5cbiAgICAgICAgICAgICAgICBjb25zdCB0b3VjaGVkID0gc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkO1xuICAgICAgICAgICAgICAgIGlmICghdG91Y2hlZFtuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHRvdWNoZWQ6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdG91Y2hlZCksIHsgW25hbWVdOiB0cnVlIH0pIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBhcHBsaWNhYmxlID0gZmlsdGVyUnVsZXNCeVRyaWdnZXIocmVzb2x2ZVJ1bGVzKHJ1bGVzLCBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBmb3JtQ29yZS5nZXRSdWxlQ29udGV4dEluc3RhbmNlKCkpLCAnb25DaGFuZ2UnLCBub3JtYWxpemVUcmlnZ2VycyhmaWVsZE9wdGlvbnMudmFsaWRhdGVUcmlnZ2VyLCB2YWxpZGF0ZVRyaWdnZXIpLCBuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoYXBwbGljYWJsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFzeW5jIHBhdGggKG1hdGNoaW5nIFByb0Zvcm0uSXRlbSkgc28gYSBQcm9taXNlLXJldHVybmluZ1xuICAgICAgICAgICAgICAgICAgICAvLyB2YWxpZGF0b3IgaXMgaG9ub3JlZCBvbiBjaGFuZ2UgaW5zdGVhZCBvZiBiZWluZyBzaWxlbnRseVxuICAgICAgICAgICAgICAgICAgICAvLyBza2lwcGVkOyBmaXJlLWFuZC1mb3JnZXQg4oCUIHRoZSByZXN1bHQgbGFuZHMgb24gdGhlIHN0b3JlLlxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUZpZWxkQXN5bmMobmFtZSwgdmFsdWUsIGFwcGxpY2FibGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlQmx1ciA9IHVzZUV2ZW50Q2FsbGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIGhhbmRsZUZpZWxkQmx1cihuYW1lLCBmaWVsZE9wdGlvbnMudmFsaWRhdGVUcmlnZ2VyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZmllbGRQcm9wcyA9IE9iamVjdC5hc3NpZ24oeyBuYW1lLCB2YWx1ZTogZmllbGRWYWx1ZSwgZXJyb3I6IGZpZWxkRXJyb3IsIHRvdWNoZWQ6IGZpZWxkVG91Y2hlZCwgdmFsaWRhdGluZzogZmllbGRWYWxpZGF0aW5nLCBvbkNoYW5nZTogaGFuZGxlRmllbGRDaGFuZ2UsIG9uQmx1cjogaGFuZGxlQmx1ciB9LCBwcm9wcyk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVNZXJnZUNoYW5nZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZSAmJiB0eXBlb2YgZSA9PT0gJ29iamVjdCcgJiYgJ3RhcmdldCcgaW4gZVxuICAgICAgICAgICAgICAgICAgICA/IGUudGFyZ2V0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogZTtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZENoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkNoYW5nZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVNZXJnZUJsdXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGhhbmRsZUJsdXIoKTtcbiAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICgoX2EgPSBjaGlsZHJlbi5wcm9wcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uQmx1cikpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25CbHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZW5kZXIgJiYgdHlwZW9mIHJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIoZmllbGRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRWxlbWVudCBjaGlsZHJlbiByZWNlaXZlIG9ubHkgRE9NLXNhZmUgcHJvcHMg4oCUIGVycm9yL3RvdWNoZWQvXG4gICAgICAgICAgICAvLyB2YWxpZGF0aW5nIGFyZSBmaWVsZCBNRVRBLCBub3QgY29udHJvbCBwcm9wczsgc3ByZWFkaW5nIHRoZW0gb250b1xuICAgICAgICAgICAgLy8gYSBob3N0IGVsZW1lbnQgd291bGQgbGVhayBhbnkgYXR0cmlidXRlcy4gUmVuZGVyLXByb3AgYW5kXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiBjaGlsZHJlbiBrZWVwIHRoZSBmdWxsIGZpZWxkUHJvcHMuXG4gICAgICAgICAgICBjb25zdCBkb21TYWZlUHJvcHMgPSBPYmplY3QuYXNzaWduKHsgbmFtZSwgdmFsdWU6IGZpZWxkVmFsdWUsIG9uQ2hhbmdlOiBoYW5kbGVNZXJnZUNoYW5nZSwgb25CbHVyOiBoYW5kbGVNZXJnZUJsdXIgfSwgcHJvcHMpO1xuICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIGRvbVNhZmVQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLi4uY2hpbGRyZW4ubWFwKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkb21TYWZlUHJvcHMpLCB7IGtleTogY2hpbGQua2V5IHx8IGluZGV4IH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgICBGaWVsZENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGBGaWVsZCgke25hbWV9KWA7XG4gICAgICAgIHJldHVybiBGaWVsZENvbXBvbmVudDtcbiAgICB9KTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBoYW5kbGVTdWJtaXQgLyBoYW5kbGVSZXNldCDigJMgZm9yIDxmb3JtPiBldmVudCBoYW5kbGVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhbHVlcyA9IHlpZWxkIHZhbGlkYXRlRmllbGRzQXN5bmMoKTtcbiAgICAgICAgICAgIG9uRmluaXNoID09PSBudWxsIHx8IG9uRmluaXNoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaCh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgYSBWQUxJREFUSU9OIGZhaWx1cmUgcmVhY2hlcyBvbkZpbmlzaEZhaWxlZCDigJQgYW4gZXhjZXB0aW9uIG91dFxuICAgICAgICAgICAgLy8gb2YgdGhlIGNvbnN1bWVyJ3Mgb3duIG9uRmluaXNoIGlzIG5vdCBhIHZhbGlkYXRpb24gcmVzdWx0IGFuZCBpc1xuICAgICAgICAgICAgLy8gc3VyZmFjZWQgaW5zdGVhZCBvZiBiZWluZyBtaXNyZXBvcnRlZC5cbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBGb3JtVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgb25GaW5pc2hGYWlsZWQgPT09IG51bGwgfHwgb25GaW5pc2hGYWlsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoRmFpbGVkKHsgdmFsdWVzOiBlcnIudmFsdWVzLCBlcnJvcnM6IGVyci5lcnJvcnMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbUHJvRm9ybV0gb25GaW5pc2ggdGhyZXcgZHVyaW5nIHN1Ym1pdDonLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IGhhbmRsZVJlc2V0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZm9ybUNvcmUucmVzZXRGaWVsZHMoKTtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgfSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gRm9ybUluc3RhbmNlIOKAkyBlbmhhbmNlZCBBUEkgZm9yIGNvbnN1bWVycy5cbiAgICAvL1xuICAgIC8vIEV2ZXJ5IG1ldGhvZCBpcyB3cmFwcGVkIGluIHVzZU1lbW9pemVkRm4gKHN0YWJsZSBpZGVudGl0eSwgYWx3YXlzIHJlYWRzIHRoZVxuICAgIC8vIGxhdGVzdCBzdG9yZSBzdGF0ZSkgc28gdGhlIGluc3RhbmNlIG9iamVjdCBpdHNlbGYgaXMgSURFTlRJVFktU1RBQkxFIGZvclxuICAgIC8vIHRoZSBsaWZldGltZSBvZiB0aGUgZm9ybSDigJQgdGhpcyBpcyB3aGF0IGxldHMgUHJvRm9ybSBwdWJsaXNoIGl0IHRocm91Z2ggdGhlXG4gICAgLy8gc3RhYmxlIGNvbnRleHQgd2l0aG91dCByZS1yZW5kZXJpbmcgc3Vic2NyaWJlcnMgb24gZWFjaCBrZXlzdHJva2UuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgZ2V0RmllbGRFcnJvciA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHN0b3JlLmdldFN0YXRlKCkuZXJyb3JzW25hbWVdKTtcbiAgICBjb25zdCBnZXRGaWVsZFdhcm5pbmcgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiBzdG9yZS5nZXRTdGF0ZSgpLndhcm5pbmdzW25hbWVdKTtcbiAgICBjb25zdCBnZXRGaWVsZHNFcnJvciA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHN0b3JlLmdldFN0YXRlKCkuZXJyb3JzO1xuICAgICAgICBpZiAoIW5hbWVMaXN0KVxuICAgICAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIG5hbWVMaXN0LmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcnNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBlcnJvcnNbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICAgIGNvbnN0IGlzRmllbGRUb3VjaGVkID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4gc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkW25hbWVdIHx8IGZhbHNlKTtcbiAgICBjb25zdCBpc0ZpZWxkc1RvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChuYW1lTGlzdCwgYWxsRmllbGRzVG91Y2hlZCA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRvdWNoZWQgPSBzdG9yZS5nZXRTdGF0ZSgpLnRvdWNoZWQ7XG4gICAgICAgIGlmICghbmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0b3VjaGVkKS5zb21lKChrZXkpID0+IHRvdWNoZWRba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbEZpZWxkc1RvdWNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5ldmVyeSgobmFtZSkgPT4gdG91Y2hlZFtuYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnNvbWUoKG5hbWUpID0+IHRvdWNoZWRbbmFtZV0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGlzRmllbGRWYWxpZGF0aW5nID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4gc3RvcmUuZ2V0U3RhdGUoKS52YWxpZGF0aW5nW25hbWVdIHx8IGZhbHNlKTtcbiAgICBjb25zdCBzZXRGaWVsZHNFcnJvciA9IHVzZU1lbW9pemVkRm4oKGZpZWxkc0Vycm9yKSA9PiB7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkc0Vycm9yKS5mb3JFYWNoKChbbmFtZSwgZXJyb3JdKSA9PiB7XG4gICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRUb3VjaGVkID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgaXNUb3VjaGVkID0gdHJ1ZSkgPT4ge1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHRvdWNoZWQ6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkKSwgeyBbbmFtZV06IGlzVG91Y2hlZCB9KSB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZHNUb3VjaGVkID0gdXNlTWVtb2l6ZWRGbigoZmllbGRzVG91Y2gpID0+IHtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB0b3VjaGVkOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0b3JlLmdldFN0YXRlKCkudG91Y2hlZCksIGZpZWxkc1RvdWNoKSB9KTtcbiAgICB9KTtcbiAgICBjb25zdCByZXNldEZvcm1GaWVsZHMgPSB1c2VNZW1vaXplZEZuKChmaWVsZHMpID0+IHtcbiAgICAgICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgICAgIGZvcm1Db3JlLnJlc2V0RmllbGRzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gTW91bnQtZnJvemVuIGluaXRpYWxWYWx1ZXMg4oCUIGNvbnNpc3RlbnQgd2l0aCB0aGUgZnVsbCByZXNldEZpZWxkcy5cbiAgICAgICAgLy8gUmVhZHMgQU5EIHdyaXRlcyBhcmUgbmVzdGVkLXBhdGggYXdhcmUsIHNvIGRvdC1wYXRoIG5hbWVzXG4gICAgICAgIC8vIChgYWRkcmVzcy5jaXR5YCwgYGl0ZW1zLjAudGl0bGVgKSByZXNldCBjb3JyZWN0bHkgaW5zdGVhZCBvZiBwcm9iaW5nIGFcbiAgICAgICAgLy8gbGl0ZXJhbCBrZXkgYW5kIHNoYWxsb3ctbWVyZ2luZyBvbmUgYmFjay5cbiAgICAgICAgY29uc3QgaW5pdGlhbFZhbHVlcyA9IGZvcm1Db3JlLmdldEluaXRpYWxWYWx1ZXMoKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICBsZXQgbmV3VmFsdWVzID0gc3RhdGUudmFsdWVzO1xuICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWwgPSByZXNvbHZlVmFsdWUoaW5pdGlhbFZhbHVlcywgZmllbGQpO1xuICAgICAgICAgICAgbmV3VmFsdWVzID0gZmllbGQuaW5jbHVkZXMoJy4nKVxuICAgICAgICAgICAgICAgID8gc2V0TmVzdGVkVmFsdWUobmV3VmFsdWVzLCBmaWVsZCwgaW5pdGlhbClcbiAgICAgICAgICAgICAgICA6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgbmV3VmFsdWVzKSwgeyBbZmllbGRdOiBpbml0aWFsIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gTGlrZSB0aGUgZnVsbCByZXNldDogY2xlYXIgQUxMIHBlci1maWVsZCBtZXRhIChlcnJvcnMgQU5EIHdhcm5pbmdzIEFORFxuICAgICAgICAvLyB0b3VjaGVkL3ZhbGlkYXRpbmcpLCBpbnZhbGlkYXRlIGluLWZsaWdodCB2YWxpZGF0aW9uIHJ1bnMsIGFuZCBsYW5kXG4gICAgICAgIC8vIGV2ZXJ5dGhpbmcgaW4gT05FIGNvbW1pdC4gTm8gb25WYWx1ZXNDaGFuZ2Ug4oCUIHJlc2V0IGlzIG5vdCBhIGNoYW5nZVxuICAgICAgICAvLyBldmVudCBvbiBlaXRoZXIgcGF0aC5cbiAgICAgICAgZm9ybUNvcmUuaW52YWxpZGF0ZVZhbGlkYXRpb25SdW5zKGZpZWxkcyk7XG4gICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmVycm9ycyk7XG4gICAgICAgIGNvbnN0IG5ld1dhcm5pbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUud2FybmluZ3MpO1xuICAgICAgICBjb25zdCBuZXdUb3VjaGVkID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUudG91Y2hlZCk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS52YWxpZGF0aW5nKTtcbiAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBkZWxldGUgbmV3RXJyb3JzW2ZpZWxkXTtcbiAgICAgICAgICAgIGRlbGV0ZSBuZXdXYXJuaW5nc1tmaWVsZF07XG4gICAgICAgICAgICBkZWxldGUgbmV3VG91Y2hlZFtmaWVsZF07XG4gICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tmaWVsZF07XG4gICAgICAgIH0pO1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB2YWx1ZXM6IG5ld1ZhbHVlcyxcbiAgICAgICAgICAgIGVycm9yczogbmV3RXJyb3JzLFxuICAgICAgICAgICAgd2FybmluZ3M6IG5ld1dhcm5pbmdzLFxuICAgICAgICAgICAgdG91Y2hlZDogbmV3VG91Y2hlZCxcbiAgICAgICAgICAgIHZhbGlkYXRpbmc6IG5ld1ZhbGlkYXRpbmcsXG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHN1Ym1pdFdpdGhWYWxpZGF0aW9uID0gdXNlTWVtb2l6ZWRGbigoY2FsbGJhY2spID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgdmFsaWRhdGVkVmFsdWVzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgLy8gVmFsaWRhdGlvbiBmYWlsdXJlIOKAlCB0aGUgZmllbGQgZXJyb3JzIGFyZSBhbHJlYWR5IGluIHRoZSBzdG9yZS5cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGNhbGxiYWNrKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgLy8gQSB0aHJvd2luZyBjYWxsYmFjayBpcyBhIGNvbnN1bWVyIGJ1Zywgbm90IGEgdmFsaWRhdGlvbiBmYWlsdXJlIOKAlFxuICAgICAgICAgICAgICAgIC8vIHN1cmZhY2UgaXQgKG1pcnJvcmluZyByYy1maWVsZC1mb3JtJ3Mgb25GaW5pc2ggaGFuZGxpbmcpIGluc3RlYWRcbiAgICAgICAgICAgICAgICAvLyBvZiBzd2FsbG93aW5nIGl0IHNpbGVudGx5LlxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tQcm9Gb3JtXSBzdWJtaXQgY2FsbGJhY2sgdGhyZXc6JywgZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZXM7XG4gICAgfSkpO1xuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUuZm9ybUluc3RhbmNlKSwgeyBnZXRGaWVsZFZhbHVlOiBmb3JtQ29yZS5nZXRGaWVsZFZhbHVlLCBnZXRGaWVsZHNWYWx1ZTogZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUsIHZhbGlkYXRlRmllbGRzOiB2YWxpZGF0ZUZpZWxkc0FzeW5jLCBzZXRGaWVsZFZhbHVlOiBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLCBzZXRGaWVsZHNWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRzVmFsdWUsIGdldEZpZWxkRXJyb3I6IGdldEZpZWxkRXJyb3IsIGdldEZpZWxkV2FybmluZzogZ2V0RmllbGRXYXJuaW5nLCBnZXRGaWVsZHNFcnJvcjogZ2V0RmllbGRzRXJyb3IsIGlzRmllbGRUb3VjaGVkOiBpc0ZpZWxkVG91Y2hlZCwgaXNGaWVsZHNUb3VjaGVkOiBpc0ZpZWxkc1RvdWNoZWQsIGlzRmllbGRWYWxpZGF0aW5nOiBpc0ZpZWxkVmFsaWRhdGluZywgc2V0RmllbGRFcnJvcjogZm9ybUNvcmUuc2V0RmllbGRFcnJvciwgc2V0RmllbGRzRXJyb3IsIHNldEZpZWxkVG91Y2hlZDogc2V0RmllbGRUb3VjaGVkLCBzZXRGaWVsZHNUb3VjaGVkLCByZXNldEZpZWxkczogcmVzZXRGb3JtRmllbGRzLCBzdWJtaXQ6IHN1Ym1pdFdpdGhWYWxpZGF0aW9uLCBkZWZpbmVGaWVsZCwgcmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCwgdW5yZWdpc3RlckZpZWxkOiBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQgfSkpLCBbXG4gICAgICAgIGZvcm1Db3JlLmZvcm1JbnN0YW5jZSxcbiAgICAgICAgZm9ybUNvcmUuZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzQXN5bmMsXG4gICAgICAgIGdldEZpZWxkRXJyb3IsXG4gICAgICAgIGdldEZpZWxkV2FybmluZyxcbiAgICAgICAgZ2V0RmllbGRzRXJyb3IsXG4gICAgICAgIGlzRmllbGRUb3VjaGVkLFxuICAgICAgICBpc0ZpZWxkc1RvdWNoZWQsXG4gICAgICAgIGlzRmllbGRWYWxpZGF0aW5nLFxuICAgICAgICBzZXRGaWVsZHNFcnJvcixcbiAgICAgICAgc2V0RmllbGRUb3VjaGVkLFxuICAgICAgICBzZXRGaWVsZHNUb3VjaGVkLFxuICAgICAgICByZXNldEZvcm1GaWVsZHMsXG4gICAgICAgIHN1Ym1pdFdpdGhWYWxpZGF0aW9uLFxuICAgICAgICBkZWZpbmVGaWVsZCxcbiAgICBdKTtcbiAgICAvLyBGdW5jdGlvbi1mb3JtIHJ1bGVzIGdldCB0aGUgRlVMTCBmb3JtIGluc3RhbmNlIChlcnJvciBnZXR0ZXJzLCB0b3VjaGVkXG4gICAgLy8gc3RhdGUsIG11dGF0b3JzKSBpbnN0ZWFkIG9mIHRoZSBiYXJlIGNvcmUgbWV0aG9kcy4gUmVmIHdyaXRlIOKAlCBjaGVhcCBhbmRcbiAgICAvLyBpZGVtcG90ZW50IHBlciByZW5kZXIuXG4gICAgZm9ybUNvcmUuc2V0UnVsZUNvbnRleHRJbnN0YW5jZShmb3JtSW5zdGFuY2UpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEludGVybmFscyDigJMgZXhwb3NlZCBmb3IgUHJvRm9ybSBpbnRlZ3JhdGlvbi4gRGF0YSBmaWVsZHMgYXJlIEdFVFRFUlMgdGhhdFxuICAgIC8vIHJlYWQgdGhlIGxpdmUgc3RvcmUsIHNvIHRoZSBvYmplY3QgaXMgaWRlbnRpdHktc3RhYmxlIHlldCBuZXZlciBzdGFsZS5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBpbnRlcm5hbHMgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIGdldCB2YWx1ZXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuZ2V0U3RhdGUoKS52YWx1ZXM7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBlcnJvcnMoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuZ2V0U3RhdGUoKS5lcnJvcnM7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCB3YXJuaW5ncygpIHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZS5nZXRTdGF0ZSgpLndhcm5pbmdzO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgdG91Y2hlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZS5nZXRTdGF0ZSgpLnRvdWNoZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCB2YWxpZGF0aW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmdldFN0YXRlKCkudmFsaWRhdGluZztcbiAgICAgICAgfSxcbiAgICAgICAgZmllbGRSdWxlczogZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcjogZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgc2V0RmllbGRXYXJuaW5nOiBmb3JtQ29yZS5zZXRGaWVsZFdhcm5pbmcsXG4gICAgICAgIHZhbGlkYXRlRmllbGRBc3luYyxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkOiBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHJldGFpbkZpZWxkOiBmb3JtQ29yZS5yZXRhaW5GaWVsZCxcbiAgICAgICAgcmVsZWFzZUZpZWxkOiBmb3JtQ29yZS5yZWxlYXNlRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgfSksIFtcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIGZvcm1Db3JlLmZpZWxkUnVsZXMsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkV2FybmluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGZvcm1Db3JlLnJldGFpbkZpZWxkLFxuICAgICAgICBmb3JtQ29yZS5yZWxlYXNlRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgZm9ybUluc3RhbmNlLCBpbnRlcm5hbHMsIHN0b3JlIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ybTsiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
|
|
796
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtLnRzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfdXNlRXZlbnRDYWxsYmFjayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXNlTWVtb2l6ZWRGbiIsIl91c2VGb3JtQ29yZSIsIl9wYXRoVXRpbHMiLCJfcnVuUnVsZXMiLCJfZm9ybVN0b3JlIiwiX3ZhbGlkYXRpb25FcnJvciIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3Q2IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJfcmVnZW5lcmF0b3IiLCJTeW1ib2wiLCJpdGVyYXRvciIsInRvU3RyaW5nVGFnIiwiYyIsInByb3RvdHlwZSIsIkdlbmVyYXRvciIsInUiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJUeXBlRXJyb3IiLCJkb25lIiwidmFsdWUiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbiIsIkYiLCJzIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiYWRvcHQiLCJyZXNvbHZlIiwiUHJvbWlzZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJyZWplY3RlZCIsInJlc3VsdCIsInRoZW4iLCJhcHBseSIsIl9fcmVzdCIsImluZGV4T2YiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImFzUnVsZUFycmF5IiwicnVsZSIsInJ1bGVIYXNWYWxpZGF0b3IiLCJ2YWxpZGF0b3IiLCJkZWZhdWx0RmllbGQiLCJzb21lIiwiZmllbGRzIiwidmFsdWVzIiwic3ViIiwiaGFzUmVzb2x2ZWRWYWxpZGF0b3IiLCJyZXNvbHZlZCIsInVzZUZvcm0iLCJleHBvcnRzIiwiY29uZmlnIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwib25GaW5pc2giLCJvbkZpbmlzaEZhaWxlZCIsIm9uUmVzZXQiLCJfY29uZmlnJHZhbGlkYXRlVHJpZ2ciLCJ2YWxpZGF0ZVRyaWdnZXIiLCJmb3JtQ29yZSIsInVzZUZvcm1Db3JlIiwic3RvcmUiLCJsYXN0QXN5bmNFcG9jaFJlZiIsInVzZVJlZiIsIm1hcmtWYWxpZGF0aW5nIiwidXNlTWVtb2l6ZWRGbiIsIm5hbWVzIiwiYXNzaWduIiwiZ2V0U3RhdGUiLCJ2YWxpZGF0aW5nIiwiZm9yRWFjaCIsInNldFN0YXRlIiwiY29tbWl0UnVsZU91dGNvbWVzIiwib3V0Y29tZXMiLCJjbGVhclZhbGlkYXRpbmciLCJzdGF0ZSIsImVycm9yc0NoYW5nZWQiLCJ3YXJuaW5nc0NoYW5nZWQiLCJuZXdFcnJvcnMiLCJlcnJvcnMiLCJuZXdXYXJuaW5ncyIsIndhcm5pbmdzIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJfc3RlcCR2YWx1ZSIsImVycm9yIiwid2FybmluZyIsInNhbWVWYWxpZGF0aW9uTm9kZSIsImVyciIsImZsYWdzVG9DbGVhciIsImZpbHRlciIsInBhdGNoIiwibmV3VmFsaWRhdGluZyIsImtleXMiLCJ2YWxpZGF0ZUZpZWxkQXN5bmMiLCJydWxlcyIsIl9jYWxsZWUiLCJfYSIsImVwb2NoIiwiZmxhZ2dlZCIsIm91dGNvbWUiLCJfeWllbGQkcnVuUnVsZXNBc3luYyIsImlzQ3VycmVudCIsImNsZWFyRmxhZ3MiLCJfdCIsIl9jb250ZXh0IiwiaXNWYWxpZCIsImJlZ2luVmFsaWRhdGlvblJ1biIsImdldEZpZWxkc1ZhbHVlIiwicmVzb2x2ZVJ1bGVzIiwiZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSIsImZsYWdnZWROYW1lIiwiY3VycmVudCIsInJ1blJ1bGVzQXN5bmMiLCJjb2VyY2VGYWlsdXJlUmVhc29uIiwiaXNWYWxpZGF0aW9uUnVuQ3VycmVudCIsImhhbmRsZUZpZWxkQmx1ciIsInVzZUV2ZW50Q2FsbGJhY2siLCJmaWVsZFRyaWdnZXIiLCJfY2FsbGVlMiIsInRvdWNoZWQiLCJhcHBsaWNhYmxlIiwiX2NvbnRleHQyIiwiX2RlZmluZVByb3BlcnR5MiIsImdldEZpZWxkUnVsZXMiLCJmaWx0ZXJSdWxlc0J5VHJpZ2dlciIsIm5vcm1hbGl6ZVRyaWdnZXJzIiwicmVzb2x2ZVZhbHVlIiwidmFsaWRhdGVGaWVsZHNBc3luYyIsIm5hbWVMaXN0IiwiX2NhbGxlZTQiLCJmaWVsZHNUb1ZhbGlkYXRlIiwiZmllbGRFcnJvcnMiLCJyZXNvbHZlZEJ5RmllbGQiLCJlcG9jaEJ5RmllbGQiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiX2NvbnRleHQ0IiwiZmllbGRSdWxlcyIsIk1hcCIsImFsbCIsIm1hcCIsIl9jYWxsZWUzIiwiX3lpZWxkJHJ1blJ1bGVzQXN5bmMyIiwiX3QyIiwiX2NvbnRleHQzIiwicHVzaCIsIkZvcm1WYWxpZGF0aW9uRXJyb3IiLCJyZWR1Y2UiLCJhY2MiLCJkZWZpbmVGaWVsZCIsImZpZWxkT3B0aW9ucyIsIl9maWVsZE9wdGlvbnMkcnVsZXMiLCJGaWVsZENvbXBvbmVudCIsIm1lbW8iLCJjaGlsZHJlbiIsInJlbmRlciIsInByb3BzIiwiX3VzZVN0b3JlU2VsZWN0b3IiLCJ1c2VTdG9yZVNlbGVjdG9yIiwic2hhbGxvd0VxdWFsQXJyYXlzIiwiX3VzZVN0b3JlU2VsZWN0b3IyIiwiX3NsaWNlZFRvQXJyYXkyIiwiZmllbGRWYWx1ZSIsImZpZWxkRXJyb3IiLCJmaWVsZFRvdWNoZWQiLCJmaWVsZFZhbGlkYXRpbmciLCJ1c2VFZmZlY3QiLCJyZXRhaW5GaWVsZCIsImV4aXN0aW5nUnVsZXMiLCJyZWdpc3RlckZpZWxkIiwicmVsZWFzZUZpZWxkIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJzZXRGaWVsZFZhbHVlIiwiaGFuZGxlQmx1ciIsImZpZWxkUHJvcHMiLCJvbkNoYW5nZSIsIm9uQmx1ciIsImhhbmRsZU1lcmdlQ2hhbmdlIiwiX3R5cGVvZjIiLCJ0YXJnZXQiLCJSZWFjdCIsImlzVmFsaWRFbGVtZW50IiwiaGFuZGxlTWVyZ2VCbHVyIiwiZG9tU2FmZVByb3BzIiwiY2xvbmVFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsIkZyYWdtZW50IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImNoaWxkIiwiaW5kZXgiLCJrZXkiLCJoYW5kbGVTdWJtaXQiLCJfY2FsbGVlNSIsInZhbGlkYXRlZFZhbHVlcyIsIl90MyIsIl9jb250ZXh0NSIsInByZXZlbnREZWZhdWx0IiwiY29uc29sZSIsImhhbmRsZVJlc2V0IiwicmVzZXRGaWVsZHMiLCJnZXRGaWVsZEVycm9yIiwiZ2V0RmllbGRXYXJuaW5nIiwiZ2V0RmllbGRzRXJyb3IiLCJpc0ZpZWxkVG91Y2hlZCIsImlzRmllbGRzVG91Y2hlZCIsImFsbEZpZWxkc1RvdWNoZWQiLCJldmVyeSIsImlzRmllbGRWYWxpZGF0aW5nIiwic2V0RmllbGRzRXJyb3IiLCJmaWVsZHNFcnJvciIsImVudHJpZXMiLCJfcmVmIiwiX3JlZjIiLCJzZXRGaWVsZEVycm9yIiwic2V0RmllbGRUb3VjaGVkIiwiaXNUb3VjaGVkIiwic2V0RmllbGRzVG91Y2hlZCIsImZpZWxkc1RvdWNoIiwicmVzZXRGb3JtRmllbGRzIiwiaW5pdGlhbFZhbHVlcyIsImdldEluaXRpYWxWYWx1ZXMiLCJuZXdWYWx1ZXMiLCJmaWVsZCIsImluaXRpYWwiLCJpbmNsdWRlcyIsInNldE5lc3RlZFZhbHVlIiwiaW52YWxpZGF0ZVZhbGlkYXRpb25SdW5zIiwibmV3VG91Y2hlZCIsInN1Ym1pdFdpdGhWYWxpZGF0aW9uIiwiY2FsbGJhY2siLCJfY2FsbGVlNiIsIl90NCIsIl90NSIsIl9jb250ZXh0NiIsImZvcm1JbnN0YW5jZSIsInVzZU1lbW8iLCJnZXRGaWVsZFZhbHVlIiwidmFsaWRhdGVGaWVsZHMiLCJzZXRGaWVsZHNWYWx1ZSIsInN1Ym1pdCIsInVucmVnaXN0ZXJGaWVsZCIsInNldFJ1bGVDb250ZXh0SW5zdGFuY2UiLCJpbnRlcm5hbHMiLCJzZXRGaWVsZFdhcm5pbmciLCJfZGVmYXVsdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBR0EsSUFBQUMsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGNBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLFlBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFNBQUEsR0FBQU4sT0FBQTtBQU9BLElBQUFPLFVBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLGdCQUFBLEdBQUFSLE9BQUE7QUFBeUQsU0FBQUQsd0JBQUFVLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFaLHVCQUFBLFlBQUFBLHdCQUFBVSxDQUFBLEVBQUFDLENBQUEs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LFNBQVMsRUFBVEEsU0FBUztJQUFFdkwsS0FBSyxFQUFMQTtFQUFLLENBQUU7QUFDM0MsQ0FBQztBQUFDLElBQUF5TCxRQUFBLEdBQUFwTSxPQUFBLGNBRWFELE9BQU8iLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VFZmZlY3QsIHVzZVJlZiwgbWVtbywgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQDFtb25leS9ob29rcy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgeyB1c2VGb3JtQ29yZSB9IGZyb20gJy4vdXNlRm9ybUNvcmUnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlLCBzZXROZXN0ZWRWYWx1ZSB9IGZyb20gJy4uL3BhdGhVdGlscyc7XG5pbXBvcnQgeyBjb2VyY2VGYWlsdXJlUmVhc29uLCBmaWx0ZXJSdWxlc0J5VHJpZ2dlciwgbm9ybWFsaXplVHJpZ2dlcnMsIHJlc29sdmVSdWxlcywgcnVuUnVsZXNBc3luYywgfSBmcm9tICcuLi9ydW5SdWxlcyc7XG5pbXBvcnQgeyB1c2VTdG9yZVNlbGVjdG9yLCBzaGFsbG93RXF1YWxBcnJheXMsIHNhbWVWYWxpZGF0aW9uTm9kZSB9IGZyb20gJy4uL2Zvcm1TdG9yZSc7XG5pbXBvcnQgeyBGb3JtVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vdmFsaWRhdGlvbkVycm9yJztcbi8qKlxuICogT25seSBydWxlcyB3aXRoIGEgY3VzdG9tIGB2YWxpZGF0b3JgIGNhbiBiZSBnZW51aW5lbHkgYXN5bmNocm9ub3VzIOKAlFxuICogYnVpbHRpbiBydWxlcyByZXNvbHZlIHdpdGhpbiBhIG1pY3JvdGFzaywgc28gZmxpcHBpbmcgYHZhbGlkYXRpbmdgIGZvclxuICogdGhlbSB3b3VsZCBvbmx5IGNodXJuIHN1YnNjcmliZXJzIHdpdGhvdXQgZXZlciBiZWluZyB2aXNpYmxlLiBEZWNpZGVkIG9uXG4gKiBSRVNPTFZFRCBydWxlczogYSBmdW5jdGlvbi1mb3JtIHJ1bGUgdGhhdCByZXNvbHZlcyB0byBidWlsdGluLW9ubHkgY2hlY2tzXG4gKiBtdXN0IG5vdCBmbGlja2VyIHRoZSBmbGFnLlxuICpcbiAqIFRoZSBhc3luYyBlbmdpbmUgYXdhaXRzIHZhbGlkYXRvcnMgbmVzdGVkIGluc2lkZSBgZmllbGRzYCAvIGBkZWZhdWx0RmllbGRgXG4gKiB0b28sIHNvIHRoZSBkZWNpc2lvbiBtdXN0IGRlc2NlbmQgdGhlIHNhbWUgd2F5IOKAlCBvdGhlcndpc2UgYSBkZWVwLW9ubHlcbiAqIHZhbGlkYXRvciAoZS5nLiBgeyBkZWZhdWx0RmllbGQ6IHsgdmFsaWRhdG9yIH0gfWApIHJ1bnMgcGVuZGluZyB3aXRoIHRoZVxuICogZmxhZyBzdHVjayBmYWxzZSwgYW5kIGBpc0ZpZWxkVmFsaWRhdGluZyhuYW1lKWAgdW5kZXItcmVwb3J0cyBmb3IgdGhlIHdob2xlXG4gKiB3aW5kb3cuIE92ZXItZmxhZ2dpbmcgd2hlbiB0aGUgZGVlcCB2YWxpZGF0b3Igd29uJ3QgYWN0dWFsbHkgZmlyZSAoZW1wdHkgL1xuICogcHJpbWl0aXZlIHZhbHVlKSBpcyBhY2NlcHRhYmxlOiB0aGUgZmxhZyBpcyBkZWNpZGVkIG9uIHJ1bGUgU0hBUEUsIGV4YWN0bHlcbiAqIGFzIHRoZSB0b3AtbGV2ZWwgY2FzZSBhbHJlYWR5IG92ZXItZmxhZ3MgYSB2YWxpZGF0b3Igc2hvcnQtY2lyY3VpdGVkIGJ5IGFuXG4gKiBlYXJsaWVyIGJ1aWx0aW4gZmFpbHVyZTsgdGhlIHJ1biBjbGVhcnMgaXQgb24gc2V0dGxlIGVpdGhlciB3YXkuXG4gKi9cbmNvbnN0IGFzUnVsZUFycmF5ID0gKHJ1bGUpID0+IHJ1bGUgPyAoQXJyYXkuaXNBcnJheShydWxlKSA/IHJ1bGUgOiBbcnVsZV0pIDogW107XG5jb25zdCBydWxlSGFzVmFsaWRhdG9yID0gKHJ1bGUpID0+IHtcbiAgICBpZiAodHlwZW9mIHJ1bGUudmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoYXNSdWxlQXJyYXkocnVsZS5kZWZhdWx0RmllbGQpLnNvbWUocnVsZUhhc1ZhbGlkYXRvcikpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChydWxlLmZpZWxkcykge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhydWxlLmZpZWxkcykuc29tZSgoc3ViKSA9PiBhc1J1bGVBcnJheShzdWIpLnNvbWUocnVsZUhhc1ZhbGlkYXRvcikpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuY29uc3QgaGFzUmVzb2x2ZWRWYWxpZGF0b3IgPSAocmVzb2x2ZWQpID0+IHJlc29sdmVkLnNvbWUocnVsZUhhc1ZhbGlkYXRvcik7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHVzZUZvcm1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGNvbnN0IHVzZUZvcm0gPSAoY29uZmlnID0ge30pID0+IHtcbiAgICBjb25zdCB7IG9uRmluaXNoLCBvbkZpbmlzaEZhaWxlZCwgb25SZXNldCwgdmFsaWRhdGVUcmlnZ2VyID0gJ29uQ2hhbmdlJywgfSA9IGNvbmZpZztcbiAgICBjb25zdCBmb3JtQ29yZSA9IHVzZUZvcm1Db3JlKGNvbmZpZyk7XG4gICAgY29uc3QgeyBzdG9yZSB9ID0gZm9ybUNvcmU7XG4gICAgLy8gRXBvY2ggb2YgdGhlIExBVEVTVCBhc3luYyBydW4gdGhhdCByYWlzZWQgZWFjaCBmaWVsZCdzIGB2YWxpZGF0aW5nYCBmbGFnLlxuICAgIC8vIEEgc2V0dGxpbmcgcnVuIGNsZWFycyB0aGUgZmxhZyBvbmx5IHdoaWxlIGl0IGlzIHN0aWxsIHRoZSBsYXRlc3QgcmFpc2VyIOKAlFxuICAgIC8vIGFuIG9sZGVyIHJ1biBtdXN0IG5vdCBibGFuayB0aGUgc3Bpbm5lciBvZiBhIG5ld2VyIG9uZSwgYW5kIGEgcnVuXG4gICAgLy8gc3VwZXJzZWRlZCBieSBhIFNZTkMgY29tbWl0ICh3aGljaCBuZXZlciB0b3VjaGVzIGZsYWdzKSBtdXN0IHN0aWxsIGNsZWFuXG4gICAgLy8gdXAgYWZ0ZXIgaXRzZWxmLlxuICAgIGNvbnN0IGxhc3RBc3luY0Vwb2NoUmVmID0gdXNlUmVmKHt9KTtcbiAgICAvLyBNYXJrIGZpZWxkcyBhcyB2YWxpZGF0aW5nIGluIE9ORSBjb21taXQuIHZhbGlkYXRpbmcgLyB0b3VjaGVkIGxpdmUgaW4gdGhlXG4gICAgLy8gc3RvcmUgYWxvbmdzaWRlIHZhbHVlcyDigJQgZmxpcHBpbmcgdGhlbSAoZS5nLiBhc3luYyB2YWxpZGF0aW9uIGFyb3VuZCBhXG4gICAgLy8gYmx1cikgbXVzdCBub3QgcmUtcmVuZGVyIHRoZSBmb3JtIHJvb3QsIG9ubHkgdGhlIGZpZWxkcyB0aGF0IHN1YnNjcmliZWQuXG4gICAgY29uc3QgbWFya1ZhbGlkYXRpbmcgPSB1c2VNZW1vaXplZEZuKChuYW1lcykgPT4ge1xuICAgICAgICBpZiAobmFtZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBuZXh0ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RvcmUuZ2V0U3RhdGUoKS52YWxpZGF0aW5nKTtcbiAgICAgICAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgbmV4dFtuYW1lXSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHZhbGlkYXRpbmc6IG5leHQgfSk7XG4gICAgfSk7XG4gICAgLy8gRm9sZCBwZXItZmllbGQgcnVsZSBvdXRjb21lcyBpbnRvIEFUIE1PU1Qgb25lIHN0b3JlIGNvbW1pdDogZXJyb3JzIGFuZFxuICAgIC8vIHdhcm5pbmdzIGFyZSBtZXJnZWQgb3ZlciB0aGUgY3VycmVudCBtYXBzIGFuZCB0aGUgYGNsZWFyVmFsaWRhdGluZ2AgZmxhZ3NcbiAgICAvLyBhcmUgcmVtb3ZlZCBpbiB0aGUgU0FNRSBwYXRjaC4gQSBuby1vcCBvdXRjb21lIGNvbW1pdHMgbm90aGluZyBhdCBhbGwg4oCUXG4gICAgLy8gcGVyLWZpZWxkIGNvbW1pdHMgaGVyZSBwcmV2aW91c2x5IG1hZGUgc3VibWl0LXRpbWUgdmFsaWRhdGlvbiBzd2VlcCBldmVyeVxuICAgIC8vIHN1YnNjcmliZXIgTyhmaWVsZHMpIHRpbWVzLlxuICAgIGNvbnN0IGNvbW1pdFJ1bGVPdXRjb21lcyA9IHVzZU1lbW9pemVkRm4oKG91dGNvbWVzLCBjbGVhclZhbGlkYXRpbmcpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICBsZXQgZXJyb3JzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgd2FybmluZ3NDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmVycm9ycyk7XG4gICAgICAgIGNvbnN0IG5ld1dhcm5pbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUud2FybmluZ3MpO1xuICAgICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgZXJyb3IsIHdhcm5pbmcgfSBvZiBvdXRjb21lcykge1xuICAgICAgICAgICAgaWYgKGVycm9yID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgaW4gbmV3RXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdFcnJvcnNbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGVycm9yc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFzYW1lVmFsaWRhdGlvbk5vZGUobmV3RXJyb3JzW25hbWVdLCBlcnJvcikpIHtcbiAgICAgICAgICAgICAgICBuZXdFcnJvcnNbbmFtZV0gPSBlcnJvcjtcbiAgICAgICAgICAgICAgICBlcnJvcnNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh3YXJuaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgaW4gbmV3V2FybmluZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1dhcm5pbmdzW25hbWVdO1xuICAgICAgICAgICAgICAgICAgICB3YXJuaW5nc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFzYW1lVmFsaWRhdGlvbk5vZGUobmV3V2FybmluZ3NbbmFtZV0sIHdhcm5pbmcpKSB7XG4gICAgICAgICAgICAgICAgbmV3V2FybmluZ3NbbmFtZV0gPSB3YXJuaW5nO1xuICAgICAgICAgICAgICAgIHdhcm5pbmdzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmxhZ3NUb0NsZWFyID0gY2xlYXJWYWxpZGF0aW5nLmZpbHRlcigobmFtZSkgPT4gbmFtZSBpbiBzdGF0ZS52YWxpZGF0aW5nKTtcbiAgICAgICAgY29uc3QgcGF0Y2ggPSB7fTtcbiAgICAgICAgaWYgKGVycm9yc0NoYW5nZWQpXG4gICAgICAgICAgICBwYXRjaC5lcnJvcnMgPSBuZXdFcnJvcnM7XG4gICAgICAgIGlmICh3YXJuaW5nc0NoYW5nZWQpXG4gICAgICAgICAgICBwYXRjaC53YXJuaW5ncyA9IG5ld1dhcm5pbmdzO1xuICAgICAgICBpZiAoZmxhZ3NUb0NsZWFyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS52YWxpZGF0aW5nKTtcbiAgICAgICAgICAgIGZsYWdzVG9DbGVhci5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld1ZhbGlkYXRpbmdbbmFtZV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBhdGNoLnZhbGlkYXRpbmcgPSBuZXdWYWxpZGF0aW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhwYXRjaCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHN0b3JlLnNldFN0YXRlKHBhdGNoKTtcbiAgICB9KTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBc3luYyBmaWVsZCB2YWxpZGF0aW9uIOKAkyBlYWNoIHJ1bGUgaXMgcHJvY2Vzc2VkIGV4YWN0bHkgb25jZVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHZhbGlkYXRlRmllbGRBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlLCBydWxlcykgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCFydWxlcyB8fCBydWxlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBlcnJvcjogbnVsbCB9O1xuICAgICAgICAvLyBDYXB0dXJlIHRoaXMgcnVuJ3MgZXBvY2g6IGlmIGEgTkVXRVIgcnVuIChzeW5jIG9yIGFzeW5jKSBzdGFydHMgZm9yXG4gICAgICAgIC8vIHRoZSBmaWVsZCBiZWZvcmUgdGhpcyBvbmUgc2V0dGxlcywgdGhlIG91dGNvbWUgYmVsb3cgaXMgc3RhbGUgYW5kIGlzXG4gICAgICAgIC8vIGRpc2NhcmRlZCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIHRoZSBuZXdlciByZXN1bHQuXG4gICAgICAgIGNvbnN0IGVwb2NoID0gZm9ybUNvcmUuYmVnaW5WYWxpZGF0aW9uUnVuKG5hbWUpO1xuICAgICAgICAvLyBSZXNvbHZlIG9uY2U6IHRoZSBmbGFnIGRlY2lzaW9uIG5lZWRzIHJlc29sdmVkIHJ1bGVzLCBhbmQgcGFzc2luZyB0aGVcbiAgICAgICAgLy8gcmVzb2x2ZWQgYXJyYXkgb253YXJkIHNwYXJlcyB0aGUgZW5naW5lIGEgcmUtcmVzb2x1dGlvbi5cbiAgICAgICAgY29uc3QgdmFsdWVzID0gZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlUnVsZXMocnVsZXMsIHZhbHVlcywgZm9ybUNvcmUuZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSgpKTtcbiAgICAgICAgY29uc3QgZmxhZ2dlZCA9IGhhc1Jlc29sdmVkVmFsaWRhdG9yKHJlc29sdmVkKSA/IFtuYW1lXSA6IFtdO1xuICAgICAgICBtYXJrVmFsaWRhdGluZyhmbGFnZ2VkKTtcbiAgICAgICAgZmxhZ2dlZC5mb3JFYWNoKChmbGFnZ2VkTmFtZSkgPT4ge1xuICAgICAgICAgICAgbGFzdEFzeW5jRXBvY2hSZWYuY3VycmVudFtmbGFnZ2VkTmFtZV0gPSBlcG9jaDtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBvdXRjb21lID0geyBuYW1lLCBlcnJvcjogbnVsbCwgd2FybmluZzogbnVsbCB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyBlcnJvciwgd2FybmluZyB9ID0geWllbGQgcnVuUnVsZXNBc3luYyhuYW1lLCB2YWx1ZSwgdmFsdWVzLCByZXNvbHZlZCwgZm9ybUNvcmUuZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSgpKTtcbiAgICAgICAgICAgIG91dGNvbWUgPSB7IG5hbWUsIGVycm9yLCB3YXJuaW5nIH07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gVGhlIGVuZ2luZSBjb250YWlucyBydWxlLWxldmVsIHRocm93cyBpdHNlbGY7IHRoaXMgaXMgYSBsYXN0LXJlc29ydFxuICAgICAgICAgICAgLy8gbmV0IHNvIGFuIHVuZXhwZWN0ZWQgZmFpbHVyZSBzdXJmYWNlcyBhcyBhIGZpZWxkIGVycm9yIGluc3RlYWQgb2ZcbiAgICAgICAgICAgIC8vIGxlYXZpbmcgdGhlIGZpZWxkIG1hcmtlZCB2YWxpZC5cbiAgICAgICAgICAgIG91dGNvbWUgPSB7IG5hbWUsIGVycm9yOiAoX2EgPSBjb2VyY2VGYWlsdXJlUmVhc29uKGVycikpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdWYWxpZGF0aW9uIGZhaWxlZCcsIHdhcm5pbmc6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGNvbnN0IGlzQ3VycmVudCA9IGZvcm1Db3JlLmlzVmFsaWRhdGlvblJ1bkN1cnJlbnQobmFtZSwgZXBvY2gpO1xuICAgICAgICAgICAgY29uc3QgY2xlYXJGbGFncyA9IGZsYWdnZWQuZmlsdGVyKChmbGFnZ2VkTmFtZSkgPT4gbGFzdEFzeW5jRXBvY2hSZWYuY3VycmVudFtmbGFnZ2VkTmFtZV0gPT09IGVwb2NoKTtcbiAgICAgICAgICAgIGNvbW1pdFJ1bGVPdXRjb21lcyhpc0N1cnJlbnQgPyBbb3V0Y29tZV0gOiBbXSwgY2xlYXJGbGFncyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhlIENBTExFUiBnZXRzIHRoaXMgcnVuJ3Mgb3duIHJlc3VsdCBlaXRoZXIgd2F5IChpdHMgcHJvbWlzZSBpc1xuICAgICAgICAvLyBhYm91dCB0aGUgdmFsdWUgaXQgd2FzIGFza2VkIHRvIHZhbGlkYXRlKTsgb25seSB0aGUgU1RPUkUgY29tbWl0IGlzXG4gICAgICAgIC8vIHN0YWxlbmVzcy1ndWFyZGVkLlxuICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBvdXRjb21lLmVycm9yID09PSBudWxsLCBlcnJvcjogb3V0Y29tZS5lcnJvciB9O1xuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBc3luYyBmaWVsZCBibHVyIGhhbmRsZXJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBoYW5kbGVGaWVsZEJsdXIgPSB1c2VFdmVudENhbGxiYWNrKChuYW1lLCBmaWVsZFRyaWdnZXIpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCB0b3VjaGVkID0gc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkO1xuICAgICAgICBpZiAoIXRvdWNoZWRbbmFtZV0pIHtcbiAgICAgICAgICAgIHN0b3JlLnNldFN0YXRlKHsgdG91Y2hlZDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0b3VjaGVkKSwgeyBbbmFtZV06IHRydWUgfSkgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5nZXRGaWVsZFJ1bGVzKG5hbWUpO1xuICAgICAgICBpZiAoIXJ1bGVzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpO1xuICAgICAgICBjb25zdCBhcHBsaWNhYmxlID0gZmlsdGVyUnVsZXNCeVRyaWdnZXIocmVzb2x2ZVJ1bGVzKHJ1bGVzLCB2YWx1ZXMsIGZvcm1Db3JlLmdldFJ1bGVDb250ZXh0SW5zdGFuY2UoKSksICdvbkJsdXInLCBub3JtYWxpemVUcmlnZ2VycyhmaWVsZFRyaWdnZXIsIHZhbGlkYXRlVHJpZ2dlciksIG5hbWUpO1xuICAgICAgICBpZiAoYXBwbGljYWJsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB5aWVsZCB2YWxpZGF0ZUZpZWxkQXN5bmMobmFtZSwgcmVzb2x2ZVZhbHVlKHZhbHVlcywgbmFtZSksIGFwcGxpY2FibGUpO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFZhbGlkYXRlIGFsbCBmaWVsZHMgYXN5bmNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkc0FzeW5jID0gdXNlTWVtb2l6ZWRGbigobmFtZUxpc3QpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBmaWVsZHNUb1ZhbGlkYXRlID0gbmFtZUxpc3QgfHwgT2JqZWN0LmtleXMoZm9ybUNvcmUuZmllbGRSdWxlcyk7XG4gICAgICAgIGNvbnN0IGZpZWxkRXJyb3JzID0ge307XG4gICAgICAgIC8vIFJlc29sdmUgZXZlcnkgZmllbGQgb25jZSB1cCBmcm9udDogdGhlIGZsYWcgZGVjaXNpb24gbmVlZHMgcmVzb2x2ZWRcbiAgICAgICAgLy8gcnVsZXMsIGFuZCB0aGUgcmVzb2x2ZWQgYXJyYXlzIGFyZSByZXVzZWQgZm9yIHRoZSBhY3R1YWwgcnVucy4gRWFjaFxuICAgICAgICAvLyBmaWVsZCBhbHNvIGNhcHR1cmVzIGl0cyB2YWxpZGF0aW9uIGVwb2NoIOKAlCBhIGZpZWxkIHdob3NlIHZhbHVlXG4gICAgICAgIC8vIGNoYW5nZXMgbWlkLXN1Ym1pdCBnZXRzIGEgbmV3ZXIgcnVuLCBhbmQgdGhpcyBydW4ncyBzdGFsZSBvdXRjb21lXG4gICAgICAgIC8vIG11c3Qgbm90IG92ZXJ3cml0ZSBpdCBpbiB0aGUgc3RvcmUuXG4gICAgICAgIGNvbnN0IHJlc29sdmVkQnlGaWVsZCA9IG5ldyBNYXAoKTtcbiAgICAgICAgY29uc3QgZXBvY2hCeUZpZWxkID0gbmV3IE1hcCgpO1xuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgZmllbGRzVG9WYWxpZGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5maWVsZFJ1bGVzW25hbWVdO1xuICAgICAgICAgICAgaWYgKHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgZXBvY2hCeUZpZWxkLnNldChuYW1lLCBmb3JtQ29yZS5iZWdpblZhbGlkYXRpb25SdW4obmFtZSkpO1xuICAgICAgICAgICAgICAgIHJlc29sdmVkQnlGaWVsZC5zZXQobmFtZSwgcmVzb2x2ZVJ1bGVzKHJ1bGVzLCBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBmb3JtQ29yZS5nZXRSdWxlQ29udGV4dEluc3RhbmNlKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBPbmUgY29tbWl0IHRvIHJhaXNlIHRoZSB2YWxpZGF0aW5nIGZsYWdzICh2YWxpZGF0b3ItYmVhcmluZyBmaWVsZHNcbiAgICAgICAgLy8gb25seSksIG9uZSBjb21taXQgdG8gbGFuZCBldmVyeSBlcnJvci93YXJuaW5nIGFuZCBjbGVhciB0aGUgZmxhZ3MuXG4gICAgICAgIGNvbnN0IGZsYWdnZWQgPSBmaWVsZHNUb1ZhbGlkYXRlLmZpbHRlcigobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlZEJ5RmllbGQuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkID8gaGFzUmVzb2x2ZWRWYWxpZGF0b3IocmVzb2x2ZWQpIDogZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBtYXJrVmFsaWRhdGluZyhmbGFnZ2VkKTtcbiAgICAgICAgZmxhZ2dlZC5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBsYXN0QXN5bmNFcG9jaFJlZi5jdXJyZW50W25hbWVdID0gZXBvY2hCeUZpZWxkLmdldChuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG91dGNvbWVzID0gW107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB5aWVsZCBQcm9taXNlLmFsbChmaWVsZHNUb1ZhbGlkYXRlLm1hcCgobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZWRCeUZpZWxkLmdldChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc29sdmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgd2FybmluZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgKHsgZXJyb3IsIHdhcm5pbmcgfSA9IHlpZWxkIHJ1blJ1bGVzQXN5bmMobmFtZSwgcmVzb2x2ZVZhbHVlKGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlKCksIG5hbWUpLCBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCByZXNvbHZlZCwgZm9ybUNvcmUuZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSgpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTGFzdC1yZXNvcnQgbmV0IChzZWUgdmFsaWRhdGVGaWVsZEFzeW5jKSDigJQga2VlcCB0aGUgbm9ybWFsXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0cnVjdGVkLWVycm9yIGZsb3cgc28gb25GaW5pc2hGYWlsZWQgZ2V0cyBhIHJlYWwgcGF5bG9hZC5cbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSAoX2EgPSBjb2VyY2VGYWlsdXJlUmVhc29uKGVycikpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFRoZSBzdG9yZSBjb21taXQgaXMgc3RhbGVuZXNzLWd1YXJkZWQ7IHRoZSBTVUJNSVQgZGVjaXNpb25cbiAgICAgICAgICAgICAgICAvLyAoZmllbGRFcnJvcnMgLyB0aGUgdGhyb3duIEZvcm1WYWxpZGF0aW9uRXJyb3IpIHN0aWxsIHJlZmxlY3RzXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBydW4ncyBvd24gcmVzdWx0cyBmb3IgdGhlIHZhbHVlcyBpdCB2YWxpZGF0ZWQuXG4gICAgICAgICAgICAgICAgY29uc3QgZXBvY2ggPSBlcG9jaEJ5RmllbGQuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChlcG9jaCAhPT0gdW5kZWZpbmVkICYmIGZvcm1Db3JlLmlzVmFsaWRhdGlvblJ1bkN1cnJlbnQobmFtZSwgZXBvY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dGNvbWVzLnB1c2goeyBuYW1lLCBlcnJvciwgd2FybmluZyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW25hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGNvbnN0IGNsZWFyRmxhZ3MgPSBmbGFnZ2VkLmZpbHRlcigobmFtZSkgPT4gbGFzdEFzeW5jRXBvY2hSZWYuY3VycmVudFtuYW1lXSA9PT0gZXBvY2hCeUZpZWxkLmdldChuYW1lKSk7XG4gICAgICAgICAgICBjb21taXRSdWxlT3V0Y29tZXMob3V0Y29tZXMsIGNsZWFyRmxhZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhmaWVsZEVycm9ycykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEZvcm1WYWxpZGF0aW9uRXJyb3IoZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgZmllbGRFcnJvcnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lTGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnJlZHVjZSgoYWNjLCBuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgYWNjW25hbWVdID0gcmVzb2x2ZVZhbHVlKGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlKCksIG5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlKCk7XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIGRlZmluZUZpZWxkIOKAkyB1c2VkIGJ5IHN0YW5kYWxvbmUgKG5vbi1Qcm9Gb3JtKSBjb25zdW1lcnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBkZWZpbmVGaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIGZpZWxkT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcnVsZXMgPSBbXSB9ID0gZmllbGRPcHRpb25zO1xuICAgICAgICBjb25zdCBGaWVsZENvbXBvbmVudCA9IG1lbW8oKF9hKSA9PiB7XG4gICAgICAgICAgICB2YXIgeyBjaGlsZHJlbiwgcmVuZGVyIH0gPSBfYSwgcHJvcHMgPSBfX3Jlc3QoX2EsIFtcImNoaWxkcmVuXCIsIFwicmVuZGVyXCJdKTtcbiAgICAgICAgICAgIC8vIFBlci1maWVsZCBzdG9yZSBzdWJzY3JpcHRpb246IHRoaXMgZmllbGQgcmUtcmVuZGVycyBvbmx5IHdoZW4gaXRzXG4gICAgICAgICAgICAvLyBvd24gdmFsdWUvZXJyb3IvdG91Y2hlZC92YWxpZGF0aW5nIHNsaWNlIGNoYW5nZXMuIERvdC1wYXRoc1xuICAgICAgICAgICAgLy8gcmVzb2x2ZSBpbnRvIHRoZSBuZXN0ZWQgdmFsdWVzIGxpa2UgZXZlcnl3aGVyZSBlbHNlLlxuICAgICAgICAgICAgY29uc3QgW2ZpZWxkVmFsdWUsIGZpZWxkRXJyb3IsIGZpZWxkVG91Y2hlZCwgZmllbGRWYWxpZGF0aW5nXSA9IHVzZVN0b3JlU2VsZWN0b3Ioc3RvcmUsIChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAoX2EgPSByZXNvbHZlVmFsdWUoc3RhdGUudmFsdWVzLCBuYW1lKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJycsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yc1tuYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUudG91Y2hlZFtuYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUudmFsaWRhdGluZ1tuYW1lXSxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSwgc2hhbGxvd0VxdWFsQXJyYXlzKTtcbiAgICAgICAgICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gTW91bnQtY291bnRlZDogcmVsZWFzZUZpZWxkIHJlbW92ZXMgdGhlIHJ1bGVzIG9ubHkgd2hlbiB0aGVcbiAgICAgICAgICAgICAgICAvLyBMQVNUIHNhbWUtbmFtZSBpbnN0YW5jZSB1bm1vdW50cyDigJQgYW4gaW5zdGFuY2UgdGhhdCBwaWdneWJhY2tlZFxuICAgICAgICAgICAgICAgIC8vIG9uIGFuIGV4aXN0aW5nIHJlZ2lzdHJhdGlvbiAoZS5nLiBhIFByb0Zvcm0uSXRlbSdzKSBjYW4gbmV2ZXJcbiAgICAgICAgICAgICAgICAvLyB3aXBlIGl0IG9uIGl0cyBvd24gdW5tb3VudC5cbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZXRhaW5GaWVsZChuYW1lKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1J1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nUnVsZXMgJiYgcnVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkKG5hbWUsIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUucmVsZWFzZUZpZWxkKG5hbWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LCBbXSk7IC8vIE9ubHkgcmVnaXN0ZXIgb24gbW91bnRcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUZpZWxkQ2hhbmdlID0gdXNlRXZlbnRDYWxsYmFjaygodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBUb3VjaGVkIGlzIHNldCBieSB0aGUgdXNlciBjaGFuZ2UgdHJpZ2dlciAobWF0Y2hpbmcgdGhlXG4gICAgICAgICAgICAgICAgLy8gUHJvRm9ybS5JdGVtIHBhdGgpIOKAlCBwcm9ncmFtbWF0aWMgc2V0RmllbGRzVmFsdWUgZG9lcyBub3QuXG4gICAgICAgICAgICAgICAgY29uc3QgdG91Y2hlZCA9IHN0b3JlLmdldFN0YXRlKCkudG91Y2hlZDtcbiAgICAgICAgICAgICAgICBpZiAoIXRvdWNoZWRbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB0b3VjaGVkOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRvdWNoZWQpLCB7IFtuYW1lXTogdHJ1ZSB9KSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYXBwbGljYWJsZSA9IGZpbHRlclJ1bGVzQnlUcmlnZ2VyKHJlc29sdmVSdWxlcyhydWxlcywgZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgZm9ybUNvcmUuZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSgpKSwgJ29uQ2hhbmdlJywgbm9ybWFsaXplVHJpZ2dlcnMoZmllbGRPcHRpb25zLnZhbGlkYXRlVHJpZ2dlciwgdmFsaWRhdGVUcmlnZ2VyKSwgbmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGFwcGxpY2FibGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBBc3luYyBwYXRoIChtYXRjaGluZyBQcm9Gb3JtLkl0ZW0pIHNvIGEgUHJvbWlzZS1yZXR1cm5pbmdcbiAgICAgICAgICAgICAgICAgICAgLy8gdmFsaWRhdG9yIGlzIGhvbm9yZWQgb24gY2hhbmdlIGluc3RlYWQgb2YgYmVpbmcgc2lsZW50bHlcbiAgICAgICAgICAgICAgICAgICAgLy8gc2tpcHBlZDsgZmlyZS1hbmQtZm9yZ2V0IOKAlCB0aGUgcmVzdWx0IGxhbmRzIG9uIHRoZSBzdG9yZS5cbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jKG5hbWUsIHZhbHVlLCBhcHBsaWNhYmxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZEJsdXIobmFtZSwgZmllbGRPcHRpb25zLnZhbGlkYXRlVHJpZ2dlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUHJvcHMgPSBPYmplY3QuYXNzaWduKHsgbmFtZSwgdmFsdWU6IGZpZWxkVmFsdWUsIGVycm9yOiBmaWVsZEVycm9yLCB0b3VjaGVkOiBmaWVsZFRvdWNoZWQsIHZhbGlkYXRpbmc6IGZpZWxkVmFsaWRhdGluZywgb25DaGFuZ2U6IGhhbmRsZUZpZWxkQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZUJsdXIgfSwgcHJvcHMpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VDaGFuZ2UgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICd0YXJnZXQnIGluIGVcbiAgICAgICAgICAgICAgICAgICAgPyBlLnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGU7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25DaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VCbHVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBoYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkJsdXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmVuZGVyICYmIHR5cGVvZiByZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEVsZW1lbnQgY2hpbGRyZW4gcmVjZWl2ZSBvbmx5IERPTS1zYWZlIHByb3BzIOKAlCBlcnJvci90b3VjaGVkL1xuICAgICAgICAgICAgLy8gdmFsaWRhdGluZyBhcmUgZmllbGQgTUVUQSwgbm90IGNvbnRyb2wgcHJvcHM7IHNwcmVhZGluZyB0aGVtIG9udG9cbiAgICAgICAgICAgIC8vIGEgaG9zdCBlbGVtZW50IHdvdWxkIGxlYWsgYW55IGF0dHJpYnV0ZXMuIFJlbmRlci1wcm9wIGFuZFxuICAgICAgICAgICAgLy8gZnVuY3Rpb24gY2hpbGRyZW4ga2VlcCB0aGUgZnVsbCBmaWVsZFByb3BzLlxuICAgICAgICAgICAgY29uc3QgZG9tU2FmZVByb3BzID0gT2JqZWN0LmFzc2lnbih7IG5hbWUsIHZhbHVlOiBmaWVsZFZhbHVlLCBvbkNoYW5nZTogaGFuZGxlTWVyZ2VDaGFuZ2UsIG9uQmx1cjogaGFuZGxlTWVyZ2VCbHVyIH0sIHByb3BzKTtcbiAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBkb21TYWZlUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIC4uLmNoaWxkcmVuLm1hcCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZG9tU2FmZVByb3BzKSwgeyBrZXk6IGNoaWxkLmtleSB8fCBpbmRleCB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgICAgRmllbGRDb21wb25lbnQuZGlzcGxheU5hbWUgPSBgRmllbGQoJHtuYW1lfSlgO1xuICAgICAgICByZXR1cm4gRmllbGRDb21wb25lbnQ7XG4gICAgfSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gaGFuZGxlU3VibWl0IC8gaGFuZGxlUmVzZXQg4oCTIGZvciA8Zm9ybT4gZXZlbnQgaGFuZGxlcnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBoYW5kbGVTdWJtaXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRWYWx1ZXMgPSB5aWVsZCB2YWxpZGF0ZUZpZWxkc0FzeW5jKCk7XG4gICAgICAgICAgICBvbkZpbmlzaCA9PT0gbnVsbCB8fCBvbkZpbmlzaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2godmFsaWRhdGVkVmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBPbmx5IGEgVkFMSURBVElPTiBmYWlsdXJlIHJlYWNoZXMgb25GaW5pc2hGYWlsZWQg4oCUIGFuIGV4Y2VwdGlvbiBvdXRcbiAgICAgICAgICAgIC8vIG9mIHRoZSBjb25zdW1lcidzIG93biBvbkZpbmlzaCBpcyBub3QgYSB2YWxpZGF0aW9uIHJlc3VsdCBhbmQgaXNcbiAgICAgICAgICAgIC8vIHN1cmZhY2VkIGluc3RlYWQgb2YgYmVpbmcgbWlzcmVwb3J0ZWQuXG4gICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRm9ybVZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgIG9uRmluaXNoRmFpbGVkID09PSBudWxsIHx8IG9uRmluaXNoRmFpbGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaEZhaWxlZCh7IHZhbHVlczogZXJyLnZhbHVlcywgZXJyb3JzOiBlcnIuZXJyb3JzIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignW1Byb0Zvcm1dIG9uRmluaXNoIHRocmV3IGR1cmluZyBzdWJtaXQ6JywgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICBjb25zdCBoYW5kbGVSZXNldCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IHtcbiAgICAgICAgZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGZvcm1Db3JlLnJlc2V0RmllbGRzKCk7XG4gICAgICAgIG9uUmVzZXQgPT09IG51bGwgfHwgb25SZXNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXNldCgpO1xuICAgIH0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEZvcm1JbnN0YW5jZSDigJMgZW5oYW5jZWQgQVBJIGZvciBjb25zdW1lcnMuXG4gICAgLy9cbiAgICAvLyBFdmVyeSBtZXRob2QgaXMgd3JhcHBlZCBpbiB1c2VNZW1vaXplZEZuIChzdGFibGUgaWRlbnRpdHksIGFsd2F5cyByZWFkcyB0aGVcbiAgICAvLyBsYXRlc3Qgc3RvcmUgc3RhdGUpIHNvIHRoZSBpbnN0YW5jZSBvYmplY3QgaXRzZWxmIGlzIElERU5USVRZLVNUQUJMRSBmb3JcbiAgICAvLyB0aGUgbGlmZXRpbWUgb2YgdGhlIGZvcm0g4oCUIHRoaXMgaXMgd2hhdCBsZXRzIFByb0Zvcm0gcHVibGlzaCBpdCB0aHJvdWdoIHRoZVxuICAgIC8vIHN0YWJsZSBjb250ZXh0IHdpdGhvdXQgcmUtcmVuZGVyaW5nIHN1YnNjcmliZXJzIG9uIGVhY2gga2V5c3Ryb2tlLlxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGdldEZpZWxkRXJyb3IgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiBzdG9yZS5nZXRTdGF0ZSgpLmVycm9yc1tuYW1lXSk7XG4gICAgY29uc3QgZ2V0RmllbGRXYXJuaW5nID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4gc3RvcmUuZ2V0U3RhdGUoKS53YXJuaW5nc1tuYW1lXSk7XG4gICAgY29uc3QgZ2V0RmllbGRzRXJyb3IgPSB1c2VNZW1vaXplZEZuKChuYW1lTGlzdCkgPT4ge1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBzdG9yZS5nZXRTdGF0ZSgpLmVycm9ycztcbiAgICAgICAgaWYgKCFuYW1lTGlzdClcbiAgICAgICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBuYW1lTGlzdC5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdID0gZXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgICBjb25zdCBpc0ZpZWxkVG91Y2hlZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHN0b3JlLmdldFN0YXRlKCkudG91Y2hlZFtuYW1lXSB8fCBmYWxzZSk7XG4gICAgY29uc3QgaXNGaWVsZHNUb3VjaGVkID0gdXNlTWVtb2l6ZWRGbigobmFtZUxpc3QsIGFsbEZpZWxkc1RvdWNoZWQgPSBmYWxzZSkgPT4ge1xuICAgICAgICBjb25zdCB0b3VjaGVkID0gc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkO1xuICAgICAgICBpZiAoIW5hbWVMaXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModG91Y2hlZCkuc29tZSgoa2V5KSA9PiB0b3VjaGVkW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGxGaWVsZHNUb3VjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZUxpc3QuZXZlcnkoKG5hbWUpID0+IHRvdWNoZWRbbmFtZV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYW1lTGlzdC5zb21lKChuYW1lKSA9PiB0b3VjaGVkW25hbWVdKTtcbiAgICB9KTtcbiAgICBjb25zdCBpc0ZpZWxkVmFsaWRhdGluZyA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHN0b3JlLmdldFN0YXRlKCkudmFsaWRhdGluZ1tuYW1lXSB8fCBmYWxzZSk7XG4gICAgY29uc3Qgc2V0RmllbGRzRXJyb3IgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNFcnJvcikgPT4ge1xuICAgICAgICBPYmplY3QuZW50cmllcyhmaWVsZHNFcnJvcikuZm9yRWFjaCgoW25hbWUsIGVycm9yXSkgPT4ge1xuICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkVG91Y2hlZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIGlzVG91Y2hlZCA9IHRydWUpID0+IHtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB0b3VjaGVkOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0b3JlLmdldFN0YXRlKCkudG91Y2hlZCksIHsgW25hbWVdOiBpc1RvdWNoZWQgfSkgfSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRzVG91Y2hlZCA9IHVzZU1lbW9pemVkRm4oKGZpZWxkc1RvdWNoKSA9PiB7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHsgdG91Y2hlZDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdG9yZS5nZXRTdGF0ZSgpLnRvdWNoZWQpLCBmaWVsZHNUb3VjaCkgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVzZXRGb3JtRmllbGRzID0gdXNlTWVtb2l6ZWRGbigoZmllbGRzKSA9PiB7XG4gICAgICAgIGlmICghZmllbGRzKSB7XG4gICAgICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1vdW50LWZyb3plbiBpbml0aWFsVmFsdWVzIOKAlCBjb25zaXN0ZW50IHdpdGggdGhlIGZ1bGwgcmVzZXRGaWVsZHMuXG4gICAgICAgIC8vIFJlYWRzIEFORCB3cml0ZXMgYXJlIG5lc3RlZC1wYXRoIGF3YXJlLCBzbyBkb3QtcGF0aCBuYW1lc1xuICAgICAgICAvLyAoYGFkZHJlc3MuY2l0eWAsIGBpdGVtcy4wLnRpdGxlYCkgcmVzZXQgY29ycmVjdGx5IGluc3RlYWQgb2YgcHJvYmluZyBhXG4gICAgICAgIC8vIGxpdGVyYWwga2V5IGFuZCBzaGFsbG93LW1lcmdpbmcgb25lIGJhY2suXG4gICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZXMgPSBmb3JtQ29yZS5nZXRJbml0aWFsVmFsdWVzKCk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgbGV0IG5ld1ZhbHVlcyA9IHN0YXRlLnZhbHVlcztcbiAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbml0aWFsID0gcmVzb2x2ZVZhbHVlKGluaXRpYWxWYWx1ZXMsIGZpZWxkKTtcbiAgICAgICAgICAgIG5ld1ZhbHVlcyA9IGZpZWxkLmluY2x1ZGVzKCcuJylcbiAgICAgICAgICAgICAgICA/IHNldE5lc3RlZFZhbHVlKG5ld1ZhbHVlcywgZmllbGQsIGluaXRpYWwpXG4gICAgICAgICAgICAgICAgOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG5ld1ZhbHVlcyksIHsgW2ZpZWxkXTogaW5pdGlhbCB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIExpa2UgdGhlIGZ1bGwgcmVzZXQ6IGNsZWFyIEFMTCBwZXItZmllbGQgbWV0YSAoZXJyb3JzIEFORCB3YXJuaW5ncyBBTkRcbiAgICAgICAgLy8gdG91Y2hlZC92YWxpZGF0aW5nKSwgaW52YWxpZGF0ZSBpbi1mbGlnaHQgdmFsaWRhdGlvbiBydW5zLCBhbmQgbGFuZFxuICAgICAgICAvLyBldmVyeXRoaW5nIGluIE9ORSBjb21taXQuIE5vIG9uVmFsdWVzQ2hhbmdlIOKAlCByZXNldCBpcyBub3QgYSBjaGFuZ2VcbiAgICAgICAgLy8gZXZlbnQgb24gZWl0aGVyIHBhdGguXG4gICAgICAgIGZvcm1Db3JlLmludmFsaWRhdGVWYWxpZGF0aW9uUnVucyhmaWVsZHMpO1xuICAgICAgICBjb25zdCBuZXdFcnJvcnMgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5lcnJvcnMpO1xuICAgICAgICBjb25zdCBuZXdXYXJuaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLndhcm5pbmdzKTtcbiAgICAgICAgY29uc3QgbmV3VG91Y2hlZCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnRvdWNoZWQpO1xuICAgICAgICBjb25zdCBuZXdWYWxpZGF0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUudmFsaWRhdGluZyk7XG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIG5ld0Vycm9yc1tmaWVsZF07XG4gICAgICAgICAgICBkZWxldGUgbmV3V2FybmluZ3NbZmllbGRdO1xuICAgICAgICAgICAgZGVsZXRlIG5ld1RvdWNoZWRbZmllbGRdO1xuICAgICAgICAgICAgZGVsZXRlIG5ld1ZhbGlkYXRpbmdbZmllbGRdO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdmFsdWVzOiBuZXdWYWx1ZXMsXG4gICAgICAgICAgICBlcnJvcnM6IG5ld0Vycm9ycyxcbiAgICAgICAgICAgIHdhcm5pbmdzOiBuZXdXYXJuaW5ncyxcbiAgICAgICAgICAgIHRvdWNoZWQ6IG5ld1RvdWNoZWQsXG4gICAgICAgICAgICB2YWxpZGF0aW5nOiBuZXdWYWxpZGF0aW5nLFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBzdWJtaXRXaXRoVmFsaWRhdGlvbiA9IHVzZU1lbW9pemVkRm4oKGNhbGxiYWNrKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHZhbGlkYXRlZFZhbHVlcztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhbGlkYXRlZFZhbHVlcyA9IHlpZWxkIHZhbGlkYXRlRmllbGRzQXN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIC8vIFZhbGlkYXRpb24gZmFpbHVyZSDigJQgdGhlIGZpZWxkIGVycm9ycyBhcmUgYWxyZWFkeSBpbiB0aGUgc3RvcmUuXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB5aWVsZCBjYWxsYmFjayh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIC8vIEEgdGhyb3dpbmcgY2FsbGJhY2sgaXMgYSBjb25zdW1lciBidWcsIG5vdCBhIHZhbGlkYXRpb24gZmFpbHVyZSDigJRcbiAgICAgICAgICAgICAgICAvLyBzdXJmYWNlIGl0IChtaXJyb3JpbmcgcmMtZmllbGQtZm9ybSdzIG9uRmluaXNoIGhhbmRsaW5nKSBpbnN0ZWFkXG4gICAgICAgICAgICAgICAgLy8gb2Ygc3dhbGxvd2luZyBpdCBzaWxlbnRseS5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbUHJvRm9ybV0gc3VibWl0IGNhbGxiYWNrIHRocmV3OicsIGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWVzO1xuICAgIH0pKTtcbiAgICBjb25zdCBmb3JtSW5zdGFuY2UgPSB1c2VNZW1vKCgpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZvcm1Db3JlLmZvcm1JbnN0YW5jZSksIHsgZ2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuZ2V0RmllbGRWYWx1ZSwgZ2V0RmllbGRzVmFsdWU6IGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlLCB2YWxpZGF0ZUZpZWxkczogdmFsaWRhdGVGaWVsZHNBc3luYywgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSwgc2V0RmllbGRzVmFsdWU6IGZvcm1Db3JlLnNldEZpZWxkc1ZhbHVlLCBnZXRGaWVsZEVycm9yOiBnZXRGaWVsZEVycm9yLCBnZXRGaWVsZFdhcm5pbmc6IGdldEZpZWxkV2FybmluZywgZ2V0RmllbGRzRXJyb3I6IGdldEZpZWxkc0Vycm9yLCBpc0ZpZWxkVG91Y2hlZDogaXNGaWVsZFRvdWNoZWQsIGlzRmllbGRzVG91Y2hlZDogaXNGaWVsZHNUb3VjaGVkLCBpc0ZpZWxkVmFsaWRhdGluZzogaXNGaWVsZFZhbGlkYXRpbmcsIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsIHNldEZpZWxkc0Vycm9yLCBzZXRGaWVsZFRvdWNoZWQ6IHNldEZpZWxkVG91Y2hlZCwgc2V0RmllbGRzVG91Y2hlZCwgcmVzZXRGaWVsZHM6IHJlc2V0Rm9ybUZpZWxkcywgc3VibWl0OiBzdWJtaXRXaXRoVmFsaWRhdGlvbiwgZGVmaW5lRmllbGQsIHJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQsIHVucmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkIH0pKSwgW1xuICAgICAgICBmb3JtQ29yZS5mb3JtSW5zdGFuY2UsXG4gICAgICAgIGZvcm1Db3JlLmdldEZpZWxkVmFsdWUsXG4gICAgICAgIGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkc0FzeW5jLFxuICAgICAgICBnZXRGaWVsZEVycm9yLFxuICAgICAgICBnZXRGaWVsZFdhcm5pbmcsXG4gICAgICAgIGdldEZpZWxkc0Vycm9yLFxuICAgICAgICBpc0ZpZWxkVG91Y2hlZCxcbiAgICAgICAgaXNGaWVsZHNUb3VjaGVkLFxuICAgICAgICBpc0ZpZWxkVmFsaWRhdGluZyxcbiAgICAgICAgc2V0RmllbGRzRXJyb3IsXG4gICAgICAgIHNldEZpZWxkVG91Y2hlZCxcbiAgICAgICAgc2V0RmllbGRzVG91Y2hlZCxcbiAgICAgICAgcmVzZXRGb3JtRmllbGRzLFxuICAgICAgICBzdWJtaXRXaXRoVmFsaWRhdGlvbixcbiAgICAgICAgZGVmaW5lRmllbGQsXG4gICAgXSk7XG4gICAgLy8gRnVuY3Rpb24tZm9ybSBydWxlcyBnZXQgdGhlIEZVTEwgZm9ybSBpbnN0YW5jZSAoZXJyb3IgZ2V0dGVycywgdG91Y2hlZFxuICAgIC8vIHN0YXRlLCBtdXRhdG9ycykgaW5zdGVhZCBvZiB0aGUgYmFyZSBjb3JlIG1ldGhvZHMuIFJlZiB3cml0ZSDigJQgY2hlYXAgYW5kXG4gICAgLy8gaWRlbXBvdGVudCBwZXIgcmVuZGVyLlxuICAgIGZvcm1Db3JlLnNldFJ1bGVDb250ZXh0SW5zdGFuY2UoZm9ybUluc3RhbmNlKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBJbnRlcm5hbHMg4oCTIGV4cG9zZWQgZm9yIFByb0Zvcm0gaW50ZWdyYXRpb24uIERhdGEgZmllbGRzIGFyZSBHRVRURVJTIHRoYXRcbiAgICAvLyByZWFkIHRoZSBsaXZlIHN0b3JlLCBzbyB0aGUgb2JqZWN0IGlzIGlkZW50aXR5LXN0YWJsZSB5ZXQgbmV2ZXIgc3RhbGUuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaW50ZXJuYWxzID0gdXNlTWVtbygoKSA9PiAoe1xuICAgICAgICBnZXQgdmFsdWVzKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmdldFN0YXRlKCkudmFsdWVzO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgZXJyb3JzKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmdldFN0YXRlKCkuZXJyb3JzO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgd2FybmluZ3MoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuZ2V0U3RhdGUoKS53YXJuaW5ncztcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IHRvdWNoZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgdmFsaWRhdGluZygpIHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZS5nZXRTdGF0ZSgpLnZhbGlkYXRpbmc7XG4gICAgICAgIH0sXG4gICAgICAgIGZpZWxkUnVsZXM6IGZvcm1Db3JlLmZpZWxkUnVsZXMsXG4gICAgICAgIHNldEZpZWxkVmFsdWU6IGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsXG4gICAgICAgIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsXG4gICAgICAgIHNldEZpZWxkV2FybmluZzogZm9ybUNvcmUuc2V0RmllbGRXYXJuaW5nLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkQXN5bmMsXG4gICAgICAgIHJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHVucmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkLFxuICAgICAgICByZXRhaW5GaWVsZDogZm9ybUNvcmUucmV0YWluRmllbGQsXG4gICAgICAgIHJlbGVhc2VGaWVsZDogZm9ybUNvcmUucmVsZWFzZUZpZWxkLFxuICAgICAgICBoYW5kbGVTdWJtaXQsXG4gICAgICAgIGhhbmRsZVJlc2V0LFxuICAgIH0pLCBbXG4gICAgICAgIHN0b3JlLFxuICAgICAgICBmb3JtQ29yZS5maWVsZFJ1bGVzLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFdhcm5pbmcsXG4gICAgICAgIHZhbGlkYXRlRmllbGRBc3luYyxcbiAgICAgICAgZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS5yZXRhaW5GaWVsZCxcbiAgICAgICAgZm9ybUNvcmUucmVsZWFzZUZpZWxkLFxuICAgICAgICBoYW5kbGVTdWJtaXQsXG4gICAgICAgIGhhbmRsZVJlc2V0LFxuICAgIF0pO1xuICAgIHJldHVybiB7IGZvcm1JbnN0YW5jZSwgaW50ZXJuYWxzLCBzdG9yZSB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IHVzZUZvcm07Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|