@thx/controls 14.0.4 → 15.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/date/DatePicker/datepicker.stories.d.ts +7 -0
  2. package/dist/date/LocalDatePicker/MaskedDateInput.d.ts +7 -6
  3. package/dist/date/LocalDatePicker/localdatepicker.stories.d.ts +8 -0
  4. package/dist/date/LocalDatePicker/maskeddateinput.stories.d.ts +5 -0
  5. package/dist/date/LocalMonthSelect/localmonthselect.stories.d.ts +6 -0
  6. package/dist/date/LocalTimePicker/MaskedTimeInput.d.ts +7 -6
  7. package/dist/date/LocalTimePicker/localtimepicker.stories.d.ts +7 -0
  8. package/dist/date/LocalTimePicker/maskedtimeinput.stories.d.ts +7 -0
  9. package/dist/date/MonthDayPicker/monthdaypicker.stories.d.ts +7 -0
  10. package/dist/date/MonthYearPicker/monthyearpicker.stories.d.ts +8 -0
  11. package/dist/date/YearSelect/yearselect.stories.d.ts +7 -0
  12. package/dist/form/TForm/addeditforms.stories.d.ts +30 -0
  13. package/dist/form/TForm/tform.stories.d.ts +7 -0
  14. package/dist/index.d.ts +1 -1
  15. package/dist/index.js +1241 -654
  16. package/dist/index.min.js +1 -1
  17. package/dist/index.min.js.map +1 -1
  18. package/dist/inputs/CreditCardInput/CreditCardInput.d.ts +14 -5
  19. package/dist/inputs/CreditCardInput/CreditCardNumberInput.d.ts +8 -0
  20. package/dist/inputs/CreditCardInput/creditcardinput.stories.d.ts +5 -0
  21. package/dist/inputs/CreditCardInput/index.d.ts +1 -1
  22. package/dist/inputs/MaskedInput/MaskedInput.d.ts +4 -11
  23. package/dist/inputs/MaskedInput/index.d.ts +1 -0
  24. package/dist/inputs/MaskedInput/maskedinput.stories.d.ts +6 -0
  25. package/dist/inputs/MaskedInput/useMaskedInput.d.ts +9 -0
  26. package/dist/inputs/PhoneInput/PhoneInput.d.ts +2 -1
  27. package/dist/inputs/PhoneInput/phoneinput.stories.d.ts +5 -0
  28. package/dist/inputs/RadioGroup/radiogroup.stories.d.ts +6 -0
  29. package/dist/inputs/Scriptel/withScriptel.d.ts +0 -1
  30. package/dist/inputs/ScriptelInput/scriptelnput.stories.d.ts +5 -0
  31. package/dist/inputs/SinInput/SinInput.d.ts +5 -4
  32. package/dist/inputs/SinInput/sininput.stories.d.ts +5 -0
  33. package/dist/inputs/TableInput/DropdownCell.d.ts +0 -1
  34. package/dist/inputs/TableInput/HoverCell.d.ts +0 -1
  35. package/dist/inputs/TableInput/MoneyCell.d.ts +0 -1
  36. package/dist/inputs/TableInput/MoneyEditCell.d.ts +0 -1
  37. package/dist/inputs/TableInput/MoneySumFooter.d.ts +0 -1
  38. package/dist/inputs/TableInput/StringEditCell.d.ts +0 -1
  39. package/dist/inputs/TableInput/main.story.d.ts +7 -0
  40. package/dist/inputs/TableInput/tableinput.stories.d.ts +6 -0
  41. package/dist/inputs/TableInput/withHover.story.d.ts +7 -0
  42. package/dist/money/MoneyCurrencyInput/MoneyCurrencyInput.d.ts +1 -1
  43. package/dist/money/MoneyCurrencyInput/moneycurrencyinput.stories.d.ts +5 -0
  44. package/dist/money/MoneyInput/MoneyInput.d.ts +3 -4
  45. package/dist/money/MoneyInput/moneyinput.stories.d.ts +6 -0
  46. package/dist/money/useMoneyInput.d.ts +6 -8
  47. package/package.json +32 -42
  48. package/dist/form/TForm/TFormInner.d.ts +0 -33
package/dist/index.js CHANGED
@@ -47,6 +47,7 @@ __webpack_require__.r(__webpack_exports__);
47
47
  /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__);
48
48
 
49
49
 
50
+ var _excluded = ["minDate", "maxDate", "value", "onChange", "onBlur", "as", "action", "actionPosition", "className", "error", "fluid", "focus", "icon", "iconPosition", "inverted", "label", "labelPosition", "loading", "size", "tabIndex", "transparent"];
50
51
  var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/date/LocalDatePicker/LocalDatePicker.tsx";
51
52
 
52
53
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
@@ -82,7 +83,7 @@ function LocalDatePicker(props) {
82
83
  size = props.size,
83
84
  tabIndex = props.tabIndex,
84
85
  transparent = props.transparent,
85
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, ["minDate", "maxDate", "value", "onChange", "onBlur", "as", "action", "actionPosition", "className", "error", "fluid", "focus", "icon", "iconPosition", "inverted", "label", "labelPosition", "loading", "size", "tabIndex", "transparent"]);
86
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, _excluded);
86
87
 
87
88
  var selected = value ? (0,_thx_date__WEBPACK_IMPORTED_MODULE_2__.toDate)(value) : null;
88
89
  var inputProps = {
@@ -155,6 +156,7 @@ __webpack_require__.r(__webpack_exports__);
155
156
  /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__);
156
157
 
157
158
 
159
+ var _excluded = ["onChange", "name"];
158
160
  var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/date/LocalDatePicker/MaskedDateInput.tsx";
159
161
 
160
162
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
@@ -171,7 +173,7 @@ var d = debug__WEBPACK_IMPORTED_MODULE_2___default()('thx.controls.date.LocalDat
171
173
  function MaskedDateInputInner(props, ref) {
172
174
  var _onChange = props.onChange,
173
175
  name = props.name,
174
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, ["onChange", "name"]);
176
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, _excluded);
175
177
 
176
178
  return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)(_inputs_MaskedInput__WEBPACK_IMPORTED_MODULE_4__.MaskedInput, _objectSpread(_objectSpread({}, rest), {}, {
177
179
  name: name,
@@ -188,7 +190,7 @@ function MaskedDateInputInner(props, ref) {
188
190
  }
189
191
  }), void 0, false, {
190
192
  fileName: _jsxFileName,
191
- lineNumber: 17,
193
+ lineNumber: 23,
192
194
  columnNumber: 3
193
195
  }, this);
194
196
  }
@@ -245,6 +247,7 @@ __webpack_require__.r(__webpack_exports__);
245
247
  /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__);
246
248
 
247
249
 
250
+ var _excluded = ["value", "onChange", "year", "handleBlur"];
248
251
  var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/date/LocalMonthSelect/LocalMonthSelect.tsx";
249
252
 
250
253
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
@@ -311,7 +314,7 @@ function LocalMonthSelect(props) {
311
314
  _onChange = props.onChange,
312
315
  year = props.year,
313
316
  handleBlur = props.handleBlur,
314
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, ["value", "onChange", "year", "handleBlur"]);
317
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, _excluded);
315
318
 
316
319
  var theYear = year || _js_joda_core__WEBPACK_IMPORTED_MODULE_2__.LocalDate.now().year();
317
320
  return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Select, _objectSpread({
@@ -385,6 +388,7 @@ __webpack_require__.r(__webpack_exports__);
385
388
  /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__);
386
389
 
387
390
 
391
+ var _excluded = ["value", "onChange", "as", "action", "actionPosition", "className", "disabled", "error", "fluid", "focus", "icon", "iconPosition", "inverted", "label", "labelPosition", "loading", "size", "tabIndex", "transparent"];
388
392
  var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/date/LocalTimePicker/LocalTimePicker.tsx";
389
393
 
390
394
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
@@ -419,7 +423,7 @@ function LocalTimePicker(props) {
419
423
  size = props.size,
420
424
  tabIndex = props.tabIndex,
421
425
  transparent = props.transparent,
422
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, ["value", "onChange", "as", "action", "actionPosition", "className", "disabled", "error", "fluid", "focus", "icon", "iconPosition", "inverted", "label", "labelPosition", "loading", "size", "tabIndex", "transparent"]);
426
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, _excluded);
423
427
 
424
428
  var selected;
425
429
  if (typeof value === 'number') selected = (0,_thx_date__WEBPACK_IMPORTED_MODULE_3__.toDate)(_js_joda_core__WEBPACK_IMPORTED_MODULE_2__.LocalTime.ofSecondOfDay(value));else selected = value ? (0,_thx_date__WEBPACK_IMPORTED_MODULE_3__.toDate)(value) : null;
@@ -451,11 +455,10 @@ function LocalTimePicker(props) {
451
455
  showTimeSelectOnly: true,
452
456
  timeIntervals: 15,
453
457
  timeCaption: "Time",
454
- dateFormat: "hh:mm aa" // @ts-ignore
455
- ,
458
+ dateFormat: "hh:mm aa",
456
459
  customInput: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)(_MaskedTimeInput__WEBPACK_IMPORTED_MODULE_7__.MaskedTimeInput, _objectSpread({}, inputProps), void 0, false, {
457
460
  fileName: _jsxFileName,
458
- lineNumber: 83,
461
+ lineNumber: 82,
459
462
  columnNumber: 17
460
463
  }, this)
461
464
  }), void 0, false, {
@@ -495,6 +498,7 @@ __webpack_require__.r(__webpack_exports__);
495
498
  /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__);
496
499
 
497
500
 
501
+ var _excluded = ["onChange"];
498
502
  var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/date/LocalTimePicker/MaskedTimeInput.tsx";
499
503
 
500
504
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
@@ -510,7 +514,7 @@ var d = debug__WEBPACK_IMPORTED_MODULE_2___default()('thx.controls.date.LocalTim
510
514
  // eslint-disable-next-line no-unused-vars,@typescript-eslint/no-unused-vars
511
515
  function MaskedTimeInputInner(props, ref) {
512
516
  var _onChange = props.onChange,
513
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, ["onChange"]);
517
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, _excluded);
514
518
 
515
519
  return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)(_inputs_MaskedInput__WEBPACK_IMPORTED_MODULE_4__.MaskedInput, _objectSpread({
516
520
  mask: {
@@ -526,7 +530,7 @@ function MaskedTimeInputInner(props, ref) {
526
530
  }
527
531
  }, rest), void 0, false, {
528
532
  fileName: _jsxFileName,
529
- lineNumber: 16,
533
+ lineNumber: 22,
530
534
  columnNumber: 3
531
535
  }, this);
532
536
  }
@@ -584,6 +588,7 @@ __webpack_require__.r(__webpack_exports__);
584
588
  /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__);
585
589
 
586
590
 
591
+ var _excluded = ["value", "onChange", "as", "action", "actionPosition", "className", "disabled", "error", "fluid", "focus", "icon", "iconPosition", "inverted", "label", "labelPosition", "loading", "size", "tabIndex", "transparent"];
587
592
  var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/date/MonthDayPicker/MonthDayPicker.tsx";
588
593
 
589
594
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
@@ -607,7 +612,7 @@ function MonthDayHeader(props) {
607
612
  children: months[props.date.getMonth()]
608
613
  }, void 0, false, {
609
614
  fileName: _jsxFileName,
610
- lineNumber: 43,
615
+ lineNumber: 30,
611
616
  columnNumber: 4
612
617
  }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("button", {
613
618
  type: "button",
@@ -618,7 +623,7 @@ function MonthDayHeader(props) {
618
623
  children: "Previous Month"
619
624
  }, void 0, false, {
620
625
  fileName: _jsxFileName,
621
- lineNumber: 44,
626
+ lineNumber: 31,
622
627
  columnNumber: 4
623
628
  }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("button", {
624
629
  type: "button",
@@ -629,7 +634,7 @@ function MonthDayHeader(props) {
629
634
  children: "Next Month"
630
635
  }, void 0, false, {
631
636
  fileName: _jsxFileName,
632
- lineNumber: 53,
637
+ lineNumber: 40,
633
638
  columnNumber: 4
634
639
  }, this)]
635
640
  }, void 0, true);
@@ -656,7 +661,7 @@ function MonthDayPicker(props) {
656
661
  size = props.size,
657
662
  tabIndex = props.tabIndex,
658
663
  transparent = props.transparent,
659
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, ["value", "onChange", "as", "action", "actionPosition", "className", "disabled", "error", "fluid", "focus", "icon", "iconPosition", "inverted", "label", "labelPosition", "loading", "size", "tabIndex", "transparent"]);
664
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, _excluded);
660
665
 
661
666
  var selected = value ? (0,_thx_date__WEBPACK_IMPORTED_MODULE_2__.toDate)(value) : null;
662
667
  var inputProps = {
@@ -685,14 +690,14 @@ function MonthDayPicker(props) {
685
690
  },
686
691
  customInput: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Input, _objectSpread({}, inputProps), void 0, false, {
687
692
  fileName: _jsxFileName,
688
- lineNumber: 129,
693
+ lineNumber: 116,
689
694
  columnNumber: 17
690
695
  }, this),
691
696
  renderCustomHeader: MonthDayHeader,
692
697
  dateFormat: "MMMM d"
693
698
  }), void 0, false, {
694
699
  fileName: _jsxFileName,
695
- lineNumber: 123,
700
+ lineNumber: 110,
696
701
  columnNumber: 3
697
702
  }, this);
698
703
  }
@@ -749,6 +754,7 @@ __webpack_require__.r(__webpack_exports__);
749
754
  /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__);
750
755
 
751
756
 
757
+ var _excluded = ["value", "onChange", "as", "action", "actionPosition", "className", "disabled", "error", "fluid", "focus", "icon", "iconPosition", "inverted", "label", "labelPosition", "loading", "size", "tabIndex", "transparent", "minDate", "maxDate"];
752
758
  var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/date/MonthYearPicker/MonthYearPicker.tsx";
753
759
 
754
760
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
@@ -785,7 +791,7 @@ function MonthYearPicker(props) {
785
791
  transparent = props.transparent,
786
792
  minDate = props.minDate,
787
793
  maxDate = props.maxDate,
788
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, ["value", "onChange", "as", "action", "actionPosition", "className", "disabled", "error", "fluid", "focus", "icon", "iconPosition", "inverted", "label", "labelPosition", "loading", "size", "tabIndex", "transparent", "minDate", "maxDate"]);
794
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, _excluded);
789
795
 
790
796
  var selected = value ? (0,_thx_date__WEBPACK_IMPORTED_MODULE_3__.toDate)(value) : null;
791
797
  var inputProps = {
@@ -874,6 +880,7 @@ __webpack_require__.r(__webpack_exports__);
874
880
  /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__);
875
881
 
876
882
 
883
+ var _excluded = ["value", "minYear", "maxYear", "onChange", "onBlur", "error"];
877
884
  var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/date/YearSelect/YearSelect.tsx";
878
885
 
879
886
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
@@ -896,7 +903,7 @@ function YearSelect(props) {
896
903
  _onChange = props.onChange,
897
904
  onBlur = props.onBlur,
898
905
  error = props.error,
899
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, ["value", "minYear", "maxYear", "onChange", "onBlur", "error"]);
906
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, _excluded);
900
907
 
901
908
  var availableYears = [];
902
909
 
@@ -1144,6 +1151,7 @@ __webpack_require__.r(__webpack_exports__);
1144
1151
 
1145
1152
 
1146
1153
 
1154
+ var _excluded = ["render", "children"];
1147
1155
 
1148
1156
  var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/form/TForm/useTForm.tsx",
1149
1157
  _s = $RefreshSig$();
@@ -1165,7 +1173,7 @@ function useTForm(config) {
1165
1173
 
1166
1174
  var render = config.render,
1167
1175
  children = config.children,
1168
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3___default()(config, ["render", "children"]); // @ts-ignore
1176
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3___default()(config, _excluded); // @ts-ignore
1169
1177
 
1170
1178
 
1171
1179
  var formik = (0,formik__WEBPACK_IMPORTED_MODULE_5__.useFormik)(rest);
@@ -1309,26 +1317,289 @@ __webpack_require__.r(__webpack_exports__);
1309
1317
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1310
1318
  /* harmony export */ "CreditCardInput": () => (/* binding */ CreditCardInput)
1311
1319
  /* harmony export */ });
1320
+ /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "@babel/runtime/helpers/slicedToArray");
1321
+ /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);
1322
+ /* harmony import */ var _thx_date__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @thx/date */ "@thx/date");
1323
+ /* harmony import */ var _thx_date__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_thx_date__WEBPACK_IMPORTED_MODULE_1__);
1324
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! debug */ "debug");
1325
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_2__);
1326
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "react");
1327
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
1328
+ /* harmony import */ var react_credit_cards__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-credit-cards */ "react-credit-cards");
1329
+ /* harmony import */ var react_credit_cards__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_credit_cards__WEBPACK_IMPORTED_MODULE_4__);
1330
+ /* harmony import */ var react_credit_cards_es_styles_compiled_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-credit-cards/es/styles-compiled.css */ "react-credit-cards/es/styles-compiled.css");
1331
+ /* harmony import */ var react_credit_cards_es_styles_compiled_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_credit_cards_es_styles_compiled_css__WEBPACK_IMPORTED_MODULE_5__);
1332
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! semantic-ui-react */ "semantic-ui-react");
1333
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__);
1334
+ /* harmony import */ var _date_MonthYearPicker__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../date/MonthYearPicker */ "./date/MonthYearPicker/index.ts");
1335
+ /* harmony import */ var _CreditCardNumberInput__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./CreditCardNumberInput */ "./inputs/CreditCardInput/CreditCardNumberInput.tsx");
1336
+ /* harmony import */ var _styles_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./styles.css */ "./inputs/CreditCardInput/styles.css");
1337
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
1338
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__);
1339
+
1340
+
1341
+ var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/inputs/CreditCardInput/CreditCardInput.tsx",
1342
+ _s = $RefreshSig$();
1343
+
1344
+
1345
+
1346
+
1347
+
1348
+
1349
+
1350
+
1351
+
1352
+
1353
+
1354
+ var d = debug__WEBPACK_IMPORTED_MODULE_2___default()('thx.controls.inputs.CreditCardInput');
1355
+ function CreditCardInput(props) {
1356
+ _s();
1357
+
1358
+ var onBlur = props.onBlur,
1359
+ disabled = props.disabled,
1360
+ _onChange = props.onChange,
1361
+ value = props.value;
1362
+
1363
+ var _ref = value || {},
1364
+ name = _ref.name,
1365
+ number = _ref.number,
1366
+ cvc = _ref.cvc,
1367
+ expiry = _ref.expiry;
1368
+
1369
+ var _useState = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)('number'),
1370
+ _useState2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_useState, 2),
1371
+ focus = _useState2[0],
1372
+ setFocus = _useState2[1];
1373
+
1374
+ return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Grid, {
1375
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Grid.Column, {
1376
+ width: 4,
1377
+ children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Form, {
1378
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Form.Group, {
1379
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Form.Field, {
1380
+ width: 9,
1381
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)("label", {
1382
+ children: "Number"
1383
+ }, void 0, false, {
1384
+ fileName: _jsxFileName,
1385
+ lineNumber: 38,
1386
+ columnNumber: 8
1387
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(_CreditCardNumberInput__WEBPACK_IMPORTED_MODULE_8__.CreditCardNumberInput, {
1388
+ onFocus: function onFocus() {
1389
+ return setFocus('number');
1390
+ },
1391
+ onBlur: onBlur,
1392
+ onChange: function onChange(v) {
1393
+ _onChange && _onChange({
1394
+ name: name,
1395
+ number: v,
1396
+ cvc: cvc,
1397
+ expiry: expiry
1398
+ });
1399
+ },
1400
+ disabled: disabled
1401
+ }, void 0, false, {
1402
+ fileName: _jsxFileName,
1403
+ lineNumber: 39,
1404
+ columnNumber: 8
1405
+ }, this)]
1406
+ }, void 0, true, {
1407
+ fileName: _jsxFileName,
1408
+ lineNumber: 37,
1409
+ columnNumber: 7
1410
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Form.Field, {
1411
+ width: 4,
1412
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)("label", {
1413
+ children: "CVC"
1414
+ }, void 0, false, {
1415
+ fileName: _jsxFileName,
1416
+ lineNumber: 49,
1417
+ columnNumber: 8
1418
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Input, {
1419
+ value: cvc || '',
1420
+ onChange: function onChange(ev, v) {
1421
+ _onChange && _onChange({
1422
+ name: name,
1423
+ number: number,
1424
+ cvc: v.value,
1425
+ expiry: expiry
1426
+ });
1427
+ },
1428
+ onFocus: function onFocus() {
1429
+ return setFocus('cvc');
1430
+ },
1431
+ onBlur: function onBlur() {
1432
+ return setFocus('name');
1433
+ },
1434
+ disabled: disabled
1435
+ }, void 0, false, {
1436
+ fileName: _jsxFileName,
1437
+ lineNumber: 50,
1438
+ columnNumber: 8
1439
+ }, this)]
1440
+ }, void 0, true, {
1441
+ fileName: _jsxFileName,
1442
+ lineNumber: 48,
1443
+ columnNumber: 7
1444
+ }, this)]
1445
+ }, void 0, true, {
1446
+ fileName: _jsxFileName,
1447
+ lineNumber: 36,
1448
+ columnNumber: 6
1449
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Form.Group, {
1450
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Form.Field, {
1451
+ width: 9,
1452
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)("label", {
1453
+ children: "Name"
1454
+ }, void 0, false, {
1455
+ fileName: _jsxFileName,
1456
+ lineNumber: 63,
1457
+ columnNumber: 8
1458
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Input, {
1459
+ value: name || '',
1460
+ onChange: function onChange(ev, v) {
1461
+ _onChange && _onChange({
1462
+ name: v.value,
1463
+ number: number,
1464
+ cvc: cvc,
1465
+ expiry: expiry
1466
+ });
1467
+ },
1468
+ onFocus: function onFocus() {
1469
+ return setFocus('name');
1470
+ },
1471
+ disabled: disabled,
1472
+ fluid: true
1473
+ }, void 0, false, {
1474
+ fileName: _jsxFileName,
1475
+ lineNumber: 64,
1476
+ columnNumber: 8
1477
+ }, this)]
1478
+ }, void 0, true, {
1479
+ fileName: _jsxFileName,
1480
+ lineNumber: 62,
1481
+ columnNumber: 7
1482
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Form.Field, {
1483
+ width: 6,
1484
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)("label", {
1485
+ children: "Expiry"
1486
+ }, void 0, false, {
1487
+ fileName: _jsxFileName,
1488
+ lineNumber: 75,
1489
+ columnNumber: 8
1490
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(_date_MonthYearPicker__WEBPACK_IMPORTED_MODULE_7__.MonthYearPicker, {
1491
+ value: expiry,
1492
+ onChange: function onChange(v) {
1493
+ _onChange && _onChange({
1494
+ name: name,
1495
+ number: number,
1496
+ cvc: cvc,
1497
+ expiry: v
1498
+ });
1499
+ },
1500
+ onFocus: function onFocus() {
1501
+ return setFocus('expiry');
1502
+ },
1503
+ disabled: disabled
1504
+ }, void 0, false, {
1505
+ fileName: _jsxFileName,
1506
+ lineNumber: 76,
1507
+ columnNumber: 8
1508
+ }, this)]
1509
+ }, void 0, true, {
1510
+ fileName: _jsxFileName,
1511
+ lineNumber: 74,
1512
+ columnNumber: 7
1513
+ }, this)]
1514
+ }, void 0, true, {
1515
+ fileName: _jsxFileName,
1516
+ lineNumber: 61,
1517
+ columnNumber: 6
1518
+ }, this)]
1519
+ }, void 0, true, {
1520
+ fileName: _jsxFileName,
1521
+ lineNumber: 35,
1522
+ columnNumber: 5
1523
+ }, this)
1524
+ }, void 0, false, {
1525
+ fileName: _jsxFileName,
1526
+ lineNumber: 34,
1527
+ columnNumber: 4
1528
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Grid.Column, {
1529
+ width: 12,
1530
+ children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)((react_credit_cards__WEBPACK_IMPORTED_MODULE_4___default()), {
1531
+ cvc: cvc || '',
1532
+ expiry: (0,_thx_date__WEBPACK_IMPORTED_MODULE_1__.formatDate)(expiry, {
1533
+ format: 'MMuu'
1534
+ }) || '',
1535
+ name: name || '',
1536
+ number: number || '',
1537
+ focused: focus,
1538
+ callback: function callback(a, b) {
1539
+ d(a, b);
1540
+ }
1541
+ }, void 0, false, {
1542
+ fileName: _jsxFileName,
1543
+ lineNumber: 89,
1544
+ columnNumber: 5
1545
+ }, this)
1546
+ }, void 0, false, {
1547
+ fileName: _jsxFileName,
1548
+ lineNumber: 88,
1549
+ columnNumber: 4
1550
+ }, this)]
1551
+ }, void 0, true, {
1552
+ fileName: _jsxFileName,
1553
+ lineNumber: 33,
1554
+ columnNumber: 3
1555
+ }, this);
1556
+ }
1557
+
1558
+ _s(CreditCardInput, "4PPyDbPh64qwRUey7hGXkYz4C7U=");
1559
+
1560
+ _c = CreditCardInput;
1561
+
1562
+ var _c;
1563
+
1564
+ $RefreshReg$(_c, "CreditCardInput");
1565
+
1566
+ /***/ }),
1567
+
1568
+ /***/ "./inputs/CreditCardInput/CreditCardNumberInput.tsx":
1569
+ /*!**********************************************************!*\
1570
+ !*** ./inputs/CreditCardInput/CreditCardNumberInput.tsx ***!
1571
+ \**********************************************************/
1572
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1573
+
1574
+ __webpack_require__.r(__webpack_exports__);
1575
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1576
+ /* harmony export */ "CreditCardNumberInput": () => (/* binding */ CreditCardNumberInput)
1577
+ /* harmony export */ });
1312
1578
  /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty");
1313
1579
  /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
1314
1580
  /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "@babel/runtime/helpers/slicedToArray");
1315
1581
  /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__);
1316
1582
  /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
1317
1583
  /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__);
1318
- /* harmony import */ var _thx_yup_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @thx/yup-types */ "@thx/yup-types");
1319
- /* harmony import */ var _thx_yup_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_thx_yup_types__WEBPACK_IMPORTED_MODULE_3__);
1584
+ /* harmony import */ var credit_card_type__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! credit-card-type */ "credit-card-type");
1585
+ /* harmony import */ var credit_card_type__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(credit_card_type__WEBPACK_IMPORTED_MODULE_3__);
1320
1586
  /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! debug */ "debug");
1321
1587
  /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_4__);
1322
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "react");
1323
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);
1324
- /* harmony import */ var _MaskedInput__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../MaskedInput */ "./inputs/MaskedInput/index.ts");
1325
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
1326
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__);
1588
+ /* harmony import */ var luhn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! luhn */ "luhn");
1589
+ /* harmony import */ var luhn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(luhn__WEBPACK_IMPORTED_MODULE_5__);
1590
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "react");
1591
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
1592
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! semantic-ui-react */ "semantic-ui-react");
1593
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__);
1594
+ /* harmony import */ var _MaskedInput_useMaskedInput__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../MaskedInput/useMaskedInput */ "./inputs/MaskedInput/useMaskedInput.ts");
1595
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
1596
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__);
1327
1597
 
1328
1598
 
1329
1599
 
1600
+ var _excluded = ["value", "onChange"];
1330
1601
 
1331
- var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/inputs/CreditCardInput/CreditCardInput.tsx",
1602
+ var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/inputs/CreditCardInput/CreditCardNumberInput.tsx",
1332
1603
  _s = $RefreshSig$();
1333
1604
 
1334
1605
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
@@ -1340,61 +1611,122 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
1340
1611
 
1341
1612
 
1342
1613
 
1343
- var d = debug__WEBPACK_IMPORTED_MODULE_4___default()('thx.controls.inputs.CreditCardInput');
1344
- function CreditCardInput(_ref) {
1614
+
1615
+
1616
+ var d = debug__WEBPACK_IMPORTED_MODULE_4___default()('thx.controls.inputs.CreditCardInput.CreditCardNumberInput');
1617
+
1618
+ function getIcon(type) {
1619
+ switch (type) {
1620
+ case 'visa':
1621
+ return 'cc visa';
1622
+
1623
+ case 'mastercard':
1624
+ return 'cc mastercard';
1625
+
1626
+ case 'american-express':
1627
+ return 'cc amex';
1628
+
1629
+ case 'diners-club':
1630
+ return 'cc diners club';
1631
+
1632
+ case 'jcb':
1633
+ return 'cc jcb';
1634
+
1635
+ default:
1636
+ return 'credit card';
1637
+ }
1638
+ }
1639
+
1640
+ function CreditCardNumberInput(props) {
1345
1641
  _s();
1346
1642
 
1347
- var cardType = _ref.cardType,
1348
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default()(_ref, ["cardType"]);
1643
+ var value = props.value,
1644
+ _onChange = props.onChange,
1645
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default()(props, _excluded);
1349
1646
 
1350
- var _useState = (0,react__WEBPACK_IMPORTED_MODULE_5__.useState)(),
1647
+ var _useState = (0,react__WEBPACK_IMPORTED_MODULE_6__.useState)('credit card'),
1351
1648
  _useState2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_useState, 2),
1352
- type = _useState2[0],
1353
- setType = _useState2[1];
1354
-
1355
- (0,react__WEBPACK_IMPORTED_MODULE_5__.useEffect)(function () {
1356
- if (cardType) cardType(type);
1357
- }, [type]);
1358
-
1359
- function validate(valueArray) {
1360
- var cardNumber = valueArray.filter(function (b) {
1361
- return b !== '_' && b !== ' ';
1362
- }).join('');
1363
-
1364
- if (cardNumber[0] === '4') {
1365
- // test using 4111111111111111
1366
- setType(_thx_yup_types__WEBPACK_IMPORTED_MODULE_3__.CreditCardCardNameEnum.Visa);
1367
- } else if (parseInt(cardNumber.substr(0, 2), 10) > 50 && parseInt(cardNumber.substr(0, 2), 10) < 56 || parseInt(cardNumber.substr(0, 2), 10) > 2220 && parseInt(cardNumber.substr(0, 2), 10) < 2721) {
1368
- // test using 5555555555554444 || 2222405343248877
1369
- setType(_thx_yup_types__WEBPACK_IMPORTED_MODULE_3__.CreditCardCardNameEnum.MasterCard);
1649
+ icon = _useState2[0],
1650
+ setIcon = _useState2[1];
1651
+
1652
+ var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_6__.useState)('black'),
1653
+ _useState4 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_useState3, 2),
1654
+ color = _useState4[0],
1655
+ setColor = _useState4[1];
1656
+
1657
+ var checkValidation = (0,react__WEBPACK_IMPORTED_MODULE_6__.useCallback)(function (valueArray) {
1658
+ var num = valueArray.join('').replaceAll(/(_|\s)/g, '');
1659
+ var typ = credit_card_type__WEBPACK_IMPORTED_MODULE_3___default()(num);
1660
+ var isValid = (0,luhn__WEBPACK_IMPORTED_MODULE_5__.validate)(num);
1661
+
1662
+ if (typ.length === 1) {
1663
+ setIcon(getIcon(typ[0].type));
1370
1664
  } else {
1371
- setType(undefined);
1665
+ setIcon('credit card');
1372
1666
  }
1373
1667
 
1374
- return cardNumber.length === 16;
1375
- }
1668
+ if (num.length > 0) {
1669
+ if (isValid) {
1670
+ setColor('green');
1671
+ } else {
1672
+ setColor('red');
1673
+ }
1674
+ } else {
1675
+ setColor('black');
1676
+ }
1376
1677
 
1377
- var creditCardMask = {
1378
- mask: '9999 9999 9999 9999',
1379
- isComplete: validate,
1380
- autoUnmask: true
1381
- };
1382
- return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(_MaskedInput__WEBPACK_IMPORTED_MODULE_6__.MaskedInput, _objectSpread({
1383
- mask: creditCardMask
1384
- }, rest), void 0, false, {
1678
+ return isValid;
1679
+ }, []);
1680
+ var creditCardMask = (0,react__WEBPACK_IMPORTED_MODULE_6__.useMemo)(function () {
1681
+ return {
1682
+ mask: '9999 9999 9999 9999',
1683
+ isComplete: checkValidation,
1684
+ autoUnmask: true
1685
+ };
1686
+ }, [checkValidation]);
1687
+ var cardNumberRef = (0,_MaskedInput_useMaskedInput__WEBPACK_IMPORTED_MODULE_8__.useMaskedInput)({
1688
+ mask: creditCardMask,
1689
+ value: value,
1690
+ onChange: function onChange(v) {
1691
+ var typ = credit_card_type__WEBPACK_IMPORTED_MODULE_3___default()(v || '');
1692
+ d(v, typ); // checkValidation([v || '']);
1693
+
1694
+ _onChange && _onChange(v);
1695
+ }
1696
+ });
1697
+ return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__.Input, _objectSpread(_objectSpread({}, rest), {}, {
1698
+ icon: true,
1699
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("input", {
1700
+ ref: cardNumberRef
1701
+ }, void 0, false, {
1702
+ fileName: _jsxFileName,
1703
+ lineNumber: 84,
1704
+ columnNumber: 4
1705
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__.Icon, {
1706
+ name: icon,
1707
+ color: color,
1708
+ size: "large"
1709
+ }, void 0, false, {
1710
+ fileName: _jsxFileName,
1711
+ lineNumber: 85,
1712
+ columnNumber: 4
1713
+ }, this)]
1714
+ }), void 0, true, {
1385
1715
  fileName: _jsxFileName,
1386
- lineNumber: 43,
1387
- columnNumber: 9
1716
+ lineNumber: 83,
1717
+ columnNumber: 3
1388
1718
  }, this);
1389
1719
  }
1390
1720
 
1391
- _s(CreditCardInput, "eKv1/8l14cC9tI1QmMehq36P4O4=");
1721
+ _s(CreditCardNumberInput, "xrhYVJVzbZz9Azh45XSJ5gFaeho=", false, function () {
1722
+ return [_MaskedInput_useMaskedInput__WEBPACK_IMPORTED_MODULE_8__.useMaskedInput];
1723
+ });
1392
1724
 
1393
- _c = CreditCardInput;
1725
+ _c = CreditCardNumberInput;
1394
1726
 
1395
1727
  var _c;
1396
1728
 
1397
- $RefreshReg$(_c, "CreditCardInput");
1729
+ $RefreshReg$(_c, "CreditCardNumberInput");
1398
1730
 
1399
1731
  /***/ }),
1400
1732
 
@@ -1429,18 +1761,16 @@ __webpack_require__.r(__webpack_exports__);
1429
1761
  /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__);
1430
1762
  /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! debug */ "debug");
1431
1763
  /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_2__);
1432
- /* harmony import */ var inputmask__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! inputmask */ "inputmask");
1433
- /* harmony import */ var inputmask__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(inputmask__WEBPACK_IMPORTED_MODULE_3__);
1434
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "react");
1435
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
1436
- /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! semantic-ui-react */ "semantic-ui-react");
1437
- /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__);
1438
- /* harmony import */ var use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! use-deep-compare-effect */ "use-deep-compare-effect");
1439
- /* harmony import */ var use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_6__);
1440
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
1441
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__);
1764
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "react");
1765
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
1766
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! semantic-ui-react */ "semantic-ui-react");
1767
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(semantic_ui_react__WEBPACK_IMPORTED_MODULE_4__);
1768
+ /* harmony import */ var _useMaskedInput__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./useMaskedInput */ "./inputs/MaskedInput/useMaskedInput.ts");
1769
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
1770
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__);
1442
1771
 
1443
1772
 
1773
+ var _excluded = ["name", "onBlur", "disabled", "onChange", "mask", "value"];
1444
1774
 
1445
1775
  var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/inputs/MaskedInput/MaskedInput.tsx",
1446
1776
  _s = $RefreshSig$();
@@ -1454,85 +1784,43 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
1454
1784
 
1455
1785
 
1456
1786
 
1457
-
1458
1787
  var d = debug__WEBPACK_IMPORTED_MODULE_2___default()('thx.controls.inputs.MaskedInput');
1459
- /**
1460
- * See source code for detailed prop types or {@link https://github.com/RobinHerbots/jquery.inputmask|here} for more info.
1461
- * @typedef {Object} inputmaskPropTypes
1462
- */
1463
-
1464
1788
  function MaskedInput(props) {
1465
1789
  _s();
1466
1790
 
1467
1791
  var name = props.name,
1468
- value = props.value,
1469
- onChange = props.onChange,
1470
1792
  onBlur = props.onBlur,
1471
- mask = props.mask,
1472
1793
  disabled = props.disabled,
1473
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, ["name", "value", "onChange", "onBlur", "mask", "disabled"]);
1474
-
1475
- var inputElement = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);
1476
- var maskInstance = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);
1477
- use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_6___default()(function () {
1478
- if (!inputElement.current) throw new Error('Could not get input element');
1479
- d('Creating input mask instance');
1480
- maskInstance.current = new (inputmask__WEBPACK_IMPORTED_MODULE_3___default())(_objectSpread(_objectSpread({}, mask), {}, {
1481
- oncomplete: function oncomplete() {
1482
- var _inputElement$current;
1483
-
1484
- if (onChange) onChange((_inputElement$current = inputElement.current) === null || _inputElement$current === void 0 ? void 0 : _inputElement$current.value);
1485
- if (mask !== null && mask !== void 0 && mask.oncomplete) mask.oncomplete();
1486
- },
1487
- oncleared: function oncleared() {
1488
- if (onChange) onChange();
1489
- if (mask !== null && mask !== void 0 && mask.oncleared) mask.oncleared();
1490
- },
1491
- onincomplete: function onincomplete() {
1492
- var _inputElement$current2;
1493
-
1494
- if (onChange) onChange((_inputElement$current2 = inputElement.current) === null || _inputElement$current2 === void 0 ? void 0 : _inputElement$current2.value);
1495
- if (mask !== null && mask !== void 0 && mask.onincomplete) mask.onincomplete();
1496
- }
1497
- }));
1498
- maskInstance.current.mask(inputElement.current);
1499
- return function () {
1500
- if (maskInstance.current) {
1501
- d('Cleaning up input mask instance');
1502
- maskInstance.current.remove();
1503
- maskInstance.current = null;
1504
- }
1505
- };
1506
- }, [mask]); // If we change the value prop we need to sync the DOM value to display the new value
1507
-
1508
- (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function () {
1509
- var _inputElement$current3;
1794
+ onChange = props.onChange,
1795
+ mask = props.mask,
1796
+ value = props.value,
1797
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, _excluded);
1510
1798
 
1511
- if (inputElement.current && ((_inputElement$current3 = inputElement.current) === null || _inputElement$current3 === void 0 ? void 0 : _inputElement$current3.value) !== value && value !== undefined) {
1512
- d('Value is changing:', value);
1513
- inputElement.current.value = value;
1514
- }
1515
- }, [value]);
1516
- return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Input, _objectSpread(_objectSpread({}, rest), {}, {
1517
- children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("input", {
1799
+ var inputRef = (0,_useMaskedInput__WEBPACK_IMPORTED_MODULE_5__.useMaskedInput)({
1800
+ mask: mask,
1801
+ value: value,
1802
+ onChange: onChange
1803
+ });
1804
+ return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_4__.Input, _objectSpread(_objectSpread({}, rest), {}, {
1805
+ children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)("input", {
1518
1806
  disabled: disabled,
1519
1807
  name: name,
1520
- ref: inputElement,
1808
+ ref: inputRef,
1521
1809
  onBlur: onBlur
1522
1810
  }, void 0, false, {
1523
1811
  fileName: _jsxFileName,
1524
- lineNumber: 68,
1812
+ lineNumber: 21,
1525
1813
  columnNumber: 4
1526
1814
  }, this)
1527
1815
  }), void 0, false, {
1528
1816
  fileName: _jsxFileName,
1529
- lineNumber: 67,
1817
+ lineNumber: 20,
1530
1818
  columnNumber: 3
1531
1819
  }, this);
1532
1820
  }
1533
1821
 
1534
- _s(MaskedInput, "0UoGXAt/O9Xpg5c5EGf1oyTQlfo=", false, function () {
1535
- return [(use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_6___default())];
1822
+ _s(MaskedInput, "W3jy9LOlLdoFzuUq4DZpSE4bDLI=", false, function () {
1823
+ return [_useMaskedInput__WEBPACK_IMPORTED_MODULE_5__.useMaskedInput];
1536
1824
  });
1537
1825
 
1538
1826
  _c = MaskedInput;
@@ -1551,37 +1839,39 @@ $RefreshReg$(_c, "MaskedInput");
1551
1839
 
1552
1840
  __webpack_require__.r(__webpack_exports__);
1553
1841
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1554
- /* harmony export */ "MaskedInput": () => (/* reexport safe */ _MaskedInput__WEBPACK_IMPORTED_MODULE_0__.MaskedInput)
1842
+ /* harmony export */ "MaskedInput": () => (/* reexport safe */ _MaskedInput__WEBPACK_IMPORTED_MODULE_0__.MaskedInput),
1843
+ /* harmony export */ "useMaskedInput": () => (/* reexport safe */ _useMaskedInput__WEBPACK_IMPORTED_MODULE_1__.useMaskedInput)
1555
1844
  /* harmony export */ });
1556
1845
  /* harmony import */ var _MaskedInput__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MaskedInput */ "./inputs/MaskedInput/MaskedInput.tsx");
1846
+ /* harmony import */ var _useMaskedInput__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./useMaskedInput */ "./inputs/MaskedInput/useMaskedInput.ts");
1847
+
1557
1848
 
1558
1849
 
1559
1850
  /***/ }),
1560
1851
 
1561
- /***/ "./inputs/PhoneInput/PhoneInput.tsx":
1562
- /*!******************************************!*\
1563
- !*** ./inputs/PhoneInput/PhoneInput.tsx ***!
1564
- \******************************************/
1852
+ /***/ "./inputs/MaskedInput/useMaskedInput.ts":
1853
+ /*!**********************************************!*\
1854
+ !*** ./inputs/MaskedInput/useMaskedInput.ts ***!
1855
+ \**********************************************/
1565
1856
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1566
1857
 
1567
1858
  __webpack_require__.r(__webpack_exports__);
1568
1859
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1569
- /* harmony export */ "PhoneInput": () => (/* binding */ PhoneInput)
1860
+ /* harmony export */ "useMaskedInput": () => (/* binding */ useMaskedInput)
1570
1861
  /* harmony export */ });
1571
1862
  /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty");
1572
1863
  /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
1573
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
1574
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__);
1575
- /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! debug */ "debug");
1576
- /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_2__);
1864
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! debug */ "debug");
1865
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_1__);
1866
+ /* harmony import */ var inputmask__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! inputmask */ "inputmask");
1867
+ /* harmony import */ var inputmask__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(inputmask__WEBPACK_IMPORTED_MODULE_2__);
1577
1868
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "react");
1578
1869
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
1579
- /* harmony import */ var _MaskedInput__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../MaskedInput */ "./inputs/MaskedInput/index.ts");
1580
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
1581
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__);
1870
+ /* harmony import */ var use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! use-deep-compare-effect */ "use-deep-compare-effect");
1871
+ /* harmony import */ var use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_4__);
1582
1872
 
1583
1873
 
1584
- var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/inputs/PhoneInput/PhoneInput.tsx";
1874
+ var _s = $RefreshSig$();
1585
1875
 
1586
1876
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
1587
1877
 
@@ -1591,21 +1881,114 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
1591
1881
 
1592
1882
 
1593
1883
 
1594
- var d = debug__WEBPACK_IMPORTED_MODULE_2___default()('thx.controls.inputs.PhoneInput');
1595
- function PhoneInput(props) {
1596
- var extension = props.extension,
1597
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, ["extension"]);
1884
+ var d = debug__WEBPACK_IMPORTED_MODULE_1___default()('thx.controls.inputs.MaskedInput.useMaskedInput');
1885
+ function useMaskedInput(props) {
1886
+ _s();
1598
1887
 
1599
- var mask = {
1600
- mask: extension ? '((999) 999-9999[ x9999])|(+9 (999) 999-9999[ x9999])' : '((999) 999-9999)|( +9 (999) 999-9999)',
1601
- greedy: false,
1602
- autoUnmask: true
1888
+ var value = props.value,
1889
+ onChange = props.onChange,
1890
+ onSet = props.onSet,
1891
+ mask = props.mask;
1892
+ var inputElement = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null);
1893
+ var maskInstance = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null);
1894
+ use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_4___default()(function () {
1895
+ if (!inputElement.current) throw new Error('Could not get input element');
1896
+ d('Creating input mask instance');
1897
+ maskInstance.current = new (inputmask__WEBPACK_IMPORTED_MODULE_2___default())(_objectSpread(_objectSpread({}, mask), {}, {
1898
+ oncomplete: function oncomplete() {
1899
+ var _inputElement$current;
1900
+
1901
+ if (onChange) onChange((_inputElement$current = inputElement.current) === null || _inputElement$current === void 0 ? void 0 : _inputElement$current.value);
1902
+ if (mask !== null && mask !== void 0 && mask.oncomplete) mask.oncomplete();
1903
+ },
1904
+ oncleared: function oncleared() {
1905
+ if (onChange) onChange();
1906
+ if (mask !== null && mask !== void 0 && mask.oncleared) mask.oncleared();
1907
+ },
1908
+ onincomplete: function onincomplete() {
1909
+ var _inputElement$current2;
1910
+
1911
+ if (onChange) onChange((_inputElement$current2 = inputElement.current) === null || _inputElement$current2 === void 0 ? void 0 : _inputElement$current2.value);
1912
+ if (mask !== null && mask !== void 0 && mask.onincomplete) mask.onincomplete();
1913
+ }
1914
+ }));
1915
+ maskInstance.current.mask(inputElement.current);
1916
+ return function () {
1917
+ if (maskInstance.current) {
1918
+ d('Cleaning up input mask instance');
1919
+ maskInstance.current.remove();
1920
+ maskInstance.current = null;
1921
+ }
1922
+ };
1923
+ }, [mask]); // If we change the value prop we need to sync the DOM value to display the new value
1924
+
1925
+ (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(function () {
1926
+ var _inputElement$current3;
1927
+
1928
+ if (inputElement.current && ((_inputElement$current3 = inputElement.current) === null || _inputElement$current3 === void 0 ? void 0 : _inputElement$current3.value) !== value && value !== undefined) {
1929
+ d('Value is changing:', value);
1930
+ inputElement.current.value = value;
1931
+ onSet && onSet(value);
1932
+ }
1933
+ }, [value]);
1934
+ return inputElement;
1935
+ }
1936
+
1937
+ _s(useMaskedInput, "0UoGXAt/O9Xpg5c5EGf1oyTQlfo=", false, function () {
1938
+ return [(use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_4___default())];
1939
+ });
1940
+
1941
+ /***/ }),
1942
+
1943
+ /***/ "./inputs/PhoneInput/PhoneInput.tsx":
1944
+ /*!******************************************!*\
1945
+ !*** ./inputs/PhoneInput/PhoneInput.tsx ***!
1946
+ \******************************************/
1947
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1948
+
1949
+ __webpack_require__.r(__webpack_exports__);
1950
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1951
+ /* harmony export */ "PhoneInput": () => (/* binding */ PhoneInput)
1952
+ /* harmony export */ });
1953
+ /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty");
1954
+ /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
1955
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
1956
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__);
1957
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! debug */ "debug");
1958
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_2__);
1959
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "react");
1960
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
1961
+ /* harmony import */ var _MaskedInput__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../MaskedInput */ "./inputs/MaskedInput/index.ts");
1962
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
1963
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__);
1964
+
1965
+
1966
+ var _excluded = ["extension"];
1967
+ var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/inputs/PhoneInput/PhoneInput.tsx";
1968
+
1969
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
1970
+
1971
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
1972
+
1973
+
1974
+
1975
+
1976
+
1977
+ var d = debug__WEBPACK_IMPORTED_MODULE_2___default()('thx.controls.inputs.PhoneInput');
1978
+ function PhoneInput(props) {
1979
+ var extension = props.extension,
1980
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, _excluded);
1981
+
1982
+ var mask = {
1983
+ mask: extension ? '((999) 999-9999[ x9999])|(+9 (999) 999-9999[ x9999])' : '((999) 999-9999)|( +9 (999) 999-9999)',
1984
+ greedy: false,
1985
+ autoUnmask: true
1603
1986
  };
1604
1987
  return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)(_MaskedInput__WEBPACK_IMPORTED_MODULE_4__.MaskedInput, _objectSpread(_objectSpread({}, rest), {}, {
1605
1988
  mask: mask
1606
1989
  }), void 0, false, {
1607
1990
  fileName: _jsxFileName,
1608
- lineNumber: 19,
1991
+ lineNumber: 20,
1609
1992
  columnNumber: 9
1610
1993
  }, this);
1611
1994
  }
@@ -1656,6 +2039,7 @@ __webpack_require__.r(__webpack_exports__);
1656
2039
  /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__);
1657
2040
 
1658
2041
 
2042
+ var _excluded = ["children", "onChange", "value"];
1659
2043
  var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/inputs/RadioGroup/RadioGroup.tsx";
1660
2044
 
1661
2045
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
@@ -1671,7 +2055,7 @@ function RadioGroup(props) {
1671
2055
  var children = props.children,
1672
2056
  _onChange = props.onChange,
1673
2057
  value = props.value,
1674
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, ["children", "onChange", "value"]);
2058
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, _excluded);
1675
2059
 
1676
2060
  return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_4__.Form.Group, _objectSpread(_objectSpread({}, rest), {}, {
1677
2061
  children: react__WEBPACK_IMPORTED_MODULE_3__.Children.map(props.children, function (child) {
@@ -1923,11 +2307,14 @@ __webpack_require__.r(__webpack_exports__);
1923
2307
  /* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);
1924
2308
  /* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "@babel/runtime/helpers/getPrototypeOf");
1925
2309
  /* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);
1926
- /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! debug */ "debug");
1927
- /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_6__);
1928
- /* harmony import */ var eventemitter3__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! eventemitter3 */ "eventemitter3");
1929
- /* harmony import */ var eventemitter3__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(eventemitter3__WEBPACK_IMPORTED_MODULE_7__);
1930
- /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./enums */ "./inputs/Scriptel/scriptel/enums.ts");
2310
+ /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty");
2311
+ /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6__);
2312
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! debug */ "debug");
2313
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_7__);
2314
+ /* harmony import */ var eventemitter3__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! eventemitter3 */ "eventemitter3");
2315
+ /* harmony import */ var eventemitter3__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(eventemitter3__WEBPACK_IMPORTED_MODULE_8__);
2316
+ /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./enums */ "./inputs/Scriptel/scriptel/enums.ts");
2317
+
1931
2318
 
1932
2319
 
1933
2320
 
@@ -1943,7 +2330,7 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
1943
2330
 
1944
2331
 
1945
2332
 
1946
- var d = debug__WEBPACK_IMPORTED_MODULE_6___default()('thx.controls.inputs.Scriptel.scriptel');
2333
+ var d = debug__WEBPACK_IMPORTED_MODULE_7___default()('thx.controls.inputs.Scriptel.scriptel');
1947
2334
 
1948
2335
  function serverConnected(msg, socket) {
1949
2336
  d('Server connected');
@@ -1974,7 +2361,7 @@ function deviceConnected(msg, socket, args) {
1974
2361
  penStyle: penStyle ? {
1975
2362
  renderFunction: penStyle
1976
2363
  } : {
1977
- renderFunction: _enums__WEBPACK_IMPORTED_MODULE_8__.ScriptelPenStyle.Plain
2364
+ renderFunction: _enums__WEBPACK_IMPORTED_MODULE_9__.ScriptelPenStyle.Plain
1978
2365
  }
1979
2366
  }
1980
2367
  }));
@@ -1996,8 +2383,11 @@ var ScriptelSocket = /*#__PURE__*/function (_EventEmitter) {
1996
2383
  _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ScriptelSocket);
1997
2384
 
1998
2385
  _this = _super.call(this);
1999
- _this.socket = void 0;
2000
- _this.options = void 0;
2386
+
2387
+ _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2___default()(_this), "socket", void 0);
2388
+
2389
+ _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2___default()(_this), "options", void 0);
2390
+
2001
2391
  _this.options = args;
2002
2392
  _this.socket = new WebSocket(args.omniscriptUrl || 'ws://localhost:8080');
2003
2393
 
@@ -2014,36 +2404,36 @@ var ScriptelSocket = /*#__PURE__*/function (_EventEmitter) {
2014
2404
  if (!msg._class) return; // A message with no class.
2015
2405
 
2016
2406
  switch (msg._class) {
2017
- case _enums__WEBPACK_IMPORTED_MODULE_8__.ScriptelMessageClass.ConnectionOpen:
2407
+ case _enums__WEBPACK_IMPORTED_MODULE_9__.ScriptelMessageClass.ConnectionOpen:
2018
2408
  serverConnected(msg, _this.socket);
2019
2409
  break;
2020
2410
 
2021
- case _enums__WEBPACK_IMPORTED_MODULE_8__.ScriptelMessageClass.DeviceOpenResponse:
2411
+ case _enums__WEBPACK_IMPORTED_MODULE_9__.ScriptelMessageClass.DeviceOpenResponse:
2022
2412
  deviceConnected(msg, _this.socket, _this.options);
2023
2413
  break;
2024
2414
 
2025
- case _enums__WEBPACK_IMPORTED_MODULE_8__.ScriptelMessageClass.RenderedImage:
2415
+ case _enums__WEBPACK_IMPORTED_MODULE_9__.ScriptelMessageClass.RenderedImage:
2026
2416
  render(msg, _this.options, _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2___default()(_this));
2027
2417
  break;
2028
2418
 
2029
- case _enums__WEBPACK_IMPORTED_MODULE_8__.ScriptelMessageClass.ScriptelException:
2419
+ case _enums__WEBPACK_IMPORTED_MODULE_9__.ScriptelMessageClass.ScriptelException:
2030
2420
  d("Scriptel Exception Error: ".concat(msg.message));
2031
2421
  break;
2032
2422
 
2033
- case _enums__WEBPACK_IMPORTED_MODULE_8__.ScriptelMessageClass.ButtonPress:
2423
+ case _enums__WEBPACK_IMPORTED_MODULE_9__.ScriptelMessageClass.ButtonPress:
2034
2424
  if (msg.label === 'Cancel') _this.emit('cancel');
2035
2425
  break;
2036
2426
 
2037
- case _enums__WEBPACK_IMPORTED_MODULE_8__.ScriptelMessageClass.ButtonDown:
2427
+ case _enums__WEBPACK_IMPORTED_MODULE_9__.ScriptelMessageClass.ButtonDown:
2038
2428
  if (msg.label === 'OK') _this.emit('okButtonDown');
2039
2429
  break;
2040
2430
 
2041
- case _enums__WEBPACK_IMPORTED_MODULE_8__.ScriptelMessageClass.PenMove:
2431
+ case _enums__WEBPACK_IMPORTED_MODULE_9__.ScriptelMessageClass.PenMove:
2042
2432
  _this.emit('penMove');
2043
2433
 
2044
2434
  break;
2045
2435
 
2046
- case _enums__WEBPACK_IMPORTED_MODULE_8__.ScriptelMessageClass.PenUp:
2436
+ case _enums__WEBPACK_IMPORTED_MODULE_9__.ScriptelMessageClass.PenUp:
2047
2437
  _this.emit('penUp');
2048
2438
 
2049
2439
  break;
@@ -2071,7 +2461,7 @@ var ScriptelSocket = /*#__PURE__*/function (_EventEmitter) {
2071
2461
  }]);
2072
2462
 
2073
2463
  return ScriptelSocket;
2074
- }((eventemitter3__WEBPACK_IMPORTED_MODULE_7___default()));
2464
+ }((eventemitter3__WEBPACK_IMPORTED_MODULE_8___default()));
2075
2465
 
2076
2466
  /***/ }),
2077
2467
 
@@ -2329,12 +2719,15 @@ __webpack_require__.r(__webpack_exports__);
2329
2719
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
2330
2720
  /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! semantic-ui-react */ "semantic-ui-react");
2331
2721
  /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__);
2332
- /* harmony import */ var _MaskedInput__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../MaskedInput */ "./inputs/MaskedInput/index.ts");
2333
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
2334
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__);
2722
+ /* harmony import */ var social_insurance_number__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! social-insurance-number */ "social-insurance-number");
2723
+ /* harmony import */ var social_insurance_number__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(social_insurance_number__WEBPACK_IMPORTED_MODULE_6__);
2724
+ /* harmony import */ var _MaskedInput_useMaskedInput__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../MaskedInput/useMaskedInput */ "./inputs/MaskedInput/useMaskedInput.ts");
2725
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
2726
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__);
2335
2727
 
2336
2728
 
2337
2729
 
2730
+ var _excluded = ["value", "onChange"];
2338
2731
 
2339
2732
  var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/inputs/SinInput/SinInput.tsx",
2340
2733
  _s = $RefreshSig$();
@@ -2350,142 +2743,89 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
2350
2743
 
2351
2744
 
2352
2745
  var d = debug__WEBPACK_IMPORTED_MODULE_3___default()('thx.controls.inputs.SinInput');
2353
- // if we click edit the value is set to an empty string.
2354
- // if we click delete the value is set to an empty string.
2355
- // if we click cancel the value is set to undefined.
2356
- // if we change it we set it to the given string.
2357
2746
  function SinInput(props) {
2358
2747
  _s();
2359
2748
 
2360
- var hasSin = props.hasSin,
2749
+ var value = props.value,
2361
2750
  onChange = props.onChange,
2362
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default()(props, ["hasSin", "onChange"]);
2751
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default()(props, _excluded);
2363
2752
 
2364
- var _useState = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(false),
2753
+ var _useState = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)('black'),
2365
2754
  _useState2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_useState, 2),
2366
- edit = _useState2[0],
2367
- setEdit = _useState2[1];
2368
-
2369
- var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(false),
2370
- _useState4 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_useState3, 2),
2371
- doDelete = _useState4[0],
2372
- setDoDelete = _useState4[1];
2755
+ color = _useState2[0],
2756
+ setColor = _useState2[1];
2757
+
2758
+ var checkValidation = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function (valueArray) {
2759
+ var num = valueArray.join('').replaceAll(/(_|\s|-)/g, '');
2760
+ var validate = new (social_insurance_number__WEBPACK_IMPORTED_MODULE_6___default())(num);
2761
+
2762
+ if (num.length > 0) {
2763
+ if (validate.isValid()) {
2764
+ setColor('green');
2765
+ } else {
2766
+ setColor('red');
2767
+ }
2768
+ } else {
2769
+ setColor('black');
2770
+ }
2373
2771
 
2374
- function handleChange(val) {
2375
- onChange && onChange(val);
2376
- } // if we have a SIN and we don't want to edit
2772
+ return validate.isValid();
2773
+ }, []);
2774
+ var mask = (0,react__WEBPACK_IMPORTED_MODULE_4__.useMemo)(function () {
2775
+ return {
2776
+ mask: '999-999-999',
2777
+ isComplete: checkValidation,
2778
+ greedy: false,
2779
+ autoUnmask: true
2780
+ };
2781
+ }, [checkValidation]);
2782
+ var cardNumberRef = (0,_MaskedInput_useMaskedInput__WEBPACK_IMPORTED_MODULE_7__.useMaskedInput)({
2783
+ mask: mask,
2784
+ value: value,
2785
+ onChange: function (_onChange) {
2786
+ function onChange(_x) {
2787
+ return _onChange.apply(this, arguments);
2788
+ }
2377
2789
 
2790
+ onChange.toString = function () {
2791
+ return _onChange.toString();
2792
+ };
2378
2793
 
2379
- return hasSin && !edit && !doDelete ? /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.Fragment, {
2380
- children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Label, {
2381
- style: {
2382
- width: '100%',
2383
- height: '36px',
2384
- paddingTop: '10px'
2385
- },
2386
- size: "large",
2387
- color: "green",
2388
- children: "SIN is saved"
2389
- }, void 0, false, {
2390
- fileName: _jsxFileName,
2391
- lineNumber: 28,
2392
- columnNumber: 4
2393
- }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Popup, {
2394
- content: "edit",
2395
- trigger: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Button, {
2396
- type: "button",
2397
- onClick: function onClick() {
2398
- setEdit(true);
2399
- handleChange('');
2400
- },
2401
- color: "orange",
2402
- icon: true,
2403
- children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Icon, {
2404
- name: "edit"
2405
- }, void 0, false, {
2406
- fileName: _jsxFileName,
2407
- lineNumber: 43,
2408
- columnNumber: 7
2409
- }, this)
2410
- }, void 0, false, {
2411
- fileName: _jsxFileName,
2412
- lineNumber: 34,
2413
- columnNumber: 6
2414
- }, this)
2794
+ return onChange;
2795
+ }(function (v) {
2796
+ onChange && onChange(v);
2797
+ }),
2798
+ onSet: function onSet(v) {
2799
+ checkValidation([v || '']);
2800
+ }
2801
+ });
2802
+ return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Input, _objectSpread(_objectSpread({}, rest), {}, {
2803
+ icon: true,
2804
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)("input", {
2805
+ ref: cardNumberRef
2415
2806
  }, void 0, false, {
2416
2807
  fileName: _jsxFileName,
2417
- lineNumber: 31,
2808
+ lineNumber: 57,
2418
2809
  columnNumber: 4
2419
- }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Popup, {
2420
- content: "delete",
2421
- trigger: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Button, {
2422
- negative: true,
2423
- type: "button",
2424
- icon: true,
2425
- onClick: function onClick() {
2426
- setDoDelete(true);
2427
- handleChange('');
2428
- },
2429
- children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Icon, {
2430
- name: "trash alternate"
2431
- }, void 0, false, {
2432
- fileName: _jsxFileName,
2433
- lineNumber: 59,
2434
- columnNumber: 7
2435
- }, this)
2436
- }, void 0, false, {
2437
- fileName: _jsxFileName,
2438
- lineNumber: 50,
2439
- columnNumber: 6
2440
- }, this)
2810
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Icon, {
2811
+ name: "id badge",
2812
+ color: color,
2813
+ size: "large"
2441
2814
  }, void 0, false, {
2442
2815
  fileName: _jsxFileName,
2443
- lineNumber: 47,
2444
- columnNumber: 4
2445
- }, this)]
2446
- }, void 0, true) :
2447
- /*#__PURE__*/
2448
- // if we dont have a SIN
2449
- (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.Fragment, {
2450
- children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(_MaskedInput__WEBPACK_IMPORTED_MODULE_6__.MaskedInput, _objectSpread(_objectSpread({}, rest), {}, {
2451
- onChange: handleChange,
2452
- mask: {
2453
- mask: '999-999-999',
2454
- greedy: false,
2455
- autoUnmask: true
2456
- }
2457
- }), void 0, false, {
2458
- fileName: _jsxFileName,
2459
- lineNumber: 67,
2816
+ lineNumber: 58,
2460
2817
  columnNumber: 4
2461
- }, this), edit && /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Button, {
2462
- type: "button",
2463
- onClick: function onClick() {
2464
- setEdit(false);
2465
- handleChange(undefined);
2466
- },
2467
- children: "Cancel"
2468
- }, void 0, false, {
2469
- fileName: _jsxFileName,
2470
- lineNumber: 70,
2471
- columnNumber: 5
2472
- }, this), doDelete && /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Button, {
2473
- color: "orange",
2474
- type: "button",
2475
- onClick: function onClick() {
2476
- setDoDelete(false);
2477
- handleChange(undefined);
2478
- },
2479
- children: "Undo"
2480
- }, void 0, false, {
2481
- fileName: _jsxFileName,
2482
- lineNumber: 81,
2483
- columnNumber: 5
2484
2818
  }, this)]
2485
- }, void 0, true);
2819
+ }), void 0, true, {
2820
+ fileName: _jsxFileName,
2821
+ lineNumber: 56,
2822
+ columnNumber: 3
2823
+ }, this);
2486
2824
  }
2487
2825
 
2488
- _s(SinInput, "T3DPrOROZ3dfwPKAphxJoO7PrEk=");
2826
+ _s(SinInput, "jWyiZuExrAnOzUol/0RzfJlCPSI=", false, function () {
2827
+ return [_MaskedInput_useMaskedInput__WEBPACK_IMPORTED_MODULE_7__.useMaskedInput];
2828
+ });
2489
2829
 
2490
2830
  _c = SinInput;
2491
2831
 
@@ -2532,6 +2872,7 @@ __webpack_require__.r(__webpack_exports__);
2532
2872
  /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__);
2533
2873
 
2534
2874
 
2875
+ var _excluded = ["value", "onChange"];
2535
2876
  var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/inputs/TableInput/DropdownCell.tsx";
2536
2877
 
2537
2878
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
@@ -2550,7 +2891,7 @@ function DropdownCell(dropdownProps) {
2550
2891
 
2551
2892
  var v = dropdownProps.value,
2552
2893
  _onChange = dropdownProps.onChange,
2553
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(dropdownProps, ["value", "onChange"]);
2894
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(dropdownProps, _excluded);
2554
2895
 
2555
2896
  return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_3__.Dropdown, _objectSpread(_objectSpread({}, rest), {}, {
2556
2897
  value: value,
@@ -3191,23 +3532,27 @@ __webpack_require__.r(__webpack_exports__);
3191
3532
  /* harmony export */ });
3192
3533
  /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty");
3193
3534
  /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
3194
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
3195
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__);
3196
- /* harmony import */ var _thx_money__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @thx/money */ "@thx/money");
3197
- /* harmony import */ var _thx_money__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_thx_money__WEBPACK_IMPORTED_MODULE_2__);
3198
- /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! debug */ "debug");
3199
- /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_3__);
3200
- /* harmony import */ var js_money__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! js-money */ "js-money");
3201
- /* harmony import */ var js_money__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(js_money__WEBPACK_IMPORTED_MODULE_4__);
3202
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "react");
3203
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);
3204
- /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! semantic-ui-react */ "semantic-ui-react");
3205
- /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__);
3206
- /* harmony import */ var _useMoneyInput__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../useMoneyInput */ "./money/useMoneyInput.ts");
3207
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
3208
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__);
3535
+ /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "@babel/runtime/helpers/slicedToArray");
3536
+ /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__);
3537
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
3538
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__);
3539
+ /* harmony import */ var _thx_money__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @thx/money */ "@thx/money");
3540
+ /* harmony import */ var _thx_money__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_thx_money__WEBPACK_IMPORTED_MODULE_3__);
3541
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! debug */ "debug");
3542
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_4__);
3543
+ /* harmony import */ var js_money__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! js-money */ "js-money");
3544
+ /* harmony import */ var js_money__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(js_money__WEBPACK_IMPORTED_MODULE_5__);
3545
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "react");
3546
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
3547
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! semantic-ui-react */ "semantic-ui-react");
3548
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__);
3549
+ /* harmony import */ var _useMoneyInput__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../useMoneyInput */ "./money/useMoneyInput.ts");
3550
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
3551
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__);
3552
+
3209
3553
 
3210
3554
 
3555
+ var _excluded = ["name", "onBlur", "prefix", "defaultCurrency", "onChange", "showPrefix", "value", "wholeNumber", "currencies", "locked"];
3211
3556
 
3212
3557
  var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/money/MoneyCurrencyInput/MoneyCurrencyInput.tsx",
3213
3558
  _s = $RefreshSig$();
@@ -3225,7 +3570,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
3225
3570
 
3226
3571
 
3227
3572
 
3228
- var d = debug__WEBPACK_IMPORTED_MODULE_3___default()('thx.controls.money.MoneyCurrencyInput');
3573
+ var d = debug__WEBPACK_IMPORTED_MODULE_4___default()('thx.controls.money.MoneyCurrencyInput');
3229
3574
  function MoneyCurrencyInput(props) {
3230
3575
  _s();
3231
3576
 
@@ -3239,17 +3584,7 @@ function MoneyCurrencyInput(props) {
3239
3584
  wholeNumber = props.wholeNumber,
3240
3585
  currencies = props.currencies,
3241
3586
  locked = props.locked,
3242
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, ["name", "onBlur", "prefix", "defaultCurrency", "onChange", "showPrefix", "value", "wholeNumber", "currencies", "locked"]);
3243
-
3244
- var _useMoneyInput = (0,_useMoneyInput__WEBPACK_IMPORTED_MODULE_7__.useMoneyInput)({
3245
- defaultCurrency: defaultCurrency,
3246
- onChange: onChange,
3247
- prefix: prefix,
3248
- showPrefix: showPrefix,
3249
- value: value,
3250
- wholeNumber: wholeNumber
3251
- }),
3252
- inputElement = _useMoneyInput.inputElement;
3587
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default()(props, _excluded);
3253
3588
 
3254
3589
  var options = currencies || [{
3255
3590
  key: 'CAD',
@@ -3260,49 +3595,71 @@ function MoneyCurrencyInput(props) {
3260
3595
  text: 'USD',
3261
3596
  value: 'USD'
3262
3597
  }];
3598
+ var handleChange = (0,react__WEBPACK_IMPORTED_MODULE_6__.useCallback)(function (v) {
3599
+ if (!v) {
3600
+ onChange && onChange((0,_thx_money__WEBPACK_IMPORTED_MODULE_3__.toMoney)(0, defaultCurrency));
3601
+ } else {
3602
+ onChange && onChange(v);
3603
+ }
3604
+ }, [defaultCurrency, onChange]);
3605
+ var val = !(value instanceof (js_money__WEBPACK_IMPORTED_MODULE_5___default())) && value !== undefined ? (0,_thx_money__WEBPACK_IMPORTED_MODULE_3__.toMoney)(value) : value;
3263
3606
 
3264
- function handleDropdownChange(e, val) {
3265
- // @ts-ignore DONT DELETE THE ** IT IS AN OPERATOR MEANING POWER/EXPONENT
3266
- if (val.value && onChange) onChange((0,_thx_money__WEBPACK_IMPORTED_MODULE_2__.toMoney)(value.amount / Math.pow(10, (js_money__WEBPACK_IMPORTED_MODULE_4___default())[value.currency].decimal_digits), (js_money__WEBPACK_IMPORTED_MODULE_4___default())[val.value]));
3267
- }
3268
-
3269
- return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Input, _objectSpread(_objectSpread({}, rest), {}, {
3607
+ var _useMoneyInput = (0,_useMoneyInput__WEBPACK_IMPORTED_MODULE_8__.useMoneyInput)({
3608
+ onChange: handleChange,
3609
+ prefix: prefix,
3610
+ showPrefix: showPrefix,
3611
+ value: val,
3612
+ wholeNumber: wholeNumber
3613
+ }),
3614
+ _useMoneyInput2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_useMoneyInput, 1),
3615
+ inputElement = _useMoneyInput2[0];
3616
+
3617
+ var handleDropdownChange = (0,react__WEBPACK_IMPORTED_MODULE_6__.useCallback)(function (e, v) {
3618
+ var newCurrencyCode = v.value;
3619
+ var newMoney = new (js_money__WEBPACK_IMPORTED_MODULE_5___default())((value === null || value === void 0 ? void 0 : value.amount) || 0, newCurrencyCode);
3620
+ d('Change', value, newCurrencyCode, newMoney); // setInputValue(newMoney);
3621
+
3622
+ onChange && onChange(newMoney); // forceUpdate();
3623
+ }, [onChange, value]);
3624
+ var currencyCode = (value === null || value === void 0 ? void 0 : value.currency) || (defaultCurrency === null || defaultCurrency === void 0 ? void 0 : defaultCurrency.code) || 'CAD';
3625
+ d('Render', value, currencyCode);
3626
+ return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__.Input, _objectSpread(_objectSpread({}, rest), {}, {
3270
3627
  labelPosition: "right",
3271
- children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)("input", {
3628
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("input", {
3272
3629
  name: name,
3273
3630
  ref: inputElement,
3274
3631
  onBlur: onBlur,
3275
3632
  readOnly: locked
3276
3633
  }, void 0, false, {
3277
3634
  fileName: _jsxFileName,
3278
- lineNumber: 32,
3635
+ lineNumber: 57,
3279
3636
  columnNumber: 4
3280
- }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Label, {
3637
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__.Label, {
3281
3638
  basic: true,
3282
- children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Dropdown, {
3639
+ children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__.Dropdown, {
3283
3640
  disabled: locked,
3284
3641
  options: options,
3285
- value: (value === null || value === void 0 ? void 0 : value.currency) || (defaultCurrency === null || defaultCurrency === void 0 ? void 0 : defaultCurrency.code) || 'CAD',
3642
+ value: currencyCode,
3286
3643
  onChange: handleDropdownChange
3287
3644
  }, void 0, false, {
3288
3645
  fileName: _jsxFileName,
3289
- lineNumber: 34,
3646
+ lineNumber: 59,
3290
3647
  columnNumber: 5
3291
3648
  }, this)
3292
3649
  }, void 0, false, {
3293
3650
  fileName: _jsxFileName,
3294
- lineNumber: 33,
3651
+ lineNumber: 58,
3295
3652
  columnNumber: 4
3296
3653
  }, this)]
3297
3654
  }), void 0, true, {
3298
3655
  fileName: _jsxFileName,
3299
- lineNumber: 31,
3656
+ lineNumber: 56,
3300
3657
  columnNumber: 3
3301
3658
  }, this);
3302
3659
  }
3303
3660
 
3304
- _s(MoneyCurrencyInput, "o5MibMoRdtL3CaWuK+reyyue2HU=", false, function () {
3305
- return [_useMoneyInput__WEBPACK_IMPORTED_MODULE_7__.useMoneyInput];
3661
+ _s(MoneyCurrencyInput, "Fcek2bCp4hfSWAilxJqXOkS1juU=", false, function () {
3662
+ return [_useMoneyInput__WEBPACK_IMPORTED_MODULE_8__.useMoneyInput];
3306
3663
  });
3307
3664
 
3308
3665
  _c = MoneyCurrencyInput;
@@ -3340,19 +3697,27 @@ __webpack_require__.r(__webpack_exports__);
3340
3697
  /* harmony export */ });
3341
3698
  /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty");
3342
3699
  /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
3343
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
3344
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__);
3345
- /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! debug */ "debug");
3346
- /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_2__);
3347
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "react");
3348
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
3349
- /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! semantic-ui-react */ "semantic-ui-react");
3350
- /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(semantic_ui_react__WEBPACK_IMPORTED_MODULE_4__);
3351
- /* harmony import */ var _useMoneyInput__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../useMoneyInput */ "./money/useMoneyInput.ts");
3352
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
3353
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__);
3700
+ /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "@babel/runtime/helpers/slicedToArray");
3701
+ /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__);
3702
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
3703
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__);
3704
+ /* harmony import */ var _thx_money__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @thx/money */ "@thx/money");
3705
+ /* harmony import */ var _thx_money__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_thx_money__WEBPACK_IMPORTED_MODULE_3__);
3706
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! debug */ "debug");
3707
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_4__);
3708
+ /* harmony import */ var js_money__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! js-money */ "js-money");
3709
+ /* harmony import */ var js_money__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(js_money__WEBPACK_IMPORTED_MODULE_5__);
3710
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "react");
3711
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
3712
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! semantic-ui-react */ "semantic-ui-react");
3713
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__);
3714
+ /* harmony import */ var _useMoneyInput__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../useMoneyInput */ "./money/useMoneyInput.ts");
3715
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
3716
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__);
3717
+
3354
3718
 
3355
3719
 
3720
+ var _excluded = ["name", "onBlur", "locked", "prefix", "defaultCurrency", "onChange", "showPrefix", "value", "wholeNumber"];
3356
3721
 
3357
3722
  var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/money/MoneyInput/MoneyInput.tsx",
3358
3723
  _s = $RefreshSig$();
@@ -3361,13 +3726,16 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
3361
3726
 
3362
3727
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
3363
3728
 
3729
+
3364
3730
  /* eslint-disable jsx-a11y/no-static-element-interactions */
3365
3731
 
3366
3732
 
3367
3733
 
3368
3734
 
3369
3735
 
3370
- var d = debug__WEBPACK_IMPORTED_MODULE_2___default()('thx.controls.money.MoneyInput');
3736
+
3737
+
3738
+ var d = debug__WEBPACK_IMPORTED_MODULE_4___default()('thx.controls.money.MoneyInput');
3371
3739
  function MoneyInput(props) {
3372
3740
  _s();
3373
3741
 
@@ -3380,38 +3748,47 @@ function MoneyInput(props) {
3380
3748
  showPrefix = props.showPrefix,
3381
3749
  value = props.value,
3382
3750
  wholeNumber = props.wholeNumber,
3383
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, ["name", "onBlur", "locked", "prefix", "defaultCurrency", "onChange", "showPrefix", "value", "wholeNumber"]);
3751
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default()(props, _excluded);
3752
+
3753
+ var handleChange = (0,react__WEBPACK_IMPORTED_MODULE_6__.useCallback)(function (v) {
3754
+ if (!v) {
3755
+ onChange && onChange((0,_thx_money__WEBPACK_IMPORTED_MODULE_3__.toMoney)(0, defaultCurrency));
3756
+ } else {
3757
+ onChange && onChange(v);
3758
+ }
3759
+ }, [defaultCurrency, onChange]);
3760
+ var val = !(value instanceof (js_money__WEBPACK_IMPORTED_MODULE_5___default())) && value !== undefined ? (0,_thx_money__WEBPACK_IMPORTED_MODULE_3__.toMoney)(value) : value;
3384
3761
 
3385
- var _useMoneyInput = (0,_useMoneyInput__WEBPACK_IMPORTED_MODULE_5__.useMoneyInput)({
3386
- defaultCurrency: defaultCurrency,
3387
- onChange: onChange,
3762
+ var _useMoneyInput = (0,_useMoneyInput__WEBPACK_IMPORTED_MODULE_8__.useMoneyInput)({
3763
+ onChange: handleChange,
3388
3764
  prefix: prefix,
3389
3765
  showPrefix: showPrefix,
3390
- value: value,
3766
+ value: val,
3391
3767
  wholeNumber: wholeNumber
3392
3768
  }),
3393
- inputElement = _useMoneyInput.inputElement;
3769
+ _useMoneyInput2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_useMoneyInput, 1),
3770
+ inputElement = _useMoneyInput2[0];
3394
3771
 
3395
- return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_4__.Input, _objectSpread(_objectSpread({}, rest), {}, {
3396
- children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)("input", {
3772
+ return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__.Input, _objectSpread(_objectSpread({}, rest), {}, {
3773
+ children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("input", {
3397
3774
  name: name,
3398
3775
  ref: inputElement,
3399
3776
  onBlur: onBlur,
3400
3777
  readOnly: locked
3401
3778
  }, void 0, false, {
3402
3779
  fileName: _jsxFileName,
3403
- lineNumber: 29,
3780
+ lineNumber: 43,
3404
3781
  columnNumber: 4
3405
3782
  }, this)
3406
3783
  }), void 0, false, {
3407
3784
  fileName: _jsxFileName,
3408
- lineNumber: 28,
3785
+ lineNumber: 42,
3409
3786
  columnNumber: 3
3410
3787
  }, this);
3411
3788
  }
3412
3789
 
3413
- _s(MoneyInput, "o5MibMoRdtL3CaWuK+reyyue2HU=", false, function () {
3414
- return [_useMoneyInput__WEBPACK_IMPORTED_MODULE_5__.useMoneyInput];
3790
+ _s(MoneyInput, "rDHjOMB4aOZuIvLkNHsA4XLdOAc=", false, function () {
3791
+ return [_useMoneyInput__WEBPACK_IMPORTED_MODULE_8__.useMoneyInput];
3415
3792
  });
3416
3793
 
3417
3794
  _c = MoneyInput;
@@ -3470,40 +3847,48 @@ function useMoneyInput(props) {
3470
3847
 
3471
3848
  var value = props.value,
3472
3849
  onChange = props.onChange,
3473
- defaultCurrency = props.defaultCurrency,
3850
+ onSet = props.onSet,
3474
3851
  showPrefix = props.showPrefix,
3475
3852
  prefix = props.prefix,
3476
3853
  wholeNumber = props.wholeNumber;
3477
3854
  var inputElement = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);
3478
3855
  var maskInstance = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null); // set the adjCurrency
3856
+ // let adjCurrency = Money.CAD;
3857
+ // if (value?.currency && Money[value?.currency]) adjCurrency = Money[value?.currency];
3858
+ // if (defaultCurrency) adjCurrency = defaultCurrency;
3479
3859
 
3480
- var adjCurrency = (js_money__WEBPACK_IMPORTED_MODULE_3___default().CAD); // @ts-ignore
3481
-
3482
- if (value !== null && value !== void 0 && value.currency && (js_money__WEBPACK_IMPORTED_MODULE_3___default())[value === null || value === void 0 ? void 0 : value.currency]) adjCurrency = (js_money__WEBPACK_IMPORTED_MODULE_3___default())[value === null || value === void 0 ? void 0 : value.currency];
3483
- if (defaultCurrency) adjCurrency = defaultCurrency;
3860
+ var currencyCode = (value === null || value === void 0 ? void 0 : value.currency) || 'CAD';
3484
3861
  (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function () {
3485
3862
  if (!inputElement.current) throw new Error('Could not get input element');
3486
3863
  d('Creating input mask instance');
3487
3864
  maskInstance.current = new (inputmask__WEBPACK_IMPORTED_MODULE_2___default())({
3488
3865
  alias: 'numeric',
3489
3866
  groupSeparator: ',',
3490
- digits: wholeNumber ? '0' : _thx_money__WEBPACK_IMPORTED_MODULE_0__.Currencies[adjCurrency.code].decimal_digits.toString(),
3867
+ digits: wholeNumber ? '0' : (js_money__WEBPACK_IMPORTED_MODULE_3___default())[currencyCode].decimal_digits.toString(),
3491
3868
  digitsOptional: false,
3492
- prefix: showPrefix ? prefix || _thx_money__WEBPACK_IMPORTED_MODULE_0__.Currencies[adjCurrency.code].symbol : undefined,
3869
+ prefix: showPrefix ? prefix || (js_money__WEBPACK_IMPORTED_MODULE_3___default())[currencyCode].symbol : undefined,
3493
3870
  placeholder: '0',
3494
3871
  autoUnmask: true,
3495
3872
  oncomplete: function oncomplete() {
3496
- var _inputElement$current;
3873
+ if (onChange) {
3874
+ var _inputElement$current;
3497
3875
 
3498
- if (onChange) onChange((0,_thx_money__WEBPACK_IMPORTED_MODULE_0__.toMoney)((_inputElement$current = inputElement.current) === null || _inputElement$current === void 0 ? void 0 : _inputElement$current.value, adjCurrency));
3876
+ if ((_inputElement$current = inputElement.current) !== null && _inputElement$current !== void 0 && _inputElement$current.value) {
3877
+ var _inputElement$current2;
3878
+
3879
+ onChange((0,_thx_money__WEBPACK_IMPORTED_MODULE_0__.toMoney)((_inputElement$current2 = inputElement.current) === null || _inputElement$current2 === void 0 ? void 0 : _inputElement$current2.value, currencyCode));
3880
+ } else {
3881
+ onChange();
3882
+ }
3883
+ }
3499
3884
  },
3500
3885
  oncleared: function oncleared() {
3501
- if (onChange) onChange((0,_thx_money__WEBPACK_IMPORTED_MODULE_0__.toMoney)(0, adjCurrency));
3886
+ if (onChange) onChange();
3502
3887
  },
3503
3888
  onincomplete: function onincomplete() {
3504
- var _inputElement$current2;
3889
+ var _inputElement$current3;
3505
3890
 
3506
- if (onChange) onChange((0,_thx_money__WEBPACK_IMPORTED_MODULE_0__.toMoney)((_inputElement$current2 = inputElement.current) === null || _inputElement$current2 === void 0 ? void 0 : _inputElement$current2.value, adjCurrency));
3891
+ if (onChange) onChange((0,_thx_money__WEBPACK_IMPORTED_MODULE_0__.toMoney)((_inputElement$current3 = inputElement.current) === null || _inputElement$current3 === void 0 ? void 0 : _inputElement$current3.value, currencyCode));
3507
3892
  }
3508
3893
  });
3509
3894
  maskInstance.current.mask(inputElement.current);
@@ -3514,35 +3899,36 @@ function useMoneyInput(props) {
3514
3899
  maskInstance.current = null;
3515
3900
  }
3516
3901
  };
3517
- }, [adjCurrency, prefix, wholeNumber]); // If we change the value prop we need to sync the DOM value to display the new value
3902
+ }, [currencyCode, prefix, showPrefix, wholeNumber]);
3903
+ var setVal = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function (v) {
3904
+ if (inputElement.current) {
3905
+ d('Value is being set:', v);
3906
+
3907
+ if (v) {
3908
+ inputElement.current.value = v.toDecimal().toString();
3909
+ } else {
3910
+ inputElement.current.value = '';
3911
+ }
3912
+
3913
+ onSet && onSet(v);
3914
+ }
3915
+ }, [onSet]); // If we change the value prop we need to sync the DOM value to display the new value
3518
3916
 
3519
3917
  (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function () {
3520
- var _inputElement$current3;
3918
+ var _inputElement$current4;
3521
3919
 
3522
- var inputValue = (0,_thx_money__WEBPACK_IMPORTED_MODULE_0__.toMoney)((_inputElement$current3 = inputElement.current) === null || _inputElement$current3 === void 0 ? void 0 : _inputElement$current3.value, adjCurrency);
3920
+ var whatCurrentlyIsDisplayed = ((_inputElement$current4 = inputElement.current) === null || _inputElement$current4 === void 0 ? void 0 : _inputElement$current4.value) || ''; // string | undef
3523
3921
 
3524
- if ((value === undefined || value === null) && inputElement.current) {
3525
- inputElement.current.value = '';
3526
- } else if (value instanceof (js_money__WEBPACK_IMPORTED_MODULE_3___default()) && inputElement.current) {
3527
- if (!inputValue.equals(value)) {
3528
- inputElement.current.value = value.toString();
3529
- }
3530
- } else if ((0,_thx_money__WEBPACK_IMPORTED_MODULE_0__.isMoneyObject)(value) && inputElement.current) {
3531
- var valueInMoney = (0,_thx_money__WEBPACK_IMPORTED_MODULE_0__.toMoney)(value);
3922
+ var whatWeAreSetting = value ? value.toString() : ''; // money | undef
3532
3923
 
3533
- if (!inputValue.equals(valueInMoney)) {
3534
- inputElement.current.value = valueInMoney.toString();
3535
- }
3536
- } else {
3537
- throw new Error("Value must be a Money instance or IMoneyObject: ".concat(value, " (").concat(typeof value));
3924
+ if (whatCurrentlyIsDisplayed !== whatWeAreSetting) {
3925
+ setVal(value);
3538
3926
  }
3539
- }, [value, adjCurrency]);
3540
- return {
3541
- inputElement: inputElement
3542
- };
3927
+ }, [setVal, value]);
3928
+ return [inputElement, setVal];
3543
3929
  }
3544
3930
 
3545
- _s(useMoneyInput, "4zjMqMsuhet8LETBdEHvzzd7ki8=");
3931
+ _s(useMoneyInput, "56k+EB9kpodjnKmpNNvxiCUDcZg=");
3546
3932
 
3547
3933
  /***/ }),
3548
3934
 
@@ -4001,20 +4387,99 @@ __webpack_require__.r(__webpack_exports__);
4001
4387
  /* harmony export */ });
4002
4388
  /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
4003
4389
  /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
4004
- /* harmony import */ var _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_2_use_2_styles_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[2]!./styles.css */ "../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[2]!./date/DatePicker/styles.css");
4390
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "../node_modules/style-loader/dist/runtime/styleDomAPI.js");
4391
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
4392
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "../node_modules/style-loader/dist/runtime/insertBySelector.js");
4393
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
4394
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
4395
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
4396
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "../node_modules/style-loader/dist/runtime/insertStyleElement.js");
4397
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
4398
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "../node_modules/style-loader/dist/runtime/styleTagTransform.js");
4399
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
4400
+ /* harmony import */ var _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_2_use_2_styles_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[2]!./styles.css */ "../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[2]!./date/DatePicker/styles.css");
4401
+
4402
+
4403
+
4404
+
4405
+
4406
+
4407
+
4408
+
4409
+
4410
+
4411
+
4412
+ var options = {};
4413
+
4414
+ options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
4415
+ options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
4416
+
4417
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
4418
+
4419
+ options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
4420
+ options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
4421
+
4422
+ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_2_use_2_styles_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
4423
+
4424
+
4425
+
4426
+
4427
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_2_use_2_styles_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_2_use_2_styles_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_2_use_2_styles_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
4005
4428
 
4006
-
4429
+
4430
+ /***/ }),
4431
+
4432
+ /***/ "./inputs/CreditCardInput/styles.css":
4433
+ /*!*******************************************!*\
4434
+ !*** ./inputs/CreditCardInput/styles.css ***!
4435
+ \*******************************************/
4436
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4437
+
4438
+ __webpack_require__.r(__webpack_exports__);
4439
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
4440
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
4441
+ /* harmony export */ });
4442
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
4443
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
4444
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "../node_modules/style-loader/dist/runtime/styleDomAPI.js");
4445
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
4446
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "../node_modules/style-loader/dist/runtime/insertBySelector.js");
4447
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
4448
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
4449
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
4450
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "../node_modules/style-loader/dist/runtime/insertStyleElement.js");
4451
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
4452
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "../node_modules/style-loader/dist/runtime/styleTagTransform.js");
4453
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
4454
+ /* harmony import */ var _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_2_use_2_styles_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[2]!./styles.css */ "../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[2]!./inputs/CreditCardInput/styles.css");
4455
+
4456
+
4457
+
4458
+
4459
+
4460
+
4461
+
4462
+
4463
+
4464
+
4007
4465
 
4008
4466
  var options = {};
4009
4467
 
4010
- options.insert = "head";
4011
- options.singleton = false;
4468
+ options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
4469
+ options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
4470
+
4471
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
4472
+
4473
+ options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
4474
+ options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
4475
+
4476
+ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_2_use_2_styles_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
4012
4477
 
4013
- var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_2_use_2_styles_css__WEBPACK_IMPORTED_MODULE_1__.default, options);
4014
4478
 
4015
4479
 
4016
4480
 
4017
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_2_use_2_styles_css__WEBPACK_IMPORTED_MODULE_1__.default.locals || {});
4481
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_2_use_2_styles_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_2_use_2_styles_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_2_use_2_styles_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
4482
+
4018
4483
 
4019
4484
  /***/ }),
4020
4485
 
@@ -4028,17 +4493,45 @@ __webpack_require__.r(__webpack_exports__);
4028
4493
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
4029
4494
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
4030
4495
  /* harmony export */ });
4031
- /* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js */ "../node_modules/css-loader/dist/runtime/cssWithMappingToString.js");
4032
- /* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__);
4496
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../node_modules/css-loader/dist/runtime/sourceMaps.js");
4497
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
4033
4498
  /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "../node_modules/css-loader/dist/runtime/api.js");
4034
4499
  /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
4035
4500
  // Imports
4036
4501
 
4037
4502
 
4038
- var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default()));
4503
+ var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
4039
4504
  // Module
4040
4505
  ___CSS_LOADER_EXPORT___.push([module.id, ".rw-datetimepicker > input {\n\tborder: none !important;\n}\n\n.rw-datetimepicker .rw-calendar-grid.rw-nav-view .rw-btn {\n\tpadding: 0 !important;\n}\n\n.dateTimePickerAutoWidth {\n\twidth: auto;\n\tdisplay: inline-flex;\n}\n\n.dateTimePickerAutoWidth > input {\n\twidth: auto;\n}\n\n.react-datepicker-wrapper {\n\twidth: 100%;\n\tdisplay: inline !important;\n}\n\n.react-datepicker__input-container {\n\tdisplay: inline !important;\n}\n\n.react-datepicker-popper {\n\tz-index: 5 !important;\n}\n", "",{"version":3,"sources":["webpack://./date/DatePicker/styles.css"],"names":[],"mappings":"AAAA;CACC,uBAAuB;AACxB;;AAEA;CACC,qBAAqB;AACtB;;AAEA;CACC,WAAW;CACX,oBAAoB;AACrB;;AAEA;CACC,WAAW;AACZ;;AAEA;CACC,WAAW;CACX,0BAA0B;AAC3B;;AAEA;CACC,0BAA0B;AAC3B;;AAEA;CACC,qBAAqB;AACtB","sourcesContent":[":global(.rw-datetimepicker) > input {\n\tborder: none !important;\n}\n\n:global(.rw-datetimepicker) :global(.rw-calendar-grid.rw-nav-view) :global(.rw-btn) {\n\tpadding: 0 !important;\n}\n\n:global(.dateTimePickerAutoWidth) {\n\twidth: auto;\n\tdisplay: inline-flex;\n}\n\n:global(.dateTimePickerAutoWidth) > input {\n\twidth: auto;\n}\n\n:global(.react-datepicker-wrapper) {\n\twidth: 100%;\n\tdisplay: inline !important;\n}\n\n:global(.react-datepicker__input-container) {\n\tdisplay: inline !important;\n}\n\n:global(.react-datepicker-popper) {\n\tz-index: 5 !important;\n}\n"],"sourceRoot":""}]);
4041
4506
  // Exports
4507
+ ___CSS_LOADER_EXPORT___.locals = {};
4508
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
4509
+
4510
+
4511
+ /***/ }),
4512
+
4513
+ /***/ "../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[2]!./inputs/CreditCardInput/styles.css":
4514
+ /*!**************************************************************************************************************!*\
4515
+ !*** ../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[2]!./inputs/CreditCardInput/styles.css ***!
4516
+ \**************************************************************************************************************/
4517
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
4518
+
4519
+ __webpack_require__.r(__webpack_exports__);
4520
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
4521
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
4522
+ /* harmony export */ });
4523
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../node_modules/css-loader/dist/runtime/sourceMaps.js");
4524
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
4525
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "../node_modules/css-loader/dist/runtime/api.js");
4526
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
4527
+ // Imports
4528
+
4529
+
4530
+ var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
4531
+ // Module
4532
+ ___CSS_LOADER_EXPORT___.push([module.id, ".rccs {\n\tmargin: 0 !important;\n}\n", "",{"version":3,"sources":["webpack://./inputs/CreditCardInput/styles.css"],"names":[],"mappings":"AAAA;CACC,oBAAoB;AACrB","sourcesContent":[":global .rccs {\n\tmargin: 0 !important;\n}\n"],"sourceRoot":""}]);
4533
+ // Exports
4534
+ ___CSS_LOADER_EXPORT___.locals = {};
4042
4535
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
4043
4536
 
4044
4537
 
@@ -4056,37 +4549,55 @@ ___CSS_LOADER_EXPORT___.push([module.id, ".rw-datetimepicker > input {\n\tborder
4056
4549
  MIT License http://www.opensource.org/licenses/mit-license.php
4057
4550
  Author Tobias Koppers @sokra
4058
4551
  */
4059
- // css base code, injected by the css-loader
4060
- // eslint-disable-next-line func-names
4061
4552
  module.exports = function (cssWithMappingToString) {
4062
4553
  var list = []; // return the list of modules as css string
4063
4554
 
4064
4555
  list.toString = function toString() {
4065
4556
  return this.map(function (item) {
4066
- var content = cssWithMappingToString(item);
4557
+ var content = "";
4558
+ var needLayer = typeof item[5] !== "undefined";
4559
+
4560
+ if (item[4]) {
4561
+ content += "@supports (".concat(item[4], ") {");
4562
+ }
4067
4563
 
4068
4564
  if (item[2]) {
4069
- return "@media ".concat(item[2], " {").concat(content, "}");
4565
+ content += "@media ".concat(item[2], " {");
4566
+ }
4567
+
4568
+ if (needLayer) {
4569
+ content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");
4570
+ }
4571
+
4572
+ content += cssWithMappingToString(item);
4573
+
4574
+ if (needLayer) {
4575
+ content += "}";
4576
+ }
4577
+
4578
+ if (item[2]) {
4579
+ content += "}";
4580
+ }
4581
+
4582
+ if (item[4]) {
4583
+ content += "}";
4070
4584
  }
4071
4585
 
4072
4586
  return content;
4073
4587
  }).join("");
4074
4588
  }; // import a list of modules into the list
4075
- // eslint-disable-next-line func-names
4076
4589
 
4077
4590
 
4078
- list.i = function (modules, mediaQuery, dedupe) {
4591
+ list.i = function i(modules, media, dedupe, supports, layer) {
4079
4592
  if (typeof modules === "string") {
4080
- // eslint-disable-next-line no-param-reassign
4081
- modules = [[null, modules, ""]];
4593
+ modules = [[null, modules, undefined]];
4082
4594
  }
4083
4595
 
4084
4596
  var alreadyImportedModules = {};
4085
4597
 
4086
4598
  if (dedupe) {
4087
- for (var i = 0; i < this.length; i++) {
4088
- // eslint-disable-next-line prefer-destructuring
4089
- var id = this[i][0];
4599
+ for (var _i = 0; _i < this.length; _i++) {
4600
+ var id = this[_i][0];
4090
4601
 
4091
4602
  if (id != null) {
4092
4603
  alreadyImportedModules[id] = true;
@@ -4094,19 +4605,37 @@ module.exports = function (cssWithMappingToString) {
4094
4605
  }
4095
4606
  }
4096
4607
 
4097
- for (var _i = 0; _i < modules.length; _i++) {
4098
- var item = [].concat(modules[_i]);
4608
+ for (var _i2 = 0; _i2 < modules.length; _i2++) {
4609
+ var item = [].concat(modules[_i2]);
4099
4610
 
4100
4611
  if (dedupe && alreadyImportedModules[item[0]]) {
4101
- // eslint-disable-next-line no-continue
4102
4612
  continue;
4103
4613
  }
4104
4614
 
4105
- if (mediaQuery) {
4615
+ if (typeof layer !== "undefined") {
4616
+ if (typeof item[5] === "undefined") {
4617
+ item[5] = layer;
4618
+ } else {
4619
+ item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");
4620
+ item[5] = layer;
4621
+ }
4622
+ }
4623
+
4624
+ if (media) {
4106
4625
  if (!item[2]) {
4107
- item[2] = mediaQuery;
4626
+ item[2] = media;
4108
4627
  } else {
4109
- item[2] = "".concat(mediaQuery, " and ").concat(item[2]);
4628
+ item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");
4629
+ item[2] = media;
4630
+ }
4631
+ }
4632
+
4633
+ if (supports) {
4634
+ if (!item[4]) {
4635
+ item[4] = "".concat(supports);
4636
+ } else {
4637
+ item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");
4638
+ item[4] = supports;
4110
4639
  }
4111
4640
  }
4112
4641
 
@@ -4119,33 +4648,23 @@ module.exports = function (cssWithMappingToString) {
4119
4648
 
4120
4649
  /***/ }),
4121
4650
 
4122
- /***/ "../node_modules/css-loader/dist/runtime/cssWithMappingToString.js":
4123
- /*!*************************************************************************!*\
4124
- !*** ../node_modules/css-loader/dist/runtime/cssWithMappingToString.js ***!
4125
- \*************************************************************************/
4651
+ /***/ "../node_modules/css-loader/dist/runtime/sourceMaps.js":
4652
+ /*!*************************************************************!*\
4653
+ !*** ../node_modules/css-loader/dist/runtime/sourceMaps.js ***!
4654
+ \*************************************************************/
4126
4655
  /***/ ((module) => {
4127
4656
 
4128
4657
 
4129
4658
 
4130
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4131
-
4132
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4133
-
4134
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4135
-
4136
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
4659
+ module.exports = function (item) {
4660
+ var content = item[1];
4661
+ var cssMapping = item[3];
4137
4662
 
4138
- function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
4139
-
4140
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
4141
-
4142
- module.exports = function cssWithMappingToString(item) {
4143
- var _item = _slicedToArray(item, 4),
4144
- content = _item[1],
4145
- cssMapping = _item[3];
4663
+ if (!cssMapping) {
4664
+ return content;
4665
+ }
4146
4666
 
4147
4667
  if (typeof btoa === "function") {
4148
- // eslint-disable-next-line no-undef
4149
4668
  var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));
4150
4669
  var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);
4151
4670
  var sourceMapping = "/*# ".concat(data, " */");
@@ -4164,57 +4683,17 @@ module.exports = function cssWithMappingToString(item) {
4164
4683
  /*!*****************************************************************************!*\
4165
4684
  !*** ../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
4166
4685
  \*****************************************************************************/
4167
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4168
-
4169
-
4170
-
4171
- var isOldIE = function isOldIE() {
4172
- var memo;
4173
- return function memorize() {
4174
- if (typeof memo === 'undefined') {
4175
- // Test for IE <= 9 as proposed by Browserhacks
4176
- // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
4177
- // Tests for existence of standard globals is to allow style-loader
4178
- // to operate correctly into non-standard environments
4179
- // @see https://github.com/webpack-contrib/style-loader/issues/177
4180
- memo = Boolean(window && document && document.all && !window.atob);
4181
- }
4182
-
4183
- return memo;
4184
- };
4185
- }();
4186
-
4187
- var getTarget = function getTarget() {
4188
- var memo = {};
4189
- return function memorize(target) {
4190
- if (typeof memo[target] === 'undefined') {
4191
- var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself
4192
-
4193
- if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
4194
- try {
4195
- // This will throw an exception if access to iframe is blocked
4196
- // due to cross-origin restrictions
4197
- styleTarget = styleTarget.contentDocument.head;
4198
- } catch (e) {
4199
- // istanbul ignore next
4200
- styleTarget = null;
4201
- }
4202
- }
4686
+ /***/ ((module) => {
4203
4687
 
4204
- memo[target] = styleTarget;
4205
- }
4206
4688
 
4207
- return memo[target];
4208
- };
4209
- }();
4210
4689
 
4211
- var stylesInDom = [];
4690
+ var stylesInDOM = [];
4212
4691
 
4213
4692
  function getIndexByIdentifier(identifier) {
4214
4693
  var result = -1;
4215
4694
 
4216
- for (var i = 0; i < stylesInDom.length; i++) {
4217
- if (stylesInDom[i].identifier === identifier) {
4695
+ for (var i = 0; i < stylesInDOM.length; i++) {
4696
+ if (stylesInDOM[i].identifier === identifier) {
4218
4697
  result = i;
4219
4698
  break;
4220
4699
  }
@@ -4233,20 +4712,24 @@ function modulesToDom(list, options) {
4233
4712
  var count = idCountMap[id] || 0;
4234
4713
  var identifier = "".concat(id, " ").concat(count);
4235
4714
  idCountMap[id] = count + 1;
4236
- var index = getIndexByIdentifier(identifier);
4715
+ var indexByIdentifier = getIndexByIdentifier(identifier);
4237
4716
  var obj = {
4238
4717
  css: item[1],
4239
4718
  media: item[2],
4240
- sourceMap: item[3]
4719
+ sourceMap: item[3],
4720
+ supports: item[4],
4721
+ layer: item[5]
4241
4722
  };
4242
4723
 
4243
- if (index !== -1) {
4244
- stylesInDom[index].references++;
4245
- stylesInDom[index].updater(obj);
4724
+ if (indexByIdentifier !== -1) {
4725
+ stylesInDOM[indexByIdentifier].references++;
4726
+ stylesInDOM[indexByIdentifier].updater(obj);
4246
4727
  } else {
4247
- stylesInDom.push({
4728
+ var updater = addElementStyle(obj, options);
4729
+ options.byIndex = i;
4730
+ stylesInDOM.splice(i, 0, {
4248
4731
  identifier: identifier,
4249
- updater: addStyle(obj, options),
4732
+ updater: updater,
4250
4733
  references: 1
4251
4734
  });
4252
4735
  }
@@ -4257,184 +4740,248 @@ function modulesToDom(list, options) {
4257
4740
  return identifiers;
4258
4741
  }
4259
4742
 
4260
- function insertStyleElement(options) {
4261
- var style = document.createElement('style');
4262
- var attributes = options.attributes || {};
4743
+ function addElementStyle(obj, options) {
4744
+ var api = options.domAPI(options);
4745
+ api.update(obj);
4263
4746
 
4264
- if (typeof attributes.nonce === 'undefined') {
4265
- var nonce = true ? __webpack_require__.nc : 0;
4747
+ var updater = function updater(newObj) {
4748
+ if (newObj) {
4749
+ if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {
4750
+ return;
4751
+ }
4266
4752
 
4267
- if (nonce) {
4268
- attributes.nonce = nonce;
4753
+ api.update(obj = newObj);
4754
+ } else {
4755
+ api.remove();
4269
4756
  }
4270
- }
4757
+ };
4271
4758
 
4272
- Object.keys(attributes).forEach(function (key) {
4273
- style.setAttribute(key, attributes[key]);
4274
- });
4759
+ return updater;
4760
+ }
4761
+
4762
+ module.exports = function (list, options) {
4763
+ options = options || {};
4764
+ list = list || [];
4765
+ var lastIdentifiers = modulesToDom(list, options);
4766
+ return function update(newList) {
4767
+ newList = newList || [];
4768
+
4769
+ for (var i = 0; i < lastIdentifiers.length; i++) {
4770
+ var identifier = lastIdentifiers[i];
4771
+ var index = getIndexByIdentifier(identifier);
4772
+ stylesInDOM[index].references--;
4773
+ }
4774
+
4775
+ var newLastIdentifiers = modulesToDom(newList, options);
4776
+
4777
+ for (var _i = 0; _i < lastIdentifiers.length; _i++) {
4778
+ var _identifier = lastIdentifiers[_i];
4779
+
4780
+ var _index = getIndexByIdentifier(_identifier);
4781
+
4782
+ if (stylesInDOM[_index].references === 0) {
4783
+ stylesInDOM[_index].updater();
4784
+
4785
+ stylesInDOM.splice(_index, 1);
4786
+ }
4787
+ }
4788
+
4789
+ lastIdentifiers = newLastIdentifiers;
4790
+ };
4791
+ };
4792
+
4793
+ /***/ }),
4794
+
4795
+ /***/ "../node_modules/style-loader/dist/runtime/insertBySelector.js":
4796
+ /*!*********************************************************************!*\
4797
+ !*** ../node_modules/style-loader/dist/runtime/insertBySelector.js ***!
4798
+ \*********************************************************************/
4799
+ /***/ ((module) => {
4275
4800
 
4276
- if (typeof options.insert === 'function') {
4277
- options.insert(style);
4278
- } else {
4279
- var target = getTarget(options.insert || 'head');
4280
4801
 
4281
- if (!target) {
4282
- throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
4802
+
4803
+ var memo = {};
4804
+ /* istanbul ignore next */
4805
+
4806
+ function getTarget(target) {
4807
+ if (typeof memo[target] === "undefined") {
4808
+ var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself
4809
+
4810
+ if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
4811
+ try {
4812
+ // This will throw an exception if access to iframe is blocked
4813
+ // due to cross-origin restrictions
4814
+ styleTarget = styleTarget.contentDocument.head;
4815
+ } catch (e) {
4816
+ // istanbul ignore next
4817
+ styleTarget = null;
4818
+ }
4283
4819
  }
4284
4820
 
4285
- target.appendChild(style);
4821
+ memo[target] = styleTarget;
4286
4822
  }
4287
4823
 
4288
- return style;
4824
+ return memo[target];
4289
4825
  }
4826
+ /* istanbul ignore next */
4290
4827
 
4291
- function removeStyleElement(style) {
4292
- // istanbul ignore if
4293
- if (style.parentNode === null) {
4294
- return false;
4828
+
4829
+ function insertBySelector(insert, style) {
4830
+ var target = getTarget(insert);
4831
+
4832
+ if (!target) {
4833
+ throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
4295
4834
  }
4296
4835
 
4297
- style.parentNode.removeChild(style);
4836
+ target.appendChild(style);
4298
4837
  }
4838
+
4839
+ module.exports = insertBySelector;
4840
+
4841
+ /***/ }),
4842
+
4843
+ /***/ "../node_modules/style-loader/dist/runtime/insertStyleElement.js":
4844
+ /*!***********************************************************************!*\
4845
+ !*** ../node_modules/style-loader/dist/runtime/insertStyleElement.js ***!
4846
+ \***********************************************************************/
4847
+ /***/ ((module) => {
4848
+
4849
+
4850
+
4299
4851
  /* istanbul ignore next */
4852
+ function insertStyleElement(options) {
4853
+ var element = document.createElement("style");
4854
+ options.setAttributes(element, options.attributes);
4855
+ options.insert(element, options.options);
4856
+ return element;
4857
+ }
4300
4858
 
4859
+ module.exports = insertStyleElement;
4301
4860
 
4302
- var replaceText = function replaceText() {
4303
- var textStore = [];
4304
- return function replace(index, replacement) {
4305
- textStore[index] = replacement;
4306
- return textStore.filter(Boolean).join('\n');
4307
- };
4308
- }();
4861
+ /***/ }),
4309
4862
 
4310
- function applyToSingletonTag(style, index, remove, obj) {
4311
- var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE
4863
+ /***/ "../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js":
4864
+ /*!***********************************************************************************!*\
4865
+ !*** ../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***!
4866
+ \***********************************************************************************/
4867
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4312
4868
 
4313
- /* istanbul ignore if */
4314
4869
 
4315
- if (style.styleSheet) {
4316
- style.styleSheet.cssText = replaceText(index, css);
4317
- } else {
4318
- var cssNode = document.createTextNode(css);
4319
- var childNodes = style.childNodes;
4320
4870
 
4321
- if (childNodes[index]) {
4322
- style.removeChild(childNodes[index]);
4323
- }
4871
+ /* istanbul ignore next */
4872
+ function setAttributesWithoutAttributes(styleElement) {
4873
+ var nonce = true ? __webpack_require__.nc : 0;
4324
4874
 
4325
- if (childNodes.length) {
4326
- style.insertBefore(cssNode, childNodes[index]);
4327
- } else {
4328
- style.appendChild(cssNode);
4329
- }
4875
+ if (nonce) {
4876
+ styleElement.setAttribute("nonce", nonce);
4330
4877
  }
4331
4878
  }
4332
4879
 
4333
- function applyToTag(style, options, obj) {
4334
- var css = obj.css;
4335
- var media = obj.media;
4336
- var sourceMap = obj.sourceMap;
4880
+ module.exports = setAttributesWithoutAttributes;
4337
4881
 
4338
- if (media) {
4339
- style.setAttribute('media', media);
4340
- } else {
4341
- style.removeAttribute('media');
4342
- }
4882
+ /***/ }),
4343
4883
 
4344
- if (sourceMap && typeof btoa !== 'undefined') {
4345
- css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
4346
- } // For old IE
4884
+ /***/ "../node_modules/style-loader/dist/runtime/styleDomAPI.js":
4885
+ /*!****************************************************************!*\
4886
+ !*** ../node_modules/style-loader/dist/runtime/styleDomAPI.js ***!
4887
+ \****************************************************************/
4888
+ /***/ ((module) => {
4347
4889
 
4348
- /* istanbul ignore if */
4349
4890
 
4350
4891
 
4351
- if (style.styleSheet) {
4352
- style.styleSheet.cssText = css;
4353
- } else {
4354
- while (style.firstChild) {
4355
- style.removeChild(style.firstChild);
4356
- }
4892
+ /* istanbul ignore next */
4893
+ function apply(styleElement, options, obj) {
4894
+ var css = "";
4357
4895
 
4358
- style.appendChild(document.createTextNode(css));
4896
+ if (obj.supports) {
4897
+ css += "@supports (".concat(obj.supports, ") {");
4898
+ }
4899
+
4900
+ if (obj.media) {
4901
+ css += "@media ".concat(obj.media, " {");
4359
4902
  }
4360
- }
4361
4903
 
4362
- var singleton = null;
4363
- var singletonCounter = 0;
4904
+ var needLayer = typeof obj.layer !== "undefined";
4364
4905
 
4365
- function addStyle(obj, options) {
4366
- var style;
4367
- var update;
4368
- var remove;
4906
+ if (needLayer) {
4907
+ css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");
4908
+ }
4369
4909
 
4370
- if (options.singleton) {
4371
- var styleIndex = singletonCounter++;
4372
- style = singleton || (singleton = insertStyleElement(options));
4373
- update = applyToSingletonTag.bind(null, style, styleIndex, false);
4374
- remove = applyToSingletonTag.bind(null, style, styleIndex, true);
4375
- } else {
4376
- style = insertStyleElement(options);
4377
- update = applyToTag.bind(null, style, options);
4910
+ css += obj.css;
4378
4911
 
4379
- remove = function remove() {
4380
- removeStyleElement(style);
4381
- };
4912
+ if (needLayer) {
4913
+ css += "}";
4382
4914
  }
4383
4915
 
4384
- update(obj);
4385
- return function updateStyle(newObj) {
4386
- if (newObj) {
4387
- if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {
4388
- return;
4389
- }
4916
+ if (obj.media) {
4917
+ css += "}";
4918
+ }
4390
4919
 
4391
- update(obj = newObj);
4392
- } else {
4393
- remove();
4394
- }
4395
- };
4396
- }
4920
+ if (obj.supports) {
4921
+ css += "}";
4922
+ }
4397
4923
 
4398
- module.exports = function (list, options) {
4399
- options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
4400
- // tags it will allow on a page
4924
+ var sourceMap = obj.sourceMap;
4401
4925
 
4402
- if (!options.singleton && typeof options.singleton !== 'boolean') {
4403
- options.singleton = isOldIE();
4926
+ if (sourceMap && typeof btoa !== "undefined") {
4927
+ css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
4928
+ } // For old IE
4929
+
4930
+ /* istanbul ignore if */
4931
+
4932
+
4933
+ options.styleTagTransform(css, styleElement, options.options);
4934
+ }
4935
+
4936
+ function removeStyleElement(styleElement) {
4937
+ // istanbul ignore if
4938
+ if (styleElement.parentNode === null) {
4939
+ return false;
4404
4940
  }
4405
4941
 
4406
- list = list || [];
4407
- var lastIdentifiers = modulesToDom(list, options);
4408
- return function update(newList) {
4409
- newList = newList || [];
4942
+ styleElement.parentNode.removeChild(styleElement);
4943
+ }
4944
+ /* istanbul ignore next */
4410
4945
 
4411
- if (Object.prototype.toString.call(newList) !== '[object Array]') {
4412
- return;
4413
- }
4414
4946
 
4415
- for (var i = 0; i < lastIdentifiers.length; i++) {
4416
- var identifier = lastIdentifiers[i];
4417
- var index = getIndexByIdentifier(identifier);
4418
- stylesInDom[index].references--;
4947
+ function domAPI(options) {
4948
+ var styleElement = options.insertStyleElement(options);
4949
+ return {
4950
+ update: function update(obj) {
4951
+ apply(styleElement, options, obj);
4952
+ },
4953
+ remove: function remove() {
4954
+ removeStyleElement(styleElement);
4419
4955
  }
4956
+ };
4957
+ }
4420
4958
 
4421
- var newLastIdentifiers = modulesToDom(newList, options);
4959
+ module.exports = domAPI;
4422
4960
 
4423
- for (var _i = 0; _i < lastIdentifiers.length; _i++) {
4424
- var _identifier = lastIdentifiers[_i];
4961
+ /***/ }),
4425
4962
 
4426
- var _index = getIndexByIdentifier(_identifier);
4963
+ /***/ "../node_modules/style-loader/dist/runtime/styleTagTransform.js":
4964
+ /*!**********************************************************************!*\
4965
+ !*** ../node_modules/style-loader/dist/runtime/styleTagTransform.js ***!
4966
+ \**********************************************************************/
4967
+ /***/ ((module) => {
4427
4968
 
4428
- if (stylesInDom[_index].references === 0) {
4429
- stylesInDom[_index].updater();
4430
4969
 
4431
- stylesInDom.splice(_index, 1);
4432
- }
4970
+
4971
+ /* istanbul ignore next */
4972
+ function styleTagTransform(css, styleElement) {
4973
+ if (styleElement.styleSheet) {
4974
+ styleElement.styleSheet.cssText = css;
4975
+ } else {
4976
+ while (styleElement.firstChild) {
4977
+ styleElement.removeChild(styleElement.firstChild);
4433
4978
  }
4434
4979
 
4435
- lastIdentifiers = newLastIdentifiers;
4436
- };
4437
- };
4980
+ styleElement.appendChild(document.createTextNode(css));
4981
+ }
4982
+ }
4983
+
4984
+ module.exports = styleTagTransform;
4438
4985
 
4439
4986
  /***/ }),
4440
4987
 
@@ -4444,7 +4991,7 @@ module.exports = function (list, options) {
4444
4991
  \***************************************************************/
4445
4992
  /***/ ((module) => {
4446
4993
 
4447
- module.exports = require("@babel/runtime/helpers/assertThisInitialized");;
4994
+ module.exports = require("@babel/runtime/helpers/assertThisInitialized");
4448
4995
 
4449
4996
  /***/ }),
4450
4997
 
@@ -4454,7 +5001,7 @@ module.exports = require("@babel/runtime/helpers/assertThisInitialized");;
4454
5001
  \********************************************************/
4455
5002
  /***/ ((module) => {
4456
5003
 
4457
- module.exports = require("@babel/runtime/helpers/classCallCheck");;
5004
+ module.exports = require("@babel/runtime/helpers/classCallCheck");
4458
5005
 
4459
5006
  /***/ }),
4460
5007
 
@@ -4464,7 +5011,7 @@ module.exports = require("@babel/runtime/helpers/classCallCheck");;
4464
5011
  \*****************************************************/
4465
5012
  /***/ ((module) => {
4466
5013
 
4467
- module.exports = require("@babel/runtime/helpers/createClass");;
5014
+ module.exports = require("@babel/runtime/helpers/createClass");
4468
5015
 
4469
5016
  /***/ }),
4470
5017
 
@@ -4474,7 +5021,7 @@ module.exports = require("@babel/runtime/helpers/createClass");;
4474
5021
  \********************************************************/
4475
5022
  /***/ ((module) => {
4476
5023
 
4477
- module.exports = require("@babel/runtime/helpers/defineProperty");;
5024
+ module.exports = require("@babel/runtime/helpers/defineProperty");
4478
5025
 
4479
5026
  /***/ }),
4480
5027
 
@@ -4484,7 +5031,7 @@ module.exports = require("@babel/runtime/helpers/defineProperty");;
4484
5031
  \********************************************************/
4485
5032
  /***/ ((module) => {
4486
5033
 
4487
- module.exports = require("@babel/runtime/helpers/getPrototypeOf");;
5034
+ module.exports = require("@babel/runtime/helpers/getPrototypeOf");
4488
5035
 
4489
5036
  /***/ }),
4490
5037
 
@@ -4494,7 +5041,7 @@ module.exports = require("@babel/runtime/helpers/getPrototypeOf");;
4494
5041
  \**************************************************/
4495
5042
  /***/ ((module) => {
4496
5043
 
4497
- module.exports = require("@babel/runtime/helpers/inherits");;
5044
+ module.exports = require("@babel/runtime/helpers/inherits");
4498
5045
 
4499
5046
  /***/ }),
4500
5047
 
@@ -4504,7 +5051,7 @@ module.exports = require("@babel/runtime/helpers/inherits");;
4504
5051
  \*****************************************************************/
4505
5052
  /***/ ((module) => {
4506
5053
 
4507
- module.exports = require("@babel/runtime/helpers/objectWithoutProperties");;
5054
+ module.exports = require("@babel/runtime/helpers/objectWithoutProperties");
4508
5055
 
4509
5056
  /***/ }),
4510
5057
 
@@ -4514,7 +5061,7 @@ module.exports = require("@babel/runtime/helpers/objectWithoutProperties");;
4514
5061
  \*******************************************************************/
4515
5062
  /***/ ((module) => {
4516
5063
 
4517
- module.exports = require("@babel/runtime/helpers/possibleConstructorReturn");;
5064
+ module.exports = require("@babel/runtime/helpers/possibleConstructorReturn");
4518
5065
 
4519
5066
  /***/ }),
4520
5067
 
@@ -4524,7 +5071,7 @@ module.exports = require("@babel/runtime/helpers/possibleConstructorReturn");;
4524
5071
  \*******************************************************/
4525
5072
  /***/ ((module) => {
4526
5073
 
4527
- module.exports = require("@babel/runtime/helpers/slicedToArray");;
5074
+ module.exports = require("@babel/runtime/helpers/slicedToArray");
4528
5075
 
4529
5076
  /***/ }),
4530
5077
 
@@ -4534,7 +5081,7 @@ module.exports = require("@babel/runtime/helpers/slicedToArray");;
4534
5081
  \***********************************************************/
4535
5082
  /***/ ((module) => {
4536
5083
 
4537
- module.exports = require("@babel/runtime/helpers/toConsumableArray");;
5084
+ module.exports = require("@babel/runtime/helpers/toConsumableArray");
4538
5085
 
4539
5086
  /***/ }),
4540
5087
 
@@ -4544,7 +5091,7 @@ module.exports = require("@babel/runtime/helpers/toConsumableArray");;
4544
5091
  \********************************/
4545
5092
  /***/ ((module) => {
4546
5093
 
4547
- module.exports = require("@js-joda/core");;
5094
+ module.exports = require("@js-joda/core");
4548
5095
 
4549
5096
  /***/ }),
4550
5097
 
@@ -4554,7 +5101,7 @@ module.exports = require("@js-joda/core");;
4554
5101
  \****************************/
4555
5102
  /***/ ((module) => {
4556
5103
 
4557
- module.exports = require("@thx/date");;
5104
+ module.exports = require("@thx/date");
4558
5105
 
4559
5106
  /***/ }),
4560
5107
 
@@ -4564,17 +5111,17 @@ module.exports = require("@thx/date");;
4564
5111
  \*****************************/
4565
5112
  /***/ ((module) => {
4566
5113
 
4567
- module.exports = require("@thx/money");;
5114
+ module.exports = require("@thx/money");
4568
5115
 
4569
5116
  /***/ }),
4570
5117
 
4571
- /***/ "@thx/yup-types":
4572
- /*!*********************************!*\
4573
- !*** external "@thx/yup-types" ***!
4574
- \*********************************/
5118
+ /***/ "credit-card-type":
5119
+ /*!***********************************!*\
5120
+ !*** external "credit-card-type" ***!
5121
+ \***********************************/
4575
5122
  /***/ ((module) => {
4576
5123
 
4577
- module.exports = require("@thx/yup-types");;
5124
+ module.exports = require("credit-card-type");
4578
5125
 
4579
5126
  /***/ }),
4580
5127
 
@@ -4584,7 +5131,7 @@ module.exports = require("@thx/yup-types");;
4584
5131
  \************************/
4585
5132
  /***/ ((module) => {
4586
5133
 
4587
- module.exports = require("debug");;
5134
+ module.exports = require("debug");
4588
5135
 
4589
5136
  /***/ }),
4590
5137
 
@@ -4594,7 +5141,7 @@ module.exports = require("debug");;
4594
5141
  \********************************/
4595
5142
  /***/ ((module) => {
4596
5143
 
4597
- module.exports = require("eventemitter3");;
5144
+ module.exports = require("eventemitter3");
4598
5145
 
4599
5146
  /***/ }),
4600
5147
 
@@ -4604,7 +5151,7 @@ module.exports = require("eventemitter3");;
4604
5151
  \***********************/
4605
5152
  /***/ ((module) => {
4606
5153
 
4607
- module.exports = require("flat");;
5154
+ module.exports = require("flat");
4608
5155
 
4609
5156
  /***/ }),
4610
5157
 
@@ -4614,7 +5161,7 @@ module.exports = require("flat");;
4614
5161
  \*************************/
4615
5162
  /***/ ((module) => {
4616
5163
 
4617
- module.exports = require("formik");;
5164
+ module.exports = require("formik");
4618
5165
 
4619
5166
  /***/ }),
4620
5167
 
@@ -4624,7 +5171,7 @@ module.exports = require("formik");;
4624
5171
  \****************************/
4625
5172
  /***/ ((module) => {
4626
5173
 
4627
- module.exports = require("inputmask");;
5174
+ module.exports = require("inputmask");
4628
5175
 
4629
5176
  /***/ }),
4630
5177
 
@@ -4634,7 +5181,7 @@ module.exports = require("inputmask");;
4634
5181
  \***************************/
4635
5182
  /***/ ((module) => {
4636
5183
 
4637
- module.exports = require("js-money");;
5184
+ module.exports = require("js-money");
4638
5185
 
4639
5186
  /***/ }),
4640
5187
 
@@ -4644,7 +5191,7 @@ module.exports = require("js-money");;
4644
5191
  \*****************************/
4645
5192
  /***/ ((module) => {
4646
5193
 
4647
- module.exports = require("lodash/get");;
5194
+ module.exports = require("lodash/get");
4648
5195
 
4649
5196
  /***/ }),
4650
5197
 
@@ -4654,7 +5201,7 @@ module.exports = require("lodash/get");;
4654
5201
  \**********************************/
4655
5202
  /***/ ((module) => {
4656
5203
 
4657
- module.exports = require("lodash/property");;
5204
+ module.exports = require("lodash/property");
4658
5205
 
4659
5206
  /***/ }),
4660
5207
 
@@ -4664,7 +5211,17 @@ module.exports = require("lodash/property");;
4664
5211
  \******************************/
4665
5212
  /***/ ((module) => {
4666
5213
 
4667
- module.exports = require("lodash/uniq");;
5214
+ module.exports = require("lodash/uniq");
5215
+
5216
+ /***/ }),
5217
+
5218
+ /***/ "luhn":
5219
+ /*!***********************!*\
5220
+ !*** external "luhn" ***!
5221
+ \***********************/
5222
+ /***/ ((module) => {
5223
+
5224
+ module.exports = require("luhn");
4668
5225
 
4669
5226
  /***/ }),
4670
5227
 
@@ -4674,7 +5231,27 @@ module.exports = require("lodash/uniq");;
4674
5231
  \************************/
4675
5232
  /***/ ((module) => {
4676
5233
 
4677
- module.exports = require("react");;
5234
+ module.exports = require("react");
5235
+
5236
+ /***/ }),
5237
+
5238
+ /***/ "react-credit-cards":
5239
+ /*!*************************************!*\
5240
+ !*** external "react-credit-cards" ***!
5241
+ \*************************************/
5242
+ /***/ ((module) => {
5243
+
5244
+ module.exports = require("react-credit-cards");
5245
+
5246
+ /***/ }),
5247
+
5248
+ /***/ "react-credit-cards/es/styles-compiled.css":
5249
+ /*!************************************************************!*\
5250
+ !*** external "react-credit-cards/es/styles-compiled.css" ***!
5251
+ \************************************************************/
5252
+ /***/ ((module) => {
5253
+
5254
+ module.exports = require("react-credit-cards/es/styles-compiled.css");
4678
5255
 
4679
5256
  /***/ }),
4680
5257
 
@@ -4684,7 +5261,7 @@ module.exports = require("react");;
4684
5261
  \***********************************/
4685
5262
  /***/ ((module) => {
4686
5263
 
4687
- module.exports = require("react-datepicker");;
5264
+ module.exports = require("react-datepicker");
4688
5265
 
4689
5266
  /***/ }),
4690
5267
 
@@ -4694,7 +5271,7 @@ module.exports = require("react-datepicker");;
4694
5271
  \***********************************/
4695
5272
  /***/ ((module) => {
4696
5273
 
4697
- module.exports = require("react-router-dom");;
5274
+ module.exports = require("react-router-dom");
4698
5275
 
4699
5276
  /***/ }),
4700
5277
 
@@ -4704,7 +5281,7 @@ module.exports = require("react-router-dom");;
4704
5281
  \******************************/
4705
5282
  /***/ ((module) => {
4706
5283
 
4707
- module.exports = require("react-table");;
5284
+ module.exports = require("react-table");
4708
5285
 
4709
5286
  /***/ }),
4710
5287
 
@@ -4714,7 +5291,7 @@ module.exports = require("react-table");;
4714
5291
  \****************************************/
4715
5292
  /***/ ((module) => {
4716
5293
 
4717
- module.exports = require("react/jsx-dev-runtime");;
5294
+ module.exports = require("react/jsx-dev-runtime");
4718
5295
 
4719
5296
  /***/ }),
4720
5297
 
@@ -4724,7 +5301,17 @@ module.exports = require("react/jsx-dev-runtime");;
4724
5301
  \************************************/
4725
5302
  /***/ ((module) => {
4726
5303
 
4727
- module.exports = require("semantic-ui-react");;
5304
+ module.exports = require("semantic-ui-react");
5305
+
5306
+ /***/ }),
5307
+
5308
+ /***/ "social-insurance-number":
5309
+ /*!******************************************!*\
5310
+ !*** external "social-insurance-number" ***!
5311
+ \******************************************/
5312
+ /***/ ((module) => {
5313
+
5314
+ module.exports = require("social-insurance-number");
4728
5315
 
4729
5316
  /***/ }),
4730
5317
 
@@ -4734,7 +5321,7 @@ module.exports = require("semantic-ui-react");;
4734
5321
  \******************************************/
4735
5322
  /***/ ((module) => {
4736
5323
 
4737
- module.exports = require("use-deep-compare-effect");;
5324
+ module.exports = require("use-deep-compare-effect");
4738
5325
 
4739
5326
  /***/ })
4740
5327
 
@@ -4892,4 +5479,4 @@ __webpack_require__.r(__webpack_exports__);
4892
5479
  module.exports = __webpack_exports__;
4893
5480
  /******/ })()
4894
5481
  ;
4895
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9kYXRlL0RhdGVQaWNrZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vZGF0ZS9Mb2NhbERhdGVQaWNrZXIvTG9jYWxEYXRlUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRlL0xvY2FsRGF0ZVBpY2tlci9NYXNrZWREYXRlSW5wdXQudHN4Iiwid2VicGFjazovLy8uL2RhdGUvTG9jYWxNb250aFNlbGVjdC9Mb2NhbE1vbnRoU2VsZWN0LnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRlL0xvY2FsVGltZVBpY2tlci9Mb2NhbFRpbWVQaWNrZXIudHN4Iiwid2VicGFjazovLy8uL2RhdGUvTG9jYWxUaW1lUGlja2VyL01hc2tlZFRpbWVJbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vZGF0ZS9Nb250aERheVBpY2tlci9Nb250aERheVBpY2tlci50c3giLCJ3ZWJwYWNrOi8vLy4vZGF0ZS9Nb250aFllYXJQaWNrZXIvTW9udGhZZWFyUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRlL1llYXJTZWxlY3QvWWVhclNlbGVjdC50c3giLCJ3ZWJwYWNrOi8vLy4vZm9ybS9URm9ybS9URm9ybS50c3giLCJ3ZWJwYWNrOi8vLy4vZm9ybS9URm9ybS9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9mb3JtL1RGb3JtL3VzZVRGb3JtLnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvQ3JlZGl0Q2FyZElucHV0L0NyZWRpdENhcmRJbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL01hc2tlZElucHV0L01hc2tlZElucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvUGhvbmVJbnB1dC9QaG9uZUlucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvUmFkaW9Hcm91cC9SYWRpb0dyb3VwLnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvU2NyaXB0ZWwvU2NyaXB0ZWwudHN4Iiwid2VicGFjazovLy8uL2lucHV0cy9TY3JpcHRlbC9TY3JpcHRlbENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1NjcmlwdGVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL2lucHV0cy9TY3JpcHRlbC9zY3JpcHRlbC9lbnVtcy50cyIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvU2NyaXB0ZWwvc2NyaXB0ZWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1NjcmlwdGVsL3dpdGhTY3JpcHRlbC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1NjcmlwdGVsSW5wdXQvU2NyaXB0ZWxJbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1NpbklucHV0L1NpbklucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvVGFibGVJbnB1dC9Ecm9wZG93bkNlbGwudHN4Iiwid2VicGFjazovLy8uL2lucHV0cy9UYWJsZUlucHV0L0hvdmVyQ2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1RhYmxlSW5wdXQvTW9uZXlDZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvVGFibGVJbnB1dC9Nb25leUVkaXRDZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvVGFibGVJbnB1dC9Nb25leVN1bUZvb3Rlci50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1RhYmxlSW5wdXQvU3RyaW5nRWRpdENlbGwudHN4Iiwid2VicGFjazovLy8uL2lucHV0cy9UYWJsZUlucHV0L1RhYmxlSW5wdXQudHN4Iiwid2VicGFjazovLy8uL2lucHV0cy9UYWJsZUlucHV0L2FkZFJvd09uVGFiLnRzIiwid2VicGFjazovLy8uL2lucHV0cy9UYWJsZUlucHV0L2luZGV4LnRzIiwid2VicGFjazovLy8uL21vbmV5L01vbmV5Q3VycmVuY3lJbnB1dC9Nb25leUN1cnJlbmN5SW5wdXQudHN4Iiwid2VicGFjazovLy8uL21vbmV5L01vbmV5SW5wdXQvTW9uZXlJbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vbW9uZXkvdXNlTW9uZXlJbnB1dC50cyIsIndlYnBhY2s6Ly8vLi9zdGVwL0Zvcm1TdGVwLnRzeCIsIndlYnBhY2s6Ly8vLi9zdGVwL1N0ZXAudHN4Iiwid2VicGFjazovLy8uL3N0ZXAvU3RlcFByb3ZpZGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zdGVwL2luZGV4LnRzIiwid2VicGFjazovLy8uL3N0ZXAvc3RlcENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vLy4vc3RlcC91c2VTdGVwLnRzIiwid2VicGFjazovLy8uL2RhdGUvRGF0ZVBpY2tlci9zdHlsZXMuY3NzP2IwMTkiLCJ3ZWJwYWNrOi8vLy4vZGF0ZS9EYXRlUGlja2VyL3N0eWxlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHlcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbmhlcml0c1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5cIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXlcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGpzLWpvZGEvY29yZVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkB0aHgvZGF0ZVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkB0aHgvbW9uZXlcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAdGh4L3l1cC10eXBlc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcImRlYnVnXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiZXZlbnRlbWl0dGVyM1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcImZsYXRcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJmb3JtaWtcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJpbnB1dG1hc2tcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJqcy1tb25leVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcImxvZGFzaC9nZXRcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJsb2Rhc2gvcHJvcGVydHlcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJsb2Rhc2gvdW5pcVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInJlYWN0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3QtZGF0ZXBpY2tlclwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInJlYWN0LXJvdXRlci1kb21cIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJyZWFjdC10YWJsZVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInJlYWN0L2pzeC1kZXYtcnVudGltZVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInNlbWFudGljLXVpLXJlYWN0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwidXNlLWRlZXAtY29tcGFyZS1lZmZlY3RcIiIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vLy4vaW5kZXgudHMiXSwibmFtZXMiOlsiZCIsImRlYnVnIiwiTG9jYWxEYXRlUGlja2VyIiwicHJvcHMiLCJtaW5EYXRlIiwibWF4RGF0ZSIsInZhbHVlIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJhcyIsImFjdGlvbiIsImFjdGlvblBvc2l0aW9uIiwiY2xhc3NOYW1lIiwiZXJyb3IiLCJmbHVpZCIsImZvY3VzIiwiaWNvbiIsImljb25Qb3NpdGlvbiIsImludmVydGVkIiwibGFiZWwiLCJsYWJlbFBvc2l0aW9uIiwibG9hZGluZyIsInNpemUiLCJ0YWJJbmRleCIsInRyYW5zcGFyZW50IiwicmVzdCIsInNlbGVjdGVkIiwidG9EYXRlIiwiaW5wdXRQcm9wcyIsImRhdGUiLCJ0b0xvY2FsRGF0ZSIsIk1hc2tlZERhdGVJbnB1dElubmVyIiwicmVmIiwibmFtZSIsImFsaWFzIiwiaW5wdXRGb3JtYXQiLCJ0YXJnZXQiLCJNYXNrZWREYXRlSW5wdXQiLCJmb3J3YXJkUmVmIiwibW9udGhPcHRpb25zIiwidGV4dCIsImtleSIsIkxvY2FsTW9udGhTZWxlY3QiLCJ5ZWFyIiwiaGFuZGxlQmx1ciIsInRoZVllYXIiLCJMb2NhbERhdGUiLCJtb250aFZhbHVlIiwiZXYiLCJ2IiwiTG9jYWxUaW1lUGlja2VyIiwiZGlzYWJsZWQiLCJMb2NhbFRpbWUiLCJ0b0xvY2FsVGltZSIsIk1hc2tlZFRpbWVJbnB1dElubmVyIiwiTWFza2VkVGltZUlucHV0IiwibW9udGhzIiwiTW9udGhEYXlIZWFkZXIiLCJnZXRNb250aCIsImRlY3JlYXNlTW9udGgiLCJwcmV2TW9udGhCdXR0b25EaXNhYmxlZCIsImluY3JlYXNlTW9udGgiLCJuZXh0TW9udGhCdXR0b25EaXNhYmxlZCIsIk1vbnRoRGF5UGlja2VyIiwiTW9udGhZZWFyUGlja2VyIiwidW5kZWZpbmVkIiwid2l0aERheU9mTW9udGgiLCJwbHVzTW9udGhzIiwibWludXNEYXlzIiwicGx1c1llYXJzIiwiWWVhclNlbGVjdCIsInRoaXNZZWFyIiwiRGF0ZSIsImdldEZ1bGxZZWFyIiwibWluWWVhciIsIm1heFllYXIiLCJhdmFpbGFibGVZZWFycyIsImkiLCJwdXNoIiwidG9TdHJpbmciLCJwYWRkaW5nIiwibWFyZ2luIiwiZSIsInZhbCIsIm1hcmdpblJpZ2h0IiwiVEZvcm0iLCJ0YmFnIiwidXNlVEZvcm0iLCJjb21wb25lbnQiLCJyZW5kZXIiLCJjaGlsZHJlbiIsImlubmVyUmVmIiwiUmVhY3QiLCJjaGlsZCIsImlzRnVuY3Rpb24iLCJpc0VtcHR5Q2hpbGRyZW4iLCJjb25maWciLCJmb3JtaWsiLCJ1c2VGb3JtaWsiLCJ1c2VFZmZlY3QiLCJvblZhbGlkYXRlIiwiaXNWYWxpZCIsImdldFN1Ym1pdEZuIiwic3VibWl0Rm9ybSIsInZhbHVlcyIsInVzZVN0YXRlIiwiZXJyb3JDbGVhcmVkIiwic2V0RXJyb3JDbGVhcmVkIiwibWVzc2FnZSIsImlzU3VibWl0dGluZyIsImZsYXRXYXJuaW5ncyIsImZsYXR0ZW4iLCJlcnJvcnMiLCJmbGF0VG91Y2hlZCIsInRvdWNoZWQiLCJ3YXJuaW5ncyIsInVuaXEiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwibWVtbyIsImlzVG91Y2hlZCIsInN1Ym1pdENvdW50IiwiZ2V0IiwiZXJyb3JIZWFkZXIiLCJncmFwaFFMRXJyb3JzIiwiZXJyb3JNZXNzYWdlIiwic2xpY2UiLCJpbmRleE9mIiwiaGFzV2FybmluZ3MiLCJsZW5ndGgiLCJoYXNFcnJvcnMiLCJyZW5kZXJXYXJuaW5ncyIsIm92ZXJmbG93IiwibWF4SGVpZ2h0IiwibWFwIiwibXNnIiwiZmllbGRFcnJvciIsImZpZWxkTmFtZSIsInByb3BlcnR5IiwiaGFuZGxlU3VibWl0Iiwic3VibWl0RGlzYWJsZWQiLCJlcnJvck1hcmtlZENsZWFyZWQiLCJmb3JtRXJyb3IiLCJDcmVkaXRDYXJkSW5wdXQiLCJjYXJkVHlwZSIsInR5cGUiLCJzZXRUeXBlIiwidmFsaWRhdGUiLCJ2YWx1ZUFycmF5IiwiY2FyZE51bWJlciIsImZpbHRlciIsImIiLCJqb2luIiwiQ3JlZGl0Q2FyZENhcmROYW1lRW51bSIsInBhcnNlSW50Iiwic3Vic3RyIiwiY3JlZGl0Q2FyZE1hc2siLCJtYXNrIiwiaXNDb21wbGV0ZSIsImF1dG9Vbm1hc2siLCJNYXNrZWRJbnB1dCIsImlucHV0RWxlbWVudCIsInVzZVJlZiIsIm1hc2tJbnN0YW5jZSIsInVzZURlZXBDb21wYXJlRWZmZWN0IiwiY3VycmVudCIsIkVycm9yIiwiSW5wdXRtYXNrIiwib25jb21wbGV0ZSIsIm9uY2xlYXJlZCIsIm9uaW5jb21wbGV0ZSIsInJlbW92ZSIsIlBob25lSW5wdXQiLCJleHRlbnNpb24iLCJncmVlZHkiLCJSYWRpb0dyb3VwIiwiQ2hpbGRyZW4iLCJGb3JtUmFkaW8iLCJSYWRpbyIsIkZvcm0iLCJjbG9uZUVsZW1lbnQiLCJhcmdzIiwiY2hlY2tlZCIsIlNjcmlwdGVsIiwib21uaXNjcmlwdFVybCIsImltYWdlVHlwZSIsInNjYWxlIiwiY3JvcCIsInBlblN0eWxlIiwic29ja2V0Iiwic2V0UmVuZGVyIiwic2V0TG9hZGluZyIsImlzU2lnbmluZyIsInNldElzU2lnbmluZyIsIlNjcmlwdGVsU29ja2V0Iiwib24iLCJjbG9zZSIsInJlbmRlckltYWdlIiwiU2NyaXB0ZWxDb250ZXh0IiwiU2NyaXB0ZWxQZW5TdHlsZSIsIlNjcmlwdGVsTWVzc2FnZUNsYXNzIiwic2VydmVyQ29ubmVjdGVkIiwic2VydmVySW5mbyIsImRldmljZXMiLCJkZXZpY2UiLCJzZW5kIiwiSlNPTiIsInN0cmluZ2lmeSIsIl9jbGFzcyIsInV1aWQiLCJkZXZpY2VDb25uZWN0ZWQiLCJyZW5kZXJTZXR0aW5ncyIsInJlbmRlckZ1bmN0aW9uIiwiUGxhaW4iLCJldmVudEVtaXR0ZXIiLCJ3aWR0aCIsImhlaWdodCIsImVtaXQiLCJvcHRpb25zIiwiV2ViU29ja2V0Iiwib25vcGVuIiwib25jbG9zZSIsIm9ubWVzc2FnZSIsInBhcnNlIiwiZGF0YSIsIkV2ZW50RW1pdHRlciIsIndpdGhTY3JpcHRlbCIsIldyYXBwZWRDb21wb25lbnQiLCJzY3JpcHRlbFByb3BzIiwiU2NyaXB0ZWxJbnB1dCIsImJ1dHRvblRleHQiLCJjdHgiLCJ1c2VDb250ZXh0IiwiZW50ZXJTaWduYXR1cmUiLCJzZXRFbnRlclNpZ25hdHVyZSIsInRpbWVzdGFtcCIsImNhbGlicmF0ZSIsIlNpbklucHV0IiwiaGFzU2luIiwiZWRpdCIsInNldEVkaXQiLCJkb0RlbGV0ZSIsInNldERvRGVsZXRlIiwiaGFuZGxlQ2hhbmdlIiwicGFkZGluZ1RvcCIsIkRyb3Bkb3duQ2VsbCIsImRyb3Bkb3duUHJvcHMiLCJEcm9wZG93bkNlbGxGbiIsInJvd0luZGV4Iiwicm93IiwiaW5kZXgiLCJpZCIsImNvbHVtbiIsInVwZGF0ZURhdGEiLCJldmVudCIsIkhvdmVyQ2VsbCIsIkhvdmVyQ2VsbEZuIiwiQWN0aW9uIiwiaG92ZXJSb3ciLCJ0ZXh0QWxpZ24iLCJNb25leUNlbGwiLCJNb25leUNlbGxGbiIsImZvcm1hdE1vbmV5Iiwib3ZlcnJpZGVWYWx1ZSIsIk1vbmV5RWRpdENlbGwiLCJvcHRzIiwiTW9uZXlFZGl0Q2VsbEZuIiwiaW5pdGlhbFZhbHVlIiwic2V0VmFsdWUiLCJhZGRSb3dPblRhYiIsImFkZFJvd09uVGFiSWYiLCJNb25leVN1bUZvb3RlciIsImluZm8iLCJzdW0iLCJyb3dzIiwiYWRkIiwidG9Nb25leSIsIlN0cmluZ0VkaXRDZWxsIiwiU3RyaW5nRWRpdENlbGxGbiIsIlRhYmxlSW5wdXRUYWJsZSIsImNvbHVtbnMiLCJhcnJheUhlbHBlcnMiLCJzZXRGaWVsZFZhbHVlIiwiY3JlYXRlUm93IiwidGFibGVQcm9wcyIsImhlYWRlclJvd1Byb3BzIiwiaGVhZGVyQ2VsbFByb3BzIiwiYm9keVByb3BzIiwicm93UHJvcHMiLCJjZWxsUHJvcHMiLCJmb290ZXJDZWxsUHJvcHMiLCJmb290ZXJSb3dQcm9wcyIsImNvbHMiLCJ1c2VNZW1vIiwidmFscyIsInNldEhvdmVyUm93IiwidXNlVGFibGUiLCJjb2x1bW5JZCIsImFkZFJvdyIsImdldFRhYmxlUHJvcHMiLCJnZXRUYWJsZUJvZHlQcm9wcyIsImhlYWRlckdyb3VwcyIsInByZXBhcmVSb3ciLCJmb290ZXJHcm91cHMiLCJoYXNGb290ZXIiLCJzb21lIiwiZmciLCJoZWFkZXJzIiwiZmdoIiwiRm9vdGVyIiwiZm9vdGVyIiwiZ3JvdXAiLCJnZXRGb290ZXJHcm91cFByb3BzIiwiZ2V0Rm9vdGVyUHJvcHMiLCJoZWFkZXJHcm91cCIsImdldEhlYWRlckdyb3VwUHJvcHMiLCJnZXRIZWFkZXJQcm9wcyIsImdldFJvd1Byb3BzIiwiY2VsbHMiLCJjZWxsIiwiZ2V0Q2VsbFByb3BzIiwiVGFibGVJbnB1dCIsInJvd3NMZW5ndGgiLCJzaGlmdEtleSIsIk1vbmV5Q3VycmVuY3lJbnB1dCIsInByZWZpeCIsImRlZmF1bHRDdXJyZW5jeSIsInNob3dQcmVmaXgiLCJ3aG9sZU51bWJlciIsImN1cnJlbmNpZXMiLCJsb2NrZWQiLCJ1c2VNb25leUlucHV0IiwiaGFuZGxlRHJvcGRvd25DaGFuZ2UiLCJhbW91bnQiLCJNb25leSIsImN1cnJlbmN5IiwiZGVjaW1hbF9kaWdpdHMiLCJjb2RlIiwiTW9uZXlJbnB1dCIsImFkakN1cnJlbmN5IiwiZ3JvdXBTZXBhcmF0b3IiLCJkaWdpdHMiLCJDdXJyZW5jaWVzIiwiZGlnaXRzT3B0aW9uYWwiLCJzeW1ib2wiLCJwbGFjZWhvbGRlciIsImlucHV0VmFsdWUiLCJlcXVhbHMiLCJpc01vbmV5T2JqZWN0IiwidmFsdWVJbk1vbmV5IiwiRm9ybVN0ZXAiLCJ1c2VTdGVwIiwic3RhdGUiLCJzdGVwS2V5IiwiZm9ybSIsIm9uU3VibWl0IiwidGl0bGUiLCJTdGVwIiwiU3RlcFByb3ZpZGVyIiwic2V0U3RhdGUiLCJjdXJyZW50U3RlcCIsInNldEN1cnJlbnRTdGVwIiwic2V0SXNTdWJtaXR0aW5nIiwidGl0bGVzIiwiaGlkZGVuIiwic3RlcCIsIm9uTmF2aWdhdGUiLCJ2ZXJ0aWNhbCIsIndhcm5PblJlcm91dGUiLCJTdGVwQ29udGV4dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTs7QUFFQSxJQUFNQSxDQUFDLEdBQUdDLDRDQUFLLENBQUMsbUNBQUQsQ0FBZjtBQWNPLFNBQVNDLGVBQVQsQ0FBeUJDLEtBQXpCLEVBQW1FO0FBQ3pFLE1BQ0NDLE9BREQsR0F1QklELEtBdkJKLENBQ0NDLE9BREQ7QUFBQSxNQUVDQyxPQUZELEdBdUJJRixLQXZCSixDQUVDRSxPQUZEO0FBQUEsTUFHQ0MsS0FIRCxHQXVCSUgsS0F2QkosQ0FHQ0csS0FIRDtBQUFBLE1BSUNDLFNBSkQsR0F1QklKLEtBdkJKLENBSUNJLFFBSkQ7QUFBQSxNQUtDQyxNQUxELEdBdUJJTCxLQXZCSixDQUtDSyxNQUxEO0FBQUEsTUFNQ0MsRUFORCxHQXVCSU4sS0F2QkosQ0FNQ00sRUFORDtBQUFBLE1BT0NDLE1BUEQsR0F1QklQLEtBdkJKLENBT0NPLE1BUEQ7QUFBQSxNQVFDQyxjQVJELEdBdUJJUixLQXZCSixDQVFDUSxjQVJEO0FBQUEsTUFTQ0MsU0FURCxHQXVCSVQsS0F2QkosQ0FTQ1MsU0FURDtBQUFBLE1BVUNDLEtBVkQsR0F1QklWLEtBdkJKLENBVUNVLEtBVkQ7QUFBQSxNQVdDQyxLQVhELEdBdUJJWCxLQXZCSixDQVdDVyxLQVhEO0FBQUEsTUFZQ0MsS0FaRCxHQXVCSVosS0F2QkosQ0FZQ1ksS0FaRDtBQUFBLE1BYUNDLElBYkQsR0F1QkliLEtBdkJKLENBYUNhLElBYkQ7QUFBQSxNQWNDQyxZQWRELEdBdUJJZCxLQXZCSixDQWNDYyxZQWREO0FBQUEsTUFlQ0MsUUFmRCxHQXVCSWYsS0F2QkosQ0FlQ2UsUUFmRDtBQUFBLE1BZ0JDQyxLQWhCRCxHQXVCSWhCLEtBdkJKLENBZ0JDZ0IsS0FoQkQ7QUFBQSxNQWlCQ0MsYUFqQkQsR0F1QklqQixLQXZCSixDQWlCQ2lCLGFBakJEO0FBQUEsTUFrQkNDLE9BbEJELEdBdUJJbEIsS0F2QkosQ0FrQkNrQixPQWxCRDtBQUFBLE1BbUJDQyxJQW5CRCxHQXVCSW5CLEtBdkJKLENBbUJDbUIsSUFuQkQ7QUFBQSxNQW9CQ0MsUUFwQkQsR0F1QklwQixLQXZCSixDQW9CQ29CLFFBcEJEO0FBQUEsTUFxQkNDLFdBckJELEdBdUJJckIsS0F2QkosQ0FxQkNxQixXQXJCRDtBQUFBLE1Bc0JJQyxJQXRCSix5RkF1Qkl0QixLQXZCSjs7QUF5QkEsTUFBTXVCLFFBQVEsR0FBR3BCLEtBQUssR0FBR3FCLGlEQUFNLENBQUNyQixLQUFELENBQVQsR0FBbUIsSUFBekM7QUFFQSxNQUFNc0IsVUFBVSxHQUFHO0FBQ2xCbkIsTUFBRSxFQUFGQSxFQURrQjtBQUVsQkMsVUFBTSxFQUFOQSxNQUZrQjtBQUdsQkMsa0JBQWMsRUFBZEEsY0FIa0I7QUFJbEJDLGFBQVMsRUFBVEEsU0FKa0I7QUFLbEJDLFNBQUssRUFBTEEsS0FMa0I7QUFNbEJDLFNBQUssRUFBTEEsS0FOa0I7QUFPbEJDLFNBQUssRUFBTEEsS0FQa0I7QUFRbEJDLFFBQUksRUFBSkEsSUFSa0I7QUFTbEJDLGdCQUFZLEVBQVpBLFlBVGtCO0FBVWxCQyxZQUFRLEVBQVJBLFFBVmtCO0FBV2xCQyxTQUFLLEVBQUxBLEtBWGtCO0FBWWxCQyxpQkFBYSxFQUFiQSxhQVprQjtBQWFsQkMsV0FBTyxFQUFQQSxPQWJrQjtBQWNsQkMsUUFBSSxFQUFKQSxJQWRrQjtBQWVsQkMsWUFBUSxFQUFSQSxRQWZrQjtBQWdCbEJDLGVBQVcsRUFBWEE7QUFoQmtCLEdBQW5CO0FBbUJBLHNCQUNDLDhEQUFDLHlEQUFELGtDQUNLQyxJQURMO0FBRUMsWUFBUSxFQUFFQyxRQUZYO0FBR0MsWUFBUSxFQUFFLGtCQUFBRyxJQUFJLEVBQUk7QUFDakIsVUFBSXRCLFNBQUosRUFBY0EsU0FBUSxDQUFDc0IsSUFBSSxHQUFHQyxzREFBVyxDQUFDRCxJQUFELENBQWQsR0FBdUIsSUFBNUIsQ0FBUjtBQUNkLEtBTEY7QUFNQyxVQUFNLEVBQUVyQixNQU5UO0FBT0MsZUFBVyxlQUFFLDhEQUFDLDZEQUFELGtDQUFxQm9CLFVBQXJCO0FBQWlDLFlBQU0sRUFBRXBCO0FBQXpDO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFQZDtBQVFDLFdBQU8sRUFBRUosT0FBTyxHQUFHdUIsaURBQU0sQ0FBQ3ZCLE9BQUQsQ0FBVCxHQUFxQixJQVJ0QztBQVNDLFdBQU8sRUFBRUMsT0FBTyxHQUFHc0IsaURBQU0sQ0FBQ3RCLE9BQUQsQ0FBVCxHQUFxQjtBQVR0QztBQUFBO0FBQUE7QUFBQTtBQUFBLFVBREQ7QUFhQTtLQTVEZUgsZTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZCaEI7QUFDQTtBQUNBOztBQUVBLElBQU1GLENBQUMsR0FBR0MsNENBQUssQ0FBQyxtREFBRCxDQUFmOztBQU9BO0FBQ0EsU0FBUzhCLG9CQUFULENBQThCNUIsS0FBOUIsRUFBZ0c2QixHQUFoRyxFQUEwRztBQUN6RyxNQUFPekIsU0FBUCxHQUFrQ0osS0FBbEMsQ0FBT0ksUUFBUDtBQUFBLE1BQWlCMEIsSUFBakIsR0FBa0M5QixLQUFsQyxDQUFpQjhCLElBQWpCO0FBQUEsTUFBMEJSLElBQTFCLHlGQUFrQ3RCLEtBQWxDOztBQUVBLHNCQUNDLDhEQUFDLDREQUFELGtDQUNLc0IsSUFETDtBQUVDLFFBQUksRUFBRVEsSUFGUDtBQUdDLFFBQUksRUFBRTtBQUFDQyxXQUFLLEVBQUUsVUFBUjtBQUFvQkMsaUJBQVcsRUFBRTtBQUFqQyxLQUhQO0FBSUMsWUFBUSxFQUFFLGtCQUFBN0IsS0FBSyxFQUFJO0FBQ2xCLFVBQUlDLFNBQUosRUFBY0EsU0FBUSxDQUFDO0FBQUM2QixjQUFNLEVBQUU7QUFBQzlCLGVBQUssRUFBRUEsS0FBSyxJQUFJO0FBQWpCO0FBQVQsT0FBRCxDQUFSO0FBQ2Q7QUFORjtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBREQ7QUFVQTs7S0FiUXlCLG9CO0FBZUYsSUFBTU0sZUFBZSxnQkFBR0MsaURBQVUsQ0FBQ1Asb0JBQUQsQ0FBbEM7TUFBTU0sZTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzQmI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBTXJDLENBQUMsR0FBR0MsNENBQUssQ0FBQyxvQ0FBRCxDQUFmO0FBRUEsSUFBTXNDLFlBQVksR0FBRyxDQUNwQjtBQUFDQyxNQUFJLEVBQUUsU0FBUDtBQUFrQmxDLE9BQUssRUFBRSxDQUF6QjtBQUE0Qm1DLEtBQUcsRUFBRTtBQUFqQyxDQURvQixFQUVwQjtBQUFDRCxNQUFJLEVBQUUsVUFBUDtBQUFtQmxDLE9BQUssRUFBRSxDQUExQjtBQUE2Qm1DLEtBQUcsRUFBRTtBQUFsQyxDQUZvQixFQUdwQjtBQUFDRCxNQUFJLEVBQUUsT0FBUDtBQUFnQmxDLE9BQUssRUFBRSxDQUF2QjtBQUEwQm1DLEtBQUcsRUFBRTtBQUEvQixDQUhvQixFQUlwQjtBQUFDRCxNQUFJLEVBQUUsT0FBUDtBQUFnQmxDLE9BQUssRUFBRSxDQUF2QjtBQUEwQm1DLEtBQUcsRUFBRTtBQUEvQixDQUpvQixFQUtwQjtBQUFDRCxNQUFJLEVBQUUsS0FBUDtBQUFjbEMsT0FBSyxFQUFFLENBQXJCO0FBQXdCbUMsS0FBRyxFQUFFO0FBQTdCLENBTG9CLEVBTXBCO0FBQUNELE1BQUksRUFBRSxNQUFQO0FBQWVsQyxPQUFLLEVBQUUsQ0FBdEI7QUFBeUJtQyxLQUFHLEVBQUU7QUFBOUIsQ0FOb0IsRUFPcEI7QUFBQ0QsTUFBSSxFQUFFLE1BQVA7QUFBZWxDLE9BQUssRUFBRSxDQUF0QjtBQUF5Qm1DLEtBQUcsRUFBRTtBQUE5QixDQVBvQixFQVFwQjtBQUFDRCxNQUFJLEVBQUUsUUFBUDtBQUFpQmxDLE9BQUssRUFBRSxDQUF4QjtBQUEyQm1DLEtBQUcsRUFBRTtBQUFoQyxDQVJvQixFQVNwQjtBQUFDRCxNQUFJLEVBQUUsV0FBUDtBQUFvQmxDLE9BQUssRUFBRSxDQUEzQjtBQUE4Qm1DLEtBQUcsRUFBRTtBQUFuQyxDQVRvQixFQVVwQjtBQUFDRCxNQUFJLEVBQUUsU0FBUDtBQUFrQmxDLE9BQUssRUFBRSxFQUF6QjtBQUE2Qm1DLEtBQUcsRUFBRTtBQUFsQyxDQVZvQixFQVdwQjtBQUFDRCxNQUFJLEVBQUUsVUFBUDtBQUFtQmxDLE9BQUssRUFBRSxFQUExQjtBQUE4Qm1DLEtBQUcsRUFBRTtBQUFuQyxDQVhvQixFQVlwQjtBQUFDRCxNQUFJLEVBQUUsVUFBUDtBQUFtQmxDLE9BQUssRUFBRSxFQUExQjtBQUE4Qm1DLEtBQUcsRUFBRTtBQUFuQyxDQVpvQixDQUFyQjtBQXdCTyxTQUFTQyxnQkFBVCxDQUEwQnZDLEtBQTFCLEVBQXFFO0FBQzNFLE1BQU9HLEtBQVAsR0FBcURILEtBQXJELENBQU9HLEtBQVA7QUFBQSxNQUFjQyxTQUFkLEdBQXFESixLQUFyRCxDQUFjSSxRQUFkO0FBQUEsTUFBd0JvQyxJQUF4QixHQUFxRHhDLEtBQXJELENBQXdCd0MsSUFBeEI7QUFBQSxNQUE4QkMsVUFBOUIsR0FBcUR6QyxLQUFyRCxDQUE4QnlDLFVBQTlCO0FBQUEsTUFBNkNuQixJQUE3Qyx5RkFBcUR0QixLQUFyRDs7QUFFQSxNQUFNMEMsT0FBTyxHQUFHRixJQUFJLElBQUlHLHdEQUFBLEdBQWdCSCxJQUFoQixFQUF4QjtBQUVBLHNCQUNDLDhEQUFDLHFEQUFEO0FBQ0MsZUFBVyxFQUFDLGNBRGI7QUFFQyxXQUFPLEVBQUVKLFlBRlY7QUFHQyxTQUFLLEVBQUVqQyxLQUFLLEdBQUdBLEtBQUssQ0FBQ3lDLFVBQU4sRUFBSCxHQUF3QixFQUhyQztBQUlDLFlBQVEsRUFBRSxrQkFBQ0MsRUFBRCxFQUFLQyxDQUFMLEVBQVc7QUFDcEIsVUFBSTFDLFNBQUosRUFBYztBQUNiLFlBQUksT0FBTzBDLENBQUMsQ0FBQzNDLEtBQVQsS0FBbUIsUUFBdkIsRUFBaUM7QUFDaENDLG1CQUFRLENBQUMwQyxDQUFDLEdBQUdILHVEQUFBLENBQWFELE9BQWIsRUFBc0JJLENBQUMsQ0FBQzNDLEtBQXhCLEVBQStCLENBQS9CLENBQUgsR0FBdUMsSUFBekMsQ0FBUjtBQUNBLFNBRkQsTUFFTztBQUNOQyxtQkFBUSxDQUFDLElBQUQsQ0FBUjtBQUNBO0FBQ0Q7QUFDRCxLQVpGO0FBYUMsVUFBTSxFQUFFcUM7QUFiVCxLQWNLbkIsSUFkTDtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBREQ7QUFrQkE7S0F2QmVpQixnQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0JoQjtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7O0FBRUEsSUFBTTFDLENBQUMsR0FBR0MsNENBQUssQ0FBQyxtQ0FBRCxDQUFmO0FBWU8sU0FBU2lELGVBQVQsQ0FBeUIvQyxLQUF6QixFQUFtRTtBQUN6RSxNQUNDRyxLQURELEdBcUJJSCxLQXJCSixDQUNDRyxLQUREO0FBQUEsTUFFQ0MsU0FGRCxHQXFCSUosS0FyQkosQ0FFQ0ksUUFGRDtBQUFBLE1BR0NFLEVBSEQsR0FxQklOLEtBckJKLENBR0NNLEVBSEQ7QUFBQSxNQUlDQyxNQUpELEdBcUJJUCxLQXJCSixDQUlDTyxNQUpEO0FBQUEsTUFLQ0MsY0FMRCxHQXFCSVIsS0FyQkosQ0FLQ1EsY0FMRDtBQUFBLE1BTUNDLFNBTkQsR0FxQklULEtBckJKLENBTUNTLFNBTkQ7QUFBQSxNQU9DdUMsUUFQRCxHQXFCSWhELEtBckJKLENBT0NnRCxRQVBEO0FBQUEsTUFRQ3RDLEtBUkQsR0FxQklWLEtBckJKLENBUUNVLEtBUkQ7QUFBQSxNQVNDQyxLQVRELEdBcUJJWCxLQXJCSixDQVNDVyxLQVREO0FBQUEsTUFVQ0MsS0FWRCxHQXFCSVosS0FyQkosQ0FVQ1ksS0FWRDtBQUFBLE1BV0NDLElBWEQsR0FxQkliLEtBckJKLENBV0NhLElBWEQ7QUFBQSxNQVlDQyxZQVpELEdBcUJJZCxLQXJCSixDQVlDYyxZQVpEO0FBQUEsTUFhQ0MsUUFiRCxHQXFCSWYsS0FyQkosQ0FhQ2UsUUFiRDtBQUFBLE1BY0NDLEtBZEQsR0FxQkloQixLQXJCSixDQWNDZ0IsS0FkRDtBQUFBLE1BZUNDLGFBZkQsR0FxQklqQixLQXJCSixDQWVDaUIsYUFmRDtBQUFBLE1BZ0JDQyxPQWhCRCxHQXFCSWxCLEtBckJKLENBZ0JDa0IsT0FoQkQ7QUFBQSxNQWlCQ0MsSUFqQkQsR0FxQkluQixLQXJCSixDQWlCQ21CLElBakJEO0FBQUEsTUFrQkNDLFFBbEJELEdBcUJJcEIsS0FyQkosQ0FrQkNvQixRQWxCRDtBQUFBLE1BbUJDQyxXQW5CRCxHQXFCSXJCLEtBckJKLENBbUJDcUIsV0FuQkQ7QUFBQSxNQW9CSUMsSUFwQkoseUZBcUJJdEIsS0FyQko7O0FBdUJBLE1BQUl1QixRQUFKO0FBQ0EsTUFBSSxPQUFPcEIsS0FBUCxLQUFpQixRQUFyQixFQUErQm9CLFFBQVEsR0FBR0MsaURBQU0sQ0FBQ3lCLGtFQUFBLENBQXdCOUMsS0FBeEIsQ0FBRCxDQUFqQixDQUEvQixLQUNLb0IsUUFBUSxHQUFHcEIsS0FBSyxHQUFHcUIsaURBQU0sQ0FBQ3JCLEtBQUQsQ0FBVCxHQUFtQixJQUFuQztBQUVMLE1BQU1zQixVQUFVLEdBQUc7QUFDbEJuQixNQUFFLEVBQUZBLEVBRGtCO0FBRWxCQyxVQUFNLEVBQU5BLE1BRmtCO0FBR2xCQyxrQkFBYyxFQUFkQSxjQUhrQjtBQUlsQkMsYUFBUyxFQUFUQSxTQUprQjtBQUtsQnVDLFlBQVEsRUFBUkEsUUFMa0I7QUFNbEJ0QyxTQUFLLEVBQUxBLEtBTmtCO0FBT2xCQyxTQUFLLEVBQUxBLEtBUGtCO0FBUWxCQyxTQUFLLEVBQUxBLEtBUmtCO0FBU2xCQyxRQUFJLEVBQUpBLElBVGtCO0FBVWxCQyxnQkFBWSxFQUFaQSxZQVZrQjtBQVdsQkMsWUFBUSxFQUFSQSxRQVhrQjtBQVlsQkMsU0FBSyxFQUFMQSxLQVprQjtBQWFsQkMsaUJBQWEsRUFBYkEsYUFia0I7QUFjbEJDLFdBQU8sRUFBUEEsT0Fka0I7QUFlbEJDLFFBQUksRUFBSkEsSUFma0I7QUFnQmxCQyxZQUFRLEVBQVJBLFFBaEJrQjtBQWlCbEJDLGVBQVcsRUFBWEE7QUFqQmtCLEdBQW5CO0FBb0JBLHNCQUNDLDhEQUFDLHlEQUFELGtDQUNLQyxJQURMO0FBRUMsWUFBUSxFQUFFQyxRQUZYO0FBR0MsWUFBUSxFQUFFLGtCQUFBRyxJQUFJLEVBQUk7QUFDakIsVUFBSXRCLFNBQUosRUFBY0EsU0FBUSxDQUFDc0IsSUFBSSxHQUFHd0Isc0RBQVcsQ0FBQ3hCLElBQUQsQ0FBZCxHQUF1QixJQUE1QixDQUFSO0FBQ2QsS0FMRjtBQU1DLGtCQUFjLE1BTmY7QUFPQyxzQkFBa0IsTUFQbkI7QUFRQyxpQkFBYSxFQUFFLEVBUmhCO0FBU0MsZUFBVyxFQUFDLE1BVGI7QUFVQyxjQUFVLEVBQUMsVUFWWixDQVdDO0FBWEQ7QUFZQyxlQUFXLGVBQUUsOERBQUMsNkRBQUQsb0JBQXFCRCxVQUFyQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWmQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUREO0FBZ0JBO0tBaEVlc0IsZTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JCaEI7QUFDQTtBQUNBOztBQUVBLElBQU1sRCxDQUFDLEdBQUdDLDRDQUFLLENBQUMsbURBQUQsQ0FBZjs7QUFNQTtBQUNBLFNBQVNxRCxvQkFBVCxDQUE4Qm5ELEtBQTlCLEVBQWdHNkIsR0FBaEcsRUFBMEc7QUFDekcsTUFBT3pCLFNBQVAsR0FBNEJKLEtBQTVCLENBQU9JLFFBQVA7QUFBQSxNQUFvQmtCLElBQXBCLHlGQUE0QnRCLEtBQTVCOztBQUVBLHNCQUNDLDhEQUFDLDREQUFEO0FBQ0MsUUFBSSxFQUFFO0FBQUMrQixXQUFLLEVBQUUsVUFBUjtBQUFvQkMsaUJBQVcsRUFBRTtBQUFqQyxLQURQO0FBRUMsWUFBUSxFQUFFLGtCQUFBN0IsS0FBSyxFQUFJO0FBQ2xCLFVBQUlDLFNBQUosRUFBY0EsU0FBUSxDQUFDO0FBQUM2QixjQUFNLEVBQUU7QUFBQzlCLGVBQUssRUFBRUEsS0FBSyxJQUFJO0FBQWpCO0FBQVQsT0FBRCxDQUFSO0FBQ2Q7QUFKRixLQUtLbUIsSUFMTDtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBREQ7QUFTQTs7S0FaUTZCLG9CO0FBY0YsSUFBTUMsZUFBZSxnQkFBR2pCLGlEQUFVLENBQUNnQixvQkFBRCxDQUFsQztNQUFNQyxlOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4QmI7QUFDQTtBQUNBO0FBRUE7QUFDQTs7O0FBRUEsSUFBTXZELENBQUMsR0FBR0MsNENBQUssQ0FBQyxrQ0FBRCxDQUFmO0FBRUEsSUFBTXVELE1BQU0sR0FBRyxDQUNkLFNBRGMsRUFFZCxVQUZjLEVBR2QsT0FIYyxFQUlkLE9BSmMsRUFLZCxLQUxjLEVBTWQsTUFOYyxFQU9kLE1BUGMsRUFRZCxRQVJjLEVBU2QsV0FUYyxFQVVkLFNBVmMsRUFXZCxVQVhjLEVBWWQsVUFaYyxDQUFmOztBQTZCQSxTQUFTQyxjQUFULENBQXdCdEQsS0FBeEIsRUFBb0Q7QUFDbkQsc0JBQ0M7QUFBQSw0QkFDQztBQUFLLGVBQVMsRUFBQyxpQ0FBZjtBQUFBLGdCQUFrRHFELE1BQU0sQ0FBQ3JELEtBQUssQ0FBQzBCLElBQU4sQ0FBVzZCLFFBQVgsRUFBRDtBQUF4RDtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBREQsZUFFQztBQUNDLFVBQUksRUFBQyxRQUROO0FBRUMsZUFBUyxFQUFDLHFFQUZYO0FBR0Msb0JBQVcsZ0JBSFo7QUFJQyxhQUFPLEVBQUV2RCxLQUFLLENBQUN3RCxhQUpoQjtBQUtDLGNBQVEsRUFBRXhELEtBQUssQ0FBQ3lELHVCQUxqQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUZELGVBV0M7QUFDQyxVQUFJLEVBQUMsUUFETjtBQUVDLGVBQVMsRUFBQyxpRUFGWDtBQUdDLG9CQUFXLFlBSFo7QUFJQyxhQUFPLEVBQUV6RCxLQUFLLENBQUMwRCxhQUpoQjtBQUtDLGNBQVEsRUFBRTFELEtBQUssQ0FBQzJELHVCQUxqQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQVhEO0FBQUEsa0JBREQ7QUF1QkE7O0tBeEJRTCxjO0FBb0NGLFNBQVNNLGNBQVQsQ0FBd0I1RCxLQUF4QixFQUFpRTtBQUN2RSxNQUNDRyxLQURELEdBcUJJSCxLQXJCSixDQUNDRyxLQUREO0FBQUEsTUFFQ0MsU0FGRCxHQXFCSUosS0FyQkosQ0FFQ0ksUUFGRDtBQUFBLE1BR0NFLEVBSEQsR0FxQklOLEtBckJKLENBR0NNLEVBSEQ7QUFBQSxNQUlDQyxNQUpELEdBcUJJUCxLQXJCSixDQUlDTyxNQUpEO0FBQUEsTUFLQ0MsY0FMRCxHQXFCSVIsS0FyQkosQ0FLQ1EsY0FMRDtBQUFBLE1BTUNDLFNBTkQsR0FxQklULEtBckJKLENBTUNTLFNBTkQ7QUFBQSxNQU9DdUMsUUFQRCxHQXFCSWhELEtBckJKLENBT0NnRCxRQVBEO0FBQUEsTUFRQ3RDLEtBUkQsR0FxQklWLEtBckJKLENBUUNVLEtBUkQ7QUFBQSxNQVNDQyxLQVRELEdBcUJJWCxLQXJCSixDQVNDVyxLQVREO0FBQUEsTUFVQ0MsS0FWRCxHQXFCSVosS0FyQkosQ0FVQ1ksS0FWRDtBQUFBLE1BV0NDLElBWEQsR0FxQkliLEtBckJKLENBV0NhLElBWEQ7QUFBQSxNQVlDQyxZQVpELEdBcUJJZCxLQXJCSixDQVlDYyxZQVpEO0FBQUEsTUFhQ0MsUUFiRCxHQXFCSWYsS0FyQkosQ0FhQ2UsUUFiRDtBQUFBLE1BY0NDLEtBZEQsR0FxQkloQixLQXJCSixDQWNDZ0IsS0FkRDtBQUFBLE1BZUNDLGFBZkQsR0FxQklqQixLQXJCSixDQWVDaUIsYUFmRDtBQUFBLE1BZ0JDQyxPQWhCRCxHQXFCSWxCLEtBckJKLENBZ0JDa0IsT0FoQkQ7QUFBQSxNQWlCQ0MsSUFqQkQsR0FxQkluQixLQXJCSixDQWlCQ21CLElBakJEO0FBQUEsTUFrQkNDLFFBbEJELEdBcUJJcEIsS0FyQkosQ0FrQkNvQixRQWxCRDtBQUFBLE1BbUJDQyxXQW5CRCxHQXFCSXJCLEtBckJKLENBbUJDcUIsV0FuQkQ7QUFBQSxNQW9CSUMsSUFwQkoseUZBcUJJdEIsS0FyQko7O0FBdUJBLE1BQU11QixRQUFRLEdBQUdwQixLQUFLLEdBQUdxQixpREFBTSxDQUFDckIsS0FBRCxDQUFULEdBQW1CLElBQXpDO0FBRUEsTUFBTXNCLFVBQVUsR0FBRztBQUNsQm5CLE1BQUUsRUFBRkEsRUFEa0I7QUFFbEJDLFVBQU0sRUFBTkEsTUFGa0I7QUFHbEJDLGtCQUFjLEVBQWRBLGNBSGtCO0FBSWxCQyxhQUFTLEVBQVRBLFNBSmtCO0FBS2xCdUMsWUFBUSxFQUFSQSxRQUxrQjtBQU1sQnRDLFNBQUssRUFBTEEsS0FOa0I7QUFPbEJDLFNBQUssRUFBTEEsS0FQa0I7QUFRbEJDLFNBQUssRUFBTEEsS0FSa0I7QUFTbEJDLFFBQUksRUFBSkEsSUFUa0I7QUFVbEJDLGdCQUFZLEVBQVpBLFlBVmtCO0FBV2xCQyxZQUFRLEVBQVJBLFFBWGtCO0FBWWxCQyxTQUFLLEVBQUxBLEtBWmtCO0FBYWxCQyxpQkFBYSxFQUFiQSxhQWJrQjtBQWNsQkMsV0FBTyxFQUFQQSxPQWRrQjtBQWVsQkMsUUFBSSxFQUFKQSxJQWZrQjtBQWdCbEJDLFlBQVEsRUFBUkEsUUFoQmtCO0FBaUJsQkMsZUFBVyxFQUFYQTtBQWpCa0IsR0FBbkI7QUFvQkEsc0JBQ0MsOERBQUMseURBQUQsa0NBQ0tDLElBREw7QUFFQyxZQUFRLEVBQUVDLFFBRlg7QUFHQyxZQUFRLEVBQUUsa0JBQUFHLElBQUksRUFBSTtBQUNqQixVQUFJdEIsU0FBSixFQUFjQSxTQUFRLENBQUNzQixJQUFJLEdBQUdDLHNEQUFXLENBQUNELElBQUQsQ0FBZCxHQUF1QixJQUE1QixDQUFSO0FBQ2QsS0FMRjtBQU1DLGVBQVcsZUFBRSw4REFBQyxvREFBRCxvQkFBV0QsVUFBWDtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBTmQ7QUFPQyxzQkFBa0IsRUFBRTZCLGNBUHJCO0FBUUMsY0FBVSxFQUFDO0FBUlo7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUREO0FBWUE7TUExRGVNLGM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDM0VoQjtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FBRUEsSUFBTS9ELENBQUMsR0FBR0MsNENBQUssQ0FBQyxtQ0FBRCxDQUFmO0FBY08sU0FBUytELGVBQVQsQ0FBeUI3RCxLQUF6QixFQUFtRTtBQUN6RSxNQUNDRyxLQURELEdBdUJJSCxLQXZCSixDQUNDRyxLQUREO0FBQUEsTUFFQ0MsU0FGRCxHQXVCSUosS0F2QkosQ0FFQ0ksUUFGRDtBQUFBLE1BR0NFLEVBSEQsR0F1QklOLEtBdkJKLENBR0NNLEVBSEQ7QUFBQSxNQUlDQyxNQUpELEdBdUJJUCxLQXZCSixDQUlDTyxNQUpEO0FBQUEsTUFLQ0MsY0FMRCxHQXVCSVIsS0F2QkosQ0FLQ1EsY0FMRDtBQUFBLE1BTUNDLFNBTkQsR0F1QklULEtBdkJKLENBTUNTLFNBTkQ7QUFBQSxNQU9DdUMsUUFQRCxHQXVCSWhELEtBdkJKLENBT0NnRCxRQVBEO0FBQUEsTUFRQ3RDLEtBUkQsR0F1QklWLEtBdkJKLENBUUNVLEtBUkQ7QUFBQSxNQVNDQyxLQVRELEdBdUJJWCxLQXZCSixDQVNDVyxLQVREO0FBQUEsTUFVQ0MsS0FWRCxHQXVCSVosS0F2QkosQ0FVQ1ksS0FWRDtBQUFBLE1BV0NDLElBWEQsR0F1QkliLEtBdkJKLENBV0NhLElBWEQ7QUFBQSxNQVlDQyxZQVpELEdBdUJJZCxLQXZCSixDQVlDYyxZQVpEO0FBQUEsTUFhQ0MsUUFiRCxHQXVCSWYsS0F2QkosQ0FhQ2UsUUFiRDtBQUFBLE1BY0NDLEtBZEQsR0F1QkloQixLQXZCSixDQWNDZ0IsS0FkRDtBQUFBLE1BZUNDLGFBZkQsR0F1QklqQixLQXZCSixDQWVDaUIsYUFmRDtBQUFBLE1BZ0JDQyxPQWhCRCxHQXVCSWxCLEtBdkJKLENBZ0JDa0IsT0FoQkQ7QUFBQSxNQWlCQ0MsSUFqQkQsR0F1QkluQixLQXZCSixDQWlCQ21CLElBakJEO0FBQUEsTUFrQkNDLFFBbEJELEdBdUJJcEIsS0F2QkosQ0FrQkNvQixRQWxCRDtBQUFBLE1BbUJDQyxXQW5CRCxHQXVCSXJCLEtBdkJKLENBbUJDcUIsV0FuQkQ7QUFBQSxNQW9CQ3BCLE9BcEJELEdBdUJJRCxLQXZCSixDQW9CQ0MsT0FwQkQ7QUFBQSxNQXFCQ0MsT0FyQkQsR0F1QklGLEtBdkJKLENBcUJDRSxPQXJCRDtBQUFBLE1Bc0JJb0IsSUF0QkoseUZBdUJJdEIsS0F2Qko7O0FBeUJBLE1BQU11QixRQUFRLEdBQUdwQixLQUFLLEdBQUdxQixpREFBTSxDQUFDckIsS0FBRCxDQUFULEdBQW1CLElBQXpDO0FBRUEsTUFBTXNCLFVBQVUsR0FBRztBQUNsQm5CLE1BQUUsRUFBRkEsRUFEa0I7QUFFbEJDLFVBQU0sRUFBTkEsTUFGa0I7QUFHbEJDLGtCQUFjLEVBQWRBLGNBSGtCO0FBSWxCQyxhQUFTLEVBQVRBLFNBSmtCO0FBS2xCdUMsWUFBUSxFQUFSQSxRQUxrQjtBQU1sQnRDLFNBQUssRUFBTEEsS0FOa0I7QUFPbEJDLFNBQUssRUFBTEEsS0FQa0I7QUFRbEJDLFNBQUssRUFBTEEsS0FSa0I7QUFTbEJDLFFBQUksRUFBSkEsSUFUa0I7QUFVbEJDLGdCQUFZLEVBQVpBLFlBVmtCO0FBV2xCQyxZQUFRLEVBQVJBLFFBWGtCO0FBWWxCQyxTQUFLLEVBQUxBLEtBWmtCO0FBYWxCQyxpQkFBYSxFQUFiQSxhQWJrQjtBQWNsQkMsV0FBTyxFQUFQQSxPQWRrQjtBQWVsQkMsUUFBSSxFQUFKQSxJQWZrQjtBQWdCbEJDLFlBQVEsRUFBUkEsUUFoQmtCO0FBaUJsQkMsZUFBVyxFQUFYQTtBQWpCa0IsR0FBbkI7QUFvQkEsc0JBQ0MsOERBQUMseURBQUQsa0NBQ0tDLElBREw7QUFFQyxZQUFRLEVBQUVDLFFBRlg7QUFHQyxZQUFRLEVBQUUsa0JBQUFHLElBQUksRUFBSTtBQUNqQixVQUFJdEIsU0FBSixFQUFjQSxTQUFRLENBQUNzQixJQUFJLEdBQUdDLHNEQUFXLENBQUNELElBQUQsQ0FBZCxHQUF1Qm9DLFNBQTVCLENBQVI7QUFDZCxLQUxGO0FBTUMsZUFBVyxlQUFFLDhEQUFDLG9EQUFELG9CQUFXckMsVUFBWDtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBTmQ7QUFPQyxjQUFVLEVBQUMsV0FQWjtBQVFDLHVCQUFtQixNQVJwQjtBQVNDLFdBQU8sRUFBRUQsaURBQU0sQ0FBQyxDQUFBdkIsT0FBTyxTQUFQLElBQUFBLE9BQU8sV0FBUCxZQUFBQSxPQUFPLENBQUU4RCxjQUFULENBQXdCLENBQXhCLE1BQThCcEIsK0RBQUEsQ0FBcUIsQ0FBckIsQ0FBL0IsQ0FUaEI7QUFVQyxXQUFPLEVBQUVuQixpREFBTSxDQUFDLENBQUF0QixPQUFPLFNBQVAsSUFBQUEsT0FBTyxXQUFQLFlBQUFBLE9BQU8sQ0FBRThELFVBQVQsQ0FBb0IsQ0FBcEIsRUFBdUJELGNBQXZCLENBQXNDLENBQXRDLEVBQXlDRSxTQUF6QyxDQUFtRCxDQUFuRCxNQUF5RHRCLHdEQUFBLEdBQWdCdUIsU0FBaEIsQ0FBMEIsRUFBMUIsQ0FBMUQ7QUFWaEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUREO0FBY0E7S0E5RGVMLGU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdEJoQjtBQUNBO0FBQ0E7O0FBRUEsSUFBTWhFLENBQUMsR0FBR0MsNENBQUssQ0FBQyw4QkFBRCxDQUFmO0FBV08sU0FBU3FFLFVBQVQsQ0FBb0JuRSxLQUFwQixFQUE2RTtBQUNuRixNQUFNb0UsUUFBUSxHQUFHLElBQUlDLElBQUosR0FBV0MsV0FBWCxFQUFqQjs7QUFDQSxNQUFPbkUsS0FBUCxHQUFzRkgsS0FBdEYsQ0FBT0csS0FBUDtBQUFBLHVCQUFzRkgsS0FBdEYsQ0FBY3VFLE9BQWQ7QUFBQSxNQUFjQSxPQUFkLCtCQUF3QixJQUF4QjtBQUFBLHVCQUFzRnZFLEtBQXRGLENBQThCd0UsT0FBOUI7QUFBQSxNQUE4QkEsT0FBOUIsK0JBQXdDSixRQUF4QztBQUFBLE1BQWtEaEUsU0FBbEQsR0FBc0ZKLEtBQXRGLENBQWtESSxRQUFsRDtBQUFBLE1BQTREQyxNQUE1RCxHQUFzRkwsS0FBdEYsQ0FBNERLLE1BQTVEO0FBQUEsTUFBb0VLLEtBQXBFLEdBQXNGVixLQUF0RixDQUFvRVUsS0FBcEU7QUFBQSxNQUE4RVksSUFBOUUseUZBQXNGdEIsS0FBdEY7O0FBRUEsTUFBTXlFLGNBQW1DLEdBQUcsRUFBNUM7O0FBQ0EsT0FBSyxJQUFJQyxDQUFDLEdBQUdGLE9BQWIsRUFBc0JFLENBQUMsSUFBSUgsT0FBM0IsRUFBb0NHLENBQUMsRUFBckMsRUFBeUM7QUFDeENELGtCQUFjLENBQUNFLElBQWYsQ0FBb0I7QUFBQ3hFLFdBQUssRUFBRXVFLENBQVI7QUFBV3JDLFVBQUksRUFBRXFDLENBQUMsQ0FBQ0UsUUFBRixFQUFqQjtBQUErQnRDLFNBQUcsRUFBRW9DO0FBQXBDLEtBQXBCO0FBQ0E7O0FBRUQsc0JBQ0MsOERBQUMsc0RBQUQ7QUFBUyxTQUFLLE1BQWQ7QUFBZSxXQUFPLE1BQXRCO0FBQXVCLFNBQUssRUFBRTtBQUFDRyxhQUFPLEVBQUUsQ0FBVjtBQUFhQyxZQUFNLEVBQUU7QUFBckI7QUFBOUIsS0FBMkR4RCxJQUEzRDtBQUFBLDRCQUNDLDhEQUFDLHFEQUFEO0FBQ0MsV0FBSyxNQUROO0FBRUMsVUFBSSxNQUZMO0FBR0MsVUFBSSxFQUFDLFFBSE47QUFJQyxXQUFLLEVBQUVaLEtBQUssR0FBRyxLQUFILEdBQVcsT0FKeEI7QUFLQyxjQUFRLEVBQUVQLEtBQUssSUFBSW9FLE9BTHBCO0FBTUMsYUFBTyxFQUFFLG1CQUFNO0FBQ2QsWUFBSW5FLFNBQUosRUFBY0EsU0FBUSxDQUFDRCxLQUFLLEdBQUcsQ0FBVCxDQUFSO0FBQ2QsT0FSRjtBQVNDLFlBQU0sRUFBRUUsTUFUVDtBQUFBLDZCQVdDLDhEQUFDLG1EQUFEO0FBQU0sWUFBSSxFQUFDO0FBQVg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVhEO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFERCxlQWNDLDhEQUFDLHVEQUFEO0FBQ0MsVUFBSSxlQUFFO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FEUDtBQUVDLFlBQU0sTUFGUDtBQUdDLFdBQUssTUFITjtBQUlDLGVBQVMsTUFKVjtBQUtDLFdBQUssRUFBRUYsS0FMUjtBQU1DLGFBQU8sRUFBRXNFLGNBTlY7QUFPQyxjQUFRLEVBQUUsa0JBQUNNLENBQUQsRUFBSUMsR0FBSixFQUFZO0FBQ3JCLFlBQUksT0FBT0EsR0FBRyxDQUFDN0UsS0FBWCxLQUFxQixRQUFyQixJQUFpQ0MsU0FBckMsRUFBK0NBLFNBQVEsQ0FBQzRFLEdBQUcsQ0FBQzdFLEtBQUwsQ0FBUjtBQUMvQyxPQVRGO0FBVUMsV0FBSyxFQUFFTyxLQVZSO0FBV0MsWUFBTSxFQUFFTDtBQVhUO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFkRCxlQTJCQyw4REFBQyxxREFBRDtBQUNDLFdBQUssTUFETjtBQUVDLFVBQUksTUFGTDtBQUdDLFVBQUksRUFBQyxRQUhOO0FBSUMsV0FBSyxFQUFFSyxLQUFLLEdBQUcsS0FBSCxHQUFXLE9BSnhCO0FBS0MsY0FBUSxFQUFFUCxLQUFLLElBQUlxRSxPQUxwQjtBQU1DLGFBQU8sRUFBRSxtQkFBTTtBQUNkLFlBQUlwRSxTQUFKLEVBQWNBLFNBQVEsQ0FBQ0QsS0FBSyxHQUFHLENBQVQsQ0FBUjtBQUNkLE9BUkY7QUFTQyxZQUFNLEVBQUVFLE1BVFQ7QUFVQyxXQUFLLEVBQUU7QUFBQzRFLG1CQUFXLEVBQUU7QUFBZCxPQVZSO0FBQUEsNkJBWUMsOERBQUMsbURBQUQ7QUFBTSxZQUFJLEVBQUM7QUFBWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWkQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQTNCRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFERDtBQTRDQTtLQXJEZWQsVTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDZmhCO0FBQ0E7QUFDQTtBQUVBOztBQUVBLElBQU10RSxDQUFDLEdBQUdDLDRDQUFLLENBQUMseUJBQUQsQ0FBZjtBQUVPLFNBQVNvRixLQUFULENBQTJEbEYsS0FBM0QsRUFBdUY7QUFBQTs7QUFDN0YsTUFBTW1GLElBQUksR0FBR0MsbURBQVEsQ0FBU3BGLEtBQVQsQ0FBckI7QUFDQSxNQUFPcUYsU0FBUCxHQUFnRHJGLEtBQWhELENBQU9xRixTQUFQO0FBQUEsTUFBa0JDLE1BQWxCLEdBQWdEdEYsS0FBaEQsQ0FBa0JzRixNQUFsQjtBQUFBLE1BQTBCQyxRQUExQixHQUFnRHZGLEtBQWhELENBQTBCdUYsUUFBMUI7QUFBQSxNQUFvQ0MsUUFBcEMsR0FBZ0R4RixLQUFoRCxDQUFvQ3dGLFFBQXBDLENBRjZGLENBSTdGOztBQUNBQyxrRUFBQSxDQUEwQkQsUUFBMUIsRUFBb0M7QUFBQSxXQUFNTCxJQUFOO0FBQUEsR0FBcEM7QUFFQSxNQUFJTyxLQUFLLEdBQUcsSUFBWjs7QUFDQSxNQUFJTCxTQUFKLEVBQWU7QUFDZDtBQUNBSyxTQUFLLGdCQUFHRCwwREFBQSxDQUFvQkosU0FBcEIsRUFBK0JGLElBQS9CLENBQVI7QUFDQSxHQUhELE1BR08sSUFBSUcsTUFBSixFQUFZO0FBQ2xCSSxTQUFLLEdBQUdKLE1BQU0sQ0FBQ0gsSUFBRCxDQUFkO0FBQ0EsR0FGTSxNQUVBLElBQUlJLFFBQUosRUFBYztBQUNwQixRQUFJSSxrREFBVSxDQUFDSixRQUFELENBQWQsRUFBMEI7QUFDekJHLFdBQUssR0FBSUgsUUFBRCxDQUEyREosSUFBM0QsQ0FBUjtBQUNBLEtBRkQsTUFFTyxJQUFJLENBQUNTLHVEQUFlLENBQUNMLFFBQUQsQ0FBcEIsRUFBZ0M7QUFDdENHLFdBQUssR0FBR0QsMERBQUEsQ0FBb0JGLFFBQXBCLENBQVI7QUFDQTtBQUNEOztBQUVELHNCQUFPLDhEQUFDLGtEQUFEO0FBQWdCLFNBQUssRUFBRUosSUFBdkI7QUFBQSxjQUE4Qk87QUFBOUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUFQO0FBQ0E7O0dBdEJlUixLO1VBQ0ZFLCtDOzs7S0FERUYsSzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDUmhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHTyxTQUFTRSxRQUFULENBQW1GUyxNQUFuRixFQUErSDtBQUFBOztBQUNySSxNQUFPUCxNQUFQLEdBQW9DTyxNQUFwQyxDQUFPUCxNQUFQO0FBQUEsTUFBZUMsUUFBZixHQUFvQ00sTUFBcEMsQ0FBZU4sUUFBZjtBQUFBLE1BQTRCakUsSUFBNUIseUZBQW9DdUUsTUFBcEMsMEJBRHFJLENBRXJJOzs7QUFDQSxNQUFNQyxNQUFNLEdBQUdDLGlEQUFTLENBQUN6RSxJQUFELENBQXhCO0FBRUEwRSxrREFBUyxDQUFDLFlBQU07QUFDZixRQUFJSCxNQUFNLENBQUNJLFVBQVgsRUFBdUJKLE1BQU0sQ0FBQ0ksVUFBUCxDQUFrQkgsTUFBTSxDQUFDSSxPQUF6QjtBQUN2QixHQUZRLEVBRU4sQ0FBQ0osTUFBTSxDQUFDSSxPQUFSLEVBQWlCTCxNQUFNLENBQUNJLFVBQXhCLENBRk0sQ0FBVCxDQUxxSSxDQVNySTs7QUFDQUQsa0RBQVMsQ0FBQyxZQUFNO0FBQ2YsUUFBSUgsTUFBTSxDQUFDTSxXQUFYLEVBQXdCTixNQUFNLENBQUNNLFdBQVAsQ0FBbUJMLE1BQU0sQ0FBQ00sVUFBMUI7QUFDeEIsR0FGUSxFQUVOLENBQUNOLE1BQU0sQ0FBQ00sVUFBUixFQUFvQlAsTUFBTSxDQUFDTSxXQUEzQixDQUZNLENBQVQsQ0FWcUksQ0Fjckk7O0FBQ0FILGtEQUFTLENBQUMsWUFBTTtBQUNmLFFBQUlILE1BQU0sQ0FBQ3pGLFFBQVgsRUFBcUJ5RixNQUFNLENBQUN6RixRQUFQLENBQWdCMEYsTUFBTSxDQUFDTyxNQUF2QjtBQUNyQixHQUZRLEVBRU4sQ0FBQ1AsTUFBTSxDQUFDTyxNQUFSLENBRk0sQ0FBVCxDQWZxSSxDQW1Cckk7O0FBQ0Esa0JBQXdDQywrQ0FBUSxDQUFDLEtBQUQsQ0FBaEQ7QUFBQTtBQUFBLE1BQU9DLFlBQVA7QUFBQSxNQUFxQkMsZUFBckI7O0FBQ0FSLGtEQUFTLENBQUMsWUFBTTtBQUNmLFFBQUlILE1BQU0sQ0FBQ25GLEtBQVAsSUFBZ0JtRixNQUFNLENBQUNuRixLQUFQLENBQWErRixPQUE3QixJQUF3QyxDQUFDWCxNQUFNLENBQUNZLFlBQXBELEVBQWtFO0FBQ2pFRixxQkFBZSxDQUFDLElBQUQsQ0FBZjtBQUNBO0FBQ0QsR0FKUSxFQUlOLENBQUNWLE1BQU0sQ0FBQ08sTUFBUixFQUFnQlIsTUFBTSxDQUFDbkYsS0FBdkIsQ0FKTSxDQUFULENBckJxSSxDQTJCckk7O0FBQ0EsTUFBTWlHLFlBQVksR0FBR0MsMkNBQU8sQ0FBZ0RkLE1BQU0sQ0FBQ2UsTUFBdkQsQ0FBNUI7QUFDQSxNQUFNQyxXQUFXLEdBQUdGLDJDQUFPLENBQWlEZCxNQUFNLENBQUNpQixPQUF4RCxDQUEzQixDQTdCcUksQ0ErQnJJO0FBQ0E7O0FBQ0EsTUFBTUMsUUFBa0IsR0FBR0Msa0RBQUksQ0FDOUJDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZUixZQUFaLEVBQTBCUyxNQUExQixDQUEyQyxVQUFDQyxJQUFELEVBQU9sSCxLQUFQLEVBQWlCO0FBQzNELFFBQU1tSCxTQUFTLEdBQUdSLFdBQVcsQ0FBQzNHLEtBQUQsQ0FBN0I7O0FBQ0EsUUFBSW1ILFNBQVMsSUFBSXhCLE1BQU0sQ0FBQ3lCLFdBQVAsR0FBcUIsQ0FBdEMsRUFBeUM7QUFDeEMsdUdBQVdGLElBQVgsSUFBaUJHLGlEQUFHLENBQUNiLFlBQUQsRUFBZXhHLEtBQWYsQ0FBcEI7QUFDQTs7QUFDRCxXQUFPa0gsSUFBUDtBQUNBLEdBTkQsRUFNRyxFQU5ILENBRDhCLENBQS9CLENBakNxSSxDQTJDckk7O0FBQ0EsTUFBSVIsTUFBZ0IsR0FBRyxFQUF2QjtBQUNBLE1BQUlZLFdBQVcsR0FBRyxFQUFsQjs7QUFDQSxNQUFJNUIsTUFBTSxDQUFDbkYsS0FBUCxJQUFnQm1GLE1BQU0sQ0FBQ25GLEtBQVAsQ0FBYStGLE9BQWpDLEVBQTBDO0FBQ3pDLFFBQUlaLE1BQU0sQ0FBQ25GLEtBQVAsQ0FBYWdILGFBQWpCLEVBQWdDO0FBQy9CYixZQUFNLEdBQUdoQixNQUFNLENBQUNuRixLQUFQLENBQWFnSCxhQUFiLENBQTJCTixNQUEzQixDQUFrQyxVQUFDQyxJQUFELEVBQU92RSxDQUFQLEVBQWE7QUFDdkQsWUFBSUEsQ0FBQyxDQUFDMkQsT0FBTixFQUFlLGlHQUFXWSxJQUFYLElBQWlCdkUsQ0FBQyxDQUFDMkQsT0FBbkI7QUFDZixlQUFPWSxJQUFQO0FBQ0EsT0FIUSxFQUdOLEVBSE0sQ0FBVDtBQUlBLEtBTEQsTUFLTztBQUNOLFVBQU1NLFlBQVksR0FBRzlCLE1BQU0sQ0FBQ25GLEtBQVAsQ0FBYStGLE9BQWIsQ0FBcUJtQixLQUFyQixDQUEyQi9CLE1BQU0sQ0FBQ25GLEtBQVAsQ0FBYStGLE9BQWIsQ0FBcUJvQixPQUFyQixDQUE2QixJQUE3QixJQUFxQyxDQUFoRSxDQUFyQjtBQUNBaEIsWUFBTSxDQUFDbEMsSUFBUCxDQUFZZ0QsWUFBWjtBQUNBOztBQUNERixlQUFXLEdBQUc1QixNQUFNLENBQUNuRixLQUFQLENBQWErRixPQUFiLENBQXFCbUIsS0FBckIsQ0FBMkIsQ0FBM0IsRUFBOEIvQixNQUFNLENBQUNuRixLQUFQLENBQWErRixPQUFiLENBQXFCb0IsT0FBckIsQ0FBNkIsSUFBN0IsQ0FBOUIsQ0FBZDtBQUNBOztBQUNEaEIsUUFBTSxHQUFHSSxrREFBSSxDQUFDSixNQUFELENBQWIsQ0ExRHFJLENBNERySTs7QUFDQSxNQUFNaUIsV0FBVyxHQUFHLEVBQUVoQyxNQUFNLENBQUNJLE9BQVAsSUFBa0JjLFFBQVEsQ0FBQ2UsTUFBVCxLQUFvQixDQUF4QyxDQUFwQjtBQUNBLE1BQU1DLFNBQVMsR0FBR25CLE1BQU0sQ0FBQ2tCLE1BQVAsR0FBZ0IsQ0FBbEMsQ0E5RHFJLENBZ0VySTs7QUFDQSxXQUFTRSxjQUFULEdBQTBCO0FBQUE7O0FBQ3pCLFFBQUksQ0FBQ0gsV0FBRCxJQUFnQixDQUFDRSxTQUFyQixFQUFnQyxPQUFPLElBQVA7QUFDaEMsd0JBQ0MsK0RBQUMsdURBQUQ7QUFBUyxhQUFPLEVBQUVGLFdBQWxCO0FBQStCLFdBQUssRUFBRUUsU0FBUyxJQUFJLENBQUNGLFdBQXBEO0FBQUEsOEJBQ0MsK0RBQUMsOERBQUQ7QUFBQSxrQkFBaUJBLFdBQVcsR0FBRywrQkFBSCxhQUF3Q0wsV0FBeEM7QUFBNUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQURELGVBR0MsK0RBQUMsdURBQUQ7QUFBUyxhQUFLLEVBQUU7QUFBQ1Msa0JBQVEsRUFBRSxNQUFYO0FBQW1CQyxtQkFBUyxFQUFFO0FBQTlCLFNBQWhCO0FBQUEsa0JBQ0UsQ0FBQ0wsV0FBVyxHQUFHZCxRQUFILEdBQWNILE1BQTFCLEVBQWtDdUIsR0FBbEMsQ0FBc0MsVUFBQUMsR0FBRztBQUFBLDhCQUN6QztBQUFBLHNCQUFnQkE7QUFBaEIsYUFBVUEsR0FBVjtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUR5QztBQUFBLFNBQXpDO0FBREY7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQUhEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUREO0FBV0EsR0E5RW9JLENBZ0ZySTs7O0FBQ0EsV0FBU0MsVUFBVCxDQUFvQkMsU0FBcEIsRUFBK0Q7QUFDOUQsV0FBTyxDQUFDLENBQUMsQ0FBQ0Msc0RBQVEsQ0FBQ0QsU0FBRCxDQUFSLENBQW9CekMsTUFBTSxDQUFDaUIsT0FBM0IsQ0FBRixJQUF5Q2pCLE1BQU0sQ0FBQ3lCLFdBQVAsR0FBcUIsQ0FBL0QsS0FBcUUsQ0FBQyxDQUFDaUIsc0RBQVEsQ0FBQ0QsU0FBRCxDQUFSLENBQW9CekMsTUFBTSxDQUFDZSxNQUEzQixDQUE5RTtBQUNBLEdBbkZvSSxDQXFGckk7OztBQUNBLFdBQVM0QixZQUFULENBQXNCMUQsQ0FBdEIsRUFBNEQ7QUFDM0R5QixtQkFBZSxDQUFDLEtBQUQsQ0FBZjtBQUNBVixVQUFNLENBQUMyQyxZQUFQLENBQW9CMUQsQ0FBcEI7QUFDQTs7QUFFRCx5Q0FDSWUsTUFESjtBQUVDa0MsYUFBUyxFQUFFQSxTQUFTLElBQUksQ0FBQ3pCLFlBRjFCO0FBR0N1QixlQUFXLEVBQVhBLFdBSEQ7QUFJQzVCLFdBQU8sRUFBRSxDQUFDNEIsV0FKWDtBQUtDNUcsV0FBTyxFQUFFMkUsTUFBTSxDQUFDM0UsT0FBUCxHQUFpQjJFLE1BQU0sQ0FBQzNFLE9BQXhCLEdBQWtDLEtBTDVDO0FBTUN3SCxrQkFBYyxFQUFFWixXQUFXLElBQUloQyxNQUFNLENBQUNZLFlBTnZDO0FBT0NpQyxzQkFBa0IsRUFBRXBDLFlBUHJCO0FBUUNxQyxhQUFTLEVBQUVaLFNBQVMsSUFBSSxDQUFDRixXQUFkLElBQTZCLENBQUN2QixZQUE5QixJQUE4QyxDQUFDVCxNQUFNLENBQUNZLFlBUmxFO0FBUWdGO0FBQy9FdUIsa0JBQWMsRUFBZEEsY0FURDtBQVVDSyxjQUFVLEVBQVZBLFVBVkQ7QUFXQ0csZ0JBQVksRUFBWkE7QUFYRDtBQWFBOztHQXhHZXJELFE7VUFHQVcsNkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWmhCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQU1sRyxDQUFDLEdBQUdDLDRDQUFLLENBQUMscUNBQUQsQ0FBZjtBQU1PLFNBQVMrSSxlQUFULE9BQW9HO0FBQUE7O0FBQUEsTUFBMUVDLFFBQTBFLFFBQTFFQSxRQUEwRTtBQUFBLE1BQTdEeEgsSUFBNkQ7O0FBQzFHLGtCQUF3QmdGLCtDQUFRLEVBQWhDO0FBQUE7QUFBQSxNQUFPeUMsSUFBUDtBQUFBLE1BQWFDLE9BQWI7O0FBRUFoRCxrREFBUyxDQUFDLFlBQU07QUFDZixRQUFJOEMsUUFBSixFQUFjQSxRQUFRLENBQUNDLElBQUQsQ0FBUjtBQUNkLEdBRlEsRUFFTixDQUFDQSxJQUFELENBRk0sQ0FBVDs7QUFJQSxXQUFTRSxRQUFULENBQWtCQyxVQUFsQixFQUF3QztBQUN2QyxRQUFNQyxVQUFVLEdBQUdELFVBQVUsQ0FBQ0UsTUFBWCxDQUFrQixVQUFBQyxDQUFDO0FBQUEsYUFBSUEsQ0FBQyxLQUFLLEdBQU4sSUFBYUEsQ0FBQyxLQUFLLEdBQXZCO0FBQUEsS0FBbkIsRUFBK0NDLElBQS9DLENBQW9ELEVBQXBELENBQW5COztBQUVBLFFBQUlILFVBQVUsQ0FBQyxDQUFELENBQVYsS0FBa0IsR0FBdEIsRUFBMkI7QUFDMUI7QUFDQUgsYUFBTyxDQUFDTyx1RUFBRCxDQUFQO0FBQ0EsS0FIRCxNQUdPLElBQ0xDLFFBQVEsQ0FBQ0wsVUFBVSxDQUFDTSxNQUFYLENBQWtCLENBQWxCLEVBQXFCLENBQXJCLENBQUQsRUFBMEIsRUFBMUIsQ0FBUixHQUF3QyxFQUF4QyxJQUE4Q0QsUUFBUSxDQUFDTCxVQUFVLENBQUNNLE1BQVgsQ0FBa0IsQ0FBbEIsRUFBcUIsQ0FBckIsQ0FBRCxFQUEwQixFQUExQixDQUFSLEdBQXdDLEVBQXZGLElBQ0NELFFBQVEsQ0FBQ0wsVUFBVSxDQUFDTSxNQUFYLENBQWtCLENBQWxCLEVBQXFCLENBQXJCLENBQUQsRUFBMEIsRUFBMUIsQ0FBUixHQUF3QyxJQUF4QyxJQUFnREQsUUFBUSxDQUFDTCxVQUFVLENBQUNNLE1BQVgsQ0FBa0IsQ0FBbEIsRUFBcUIsQ0FBckIsQ0FBRCxFQUEwQixFQUExQixDQUFSLEdBQXdDLElBRm5GLEVBR0w7QUFDRDtBQUNBVCxhQUFPLENBQUNPLDZFQUFELENBQVA7QUFDQSxLQU5NLE1BTUE7QUFDTlAsYUFBTyxDQUFDbEYsU0FBRCxDQUFQO0FBQ0E7O0FBQ0QsV0FBT3FGLFVBQVUsQ0FBQ3BCLE1BQVgsS0FBc0IsRUFBN0I7QUFDQTs7QUFFRCxNQUFNMkIsY0FBd0MsR0FBRztBQUNoREMsUUFBSSxFQUFFLHFCQUQwQztBQUVoREMsY0FBVSxFQUFFWCxRQUZvQztBQUdoRFksY0FBVSxFQUFFO0FBSG9DLEdBQWpEO0FBTUEsc0JBQU8sOERBQUMscURBQUQ7QUFBYSxRQUFJLEVBQUVIO0FBQW5CLEtBQXVDcEksSUFBdkM7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUFQO0FBQ0E7O0dBaENldUgsZTs7S0FBQUEsZTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNYaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFNaEosQ0FBQyxHQUFHQyw0Q0FBSyxDQUFDLGlDQUFELENBQWY7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFVTyxTQUFTZ0ssV0FBVCxDQUFxQjlKLEtBQXJCLEVBQTZFO0FBQUE7O0FBQ25GLE1BQU84QixJQUFQLEdBQWlFOUIsS0FBakUsQ0FBTzhCLElBQVA7QUFBQSxNQUFhM0IsS0FBYixHQUFpRUgsS0FBakUsQ0FBYUcsS0FBYjtBQUFBLE1BQW9CQyxRQUFwQixHQUFpRUosS0FBakUsQ0FBb0JJLFFBQXBCO0FBQUEsTUFBOEJDLE1BQTlCLEdBQWlFTCxLQUFqRSxDQUE4QkssTUFBOUI7QUFBQSxNQUFzQ3NKLElBQXRDLEdBQWlFM0osS0FBakUsQ0FBc0MySixJQUF0QztBQUFBLE1BQTRDM0csUUFBNUMsR0FBaUVoRCxLQUFqRSxDQUE0Q2dELFFBQTVDO0FBQUEsTUFBeUQxQixJQUF6RCx5RkFBaUV0QixLQUFqRTs7QUFFQSxNQUFNK0osWUFBWSxHQUFHQyw2Q0FBTSxDQUEwQixJQUExQixDQUEzQjtBQUNBLE1BQU1DLFlBQVksR0FBR0QsNkNBQU0sQ0FBNEIsSUFBNUIsQ0FBM0I7QUFFQUUsZ0VBQW9CLENBQUMsWUFBTTtBQUMxQixRQUFJLENBQUNILFlBQVksQ0FBQ0ksT0FBbEIsRUFBMkIsTUFBTSxJQUFJQyxLQUFKLENBQVUsNkJBQVYsQ0FBTjtBQUUzQnZLLEtBQUMsQ0FBQyw4QkFBRCxDQUFEO0FBQ0FvSyxnQkFBWSxDQUFDRSxPQUFiLEdBQXVCLElBQUlFLGtEQUFKLGlDQUNuQlYsSUFEbUI7QUFFdEJXLGdCQUZzQix3QkFFVDtBQUFBOztBQUNaLFlBQUlsSyxRQUFKLEVBQWNBLFFBQVEsMEJBQUMySixZQUFZLENBQUNJLE9BQWQsMERBQUMsc0JBQXNCaEssS0FBdkIsQ0FBUjtBQUNkLFlBQUl3SixJQUFKLGFBQUlBLElBQUosZUFBSUEsSUFBSSxDQUFFVyxVQUFWLEVBQXNCWCxJQUFJLENBQUNXLFVBQUw7QUFDdEIsT0FMcUI7QUFNdEJDLGVBTnNCLHVCQU1WO0FBQ1gsWUFBSW5LLFFBQUosRUFBY0EsUUFBUTtBQUN0QixZQUFJdUosSUFBSixhQUFJQSxJQUFKLGVBQUlBLElBQUksQ0FBRVksU0FBVixFQUFxQlosSUFBSSxDQUFDWSxTQUFMO0FBQ3JCLE9BVHFCO0FBVXRCQyxrQkFWc0IsMEJBVVA7QUFBQTs7QUFDZCxZQUFJcEssUUFBSixFQUFjQSxRQUFRLDJCQUFDMkosWUFBWSxDQUFDSSxPQUFkLDJEQUFDLHVCQUFzQmhLLEtBQXZCLENBQVI7QUFDZCxZQUFJd0osSUFBSixhQUFJQSxJQUFKLGVBQUlBLElBQUksQ0FBRWEsWUFBVixFQUF3QmIsSUFBSSxDQUFDYSxZQUFMO0FBQ3hCO0FBYnFCLE9BQXZCO0FBZUFQLGdCQUFZLENBQUNFLE9BQWIsQ0FBcUJSLElBQXJCLENBQTBCSSxZQUFZLENBQUNJLE9BQXZDO0FBRUEsV0FBTyxZQUFNO0FBQ1osVUFBSUYsWUFBWSxDQUFDRSxPQUFqQixFQUEwQjtBQUN6QnRLLFNBQUMsQ0FBQyxpQ0FBRCxDQUFEO0FBQ0FvSyxvQkFBWSxDQUFDRSxPQUFiLENBQXFCTSxNQUFyQjtBQUNBUixvQkFBWSxDQUFDRSxPQUFiLEdBQXVCLElBQXZCO0FBQ0E7QUFDRCxLQU5EO0FBT0EsR0E1Qm1CLEVBNEJqQixDQUFDUixJQUFELENBNUJpQixDQUFwQixDQU5tRixDQW9DbkY7O0FBQ0EzRCxrREFBUyxDQUFDLFlBQU07QUFBQTs7QUFDZixRQUFJK0QsWUFBWSxDQUFDSSxPQUFiLElBQXdCLDJCQUFBSixZQUFZLENBQUNJLE9BQWIsa0ZBQXNCaEssS0FBdEIsTUFBZ0NBLEtBQXhELElBQWlFQSxLQUFLLEtBQUsyRCxTQUEvRSxFQUEwRjtBQUN6RmpFLE9BQUMsQ0FBQyxvQkFBRCxFQUF1Qk0sS0FBdkIsQ0FBRDtBQUNBNEosa0JBQVksQ0FBQ0ksT0FBYixDQUFxQmhLLEtBQXJCLEdBQTZCQSxLQUE3QjtBQUNBO0FBQ0QsR0FMUSxFQUtOLENBQUNBLEtBQUQsQ0FMTSxDQUFUO0FBT0Esc0JBQ0MsOERBQUMsb0RBQUQsa0NBQVdtQixJQUFYO0FBQUEsMkJBQ0M7QUFBTyxjQUFRLEVBQUUwQixRQUFqQjtBQUEyQixVQUFJLEVBQUVsQixJQUFqQztBQUF1QyxTQUFHLEVBQUVpSSxZQUE1QztBQUEwRCxZQUFNLEVBQUUxSjtBQUFsRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBREQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUREO0FBS0E7O0dBakRleUosVztVQU1mSSxnRTs7O0tBTmVKLFc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyQmhCO0FBQ0E7QUFDQTs7QUFFQSxJQUFNakssQ0FBQyxHQUFHQyw0Q0FBSyxDQUFDLGdDQUFELENBQWY7QUFNTyxTQUFTNEssVUFBVCxDQUFvQjFLLEtBQXBCLEVBQTZFO0FBQ25GLE1BQU8ySyxTQUFQLEdBQTZCM0ssS0FBN0IsQ0FBTzJLLFNBQVA7QUFBQSxNQUFxQnJKLElBQXJCLHlGQUE2QnRCLEtBQTdCOztBQUNBLE1BQU0ySixJQUFJLEdBQUc7QUFDWkEsUUFBSSxFQUFFZ0IsU0FBUyxHQUFHLHNEQUFILEdBQTRELHVDQUQvRDtBQUVaQyxVQUFNLEVBQUUsS0FGSTtBQUdaZixjQUFVLEVBQUU7QUFIQSxHQUFiO0FBTUEsc0JBQU8sOERBQUMscURBQUQsa0NBQWlCdkksSUFBakI7QUFBdUIsUUFBSSxFQUFFcUk7QUFBN0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUFQO0FBQ0E7S0FUZWUsVTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNWaEI7QUFDQTtBQUNBOztBQUVBLElBQU03SyxDQUFDLEdBQUdDLDRDQUFLLENBQUMsZ0NBQUQsQ0FBZjtBQVFPLFNBQVMrSyxVQUFULENBQW9CN0ssS0FBcEIsRUFBK0U7QUFDckYsTUFBT3VGLFFBQVAsR0FBNkN2RixLQUE3QyxDQUFPdUYsUUFBUDtBQUFBLE1BQWlCbkYsU0FBakIsR0FBNkNKLEtBQTdDLENBQWlCSSxRQUFqQjtBQUFBLE1BQTJCRCxLQUEzQixHQUE2Q0gsS0FBN0MsQ0FBMkJHLEtBQTNCO0FBQUEsTUFBcUNtQixJQUFyQyx5RkFBNkN0QixLQUE3Qzs7QUFFQSxzQkFDQyw4REFBQyx5REFBRCxrQ0FBZ0JzQixJQUFoQjtBQUFBLGNBQ0V3SiwrQ0FBQSxDQUFhOUssS0FBSyxDQUFDdUYsUUFBbkIsRUFBNkIsVUFBQUcsS0FBSyxFQUFJO0FBQ3RDLFVBQUksQ0FBQUEsS0FBSyxTQUFMLElBQUFBLEtBQUssV0FBTCxZQUFBQSxLQUFLLENBQUVxRCxJQUFQLE1BQWdCZ0Msd0RBQWhCLElBQTZCLENBQUFyRixLQUFLLFNBQUwsSUFBQUEsS0FBSyxXQUFMLFlBQUFBLEtBQUssQ0FBRXFELElBQVAsTUFBZ0JpQyxvREFBN0MsSUFBc0QsQ0FBQXRGLEtBQUssU0FBTCxJQUFBQSxLQUFLLFdBQUwsWUFBQUEsS0FBSyxDQUFFcUQsSUFBUCxNQUFnQmtDLHlEQUExRSxFQUFzRjtBQUNyRiw0QkFBT0MsbURBQVksQ0FBQ3hGLEtBQUQsRUFBUTtBQUMxQnRGLGtCQUFRLEVBQUUsa0JBQUN5QyxFQUFELEVBQVVzSSxJQUFWLEVBQThDO0FBQ3ZELGdCQUFJL0ssU0FBSixFQUFjQSxTQUFRLENBQUMrSyxJQUFJLENBQUNoTCxLQUFOLENBQVI7QUFDZCxXQUh5QjtBQUkxQmlMLGlCQUFPLEVBQUVqTCxLQUFLLEtBQUt1RixLQUFLLENBQUMxRixLQUFOLENBQVlHO0FBSkwsU0FBUixDQUFuQjtBQU1BOztBQUNELGFBQU91RixLQUFQO0FBQ0EsS0FWQTtBQURGO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFERDtBQWVBO0tBbEJlbUYsVTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWmhCO0FBQ0E7QUFDQTtBQUNBOztBQUlBLElBQU1oTCxDQUFDLEdBQUdDLDRDQUFLLENBQUMsOEJBQUQsQ0FBZjtBQVdPLFNBQVN1TCxRQUFULE9BQThGO0FBQUE7O0FBQUEsTUFBM0VDLGFBQTJFLFFBQTNFQSxhQUEyRTtBQUFBLE1BQTVEQyxTQUE0RCxRQUE1REEsU0FBNEQ7QUFBQSxNQUFqREMsS0FBaUQsUUFBakRBLEtBQWlEO0FBQUEsTUFBMUNDLElBQTBDLFFBQTFDQSxJQUEwQztBQUFBLE1BQXBDQyxRQUFvQyxRQUFwQ0EsUUFBb0M7QUFBQSxNQUExQm5HLFFBQTBCLFFBQTFCQSxRQUEwQjtBQUNwRyxNQUFNb0csTUFBTSxHQUFHM0IsNkNBQU0sRUFBckI7O0FBQ0Esa0JBQTRCMUQsK0NBQVEsRUFBcEM7QUFBQTtBQUFBLE1BQU9oQixNQUFQO0FBQUEsTUFBZXNHLFNBQWY7O0FBQ0EsbUJBQThCdEYsK0NBQVEsQ0FBVSxLQUFWLENBQXRDO0FBQUE7QUFBQSxNQUFPcEYsT0FBUDtBQUFBLE1BQWdCMkssVUFBaEI7O0FBQ0EsbUJBQWtDdkYsK0NBQVEsQ0FBVSxLQUFWLENBQTFDO0FBQUE7QUFBQSxNQUFPd0YsU0FBUDtBQUFBLE1BQWtCQyxZQUFsQjs7QUFFQS9GLGtEQUFTLENBQUMsWUFBTTtBQUNmMkYsVUFBTSxDQUFDeEIsT0FBUCxHQUFpQixJQUFJNkIscURBQUosQ0FBbUI7QUFDbkNWLG1CQUFhLEVBQWJBLGFBRG1DO0FBRW5DQyxlQUFTLEVBQVRBLFNBRm1DO0FBR25DQyxXQUFLLEVBQUxBLEtBSG1DO0FBSW5DQyxVQUFJLEVBQUpBLElBSm1DO0FBS25DQyxjQUFRLEVBQVJBO0FBTG1DLEtBQW5CLENBQWpCO0FBUUFDLFVBQU0sQ0FBQ3hCLE9BQVAsQ0FBZThCLEVBQWYsQ0FBa0IsUUFBbEIsRUFBNEIsVUFBQTVELEdBQUcsRUFBSTtBQUNsQ3VELGVBQVMsQ0FBQ3ZELEdBQUQsQ0FBVDtBQUNBd0QsZ0JBQVUsQ0FBQyxLQUFELENBQVY7QUFDQUQsZUFBUyxDQUFDOUgsU0FBRCxDQUFULENBSGtDLENBR1o7QUFDdEIsS0FKRDtBQUtBNkgsVUFBTSxDQUFDeEIsT0FBUCxDQUFlOEIsRUFBZixDQUFrQixjQUFsQixFQUFrQyxZQUFNO0FBQ3ZDSixnQkFBVSxDQUFDLElBQUQsQ0FBVjtBQUNBLEtBRkQ7QUFHQUYsVUFBTSxDQUFDeEIsT0FBUCxDQUFlOEIsRUFBZixDQUFrQixRQUFsQixFQUE0QixZQUFNO0FBQ2pDSixnQkFBVSxDQUFDLEtBQUQsQ0FBVjtBQUNBRCxlQUFTLENBQUM5SCxTQUFELENBQVQ7QUFDQSxLQUhEO0FBSUE2SCxVQUFNLENBQUN4QixPQUFQLENBQWU4QixFQUFmLENBQWtCLFNBQWxCLEVBQTZCLFlBQU07QUFDbENGLGtCQUFZLENBQUMsSUFBRCxDQUFaO0FBQ0EsS0FGRDtBQUdBSixVQUFNLENBQUN4QixPQUFQLENBQWU4QixFQUFmLENBQWtCLE9BQWxCLEVBQTJCLFlBQU07QUFDaENGLGtCQUFZLENBQUMsS0FBRCxDQUFaO0FBQ0EsS0FGRDtBQUlBLFdBQU8sWUFBTTtBQUNaLFVBQUlKLE1BQU0sQ0FBQ3hCLE9BQVgsRUFBb0J3QixNQUFNLENBQUN4QixPQUFQLENBQWUrQixLQUFmO0FBQ3BCLEtBRkQ7QUFHQSxHQS9CUSxFQStCTixDQUFDWixhQUFELEVBQWdCQyxTQUFoQixFQUEyQkMsS0FBM0IsRUFBa0NDLElBQWxDLEVBQXdDQyxRQUF4QyxDQS9CTSxDQUFUO0FBaUNBLHNCQUFPLDhEQUFDLHNFQUFEO0FBQTBCLFNBQUssRUFBRTtBQUFDQyxZQUFNLEVBQU5BLE1BQUQ7QUFBU1EsaUJBQVcsRUFBRTdHLE1BQXRCO0FBQThCcEUsYUFBTyxFQUFQQSxPQUE5QjtBQUF1QzRLLGVBQVMsRUFBVEE7QUFBdkMsS0FBakM7QUFBQSxjQUFxRnZHO0FBQXJGO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFBUDtBQUNBOztHQXhDZThGLFE7O0tBQUFBLFE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEJoQjtBQUlPLElBQU1lLGVBQWUsZ0JBQzNCM0csMERBQUEsQ0FFRTNCLFNBRkYsQ0FETSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0pQO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7QUNGTyxJQUFLdUksZ0JBQVo7O1dBQVlBLGdCO0FBQUFBLGtCO0FBQUFBLGtCO0FBQUFBLGtCO0dBQUFBLGdCLEtBQUFBLGdCOztBQU1MLElBQUtDLG9CQUFaOztXQUFZQSxvQjtBQUFBQSxzQjtBQUFBQSxzQjtBQUFBQSxzQjtBQUFBQSxzQjtBQUFBQSxzQjtBQUFBQSxzQjtBQUFBQSxzQjtBQUFBQSxzQjtBQUFBQSxzQjtHQUFBQSxvQixLQUFBQSxvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDTlo7QUFDQTtBQUNBO0FBQ0E7QUFHQSxJQUFNek0sQ0FBQyxHQUFHQyw0Q0FBSyxDQUFDLHVDQUFELENBQWY7O0FBV0EsU0FBU3lNLGVBQVQsQ0FBeUJsRSxHQUF6QixFQUE4Q3NELE1BQTlDLEVBQWlFO0FBQ2hFOUwsR0FBQyxDQUFDLGtCQUFELENBQUQ7O0FBQ0EsTUFBSXdJLEdBQUcsQ0FBQ21FLFVBQUosQ0FBZUMsT0FBZixDQUF1QjFFLE1BQXZCLEdBQWdDLENBQXBDLEVBQXVDO0FBQ3RDO0FBQ0EsUUFBTTJFLE1BQU0sR0FBR3JFLEdBQUcsQ0FBQ21FLFVBQUosQ0FBZUMsT0FBZixDQUF1QixDQUF2QixDQUFmO0FBQ0FkLFVBQU0sQ0FBQ2dCLElBQVAsQ0FDQ0MsSUFBSSxDQUFDQyxTQUFMLENBQWU7QUFDZEMsWUFBTSxFQUFFLG1CQURNO0FBRWRDLFVBQUksRUFBRUwsTUFBTSxDQUFDSztBQUZDLEtBQWYsQ0FERDtBQU1BO0FBQ0Q7O0FBRUQsU0FBU0MsZUFBVCxDQUF5QjNFLEdBQXpCLEVBQWtEc0QsTUFBbEQsRUFBcUVSLElBQXJFLEVBQStGO0FBQzlGdEwsR0FBQyw2QkFBc0J3SSxHQUFHLENBQUNxRSxNQUFKLENBQVdLLElBQWpDLEVBQUQ7QUFDQSxNQUFPeEIsU0FBUCxHQUEyQ0osSUFBM0MsQ0FBT0ksU0FBUDtBQUFBLE1BQWtCQyxLQUFsQixHQUEyQ0wsSUFBM0MsQ0FBa0JLLEtBQWxCO0FBQUEsTUFBeUJDLElBQXpCLEdBQTJDTixJQUEzQyxDQUF5Qk0sSUFBekI7QUFBQSxNQUErQkMsUUFBL0IsR0FBMkNQLElBQTNDLENBQStCTyxRQUEvQjtBQUNBQyxRQUFNLENBQUNnQixJQUFQLENBQ0NDLElBQUksQ0FBQ0MsU0FBTCxDQUFlO0FBQ2RDLFVBQU0sRUFBRSw2QkFETTtBQUVkRyxrQkFBYyxFQUFFO0FBQ2ZILFlBQU0sRUFBRSxnQkFETztBQUVmL0QsVUFBSSxFQUFFd0MsU0FBUyxJQUFJLGVBRko7QUFHZkMsV0FBSyxFQUFFQSxLQUFLLElBQUksQ0FIRDtBQUlmQyxVQUFJLEVBQUVBLElBQUksSUFBSSxLQUpDO0FBS2ZDLGNBQVEsRUFBRUEsUUFBUSxHQUNmO0FBQ0F3QixzQkFBYyxFQUFFeEI7QUFEaEIsT0FEZSxHQUlmO0FBQ0F3QixzQkFBYyxFQUFFYiwwREFBc0JjO0FBRHRDO0FBVFk7QUFGRixHQUFmLENBREQ7QUFrQkE7O0FBRUQsU0FBUzdILE1BQVQsQ0FBZ0IrQyxHQUFoQixFQUFvQzhDLElBQXBDLEVBQThEaUMsWUFBOUQsRUFBMEY7QUFDekZ2TixHQUFDLDJCQUFvQndJLEdBQUcsQ0FBQ1UsSUFBeEIsY0FBZ0NWLEdBQUcsQ0FBQ2dGLEtBQXBDLGNBQTZDaEYsR0FBRyxDQUFDaUYsTUFBakQsRUFBRDtBQUNBRixjQUFZLENBQUNHLElBQWIsQ0FBa0IsUUFBbEIsRUFBNEJsRixHQUE1QjtBQUNBOztBQUVNLElBQU0yRCxjQUFiO0FBQUE7O0FBQUE7O0FBSUMsMEJBQVliLElBQVosRUFBc0M7QUFBQTs7QUFBQTs7QUFDckM7QUFEcUMsVUFIOUJRLE1BRzhCO0FBQUEsVUFGOUI2QixPQUU4QjtBQUdyQyxVQUFLQSxPQUFMLEdBQWVyQyxJQUFmO0FBRUEsVUFBS1EsTUFBTCxHQUFjLElBQUk4QixTQUFKLENBQWN0QyxJQUFJLENBQUNHLGFBQUwsSUFBc0IscUJBQXBDLENBQWQ7O0FBRUEsVUFBS0ssTUFBTCxDQUFZK0IsTUFBWixHQUFxQixZQUFNO0FBQzFCN04sT0FBQyxDQUFDLGFBQUQsQ0FBRDtBQUNBLEtBRkQ7O0FBSUEsVUFBSzhMLE1BQUwsQ0FBWWdDLE9BQVosR0FBc0IsWUFBTTtBQUMzQjlOLE9BQUMsQ0FBQyxlQUFELENBQUQ7QUFDQSxLQUZEOztBQUlBLFVBQUs4TCxNQUFMLENBQVlpQyxTQUFaLEdBQXdCLFVBQUEvSyxFQUFFLEVBQUk7QUFDN0IsVUFBTXdGLEdBQUcsR0FBR3VFLElBQUksQ0FBQ2lCLEtBQUwsQ0FBV2hMLEVBQUUsQ0FBQ2lMLElBQWQsQ0FBWjtBQUNBLFVBQUksQ0FBQ3pGLEdBQUcsQ0FBQ3lFLE1BQVQsRUFBaUIsT0FGWSxDQUVKOztBQUV6QixjQUFRekUsR0FBRyxDQUFDeUUsTUFBWjtBQUNDLGFBQUtSLHVFQUFMO0FBQ0NDLHlCQUFlLENBQUNsRSxHQUFELEVBQU0sTUFBS3NELE1BQVgsQ0FBZjtBQUNBOztBQUNELGFBQUtXLDJFQUFMO0FBQ0NVLHlCQUFlLENBQUMzRSxHQUFELEVBQU0sTUFBS3NELE1BQVgsRUFBbUIsTUFBSzZCLE9BQXhCLENBQWY7QUFDQTs7QUFDRCxhQUFLbEIsc0VBQUw7QUFDQ2hILGdCQUFNLENBQUMrQyxHQUFELEVBQU0sTUFBS21GLE9BQVgsNkZBQU47QUFDQTs7QUFDRCxhQUFLbEIsMEVBQUw7QUFDQ3pNLFdBQUMscUNBQThCd0ksR0FBRyxDQUFDNUIsT0FBbEMsRUFBRDtBQUNBOztBQUVELGFBQUs2RixvRUFBTDtBQUNDLGNBQUlqRSxHQUFHLENBQUNySCxLQUFKLEtBQWMsUUFBbEIsRUFBNEIsTUFBS3VNLElBQUwsQ0FBVSxRQUFWO0FBQzVCOztBQUNELGFBQUtqQixtRUFBTDtBQUNDLGNBQUlqRSxHQUFHLENBQUNySCxLQUFKLEtBQWMsSUFBbEIsRUFBd0IsTUFBS3VNLElBQUwsQ0FBVSxjQUFWO0FBQ3hCOztBQUNELGFBQUtqQixnRUFBTDtBQUNDLGdCQUFLaUIsSUFBTCxDQUFVLFNBQVY7O0FBQ0E7O0FBQ0QsYUFBS2pCLDhEQUFMO0FBQ0MsZ0JBQUtpQixJQUFMLENBQVUsT0FBVjs7QUFDQTs7QUFDRDtBQTFCRDtBQTRCQSxLQWhDRDs7QUFmcUM7QUFnRHJDOztBQXBERjtBQUFBO0FBQUEsV0FzREMscUJBQVk7QUFDWDFOLE9BQUMsQ0FBQyxXQUFELENBQUQ7QUFDQSxXQUFLOEwsTUFBTCxDQUFZZ0IsSUFBWixDQUFpQkMsSUFBSSxDQUFDQyxTQUFMLENBQWU7QUFBQ0MsY0FBTSxFQUFFO0FBQVQsT0FBZixDQUFqQjtBQUNBO0FBekRGO0FBQUE7QUFBQSxXQTJEQyxpQkFBUTtBQUNQLFdBQUtuQixNQUFMLENBQVlPLEtBQVo7QUFDQTtBQTdERjs7QUFBQTtBQUFBLEVBQW9DNkIsc0RBQXBDLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU0MsWUFBVCxDQUFzQkMsZ0JBQXRCLEVBQTZDQyxhQUE3QyxFQUEyRTtBQUFBOztBQUNqRixTQUFPLFVBQUNsTyxLQUFEO0FBQUEsd0JBQ04sOERBQUMsK0NBQUQsa0NBQWNrTyxhQUFkO0FBQUEsNkJBQ0MsOERBQUMsZ0JBQUQsb0JBQXNCbE8sS0FBdEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUREO0FBQUE7QUFBQTtBQUFBO0FBQUEsYUFETTtBQUFBLEdBQVA7QUFLQSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNkRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFNSCxDQUFDLEdBQUdDLDRDQUFLLENBQUMsbUNBQUQsQ0FBZjtBQVFPLFNBQVNxTyxhQUFULENBQXVCbk8sS0FBdkIsRUFBa0Q7QUFBQTs7QUFDeEQsTUFBT0csS0FBUCxHQUEwREgsS0FBMUQsQ0FBT0csS0FBUDtBQUFBLE1BQWNDLFFBQWQsR0FBMERKLEtBQTFELENBQWNJLFFBQWQ7QUFBQSwwQkFBMERKLEtBQTFELENBQXdCb08sVUFBeEI7QUFBQSxNQUF3QkEsVUFBeEIsa0NBQXFDLGlCQUFyQztBQUNBLE1BQU1DLEdBQUcsR0FBR0MsaURBQVUsQ0FBQ2xDLHNFQUFELENBQXRCOztBQUVBLGtCQUE0QzlGLCtDQUFRLENBQUMsS0FBRCxDQUFwRDtBQUFBO0FBQUEsTUFBT2lJLGNBQVA7QUFBQSxNQUF1QkMsaUJBQXZCOztBQUVBeEksa0RBQVMsQ0FBQyxZQUFNO0FBQ2YsUUFBSXVJLGNBQUosRUFBb0I7QUFDbkIsVUFBSW5PLFFBQVEsSUFBSWlPLEdBQUosYUFBSUEsR0FBSixlQUFJQSxHQUFHLENBQUVsQyxXQUFyQixFQUFrQztBQUNqQ3FDLHlCQUFpQixDQUFDLEtBQUQsQ0FBakI7O0FBQ0EsWUFBSUgsR0FBRyxDQUFDbEMsV0FBSixDQUFnQnBELElBQWhCLEtBQXlCLGVBQXpCLElBQTRDc0YsR0FBRyxDQUFDbEMsV0FBSixDQUFnQnBELElBQWhCLEtBQXlCLFdBQXpFLEVBQXNGO0FBQ3JGM0ksa0JBQVEsQ0FBQztBQUNSMkksZ0JBQUksRUFBRXNGLEdBQUcsQ0FBQ2xDLFdBQUosQ0FBZ0JwRCxJQURkO0FBRVJzRSxpQkFBSyxFQUFFZ0IsR0FBRyxDQUFDbEMsV0FBSixDQUFnQmtCLEtBRmY7QUFHUkMsa0JBQU0sRUFBRWUsR0FBRyxDQUFDbEMsV0FBSixDQUFnQm1CLE1BSGhCO0FBSVJtQixxQkFBUyxFQUFFLElBQUlwSyxJQUFKLEVBSkg7QUFLUnlKLGdCQUFJLEVBQUVPLEdBQUcsQ0FBQ2xDLFdBQUosQ0FBZ0IyQjtBQUxkLFdBQUQsQ0FBUjtBQU9BO0FBQ0Q7O0FBQ0QsVUFBSTFOLFFBQVEsSUFBSSxDQUFDaU8sR0FBakIsRUFBc0I7QUFDckJqTyxnQkFBUTtBQUNSO0FBQ0Q7QUFDRCxHQWxCUSxFQWtCTixDQUFDaU8sR0FBRCxDQWxCTSxDQUFUOztBQW9CQSxNQUFJRSxjQUFKLEVBQW9CO0FBQ25CLHdCQUNDO0FBQUEsOEJBQ0M7QUFBQSxrQkFBTUYsR0FBRyxTQUFILElBQUFBLEdBQUcsV0FBSCxJQUFBQSxHQUFHLENBQUV2QyxTQUFMLEdBQWlCLFlBQWpCLEdBQWdDO0FBQXRDO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FERCxlQUVDLDhEQUFDLHFEQUFEO0FBQ0MsZUFBTyxFQUFFLG1CQUFNO0FBQ2QwQywyQkFBaUIsQ0FBQyxLQUFELENBQWpCO0FBQ0EsU0FIRjtBQUlDLGFBQUssRUFBQyxPQUpQO0FBS0MsZUFBTyxFQUFFSCxHQUFGLGFBQUVBLEdBQUYsdUJBQUVBLEdBQUcsQ0FBRW5OLE9BTGY7QUFNQyxnQkFBUSxFQUFFbU4sR0FBRixhQUFFQSxHQUFGLHVCQUFFQSxHQUFHLENBQUVuTixPQU5oQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQUZELGVBWUMsOERBQUMscURBQUQ7QUFBUSxZQUFJLEVBQUMsTUFBYjtBQUFvQixVQUFFLEVBQUMsR0FBdkI7QUFBMkIsYUFBSyxNQUFoQztBQUFpQyxlQUFPLEVBQUU7QUFBQTs7QUFBQSxpQkFBTW1OLEdBQU4sYUFBTUEsR0FBTiw4Q0FBTUEsR0FBRyxDQUFFMUMsTUFBTCxDQUFZeEIsT0FBbEIsd0RBQU0sb0JBQXFCdUUsU0FBckIsRUFBTjtBQUFBLFNBQTFDO0FBQWtGLGdCQUFRLEVBQUVMLEdBQUYsYUFBRUEsR0FBRix1QkFBRUEsR0FBRyxDQUFFbk4sT0FBakc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FaRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFERDtBQWtCQTs7QUFFRCxNQUFJZixLQUFLLElBQUlBLEtBQUssQ0FBQzJOLElBQW5CLEVBQXlCO0FBQ3hCLHdCQUNDO0FBQUEsOEJBQ0MsOERBQUMsb0RBQUQ7QUFBTyxZQUFJLEVBQUMsUUFBWjtBQUFxQixXQUFHLEVBQUUzTixLQUFLLENBQUMyTixJQUFoQztBQUFzQyxnQkFBUTtBQUE5QztBQUFBO0FBQUE7QUFBQTtBQUFBLGNBREQsZUFFQyw4REFBQyxxREFBRDtBQUNDLFlBQUksRUFBQyxNQUROO0FBRUMsZUFBTyxNQUZSO0FBR0MsZUFBTyxFQUFFLG1CQUFNO0FBQ2RVLDJCQUFpQixDQUFDLEtBQUQsQ0FBakI7QUFDQSxjQUFJcE8sUUFBSixFQUFjQSxRQUFRO0FBQ3RCLFNBTkY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FGRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFERDtBQWVBOztBQUVELHNCQUFPLDhEQUFDLHFEQUFEO0FBQVEsV0FBTyxFQUFFO0FBQUEsYUFBTW9PLGlCQUFpQixDQUFDLElBQUQsQ0FBdkI7QUFBQSxLQUFqQjtBQUFBLGNBQWlESjtBQUFqRDtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBQVA7QUFDQTs7R0FsRWVELGE7O0tBQUFBLGE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDZGhCO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQSxJQUFNdE8sQ0FBQyxHQUFHQyw0Q0FBSyxDQUFDLDhCQUFELENBQWY7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVM2TyxRQUFULENBQWtCM08sS0FBbEIsRUFBa0Y7QUFBQTs7QUFDeEYsTUFBTzRPLE1BQVAsR0FBb0M1TyxLQUFwQyxDQUFPNE8sTUFBUDtBQUFBLE1BQWV4TyxRQUFmLEdBQW9DSixLQUFwQyxDQUFlSSxRQUFmO0FBQUEsTUFBNEJrQixJQUE1Qix5RkFBb0N0QixLQUFwQzs7QUFDQSxrQkFBd0JzRywrQ0FBUSxDQUFDLEtBQUQsQ0FBaEM7QUFBQTtBQUFBLE1BQU91SSxJQUFQO0FBQUEsTUFBYUMsT0FBYjs7QUFDQSxtQkFBZ0N4SSwrQ0FBUSxDQUFDLEtBQUQsQ0FBeEM7QUFBQTtBQUFBLE1BQU95SSxRQUFQO0FBQUEsTUFBaUJDLFdBQWpCOztBQUVBLFdBQVNDLFlBQVQsQ0FBc0JqSyxHQUF0QixFQUFvQztBQUNuQzVFLFlBQVEsSUFBSUEsUUFBUSxDQUFDNEUsR0FBRCxDQUFwQjtBQUNBLEdBUHVGLENBU3hGOzs7QUFDQSxTQUFPNEosTUFBTSxJQUFJLENBQUNDLElBQVgsSUFBbUIsQ0FBQ0UsUUFBcEIsZ0JBQ047QUFBQSw0QkFDQyw4REFBQyxvREFBRDtBQUFPLFdBQUssRUFBRTtBQUFDMUIsYUFBSyxFQUFFLE1BQVI7QUFBZ0JDLGNBQU0sRUFBRSxNQUF4QjtBQUFnQzRCLGtCQUFVLEVBQUU7QUFBNUMsT0FBZDtBQUFtRSxVQUFJLEVBQUMsT0FBeEU7QUFBZ0YsV0FBSyxFQUFDLE9BQXRGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBREQsZUFJQyw4REFBQyxvREFBRDtBQUNDLGFBQU8sRUFBQyxNQURUO0FBRUMsYUFBTyxlQUNOLDhEQUFDLHFEQUFEO0FBQ0MsWUFBSSxFQUFDLFFBRE47QUFFQyxlQUFPLEVBQUUsbUJBQU07QUFDZEosaUJBQU8sQ0FBQyxJQUFELENBQVA7QUFDQUcsc0JBQVksQ0FBQyxFQUFELENBQVo7QUFDQSxTQUxGO0FBTUMsYUFBSyxFQUFDLFFBTlA7QUFPQyxZQUFJLE1BUEw7QUFBQSwrQkFTQyw4REFBQyxtREFBRDtBQUFNLGNBQUksRUFBQztBQUFYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFURDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSEY7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUpELGVBb0JDLDhEQUFDLG9EQUFEO0FBQ0MsYUFBTyxFQUFDLFFBRFQ7QUFFQyxhQUFPLGVBQ04sOERBQUMscURBQUQ7QUFDQyxnQkFBUSxNQURUO0FBRUMsWUFBSSxFQUFDLFFBRk47QUFHQyxZQUFJLE1BSEw7QUFJQyxlQUFPLEVBQUUsbUJBQU07QUFDZEQscUJBQVcsQ0FBQyxJQUFELENBQVg7QUFDQUMsc0JBQVksQ0FBQyxFQUFELENBQVo7QUFDQSxTQVBGO0FBQUEsK0JBU0MsOERBQUMsbURBQUQ7QUFBTSxjQUFJLEVBQUM7QUFBWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUhGO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFwQkQ7QUFBQSxrQkFETTtBQUFBO0FBdUNOO0FBQ0E7QUFBQSw0QkFDQyw4REFBQyxxREFBRCxrQ0FBaUIzTixJQUFqQjtBQUF1QixjQUFRLEVBQUUyTixZQUFqQztBQUErQyxVQUFJLEVBQUU7QUFBQ3RGLFlBQUksRUFBRSxhQUFQO0FBQXNCaUIsY0FBTSxFQUFFLEtBQTlCO0FBQXFDZixrQkFBVSxFQUFFO0FBQWpEO0FBQXJEO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFERCxFQUdFZ0YsSUFBSSxpQkFDSiw4REFBQyxxREFBRDtBQUNDLFVBQUksRUFBQyxRQUROO0FBRUMsYUFBTyxFQUFFLG1CQUFNO0FBQ2RDLGVBQU8sQ0FBQyxLQUFELENBQVA7QUFDQUcsb0JBQVksQ0FBQ25MLFNBQUQsQ0FBWjtBQUNBLE9BTEY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFKRixFQWNFaUwsUUFBUSxpQkFDUiw4REFBQyxxREFBRDtBQUNDLFdBQUssRUFBQyxRQURQO0FBRUMsVUFBSSxFQUFDLFFBRk47QUFHQyxhQUFPLEVBQUUsbUJBQU07QUFDZEMsbUJBQVcsQ0FBQyxLQUFELENBQVg7QUFDQUMsb0JBQVksQ0FBQ25MLFNBQUQsQ0FBWjtBQUNBLE9BTkY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFmRjtBQUFBLGtCQXhDRDtBQW9FQTs7R0E5RWU2SyxROztLQUFBQSxROzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNmaEI7QUFDQTs7QUFJTyxTQUFTUSxZQUFULENBQXlEQyxhQUF6RCxFQUF1RjtBQUM3RixTQUFPLFNBQVNDLGNBQVQsQ0FBd0JyUCxLQUF4QixFQUFrRDtBQUN4RCxRQUNDRyxLQURELEdBS0lILEtBTEosQ0FDQ0csS0FERDtBQUFBLFFBRWNtUCxRQUZkLEdBS0l0UCxLQUxKLENBRUN1UCxHQUZELENBRU9DLEtBRlA7QUFBQSxRQUdVQyxFQUhWLEdBS0l6UCxLQUxKLENBR0MwUCxNQUhELENBR1VELEVBSFY7QUFBQSxRQUlDRSxVQUpELEdBS0kzUCxLQUxKLENBSUMyUCxVQUpELENBRHdELENBUXhEOztBQUNBLFFBQWM3TSxDQUFkLEdBQXNDc00sYUFBdEMsQ0FBT2pQLEtBQVA7QUFBQSxRQUFpQkMsU0FBakIsR0FBc0NnUCxhQUF0QyxDQUFpQmhQLFFBQWpCO0FBQUEsUUFBOEJrQixJQUE5Qix5RkFBc0M4TixhQUF0Qzs7QUFFQSx3QkFDQyw4REFBQyx1REFBRCxrQ0FDSzlOLElBREw7QUFFQyxXQUFLLEVBQUVuQixLQUZSO0FBR0MsY0FBUSxFQUFFLGtCQUFDeVAsS0FBRCxFQUFRNUssR0FBUixFQUFnQjtBQUN6QjJLLGtCQUFVLENBQUNMLFFBQUQsRUFBV0csRUFBWCxFQUFlekssR0FBRyxDQUFDN0UsS0FBbkIsQ0FBVjtBQUNBLFlBQUlDLFNBQUosRUFBY0EsU0FBUSxDQUFDd1AsS0FBRCxFQUFRNUssR0FBUixDQUFSO0FBQ2Q7QUFORjtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBREQ7QUFVQSxHQXJCRDtBQXNCQTtLQXZCZW1LLFk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0xoQjtBQUNBOztBQUdBLElBQU10UCxDQUFDLEdBQUdDLDRDQUFLLENBQUMsMENBQUQsQ0FBZjtBQU1PLFNBQVMrUCxTQUFULENBQXNEckMsT0FBdEQsRUFBb0Y7QUFDMUYsU0FBTyxTQUFTc0MsV0FBVCxDQUFxQjlQLEtBQXJCLEVBQTBDO0FBQ2hELFFBQU8rUCxNQUFQLEdBQWlCdkMsT0FBakIsQ0FBT3VDLE1BQVAsQ0FEZ0QsQ0FHaEQ7O0FBQ0EsUUFBSS9QLEtBQUssQ0FBQ2dRLFFBQU4sS0FBbUJoUSxLQUFLLENBQUN1UCxHQUFOLENBQVVFLEVBQWpDLEVBQXFDO0FBQ3BDLDBCQUNDO0FBQUssYUFBSyxFQUFFO0FBQUNRLG1CQUFTLEVBQUU7QUFBWixTQUFaO0FBQUEsK0JBRUMsOERBQUMsTUFBRCxvQkFBWWpRLEtBQVo7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZEO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FERDtBQU1BOztBQUNELFdBQU8sSUFBUDtBQUNBLEdBYkQ7QUFjQTtLQWZlNlAsUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1ZoQjtBQUVBOztBQVFPLFNBQVNLLFNBQVQsQ0FBc0QxQyxPQUF0RCxFQUFxRjtBQUMzRixTQUFPLFNBQVMyQyxXQUFULENBQXFCblEsS0FBckIsRUFBaUQ7QUFDdkQsd0JBQU87QUFBSyxXQUFLLEVBQUU7QUFBQ2lRLGlCQUFTLEVBQUU7QUFBWixPQUFaO0FBQUEsZ0JBQW1DRyx1REFBVyxDQUFDNUMsT0FBTyxTQUFQLElBQUFBLE9BQU8sV0FBUCxJQUFBQSxPQUFPLENBQUU2QyxhQUFULEdBQXlCN0MsT0FBTyxDQUFDNkMsYUFBUixDQUFzQnJRLEtBQXRCLENBQXpCLEdBQXdEQSxLQUFLLENBQUNHLEtBQS9EO0FBQTlDO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBUDtBQUNBLEdBRkQ7QUFHQTtLQUplK1AsUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDVmhCO0FBRUE7QUFDQTtBQUdBOztBQUVBLElBQU1yUSxDQUFDLEdBQUdDLDRDQUFLLENBQUMsOENBQUQsQ0FBZjtBQU9PLFNBQVN3USxhQUFULENBQTBEQyxJQUExRCxFQUEwRjtBQUFBOztBQUNoRyxZQUFPLFNBQVNDLGVBQVQsQ0FBeUJ4USxLQUF6QixFQUEwRDtBQUFBOztBQUNoRSxRQUNReVEsWUFEUixHQUtJelEsS0FMSixDQUNDRyxLQUREO0FBQUEsUUFFY21QLFFBRmQsR0FLSXRQLEtBTEosQ0FFQ3VQLEdBRkQsQ0FFT0MsS0FGUDtBQUFBLFFBR1VDLEVBSFYsR0FLSXpQLEtBTEosQ0FHQzBQLE1BSEQsQ0FHVUQsRUFIVjtBQUFBLFFBSUNFLFVBSkQsR0FLSTNQLEtBTEosQ0FJQzJQLFVBSkQ7O0FBT0Esb0JBQTBCckosK0NBQVEsQ0FBQ21LLFlBQUQsQ0FBbEM7QUFBQTtBQUFBLFFBQU90USxLQUFQO0FBQUEsUUFBY3VRLFFBQWQ7O0FBRUEsd0JBQ0MsOERBQUMseURBQUQ7QUFDQyxXQUFLLE1BRE47QUFFQyxpQkFBVyxNQUZaO0FBR0MsV0FBSyxFQUFFdlEsS0FIUjtBQUlDLGNBQVEsRUFBRXVRLFFBSlg7QUFLQyxZQUFNLEVBQUUsa0JBQU07QUFDYmYsa0JBQVUsQ0FBQ0wsUUFBRCxFQUFXRyxFQUFYLEVBQWV0UCxLQUFmLENBQVY7QUFDQSxPQVBGO0FBUUMsZUFBUyxFQUFFLG1CQUFDeVAsS0FBRDtBQUFBLGVBQTBCZSx5REFBVyxDQUFDZixLQUFELEVBQVF6UCxLQUFSLEVBQWVILEtBQWYsRUFBc0J1USxJQUF0QixhQUFzQkEsSUFBdEIsdUJBQXNCQSxJQUFJLENBQUVLLGFBQTVCLENBQXJDO0FBQUE7QUFSWjtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBREQ7QUFZQSxHQXRCRDtBQXVCQTtLQXhCZU4sYTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2ZoQjtBQUNBOztBQU9PLFNBQVNPLGNBQVQsQ0FBMkRyRCxPQUEzRCxFQUE4RjtBQUFBOztBQUNwRyxhQUFhQSxPQUFPLElBQUksRUFBeEI7QUFBQSxNQUFPaUMsRUFBUCxRQUFPQSxFQUFQOztBQUVBLFNBQU8sVUFBQ3FCLElBQUQsRUFBNEI7QUFDbEMsUUFBTUMsR0FBRyxHQUFHRCxJQUFJLENBQUNFLElBQUwsQ0FBVTVKLE1BQVYsQ0FBaUIsVUFBQ0MsSUFBRCxFQUFPa0ksR0FBUDtBQUFBLGFBQWVsSSxJQUFJLENBQUM0SixHQUFMLENBQVMxQixHQUFHLENBQUNsSixNQUFKLENBQVdvSixFQUFYLENBQVQsQ0FBZjtBQUFBLEtBQWpCLEVBQTBEeUIsbURBQU8sRUFBakUsQ0FBWjtBQUNBLHdCQUFPO0FBQUssV0FBSyxFQUFFO0FBQUNqQixpQkFBUyxFQUFFO0FBQVosT0FBWjtBQUFBLGdCQUFtQ0csdURBQVcsQ0FBQ1csR0FBRDtBQUE5QztBQUFBO0FBQUE7QUFBQTtBQUFBLGFBQVA7QUFDQSxHQUhEO0FBSUE7S0FQZUYsYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDUmhCO0FBQ0E7QUFDQTtBQUdBOztBQUVBLElBQU1oUixDQUFDLEdBQUdDLDRDQUFLLENBQUMsK0NBQUQsQ0FBZjtBQVNPLFNBQVNxUixjQUFULENBQTJEM0QsT0FBM0QsRUFBK0Y7QUFBQTs7QUFDckcsYUFBb0NBLE9BQU8sSUFBSSxFQUEvQztBQUFBLE1BQU8vTCxVQUFQLFFBQU9BLFVBQVA7QUFBQSxNQUFtQm1QLGFBQW5CLFFBQW1CQSxhQUFuQjs7QUFFQSxZQUFPLFNBQVNRLGdCQUFULENBQTBCcFIsS0FBMUIsRUFBNEQ7QUFBQTs7QUFDbEUsUUFDUXlRLFlBRFIsR0FLSXpRLEtBTEosQ0FDQ0csS0FERDtBQUFBLFFBRU9xUCxLQUZQLEdBS0l4UCxLQUxKLENBRUN1UCxHQUZELENBRU9DLEtBRlA7QUFBQSxRQUdVQyxFQUhWLEdBS0l6UCxLQUxKLENBR0MwUCxNQUhELENBR1VELEVBSFY7QUFBQSxRQUlDRSxVQUpELEdBS0kzUCxLQUxKLENBSUMyUCxVQUpEOztBQU9BLG9CQUEwQnJKLCtDQUFRLENBQUNtSyxZQUFELENBQWxDO0FBQUE7QUFBQSxRQUFPdFEsS0FBUDtBQUFBLFFBQWN1USxRQUFkOztBQUVBLHdCQUNDLDhEQUFDLG9EQUFEO0FBQ0MsV0FBSyxNQUROO0FBRUMsaUJBQVc7QUFGWixPQUdLalAsVUFITDtBQUlDLFdBQUssRUFBRXRCLEtBSlI7QUFLQyxjQUFRLEVBQUUsa0JBQUMwQyxFQUFELEVBQUtDLENBQUwsRUFBVztBQUNwQjROLGdCQUFRLENBQUM1TixDQUFDLENBQUMzQyxLQUFILENBQVI7QUFDQSxPQVBGO0FBUUMsWUFBTSxFQUFFLGtCQUFNO0FBQ2J3UCxrQkFBVSxDQUFDSCxLQUFELEVBQVFDLEVBQVIsRUFBWXRQLEtBQVosQ0FBVjtBQUNBLE9BVkY7QUFXQyxlQUFTLEVBQUUsbUJBQUN5UCxLQUFEO0FBQUEsZUFBMEJlLHlEQUFXLENBQUNmLEtBQUQsRUFBUXpQLEtBQVIsRUFBZUgsS0FBZixFQUFzQjRRLGFBQXRCLENBQXJDO0FBQUE7QUFYWjtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBREQ7QUFlQSxHQXpCRDtBQTBCQTtLQTdCZU8sYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoQmhCO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBWUE7OztBQUVBLElBQU10UixDQUFDLEdBQUdDLDRDQUFLLENBQUMsZ0NBQUQsQ0FBZjs7QUE4QkEsU0FBU3VSLGVBQVQsQ0FBcURyUixLQUFyRCxFQUFxRjtBQUFBOztBQUFBOztBQUNwRixNQUNDOEIsSUFERCxHQWVJOUIsS0FmSixDQUNDOEIsSUFERDtBQUFBLE1BRUN3UCxPQUZELEdBZUl0UixLQWZKLENBRUNzUixPQUZEO0FBQUEsTUFHQ2pMLE1BSEQsR0FlSXJHLEtBZkosQ0FHQ3FHLE1BSEQ7QUFBQSxNQUlDa0wsWUFKRCxHQWVJdlIsS0FmSixDQUlDdVIsWUFKRDtBQUFBLE1BS0NDLGFBTEQsR0FlSXhSLEtBZkosQ0FLQ3dSLGFBTEQ7QUFBQSxNQU1DQyxTQU5ELEdBZUl6UixLQWZKLENBTUN5UixTQU5EO0FBQUEsTUFPQ0MsVUFQRCxHQWVJMVIsS0FmSixDQU9DMFIsVUFQRDtBQUFBLE1BUUNDLGNBUkQsR0FlSTNSLEtBZkosQ0FRQzJSLGNBUkQ7QUFBQSxNQVNDQyxlQVRELEdBZUk1UixLQWZKLENBU0M0UixlQVREO0FBQUEsTUFVQ0MsU0FWRCxHQWVJN1IsS0FmSixDQVVDNlIsU0FWRDtBQUFBLE1BV0NDLFFBWEQsR0FlSTlSLEtBZkosQ0FXQzhSLFFBWEQ7QUFBQSxNQVlDQyxTQVpELEdBZUkvUixLQWZKLENBWUMrUixTQVpEO0FBQUEsTUFhQ0MsZUFiRCxHQWVJaFMsS0FmSixDQWFDZ1MsZUFiRDtBQUFBLE1BY0NDLGNBZEQsR0FlSWpTLEtBZkosQ0FjQ2lTLGNBZEQ7QUFnQkEsTUFBTUMsSUFBSSxHQUFHQyw4Q0FBTyxDQUFDO0FBQUEsV0FBTWIsT0FBTjtBQUFBLEdBQUQsRUFBZ0IsQ0FBQ0EsT0FBRCxDQUFoQixDQUFwQjtBQUNBLE1BQU1jLElBQUksR0FBR0QsOENBQU8sQ0FBQztBQUFBLFdBQU05TCxNQUFOO0FBQUEsR0FBRCxFQUFlLENBQUNBLE1BQUQsQ0FBZixDQUFwQjs7QUFDQSxrQkFBZ0NDLCtDQUFRLENBQUMsRUFBRCxDQUF4QztBQUFBO0FBQUEsTUFBTzBKLFFBQVA7QUFBQSxNQUFpQnFDLFdBQWpCLGlCQW5Cb0YsQ0FxQnBGOzs7QUFDQSxrQkFBeUZDLHFEQUFRLENBQUk7QUFDcEdoQixXQUFPLEVBQUVZLElBRDJGO0FBRXBHcEUsUUFBSSxFQUFFc0UsSUFGOEY7QUFHcEc7QUFDQXpDLGNBSm9HLHNCQUl6RkwsUUFKeUYsRUFJL0VpRCxRQUorRSxFQUlyRXBTLEtBSnFFLEVBSTlEO0FBQ3JDcVIsbUJBQWEsV0FBSTFQLElBQUosY0FBWXdOLFFBQVosZUFBeUJpRCxRQUF6QixHQUFxQ3BTLEtBQXJDLENBQWI7QUFDQSxLQU5tRztBQU9wR3FTLFVBUG9HLG9CQU8zRjtBQUNSakIsa0JBQVksQ0FBQzVNLElBQWIsQ0FBa0I4TSxTQUFTLEVBQTNCO0FBQ0EsS0FUbUc7QUFVcEdGLGdCQUFZLEVBQVpBO0FBVm9HLEdBQUosQ0FBakc7QUFBQSxNQUFPa0IsYUFBUCxhQUFPQSxhQUFQO0FBQUEsTUFBc0JDLGlCQUF0QixhQUFzQkEsaUJBQXRCO0FBQUEsTUFBeUNDLFlBQXpDLGFBQXlDQSxZQUF6QztBQUFBLE1BQXVEQyxVQUF2RCxhQUF1REEsVUFBdkQ7QUFBQSxNQUFtRTVCLElBQW5FLGFBQW1FQSxJQUFuRTtBQUFBLE1BQXlFNkIsWUFBekUsYUFBeUVBLFlBQXpFLENBdEJvRixDQW1DcEY7OztBQUNBLE1BQU1DLFNBQVMsR0FBR0QsWUFBWSxDQUFDRSxJQUFiLENBQWtCLFVBQUFDLEVBQUU7QUFBQSxXQUFJQSxFQUFFLENBQUNDLE9BQUgsQ0FBV0YsSUFBWCxDQUFnQixVQUFBRyxHQUFHO0FBQUEsYUFBSUEsR0FBRyxDQUFDQyxNQUFKLENBQVdyUixJQUFYLEtBQW9CLGVBQXhCO0FBQUEsS0FBbkIsQ0FBSjtBQUFBLEdBQXBCLENBQWxCLENBcENvRixDQXNDcEY7O0FBQ0EsTUFBTXNSLE1BQU0sR0FBR04sU0FBUyxnQkFDdkIsOERBQUMsMkRBQUQ7QUFBQSxjQUNFRCxZQUFZLENBQUN6SyxHQUFiLENBQWlCLFVBQUFpTCxLQUFLO0FBQUEsMEJBQ3RCLDhEQUFDLHdEQUFELGtFQUFtQkEsS0FBSyxDQUFDQyxtQkFBTixFQUFuQixHQUFtREQsS0FBSyxDQUFDQyxtQkFBTixDQUEwQnJCLGNBQTFCLENBQW5EO0FBQUEsa0JBQ0VvQixLQUFLLENBQUNKLE9BQU4sQ0FBYzdLLEdBQWQsQ0FBa0IsVUFBQXNILE1BQU07QUFBQSw4QkFDeEIsOERBQUMsK0RBQUQsa0VBQTBCQSxNQUFNLENBQUM2RCxjQUFQLEVBQTFCLEdBQXNEN0QsTUFBTSxDQUFDNkQsY0FBUCxDQUFzQnZCLGVBQXRCLENBQXREO0FBQUEsc0JBQ0V0QyxNQUFNLENBQUNwSyxNQUFQLENBQWMsUUFBZDtBQURGO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBRHdCO0FBQUEsU0FBeEI7QUFERjtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBRHNCO0FBQUEsS0FBdEI7QUFERjtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBRHVCLEdBWXBCLElBWko7QUFjQSxzQkFDQztBQUFBLDJCQUNDLDhEQUFDLG9EQUFELGtFQUFlbU4sYUFBYSxFQUE1QixHQUFtQ0EsYUFBYSxDQUFDZixVQUFELENBQWhEO0FBQUEsOEJBQ0MsOERBQUMsMkRBQUQ7QUFBQSxrQkFDRWlCLFlBQVksQ0FBQ3ZLLEdBQWIsQ0FBaUIsVUFBQW9MLFdBQVc7QUFBQSw4QkFDNUIsOERBQUMsd0RBQUQsa0VBQW1CQSxXQUFXLENBQUNDLG1CQUFaLEVBQW5CLEdBQXlERCxXQUFXLENBQUNDLG1CQUFaLENBQWdDOUIsY0FBaEMsQ0FBekQ7QUFBQSxzQkFDRTZCLFdBQVcsQ0FBQ1AsT0FBWixDQUFvQjdLLEdBQXBCLENBQXdCLFVBQUFzSCxNQUFNO0FBQUEsa0NBQzlCLDhEQUFDLCtEQUFELGtFQUEwQkEsTUFBTSxDQUFDZ0UsY0FBUCxFQUExQixHQUFzRGhFLE1BQU0sQ0FBQ2dFLGNBQVAsQ0FBc0I5QixlQUF0QixDQUF0RDtBQUFBLDBCQUNFbEMsTUFBTSxDQUFDcEssTUFBUCxDQUFjLFFBQWQ7QUFERjtBQUFBO0FBQUE7QUFBQTtBQUFBLHVCQUQ4QjtBQUFBLGFBQTlCO0FBREY7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFENEI7QUFBQSxTQUE1QjtBQURGO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FERCxlQVlDLDhEQUFDLHlEQUFELGtFQUFvQm9OLGlCQUFpQixFQUFyQyxHQUE0Q0EsaUJBQWlCLENBQUNiLFNBQUQsQ0FBN0Q7QUFBQSxrQkFDRWIsSUFBSSxDQUFDNUksR0FBTCxDQUFTLFVBQUFtSCxHQUFHLEVBQUk7QUFDaEJxRCxvQkFBVSxDQUFDckQsR0FBRCxDQUFWO0FBQ0EsOEJBQ0MsOERBQUMsd0RBQUQsa0VBQ1NBLEdBQUcsQ0FBQ29FLFdBQUosRUFEVCxHQUMrQnBFLEdBQUcsQ0FBQ29FLFdBQUosQ0FBZ0I3QixRQUFoQixDQUQvQjtBQUVDLHdCQUFZLEVBQUU7QUFBQSxxQkFBTU8sV0FBVyxDQUFDOUMsR0FBRyxDQUFDRSxFQUFMLENBQWpCO0FBQUEsYUFGZjtBQUdDLHdCQUFZLEVBQUU7QUFBQSxxQkFBTTRDLFdBQVcsQ0FBQyxFQUFELENBQWpCO0FBQUEsYUFIZjtBQUFBLHNCQUtFOUMsR0FBRyxDQUFDcUUsS0FBSixDQUFVeEwsR0FBVixDQUFjLFVBQUF5TCxJQUFJO0FBQUEsa0NBQ2xCLDhEQUFDLHlEQUFELGtFQUFvQkEsSUFBSSxDQUFDQyxZQUFMLEVBQXBCLEdBQTRDRCxJQUFJLENBQUNDLFlBQUwsQ0FBa0IvQixTQUFsQixDQUE1QztBQUFBLDBCQUE0RThCLElBQUksQ0FBQ3ZPLE1BQUwsQ0FBWSxNQUFaLEVBQW9CO0FBQUMwSywwQkFBUSxFQUFSQTtBQUFELGlCQUFwQjtBQUE1RTtBQUFBO0FBQUE7QUFBQTtBQUFBLHVCQURrQjtBQUFBLGFBQWxCO0FBTEY7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFERDtBQVdBLFNBYkE7QUFERjtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBWkQsRUE0QkVvRCxNQTVCRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFERCxtQkFERDtBQWtDQTtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztHQTdGUy9CLGU7VUFzQmlGaUIsaUQ7OztLQXRCakZqQixlO0FBOEZGLFNBQVMwQyxVQUFULENBQWdEL1QsS0FBaEQsRUFBMkU7QUFBQTs7QUFDakYsc0JBQU8sOERBQUMsOENBQUQ7QUFBWSxRQUFJLEVBQUVBLEtBQUssQ0FBQzhCLElBQXhCO0FBQThCLFVBQU0sRUFBRSxnQkFBQXlQLFlBQVk7QUFBQSwwQkFBSSw4REFBQyxlQUFEO0FBQWlCLG9CQUFZLEVBQUVBO0FBQS9CLFNBQWlEdlIsS0FBakQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQkFBSjtBQUFBO0FBQWxEO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFBUDtBQUNBO01BRmUrVCxVOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUloQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNwRCxXQUFULENBQ05mLEtBRE0sRUFFTnpQLEtBRk0sRUFHTkgsS0FITSxFQUlONFEsYUFKTSxFQUtMO0FBQ0QsTUFDY3RCLFFBRGQsR0FJSXRQLEtBSkosQ0FDQ3VQLEdBREQsQ0FDT0MsS0FEUDtBQUFBLE1BRWdCd0UsVUFGaEIsR0FJSWhVLEtBSkosQ0FFQ2dSLElBRkQsQ0FFUWpKLE1BRlI7QUFBQSxNQUdDeUssTUFIRCxHQUlJeFMsS0FKSixDQUdDd1MsTUFIRDs7QUFNQSxNQUFJNUMsS0FBSyxDQUFDdE4sR0FBTixLQUFjLEtBQWQsSUFBdUIsQ0FBQ3NOLEtBQUssQ0FBQ3FFLFFBQTlCLElBQTBDM0UsUUFBUSxHQUFHLENBQVgsS0FBaUIwRSxVQUEzRCxLQUEwRXBELGFBQWEsR0FBR0EsYUFBYSxDQUFDNVEsS0FBRCxFQUFRRyxLQUFSLENBQWhCLEdBQWlDLEtBQXhILENBQUosRUFBb0k7QUFDbklxUyxVQUFNO0FBQ047QUFDRCxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFCRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDTkE7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUVBLElBQU0zUyxDQUFDLEdBQUdDLDRDQUFLLENBQUMsdUNBQUQsQ0FBZjtBQU1PLFNBQVNvVSxrQkFBVCxDQUE0QmxVLEtBQTVCLEVBQTJGO0FBQUE7O0FBQ2pHLE1BQU84QixJQUFQLEdBQXVIOUIsS0FBdkgsQ0FBTzhCLElBQVA7QUFBQSxNQUFhekIsTUFBYixHQUF1SEwsS0FBdkgsQ0FBYUssTUFBYjtBQUFBLE1BQXFCOFQsTUFBckIsR0FBdUhuVSxLQUF2SCxDQUFxQm1VLE1BQXJCO0FBQUEsTUFBNkJDLGVBQTdCLEdBQXVIcFUsS0FBdkgsQ0FBNkJvVSxlQUE3QjtBQUFBLE1BQThDaFUsUUFBOUMsR0FBdUhKLEtBQXZILENBQThDSSxRQUE5QztBQUFBLE1BQXdEaVUsVUFBeEQsR0FBdUhyVSxLQUF2SCxDQUF3RHFVLFVBQXhEO0FBQUEsTUFBb0VsVSxLQUFwRSxHQUF1SEgsS0FBdkgsQ0FBb0VHLEtBQXBFO0FBQUEsTUFBMkVtVSxXQUEzRSxHQUF1SHRVLEtBQXZILENBQTJFc1UsV0FBM0U7QUFBQSxNQUF3RkMsVUFBeEYsR0FBdUh2VSxLQUF2SCxDQUF3RnVVLFVBQXhGO0FBQUEsTUFBb0dDLE1BQXBHLEdBQXVIeFUsS0FBdkgsQ0FBb0d3VSxNQUFwRztBQUFBLE1BQStHbFQsSUFBL0cseUZBQXVIdEIsS0FBdkg7O0FBQ0EsdUJBQXVCeVUsNkRBQWEsQ0FBQztBQUFDTCxtQkFBZSxFQUFmQSxlQUFEO0FBQWtCaFUsWUFBUSxFQUFSQSxRQUFsQjtBQUE0QitULFVBQU0sRUFBTkEsTUFBNUI7QUFBb0NFLGNBQVUsRUFBVkEsVUFBcEM7QUFBZ0RsVSxTQUFLLEVBQUxBLEtBQWhEO0FBQXVEbVUsZUFBVyxFQUFYQTtBQUF2RCxHQUFELENBQXBDO0FBQUEsTUFBT3ZLLFlBQVAsa0JBQU9BLFlBQVA7O0FBRUEsTUFBTXlELE9BQU8sR0FBRytHLFVBQVUsSUFBSSxDQUM3QjtBQUFDalMsT0FBRyxFQUFFLEtBQU47QUFBYUQsUUFBSSxFQUFFLEtBQW5CO0FBQTBCbEMsU0FBSyxFQUFFO0FBQWpDLEdBRDZCLEVBRTdCO0FBQUNtQyxPQUFHLEVBQUUsS0FBTjtBQUFhRCxRQUFJLEVBQUUsS0FBbkI7QUFBMEJsQyxTQUFLLEVBQUU7QUFBakMsR0FGNkIsQ0FBOUI7O0FBS0EsV0FBU3VVLG9CQUFULENBQThCM1AsQ0FBOUIsRUFBcUVDLEdBQXJFLEVBQXlGO0FBQ3hGO0FBQ0EsUUFBSUEsR0FBRyxDQUFDN0UsS0FBSixJQUFhQyxRQUFqQixFQUEyQkEsUUFBUSxDQUFDOFEsbURBQU8sQ0FBQy9RLEtBQUssQ0FBQ3dVLE1BQU4sWUFBZSxFQUFmLEVBQXFCQyxpREFBSyxDQUFDelUsS0FBSyxDQUFDMFUsUUFBUCxDQUFMLENBQXNCQyxjQUEzQyxDQUFELEVBQTRERixpREFBSyxDQUFDNVAsR0FBRyxDQUFDN0UsS0FBTCxDQUFqRSxDQUFSLENBQVI7QUFDM0I7O0FBRUQsc0JBQ0MsOERBQUMsb0RBQUQsa0NBQVdtQixJQUFYO0FBQWlCLGlCQUFhLEVBQUMsT0FBL0I7QUFBQSw0QkFDQztBQUFPLFVBQUksRUFBRVEsSUFBYjtBQUFtQixTQUFHLEVBQUVpSSxZQUF4QjtBQUFzQyxZQUFNLEVBQUUxSixNQUE5QztBQUFzRCxjQUFRLEVBQUVtVTtBQUFoRTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBREQsZUFFQyw4REFBQyxvREFBRDtBQUFPLFdBQUssTUFBWjtBQUFBLDZCQUNDLDhEQUFDLHVEQUFEO0FBQVUsZ0JBQVEsRUFBRUEsTUFBcEI7QUFBNEIsZUFBTyxFQUFFaEgsT0FBckM7QUFBOEMsYUFBSyxFQUFFLENBQUFyTixLQUFLLFNBQUwsSUFBQUEsS0FBSyxXQUFMLFlBQUFBLEtBQUssQ0FBRTBVLFFBQVAsTUFBbUJULGVBQW5CLGFBQW1CQSxlQUFuQix1QkFBbUJBLGVBQWUsQ0FBRVcsSUFBcEMsS0FBNEMsS0FBakc7QUFBd0csZ0JBQVEsRUFBRUw7QUFBbEg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUREO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFGRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFERDtBQVFBOztHQXRCZVIsa0I7VUFFUU8seUQ7OztLQUZSUCxrQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNkaEI7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQSxJQUFNclUsQ0FBQyxHQUFHQyw0Q0FBSyxDQUFDLCtCQUFELENBQWY7QUFjTyxTQUFTa1YsVUFBVCxDQUFvQmhWLEtBQXBCLEVBQTJFO0FBQUE7O0FBQ2pGLE1BQU84QixJQUFQLEdBQTJHOUIsS0FBM0csQ0FBTzhCLElBQVA7QUFBQSxNQUFhekIsTUFBYixHQUEyR0wsS0FBM0csQ0FBYUssTUFBYjtBQUFBLE1BQXFCbVUsTUFBckIsR0FBMkd4VSxLQUEzRyxDQUFxQndVLE1BQXJCO0FBQUEsTUFBNkJMLE1BQTdCLEdBQTJHblUsS0FBM0csQ0FBNkJtVSxNQUE3QjtBQUFBLE1BQXFDQyxlQUFyQyxHQUEyR3BVLEtBQTNHLENBQXFDb1UsZUFBckM7QUFBQSxNQUFzRGhVLFFBQXRELEdBQTJHSixLQUEzRyxDQUFzREksUUFBdEQ7QUFBQSxNQUFnRWlVLFVBQWhFLEdBQTJHclUsS0FBM0csQ0FBZ0VxVSxVQUFoRTtBQUFBLE1BQTRFbFUsS0FBNUUsR0FBMkdILEtBQTNHLENBQTRFRyxLQUE1RTtBQUFBLE1BQW1GbVUsV0FBbkYsR0FBMkd0VSxLQUEzRyxDQUFtRnNVLFdBQW5GO0FBQUEsTUFBbUdoVCxJQUFuRyx5RkFBMkd0QixLQUEzRzs7QUFDQSx1QkFBdUJ5VSw2REFBYSxDQUFDO0FBQUNMLG1CQUFlLEVBQWZBLGVBQUQ7QUFBa0JoVSxZQUFRLEVBQVJBLFFBQWxCO0FBQTRCK1QsVUFBTSxFQUFOQSxNQUE1QjtBQUFvQ0UsY0FBVSxFQUFWQSxVQUFwQztBQUFnRGxVLFNBQUssRUFBTEEsS0FBaEQ7QUFBdURtVSxlQUFXLEVBQVhBO0FBQXZELEdBQUQsQ0FBcEM7QUFBQSxNQUFPdkssWUFBUCxrQkFBT0EsWUFBUDs7QUFFQSxzQkFDQyw4REFBQyxvREFBRCxrQ0FBV3pJLElBQVg7QUFBQSwyQkFDQztBQUFPLFVBQUksRUFBRVEsSUFBYjtBQUFtQixTQUFHLEVBQUVpSSxZQUF4QjtBQUFzQyxZQUFNLEVBQUUxSixNQUE5QztBQUFzRCxjQUFRLEVBQUVtVTtBQUFoRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBREQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUREO0FBS0E7O0dBVGVRLFU7VUFFUVAseUQ7OztLQUZSTyxVOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN0QmhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFNblYsQ0FBQyxHQUFHQyw0Q0FBSyxDQUFDLGtDQUFELENBQWY7QUFXTyxTQUFTMlUsYUFBVCxDQUF1QnpVLEtBQXZCLEVBQWtEO0FBQUE7O0FBQ3hELE1BQU9HLEtBQVAsR0FBNEVILEtBQTVFLENBQU9HLEtBQVA7QUFBQSxNQUFjQyxRQUFkLEdBQTRFSixLQUE1RSxDQUFjSSxRQUFkO0FBQUEsTUFBd0JnVSxlQUF4QixHQUE0RXBVLEtBQTVFLENBQXdCb1UsZUFBeEI7QUFBQSxNQUF5Q0MsVUFBekMsR0FBNEVyVSxLQUE1RSxDQUF5Q3FVLFVBQXpDO0FBQUEsTUFBcURGLE1BQXJELEdBQTRFblUsS0FBNUUsQ0FBcURtVSxNQUFyRDtBQUFBLE1BQTZERyxXQUE3RCxHQUE0RXRVLEtBQTVFLENBQTZEc1UsV0FBN0Q7QUFFQSxNQUFNdkssWUFBWSxHQUFHQyw2Q0FBTSxDQUEwQixJQUExQixDQUEzQjtBQUNBLE1BQU1DLFlBQVksR0FBR0QsNkNBQU0sQ0FBNEIsSUFBNUIsQ0FBM0IsQ0FKd0QsQ0FNeEQ7O0FBQ0EsTUFBSWlMLFdBQVcsR0FBR0wscURBQWxCLENBUHdELENBUXhEOztBQUNBLE1BQUl6VSxLQUFLLFNBQUwsSUFBQUEsS0FBSyxXQUFMLElBQUFBLEtBQUssQ0FBRTBVLFFBQVAsSUFBbUJELGlEQUFLLENBQUN6VSxLQUFELGFBQUNBLEtBQUQsdUJBQUNBLEtBQUssQ0FBRTBVLFFBQVIsQ0FBNUIsRUFBK0NJLFdBQVcsR0FBR0wsaURBQUssQ0FBQ3pVLEtBQUQsYUFBQ0EsS0FBRCx1QkFBQ0EsS0FBSyxDQUFFMFUsUUFBUixDQUFuQjtBQUMvQyxNQUFJVCxlQUFKLEVBQXFCYSxXQUFXLEdBQUdiLGVBQWQ7QUFFckJwTyxrREFBUyxDQUFDLFlBQU07QUFDZixRQUFJLENBQUMrRCxZQUFZLENBQUNJLE9BQWxCLEVBQTJCLE1BQU0sSUFBSUMsS0FBSixDQUFVLDZCQUFWLENBQU47QUFFM0J2SyxLQUFDLENBQUMsOEJBQUQsQ0FBRDtBQUNBb0ssZ0JBQVksQ0FBQ0UsT0FBYixHQUF1QixJQUFJRSxrREFBSixDQUFjO0FBQ3BDdEksV0FBSyxFQUFFLFNBRDZCO0FBRXBDbVQsb0JBQWMsRUFBRSxHQUZvQjtBQUdwQ0MsWUFBTSxFQUFFYixXQUFXLEdBQUcsR0FBSCxHQUFTYyxrREFBVSxDQUFDSCxXQUFXLENBQUNGLElBQWIsQ0FBVixDQUE2QkQsY0FBN0IsQ0FBNENsUSxRQUE1QyxFQUhRO0FBSXBDeVEsb0JBQWMsRUFBRSxLQUpvQjtBQUtwQ2xCLFlBQU0sRUFBRUUsVUFBVSxHQUFHRixNQUFNLElBQUlpQixrREFBVSxDQUFDSCxXQUFXLENBQUNGLElBQWIsQ0FBVixDQUE2Qk8sTUFBMUMsR0FBbUR4UixTQUxqQztBQU1wQ3lSLGlCQUFXLEVBQUUsR0FOdUI7QUFPcEMxTCxnQkFBVSxFQUFFLElBUHdCO0FBUXBDUyxnQkFSb0Msd0JBUXZCO0FBQUE7O0FBQ1osWUFBSWxLLFFBQUosRUFBY0EsUUFBUSxDQUFDOFEsbURBQU8sMEJBQUNuSCxZQUFZLENBQUNJLE9BQWQsMERBQUMsc0JBQXNCaEssS0FBdkIsRUFBOEI4VSxXQUE5QixDQUFSLENBQVI7QUFDZCxPQVZtQztBQVdwQzFLLGVBWG9DLHVCQVd4QjtBQUNYLFlBQUluSyxRQUFKLEVBQWNBLFFBQVEsQ0FBQzhRLG1EQUFPLENBQUMsQ0FBRCxFQUFJK0QsV0FBSixDQUFSLENBQVI7QUFDZCxPQWJtQztBQWNwQ3pLLGtCQWRvQywwQkFjckI7QUFBQTs7QUFDZCxZQUFJcEssUUFBSixFQUFjQSxRQUFRLENBQUM4USxtREFBTywyQkFBQ25ILFlBQVksQ0FBQ0ksT0FBZCwyREFBQyx1QkFBc0JoSyxLQUF2QixFQUE4QjhVLFdBQTlCLENBQVIsQ0FBUjtBQUNkO0FBaEJtQyxLQUFkLENBQXZCO0FBa0JBaEwsZ0JBQVksQ0FBQ0UsT0FBYixDQUFxQlIsSUFBckIsQ0FBMEJJLFlBQVksQ0FBQ0ksT0FBdkM7QUFFQSxXQUFPLFlBQU07QUFDWixVQUFJRixZQUFZLENBQUNFLE9BQWpCLEVBQTBCO0FBQ3pCdEssU0FBQyxDQUFDLGlDQUFELENBQUQ7QUFDQW9LLG9CQUFZLENBQUNFLE9BQWIsQ0FBcUJNLE1BQXJCO0FBQ0FSLG9CQUFZLENBQUNFLE9BQWIsR0FBdUIsSUFBdkI7QUFDQTtBQUNELEtBTkQ7QUFPQSxHQS9CUSxFQStCTixDQUFDOEssV0FBRCxFQUFjZCxNQUFkLEVBQXNCRyxXQUF0QixDQS9CTSxDQUFULENBWndELENBNkN4RDs7QUFDQXRPLGtEQUFTLENBQUMsWUFBTTtBQUFBOztBQUNmLFFBQU13UCxVQUFVLEdBQUd0RSxtREFBTywyQkFBQ25ILFlBQVksQ0FBQ0ksT0FBZCwyREFBQyx1QkFBc0JoSyxLQUF2QixFQUE4QjhVLFdBQTlCLENBQTFCOztBQUNBLFFBQUksQ0FBQzlVLEtBQUssS0FBSzJELFNBQVYsSUFBdUIzRCxLQUFLLEtBQUssSUFBbEMsS0FBMkM0SixZQUFZLENBQUNJLE9BQTVELEVBQXFFO0FBQ3BFSixrQkFBWSxDQUFDSSxPQUFiLENBQXFCaEssS0FBckIsR0FBNkIsRUFBN0I7QUFDQSxLQUZELE1BRU8sSUFBSUEsS0FBSyxZQUFZeVUsaURBQWpCLElBQTBCN0ssWUFBWSxDQUFDSSxPQUEzQyxFQUFvRDtBQUMxRCxVQUFJLENBQUNxTCxVQUFVLENBQUNDLE1BQVgsQ0FBa0J0VixLQUFsQixDQUFMLEVBQStCO0FBQzlCNEosb0JBQVksQ0FBQ0ksT0FBYixDQUFxQmhLLEtBQXJCLEdBQTZCQSxLQUFLLENBQUN5RSxRQUFOLEVBQTdCO0FBQ0E7QUFDRCxLQUpNLE1BSUEsSUFBSThRLHlEQUFhLENBQUN2VixLQUFELENBQWIsSUFBd0I0SixZQUFZLENBQUNJLE9BQXpDLEVBQWtEO0FBQ3hELFVBQU13TCxZQUFZLEdBQUd6RSxtREFBTyxDQUFDL1EsS0FBRCxDQUE1Qjs7QUFDQSxVQUFJLENBQUNxVixVQUFVLENBQUNDLE1BQVgsQ0FBa0JFLFlBQWxCLENBQUwsRUFBc0M7QUFDckM1TCxvQkFBWSxDQUFDSSxPQUFiLENBQXFCaEssS0FBckIsR0FBNkJ3VixZQUFZLENBQUMvUSxRQUFiLEVBQTdCO0FBQ0E7QUFDRCxLQUxNLE1BS0E7QUFDTixZQUFNLElBQUl3RixLQUFKLDJEQUE2RGpLLEtBQTdELGVBQXVFLE9BQU9BLEtBQTlFLEVBQU47QUFDQTtBQUNELEdBaEJRLEVBZ0JOLENBQUNBLEtBQUQsRUFBUThVLFdBQVIsQ0FoQk0sQ0FBVDtBQWtCQSxTQUFPO0FBQUNsTCxnQkFBWSxFQUFaQTtBQUFELEdBQVA7QUFDQTs7R0FqRWUwSyxhOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakJoQjtBQUNBO0FBQ0E7OztBQUVBLElBQU01VSxDQUFDLEdBQUdDLDRDQUFLLENBQUMsNEJBQUQsQ0FBZjtBQVNPLFNBQVM4VixRQUFULENBQWtCNVYsS0FBbEIsRUFBd0M7QUFBQTs7QUFDOUMsaUJBQThCNlYsaURBQU8sRUFBckM7QUFBQTtBQUFBLE1BQU9DLEtBQVA7QUFBQSxNQUFjck4sWUFBZDs7QUFDQSxNQUFNcEMsTUFBTSxHQUFHeVAsS0FBSyxDQUFDOVYsS0FBSyxDQUFDK1YsT0FBUCxDQUFMLElBQXdCLEVBQXZDO0FBRUEsTUFBTUMsSUFBSSxnQkFBR3ZRLHlEQUFBLENBQW1CcUYsZ0RBQUEsQ0FBYzlLLEtBQUssQ0FBQ3VGLFFBQXBCLENBQW5CLEVBQWtEO0FBQzlEYyxVQUFNLEVBQUVBLE1BQU0sSUFBSSxFQUQ0QztBQUU5RDRQLFlBQVEsRUFBRSxrQkFBQzdELElBQUQ7QUFBQSxhQUFtQjNKLFlBQVksQ0FBQzJKLElBQUQsRUFBT3BTLEtBQUssQ0FBQytWLE9BQWIsQ0FBL0I7QUFBQTtBQUZvRCxHQUFsRCxDQUFiO0FBS0Esc0JBQ0M7QUFBQSw0QkFDQztBQUFBLGdCQUFLL1YsS0FBSyxDQUFDa1c7QUFBWDtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBREQsRUFFRUYsSUFGRjtBQUFBLGtCQUREO0FBTUE7O0dBZmVKLFE7VUFDZUMsNkM7OztLQURmRCxROzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDYmhCO0FBQ0E7OztBQUVBLElBQU0vVixDQUFDLEdBQUdDLDRDQUFLLENBQUMsd0JBQUQsQ0FBZjtBQVNPLFNBQVNxVyxJQUFULENBQWNuVyxLQUFkLEVBQWdDO0FBQ3RDLHNCQUNDO0FBQUEsNEJBQ0M7QUFBQSxnQkFBS0EsS0FBSyxDQUFDa1c7QUFBWDtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBREQsRUFFRWxXLEtBQUssQ0FBQ3VGLFFBRlI7QUFBQSxrQkFERDtBQU1BO0tBUGU0USxJOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNaaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBTXRXLENBQUMsR0FBR0MsNENBQUssQ0FBQyxnQ0FBRCxDQUFmO0FBVU8sU0FBU3NXLFlBQVQsQ0FBc0JwVyxLQUF0QixFQUFnRDtBQUFBOztBQUFBOztBQUN0RCxrQkFBMEJzRywrQ0FBUSxDQUFDdEcsS0FBSyxDQUFDcUcsTUFBTixJQUFnQixFQUFqQixDQUFsQztBQUFBO0FBQUEsTUFBT3lQLEtBQVA7QUFBQSxNQUFjTyxRQUFkOztBQUNBLG1CQUFzQy9QLCtDQUFRLENBQUMsQ0FBRCxDQUE5QztBQUFBO0FBQUEsTUFBT2dRLFdBQVA7QUFBQSxNQUFvQkMsY0FBcEI7O0FBQ0EsbUJBQXdDalEsK0NBQVEsQ0FBQyxLQUFELENBQWhEO0FBQUE7QUFBQSxNQUFPSSxZQUFQO0FBQUEsTUFBcUI4UCxlQUFyQjs7QUFFQSxNQUFNQyxNQUFnQixHQUFHLEVBQXpCO0FBQ0EsTUFBTWxSLFFBQXVCLEdBQUcsRUFBaEM7QUFFQXVGLHFEQUFBLENBQWlCOUssS0FBakIsYUFBaUJBLEtBQWpCLHVCQUFpQkEsS0FBSyxDQUFFdUYsUUFBeEIsRUFBa0MsVUFBQ0csS0FBRCxFQUFROEosS0FBUixFQUFrQjtBQUNuRCxRQUFJLENBQUM5SixLQUFMLEVBQVk7O0FBQ1osUUFBSSxDQUFBQSxLQUFLLFNBQUwsSUFBQUEsS0FBSyxXQUFMLFlBQUFBLEtBQUssQ0FBRXFELElBQVAsTUFBZ0JvTix1Q0FBaEIsSUFBd0IsQ0FBQXpRLEtBQUssU0FBTCxJQUFBQSxLQUFLLFdBQUwsWUFBQUEsS0FBSyxDQUFFcUQsSUFBUCxNQUFnQjZNLCtDQUE1QyxFQUFzRDtBQUNyRCxZQUFNLElBQUl4TCxLQUFKLDJCQUE2QjFFLEtBQTdCLGFBQTZCQSxLQUE3Qix1QkFBNkJBLEtBQUssQ0FBRXFELElBQXBDLHdFQUFOO0FBQ0E7O0FBQ0QsUUFBSXJELEtBQUssQ0FBQzFGLEtBQU4sQ0FBWTBXLE1BQWhCLEVBQXdCO0FBQ3ZCLFVBQUksT0FBT2hSLEtBQUssQ0FBQzFGLEtBQU4sQ0FBWTBXLE1BQW5CLEtBQThCLFVBQTlCLElBQTRDLENBQUNoUixLQUFLLENBQUMxRixLQUFOLENBQVkwVyxNQUFaLENBQW1CWixLQUFuQixFQUEwQnRHLEtBQTFCLENBQWpELEVBQW1GO0FBQUE7O0FBQ2xGaUgsY0FBTSxDQUFDOVIsSUFBUCxDQUFZLENBQUFlLEtBQUssU0FBTCxJQUFBQSxLQUFLLFdBQUwsNEJBQUFBLEtBQUssQ0FBRTFGLEtBQVAsOERBQWNrVyxLQUFkLEtBQXVCLEVBQW5DO0FBQ0EzUSxnQkFBUSxDQUFDWixJQUFULGVBQWNjLHlEQUFBLENBQW1CQyxLQUFuQixFQUEwQjtBQUFDaVIsY0FBSSxFQUFFbkgsS0FBUDtBQUFjbE4sYUFBRyxFQUFFLENBQUFvRCxLQUFLLFNBQUwsSUFBQUEsS0FBSyxXQUFMLFlBQUFBLEtBQUssQ0FBRXBELEdBQVAsS0FBY2tOLEtBQUssQ0FBQzVLLFFBQU47QUFBakMsU0FBMUIsQ0FBZDtBQUNBO0FBQ0QsS0FMRCxNQUtPO0FBQUE7O0FBQ042UixZQUFNLENBQUM5UixJQUFQLENBQVksQ0FBQWUsS0FBSyxTQUFMLElBQUFBLEtBQUssV0FBTCw2QkFBQUEsS0FBSyxDQUFFMUYsS0FBUCxnRUFBY2tXLEtBQWQsS0FBdUIsRUFBbkM7QUFDQTNRLGNBQVEsQ0FBQ1osSUFBVCxlQUFjYyx5REFBQSxDQUFtQkMsS0FBbkIsRUFBMEI7QUFBQ2lSLFlBQUksRUFBRW5ILEtBQVA7QUFBY2xOLFdBQUcsRUFBRSxDQUFBb0QsS0FBSyxTQUFMLElBQUFBLEtBQUssV0FBTCxZQUFBQSxLQUFLLENBQUVwRCxHQUFQLEtBQWNrTixLQUFLLENBQUM1SyxRQUFOO0FBQWpDLE9BQTFCLENBQWQ7QUFDQTtBQUNELEdBZEQ7O0FBZ0JBLE1BQU1nUyxVQUFVLEdBQUcsU0FBYkEsVUFBYTtBQUFBLFdBQU0sK0VBQU47QUFBQSxHQUFuQjs7QUFFQSxNQUFNbk8sWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ3BDLE1BQUQsRUFBYzBQLE9BQWQsRUFBa0M7QUFDdEQsUUFBSU8sV0FBVyxHQUFHLENBQWQsTUFBb0IvUSxRQUFwQixhQUFvQkEsUUFBcEIsdUJBQW9CQSxRQUFRLENBQUV3QyxNQUE5QixDQUFKLEVBQTBDO0FBQ3pDc08sY0FBUSxpQ0FBS1AsS0FBTCx3RkFBYUMsT0FBYixFQUF1QjFQLE1BQXZCLEdBQVI7QUFDQW1RLHFCQUFlLENBQUMsSUFBRCxDQUFmO0FBQ0F4VyxXQUFLLENBQUNpVyxRQUFOLGlDQUFtQkgsS0FBbkIsd0ZBQTJCQyxPQUEzQixFQUFxQzFQLE1BQXJDO0FBQ0EsS0FKRCxNQUlPO0FBQ05nUSxjQUFRLGlDQUFLUCxLQUFMLHdGQUFhQyxPQUFiLEVBQXVCMVAsTUFBdkIsR0FBUjtBQUNBa1Esb0JBQWMsQ0FBQ0QsV0FBVyxHQUFHLENBQWYsQ0FBZDtBQUNBO0FBQ0QsR0FURDs7QUFXQSxNQUFJdFcsS0FBSyxDQUFDNlcsUUFBVixFQUFvQjtBQUNuQix3QkFDQyw4REFBQyw4REFBRDtBQUFzQixXQUFLLEVBQUU7QUFBQ2YsYUFBSyxFQUFMQSxLQUFEO0FBQVFyTixvQkFBWSxFQUFaQTtBQUFSLE9BQTdCO0FBQUEsaUJBQ0V6SSxLQUFLLENBQUM4VyxhQUFOLGlCQUF1Qiw4REFBQyxvREFBRDtBQUFRLGVBQU8sRUFBRUYsVUFBakI7QUFBNkIsWUFBSSxFQUFFLENBQUNsUTtBQUFwQztBQUFBO0FBQUE7QUFBQTtBQUFBLGNBRHpCLGVBRUMsOERBQUMsbURBQUQ7QUFBTSxlQUFPLE1BQWI7QUFBYyxpQkFBUyxNQUF2QjtBQUFBLCtCQUNDLDhEQUFDLHVEQUFEO0FBQUEsa0NBQ0MsOERBQUMsMERBQUQ7QUFBYSxpQkFBSyxFQUFFLENBQXBCO0FBQUEsbUNBQ0MsOERBQUMseURBQUQ7QUFBb0IscUJBQU8sTUFBM0I7QUFBNEIsa0JBQUksRUFBQyxNQUFqQztBQUF3QyxzQkFBUSxNQUFoRDtBQUFpRCxvQkFBTSxFQUFFLENBQXpEO0FBQUEsd0JBQ0UrUCxNQURGLGFBQ0VBLE1BREYsdUJBQ0VBLE1BQU0sQ0FBRXJPLEdBQVIsQ0FBWSxVQUFDOE4sS0FBRCxFQUFRMUcsS0FBUixFQUFrQjtBQUM5QixvQ0FDQyw4REFBQyxtREFBRDtBQUVDLDJCQUFTLEVBQUVBLEtBQUssR0FBR3RJLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZMk8sS0FBWixFQUFtQi9OLE1BRnZDO0FBR0Msd0JBQU0sRUFBRXVPLFdBQVcsS0FBSzlHLEtBSHpCO0FBSUMseUJBQU8sRUFBRTtBQUFBLDJCQUFNK0csY0FBYyxDQUFDL0csS0FBRCxDQUFwQjtBQUFBLG1CQUpWO0FBS0MsMEJBQVEsRUFBRUEsS0FBSyxHQUFHdEksTUFBTSxDQUFDQyxJQUFQLENBQVkyTyxLQUFaLEVBQW1CL04sTUFMdEM7QUFBQSx5Q0FPQyw4REFBQywyREFBRDtBQUFBLDJDQUNDLDhEQUFDLHlEQUFEO0FBQUEsZ0NBQXFCbU87QUFBckI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUREO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFQRCxtQkFDTTFHLEtBQUssQ0FBQzVLLFFBQU4sRUFETjtBQUFBO0FBQUE7QUFBQTtBQUFBLHlCQUREO0FBYUEsZUFkQTtBQURGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFERDtBQUFBO0FBQUE7QUFBQTtBQUFBLGtCQURELGVBb0JDLDhEQUFDLDBEQUFEO0FBQWEsaUJBQUssRUFBRSxFQUFwQjtBQUFBLHNCQUF5QlcsUUFBekIsYUFBeUJBLFFBQXpCLHVCQUF5QkEsUUFBUSxDQUFHK1EsV0FBSDtBQUFqQztBQUFBO0FBQUE7QUFBQTtBQUFBLGtCQXBCRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFERDtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBRkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBREQ7QUE2QkE7O0FBRUQsc0JBQ0MsOERBQUMsOERBQUQ7QUFBc0IsU0FBSyxFQUFFO0FBQUNSLFdBQUssRUFBTEEsS0FBRDtBQUFRck4sa0JBQVksRUFBWkE7QUFBUixLQUE3QjtBQUFBLGVBQ0V6SSxLQUFLLENBQUM4VyxhQUFOLGlCQUF1Qiw4REFBQyxvREFBRDtBQUFRLGFBQU8sRUFBRUY7QUFBakI7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUR6QixlQUVDLDhEQUFDLHlEQUFEO0FBQW9CLGFBQU8sTUFBM0I7QUFBNEIsVUFBSSxFQUFDLE1BQWpDO0FBQUEsZ0JBQ0VILE1BREYsYUFDRUEsTUFERix1QkFDRUEsTUFBTSxDQUFFck8sR0FBUixDQUFZLFVBQUM4TixLQUFELEVBQVExRyxLQUFSLEVBQWtCO0FBQzlCLDRCQUNDLDhEQUFDLG1EQUFEO0FBRUMsbUJBQVMsRUFBRUEsS0FBSyxHQUFHdEksTUFBTSxDQUFDQyxJQUFQLENBQVkyTyxLQUFaLEVBQW1CL04sTUFGdkM7QUFHQyxnQkFBTSxFQUFFdU8sV0FBVyxLQUFLOUcsS0FIekI7QUFJQyxpQkFBTyxFQUFFO0FBQUEsbUJBQU0rRyxjQUFjLENBQUMvRyxLQUFELENBQXBCO0FBQUEsV0FKVjtBQUtDLGtCQUFRLEVBQUVBLEtBQUssR0FBR3RJLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZMk8sS0FBWixFQUFtQi9OLE1BTHRDO0FBQUEsaUNBT0MsOERBQUMsMkRBQUQ7QUFBQSxtQ0FDQyw4REFBQyx5REFBRDtBQUFBLHdCQUFxQm1PO0FBQXJCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFERDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUEQsV0FDTTFHLEtBQUssQ0FBQzVLLFFBQU4sRUFETjtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQUREO0FBYUEsT0FkQTtBQURGO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFGRCxFQW1CRVcsUUFuQkYsYUFtQkVBLFFBbkJGLHVCQW1CRUEsUUFBUSxDQUFHK1EsV0FBSCxDQW5CVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFERDtBQXVCQTs7R0E1RmVGLFk7O0tBQUFBLFk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsQmhCO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNGQTtBQUVPLElBQU1XLFdBQVcsZ0JBQUd0UiwwREFBQSxDQUE0RztBQUN0SWdELGNBQVksRUFBRSx3QkFBTSxDQUFFLENBRGdIO0FBRXRJcU4sT0FBSyxFQUFFO0FBRitILENBQTVHLENBQXBCLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNGUDtBQUNBO0FBRU8sU0FBU0QsT0FBVCxHQUFzRTtBQUFBOztBQUM1RSxvQkFBOEJ2SCxpREFBVSxDQUFDeUkscURBQUQsQ0FBeEM7QUFBQSxNQUFPakIsS0FBUCxlQUFPQSxLQUFQO0FBQUEsTUFBY3JOLFlBQWQsZUFBY0EsWUFBZDs7QUFFQSxTQUFPLENBQUNxTixLQUFELEVBQVFyTixZQUFSLENBQVA7QUFDQTs7R0FKZW9OLE87Ozs7Ozs7Ozs7Ozs7Ozs7O0FDSCtFO0FBQy9GLFlBQTBIOztBQUUxSDs7QUFFQTtBQUNBOztBQUVBLGFBQWEsMEdBQUcsQ0FBQyw0R0FBTzs7OztBQUl4QixpRUFBZSxtSEFBYyxNQUFNLEU7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1puQztBQUM0SDtBQUM3QjtBQUMvRiw4QkFBOEIsbUZBQTJCLENBQUMsd0dBQXFDO0FBQy9GO0FBQ0Esc0VBQXNFLDRCQUE0QixHQUFHLDhEQUE4RCwwQkFBMEIsR0FBRyw4QkFBOEIsZ0JBQWdCLHlCQUF5QixHQUFHLHNDQUFzQyxnQkFBZ0IsR0FBRywrQkFBK0IsZ0JBQWdCLCtCQUErQixHQUFHLHdDQUF3QywrQkFBK0IsR0FBRyw4QkFBOEIsMEJBQTBCLEdBQUcsU0FBUyw2RkFBNkYsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksK0RBQStELDRCQUE0QixHQUFHLHlGQUF5RiwwQkFBMEIsR0FBRyx1Q0FBdUMsZ0JBQWdCLHlCQUF5QixHQUFHLCtDQUErQyxnQkFBZ0IsR0FBRyx3Q0FBd0MsZ0JBQWdCLCtCQUErQixHQUFHLGlEQUFpRCwrQkFBK0IsR0FBRyx1Q0FBdUMsMEJBQTBCLEdBQUcscUJBQXFCO0FBQzM1QztBQUNBLGlFQUFlLHVCQUF1QixFQUFDOzs7Ozs7Ozs7OztBQ1AxQjs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNENBQTRDLHFCQUFxQjtBQUNqRTs7QUFFQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxxQkFBcUIsaUJBQWlCO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IscUJBQXFCO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRTs7Ozs7Ozs7OztBQ2pFYTs7QUFFYixpQ0FBaUMsMkhBQTJIOztBQUU1Siw2QkFBNkIsa0tBQWtLOztBQUUvTCxpREFBaUQsZ0JBQWdCLGdFQUFnRSx3REFBd0QsNkRBQTZELHNEQUFzRCxrSEFBa0g7O0FBRTlaLHNDQUFzQyx1REFBdUQsdUNBQXVDLFNBQVMsT0FBTyxrQkFBa0IsRUFBRSxhQUFhOztBQUVyTCx3Q0FBd0MsZ0ZBQWdGLGVBQWUsZUFBZSxnQkFBZ0Isb0JBQW9CLE1BQU0sMENBQTBDLCtCQUErQixhQUFhLHFCQUFxQixtQ0FBbUMsRUFBRSxFQUFFLGNBQWMsV0FBVyxVQUFVLEVBQUUsVUFBVSxNQUFNLGlEQUFpRCxFQUFFLFVBQVUsa0JBQWtCLEVBQUUsRUFBRSxhQUFhOztBQUV2ZSwrQkFBK0Isb0NBQW9DOztBQUVuRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsY0FBYztBQUNyRTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLEU7Ozs7Ozs7Ozs7QUMvQmE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RDs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLHdCQUF3QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixpQkFBaUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQixLQUF3QyxHQUFHLHNCQUFpQixHQUFHLENBQUk7O0FBRW5GO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLHFFQUFxRSxxQkFBcUIsYUFBYTs7QUFFdkc7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RDtBQUN6RCxHQUFHOztBQUVIOzs7QUFHQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLDRCQUE0QjtBQUMvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxvQkFBb0IsNkJBQTZCO0FBQ2pEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFOzs7Ozs7Ozs7O0FDNVFBLDBFOzs7Ozs7Ozs7O0FDQUEsbUU7Ozs7Ozs7Ozs7QUNBQSxnRTs7Ozs7Ozs7OztBQ0FBLG1FOzs7Ozs7Ozs7O0FDQUEsbUU7Ozs7Ozs7Ozs7QUNBQSw2RDs7Ozs7Ozs7OztBQ0FBLDRFOzs7Ozs7Ozs7O0FDQUEsOEU7Ozs7Ozs7Ozs7QUNBQSxrRTs7Ozs7Ozs7OztBQ0FBLHNFOzs7Ozs7Ozs7O0FDQUEsMkM7Ozs7Ozs7Ozs7QUNBQSx1Qzs7Ozs7Ozs7OztBQ0FBLHdDOzs7Ozs7Ozs7O0FDQUEsNEM7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7OztBQ0FBLDJDOzs7Ozs7Ozs7O0FDQUEsa0M7Ozs7Ozs7Ozs7QUNBQSxvQzs7Ozs7Ozs7OztBQ0FBLHVDOzs7Ozs7Ozs7O0FDQUEsc0M7Ozs7Ozs7Ozs7QUNBQSx3Qzs7Ozs7Ozs7OztBQ0FBLDZDOzs7Ozs7Ozs7O0FDQUEseUM7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7OztBQ0FBLDhDOzs7Ozs7Ozs7O0FDQUEsOEM7Ozs7Ozs7Ozs7QUNBQSx5Qzs7Ozs7Ozs7OztBQ0FBLG1EOzs7Ozs7Ozs7O0FDQUEsK0M7Ozs7Ozs7Ozs7QUNBQSxxRDs7Ozs7O1VDQUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7Ozs7V0N0QkE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGdDQUFnQyxZQUFZO1dBQzVDO1dBQ0EsRTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHdDQUF3Qyx5Q0FBeUM7V0FDakY7V0FDQTtXQUNBLEU7Ozs7O1dDUEEsd0Y7Ozs7O1dDQUE7V0FDQTtXQUNBO1dBQ0Esc0RBQXNELGtCQUFrQjtXQUN4RTtXQUNBLCtDQUErQyxjQUFjO1dBQzdELEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNOQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUdBIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERhdGVQaWNrZXIgZnJvbSAncmVhY3QtZGF0ZXBpY2tlcic7XG5pbXBvcnQgJy4vc3R5bGVzLmNzcyc7XG5cbmV4cG9ydCB7RGF0ZVBpY2tlcn07XG4iLCJpbXBvcnQgdHlwZSB7TG9jYWxEYXRlfSBmcm9tICdAanMtam9kYS9jb3JlJztcbmltcG9ydCB7dG9EYXRlLCB0b0xvY2FsRGF0ZX0gZnJvbSAnQHRoeC9kYXRlJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge1JlYWN0RGF0ZVBpY2tlclByb3BzfSBmcm9tICdyZWFjdC1kYXRlcGlja2VyJztcbmltcG9ydCB0eXBlIHtJbnB1dFByb3BzfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQge0RhdGVQaWNrZXJ9IGZyb20gJy4uL0RhdGVQaWNrZXIvaW5kZXgnO1xuaW1wb3J0IHtNYXNrZWREYXRlSW5wdXR9IGZyb20gJy4vTWFza2VkRGF0ZUlucHV0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZGF0ZS5Mb2NhbERhdGVQaWNrZXInKTtcblxuaW50ZXJmYWNlIElMb2NhbERhdGVQaWNrZXIge1xuXHR2YWx1ZT86IExvY2FsRGF0ZSB8IG51bWJlciB8IG51bGw7XG5cdG9uQ2hhbmdlPzogKHZhbHVlOiBMb2NhbERhdGUgfCBudWxsKSA9PiB2b2lkO1xuXHRvbkNoYW5nZVJhdz86ICgpID0+IHZvaWQ7XG5cdG1pbkRhdGU/OiBMb2NhbERhdGU7XG5cdG1heERhdGU/OiBMb2NhbERhdGU7XG59XG5cbnR5cGUgSW5wdXRQcm9wc09taXR0ZWQgPSBPbWl0PElucHV0UHJvcHMsICdvbkNoYW5nZSc+O1xudHlwZSBSZWFjdERhdGVQaWNrZXJQcm9wc09taXR0ZWQgPSBPbWl0PE9taXQ8UmVhY3REYXRlUGlja2VyUHJvcHMsICd2YWx1ZSc+LCAnb25DaGFuZ2UnIHwgJ21pbkRhdGUnIHwgJ21heERhdGUnPjtcbmV4cG9ydCB0eXBlIExvY2FsRGF0ZVBpY2tlclByb3BzID0gSUxvY2FsRGF0ZVBpY2tlciAmIElucHV0UHJvcHNPbWl0dGVkICYgUmVhY3REYXRlUGlja2VyUHJvcHNPbWl0dGVkO1xuXG5leHBvcnQgZnVuY3Rpb24gTG9jYWxEYXRlUGlja2VyKHByb3BzOiBMb2NhbERhdGVQaWNrZXJQcm9wcyk6IEpTWC5FbGVtZW50IHtcblx0Y29uc3Qge1xuXHRcdG1pbkRhdGUsXG5cdFx0bWF4RGF0ZSxcblx0XHR2YWx1ZSxcblx0XHRvbkNoYW5nZSxcblx0XHRvbkJsdXIsXG5cdFx0YXMsXG5cdFx0YWN0aW9uLFxuXHRcdGFjdGlvblBvc2l0aW9uLFxuXHRcdGNsYXNzTmFtZSxcblx0XHRlcnJvcixcblx0XHRmbHVpZCxcblx0XHRmb2N1cyxcblx0XHRpY29uLFxuXHRcdGljb25Qb3NpdGlvbixcblx0XHRpbnZlcnRlZCxcblx0XHRsYWJlbCxcblx0XHRsYWJlbFBvc2l0aW9uLFxuXHRcdGxvYWRpbmcsXG5cdFx0c2l6ZSxcblx0XHR0YWJJbmRleCxcblx0XHR0cmFuc3BhcmVudCxcblx0XHQuLi5yZXN0XG5cdH0gPSBwcm9wcztcblxuXHRjb25zdCBzZWxlY3RlZCA9IHZhbHVlID8gdG9EYXRlKHZhbHVlKSA6IG51bGw7XG5cblx0Y29uc3QgaW5wdXRQcm9wcyA9IHtcblx0XHRhcyxcblx0XHRhY3Rpb24sXG5cdFx0YWN0aW9uUG9zaXRpb24sXG5cdFx0Y2xhc3NOYW1lLFxuXHRcdGVycm9yLFxuXHRcdGZsdWlkLFxuXHRcdGZvY3VzLFxuXHRcdGljb24sXG5cdFx0aWNvblBvc2l0aW9uLFxuXHRcdGludmVydGVkLFxuXHRcdGxhYmVsLFxuXHRcdGxhYmVsUG9zaXRpb24sXG5cdFx0bG9hZGluZyxcblx0XHRzaXplLFxuXHRcdHRhYkluZGV4LFxuXHRcdHRyYW5zcGFyZW50LFxuXHR9O1xuXG5cdHJldHVybiAoXG5cdFx0PERhdGVQaWNrZXJcblx0XHRcdHsuLi5yZXN0fVxuXHRcdFx0c2VsZWN0ZWQ9e3NlbGVjdGVkfVxuXHRcdFx0b25DaGFuZ2U9e2RhdGUgPT4ge1xuXHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKGRhdGUgPyB0b0xvY2FsRGF0ZShkYXRlKSA6IG51bGwpO1xuXHRcdFx0fX1cblx0XHRcdG9uQmx1cj17b25CbHVyfVxuXHRcdFx0Y3VzdG9tSW5wdXQ9ezxNYXNrZWREYXRlSW5wdXQgey4uLmlucHV0UHJvcHN9IG9uQmx1cj17b25CbHVyfSAvPn1cblx0XHRcdG1pbkRhdGU9e21pbkRhdGUgPyB0b0RhdGUobWluRGF0ZSkgOiBudWxsfVxuXHRcdFx0bWF4RGF0ZT17bWF4RGF0ZSA/IHRvRGF0ZShtYXhEYXRlKSA6IG51bGx9XG5cdFx0Lz5cblx0KTtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QsIHtmb3J3YXJkUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge01hc2tlZElucHV0LCBNYXNrZWRJbnB1dFByb3BzfSBmcm9tICcuLi8uLi9pbnB1dHMvTWFza2VkSW5wdXQnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5kYXRlLkxvY2FsRGF0ZVBpY2tlci5NYXNrZWREYXRlSW5wdXQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBNYXNrZWREYXRlSW5wdXRQcm9wcyB7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdG9uQ2hhbmdlPzogKHZhbHVlOiB7dGFyZ2V0OiB7dmFsdWU6IHN0cmluZ319KSA9PiB2b2lkO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5mdW5jdGlvbiBNYXNrZWREYXRlSW5wdXRJbm5lcihwcm9wczogTWFza2VkRGF0ZUlucHV0UHJvcHMgJiBPbWl0PE1hc2tlZElucHV0UHJvcHMsICdvbkNoYW5nZSc+LCByZWY6IGFueSkge1xuXHRjb25zdCB7b25DaGFuZ2UsIG5hbWUsIC4uLnJlc3R9ID0gcHJvcHM7XG5cblx0cmV0dXJuIChcblx0XHQ8TWFza2VkSW5wdXRcblx0XHRcdHsuLi5yZXN0fVxuXHRcdFx0bmFtZT17bmFtZX1cblx0XHRcdG1hc2s9e3thbGlhczogJ2RhdGV0aW1lJywgaW5wdXRGb3JtYXQ6ICdtbS9kZC95eXl5J319XG5cdFx0XHRvbkNoYW5nZT17dmFsdWUgPT4ge1xuXHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKHt0YXJnZXQ6IHt2YWx1ZTogdmFsdWUgfHwgJyd9fSk7XG5cdFx0XHR9fVxuXHRcdC8+XG5cdCk7XG59XG5cbmV4cG9ydCBjb25zdCBNYXNrZWREYXRlSW5wdXQgPSBmb3J3YXJkUmVmKE1hc2tlZERhdGVJbnB1dElubmVyKTtcbiIsImltcG9ydCB7TG9jYWxEYXRlfSBmcm9tICdAanMtam9kYS9jb3JlJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTZWxlY3QsIFNlbGVjdFByb3BzfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmRhdGUuTG9jYWxNb250aFNlbGVjdCcpO1xuXG5jb25zdCBtb250aE9wdGlvbnMgPSBbXG5cdHt0ZXh0OiAnSmFudWFyeScsIHZhbHVlOiAxLCBrZXk6IDF9LFxuXHR7dGV4dDogJ0ZlYnJ1YXJ5JywgdmFsdWU6IDIsIGtleTogMn0sXG5cdHt0ZXh0OiAnTWFyY2gnLCB2YWx1ZTogMywga2V5OiAzfSxcblx0e3RleHQ6ICdBcHJpbCcsIHZhbHVlOiA0LCBrZXk6IDR9LFxuXHR7dGV4dDogJ01heScsIHZhbHVlOiA1LCBrZXk6IDV9LFxuXHR7dGV4dDogJ0p1bmUnLCB2YWx1ZTogNiwga2V5OiA2fSxcblx0e3RleHQ6ICdKdWx5JywgdmFsdWU6IDcsIGtleTogN30sXG5cdHt0ZXh0OiAnQXVndXN0JywgdmFsdWU6IDgsIGtleTogOH0sXG5cdHt0ZXh0OiAnU2VwdGVtYmVyJywgdmFsdWU6IDksIGtleTogOX0sXG5cdHt0ZXh0OiAnT2N0b2JlcicsIHZhbHVlOiAxMCwga2V5OiAxMH0sXG5cdHt0ZXh0OiAnTm92ZW1iZXInLCB2YWx1ZTogMTEsIGtleTogMTF9LFxuXHR7dGV4dDogJ0RlY2VtYmVyJywgdmFsdWU6IDEyLCBrZXk6IDEyfSxcbl07XG5cbmludGVyZmFjZSBJTG9jYWxNb250aFNlbGVjdFByb3BzIHtcblx0b25DaGFuZ2U/OiAodmFsdWU6IExvY2FsRGF0ZSB8IG51bGwpID0+IHZvaWQ7XG5cdHZhbHVlPzogTG9jYWxEYXRlIHwgbnVsbDtcblx0eWVhcj86IG51bWJlcjtcblx0aGFuZGxlQmx1cj86IChldmVudDogYW55KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBMb2NhbE1vbnRoU2VsZWN0UHJvcHMgPSBJTG9jYWxNb250aFNlbGVjdFByb3BzICYgT21pdDxTZWxlY3RQcm9wcywgJ29wdGlvbnMnPjtcblxuZXhwb3J0IGZ1bmN0aW9uIExvY2FsTW9udGhTZWxlY3QocHJvcHM6IExvY2FsTW9udGhTZWxlY3RQcm9wcyk6IEpTWC5FbGVtZW50IHtcblx0Y29uc3Qge3ZhbHVlLCBvbkNoYW5nZSwgeWVhciwgaGFuZGxlQmx1ciwgLi4ucmVzdH0gPSBwcm9wcztcblxuXHRjb25zdCB0aGVZZWFyID0geWVhciB8fCBMb2NhbERhdGUubm93KCkueWVhcigpO1xuXG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFxuXHRcdFx0cGxhY2Vob2xkZXI9XCJTZWxlY3QgTW9udGhcIlxuXHRcdFx0b3B0aW9ucz17bW9udGhPcHRpb25zfVxuXHRcdFx0dmFsdWU9e3ZhbHVlID8gdmFsdWUubW9udGhWYWx1ZSgpIDogJyd9XG5cdFx0XHRvbkNoYW5nZT17KGV2LCB2KSA9PiB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkge1xuXHRcdFx0XHRcdGlmICh0eXBlb2Ygdi52YWx1ZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0XHRcdG9uQ2hhbmdlKHYgPyBMb2NhbERhdGUub2YodGhlWWVhciwgdi52YWx1ZSwgMSkgOiBudWxsKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b25DaGFuZ2UobnVsbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9fVxuXHRcdFx0b25CbHVyPXtoYW5kbGVCbHVyfVxuXHRcdFx0ey4uLnJlc3R9XG5cdFx0Lz5cblx0KTtcbn1cbiIsImltcG9ydCB7TG9jYWxUaW1lfSBmcm9tICdAanMtam9kYS9jb3JlJztcbmltcG9ydCB7dG9EYXRlLCB0b0xvY2FsVGltZX0gZnJvbSAnQHRoeC9kYXRlJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge1JlYWN0RGF0ZVBpY2tlclByb3BzfSBmcm9tICdyZWFjdC1kYXRlcGlja2VyJztcbmltcG9ydCB0eXBlIHtJbnB1dFByb3BzfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQge0RhdGVQaWNrZXJ9IGZyb20gJy4uL0RhdGVQaWNrZXIvaW5kZXgnO1xuaW1wb3J0IHtNYXNrZWRUaW1lSW5wdXR9IGZyb20gJy4vTWFza2VkVGltZUlucHV0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZGF0ZS5Mb2NhbFRpbWVQaWNrZXInKTtcblxuaW50ZXJmYWNlIElMb2NhbFRpbWVQaWNrZXIge1xuXHR2YWx1ZT86IExvY2FsVGltZSB8IG51bWJlciB8IG51bGw7XG5cdG9uQ2hhbmdlPzogKHZhbHVlOiBMb2NhbFRpbWUgfCBudWxsKSA9PiB2b2lkO1xuXHRvbkNoYW5nZVJhdz86ICgpID0+IHZvaWQ7XG59XG5cbnR5cGUgSW5wdXRQcm9wc09taXR0ZWQgPSBPbWl0PElucHV0UHJvcHMsICdvbkNoYW5nZSc+O1xudHlwZSBSZWFjdERhdGVQaWNrZXJQcm9wc09taXR0ZWQgPSBPbWl0PE9taXQ8UmVhY3REYXRlUGlja2VyUHJvcHMsICd2YWx1ZSc+LCAnb25DaGFuZ2UnPjtcbmV4cG9ydCB0eXBlIExvY2FsVGltZVBpY2tlclByb3BzID0gSUxvY2FsVGltZVBpY2tlciAmIElucHV0UHJvcHNPbWl0dGVkICYgUmVhY3REYXRlUGlja2VyUHJvcHNPbWl0dGVkO1xuXG5leHBvcnQgZnVuY3Rpb24gTG9jYWxUaW1lUGlja2VyKHByb3BzOiBMb2NhbFRpbWVQaWNrZXJQcm9wcyk6IEpTWC5FbGVtZW50IHtcblx0Y29uc3Qge1xuXHRcdHZhbHVlLFxuXHRcdG9uQ2hhbmdlLFxuXHRcdGFzLFxuXHRcdGFjdGlvbixcblx0XHRhY3Rpb25Qb3NpdGlvbixcblx0XHRjbGFzc05hbWUsXG5cdFx0ZGlzYWJsZWQsXG5cdFx0ZXJyb3IsXG5cdFx0Zmx1aWQsXG5cdFx0Zm9jdXMsXG5cdFx0aWNvbixcblx0XHRpY29uUG9zaXRpb24sXG5cdFx0aW52ZXJ0ZWQsXG5cdFx0bGFiZWwsXG5cdFx0bGFiZWxQb3NpdGlvbixcblx0XHRsb2FkaW5nLFxuXHRcdHNpemUsXG5cdFx0dGFiSW5kZXgsXG5cdFx0dHJhbnNwYXJlbnQsXG5cdFx0Li4ucmVzdFxuXHR9ID0gcHJvcHM7XG5cblx0bGV0IHNlbGVjdGVkO1xuXHRpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgc2VsZWN0ZWQgPSB0b0RhdGUoTG9jYWxUaW1lLm9mU2Vjb25kT2ZEYXkodmFsdWUpKTtcblx0ZWxzZSBzZWxlY3RlZCA9IHZhbHVlID8gdG9EYXRlKHZhbHVlKSA6IG51bGw7XG5cblx0Y29uc3QgaW5wdXRQcm9wcyA9IHtcblx0XHRhcyxcblx0XHRhY3Rpb24sXG5cdFx0YWN0aW9uUG9zaXRpb24sXG5cdFx0Y2xhc3NOYW1lLFxuXHRcdGRpc2FibGVkLFxuXHRcdGVycm9yLFxuXHRcdGZsdWlkLFxuXHRcdGZvY3VzLFxuXHRcdGljb24sXG5cdFx0aWNvblBvc2l0aW9uLFxuXHRcdGludmVydGVkLFxuXHRcdGxhYmVsLFxuXHRcdGxhYmVsUG9zaXRpb24sXG5cdFx0bG9hZGluZyxcblx0XHRzaXplLFxuXHRcdHRhYkluZGV4LFxuXHRcdHRyYW5zcGFyZW50LFxuXHR9O1xuXG5cdHJldHVybiAoXG5cdFx0PERhdGVQaWNrZXJcblx0XHRcdHsuLi5yZXN0fVxuXHRcdFx0c2VsZWN0ZWQ9e3NlbGVjdGVkfVxuXHRcdFx0b25DaGFuZ2U9e2RhdGUgPT4ge1xuXHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKGRhdGUgPyB0b0xvY2FsVGltZShkYXRlKSA6IG51bGwpO1xuXHRcdFx0fX1cblx0XHRcdHNob3dUaW1lU2VsZWN0XG5cdFx0XHRzaG93VGltZVNlbGVjdE9ubHlcblx0XHRcdHRpbWVJbnRlcnZhbHM9ezE1fVxuXHRcdFx0dGltZUNhcHRpb249XCJUaW1lXCJcblx0XHRcdGRhdGVGb3JtYXQ9XCJoaDptbSBhYVwiXG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRjdXN0b21JbnB1dD17PE1hc2tlZFRpbWVJbnB1dCB7Li4uaW5wdXRQcm9wc30gLz59XG5cdFx0Lz5cblx0KTtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QsIHtmb3J3YXJkUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge01hc2tlZElucHV0LCBNYXNrZWRJbnB1dFByb3BzfSBmcm9tICcuLi8uLi9pbnB1dHMvTWFza2VkSW5wdXQnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5kYXRlLkxvY2FsVGltZVBpY2tlci5NYXNrZWRUaW1lSW5wdXQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBNYXNrZWRUaW1lSW5wdXRQcm9wcyB7XG5cdG9uQ2hhbmdlPzogKHZhbHVlOiB7dGFyZ2V0OiB7dmFsdWU6IHN0cmluZ319KSA9PiB2b2lkO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5mdW5jdGlvbiBNYXNrZWRUaW1lSW5wdXRJbm5lcihwcm9wczogTWFza2VkVGltZUlucHV0UHJvcHMgJiBPbWl0PE1hc2tlZElucHV0UHJvcHMsICdvbkNoYW5nZSc+LCByZWY6IGFueSkge1xuXHRjb25zdCB7b25DaGFuZ2UsIC4uLnJlc3R9ID0gcHJvcHM7XG5cblx0cmV0dXJuIChcblx0XHQ8TWFza2VkSW5wdXRcblx0XHRcdG1hc2s9e3thbGlhczogJ2RhdGV0aW1lJywgaW5wdXRGb3JtYXQ6ICdoaDpNTSBUVCd9fVxuXHRcdFx0b25DaGFuZ2U9e3ZhbHVlID0+IHtcblx0XHRcdFx0aWYgKG9uQ2hhbmdlKSBvbkNoYW5nZSh7dGFyZ2V0OiB7dmFsdWU6IHZhbHVlIHx8ICcnfX0pO1xuXHRcdFx0fX1cblx0XHRcdHsuLi5yZXN0fVxuXHRcdC8+XG5cdCk7XG59XG5cbmV4cG9ydCBjb25zdCBNYXNrZWRUaW1lSW5wdXQgPSBmb3J3YXJkUmVmKE1hc2tlZFRpbWVJbnB1dElubmVyKTtcbiIsImltcG9ydCB0eXBlIHtMb2NhbERhdGV9IGZyb20gJ0Bqcy1qb2RhL2NvcmUnO1xuaW1wb3J0IHt0b0RhdGUsIHRvTG9jYWxEYXRlfSBmcm9tICdAdGh4L2RhdGUnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7UmVhY3REYXRlUGlja2VyUHJvcHN9IGZyb20gJ3JlYWN0LWRhdGVwaWNrZXInO1xuaW1wb3J0IHtJbnB1dFByb3BzLCBJbnB1dH0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHtEYXRlUGlja2VyfSBmcm9tICcuLi9EYXRlUGlja2VyL2luZGV4JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZGF0ZS5Nb250aERheVBpY2tlcicpO1xuXG5jb25zdCBtb250aHMgPSBbXG5cdCdKYW51YXJ5Jyxcblx0J0ZlYnJ1YXJ5Jyxcblx0J01hcmNoJyxcblx0J0FwcmlsJyxcblx0J01heScsXG5cdCdKdW5lJyxcblx0J0p1bHknLFxuXHQnQXVndXN0Jyxcblx0J1NlcHRlbWJlcicsXG5cdCdPY3RvYmVyJyxcblx0J05vdmVtYmVyJyxcblx0J0RlY2VtYmVyJyxcbl07XG5cbmludGVyZmFjZSBNb250aERheUhlYWRlclByb3BzIHtcblx0ZGF0ZTogRGF0ZTtcblx0Y2hhbmdlWWVhcih5ZWFyOiBudW1iZXIpOiB2b2lkO1xuXHRjaGFuZ2VNb250aChtb250aDogbnVtYmVyKTogdm9pZDtcblx0ZGVjcmVhc2VNb250aCgpOiB2b2lkO1xuXHRpbmNyZWFzZU1vbnRoKCk6IHZvaWQ7XG5cdHByZXZNb250aEJ1dHRvbkRpc2FibGVkOiBib29sZWFuO1xuXHRuZXh0TW9udGhCdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcblx0ZGVjcmVhc2VZZWFyKCk6IHZvaWQ7XG5cdGluY3JlYXNlWWVhcigpOiB2b2lkO1xuXHRwcmV2WWVhckJ1dHRvbkRpc2FibGVkOiBib29sZWFuO1xuXHRuZXh0WWVhckJ1dHRvbkRpc2FibGVkOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBNb250aERheUhlYWRlcihwcm9wczogTW9udGhEYXlIZWFkZXJQcm9wcykge1xuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInJlYWN0LWRhdGVwaWNrZXJfX2N1cnJlbnQtbW9udGhcIj57bW9udGhzW3Byb3BzLmRhdGUuZ2V0TW9udGgoKV19PC9kaXY+XG5cdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRjbGFzc05hbWU9XCJyZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uIHJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzXCJcblx0XHRcdFx0YXJpYS1sYWJlbD1cIlByZXZpb3VzIE1vbnRoXCJcblx0XHRcdFx0b25DbGljaz17cHJvcHMuZGVjcmVhc2VNb250aH1cblx0XHRcdFx0ZGlzYWJsZWQ9e3Byb3BzLnByZXZNb250aEJ1dHRvbkRpc2FibGVkfVxuXHRcdFx0PlxuXHRcdFx0XHRQcmV2aW91cyBNb250aFxuXHRcdFx0PC9idXR0b24+XG5cdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRjbGFzc05hbWU9XCJyZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uIHJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHRcIlxuXHRcdFx0XHRhcmlhLWxhYmVsPVwiTmV4dCBNb250aFwiXG5cdFx0XHRcdG9uQ2xpY2s9e3Byb3BzLmluY3JlYXNlTW9udGh9XG5cdFx0XHRcdGRpc2FibGVkPXtwcm9wcy5uZXh0TW9udGhCdXR0b25EaXNhYmxlZH1cblx0XHRcdD5cblx0XHRcdFx0TmV4dCBNb250aFxuXHRcdFx0PC9idXR0b24+XG5cdFx0PC8+XG5cdCk7XG59XG5cbmludGVyZmFjZSBJTW9udGhEYXlQaWNrZXJQcm9wcyB7XG5cdHZhbHVlPzogTG9jYWxEYXRlIHwgbnVtYmVyIHwgbnVsbDtcblx0b25DaGFuZ2U/OiAodmFsdWU6IExvY2FsRGF0ZSB8IG51bGwpID0+IHZvaWQ7XG5cdG9uQ2hhbmdlUmF3PzogKCkgPT4gdm9pZDtcbn1cblxudHlwZSBJbnB1dFByb3BzT21pdHRlZCA9IE9taXQ8SW5wdXRQcm9wcywgJ29uQ2hhbmdlJz47XG50eXBlIFJlYWN0RGF0ZVBpY2tlclByb3BzT21pdHRlZCA9IE9taXQ8T21pdDxSZWFjdERhdGVQaWNrZXJQcm9wcywgJ3ZhbHVlJz4sICdvbkNoYW5nZSc+O1xuZXhwb3J0IHR5cGUgTW9udGhEYXlQaWNrZXJQcm9wcyA9IElNb250aERheVBpY2tlclByb3BzICYgSW5wdXRQcm9wc09taXR0ZWQgJiBSZWFjdERhdGVQaWNrZXJQcm9wc09taXR0ZWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBNb250aERheVBpY2tlcihwcm9wczogTW9udGhEYXlQaWNrZXJQcm9wcyk6IEpTWC5FbGVtZW50IHtcblx0Y29uc3Qge1xuXHRcdHZhbHVlLFxuXHRcdG9uQ2hhbmdlLFxuXHRcdGFzLFxuXHRcdGFjdGlvbixcblx0XHRhY3Rpb25Qb3NpdGlvbixcblx0XHRjbGFzc05hbWUsXG5cdFx0ZGlzYWJsZWQsXG5cdFx0ZXJyb3IsXG5cdFx0Zmx1aWQsXG5cdFx0Zm9jdXMsXG5cdFx0aWNvbixcblx0XHRpY29uUG9zaXRpb24sXG5cdFx0aW52ZXJ0ZWQsXG5cdFx0bGFiZWwsXG5cdFx0bGFiZWxQb3NpdGlvbixcblx0XHRsb2FkaW5nLFxuXHRcdHNpemUsXG5cdFx0dGFiSW5kZXgsXG5cdFx0dHJhbnNwYXJlbnQsXG5cdFx0Li4ucmVzdFxuXHR9ID0gcHJvcHM7XG5cblx0Y29uc3Qgc2VsZWN0ZWQgPSB2YWx1ZSA/IHRvRGF0ZSh2YWx1ZSkgOiBudWxsO1xuXG5cdGNvbnN0IGlucHV0UHJvcHMgPSB7XG5cdFx0YXMsXG5cdFx0YWN0aW9uLFxuXHRcdGFjdGlvblBvc2l0aW9uLFxuXHRcdGNsYXNzTmFtZSxcblx0XHRkaXNhYmxlZCxcblx0XHRlcnJvcixcblx0XHRmbHVpZCxcblx0XHRmb2N1cyxcblx0XHRpY29uLFxuXHRcdGljb25Qb3NpdGlvbixcblx0XHRpbnZlcnRlZCxcblx0XHRsYWJlbCxcblx0XHRsYWJlbFBvc2l0aW9uLFxuXHRcdGxvYWRpbmcsXG5cdFx0c2l6ZSxcblx0XHR0YWJJbmRleCxcblx0XHR0cmFuc3BhcmVudCxcblx0fTtcblxuXHRyZXR1cm4gKFxuXHRcdDxEYXRlUGlja2VyXG5cdFx0XHR7Li4ucmVzdH1cblx0XHRcdHNlbGVjdGVkPXtzZWxlY3RlZH1cblx0XHRcdG9uQ2hhbmdlPXtkYXRlID0+IHtcblx0XHRcdFx0aWYgKG9uQ2hhbmdlKSBvbkNoYW5nZShkYXRlID8gdG9Mb2NhbERhdGUoZGF0ZSkgOiBudWxsKTtcblx0XHRcdH19XG5cdFx0XHRjdXN0b21JbnB1dD17PElucHV0IHsuLi5pbnB1dFByb3BzfSAvPn1cblx0XHRcdHJlbmRlckN1c3RvbUhlYWRlcj17TW9udGhEYXlIZWFkZXJ9XG5cdFx0XHRkYXRlRm9ybWF0PVwiTU1NTSBkXCJcblx0XHQvPlxuXHQpO1xufVxuIiwiaW1wb3J0IHtMb2NhbERhdGV9IGZyb20gJ0Bqcy1qb2RhL2NvcmUnO1xuaW1wb3J0IHt0b0RhdGUsIHRvTG9jYWxEYXRlfSBmcm9tICdAdGh4L2RhdGUnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7UmVhY3REYXRlUGlja2VyUHJvcHN9IGZyb20gJ3JlYWN0LWRhdGVwaWNrZXInO1xuaW1wb3J0IHtJbnB1dFByb3BzLCBJbnB1dH0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHtEYXRlUGlja2VyfSBmcm9tICcuLi9EYXRlUGlja2VyL2luZGV4JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZGF0ZS5Nb250aFllYXJQaWNrZXInKTtcblxuaW50ZXJmYWNlIElNb250aFllYXJQaWNrZXJQcm9wcyB7XG5cdHZhbHVlPzogTG9jYWxEYXRlIHwgbnVtYmVyIHwgdW5kZWZpbmVkO1xuXHRvbkNoYW5nZT86ICh2YWx1ZTogTG9jYWxEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuXHRvbkNoYW5nZVJhdz86ICgpID0+IHZvaWQ7XG5cdG1pbkRhdGU/OiBMb2NhbERhdGUgfCB1bmRlZmluZWQ7XG5cdG1heERhdGU/OiBMb2NhbERhdGUgfCB1bmRlZmluZWQ7XG59XG5cbnR5cGUgSW5wdXRQcm9wc09taXR0ZWQgPSBPbWl0PElucHV0UHJvcHMsICdvbkNoYW5nZSc+O1xudHlwZSBSZWFjdERhdGVQaWNrZXJQcm9wc09taXR0ZWQgPSBPbWl0PE9taXQ8UmVhY3REYXRlUGlja2VyUHJvcHMsICd2YWx1ZScgfCAnbWluRGF0ZScgfCAnbWF4RGF0ZSc+LCAnb25DaGFuZ2UnPjtcbmV4cG9ydCB0eXBlIE1vbnRoWWVhclBpY2tlclByb3BzID0gSU1vbnRoWWVhclBpY2tlclByb3BzICYgSW5wdXRQcm9wc09taXR0ZWQgJiBSZWFjdERhdGVQaWNrZXJQcm9wc09taXR0ZWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBNb250aFllYXJQaWNrZXIocHJvcHM6IE1vbnRoWWVhclBpY2tlclByb3BzKTogSlNYLkVsZW1lbnQge1xuXHRjb25zdCB7XG5cdFx0dmFsdWUsXG5cdFx0b25DaGFuZ2UsXG5cdFx0YXMsXG5cdFx0YWN0aW9uLFxuXHRcdGFjdGlvblBvc2l0aW9uLFxuXHRcdGNsYXNzTmFtZSxcblx0XHRkaXNhYmxlZCxcblx0XHRlcnJvcixcblx0XHRmbHVpZCxcblx0XHRmb2N1cyxcblx0XHRpY29uLFxuXHRcdGljb25Qb3NpdGlvbixcblx0XHRpbnZlcnRlZCxcblx0XHRsYWJlbCxcblx0XHRsYWJlbFBvc2l0aW9uLFxuXHRcdGxvYWRpbmcsXG5cdFx0c2l6ZSxcblx0XHR0YWJJbmRleCxcblx0XHR0cmFuc3BhcmVudCxcblx0XHRtaW5EYXRlLFxuXHRcdG1heERhdGUsXG5cdFx0Li4ucmVzdFxuXHR9ID0gcHJvcHM7XG5cblx0Y29uc3Qgc2VsZWN0ZWQgPSB2YWx1ZSA/IHRvRGF0ZSh2YWx1ZSkgOiBudWxsO1xuXG5cdGNvbnN0IGlucHV0UHJvcHMgPSB7XG5cdFx0YXMsXG5cdFx0YWN0aW9uLFxuXHRcdGFjdGlvblBvc2l0aW9uLFxuXHRcdGNsYXNzTmFtZSxcblx0XHRkaXNhYmxlZCxcblx0XHRlcnJvcixcblx0XHRmbHVpZCxcblx0XHRmb2N1cyxcblx0XHRpY29uLFxuXHRcdGljb25Qb3NpdGlvbixcblx0XHRpbnZlcnRlZCxcblx0XHRsYWJlbCxcblx0XHRsYWJlbFBvc2l0aW9uLFxuXHRcdGxvYWRpbmcsXG5cdFx0c2l6ZSxcblx0XHR0YWJJbmRleCxcblx0XHR0cmFuc3BhcmVudCxcblx0fTtcblxuXHRyZXR1cm4gKFxuXHRcdDxEYXRlUGlja2VyXG5cdFx0XHR7Li4ucmVzdH1cblx0XHRcdHNlbGVjdGVkPXtzZWxlY3RlZH1cblx0XHRcdG9uQ2hhbmdlPXtkYXRlID0+IHtcblx0XHRcdFx0aWYgKG9uQ2hhbmdlKSBvbkNoYW5nZShkYXRlID8gdG9Mb2NhbERhdGUoZGF0ZSkgOiB1bmRlZmluZWQpO1xuXHRcdFx0fX1cblx0XHRcdGN1c3RvbUlucHV0PXs8SW5wdXQgey4uLmlucHV0UHJvcHN9IC8+fVxuXHRcdFx0ZGF0ZUZvcm1hdD1cIk1NTU0geXl5eVwiXG5cdFx0XHRzaG93TW9udGhZZWFyUGlja2VyXG5cdFx0XHRtaW5EYXRlPXt0b0RhdGUobWluRGF0ZT8ud2l0aERheU9mTW9udGgoMSkgfHwgTG9jYWxEYXRlLm9mRXBvY2hEYXkoMCkpfVxuXHRcdFx0bWF4RGF0ZT17dG9EYXRlKG1heERhdGU/LnBsdXNNb250aHMoMSkud2l0aERheU9mTW9udGgoMSkubWludXNEYXlzKDEpIHx8IExvY2FsRGF0ZS5ub3coKS5wbHVzWWVhcnMoMjApKX1cblx0XHQvPlxuXHQpO1xufVxuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0ljb24sIEJ1dHRvbiwgRHJvcGRvd24sIERyb3Bkb3duSXRlbVByb3BzLCBTZWdtZW50LCBTZWdtZW50UHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZGF0ZS5ZZWFyU2VsZWN0Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgWWVhclNlbGVjdFByb3BzIHtcblx0b25DaGFuZ2U/OiAodmFsdWU6IG51bWJlcikgPT4gdm9pZDtcblx0b25CbHVyPzogKGV2OiBhbnkpID0+IHZvaWQ7XG5cdHZhbHVlOiBudW1iZXI7XG5cdG1pblllYXI/OiBudW1iZXI7IC8vIERlZmF1bHRzIHRvIDE5NzBcblx0bWF4WWVhcj86IG51bWJlcjsgLy8gRGVmYXVsdHMgdG8gY3VycmVudCB5ZWFyXG5cdGVycm9yPzogYm9vbGVhbjsgLy8gRGVmYXVsdHMgdG8gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFllYXJTZWxlY3QocHJvcHM6IFllYXJTZWxlY3RQcm9wcyAmIE9taXQ8U2VnbWVudFByb3BzLCAnb25DaGFuZ2UnPikge1xuXHRjb25zdCB0aGlzWWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcblx0Y29uc3Qge3ZhbHVlLCBtaW5ZZWFyID0gMTk3MCwgbWF4WWVhciA9IHRoaXNZZWFyLCBvbkNoYW5nZSwgb25CbHVyLCBlcnJvciwgLi4ucmVzdH0gPSBwcm9wcztcblxuXHRjb25zdCBhdmFpbGFibGVZZWFyczogRHJvcGRvd25JdGVtUHJvcHNbXSA9IFtdO1xuXHRmb3IgKGxldCBpID0gbWF4WWVhcjsgaSA+PSBtaW5ZZWFyOyBpLS0pIHtcblx0XHRhdmFpbGFibGVZZWFycy5wdXNoKHt2YWx1ZTogaSwgdGV4dDogaS50b1N0cmluZygpLCBrZXk6IGl9KTtcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PFNlZ21lbnQgYmFzaWMgY29tcGFjdCBzdHlsZT17e3BhZGRpbmc6IDAsIG1hcmdpbjogMH19IHsuLi5yZXN0fT5cblx0XHRcdDxCdXR0b25cblx0XHRcdFx0YmFzaWNcblx0XHRcdFx0aWNvblxuXHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0Y29sb3I9e2Vycm9yID8gJ3JlZCcgOiAnZ3JlZW4nfVxuXHRcdFx0XHRkaXNhYmxlZD17dmFsdWUgPD0gbWluWWVhcn1cblx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UodmFsdWUgLSAxKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0b25CbHVyPXtvbkJsdXJ9XG5cdFx0XHQ+XG5cdFx0XHRcdDxJY29uIG5hbWU9XCJhcnJvdyBsZWZ0XCIgLz5cblx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PERyb3Bkb3duXG5cdFx0XHRcdGljb249ezxkaXYgLz59XG5cdFx0XHRcdGJ1dHRvblxuXHRcdFx0XHRiYXNpY1xuXHRcdFx0XHRzY3JvbGxpbmdcblx0XHRcdFx0dmFsdWU9e3ZhbHVlfVxuXHRcdFx0XHRvcHRpb25zPXthdmFpbGFibGVZZWFyc31cblx0XHRcdFx0b25DaGFuZ2U9eyhlLCB2YWwpID0+IHtcblx0XHRcdFx0XHRpZiAodHlwZW9mIHZhbC52YWx1ZSA9PT0gJ251bWJlcicgJiYgb25DaGFuZ2UpIG9uQ2hhbmdlKHZhbC52YWx1ZSk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVycm9yPXtlcnJvcn1cblx0XHRcdFx0b25CbHVyPXtvbkJsdXJ9XG5cdFx0XHQvPlxuXHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRiYXNpY1xuXHRcdFx0XHRpY29uXG5cdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRjb2xvcj17ZXJyb3IgPyAncmVkJyA6ICdncmVlbid9XG5cdFx0XHRcdGRpc2FibGVkPXt2YWx1ZSA+PSBtYXhZZWFyfVxuXHRcdFx0XHRvbkNsaWNrPXsoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKG9uQ2hhbmdlKSBvbkNoYW5nZSh2YWx1ZSArIDEpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRvbkJsdXI9e29uQmx1cn1cblx0XHRcdFx0c3R5bGU9e3ttYXJnaW5SaWdodDogMH19XG5cdFx0XHQ+XG5cdFx0XHRcdDxJY29uIG5hbWU9XCJhcnJvdyByaWdodFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQ8L1NlZ21lbnQ+XG5cdCk7XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHtGb3JtaWtWYWx1ZXMsIGlzRnVuY3Rpb24sIEZvcm1pa1Byb3ZpZGVyLCBpc0VtcHR5Q2hpbGRyZW59IGZyb20gJ2Zvcm1payc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge1RGb3JtQ29uZmlnLCBURm9ybVByb3BzfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7dXNlVEZvcm19IGZyb20gJy4vdXNlVEZvcm0nO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5mb3JtLlRGb3JtJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBURm9ybTxWYWx1ZXMgZXh0ZW5kcyBGb3JtaWtWYWx1ZXMgPSBGb3JtaWtWYWx1ZXM+KHByb3BzOiBURm9ybUNvbmZpZzxWYWx1ZXM+KSB7XG5cdGNvbnN0IHRiYWcgPSB1c2VURm9ybTxWYWx1ZXM+KHByb3BzKTtcblx0Y29uc3Qge2NvbXBvbmVudCwgcmVuZGVyLCBjaGlsZHJlbiwgaW5uZXJSZWZ9ID0gcHJvcHM7XG5cblx0Ly8gVGhpcyBhbGxvd3MgZm9sa3MgdG8gcGFzcyBhIHJlZiB0byA8Rm9ybWlrIC8+XG5cdFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUoaW5uZXJSZWYsICgpID0+IHRiYWcpO1xuXG5cdGxldCBjaGlsZCA9IG51bGw7XG5cdGlmIChjb21wb25lbnQpIHtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0Y2hpbGQgPSBSZWFjdC5jcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgdGJhZyk7XG5cdH0gZWxzZSBpZiAocmVuZGVyKSB7XG5cdFx0Y2hpbGQgPSByZW5kZXIodGJhZyk7XG5cdH0gZWxzZSBpZiAoY2hpbGRyZW4pIHtcblx0XHRpZiAoaXNGdW5jdGlvbihjaGlsZHJlbikpIHtcblx0XHRcdGNoaWxkID0gKGNoaWxkcmVuIGFzIChiYWc6IFRGb3JtUHJvcHM8VmFsdWVzPikgPT4gUmVhY3QuUmVhY3ROb2RlKSh0YmFnIGFzIFRGb3JtUHJvcHM8VmFsdWVzPik7XG5cdFx0fSBlbHNlIGlmICghaXNFbXB0eUNoaWxkcmVuKGNoaWxkcmVuKSkge1xuXHRcdFx0Y2hpbGQgPSBSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gPEZvcm1pa1Byb3ZpZGVyIHZhbHVlPXt0YmFnfT57Y2hpbGR9PC9Gb3JtaWtQcm92aWRlcj47XG59XG4iLCJleHBvcnQge1RGb3JtfSBmcm9tICcuL1RGb3JtJztcbmV4cG9ydCB7dXNlVEZvcm19IGZyb20gJy4vdXNlVEZvcm0nO1xuZXhwb3J0IHR5cGUge1RGb3JtUHJvcHN9IGZyb20gJy4vdHlwZXMnO1xuIiwiaW1wb3J0IGZsYXR0ZW4gZnJvbSAnZmxhdCc7XG5pbXBvcnQge0Zvcm1pa1ZhbHVlcywgdXNlRm9ybWlrLCBGb3JtaWtFcnJvcnMsIEZvcm1pa1RvdWNoZWR9IGZyb20gJ2Zvcm1payc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuaW1wb3J0IHByb3BlcnR5IGZyb20gJ2xvZGFzaC9wcm9wZXJ0eSc7XG5pbXBvcnQgdW5pcSBmcm9tICdsb2Rhc2gvdW5pcSc7XG5pbXBvcnQgUmVhY3QsIHt1c2VFZmZlY3QsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge01lc3NhZ2UsIFNlZ21lbnR9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB0eXBlIHtURm9ybUNvbmZpZ30gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VURm9ybTxWYWx1ZXMgZXh0ZW5kcyBGb3JtaWtWYWx1ZXMgPSBGb3JtaWtWYWx1ZXMsIEluaXRpYWxWYWx1ZXMgPSBhbnk+KGNvbmZpZzogVEZvcm1Db25maWc8VmFsdWVzLCBJbml0aWFsVmFsdWVzPikge1xuXHRjb25zdCB7cmVuZGVyLCBjaGlsZHJlbiwgLi4ucmVzdH0gPSBjb25maWc7XG5cdC8vIEB0cy1pZ25vcmVcblx0Y29uc3QgZm9ybWlrID0gdXNlRm9ybWlrKHJlc3QpO1xuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGNvbmZpZy5vblZhbGlkYXRlKSBjb25maWcub25WYWxpZGF0ZShmb3JtaWsuaXNWYWxpZCk7XG5cdH0sIFtmb3JtaWsuaXNWYWxpZCwgY29uZmlnLm9uVmFsaWRhdGVdKTtcblxuXHQvLyBHZXQgc3VibWl0IGZ1bmN0aW9uXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGNvbmZpZy5nZXRTdWJtaXRGbikgY29uZmlnLmdldFN1Ym1pdEZuKGZvcm1pay5zdWJtaXRGb3JtKTtcblx0fSwgW2Zvcm1pay5zdWJtaXRGb3JtLCBjb25maWcuZ2V0U3VibWl0Rm5dKTtcblxuXHQvLyBPbiBjaGFuZ2UgZXZlbnQgKGlmIHRoaXMgZW5kcyB1cCBjaGFuZ2luZyB2YWx1ZXMgaXQgd2lsbCBjeWNsZSlcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoY29uZmlnLm9uQ2hhbmdlKSBjb25maWcub25DaGFuZ2UoZm9ybWlrLnZhbHVlcyk7XG5cdH0sIFtmb3JtaWsudmFsdWVzXSk7XG5cblx0Ly8gTWFyayB0aGUgZXJyb3IgY2xlYXJlZCBpZiB0aGUgZm9ybSBoYXMgYmVlbiBlZGl0ZWQgYWZ0ZXIgYW4gZXJyb3Jcblx0Y29uc3QgW2Vycm9yQ2xlYXJlZCwgc2V0RXJyb3JDbGVhcmVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoY29uZmlnLmVycm9yICYmIGNvbmZpZy5lcnJvci5tZXNzYWdlICYmICFmb3JtaWsuaXNTdWJtaXR0aW5nKSB7XG5cdFx0XHRzZXRFcnJvckNsZWFyZWQodHJ1ZSk7XG5cdFx0fVxuXHR9LCBbZm9ybWlrLnZhbHVlcywgY29uZmlnLmVycm9yXSk7XG5cblx0Ly8gRmxhdHRlbiB0aGUgd2FybmluZ3MgKGZvcm1payBlcnJvcnMpIGFuZCB0b3VjaCBvYmplY3RzLlxuXHRjb25zdCBmbGF0V2FybmluZ3MgPSBmbGF0dGVuPEZvcm1pa0Vycm9yczxWYWx1ZXM+LCB7W2tleTogc3RyaW5nXTogc3RyaW5nfT4oZm9ybWlrLmVycm9ycyk7XG5cdGNvbnN0IGZsYXRUb3VjaGVkID0gZmxhdHRlbjxGb3JtaWtUb3VjaGVkPFZhbHVlcz4sIHtba2V5OiBzdHJpbmddOiBzdHJpbmd9Pihmb3JtaWsudG91Y2hlZCk7XG5cblx0Ly8gQ3JlYXRlIGFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBhcmUgd2FybmluZ3MgKGZvcm1payBlcnJvcnMpLiBJZiB0aGUgc3VibWl0IGNvdW50IGlzIGdyZWF0ZXIgdGhhbiAwXG5cdC8vIHRoZW4gaXQgd2lsbCBzaG93IGFsbCB3YXJuaW5ncy4gT3RoZXJ3aXNlIG9ubHkgdG91Y2hlZCBmaWVsZCB3YXJuaW5ncyB3aWxsIGJlIGFkZGVkIHRvIHRoaXMgYXJyYXkuXG5cdGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IHVuaXEoXG5cdFx0T2JqZWN0LmtleXMoZmxhdFdhcm5pbmdzKS5yZWR1Y2U8c3RyaW5nW10+KChtZW1vLCB2YWx1ZSkgPT4ge1xuXHRcdFx0Y29uc3QgaXNUb3VjaGVkID0gZmxhdFRvdWNoZWRbdmFsdWVdO1xuXHRcdFx0aWYgKGlzVG91Y2hlZCB8fCBmb3JtaWsuc3VibWl0Q291bnQgPiAwKSB7XG5cdFx0XHRcdHJldHVybiBbLi4ubWVtbywgZ2V0KGZsYXRXYXJuaW5ncywgdmFsdWUpXTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtZW1vO1xuXHRcdH0sIFtdKSxcblx0KTtcblxuXHQvLyBDcmVhdGUgYW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IGFyZSBlcnJvcnMgKGdyYXBocWwgZXJyb3JzKS5cblx0bGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblx0bGV0IGVycm9ySGVhZGVyID0gJyc7XG5cdGlmIChjb25maWcuZXJyb3IgJiYgY29uZmlnLmVycm9yLm1lc3NhZ2UpIHtcblx0XHRpZiAoY29uZmlnLmVycm9yLmdyYXBoUUxFcnJvcnMpIHtcblx0XHRcdGVycm9ycyA9IGNvbmZpZy5lcnJvci5ncmFwaFFMRXJyb3JzLnJlZHVjZSgobWVtbywgdikgPT4ge1xuXHRcdFx0XHRpZiAodi5tZXNzYWdlKSByZXR1cm4gWy4uLm1lbW8sIHYubWVzc2FnZV07XG5cdFx0XHRcdHJldHVybiBtZW1vO1xuXHRcdFx0fSwgW10gYXMgc3RyaW5nW10pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBjb25maWcuZXJyb3IubWVzc2FnZS5zbGljZShjb25maWcuZXJyb3IubWVzc2FnZS5pbmRleE9mKCc6ICcpICsgMSk7XG5cdFx0XHRlcnJvcnMucHVzaChlcnJvck1lc3NhZ2UpO1xuXHRcdH1cblx0XHRlcnJvckhlYWRlciA9IGNvbmZpZy5lcnJvci5tZXNzYWdlLnNsaWNlKDAsIGNvbmZpZy5lcnJvci5tZXNzYWdlLmluZGV4T2YoJzogJykpO1xuXHR9XG5cdGVycm9ycyA9IHVuaXEoZXJyb3JzKTtcblxuXHQvLyBDaGVjayBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3IgZXJyb3JzXG5cdGNvbnN0IGhhc1dhcm5pbmdzID0gIShmb3JtaWsuaXNWYWxpZCB8fCB3YXJuaW5ncy5sZW5ndGggPT09IDApO1xuXHRjb25zdCBoYXNFcnJvcnMgPSBlcnJvcnMubGVuZ3RoID4gMDtcblxuXHQvLyBSZW5kZXIgdGhlIHdhcm5pbmdzXG5cdGZ1bmN0aW9uIHJlbmRlcldhcm5pbmdzKCkge1xuXHRcdGlmICghaGFzV2FybmluZ3MgJiYgIWhhc0Vycm9ycykgcmV0dXJuIG51bGw7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZXNzYWdlIHdhcm5pbmc9e2hhc1dhcm5pbmdzfSBlcnJvcj17aGFzRXJyb3JzICYmICFoYXNXYXJuaW5nc30+XG5cdFx0XHRcdDxNZXNzYWdlLkhlYWRlcj57aGFzV2FybmluZ3MgPyAnU29tZSBmaWVsZHMgYXJlIG5vdCBjb21wbGV0ZTonIDogYCR7ZXJyb3JIZWFkZXJ9OmB9PC9NZXNzYWdlLkhlYWRlcj5cblx0XHRcdFx0ey8qIFB1dCBpdCBpbiBhIHNlZ21lbnQgdG8gbWFrZSBzdXJlIHRoZSBlcnJvck1lc3NhZ2UgaXNuJ3QgdG9vIGJpZyB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBlcnJvcnMgKi99XG5cdFx0XHRcdDxTZWdtZW50IHN0eWxlPXt7b3ZlcmZsb3c6ICdhdXRvJywgbWF4SGVpZ2h0OiAxMDB9fT5cblx0XHRcdFx0XHR7KGhhc1dhcm5pbmdzID8gd2FybmluZ3MgOiBlcnJvcnMpLm1hcChtc2cgPT4gKFxuXHRcdFx0XHRcdFx0PGRpdiBrZXk9e21zZ30+e21zZ308L2Rpdj5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9TZWdtZW50PlxuXHRcdFx0PC9NZXNzYWdlPlxuXHRcdCk7XG5cdH1cblxuXHQvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZpZWxkIGhhcyBhbiBlcnJvclxuXHRmdW5jdGlvbiBmaWVsZEVycm9yKGZpZWxkTmFtZToga2V5b2YgVmFsdWVzIHwgc3RyaW5nIHwgbnVtYmVyKSB7XG5cdFx0cmV0dXJuICghIXByb3BlcnR5KGZpZWxkTmFtZSkoZm9ybWlrLnRvdWNoZWQpIHx8IGZvcm1pay5zdWJtaXRDb3VudCA+IDApICYmICEhcHJvcGVydHkoZmllbGROYW1lKShmb3JtaWsuZXJyb3JzKTtcblx0fVxuXG5cdC8vIEhhbmRsZXMgdGhlIGZvcm0gc3VibWl0XG5cdGZ1bmN0aW9uIGhhbmRsZVN1Ym1pdChlPzogUmVhY3QuRm9ybUV2ZW50PEhUTUxGb3JtRWxlbWVudD4pIHtcblx0XHRzZXRFcnJvckNsZWFyZWQoZmFsc2UpO1xuXHRcdGZvcm1pay5oYW5kbGVTdWJtaXQoZSk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdC4uLmZvcm1payxcblx0XHRoYXNFcnJvcnM6IGhhc0Vycm9ycyAmJiAhZXJyb3JDbGVhcmVkLFxuXHRcdGhhc1dhcm5pbmdzLFxuXHRcdGlzVmFsaWQ6ICFoYXNXYXJuaW5ncyxcblx0XHRsb2FkaW5nOiBjb25maWcubG9hZGluZyA/IGNvbmZpZy5sb2FkaW5nIDogZmFsc2UsXG5cdFx0c3VibWl0RGlzYWJsZWQ6IGhhc1dhcm5pbmdzIHx8IGZvcm1pay5pc1N1Ym1pdHRpbmcsXG5cdFx0ZXJyb3JNYXJrZWRDbGVhcmVkOiBlcnJvckNsZWFyZWQsXG5cdFx0Zm9ybUVycm9yOiBoYXNFcnJvcnMgJiYgIWhhc1dhcm5pbmdzICYmICFlcnJvckNsZWFyZWQgJiYgIWZvcm1pay5pc1N1Ym1pdHRpbmcsIC8vIENvbnZlbmllbmNlXG5cdFx0cmVuZGVyV2FybmluZ3MsXG5cdFx0ZmllbGRFcnJvcixcblx0XHRoYW5kbGVTdWJtaXQsXG5cdH07XG59XG4iLCJpbXBvcnQge0NyZWRpdENhcmRDYXJkTmFtZUVudW19IGZyb20gJ0B0aHgveXVwLXR5cGVzJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QsIHt1c2VFZmZlY3QsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge01hc2tlZElucHV0LCBNYXNrZWRJbnB1dFByb3BzfSBmcm9tICcuLi9NYXNrZWRJbnB1dCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5DcmVkaXRDYXJkSW5wdXQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBDcmVkaXRDYXJkSW5wdXRUeXBlIHtcblx0Y2FyZFR5cGU/OiAoY2FyZFR5cGU6IENyZWRpdENhcmRDYXJkTmFtZUVudW0gfCB1bmRlZmluZWQpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDcmVkaXRDYXJkSW5wdXQoe2NhcmRUeXBlLCAuLi5yZXN0fTogQ3JlZGl0Q2FyZElucHV0VHlwZSAmIE9taXQ8TWFza2VkSW5wdXRQcm9wcywgJ21hc2snPikge1xuXHRjb25zdCBbdHlwZSwgc2V0VHlwZV0gPSB1c2VTdGF0ZTxDcmVkaXRDYXJkQ2FyZE5hbWVFbnVtIHwgdW5kZWZpbmVkPigpO1xuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGNhcmRUeXBlKSBjYXJkVHlwZSh0eXBlKTtcblx0fSwgW3R5cGVdKTtcblxuXHRmdW5jdGlvbiB2YWxpZGF0ZSh2YWx1ZUFycmF5OiBzdHJpbmdbXSkge1xuXHRcdGNvbnN0IGNhcmROdW1iZXIgPSB2YWx1ZUFycmF5LmZpbHRlcihiID0+IGIgIT09ICdfJyAmJiBiICE9PSAnICcpLmpvaW4oJycpO1xuXG5cdFx0aWYgKGNhcmROdW1iZXJbMF0gPT09ICc0Jykge1xuXHRcdFx0Ly8gdGVzdCB1c2luZyA0MTExMTExMTExMTExMTExXG5cdFx0XHRzZXRUeXBlKENyZWRpdENhcmRDYXJkTmFtZUVudW0uVmlzYSk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdChwYXJzZUludChjYXJkTnVtYmVyLnN1YnN0cigwLCAyKSwgMTApID4gNTAgJiYgcGFyc2VJbnQoY2FyZE51bWJlci5zdWJzdHIoMCwgMiksIDEwKSA8IDU2KSB8fFxuXHRcdFx0KHBhcnNlSW50KGNhcmROdW1iZXIuc3Vic3RyKDAsIDIpLCAxMCkgPiAyMjIwICYmIHBhcnNlSW50KGNhcmROdW1iZXIuc3Vic3RyKDAsIDIpLCAxMCkgPCAyNzIxKVxuXHRcdCkge1xuXHRcdFx0Ly8gdGVzdCB1c2luZyA1NTU1NTU1NTU1NTU0NDQ0IHx8IDIyMjI0MDUzNDMyNDg4Nzdcblx0XHRcdHNldFR5cGUoQ3JlZGl0Q2FyZENhcmROYW1lRW51bS5NYXN0ZXJDYXJkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2V0VHlwZSh1bmRlZmluZWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gY2FyZE51bWJlci5sZW5ndGggPT09IDE2O1xuXHR9XG5cblx0Y29uc3QgY3JlZGl0Q2FyZE1hc2s6IE1hc2tlZElucHV0UHJvcHNbJ21hc2snXSA9IHtcblx0XHRtYXNrOiAnOTk5OSA5OTk5IDk5OTkgOTk5OScsXG5cdFx0aXNDb21wbGV0ZTogdmFsaWRhdGUsXG5cdFx0YXV0b1VubWFzazogdHJ1ZSxcblx0fTtcblxuXHRyZXR1cm4gPE1hc2tlZElucHV0IG1hc2s9e2NyZWRpdENhcmRNYXNrfSB7Li4ucmVzdH0gLz47XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IElucHV0bWFzayBmcm9tICdpbnB1dG1hc2snO1xuaW1wb3J0IFJlYWN0LCB7dXNlUmVmLCB1c2VFZmZlY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7SW5wdXQsIElucHV0UHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB1c2VEZWVwQ29tcGFyZUVmZmVjdCBmcm9tICd1c2UtZGVlcC1jb21wYXJlLWVmZmVjdCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5NYXNrZWRJbnB1dCcpO1xuXG4vKipcbiAqIFNlZSBzb3VyY2UgY29kZSBmb3IgZGV0YWlsZWQgcHJvcCB0eXBlcyBvciB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL1JvYmluSGVyYm90cy9qcXVlcnkuaW5wdXRtYXNrfGhlcmV9IGZvciBtb3JlIGluZm8uXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBpbnB1dG1hc2tQcm9wVHlwZXNcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hc2tlZElucHV0UHJvcHMge1xuXHRuYW1lPzogc3RyaW5nO1xuXHR2YWx1ZT86IHN0cmluZztcblx0b25DaGFuZ2U/OiAodmFsdWU/OiBzdHJpbmcpID0+IHZvaWQ7XG5cdG9uQmx1cj86IChldmVudDogYW55KSA9PiB2b2lkO1xuXHRtYXNrPzogSW5wdXRtYXNrLk9wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNYXNrZWRJbnB1dChwcm9wczogTWFza2VkSW5wdXRQcm9wcyAmIE9taXQ8SW5wdXRQcm9wcywgJ29uQ2hhbmdlJz4pIHtcblx0Y29uc3Qge25hbWUsIHZhbHVlLCBvbkNoYW5nZSwgb25CbHVyLCBtYXNrLCBkaXNhYmxlZCwgLi4ucmVzdH0gPSBwcm9wcztcblxuXHRjb25zdCBpbnB1dEVsZW1lbnQgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudCB8IG51bGw+KG51bGwpO1xuXHRjb25zdCBtYXNrSW5zdGFuY2UgPSB1c2VSZWY8SW5wdXRtYXNrLkluc3RhbmNlIHwgbnVsbD4obnVsbCk7XG5cblx0dXNlRGVlcENvbXBhcmVFZmZlY3QoKCkgPT4ge1xuXHRcdGlmICghaW5wdXRFbGVtZW50LmN1cnJlbnQpIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGdldCBpbnB1dCBlbGVtZW50Jyk7XG5cblx0XHRkKCdDcmVhdGluZyBpbnB1dCBtYXNrIGluc3RhbmNlJyk7XG5cdFx0bWFza0luc3RhbmNlLmN1cnJlbnQgPSBuZXcgSW5wdXRtYXNrKHtcblx0XHRcdC4uLm1hc2ssXG5cdFx0XHRvbmNvbXBsZXRlKCkge1xuXHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKGlucHV0RWxlbWVudC5jdXJyZW50Py52YWx1ZSk7XG5cdFx0XHRcdGlmIChtYXNrPy5vbmNvbXBsZXRlKSBtYXNrLm9uY29tcGxldGUoKTtcblx0XHRcdH0sXG5cdFx0XHRvbmNsZWFyZWQoKSB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoKTtcblx0XHRcdFx0aWYgKG1hc2s/Lm9uY2xlYXJlZCkgbWFzay5vbmNsZWFyZWQoKTtcblx0XHRcdH0sXG5cdFx0XHRvbmluY29tcGxldGUoKSB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoaW5wdXRFbGVtZW50LmN1cnJlbnQ/LnZhbHVlKTtcblx0XHRcdFx0aWYgKG1hc2s/Lm9uaW5jb21wbGV0ZSkgbWFzay5vbmluY29tcGxldGUoKTtcblx0XHRcdH0sXG5cdFx0fSk7XG5cdFx0bWFza0luc3RhbmNlLmN1cnJlbnQubWFzayhpbnB1dEVsZW1lbnQuY3VycmVudCk7XG5cblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0aWYgKG1hc2tJbnN0YW5jZS5jdXJyZW50KSB7XG5cdFx0XHRcdGQoJ0NsZWFuaW5nIHVwIGlucHV0IG1hc2sgaW5zdGFuY2UnKTtcblx0XHRcdFx0bWFza0luc3RhbmNlLmN1cnJlbnQucmVtb3ZlKCk7XG5cdFx0XHRcdG1hc2tJbnN0YW5jZS5jdXJyZW50ID0gbnVsbDtcblx0XHRcdH1cblx0XHR9O1xuXHR9LCBbbWFza10pO1xuXG5cdC8vIElmIHdlIGNoYW5nZSB0aGUgdmFsdWUgcHJvcCB3ZSBuZWVkIHRvIHN5bmMgdGhlIERPTSB2YWx1ZSB0byBkaXNwbGF5IHRoZSBuZXcgdmFsdWVcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoaW5wdXRFbGVtZW50LmN1cnJlbnQgJiYgaW5wdXRFbGVtZW50LmN1cnJlbnQ/LnZhbHVlICE9PSB2YWx1ZSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRkKCdWYWx1ZSBpcyBjaGFuZ2luZzonLCB2YWx1ZSk7XG5cdFx0XHRpbnB1dEVsZW1lbnQuY3VycmVudC52YWx1ZSA9IHZhbHVlO1xuXHRcdH1cblx0fSwgW3ZhbHVlXSk7XG5cblx0cmV0dXJuIChcblx0XHQ8SW5wdXQgey4uLnJlc3R9PlxuXHRcdFx0PGlucHV0IGRpc2FibGVkPXtkaXNhYmxlZH0gbmFtZT17bmFtZX0gcmVmPXtpbnB1dEVsZW1lbnR9IG9uQmx1cj17b25CbHVyfSAvPlxuXHRcdDwvSW5wdXQ+XG5cdCk7XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7TWFza2VkSW5wdXQsIE1hc2tlZElucHV0UHJvcHN9IGZyb20gJy4uL01hc2tlZElucHV0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuaW5wdXRzLlBob25lSW5wdXQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBQaG9uZUlucHV0UHJvcHMge1xuXHRleHRlbnNpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUGhvbmVJbnB1dChwcm9wczogUGhvbmVJbnB1dFByb3BzICYgT21pdDxNYXNrZWRJbnB1dFByb3BzLCAnbWFzayc+KSB7XG5cdGNvbnN0IHtleHRlbnNpb24sIC4uLnJlc3R9ID0gcHJvcHM7XG5cdGNvbnN0IG1hc2sgPSB7XG5cdFx0bWFzazogZXh0ZW5zaW9uID8gJygoOTk5KSA5OTktOTk5OVsgeDk5OTldKXwoKzkgKDk5OSkgOTk5LTk5OTlbIHg5OTk5XSknIDogJygoOTk5KSA5OTktOTk5OSl8KCArOSAoOTk5KSA5OTktOTk5OSknLFxuXHRcdGdyZWVkeTogZmFsc2UsXG5cdFx0YXV0b1VubWFzazogdHJ1ZSxcblx0fTtcblxuXHRyZXR1cm4gPE1hc2tlZElucHV0IHsuLi5yZXN0fSBtYXNrPXttYXNrfSAvPjtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QsIHtDaGlsZHJlbiwgY2xvbmVFbGVtZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0Zvcm0sIFJhZGlvLCBGb3JtUmFkaW8sIEZvcm1Hcm91cFByb3BzfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5SYWRpb0dyb3VwJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmFkaW9Hcm91cFByb3BzIHtcblx0Y2hpbGRyZW4/OiBKU1guRWxlbWVudFtdIHwgSlNYLkVsZW1lbnQ7XG5cdG9uQ2hhbmdlPzogKHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkO1xuXHR2YWx1ZT86IHN0cmluZyB8IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJhZGlvR3JvdXAocHJvcHM6IFJhZGlvR3JvdXBQcm9wcyAmIE9taXQ8Rm9ybUdyb3VwUHJvcHMsICdjaGlsZHJlbic+KSB7XG5cdGNvbnN0IHtjaGlsZHJlbiwgb25DaGFuZ2UsIHZhbHVlLCAuLi5yZXN0fSA9IHByb3BzO1xuXG5cdHJldHVybiAoXG5cdFx0PEZvcm0uR3JvdXAgey4uLnJlc3R9PlxuXHRcdFx0e0NoaWxkcmVuLm1hcChwcm9wcy5jaGlsZHJlbiwgY2hpbGQgPT4ge1xuXHRcdFx0XHRpZiAoY2hpbGQ/LnR5cGUgPT09IEZvcm1SYWRpbyB8fCBjaGlsZD8udHlwZSA9PT0gUmFkaW8gfHwgY2hpbGQ/LnR5cGUgPT09IEZvcm0uUmFkaW8pIHtcblx0XHRcdFx0XHRyZXR1cm4gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG5cdFx0XHRcdFx0XHRvbkNoYW5nZTogKGV2OiBhbnksIGFyZ3M6IHt2YWx1ZT86IHN0cmluZyB8IG51bWJlcn0pID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKG9uQ2hhbmdlKSBvbkNoYW5nZShhcmdzLnZhbHVlKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRjaGVja2VkOiB2YWx1ZSA9PT0gY2hpbGQucHJvcHMudmFsdWUsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGNoaWxkO1xuXHRcdFx0fSl9XG5cdFx0PC9Gb3JtLkdyb3VwPlxuXHQpO1xufVxuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge3VzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTY3JpcHRlbENvbnRleHR9IGZyb20gJy4vU2NyaXB0ZWxDb250ZXh0JztcbmltcG9ydCB7U2NyaXB0ZWxTb2NrZXR9IGZyb20gJy4vc2NyaXB0ZWwnO1xuaW1wb3J0IHR5cGUge1NjcmlwdGVsUGVuU3R5bGV9IGZyb20gJy4vc2NyaXB0ZWwvZW51bXMnO1xuaW1wb3J0IHR5cGUge1JlbmRlcmVkSW1hZ2V9IGZyb20gJy4vc2NyaXB0ZWwvbWVzc2FnZXMnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5pbnB1dHMuU2NyaXB0ZWwnKTtcblxuZXhwb3J0IGludGVyZmFjZSBTY3JpcHRlbFByb3BzIHtcblx0b21uaXNjcmlwdFVybD86IHN0cmluZzsgLy8gRGVmYXVsdHMgdG8gJ3dzOi8vbG9jYWxob3N0OjgwODAnXG5cdGltYWdlVHlwZT86IHN0cmluZzsgLy8gRGVmYXVsdHMgdG8gJ2ltYWdlL3N2Zyt4bWwnLlxuXHRzY2FsZT86IG51bWJlcjsgLy8gRGVmYXVsdHMgdG8gMVxuXHRjcm9wPzogYm9vbGVhbjsgLy8gRGVmYXVsdHMgdG8gZmFsc2Vcblx0cGVuU3R5bGU/OiBTY3JpcHRlbFBlblN0eWxlOyAvLyBEZWZhdWx0cyB0byAnUGxhaW5QZW5TdHlsZSdcblx0Y2hpbGRyZW46IEpTWC5FbGVtZW50IHwgSlNYLkVsZW1lbnRbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNjcmlwdGVsKHtvbW5pc2NyaXB0VXJsLCBpbWFnZVR5cGUsIHNjYWxlLCBjcm9wLCBwZW5TdHlsZSwgY2hpbGRyZW59OiBTY3JpcHRlbFByb3BzKSB7XG5cdGNvbnN0IHNvY2tldCA9IHVzZVJlZjxTY3JpcHRlbFNvY2tldD4oKTtcblx0Y29uc3QgW3JlbmRlciwgc2V0UmVuZGVyXSA9IHVzZVN0YXRlPFJlbmRlcmVkSW1hZ2U+KCk7XG5cdGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcblx0Y29uc3QgW2lzU2lnbmluZywgc2V0SXNTaWduaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdHNvY2tldC5jdXJyZW50ID0gbmV3IFNjcmlwdGVsU29ja2V0KHtcblx0XHRcdG9tbmlzY3JpcHRVcmwsXG5cdFx0XHRpbWFnZVR5cGUsXG5cdFx0XHRzY2FsZSxcblx0XHRcdGNyb3AsXG5cdFx0XHRwZW5TdHlsZSxcblx0XHR9KTtcblxuXHRcdHNvY2tldC5jdXJyZW50Lm9uKCdyZW5kZXInLCBtc2cgPT4ge1xuXHRcdFx0c2V0UmVuZGVyKG1zZyk7XG5cdFx0XHRzZXRMb2FkaW5nKGZhbHNlKTtcblx0XHRcdHNldFJlbmRlcih1bmRlZmluZWQpOyAvLyB0b2RvIGxvb2sgYXQgdGhpcyBpbiBmdXR1cmVcblx0XHR9KTtcblx0XHRzb2NrZXQuY3VycmVudC5vbignb2tCdXR0b25Eb3duJywgKCkgPT4ge1xuXHRcdFx0c2V0TG9hZGluZyh0cnVlKTtcblx0XHR9KTtcblx0XHRzb2NrZXQuY3VycmVudC5vbignY2FuY2VsJywgKCkgPT4ge1xuXHRcdFx0c2V0TG9hZGluZyhmYWxzZSk7XG5cdFx0XHRzZXRSZW5kZXIodW5kZWZpbmVkKTtcblx0XHR9KTtcblx0XHRzb2NrZXQuY3VycmVudC5vbigncGVuTW92ZScsICgpID0+IHtcblx0XHRcdHNldElzU2lnbmluZyh0cnVlKTtcblx0XHR9KTtcblx0XHRzb2NrZXQuY3VycmVudC5vbigncGVuVXAnLCAoKSA9PiB7XG5cdFx0XHRzZXRJc1NpZ25pbmcoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGlmIChzb2NrZXQuY3VycmVudCkgc29ja2V0LmN1cnJlbnQuY2xvc2UoKTtcblx0XHR9O1xuXHR9LCBbb21uaXNjcmlwdFVybCwgaW1hZ2VUeXBlLCBzY2FsZSwgY3JvcCwgcGVuU3R5bGVdKTtcblxuXHRyZXR1cm4gPFNjcmlwdGVsQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17e3NvY2tldCwgcmVuZGVySW1hZ2U6IHJlbmRlciwgbG9hZGluZywgaXNTaWduaW5nfX0+e2NoaWxkcmVufTwvU2NyaXB0ZWxDb250ZXh0LlByb3ZpZGVyPjtcbn1cbiIsImltcG9ydCBSZWFjdCwge011dGFibGVSZWZPYmplY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtTY3JpcHRlbFNvY2tldH0gZnJvbSAnLi9zY3JpcHRlbCc7XG5pbXBvcnQgdHlwZSB7UmVuZGVyZWRJbWFnZX0gZnJvbSAnLi9zY3JpcHRlbC9tZXNzYWdlcyc7XG5cbmV4cG9ydCBjb25zdCBTY3JpcHRlbENvbnRleHQgPVxuXHRSZWFjdC5jcmVhdGVDb250ZXh0PFxuXHRcdHtzb2NrZXQ6IE11dGFibGVSZWZPYmplY3Q8U2NyaXB0ZWxTb2NrZXQgfCB1bmRlZmluZWQ+OyByZW5kZXJJbWFnZTogUmVuZGVyZWRJbWFnZSB8IHVuZGVmaW5lZDsgbG9hZGluZzogYm9vbGVhbjsgaXNTaWduaW5nOiBib29sZWFufSB8IHVuZGVmaW5lZFxuXHQ+KHVuZGVmaW5lZCk7XG4iLCJleHBvcnQge1NjcmlwdGVsfSBmcm9tICcuL1NjcmlwdGVsJztcbmV4cG9ydCB0eXBlIHtTY3JpcHRlbFByb3BzfSBmcm9tICcuL1NjcmlwdGVsJztcbmV4cG9ydCB7d2l0aFNjcmlwdGVsfSBmcm9tICcuL3dpdGhTY3JpcHRlbCc7XG5leHBvcnQge1NjcmlwdGVsUGVuU3R5bGUsIFNjcmlwdGVsTWVzc2FnZUNsYXNzfSBmcm9tICcuL3NjcmlwdGVsL2VudW1zJztcbiIsImV4cG9ydCBlbnVtIFNjcmlwdGVsUGVuU3R5bGUge1xuXHRQbGFpbiA9ICdQbGFpblBlblN0eWxlJyxcblx0Q2hpc2VsID0gJ0NoaXNlbFBlblN0eWxlJyxcblx0SW5rd2VsbCA9ICdJbmt3ZWxsUGVuU3R5bGUnLFxufVxuXG5leHBvcnQgZW51bSBTY3JpcHRlbE1lc3NhZ2VDbGFzcyB7XG5cdENvbm5lY3Rpb25PcGVuID0gJ0Nvbm5lY3Rpb25PcGVuJyxcblx0RGV2aWNlT3BlblJlcXVlc3QgPSAnRGV2aWNlT3BlblJlcXVlc3QnLFxuXHREZXZpY2VPcGVuUmVzcG9uc2UgPSAnRGV2aWNlT3BlblJlc3BvbnNlJyxcblx0UmVuZGVyZWRJbWFnZSA9ICdSZW5kZXJlZEltYWdlJyxcblx0U2NyaXB0ZWxFeGNlcHRpb24gPSAnU2NyaXB0ZWxFeGNlcHRpb24nLFxuXHRCdXR0b25Eb3duID0gJ0J1dHRvbkRvd24nLFxuXHRCdXR0b25QcmVzcyA9ICdCdXR0b25QcmVzcycsXG5cdFBlbk1vdmUgPSAnUGVuTW92ZScsXG5cdFBlblVwID0gJ1BlblVwJyxcbn1cbiIsIi8qIGdsb2JhbHMgV2ViU29ja2V0OiB0cnVlICovXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICdldmVudGVtaXR0ZXIzJztcbmltcG9ydCB7U2NyaXB0ZWxNZXNzYWdlQ2xhc3MsIFNjcmlwdGVsUGVuU3R5bGV9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHR5cGUge0Nvbm5lY3Rpb25PcGVuLCBEZXZpY2VPcGVuUmVzcG9uc2UsIE1lc3NhZ2UsIFJlbmRlcmVkSW1hZ2V9IGZyb20gJy4vbWVzc2FnZXMnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5pbnB1dHMuU2NyaXB0ZWwuc2NyaXB0ZWwnKTtcblxuZXhwb3J0IGludGVyZmFjZSBTY3JpcHRlbFNvY2tldEFyZ3Mge1xuXHRvbW5pc2NyaXB0VXJsPzogc3RyaW5nOyAvLyBEZWZhdWx0cyB0byAnd3M6Ly9sb2NhbGhvc3Q6ODA4MCdcblx0aW1hZ2VUeXBlPzogc3RyaW5nOyAvLyBEZWZhdWx0cyB0byAnaW1hZ2Uvc3ZnK3htbCcuXG5cdHNjYWxlPzogbnVtYmVyOyAvLyBEZWZhdWx0cyB0byAxXG5cdGNyb3A/OiBib29sZWFuOyAvLyBEZWZhdWx0cyB0byBmYWxzZVxuXHRwZW5TdHlsZT86IFNjcmlwdGVsUGVuU3R5bGU7IC8vIERlZmF1bHRzIHRvICdQbGFpblBlblN0eWxlJ1xuXHRyZW5kZXI/OiAoKSA9PiB2b2lkO1xufVxuXG5mdW5jdGlvbiBzZXJ2ZXJDb25uZWN0ZWQobXNnOiBDb25uZWN0aW9uT3Blbiwgc29ja2V0OiBXZWJTb2NrZXQpIHtcblx0ZCgnU2VydmVyIGNvbm5lY3RlZCcpO1xuXHRpZiAobXNnLnNlcnZlckluZm8uZGV2aWNlcy5sZW5ndGggPiAwKSB7XG5cdFx0Ly8gR3JhYiB0aGUgZmlyc3QgYXZhaWxhYmxlIGRldmljZVxuXHRcdGNvbnN0IGRldmljZSA9IG1zZy5zZXJ2ZXJJbmZvLmRldmljZXNbMF07XG5cdFx0c29ja2V0LnNlbmQoXG5cdFx0XHRKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdF9jbGFzczogJ0RldmljZU9wZW5SZXF1ZXN0Jyxcblx0XHRcdFx0dXVpZDogZGV2aWNlLnV1aWQsXG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGRldmljZUNvbm5lY3RlZChtc2c6IERldmljZU9wZW5SZXNwb25zZSwgc29ja2V0OiBXZWJTb2NrZXQsIGFyZ3M6IFNjcmlwdGVsU29ja2V0QXJncykge1xuXHRkKGBEZXZpY2UgY29ubmVjdGVkOiAke21zZy5kZXZpY2UudXVpZH1gKTtcblx0Y29uc3Qge2ltYWdlVHlwZSwgc2NhbGUsIGNyb3AsIHBlblN0eWxlfSA9IGFyZ3M7XG5cdHNvY2tldC5zZW5kKFxuXHRcdEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdF9jbGFzczogJ1JlbmRlclNldHRpbmdzVXBkYXRlUmVxdWVzdCcsXG5cdFx0XHRyZW5kZXJTZXR0aW5nczoge1xuXHRcdFx0XHRfY2xhc3M6ICdSZW5kZXJTZXR0aW5ncycsXG5cdFx0XHRcdHR5cGU6IGltYWdlVHlwZSB8fCAnaW1hZ2Uvc3ZnK3htbCcsXG5cdFx0XHRcdHNjYWxlOiBzY2FsZSB8fCAxLFxuXHRcdFx0XHRjcm9wOiBjcm9wIHx8IGZhbHNlLFxuXHRcdFx0XHRwZW5TdHlsZTogcGVuU3R5bGVcblx0XHRcdFx0XHQ/IHtcblx0XHRcdFx0XHRcdFx0cmVuZGVyRnVuY3Rpb246IHBlblN0eWxlLFxuXHRcdFx0XHRcdCAgfVxuXHRcdFx0XHRcdDoge1xuXHRcdFx0XHRcdFx0XHRyZW5kZXJGdW5jdGlvbjogU2NyaXB0ZWxQZW5TdHlsZS5QbGFpbixcblx0XHRcdFx0XHQgIH0sXG5cdFx0XHR9LFxuXHRcdH0pLFxuXHQpO1xufVxuXG5mdW5jdGlvbiByZW5kZXIobXNnOiBSZW5kZXJlZEltYWdlLCBhcmdzOiBTY3JpcHRlbFNvY2tldEFyZ3MsIGV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyKSB7XG5cdGQoYFJlbmRlcmVkIGltYWdlOiAke21zZy50eXBlfSAke21zZy53aWR0aH14JHttc2cuaGVpZ2h0fWApO1xuXHRldmVudEVtaXR0ZXIuZW1pdCgncmVuZGVyJywgbXNnKTtcbn1cblxuZXhwb3J0IGNsYXNzIFNjcmlwdGVsU29ja2V0IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcblx0cHJpdmF0ZSBzb2NrZXQ6IFdlYlNvY2tldDtcblx0cHJpdmF0ZSBvcHRpb25zOiBTY3JpcHRlbFNvY2tldEFyZ3M7XG5cblx0Y29uc3RydWN0b3IoYXJnczogU2NyaXB0ZWxTb2NrZXRBcmdzKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMub3B0aW9ucyA9IGFyZ3M7XG5cblx0XHR0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoYXJncy5vbW5pc2NyaXB0VXJsIHx8ICd3czovL2xvY2FsaG9zdDo4MDgwJyk7XG5cblx0XHR0aGlzLnNvY2tldC5vbm9wZW4gPSAoKSA9PiB7XG5cdFx0XHRkKCdTb2NrZXQgb3BlbicpO1xuXHRcdH07XG5cblx0XHR0aGlzLnNvY2tldC5vbmNsb3NlID0gKCkgPT4ge1xuXHRcdFx0ZCgnU29ja2V0IGNsb3NlZCcpO1xuXHRcdH07XG5cblx0XHR0aGlzLnNvY2tldC5vbm1lc3NhZ2UgPSBldiA9PiB7XG5cdFx0XHRjb25zdCBtc2cgPSBKU09OLnBhcnNlKGV2LmRhdGEpIGFzIE1lc3NhZ2U7XG5cdFx0XHRpZiAoIW1zZy5fY2xhc3MpIHJldHVybjsgLy8gQSBtZXNzYWdlIHdpdGggbm8gY2xhc3MuXG5cblx0XHRcdHN3aXRjaCAobXNnLl9jbGFzcykge1xuXHRcdFx0XHRjYXNlIFNjcmlwdGVsTWVzc2FnZUNsYXNzLkNvbm5lY3Rpb25PcGVuOlxuXHRcdFx0XHRcdHNlcnZlckNvbm5lY3RlZChtc2csIHRoaXMuc29ja2V0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBTY3JpcHRlbE1lc3NhZ2VDbGFzcy5EZXZpY2VPcGVuUmVzcG9uc2U6XG5cdFx0XHRcdFx0ZGV2aWNlQ29ubmVjdGVkKG1zZywgdGhpcy5zb2NrZXQsIHRoaXMub3B0aW9ucyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgU2NyaXB0ZWxNZXNzYWdlQ2xhc3MuUmVuZGVyZWRJbWFnZTpcblx0XHRcdFx0XHRyZW5kZXIobXNnLCB0aGlzLm9wdGlvbnMsIHRoaXMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFNjcmlwdGVsTWVzc2FnZUNsYXNzLlNjcmlwdGVsRXhjZXB0aW9uOlxuXHRcdFx0XHRcdGQoYFNjcmlwdGVsIEV4Y2VwdGlvbiBFcnJvcjogJHttc2cubWVzc2FnZX1gKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFNjcmlwdGVsTWVzc2FnZUNsYXNzLkJ1dHRvblByZXNzOlxuXHRcdFx0XHRcdGlmIChtc2cubGFiZWwgPT09ICdDYW5jZWwnKSB0aGlzLmVtaXQoJ2NhbmNlbCcpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFNjcmlwdGVsTWVzc2FnZUNsYXNzLkJ1dHRvbkRvd246XG5cdFx0XHRcdFx0aWYgKG1zZy5sYWJlbCA9PT0gJ09LJykgdGhpcy5lbWl0KCdva0J1dHRvbkRvd24nKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBTY3JpcHRlbE1lc3NhZ2VDbGFzcy5QZW5Nb3ZlOlxuXHRcdFx0XHRcdHRoaXMuZW1pdCgncGVuTW92ZScpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFNjcmlwdGVsTWVzc2FnZUNsYXNzLlBlblVwOlxuXHRcdFx0XHRcdHRoaXMuZW1pdCgncGVuVXAnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Y2FsaWJyYXRlKCkge1xuXHRcdGQoJ2NhbGlicmF0ZScpO1xuXHRcdHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe19jbGFzczogJ0ZvcmNlUmVjYWxpYnJhdGUnfSkpO1xuXHR9XG5cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5zb2NrZXQuY2xvc2UoKTtcblx0fVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7U2NyaXB0ZWwsIFNjcmlwdGVsUHJvcHN9IGZyb20gJy4vU2NyaXB0ZWwnO1xuXG4vKipcbiAqIEEgSG9DIHRoYXQgcHJvdmlkZXMgYSBjb25uZWN0aW9uIHRvIGEgU2NyaXB0ZWwgT21uaXNjcmlwdCBkZXZpY2UuXG4gKiBZb3UgY2FuIG9ubHkgaGF2ZSBhIHNpbmdsZSBjb25uZWN0aW9uIG9wZW4gYXQgYSB0aW1lLlxuICogQHBhcmFtIFdyYXBwZWRDb21wb25lbnRcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTY3JpcHRlbChXcmFwcGVkQ29tcG9uZW50OiBhbnksIHNjcmlwdGVsUHJvcHM6IFNjcmlwdGVsUHJvcHMpIHtcblx0cmV0dXJuIChwcm9wczogYW55KSA9PiAoXG5cdFx0PFNjcmlwdGVsIHsuLi5zY3JpcHRlbFByb3BzfT5cblx0XHRcdDxXcmFwcGVkQ29tcG9uZW50IHsuLi5wcm9wc30gLz5cblx0XHQ8L1NjcmlwdGVsPlxuXHQpO1xufVxuIiwiaW1wb3J0IHR5cGUge1NjcmlwdGVsU2NoZW1hVHlwZX0gZnJvbSAnQHRoeC95dXAtdHlwZXMnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge3VzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QnV0dG9uLCBJbWFnZX0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHtTY3JpcHRlbENvbnRleHR9IGZyb20gJy4uL1NjcmlwdGVsL1NjcmlwdGVsQ29udGV4dCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5TY3JpcHRlbElucHV0Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NyaXB0ZWxJbnB1dFByb3BzIHtcblx0dmFsdWU/OiBTY3JpcHRlbFNjaGVtYVR5cGU7XG5cdG9uQ2hhbmdlPzogKHZhbHVlPzogU2NyaXB0ZWxTY2hlbWFUeXBlKSA9PiB2b2lkO1xuXHRidXR0b25UZXh0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU2NyaXB0ZWxJbnB1dChwcm9wczogU2NyaXB0ZWxJbnB1dFByb3BzKSB7XG5cdGNvbnN0IHt2YWx1ZSwgb25DaGFuZ2UsIGJ1dHRvblRleHQgPSAnRW50ZXIgU2lnbmF0dXJlJ30gPSBwcm9wcztcblx0Y29uc3QgY3R4ID0gdXNlQ29udGV4dChTY3JpcHRlbENvbnRleHQpO1xuXG5cdGNvbnN0IFtlbnRlclNpZ25hdHVyZSwgc2V0RW50ZXJTaWduYXR1cmVdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGVudGVyU2lnbmF0dXJlKSB7XG5cdFx0XHRpZiAob25DaGFuZ2UgJiYgY3R4Py5yZW5kZXJJbWFnZSkge1xuXHRcdFx0XHRzZXRFbnRlclNpZ25hdHVyZShmYWxzZSk7XG5cdFx0XHRcdGlmIChjdHgucmVuZGVySW1hZ2UudHlwZSA9PT0gJ2ltYWdlL3N2Zyt4bWwnIHx8IGN0eC5yZW5kZXJJbWFnZS50eXBlID09PSAnaW1hZ2UvcG5nJykge1xuXHRcdFx0XHRcdG9uQ2hhbmdlKHtcblx0XHRcdFx0XHRcdHR5cGU6IGN0eC5yZW5kZXJJbWFnZS50eXBlLFxuXHRcdFx0XHRcdFx0d2lkdGg6IGN0eC5yZW5kZXJJbWFnZS53aWR0aCxcblx0XHRcdFx0XHRcdGhlaWdodDogY3R4LnJlbmRlckltYWdlLmhlaWdodCxcblx0XHRcdFx0XHRcdHRpbWVzdGFtcDogbmV3IERhdGUoKSxcblx0XHRcdFx0XHRcdGRhdGE6IGN0eC5yZW5kZXJJbWFnZS5kYXRhLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob25DaGFuZ2UgJiYgIWN0eCkge1xuXHRcdFx0XHRvbkNoYW5nZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwgW2N0eF0pO1xuXG5cdGlmIChlbnRlclNpZ25hdHVyZSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2PlxuXHRcdFx0XHQ8ZGl2PntjdHg/LmlzU2lnbmluZyA/ICdzaWduaW5nLi4uJyA6ICdFbnRlciBhIHNpZ25hdHVyZSBhbmQgY2xpY2sgT0suJ308L2Rpdj5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHtcblx0XHRcdFx0XHRcdHNldEVudGVyU2lnbmF0dXJlKGZhbHNlKTtcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdGNvbG9yPVwiYmxhY2tcIlxuXHRcdFx0XHRcdGxvYWRpbmc9e2N0eD8ubG9hZGluZ31cblx0XHRcdFx0XHRkaXNhYmxlZD17Y3R4Py5sb2FkaW5nfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0Q2FuY2VsXG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8QnV0dG9uIHNpemU9XCJtaW5pXCIgYXM9XCJhXCIgYmFzaWMgb25DbGljaz17KCkgPT4gY3R4Py5zb2NrZXQuY3VycmVudD8uY2FsaWJyYXRlKCl9IGRpc2FibGVkPXtjdHg/LmxvYWRpbmd9PlxuXHRcdFx0XHRcdENhbGlicmF0ZVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdH1cblxuXHRpZiAodmFsdWUgJiYgdmFsdWUuZGF0YSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2PlxuXHRcdFx0XHQ8SW1hZ2Ugc2l6ZT1cIm1lZGl1bVwiIHNyYz17dmFsdWUuZGF0YX0gYm9yZGVyZWQgLz5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdHNpemU9XCJtaW5pXCJcblx0XHRcdFx0XHRjb21wYWN0XG5cdFx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdFx0c2V0RW50ZXJTaWduYXR1cmUoZmFsc2UpO1xuXHRcdFx0XHRcdFx0aWYgKG9uQ2hhbmdlKSBvbkNoYW5nZSgpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHRSZXNldFxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gPEJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBzZXRFbnRlclNpZ25hdHVyZSh0cnVlKX0+e2J1dHRvblRleHR9PC9CdXR0b24+O1xufVxuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge3VzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0J1dHRvbiwgSWNvbiwgTGFiZWwsIFBvcHVwfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQge01hc2tlZElucHV0LCBNYXNrZWRJbnB1dFByb3BzfSBmcm9tICcuLi9NYXNrZWRJbnB1dCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5TaW5JbnB1dCcpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpbklucHV0UHJvcHMge1xuXHRoYXNTaW46IGJvb2xlYW47XG59XG5cbi8vIGlmIHdlIGNsaWNrIGVkaXQgdGhlIHZhbHVlIGlzIHNldCB0byBhbiBlbXB0eSBzdHJpbmcuXG4vLyBpZiB3ZSBjbGljayBkZWxldGUgdGhlIHZhbHVlIGlzIHNldCB0byBhbiBlbXB0eSBzdHJpbmcuXG4vLyBpZiB3ZSBjbGljayBjYW5jZWwgdGhlIHZhbHVlIGlzIHNldCB0byB1bmRlZmluZWQuXG4vLyBpZiB3ZSBjaGFuZ2UgaXQgd2Ugc2V0IGl0IHRvIHRoZSBnaXZlbiBzdHJpbmcuXG5leHBvcnQgZnVuY3Rpb24gU2luSW5wdXQocHJvcHM6IFNpbklucHV0UHJvcHMgJiBPbWl0PE1hc2tlZElucHV0UHJvcHMsICdtYXNrJyB8ICduYW1lJz4pIHtcblx0Y29uc3Qge2hhc1Npbiwgb25DaGFuZ2UsIC4uLnJlc3R9ID0gcHJvcHM7XG5cdGNvbnN0IFtlZGl0LCBzZXRFZGl0XSA9IHVzZVN0YXRlKGZhbHNlKTtcblx0Y29uc3QgW2RvRGVsZXRlLCBzZXREb0RlbGV0ZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cblx0ZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKHZhbD86IHN0cmluZykge1xuXHRcdG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHZhbCk7XG5cdH1cblxuXHQvLyBpZiB3ZSBoYXZlIGEgU0lOIGFuZCB3ZSBkb24ndCB3YW50IHRvIGVkaXRcblx0cmV0dXJuIGhhc1NpbiAmJiAhZWRpdCAmJiAhZG9EZWxldGUgPyAoXG5cdFx0PD5cblx0XHRcdDxMYWJlbCBzdHlsZT17e3dpZHRoOiAnMTAwJScsIGhlaWdodDogJzM2cHgnLCBwYWRkaW5nVG9wOiAnMTBweCd9fSBzaXplPVwibGFyZ2VcIiBjb2xvcj1cImdyZWVuXCI+XG5cdFx0XHRcdFNJTiBpcyBzYXZlZFxuXHRcdFx0PC9MYWJlbD5cblx0XHRcdDxQb3B1cFxuXHRcdFx0XHRjb250ZW50PVwiZWRpdFwiXG5cdFx0XHRcdHRyaWdnZXI9e1xuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRzZXRFZGl0KHRydWUpO1xuXHRcdFx0XHRcdFx0XHRoYW5kbGVDaGFuZ2UoJycpO1xuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdGNvbG9yPVwib3JhbmdlXCJcblx0XHRcdFx0XHRcdGljb25cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8SWNvbiBuYW1lPVwiZWRpdFwiIC8+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdH1cblx0XHRcdC8+XG5cdFx0XHQ8UG9wdXBcblx0XHRcdFx0Y29udGVudD1cImRlbGV0ZVwiXG5cdFx0XHRcdHRyaWdnZXI9e1xuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdG5lZ2F0aXZlXG5cdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdGljb25cblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0c2V0RG9EZWxldGUodHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGhhbmRsZUNoYW5nZSgnJyk7XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxJY29uIG5hbWU9XCJ0cmFzaCBhbHRlcm5hdGVcIiAvPlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHR9XG5cdFx0XHQvPlxuXHRcdDwvPlxuXHQpIDogKFxuXHRcdC8vIGlmIHdlIGRvbnQgaGF2ZSBhIFNJTlxuXHRcdDw+XG5cdFx0XHQ8TWFza2VkSW5wdXQgey4uLnJlc3R9IG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9IG1hc2s9e3ttYXNrOiAnOTk5LTk5OS05OTknLCBncmVlZHk6IGZhbHNlLCBhdXRvVW5tYXNrOiB0cnVlfX0gLz5cblx0XHRcdHsvKiBpZiB3ZSBhcmUgZWRpdGluZyAqL31cblx0XHRcdHtlZGl0ICYmIChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHtcblx0XHRcdFx0XHRcdHNldEVkaXQoZmFsc2UpO1xuXHRcdFx0XHRcdFx0aGFuZGxlQ2hhbmdlKHVuZGVmaW5lZCk7XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdENhbmNlbFxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdCl9XG5cdFx0XHR7ZG9EZWxldGUgJiYgKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y29sb3I9XCJvcmFuZ2VcIlxuXHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHtcblx0XHRcdFx0XHRcdHNldERvRGVsZXRlKGZhbHNlKTtcblx0XHRcdFx0XHRcdGhhbmRsZUNoYW5nZSh1bmRlZmluZWQpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHRVbmRvXG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0KX1cblx0XHQ8Lz5cblx0KTtcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0Ryb3Bkb3dufSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQgdHlwZSB7RHJvcGRvd25Qcm9wc30gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHR5cGUge1RhYmxlQ2VsbFByb3BzfSBmcm9tICcuL1RhYmxlSW5wdXQnO1xuXG5leHBvcnQgZnVuY3Rpb24gRHJvcGRvd25DZWxsPEQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oZHJvcGRvd25Qcm9wczogRHJvcGRvd25Qcm9wcykge1xuXHRyZXR1cm4gZnVuY3Rpb24gRHJvcGRvd25DZWxsRm4ocHJvcHM6IFRhYmxlQ2VsbFByb3BzPEQ+KSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0dmFsdWUsXG5cdFx0XHRyb3c6IHtpbmRleDogcm93SW5kZXh9LFxuXHRcdFx0Y29sdW1uOiB7aWR9LFxuXHRcdFx0dXBkYXRlRGF0YSxcblx0XHR9ID0gcHJvcHM7XG5cblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdFx0Y29uc3Qge3ZhbHVlOiB2LCBvbkNoYW5nZSwgLi4ucmVzdH0gPSBkcm9wZG93blByb3BzO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxEcm9wZG93blxuXHRcdFx0XHR7Li4ucmVzdH1cblx0XHRcdFx0dmFsdWU9e3ZhbHVlfVxuXHRcdFx0XHRvbkNoYW5nZT17KGV2ZW50LCB2YWwpID0+IHtcblx0XHRcdFx0XHR1cGRhdGVEYXRhKHJvd0luZGV4LCBpZCwgdmFsLnZhbHVlKTtcblx0XHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKGV2ZW50LCB2YWwpO1xuXHRcdFx0XHR9fVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9O1xufVxuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7Q2VsbFByb3BzLCBSZW5kZXJlcn0gZnJvbSAncmVhY3QtdGFibGUnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5pbnB1dHMuVGFibGVJbnB1dC5Ib3ZlckNlbGwnKTtcblxuaW50ZXJmYWNlIEhvdmVyQ2VsbE9wdGlvbnM8RCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG5cdEFjdGlvbjogUmVuZGVyZXI8Q2VsbFByb3BzPEQ+Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhvdmVyQ2VsbDxEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KG9wdGlvbnM6IEhvdmVyQ2VsbE9wdGlvbnM8RD4pIHtcblx0cmV0dXJuIGZ1bmN0aW9uIEhvdmVyQ2VsbEZuKHByb3BzOiBDZWxsUHJvcHM8RD4pIHtcblx0XHRjb25zdCB7QWN0aW9ufSA9IG9wdGlvbnM7XG5cblx0XHQvLyBAdHMtZXhwZWN0LWVycm9yXG5cdFx0aWYgKHByb3BzLmhvdmVyUm93ID09PSBwcm9wcy5yb3cuaWQpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxkaXYgc3R5bGU9e3t0ZXh0QWxpZ246ICdyaWdodCd9fT5cblx0XHRcdFx0XHR7LyogQHRzLWV4cGVjdC1lcnJvciAqL31cblx0XHRcdFx0XHQ8QWN0aW9uIHsuLi5wcm9wc30gLz5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcbn1cbiIsImltcG9ydCB7Zm9ybWF0TW9uZXl9IGZyb20gJ0B0aHgvbW9uZXknO1xuaW1wb3J0IHR5cGUgTW9uZXkgZnJvbSAnanMtbW9uZXknO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtDZWxsUHJvcHN9IGZyb20gJ3JlYWN0LXRhYmxlJztcblxuaW50ZXJmYWNlIE1vbmV5Q2VsbE9wdGlvbnM8RCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG5cdC8qKiBJZiBwcm92aWRlZCwgdGhpcyBmdW5jdGlvbiB3aWxsIG92ZXJyaWRlIHRoZSBNb25leSB2YWx1ZSBkaXNwbGF5ZWQgKi9cblx0b3ZlcnJpZGVWYWx1ZT86IChwcm9wczogQ2VsbFByb3BzPEQsIE1vbmV5PikgPT4gTW9uZXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNb25leUNlbGw8RCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihvcHRpb25zPzogTW9uZXlDZWxsT3B0aW9uczxEPikge1xuXHRyZXR1cm4gZnVuY3Rpb24gTW9uZXlDZWxsRm4ocHJvcHM6IENlbGxQcm9wczxELCBNb25leT4pIHtcblx0XHRyZXR1cm4gPGRpdiBzdHlsZT17e3RleHRBbGlnbjogJ3JpZ2h0J319Pntmb3JtYXRNb25leShvcHRpb25zPy5vdmVycmlkZVZhbHVlID8gb3B0aW9ucy5vdmVycmlkZVZhbHVlKHByb3BzKSA6IHByb3BzLnZhbHVlKX08L2Rpdj47XG5cdH07XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHR5cGUgTW9uZXkgZnJvbSAnanMtbW9uZXknO1xuaW1wb3J0IFJlYWN0LCB7dXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7TW9uZXlJbnB1dH0gZnJvbSAnLi4vLi4vbW9uZXkvTW9uZXlJbnB1dCc7XG5pbXBvcnQgdHlwZSB7VGFibGVDZWxsUHJvcHN9IGZyb20gJy4vVGFibGVJbnB1dCc7XG5pbXBvcnQgdHlwZSB7QWRkUm93T25UYWJJZn0gZnJvbSAnLi9hZGRSb3dPblRhYic7XG5pbXBvcnQge2FkZFJvd09uVGFifSBmcm9tICcuL2FkZFJvd09uVGFiJztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuaW5wdXRzLlRhYmxlSW5wdXQuTW9uZXlFZGl0Q2VsbCcpO1xuXG5pbnRlcmZhY2UgTW9uZXlFZGl0Q2VsbE9wdGlvbnM8RCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG5cdC8qKiBJZiBmdW5jdGlvbiBpcyBwcmVzZW50LCBhbmQgcmV0dXJucyB0cnVlLCB3aWxsIGFkZCBhIG5ldyByb3cgaWYgdGFiIGlzIHByZXNzZWQgb24gdGhlIGxhc3Qgcm93ICovXG5cdGFkZFJvd09uVGFiSWY/OiBBZGRSb3dPblRhYklmPEQsIE1vbmV5Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1vbmV5RWRpdENlbGw8RCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihvcHRzPzogTW9uZXlFZGl0Q2VsbE9wdGlvbnM8RD4pIHtcblx0cmV0dXJuIGZ1bmN0aW9uIE1vbmV5RWRpdENlbGxGbihwcm9wczogVGFibGVDZWxsUHJvcHM8RCwgTW9uZXk+KSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0dmFsdWU6IGluaXRpYWxWYWx1ZSxcblx0XHRcdHJvdzoge2luZGV4OiByb3dJbmRleH0sXG5cdFx0XHRjb2x1bW46IHtpZH0sXG5cdFx0XHR1cGRhdGVEYXRhLFxuXHRcdH0gPSBwcm9wcztcblxuXHRcdGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGUoaW5pdGlhbFZhbHVlKTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8TW9uZXlJbnB1dFxuXHRcdFx0XHRmbHVpZFxuXHRcdFx0XHR0cmFuc3BhcmVudFxuXHRcdFx0XHR2YWx1ZT17dmFsdWV9XG5cdFx0XHRcdG9uQ2hhbmdlPXtzZXRWYWx1ZX1cblx0XHRcdFx0b25CbHVyPXsoKSA9PiB7XG5cdFx0XHRcdFx0dXBkYXRlRGF0YShyb3dJbmRleCwgaWQsIHZhbHVlKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0b25LZXlEb3duPXsoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IGFkZFJvd09uVGFiKGV2ZW50LCB2YWx1ZSwgcHJvcHMsIG9wdHM/LmFkZFJvd09uVGFiSWYpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9O1xufVxuIiwiaW1wb3J0IHtmb3JtYXRNb25leSwgdG9Nb25leX0gZnJvbSAnQHRoeC9tb25leSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge0lkVHlwZSwgVGFibGVJbnN0YW5jZX0gZnJvbSAncmVhY3QtdGFibGUnO1xuXG5pbnRlcmZhY2UgTW9uZXlTdW1Gb290ZXJPcHRpb25zPEEgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuXHRpZDogSWRUeXBlPEE+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTW9uZXlTdW1Gb290ZXI8QSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihvcHRpb25zOiBNb25leVN1bUZvb3Rlck9wdGlvbnM8QT4pIHtcblx0Y29uc3Qge2lkfSA9IG9wdGlvbnMgfHwge307XG5cblx0cmV0dXJuIChpbmZvOiBUYWJsZUluc3RhbmNlPEE+KSA9PiB7XG5cdFx0Y29uc3Qgc3VtID0gaW5mby5yb3dzLnJlZHVjZSgobWVtbywgcm93KSA9PiBtZW1vLmFkZChyb3cudmFsdWVzW2lkXSksIHRvTW9uZXkoKSk7XG5cdFx0cmV0dXJuIDxkaXYgc3R5bGU9e3t0ZXh0QWxpZ246ICdyaWdodCd9fT57Zm9ybWF0TW9uZXkoc3VtKX08L2Rpdj47XG5cdH07XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0LCB7dXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7SW5wdXQsIElucHV0UHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB0eXBlIHtUYWJsZUNlbGxQcm9wc30gZnJvbSAnLi9UYWJsZUlucHV0JztcbmltcG9ydCB0eXBlIHtBZGRSb3dPblRhYklmfSBmcm9tICcuL2FkZFJvd09uVGFiJztcbmltcG9ydCB7YWRkUm93T25UYWJ9IGZyb20gJy4vYWRkUm93T25UYWInO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5pbnB1dHMuVGFibGVJbnB1dC5TdHJpbmdFZGl0Q2VsbCcpO1xuXG5pbnRlcmZhY2UgU3RyaW5nRWRpdENlbGxPcHRpb25zPEQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuXHQvKiogT3ZlcnJpZGUgU2VtYW50aWNVSSBJbnB1dCBwcm9wcyAqL1xuXHRpbnB1dFByb3BzPzogSW5wdXRQcm9wcztcblx0LyoqIElmIGZ1bmN0aW9uIGlzIHByZXNlbnQsIGFuZCByZXR1cm5zIHRydWUsIHdpbGwgYWRkIGEgbmV3IHJvdyBpZiB0YWIgaXMgcHJlc3NlZCBvbiB0aGUgbGFzdCByb3cgKi9cblx0YWRkUm93T25UYWJJZj86IEFkZFJvd09uVGFiSWY8RCwgc3RyaW5nPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFN0cmluZ0VkaXRDZWxsPEQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ob3B0aW9ucz86IFN0cmluZ0VkaXRDZWxsT3B0aW9uczxEPikge1xuXHRjb25zdCB7aW5wdXRQcm9wcywgYWRkUm93T25UYWJJZn0gPSBvcHRpb25zIHx8IHt9O1xuXG5cdHJldHVybiBmdW5jdGlvbiBTdHJpbmdFZGl0Q2VsbEZuKHByb3BzOiBUYWJsZUNlbGxQcm9wczxELCBzdHJpbmc+KSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0dmFsdWU6IGluaXRpYWxWYWx1ZSxcblx0XHRcdHJvdzoge2luZGV4fSxcblx0XHRcdGNvbHVtbjoge2lkfSxcblx0XHRcdHVwZGF0ZURhdGEsXG5cdFx0fSA9IHByb3BzO1xuXG5cdFx0Y29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZShpbml0aWFsVmFsdWUpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxJbnB1dFxuXHRcdFx0XHRmbHVpZFxuXHRcdFx0XHR0cmFuc3BhcmVudFxuXHRcdFx0XHR7Li4uaW5wdXRQcm9wc31cblx0XHRcdFx0dmFsdWU9e3ZhbHVlfVxuXHRcdFx0XHRvbkNoYW5nZT17KGV2LCB2KSA9PiB7XG5cdFx0XHRcdFx0c2V0VmFsdWUodi52YWx1ZSk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdG9uQmx1cj17KCkgPT4ge1xuXHRcdFx0XHRcdHVwZGF0ZURhdGEoaW5kZXgsIGlkLCB2YWx1ZSk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdG9uS2V5RG93bj17KGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiBhZGRSb3dPblRhYihldmVudCwgdmFsdWUsIHByb3BzLCBhZGRSb3dPblRhYklmKX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fTtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQge0ZpZWxkQXJyYXksIEZpZWxkQXJyYXlSZW5kZXJQcm9wc30gZnJvbSAnZm9ybWlrJztcbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2pzeC1rZXkgKi9cbmltcG9ydCBSZWFjdCwge3VzZU1lbW8sIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuXHRDZWxsUHJvcEdldHRlcixcblx0Q2VsbFByb3BzLFxuXHRDb2x1bW4sXG5cdEZvb3Rlckdyb3VwUHJvcEdldHRlcixcblx0Rm9vdGVyUHJvcEdldHRlcixcblx0SGVhZGVyR3JvdXBQcm9wR2V0dGVyLFxuXHRIZWFkZXJQcm9wR2V0dGVyLFxuXHRSb3dQcm9wR2V0dGVyLFxuXHRUYWJsZUJvZHlQcm9wR2V0dGVyLFxuXHR1c2VUYWJsZSxcbn0gZnJvbSAncmVhY3QtdGFibGUnO1xuaW1wb3J0IHtUYWJsZSwgVGFibGVQcm9wc30gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5pbnB1dHMuVGFibGVJbnB1dCcpO1xuXG50eXBlIERlZmF1bHRUYWJsZVR5cGUgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuaW50ZXJmYWNlIFRhYmxlSW5wdXRQcm9wczxBIGV4dGVuZHMgRGVmYXVsdFRhYmxlVHlwZT4ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdHZhbHVlczogQVtdO1xuXHRjb2x1bW5zOiBDb2x1bW48QT5bXTtcblx0c2V0RmllbGRWYWx1ZTogKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnksIHNob3VsZFZhbGlkYXRlPzogYm9vbGVhbiB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblx0Y3JlYXRlUm93OiAoKSA9PiBBO1xuXHR0YWJsZVByb3BzPzogVGFibGVQcm9wcztcblx0aGVhZGVyUm93UHJvcHM/OiBIZWFkZXJHcm91cFByb3BHZXR0ZXI8QT47XG5cdGhlYWRlckNlbGxQcm9wcz86IEhlYWRlclByb3BHZXR0ZXI8QT47XG5cdGZvb3RlclJvd1Byb3BzPzogRm9vdGVyR3JvdXBQcm9wR2V0dGVyPEE+O1xuXHRmb290ZXJDZWxsUHJvcHM/OiBGb290ZXJQcm9wR2V0dGVyPEE+O1xuXHRib2R5UHJvcHM/OiBUYWJsZUJvZHlQcm9wR2V0dGVyPEE+O1xuXHRyb3dQcm9wcz86IFJvd1Byb3BHZXR0ZXI8QT47XG5cdGNlbGxQcm9wcz86IENlbGxQcm9wR2V0dGVyPEE+O1xufVxuXG5pbnRlcmZhY2UgVGFibGVJbnB1dFRhYmxlUHJvcHM8QSBleHRlbmRzIERlZmF1bHRUYWJsZVR5cGU+IGV4dGVuZHMgVGFibGVJbnB1dFByb3BzPEE+IHtcblx0YXJyYXlIZWxwZXJzOiBGaWVsZEFycmF5UmVuZGVyUHJvcHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDZWxsUHJvcHM8RCBleHRlbmRzIERlZmF1bHRUYWJsZVR5cGUsIFYgPSBhbnk+IGV4dGVuZHMgQ2VsbFByb3BzPEQsIFY+IHtcblx0YXJyYXlIZWxwZXJzOiBGaWVsZEFycmF5UmVuZGVyUHJvcHM7XG5cdGFkZFJvdzogKCkgPT4gdm9pZDtcblx0dXBkYXRlRGF0YTogKGluZGV4OiBudW1iZXIsIGlkOiBzdHJpbmcsIHZhbHVlOiBWKSA9PiB2b2lkO1xufVxuXG5mdW5jdGlvbiBUYWJsZUlucHV0VGFibGU8QSBleHRlbmRzIERlZmF1bHRUYWJsZVR5cGU+KHByb3BzOiBUYWJsZUlucHV0VGFibGVQcm9wczxBPikge1xuXHRjb25zdCB7XG5cdFx0bmFtZSxcblx0XHRjb2x1bW5zLFxuXHRcdHZhbHVlcyxcblx0XHRhcnJheUhlbHBlcnMsXG5cdFx0c2V0RmllbGRWYWx1ZSxcblx0XHRjcmVhdGVSb3csXG5cdFx0dGFibGVQcm9wcyxcblx0XHRoZWFkZXJSb3dQcm9wcyxcblx0XHRoZWFkZXJDZWxsUHJvcHMsXG5cdFx0Ym9keVByb3BzLFxuXHRcdHJvd1Byb3BzLFxuXHRcdGNlbGxQcm9wcyxcblx0XHRmb290ZXJDZWxsUHJvcHMsXG5cdFx0Zm9vdGVyUm93UHJvcHMsXG5cdH0gPSBwcm9wcztcblx0Y29uc3QgY29scyA9IHVzZU1lbW8oKCkgPT4gY29sdW1ucywgW2NvbHVtbnNdKTtcblx0Y29uc3QgdmFscyA9IHVzZU1lbW8oKCkgPT4gdmFsdWVzLCBbdmFsdWVzXSk7XG5cdGNvbnN0IFtob3ZlclJvdywgc2V0SG92ZXJSb3ddID0gdXNlU3RhdGUoJycpO1xuXG5cdC8vIFJlYWN0LVRhYmxlIGhvb2tcblx0Y29uc3Qge2dldFRhYmxlUHJvcHMsIGdldFRhYmxlQm9keVByb3BzLCBoZWFkZXJHcm91cHMsIHByZXBhcmVSb3csIHJvd3MsIGZvb3Rlckdyb3Vwc30gPSB1c2VUYWJsZTxBPih7XG5cdFx0Y29sdW1uczogY29scyxcblx0XHRkYXRhOiB2YWxzLFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHR1cGRhdGVEYXRhKHJvd0luZGV4LCBjb2x1bW5JZCwgdmFsdWUpIHtcblx0XHRcdHNldEZpZWxkVmFsdWUoYCR7bmFtZX1bJHtyb3dJbmRleH1dLiR7Y29sdW1uSWR9YCwgdmFsdWUpO1xuXHRcdH0sXG5cdFx0YWRkUm93KCkge1xuXHRcdFx0YXJyYXlIZWxwZXJzLnB1c2goY3JlYXRlUm93KCkpO1xuXHRcdH0sXG5cdFx0YXJyYXlIZWxwZXJzLFxuXHR9KTtcblxuXHQvLyBAdHMtaWdub3JlIENoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIGEgRm9vdGVyIHRoYXQgaXMgbm90IHRoZSBkZWZhdWx0IGVtcHR5UmVuZGVyZXIoKVxuXHRjb25zdCBoYXNGb290ZXIgPSBmb290ZXJHcm91cHMuc29tZShmZyA9PiBmZy5oZWFkZXJzLnNvbWUoZmdoID0+IGZnaC5Gb290ZXIubmFtZSAhPT0gJ2VtcHR5UmVuZGVyZXInKSk7XG5cblx0Ly8gQnVpbGQgRm9vdGVyIGlmIGFueSBmb290ZXIgcmVuZGVyZXJzIGV4aXN0XG5cdGNvbnN0IGZvb3RlciA9IGhhc0Zvb3RlciA/IChcblx0XHQ8VGFibGUuRm9vdGVyPlxuXHRcdFx0e2Zvb3Rlckdyb3Vwcy5tYXAoZ3JvdXAgPT4gKFxuXHRcdFx0XHQ8VGFibGUuUm93IHsuLi57Li4uZ3JvdXAuZ2V0Rm9vdGVyR3JvdXBQcm9wcygpLCAuLi5ncm91cC5nZXRGb290ZXJHcm91cFByb3BzKGZvb3RlclJvd1Byb3BzKX19PlxuXHRcdFx0XHRcdHtncm91cC5oZWFkZXJzLm1hcChjb2x1bW4gPT4gKFxuXHRcdFx0XHRcdFx0PFRhYmxlLkhlYWRlckNlbGwgey4uLnsuLi5jb2x1bW4uZ2V0Rm9vdGVyUHJvcHMoKSwgLi4uY29sdW1uLmdldEZvb3RlclByb3BzKGZvb3RlckNlbGxQcm9wcyl9fT5cblx0XHRcdFx0XHRcdFx0e2NvbHVtbi5yZW5kZXIoJ0Zvb3RlcicpfVxuXHRcdFx0XHRcdFx0PC9UYWJsZS5IZWFkZXJDZWxsPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L1RhYmxlLlJvdz5cblx0XHRcdCkpfVxuXHRcdDwvVGFibGUuRm9vdGVyPlxuXHQpIDogbnVsbDtcblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8VGFibGUgey4uLnsuLi5nZXRUYWJsZVByb3BzKCksIC4uLmdldFRhYmxlUHJvcHModGFibGVQcm9wcyl9fT5cblx0XHRcdFx0PFRhYmxlLkhlYWRlcj5cblx0XHRcdFx0XHR7aGVhZGVyR3JvdXBzLm1hcChoZWFkZXJHcm91cCA9PiAoXG5cdFx0XHRcdFx0XHQ8VGFibGUuUm93IHsuLi57Li4uaGVhZGVyR3JvdXAuZ2V0SGVhZGVyR3JvdXBQcm9wcygpLCAuLi5oZWFkZXJHcm91cC5nZXRIZWFkZXJHcm91cFByb3BzKGhlYWRlclJvd1Byb3BzKX19PlxuXHRcdFx0XHRcdFx0XHR7aGVhZGVyR3JvdXAuaGVhZGVycy5tYXAoY29sdW1uID0+IChcblx0XHRcdFx0XHRcdFx0XHQ8VGFibGUuSGVhZGVyQ2VsbCB7Li4uey4uLmNvbHVtbi5nZXRIZWFkZXJQcm9wcygpLCAuLi5jb2x1bW4uZ2V0SGVhZGVyUHJvcHMoaGVhZGVyQ2VsbFByb3BzKX19PlxuXHRcdFx0XHRcdFx0XHRcdFx0e2NvbHVtbi5yZW5kZXIoJ0hlYWRlcicpfVxuXHRcdFx0XHRcdFx0XHRcdDwvVGFibGUuSGVhZGVyQ2VsbD5cblx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHQ8L1RhYmxlLlJvdz5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9UYWJsZS5IZWFkZXI+XG5cdFx0XHRcdDxUYWJsZS5Cb2R5IHsuLi57Li4uZ2V0VGFibGVCb2R5UHJvcHMoKSwgLi4uZ2V0VGFibGVCb2R5UHJvcHMoYm9keVByb3BzKX19PlxuXHRcdFx0XHRcdHtyb3dzLm1hcChyb3cgPT4ge1xuXHRcdFx0XHRcdFx0cHJlcGFyZVJvdyhyb3cpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PFRhYmxlLlJvd1xuXHRcdFx0XHRcdFx0XHRcdHsuLi57Li4ucm93LmdldFJvd1Byb3BzKCksIC4uLnJvdy5nZXRSb3dQcm9wcyhyb3dQcm9wcyl9fVxuXHRcdFx0XHRcdFx0XHRcdG9uTW91c2VFbnRlcj17KCkgPT4gc2V0SG92ZXJSb3cocm93LmlkKX1cblx0XHRcdFx0XHRcdFx0XHRvbk1vdXNlTGVhdmU9eygpID0+IHNldEhvdmVyUm93KCcnKX1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtyb3cuY2VsbHMubWFwKGNlbGwgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PFRhYmxlLkNlbGwgey4uLnsuLi5jZWxsLmdldENlbGxQcm9wcygpLCAuLi5jZWxsLmdldENlbGxQcm9wcyhjZWxsUHJvcHMpfX0+e2NlbGwucmVuZGVyKCdDZWxsJywge2hvdmVyUm93fSl9PC9UYWJsZS5DZWxsPlxuXHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHQ8L1RhYmxlLlJvdz5cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvVGFibGUuQm9keT5cblx0XHRcdFx0e2Zvb3Rlcn1cblx0XHRcdDwvVGFibGU+XG5cdFx0PC8+XG5cdCk7XG59XG5cbi8qKlxuICogQ2FuIGJlIHVzZWQgaW4gYSBURm9ybSBhcyBhIFRhYmxlIElucHV0LlxuICogQHBhcmFtIHByb3BzXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRhYmxlSW5wdXQ8QSBleHRlbmRzIERlZmF1bHRUYWJsZVR5cGU+KHByb3BzOiBUYWJsZUlucHV0UHJvcHM8QT4pIHtcblx0cmV0dXJuIDxGaWVsZEFycmF5IG5hbWU9e3Byb3BzLm5hbWV9IHJlbmRlcj17YXJyYXlIZWxwZXJzID0+IDxUYWJsZUlucHV0VGFibGUgYXJyYXlIZWxwZXJzPXthcnJheUhlbHBlcnN9IHsuLi5wcm9wc30gLz59IC8+O1xufVxuIiwiaW1wb3J0IHR5cGUge1RhYmxlQ2VsbFByb3BzfSBmcm9tICcuL1RhYmxlSW5wdXQnO1xuXG5leHBvcnQgdHlwZSBBZGRSb3dPblRhYklmPEQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgViA9IGFueT4gPSAocHJvcHM6IFRhYmxlQ2VsbFByb3BzPEQsIFY+LCBuZXdWYWx1ZTogVikgPT4gYm9vbGVhbjtcblxuLyoqXG4gKiBVc2UgYXMgYW4gb25LZXlEb3duIGV2ZW50IGhhbmRsZXIgdG8gYWRkIGEgbmV3IHJvdyB3aGVuIHRhYiBpcyBwcmVzc2VkLCBkZXBlbmRpbmcgb24gY2VydGFpbiBjcml0ZXJpYS5cbiAqIEBwYXJhbSBldmVudFxuICogQHBhcmFtIHZhbHVlXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEBwYXJhbSBhZGRSb3dPblRhYklmXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRSb3dPblRhYjxEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIFYgPSBhbnk+KFxuXHRldmVudDogS2V5Ym9hcmRFdmVudCxcblx0dmFsdWU6IFYsXG5cdHByb3BzOiBUYWJsZUNlbGxQcm9wczxELCBWPixcblx0YWRkUm93T25UYWJJZj86IEFkZFJvd09uVGFiSWY8RCwgVj4sXG4pIHtcblx0Y29uc3Qge1xuXHRcdHJvdzoge2luZGV4OiByb3dJbmRleH0sXG5cdFx0cm93czoge2xlbmd0aDogcm93c0xlbmd0aH0sXG5cdFx0YWRkUm93LFxuXHR9ID0gcHJvcHM7XG5cblx0aWYgKGV2ZW50LmtleSA9PT0gJ1RhYicgJiYgIWV2ZW50LnNoaWZ0S2V5ICYmIHJvd0luZGV4ICsgMSA9PT0gcm93c0xlbmd0aCAmJiAoYWRkUm93T25UYWJJZiA/IGFkZFJvd09uVGFiSWYocHJvcHMsIHZhbHVlKSA6IGZhbHNlKSkge1xuXHRcdGFkZFJvdygpO1xuXHR9XG59XG4iLCJleHBvcnQge1RhYmxlSW5wdXR9IGZyb20gJy4vVGFibGVJbnB1dCc7XG5leHBvcnQge01vbmV5Q2VsbH0gZnJvbSAnLi9Nb25leUNlbGwnO1xuZXhwb3J0IHtNb25leUVkaXRDZWxsfSBmcm9tICcuL01vbmV5RWRpdENlbGwnO1xuZXhwb3J0IHtNb25leVN1bUZvb3Rlcn0gZnJvbSAnLi9Nb25leVN1bUZvb3Rlcic7XG5leHBvcnQge1N0cmluZ0VkaXRDZWxsfSBmcm9tICcuL1N0cmluZ0VkaXRDZWxsJztcbmV4cG9ydCB7RHJvcGRvd25DZWxsfSBmcm9tICcuL0Ryb3Bkb3duQ2VsbCc7XG5leHBvcnQge0hvdmVyQ2VsbH0gZnJvbSAnLi9Ib3ZlckNlbGwnO1xuZXhwb3J0IHthZGRSb3dPblRhYn0gZnJvbSAnLi9hZGRSb3dPblRhYic7XG5leHBvcnQgdHlwZSB7QWRkUm93T25UYWJJZn0gZnJvbSAnLi9hZGRSb3dPblRhYic7XG4iLCJpbXBvcnQge3RvTW9uZXl9IGZyb20gJ0B0aHgvbW9uZXknO1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IE1vbmV5IGZyb20gJ2pzLW1vbmV5JztcbmltcG9ydCBSZWFjdCwge1N5bnRoZXRpY0V2ZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0Ryb3Bkb3duLCBEcm9wZG93blByb3BzLCBJbnB1dCwgSW5wdXRQcm9wcywgTGFiZWx9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB0eXBlIHtNb25leUlucHV0UHJvcHN9IGZyb20gJy4uL01vbmV5SW5wdXQnO1xuaW1wb3J0IHt1c2VNb25leUlucHV0fSBmcm9tICcuLi91c2VNb25leUlucHV0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMubW9uZXkuTW9uZXlDdXJyZW5jeUlucHV0Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9uZXlDdXJyZW5jeUlucHV0UHJvcHMgZXh0ZW5kcyBNb25leUlucHV0UHJvcHMge1xuXHRjdXJyZW5jeU9wdGlvbnM/OiB7a2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmc7IHRleHQ6IHN0cmluZ31bXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1vbmV5Q3VycmVuY3lJbnB1dChwcm9wczogTW9uZXlDdXJyZW5jeUlucHV0UHJvcHMgJiBPbWl0PElucHV0UHJvcHMsICdvbkNoYW5nZSc+KSB7XG5cdGNvbnN0IHtuYW1lLCBvbkJsdXIsIHByZWZpeCwgZGVmYXVsdEN1cnJlbmN5LCBvbkNoYW5nZSwgc2hvd1ByZWZpeCwgdmFsdWUsIHdob2xlTnVtYmVyLCBjdXJyZW5jaWVzLCBsb2NrZWQsIC4uLnJlc3R9ID0gcHJvcHM7XG5cdGNvbnN0IHtpbnB1dEVsZW1lbnR9ID0gdXNlTW9uZXlJbnB1dCh7ZGVmYXVsdEN1cnJlbmN5LCBvbkNoYW5nZSwgcHJlZml4LCBzaG93UHJlZml4LCB2YWx1ZSwgd2hvbGVOdW1iZXJ9KTtcblxuXHRjb25zdCBvcHRpb25zID0gY3VycmVuY2llcyB8fCBbXG5cdFx0e2tleTogJ0NBRCcsIHRleHQ6ICdDQUQnLCB2YWx1ZTogJ0NBRCd9LFxuXHRcdHtrZXk6ICdVU0QnLCB0ZXh0OiAnVVNEJywgdmFsdWU6ICdVU0QnfSxcblx0XTtcblxuXHRmdW5jdGlvbiBoYW5kbGVEcm9wZG93bkNoYW5nZShlOiBTeW50aGV0aWNFdmVudDxIVE1MRWxlbWVudCwgRXZlbnQ+LCB2YWw6IERyb3Bkb3duUHJvcHMpIHtcblx0XHQvLyBAdHMtaWdub3JlIERPTlQgREVMRVRFIFRIRSAqKiBJVCBJUyBBTiBPUEVSQVRPUiBNRUFOSU5HIFBPV0VSL0VYUE9ORU5UXG5cdFx0aWYgKHZhbC52YWx1ZSAmJiBvbkNoYW5nZSkgb25DaGFuZ2UodG9Nb25leSh2YWx1ZS5hbW91bnQgLyAxMCAqKiBNb25leVt2YWx1ZS5jdXJyZW5jeV0uZGVjaW1hbF9kaWdpdHMsIE1vbmV5W3ZhbC52YWx1ZV0pKTtcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PElucHV0IHsuLi5yZXN0fSBsYWJlbFBvc2l0aW9uPVwicmlnaHRcIj5cblx0XHRcdDxpbnB1dCBuYW1lPXtuYW1lfSByZWY9e2lucHV0RWxlbWVudH0gb25CbHVyPXtvbkJsdXJ9IHJlYWRPbmx5PXtsb2NrZWR9IC8+XG5cdFx0XHQ8TGFiZWwgYmFzaWM+XG5cdFx0XHRcdDxEcm9wZG93biBkaXNhYmxlZD17bG9ja2VkfSBvcHRpb25zPXtvcHRpb25zfSB2YWx1ZT17dmFsdWU/LmN1cnJlbmN5IHx8IGRlZmF1bHRDdXJyZW5jeT8uY29kZSB8fCAnQ0FEJ30gb25DaGFuZ2U9e2hhbmRsZURyb3Bkb3duQ2hhbmdlfSAvPlxuXHRcdFx0PC9MYWJlbD5cblx0XHQ8L0lucHV0PlxuXHQpO1xufVxuIiwiaW1wb3J0IHR5cGUge0N1cnJlbmNpZXMsIElNb25leU9iamVjdH0gZnJvbSAnQHRoeC9tb25leSc7XG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgdHlwZSBNb25leSBmcm9tICdqcy1tb25leSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtJbnB1dCwgSW5wdXRQcm9wc30gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHt1c2VNb25leUlucHV0fSBmcm9tICcuLi91c2VNb25leUlucHV0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMubW9uZXkuTW9uZXlJbnB1dCcpO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vbmV5SW5wdXRQcm9wcyB7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdG9uQ2hhbmdlPzogKHZhbHVlOiBNb25leSkgPT4gdm9pZDtcblx0dmFsdWU/OiBNb25leSB8IElNb25leU9iamVjdDtcblx0ZGVmYXVsdEN1cnJlbmN5PzogQ3VycmVuY2llcy5DdXJyZW5jeTsgLy8gRGVmYXVsdHMgdG8gTW9uZXkuQ0FEXG5cdG9uQmx1cj86IChldjogYW55KSA9PiB2b2lkO1xuXHRwcmVmaXg/OiBzdHJpbmc7IC8vIERlZmF1bHRzIHRvIGN1cnJlbmN5IHN5bWJvbFxuXHRzaG93UHJlZml4PzogYm9vbGVhbjsgLy8gRGVmYXVsdHMgdG8gZmFsc2Vcblx0bG9ja2VkPzogYm9vbGVhbjsgLy8gRGVmYXVsdHMgdG8gZmFsc2Vcblx0d2hvbGVOdW1iZXI/OiBib29sZWFuOyAvLyBEZWZhdWx0cyB0byBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTW9uZXlJbnB1dChwcm9wczogTW9uZXlJbnB1dFByb3BzICYgT21pdDxJbnB1dFByb3BzLCAnb25DaGFuZ2UnPikge1xuXHRjb25zdCB7bmFtZSwgb25CbHVyLCBsb2NrZWQsIHByZWZpeCwgZGVmYXVsdEN1cnJlbmN5LCBvbkNoYW5nZSwgc2hvd1ByZWZpeCwgdmFsdWUsIHdob2xlTnVtYmVyLCAuLi5yZXN0fSA9IHByb3BzO1xuXHRjb25zdCB7aW5wdXRFbGVtZW50fSA9IHVzZU1vbmV5SW5wdXQoe2RlZmF1bHRDdXJyZW5jeSwgb25DaGFuZ2UsIHByZWZpeCwgc2hvd1ByZWZpeCwgdmFsdWUsIHdob2xlTnVtYmVyfSk7XG5cblx0cmV0dXJuIChcblx0XHQ8SW5wdXQgey4uLnJlc3R9PlxuXHRcdFx0PGlucHV0IG5hbWU9e25hbWV9IHJlZj17aW5wdXRFbGVtZW50fSBvbkJsdXI9e29uQmx1cn0gcmVhZE9ubHk9e2xvY2tlZH0gLz5cblx0XHQ8L0lucHV0PlxuXHQpO1xufVxuIiwiaW1wb3J0IHtDdXJyZW5jaWVzLCBJTW9uZXlPYmplY3QsIGlzTW9uZXlPYmplY3QsIHRvTW9uZXl9IGZyb20gJ0B0aHgvbW9uZXknO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBJbnB1dG1hc2sgZnJvbSAnaW5wdXRtYXNrJztcbmltcG9ydCBNb25leSBmcm9tICdqcy1tb25leSc7XG5pbXBvcnQge3VzZUVmZmVjdCwgdXNlUmVmfSBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLm1vbmV5LnVzZU1vbmV5SW5wdXQnKTtcblxuaW50ZXJmYWNlIFVzZU1vbmV5SW5wdXRQcm9wcyB7XG5cdG9uQ2hhbmdlPzogKHZhbHVlOiBNb25leSkgPT4gdm9pZDtcblx0dmFsdWU/OiBNb25leSB8IElNb25leU9iamVjdDtcblx0ZGVmYXVsdEN1cnJlbmN5PzogQ3VycmVuY2llcy5DdXJyZW5jeTsgLy8gRGVmYXVsdHMgdG8gTW9uZXkuQ0FEXG5cdHByZWZpeD86IHN0cmluZzsgLy8gRGVmYXVsdHMgdG8gY3VycmVuY3kgc3ltYm9sXG5cdHNob3dQcmVmaXg/OiBib29sZWFuOyAvLyBEZWZhdWx0cyB0byBmYWxzZVxuXHR3aG9sZU51bWJlcj86IGJvb2xlYW47IC8vIERlZmF1bHRzIHRvIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VNb25leUlucHV0KHByb3BzOiBVc2VNb25leUlucHV0UHJvcHMpIHtcblx0Y29uc3Qge3ZhbHVlLCBvbkNoYW5nZSwgZGVmYXVsdEN1cnJlbmN5LCBzaG93UHJlZml4LCBwcmVmaXgsIHdob2xlTnVtYmVyfSA9IHByb3BzO1xuXG5cdGNvbnN0IGlucHV0RWxlbWVudCA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50IHwgbnVsbD4obnVsbCk7XG5cdGNvbnN0IG1hc2tJbnN0YW5jZSA9IHVzZVJlZjxJbnB1dG1hc2suSW5zdGFuY2UgfCBudWxsPihudWxsKTtcblxuXHQvLyBzZXQgdGhlIGFkakN1cnJlbmN5XG5cdGxldCBhZGpDdXJyZW5jeSA9IE1vbmV5LkNBRDtcblx0Ly8gQHRzLWlnbm9yZVxuXHRpZiAodmFsdWU/LmN1cnJlbmN5ICYmIE1vbmV5W3ZhbHVlPy5jdXJyZW5jeV0pIGFkakN1cnJlbmN5ID0gTW9uZXlbdmFsdWU/LmN1cnJlbmN5XTtcblx0aWYgKGRlZmF1bHRDdXJyZW5jeSkgYWRqQ3VycmVuY3kgPSBkZWZhdWx0Q3VycmVuY3k7XG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoIWlucHV0RWxlbWVudC5jdXJyZW50KSB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBnZXQgaW5wdXQgZWxlbWVudCcpO1xuXG5cdFx0ZCgnQ3JlYXRpbmcgaW5wdXQgbWFzayBpbnN0YW5jZScpO1xuXHRcdG1hc2tJbnN0YW5jZS5jdXJyZW50ID0gbmV3IElucHV0bWFzayh7XG5cdFx0XHRhbGlhczogJ251bWVyaWMnLFxuXHRcdFx0Z3JvdXBTZXBhcmF0b3I6ICcsJyxcblx0XHRcdGRpZ2l0czogd2hvbGVOdW1iZXIgPyAnMCcgOiBDdXJyZW5jaWVzW2FkakN1cnJlbmN5LmNvZGVdLmRlY2ltYWxfZGlnaXRzLnRvU3RyaW5nKCksXG5cdFx0XHRkaWdpdHNPcHRpb25hbDogZmFsc2UsXG5cdFx0XHRwcmVmaXg6IHNob3dQcmVmaXggPyBwcmVmaXggfHwgQ3VycmVuY2llc1thZGpDdXJyZW5jeS5jb2RlXS5zeW1ib2wgOiB1bmRlZmluZWQsXG5cdFx0XHRwbGFjZWhvbGRlcjogJzAnLFxuXHRcdFx0YXV0b1VubWFzazogdHJ1ZSxcblx0XHRcdG9uY29tcGxldGUoKSB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UodG9Nb25leShpbnB1dEVsZW1lbnQuY3VycmVudD8udmFsdWUsIGFkakN1cnJlbmN5KSk7XG5cdFx0XHR9LFxuXHRcdFx0b25jbGVhcmVkKCkge1xuXHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKHRvTW9uZXkoMCwgYWRqQ3VycmVuY3kpKTtcblx0XHRcdH0sXG5cdFx0XHRvbmluY29tcGxldGUoKSB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UodG9Nb25leShpbnB1dEVsZW1lbnQuY3VycmVudD8udmFsdWUsIGFkakN1cnJlbmN5KSk7XG5cdFx0XHR9LFxuXHRcdH0pO1xuXHRcdG1hc2tJbnN0YW5jZS5jdXJyZW50Lm1hc2soaW5wdXRFbGVtZW50LmN1cnJlbnQpO1xuXG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGlmIChtYXNrSW5zdGFuY2UuY3VycmVudCkge1xuXHRcdFx0XHRkKCdDbGVhbmluZyB1cCBpbnB1dCBtYXNrIGluc3RhbmNlJyk7XG5cdFx0XHRcdG1hc2tJbnN0YW5jZS5jdXJyZW50LnJlbW92ZSgpO1xuXHRcdFx0XHRtYXNrSW5zdGFuY2UuY3VycmVudCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fTtcblx0fSwgW2FkakN1cnJlbmN5LCBwcmVmaXgsIHdob2xlTnVtYmVyXSk7XG5cblx0Ly8gSWYgd2UgY2hhbmdlIHRoZSB2YWx1ZSBwcm9wIHdlIG5lZWQgdG8gc3luYyB0aGUgRE9NIHZhbHVlIHRvIGRpc3BsYXkgdGhlIG5ldyB2YWx1ZVxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGNvbnN0IGlucHV0VmFsdWUgPSB0b01vbmV5KGlucHV0RWxlbWVudC5jdXJyZW50Py52YWx1ZSwgYWRqQ3VycmVuY3kpO1xuXHRcdGlmICgodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgJiYgaW5wdXRFbGVtZW50LmN1cnJlbnQpIHtcblx0XHRcdGlucHV0RWxlbWVudC5jdXJyZW50LnZhbHVlID0gJyc7XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1vbmV5ICYmIGlucHV0RWxlbWVudC5jdXJyZW50KSB7XG5cdFx0XHRpZiAoIWlucHV0VmFsdWUuZXF1YWxzKHZhbHVlKSkge1xuXHRcdFx0XHRpbnB1dEVsZW1lbnQuY3VycmVudC52YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc01vbmV5T2JqZWN0KHZhbHVlKSAmJiBpbnB1dEVsZW1lbnQuY3VycmVudCkge1xuXHRcdFx0Y29uc3QgdmFsdWVJbk1vbmV5ID0gdG9Nb25leSh2YWx1ZSk7XG5cdFx0XHRpZiAoIWlucHV0VmFsdWUuZXF1YWxzKHZhbHVlSW5Nb25leSkpIHtcblx0XHRcdFx0aW5wdXRFbGVtZW50LmN1cnJlbnQudmFsdWUgPSB2YWx1ZUluTW9uZXkudG9TdHJpbmcoKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBtdXN0IGJlIGEgTW9uZXkgaW5zdGFuY2Ugb3IgSU1vbmV5T2JqZWN0OiAke3ZhbHVlfSAoJHt0eXBlb2YgdmFsdWV9YCk7XG5cdFx0fVxuXHR9LCBbdmFsdWUsIGFkakN1cnJlbmN5XSk7XG5cblx0cmV0dXJuIHtpbnB1dEVsZW1lbnR9O1xufVxuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge0NoaWxkcmVufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZVN0ZXB9IGZyb20gJy4vdXNlU3RlcCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLnN0ZXAuRm9ybVN0ZXAnKTtcblxuaW50ZXJmYWNlIEZvcm1TdGVwUHJvcHMge1xuXHRjaGlsZHJlbjogSlNYLkVsZW1lbnQ7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRzdGVwS2V5OiBzdHJpbmc7XG5cdGhpZGRlbj86IGJvb2xlYW4gfCAoKHN0YXRlOiBhbnksIHN0ZXA6IG51bWJlcikgPT4gYm9vbGVhbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGb3JtU3RlcChwcm9wczogRm9ybVN0ZXBQcm9wcykge1xuXHRjb25zdCBbc3RhdGUsIGhhbmRsZVN1Ym1pdF0gPSB1c2VTdGVwKCk7XG5cdGNvbnN0IHZhbHVlcyA9IHN0YXRlW3Byb3BzLnN0ZXBLZXldIHx8IHt9O1xuXG5cdGNvbnN0IGZvcm0gPSBSZWFjdC5jbG9uZUVsZW1lbnQoQ2hpbGRyZW4ub25seShwcm9wcy5jaGlsZHJlbiksIHtcblx0XHR2YWx1ZXM6IHZhbHVlcyB8fCB7fSxcblx0XHRvblN1Ym1pdDogKHZhbHM6IHVua25vd24pID0+IGhhbmRsZVN1Ym1pdCh2YWxzLCBwcm9wcy5zdGVwS2V5KSxcblx0fSk7XG5cblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PGgxPntwcm9wcy50aXRsZX08L2gxPlxuXHRcdFx0e2Zvcm19XG5cdFx0PC8+XG5cdCk7XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuc3RlcC5TdGVwJyk7XG5cbmludGVyZmFjZSBTdGVwUHJvcHMge1xuXHRjaGlsZHJlbj86IEpTWC5FbGVtZW50IHwgSlNYLkVsZW1lbnRbXTtcblx0dGl0bGU/OiBzdHJpbmc7XG5cdHN0ZXA/OiBudW1iZXI7XG5cdGhpZGRlbj86IGJvb2xlYW4gfCAoKHN0YXRlOiBhbnksIHN0ZXA6IG51bWJlcikgPT4gYm9vbGVhbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTdGVwKHByb3BzOiBTdGVwUHJvcHMpIHtcblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PGgxPntwcm9wcy50aXRsZX08L2gxPlxuXHRcdFx0e3Byb3BzLmNoaWxkcmVufVxuXHRcdDwvPlxuXHQpO1xufVxuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge3VzZVN0YXRlLCBDaGlsZHJlbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtQcm9tcHR9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHtHcmlkLCBTdGVwIGFzIFNlbWFudGljU3RlcH0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHtGb3JtU3RlcH0gZnJvbSAnLi9Gb3JtU3RlcCc7XG5pbXBvcnQge1N0ZXB9IGZyb20gJy4vU3RlcCc7XG5pbXBvcnQge1N0ZXBDb250ZXh0fSBmcm9tICcuL3N0ZXBDb250ZXh0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuc3RlcC5TdGVwUHJvdmlkZXInKTtcblxuaW50ZXJmYWNlIFN0ZXBQcm92aWRlclByb3BzIHtcblx0Y2hpbGRyZW46IChKU1guRWxlbWVudCB8IG51bGwgfCBmYWxzZSlbXTtcblx0b25TdWJtaXQ6ICh2YWx1ZXM6IGFueSkgPT4gdm9pZDtcblx0dmFsdWVzPzogYW55O1xuXHR3YXJuT25SZXJvdXRlPzogYm9vbGVhbjtcblx0dmVydGljYWw/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU3RlcFByb3ZpZGVyKHByb3BzOiBTdGVwUHJvdmlkZXJQcm9wcykge1xuXHRjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlKHByb3BzLnZhbHVlcyB8fCB7fSk7XG5cdGNvbnN0IFtjdXJyZW50U3RlcCwgc2V0Q3VycmVudFN0ZXBdID0gdXNlU3RhdGUoMCk7XG5cdGNvbnN0IFtpc1N1Ym1pdHRpbmcsIHNldElzU3VibWl0dGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cblx0Y29uc3QgdGl0bGVzOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBjaGlsZHJlbjogSlNYLkVsZW1lbnRbXSA9IFtdO1xuXG5cdENoaWxkcmVuLmZvckVhY2gocHJvcHM/LmNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG5cdFx0aWYgKCFjaGlsZCkgcmV0dXJuO1xuXHRcdGlmIChjaGlsZD8udHlwZSAhPT0gU3RlcCAmJiBjaGlsZD8udHlwZSAhPT0gRm9ybVN0ZXApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCByZW5kZXIgJyR7Y2hpbGQ/LnR5cGV9JyBhcyBjaGlsZCBvZiAnU3RlcFByb3ZpZGVyJy4gTXVzdCBiZSBvZiB0eXBlICdTdGVwJyBvciAnRm9ybVN0ZXAnYCk7XG5cdFx0fVxuXHRcdGlmIChjaGlsZC5wcm9wcy5oaWRkZW4pIHtcblx0XHRcdGlmICh0eXBlb2YgY2hpbGQucHJvcHMuaGlkZGVuID09PSAnZnVuY3Rpb24nICYmICFjaGlsZC5wcm9wcy5oaWRkZW4oc3RhdGUsIGluZGV4KSkge1xuXHRcdFx0XHR0aXRsZXMucHVzaChjaGlsZD8ucHJvcHM/LnRpdGxlIHx8ICcnKTtcblx0XHRcdFx0Y2hpbGRyZW4ucHVzaChSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtzdGVwOiBpbmRleCwga2V5OiBjaGlsZD8ua2V5IHx8IGluZGV4LnRvU3RyaW5nKCl9KSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRpdGxlcy5wdXNoKGNoaWxkPy5wcm9wcz8udGl0bGUgfHwgJycpO1xuXHRcdFx0Y2hpbGRyZW4ucHVzaChSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtzdGVwOiBpbmRleCwga2V5OiBjaGlsZD8ua2V5IHx8IGluZGV4LnRvU3RyaW5nKCl9KSk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBvbk5hdmlnYXRlID0gKCkgPT4gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBlbmQgdGhpcyBwcm9jZXNzPyBBbGwgdGhlIGVudGVyZWQgZGF0YSB3aWxsIGJlIGxvc3QhJztcblxuXHRjb25zdCBoYW5kbGVTdWJtaXQgPSAodmFsdWVzOiBhbnksIHN0ZXBLZXk6IHN0cmluZykgPT4ge1xuXHRcdGlmIChjdXJyZW50U3RlcCArIDEgPT09IGNoaWxkcmVuPy5sZW5ndGgpIHtcblx0XHRcdHNldFN0YXRlKHsuLi5zdGF0ZSwgW3N0ZXBLZXldOiB2YWx1ZXN9KTtcblx0XHRcdHNldElzU3VibWl0dGluZyh0cnVlKTtcblx0XHRcdHByb3BzLm9uU3VibWl0KHsuLi5zdGF0ZSwgW3N0ZXBLZXldOiB2YWx1ZXN9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2V0U3RhdGUoey4uLnN0YXRlLCBbc3RlcEtleV06IHZhbHVlc30pO1xuXHRcdFx0c2V0Q3VycmVudFN0ZXAoY3VycmVudFN0ZXAgKyAxKTtcblx0XHR9XG5cdH07XG5cblx0aWYgKHByb3BzLnZlcnRpY2FsKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxTdGVwQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17e3N0YXRlLCBoYW5kbGVTdWJtaXR9fT5cblx0XHRcdFx0e3Byb3BzLndhcm5PblJlcm91dGUgJiYgPFByb21wdCBtZXNzYWdlPXtvbk5hdmlnYXRlfSB3aGVuPXshaXNTdWJtaXR0aW5nfSAvPn1cblx0XHRcdFx0PEdyaWQgZGl2aWRlZCBzdGFja2FibGU+XG5cdFx0XHRcdFx0PEdyaWQuUm93PlxuXHRcdFx0XHRcdFx0PEdyaWQuQ29sdW1uIHdpZHRoPXszfT5cblx0XHRcdFx0XHRcdFx0PFNlbWFudGljU3RlcC5Hcm91cCBvcmRlcmVkIHNpemU9XCJtaW5pXCIgdmVydGljYWwgd2lkdGhzPXsxfT5cblx0XHRcdFx0XHRcdFx0XHR7dGl0bGVzPy5tYXAoKHRpdGxlLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PFNlbWFudGljU3RlcFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17aW5kZXgudG9TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZWQ9e2luZGV4IDwgT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhY3RpdmU9e2N1cnJlbnRTdGVwID09PSBpbmRleH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRDdXJyZW50U3RlcChpbmRleCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2luZGV4ID4gT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxTZW1hbnRpY1N0ZXAuQ29udGVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxTZW1hbnRpY1N0ZXAuVGl0bGU+e3RpdGxlfTwvU2VtYW50aWNTdGVwLlRpdGxlPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvU2VtYW50aWNTdGVwLkNvbnRlbnQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvU2VtYW50aWNTdGVwPlxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdFx0PC9TZW1hbnRpY1N0ZXAuR3JvdXA+XG5cdFx0XHRcdFx0XHQ8L0dyaWQuQ29sdW1uPlxuXHRcdFx0XHRcdFx0PEdyaWQuQ29sdW1uIHdpZHRoPXsxM30+e2NoaWxkcmVuPy5bY3VycmVudFN0ZXBdfTwvR3JpZC5Db2x1bW4+XG5cdFx0XHRcdFx0PC9HcmlkLlJvdz5cblx0XHRcdFx0PC9HcmlkPlxuXHRcdFx0PC9TdGVwQ29udGV4dC5Qcm92aWRlcj5cblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8U3RlcENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3tzdGF0ZSwgaGFuZGxlU3VibWl0fX0+XG5cdFx0XHR7cHJvcHMud2Fybk9uUmVyb3V0ZSAmJiA8UHJvbXB0IG1lc3NhZ2U9e29uTmF2aWdhdGV9IC8+fVxuXHRcdFx0PFNlbWFudGljU3RlcC5Hcm91cCBvcmRlcmVkIHNpemU9XCJtaW5pXCI+XG5cdFx0XHRcdHt0aXRsZXM/Lm1hcCgodGl0bGUsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxTZW1hbnRpY1N0ZXBcblx0XHRcdFx0XHRcdFx0a2V5PXtpbmRleC50b1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZWQ9e2luZGV4IDwgT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aH1cblx0XHRcdFx0XHRcdFx0YWN0aXZlPXtjdXJyZW50U3RlcCA9PT0gaW5kZXh9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNldEN1cnJlbnRTdGVwKGluZGV4KX1cblx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2luZGV4ID4gT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aH1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PFNlbWFudGljU3RlcC5Db250ZW50PlxuXHRcdFx0XHRcdFx0XHRcdDxTZW1hbnRpY1N0ZXAuVGl0bGU+e3RpdGxlfTwvU2VtYW50aWNTdGVwLlRpdGxlPlxuXHRcdFx0XHRcdFx0XHQ8L1NlbWFudGljU3RlcC5Db250ZW50PlxuXHRcdFx0XHRcdFx0PC9TZW1hbnRpY1N0ZXA+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L1NlbWFudGljU3RlcC5Hcm91cD5cblx0XHRcdHtjaGlsZHJlbj8uW2N1cnJlbnRTdGVwXX1cblx0XHQ8L1N0ZXBDb250ZXh0LlByb3ZpZGVyPlxuXHQpO1xufVxuIiwiZXhwb3J0IHtTdGVwfSBmcm9tICcuL1N0ZXAnO1xuZXhwb3J0IHt1c2VTdGVwfSBmcm9tICcuL3VzZVN0ZXAnO1xuZXhwb3J0IHtGb3JtU3RlcH0gZnJvbSAnLi9Gb3JtU3RlcCc7XG5leHBvcnQge1N0ZXBQcm92aWRlcn0gZnJvbSAnLi9TdGVwUHJvdmlkZXInO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGNvbnN0IFN0ZXBDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDx7aGFuZGxlU3VibWl0OiAodmFsdWVzOiB1bmtub3duLCBzdGVwS2V5OiBzdHJpbmcpID0+IHZvaWQ7IHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+fT4oe1xuXHRoYW5kbGVTdWJtaXQ6ICgpID0+IHt9LFxuXHRzdGF0ZToge30sXG59KTtcbiIsImltcG9ydCB7dXNlQ29udGV4dH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTdGVwQ29udGV4dH0gZnJvbSAnLi9zdGVwQ29udGV4dCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdGVwKCk6IFthbnksICh2YWx1ZXM6IHVua25vd24sIHN0ZXBLZXk6IHN0cmluZykgPT4gdm9pZF0ge1xuXHRjb25zdCB7c3RhdGUsIGhhbmRsZVN1Ym1pdH0gPSB1c2VDb250ZXh0KFN0ZXBDb250ZXh0KTtcblxuXHRyZXR1cm4gW3N0YXRlLCBoYW5kbGVTdWJtaXRdO1xufVxuIiwiaW1wb3J0IGFwaSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P3J1bGVTZXRbMV0ucnVsZXNbMl0udXNlWzJdIS4vc3R5bGVzLmNzc1wiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLnJ3LWRhdGV0aW1lcGlja2VyID4gaW5wdXQge1xcblxcdGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucnctZGF0ZXRpbWVwaWNrZXIgLnJ3LWNhbGVuZGFyLWdyaWQucnctbmF2LXZpZXcgLnJ3LWJ0biB7XFxuXFx0cGFkZGluZzogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGF0ZVRpbWVQaWNrZXJBdXRvV2lkdGgge1xcblxcdHdpZHRoOiBhdXRvO1xcblxcdGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbn1cXG5cXG4uZGF0ZVRpbWVQaWNrZXJBdXRvV2lkdGggPiBpbnB1dCB7XFxuXFx0d2lkdGg6IGF1dG87XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyLXdyYXBwZXIge1xcblxcdHdpZHRoOiAxMDAlO1xcblxcdGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9faW5wdXQtY29udGFpbmVyIHtcXG5cXHRkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyIHtcXG5cXHR6LWluZGV4OiA1ICFpbXBvcnRhbnQ7XFxufVxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2RhdGUvRGF0ZVBpY2tlci9zdHlsZXMuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0NBQ0MsdUJBQXVCO0FBQ3hCOztBQUVBO0NBQ0MscUJBQXFCO0FBQ3RCOztBQUVBO0NBQ0MsV0FBVztDQUNYLG9CQUFvQjtBQUNyQjs7QUFFQTtDQUNDLFdBQVc7QUFDWjs7QUFFQTtDQUNDLFdBQVc7Q0FDWCwwQkFBMEI7QUFDM0I7O0FBRUE7Q0FDQywwQkFBMEI7QUFDM0I7O0FBRUE7Q0FDQyxxQkFBcUI7QUFDdEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiOmdsb2JhbCgucnctZGF0ZXRpbWVwaWNrZXIpID4gaW5wdXQge1xcblxcdGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG46Z2xvYmFsKC5ydy1kYXRldGltZXBpY2tlcikgOmdsb2JhbCgucnctY2FsZW5kYXItZ3JpZC5ydy1uYXYtdmlldykgOmdsb2JhbCgucnctYnRuKSB7XFxuXFx0cGFkZGluZzogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG46Z2xvYmFsKC5kYXRlVGltZVBpY2tlckF1dG9XaWR0aCkge1xcblxcdHdpZHRoOiBhdXRvO1xcblxcdGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbn1cXG5cXG46Z2xvYmFsKC5kYXRlVGltZVBpY2tlckF1dG9XaWR0aCkgPiBpbnB1dCB7XFxuXFx0d2lkdGg6IGF1dG87XFxufVxcblxcbjpnbG9iYWwoLnJlYWN0LWRhdGVwaWNrZXItd3JhcHBlcikge1xcblxcdHdpZHRoOiAxMDAlO1xcblxcdGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xcbn1cXG5cXG46Z2xvYmFsKC5yZWFjdC1kYXRlcGlja2VyX19pbnB1dC1jb250YWluZXIpIHtcXG5cXHRkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcXG59XFxuXFxuOmdsb2JhbCgucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXIpIHtcXG5cXHR6LWluZGV4OiA1ICFpbXBvcnRhbnQ7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbi8vIGNzcyBiYXNlIGNvZGUsIGluamVjdGVkIGJ5IHRoZSBjc3MtbG9hZGVyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdOyAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG5cbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICByZXR1cm4gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGNvbnRlbnQsIFwifVwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTsgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblxuXG4gIGxpc3QuaSA9IGZ1bmN0aW9uIChtb2R1bGVzLCBtZWRpYVF1ZXJ5LCBkZWR1cGUpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgXCJcIl1dO1xuICAgIH1cblxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgIHZhciBpZCA9IHRoaXNbaV1bMF07XG5cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbW9kdWxlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2ldKTtcblxuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250aW51ZVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1lZGlhUXVlcnkpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhUXVlcnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsyXSA9IFwiXCIuY29uY2F0KG1lZGlhUXVlcnksIFwiIGFuZCBcIikuY29uY2F0KGl0ZW1bMl0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGxpc3Q7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSkge1xuICB2YXIgX2l0ZW0gPSBfc2xpY2VkVG9BcnJheShpdGVtLCA0KSxcbiAgICAgIGNvbnRlbnQgPSBfaXRlbVsxXSxcbiAgICAgIGNzc01hcHBpbmcgPSBfaXRlbVszXTtcblxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGlzT2xkSUUgPSBmdW5jdGlvbiBpc09sZElFKCkge1xuICB2YXIgbWVtbztcbiAgcmV0dXJuIGZ1bmN0aW9uIG1lbW9yaXplKCkge1xuICAgIGlmICh0eXBlb2YgbWVtbyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIFRlc3QgZm9yIElFIDw9IDkgYXMgcHJvcG9zZWQgYnkgQnJvd3NlcmhhY2tzXG4gICAgICAvLyBAc2VlIGh0dHA6Ly9icm93c2VyaGFja3MuY29tLyNoYWNrLWU3MWQ4NjkyZjY1MzM0MTczZmVlNzE1YzIyMmNiODA1XG4gICAgICAvLyBUZXN0cyBmb3IgZXhpc3RlbmNlIG9mIHN0YW5kYXJkIGdsb2JhbHMgaXMgdG8gYWxsb3cgc3R5bGUtbG9hZGVyXG4gICAgICAvLyB0byBvcGVyYXRlIGNvcnJlY3RseSBpbnRvIG5vbi1zdGFuZGFyZCBlbnZpcm9ubWVudHNcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIvaXNzdWVzLzE3N1xuICAgICAgbWVtbyA9IEJvb2xlYW4od2luZG93ICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFsbCAmJiAhd2luZG93LmF0b2IpO1xuICAgIH1cblxuICAgIHJldHVybiBtZW1vO1xuICB9O1xufSgpO1xuXG52YXIgZ2V0VGFyZ2V0ID0gZnVuY3Rpb24gZ2V0VGFyZ2V0KCkge1xuICB2YXIgbWVtbyA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gbWVtb3JpemUodGFyZ2V0KSB7XG4gICAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7IC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cbiAgICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgICAgc3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgc3R5bGVUYXJnZXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuICAgIH1cblxuICAgIHJldHVybiBtZW1vW3RhcmdldF07XG4gIH07XG59KCk7XG5cbnZhciBzdHlsZXNJbkRvbSA9IFtdO1xuXG5mdW5jdGlvbiBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKSB7XG4gIHZhciByZXN1bHQgPSAtMTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlc0luRG9tLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0eWxlc0luRG9tW2ldLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJlc3VsdCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucykge1xuICB2YXIgaWRDb3VudE1hcCA9IHt9O1xuICB2YXIgaWRlbnRpZmllcnMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV07XG4gICAgdmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG4gICAgdmFyIGNvdW50ID0gaWRDb3VudE1hcFtpZF0gfHwgMDtcbiAgICB2YXIgaWRlbnRpZmllciA9IFwiXCIuY29uY2F0KGlkLCBcIiBcIikuY29uY2F0KGNvdW50KTtcbiAgICBpZENvdW50TWFwW2lkXSA9IGNvdW50ICsgMTtcbiAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY3NzOiBpdGVtWzFdLFxuICAgICAgbWVkaWE6IGl0ZW1bMl0sXG4gICAgICBzb3VyY2VNYXA6IGl0ZW1bM11cbiAgICB9O1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgc3R5bGVzSW5Eb21baW5kZXhdLnJlZmVyZW5jZXMrKztcbiAgICAgIHN0eWxlc0luRG9tW2luZGV4XS51cGRhdGVyKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlc0luRG9tLnB1c2goe1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiBhZGRTdHlsZShvYmosIG9wdGlvbnMpLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG5cbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICB2YXIgYXR0cmlidXRlcyA9IG9wdGlvbnMuYXR0cmlidXRlcyB8fCB7fTtcblxuICBpZiAodHlwZW9mIGF0dHJpYnV0ZXMubm9uY2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIG5vbmNlID0gdHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSAndW5kZWZpbmVkJyA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcblxuICAgIGlmIChub25jZSkge1xuICAgICAgYXR0cmlidXRlcy5ub25jZSA9IG5vbmNlO1xuICAgIH1cbiAgfVxuXG4gIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHN0eWxlLnNldEF0dHJpYnV0ZShrZXksIGF0dHJpYnV0ZXNba2V5XSk7XG4gIH0pO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5pbnNlcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRpb25zLmluc2VydChzdHlsZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhcmdldCA9IGdldFRhcmdldChvcHRpb25zLmluc2VydCB8fCAnaGVhZCcpO1xuXG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gICAgfVxuXG4gICAgdGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoc3R5bGUucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxudmFyIHJlcGxhY2VUZXh0ID0gZnVuY3Rpb24gcmVwbGFjZVRleHQoKSB7XG4gIHZhciB0ZXh0U3RvcmUgPSBbXTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJlcGxhY2UoaW5kZXgsIHJlcGxhY2VtZW50KSB7XG4gICAgdGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50O1xuICAgIHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuICB9O1xufSgpO1xuXG5mdW5jdGlvbiBhcHBseVRvU2luZ2xldG9uVGFnKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcbiAgdmFyIGNzcyA9IHJlbW92ZSA/ICcnIDogb2JqLm1lZGlhID8gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKS5jb25jYXQob2JqLmNzcywgXCJ9XCIpIDogb2JqLmNzczsgLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKTtcbiAgICB2YXIgY2hpbGROb2RlcyA9IHN0eWxlLmNoaWxkTm9kZXM7XG5cbiAgICBpZiAoY2hpbGROb2Rlc1tpbmRleF0pIHtcbiAgICAgIHN0eWxlLnJlbW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgIHN0eWxlLmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGNzc05vZGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnKHN0eWxlLCBvcHRpb25zLCBvYmopIHtcbiAgdmFyIGNzcyA9IG9iai5jc3M7XG4gIHZhciBtZWRpYSA9IG9iai5tZWRpYTtcbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cbiAgaWYgKG1lZGlhKSB7XG4gICAgc3R5bGUuc2V0QXR0cmlidXRlKCdtZWRpYScsIG1lZGlhKTtcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoJ21lZGlhJyk7XG4gIH1cblxuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSksIFwiICovXCIpO1xuICB9IC8vIEZvciBvbGQgSUVcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG5cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGUuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGUucmVtb3ZlQ2hpbGQoc3R5bGUuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxudmFyIHNpbmdsZXRvbiA9IG51bGw7XG52YXIgc2luZ2xldG9uQ291bnRlciA9IDA7XG5cbmZ1bmN0aW9uIGFkZFN0eWxlKG9iaiwgb3B0aW9ucykge1xuICB2YXIgc3R5bGU7XG4gIHZhciB1cGRhdGU7XG4gIHZhciByZW1vdmU7XG5cbiAgaWYgKG9wdGlvbnMuc2luZ2xldG9uKSB7XG4gICAgdmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKys7XG4gICAgc3R5bGUgPSBzaW5nbGV0b24gfHwgKHNpbmdsZXRvbiA9IGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSk7XG4gICAgdXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCBmYWxzZSk7XG4gICAgcmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBzdHlsZSA9IGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgICB1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGUsIG9wdGlvbnMpO1xuXG4gICAgcmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKTtcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlKG9iaik7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZShuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlKG9iaiA9IG5ld09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZSgpO1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsgLy8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG4gIC8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2VcblxuICBpZiAoIW9wdGlvbnMuc2luZ2xldG9uICYmIHR5cGVvZiBvcHRpb25zLnNpbmdsZXRvbiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgb3B0aW9ucy5zaW5nbGV0b24gPSBpc09sZElFKCk7XG4gIH1cblxuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ld0xpc3QpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRvbVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cblxuICAgIHZhciBuZXdMYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obmV3TGlzdCwgb3B0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcblxuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHN0eWxlc0luRG9tW19pbmRleF0ucmVmZXJlbmNlcyA9PT0gMCkge1xuICAgICAgICBzdHlsZXNJbkRvbVtfaW5kZXhdLnVwZGF0ZXIoKTtcblxuICAgICAgICBzdHlsZXNJbkRvbS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrXCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5XCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mXCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzXCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5cIik7OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheVwiKTs7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheVwiKTs7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGpzLWpvZGEvY29yZVwiKTs7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHRoeC9kYXRlXCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAdGh4L21vbmV5XCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAdGh4L3l1cC10eXBlc1wiKTs7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZGVidWdcIik7OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImV2ZW50ZW1pdHRlcjNcIik7OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImZsYXRcIik7OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImZvcm1pa1wiKTs7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaW5wdXRtYXNrXCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJqcy1tb25leVwiKTs7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoL2dldFwiKTs7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoL3Byb3BlcnR5XCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJsb2Rhc2gvdW5pcVwiKTs7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRhdGVwaWNrZXJcIik7OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXJvdXRlci1kb21cIik7OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXRhYmxlXCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtZGV2LXJ1bnRpbWVcIik7OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInNlbWFudGljLXVpLXJlYWN0XCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1c2UtZGVlcC1jb21wYXJlLWVmZmVjdFwiKTs7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIERhdGVcbmV4cG9ydCB0eXBlIHtEYXRlUGlja2VyfSBmcm9tICcuL2RhdGUvRGF0ZVBpY2tlcic7XG5leHBvcnQge0xvY2FsRGF0ZVBpY2tlcn0gZnJvbSAnLi9kYXRlL0xvY2FsRGF0ZVBpY2tlcic7XG5leHBvcnQgdHlwZSB7TG9jYWxEYXRlUGlja2VyUHJvcHN9IGZyb20gJy4vZGF0ZS9Mb2NhbERhdGVQaWNrZXInO1xuZXhwb3J0IHtMb2NhbE1vbnRoU2VsZWN0fSBmcm9tICcuL2RhdGUvTG9jYWxNb250aFNlbGVjdCc7XG5leHBvcnQgdHlwZSB7TG9jYWxNb250aFNlbGVjdFByb3BzfSBmcm9tICcuL2RhdGUvTG9jYWxNb250aFNlbGVjdCc7XG5leHBvcnQge0xvY2FsVGltZVBpY2tlcn0gZnJvbSAnLi9kYXRlL0xvY2FsVGltZVBpY2tlcic7XG5leHBvcnQgdHlwZSB7TG9jYWxUaW1lUGlja2VyUHJvcHN9IGZyb20gJy4vZGF0ZS9Mb2NhbFRpbWVQaWNrZXInO1xuZXhwb3J0IHtNb250aERheVBpY2tlcn0gZnJvbSAnLi9kYXRlL01vbnRoRGF5UGlja2VyJztcbmV4cG9ydCB0eXBlIHtNb250aERheVBpY2tlclByb3BzfSBmcm9tICcuL2RhdGUvTW9udGhEYXlQaWNrZXInO1xuZXhwb3J0IHtNb250aFllYXJQaWNrZXJ9IGZyb20gJy4vZGF0ZS9Nb250aFllYXJQaWNrZXInO1xuZXhwb3J0IHR5cGUge01vbnRoWWVhclBpY2tlclByb3BzfSBmcm9tICcuL2RhdGUvTW9udGhZZWFyUGlja2VyJztcbmV4cG9ydCB7WWVhclNlbGVjdH0gZnJvbSAnLi9kYXRlL1llYXJTZWxlY3QnO1xuZXhwb3J0IHR5cGUge1llYXJTZWxlY3RQcm9wc30gZnJvbSAnLi9kYXRlL1llYXJTZWxlY3QnO1xuXG4vLyBGb3JtXG5leHBvcnQge3VzZVRGb3JtLCBURm9ybX0gZnJvbSAnLi9mb3JtL1RGb3JtJztcbmV4cG9ydCB0eXBlIHtURm9ybVByb3BzfSBmcm9tICcuL2Zvcm0vVEZvcm0nO1xuXG4vLyBJbnB1dHNcbmV4cG9ydCB7TWFza2VkSW5wdXR9IGZyb20gJy4vaW5wdXRzL01hc2tlZElucHV0JztcbmV4cG9ydCB0eXBlIHtNYXNrZWRJbnB1dFByb3BzfSBmcm9tICcuL2lucHV0cy9NYXNrZWRJbnB1dCc7XG5leHBvcnQge1JhZGlvR3JvdXB9IGZyb20gJy4vaW5wdXRzL1JhZGlvR3JvdXAnO1xuZXhwb3J0IHR5cGUge1JhZGlvR3JvdXBQcm9wc30gZnJvbSAnLi9pbnB1dHMvUmFkaW9Hcm91cCc7XG5leHBvcnQge1NjcmlwdGVsLCB3aXRoU2NyaXB0ZWx9IGZyb20gJy4vaW5wdXRzL1NjcmlwdGVsJztcbmV4cG9ydCB0eXBlIHtTY3JpcHRlbFByb3BzLCBTY3JpcHRlbE1lc3NhZ2VDbGFzcywgU2NyaXB0ZWxQZW5TdHlsZX0gZnJvbSAnLi9pbnB1dHMvU2NyaXB0ZWwnO1xuZXhwb3J0IHtTY3JpcHRlbElucHV0fSBmcm9tICcuL2lucHV0cy9TY3JpcHRlbElucHV0JztcbmV4cG9ydCB0eXBlIHtTY3JpcHRlbElucHV0UHJvcHN9IGZyb20gJy4vaW5wdXRzL1NjcmlwdGVsSW5wdXQnO1xuZXhwb3J0IHtQaG9uZUlucHV0fSBmcm9tICcuL2lucHV0cy9QaG9uZUlucHV0JztcbmV4cG9ydCB0eXBlIHtQaG9uZUlucHV0UHJvcHN9IGZyb20gJy4vaW5wdXRzL1Bob25lSW5wdXQnO1xuZXhwb3J0IHtDcmVkaXRDYXJkSW5wdXR9IGZyb20gJy4vaW5wdXRzL0NyZWRpdENhcmRJbnB1dCc7XG5leHBvcnQgdHlwZSB7Q3JlZGl0Q2FyZElucHV0VHlwZX0gZnJvbSAnLi9pbnB1dHMvQ3JlZGl0Q2FyZElucHV0JztcbmV4cG9ydCB7U2luSW5wdXR9IGZyb20gJy4vaW5wdXRzL1NpbklucHV0JztcbmV4cG9ydCB0eXBlIHtTaW5JbnB1dFByb3BzfSBmcm9tICcuL2lucHV0cy9TaW5JbnB1dCc7XG5cbi8vIFRhYmxlXG5leHBvcnQge2FkZFJvd09uVGFiLCBNb25leUVkaXRDZWxsLCBTdHJpbmdFZGl0Q2VsbCwgTW9uZXlTdW1Gb290ZXIsIE1vbmV5Q2VsbCwgVGFibGVJbnB1dCwgSG92ZXJDZWxsLCBEcm9wZG93bkNlbGx9IGZyb20gJy4vaW5wdXRzL1RhYmxlSW5wdXQnO1xuZXhwb3J0IHR5cGUge0FkZFJvd09uVGFiSWZ9IGZyb20gJy4vaW5wdXRzL1RhYmxlSW5wdXQnO1xuXG4vLyBNb25leVxuZXhwb3J0IHtNb25leUlucHV0fSBmcm9tICcuL21vbmV5L01vbmV5SW5wdXQnO1xuZXhwb3J0IHR5cGUge01vbmV5SW5wdXRQcm9wc30gZnJvbSAnLi9tb25leS9Nb25leUlucHV0JztcbmV4cG9ydCB7TW9uZXlDdXJyZW5jeUlucHV0fSBmcm9tICcuL21vbmV5L01vbmV5Q3VycmVuY3lJbnB1dCc7XG5leHBvcnQgdHlwZSB7TW9uZXlDdXJyZW5jeUlucHV0UHJvcHN9IGZyb20gJy4vbW9uZXkvTW9uZXlDdXJyZW5jeUlucHV0JztcblxuLy8gU3RlcFxuZXhwb3J0IHtGb3JtU3RlcCwgU3RlcFByb3ZpZGVyLCB1c2VTdGVwLCBTdGVwfSBmcm9tICcuL3N0ZXAnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
5482
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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Ozs7VUNBQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7OztXQ3RCQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsaUNBQWlDLFdBQVc7V0FDNUM7V0FDQTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHlDQUF5Qyx3Q0FBd0M7V0FDakY7V0FDQTtXQUNBOzs7OztXQ1BBOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHVEQUF1RCxpQkFBaUI7V0FDeEU7V0FDQSxnREFBZ0QsYUFBYTtXQUM3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ05BO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBR0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9kYXRlL0RhdGVQaWNrZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vZGF0ZS9Mb2NhbERhdGVQaWNrZXIvTG9jYWxEYXRlUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRlL0xvY2FsRGF0ZVBpY2tlci9NYXNrZWREYXRlSW5wdXQudHN4Iiwid2VicGFjazovLy8uL2RhdGUvTG9jYWxEYXRlUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovLy8uL2RhdGUvTG9jYWxNb250aFNlbGVjdC9Mb2NhbE1vbnRoU2VsZWN0LnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRlL0xvY2FsTW9udGhTZWxlY3QvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vZGF0ZS9Mb2NhbFRpbWVQaWNrZXIvTG9jYWxUaW1lUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRlL0xvY2FsVGltZVBpY2tlci9NYXNrZWRUaW1lSW5wdXQudHN4Iiwid2VicGFjazovLy8uL2RhdGUvTG9jYWxUaW1lUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovLy8uL2RhdGUvTW9udGhEYXlQaWNrZXIvTW9udGhEYXlQaWNrZXIudHN4Iiwid2VicGFjazovLy8uL2RhdGUvTW9udGhEYXlQaWNrZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vZGF0ZS9Nb250aFllYXJQaWNrZXIvTW9udGhZZWFyUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRlL01vbnRoWWVhclBpY2tlci9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9kYXRlL1llYXJTZWxlY3QvWWVhclNlbGVjdC50c3giLCJ3ZWJwYWNrOi8vLy4vZGF0ZS9ZZWFyU2VsZWN0L2luZGV4LnRzIiwid2VicGFjazovLy8uL2Zvcm0vVEZvcm0vVEZvcm0udHN4Iiwid2VicGFjazovLy8uL2Zvcm0vVEZvcm0vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vZm9ybS9URm9ybS91c2VURm9ybS50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL0NyZWRpdENhcmRJbnB1dC9DcmVkaXRDYXJkSW5wdXQudHN4Iiwid2VicGFjazovLy8uL2lucHV0cy9DcmVkaXRDYXJkSW5wdXQvQ3JlZGl0Q2FyZE51bWJlcklucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvQ3JlZGl0Q2FyZElucHV0L2luZGV4LnRzIiwid2VicGFjazovLy8uL2lucHV0cy9NYXNrZWRJbnB1dC9NYXNrZWRJbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL01hc2tlZElucHV0L2luZGV4LnRzIiwid2VicGFjazovLy8uL2lucHV0cy9NYXNrZWRJbnB1dC91c2VNYXNrZWRJbnB1dC50cyIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvUGhvbmVJbnB1dC9QaG9uZUlucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvUGhvbmVJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvUmFkaW9Hcm91cC9SYWRpb0dyb3VwLnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvUmFkaW9Hcm91cC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvU2NyaXB0ZWwvU2NyaXB0ZWwudHN4Iiwid2VicGFjazovLy8uL2lucHV0cy9TY3JpcHRlbC9TY3JpcHRlbENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1NjcmlwdGVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL2lucHV0cy9TY3JpcHRlbC9zY3JpcHRlbC9lbnVtcy50cyIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvU2NyaXB0ZWwvc2NyaXB0ZWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1NjcmlwdGVsL3dpdGhTY3JpcHRlbC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1NjcmlwdGVsSW5wdXQvU2NyaXB0ZWxJbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1NjcmlwdGVsSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1NpbklucHV0L1NpbklucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvU2luSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1RhYmxlSW5wdXQvRHJvcGRvd25DZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvVGFibGVJbnB1dC9Ib3ZlckNlbGwudHN4Iiwid2VicGFjazovLy8uL2lucHV0cy9UYWJsZUlucHV0L01vbmV5Q2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1RhYmxlSW5wdXQvTW9uZXlFZGl0Q2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1RhYmxlSW5wdXQvTW9uZXlTdW1Gb290ZXIudHN4Iiwid2VicGFjazovLy8uL2lucHV0cy9UYWJsZUlucHV0L1N0cmluZ0VkaXRDZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvVGFibGVJbnB1dC9UYWJsZUlucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvVGFibGVJbnB1dC9hZGRSb3dPblRhYi50cyIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvVGFibGVJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9tb25leS9Nb25leUN1cnJlbmN5SW5wdXQvTW9uZXlDdXJyZW5jeUlucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9tb25leS9Nb25leUN1cnJlbmN5SW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vbW9uZXkvTW9uZXlJbnB1dC9Nb25leUlucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9tb25leS9Nb25leUlucHV0L2luZGV4LnRzIiwid2VicGFjazovLy8uL21vbmV5L3VzZU1vbmV5SW5wdXQudHMiLCJ3ZWJwYWNrOi8vLy4vc3RlcC9Gb3JtU3RlcC50c3giLCJ3ZWJwYWNrOi8vLy4vc3RlcC9TdGVwLnRzeCIsIndlYnBhY2s6Ly8vLi9zdGVwL1N0ZXBQcm92aWRlci50c3giLCJ3ZWJwYWNrOi8vLy4vc3RlcC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zdGVwL3N0ZXBDb250ZXh0LnRzIiwid2VicGFjazovLy8uL3N0ZXAvdXNlU3RlcC50cyIsIndlYnBhY2s6Ly8vLi9kYXRlL0RhdGVQaWNrZXIvc3R5bGVzLmNzcz8xM2I3Iiwid2VicGFjazovLy8uL2lucHV0cy9DcmVkaXRDYXJkSW5wdXQvc3R5bGVzLmNzcz9mZTFkIiwid2VicGFjazovLy8uL2RhdGUvRGF0ZVBpY2tlci9zdHlsZXMuY3NzIiwid2VicGFjazovLy8uL2lucHV0cy9DcmVkaXRDYXJkSW5wdXQvc3R5bGVzLmNzcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2tcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2ZcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVyblwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXlcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJAanMtam9kYS9jb3JlXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiQHRoeC9kYXRlXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiQHRoeC9tb25leVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcImNyZWRpdC1jYXJkLXR5cGVcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJkZWJ1Z1wiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcImV2ZW50ZW1pdHRlcjNcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJmbGF0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiZm9ybWlrXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiaW5wdXRtYXNrXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwianMtbW9uZXlcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJsb2Rhc2gvZ2V0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwibG9kYXNoL3Byb3BlcnR5XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwibG9kYXNoL3VuaXFcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJsdWhuXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1jcmVkaXQtY2FyZHNcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1jcmVkaXQtY2FyZHMvZXMvc3R5bGVzLWNvbXBpbGVkLmNzc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0LWRhdGVwaWNrZXJcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1yb3V0ZXItZG9tXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3QtdGFibGVcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC9qc3gtZGV2LXJ1bnRpbWVcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJzZW1hbnRpYy11aS1yZWFjdFwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcInNvY2lhbC1pbnN1cmFuY2UtbnVtYmVyXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwidXNlLWRlZXAtY29tcGFyZS1lZmZlY3RcIiIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vLy4vaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERhdGVQaWNrZXIgZnJvbSAncmVhY3QtZGF0ZXBpY2tlcic7XG5pbXBvcnQgJy4vc3R5bGVzLmNzcyc7XG5cbmV4cG9ydCB7RGF0ZVBpY2tlcn07XG4iLCJpbXBvcnQgdHlwZSB7TG9jYWxEYXRlfSBmcm9tICdAanMtam9kYS9jb3JlJztcbmltcG9ydCB7dG9EYXRlLCB0b0xvY2FsRGF0ZX0gZnJvbSAnQHRoeC9kYXRlJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge1JlYWN0RGF0ZVBpY2tlclByb3BzfSBmcm9tICdyZWFjdC1kYXRlcGlja2VyJztcbmltcG9ydCB0eXBlIHtJbnB1dFByb3BzfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQge0RhdGVQaWNrZXJ9IGZyb20gJy4uL0RhdGVQaWNrZXIvaW5kZXgnO1xuaW1wb3J0IHtNYXNrZWREYXRlSW5wdXR9IGZyb20gJy4vTWFza2VkRGF0ZUlucHV0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZGF0ZS5Mb2NhbERhdGVQaWNrZXInKTtcblxuaW50ZXJmYWNlIElMb2NhbERhdGVQaWNrZXIge1xuXHR2YWx1ZT86IExvY2FsRGF0ZSB8IG51bWJlciB8IG51bGw7XG5cdG9uQ2hhbmdlPzogKHZhbHVlOiBMb2NhbERhdGUgfCBudWxsKSA9PiB2b2lkO1xuXHRvbkNoYW5nZVJhdz86ICgpID0+IHZvaWQ7XG5cdG1pbkRhdGU/OiBMb2NhbERhdGU7XG5cdG1heERhdGU/OiBMb2NhbERhdGU7XG59XG5cbnR5cGUgSW5wdXRQcm9wc09taXR0ZWQgPSBPbWl0PElucHV0UHJvcHMsICdvbkNoYW5nZSc+O1xudHlwZSBSZWFjdERhdGVQaWNrZXJQcm9wc09taXR0ZWQgPSBPbWl0PE9taXQ8UmVhY3REYXRlUGlja2VyUHJvcHMsICd2YWx1ZSc+LCAnb25DaGFuZ2UnIHwgJ21pbkRhdGUnIHwgJ21heERhdGUnPjtcbmV4cG9ydCB0eXBlIExvY2FsRGF0ZVBpY2tlclByb3BzID0gSUxvY2FsRGF0ZVBpY2tlciAmIElucHV0UHJvcHNPbWl0dGVkICYgUmVhY3REYXRlUGlja2VyUHJvcHNPbWl0dGVkO1xuXG5leHBvcnQgZnVuY3Rpb24gTG9jYWxEYXRlUGlja2VyKHByb3BzOiBMb2NhbERhdGVQaWNrZXJQcm9wcyk6IEpTWC5FbGVtZW50IHtcblx0Y29uc3Qge1xuXHRcdG1pbkRhdGUsXG5cdFx0bWF4RGF0ZSxcblx0XHR2YWx1ZSxcblx0XHRvbkNoYW5nZSxcblx0XHRvbkJsdXIsXG5cdFx0YXMsXG5cdFx0YWN0aW9uLFxuXHRcdGFjdGlvblBvc2l0aW9uLFxuXHRcdGNsYXNzTmFtZSxcblx0XHRlcnJvcixcblx0XHRmbHVpZCxcblx0XHRmb2N1cyxcblx0XHRpY29uLFxuXHRcdGljb25Qb3NpdGlvbixcblx0XHRpbnZlcnRlZCxcblx0XHRsYWJlbCxcblx0XHRsYWJlbFBvc2l0aW9uLFxuXHRcdGxvYWRpbmcsXG5cdFx0c2l6ZSxcblx0XHR0YWJJbmRleCxcblx0XHR0cmFuc3BhcmVudCxcblx0XHQuLi5yZXN0XG5cdH0gPSBwcm9wcztcblxuXHRjb25zdCBzZWxlY3RlZCA9IHZhbHVlID8gdG9EYXRlKHZhbHVlKSA6IG51bGw7XG5cblx0Y29uc3QgaW5wdXRQcm9wcyA9IHtcblx0XHRhcyxcblx0XHRhY3Rpb24sXG5cdFx0YWN0aW9uUG9zaXRpb24sXG5cdFx0Y2xhc3NOYW1lLFxuXHRcdGVycm9yLFxuXHRcdGZsdWlkLFxuXHRcdGZvY3VzLFxuXHRcdGljb24sXG5cdFx0aWNvblBvc2l0aW9uLFxuXHRcdGludmVydGVkLFxuXHRcdGxhYmVsLFxuXHRcdGxhYmVsUG9zaXRpb24sXG5cdFx0bG9hZGluZyxcblx0XHRzaXplLFxuXHRcdHRhYkluZGV4LFxuXHRcdHRyYW5zcGFyZW50LFxuXHR9O1xuXG5cdHJldHVybiAoXG5cdFx0PERhdGVQaWNrZXJcblx0XHRcdHsuLi5yZXN0fVxuXHRcdFx0c2VsZWN0ZWQ9e3NlbGVjdGVkfVxuXHRcdFx0b25DaGFuZ2U9e2RhdGUgPT4ge1xuXHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKGRhdGUgPyB0b0xvY2FsRGF0ZShkYXRlKSA6IG51bGwpO1xuXHRcdFx0fX1cblx0XHRcdG9uQmx1cj17b25CbHVyfVxuXHRcdFx0Y3VzdG9tSW5wdXQ9ezxNYXNrZWREYXRlSW5wdXQgey4uLmlucHV0UHJvcHN9IG9uQmx1cj17b25CbHVyfSAvPn1cblx0XHRcdG1pbkRhdGU9e21pbkRhdGUgPyB0b0RhdGUobWluRGF0ZSkgOiBudWxsfVxuXHRcdFx0bWF4RGF0ZT17bWF4RGF0ZSA/IHRvRGF0ZShtYXhEYXRlKSA6IG51bGx9XG5cdFx0Lz5cblx0KTtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QsIHtmb3J3YXJkUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge01hc2tlZElucHV0LCBNYXNrZWRJbnB1dFByb3BzfSBmcm9tICcuLi8uLi9pbnB1dHMvTWFza2VkSW5wdXQnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5kYXRlLkxvY2FsRGF0ZVBpY2tlci5NYXNrZWREYXRlSW5wdXQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBNYXNrZWREYXRlSW5wdXRWYWx1ZSB7XG5cdHRhcmdldDoge1xuXHRcdHZhbHVlOiBzdHJpbmc7XG5cdH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFza2VkRGF0ZUlucHV0UHJvcHMge1xuXHRuYW1lPzogc3RyaW5nO1xuXHRvbkNoYW5nZT86ICh2YWx1ZTogTWFza2VkRGF0ZUlucHV0VmFsdWUpID0+IHZvaWQ7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmZ1bmN0aW9uIE1hc2tlZERhdGVJbnB1dElubmVyKHByb3BzOiBNYXNrZWREYXRlSW5wdXRQcm9wcyAmIE9taXQ8TWFza2VkSW5wdXRQcm9wcywgJ29uQ2hhbmdlJz4sIHJlZjogYW55KSB7XG5cdGNvbnN0IHtvbkNoYW5nZSwgbmFtZSwgLi4ucmVzdH0gPSBwcm9wcztcblxuXHRyZXR1cm4gKFxuXHRcdDxNYXNrZWRJbnB1dFxuXHRcdFx0ey4uLnJlc3R9XG5cdFx0XHRuYW1lPXtuYW1lfVxuXHRcdFx0bWFzaz17e2FsaWFzOiAnZGF0ZXRpbWUnLCBpbnB1dEZvcm1hdDogJ21tL2RkL3l5eXknfX1cblx0XHRcdG9uQ2hhbmdlPXt2YWx1ZSA9PiB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2Uoe3RhcmdldDoge3ZhbHVlOiB2YWx1ZSB8fCAnJ319KTtcblx0XHRcdH19XG5cdFx0Lz5cblx0KTtcbn1cblxuZXhwb3J0IGNvbnN0IE1hc2tlZERhdGVJbnB1dCA9IGZvcndhcmRSZWYoTWFza2VkRGF0ZUlucHV0SW5uZXIpO1xuIiwiZXhwb3J0IHtMb2NhbERhdGVQaWNrZXJ9IGZyb20gJy4vTG9jYWxEYXRlUGlja2VyJztcbmV4cG9ydCB0eXBlIHtMb2NhbERhdGVQaWNrZXJQcm9wc30gZnJvbSAnLi9Mb2NhbERhdGVQaWNrZXInO1xuIiwiaW1wb3J0IHtMb2NhbERhdGV9IGZyb20gJ0Bqcy1qb2RhL2NvcmUnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1NlbGVjdCwgU2VsZWN0UHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZGF0ZS5Mb2NhbE1vbnRoU2VsZWN0Jyk7XG5cbmNvbnN0IG1vbnRoT3B0aW9ucyA9IFtcblx0e3RleHQ6ICdKYW51YXJ5JywgdmFsdWU6IDEsIGtleTogMX0sXG5cdHt0ZXh0OiAnRmVicnVhcnknLCB2YWx1ZTogMiwga2V5OiAyfSxcblx0e3RleHQ6ICdNYXJjaCcsIHZhbHVlOiAzLCBrZXk6IDN9LFxuXHR7dGV4dDogJ0FwcmlsJywgdmFsdWU6IDQsIGtleTogNH0sXG5cdHt0ZXh0OiAnTWF5JywgdmFsdWU6IDUsIGtleTogNX0sXG5cdHt0ZXh0OiAnSnVuZScsIHZhbHVlOiA2LCBrZXk6IDZ9LFxuXHR7dGV4dDogJ0p1bHknLCB2YWx1ZTogNywga2V5OiA3fSxcblx0e3RleHQ6ICdBdWd1c3QnLCB2YWx1ZTogOCwga2V5OiA4fSxcblx0e3RleHQ6ICdTZXB0ZW1iZXInLCB2YWx1ZTogOSwga2V5OiA5fSxcblx0e3RleHQ6ICdPY3RvYmVyJywgdmFsdWU6IDEwLCBrZXk6IDEwfSxcblx0e3RleHQ6ICdOb3ZlbWJlcicsIHZhbHVlOiAxMSwga2V5OiAxMX0sXG5cdHt0ZXh0OiAnRGVjZW1iZXInLCB2YWx1ZTogMTIsIGtleTogMTJ9LFxuXTtcblxuaW50ZXJmYWNlIElMb2NhbE1vbnRoU2VsZWN0UHJvcHMge1xuXHRvbkNoYW5nZT86ICh2YWx1ZTogTG9jYWxEYXRlIHwgbnVsbCkgPT4gdm9pZDtcblx0dmFsdWU/OiBMb2NhbERhdGUgfCBudWxsO1xuXHR5ZWFyPzogbnVtYmVyO1xuXHRoYW5kbGVCbHVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIExvY2FsTW9udGhTZWxlY3RQcm9wcyA9IElMb2NhbE1vbnRoU2VsZWN0UHJvcHMgJiBPbWl0PFNlbGVjdFByb3BzLCAnb3B0aW9ucyc+O1xuXG5leHBvcnQgZnVuY3Rpb24gTG9jYWxNb250aFNlbGVjdChwcm9wczogTG9jYWxNb250aFNlbGVjdFByb3BzKTogSlNYLkVsZW1lbnQge1xuXHRjb25zdCB7dmFsdWUsIG9uQ2hhbmdlLCB5ZWFyLCBoYW5kbGVCbHVyLCAuLi5yZXN0fSA9IHByb3BzO1xuXG5cdGNvbnN0IHRoZVllYXIgPSB5ZWFyIHx8IExvY2FsRGF0ZS5ub3coKS55ZWFyKCk7XG5cblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0XG5cdFx0XHRwbGFjZWhvbGRlcj1cIlNlbGVjdCBNb250aFwiXG5cdFx0XHRvcHRpb25zPXttb250aE9wdGlvbnN9XG5cdFx0XHR2YWx1ZT17dmFsdWUgPyB2YWx1ZS5tb250aFZhbHVlKCkgOiAnJ31cblx0XHRcdG9uQ2hhbmdlPXsoZXYsIHYpID0+IHtcblx0XHRcdFx0aWYgKG9uQ2hhbmdlKSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiB2LnZhbHVlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRcdFx0b25DaGFuZ2UodiA/IExvY2FsRGF0ZS5vZih0aGVZZWFyLCB2LnZhbHVlLCAxKSA6IG51bGwpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvbkNoYW5nZShudWxsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH19XG5cdFx0XHRvbkJsdXI9e2hhbmRsZUJsdXJ9XG5cdFx0XHR7Li4ucmVzdH1cblx0XHQvPlxuXHQpO1xufVxuIiwiZXhwb3J0IHtMb2NhbE1vbnRoU2VsZWN0fSBmcm9tICcuL0xvY2FsTW9udGhTZWxlY3QnO1xuZXhwb3J0IHR5cGUge0xvY2FsTW9udGhTZWxlY3RQcm9wc30gZnJvbSAnLi9Mb2NhbE1vbnRoU2VsZWN0JztcbiIsImltcG9ydCB7TG9jYWxUaW1lfSBmcm9tICdAanMtam9kYS9jb3JlJztcbmltcG9ydCB7dG9EYXRlLCB0b0xvY2FsVGltZX0gZnJvbSAnQHRoeC9kYXRlJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge1JlYWN0RGF0ZVBpY2tlclByb3BzfSBmcm9tICdyZWFjdC1kYXRlcGlja2VyJztcbmltcG9ydCB0eXBlIHtJbnB1dFByb3BzfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQge0RhdGVQaWNrZXJ9IGZyb20gJy4uL0RhdGVQaWNrZXIvaW5kZXgnO1xuaW1wb3J0IHtNYXNrZWRUaW1lSW5wdXR9IGZyb20gJy4vTWFza2VkVGltZUlucHV0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZGF0ZS5Mb2NhbFRpbWVQaWNrZXInKTtcblxuaW50ZXJmYWNlIElMb2NhbFRpbWVQaWNrZXIge1xuXHR2YWx1ZT86IExvY2FsVGltZSB8IG51bWJlciB8IG51bGw7XG5cdG9uQ2hhbmdlPzogKHZhbHVlOiBMb2NhbFRpbWUgfCBudWxsKSA9PiB2b2lkO1xuXHRvbkNoYW5nZVJhdz86ICgpID0+IHZvaWQ7XG59XG5cbnR5cGUgSW5wdXRQcm9wc09taXR0ZWQgPSBPbWl0PElucHV0UHJvcHMsICdvbkNoYW5nZSc+O1xudHlwZSBSZWFjdERhdGVQaWNrZXJQcm9wc09taXR0ZWQgPSBPbWl0PE9taXQ8UmVhY3REYXRlUGlja2VyUHJvcHMsICd2YWx1ZSc+LCAnb25DaGFuZ2UnPjtcbmV4cG9ydCB0eXBlIExvY2FsVGltZVBpY2tlclByb3BzID0gSUxvY2FsVGltZVBpY2tlciAmIElucHV0UHJvcHNPbWl0dGVkICYgUmVhY3REYXRlUGlja2VyUHJvcHNPbWl0dGVkO1xuXG5leHBvcnQgZnVuY3Rpb24gTG9jYWxUaW1lUGlja2VyKHByb3BzOiBMb2NhbFRpbWVQaWNrZXJQcm9wcyk6IEpTWC5FbGVtZW50IHtcblx0Y29uc3Qge1xuXHRcdHZhbHVlLFxuXHRcdG9uQ2hhbmdlLFxuXHRcdGFzLFxuXHRcdGFjdGlvbixcblx0XHRhY3Rpb25Qb3NpdGlvbixcblx0XHRjbGFzc05hbWUsXG5cdFx0ZGlzYWJsZWQsXG5cdFx0ZXJyb3IsXG5cdFx0Zmx1aWQsXG5cdFx0Zm9jdXMsXG5cdFx0aWNvbixcblx0XHRpY29uUG9zaXRpb24sXG5cdFx0aW52ZXJ0ZWQsXG5cdFx0bGFiZWwsXG5cdFx0bGFiZWxQb3NpdGlvbixcblx0XHRsb2FkaW5nLFxuXHRcdHNpemUsXG5cdFx0dGFiSW5kZXgsXG5cdFx0dHJhbnNwYXJlbnQsXG5cdFx0Li4ucmVzdFxuXHR9ID0gcHJvcHM7XG5cblx0bGV0IHNlbGVjdGVkO1xuXHRpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgc2VsZWN0ZWQgPSB0b0RhdGUoTG9jYWxUaW1lLm9mU2Vjb25kT2ZEYXkodmFsdWUpKTtcblx0ZWxzZSBzZWxlY3RlZCA9IHZhbHVlID8gdG9EYXRlKHZhbHVlKSA6IG51bGw7XG5cblx0Y29uc3QgaW5wdXRQcm9wcyA9IHtcblx0XHRhcyxcblx0XHRhY3Rpb24sXG5cdFx0YWN0aW9uUG9zaXRpb24sXG5cdFx0Y2xhc3NOYW1lLFxuXHRcdGRpc2FibGVkLFxuXHRcdGVycm9yLFxuXHRcdGZsdWlkLFxuXHRcdGZvY3VzLFxuXHRcdGljb24sXG5cdFx0aWNvblBvc2l0aW9uLFxuXHRcdGludmVydGVkLFxuXHRcdGxhYmVsLFxuXHRcdGxhYmVsUG9zaXRpb24sXG5cdFx0bG9hZGluZyxcblx0XHRzaXplLFxuXHRcdHRhYkluZGV4LFxuXHRcdHRyYW5zcGFyZW50LFxuXHR9O1xuXG5cdHJldHVybiAoXG5cdFx0PERhdGVQaWNrZXJcblx0XHRcdHsuLi5yZXN0fVxuXHRcdFx0c2VsZWN0ZWQ9e3NlbGVjdGVkfVxuXHRcdFx0b25DaGFuZ2U9e2RhdGUgPT4ge1xuXHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKGRhdGUgPyB0b0xvY2FsVGltZShkYXRlKSA6IG51bGwpO1xuXHRcdFx0fX1cblx0XHRcdHNob3dUaW1lU2VsZWN0XG5cdFx0XHRzaG93VGltZVNlbGVjdE9ubHlcblx0XHRcdHRpbWVJbnRlcnZhbHM9ezE1fVxuXHRcdFx0dGltZUNhcHRpb249XCJUaW1lXCJcblx0XHRcdGRhdGVGb3JtYXQ9XCJoaDptbSBhYVwiXG5cdFx0XHRjdXN0b21JbnB1dD17PE1hc2tlZFRpbWVJbnB1dCB7Li4uaW5wdXRQcm9wc30gLz59XG5cdFx0Lz5cblx0KTtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QsIHtmb3J3YXJkUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge01hc2tlZElucHV0LCBNYXNrZWRJbnB1dFByb3BzfSBmcm9tICcuLi8uLi9pbnB1dHMvTWFza2VkSW5wdXQnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5kYXRlLkxvY2FsVGltZVBpY2tlci5NYXNrZWRUaW1lSW5wdXQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBNYXNrZWRUaW1lSW5wdXRWYWx1ZSB7XG5cdHRhcmdldDoge1xuXHRcdHZhbHVlOiBzdHJpbmc7XG5cdH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFza2VkVGltZUlucHV0UHJvcHMge1xuXHRvbkNoYW5nZT86ICh2YWx1ZTogTWFza2VkVGltZUlucHV0VmFsdWUpID0+IHZvaWQ7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmZ1bmN0aW9uIE1hc2tlZFRpbWVJbnB1dElubmVyKHByb3BzOiBNYXNrZWRUaW1lSW5wdXRQcm9wcyAmIE9taXQ8TWFza2VkSW5wdXRQcm9wcywgJ29uQ2hhbmdlJz4sIHJlZjogYW55KSB7XG5cdGNvbnN0IHtvbkNoYW5nZSwgLi4ucmVzdH0gPSBwcm9wcztcblxuXHRyZXR1cm4gKFxuXHRcdDxNYXNrZWRJbnB1dFxuXHRcdFx0bWFzaz17e2FsaWFzOiAnZGF0ZXRpbWUnLCBpbnB1dEZvcm1hdDogJ2hoOk1NIFRUJ319XG5cdFx0XHRvbkNoYW5nZT17dmFsdWUgPT4ge1xuXHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKHt0YXJnZXQ6IHt2YWx1ZTogdmFsdWUgfHwgJyd9fSk7XG5cdFx0XHR9fVxuXHRcdFx0ey4uLnJlc3R9XG5cdFx0Lz5cblx0KTtcbn1cblxuZXhwb3J0IGNvbnN0IE1hc2tlZFRpbWVJbnB1dCA9IGZvcndhcmRSZWYoTWFza2VkVGltZUlucHV0SW5uZXIpO1xuIiwiZXhwb3J0IHtMb2NhbFRpbWVQaWNrZXJ9IGZyb20gJy4vTG9jYWxUaW1lUGlja2VyJztcbmV4cG9ydCB0eXBlIHtMb2NhbFRpbWVQaWNrZXJQcm9wc30gZnJvbSAnLi9Mb2NhbFRpbWVQaWNrZXInO1xuIiwiaW1wb3J0IHR5cGUge0xvY2FsRGF0ZX0gZnJvbSAnQGpzLWpvZGEvY29yZSc7XG5pbXBvcnQge3RvRGF0ZSwgdG9Mb2NhbERhdGV9IGZyb20gJ0B0aHgvZGF0ZSc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtSZWFjdERhdGVQaWNrZXJQcm9wc30gZnJvbSAncmVhY3QtZGF0ZXBpY2tlcic7XG5pbXBvcnQge0lucHV0UHJvcHMsIElucHV0fSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQge0RhdGVQaWNrZXJ9IGZyb20gJy4uL0RhdGVQaWNrZXIvaW5kZXgnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5kYXRlLk1vbnRoRGF5UGlja2VyJyk7XG5cbmNvbnN0IG1vbnRocyA9IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddO1xuXG5pbnRlcmZhY2UgTW9udGhEYXlIZWFkZXJQcm9wcyB7XG5cdGRhdGU6IERhdGU7XG5cdGNoYW5nZVllYXIoeWVhcjogbnVtYmVyKTogdm9pZDtcblx0Y2hhbmdlTW9udGgobW9udGg6IG51bWJlcik6IHZvaWQ7XG5cdGRlY3JlYXNlTW9udGgoKTogdm9pZDtcblx0aW5jcmVhc2VNb250aCgpOiB2b2lkO1xuXHRwcmV2TW9udGhCdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcblx0bmV4dE1vbnRoQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW47XG5cdGRlY3JlYXNlWWVhcigpOiB2b2lkO1xuXHRpbmNyZWFzZVllYXIoKTogdm9pZDtcblx0cHJldlllYXJCdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcblx0bmV4dFllYXJCdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gTW9udGhEYXlIZWFkZXIocHJvcHM6IE1vbnRoRGF5SGVhZGVyUHJvcHMpIHtcblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJyZWFjdC1kYXRlcGlja2VyX19jdXJyZW50LW1vbnRoXCI+e21vbnRoc1twcm9wcy5kYXRlLmdldE1vbnRoKCldfTwvZGl2PlxuXHRcdFx0PGJ1dHRvblxuXHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0Y2xhc3NOYW1lPVwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbiByZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1wcmV2aW91c1wiXG5cdFx0XHRcdGFyaWEtbGFiZWw9XCJQcmV2aW91cyBNb250aFwiXG5cdFx0XHRcdG9uQ2xpY2s9e3Byb3BzLmRlY3JlYXNlTW9udGh9XG5cdFx0XHRcdGRpc2FibGVkPXtwcm9wcy5wcmV2TW9udGhCdXR0b25EaXNhYmxlZH1cblx0XHRcdD5cblx0XHRcdFx0UHJldmlvdXMgTW9udGhcblx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0PGJ1dHRvblxuXHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0Y2xhc3NOYW1lPVwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbiByZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0XCJcblx0XHRcdFx0YXJpYS1sYWJlbD1cIk5leHQgTW9udGhcIlxuXHRcdFx0XHRvbkNsaWNrPXtwcm9wcy5pbmNyZWFzZU1vbnRofVxuXHRcdFx0XHRkaXNhYmxlZD17cHJvcHMubmV4dE1vbnRoQnV0dG9uRGlzYWJsZWR9XG5cdFx0XHQ+XG5cdFx0XHRcdE5leHQgTW9udGhcblx0XHRcdDwvYnV0dG9uPlxuXHRcdDwvPlxuXHQpO1xufVxuXG5pbnRlcmZhY2UgSU1vbnRoRGF5UGlja2VyUHJvcHMge1xuXHR2YWx1ZT86IExvY2FsRGF0ZSB8IG51bWJlciB8IG51bGw7XG5cdG9uQ2hhbmdlPzogKHZhbHVlOiBMb2NhbERhdGUgfCBudWxsKSA9PiB2b2lkO1xuXHRvbkNoYW5nZVJhdz86ICgpID0+IHZvaWQ7XG59XG5cbnR5cGUgSW5wdXRQcm9wc09taXR0ZWQgPSBPbWl0PElucHV0UHJvcHMsICdvbkNoYW5nZSc+O1xudHlwZSBSZWFjdERhdGVQaWNrZXJQcm9wc09taXR0ZWQgPSBPbWl0PE9taXQ8UmVhY3REYXRlUGlja2VyUHJvcHMsICd2YWx1ZSc+LCAnb25DaGFuZ2UnPjtcbmV4cG9ydCB0eXBlIE1vbnRoRGF5UGlja2VyUHJvcHMgPSBJTW9udGhEYXlQaWNrZXJQcm9wcyAmIElucHV0UHJvcHNPbWl0dGVkICYgUmVhY3REYXRlUGlja2VyUHJvcHNPbWl0dGVkO1xuXG5leHBvcnQgZnVuY3Rpb24gTW9udGhEYXlQaWNrZXIocHJvcHM6IE1vbnRoRGF5UGlja2VyUHJvcHMpOiBKU1guRWxlbWVudCB7XG5cdGNvbnN0IHtcblx0XHR2YWx1ZSxcblx0XHRvbkNoYW5nZSxcblx0XHRhcyxcblx0XHRhY3Rpb24sXG5cdFx0YWN0aW9uUG9zaXRpb24sXG5cdFx0Y2xhc3NOYW1lLFxuXHRcdGRpc2FibGVkLFxuXHRcdGVycm9yLFxuXHRcdGZsdWlkLFxuXHRcdGZvY3VzLFxuXHRcdGljb24sXG5cdFx0aWNvblBvc2l0aW9uLFxuXHRcdGludmVydGVkLFxuXHRcdGxhYmVsLFxuXHRcdGxhYmVsUG9zaXRpb24sXG5cdFx0bG9hZGluZyxcblx0XHRzaXplLFxuXHRcdHRhYkluZGV4LFxuXHRcdHRyYW5zcGFyZW50LFxuXHRcdC4uLnJlc3Rcblx0fSA9IHByb3BzO1xuXG5cdGNvbnN0IHNlbGVjdGVkID0gdmFsdWUgPyB0b0RhdGUodmFsdWUpIDogbnVsbDtcblxuXHRjb25zdCBpbnB1dFByb3BzID0ge1xuXHRcdGFzLFxuXHRcdGFjdGlvbixcblx0XHRhY3Rpb25Qb3NpdGlvbixcblx0XHRjbGFzc05hbWUsXG5cdFx0ZGlzYWJsZWQsXG5cdFx0ZXJyb3IsXG5cdFx0Zmx1aWQsXG5cdFx0Zm9jdXMsXG5cdFx0aWNvbixcblx0XHRpY29uUG9zaXRpb24sXG5cdFx0aW52ZXJ0ZWQsXG5cdFx0bGFiZWwsXG5cdFx0bGFiZWxQb3NpdGlvbixcblx0XHRsb2FkaW5nLFxuXHRcdHNpemUsXG5cdFx0dGFiSW5kZXgsXG5cdFx0dHJhbnNwYXJlbnQsXG5cdH07XG5cblx0cmV0dXJuIChcblx0XHQ8RGF0ZVBpY2tlclxuXHRcdFx0ey4uLnJlc3R9XG5cdFx0XHRzZWxlY3RlZD17c2VsZWN0ZWR9XG5cdFx0XHRvbkNoYW5nZT17ZGF0ZSA9PiB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoZGF0ZSA/IHRvTG9jYWxEYXRlKGRhdGUpIDogbnVsbCk7XG5cdFx0XHR9fVxuXHRcdFx0Y3VzdG9tSW5wdXQ9ezxJbnB1dCB7Li4uaW5wdXRQcm9wc30gLz59XG5cdFx0XHRyZW5kZXJDdXN0b21IZWFkZXI9e01vbnRoRGF5SGVhZGVyfVxuXHRcdFx0ZGF0ZUZvcm1hdD1cIk1NTU0gZFwiXG5cdFx0Lz5cblx0KTtcbn1cbiIsImV4cG9ydCB7TW9udGhEYXlQaWNrZXJ9IGZyb20gJy4vTW9udGhEYXlQaWNrZXInO1xuZXhwb3J0IHR5cGUge01vbnRoRGF5UGlja2VyUHJvcHN9IGZyb20gJy4vTW9udGhEYXlQaWNrZXInO1xuIiwiaW1wb3J0IHtMb2NhbERhdGV9IGZyb20gJ0Bqcy1qb2RhL2NvcmUnO1xuaW1wb3J0IHt0b0RhdGUsIHRvTG9jYWxEYXRlfSBmcm9tICdAdGh4L2RhdGUnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7UmVhY3REYXRlUGlja2VyUHJvcHN9IGZyb20gJ3JlYWN0LWRhdGVwaWNrZXInO1xuaW1wb3J0IHtJbnB1dFByb3BzLCBJbnB1dH0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHtEYXRlUGlja2VyfSBmcm9tICcuLi9EYXRlUGlja2VyL2luZGV4JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZGF0ZS5Nb250aFllYXJQaWNrZXInKTtcblxuaW50ZXJmYWNlIElNb250aFllYXJQaWNrZXJQcm9wcyB7XG5cdHZhbHVlPzogTG9jYWxEYXRlIHwgbnVtYmVyIHwgdW5kZWZpbmVkO1xuXHRvbkNoYW5nZT86ICh2YWx1ZTogTG9jYWxEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuXHRvbkNoYW5nZVJhdz86ICgpID0+IHZvaWQ7XG5cdG1pbkRhdGU/OiBMb2NhbERhdGUgfCB1bmRlZmluZWQ7XG5cdG1heERhdGU/OiBMb2NhbERhdGUgfCB1bmRlZmluZWQ7XG59XG5cbnR5cGUgSW5wdXRQcm9wc09taXR0ZWQgPSBPbWl0PElucHV0UHJvcHMsICdvbkNoYW5nZSc+O1xudHlwZSBSZWFjdERhdGVQaWNrZXJQcm9wc09taXR0ZWQgPSBPbWl0PE9taXQ8UmVhY3REYXRlUGlja2VyUHJvcHMsICd2YWx1ZScgfCAnbWluRGF0ZScgfCAnbWF4RGF0ZSc+LCAnb25DaGFuZ2UnPjtcbmV4cG9ydCB0eXBlIE1vbnRoWWVhclBpY2tlclByb3BzID0gSU1vbnRoWWVhclBpY2tlclByb3BzICYgSW5wdXRQcm9wc09taXR0ZWQgJiBSZWFjdERhdGVQaWNrZXJQcm9wc09taXR0ZWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBNb250aFllYXJQaWNrZXIocHJvcHM6IE1vbnRoWWVhclBpY2tlclByb3BzKTogSlNYLkVsZW1lbnQge1xuXHRjb25zdCB7XG5cdFx0dmFsdWUsXG5cdFx0b25DaGFuZ2UsXG5cdFx0YXMsXG5cdFx0YWN0aW9uLFxuXHRcdGFjdGlvblBvc2l0aW9uLFxuXHRcdGNsYXNzTmFtZSxcblx0XHRkaXNhYmxlZCxcblx0XHRlcnJvcixcblx0XHRmbHVpZCxcblx0XHRmb2N1cyxcblx0XHRpY29uLFxuXHRcdGljb25Qb3NpdGlvbixcblx0XHRpbnZlcnRlZCxcblx0XHRsYWJlbCxcblx0XHRsYWJlbFBvc2l0aW9uLFxuXHRcdGxvYWRpbmcsXG5cdFx0c2l6ZSxcblx0XHR0YWJJbmRleCxcblx0XHR0cmFuc3BhcmVudCxcblx0XHRtaW5EYXRlLFxuXHRcdG1heERhdGUsXG5cdFx0Li4ucmVzdFxuXHR9ID0gcHJvcHM7XG5cblx0Y29uc3Qgc2VsZWN0ZWQgPSB2YWx1ZSA/IHRvRGF0ZSh2YWx1ZSkgOiBudWxsO1xuXG5cdGNvbnN0IGlucHV0UHJvcHMgPSB7XG5cdFx0YXMsXG5cdFx0YWN0aW9uLFxuXHRcdGFjdGlvblBvc2l0aW9uLFxuXHRcdGNsYXNzTmFtZSxcblx0XHRkaXNhYmxlZCxcblx0XHRlcnJvcixcblx0XHRmbHVpZCxcblx0XHRmb2N1cyxcblx0XHRpY29uLFxuXHRcdGljb25Qb3NpdGlvbixcblx0XHRpbnZlcnRlZCxcblx0XHRsYWJlbCxcblx0XHRsYWJlbFBvc2l0aW9uLFxuXHRcdGxvYWRpbmcsXG5cdFx0c2l6ZSxcblx0XHR0YWJJbmRleCxcblx0XHR0cmFuc3BhcmVudCxcblx0fTtcblxuXHRyZXR1cm4gKFxuXHRcdDxEYXRlUGlja2VyXG5cdFx0XHR7Li4ucmVzdH1cblx0XHRcdHNlbGVjdGVkPXtzZWxlY3RlZH1cblx0XHRcdG9uQ2hhbmdlPXtkYXRlID0+IHtcblx0XHRcdFx0aWYgKG9uQ2hhbmdlKSBvbkNoYW5nZShkYXRlID8gdG9Mb2NhbERhdGUoZGF0ZSkgOiB1bmRlZmluZWQpO1xuXHRcdFx0fX1cblx0XHRcdGN1c3RvbUlucHV0PXs8SW5wdXQgey4uLmlucHV0UHJvcHN9IC8+fVxuXHRcdFx0ZGF0ZUZvcm1hdD1cIk1NTU0geXl5eVwiXG5cdFx0XHRzaG93TW9udGhZZWFyUGlja2VyXG5cdFx0XHRtaW5EYXRlPXt0b0RhdGUobWluRGF0ZT8ud2l0aERheU9mTW9udGgoMSkgfHwgTG9jYWxEYXRlLm9mRXBvY2hEYXkoMCkpfVxuXHRcdFx0bWF4RGF0ZT17dG9EYXRlKG1heERhdGU/LnBsdXNNb250aHMoMSkud2l0aERheU9mTW9udGgoMSkubWludXNEYXlzKDEpIHx8IExvY2FsRGF0ZS5ub3coKS5wbHVzWWVhcnMoMjApKX1cblx0XHQvPlxuXHQpO1xufVxuIiwiZXhwb3J0IHtNb250aFllYXJQaWNrZXJ9IGZyb20gJy4vTW9udGhZZWFyUGlja2VyJztcbmV4cG9ydCB0eXBlIHtNb250aFllYXJQaWNrZXJQcm9wc30gZnJvbSAnLi9Nb250aFllYXJQaWNrZXInO1xuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0ljb24sIEJ1dHRvbiwgRHJvcGRvd24sIERyb3Bkb3duSXRlbVByb3BzLCBTZWdtZW50LCBTZWdtZW50UHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZGF0ZS5ZZWFyU2VsZWN0Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgWWVhclNlbGVjdFByb3BzIHtcblx0b25DaGFuZ2U/OiAodmFsdWU6IG51bWJlcikgPT4gdm9pZDtcblx0b25CbHVyPzogKGV2OiBhbnkpID0+IHZvaWQ7XG5cdHZhbHVlOiBudW1iZXI7XG5cdG1pblllYXI/OiBudW1iZXI7IC8vIERlZmF1bHRzIHRvIDE5NzBcblx0bWF4WWVhcj86IG51bWJlcjsgLy8gRGVmYXVsdHMgdG8gY3VycmVudCB5ZWFyXG5cdGVycm9yPzogYm9vbGVhbjsgLy8gRGVmYXVsdHMgdG8gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFllYXJTZWxlY3QocHJvcHM6IFllYXJTZWxlY3RQcm9wcyAmIE9taXQ8U2VnbWVudFByb3BzLCAnb25DaGFuZ2UnPikge1xuXHRjb25zdCB0aGlzWWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcblx0Y29uc3Qge3ZhbHVlLCBtaW5ZZWFyID0gMTk3MCwgbWF4WWVhciA9IHRoaXNZZWFyLCBvbkNoYW5nZSwgb25CbHVyLCBlcnJvciwgLi4ucmVzdH0gPSBwcm9wcztcblxuXHRjb25zdCBhdmFpbGFibGVZZWFyczogRHJvcGRvd25JdGVtUHJvcHNbXSA9IFtdO1xuXHRmb3IgKGxldCBpID0gbWF4WWVhcjsgaSA+PSBtaW5ZZWFyOyBpLS0pIHtcblx0XHRhdmFpbGFibGVZZWFycy5wdXNoKHt2YWx1ZTogaSwgdGV4dDogaS50b1N0cmluZygpLCBrZXk6IGl9KTtcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PFNlZ21lbnQgYmFzaWMgY29tcGFjdCBzdHlsZT17e3BhZGRpbmc6IDAsIG1hcmdpbjogMH19IHsuLi5yZXN0fT5cblx0XHRcdDxCdXR0b25cblx0XHRcdFx0YmFzaWNcblx0XHRcdFx0aWNvblxuXHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0Y29sb3I9e2Vycm9yID8gJ3JlZCcgOiAnZ3JlZW4nfVxuXHRcdFx0XHRkaXNhYmxlZD17dmFsdWUgPD0gbWluWWVhcn1cblx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UodmFsdWUgLSAxKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0b25CbHVyPXtvbkJsdXJ9XG5cdFx0XHQ+XG5cdFx0XHRcdDxJY29uIG5hbWU9XCJhcnJvdyBsZWZ0XCIgLz5cblx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PERyb3Bkb3duXG5cdFx0XHRcdGljb249ezxkaXYgLz59XG5cdFx0XHRcdGJ1dHRvblxuXHRcdFx0XHRiYXNpY1xuXHRcdFx0XHRzY3JvbGxpbmdcblx0XHRcdFx0dmFsdWU9e3ZhbHVlfVxuXHRcdFx0XHRvcHRpb25zPXthdmFpbGFibGVZZWFyc31cblx0XHRcdFx0b25DaGFuZ2U9eyhlLCB2YWwpID0+IHtcblx0XHRcdFx0XHRpZiAodHlwZW9mIHZhbC52YWx1ZSA9PT0gJ251bWJlcicgJiYgb25DaGFuZ2UpIG9uQ2hhbmdlKHZhbC52YWx1ZSk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVycm9yPXtlcnJvcn1cblx0XHRcdFx0b25CbHVyPXtvbkJsdXJ9XG5cdFx0XHQvPlxuXHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRiYXNpY1xuXHRcdFx0XHRpY29uXG5cdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRjb2xvcj17ZXJyb3IgPyAncmVkJyA6ICdncmVlbid9XG5cdFx0XHRcdGRpc2FibGVkPXt2YWx1ZSA+PSBtYXhZZWFyfVxuXHRcdFx0XHRvbkNsaWNrPXsoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKG9uQ2hhbmdlKSBvbkNoYW5nZSh2YWx1ZSArIDEpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRvbkJsdXI9e29uQmx1cn1cblx0XHRcdFx0c3R5bGU9e3ttYXJnaW5SaWdodDogMH19XG5cdFx0XHQ+XG5cdFx0XHRcdDxJY29uIG5hbWU9XCJhcnJvdyByaWdodFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQ8L1NlZ21lbnQ+XG5cdCk7XG59XG4iLCJleHBvcnQge1llYXJTZWxlY3R9IGZyb20gJy4vWWVhclNlbGVjdCc7XG5leHBvcnQgdHlwZSB7WWVhclNlbGVjdFByb3BzfSBmcm9tICcuL1llYXJTZWxlY3QnO1xuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7Rm9ybWlrVmFsdWVzLCBpc0Z1bmN0aW9uLCBGb3JtaWtQcm92aWRlciwgaXNFbXB0eUNoaWxkcmVufSBmcm9tICdmb3JtaWsnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtURm9ybUNvbmZpZywgVEZvcm1Qcm9wc30gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge3VzZVRGb3JtfSBmcm9tICcuL3VzZVRGb3JtJztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZm9ybS5URm9ybScpO1xuXG5leHBvcnQgZnVuY3Rpb24gVEZvcm08VmFsdWVzIGV4dGVuZHMgRm9ybWlrVmFsdWVzID0gRm9ybWlrVmFsdWVzPihwcm9wczogVEZvcm1Db25maWc8VmFsdWVzPikge1xuXHRjb25zdCB0YmFnID0gdXNlVEZvcm08VmFsdWVzPihwcm9wcyk7XG5cdGNvbnN0IHtjb21wb25lbnQsIHJlbmRlciwgY2hpbGRyZW4sIGlubmVyUmVmfSA9IHByb3BzO1xuXG5cdC8vIFRoaXMgYWxsb3dzIGZvbGtzIHRvIHBhc3MgYSByZWYgdG8gPEZvcm1payAvPlxuXHRSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGlubmVyUmVmLCAoKSA9PiB0YmFnKTtcblxuXHRsZXQgY2hpbGQgPSBudWxsO1xuXHRpZiAoY29tcG9uZW50KSB7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGNoaWxkID0gUmVhY3QuY3JlYXRlRWxlbWVudChjb21wb25lbnQsIHRiYWcpO1xuXHR9IGVsc2UgaWYgKHJlbmRlcikge1xuXHRcdGNoaWxkID0gcmVuZGVyKHRiYWcpO1xuXHR9IGVsc2UgaWYgKGNoaWxkcmVuKSB7XG5cdFx0aWYgKGlzRnVuY3Rpb24oY2hpbGRyZW4pKSB7XG5cdFx0XHRjaGlsZCA9IChjaGlsZHJlbiBhcyAoYmFnOiBURm9ybVByb3BzPFZhbHVlcz4pID0+IFJlYWN0LlJlYWN0Tm9kZSkodGJhZyBhcyBURm9ybVByb3BzPFZhbHVlcz4pO1xuXHRcdH0gZWxzZSBpZiAoIWlzRW1wdHlDaGlsZHJlbihjaGlsZHJlbikpIHtcblx0XHRcdGNoaWxkID0gUmVhY3QuQ2hpbGRyZW4ub25seShjaGlsZHJlbik7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIDxGb3JtaWtQcm92aWRlciB2YWx1ZT17dGJhZ30+e2NoaWxkfTwvRm9ybWlrUHJvdmlkZXI+O1xufVxuIiwiZXhwb3J0IHtURm9ybX0gZnJvbSAnLi9URm9ybSc7XG5leHBvcnQge3VzZVRGb3JtfSBmcm9tICcuL3VzZVRGb3JtJztcbmV4cG9ydCB0eXBlIHtURm9ybVByb3BzfSBmcm9tICcuL3R5cGVzJztcbiIsImltcG9ydCBmbGF0dGVuIGZyb20gJ2ZsYXQnO1xuaW1wb3J0IHtGb3JtaWtWYWx1ZXMsIHVzZUZvcm1paywgRm9ybWlrRXJyb3JzLCBGb3JtaWtUb3VjaGVkfSBmcm9tICdmb3JtaWsnO1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2gvZ2V0JztcbmltcG9ydCBwcm9wZXJ0eSBmcm9tICdsb2Rhc2gvcHJvcGVydHknO1xuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoL3VuaXEnO1xuaW1wb3J0IFJlYWN0LCB7dXNlRWZmZWN0LCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtNZXNzYWdlLCBTZWdtZW50fSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQgdHlwZSB7VEZvcm1Db25maWd9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlVEZvcm08VmFsdWVzIGV4dGVuZHMgRm9ybWlrVmFsdWVzID0gRm9ybWlrVmFsdWVzLCBJbml0aWFsVmFsdWVzID0gYW55Pihjb25maWc6IFRGb3JtQ29uZmlnPFZhbHVlcywgSW5pdGlhbFZhbHVlcz4pIHtcblx0Y29uc3Qge3JlbmRlciwgY2hpbGRyZW4sIC4uLnJlc3R9ID0gY29uZmlnO1xuXHQvLyBAdHMtaWdub3JlXG5cdGNvbnN0IGZvcm1payA9IHVzZUZvcm1payhyZXN0KTtcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChjb25maWcub25WYWxpZGF0ZSkgY29uZmlnLm9uVmFsaWRhdGUoZm9ybWlrLmlzVmFsaWQpO1xuXHR9LCBbZm9ybWlrLmlzVmFsaWQsIGNvbmZpZy5vblZhbGlkYXRlXSk7XG5cblx0Ly8gR2V0IHN1Ym1pdCBmdW5jdGlvblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChjb25maWcuZ2V0U3VibWl0Rm4pIGNvbmZpZy5nZXRTdWJtaXRGbihmb3JtaWsuc3VibWl0Rm9ybSk7XG5cdH0sIFtmb3JtaWsuc3VibWl0Rm9ybSwgY29uZmlnLmdldFN1Ym1pdEZuXSk7XG5cblx0Ly8gT24gY2hhbmdlIGV2ZW50IChpZiB0aGlzIGVuZHMgdXAgY2hhbmdpbmcgdmFsdWVzIGl0IHdpbGwgY3ljbGUpXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGNvbmZpZy5vbkNoYW5nZSkgY29uZmlnLm9uQ2hhbmdlKGZvcm1pay52YWx1ZXMpO1xuXHR9LCBbZm9ybWlrLnZhbHVlc10pO1xuXG5cdC8vIE1hcmsgdGhlIGVycm9yIGNsZWFyZWQgaWYgdGhlIGZvcm0gaGFzIGJlZW4gZWRpdGVkIGFmdGVyIGFuIGVycm9yXG5cdGNvbnN0IFtlcnJvckNsZWFyZWQsIHNldEVycm9yQ2xlYXJlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGNvbmZpZy5lcnJvciAmJiBjb25maWcuZXJyb3IubWVzc2FnZSAmJiAhZm9ybWlrLmlzU3VibWl0dGluZykge1xuXHRcdFx0c2V0RXJyb3JDbGVhcmVkKHRydWUpO1xuXHRcdH1cblx0fSwgW2Zvcm1pay52YWx1ZXMsIGNvbmZpZy5lcnJvcl0pO1xuXG5cdC8vIEZsYXR0ZW4gdGhlIHdhcm5pbmdzIChmb3JtaWsgZXJyb3JzKSBhbmQgdG91Y2ggb2JqZWN0cy5cblx0Y29uc3QgZmxhdFdhcm5pbmdzID0gZmxhdHRlbjxGb3JtaWtFcnJvcnM8VmFsdWVzPiwge1trZXk6IHN0cmluZ106IHN0cmluZ30+KGZvcm1pay5lcnJvcnMpO1xuXHRjb25zdCBmbGF0VG91Y2hlZCA9IGZsYXR0ZW48Rm9ybWlrVG91Y2hlZDxWYWx1ZXM+LCB7W2tleTogc3RyaW5nXTogc3RyaW5nfT4oZm9ybWlrLnRvdWNoZWQpO1xuXG5cdC8vIENyZWF0ZSBhbiBhcnJheSBvZiBzdHJpbmdzIHRoYXQgYXJlIHdhcm5pbmdzIChmb3JtaWsgZXJyb3JzKS4gSWYgdGhlIHN1Ym1pdCBjb3VudCBpcyBncmVhdGVyIHRoYW4gMFxuXHQvLyB0aGVuIGl0IHdpbGwgc2hvdyBhbGwgd2FybmluZ3MuIE90aGVyd2lzZSBvbmx5IHRvdWNoZWQgZmllbGQgd2FybmluZ3Mgd2lsbCBiZSBhZGRlZCB0byB0aGlzIGFycmF5LlxuXHRjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSB1bmlxKFxuXHRcdE9iamVjdC5rZXlzKGZsYXRXYXJuaW5ncykucmVkdWNlPHN0cmluZ1tdPigobWVtbywgdmFsdWUpID0+IHtcblx0XHRcdGNvbnN0IGlzVG91Y2hlZCA9IGZsYXRUb3VjaGVkW3ZhbHVlXTtcblx0XHRcdGlmIChpc1RvdWNoZWQgfHwgZm9ybWlrLnN1Ym1pdENvdW50ID4gMCkge1xuXHRcdFx0XHRyZXR1cm4gWy4uLm1lbW8sIGdldChmbGF0V2FybmluZ3MsIHZhbHVlKV07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWVtbztcblx0XHR9LCBbXSksXG5cdCk7XG5cblx0Ly8gQ3JlYXRlIGFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBhcmUgZXJyb3JzIChncmFwaHFsIGVycm9ycykuXG5cdGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cdGxldCBlcnJvckhlYWRlciA9ICcnO1xuXHRpZiAoY29uZmlnLmVycm9yICYmIGNvbmZpZy5lcnJvci5tZXNzYWdlKSB7XG5cdFx0aWYgKGNvbmZpZy5lcnJvci5ncmFwaFFMRXJyb3JzKSB7XG5cdFx0XHRlcnJvcnMgPSBjb25maWcuZXJyb3IuZ3JhcGhRTEVycm9ycy5yZWR1Y2UoKG1lbW8sIHYpID0+IHtcblx0XHRcdFx0aWYgKHYubWVzc2FnZSkgcmV0dXJuIFsuLi5tZW1vLCB2Lm1lc3NhZ2VdO1xuXHRcdFx0XHRyZXR1cm4gbWVtbztcblx0XHRcdH0sIFtdIGFzIHN0cmluZ1tdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gY29uZmlnLmVycm9yLm1lc3NhZ2Uuc2xpY2UoY29uZmlnLmVycm9yLm1lc3NhZ2UuaW5kZXhPZignOiAnKSArIDEpO1xuXHRcdFx0ZXJyb3JzLnB1c2goZXJyb3JNZXNzYWdlKTtcblx0XHR9XG5cdFx0ZXJyb3JIZWFkZXIgPSBjb25maWcuZXJyb3IubWVzc2FnZS5zbGljZSgwLCBjb25maWcuZXJyb3IubWVzc2FnZS5pbmRleE9mKCc6ICcpKTtcblx0fVxuXHRlcnJvcnMgPSB1bmlxKGVycm9ycyk7XG5cblx0Ly8gQ2hlY2sgaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG9yIGVycm9yc1xuXHRjb25zdCBoYXNXYXJuaW5ncyA9ICEoZm9ybWlrLmlzVmFsaWQgfHwgd2FybmluZ3MubGVuZ3RoID09PSAwKTtcblx0Y29uc3QgaGFzRXJyb3JzID0gZXJyb3JzLmxlbmd0aCA+IDA7XG5cblx0Ly8gUmVuZGVyIHRoZSB3YXJuaW5nc1xuXHRmdW5jdGlvbiByZW5kZXJXYXJuaW5ncygpIHtcblx0XHRpZiAoIWhhc1dhcm5pbmdzICYmICFoYXNFcnJvcnMpIHJldHVybiBudWxsO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVzc2FnZSB3YXJuaW5nPXtoYXNXYXJuaW5nc30gZXJyb3I9e2hhc0Vycm9ycyAmJiAhaGFzV2FybmluZ3N9PlxuXHRcdFx0XHQ8TWVzc2FnZS5IZWFkZXI+e2hhc1dhcm5pbmdzID8gJ1NvbWUgZmllbGRzIGFyZSBub3QgY29tcGxldGU6JyA6IGAke2Vycm9ySGVhZGVyfTpgfTwvTWVzc2FnZS5IZWFkZXI+XG5cdFx0XHRcdHsvKiBQdXQgaXQgaW4gYSBzZWdtZW50IHRvIG1ha2Ugc3VyZSB0aGUgZXJyb3JNZXNzYWdlIGlzbid0IHRvbyBiaWcgd2hlbiB0aGVyZSBhcmUgYSBsb3Qgb2YgZXJyb3JzICovfVxuXHRcdFx0XHQ8U2VnbWVudCBzdHlsZT17e292ZXJmbG93OiAnYXV0bycsIG1heEhlaWdodDogMTAwfX0+XG5cdFx0XHRcdFx0eyhoYXNXYXJuaW5ncyA/IHdhcm5pbmdzIDogZXJyb3JzKS5tYXAobXNnID0+IChcblx0XHRcdFx0XHRcdDxkaXYga2V5PXttc2d9Pnttc2d9PC9kaXY+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvU2VnbWVudD5cblx0XHRcdDwvTWVzc2FnZT5cblx0XHQpO1xuXHR9XG5cblx0Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBmaWVsZCBoYXMgYW4gZXJyb3Jcblx0ZnVuY3Rpb24gZmllbGRFcnJvcihmaWVsZE5hbWU6IGtleW9mIFZhbHVlcyB8IHN0cmluZyB8IG51bWJlcikge1xuXHRcdHJldHVybiAoISFwcm9wZXJ0eShmaWVsZE5hbWUpKGZvcm1pay50b3VjaGVkKSB8fCBmb3JtaWsuc3VibWl0Q291bnQgPiAwKSAmJiAhIXByb3BlcnR5KGZpZWxkTmFtZSkoZm9ybWlrLmVycm9ycyk7XG5cdH1cblxuXHQvLyBIYW5kbGVzIHRoZSBmb3JtIHN1Ym1pdFxuXHRmdW5jdGlvbiBoYW5kbGVTdWJtaXQoZT86IFJlYWN0LkZvcm1FdmVudDxIVE1MRm9ybUVsZW1lbnQ+KSB7XG5cdFx0c2V0RXJyb3JDbGVhcmVkKGZhbHNlKTtcblx0XHRmb3JtaWsuaGFuZGxlU3VibWl0KGUpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHQuLi5mb3JtaWssXG5cdFx0aGFzRXJyb3JzOiBoYXNFcnJvcnMgJiYgIWVycm9yQ2xlYXJlZCxcblx0XHRoYXNXYXJuaW5ncyxcblx0XHRpc1ZhbGlkOiAhaGFzV2FybmluZ3MsXG5cdFx0bG9hZGluZzogY29uZmlnLmxvYWRpbmcgPyBjb25maWcubG9hZGluZyA6IGZhbHNlLFxuXHRcdHN1Ym1pdERpc2FibGVkOiBoYXNXYXJuaW5ncyB8fCBmb3JtaWsuaXNTdWJtaXR0aW5nLFxuXHRcdGVycm9yTWFya2VkQ2xlYXJlZDogZXJyb3JDbGVhcmVkLFxuXHRcdGZvcm1FcnJvcjogaGFzRXJyb3JzICYmICFoYXNXYXJuaW5ncyAmJiAhZXJyb3JDbGVhcmVkICYmICFmb3JtaWsuaXNTdWJtaXR0aW5nLCAvLyBDb252ZW5pZW5jZVxuXHRcdHJlbmRlcldhcm5pbmdzLFxuXHRcdGZpZWxkRXJyb3IsXG5cdFx0aGFuZGxlU3VibWl0LFxuXHR9O1xufVxuIiwiaW1wb3J0IHR5cGUge0xvY2FsRGF0ZX0gZnJvbSAnQGpzLWpvZGEvY29yZSc7XG5pbXBvcnQge2Zvcm1hdERhdGV9IGZyb20gJ0B0aHgvZGF0ZSc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0LCB7dXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDcmVkaXRDYXJkcywge0ZvY3VzZWR9IGZyb20gJ3JlYWN0LWNyZWRpdC1jYXJkcyc7XG5pbXBvcnQgJ3JlYWN0LWNyZWRpdC1jYXJkcy9lcy9zdHlsZXMtY29tcGlsZWQuY3NzJztcbmltcG9ydCB7Rm9ybSwgR3JpZCwgSW5wdXQsIElucHV0UHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB7TW9udGhZZWFyUGlja2VyfSBmcm9tICcuLi8uLi9kYXRlL01vbnRoWWVhclBpY2tlcic7XG5pbXBvcnQge0NyZWRpdENhcmROdW1iZXJJbnB1dH0gZnJvbSAnLi9DcmVkaXRDYXJkTnVtYmVySW5wdXQnO1xuaW1wb3J0ICcuL3N0eWxlcy5jc3MnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5pbnB1dHMuQ3JlZGl0Q2FyZElucHV0Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlZGl0Q2FyZERhdGEge1xuXHRudW1iZXI/OiBzdHJpbmc7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdGN2Yz86IHN0cmluZztcblx0ZXhwaXJ5PzogTG9jYWxEYXRlO1xufVxuXG5leHBvcnQgdHlwZSBDcmVkaXRDYXJkSW5wdXRQcm9wcyA9IHtcblx0dmFsdWU/OiBDcmVkaXRDYXJkRGF0YTtcblx0b25DaGFuZ2U/OiAoZGF0YTogQ3JlZGl0Q2FyZERhdGEpID0+IHZvaWQ7XG59ICYgUGljazxJbnB1dFByb3BzLCAnZGlzYWJsZWQnIHwgJ29uQmx1cic+O1xuXG5leHBvcnQgZnVuY3Rpb24gQ3JlZGl0Q2FyZElucHV0KHByb3BzOiBDcmVkaXRDYXJkSW5wdXRQcm9wcykge1xuXHRjb25zdCB7b25CbHVyLCBkaXNhYmxlZCwgb25DaGFuZ2UsIHZhbHVlfSA9IHByb3BzO1xuXHRjb25zdCB7bmFtZSwgbnVtYmVyLCBjdmMsIGV4cGlyeX0gPSB2YWx1ZSB8fCB7fTtcblxuXHRjb25zdCBbZm9jdXMsIHNldEZvY3VzXSA9IHVzZVN0YXRlPEZvY3VzZWQ+KCdudW1iZXInKTtcblxuXHRyZXR1cm4gKFxuXHRcdDxHcmlkPlxuXHRcdFx0PEdyaWQuQ29sdW1uIHdpZHRoPXs0fT5cblx0XHRcdFx0PEZvcm0+XG5cdFx0XHRcdFx0PEZvcm0uR3JvdXA+XG5cdFx0XHRcdFx0XHQ8Rm9ybS5GaWVsZCB3aWR0aD17OX0+XG5cdFx0XHRcdFx0XHRcdDxsYWJlbD5OdW1iZXI8L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8Q3JlZGl0Q2FyZE51bWJlcklucHV0XG5cdFx0XHRcdFx0XHRcdFx0b25Gb2N1cz17KCkgPT4gc2V0Rm9jdXMoJ251bWJlcicpfVxuXHRcdFx0XHRcdFx0XHRcdG9uQmx1cj17b25CbHVyfVxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXt2ID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHtuYW1lLCBudW1iZXI6IHYsIGN2YywgZXhwaXJ5fSk7XG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlZD17ZGlzYWJsZWR9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L0Zvcm0uRmllbGQ+XG5cdFx0XHRcdFx0XHQ8Rm9ybS5GaWVsZCB3aWR0aD17NH0+XG5cdFx0XHRcdFx0XHRcdDxsYWJlbD5DVkM8L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17Y3ZjIHx8ICcnfVxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZXYsIHYpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHtuYW1lLCBudW1iZXIsIGN2Yzogdi52YWx1ZSwgZXhwaXJ5fSk7XG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRvbkZvY3VzPXsoKSA9PiBzZXRGb2N1cygnY3ZjJyl9XG5cdFx0XHRcdFx0XHRcdFx0b25CbHVyPXsoKSA9PiBzZXRGb2N1cygnbmFtZScpfVxuXHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZH1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvRm9ybS5GaWVsZD5cblx0XHRcdFx0XHQ8L0Zvcm0uR3JvdXA+XG5cdFx0XHRcdFx0PEZvcm0uR3JvdXA+XG5cdFx0XHRcdFx0XHQ8Rm9ybS5GaWVsZCB3aWR0aD17OX0+XG5cdFx0XHRcdFx0XHRcdDxsYWJlbD5OYW1lPC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9e25hbWUgfHwgJyd9XG5cdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhldiwgdikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2UgJiYgb25DaGFuZ2Uoe25hbWU6IHYudmFsdWUsIG51bWJlciwgY3ZjLCBleHBpcnl9KTtcblx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdG9uRm9jdXM9eygpID0+IHNldEZvY3VzKCduYW1lJyl9XG5cdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdFx0XHRcdGZsdWlkXG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L0Zvcm0uRmllbGQ+XG5cdFx0XHRcdFx0XHQ8Rm9ybS5GaWVsZCB3aWR0aD17Nn0+XG5cdFx0XHRcdFx0XHRcdDxsYWJlbD5FeHBpcnk8L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8TW9udGhZZWFyUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2V4cGlyeX1cblx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17diA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZSAmJiBvbkNoYW5nZSh7bmFtZSwgbnVtYmVyLCBjdmMsIGV4cGlyeTogdn0pO1xuXHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0b25Gb2N1cz17KCkgPT4gc2V0Rm9jdXMoJ2V4cGlyeScpfVxuXHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZH1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvRm9ybS5GaWVsZD5cblx0XHRcdFx0XHQ8L0Zvcm0uR3JvdXA+XG5cdFx0XHRcdDwvRm9ybT5cblx0XHRcdDwvR3JpZC5Db2x1bW4+XG5cdFx0XHQ8R3JpZC5Db2x1bW4gd2lkdGg9ezEyfT5cblx0XHRcdFx0PENyZWRpdENhcmRzXG5cdFx0XHRcdFx0Y3ZjPXtjdmMgfHwgJyd9XG5cdFx0XHRcdFx0ZXhwaXJ5PXtmb3JtYXREYXRlKGV4cGlyeSwge2Zvcm1hdDogJ01NdXUnfSkgfHwgJyd9XG5cdFx0XHRcdFx0bmFtZT17bmFtZSB8fCAnJ31cblx0XHRcdFx0XHRudW1iZXI9e251bWJlciB8fCAnJ31cblx0XHRcdFx0XHRmb2N1c2VkPXtmb2N1c31cblx0XHRcdFx0XHRjYWxsYmFjaz17KGEsIGIpID0+IHtcblx0XHRcdFx0XHRcdGQoYSwgYik7XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0Lz5cblx0XHRcdDwvR3JpZC5Db2x1bW4+XG5cdFx0PC9HcmlkPlxuXHQpO1xufVxuIiwiaW1wb3J0IGNyZWRpdENhcmRUeXBlIGZyb20gJ2NyZWRpdC1jYXJkLXR5cGUnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7dmFsaWRhdGV9IGZyb20gJ2x1aG4nO1xuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0ljb24sIElucHV0LCBJbnB1dFByb3BzLCBTZW1hbnRpY0lDT05TLCBTZW1hbnRpY0NPTE9SU30gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHR5cGUge01hc2tlZElucHV0UHJvcHN9IGZyb20gJy4uL01hc2tlZElucHV0JztcbmltcG9ydCB7dXNlTWFza2VkSW5wdXR9IGZyb20gJy4uL01hc2tlZElucHV0L3VzZU1hc2tlZElucHV0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuaW5wdXRzLkNyZWRpdENhcmRJbnB1dC5DcmVkaXRDYXJkTnVtYmVySW5wdXQnKTtcblxuaW50ZXJmYWNlIENyZWRpdENhcmROdW1iZXJJbnB1dFByb3BzIHtcblx0b25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblx0dmFsdWU/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldEljb24odHlwZTogc3RyaW5nKTogU2VtYW50aWNJQ09OUyB7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdGNhc2UgJ3Zpc2EnOlxuXHRcdFx0cmV0dXJuICdjYyB2aXNhJztcblx0XHRjYXNlICdtYXN0ZXJjYXJkJzpcblx0XHRcdHJldHVybiAnY2MgbWFzdGVyY2FyZCc7XG5cdFx0Y2FzZSAnYW1lcmljYW4tZXhwcmVzcyc6XG5cdFx0XHRyZXR1cm4gJ2NjIGFtZXgnO1xuXHRcdGNhc2UgJ2RpbmVycy1jbHViJzpcblx0XHRcdHJldHVybiAnY2MgZGluZXJzIGNsdWInO1xuXHRcdGNhc2UgJ2pjYic6XG5cdFx0XHRyZXR1cm4gJ2NjIGpjYic7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiAnY3JlZGl0IGNhcmQnO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDcmVkaXRDYXJkTnVtYmVySW5wdXQocHJvcHM6IENyZWRpdENhcmROdW1iZXJJbnB1dFByb3BzICYgT21pdDxJbnB1dFByb3BzLCAnb25DaGFuZ2UnPikge1xuXHRjb25zdCB7dmFsdWUsIG9uQ2hhbmdlLCAuLi5yZXN0fSA9IHByb3BzO1xuXHRjb25zdCBbaWNvbiwgc2V0SWNvbl0gPSB1c2VTdGF0ZTxTZW1hbnRpY0lDT05TPignY3JlZGl0IGNhcmQnKTtcblx0Y29uc3QgW2NvbG9yLCBzZXRDb2xvcl0gPSB1c2VTdGF0ZTxTZW1hbnRpY0NPTE9SUz4oJ2JsYWNrJyk7XG5cblx0Y29uc3QgY2hlY2tWYWxpZGF0aW9uID0gdXNlQ2FsbGJhY2soKHZhbHVlQXJyYXk6IHN0cmluZ1tdKSA9PiB7XG5cdFx0Y29uc3QgbnVtID0gdmFsdWVBcnJheS5qb2luKCcnKS5yZXBsYWNlQWxsKC8oX3xcXHMpL2csICcnKTtcblx0XHRjb25zdCB0eXAgPSBjcmVkaXRDYXJkVHlwZShudW0pO1xuXHRcdGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZShudW0pO1xuXG5cdFx0aWYgKHR5cC5sZW5ndGggPT09IDEpIHtcblx0XHRcdHNldEljb24oZ2V0SWNvbih0eXBbMF0udHlwZSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRJY29uKCdjcmVkaXQgY2FyZCcpO1xuXHRcdH1cblxuXHRcdGlmIChudW0ubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKGlzVmFsaWQpIHtcblx0XHRcdFx0c2V0Q29sb3IoJ2dyZWVuJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZXRDb2xvcigncmVkJyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNldENvbG9yKCdibGFjaycpO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc1ZhbGlkO1xuXHR9LCBbXSk7XG5cblx0Y29uc3QgY3JlZGl0Q2FyZE1hc2s6IE1hc2tlZElucHV0UHJvcHNbJ21hc2snXSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdG1hc2s6ICc5OTk5IDk5OTkgOTk5OSA5OTk5Jyxcblx0XHRcdGlzQ29tcGxldGU6IGNoZWNrVmFsaWRhdGlvbixcblx0XHRcdGF1dG9Vbm1hc2s6IHRydWUsXG5cdFx0fSksXG5cdFx0W2NoZWNrVmFsaWRhdGlvbl0sXG5cdCk7XG5cblx0Y29uc3QgY2FyZE51bWJlclJlZiA9IHVzZU1hc2tlZElucHV0KHtcblx0XHRtYXNrOiBjcmVkaXRDYXJkTWFzayxcblx0XHR2YWx1ZSxcblx0XHRvbkNoYW5nZTogdiA9PiB7XG5cdFx0XHRjb25zdCB0eXAgPSBjcmVkaXRDYXJkVHlwZSh2IHx8ICcnKTtcblx0XHRcdGQodiwgdHlwKTtcblx0XHRcdC8vIGNoZWNrVmFsaWRhdGlvbihbdiB8fCAnJ10pO1xuXHRcdFx0b25DaGFuZ2UgJiYgb25DaGFuZ2Uodik7XG5cdFx0fSxcblx0fSk7XG5cblx0cmV0dXJuIChcblx0XHQ8SW5wdXQgey4uLnJlc3R9IGljb24+XG5cdFx0XHQ8aW5wdXQgcmVmPXtjYXJkTnVtYmVyUmVmfSAvPlxuXHRcdFx0PEljb24gbmFtZT17aWNvbn0gY29sb3I9e2NvbG9yfSBzaXplPVwibGFyZ2VcIiAvPlxuXHRcdDwvSW5wdXQ+XG5cdCk7XG59XG4iLCJleHBvcnQge0NyZWRpdENhcmRJbnB1dH0gZnJvbSAnLi9DcmVkaXRDYXJkSW5wdXQnO1xuZXhwb3J0IHR5cGUge0NyZWRpdENhcmRJbnB1dFByb3BzfSBmcm9tICcuL0NyZWRpdENhcmRJbnB1dCc7XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7SW5wdXQsIElucHV0UHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB7dXNlTWFza2VkSW5wdXQsIFVzZU1hc2tlZElucHV0UHJvcHN9IGZyb20gJy4vdXNlTWFza2VkSW5wdXQnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5pbnB1dHMuTWFza2VkSW5wdXQnKTtcblxuZXhwb3J0IHR5cGUgTWFza2VkSW5wdXRQcm9wcyA9IHtcblx0bmFtZT86IHN0cmluZztcblx0b25CbHVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG59ICYgVXNlTWFza2VkSW5wdXRQcm9wcyAmXG5cdE9taXQ8SW5wdXRQcm9wcywgJ29uQ2hhbmdlJz47XG5cbmV4cG9ydCBmdW5jdGlvbiBNYXNrZWRJbnB1dChwcm9wczogTWFza2VkSW5wdXRQcm9wcykge1xuXHRjb25zdCB7bmFtZSwgb25CbHVyLCBkaXNhYmxlZCwgb25DaGFuZ2UsIG1hc2ssIHZhbHVlLCAuLi5yZXN0fSA9IHByb3BzO1xuXG5cdGNvbnN0IGlucHV0UmVmID0gdXNlTWFza2VkSW5wdXQoe21hc2ssIHZhbHVlLCBvbkNoYW5nZX0pO1xuXG5cdHJldHVybiAoXG5cdFx0PElucHV0IHsuLi5yZXN0fT5cblx0XHRcdDxpbnB1dCBkaXNhYmxlZD17ZGlzYWJsZWR9IG5hbWU9e25hbWV9IHJlZj17aW5wdXRSZWZ9IG9uQmx1cj17b25CbHVyfSAvPlxuXHRcdDwvSW5wdXQ+XG5cdCk7XG59XG4iLCJleHBvcnQge01hc2tlZElucHV0fSBmcm9tICcuL01hc2tlZElucHV0JztcbmV4cG9ydCB7dXNlTWFza2VkSW5wdXR9IGZyb20gJy4vdXNlTWFza2VkSW5wdXQnO1xuZXhwb3J0IHR5cGUge01hc2tlZElucHV0UHJvcHN9IGZyb20gJy4vTWFza2VkSW5wdXQnO1xuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBJbnB1dG1hc2sgZnJvbSAnaW5wdXRtYXNrJztcbmltcG9ydCB7dXNlRWZmZWN0LCB1c2VSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VEZWVwQ29tcGFyZUVmZmVjdCBmcm9tICd1c2UtZGVlcC1jb21wYXJlLWVmZmVjdCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5NYXNrZWRJbnB1dC51c2VNYXNrZWRJbnB1dCcpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZU1hc2tlZElucHV0UHJvcHMge1xuXHR2YWx1ZT86IHN0cmluZztcblx0b25DaGFuZ2U/OiAodmFsdWU/OiBzdHJpbmcpID0+IHZvaWQ7XG5cdG1hc2s/OiBJbnB1dG1hc2suT3B0aW9ucztcblx0b25TZXQ/OiAodmFsdWU/OiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VNYXNrZWRJbnB1dChwcm9wczogVXNlTWFza2VkSW5wdXRQcm9wcykge1xuXHRjb25zdCB7dmFsdWUsIG9uQ2hhbmdlLCBvblNldCwgbWFza30gPSBwcm9wcztcblxuXHRjb25zdCBpbnB1dEVsZW1lbnQgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudCB8IG51bGw+KG51bGwpO1xuXHRjb25zdCBtYXNrSW5zdGFuY2UgPSB1c2VSZWY8SW5wdXRtYXNrLkluc3RhbmNlIHwgbnVsbD4obnVsbCk7XG5cblx0dXNlRGVlcENvbXBhcmVFZmZlY3QoKCkgPT4ge1xuXHRcdGlmICghaW5wdXRFbGVtZW50LmN1cnJlbnQpIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGdldCBpbnB1dCBlbGVtZW50Jyk7XG5cblx0XHRkKCdDcmVhdGluZyBpbnB1dCBtYXNrIGluc3RhbmNlJyk7XG5cdFx0bWFza0luc3RhbmNlLmN1cnJlbnQgPSBuZXcgSW5wdXRtYXNrKHtcblx0XHRcdC4uLm1hc2ssXG5cdFx0XHRvbmNvbXBsZXRlKCkge1xuXHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKGlucHV0RWxlbWVudC5jdXJyZW50Py52YWx1ZSk7XG5cdFx0XHRcdGlmIChtYXNrPy5vbmNvbXBsZXRlKSBtYXNrLm9uY29tcGxldGUoKTtcblx0XHRcdH0sXG5cdFx0XHRvbmNsZWFyZWQoKSB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoKTtcblx0XHRcdFx0aWYgKG1hc2s/Lm9uY2xlYXJlZCkgbWFzay5vbmNsZWFyZWQoKTtcblx0XHRcdH0sXG5cdFx0XHRvbmluY29tcGxldGUoKSB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoaW5wdXRFbGVtZW50LmN1cnJlbnQ/LnZhbHVlKTtcblx0XHRcdFx0aWYgKG1hc2s/Lm9uaW5jb21wbGV0ZSkgbWFzay5vbmluY29tcGxldGUoKTtcblx0XHRcdH0sXG5cdFx0fSk7XG5cdFx0bWFza0luc3RhbmNlLmN1cnJlbnQubWFzayhpbnB1dEVsZW1lbnQuY3VycmVudCk7XG5cblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0aWYgKG1hc2tJbnN0YW5jZS5jdXJyZW50KSB7XG5cdFx0XHRcdGQoJ0NsZWFuaW5nIHVwIGlucHV0IG1hc2sgaW5zdGFuY2UnKTtcblx0XHRcdFx0bWFza0luc3RhbmNlLmN1cnJlbnQucmVtb3ZlKCk7XG5cdFx0XHRcdG1hc2tJbnN0YW5jZS5jdXJyZW50ID0gbnVsbDtcblx0XHRcdH1cblx0XHR9O1xuXHR9LCBbbWFza10pO1xuXG5cdC8vIElmIHdlIGNoYW5nZSB0aGUgdmFsdWUgcHJvcCB3ZSBuZWVkIHRvIHN5bmMgdGhlIERPTSB2YWx1ZSB0byBkaXNwbGF5IHRoZSBuZXcgdmFsdWVcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoaW5wdXRFbGVtZW50LmN1cnJlbnQgJiYgaW5wdXRFbGVtZW50LmN1cnJlbnQ/LnZhbHVlICE9PSB2YWx1ZSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRkKCdWYWx1ZSBpcyBjaGFuZ2luZzonLCB2YWx1ZSk7XG5cdFx0XHRpbnB1dEVsZW1lbnQuY3VycmVudC52YWx1ZSA9IHZhbHVlO1xuXHRcdFx0b25TZXQgJiYgb25TZXQodmFsdWUpO1xuXHRcdH1cblx0fSwgW3ZhbHVlXSk7XG5cblx0cmV0dXJuIGlucHV0RWxlbWVudDtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtNYXNrZWRJbnB1dCwgTWFza2VkSW5wdXRQcm9wc30gZnJvbSAnLi4vTWFza2VkSW5wdXQnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5pbnB1dHMuUGhvbmVJbnB1dCcpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBob25lSW5wdXRQcm9wcyB7XG5cdGV4dGVuc2lvbj86IGJvb2xlYW47XG5cdG9uQ2hhbmdlPzogKHZhbHVlPzogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUGhvbmVJbnB1dChwcm9wczogUGhvbmVJbnB1dFByb3BzICYgT21pdDxNYXNrZWRJbnB1dFByb3BzLCAnbWFzaycgfCAnb25DaGFuZ2UnPikge1xuXHRjb25zdCB7ZXh0ZW5zaW9uLCAuLi5yZXN0fSA9IHByb3BzO1xuXHRjb25zdCBtYXNrID0ge1xuXHRcdG1hc2s6IGV4dGVuc2lvbiA/ICcoKDk5OSkgOTk5LTk5OTlbIHg5OTk5XSl8KCs5ICg5OTkpIDk5OS05OTk5WyB4OTk5OV0pJyA6ICcoKDk5OSkgOTk5LTk5OTkpfCggKzkgKDk5OSkgOTk5LTk5OTkpJyxcblx0XHRncmVlZHk6IGZhbHNlLFxuXHRcdGF1dG9Vbm1hc2s6IHRydWUsXG5cdH07XG5cblx0cmV0dXJuIDxNYXNrZWRJbnB1dCB7Li4ucmVzdH0gbWFzaz17bWFza30gLz47XG59XG4iLCJleHBvcnQge1Bob25lSW5wdXR9IGZyb20gJy4vUGhvbmVJbnB1dCc7XG5leHBvcnQgdHlwZSB7UGhvbmVJbnB1dFByb3BzfSBmcm9tICcuL1Bob25lSW5wdXQnO1xuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge0NoaWxkcmVuLCBjbG9uZUVsZW1lbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7Rm9ybSwgUmFkaW8sIEZvcm1SYWRpbywgRm9ybUdyb3VwUHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuaW5wdXRzLlJhZGlvR3JvdXAnKTtcblxuZXhwb3J0IGludGVyZmFjZSBSYWRpb0dyb3VwUHJvcHMge1xuXHRjaGlsZHJlbj86IEpTWC5FbGVtZW50W10gfCBKU1guRWxlbWVudDtcblx0b25DaGFuZ2U/OiAodmFsdWU/OiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWQ7XG5cdHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmFkaW9Hcm91cChwcm9wczogUmFkaW9Hcm91cFByb3BzICYgT21pdDxGb3JtR3JvdXBQcm9wcywgJ2NoaWxkcmVuJz4pIHtcblx0Y29uc3Qge2NoaWxkcmVuLCBvbkNoYW5nZSwgdmFsdWUsIC4uLnJlc3R9ID0gcHJvcHM7XG5cblx0cmV0dXJuIChcblx0XHQ8Rm9ybS5Hcm91cCB7Li4ucmVzdH0+XG5cdFx0XHR7Q2hpbGRyZW4ubWFwKHByb3BzLmNoaWxkcmVuLCBjaGlsZCA9PiB7XG5cdFx0XHRcdGlmIChjaGlsZD8udHlwZSA9PT0gRm9ybVJhZGlvIHx8IGNoaWxkPy50eXBlID09PSBSYWRpbyB8fCBjaGlsZD8udHlwZSA9PT0gRm9ybS5SYWRpbykge1xuXHRcdFx0XHRcdHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcblx0XHRcdFx0XHRcdG9uQ2hhbmdlOiAoZXY6IGFueSwgYXJnczoge3ZhbHVlPzogc3RyaW5nIHwgbnVtYmVyfSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKGFyZ3MudmFsdWUpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGNoZWNrZWQ6IHZhbHVlID09PSBjaGlsZC5wcm9wcy52YWx1ZSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY2hpbGQ7XG5cdFx0XHR9KX1cblx0XHQ8L0Zvcm0uR3JvdXA+XG5cdCk7XG59XG4iLCJleHBvcnQge1JhZGlvR3JvdXB9IGZyb20gJy4vUmFkaW9Hcm91cCc7XG5leHBvcnQgdHlwZSB7UmFkaW9Hcm91cFByb3BzfSBmcm9tICcuL1JhZGlvR3JvdXAnO1xuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge3VzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTY3JpcHRlbENvbnRleHR9IGZyb20gJy4vU2NyaXB0ZWxDb250ZXh0JztcbmltcG9ydCB7U2NyaXB0ZWxTb2NrZXR9IGZyb20gJy4vc2NyaXB0ZWwnO1xuaW1wb3J0IHR5cGUge1NjcmlwdGVsUGVuU3R5bGV9IGZyb20gJy4vc2NyaXB0ZWwvZW51bXMnO1xuaW1wb3J0IHR5cGUge1JlbmRlcmVkSW1hZ2V9IGZyb20gJy4vc2NyaXB0ZWwvbWVzc2FnZXMnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5pbnB1dHMuU2NyaXB0ZWwnKTtcblxuZXhwb3J0IGludGVyZmFjZSBTY3JpcHRlbFByb3BzIHtcblx0b21uaXNjcmlwdFVybD86IHN0cmluZzsgLy8gRGVmYXVsdHMgdG8gJ3dzOi8vbG9jYWxob3N0OjgwODAnXG5cdGltYWdlVHlwZT86IHN0cmluZzsgLy8gRGVmYXVsdHMgdG8gJ2ltYWdlL3N2Zyt4bWwnLlxuXHRzY2FsZT86IG51bWJlcjsgLy8gRGVmYXVsdHMgdG8gMVxuXHRjcm9wPzogYm9vbGVhbjsgLy8gRGVmYXVsdHMgdG8gZmFsc2Vcblx0cGVuU3R5bGU/OiBTY3JpcHRlbFBlblN0eWxlOyAvLyBEZWZhdWx0cyB0byAnUGxhaW5QZW5TdHlsZSdcblx0Y2hpbGRyZW46IEpTWC5FbGVtZW50IHwgSlNYLkVsZW1lbnRbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNjcmlwdGVsKHtvbW5pc2NyaXB0VXJsLCBpbWFnZVR5cGUsIHNjYWxlLCBjcm9wLCBwZW5TdHlsZSwgY2hpbGRyZW59OiBTY3JpcHRlbFByb3BzKSB7XG5cdGNvbnN0IHNvY2tldCA9IHVzZVJlZjxTY3JpcHRlbFNvY2tldD4oKTtcblx0Y29uc3QgW3JlbmRlciwgc2V0UmVuZGVyXSA9IHVzZVN0YXRlPFJlbmRlcmVkSW1hZ2U+KCk7XG5cdGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcblx0Y29uc3QgW2lzU2lnbmluZywgc2V0SXNTaWduaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdHNvY2tldC5jdXJyZW50ID0gbmV3IFNjcmlwdGVsU29ja2V0KHtcblx0XHRcdG9tbmlzY3JpcHRVcmwsXG5cdFx0XHRpbWFnZVR5cGUsXG5cdFx0XHRzY2FsZSxcblx0XHRcdGNyb3AsXG5cdFx0XHRwZW5TdHlsZSxcblx0XHR9KTtcblxuXHRcdHNvY2tldC5jdXJyZW50Lm9uKCdyZW5kZXInLCBtc2cgPT4ge1xuXHRcdFx0c2V0UmVuZGVyKG1zZyk7XG5cdFx0XHRzZXRMb2FkaW5nKGZhbHNlKTtcblx0XHRcdHNldFJlbmRlcih1bmRlZmluZWQpOyAvLyB0b2RvIGxvb2sgYXQgdGhpcyBpbiBmdXR1cmVcblx0XHR9KTtcblx0XHRzb2NrZXQuY3VycmVudC5vbignb2tCdXR0b25Eb3duJywgKCkgPT4ge1xuXHRcdFx0c2V0TG9hZGluZyh0cnVlKTtcblx0XHR9KTtcblx0XHRzb2NrZXQuY3VycmVudC5vbignY2FuY2VsJywgKCkgPT4ge1xuXHRcdFx0c2V0TG9hZGluZyhmYWxzZSk7XG5cdFx0XHRzZXRSZW5kZXIodW5kZWZpbmVkKTtcblx0XHR9KTtcblx0XHRzb2NrZXQuY3VycmVudC5vbigncGVuTW92ZScsICgpID0+IHtcblx0XHRcdHNldElzU2lnbmluZyh0cnVlKTtcblx0XHR9KTtcblx0XHRzb2NrZXQuY3VycmVudC5vbigncGVuVXAnLCAoKSA9PiB7XG5cdFx0XHRzZXRJc1NpZ25pbmcoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGlmIChzb2NrZXQuY3VycmVudCkgc29ja2V0LmN1cnJlbnQuY2xvc2UoKTtcblx0XHR9O1xuXHR9LCBbb21uaXNjcmlwdFVybCwgaW1hZ2VUeXBlLCBzY2FsZSwgY3JvcCwgcGVuU3R5bGVdKTtcblxuXHRyZXR1cm4gPFNjcmlwdGVsQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17e3NvY2tldCwgcmVuZGVySW1hZ2U6IHJlbmRlciwgbG9hZGluZywgaXNTaWduaW5nfX0+e2NoaWxkcmVufTwvU2NyaXB0ZWxDb250ZXh0LlByb3ZpZGVyPjtcbn1cbiIsImltcG9ydCBSZWFjdCwge011dGFibGVSZWZPYmplY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtTY3JpcHRlbFNvY2tldH0gZnJvbSAnLi9zY3JpcHRlbCc7XG5pbXBvcnQgdHlwZSB7UmVuZGVyZWRJbWFnZX0gZnJvbSAnLi9zY3JpcHRlbC9tZXNzYWdlcyc7XG5cbmV4cG9ydCBjb25zdCBTY3JpcHRlbENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFxuXHR7c29ja2V0OiBNdXRhYmxlUmVmT2JqZWN0PFNjcmlwdGVsU29ja2V0IHwgdW5kZWZpbmVkPjsgcmVuZGVySW1hZ2U6IFJlbmRlcmVkSW1hZ2UgfCB1bmRlZmluZWQ7IGxvYWRpbmc6IGJvb2xlYW47IGlzU2lnbmluZzogYm9vbGVhbn0gfCB1bmRlZmluZWRcbj4odW5kZWZpbmVkKTtcbiIsImV4cG9ydCB7U2NyaXB0ZWx9IGZyb20gJy4vU2NyaXB0ZWwnO1xuZXhwb3J0IHR5cGUge1NjcmlwdGVsUHJvcHN9IGZyb20gJy4vU2NyaXB0ZWwnO1xuZXhwb3J0IHt3aXRoU2NyaXB0ZWx9IGZyb20gJy4vd2l0aFNjcmlwdGVsJztcbmV4cG9ydCB7U2NyaXB0ZWxQZW5TdHlsZSwgU2NyaXB0ZWxNZXNzYWdlQ2xhc3N9IGZyb20gJy4vc2NyaXB0ZWwvZW51bXMnO1xuIiwiZXhwb3J0IGVudW0gU2NyaXB0ZWxQZW5TdHlsZSB7XG5cdFBsYWluID0gJ1BsYWluUGVuU3R5bGUnLFxuXHRDaGlzZWwgPSAnQ2hpc2VsUGVuU3R5bGUnLFxuXHRJbmt3ZWxsID0gJ0lua3dlbGxQZW5TdHlsZScsXG59XG5cbmV4cG9ydCBlbnVtIFNjcmlwdGVsTWVzc2FnZUNsYXNzIHtcblx0Q29ubmVjdGlvbk9wZW4gPSAnQ29ubmVjdGlvbk9wZW4nLFxuXHREZXZpY2VPcGVuUmVxdWVzdCA9ICdEZXZpY2VPcGVuUmVxdWVzdCcsXG5cdERldmljZU9wZW5SZXNwb25zZSA9ICdEZXZpY2VPcGVuUmVzcG9uc2UnLFxuXHRSZW5kZXJlZEltYWdlID0gJ1JlbmRlcmVkSW1hZ2UnLFxuXHRTY3JpcHRlbEV4Y2VwdGlvbiA9ICdTY3JpcHRlbEV4Y2VwdGlvbicsXG5cdEJ1dHRvbkRvd24gPSAnQnV0dG9uRG93bicsXG5cdEJ1dHRvblByZXNzID0gJ0J1dHRvblByZXNzJyxcblx0UGVuTW92ZSA9ICdQZW5Nb3ZlJyxcblx0UGVuVXAgPSAnUGVuVXAnLFxufVxuIiwiLyogZ2xvYmFscyBXZWJTb2NrZXQ6IHRydWUgKi9cbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50ZW1pdHRlcjMnO1xuaW1wb3J0IHtTY3JpcHRlbE1lc3NhZ2VDbGFzcywgU2NyaXB0ZWxQZW5TdHlsZX0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7Q29ubmVjdGlvbk9wZW4sIERldmljZU9wZW5SZXNwb25zZSwgTWVzc2FnZSwgUmVuZGVyZWRJbWFnZX0gZnJvbSAnLi9tZXNzYWdlcyc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5TY3JpcHRlbC5zY3JpcHRlbCcpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmlwdGVsU29ja2V0QXJncyB7XG5cdG9tbmlzY3JpcHRVcmw/OiBzdHJpbmc7IC8vIERlZmF1bHRzIHRvICd3czovL2xvY2FsaG9zdDo4MDgwJ1xuXHRpbWFnZVR5cGU/OiBzdHJpbmc7IC8vIERlZmF1bHRzIHRvICdpbWFnZS9zdmcreG1sJy5cblx0c2NhbGU/OiBudW1iZXI7IC8vIERlZmF1bHRzIHRvIDFcblx0Y3JvcD86IGJvb2xlYW47IC8vIERlZmF1bHRzIHRvIGZhbHNlXG5cdHBlblN0eWxlPzogU2NyaXB0ZWxQZW5TdHlsZTsgLy8gRGVmYXVsdHMgdG8gJ1BsYWluUGVuU3R5bGUnXG5cdHJlbmRlcj86ICgpID0+IHZvaWQ7XG59XG5cbmZ1bmN0aW9uIHNlcnZlckNvbm5lY3RlZChtc2c6IENvbm5lY3Rpb25PcGVuLCBzb2NrZXQ6IFdlYlNvY2tldCkge1xuXHRkKCdTZXJ2ZXIgY29ubmVjdGVkJyk7XG5cdGlmIChtc2cuc2VydmVySW5mby5kZXZpY2VzLmxlbmd0aCA+IDApIHtcblx0XHQvLyBHcmFiIHRoZSBmaXJzdCBhdmFpbGFibGUgZGV2aWNlXG5cdFx0Y29uc3QgZGV2aWNlID0gbXNnLnNlcnZlckluZm8uZGV2aWNlc1swXTtcblx0XHRzb2NrZXQuc2VuZChcblx0XHRcdEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0X2NsYXNzOiAnRGV2aWNlT3BlblJlcXVlc3QnLFxuXHRcdFx0XHR1dWlkOiBkZXZpY2UudXVpZCxcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZGV2aWNlQ29ubmVjdGVkKG1zZzogRGV2aWNlT3BlblJlc3BvbnNlLCBzb2NrZXQ6IFdlYlNvY2tldCwgYXJnczogU2NyaXB0ZWxTb2NrZXRBcmdzKSB7XG5cdGQoYERldmljZSBjb25uZWN0ZWQ6ICR7bXNnLmRldmljZS51dWlkfWApO1xuXHRjb25zdCB7aW1hZ2VUeXBlLCBzY2FsZSwgY3JvcCwgcGVuU3R5bGV9ID0gYXJncztcblx0c29ja2V0LnNlbmQoXG5cdFx0SlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0X2NsYXNzOiAnUmVuZGVyU2V0dGluZ3NVcGRhdGVSZXF1ZXN0Jyxcblx0XHRcdHJlbmRlclNldHRpbmdzOiB7XG5cdFx0XHRcdF9jbGFzczogJ1JlbmRlclNldHRpbmdzJyxcblx0XHRcdFx0dHlwZTogaW1hZ2VUeXBlIHx8ICdpbWFnZS9zdmcreG1sJyxcblx0XHRcdFx0c2NhbGU6IHNjYWxlIHx8IDEsXG5cdFx0XHRcdGNyb3A6IGNyb3AgfHwgZmFsc2UsXG5cdFx0XHRcdHBlblN0eWxlOiBwZW5TdHlsZVxuXHRcdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0XHRyZW5kZXJGdW5jdGlvbjogcGVuU3R5bGUsXG5cdFx0XHRcdFx0ICB9XG5cdFx0XHRcdFx0OiB7XG5cdFx0XHRcdFx0XHRcdHJlbmRlckZ1bmN0aW9uOiBTY3JpcHRlbFBlblN0eWxlLlBsYWluLFxuXHRcdFx0XHRcdCAgfSxcblx0XHRcdH0sXG5cdFx0fSksXG5cdCk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlcihtc2c6IFJlbmRlcmVkSW1hZ2UsIGFyZ3M6IFNjcmlwdGVsU29ja2V0QXJncywgZXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXIpIHtcblx0ZChgUmVuZGVyZWQgaW1hZ2U6ICR7bXNnLnR5cGV9ICR7bXNnLndpZHRofXgke21zZy5oZWlnaHR9YCk7XG5cdGV2ZW50RW1pdHRlci5lbWl0KCdyZW5kZXInLCBtc2cpO1xufVxuXG5leHBvcnQgY2xhc3MgU2NyaXB0ZWxTb2NrZXQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuXHRwcml2YXRlIHNvY2tldDogV2ViU29ja2V0O1xuXHRwcml2YXRlIG9wdGlvbnM6IFNjcmlwdGVsU29ja2V0QXJncztcblxuXHRjb25zdHJ1Y3RvcihhcmdzOiBTY3JpcHRlbFNvY2tldEFyZ3MpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5vcHRpb25zID0gYXJncztcblxuXHRcdHRoaXMuc29ja2V0ID0gbmV3IFdlYlNvY2tldChhcmdzLm9tbmlzY3JpcHRVcmwgfHwgJ3dzOi8vbG9jYWxob3N0OjgwODAnKTtcblxuXHRcdHRoaXMuc29ja2V0Lm9ub3BlbiA9ICgpID0+IHtcblx0XHRcdGQoJ1NvY2tldCBvcGVuJyk7XG5cdFx0fTtcblxuXHRcdHRoaXMuc29ja2V0Lm9uY2xvc2UgPSAoKSA9PiB7XG5cdFx0XHRkKCdTb2NrZXQgY2xvc2VkJyk7XG5cdFx0fTtcblxuXHRcdHRoaXMuc29ja2V0Lm9ubWVzc2FnZSA9IGV2ID0+IHtcblx0XHRcdGNvbnN0IG1zZyA9IEpTT04ucGFyc2UoZXYuZGF0YSkgYXMgTWVzc2FnZTtcblx0XHRcdGlmICghbXNnLl9jbGFzcykgcmV0dXJuOyAvLyBBIG1lc3NhZ2Ugd2l0aCBubyBjbGFzcy5cblxuXHRcdFx0c3dpdGNoIChtc2cuX2NsYXNzKSB7XG5cdFx0XHRcdGNhc2UgU2NyaXB0ZWxNZXNzYWdlQ2xhc3MuQ29ubmVjdGlvbk9wZW46XG5cdFx0XHRcdFx0c2VydmVyQ29ubmVjdGVkKG1zZywgdGhpcy5zb2NrZXQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFNjcmlwdGVsTWVzc2FnZUNsYXNzLkRldmljZU9wZW5SZXNwb25zZTpcblx0XHRcdFx0XHRkZXZpY2VDb25uZWN0ZWQobXNnLCB0aGlzLnNvY2tldCwgdGhpcy5vcHRpb25zKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBTY3JpcHRlbE1lc3NhZ2VDbGFzcy5SZW5kZXJlZEltYWdlOlxuXHRcdFx0XHRcdHJlbmRlcihtc2csIHRoaXMub3B0aW9ucywgdGhpcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgU2NyaXB0ZWxNZXNzYWdlQ2xhc3MuU2NyaXB0ZWxFeGNlcHRpb246XG5cdFx0XHRcdFx0ZChgU2NyaXB0ZWwgRXhjZXB0aW9uIEVycm9yOiAke21zZy5tZXNzYWdlfWApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgU2NyaXB0ZWxNZXNzYWdlQ2xhc3MuQnV0dG9uUHJlc3M6XG5cdFx0XHRcdFx0aWYgKG1zZy5sYWJlbCA9PT0gJ0NhbmNlbCcpIHRoaXMuZW1pdCgnY2FuY2VsJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgU2NyaXB0ZWxNZXNzYWdlQ2xhc3MuQnV0dG9uRG93bjpcblx0XHRcdFx0XHRpZiAobXNnLmxhYmVsID09PSAnT0snKSB0aGlzLmVtaXQoJ29rQnV0dG9uRG93bicpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFNjcmlwdGVsTWVzc2FnZUNsYXNzLlBlbk1vdmU6XG5cdFx0XHRcdFx0dGhpcy5lbWl0KCdwZW5Nb3ZlJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgU2NyaXB0ZWxNZXNzYWdlQ2xhc3MuUGVuVXA6XG5cdFx0XHRcdFx0dGhpcy5lbWl0KCdwZW5VcCcpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRjYWxpYnJhdGUoKSB7XG5cdFx0ZCgnY2FsaWJyYXRlJyk7XG5cdFx0dGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7X2NsYXNzOiAnRm9yY2VSZWNhbGlicmF0ZSd9KSk7XG5cdH1cblxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLnNvY2tldC5jbG9zZSgpO1xuXHR9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTY3JpcHRlbCwgU2NyaXB0ZWxQcm9wc30gZnJvbSAnLi9TY3JpcHRlbCc7XG5cbi8qKlxuICogQSBIb0MgdGhhdCBwcm92aWRlcyBhIGNvbm5lY3Rpb24gdG8gYSBTY3JpcHRlbCBPbW5pc2NyaXB0IGRldmljZS5cbiAqIFlvdSBjYW4gb25seSBoYXZlIGEgc2luZ2xlIGNvbm5lY3Rpb24gb3BlbiBhdCBhIHRpbWUuXG4gKiBAcGFyYW0gV3JhcHBlZENvbXBvbmVudFxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFNjcmlwdGVsKFdyYXBwZWRDb21wb25lbnQ6IGFueSwgc2NyaXB0ZWxQcm9wczogU2NyaXB0ZWxQcm9wcykge1xuXHRyZXR1cm4gKHByb3BzOiBhbnkpID0+IChcblx0XHQ8U2NyaXB0ZWwgey4uLnNjcmlwdGVsUHJvcHN9PlxuXHRcdFx0PFdyYXBwZWRDb21wb25lbnQgey4uLnByb3BzfSAvPlxuXHRcdDwvU2NyaXB0ZWw+XG5cdCk7XG59XG4iLCJpbXBvcnQgdHlwZSB7U2NyaXB0ZWxTY2hlbWFUeXBlfSBmcm9tICdAdGh4L3l1cC10eXBlcyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0LCB7dXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtCdXR0b24sIEltYWdlfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQge1NjcmlwdGVsQ29udGV4dH0gZnJvbSAnLi4vU2NyaXB0ZWwvU2NyaXB0ZWxDb250ZXh0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuaW5wdXRzLlNjcmlwdGVsSW5wdXQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBTY3JpcHRlbElucHV0UHJvcHMge1xuXHR2YWx1ZT86IFNjcmlwdGVsU2NoZW1hVHlwZTtcblx0b25DaGFuZ2U/OiAodmFsdWU/OiBTY3JpcHRlbFNjaGVtYVR5cGUpID0+IHZvaWQ7XG5cdGJ1dHRvblRleHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTY3JpcHRlbElucHV0KHByb3BzOiBTY3JpcHRlbElucHV0UHJvcHMpIHtcblx0Y29uc3Qge3ZhbHVlLCBvbkNoYW5nZSwgYnV0dG9uVGV4dCA9ICdFbnRlciBTaWduYXR1cmUnfSA9IHByb3BzO1xuXHRjb25zdCBjdHggPSB1c2VDb250ZXh0KFNjcmlwdGVsQ29udGV4dCk7XG5cblx0Y29uc3QgW2VudGVyU2lnbmF0dXJlLCBzZXRFbnRlclNpZ25hdHVyZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoZW50ZXJTaWduYXR1cmUpIHtcblx0XHRcdGlmIChvbkNoYW5nZSAmJiBjdHg/LnJlbmRlckltYWdlKSB7XG5cdFx0XHRcdHNldEVudGVyU2lnbmF0dXJlKGZhbHNlKTtcblx0XHRcdFx0aWYgKGN0eC5yZW5kZXJJbWFnZS50eXBlID09PSAnaW1hZ2Uvc3ZnK3htbCcgfHwgY3R4LnJlbmRlckltYWdlLnR5cGUgPT09ICdpbWFnZS9wbmcnKSB7XG5cdFx0XHRcdFx0b25DaGFuZ2Uoe1xuXHRcdFx0XHRcdFx0dHlwZTogY3R4LnJlbmRlckltYWdlLnR5cGUsXG5cdFx0XHRcdFx0XHR3aWR0aDogY3R4LnJlbmRlckltYWdlLndpZHRoLFxuXHRcdFx0XHRcdFx0aGVpZ2h0OiBjdHgucmVuZGVySW1hZ2UuaGVpZ2h0LFxuXHRcdFx0XHRcdFx0dGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuXHRcdFx0XHRcdFx0ZGF0YTogY3R4LnJlbmRlckltYWdlLmRhdGEsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvbkNoYW5nZSAmJiAhY3R4KSB7XG5cdFx0XHRcdG9uQ2hhbmdlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCBbY3R4XSk7XG5cblx0aWYgKGVudGVyU2lnbmF0dXJlKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXY+XG5cdFx0XHRcdDxkaXY+e2N0eD8uaXNTaWduaW5nID8gJ3NpZ25pbmcuLi4nIDogJ0VudGVyIGEgc2lnbmF0dXJlIGFuZCBjbGljayBPSy4nfTwvZGl2PlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdFx0c2V0RW50ZXJTaWduYXR1cmUoZmFsc2UpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0Y29sb3I9XCJibGFja1wiXG5cdFx0XHRcdFx0bG9hZGluZz17Y3R4Py5sb2FkaW5nfVxuXHRcdFx0XHRcdGRpc2FibGVkPXtjdHg/LmxvYWRpbmd9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHRDYW5jZWxcblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDxCdXR0b24gc2l6ZT1cIm1pbmlcIiBhcz1cImFcIiBiYXNpYyBvbkNsaWNrPXsoKSA9PiBjdHg/LnNvY2tldC5jdXJyZW50Py5jYWxpYnJhdGUoKX0gZGlzYWJsZWQ9e2N0eD8ubG9hZGluZ30+XG5cdFx0XHRcdFx0Q2FsaWJyYXRlXG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fVxuXG5cdGlmICh2YWx1ZSAmJiB2YWx1ZS5kYXRhKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXY+XG5cdFx0XHRcdDxJbWFnZSBzaXplPVwibWVkaXVtXCIgc3JjPXt2YWx1ZS5kYXRhfSBib3JkZXJlZCAvPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0c2l6ZT1cIm1pbmlcIlxuXHRcdFx0XHRcdGNvbXBhY3Rcblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRzZXRFbnRlclNpZ25hdHVyZShmYWxzZSk7XG5cdFx0XHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKCk7XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdFJlc2V0XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiA8QnV0dG9uIG9uQ2xpY2s9eygpID0+IHNldEVudGVyU2lnbmF0dXJlKHRydWUpfT57YnV0dG9uVGV4dH08L0J1dHRvbj47XG59XG4iLCJleHBvcnQge1NjcmlwdGVsSW5wdXR9IGZyb20gJy4vU2NyaXB0ZWxJbnB1dCc7XG5leHBvcnQgdHlwZSB7U2NyaXB0ZWxJbnB1dFByb3BzfSBmcm9tICcuL1NjcmlwdGVsSW5wdXQnO1xuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtJY29uLCBJbnB1dCwgU2VtYW50aWNDT0xPUlN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCBTSU4gZnJvbSAnc29jaWFsLWluc3VyYW5jZS1udW1iZXInO1xuaW1wb3J0IHR5cGUge01hc2tlZElucHV0UHJvcHN9IGZyb20gJy4uL01hc2tlZElucHV0JztcbmltcG9ydCB7dXNlTWFza2VkSW5wdXR9IGZyb20gJy4uL01hc2tlZElucHV0L3VzZU1hc2tlZElucHV0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuaW5wdXRzLlNpbklucHV0Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2luSW5wdXRQcm9wcyBleHRlbmRzIE9taXQ8TWFza2VkSW5wdXRQcm9wcywgJ21hc2snPiB7XG5cdHZhbHVlPzogc3RyaW5nO1xuXHRvbkNoYW5nZSh2YWx1ZT86IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTaW5JbnB1dChwcm9wczogU2luSW5wdXRQcm9wcykge1xuXHRjb25zdCB7dmFsdWUsIG9uQ2hhbmdlLCAuLi5yZXN0fSA9IHByb3BzO1xuXHRjb25zdCBbY29sb3IsIHNldENvbG9yXSA9IHVzZVN0YXRlPFNlbWFudGljQ09MT1JTPignYmxhY2snKTtcblxuXHRjb25zdCBjaGVja1ZhbGlkYXRpb24gPSB1c2VDYWxsYmFjaygodmFsdWVBcnJheTogc3RyaW5nW10pID0+IHtcblx0XHRjb25zdCBudW0gPSB2YWx1ZUFycmF5LmpvaW4oJycpLnJlcGxhY2VBbGwoLyhffFxcc3wtKS9nLCAnJyk7XG5cdFx0Y29uc3QgdmFsaWRhdGUgPSBuZXcgU0lOKG51bSk7XG5cdFx0aWYgKG51bS5sZW5ndGggPiAwKSB7XG5cdFx0XHRpZiAodmFsaWRhdGUuaXNWYWxpZCgpKSB7XG5cdFx0XHRcdHNldENvbG9yKCdncmVlbicpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2V0Q29sb3IoJ3JlZCcpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRDb2xvcignYmxhY2snKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbGlkYXRlLmlzVmFsaWQoKTtcblx0fSwgW10pO1xuXG5cdGNvbnN0IG1hc2s6IE1hc2tlZElucHV0UHJvcHNbJ21hc2snXSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdG1hc2s6ICc5OTktOTk5LTk5OScsXG5cdFx0XHRpc0NvbXBsZXRlOiBjaGVja1ZhbGlkYXRpb24sXG5cdFx0XHRncmVlZHk6IGZhbHNlLFxuXHRcdFx0YXV0b1VubWFzazogdHJ1ZSxcblx0XHR9KSxcblx0XHRbY2hlY2tWYWxpZGF0aW9uXSxcblx0KTtcblxuXHRjb25zdCBjYXJkTnVtYmVyUmVmID0gdXNlTWFza2VkSW5wdXQoe1xuXHRcdG1hc2ssXG5cdFx0dmFsdWUsXG5cdFx0b25DaGFuZ2U6IHYgPT4ge1xuXHRcdFx0b25DaGFuZ2UgJiYgb25DaGFuZ2Uodik7XG5cdFx0fSxcblx0XHRvblNldDogdiA9PiB7XG5cdFx0XHRjaGVja1ZhbGlkYXRpb24oW3YgfHwgJyddKTtcblx0XHR9LFxuXHR9KTtcblxuXHRyZXR1cm4gKFxuXHRcdDxJbnB1dCB7Li4ucmVzdH0gaWNvbj5cblx0XHRcdDxpbnB1dCByZWY9e2NhcmROdW1iZXJSZWZ9IC8+XG5cdFx0XHQ8SWNvbiBuYW1lPVwiaWQgYmFkZ2VcIiBjb2xvcj17Y29sb3J9IHNpemU9XCJsYXJnZVwiIC8+XG5cdFx0PC9JbnB1dD5cblx0KTtcbn1cbiIsImV4cG9ydCB7U2luSW5wdXR9IGZyb20gJy4vU2luSW5wdXQnO1xuZXhwb3J0IHR5cGUge1NpbklucHV0UHJvcHN9IGZyb20gJy4vU2luSW5wdXQnO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7RHJvcGRvd259IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB0eXBlIHtEcm9wZG93blByb3BzfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQgdHlwZSB7VGFibGVDZWxsUHJvcHN9IGZyb20gJy4vVGFibGVJbnB1dCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBEcm9wZG93bkNlbGw8RCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pihkcm9wZG93blByb3BzOiBEcm9wZG93blByb3BzKSB7XG5cdHJldHVybiBmdW5jdGlvbiBEcm9wZG93bkNlbGxGbihwcm9wczogVGFibGVDZWxsUHJvcHM8RD4pIHtcblx0XHRjb25zdCB7XG5cdFx0XHR2YWx1ZSxcblx0XHRcdHJvdzoge2luZGV4OiByb3dJbmRleH0sXG5cdFx0XHRjb2x1bW46IHtpZH0sXG5cdFx0XHR1cGRhdGVEYXRhLFxuXHRcdH0gPSBwcm9wcztcblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0XHRjb25zdCB7dmFsdWU6IHYsIG9uQ2hhbmdlLCAuLi5yZXN0fSA9IGRyb3Bkb3duUHJvcHM7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PERyb3Bkb3duXG5cdFx0XHRcdHsuLi5yZXN0fVxuXHRcdFx0XHR2YWx1ZT17dmFsdWV9XG5cdFx0XHRcdG9uQ2hhbmdlPXsoZXZlbnQsIHZhbCkgPT4ge1xuXHRcdFx0XHRcdHVwZGF0ZURhdGEocm93SW5kZXgsIGlkLCB2YWwudmFsdWUpO1xuXHRcdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoZXZlbnQsIHZhbCk7XG5cdFx0XHRcdH19XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH07XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtDZWxsUHJvcHMsIFJlbmRlcmVyfSBmcm9tICdyZWFjdC10YWJsZSc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5UYWJsZUlucHV0LkhvdmVyQ2VsbCcpO1xuXG5pbnRlcmZhY2UgSG92ZXJDZWxsT3B0aW9uczxEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcblx0QWN0aW9uOiBSZW5kZXJlcjxDZWxsUHJvcHM8RD4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gSG92ZXJDZWxsPEQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ob3B0aW9uczogSG92ZXJDZWxsT3B0aW9uczxEPikge1xuXHRyZXR1cm4gZnVuY3Rpb24gSG92ZXJDZWxsRm4ocHJvcHM6IENlbGxQcm9wczxEPikge1xuXHRcdGNvbnN0IHtBY3Rpb259ID0gb3B0aW9ucztcblxuXHRcdC8vIEB0cy1leHBlY3QtZXJyb3Jcblx0XHRpZiAocHJvcHMuaG92ZXJSb3cgPT09IHByb3BzLnJvdy5pZCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PGRpdiBzdHlsZT17e3RleHRBbGlnbjogJ3JpZ2h0J319PlxuXHRcdFx0XHRcdHsvKiBAdHMtZXhwZWN0LWVycm9yICovfVxuXHRcdFx0XHRcdDxBY3Rpb24gey4uLnByb3BzfSAvPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9O1xufVxuIiwiaW1wb3J0IHtmb3JtYXRNb25leX0gZnJvbSAnQHRoeC9tb25leSc7XG5pbXBvcnQgdHlwZSBNb25leSBmcm9tICdqcy1tb25leSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge0NlbGxQcm9wc30gZnJvbSAncmVhY3QtdGFibGUnO1xuXG5pbnRlcmZhY2UgTW9uZXlDZWxsT3B0aW9uczxEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcblx0LyoqIElmIHByb3ZpZGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgb3ZlcnJpZGUgdGhlIE1vbmV5IHZhbHVlIGRpc3BsYXllZCAqL1xuXHRvdmVycmlkZVZhbHVlPzogKHByb3BzOiBDZWxsUHJvcHM8RCwgTW9uZXk+KSA9PiBNb25leTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1vbmV5Q2VsbDxEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KG9wdGlvbnM/OiBNb25leUNlbGxPcHRpb25zPEQ+KSB7XG5cdHJldHVybiBmdW5jdGlvbiBNb25leUNlbGxGbihwcm9wczogQ2VsbFByb3BzPEQsIE1vbmV5Pikge1xuXHRcdHJldHVybiA8ZGl2IHN0eWxlPXt7dGV4dEFsaWduOiAncmlnaHQnfX0+e2Zvcm1hdE1vbmV5KG9wdGlvbnM/Lm92ZXJyaWRlVmFsdWUgPyBvcHRpb25zLm92ZXJyaWRlVmFsdWUocHJvcHMpIDogcHJvcHMudmFsdWUpfTwvZGl2Pjtcblx0fTtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgdHlwZSBNb25leSBmcm9tICdqcy1tb25leSc7XG5pbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtNb25leUlucHV0fSBmcm9tICcuLi8uLi9tb25leS9Nb25leUlucHV0JztcbmltcG9ydCB0eXBlIHtUYWJsZUNlbGxQcm9wc30gZnJvbSAnLi9UYWJsZUlucHV0JztcbmltcG9ydCB0eXBlIHtBZGRSb3dPblRhYklmfSBmcm9tICcuL2FkZFJvd09uVGFiJztcbmltcG9ydCB7YWRkUm93T25UYWJ9IGZyb20gJy4vYWRkUm93T25UYWInO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5pbnB1dHMuVGFibGVJbnB1dC5Nb25leUVkaXRDZWxsJyk7XG5cbmludGVyZmFjZSBNb25leUVkaXRDZWxsT3B0aW9uczxEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcblx0LyoqIElmIGZ1bmN0aW9uIGlzIHByZXNlbnQsIGFuZCByZXR1cm5zIHRydWUsIHdpbGwgYWRkIGEgbmV3IHJvdyBpZiB0YWIgaXMgcHJlc3NlZCBvbiB0aGUgbGFzdCByb3cgKi9cblx0YWRkUm93T25UYWJJZj86IEFkZFJvd09uVGFiSWY8RCwgTW9uZXk+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTW9uZXlFZGl0Q2VsbDxEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KG9wdHM/OiBNb25leUVkaXRDZWxsT3B0aW9uczxEPikge1xuXHRyZXR1cm4gZnVuY3Rpb24gTW9uZXlFZGl0Q2VsbEZuKHByb3BzOiBUYWJsZUNlbGxQcm9wczxELCBNb25leT4pIHtcblx0XHRjb25zdCB7XG5cdFx0XHR2YWx1ZTogaW5pdGlhbFZhbHVlLFxuXHRcdFx0cm93OiB7aW5kZXg6IHJvd0luZGV4fSxcblx0XHRcdGNvbHVtbjoge2lkfSxcblx0XHRcdHVwZGF0ZURhdGEsXG5cdFx0fSA9IHByb3BzO1xuXG5cdFx0Y29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZShpbml0aWFsVmFsdWUpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxNb25leUlucHV0XG5cdFx0XHRcdGZsdWlkXG5cdFx0XHRcdHRyYW5zcGFyZW50XG5cdFx0XHRcdHZhbHVlPXt2YWx1ZX1cblx0XHRcdFx0b25DaGFuZ2U9e3NldFZhbHVlfVxuXHRcdFx0XHRvbkJsdXI9eygpID0+IHtcblx0XHRcdFx0XHR1cGRhdGVEYXRhKHJvd0luZGV4LCBpZCwgdmFsdWUpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRvbktleURvd249eyhldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gYWRkUm93T25UYWIoZXZlbnQsIHZhbHVlLCBwcm9wcywgb3B0cz8uYWRkUm93T25UYWJJZil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH07XG59XG4iLCJpbXBvcnQge2Zvcm1hdE1vbmV5LCB0b01vbmV5fSBmcm9tICdAdGh4L21vbmV5JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7SWRUeXBlLCBUYWJsZUluc3RhbmNlfSBmcm9tICdyZWFjdC10YWJsZSc7XG5cbmludGVyZmFjZSBNb25leVN1bUZvb3Rlck9wdGlvbnM8QSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG5cdGlkOiBJZFR5cGU8QT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNb25leVN1bUZvb3RlcjxBIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KG9wdGlvbnM6IE1vbmV5U3VtRm9vdGVyT3B0aW9uczxBPikge1xuXHRjb25zdCB7aWR9ID0gb3B0aW9ucyB8fCB7fTtcblxuXHRyZXR1cm4gKGluZm86IFRhYmxlSW5zdGFuY2U8QT4pID0+IHtcblx0XHRjb25zdCBzdW0gPSBpbmZvLnJvd3MucmVkdWNlKChtZW1vLCByb3cpID0+IG1lbW8uYWRkKHJvdy52YWx1ZXNbaWRdKSwgdG9Nb25leSgpKTtcblx0XHRyZXR1cm4gPGRpdiBzdHlsZT17e3RleHRBbGlnbjogJ3JpZ2h0J319Pntmb3JtYXRNb25leShzdW0pfTwvZGl2Pjtcblx0fTtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtJbnB1dCwgSW5wdXRQcm9wc30gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHR5cGUge1RhYmxlQ2VsbFByb3BzfSBmcm9tICcuL1RhYmxlSW5wdXQnO1xuaW1wb3J0IHR5cGUge0FkZFJvd09uVGFiSWZ9IGZyb20gJy4vYWRkUm93T25UYWInO1xuaW1wb3J0IHthZGRSb3dPblRhYn0gZnJvbSAnLi9hZGRSb3dPblRhYic7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5UYWJsZUlucHV0LlN0cmluZ0VkaXRDZWxsJyk7XG5cbmludGVyZmFjZSBTdHJpbmdFZGl0Q2VsbE9wdGlvbnM8RCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG5cdC8qKiBPdmVycmlkZSBTZW1hbnRpY1VJIElucHV0IHByb3BzICovXG5cdGlucHV0UHJvcHM/OiBJbnB1dFByb3BzO1xuXHQvKiogSWYgZnVuY3Rpb24gaXMgcHJlc2VudCwgYW5kIHJldHVybnMgdHJ1ZSwgd2lsbCBhZGQgYSBuZXcgcm93IGlmIHRhYiBpcyBwcmVzc2VkIG9uIHRoZSBsYXN0IHJvdyAqL1xuXHRhZGRSb3dPblRhYklmPzogQWRkUm93T25UYWJJZjxELCBzdHJpbmc+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU3RyaW5nRWRpdENlbGw8RCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihvcHRpb25zPzogU3RyaW5nRWRpdENlbGxPcHRpb25zPEQ+KSB7XG5cdGNvbnN0IHtpbnB1dFByb3BzLCBhZGRSb3dPblRhYklmfSA9IG9wdGlvbnMgfHwge307XG5cblx0cmV0dXJuIGZ1bmN0aW9uIFN0cmluZ0VkaXRDZWxsRm4ocHJvcHM6IFRhYmxlQ2VsbFByb3BzPEQsIHN0cmluZz4pIHtcblx0XHRjb25zdCB7XG5cdFx0XHR2YWx1ZTogaW5pdGlhbFZhbHVlLFxuXHRcdFx0cm93OiB7aW5kZXh9LFxuXHRcdFx0Y29sdW1uOiB7aWR9LFxuXHRcdFx0dXBkYXRlRGF0YSxcblx0XHR9ID0gcHJvcHM7XG5cblx0XHRjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlKGluaXRpYWxWYWx1ZSk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PElucHV0XG5cdFx0XHRcdGZsdWlkXG5cdFx0XHRcdHRyYW5zcGFyZW50XG5cdFx0XHRcdHsuLi5pbnB1dFByb3BzfVxuXHRcdFx0XHR2YWx1ZT17dmFsdWV9XG5cdFx0XHRcdG9uQ2hhbmdlPXsoZXYsIHYpID0+IHtcblx0XHRcdFx0XHRzZXRWYWx1ZSh2LnZhbHVlKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0b25CbHVyPXsoKSA9PiB7XG5cdFx0XHRcdFx0dXBkYXRlRGF0YShpbmRleCwgaWQsIHZhbHVlKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0b25LZXlEb3duPXsoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IGFkZFJvd09uVGFiKGV2ZW50LCB2YWx1ZSwgcHJvcHMsIGFkZFJvd09uVGFiSWYpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9O1xufVxuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7RmllbGRBcnJheSwgRmllbGRBcnJheVJlbmRlclByb3BzfSBmcm9tICdmb3JtaWsnO1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvanN4LWtleSAqL1xuaW1wb3J0IFJlYWN0LCB7dXNlTWVtbywgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG5cdENlbGxQcm9wR2V0dGVyLFxuXHRDZWxsUHJvcHMsXG5cdENvbHVtbixcblx0Rm9vdGVyR3JvdXBQcm9wR2V0dGVyLFxuXHRGb290ZXJQcm9wR2V0dGVyLFxuXHRIZWFkZXJHcm91cFByb3BHZXR0ZXIsXG5cdEhlYWRlclByb3BHZXR0ZXIsXG5cdFJvd1Byb3BHZXR0ZXIsXG5cdFRhYmxlQm9keVByb3BHZXR0ZXIsXG5cdHVzZVRhYmxlLFxufSBmcm9tICdyZWFjdC10YWJsZSc7XG5pbXBvcnQge1RhYmxlLCBUYWJsZVByb3BzfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5UYWJsZUlucHV0Jyk7XG5cbnR5cGUgRGVmYXVsdFRhYmxlVHlwZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5pbnRlcmZhY2UgVGFibGVJbnB1dFByb3BzPEEgZXh0ZW5kcyBEZWZhdWx0VGFibGVUeXBlPiB7XG5cdG5hbWU6IHN0cmluZztcblx0dmFsdWVzOiBBW107XG5cdGNvbHVtbnM6IENvbHVtbjxBPltdO1xuXHRzZXRGaWVsZFZhbHVlOiAoZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSwgc2hvdWxkVmFsaWRhdGU/OiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuXHRjcmVhdGVSb3c6ICgpID0+IEE7XG5cdHRhYmxlUHJvcHM/OiBUYWJsZVByb3BzO1xuXHRoZWFkZXJSb3dQcm9wcz86IEhlYWRlckdyb3VwUHJvcEdldHRlcjxBPjtcblx0aGVhZGVyQ2VsbFByb3BzPzogSGVhZGVyUHJvcEdldHRlcjxBPjtcblx0Zm9vdGVyUm93UHJvcHM/OiBGb290ZXJHcm91cFByb3BHZXR0ZXI8QT47XG5cdGZvb3RlckNlbGxQcm9wcz86IEZvb3RlclByb3BHZXR0ZXI8QT47XG5cdGJvZHlQcm9wcz86IFRhYmxlQm9keVByb3BHZXR0ZXI8QT47XG5cdHJvd1Byb3BzPzogUm93UHJvcEdldHRlcjxBPjtcblx0Y2VsbFByb3BzPzogQ2VsbFByb3BHZXR0ZXI8QT47XG59XG5cbmludGVyZmFjZSBUYWJsZUlucHV0VGFibGVQcm9wczxBIGV4dGVuZHMgRGVmYXVsdFRhYmxlVHlwZT4gZXh0ZW5kcyBUYWJsZUlucHV0UHJvcHM8QT4ge1xuXHRhcnJheUhlbHBlcnM6IEZpZWxkQXJyYXlSZW5kZXJQcm9wcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUNlbGxQcm9wczxEIGV4dGVuZHMgRGVmYXVsdFRhYmxlVHlwZSwgViA9IGFueT4gZXh0ZW5kcyBDZWxsUHJvcHM8RCwgVj4ge1xuXHRhcnJheUhlbHBlcnM6IEZpZWxkQXJyYXlSZW5kZXJQcm9wcztcblx0YWRkUm93OiAoKSA9PiB2b2lkO1xuXHR1cGRhdGVEYXRhOiAoaW5kZXg6IG51bWJlciwgaWQ6IHN0cmluZywgdmFsdWU6IFYpID0+IHZvaWQ7XG59XG5cbmZ1bmN0aW9uIFRhYmxlSW5wdXRUYWJsZTxBIGV4dGVuZHMgRGVmYXVsdFRhYmxlVHlwZT4ocHJvcHM6IFRhYmxlSW5wdXRUYWJsZVByb3BzPEE+KSB7XG5cdGNvbnN0IHtcblx0XHRuYW1lLFxuXHRcdGNvbHVtbnMsXG5cdFx0dmFsdWVzLFxuXHRcdGFycmF5SGVscGVycyxcblx0XHRzZXRGaWVsZFZhbHVlLFxuXHRcdGNyZWF0ZVJvdyxcblx0XHR0YWJsZVByb3BzLFxuXHRcdGhlYWRlclJvd1Byb3BzLFxuXHRcdGhlYWRlckNlbGxQcm9wcyxcblx0XHRib2R5UHJvcHMsXG5cdFx0cm93UHJvcHMsXG5cdFx0Y2VsbFByb3BzLFxuXHRcdGZvb3RlckNlbGxQcm9wcyxcblx0XHRmb290ZXJSb3dQcm9wcyxcblx0fSA9IHByb3BzO1xuXHRjb25zdCBjb2xzID0gdXNlTWVtbygoKSA9PiBjb2x1bW5zLCBbY29sdW1uc10pO1xuXHRjb25zdCB2YWxzID0gdXNlTWVtbygoKSA9PiB2YWx1ZXMsIFt2YWx1ZXNdKTtcblx0Y29uc3QgW2hvdmVyUm93LCBzZXRIb3ZlclJvd10gPSB1c2VTdGF0ZSgnJyk7XG5cblx0Ly8gUmVhY3QtVGFibGUgaG9va1xuXHRjb25zdCB7Z2V0VGFibGVQcm9wcywgZ2V0VGFibGVCb2R5UHJvcHMsIGhlYWRlckdyb3VwcywgcHJlcGFyZVJvdywgcm93cywgZm9vdGVyR3JvdXBzfSA9IHVzZVRhYmxlPEE+KHtcblx0XHRjb2x1bW5zOiBjb2xzLFxuXHRcdGRhdGE6IHZhbHMsXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHVwZGF0ZURhdGEocm93SW5kZXgsIGNvbHVtbklkLCB2YWx1ZSkge1xuXHRcdFx0c2V0RmllbGRWYWx1ZShgJHtuYW1lfVske3Jvd0luZGV4fV0uJHtjb2x1bW5JZH1gLCB2YWx1ZSk7XG5cdFx0fSxcblx0XHRhZGRSb3coKSB7XG5cdFx0XHRhcnJheUhlbHBlcnMucHVzaChjcmVhdGVSb3coKSk7XG5cdFx0fSxcblx0XHRhcnJheUhlbHBlcnMsXG5cdH0pO1xuXG5cdC8vIEB0cy1pZ25vcmUgQ2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYSBGb290ZXIgdGhhdCBpcyBub3QgdGhlIGRlZmF1bHQgZW1wdHlSZW5kZXJlcigpXG5cdGNvbnN0IGhhc0Zvb3RlciA9IGZvb3Rlckdyb3Vwcy5zb21lKGZnID0+IGZnLmhlYWRlcnMuc29tZShmZ2ggPT4gZmdoLkZvb3Rlci5uYW1lICE9PSAnZW1wdHlSZW5kZXJlcicpKTtcblxuXHQvLyBCdWlsZCBGb290ZXIgaWYgYW55IGZvb3RlciByZW5kZXJlcnMgZXhpc3Rcblx0Y29uc3QgZm9vdGVyID0gaGFzRm9vdGVyID8gKFxuXHRcdDxUYWJsZS5Gb290ZXI+XG5cdFx0XHR7Zm9vdGVyR3JvdXBzLm1hcChncm91cCA9PiAoXG5cdFx0XHRcdDxUYWJsZS5Sb3cgey4uLnsuLi5ncm91cC5nZXRGb290ZXJHcm91cFByb3BzKCksIC4uLmdyb3VwLmdldEZvb3Rlckdyb3VwUHJvcHMoZm9vdGVyUm93UHJvcHMpfX0+XG5cdFx0XHRcdFx0e2dyb3VwLmhlYWRlcnMubWFwKGNvbHVtbiA9PiAoXG5cdFx0XHRcdFx0XHQ8VGFibGUuSGVhZGVyQ2VsbCB7Li4uey4uLmNvbHVtbi5nZXRGb290ZXJQcm9wcygpLCAuLi5jb2x1bW4uZ2V0Rm9vdGVyUHJvcHMoZm9vdGVyQ2VsbFByb3BzKX19PlxuXHRcdFx0XHRcdFx0XHR7Y29sdW1uLnJlbmRlcignRm9vdGVyJyl9XG5cdFx0XHRcdFx0XHQ8L1RhYmxlLkhlYWRlckNlbGw+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvVGFibGUuUm93PlxuXHRcdFx0KSl9XG5cdFx0PC9UYWJsZS5Gb290ZXI+XG5cdCkgOiBudWxsO1xuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxUYWJsZSB7Li4uey4uLmdldFRhYmxlUHJvcHMoKSwgLi4uZ2V0VGFibGVQcm9wcyh0YWJsZVByb3BzKX19PlxuXHRcdFx0XHQ8VGFibGUuSGVhZGVyPlxuXHRcdFx0XHRcdHtoZWFkZXJHcm91cHMubWFwKGhlYWRlckdyb3VwID0+IChcblx0XHRcdFx0XHRcdDxUYWJsZS5Sb3cgey4uLnsuLi5oZWFkZXJHcm91cC5nZXRIZWFkZXJHcm91cFByb3BzKCksIC4uLmhlYWRlckdyb3VwLmdldEhlYWRlckdyb3VwUHJvcHMoaGVhZGVyUm93UHJvcHMpfX0+XG5cdFx0XHRcdFx0XHRcdHtoZWFkZXJHcm91cC5oZWFkZXJzLm1hcChjb2x1bW4gPT4gKFxuXHRcdFx0XHRcdFx0XHRcdDxUYWJsZS5IZWFkZXJDZWxsIHsuLi57Li4uY29sdW1uLmdldEhlYWRlclByb3BzKCksIC4uLmNvbHVtbi5nZXRIZWFkZXJQcm9wcyhoZWFkZXJDZWxsUHJvcHMpfX0+XG5cdFx0XHRcdFx0XHRcdFx0XHR7Y29sdW1uLnJlbmRlcignSGVhZGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9UYWJsZS5IZWFkZXJDZWxsPlxuXHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdDwvVGFibGUuUm93PlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L1RhYmxlLkhlYWRlcj5cblx0XHRcdFx0PFRhYmxlLkJvZHkgey4uLnsuLi5nZXRUYWJsZUJvZHlQcm9wcygpLCAuLi5nZXRUYWJsZUJvZHlQcm9wcyhib2R5UHJvcHMpfX0+XG5cdFx0XHRcdFx0e3Jvd3MubWFwKHJvdyA9PiB7XG5cdFx0XHRcdFx0XHRwcmVwYXJlUm93KHJvdyk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8VGFibGUuUm93XG5cdFx0XHRcdFx0XHRcdFx0ey4uLnsuLi5yb3cuZ2V0Um93UHJvcHMoKSwgLi4ucm93LmdldFJvd1Byb3BzKHJvd1Byb3BzKX19XG5cdFx0XHRcdFx0XHRcdFx0b25Nb3VzZUVudGVyPXsoKSA9PiBzZXRIb3ZlclJvdyhyb3cuaWQpfVxuXHRcdFx0XHRcdFx0XHRcdG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0SG92ZXJSb3coJycpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e3Jvdy5jZWxscy5tYXAoY2VsbCA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8VGFibGUuQ2VsbCB7Li4uey4uLmNlbGwuZ2V0Q2VsbFByb3BzKCksIC4uLmNlbGwuZ2V0Q2VsbFByb3BzKGNlbGxQcm9wcyl9fT57Y2VsbC5yZW5kZXIoJ0NlbGwnLCB7aG92ZXJSb3d9KX08L1RhYmxlLkNlbGw+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvVGFibGUuUm93PlxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9UYWJsZS5Cb2R5PlxuXHRcdFx0XHR7Zm9vdGVyfVxuXHRcdFx0PC9UYWJsZT5cblx0XHQ8Lz5cblx0KTtcbn1cblxuLyoqXG4gKiBDYW4gYmUgdXNlZCBpbiBhIFRGb3JtIGFzIGEgVGFibGUgSW5wdXQuXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gVGFibGVJbnB1dDxBIGV4dGVuZHMgRGVmYXVsdFRhYmxlVHlwZT4ocHJvcHM6IFRhYmxlSW5wdXRQcm9wczxBPikge1xuXHRyZXR1cm4gPEZpZWxkQXJyYXkgbmFtZT17cHJvcHMubmFtZX0gcmVuZGVyPXthcnJheUhlbHBlcnMgPT4gPFRhYmxlSW5wdXRUYWJsZSBhcnJheUhlbHBlcnM9e2FycmF5SGVscGVyc30gey4uLnByb3BzfSAvPn0gLz47XG59XG4iLCJpbXBvcnQgdHlwZSB7VGFibGVDZWxsUHJvcHN9IGZyb20gJy4vVGFibGVJbnB1dCc7XG5cbmV4cG9ydCB0eXBlIEFkZFJvd09uVGFiSWY8RCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBWID0gYW55PiA9IChwcm9wczogVGFibGVDZWxsUHJvcHM8RCwgVj4sIG5ld1ZhbHVlOiBWKSA9PiBib29sZWFuO1xuXG4vKipcbiAqIFVzZSBhcyBhbiBvbktleURvd24gZXZlbnQgaGFuZGxlciB0byBhZGQgYSBuZXcgcm93IHdoZW4gdGFiIGlzIHByZXNzZWQsIGRlcGVuZGluZyBvbiBjZXJ0YWluIGNyaXRlcmlhLlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSBwcm9wc1xuICogQHBhcmFtIGFkZFJvd09uVGFiSWZcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFJvd09uVGFiPEQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgViA9IGFueT4oXG5cdGV2ZW50OiBLZXlib2FyZEV2ZW50LFxuXHR2YWx1ZTogVixcblx0cHJvcHM6IFRhYmxlQ2VsbFByb3BzPEQsIFY+LFxuXHRhZGRSb3dPblRhYklmPzogQWRkUm93T25UYWJJZjxELCBWPixcbikge1xuXHRjb25zdCB7XG5cdFx0cm93OiB7aW5kZXg6IHJvd0luZGV4fSxcblx0XHRyb3dzOiB7bGVuZ3RoOiByb3dzTGVuZ3RofSxcblx0XHRhZGRSb3csXG5cdH0gPSBwcm9wcztcblxuXHRpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgcm93SW5kZXggKyAxID09PSByb3dzTGVuZ3RoICYmIChhZGRSb3dPblRhYklmID8gYWRkUm93T25UYWJJZihwcm9wcywgdmFsdWUpIDogZmFsc2UpKSB7XG5cdFx0YWRkUm93KCk7XG5cdH1cbn1cbiIsImV4cG9ydCB7VGFibGVJbnB1dH0gZnJvbSAnLi9UYWJsZUlucHV0JztcbmV4cG9ydCB7TW9uZXlDZWxsfSBmcm9tICcuL01vbmV5Q2VsbCc7XG5leHBvcnQge01vbmV5RWRpdENlbGx9IGZyb20gJy4vTW9uZXlFZGl0Q2VsbCc7XG5leHBvcnQge01vbmV5U3VtRm9vdGVyfSBmcm9tICcuL01vbmV5U3VtRm9vdGVyJztcbmV4cG9ydCB7U3RyaW5nRWRpdENlbGx9IGZyb20gJy4vU3RyaW5nRWRpdENlbGwnO1xuZXhwb3J0IHtEcm9wZG93bkNlbGx9IGZyb20gJy4vRHJvcGRvd25DZWxsJztcbmV4cG9ydCB7SG92ZXJDZWxsfSBmcm9tICcuL0hvdmVyQ2VsbCc7XG5leHBvcnQge2FkZFJvd09uVGFifSBmcm9tICcuL2FkZFJvd09uVGFiJztcbmV4cG9ydCB0eXBlIHtBZGRSb3dPblRhYklmfSBmcm9tICcuL2FkZFJvd09uVGFiJztcbiIsImltcG9ydCB7dG9Nb25leX0gZnJvbSAnQHRoeC9tb25leSc7XG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgTW9uZXksIHtDdXJyZW5jeVN0cmluZ30gZnJvbSAnanMtbW9uZXknO1xuaW1wb3J0IFJlYWN0LCB7U3ludGhldGljRXZlbnQsIHVzZUNhbGxiYWNrfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0Ryb3Bkb3duLCBEcm9wZG93blByb3BzLCBJbnB1dCwgSW5wdXRQcm9wcywgTGFiZWx9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB0eXBlIHtNb25leUlucHV0UHJvcHN9IGZyb20gJy4uL01vbmV5SW5wdXQnO1xuaW1wb3J0IHt1c2VNb25leUlucHV0fSBmcm9tICcuLi91c2VNb25leUlucHV0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMubW9uZXkuTW9uZXlDdXJyZW5jeUlucHV0Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9uZXlDdXJyZW5jeUlucHV0UHJvcHMgZXh0ZW5kcyBNb25leUlucHV0UHJvcHMge1xuXHRjdXJyZW5jaWVzPzoge2tleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nOyB0ZXh0OiBzdHJpbmd9W107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNb25leUN1cnJlbmN5SW5wdXQocHJvcHM6IE1vbmV5Q3VycmVuY3lJbnB1dFByb3BzICYgT21pdDxJbnB1dFByb3BzLCAnb25DaGFuZ2UnPikge1xuXHRjb25zdCB7bmFtZSwgb25CbHVyLCBwcmVmaXgsIGRlZmF1bHRDdXJyZW5jeSwgb25DaGFuZ2UsIHNob3dQcmVmaXgsIHZhbHVlLCB3aG9sZU51bWJlciwgY3VycmVuY2llcywgbG9ja2VkLCAuLi5yZXN0fSA9IHByb3BzO1xuXG5cdGNvbnN0IG9wdGlvbnMgPSBjdXJyZW5jaWVzIHx8IFtcblx0XHR7a2V5OiAnQ0FEJywgdGV4dDogJ0NBRCcsIHZhbHVlOiAnQ0FEJ30sXG5cdFx0e2tleTogJ1VTRCcsIHRleHQ6ICdVU0QnLCB2YWx1ZTogJ1VTRCd9LFxuXHRdO1xuXG5cdGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuXHRcdCh2PzogTW9uZXkpID0+IHtcblx0XHRcdGlmICghdikge1xuXHRcdFx0XHRvbkNoYW5nZSAmJiBvbkNoYW5nZSh0b01vbmV5KDAsIGRlZmF1bHRDdXJyZW5jeSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b25DaGFuZ2UgJiYgb25DaGFuZ2Uodik7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbZGVmYXVsdEN1cnJlbmN5LCBvbkNoYW5nZV0sXG5cdCk7XG5cblx0Y29uc3QgdmFsID0gISh2YWx1ZSBpbnN0YW5jZW9mIE1vbmV5KSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdG9Nb25leSh2YWx1ZSkgOiB2YWx1ZTtcblxuXHRjb25zdCBbaW5wdXRFbGVtZW50XSA9IHVzZU1vbmV5SW5wdXQoe29uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsIHByZWZpeCwgc2hvd1ByZWZpeCwgdmFsdWU6IHZhbCwgd2hvbGVOdW1iZXJ9KTtcblxuXHRjb25zdCBoYW5kbGVEcm9wZG93bkNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChlOiBTeW50aGV0aWNFdmVudDxIVE1MRWxlbWVudCwgRXZlbnQ+LCB2OiBEcm9wZG93blByb3BzKSA9PiB7XG5cdFx0XHRjb25zdCBuZXdDdXJyZW5jeUNvZGUgPSB2LnZhbHVlIGFzIEN1cnJlbmN5U3RyaW5nO1xuXHRcdFx0Y29uc3QgbmV3TW9uZXkgPSBuZXcgTW9uZXkodmFsdWU/LmFtb3VudCB8fCAwLCBuZXdDdXJyZW5jeUNvZGUpO1xuXG5cdFx0XHRkKCdDaGFuZ2UnLCB2YWx1ZSwgbmV3Q3VycmVuY3lDb2RlLCBuZXdNb25leSk7XG5cdFx0XHQvLyBzZXRJbnB1dFZhbHVlKG5ld01vbmV5KTtcblx0XHRcdG9uQ2hhbmdlICYmIG9uQ2hhbmdlKG5ld01vbmV5KTtcblx0XHRcdC8vIGZvcmNlVXBkYXRlKCk7XG5cdFx0fSxcblx0XHRbb25DaGFuZ2UsIHZhbHVlXSxcblx0KTtcblxuXHRjb25zdCBjdXJyZW5jeUNvZGUgPSB2YWx1ZT8uY3VycmVuY3kgfHwgZGVmYXVsdEN1cnJlbmN5Py5jb2RlIHx8ICdDQUQnO1xuXHRkKCdSZW5kZXInLCB2YWx1ZSwgY3VycmVuY3lDb2RlKTtcblxuXHRyZXR1cm4gKFxuXHRcdDxJbnB1dCB7Li4ucmVzdH0gbGFiZWxQb3NpdGlvbj1cInJpZ2h0XCI+XG5cdFx0XHQ8aW5wdXQgbmFtZT17bmFtZX0gcmVmPXtpbnB1dEVsZW1lbnR9IG9uQmx1cj17b25CbHVyfSByZWFkT25seT17bG9ja2VkfSAvPlxuXHRcdFx0PExhYmVsIGJhc2ljPlxuXHRcdFx0XHQ8RHJvcGRvd24gZGlzYWJsZWQ9e2xvY2tlZH0gb3B0aW9ucz17b3B0aW9uc30gdmFsdWU9e2N1cnJlbmN5Q29kZX0gb25DaGFuZ2U9e2hhbmRsZURyb3Bkb3duQ2hhbmdlfSAvPlxuXHRcdFx0PC9MYWJlbD5cblx0XHQ8L0lucHV0PlxuXHQpO1xufVxuIiwiZXhwb3J0IHtNb25leUN1cnJlbmN5SW5wdXR9IGZyb20gJy4vTW9uZXlDdXJyZW5jeUlucHV0JztcbmV4cG9ydCB0eXBlIHtNb25leUN1cnJlbmN5SW5wdXRQcm9wc30gZnJvbSAnLi9Nb25leUN1cnJlbmN5SW5wdXQnO1xuIiwiaW1wb3J0IHt0b01vbmV5fSBmcm9tICdAdGh4L21vbmV5Jztcbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBNb25leSwge0N1cnJlbmN5LCBNb25leU9iamVjdH0gZnJvbSAnanMtbW9uZXknO1xuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2t9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7SW5wdXQsIElucHV0UHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB7dXNlTW9uZXlJbnB1dH0gZnJvbSAnLi4vdXNlTW9uZXlJbnB1dCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLm1vbmV5Lk1vbmV5SW5wdXQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBNb25leUlucHV0UHJvcHMge1xuXHRuYW1lPzogc3RyaW5nO1xuXHRvbkNoYW5nZT86ICh2YWx1ZTogTW9uZXkpID0+IHZvaWQ7XG5cdHZhbHVlPzogTW9uZXkgfCBNb25leU9iamVjdDtcblx0ZGVmYXVsdEN1cnJlbmN5PzogQ3VycmVuY3k7IC8vIERlZmF1bHRzIHRvIE1vbmV5LkNBRFxuXHRvbkJsdXI/OiAoZXY6IGFueSkgPT4gdm9pZDtcblx0cHJlZml4Pzogc3RyaW5nOyAvLyBEZWZhdWx0cyB0byBjdXJyZW5jeSBzeW1ib2xcblx0c2hvd1ByZWZpeD86IGJvb2xlYW47IC8vIERlZmF1bHRzIHRvIGZhbHNlXG5cdGxvY2tlZD86IGJvb2xlYW47IC8vIERlZmF1bHRzIHRvIGZhbHNlXG5cdHdob2xlTnVtYmVyPzogYm9vbGVhbjsgLy8gRGVmYXVsdHMgdG8gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1vbmV5SW5wdXQocHJvcHM6IE1vbmV5SW5wdXRQcm9wcyAmIE9taXQ8SW5wdXRQcm9wcywgJ29uQ2hhbmdlJz4pIHtcblx0Y29uc3Qge25hbWUsIG9uQmx1ciwgbG9ja2VkLCBwcmVmaXgsIGRlZmF1bHRDdXJyZW5jeSwgb25DaGFuZ2UsIHNob3dQcmVmaXgsIHZhbHVlLCB3aG9sZU51bWJlciwgLi4ucmVzdH0gPSBwcm9wcztcblxuXHRjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcblx0XHQodj86IE1vbmV5KSA9PiB7XG5cdFx0XHRpZiAoIXYpIHtcblx0XHRcdFx0b25DaGFuZ2UgJiYgb25DaGFuZ2UodG9Nb25leSgwLCBkZWZhdWx0Q3VycmVuY3kpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHYpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W2RlZmF1bHRDdXJyZW5jeSwgb25DaGFuZ2VdLFxuXHQpO1xuXG5cdGNvbnN0IHZhbCA9ICEodmFsdWUgaW5zdGFuY2VvZiBNb25leSkgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCA/IHRvTW9uZXkodmFsdWUpIDogdmFsdWU7XG5cblx0Y29uc3QgW2lucHV0RWxlbWVudF0gPSB1c2VNb25leUlucHV0KHtvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLCBwcmVmaXgsIHNob3dQcmVmaXgsIHZhbHVlOiB2YWwsIHdob2xlTnVtYmVyfSk7XG5cblx0cmV0dXJuIChcblx0XHQ8SW5wdXQgey4uLnJlc3R9PlxuXHRcdFx0PGlucHV0IG5hbWU9e25hbWV9IHJlZj17aW5wdXRFbGVtZW50fSBvbkJsdXI9e29uQmx1cn0gcmVhZE9ubHk9e2xvY2tlZH0gLz5cblx0XHQ8L0lucHV0PlxuXHQpO1xufVxuIiwiZXhwb3J0IHtNb25leUlucHV0fSBmcm9tICcuL01vbmV5SW5wdXQnO1xuZXhwb3J0IHR5cGUge01vbmV5SW5wdXRQcm9wc30gZnJvbSAnLi9Nb25leUlucHV0JztcbiIsImltcG9ydCB7dG9Nb25leX0gZnJvbSAnQHRoeC9tb25leSc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IElucHV0bWFzayBmcm9tICdpbnB1dG1hc2snO1xuaW1wb3J0IE1vbmV5IGZyb20gJ2pzLW1vbmV5JztcbmltcG9ydCB7TXV0YWJsZVJlZk9iamVjdCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmfSBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLm1vbmV5LnVzZU1vbmV5SW5wdXQnKTtcblxuaW50ZXJmYWNlIFVzZU1vbmV5SW5wdXRQcm9wcyB7XG5cdHZhbHVlPzogTW9uZXk7XG5cdG9uQ2hhbmdlPzogKHZhbHVlPzogTW9uZXkpID0+IHZvaWQ7XG5cdG9uU2V0PzogKHZhbHVlPzogTW9uZXkpID0+IHZvaWQ7XG5cdC8vIGRlZmF1bHRDdXJyZW5jeT86IEN1cnJlbmN5OyAvLyBEZWZhdWx0cyB0byBNb25leS5DQURcblx0cHJlZml4Pzogc3RyaW5nOyAvLyBEZWZhdWx0cyB0byBjdXJyZW5jeSBzeW1ib2xcblx0c2hvd1ByZWZpeD86IGJvb2xlYW47IC8vIERlZmF1bHRzIHRvIGZhbHNlXG5cdHdob2xlTnVtYmVyPzogYm9vbGVhbjsgLy8gRGVmYXVsdHMgdG8gZmFsc2Vcbn1cblxudHlwZSBTZXRWYWx1ZUZuID0gKHZhbHVlPzogTW9uZXkpID0+IHZvaWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VNb25leUlucHV0KHByb3BzOiBVc2VNb25leUlucHV0UHJvcHMpOiBbTXV0YWJsZVJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50IHwgbnVsbD4sIFNldFZhbHVlRm5dIHtcblx0Y29uc3Qge3ZhbHVlLCBvbkNoYW5nZSwgb25TZXQsIHNob3dQcmVmaXgsIHByZWZpeCwgd2hvbGVOdW1iZXJ9ID0gcHJvcHM7XG5cblx0Y29uc3QgaW5wdXRFbGVtZW50ID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsPihudWxsKTtcblx0Y29uc3QgbWFza0luc3RhbmNlID0gdXNlUmVmPElucHV0bWFzay5JbnN0YW5jZSB8IG51bGw+KG51bGwpO1xuXG5cdC8vIHNldCB0aGUgYWRqQ3VycmVuY3lcblx0Ly8gbGV0IGFkakN1cnJlbmN5ID0gTW9uZXkuQ0FEO1xuXHQvLyBpZiAodmFsdWU/LmN1cnJlbmN5ICYmIE1vbmV5W3ZhbHVlPy5jdXJyZW5jeV0pIGFkakN1cnJlbmN5ID0gTW9uZXlbdmFsdWU/LmN1cnJlbmN5XTtcblx0Ly8gaWYgKGRlZmF1bHRDdXJyZW5jeSkgYWRqQ3VycmVuY3kgPSBkZWZhdWx0Q3VycmVuY3k7XG5cdGNvbnN0IGN1cnJlbmN5Q29kZSA9IHZhbHVlPy5jdXJyZW5jeSB8fCAnQ0FEJztcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmICghaW5wdXRFbGVtZW50LmN1cnJlbnQpIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGdldCBpbnB1dCBlbGVtZW50Jyk7XG5cblx0XHRkKCdDcmVhdGluZyBpbnB1dCBtYXNrIGluc3RhbmNlJyk7XG5cdFx0bWFza0luc3RhbmNlLmN1cnJlbnQgPSBuZXcgSW5wdXRtYXNrKHtcblx0XHRcdGFsaWFzOiAnbnVtZXJpYycsXG5cdFx0XHRncm91cFNlcGFyYXRvcjogJywnLFxuXHRcdFx0ZGlnaXRzOiB3aG9sZU51bWJlciA/ICcwJyA6IE1vbmV5W2N1cnJlbmN5Q29kZV0uZGVjaW1hbF9kaWdpdHMudG9TdHJpbmcoKSxcblx0XHRcdGRpZ2l0c09wdGlvbmFsOiBmYWxzZSxcblx0XHRcdHByZWZpeDogc2hvd1ByZWZpeCA/IHByZWZpeCB8fCBNb25leVtjdXJyZW5jeUNvZGVdLnN5bWJvbCA6IHVuZGVmaW5lZCxcblx0XHRcdHBsYWNlaG9sZGVyOiAnMCcsXG5cdFx0XHRhdXRvVW5tYXNrOiB0cnVlLFxuXHRcdFx0b25jb21wbGV0ZSgpIHtcblx0XHRcdFx0aWYgKG9uQ2hhbmdlKSB7XG5cdFx0XHRcdFx0aWYgKGlucHV0RWxlbWVudC5jdXJyZW50Py52YWx1ZSkge1xuXHRcdFx0XHRcdFx0b25DaGFuZ2UodG9Nb25leShpbnB1dEVsZW1lbnQuY3VycmVudD8udmFsdWUsIGN1cnJlbmN5Q29kZSkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvbkNoYW5nZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9uY2xlYXJlZCgpIHtcblx0XHRcdFx0aWYgKG9uQ2hhbmdlKSBvbkNoYW5nZSgpO1xuXHRcdFx0fSxcblx0XHRcdG9uaW5jb21wbGV0ZSgpIHtcblx0XHRcdFx0aWYgKG9uQ2hhbmdlKSBvbkNoYW5nZSh0b01vbmV5KGlucHV0RWxlbWVudC5jdXJyZW50Py52YWx1ZSwgY3VycmVuY3lDb2RlKSk7XG5cdFx0XHR9LFxuXHRcdH0pO1xuXHRcdG1hc2tJbnN0YW5jZS5jdXJyZW50Lm1hc2soaW5wdXRFbGVtZW50LmN1cnJlbnQpO1xuXG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGlmIChtYXNrSW5zdGFuY2UuY3VycmVudCkge1xuXHRcdFx0XHRkKCdDbGVhbmluZyB1cCBpbnB1dCBtYXNrIGluc3RhbmNlJyk7XG5cdFx0XHRcdG1hc2tJbnN0YW5jZS5jdXJyZW50LnJlbW92ZSgpO1xuXHRcdFx0XHRtYXNrSW5zdGFuY2UuY3VycmVudCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fTtcblx0fSwgW2N1cnJlbmN5Q29kZSwgcHJlZml4LCBzaG93UHJlZml4LCB3aG9sZU51bWJlcl0pO1xuXG5cdGNvbnN0IHNldFZhbCA9IHVzZUNhbGxiYWNrPFNldFZhbHVlRm4+KFxuXHRcdCh2PzogTW9uZXkpID0+IHtcblx0XHRcdGlmIChpbnB1dEVsZW1lbnQuY3VycmVudCkge1xuXHRcdFx0XHRkKCdWYWx1ZSBpcyBiZWluZyBzZXQ6Jywgdik7XG5cdFx0XHRcdGlmICh2KSB7XG5cdFx0XHRcdFx0aW5wdXRFbGVtZW50LmN1cnJlbnQudmFsdWUgPSB2LnRvRGVjaW1hbCgpLnRvU3RyaW5nKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aW5wdXRFbGVtZW50LmN1cnJlbnQudmFsdWUgPSAnJztcblx0XHRcdFx0fVxuXHRcdFx0XHRvblNldCAmJiBvblNldCh2KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtvblNldF0sXG5cdCk7XG5cblx0Ly8gSWYgd2UgY2hhbmdlIHRoZSB2YWx1ZSBwcm9wIHdlIG5lZWQgdG8gc3luYyB0aGUgRE9NIHZhbHVlIHRvIGRpc3BsYXkgdGhlIG5ldyB2YWx1ZVxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGNvbnN0IHdoYXRDdXJyZW50bHlJc0Rpc3BsYXllZCA9IGlucHV0RWxlbWVudC5jdXJyZW50Py52YWx1ZSB8fCAnJzsgLy8gc3RyaW5nIHwgdW5kZWZcblx0XHRjb25zdCB3aGF0V2VBcmVTZXR0aW5nID0gdmFsdWUgPyB2YWx1ZS50b1N0cmluZygpIDogJyc7IC8vIG1vbmV5IHwgdW5kZWZcblxuXHRcdGlmICh3aGF0Q3VycmVudGx5SXNEaXNwbGF5ZWQgIT09IHdoYXRXZUFyZVNldHRpbmcpIHtcblx0XHRcdHNldFZhbCh2YWx1ZSk7XG5cdFx0fVxuXHR9LCBbc2V0VmFsLCB2YWx1ZV0pO1xuXG5cdHJldHVybiBbaW5wdXRFbGVtZW50LCBzZXRWYWxdO1xufVxuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge0NoaWxkcmVufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZVN0ZXB9IGZyb20gJy4vdXNlU3RlcCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLnN0ZXAuRm9ybVN0ZXAnKTtcblxuaW50ZXJmYWNlIEZvcm1TdGVwUHJvcHMge1xuXHRjaGlsZHJlbjogSlNYLkVsZW1lbnQ7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRzdGVwS2V5OiBzdHJpbmc7XG5cdGhpZGRlbj86IGJvb2xlYW4gfCAoKHN0YXRlOiBhbnksIHN0ZXA6IG51bWJlcikgPT4gYm9vbGVhbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGb3JtU3RlcChwcm9wczogRm9ybVN0ZXBQcm9wcykge1xuXHRjb25zdCBbc3RhdGUsIGhhbmRsZVN1Ym1pdF0gPSB1c2VTdGVwKCk7XG5cdGNvbnN0IHZhbHVlcyA9IHN0YXRlW3Byb3BzLnN0ZXBLZXldIHx8IHt9O1xuXG5cdGNvbnN0IGZvcm0gPSBSZWFjdC5jbG9uZUVsZW1lbnQoQ2hpbGRyZW4ub25seShwcm9wcy5jaGlsZHJlbiksIHtcblx0XHR2YWx1ZXM6IHZhbHVlcyB8fCB7fSxcblx0XHRvblN1Ym1pdDogKHZhbHM6IHVua25vd24pID0+IGhhbmRsZVN1Ym1pdCh2YWxzLCBwcm9wcy5zdGVwS2V5KSxcblx0fSk7XG5cblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PGgxPntwcm9wcy50aXRsZX08L2gxPlxuXHRcdFx0e2Zvcm19XG5cdFx0PC8+XG5cdCk7XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuc3RlcC5TdGVwJyk7XG5cbmludGVyZmFjZSBTdGVwUHJvcHMge1xuXHRjaGlsZHJlbj86IEpTWC5FbGVtZW50IHwgSlNYLkVsZW1lbnRbXTtcblx0dGl0bGU/OiBzdHJpbmc7XG5cdHN0ZXA/OiBudW1iZXI7XG5cdGhpZGRlbj86IGJvb2xlYW4gfCAoKHN0YXRlOiBhbnksIHN0ZXA6IG51bWJlcikgPT4gYm9vbGVhbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTdGVwKHByb3BzOiBTdGVwUHJvcHMpIHtcblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PGgxPntwcm9wcy50aXRsZX08L2gxPlxuXHRcdFx0e3Byb3BzLmNoaWxkcmVufVxuXHRcdDwvPlxuXHQpO1xufVxuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge3VzZVN0YXRlLCBDaGlsZHJlbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtQcm9tcHR9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHtHcmlkLCBTdGVwIGFzIFNlbWFudGljU3RlcH0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHtGb3JtU3RlcH0gZnJvbSAnLi9Gb3JtU3RlcCc7XG5pbXBvcnQge1N0ZXB9IGZyb20gJy4vU3RlcCc7XG5pbXBvcnQge1N0ZXBDb250ZXh0fSBmcm9tICcuL3N0ZXBDb250ZXh0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuc3RlcC5TdGVwUHJvdmlkZXInKTtcblxuaW50ZXJmYWNlIFN0ZXBQcm92aWRlclByb3BzIHtcblx0Y2hpbGRyZW46IChKU1guRWxlbWVudCB8IG51bGwgfCBmYWxzZSlbXTtcblx0b25TdWJtaXQ6ICh2YWx1ZXM6IGFueSkgPT4gdm9pZDtcblx0dmFsdWVzPzogYW55O1xuXHR3YXJuT25SZXJvdXRlPzogYm9vbGVhbjtcblx0dmVydGljYWw/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU3RlcFByb3ZpZGVyKHByb3BzOiBTdGVwUHJvdmlkZXJQcm9wcykge1xuXHRjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlKHByb3BzLnZhbHVlcyB8fCB7fSk7XG5cdGNvbnN0IFtjdXJyZW50U3RlcCwgc2V0Q3VycmVudFN0ZXBdID0gdXNlU3RhdGUoMCk7XG5cdGNvbnN0IFtpc1N1Ym1pdHRpbmcsIHNldElzU3VibWl0dGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cblx0Y29uc3QgdGl0bGVzOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBjaGlsZHJlbjogSlNYLkVsZW1lbnRbXSA9IFtdO1xuXG5cdENoaWxkcmVuLmZvckVhY2gocHJvcHM/LmNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG5cdFx0aWYgKCFjaGlsZCkgcmV0dXJuO1xuXHRcdGlmIChjaGlsZD8udHlwZSAhPT0gU3RlcCAmJiBjaGlsZD8udHlwZSAhPT0gRm9ybVN0ZXApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCByZW5kZXIgJyR7Y2hpbGQ/LnR5cGV9JyBhcyBjaGlsZCBvZiAnU3RlcFByb3ZpZGVyJy4gTXVzdCBiZSBvZiB0eXBlICdTdGVwJyBvciAnRm9ybVN0ZXAnYCk7XG5cdFx0fVxuXHRcdGlmIChjaGlsZC5wcm9wcy5oaWRkZW4pIHtcblx0XHRcdGlmICh0eXBlb2YgY2hpbGQucHJvcHMuaGlkZGVuID09PSAnZnVuY3Rpb24nICYmICFjaGlsZC5wcm9wcy5oaWRkZW4oc3RhdGUsIGluZGV4KSkge1xuXHRcdFx0XHR0aXRsZXMucHVzaChjaGlsZD8ucHJvcHM/LnRpdGxlIHx8ICcnKTtcblx0XHRcdFx0Y2hpbGRyZW4ucHVzaChSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtzdGVwOiBpbmRleCwga2V5OiBjaGlsZD8ua2V5IHx8IGluZGV4LnRvU3RyaW5nKCl9KSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRpdGxlcy5wdXNoKGNoaWxkPy5wcm9wcz8udGl0bGUgfHwgJycpO1xuXHRcdFx0Y2hpbGRyZW4ucHVzaChSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtzdGVwOiBpbmRleCwga2V5OiBjaGlsZD8ua2V5IHx8IGluZGV4LnRvU3RyaW5nKCl9KSk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBvbk5hdmlnYXRlID0gKCkgPT4gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBlbmQgdGhpcyBwcm9jZXNzPyBBbGwgdGhlIGVudGVyZWQgZGF0YSB3aWxsIGJlIGxvc3QhJztcblxuXHRjb25zdCBoYW5kbGVTdWJtaXQgPSAodmFsdWVzOiBhbnksIHN0ZXBLZXk6IHN0cmluZykgPT4ge1xuXHRcdGlmIChjdXJyZW50U3RlcCArIDEgPT09IGNoaWxkcmVuPy5sZW5ndGgpIHtcblx0XHRcdHNldFN0YXRlKHsuLi5zdGF0ZSwgW3N0ZXBLZXldOiB2YWx1ZXN9KTtcblx0XHRcdHNldElzU3VibWl0dGluZyh0cnVlKTtcblx0XHRcdHByb3BzLm9uU3VibWl0KHsuLi5zdGF0ZSwgW3N0ZXBLZXldOiB2YWx1ZXN9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2V0U3RhdGUoey4uLnN0YXRlLCBbc3RlcEtleV06IHZhbHVlc30pO1xuXHRcdFx0c2V0Q3VycmVudFN0ZXAoY3VycmVudFN0ZXAgKyAxKTtcblx0XHR9XG5cdH07XG5cblx0aWYgKHByb3BzLnZlcnRpY2FsKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxTdGVwQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17e3N0YXRlLCBoYW5kbGVTdWJtaXR9fT5cblx0XHRcdFx0e3Byb3BzLndhcm5PblJlcm91dGUgJiYgPFByb21wdCBtZXNzYWdlPXtvbk5hdmlnYXRlfSB3aGVuPXshaXNTdWJtaXR0aW5nfSAvPn1cblx0XHRcdFx0PEdyaWQgZGl2aWRlZCBzdGFja2FibGU+XG5cdFx0XHRcdFx0PEdyaWQuUm93PlxuXHRcdFx0XHRcdFx0PEdyaWQuQ29sdW1uIHdpZHRoPXszfT5cblx0XHRcdFx0XHRcdFx0PFNlbWFudGljU3RlcC5Hcm91cCBvcmRlcmVkIHNpemU9XCJtaW5pXCIgdmVydGljYWwgd2lkdGhzPXsxfT5cblx0XHRcdFx0XHRcdFx0XHR7dGl0bGVzPy5tYXAoKHRpdGxlLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PFNlbWFudGljU3RlcFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17aW5kZXgudG9TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZWQ9e2luZGV4IDwgT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhY3RpdmU9e2N1cnJlbnRTdGVwID09PSBpbmRleH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRDdXJyZW50U3RlcChpbmRleCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2luZGV4ID4gT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxTZW1hbnRpY1N0ZXAuQ29udGVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxTZW1hbnRpY1N0ZXAuVGl0bGU+e3RpdGxlfTwvU2VtYW50aWNTdGVwLlRpdGxlPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvU2VtYW50aWNTdGVwLkNvbnRlbnQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvU2VtYW50aWNTdGVwPlxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdFx0PC9TZW1hbnRpY1N0ZXAuR3JvdXA+XG5cdFx0XHRcdFx0XHQ8L0dyaWQuQ29sdW1uPlxuXHRcdFx0XHRcdFx0PEdyaWQuQ29sdW1uIHdpZHRoPXsxM30+e2NoaWxkcmVuPy5bY3VycmVudFN0ZXBdfTwvR3JpZC5Db2x1bW4+XG5cdFx0XHRcdFx0PC9HcmlkLlJvdz5cblx0XHRcdFx0PC9HcmlkPlxuXHRcdFx0PC9TdGVwQ29udGV4dC5Qcm92aWRlcj5cblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8U3RlcENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3tzdGF0ZSwgaGFuZGxlU3VibWl0fX0+XG5cdFx0XHR7cHJvcHMud2Fybk9uUmVyb3V0ZSAmJiA8UHJvbXB0IG1lc3NhZ2U9e29uTmF2aWdhdGV9IC8+fVxuXHRcdFx0PFNlbWFudGljU3RlcC5Hcm91cCBvcmRlcmVkIHNpemU9XCJtaW5pXCI+XG5cdFx0XHRcdHt0aXRsZXM/Lm1hcCgodGl0bGUsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxTZW1hbnRpY1N0ZXBcblx0XHRcdFx0XHRcdFx0a2V5PXtpbmRleC50b1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZWQ9e2luZGV4IDwgT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aH1cblx0XHRcdFx0XHRcdFx0YWN0aXZlPXtjdXJyZW50U3RlcCA9PT0gaW5kZXh9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNldEN1cnJlbnRTdGVwKGluZGV4KX1cblx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2luZGV4ID4gT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aH1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PFNlbWFudGljU3RlcC5Db250ZW50PlxuXHRcdFx0XHRcdFx0XHRcdDxTZW1hbnRpY1N0ZXAuVGl0bGU+e3RpdGxlfTwvU2VtYW50aWNTdGVwLlRpdGxlPlxuXHRcdFx0XHRcdFx0XHQ8L1NlbWFudGljU3RlcC5Db250ZW50PlxuXHRcdFx0XHRcdFx0PC9TZW1hbnRpY1N0ZXA+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L1NlbWFudGljU3RlcC5Hcm91cD5cblx0XHRcdHtjaGlsZHJlbj8uW2N1cnJlbnRTdGVwXX1cblx0XHQ8L1N0ZXBDb250ZXh0LlByb3ZpZGVyPlxuXHQpO1xufVxuIiwiZXhwb3J0IHtTdGVwfSBmcm9tICcuL1N0ZXAnO1xuZXhwb3J0IHt1c2VTdGVwfSBmcm9tICcuL3VzZVN0ZXAnO1xuZXhwb3J0IHtGb3JtU3RlcH0gZnJvbSAnLi9Gb3JtU3RlcCc7XG5leHBvcnQge1N0ZXBQcm92aWRlcn0gZnJvbSAnLi9TdGVwUHJvdmlkZXInO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGNvbnN0IFN0ZXBDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDx7aGFuZGxlU3VibWl0OiAodmFsdWVzOiB1bmtub3duLCBzdGVwS2V5OiBzdHJpbmcpID0+IHZvaWQ7IHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+fT4oe1xuXHRoYW5kbGVTdWJtaXQ6ICgpID0+IHt9LFxuXHRzdGF0ZToge30sXG59KTtcbiIsImltcG9ydCB7dXNlQ29udGV4dH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTdGVwQ29udGV4dH0gZnJvbSAnLi9zdGVwQ29udGV4dCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdGVwKCk6IFthbnksICh2YWx1ZXM6IHVua25vd24sIHN0ZXBLZXk6IHN0cmluZykgPT4gdm9pZF0ge1xuXHRjb25zdCB7c3RhdGUsIGhhbmRsZVN1Ym1pdH0gPSB1c2VDb250ZXh0KFN0ZXBDb250ZXh0KTtcblxuXHRyZXR1cm4gW3N0YXRlLCBoYW5kbGVTdWJtaXRdO1xufVxuIiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cnVsZVNldFsxXS5ydWxlc1syXS51c2VbMl0hLi9zdHlsZXMuY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P3J1bGVTZXRbMV0ucnVsZXNbMl0udXNlWzJdIS4vc3R5bGVzLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P3J1bGVTZXRbMV0ucnVsZXNbMl0udXNlWzJdIS4vc3R5bGVzLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBvcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xuICAgIFxub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdLnVzZVsyXSEuL3N0eWxlcy5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5ydy1kYXRldGltZXBpY2tlciA+IGlucHV0IHtcXG5cXHRib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJ3LWRhdGV0aW1lcGlja2VyIC5ydy1jYWxlbmRhci1ncmlkLnJ3LW5hdi12aWV3IC5ydy1idG4ge1xcblxcdHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRhdGVUaW1lUGlja2VyQXV0b1dpZHRoIHtcXG5cXHR3aWR0aDogYXV0bztcXG5cXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG59XFxuXFxuLmRhdGVUaW1lUGlja2VyQXV0b1dpZHRoID4gaW5wdXQge1xcblxcdHdpZHRoOiBhdXRvO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlci13cmFwcGVyIHtcXG5cXHR3aWR0aDogMTAwJTtcXG5cXHRkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LWNvbnRhaW5lciB7XFxuXFx0ZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyLXBvcHBlciB7XFxuXFx0ei1pbmRleDogNSAhaW1wb3J0YW50O1xcbn1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9kYXRlL0RhdGVQaWNrZXIvc3R5bGVzLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtDQUNDLHVCQUF1QjtBQUN4Qjs7QUFFQTtDQUNDLHFCQUFxQjtBQUN0Qjs7QUFFQTtDQUNDLFdBQVc7Q0FDWCxvQkFBb0I7QUFDckI7O0FBRUE7Q0FDQyxXQUFXO0FBQ1o7O0FBRUE7Q0FDQyxXQUFXO0NBQ1gsMEJBQTBCO0FBQzNCOztBQUVBO0NBQ0MsMEJBQTBCO0FBQzNCOztBQUVBO0NBQ0MscUJBQXFCO0FBQ3RCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIjpnbG9iYWwoLnJ3LWRhdGV0aW1lcGlja2VyKSA+IGlucHV0IHtcXG5cXHRib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuXFxuOmdsb2JhbCgucnctZGF0ZXRpbWVwaWNrZXIpIDpnbG9iYWwoLnJ3LWNhbGVuZGFyLWdyaWQucnctbmF2LXZpZXcpIDpnbG9iYWwoLnJ3LWJ0bikge1xcblxcdHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuOmdsb2JhbCguZGF0ZVRpbWVQaWNrZXJBdXRvV2lkdGgpIHtcXG5cXHR3aWR0aDogYXV0bztcXG5cXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG59XFxuXFxuOmdsb2JhbCguZGF0ZVRpbWVQaWNrZXJBdXRvV2lkdGgpID4gaW5wdXQge1xcblxcdHdpZHRoOiBhdXRvO1xcbn1cXG5cXG46Z2xvYmFsKC5yZWFjdC1kYXRlcGlja2VyLXdyYXBwZXIpIHtcXG5cXHR3aWR0aDogMTAwJTtcXG5cXHRkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcXG59XFxuXFxuOmdsb2JhbCgucmVhY3QtZGF0ZXBpY2tlcl9faW5wdXQtY29udGFpbmVyKSB7XFxuXFx0ZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XFxufVxcblxcbjpnbG9iYWwoLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyKSB7XFxuXFx0ei1pbmRleDogNSAhaW1wb3J0YW50O1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmxvY2FscyA9IHt9O1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5yY2NzIHtcXG5cXHRtYXJnaW46IDAgIWltcG9ydGFudDtcXG59XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vaW5wdXRzL0NyZWRpdENhcmRJbnB1dC9zdHlsZXMuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0NBQ0Msb0JBQW9CO0FBQ3JCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIjpnbG9iYWwgLnJjY3Mge1xcblxcdG1hcmdpbjogMCAhaW1wb3J0YW50O1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmxvY2FscyA9IHt9O1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTsgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcblxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cblxuICAgICAgY29udGVudCArPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuXG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB0aGlzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgaWQgPSB0aGlzW19pXVswXTtcblxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG1vZHVsZXMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfaTJdKTtcblxuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGxheWVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbVs1XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWVkaWEpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBsaXN0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlbSkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV07XG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblxuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8IFwiXCIpLmNvbmNhdChzb3VyY2UsIFwiICovXCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgc3R5bGVzSW5ET00gPSBbXTtcblxuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXNJbkRPTS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHlsZXNJbkRPTVtpXS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XG4gICAgICByZXN1bHQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldO1xuICAgIHZhciBpZCA9IG9wdGlvbnMuYmFzZSA/IGl0ZW1bMF0gKyBvcHRpb25zLmJhc2UgOiBpdGVtWzBdO1xuICAgIHZhciBjb3VudCA9IGlkQ291bnRNYXBbaWRdIHx8IDA7XG4gICAgdmFyIGlkZW50aWZpZXIgPSBcIlwiLmNvbmNhdChpZCwgXCIgXCIpLmNvbmNhdChjb3VudCk7XG4gICAgaWRDb3VudE1hcFtpZF0gPSBjb3VudCArIDE7XG4gICAgdmFyIGluZGV4QnlJZGVudGlmaWVyID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgIGNzczogaXRlbVsxXSxcbiAgICAgIG1lZGlhOiBpdGVtWzJdLFxuICAgICAgc291cmNlTWFwOiBpdGVtWzNdLFxuICAgICAgc3VwcG9ydHM6IGl0ZW1bNF0sXG4gICAgICBsYXllcjogaXRlbVs1XVxuICAgIH07XG5cbiAgICBpZiAoaW5kZXhCeUlkZW50aWZpZXIgIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHVwZGF0ZXIgPSBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMuYnlJbmRleCA9IGk7XG4gICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoaSwgMCwge1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiB1cGRhdGVyLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG5cbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xufVxuXG5mdW5jdGlvbiBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhcGkgPSBvcHRpb25zLmRvbUFQSShvcHRpb25zKTtcbiAgYXBpLnVwZGF0ZShvYmopO1xuXG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXBpLnVwZGF0ZShvYmogPSBuZXdPYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVtb3ZlKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuXG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuXG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuXG4gICAgICBpZiAoc3R5bGVzSW5ET01bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRE9NW19pbmRleF0udXBkYXRlcigpO1xuXG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZW1vID0ge307XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0KHRhcmdldCkge1xuICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblxuICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcbiAgfVxuXG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBpbnNlcnRCeVNlbGVjdG9yKGluc2VydCwgc3R5bGUpIHtcbiAgdmFyIHRhcmdldCA9IGdldFRhcmdldChpbnNlcnQpO1xuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgfVxuXG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0QnlTZWxlY3RvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydFN0eWxlRWxlbWVudDsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMoc3R5bGVFbGVtZW50KSB7XG4gIHZhciBub25jZSA9IHR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXyAhPT0gXCJ1bmRlZmluZWRcIiA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcblxuICBpZiAobm9uY2UpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBcIlwiO1xuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChvYmouc3VwcG9ydHMsIFwiKSB7XCIpO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpO1xuICB9XG5cbiAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBvYmoubGF5ZXIgIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIkBsYXllclwiLmNvbmNhdChvYmoubGF5ZXIubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChvYmoubGF5ZXIpIDogXCJcIiwgXCIge1wiKTtcbiAgfVxuXG4gIGNzcyArPSBvYmouY3NzO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuXG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfSAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG5cbiAgb3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgaWYgKHN0eWxlRWxlbWVudC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5cbmZ1bmN0aW9uIGRvbUFQSShvcHRpb25zKSB7XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBvcHRpb25zLmluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRvbUFQSTsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCkge1xuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZVRhZ1RyYW5zZm9ybTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3NcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGpzLWpvZGEvY29yZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAdGh4L2RhdGVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHRoeC9tb25leVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjcmVkaXQtY2FyZC10eXBlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImRlYnVnXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImV2ZW50ZW1pdHRlcjNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZmxhdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmb3JtaWtcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaW5wdXRtYXNrXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImpzLW1vbmV5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxvZGFzaC9nZXRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoL3Byb3BlcnR5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxvZGFzaC91bmlxXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImx1aG5cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtY3JlZGl0LWNhcmRzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWNyZWRpdC1jYXJkcy9lcy9zdHlsZXMtY29tcGlsZWQuY3NzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRhdGVwaWNrZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtcm91dGVyLWRvbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC10YWJsZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtZGV2LXJ1bnRpbWVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic2VtYW50aWMtdWktcmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic29jaWFsLWluc3VyYW5jZS1udW1iZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidXNlLWRlZXAtY29tcGFyZS1lZmZlY3RcIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIERhdGVcbmV4cG9ydCB0eXBlIHtEYXRlUGlja2VyfSBmcm9tICcuL2RhdGUvRGF0ZVBpY2tlcic7XG5leHBvcnQge0xvY2FsRGF0ZVBpY2tlcn0gZnJvbSAnLi9kYXRlL0xvY2FsRGF0ZVBpY2tlcic7XG5leHBvcnQgdHlwZSB7TG9jYWxEYXRlUGlja2VyUHJvcHN9IGZyb20gJy4vZGF0ZS9Mb2NhbERhdGVQaWNrZXInO1xuZXhwb3J0IHtMb2NhbE1vbnRoU2VsZWN0fSBmcm9tICcuL2RhdGUvTG9jYWxNb250aFNlbGVjdCc7XG5leHBvcnQgdHlwZSB7TG9jYWxNb250aFNlbGVjdFByb3BzfSBmcm9tICcuL2RhdGUvTG9jYWxNb250aFNlbGVjdCc7XG5leHBvcnQge0xvY2FsVGltZVBpY2tlcn0gZnJvbSAnLi9kYXRlL0xvY2FsVGltZVBpY2tlcic7XG5leHBvcnQgdHlwZSB7TG9jYWxUaW1lUGlja2VyUHJvcHN9IGZyb20gJy4vZGF0ZS9Mb2NhbFRpbWVQaWNrZXInO1xuZXhwb3J0IHtNb250aERheVBpY2tlcn0gZnJvbSAnLi9kYXRlL01vbnRoRGF5UGlja2VyJztcbmV4cG9ydCB0eXBlIHtNb250aERheVBpY2tlclByb3BzfSBmcm9tICcuL2RhdGUvTW9udGhEYXlQaWNrZXInO1xuZXhwb3J0IHtNb250aFllYXJQaWNrZXJ9IGZyb20gJy4vZGF0ZS9Nb250aFllYXJQaWNrZXInO1xuZXhwb3J0IHR5cGUge01vbnRoWWVhclBpY2tlclByb3BzfSBmcm9tICcuL2RhdGUvTW9udGhZZWFyUGlja2VyJztcbmV4cG9ydCB7WWVhclNlbGVjdH0gZnJvbSAnLi9kYXRlL1llYXJTZWxlY3QnO1xuZXhwb3J0IHR5cGUge1llYXJTZWxlY3RQcm9wc30gZnJvbSAnLi9kYXRlL1llYXJTZWxlY3QnO1xuXG4vLyBGb3JtXG5leHBvcnQge3VzZVRGb3JtLCBURm9ybX0gZnJvbSAnLi9mb3JtL1RGb3JtJztcbmV4cG9ydCB0eXBlIHtURm9ybVByb3BzfSBmcm9tICcuL2Zvcm0vVEZvcm0nO1xuXG4vLyBJbnB1dHNcbmV4cG9ydCB7TWFza2VkSW5wdXR9IGZyb20gJy4vaW5wdXRzL01hc2tlZElucHV0JztcbmV4cG9ydCB0eXBlIHtNYXNrZWRJbnB1dFByb3BzfSBmcm9tICcuL2lucHV0cy9NYXNrZWRJbnB1dCc7XG5leHBvcnQge1JhZGlvR3JvdXB9IGZyb20gJy4vaW5wdXRzL1JhZGlvR3JvdXAnO1xuZXhwb3J0IHR5cGUge1JhZGlvR3JvdXBQcm9wc30gZnJvbSAnLi9pbnB1dHMvUmFkaW9Hcm91cCc7XG5leHBvcnQge1NjcmlwdGVsLCB3aXRoU2NyaXB0ZWx9IGZyb20gJy4vaW5wdXRzL1NjcmlwdGVsJztcbmV4cG9ydCB0eXBlIHtTY3JpcHRlbFByb3BzLCBTY3JpcHRlbE1lc3NhZ2VDbGFzcywgU2NyaXB0ZWxQZW5TdHlsZX0gZnJvbSAnLi9pbnB1dHMvU2NyaXB0ZWwnO1xuZXhwb3J0IHtTY3JpcHRlbElucHV0fSBmcm9tICcuL2lucHV0cy9TY3JpcHRlbElucHV0JztcbmV4cG9ydCB0eXBlIHtTY3JpcHRlbElucHV0UHJvcHN9IGZyb20gJy4vaW5wdXRzL1NjcmlwdGVsSW5wdXQnO1xuZXhwb3J0IHtQaG9uZUlucHV0fSBmcm9tICcuL2lucHV0cy9QaG9uZUlucHV0JztcbmV4cG9ydCB0eXBlIHtQaG9uZUlucHV0UHJvcHN9IGZyb20gJy4vaW5wdXRzL1Bob25lSW5wdXQnO1xuZXhwb3J0IHtDcmVkaXRDYXJkSW5wdXR9IGZyb20gJy4vaW5wdXRzL0NyZWRpdENhcmRJbnB1dCc7XG5leHBvcnQgdHlwZSB7Q3JlZGl0Q2FyZElucHV0UHJvcHN9IGZyb20gJy4vaW5wdXRzL0NyZWRpdENhcmRJbnB1dCc7XG5leHBvcnQge1NpbklucHV0fSBmcm9tICcuL2lucHV0cy9TaW5JbnB1dCc7XG5leHBvcnQgdHlwZSB7U2luSW5wdXRQcm9wc30gZnJvbSAnLi9pbnB1dHMvU2luSW5wdXQnO1xuXG4vLyBUYWJsZVxuZXhwb3J0IHthZGRSb3dPblRhYiwgTW9uZXlFZGl0Q2VsbCwgU3RyaW5nRWRpdENlbGwsIE1vbmV5U3VtRm9vdGVyLCBNb25leUNlbGwsIFRhYmxlSW5wdXQsIEhvdmVyQ2VsbCwgRHJvcGRvd25DZWxsfSBmcm9tICcuL2lucHV0cy9UYWJsZUlucHV0JztcbmV4cG9ydCB0eXBlIHtBZGRSb3dPblRhYklmfSBmcm9tICcuL2lucHV0cy9UYWJsZUlucHV0JztcblxuLy8gTW9uZXlcbmV4cG9ydCB7TW9uZXlJbnB1dH0gZnJvbSAnLi9tb25leS9Nb25leUlucHV0JztcbmV4cG9ydCB0eXBlIHtNb25leUlucHV0UHJvcHN9IGZyb20gJy4vbW9uZXkvTW9uZXlJbnB1dCc7XG5leHBvcnQge01vbmV5Q3VycmVuY3lJbnB1dH0gZnJvbSAnLi9tb25leS9Nb25leUN1cnJlbmN5SW5wdXQnO1xuZXhwb3J0IHR5cGUge01vbmV5Q3VycmVuY3lJbnB1dFByb3BzfSBmcm9tICcuL21vbmV5L01vbmV5Q3VycmVuY3lJbnB1dCc7XG5cbi8vIFN0ZXBcbmV4cG9ydCB7Rm9ybVN0ZXAsIFN0ZXBQcm92aWRlciwgdXNlU3RlcCwgU3RlcH0gZnJvbSAnLi9zdGVwJztcbiJdLCJuYW1lcyI6WyJEYXRlUGlja2VyIiwidG9EYXRlIiwidG9Mb2NhbERhdGUiLCJkZWJ1ZyIsIlJlYWN0IiwiTWFza2VkRGF0ZUlucHV0IiwiZCIsIkxvY2FsRGF0ZVBpY2tlciIsInByb3BzIiwibWluRGF0ZSIsIm1heERhdGUiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwib25CbHVyIiwiYXMiLCJhY3Rpb24iLCJhY3Rpb25Qb3NpdGlvbiIsImNsYXNzTmFtZSIsImVycm9yIiwiZmx1aWQiLCJmb2N1cyIsImljb24iLCJpY29uUG9zaXRpb24iLCJpbnZlcnRlZCIsImxhYmVsIiwibGFiZWxQb3NpdGlvbiIsImxvYWRpbmciLCJzaXplIiwidGFiSW5kZXgiLCJ0cmFuc3BhcmVudCIsInJlc3QiLCJzZWxlY3RlZCIsImlucHV0UHJvcHMiLCJkYXRlIiwiZm9yd2FyZFJlZiIsIk1hc2tlZElucHV0IiwiTWFza2VkRGF0ZUlucHV0SW5uZXIiLCJyZWYiLCJuYW1lIiwiYWxpYXMiLCJpbnB1dEZvcm1hdCIsInRhcmdldCIsIkxvY2FsRGF0ZSIsIlNlbGVjdCIsIm1vbnRoT3B0aW9ucyIsInRleHQiLCJrZXkiLCJMb2NhbE1vbnRoU2VsZWN0IiwieWVhciIsImhhbmRsZUJsdXIiLCJ0aGVZZWFyIiwibm93IiwibW9udGhWYWx1ZSIsImV2IiwidiIsIm9mIiwiTG9jYWxUaW1lIiwidG9Mb2NhbFRpbWUiLCJNYXNrZWRUaW1lSW5wdXQiLCJMb2NhbFRpbWVQaWNrZXIiLCJkaXNhYmxlZCIsIm9mU2Vjb25kT2ZEYXkiLCJNYXNrZWRUaW1lSW5wdXRJbm5lciIsIklucHV0IiwibW9udGhzIiwiTW9udGhEYXlIZWFkZXIiLCJnZXRNb250aCIsImRlY3JlYXNlTW9udGgiLCJwcmV2TW9udGhCdXR0b25EaXNhYmxlZCIsImluY3JlYXNlTW9udGgiLCJuZXh0TW9udGhCdXR0b25EaXNhYmxlZCIsIk1vbnRoRGF5UGlja2VyIiwiTW9udGhZZWFyUGlja2VyIiwidW5kZWZpbmVkIiwid2l0aERheU9mTW9udGgiLCJvZkVwb2NoRGF5IiwicGx1c01vbnRocyIsIm1pbnVzRGF5cyIsInBsdXNZZWFycyIsIkljb24iLCJCdXR0b24iLCJEcm9wZG93biIsIlNlZ21lbnQiLCJZZWFyU2VsZWN0IiwidGhpc1llYXIiLCJEYXRlIiwiZ2V0RnVsbFllYXIiLCJtaW5ZZWFyIiwibWF4WWVhciIsImF2YWlsYWJsZVllYXJzIiwiaSIsInB1c2giLCJ0b1N0cmluZyIsInBhZGRpbmciLCJtYXJnaW4iLCJlIiwidmFsIiwibWFyZ2luUmlnaHQiLCJpc0Z1bmN0aW9uIiwiRm9ybWlrUHJvdmlkZXIiLCJpc0VtcHR5Q2hpbGRyZW4iLCJ1c2VURm9ybSIsIlRGb3JtIiwidGJhZyIsImNvbXBvbmVudCIsInJlbmRlciIsImNoaWxkcmVuIiwiaW5uZXJSZWYiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwiY2hpbGQiLCJjcmVhdGVFbGVtZW50IiwiQ2hpbGRyZW4iLCJvbmx5IiwiZmxhdHRlbiIsInVzZUZvcm1payIsImdldCIsInByb3BlcnR5IiwidW5pcSIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiTWVzc2FnZSIsImNvbmZpZyIsImZvcm1payIsIm9uVmFsaWRhdGUiLCJpc1ZhbGlkIiwiZ2V0U3VibWl0Rm4iLCJzdWJtaXRGb3JtIiwidmFsdWVzIiwiZXJyb3JDbGVhcmVkIiwic2V0RXJyb3JDbGVhcmVkIiwibWVzc2FnZSIsImlzU3VibWl0dGluZyIsImZsYXRXYXJuaW5ncyIsImVycm9ycyIsImZsYXRUb3VjaGVkIiwidG91Y2hlZCIsIndhcm5pbmdzIiwiT2JqZWN0Iiwia2V5cyIsInJlZHVjZSIsIm1lbW8iLCJpc1RvdWNoZWQiLCJzdWJtaXRDb3VudCIsImVycm9ySGVhZGVyIiwiZ3JhcGhRTEVycm9ycyIsImVycm9yTWVzc2FnZSIsInNsaWNlIiwiaW5kZXhPZiIsImhhc1dhcm5pbmdzIiwibGVuZ3RoIiwiaGFzRXJyb3JzIiwicmVuZGVyV2FybmluZ3MiLCJvdmVyZmxvdyIsIm1heEhlaWdodCIsIm1hcCIsIm1zZyIsImZpZWxkRXJyb3IiLCJmaWVsZE5hbWUiLCJoYW5kbGVTdWJtaXQiLCJzdWJtaXREaXNhYmxlZCIsImVycm9yTWFya2VkQ2xlYXJlZCIsImZvcm1FcnJvciIsImZvcm1hdERhdGUiLCJDcmVkaXRDYXJkcyIsIkZvcm0iLCJHcmlkIiwiQ3JlZGl0Q2FyZE51bWJlcklucHV0IiwiQ3JlZGl0Q2FyZElucHV0IiwibnVtYmVyIiwiY3ZjIiwiZXhwaXJ5Iiwic2V0Rm9jdXMiLCJmb3JtYXQiLCJhIiwiYiIsImNyZWRpdENhcmRUeXBlIiwidmFsaWRhdGUiLCJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VNYXNrZWRJbnB1dCIsImdldEljb24iLCJ0eXBlIiwic2V0SWNvbiIsImNvbG9yIiwic2V0Q29sb3IiLCJjaGVja1ZhbGlkYXRpb24iLCJ2YWx1ZUFycmF5IiwibnVtIiwiam9pbiIsInJlcGxhY2VBbGwiLCJ0eXAiLCJjcmVkaXRDYXJkTWFzayIsIm1hc2siLCJpc0NvbXBsZXRlIiwiYXV0b1VubWFzayIsImNhcmROdW1iZXJSZWYiLCJpbnB1dFJlZiIsIklucHV0bWFzayIsInVzZVJlZiIsInVzZURlZXBDb21wYXJlRWZmZWN0Iiwib25TZXQiLCJpbnB1dEVsZW1lbnQiLCJtYXNrSW5zdGFuY2UiLCJjdXJyZW50IiwiRXJyb3IiLCJvbmNvbXBsZXRlIiwib25jbGVhcmVkIiwib25pbmNvbXBsZXRlIiwicmVtb3ZlIiwiUGhvbmVJbnB1dCIsImV4dGVuc2lvbiIsImdyZWVkeSIsImNsb25lRWxlbWVudCIsIlJhZGlvIiwiRm9ybVJhZGlvIiwiUmFkaW9Hcm91cCIsImFyZ3MiLCJjaGVja2VkIiwiU2NyaXB0ZWxDb250ZXh0IiwiU2NyaXB0ZWxTb2NrZXQiLCJTY3JpcHRlbCIsIm9tbmlzY3JpcHRVcmwiLCJpbWFnZVR5cGUiLCJzY2FsZSIsImNyb3AiLCJwZW5TdHlsZSIsInNvY2tldCIsInNldFJlbmRlciIsInNldExvYWRpbmciLCJpc1NpZ25pbmciLCJzZXRJc1NpZ25pbmciLCJvbiIsImNsb3NlIiwicmVuZGVySW1hZ2UiLCJjcmVhdGVDb250ZXh0Iiwid2l0aFNjcmlwdGVsIiwiU2NyaXB0ZWxQZW5TdHlsZSIsIlNjcmlwdGVsTWVzc2FnZUNsYXNzIiwiRXZlbnRFbWl0dGVyIiwic2VydmVyQ29ubmVjdGVkIiwic2VydmVySW5mbyIsImRldmljZXMiLCJkZXZpY2UiLCJzZW5kIiwiSlNPTiIsInN0cmluZ2lmeSIsIl9jbGFzcyIsInV1aWQiLCJkZXZpY2VDb25uZWN0ZWQiLCJyZW5kZXJTZXR0aW5ncyIsInJlbmRlckZ1bmN0aW9uIiwiUGxhaW4iLCJldmVudEVtaXR0ZXIiLCJ3aWR0aCIsImhlaWdodCIsImVtaXQiLCJvcHRpb25zIiwiV2ViU29ja2V0Iiwib25vcGVuIiwib25jbG9zZSIsIm9ubWVzc2FnZSIsInBhcnNlIiwiZGF0YSIsIkNvbm5lY3Rpb25PcGVuIiwiRGV2aWNlT3BlblJlc3BvbnNlIiwiUmVuZGVyZWRJbWFnZSIsIlNjcmlwdGVsRXhjZXB0aW9uIiwiQnV0dG9uUHJlc3MiLCJCdXR0b25Eb3duIiwiUGVuTW92ZSIsIlBlblVwIiwiV3JhcHBlZENvbXBvbmVudCIsInNjcmlwdGVsUHJvcHMiLCJ1c2VDb250ZXh0IiwiSW1hZ2UiLCJTY3JpcHRlbElucHV0IiwiYnV0dG9uVGV4dCIsImN0eCIsImVudGVyU2lnbmF0dXJlIiwic2V0RW50ZXJTaWduYXR1cmUiLCJ0aW1lc3RhbXAiLCJjYWxpYnJhdGUiLCJTSU4iLCJTaW5JbnB1dCIsIkRyb3Bkb3duQ2VsbCIsImRyb3Bkb3duUHJvcHMiLCJEcm9wZG93bkNlbGxGbiIsInJvd0luZGV4Iiwicm93IiwiaW5kZXgiLCJpZCIsImNvbHVtbiIsInVwZGF0ZURhdGEiLCJldmVudCIsIkhvdmVyQ2VsbCIsIkhvdmVyQ2VsbEZuIiwiQWN0aW9uIiwiaG92ZXJSb3ciLCJ0ZXh0QWxpZ24iLCJmb3JtYXRNb25leSIsIk1vbmV5Q2VsbCIsIk1vbmV5Q2VsbEZuIiwib3ZlcnJpZGVWYWx1ZSIsIk1vbmV5SW5wdXQiLCJhZGRSb3dPblRhYiIsIk1vbmV5RWRpdENlbGwiLCJvcHRzIiwiTW9uZXlFZGl0Q2VsbEZuIiwiaW5pdGlhbFZhbHVlIiwic2V0VmFsdWUiLCJhZGRSb3dPblRhYklmIiwidG9Nb25leSIsIk1vbmV5U3VtRm9vdGVyIiwiaW5mbyIsInN1bSIsInJvd3MiLCJhZGQiLCJTdHJpbmdFZGl0Q2VsbCIsIlN0cmluZ0VkaXRDZWxsRm4iLCJGaWVsZEFycmF5IiwidXNlVGFibGUiLCJUYWJsZSIsIlRhYmxlSW5wdXRUYWJsZSIsImNvbHVtbnMiLCJhcnJheUhlbHBlcnMiLCJzZXRGaWVsZFZhbHVlIiwiY3JlYXRlUm93IiwidGFibGVQcm9wcyIsImhlYWRlclJvd1Byb3BzIiwiaGVhZGVyQ2VsbFByb3BzIiwiYm9keVByb3BzIiwicm93UHJvcHMiLCJjZWxsUHJvcHMiLCJmb290ZXJDZWxsUHJvcHMiLCJmb290ZXJSb3dQcm9wcyIsImNvbHMiLCJ2YWxzIiwic2V0SG92ZXJSb3ciLCJjb2x1bW5JZCIsImFkZFJvdyIsImdldFRhYmxlUHJvcHMiLCJnZXRUYWJsZUJvZHlQcm9wcyIsImhlYWRlckdyb3VwcyIsInByZXBhcmVSb3ciLCJmb290ZXJHcm91cHMiLCJoYXNGb290ZXIiLCJzb21lIiwiZmciLCJoZWFkZXJzIiwiZmdoIiwiRm9vdGVyIiwiZm9vdGVyIiwiZ3JvdXAiLCJnZXRGb290ZXJHcm91cFByb3BzIiwiZ2V0Rm9vdGVyUHJvcHMiLCJoZWFkZXJHcm91cCIsImdldEhlYWRlckdyb3VwUHJvcHMiLCJnZXRIZWFkZXJQcm9wcyIsImdldFJvd1Byb3BzIiwiY2VsbHMiLCJjZWxsIiwiZ2V0Q2VsbFByb3BzIiwiVGFibGVJbnB1dCIsInJvd3NMZW5ndGgiLCJzaGlmdEtleSIsIk1vbmV5IiwiTGFiZWwiLCJ1c2VNb25leUlucHV0IiwiTW9uZXlDdXJyZW5jeUlucHV0IiwicHJlZml4IiwiZGVmYXVsdEN1cnJlbmN5Iiwic2hvd1ByZWZpeCIsIndob2xlTnVtYmVyIiwiY3VycmVuY2llcyIsImxvY2tlZCIsImhhbmRsZUNoYW5nZSIsImhhbmRsZURyb3Bkb3duQ2hhbmdlIiwibmV3Q3VycmVuY3lDb2RlIiwibmV3TW9uZXkiLCJhbW91bnQiLCJjdXJyZW5jeUNvZGUiLCJjdXJyZW5jeSIsImNvZGUiLCJncm91cFNlcGFyYXRvciIsImRpZ2l0cyIsImRlY2ltYWxfZGlnaXRzIiwiZGlnaXRzT3B0aW9uYWwiLCJzeW1ib2wiLCJwbGFjZWhvbGRlciIsInNldFZhbCIsInRvRGVjaW1hbCIsIndoYXRDdXJyZW50bHlJc0Rpc3BsYXllZCIsIndoYXRXZUFyZVNldHRpbmciLCJ1c2VTdGVwIiwiRm9ybVN0ZXAiLCJzdGF0ZSIsInN0ZXBLZXkiLCJmb3JtIiwib25TdWJtaXQiLCJ0aXRsZSIsIlN0ZXAiLCJQcm9tcHQiLCJTZW1hbnRpY1N0ZXAiLCJTdGVwQ29udGV4dCIsIlN0ZXBQcm92aWRlciIsInNldFN0YXRlIiwiY3VycmVudFN0ZXAiLCJzZXRDdXJyZW50U3RlcCIsInNldElzU3VibWl0dGluZyIsInRpdGxlcyIsImZvckVhY2giLCJoaWRkZW4iLCJzdGVwIiwib25OYXZpZ2F0ZSIsInZlcnRpY2FsIiwid2Fybk9uUmVyb3V0ZSJdLCJzb3VyY2VSb290IjoiIn0=