@devx-commerce/plugin-gati 0.0.34-beta.4 → 0.0.34-beta.41

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 (298) hide show
  1. package/.medusa/server/src/admin/index.js +3 -1
  2. package/.medusa/server/src/admin/index.mjs +3 -1
  3. package/.medusa/server/src/api/admin/masters/validators.js +2 -2
  4. package/.medusa/server/src/api/admin/variant-options/recalculate/route.js +446 -0
  5. package/.medusa/server/src/api/admin/variant-options/sync/route.js +21 -5
  6. package/.medusa/server/src/api/erp/webhook/config.js +36 -1
  7. package/.medusa/server/src/api/erp/webhook/route.js +10 -137
  8. package/.medusa/server/src/api/erp/webhook/utils.js +8 -1
  9. package/.medusa/server/src/api/pos/customer-ledger/middleware.js +13 -0
  10. package/.medusa/server/src/api/pos/customer-ledger/route.js +50 -0
  11. package/.medusa/server/src/api/pos/generate-invoice/route.js +427 -0
  12. package/.medusa/server/src/api/pos/gold/calculate/route.js +104 -0
  13. package/.medusa/server/src/api/pos/gold/item-master-purity.js +46 -0
  14. package/.medusa/server/src/api/pos/gold/middleware.js +18 -0
  15. package/.medusa/server/src/api/pos/gold/route.js +83 -0
  16. package/.medusa/server/src/api/pos/gold-rate/route.js +37 -24
  17. package/.medusa/server/src/api/pos/middleware.js +13 -1
  18. package/.medusa/server/src/api/pos/old-gold-item/middleware.js +10 -0
  19. package/.medusa/server/src/api/pos/old-gold-item/route.js +52 -0
  20. package/.medusa/server/src/api/pos/platinumdata/middleware.js +13 -0
  21. package/.medusa/server/src/api/pos/platinumdata/route.js +41 -0
  22. package/.medusa/server/src/api/pos/silverdata/middleware.js +13 -0
  23. package/.medusa/server/src/api/pos/silverdata/route.js +41 -0
  24. package/.medusa/server/src/api/pos/wallet-balance/middleware.js +13 -0
  25. package/.medusa/server/src/api/pos/wallet-balance/route.js +68 -0
  26. package/.medusa/server/src/api/store/custom-price/validators.js +2 -2
  27. package/.medusa/server/src/api/store/customer-ledger/middleware.js +13 -0
  28. package/.medusa/server/src/api/store/customer-ledger/route.js +49 -0
  29. package/.medusa/server/src/api/store/gold-rate/validators.js +2 -2
  30. package/.medusa/server/src/api/store/middleware.js +5 -1
  31. package/.medusa/server/src/api/store/wallet-balance/middleware.js +13 -0
  32. package/.medusa/server/src/api/store/wallet-balance/route.js +67 -0
  33. package/.medusa/server/src/jobs/process-erp-events.js +205 -0
  34. package/.medusa/server/src/jobs/process-variant-option-sync.js +43 -28
  35. package/.medusa/server/src/jobs/sync-addless-detail.js +60 -0
  36. package/.medusa/server/src/jobs/sync-book-list-and-applicable-policy.js +89 -0
  37. package/.medusa/server/src/jobs/sync-item-master.js +20 -0
  38. package/.medusa/server/src/jobs/sync-labour-chart-master.js +20 -0
  39. package/.medusa/server/src/jobs/sync-order-erp.js +2 -2
  40. package/.medusa/server/src/jobs/sync-payment-book-master.js +63 -0
  41. package/.medusa/server/src/jobs/sync-rate-chart-master.js +20 -0
  42. package/.medusa/server/src/jobs/sync-report-master.js +46 -0
  43. package/.medusa/server/src/jobs/sync-sale-return-policy-master.js +29 -0
  44. package/.medusa/server/src/lib/api-response.js +2 -1
  45. package/.medusa/server/src/links/jewel-trans-master.js +13 -0
  46. package/.medusa/server/src/links/order-master.js +13 -0
  47. package/.medusa/server/src/links/sale-master.js +13 -0
  48. package/.medusa/server/src/modules/addless-detail/index.js +13 -0
  49. package/.medusa/server/src/modules/addless-detail/migrations/Migration20260212101102.js +15 -0
  50. package/.medusa/server/src/modules/addless-detail/migrations/Migration20260213000000.js +47 -0
  51. package/.medusa/server/src/modules/addless-detail/migrations/Migration20260226053037.js +15 -0
  52. package/.medusa/server/src/modules/addless-detail/models/addless-master.js +17 -0
  53. package/.medusa/server/src/modules/addless-detail/service.js +10 -0
  54. package/.medusa/server/src/modules/applicable-sale-return-policy/index.js +13 -0
  55. package/.medusa/server/src/modules/applicable-sale-return-policy/migrations/Migration20260123083526.js +15 -0
  56. package/.medusa/server/src/modules/applicable-sale-return-policy/models/applicable-sale-return-policy.js +23 -0
  57. package/.medusa/server/src/modules/applicable-sale-return-policy/service.js +10 -0
  58. package/.medusa/server/src/modules/book-list/index.js +13 -0
  59. package/.medusa/server/src/modules/book-list/migrations/Migration20260123083525.js +15 -0
  60. package/.medusa/server/src/modules/book-list/models/book-list.js +12 -0
  61. package/.medusa/server/src/modules/book-list/service.js +10 -0
  62. package/.medusa/server/src/modules/category-group-master/migrations/Migration20250729035221.js +2 -2
  63. package/.medusa/server/src/modules/category-group-master/migrations/Migration20251031061116.js +2 -2
  64. package/.medusa/server/src/modules/category-group-master/migrations/Migration20251104045912.js +2 -2
  65. package/.medusa/server/src/modules/category-master/migrations/Migration20250513122212.js +2 -2
  66. package/.medusa/server/src/modules/category-master/migrations/Migration20250519180539.js +2 -2
  67. package/.medusa/server/src/modules/category-master/migrations/Migration20250531004724.js +2 -2
  68. package/.medusa/server/src/modules/category-master/migrations/Migration20250729040659.js +2 -2
  69. package/.medusa/server/src/modules/category-master/migrations/Migration20251031061327.js +2 -2
  70. package/.medusa/server/src/modules/category-master/migrations/Migration20251104045755.js +2 -2
  71. package/.medusa/server/src/modules/collection-group-master/migrations/Migration20250531022203.js +2 -2
  72. package/.medusa/server/src/modules/collection-group-master/migrations/Migration20251031061432.js +2 -2
  73. package/.medusa/server/src/modules/collection-group-master/migrations/Migration20251104050102.js +2 -2
  74. package/.medusa/server/src/modules/collection-master/migrations/Migration20250513122211.js +2 -2
  75. package/.medusa/server/src/modules/collection-master/migrations/Migration20250531025048.js +2 -2
  76. package/.medusa/server/src/modules/collection-master/migrations/Migration20251031060941.js +2 -2
  77. package/.medusa/server/src/modules/collection-master/migrations/Migration20251104050012.js +2 -2
  78. package/.medusa/server/src/modules/customer-receive-voucher/index.js +13 -0
  79. package/.medusa/server/src/modules/customer-receive-voucher/migrations/Migration20250115000000.js +51 -0
  80. package/.medusa/server/src/modules/customer-receive-voucher/migrations/Migration20260106050934.js +18 -0
  81. package/.medusa/server/src/modules/customer-receive-voucher/models/customer-receive-voucher.js +35 -0
  82. package/.medusa/server/src/modules/customer-receive-voucher/service.js +10 -0
  83. package/.medusa/server/src/modules/discount-master/migrations/Migration20250707232514.js +2 -2
  84. package/.medusa/server/src/modules/discount-master/migrations/Migration20250708051709.js +2 -2
  85. package/.medusa/server/src/modules/discount-master/migrations/Migration20250708051737.js +2 -2
  86. package/.medusa/server/src/modules/discount-master/migrations/Migration20251031061523.js +2 -2
  87. package/.medusa/server/src/modules/discount-master/migrations/Migration20251104050153.js +2 -2
  88. package/.medusa/server/src/modules/erp/migrations/Migration20250513121436.js +2 -2
  89. package/.medusa/server/src/modules/erp/service.js +542 -8
  90. package/.medusa/server/src/modules/erp-event/migrations/Migration20250908040911.js +2 -2
  91. package/.medusa/server/src/modules/erp-event/migrations/Migration20250922095956.js +2 -2
  92. package/.medusa/server/src/modules/extended-product/migrations/Migration20250620030100.js +2 -2
  93. package/.medusa/server/src/modules/extended-product/migrations/Migration20250716041546.js +2 -2
  94. package/.medusa/server/src/modules/extended-product/migrations/Migration20251103182726.js +2 -2
  95. package/.medusa/server/src/modules/extended-product/migrations/Migration20251119062526.js +2 -2
  96. package/.medusa/server/src/modules/extended-product/migrations/Migration20251202055742.js +2 -2
  97. package/.medusa/server/src/modules/extended-product/migrations/Migration20251202064200.js +2 -2
  98. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250620030335.js +2 -2
  99. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250620030522.js +2 -2
  100. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250629220100.js +2 -2
  101. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250629223425.js +2 -2
  102. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250704064831.js +2 -2
  103. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250716121609.js +2 -2
  104. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250725104852.js +2 -2
  105. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250726232339.js +2 -2
  106. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250916065103.js +2 -2
  107. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251119063328.js +2 -2
  108. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120045708.js +2 -2
  109. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120051832.js +2 -2
  110. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120052514.js +2 -2
  111. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251202055952.js +2 -2
  112. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251210112341.js +18 -0
  113. package/.medusa/server/src/modules/extended-variant/models/extended-variant.js +2 -2
  114. package/.medusa/server/src/modules/item-master/index.js +13 -0
  115. package/.medusa/server/src/modules/item-master/migrations/Migration20260212101055.js +15 -0
  116. package/.medusa/server/src/modules/item-master/models/item-master.js +20 -0
  117. package/.medusa/server/src/modules/item-master/service.js +10 -0
  118. package/.medusa/server/src/modules/item-size-master/migrations/Migration20251031111036.js +2 -2
  119. package/.medusa/server/src/modules/jewel-trans-master/index.js +13 -0
  120. package/.medusa/server/src/modules/jewel-trans-master/migrations/Migration20260226053036.js +57 -0
  121. package/.medusa/server/src/modules/jewel-trans-master/models/jewel-trans-master.js +151 -0
  122. package/.medusa/server/src/modules/jewel-trans-master/service.js +16 -0
  123. package/.medusa/server/src/modules/labour-chart-master/index.js +13 -0
  124. package/.medusa/server/src/modules/labour-chart-master/migrations/Migration20260101081502.js +15 -0
  125. package/.medusa/server/src/modules/labour-chart-master/models/labour-chart-master.js +16 -0
  126. package/.medusa/server/src/modules/labour-chart-master/service.js +10 -0
  127. package/.medusa/server/src/modules/material-purchase-master/index.js +13 -0
  128. package/.medusa/server/src/modules/material-purchase-master/migrations/Migration20260310090700.js +18 -0
  129. package/.medusa/server/src/modules/material-purchase-master/models/material-purchase-detail-line.js +24 -0
  130. package/.medusa/server/src/modules/material-purchase-master/models/material-purchase-master.js +21 -0
  131. package/.medusa/server/src/modules/material-purchase-master/service.js +12 -0
  132. package/.medusa/server/src/modules/order-master/index.js +13 -0
  133. package/.medusa/server/src/modules/order-master/migrations/Migration20260226053036.js +29 -0
  134. package/.medusa/server/src/modules/order-master/migrations/Migration20260303000001.js +30 -0
  135. package/.medusa/server/src/modules/order-master/models/order-master.js +97 -0
  136. package/.medusa/server/src/modules/order-master/service.js +12 -0
  137. package/.medusa/server/src/modules/party-master/migrations/Migration20250604104235.js +2 -2
  138. package/.medusa/server/src/modules/party-master/migrations/Migration20250604115453.js +2 -2
  139. package/.medusa/server/src/modules/party-master/migrations/Migration20250604120348.js +2 -2
  140. package/.medusa/server/src/modules/party-master/migrations/Migration20250604120701.js +2 -2
  141. package/.medusa/server/src/modules/party-master/migrations/Migration20250608220924.js +2 -2
  142. package/.medusa/server/src/modules/party-master/migrations/Migration20250612225738.js +2 -2
  143. package/.medusa/server/src/modules/party-master/migrations/Migration20250612231031.js +2 -2
  144. package/.medusa/server/src/modules/party-master/migrations/Migration20250708123734.js +2 -2
  145. package/.medusa/server/src/modules/party-master/migrations/Migration20251031061657.js +2 -2
  146. package/.medusa/server/src/modules/party-master/migrations/Migration20251104050242.js +2 -2
  147. package/.medusa/server/src/modules/payment-book-master/index.js +13 -0
  148. package/.medusa/server/src/modules/payment-book-master/migrations/Migration20251203105358.js +15 -0
  149. package/.medusa/server/src/modules/payment-book-master/models/payment-book-master.js +12 -0
  150. package/.medusa/server/src/modules/payment-book-master/service.js +10 -0
  151. package/.medusa/server/src/modules/promocode-master/migrations/Migration20250819123821.js +2 -2
  152. package/.medusa/server/src/modules/promocode-master/migrations/Migration20250918095713.js +2 -2
  153. package/.medusa/server/src/modules/promocode-master/migrations/Migration20251031061829.js +2 -2
  154. package/.medusa/server/src/modules/promocode-master/migrations/Migration20251104050332.js +2 -2
  155. package/.medusa/server/src/modules/quality-master/migrations/Migration20251031095211.js +2 -2
  156. package/.medusa/server/src/modules/quality-master/migrations/Migration20251105045114.js +2 -2
  157. package/.medusa/server/src/modules/rate-chart-master/index.js +13 -0
  158. package/.medusa/server/src/modules/rate-chart-master/migrations/Migration20260101081500.js +15 -0
  159. package/.medusa/server/src/modules/rate-chart-master/models/rate-chart-master.js +13 -0
  160. package/.medusa/server/src/modules/rate-chart-master/service.js +10 -0
  161. package/.medusa/server/src/modules/raw-master/migrations/Migration20250509190057.js +2 -2
  162. package/.medusa/server/src/modules/raw-master/migrations/Migration20250509190322.js +2 -2
  163. package/.medusa/server/src/modules/raw-master/migrations/Migration20251031061912.js +2 -2
  164. package/.medusa/server/src/modules/report-master/index.js +13 -0
  165. package/.medusa/server/src/modules/report-master/migrations/Migration20260121060955.js +15 -0
  166. package/.medusa/server/src/modules/report-master/migrations/Migration20260121112624.js +15 -0
  167. package/.medusa/server/src/modules/report-master/models/report-master.js +12 -0
  168. package/.medusa/server/src/modules/report-master/service.js +10 -0
  169. package/.medusa/server/src/modules/sale-master/index.js +13 -0
  170. package/.medusa/server/src/modules/sale-master/migrations/Migration20260205092935.js +15 -0
  171. package/.medusa/server/src/modules/sale-master/migrations/Migration20260205100000.js +16 -0
  172. package/.medusa/server/src/modules/sale-master/models/sale-master.js +27 -0
  173. package/.medusa/server/src/modules/sale-master/service.js +10 -0
  174. package/.medusa/server/src/modules/sale-return-master/index.js +13 -0
  175. package/.medusa/server/src/modules/sale-return-master/migrations/Migration20260205093034.js +15 -0
  176. package/.medusa/server/src/modules/sale-return-master/models/sale-return-master.js +16 -0
  177. package/.medusa/server/src/modules/sale-return-master/service.js +10 -0
  178. package/.medusa/server/src/modules/sale-return-policy-master/index.js +13 -0
  179. package/.medusa/server/src/modules/sale-return-policy-master/migrations/Migration20260105061449.js +21 -0
  180. package/.medusa/server/src/modules/sale-return-policy-master/migrations/Migration20260129084920.js +14 -0
  181. package/.medusa/server/src/modules/sale-return-policy-master/migrations/Migration20260129085620.js +20 -0
  182. package/.medusa/server/src/modules/sale-return-policy-master/models/sale-return-policy-master.js +37 -0
  183. package/.medusa/server/src/modules/sale-return-policy-master/service.js +12 -0
  184. package/.medusa/server/src/modules/shape-master/migrations/Migration20250509174455.js +2 -2
  185. package/.medusa/server/src/modules/shape-master/migrations/Migration20251031062019.js +2 -2
  186. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20250713113247.js +2 -2
  187. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20250713121440.js +2 -2
  188. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251031062128.js +2 -2
  189. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251104050501.js +2 -2
  190. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251203083315.js +2 -2
  191. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250513115356.js +2 -2
  192. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250519180538.js +2 -2
  193. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250531010409.js +2 -2
  194. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250730025135.js +2 -2
  195. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250730025307.js +2 -2
  196. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250730032130.js +2 -2
  197. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20251031062303.js +2 -2
  198. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20251104050743.js +2 -2
  199. package/.medusa/server/src/modules/tone-master/migrations/Migration20251031104320.js +2 -2
  200. package/.medusa/server/src/modules/variant-option-sync-queue/migrations/Migration20251101082220.js +2 -2
  201. package/.medusa/server/src/modules/variant-option-sync-queue/migrations/Migration20251103123857.js +2 -2
  202. package/.medusa/server/src/subscribers/cutomer-updated.js +3 -1
  203. package/.medusa/server/src/subscribers/order-item-update.js +11 -0
  204. package/.medusa/server/src/subscribers/party-master.js +36 -35
  205. package/.medusa/server/src/subscribers/shipping-info-master.js +3 -3
  206. package/.medusa/server/src/utils/build-redis-key.js +3 -1
  207. package/.medusa/server/src/utils/state-helper.js +3 -2
  208. package/.medusa/server/src/workflows/addless-detail/index.js +11 -0
  209. package/.medusa/server/src/workflows/addless-detail/steps/create-or-update-addless-detail.js +36 -0
  210. package/.medusa/server/src/workflows/addless-detail/steps/fetch-addless-detail.js +73 -0
  211. package/.medusa/server/src/workflows/applicable-sale-return-policy/index.js +11 -0
  212. package/.medusa/server/src/workflows/applicable-sale-return-policy/steps/create-or-update-applicable-sale-return-policy.js +74 -0
  213. package/.medusa/server/src/workflows/applicable-sale-return-policy/steps/fetch-applicable-sale-return-policy.js +64 -0
  214. package/.medusa/server/src/workflows/book-list/index.js +11 -0
  215. package/.medusa/server/src/workflows/book-list/steps/create-or-update-book-list.js +55 -0
  216. package/.medusa/server/src/workflows/book-list/steps/fetch-book-list.js +64 -0
  217. package/.medusa/server/src/workflows/customer-advance-payment/index.js +18 -0
  218. package/.medusa/server/src/workflows/customer-advance-payment/steps/create-receive-voucher.js +71 -0
  219. package/.medusa/server/src/workflows/customer-advance-payment/steps/index.js +18 -0
  220. package/.medusa/server/src/workflows/customer-advance-payment/workflows/create-receive-voucher-workflow.js +11 -0
  221. package/.medusa/server/src/workflows/customer-advance-payment/workflows/index.js +18 -0
  222. package/.medusa/server/src/workflows/helpers/product-helper.js +33 -17
  223. package/.medusa/server/src/workflows/helpers/variant-helper.js +165 -162
  224. package/.medusa/server/src/workflows/hooks/product-updated.js +6 -11
  225. package/.medusa/server/src/workflows/index.js +3 -1
  226. package/.medusa/server/src/workflows/inward-master/helper/index.js +5 -1
  227. package/.medusa/server/src/workflows/inward-master/workflows/create-inward.js +6 -3
  228. package/.medusa/server/src/workflows/inward-master/workflows/update-inward.js +6 -2
  229. package/.medusa/server/src/workflows/item-master/index.js +11 -0
  230. package/.medusa/server/src/workflows/item-master/steps/create-or-update-item-master.js +50 -0
  231. package/.medusa/server/src/workflows/item-master/steps/fetch-item-master.js +29 -0
  232. package/.medusa/server/src/workflows/jewel-trans-master/index.js +18 -0
  233. package/.medusa/server/src/workflows/jewel-trans-master/steps/create-or-update-jewel-trans-master.js +370 -0
  234. package/.medusa/server/src/workflows/jewel-trans-master/steps/index.js +18 -0
  235. package/.medusa/server/src/workflows/labour-chart-master/index.js +11 -0
  236. package/.medusa/server/src/workflows/labour-chart-master/steps/create-or-update-labour-chart-master.js +38 -0
  237. package/.medusa/server/src/workflows/labour-chart-master/steps/fetch-labour-chart.js +31 -0
  238. package/.medusa/server/src/workflows/material-purchase-master/index.js +24 -0
  239. package/.medusa/server/src/workflows/material-purchase-master/steps/create-material-purchase-master.js +79 -0
  240. package/.medusa/server/src/workflows/material-purchase-master/steps/delete-material-purchase-master.js +81 -0
  241. package/.medusa/server/src/workflows/material-purchase-master/steps/fetch-material-purchase-master.js +60 -0
  242. package/.medusa/server/src/workflows/material-purchase-master/steps/update-material-purchase-master.js +100 -0
  243. package/.medusa/server/src/workflows/order-master/index.js +3 -0
  244. package/.medusa/server/src/workflows/order-master/order-master-webhook.js +24 -0
  245. package/.medusa/server/src/workflows/order-master/steps/create-or-update-order-master.js +245 -0
  246. package/.medusa/server/src/workflows/order-master/steps/delete-order-master-by-erp-ids.js +61 -0
  247. package/.medusa/server/src/workflows/order-master/steps/process-order-master-from-webhook.js +283 -0
  248. package/.medusa/server/src/workflows/orders/steps/find-nearest-pincodes-step.js +336 -0
  249. package/.medusa/server/src/workflows/orders/steps/get-today-gold-rate-step.js +77 -0
  250. package/.medusa/server/src/workflows/orders/steps/index.js +14 -1
  251. package/.medusa/server/src/workflows/orders/steps/sync-advance-payment-to-erp-step.js +185 -0
  252. package/.medusa/server/src/workflows/orders/steps/sync-buyback-to-erp-step.js +98 -0
  253. package/.medusa/server/src/workflows/orders/steps/sync-cancel-to-erp-step.js +119 -0
  254. package/.medusa/server/src/workflows/orders/steps/sync-exchange-to-erp-step.js +100 -0
  255. package/.medusa/server/src/workflows/orders/steps/sync-old-gold-to-erp-step.js +161 -0
  256. package/.medusa/server/src/workflows/orders/steps/sync-order-to-erp.js +534 -16
  257. package/.medusa/server/src/workflows/orders/steps/sync-sale-return-to-erp-step.js +147 -0
  258. package/.medusa/server/src/workflows/orders/steps/update-old-gold-sync-status-step.js +60 -0
  259. package/.medusa/server/src/workflows/orders/utils/order-helper.js +143 -36
  260. package/.medusa/server/src/workflows/orders/utils/order-request-helper.js +222 -0
  261. package/.medusa/server/src/workflows/orders/workflows/get-today-gold-rate.js +10 -0
  262. package/.medusa/server/src/workflows/orders/workflows/index.js +3 -1
  263. package/.medusa/server/src/workflows/orders/workflows/sync-advanve-payment-to-erp.js +21 -0
  264. package/.medusa/server/src/workflows/orders/workflows/sync-old-gold-to-erp.js +23 -0
  265. package/.medusa/server/src/workflows/orders/workflows/sync-order-to-erp.js +53 -4
  266. package/.medusa/server/src/workflows/party-master/steps/create-customer-erp.js +44 -33
  267. package/.medusa/server/src/workflows/party-master/steps/create-user-erp.js +96 -0
  268. package/.medusa/server/src/workflows/party-master/steps/fetch-party-master.js +2 -1
  269. package/.medusa/server/src/workflows/party-master/steps/index.js +2 -1
  270. package/.medusa/server/src/workflows/party-master/workflows/create-or-update-party-master.js +2 -2
  271. package/.medusa/server/src/workflows/party-master/workflows/create-user-erp.js +11 -0
  272. package/.medusa/server/src/workflows/party-master/workflows/index.js +2 -1
  273. package/.medusa/server/src/workflows/party-style-master/steps/update-product-options-after-deletion.js +16 -249
  274. package/.medusa/server/src/workflows/party-style-master/steps/update-product-options-after-variant-update.js +103 -22
  275. package/.medusa/server/src/workflows/party-style-master/workflows/create-or-update-party-style-master.js +16 -10
  276. package/.medusa/server/src/workflows/payment-book-master/index.js +11 -0
  277. package/.medusa/server/src/workflows/payment-book-master/steps/create-or-update-payment-book-master.js +37 -0
  278. package/.medusa/server/src/workflows/payment-book-master/steps/fetch-payment-book.js +64 -0
  279. package/.medusa/server/src/workflows/rate-chart-master/index.js +11 -0
  280. package/.medusa/server/src/workflows/rate-chart-master/steps/create-or-update-rate-chart-master.js +25 -0
  281. package/.medusa/server/src/workflows/rate-chart-master/steps/fetch-rate-chart.js +31 -0
  282. package/.medusa/server/src/workflows/report-master/index.js +11 -0
  283. package/.medusa/server/src/workflows/report-master/steps/create-or-update-report-master.js +53 -0
  284. package/.medusa/server/src/workflows/report-master/steps/fetch-report.js +71 -0
  285. package/.medusa/server/src/workflows/sale-master/index.js +24 -0
  286. package/.medusa/server/src/workflows/sale-master/steps/create-sale-master.js +72 -0
  287. package/.medusa/server/src/workflows/sale-master/steps/delete-sale-master.js +59 -0
  288. package/.medusa/server/src/workflows/sale-master/steps/update-sale-master.js +95 -0
  289. package/.medusa/server/src/workflows/sale-return-master/index.js +24 -0
  290. package/.medusa/server/src/workflows/sale-return-master/steps/create-sale-return-master.js +45 -0
  291. package/.medusa/server/src/workflows/sale-return-master/steps/delete-sale-return-master.js +36 -0
  292. package/.medusa/server/src/workflows/sale-return-master/steps/update-sale-return-master.js +53 -0
  293. package/.medusa/server/src/workflows/sale-return-policy-master/index.js +11 -0
  294. package/.medusa/server/src/workflows/sale-return-policy-master/steps/create-or-update-sale-return-policy-master.js +91 -0
  295. package/.medusa/server/src/workflows/sale-return-policy-master/steps/fetch-sale-return-policy.js +31 -0
  296. package/.medusa/server/src/workflows/update-extended-product-from-product/index.js +6 -8
  297. package/.medusa/server/src/workflows/update-extended-variant-from-variant/workflows/update-extended-variant-status-from-variant.js +9 -3
  298. package/package.json +14 -32
@@ -5,32 +5,145 @@ const utils_1 = require("@medusajs/framework/utils");
5
5
  const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
6
  const order_helper_1 = require("../utils/order-helper");
7
7
  exports.syncOrderToErpStep = (0, workflows_sdk_1.createStep)("sync-order-to-erp", async ({ order }, { container }) => {
8
- console.log("order>>>>>>>>>>>>>", order);
9
8
  const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
10
9
  const { data: [customer], } = await query.graph({
11
10
  entity: "customer",
12
11
  fields: ["*", "extended_customer.*"],
13
12
  filters: { id: order.customer_id },
14
13
  });
15
- console.log("customer", customer);
16
- const { data: party } = await query.graph({
14
+ // let filter:any = {}
15
+ // if(order?.metadata?.cart_type ==="POS_CART"){
16
+ // filter.party_no = customer.extended_customer?.external_id
17
+ // } else {
18
+ // filter.branch_name= "self"
19
+ // }
20
+ const { data: partyData } = await query.graph({
17
21
  entity: "party_master",
18
22
  fields: ["*"],
19
23
  filters: {
20
24
  owner_mobile: customer.phone?.replace("+91", ""),
25
+ is_main_client: true
21
26
  },
22
27
  });
23
- //have to pass self branch party beacuse we are pushing all orders to self branch for now
24
- const selfBranchParty = party.find((p) => p.branch_name.toLowerCase() === "self");
25
- const partyToUse = selfBranchParty || party[0];
26
- console.log("partyToUse", partyToUse);
28
+ const payment = {
29
+ "pp_cash_cash": "cash",
30
+ "pp_cheque_cheque": "cheque",
31
+ "pp_bank_transfer_bank_transfer": "bank",
32
+ "pp_gokwik_gokwik": "payu",
33
+ "pp_razorpay_razorpay": "razorpay",
34
+ "pp_wallet_wallet": "wallet",
35
+ "pp_worldline-pos_worldline_pos": "pos",
36
+ };
37
+ const partyToUse = partyData[0];
27
38
  const { data: [promocode_series_master], } = await query.graph({
28
39
  entity: "promocode_series_master",
29
40
  fields: ["promocode_series_id", "promocode_master_id", "promocode"],
30
41
  filters: {
31
- promocode: order?.metadata?.code,
42
+ promocode: order?.metadata?.discount?.code,
32
43
  },
33
44
  });
45
+ const { data: payment_info, } = await query.graph({
46
+ entity: "payment_book_master",
47
+ fields: ["id", "book_name"],
48
+ filters: {
49
+ branch_no: order?.metadata?.cart_type === "POS_CART" ? partyToUse?.branch_no ?? "" : "",
50
+ type: "order",
51
+ },
52
+ });
53
+ const payment_collections = order?.payment_collections?.[0].payments;
54
+ console.log("payment_collections", payment_collections);
55
+ let payment_option = [];
56
+ if (payment_collections) {
57
+ payment_option = payment_collections?.map((paymentItem) => {
58
+ const provider = payment[paymentItem.provider_id];
59
+ let book_name = "";
60
+ let remarks = "";
61
+ if (provider === "pos") {
62
+ const posType = paymentItem.data?.pos_type || "";
63
+ book_name = payment_info?.find((bookItem) => bookItem.book_name?.toLowerCase()?.includes(posType.toLowerCase()))?.book_name || "";
64
+ const otherFields = { ...paymentItem.data };
65
+ delete otherFields.amount;
66
+ delete otherFields.session_id;
67
+ if (otherFields.worldline_pos) {
68
+ const worldlineData = otherFields.worldline_pos;
69
+ if (worldlineData.verification_response) {
70
+ const verifyResponse = worldlineData.verification_response;
71
+ remarks = Object.entries({
72
+ pos_id: otherFields.pos_id || "",
73
+ pos_type: otherFields.pos_type || "",
74
+ transaction_id: verifyResponse.rrn || verifyResponse.transaction_id || "",
75
+ response_code: verifyResponse.response_code || "",
76
+ response_message: verifyResponse.response_message || "",
77
+ status: verifyResponse.status || "",
78
+ })
79
+ .filter(([_, v]) => v !== "")
80
+ .map(([k, v]) => `${k}: ${v}`)
81
+ .join(", ");
82
+ }
83
+ else {
84
+ remarks = Object.entries({
85
+ pos_id: otherFields.pos_id || "",
86
+ pos_type: otherFields.pos_type || "",
87
+ urn: worldlineData.urn || "",
88
+ })
89
+ .filter(([_, v]) => v !== "")
90
+ .map(([k, v]) => `${k}: ${v}`)
91
+ .join(", ");
92
+ }
93
+ }
94
+ else {
95
+ remarks = Object.entries(otherFields)
96
+ .filter(([_, v]) => v !== "")
97
+ .map(([k, v]) => {
98
+ if (typeof v === "object" && v !== null) {
99
+ return `${k}: ${JSON.stringify(v)}`;
100
+ }
101
+ return `${k}: ${v}`;
102
+ })
103
+ .join(", ");
104
+ }
105
+ }
106
+ else if (provider === "wallet") {
107
+ book_name = "Wallet Balance";
108
+ const otherFields = { ...paymentItem.data };
109
+ remarks = Object.entries(otherFields)
110
+ .filter(([_, v]) => v !== "")
111
+ .map(([k, v]) => {
112
+ if (typeof v === "object" && v !== null) {
113
+ return `${k}: ${JSON.stringify(v)}`;
114
+ }
115
+ return `${k}: ${String(v)}`;
116
+ })
117
+ .join(", ");
118
+ }
119
+ else {
120
+ book_name = payment_info?.find((bookItem) => bookItem.book_name?.toLowerCase()?.includes(provider))?.book_name || "";
121
+ const otherFields = { ...paymentItem.data };
122
+ delete otherFields.amount;
123
+ delete otherFields.session_id;
124
+ delete otherFields?.cart_id;
125
+ delete otherFields?.billing_address;
126
+ delete otherFields?.shipping_address;
127
+ delete otherFields?.extra?.billing_address;
128
+ delete otherFields?.extra?.shipping_address;
129
+ remarks = Object.entries(otherFields)
130
+ .filter(([_, v]) => v !== "")
131
+ .map(([k, v]) => {
132
+ if (typeof v === "object" && v !== null) {
133
+ return `${k}: ${JSON.stringify(v)}`;
134
+ }
135
+ return `${k}: ${String(v)}`;
136
+ })
137
+ .join(", ");
138
+ }
139
+ return {
140
+ OrderId: 0,
141
+ BookName: book_name || "Razorpay Receipt - Self/Shiv.Adi.",
142
+ Amount: Number(paymentItem.amount) || 0,
143
+ Remarks: remarks ? JSON.stringify(remarks) : "",
144
+ };
145
+ });
146
+ }
34
147
  const { data: [promocode_master], } = await query.graph({
35
148
  entity: "promocode_master",
36
149
  fields: ["per_amt_on", "per_amt_value"],
@@ -41,18 +154,423 @@ exports.syncOrderToErpStep = (0, workflows_sdk_1.createStep)("sync-order-to-erp"
41
154
  const promocode_data = {
42
155
  promocode_series_id: promocode_series_master?.promocode_series_id || 0,
43
156
  promocode: promocode_series_master?.promocode || "",
44
- promocode_percentage: promocode_master?.per_amt_on
157
+ promocode_percentage: promocode_series_master?.promocode && promocode_master?.per_amt_on
45
158
  ? 0
46
159
  : promocode_master?.per_amt_value || 0,
47
- promocode_amount: promocode_master?.per_amt_on
160
+ promocode_amount: promocode_series_master?.promocode && promocode_master?.per_amt_on
48
161
  ? promocode_master?.per_amt_value || 0
49
162
  : 0,
50
163
  };
51
- console.log("promocode_data", promocode_data);
52
- const orderPayload = (0, order_helper_1.buildOrderData)(order, customer, partyToUse, promocode_data);
53
- console.log("orderPayload", JSON.stringify(orderPayload, null, 2));
164
+ const orderPayload = (0, order_helper_1.buildOrderData)(order, customer, partyToUse, promocode_data, payment_option);
165
+ console.log("___", orderPayload);
54
166
  const erpModuleService = container.resolve("erp");
55
- const erpOrder = await erpModuleService.createOrder(orderPayload);
56
- return new workflows_sdk_1.StepResponse(erpOrder || null);
167
+ let erpResponse = await erpModuleService.createOrder(orderPayload, order?.metadata?.cart_type === "POS_CART" ? "POS" : "WEBSITE");
168
+ if (erpResponse?.status === false && erpResponse?.message?.includes("JewelCode Assign to Other Order")) {
169
+ console.log("[SYNC ORDER TO ERP] Detected jewel code conflict, attempting resolution...");
170
+ // Parse the conflicting jewel_code from error message
171
+ const jewelCodeMatch = erpResponse.message.match(/([A-Z]{2}\d+)/i);
172
+ const conflictingJewelCode = jewelCodeMatch?.[1];
173
+ if (conflictingJewelCode) {
174
+ console.log("[SYNC ORDER TO ERP] Conflicting jewel_code:", conflictingJewelCode);
175
+ // Find the item with this jewel_code
176
+ const conflictingItem = (order.items || []).find((item) => item.metadata?.jewel_items?.jewel_code === conflictingJewelCode);
177
+ if (conflictingItem) {
178
+ const styleCode = conflictingItem.variant?.extended_variant?.style_code;
179
+ const branchNo = partyToUse?.branch_no;
180
+ // Find alternative jewel_code with same style and branch
181
+ const { data: availableInwards } = await query.graph({
182
+ entity: "inward_master",
183
+ fields: ["jewel_code", "jewel_id", "style_code", "branch_no", "status", "mrp"],
184
+ filters: {
185
+ style_code: styleCode,
186
+ branch_no: branchNo,
187
+ status: "In Stock",
188
+ },
189
+ });
190
+ const alternativeInward = availableInwards?.find((inward) => inward.jewel_code !== conflictingJewelCode);
191
+ const orderService = container.resolve(utils_1.Modules.ORDER);
192
+ const cartService = container.resolve(utils_1.Modules.CART);
193
+ if (alternativeInward) {
194
+ // Found alternative - update metadata and retry
195
+ console.log("[SYNC ORDER TO ERP] Found alternative jewel_code:", alternativeInward.jewel_code);
196
+ const updatedJewelItems = {
197
+ ...(conflictingItem.metadata?.jewel_items || {}),
198
+ jewel_code: alternativeInward.jewel_code,
199
+ jewel_id: alternativeInward.jewel_id,
200
+ };
201
+ // Update order item metadata
202
+ await orderService.updateOrderLineItems([{
203
+ selector: { id: conflictingItem.id },
204
+ data: {
205
+ metadata: {
206
+ ...(conflictingItem.metadata || {}),
207
+ jewel_items: updatedJewelItems,
208
+ previous_jewel_code: conflictingJewelCode,
209
+ },
210
+ },
211
+ }]);
212
+ // Update in-memory order for payload rebuild
213
+ conflictingItem.metadata = {
214
+ ...(conflictingItem.metadata || {}),
215
+ jewel_items: updatedJewelItems,
216
+ };
217
+ // Update cart item if exists
218
+ const cartId = order.metadata?.cart_id;
219
+ if (cartId && typeof cartId === "string") {
220
+ try {
221
+ const cart = await cartService.retrieveCart(cartId, { relations: ["items"] });
222
+ const cartItem = cart?.items?.find((item) => item.variant_id === conflictingItem.variant_id);
223
+ if (cartItem) {
224
+ await cartService.updateLineItems([{
225
+ id: cartItem.id,
226
+ metadata: {
227
+ ...(cartItem.metadata || {}),
228
+ jewel_items: updatedJewelItems,
229
+ previous_jewel_code: conflictingJewelCode,
230
+ },
231
+ }]);
232
+ }
233
+ }
234
+ catch (e) {
235
+ console.error("[SYNC ORDER TO ERP] Cart item update error:", e);
236
+ }
237
+ }
238
+ // Rebuild order payload with new jewel_code and retry
239
+ const retryOrderPayload = (0, order_helper_1.buildOrderData)(order, customer, partyToUse, promocode_data, payment_option);
240
+ console.log("[SYNC ORDER TO ERP] Retrying order creation with new jewel_code...", retryOrderPayload);
241
+ erpResponse = await erpModuleService.createOrder(retryOrderPayload, order?.metadata?.cart_type === "POS_CART" ? "POS" : "WEBSITE");
242
+ if (erpResponse?.status !== false) {
243
+ console.log("[SYNC ORDER TO ERP] ✅ Order created successfully after jewel_code replacement");
244
+ }
245
+ }
246
+ else {
247
+ // No alternative - convert to make_to_order
248
+ console.log("[SYNC ORDER TO ERP] No alternative jewel_code found, converting to make_to_order");
249
+ // Update order item - remove jewel_items completely
250
+ const updatedItemMetadata = { ...(conflictingItem.metadata || {}) };
251
+ delete updatedItemMetadata.jewel_items;
252
+ updatedItemMetadata.converted_to_mto = true;
253
+ updatedItemMetadata.conversion_timestamp = new Date().toISOString();
254
+ await orderService.updateOrderLineItems([{
255
+ selector: { id: conflictingItem.id },
256
+ data: { metadata: updatedItemMetadata },
257
+ }]);
258
+ // Update in-memory order
259
+ conflictingItem.metadata = updatedItemMetadata;
260
+ // Update cart if exists
261
+ const cartId = order.metadata?.cart_id;
262
+ if (cartId && typeof cartId === "string") {
263
+ try {
264
+ const cart = await cartService.retrieveCart(cartId, { relations: ["items"] });
265
+ const cartItem = cart?.items?.find((item) => item.variant_id === conflictingItem.variant_id);
266
+ if (cartItem) {
267
+ const updatedCartMeta = { ...(cartItem.metadata || {}) };
268
+ delete updatedCartMeta.jewel_items;
269
+ updatedCartMeta.converted_to_mto = true;
270
+ await cartService.updateLineItems([{ id: cartItem.id, metadata: updatedCartMeta }]);
271
+ }
272
+ // Update cart order type
273
+ await cartService.updateCarts([{
274
+ id: cartId,
275
+ metadata: {
276
+ ...(cart?.metadata || {}),
277
+ cart_order_type: "make_to_order",
278
+ original_order_type: cart?.metadata?.cart_order_type,
279
+ mto_conversion_reason: "no_alternative_jewel_code",
280
+ },
281
+ }]);
282
+ }
283
+ catch (e) {
284
+ console.error("[SYNC ORDER TO ERP] Cart update error:", e);
285
+ }
286
+ }
287
+ // Update order type
288
+ await orderService.updateOrders([{
289
+ id: order.id,
290
+ metadata: {
291
+ ...(order.metadata || {}),
292
+ cart_order_type: "make_to_order",
293
+ original_order_type: order.metadata?.cart_order_type,
294
+ mto_conversion_reason: "no_alternative_jewel_code",
295
+ },
296
+ }]);
297
+ // Update extended_order
298
+ const { data: extOrderData } = await query.graph({
299
+ entity: "extended_order",
300
+ fields: ["id"],
301
+ filters: { order_id: order.id },
302
+ });
303
+ if (extOrderData?.[0]?.id) {
304
+ try {
305
+ const extOrderService = container.resolve("extended_order");
306
+ await extOrderService.updateExtendedOrders({
307
+ id: extOrderData[0].id,
308
+ order_type: "make_to_order",
309
+ });
310
+ }
311
+ catch (e) {
312
+ console.error("[SYNC ORDER TO ERP] Extended order update error:", e);
313
+ }
314
+ }
315
+ // Rebuild order payload without jewel_code and retry
316
+ order.metadata = {
317
+ ...(order.metadata || {}),
318
+ cart_order_type: "make_to_order",
319
+ };
320
+ const retryOrderPayload = (0, order_helper_1.buildOrderData)(order, customer, partyToUse, promocode_data, payment_option);
321
+ console.log("[SYNC ORDER TO ERP] Retrying order creation as make_to_order...");
322
+ erpResponse = await erpModuleService.createOrder(retryOrderPayload, order?.metadata?.cart_type === "POS_CART" ? "POS" : "WEBSITE");
323
+ if (erpResponse?.status !== false) {
324
+ console.log("[SYNC ORDER TO ERP] ✅ Order created successfully as make_to_order");
325
+ }
326
+ }
327
+ }
328
+ }
329
+ }
330
+ // Check if ERP response has status false and send Slack notification
331
+ if (erpResponse?.status === false) {
332
+ try {
333
+ const notificationService = container.resolve(utils_1.Modules.NOTIFICATION);
334
+ await notificationService.createNotifications([
335
+ {
336
+ to: "slack",
337
+ channel: "slack",
338
+ template: "slack-alert",
339
+ data: {
340
+ alertType: "gati_create_order_failure",
341
+ message: `ERP Order Creation Failed for Order ID: ${order.id}`,
342
+ error: erpResponse.message || "Unknown error occurred",
343
+ severity: "high",
344
+ metadata: {
345
+ order_id: order.id,
346
+ order_display_id: order.display_id,
347
+ error_message: erpResponse.message,
348
+ cart_type: order?.metadata?.cart_type || "WEBSITE",
349
+ },
350
+ timestamp: new Date(),
351
+ },
352
+ },
353
+ ]);
354
+ }
355
+ catch (slackError) {
356
+ console.error("Failed to send Slack notification:", slackError);
357
+ }
358
+ }
359
+ // Create sale after order is created successfully
360
+ let saleResponse = null;
361
+ if (erpResponse?.status !== false && erpResponse?.data && order?.metadata?.cart_type === "POS_CART" && order.metadata.cart_order_type === "ready_to_sell") {
362
+ // Check if all items with jewel_code exist in inward_master with matching branch_no
363
+ const itemsWithJewelCode = (order.items || []).filter((item) => item.metadata?.jewel_items?.jewel_code);
364
+ let allItemsMatch = true;
365
+ if (itemsWithJewelCode.length > 0) {
366
+ const branchNo = partyToUse?.branch_no;
367
+ if (!branchNo) {
368
+ console.log("Branch number not found, skipping sale creation");
369
+ allItemsMatch = false;
370
+ }
371
+ else {
372
+ // Check each item with jewel_code in inward_master
373
+ const inwardChecks = await Promise.all(itemsWithJewelCode.map(async (item) => {
374
+ const jewelCode = item.metadata?.jewel_items?.jewel_code;
375
+ if (!jewelCode)
376
+ return true;
377
+ const { data: [inwardMaster] } = await query.graph({
378
+ entity: "inward_master",
379
+ fields: ["jewel_code", "branch_no"],
380
+ filters: {
381
+ jewel_code: jewelCode,
382
+ branch_no: branchNo,
383
+ },
384
+ });
385
+ if (!inwardMaster) {
386
+ console.log(`Inward master not found for jewel_code: ${jewelCode} and branch_no: ${branchNo}`);
387
+ return false;
388
+ }
389
+ return true;
390
+ }));
391
+ allItemsMatch = inwardChecks.every((match) => match);
392
+ }
393
+ }
394
+ if (!allItemsMatch) {
395
+ console.log("Not all items match in inward_master, skipping sale creation");
396
+ try {
397
+ const notificationService = container.resolve(utils_1.Modules.NOTIFICATION);
398
+ await notificationService.createNotifications([
399
+ {
400
+ to: "slack",
401
+ channel: "slack",
402
+ template: "slack-alert",
403
+ data: {
404
+ alertType: "gati_sale_creation_skipped",
405
+ message: `Sale Creation Skipped for Order ID: ${order.id} - Jewel code and branch_no mismatch in inward_master`,
406
+ error: "One or more items with jewel_code do not match in inward_master with the branch_no",
407
+ severity: "medium",
408
+ metadata: {
409
+ order_id: order.id,
410
+ order_display_id: order.display_id,
411
+ cart_type: order?.metadata?.cart_type || "WEBSITE",
412
+ },
413
+ timestamp: new Date(),
414
+ },
415
+ },
416
+ ]);
417
+ }
418
+ catch (slackError) {
419
+ console.error("Failed to send Slack notification:", slackError);
420
+ }
421
+ return new workflows_sdk_1.StepResponse({
422
+ order: erpResponse?.data || null,
423
+ sale: null,
424
+ });
425
+ }
426
+ const salePayload = (0, order_helper_1.buildSaleData)(order, customer, partyToUse, promocode_data, payment_option);
427
+ console.log("salePayload", JSON.stringify(salePayload, null, 2));
428
+ saleResponse = await erpModuleService.createSale(salePayload, order?.metadata?.cart_type === "POS_CART" ? "POS" : "WEBSITE");
429
+ console.log("saleResponse", JSON.stringify(saleResponse, null, 2));
430
+ // Check if sale creation failed and send Slack notification
431
+ if (saleResponse?.status === false) {
432
+ try {
433
+ const notificationService = container.resolve(utils_1.Modules.NOTIFICATION);
434
+ await notificationService.createNotifications([
435
+ {
436
+ to: "slack",
437
+ channel: "slack",
438
+ template: "slack-alert",
439
+ data: {
440
+ alertType: "gati_create_sale_failure",
441
+ message: `ERP Sale Creation Failed for Order ID: ${order.id}`,
442
+ error: saleResponse.message || "Unknown error occurred",
443
+ severity: "high",
444
+ metadata: {
445
+ order_id: order.id,
446
+ order_display_id: order.display_id,
447
+ error_message: saleResponse.message,
448
+ cart_type: order?.metadata?.cart_type || "WEBSITE",
449
+ },
450
+ timestamp: new Date(),
451
+ },
452
+ },
453
+ ]);
454
+ }
455
+ catch (slackError) {
456
+ console.error("Failed to send Slack notification:", slackError);
457
+ }
458
+ // Sale failed but order succeeded — convert to make_to_order,
459
+ // strip jewel_items from all order items, and release inward reservations
460
+ console.log("[SYNC ORDER TO ERP] Sale failed — converting order to make_to_order and releasing inward reservations");
461
+ try {
462
+ const orderService = container.resolve(utils_1.Modules.ORDER);
463
+ const inwardMasterService = container.resolve("extended_variant");
464
+ // Strip jewel_items from every order item that has them
465
+ const itemsWithJewelItems = (order.items || []).filter((item) => item.metadata?.jewel_items);
466
+ for (const item of itemsWithJewelItems) {
467
+ const jewelCode = item.metadata?.jewel_items?.jewel_code;
468
+ // Reset inward_master reservation fields
469
+ if (jewelCode) {
470
+ try {
471
+ const { data: inwardRecords } = await query.graph({
472
+ entity: "inward_master",
473
+ fields: ["id", "jewel_code"],
474
+ filters: { jewel_code: jewelCode },
475
+ });
476
+ if (inwardRecords?.length) {
477
+ await inwardMasterService.updateInwardMasters(inwardRecords.map((r) => ({
478
+ id: r.id,
479
+ is_inward_marked: false,
480
+ inward_order_id: null,
481
+ inward_marked_at: null,
482
+ })));
483
+ console.log(`[SYNC ORDER TO ERP] Released inward reservation for jewel_code: ${jewelCode}`);
484
+ }
485
+ }
486
+ catch (inwardErr) {
487
+ console.error(`[SYNC ORDER TO ERP] Failed to reset inward for jewel_code ${jewelCode}:`, inwardErr);
488
+ }
489
+ }
490
+ // Remove jewel_items from order item metadata
491
+ // Set jewel_items to null explicitly — Medusa merges metadata so delete alone won't remove it
492
+ await orderService.updateOrderLineItems([{
493
+ selector: { id: item.id },
494
+ data: {
495
+ metadata: {
496
+ ...(item.metadata || {}),
497
+ jewel_items: null,
498
+ converted_to_mto: true,
499
+ mto_conversion_reason: "sale_creation_failed",
500
+ },
501
+ },
502
+ }]);
503
+ }
504
+ // Convert order to make_to_order
505
+ await orderService.updateOrders([{
506
+ id: order.id,
507
+ metadata: {
508
+ ...(order.metadata || {}),
509
+ cart_order_type: "make_to_order",
510
+ original_order_type: order.metadata?.cart_order_type,
511
+ mto_conversion_reason: "sale_creation_failed",
512
+ },
513
+ }]);
514
+ // Update extended_order order_type
515
+ const { data: extOrderData } = await query.graph({
516
+ entity: "extended_order",
517
+ fields: ["id"],
518
+ filters: { order_id: order.id },
519
+ });
520
+ if (extOrderData?.[0]?.id) {
521
+ const extOrderService = container.resolve("extended_order");
522
+ await extOrderService.updateExtendedOrders({
523
+ id: extOrderData[0].id,
524
+ order_type: "make_to_order",
525
+ });
526
+ }
527
+ console.log("[SYNC ORDER TO ERP] Order converted to make_to_order after sale failure");
528
+ }
529
+ catch (conversionErr) {
530
+ console.error("[SYNC ORDER TO ERP] Failed to convert order to make_to_order after sale failure:", conversionErr);
531
+ }
532
+ }
533
+ }
534
+ // Update extended_order with ERP sync results
535
+ try {
536
+ const { data: extOrderData } = await query.graph({
537
+ entity: "extended_order",
538
+ fields: ["id"],
539
+ filters: { order_id: order.id },
540
+ });
541
+ console.log(`[SYNC ORDER TO ERP] extended_order lookup for order ${order.id}:`, extOrderData?.[0]?.id || "NOT FOUND");
542
+ console.log(`[SYNC ORDER TO ERP] erpResponse status=${erpResponse?.status}, OrderId=${erpResponse?.data?.OrderId}`);
543
+ console.log(`[SYNC ORDER TO ERP] saleResponse status=${saleResponse?.status}, JewelTransId=${saleResponse?.data?.JewelTransId}`);
544
+ if (extOrderData?.[0]?.id) {
545
+ const extOrderService = container.resolve("extended_order");
546
+ const updatePayload = { id: extOrderData[0].id };
547
+ const erpOrderId = erpResponse?.data?.OrderId;
548
+ if (erpOrderId && erpResponse?.status !== false) {
549
+ updatePayload.external_id = String(erpOrderId);
550
+ updatePayload.sync_erp = true;
551
+ }
552
+ if (saleResponse?.status === true && saleResponse?.data?.JewelTransId) {
553
+ updatePayload.sale_external_id = String(saleResponse.data.JewelTransId);
554
+ }
555
+ // Only call update if there's something beyond just the id
556
+ if (Object.keys(updatePayload).length > 1) {
557
+ console.log(`[SYNC ORDER TO ERP] Updating extended_order ${extOrderData[0].id} with:`, JSON.stringify(updatePayload));
558
+ await extOrderService.updateExtendedOrders(updatePayload);
559
+ console.log(`[SYNC ORDER TO ERP] extended_order updated successfully`);
560
+ }
561
+ else {
562
+ console.log(`[SYNC ORDER TO ERP] No fields to update in extended_order (erpResponse.data.OrderId missing or ERP failed)`);
563
+ }
564
+ }
565
+ }
566
+ catch (extOrderError) {
567
+ console.error("[SYNC ORDER TO ERP] Failed to update extended_order:", extOrderError);
568
+ }
569
+ return new workflows_sdk_1.StepResponse({
570
+ order: erpResponse?.data || null,
571
+ sale: saleResponse?.status === true && saleResponse?.data?.JewelTransId
572
+ ? { jewel_trans_id: saleResponse?.data.JewelTransId, data: saleResponse?.data }
573
+ : null,
574
+ });
57
575
  });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1vcmRlci10by1lcnAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL29yZGVycy9zdGVwcy9zeW5jLW9yZGVyLXRvLWVycC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxREFBc0U7QUFDdEUscUVBQTZFO0FBRzdFLHdEQUF1RDtBQUkxQyxRQUFBLGtCQUFrQixHQUFHLElBQUEsMEJBQVUsRUFDMUMsbUJBQW1CLEVBQ25CLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBYSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUNqQixHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNwQixNQUFNLEVBQUUsVUFBVTtRQUNsQixNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUM7UUFDcEMsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUU7S0FDbkMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbEMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDeEMsTUFBTSxFQUFFLGNBQWM7UUFDdEIsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ2IsT0FBTyxFQUFFO1lBQ1AsWUFBWSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7U0FDakQ7S0FDRixDQUFDLENBQUM7SUFFSCx5RkFBeUY7SUFDekYsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FDaEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUM5QyxDQUFDO0lBRUYsTUFBTSxVQUFVLEdBQUcsZUFBZSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUV0QyxNQUFNLEVBQ0osSUFBSSxFQUFFLENBQUMsdUJBQXVCLENBQUMsR0FDaEMsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDcEIsTUFBTSxFQUFFLHlCQUF5QjtRQUNqQyxNQUFNLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxXQUFXLENBQUM7UUFDbkUsT0FBTyxFQUFFO1lBQ1AsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSTtTQUNqQztLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sRUFDSixJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUN6QixHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNwQixNQUFNLEVBQUUsa0JBQWtCO1FBQzFCLE1BQU0sRUFBRSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUM7UUFDdkMsT0FBTyxFQUFFO1lBQ1AsRUFBRSxFQUFFLHVCQUF1QixFQUFFLG1CQUFtQjtTQUNqRDtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sY0FBYyxHQUFHO1FBQ3JCLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixJQUFJLENBQUM7UUFDdEUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsSUFBSSxFQUFFO1FBQ25ELG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLFVBQVU7WUFDaEQsQ0FBQyxDQUFDLENBQUM7WUFDSCxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxJQUFJLENBQUM7UUFDeEMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVTtZQUM1QyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxJQUFJLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7S0FDTixDQUFDO0lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFBLDZCQUFjLEVBQ2pDLEtBQUssRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLGNBQWMsQ0FDZixDQUFDO0lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkUsTUFBTSxnQkFBZ0IsR0FBZSxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlELE1BQU0sUUFBUSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xFLE9BQU8sSUFBSSw0QkFBWSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQ0YsQ0FBQyJ9
576
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1vcmRlci10by1lcnAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL29yZGVycy9zdGVwcy9zeW5jLW9yZGVyLXRvLWVycC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBNkU7QUFDN0UscUVBQTJFO0FBRTNFLHdEQUFvRTtBQUt2RCxRQUFBLGtCQUFrQixHQUFHLElBQUEsMEJBQVUsRUFDMUMsbUJBQW1CLEVBQ25CLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBYSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUM1QyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sRUFDSixJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FDakIsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDcEIsTUFBTSxFQUFFLFVBQVU7UUFDbEIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLHFCQUFxQixDQUFDO1FBQ3BDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFO0tBQ25DLENBQUMsQ0FBQztJQUVILHNCQUFzQjtJQUN0QixnREFBZ0Q7SUFDaEQsK0RBQStEO0lBQy9ELFdBQVc7SUFDWCwrQkFBK0I7SUFDL0IsSUFBSTtJQUVKLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzVDLE1BQU0sRUFBRSxjQUFjO1FBQ3RCLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUNiLE9BQU8sRUFBRTtZQUNQLFlBQVksRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ2hELGNBQWMsRUFBRSxJQUFJO1NBQ3JCO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxPQUFPLEdBQTJCO1FBQ3RDLGNBQWMsRUFBRSxNQUFNO1FBQ3RCLGtCQUFrQixFQUFFLFFBQVE7UUFDNUIsZ0NBQWdDLEVBQUUsTUFBTTtRQUN4QyxrQkFBa0IsRUFBRSxNQUFNO1FBQzFCLHNCQUFzQixFQUFFLFVBQVU7UUFDbEMsa0JBQWtCLEVBQUUsUUFBUTtRQUM1QixnQ0FBZ0MsRUFBRSxLQUFLO0tBQ3hDLENBQUM7SUFFRixNQUFNLFVBQVUsR0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFcEMsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLHVCQUF1QixDQUFDLEdBQ2hDLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3BCLE1BQU0sRUFBRSx5QkFBeUI7UUFDakMsTUFBTSxFQUFFLENBQUMscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsV0FBVyxDQUFDO1FBQ25FLE9BQU8sRUFBRTtZQUNQLFNBQVMsRUFBRyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQWdCLEVBQUUsSUFBSTtTQUNwRDtLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sRUFDSixJQUFJLEVBQUUsWUFBWSxHQUNuQixHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNwQixNQUFNLEVBQUUscUJBQXFCO1FBQzdCLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUM7UUFDM0IsT0FBTyxFQUFFO1lBQ1AsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxLQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdEYsSUFBSSxFQUFDLE9BQU87U0FDYjtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3JFLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUN4RCxJQUFJLGNBQWMsR0FLWixFQUFFLENBQUE7SUFDUixJQUFHLG1CQUFtQixFQUFDLENBQUM7UUFDdEIsY0FBYyxHQUFHLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBQyxFQUFFO1lBQ3ZELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEQsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ25CLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUVqQixJQUFHLFFBQVEsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxPQUFPLEdBQUksV0FBVyxDQUFDLElBQVksRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUMxRCxTQUFTLEdBQUcsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQXFDLEVBQUMsRUFBRSxDQUFBLFFBQVEsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQztnQkFFN0osTUFBTSxXQUFXLEdBQUcsRUFBRSxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDNUMsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDO2dCQUMxQixPQUFPLFdBQVcsQ0FBQyxVQUFVLENBQUM7Z0JBRTlCLElBQUksV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUM5QixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsYUFBb0IsQ0FBQztvQkFDdkQsSUFBSSxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQzt3QkFDeEMsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixDQUFDO3dCQUMzRCxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQzs0QkFDdkIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLElBQUksRUFBRTs0QkFDaEMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxRQUFRLElBQUksRUFBRTs0QkFDcEMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxHQUFHLElBQUksY0FBYyxDQUFDLGNBQWMsSUFBSSxFQUFFOzRCQUN6RSxhQUFhLEVBQUUsY0FBYyxDQUFDLGFBQWEsSUFBSSxFQUFFOzRCQUNqRCxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsZ0JBQWdCLElBQUksRUFBRTs0QkFDdkQsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNLElBQUksRUFBRTt5QkFDcEMsQ0FBQzs2QkFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs2QkFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDOzZCQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2hCLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQzs0QkFDdkIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLElBQUksRUFBRTs0QkFDaEMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxRQUFRLElBQUksRUFBRTs0QkFDcEMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxHQUFHLElBQUksRUFBRTt5QkFDN0IsQ0FBQzs2QkFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs2QkFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDOzZCQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2hCLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQzt5QkFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7eUJBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7d0JBQ2QsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDOzRCQUN4QyxPQUFPLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEMsQ0FBQzt3QkFDRCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUN0QixDQUFDLENBQUM7eUJBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQixDQUFDO1lBQ0gsQ0FBQztpQkFBTSxJQUFHLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDaEMsU0FBUyxHQUFHLGdCQUFnQixDQUFBO2dCQUM1QixNQUFNLFdBQVcsR0FBRyxFQUFFLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUM1QyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7cUJBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO3FCQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNkLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQzt3QkFDeEMsT0FBTyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLENBQUM7b0JBQ0QsT0FBTyxHQUFHLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsQ0FBQyxDQUFDO3FCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sU0FBUyxHQUFHLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFxQyxFQUFDLEVBQUUsQ0FBQSxRQUFRLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUM7Z0JBRWhKLE1BQU0sV0FBVyxHQUFHLEVBQUUsR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzVDLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQztnQkFDMUIsT0FBTyxXQUFXLENBQUMsVUFBVSxDQUFDO2dCQUM5QixPQUFPLFdBQVcsRUFBRSxPQUFPLENBQUM7Z0JBQzVCLE9BQU8sV0FBVyxFQUFFLGVBQWUsQ0FBQztnQkFDcEMsT0FBTyxXQUFXLEVBQUUsZ0JBQWdCLENBQUM7Z0JBQ3JDLE9BQVEsV0FBVyxFQUFFLEtBQWEsRUFBRSxlQUFlLENBQUM7Z0JBQ3BELE9BQVEsV0FBVyxFQUFFLEtBQWEsRUFBRSxnQkFBZ0IsQ0FBQztnQkFHckQsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO3FCQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztxQkFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDZCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7d0JBQ3hDLE9BQU8sR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN0QyxDQUFDO29CQUNELE9BQU8sR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLENBQUMsQ0FBQztxQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEIsQ0FBQztZQUVELE9BQU87Z0JBQ0wsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsUUFBUSxFQUFFLFNBQVMsSUFBSSxtQ0FBbUM7Z0JBQzFELE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7YUFDaEQsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNELE1BQU0sRUFDSixJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUN6QixHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNwQixNQUFNLEVBQUUsa0JBQWtCO1FBQzFCLE1BQU0sRUFBRSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUM7UUFDdkMsT0FBTyxFQUFFO1lBQ1AsRUFBRSxFQUFFLHVCQUF1QixFQUFFLG1CQUFtQjtTQUNqRDtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sY0FBYyxHQUFHO1FBQ3JCLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixJQUFJLENBQUM7UUFDdEUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsSUFBSSxFQUFFO1FBQ25ELG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLFNBQVMsSUFBSSxnQkFBZ0IsRUFBRSxVQUFVO1lBQ3RGLENBQUMsQ0FBQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLGFBQWEsSUFBSSxDQUFDO1FBQ3hDLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLFNBQVMsSUFBSyxnQkFBZ0IsRUFBRSxVQUFVO1lBQ25GLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLElBQUksQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztLQUNOLENBQUM7SUFFRixNQUFNLFlBQVksR0FBRyxJQUFBLDZCQUFjLEVBQ2pDLEtBQUssRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLGNBQWMsRUFDZCxjQUFjLENBQ2YsQ0FBQztJQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLFlBQVksQ0FBQyxDQUFBO0lBQy9CLE1BQU0sZ0JBQWdCLEdBQWUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RCxJQUFJLFdBQVcsR0FBRyxNQUFNLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEtBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBLFNBQVMsQ0FBQyxDQUFDO0lBRS9ILElBQUksV0FBVyxFQUFFLE1BQU0sS0FBSyxLQUFLLElBQUksV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsaUNBQWlDLENBQUMsRUFBRSxDQUFDO1FBQ3ZHLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEVBQTRFLENBQUMsQ0FBQztRQUUxRixzREFBc0Q7UUFDdEQsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNuRSxNQUFNLG9CQUFvQixHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpELElBQUksb0JBQW9CLEVBQUUsQ0FBQztZQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLDZDQUE2QyxFQUFFLG9CQUFvQixDQUFDLENBQUM7WUFFakYscUNBQXFDO1lBQ3JDLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzlDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLEtBQUssb0JBQW9CLENBQy9FLENBQUM7WUFFRixJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixNQUFNLFNBQVMsR0FBSSxlQUF1QixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLENBQUM7Z0JBQ2pGLE1BQU0sUUFBUSxHQUFHLFVBQVUsRUFBRSxTQUFTLENBQUM7Z0JBRXZDLHlEQUF5RDtnQkFDekQsTUFBTSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztvQkFDbkQsTUFBTSxFQUFFLGVBQWU7b0JBQ3ZCLE1BQU0sRUFBRSxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDO29CQUM5RSxPQUFPLEVBQUU7d0JBQ1AsVUFBVSxFQUFFLFNBQVM7d0JBQ3JCLFNBQVMsRUFBRSxRQUFRO3dCQUNuQixNQUFNLEVBQUUsVUFBVTtxQkFDbkI7aUJBQ0YsQ0FBQyxDQUFDO2dCQUVILE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLEVBQUUsSUFBSSxDQUM5QyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxvQkFBb0IsQ0FDNUQsQ0FBQztnQkFFRixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEQsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRXBELElBQUksaUJBQWlCLEVBQUUsQ0FBQztvQkFDdEIsZ0RBQWdEO29CQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLG1EQUFtRCxFQUFFLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUUvRixNQUFNLGlCQUFpQixHQUFHO3dCQUN4QixHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDO3dCQUNoRCxVQUFVLEVBQUUsaUJBQWlCLENBQUMsVUFBVTt3QkFDeEMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLFFBQVE7cUJBQ3JDLENBQUM7b0JBRUYsNkJBQTZCO29CQUM3QixNQUFNLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDOzRCQUN2QyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRTs0QkFDcEMsSUFBSSxFQUFFO2dDQUNKLFFBQVEsRUFBRTtvQ0FDUixHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7b0NBQ25DLFdBQVcsRUFBRSxpQkFBaUI7b0NBQzlCLG1CQUFtQixFQUFFLG9CQUFvQjtpQ0FDMUM7NkJBQ0Y7eUJBQ0YsQ0FBQyxDQUFDLENBQUM7b0JBRUosNkNBQTZDO29CQUM3QyxlQUFlLENBQUMsUUFBUSxHQUFHO3dCQUN6QixHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7d0JBQ25DLFdBQVcsRUFBRSxpQkFBaUI7cUJBQy9CLENBQUM7b0JBRUYsNkJBQTZCO29CQUM3QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQztvQkFDdkMsSUFBSSxNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQ3pDLElBQUksQ0FBQzs0QkFDSCxNQUFNLElBQUksR0FBRyxNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUM5RSxNQUFNLFFBQVEsR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FDaEMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLFVBQVUsQ0FDOUQsQ0FBQzs0QkFDRixJQUFJLFFBQVEsRUFBRSxDQUFDO2dDQUNiLE1BQU0sV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO3dDQUNqQyxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUU7d0NBQ2YsUUFBUSxFQUFFOzRDQUNSLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQzs0Q0FDNUIsV0FBVyxFQUFFLGlCQUFpQjs0Q0FDOUIsbUJBQW1CLEVBQUUsb0JBQW9CO3lDQUMxQztxQ0FDRixDQUFDLENBQUMsQ0FBQzs0QkFDTixDQUFDO3dCQUNILENBQUM7d0JBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzs0QkFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNsRSxDQUFDO29CQUNILENBQUM7b0JBRUQsc0RBQXNEO29CQUN0RCxNQUFNLGlCQUFpQixHQUFHLElBQUEsNkJBQWMsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7b0JBQ3RHLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0VBQW9FLEVBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDcEcsV0FBVyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFFbkksSUFBSSxXQUFXLEVBQUUsTUFBTSxLQUFLLEtBQUssRUFBRSxDQUFDO3dCQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLCtFQUErRSxDQUFDLENBQUM7b0JBQy9GLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLDRDQUE0QztvQkFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrRkFBa0YsQ0FBQyxDQUFDO29CQUVoRyxvREFBb0Q7b0JBQ3BELE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUNwRSxPQUFPLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztvQkFDdkMsbUJBQW1CLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO29CQUM1QyxtQkFBbUIsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUVwRSxNQUFNLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDOzRCQUN2QyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRTs0QkFDcEMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFO3lCQUN4QyxDQUFDLENBQUMsQ0FBQztvQkFFSix5QkFBeUI7b0JBQ3pCLGVBQWUsQ0FBQyxRQUFRLEdBQUcsbUJBQW1CLENBQUM7b0JBRS9DLHdCQUF3QjtvQkFDeEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUM7b0JBQ3ZDLElBQUksTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUN6QyxJQUFJLENBQUM7NEJBQ0gsTUFBTSxJQUFJLEdBQUcsTUFBTSxXQUFXLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQzs0QkFDOUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQ2hDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxVQUFVLENBQzlELENBQUM7NEJBQ0YsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQ0FDYixNQUFNLGVBQWUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0NBQ3pELE9BQU8sZUFBZSxDQUFDLFdBQVcsQ0FBQztnQ0FDbkMsZUFBZSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztnQ0FDeEMsTUFBTSxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUN0RixDQUFDOzRCQUVELHlCQUF5Qjs0QkFDekIsTUFBTSxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7b0NBQzdCLEVBQUUsRUFBRSxNQUFNO29DQUNWLFFBQVEsRUFBRTt3Q0FDUixHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7d0NBQ3pCLGVBQWUsRUFBRSxlQUFlO3dDQUNoQyxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGVBQWU7d0NBQ3BELHFCQUFxQixFQUFFLDJCQUEyQjtxQ0FDbkQ7aUNBQ0YsQ0FBQyxDQUFDLENBQUM7d0JBQ04sQ0FBQzt3QkFBQyxPQUFPLENBQUMsRUFBRSxDQUFDOzRCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQzdELENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxvQkFBb0I7b0JBQ3BCLE1BQU0sWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDOzRCQUMvQixFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUU7NEJBQ1osUUFBUSxFQUFFO2dDQUNSLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztnQ0FDekIsZUFBZSxFQUFFLGVBQWU7Z0NBQ2hDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsZUFBZTtnQ0FDcEQscUJBQXFCLEVBQUUsMkJBQTJCOzZCQUNuRDt5QkFDRixDQUFDLENBQUMsQ0FBQztvQkFFSix3QkFBd0I7b0JBQ3hCLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO3dCQUMvQyxNQUFNLEVBQUUsZ0JBQWdCO3dCQUN4QixNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7d0JBQ2QsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7cUJBQ2hDLENBQUMsQ0FBQztvQkFDSCxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO3dCQUMxQixJQUFJLENBQUM7NEJBQ0gsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBUSxDQUFDOzRCQUNuRSxNQUFNLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQztnQ0FDekMsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dDQUN0QixVQUFVLEVBQUUsZUFBZTs2QkFDNUIsQ0FBQyxDQUFDO3dCQUNMLENBQUM7d0JBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzs0QkFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLGtEQUFrRCxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUN2RSxDQUFDO29CQUNILENBQUM7b0JBRUQscURBQXFEO29CQUNyRCxLQUFLLENBQUMsUUFBUSxHQUFHO3dCQUNmLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQzt3QkFDekIsZUFBZSxFQUFFLGVBQWU7cUJBQ2pDLENBQUM7b0JBQ0YsTUFBTSxpQkFBaUIsR0FBRyxJQUFBLDZCQUFjLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO29CQUN0RyxPQUFPLENBQUMsR0FBRyxDQUFDLGlFQUFpRSxDQUFDLENBQUM7b0JBQy9FLFdBQVcsR0FBRyxNQUFNLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBRW5JLElBQUksV0FBVyxFQUFFLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQzt3QkFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO29CQUNuRixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxxRUFBcUU7SUFDckUsSUFBSSxXQUFXLEVBQUUsTUFBTSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQztZQUNILE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDcEUsTUFBTSxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDNUM7b0JBQ0UsRUFBRSxFQUFFLE9BQU87b0JBQ1gsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLFFBQVEsRUFBRSxhQUFhO29CQUN2QixJQUFJLEVBQUU7d0JBQ0osU0FBUyxFQUFFLDJCQUEyQjt3QkFDdEMsT0FBTyxFQUFFLDJDQUEyQyxLQUFLLENBQUMsRUFBRSxFQUFFO3dCQUM5RCxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sSUFBSSx3QkFBd0I7d0JBQ3RELFFBQVEsRUFBRSxNQUFNO3dCQUNoQixRQUFRLEVBQUU7NEJBQ1IsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFOzRCQUNsQixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsVUFBVTs0QkFDbEMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxPQUFPOzRCQUNsQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLElBQUksU0FBUzt5QkFDbkQ7d0JBQ0QsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO3FCQUN0QjtpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbEUsQ0FBQztJQUNILENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsSUFBSSxZQUFZLEdBQVEsSUFBSSxDQUFDO0lBQzdCLElBQUksV0FBVyxFQUFFLE1BQU0sS0FBSyxLQUFLLElBQUksV0FBVyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsS0FBSyxVQUFVLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEtBQUksZUFBZSxFQUFFLENBQUM7UUFDekosb0ZBQW9GO1FBQ3BGLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FDbkQsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FDdEQsQ0FBQztRQUVGLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxNQUFNLFFBQVEsR0FBRyxVQUFVLEVBQUUsU0FBUyxDQUFDO1lBRXZDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7Z0JBQy9ELGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDeEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLG1EQUFtRDtnQkFDbkQsTUFBTSxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNwQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQVMsRUFBRSxFQUFFO29CQUN6QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUM7b0JBQ3pELElBQUksQ0FBQyxTQUFTO3dCQUFFLE9BQU8sSUFBSSxDQUFDO29CQUU1QixNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7d0JBQ2pELE1BQU0sRUFBRSxlQUFlO3dCQUN2QixNQUFNLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDO3dCQUNuQyxPQUFPLEVBQUU7NEJBQ1AsVUFBVSxFQUFFLFNBQVM7NEJBQ3JCLFNBQVMsRUFBRSxRQUFRO3lCQUNwQjtxQkFDRixDQUFDLENBQUM7b0JBRUgsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO3dCQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxTQUFTLG1CQUFtQixRQUFRLEVBQUUsQ0FBQyxDQUFDO3dCQUMvRixPQUFPLEtBQUssQ0FBQztvQkFDZixDQUFDO29CQUVELE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUMsQ0FBQyxDQUNILENBQUM7Z0JBRUYsYUFBYSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZELENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsOERBQThELENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxtQkFBbUIsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDcEUsTUFBTSxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDNUM7d0JBQ0UsRUFBRSxFQUFFLE9BQU87d0JBQ1gsT0FBTyxFQUFFLE9BQU87d0JBQ2hCLFFBQVEsRUFBRSxhQUFhO3dCQUN2QixJQUFJLEVBQUU7NEJBQ0osU0FBUyxFQUFFLDRCQUE0Qjs0QkFDdkMsT0FBTyxFQUFFLHVDQUF1QyxLQUFLLENBQUMsRUFBRSx1REFBdUQ7NEJBQy9HLEtBQUssRUFBRSxvRkFBb0Y7NEJBQzNGLFFBQVEsRUFBRSxRQUFROzRCQUNsQixRQUFRLEVBQUU7Z0NBQ1IsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO2dDQUNsQixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsVUFBVTtnQ0FDbEMsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxJQUFJLFNBQVM7NkJBQ25EOzRCQUNELFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRTt5QkFDdEI7cUJBQ0Y7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUFDLE9BQU8sVUFBVSxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDbEUsQ0FBQztZQUNELE9BQU8sSUFBSSw0QkFBWSxDQUFDO2dCQUN0QixLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksSUFBSSxJQUFJO2dCQUNoQyxJQUFJLEVBQUUsSUFBSTthQUNYLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFhLEVBQy9CLEtBQUssRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLGNBQWMsRUFDZCxjQUFjLENBQ2YsQ0FBQztRQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLFlBQVksR0FBRyxNQUFNLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdILE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRW5FLDREQUE0RDtRQUM1RCxJQUFJLFlBQVksRUFBRSxNQUFNLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDO2dCQUNILE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3BFLE1BQU0sbUJBQW1CLENBQUMsbUJBQW1CLENBQUM7b0JBQzVDO3dCQUNFLEVBQUUsRUFBRSxPQUFPO3dCQUNYLE9BQU8sRUFBRSxPQUFPO3dCQUNoQixRQUFRLEVBQUUsYUFBYTt3QkFDdkIsSUFBSSxFQUFFOzRCQUNKLFNBQVMsRUFBRSwwQkFBMEI7NEJBQ3JDLE9BQU8sRUFBRSwwQ0FBMEMsS0FBSyxDQUFDLEVBQUUsRUFBRTs0QkFDN0QsS0FBSyxFQUFFLFlBQVksQ0FBQyxPQUFPLElBQUksd0JBQXdCOzRCQUN2RCxRQUFRLEVBQUUsTUFBTTs0QkFDaEIsUUFBUSxFQUFFO2dDQUNSLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtnQ0FDbEIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLFVBQVU7Z0NBQ2xDLGFBQWEsRUFBRSxZQUFZLENBQUMsT0FBTztnQ0FDbkMsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxJQUFJLFNBQVM7NkJBQ25EOzRCQUNELFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRTt5QkFDdEI7cUJBQ0Y7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUFDLE9BQU8sVUFBVSxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDbEUsQ0FBQztZQUVELDhEQUE4RDtZQUM5RCwwRUFBMEU7WUFDMUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1R0FBdUcsQ0FBQyxDQUFDO1lBQ3JILElBQUksQ0FBQztnQkFDSCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEQsTUFBTSxtQkFBbUIsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFRLENBQUM7Z0JBRXpFLHdEQUF3RDtnQkFDeEQsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUNwRCxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQzFDLENBQUM7Z0JBRUYsS0FBSyxNQUFNLElBQUksSUFBSSxtQkFBNEIsRUFBRSxDQUFDO29CQUNoRCxNQUFNLFNBQVMsR0FBSSxJQUFJLENBQUMsUUFBZ0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDO29CQUVsRSx5Q0FBeUM7b0JBQ3pDLElBQUksU0FBUyxFQUFFLENBQUM7d0JBQ2QsSUFBSSxDQUFDOzRCQUNILE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO2dDQUNoRCxNQUFNLEVBQUUsZUFBZTtnQ0FDdkIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQztnQ0FDNUIsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRTs2QkFDbkMsQ0FBQyxDQUFDOzRCQUNILElBQUksYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dDQUMxQixNQUFNLG1CQUFtQixDQUFDLG1CQUFtQixDQUMzQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29DQUM3QixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7b0NBQ1IsZ0JBQWdCLEVBQUUsS0FBSztvQ0FDdkIsZUFBZSxFQUFFLElBQUk7b0NBQ3JCLGdCQUFnQixFQUFFLElBQUk7aUNBQ3ZCLENBQUMsQ0FBQyxDQUNKLENBQUM7Z0NBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtRUFBbUUsU0FBUyxFQUFFLENBQUMsQ0FBQzs0QkFDOUYsQ0FBQzt3QkFDSCxDQUFDO3dCQUFDLE9BQU8sU0FBUyxFQUFFLENBQUM7NEJBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkRBQTZELFNBQVMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO3dCQUN0RyxDQUFDO29CQUNILENBQUM7b0JBRUQsOENBQThDO29CQUM5Qyw4RkFBOEY7b0JBQzlGLE1BQU0sWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUM7NEJBQ3ZDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFOzRCQUN6QixJQUFJLEVBQUU7Z0NBQ0osUUFBUSxFQUFFO29DQUNSLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztvQ0FDeEIsV0FBVyxFQUFFLElBQUk7b0NBQ2pCLGdCQUFnQixFQUFFLElBQUk7b0NBQ3RCLHFCQUFxQixFQUFFLHNCQUFzQjtpQ0FDOUM7NkJBQ0Y7eUJBQ0YsQ0FBQyxDQUFDLENBQUM7Z0JBQ04sQ0FBQztnQkFFRCxpQ0FBaUM7Z0JBQ2pDLE1BQU0sWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO3dCQUMvQixFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUU7d0JBQ1osUUFBUSxFQUFFOzRCQUNSLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQzs0QkFDekIsZUFBZSxFQUFFLGVBQWU7NEJBQ2hDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsZUFBZTs0QkFDcEQscUJBQXFCLEVBQUUsc0JBQXNCO3lCQUM5QztxQkFDRixDQUFDLENBQUMsQ0FBQztnQkFFSixtQ0FBbUM7Z0JBQ25DLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO29CQUMvQyxNQUFNLEVBQUUsZ0JBQWdCO29CQUN4QixNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7b0JBQ2QsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7aUJBQ2hDLENBQUMsQ0FBQztnQkFDSCxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO29CQUMxQixNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFRLENBQUM7b0JBQ25FLE1BQU0sZUFBZSxDQUFDLG9CQUFvQixDQUFDO3dCQUN6QyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ3RCLFVBQVUsRUFBRSxlQUFlO3FCQUM1QixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLHlFQUF5RSxDQUFDLENBQUM7WUFDekYsQ0FBQztZQUFDLE9BQU8sYUFBYSxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0ZBQWtGLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDbkgsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsOENBQThDO0lBQzlDLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQy9DLE1BQU0sRUFBRSxnQkFBZ0I7WUFDeEIsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ2QsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7U0FDaEMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1REFBdUQsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxXQUFXLENBQUMsQ0FBQztRQUN0SCxPQUFPLENBQUMsR0FBRyxDQUFDLDBDQUEwQyxXQUFXLEVBQUUsTUFBTSxhQUFhLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNwSCxPQUFPLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsWUFBWSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBRWpJLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDMUIsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBUSxDQUFDO1lBQ25FLE1BQU0sYUFBYSxHQUF3QixFQUFFLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFFdEUsTUFBTSxVQUFVLEdBQUcsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUM7WUFDOUMsSUFBSSxVQUFVLElBQUksV0FBVyxFQUFFLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDaEQsYUFBYSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQy9DLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLENBQUM7WUFFRCxJQUFJLFlBQVksRUFBRSxNQUFNLEtBQUssSUFBSSxJQUFJLFlBQVksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUM7Z0JBQ3RFLGFBQWEsQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMxRSxDQUFDO1lBRUQsMkRBQTJEO1lBQzNELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0NBQStDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RILE1BQU0sZUFBZSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMxRCxPQUFPLENBQUMsR0FBRyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7WUFDekUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEdBQTRHLENBQUMsQ0FBQztZQUM1SCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0RBQXNELEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELE9BQU8sSUFBSSw0QkFBWSxDQUFDO1FBQ3RCLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxJQUFJLElBQUk7UUFDaEMsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLEtBQUssSUFBSSxJQUFJLFlBQVksRUFBRSxJQUFJLEVBQUUsWUFBWTtZQUNyRSxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUU7WUFDL0UsQ0FBQyxDQUFDLElBQUk7S0FDVCxDQUFDLENBQUM7QUFDTCxDQUFDLENBQ0YsQ0FBQyJ9