@envive-ai/react-hooks 0.1.6 → 0.1.8

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 (686) hide show
  1. package/dist/NewOrgConfig-BU6uJT74.js +15 -0
  2. package/dist/NewOrgConfig-DmidHiyj.cjs +20 -0
  3. package/dist/SystemSettingsContext-BbobkM82.cjs +20 -0
  4. package/dist/SystemSettingsContext-gtrccL_q.js +13 -0
  5. package/dist/TrackComponentVisibleEvent-CqjMiZCS.cjs +59 -0
  6. package/dist/TrackComponentVisibleEvent-D9kpqKM4.js +52 -0
  7. package/dist/amplitudeContext-B73xamNe.d.cts +52 -0
  8. package/dist/amplitudeContext-BhhYPJSL.d.ts +52 -0
  9. package/dist/amplitudeContext-Dr1jHI13.cjs +309 -0
  10. package/dist/amplitudeContext-YRS1QOO3.js +287 -0
  11. package/dist/api-DYjHj_hR.cjs +239 -0
  12. package/dist/api-d5uWvb3-.js +166 -0
  13. package/dist/{app-CjsQ2_n-.js → app-B9r0MF9n.js} +7 -7
  14. package/dist/{app-CnKRZ9RW.cjs → app-Bgr-mAvr.cjs} +10 -10
  15. package/dist/application/models/graphql/index.cjs +2 -1
  16. package/dist/application/models/graphql/index.d.ts +1 -1
  17. package/dist/application/models/graphql/index.js +2 -1
  18. package/dist/application/models/guards/api/index.cjs +3 -1
  19. package/dist/application/models/guards/api/index.d.ts +2 -2
  20. package/dist/application/models/guards/api/index.js +3 -1
  21. package/dist/application/models/guards/utils.cjs +3 -0
  22. package/dist/application/models/guards/utils.d.cts +2 -0
  23. package/dist/application/models/guards/utils.d.ts +2 -0
  24. package/dist/application/models/guards/utils.js +3 -0
  25. package/dist/application/models/index.cjs +13 -10
  26. package/dist/application/models/index.d.cts +9 -4
  27. package/dist/application/models/index.d.ts +12 -7
  28. package/dist/application/models/index.js +11 -7
  29. package/dist/application/models/utilityTypes/index.cjs +1 -1
  30. package/dist/application/models/utilityTypes/index.d.ts +1 -1
  31. package/dist/application/models/utilityTypes/index.js +1 -1
  32. package/dist/application/models/variantInfo/index.cjs +1 -1
  33. package/dist/application/models/variantInfo/index.d.cts +1 -1
  34. package/dist/application/models/variantInfo/index.d.ts +1 -1
  35. package/dist/application/models/variantInfo/index.js +1 -1
  36. package/dist/application/utils/index.cjs +47 -40
  37. package/dist/application/utils/index.d.cts +13 -8
  38. package/dist/application/utils/index.d.ts +15 -10
  39. package/dist/application/utils/index.js +20 -13
  40. package/dist/{atomStore-D8pjE1vL.js → atomStore-BuopbV9k.js} +1 -1
  41. package/dist/{atomStore-B4jIaDPd.cjs → atomStore-CZKe3itM.cjs} +1 -1
  42. package/dist/atoms/app/index.cjs +14 -9
  43. package/dist/atoms/app/index.d.cts +16 -11
  44. package/dist/atoms/app/index.d.ts +19 -14
  45. package/dist/atoms/app/index.js +14 -9
  46. package/dist/atoms/atomStore/index.cjs +2 -2
  47. package/dist/atoms/atomStore/index.d.cts +1 -1
  48. package/dist/atoms/atomStore/index.js +2 -2
  49. package/dist/atoms/chat/index.cjs +35 -28
  50. package/dist/atoms/chat/index.d.cts +36 -31
  51. package/dist/atoms/chat/index.d.ts +39 -34
  52. package/dist/atoms/chat/index.js +21 -14
  53. package/dist/atoms/globalSearch/index.cjs +1 -1
  54. package/dist/atoms/globalSearch/index.d.cts +5 -5
  55. package/dist/atoms/globalSearch/index.d.ts +6 -6
  56. package/dist/atoms/globalSearch/index.js +1 -1
  57. package/dist/atoms/org/index.cjs +6 -14
  58. package/dist/atoms/org/index.d.cts +28 -32
  59. package/dist/atoms/org/index.d.ts +31 -35
  60. package/dist/atoms/org/index.js +5 -11
  61. package/dist/atoms/search/index.cjs +46 -34
  62. package/dist/atoms/search/index.d.cts +10 -4
  63. package/dist/atoms/search/index.d.ts +13 -7
  64. package/dist/atoms/search/index.js +28 -16
  65. package/dist/atoms/search/types.cjs +5 -0
  66. package/dist/atoms/search/types.d.cts +2 -0
  67. package/dist/atoms/search/types.d.ts +2 -0
  68. package/dist/atoms/search/types.js +3 -0
  69. package/dist/atoms/search/utils.cjs +3 -0
  70. package/dist/atoms/search/utils.d.cts +5 -0
  71. package/dist/atoms/search/utils.d.ts +5 -0
  72. package/dist/atoms/search/utils.js +3 -0
  73. package/dist/cdnContext-CVgXkdV2.cjs +53 -0
  74. package/dist/cdnContext-DdE6VPIF.js +38 -0
  75. package/dist/chat-BNDYKsqF.js +258 -0
  76. package/dist/{chat-BubCW1as.cjs → chat-BkjIKhc5.cjs} +1 -1
  77. package/dist/chat-Br5FhtRs.cjs +394 -0
  78. package/dist/{chat-CV6MXeID.js → chat-CgLypC3w.js} +1 -1
  79. package/dist/chatElementDisplayLocation-BwiXrkN7.d.ts +25 -0
  80. package/dist/chatElementDisplayLocation-DWmfNX_u.d.cts +25 -0
  81. package/dist/chatSearch-BiF2__V0.js +295 -0
  82. package/dist/chatSearch-BrzfJOto.cjs +418 -0
  83. package/dist/chatState-BDsqKE-B.cjs +120 -0
  84. package/dist/chatState-ie771Hwy.js +34 -0
  85. package/dist/commerce-api-Dz1jxPOJ.js +311 -0
  86. package/dist/commerce-api-KoiUki51.cjs +318 -0
  87. package/dist/{components-Cw9WjA6g.cjs → components-Cby-Cma3.cjs} +1 -1
  88. package/dist/{components-B4T3Uzth.js → components-D1mg1-Br.js} +1 -1
  89. package/dist/config/locators/components/chat/index.cjs +1 -1
  90. package/dist/config/locators/components/chat/index.d.cts +1 -1
  91. package/dist/config/locators/components/chat/index.d.ts +1 -1
  92. package/dist/config/locators/components/chat/index.js +1 -1
  93. package/dist/config/locators/components/chat/variants/index.d.cts +1 -1
  94. package/dist/config/locators/components/chat/variants/index.d.ts +1 -1
  95. package/dist/config/locators/components/index.cjs +1 -1
  96. package/dist/config/locators/components/index.d.cts +1 -1
  97. package/dist/config/locators/components/index.d.ts +1 -1
  98. package/dist/config/locators/components/index.js +1 -1
  99. package/dist/config/locators/components/search/index.d.cts +1 -1
  100. package/dist/config/locators/index.cjs +42 -22
  101. package/dist/config/locators/index.d.cts +2 -2
  102. package/dist/config/locators/index.d.ts +3 -3
  103. package/dist/config/locators/index.js +25 -5
  104. package/dist/contexts/amplitudeContext/index.cjs +22 -0
  105. package/dist/contexts/amplitudeContext/index.d.cts +2 -0
  106. package/dist/contexts/amplitudeContext/index.d.ts +2 -0
  107. package/dist/contexts/amplitudeContext/index.js +20 -0
  108. package/dist/contexts/cdnContext/index.cjs +7 -0
  109. package/dist/contexts/cdnContext/index.d.cts +15 -0
  110. package/dist/contexts/cdnContext/index.d.ts +15 -0
  111. package/dist/contexts/cdnContext/index.js +6 -0
  112. package/dist/contexts/chatContext/index.cjs +331 -0
  113. package/dist/contexts/chatContext/index.d.cts +15 -0
  114. package/dist/contexts/chatContext/index.d.ts +15 -0
  115. package/dist/contexts/chatContext/index.js +324 -0
  116. package/dist/contexts/enviveConfigContext/index.cjs +7 -0
  117. package/dist/contexts/enviveConfigContext/index.d.cts +30 -0
  118. package/dist/contexts/enviveConfigContext/index.d.ts +30 -0
  119. package/dist/contexts/enviveConfigContext/index.js +6 -0
  120. package/dist/contexts/enviveCssContext/index.cjs +66 -0
  121. package/dist/contexts/enviveCssContext/index.d.cts +10 -0
  122. package/dist/contexts/enviveCssContext/index.d.ts +10 -0
  123. package/dist/contexts/enviveCssContext/index.js +63 -0
  124. package/dist/contexts/featureFlagContext/index.cjs +107 -0
  125. package/dist/contexts/featureFlagContext/index.d.cts +20 -0
  126. package/dist/contexts/featureFlagContext/index.d.ts +20 -0
  127. package/dist/contexts/featureFlagContext/index.js +103 -0
  128. package/dist/contexts/featureFlagServiceContext/index.cjs +6 -0
  129. package/dist/contexts/featureFlagServiceContext/index.d.cts +5 -0
  130. package/dist/contexts/featureFlagServiceContext/index.d.ts +5 -0
  131. package/dist/contexts/featureFlagServiceContext/index.js +5 -0
  132. package/dist/contexts/graphqlContext/index.cjs +16 -0
  133. package/dist/contexts/graphqlContext/index.d.cts +13 -0
  134. package/dist/contexts/graphqlContext/index.d.ts +13 -0
  135. package/dist/contexts/graphqlContext/index.js +15 -0
  136. package/dist/contexts/localStorageContext/index.cjs +6 -0
  137. package/dist/contexts/localStorageContext/index.d.cts +30 -0
  138. package/dist/contexts/localStorageContext/index.d.ts +30 -0
  139. package/dist/contexts/localStorageContext/index.js +4 -0
  140. package/dist/contexts/newOrgConfigContext/index.cjs +20 -0
  141. package/dist/contexts/newOrgConfigContext/index.d.cts +31 -0
  142. package/dist/contexts/newOrgConfigContext/index.d.ts +31 -0
  143. package/dist/contexts/newOrgConfigContext/index.js +19 -0
  144. package/dist/contexts/searchContext/index.cjs +24 -0
  145. package/dist/contexts/searchContext/index.d.cts +16 -0
  146. package/dist/contexts/searchContext/index.d.ts +16 -0
  147. package/dist/contexts/searchContext/index.js +23 -0
  148. package/dist/contexts/sessionStorageContext/index.cjs +5 -0
  149. package/dist/contexts/sessionStorageContext/index.d.cts +15 -0
  150. package/dist/contexts/sessionStorageContext/index.d.ts +15 -0
  151. package/dist/contexts/sessionStorageContext/index.js +4 -0
  152. package/dist/contexts/shopifyUrlContext/index.cjs +5 -0
  153. package/dist/contexts/shopifyUrlContext/index.d.cts +20 -0
  154. package/dist/contexts/shopifyUrlContext/index.d.ts +20 -0
  155. package/dist/contexts/shopifyUrlContext/index.js +4 -0
  156. package/dist/contexts/systemSettingsContext/index.cjs +8 -0
  157. package/dist/contexts/systemSettingsContext/index.d.cts +37 -0
  158. package/dist/contexts/systemSettingsContext/index.d.ts +37 -0
  159. package/dist/contexts/systemSettingsContext/index.js +6 -0
  160. package/dist/contexts/types.cjs +7 -0
  161. package/dist/contexts/types.d.cts +4 -0
  162. package/dist/contexts/types.d.ts +4 -0
  163. package/dist/contexts/types.js +3 -0
  164. package/dist/contexts/userIdentityContext/index.cjs +27 -0
  165. package/dist/contexts/userIdentityContext/index.d.cts +2 -0
  166. package/dist/contexts/userIdentityContext/index.d.ts +2 -0
  167. package/dist/contexts/userIdentityContext/index.js +26 -0
  168. package/dist/domObserver-B19-69gW.js +285 -0
  169. package/dist/domObserver-CwieVNgj.cjs +304 -0
  170. package/dist/enviveConfig-BQB14yuH.js +62 -0
  171. package/dist/enviveConfig-DAA9sozZ.cjs +130 -0
  172. package/dist/enviveConfigContext-BCpBKqsz.js +45 -0
  173. package/dist/enviveConfigContext-Btg5JUMG.cjs +60 -0
  174. package/dist/events/index.cjs +1 -1
  175. package/dist/events/index.d.ts +1 -1
  176. package/dist/events/index.js +1 -1
  177. package/dist/{events-BrLpaNxh.js → events-BHJJjPDN.js} +1 -1
  178. package/dist/{events-DwT6cEwI.cjs → events-B_fJZf9E.cjs} +1 -1
  179. package/dist/featureFlagServiceContext-Bcx5yh4S.cjs +56 -0
  180. package/dist/featureFlagServiceContext-Cpw8omUr.d.ts +23 -0
  181. package/dist/featureFlagServiceContext-Cvn6fcdB.d.cts +23 -0
  182. package/dist/featureFlagServiceContext-_tXX5iro.js +42 -0
  183. package/dist/featureGates-2Zea2D2S.js +27 -0
  184. package/dist/featureGates-BY2Zy7x_.cjs +33 -0
  185. package/dist/frontendConfig-DnMZfvcA.d.cts +857 -0
  186. package/dist/frontendConfig-Dqxbqo8G.d.ts +857 -0
  187. package/dist/{globalSearch-BFvEg53C.cjs → globalSearch-C94-vEVh.cjs} +1 -1
  188. package/dist/{globalSearch-B6THR7Jx.js → globalSearch-Dlbnfasm.js} +1 -1
  189. package/dist/graphql-DRLWdYEk.js +36 -0
  190. package/dist/graphql-xPDT7ZkK.cjs +53 -0
  191. package/dist/graphqlConfig-B4ddz1vH.cjs +39 -0
  192. package/dist/graphqlConfig-BnjOdeX7.js +14 -0
  193. package/dist/graphqlContext-B-9g2vOb.js +96 -0
  194. package/dist/graphqlContext-B7PEKDJs.cjs +111 -0
  195. package/dist/hooks/AmplitudeOperations/index.cjs +22 -0
  196. package/dist/hooks/AmplitudeOperations/index.d.cts +12 -0
  197. package/dist/hooks/AmplitudeOperations/index.d.ts +12 -0
  198. package/dist/hooks/AmplitudeOperations/index.js +22 -0
  199. package/dist/hooks/AppDetails/index.cjs +19 -0
  200. package/dist/hooks/AppDetails/index.d.cts +27 -0
  201. package/dist/hooks/AppDetails/index.d.ts +27 -0
  202. package/dist/hooks/AppDetails/index.js +19 -0
  203. package/dist/hooks/BlockBackButton/index.cjs +29 -0
  204. package/dist/hooks/BlockBackButton/index.d.cts +5 -0
  205. package/dist/hooks/BlockBackButton/index.d.ts +5 -0
  206. package/dist/hooks/BlockBackButton/index.js +27 -0
  207. package/dist/hooks/CdnOperations/index.cjs +24 -0
  208. package/dist/hooks/CdnOperations/index.d.cts +7 -0
  209. package/dist/hooks/CdnOperations/index.d.ts +7 -0
  210. package/dist/hooks/CdnOperations/index.js +22 -0
  211. package/dist/hooks/ChatToggle/index.cjs +64 -0
  212. package/dist/hooks/ChatToggle/index.d.cts +12 -0
  213. package/dist/hooks/ChatToggle/index.d.ts +12 -0
  214. package/dist/hooks/ChatToggle/index.js +62 -0
  215. package/dist/hooks/ChatToggleAnalytics/index.cjs +38 -0
  216. package/dist/hooks/ChatToggleAnalytics/index.d.cts +9 -0
  217. package/dist/hooks/ChatToggleAnalytics/index.d.ts +9 -0
  218. package/dist/hooks/ChatToggleAnalytics/index.js +36 -0
  219. package/dist/hooks/CustomerSupportHandoff/index.cjs +36 -0
  220. package/dist/hooks/CustomerSupportHandoff/index.d.cts +16 -0
  221. package/dist/hooks/CustomerSupportHandoff/index.d.ts +16 -0
  222. package/dist/hooks/CustomerSupportHandoff/index.js +34 -0
  223. package/dist/hooks/Debounce/index.cjs +3 -0
  224. package/dist/hooks/Debounce/index.d.cts +5 -0
  225. package/dist/hooks/Debounce/index.d.ts +5 -0
  226. package/dist/hooks/Debounce/index.js +3 -0
  227. package/dist/hooks/ElementObserver/index.cjs +179 -0
  228. package/dist/hooks/ElementObserver/index.d.cts +29 -0
  229. package/dist/hooks/ElementObserver/index.d.ts +29 -0
  230. package/dist/hooks/ElementObserver/index.js +177 -0
  231. package/dist/hooks/GrabAndScroll/index.cjs +99 -0
  232. package/dist/hooks/GrabAndScroll/index.d.cts +14 -0
  233. package/dist/hooks/GrabAndScroll/index.d.ts +14 -0
  234. package/dist/hooks/GrabAndScroll/index.js +97 -0
  235. package/dist/hooks/GraphQLConfig/index.cjs +17 -0
  236. package/dist/hooks/GraphQLConfig/index.d.cts +15 -0
  237. package/dist/hooks/GraphQLConfig/index.d.ts +15 -0
  238. package/dist/hooks/GraphQLConfig/index.js +16 -0
  239. package/dist/hooks/IdentifyUser/index.cjs +60 -0
  240. package/dist/hooks/IdentifyUser/index.d.cts +10 -0
  241. package/dist/hooks/IdentifyUser/index.d.ts +10 -0
  242. package/dist/hooks/IdentifyUser/index.js +58 -0
  243. package/dist/hooks/ImageResolver/index.cjs +55 -0
  244. package/dist/hooks/ImageResolver/index.d.cts +7 -0
  245. package/dist/hooks/ImageResolver/index.d.ts +7 -0
  246. package/dist/hooks/ImageResolver/index.js +53 -0
  247. package/dist/hooks/Intersection/index.cjs +3 -0
  248. package/dist/hooks/Intersection/index.d.cts +7 -0
  249. package/dist/hooks/Intersection/index.d.ts +7 -0
  250. package/dist/hooks/Intersection/index.js +3 -0
  251. package/dist/hooks/IsSmallScreen/index.cjs +22 -0
  252. package/dist/hooks/IsSmallScreen/index.d.cts +5 -0
  253. package/dist/hooks/IsSmallScreen/index.d.ts +5 -0
  254. package/dist/hooks/IsSmallScreen/index.js +20 -0
  255. package/dist/hooks/LocalStorageOperations/index.cjs +79 -0
  256. package/dist/hooks/LocalStorageOperations/index.d.cts +17 -0
  257. package/dist/hooks/LocalStorageOperations/index.d.ts +17 -0
  258. package/dist/hooks/LocalStorageOperations/index.js +74 -0
  259. package/dist/hooks/MessageFilter/index.cjs +54 -0
  260. package/dist/hooks/MessageFilter/index.d.cts +30 -0
  261. package/dist/hooks/MessageFilter/index.d.ts +30 -0
  262. package/dist/hooks/MessageFilter/index.js +54 -0
  263. package/dist/hooks/MessageScrollObserver/index.cjs +36 -0
  264. package/dist/hooks/MessageScrollObserver/index.d.cts +5 -0
  265. package/dist/hooks/MessageScrollObserver/index.d.ts +5 -0
  266. package/dist/hooks/MessageScrollObserver/index.js +34 -0
  267. package/dist/hooks/NewOrgConfig/index.cjs +20 -0
  268. package/dist/hooks/NewOrgConfig/index.d.cts +23 -0
  269. package/dist/hooks/NewOrgConfig/index.d.ts +23 -0
  270. package/dist/hooks/NewOrgConfig/index.js +20 -0
  271. package/dist/hooks/Search/index.cjs +326 -0
  272. package/dist/hooks/Search/index.d.cts +61 -0
  273. package/dist/hooks/Search/index.d.ts +61 -0
  274. package/dist/hooks/Search/index.js +323 -0
  275. package/dist/hooks/SearchOperations/index.cjs +102 -0
  276. package/dist/hooks/SearchOperations/index.d.cts +22 -0
  277. package/dist/hooks/SearchOperations/index.d.ts +22 -0
  278. package/dist/hooks/SearchOperations/index.js +99 -0
  279. package/dist/hooks/SessionStorageOperations/index.cjs +30 -0
  280. package/dist/hooks/SessionStorageOperations/index.d.cts +8 -0
  281. package/dist/hooks/SessionStorageOperations/index.d.ts +8 -0
  282. package/dist/hooks/SessionStorageOperations/index.js +28 -0
  283. package/dist/hooks/ShopifyUrlOperations/index.cjs +53 -0
  284. package/dist/hooks/ShopifyUrlOperations/index.d.cts +23 -0
  285. package/dist/hooks/ShopifyUrlOperations/index.d.ts +23 -0
  286. package/dist/hooks/ShopifyUrlOperations/index.js +49 -0
  287. package/dist/hooks/SnapCalculator/index.cjs +29 -0
  288. package/dist/hooks/SnapCalculator/index.d.cts +12 -0
  289. package/dist/hooks/SnapCalculator/index.d.ts +12 -0
  290. package/dist/hooks/SnapCalculator/index.js +27 -0
  291. package/dist/hooks/SystemSettingsContext/index.cjs +7 -0
  292. package/dist/hooks/SystemSettingsContext/index.d.cts +23 -0
  293. package/dist/hooks/SystemSettingsContext/index.d.ts +23 -0
  294. package/dist/hooks/SystemSettingsContext/index.js +7 -0
  295. package/dist/hooks/TrackComponentVisibleEvent/index.cjs +22 -0
  296. package/dist/hooks/TrackComponentVisibleEvent/index.d.cts +18 -0
  297. package/dist/hooks/TrackComponentVisibleEvent/index.d.ts +18 -0
  298. package/dist/hooks/TrackComponentVisibleEvent/index.js +22 -0
  299. package/dist/hooks/UpdateAnalyticsProps/index.cjs +62 -0
  300. package/dist/hooks/UpdateAnalyticsProps/index.d.cts +9 -0
  301. package/dist/hooks/UpdateAnalyticsProps/index.d.ts +9 -0
  302. package/dist/hooks/UpdateAnalyticsProps/index.js +59 -0
  303. package/dist/hooks/utils.cjs +8 -0
  304. package/dist/hooks/utils.d.cts +13 -0
  305. package/dist/hooks/utils.d.ts +13 -0
  306. package/dist/hooks/utils.js +3 -0
  307. package/dist/index-B9HUPS_i.d.cts +186 -0
  308. package/dist/{index-CcIG01PJ.d.ts → index-BN-3ctk_.d.ts} +2 -2
  309. package/dist/index-BNiYL8h0.d.cts +28 -0
  310. package/dist/{index-BDPWBU3h.d.cts → index-BW6pHibZ.d.cts} +1 -1
  311. package/dist/index-BirtCYN3.d.ts +186 -0
  312. package/dist/index-Bmub8e38.d.cts +1 -1
  313. package/dist/{index-Cqg6ltII.d.ts → index-BoYC9XLW.d.ts} +1 -1
  314. package/dist/index-C9zXP5bg.d.ts +28 -0
  315. package/dist/index-CESxqFso.d.cts +1 -1
  316. package/dist/index-CK_J3QMY.d.ts +676 -0
  317. package/dist/index-C_MIfxF0.d.cts +676 -0
  318. package/dist/index-CiWEYzXl.d.cts +1 -1
  319. package/dist/{index-C6KdON7d.d.ts → index-Da0UzyI9.d.ts} +1 -1
  320. package/dist/{index-ylUiJvnr.d.ts → index-Dr_c2DDq.d.ts} +1 -1
  321. package/dist/{index-PGF8BvxQ.d.ts → index-DsiilEj-.d.ts} +1 -1
  322. package/dist/{index-Byb45OPg.d.cts → index-MOOZ2oxZ.d.cts} +1 -1
  323. package/dist/{index-DOii3C6b.d.ts → index-ghzD_356.d.ts} +1 -1
  324. package/dist/{index-B0NW9KTj.d.cts → index-hdbCEjYy.d.cts} +1 -1
  325. package/dist/interceptors/index.cjs +2 -1
  326. package/dist/interceptors/index.d.cts +10 -10
  327. package/dist/interceptors/index.d.ts +13 -13
  328. package/dist/interceptors/index.js +2 -1
  329. package/dist/interceptors/types.cjs +1 -0
  330. package/dist/interceptors/types.d.cts +13 -0
  331. package/dist/interceptors/types.d.ts +13 -0
  332. package/dist/interceptors/types.js +3 -0
  333. package/dist/localStorageContext-DiTziaPa.js +95 -0
  334. package/dist/localStorageContext-S38L0OSP.cjs +115 -0
  335. package/dist/logger-CkhQayOW.js +20 -0
  336. package/dist/logger-DQ0WfCcD.cjs +26 -0
  337. package/dist/{models-BkXg5eIP.cjs → models-C48U9q70.js} +220 -458
  338. package/dist/models-Ctn-pmug.cjs +1537 -0
  339. package/dist/newOrgConfigAtom-D6R-7HCk.cjs +15 -0
  340. package/dist/newOrgConfigAtom-bn1lnljf.js +8 -0
  341. package/dist/newOrgConfigContext-D3WoaBVU.cjs +68 -0
  342. package/dist/newOrgConfigContext-rWOYz0E8.js +53 -0
  343. package/dist/{nodeSelector-Dm4S-10n.d.cts → nodeSelector-B3bPtEjX.d.cts} +1 -1
  344. package/dist/{nodeSelector-BxrS2S_k.d.ts → nodeSelector-D5gjDWZ3.d.ts} +1 -1
  345. package/dist/org-CIhjzxWr.cjs +43 -0
  346. package/dist/org-CeWXnpwF.js +12 -0
  347. package/dist/{orgAnalyticsConfig-ClrFy2qH.js → orgAnalyticsConfig-BC4_sEmn.js} +1 -1
  348. package/dist/{orgAnalyticsConfig-BJ2A1RZ-.cjs → orgAnalyticsConfig-DsGbyFhO.cjs} +1 -1
  349. package/dist/search--NZPZkK3.cjs +205 -0
  350. package/dist/search-BLShhjvR.d.ts +20 -0
  351. package/dist/search-CxZl7iQF.js +126 -0
  352. package/dist/{search-filter-types-fZf91Pdw.d.ts → search-filter-types-DPgeG8FS.d.ts} +1 -1
  353. package/dist/{search-filter-types-DosbseF3.d.cts → search-filter-types-_mprCnBi.d.cts} +1 -1
  354. package/dist/search-y-ioX5Mz.d.cts +20 -0
  355. package/dist/searchContext-C4Glr8Nv.cjs +145 -0
  356. package/dist/searchContext-VnjhV7Lk.js +129 -0
  357. package/dist/searchServiceAdapter-DEv1tTn0.cjs +34 -0
  358. package/dist/searchServiceAdapter-WyCU55NV.js +16 -0
  359. package/dist/sessionStorageContext-BJ05_j7l.cjs +66 -0
  360. package/dist/sessionStorageContext-Dp_bhXQP.js +52 -0
  361. package/dist/shopifyUrlContext-CGqpJl1o.js +61 -0
  362. package/dist/shopifyUrlContext-Cob4L7Dt.cjs +75 -0
  363. package/dist/spiffyWidgets-BuS00VaQ.d.cts +20 -0
  364. package/dist/spiffyWidgets-GILaqHv6.d.ts +20 -0
  365. package/dist/systemSettingsContext-BDKWrrco.cjs +60 -0
  366. package/dist/systemSettingsContext-Dqng3YSZ.js +39 -0
  367. package/dist/{test-types-C9b_OdfO.d.ts → test-types-EzMFw_U3.d.ts} +1 -1
  368. package/dist/{test-types-CgVJtwUr.d.cts → test-types-ThQiO_cc.d.cts} +1 -1
  369. package/dist/types/index.cjs +33 -5
  370. package/dist/types/index.d.cts +2 -2
  371. package/dist/types/index.d.ts +2 -2
  372. package/dist/types/index.js +30 -3
  373. package/dist/types-BUeRbZUk.d.cts +10 -0
  374. package/dist/types-BwNrLPSZ.cjs +106 -0
  375. package/dist/types-CMuTSKrW.d.ts +10 -0
  376. package/dist/types-CS0Hrzja.js +30 -0
  377. package/dist/types-CxObxLKs.cjs +48 -0
  378. package/dist/types-D3uOF0Oy.js +76 -0
  379. package/dist/types-fsXBIQwO.d.ts +51 -0
  380. package/dist/types-zuWLkBJ3.d.cts +51 -0
  381. package/dist/types.d.cts +15 -0
  382. package/dist/types.d.ts +15 -0
  383. package/dist/unsupportedProductExceptions-CKiri_vO.cjs +32 -0
  384. package/dist/unsupportedProductExceptions-ClxlJ6cU.js +20 -0
  385. package/dist/urlsParser-D1nsJgQG.cjs +78 -0
  386. package/dist/urlsParser-DzEetiey.js +42 -0
  387. package/dist/useAmplitudeOperations-BSsyvkQ2.cjs +41 -0
  388. package/dist/useAmplitudeOperations-BottjwT9.js +34 -0
  389. package/dist/useAppDetails-BpiBxS_5.cjs +38 -0
  390. package/dist/useAppDetails-DDNIsM46.js +30 -0
  391. package/dist/useDebounce-BaIp-A1W.cjs +26 -0
  392. package/dist/useDebounce-CxPj9WmE.js +19 -0
  393. package/dist/useGraphQLConfig-DZ0ZannB.js +63 -0
  394. package/dist/useGraphQLConfig-Dw8dDh3T.cjs +76 -0
  395. package/dist/useIntersection-B4J9UhaG.js +21 -0
  396. package/dist/useIntersection-DKWc5MY6.cjs +28 -0
  397. package/dist/{useMessageInterceptor-B87e3yu3.cjs → useMessageInterceptor-CstX10ih.cjs} +3 -3
  398. package/dist/{useMessageInterceptor-Bb7YRaWk.js → useMessageInterceptor-D5oAekXn.js} +2 -2
  399. package/dist/userIdentityContext-D2oFVFzo.d.cts +20 -0
  400. package/dist/userIdentityContext-DPFkCSCu.cjs +125 -0
  401. package/dist/userIdentityContext-Z65zM-Ae.js +109 -0
  402. package/dist/userIdentityContext-wYRpgkaJ.d.ts +20 -0
  403. package/dist/utilityTypes-DynzxjK3.js +1 -0
  404. package/dist/utilityTypes-xb8SjKSV.cjs +0 -0
  405. package/dist/utils-2SWrJ12w.cjs +29 -0
  406. package/dist/utils-B1xLx9S8.d.ts +15 -0
  407. package/dist/utils-B3x_9JTY.d.cts +15 -0
  408. package/dist/utils-BZtSmwgh.d.cts +22 -0
  409. package/dist/utils-Bcz5kAgP.js +92 -0
  410. package/dist/utils-CEKzBcN2.js +27 -0
  411. package/dist/utils-CMqFfqZx.cjs +130 -0
  412. package/dist/utils-CVovRwlw.js +606 -0
  413. package/dist/utils-CqBxIpEV.js +23 -0
  414. package/dist/utils-CsMbZmRw.cjs +33 -0
  415. package/dist/utils-DzPSXtmD.cjs +715 -0
  416. package/dist/utils-bxOCg2i9.d.ts +22 -0
  417. package/dist/variantInfo-B7IwRpCg.cjs +0 -0
  418. package/dist/variantInfo-BtOYUGWa.js +1 -0
  419. package/package.json +191 -7
  420. package/src/application/models/index.ts +0 -1
  421. package/src/application/utils/analyticsUtils.ts +1 -1
  422. package/src/atoms/amplitude/amplitudeTrackEventAtom.ts +1 -1
  423. package/src/atoms/app/index.ts +1 -1
  424. package/src/atoms/chat/chatState.ts +1 -1
  425. package/src/atoms/chat/replies.ts +1 -1
  426. package/src/atoms/org/graphqlConfig.ts +1 -39
  427. package/src/atoms/org/index.ts +0 -1
  428. package/src/atoms/org/newOrgConfigAtom.ts +2 -6
  429. package/src/contexts/{amplitudeContext.tsx → amplitudeContext/amplitudeContext.tsx} +1 -2
  430. package/src/contexts/amplitudeContext/index.ts +1 -0
  431. package/src/contexts/{cdnContext.tsx → cdnContext/cdnContext.tsx} +1 -1
  432. package/src/contexts/cdnContext/index.ts +1 -0
  433. package/src/contexts/{chatContext.tsx → chatContext/chatContext.tsx} +3 -3
  434. package/src/contexts/chatContext/index.ts +1 -0
  435. package/src/contexts/{enviveConfigContext.tsx → enviveConfigContext/enviveConfigContext.tsx} +1 -1
  436. package/src/contexts/enviveConfigContext/index.ts +1 -0
  437. package/src/contexts/{enviveCssContext.tsx → enviveCssContext/enviveCssContext.tsx} +1 -1
  438. package/src/contexts/enviveCssContext/index.ts +1 -0
  439. package/src/contexts/{featureFlagContext.tsx → featureFlagContext/featureFlagContext.tsx} +1 -1
  440. package/src/contexts/featureFlagContext/index.ts +1 -0
  441. package/src/contexts/featureFlagServiceContext/index.ts +1 -0
  442. package/src/contexts/graphqlContext/index.ts +1 -0
  443. package/src/contexts/localStorageContext/index.ts +1 -0
  444. package/src/contexts/{localStorageContext.tsx → localStorageContext/localStorageContext.tsx} +2 -2
  445. package/src/contexts/newOrgConfigContext/index.ts +1 -0
  446. package/src/contexts/newOrgConfigContext/newOrgConfigContext.tsx +70 -0
  447. package/src/contexts/searchContext/index.ts +1 -0
  448. package/src/contexts/{searchContext.tsx → searchContext/searchContext.tsx} +5 -5
  449. package/src/contexts/sessionStorageContext/index.ts +1 -0
  450. package/src/contexts/{sessionStorageContext.tsx → sessionStorageContext/sessionStorageContext.tsx} +1 -1
  451. package/src/contexts/shopifyUrlContext/index.ts +1 -0
  452. package/src/contexts/systemSettingsContext/index.ts +1 -0
  453. package/src/contexts/userIdentityContext/index.ts +1 -0
  454. package/src/events/registerAnalyticsListeners.ts +2 -2
  455. package/src/favicon.ico +0 -0
  456. package/src/hooks/AmplitudeOperations/index.ts +1 -0
  457. package/src/hooks/{useAmplitudeOperations.ts → AmplitudeOperations/useAmplitudeOperations.ts} +1 -1
  458. package/src/hooks/AppDetails/index.ts +1 -0
  459. package/src/hooks/{useAppDetails.ts → AppDetails/useAppDetails.ts} +1 -3
  460. package/src/hooks/BlockBackButton/index.ts +1 -0
  461. package/src/hooks/CdnOperations/index.ts +1 -0
  462. package/src/hooks/{useCdnOperations.ts → CdnOperations/useCdnOperations.ts} +1 -1
  463. package/src/hooks/ChatToggle/index.ts +1 -0
  464. package/src/hooks/{useChatToggle.ts → ChatToggle/useChatToggle.ts} +1 -1
  465. package/src/hooks/ChatToggleAnalytics/index.ts +1 -0
  466. package/src/hooks/{useChatToggleAnalytics.ts → ChatToggleAnalytics/useChatToggleAnalytics.ts} +1 -1
  467. package/src/hooks/CustomerSupportHandoff/index.ts +1 -0
  468. package/src/hooks/Debounce/index.ts +1 -0
  469. package/src/hooks/ElementObserver/index.ts +1 -0
  470. package/src/hooks/GrabAndScroll/index.ts +1 -0
  471. package/src/hooks/GraphQLConfig/index.ts +1 -0
  472. package/src/hooks/{useGraphQLConfig.ts → GraphQLConfig/useGraphQLConfig.ts} +1 -1
  473. package/src/hooks/IdentifyUser/index.ts +1 -0
  474. package/src/hooks/{useIdentifyUser.ts → IdentifyUser/useIdentifyUser.ts} +1 -1
  475. package/src/hooks/ImageResolver/index.ts +1 -0
  476. package/src/hooks/Intersection/index.ts +1 -0
  477. package/src/hooks/IsSmallScreen/index.ts +1 -0
  478. package/src/hooks/LocalStorageOperations/index.ts +1 -0
  479. package/src/hooks/{useLocalStorageOperations.ts → LocalStorageOperations/useLocalStorageOperations.ts} +2 -2
  480. package/src/hooks/MessageFilter/index.ts +1 -0
  481. package/src/hooks/MessageScrollObserver/index.ts +1 -0
  482. package/src/hooks/NewOrgConfig/index.ts +1 -0
  483. package/src/hooks/{useNewOrgConfig.ts → NewOrgConfig/useNewOrgConfig.ts} +1 -1
  484. package/src/hooks/Search/index.ts +1 -0
  485. package/src/hooks/{useSearch.tsx → Search/useSearch.tsx} +5 -4
  486. package/src/hooks/SearchOperations/index.ts +1 -0
  487. package/src/hooks/SessionStorageOperations/index.ts +1 -0
  488. package/src/hooks/{useSessionStorageOperations.ts → SessionStorageOperations/useSessionStorageOperations.ts} +1 -1
  489. package/src/hooks/ShopifyUrlOperations/index.ts +1 -0
  490. package/src/hooks/{useShopifyUrlOperations.ts → ShopifyUrlOperations/useShopifyUrlOperations.ts} +1 -1
  491. package/src/hooks/SnapCalculator/index.ts +1 -0
  492. package/src/hooks/SystemSettingsContext/index.ts +1 -0
  493. package/src/hooks/SystemSettingsContext/useSystemSettingsContext.ts +14 -0
  494. package/src/hooks/TrackComponentVisibleEvent/index.ts +1 -0
  495. package/src/hooks/{useTrackComponentVisibleEvent.ts → TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts} +2 -2
  496. package/src/hooks/UpdateAnalyticsProps/index.ts +1 -0
  497. package/src/hooks/{useUpdateAnalyticsProps.ts → UpdateAnalyticsProps/useUpdateAnalyticsProps.ts} +1 -1
  498. package/dist/amplitudeContext-CHzas7Cf.d.cts +0 -52
  499. package/dist/amplitudeContext-D-7fmVh1.cjs +0 -356
  500. package/dist/amplitudeContext-hY3caPC6.js +0 -322
  501. package/dist/amplitudeContext-tJ4y-SzX.d.ts +0 -52
  502. package/dist/api-DjeZXxl_.js +0 -207
  503. package/dist/api-_JaUnIUj.cjs +0 -292
  504. package/dist/bandolier-DYEz4-8C.js +0 -1229
  505. package/dist/bandolier-o_-xrbOV.cjs +0 -1229
  506. package/dist/carpe-CsG5jCcl.cjs +0 -607
  507. package/dist/carpe-DONk00bZ.js +0 -605
  508. package/dist/cdnUtils-32v8bDX9.cjs +0 -16
  509. package/dist/cdnUtils-E4tLBt2g.js +0 -11
  510. package/dist/chat-CO7cRkaq.cjs +0 -506
  511. package/dist/chat-hcRc4RRd.js +0 -285
  512. package/dist/contexts/index.cjs +0 -57
  513. package/dist/contexts/index.d.cts +0 -10
  514. package/dist/contexts/index.d.ts +0 -10
  515. package/dist/contexts/index.js +0 -23
  516. package/dist/contexts-B4ihTBsV.cjs +0 -2980
  517. package/dist/contexts-DGlr7M1o.js +0 -2596
  518. package/dist/coterie-CKB93qfz.cjs +0 -239
  519. package/dist/coterie-DHcj2fRE.js +0 -239
  520. package/dist/custservice-types-Dy0kc9TW.cjs +0 -35
  521. package/dist/custservice-types-mnIunabv.js +0 -23
  522. package/dist/default-BnB4p0Se.cjs +0 -234
  523. package/dist/default-D6f5Dyt7.js +0 -199
  524. package/dist/default-ZKkE5zT4.cjs +0 -4
  525. package/dist/default-legGZJwI.js +0 -4
  526. package/dist/divIds-2dJlU3z8.cjs +0 -117
  527. package/dist/divIds-BUrN2vY-.js +0 -21
  528. package/dist/dreamlandBaby-BiRYYFav.js +0 -346
  529. package/dist/dreamlandBaby-zuvmfzfD.cjs +0 -346
  530. package/dist/embedded-BJLWIriJ.js +0 -23
  531. package/dist/embedded-Dl79TJLC.cjs +0 -131
  532. package/dist/entrypoints-Bs3pn6EV.js +0 -7
  533. package/dist/entrypoints-Dqi5pzWH.cjs +0 -19
  534. package/dist/enviveConfig-BccuzS2a.cjs +0 -240
  535. package/dist/enviveConfig-CzhTz8Aa.js +0 -152
  536. package/dist/fiveCbd-DwTTwC2j.cjs +0 -613
  537. package/dist/fiveCbd-Dz2NouOF.js +0 -613
  538. package/dist/forLoveAndLemons-DqSdyD6S.js +0 -665
  539. package/dist/forLoveAndLemons-Ud6mPrV3.cjs +0 -667
  540. package/dist/graphql-BNW60InJ.cjs +0 -128
  541. package/dist/graphql-CjB8wHzm.js +0 -74
  542. package/dist/graphqlConfig-CYt6tWII.js +0 -30
  543. package/dist/graphqlConfig-DicykC-o.cjs +0 -61
  544. package/dist/greenpan-B_EbPkSP.js +0 -397
  545. package/dist/greenpan-kPE4fJgd.cjs +0 -397
  546. package/dist/grooveLife-Ckuir319.js +0 -342
  547. package/dist/grooveLife-DKSEQp1F.cjs +0 -342
  548. package/dist/homegrownCannabis-BVPa2pqe.js +0 -410
  549. package/dist/homegrownCannabis-BwIAkxuA.cjs +0 -410
  550. package/dist/hooks/index.cjs +0 -63
  551. package/dist/hooks/index.d.cts +0 -314
  552. package/dist/hooks/index.d.ts +0 -314
  553. package/dist/hooks/index.js +0 -23
  554. package/dist/index-BMPtlgac.d.ts +0 -191
  555. package/dist/index-C7pGDl1A.d.ts +0 -1609
  556. package/dist/index-C9lgsCWp.d.cts +0 -203
  557. package/dist/index-Cc-wBCn6.d.ts +0 -203
  558. package/dist/index-DTu2X-YS.d.cts +0 -1609
  559. package/dist/index-OEifcBsm.d.cts +0 -191
  560. package/dist/jackArcher-B39OEIj6.cjs +0 -727
  561. package/dist/jackArcher-BwkWGybC.js +0 -727
  562. package/dist/jordanCraig-CxRH_jLi.js +0 -1786
  563. package/dist/jordanCraig-RwmWw-jM.cjs +0 -1786
  564. package/dist/kindredBravely-D78VwL20.cjs +0 -490
  565. package/dist/kindredBravely-DQDpAzdl.js +0 -490
  566. package/dist/kutFromTheKloth-TcXQkIti.js +0 -369
  567. package/dist/kutFromTheKloth-dXRrNti0.cjs +0 -369
  568. package/dist/larryAndSerges-Bh5XEXsZ.js +0 -262
  569. package/dist/larryAndSerges-COdBzOzu.cjs +0 -262
  570. package/dist/leapsAndRebounds-BbXnqkl5.cjs +0 -360
  571. package/dist/leapsAndRebounds-mjCaH1k-.js +0 -360
  572. package/dist/longevityrx-DdV3v26F.cjs +0 -320
  573. package/dist/longevityrx-DfPDfvAt.js +0 -320
  574. package/dist/lookOptic-DgXFGBPP.cjs +0 -282
  575. package/dist/lookOptic-FgVW1afF.js +0 -282
  576. package/dist/mantraBrand-C5gVm3rk.cjs +0 -750
  577. package/dist/mantraBrand-uV8HCDR8.js +0 -750
  578. package/dist/medterra-BtDpr1Hw.cjs +0 -583
  579. package/dist/medterra-DgzE7-mj.js +0 -583
  580. package/dist/modells-CJjsxOIR.js +0 -484
  581. package/dist/modells-Ck5KbRFj.cjs +0 -484
  582. package/dist/models-UZ6HszfZ.js +0 -1281
  583. package/dist/org-C2RrBVQR.cjs +0 -81
  584. package/dist/org-xMytX--e.js +0 -38
  585. package/dist/pressedFloral-Bteoboms.js +0 -661
  586. package/dist/pressedFloral-CexgV-xy.cjs +0 -661
  587. package/dist/search-BMOAmrmY.js +0 -459
  588. package/dist/search-Df0Ifneg.cjs +0 -672
  589. package/dist/skinPerfection-BGzq9lq-.cjs +0 -334
  590. package/dist/skinPerfection-BlvcEcUE.js +0 -334
  591. package/dist/snapSupplements-CbbGzAgO.cjs +0 -285
  592. package/dist/snapSupplements-kcsPAOm9.js +0 -285
  593. package/dist/socialProofClasses-Db8gzsfi.cjs +0 -40
  594. package/dist/socialProofClasses-kwDvwLOZ.js +0 -10
  595. package/dist/spanx-B4WFA_rI.js +0 -661
  596. package/dist/spanx-BWoE4F8b.cjs +0 -663
  597. package/dist/spanxStaging-BOrOjhXn.js +0 -845
  598. package/dist/spanxStaging-BfdfIug4.cjs +0 -848
  599. package/dist/suggestionBarV2-types-IMMOmCir.js +0 -10
  600. package/dist/suggestionBarV2-types-nnGNgFvR.cjs +0 -16
  601. package/dist/supergoop-22dd5_BS.js +0 -323
  602. package/dist/supergoop-B-a4cku2.cjs +0 -323
  603. package/dist/types--pr1GQQx.js +0 -154
  604. package/dist/types-BVSyY3Hk.cjs +0 -196
  605. package/dist/uniqueVintage-CJXiNNe7.js +0 -1211
  606. package/dist/uniqueVintage-D0jzJWlo.cjs +0 -1213
  607. package/dist/userIdentityContext-BPqvVIg0.d.cts +0 -20
  608. package/dist/userIdentityContext-wbCRmlzp.d.ts +0 -20
  609. package/dist/utils-C9ZSCx12.js +0 -888
  610. package/dist/utils-D5HO61hG.cjs +0 -1016
  611. package/dist/venaCbd-Bhhu_qUf.cjs +0 -365
  612. package/dist/venaCbd-CanovPS_.js +0 -365
  613. package/dist/westonJonBoucher-BC0x1ktI.cjs +0 -422
  614. package/dist/westonJonBoucher-BUu1_wP1.js +0 -422
  615. package/dist/wineEnthusiast-BlCryfil.cjs +0 -940
  616. package/dist/wineEnthusiast-Ck1x5iJq.js +0 -940
  617. package/dist/wolfMattress-D9Mjq-HP.js +0 -372
  618. package/dist/wolfMattress-JssghhC-.cjs +0 -372
  619. package/dist/wolfTactical-C6exYhL7.cjs +0 -349
  620. package/dist/wolfTactical-CnV3KQdI.js +0 -349
  621. package/src/application/models/supportedOrgs.ts +0 -161
  622. package/src/atoms/org/orgPageConfig.ts +0 -42
  623. package/src/contexts/index.ts +0 -16
  624. package/src/contexts/newOrgConfigContext.tsx +0 -104
  625. package/src/contexts/orgConfigContext.tsx +0 -106
  626. package/src/hooks/index.ts +0 -27
  627. package/src/hooks/useSystemSettingsContext.ts +0 -12
  628. package/src/merchants/bandolier/bandolier.ts +0 -1371
  629. package/src/merchants/carpe/carpe.ts +0 -653
  630. package/src/merchants/coterie/coterie.ts +0 -277
  631. package/src/merchants/default.ts +0 -196
  632. package/src/merchants/dreamlandBaby/dreamlandBaby.ts +0 -381
  633. package/src/merchants/fiveCbd/fiveCbd.ts +0 -691
  634. package/src/merchants/forLoveAndLemons/forLoveAndLemons.ts +0 -751
  635. package/src/merchants/greenpan/greenpan.ts +0 -434
  636. package/src/merchants/grooveLife/grooveLife.ts +0 -392
  637. package/src/merchants/homegrownCannabis/homegrownCannabis.ts +0 -474
  638. package/src/merchants/init-merchant.sh +0 -53
  639. package/src/merchants/jackArcher/jackArcher.ts +0 -989
  640. package/src/merchants/jordanCraig/jordanCraig.ts +0 -1927
  641. package/src/merchants/kindredBravely/kindredBravely.ts +0 -538
  642. package/src/merchants/kutFromTheKloth/kutFromTheKloth.ts +0 -421
  643. package/src/merchants/larryAndSerges/larryAndSerges.ts +0 -318
  644. package/src/merchants/leapsAndRebounds/leapsAndRebounds.ts +0 -424
  645. package/src/merchants/longevityrx/longevityrx.ts +0 -374
  646. package/src/merchants/lookOptic/lookOptic.ts +0 -323
  647. package/src/merchants/mantraBrand/mantraBrand.ts +0 -844
  648. package/src/merchants/medterra/medterra.ts +0 -673
  649. package/src/merchants/modells/modells.ts +0 -543
  650. package/src/merchants/pressedFloral/pressedFloral.ts +0 -728
  651. package/src/merchants/skinPerfection/skinPerfection.ts +0 -385
  652. package/src/merchants/snapSupplements/snapSupplements.ts +0 -328
  653. package/src/merchants/spanx/spanx.ts +0 -810
  654. package/src/merchants/spanx/spanxStaging.ts +0 -936
  655. package/src/merchants/supergoop/supergoop.ts +0 -375
  656. package/src/merchants/uniqueVintage/uniqueVintage.ts +0 -1314
  657. package/src/merchants/venaCbd/venaCbd.ts +0 -407
  658. package/src/merchants/westonJonBoucher/westonJonBoucher.ts +0 -473
  659. package/src/merchants/wineEnthusiast/wineEnthusiast.ts +0 -990
  660. package/src/merchants/wolfMattress/wolfMattress.ts +0 -411
  661. package/src/merchants/wolfTactical/wolfTactical.ts +0 -383
  662. /package/dist/{atomStore-KSoFS3Jj.cjs → AmplitudeOperations-CNyxbBY6.cjs} +0 -0
  663. /package/dist/{atomStore-CZnUUsrr.js → AmplitudeOperations-Oa2efWtF.js} +0 -0
  664. /package/dist/{locators-fBXS_pxP.js → atomStore-BS6qtYZF.js} +0 -0
  665. /package/dist/{locators-0YYZu9n4.cjs → atomStore-BjRyLFEx.cjs} +0 -0
  666. /package/dist/{utilityTypes-8sETsYPk.js → types-DtTnp0o0.js} +0 -0
  667. /package/dist/{utilityTypes-COShxVir.cjs → types-a8gm_IaQ.cjs} +0 -0
  668. /package/dist/{variantInfo-orXoPBCU.cjs → types.cjs} +0 -0
  669. /package/dist/{variantInfo-DbVxA1yE.js → types.js} +0 -0
  670. /package/src/contexts/{featureFlagServiceContext.tsx → featureFlagServiceContext/featureFlagServiceContext.tsx} +0 -0
  671. /package/src/contexts/{graphqlContext.tsx → graphqlContext/graphqlContext.tsx} +0 -0
  672. /package/src/contexts/{shopifyUrlContext.tsx → shopifyUrlContext/shopifyUrlContext.tsx} +0 -0
  673. /package/src/contexts/{systemSettingsContext.tsx → systemSettingsContext/systemSettingsContext.tsx} +0 -0
  674. /package/src/contexts/{userIdentityContext.tsx → userIdentityContext/userIdentityContext.tsx} +0 -0
  675. /package/src/hooks/{useBlockBackButton.ts → BlockBackButton/useBlockBackButton.ts} +0 -0
  676. /package/src/hooks/{useCustomerSupportHandoff.ts → CustomerSupportHandoff/useCustomerSupportHandoff.ts} +0 -0
  677. /package/src/hooks/{useDebounce.ts → Debounce/useDebounce.ts} +0 -0
  678. /package/src/hooks/{useElementObserver.ts → ElementObserver/useElementObserver.ts} +0 -0
  679. /package/src/hooks/{useGrabAndScroll.ts → GrabAndScroll/useGrabAndScroll.ts} +0 -0
  680. /package/src/hooks/{useImageResolver.ts → ImageResolver/useImageResolver.ts} +0 -0
  681. /package/src/hooks/{useIntersection.ts → Intersection/useIntersection.ts} +0 -0
  682. /package/src/hooks/{useIsSmallScreen.ts → IsSmallScreen/useIsSmallScreen.ts} +0 -0
  683. /package/src/hooks/{useMessageFilter.ts → MessageFilter/useMessageFilter.ts} +0 -0
  684. /package/src/hooks/{useMessageScrollObserver.ts → MessageScrollObserver/useMessageScrollObserver.ts} +0 -0
  685. /package/src/hooks/{useSearchOperations.ts → SearchOperations/useSearchOperations.ts} +0 -0
  686. /package/src/hooks/{useSnapCalculator.ts → SnapCalculator/useSnapCalculator.ts} +0 -0
@@ -1,1609 +0,0 @@
1
- import { GetMerchantColorsQueryData } from "./index-Bmub8e38.cjs";
2
- import { AcceptableFormFieldType, ApiFormResponseAttributes, ApiPageResponseAttributes, OrderResponseAttributes as OrderResponseAttributes$1, PageResponseAttributes, ProductResponseAttributes, Response as Response$1, ReviewResponseAttributes, SearchProductFilterAttributes, SearchProductResponseAttributes, SearchResponseAttributes, TextResponseAttributes } from "./index-CiWEYzXl.cjs";
3
- import { CamelCasedPropertiesDeep, NonRecursiveType, UnknownArray, UpperCaseCharacters, WordSeparators } from "./index-CESxqFso.cjs";
4
- import { ChatState, SuggestionBarLocationForMetrics, TestProps } from "./test-types-CgVJtwUr.cjs";
5
- import { VariantInfo } from "./index-B0NW9KTj.cjs";
6
- import { Context, CustServiceAttachment, FormSubmittedAttributes, FormType, FulfillmentDisplayStatus, GenerationParams, OrderItemInfo, OrderResponseAttributes, OrganizationConfig, OrganizationSettings, OrganizationStatusEnum, PDPAttributes, PLPAttributes, PLPIdAttributes, PageVisitCategory, ProductSearchFilterResponseAttributes, ProductSearchResponse, ProductSearchResponseAttributes, QueryTypedAttributes, SearchAttributes, SearchResponseProduct, StatsigExperiment, StatsigFeatureGate, Suggestion, SuggestionClickedAttributes, SupportedEventProductCategory, UserEvent, UserEventCategory } from "@spiffy-ai/commerce-api-client";
7
-
8
- //#region src/application/models/cachedValue.d.ts
9
- interface CachedValue {
10
- value: unknown;
11
- expiry: number;
12
- }
13
- //#endregion
14
- //#region src/application/models/chatElementDisplayLocation.d.ts
15
- declare enum ChatElementDisplayLocation {
16
- IN_CHAT = "in_chat",
17
- CHAT_PREVIEW = "chat_preview",
18
- FLOATING_BUTTON = "floating_button",
19
- HELP_ME_CHOOSE = "help_me_choose",
20
- PLP_IMAGE_BANNER = "plp_image_banner",
21
- TOP_REVIEWS_SNIPPET = "top_reviews_snippet",
22
- BOTTOM_REVIEWS_SNIPPET = "bottom_reviews_snippet",
23
- BLOCK_BACK_BUTTON = "block_back_button",
24
- SWITCH_TO_AGENT = "switch_to_agent",
25
- CONVERSATIONAL_SEARCH = "conversational_search",
26
- GLOBAL_SEARCH_ENTRYPOINT = "global_search_entrypoint",
27
- SEARCH_NAV_ENTRYPOINT = "search_nav_entrypoint",
28
- SEARCH_PROMPT = "search_prompt",
29
- SEARCH_PROMPT_BUTTON = "search_prompt_button",
30
- PRODUCT_GRID = "product_grid",
31
- UNSPECIFIED = "unspecified",
32
- FILTER_MODAL = "filter_modal",
33
- PROMPT_CARD = "prompt_card",
34
- WINDOW_API_CALL = "window_api_call",
35
- }
36
- //#endregion
37
- //#region src/application/models/clientDetails.d.ts
38
- interface ClientDetails {
39
- os?: string;
40
- osVersion?: string;
41
- deviceBrand?: string;
42
- deviceManufacturer?: string;
43
- deviceModel?: string;
44
- carrier?: string;
45
- country?: string;
46
- region?: string;
47
- browser?: string;
48
- browserVersion?: string;
49
- browserIpAddress?: string;
50
- userAgent?: string;
51
- }
52
- //#endregion
53
- //#region src/application/models/colorsConfig.d.ts
54
- declare enum ColorNames {
55
- TextPrimary = "text-primary",
56
- TextSecondary = "text-secondary",
57
- TextAccent = "text-accent",
58
- TextLink = "text-link",
59
- TextLight = "text-light",
60
- BackgroundPrimary = "background-primary",
61
- BackgroundSecondary = "background-secondary",
62
- BackgroundSecondaryDark = "background-secondary-dark",
63
- BackgroundTertiary = "background-tertiary",
64
- BackgroundDark = "background-dark",
65
- BackgroundLight = "background-light",
66
- BackgroundSaturated = "background-saturated",
67
- BorderLight = "border-light",
68
- BorderMedium = "border-medium",
69
- BorderDark = "border-dark",
70
- BorderOutline = "border-outline",
71
- AccentPrimary = "accent-primary",
72
- AccentSecondary = "accent-secondary",
73
- }
74
- type ColorMapping = { [key in ColorNames]: string };
75
- declare const colorVar: (color: ColorNames) => string;
76
- //#endregion
77
- //#region src/application/models/conversationalSearchIds.d.ts
78
- type ConversationalSearchIds = {
79
- conversationalSearchEntrypointId?: string;
80
- conversationalSearchInputId?: string;
81
- conversationalSearchModalId?: string;
82
- };
83
- //#endregion
84
- //#region src/application/models/dataLayer.d.ts
85
- /**
86
- * Base interface for common properties across all ecommerce events
87
- */
88
- interface BaseEcommerceEvent {
89
- event: string;
90
- ecommerce: UAEcommerceData | GA4EcommerceData;
91
- }
92
- /**
93
- * Legacy universal analytics data. The actual payload contains more fields, but we
94
- * only need the ones listed below.
95
- */
96
- interface UAEcommerceData {
97
- add: {
98
- products: {
99
- name: string;
100
- category: string;
101
- price: string;
102
- quantity: string;
103
- }[];
104
- currencyCode: string;
105
- };
106
- }
107
- /**
108
- * Google Analytics 4 data. The actual payload contains more fields, but we
109
- * only need the ones listed below.
110
- */
111
- interface GA4EcommerceData {
112
- currency: string;
113
- items: {
114
- item_name: string;
115
- item_category: string;
116
- price: number;
117
- quantity: number;
118
- }[];
119
- }
120
- interface UAEcommerceEvent extends BaseEcommerceEvent {
121
- ecommerce: UAEcommerceData;
122
- }
123
- interface GA4EcommerceEvent extends BaseEcommerceEvent {
124
- ecommerce: GA4EcommerceData;
125
- }
126
- //#endregion
127
- //#region src/application/models/events.d.ts
128
- declare enum SpiffyEventName {
129
- WidgetOpen = "spiffy:widgetopen",
130
- WidgetClose = "spiffy:widgetclose",
131
- }
132
- //#endregion
133
- //#region src/application/models/featureGates.d.ts
134
- declare enum FeatureGates {
135
- IsClientSessionEnabled = "is_client_session_enabled",
136
- IsNewFeatureEnabled = "is_new_feature_enabled",
137
- IsFineTunedModel8b = "is_fine_tuned_model_8b",
138
- IsIntegratedCXEnabled = "is_integrated_cx_enabled",
139
- IsNonShapewearEnabled = "is_non_shapewear_enabled",
140
- IsImageBannerEnabled = "is_image_banner_enabled",
141
- IsOrderLookupEnabled = "is_order_lookup_enabled",
142
- IsSummarizeReviewsEnabled = "is_summarize_reviews_enabled",
143
- IsGlobalSearchEnabled = "is_global_search_enabled",
144
- IsImagePromptEnabled = "is_image_prompt_enabled",
145
- IsWatermarkEnabled = "is_watermark_enabled",
146
- IsInferenceRegion0 = "is_inference_region_0",
147
- IsGraphQLUIConfigsEnabled = "is_graphql_ui_configs_enabled",
148
- IsGraphQLPageConfigsEnabled = "is_graphql_page_configs_enabled",
149
- IsGraphQLComponentConfigsEnabled = "is_graphql_component_configs_enabled",
150
- IsChatVariantEnabled = "is_chat_variant_enabled",
151
- IsChatVariantAEnabled = "is_chat_variant_a_enabled",
152
- IsChatVariantBEnabled = "is_chat_variant_b_enabled",
153
- IsUserQueryAlwaysEnabled = "is_user_query_always_enabled",
154
- }
155
- //#endregion
156
- //#region src/types/customerService.d.ts
157
- declare enum CustomerServiceType {
158
- shopify = "shopify",
159
- gorgias = "gorgias",
160
- kustomer = "kustomer",
161
- groove = "groove",
162
- tidio = "tidio",
163
- zowie = "zowie",
164
- redo = "redo",
165
- gladly = "gladly",
166
- richpanel = "richpanel",
167
- zendesk = "zendesk",
168
- unsupported = "unsupported",
169
- }
170
- declare enum CustomerServiceIntegrationMode {
171
- none = "none",
172
- simple = "simple",
173
- full = "full",
174
- }
175
- //#endregion
176
- //#region src/merchants/gridInsertion.d.ts
177
- declare enum GridInsertionType {
178
- FIXED_1 = "fixed-1",
179
- FIXED_2 = "fixed-2",
180
- FIXED_3 = "fixed-3",
181
- FIXED_4 = "fixed-4",
182
- FIXED_5 = "fixed-5",
183
- FIXED_6 = "fixed-6",
184
- FIXED_7 = "fixed-7",
185
- FIXED_8 = "fixed-8",
186
- FIXED_9 = "fixed-9",
187
- FIXED_12 = "fixed-12",
188
- FIXED_13 = "fixed-13",
189
- ROW_1 = "row-1",
190
- ROW_2 = "row-2",
191
- ROW_3 = "row-3",
192
- ROW_4 = "row-4",
193
- }
194
- //#endregion
195
- //#region src/merchants/domInsertion.d.ts
196
- declare enum DOMInsertionType {
197
- AFTER = "after",
198
- BEFORE = "before",
199
- ADJACENT_AFTER_BEGIN = "adjacent-after-begin",
200
- ADJACENT_BEFORE_BEGIN = "adjacent-before-begin",
201
- ADJACENT_AFTER_END = "adjacent-after-end",
202
- ADJACENT_BEFORE_END = "adjacent-before-end",
203
- APPEND_CHILD = "append-child",
204
- NONE = "none",
205
- }
206
- //#endregion
207
- //#region src/application/models/api/orgAnalyticsConfig.d.ts
208
- interface OrgAnalyticsConfig {
209
- amplitude?: OrgAnalyticsAmplitudeConfig;
210
- customerService?: OrgAnalyticsCustomerServiceConfig;
211
- googleAnalytics?: OrgAnalyticsGoogleAnalyticsConfig;
212
- }
213
- interface OrgAnalyticsAmplitudeConfig {
214
- sessionReplayEnabled: boolean;
215
- sessionReplaySampleRate: number;
216
- trackingEnabled: boolean;
217
- }
218
- interface OrgAnalyticsCustomerServiceConfig {
219
- provider: string;
220
- }
221
- interface OrgAnalyticsGoogleAnalyticsConfig {
222
- measurementId?: string;
223
- }
224
- //#endregion
225
- //#region src/application/models/api/organizationConfig.d.ts
226
- interface OrganizationConfig$1 {
227
- createdAt: string;
228
- namespace: string;
229
- isLatest: boolean;
230
- version: string;
231
- updatedAt: string;
232
- config: OrgAnalyticsConfig;
233
- organizationId?: string;
234
- id?: string;
235
- }
236
- //#endregion
237
- //#region src/application/models/api/orgConfigResults.d.ts
238
- interface OrgConfigExperiment {
239
- group?: string;
240
- groupName?: string;
241
- name?: string;
242
- ruleId?: string;
243
- value?: Record<string, unknown>;
244
- }
245
- interface OrgConfigFeatureGate {
246
- groupName?: string;
247
- name?: string;
248
- ruleId?: string;
249
- value?: boolean;
250
- }
251
- interface Organization {
252
- id: string;
253
- displayName: string;
254
- domain: string;
255
- shortName: string;
256
- status: OrganizationStatusEnum;
257
- createdAt?: string;
258
- updatedAt?: string;
259
- }
260
- interface OrganizationSettings$1 {
261
- org: Organization;
262
- settings: Record<string, unknown>;
263
- }
264
- interface OrgConfig {
265
- configs: OrganizationConfig$1[];
266
- experiments: OrgConfigExperiment[];
267
- gates: OrgConfigFeatureGate[];
268
- org: OrganizationSettings$1;
269
- colorsConfig?: ColorMapping;
270
- frontendConfig?: FrontendConfig;
271
- }
272
- //#endregion
273
- //#region src/contexts/types.d.ts
274
- type ShowFloatingButtonOptions = "always" | "after-interaction-on-mobile-always-desktop" | "after-interaction-anywhere" | "never";
275
- type FloatingEntryPointConfig = {
276
- position: "bottom-left" | "middle-left" | "middle-right" | "bottom-right";
277
- expansionText?: {
278
- pdp: string;
279
- plp: string;
280
- };
281
- minimizedColor: string;
282
- expandedColor: string;
283
- textColor?: string;
284
- showOption: ShowFloatingButtonOptions;
285
- iconSVGSrc?: string;
286
- iconSize?: number;
287
- iconStrokeColor?: string;
288
- iconFillColor?: string;
289
- height?: number;
290
- fontSize?: number;
291
- };
292
- type WelcomeSectionVariant = "standard" | "outlined";
293
- type WelcomeSectionColorVariant = "standard" | "accent" | "brand" | "light";
294
- type WelcomeSectionConfig = {
295
- variant: WelcomeSectionVariant;
296
- colorVariant?: WelcomeSectionColorVariant;
297
- title?: string;
298
- subtitle?: string;
299
- iconName?: string;
300
- imageSrc?: string;
301
- };
302
- type ChatPreviewConfig = {
303
- variant: "flat" | "filled" | "outlined";
304
- largeProductComparison?: boolean;
305
- filledBackgroundColor: string;
306
- iconFillColor: string;
307
- buttonTextColor?: string;
308
- buttonTextSecondaryColor?: string;
309
- buttonTextHoverColor?: string;
310
- buttonBackgroundColor: string;
311
- buttonBackgroundHoverColor: string;
312
- buttonBorderColor?: string;
313
- buttonBorderHoverColor?: string;
314
- copies: {
315
- pdp: string[];
316
- plp: string[];
317
- };
318
- staticSuggestionCopies?: {
319
- pdp: string[];
320
- plp: string[];
321
- };
322
- staticPLPImages?: string[];
323
- footerConfig?: ChatPreviewFooterConfig;
324
- headerConfig?: ChatPreviewHeaderConfig;
325
- topMargin?: number;
326
- };
327
- type ChatPreviewHeaderConfig = {
328
- title?: string;
329
- imageSrc?: string;
330
- imageHeight?: number;
331
- sparklesColor?: string;
332
- fontSize?: string;
333
- iconWidth?: string;
334
- iconHeight?: string;
335
- };
336
- interface ChatPreviewFooterConfig {
337
- hasFade?: boolean;
338
- suggestionButtonVariant?: "dark" | "light" | "outlined";
339
- suggestionsBackground?: string;
340
- replyButtonIcon?: "send" | "magnifyingGlass" | "thinMagnifyingGlass" | "searchIcon";
341
- replyButtonText?: string;
342
- replyInputHasShadow?: boolean;
343
- replyInputHasBorder?: boolean;
344
- backgroundColor?: string;
345
- }
346
- type ProductReviewStyleVariant = "standard" | "bordered";
347
- type ProductReviewColorVariant = "neutral" | "brand" | "premium";
348
- interface ProductReviewConfig {
349
- styleVariant: ProductReviewStyleVariant;
350
- colorVariant: ProductReviewColorVariant;
351
- verifiedBuyerTitle: string;
352
- incentivizedReviewFlag?: boolean;
353
- }
354
- type PageCardVariant = "filled" | "outlined" | "minimal";
355
- type PageCardHoverVariant = "none" | "shadow" | "lift";
356
- type PageCardIconVariant = "primary" | "accent" | "background" | "none";
357
- type PageCardConfig = {
358
- variant: PageCardVariant;
359
- hoverVariant: PageCardHoverVariant;
360
- iconVariant: PageCardIconVariant;
361
- };
362
- type ProductCardVariant = "filled" | "bordered" | "minimal" | "transparentBordered";
363
- type ProductCardHoverVariant = "backgroundDark" | "none";
364
- type ProductCardLayoutVariant = "normal" | "tall" | "square";
365
- interface ProductCardConfig {
366
- variant: ProductCardVariant;
367
- hoverVariant: ProductCardHoverVariant;
368
- layoutVariant: ProductCardLayoutVariant;
369
- pricePrefix?: string;
370
- }
371
- type CSSwitchConfig = {
372
- variant: "attached" | "detached";
373
- backgroundColor: string;
374
- borderColor: string;
375
- selectedTextColor: string;
376
- selectedBackgroundColor?: string;
377
- unselectedTextColor: string;
378
- unselectedBackgroundColor?: string;
379
- supportTitle?: string;
380
- spiffyTitle?: string;
381
- spiffyTitleHasLogo?: boolean;
382
- };
383
- type ChatHeaderConfig = {
384
- collapsedColor: string;
385
- expandedColor: string;
386
- chevronColor: string;
387
- imageSrc?: string;
388
- icon?: React.FunctionComponent<React.SVGProps<SVGSVGElement>>;
389
- closeIcon?: React.FunctionComponent<React.SVGProps<SVGSVGElement>>;
390
- borderBottom?: string;
391
- headerBarHeightPartialView: number;
392
- headerBarHeightFullView: number;
393
- customerSupportSwitchConfig?: CSSwitchConfig;
394
- };
395
- type SimpleCustomerServiceIntegration = {
396
- integrationMode: CustomerServiceIntegrationMode;
397
- provider: CustomerServiceType;
398
- useUnifiedButton?: boolean;
399
- maxfileUploadSize?: number;
400
- };
401
- type FullCustomerServiceIntegration = {
402
- integrationMode: CustomerServiceIntegrationMode;
403
- provider: CustomerServiceType;
404
- useUnifiedButton?: boolean;
405
- chatEnabledDuringBusinessHours?: boolean;
406
- showNameInput?: boolean;
407
- formAiName?: string;
408
- welcomeTitle: string;
409
- welcomeDescription: string;
410
- showWelcomeOnForm?: boolean;
411
- contactSubjectOptions?: string[];
412
- getCustomWaitingMessage?: (name?: string) => string;
413
- withinBusinessHoursMessage?: string;
414
- withinBusinessHoursWaitingMessage?: string;
415
- outsideBusinessHoursMessage?: string;
416
- outsideBusinessHoursWaitingMessage?: string;
417
- withinBusinessHoursFormMessage?: string;
418
- outsideBusinessHoursFormMessage?: string;
419
- suggestedAIQuestions?: string[];
420
- businessHoursPolling?: number;
421
- maxfileUploadSize?: number;
422
- /**
423
- * @deprecated This is handled by the BE.
424
- */
425
- businessHoursStartUTC?: string;
426
- /**
427
- * @deprecated This is handled by the BE.
428
- */
429
- businessHoursEndUTC?: string;
430
- /**
431
- * @deprecated This is handled by the BE.
432
- */
433
- businessHoursTimezone?: string;
434
- showAISuggestionsWithinBusinessHours?: boolean;
435
- waitingMessagePosition?: "BEFORE_MESSAGES" | "AFTER_MESSAGES";
436
- legalMessage?: string;
437
- withinBusinessHoursInitialState?: ChatState;
438
- outsideBusinessHoursInitialState?: ChatState;
439
- withinBusinessHoursButtontext?: string;
440
- outsideBusinessHoursButtontext?: string;
441
- reopenChatMessage: string;
442
- };
443
- type CustomerServiceIntegration = SimpleCustomerServiceIntegration | FullCustomerServiceIntegration;
444
- type ConversationalSeach = {
445
- enabled?: boolean;
446
- replyInput?: ReplyInputConfig;
447
- suggestions?: string[];
448
- entrypointBgColor?: string;
449
- entrypointTextColor?: string;
450
- entrypointBtnColor?: string;
451
- entrypointBtnTextColor?: string;
452
- entrypointBtnBorderColor?: string;
453
- entrypointContainer?: string;
454
- entrypointTrigger?: string;
455
- productGridContainer?: string;
456
- generalSearchBtn?: string;
457
- pageContent?: string;
458
- searchContent?: string;
459
- sortingTitle?: string;
460
- selectionTitle?: string;
461
- sortingFont?: string;
462
- optionsFont?: string;
463
- sortingButtonText?: string;
464
- };
465
- type ChatMessageVariant = "standard" | "premium" | "accent";
466
- interface ChatMessageConfig {
467
- assistantChatTitle: string;
468
- variant: ChatMessageVariant;
469
- productLink: {
470
- variant: ProductLinkVariant;
471
- hoverVariant: ProductLinkHoverVariant;
472
- iconVariant: ProductLinkIconVariant;
473
- };
474
- }
475
- interface ReplyInputConfig {
476
- size?: "md" | "lg";
477
- sendIcon: "arrowUp" | "send" | "search";
478
- placeholder?: string;
479
- }
480
- interface PartialViewConfig {
481
- maxHeight: number;
482
- borderRadius?: string;
483
- }
484
- type ProductLinkIconVariant = "accentPrimary" | "backgroundPrimary" | "backgroundPrimaryDark" | "borderLight" | "backgroundSaturated";
485
- type ProductLinkVariant = "textLink";
486
- type ProductLinkHoverVariant = "backgroundDark";
487
- type SearchCardVariant = "backgroundPrimary" | "backgroundSecondary" | "backgroundSecondaryDark" | "backgroundLight" | "backgroundSaturated";
488
- type SuggestionButtonVariant = "outlined" | "outlinedLight" | "primary" | "secondary" | "tertiary" | "dark" | "darkAccent" | "darkPrimary" | "secondaryDark" | "secondaryAccent" | "transparent" | "transparentDark" | "lightDark";
489
- interface SuggestionButtonConfig {
490
- variant?: SuggestionButtonVariant;
491
- hoverVariant?: SuggestionButtonVariant;
492
- answerVariant?: SuggestionButtonVariant;
493
- borderRadius?: "sm" | "md" | "lg";
494
- }
495
- type NumRows = "default" | "alwaysOneRow" | "alwaysTwoRows" | "twoRowsOnMobile";
496
- interface AlphabeticFilterSorting {
497
- type: "alphabetic";
498
- }
499
- interface ProductCountFilterSorting {
500
- type: "productCount";
501
- }
502
- interface CustomFilterSorting {
503
- type: "custom";
504
- map: Record<string, number>;
505
- }
506
- type FilterSorting = AlphabeticFilterSorting | ProductCountFilterSorting | CustomFilterSorting;
507
- interface BaseFilterConfig {
508
- filterId: string;
509
- displayName: string;
510
- }
511
- interface DynamicFilterConfig extends BaseFilterConfig {
512
- type: "dynamic";
513
- attribute: string;
514
- sorting: FilterSorting;
515
- }
516
- interface PriceFilterConfig extends BaseFilterConfig {
517
- type: "price";
518
- bucketSize: number;
519
- }
520
- type FilterAttribute = DynamicFilterConfig | PriceFilterConfig;
521
- type SearchZeroStateVariant = "backgroundTertiary" | "backgroundDark" | "backgroundPrimary";
522
- type SearchZeroStateLayout = "input" | "icon";
523
- type SearchInputVariant = "standard";
524
- type SearchIconVariant = "thin" | "bold";
525
- type SearchFilterSidebarVariant = "darkButton" | "lightButton";
526
- type ProductGridVariant = "standard" | "square";
527
- type UserQueryButtonIcon = "magnifyingGlass" | "send" | "magnifyingGlassThin" | "sendArrow" | "searchIcon";
528
- interface UserQueryButtonConfig {
529
- variant?: "box" | "underlineLight" | "underlineDark";
530
- placeholderText?: string;
531
- icon: UserQueryButtonIcon;
532
- }
533
- interface TermsAndConditionsConfig {
534
- copy: string;
535
- link: string;
536
- linkText: string;
537
- }
538
- interface MerchantVariantSettings {
539
- dynamicVariants: {
540
- enabled: boolean;
541
- refreshInterval?: number;
542
- };
543
- }
544
- interface FloatingChatConfig {
545
- enableWatermark: boolean;
546
- userQueryInputEnabled: boolean;
547
- ignoreFirstModelResponse?: boolean;
548
- neverShowSingleProductCards?: boolean;
549
- termsAndConditionsConfig?: TermsAndConditionsConfig;
550
- suggestionButtonConfig?: SuggestionButtonConfig;
551
- replyInputConfig: ReplyInputConfig;
552
- }
553
- interface SearchConfig {
554
- enableGlobalSearch: boolean;
555
- searchFilterConfig: FilterAttribute[];
556
- redirectSearchResultsUrl?: string;
557
- additiveDynamicFilters?: boolean;
558
- }
559
- type OrgUIConfig = {
560
- shortName: string;
561
- id?: string;
562
- floatingEntrypointConfig?: FloatingEntryPointConfig;
563
- chatPreviewConfig?: ChatPreviewConfig;
564
- customerServiceIntegration: CustomerServiceIntegration;
565
- conversationalSearch?: ConversationalSeach;
566
- merchantOverrideCss?: string;
567
- hiddenElementSelectors?: string[];
568
- merchantVariantSettings?: MerchantVariantSettings;
569
- floatingChatConfig: FloatingChatConfig;
570
- searchConfig: SearchConfig;
571
- chatHeader: ChatHeaderConfig;
572
- stickyAgentSwitchSuggestion?: boolean;
573
- partialViewConfig: PartialViewConfig;
574
- welcomeSectionConfig?: WelcomeSectionConfig;
575
- productCardConfig?: ProductCardConfig;
576
- productReviewConfig?: ProductReviewConfig;
577
- pageCardConfig?: PageCardConfig;
578
- chatMessageConfig: ChatMessageConfig;
579
- };
580
- type InsertionPoint = {
581
- selector: string;
582
- selectionIndex?: number;
583
- insertionType: DOMInsertionType;
584
- };
585
- type URLTest = "shopify" | "null";
586
- type IdExtractor = "shopify-product-id" | "shopify-collection-id" | "shopify-product-variant-id" | "url-resolver-product-id" | "url-resolver-plp-id" | "null";
587
- declare enum CategoryExtractorType {
588
- VisitCategoryMap = "VisitCategoryMap",
589
- VisitCategoryDefault = "VisitCategoryDefault",
590
- }
591
- interface BaseCategoryExtractor<T extends CategoryExtractorType> {
592
- type: T;
593
- }
594
- interface VisitCategoryMap extends BaseCategoryExtractor<CategoryExtractorType.VisitCategoryMap> {
595
- map: { [key in PageVisitCategory]?: string[] };
596
- }
597
- interface VisitCategoryDefault extends BaseCategoryExtractor<CategoryExtractorType.VisitCategoryDefault> {
598
- value: PageVisitCategory;
599
- }
600
- type CategoryExtractor = VisitCategoryMap | VisitCategoryDefault;
601
- type WrappingElement = {
602
- className: string;
603
- element: string;
604
- insertionType: DOMInsertionType;
605
- };
606
- declare enum PageVariantTestType {
607
- ShopifyPLP = "ShopifyPLP",
608
- ShopifyPDP = "ShopifyPDP",
609
- PageCategory = "PageCategory",
610
- CatalogCategory = "CatalogCategory",
611
- TopCatalogCategory = "TopCatalogCategory",
612
- HasReviews = "HasReviews",
613
- InCollection = "InCollection",
614
- HasMerchantTag = "HasMerchantTag",
615
- FeatureGate = "FeatureGate",
616
- PlpId = "PlpId",
617
- QueryParam = "QueryParam",
618
- ProductId = "ProductId",
619
- UserHasInteracted = "UserHasInteracted",
620
- UserHasNotInteracted = "UserHasNotInteracted",
621
- isLoading = "isLoading",
622
- isProductComparison = "isProductComparison",
623
- Fallback = "Fallback",
624
- UrlResolver = "UrlResolver",
625
- Null = "null",
626
- }
627
- interface BasePageVariantTest<T extends PageVariantTestType> {
628
- testType: T;
629
- }
630
- interface TopCatalogCategory extends BasePageVariantTest<PageVariantTestType.TopCatalogCategory> {
631
- topCategory: string[];
632
- }
633
- interface CatalogCategoryTest extends BasePageVariantTest<PageVariantTestType.CatalogCategory> {
634
- category: SupportedEventProductCategory;
635
- }
636
- interface HasReviewsTest extends BasePageVariantTest<PageVariantTestType.HasReviews> {
637
- reviewMinimum?: number;
638
- }
639
- interface InCollectionTest extends BasePageVariantTest<PageVariantTestType.InCollection> {
640
- collections: string[];
641
- }
642
- interface HasMerchantTagTest extends BasePageVariantTest<PageVariantTestType.HasMerchantTag> {
643
- merchantTags: string[];
644
- }
645
- interface ShopifyPLPURLTest extends BasePageVariantTest<PageVariantTestType.ShopifyPLP> {}
646
- interface ShopifyPDPURLTest extends BasePageVariantTest<PageVariantTestType.ShopifyPDP> {}
647
- interface PageCategoryTest extends BasePageVariantTest<PageVariantTestType.PageCategory> {
648
- extractor: CategoryExtractor;
649
- }
650
- interface FeatureGateTest extends BasePageVariantTest<PageVariantTestType.FeatureGate> {
651
- featureGate: FeatureGates;
652
- }
653
- interface ProductIdTest extends BasePageVariantTest<PageVariantTestType.ProductId> {
654
- productIdExtractor: IdExtractor;
655
- productIds: string[];
656
- }
657
- interface PlpIdTest extends BasePageVariantTest<PageVariantTestType.PlpId> {
658
- plpIdExtractor: IdExtractor;
659
- plpIds: string[];
660
- }
661
- interface QueryParamTest extends BasePageVariantTest<PageVariantTestType.QueryParam> {
662
- queryParam: string;
663
- }
664
- interface UserHasInteractedTest extends BasePageVariantTest<PageVariantTestType.UserHasInteracted> {}
665
- interface UserHasNotInteractedTest extends BasePageVariantTest<PageVariantTestType.UserHasNotInteracted> {}
666
- interface IsLoadingTest extends BasePageVariantTest<PageVariantTestType.isLoading> {}
667
- interface IsProductComparison extends BasePageVariantTest<PageVariantTestType.isProductComparison> {}
668
- interface PageFallbackTest extends BasePageVariantTest<PageVariantTestType.Fallback> {}
669
- interface UrlResolverTest extends BasePageVariantTest<PageVariantTestType.UrlResolver> {}
670
- type PageVariantTest = PageCategoryTest | ShopifyPLPURLTest | ShopifyPDPURLTest | CatalogCategoryTest | TopCatalogCategory | HasReviewsTest | InCollectionTest | HasMerchantTagTest | FeatureGateTest | ProductIdTest | PlpIdTest | QueryParamTest | UserHasInteractedTest | UserHasNotInteractedTest | IsLoadingTest | IsProductComparison | PageFallbackTest | UrlResolverTest;
671
- /**
672
- * Configuration for the social proof embedded widget
673
- *
674
- * @param headerTitle - The title text to display in the widget header
675
- * @param staticSuggestions - A list of strings to display as suggestions in the widget
676
- * @param suggestionButtonVariantDefault - The variant of the suggestion button to display in the widget footer
677
- * @param suggestionButtonVariantAccent - The variant of the suggestion button to display in the widget body
678
- * @param staticImageIndex - Index of the imageUrl to use from the product response
679
- */
680
- interface SocialProofConfig {
681
- customerQuery: string;
682
- headerTitle: string;
683
- staticPLPImagesLayout?: "grid" | "horizontal";
684
- headerFontFamily?: string;
685
- staticPLPImageNames?: string[];
686
- staticImageIndex?: number;
687
- suggestionButtonStrings: string[];
688
- suggestionButtonVariantDefault: SuggestionButtonVariant;
689
- suggestionButtonVariantAccent?: SuggestionButtonVariant;
690
- suggestionButtonDataAttributes?: Record<string, string>;
691
- userQueryButtonConfig?: UserQueryButtonConfig;
692
- logoName?: string;
693
- }
694
- /**
695
- * Configuration for creating the mount point for a widget
696
- *
697
- * @param className - Optional class name to apply to the mount point. Tailwind classes are supported
698
- * and encouraged. Use this parameter to style the mounting container for the widget.
699
- */
700
- type WidgetMountingConfig = {
701
- mountingConfigId: string;
702
- containerId: string;
703
- testId: string;
704
- parentInsertionPoint?: InsertionPoint;
705
- insertionPoint: InsertionPoint;
706
- gridInsertionType?: GridInsertionType;
707
- wrappingElement?: WrappingElement;
708
- divCheckSelector?: string;
709
- suppressionSelector?: string;
710
- style?: Partial<CSSStyleDeclaration>;
711
- className?: string;
712
- dataAttributes?: Record<string, string>;
713
- };
714
- type StaticWidgetMounting = {
715
- mountingConfigId: string;
716
- widgetConfigId: string;
717
- };
718
- type DynamicWidgetMounting = {
719
- mountingConfigId: string;
720
- mountingPointWidgets: WidgetDisplayTests[];
721
- };
722
- type WidgetDisplayTests = {
723
- tests: PageVariantTest[];
724
- widgetConfigId: string;
725
- };
726
- type WidgetMounting = StaticWidgetMounting | DynamicWidgetMounting;
727
- declare enum WidgetType {
728
- ChatPreview = "ChatPreview",
729
- SocialProofV2 = "SocialProofV2",
730
- ChatPreviewV2 = "ChatPreviewV2",
731
- ChatPreviewIsLoading = "ChatPreviewIsLoading",
732
- ChatPreviewPostInteraction = "ChatPreviewPostInteraction",
733
- ChatPreviewProductComparison = "ChatPreviewProductComparison",
734
- SuggestionBar = "SuggestionBar",
735
- SuggestionBarV2 = "SuggestionBarV2",
736
- ImagePromptCard = "ImagePromptCard",
737
- ImageBanner = "ImageBanner",
738
- SingleImagePrompt = "SingleImagePrompt",
739
- SearchPrompt = "SearchPrompt",
740
- SearchZeroStateEntryPoint = "SearchZeroStateEntryPoint",
741
- SearchResultsEntryPoint = "SearchResultsEntryPoint",
742
- SearchOverlayHost = "SearchOverlayHost",
743
- NoOp = "NoOp",
744
- }
745
- type WidgetConfig = ChatPreviewWidgetConfig | SocialProofV2WidgetConfig | ChatPreviewV2WidgetConfig | ChatPreviewPostInteractionWidgetConfig | ChatPreviewIsLoadingWidgetConfig | ChatPreviewProductComparisonWidgetConfig | SuggestionBarWidgetV2Config | ImagePromptWidgetConfig | ImageBannerWidgetConfig | SingleImagePromptWidgetConfig | SearchPromptWidgetConfig | SearchEntryPointWidgetConfig | SearchResultsEntryPointWidgetConfig | SearchOverlayHostWidgetConfig | NoOpWidgetConfig;
746
- interface BaseWidgetConfig<T extends WidgetType> {
747
- widgetConfigId: string;
748
- type: T;
749
- contentId?: string;
750
- }
751
- interface ImageBannerWidgetConfig extends BaseWidgetConfig<WidgetType.ImageBanner> {
752
- imageSrc: string;
753
- title: string;
754
- subtitle: string;
755
- assistantMessage: string;
756
- }
757
- interface ChatPreviewWidgetConfig extends BaseWidgetConfig<WidgetType.ChatPreview> {
758
- variant: "filled" | "flat" | "outlined";
759
- addSeparators?: boolean;
760
- socialProofConfig?: SocialProofConfig;
761
- footerConfig?: ChatPreviewFooterConfig;
762
- }
763
- interface ChatPreviewHeaderV2Config {
764
- title?: string;
765
- imageSrc?: string;
766
- imageHeight?: number;
767
- }
768
- type SingleImageConfig = {
769
- layout: "single";
770
- imageIndex: number;
771
- };
772
- type MultiImageConfig = {
773
- layout: "grid" | "horizontal";
774
- imageNames: string[];
775
- };
776
- type SocialProofImageConfig = SingleImageConfig | MultiImageConfig;
777
- type ChatPreviewSuggestionButtonConfig = {
778
- buttonStrings: string[];
779
- accentButtonVariants?: {
780
- button: SuggestionButtonVariant;
781
- hover: SuggestionButtonVariant;
782
- };
783
- buttonVariants: {
784
- button: SuggestionButtonVariant;
785
- hover: SuggestionButtonVariant;
786
- };
787
- numRows?: NumRows;
788
- };
789
- type ChatPreviewAnimatedTextConfig = {
790
- leadingText: string;
791
- animatedStrings: string[];
792
- };
793
- type ChatPreviewVariant = {
794
- variant: "flat";
795
- } | {
796
- variant: "filled";
797
- backgroundFillColor: string;
798
- } | {
799
- variant: "outlined";
800
- };
801
- interface BaseChatPreviewConfig {
802
- headerConfig: ChatPreviewHeaderV2Config;
803
- suggestionButtonsConfig: ChatPreviewSuggestionButtonConfig;
804
- userQueryButtonConfig: UserQueryButtonConfig;
805
- chatPreviewVariant: ChatPreviewVariant;
806
- addSeparators?: boolean;
807
- }
808
- interface ChatPreviewPostInteractionWidgetConfig extends BaseWidgetConfig<WidgetType.ChatPreviewPostInteraction>, BaseChatPreviewConfig {
809
- chatPreviewVariant: ChatPreviewVariant;
810
- addSeparators?: boolean;
811
- }
812
- interface ChatPreviewIsLoadingWidgetConfig extends BaseWidgetConfig<WidgetType.ChatPreviewIsLoading>, BaseChatPreviewConfig {}
813
- interface ChatPreviewProductComparisonWidgetConfig extends BaseWidgetConfig<WidgetType.ChatPreviewProductComparison>, BaseChatPreviewConfig {
814
- useLargeProductComparison?: boolean;
815
- }
816
- interface ChatPreviewV2WidgetConfig extends BaseWidgetConfig<WidgetType.ChatPreviewV2>, BaseChatPreviewConfig {
817
- animatedTextConfig: ChatPreviewAnimatedTextConfig;
818
- }
819
- interface SocialProofV2WidgetConfig extends BaseWidgetConfig<WidgetType.SocialProofV2>, BaseChatPreviewConfig {
820
- customerQuery?: string;
821
- imageConfig: SocialProofImageConfig;
822
- }
823
- interface SuggestionBarWidgetV2Config extends BaseWidgetConfig<WidgetType.SuggestionBarV2> {
824
- metricDisplayLocation: ChatElementDisplayLocation;
825
- location: SuggestionBarLocationForMetrics;
826
- variant: SuggestionButtonVariant;
827
- hoverVariant: SuggestionButtonVariant;
828
- buttonTexts: {
829
- default: string[];
830
- productSpecific?: {
831
- [productId: string]: string[];
832
- };
833
- };
834
- boldFirstButton?: boolean;
835
- twoRowsOnMobile?: boolean;
836
- animationSpeed?: "standard" | "slow" | "none";
837
- buttonBorderRadius?: "sm" | "md" | "lg";
838
- }
839
- interface ImagePromptWidgetConfig extends BaseWidgetConfig<WidgetType.ImagePromptCard> {
840
- url: string;
841
- lightText?: boolean;
842
- title: string;
843
- subtitle: string[];
844
- staticSuggestionCopies: string[];
845
- userQueryButtonConfig: UserQueryButtonConfig;
846
- fallbackBackgroundColor?: string;
847
- }
848
- interface SingleImagePromptWidgetConfig extends BaseWidgetConfig<WidgetType.SingleImagePrompt> {
849
- title: string;
850
- staticSuggestionCopies: string[];
851
- userQueryButtonConfig: UserQueryButtonConfig;
852
- }
853
- interface SearchEntryPointWidgetConfig extends BaseWidgetConfig<WidgetType.SearchZeroStateEntryPoint> {
854
- searchZeroStateVariant: SearchZeroStateVariant;
855
- searchInputVariant: SearchInputVariant;
856
- searchIconVariant?: SearchIconVariant;
857
- searchIconSize?: number;
858
- suggestionButtonConfig: SuggestionButtonConfig;
859
- layout: SearchZeroStateLayout;
860
- searchBoxPlaceholder: string;
861
- animationSpeed?: "standard" | "slow" | "none";
862
- compactLabel?: string;
863
- initialSuggestions?: string[];
864
- usingPortal?: boolean;
865
- }
866
- interface NoOpWidgetConfig extends BaseWidgetConfig<WidgetType.NoOp> {}
867
- interface SearchOverlayHostWidgetConfig extends BaseWidgetConfig<WidgetType.SearchOverlayHost> {}
868
- interface SearchResultsEntryPointWidgetConfig extends BaseWidgetConfig<WidgetType.SearchResultsEntryPoint> {
869
- searchInputVariant: SearchInputVariant;
870
- searchFilterSidebarVariant: SearchFilterSidebarVariant;
871
- productGridVariant: ProductGridVariant;
872
- searchBoxPlaceholder: string;
873
- noResultsFoundText?: string;
874
- }
875
- interface WidgetHeaderProps extends TestProps {
876
- title?: string;
877
- logo?: string;
878
- logoHeight?: number;
879
- orgShortName: string;
880
- variant?: SearchPromptVariant;
881
- }
882
- interface UserQueryOptions {
883
- footerVariant?: "standard";
884
- replyButtonText?: string;
885
- replyButtonIcon?: "magnifyingGlass" | "send" | "thinMagnifyingGlass" | "ai-search";
886
- }
887
- type SearchPromptVariant = "primary";
888
- interface SearchPromptWidgetConfig extends BaseWidgetConfig<WidgetType.SearchPrompt> {
889
- variant: SearchPromptVariant;
890
- title: string;
891
- headerConfig: WidgetHeaderProps;
892
- suggestionButtons: {
893
- variant: SuggestionButtonVariant;
894
- hoverVariant: SuggestionButtonVariant;
895
- buttonTexts: string[];
896
- };
897
- footerConfig?: UserQueryOptions;
898
- }
899
- type PageVariantBase = {
900
- variantId: string;
901
- widgetMounting: WidgetMounting[];
902
- variantTests: PageVariantTest[];
903
- };
904
- type PLPPageVariant = PageVariantBase & {
905
- variantType: "plp";
906
- plpIdExtractor: IdExtractor;
907
- };
908
- type PDPPageVariant = PageVariantBase & {
909
- variantType: "pdp";
910
- parentProductIdExtractor?: IdExtractor;
911
- productIdExtractor: IdExtractor;
912
- };
913
- type VisitPageVariant = PageVariantBase & {
914
- variantType: "page_visit";
915
- };
916
- type OtherPageVariant = PageVariantBase & {
917
- variantType: "other";
918
- };
919
- type HomePageVariant = PageVariantBase & {
920
- variantType: "homepage";
921
- };
922
- type SearchPageVariant = PageVariantBase & {
923
- variantType: "search";
924
- };
925
- type PageVariantConfig = PLPPageVariant | PDPPageVariant | VisitPageVariant | OtherPageVariant | HomePageVariant | SearchPageVariant;
926
- type OrgPageConfig = {
927
- pageVariants: PageVariantConfig[];
928
- widgetConfigs: Record<string, WidgetConfig>;
929
- mountingConfigs: Record<string, WidgetMountingConfig>;
930
- };
931
- type OrgConfig$1 = OrgUIConfig;
932
- interface EnviveConfig {
933
- amplitudeApiKey?: string;
934
- dataResidency?: string;
935
- env?: string;
936
- baseUrl?: string;
937
- reactAppName?: string;
938
- cdnUrl?: string;
939
- contextSource?: string;
940
- orgLevelApiKey?: string;
941
- orgShortName?: string;
942
- identifyingPrefix?: string;
943
- featureOverrides?: Record<string, boolean>;
944
- variantUrlOverride?: string;
945
- variantInfoOverride?: any;
946
- show?: boolean;
947
- publicKey?: string;
948
- featureGates?: OrgConfigFeatureGate[];
949
- }
950
- //#endregion
951
- //#region src/application/models/frontendConfig.d.ts
952
- interface FrontendConfig {
953
- merchant_override_css?: string;
954
- pageVariants?: PageVariantConfig[];
955
- mountingConfigs?: Record<string, WidgetMountingConfig>;
956
- widgetConfigs?: Record<string, WidgetConfig>;
957
- uiConfigs?: Omit<OrgUIConfig, "merchantOverrideCss">;
958
- }
959
- //#endregion
960
- //#region src/application/models/googleAnalyticsEvents.d.ts
961
- declare enum GoogleAnalyticsEvents {
962
- ADD_TO_CART_v1 = "add_to_cart",
963
- ADD_TO_CART_v2 = "addToCart",
964
- }
965
- //#endregion
966
- //#region src/application/models/message.d.ts
967
- declare enum MessageRole {
968
- User = "user",
969
- Assistant = "assistant",
970
- }
971
- declare enum MessageType {
972
- Text = "text",
973
- SuggestionClicked = "suggestion_clicked",
974
- Product = "product",
975
- ProductSearch = "product_search",
976
- Review = "review",
977
- QueryTyped = "query_typed",
978
- Separator = "separator",
979
- Page = "page",
980
- Search = "search",
981
- Attachment = "attachment",
982
- CXAgentResponse = "cx_agent_response",
983
- Form = "form",
984
- Order = "order",
985
- ProductSearchFilter = "product_search_filter",
986
- }
987
- type Message = {
988
- id: string;
989
- role: MessageRole;
990
- createdAt: string;
991
- } & (TextMessageMetadata | QueryTypedMetadata | SuggestionMessageMetadata | ProductMessageMetadata | ProductSearchMessageMetadata | ReviewMessageMetadata | SeparatorMessageMetadata | PageMessageMetadata | SearchMessageMetadata | AttachmentMetadata | CXAgentResponseMetadata | FormMessageMetadata | OrderMessageMetadata | ProductSearchFilterMetadata);
992
- type AttachmentMetadata = {
993
- type: MessageType.Attachment;
994
- metadata: {
995
- message?: string;
996
- attachment: CustServiceAttachment[];
997
- };
998
- };
999
- type CXAgentResponseMetadata = {
1000
- type: MessageType.CXAgentResponse;
1001
- metadata: {
1002
- message: string;
1003
- agentName: string;
1004
- };
1005
- };
1006
- type TextMessageMetadata = {
1007
- type: MessageType.Text;
1008
- metadata: TextResponseAttributes['attributes'];
1009
- };
1010
- type QueryTypedMetadata = {
1011
- type: MessageType.QueryTyped;
1012
- metadata: TextResponseAttributes['attributes'];
1013
- };
1014
- type SuggestionMessageMetadata = {
1015
- type: MessageType.SuggestionClicked;
1016
- metadata: {
1017
- suggestionId: string;
1018
- suggestionContent: string;
1019
- };
1020
- };
1021
- type ProductMessageMetadata = {
1022
- type: MessageType.Product;
1023
- metadata: ProductResponseAttributes['attributes'];
1024
- };
1025
- type ProductSearchMessageMetadata = {
1026
- type: MessageType.ProductSearch;
1027
- metadata: SearchProductResponseAttributes['attributes'];
1028
- };
1029
- type ReviewMessageMetadata = {
1030
- type: MessageType.Review;
1031
- metadata: ReviewResponseAttributes['attributes'];
1032
- };
1033
- type SeparatorMessageMetadata = {
1034
- type: MessageType.Separator;
1035
- };
1036
- type PageMessageMetadata = {
1037
- type: MessageType.Page;
1038
- metadata: PageResponseAttributes['attributes'];
1039
- };
1040
- type SearchMessageMetadata = {
1041
- type: MessageType.Search;
1042
- metadata: SearchResponseAttributes['attributes'];
1043
- };
1044
- type ProductSearchFilterMetadata = {
1045
- type: MessageType.ProductSearchFilter;
1046
- metadata: SearchProductFilterAttributes['attributes'];
1047
- };
1048
- type FormField = {
1049
- key: string;
1050
- title: string;
1051
- type: AcceptableFormFieldType;
1052
- required: boolean;
1053
- format?: 'email';
1054
- value?: string;
1055
- };
1056
- type FormMessageMetadata = {
1057
- type: MessageType.Form;
1058
- metadata: {
1059
- formType?: FormType;
1060
- fields: FormField[];
1061
- };
1062
- };
1063
- type OrderMessageMetadata = {
1064
- type: MessageType.Order;
1065
- metadata: OrderResponseAttributes$1['attributes'];
1066
- };
1067
- //#endregion
1068
- //#region src/application/models/mobilePLPChatPlacementParameter.d.ts
1069
- interface MobilePLPChatPlacementParameter {
1070
- rowIndex: number;
1071
- }
1072
- //#endregion
1073
- //#region src/application/models/orgsEnum.d.ts
1074
- declare const OrgShortName: {
1075
- readonly Coterie: "coterie";
1076
- readonly ForLoveAndLemons: "for-love-and-lemons";
1077
- readonly Greenpan: "greenpan";
1078
- readonly JordanCraig: "jordan-craig";
1079
- readonly LarryAndSerges: "larry_and_serges";
1080
- readonly LeapsAndRebounds: "leaps-and-rebounds";
1081
- readonly MantraBrand: "mantra-brand";
1082
- readonly Spanx: "spanx";
1083
- readonly SpanxStaging: "staging-spanx";
1084
- readonly Supergoop: "supergoop";
1085
- readonly UniqueVintage: "unique-vintage";
1086
- readonly JackArcher: "jack-archer";
1087
- readonly SkinPerfection: "skin-perfection";
1088
- readonly LookOptic: "look-optic";
1089
- readonly FiveCbd: "five-cbd";
1090
- readonly SnapSupplements: "snap-supplements";
1091
- readonly Longevityrx: "longevityrx";
1092
- readonly VenaCbd: "vena-cbd";
1093
- readonly Medterra: "medterra";
1094
- readonly Modells: "modells";
1095
- readonly PressedFloral: "pressed-floral";
1096
- readonly KindredBravely: "kindred-bravely";
1097
- readonly WineEnthusiast: "wine-enthusiast";
1098
- readonly HomegrownCannabis: "homegrown-cannabis";
1099
- readonly DreamlandBaby: "dreamland-baby";
1100
- readonly Bandolier: "bandolier";
1101
- readonly WestonJonBoucher: "weston-jon-boucher";
1102
- readonly KutFromTheKloth: "kut-from-the-kloth";
1103
- readonly GrooveLife: "groove-life";
1104
- readonly Carpe: "carpe";
1105
- readonly WolfTactical: "wolf-tactical";
1106
- readonly WolfMattress: "wolfmattress";
1107
- readonly Default: "default";
1108
- };
1109
- //#endregion
1110
- //#region src/application/models/productExperiment.d.ts
1111
- declare enum ProductExperiment {
1112
- Default = "default",
1113
- }
1114
- //#endregion
1115
- //#region src/application/models/spanxTakeAQuizCtaParameter.d.ts
1116
- interface SpanxTakeAQuizCtaParameter {
1117
- text?: string;
1118
- value?: string;
1119
- }
1120
- //#endregion
1121
- //#region src/application/models/spiffyWidgets.d.ts
1122
- /**
1123
- * Enum of all widget names. These are widgets that are rendered and integrated into
1124
- * a merchant's website.
1125
- */
1126
- declare enum SpiffyWidgets {
1127
- ImageBanner = "image_banner",
1128
- ImagePromptCard = "image_prompt_card",
1129
- SingleImagePrompt = "single_image_prompt",
1130
- EmbeddedWidget = "embedded_widget",
1131
- FloatingButton = "floating_button",
1132
- SuggestionBar = "suggestion_bar",
1133
- SearchPrompt = "search_prompt",
1134
- GlobalSearch = "global_search",
1135
- SearchResults = "search_results",
1136
- GlobalSearchEntryPoint = "global_search_entry_point",
1137
- }
1138
- //#endregion
1139
- //#region src/application/models/supportedOrgs.d.ts
1140
- type BasicOrgInfoType = {
1141
- shortName: string;
1142
- name: string;
1143
- domain: string;
1144
- defaultProductId: string;
1145
- alwaysEnabledMerchants: boolean;
1146
- orgUIConfig: () => OrgUIConfig | undefined;
1147
- orgPageConfig: () => OrgPageConfig;
1148
- orgColors: () => ColorMapping | {};
1149
- };
1150
- declare const getOrgInfo: (orgShortName?: string) => Promise<BasicOrgInfoType>;
1151
- //#endregion
1152
- //#region src/application/models/api/context.d.ts
1153
- interface Context$1 extends CamelCasedPropertiesDeep<Context> {}
1154
- //#endregion
1155
- //#region src/application/models/api/generationParams.d.ts
1156
- interface GenerationParams$1 extends CamelCasedPropertiesDeep<GenerationParams> {}
1157
- //#endregion
1158
- //#region src/application/models/api/userEvent.d.ts
1159
- interface PDPAttributes$1 extends CamelCasedPropertiesDeep<PDPAttributes> {}
1160
- interface PLPAttributes$1 extends CamelCasedPropertiesDeep<PLPAttributes> {}
1161
- interface SearchAttributes$1 extends CamelCasedPropertiesDeep<SearchAttributes> {}
1162
- interface QueryTypedAttributes$1 extends CamelCasedPropertiesDeep<QueryTypedAttributes> {}
1163
- interface FormSubmittedAttributes$1 {
1164
- filledSchema: Record<string, unknown>;
1165
- formResponseId: string;
1166
- formType: FormType;
1167
- }
1168
- interface PageVisitAttributes {
1169
- url: string;
1170
- pageVisitCategory: PageVisitCategory;
1171
- }
1172
- interface SuggestionClickedAttributes$1 extends CamelCasedPropertiesDeep<SuggestionClickedAttributes> {}
1173
- type UserEventAttributes = PDPAttributes$1 | PLPAttributes$1 | QueryTypedAttributes$1 | SearchAttributes$1 | SuggestionClickedAttributes$1 | PageVisitAttributes;
1174
- interface PDPUserEvent {
1175
- category: UserEventCategory.PdpVisit | UserEventCategory.AddToCart;
1176
- attributes: PDPAttributes$1;
1177
- }
1178
- interface PLPUserEvent {
1179
- category: UserEventCategory.PlpVisit;
1180
- attributes: PLPAttributes$1;
1181
- }
1182
- interface QueryTypedUserEvent {
1183
- category: UserEventCategory.QueryTyped;
1184
- attributes: QueryTypedAttributes$1;
1185
- }
1186
- interface SearchUserEvent {
1187
- category: UserEventCategory.Search;
1188
- attributes: SearchAttributes$1;
1189
- }
1190
- interface SuggestionsClickedUserEvent {
1191
- category: UserEventCategory.SuggestionClicked;
1192
- attributes: SuggestionClickedAttributes$1;
1193
- }
1194
- interface AppLoadedUserEvent {
1195
- category: UserEventCategory.AppLoaded;
1196
- }
1197
- interface AppUnloadedEvent {
1198
- category: UserEventCategory.AppUnloaded;
1199
- }
1200
- interface PageVisitEvent {
1201
- category: UserEventCategory.PageVisit;
1202
- attributes: PageVisitAttributes;
1203
- }
1204
- interface FormSubmitted {
1205
- category: UserEventCategory.FormSubmitted;
1206
- attributes: FormSubmittedAttributes$1;
1207
- }
1208
- type UserEvent$1 = CamelCasedPropertiesDeep<Pick<UserEvent, 'event_id' | 'category' | 'created_at'>> & (SuggestionsClickedUserEvent | AppLoadedUserEvent | PDPUserEvent | QueryTypedUserEvent | SearchUserEvent | AppUnloadedEvent | PLPUserEvent | PageVisitEvent | FormSubmitted);
1209
- //#endregion
1210
- //#region src/application/models/api/nextMessageRequest.d.ts
1211
- interface NextMessageRequest$1 {
1212
- id: string;
1213
- context: Context$1;
1214
- userEvents?: UserEvent$1[];
1215
- featureFlags?: Record<string, boolean>;
1216
- generationParams?: GenerationParams$1;
1217
- }
1218
- //#endregion
1219
- //#region src/application/models/api/search.d.ts
1220
- interface ProductSearchResponse$1 extends CamelCasedPropertiesDeep<ProductSearchResponse> {}
1221
- interface ProductSearchResponseAttributes$1 extends CamelCasedPropertiesDeep<ProductSearchResponseAttributes> {}
1222
- interface SearchResult {
1223
- products: SearchResponseProduct[];
1224
- filters: string[];
1225
- generatedQuery?: string;
1226
- totalProductCount: number;
1227
- searchResponseId: string;
1228
- }
1229
- interface SearchParams {
1230
- query: string;
1231
- limit?: number;
1232
- }
1233
- //#endregion
1234
- //#region src/application/models/api/suggestion.d.ts
1235
- interface Suggestion$1 extends CamelCasedPropertiesDeep<Suggestion> {}
1236
- //#endregion
1237
- //#region src/application/models/api/supportedEventRequest.d.ts
1238
- interface SupportedEventRequest$1 {
1239
- id: string;
1240
- context: Context$1;
1241
- userEvent: UserEvent$1;
1242
- }
1243
- //#endregion
1244
- //#region src/application/models/graphql/queries/getMerchantOrgIdQuery.d.ts
1245
- declare const getMerchantOrgIdQuery = "\n query {\n me {\n org {\n id\n }\n }\n }\n";
1246
- //#endregion
1247
- //#region src/application/models/guards/isBaseEcommerceEvent.d.ts
1248
- /**
1249
- * Checks if an event is a base Google Analytics ecommerce event.
1250
- *
1251
- * @param data The event to check.
1252
- *
1253
- * @returns True if the event is a base ecommerce event, false otherwise.
1254
- */
1255
- declare const isBaseEcommerceEvent: (data: unknown) => data is BaseEcommerceEvent;
1256
- //#endregion
1257
- //#region src/application/models/guards/isGA4EcommerceEvent.d.ts
1258
- /**
1259
- * Checks if an event is a Google Analytics 4 ecommerce event.
1260
- *
1261
- * @param data The event to check.
1262
- *
1263
- * @returns True if the event is a GA4 ecommerce event, false otherwise.
1264
- */
1265
- declare const isGA4EcommerceEvent: (data: unknown) => data is GA4EcommerceEvent;
1266
- //#endregion
1267
- //#region src/application/models/guards/isLegacyUAEcommerceEvent.d.ts
1268
- /**
1269
- * Checks if an event is a legacy Universal Analytics ecommerce event.
1270
- *
1271
- * @param data The event to check.
1272
- *
1273
- * @returns True if the event is a legacy UA ecommerce event, false otherwise.
1274
- */
1275
- declare const isLegacyUAEcommerceEvent: (data: unknown) => data is UAEcommerceEvent;
1276
- //#endregion
1277
- //#region src/application/models/guards/isMobilePLPChatPlacementParameter.d.ts
1278
- interface MobilePlpChatPlacementParameter {
1279
- row_index: number;
1280
- }
1281
- declare const isMobilePLPChatPlacementParameter: (value: unknown) => value is MobilePlpChatPlacementParameter;
1282
- //#endregion
1283
- //#region src/application/models/guards/isSpanxTakeAQuizCtaParameter.d.ts
1284
- declare const isSpanxTakeAQuizCtaParameter: (value: unknown) => value is SpanxTakeAQuizCtaParameter;
1285
- //#endregion
1286
- //#region src/application/models/guards/isVariantInfo.d.ts
1287
- /**
1288
- * Type guard to check if an object is a valid VariantInfo.
1289
- *
1290
- * @param variantInfo - The unknown object to check.
1291
- *
1292
- * @returns True if the data is a valid VariantInfo object, false otherwise.
1293
- */
1294
- declare const isVariantInfo: (variantInfo: unknown) => variantInfo is VariantInfo;
1295
- //#endregion
1296
- //#region src/application/models/guards/utils.d.ts
1297
- /**
1298
- * Checks if an object has a property of a specific type
1299
- *
1300
- * @param obj - The object to check
1301
- * @param prop - The property name to check
1302
- * @param type - The expected type of the property
1303
- * @param isOptional - Whether the property is optional (defaults to false)
1304
- *
1305
- * @returns boolean indicating if the object has the property of the specified type
1306
- */
1307
- declare const hasPropertyOfType: <T extends object>(obj: unknown, prop: keyof T, type: "string" | "number" | "boolean" | "object" | "array", isOptional?: boolean) => obj is T;
1308
- //#endregion
1309
- //#region src/application/models/guards/api/isApiFormResponse.d.ts
1310
- /**
1311
- * Type guard to check if the provided data has the all of the properties (with the correct types) of
1312
- * a FormResponseAttribute
1313
- *
1314
- * @param data - The data to check
1315
- *
1316
- * @returns true if the data has the correct properties, false otherwise
1317
- */
1318
- declare const isApiFormResponseAttributes: (data: unknown) => data is ApiFormResponseAttributes;
1319
- //#endregion
1320
- //#region src/application/models/guards/api/isApiFormSubmittedResponseAttributes.d.ts
1321
- declare const isApiFormSubmittedResponseAttributes: (data: unknown) => data is FormSubmittedAttributes;
1322
- //#endregion
1323
- //#region src/application/models/guards/api/isApiOrderResponseAttributes.d.ts
1324
- interface ApiOrderItemInfo extends Omit<OrderItemInfo, 'delivered_at' | 'estimated_delivery_at' | 'in_transit_at'> {
1325
- delivered_at?: string;
1326
- estimated_delivery_at?: string;
1327
- in_transit_at?: string;
1328
- }
1329
- interface ApiOrderResponseAttributes extends Omit<OrderResponseAttributes, 'created_at' | 'latest_event_date' | 'line_items'> {
1330
- created_at: string;
1331
- latest_event_date: string;
1332
- line_items: ApiOrderItemInfo[];
1333
- }
1334
- declare const isApiOrderResponseAttributes: (data: unknown) => data is ApiOrderResponseAttributes;
1335
- //#endregion
1336
- //#region src/application/models/guards/api/isApiOrganizationConfig.d.ts
1337
- interface ApiOrgAnalyticsConfigAmplitude {
1338
- session_replay_enabled: boolean;
1339
- session_replay_sample_rate: number;
1340
- tracking_enabled: boolean;
1341
- }
1342
- interface ApiOrgAnalyticsConfigCustomerService {
1343
- provider: string;
1344
- }
1345
- interface ApiOrgAnalyticsConfigGoogleAnalytics {
1346
- measurement_id: string;
1347
- }
1348
- interface ApiOrgAnalyticsConfig {
1349
- amplitude?: ApiOrgAnalyticsConfigAmplitude;
1350
- customer_service?: ApiOrgAnalyticsConfigCustomerService;
1351
- google_analytics?: ApiOrgAnalyticsConfigGoogleAnalytics;
1352
- }
1353
- interface ApiOrganizationConfig extends OrganizationConfig {
1354
- config: ApiOrgAnalyticsConfig;
1355
- }
1356
- /**
1357
- *
1358
- * @param data
1359
- * @returns
1360
- */
1361
- declare const isApiOrganizationConfig: (data: unknown) => data is ApiOrganizationConfig;
1362
- //#endregion
1363
- //#region src/application/models/guards/api/isApiOrgConfigResults.d.ts
1364
- interface ApiOrgConfigResults {
1365
- configs: ApiOrganizationConfig[];
1366
- experiments: StatsigExperiment[];
1367
- gates: StatsigFeatureGate[];
1368
- org: OrganizationSettings;
1369
- }
1370
- /**
1371
- *
1372
- * @param data
1373
- * @returns
1374
- */
1375
- declare const isApiOrgConfigResults: (data: unknown) => data is Required<ApiOrgConfigResults>;
1376
- //#endregion
1377
- //#region src/application/models/guards/api/isApiPageResponseAttributes.d.ts
1378
- declare const isApiPageResponseAttributes: (obj: unknown) => obj is ApiPageResponseAttributes;
1379
- //#endregion
1380
- //#region src/application/models/guards/api/isApiPLPEventAttributes.d.ts
1381
- declare const isApiPLPIdAttribute: (data: unknown) => data is PLPIdAttributes;
1382
- declare const isApiPLPEventAttributes: (data: unknown) => data is PLPAttributes;
1383
- //#endregion
1384
- //#region src/application/models/guards/api/isApiProductSearchFilterAttributes.d.ts
1385
- declare const isApiProductSearchFilterResponseAttributes: (attributes: unknown) => attributes is ProductSearchFilterResponseAttributes;
1386
- //#endregion
1387
- //#region src/application/models/guards/graphQL/isGraphQLColorsConfig.d.ts
1388
- declare const isGraphQLColorsConfig: (data: unknown) => data is GetMerchantColorsQueryData;
1389
- //#endregion
1390
- //#region src/application/models/utilityTypes/delimiterCase.d.ts
1391
- type UpperCaseToLowerCase<T extends string> = T extends Uppercase<T> ? Lowercase<T> : T;
1392
- type SplitIncludingDelimiters_<Source extends string, Delimiter extends string> = Source extends '' ? [] : Source extends `${infer FirstPart}${Delimiter}${infer SecondPart}` ? Source extends `${FirstPart}${infer UsedDelimiter}${SecondPart}` ? UsedDelimiter extends Delimiter ? Source extends `${infer FirstPart}${UsedDelimiter}${infer SecondPart}` ? [...SplitIncludingDelimiters<FirstPart, Delimiter>, UsedDelimiter, ...SplitIncludingDelimiters<SecondPart, Delimiter>] : never : never : never : [Source];
1393
- /**
1394
- * Unlike a simpler split, this one includes the delimiter splitted on in the resulting array literal. This is to enable splitting on, for example, upper-case characters.
1395
- *
1396
- * @category Template literal
1397
- */
1398
- type SplitIncludingDelimiters<Source extends string, Delimiter extends string> = SplitIncludingDelimiters_<UpperCaseToLowerCase<Source>, Delimiter>;
1399
- /**
1400
- *Format a specific part of the splitted string literal that `StringArrayToDelimiterCase<>` fuses together, ensuring desired casing.
1401
- *
1402
- *@see StringArrayToDelimiterCase
1403
- */
1404
- type StringPartToDelimiterCase<StringPart extends string, Start extends boolean, UsedWordSeparators extends string, UsedUpperCaseCharacters extends string, Delimiter extends string> = StringPart extends UsedWordSeparators ? Delimiter : Start extends true ? Lowercase<StringPart> : StringPart extends UsedUpperCaseCharacters ? `${Delimiter}${Lowercase<StringPart>}` : StringPart;
1405
- /**
1406
- * Takes the result of a splitted string literal and recursively concatenates it together into the desired casing.
1407
- *
1408
- * It receives `UsedWordSeparators` and `UsedUpperCaseCharacters` as input to ensure it's fully encapsulated.
1409
- *
1410
- * @see SplitIncludingDelimiters
1411
- */
1412
- type StringArrayToDelimiterCase<Parts extends readonly any[], Start extends boolean, UsedWordSeparators extends string, UsedUpperCaseCharacters extends string, Delimiter extends string> = Parts extends [`${infer FirstPart}`, ...infer RemainingParts] ? `${StringPartToDelimiterCase<FirstPart, Start, UsedWordSeparators, UsedUpperCaseCharacters, Delimiter>}${StringArrayToDelimiterCase<RemainingParts, false, UsedWordSeparators, UsedUpperCaseCharacters, Delimiter>}` : Parts extends [string] ? string : '';
1413
- /**
1414
- * Convert a string literal to a custom string delimiter casing.
1415
- *
1416
- * This can be useful when, for example, converting a camel-cased object property to an oddly cased one.
1417
- *
1418
- * @see KebabCase
1419
- * @see SnakeCase
1420
- *
1421
- * @example
1422
- * ```
1423
- * import type {DelimiterCase} from 'type-fest';
1424
- *
1425
- * // Simple
1426
- *
1427
- * const someVariable: DelimiterCase<'fooBar', '#'> = 'foo#bar';
1428
- *
1429
- * // Advanced
1430
- *
1431
- * type OddlyCasedProperties<T> = {
1432
- * [K in keyof T as DelimiterCase<K, '#'>]: T[K]
1433
- * };
1434
- *
1435
- * interface SomeOptions {
1436
- * dryRun: boolean;
1437
- * includeFile: string;
1438
- * foo: number;
1439
- * }
1440
- *
1441
- * const rawCliOptions: OddlyCasedProperties<SomeOptions> = {
1442
- * 'dry#run': true,
1443
- * 'include#file': 'bar.js',
1444
- * foo: 123
1445
- * };
1446
- * ```
1447
- *
1448
- * @category Change case
1449
- * @category Template literal
1450
- */
1451
- type DelimiterCase<Value, Delimiter extends string> = string extends Value ? Value : Value extends string ? StringArrayToDelimiterCase<SplitIncludingDelimiters<Value, WordSeparators | UpperCaseCharacters>, true, WordSeparators, UpperCaseCharacters, Delimiter> : Value;
1452
- //#endregion
1453
- //#region src/application/models/utilityTypes/delimiterCasedPropertiesDeep.d.ts
1454
- /**
1455
- * Convert object properties to delimiter case recursively.
1456
- *
1457
- * This can be useful when, for example, converting some API types from a different style.
1458
- *
1459
- * @see DelimiterCase
1460
- * @see DelimiterCasedProperties
1461
- *
1462
- * @example
1463
- * ```
1464
- * import type {DelimiterCasedPropertiesDeep} from 'type-fest';
1465
- *
1466
- * interface User {
1467
- * userId: number;
1468
- * userName: string;
1469
- * }
1470
- *
1471
- * interface UserWithFriends {
1472
- * userInfo: User;
1473
- * userFriends: User[];
1474
- * }
1475
- *
1476
- * const result: DelimiterCasedPropertiesDeep<UserWithFriends, '-'> = {
1477
- * 'user-info': {
1478
- * 'user-id': 1,
1479
- * 'user-name': 'Tom',
1480
- * },
1481
- * 'user-friends': [
1482
- * {
1483
- * 'user-id': 2,
1484
- * 'user-name': 'Jerry',
1485
- * },
1486
- * {
1487
- * 'user-id': 3,
1488
- * 'user-name': 'Spike',
1489
- * },
1490
- * ],
1491
- * };
1492
- * ```
1493
- *
1494
- * @category Change case
1495
- * @category Template literal
1496
- * @category Object
1497
- */
1498
- type DelimiterCasedPropertiesDeep<Value, Delimiter extends string> = Value extends NonRecursiveType ? Value : Value extends UnknownArray ? DelimiterCasedPropertiesArrayDeep<Value, Delimiter> : Value extends Set<infer U> ? Set<DelimiterCasedPropertiesDeep<U, Delimiter>> : { [K in keyof Value as DelimiterCase<K, Delimiter>]: DelimiterCasedPropertiesDeep<Value[K], Delimiter> };
1499
- type DelimiterCasedPropertiesArrayDeep<Value extends UnknownArray, Delimiter extends string> = Value extends [] ? [] : Value extends [infer U, ...infer V] ? [DelimiterCasedPropertiesDeep<U, Delimiter>, ...DelimiterCasedPropertiesDeep<V, Delimiter>] : Value extends readonly [infer U, ...infer V] ? readonly [DelimiterCasedPropertiesDeep<U, Delimiter>, ...DelimiterCasedPropertiesDeep<V, Delimiter>] : Value extends readonly [...infer U, infer V] ? [...DelimiterCasedPropertiesDeep<U, Delimiter>, DelimiterCasedPropertiesDeep<V, Delimiter>] : Value extends readonly [...infer U, infer V] ? readonly [...DelimiterCasedPropertiesDeep<U, Delimiter>, DelimiterCasedPropertiesDeep<V, Delimiter>] : Value extends Array<infer U> ? Array<DelimiterCasedPropertiesDeep<U, Delimiter>> : Value extends ReadonlyArray<infer U> ? ReadonlyArray<DelimiterCasedPropertiesDeep<U, Delimiter>> : never;
1500
- //#endregion
1501
- //#region src/application/models/utilityTypes/snakeCasedPropertiesDeep.d.ts
1502
- /**
1503
- * Convert object properties to snake case recursively.
1504
- *
1505
- * This can be useful when, for example, converting some API types from a different style.
1506
- *
1507
- * @see SnakeCase
1508
- * @see SnakeCasedProperties
1509
- *
1510
- * @example
1511
- * ```
1512
- * import type {SnakeCasedPropertiesDeep} from 'type-fest';
1513
- *
1514
- * interface User {
1515
- * userId: number;
1516
- * userName: string;
1517
- * }
1518
- *
1519
- * interface UserWithFriends {
1520
- * userInfo: User;
1521
- * userFriends: User[];
1522
- * }
1523
- *
1524
- * const result: SnakeCasedPropertiesDeep<UserWithFriends> = {
1525
- * user_info: {
1526
- * user_id: 1,
1527
- * user_name: 'Tom',
1528
- * },
1529
- * user_friends: [
1530
- * {
1531
- * user_id: 2,
1532
- * user_name: 'Jerry',
1533
- * },
1534
- * {
1535
- * user_id: 3,
1536
- * user_name: 'Spike',
1537
- * },
1538
- * ],
1539
- * };
1540
- * ```
1541
- *
1542
- * @category Change case
1543
- * @category Template literal
1544
- * @category Object
1545
- */
1546
- type SnakeCasedPropertiesDeep<Value> = DelimiterCasedPropertiesDeep<Value, '_'>;
1547
- //#endregion
1548
- //#region src/application/models/utils/snakeToCamelTransformer.d.ts
1549
- /**
1550
- * Generic utility to transform snake_case object keys to camelCase at runtime.
1551
- * This is the runtime equivalent of the CamelCasedPropertiesDeep type utility.
1552
- */
1553
- /**
1554
- * Recursively transforms all object keys from snake_case to camelCase
1555
- */
1556
- declare const transformSnakeToCamel: (obj: unknown) => unknown;
1557
- /**
1558
- * Recursively transforms all object keys from camelCase to snake_case
1559
- */
1560
- declare const transformCamelToSnake: (obj: unknown) => unknown;
1561
- //#endregion
1562
- //#region src/application/models/utils/stringToFulfillmentDisplayStatusEnumValue.d.ts
1563
- /**
1564
- * Converts a string to a FulfillmentDisplayStatus enum value.
1565
- *
1566
- * @param status - The string to convert.
1567
- *
1568
- * @returns The FulfillmentDisplayStatus enum value or undefined if the string
1569
- * does not map to a valid enum
1570
- */
1571
- declare const stringToFulfillmentDisplayStatusEnumValue: (status: string) => FulfillmentDisplayStatus | undefined;
1572
- //#endregion
1573
- //#region src/application/models/validators/validateGraphQLColorsConfig.d.ts
1574
- declare const validateGraphQLColorsConfig: (data: unknown) => ColorMapping | undefined;
1575
- //#endregion
1576
- //#region src/application/models/validators/validateGraphQLFrontendConfig.d.ts
1577
- declare const validateAndTransformPageVariants: (config: Record<string, unknown>) => PageVariantConfig;
1578
- declare const validateAndTransformMountingConfig: (config: Record<string, unknown>, configKey: string) => WidgetMountingConfig;
1579
- declare const validateAndTransformWidgetConfig: (config: Record<string, unknown>, configKey: string) => WidgetConfig;
1580
- declare const validateGraphQLFrontendConfig: (data: unknown) => FrontendConfig | undefined;
1581
- //#endregion
1582
- //#region src/application/models/validators/validateGraphQLOrgId.d.ts
1583
- declare const validateGraphQLOrgId: (data: unknown) => string | undefined;
1584
- //#endregion
1585
- //#region src/application/models/validators/validateMobilePLPChatPlacementParameter.d.ts
1586
- declare const validateMobilePLPChatPlacementParameter: (value: unknown) => MobilePLPChatPlacementParameter | undefined;
1587
- //#endregion
1588
- //#region src/application/models/validators/validateOrganizationConfig.d.ts
1589
- declare const validateOrganizationConfig: (data: unknown) => OrganizationConfig$1 | undefined;
1590
- //#endregion
1591
- //#region src/application/models/validators/validateOrgConfigResults.d.ts
1592
- /**
1593
- *
1594
- * @param data
1595
- * @returns
1596
- */
1597
- declare const validateOrgConfigResults: (data: unknown) => OrgConfig | undefined;
1598
- //#endregion
1599
- //#region src/application/models/validators/validateResponse.d.ts
1600
- declare const validateResponse: (data: unknown) => Response$1 | undefined;
1601
- //#endregion
1602
- //#region src/application/models/validators/validateSuggestion.d.ts
1603
- declare const validateSuggestion: (data: unknown) => Suggestion$1 | undefined;
1604
- //#endregion
1605
- //#region src/application/models/validators/validateUserEvent.d.ts
1606
- declare const validateUserEvent: (data: unknown) => UserEvent$1 | undefined;
1607
- //#endregion
1608
- export { ApiOrderItemInfo, ApiOrderResponseAttributes, ApiOrganizationConfig, AppLoadedUserEvent, AppUnloadedEvent, BaseEcommerceEvent, BasicOrgInfoType, type CachedValue, type CategoryExtractor, CategoryExtractorType, ChatElementDisplayLocation, type ChatMessageConfig, type ChatMessageVariant, type ChatPreviewConfig, type ChatPreviewFooterConfig, type ChatPreviewHeaderConfig, type ChatPreviewHeaderV2Config, type ChatPreviewIsLoadingWidgetConfig, type ChatPreviewPostInteractionWidgetConfig, type ChatPreviewProductComparisonWidgetConfig, type ChatPreviewSuggestionButtonConfig, type ChatPreviewV2WidgetConfig, type ChatPreviewVariant, type ChatPreviewWidgetConfig, type ClientDetails, type ColorMapping, ColorNames, Context$1 as Context, ConversationalSearchIds, type CustomerServiceIntegration, DelimiterCase, DelimiterCasedPropertiesDeep, type DynamicWidgetMounting, EnviveConfig, FeatureGates, FilterAttribute, type FloatingEntryPointConfig, FormField, FormSubmitted, FormSubmittedAttributes$1 as FormSubmittedAttributes, FrontendConfig, type FullCustomerServiceIntegration, GA4EcommerceEvent, GenerationParams$1 as GenerationParams, GoogleAnalyticsEvents, type HomePageVariant, type IdExtractor, type ImageBannerWidgetConfig, type ImagePromptWidgetConfig, type InsertionPoint, Message, MessageRole, MessageType, MobilePLPChatPlacementParameter, type MultiImageConfig, NextMessageRequest$1 as NextMessageRequest, type NoOpWidgetConfig, type NumRows, OrgAnalyticsAmplitudeConfig, OrgAnalyticsConfig, OrgAnalyticsCustomerServiceConfig, OrgAnalyticsGoogleAnalyticsConfig, OrgConfig$1 as OrgConfig, OrgConfig as OrgConfig$1, OrgConfigExperiment, OrgConfigFeatureGate, OrgPageConfig, OrgShortName, type OrgUIConfig, Organization, OrganizationConfig$1 as OrganizationConfig, OrganizationSettings$1 as OrganizationSettings, type OtherPageVariant, PDPAttributes$1 as PDPAttributes, type PDPPageVariant, PDPUserEvent, PLPAttributes$1 as PLPAttributes, type PLPPageVariant, PLPUserEvent, type PageCardConfig, type PageCardHoverVariant, type PageCardIconVariant, type PageCardVariant, PageVariantConfig, PageVariantTest, PageVariantTestType, PageVisitAttributes, PageVisitEvent, type ProductCardConfig, type ProductCardHoverVariant, type ProductCardLayoutVariant, type ProductCardVariant, ProductExperiment, ProductGridVariant, type ProductLinkHoverVariant, type ProductLinkIconVariant, type ProductLinkVariant, ProductMessageMetadata, type ProductReviewColorVariant, type ProductReviewConfig, type ProductReviewStyleVariant, ProductSearchMessageMetadata, ProductSearchResponse$1 as ProductSearchResponse, ProductSearchResponseAttributes$1 as ProductSearchResponseAttributes, QueryTypedAttributes$1 as QueryTypedAttributes, QueryTypedUserEvent, SearchAttributes$1 as SearchAttributes, type SearchCardVariant, type SearchEntryPointWidgetConfig, SearchFilterSidebarVariant, SearchIconVariant, SearchInputVariant, type SearchOverlayHostWidgetConfig, type SearchPageVariant, SearchParams, type SearchPromptVariant, type SearchPromptWidgetConfig, SearchResult, type SearchResultsEntryPointWidgetConfig, SearchUserEvent, SearchZeroStateLayout, SearchZeroStateVariant, type ShowFloatingButtonOptions, type SingleImagePromptWidgetConfig, SnakeCasedPropertiesDeep, type SocialProofConfig, type SocialProofV2WidgetConfig, SpanxTakeAQuizCtaParameter, SpiffyEventName, SpiffyWidgets, SplitIncludingDelimiters, type StaticWidgetMounting, Suggestion$1 as Suggestion, type SuggestionBarWidgetV2Config, type SuggestionButtonConfig, type SuggestionButtonVariant, SuggestionClickedAttributes$1 as SuggestionClickedAttributes, SuggestionsClickedUserEvent, SupportedEventRequest$1 as SupportedEventRequest, UAEcommerceEvent, type URLTest, UserEvent$1 as UserEvent, UserEventAttributes, type UserQueryButtonConfig, type UserQueryButtonIcon, UserQueryOptions, type VisitPageVariant, type WelcomeSectionColorVariant, type WelcomeSectionConfig, type WelcomeSectionVariant, type WidgetConfig, type WidgetDisplayTests, WidgetHeaderProps, type WidgetMounting, WidgetMountingConfig, WidgetType, type WrappingElement, colorVar, getMerchantOrgIdQuery, getOrgInfo, hasPropertyOfType, isApiFormResponseAttributes, isApiFormSubmittedResponseAttributes, isApiOrderResponseAttributes, isApiOrgConfigResults, isApiOrganizationConfig, isApiPLPEventAttributes, isApiPLPIdAttribute, isApiPageResponseAttributes, isApiProductSearchFilterResponseAttributes, isBaseEcommerceEvent, isGA4EcommerceEvent, isGraphQLColorsConfig, isLegacyUAEcommerceEvent, isMobilePLPChatPlacementParameter, isSpanxTakeAQuizCtaParameter, isVariantInfo, stringToFulfillmentDisplayStatusEnumValue, transformCamelToSnake, transformSnakeToCamel, validateAndTransformMountingConfig, validateAndTransformPageVariants, validateAndTransformWidgetConfig, validateGraphQLColorsConfig, validateGraphQLFrontendConfig, validateGraphQLOrgId, validateMobilePLPChatPlacementParameter, validateOrgConfigResults, validateOrganizationConfig, validateResponse, validateSuggestion, validateUserEvent };
1609
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtRFR1MlgtWVMuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jYWNoZWRWYWx1ZS5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbi5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jbGllbnREZXRhaWxzLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2NvbG9yc0NvbmZpZy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb252ZXJzYXRpb25hbFNlYXJjaElkcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9kYXRhTGF5ZXIuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZXZlbnRzLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2ZlYXR1cmVHYXRlcy5kLnRzIiwiLi4vc3JjL3R5cGVzL2N1c3RvbWVyU2VydmljZS5kLnRzIiwiLi4vc3JjL21lcmNoYW50cy9ncmlkSW5zZXJ0aW9uLmQudHMiLCIuLi9zcmMvbWVyY2hhbnRzL2RvbUluc2VydGlvbi5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvb3JnQW5hbHl0aWNzQ29uZmlnLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9vcmdhbml6YXRpb25Db25maWcuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0NvbmZpZ1Jlc3VsdHMuZC50cyIsIi4uL3NyYy9jb250ZXh0cy90eXBlcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mcm9udGVuZENvbmZpZy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9nb29nbGVBbmFseXRpY3NFdmVudHMuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvbWVzc2FnZS5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9tb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL29yZ3NFbnVtLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3Byb2R1Y3RFeHBlcmltZW50LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3NwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3NwaWZmeVdpZGdldHMuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvc3VwcG9ydGVkT3Jncy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvY29udGV4dC5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvZ2VuZXJhdGlvblBhcmFtcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvdXNlckV2ZW50LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9uZXh0TWVzc2FnZVJlcXVlc3QuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3NlYXJjaC5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvc3VnZ2VzdGlvbi5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvc3VwcG9ydGVkRXZlbnRSZXF1ZXN0LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwvcXVlcmllcy9nZXRNZXJjaGFudE9yZ0lkUXVlcnkuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2lzQmFzZUVjb21tZXJjZUV2ZW50LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9pc0dBNEVjb21tZXJjZUV2ZW50LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9pc0xlZ2FjeVVBRWNvbW1lcmNlRXZlbnQuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2lzTW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlci5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvaXNTcGFueFRha2VBUXVpekN0YVBhcmFtZXRlci5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvaXNWYXJpYW50SW5mby5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvdXRpbHMuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaUZvcm1SZXNwb25zZS5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpRm9ybVN1Ym1pdHRlZFJlc3BvbnNlQXR0cmlidXRlcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaU9yZ2FuaXphdGlvbkNvbmZpZy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpT3JnQ29uZmlnUmVzdWx0cy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUExQRXZlbnRBdHRyaWJ1dGVzLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlQcm9kdWN0U2VhcmNoRmlsdGVyQXR0cmlidXRlcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvZ3JhcGhRTC9pc0dyYXBoUUxDb2xvcnNDb25maWcuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzL2RlbGltaXRlckNhc2UuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzL2RlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXAuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzL3NuYWtlQ2FzZWRQcm9wZXJ0aWVzRGVlcC5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlscy9zbmFrZVRvQ2FtZWxUcmFuc2Zvcm1lci5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlscy9zdHJpbmdUb0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1c0VudW1WYWx1ZS5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlR3JhcGhRTENvbG9yc0NvbmZpZy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlR3JhcGhRTEZyb250ZW5kQ29uZmlnLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVHcmFwaFFMT3JnSWQuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZU1vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZU9yZ2FuaXphdGlvbkNvbmZpZy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlT3JnQ29uZmlnUmVzdWx0cy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlUmVzcG9uc2UuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVN1Z2dlc3Rpb24uZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVVzZXJFdmVudC5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImludGVyZmFjZSBDYWNoZWRWYWx1ZSB7XG4gICAgdmFsdWU6IHVua25vd247XG4gICAgZXhwaXJ5OiBudW1iZXI7XG59XG5leHBvcnQgdHlwZSB7IENhY2hlZFZhbHVlIH07XG4iLCJleHBvcnQgZGVjbGFyZSBlbnVtIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uIHtcbiAgICBJTl9DSEFUID0gXCJpbl9jaGF0XCIsXG4gICAgQ0hBVF9QUkVWSUVXID0gXCJjaGF0X3ByZXZpZXdcIixcbiAgICBGTE9BVElOR19CVVRUT04gPSBcImZsb2F0aW5nX2J1dHRvblwiLFxuICAgIEhFTFBfTUVfQ0hPT1NFID0gXCJoZWxwX21lX2Nob29zZVwiLFxuICAgIFBMUF9JTUFHRV9CQU5ORVIgPSBcInBscF9pbWFnZV9iYW5uZXJcIixcbiAgICBUT1BfUkVWSUVXU19TTklQUEVUID0gXCJ0b3BfcmV2aWV3c19zbmlwcGV0XCIsXG4gICAgQk9UVE9NX1JFVklFV1NfU05JUFBFVCA9IFwiYm90dG9tX3Jldmlld3Nfc25pcHBldFwiLFxuICAgIEJMT0NLX0JBQ0tfQlVUVE9OID0gXCJibG9ja19iYWNrX2J1dHRvblwiLFxuICAgIFNXSVRDSF9UT19BR0VOVCA9IFwic3dpdGNoX3RvX2FnZW50XCIsXG4gICAgQ09OVkVSU0FUSU9OQUxfU0VBUkNIID0gXCJjb252ZXJzYXRpb25hbF9zZWFyY2hcIixcbiAgICBHTE9CQUxfU0VBUkNIX0VOVFJZUE9JTlQgPSBcImdsb2JhbF9zZWFyY2hfZW50cnlwb2ludFwiLFxuICAgIFNFQVJDSF9OQVZfRU5UUllQT0lOVCA9IFwic2VhcmNoX25hdl9lbnRyeXBvaW50XCIsXG4gICAgU0VBUkNIX1BST01QVCA9IFwic2VhcmNoX3Byb21wdFwiLFxuICAgIFNFQVJDSF9QUk9NUFRfQlVUVE9OID0gXCJzZWFyY2hfcHJvbXB0X2J1dHRvblwiLFxuICAgIFBST0RVQ1RfR1JJRCA9IFwicHJvZHVjdF9ncmlkXCIsXG4gICAgVU5TUEVDSUZJRUQgPSBcInVuc3BlY2lmaWVkXCIsXG4gICAgRklMVEVSX01PREFMID0gXCJmaWx0ZXJfbW9kYWxcIixcbiAgICBQUk9NUFRfQ0FSRCA9IFwicHJvbXB0X2NhcmRcIixcbiAgICBXSU5ET1dfQVBJX0NBTEwgPSBcIndpbmRvd19hcGlfY2FsbFwiXG59XG4iLCJpbnRlcmZhY2UgQ2xpZW50RGV0YWlscyB7XG4gICAgb3M/OiBzdHJpbmc7XG4gICAgb3NWZXJzaW9uPzogc3RyaW5nO1xuICAgIGRldmljZUJyYW5kPzogc3RyaW5nO1xuICAgIGRldmljZU1hbnVmYWN0dXJlcj86IHN0cmluZztcbiAgICBkZXZpY2VNb2RlbD86IHN0cmluZztcbiAgICBjYXJyaWVyPzogc3RyaW5nO1xuICAgIGNvdW50cnk/OiBzdHJpbmc7XG4gICAgcmVnaW9uPzogc3RyaW5nO1xuICAgIGJyb3dzZXI/OiBzdHJpbmc7XG4gICAgYnJvd3NlclZlcnNpb24/OiBzdHJpbmc7XG4gICAgYnJvd3NlcklwQWRkcmVzcz86IHN0cmluZztcbiAgICB1c2VyQWdlbnQ/OiBzdHJpbmc7XG59XG5leHBvcnQgdHlwZSB7IENsaWVudERldGFpbHMsIH07XG4iLCJkZWNsYXJlIGVudW0gQ29sb3JOYW1lcyB7XG4gICAgVGV4dFByaW1hcnkgPSBcInRleHQtcHJpbWFyeVwiLFxuICAgIFRleHRTZWNvbmRhcnkgPSBcInRleHQtc2Vjb25kYXJ5XCIsXG4gICAgVGV4dEFjY2VudCA9IFwidGV4dC1hY2NlbnRcIixcbiAgICBUZXh0TGluayA9IFwidGV4dC1saW5rXCIsXG4gICAgVGV4dExpZ2h0ID0gXCJ0ZXh0LWxpZ2h0XCIsXG4gICAgQmFja2dyb3VuZFByaW1hcnkgPSBcImJhY2tncm91bmQtcHJpbWFyeVwiLFxuICAgIEJhY2tncm91bmRTZWNvbmRhcnkgPSBcImJhY2tncm91bmQtc2Vjb25kYXJ5XCIsXG4gICAgQmFja2dyb3VuZFNlY29uZGFyeURhcmsgPSBcImJhY2tncm91bmQtc2Vjb25kYXJ5LWRhcmtcIixcbiAgICBCYWNrZ3JvdW5kVGVydGlhcnkgPSBcImJhY2tncm91bmQtdGVydGlhcnlcIixcbiAgICBCYWNrZ3JvdW5kRGFyayA9IFwiYmFja2dyb3VuZC1kYXJrXCIsXG4gICAgQmFja2dyb3VuZExpZ2h0ID0gXCJiYWNrZ3JvdW5kLWxpZ2h0XCIsXG4gICAgQmFja2dyb3VuZFNhdHVyYXRlZCA9IFwiYmFja2dyb3VuZC1zYXR1cmF0ZWRcIixcbiAgICBCb3JkZXJMaWdodCA9IFwiYm9yZGVyLWxpZ2h0XCIsXG4gICAgQm9yZGVyTWVkaXVtID0gXCJib3JkZXItbWVkaXVtXCIsXG4gICAgQm9yZGVyRGFyayA9IFwiYm9yZGVyLWRhcmtcIixcbiAgICBCb3JkZXJPdXRsaW5lID0gXCJib3JkZXItb3V0bGluZVwiLFxuICAgIEFjY2VudFByaW1hcnkgPSBcImFjY2VudC1wcmltYXJ5XCIsXG4gICAgQWNjZW50U2Vjb25kYXJ5ID0gXCJhY2NlbnQtc2Vjb25kYXJ5XCJcbn1cbnR5cGUgQ29sb3JNYXBwaW5nID0ge1xuICAgIFtrZXkgaW4gQ29sb3JOYW1lc106IHN0cmluZztcbn07XG5kZWNsYXJlIGNvbnN0IGNvbG9yVmFyOiAoY29sb3I6IENvbG9yTmFtZXMpID0+IHN0cmluZztcbmV4cG9ydCB7IENvbG9yTmFtZXMsIGNvbG9yVmFyIH07XG5leHBvcnQgdHlwZSB7IENvbG9yTWFwcGluZyB9O1xuIiwiZXhwb3J0IHR5cGUgQ29udmVyc2F0aW9uYWxTZWFyY2hJZHMgPSB7XG4gICAgY29udmVyc2F0aW9uYWxTZWFyY2hFbnRyeXBvaW50SWQ/OiBzdHJpbmc7XG4gICAgY29udmVyc2F0aW9uYWxTZWFyY2hJbnB1dElkPzogc3RyaW5nO1xuICAgIGNvbnZlcnNhdGlvbmFsU2VhcmNoTW9kYWxJZD86IHN0cmluZztcbn07XG4iLCIvKipcbiAqIEJhc2UgaW50ZXJmYWNlIGZvciBjb21tb24gcHJvcGVydGllcyBhY3Jvc3MgYWxsIGVjb21tZXJjZSBldmVudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRWNvbW1lcmNlRXZlbnQge1xuICAgIGV2ZW50OiBzdHJpbmc7XG4gICAgZWNvbW1lcmNlOiBVQUVjb21tZXJjZURhdGEgfCBHQTRFY29tbWVyY2VEYXRhO1xufVxuLyoqXG4gKiBMZWdhY3kgdW5pdmVyc2FsIGFuYWx5dGljcyBkYXRhLiBUaGUgYWN0dWFsIHBheWxvYWQgY29udGFpbnMgbW9yZSBmaWVsZHMsIGJ1dCB3ZVxuICogb25seSBuZWVkIHRoZSBvbmVzIGxpc3RlZCBiZWxvdy5cbiAqL1xuaW50ZXJmYWNlIFVBRWNvbW1lcmNlRGF0YSB7XG4gICAgYWRkOiB7XG4gICAgICAgIHByb2R1Y3RzOiB7XG4gICAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICBjYXRlZ29yeTogc3RyaW5nO1xuICAgICAgICAgICAgcHJpY2U6IHN0cmluZztcbiAgICAgICAgICAgIHF1YW50aXR5OiBzdHJpbmc7XG4gICAgICAgIH1bXTtcbiAgICAgICAgY3VycmVuY3lDb2RlOiBzdHJpbmc7XG4gICAgfTtcbn1cbi8qKlxuICogR29vZ2xlIEFuYWx5dGljcyA0IGRhdGEuIFRoZSBhY3R1YWwgcGF5bG9hZCBjb250YWlucyBtb3JlIGZpZWxkcywgYnV0IHdlXG4gKiBvbmx5IG5lZWQgdGhlIG9uZXMgbGlzdGVkIGJlbG93LlxuICovXG5pbnRlcmZhY2UgR0E0RWNvbW1lcmNlRGF0YSB7XG4gICAgY3VycmVuY3k6IHN0cmluZztcbiAgICBpdGVtczoge1xuICAgICAgICBpdGVtX25hbWU6IHN0cmluZztcbiAgICAgICAgaXRlbV9jYXRlZ29yeTogc3RyaW5nO1xuICAgICAgICBwcmljZTogbnVtYmVyO1xuICAgICAgICBxdWFudGl0eTogbnVtYmVyO1xuICAgIH1bXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVUFFY29tbWVyY2VFdmVudCBleHRlbmRzIEJhc2VFY29tbWVyY2VFdmVudCB7XG4gICAgZWNvbW1lcmNlOiBVQUVjb21tZXJjZURhdGE7XG59XG5leHBvcnQgaW50ZXJmYWNlIEdBNEVjb21tZXJjZUV2ZW50IGV4dGVuZHMgQmFzZUVjb21tZXJjZUV2ZW50IHtcbiAgICBlY29tbWVyY2U6IEdBNEVjb21tZXJjZURhdGE7XG59XG5leHBvcnQge307XG4iLCJleHBvcnQgZGVjbGFyZSBlbnVtIFNwaWZmeUV2ZW50TmFtZSB7XG4gICAgV2lkZ2V0T3BlbiA9IFwic3BpZmZ5OndpZGdldG9wZW5cIixcbiAgICBXaWRnZXRDbG9zZSA9IFwic3BpZmZ5OndpZGdldGNsb3NlXCJcbn1cbiIsImV4cG9ydCBkZWNsYXJlIGVudW0gRmVhdHVyZUdhdGVzIHtcbiAgICBJc0NsaWVudFNlc3Npb25FbmFibGVkID0gXCJpc19jbGllbnRfc2Vzc2lvbl9lbmFibGVkXCIsXG4gICAgSXNOZXdGZWF0dXJlRW5hYmxlZCA9IFwiaXNfbmV3X2ZlYXR1cmVfZW5hYmxlZFwiLFxuICAgIElzRmluZVR1bmVkTW9kZWw4YiA9IFwiaXNfZmluZV90dW5lZF9tb2RlbF84YlwiLFxuICAgIElzSW50ZWdyYXRlZENYRW5hYmxlZCA9IFwiaXNfaW50ZWdyYXRlZF9jeF9lbmFibGVkXCIsXG4gICAgSXNOb25TaGFwZXdlYXJFbmFibGVkID0gXCJpc19ub25fc2hhcGV3ZWFyX2VuYWJsZWRcIixcbiAgICBJc0ltYWdlQmFubmVyRW5hYmxlZCA9IFwiaXNfaW1hZ2VfYmFubmVyX2VuYWJsZWRcIixcbiAgICBJc09yZGVyTG9va3VwRW5hYmxlZCA9IFwiaXNfb3JkZXJfbG9va3VwX2VuYWJsZWRcIixcbiAgICBJc1N1bW1hcml6ZVJldmlld3NFbmFibGVkID0gXCJpc19zdW1tYXJpemVfcmV2aWV3c19lbmFibGVkXCIsXG4gICAgSXNHbG9iYWxTZWFyY2hFbmFibGVkID0gXCJpc19nbG9iYWxfc2VhcmNoX2VuYWJsZWRcIixcbiAgICBJc0ltYWdlUHJvbXB0RW5hYmxlZCA9IFwiaXNfaW1hZ2VfcHJvbXB0X2VuYWJsZWRcIixcbiAgICBJc1dhdGVybWFya0VuYWJsZWQgPSBcImlzX3dhdGVybWFya19lbmFibGVkXCIsXG4gICAgSXNJbmZlcmVuY2VSZWdpb24wID0gXCJpc19pbmZlcmVuY2VfcmVnaW9uXzBcIixcbiAgICBJc0dyYXBoUUxVSUNvbmZpZ3NFbmFibGVkID0gXCJpc19ncmFwaHFsX3VpX2NvbmZpZ3NfZW5hYmxlZFwiLFxuICAgIElzR3JhcGhRTFBhZ2VDb25maWdzRW5hYmxlZCA9IFwiaXNfZ3JhcGhxbF9wYWdlX2NvbmZpZ3NfZW5hYmxlZFwiLFxuICAgIElzR3JhcGhRTENvbXBvbmVudENvbmZpZ3NFbmFibGVkID0gXCJpc19ncmFwaHFsX2NvbXBvbmVudF9jb25maWdzX2VuYWJsZWRcIixcbiAgICBJc0NoYXRWYXJpYW50RW5hYmxlZCA9IFwiaXNfY2hhdF92YXJpYW50X2VuYWJsZWRcIixcbiAgICBJc0NoYXRWYXJpYW50QUVuYWJsZWQgPSBcImlzX2NoYXRfdmFyaWFudF9hX2VuYWJsZWRcIixcbiAgICBJc0NoYXRWYXJpYW50QkVuYWJsZWQgPSBcImlzX2NoYXRfdmFyaWFudF9iX2VuYWJsZWRcIixcbiAgICBJc1VzZXJRdWVyeUFsd2F5c0VuYWJsZWQgPSBcImlzX3VzZXJfcXVlcnlfYWx3YXlzX2VuYWJsZWRcIlxufVxuIiwiaW1wb3J0IHsgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIgfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7XG5leHBvcnQgZGVjbGFyZSBlbnVtIEN1c3RvbWVyU2VydmljZVR5cGUge1xuICAgIHNob3BpZnkgPSBcInNob3BpZnlcIixcbiAgICBnb3JnaWFzID0gXCJnb3JnaWFzXCIsXG4gICAga3VzdG9tZXIgPSBcImt1c3RvbWVyXCIsXG4gICAgZ3Jvb3ZlID0gXCJncm9vdmVcIixcbiAgICB0aWRpbyA9IFwidGlkaW9cIixcbiAgICB6b3dpZSA9IFwiem93aWVcIixcbiAgICByZWRvID0gXCJyZWRvXCIsXG4gICAgZ2xhZGx5ID0gXCJnbGFkbHlcIixcbiAgICByaWNocGFuZWwgPSBcInJpY2hwYW5lbFwiLFxuICAgIHplbmRlc2sgPSBcInplbmRlc2tcIixcbiAgICB1bnN1cHBvcnRlZCA9IFwidW5zdXBwb3J0ZWRcIlxufVxuZXhwb3J0IGRlY2xhcmUgZW51bSBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGUge1xuICAgIG5vbmUgPSBcIm5vbmVcIixcbiAgICBzaW1wbGUgPSBcInNpbXBsZVwiLFxuICAgIGZ1bGwgPSBcImZ1bGxcIlxufVxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbiB7XG4gICAgcHJvdmlkZXI6IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyO1xuICAgIHN1cHBvcnRlZEludGVncmF0aW9uTW9kZXM6IEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZVtdO1xuICAgIGFsbG93RmlsZVVwbG9hZD86IGJvb2xlYW47XG4gICAgbWF4ZmlsZVVwbG9hZFNpemU/OiBudW1iZXI7XG4gICAgb25Td2l0Y2hUb0FnZW50OiAoKSA9PiB2b2lkO1xuICAgIGlzRW5hYmxlZDogKCkgPT4gYm9vbGVhbjtcbiAgICBpc0J1c2luZXNzSG91cnM6IChhcGlLZXk/OiBzdHJpbmcsIGFwaUVuZHBvaW50Pzogc3RyaW5nKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xufVxuIiwiZGVjbGFyZSBlbnVtIEdyaWRJbnNlcnRpb25UeXBlIHtcbiAgICBGSVhFRF8xID0gXCJmaXhlZC0xXCIsXG4gICAgRklYRURfMiA9IFwiZml4ZWQtMlwiLFxuICAgIEZJWEVEXzMgPSBcImZpeGVkLTNcIixcbiAgICBGSVhFRF80ID0gXCJmaXhlZC00XCIsXG4gICAgRklYRURfNSA9IFwiZml4ZWQtNVwiLFxuICAgIEZJWEVEXzYgPSBcImZpeGVkLTZcIixcbiAgICBGSVhFRF83ID0gXCJmaXhlZC03XCIsXG4gICAgRklYRURfOCA9IFwiZml4ZWQtOFwiLFxuICAgIEZJWEVEXzkgPSBcImZpeGVkLTlcIixcbiAgICBGSVhFRF8xMiA9IFwiZml4ZWQtMTJcIixcbiAgICBGSVhFRF8xMyA9IFwiZml4ZWQtMTNcIixcbiAgICBST1dfMSA9IFwicm93LTFcIixcbiAgICBST1dfMiA9IFwicm93LTJcIixcbiAgICBST1dfMyA9IFwicm93LTNcIixcbiAgICBST1dfNCA9IFwicm93LTRcIlxufVxuZXhwb3J0IHsgR3JpZEluc2VydGlvblR5cGUgfTtcbiIsImRlY2xhcmUgZW51bSBET01JbnNlcnRpb25UeXBlIHtcbiAgICBBRlRFUiA9IFwiYWZ0ZXJcIixcbiAgICBCRUZPUkUgPSBcImJlZm9yZVwiLFxuICAgIEFESkFDRU5UX0FGVEVSX0JFR0lOID0gXCJhZGphY2VudC1hZnRlci1iZWdpblwiLFxuICAgIEFESkFDRU5UX0JFRk9SRV9CRUdJTiA9IFwiYWRqYWNlbnQtYmVmb3JlLWJlZ2luXCIsXG4gICAgQURKQUNFTlRfQUZURVJfRU5EID0gXCJhZGphY2VudC1hZnRlci1lbmRcIixcbiAgICBBREpBQ0VOVF9CRUZPUkVfRU5EID0gXCJhZGphY2VudC1iZWZvcmUtZW5kXCIsXG4gICAgQVBQRU5EX0NISUxEID0gXCJhcHBlbmQtY2hpbGRcIixcbiAgICBOT05FID0gXCJub25lXCJcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IERPTUluc2VydGlvblR5cGVUb0luc2VydFBvc2l0aW9uOiAodHlwZTogRE9NSW5zZXJ0aW9uVHlwZSkgPT4gSW5zZXJ0UG9zaXRpb247XG5leHBvcnQgeyBET01JbnNlcnRpb25UeXBlIH07XG4iLCJleHBvcnQgaW50ZXJmYWNlIE9yZ0FuYWx5dGljc0NvbmZpZyB7XG4gICAgYW1wbGl0dWRlPzogT3JnQW5hbHl0aWNzQW1wbGl0dWRlQ29uZmlnO1xuICAgIGN1c3RvbWVyU2VydmljZT86IE9yZ0FuYWx5dGljc0N1c3RvbWVyU2VydmljZUNvbmZpZztcbiAgICBnb29nbGVBbmFseXRpY3M/OiBPcmdBbmFseXRpY3NHb29nbGVBbmFseXRpY3NDb25maWc7XG59XG5leHBvcnQgaW50ZXJmYWNlIE9yZ0FuYWx5dGljc0FtcGxpdHVkZUNvbmZpZyB7XG4gICAgc2Vzc2lvblJlcGxheUVuYWJsZWQ6IGJvb2xlYW47XG4gICAgc2Vzc2lvblJlcGxheVNhbXBsZVJhdGU6IG51bWJlcjtcbiAgICB0cmFja2luZ0VuYWJsZWQ6IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIE9yZ0FuYWx5dGljc0N1c3RvbWVyU2VydmljZUNvbmZpZyB7XG4gICAgcHJvdmlkZXI6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT3JnQW5hbHl0aWNzR29vZ2xlQW5hbHl0aWNzQ29uZmlnIHtcbiAgICBtZWFzdXJlbWVudElkPzogc3RyaW5nO1xufVxuIiwiaW1wb3J0IHsgT3JnQW5hbHl0aWNzQ29uZmlnIH0gZnJvbSAnLi9vcmdBbmFseXRpY3NDb25maWcnO1xuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6YXRpb25Db25maWcge1xuICAgIGNyZWF0ZWRBdDogc3RyaW5nO1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIGlzTGF0ZXN0OiBib29sZWFuO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICB1cGRhdGVkQXQ6IHN0cmluZztcbiAgICBjb25maWc6IE9yZ0FuYWx5dGljc0NvbmZpZztcbiAgICBvcmdhbml6YXRpb25JZD86IHN0cmluZztcbiAgICBpZD86IHN0cmluZztcbn1cbiIsImltcG9ydCB7IE9yZ2FuaXphdGlvblN0YXR1c0VudW0gfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25Db25maWcgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvb3JnYW5pemF0aW9uQ29uZmlnXCI7XG5pbXBvcnQgeyBDb2xvck1hcHBpbmcgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWdcIjtcbmltcG9ydCB7IEZyb250ZW5kQ29uZmlnIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZnJvbnRlbmRDb25maWdcIjtcbmV4cG9ydCBpbnRlcmZhY2UgT3JnQ29uZmlnRXhwZXJpbWVudCB7XG4gICAgZ3JvdXA/OiBzdHJpbmc7XG4gICAgZ3JvdXBOYW1lPzogc3RyaW5nO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgcnVsZUlkPzogc3RyaW5nO1xuICAgIHZhbHVlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5leHBvcnQgaW50ZXJmYWNlIE9yZ0NvbmZpZ0ZlYXR1cmVHYXRlIHtcbiAgICBncm91cE5hbWU/OiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICBydWxlSWQ/OiBzdHJpbmc7XG4gICAgdmFsdWU/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6YXRpb24ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgICBkb21haW46IHN0cmluZztcbiAgICBzaG9ydE5hbWU6IHN0cmluZztcbiAgICBzdGF0dXM6IE9yZ2FuaXphdGlvblN0YXR1c0VudW07XG4gICAgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICAgIHVwZGF0ZWRBdD86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemF0aW9uU2V0dGluZ3Mge1xuICAgIG9yZzogT3JnYW5pemF0aW9uO1xuICAgIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT3JnQ29uZmlnIHtcbiAgICBjb25maWdzOiBPcmdhbml6YXRpb25Db25maWdbXTtcbiAgICBleHBlcmltZW50czogT3JnQ29uZmlnRXhwZXJpbWVudFtdO1xuICAgIGdhdGVzOiBPcmdDb25maWdGZWF0dXJlR2F0ZVtdO1xuICAgIG9yZzogT3JnYW5pemF0aW9uU2V0dGluZ3M7XG4gICAgY29sb3JzQ29uZmlnPzogQ29sb3JNYXBwaW5nO1xuICAgIGZyb250ZW5kQ29uZmlnPzogRnJvbnRlbmRDb25maWc7XG59XG4iLCJpbXBvcnQgeyBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL2NoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uXCI7XG5pbXBvcnQgeyBDb2xvck1hcHBpbmcsIENvbG9yTmFtZXMsIGNvbG9yVmFyIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY29sb3JzQ29uZmlnXCI7XG5pbXBvcnQgeyBGZWF0dXJlR2F0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9mZWF0dXJlR2F0ZXNcIjtcbmltcG9ydCB7IEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZSwgQ3VzdG9tZXJTZXJ2aWNlVHlwZSB9IGZyb20gXCJzcmMvdHlwZXMvY3VzdG9tZXJTZXJ2aWNlXCI7XG5pbXBvcnQgeyBHcmlkSW5zZXJ0aW9uVHlwZSB9IGZyb20gXCJzcmMvbWVyY2hhbnRzL2dyaWRJbnNlcnRpb25cIjtcbmltcG9ydCB7IERPTUluc2VydGlvblR5cGUgfSBmcm9tIFwic3JjL21lcmNoYW50cy9kb21JbnNlcnRpb25cIjtcbmltcG9ydCB0eXBlIHsgUGFnZVZpc2l0Q2F0ZWdvcnksIFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5IH0gZnJvbSBcIkBzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudFwiO1xuaW1wb3J0IHsgQ2hhdFN0YXRlIH0gZnJvbSBcInNyYy90eXBlcy9jdXN0c2VydmljZS10eXBlc1wiO1xuaW1wb3J0IHsgU3VnZ2VzdGlvbkJhckxvY2F0aW9uRm9yTWV0cmljcyB9IGZyb20gXCJzcmMvdHlwZXMvc3VnZ2VzdGlvbkJhclYyLXR5cGVzXCI7XG5pbXBvcnQgeyBUZXN0UHJvcHMgfSBmcm9tIFwic3JjL3R5cGVzL3Rlc3QtdHlwZXNcIjtcbmltcG9ydCB7IE9yZ0NvbmZpZ0ZlYXR1cmVHYXRlIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0NvbmZpZ1Jlc3VsdHNcIjtcbnR5cGUgU2hvd0Zsb2F0aW5nQnV0dG9uT3B0aW9ucyA9IFwiYWx3YXlzXCIgfCBcImFmdGVyLWludGVyYWN0aW9uLW9uLW1vYmlsZS1hbHdheXMtZGVza3RvcFwiIHwgXCJhZnRlci1pbnRlcmFjdGlvbi1hbnl3aGVyZVwiIHwgXCJuZXZlclwiO1xudHlwZSBGbG9hdGluZ0VudHJ5UG9pbnRDb25maWcgPSB7XG4gICAgcG9zaXRpb246IFwiYm90dG9tLWxlZnRcIiB8IFwibWlkZGxlLWxlZnRcIiB8IFwibWlkZGxlLXJpZ2h0XCIgfCBcImJvdHRvbS1yaWdodFwiO1xuICAgIGV4cGFuc2lvblRleHQ/OiB7XG4gICAgICAgIHBkcDogc3RyaW5nO1xuICAgICAgICBwbHA6IHN0cmluZztcbiAgICB9O1xuICAgIG1pbmltaXplZENvbG9yOiBzdHJpbmc7XG4gICAgZXhwYW5kZWRDb2xvcjogc3RyaW5nO1xuICAgIHRleHRDb2xvcj86IHN0cmluZztcbiAgICBzaG93T3B0aW9uOiBTaG93RmxvYXRpbmdCdXR0b25PcHRpb25zO1xuICAgIGljb25TVkdTcmM/OiBzdHJpbmc7XG4gICAgaWNvblNpemU/OiBudW1iZXI7XG4gICAgaWNvblN0cm9rZUNvbG9yPzogc3RyaW5nO1xuICAgIGljb25GaWxsQ29sb3I/OiBzdHJpbmc7XG4gICAgaGVpZ2h0PzogbnVtYmVyO1xuICAgIGZvbnRTaXplPzogbnVtYmVyO1xufTtcbnR5cGUgV2VsY29tZVNlY3Rpb25WYXJpYW50ID0gXCJzdGFuZGFyZFwiIHwgXCJvdXRsaW5lZFwiO1xudHlwZSBXZWxjb21lU2VjdGlvbkNvbG9yVmFyaWFudCA9IFwic3RhbmRhcmRcIiB8IFwiYWNjZW50XCIgfCBcImJyYW5kXCIgfCBcImxpZ2h0XCI7XG50eXBlIFdlbGNvbWVTZWN0aW9uQ29uZmlnID0ge1xuICAgIHZhcmlhbnQ6IFdlbGNvbWVTZWN0aW9uVmFyaWFudDtcbiAgICBjb2xvclZhcmlhbnQ/OiBXZWxjb21lU2VjdGlvbkNvbG9yVmFyaWFudDtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBzdWJ0aXRsZT86IHN0cmluZztcbiAgICBpY29uTmFtZT86IHN0cmluZztcbiAgICBpbWFnZVNyYz86IHN0cmluZztcbn07XG50eXBlIENoYXRQcmV2aWV3Q29uZmlnID0ge1xuICAgIHZhcmlhbnQ6IFwiZmxhdFwiIHwgXCJmaWxsZWRcIiB8IFwib3V0bGluZWRcIjtcbiAgICBsYXJnZVByb2R1Y3RDb21wYXJpc29uPzogYm9vbGVhbjtcbiAgICBmaWxsZWRCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgICBpY29uRmlsbENvbG9yOiBzdHJpbmc7XG4gICAgYnV0dG9uVGV4dENvbG9yPzogc3RyaW5nO1xuICAgIGJ1dHRvblRleHRTZWNvbmRhcnlDb2xvcj86IHN0cmluZztcbiAgICBidXR0b25UZXh0SG92ZXJDb2xvcj86IHN0cmluZztcbiAgICBidXR0b25CYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgICBidXR0b25CYWNrZ3JvdW5kSG92ZXJDb2xvcjogc3RyaW5nO1xuICAgIGJ1dHRvbkJvcmRlckNvbG9yPzogc3RyaW5nO1xuICAgIGJ1dHRvbkJvcmRlckhvdmVyQ29sb3I/OiBzdHJpbmc7XG4gICAgY29waWVzOiB7XG4gICAgICAgIHBkcDogc3RyaW5nW107XG4gICAgICAgIHBscDogc3RyaW5nW107XG4gICAgfTtcbiAgICBzdGF0aWNTdWdnZXN0aW9uQ29waWVzPzoge1xuICAgICAgICBwZHA6IHN0cmluZ1tdO1xuICAgICAgICBwbHA6IHN0cmluZ1tdO1xuICAgIH07XG4gICAgc3RhdGljUExQSW1hZ2VzPzogc3RyaW5nW107XG4gICAgZm9vdGVyQ29uZmlnPzogQ2hhdFByZXZpZXdGb290ZXJDb25maWc7XG4gICAgaGVhZGVyQ29uZmlnPzogQ2hhdFByZXZpZXdIZWFkZXJDb25maWc7XG4gICAgdG9wTWFyZ2luPzogbnVtYmVyO1xufTtcbnR5cGUgQ2hhdFByZXZpZXdIZWFkZXJDb25maWcgPSB7XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgaW1hZ2VTcmM/OiBzdHJpbmc7XG4gICAgaW1hZ2VIZWlnaHQ/OiBudW1iZXI7XG4gICAgc3BhcmtsZXNDb2xvcj86IHN0cmluZztcbiAgICBmb250U2l6ZT86IHN0cmluZztcbiAgICBpY29uV2lkdGg/OiBzdHJpbmc7XG4gICAgaWNvbkhlaWdodD86IHN0cmluZztcbn07XG5pbnRlcmZhY2UgQ2hhdFByZXZpZXdGb290ZXJDb25maWcge1xuICAgIGhhc0ZhZGU/OiBib29sZWFuO1xuICAgIHN1Z2dlc3Rpb25CdXR0b25WYXJpYW50PzogXCJkYXJrXCIgfCBcImxpZ2h0XCIgfCBcIm91dGxpbmVkXCI7XG4gICAgc3VnZ2VzdGlvbnNCYWNrZ3JvdW5kPzogc3RyaW5nO1xuICAgIHJlcGx5QnV0dG9uSWNvbj86IFwic2VuZFwiIHwgXCJtYWduaWZ5aW5nR2xhc3NcIiB8IFwidGhpbk1hZ25pZnlpbmdHbGFzc1wiIHwgXCJzZWFyY2hJY29uXCI7XG4gICAgcmVwbHlCdXR0b25UZXh0Pzogc3RyaW5nO1xuICAgIHJlcGx5SW5wdXRIYXNTaGFkb3c/OiBib29sZWFuO1xuICAgIHJlcGx5SW5wdXRIYXNCb3JkZXI/OiBib29sZWFuO1xuICAgIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbn1cbnR5cGUgUHJvZHVjdFJldmlld1N0eWxlVmFyaWFudCA9IFwic3RhbmRhcmRcIiB8IFwiYm9yZGVyZWRcIjtcbnR5cGUgUHJvZHVjdFJldmlld0NvbG9yVmFyaWFudCA9IFwibmV1dHJhbFwiIHwgXCJicmFuZFwiIHwgXCJwcmVtaXVtXCI7XG5pbnRlcmZhY2UgUHJvZHVjdFJldmlld0NvbmZpZyB7XG4gICAgc3R5bGVWYXJpYW50OiBQcm9kdWN0UmV2aWV3U3R5bGVWYXJpYW50O1xuICAgIGNvbG9yVmFyaWFudDogUHJvZHVjdFJldmlld0NvbG9yVmFyaWFudDtcbiAgICB2ZXJpZmllZEJ1eWVyVGl0bGU6IHN0cmluZztcbiAgICBpbmNlbnRpdml6ZWRSZXZpZXdGbGFnPzogYm9vbGVhbjtcbn1cbnR5cGUgUGFnZUNhcmRWYXJpYW50ID0gXCJmaWxsZWRcIiB8IFwib3V0bGluZWRcIiB8IFwibWluaW1hbFwiO1xudHlwZSBQYWdlQ2FyZEhvdmVyVmFyaWFudCA9IFwibm9uZVwiIHwgXCJzaGFkb3dcIiB8IFwibGlmdFwiO1xudHlwZSBQYWdlQ2FyZEljb25WYXJpYW50ID0gXCJwcmltYXJ5XCIgfCBcImFjY2VudFwiIHwgXCJiYWNrZ3JvdW5kXCIgfCBcIm5vbmVcIjtcbnR5cGUgUGFnZUNhcmRDb25maWcgPSB7XG4gICAgdmFyaWFudDogUGFnZUNhcmRWYXJpYW50O1xuICAgIGhvdmVyVmFyaWFudDogUGFnZUNhcmRIb3ZlclZhcmlhbnQ7XG4gICAgaWNvblZhcmlhbnQ6IFBhZ2VDYXJkSWNvblZhcmlhbnQ7XG59O1xudHlwZSBQcm9kdWN0Q2FyZFZhcmlhbnQgPSBcImZpbGxlZFwiIHwgXCJib3JkZXJlZFwiIHwgXCJtaW5pbWFsXCIgfCBcInRyYW5zcGFyZW50Qm9yZGVyZWRcIjtcbnR5cGUgUHJvZHVjdENhcmRIb3ZlclZhcmlhbnQgPSBcImJhY2tncm91bmREYXJrXCIgfCBcIm5vbmVcIjtcbnR5cGUgUHJvZHVjdENhcmRMYXlvdXRWYXJpYW50ID0gXCJub3JtYWxcIiB8IFwidGFsbFwiIHwgXCJzcXVhcmVcIjtcbmludGVyZmFjZSBQcm9kdWN0Q2FyZENvbmZpZyB7XG4gICAgdmFyaWFudDogUHJvZHVjdENhcmRWYXJpYW50O1xuICAgIGhvdmVyVmFyaWFudDogUHJvZHVjdENhcmRIb3ZlclZhcmlhbnQ7XG4gICAgbGF5b3V0VmFyaWFudDogUHJvZHVjdENhcmRMYXlvdXRWYXJpYW50O1xuICAgIHByaWNlUHJlZml4Pzogc3RyaW5nO1xufVxudHlwZSBDU1N3aXRjaENvbmZpZyA9IHtcbiAgICB2YXJpYW50OiBcImF0dGFjaGVkXCIgfCBcImRldGFjaGVkXCI7XG4gICAgYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG4gICAgYm9yZGVyQ29sb3I6IHN0cmluZztcbiAgICBzZWxlY3RlZFRleHRDb2xvcjogc3RyaW5nO1xuICAgIHNlbGVjdGVkQmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICAgIHVuc2VsZWN0ZWRUZXh0Q29sb3I6IHN0cmluZztcbiAgICB1bnNlbGVjdGVkQmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICAgIHN1cHBvcnRUaXRsZT86IHN0cmluZztcbiAgICBzcGlmZnlUaXRsZT86IHN0cmluZztcbiAgICBzcGlmZnlUaXRsZUhhc0xvZ28/OiBib29sZWFuO1xufTtcbnR5cGUgQ2hhdEhlYWRlckNvbmZpZyA9IHtcbiAgICBjb2xsYXBzZWRDb2xvcjogc3RyaW5nO1xuICAgIGV4cGFuZGVkQ29sb3I6IHN0cmluZztcbiAgICBjaGV2cm9uQ29sb3I6IHN0cmluZztcbiAgICBpbWFnZVNyYz86IHN0cmluZztcbiAgICBpY29uPzogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8UmVhY3QuU1ZHUHJvcHM8U1ZHU1ZHRWxlbWVudD4+O1xuICAgIGNsb3NlSWNvbj86IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PFJlYWN0LlNWR1Byb3BzPFNWR1NWR0VsZW1lbnQ+PjtcbiAgICBib3JkZXJCb3R0b20/OiBzdHJpbmc7XG4gICAgaGVhZGVyQmFySGVpZ2h0UGFydGlhbFZpZXc6IG51bWJlcjtcbiAgICBoZWFkZXJCYXJIZWlnaHRGdWxsVmlldzogbnVtYmVyO1xuICAgIGN1c3RvbWVyU3VwcG9ydFN3aXRjaENvbmZpZz86IENTU3dpdGNoQ29uZmlnO1xufTtcbnR5cGUgU2ltcGxlQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb24gPSB7XG4gICAgaW50ZWdyYXRpb25Nb2RlOiBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGU7XG4gICAgcHJvdmlkZXI6IEN1c3RvbWVyU2VydmljZVR5cGU7XG4gICAgdXNlVW5pZmllZEJ1dHRvbj86IGJvb2xlYW47XG4gICAgbWF4ZmlsZVVwbG9hZFNpemU/OiBudW1iZXI7XG59O1xudHlwZSBGdWxsQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb24gPSB7XG4gICAgaW50ZWdyYXRpb25Nb2RlOiBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGU7XG4gICAgcHJvdmlkZXI6IEN1c3RvbWVyU2VydmljZVR5cGU7XG4gICAgdXNlVW5pZmllZEJ1dHRvbj86IGJvb2xlYW47XG4gICAgY2hhdEVuYWJsZWREdXJpbmdCdXNpbmVzc0hvdXJzPzogYm9vbGVhbjtcbiAgICBzaG93TmFtZUlucHV0PzogYm9vbGVhbjtcbiAgICBmb3JtQWlOYW1lPzogc3RyaW5nO1xuICAgIHdlbGNvbWVUaXRsZTogc3RyaW5nO1xuICAgIHdlbGNvbWVEZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIHNob3dXZWxjb21lT25Gb3JtPzogYm9vbGVhbjtcbiAgICBjb250YWN0U3ViamVjdE9wdGlvbnM/OiBzdHJpbmdbXTtcbiAgICBnZXRDdXN0b21XYWl0aW5nTWVzc2FnZT86IChuYW1lPzogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgd2l0aGluQnVzaW5lc3NIb3Vyc01lc3NhZ2U/OiBzdHJpbmc7XG4gICAgd2l0aGluQnVzaW5lc3NIb3Vyc1dhaXRpbmdNZXNzYWdlPzogc3RyaW5nO1xuICAgIG91dHNpZGVCdXNpbmVzc0hvdXJzTWVzc2FnZT86IHN0cmluZztcbiAgICBvdXRzaWRlQnVzaW5lc3NIb3Vyc1dhaXRpbmdNZXNzYWdlPzogc3RyaW5nO1xuICAgIHdpdGhpbkJ1c2luZXNzSG91cnNGb3JtTWVzc2FnZT86IHN0cmluZztcbiAgICBvdXRzaWRlQnVzaW5lc3NIb3Vyc0Zvcm1NZXNzYWdlPzogc3RyaW5nO1xuICAgIHN1Z2dlc3RlZEFJUXVlc3Rpb25zPzogc3RyaW5nW107XG4gICAgYnVzaW5lc3NIb3Vyc1BvbGxpbmc/OiBudW1iZXI7XG4gICAgbWF4ZmlsZVVwbG9hZFNpemU/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBCRS5cbiAgICAgKi9cbiAgICBidXNpbmVzc0hvdXJzU3RhcnRVVEM/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBCRS5cbiAgICAgKi9cbiAgICBidXNpbmVzc0hvdXJzRW5kVVRDPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFRoaXMgaXMgaGFuZGxlZCBieSB0aGUgQkUuXG4gICAgICovXG4gICAgYnVzaW5lc3NIb3Vyc1RpbWV6b25lPzogc3RyaW5nO1xuICAgIHNob3dBSVN1Z2dlc3Rpb25zV2l0aGluQnVzaW5lc3NIb3Vycz86IGJvb2xlYW47XG4gICAgd2FpdGluZ01lc3NhZ2VQb3NpdGlvbj86IFwiQkVGT1JFX01FU1NBR0VTXCIgfCBcIkFGVEVSX01FU1NBR0VTXCI7XG4gICAgbGVnYWxNZXNzYWdlPzogc3RyaW5nO1xuICAgIHdpdGhpbkJ1c2luZXNzSG91cnNJbml0aWFsU3RhdGU/OiBDaGF0U3RhdGU7XG4gICAgb3V0c2lkZUJ1c2luZXNzSG91cnNJbml0aWFsU3RhdGU/OiBDaGF0U3RhdGU7XG4gICAgd2l0aGluQnVzaW5lc3NIb3Vyc0J1dHRvbnRleHQ/OiBzdHJpbmc7XG4gICAgb3V0c2lkZUJ1c2luZXNzSG91cnNCdXR0b250ZXh0Pzogc3RyaW5nO1xuICAgIHJlb3BlbkNoYXRNZXNzYWdlOiBzdHJpbmc7XG59O1xudHlwZSBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbiA9IFNpbXBsZUN1c3RvbWVyU2VydmljZUludGVncmF0aW9uIHwgRnVsbEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uO1xudHlwZSBDb252ZXJzYXRpb25hbFNlYWNoID0ge1xuICAgIGVuYWJsZWQ/OiBib29sZWFuO1xuICAgIHJlcGx5SW5wdXQ/OiBSZXBseUlucHV0Q29uZmlnO1xuICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW107XG4gICAgZW50cnlwb2ludEJnQ29sb3I/OiBzdHJpbmc7XG4gICAgZW50cnlwb2ludFRleHRDb2xvcj86IHN0cmluZztcbiAgICBlbnRyeXBvaW50QnRuQ29sb3I/OiBzdHJpbmc7XG4gICAgZW50cnlwb2ludEJ0blRleHRDb2xvcj86IHN0cmluZztcbiAgICBlbnRyeXBvaW50QnRuQm9yZGVyQ29sb3I/OiBzdHJpbmc7XG4gICAgZW50cnlwb2ludENvbnRhaW5lcj86IHN0cmluZztcbiAgICBlbnRyeXBvaW50VHJpZ2dlcj86IHN0cmluZztcbiAgICBwcm9kdWN0R3JpZENvbnRhaW5lcj86IHN0cmluZztcbiAgICBnZW5lcmFsU2VhcmNoQnRuPzogc3RyaW5nO1xuICAgIHBhZ2VDb250ZW50Pzogc3RyaW5nO1xuICAgIHNlYXJjaENvbnRlbnQ/OiBzdHJpbmc7XG4gICAgc29ydGluZ1RpdGxlPzogc3RyaW5nO1xuICAgIHNlbGVjdGlvblRpdGxlPzogc3RyaW5nO1xuICAgIHNvcnRpbmdGb250Pzogc3RyaW5nO1xuICAgIG9wdGlvbnNGb250Pzogc3RyaW5nO1xuICAgIHNvcnRpbmdCdXR0b25UZXh0Pzogc3RyaW5nO1xufTtcbnR5cGUgQ2hhdE1lc3NhZ2VWYXJpYW50ID0gXCJzdGFuZGFyZFwiIHwgXCJwcmVtaXVtXCIgfCBcImFjY2VudFwiO1xuaW50ZXJmYWNlIENoYXRNZXNzYWdlQ29uZmlnIHtcbiAgICBhc3Npc3RhbnRDaGF0VGl0bGU6IHN0cmluZztcbiAgICB2YXJpYW50OiBDaGF0TWVzc2FnZVZhcmlhbnQ7XG4gICAgcHJvZHVjdExpbms6IHtcbiAgICAgICAgdmFyaWFudDogUHJvZHVjdExpbmtWYXJpYW50O1xuICAgICAgICBob3ZlclZhcmlhbnQ6IFByb2R1Y3RMaW5rSG92ZXJWYXJpYW50O1xuICAgICAgICBpY29uVmFyaWFudDogUHJvZHVjdExpbmtJY29uVmFyaWFudDtcbiAgICB9O1xufVxuaW50ZXJmYWNlIFJlcGx5SW5wdXRDb25maWcge1xuICAgIHNpemU/OiBcIm1kXCIgfCBcImxnXCI7XG4gICAgc2VuZEljb246IFwiYXJyb3dVcFwiIHwgXCJzZW5kXCIgfCBcInNlYXJjaFwiO1xuICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xufVxuaW50ZXJmYWNlIFBhcnRpYWxWaWV3Q29uZmlnIHtcbiAgICBtYXhIZWlnaHQ6IG51bWJlcjtcbiAgICBib3JkZXJSYWRpdXM/OiBzdHJpbmc7XG59XG50eXBlIFByb2R1Y3RMaW5rSWNvblZhcmlhbnQgPSBcImFjY2VudFByaW1hcnlcIiB8IFwiYmFja2dyb3VuZFByaW1hcnlcIiB8IFwiYmFja2dyb3VuZFByaW1hcnlEYXJrXCIgfCBcImJvcmRlckxpZ2h0XCIgfCBcImJhY2tncm91bmRTYXR1cmF0ZWRcIjtcbnR5cGUgUHJvZHVjdExpbmtWYXJpYW50ID0gXCJ0ZXh0TGlua1wiO1xudHlwZSBQcm9kdWN0TGlua0hvdmVyVmFyaWFudCA9IFwiYmFja2dyb3VuZERhcmtcIjtcbnR5cGUgU2VhcmNoQ2FyZFZhcmlhbnQgPSBcImJhY2tncm91bmRQcmltYXJ5XCIgfCBcImJhY2tncm91bmRTZWNvbmRhcnlcIiB8IFwiYmFja2dyb3VuZFNlY29uZGFyeURhcmtcIiB8IFwiYmFja2dyb3VuZExpZ2h0XCIgfCBcImJhY2tncm91bmRTYXR1cmF0ZWRcIjtcbnR5cGUgU3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnQgPSBcIm91dGxpbmVkXCIgfCBcIm91dGxpbmVkTGlnaHRcIiB8IFwicHJpbWFyeVwiIHwgXCJzZWNvbmRhcnlcIiB8IFwidGVydGlhcnlcIiB8IFwiZGFya1wiIHwgXCJkYXJrQWNjZW50XCIgfCBcImRhcmtQcmltYXJ5XCIgfCBcInNlY29uZGFyeURhcmtcIiB8IFwic2Vjb25kYXJ5QWNjZW50XCIgfCBcInRyYW5zcGFyZW50XCIgfCBcInRyYW5zcGFyZW50RGFya1wiIHwgXCJsaWdodERhcmtcIjtcbmludGVyZmFjZSBTdWdnZXN0aW9uQnV0dG9uQ29uZmlnIHtcbiAgICB2YXJpYW50PzogU3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnQ7XG4gICAgaG92ZXJWYXJpYW50PzogU3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnQ7XG4gICAgYW5zd2VyVmFyaWFudD86IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgIGJvcmRlclJhZGl1cz86IFwic21cIiB8IFwibWRcIiB8IFwibGdcIjtcbn1cbnR5cGUgTnVtUm93cyA9IFwiZGVmYXVsdFwiIHwgXCJhbHdheXNPbmVSb3dcIiB8IFwiYWx3YXlzVHdvUm93c1wiIHwgXCJ0d29Sb3dzT25Nb2JpbGVcIjtcbmludGVyZmFjZSBBbHBoYWJldGljRmlsdGVyU29ydGluZyB7XG4gICAgdHlwZTogXCJhbHBoYWJldGljXCI7XG59XG5pbnRlcmZhY2UgUHJvZHVjdENvdW50RmlsdGVyU29ydGluZyB7XG4gICAgdHlwZTogXCJwcm9kdWN0Q291bnRcIjtcbn1cbmludGVyZmFjZSBDdXN0b21GaWx0ZXJTb3J0aW5nIHtcbiAgICB0eXBlOiBcImN1c3RvbVwiO1xuICAgIG1hcDogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbn1cbnR5cGUgRmlsdGVyU29ydGluZyA9IEFscGhhYmV0aWNGaWx0ZXJTb3J0aW5nIHwgUHJvZHVjdENvdW50RmlsdGVyU29ydGluZyB8IEN1c3RvbUZpbHRlclNvcnRpbmc7XG5pbnRlcmZhY2UgQmFzZUZpbHRlckNvbmZpZyB7XG4gICAgZmlsdGVySWQ6IHN0cmluZztcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nO1xufVxuaW50ZXJmYWNlIER5bmFtaWNGaWx0ZXJDb25maWcgZXh0ZW5kcyBCYXNlRmlsdGVyQ29uZmlnIHtcbiAgICB0eXBlOiBcImR5bmFtaWNcIjtcbiAgICBhdHRyaWJ1dGU6IHN0cmluZztcbiAgICBzb3J0aW5nOiBGaWx0ZXJTb3J0aW5nO1xufVxuaW50ZXJmYWNlIFByaWNlRmlsdGVyQ29uZmlnIGV4dGVuZHMgQmFzZUZpbHRlckNvbmZpZyB7XG4gICAgdHlwZTogXCJwcmljZVwiO1xuICAgIGJ1Y2tldFNpemU6IG51bWJlcjtcbn1cbmV4cG9ydCB0eXBlIEZpbHRlckF0dHJpYnV0ZSA9IER5bmFtaWNGaWx0ZXJDb25maWcgfCBQcmljZUZpbHRlckNvbmZpZztcbmV4cG9ydCB0eXBlIFNlYXJjaFplcm9TdGF0ZVZhcmlhbnQgPSBcImJhY2tncm91bmRUZXJ0aWFyeVwiIHwgXCJiYWNrZ3JvdW5kRGFya1wiIHwgXCJiYWNrZ3JvdW5kUHJpbWFyeVwiO1xuZXhwb3J0IHR5cGUgU2VhcmNoWmVyb1N0YXRlTGF5b3V0ID0gXCJpbnB1dFwiIHwgXCJpY29uXCI7XG5leHBvcnQgdHlwZSBTZWFyY2hJbnB1dFZhcmlhbnQgPSBcInN0YW5kYXJkXCI7XG5leHBvcnQgdHlwZSBTZWFyY2hJY29uVmFyaWFudCA9IFwidGhpblwiIHwgXCJib2xkXCI7XG5leHBvcnQgdHlwZSBTZWFyY2hGaWx0ZXJTaWRlYmFyVmFyaWFudCA9IFwiZGFya0J1dHRvblwiIHwgXCJsaWdodEJ1dHRvblwiO1xuZXhwb3J0IHR5cGUgUHJvZHVjdEdyaWRWYXJpYW50ID0gXCJzdGFuZGFyZFwiIHwgXCJzcXVhcmVcIjtcbnR5cGUgVXNlclF1ZXJ5QnV0dG9uSWNvbiA9IFwibWFnbmlmeWluZ0dsYXNzXCIgfCBcInNlbmRcIiB8IFwibWFnbmlmeWluZ0dsYXNzVGhpblwiIHwgXCJzZW5kQXJyb3dcIiB8IFwic2VhcmNoSWNvblwiO1xuaW50ZXJmYWNlIFVzZXJRdWVyeUJ1dHRvbkNvbmZpZyB7XG4gICAgdmFyaWFudD86IFwiYm94XCIgfCBcInVuZGVybGluZUxpZ2h0XCIgfCBcInVuZGVybGluZURhcmtcIjtcbiAgICBwbGFjZWhvbGRlclRleHQ/OiBzdHJpbmc7XG4gICAgaWNvbjogVXNlclF1ZXJ5QnV0dG9uSWNvbjtcbn1cbmludGVyZmFjZSBUZXJtc0FuZENvbmRpdGlvbnNDb25maWcge1xuICAgIGNvcHk6IHN0cmluZztcbiAgICBsaW5rOiBzdHJpbmc7XG4gICAgbGlua1RleHQ6IHN0cmluZztcbn1cbmludGVyZmFjZSBNZXJjaGFudFZhcmlhbnRTZXR0aW5ncyB7XG4gICAgZHluYW1pY1ZhcmlhbnRzOiB7XG4gICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICAgIHJlZnJlc2hJbnRlcnZhbD86IG51bWJlcjtcbiAgICB9O1xufVxuaW50ZXJmYWNlIEZsb2F0aW5nQ2hhdENvbmZpZyB7XG4gICAgZW5hYmxlV2F0ZXJtYXJrOiBib29sZWFuO1xuICAgIHVzZXJRdWVyeUlucHV0RW5hYmxlZDogYm9vbGVhbjtcbiAgICBpZ25vcmVGaXJzdE1vZGVsUmVzcG9uc2U/OiBib29sZWFuO1xuICAgIG5ldmVyU2hvd1NpbmdsZVByb2R1Y3RDYXJkcz86IGJvb2xlYW47XG4gICAgdGVybXNBbmRDb25kaXRpb25zQ29uZmlnPzogVGVybXNBbmRDb25kaXRpb25zQ29uZmlnO1xuICAgIHN1Z2dlc3Rpb25CdXR0b25Db25maWc/OiBTdWdnZXN0aW9uQnV0dG9uQ29uZmlnO1xuICAgIHJlcGx5SW5wdXRDb25maWc6IFJlcGx5SW5wdXRDb25maWc7XG59XG5pbnRlcmZhY2UgU2VhcmNoQ29uZmlnIHtcbiAgICBlbmFibGVHbG9iYWxTZWFyY2g6IGJvb2xlYW47XG4gICAgc2VhcmNoRmlsdGVyQ29uZmlnOiBGaWx0ZXJBdHRyaWJ1dGVbXTtcbiAgICByZWRpcmVjdFNlYXJjaFJlc3VsdHNVcmw/OiBzdHJpbmc7XG4gICAgYWRkaXRpdmVEeW5hbWljRmlsdGVycz86IGJvb2xlYW47XG59XG50eXBlIE9yZ1VJQ29uZmlnID0ge1xuICAgIHNob3J0TmFtZTogc3RyaW5nO1xuICAgIGlkPzogc3RyaW5nO1xuICAgIGZsb2F0aW5nRW50cnlwb2ludENvbmZpZz86IEZsb2F0aW5nRW50cnlQb2ludENvbmZpZztcbiAgICBjaGF0UHJldmlld0NvbmZpZz86IENoYXRQcmV2aWV3Q29uZmlnO1xuICAgIGN1c3RvbWVyU2VydmljZUludGVncmF0aW9uOiBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbjtcbiAgICBjb252ZXJzYXRpb25hbFNlYXJjaD86IENvbnZlcnNhdGlvbmFsU2VhY2g7XG4gICAgbWVyY2hhbnRPdmVycmlkZUNzcz86IHN0cmluZztcbiAgICBoaWRkZW5FbGVtZW50U2VsZWN0b3JzPzogc3RyaW5nW107XG4gICAgbWVyY2hhbnRWYXJpYW50U2V0dGluZ3M/OiBNZXJjaGFudFZhcmlhbnRTZXR0aW5ncztcbiAgICBmbG9hdGluZ0NoYXRDb25maWc6IEZsb2F0aW5nQ2hhdENvbmZpZztcbiAgICBzZWFyY2hDb25maWc6IFNlYXJjaENvbmZpZztcbiAgICBjaGF0SGVhZGVyOiBDaGF0SGVhZGVyQ29uZmlnO1xuICAgIHN0aWNreUFnZW50U3dpdGNoU3VnZ2VzdGlvbj86IGJvb2xlYW47XG4gICAgcGFydGlhbFZpZXdDb25maWc6IFBhcnRpYWxWaWV3Q29uZmlnO1xuICAgIHdlbGNvbWVTZWN0aW9uQ29uZmlnPzogV2VsY29tZVNlY3Rpb25Db25maWc7XG4gICAgcHJvZHVjdENhcmRDb25maWc/OiBQcm9kdWN0Q2FyZENvbmZpZztcbiAgICBwcm9kdWN0UmV2aWV3Q29uZmlnPzogUHJvZHVjdFJldmlld0NvbmZpZztcbiAgICBwYWdlQ2FyZENvbmZpZz86IFBhZ2VDYXJkQ29uZmlnO1xuICAgIGNoYXRNZXNzYWdlQ29uZmlnOiBDaGF0TWVzc2FnZUNvbmZpZztcbn07XG50eXBlIEluc2VydGlvblBvaW50ID0ge1xuICAgIHNlbGVjdG9yOiBzdHJpbmc7XG4gICAgc2VsZWN0aW9uSW5kZXg/OiBudW1iZXI7XG4gICAgaW5zZXJ0aW9uVHlwZTogRE9NSW5zZXJ0aW9uVHlwZTtcbn07XG50eXBlIFVSTFRlc3QgPSBcInNob3BpZnlcIiB8IFwibnVsbFwiO1xudHlwZSBJZEV4dHJhY3RvciA9IFwic2hvcGlmeS1wcm9kdWN0LWlkXCIgfCBcInNob3BpZnktY29sbGVjdGlvbi1pZFwiIHwgXCJzaG9waWZ5LXByb2R1Y3QtdmFyaWFudC1pZFwiIHwgXCJ1cmwtcmVzb2x2ZXItcHJvZHVjdC1pZFwiIHwgXCJ1cmwtcmVzb2x2ZXItcGxwLWlkXCIgfCBcIm51bGxcIjtcbmRlY2xhcmUgZW51bSBDYXRlZ29yeUV4dHJhY3RvclR5cGUge1xuICAgIFZpc2l0Q2F0ZWdvcnlNYXAgPSBcIlZpc2l0Q2F0ZWdvcnlNYXBcIixcbiAgICBWaXNpdENhdGVnb3J5RGVmYXVsdCA9IFwiVmlzaXRDYXRlZ29yeURlZmF1bHRcIlxufVxuaW50ZXJmYWNlIEJhc2VDYXRlZ29yeUV4dHJhY3RvcjxUIGV4dGVuZHMgQ2F0ZWdvcnlFeHRyYWN0b3JUeXBlPiB7XG4gICAgdHlwZTogVDtcbn1cbmludGVyZmFjZSBWaXNpdENhdGVnb3J5TWFwIGV4dGVuZHMgQmFzZUNhdGVnb3J5RXh0cmFjdG9yPENhdGVnb3J5RXh0cmFjdG9yVHlwZS5WaXNpdENhdGVnb3J5TWFwPiB7XG4gICAgbWFwOiB7XG4gICAgICAgIFtrZXkgaW4gUGFnZVZpc2l0Q2F0ZWdvcnldPzogc3RyaW5nW107XG4gICAgfTtcbn1cbmludGVyZmFjZSBWaXNpdENhdGVnb3J5RGVmYXVsdCBleHRlbmRzIEJhc2VDYXRlZ29yeUV4dHJhY3RvcjxDYXRlZ29yeUV4dHJhY3RvclR5cGUuVmlzaXRDYXRlZ29yeURlZmF1bHQ+IHtcbiAgICB2YWx1ZTogUGFnZVZpc2l0Q2F0ZWdvcnk7XG59XG50eXBlIENhdGVnb3J5RXh0cmFjdG9yID0gVmlzaXRDYXRlZ29yeU1hcCB8IFZpc2l0Q2F0ZWdvcnlEZWZhdWx0O1xudHlwZSBXcmFwcGluZ0VsZW1lbnQgPSB7XG4gICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgZWxlbWVudDogc3RyaW5nO1xuICAgIGluc2VydGlvblR5cGU6IERPTUluc2VydGlvblR5cGU7XG59O1xuZGVjbGFyZSBlbnVtIFBhZ2VWYXJpYW50VGVzdFR5cGUge1xuICAgIFNob3BpZnlQTFAgPSBcIlNob3BpZnlQTFBcIixcbiAgICBTaG9waWZ5UERQID0gXCJTaG9waWZ5UERQXCIsXG4gICAgUGFnZUNhdGVnb3J5ID0gXCJQYWdlQ2F0ZWdvcnlcIixcbiAgICBDYXRhbG9nQ2F0ZWdvcnkgPSBcIkNhdGFsb2dDYXRlZ29yeVwiLFxuICAgIFRvcENhdGFsb2dDYXRlZ29yeSA9IFwiVG9wQ2F0YWxvZ0NhdGVnb3J5XCIsXG4gICAgSGFzUmV2aWV3cyA9IFwiSGFzUmV2aWV3c1wiLFxuICAgIEluQ29sbGVjdGlvbiA9IFwiSW5Db2xsZWN0aW9uXCIsXG4gICAgSGFzTWVyY2hhbnRUYWcgPSBcIkhhc01lcmNoYW50VGFnXCIsXG4gICAgRmVhdHVyZUdhdGUgPSBcIkZlYXR1cmVHYXRlXCIsXG4gICAgUGxwSWQgPSBcIlBscElkXCIsXG4gICAgUXVlcnlQYXJhbSA9IFwiUXVlcnlQYXJhbVwiLFxuICAgIFByb2R1Y3RJZCA9IFwiUHJvZHVjdElkXCIsXG4gICAgVXNlckhhc0ludGVyYWN0ZWQgPSBcIlVzZXJIYXNJbnRlcmFjdGVkXCIsXG4gICAgVXNlckhhc05vdEludGVyYWN0ZWQgPSBcIlVzZXJIYXNOb3RJbnRlcmFjdGVkXCIsXG4gICAgaXNMb2FkaW5nID0gXCJpc0xvYWRpbmdcIixcbiAgICBpc1Byb2R1Y3RDb21wYXJpc29uID0gXCJpc1Byb2R1Y3RDb21wYXJpc29uXCIsXG4gICAgRmFsbGJhY2sgPSBcIkZhbGxiYWNrXCIsXG4gICAgVXJsUmVzb2x2ZXIgPSBcIlVybFJlc29sdmVyXCIsXG4gICAgTnVsbCA9IFwibnVsbFwiXG59XG5pbnRlcmZhY2UgQmFzZVBhZ2VWYXJpYW50VGVzdDxUIGV4dGVuZHMgUGFnZVZhcmlhbnRUZXN0VHlwZT4ge1xuICAgIHRlc3RUeXBlOiBUO1xufVxuaW50ZXJmYWNlIFRvcENhdGFsb2dDYXRlZ29yeSBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5Ub3BDYXRhbG9nQ2F0ZWdvcnk+IHtcbiAgICB0b3BDYXRlZ29yeTogc3RyaW5nW107XG59XG5pbnRlcmZhY2UgQ2F0YWxvZ0NhdGVnb3J5VGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5DYXRhbG9nQ2F0ZWdvcnk+IHtcbiAgICBjYXRlZ29yeTogU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnk7XG59XG5pbnRlcmZhY2UgSGFzUmV2aWV3c1Rlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuSGFzUmV2aWV3cz4ge1xuICAgIHJldmlld01pbmltdW0/OiBudW1iZXI7XG59XG5pbnRlcmZhY2UgSW5Db2xsZWN0aW9uVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5JbkNvbGxlY3Rpb24+IHtcbiAgICBjb2xsZWN0aW9uczogc3RyaW5nW107XG59XG5pbnRlcmZhY2UgSGFzTWVyY2hhbnRUYWdUZXN0IGV4dGVuZHMgQmFzZVBhZ2VWYXJpYW50VGVzdDxQYWdlVmFyaWFudFRlc3RUeXBlLkhhc01lcmNoYW50VGFnPiB7XG4gICAgbWVyY2hhbnRUYWdzOiBzdHJpbmdbXTtcbn1cbmludGVyZmFjZSBTaG9waWZ5UExQVVJMVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5TaG9waWZ5UExQPiB7XG59XG5pbnRlcmZhY2UgU2hvcGlmeVBEUFVSTFRlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuU2hvcGlmeVBEUD4ge1xufVxuaW50ZXJmYWNlIFBhZ2VDYXRlZ29yeVRlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuUGFnZUNhdGVnb3J5PiB7XG4gICAgZXh0cmFjdG9yOiBDYXRlZ29yeUV4dHJhY3Rvcjtcbn1cbmludGVyZmFjZSBGZWF0dXJlR2F0ZVRlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuRmVhdHVyZUdhdGU+IHtcbiAgICBmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzO1xufVxuaW50ZXJmYWNlIFByb2R1Y3RJZFRlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuUHJvZHVjdElkPiB7XG4gICAgcHJvZHVjdElkRXh0cmFjdG9yOiBJZEV4dHJhY3RvcjtcbiAgICBwcm9kdWN0SWRzOiBzdHJpbmdbXTtcbn1cbmludGVyZmFjZSBQbHBJZFRlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuUGxwSWQ+IHtcbiAgICBwbHBJZEV4dHJhY3RvcjogSWRFeHRyYWN0b3I7XG4gICAgcGxwSWRzOiBzdHJpbmdbXTtcbn1cbmludGVyZmFjZSBRdWVyeVBhcmFtVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5RdWVyeVBhcmFtPiB7XG4gICAgcXVlcnlQYXJhbTogc3RyaW5nO1xufVxuaW50ZXJmYWNlIFVzZXJIYXNJbnRlcmFjdGVkVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5Vc2VySGFzSW50ZXJhY3RlZD4ge1xufVxuaW50ZXJmYWNlIFVzZXJIYXNOb3RJbnRlcmFjdGVkVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5Vc2VySGFzTm90SW50ZXJhY3RlZD4ge1xufVxuaW50ZXJmYWNlIElzTG9hZGluZ1Rlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuaXNMb2FkaW5nPiB7XG59XG5pbnRlcmZhY2UgSXNQcm9kdWN0Q29tcGFyaXNvbiBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5pc1Byb2R1Y3RDb21wYXJpc29uPiB7XG59XG5pbnRlcmZhY2UgUGFnZUZhbGxiYWNrVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5GYWxsYmFjaz4ge1xufVxuaW50ZXJmYWNlIFVybFJlc29sdmVyVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5VcmxSZXNvbHZlcj4ge1xufVxuZXhwb3J0IHR5cGUgUGFnZVZhcmlhbnRUZXN0ID0gUGFnZUNhdGVnb3J5VGVzdCB8IFNob3BpZnlQTFBVUkxUZXN0IHwgU2hvcGlmeVBEUFVSTFRlc3QgfCBDYXRhbG9nQ2F0ZWdvcnlUZXN0IHwgVG9wQ2F0YWxvZ0NhdGVnb3J5IHwgSGFzUmV2aWV3c1Rlc3QgfCBJbkNvbGxlY3Rpb25UZXN0IHwgSGFzTWVyY2hhbnRUYWdUZXN0IHwgRmVhdHVyZUdhdGVUZXN0IHwgUHJvZHVjdElkVGVzdCB8IFBscElkVGVzdCB8IFF1ZXJ5UGFyYW1UZXN0IHwgVXNlckhhc0ludGVyYWN0ZWRUZXN0IHwgVXNlckhhc05vdEludGVyYWN0ZWRUZXN0IHwgSXNMb2FkaW5nVGVzdCB8IElzUHJvZHVjdENvbXBhcmlzb24gfCBQYWdlRmFsbGJhY2tUZXN0IHwgVXJsUmVzb2x2ZXJUZXN0O1xuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgc29jaWFsIHByb29mIGVtYmVkZGVkIHdpZGdldFxuICpcbiAqIEBwYXJhbSBoZWFkZXJUaXRsZSAtIFRoZSB0aXRsZSB0ZXh0IHRvIGRpc3BsYXkgaW4gdGhlIHdpZGdldCBoZWFkZXJcbiAqIEBwYXJhbSBzdGF0aWNTdWdnZXN0aW9ucyAtIEEgbGlzdCBvZiBzdHJpbmdzIHRvIGRpc3BsYXkgYXMgc3VnZ2VzdGlvbnMgaW4gdGhlIHdpZGdldFxuICogQHBhcmFtIHN1Z2dlc3Rpb25CdXR0b25WYXJpYW50RGVmYXVsdCAtIFRoZSB2YXJpYW50IG9mIHRoZSBzdWdnZXN0aW9uIGJ1dHRvbiB0byBkaXNwbGF5IGluIHRoZSB3aWRnZXQgZm9vdGVyXG4gKiBAcGFyYW0gc3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnRBY2NlbnQgLSBUaGUgdmFyaWFudCBvZiB0aGUgc3VnZ2VzdGlvbiBidXR0b24gdG8gZGlzcGxheSBpbiB0aGUgd2lkZ2V0IGJvZHlcbiAqIEBwYXJhbSBzdGF0aWNJbWFnZUluZGV4IC0gSW5kZXggb2YgdGhlIGltYWdlVXJsIHRvIHVzZSBmcm9tIHRoZSBwcm9kdWN0IHJlc3BvbnNlXG4gKi9cbmludGVyZmFjZSBTb2NpYWxQcm9vZkNvbmZpZyB7XG4gICAgY3VzdG9tZXJRdWVyeTogc3RyaW5nO1xuICAgIGhlYWRlclRpdGxlOiBzdHJpbmc7XG4gICAgc3RhdGljUExQSW1hZ2VzTGF5b3V0PzogXCJncmlkXCIgfCBcImhvcml6b250YWxcIjtcbiAgICBoZWFkZXJGb250RmFtaWx5Pzogc3RyaW5nO1xuICAgIHN0YXRpY1BMUEltYWdlTmFtZXM/OiBzdHJpbmdbXTtcbiAgICBzdGF0aWNJbWFnZUluZGV4PzogbnVtYmVyO1xuICAgIHN1Z2dlc3Rpb25CdXR0b25TdHJpbmdzOiBzdHJpbmdbXTtcbiAgICBzdWdnZXN0aW9uQnV0dG9uVmFyaWFudERlZmF1bHQ6IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgIHN1Z2dlc3Rpb25CdXR0b25WYXJpYW50QWNjZW50PzogU3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnQ7XG4gICAgc3VnZ2VzdGlvbkJ1dHRvbkRhdGFBdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICB1c2VyUXVlcnlCdXR0b25Db25maWc/OiBVc2VyUXVlcnlCdXR0b25Db25maWc7XG4gICAgbG9nb05hbWU/OiBzdHJpbmc7XG59XG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGNyZWF0aW5nIHRoZSBtb3VudCBwb2ludCBmb3IgYSB3aWRnZXRcbiAqXG4gKiBAcGFyYW0gY2xhc3NOYW1lIC0gT3B0aW9uYWwgY2xhc3MgbmFtZSB0byBhcHBseSB0byB0aGUgbW91bnQgcG9pbnQuIFRhaWx3aW5kIGNsYXNzZXMgYXJlIHN1cHBvcnRlZFxuICogYW5kIGVuY291cmFnZWQuIFVzZSB0aGlzIHBhcmFtZXRlciB0byBzdHlsZSB0aGUgbW91bnRpbmcgY29udGFpbmVyIGZvciB0aGUgd2lkZ2V0LlxuICovXG5leHBvcnQgdHlwZSBXaWRnZXRNb3VudGluZ0NvbmZpZyA9IHtcbiAgICBtb3VudGluZ0NvbmZpZ0lkOiBzdHJpbmc7XG4gICAgY29udGFpbmVySWQ6IHN0cmluZztcbiAgICB0ZXN0SWQ6IHN0cmluZztcbiAgICBwYXJlbnRJbnNlcnRpb25Qb2ludD86IEluc2VydGlvblBvaW50O1xuICAgIGluc2VydGlvblBvaW50OiBJbnNlcnRpb25Qb2ludDtcbiAgICBncmlkSW5zZXJ0aW9uVHlwZT86IEdyaWRJbnNlcnRpb25UeXBlO1xuICAgIHdyYXBwaW5nRWxlbWVudD86IFdyYXBwaW5nRWxlbWVudDtcbiAgICBkaXZDaGVja1NlbGVjdG9yPzogc3RyaW5nO1xuICAgIHN1cHByZXNzaW9uU2VsZWN0b3I/OiBzdHJpbmc7XG4gICAgc3R5bGU/OiBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+O1xuICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICBkYXRhQXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xudHlwZSBTdGF0aWNXaWRnZXRNb3VudGluZyA9IHtcbiAgICBtb3VudGluZ0NvbmZpZ0lkOiBzdHJpbmc7XG4gICAgd2lkZ2V0Q29uZmlnSWQ6IHN0cmluZztcbn07XG50eXBlIER5bmFtaWNXaWRnZXRNb3VudGluZyA9IHtcbiAgICBtb3VudGluZ0NvbmZpZ0lkOiBzdHJpbmc7XG4gICAgbW91bnRpbmdQb2ludFdpZGdldHM6IFdpZGdldERpc3BsYXlUZXN0c1tdO1xufTtcbnR5cGUgV2lkZ2V0RGlzcGxheVRlc3RzID0ge1xuICAgIHRlc3RzOiBQYWdlVmFyaWFudFRlc3RbXTtcbiAgICB3aWRnZXRDb25maWdJZDogc3RyaW5nO1xufTtcbnR5cGUgV2lkZ2V0TW91bnRpbmcgPSBTdGF0aWNXaWRnZXRNb3VudGluZyB8IER5bmFtaWNXaWRnZXRNb3VudGluZztcbmRlY2xhcmUgZW51bSBXaWRnZXRUeXBlIHtcbiAgICBDaGF0UHJldmlldyA9IFwiQ2hhdFByZXZpZXdcIixcbiAgICBTb2NpYWxQcm9vZlYyID0gXCJTb2NpYWxQcm9vZlYyXCIsXG4gICAgQ2hhdFByZXZpZXdWMiA9IFwiQ2hhdFByZXZpZXdWMlwiLFxuICAgIENoYXRQcmV2aWV3SXNMb2FkaW5nID0gXCJDaGF0UHJldmlld0lzTG9hZGluZ1wiLFxuICAgIENoYXRQcmV2aWV3UG9zdEludGVyYWN0aW9uID0gXCJDaGF0UHJldmlld1Bvc3RJbnRlcmFjdGlvblwiLFxuICAgIENoYXRQcmV2aWV3UHJvZHVjdENvbXBhcmlzb24gPSBcIkNoYXRQcmV2aWV3UHJvZHVjdENvbXBhcmlzb25cIixcbiAgICBTdWdnZXN0aW9uQmFyID0gXCJTdWdnZXN0aW9uQmFyXCIsXG4gICAgU3VnZ2VzdGlvbkJhclYyID0gXCJTdWdnZXN0aW9uQmFyVjJcIixcbiAgICBJbWFnZVByb21wdENhcmQgPSBcIkltYWdlUHJvbXB0Q2FyZFwiLFxuICAgIEltYWdlQmFubmVyID0gXCJJbWFnZUJhbm5lclwiLFxuICAgIFNpbmdsZUltYWdlUHJvbXB0ID0gXCJTaW5nbGVJbWFnZVByb21wdFwiLFxuICAgIFNlYXJjaFByb21wdCA9IFwiU2VhcmNoUHJvbXB0XCIsXG4gICAgU2VhcmNoWmVyb1N0YXRlRW50cnlQb2ludCA9IFwiU2VhcmNoWmVyb1N0YXRlRW50cnlQb2ludFwiLFxuICAgIFNlYXJjaFJlc3VsdHNFbnRyeVBvaW50ID0gXCJTZWFyY2hSZXN1bHRzRW50cnlQb2ludFwiLFxuICAgIFNlYXJjaE92ZXJsYXlIb3N0ID0gXCJTZWFyY2hPdmVybGF5SG9zdFwiLFxuICAgIE5vT3AgPSBcIk5vT3BcIlxufVxudHlwZSBXaWRnZXRDb25maWcgPSBDaGF0UHJldmlld1dpZGdldENvbmZpZyB8IFNvY2lhbFByb29mVjJXaWRnZXRDb25maWcgfCBDaGF0UHJldmlld1YyV2lkZ2V0Q29uZmlnIHwgQ2hhdFByZXZpZXdQb3N0SW50ZXJhY3Rpb25XaWRnZXRDb25maWcgfCBDaGF0UHJldmlld0lzTG9hZGluZ1dpZGdldENvbmZpZyB8IENoYXRQcmV2aWV3UHJvZHVjdENvbXBhcmlzb25XaWRnZXRDb25maWcgfCBTdWdnZXN0aW9uQmFyV2lkZ2V0VjJDb25maWcgfCBJbWFnZVByb21wdFdpZGdldENvbmZpZyB8IEltYWdlQmFubmVyV2lkZ2V0Q29uZmlnIHwgU2luZ2xlSW1hZ2VQcm9tcHRXaWRnZXRDb25maWcgfCBTZWFyY2hQcm9tcHRXaWRnZXRDb25maWcgfCBTZWFyY2hFbnRyeVBvaW50V2lkZ2V0Q29uZmlnIHwgU2VhcmNoUmVzdWx0c0VudHJ5UG9pbnRXaWRnZXRDb25maWcgfCBTZWFyY2hPdmVybGF5SG9zdFdpZGdldENvbmZpZyB8IE5vT3BXaWRnZXRDb25maWc7XG5pbnRlcmZhY2UgQmFzZVdpZGdldENvbmZpZzxUIGV4dGVuZHMgV2lkZ2V0VHlwZT4ge1xuICAgIHdpZGdldENvbmZpZ0lkOiBzdHJpbmc7XG4gICAgdHlwZTogVDtcbiAgICBjb250ZW50SWQ/OiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgSW1hZ2VCYW5uZXJXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuSW1hZ2VCYW5uZXI+IHtcbiAgICBpbWFnZVNyYzogc3RyaW5nO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgc3VidGl0bGU6IHN0cmluZztcbiAgICBhc3Npc3RhbnRNZXNzYWdlOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgQ2hhdFByZXZpZXdXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuQ2hhdFByZXZpZXc+IHtcbiAgICB2YXJpYW50OiBcImZpbGxlZFwiIHwgXCJmbGF0XCIgfCBcIm91dGxpbmVkXCI7XG4gICAgYWRkU2VwYXJhdG9ycz86IGJvb2xlYW47XG4gICAgc29jaWFsUHJvb2ZDb25maWc/OiBTb2NpYWxQcm9vZkNvbmZpZztcbiAgICBmb290ZXJDb25maWc/OiBDaGF0UHJldmlld0Zvb3RlckNvbmZpZztcbn1cbmludGVyZmFjZSBDaGF0UHJldmlld0hlYWRlclYyQ29uZmlnIHtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBpbWFnZVNyYz86IHN0cmluZztcbiAgICBpbWFnZUhlaWdodD86IG51bWJlcjtcbn1cbnR5cGUgU2luZ2xlSW1hZ2VDb25maWcgPSB7XG4gICAgbGF5b3V0OiBcInNpbmdsZVwiO1xuICAgIGltYWdlSW5kZXg6IG51bWJlcjtcbn07XG50eXBlIE11bHRpSW1hZ2VDb25maWcgPSB7XG4gICAgbGF5b3V0OiBcImdyaWRcIiB8IFwiaG9yaXpvbnRhbFwiO1xuICAgIGltYWdlTmFtZXM6IHN0cmluZ1tdO1xufTtcbnR5cGUgU29jaWFsUHJvb2ZJbWFnZUNvbmZpZyA9IFNpbmdsZUltYWdlQ29uZmlnIHwgTXVsdGlJbWFnZUNvbmZpZztcbnR5cGUgQ2hhdFByZXZpZXdTdWdnZXN0aW9uQnV0dG9uQ29uZmlnID0ge1xuICAgIGJ1dHRvblN0cmluZ3M6IHN0cmluZ1tdO1xuICAgIGFjY2VudEJ1dHRvblZhcmlhbnRzPzoge1xuICAgICAgICBidXR0b246IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgICAgICBob3ZlcjogU3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnQ7XG4gICAgfTtcbiAgICBidXR0b25WYXJpYW50czoge1xuICAgICAgICBidXR0b246IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgICAgICBob3ZlcjogU3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnQ7XG4gICAgfTtcbiAgICBudW1Sb3dzPzogTnVtUm93cztcbn07XG50eXBlIENoYXRQcmV2aWV3QW5pbWF0ZWRUZXh0Q29uZmlnID0ge1xuICAgIGxlYWRpbmdUZXh0OiBzdHJpbmc7XG4gICAgYW5pbWF0ZWRTdHJpbmdzOiBzdHJpbmdbXTtcbn07XG50eXBlIENoYXRQcmV2aWV3VmFyaWFudCA9IHtcbiAgICB2YXJpYW50OiBcImZsYXRcIjtcbn0gfCB7XG4gICAgdmFyaWFudDogXCJmaWxsZWRcIjtcbiAgICBiYWNrZ3JvdW5kRmlsbENvbG9yOiBzdHJpbmc7XG59IHwge1xuICAgIHZhcmlhbnQ6IFwib3V0bGluZWRcIjtcbn07XG5pbnRlcmZhY2UgQmFzZUNoYXRQcmV2aWV3Q29uZmlnIHtcbiAgICBoZWFkZXJDb25maWc6IENoYXRQcmV2aWV3SGVhZGVyVjJDb25maWc7XG4gICAgc3VnZ2VzdGlvbkJ1dHRvbnNDb25maWc6IENoYXRQcmV2aWV3U3VnZ2VzdGlvbkJ1dHRvbkNvbmZpZztcbiAgICB1c2VyUXVlcnlCdXR0b25Db25maWc6IFVzZXJRdWVyeUJ1dHRvbkNvbmZpZztcbiAgICBjaGF0UHJldmlld1ZhcmlhbnQ6IENoYXRQcmV2aWV3VmFyaWFudDtcbiAgICBhZGRTZXBhcmF0b3JzPzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBDaGF0UHJldmlld1Bvc3RJbnRlcmFjdGlvbldpZGdldENvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZS5DaGF0UHJldmlld1Bvc3RJbnRlcmFjdGlvbj4sIEJhc2VDaGF0UHJldmlld0NvbmZpZyB7XG4gICAgY2hhdFByZXZpZXdWYXJpYW50OiBDaGF0UHJldmlld1ZhcmlhbnQ7XG4gICAgYWRkU2VwYXJhdG9ycz86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgQ2hhdFByZXZpZXdJc0xvYWRpbmdXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuQ2hhdFByZXZpZXdJc0xvYWRpbmc+LCBCYXNlQ2hhdFByZXZpZXdDb25maWcge1xufVxuaW50ZXJmYWNlIENoYXRQcmV2aWV3UHJvZHVjdENvbXBhcmlzb25XaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuQ2hhdFByZXZpZXdQcm9kdWN0Q29tcGFyaXNvbj4sIEJhc2VDaGF0UHJldmlld0NvbmZpZyB7XG4gICAgdXNlTGFyZ2VQcm9kdWN0Q29tcGFyaXNvbj86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgQ2hhdFByZXZpZXdWMldpZGdldENvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZS5DaGF0UHJldmlld1YyPiwgQmFzZUNoYXRQcmV2aWV3Q29uZmlnIHtcbiAgICBhbmltYXRlZFRleHRDb25maWc6IENoYXRQcmV2aWV3QW5pbWF0ZWRUZXh0Q29uZmlnO1xufVxuaW50ZXJmYWNlIFNvY2lhbFByb29mVjJXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuU29jaWFsUHJvb2ZWMj4sIEJhc2VDaGF0UHJldmlld0NvbmZpZyB7XG4gICAgY3VzdG9tZXJRdWVyeT86IHN0cmluZztcbiAgICBpbWFnZUNvbmZpZzogU29jaWFsUHJvb2ZJbWFnZUNvbmZpZztcbn1cbmludGVyZmFjZSBTdWdnZXN0aW9uQmFyV2lkZ2V0VjJDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuU3VnZ2VzdGlvbkJhclYyPiB7XG4gICAgbWV0cmljRGlzcGxheUxvY2F0aW9uOiBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbjtcbiAgICBsb2NhdGlvbjogU3VnZ2VzdGlvbkJhckxvY2F0aW9uRm9yTWV0cmljcztcbiAgICB2YXJpYW50OiBTdWdnZXN0aW9uQnV0dG9uVmFyaWFudDtcbiAgICBob3ZlclZhcmlhbnQ6IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgIGJ1dHRvblRleHRzOiB7XG4gICAgICAgIGRlZmF1bHQ6IHN0cmluZ1tdO1xuICAgICAgICBwcm9kdWN0U3BlY2lmaWM/OiB7XG4gICAgICAgICAgICBbcHJvZHVjdElkOiBzdHJpbmddOiBzdHJpbmdbXTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGJvbGRGaXJzdEJ1dHRvbj86IGJvb2xlYW47XG4gICAgdHdvUm93c09uTW9iaWxlPzogYm9vbGVhbjtcbiAgICBhbmltYXRpb25TcGVlZD86IFwic3RhbmRhcmRcIiB8IFwic2xvd1wiIHwgXCJub25lXCI7XG4gICAgYnV0dG9uQm9yZGVyUmFkaXVzPzogXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiO1xufVxuaW50ZXJmYWNlIEltYWdlUHJvbXB0V2lkZ2V0Q29uZmlnIGV4dGVuZHMgQmFzZVdpZGdldENvbmZpZzxXaWRnZXRUeXBlLkltYWdlUHJvbXB0Q2FyZD4ge1xuICAgIHVybDogc3RyaW5nO1xuICAgIGxpZ2h0VGV4dD86IGJvb2xlYW47XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBzdWJ0aXRsZTogc3RyaW5nW107XG4gICAgc3RhdGljU3VnZ2VzdGlvbkNvcGllczogc3RyaW5nW107XG4gICAgdXNlclF1ZXJ5QnV0dG9uQ29uZmlnOiBVc2VyUXVlcnlCdXR0b25Db25maWc7XG4gICAgZmFsbGJhY2tCYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgU2luZ2xlSW1hZ2VQcm9tcHRXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuU2luZ2xlSW1hZ2VQcm9tcHQ+IHtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIHN0YXRpY1N1Z2dlc3Rpb25Db3BpZXM6IHN0cmluZ1tdO1xuICAgIHVzZXJRdWVyeUJ1dHRvbkNvbmZpZzogVXNlclF1ZXJ5QnV0dG9uQ29uZmlnO1xufVxuaW50ZXJmYWNlIFNlYXJjaEVudHJ5UG9pbnRXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuU2VhcmNoWmVyb1N0YXRlRW50cnlQb2ludD4ge1xuICAgIHNlYXJjaFplcm9TdGF0ZVZhcmlhbnQ6IFNlYXJjaFplcm9TdGF0ZVZhcmlhbnQ7XG4gICAgc2VhcmNoSW5wdXRWYXJpYW50OiBTZWFyY2hJbnB1dFZhcmlhbnQ7XG4gICAgc2VhcmNoSWNvblZhcmlhbnQ/OiBTZWFyY2hJY29uVmFyaWFudDtcbiAgICBzZWFyY2hJY29uU2l6ZT86IG51bWJlcjtcbiAgICBzdWdnZXN0aW9uQnV0dG9uQ29uZmlnOiBTdWdnZXN0aW9uQnV0dG9uQ29uZmlnO1xuICAgIGxheW91dDogU2VhcmNoWmVyb1N0YXRlTGF5b3V0O1xuICAgIHNlYXJjaEJveFBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgYW5pbWF0aW9uU3BlZWQ/OiBcInN0YW5kYXJkXCIgfCBcInNsb3dcIiB8IFwibm9uZVwiO1xuICAgIGNvbXBhY3RMYWJlbD86IHN0cmluZztcbiAgICBpbml0aWFsU3VnZ2VzdGlvbnM/OiBzdHJpbmdbXTtcbiAgICB1c2luZ1BvcnRhbD86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgTm9PcFdpZGdldENvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZS5Ob09wPiB7XG59XG5pbnRlcmZhY2UgU2VhcmNoT3ZlcmxheUhvc3RXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuU2VhcmNoT3ZlcmxheUhvc3Q+IHtcbn1cbmludGVyZmFjZSBTZWFyY2hSZXN1bHRzRW50cnlQb2ludFdpZGdldENvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZS5TZWFyY2hSZXN1bHRzRW50cnlQb2ludD4ge1xuICAgIHNlYXJjaElucHV0VmFyaWFudDogU2VhcmNoSW5wdXRWYXJpYW50O1xuICAgIHNlYXJjaEZpbHRlclNpZGViYXJWYXJpYW50OiBTZWFyY2hGaWx0ZXJTaWRlYmFyVmFyaWFudDtcbiAgICBwcm9kdWN0R3JpZFZhcmlhbnQ6IFByb2R1Y3RHcmlkVmFyaWFudDtcbiAgICBzZWFyY2hCb3hQbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgIG5vUmVzdWx0c0ZvdW5kVGV4dD86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgV2lkZ2V0SGVhZGVyUHJvcHMgZXh0ZW5kcyBUZXN0UHJvcHMge1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIGxvZ28/OiBzdHJpbmc7XG4gICAgbG9nb0hlaWdodD86IG51bWJlcjtcbiAgICBvcmdTaG9ydE5hbWU6IHN0cmluZztcbiAgICB2YXJpYW50PzogU2VhcmNoUHJvbXB0VmFyaWFudDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclF1ZXJ5T3B0aW9ucyB7XG4gICAgZm9vdGVyVmFyaWFudD86IFwic3RhbmRhcmRcIjtcbiAgICByZXBseUJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gICAgcmVwbHlCdXR0b25JY29uPzogXCJtYWduaWZ5aW5nR2xhc3NcIiB8IFwic2VuZFwiIHwgXCJ0aGluTWFnbmlmeWluZ0dsYXNzXCIgfCBcImFpLXNlYXJjaFwiO1xufVxudHlwZSBTZWFyY2hQcm9tcHRWYXJpYW50ID0gXCJwcmltYXJ5XCI7XG5pbnRlcmZhY2UgU2VhcmNoUHJvbXB0V2lkZ2V0Q29uZmlnIGV4dGVuZHMgQmFzZVdpZGdldENvbmZpZzxXaWRnZXRUeXBlLlNlYXJjaFByb21wdD4ge1xuICAgIHZhcmlhbnQ6IFNlYXJjaFByb21wdFZhcmlhbnQ7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBoZWFkZXJDb25maWc6IFdpZGdldEhlYWRlclByb3BzO1xuICAgIHN1Z2dlc3Rpb25CdXR0b25zOiB7XG4gICAgICAgIHZhcmlhbnQ6IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgICAgICBob3ZlclZhcmlhbnQ6IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgICAgICBidXR0b25UZXh0czogc3RyaW5nW107XG4gICAgfTtcbiAgICBmb290ZXJDb25maWc/OiBVc2VyUXVlcnlPcHRpb25zO1xufVxudHlwZSBQYWdlVmFyaWFudEJhc2UgPSB7XG4gICAgdmFyaWFudElkOiBzdHJpbmc7XG4gICAgd2lkZ2V0TW91bnRpbmc6IFdpZGdldE1vdW50aW5nW107XG4gICAgdmFyaWFudFRlc3RzOiBQYWdlVmFyaWFudFRlc3RbXTtcbn07XG50eXBlIFBMUFBhZ2VWYXJpYW50ID0gUGFnZVZhcmlhbnRCYXNlICYge1xuICAgIHZhcmlhbnRUeXBlOiBcInBscFwiO1xuICAgIHBscElkRXh0cmFjdG9yOiBJZEV4dHJhY3Rvcjtcbn07XG50eXBlIFBEUFBhZ2VWYXJpYW50ID0gUGFnZVZhcmlhbnRCYXNlICYge1xuICAgIHZhcmlhbnRUeXBlOiBcInBkcFwiO1xuICAgIHBhcmVudFByb2R1Y3RJZEV4dHJhY3Rvcj86IElkRXh0cmFjdG9yO1xuICAgIHByb2R1Y3RJZEV4dHJhY3RvcjogSWRFeHRyYWN0b3I7XG59O1xudHlwZSBWaXNpdFBhZ2VWYXJpYW50ID0gUGFnZVZhcmlhbnRCYXNlICYge1xuICAgIHZhcmlhbnRUeXBlOiBcInBhZ2VfdmlzaXRcIjtcbn07XG50eXBlIE90aGVyUGFnZVZhcmlhbnQgPSBQYWdlVmFyaWFudEJhc2UgJiB7XG4gICAgdmFyaWFudFR5cGU6IFwib3RoZXJcIjtcbn07XG50eXBlIEhvbWVQYWdlVmFyaWFudCA9IFBhZ2VWYXJpYW50QmFzZSAmIHtcbiAgICB2YXJpYW50VHlwZTogXCJob21lcGFnZVwiO1xufTtcbnR5cGUgU2VhcmNoUGFnZVZhcmlhbnQgPSBQYWdlVmFyaWFudEJhc2UgJiB7XG4gICAgdmFyaWFudFR5cGU6IFwic2VhcmNoXCI7XG59O1xuZXhwb3J0IHR5cGUgUGFnZVZhcmlhbnRDb25maWcgPSBQTFBQYWdlVmFyaWFudCB8IFBEUFBhZ2VWYXJpYW50IHwgVmlzaXRQYWdlVmFyaWFudCB8IE90aGVyUGFnZVZhcmlhbnQgfCBIb21lUGFnZVZhcmlhbnQgfCBTZWFyY2hQYWdlVmFyaWFudDtcbmV4cG9ydCB0eXBlIE9yZ1BhZ2VDb25maWcgPSB7XG4gICAgcGFnZVZhcmlhbnRzOiBQYWdlVmFyaWFudENvbmZpZ1tdO1xuICAgIHdpZGdldENvbmZpZ3M6IFJlY29yZDxzdHJpbmcsIFdpZGdldENvbmZpZz47XG4gICAgbW91bnRpbmdDb25maWdzOiBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRNb3VudGluZ0NvbmZpZz47XG59O1xuZXhwb3J0IHR5cGUgT3JnQ29uZmlnID0gT3JnVUlDb25maWc7XG5leHBvcnQgeyBDYXRlZ29yeUV4dHJhY3RvclR5cGUsIENvbG9yTmFtZXMsIGNvbG9yVmFyLCBQYWdlVmFyaWFudFRlc3RUeXBlLCBXaWRnZXRUeXBlLCB9O1xuZXhwb3J0IGludGVyZmFjZSBFbnZpdmVDb25maWcge1xuICAgIGFtcGxpdHVkZUFwaUtleT86IHN0cmluZztcbiAgICBkYXRhUmVzaWRlbmN5Pzogc3RyaW5nO1xuICAgIGVudj86IHN0cmluZztcbiAgICBiYXNlVXJsPzogc3RyaW5nO1xuICAgIHJlYWN0QXBwTmFtZT86IHN0cmluZztcbiAgICBjZG5Vcmw/OiBzdHJpbmc7XG4gICAgY29udGV4dFNvdXJjZT86IHN0cmluZztcbiAgICBvcmdMZXZlbEFwaUtleT86IHN0cmluZztcbiAgICBvcmdTaG9ydE5hbWU/OiBzdHJpbmc7XG4gICAgaWRlbnRpZnlpbmdQcmVmaXg/OiBzdHJpbmc7XG4gICAgZmVhdHVyZU92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICAgIHZhcmlhbnRVcmxPdmVycmlkZT86IHN0cmluZztcbiAgICB2YXJpYW50SW5mb092ZXJyaWRlPzogYW55O1xuICAgIHNob3c/OiBib29sZWFuO1xuICAgIHB1YmxpY0tleT86IHN0cmluZztcbiAgICBmZWF0dXJlR2F0ZXM/OiBPcmdDb25maWdGZWF0dXJlR2F0ZVtdO1xufVxuZXhwb3J0IHR5cGUgeyBDYXRlZ29yeUV4dHJhY3RvciwgQ2hhdE1lc3NhZ2VWYXJpYW50LCBDaGF0TWVzc2FnZUNvbmZpZywgQ2hhdFByZXZpZXdDb25maWcsIENoYXRQcmV2aWV3SXNMb2FkaW5nV2lkZ2V0Q29uZmlnLCBDaGF0UHJldmlld1Bvc3RJbnRlcmFjdGlvbldpZGdldENvbmZpZywgQ2hhdFByZXZpZXdQcm9kdWN0Q29tcGFyaXNvbldpZGdldENvbmZpZywgQ2hhdFByZXZpZXdTdWdnZXN0aW9uQnV0dG9uQ29uZmlnLCBTb2NpYWxQcm9vZlYyV2lkZ2V0Q29uZmlnLCBDaGF0UHJldmlld0hlYWRlclYyQ29uZmlnLCBDaGF0UHJldmlld1YyV2lkZ2V0Q29uZmlnLCBDaGF0UHJldmlld0Zvb3RlckNvbmZpZywgQ2hhdFByZXZpZXdIZWFkZXJDb25maWcsIENoYXRQcmV2aWV3V2lkZ2V0Q29uZmlnLCBDaGF0UHJldmlld1ZhcmlhbnQsIENvbG9yTWFwcGluZywgQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb24sIEZsb2F0aW5nRW50cnlQb2ludENvbmZpZywgRnVsbEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uLCBJZEV4dHJhY3RvciwgSW1hZ2VCYW5uZXJXaWRnZXRDb25maWcsIEltYWdlUHJvbXB0V2lkZ2V0Q29uZmlnLCBJbnNlcnRpb25Qb2ludCwgTXVsdGlJbWFnZUNvbmZpZywgT3JnVUlDb25maWcsIFBhZ2VDYXJkQ29uZmlnLCBQYWdlQ2FyZFZhcmlhbnQsIFBhZ2VDYXJkSG92ZXJWYXJpYW50LCBQYWdlQ2FyZEljb25WYXJpYW50LCBQcm9kdWN0Q2FyZENvbmZpZywgUHJvZHVjdENhcmRWYXJpYW50LCBQcm9kdWN0Q2FyZExheW91dFZhcmlhbnQsIFByb2R1Y3RDYXJkSG92ZXJWYXJpYW50LCBQcm9kdWN0TGlua0hvdmVyVmFyaWFudCwgUHJvZHVjdExpbmtJY29uVmFyaWFudCwgUHJvZHVjdExpbmtWYXJpYW50LCBQcm9kdWN0UmV2aWV3Q29uZmlnLCBQcm9kdWN0UmV2aWV3U3R5bGVWYXJpYW50LCBQcm9kdWN0UmV2aWV3Q29sb3JWYXJpYW50LCBTZWFyY2hQcm9tcHRWYXJpYW50LCBTZWFyY2hQcm9tcHRXaWRnZXRDb25maWcsIFNlYXJjaFJlc3VsdHNFbnRyeVBvaW50V2lkZ2V0Q29uZmlnLCBTaG93RmxvYXRpbmdCdXR0b25PcHRpb25zLCBTaW5nbGVJbWFnZVByb21wdFdpZGdldENvbmZpZywgU2VhcmNoRW50cnlQb2ludFdpZGdldENvbmZpZywgU2VhcmNoT3ZlcmxheUhvc3RXaWRnZXRDb25maWcsIFNvY2lhbFByb29mQ29uZmlnLCBTdWdnZXN0aW9uQmFyV2lkZ2V0VjJDb25maWcsIFN1Z2dlc3Rpb25CdXR0b25Db25maWcsIFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50LCBVUkxUZXN0LCBVc2VyUXVlcnlCdXR0b25Db25maWcsIFVzZXJRdWVyeUJ1dHRvbkljb24sIFdlbGNvbWVTZWN0aW9uQ29uZmlnLCBXZWxjb21lU2VjdGlvblZhcmlhbnQsIFdlbGNvbWVTZWN0aW9uQ29sb3JWYXJpYW50LCBXaWRnZXRDb25maWcsIFdyYXBwaW5nRWxlbWVudCwgU2VhcmNoQ2FyZFZhcmlhbnQsIFdpZGdldERpc3BsYXlUZXN0cywgTm9PcFdpZGdldENvbmZpZywgV2lkZ2V0TW91bnRpbmcsIFN0YXRpY1dpZGdldE1vdW50aW5nLCBEeW5hbWljV2lkZ2V0TW91bnRpbmcsIFBEUFBhZ2VWYXJpYW50LCBQTFBQYWdlVmFyaWFudCwgVmlzaXRQYWdlVmFyaWFudCwgT3RoZXJQYWdlVmFyaWFudCwgSG9tZVBhZ2VWYXJpYW50LCBTZWFyY2hQYWdlVmFyaWFudCwgTnVtUm93cywgfTtcbiIsImltcG9ydCB7IFBhZ2VWYXJpYW50Q29uZmlnLCBXaWRnZXRNb3VudGluZ0NvbmZpZywgV2lkZ2V0Q29uZmlnLCBPcmdVSUNvbmZpZyB9IGZyb20gXCJzcmMvY29udGV4dHMvdHlwZXNcIjtcbmV4cG9ydCBpbnRlcmZhY2UgRnJvbnRlbmRDb25maWcge1xuICAgIG1lcmNoYW50X292ZXJyaWRlX2Nzcz86IHN0cmluZztcbiAgICBwYWdlVmFyaWFudHM/OiBQYWdlVmFyaWFudENvbmZpZ1tdO1xuICAgIG1vdW50aW5nQ29uZmlncz86IFJlY29yZDxzdHJpbmcsIFdpZGdldE1vdW50aW5nQ29uZmlnPjtcbiAgICB3aWRnZXRDb25maWdzPzogUmVjb3JkPHN0cmluZywgV2lkZ2V0Q29uZmlnPjtcbiAgICB1aUNvbmZpZ3M/OiBPbWl0PE9yZ1VJQ29uZmlnLCBcIm1lcmNoYW50T3ZlcnJpZGVDc3NcIj47XG59XG4iLCJkZWNsYXJlIGVudW0gR29vZ2xlQW5hbHl0aWNzRXZlbnRzIHtcbiAgICBBRERfVE9fQ0FSVF92MSA9IFwiYWRkX3RvX2NhcnRcIixcbiAgICBBRERfVE9fQ0FSVF92MiA9IFwiYWRkVG9DYXJ0XCJcbn1cbmV4cG9ydCB7IEdvb2dsZUFuYWx5dGljc0V2ZW50cyB9O1xuIiwiaW1wb3J0IHsgQ3VzdFNlcnZpY2VBdHRhY2htZW50LCBGb3JtVHlwZSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBPcmRlclJlc3BvbnNlQXR0cmlidXRlcywgUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcywgUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzLCBQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzLCBUZXh0UmVzcG9uc2VBdHRyaWJ1dGVzLCBTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMsIFNlYXJjaFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMsIEFjY2VwdGFibGVGb3JtRmllbGRUeXBlLCBTZWFyY2hQcm9kdWN0RmlsdGVyQXR0cmlidXRlcyB9IGZyb20gJy4vYXBpL3Jlc3BvbnNlJztcbmV4cG9ydCBkZWNsYXJlIGVudW0gTWVzc2FnZVJvbGUge1xuICAgIFVzZXIgPSBcInVzZXJcIixcbiAgICBBc3Npc3RhbnQgPSBcImFzc2lzdGFudFwiXG59XG5leHBvcnQgZGVjbGFyZSBlbnVtIE1lc3NhZ2VUeXBlIHtcbiAgICBUZXh0ID0gXCJ0ZXh0XCIsXG4gICAgU3VnZ2VzdGlvbkNsaWNrZWQgPSBcInN1Z2dlc3Rpb25fY2xpY2tlZFwiLFxuICAgIFByb2R1Y3QgPSBcInByb2R1Y3RcIixcbiAgICBQcm9kdWN0U2VhcmNoID0gXCJwcm9kdWN0X3NlYXJjaFwiLFxuICAgIFJldmlldyA9IFwicmV2aWV3XCIsXG4gICAgUXVlcnlUeXBlZCA9IFwicXVlcnlfdHlwZWRcIixcbiAgICBTZXBhcmF0b3IgPSBcInNlcGFyYXRvclwiLFxuICAgIFBhZ2UgPSBcInBhZ2VcIixcbiAgICBTZWFyY2ggPSBcInNlYXJjaFwiLFxuICAgIEF0dGFjaG1lbnQgPSBcImF0dGFjaG1lbnRcIixcbiAgICBDWEFnZW50UmVzcG9uc2UgPSBcImN4X2FnZW50X3Jlc3BvbnNlXCIsXG4gICAgRm9ybSA9IFwiZm9ybVwiLFxuICAgIE9yZGVyID0gXCJvcmRlclwiLFxuICAgIFByb2R1Y3RTZWFyY2hGaWx0ZXIgPSBcInByb2R1Y3Rfc2VhcmNoX2ZpbHRlclwiXG59XG5leHBvcnQgdHlwZSBNZXNzYWdlID0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgcm9sZTogTWVzc2FnZVJvbGU7XG4gICAgY3JlYXRlZEF0OiBzdHJpbmc7XG59ICYgKFRleHRNZXNzYWdlTWV0YWRhdGEgfCBRdWVyeVR5cGVkTWV0YWRhdGEgfCBTdWdnZXN0aW9uTWVzc2FnZU1ldGFkYXRhIHwgUHJvZHVjdE1lc3NhZ2VNZXRhZGF0YSB8IFByb2R1Y3RTZWFyY2hNZXNzYWdlTWV0YWRhdGEgfCBSZXZpZXdNZXNzYWdlTWV0YWRhdGEgfCBTZXBhcmF0b3JNZXNzYWdlTWV0YWRhdGEgfCBQYWdlTWVzc2FnZU1ldGFkYXRhIHwgU2VhcmNoTWVzc2FnZU1ldGFkYXRhIHwgQXR0YWNobWVudE1ldGFkYXRhIHwgQ1hBZ2VudFJlc3BvbnNlTWV0YWRhdGEgfCBGb3JtTWVzc2FnZU1ldGFkYXRhIHwgT3JkZXJNZXNzYWdlTWV0YWRhdGEgfCBQcm9kdWN0U2VhcmNoRmlsdGVyTWV0YWRhdGEpO1xudHlwZSBBdHRhY2htZW50TWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuQXR0YWNobWVudDtcbiAgICBtZXRhZGF0YToge1xuICAgICAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgICAgICBhdHRhY2htZW50OiBDdXN0U2VydmljZUF0dGFjaG1lbnRbXTtcbiAgICB9O1xufTtcbnR5cGUgQ1hBZ2VudFJlc3BvbnNlTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuQ1hBZ2VudFJlc3BvbnNlO1xuICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICAgICAgYWdlbnROYW1lOiBzdHJpbmc7XG4gICAgfTtcbn07XG50eXBlIFRleHRNZXNzYWdlTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuVGV4dDtcbiAgICBtZXRhZGF0YTogVGV4dFJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcbnR5cGUgUXVlcnlUeXBlZE1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlF1ZXJ5VHlwZWQ7XG4gICAgbWV0YWRhdGE6IFRleHRSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXTtcbn07XG50eXBlIFN1Z2dlc3Rpb25NZXNzYWdlTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuU3VnZ2VzdGlvbkNsaWNrZWQ7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICAgc3VnZ2VzdGlvbklkOiBzdHJpbmc7XG4gICAgICAgIHN1Z2dlc3Rpb25Db250ZW50OiBzdHJpbmc7XG4gICAgfTtcbn07XG5leHBvcnQgdHlwZSBQcm9kdWN0TWVzc2FnZU1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlByb2R1Y3Q7XG4gICAgbWV0YWRhdGE6IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXTtcbn07XG5leHBvcnQgdHlwZSBQcm9kdWN0U2VhcmNoTWVzc2FnZU1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2g7XG4gICAgbWV0YWRhdGE6IFNlYXJjaFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXTtcbn07XG50eXBlIFJldmlld01lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBNZXNzYWdlVHlwZS5SZXZpZXc7XG4gICAgbWV0YWRhdGE6IFJldmlld1Jlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcbnR5cGUgU2VwYXJhdG9yTWVzc2FnZU1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlNlcGFyYXRvcjtcbn07XG50eXBlIFBhZ2VNZXNzYWdlTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuUGFnZTtcbiAgICBtZXRhZGF0YTogUGFnZVJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcbnR5cGUgU2VhcmNoTWVzc2FnZU1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlNlYXJjaDtcbiAgICBtZXRhZGF0YTogU2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ107XG59O1xudHlwZSBQcm9kdWN0U2VhcmNoRmlsdGVyTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaEZpbHRlcjtcbiAgICBtZXRhZGF0YTogU2VhcmNoUHJvZHVjdEZpbHRlckF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXTtcbn07XG5leHBvcnQgdHlwZSBGb3JtRmllbGQgPSB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICB0eXBlOiBBY2NlcHRhYmxlRm9ybUZpZWxkVHlwZTtcbiAgICByZXF1aXJlZDogYm9vbGVhbjtcbiAgICBmb3JtYXQ/OiAnZW1haWwnO1xuICAgIHZhbHVlPzogc3RyaW5nO1xufTtcbnR5cGUgRm9ybU1lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBNZXNzYWdlVHlwZS5Gb3JtO1xuICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIGZvcm1UeXBlPzogRm9ybVR5cGU7XG4gICAgICAgIGZpZWxkczogRm9ybUZpZWxkW107XG4gICAgfTtcbn07XG50eXBlIE9yZGVyTWVzc2FnZU1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLk9yZGVyO1xuICAgIG1ldGFkYXRhOiBPcmRlclJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcbmV4cG9ydCB7fTtcbiIsImV4cG9ydCBpbnRlcmZhY2UgTW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlciB7XG4gICAgcm93SW5kZXg6IG51bWJlcjtcbn1cbiIsImV4cG9ydCBkZWNsYXJlIGNvbnN0IE9yZ1Nob3J0TmFtZToge1xuICAgIHJlYWRvbmx5IENvdGVyaWU6IFwiY290ZXJpZVwiO1xuICAgIHJlYWRvbmx5IEZvckxvdmVBbmRMZW1vbnM6IFwiZm9yLWxvdmUtYW5kLWxlbW9uc1wiO1xuICAgIHJlYWRvbmx5IEdyZWVucGFuOiBcImdyZWVucGFuXCI7XG4gICAgcmVhZG9ubHkgSm9yZGFuQ3JhaWc6IFwiam9yZGFuLWNyYWlnXCI7XG4gICAgcmVhZG9ubHkgTGFycnlBbmRTZXJnZXM6IFwibGFycnlfYW5kX3Nlcmdlc1wiO1xuICAgIHJlYWRvbmx5IExlYXBzQW5kUmVib3VuZHM6IFwibGVhcHMtYW5kLXJlYm91bmRzXCI7XG4gICAgcmVhZG9ubHkgTWFudHJhQnJhbmQ6IFwibWFudHJhLWJyYW5kXCI7XG4gICAgcmVhZG9ubHkgU3Bhbng6IFwic3BhbnhcIjtcbiAgICByZWFkb25seSBTcGFueFN0YWdpbmc6IFwic3RhZ2luZy1zcGFueFwiO1xuICAgIHJlYWRvbmx5IFN1cGVyZ29vcDogXCJzdXBlcmdvb3BcIjtcbiAgICByZWFkb25seSBVbmlxdWVWaW50YWdlOiBcInVuaXF1ZS12aW50YWdlXCI7XG4gICAgcmVhZG9ubHkgSmFja0FyY2hlcjogXCJqYWNrLWFyY2hlclwiO1xuICAgIHJlYWRvbmx5IFNraW5QZXJmZWN0aW9uOiBcInNraW4tcGVyZmVjdGlvblwiO1xuICAgIHJlYWRvbmx5IExvb2tPcHRpYzogXCJsb29rLW9wdGljXCI7XG4gICAgcmVhZG9ubHkgRml2ZUNiZDogXCJmaXZlLWNiZFwiO1xuICAgIHJlYWRvbmx5IFNuYXBTdXBwbGVtZW50czogXCJzbmFwLXN1cHBsZW1lbnRzXCI7XG4gICAgcmVhZG9ubHkgTG9uZ2V2aXR5cng6IFwibG9uZ2V2aXR5cnhcIjtcbiAgICByZWFkb25seSBWZW5hQ2JkOiBcInZlbmEtY2JkXCI7XG4gICAgcmVhZG9ubHkgTWVkdGVycmE6IFwibWVkdGVycmFcIjtcbiAgICByZWFkb25seSBNb2RlbGxzOiBcIm1vZGVsbHNcIjtcbiAgICByZWFkb25seSBQcmVzc2VkRmxvcmFsOiBcInByZXNzZWQtZmxvcmFsXCI7XG4gICAgcmVhZG9ubHkgS2luZHJlZEJyYXZlbHk6IFwia2luZHJlZC1icmF2ZWx5XCI7XG4gICAgcmVhZG9ubHkgV2luZUVudGh1c2lhc3Q6IFwid2luZS1lbnRodXNpYXN0XCI7XG4gICAgcmVhZG9ubHkgSG9tZWdyb3duQ2FubmFiaXM6IFwiaG9tZWdyb3duLWNhbm5hYmlzXCI7XG4gICAgcmVhZG9ubHkgRHJlYW1sYW5kQmFieTogXCJkcmVhbWxhbmQtYmFieVwiO1xuICAgIHJlYWRvbmx5IEJhbmRvbGllcjogXCJiYW5kb2xpZXJcIjtcbiAgICByZWFkb25seSBXZXN0b25Kb25Cb3VjaGVyOiBcIndlc3Rvbi1qb24tYm91Y2hlclwiO1xuICAgIHJlYWRvbmx5IEt1dEZyb21UaGVLbG90aDogXCJrdXQtZnJvbS10aGUta2xvdGhcIjtcbiAgICByZWFkb25seSBHcm9vdmVMaWZlOiBcImdyb292ZS1saWZlXCI7XG4gICAgcmVhZG9ubHkgQ2FycGU6IFwiY2FycGVcIjtcbiAgICByZWFkb25seSBXb2xmVGFjdGljYWw6IFwid29sZi10YWN0aWNhbFwiO1xuICAgIHJlYWRvbmx5IFdvbGZNYXR0cmVzczogXCJ3b2xmbWF0dHJlc3NcIjtcbiAgICByZWFkb25seSBEZWZhdWx0OiBcImRlZmF1bHRcIjtcbn07XG4iLCJleHBvcnQgZGVjbGFyZSBlbnVtIFByb2R1Y3RFeHBlcmltZW50IHtcbiAgICBEZWZhdWx0ID0gXCJkZWZhdWx0XCJcbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgU3BhbnhUYWtlQVF1aXpDdGFQYXJhbWV0ZXIge1xuICAgIHRleHQ/OiBzdHJpbmc7XG4gICAgdmFsdWU/OiBzdHJpbmc7XG59XG4iLCIvKipcbiAqIEVudW0gb2YgYWxsIHdpZGdldCBuYW1lcy4gVGhlc2UgYXJlIHdpZGdldHMgdGhhdCBhcmUgcmVuZGVyZWQgYW5kIGludGVncmF0ZWQgaW50b1xuICogYSBtZXJjaGFudCdzIHdlYnNpdGUuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGVudW0gU3BpZmZ5V2lkZ2V0cyB7XG4gICAgSW1hZ2VCYW5uZXIgPSBcImltYWdlX2Jhbm5lclwiLFxuICAgIEltYWdlUHJvbXB0Q2FyZCA9IFwiaW1hZ2VfcHJvbXB0X2NhcmRcIixcbiAgICBTaW5nbGVJbWFnZVByb21wdCA9IFwic2luZ2xlX2ltYWdlX3Byb21wdFwiLFxuICAgIEVtYmVkZGVkV2lkZ2V0ID0gXCJlbWJlZGRlZF93aWRnZXRcIixcbiAgICBGbG9hdGluZ0J1dHRvbiA9IFwiZmxvYXRpbmdfYnV0dG9uXCIsXG4gICAgU3VnZ2VzdGlvbkJhciA9IFwic3VnZ2VzdGlvbl9iYXJcIixcbiAgICBTZWFyY2hQcm9tcHQgPSBcInNlYXJjaF9wcm9tcHRcIixcbiAgICBHbG9iYWxTZWFyY2ggPSBcImdsb2JhbF9zZWFyY2hcIixcbiAgICBTZWFyY2hSZXN1bHRzID0gXCJzZWFyY2hfcmVzdWx0c1wiLFxuICAgIEdsb2JhbFNlYXJjaEVudHJ5UG9pbnQgPSBcImdsb2JhbF9zZWFyY2hfZW50cnlfcG9pbnRcIlxufVxuIiwiaW1wb3J0IHsgQ29sb3JNYXBwaW5nLCBPcmdQYWdlQ29uZmlnLCBPcmdVSUNvbmZpZyB9IGZyb20gXCJzcmMvY29udGV4dHMvdHlwZXNcIjtcbmV4cG9ydCB7IE9yZ1Nob3J0TmFtZSB9IGZyb20gXCIuL29yZ3NFbnVtXCI7XG5leHBvcnQgdHlwZSBCYXNpY09yZ0luZm9UeXBlID0ge1xuICAgIHNob3J0TmFtZTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkb21haW46IHN0cmluZztcbiAgICBkZWZhdWx0UHJvZHVjdElkOiBzdHJpbmc7XG4gICAgYWx3YXlzRW5hYmxlZE1lcmNoYW50czogYm9vbGVhbjtcbiAgICBvcmdVSUNvbmZpZzogKCkgPT4gT3JnVUlDb25maWcgfCB1bmRlZmluZWQ7XG4gICAgb3JnUGFnZUNvbmZpZzogKCkgPT4gT3JnUGFnZUNvbmZpZztcbiAgICBvcmdDb2xvcnM6ICgpID0+IENvbG9yTWFwcGluZyB8IHt9O1xufTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGdldE9yZ0luZm86IChvcmdTaG9ydE5hbWU/OiBzdHJpbmcpID0+IFByb21pc2U8QmFzaWNPcmdJbmZvVHlwZT47XG4iLCJpbXBvcnQgeyBDb250ZXh0IGFzIEFwaUNvbnRleHQgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlsaXR5VHlwZXMnO1xuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0IGV4dGVuZHMgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaUNvbnRleHQ+IHtcbn1cbiIsImltcG9ydCB7IEdlbmVyYXRpb25QYXJhbXMgYXMgQXBpR2VuZXJhdGlvblBhcmFtcyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXAgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxpdHlUeXBlcyc7XG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRpb25QYXJhbXMgZXh0ZW5kcyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpR2VuZXJhdGlvblBhcmFtcz4ge1xufVxuIiwiaW1wb3J0IHsgUERQQXR0cmlidXRlcyBhcyBBcGlQRFBBdHRyaWJ1dGVzLCBQTFBBdHRyaWJ1dGVzIGFzIEFwaVBMUEF0dHJpYnV0ZXMsIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzIGFzIEFwaVF1ZXJ5VHlwZWRBdHRyaWJ1dGVzLCBTZWFyY2hBdHRyaWJ1dGVzIGFzIEFwaVNlYXJjaEF0dHJpYnV0ZXMsIFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyBhcyBBcGlTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMsIFVzZXJFdmVudCBhcyBBcGlVc2VyRXZlbnQsIEZvcm1UeXBlLCBQYWdlVmlzaXRDYXRlZ29yeSwgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlsaXR5VHlwZXMnO1xuZXhwb3J0IGludGVyZmFjZSBQRFBBdHRyaWJ1dGVzIGV4dGVuZHMgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVBEUEF0dHJpYnV0ZXM+IHtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUExQQXR0cmlidXRlcyBleHRlbmRzIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlQTFBBdHRyaWJ1dGVzPiB7XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaEF0dHJpYnV0ZXMgZXh0ZW5kcyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpU2VhcmNoQXR0cmlidXRlcz4ge1xufVxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVR5cGVkQXR0cmlidXRlcyBleHRlbmRzIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlRdWVyeVR5cGVkQXR0cmlidXRlcz4ge1xufVxuZXhwb3J0IGludGVyZmFjZSBGb3JtU3VibWl0dGVkQXR0cmlidXRlcyB7XG4gICAgZmlsbGVkU2NoZW1hOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBmb3JtUmVzcG9uc2VJZDogc3RyaW5nO1xuICAgIGZvcm1UeXBlOiBGb3JtVHlwZTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZVZpc2l0QXR0cmlidXRlcyB7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgcGFnZVZpc2l0Q2F0ZWdvcnk6IFBhZ2VWaXNpdENhdGVnb3J5O1xufVxuZXhwb3J0IGludGVyZmFjZSBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMgZXh0ZW5kcyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzPiB7XG59XG5leHBvcnQgdHlwZSBVc2VyRXZlbnRBdHRyaWJ1dGVzID0gUERQQXR0cmlidXRlcyB8IFBMUEF0dHJpYnV0ZXMgfCBRdWVyeVR5cGVkQXR0cmlidXRlcyB8IFNlYXJjaEF0dHJpYnV0ZXMgfCBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMgfCBQYWdlVmlzaXRBdHRyaWJ1dGVzO1xuZXhwb3J0IGludGVyZmFjZSBQRFBVc2VyRXZlbnQge1xuICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5QZHBWaXNpdCB8IFVzZXJFdmVudENhdGVnb3J5LkFkZFRvQ2FydDtcbiAgICBhdHRyaWJ1dGVzOiBQRFBBdHRyaWJ1dGVzO1xufVxuZXhwb3J0IGludGVyZmFjZSBQTFBVc2VyRXZlbnQge1xuICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5QbHBWaXNpdDtcbiAgICBhdHRyaWJ1dGVzOiBQTFBBdHRyaWJ1dGVzO1xufVxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVR5cGVkVXNlckV2ZW50IHtcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZDtcbiAgICBhdHRyaWJ1dGVzOiBRdWVyeVR5cGVkQXR0cmlidXRlcztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoVXNlckV2ZW50IHtcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuU2VhcmNoO1xuICAgIGF0dHJpYnV0ZXM6IFNlYXJjaEF0dHJpYnV0ZXM7XG59XG5leHBvcnQgaW50ZXJmYWNlIFN1Z2dlc3Rpb25zQ2xpY2tlZFVzZXJFdmVudCB7XG4gICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkO1xuICAgIGF0dHJpYnV0ZXM6IFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQXBwTG9hZGVkVXNlckV2ZW50IHtcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuQXBwTG9hZGVkO1xufVxuZXhwb3J0IGludGVyZmFjZSBBcHBVbmxvYWRlZEV2ZW50IHtcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuQXBwVW5sb2FkZWQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VWaXNpdEV2ZW50IHtcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuUGFnZVZpc2l0O1xuICAgIGF0dHJpYnV0ZXM6IFBhZ2VWaXNpdEF0dHJpYnV0ZXM7XG59XG5leHBvcnQgaW50ZXJmYWNlIEZvcm1TdWJtaXR0ZWQge1xuICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5Gb3JtU3VibWl0dGVkO1xuICAgIGF0dHJpYnV0ZXM6IEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzO1xufVxuZXhwb3J0IHR5cGUgVXNlckV2ZW50ID0gQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPFBpY2s8QXBpVXNlckV2ZW50LCAnZXZlbnRfaWQnIHwgJ2NhdGVnb3J5JyB8ICdjcmVhdGVkX2F0Jz4+ICYgKFN1Z2dlc3Rpb25zQ2xpY2tlZFVzZXJFdmVudCB8IEFwcExvYWRlZFVzZXJFdmVudCB8IFBEUFVzZXJFdmVudCB8IFF1ZXJ5VHlwZWRVc2VyRXZlbnQgfCBTZWFyY2hVc2VyRXZlbnQgfCBBcHBVbmxvYWRlZEV2ZW50IHwgUExQVXNlckV2ZW50IHwgUGFnZVZpc2l0RXZlbnQgfCBGb3JtU3VibWl0dGVkKTtcbiIsImltcG9ydCB7IENvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgVXNlckV2ZW50IH0gZnJvbSAnLi91c2VyRXZlbnQnO1xuaW1wb3J0IHsgR2VuZXJhdGlvblBhcmFtcyB9IGZyb20gJy4vZ2VuZXJhdGlvblBhcmFtcyc7XG5leHBvcnQgaW50ZXJmYWNlIE5leHRNZXNzYWdlUmVxdWVzdCB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIHVzZXJFdmVudHM/OiBVc2VyRXZlbnRbXTtcbiAgICBmZWF0dXJlRmxhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgICBnZW5lcmF0aW9uUGFyYW1zPzogR2VuZXJhdGlvblBhcmFtcztcbn1cbiIsImltcG9ydCB7IFByb2R1Y3RTZWFyY2hSZXNwb25zZSBhcyBBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2UsIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMgYXMgQXBpUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcywgU2VhcmNoUmVzcG9uc2VQcm9kdWN0IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzJztcbmV4cG9ydCBpbnRlcmZhY2UgUHJvZHVjdFNlYXJjaFJlc3BvbnNlIGV4dGVuZHMgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVByb2R1Y3RTZWFyY2hSZXNwb25zZT4ge1xufVxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzIGV4dGVuZHMgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXM+IHtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVzdWx0IHtcbiAgICBwcm9kdWN0czogU2VhcmNoUmVzcG9uc2VQcm9kdWN0W107XG4gICAgZmlsdGVyczogc3RyaW5nW107XG4gICAgZ2VuZXJhdGVkUXVlcnk/OiBzdHJpbmc7XG4gICAgdG90YWxQcm9kdWN0Q291bnQ6IG51bWJlcjtcbiAgICBzZWFyY2hSZXNwb25zZUlkOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFBhcmFtcyB7XG4gICAgcXVlcnk6IHN0cmluZztcbiAgICBsaW1pdD86IG51bWJlcjtcbn1cbiIsImltcG9ydCB7IFN1Z2dlc3Rpb24gYXMgQXBpU3VnZ2VzdGlvbiB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXAgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxpdHlUeXBlcyc7XG5leHBvcnQgaW50ZXJmYWNlIFN1Z2dlc3Rpb24gZXh0ZW5kcyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpU3VnZ2VzdGlvbj4ge1xufVxuIiwiaW1wb3J0IHsgVXNlckV2ZW50IH0gZnJvbSAnLi91c2VyRXZlbnQnO1xuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5leHBvcnQgaW50ZXJmYWNlIFN1cHBvcnRlZEV2ZW50UmVxdWVzdCB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIHVzZXJFdmVudDogVXNlckV2ZW50O1xufVxuIiwiZGVjbGFyZSBjb25zdCBnZXRNZXJjaGFudE9yZ0lkUXVlcnkgPSBcIlxcbiAgcXVlcnkge1xcbiAgICBtZSB7XFxuICAgICAgb3JnIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI7XG5leHBvcnQgeyBnZXRNZXJjaGFudE9yZ0lkUXVlcnkgfTtcbiIsImltcG9ydCB0eXBlIHsgQmFzZUVjb21tZXJjZUV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG4vKipcbiAqIENoZWNrcyBpZiBhbiBldmVudCBpcyBhIGJhc2UgR29vZ2xlIEFuYWx5dGljcyBlY29tbWVyY2UgZXZlbnQuXG4gKlxuICogQHBhcmFtIGRhdGEgVGhlIGV2ZW50IHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGV2ZW50IGlzIGEgYmFzZSBlY29tbWVyY2UgZXZlbnQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNCYXNlRWNvbW1lcmNlRXZlbnQ6IChkYXRhOiB1bmtub3duKSA9PiBkYXRhIGlzIEJhc2VFY29tbWVyY2VFdmVudDtcbiIsImltcG9ydCB0eXBlIHsgR0E0RWNvbW1lcmNlRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbi8qKlxuICogQ2hlY2tzIGlmIGFuIGV2ZW50IGlzIGEgR29vZ2xlIEFuYWx5dGljcyA0IGVjb21tZXJjZSBldmVudC5cbiAqXG4gKiBAcGFyYW0gZGF0YSBUaGUgZXZlbnQgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgYSBHQTQgZWNvbW1lcmNlIGV2ZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzR0E0RWNvbW1lcmNlRXZlbnQ6IChkYXRhOiB1bmtub3duKSA9PiBkYXRhIGlzIEdBNEVjb21tZXJjZUV2ZW50O1xuIiwiaW1wb3J0IHR5cGUgeyBVQUVjb21tZXJjZUV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG4vKipcbiAqIENoZWNrcyBpZiBhbiBldmVudCBpcyBhIGxlZ2FjeSBVbml2ZXJzYWwgQW5hbHl0aWNzIGVjb21tZXJjZSBldmVudC5cbiAqXG4gKiBAcGFyYW0gZGF0YSBUaGUgZXZlbnQgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgYSBsZWdhY3kgVUEgZWNvbW1lcmNlIGV2ZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzTGVnYWN5VUFFY29tbWVyY2VFdmVudDogKGRhdGE6IHVua25vd24pID0+IGRhdGEgaXMgVUFFY29tbWVyY2VFdmVudDtcbiIsImludGVyZmFjZSBNb2JpbGVQbHBDaGF0UGxhY2VtZW50UGFyYW1ldGVyIHtcbiAgICByb3dfaW5kZXg6IG51bWJlcjtcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzTW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlcjogKHZhbHVlOiB1bmtub3duKSA9PiB2YWx1ZSBpcyBNb2JpbGVQbHBDaGF0UGxhY2VtZW50UGFyYW1ldGVyO1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgU3BhbnhUYWtlQVF1aXpDdGFQYXJhbWV0ZXIgfSBmcm9tICcuLi9zcGFueFRha2VBUXVpekN0YVBhcmFtZXRlcic7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc1NwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyOiAodmFsdWU6IHVua25vd24pID0+IHZhbHVlIGlzIFNwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyO1xuIiwiaW1wb3J0IHsgVmFyaWFudEluZm8gfSBmcm9tICcuLi92YXJpYW50SW5mbyc7XG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGEgdmFsaWQgVmFyaWFudEluZm8uXG4gKlxuICogQHBhcmFtIHZhcmlhbnRJbmZvIC0gVGhlIHVua25vd24gb2JqZWN0IHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRhdGEgaXMgYSB2YWxpZCBWYXJpYW50SW5mbyBvYmplY3QsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNWYXJpYW50SW5mbzogKHZhcmlhbnRJbmZvOiB1bmtub3duKSA9PiB2YXJpYW50SW5mbyBpcyBWYXJpYW50SW5mbztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSBvZiBhIHNwZWNpZmljIHR5cGVcbiAqXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBjaGVja1xuICogQHBhcmFtIHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSB0byBjaGVja1xuICogQHBhcmFtIHR5cGUgLSBUaGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBpc09wdGlvbmFsIC0gV2hldGhlciB0aGUgcHJvcGVydHkgaXMgb3B0aW9uYWwgKGRlZmF1bHRzIHRvIGZhbHNlKVxuICpcbiAqIEByZXR1cm5zIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkgb2YgdGhlIHNwZWNpZmllZCB0eXBlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGhhc1Byb3BlcnR5T2ZUeXBlOiA8VCBleHRlbmRzIG9iamVjdD4ob2JqOiB1bmtub3duLCBwcm9wOiBrZXlvZiBULCB0eXBlOiBcInN0cmluZ1wiIHwgXCJudW1iZXJcIiB8IFwiYm9vbGVhblwiIHwgXCJvYmplY3RcIiB8IFwiYXJyYXlcIiwgaXNPcHRpb25hbD86IGJvb2xlYW4pID0+IG9iaiBpcyBUO1xuIiwiaW1wb3J0IHsgQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3Jlc3BvbnNlR2VuZXJpY3MnO1xuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIHRoZSBwcm92aWRlZCBkYXRhIGhhcyB0aGUgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzICh3aXRoIHRoZSBjb3JyZWN0IHR5cGVzKSBvZlxuICogYSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVcbiAqXG4gKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZGF0YSBoYXMgdGhlIGNvcnJlY3QgcHJvcGVydGllcywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlczogKGRhdGE6IHVua25vd24pID0+IGRhdGEgaXMgQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlcztcbiIsImltcG9ydCB7IEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzQXBpRm9ybVN1Ym1pdHRlZFJlc3BvbnNlQXR0cmlidXRlczogKGRhdGE6IHVua25vd24pID0+IGRhdGEgaXMgRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXM7XG4iLCJpbXBvcnQgeyBPcmRlckl0ZW1JbmZvLCBPcmRlclJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5leHBvcnQgaW50ZXJmYWNlIEFwaU9yZGVySXRlbUluZm8gZXh0ZW5kcyBPbWl0PE9yZGVySXRlbUluZm8sICdkZWxpdmVyZWRfYXQnIHwgJ2VzdGltYXRlZF9kZWxpdmVyeV9hdCcgfCAnaW5fdHJhbnNpdF9hdCc+IHtcbiAgICBkZWxpdmVyZWRfYXQ/OiBzdHJpbmc7XG4gICAgZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0Pzogc3RyaW5nO1xuICAgIGluX3RyYW5zaXRfYXQ/OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEFwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzIGV4dGVuZHMgT21pdDxPcmRlclJlc3BvbnNlQXR0cmlidXRlcywgJ2NyZWF0ZWRfYXQnIHwgJ2xhdGVzdF9ldmVudF9kYXRlJyB8ICdsaW5lX2l0ZW1zJz4ge1xuICAgIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgICBsYXRlc3RfZXZlbnRfZGF0ZTogc3RyaW5nO1xuICAgIGxpbmVfaXRlbXM6IEFwaU9yZGVySXRlbUluZm9bXTtcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzQXBpT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXM6IChkYXRhOiB1bmtub3duKSA9PiBkYXRhIGlzIEFwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzO1xuIiwiaW1wb3J0IHsgT3JnYW5pemF0aW9uQ29uZmlnIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmludGVyZmFjZSBBcGlPcmdBbmFseXRpY3NDb25maWdBbXBsaXR1ZGUge1xuICAgIHNlc3Npb25fcmVwbGF5X2VuYWJsZWQ6IGJvb2xlYW47XG4gICAgc2Vzc2lvbl9yZXBsYXlfc2FtcGxlX3JhdGU6IG51bWJlcjtcbiAgICB0cmFja2luZ19lbmFibGVkOiBib29sZWFuO1xufVxuaW50ZXJmYWNlIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0N1c3RvbWVyU2VydmljZSB7XG4gICAgcHJvdmlkZXI6IHN0cmluZztcbn1cbmludGVyZmFjZSBBcGlPcmdBbmFseXRpY3NDb25maWdHb29nbGVBbmFseXRpY3Mge1xuICAgIG1lYXN1cmVtZW50X2lkOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgQXBpT3JnQW5hbHl0aWNzQ29uZmlnIHtcbiAgICBhbXBsaXR1ZGU/OiBBcGlPcmdBbmFseXRpY3NDb25maWdBbXBsaXR1ZGU7XG4gICAgY3VzdG9tZXJfc2VydmljZT86IEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0N1c3RvbWVyU2VydmljZTtcbiAgICBnb29nbGVfYW5hbHl0aWNzPzogQXBpT3JnQW5hbHl0aWNzQ29uZmlnR29vZ2xlQW5hbHl0aWNzO1xufVxuZXhwb3J0IGludGVyZmFjZSBBcGlPcmdhbml6YXRpb25Db25maWcgZXh0ZW5kcyBPcmdhbml6YXRpb25Db25maWcge1xuICAgIGNvbmZpZzogQXBpT3JnQW5hbHl0aWNzQ29uZmlnO1xufVxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzQXBpT3JnYW5pemF0aW9uQ29uZmlnOiAoZGF0YTogdW5rbm93bikgPT4gZGF0YSBpcyBBcGlPcmdhbml6YXRpb25Db25maWc7XG5leHBvcnQge307XG4iLCJpbXBvcnQgeyBTdGF0c2lnRXhwZXJpbWVudCBhcyBBcGlPcmdDb25maWdFeHBlcmltZW50LCBTdGF0c2lnRmVhdHVyZUdhdGUgYXMgQXBpT3JnQ29uZmlnRmVhdHVyZUdhdGUsIE9yZ2FuaXphdGlvblNldHRpbmdzIGFzIEFwaU9yZ0NvbmZpZ09yZ2FuaXphdGlvblNldHRpbmdzIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IEFwaU9yZ2FuaXphdGlvbkNvbmZpZyB9IGZyb20gJy4vaXNBcGlPcmdhbml6YXRpb25Db25maWcnO1xuaW50ZXJmYWNlIEFwaU9yZ0NvbmZpZ1Jlc3VsdHMge1xuICAgIGNvbmZpZ3M6IEFwaU9yZ2FuaXphdGlvbkNvbmZpZ1tdO1xuICAgIGV4cGVyaW1lbnRzOiBBcGlPcmdDb25maWdFeHBlcmltZW50W107XG4gICAgZ2F0ZXM6IEFwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlW107XG4gICAgb3JnOiBBcGlPcmdDb25maWdPcmdhbml6YXRpb25TZXR0aW5ncztcbn1cbi8qKlxuICpcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc0FwaU9yZ0NvbmZpZ1Jlc3VsdHM6IChkYXRhOiB1bmtub3duKSA9PiBkYXRhIGlzIFJlcXVpcmVkPEFwaU9yZ0NvbmZpZ1Jlc3VsdHM+O1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgQXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3Jlc3BvbnNlR2VuZXJpY3MnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzOiAob2JqOiB1bmtub3duKSA9PiBvYmogaXMgQXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcztcbiIsImltcG9ydCB7IFBMUEF0dHJpYnV0ZXMsIFBMUElkQXR0cmlidXRlcyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc0FwaVBMUElkQXR0cmlidXRlOiAoZGF0YTogdW5rbm93bikgPT4gZGF0YSBpcyBQTFBJZEF0dHJpYnV0ZXM7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc0FwaVBMUEV2ZW50QXR0cmlidXRlczogKGRhdGE6IHVua25vd24pID0+IGRhdGEgaXMgUExQQXR0cmlidXRlcztcbiIsImltcG9ydCB7IFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNBcGlQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzOiAoYXR0cmlidXRlczogdW5rbm93bikgPT4gYXR0cmlidXRlcyBpcyBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzO1xuIiwiaW1wb3J0IHsgR2V0TWVyY2hhbnRDb2xvcnNRdWVyeURhdGEgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNHcmFwaFFMQ29sb3JzQ29uZmlnOiAoZGF0YTogdW5rbm93bikgPT4gZGF0YSBpcyBHZXRNZXJjaGFudENvbG9yc1F1ZXJ5RGF0YTtcbiIsImltcG9ydCB0eXBlIHsgVXBwZXJDYXNlQ2hhcmFjdGVycywgV29yZFNlcGFyYXRvcnMgfSBmcm9tICcuL2ludGVybmFsJztcbnR5cGUgVXBwZXJDYXNlVG9Mb3dlckNhc2U8VCBleHRlbmRzIHN0cmluZz4gPSBUIGV4dGVuZHMgVXBwZXJjYXNlPFQ+ID8gTG93ZXJjYXNlPFQ+IDogVDtcbnR5cGUgU3BsaXRJbmNsdWRpbmdEZWxpbWl0ZXJzXzxTb3VyY2UgZXh0ZW5kcyBzdHJpbmcsIERlbGltaXRlciBleHRlbmRzIHN0cmluZz4gPSBTb3VyY2UgZXh0ZW5kcyAnJyA/IFtdIDogU291cmNlIGV4dGVuZHMgYCR7aW5mZXIgRmlyc3RQYXJ0fSR7RGVsaW1pdGVyfSR7aW5mZXIgU2Vjb25kUGFydH1gID8gU291cmNlIGV4dGVuZHMgYCR7Rmlyc3RQYXJ0fSR7aW5mZXIgVXNlZERlbGltaXRlcn0ke1NlY29uZFBhcnR9YCA/IFVzZWREZWxpbWl0ZXIgZXh0ZW5kcyBEZWxpbWl0ZXIgPyBTb3VyY2UgZXh0ZW5kcyBgJHtpbmZlciBGaXJzdFBhcnR9JHtVc2VkRGVsaW1pdGVyfSR7aW5mZXIgU2Vjb25kUGFydH1gID8gW1xuICAgIC4uLlNwbGl0SW5jbHVkaW5nRGVsaW1pdGVyczxGaXJzdFBhcnQsIERlbGltaXRlcj4sXG4gICAgVXNlZERlbGltaXRlcixcbiAgICAuLi5TcGxpdEluY2x1ZGluZ0RlbGltaXRlcnM8U2Vjb25kUGFydCwgRGVsaW1pdGVyPlxuXSA6IG5ldmVyIDogbmV2ZXIgOiBuZXZlciA6IFtTb3VyY2VdO1xuLyoqXG4gKiBVbmxpa2UgYSBzaW1wbGVyIHNwbGl0LCB0aGlzIG9uZSBpbmNsdWRlcyB0aGUgZGVsaW1pdGVyIHNwbGl0dGVkIG9uIGluIHRoZSByZXN1bHRpbmcgYXJyYXkgbGl0ZXJhbC4gVGhpcyBpcyB0byBlbmFibGUgc3BsaXR0aW5nIG9uLCBmb3IgZXhhbXBsZSwgdXBwZXItY2FzZSBjaGFyYWN0ZXJzLlxuICpcbiAqIEBjYXRlZ29yeSBUZW1wbGF0ZSBsaXRlcmFsXG4gKi9cbmV4cG9ydCB0eXBlIFNwbGl0SW5jbHVkaW5nRGVsaW1pdGVyczxTb3VyY2UgZXh0ZW5kcyBzdHJpbmcsIERlbGltaXRlciBleHRlbmRzIHN0cmluZz4gPSBTcGxpdEluY2x1ZGluZ0RlbGltaXRlcnNfPFVwcGVyQ2FzZVRvTG93ZXJDYXNlPFNvdXJjZT4sIERlbGltaXRlcj47XG4vKipcbiAqRm9ybWF0IGEgc3BlY2lmaWMgcGFydCBvZiB0aGUgc3BsaXR0ZWQgc3RyaW5nIGxpdGVyYWwgdGhhdCBgU3RyaW5nQXJyYXlUb0RlbGltaXRlckNhc2U8PmAgZnVzZXMgdG9nZXRoZXIsIGVuc3VyaW5nIGRlc2lyZWQgY2FzaW5nLlxuICpcbiAqQHNlZSBTdHJpbmdBcnJheVRvRGVsaW1pdGVyQ2FzZVxuICovXG50eXBlIFN0cmluZ1BhcnRUb0RlbGltaXRlckNhc2U8U3RyaW5nUGFydCBleHRlbmRzIHN0cmluZywgU3RhcnQgZXh0ZW5kcyBib29sZWFuLCBVc2VkV29yZFNlcGFyYXRvcnMgZXh0ZW5kcyBzdHJpbmcsIFVzZWRVcHBlckNhc2VDaGFyYWN0ZXJzIGV4dGVuZHMgc3RyaW5nLCBEZWxpbWl0ZXIgZXh0ZW5kcyBzdHJpbmc+ID0gU3RyaW5nUGFydCBleHRlbmRzIFVzZWRXb3JkU2VwYXJhdG9ycyA/IERlbGltaXRlciA6IFN0YXJ0IGV4dGVuZHMgdHJ1ZSA/IExvd2VyY2FzZTxTdHJpbmdQYXJ0PiA6IFN0cmluZ1BhcnQgZXh0ZW5kcyBVc2VkVXBwZXJDYXNlQ2hhcmFjdGVycyA/IGAke0RlbGltaXRlcn0ke0xvd2VyY2FzZTxTdHJpbmdQYXJ0Pn1gIDogU3RyaW5nUGFydDtcbi8qKlxuICogVGFrZXMgdGhlIHJlc3VsdCBvZiBhIHNwbGl0dGVkIHN0cmluZyBsaXRlcmFsIGFuZCByZWN1cnNpdmVseSBjb25jYXRlbmF0ZXMgaXQgdG9nZXRoZXIgaW50byB0aGUgZGVzaXJlZCBjYXNpbmcuXG4gKlxuICogSXQgcmVjZWl2ZXMgYFVzZWRXb3JkU2VwYXJhdG9yc2AgYW5kIGBVc2VkVXBwZXJDYXNlQ2hhcmFjdGVyc2AgYXMgaW5wdXQgdG8gZW5zdXJlIGl0J3MgZnVsbHkgZW5jYXBzdWxhdGVkLlxuICpcbiAqIEBzZWUgU3BsaXRJbmNsdWRpbmdEZWxpbWl0ZXJzXG4gKi9cbnR5cGUgU3RyaW5nQXJyYXlUb0RlbGltaXRlckNhc2U8UGFydHMgZXh0ZW5kcyByZWFkb25seSBhbnlbXSwgU3RhcnQgZXh0ZW5kcyBib29sZWFuLCBVc2VkV29yZFNlcGFyYXRvcnMgZXh0ZW5kcyBzdHJpbmcsIFVzZWRVcHBlckNhc2VDaGFyYWN0ZXJzIGV4dGVuZHMgc3RyaW5nLCBEZWxpbWl0ZXIgZXh0ZW5kcyBzdHJpbmc+ID0gUGFydHMgZXh0ZW5kcyBbYCR7aW5mZXIgRmlyc3RQYXJ0fWAsIC4uLmluZmVyIFJlbWFpbmluZ1BhcnRzXSA/IGAke1N0cmluZ1BhcnRUb0RlbGltaXRlckNhc2U8Rmlyc3RQYXJ0LCBTdGFydCwgVXNlZFdvcmRTZXBhcmF0b3JzLCBVc2VkVXBwZXJDYXNlQ2hhcmFjdGVycywgRGVsaW1pdGVyPn0ke1N0cmluZ0FycmF5VG9EZWxpbWl0ZXJDYXNlPFJlbWFpbmluZ1BhcnRzLCBmYWxzZSwgVXNlZFdvcmRTZXBhcmF0b3JzLCBVc2VkVXBwZXJDYXNlQ2hhcmFjdGVycywgRGVsaW1pdGVyPn1gIDogUGFydHMgZXh0ZW5kcyBbc3RyaW5nXSA/IHN0cmluZyA6ICcnO1xuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIGxpdGVyYWwgdG8gYSBjdXN0b20gc3RyaW5nIGRlbGltaXRlciBjYXNpbmcuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4sIGZvciBleGFtcGxlLCBjb252ZXJ0aW5nIGEgY2FtZWwtY2FzZWQgb2JqZWN0IHByb3BlcnR5IHRvIGFuIG9kZGx5IGNhc2VkIG9uZS5cbiAqXG4gKiBAc2VlIEtlYmFiQ2FzZVxuICogQHNlZSBTbmFrZUNhc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgXG4gKiBpbXBvcnQgdHlwZSB7RGVsaW1pdGVyQ2FzZX0gZnJvbSAndHlwZS1mZXN0JztcbiAqXG4gKiAvLyBTaW1wbGVcbiAqXG4gKiBjb25zdCBzb21lVmFyaWFibGU6IERlbGltaXRlckNhc2U8J2Zvb0JhcicsICcjJz4gPSAnZm9vI2Jhcic7XG4gKlxuICogLy8gQWR2YW5jZWRcbiAqXG4gKiB0eXBlIE9kZGx5Q2FzZWRQcm9wZXJ0aWVzPFQ+ID0ge1xuICogXHRbSyBpbiBrZXlvZiBUIGFzIERlbGltaXRlckNhc2U8SywgJyMnPl06IFRbS11cbiAqIH07XG4gKlxuICogaW50ZXJmYWNlIFNvbWVPcHRpb25zIHtcbiAqIFx0ZHJ5UnVuOiBib29sZWFuO1xuICogXHRpbmNsdWRlRmlsZTogc3RyaW5nO1xuICogXHRmb286IG51bWJlcjtcbiAqIH1cbiAqXG4gKiBjb25zdCByYXdDbGlPcHRpb25zOiBPZGRseUNhc2VkUHJvcGVydGllczxTb21lT3B0aW9ucz4gPSB7XG4gKiBcdCdkcnkjcnVuJzogdHJ1ZSxcbiAqIFx0J2luY2x1ZGUjZmlsZSc6ICdiYXIuanMnLFxuICogXHRmb286IDEyM1xuICogfTtcbiAqIGBgYFxuICpcbiAqIEBjYXRlZ29yeSBDaGFuZ2UgY2FzZVxuICogQGNhdGVnb3J5IFRlbXBsYXRlIGxpdGVyYWxcbiAqL1xuZXhwb3J0IHR5cGUgRGVsaW1pdGVyQ2FzZTxWYWx1ZSwgRGVsaW1pdGVyIGV4dGVuZHMgc3RyaW5nPiA9IHN0cmluZyBleHRlbmRzIFZhbHVlID8gVmFsdWUgOiBWYWx1ZSBleHRlbmRzIHN0cmluZyA/IFN0cmluZ0FycmF5VG9EZWxpbWl0ZXJDYXNlPFNwbGl0SW5jbHVkaW5nRGVsaW1pdGVyczxWYWx1ZSwgV29yZFNlcGFyYXRvcnMgfCBVcHBlckNhc2VDaGFyYWN0ZXJzPiwgdHJ1ZSwgV29yZFNlcGFyYXRvcnMsIFVwcGVyQ2FzZUNoYXJhY3RlcnMsIERlbGltaXRlcj4gOiBWYWx1ZTtcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgRGVsaW1pdGVyQ2FzZSB9IGZyb20gJy4vZGVsaW1pdGVyQ2FzZSc7XG5pbXBvcnQgdHlwZSB7IE5vblJlY3Vyc2l2ZVR5cGUgfSBmcm9tICcuL2ludGVybmFsJztcbmltcG9ydCB0eXBlIHsgVW5rbm93bkFycmF5IH0gZnJvbSAnLi91bmtub3duQXJyYXknO1xuLyoqXG4gKiBDb252ZXJ0IG9iamVjdCBwcm9wZXJ0aWVzIHRvIGRlbGltaXRlciBjYXNlIHJlY3Vyc2l2ZWx5LlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuLCBmb3IgZXhhbXBsZSwgY29udmVydGluZyBzb21lIEFQSSB0eXBlcyBmcm9tIGEgZGlmZmVyZW50IHN0eWxlLlxuICpcbiAqIEBzZWUgRGVsaW1pdGVyQ2FzZVxuICogQHNlZSBEZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgXG4gKiBpbXBvcnQgdHlwZSB7RGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcH0gZnJvbSAndHlwZS1mZXN0JztcbiAqXG4gKiBpbnRlcmZhY2UgVXNlciB7XG4gKiBcdHVzZXJJZDogbnVtYmVyO1xuICogXHR1c2VyTmFtZTogc3RyaW5nO1xuICogfVxuICpcbiAqIGludGVyZmFjZSBVc2VyV2l0aEZyaWVuZHMge1xuICogXHR1c2VySW5mbzogVXNlcjtcbiAqIFx0dXNlckZyaWVuZHM6IFVzZXJbXTtcbiAqIH1cbiAqXG4gKiBjb25zdCByZXN1bHQ6IERlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VXNlcldpdGhGcmllbmRzLCAnLSc+ID0ge1xuICogXHQndXNlci1pbmZvJzoge1xuICogXHQndXNlci1pZCc6IDEsXG4gKiBcdFx0J3VzZXItbmFtZSc6ICdUb20nLFxuICogXHR9LFxuICogXHQndXNlci1mcmllbmRzJzogW1xuICogXHRcdHtcbiAqIFx0XHRcdCd1c2VyLWlkJzogMixcbiAqIFx0XHRcdCd1c2VyLW5hbWUnOiAnSmVycnknLFxuICogXHRcdH0sXG4gKiBcdFx0e1xuICogXHRcdFx0J3VzZXItaWQnOiAzLFxuICogXHRcdFx0J3VzZXItbmFtZSc6ICdTcGlrZScsXG4gKiBcdFx0fSxcbiAqIFx0XSxcbiAqIH07XG4gKiBgYGBcbiAqXG4gKiBAY2F0ZWdvcnkgQ2hhbmdlIGNhc2VcbiAqIEBjYXRlZ29yeSBUZW1wbGF0ZSBsaXRlcmFsXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKi9cbmV4cG9ydCB0eXBlIERlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VmFsdWUsIERlbGltaXRlciBleHRlbmRzIHN0cmluZz4gPSBWYWx1ZSBleHRlbmRzIE5vblJlY3Vyc2l2ZVR5cGUgPyBWYWx1ZSA6IFZhbHVlIGV4dGVuZHMgVW5rbm93bkFycmF5ID8gRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzQXJyYXlEZWVwPFZhbHVlLCBEZWxpbWl0ZXI+IDogVmFsdWUgZXh0ZW5kcyBTZXQ8aW5mZXIgVT4gPyBTZXQ8RGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxVLCBEZWxpbWl0ZXI+PiA6IHtcbiAgICBbSyBpbiBrZXlvZiBWYWx1ZSBhcyBEZWxpbWl0ZXJDYXNlPEssIERlbGltaXRlcj5dOiBEZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwPFZhbHVlW0tdLCBEZWxpbWl0ZXI+O1xufTtcbnR5cGUgRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzQXJyYXlEZWVwPFZhbHVlIGV4dGVuZHMgVW5rbm93bkFycmF5LCBEZWxpbWl0ZXIgZXh0ZW5kcyBzdHJpbmc+ID0gVmFsdWUgZXh0ZW5kcyBbXSA/IFtdIDogVmFsdWUgZXh0ZW5kcyBbaW5mZXIgVSwgLi4uaW5mZXIgVl0gPyBbRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxVLCBEZWxpbWl0ZXI+LCAuLi5EZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwPFYsIERlbGltaXRlcj5dIDogVmFsdWUgZXh0ZW5kcyByZWFkb25seSBbaW5mZXIgVSwgLi4uaW5mZXIgVl0gPyByZWFkb25seSBbXG4gICAgRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxVLCBEZWxpbWl0ZXI+LFxuICAgIC4uLkRlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8ViwgRGVsaW1pdGVyPlxuXSA6IFZhbHVlIGV4dGVuZHMgcmVhZG9ubHkgWy4uLmluZmVyIFUsIGluZmVyIFZdID8gW1xuICAgIC4uLkRlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VSwgRGVsaW1pdGVyPixcbiAgICBEZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwPFYsIERlbGltaXRlcj5cbl0gOiBWYWx1ZSBleHRlbmRzIHJlYWRvbmx5IFsuLi5pbmZlciBVLCBpbmZlciBWXSA/IHJlYWRvbmx5IFtcbiAgICAuLi5EZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwPFUsIERlbGltaXRlcj4sXG4gICAgRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxWLCBEZWxpbWl0ZXI+XG5dIDogVmFsdWUgZXh0ZW5kcyBBcnJheTxpbmZlciBVPiA/IEFycmF5PERlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VSwgRGVsaW1pdGVyPj4gOiBWYWx1ZSBleHRlbmRzIFJlYWRvbmx5QXJyYXk8aW5mZXIgVT4gPyBSZWFkb25seUFycmF5PERlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VSwgRGVsaW1pdGVyPj4gOiBuZXZlcjtcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcCB9IGZyb20gJy4vZGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcCc7XG4vKipcbiAqIENvbnZlcnQgb2JqZWN0IHByb3BlcnRpZXMgdG8gc25ha2UgY2FzZSByZWN1cnNpdmVseS5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiwgZm9yIGV4YW1wbGUsIGNvbnZlcnRpbmcgc29tZSBBUEkgdHlwZXMgZnJvbSBhIGRpZmZlcmVudCBzdHlsZS5cbiAqXG4gKiBAc2VlIFNuYWtlQ2FzZVxuICogQHNlZSBTbmFrZUNhc2VkUHJvcGVydGllc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGltcG9ydCB0eXBlIHtTbmFrZUNhc2VkUHJvcGVydGllc0RlZXB9IGZyb20gJ3R5cGUtZmVzdCc7XG4gKlxuICogaW50ZXJmYWNlIFVzZXIge1xuICogXHR1c2VySWQ6IG51bWJlcjtcbiAqIFx0dXNlck5hbWU6IHN0cmluZztcbiAqIH1cbiAqXG4gKiBpbnRlcmZhY2UgVXNlcldpdGhGcmllbmRzIHtcbiAqIFx0dXNlckluZm86IFVzZXI7XG4gKiBcdHVzZXJGcmllbmRzOiBVc2VyW107XG4gKiB9XG4gKlxuICogY29uc3QgcmVzdWx0OiBTbmFrZUNhc2VkUHJvcGVydGllc0RlZXA8VXNlcldpdGhGcmllbmRzPiA9IHtcbiAqIFx0dXNlcl9pbmZvOiB7XG4gKiBcdFx0dXNlcl9pZDogMSxcbiAqIFx0XHR1c2VyX25hbWU6ICdUb20nLFxuICogXHR9LFxuICogXHR1c2VyX2ZyaWVuZHM6IFtcbiAqIFx0XHR7XG4gKiBcdFx0XHR1c2VyX2lkOiAyLFxuICogXHRcdFx0dXNlcl9uYW1lOiAnSmVycnknLFxuICogXHRcdH0sXG4gKiBcdFx0e1xuICogXHRcdFx0dXNlcl9pZDogMyxcbiAqIFx0XHRcdHVzZXJfbmFtZTogJ1NwaWtlJyxcbiAqIFx0XHR9LFxuICogXHRdLFxuICogfTtcbiAqIGBgYFxuICpcbiAqIEBjYXRlZ29yeSBDaGFuZ2UgY2FzZVxuICogQGNhdGVnb3J5IFRlbXBsYXRlIGxpdGVyYWxcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqL1xuZXhwb3J0IHR5cGUgU25ha2VDYXNlZFByb3BlcnRpZXNEZWVwPFZhbHVlPiA9IERlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VmFsdWUsICdfJz47XG4iLCIvKipcbiAqIEdlbmVyaWMgdXRpbGl0eSB0byB0cmFuc2Zvcm0gc25ha2VfY2FzZSBvYmplY3Qga2V5cyB0byBjYW1lbENhc2UgYXQgcnVudGltZS5cbiAqIFRoaXMgaXMgdGhlIHJ1bnRpbWUgZXF1aXZhbGVudCBvZiB0aGUgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwIHR5cGUgdXRpbGl0eS5cbiAqL1xuLyoqXG4gKiBSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIGFsbCBvYmplY3Qga2V5cyBmcm9tIHNuYWtlX2Nhc2UgdG8gY2FtZWxDYXNlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHRyYW5zZm9ybVNuYWtlVG9DYW1lbDogKG9iajogdW5rbm93bikgPT4gdW5rbm93bjtcbi8qKlxuICogUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBhbGwgb2JqZWN0IGtleXMgZnJvbSBjYW1lbENhc2UgdG8gc25ha2VfY2FzZVxuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCB0cmFuc2Zvcm1DYW1lbFRvU25ha2U6IChvYmo6IHVua25vd24pID0+IHVua25vd247XG4iLCJpbXBvcnQgeyBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZyB0byBhIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyBlbnVtIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBzdGF0dXMgLSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKlxuICogQHJldHVybnMgVGhlIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyBlbnVtIHZhbHVlIG9yIHVuZGVmaW5lZCBpZiB0aGUgc3RyaW5nXG4gKiBkb2VzIG5vdCBtYXAgdG8gYSB2YWxpZCBlbnVtXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHN0cmluZ1RvRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzRW51bVZhbHVlOiAoc3RhdHVzOiBzdHJpbmcpID0+IEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyB8IHVuZGVmaW5lZDtcbiIsImltcG9ydCB7IENvbG9yTWFwcGluZyB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL2NvbG9yc0NvbmZpZ1wiO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVHcmFwaFFMQ29sb3JzQ29uZmlnOiAoZGF0YTogdW5rbm93bikgPT4gQ29sb3JNYXBwaW5nIHwgdW5kZWZpbmVkO1xuIiwiaW1wb3J0IHsgRnJvbnRlbmRDb25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2Zyb250ZW5kQ29uZmlnJztcbmltcG9ydCB7IFdpZGdldENvbmZpZywgUGFnZVZhcmlhbnRDb25maWcsIFdpZGdldE1vdW50aW5nQ29uZmlnIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHZhbGlkYXRlQW5kVHJhbnNmb3JtUGFnZVZhcmlhbnRzOiAoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gUGFnZVZhcmlhbnRDb25maWc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnOiAoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgY29uZmlnS2V5OiBzdHJpbmcpID0+IFdpZGdldE1vdW50aW5nQ29uZmlnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVBbmRUcmFuc2Zvcm1XaWRnZXRDb25maWc6IChjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjb25maWdLZXk6IHN0cmluZykgPT4gV2lkZ2V0Q29uZmlnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVHcmFwaFFMRnJvbnRlbmRDb25maWc6IChkYXRhOiB1bmtub3duKSA9PiBGcm9udGVuZENvbmZpZyB8IHVuZGVmaW5lZDtcbiIsImV4cG9ydCBkZWNsYXJlIGNvbnN0IHZhbGlkYXRlR3JhcGhRTE9yZ0lkOiAoZGF0YTogdW5rbm93bikgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuIiwiaW1wb3J0IHsgTW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlciB9IGZyb20gJy4uL21vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXInO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyOiAodmFsdWU6IHVua25vd24pID0+IE1vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIgfCB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBPcmdhbml6YXRpb25Db25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9vcmdhbml6YXRpb25Db25maWcnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVPcmdhbml6YXRpb25Db25maWc6IChkYXRhOiB1bmtub3duKSA9PiBPcmdhbml6YXRpb25Db25maWcgfCB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBPcmdDb25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9vcmdDb25maWdSZXN1bHRzJztcbi8qKlxuICpcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCB2YWxpZGF0ZU9yZ0NvbmZpZ1Jlc3VsdHM6IChkYXRhOiB1bmtub3duKSA9PiBPcmdDb25maWcgfCB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBSZXNwb25zZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvaW5kZXgnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVSZXNwb25zZTogKGRhdGE6IHVua25vd24pID0+IFJlc3BvbnNlIHwgdW5kZWZpbmVkO1xuIiwiaW1wb3J0IHsgU3VnZ2VzdGlvbiB9IGZyb20gJy4uL2FwaS9zdWdnZXN0aW9uJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHZhbGlkYXRlU3VnZ2VzdGlvbjogKGRhdGE6IHVua25vd24pID0+IFN1Z2dlc3Rpb24gfCB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBVc2VyRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2luZGV4JztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHZhbGlkYXRlVXNlckV2ZW50OiAoZGF0YTogdW5rbm93bikgPT4gVXNlckV2ZW50IHwgdW5kZWZpbmVkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUksY0FBYyxDQUFDLElBQUc7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