@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,1020 @@
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 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; }
5
+ 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; }
6
+ 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; }
7
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
8
+ 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); }
9
+ 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 }; })(); }
10
+ 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); }
11
+ 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); }
12
+ 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); }); }; }
13
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
14
+ 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."); }
15
+ 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; } }
16
+ 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; }
17
+ 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; } }
18
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
19
+ import * as React from 'react';
20
+ import { createContext, useContext, useState } from 'react';
21
+ import { useForm } from 'react-hook-form';
22
+ import { fetchJobQuote } from '../actions/jobs';
23
+ import { productHasGroups } from '../utils/products';
24
+ import { getMerchiSourceJobTags } from '../components/utils';
25
+ import { productAllowsClientDesign } from '../utils/draftTemplates';
26
+ import { loadArtworkPath, loadDrafts } from '../utils/draftStorage';
27
+ import ProductDraftsHost from '../components/drafts/ProductDraftsHost';
28
+ import { buildEmptyVariationFromField, cleanJobVariationsAndGroups, syncJobSelectedOptionsFromValues } from '../components/utils';
29
+ import { pricing } from '@merchi/sdk';
30
+ import { toSelections } from '../utils/selections';
31
+ import { scrollToFirstFormError } from '../utils/formErrors';
32
+ import { buildDesiredVariationsFromFields, productFieldsForPricingFields, reconcileVariations } from '../utils/reconcileVariations';
33
+ import { groupFieldTemplates as groupFieldTemplatesFromProduct, liftIndependentVariationsFromGroups, sanitizeProductVariationFields } from '../utils/variationFields';
34
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
35
+ var MerchiProductFormContext = /*#__PURE__*/createContext({
36
+ apiUrl: '',
37
+ allowAddToCart: false,
38
+ btnNameAddToCart: undefined,
39
+ classNameAlertSellerEditable: undefined,
40
+ classNameButtonSubmit: undefined,
41
+ classNameButtonGroupAdd: undefined,
42
+ classNameButtonGroupRemove: undefined,
43
+ classNameButtonsSubmitContainer: undefined,
44
+ classNameButtonApproveDrafts: undefined,
45
+ classNameButtonCloseDrafts: undefined,
46
+ classNameDraftButtonContainer: undefined,
47
+ classNameDraftCta: undefined,
48
+ classNameDraftGroupContainer: undefined,
49
+ classNameDraftGroupTitle: undefined,
50
+ classNameDraftSheet: undefined,
51
+ classNameDraftToolbar: undefined,
52
+ classNameFileUploadContainer: undefined,
53
+ classNameFileUpload: undefined,
54
+ classNameFilePreviewContainer: undefined,
55
+ classNameFileUploadTextContainer: undefined,
56
+ classNameFilePreviewIconWrapper: undefined,
57
+ classNameFileUploadButton: undefined,
58
+ classNameFileUploadIcon: undefined,
59
+ classNameFileUploadIconSecond: undefined,
60
+ classNameFileUploadIconContainer: undefined,
61
+ classNameFileListItem: undefined,
62
+ classNameFileButtonDelete: undefined,
63
+ classNameFileListItemContainer: undefined,
64
+ classNameGroupsContainer: undefined,
65
+ classNameGroupPriceContainer: undefined,
66
+ classNameInput: undefined,
67
+ classNameInputContainer: undefined,
68
+ classNameInventoryStatus: undefined,
69
+ classNameOptionContainer: undefined,
70
+ classNameOptionInput: undefined,
71
+ classNameOptionLabel: undefined,
72
+ classNameOptionSuper: undefined,
73
+ classNameOptionsCheckboxRadioContainer: undefined,
74
+ classNameOptionImage: undefined,
75
+ classNameOptionImageContainer: undefined,
76
+ classNameOptionColour: undefined,
77
+ classNameOptionColourContainer: undefined,
78
+ classNameProductTitle: undefined,
79
+ classNameProductOriginTitle: undefined,
80
+ classNameProductTotalContainer: undefined,
81
+ classNameProductTotal: undefined,
82
+ classNameQuantityLabelContainer: undefined,
83
+ classNameUnitPrice: undefined,
84
+ classNamePriceMatrix: undefined,
85
+ control: {},
86
+ currentUser: {},
87
+ draftApproveCallback: null,
88
+ getQuote: function getQuote() {},
89
+ hcaptchaSiteKey: undefined,
90
+ pricingRules: undefined,
91
+ hideCost: false,
92
+ hideCountry: false,
93
+ hideDomainName: false,
94
+ hideCalculatedPrice: false,
95
+ hideQuantityField: false,
96
+ hideRequestQuotationButton: false,
97
+ hidePaymentUpfrontButton: false,
98
+ hideTitle: false,
99
+ hookForm: {},
100
+ isCartItem: false,
101
+ initJob: undefined,
102
+ isDraftDesignerOpen: false,
103
+ isDraftModalOpen: false,
104
+ consumePendingCheckout: function consumePendingCheckout() {
105
+ return null;
106
+ },
107
+ job: {},
108
+ loading: false,
109
+ inventoryLoading: false,
110
+ onAddToCart: function onAddToCart() {},
111
+ onBuyNow: function onBuyNow() {},
112
+ onGetQuote: function onGetQuote() {},
113
+ onSubmit: function onSubmit() {},
114
+ product: {},
115
+ productFormId: undefined,
116
+ setClient: function setClient() {},
117
+ setIsDraftDesignerOpen: function setIsDraftDesignerOpen() {},
118
+ setIsDraftModalOpen: function setIsDraftModalOpen() {},
119
+ setJob: function setJob(job) {},
120
+ setLoading: function setLoading(loading) {},
121
+ showAlert: function showAlert(alert) {},
122
+ showCurrency: false,
123
+ showCurrencyCode: false,
124
+ showFeatureDeadline: false,
125
+ showGroupBuyStatus: false,
126
+ showPriceMatrix: true,
127
+ showUnitPrice: false
128
+ });
129
+ export var useMerchiFormContext = function useMerchiFormContext() {
130
+ return useContext(MerchiProductFormContext);
131
+ };
132
+ export var MerchiProductFormProvider = function MerchiProductFormProvider(_ref) {
133
+ var _ref$apiUrl = _ref.apiUrl,
134
+ apiUrl = _ref$apiUrl === void 0 ? 'https://api.merchi.co/v6/' : _ref$apiUrl,
135
+ allowAddToCart = _ref.allowAddToCart,
136
+ btnNameAddToCart = _ref.btnNameAddToCart,
137
+ _ref$classNameAlertSe = _ref.classNameAlertSellerEditable,
138
+ classNameAlertSellerEditable = _ref$classNameAlertSe === void 0 ? 'alert alert-light' : _ref$classNameAlertSe,
139
+ _ref$classNameButtonS = _ref.classNameButtonSubmit,
140
+ classNameButtonSubmit = _ref$classNameButtonS === void 0 ? 'btn btn-primary merchi-embed-form_button-submit' : _ref$classNameButtonS,
141
+ _ref$classNameButtonG = _ref.classNameButtonGroupAdd,
142
+ classNameButtonGroupAdd = _ref$classNameButtonG === void 0 ? 'btn btn-white' : _ref$classNameButtonG,
143
+ _ref$classNameButtonG2 = _ref.classNameButtonGroupRemove,
144
+ classNameButtonGroupRemove = _ref$classNameButtonG2 === void 0 ? 'btn btn-danger' : _ref$classNameButtonG2,
145
+ _ref$classNameButtons = _ref.classNameButtonsSubmitContainer,
146
+ classNameButtonsSubmitContainer = _ref$classNameButtons === void 0 ? 'merchi-product-buttons-submit-container' : _ref$classNameButtons,
147
+ _ref$classNameButtonA = _ref.classNameButtonApproveDrafts,
148
+ classNameButtonApproveDrafts = _ref$classNameButtonA === void 0 ? 'btn btn-success' : _ref$classNameButtonA,
149
+ _ref$classNameButtonC = _ref.classNameButtonCloseDrafts,
150
+ classNameButtonCloseDrafts = _ref$classNameButtonC === void 0 ? 'btn btn-secondary' : _ref$classNameButtonC,
151
+ _ref$classNameDraftBu = _ref.classNameDraftButtonContainer,
152
+ classNameDraftButtonContainer = _ref$classNameDraftBu === void 0 ? 'merchi-product-draft-button-container' : _ref$classNameDraftBu,
153
+ _ref$classNameDraftCt = _ref.classNameDraftCta,
154
+ classNameDraftCta = _ref$classNameDraftCt === void 0 ? 'merchi-product-draft-cta' : _ref$classNameDraftCt,
155
+ _ref$classNameDraftGr = _ref.classNameDraftGroupContainer,
156
+ classNameDraftGroupContainer = _ref$classNameDraftGr === void 0 ? 'merchi-product-draft-group-container' : _ref$classNameDraftGr,
157
+ _ref$classNameDraftGr2 = _ref.classNameDraftGroupTitle,
158
+ classNameDraftGroupTitle = _ref$classNameDraftGr2 === void 0 ? 'merchi-product-draft-group-title' : _ref$classNameDraftGr2,
159
+ _ref$classNameDraftSh = _ref.classNameDraftSheet,
160
+ classNameDraftSheet = _ref$classNameDraftSh === void 0 ? 'merchi-product-draft-sheet' : _ref$classNameDraftSh,
161
+ _ref$classNameDraftTo = _ref.classNameDraftToolbar,
162
+ classNameDraftToolbar = _ref$classNameDraftTo === void 0 ? 'merchi-product-draft-toolbar' : _ref$classNameDraftTo,
163
+ _ref$classNameFileUpl = _ref.classNameFileUploadContainer,
164
+ classNameFileUploadContainer = _ref$classNameFileUpl === void 0 ? 'merchi-input-file-container' : _ref$classNameFileUpl,
165
+ _ref$classNameFileUpl2 = _ref.classNameFileUpload,
166
+ classNameFileUpload = _ref$classNameFileUpl2 === void 0 ? 'merchi-embed-form_dropzone' : _ref$classNameFileUpl2,
167
+ _ref$classNameFilePre = _ref.classNameFilePreviewContainer,
168
+ classNameFilePreviewContainer = _ref$classNameFilePre === void 0 ? 'uploaded-variation-file' : _ref$classNameFilePre,
169
+ _ref$classNameFileUpl3 = _ref.classNameFileUploadTextContainer,
170
+ classNameFileUploadTextContainer = _ref$classNameFileUpl3 === void 0 ? 'merchi-embed-form_dropzone-text-container' : _ref$classNameFileUpl3,
171
+ _ref$classNameFilePre2 = _ref.classNameFilePreviewIconWrapper,
172
+ classNameFilePreviewIconWrapper = _ref$classNameFilePre2 === void 0 ? 'uploaded-variation-file-icon-wrapper' : _ref$classNameFilePre2,
173
+ _ref$classNameFileUpl4 = _ref.classNameFileUploadButton,
174
+ classNameFileUploadButton = _ref$classNameFileUpl4 === void 0 ? 'btn btn-sm btn-link ml-auto' : _ref$classNameFileUpl4,
175
+ _ref$classNameFileUpl5 = _ref.classNameFileUploadIcon,
176
+ classNameFileUploadIcon = _ref$classNameFileUpl5 === void 0 ? 'merchi-embed-form_dropzone-icon' : _ref$classNameFileUpl5,
177
+ _ref$classNameFileUpl6 = _ref.classNameFileUploadIconSecond,
178
+ classNameFileUploadIconSecond = _ref$classNameFileUpl6 === void 0 ? 'merchi-embed-form_dropzone-icon-plus' : _ref$classNameFileUpl6,
179
+ _ref$classNameFileUpl7 = _ref.classNameFileUploadIconContainer,
180
+ classNameFileUploadIconContainer = _ref$classNameFileUpl7 === void 0 ? 'merchi-embed-form_dropzone-icon-container' : _ref$classNameFileUpl7,
181
+ _ref$classNameFileLis = _ref.classNameFileListItem,
182
+ classNameFileListItem = _ref$classNameFileLis === void 0 ? 'list-group-item no-z-index-hover' : _ref$classNameFileLis,
183
+ _ref$classNameFileBut = _ref.classNameFileButtonDownload,
184
+ classNameFileButtonDownload = _ref$classNameFileBut === void 0 ? 'btn btn-sm btn-secondary' : _ref$classNameFileBut,
185
+ _ref$classNameFileBut2 = _ref.classNameFileButtonDelete,
186
+ classNameFileButtonDelete = _ref$classNameFileBut2 === void 0 ? 'btn btn-sm btn-danger ml-2' : _ref$classNameFileBut2,
187
+ _ref$classNameFileLis2 = _ref.classNameFileListItemContainer,
188
+ classNameFileListItemContainer = _ref$classNameFileLis2 === void 0 ? 'list-group' : _ref$classNameFileLis2,
189
+ _ref$classNameGroupsC = _ref.classNameGroupsContainer,
190
+ classNameGroupsContainer = _ref$classNameGroupsC === void 0 ? 'merchi-embed-form_product-group-container' : _ref$classNameGroupsC,
191
+ _ref$classNameGroupPr = _ref.classNameGroupPriceContainer,
192
+ classNameGroupPriceContainer = _ref$classNameGroupPr === void 0 ? 'merchi-embed-form_product-group-total-cost' : _ref$classNameGroupPr,
193
+ _ref$classNameInput = _ref.classNameInput,
194
+ classNameInput = _ref$classNameInput === void 0 ? 'form-control' : _ref$classNameInput,
195
+ _ref$classNameInvento = _ref.classNameInventoryStatus,
196
+ classNameInventoryStatus = _ref$classNameInvento === void 0 ? 'flex-fill' : _ref$classNameInvento,
197
+ _ref$classNameInputCo = _ref.classNameInputContainer,
198
+ classNameInputContainer = _ref$classNameInputCo === void 0 ? 'merchi-embed-form_product-group-input-qty-container' : _ref$classNameInputCo,
199
+ _ref$classNameOptionC = _ref.classNameOptionContainer,
200
+ classNameOptionContainer = _ref$classNameOptionC === void 0 ? 'merchi-embed-form_checkbox_radio-item' : _ref$classNameOptionC,
201
+ _ref$classNameOptionI = _ref.classNameOptionInput,
202
+ classNameOptionInput = _ref$classNameOptionI === void 0 ? 'merchi-embed-form_checkbox_radio-input' : _ref$classNameOptionI,
203
+ _ref$classNameOptionL = _ref.classNameOptionLabel,
204
+ classNameOptionLabel = _ref$classNameOptionL === void 0 ? 'merchi-embed-form_checkbox_radio-label' : _ref$classNameOptionL,
205
+ _ref$classNameOptionS = _ref.classNameOptionSuper,
206
+ classNameOptionSuper = _ref$classNameOptionS === void 0 ? 'merchi-embed-form_checkbox_radio-super' : _ref$classNameOptionS,
207
+ _ref$classNameOptions = _ref.classNameOptionsCheckboxRadioContainer,
208
+ classNameOptionsCheckboxRadioContainer = _ref$classNameOptions === void 0 ? '' : _ref$classNameOptions,
209
+ _ref$classNameOptionI2 = _ref.classNameOptionImage,
210
+ classNameOptionImage = _ref$classNameOptionI2 === void 0 ? 'merchi-embed-form_image-select-option-item-img' : _ref$classNameOptionI2,
211
+ _ref$classNameOptionI3 = _ref.classNameOptionImageContainer,
212
+ classNameOptionImageContainer = _ref$classNameOptionI3 === void 0 ? 'merchi-embed-form_image-select-option-item-container' : _ref$classNameOptionI3,
213
+ _ref$classNameOptionC2 = _ref.classNameOptionColour,
214
+ classNameOptionColour = _ref$classNameOptionC2 === void 0 ? 'merchi-embed-form_color-select-option' : _ref$classNameOptionC2,
215
+ _ref$classNameOptionC3 = _ref.classNameOptionColourContainer,
216
+ classNameOptionColourContainer = _ref$classNameOptionC3 === void 0 ? 'merchi-embed-form_color-select-item' : _ref$classNameOptionC3,
217
+ _ref$classNameProduct = _ref.classNameProductTitle,
218
+ classNameProductTitle = _ref$classNameProduct === void 0 ? 'merchi-product-title' : _ref$classNameProduct,
219
+ _ref$classNameProduct2 = _ref.classNameProductOriginTitle,
220
+ classNameProductOriginTitle = _ref$classNameProduct2 === void 0 ? 'merchi-product-origin-title' : _ref$classNameProduct2,
221
+ _ref$classNameProduct3 = _ref.classNameProductTotal,
222
+ classNameProductTotal = _ref$classNameProduct3 === void 0 ? 'merchi-embed-form_summary-product-cost' : _ref$classNameProduct3,
223
+ _ref$classNameProduct4 = _ref.classNameProductTotalContainer,
224
+ classNameProductTotalContainer = _ref$classNameProduct4 === void 0 ? 'merchi-embed-form_summary-product-cost-container' : _ref$classNameProduct4,
225
+ _ref$classNameQuantit = _ref.classNameQuantityLabelContainer,
226
+ classNameQuantityLabelContainer = _ref$classNameQuantit === void 0 ? 'merchi-embed-form_quantity-label-container' : _ref$classNameQuantit,
227
+ classNameUnitPrice = _ref.classNameUnitPrice,
228
+ classNamePriceMatrix = _ref.classNamePriceMatrix,
229
+ children = _ref.children,
230
+ currentUser = _ref.currentUser,
231
+ hcaptchaSiteKey = _ref.hcaptchaSiteKey,
232
+ hideCost = _ref.hideCost,
233
+ _ref$hideCountry = _ref.hideCountry,
234
+ hideCountry = _ref$hideCountry === void 0 ? false : _ref$hideCountry,
235
+ hideCalculatedPrice = _ref.hideCalculatedPrice,
236
+ _ref$hideDomainName = _ref.hideDomainName,
237
+ hideDomainName = _ref$hideDomainName === void 0 ? false : _ref$hideDomainName,
238
+ hideQuantityField = _ref.hideQuantityField,
239
+ hideRequestQuotationButton = _ref.hideRequestQuotationButton,
240
+ hidePaymentUpfrontButton = _ref.hidePaymentUpfrontButton,
241
+ _ref$hideTitle = _ref.hideTitle,
242
+ hideTitle = _ref$hideTitle === void 0 ? false : _ref$hideTitle,
243
+ isCartItem = _ref.isCartItem,
244
+ initJob = _ref.initJob,
245
+ initProduct = _ref.initProduct,
246
+ pricingRulesProp = _ref.pricingRules,
247
+ onAddToCart = _ref.onAddToCart,
248
+ onBuyNow = _ref.onBuyNow,
249
+ onGetQuote = _ref.onGetQuote,
250
+ onSubmit = _ref.onSubmit,
251
+ productFormId = _ref.productFormId,
252
+ showCurrency = _ref.showCurrency,
253
+ showCurrencyCode = _ref.showCurrencyCode,
254
+ showFeatureDeadline = _ref.showFeatureDeadline,
255
+ showGroupBuyStatus = _ref.showGroupBuyStatus,
256
+ _ref$showPriceMatrix = _ref.showPriceMatrix,
257
+ showPriceMatrix = _ref$showPriceMatrix === void 0 ? true : _ref$showPriceMatrix,
258
+ showUnitPrice = _ref.showUnitPrice;
259
+ var product = sanitizeProductVariationFields(initProduct);
260
+ var defaultJob = liftIndependentVariationsFromGroups(initJob || product.defaultJob || {}, product);
261
+ var hookForm = useForm({
262
+ defaultValues: defaultJob,
263
+ // Re-check rules as the user edits after the first validation attempt.
264
+ reValidateMode: 'onChange'
265
+ });
266
+ var _useState = useState(currentUser),
267
+ _useState2 = _slicedToArray(_useState, 2),
268
+ client = _useState2[0],
269
+ setClient = _useState2[1];
270
+ var _useState3 = useState(null),
271
+ _useState4 = _slicedToArray(_useState3, 2),
272
+ alert = _useState4[0],
273
+ showAlert = _useState4[1];
274
+ var _useState5 = useState(null),
275
+ _useState6 = _slicedToArray(_useState5, 2),
276
+ draftApproveCallback = _useState6[0],
277
+ setDraftAppproveCallback = _useState6[1];
278
+ var _useState7 = useState(defaultJob),
279
+ _useState8 = _slicedToArray(_useState7, 2),
280
+ job = _useState8[0],
281
+ setJob = _useState8[1];
282
+ var _useState9 = useState(false),
283
+ _useState0 = _slicedToArray(_useState9, 2),
284
+ loading = _useState0[0],
285
+ setLoading = _useState0[1];
286
+ var _useState1 = useState(false),
287
+ _useState10 = _slicedToArray(_useState1, 2),
288
+ inventoryLoading = _useState10[0],
289
+ setInventoryLoading = _useState10[1];
290
+ var control = hookForm.control,
291
+ getValues = hookForm.getValues,
292
+ handleSubmit = hookForm.handleSubmit,
293
+ reset = hookForm.reset,
294
+ trigger = hookForm.trigger;
295
+ var doSubmit = onSubmit ? handleSubmit(onSubmit, function () {
296
+ scrollToFirstFormError();
297
+ }) : undefined;
298
+
299
+ /** Run field rules (including MOQ) before buy / cart / quote actions. */
300
+ var validateForm = /*#__PURE__*/function () {
301
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
302
+ var valid;
303
+ return _regenerator().w(function (_context) {
304
+ while (1) switch (_context.n) {
305
+ case 0:
306
+ _context.n = 1;
307
+ return trigger();
308
+ case 1:
309
+ valid = _context.v;
310
+ if (!valid) {
311
+ scrollToFirstFormError();
312
+ }
313
+ return _context.a(2, valid);
314
+ }
315
+ }, _callee);
316
+ }));
317
+ return function validateForm() {
318
+ return _ref2.apply(this, arguments);
319
+ };
320
+ }();
321
+ var tags = getMerchiSourceJobTags();
322
+ var inventoryRefreshTimer = React.useRef(null);
323
+ var serverQuoteTimer = React.useRef(null);
324
+ var quoteRequestId = React.useRef(0);
325
+ var SERVER_QUOTE_DEBOUNCE_MS = 1000;
326
+
327
+ // Client-side quoting is driven solely by the product's clientSideCalculation
328
+ // attribute (set by the manager). It is the single source of truth.
329
+ var clientSideEnabled = Boolean(initProduct === null || initProduct === void 0 ? void 0 : initProduct.clientSideCalculation);
330
+
331
+ // Fetch pricing-rules for client-side quoting and the bulk price table.
332
+ // A `pricingRules` prop, if supplied, overrides the fetch.
333
+ var _useState11 = useState(null),
334
+ _useState12 = _slicedToArray(_useState11, 2),
335
+ fetchedPricingRules = _useState12[0],
336
+ setFetchedPricingRules = _useState12[1];
337
+ var pricingRules = pricingRulesProp || fetchedPricingRules;
338
+ React.useEffect(function () {
339
+ if (!clientSideEnabled && !showPriceMatrix || pricingRulesProp || !(initProduct !== null && initProduct !== void 0 && initProduct.id)) {
340
+ return;
341
+ }
342
+ var cancelled = false;
343
+ _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
344
+ var base, res, rules, _t;
345
+ return _regenerator().w(function (_context2) {
346
+ while (1) switch (_context2.p = _context2.n) {
347
+ case 0:
348
+ _context2.p = 0;
349
+ base = apiUrl.endsWith('/') ? apiUrl : "".concat(apiUrl, "/");
350
+ _context2.n = 1;
351
+ return fetch("".concat(base, "products/").concat(initProduct.id, "/pricing-rules/"));
352
+ case 1:
353
+ res = _context2.v;
354
+ if (res.ok) {
355
+ _context2.n = 2;
356
+ break;
357
+ }
358
+ return _context2.a(2);
359
+ case 2:
360
+ _context2.n = 3;
361
+ return res.json();
362
+ case 3:
363
+ rules = _context2.v;
364
+ if (!cancelled) setFetchedPricingRules(rules);
365
+ _context2.n = 5;
366
+ break;
367
+ case 4:
368
+ _context2.p = 4;
369
+ _t = _context2.v;
370
+ case 5:
371
+ return _context2.a(2);
372
+ }
373
+ }, _callee2, null, [[0, 4]]);
374
+ }))();
375
+ return function () {
376
+ cancelled = true;
377
+ };
378
+ }, [clientSideEnabled, showPriceMatrix, pricingRulesProp, initProduct === null || initProduct === void 0 ? void 0 : initProduct.id, apiUrl]);
379
+ React.useEffect(function () {
380
+ return function () {
381
+ if (serverQuoteTimer.current) {
382
+ clearTimeout(serverQuoteTimer.current);
383
+ }
384
+ };
385
+ }, []);
386
+ function variationsHaveFieldMetadata(jobValues) {
387
+ var check = function check(variations) {
388
+ return !Array.isArray(variations) || variations.every(function (variation) {
389
+ var _variation$variationF;
390
+ return (variation === null || variation === void 0 || (_variation$variationF = variation.variationField) === null || _variation$variationF === void 0 ? void 0 : _variation$variationF.fieldType) != null;
391
+ });
392
+ };
393
+ if (!check(jobValues === null || jobValues === void 0 ? void 0 : jobValues.variations)) return false;
394
+ if (Array.isArray(jobValues === null || jobValues === void 0 ? void 0 : jobValues.variationsGroups)) {
395
+ return jobValues.variationsGroups.every(function (group) {
396
+ return check(group === null || group === void 0 ? void 0 : group.variations);
397
+ });
398
+ }
399
+ return true;
400
+ }
401
+ function applyOptionVisibility(variations, visibleOptionIds, unavailableOptionIds) {
402
+ var changed = false;
403
+ (variations || []).forEach(function (variation) {
404
+ (variation.selectableOptions || []).forEach(function (option) {
405
+ // Mirror the server's per-option isVisible (selectedBy resolution).
406
+ var isVisible = visibleOptionIds.has(option.optionId);
407
+ if (option.isVisible !== isVisible) {
408
+ option.isVisible = isVisible;
409
+ changed = true;
410
+ }
411
+ // Combination-aware availability: an option is unavailable when the
412
+ // combination of (current inventory selections + this option) has no
413
+ // matching stock. Non-inventory products yield an empty set -> all
414
+ // available.
415
+ var available = !unavailableOptionIds.has(option.optionId);
416
+ if (option.available !== available) {
417
+ option.available = available;
418
+ changed = true;
419
+ }
420
+ });
421
+ });
422
+ return changed;
423
+ }
424
+
425
+ // For inventory-limited products, refresh quantity-dependent inventory
426
+ // (group inventoryCount/inventorySufficient) from the authoritative server in
427
+ // the background, debounced, and merge it through setJob (which renders
428
+ // without a form reset, so the viewport never jumps). The client price stays
429
+ // instant; the inventory badge catches up a beat later.
430
+ function resetFormPreservingScroll(values) {
431
+ var hasWindow = typeof window !== 'undefined';
432
+ var scrollParent = findScrollParent();
433
+ var scrollX = hasWindow ? window.scrollX : 0;
434
+ var scrollY = hasWindow ? window.scrollY : 0;
435
+ var parentTop = scrollParent ? scrollParent.scrollTop : 0;
436
+ var parentLeft = scrollParent ? scrollParent.scrollLeft : 0;
437
+ reset(values);
438
+ if (hasWindow && typeof window.requestAnimationFrame === 'function') {
439
+ window.requestAnimationFrame(function () {
440
+ if (scrollParent) {
441
+ scrollParent.scrollTop = parentTop;
442
+ scrollParent.scrollLeft = parentLeft;
443
+ } else {
444
+ window.scrollTo(scrollX, scrollY);
445
+ }
446
+ });
447
+ }
448
+ }
449
+ function findScrollParent() {
450
+ if (typeof document === 'undefined') return null;
451
+ var active = document.activeElement;
452
+ var node = active;
453
+ while (node && node !== document.body) {
454
+ var style = window.getComputedStyle(node);
455
+ var canScrollY = (style.overflowY === 'auto' || style.overflowY === 'scroll') && node.scrollHeight > node.clientHeight;
456
+ if (canScrollY) return node;
457
+ // Radix ScrollArea viewport
458
+ if (node.getAttribute('data-slot') === 'scroll-area-viewport') return node;
459
+ node = node.parentElement;
460
+ }
461
+ var viewport = document.querySelector('[data-slot="dialog-content"] [data-slot="scroll-area-viewport"]');
462
+ return viewport;
463
+ }
464
+ function formQuantitiesMatchRequest(formValues, requestData, product) {
465
+ if (productHasGroups(product)) {
466
+ var groups = requestData.variationsGroups || [];
467
+ return groups.every(function (group, index) {
468
+ var _formValues$variation;
469
+ return Number(group.quantity) === Number((_formValues$variation = formValues.variationsGroups) === null || _formValues$variation === void 0 || (_formValues$variation = _formValues$variation[index]) === null || _formValues$variation === void 0 ? void 0 : _formValues$variation.quantity);
470
+ });
471
+ }
472
+ return Number(requestData.quantity) === Number(formValues.quantity);
473
+ }
474
+ function applyServerQuote(formValues, serverJob) {
475
+ var cleanedFormValues = cleanJobVariationsAndGroups(_objectSpread({}, formValues));
476
+ // Adopt fields the server added/removed via fill_dynamic_variations, while
477
+ // preserving the user's in-progress values (quantity edits, selections).
478
+ // Match by variationField.id / optionId — index sync breaks when the
479
+ // conditional field list changes length or order.
480
+ var independentReconcile = reconcileVariations(cleanedFormValues.variations, serverJob.variations);
481
+ var visibilityChanged = independentReconcile.visibilityChanged;
482
+ var mergedJob = _objectSpread(_objectSpread({}, cleanedFormValues), {}, {
483
+ variations: independentReconcile.variations,
484
+ cost: serverJob.cost,
485
+ costPerUnit: serverJob.costPerUnit,
486
+ taxAmount: serverJob.taxAmount,
487
+ totalCost: serverJob.totalCost,
488
+ currency: serverJob.currency,
489
+ inventoryCount: serverJob.inventoryCount,
490
+ inventorySufficient: serverJob.inventorySufficient
491
+ });
492
+ if (Array.isArray(cleanedFormValues.variationsGroups) && Array.isArray(serverJob.variationsGroups)) {
493
+ mergedJob.variationsGroups = cleanedFormValues.variationsGroups.map(function (group, index) {
494
+ var serverGroup = serverJob.variationsGroups[index];
495
+ if (!serverGroup) return group;
496
+ var groupReconcile = reconcileVariations(group.variations, serverGroup.variations);
497
+ if (groupReconcile.visibilityChanged) {
498
+ visibilityChanged = true;
499
+ }
500
+ return _objectSpread(_objectSpread({}, group), {}, {
501
+ variations: groupReconcile.variations,
502
+ groupCost: serverGroup.groupCost,
503
+ inventoryCount: serverGroup.inventoryCount,
504
+ inventorySufficient: serverGroup.inventorySufficient,
505
+ matchingInventories: serverGroup.matchingInventories
506
+ });
507
+ });
508
+ }
509
+ return {
510
+ mergedJob: mergedJob,
511
+ visibilityChanged: visibilityChanged
512
+ };
513
+ }
514
+ function mergeInventory(prev, serverJob) {
515
+ if (!prev) return prev;
516
+ var merged = _objectSpread(_objectSpread({}, prev), {}, {
517
+ inventoryCount: serverJob.inventoryCount,
518
+ inventorySufficient: serverJob.inventorySufficient
519
+ });
520
+ if (Array.isArray(prev.variationsGroups) && Array.isArray(serverJob.variationsGroups)) {
521
+ merged.variationsGroups = prev.variationsGroups.map(function (g, i) {
522
+ var sg = serverJob.variationsGroups[i];
523
+ if (!sg) return g;
524
+ return _objectSpread(_objectSpread({}, g), {}, {
525
+ inventoryCount: sg.inventoryCount,
526
+ inventorySufficient: sg.inventorySufficient,
527
+ matchingInventories: sg.matchingInventories
528
+ });
529
+ });
530
+ }
531
+ return merged;
532
+ }
533
+ function scheduleInventoryRefresh(cleanedValues) {
534
+ if (!pricingRules || !pricingRules.needsInventory) return;
535
+ if (inventoryRefreshTimer.current) {
536
+ clearTimeout(inventoryRefreshTimer.current);
537
+ }
538
+ // Show the loading state in the inventory pills from the moment a change is
539
+ // made until the authoritative stock comes back (covers the debounce wait
540
+ // and the request). This is separate from `loading` so the instant client
541
+ // price never flickers to a spinner.
542
+ setInventoryLoading(true);
543
+ inventoryRefreshTimer.current = setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
544
+ var data, r, serverJob, _t2;
545
+ return _regenerator().w(function (_context3) {
546
+ while (1) switch (_context3.p = _context3.n) {
547
+ case 0:
548
+ _context3.p = 0;
549
+ data = _objectSpread(_objectSpread({}, cleanedValues), {}, {
550
+ product: {
551
+ id: initProduct.id
552
+ }
553
+ });
554
+ if (productHasGroups(product)) {
555
+ delete data.quantity;
556
+ }
557
+ _context3.n = 1;
558
+ return fetchJobQuote(data, apiUrl);
559
+ case 1:
560
+ r = _context3.v;
561
+ serverJob = r.toJson();
562
+ setJob(function (prev) {
563
+ return mergeInventory(prev, serverJob);
564
+ });
565
+ _context3.n = 3;
566
+ break;
567
+ case 2:
568
+ _context3.p = 2;
569
+ _t2 = _context3.v;
570
+ case 3:
571
+ _context3.p = 3;
572
+ setInventoryLoading(false);
573
+ return _context3.f(3);
574
+ case 4:
575
+ return _context3.a(2);
576
+ }
577
+ }, _callee3, null, [[0, 2, 3, 4]]);
578
+ })), 450);
579
+ }
580
+ function applyClientQuote(values) {
581
+ var selections = toSelections(values, pricingRules);
582
+ var result = pricing.estimateQuote(pricingRules, selections);
583
+ if ('unsupported' in result) return null;
584
+ // Visibility AND availability are scoped per container, mirroring the
585
+ // server: independent variations resolve against independent selections
586
+ // only; each group resolves against its own selections + independent.
587
+ // Other groups never leak in. Availability is combination-aware: an option
588
+ // is disabled when (current inventory selections + that option) has no
589
+ // matching stock.
590
+ // Field membership mirrors fill_dynamic_variations: gated fields are
591
+ // added/removed via resolveVisibleFields + product field templates.
592
+ var independentScope = {
593
+ quantity: selections.quantity,
594
+ fieldValues: selections.fieldValues
595
+ };
596
+ var independentVisibleFields = pricing.resolveVisibleFields(pricingRules, independentScope);
597
+ var independentFieldTemplates = productFieldsForPricingFields(pricingRules.fields, product);
598
+ var desiredIndependent = buildDesiredVariationsFromFields(values.variations, independentFieldTemplates !== null && independentFieldTemplates !== void 0 ? independentFieldTemplates : product === null || product === void 0 ? void 0 : product.independentVariationFields, independentVisibleFields, buildEmptyVariationFromField);
599
+ var independentReconcile = reconcileVariations(values.variations, desiredIndependent);
600
+ values.variations = independentReconcile.variations;
601
+ var independentVisible = pricing.resolveVisibleOptionIds(pricingRules, independentScope);
602
+ var independentUnavailable = pricing.resolveUnavailableOptionIds(pricingRules, independentScope);
603
+ var visibilityChanged = independentReconcile.visibilityChanged || applyOptionVisibility(values.variations, independentVisible, independentUnavailable);
604
+ if (pricingRules.hasGroups && Array.isArray(values.variationsGroups)) {
605
+ values.variationsGroups.forEach(function (g, i) {
606
+ var _result$groupCosts$i;
607
+ g.groupCost = (_result$groupCosts$i = result.groupCosts[i]) !== null && _result$groupCosts$i !== void 0 ? _result$groupCosts$i : 0;
608
+ var groupScope = {
609
+ fieldValues: selections.fieldValues,
610
+ groups: selections.groups ? [selections.groups[i]] : []
611
+ };
612
+ var groupVisibleFields = pricing.resolveVisibleFields(pricingRules, groupScope);
613
+ var groupFieldTemplates = productFieldsForPricingFields(pricingRules.groupFields, product);
614
+ var desiredGroup = buildDesiredVariationsFromFields(g.variations, groupFieldTemplates !== null && groupFieldTemplates !== void 0 ? groupFieldTemplates : groupFieldTemplatesFromProduct(product), groupVisibleFields, buildEmptyVariationFromField);
615
+ var groupReconcile = reconcileVariations(g.variations, desiredGroup);
616
+ g.variations = groupReconcile.variations;
617
+ if (groupReconcile.visibilityChanged) {
618
+ visibilityChanged = true;
619
+ }
620
+ var groupVisible = pricing.resolveVisibleOptionIds(pricingRules, groupScope);
621
+ var groupUnavailable = pricing.resolveUnavailableOptionIds(pricingRules, groupScope);
622
+ if (applyOptionVisibility(g.variations, groupVisible, groupUnavailable)) {
623
+ visibilityChanged = true;
624
+ }
625
+ });
626
+ }
627
+ var nextJob = syncJobSelectedOptionsFromValues(_objectSpread(_objectSpread({}, values), {}, {
628
+ cost: result.cost,
629
+ costPerUnit: result.costPerUnit,
630
+ taxAmount: result.taxAmount,
631
+ totalCost: result.totalCost,
632
+ currency: result.currency
633
+ }));
634
+ setJob(nextJob);
635
+ // Only re-seed the form when option/field visibility actually changed —
636
+ // i.e. on selection changes, not on quantity edits. Cost/group-cost updates
637
+ // flow through setJob without a reset. reset() makes useFieldArray remount
638
+ // its items, which makes the browser lose the scroll position; capture and
639
+ // restore it so the viewport doesn't jump when toggling a select.
640
+ // Never reset with variations that lost variationField — that collapses
641
+ // the form (DynamicVariationInput cannot render without field metadata).
642
+ if (visibilityChanged && variationsHaveFieldMetadata(nextJob)) {
643
+ resetFormPreservingScroll(nextJob);
644
+ }
645
+ return nextJob;
646
+ }
647
+ function executeServerQuote() {
648
+ return _executeServerQuote.apply(this, arguments);
649
+ }
650
+ function _executeServerQuote() {
651
+ _executeServerQuote = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee0() {
652
+ var values, cleanedValues, requestId, data, r, serverJob, currentValues, _applyServerQuote, mergedJob, visibilityChanged, message, _t4;
653
+ return _regenerator().w(function (_context0) {
654
+ while (1) switch (_context0.p = _context0.n) {
655
+ case 0:
656
+ values = getValues();
657
+ cleanedValues = cleanJobVariationsAndGroups(values);
658
+ requestId = ++quoteRequestId.current;
659
+ setLoading(true);
660
+ data = _objectSpread(_objectSpread({}, cleanedValues), {}, {
661
+ product: {
662
+ id: initProduct.id
663
+ }
664
+ });
665
+ if (productHasGroups(product)) {
666
+ // if the product has group variation fields we delete quantity
667
+ // because each group has it's own quantity
668
+ delete data.quantity;
669
+ }
670
+ _context0.p = 1;
671
+ _context0.n = 2;
672
+ return fetchJobQuote(data, apiUrl);
673
+ case 2:
674
+ r = _context0.v;
675
+ if (!(requestId !== quoteRequestId.current)) {
676
+ _context0.n = 3;
677
+ break;
678
+ }
679
+ return _context0.a(2, null);
680
+ case 3:
681
+ serverJob = r.toJson();
682
+ currentValues = getValues();
683
+ if (formQuantitiesMatchRequest(currentValues, data, product)) {
684
+ _context0.n = 4;
685
+ break;
686
+ }
687
+ return _context0.a(2, null);
688
+ case 4:
689
+ _applyServerQuote = applyServerQuote(currentValues, serverJob), mergedJob = _applyServerQuote.mergedJob, visibilityChanged = _applyServerQuote.visibilityChanged;
690
+ setJob(mergedJob);
691
+ // Keep the user's in-progress quantity values; only re-seed the form when
692
+ // option visibility changed (mirrors client-side quoting).
693
+ if (visibilityChanged && variationsHaveFieldMetadata(mergedJob)) {
694
+ resetFormPreservingScroll(mergedJob);
695
+ }
696
+ return _context0.a(2, mergedJob);
697
+ case 5:
698
+ _context0.p = 5;
699
+ _t4 = _context0.v;
700
+ message = _t4.errorMessage || _t4.message || 'Server error';
701
+ showAlert({
702
+ message: message
703
+ });
704
+ console.error(message);
705
+ return _context0.a(2, null);
706
+ case 6:
707
+ _context0.p = 6;
708
+ if (requestId === quoteRequestId.current) {
709
+ setLoading(false);
710
+ }
711
+ return _context0.f(6);
712
+ case 7:
713
+ return _context0.a(2);
714
+ }
715
+ }, _callee0, null, [[1, 5, 6, 7]]);
716
+ }));
717
+ return _executeServerQuote.apply(this, arguments);
718
+ }
719
+ function getQuote(options) {
720
+ var values = getValues();
721
+ var cleanedValues = cleanJobVariationsAndGroups(values);
722
+ if (clientSideEnabled && pricingRules) {
723
+ try {
724
+ var clientJob = applyClientQuote(cleanedValues);
725
+ if (clientJob) {
726
+ scheduleInventoryRefresh(cleanedValues);
727
+ return Promise.resolve(clientJob);
728
+ }
729
+ } catch (e) {
730
+ // fall through to server on any client-calc error
731
+ }
732
+ }
733
+ if (options !== null && options !== void 0 && options.immediate) {
734
+ if (serverQuoteTimer.current) {
735
+ clearTimeout(serverQuoteTimer.current);
736
+ serverQuoteTimer.current = null;
737
+ }
738
+ return executeServerQuote();
739
+ }
740
+ return new Promise(function (resolve) {
741
+ if (serverQuoteTimer.current) {
742
+ clearTimeout(serverQuoteTimer.current);
743
+ }
744
+ serverQuoteTimer.current = setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
745
+ var _t3;
746
+ return _regenerator().w(function (_context4) {
747
+ while (1) switch (_context4.n) {
748
+ case 0:
749
+ serverQuoteTimer.current = null;
750
+ _t3 = resolve;
751
+ _context4.n = 1;
752
+ return executeServerQuote();
753
+ case 1:
754
+ _t3(_context4.v);
755
+ case 2:
756
+ return _context4.a(2);
757
+ }
758
+ }, _callee4);
759
+ })), SERVER_QUOTE_DEBOUNCE_MS);
760
+ });
761
+ }
762
+
763
+ // When pricing rules arrive (async fetch), re-quote so Area/other
764
+ // client-side costs apply without requiring another field edit.
765
+ var appliedClientRulesRef = React.useRef(null);
766
+ React.useEffect(function () {
767
+ if (!clientSideEnabled || !pricingRules || pricingRules.unsupported) {
768
+ return;
769
+ }
770
+ if (appliedClientRulesRef.current === pricingRules) {
771
+ return;
772
+ }
773
+ appliedClientRulesRef.current = pricingRules;
774
+ getQuote();
775
+ // eslint-disable-next-line react-hooks/exhaustive-deps
776
+ }, [clientSideEnabled, pricingRules]);
777
+ var _useState13 = useState(false),
778
+ _useState14 = _slicedToArray(_useState13, 2),
779
+ isDraftModalOpen = _useState14[0],
780
+ setIsDraftModalOpen = _useState14[1];
781
+ var _useState15 = useState(false),
782
+ _useState16 = _slicedToArray(_useState15, 2),
783
+ isDraftDesignerOpen = _useState16[0],
784
+ setIsDraftDesignerOpen = _useState16[1];
785
+ var pendingCheckoutRef = React.useRef(null);
786
+ var consumePendingCheckout = function consumePendingCheckout() {
787
+ var pending = pendingCheckoutRef.current;
788
+ pendingCheckoutRef.current = null;
789
+ return pending;
790
+ };
791
+ var runDraftCheckout = /*#__PURE__*/function () {
792
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(proceed) {
793
+ var quoted, jobData, drafts, hasSaved;
794
+ return _regenerator().w(function (_context6) {
795
+ while (1) switch (_context6.n) {
796
+ case 0:
797
+ _context6.n = 1;
798
+ return validateForm();
799
+ case 1:
800
+ if (_context6.v) {
801
+ _context6.n = 2;
802
+ break;
803
+ }
804
+ return _context6.a(2);
805
+ case 2:
806
+ _context6.n = 3;
807
+ return getQuote({
808
+ immediate: true
809
+ });
810
+ case 3:
811
+ quoted = _context6.v;
812
+ if (quoted) {
813
+ _context6.n = 4;
814
+ break;
815
+ }
816
+ return _context6.a(2);
817
+ case 4:
818
+ jobData = liftIndependentVariationsFromGroups(quoted, product);
819
+ if (productAllowsClientDesign(initProduct)) {
820
+ _context6.n = 5;
821
+ break;
822
+ }
823
+ proceed(jobData);
824
+ return _context6.a(2);
825
+ case 5:
826
+ if (!(loadArtworkPath(initProduct.id) === 'service')) {
827
+ _context6.n = 6;
828
+ break;
829
+ }
830
+ proceed(_objectSpread(_objectSpread({}, jobData), {}, {
831
+ ownDrafts: [],
832
+ clientFiles: []
833
+ }));
834
+ return _context6.a(2);
835
+ case 6:
836
+ drafts = loadDrafts(initProduct.id);
837
+ hasSaved = drafts.some(function (draft) {
838
+ var _draft$templateData;
839
+ return draft.productId === initProduct.id && ((_draft$templateData = draft.templateData) === null || _draft$templateData === void 0 ? void 0 : _draft$templateData.length);
840
+ });
841
+ if (!hasSaved) {
842
+ _context6.n = 7;
843
+ break;
844
+ }
845
+ setDraftAppproveCallback(function () {
846
+ return /*#__PURE__*/function () {
847
+ var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(draftJobData) {
848
+ return _regenerator().w(function (_context5) {
849
+ while (1) switch (_context5.n) {
850
+ case 0:
851
+ proceed(draftJobData || jobData);
852
+ return _context5.a(2, Promise.resolve());
853
+ }
854
+ }, _callee5);
855
+ }));
856
+ return function (_x2) {
857
+ return _ref7.apply(this, arguments);
858
+ };
859
+ }();
860
+ });
861
+ setIsDraftModalOpen(true);
862
+ return _context6.a(2);
863
+ case 7:
864
+ proceed(jobData);
865
+ case 8:
866
+ return _context6.a(2);
867
+ }
868
+ }, _callee6);
869
+ }));
870
+ return function runDraftCheckout(_x) {
871
+ return _ref6.apply(this, arguments);
872
+ };
873
+ }();
874
+ var addToCart = onAddToCart ? /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {
875
+ return _regenerator().w(function (_context7) {
876
+ while (1) switch (_context7.n) {
877
+ case 0:
878
+ _context7.n = 1;
879
+ return runDraftCheckout(function (jobData) {
880
+ if (!jobData.product) jobData.product = {
881
+ id: initProduct.id
882
+ };
883
+ setTimeout(function () {
884
+ onAddToCart(_objectSpread(_objectSpread({}, jobData), {}, {
885
+ tags: tags
886
+ }));
887
+ }, 0);
888
+ });
889
+ case 1:
890
+ return _context7.a(2);
891
+ }
892
+ }, _callee7);
893
+ })) : undefined;
894
+ var buyNow = onBuyNow ? /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8() {
895
+ return _regenerator().w(function (_context8) {
896
+ while (1) switch (_context8.n) {
897
+ case 0:
898
+ _context8.n = 1;
899
+ return runDraftCheckout(function (jobData) {
900
+ onBuyNow(_objectSpread({}, jobData));
901
+ });
902
+ case 1:
903
+ return _context8.a(2);
904
+ }
905
+ }, _callee8);
906
+ })) : undefined;
907
+ var getSubmitQuote = onGetQuote ? /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9() {
908
+ return _regenerator().w(function (_context9) {
909
+ while (1) switch (_context9.n) {
910
+ case 0:
911
+ _context9.n = 1;
912
+ return runDraftCheckout(function (jobData) {
913
+ onGetQuote(_objectSpread({}, jobData));
914
+ });
915
+ case 1:
916
+ return _context9.a(2);
917
+ }
918
+ }, _callee9);
919
+ })) : undefined;
920
+ return /*#__PURE__*/_jsxs(MerchiProductFormContext.Provider, {
921
+ value: {
922
+ apiUrl: apiUrl,
923
+ allowAddToCart: allowAddToCart,
924
+ btnNameAddToCart: btnNameAddToCart,
925
+ classNameAlertSellerEditable: classNameAlertSellerEditable,
926
+ classNameButtonSubmit: classNameButtonSubmit,
927
+ classNameButtonGroupAdd: classNameButtonGroupAdd,
928
+ classNameButtonGroupRemove: classNameButtonGroupRemove,
929
+ classNameButtonsSubmitContainer: classNameButtonsSubmitContainer,
930
+ classNameButtonApproveDrafts: classNameButtonApproveDrafts,
931
+ classNameButtonCloseDrafts: classNameButtonCloseDrafts,
932
+ classNameDraftButtonContainer: classNameDraftButtonContainer,
933
+ classNameDraftCta: classNameDraftCta,
934
+ classNameDraftGroupContainer: classNameDraftGroupContainer,
935
+ classNameDraftGroupTitle: classNameDraftGroupTitle,
936
+ classNameDraftSheet: classNameDraftSheet,
937
+ classNameDraftToolbar: classNameDraftToolbar,
938
+ classNameFileUploadContainer: classNameFileUploadContainer,
939
+ classNameFileUpload: classNameFileUpload,
940
+ classNameFilePreviewContainer: classNameFilePreviewContainer,
941
+ classNameFileUploadTextContainer: classNameFileUploadTextContainer,
942
+ classNameFilePreviewIconWrapper: classNameFilePreviewIconWrapper,
943
+ classNameFileUploadButton: classNameFileUploadButton,
944
+ classNameFileUploadIcon: classNameFileUploadIcon,
945
+ classNameFileUploadIconSecond: classNameFileUploadIconSecond,
946
+ classNameFileUploadIconContainer: classNameFileUploadIconContainer,
947
+ classNameFileListItem: classNameFileListItem,
948
+ classNameFileButtonDownload: classNameFileButtonDownload,
949
+ classNameFileButtonDelete: classNameFileButtonDelete,
950
+ classNameFileListItemContainer: classNameFileListItemContainer,
951
+ classNameGroupsContainer: classNameGroupsContainer,
952
+ classNameGroupPriceContainer: classNameGroupPriceContainer,
953
+ classNameInput: classNameInput,
954
+ classNameInputContainer: classNameInputContainer,
955
+ classNameInventoryStatus: classNameInventoryStatus,
956
+ classNameOptionContainer: classNameOptionContainer,
957
+ classNameOptionInput: classNameOptionInput,
958
+ classNameOptionLabel: classNameOptionLabel,
959
+ classNameOptionSuper: classNameOptionSuper,
960
+ classNameOptionsCheckboxRadioContainer: classNameOptionsCheckboxRadioContainer,
961
+ classNameOptionImage: classNameOptionImage,
962
+ classNameOptionImageContainer: classNameOptionImageContainer,
963
+ classNameOptionColour: classNameOptionColour,
964
+ classNameOptionColourContainer: classNameOptionColourContainer,
965
+ classNameProductTitle: classNameProductTitle,
966
+ classNameProductOriginTitle: classNameProductOriginTitle,
967
+ classNameProductTotalContainer: classNameProductTotalContainer,
968
+ classNameProductTotal: classNameProductTotal,
969
+ classNameQuantityLabelContainer: classNameQuantityLabelContainer,
970
+ classNameUnitPrice: classNameUnitPrice,
971
+ classNamePriceMatrix: classNamePriceMatrix,
972
+ client: client,
973
+ control: control,
974
+ draftApproveCallback: draftApproveCallback,
975
+ getQuote: getQuote,
976
+ hcaptchaSiteKey: hcaptchaSiteKey,
977
+ pricingRules: pricingRules,
978
+ hideCost: hideCost,
979
+ hideCountry: hideCountry,
980
+ hideCalculatedPrice: hideCalculatedPrice,
981
+ hideDomainName: hideDomainName,
982
+ hideQuantityField: hideQuantityField,
983
+ hideRequestQuotationButton: hideRequestQuotationButton,
984
+ hidePaymentUpfrontButton: hidePaymentUpfrontButton,
985
+ hideTitle: hideTitle,
986
+ hookForm: hookForm,
987
+ isCartItem: isCartItem,
988
+ isDraftDesignerOpen: isDraftDesignerOpen,
989
+ isDraftModalOpen: isDraftModalOpen,
990
+ consumePendingCheckout: consumePendingCheckout,
991
+ job: job,
992
+ loading: loading,
993
+ inventoryLoading: inventoryLoading,
994
+ onAddToCart: addToCart,
995
+ onBuyNow: buyNow,
996
+ onGetQuote: getSubmitQuote,
997
+ onSubmit: onSubmit,
998
+ product: product,
999
+ productFormId: productFormId,
1000
+ setClient: setClient,
1001
+ setIsDraftDesignerOpen: setIsDraftDesignerOpen,
1002
+ setIsDraftModalOpen: setIsDraftModalOpen,
1003
+ setJob: setJob,
1004
+ setLoading: setLoading,
1005
+ showAlert: showAlert,
1006
+ showCurrency: showCurrency,
1007
+ showCurrencyCode: showCurrencyCode,
1008
+ showFeatureDeadline: showFeatureDeadline,
1009
+ showGroupBuyStatus: showGroupBuyStatus,
1010
+ showPriceMatrix: showPriceMatrix,
1011
+ showUnitPrice: showUnitPrice
1012
+ },
1013
+ children: [productFormId ? /*#__PURE__*/_jsx("form", {
1014
+ id: productFormId,
1015
+ onSubmit: doSubmit,
1016
+ children: children
1017
+ }) : children, /*#__PURE__*/_jsx(ProductDraftsHost, {})]
1018
+ });
1019
+ };
1020
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJpIiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX3JlZ2VuZXJhdG9yIiwibiIsInRvU3RyaW5nVGFnIiwiYyIsIkdlbmVyYXRvciIsInUiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsIiwiZG9uZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9uZXh0IiwiX3Rocm93IiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJuZXh0IiwiaXNBcnJheSIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VTdGF0ZSIsInVzZUZvcm0iLCJmZXRjaEpvYlF1b3RlIiwicHJvZHVjdEhhc0dyb3VwcyIsImdldE1lcmNoaVNvdXJjZUpvYlRhZ3MiLCJwcm9kdWN0QWxsb3dzQ2xpZW50RGVzaWduIiwibG9hZEFydHdvcmtQYXRoIiwibG9hZERyYWZ0cyIsIlByb2R1Y3REcmFmdHNIb3N0IiwiYnVpbGRFbXB0eVZhcmlhdGlvbkZyb21GaWVsZCIsImNsZWFuSm9iVmFyaWF0aW9uc0FuZEdyb3VwcyIsInN5bmNKb2JTZWxlY3RlZE9wdGlvbnNGcm9tVmFsdWVzIiwicHJpY2luZyIsInRvU2VsZWN0aW9ucyIsInNjcm9sbFRvRmlyc3RGb3JtRXJyb3IiLCJidWlsZERlc2lyZWRWYXJpYXRpb25zRnJvbUZpZWxkcyIsInByb2R1Y3RGaWVsZHNGb3JQcmljaW5nRmllbGRzIiwicmVjb25jaWxlVmFyaWF0aW9ucyIsImdyb3VwRmllbGRUZW1wbGF0ZXMiLCJncm91cEZpZWxkVGVtcGxhdGVzRnJvbVByb2R1Y3QiLCJsaWZ0SW5kZXBlbmRlbnRWYXJpYXRpb25zRnJvbUdyb3VwcyIsInNhbml0aXplUHJvZHVjdFZhcmlhdGlvbkZpZWxkcyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJNZXJjaGlQcm9kdWN0Rm9ybUNvbnRleHQiLCJhcGlVcmwiLCJhbGxvd0FkZFRvQ2FydCIsImJ0bk5hbWVBZGRUb0NhcnQiLCJ1bmRlZmluZWQiLCJjbGFzc05hbWVBbGVydFNlbGxlckVkaXRhYmxlIiwiY2xhc3NOYW1lQnV0dG9uU3VibWl0IiwiY2xhc3NOYW1lQnV0dG9uR3JvdXBBZGQiLCJjbGFzc05hbWVCdXR0b25Hcm91cFJlbW92ZSIsImNsYXNzTmFtZUJ1dHRvbnNTdWJtaXRDb250YWluZXIiLCJjbGFzc05hbWVCdXR0b25BcHByb3ZlRHJhZnRzIiwiY2xhc3NOYW1lQnV0dG9uQ2xvc2VEcmFmdHMiLCJjbGFzc05hbWVEcmFmdEJ1dHRvbkNvbnRhaW5lciIsImNsYXNzTmFtZURyYWZ0Q3RhIiwiY2xhc3NOYW1lRHJhZnRHcm91cENvbnRhaW5lciIsImNsYXNzTmFtZURyYWZ0R3JvdXBUaXRsZSIsImNsYXNzTmFtZURyYWZ0U2hlZXQiLCJjbGFzc05hbWVEcmFmdFRvb2xiYXIiLCJjbGFzc05hbWVGaWxlVXBsb2FkQ29udGFpbmVyIiwiY2xhc3NOYW1lRmlsZVVwbG9hZCIsImNsYXNzTmFtZUZpbGVQcmV2aWV3Q29udGFpbmVyIiwiY2xhc3NOYW1lRmlsZVVwbG9hZFRleHRDb250YWluZXIiLCJjbGFzc05hbWVGaWxlUHJldmlld0ljb25XcmFwcGVyIiwiY2xhc3NOYW1lRmlsZVVwbG9hZEJ1dHRvbiIsImNsYXNzTmFtZUZpbGVVcGxvYWRJY29uIiwiY2xhc3NOYW1lRmlsZVVwbG9hZEljb25TZWNvbmQiLCJjbGFzc05hbWVGaWxlVXBsb2FkSWNvbkNvbnRhaW5lciIsImNsYXNzTmFtZUZpbGVMaXN0SXRlbSIsImNsYXNzTmFtZUZpbGVCdXR0b25EZWxldGUiLCJjbGFzc05hbWVGaWxlTGlzdEl0ZW1Db250YWluZXIiLCJjbGFzc05hbWVHcm91cHNDb250YWluZXIiLCJjbGFzc05hbWVHcm91cFByaWNlQ29udGFpbmVyIiwiY2xhc3NOYW1lSW5wdXQiLCJjbGFzc05hbWVJbnB1dENvbnRhaW5lciIsImNsYXNzTmFtZUludmVudG9yeVN0YXR1cyIsImNsYXNzTmFtZU9wdGlvbkNvbnRhaW5lciIsImNsYXNzTmFtZU9wdGlvbklucHV0IiwiY2xhc3NOYW1lT3B0aW9uTGFiZWwiLCJjbGFzc05hbWVPcHRpb25TdXBlciIsImNsYXNzTmFtZU9wdGlvbnNDaGVja2JveFJhZGlvQ29udGFpbmVyIiwiY2xhc3NOYW1lT3B0aW9uSW1hZ2UiLCJjbGFzc05hbWVPcHRpb25JbWFnZUNvbnRhaW5lciIsImNsYXNzTmFtZU9wdGlvbkNvbG91ciIsImNsYXNzTmFtZU9wdGlvbkNvbG91ckNvbnRhaW5lciIsImNsYXNzTmFtZVByb2R1Y3RUaXRsZSIsImNsYXNzTmFtZVByb2R1Y3RPcmlnaW5UaXRsZSIsImNsYXNzTmFtZVByb2R1Y3RUb3RhbENvbnRhaW5lciIsImNsYXNzTmFtZVByb2R1Y3RUb3RhbCIsImNsYXNzTmFtZVF1YW50aXR5TGFiZWxDb250YWluZXIiLCJjbGFzc05hbWVVbml0UHJpY2UiLCJjbGFzc05hbWVQcmljZU1hdHJpeCIsImNvbnRyb2wiLCJjdXJyZW50VXNlciIsImRyYWZ0QXBwcm92ZUNhbGxiYWNrIiwiZ2V0UXVvdGUiLCJoY2FwdGNoYVNpdGVLZXkiLCJwcmljaW5nUnVsZXMiLCJoaWRlQ29zdCIsImhpZGVDb3VudHJ5IiwiaGlkZURvbWFpbk5hbWUiLCJoaWRlQ2FsY3VsYXRlZFByaWNlIiwiaGlkZVF1YW50aXR5RmllbGQiLCJoaWRlUmVxdWVzdFF1b3RhdGlvbkJ1dHRvbiIsImhpZGVQYXltZW50VXBmcm9udEJ1dHRvbiIsImhpZGVUaXRsZSIsImhvb2tGb3JtIiwiaXNDYXJ0SXRlbSIsImluaXRKb2IiLCJpc0RyYWZ0RGVzaWduZXJPcGVuIiwiaXNEcmFmdE1vZGFsT3BlbiIsImNvbnN1bWVQZW5kaW5nQ2hlY2tvdXQiLCJqb2IiLCJsb2FkaW5nIiwiaW52ZW50b3J5TG9hZGluZyIsIm9uQWRkVG9DYXJ0Iiwib25CdXlOb3ciLCJvbkdldFF1b3RlIiwib25TdWJtaXQiLCJwcm9kdWN0IiwicHJvZHVjdEZvcm1JZCIsInNldENsaWVudCIsInNldElzRHJhZnREZXNpZ25lck9wZW4iLCJzZXRJc0RyYWZ0TW9kYWxPcGVuIiwic2V0Sm9iIiwic2V0TG9hZGluZyIsInNob3dBbGVydCIsImFsZXJ0Iiwic2hvd0N1cnJlbmN5Iiwic2hvd0N1cnJlbmN5Q29kZSIsInNob3dGZWF0dXJlRGVhZGxpbmUiLCJzaG93R3JvdXBCdXlTdGF0dXMiLCJzaG93UHJpY2VNYXRyaXgiLCJzaG93VW5pdFByaWNlIiwidXNlTWVyY2hpRm9ybUNvbnRleHQiLCJNZXJjaGlQcm9kdWN0Rm9ybVByb3ZpZGVyIiwiX3JlZiIsIl9yZWYkYXBpVXJsIiwiX3JlZiRjbGFzc05hbWVBbGVydFNlIiwiX3JlZiRjbGFzc05hbWVCdXR0b25TIiwiX3JlZiRjbGFzc05hbWVCdXR0b25HIiwiX3JlZiRjbGFzc05hbWVCdXR0b25HMiIsIl9yZWYkY2xhc3NOYW1lQnV0dG9ucyIsIl9yZWYkY2xhc3NOYW1lQnV0dG9uQSIsIl9yZWYkY2xhc3NOYW1lQnV0dG9uQyIsIl9yZWYkY2xhc3NOYW1lRHJhZnRCdSIsIl9yZWYkY2xhc3NOYW1lRHJhZnRDdCIsIl9yZWYkY2xhc3NOYW1lRHJhZnRHciIsIl9yZWYkY2xhc3NOYW1lRHJhZnRHcjIiLCJfcmVmJGNsYXNzTmFtZURyYWZ0U2giLCJfcmVmJGNsYXNzTmFtZURyYWZ0VG8iLCJfcmVmJGNsYXNzTmFtZUZpbGVVcGwiLCJfcmVmJGNsYXNzTmFtZUZpbGVVcGwyIiwiX3JlZiRjbGFzc05hbWVGaWxlUHJlIiwiX3JlZiRjbGFzc05hbWVGaWxlVXBsMyIsIl9yZWYkY2xhc3NOYW1lRmlsZVByZTIiLCJfcmVmJGNsYXNzTmFtZUZpbGVVcGw0IiwiX3JlZiRjbGFzc05hbWVGaWxlVXBsNSIsIl9yZWYkY2xhc3NOYW1lRmlsZVVwbDYiLCJfcmVmJGNsYXNzTmFtZUZpbGVVcGw3IiwiX3JlZiRjbGFzc05hbWVGaWxlTGlzIiwiX3JlZiRjbGFzc05hbWVGaWxlQnV0IiwiY2xhc3NOYW1lRmlsZUJ1dHRvbkRvd25sb2FkIiwiX3JlZiRjbGFzc05hbWVGaWxlQnV0MiIsIl9yZWYkY2xhc3NOYW1lRmlsZUxpczIiLCJfcmVmJGNsYXNzTmFtZUdyb3Vwc0MiLCJfcmVmJGNsYXNzTmFtZUdyb3VwUHIiLCJfcmVmJGNsYXNzTmFtZUlucHV0IiwiX3JlZiRjbGFzc05hbWVJbnZlbnRvIiwiX3JlZiRjbGFzc05hbWVJbnB1dENvIiwiX3JlZiRjbGFzc05hbWVPcHRpb25DIiwiX3JlZiRjbGFzc05hbWVPcHRpb25JIiwiX3JlZiRjbGFzc05hbWVPcHRpb25MIiwiX3JlZiRjbGFzc05hbWVPcHRpb25TIiwiX3JlZiRjbGFzc05hbWVPcHRpb25zIiwiX3JlZiRjbGFzc05hbWVPcHRpb25JMiIsIl9yZWYkY2xhc3NOYW1lT3B0aW9uSTMiLCJfcmVmJGNsYXNzTmFtZU9wdGlvbkMyIiwiX3JlZiRjbGFzc05hbWVPcHRpb25DMyIsIl9yZWYkY2xhc3NOYW1lUHJvZHVjdCIsIl9yZWYkY2xhc3NOYW1lUHJvZHVjdDIiLCJfcmVmJGNsYXNzTmFtZVByb2R1Y3QzIiwiX3JlZiRjbGFzc05hbWVQcm9kdWN0NCIsIl9yZWYkY2xhc3NOYW1lUXVhbnRpdCIsImNoaWxkcmVuIiwiX3JlZiRoaWRlQ291bnRyeSIsIl9yZWYkaGlkZURvbWFpbk5hbWUiLCJfcmVmJGhpZGVUaXRsZSIsImluaXRQcm9kdWN0IiwicHJpY2luZ1J1bGVzUHJvcCIsIl9yZWYkc2hvd1ByaWNlTWF0cml4IiwiZGVmYXVsdEpvYiIsImRlZmF1bHRWYWx1ZXMiLCJyZVZhbGlkYXRlTW9kZSIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJjbGllbnQiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2V0RHJhZnRBcHBwcm92ZUNhbGxiYWNrIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInNldEludmVudG9yeUxvYWRpbmciLCJnZXRWYWx1ZXMiLCJoYW5kbGVTdWJtaXQiLCJyZXNldCIsInRyaWdnZXIiLCJkb1N1Ym1pdCIsInZhbGlkYXRlRm9ybSIsIl9yZWYyIiwiX2NhbGxlZSIsInZhbGlkIiwiX2NvbnRleHQiLCJ0YWdzIiwiaW52ZW50b3J5UmVmcmVzaFRpbWVyIiwidXNlUmVmIiwic2VydmVyUXVvdGVUaW1lciIsInF1b3RlUmVxdWVzdElkIiwiU0VSVkVSX1FVT1RFX0RFQk9VTkNFX01TIiwiY2xpZW50U2lkZUVuYWJsZWQiLCJCb29sZWFuIiwiY2xpZW50U2lkZUNhbGN1bGF0aW9uIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsImZldGNoZWRQcmljaW5nUnVsZXMiLCJzZXRGZXRjaGVkUHJpY2luZ1J1bGVzIiwidXNlRWZmZWN0IiwiaWQiLCJjYW5jZWxsZWQiLCJfY2FsbGVlMiIsImJhc2UiLCJyZXMiLCJydWxlcyIsIl90IiwiX2NvbnRleHQyIiwiZW5kc1dpdGgiLCJjb25jYXQiLCJmZXRjaCIsIm9rIiwianNvbiIsImN1cnJlbnQiLCJjbGVhclRpbWVvdXQiLCJ2YXJpYXRpb25zSGF2ZUZpZWxkTWV0YWRhdGEiLCJqb2JWYWx1ZXMiLCJjaGVjayIsInZhcmlhdGlvbnMiLCJldmVyeSIsInZhcmlhdGlvbiIsIl92YXJpYXRpb24kdmFyaWF0aW9uRiIsInZhcmlhdGlvbkZpZWxkIiwiZmllbGRUeXBlIiwidmFyaWF0aW9uc0dyb3VwcyIsImdyb3VwIiwiYXBwbHlPcHRpb25WaXNpYmlsaXR5IiwidmlzaWJsZU9wdGlvbklkcyIsInVuYXZhaWxhYmxlT3B0aW9uSWRzIiwiY2hhbmdlZCIsInNlbGVjdGFibGVPcHRpb25zIiwib3B0aW9uIiwiaXNWaXNpYmxlIiwiaGFzIiwib3B0aW9uSWQiLCJhdmFpbGFibGUiLCJyZXNldEZvcm1QcmVzZXJ2aW5nU2Nyb2xsIiwidmFsdWVzIiwiaGFzV2luZG93Iiwid2luZG93Iiwic2Nyb2xsUGFyZW50IiwiZmluZFNjcm9sbFBhcmVudCIsInNjcm9sbFgiLCJzY3JvbGxZIiwicGFyZW50VG9wIiwic2Nyb2xsVG9wIiwicGFyZW50TGVmdCIsInNjcm9sbExlZnQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzY3JvbGxUbyIsImRvY3VtZW50IiwiYWN0aXZlIiwiYWN0aXZlRWxlbWVudCIsIm5vZGUiLCJib2R5Iiwic3R5bGUiLCJnZXRDb21wdXRlZFN0eWxlIiwiY2FuU2Nyb2xsWSIsIm92ZXJmbG93WSIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImdldEF0dHJpYnV0ZSIsInBhcmVudEVsZW1lbnQiLCJ2aWV3cG9ydCIsInF1ZXJ5U2VsZWN0b3IiLCJmb3JtUXVhbnRpdGllc01hdGNoUmVxdWVzdCIsImZvcm1WYWx1ZXMiLCJyZXF1ZXN0RGF0YSIsImdyb3VwcyIsImluZGV4IiwiX2Zvcm1WYWx1ZXMkdmFyaWF0aW9uIiwicXVhbnRpdHkiLCJhcHBseVNlcnZlclF1b3RlIiwic2VydmVySm9iIiwiY2xlYW5lZEZvcm1WYWx1ZXMiLCJpbmRlcGVuZGVudFJlY29uY2lsZSIsInZpc2liaWxpdHlDaGFuZ2VkIiwibWVyZ2VkSm9iIiwiY29zdCIsImNvc3RQZXJVbml0IiwidGF4QW1vdW50IiwidG90YWxDb3N0IiwiY3VycmVuY3kiLCJpbnZlbnRvcnlDb3VudCIsImludmVudG9yeVN1ZmZpY2llbnQiLCJtYXAiLCJzZXJ2ZXJHcm91cCIsImdyb3VwUmVjb25jaWxlIiwiZ3JvdXBDb3N0IiwibWF0Y2hpbmdJbnZlbnRvcmllcyIsIm1lcmdlSW52ZW50b3J5IiwicHJldiIsIm1lcmdlZCIsImciLCJzZyIsInNjaGVkdWxlSW52ZW50b3J5UmVmcmVzaCIsImNsZWFuZWRWYWx1ZXMiLCJuZWVkc0ludmVudG9yeSIsInNldFRpbWVvdXQiLCJfY2FsbGVlMyIsImRhdGEiLCJfdDIiLCJfY29udGV4dDMiLCJ0b0pzb24iLCJhcHBseUNsaWVudFF1b3RlIiwic2VsZWN0aW9ucyIsInJlc3VsdCIsImVzdGltYXRlUXVvdGUiLCJpbmRlcGVuZGVudFNjb3BlIiwiZmllbGRWYWx1ZXMiLCJpbmRlcGVuZGVudFZpc2libGVGaWVsZHMiLCJyZXNvbHZlVmlzaWJsZUZpZWxkcyIsImluZGVwZW5kZW50RmllbGRUZW1wbGF0ZXMiLCJmaWVsZHMiLCJkZXNpcmVkSW5kZXBlbmRlbnQiLCJpbmRlcGVuZGVudFZhcmlhdGlvbkZpZWxkcyIsImluZGVwZW5kZW50VmlzaWJsZSIsInJlc29sdmVWaXNpYmxlT3B0aW9uSWRzIiwiaW5kZXBlbmRlbnRVbmF2YWlsYWJsZSIsInJlc29sdmVVbmF2YWlsYWJsZU9wdGlvbklkcyIsImhhc0dyb3VwcyIsIl9yZXN1bHQkZ3JvdXBDb3N0cyRpIiwiZ3JvdXBDb3N0cyIsImdyb3VwU2NvcGUiLCJncm91cFZpc2libGVGaWVsZHMiLCJncm91cEZpZWxkcyIsImRlc2lyZWRHcm91cCIsImdyb3VwVmlzaWJsZSIsImdyb3VwVW5hdmFpbGFibGUiLCJuZXh0Sm9iIiwiZXhlY3V0ZVNlcnZlclF1b3RlIiwiX2V4ZWN1dGVTZXJ2ZXJRdW90ZSIsIl9jYWxsZWUwIiwicmVxdWVzdElkIiwiY3VycmVudFZhbHVlcyIsIl9hcHBseVNlcnZlclF1b3RlIiwibWVzc2FnZSIsIl90NCIsIl9jb250ZXh0MCIsImVycm9yTWVzc2FnZSIsImNvbnNvbGUiLCJlcnJvciIsIm9wdGlvbnMiLCJjbGllbnRKb2IiLCJpbW1lZGlhdGUiLCJfY2FsbGVlNCIsIl90MyIsIl9jb250ZXh0NCIsImFwcGxpZWRDbGllbnRSdWxlc1JlZiIsInVuc3VwcG9ydGVkIiwiX3VzZVN0YXRlMTMiLCJfdXNlU3RhdGUxNCIsIl91c2VTdGF0ZTE1IiwiX3VzZVN0YXRlMTYiLCJwZW5kaW5nQ2hlY2tvdXRSZWYiLCJwZW5kaW5nIiwicnVuRHJhZnRDaGVja291dCIsIl9yZWY2IiwiX2NhbGxlZTYiLCJwcm9jZWVkIiwicXVvdGVkIiwiam9iRGF0YSIsImRyYWZ0cyIsImhhc1NhdmVkIiwiX2NvbnRleHQ2Iiwib3duRHJhZnRzIiwiY2xpZW50RmlsZXMiLCJzb21lIiwiZHJhZnQiLCJfZHJhZnQkdGVtcGxhdGVEYXRhIiwicHJvZHVjdElkIiwidGVtcGxhdGVEYXRhIiwiX3JlZjciLCJfY2FsbGVlNSIsImRyYWZ0Sm9iRGF0YSIsIl9jb250ZXh0NSIsIl94MiIsIl94IiwiYWRkVG9DYXJ0IiwiX2NhbGxlZTciLCJfY29udGV4dDciLCJidXlOb3ciLCJfY2FsbGVlOCIsIl9jb250ZXh0OCIsImdldFN1Ym1pdFF1b3RlIiwiX2NhbGxlZTkiLCJfY29udGV4dDkiLCJQcm92aWRlciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L01lcmNoaVByb2R1Y3RGb3JtUHJvdmlkZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIFJlYWN0Tm9kZSwgdXNlQ29udGV4dCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IGZldGNoSm9iUXVvdGUgfSBmcm9tICcuLi9hY3Rpb25zL2pvYnMnO1xuaW1wb3J0IHsgcHJvZHVjdEhhc0dyb3VwcyB9IGZyb20gJy4uL3V0aWxzL3Byb2R1Y3RzJztcbmltcG9ydCB7IGdldE1lcmNoaVNvdXJjZUpvYlRhZ3MgfSBmcm9tICcuLi9jb21wb25lbnRzL3V0aWxzJztcbmltcG9ydCB7IERyYWZ0VGVtcGxhdGVEYXRhIH0gZnJvbSAnLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgcHJvZHVjdEFsbG93c0NsaWVudERlc2lnbiB9IGZyb20gJy4uL3V0aWxzL2RyYWZ0VGVtcGxhdGVzJztcbmltcG9ydCB7XG4gIGxvYWRBcnR3b3JrUGF0aCxcbiAgbG9hZERyYWZ0cyxcbn0gZnJvbSAnLi4vdXRpbHMvZHJhZnRTdG9yYWdlJztcbmltcG9ydCBQcm9kdWN0RHJhZnRzSG9zdCBmcm9tICcuLi9jb21wb25lbnRzL2RyYWZ0cy9Qcm9kdWN0RHJhZnRzSG9zdCc7XG5pbXBvcnQge1xuICBidWlsZEVtcHR5VmFyaWF0aW9uRnJvbUZpZWxkLFxuICBjbGVhbkpvYlZhcmlhdGlvbnNBbmRHcm91cHMsXG4gIHN5bmNKb2JTZWxlY3RlZE9wdGlvbnNGcm9tVmFsdWVzLFxufSBmcm9tICcuLi9jb21wb25lbnRzL3V0aWxzJztcbmltcG9ydCB7IHByaWNpbmcgfSBmcm9tICdAbWVyY2hpL3Nkayc7XG5pbXBvcnQgeyB0b1NlbGVjdGlvbnMgfSBmcm9tICcuLi91dGlscy9zZWxlY3Rpb25zJztcbmltcG9ydCB7IHNjcm9sbFRvRmlyc3RGb3JtRXJyb3IgfSBmcm9tICcuLi91dGlscy9mb3JtRXJyb3JzJztcbmltcG9ydCB7XG4gIGJ1aWxkRGVzaXJlZFZhcmlhdGlvbnNGcm9tRmllbGRzLFxuICBwcm9kdWN0RmllbGRzRm9yUHJpY2luZ0ZpZWxkcyxcbiAgcmVjb25jaWxlVmFyaWF0aW9ucyxcbn0gZnJvbSAnLi4vdXRpbHMvcmVjb25jaWxlVmFyaWF0aW9ucyc7XG5pbXBvcnQge1xuICBncm91cEZpZWxkVGVtcGxhdGVzIGFzIGdyb3VwRmllbGRUZW1wbGF0ZXNGcm9tUHJvZHVjdCxcbiAgbGlmdEluZGVwZW5kZW50VmFyaWF0aW9uc0Zyb21Hcm91cHMsXG4gIHNhbml0aXplUHJvZHVjdFZhcmlhdGlvbkZpZWxkcyxcbn0gZnJvbSAnLi4vdXRpbHMvdmFyaWF0aW9uRmllbGRzJztcbnR5cGUgRm9ybU1ldGhvZHMgPSBSZXR1cm5UeXBlPHR5cGVvZiB1c2VGb3JtPjtcblxuaW50ZXJmYWNlIElNZXJjaGlQcm9kdWN0Rm9ybSB7XG4gIGFwaVVybD86IHN0cmluZztcbiAgYWxsb3dBZGRUb0NhcnQ/OiBib29sZWFuO1xuICBidG5OYW1lQWRkVG9DYXJ0Pzogc3RyaW5nO1xuICBjbGFzc05hbWVBbGVydFNlbGxlckVkaXRhYmxlPzogc3RyaW5nO1xuICBjbGFzc05hbWVCdXR0b25TdWJtaXQ/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUJ1dHRvbkdyb3VwQWRkPzogc3RyaW5nO1xuICBjbGFzc05hbWVCdXR0b25Hcm91cFJlbW92ZT86IHN0cmluZztcbiAgY2xhc3NOYW1lQnV0dG9uc1N1Ym1pdENvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lQnV0dG9uQXBwcm92ZURyYWZ0cz86IHN0cmluZztcbiAgY2xhc3NOYW1lQnV0dG9uQ2xvc2VEcmFmdHM/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZURyYWZ0QnV0dG9uQ29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVEcmFmdEN0YT86IHN0cmluZztcbiAgY2xhc3NOYW1lRHJhZnRHcm91cENvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lRHJhZnRHcm91cFRpdGxlPzogc3RyaW5nO1xuICBjbGFzc05hbWVEcmFmdFNoZWV0Pzogc3RyaW5nO1xuICBjbGFzc05hbWVEcmFmdFRvb2xiYXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVVcGxvYWRDb250YWluZXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVVcGxvYWQ/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVQcmV2aWV3Q29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVGaWxlVXBsb2FkVGV4dENvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lRmlsZVByZXZpZXdJY29uV3JhcHBlcj86IHN0cmluZztcbiAgY2xhc3NOYW1lRmlsZVVwbG9hZEJ1dHRvbj86IHN0cmluZztcbiAgY2xhc3NOYW1lRmlsZVVwbG9hZEljb24/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVVcGxvYWRJY29uU2Vjb25kPzogc3RyaW5nO1xuICBjbGFzc05hbWVGaWxlVXBsb2FkSWNvbkNvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lRmlsZUxpc3RJdGVtPzogc3RyaW5nO1xuICBjbGFzc05hbWVGaWxlQnV0dG9uRG93bmxvYWQ/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVCdXR0b25EZWxldGU/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVMaXN0SXRlbUNvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lR3JvdXBzQ29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVHcm91cFByaWNlQ29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVJbnB1dD86IHN0cmluZztcbiAgY2xhc3NOYW1lSW5wdXRDb250YWluZXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUludmVudG9yeVN0YXR1cz86IHN0cmluZztcbiAgY2xhc3NOYW1lT3B0aW9uQ29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVPcHRpb25JbnB1dD86IHN0cmluZztcbiAgY2xhc3NOYW1lT3B0aW9uTGFiZWw/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZU9wdGlvblN1cGVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVPcHRpb25zQ2hlY2tib3hSYWRpb0NvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lT3B0aW9uSW1hZ2U/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZU9wdGlvbkltYWdlQ29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVPcHRpb25Db2xvdXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZU9wdGlvbkNvbG91ckNvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lUHJvZHVjdFRpdGxlPzogc3RyaW5nO1xuICBjbGFzc05hbWVQcm9kdWN0T3JpZ2luVGl0bGU/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZVByb2R1Y3RUb3RhbENvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lUHJvZHVjdFRvdGFsPzogc3RyaW5nO1xuICBjbGFzc05hbWVRdWFudGl0eUxhYmVsQ29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVVbml0UHJpY2U/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZVByaWNlTWF0cml4Pzogc3RyaW5nO1xuICBjb250cm9sOiBhbnk7XG4gIGN1cnJlbnRVc2VyPzogYW55O1xuICBkcmFmdEFwcHJvdmVDYWxsYmFjazogKChqb2I6IGFueSkgPT4gUHJvbWlzZTx2b2lkPikgfCBudWxsO1xuICBnZXRRdW90ZTogYW55O1xuICBoY2FwdGNoYVNpdGVLZXk/OiBzdHJpbmc7XG4gIHByaWNpbmdSdWxlcz86IGFueTtcbiAgaGlkZUNvc3Q/OiBib29sZWFuO1xuICBoaWRlQ291bnRyeT86IGJvb2xlYW47XG4gIGhpZGVDYWxjdWxhdGVkUHJpY2U/OiBib29sZWFuO1xuICBoaWRlRG9tYWluTmFtZT86IGJvb2xlYW47XG4gIGhpZGVRdWFudGl0eUZpZWxkPzogYm9vbGVhbjtcbiAgaGlkZVJlcXVlc3RRdW90YXRpb25CdXR0b24/OiBib29sZWFuO1xuICBoaWRlUGF5bWVudFVwZnJvbnRCdXR0b24/OiBib29sZWFuO1xuICBoaWRlVGl0bGU/OiBib29sZWFuO1xuICBob29rRm9ybTogRm9ybU1ldGhvZHM7XG4gIGlzQ2FydEl0ZW0/OiBib29sZWFuO1xuICBpbml0Sm9iPzogYW55O1xuICBpc0RyYWZ0RGVzaWduZXJPcGVuOiBib29sZWFuO1xuICBpc0RyYWZ0TW9kYWxPcGVuOiBib29sZWFuO1xuICBjb25zdW1lUGVuZGluZ0NoZWNrb3V0PzogKCkgPT4gKCgpID0+IHZvaWQpIHwgbnVsbDtcbiAgam9iOiBhbnk7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG4gIGludmVudG9yeUxvYWRpbmc/OiBib29sZWFuO1xuICBvbkFkZFRvQ2FydD86ICgpID0+IHZvaWQ7XG4gIG9uQnV5Tm93PzogKCkgPT4gdm9pZDtcbiAgb25HZXRRdW90ZT86ICgpID0+IHZvaWQ7XG4gIG9uU3VibWl0PzogKGpvYkRhdGE6IGFueSkgPT4gdm9pZDtcbiAgcHJvZHVjdDogYW55O1xuICBwcm9kdWN0Rm9ybUlkPzogc3RyaW5nO1xuICBzZXRDbGllbnQ6IChjbGllbnQ6IGFueSkgPT4gdm9pZDtcbiAgc2V0SXNEcmFmdERlc2lnbmVyT3BlbjogKGlzT3BlbjogYm9vbGVhbikgPT4gdm9pZDtcbiAgc2V0SXNEcmFmdE1vZGFsT3BlbjogKGlzT3BlbjogYm9vbGVhbikgPT4gdm9pZDtcbiAgc2V0Sm9iOiAoam9iOiBhbnkpID0+IHZvaWQ7XG4gIHNldExvYWRpbmc6IChsb2FkaW5nOiBib29sZWFuKSA9PiB2b2lkO1xuICBzaG93QWxlcnQ6IChhbGVydDogYW55KSA9PiB2b2lkO1xuICBzaG93Q3VycmVuY3k/OiBib29sZWFuO1xuICBzaG93Q3VycmVuY3lDb2RlPzogYm9vbGVhbjtcbiAgc2hvd0ZlYXR1cmVEZWFkbGluZT86IGJvb2xlYW47XG4gIHNob3dHcm91cEJ1eVN0YXR1cz86IGJvb2xlYW47XG4gIHNob3dQcmljZU1hdHJpeD86IGJvb2xlYW47XG4gIHNob3dVbml0UHJpY2U/OiBib29sZWFuO1xufVxuXG5jb25zdCBNZXJjaGlQcm9kdWN0Rm9ybUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PElNZXJjaGlQcm9kdWN0Rm9ybT4oe1xuICBhcGlVcmw6ICcnLFxuICBhbGxvd0FkZFRvQ2FydDogZmFsc2UsXG4gIGJ0bk5hbWVBZGRUb0NhcnQ6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lQWxlcnRTZWxsZXJFZGl0YWJsZTogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVCdXR0b25TdWJtaXQ6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lQnV0dG9uR3JvdXBBZGQ6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lQnV0dG9uR3JvdXBSZW1vdmU6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lQnV0dG9uc1N1Ym1pdENvbnRhaW5lcjogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVCdXR0b25BcHByb3ZlRHJhZnRzOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZUJ1dHRvbkNsb3NlRHJhZnRzOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZURyYWZ0QnV0dG9uQ29udGFpbmVyOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZURyYWZ0Q3RhOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZURyYWZ0R3JvdXBDb250YWluZXI6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lRHJhZnRHcm91cFRpdGxlOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZURyYWZ0U2hlZXQ6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lRHJhZnRUb29sYmFyOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZUZpbGVVcGxvYWRDb250YWluZXI6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lRmlsZVVwbG9hZDogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVGaWxlUHJldmlld0NvbnRhaW5lcjogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVGaWxlVXBsb2FkVGV4dENvbnRhaW5lcjogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVGaWxlUHJldmlld0ljb25XcmFwcGVyOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZUZpbGVVcGxvYWRCdXR0b246IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lRmlsZVVwbG9hZEljb246IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lRmlsZVVwbG9hZEljb25TZWNvbmQ6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lRmlsZVVwbG9hZEljb25Db250YWluZXI6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lRmlsZUxpc3RJdGVtOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZUZpbGVCdXR0b25EZWxldGU6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lRmlsZUxpc3RJdGVtQ29udGFpbmVyOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZUdyb3Vwc0NvbnRhaW5lcjogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVHcm91cFByaWNlQ29udGFpbmVyOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZUlucHV0OiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZUlucHV0Q29udGFpbmVyOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZUludmVudG9yeVN0YXR1czogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVPcHRpb25Db250YWluZXI6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lT3B0aW9uSW5wdXQ6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lT3B0aW9uTGFiZWw6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lT3B0aW9uU3VwZXI6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lT3B0aW9uc0NoZWNrYm94UmFkaW9Db250YWluZXI6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lT3B0aW9uSW1hZ2U6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lT3B0aW9uSW1hZ2VDb250YWluZXI6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lT3B0aW9uQ29sb3VyOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZU9wdGlvbkNvbG91ckNvbnRhaW5lcjogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVQcm9kdWN0VGl0bGU6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lUHJvZHVjdE9yaWdpblRpdGxlOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZVByb2R1Y3RUb3RhbENvbnRhaW5lcjogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVQcm9kdWN0VG90YWw6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lUXVhbnRpdHlMYWJlbENvbnRhaW5lcjogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVVbml0UHJpY2U6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lUHJpY2VNYXRyaXg6IHVuZGVmaW5lZCxcbiAgY29udHJvbDoge30sXG4gIGN1cnJlbnRVc2VyOiB7fSxcbiAgZHJhZnRBcHByb3ZlQ2FsbGJhY2s6IG51bGwsXG4gIGdldFF1b3RlKCkgeyB9LFxuICBoY2FwdGNoYVNpdGVLZXk6IHVuZGVmaW5lZCxcbiAgcHJpY2luZ1J1bGVzOiB1bmRlZmluZWQsXG4gIGhpZGVDb3N0OiBmYWxzZSxcbiAgaGlkZUNvdW50cnk6IGZhbHNlLFxuICBoaWRlRG9tYWluTmFtZTogZmFsc2UsXG4gIGhpZGVDYWxjdWxhdGVkUHJpY2U6IGZhbHNlLFxuICBoaWRlUXVhbnRpdHlGaWVsZDogZmFsc2UsXG4gIGhpZGVSZXF1ZXN0UXVvdGF0aW9uQnV0dG9uOiBmYWxzZSxcbiAgaGlkZVBheW1lbnRVcGZyb250QnV0dG9uOiBmYWxzZSxcbiAgaGlkZVRpdGxlOiBmYWxzZSxcbiAgaG9va0Zvcm06IHt9IGFzIGFueSxcbiAgaXNDYXJ0SXRlbTogZmFsc2UsXG4gIGluaXRKb2I6IHVuZGVmaW5lZCxcbiAgaXNEcmFmdERlc2lnbmVyT3BlbjogZmFsc2UsXG4gIGlzRHJhZnRNb2RhbE9wZW46IGZhbHNlLFxuICBjb25zdW1lUGVuZGluZ0NoZWNrb3V0KCkgeyByZXR1cm4gbnVsbDsgfSxcbiAgam9iOiB7fSxcbiAgbG9hZGluZzogZmFsc2UsXG4gIGludmVudG9yeUxvYWRpbmc6IGZhbHNlLFxuICBvbkFkZFRvQ2FydCgpIHsgfSxcbiAgb25CdXlOb3coKSB7IH0sXG4gIG9uR2V0UXVvdGUoKSB7IH0sXG4gIG9uU3VibWl0KCkgeyB9LFxuICBwcm9kdWN0OiB7fSxcbiAgcHJvZHVjdEZvcm1JZDogdW5kZWZpbmVkLFxuICBzZXRDbGllbnQoKSB7IH0sXG4gIHNldElzRHJhZnREZXNpZ25lck9wZW4oKSB7IH0sXG4gIHNldElzRHJhZnRNb2RhbE9wZW4oKSB7IH0sXG4gIHNldEpvYihqb2IpIHsgfSxcbiAgc2V0TG9hZGluZyhsb2FkaW5nKSB7IH0sXG4gIHNob3dBbGVydChhbGVydCkgeyB9LFxuICBzaG93Q3VycmVuY3k6IGZhbHNlLFxuICBzaG93Q3VycmVuY3lDb2RlOiBmYWxzZSxcbiAgc2hvd0ZlYXR1cmVEZWFkbGluZTogZmFsc2UsXG4gIHNob3dHcm91cEJ1eVN0YXR1czogZmFsc2UsXG4gIHNob3dQcmljZU1hdHJpeDogdHJ1ZSxcbiAgc2hvd1VuaXRQcmljZTogZmFsc2UsXG59KTtcblxuZXhwb3J0IGNvbnN0IHVzZU1lcmNoaUZvcm1Db250ZXh0ID0gKCkgPT4gdXNlQ29udGV4dChNZXJjaGlQcm9kdWN0Rm9ybUNvbnRleHQpO1xuXG5leHBvcnQgY29uc3QgTWVyY2hpUHJvZHVjdEZvcm1Qcm92aWRlciA9ICh7XG4gIGFwaVVybCA9ICdodHRwczovL2FwaS5tZXJjaGkuY28vdjYvJyxcbiAgYWxsb3dBZGRUb0NhcnQsXG4gIGJ0bk5hbWVBZGRUb0NhcnQsXG4gIGNsYXNzTmFtZUFsZXJ0U2VsbGVyRWRpdGFibGUgPSAnYWxlcnQgYWxlcnQtbGlnaHQnLFxuICBjbGFzc05hbWVCdXR0b25TdWJtaXQgPSAnYnRuIGJ0bi1wcmltYXJ5IG1lcmNoaS1lbWJlZC1mb3JtX2J1dHRvbi1zdWJtaXQnLFxuICBjbGFzc05hbWVCdXR0b25Hcm91cEFkZCA9ICdidG4gYnRuLXdoaXRlJyxcbiAgY2xhc3NOYW1lQnV0dG9uR3JvdXBSZW1vdmUgPSAnYnRuIGJ0bi1kYW5nZXInLFxuICBjbGFzc05hbWVCdXR0b25zU3VibWl0Q29udGFpbmVyID0gJ21lcmNoaS1wcm9kdWN0LWJ1dHRvbnMtc3VibWl0LWNvbnRhaW5lcicsXG4gIGNsYXNzTmFtZUJ1dHRvbkFwcHJvdmVEcmFmdHMgPSAnYnRuIGJ0bi1zdWNjZXNzJyxcbiAgY2xhc3NOYW1lQnV0dG9uQ2xvc2VEcmFmdHMgPSAnYnRuIGJ0bi1zZWNvbmRhcnknLFxuICBjbGFzc05hbWVEcmFmdEJ1dHRvbkNvbnRhaW5lciA9ICdtZXJjaGktcHJvZHVjdC1kcmFmdC1idXR0b24tY29udGFpbmVyJyxcbiAgY2xhc3NOYW1lRHJhZnRDdGEgPSAnbWVyY2hpLXByb2R1Y3QtZHJhZnQtY3RhJyxcbiAgY2xhc3NOYW1lRHJhZnRHcm91cENvbnRhaW5lciA9ICdtZXJjaGktcHJvZHVjdC1kcmFmdC1ncm91cC1jb250YWluZXInLFxuICBjbGFzc05hbWVEcmFmdEdyb3VwVGl0bGUgPSAnbWVyY2hpLXByb2R1Y3QtZHJhZnQtZ3JvdXAtdGl0bGUnLFxuICBjbGFzc05hbWVEcmFmdFNoZWV0ID0gJ21lcmNoaS1wcm9kdWN0LWRyYWZ0LXNoZWV0JyxcbiAgY2xhc3NOYW1lRHJhZnRUb29sYmFyID0gJ21lcmNoaS1wcm9kdWN0LWRyYWZ0LXRvb2xiYXInLFxuICBjbGFzc05hbWVGaWxlVXBsb2FkQ29udGFpbmVyID0gJ21lcmNoaS1pbnB1dC1maWxlLWNvbnRhaW5lcicsXG4gIGNsYXNzTmFtZUZpbGVVcGxvYWQgPSAnbWVyY2hpLWVtYmVkLWZvcm1fZHJvcHpvbmUnLFxuICBjbGFzc05hbWVGaWxlUHJldmlld0NvbnRhaW5lciA9ICd1cGxvYWRlZC12YXJpYXRpb24tZmlsZScsXG4gIGNsYXNzTmFtZUZpbGVVcGxvYWRUZXh0Q29udGFpbmVyID0gJ21lcmNoaS1lbWJlZC1mb3JtX2Ryb3B6b25lLXRleHQtY29udGFpbmVyJyxcbiAgY2xhc3NOYW1lRmlsZVByZXZpZXdJY29uV3JhcHBlciA9ICd1cGxvYWRlZC12YXJpYXRpb24tZmlsZS1pY29uLXdyYXBwZXInLFxuICBjbGFzc05hbWVGaWxlVXBsb2FkQnV0dG9uID0gJ2J0biBidG4tc20gYnRuLWxpbmsgbWwtYXV0bycsXG4gIGNsYXNzTmFtZUZpbGVVcGxvYWRJY29uID0gJ21lcmNoaS1lbWJlZC1mb3JtX2Ryb3B6b25lLWljb24nLFxuICBjbGFzc05hbWVGaWxlVXBsb2FkSWNvblNlY29uZCA9ICdtZXJjaGktZW1iZWQtZm9ybV9kcm9wem9uZS1pY29uLXBsdXMnLFxuICBjbGFzc05hbWVGaWxlVXBsb2FkSWNvbkNvbnRhaW5lciA9ICdtZXJjaGktZW1iZWQtZm9ybV9kcm9wem9uZS1pY29uLWNvbnRhaW5lcicsXG4gIGNsYXNzTmFtZUZpbGVMaXN0SXRlbSA9ICdsaXN0LWdyb3VwLWl0ZW0gbm8tei1pbmRleC1ob3ZlcicsXG4gIGNsYXNzTmFtZUZpbGVCdXR0b25Eb3dubG9hZCA9ICdidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnknLFxuICBjbGFzc05hbWVGaWxlQnV0dG9uRGVsZXRlID0gJ2J0biBidG4tc20gYnRuLWRhbmdlciBtbC0yJyxcbiAgY2xhc3NOYW1lRmlsZUxpc3RJdGVtQ29udGFpbmVyID0gJ2xpc3QtZ3JvdXAnLFxuICBjbGFzc05hbWVHcm91cHNDb250YWluZXIgPSAnbWVyY2hpLWVtYmVkLWZvcm1fcHJvZHVjdC1ncm91cC1jb250YWluZXInLFxuICBjbGFzc05hbWVHcm91cFByaWNlQ29udGFpbmVyID0gJ21lcmNoaS1lbWJlZC1mb3JtX3Byb2R1Y3QtZ3JvdXAtdG90YWwtY29zdCcsXG4gIGNsYXNzTmFtZUlucHV0ID0gJ2Zvcm0tY29udHJvbCcsXG4gIGNsYXNzTmFtZUludmVudG9yeVN0YXR1cyA9ICdmbGV4LWZpbGwnLFxuICBjbGFzc05hbWVJbnB1dENvbnRhaW5lciA9ICdtZXJjaGktZW1iZWQtZm9ybV9wcm9kdWN0LWdyb3VwLWlucHV0LXF0eS1jb250YWluZXInLFxuICBjbGFzc05hbWVPcHRpb25Db250YWluZXIgPSAnbWVyY2hpLWVtYmVkLWZvcm1fY2hlY2tib3hfcmFkaW8taXRlbScsXG4gIGNsYXNzTmFtZU9wdGlvbklucHV0ID0gJ21lcmNoaS1lbWJlZC1mb3JtX2NoZWNrYm94X3JhZGlvLWlucHV0JyxcbiAgY2xhc3NOYW1lT3B0aW9uTGFiZWwgPSAnbWVyY2hpLWVtYmVkLWZvcm1fY2hlY2tib3hfcmFkaW8tbGFiZWwnLFxuICBjbGFzc05hbWVPcHRpb25TdXBlciA9ICdtZXJjaGktZW1iZWQtZm9ybV9jaGVja2JveF9yYWRpby1zdXBlcicsXG4gIGNsYXNzTmFtZU9wdGlvbnNDaGVja2JveFJhZGlvQ29udGFpbmVyID0gJycsXG4gIGNsYXNzTmFtZU9wdGlvbkltYWdlID0gJ21lcmNoaS1lbWJlZC1mb3JtX2ltYWdlLXNlbGVjdC1vcHRpb24taXRlbS1pbWcnLFxuICBjbGFzc05hbWVPcHRpb25JbWFnZUNvbnRhaW5lciA9ICdtZXJjaGktZW1iZWQtZm9ybV9pbWFnZS1zZWxlY3Qtb3B0aW9uLWl0ZW0tY29udGFpbmVyJyxcbiAgY2xhc3NOYW1lT3B0aW9uQ29sb3VyID0gJ21lcmNoaS1lbWJlZC1mb3JtX2NvbG9yLXNlbGVjdC1vcHRpb24nLFxuICBjbGFzc05hbWVPcHRpb25Db2xvdXJDb250YWluZXIgPSAnbWVyY2hpLWVtYmVkLWZvcm1fY29sb3Itc2VsZWN0LWl0ZW0nLFxuICBjbGFzc05hbWVQcm9kdWN0VGl0bGUgPSAnbWVyY2hpLXByb2R1Y3QtdGl0bGUnLFxuICBjbGFzc05hbWVQcm9kdWN0T3JpZ2luVGl0bGUgPSAnbWVyY2hpLXByb2R1Y3Qtb3JpZ2luLXRpdGxlJyxcbiAgY2xhc3NOYW1lUHJvZHVjdFRvdGFsID0gJ21lcmNoaS1lbWJlZC1mb3JtX3N1bW1hcnktcHJvZHVjdC1jb3N0JyxcbiAgY2xhc3NOYW1lUHJvZHVjdFRvdGFsQ29udGFpbmVyID0gJ21lcmNoaS1lbWJlZC1mb3JtX3N1bW1hcnktcHJvZHVjdC1jb3N0LWNvbnRhaW5lcicsXG4gIGNsYXNzTmFtZVF1YW50aXR5TGFiZWxDb250YWluZXIgPSAnbWVyY2hpLWVtYmVkLWZvcm1fcXVhbnRpdHktbGFiZWwtY29udGFpbmVyJyxcbiAgY2xhc3NOYW1lVW5pdFByaWNlLFxuICBjbGFzc05hbWVQcmljZU1hdHJpeCxcbiAgY2hpbGRyZW4sXG4gIGN1cnJlbnRVc2VyLFxuICBoY2FwdGNoYVNpdGVLZXksXG4gIGhpZGVDb3N0LFxuICBoaWRlQ291bnRyeSA9IGZhbHNlLFxuICBoaWRlQ2FsY3VsYXRlZFByaWNlLFxuICBoaWRlRG9tYWluTmFtZSA9IGZhbHNlLFxuICBoaWRlUXVhbnRpdHlGaWVsZCxcbiAgaGlkZVJlcXVlc3RRdW90YXRpb25CdXR0b24sXG4gIGhpZGVQYXltZW50VXBmcm9udEJ1dHRvbixcbiAgaGlkZVRpdGxlID0gZmFsc2UsXG4gIGlzQ2FydEl0ZW0sXG4gIGluaXRKb2IsXG4gIGluaXRQcm9kdWN0LFxuICBwcmljaW5nUnVsZXM6IHByaWNpbmdSdWxlc1Byb3AsXG4gIG9uQWRkVG9DYXJ0LFxuICBvbkJ1eU5vdyxcbiAgb25HZXRRdW90ZSxcbiAgb25TdWJtaXQsXG4gIHByb2R1Y3RGb3JtSWQsXG4gIHNob3dDdXJyZW5jeSxcbiAgc2hvd0N1cnJlbmN5Q29kZSxcbiAgc2hvd0ZlYXR1cmVEZWFkbGluZSxcbiAgc2hvd0dyb3VwQnV5U3RhdHVzLFxuICBzaG93UHJpY2VNYXRyaXggPSB0cnVlLFxuICBzaG93VW5pdFByaWNlLFxufToge1xuICBhcGlVcmw/OiBzdHJpbmc7XG4gIGFsbG93QWRkVG9DYXJ0PzogYm9vbGVhbjtcbiAgYnRuTmFtZUFkZFRvQ2FydD86IHN0cmluZztcbiAgY2xhc3NOYW1lQWxlcnRTZWxsZXJFZGl0YWJsZT86IHN0cmluZztcbiAgY2xhc3NOYW1lQnV0dG9uU3VibWl0Pzogc3RyaW5nO1xuICBjbGFzc05hbWVCdXR0b25Hcm91cEFkZD86IHN0cmluZztcbiAgY2xhc3NOYW1lQnV0dG9uR3JvdXBSZW1vdmU/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUJ1dHRvbnNTdWJtaXRDb250YWluZXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUJ1dHRvbkFwcHJvdmVEcmFmdHM/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUJ1dHRvbkNsb3NlRHJhZnRzPzogc3RyaW5nO1xuICBjbGFzc05hbWVEcmFmdEJ1dHRvbkNvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lRHJhZnRDdGE/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZURyYWZ0R3JvdXBDb250YWluZXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZURyYWZ0R3JvdXBUaXRsZT86IHN0cmluZztcbiAgY2xhc3NOYW1lRHJhZnRTaGVldD86IHN0cmluZztcbiAgY2xhc3NOYW1lRHJhZnRUb29sYmFyPzogc3RyaW5nO1xuICBjbGFzc05hbWVGaWxlVXBsb2FkQ29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVGaWxlVXBsb2FkPzogc3RyaW5nO1xuICBjbGFzc05hbWVGaWxlUHJldmlld0NvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lRmlsZVVwbG9hZFRleHRDb250YWluZXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVQcmV2aWV3SWNvbldyYXBwZXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVVcGxvYWRCdXR0b24/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVVcGxvYWRJY29uPzogc3RyaW5nO1xuICBjbGFzc05hbWVGaWxlVXBsb2FkSWNvblNlY29uZD86IHN0cmluZztcbiAgY2xhc3NOYW1lRmlsZVVwbG9hZEljb25Db250YWluZXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVMaXN0SXRlbT86IHN0cmluZztcbiAgY2xhc3NOYW1lRmlsZUJ1dHRvbkRvd25sb2FkPzogc3RyaW5nO1xuICBjbGFzc05hbWVGaWxlQnV0dG9uRGVsZXRlPzogc3RyaW5nO1xuICBjbGFzc05hbWVGaWxlTGlzdEl0ZW1Db250YWluZXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUdyb3Vwc0NvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lR3JvdXBQcmljZUNvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lSW5wdXQ/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUlucHV0Q29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVJbnZlbnRvcnlTdGF0dXM/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZU9wdGlvbkNvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lT3B0aW9uSW5wdXQ/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZU9wdGlvbkxhYmVsPzogc3RyaW5nO1xuICBjbGFzc05hbWVPcHRpb25TdXBlcj86IHN0cmluZztcbiAgY2xhc3NOYW1lT3B0aW9uc0NoZWNrYm94UmFkaW9Db250YWluZXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZU9wdGlvbkltYWdlPzogc3RyaW5nO1xuICBjbGFzc05hbWVPcHRpb25JbWFnZUNvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lT3B0aW9uQ29sb3VyPzogc3RyaW5nO1xuICBjbGFzc05hbWVQcm9kdWN0VGl0bGU/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZVByb2R1Y3RPcmlnaW5UaXRsZT86IHN0cmluZztcbiAgY2xhc3NOYW1lUHJvZHVjdFRvdGFsQ29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVQcm9kdWN0VG90YWw/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZU9wdGlvbkNvbG91ckNvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lUXVhbnRpdHlMYWJlbENvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lVW5pdFByaWNlPzogc3RyaW5nO1xuICBjbGFzc05hbWVQcmljZU1hdHJpeD86IHN0cmluZztcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY3VycmVudFVzZXI/OiBhbnk7XG4gIGhjYXB0Y2hhU2l0ZUtleT86IHN0cmluZztcbiAgaGlkZUNhbGN1bGF0ZWRQcmljZT86IGJvb2xlYW47XG4gIGhpZGVDb3N0PzogYm9vbGVhbjtcbiAgaGlkZUNvdW50cnk/OiBib29sZWFuO1xuICBoaWRlRG9tYWluTmFtZT86IGJvb2xlYW47XG4gIGhpZGVRdWFudGl0eUZpZWxkPzogYm9vbGVhbjtcbiAgaGlkZVJlcXVlc3RRdW90YXRpb25CdXR0b24/OiBib29sZWFuO1xuICBoaWRlUGF5bWVudFVwZnJvbnRCdXR0b24/OiBib29sZWFuO1xuICBoaWRlVGl0bGU/OiBib29sZWFuO1xuICBpc0NhcnRJdGVtPzogYm9vbGVhbjtcbiAgaW5pdEpvYj86IGFueTtcbiAgaW5pdFByb2R1Y3Q6IGFueTtcbiAgcHJpY2luZ1J1bGVzPzogYW55O1xuICBvbkFkZFRvQ2FydD86IChqb2I6IGFueSkgPT4gdm9pZDtcbiAgb25CdXlOb3c/OiAoam9iOiBhbnkpID0+IHZvaWQ7XG4gIG9uR2V0UXVvdGU/OiAoam9iOiBhbnkpID0+IHZvaWQ7XG4gIG9uU3VibWl0PzogKGpvYjogYW55KSA9PiB2b2lkO1xuICBwcm9kdWN0Rm9ybUlkPzogc3RyaW5nO1xuICBzaG93Q3VycmVuY3k/OiBib29sZWFuO1xuICBzaG93Q3VycmVuY3lDb2RlPzogYm9vbGVhbjtcbiAgc2hvd0ZlYXR1cmVEZWFkbGluZT86IGJvb2xlYW47XG4gIHNob3dHcm91cEJ1eVN0YXR1cz86IGJvb2xlYW47XG4gIHNob3dQcmljZU1hdHJpeD86IGJvb2xlYW47XG4gIHNob3dVbml0UHJpY2U/OiBib29sZWFuO1xufSkgPT4ge1xuICBjb25zdCBwcm9kdWN0ID0gc2FuaXRpemVQcm9kdWN0VmFyaWF0aW9uRmllbGRzKGluaXRQcm9kdWN0KTtcbiAgY29uc3QgZGVmYXVsdEpvYiA9IGxpZnRJbmRlcGVuZGVudFZhcmlhdGlvbnNGcm9tR3JvdXBzKFxuICAgIGluaXRKb2IgfHwgcHJvZHVjdC5kZWZhdWx0Sm9iIHx8IHt9LFxuICAgIHByb2R1Y3RcbiAgKTtcbiAgY29uc3QgaG9va0Zvcm0gPSB1c2VGb3JtKHtcbiAgICBkZWZhdWx0VmFsdWVzOiBkZWZhdWx0Sm9iLFxuICAgIC8vIFJlLWNoZWNrIHJ1bGVzIGFzIHRoZSB1c2VyIGVkaXRzIGFmdGVyIHRoZSBmaXJzdCB2YWxpZGF0aW9uIGF0dGVtcHQuXG4gICAgcmVWYWxpZGF0ZU1vZGU6ICdvbkNoYW5nZScsXG4gIH0pO1xuICBjb25zdCBbY2xpZW50LCBzZXRDbGllbnRdID0gdXNlU3RhdGUoY3VycmVudFVzZXIpO1xuICBjb25zdCBbYWxlcnQsIHNob3dBbGVydF0gPSB1c2VTdGF0ZSgobnVsbCBhcyBhbnkpKTtcbiAgY29uc3QgW2RyYWZ0QXBwcm92ZUNhbGxiYWNrLCBzZXREcmFmdEFwcHByb3ZlQ2FsbGJhY2tdID0gdXNlU3RhdGU8KChqb2I6IGFueSkgPT4gUHJvbWlzZTx2b2lkPikgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2pvYiwgc2V0Sm9iXSA9IHVzZVN0YXRlPGFueT4oZGVmYXVsdEpvYik7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2ludmVudG9yeUxvYWRpbmcsIHNldEludmVudG9yeUxvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCB7IGNvbnRyb2wsIGdldFZhbHVlcywgaGFuZGxlU3VibWl0LCByZXNldCwgdHJpZ2dlciB9ID0gaG9va0Zvcm07XG4gIGNvbnN0IGRvU3VibWl0ID0gb25TdWJtaXRcbiAgICA/IGhhbmRsZVN1Ym1pdChvblN1Ym1pdCwgKCkgPT4ge1xuICAgICAgICBzY3JvbGxUb0ZpcnN0Rm9ybUVycm9yKCk7XG4gICAgICB9KVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIC8qKiBSdW4gZmllbGQgcnVsZXMgKGluY2x1ZGluZyBNT1EpIGJlZm9yZSBidXkgLyBjYXJ0IC8gcXVvdGUgYWN0aW9ucy4gKi9cbiAgY29uc3QgdmFsaWRhdGVGb3JtID0gYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGNvbnN0IHZhbGlkID0gYXdhaXQgdHJpZ2dlcigpO1xuICAgIGlmICghdmFsaWQpIHtcbiAgICAgIHNjcm9sbFRvRmlyc3RGb3JtRXJyb3IoKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkO1xuICB9O1xuXG4gIGNvbnN0IHRhZ3MgPSBnZXRNZXJjaGlTb3VyY2VKb2JUYWdzKCk7XG5cbiAgY29uc3QgaW52ZW50b3J5UmVmcmVzaFRpbWVyID0gUmVhY3QudXNlUmVmPGFueT4obnVsbCk7XG4gIGNvbnN0IHNlcnZlclF1b3RlVGltZXIgPSBSZWFjdC51c2VSZWY8YW55PihudWxsKTtcbiAgY29uc3QgcXVvdGVSZXF1ZXN0SWQgPSBSZWFjdC51c2VSZWYoMCk7XG4gIGNvbnN0IFNFUlZFUl9RVU9URV9ERUJPVU5DRV9NUyA9IDEwMDA7XG5cbiAgLy8gQ2xpZW50LXNpZGUgcXVvdGluZyBpcyBkcml2ZW4gc29sZWx5IGJ5IHRoZSBwcm9kdWN0J3MgY2xpZW50U2lkZUNhbGN1bGF0aW9uXG4gIC8vIGF0dHJpYnV0ZSAoc2V0IGJ5IHRoZSBtYW5hZ2VyKS4gSXQgaXMgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGguXG4gIGNvbnN0IGNsaWVudFNpZGVFbmFibGVkID0gQm9vbGVhbihpbml0UHJvZHVjdD8uY2xpZW50U2lkZUNhbGN1bGF0aW9uKTtcblxuICAvLyBGZXRjaCBwcmljaW5nLXJ1bGVzIGZvciBjbGllbnQtc2lkZSBxdW90aW5nIGFuZCB0aGUgYnVsayBwcmljZSB0YWJsZS5cbiAgLy8gQSBgcHJpY2luZ1J1bGVzYCBwcm9wLCBpZiBzdXBwbGllZCwgb3ZlcnJpZGVzIHRoZSBmZXRjaC5cbiAgY29uc3QgW2ZldGNoZWRQcmljaW5nUnVsZXMsIHNldEZldGNoZWRQcmljaW5nUnVsZXNdID0gdXNlU3RhdGU8YW55PihudWxsKTtcbiAgY29uc3QgcHJpY2luZ1J1bGVzID0gcHJpY2luZ1J1bGVzUHJvcCB8fCBmZXRjaGVkUHJpY2luZ1J1bGVzO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgKCFjbGllbnRTaWRlRW5hYmxlZCAmJiAhc2hvd1ByaWNlTWF0cml4KSB8fFxuICAgICAgcHJpY2luZ1J1bGVzUHJvcCB8fFxuICAgICAgIWluaXRQcm9kdWN0Py5pZFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBhcGlVcmwuZW5kc1dpdGgoJy8nKSA/IGFwaVVybCA6IGAke2FwaVVybH0vYDtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7YmFzZX1wcm9kdWN0cy8ke2luaXRQcm9kdWN0LmlkfS9wcmljaW5nLXJ1bGVzL2ApO1xuICAgICAgICBpZiAoIXJlcy5vaykgcmV0dXJuO1xuICAgICAgICBjb25zdCBydWxlcyA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgIGlmICghY2FuY2VsbGVkKSBzZXRGZXRjaGVkUHJpY2luZ1J1bGVzKHJ1bGVzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gQmVzdC1lZmZvcnQ6IGZvcm0gZmFsbHMgYmFjayB0byBzZXJ2ZXItc2lkZSBxdW90aW5nIG9uIGZhaWx1cmUuXG4gICAgICB9XG4gICAgfSkoKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICB9O1xuICB9LCBbY2xpZW50U2lkZUVuYWJsZWQsIHNob3dQcmljZU1hdHJpeCwgcHJpY2luZ1J1bGVzUHJvcCwgaW5pdFByb2R1Y3Q/LmlkLCBhcGlVcmxdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4gKCkgPT4ge1xuICAgIGlmIChzZXJ2ZXJRdW90ZVRpbWVyLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dChzZXJ2ZXJRdW90ZVRpbWVyLmN1cnJlbnQpO1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIGZ1bmN0aW9uIHZhcmlhdGlvbnNIYXZlRmllbGRNZXRhZGF0YShqb2JWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNoZWNrID0gKHZhcmlhdGlvbnM6IGFueVtdIHwgdW5kZWZpbmVkKSA9PlxuICAgICAgIUFycmF5LmlzQXJyYXkodmFyaWF0aW9ucykgfHxcbiAgICAgIHZhcmlhdGlvbnMuZXZlcnkoKHZhcmlhdGlvbikgPT4gdmFyaWF0aW9uPy52YXJpYXRpb25GaWVsZD8uZmllbGRUeXBlICE9IG51bGwpO1xuICAgIGlmICghY2hlY2soam9iVmFsdWVzPy52YXJpYXRpb25zKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGpvYlZhbHVlcz8udmFyaWF0aW9uc0dyb3VwcykpIHtcbiAgICAgIHJldHVybiBqb2JWYWx1ZXMudmFyaWF0aW9uc0dyb3Vwcy5ldmVyeSgoZ3JvdXA6IGFueSkgPT5cbiAgICAgICAgY2hlY2soZ3JvdXA/LnZhcmlhdGlvbnMpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5T3B0aW9uVmlzaWJpbGl0eShcbiAgICB2YXJpYXRpb25zOiBhbnlbXSxcbiAgICB2aXNpYmxlT3B0aW9uSWRzOiBTZXQ8bnVtYmVyPixcbiAgICB1bmF2YWlsYWJsZU9wdGlvbklkczogU2V0PG51bWJlcj5cbiAgKTogYm9vbGVhbiB7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICAodmFyaWF0aW9ucyB8fCBbXSkuZm9yRWFjaCgodmFyaWF0aW9uOiBhbnkpID0+IHtcbiAgICAgICh2YXJpYXRpb24uc2VsZWN0YWJsZU9wdGlvbnMgfHwgW10pLmZvckVhY2goKG9wdGlvbjogYW55KSA9PiB7XG4gICAgICAgIC8vIE1pcnJvciB0aGUgc2VydmVyJ3MgcGVyLW9wdGlvbiBpc1Zpc2libGUgKHNlbGVjdGVkQnkgcmVzb2x1dGlvbikuXG4gICAgICAgIGNvbnN0IGlzVmlzaWJsZSA9IHZpc2libGVPcHRpb25JZHMuaGFzKG9wdGlvbi5vcHRpb25JZCk7XG4gICAgICAgIGlmIChvcHRpb24uaXNWaXNpYmxlICE9PSBpc1Zpc2libGUpIHtcbiAgICAgICAgICBvcHRpb24uaXNWaXNpYmxlID0gaXNWaXNpYmxlO1xuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIENvbWJpbmF0aW9uLWF3YXJlIGF2YWlsYWJpbGl0eTogYW4gb3B0aW9uIGlzIHVuYXZhaWxhYmxlIHdoZW4gdGhlXG4gICAgICAgIC8vIGNvbWJpbmF0aW9uIG9mIChjdXJyZW50IGludmVudG9yeSBzZWxlY3Rpb25zICsgdGhpcyBvcHRpb24pIGhhcyBub1xuICAgICAgICAvLyBtYXRjaGluZyBzdG9jay4gTm9uLWludmVudG9yeSBwcm9kdWN0cyB5aWVsZCBhbiBlbXB0eSBzZXQgLT4gYWxsXG4gICAgICAgIC8vIGF2YWlsYWJsZS5cbiAgICAgICAgY29uc3QgYXZhaWxhYmxlID0gIXVuYXZhaWxhYmxlT3B0aW9uSWRzLmhhcyhvcHRpb24ub3B0aW9uSWQpO1xuICAgICAgICBpZiAob3B0aW9uLmF2YWlsYWJsZSAhPT0gYXZhaWxhYmxlKSB7XG4gICAgICAgICAgb3B0aW9uLmF2YWlsYWJsZSA9IGF2YWlsYWJsZTtcbiAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNoYW5nZWQ7XG4gIH1cblxuICAvLyBGb3IgaW52ZW50b3J5LWxpbWl0ZWQgcHJvZHVjdHMsIHJlZnJlc2ggcXVhbnRpdHktZGVwZW5kZW50IGludmVudG9yeVxuICAvLyAoZ3JvdXAgaW52ZW50b3J5Q291bnQvaW52ZW50b3J5U3VmZmljaWVudCkgZnJvbSB0aGUgYXV0aG9yaXRhdGl2ZSBzZXJ2ZXIgaW5cbiAgLy8gdGhlIGJhY2tncm91bmQsIGRlYm91bmNlZCwgYW5kIG1lcmdlIGl0IHRocm91Z2ggc2V0Sm9iICh3aGljaCByZW5kZXJzXG4gIC8vIHdpdGhvdXQgYSBmb3JtIHJlc2V0LCBzbyB0aGUgdmlld3BvcnQgbmV2ZXIganVtcHMpLiBUaGUgY2xpZW50IHByaWNlIHN0YXlzXG4gIC8vIGluc3RhbnQ7IHRoZSBpbnZlbnRvcnkgYmFkZ2UgY2F0Y2hlcyB1cCBhIGJlYXQgbGF0ZXIuXG4gIGZ1bmN0aW9uIHJlc2V0Rm9ybVByZXNlcnZpbmdTY3JvbGwodmFsdWVzOiBhbnkpIHtcbiAgICBjb25zdCBoYXNXaW5kb3cgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbiAgICBjb25zdCBzY3JvbGxQYXJlbnQgPSBmaW5kU2Nyb2xsUGFyZW50KCk7XG4gICAgY29uc3Qgc2Nyb2xsWCA9IGhhc1dpbmRvdyA/IHdpbmRvdy5zY3JvbGxYIDogMDtcbiAgICBjb25zdCBzY3JvbGxZID0gaGFzV2luZG93ID8gd2luZG93LnNjcm9sbFkgOiAwO1xuICAgIGNvbnN0IHBhcmVudFRvcCA9IHNjcm9sbFBhcmVudCA/IHNjcm9sbFBhcmVudC5zY3JvbGxUb3AgOiAwO1xuICAgIGNvbnN0IHBhcmVudExlZnQgPSBzY3JvbGxQYXJlbnQgPyBzY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCA6IDA7XG4gICAgcmVzZXQodmFsdWVzKTtcbiAgICBpZiAoaGFzV2luZG93ICYmIHR5cGVvZiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgaWYgKHNjcm9sbFBhcmVudCkge1xuICAgICAgICAgIHNjcm9sbFBhcmVudC5zY3JvbGxUb3AgPSBwYXJlbnRUb3A7XG4gICAgICAgICAgc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQgPSBwYXJlbnRMZWZ0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyhzY3JvbGxYLCBzY3JvbGxZKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmluZFNjcm9sbFBhcmVudCgpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBhY3RpdmUgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBsZXQgbm9kZTogSFRNTEVsZW1lbnQgfCBudWxsID0gYWN0aXZlO1xuICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSk7XG4gICAgICBjb25zdCBjYW5TY3JvbGxZID1cbiAgICAgICAgKHN0eWxlLm92ZXJmbG93WSA9PT0gJ2F1dG8nIHx8IHN0eWxlLm92ZXJmbG93WSA9PT0gJ3Njcm9sbCcpICYmXG4gICAgICAgIG5vZGUuc2Nyb2xsSGVpZ2h0ID4gbm9kZS5jbGllbnRIZWlnaHQ7XG4gICAgICBpZiAoY2FuU2Nyb2xsWSkgcmV0dXJuIG5vZGU7XG4gICAgICAvLyBSYWRpeCBTY3JvbGxBcmVhIHZpZXdwb3J0XG4gICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2xvdCcpID09PSAnc2Nyb2xsLWFyZWEtdmlld3BvcnQnKSByZXR1cm4gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIGNvbnN0IHZpZXdwb3J0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICdbZGF0YS1zbG90PVwiZGlhbG9nLWNvbnRlbnRcIl0gW2RhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXZpZXdwb3J0XCJdJ1xuICAgICkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIHJldHVybiB2aWV3cG9ydDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1RdWFudGl0aWVzTWF0Y2hSZXF1ZXN0KFxuICAgIGZvcm1WYWx1ZXM6IGFueSxcbiAgICByZXF1ZXN0RGF0YTogYW55LFxuICAgIHByb2R1Y3Q6IGFueVxuICApOiBib29sZWFuIHtcbiAgICBpZiAocHJvZHVjdEhhc0dyb3Vwcyhwcm9kdWN0KSkge1xuICAgICAgY29uc3QgZ3JvdXBzID0gcmVxdWVzdERhdGEudmFyaWF0aW9uc0dyb3VwcyB8fCBbXTtcbiAgICAgIHJldHVybiBncm91cHMuZXZlcnkoKGdyb3VwOiBhbnksIGluZGV4OiBudW1iZXIpID0+XG4gICAgICAgIE51bWJlcihncm91cC5xdWFudGl0eSkgPT09IE51bWJlcihmb3JtVmFsdWVzLnZhcmlhdGlvbnNHcm91cHM/LltpbmRleF0/LnF1YW50aXR5KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIE51bWJlcihyZXF1ZXN0RGF0YS5xdWFudGl0eSkgPT09IE51bWJlcihmb3JtVmFsdWVzLnF1YW50aXR5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5U2VydmVyUXVvdGUoZm9ybVZhbHVlczogYW55LCBzZXJ2ZXJKb2I6IGFueSkge1xuICAgIGNvbnN0IGNsZWFuZWRGb3JtVmFsdWVzID0gY2xlYW5Kb2JWYXJpYXRpb25zQW5kR3JvdXBzKHsgLi4uZm9ybVZhbHVlcyB9KTtcbiAgICAvLyBBZG9wdCBmaWVsZHMgdGhlIHNlcnZlciBhZGRlZC9yZW1vdmVkIHZpYSBmaWxsX2R5bmFtaWNfdmFyaWF0aW9ucywgd2hpbGVcbiAgICAvLyBwcmVzZXJ2aW5nIHRoZSB1c2VyJ3MgaW4tcHJvZ3Jlc3MgdmFsdWVzIChxdWFudGl0eSBlZGl0cywgc2VsZWN0aW9ucykuXG4gICAgLy8gTWF0Y2ggYnkgdmFyaWF0aW9uRmllbGQuaWQgLyBvcHRpb25JZCDigJQgaW5kZXggc3luYyBicmVha3Mgd2hlbiB0aGVcbiAgICAvLyBjb25kaXRpb25hbCBmaWVsZCBsaXN0IGNoYW5nZXMgbGVuZ3RoIG9yIG9yZGVyLlxuICAgIGNvbnN0IGluZGVwZW5kZW50UmVjb25jaWxlID0gcmVjb25jaWxlVmFyaWF0aW9ucyhcbiAgICAgIGNsZWFuZWRGb3JtVmFsdWVzLnZhcmlhdGlvbnMsXG4gICAgICBzZXJ2ZXJKb2IudmFyaWF0aW9uc1xuICAgICk7XG4gICAgbGV0IHZpc2liaWxpdHlDaGFuZ2VkID0gaW5kZXBlbmRlbnRSZWNvbmNpbGUudmlzaWJpbGl0eUNoYW5nZWQ7XG4gICAgY29uc3QgbWVyZ2VkSm9iOiBhbnkgPSB7XG4gICAgICAuLi5jbGVhbmVkRm9ybVZhbHVlcyxcbiAgICAgIHZhcmlhdGlvbnM6IGluZGVwZW5kZW50UmVjb25jaWxlLnZhcmlhdGlvbnMsXG4gICAgICBjb3N0OiBzZXJ2ZXJKb2IuY29zdCxcbiAgICAgIGNvc3RQZXJVbml0OiBzZXJ2ZXJKb2IuY29zdFBlclVuaXQsXG4gICAgICB0YXhBbW91bnQ6IHNlcnZlckpvYi50YXhBbW91bnQsXG4gICAgICB0b3RhbENvc3Q6IHNlcnZlckpvYi50b3RhbENvc3QsXG4gICAgICBjdXJyZW5jeTogc2VydmVySm9iLmN1cnJlbmN5LFxuICAgICAgaW52ZW50b3J5Q291bnQ6IHNlcnZlckpvYi5pbnZlbnRvcnlDb3VudCxcbiAgICAgIGludmVudG9yeVN1ZmZpY2llbnQ6IHNlcnZlckpvYi5pbnZlbnRvcnlTdWZmaWNpZW50LFxuICAgIH07XG4gICAgaWYgKFxuICAgICAgQXJyYXkuaXNBcnJheShjbGVhbmVkRm9ybVZhbHVlcy52YXJpYXRpb25zR3JvdXBzKVxuICAgICAgJiYgQXJyYXkuaXNBcnJheShzZXJ2ZXJKb2IudmFyaWF0aW9uc0dyb3VwcylcbiAgICApIHtcbiAgICAgIG1lcmdlZEpvYi52YXJpYXRpb25zR3JvdXBzID0gY2xlYW5lZEZvcm1WYWx1ZXMudmFyaWF0aW9uc0dyb3Vwcy5tYXAoXG4gICAgICAgIChncm91cDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2VydmVyR3JvdXAgPSBzZXJ2ZXJKb2IudmFyaWF0aW9uc0dyb3Vwc1tpbmRleF07XG4gICAgICAgICAgaWYgKCFzZXJ2ZXJHcm91cCkgcmV0dXJuIGdyb3VwO1xuICAgICAgICAgIGNvbnN0IGdyb3VwUmVjb25jaWxlID0gcmVjb25jaWxlVmFyaWF0aW9ucyhcbiAgICAgICAgICAgIGdyb3VwLnZhcmlhdGlvbnMsXG4gICAgICAgICAgICBzZXJ2ZXJHcm91cC52YXJpYXRpb25zXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZ3JvdXBSZWNvbmNpbGUudmlzaWJpbGl0eUNoYW5nZWQpIHtcbiAgICAgICAgICAgIHZpc2liaWxpdHlDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgICAgdmFyaWF0aW9uczogZ3JvdXBSZWNvbmNpbGUudmFyaWF0aW9ucyxcbiAgICAgICAgICAgIGdyb3VwQ29zdDogc2VydmVyR3JvdXAuZ3JvdXBDb3N0LFxuICAgICAgICAgICAgaW52ZW50b3J5Q291bnQ6IHNlcnZlckdyb3VwLmludmVudG9yeUNvdW50LFxuICAgICAgICAgICAgaW52ZW50b3J5U3VmZmljaWVudDogc2VydmVyR3JvdXAuaW52ZW50b3J5U3VmZmljaWVudCxcbiAgICAgICAgICAgIG1hdGNoaW5nSW52ZW50b3JpZXM6IHNlcnZlckdyb3VwLm1hdGNoaW5nSW52ZW50b3JpZXMsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbWVyZ2VkSm9iLCB2aXNpYmlsaXR5Q2hhbmdlZCB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbWVyZ2VJbnZlbnRvcnkocHJldjogYW55LCBzZXJ2ZXJKb2I6IGFueSkge1xuICAgIGlmICghcHJldikgcmV0dXJuIHByZXY7XG4gICAgY29uc3QgbWVyZ2VkOiBhbnkgPSB7XG4gICAgICAuLi5wcmV2LFxuICAgICAgaW52ZW50b3J5Q291bnQ6IHNlcnZlckpvYi5pbnZlbnRvcnlDb3VudCxcbiAgICAgIGludmVudG9yeVN1ZmZpY2llbnQ6IHNlcnZlckpvYi5pbnZlbnRvcnlTdWZmaWNpZW50LFxuICAgIH07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJldi52YXJpYXRpb25zR3JvdXBzKSAmJiBBcnJheS5pc0FycmF5KHNlcnZlckpvYi52YXJpYXRpb25zR3JvdXBzKSkge1xuICAgICAgbWVyZ2VkLnZhcmlhdGlvbnNHcm91cHMgPSBwcmV2LnZhcmlhdGlvbnNHcm91cHMubWFwKChnOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBzZyA9IHNlcnZlckpvYi52YXJpYXRpb25zR3JvdXBzW2ldO1xuICAgICAgICBpZiAoIXNnKSByZXR1cm4gZztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5nLFxuICAgICAgICAgIGludmVudG9yeUNvdW50OiBzZy5pbnZlbnRvcnlDb3VudCxcbiAgICAgICAgICBpbnZlbnRvcnlTdWZmaWNpZW50OiBzZy5pbnZlbnRvcnlTdWZmaWNpZW50LFxuICAgICAgICAgIG1hdGNoaW5nSW52ZW50b3JpZXM6IHNnLm1hdGNoaW5nSW52ZW50b3JpZXMsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjaGVkdWxlSW52ZW50b3J5UmVmcmVzaChjbGVhbmVkVmFsdWVzOiBhbnkpIHtcbiAgICBpZiAoIXByaWNpbmdSdWxlcyB8fCAhcHJpY2luZ1J1bGVzLm5lZWRzSW52ZW50b3J5KSByZXR1cm47XG4gICAgaWYgKGludmVudG9yeVJlZnJlc2hUaW1lci5jdXJyZW50KSB7XG4gICAgICBjbGVhclRpbWVvdXQoaW52ZW50b3J5UmVmcmVzaFRpbWVyLmN1cnJlbnQpO1xuICAgIH1cbiAgICAvLyBTaG93IHRoZSBsb2FkaW5nIHN0YXRlIGluIHRoZSBpbnZlbnRvcnkgcGlsbHMgZnJvbSB0aGUgbW9tZW50IGEgY2hhbmdlIGlzXG4gICAgLy8gbWFkZSB1bnRpbCB0aGUgYXV0aG9yaXRhdGl2ZSBzdG9jayBjb21lcyBiYWNrIChjb3ZlcnMgdGhlIGRlYm91bmNlIHdhaXRcbiAgICAvLyBhbmQgdGhlIHJlcXVlc3QpLiBUaGlzIGlzIHNlcGFyYXRlIGZyb20gYGxvYWRpbmdgIHNvIHRoZSBpbnN0YW50IGNsaWVudFxuICAgIC8vIHByaWNlIG5ldmVyIGZsaWNrZXJzIHRvIGEgc3Bpbm5lci5cbiAgICBzZXRJbnZlbnRvcnlMb2FkaW5nKHRydWUpO1xuICAgIGludmVudG9yeVJlZnJlc2hUaW1lci5jdXJyZW50ID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgZGF0YSA9IHsgLi4uY2xlYW5lZFZhbHVlcywgcHJvZHVjdDogeyBpZDogaW5pdFByb2R1Y3QuaWQgfSB9O1xuICAgICAgICBpZiAocHJvZHVjdEhhc0dyb3Vwcyhwcm9kdWN0KSkge1xuICAgICAgICAgIGRlbGV0ZSBkYXRhLnF1YW50aXR5O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHIgPSBhd2FpdCBmZXRjaEpvYlF1b3RlKGRhdGEsIGFwaVVybCk7XG4gICAgICAgIGNvbnN0IHNlcnZlckpvYiA9IHIudG9Kc29uKCk7XG4gICAgICAgIHNldEpvYigocHJldjogYW55KSA9PiBtZXJnZUludmVudG9yeShwcmV2LCBzZXJ2ZXJKb2IpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gQmVzdC1lZmZvcnQ6IGlmIHRoZSBpbnZlbnRvcnkgcmVmcmVzaCBmYWlscyB0aGUgcHJpY2UgaXMgdW5hZmZlY3RlZC5cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldEludmVudG9yeUxvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH0sIDQ1MCk7XG4gIH1cblxuICBmdW5jdGlvbiBhcHBseUNsaWVudFF1b3RlKHZhbHVlczogYW55KSB7XG4gICAgY29uc3Qgc2VsZWN0aW9ucyA9IHRvU2VsZWN0aW9ucyh2YWx1ZXMsIHByaWNpbmdSdWxlcyk7XG4gICAgY29uc3QgcmVzdWx0ID0gcHJpY2luZy5lc3RpbWF0ZVF1b3RlKHByaWNpbmdSdWxlcywgc2VsZWN0aW9ucyk7XG4gICAgaWYgKCd1bnN1cHBvcnRlZCcgaW4gcmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICAvLyBWaXNpYmlsaXR5IEFORCBhdmFpbGFiaWxpdHkgYXJlIHNjb3BlZCBwZXIgY29udGFpbmVyLCBtaXJyb3JpbmcgdGhlXG4gICAgLy8gc2VydmVyOiBpbmRlcGVuZGVudCB2YXJpYXRpb25zIHJlc29sdmUgYWdhaW5zdCBpbmRlcGVuZGVudCBzZWxlY3Rpb25zXG4gICAgLy8gb25seTsgZWFjaCBncm91cCByZXNvbHZlcyBhZ2FpbnN0IGl0cyBvd24gc2VsZWN0aW9ucyArIGluZGVwZW5kZW50LlxuICAgIC8vIE90aGVyIGdyb3VwcyBuZXZlciBsZWFrIGluLiBBdmFpbGFiaWxpdHkgaXMgY29tYmluYXRpb24tYXdhcmU6IGFuIG9wdGlvblxuICAgIC8vIGlzIGRpc2FibGVkIHdoZW4gKGN1cnJlbnQgaW52ZW50b3J5IHNlbGVjdGlvbnMgKyB0aGF0IG9wdGlvbikgaGFzIG5vXG4gICAgLy8gbWF0Y2hpbmcgc3RvY2suXG4gICAgLy8gRmllbGQgbWVtYmVyc2hpcCBtaXJyb3JzIGZpbGxfZHluYW1pY192YXJpYXRpb25zOiBnYXRlZCBmaWVsZHMgYXJlXG4gICAgLy8gYWRkZWQvcmVtb3ZlZCB2aWEgcmVzb2x2ZVZpc2libGVGaWVsZHMgKyBwcm9kdWN0IGZpZWxkIHRlbXBsYXRlcy5cbiAgICBjb25zdCBpbmRlcGVuZGVudFNjb3BlID0ge1xuICAgICAgcXVhbnRpdHk6IHNlbGVjdGlvbnMucXVhbnRpdHksXG4gICAgICBmaWVsZFZhbHVlczogc2VsZWN0aW9ucy5maWVsZFZhbHVlcyxcbiAgICB9O1xuICAgIGNvbnN0IGluZGVwZW5kZW50VmlzaWJsZUZpZWxkcyA9IHByaWNpbmcucmVzb2x2ZVZpc2libGVGaWVsZHMoXG4gICAgICBwcmljaW5nUnVsZXMsXG4gICAgICBpbmRlcGVuZGVudFNjb3BlXG4gICAgKTtcbiAgICBjb25zdCBpbmRlcGVuZGVudEZpZWxkVGVtcGxhdGVzID1cbiAgICAgIHByb2R1Y3RGaWVsZHNGb3JQcmljaW5nRmllbGRzKHByaWNpbmdSdWxlcy5maWVsZHMsIHByb2R1Y3QpO1xuICAgIGNvbnN0IGRlc2lyZWRJbmRlcGVuZGVudCA9IGJ1aWxkRGVzaXJlZFZhcmlhdGlvbnNGcm9tRmllbGRzKFxuICAgICAgdmFsdWVzLnZhcmlhdGlvbnMsXG4gICAgICBpbmRlcGVuZGVudEZpZWxkVGVtcGxhdGVzID8/IHByb2R1Y3Q/LmluZGVwZW5kZW50VmFyaWF0aW9uRmllbGRzLFxuICAgICAgaW5kZXBlbmRlbnRWaXNpYmxlRmllbGRzLFxuICAgICAgYnVpbGRFbXB0eVZhcmlhdGlvbkZyb21GaWVsZFxuICAgICk7XG4gICAgY29uc3QgaW5kZXBlbmRlbnRSZWNvbmNpbGUgPSByZWNvbmNpbGVWYXJpYXRpb25zKFxuICAgICAgdmFsdWVzLnZhcmlhdGlvbnMsXG4gICAgICBkZXNpcmVkSW5kZXBlbmRlbnRcbiAgICApO1xuICAgIHZhbHVlcy52YXJpYXRpb25zID0gaW5kZXBlbmRlbnRSZWNvbmNpbGUudmFyaWF0aW9ucztcblxuICAgIGNvbnN0IGluZGVwZW5kZW50VmlzaWJsZSA9IHByaWNpbmcucmVzb2x2ZVZpc2libGVPcHRpb25JZHMocHJpY2luZ1J1bGVzLCBpbmRlcGVuZGVudFNjb3BlKTtcbiAgICBjb25zdCBpbmRlcGVuZGVudFVuYXZhaWxhYmxlID0gcHJpY2luZy5yZXNvbHZlVW5hdmFpbGFibGVPcHRpb25JZHMocHJpY2luZ1J1bGVzLCBpbmRlcGVuZGVudFNjb3BlKTtcbiAgICBsZXQgdmlzaWJpbGl0eUNoYW5nZWQgPVxuICAgICAgaW5kZXBlbmRlbnRSZWNvbmNpbGUudmlzaWJpbGl0eUNoYW5nZWQgfHxcbiAgICAgIGFwcGx5T3B0aW9uVmlzaWJpbGl0eShcbiAgICAgICAgdmFsdWVzLnZhcmlhdGlvbnMsIGluZGVwZW5kZW50VmlzaWJsZSwgaW5kZXBlbmRlbnRVbmF2YWlsYWJsZVxuICAgICAgKTtcbiAgICBpZiAocHJpY2luZ1J1bGVzLmhhc0dyb3VwcyAmJiBBcnJheS5pc0FycmF5KHZhbHVlcy52YXJpYXRpb25zR3JvdXBzKSkge1xuICAgICAgdmFsdWVzLnZhcmlhdGlvbnNHcm91cHMuZm9yRWFjaCgoZzogYW55LCBpOiBudW1iZXIpID0+IHtcbiAgICAgICAgZy5ncm91cENvc3QgPSByZXN1bHQuZ3JvdXBDb3N0c1tpXSA/PyAwO1xuICAgICAgICBjb25zdCBncm91cFNjb3BlID0ge1xuICAgICAgICAgIGZpZWxkVmFsdWVzOiBzZWxlY3Rpb25zLmZpZWxkVmFsdWVzLFxuICAgICAgICAgIGdyb3Vwczogc2VsZWN0aW9ucy5ncm91cHMgPyBbc2VsZWN0aW9ucy5ncm91cHNbaV1dIDogW10sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGdyb3VwVmlzaWJsZUZpZWxkcyA9IHByaWNpbmcucmVzb2x2ZVZpc2libGVGaWVsZHMoXG4gICAgICAgICAgcHJpY2luZ1J1bGVzLFxuICAgICAgICAgIGdyb3VwU2NvcGVcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZ3JvdXBGaWVsZFRlbXBsYXRlcyA9XG4gICAgICAgICAgcHJvZHVjdEZpZWxkc0ZvclByaWNpbmdGaWVsZHMocHJpY2luZ1J1bGVzLmdyb3VwRmllbGRzLCBwcm9kdWN0KTtcbiAgICAgICAgY29uc3QgZGVzaXJlZEdyb3VwID0gYnVpbGREZXNpcmVkVmFyaWF0aW9uc0Zyb21GaWVsZHMoXG4gICAgICAgICAgZy52YXJpYXRpb25zLFxuICAgICAgICAgIGdyb3VwRmllbGRUZW1wbGF0ZXMgPz8gZ3JvdXBGaWVsZFRlbXBsYXRlc0Zyb21Qcm9kdWN0KHByb2R1Y3QpLFxuICAgICAgICAgIGdyb3VwVmlzaWJsZUZpZWxkcyxcbiAgICAgICAgICBidWlsZEVtcHR5VmFyaWF0aW9uRnJvbUZpZWxkXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGdyb3VwUmVjb25jaWxlID0gcmVjb25jaWxlVmFyaWF0aW9ucyhnLnZhcmlhdGlvbnMsIGRlc2lyZWRHcm91cCk7XG4gICAgICAgIGcudmFyaWF0aW9ucyA9IGdyb3VwUmVjb25jaWxlLnZhcmlhdGlvbnM7XG4gICAgICAgIGlmIChncm91cFJlY29uY2lsZS52aXNpYmlsaXR5Q2hhbmdlZCkge1xuICAgICAgICAgIHZpc2liaWxpdHlDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBncm91cFZpc2libGUgPSBwcmljaW5nLnJlc29sdmVWaXNpYmxlT3B0aW9uSWRzKHByaWNpbmdSdWxlcywgZ3JvdXBTY29wZSk7XG4gICAgICAgIGNvbnN0IGdyb3VwVW5hdmFpbGFibGUgPSBwcmljaW5nLnJlc29sdmVVbmF2YWlsYWJsZU9wdGlvbklkcyhwcmljaW5nUnVsZXMsIGdyb3VwU2NvcGUpO1xuICAgICAgICBpZiAoYXBwbHlPcHRpb25WaXNpYmlsaXR5KGcudmFyaWF0aW9ucywgZ3JvdXBWaXNpYmxlLCBncm91cFVuYXZhaWxhYmxlKSkge1xuICAgICAgICAgIHZpc2liaWxpdHlDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IG5leHRKb2IgPSBzeW5jSm9iU2VsZWN0ZWRPcHRpb25zRnJvbVZhbHVlcyh7XG4gICAgICAuLi52YWx1ZXMsXG4gICAgICBjb3N0OiByZXN1bHQuY29zdCxcbiAgICAgIGNvc3RQZXJVbml0OiByZXN1bHQuY29zdFBlclVuaXQsXG4gICAgICB0YXhBbW91bnQ6IHJlc3VsdC50YXhBbW91bnQsXG4gICAgICB0b3RhbENvc3Q6IHJlc3VsdC50b3RhbENvc3QsXG4gICAgICBjdXJyZW5jeTogcmVzdWx0LmN1cnJlbmN5LFxuICAgIH0pO1xuICAgIHNldEpvYihuZXh0Sm9iKTtcbiAgICAvLyBPbmx5IHJlLXNlZWQgdGhlIGZvcm0gd2hlbiBvcHRpb24vZmllbGQgdmlzaWJpbGl0eSBhY3R1YWxseSBjaGFuZ2VkIOKAlFxuICAgIC8vIGkuZS4gb24gc2VsZWN0aW9uIGNoYW5nZXMsIG5vdCBvbiBxdWFudGl0eSBlZGl0cy4gQ29zdC9ncm91cC1jb3N0IHVwZGF0ZXNcbiAgICAvLyBmbG93IHRocm91Z2ggc2V0Sm9iIHdpdGhvdXQgYSByZXNldC4gcmVzZXQoKSBtYWtlcyB1c2VGaWVsZEFycmF5IHJlbW91bnRcbiAgICAvLyBpdHMgaXRlbXMsIHdoaWNoIG1ha2VzIHRoZSBicm93c2VyIGxvc2UgdGhlIHNjcm9sbCBwb3NpdGlvbjsgY2FwdHVyZSBhbmRcbiAgICAvLyByZXN0b3JlIGl0IHNvIHRoZSB2aWV3cG9ydCBkb2Vzbid0IGp1bXAgd2hlbiB0b2dnbGluZyBhIHNlbGVjdC5cbiAgICAvLyBOZXZlciByZXNldCB3aXRoIHZhcmlhdGlvbnMgdGhhdCBsb3N0IHZhcmlhdGlvbkZpZWxkIOKAlCB0aGF0IGNvbGxhcHNlc1xuICAgIC8vIHRoZSBmb3JtIChEeW5hbWljVmFyaWF0aW9uSW5wdXQgY2Fubm90IHJlbmRlciB3aXRob3V0IGZpZWxkIG1ldGFkYXRhKS5cbiAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQgJiYgdmFyaWF0aW9uc0hhdmVGaWVsZE1ldGFkYXRhKG5leHRKb2IpKSB7XG4gICAgICByZXNldEZvcm1QcmVzZXJ2aW5nU2Nyb2xsKG5leHRKb2IpO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dEpvYjtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVTZXJ2ZXJRdW90ZSgpOiBQcm9taXNlPGFueSB8IG51bGw+IHtcbiAgICBjb25zdCB2YWx1ZXMgPSBnZXRWYWx1ZXMoKTtcbiAgICBjb25zdCBjbGVhbmVkVmFsdWVzID0gY2xlYW5Kb2JWYXJpYXRpb25zQW5kR3JvdXBzKHZhbHVlcyk7XG4gICAgY29uc3QgcmVxdWVzdElkID0gKytxdW90ZVJlcXVlc3RJZC5jdXJyZW50O1xuICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgbGV0IGRhdGEgPSB7IC4uLmNsZWFuZWRWYWx1ZXMsIHByb2R1Y3Q6IHsgaWQ6IGluaXRQcm9kdWN0LmlkIH0gfTtcbiAgICBpZiAocHJvZHVjdEhhc0dyb3Vwcyhwcm9kdWN0KSkge1xuICAgICAgLy8gaWYgdGhlIHByb2R1Y3QgaGFzIGdyb3VwIHZhcmlhdGlvbiBmaWVsZHMgd2UgZGVsZXRlIHF1YW50aXR5XG4gICAgICAvLyBiZWNhdXNlIGVhY2ggZ3JvdXAgaGFzIGl0J3Mgb3duIHF1YW50aXR5XG4gICAgICBkZWxldGUgZGF0YS5xdWFudGl0eTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCBmZXRjaEpvYlF1b3RlKGRhdGEsIGFwaVVybCk7XG4gICAgICBpZiAocmVxdWVzdElkICE9PSBxdW90ZVJlcXVlc3RJZC5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VydmVySm9iID0gci50b0pzb24oKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPSBnZXRWYWx1ZXMoKTtcbiAgICAgIGlmICghZm9ybVF1YW50aXRpZXNNYXRjaFJlcXVlc3QoY3VycmVudFZhbHVlcywgZGF0YSwgcHJvZHVjdCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCB7IG1lcmdlZEpvYiwgdmlzaWJpbGl0eUNoYW5nZWQgfSA9IGFwcGx5U2VydmVyUXVvdGUoY3VycmVudFZhbHVlcywgc2VydmVySm9iKTtcbiAgICAgIHNldEpvYihtZXJnZWRKb2IpO1xuICAgICAgLy8gS2VlcCB0aGUgdXNlcidzIGluLXByb2dyZXNzIHF1YW50aXR5IHZhbHVlczsgb25seSByZS1zZWVkIHRoZSBmb3JtIHdoZW5cbiAgICAgIC8vIG9wdGlvbiB2aXNpYmlsaXR5IGNoYW5nZWQgKG1pcnJvcnMgY2xpZW50LXNpZGUgcXVvdGluZykuXG4gICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQgJiYgdmFyaWF0aW9uc0hhdmVGaWVsZE1ldGFkYXRhKG1lcmdlZEpvYikpIHtcbiAgICAgICAgcmVzZXRGb3JtUHJlc2VydmluZ1Njcm9sbChtZXJnZWRKb2IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1lcmdlZEpvYjtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlLmVycm9yTWVzc2FnZSB8fCBlLm1lc3NhZ2UgfHwgJ1NlcnZlciBlcnJvcic7XG4gICAgICBzaG93QWxlcnQoeyBtZXNzYWdlIH0pO1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocmVxdWVzdElkID09PSBxdW90ZVJlcXVlc3RJZC5jdXJyZW50KSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFF1b3RlKG9wdGlvbnM/OiB7IGltbWVkaWF0ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8YW55IHwgbnVsbD4ge1xuICAgIGNvbnN0IHZhbHVlcyA9IGdldFZhbHVlcygpO1xuICAgIGNvbnN0IGNsZWFuZWRWYWx1ZXMgPSBjbGVhbkpvYlZhcmlhdGlvbnNBbmRHcm91cHModmFsdWVzKTtcbiAgICBpZiAoY2xpZW50U2lkZUVuYWJsZWQgJiYgcHJpY2luZ1J1bGVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjbGllbnRKb2IgPSBhcHBseUNsaWVudFF1b3RlKGNsZWFuZWRWYWx1ZXMpO1xuICAgICAgICBpZiAoY2xpZW50Sm9iKSB7XG4gICAgICAgICAgc2NoZWR1bGVJbnZlbnRvcnlSZWZyZXNoKGNsZWFuZWRWYWx1ZXMpO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2xpZW50Sm9iKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBmYWxsIHRocm91Z2ggdG8gc2VydmVyIG9uIGFueSBjbGllbnQtY2FsYyBlcnJvclxuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uaW1tZWRpYXRlKSB7XG4gICAgICBpZiAoc2VydmVyUXVvdGVUaW1lci5jdXJyZW50KSB7XG4gICAgICAgIGNsZWFyVGltZW91dChzZXJ2ZXJRdW90ZVRpbWVyLmN1cnJlbnQpO1xuICAgICAgICBzZXJ2ZXJRdW90ZVRpbWVyLmN1cnJlbnQgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4ZWN1dGVTZXJ2ZXJRdW90ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmIChzZXJ2ZXJRdW90ZVRpbWVyLmN1cnJlbnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHNlcnZlclF1b3RlVGltZXIuY3VycmVudCk7XG4gICAgICB9XG4gICAgICBzZXJ2ZXJRdW90ZVRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgc2VydmVyUXVvdGVUaW1lci5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgcmVzb2x2ZShhd2FpdCBleGVjdXRlU2VydmVyUXVvdGUoKSk7XG4gICAgICB9LCBTRVJWRVJfUVVPVEVfREVCT1VOQ0VfTVMpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gV2hlbiBwcmljaW5nIHJ1bGVzIGFycml2ZSAoYXN5bmMgZmV0Y2gpLCByZS1xdW90ZSBzbyBBcmVhL290aGVyXG4gIC8vIGNsaWVudC1zaWRlIGNvc3RzIGFwcGx5IHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXIgZmllbGQgZWRpdC5cbiAgY29uc3QgYXBwbGllZENsaWVudFJ1bGVzUmVmID0gUmVhY3QudXNlUmVmPGFueT4obnVsbCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjbGllbnRTaWRlRW5hYmxlZCB8fCAhcHJpY2luZ1J1bGVzIHx8IHByaWNpbmdSdWxlcy51bnN1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoYXBwbGllZENsaWVudFJ1bGVzUmVmLmN1cnJlbnQgPT09IHByaWNpbmdSdWxlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcHBsaWVkQ2xpZW50UnVsZXNSZWYuY3VycmVudCA9IHByaWNpbmdSdWxlcztcbiAgICBnZXRRdW90ZSgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2NsaWVudFNpZGVFbmFibGVkLCBwcmljaW5nUnVsZXNdKTtcblxuICBjb25zdCBbaXNEcmFmdE1vZGFsT3Blbiwgc2V0SXNEcmFmdE1vZGFsT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0RyYWZ0RGVzaWduZXJPcGVuLCBzZXRJc0RyYWZ0RGVzaWduZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcGVuZGluZ0NoZWNrb3V0UmVmID0gUmVhY3QudXNlUmVmPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGNvbnN1bWVQZW5kaW5nQ2hlY2tvdXQgPSAoKSA9PiB7XG4gICAgY29uc3QgcGVuZGluZyA9IHBlbmRpbmdDaGVja291dFJlZi5jdXJyZW50O1xuICAgIHBlbmRpbmdDaGVja291dFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICByZXR1cm4gcGVuZGluZztcbiAgfTtcblxuICBjb25zdCBydW5EcmFmdENoZWNrb3V0ID0gYXN5bmMgKFxuICAgIHByb2NlZWQ6IChqb2JEYXRhOiBhbnkpID0+IHZvaWQsXG4gICkgPT4ge1xuICAgIGlmICghKGF3YWl0IHZhbGlkYXRlRm9ybSgpKSkgcmV0dXJuO1xuICAgIGNvbnN0IHF1b3RlZCA9IGF3YWl0IGdldFF1b3RlKHsgaW1tZWRpYXRlOiB0cnVlIH0pO1xuICAgIGlmICghcXVvdGVkKSByZXR1cm47XG4gICAgY29uc3Qgam9iRGF0YSA9IGxpZnRJbmRlcGVuZGVudFZhcmlhdGlvbnNGcm9tR3JvdXBzKHF1b3RlZCwgcHJvZHVjdCk7XG5cbiAgICBpZiAoIXByb2R1Y3RBbGxvd3NDbGllbnREZXNpZ24oaW5pdFByb2R1Y3QpKSB7XG4gICAgICBwcm9jZWVkKGpvYkRhdGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChsb2FkQXJ0d29ya1BhdGgoaW5pdFByb2R1Y3QuaWQpID09PSAnc2VydmljZScpIHtcbiAgICAgIHByb2NlZWQoe1xuICAgICAgICAuLi5qb2JEYXRhLFxuICAgICAgICBvd25EcmFmdHM6IFtdLFxuICAgICAgICBjbGllbnRGaWxlczogW10sXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkcmFmdHMgPSBsb2FkRHJhZnRzKGluaXRQcm9kdWN0LmlkKTtcbiAgICBjb25zdCBoYXNTYXZlZCA9IGRyYWZ0cy5zb21lKFxuICAgICAgKGRyYWZ0OiBEcmFmdFRlbXBsYXRlRGF0YSkgPT5cbiAgICAgICAgZHJhZnQucHJvZHVjdElkID09PSBpbml0UHJvZHVjdC5pZCAmJiBkcmFmdC50ZW1wbGF0ZURhdGE/Lmxlbmd0aFxuICAgICk7XG4gICAgaWYgKGhhc1NhdmVkKSB7XG4gICAgICBzZXREcmFmdEFwcHByb3ZlQ2FsbGJhY2soKCkgPT4gYXN5bmMgKGRyYWZ0Sm9iRGF0YTogYW55KSA9PiB7XG4gICAgICAgIHByb2NlZWQoZHJhZnRKb2JEYXRhIHx8IGpvYkRhdGEpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICAgIHNldElzRHJhZnRNb2RhbE9wZW4odHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvY2VlZChqb2JEYXRhKTtcbiAgfTtcblxuICBjb25zdCBhZGRUb0NhcnQgPSBvbkFkZFRvQ2FydFxuICAgID8gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgcnVuRHJhZnRDaGVja291dCgoam9iRGF0YSkgPT4ge1xuICAgICAgICBpZiAoIWpvYkRhdGEucHJvZHVjdCkgam9iRGF0YS5wcm9kdWN0ID0geyBpZDogaW5pdFByb2R1Y3QuaWQgfTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb25BZGRUb0NhcnQoeyAuLi5qb2JEYXRhLCB0YWdzIH0pO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBidXlOb3cgPSBvbkJ1eU5vd1xuICAgID8gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgcnVuRHJhZnRDaGVja291dCgoam9iRGF0YSkgPT4ge1xuICAgICAgICBvbkJ1eU5vdyh7IC4uLmpvYkRhdGEgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGdldFN1Ym1pdFF1b3RlID0gb25HZXRRdW90ZVxuICAgID8gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgcnVuRHJhZnRDaGVja291dCgoam9iRGF0YSkgPT4ge1xuICAgICAgICBvbkdldFF1b3RlKHsgLi4uam9iRGF0YSB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4gKFxuICAgIDxNZXJjaGlQcm9kdWN0Rm9ybUNvbnRleHQuUHJvdmlkZXJcbiAgICAgIHZhbHVlPXtcbiAgICAgICAge1xuICAgICAgICAgIGFwaVVybCxcbiAgICAgICAgICBhbGxvd0FkZFRvQ2FydCxcbiAgICAgICAgICBidG5OYW1lQWRkVG9DYXJ0LFxuICAgICAgICAgIGNsYXNzTmFtZUFsZXJ0U2VsbGVyRWRpdGFibGUsXG4gICAgICAgICAgY2xhc3NOYW1lQnV0dG9uU3VibWl0LFxuICAgICAgICAgIGNsYXNzTmFtZUJ1dHRvbkdyb3VwQWRkLFxuICAgICAgICAgIGNsYXNzTmFtZUJ1dHRvbkdyb3VwUmVtb3ZlLFxuICAgICAgICAgIGNsYXNzTmFtZUJ1dHRvbnNTdWJtaXRDb250YWluZXIsXG4gICAgICAgICAgY2xhc3NOYW1lQnV0dG9uQXBwcm92ZURyYWZ0cyxcbiAgICAgICAgICBjbGFzc05hbWVCdXR0b25DbG9zZURyYWZ0cyxcbiAgICAgICAgICBjbGFzc05hbWVEcmFmdEJ1dHRvbkNvbnRhaW5lcixcbiAgICAgICAgICBjbGFzc05hbWVEcmFmdEN0YSxcbiAgICAgICAgICBjbGFzc05hbWVEcmFmdEdyb3VwQ29udGFpbmVyLFxuICAgICAgICAgIGNsYXNzTmFtZURyYWZ0R3JvdXBUaXRsZSxcbiAgICAgICAgICBjbGFzc05hbWVEcmFmdFNoZWV0LFxuICAgICAgICAgIGNsYXNzTmFtZURyYWZ0VG9vbGJhcixcbiAgICAgICAgICBjbGFzc05hbWVGaWxlVXBsb2FkQ29udGFpbmVyLFxuICAgICAgICAgIGNsYXNzTmFtZUZpbGVVcGxvYWQsXG4gICAgICAgICAgY2xhc3NOYW1lRmlsZVByZXZpZXdDb250YWluZXIsXG4gICAgICAgICAgY2xhc3NOYW1lRmlsZVVwbG9hZFRleHRDb250YWluZXIsXG4gICAgICAgICAgY2xhc3NOYW1lRmlsZVByZXZpZXdJY29uV3JhcHBlcixcbiAgICAgICAgICBjbGFzc05hbWVGaWxlVXBsb2FkQnV0dG9uLFxuICAgICAgICAgIGNsYXNzTmFtZUZpbGVVcGxvYWRJY29uLFxuICAgICAgICAgIGNsYXNzTmFtZUZpbGVVcGxvYWRJY29uU2Vjb25kLFxuICAgICAgICAgIGNsYXNzTmFtZUZpbGVVcGxvYWRJY29uQ29udGFpbmVyLFxuICAgICAgICAgIGNsYXNzTmFtZUZpbGVMaXN0SXRlbSxcbiAgICAgICAgICBjbGFzc05hbWVGaWxlQnV0dG9uRG93bmxvYWQsXG4gICAgICAgICAgY2xhc3NOYW1lRmlsZUJ1dHRvbkRlbGV0ZSxcbiAgICAgICAgICBjbGFzc05hbWVGaWxlTGlzdEl0ZW1Db250YWluZXIsXG4gICAgICAgICAgY2xhc3NOYW1lR3JvdXBzQ29udGFpbmVyLFxuICAgICAgICAgIGNsYXNzTmFtZUdyb3VwUHJpY2VDb250YWluZXIsXG4gICAgICAgICAgY2xhc3NOYW1lSW5wdXQsXG4gICAgICAgICAgY2xhc3NOYW1lSW5wdXRDb250YWluZXIsXG4gICAgICAgICAgY2xhc3NOYW1lSW52ZW50b3J5U3RhdHVzLFxuICAgICAgICAgIGNsYXNzTmFtZU9wdGlvbkNvbnRhaW5lcixcbiAgICAgICAgICBjbGFzc05hbWVPcHRpb25JbnB1dCxcbiAgICAgICAgICBjbGFzc05hbWVPcHRpb25MYWJlbCxcbiAgICAgICAgICBjbGFzc05hbWVPcHRpb25TdXBlcixcbiAgICAgICAgICBjbGFzc05hbWVPcHRpb25zQ2hlY2tib3hSYWRpb0NvbnRhaW5lcixcbiAgICAgICAgICBjbGFzc05hbWVPcHRpb25JbWFnZSxcbiAgICAgICAgICBjbGFzc05hbWVPcHRpb25JbWFnZUNvbnRhaW5lcixcbiAgICAgICAgICBjbGFzc05hbWVPcHRpb25Db2xvdXIsXG4gICAgICAgICAgY2xhc3NOYW1lT3B0aW9uQ29sb3VyQ29udGFpbmVyLFxuICAgICAgICAgIGNsYXNzTmFtZVByb2R1Y3RUaXRsZSxcbiAgICAgICAgICBjbGFzc05hbWVQcm9kdWN0T3JpZ2luVGl0bGUsXG4gICAgICAgICAgY2xhc3NOYW1lUHJvZHVjdFRvdGFsQ29udGFpbmVyLFxuICAgICAgICAgIGNsYXNzTmFtZVByb2R1Y3RUb3RhbCxcbiAgICAgICAgICBjbGFzc05hbWVRdWFudGl0eUxhYmVsQ29udGFpbmVyLFxuICAgICAgICAgIGNsYXNzTmFtZVVuaXRQcmljZSxcbiAgICAgICAgICBjbGFzc05hbWVQcmljZU1hdHJpeCxcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgY29udHJvbCxcbiAgICAgICAgICBkcmFmdEFwcHJvdmVDYWxsYmFjayxcbiAgICAgICAgICBnZXRRdW90ZSxcbiAgICAgICAgICBoY2FwdGNoYVNpdGVLZXksXG4gICAgICAgICAgcHJpY2luZ1J1bGVzLFxuICAgICAgICAgIGhpZGVDb3N0LFxuICAgICAgICAgIGhpZGVDb3VudHJ5LFxuICAgICAgICAgIGhpZGVDYWxjdWxhdGVkUHJpY2UsXG4gICAgICAgICAgaGlkZURvbWFpbk5hbWUsXG4gICAgICAgICAgaGlkZVF1YW50aXR5RmllbGQsXG4gICAgICAgICAgaGlkZVJlcXVlc3RRdW90YXRpb25CdXR0b24sXG4gICAgICAgICAgaGlkZVBheW1lbnRVcGZyb250QnV0dG9uLFxuICAgICAgICAgIGhpZGVUaXRsZSxcbiAgICAgICAgICBob29rRm9ybSxcbiAgICAgICAgICBpc0NhcnRJdGVtLFxuICAgICAgICAgIGlzRHJhZnREZXNpZ25lck9wZW4sXG4gICAgICAgICAgaXNEcmFmdE1vZGFsT3BlbixcbiAgICAgICAgICBjb25zdW1lUGVuZGluZ0NoZWNrb3V0LFxuICAgICAgICAgIGpvYixcbiAgICAgICAgICBsb2FkaW5nLFxuICAgICAgICAgIGludmVudG9yeUxvYWRpbmcsXG4gICAgICAgICAgb25BZGRUb0NhcnQ6IGFkZFRvQ2FydCxcbiAgICAgICAgICBvbkJ1eU5vdzogYnV5Tm93LFxuICAgICAgICAgIG9uR2V0UXVvdGU6IGdldFN1Ym1pdFF1b3RlLFxuICAgICAgICAgIG9uU3VibWl0LFxuICAgICAgICAgIHByb2R1Y3QsXG4gICAgICAgICAgcHJvZHVjdEZvcm1JZCxcbiAgICAgICAgICBzZXRDbGllbnQsXG4gICAgICAgICAgc2V0SXNEcmFmdERlc2lnbmVyT3BlbixcbiAgICAgICAgICBzZXRJc0RyYWZ0TW9kYWxPcGVuLFxuICAgICAgICAgIHNldEpvYixcbiAgICAgICAgICBzZXRMb2FkaW5nLFxuICAgICAgICAgIHNob3dBbGVydCxcbiAgICAgICAgICBzaG93Q3VycmVuY3ksXG4gICAgICAgICAgc2hvd0N1cnJlbmN5Q29kZSxcbiAgICAgICAgICBzaG93RmVhdHVyZURlYWRsaW5lLFxuICAgICAgICAgIHNob3dHcm91cEJ1eVN0YXR1cyxcbiAgICAgICAgICBzaG93UHJpY2VNYXRyaXgsXG4gICAgICAgICAgc2hvd1VuaXRQcmljZSxcbiAgICAgICAgfSBhcyBhbnlcbiAgICAgIH1cbiAgICA+XG4gICAgICB7cHJvZHVjdEZvcm1JZCA/IChcbiAgICAgICAgPGZvcm0gaWQ9e3Byb2R1Y3RGb3JtSWR9IG9uU3VibWl0PXtkb1N1Ym1pdH0+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Zvcm0+XG4gICAgICApIDogY2hpbGRyZW59XG4gICAgICA8UHJvZHVjdERyYWZ0c0hvc3QgLz5cbiAgICA8L01lcmNoaVByb2R1Y3RGb3JtQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG4iXSwi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