@merchi/product-form 1.19.12

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 (188) hide show
  1. package/README.md +272 -0
  2. package/lib/actions/jobs.d.ts +3 -0
  3. package/lib/actions/jobs.js +80 -0
  4. package/lib/actions/leads.d.ts +7 -0
  5. package/lib/actions/leads.js +67 -0
  6. package/lib/components/AlertVariationSellerEditable.d.ts +6 -0
  7. package/lib/components/AlertVariationSellerEditable.js +46 -0
  8. package/lib/components/Collapse.d.ts +3 -0
  9. package/lib/components/Collapse.js +34 -0
  10. package/lib/components/DateCountdown.d.ts +44 -0
  11. package/lib/components/DateCountdown.js +188 -0
  12. package/lib/components/DropzoneInput.d.ts +10 -0
  13. package/lib/components/DropzoneInput.js +169 -0
  14. package/lib/components/DynamicVariationInput.d.ts +9 -0
  15. package/lib/components/DynamicVariationInput.js +71 -0
  16. package/lib/components/FormLead.d.ts +10 -0
  17. package/lib/components/FormLead.js +215 -0
  18. package/lib/components/GroupInventory.d.ts +6 -0
  19. package/lib/components/GroupInventory.js +16 -0
  20. package/lib/components/InputGroupQuantity.d.ts +8 -0
  21. package/lib/components/InputGroupQuantity.js +117 -0
  22. package/lib/components/InputHiddenStatic.d.ts +8 -0
  23. package/lib/components/InputHiddenStatic.js +24 -0
  24. package/lib/components/InputProductQuantity.d.ts +7 -0
  25. package/lib/components/InputProductQuantity.js +102 -0
  26. package/lib/components/InventoryStatus.d.ts +7 -0
  27. package/lib/components/InventoryStatus.js +67 -0
  28. package/lib/components/MerchiProductForm.d.ts +62 -0
  29. package/lib/components/MerchiProductForm.js +51 -0
  30. package/lib/components/PriceMatrix.d.ts +27 -0
  31. package/lib/components/PriceMatrix.js +106 -0
  32. package/lib/components/ProductButtonsSubmit.d.ts +3 -0
  33. package/lib/components/ProductButtonsSubmit.js +52 -0
  34. package/lib/components/ProductFeatureDeadline.d.ts +3 -0
  35. package/lib/components/ProductFeatureDeadline.js +25 -0
  36. package/lib/components/ProductGroupBuyStatus.d.ts +3 -0
  37. package/lib/components/ProductGroupBuyStatus.js +47 -0
  38. package/lib/components/ProductPriceMatrix.d.ts +3 -0
  39. package/lib/components/ProductPriceMatrix.js +51 -0
  40. package/lib/components/ProductTitle.d.ts +3 -0
  41. package/lib/components/ProductTitle.js +36 -0
  42. package/lib/components/ProductTotalCost.d.ts +3 -0
  43. package/lib/components/ProductTotalCost.js +74 -0
  44. package/lib/components/ProductUnitPrice.d.ts +7 -0
  45. package/lib/components/ProductUnitPrice.js +51 -0
  46. package/lib/components/TooltipElement.d.ts +9 -0
  47. package/lib/components/TooltipElement.js +35 -0
  48. package/lib/components/VariationAreaInput.d.ts +8 -0
  49. package/lib/components/VariationAreaInput.js +219 -0
  50. package/lib/components/VariationCheckBoxOrRadioOption.d.ts +10 -0
  51. package/lib/components/VariationCheckBoxOrRadioOption.js +82 -0
  52. package/lib/components/VariationCheckboxRadio.d.ts +17 -0
  53. package/lib/components/VariationCheckboxRadio.js +57 -0
  54. package/lib/components/VariationColourExtractInput.d.ts +8 -0
  55. package/lib/components/VariationColourExtractInput.js +395 -0
  56. package/lib/components/VariationError.d.ts +7 -0
  57. package/lib/components/VariationError.js +52 -0
  58. package/lib/components/VariationFieldInputInstructions.d.ts +10 -0
  59. package/lib/components/VariationFieldInputInstructions.js +50 -0
  60. package/lib/components/VariationFieldInstructions.d.ts +3 -0
  61. package/lib/components/VariationFieldInstructions.js +22 -0
  62. package/lib/components/VariationFieldNameAndCostInputs.d.ts +7 -0
  63. package/lib/components/VariationFieldNameAndCostInputs.js +34 -0
  64. package/lib/components/VariationFieldOptionDefaultInputs.d.ts +7 -0
  65. package/lib/components/VariationFieldOptionDefaultInputs.js +48 -0
  66. package/lib/components/VariationFieldStaticValues.d.ts +8 -0
  67. package/lib/components/VariationFieldStaticValues.js +57 -0
  68. package/lib/components/VariationFileInput.d.ts +8 -0
  69. package/lib/components/VariationFileInput.js +229 -0
  70. package/lib/components/VariationInput.d.ts +11 -0
  71. package/lib/components/VariationInput.js +97 -0
  72. package/lib/components/VariationLabel.d.ts +11 -0
  73. package/lib/components/VariationLabel.js +85 -0
  74. package/lib/components/VariationOptionColour.d.ts +8 -0
  75. package/lib/components/VariationOptionColour.js +50 -0
  76. package/lib/components/VariationOptionImage.d.ts +8 -0
  77. package/lib/components/VariationOptionImage.js +52 -0
  78. package/lib/components/VariationSelect.d.ts +8 -0
  79. package/lib/components/VariationSelect.js +66 -0
  80. package/lib/components/VariationSelectElements.d.ts +16 -0
  81. package/lib/components/VariationSelectElements.js +141 -0
  82. package/lib/components/VariationTurnaroundTime.d.ts +9 -0
  83. package/lib/components/VariationTurnaroundTime.js +156 -0
  84. package/lib/components/Variations.d.ts +9 -0
  85. package/lib/components/Variations.js +109 -0
  86. package/lib/components/VariationsGroups.d.ts +8 -0
  87. package/lib/components/VariationsGroups.js +79 -0
  88. package/lib/components/buttons/ButtonAddGroup.d.ts +7 -0
  89. package/lib/components/buttons/ButtonAddGroup.js +38 -0
  90. package/lib/components/buttons/ButtonProductSubmit.d.ts +7 -0
  91. package/lib/components/buttons/ButtonProductSubmit.js +33 -0
  92. package/lib/components/buttons/ButtonRemoveGroup.d.ts +8 -0
  93. package/lib/components/buttons/ButtonRemoveGroup.js +25 -0
  94. package/lib/components/buttons/index.d.ts +4 -0
  95. package/lib/components/buttons/index.js +5 -0
  96. package/lib/components/cost.d.ts +11 -0
  97. package/lib/components/cost.js +44 -0
  98. package/lib/components/currency.d.ts +16 -0
  99. package/lib/components/currency.js +184 -0
  100. package/lib/components/drafts/DraftApprovePanel.d.ts +6 -0
  101. package/lib/components/drafts/DraftApprovePanel.js +315 -0
  102. package/lib/components/drafts/DraftCanvas.d.ts +13 -0
  103. package/lib/components/drafts/DraftCanvas.js +496 -0
  104. package/lib/components/drafts/DraftDesignerSheet.d.ts +9 -0
  105. package/lib/components/drafts/DraftDesignerSheet.js +685 -0
  106. package/lib/components/drafts/ProductDraftsHost.d.ts +3 -0
  107. package/lib/components/drafts/ProductDraftsHost.js +207 -0
  108. package/lib/components/drafts/useHtmlImage.d.ts +1 -0
  109. package/lib/components/drafts/useHtmlImage.js +45 -0
  110. package/lib/components/icons/IconChecked.d.ts +3 -0
  111. package/lib/components/icons/IconChecked.js +10 -0
  112. package/lib/components/icons/IconCheckedOrNoStock.d.ts +7 -0
  113. package/lib/components/icons/IconCheckedOrNoStock.js +13 -0
  114. package/lib/components/icons/IconCountryFlag.d.ts +8 -0
  115. package/lib/components/icons/IconCountryFlag.js +27 -0
  116. package/lib/components/icons/IconFile.d.ts +7 -0
  117. package/lib/components/icons/IconFile.js +41 -0
  118. package/lib/components/icons/IconNoStock.d.ts +3 -0
  119. package/lib/components/icons/IconNoStock.js +12 -0
  120. package/lib/components/icons/index.d.ts +5 -0
  121. package/lib/components/icons/index.js +6 -0
  122. package/lib/components/quoteAfterFieldChange.d.ts +7 -0
  123. package/lib/components/quoteAfterFieldChange.js +11 -0
  124. package/lib/components/quoteAfterFieldChange.test.js +58 -0
  125. package/lib/components/utils.d.ts +26 -0
  126. package/lib/components/utils.js +500 -0
  127. package/lib/context/MerchiProductFormProvider.d.ts +177 -0
  128. package/lib/context/MerchiProductFormProvider.js +1020 -0
  129. package/lib/images/product-not-found.png +0 -0
  130. package/lib/index.d.ts +42 -0
  131. package/lib/index.js +41 -0
  132. package/lib/styles/globals.css +1590 -0
  133. package/lib/styles/globals.css.map +1 -0
  134. package/lib/styles/globals.scss +1698 -0
  135. package/lib/utils/area.d.ts +77 -0
  136. package/lib/utils/area.js +298 -0
  137. package/lib/utils/cleanFormVariationJson.d.ts +5 -0
  138. package/lib/utils/cleanFormVariationJson.js +39 -0
  139. package/lib/utils/cleanFormVariationJson.test.js +54 -0
  140. package/lib/utils/countries.d.ts +7 -0
  141. package/lib/utils/countries.js +290 -0
  142. package/lib/utils/currency.d.ts +2 -0
  143. package/lib/utils/currency.js +188 -0
  144. package/lib/utils/draftExport.d.ts +21 -0
  145. package/lib/utils/draftExport.js +481 -0
  146. package/lib/utils/draftExport.test.js +78 -0
  147. package/lib/utils/draftFonts.d.ts +55 -0
  148. package/lib/utils/draftFonts.js +68 -0
  149. package/lib/utils/draftStorage.d.ts +25 -0
  150. package/lib/utils/draftStorage.js +148 -0
  151. package/lib/utils/draftStorage.test.js +125 -0
  152. package/lib/utils/draftTemplates.d.ts +87 -0
  153. package/lib/utils/draftTemplates.js +579 -0
  154. package/lib/utils/draftTemplates.test.js +476 -0
  155. package/lib/utils/formErrors.d.ts +2 -0
  156. package/lib/utils/formErrors.js +29 -0
  157. package/lib/utils/index.d.ts +3 -0
  158. package/lib/utils/index.js +4 -0
  159. package/lib/utils/priceMatrix.d.ts +57 -0
  160. package/lib/utils/priceMatrix.js +82 -0
  161. package/lib/utils/priceMatrix.test.js +200 -0
  162. package/lib/utils/products.d.ts +40 -0
  163. package/lib/utils/products.js +68 -0
  164. package/lib/utils/quantity.d.ts +7 -0
  165. package/lib/utils/quantity.js +19 -0
  166. package/lib/utils/quantity.test.js +42 -0
  167. package/lib/utils/reconcileVariations.d.ts +25 -0
  168. package/lib/utils/reconcileVariations.js +246 -0
  169. package/lib/utils/reconcileVariations.test.js +239 -0
  170. package/lib/utils/selectedVariationCosts.d.ts +6 -0
  171. package/lib/utils/selectedVariationCosts.js +59 -0
  172. package/lib/utils/selectedVariationCosts.test.js +66 -0
  173. package/lib/utils/selections.d.ts +23 -0
  174. package/lib/utils/selections.js +76 -0
  175. package/lib/utils/selections.test.js +159 -0
  176. package/lib/utils/singleOptionVariation.d.ts +2 -0
  177. package/lib/utils/singleOptionVariation.js +22 -0
  178. package/lib/utils/singleOptionVariation.test.js +59 -0
  179. package/lib/utils/supportedNumbers.d.ts +1 -0
  180. package/lib/utils/supportedNumbers.js +27 -0
  181. package/lib/utils/types.d.ts +114 -0
  182. package/lib/utils/types.js +50 -0
  183. package/lib/utils/url.d.ts +3 -0
  184. package/lib/utils/url.js +65 -0
  185. package/lib/utils/variationFields.d.ts +5 -0
  186. package/lib/utils/variationFields.js +116 -0
  187. package/lib/utils/variationFields.test.js +108 -0
  188. package/package.json +93 -0
@@ -0,0 +1,685 @@
1
+ 'use client';
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
5
+ function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
6
+ function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
7
+ function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
8
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
9
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
11
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
12
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
15
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
16
+ 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."); }
17
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
18
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
19
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
20
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
21
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
22
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
23
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
24
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
25
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
26
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
27
+ function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
28
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
29
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
30
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
31
+ function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
32
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
33
+ import * as React from 'react';
34
+ import { useEffect, useMemo, useRef, useState } from 'react';
35
+ import { createPortal } from 'react-dom';
36
+ import { FaArrowDown, FaArrowUp, FaCheck, FaFont, FaImage, FaLayerGroup, FaLock, FaPlus, FaUnlock, FaTimes, FaTrash } from 'react-icons/fa';
37
+ import { CgSpinner } from 'react-icons/cg';
38
+ import { useMerchiFormContext } from '../../context/MerchiProductFormProvider';
39
+ import { createObjectId, designGroupCount, detachField, fitTextBox, productHasVariationGroups, seedOrSyncCanvas, templatesForGroup, variationsForGroup } from '../../utils/draftTemplates';
40
+ import { loadDrafts, pruneDrafts, saveDrafts, savedPreview, upsertGroupTemplateDraft } from '../../utils/draftStorage';
41
+ import { exportDraftPngs, templateImageSources } from '../../utils/draftExport';
42
+ import { DEFAULT_DRAFT_FONT, DRAFT_TEXT_FONTS, cssFontFamily, ensureDraftFonts } from '../../utils/draftFonts';
43
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
44
+ var DraftCanvas = /*#__PURE__*/React.lazy(function () {
45
+ return import('./DraftCanvas');
46
+ });
47
+ var DraftCanvasBoundary = /*#__PURE__*/function (_React$Component) {
48
+ function DraftCanvasBoundary(props) {
49
+ var _this;
50
+ _classCallCheck(this, DraftCanvasBoundary);
51
+ _this = _callSuper(this, DraftCanvasBoundary, [props]);
52
+ _this.state = {
53
+ error: null
54
+ };
55
+ return _this;
56
+ }
57
+ _inherits(DraftCanvasBoundary, _React$Component);
58
+ return _createClass(DraftCanvasBoundary, [{
59
+ key: "render",
60
+ value: function render() {
61
+ if (this.state.error) {
62
+ return /*#__PURE__*/_jsx("div", {
63
+ className: "merchi-product-draft-canvas-fallback",
64
+ children: this.state.error
65
+ });
66
+ }
67
+ return this.props.children;
68
+ }
69
+ }], [{
70
+ key: "getDerivedStateFromError",
71
+ value: function getDerivedStateFromError(error) {
72
+ return {
73
+ error: error instanceof Error ? error.message : 'Canvas failed to load'
74
+ };
75
+ }
76
+ }]);
77
+ }(React.Component);
78
+ function stopBubble(event) {
79
+ event.stopPropagation();
80
+ }
81
+ function templateSrc(template, apiUrl) {
82
+ return templateImageSources(template, apiUrl);
83
+ }
84
+ function readFileAsDataUrl(file) {
85
+ return new Promise(function (resolve, reject) {
86
+ var reader = new FileReader();
87
+ reader.onload = function () {
88
+ return resolve(String(reader.result || ''));
89
+ };
90
+ reader.onerror = function () {
91
+ return reject(reader.error);
92
+ };
93
+ reader.readAsDataURL(file);
94
+ });
95
+ }
96
+ export default function DraftDesignerSheet(_ref) {
97
+ var open = _ref.open,
98
+ _ref$initialGroupInde = _ref.initialGroupIndex,
99
+ initialGroupIndex = _ref$initialGroupInde === void 0 ? 0 : _ref$initialGroupInde,
100
+ onClose = _ref.onClose,
101
+ onSaved = _ref.onSaved;
102
+ var _useMerchiFormContext = useMerchiFormContext(),
103
+ apiUrl = _useMerchiFormContext.apiUrl,
104
+ classNameDraftSheet = _useMerchiFormContext.classNameDraftSheet,
105
+ hookForm = _useMerchiFormContext.hookForm,
106
+ product = _useMerchiFormContext.product;
107
+ var formValues = hookForm.watch();
108
+ var hasGroups = productHasVariationGroups(product);
109
+ var groupCount = designGroupCount(product, formValues);
110
+ var _useState = useState(initialGroupIndex),
111
+ _useState2 = _slicedToArray(_useState, 2),
112
+ groupIndex = _useState2[0],
113
+ setGroupIndex = _useState2[1];
114
+ var _useState3 = useState(0),
115
+ _useState4 = _slicedToArray(_useState3, 2),
116
+ templateIndex = _useState4[0],
117
+ setTemplateIndex = _useState4[1];
118
+ var _useState5 = useState({
119
+ width: 1000,
120
+ height: 1000,
121
+ objects: []
122
+ }),
123
+ _useState6 = _slicedToArray(_useState5, 2),
124
+ state = _useState6[0],
125
+ setState = _useState6[1];
126
+ var _useState7 = useState(null),
127
+ _useState8 = _slicedToArray(_useState7, 2),
128
+ selectedId = _useState8[0],
129
+ setSelectedId = _useState8[1];
130
+ var _useState9 = useState(null),
131
+ _useState0 = _slicedToArray(_useState9, 2),
132
+ editingTextId = _useState0[0],
133
+ setEditingTextId = _useState0[1];
134
+ var _useState1 = useState(false),
135
+ _useState10 = _slicedToArray(_useState1, 2),
136
+ layersOpen = _useState10[0],
137
+ setLayersOpen = _useState10[1];
138
+ var _useState11 = useState(false),
139
+ _useState12 = _slicedToArray(_useState11, 2),
140
+ saving = _useState12[0],
141
+ setSaving = _useState12[1];
142
+ var _useState13 = useState(null),
143
+ _useState14 = _slicedToArray(_useState13, 2),
144
+ error = _useState14[0],
145
+ setError = _useState14[1];
146
+ var fileInputRef = useRef(null);
147
+ var canvasRef = useRef(null);
148
+ var templates = useMemo(function () {
149
+ var _formValues$variation;
150
+ return templatesForGroup(product, (formValues === null || formValues === void 0 ? void 0 : formValues.variations) || [], (formValues === null || formValues === void 0 || (_formValues$variation = formValues.variationsGroups) === null || _formValues$variation === void 0 || (_formValues$variation = _formValues$variation[groupIndex]) === null || _formValues$variation === void 0 ? void 0 : _formValues$variation.variations) || []);
151
+ }, [product, formValues, groupIndex]);
152
+ var template = templates[Math.min(templateIndex, templates.length - 1)] || templates[0];
153
+ useEffect(function () {
154
+ if (open) setGroupIndex(initialGroupIndex);
155
+ }, [open, initialGroupIndex]);
156
+ useEffect(function () {
157
+ if (open) ensureDraftFonts();
158
+ }, [open]);
159
+ var variationSyncKey = JSON.stringify(variationsForGroup(formValues, groupIndex).map(function (variation) {
160
+ var _variation$variationF;
161
+ return {
162
+ id: variation === null || variation === void 0 || (_variation$variationF = variation.variationField) === null || _variation$variationF === void 0 ? void 0 : _variation$variationF.id,
163
+ value: variation === null || variation === void 0 ? void 0 : variation.value,
164
+ files: ((variation === null || variation === void 0 ? void 0 : variation.variationFiles) || []).map(function (file) {
165
+ return (file === null || file === void 0 ? void 0 : file.viewUrl) || (file === null || file === void 0 ? void 0 : file.id);
166
+ })
167
+ };
168
+ }));
169
+ useEffect(function () {
170
+ if (!open || !template) return;
171
+ var drafts = loadDrafts(product.id);
172
+ var saved = savedPreview(drafts, groupIndex, template.id);
173
+ var variations = variationsForGroup(formValues, groupIndex);
174
+ setState(seedOrSyncCanvas((saved === null || saved === void 0 ? void 0 : saved.canvasJson) || null, template, variations));
175
+ setSelectedId(null);
176
+ setEditingTextId(null);
177
+ setError(null);
178
+ // Reload the saved canvas when switching group/template, not on every keystroke.
179
+ // eslint-disable-next-line react-hooks/exhaustive-deps
180
+ }, [open, groupIndex, template === null || template === void 0 ? void 0 : template.id, product === null || product === void 0 ? void 0 : product.id]);
181
+ useEffect(function () {
182
+ if (!open || !template) return;
183
+ var variations = variationsForGroup(formValues, groupIndex);
184
+ setState(function (current) {
185
+ var next = seedOrSyncCanvas(current, template, variations);
186
+ var same = current.width === next.width && current.height === next.height && current.objects.length === next.objects.length && current.objects.every(function (obj, index) {
187
+ var other = next.objects[index];
188
+ return obj.id === other.id && obj.text === other.text && obj.src === other.src && obj.fill === other.fill && obj.merchiFieldId === other.merchiFieldId;
189
+ });
190
+ return same ? current : next;
191
+ });
192
+ }, [open, variationSyncKey, template === null || template === void 0 ? void 0 : template.id, groupIndex]);
193
+ var selected = state.objects.find(function (obj) {
194
+ return obj.id === selectedId;
195
+ }) || null;
196
+ function patchSelected(patch) {
197
+ if (!selectedId) return;
198
+ setState(function (current) {
199
+ return _objectSpread(_objectSpread({}, current), {}, {
200
+ objects: current.objects.map(function (obj) {
201
+ if (obj.id !== selectedId) return obj;
202
+ var next = _objectSpread(_objectSpread({}, obj), patch);
203
+ if (next.type === 'text' && ('text' in patch || 'fontSize' in patch || 'fontFamily' in patch)) {
204
+ return _objectSpread(_objectSpread({}, next), fitTextBox(next));
205
+ }
206
+ return next;
207
+ })
208
+ });
209
+ });
210
+ }
211
+ function addText() {
212
+ var id = createObjectId();
213
+ var drafted = {
214
+ id: id,
215
+ type: 'text',
216
+ x: state.width * 0.5,
217
+ y: state.height * 0.35,
218
+ width: 1,
219
+ height: 1,
220
+ rotation: 0,
221
+ scaleX: 1,
222
+ scaleY: 1,
223
+ text: 'Your text',
224
+ fontSize: 56,
225
+ fontFamily: DEFAULT_DRAFT_FONT,
226
+ fill: '#111111',
227
+ align: 'left'
228
+ };
229
+ var obj = _objectSpread(_objectSpread({}, drafted), fitTextBox(drafted));
230
+ setState(function (current) {
231
+ return _objectSpread(_objectSpread({}, current), {}, {
232
+ objects: [].concat(_toConsumableArray(current.objects), [obj])
233
+ });
234
+ });
235
+ setSelectedId(id);
236
+ setEditingTextId(id);
237
+ }
238
+ function addImage(_x) {
239
+ return _addImage.apply(this, arguments);
240
+ }
241
+ function _addImage() {
242
+ _addImage = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(file) {
243
+ var src, id, obj;
244
+ return _regenerator().w(function (_context) {
245
+ while (1) switch (_context.n) {
246
+ case 0:
247
+ _context.n = 1;
248
+ return readFileAsDataUrl(file);
249
+ case 1:
250
+ src = _context.v;
251
+ id = createObjectId();
252
+ obj = {
253
+ id: id,
254
+ type: 'image',
255
+ x: state.width * 0.2,
256
+ y: state.height * 0.2,
257
+ width: state.width * 0.6,
258
+ height: state.height * 0.6,
259
+ rotation: 0,
260
+ scaleX: 1,
261
+ scaleY: 1,
262
+ src: src,
263
+ lockAspectRatio: true
264
+ };
265
+ setState(function (current) {
266
+ return _objectSpread(_objectSpread({}, current), {}, {
267
+ objects: [].concat(_toConsumableArray(current.objects), [obj])
268
+ });
269
+ });
270
+ setSelectedId(id);
271
+ case 2:
272
+ return _context.a(2);
273
+ }
274
+ }, _callee);
275
+ }));
276
+ return _addImage.apply(this, arguments);
277
+ }
278
+ function removeSelected() {
279
+ if (!selectedId) return;
280
+ setState(function (current) {
281
+ return detachField(current, selectedId);
282
+ });
283
+ setSelectedId(null);
284
+ setEditingTextId(null);
285
+ }
286
+ function moveLayer(direction) {
287
+ if (!selectedId) return;
288
+ setState(function (current) {
289
+ var index = current.objects.findIndex(function (obj) {
290
+ return obj.id === selectedId;
291
+ });
292
+ var nextIndex = index + direction;
293
+ if (index < 0 || nextIndex < 0 || nextIndex >= current.objects.length) {
294
+ return current;
295
+ }
296
+ var objects = _toConsumableArray(current.objects);
297
+ var _objects$splice = objects.splice(index, 1),
298
+ _objects$splice2 = _slicedToArray(_objects$splice, 1),
299
+ item = _objects$splice2[0];
300
+ objects.splice(nextIndex, 0, item);
301
+ return _objectSpread(_objectSpread({}, current), {}, {
302
+ objects: objects
303
+ });
304
+ });
305
+ }
306
+ function handleDone() {
307
+ return _handleDone.apply(this, arguments);
308
+ }
309
+ function _handleDone() {
310
+ _handleDone = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
311
+ var pngs, drafts, next, _t, _t2;
312
+ return _regenerator().w(function (_context2) {
313
+ while (1) switch (_context2.p = _context2.n) {
314
+ case 0:
315
+ if (!(!template || !(product !== null && product !== void 0 && product.id))) {
316
+ _context2.n = 1;
317
+ break;
318
+ }
319
+ return _context2.a(2);
320
+ case 1:
321
+ setSaving(true);
322
+ setError(null);
323
+ _context2.p = 2;
324
+ if (!canvasRef.current) {
325
+ _context2.n = 4;
326
+ break;
327
+ }
328
+ _context2.n = 3;
329
+ return canvasRef.current.exportPngs();
330
+ case 3:
331
+ _t = _context2.v;
332
+ _context2.n = 6;
333
+ break;
334
+ case 4:
335
+ _context2.n = 5;
336
+ return exportDraftPngs(state, templateImageSources(template, apiUrl), apiUrl);
337
+ case 5:
338
+ _t = _context2.v;
339
+ case 6:
340
+ pngs = _t;
341
+ drafts = pruneDrafts(loadDrafts(product.id), designGroupCount(product, hookForm.getValues()));
342
+ next = upsertGroupTemplateDraft(drafts, product.id, groupIndex, _objectSpread({
343
+ templateId: template.id,
344
+ canvasJson: state
345
+ }, pngs));
346
+ saveDrafts(product.id, next);
347
+ onSaved();
348
+ _context2.n = 8;
349
+ break;
350
+ case 7:
351
+ _context2.p = 7;
352
+ _t2 = _context2.v;
353
+ setError((_t2 === null || _t2 === void 0 ? void 0 : _t2.message) || 'Could not save draft');
354
+ case 8:
355
+ _context2.p = 8;
356
+ setSaving(false);
357
+ return _context2.f(8);
358
+ case 9:
359
+ return _context2.a(2);
360
+ }
361
+ }, _callee2, null, [[2, 7, 8, 9]]);
362
+ }));
363
+ return _handleDone.apply(this, arguments);
364
+ }
365
+ if (!open || typeof document === 'undefined') return null;
366
+ return /*#__PURE__*/createPortal(/*#__PURE__*/_jsxs("div", {
367
+ className: "".concat(classNameDraftSheet || '', " merchi-product-draft-sheet"),
368
+ role: "dialog",
369
+ "aria-modal": "true",
370
+ "aria-label": "Design artwork",
371
+ onMouseDown: stopBubble,
372
+ onClick: stopBubble,
373
+ children: [/*#__PURE__*/_jsxs("header", {
374
+ className: "merchi-product-draft-sheet-header",
375
+ children: [/*#__PURE__*/_jsx("button", {
376
+ type: "button",
377
+ className: "merchi-product-draft-icon-btn",
378
+ onClick: onClose,
379
+ "aria-label": "Close designer",
380
+ children: /*#__PURE__*/_jsx(FaTimes, {})
381
+ }), /*#__PURE__*/_jsxs("div", {
382
+ className: "merchi-product-draft-sheet-title",
383
+ children: [/*#__PURE__*/_jsx("strong", {
384
+ children: (template === null || template === void 0 ? void 0 : template.name) || 'Artwork'
385
+ }), hasGroups ? /*#__PURE__*/_jsxs("span", {
386
+ children: ["Group ", groupIndex + 1]
387
+ }) : null]
388
+ }), /*#__PURE__*/_jsxs("button", {
389
+ type: "button",
390
+ className: "merchi-product-draft-done-btn",
391
+ onClick: handleDone,
392
+ disabled: saving,
393
+ children: [saving ? /*#__PURE__*/_jsx(CgSpinner, {
394
+ className: "animate_spin"
395
+ }) : /*#__PURE__*/_jsx(FaCheck, {}), "Done"]
396
+ })]
397
+ }), hasGroups && groupCount > 1 ? /*#__PURE__*/_jsx("div", {
398
+ className: "merchi-product-draft-chips",
399
+ role: "tablist",
400
+ "aria-label": "Groups",
401
+ children: Array.from({
402
+ length: groupCount
403
+ }, function (_, index) {
404
+ return /*#__PURE__*/_jsxs("button", {
405
+ type: "button",
406
+ role: "tab",
407
+ "aria-selected": index === groupIndex,
408
+ className: "merchi-product-draft-chip".concat(index === groupIndex ? ' is-active' : ''),
409
+ onClick: function onClick() {
410
+ setGroupIndex(index);
411
+ setTemplateIndex(0);
412
+ },
413
+ children: ["Group ", index + 1]
414
+ }, index);
415
+ })
416
+ }) : null, templates.length > 1 ? /*#__PURE__*/_jsx("div", {
417
+ className: "merchi-product-draft-chips",
418
+ role: "tablist",
419
+ "aria-label": "Templates",
420
+ children: templates.map(function (item, index) {
421
+ var _item$id;
422
+ return /*#__PURE__*/_jsx("button", {
423
+ type: "button",
424
+ role: "tab",
425
+ "aria-selected": item.id === (template === null || template === void 0 ? void 0 : template.id),
426
+ className: "merchi-product-draft-chip".concat(item.id === (template === null || template === void 0 ? void 0 : template.id) ? ' is-active' : ''),
427
+ onClick: function onClick() {
428
+ return setTemplateIndex(index);
429
+ },
430
+ children: item.name || "Template ".concat(index + 1)
431
+ }, (_item$id = item.id) !== null && _item$id !== void 0 ? _item$id : index);
432
+ })
433
+ }) : null, /*#__PURE__*/_jsxs("div", {
434
+ className: "merchi-product-draft-main",
435
+ children: [/*#__PURE__*/_jsxs("div", {
436
+ className: "merchi-product-draft-sheet-body",
437
+ children: [/*#__PURE__*/_jsx(DraftCanvasBoundary, {
438
+ children: /*#__PURE__*/_jsx(React.Suspense, {
439
+ fallback: /*#__PURE__*/_jsx("div", {
440
+ className: "merchi-product-draft-canvas-fallback",
441
+ children: "Loading canvas\u2026"
442
+ }),
443
+ children: /*#__PURE__*/_jsx(DraftCanvas, {
444
+ ref: canvasRef,
445
+ state: state,
446
+ template: template,
447
+ templateSrc: templateSrc(template, apiUrl),
448
+ selectedId: selectedId,
449
+ onSelect: setSelectedId,
450
+ onChange: setState,
451
+ onEditText: function onEditText(id) {
452
+ setLayersOpen(false);
453
+ setSelectedId(id);
454
+ setEditingTextId(id);
455
+ }
456
+ })
457
+ })
458
+ }), layersOpen ? /*#__PURE__*/_jsxs("div", {
459
+ className: "merchi-product-draft-layers",
460
+ children: [/*#__PURE__*/_jsxs("div", {
461
+ className: "merchi-product-draft-layers-head",
462
+ children: [/*#__PURE__*/_jsx("strong", {
463
+ children: "Layers"
464
+ }), /*#__PURE__*/_jsx("button", {
465
+ type: "button",
466
+ onClick: function onClick() {
467
+ return setLayersOpen(false);
468
+ },
469
+ "aria-label": "Close layers",
470
+ children: /*#__PURE__*/_jsx(FaTimes, {})
471
+ })]
472
+ }), state.objects.length === 0 ? /*#__PURE__*/_jsx("p", {
473
+ children: "No objects yet. Add text or an image."
474
+ }) : _toConsumableArray(state.objects).reverse().map(function (obj, index) {
475
+ return /*#__PURE__*/_jsxs("button", {
476
+ type: "button",
477
+ className: "merchi-product-draft-layer".concat(obj.id === selectedId ? ' is-active' : ''),
478
+ onClick: function onClick() {
479
+ setSelectedId(obj.id);
480
+ setEditingTextId(null);
481
+ },
482
+ children: [/*#__PURE__*/_jsx(FaPlus, {
483
+ className: "merchi-product-draft-layer-icon"
484
+ }), obj.type === 'text' ? obj.text || 'Text' : obj.type === 'image' ? 'Image' : 'Base colour', /*#__PURE__*/_jsx("span", {
485
+ children: state.objects.length - index
486
+ })]
487
+ }, obj.id);
488
+ })]
489
+ }) : null]
490
+ }), error ? /*#__PURE__*/_jsx("p", {
491
+ className: "merchi-product-draft-error",
492
+ children: error
493
+ }) : null, /*#__PURE__*/_jsxs("aside", {
494
+ className: "merchi-product-draft-dock",
495
+ children: [selected ? /*#__PURE__*/_jsxs("div", {
496
+ className: "merchi-product-draft-inspector",
497
+ children: [selected.type === 'text' ? /*#__PURE__*/_jsxs(_Fragment, {
498
+ children: [/*#__PURE__*/_jsx("textarea", {
499
+ className: "merchi-product-draft-text-input",
500
+ value: selected.text || '',
501
+ rows: 2,
502
+ autoFocus: editingTextId === selected.id,
503
+ "aria-label": "Edit text",
504
+ onChange: function onChange(e) {
505
+ return patchSelected({
506
+ text: e.target.value
507
+ });
508
+ }
509
+ }), /*#__PURE__*/_jsxs("label", {
510
+ className: "merchi-product-draft-font",
511
+ children: [/*#__PURE__*/_jsx("span", {
512
+ className: "merchi-sr-only",
513
+ children: "Font"
514
+ }), /*#__PURE__*/_jsx("select", {
515
+ "aria-label": "Font",
516
+ value: selected.fontFamily || DEFAULT_DRAFT_FONT,
517
+ style: {
518
+ fontFamily: cssFontFamily(selected.fontFamily || DEFAULT_DRAFT_FONT)
519
+ },
520
+ onChange: function onChange(e) {
521
+ return patchSelected({
522
+ fontFamily: e.target.value
523
+ });
524
+ },
525
+ children: DRAFT_TEXT_FONTS.map(function (font) {
526
+ return /*#__PURE__*/_jsx("option", {
527
+ value: font.value,
528
+ style: {
529
+ fontFamily: cssFontFamily(font.value)
530
+ },
531
+ children: font.label
532
+ }, font.value);
533
+ })
534
+ })]
535
+ }), /*#__PURE__*/_jsx("button", {
536
+ type: "button",
537
+ className: "merchi-product-draft-stepper",
538
+ onClick: function onClick() {
539
+ return patchSelected({
540
+ fontSize: Math.max(12, (selected.fontSize || 48) - 8)
541
+ });
542
+ },
543
+ "aria-label": "Smaller text",
544
+ children: "A-"
545
+ }), /*#__PURE__*/_jsx("button", {
546
+ type: "button",
547
+ className: "merchi-product-draft-stepper",
548
+ onClick: function onClick() {
549
+ return patchSelected({
550
+ fontSize: Math.min(240, (selected.fontSize || 48) + 8)
551
+ });
552
+ },
553
+ "aria-label": "Larger text",
554
+ children: "A+"
555
+ }), selected.colourFieldId != null ? /*#__PURE__*/_jsxs("label", {
556
+ className: "merchi-product-draft-color",
557
+ children: [/*#__PURE__*/_jsx("span", {
558
+ className: "merchi-sr-only",
559
+ children: "Colour"
560
+ }), /*#__PURE__*/_jsx("input", {
561
+ type: "color",
562
+ value: /^#[0-9a-fA-F]{6}$/.test(selected.fill || '') ? selected.fill : '#111111',
563
+ onChange: function onChange(e) {
564
+ return patchSelected({
565
+ fill: e.target.value
566
+ });
567
+ }
568
+ })]
569
+ }) : null]
570
+ }) : null, selected.type === 'image' ? /*#__PURE__*/_jsxs("button", {
571
+ type: "button",
572
+ className: "merchi-product-draft-icon-btn".concat(selected.lockAspectRatio ? ' is-active' : ''),
573
+ onClick: function onClick() {
574
+ return patchSelected({
575
+ lockAspectRatio: !selected.lockAspectRatio
576
+ });
577
+ },
578
+ "aria-label": selected.lockAspectRatio ? 'Unlock aspect ratio' : 'Lock aspect ratio',
579
+ children: [selected.lockAspectRatio ? /*#__PURE__*/_jsx(FaLock, {}) : /*#__PURE__*/_jsx(FaUnlock, {}), "Ratio"]
580
+ }) : null, selected.type === 'rect' ? /*#__PURE__*/_jsxs("label", {
581
+ className: "merchi-product-draft-color",
582
+ children: [/*#__PURE__*/_jsx("span", {
583
+ className: "merchi-sr-only",
584
+ children: "Fill colour"
585
+ }), /*#__PURE__*/_jsx("input", {
586
+ type: "color",
587
+ value: selected.fill || '#cccccc',
588
+ onChange: function onChange(e) {
589
+ return patchSelected({
590
+ fill: e.target.value
591
+ });
592
+ }
593
+ })]
594
+ }) : null, /*#__PURE__*/_jsx("button", {
595
+ type: "button",
596
+ className: "merchi-product-draft-icon-btn",
597
+ onClick: function onClick() {
598
+ return patchSelected({
599
+ scaleX: (selected.scaleX || 1) * -1
600
+ });
601
+ },
602
+ "aria-label": "Flip",
603
+ children: "Flip"
604
+ }), /*#__PURE__*/_jsx("button", {
605
+ type: "button",
606
+ className: "merchi-product-draft-icon-btn",
607
+ onClick: function onClick() {
608
+ return moveLayer(1);
609
+ },
610
+ "aria-label": "Bring forward",
611
+ children: /*#__PURE__*/_jsx(FaArrowUp, {})
612
+ }), /*#__PURE__*/_jsx("button", {
613
+ type: "button",
614
+ className: "merchi-product-draft-icon-btn",
615
+ onClick: function onClick() {
616
+ return moveLayer(-1);
617
+ },
618
+ "aria-label": "Send backward",
619
+ children: /*#__PURE__*/_jsx(FaArrowDown, {})
620
+ }), /*#__PURE__*/_jsx("button", {
621
+ type: "button",
622
+ className: "merchi-product-draft-icon-btn is-danger",
623
+ onClick: removeSelected,
624
+ "aria-label": "Delete",
625
+ children: /*#__PURE__*/_jsx(FaTrash, {})
626
+ })]
627
+ }) : null, /*#__PURE__*/_jsxs("nav", {
628
+ className: "merchi-product-draft-toolbar",
629
+ "aria-label": "Design tools",
630
+ children: [/*#__PURE__*/_jsxs("button", {
631
+ type: "button",
632
+ onClick: function onClick() {
633
+ setLayersOpen(false);
634
+ addText();
635
+ },
636
+ children: [/*#__PURE__*/_jsx(FaFont, {}), /*#__PURE__*/_jsx("span", {
637
+ children: "Text"
638
+ })]
639
+ }), /*#__PURE__*/_jsxs("button", {
640
+ type: "button",
641
+ onClick: function onClick() {
642
+ var _fileInputRef$current;
643
+ setLayersOpen(false);
644
+ setEditingTextId(null);
645
+ (_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 || _fileInputRef$current.click();
646
+ },
647
+ children: [/*#__PURE__*/_jsx(FaImage, {}), /*#__PURE__*/_jsx("span", {
648
+ children: "Image"
649
+ })]
650
+ }), /*#__PURE__*/_jsxs("button", {
651
+ type: "button",
652
+ onClick: function onClick() {
653
+ setEditingTextId(null);
654
+ setLayersOpen(function (openNow) {
655
+ return !openNow;
656
+ });
657
+ },
658
+ children: [/*#__PURE__*/_jsx(FaLayerGroup, {}), /*#__PURE__*/_jsx("span", {
659
+ children: "Layers"
660
+ })]
661
+ }), /*#__PURE__*/_jsxs("button", {
662
+ type: "button",
663
+ onClick: removeSelected,
664
+ disabled: !selectedId,
665
+ children: [/*#__PURE__*/_jsx(FaTrash, {}), /*#__PURE__*/_jsx("span", {
666
+ children: "Delete"
667
+ })]
668
+ })]
669
+ }), /*#__PURE__*/_jsx("input", {
670
+ ref: fileInputRef,
671
+ type: "file",
672
+ accept: "image/*",
673
+ className: "merchi-product-draft-file",
674
+ onChange: function onChange(e) {
675
+ var _e$target$files;
676
+ var file = (_e$target$files = e.target.files) === null || _e$target$files === void 0 ? void 0 : _e$target$files[0];
677
+ if (file) addImage(file);
678
+ e.target.value = '';
679
+ }
680
+ })]
681
+ })]
682
+ })]
683
+ }), document.body);
684
+ }
685
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfcmVnZW5lcmF0b3IiLCJlIiwidCIsInIiLCJuIiwidG9TdHJpbmdUYWciLCJpIiwiYyIsIkdlbmVyYXRvciIsInUiLCJPYmplY3QiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsZW5ndGgiLCJsIiwiVHlwZUVycm9yIiwiY2FsbCIsImRvbmUiLCJ2YWx1ZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsImRlZmluZVByb3BlcnR5IiwiX3JlZ2VuZXJhdG9yRGVmaW5lIiwiX2ludm9rZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJBcnJheSIsImZyb20iLCJpc0FycmF5IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInB1c2giLCJfb2JqZWN0U3ByZWFkIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl9ub25JdGVyYWJsZVJlc3QiLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsInRlc3QiLCJuZXh0IiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnRpZXMiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlJlZmVyZW5jZUVycm9yIiwiQm9vbGVhbiIsInZhbHVlT2YiLCJfaW5oZXJpdHMiLCJfc2V0UHJvdG90eXBlT2YiLCJSZWFjdCIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZVBvcnRhbCIsIkZhQXJyb3dEb3duIiwiRmFBcnJvd1VwIiwiRmFDaGVjayIsIkZhRm9udCIsIkZhSW1hZ2UiLCJGYUxheWVyR3JvdXAiLCJGYUxvY2siLCJGYVBsdXMiLCJGYVVubG9jayIsIkZhVGltZXMiLCJGYVRyYXNoIiwiQ2dTcGlubmVyIiwidXNlTWVyY2hpRm9ybUNvbnRleHQiLCJjcmVhdGVPYmplY3RJZCIsImRlc2lnbkdyb3VwQ291bnQiLCJkZXRhY2hGaWVsZCIsImZpdFRleHRCb3giLCJwcm9kdWN0SGFzVmFyaWF0aW9uR3JvdXBzIiwic2VlZE9yU3luY0NhbnZhcyIsInRlbXBsYXRlc0Zvckdyb3VwIiwidmFyaWF0aW9uc0Zvckdyb3VwIiwibG9hZERyYWZ0cyIsInBydW5lRHJhZnRzIiwic2F2ZURyYWZ0cyIsInNhdmVkUHJldmlldyIsInVwc2VydEdyb3VwVGVtcGxhdGVEcmFmdCIsImV4cG9ydERyYWZ0UG5ncyIsInRlbXBsYXRlSW1hZ2VTb3VyY2VzIiwiREVGQVVMVF9EUkFGVF9GT05UIiwiRFJBRlRfVEVYVF9GT05UUyIsImNzc0ZvbnRGYW1pbHkiLCJlbnN1cmVEcmFmdEZvbnRzIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiRHJhZnRDYW52YXMiLCJsYXp5IiwiRHJhZnRDYW52YXNCb3VuZGFyeSIsIl9SZWFjdCRDb21wb25lbnQiLCJwcm9wcyIsIl90aGlzIiwic3RhdGUiLCJlcnJvciIsInJlbmRlciIsImNsYXNzTmFtZSIsImNoaWxkcmVuIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwiQ29tcG9uZW50Iiwic3RvcEJ1YmJsZSIsImV2ZW50Iiwic3RvcFByb3BhZ2F0aW9uIiwidGVtcGxhdGVTcmMiLCJ0ZW1wbGF0ZSIsImFwaVVybCIsInJlYWRGaWxlQXNEYXRhVXJsIiwiZmlsZSIsInJlamVjdCIsInJlYWRlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwicmVhZEFzRGF0YVVSTCIsIkRyYWZ0RGVzaWduZXJTaGVldCIsIl9yZWYiLCJvcGVuIiwiX3JlZiRpbml0aWFsR3JvdXBJbmRlIiwiaW5pdGlhbEdyb3VwSW5kZXgiLCJvbkNsb3NlIiwib25TYXZlZCIsIl91c2VNZXJjaGlGb3JtQ29udGV4dCIsImNsYXNzTmFtZURyYWZ0U2hlZXQiLCJob29rRm9ybSIsInByb2R1Y3QiLCJmb3JtVmFsdWVzIiwid2F0Y2giLCJoYXNHcm91cHMiLCJncm91cENvdW50IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImdyb3VwSW5kZXgiLCJzZXRHcm91cEluZGV4IiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJ0ZW1wbGF0ZUluZGV4Iiwic2V0VGVtcGxhdGVJbmRleCIsIl91c2VTdGF0ZTUiLCJ3aWR0aCIsImhlaWdodCIsIm9iamVjdHMiLCJfdXNlU3RhdGU2Iiwic2V0U3RhdGUiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNlbGVjdGVkSWQiLCJzZXRTZWxlY3RlZElkIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJlZGl0aW5nVGV4dElkIiwic2V0RWRpdGluZ1RleHRJZCIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImxheWVyc09wZW4iLCJzZXRMYXllcnNPcGVuIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsInNhdmluZyIsInNldFNhdmluZyIsIl91c2VTdGF0ZTEzIiwiX3VzZVN0YXRlMTQiLCJzZXRFcnJvciIsImZpbGVJbnB1dFJlZiIsImNhbnZhc1JlZiIsInRlbXBsYXRlcyIsIl9mb3JtVmFsdWVzJHZhcmlhdGlvbiIsInZhcmlhdGlvbnMiLCJ2YXJpYXRpb25zR3JvdXBzIiwiTWF0aCIsIm1pbiIsInZhcmlhdGlvblN5bmNLZXkiLCJKU09OIiwic3RyaW5naWZ5IiwibWFwIiwidmFyaWF0aW9uIiwiX3ZhcmlhdGlvbiR2YXJpYXRpb25GIiwiaWQiLCJ2YXJpYXRpb25GaWVsZCIsImZpbGVzIiwidmFyaWF0aW9uRmlsZXMiLCJ2aWV3VXJsIiwiZHJhZnRzIiwic2F2ZWQiLCJjYW52YXNKc29uIiwiY3VycmVudCIsInNhbWUiLCJldmVyeSIsIm9iaiIsImluZGV4Iiwib3RoZXIiLCJ0ZXh0Iiwic3JjIiwiZmlsbCIsIm1lcmNoaUZpZWxkSWQiLCJzZWxlY3RlZCIsImZpbmQiLCJwYXRjaFNlbGVjdGVkIiwicGF0Y2giLCJ0eXBlIiwiYWRkVGV4dCIsImRyYWZ0ZWQiLCJ4Iiwicm90YXRpb24iLCJzY2FsZVgiLCJzY2FsZVkiLCJmb250U2l6ZSIsImZvbnRGYW1pbHkiLCJhbGlnbiIsImNvbmNhdCIsImFkZEltYWdlIiwiX3giLCJfYWRkSW1hZ2UiLCJfY2FsbGVlIiwiX2NvbnRleHQiLCJsb2NrQXNwZWN0UmF0aW8iLCJyZW1vdmVTZWxlY3RlZCIsIm1vdmVMYXllciIsImRpcmVjdGlvbiIsImZpbmRJbmRleCIsIm5leHRJbmRleCIsIl9vYmplY3RzJHNwbGljZSIsInNwbGljZSIsIl9vYmplY3RzJHNwbGljZTIiLCJpdGVtIiwiaGFuZGxlRG9uZSIsIl9oYW5kbGVEb25lIiwiX2NhbGxlZTIiLCJwbmdzIiwiX3QiLCJfdDIiLCJfY29udGV4dDIiLCJleHBvcnRQbmdzIiwiZ2V0VmFsdWVzIiwidGVtcGxhdGVJZCIsImRvY3VtZW50Iiwicm9sZSIsIm9uTW91c2VEb3duIiwib25DbGljayIsImRpc2FibGVkIiwiXyIsIl9pdGVtJGlkIiwiU3VzcGVuc2UiLCJmYWxsYmFjayIsInJlZiIsIm9uU2VsZWN0Iiwib25DaGFuZ2UiLCJvbkVkaXRUZXh0IiwicmV2ZXJzZSIsInJvd3MiLCJhdXRvRm9jdXMiLCJ0YXJnZXQiLCJzdHlsZSIsImZvbnQiLCJsYWJlbCIsIm1heCIsImNvbG91ckZpZWxkSWQiLCJfZmlsZUlucHV0UmVmJGN1cnJlbnQiLCJjbGljayIsIm9wZW5Ob3ciLCJhY2NlcHQiLCJfZSR0YXJnZXQkZmlsZXMiLCJib2R5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZHJhZnRzL0RyYWZ0RGVzaWduZXJTaGVldC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7XG4gIEZhQXJyb3dEb3duLFxuICBGYUFycm93VXAsXG4gIEZhQ2hlY2ssXG4gIEZhRm9udCxcbiAgRmFJbWFnZSxcbiAgRmFMYXllckdyb3VwLFxuICBGYUxvY2ssXG4gIEZhUGx1cyxcbiAgRmFVbmxvY2ssXG4gIEZhVGltZXMsXG4gIEZhVHJhc2gsXG59IGZyb20gJ3JlYWN0LWljb25zL2ZhJztcbmltcG9ydCB7IENnU3Bpbm5lciB9IGZyb20gJ3JlYWN0LWljb25zL2NnJztcbmltcG9ydCB7IHVzZU1lcmNoaUZvcm1Db250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9NZXJjaGlQcm9kdWN0Rm9ybVByb3ZpZGVyJztcbmltcG9ydCB7XG4gIGNyZWF0ZU9iamVjdElkLFxuICBkZXNpZ25Hcm91cENvdW50LFxuICBkZXRhY2hGaWVsZCxcbiAgZml0VGV4dEJveCxcbiAgcHJvZHVjdEhhc1ZhcmlhdGlvbkdyb3VwcyxcbiAgc2VlZE9yU3luY0NhbnZhcyxcbiAgdGVtcGxhdGVzRm9yR3JvdXAsXG4gIHZhcmlhdGlvbnNGb3JHcm91cCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvZHJhZnRUZW1wbGF0ZXMnO1xuaW1wb3J0IHtcbiAgbG9hZERyYWZ0cyxcbiAgcHJ1bmVEcmFmdHMsXG4gIHNhdmVEcmFmdHMsXG4gIHNhdmVkUHJldmlldyxcbiAgdXBzZXJ0R3JvdXBUZW1wbGF0ZURyYWZ0LFxufSBmcm9tICcuLi8uLi91dGlscy9kcmFmdFN0b3JhZ2UnO1xuaW1wb3J0IHsgZXhwb3J0RHJhZnRQbmdzLCB0ZW1wbGF0ZUltYWdlU291cmNlcyB9IGZyb20gJy4uLy4uL3V0aWxzL2RyYWZ0RXhwb3J0JztcbmltcG9ydCB7XG4gIERyYWZ0Q2FudmFzSGFuZGxlLFxuICBEcmFmdENhbnZhc09iamVjdCxcbiAgRHJhZnRDYW52YXNTdGF0ZSxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9EUkFGVF9GT05ULFxuICBEUkFGVF9URVhUX0ZPTlRTLFxuICBjc3NGb250RmFtaWx5LFxuICBlbnN1cmVEcmFmdEZvbnRzLFxufSBmcm9tICcuLi8uLi91dGlscy9kcmFmdEZvbnRzJztcblxuY29uc3QgRHJhZnRDYW52YXMgPSBSZWFjdC5sYXp5KCgpID0+IGltcG9ydCgnLi9EcmFmdENhbnZhcycpKTtcblxuY2xhc3MgRHJhZnRDYW52YXNCb3VuZGFyeSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgeyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0sXG4gIHsgZXJyb3I6IHN0cmluZyB8IG51bGwgfVxuPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyBlcnJvcjogbnVsbCB9O1xuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvcjogdW5rbm93bikge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnQ2FudmFzIGZhaWxlZCB0byBsb2FkJyxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmVycm9yKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtY2FudmFzLWZhbGxiYWNrJz5cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5lcnJvcn1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdG9wQnViYmxlKGV2ZW50OiBSZWFjdC5TeW50aGV0aWNFdmVudCkge1xuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn1cblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgb3BlbjogYm9vbGVhbjtcbiAgaW5pdGlhbEdyb3VwSW5kZXg/OiBudW1iZXI7XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG4gIG9uU2F2ZWQ6ICgpID0+IHZvaWQ7XG59XG5cbmZ1bmN0aW9uIHRlbXBsYXRlU3JjKHRlbXBsYXRlOiBhbnksIGFwaVVybD86IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHRlbXBsYXRlSW1hZ2VTb3VyY2VzKHRlbXBsYXRlLCBhcGlVcmwpO1xufVxuXG5mdW5jdGlvbiByZWFkRmlsZUFzRGF0YVVybChmaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKFN0cmluZyhyZWFkZXIucmVzdWx0IHx8ICcnKSk7XG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVhZGVyLmVycm9yKTtcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERyYWZ0RGVzaWduZXJTaGVldCh7XG4gIG9wZW4sXG4gIGluaXRpYWxHcm91cEluZGV4ID0gMCxcbiAgb25DbG9zZSxcbiAgb25TYXZlZCxcbn06IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBhcGlVcmwsXG4gICAgY2xhc3NOYW1lRHJhZnRTaGVldCxcbiAgICBob29rRm9ybSxcbiAgICBwcm9kdWN0LFxuICB9ID0gdXNlTWVyY2hpRm9ybUNvbnRleHQoKTtcbiAgY29uc3QgZm9ybVZhbHVlcyA9IGhvb2tGb3JtLndhdGNoKCk7XG4gIGNvbnN0IGhhc0dyb3VwcyA9IHByb2R1Y3RIYXNWYXJpYXRpb25Hcm91cHMocHJvZHVjdCk7XG4gIGNvbnN0IGdyb3VwQ291bnQgPSBkZXNpZ25Hcm91cENvdW50KHByb2R1Y3QsIGZvcm1WYWx1ZXMpO1xuICBjb25zdCBbZ3JvdXBJbmRleCwgc2V0R3JvdXBJbmRleF0gPSB1c2VTdGF0ZShpbml0aWFsR3JvdXBJbmRleCk7XG4gIGNvbnN0IFt0ZW1wbGF0ZUluZGV4LCBzZXRUZW1wbGF0ZUluZGV4XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlPERyYWZ0Q2FudmFzU3RhdGU+KHtcbiAgICB3aWR0aDogMTAwMCxcbiAgICBoZWlnaHQ6IDEwMDAsXG4gICAgb2JqZWN0czogW10sXG4gIH0pO1xuICBjb25zdCBbc2VsZWN0ZWRJZCwgc2V0U2VsZWN0ZWRJZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2VkaXRpbmdUZXh0SWQsIHNldEVkaXRpbmdUZXh0SWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtsYXllcnNPcGVuLCBzZXRMYXllcnNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3NhdmluZywgc2V0U2F2aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBjYW52YXNSZWYgPSB1c2VSZWY8RHJhZnRDYW52YXNIYW5kbGU+KG51bGwpO1xuXG4gIGNvbnN0IHRlbXBsYXRlcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gdGVtcGxhdGVzRm9yR3JvdXAoXG4gICAgICBwcm9kdWN0LFxuICAgICAgZm9ybVZhbHVlcz8udmFyaWF0aW9ucyB8fCBbXSxcbiAgICAgIGZvcm1WYWx1ZXM/LnZhcmlhdGlvbnNHcm91cHM/Lltncm91cEluZGV4XT8udmFyaWF0aW9ucyB8fCBbXSxcbiAgICApLFxuICAgIFtwcm9kdWN0LCBmb3JtVmFsdWVzLCBncm91cEluZGV4XSxcbiAgKTtcbiAgY29uc3QgdGVtcGxhdGUgPSB0ZW1wbGF0ZXNbTWF0aC5taW4odGVtcGxhdGVJbmRleCwgdGVtcGxhdGVzLmxlbmd0aCAtIDEpXSB8fCB0ZW1wbGF0ZXNbMF07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3Blbikgc2V0R3JvdXBJbmRleChpbml0aWFsR3JvdXBJbmRleCk7XG4gIH0sIFtvcGVuLCBpbml0aWFsR3JvdXBJbmRleF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wZW4pIGVuc3VyZURyYWZ0Rm9udHMoKTtcbiAgfSwgW29wZW5dKTtcblxuICBjb25zdCB2YXJpYXRpb25TeW5jS2V5ID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgdmFyaWF0aW9uc0Zvckdyb3VwKGZvcm1WYWx1ZXMsIGdyb3VwSW5kZXgpLm1hcCgodmFyaWF0aW9uOiBhbnkpID0+ICh7XG4gICAgICBpZDogdmFyaWF0aW9uPy52YXJpYXRpb25GaWVsZD8uaWQsXG4gICAgICB2YWx1ZTogdmFyaWF0aW9uPy52YWx1ZSxcbiAgICAgIGZpbGVzOiAodmFyaWF0aW9uPy52YXJpYXRpb25GaWxlcyB8fCBbXSkubWFwKFxuICAgICAgICAoZmlsZTogYW55KSA9PiBmaWxlPy52aWV3VXJsIHx8IGZpbGU/LmlkXG4gICAgICApLFxuICAgIH0pKVxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuIHx8ICF0ZW1wbGF0ZSkgcmV0dXJuO1xuICAgIGNvbnN0IGRyYWZ0cyA9IGxvYWREcmFmdHMocHJvZHVjdC5pZCk7XG4gICAgY29uc3Qgc2F2ZWQgPSBzYXZlZFByZXZpZXcoZHJhZnRzLCBncm91cEluZGV4LCB0ZW1wbGF0ZS5pZCk7XG4gICAgY29uc3QgdmFyaWF0aW9ucyA9IHZhcmlhdGlvbnNGb3JHcm91cChmb3JtVmFsdWVzLCBncm91cEluZGV4KTtcbiAgICBzZXRTdGF0ZShzZWVkT3JTeW5jQ2FudmFzKHNhdmVkPy5jYW52YXNKc29uIHx8IG51bGwsIHRlbXBsYXRlLCB2YXJpYXRpb25zKSk7XG4gICAgc2V0U2VsZWN0ZWRJZChudWxsKTtcbiAgICBzZXRFZGl0aW5nVGV4dElkKG51bGwpO1xuICAgIHNldEVycm9yKG51bGwpO1xuICAgIC8vIFJlbG9hZCB0aGUgc2F2ZWQgY2FudmFzIHdoZW4gc3dpdGNoaW5nIGdyb3VwL3RlbXBsYXRlLCBub3Qgb24gZXZlcnkga2V5c3Ryb2tlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW29wZW4sIGdyb3VwSW5kZXgsIHRlbXBsYXRlPy5pZCwgcHJvZHVjdD8uaWRdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghb3BlbiB8fCAhdGVtcGxhdGUpIHJldHVybjtcbiAgICBjb25zdCB2YXJpYXRpb25zID0gdmFyaWF0aW9uc0Zvckdyb3VwKGZvcm1WYWx1ZXMsIGdyb3VwSW5kZXgpO1xuICAgIHNldFN0YXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gc2VlZE9yU3luY0NhbnZhcyhjdXJyZW50LCB0ZW1wbGF0ZSwgdmFyaWF0aW9ucyk7XG4gICAgICBjb25zdCBzYW1lID0gY3VycmVudC53aWR0aCA9PT0gbmV4dC53aWR0aFxuICAgICAgICAmJiBjdXJyZW50LmhlaWdodCA9PT0gbmV4dC5oZWlnaHRcbiAgICAgICAgJiYgY3VycmVudC5vYmplY3RzLmxlbmd0aCA9PT0gbmV4dC5vYmplY3RzLmxlbmd0aFxuICAgICAgICAmJiBjdXJyZW50Lm9iamVjdHMuZXZlcnkoKG9iaiwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBvdGhlciA9IG5leHQub2JqZWN0c1tpbmRleF07XG4gICAgICAgICAgcmV0dXJuIG9iai5pZCA9PT0gb3RoZXIuaWRcbiAgICAgICAgICAgICYmIG9iai50ZXh0ID09PSBvdGhlci50ZXh0XG4gICAgICAgICAgICAmJiBvYmouc3JjID09PSBvdGhlci5zcmNcbiAgICAgICAgICAgICYmIG9iai5maWxsID09PSBvdGhlci5maWxsXG4gICAgICAgICAgICAmJiBvYmoubWVyY2hpRmllbGRJZCA9PT0gb3RoZXIubWVyY2hpRmllbGRJZDtcbiAgICAgICAgfSk7XG4gICAgICByZXR1cm4gc2FtZSA/IGN1cnJlbnQgOiBuZXh0O1xuICAgIH0pO1xuICB9LCBbb3BlbiwgdmFyaWF0aW9uU3luY0tleSwgdGVtcGxhdGU/LmlkLCBncm91cEluZGV4XSk7XG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSBzdGF0ZS5vYmplY3RzLmZpbmQoKG9iaikgPT4gb2JqLmlkID09PSBzZWxlY3RlZElkKSB8fCBudWxsO1xuXG4gIGZ1bmN0aW9uIHBhdGNoU2VsZWN0ZWQocGF0Y2g6IFBhcnRpYWw8RHJhZnRDYW52YXNPYmplY3Q+KSB7XG4gICAgaWYgKCFzZWxlY3RlZElkKSByZXR1cm47XG4gICAgc2V0U3RhdGUoKGN1cnJlbnQpID0+ICh7XG4gICAgICAuLi5jdXJyZW50LFxuICAgICAgb2JqZWN0czogY3VycmVudC5vYmplY3RzLm1hcCgob2JqKSA9PiB7XG4gICAgICAgIGlmIChvYmouaWQgIT09IHNlbGVjdGVkSWQpIHJldHVybiBvYmo7XG4gICAgICAgIGNvbnN0IG5leHQgPSB7IC4uLm9iaiwgLi4ucGF0Y2ggfTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG5leHQudHlwZSA9PT0gJ3RleHQnXG4gICAgICAgICAgJiYgKCd0ZXh0JyBpbiBwYXRjaCB8fCAnZm9udFNpemUnIGluIHBhdGNoIHx8ICdmb250RmFtaWx5JyBpbiBwYXRjaClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ubmV4dCwgLi4uZml0VGV4dEJveChuZXh0KSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgfSksXG4gICAgfSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkVGV4dCgpIHtcbiAgICBjb25zdCBpZCA9IGNyZWF0ZU9iamVjdElkKCk7XG4gICAgY29uc3QgZHJhZnRlZDogRHJhZnRDYW52YXNPYmplY3QgPSB7XG4gICAgICBpZCxcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIHg6IHN0YXRlLndpZHRoICogMC41LFxuICAgICAgeTogc3RhdGUuaGVpZ2h0ICogMC4zNSxcbiAgICAgIHdpZHRoOiAxLFxuICAgICAgaGVpZ2h0OiAxLFxuICAgICAgcm90YXRpb246IDAsXG4gICAgICBzY2FsZVg6IDEsXG4gICAgICBzY2FsZVk6IDEsXG4gICAgICB0ZXh0OiAnWW91ciB0ZXh0JyxcbiAgICAgIGZvbnRTaXplOiA1NixcbiAgICAgIGZvbnRGYW1pbHk6IERFRkFVTFRfRFJBRlRfRk9OVCxcbiAgICAgIGZpbGw6ICcjMTExMTExJyxcbiAgICAgIGFsaWduOiAnbGVmdCcsXG4gICAgfTtcbiAgICBjb25zdCBvYmogPSB7IC4uLmRyYWZ0ZWQsIC4uLmZpdFRleHRCb3goZHJhZnRlZCkgfTtcbiAgICBzZXRTdGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgb2JqZWN0czogWy4uLmN1cnJlbnQub2JqZWN0cywgb2JqXSB9KSk7XG4gICAgc2V0U2VsZWN0ZWRJZChpZCk7XG4gICAgc2V0RWRpdGluZ1RleHRJZChpZCk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBhZGRJbWFnZShmaWxlOiBGaWxlKSB7XG4gICAgY29uc3Qgc3JjID0gYXdhaXQgcmVhZEZpbGVBc0RhdGFVcmwoZmlsZSk7XG4gICAgY29uc3QgaWQgPSBjcmVhdGVPYmplY3RJZCgpO1xuICAgIGNvbnN0IG9iajogRHJhZnRDYW52YXNPYmplY3QgPSB7XG4gICAgICBpZCxcbiAgICAgIHR5cGU6ICdpbWFnZScsXG4gICAgICB4OiBzdGF0ZS53aWR0aCAqIDAuMixcbiAgICAgIHk6IHN0YXRlLmhlaWdodCAqIDAuMixcbiAgICAgIHdpZHRoOiBzdGF0ZS53aWR0aCAqIDAuNixcbiAgICAgIGhlaWdodDogc3RhdGUuaGVpZ2h0ICogMC42LFxuICAgICAgcm90YXRpb246IDAsXG4gICAgICBzY2FsZVg6IDEsXG4gICAgICBzY2FsZVk6IDEsXG4gICAgICBzcmMsXG4gICAgICBsb2NrQXNwZWN0UmF0aW86IHRydWUsXG4gICAgfTtcbiAgICBzZXRTdGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgb2JqZWN0czogWy4uLmN1cnJlbnQub2JqZWN0cywgb2JqXSB9KSk7XG4gICAgc2V0U2VsZWN0ZWRJZChpZCk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVTZWxlY3RlZCgpIHtcbiAgICBpZiAoIXNlbGVjdGVkSWQpIHJldHVybjtcbiAgICBzZXRTdGF0ZSgoY3VycmVudCkgPT4gZGV0YWNoRmllbGQoY3VycmVudCwgc2VsZWN0ZWRJZCkpO1xuICAgIHNldFNlbGVjdGVkSWQobnVsbCk7XG4gICAgc2V0RWRpdGluZ1RleHRJZChudWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdmVMYXllcihkaXJlY3Rpb246IDEgfCAtMSkge1xuICAgIGlmICghc2VsZWN0ZWRJZCkgcmV0dXJuO1xuICAgIHNldFN0YXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IGN1cnJlbnQub2JqZWN0cy5maW5kSW5kZXgoKG9iaikgPT4gb2JqLmlkID09PSBzZWxlY3RlZElkKTtcbiAgICAgIGNvbnN0IG5leHRJbmRleCA9IGluZGV4ICsgZGlyZWN0aW9uO1xuICAgICAgaWYgKGluZGV4IDwgMCB8fCBuZXh0SW5kZXggPCAwIHx8IG5leHRJbmRleCA+PSBjdXJyZW50Lm9iamVjdHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfVxuICAgICAgY29uc3Qgb2JqZWN0cyA9IFsuLi5jdXJyZW50Lm9iamVjdHNdO1xuICAgICAgY29uc3QgW2l0ZW1dID0gb2JqZWN0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgb2JqZWN0cy5zcGxpY2UobmV4dEluZGV4LCAwLCBpdGVtKTtcbiAgICAgIHJldHVybiB7IC4uLmN1cnJlbnQsIG9iamVjdHMgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZURvbmUoKSB7XG4gICAgaWYgKCF0ZW1wbGF0ZSB8fCAhcHJvZHVjdD8uaWQpIHJldHVybjtcbiAgICBzZXRTYXZpbmcodHJ1ZSk7XG4gICAgc2V0RXJyb3IobnVsbCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBuZ3MgPSBjYW52YXNSZWYuY3VycmVudFxuICAgICAgICA/IGF3YWl0IGNhbnZhc1JlZi5jdXJyZW50LmV4cG9ydFBuZ3MoKVxuICAgICAgICA6IGF3YWl0IGV4cG9ydERyYWZ0UG5ncyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICB0ZW1wbGF0ZUltYWdlU291cmNlcyh0ZW1wbGF0ZSwgYXBpVXJsKSxcbiAgICAgICAgICBhcGlVcmwsXG4gICAgICAgICk7XG4gICAgICBjb25zdCBkcmFmdHMgPSBwcnVuZURyYWZ0cyhcbiAgICAgICAgbG9hZERyYWZ0cyhwcm9kdWN0LmlkKSxcbiAgICAgICAgZGVzaWduR3JvdXBDb3VudChwcm9kdWN0LCBob29rRm9ybS5nZXRWYWx1ZXMoKSksXG4gICAgICApO1xuICAgICAgY29uc3QgbmV4dCA9IHVwc2VydEdyb3VwVGVtcGxhdGVEcmFmdChkcmFmdHMsIHByb2R1Y3QuaWQsIGdyb3VwSW5kZXgsIHtcbiAgICAgICAgdGVtcGxhdGVJZDogdGVtcGxhdGUuaWQsXG4gICAgICAgIGNhbnZhc0pzb246IHN0YXRlLFxuICAgICAgICAuLi5wbmdzLFxuICAgICAgfSk7XG4gICAgICBzYXZlRHJhZnRzKHByb2R1Y3QuaWQsIG5leHQpO1xuICAgICAgb25TYXZlZCgpO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBzZXRFcnJvcihlcnI/Lm1lc3NhZ2UgfHwgJ0NvdWxkIG5vdCBzYXZlIGRyYWZ0Jyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFNhdmluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFvcGVuIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsO1xuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtgJHtjbGFzc05hbWVEcmFmdFNoZWV0IHx8ICcnfSBtZXJjaGktcHJvZHVjdC1kcmFmdC1zaGVldGB9XG4gICAgICByb2xlPSdkaWFsb2cnXG4gICAgICBhcmlhLW1vZGFsPSd0cnVlJ1xuICAgICAgYXJpYS1sYWJlbD0nRGVzaWduIGFydHdvcmsnXG4gICAgICBvbk1vdXNlRG93bj17c3RvcEJ1YmJsZX1cbiAgICAgIG9uQ2xpY2s9e3N0b3BCdWJibGV9XG4gICAgPlxuICAgICAgPGhlYWRlciBjbGFzc05hbWU9J21lcmNoaS1wcm9kdWN0LWRyYWZ0LXNoZWV0LWhlYWRlcic+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPSdidXR0b24nXG4gICAgICAgICAgY2xhc3NOYW1lPSdtZXJjaGktcHJvZHVjdC1kcmFmdC1pY29uLWJ0bidcbiAgICAgICAgICBvbkNsaWNrPXtvbkNsb3NlfVxuICAgICAgICAgIGFyaWEtbGFiZWw9J0Nsb3NlIGRlc2lnbmVyJ1xuICAgICAgICA+XG4gICAgICAgICAgPEZhVGltZXMgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktcHJvZHVjdC1kcmFmdC1zaGVldC10aXRsZSc+XG4gICAgICAgICAgPHN0cm9uZz57dGVtcGxhdGU/Lm5hbWUgfHwgJ0FydHdvcmsnfTwvc3Ryb25nPlxuICAgICAgICAgIHtoYXNHcm91cHMgPyA8c3Bhbj5Hcm91cCB7Z3JvdXBJbmRleCArIDF9PC9zcGFuPiA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgIGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtZG9uZS1idG4nXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlRG9uZX1cbiAgICAgICAgICBkaXNhYmxlZD17c2F2aW5nfVxuICAgICAgICA+XG4gICAgICAgICAge3NhdmluZyA/IDxDZ1NwaW5uZXIgY2xhc3NOYW1lPSdhbmltYXRlX3NwaW4nIC8+IDogPEZhQ2hlY2sgLz59XG4gICAgICAgICAgRG9uZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvaGVhZGVyPlxuXG4gICAgICB7aGFzR3JvdXBzICYmIGdyb3VwQ291bnQgPiAxID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtY2hpcHMnIHJvbGU9J3RhYmxpc3QnIGFyaWEtbGFiZWw9J0dyb3Vwcyc+XG4gICAgICAgICAge0FycmF5LmZyb20oeyBsZW5ndGg6IGdyb3VwQ291bnQgfSwgKF8sIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICAgICAgcm9sZT0ndGFiJ1xuICAgICAgICAgICAgICBhcmlhLXNlbGVjdGVkPXtpbmRleCA9PT0gZ3JvdXBJbmRleH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgbWVyY2hpLXByb2R1Y3QtZHJhZnQtY2hpcCR7aW5kZXggPT09IGdyb3VwSW5kZXggPyAnIGlzLWFjdGl2ZScgOiAnJ31gfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0R3JvdXBJbmRleChpbmRleCk7XG4gICAgICAgICAgICAgICAgc2V0VGVtcGxhdGVJbmRleCgwKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgR3JvdXAge2luZGV4ICsgMX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICkgOiBudWxsfVxuXG4gICAgICB7dGVtcGxhdGVzLmxlbmd0aCA+IDEgPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktcHJvZHVjdC1kcmFmdC1jaGlwcycgcm9sZT0ndGFibGlzdCcgYXJpYS1sYWJlbD0nVGVtcGxhdGVzJz5cbiAgICAgICAgICB7dGVtcGxhdGVzLm1hcCgoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSA9PiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGtleT17aXRlbS5pZCA/PyBpbmRleH1cbiAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICByb2xlPSd0YWInXG4gICAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9e2l0ZW0uaWQgPT09IHRlbXBsYXRlPy5pZH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgbWVyY2hpLXByb2R1Y3QtZHJhZnQtY2hpcCR7aXRlbS5pZCA9PT0gdGVtcGxhdGU/LmlkID8gJyBpcy1hY3RpdmUnIDogJyd9YH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0VGVtcGxhdGVJbmRleChpbmRleCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtpdGVtLm5hbWUgfHwgYFRlbXBsYXRlICR7aW5kZXggKyAxfWB9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogbnVsbH1cblxuICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1wcm9kdWN0LWRyYWZ0LW1haW4nPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtc2hlZXQtYm9keSc+XG4gICAgICAgICAgPERyYWZ0Q2FudmFzQm91bmRhcnk+XG4gICAgICAgICAgICA8UmVhY3QuU3VzcGVuc2VcbiAgICAgICAgICAgICAgZmFsbGJhY2s9e1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktcHJvZHVjdC1kcmFmdC1jYW52YXMtZmFsbGJhY2snPkxvYWRpbmcgY2FudmFz4oCmPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPERyYWZ0Q2FudmFzXG4gICAgICAgICAgICAgICAgcmVmPXtjYW52YXNSZWZ9XG4gICAgICAgICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgICAgICAgIHRlbXBsYXRlPXt0ZW1wbGF0ZX1cbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVNyYz17dGVtcGxhdGVTcmModGVtcGxhdGUsIGFwaVVybCl9XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJZD17c2VsZWN0ZWRJZH1cbiAgICAgICAgICAgICAgICBvblNlbGVjdD17c2V0U2VsZWN0ZWRJZH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0U3RhdGV9XG4gICAgICAgICAgICAgICAgb25FZGl0VGV4dD17KGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRMYXllcnNPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSWQoaWQpO1xuICAgICAgICAgICAgICAgICAgc2V0RWRpdGluZ1RleHRJZChpZCk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUmVhY3QuU3VzcGVuc2U+XG4gICAgICAgICAgPC9EcmFmdENhbnZhc0JvdW5kYXJ5PlxuXG4gICAgICAgICAge2xheWVyc09wZW4gPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtbGF5ZXJzJz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1wcm9kdWN0LWRyYWZ0LWxheWVycy1oZWFkJz5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPkxheWVyczwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJyBvbkNsaWNrPXsoKSA9PiBzZXRMYXllcnNPcGVuKGZhbHNlKX0gYXJpYS1sYWJlbD0nQ2xvc2UgbGF5ZXJzJz5cbiAgICAgICAgICAgICAgICAgIDxGYVRpbWVzIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB7c3RhdGUub2JqZWN0cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgPHA+Tm8gb2JqZWN0cyB5ZXQuIEFkZCB0ZXh0IG9yIGFuIGltYWdlLjwvcD5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICBbLi4uc3RhdGUub2JqZWN0c10ucmV2ZXJzZSgpLm1hcCgob2JqLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBrZXk9e29iai5pZH1cbiAgICAgICAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BtZXJjaGktcHJvZHVjdC1kcmFmdC1sYXllciR7b2JqLmlkID09PSBzZWxlY3RlZElkID8gJyBpcy1hY3RpdmUnIDogJyd9YH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSWQob2JqLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRFZGl0aW5nVGV4dElkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8RmFQbHVzIGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtbGF5ZXItaWNvbicgLz5cbiAgICAgICAgICAgICAgICAgICAge29iai50eXBlID09PSAndGV4dCcgPyAob2JqLnRleHQgfHwgJ1RleHQnKSA6IG9iai50eXBlID09PSAnaW1hZ2UnID8gJ0ltYWdlJyA6ICdCYXNlIGNvbG91cid9XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPntzdGF0ZS5vYmplY3RzLmxlbmd0aCAtIGluZGV4fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICB7ZXJyb3IgPyA8cCBjbGFzc05hbWU9J21lcmNoaS1wcm9kdWN0LWRyYWZ0LWVycm9yJz57ZXJyb3J9PC9wPiA6IG51bGx9XG5cbiAgICAgICAgPGFzaWRlIGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtZG9jayc+XG4gICAgICAgICAge3NlbGVjdGVkID8gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1wcm9kdWN0LWRyYWZ0LWluc3BlY3Rvcic+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZC50eXBlID09PSAndGV4dCcgPyAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9J21lcmNoaS1wcm9kdWN0LWRyYWZ0LXRleHQtaW5wdXQnXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWxlY3RlZC50ZXh0IHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICByb3dzPXsyfVxuICAgICAgICAgICAgICAgICAgICBhdXRvRm9jdXM9e2VkaXRpbmdUZXh0SWQgPT09IHNlbGVjdGVkLmlkfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSdFZGl0IHRleHQnXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gcGF0Y2hTZWxlY3RlZCh7IHRleHQ6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9J21lcmNoaS1wcm9kdWN0LWRyYWZ0LWZvbnQnPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J21lcmNoaS1zci1vbmx5Jz5Gb250PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0nRm9udCdcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c2VsZWN0ZWQuZm9udEZhbWlseSB8fCBERUZBVUxUX0RSQUZUX0ZPTlR9XG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgZm9udEZhbWlseTogY3NzRm9udEZhbWlseShzZWxlY3RlZC5mb250RmFtaWx5IHx8IERFRkFVTFRfRFJBRlRfRk9OVCkgfX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHBhdGNoU2VsZWN0ZWQoeyBmb250RmFtaWx5OiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHtEUkFGVF9URVhUX0ZPTlRTLm1hcCgoZm9udCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2ZvbnQudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb250LnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBmb250RmFtaWx5OiBjc3NGb250RmFtaWx5KGZvbnQudmFsdWUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtmb250LmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9J21lcmNoaS1wcm9kdWN0LWRyYWZ0LXN0ZXBwZXInXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHBhdGNoU2VsZWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBNYXRoLm1heCgxMiwgKHNlbGVjdGVkLmZvbnRTaXplIHx8IDQ4KSAtIDgpLFxuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0nU21hbGxlciB0ZXh0J1xuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBBLVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPSdtZXJjaGktcHJvZHVjdC1kcmFmdC1zdGVwcGVyJ1xuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBwYXRjaFNlbGVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogTWF0aC5taW4oMjQwLCAoc2VsZWN0ZWQuZm9udFNpemUgfHwgNDgpICsgOCksXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSdMYXJnZXIgdGV4dCdcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQStcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAge3NlbGVjdGVkLmNvbG91ckZpZWxkSWQgIT0gbnVsbCA/IChcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtY29sb3InPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nbWVyY2hpLXNyLW9ubHknPkNvbG91cjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J2NvbG9yJ1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ey9eI1swLTlhLWZBLUZdezZ9JC8udGVzdChzZWxlY3RlZC5maWxsIHx8ICcnKSA/IHNlbGVjdGVkLmZpbGwgOiAnIzExMTExMSd9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHBhdGNoU2VsZWN0ZWQoeyBmaWxsOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICB7c2VsZWN0ZWQudHlwZSA9PT0gJ2ltYWdlJyA/IChcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPSdidXR0b24nXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BtZXJjaGktcHJvZHVjdC1kcmFmdC1pY29uLWJ0biR7c2VsZWN0ZWQubG9ja0FzcGVjdFJhdGlvID8gJyBpcy1hY3RpdmUnIDogJyd9YH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHBhdGNoU2VsZWN0ZWQoeyBsb2NrQXNwZWN0UmF0aW86ICFzZWxlY3RlZC5sb2NrQXNwZWN0UmF0aW8gfSl9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtzZWxlY3RlZC5sb2NrQXNwZWN0UmF0aW8gPyAnVW5sb2NrIGFzcGVjdCByYXRpbycgOiAnTG9jayBhc3BlY3QgcmF0aW8nfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtzZWxlY3RlZC5sb2NrQXNwZWN0UmF0aW8gPyA8RmFMb2NrIC8+IDogPEZhVW5sb2NrIC8+fVxuICAgICAgICAgICAgICAgICAgUmF0aW9cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIHtzZWxlY3RlZC50eXBlID09PSAncmVjdCcgPyAoXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtY29sb3InPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdtZXJjaGktc3Itb25seSc+RmlsbCBjb2xvdXI8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT0nY29sb3InXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWxlY3RlZC5maWxsIHx8ICcjY2NjY2NjJ31cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBwYXRjaFNlbGVjdGVkKHsgZmlsbDogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtaWNvbi1idG4nXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcGF0Y2hTZWxlY3RlZCh7IHNjYWxlWDogKHNlbGVjdGVkLnNjYWxlWCB8fCAxKSAqIC0xIH0pfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9J0ZsaXAnXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBGbGlwXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtaWNvbi1idG4nXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbW92ZUxheWVyKDEpfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9J0JyaW5nIGZvcndhcmQnXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8RmFBcnJvd1VwIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtaWNvbi1idG4nXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbW92ZUxheWVyKC0xKX1cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSdTZW5kIGJhY2t3YXJkJ1xuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZhQXJyb3dEb3duIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtaWNvbi1idG4gaXMtZGFuZ2VyJ1xuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3JlbW92ZVNlbGVjdGVkfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9J0RlbGV0ZSdcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGYVRyYXNoIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICA8bmF2IGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtdG9vbGJhcicgYXJpYS1sYWJlbD0nRGVzaWduIHRvb2xzJz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0TGF5ZXJzT3BlbihmYWxzZSk7XG4gICAgICAgICAgICAgICAgYWRkVGV4dCgpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8RmFGb250IC8+XG4gICAgICAgICAgICAgIDxzcGFuPlRleHQ8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0TGF5ZXJzT3BlbihmYWxzZSk7XG4gICAgICAgICAgICAgICAgc2V0RWRpdGluZ1RleHRJZChudWxsKTtcbiAgICAgICAgICAgICAgICBmaWxlSW5wdXRSZWYuY3VycmVudD8uY2xpY2soKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEZhSW1hZ2UgLz5cbiAgICAgICAgICAgICAgPHNwYW4+SW1hZ2U8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0RWRpdGluZ1RleHRJZChudWxsKTtcbiAgICAgICAgICAgICAgICBzZXRMYXllcnNPcGVuKChvcGVuTm93KSA9PiAhb3Blbk5vdyk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxGYUxheWVyR3JvdXAgLz5cbiAgICAgICAgICAgICAgPHNwYW4+TGF5ZXJzPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbicgb25DbGljaz17cmVtb3ZlU2VsZWN0ZWR9IGRpc2FibGVkPXshc2VsZWN0ZWRJZH0+XG4gICAgICAgICAgICAgIDxGYVRyYXNoIC8+XG4gICAgICAgICAgICAgIDxzcGFuPkRlbGV0ZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmF2PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgcmVmPXtmaWxlSW5wdXRSZWZ9XG4gICAgICAgICAgICB0eXBlPSdmaWxlJ1xuICAgICAgICAgICAgYWNjZXB0PSdpbWFnZS8qJ1xuICAgICAgICAgICAgY2xhc3NOYW1lPSdtZXJjaGktcHJvZHVjdC1kcmFmdC1maWxlJ1xuICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBlLnRhcmdldC5maWxlcz8uWzBdO1xuICAgICAgICAgICAgICBpZiAoZmlsZSkgYWRkSW1hZ2UoZmlsZSk7XG4gICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gJyc7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYXNpZGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4sXG4gICAgZG9jdW1lbnQuYm9keSxcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTs7QUFBQyxTQUFBQSxRQUFBQyxDQUFBLHNDQUFBRCxPQUFBLHdCQUFBRSxNQUFBLHVCQUFBQSxNQUFBLENBQUFDLFFBQUEsYUFBQUYsQ0FBQSxrQkFBQUEsQ0FBQSxnQkFBQUEsQ0FBQSxXQUFBQSxDQUFBLHlCQUFBQyxNQUFBLElBQUFELENBQUEsQ0FBQUcsV0FBQSxLQUFBRixNQUFBLElBQUFELENBQUEsS0FBQUMsTUFBQSxDQUFBRyxTQUFBLHFCQUFBSixDQUFBLEtBQUFELE9BQUEsQ0FBQUMsQ0FBQTtBQUFBLFNBQUFLLGFBQUEsSUFDYix1S0FBQUMsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsd0JBQUFQLE1BQUEsR0FBQUEsTUFBQSxPQUFBUSxDQUFBLEdBQUFELENBQUEsQ0FBQU4sUUFBQSxrQkFBQUYsQ0FBQSxHQUFBUSxDQUFBLENBQUFFLFdBQUEsOEJBQUFDLEVBQUFILENBQUEsRUFBQUMsQ0FBQSxFQUFBVCxDQUFBLEVBQUFXLENBQUEsUUFBQUMsQ0FBQSxHQUFBSCxDQUFBLElBQUFBLENBQUEsQ0FBQUwsU0FBQSxZQUFBUyxTQUFBLEdBQUFKLENBQUEs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