@colijnit/transaction 12.1.7 → 12.1.10

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 (662) hide show
  1. package/README.md +10 -13
  2. package/bundles/colijnit-transaction.umd.js +7754 -6787
  3. package/bundles/colijnit-transaction.umd.js.map +1 -1
  4. package/colijnit-transaction.d.ts +106 -58
  5. package/colijnit-transaction.metadata.json +1 -1
  6. package/esm2015/colijnit-transaction.js +107 -59
  7. package/esm2015/lib/assets/dictionary/text.properties.js +456 -0
  8. package/esm2015/lib/component/checkout/checkout-login/checkout-login.component.js +106 -0
  9. package/esm2015/lib/component/checkout/checkout-overview-delivery-address/checkout-overview-delivery-address.component.js +47 -0
  10. package/esm2015/lib/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.js +275 -0
  11. package/esm2015/lib/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.js +538 -0
  12. package/esm2015/lib/component/checkout/checkout-relation-suggestions-list/checkout-relation-suggestions-list.component.js +30 -0
  13. package/esm2015/lib/component/checkout/checkout-relation-suggestions-list-item/checkout-relation-suggestions-list-item.component.js +31 -0
  14. package/esm2015/lib/component/checkout/checkout.component.js +132 -0
  15. package/esm2015/lib/component/checkout/checkout.module.js +86 -0
  16. package/esm2015/lib/component/confirmation-dialog/confirmation-dialog.component.js +52 -0
  17. package/esm2015/lib/component/confirmation-dialog/confirmation-dialog.module.js +24 -0
  18. package/esm2015/lib/component/core/base/default-ok-cancel-buttons.component.js +41 -0
  19. package/esm2015/lib/component/core/base/dialog-base.component.js +6 -0
  20. package/esm2015/lib/component/core/base/transaction-base.component.js +94 -0
  21. package/esm2015/lib/component/core/core.module.js +39 -0
  22. package/esm2015/lib/component/core/enum/app-popup-button-type.enum.js +11 -0
  23. package/esm2015/lib/component/core/enum/app-popup-type.enum.js +8 -0
  24. package/esm2015/{app → lib}/component/core/icon/icon.component.js +3 -4
  25. package/esm2015/lib/component/core/image-display/image-display.component.js +29 -0
  26. package/esm2015/lib/component/core/relation/customer-groups.component.js +41 -0
  27. package/esm2015/{app → lib}/component/core/stock-status-indicator/stock-status-indicator.component.js +2 -2
  28. package/esm2015/lib/component/delivery-type-tile/delivery-type-tile.component.js +40 -0
  29. package/esm2015/lib/component/delivery-type-tile/delivery-type-tile.module.js +26 -0
  30. package/esm2015/lib/component/discount/discount.component.js +107 -0
  31. package/esm2015/lib/component/discount/discount.module.js +29 -0
  32. package/esm2015/lib/component/order-confirmation-grid.component/order-confirmation-grid.component.js +70 -0
  33. package/esm2015/lib/component/order-confirmation-grid.component/order-confirmation-grid.module.js +29 -0
  34. package/esm2015/lib/component/order-grid/order-grid.component.js +99 -0
  35. package/esm2015/lib/component/order-grid/order-grid.module.js +28 -0
  36. package/esm2015/lib/component/payment/payment.component.js +73 -0
  37. package/esm2015/lib/component/payment/payment.module.js +27 -0
  38. package/esm2015/lib/component/payment-tile/payment-tile.component.js +32 -0
  39. package/esm2015/lib/component/payment-tile/payment-tile.module.js +25 -0
  40. package/esm2015/lib/component/relation-address/relation-address.component.js +125 -0
  41. package/esm2015/lib/component/relation-address/relation-address.module.js +28 -0
  42. package/esm2015/lib/component/relation-address-select/relation-address-select.component.js +146 -0
  43. package/esm2015/lib/component/relation-address-select/relation-address-select.module.js +33 -0
  44. package/esm2015/lib/component/relation-address-tile/relation-address-tile.component.js +61 -0
  45. package/esm2015/lib/component/relation-address-tile/relation-address-tile.module.js +32 -0
  46. package/esm2015/lib/component/seller-information/seller-information.component.js +61 -0
  47. package/esm2015/lib/component/seller-information/seller-information.module.js +21 -0
  48. package/esm2015/lib/component/shared/transaction-article-text/transaction-article-text.component.js +118 -0
  49. package/esm2015/lib/component/shared/transaction-article-text/transaction-article-text.module.js +31 -0
  50. package/esm2015/lib/component/shared/transaction-article-text-overview/transaction-article-text-overview.component.js +129 -0
  51. package/esm2015/lib/component/shared/transaction-article-text-overview/transaction-article-text-overview.module.js +34 -0
  52. package/esm2015/lib/component/shopping-cart/shopping-cart.component.js +57 -0
  53. package/esm2015/lib/component/shopping-cart/shopping-cart.module.js +27 -0
  54. package/esm2015/lib/component/shopping-cart-preview/shopping-cart-preview.component.js +55 -0
  55. package/esm2015/lib/component/shopping-cart-preview/shopping-cart-preview.module.js +29 -0
  56. package/esm2015/lib/component/stepper/component/stepper-step.component.js +40 -0
  57. package/esm2015/lib/component/stepper/stepper.component.js +124 -0
  58. package/esm2015/lib/component/stepper/stepper.module.js +29 -0
  59. package/esm2015/lib/component/tile/tile.component.js +32 -0
  60. package/esm2015/lib/component/tile/tile.module.js +19 -0
  61. package/esm2015/lib/component/transaction/transaction.component.js +154 -0
  62. package/esm2015/lib/component/transaction/transaction.module.js +47 -0
  63. package/esm2015/lib/component/transaction-commit-bar/transaction-commit-bar.component.js +46 -0
  64. package/esm2015/lib/component/transaction-commit-bar/transaction-commit-bar.module.js +27 -0
  65. package/esm2015/lib/component/transaction-confirmation-history/transaction-confirmation-history.component.js +28 -0
  66. package/esm2015/lib/component/transaction-confirmation-history/transaction-confirmation-history.module.js +27 -0
  67. package/esm2015/lib/component/transaction-header/transaction-header.component.js +46 -0
  68. package/esm2015/lib/component/transaction-header/transaction-header.module.js +27 -0
  69. package/esm2015/lib/component/transaction-header-contact/transaction-header-contact.component.js +34 -0
  70. package/esm2015/lib/component/transaction-header-contact/transaction-header-contact.module.js +19 -0
  71. package/esm2015/lib/component/transaction-header-delivery/transaction-header-delivery.component.js +60 -0
  72. package/esm2015/lib/component/transaction-header-delivery/transaction-header-delivery.module.js +21 -0
  73. package/esm2015/lib/component/transaction-header-relation/transaction-header-relation.component.js +35 -0
  74. package/esm2015/lib/component/transaction-header-relation/transaction-header-relation.module.js +19 -0
  75. package/esm2015/lib/component/transaction-history-grid/transaction-history-grid.component.js +47 -0
  76. package/esm2015/lib/component/transaction-history-grid/transaction-history-grid.module.js +27 -0
  77. package/esm2015/lib/component/transaction-history-grid-status/transaction-history-grid-status.component.js +36 -0
  78. package/esm2015/lib/component/transaction-history-grid-status/transaction-history-grid-status.module.js +23 -0
  79. package/esm2015/lib/component/transaction-line/transaction-line.component.js +282 -0
  80. package/esm2015/lib/component/transaction-line/transaction-line.module.js +30 -0
  81. package/esm2015/lib/component/transaction-line-fields/transaction-line-commission-code.component.js +49 -0
  82. package/esm2015/lib/component/transaction-line-fields/transaction-line-commission-code.module.js +23 -0
  83. package/esm2015/lib/component/transaction-line-fields/transaction-line-delivery-date.component.js +40 -0
  84. package/esm2015/lib/component/transaction-line-fields/transaction-line-delivery-date.module.js +23 -0
  85. package/esm2015/lib/component/transaction-line-fields/transaction-line-delivery-method.component.js +48 -0
  86. package/esm2015/lib/component/transaction-line-fields/transaction-line-delivery-method.module.js +23 -0
  87. package/esm2015/lib/component/transaction-line-fields/transaction-line-discount-amount.component.js +50 -0
  88. package/esm2015/lib/component/transaction-line-fields/transaction-line-discount-amount.module.js +23 -0
  89. package/esm2015/lib/component/transaction-line-fields/transaction-line-fields-base.component.js +22 -0
  90. package/esm2015/lib/component/transaction-line-fields/transaction-line-line-discount.component.js +50 -0
  91. package/esm2015/lib/component/transaction-line-fields/transaction-line-line-discount.module.js +23 -0
  92. package/esm2015/lib/component/transaction-line-fields/transaction-line-price-list.component.js +49 -0
  93. package/esm2015/lib/component/transaction-line-fields/transaction-line-price-list.module.js +23 -0
  94. package/esm2015/lib/component/transaction-line-fields/transaction-line-price.component.js +49 -0
  95. package/esm2015/lib/component/transaction-line-fields/transaction-line-price.module.js +23 -0
  96. package/esm2015/lib/component/transaction-line-fields/transaction-line-quantity.component.js +36 -0
  97. package/esm2015/lib/component/transaction-line-fields/transaction-line-quantity.module.js +23 -0
  98. package/esm2015/lib/component/transaction-line-fields/transaction-line-quantum-discount.component.js +50 -0
  99. package/esm2015/lib/component/transaction-line-fields/transaction-line-quantum-discount.module.js +23 -0
  100. package/esm2015/lib/component/transaction-line-fields/transaction-line-reference.component.js +48 -0
  101. package/esm2015/lib/component/transaction-line-fields/transaction-line-reference.module.js +23 -0
  102. package/esm2015/lib/component/transaction-line-fields/transaction-line-special-discount.component.js +50 -0
  103. package/esm2015/lib/component/transaction-line-fields/transaction-line-special-discount.module.js +23 -0
  104. package/esm2015/lib/component/transaction-line-fields/transaction-line-vat.component.js +49 -0
  105. package/esm2015/lib/component/transaction-line-fields/transaction-line-vat.module.js +23 -0
  106. package/esm2015/lib/component/transaction-line-fields/transaction-line-warehouse.component.js +49 -0
  107. package/esm2015/lib/component/transaction-line-fields/transaction-line-warehouse.module.js +24 -0
  108. package/esm2015/lib/component/transaction-line-grid/transaction-line-grid.component.js +23 -0
  109. package/esm2015/lib/component/transaction-line-grid/transaction-line-grid.module.js +21 -0
  110. package/esm2015/lib/component/transaction-line-side-panel/transaction-line-side-panel.component.js +91 -0
  111. package/esm2015/lib/component/transaction-line-side-panel/transaction-line-side-panel.module.js +36 -0
  112. package/esm2015/lib/component/transaction-line-side-panel-default/transaction-line-side-panel-default.component.js +134 -0
  113. package/esm2015/lib/component/transaction-line-side-panel-default/transaction-line-side-panel-default.module.js +56 -0
  114. package/esm2015/lib/component/transaction-lines/transaction-lines.component.js +128 -0
  115. package/esm2015/lib/component/transaction-lines/transaction-lines.module.js +31 -0
  116. package/esm2015/lib/component/transaction-lines-grid/transaction-lines-grid.component.js +63 -0
  117. package/esm2015/lib/component/transaction-lines-grid/transaction-lines-grid.module.js +27 -0
  118. package/esm2015/lib/component/transaction-nav-bar/transaction-nav-bar-button/transaction-nav-bar-button.component.js +29 -0
  119. package/esm2015/lib/component/transaction-nav-bar/transaction-nav-bar.component.js +65 -0
  120. package/esm2015/lib/component/transaction-nav-bar/transaction-nav-bar.module.js +26 -0
  121. package/esm2015/lib/component/transaction-receiving-goods-details/transaction-receiving-goods-details.component.js +39 -0
  122. package/esm2015/lib/component/transaction-receiving-goods-details/transaction-receiving-goods-details.module.js +25 -0
  123. package/esm2015/lib/component/transaction-receiving-goods-history/transaction-receiving-goods-history.component.js +28 -0
  124. package/esm2015/lib/component/transaction-receiving-goods-history/transaction-receiving-goods-history.module.js +27 -0
  125. package/esm2015/lib/component/transaction-totals/transaction-totals.component.js +44 -0
  126. package/esm2015/lib/component/transaction-totals/transaction-totals.module.js +23 -0
  127. package/esm2015/lib/enum/content-view-mode.enum.js +10 -0
  128. package/esm2015/lib/enum/icon.enum.js +28 -0
  129. package/esm2015/lib/enum/language-code.enum.js +8 -0
  130. package/esm2015/lib/enum/order-discount-type.enum.js +7 -0
  131. package/esm2015/lib/enum/status-type.enum.js +5 -0
  132. package/esm2015/lib/enum/tab-category.enum.js +10 -0
  133. package/esm2015/lib/enum/time-size.type.js +10 -0
  134. package/esm2015/lib/factory/business-object-factory.js +120 -0
  135. package/esm2015/lib/factory/decorators/boolean.decorator.js +102 -0
  136. package/esm2015/lib/factory/decorators/complex-array.decorator.js +55 -0
  137. package/esm2015/lib/factory/decorators/complex-field.decorator.js +57 -0
  138. package/esm2015/lib/factory/decorators/date-field.decorator.js +36 -0
  139. package/esm2015/lib/factory/decorators/string-number.decorator.js +43 -0
  140. package/esm2015/lib/model/business-object.js +81 -0
  141. package/esm2015/lib/model/delivery-type.js +3 -0
  142. package/esm2015/lib/model/icon-svg.js +27 -0
  143. package/esm2015/lib/model/standard-text.js +3 -0
  144. package/esm2015/lib/model/text-value-container.js +3 -0
  145. package/esm2015/lib/pipe/append.pipe.js +17 -0
  146. package/esm2015/lib/pipe/co-currency.pipe.js +47 -0
  147. package/esm2015/lib/pipe/date-duration.pipe.js +57 -0
  148. package/esm2015/lib/pipe/delivery-time.pipe.js +36 -0
  149. package/esm2015/lib/pipe/localize.pipe.js +28 -0
  150. package/esm2015/lib/pipe/pipe.module.js +37 -0
  151. package/esm2015/lib/pipe/safe-html.pipe.js +19 -0
  152. package/esm2015/lib/pipe/safe-style.pipe.js +19 -0
  153. package/esm2015/lib/service/dialog.service.js +76 -0
  154. package/esm2015/lib/service/dictionary.service.js +76 -0
  155. package/esm2015/lib/service/icon-cache.service.js +51 -0
  156. package/esm2015/lib/service/ione-connector-adapter.service.js +836 -0
  157. package/esm2015/lib/service/options.service.js +69 -0
  158. package/esm2015/lib/service/pending-reason.service.js +183 -0
  159. package/esm2015/lib/service/transaction.service.js +679 -0
  160. package/esm2015/lib/utils/array-utils.js +183 -0
  161. package/esm2015/lib/utils/is-nill.function.js +5 -0
  162. package/esm2015/lib/utils/string-utils.js +64 -0
  163. package/esm2015/public_api.js +28 -10
  164. package/fesm2015/colijnit-transaction.js +7894 -6976
  165. package/fesm2015/colijnit-transaction.js.map +1 -1
  166. package/{assets → lib/assets}/dictionary/text.properties.d.ts +0 -0
  167. package/{app → lib}/component/checkout/checkout-login/checkout-login.component.d.ts +0 -0
  168. package/{app → lib}/component/checkout/checkout-login/checkout-login.component.scss +0 -0
  169. package/{app → lib}/component/checkout/checkout-overview-delivery-address/checkout-overview-delivery-address.component.d.ts +0 -0
  170. package/{app → lib}/component/checkout/checkout-overview-delivery-address/checkout-overview-delivery-address.component.scss +0 -0
  171. package/{app → lib}/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.d.ts +23 -36
  172. package/lib/component/checkout/checkout-overview-delivery-edit/style/_layout.scss +98 -0
  173. package/lib/component/checkout/checkout-overview-delivery-edit/style/_material-definition.scss +12 -0
  174. package/lib/component/checkout/checkout-overview-delivery-edit/style/_theme.scss +17 -0
  175. package/lib/component/checkout/checkout-overview-delivery-edit/style/material.scss +7 -0
  176. package/{app → lib}/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.d.ts +40 -12
  177. package/lib/component/checkout/checkout-overview-relation-edit/style/_layout.scss +125 -0
  178. package/lib/component/checkout/checkout-overview-relation-edit/style/_material-definition.scss +18 -0
  179. package/{app → lib}/component/checkout/checkout-overview-relation-edit/style/_theme.scss +1 -1
  180. package/lib/component/checkout/checkout-overview-relation-edit/style/material.scss +10 -0
  181. package/{app → lib}/component/checkout/checkout-relation-suggestions-list/checkout-relation-suggestions-list.component.d.ts +0 -0
  182. package/{app → lib}/component/checkout/checkout-relation-suggestions-list/style/_layout.scss +3 -2
  183. package/{app/component/checkout/checkout-overview-relation-address → lib/component/checkout/checkout-relation-suggestions-list}/style/_material-definition.scss +0 -0
  184. package/{app → lib}/component/checkout/checkout-relation-suggestions-list/style/_theme.scss +1 -1
  185. package/{app → lib}/component/checkout/checkout-relation-suggestions-list/style/material.scss +1 -1
  186. package/{app → lib}/component/checkout/checkout-relation-suggestions-list-item/checkout-relation-suggestions-list-item.component.d.ts +0 -0
  187. package/{app → lib}/component/checkout/checkout-relation-suggestions-list-item/style/_layout.scss +1 -1
  188. package/{app → lib}/component/checkout/checkout-relation-suggestions-list-item/style/_material-definition.scss +0 -0
  189. package/{app → lib}/component/checkout/checkout-relation-suggestions-list-item/style/_theme.scss +1 -1
  190. package/{app/component/core/base → lib/component/checkout/checkout-relation-suggestions-list-item}/style/material.scss +1 -1
  191. package/lib/component/checkout/checkout.component.d.ts +36 -0
  192. package/lib/component/checkout/checkout.module.d.ts +2 -0
  193. package/lib/component/checkout/style/_layout.scss +31 -0
  194. package/lib/component/checkout/style/_material-definition.scss +5 -0
  195. package/lib/component/checkout/style/_theme.scss +8 -0
  196. package/lib/component/checkout/style/material.scss +10 -0
  197. package/lib/component/confirmation-dialog/confirmation-dialog.component.d.ts +12 -0
  198. package/lib/component/confirmation-dialog/confirmation-dialog.module.d.ts +2 -0
  199. package/lib/component/confirmation-dialog/style/_layout.scss +22 -0
  200. package/lib/component/confirmation-dialog/style/_material-definition.scss +2 -0
  201. package/lib/component/confirmation-dialog/style/_theme.scss +6 -0
  202. package/lib/component/confirmation-dialog/style/material.scss +5 -0
  203. package/{app → lib}/component/core/base/default-ok-cancel-buttons.component.d.ts +0 -0
  204. package/lib/component/core/base/dialog-base.component.d.ts +4 -0
  205. package/{app → lib}/component/core/base/style/_layout.scss +1 -1
  206. package/{app/component/checkout/checkout-relation-suggestions-list → lib/component/core/base}/style/_material-definition.scss +0 -0
  207. package/{app → lib}/component/core/base/style/_theme.scss +1 -1
  208. package/{app/component/checkout/checkout-overview-relation-address → lib/component/core/base}/style/material.scss +1 -1
  209. package/{app → lib}/component/core/base/transaction-base.component.d.ts +7 -23
  210. package/{app → lib}/component/core/characteristic-answer/characteristic-answer.component.scss +3 -1
  211. package/{app → lib}/component/core/core.module.d.ts +0 -0
  212. package/lib/component/core/enum/app-popup-button-type.enum.d.ts +9 -0
  213. package/lib/component/core/enum/app-popup-type.enum.d.ts +6 -0
  214. package/{app → lib}/component/core/icon/icon.component.d.ts +3 -2
  215. package/{app → lib}/component/core/icon/icon.component.scss +3 -1
  216. package/lib/component/core/image-display/image-display.component.d.ts +5 -0
  217. package/lib/component/core/image-display/style/_layout.scss +55 -0
  218. package/lib/component/core/image-display/style/_material-definition.scss +4 -0
  219. package/{app → lib}/component/core/image-display/style/_theme.scss +1 -1
  220. package/{app → lib}/component/core/image-display/style/material.scss +1 -1
  221. package/{app → lib}/component/core/relation/customer-groups.component.d.ts +0 -0
  222. package/lib/component/core/relation/relation-customer-groups.component.scss +6 -0
  223. package/{app → lib}/component/core/stock-status-indicator/stock-status-indicator.component.d.ts +0 -0
  224. package/{app → lib}/component/core/stock-status-indicator/stock-status-indicator.component.scss +3 -1
  225. package/lib/component/delivery-type-tile/delivery-type-tile.component.d.ts +10 -0
  226. package/lib/component/delivery-type-tile/delivery-type-tile.module.d.ts +2 -0
  227. package/lib/component/delivery-type-tile/style/_layout.scss +35 -0
  228. package/lib/component/delivery-type-tile/style/_material-definition.scss +16 -0
  229. package/lib/component/delivery-type-tile/style/_theme.scss +6 -0
  230. package/lib/component/delivery-type-tile/style/material.scss +5 -0
  231. package/lib/component/discount/discount.component.d.ts +19 -0
  232. package/lib/component/discount/discount.module.d.ts +2 -0
  233. package/{app/component/checkout/checkout-overview-block/checkout-overview-block.component.scss → lib/component/discount/style/_layout.scss} +0 -0
  234. package/{app/component/core/base → lib/component/discount}/style/_material-definition.scss +0 -0
  235. package/{app/component/checkout/checkout-overview/checkout-overview.component.scss → lib/component/discount/style/_theme.scss} +0 -0
  236. package/{app/component/core/image-display/style/_material-definition.scss → lib/component/discount/style/material.scss} +0 -0
  237. package/lib/component/order-confirmation-create/style/_layout.scss +5 -0
  238. package/lib/component/order-confirmation-create/style/_material-definition.scss +1 -0
  239. package/lib/component/order-confirmation-create/style/_theme.scss +5 -0
  240. package/{app/component/checkout/checkout-relation-suggestions-list-item → lib/component/order-confirmation-create}/style/material.scss +1 -1
  241. package/lib/component/order-confirmation-grid.component/order-confirmation-grid.component.d.ts +15 -0
  242. package/lib/component/order-confirmation-grid.component/order-confirmation-grid.module.d.ts +2 -0
  243. package/lib/component/order-confirmation-grid.component/style/_layout.scss +5 -0
  244. package/lib/component/order-confirmation-grid.component/style/_material-definition.scss +1 -0
  245. package/lib/component/order-confirmation-grid.component/style/_theme.scss +5 -0
  246. package/lib/component/order-confirmation-grid.component/style/material.scss +4 -0
  247. package/lib/component/order-grid/order-grid.component.d.ts +23 -0
  248. package/lib/component/order-grid/order-grid.module.d.ts +2 -0
  249. package/lib/component/order-grid/style/_layout.scss +21 -0
  250. package/lib/component/order-grid/style/_material-definition.scss +2 -0
  251. package/lib/component/order-grid/style/_theme.scss +6 -0
  252. package/lib/component/order-grid/style/material.scss +4 -0
  253. package/lib/component/payment/payment.component.d.ts +18 -0
  254. package/lib/component/payment/payment.module.d.ts +2 -0
  255. package/lib/component/payment/style/_layout.scss +54 -0
  256. package/lib/component/payment/style/_material-definition.scss +17 -0
  257. package/lib/component/payment/style/_theme.scss +16 -0
  258. package/lib/component/payment/style/material.scss +5 -0
  259. package/lib/component/payment-tile/payment-tile.component.d.ts +9 -0
  260. package/lib/component/payment-tile/payment-tile.module.d.ts +2 -0
  261. package/lib/component/payment-tile/style/_layout.scss +22 -0
  262. package/{app/component/core/no-image-display/no-image-display.component.scss → lib/component/payment-tile/style/_material-definition.scss} +0 -0
  263. package/lib/component/payment-tile/style/_theme.scss +6 -0
  264. package/lib/component/payment-tile/style/material.scss +5 -0
  265. package/lib/component/relation-address/relation-address.component.d.ts +28 -0
  266. package/lib/component/relation-address/relation-address.module.d.ts +2 -0
  267. package/lib/component/relation-address/style/_layout.scss +25 -0
  268. package/lib/component/relation-address/style/_material-definition.scss +3 -0
  269. package/lib/component/relation-address/style/_theme.scss +7 -0
  270. package/lib/component/relation-address/style/material.scss +5 -0
  271. package/lib/component/relation-address-select/relation-address-select.component.d.ts +33 -0
  272. package/lib/component/relation-address-select/relation-address-select.module.d.ts +2 -0
  273. package/lib/component/relation-address-select/style/_layout.scss +85 -0
  274. package/lib/component/relation-address-select/style/_material-definition.scss +4 -0
  275. package/lib/component/relation-address-select/style/_theme.scss +6 -0
  276. package/lib/component/relation-address-select/style/material.scss +5 -0
  277. package/lib/component/relation-address-tile/relation-address-tile.component.d.ts +14 -0
  278. package/lib/component/relation-address-tile/relation-address-tile.module.d.ts +2 -0
  279. package/lib/component/relation-address-tile/style/_layout.scss +42 -0
  280. package/lib/component/relation-address-tile/style/_material-definition.scss +16 -0
  281. package/lib/component/relation-address-tile/style/_theme.scss +21 -0
  282. package/lib/component/relation-address-tile/style/material.scss +5 -0
  283. package/lib/component/seller-information/seller-information.component.d.ts +13 -0
  284. package/lib/component/seller-information/seller-information.module.d.ts +2 -0
  285. package/lib/component/seller-information/style/_layout.scss +21 -0
  286. package/lib/component/seller-information/style/_material-definition.scss +2 -0
  287. package/lib/component/seller-information/style/_theme.scss +7 -0
  288. package/lib/component/seller-information/style/material.scss +4 -0
  289. package/lib/component/shared/transaction-article-text/style/_layout.scss +42 -0
  290. package/lib/component/shared/transaction-article-text/style/_material-definition.scss +7 -0
  291. package/lib/component/shared/transaction-article-text/style/_theme.scss +11 -0
  292. package/lib/component/shared/transaction-article-text/style/material.scss +5 -0
  293. package/lib/component/shared/transaction-article-text/transaction-article-text.component.d.ts +31 -0
  294. package/lib/component/shared/transaction-article-text/transaction-article-text.module.d.ts +2 -0
  295. package/lib/component/shared/transaction-article-text-overview/style/_layout.scss +56 -0
  296. package/lib/component/shared/transaction-article-text-overview/style/_material-definition.scss +9 -0
  297. package/lib/component/shared/transaction-article-text-overview/style/_theme.scss +9 -0
  298. package/lib/component/shared/transaction-article-text-overview/style/material.scss +4 -0
  299. package/lib/component/shared/transaction-article-text-overview/transaction-article-text-overview.component.d.ts +30 -0
  300. package/lib/component/shared/transaction-article-text-overview/transaction-article-text-overview.module.d.ts +2 -0
  301. package/lib/component/shopping-cart/shopping-cart.component.d.ts +15 -0
  302. package/lib/component/shopping-cart/shopping-cart.module.d.ts +2 -0
  303. package/lib/component/shopping-cart/style/_layout.scss +33 -0
  304. package/lib/component/shopping-cart/style/_material-definition.scss +10 -0
  305. package/lib/component/shopping-cart/style/_theme.scss +14 -0
  306. package/lib/component/shopping-cart/style/material.scss +4 -0
  307. package/{app/component/shopping-cart → lib/component/shopping-cart-OLD}/shopping-cart-manager/shopping-cart-manager.component.scss +4 -2
  308. package/lib/component/shopping-cart-preview/shopping-cart-preview.component.d.ts +13 -0
  309. package/lib/component/shopping-cart-preview/shopping-cart-preview.module.d.ts +2 -0
  310. package/lib/component/shopping-cart-preview/style/_layout.scss +48 -0
  311. package/lib/component/shopping-cart-preview/style/_material-definition.scss +20 -0
  312. package/lib/component/shopping-cart-preview/style/_theme.scss +17 -0
  313. package/lib/component/shopping-cart-preview/style/material.scss +4 -0
  314. package/lib/component/stepper/component/stepper-step.component.d.ts +12 -0
  315. package/lib/component/stepper/stepper.component.d.ts +35 -0
  316. package/lib/component/stepper/stepper.module.d.ts +2 -0
  317. package/lib/component/stepper/style/_layout.scss +107 -0
  318. package/lib/component/stepper/style/_material-definition.scss +18 -0
  319. package/lib/component/stepper/style/_theme.scss +43 -0
  320. package/lib/component/stepper/style/material.scss +4 -0
  321. package/lib/component/tile/style/_layout.scss +36 -0
  322. package/lib/component/tile/style/_material-definition.scss +16 -0
  323. package/lib/component/tile/style/_theme.scss +36 -0
  324. package/lib/component/tile/style/material.scss +4 -0
  325. package/lib/component/tile/tile.component.d.ts +6 -0
  326. package/lib/component/tile/tile.module.d.ts +2 -0
  327. package/lib/component/transaction/style/_layout.scss +31 -0
  328. package/lib/component/transaction/style/_material-definition.scss +7 -0
  329. package/lib/component/transaction/style/_theme.scss +24 -0
  330. package/lib/component/transaction/style/material.scss +11 -0
  331. package/lib/component/transaction/transaction.component.d.ts +39 -0
  332. package/lib/component/transaction/transaction.module.d.ts +2 -0
  333. package/lib/component/transaction-commit-bar/style/_layout.scss +16 -0
  334. package/lib/component/transaction-commit-bar/style/_material-definition.scss +1 -0
  335. package/lib/component/transaction-commit-bar/style/_theme.scss +7 -0
  336. package/lib/component/transaction-commit-bar/style/material.scss +4 -0
  337. package/lib/component/transaction-commit-bar/transaction-commit-bar.component.d.ts +11 -0
  338. package/lib/component/transaction-commit-bar/transaction-commit-bar.module.d.ts +2 -0
  339. package/lib/component/transaction-confirmation-history/style/_layout.scss +7 -0
  340. package/lib/component/transaction-confirmation-history/style/_material-definition.scss +1 -0
  341. package/lib/component/transaction-confirmation-history/style/_theme.scss +7 -0
  342. package/lib/component/transaction-confirmation-history/style/material.scss +4 -0
  343. package/lib/component/transaction-confirmation-history/transaction-confirmation-history.component.d.ts +5 -0
  344. package/lib/component/transaction-confirmation-history/transaction-confirmation-history.module.d.ts +2 -0
  345. package/lib/component/transaction-header/style/_layout.scss +38 -0
  346. package/lib/component/transaction-header/style/_material-definition.scss +8 -0
  347. package/lib/component/transaction-header/style/_theme.scss +11 -0
  348. package/lib/component/transaction-header/style/material.scss +7 -0
  349. package/lib/component/transaction-header/transaction-header.component.d.ts +12 -0
  350. package/lib/component/transaction-header/transaction-header.module.d.ts +2 -0
  351. package/lib/component/transaction-header-contact/style/_layout.scss +25 -0
  352. package/lib/component/transaction-header-contact/style/_material-definition.scss +7 -0
  353. package/lib/component/transaction-header-contact/style/_theme.scss +11 -0
  354. package/lib/component/transaction-header-contact/style/material.scss +4 -0
  355. package/lib/component/transaction-header-contact/transaction-header-contact.component.d.ts +4 -0
  356. package/lib/component/transaction-header-contact/transaction-header-contact.module.d.ts +2 -0
  357. package/lib/component/transaction-header-delivery/style/_layout.scss +54 -0
  358. package/lib/component/transaction-header-delivery/style/_material-definition.scss +12 -0
  359. package/lib/component/transaction-header-delivery/style/_theme.scss +24 -0
  360. package/lib/component/transaction-header-delivery/style/material.scss +4 -0
  361. package/lib/component/transaction-header-delivery/transaction-header-delivery.component.d.ts +13 -0
  362. package/lib/component/transaction-header-delivery/transaction-header-delivery.module.d.ts +2 -0
  363. package/lib/component/transaction-header-relation/style/_layout.scss +25 -0
  364. package/lib/component/transaction-header-relation/style/_material-definition.scss +7 -0
  365. package/lib/component/transaction-header-relation/style/_theme.scss +11 -0
  366. package/lib/component/transaction-header-relation/style/material.scss +4 -0
  367. package/lib/component/transaction-header-relation/transaction-header-relation.component.d.ts +4 -0
  368. package/lib/component/transaction-header-relation/transaction-header-relation.module.d.ts +2 -0
  369. package/lib/component/transaction-history-grid/style/_layout.scss +7 -0
  370. package/{app/component/service-order/transaction-edit-article-text/transaction-edit-article-text.component.scss → lib/component/transaction-history-grid/style/_material-definition.scss} +0 -0
  371. package/lib/component/transaction-history-grid/style/_theme.scss +7 -0
  372. package/lib/component/transaction-history-grid/style/material.scss +4 -0
  373. package/lib/component/transaction-history-grid/transaction-history-grid.component.d.ts +14 -0
  374. package/lib/component/transaction-history-grid/transaction-history-grid.module.d.ts +2 -0
  375. package/lib/component/transaction-history-grid-status/style/_layout.scss +28 -0
  376. package/{app/component/service-order/transaction-article-text-overview/transaction-article-text-overview.component.scss → lib/component/transaction-history-grid-status/style/_material-definition.scss} +0 -0
  377. package/lib/component/transaction-history-grid-status/style/_theme.scss +7 -0
  378. package/lib/component/transaction-history-grid-status/style/material.scss +4 -0
  379. package/lib/component/transaction-history-grid-status/transaction-history-grid-status.component.d.ts +9 -0
  380. package/lib/component/transaction-history-grid-status/transaction-history-grid-status.module.d.ts +2 -0
  381. package/lib/component/transaction-line/style/_layout.scss +143 -0
  382. package/lib/component/transaction-line/style/_material-definition.scss +29 -0
  383. package/lib/component/transaction-line/style/_theme.scss +41 -0
  384. package/lib/component/transaction-line/style/material.scss +9 -0
  385. package/lib/component/transaction-line/transaction-line.component.d.ts +52 -0
  386. package/lib/component/transaction-line/transaction-line.module.d.ts +2 -0
  387. package/lib/component/transaction-line-fields/transaction-line-commission-code.component.d.ts +12 -0
  388. package/lib/component/transaction-line-fields/transaction-line-commission-code.module.d.ts +2 -0
  389. package/lib/component/transaction-line-fields/transaction-line-delivery-date.component.d.ts +7 -0
  390. package/lib/component/transaction-line-fields/transaction-line-delivery-date.module.d.ts +2 -0
  391. package/lib/component/transaction-line-fields/transaction-line-delivery-method.component.d.ts +12 -0
  392. package/lib/component/transaction-line-fields/transaction-line-delivery-method.module.d.ts +2 -0
  393. package/lib/component/transaction-line-fields/transaction-line-discount-amount.component.d.ts +10 -0
  394. package/lib/component/transaction-line-fields/transaction-line-discount-amount.module.d.ts +2 -0
  395. package/lib/component/transaction-line-fields/transaction-line-fields-base.component.d.ts +6 -0
  396. package/lib/component/transaction-line-fields/transaction-line-line-discount.component.d.ts +10 -0
  397. package/lib/component/transaction-line-fields/transaction-line-line-discount.module.d.ts +2 -0
  398. package/lib/component/transaction-line-fields/transaction-line-price-list.component.d.ts +12 -0
  399. package/lib/component/transaction-line-fields/transaction-line-price-list.module.d.ts +2 -0
  400. package/lib/component/transaction-line-fields/transaction-line-price.component.d.ts +10 -0
  401. package/lib/component/transaction-line-fields/transaction-line-price.module.d.ts +2 -0
  402. package/lib/component/transaction-line-fields/transaction-line-quantity.component.d.ts +7 -0
  403. package/lib/component/transaction-line-fields/transaction-line-quantity.module.d.ts +2 -0
  404. package/lib/component/transaction-line-fields/transaction-line-quantum-discount.component.d.ts +10 -0
  405. package/lib/component/transaction-line-fields/transaction-line-quantum-discount.module.d.ts +2 -0
  406. package/lib/component/transaction-line-fields/transaction-line-reference.component.d.ts +10 -0
  407. package/lib/component/transaction-line-fields/transaction-line-reference.module.d.ts +2 -0
  408. package/lib/component/transaction-line-fields/transaction-line-special-discount.component.d.ts +10 -0
  409. package/lib/component/transaction-line-fields/transaction-line-special-discount.module.d.ts +2 -0
  410. package/lib/component/transaction-line-fields/transaction-line-vat.component.d.ts +12 -0
  411. package/lib/component/transaction-line-fields/transaction-line-vat.module.d.ts +2 -0
  412. package/lib/component/transaction-line-fields/transaction-line-warehouse.component.d.ts +12 -0
  413. package/lib/component/transaction-line-fields/transaction-line-warehouse.module.d.ts +2 -0
  414. package/lib/component/transaction-line-grid/style/_layout.scss +6 -0
  415. package/{app/component/service-order/transaction-sidebar/transaction-line-accordion.component.scss → lib/component/transaction-line-grid/style/_material-definition.scss} +0 -0
  416. package/lib/component/transaction-line-grid/style/_theme.scss +6 -0
  417. package/lib/component/transaction-line-grid/style/material.scss +4 -0
  418. package/lib/component/transaction-line-grid/transaction-line-grid.component.d.ts +5 -0
  419. package/lib/component/transaction-line-grid/transaction-line-grid.module.d.ts +2 -0
  420. package/lib/component/transaction-line-side-panel/style/_layout.scss +64 -0
  421. package/lib/component/transaction-line-side-panel/style/_material-definition.scss +8 -0
  422. package/lib/component/transaction-line-side-panel/style/_theme.scss +9 -0
  423. package/lib/component/transaction-line-side-panel/style/material.scss +9 -0
  424. package/lib/component/transaction-line-side-panel/transaction-line-side-panel.component.d.ts +18 -0
  425. package/lib/component/transaction-line-side-panel/transaction-line-side-panel.module.d.ts +2 -0
  426. package/lib/component/transaction-line-side-panel-default/style/_layout.scss +29 -0
  427. package/lib/component/transaction-line-side-panel-default/style/_material-definition.scss +10 -0
  428. package/lib/component/transaction-line-side-panel-default/style/_theme.scss +7 -0
  429. package/lib/component/transaction-line-side-panel-default/style/material.scss +4 -0
  430. package/lib/component/transaction-line-side-panel-default/transaction-line-side-panel-default.component.d.ts +16 -0
  431. package/lib/component/transaction-line-side-panel-default/transaction-line-side-panel-default.module.d.ts +2 -0
  432. package/lib/component/transaction-lines/style/_layout.scss +33 -0
  433. package/lib/component/transaction-lines/style/_material-definition.scss +3 -0
  434. package/lib/component/transaction-lines/style/_theme.scss +19 -0
  435. package/lib/component/transaction-lines/style/material.scss +7 -0
  436. package/lib/component/transaction-lines/transaction-lines.component.d.ts +37 -0
  437. package/lib/component/transaction-lines/transaction-lines.module.d.ts +2 -0
  438. package/lib/component/transaction-lines-grid/style/_layout.scss +37 -0
  439. package/lib/component/transaction-lines-grid/style/_material-definition.scss +19 -0
  440. package/lib/component/transaction-lines-grid/style/_theme.scss +15 -0
  441. package/lib/component/transaction-lines-grid/style/material.scss +5 -0
  442. package/lib/component/transaction-lines-grid/transaction-lines-grid.component.d.ts +20 -0
  443. package/lib/component/transaction-lines-grid/transaction-lines-grid.module.d.ts +2 -0
  444. package/lib/component/transaction-nav-bar/style/_layout.scss +13 -0
  445. package/lib/component/transaction-nav-bar/style/_material-definition.scss +1 -0
  446. package/lib/component/transaction-nav-bar/style/_theme.scss +7 -0
  447. package/lib/component/transaction-nav-bar/style/material.scss +4 -0
  448. package/lib/component/transaction-nav-bar/transaction-nav-bar-button/transaction-nav-bar-button.component.d.ts +14 -0
  449. package/lib/component/transaction-nav-bar/transaction-nav-bar-button/transaction-nav-bar-button.component.scss +23 -0
  450. package/lib/component/transaction-nav-bar/transaction-nav-bar.component.d.ts +18 -0
  451. package/lib/component/transaction-nav-bar/transaction-nav-bar.module.d.ts +2 -0
  452. package/lib/component/transaction-receiving-goods-details/style/_layout.scss +38 -0
  453. package/lib/component/transaction-receiving-goods-details/style/_material-definition.scss +1 -0
  454. package/lib/component/transaction-receiving-goods-details/style/_theme.scss +7 -0
  455. package/lib/component/transaction-receiving-goods-details/style/material.scss +4 -0
  456. package/lib/component/transaction-receiving-goods-details/transaction-receiving-goods-details.component.d.ts +6 -0
  457. package/lib/component/transaction-receiving-goods-details/transaction-receiving-goods-details.module.d.ts +2 -0
  458. package/lib/component/transaction-receiving-goods-history/style/_layout.scss +7 -0
  459. package/lib/component/transaction-receiving-goods-history/style/_material-definition.scss +1 -0
  460. package/lib/component/transaction-receiving-goods-history/style/_theme.scss +7 -0
  461. package/lib/component/transaction-receiving-goods-history/style/material.scss +4 -0
  462. package/lib/component/transaction-receiving-goods-history/transaction-receiving-goods-history.component.d.ts +5 -0
  463. package/lib/component/transaction-receiving-goods-history/transaction-receiving-goods-history.module.d.ts +2 -0
  464. package/lib/component/transaction-totals/style/_layout.scss +35 -0
  465. package/lib/component/transaction-totals/style/_material-definition.scss +15 -0
  466. package/lib/component/transaction-totals/style/_theme.scss +10 -0
  467. package/lib/component/transaction-totals/style/material.scss +4 -0
  468. package/lib/component/transaction-totals/transaction-totals.component.d.ts +9 -0
  469. package/lib/component/transaction-totals/transaction-totals.module.d.ts +2 -0
  470. package/{app → lib}/enum/content-view-mode.enum.d.ts +0 -0
  471. package/lib/enum/icon.enum.d.ts +26 -0
  472. package/{app → lib}/enum/language-code.enum.d.ts +0 -0
  473. package/{app → lib}/enum/order-discount-type.enum.d.ts +0 -0
  474. package/lib/enum/status-type.enum.d.ts +3 -0
  475. package/lib/enum/tab-category.enum.d.ts +8 -0
  476. package/{app → lib}/enum/time-size.type.d.ts +0 -0
  477. package/{factory → lib/factory}/business-object-factory.d.ts +1 -1
  478. package/{factory → lib/factory}/decorators/boolean.decorator.d.ts +0 -0
  479. package/{factory → lib/factory}/decorators/complex-array.decorator.d.ts +0 -0
  480. package/{factory → lib/factory}/decorators/complex-field.decorator.d.ts +0 -0
  481. package/{factory → lib/factory}/decorators/date-field.decorator.d.ts +0 -0
  482. package/{factory → lib/factory}/decorators/string-number.decorator.d.ts +0 -0
  483. package/{app → lib}/model/business-object.d.ts +0 -0
  484. package/lib/model/delivery-type.d.ts +7 -0
  485. package/lib/model/icon-svg.d.ts +4 -0
  486. package/{app → lib}/model/standard-text.d.ts +0 -0
  487. package/{app → lib}/model/text-value-container.d.ts +0 -0
  488. package/{app → lib}/pipe/append.pipe.d.ts +0 -0
  489. package/{app → lib}/pipe/co-currency.pipe.d.ts +0 -0
  490. package/{app → lib}/pipe/date-duration.pipe.d.ts +0 -0
  491. package/{app → lib}/pipe/delivery-time.pipe.d.ts +0 -0
  492. package/{app → lib}/pipe/localize.pipe.d.ts +0 -0
  493. package/lib/pipe/pipe.module.d.ts +2 -0
  494. package/lib/pipe/safe-html.pipe.d.ts +7 -0
  495. package/{app/pipe/safe-style-pipe.d.ts → lib/pipe/safe-style.pipe.d.ts} +0 -0
  496. package/lib/service/dialog.service.d.ts +12 -0
  497. package/{app → lib}/service/dictionary.service.d.ts +0 -0
  498. package/lib/service/icon-cache.service.d.ts +18 -0
  499. package/{app → lib}/service/ione-connector-adapter.service.d.ts +34 -13
  500. package/{app → lib}/service/options.service.d.ts +3 -4
  501. package/lib/service/pending-reason.service.d.ts +32 -0
  502. package/{app → lib}/service/transaction.service.d.ts +35 -55
  503. package/{style → lib/style}/_mixin.scss +0 -0
  504. package/{style → lib/style}/_variables.scss +29 -3
  505. package/{utils → lib/utils}/array-utils.d.ts +0 -0
  506. package/{utils → lib/utils}/is-nill.function.d.ts +0 -0
  507. package/{app → lib}/utils/string-utils.d.ts +0 -0
  508. package/package.json +27 -33
  509. package/public_api.d.ts +27 -6
  510. package/app/app.component.scss +0 -39
  511. package/app/component/checkout/checkout/checkout.component.d.ts +0 -34
  512. package/app/component/checkout/checkout/checkout.component.scss +0 -137
  513. package/app/component/checkout/checkout-overview/checkout-overview.component.d.ts +0 -42
  514. package/app/component/checkout/checkout-overview-block/checkout-overview-block.component.d.ts +0 -12
  515. package/app/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.scss +0 -3
  516. package/app/component/checkout/checkout-overview-relation-address/checkout-overview-relation-address.component.d.ts +0 -23
  517. package/app/component/checkout/checkout-overview-relation-address/style/_layout.scss +0 -19
  518. package/app/component/checkout/checkout-overview-relation-address/style/_theme.scss +0 -7
  519. package/app/component/checkout/checkout-overview-relation-edit/style/_layout.scss +0 -92
  520. package/app/component/checkout/checkout-overview-relation-edit/style/_material-definition.scss +0 -15
  521. package/app/component/checkout/checkout-overview-relation-edit/style/material.scss +0 -5
  522. package/app/component/checkout/checkout-transaction/checkout-transaction.component.d.ts +0 -16
  523. package/app/component/checkout/checkout-transaction/checkout-transaction.component.scss +0 -11
  524. package/app/component/checkout/ione-checkout.component.d.ts +0 -41
  525. package/app/component/checkout/ione-checkout.module.d.ts +0 -2
  526. package/app/component/core/characteristic-answer/characteristic-answer.component.d.ts +0 -22
  527. package/app/component/core/directive/template-wrapper.directive.d.ts +0 -13
  528. package/app/component/core/image-display/image-display.component.d.ts +0 -14
  529. package/app/component/core/image-display/style/_layout.scss +0 -39
  530. package/app/component/core/no-image-display/no-image-display.component.d.ts +0 -5
  531. package/app/component/service-order/ione-service-order-module.d.ts +0 -2
  532. package/app/component/service-order/ione-service-order.component.d.ts +0 -25
  533. package/app/component/service-order/service-order.component.d.ts +0 -52
  534. package/app/component/service-order/service-order.component.scss +0 -152
  535. package/app/component/service-order/summary/transaction-article-summary.component.d.ts +0 -17
  536. package/app/component/service-order/summary/transaction-delivery-summary.component.d.ts +0 -20
  537. package/app/component/service-order/summary/transaction-delivery-summary.component.scss +0 -20
  538. package/app/component/service-order/summary/transaction-order-summary.component.d.ts +0 -16
  539. package/app/component/service-order/summary/transaction-payment-info.component.d.ts +0 -14
  540. package/app/component/service-order/summary/transaction-product-contract-summary.component.d.ts +0 -7
  541. package/app/component/service-order/summary/transaction-product-summary.component.d.ts +0 -15
  542. package/app/component/service-order/summary/transaction-service-status.component.d.ts +0 -15
  543. package/app/component/service-order/summary/transaction-service-summary.component.d.ts +0 -15
  544. package/app/component/service-order/summary/transaction-summary-block.component.d.ts +0 -16
  545. package/app/component/service-order/summary/transaction-summary-block.component.scss +0 -107
  546. package/app/component/service-order/transaction-article-text/transaction-article-text.component.d.ts +0 -33
  547. package/app/component/service-order/transaction-article-text/transaction-article-text.component.scss +0 -6
  548. package/app/component/service-order/transaction-article-text-overview/transaction-article-text-overview.component.d.ts +0 -23
  549. package/app/component/service-order/transaction-edit-article-text/transaction-edit-article-text.component.d.ts +0 -19
  550. package/app/component/service-order/transaction-header-block/transaction-header-block.component.d.ts +0 -15
  551. package/app/component/service-order/transaction-header-block/transaction-header-block.component.scss +0 -65
  552. package/app/component/service-order/transaction-manager/transaction-manager.component.d.ts +0 -64
  553. package/app/component/service-order/transaction-manager/transaction-manager.component.scss +0 -52
  554. package/app/component/service-order/transaction-order-line-view/transaction-order-line-view.component.d.ts +0 -16
  555. package/app/component/service-order/transaction-order-line-view/transaction-order-line-view.component.scss +0 -88
  556. package/app/component/service-order/transaction-order-lines/transaction-order-lines.component.d.ts +0 -25
  557. package/app/component/service-order/transaction-order-lines/transaction-order-lines.component.scss +0 -83
  558. package/app/component/service-order/transaction-order-totals/transaction-order-totals.component.d.ts +0 -6
  559. package/app/component/service-order/transaction-order-totals/transaction-order-totals.component.scss +0 -24
  560. package/app/component/service-order/transaction-relation/transaction-relation-address.component.d.ts +0 -22
  561. package/app/component/service-order/transaction-relation/transaction-relation-edit.component.d.ts +0 -29
  562. package/app/component/service-order/transaction-relation/transaction-relation-edit.component.scss +0 -24
  563. package/app/component/service-order/transaction-sidebar/transaction-line-accordion.component.d.ts +0 -11
  564. package/app/component/service-order/transaction-sidebar/transaction-sidebar-right.component.d.ts +0 -26
  565. package/app/component/service-order/transaction-sidebar/transaction-sidebar-right.component.scss +0 -17
  566. package/app/component/service-order/warehouse/warehouse.component.d.ts +0 -35
  567. package/app/component/service-order/warehouse/warehouse.component.scss +0 -52
  568. package/app/component/shopping-cart/ione-shopping-cart.component.d.ts +0 -71
  569. package/app/component/shopping-cart/ione-shopping-cart.module.d.ts +0 -2
  570. package/app/component/shopping-cart/shopping-cart/shopping-cart.component.d.ts +0 -61
  571. package/app/component/shopping-cart/shopping-cart/shopping-cart.component.scss +0 -79
  572. package/app/component/shopping-cart/shopping-cart-line/shopping-cart-line.component.d.ts +0 -34
  573. package/app/component/shopping-cart/shopping-cart-line/shopping-cart-line.component.scss +0 -107
  574. package/app/component/shopping-cart/shopping-cart-manager/shopping-cart-manager.component.d.ts +0 -91
  575. package/app/enum/checkout-steps.enum.d.ts +0 -7
  576. package/app/enum/position-grid-row.enum.d.ts +0 -4
  577. package/app/model/transaction-add-text-line-request.d.ts +0 -9
  578. package/app/service/transaction-event.service.d.ts +0 -53
  579. package/esm2015/app/component/checkout/checkout/checkout.component.js +0 -157
  580. package/esm2015/app/component/checkout/checkout-login/checkout-login.component.js +0 -106
  581. package/esm2015/app/component/checkout/checkout-overview/checkout-overview.component.js +0 -185
  582. package/esm2015/app/component/checkout/checkout-overview-block/checkout-overview-block.component.js +0 -47
  583. package/esm2015/app/component/checkout/checkout-overview-delivery-address/checkout-overview-delivery-address.component.js +0 -47
  584. package/esm2015/app/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.js +0 -420
  585. package/esm2015/app/component/checkout/checkout-overview-relation-address/checkout-overview-relation-address.component.js +0 -103
  586. package/esm2015/app/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.js +0 -377
  587. package/esm2015/app/component/checkout/checkout-relation-suggestions-list/checkout-relation-suggestions-list.component.js +0 -30
  588. package/esm2015/app/component/checkout/checkout-relation-suggestions-list-item/checkout-relation-suggestions-list-item.component.js +0 -31
  589. package/esm2015/app/component/checkout/checkout-transaction/checkout-transaction.component.js +0 -55
  590. package/esm2015/app/component/checkout/ione-checkout.component.js +0 -137
  591. package/esm2015/app/component/checkout/ione-checkout.module.js +0 -76
  592. package/esm2015/app/component/core/base/default-ok-cancel-buttons.component.js +0 -41
  593. package/esm2015/app/component/core/base/transaction-base.component.js +0 -146
  594. package/esm2015/app/component/core/characteristic-answer/characteristic-answer.component.js +0 -100
  595. package/esm2015/app/component/core/core.module.js +0 -48
  596. package/esm2015/app/component/core/directive/template-wrapper.directive.js +0 -69
  597. package/esm2015/app/component/core/image-display/image-display.component.js +0 -45
  598. package/esm2015/app/component/core/no-image-display/no-image-display.component.js +0 -26
  599. package/esm2015/app/component/core/relation/customer-groups.component.js +0 -40
  600. package/esm2015/app/component/service-order/ione-service-order-module.js +0 -114
  601. package/esm2015/app/component/service-order/ione-service-order.component.js +0 -96
  602. package/esm2015/app/component/service-order/service-order.component.js +0 -199
  603. package/esm2015/app/component/service-order/summary/transaction-article-summary.component.js +0 -55
  604. package/esm2015/app/component/service-order/summary/transaction-delivery-summary.component.js +0 -59
  605. package/esm2015/app/component/service-order/summary/transaction-order-summary.component.js +0 -43
  606. package/esm2015/app/component/service-order/summary/transaction-payment-info.component.js +0 -35
  607. package/esm2015/app/component/service-order/summary/transaction-product-contract-summary.component.js +0 -38
  608. package/esm2015/app/component/service-order/summary/transaction-product-summary.component.js +0 -41
  609. package/esm2015/app/component/service-order/summary/transaction-service-status.component.js +0 -37
  610. package/esm2015/app/component/service-order/summary/transaction-service-summary.component.js +0 -38
  611. package/esm2015/app/component/service-order/summary/transaction-summary-block.component.js +0 -53
  612. package/esm2015/app/component/service-order/transaction-article-text/transaction-article-text.component.js +0 -140
  613. package/esm2015/app/component/service-order/transaction-article-text-overview/transaction-article-text-overview.component.js +0 -105
  614. package/esm2015/app/component/service-order/transaction-edit-article-text/transaction-edit-article-text.component.js +0 -73
  615. package/esm2015/app/component/service-order/transaction-header-block/transaction-header-block.component.js +0 -83
  616. package/esm2015/app/component/service-order/transaction-manager/transaction-manager.component.js +0 -314
  617. package/esm2015/app/component/service-order/transaction-order-line-view/transaction-order-line-view.component.js +0 -76
  618. package/esm2015/app/component/service-order/transaction-order-lines/transaction-order-lines.component.js +0 -71
  619. package/esm2015/app/component/service-order/transaction-order-totals/transaction-order-totals.component.js +0 -36
  620. package/esm2015/app/component/service-order/transaction-relation/transaction-relation-address.component.js +0 -116
  621. package/esm2015/app/component/service-order/transaction-relation/transaction-relation-edit.component.js +0 -225
  622. package/esm2015/app/component/service-order/transaction-sidebar/transaction-line-accordion.component.js +0 -172
  623. package/esm2015/app/component/service-order/transaction-sidebar/transaction-sidebar-right.component.js +0 -120
  624. package/esm2015/app/component/service-order/warehouse/warehouse.component.js +0 -133
  625. package/esm2015/app/component/shopping-cart/ione-shopping-cart.component.js +0 -185
  626. package/esm2015/app/component/shopping-cart/ione-shopping-cart.module.js +0 -62
  627. package/esm2015/app/component/shopping-cart/shopping-cart/shopping-cart.component.js +0 -294
  628. package/esm2015/app/component/shopping-cart/shopping-cart-line/shopping-cart-line.component.js +0 -172
  629. package/esm2015/app/component/shopping-cart/shopping-cart-manager/shopping-cart-manager.component.js +0 -451
  630. package/esm2015/app/enum/checkout-steps.enum.js +0 -10
  631. package/esm2015/app/enum/content-view-mode.enum.js +0 -10
  632. package/esm2015/app/enum/language-code.enum.js +0 -8
  633. package/esm2015/app/enum/order-discount-type.enum.js +0 -7
  634. package/esm2015/app/enum/position-grid-row.enum.js +0 -6
  635. package/esm2015/app/enum/time-size.type.js +0 -10
  636. package/esm2015/app/model/business-object.js +0 -81
  637. package/esm2015/app/model/standard-text.js +0 -3
  638. package/esm2015/app/model/text-value-container.js +0 -3
  639. package/esm2015/app/model/transaction-add-text-line-request.js +0 -11
  640. package/esm2015/app/pipe/append.pipe.js +0 -17
  641. package/esm2015/app/pipe/co-currency.pipe.js +0 -47
  642. package/esm2015/app/pipe/date-duration.pipe.js +0 -57
  643. package/esm2015/app/pipe/delivery-time.pipe.js +0 -33
  644. package/esm2015/app/pipe/localize.pipe.js +0 -28
  645. package/esm2015/app/pipe/safe-style-pipe.js +0 -19
  646. package/esm2015/app/service/dictionary.service.js +0 -76
  647. package/esm2015/app/service/ione-connector-adapter.service.js +0 -567
  648. package/esm2015/app/service/options.service.js +0 -91
  649. package/esm2015/app/service/transaction-event.service.js +0 -26
  650. package/esm2015/app/service/transaction.service.js +0 -584
  651. package/esm2015/app/utils/string-utils.js +0 -64
  652. package/esm2015/assets/dictionary/text.properties.js +0 -332
  653. package/esm2015/factory/business-object-factory.js +0 -120
  654. package/esm2015/factory/decorators/boolean.decorator.js +0 -102
  655. package/esm2015/factory/decorators/complex-array.decorator.js +0 -55
  656. package/esm2015/factory/decorators/complex-field.decorator.js +0 -57
  657. package/esm2015/factory/decorators/date-field.decorator.js +0 -36
  658. package/esm2015/factory/decorators/string-number.decorator.js +0 -43
  659. package/esm2015/utils/array-utils.js +0 -183
  660. package/esm2015/utils/is-nill.function.js +0 -5
  661. package/style/styles.scss +0 -367
  662. package/styles.scss +0 -11
@@ -0,0 +1,679 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Injectable } from "@angular/core";
3
+ import { NULL_CUSTOMER_FULL_OBJECT } from "@colijnit/transactionapi/build/model/nul-relation-object";
4
+ import { TransactionKind } from "@colijnit/transactionapi/build/enum/transaction-kind.enum";
5
+ import { SequenceName } from "@colijnit/transactionapi/build/enum/sequence-name.enum";
6
+ import { TransactionLineType } from "@colijnit/transactionapi/build/enum/transaction-line-type.enum";
7
+ import { PendingReasonType } from "@colijnit/transactionapi/build/enum/pending-reason-type.enum";
8
+ import { throwError } from "rxjs";
9
+ import { AddressType } from "@colijnit/transactionapi/build/enum/address-type.enum";
10
+ import { PendingReasonService } from "./pending-reason.service";
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "./dialog.service";
13
+ import * as i2 from "./options.service";
14
+ import * as i3 from "./ione-connector-adapter.service";
15
+ export class TransactionService extends PendingReasonService {
16
+ constructor() {
17
+ super(...arguments);
18
+ this._imageCache = new Map();
19
+ }
20
+ // public get currentLines(): TransactionLineInfo[] {
21
+ // return this._currentLines;
22
+ // }
23
+ //
24
+ // public set currentLines(value: TransactionLineInfo[]) {
25
+ // this._currentLines = value;
26
+ // this.articleAmount = ArrayUtils.FindAll(this._currentLines, line => line.isArticle).length;
27
+ // }
28
+ //
29
+ // public set currentTotals(value: TransactionTotal) {
30
+ // this._currentTotals = value;
31
+ // }
32
+ //
33
+ // public get currentTotals(): TransactionTotal {
34
+ // return this._currentTotals;
35
+ // }
36
+ //
37
+ // public get currentRelation(): RelationAnyType {
38
+ // return this._currentRelation;
39
+ // }
40
+ //
41
+ // public get currentTransaction(): TransactionInfo {
42
+ // return this._currentTransaction;
43
+ // }
44
+ //
45
+ // public set currentLineOperationStatuses(values: LineOperationStatus[]) {
46
+ // this._currentLineOperationStatuses = values;
47
+ // }
48
+ //
49
+ // public get currentLineOperationStatuses(): LineOperationStatus[] {
50
+ // return this._currentLineOperationStatuses;
51
+ // }
52
+ //
53
+ // public set currentLineOperationStatus(value: LineOperationStatus) {
54
+ // this._currentLineOperationStatus = value;
55
+ // }
56
+ //
57
+ // public get currentLineOperationStatus(): LineOperationStatus | undefined {
58
+ // const status: LineOperationStatus = this.currentLineOperationStatuses.find(line => line.pendingReasonType !== PendingReasonType.NONE
59
+ // && line.pendingReasonType !== PendingReasonType.NON_CRITICAL_DISCONTINUATION);
60
+ // return status;
61
+ // }
62
+ //
63
+ // public articleAmount: number = 0;
64
+ // private _currentLines: TransactionLineInfo[] = [];
65
+ // private _currentTotals: TransactionTotal = new TransactionTotal();
66
+ // private _currentRelation: RelationAnyType; // = NULL_RELATION_OBJECT;
67
+ // private _currentTransaction: TransactionInfo = new TransactionInfo();
68
+ // private _currentLineOperationStatus: LineOperationStatus = new LineOperationStatus();
69
+ // private _currentLineOperationStatuses: LineOperationStatus[] = [];
70
+ pendingLineOperationStatus(lineOperationStatuses) {
71
+ const status = lineOperationStatuses.find(line => line.pendingReasonType !== PendingReasonType.NONE
72
+ && line.pendingReasonType !== PendingReasonType.NON_CRITICAL_DISCONTINUATION);
73
+ return status;
74
+ }
75
+ updatePriceTransactionLine(uuid, lineUuid, price) {
76
+ return __awaiter(this, void 0, void 0, function* () {
77
+ const response = yield this.connector.changeTransactionLinePrice(uuid, lineUuid, price)
78
+ .catch((error) => {
79
+ // todo: do something with the error
80
+ return false;
81
+ });
82
+ if (response) {
83
+ const success = yield this.handleLineOperationStatuses(response);
84
+ this._rememberCurrentTransaction(response);
85
+ return success;
86
+ }
87
+ return false;
88
+ });
89
+ }
90
+ updateReferenceTransactionLine(uuid, lineUuid, reference) {
91
+ return __awaiter(this, void 0, void 0, function* () {
92
+ const response = yield this.connector.changeTransactionLineReference(uuid, lineUuid, reference)
93
+ .catch((error) => {
94
+ // todo: do something with the error
95
+ return false;
96
+ });
97
+ if (response) {
98
+ const success = yield this.handleLineOperationStatuses(response);
99
+ this._rememberCurrentTransaction(response);
100
+ return success;
101
+ }
102
+ return false;
103
+ });
104
+ }
105
+ updateQuantityTransactionLine(uuid, lineUuid, quantity) {
106
+ return __awaiter(this, void 0, void 0, function* () {
107
+ const response = yield this.connector.changeTransactionLineQuantity(uuid, lineUuid, quantity)
108
+ .catch((error) => {
109
+ // todo: do something with the error
110
+ return false;
111
+ });
112
+ if (response) {
113
+ const success = yield this.handleLineOperationStatuses(response);
114
+ this._rememberCurrentTransaction(response);
115
+ return success;
116
+ }
117
+ return false;
118
+ });
119
+ }
120
+ updateDeliveryDateTransactionLine(uuid, lineUuid, date) {
121
+ return __awaiter(this, void 0, void 0, function* () {
122
+ const response = yield this.connector.changeTransactionLineDeliveryDate(uuid, lineUuid, date)
123
+ .catch((error) => {
124
+ // todo: do something with the error
125
+ return false;
126
+ });
127
+ if (response) {
128
+ const success = yield this.handleLineOperationStatuses(response);
129
+ this._rememberCurrentTransaction(response);
130
+ return success;
131
+ }
132
+ return false;
133
+ });
134
+ }
135
+ updatePriceListTransactionLine(uuid, lineUuid, priceList) {
136
+ return __awaiter(this, void 0, void 0, function* () {
137
+ const response = yield this.connector.changeTransactionLinePriceList(uuid, lineUuid, priceList)
138
+ .catch((error) => {
139
+ // todo: do something with the error
140
+ return false;
141
+ });
142
+ if (response) {
143
+ const success = yield this.handleLineOperationStatuses(response);
144
+ this._rememberCurrentTransaction(response);
145
+ return success;
146
+ }
147
+ return false;
148
+ });
149
+ }
150
+ updateVatTransactionLine(uuid, lineUuid, id) {
151
+ return __awaiter(this, void 0, void 0, function* () {
152
+ const response = yield this.connector.changeTransactionLineVat(uuid, lineUuid, id)
153
+ .catch((error) => {
154
+ // todo: do something with the error
155
+ return false;
156
+ });
157
+ if (response) {
158
+ const success = yield this.handleLineOperationStatuses(response);
159
+ this._rememberCurrentTransaction(response);
160
+ return success;
161
+ }
162
+ return false;
163
+ });
164
+ }
165
+ updateCommissionCodeTransactionLine(uuid, lineUuid, code) {
166
+ return __awaiter(this, void 0, void 0, function* () {
167
+ const response = yield this.connector.changeTransactionLineCommissionCode(uuid, lineUuid, code)
168
+ .catch((error) => {
169
+ // todo: do something with the error
170
+ return false;
171
+ });
172
+ if (response) {
173
+ const success = yield this.handleLineOperationStatuses(response);
174
+ this._rememberCurrentTransaction(response);
175
+ return success;
176
+ }
177
+ return false;
178
+ });
179
+ }
180
+ updateWarehouseTransactionLine(uuid, lineUuid, warehouseNumber) {
181
+ return __awaiter(this, void 0, void 0, function* () {
182
+ const response = yield this.connector.changeTransactionLineWarehouse(uuid, lineUuid, warehouseNumber)
183
+ .catch((error) => {
184
+ // todo: do something with the error
185
+ return false;
186
+ });
187
+ if (response) {
188
+ const success = yield this.handleLineOperationStatuses(response);
189
+ this._rememberCurrentTransaction(response);
190
+ return success;
191
+ }
192
+ return false;
193
+ });
194
+ }
195
+ updateDeliveryMethodTransactionLine(uuid, lineUuid, method) {
196
+ return __awaiter(this, void 0, void 0, function* () {
197
+ const response = yield this.connector.changeTransactionLineDeliveryMethod(uuid, lineUuid, method)
198
+ .catch((error) => {
199
+ // todo: do something with the error
200
+ return false;
201
+ });
202
+ if (response) {
203
+ const success = yield this.handleLineOperationStatuses(response);
204
+ this._rememberCurrentTransaction(response);
205
+ return success;
206
+ }
207
+ return false;
208
+ });
209
+ }
210
+ updateDiscountTransactionLine(uuid, lineUuid, type, discount, reason = "", code = "") {
211
+ return __awaiter(this, void 0, void 0, function* () {
212
+ const response = yield this.connector.changeTransactionLineLineDiscount(uuid, lineUuid, type, discount, reason, code)
213
+ .catch((error) => {
214
+ // todo: do something with the error
215
+ return false;
216
+ });
217
+ if (response) {
218
+ const success = yield this.handleLineOperationStatuses(response);
219
+ this._rememberCurrentTransaction(response);
220
+ return success;
221
+ }
222
+ return false;
223
+ });
224
+ }
225
+ getArticleFullObject(goodId) {
226
+ return __awaiter(this, void 0, void 0, function* () {
227
+ return yield this.connector.getArticleFullObject(goodId);
228
+ });
229
+ }
230
+ getDocumentContent(id) {
231
+ return this.connector.getDocumentContent(id);
232
+ }
233
+ getGoodIdFromArticleNr(sku) {
234
+ return __awaiter(this, void 0, void 0, function* () {
235
+ return yield this.connector.getGoodIdFromArticleNr(sku);
236
+ });
237
+ }
238
+ getCountry(countryCode) {
239
+ return __awaiter(this, void 0, void 0, function* () {
240
+ return yield this.connector.getCountry(countryCode);
241
+ });
242
+ }
243
+ getCashRegisters() {
244
+ return __awaiter(this, void 0, void 0, function* () {
245
+ return this.connector.getCashRegisters(undefined, 1);
246
+ });
247
+ }
248
+ getRelationNumber(relationId) {
249
+ return __awaiter(this, void 0, void 0, function* () {
250
+ return this.connector.getRelationNumber(relationId);
251
+ });
252
+ }
253
+ getPriceLists() {
254
+ return __awaiter(this, void 0, void 0, function* () {
255
+ return this.connector.getPriceLists();
256
+ });
257
+ }
258
+ getVatLists() {
259
+ return __awaiter(this, void 0, void 0, function* () {
260
+ return this.connector.getVatList();
261
+ });
262
+ }
263
+ saveRelation() {
264
+ return __awaiter(this, void 0, void 0, function* () {
265
+ // this._cleanRelationBeforeSave();
266
+ if (!this.relation.relationId) {
267
+ this.relation = yield this.connector.insertCustomer(this.relation);
268
+ }
269
+ else {
270
+ this.relation = yield this.connector.updateCustomer(this.relation);
271
+ }
272
+ return yield this.addRelationToTransaction(this.relation.relationId);
273
+ });
274
+ }
275
+ getSequenceValue() {
276
+ return __awaiter(this, void 0, void 0, function* () {
277
+ return yield this.connector.getSequenceValue(SequenceName.RelationId);
278
+ });
279
+ }
280
+ getRelationPrivacySettings() {
281
+ return __awaiter(this, void 0, void 0, function* () {
282
+ return yield this.connector.getRelationPrivacySettings();
283
+ });
284
+ }
285
+ getArticleBoundTextLinesOfArticleLine(articleLineUuid) {
286
+ return this.connector.getArticleBoundTextLinesOfArticleLine(articleLineUuid);
287
+ }
288
+ createTransaction() {
289
+ return __awaiter(this, void 0, void 0, function* () {
290
+ return new Promise((resolve, reject) => {
291
+ this.connector.createTransaction(TransactionKind.SalesOrder, "1").then((response) => {
292
+ this._rememberCurrentTransaction(response);
293
+ resolve(true);
294
+ }, (error) => {
295
+ reject(error);
296
+ }).catch((reason) => {
297
+ reject(false);
298
+ });
299
+ });
300
+ });
301
+ }
302
+ getTransaction(transactionNo) {
303
+ return __awaiter(this, void 0, void 0, function* () {
304
+ return yield this.openExistingTransaction(TransactionKind.SalesOrder, transactionNo);
305
+ });
306
+ }
307
+ openExistingTransaction(kind, transactionNr) {
308
+ return new Promise((resolve, reject) => {
309
+ this.connector.getTransactionByNrAndKind(kind, transactionNr)
310
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
311
+ if (response.isSuccess) {
312
+ this.transactionUpdated.next(response);
313
+ resolve(true);
314
+ }
315
+ else {
316
+ reject(false);
317
+ }
318
+ }))
319
+ .catch((reason) => {
320
+ reject(false);
321
+ });
322
+ });
323
+ }
324
+ getTransactionById(transactionId) {
325
+ return new Promise((resolve, reject) => {
326
+ this.connector.getTransactionById(transactionId)
327
+ .then((response) => {
328
+ if (response.isSuccess) {
329
+ this._rememberCurrentTransaction(response);
330
+ this.transactionUpdated.next(response);
331
+ resolve(true);
332
+ }
333
+ else {
334
+ reject(false);
335
+ }
336
+ })
337
+ .catch((reason) => {
338
+ reject(false);
339
+ });
340
+ });
341
+ }
342
+ commit() {
343
+ return this.connector.commit();
344
+ }
345
+ saveTransaction(close = false) {
346
+ return __awaiter(this, void 0, void 0, function* () {
347
+ const response = yield this.connector.saveTransaction(this.currentTransaction.transactionInfo.uuid);
348
+ if (response.isSuccess) {
349
+ this._rememberCurrentTransaction(response);
350
+ }
351
+ return response;
352
+ });
353
+ }
354
+ saveTransactionByUuid(transactionUuid) {
355
+ return __awaiter(this, void 0, void 0, function* () {
356
+ return new Promise((resolve, reject) => {
357
+ this.connector.saveTransaction(transactionUuid)
358
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
359
+ if (response.isSuccess) {
360
+ this.transactionUpdated.next(response);
361
+ resolve(true);
362
+ }
363
+ else {
364
+ reject(false);
365
+ }
366
+ }))
367
+ .catch((reason) => {
368
+ if (reason) {
369
+ this.dialogService.showError(reason.getFullErrorString());
370
+ }
371
+ reject(false);
372
+ });
373
+ });
374
+ });
375
+ }
376
+ addRelationToTransaction(relationId) {
377
+ return __awaiter(this, void 0, void 0, function* () {
378
+ yield this._checkAndCreateTransaction();
379
+ const result = yield this.connector.addRelationToTransaction(this.currentTransaction.transactionInfo.uuid, relationId);
380
+ if (result.isSuccess) {
381
+ this._rememberCurrentTransaction(result);
382
+ return true;
383
+ }
384
+ else {
385
+ return false;
386
+ }
387
+ });
388
+ }
389
+ getCommissionCodes(languageCode) {
390
+ return __awaiter(this, void 0, void 0, function* () {
391
+ return yield this.connector.getCommissionCodes(languageCode);
392
+ });
393
+ }
394
+ getInOutCollection(languageCode) {
395
+ return __awaiter(this, void 0, void 0, function* () {
396
+ return yield this.connector.getInOutCollection(languageCode);
397
+ });
398
+ }
399
+ getTransactionArticleWarehouses(goodId) {
400
+ return __awaiter(this, void 0, void 0, function* () {
401
+ return this.connector.getTransactionArticleWarehouses(goodId);
402
+ });
403
+ }
404
+ getMarketingCodes() {
405
+ return __awaiter(this, void 0, void 0, function* () {
406
+ return yield this.connector.getMarketingCodes();
407
+ });
408
+ }
409
+ insertCustomer(relation) {
410
+ return __awaiter(this, void 0, void 0, function* () {
411
+ return yield this.connector.insertCustomer(relation);
412
+ });
413
+ }
414
+ updateCustomer(relation) {
415
+ return __awaiter(this, void 0, void 0, function* () {
416
+ return new Promise((resolve, reject) => {
417
+ this.connector.updateCustomer(relation).then((response) => __awaiter(this, void 0, void 0, function* () {
418
+ // this.currentTransaction.transactionInfo.relation = relation;
419
+ resolve(response);
420
+ }))
421
+ .catch((response) => {
422
+ resolve(response);
423
+ });
424
+ });
425
+ });
426
+ }
427
+ getDeliveryMethods() {
428
+ return __awaiter(this, void 0, void 0, function* () {
429
+ return yield this.connector.getDeliveryMethods();
430
+ });
431
+ }
432
+ getDeliveryOptions() {
433
+ return __awaiter(this, void 0, void 0, function* () {
434
+ return yield this.connector.getDeliveryOptions();
435
+ });
436
+ }
437
+ setTransactionDeliveryOptions() {
438
+ return __awaiter(this, void 0, void 0, function* () {
439
+ // const transactionDeliveryOptionsRequest: SetTransactionDeliveryOptionsRequest = this._getTransactionDeliveryOptions();
440
+ if (!this.deliveryOptions.transactionUuid) {
441
+ this.deliveryOptions.transactionUuid = this.currentTransaction.transactionInfo.uuid;
442
+ }
443
+ const response = yield this.connector.setTransactionDeliveryOptions(this.deliveryOptions)
444
+ .catch(() => {
445
+ return undefined;
446
+ });
447
+ return response && response.isSuccess;
448
+ });
449
+ }
450
+ getRelationListObjects(relationRequest) {
451
+ return __awaiter(this, void 0, void 0, function* () {
452
+ return yield this.connector.getRelationListObjects(relationRequest);
453
+ });
454
+ }
455
+ retrieveLineImage(line) {
456
+ return __awaiter(this, void 0, void 0, function* () {
457
+ return yield this.getArticleImageByArticleNumber(line.articleNumber);
458
+ });
459
+ }
460
+ getArticleImageByArticleNumber(articleNumber) {
461
+ return __awaiter(this, void 0, void 0, function* () {
462
+ if (this._imageCache.has(articleNumber)) {
463
+ return this._imageCache.get(articleNumber);
464
+ }
465
+ const goodId = yield this.connector.getGoodIdFromArticleNr(articleNumber).catch((error) => {
466
+ console.error(error);
467
+ return null;
468
+ });
469
+ const image = yield this.getArticleImageByGoodId(goodId);
470
+ this._imageCache.set(articleNumber, image);
471
+ return image;
472
+ });
473
+ }
474
+ getArticleImageByGoodId(goodId) {
475
+ return __awaiter(this, void 0, void 0, function* () {
476
+ if (!isNaN(goodId)) {
477
+ return this.connector.getSingleImage(goodId, 1, true, true).catch((error) => {
478
+ console.error(error);
479
+ return "";
480
+ });
481
+ }
482
+ else {
483
+ return "";
484
+ }
485
+ });
486
+ }
487
+ addArticle(articleNo, amount = 1, warehouseNo = 1, commissionCode = "2", isReturn = false, aboveLineNr = 0, belowLineNr = 0) {
488
+ return __awaiter(this, void 0, void 0, function* () {
489
+ yield this._checkAndCreateTransaction();
490
+ const response = yield this.connector.addTransactionLine(this.currentTransaction.transactionInfo.uuid, TransactionLineType.ArticleLine, articleNo, amount, warehouseNo, commissionCode, isReturn, aboveLineNr, belowLineNr);
491
+ if (yield this.handleLineOperationStatuses(response)) {
492
+ this._rememberCurrentTransaction(response);
493
+ }
494
+ return true;
495
+ });
496
+ }
497
+ // public async addArticleToTransaction(transactionUuid: string, articleNo: string, amount: number = 1, warehouseNo: number = 1, commissionCode: string = "2", isReturn: boolean = false, aboveLineNr: number = 0, belowLineNr: number = 0): Promise<LineOperationResponse> {
498
+ // await this._checkAndCreateTransaction();
499
+ // return new Promise<LineOperationResponse>((resolve, reject) => {
500
+ // this.connector.addTransactionLine(transactionUuid, TransactionLineType.ArticleLine, articleNo, amount, warehouseNo, commissionCode, isReturn, aboveLineNr, belowLineNr)
501
+ // .then(async( response: LineOperationResponse) => {
502
+ // resolve(response);
503
+ // }, (error) => {
504
+ // this._prompt.showError(error);
505
+ // reject(error);
506
+ // })
507
+ // .catch((reason: ValidationResult) => {
508
+ // this._prompt.showError(reason.getFullErrorString());
509
+ // resolve(null);
510
+ // });
511
+ // });
512
+ // }
513
+ addTransactionLine(lineType, articleNo, amount, warehouseNo, commissionCode, isReturn, aboveLineNr, belowLineNr, remember = true) {
514
+ return __awaiter(this, void 0, void 0, function* () {
515
+ yield this._checkAndCreateTransaction();
516
+ return new Promise((resolve, reject) => {
517
+ this.connector.addTransactionLine(this.currentTransaction.transactionInfo.uuid, lineType, articleNo, amount, warehouseNo, commissionCode, isReturn, aboveLineNr, belowLineNr)
518
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
519
+ this._rememberCurrentTransaction(response);
520
+ resolve(response);
521
+ }), (error) => {
522
+ reject(error);
523
+ })
524
+ .catch((reason) => {
525
+ resolve(null);
526
+ });
527
+ });
528
+ });
529
+ }
530
+ addTextLine(showOnDocuments, text, amount, articleBound, refArticleLineNr, aboveLineNr, belowLineNr, remember = true) {
531
+ return __awaiter(this, void 0, void 0, function* () {
532
+ yield this._checkAndCreateTransaction();
533
+ return new Promise((resolve, reject) => {
534
+ this.connector.addTextLineToTransaction(this.currentTransaction.transactionInfo.uuid, showOnDocuments, text, amount, articleBound, refArticleLineNr, aboveLineNr, belowLineNr)
535
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
536
+ this._rememberCurrentTransaction(response);
537
+ resolve(response);
538
+ }), (error) => {
539
+ reject(error);
540
+ })
541
+ .catch((reason) => {
542
+ resolve(null);
543
+ });
544
+ });
545
+ });
546
+ }
547
+ addTextLineToTransaction(transactionUuid, showOnDocuments, text, amount, articleBound, refArticleLineNr, aboveLineNr, belowLineNr) {
548
+ return __awaiter(this, void 0, void 0, function* () {
549
+ yield this._checkAndCreateTransaction();
550
+ return new Promise((resolve, reject) => {
551
+ this.connector.addTextLineToTransaction(transactionUuid, showOnDocuments, text, amount, articleBound, refArticleLineNr, aboveLineNr, belowLineNr)
552
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
553
+ resolve(response);
554
+ }), (error) => {
555
+ reject(error);
556
+ })
557
+ .catch((reason) => {
558
+ resolve(null);
559
+ });
560
+ });
561
+ });
562
+ }
563
+ changeLineSequence(lineUuid, aboveLineNr, belowLineNr, remember = true) {
564
+ return new Promise((resolve, reject) => {
565
+ this.connector.changeLineSequence(this.currentTransaction.transactionInfo.uuid, lineUuid, aboveLineNr, belowLineNr)
566
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
567
+ this._rememberCurrentTransaction(response);
568
+ resolve(response);
569
+ }), (error) => {
570
+ reject(error);
571
+ })
572
+ .catch((reason) => {
573
+ resolve(null);
574
+ });
575
+ });
576
+ }
577
+ deleteTransactionLine(transactionUuid, TransactionLineUuid, remember = true) {
578
+ return __awaiter(this, void 0, void 0, function* () {
579
+ return new Promise((resolve, reject) => {
580
+ this.connector.deleteTransactionLine(transactionUuid, TransactionLineUuid)
581
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
582
+ this._rememberCurrentTransaction(response);
583
+ if (response.isSuccess) {
584
+ resolve(response);
585
+ }
586
+ else {
587
+ reject(response);
588
+ }
589
+ }))
590
+ .catch((reason) => {
591
+ resolve(null);
592
+ });
593
+ });
594
+ });
595
+ }
596
+ changeTransactionLineQuantity(lineUuid, newQuantity, remember = true) {
597
+ return __awaiter(this, void 0, void 0, function* () {
598
+ return new Promise((resolve) => {
599
+ this.connector.changeTransactionLineQuantity(this.currentTransaction.transactionInfo.uuid, lineUuid, newQuantity)
600
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
601
+ if (response.isSuccess) {
602
+ this._rememberCurrentTransaction(response);
603
+ }
604
+ resolve(response);
605
+ })).catch((reason) => {
606
+ resolve(null);
607
+ });
608
+ });
609
+ });
610
+ }
611
+ setRelationByUser(username, password) {
612
+ return __awaiter(this, void 0, void 0, function* () {
613
+ return new Promise((resolve) => {
614
+ this.connector.setRelationByUser(this.currentTransaction.transactionInfo.uuid, username, password)
615
+ .then((isSuccess) => __awaiter(this, void 0, void 0, function* () {
616
+ resolve(isSuccess);
617
+ })).catch((reason) => {
618
+ resolve(false);
619
+ });
620
+ });
621
+ });
622
+ }
623
+ getCustomerFullObjectByRelationId(relationId) {
624
+ return __awaiter(this, void 0, void 0, function* () {
625
+ const relationNr = yield this.connector.getRelationNumber(relationId);
626
+ if (relationNr) {
627
+ return yield this.connector.getCustomerFullObject(Number(relationNr));
628
+ }
629
+ return NULL_CUSTOMER_FULL_OBJECT;
630
+ });
631
+ }
632
+ // public async setRelationByUser(username: string, password: string): Promise<boolean> {
633
+ // const response: boolean = await this.connector.setRelationByUser(this.currentTransaction.uuid, username, password);
634
+ // return response;
635
+ // }
636
+ getTextTypes(languageCode) {
637
+ return __awaiter(this, void 0, void 0, function* () {
638
+ return yield this.connector.getTextTypes(languageCode);
639
+ });
640
+ }
641
+ getStandardTexts(languageCode) {
642
+ return __awaiter(this, void 0, void 0, function* () {
643
+ return yield this.connector.getStandardTexts(languageCode);
644
+ });
645
+ }
646
+ getFirstAddress(relation) {
647
+ if (!relation || !relation.addresses.length) {
648
+ return;
649
+ }
650
+ return relation.getFirstAvailableAddress([
651
+ AddressType.DeliveryAddress,
652
+ AddressType.BillingAddress,
653
+ AddressType.VisitingAddress,
654
+ AddressType.MailingAddress,
655
+ AddressType.NursingAddress
656
+ ]);
657
+ }
658
+ // private _cleanRelationBeforeSave(): void {
659
+ // ArrayUtils.RemoveElementsByFilter(this.currentTransaction.transactionInfo.relation.contactOptions, ((item: ContactOption) => {
660
+ // return isNill(item.value);
661
+ // }));
662
+ // }
663
+ _checkAndCreateTransaction() {
664
+ return __awaiter(this, void 0, void 0, function* () {
665
+ if (!this.currentTransaction || !this.currentTransaction.transactionInfo || !this.currentTransaction.transactionInfo.transactionNr) {
666
+ if (!(yield this.createTransaction())) {
667
+ throwError("Failed to create transaction");
668
+ }
669
+ }
670
+ });
671
+ }
672
+ }
673
+ TransactionService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TransactionService_Factory() { return new TransactionService(i0.ɵɵinject(i1.DialogService), i0.ɵɵinject(i2.OptionsService), i0.ɵɵinject(i3.IOneConnectorAdapterService)); }, token: TransactionService, providedIn: "root" });
674
+ TransactionService.decorators = [
675
+ { type: Injectable, args: [{
676
+ providedIn: "root"
677
+ },] }
678
+ ];
679
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RyYW5zYWN0aW9uL3NyYy9saWIvc2VydmljZS90cmFuc2FjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBRW5HLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUcxRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0RBQXdELENBQUM7QUFPcEYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0VBQWdFLENBQUM7QUFPbkcsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sOERBQThELENBQUM7QUFHL0YsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVoQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdURBQXVELENBQUM7QUFFbEYsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7Ozs7O0FBUzlELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxvQkFBb0I7SUFINUQ7O1FBS1UsZ0JBQVcsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztLQTBvQnREO0lBeG9CQyxxREFBcUQ7SUFDckQsK0JBQStCO0lBQy9CLElBQUk7SUFDSixFQUFFO0lBQ0YsMERBQTBEO0lBQzFELGdDQUFnQztJQUNoQyxnR0FBZ0c7SUFDaEcsSUFBSTtJQUNKLEVBQUU7SUFDRixzREFBc0Q7SUFDdEQsaUNBQWlDO0lBQ2pDLElBQUk7SUFDSixFQUFFO0lBQ0YsaURBQWlEO0lBQ2pELGdDQUFnQztJQUNoQyxJQUFJO0lBQ0osRUFBRTtJQUNGLGtEQUFrRDtJQUNsRCxrQ0FBa0M7SUFDbEMsSUFBSTtJQUNKLEVBQUU7SUFDRixxREFBcUQ7SUFDckQscUNBQXFDO0lBQ3JDLElBQUk7SUFDSixFQUFFO0lBQ0YsMkVBQTJFO0lBQzNFLGlEQUFpRDtJQUNqRCxJQUFJO0lBQ0osRUFBRTtJQUNGLHFFQUFxRTtJQUNyRSwrQ0FBK0M7SUFDL0MsSUFBSTtJQUNKLEVBQUU7SUFDRixzRUFBc0U7SUFDdEUsOENBQThDO0lBQzlDLElBQUk7SUFDSixFQUFFO0lBQ0YsNkVBQTZFO0lBQzdFLHlJQUF5STtJQUN6SSxxRkFBcUY7SUFDckYsbUJBQW1CO0lBQ25CLElBQUk7SUFDSixFQUFFO0lBQ0Ysb0NBQW9DO0lBRXBDLHFEQUFxRDtJQUNyRCxxRUFBcUU7SUFDckUsd0VBQXdFO0lBQ3hFLHdFQUF3RTtJQUN4RSx3RkFBd0Y7SUFDeEYscUVBQXFFO0lBRTlELDBCQUEwQixDQUFDLHFCQUE0QztRQUM1RSxNQUFNLE1BQU0sR0FBd0IscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixLQUFLLGlCQUFpQixDQUFDLElBQUk7ZUFDbkgsSUFBSSxDQUFDLGlCQUFpQixLQUFLLGlCQUFpQixDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDaEYsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVZLDBCQUEwQixDQUFDLElBQVksRUFBRSxRQUFnQixFQUFFLEtBQWE7O1lBQ25GLE1BQU0sUUFBUSxHQUFzQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUM7aUJBQ3ZILEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNmLG9DQUFvQztnQkFDcEMsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztZQUNMLElBQUksUUFBUSxFQUFFO2dCQUNaLE1BQU0sT0FBTyxHQUFZLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxRSxJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLE9BQU8sT0FBTyxDQUFDO2FBQ2hCO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0tBQUE7SUFFWSw4QkFBOEIsQ0FBQyxJQUFZLEVBQUUsUUFBZ0IsRUFBRSxTQUFpQjs7WUFDM0YsTUFBTSxRQUFRLEdBQXNDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQztpQkFDL0gsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2Ysb0NBQW9DO2dCQUNwQyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osTUFBTSxPQUFPLEdBQVksTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDM0MsT0FBTyxPQUFPLENBQUM7YUFDaEI7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7S0FBQTtJQUVZLDZCQUE2QixDQUFDLElBQVksRUFBRSxRQUFnQixFQUFFLFFBQWdCOztZQUN6RixNQUFNLFFBQVEsR0FBc0MsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLDZCQUE2QixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDO2lCQUM3SCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixvQ0FBb0M7Z0JBQ3BDLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFDTCxJQUFJLFFBQVEsRUFBRTtnQkFDWixNQUFNLE9BQU8sR0FBWSxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQyxPQUFPLE9BQU8sQ0FBQzthQUNoQjtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztLQUFBO0lBRVksaUNBQWlDLENBQUMsSUFBWSxFQUFFLFFBQWdCLEVBQUUsSUFBVTs7WUFDdkYsTUFBTSxRQUFRLEdBQXNDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQztpQkFDN0gsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2Ysb0NBQW9DO2dCQUNwQyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osTUFBTSxPQUFPLEdBQVksTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDM0MsT0FBTyxPQUFPLENBQUM7YUFDaEI7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7S0FBQTtJQUVZLDhCQUE4QixDQUFDLElBQVksRUFBRSxRQUFnQixFQUFFLFNBQWlCOztZQUMzRixNQUFNLFFBQVEsR0FBc0MsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDO2lCQUMvSCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixvQ0FBb0M7Z0JBQ3BDLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFDTCxJQUFJLFFBQVEsRUFBRTtnQkFDWixNQUFNLE9BQU8sR0FBWSxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQyxPQUFPLE9BQU8sQ0FBQzthQUNoQjtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztLQUFBO0lBRVksd0JBQXdCLENBQUMsSUFBWSxFQUFFLFFBQWdCLEVBQUUsRUFBVTs7WUFDOUUsTUFBTSxRQUFRLEdBQXNDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQztpQkFDbEgsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2Ysb0NBQW9DO2dCQUNwQyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osTUFBTSxPQUFPLEdBQVksTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDM0MsT0FBTyxPQUFPLENBQUM7YUFDaEI7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7S0FBQTtJQUVZLG1DQUFtQyxDQUFDLElBQVksRUFBRSxRQUFnQixFQUFFLElBQVk7O1lBQzNGLE1BQU0sUUFBUSxHQUFzQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsbUNBQW1DLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUM7aUJBQy9ILEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNmLG9DQUFvQztnQkFDcEMsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztZQUNMLElBQUksUUFBUSxFQUFFO2dCQUNaLE1BQU0sT0FBTyxHQUFZLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxRSxJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLE9BQU8sT0FBTyxDQUFDO2FBQ2hCO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0tBQUE7SUFFWSw4QkFBOEIsQ0FBQyxJQUFZLEVBQUUsUUFBZ0IsRUFBRSxlQUF1Qjs7WUFDakcsTUFBTSxRQUFRLEdBQXNDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLGVBQWUsQ0FBQztpQkFDckksS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2Ysb0NBQW9DO2dCQUNwQyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osTUFBTSxPQUFPLEdBQVksTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDM0MsT0FBTyxPQUFPLENBQUM7YUFDaEI7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7S0FBQTtJQUVZLG1DQUFtQyxDQUFDLElBQVksRUFBRSxRQUFnQixFQUFFLE1BQWM7O1lBQzdGLE1BQU0sUUFBUSxHQUFzQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsbUNBQW1DLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7aUJBQ2pJLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNmLG9DQUFvQztnQkFDcEMsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztZQUNMLElBQUksUUFBUSxFQUFFO2dCQUNaLE1BQU0sT0FBTyxHQUFZLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxRSxJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLE9BQU8sT0FBTyxDQUFDO2FBQ2hCO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0tBQUE7SUFFWSw2QkFBNkIsQ0FBQyxJQUFZLEVBQUUsUUFBZ0IsRUFBRSxJQUFrQixFQUFFLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxFQUFFLE9BQWUsRUFBRTs7WUFDckosTUFBTSxRQUFRLEdBQXNDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztpQkFDckosS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2Ysb0NBQW9DO2dCQUNwQyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osTUFBTSxPQUFPLEdBQVksTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDM0MsT0FBTyxPQUFPLENBQUM7YUFDaEI7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7S0FBQTtJQUVZLG9CQUFvQixDQUFDLE1BQWM7O1lBQzlDLE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNELENBQUM7S0FBQTtJQUVNLGtCQUFrQixDQUFDLEVBQVU7UUFDbEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFWSxzQkFBc0IsQ0FBQyxHQUFXOztZQUM3QyxPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxRCxDQUFDO0tBQUE7SUFFWSxVQUFVLENBQUMsV0FBbUI7O1lBQ3pDLE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0RCxDQUFDO0tBQUE7SUFFWSxnQkFBZ0I7O1lBQzNCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztLQUFBO0lBRVksaUJBQWlCLENBQUMsVUFBa0I7O1lBQy9DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxDQUFDO0tBQUE7SUFFWSxhQUFhOztZQUN4QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEMsQ0FBQztLQUFBO0lBRVksV0FBVzs7WUFDdEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3JDLENBQUM7S0FBQTtJQUVZLFlBQVk7O1lBQ3ZCLG1DQUFtQztZQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDcEU7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNwRTtZQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RSxDQUFDO0tBQUE7SUFFWSxnQkFBZ0I7O1lBQzNCLE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4RSxDQUFDO0tBQUE7SUFFWSwwQkFBMEI7O1lBQ3JDLE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDM0QsQ0FBQztLQUFBO0lBRU0scUNBQXFDLENBQUMsZUFBdUI7UUFDbEUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLHFDQUFxQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFWSxpQkFBaUI7O1lBQzVCLE9BQU8sSUFBSSxPQUFPLENBQVUsQ0FBQyxPQUFpQixFQUFFLE1BQWdCLEVBQUUsRUFBRTtnQkFDbEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQWlDLEVBQUUsRUFBRTtvQkFDM0csSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNULE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBd0IsRUFBRSxFQUFFO29CQUNwQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFWSxjQUFjLENBQUMsYUFBcUI7O1lBQy9DLE9BQU8sTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN2RixDQUFDO0tBQUE7SUFFTSx1QkFBdUIsQ0FBQyxJQUFxQixFQUFFLGFBQXFCO1FBQ3pFLE9BQU8sSUFBSSxPQUFPLENBQVUsQ0FBQyxPQUFpQixFQUFFLE1BQWdCLEVBQUUsRUFBRTtZQUNsRSxJQUFJLENBQUMsU0FBUyxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxhQUFhLENBQUM7aUJBQzFELElBQUksQ0FBQyxDQUFPLFFBQWlDLEVBQUUsRUFBRTtnQkFDaEQsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFO29CQUN0QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN2QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2Y7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNmO1lBQ0gsQ0FBQyxDQUFBLENBQUM7aUJBQ0QsS0FBSyxDQUFDLENBQUMsTUFBd0IsRUFBRSxFQUFFO2dCQUNsQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHTSxrQkFBa0IsQ0FBQyxhQUFxQjtRQUM3QyxPQUFPLElBQUksT0FBTyxDQUFVLENBQUMsT0FBaUIsRUFBRSxNQUFnQixFQUFFLEVBQUU7WUFDbEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7aUJBQzdDLElBQUksQ0FBQyxDQUFDLFFBQWlDLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFO29CQUN0QixJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzNDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDZjtxQkFBTTtvQkFDTCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ2Y7WUFDSCxDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLENBQUMsTUFBd0IsRUFBRSxFQUFFO2dCQUNsQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxNQUFNO1FBQ1gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFWSxlQUFlLENBQUMsUUFBaUIsS0FBSzs7WUFDakQsTUFBTSxRQUFRLEdBQTRCLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3SCxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM1QztZQUNELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7S0FBQTtJQUVZLHFCQUFxQixDQUFDLGVBQXVCOztZQUN4RCxPQUFPLElBQUksT0FBTyxDQUFVLENBQUMsT0FBaUIsRUFBRSxNQUFnQixFQUFFLEVBQUU7Z0JBQ2xFLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQztxQkFDNUMsSUFBSSxDQUFDLENBQU8sUUFBaUMsRUFBRSxFQUFFO29CQUNoRCxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUU7d0JBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDZjt5QkFBTTt3QkFDTCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ2Y7Z0JBQ0gsQ0FBQyxDQUFBLENBQUM7cUJBQ0QsS0FBSyxDQUFDLENBQUMsTUFBd0IsRUFBRSxFQUFFO29CQUNsQyxJQUFJLE1BQU0sRUFBRTt3QkFDVixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO3FCQUMzRDtvQkFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFWSx3QkFBd0IsQ0FBQyxVQUFrQjs7WUFDdEQsTUFBTSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUN4QyxNQUFNLE1BQU0sR0FBNEIsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ2hKLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN6QyxPQUFPLElBQUksQ0FBQzthQUNiO2lCQUFNO2dCQUNMLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7UUFDSCxDQUFDO0tBQUE7SUFFWSxrQkFBa0IsQ0FBQyxZQUFvQjs7WUFDbEQsT0FBTyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0QsQ0FBQztLQUFBO0lBRVksa0JBQWtCLENBQUMsWUFBb0I7O1lBQ2xELE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9ELENBQUM7S0FBQTtJQUVZLCtCQUErQixDQUFDLE1BQWM7O1lBQ3pELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQywrQkFBK0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRSxDQUFDO0tBQUE7SUFFWSxpQkFBaUI7O1lBQzVCLE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDbEQsQ0FBQztLQUFBO0lBRVksY0FBYyxDQUFDLFFBQTRCOztZQUN0RCxPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkQsQ0FBQztLQUFBO0lBRVksY0FBYyxDQUFDLFFBQTRCOztZQUN0RCxPQUFPLElBQUksT0FBTyxDQUFxQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQU8sUUFBNEIsRUFBRSxFQUFFO29CQUNsRiwrREFBK0Q7b0JBQy9ELE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEIsQ0FBQyxDQUFBLENBQUM7cUJBQ0QsS0FBSyxDQUFDLENBQUMsUUFBNEIsRUFBRSxFQUFFO29CQUN0QyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFWSxrQkFBa0I7O1lBQzdCLE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDbkQsQ0FBQztLQUFBO0lBRVksa0JBQWtCOztZQUM3QixPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ25ELENBQUM7S0FBQTtJQUVZLDZCQUE2Qjs7WUFDeEMseUhBQXlIO1lBQ3pILElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRTtnQkFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7YUFDckY7WUFDRCxNQUFNLFFBQVEsR0FBNEIsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7aUJBQy9HLEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUM7WUFDTCxPQUFPLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQ3hDLENBQUM7S0FBQTtJQUVZLHNCQUFzQixDQUFDLGVBQWdDOztZQUNsRSxPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN0RSxDQUFDO0tBQUE7SUFFWSxpQkFBaUIsQ0FBQyxJQUF5Qjs7WUFDdEQsT0FBTyxNQUFNLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkUsQ0FBQztLQUFBO0lBRVksOEJBQThCLENBQUMsYUFBcUI7O1lBQy9ELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDNUM7WUFDRCxNQUFNLE1BQU0sR0FBVyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2hHLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDM0MsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0tBQUE7SUFFWSx1QkFBdUIsQ0FBQyxNQUFjOztZQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUMxRSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNyQixPQUFPLEVBQUUsQ0FBQztnQkFDWixDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLE9BQU8sRUFBRSxDQUFDO2FBQ1g7UUFDSCxDQUFDO0tBQUE7SUFFWSxVQUFVLENBQ3JCLFNBQWlCLEVBQ2pCLFNBQWlCLENBQUMsRUFDbEIsY0FBc0IsQ0FBQyxFQUN2QixpQkFBeUIsR0FBRyxFQUM1QixXQUFvQixLQUFLLEVBQ3pCLGNBQXNCLENBQUMsRUFDdkIsY0FBc0IsQ0FBQzs7WUFFdkIsTUFBTSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUN4QyxNQUFNLFFBQVEsR0FBNEIsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUMvRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDckssSUFBSSxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDcEQsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzVDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0tBQUE7SUFFRCw2UUFBNlE7SUFDN1EsNkNBQTZDO0lBQzdDLHFFQUFxRTtJQUNyRSw4S0FBOEs7SUFDOUssMkRBQTJEO0lBQzNELDZCQUE2QjtJQUM3Qix3QkFBd0I7SUFDeEIseUNBQXlDO0lBQ3pDLHlCQUF5QjtJQUN6QixXQUFXO0lBQ1gsK0NBQStDO0lBQy9DLCtEQUErRDtJQUMvRCx5QkFBeUI7SUFDekIsWUFBWTtJQUNaLFFBQVE7SUFDUixJQUFJO0lBRVMsa0JBQWtCLENBQUMsUUFBNkIsRUFDN0IsU0FBaUIsRUFDakIsTUFBYyxFQUNkLFdBQW9CLEVBQ3BCLGNBQXVCLEVBQ3ZCLFFBQWtCLEVBQ2xCLFdBQW9CLEVBQ3BCLFdBQW9CLEVBQ3BCLFdBQW9CLElBQUk7O1lBQ3RELE1BQU0sSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDeEMsT0FBTyxJQUFJLE9BQU8sQ0FBMEIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQzlELElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQztxQkFDMUssSUFBSSxDQUFDLENBQU8sUUFBaUMsRUFBRSxFQUFFO29CQUNoRCxJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEIsQ0FBQyxDQUFBLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDVCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xCLENBQUMsQ0FBQztxQkFDRCxLQUFLLENBQUMsQ0FBQyxNQUF3QixFQUFFLEVBQUU7b0JBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVZLFdBQVcsQ0FDVixlQUF1QixFQUN2QixJQUFZLEVBQ1osTUFBYyxFQUNkLFlBQXFCLEVBQ3JCLGdCQUF3QixFQUN4QixXQUFvQixFQUNwQixXQUFvQixFQUNwQixXQUFvQixJQUFJOztZQUNwQyxNQUFNLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxPQUFPLENBQTBCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUM5RCxJQUFJLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDO3FCQUMzSyxJQUFJLENBQUMsQ0FBTyxRQUFpQyxFQUFFLEVBQUU7b0JBQ2hELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDM0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwQixDQUFDLENBQUEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNYLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEIsQ0FBQyxDQUFDO3FCQUNELEtBQUssQ0FBQyxDQUFDLE1BQXdCLEVBQUUsRUFBRTtvQkFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQixDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRVksd0JBQXdCLENBQ25DLGVBQXVCLEVBQ3ZCLGVBQXVCLEVBQ3ZCLElBQVksRUFDWixNQUFjLEVBQ2QsWUFBcUIsRUFDckIsZ0JBQXdCLEVBQ3hCLFdBQW9CLEVBQ3BCLFdBQW9COztZQUNwQixNQUFNLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxPQUFPLENBQTBCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUM5RCxJQUFJLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQztxQkFDOUksSUFBSSxDQUFDLENBQU8sUUFBaUMsRUFBRSxFQUFFO29CQUNoRCxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ1gsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoQixDQUFDLENBQUM7cUJBQ0QsS0FBSyxDQUFDLENBQUMsTUFBd0IsRUFBRSxFQUFFO29CQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFTSxrQkFBa0IsQ0FDdkIsUUFBZ0IsRUFDaEIsV0FBb0IsRUFDcEIsV0FBb0IsRUFDcEIsV0FBb0IsSUFBSTtRQUN4QixPQUFPLElBQUksT0FBTyxDQUEwQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUM5RCxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDO2lCQUNoSCxJQUFJLENBQUMsQ0FBTyxRQUFpQyxFQUFFLEVBQUU7Z0JBQ2hELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDM0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BCLENBQUMsQ0FBQSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ1gsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hCLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsQ0FBQyxNQUF3QixFQUFFLEVBQUU7Z0JBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVZLHFCQUFxQixDQUFDLGVBQXVCLEVBQUUsbUJBQTJCLEVBQUUsV0FBb0IsSUFBSTs7WUFDL0csT0FBTyxJQUFJLE9BQU8sQ0FBMEIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQzlELElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsZUFBZSxFQUFFLG1CQUFtQixDQUFDO3FCQUN2RSxJQUFJLENBQUMsQ0FBTyxRQUFpQyxFQUFFLEVBQUU7b0JBQ2hELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDM0MsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFO3dCQUN0QixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQ25CO3lCQUFNO3dCQUNMLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDbEI7Z0JBQ0gsQ0FBQyxDQUFBLENBQUM7cUJBQ0QsS0FBSyxDQUFDLENBQUMsTUFBd0IsRUFBRSxFQUFFO29CQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFWSw2QkFBNkIsQ0FBQyxRQUFnQixFQUFFLFdBQW1CLEVBQUUsV0FBb0IsSUFBSTs7WUFDeEcsT0FBTyxJQUFJLE9BQU8sQ0FBMEIsQ0FBQyxPQUFpQixFQUFFLEVBQUU7Z0JBQ2hFLElBQUksQ0FBQyxTQUFTLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQztxQkFDOUcsSUFBSSxDQUFDLENBQU8sUUFBaUMsRUFBRSxFQUFFO29CQUNoRCxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUU7d0JBQ3RCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDNUM7b0JBQ0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwQixDQUFDLENBQUEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQXdCLEVBQUUsRUFBRTtvQkFDcEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRVksaUJBQWlCLENBQUMsUUFBZ0IsRUFBRSxRQUFnQjs7WUFDL0QsT0FBTyxJQUFJLE9BQU8sQ0FBVSxDQUFDLE9BQWlCLEVBQUUsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDO3FCQUMvRixJQUFJLENBQUMsQ0FBTyxTQUFrQixFQUFFLEVBQUU7b0JBQ2pDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDckIsQ0FBQyxDQUFBLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUF3QixFQUFFLEVBQUU7b0JBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVZLGlDQUFpQyxDQUFDLFVBQWtCOztZQUMvRCxNQUFNLFVBQVUsR0FBVyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUUsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsT0FBTyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7YUFDdkU7WUFDRCxPQUFPLHlCQUF5QixDQUFDO1FBQ25DLENBQUM7S0FBQTtJQUVELHlGQUF5RjtJQUN6Rix3SEFBd0g7SUFDeEgscUJBQXFCO0lBQ3JCLElBQUk7SUFFUyxZQUFZLENBQUMsWUFBb0I7O1lBQzVDLE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RCxDQUFDO0tBQUE7SUFFWSxnQkFBZ0IsQ0FBQyxZQUFvQjs7WUFDaEQsT0FBTyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0QsQ0FBQztLQUFBO0lBRU0sZUFBZSxDQUFDLFFBQXlCO1FBQzlDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUMzQyxPQUFPO1NBQ1I7UUFFRCxPQUFPLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQztZQUN2QyxXQUFXLENBQUMsZUFBZTtZQUMzQixXQUFXLENBQUMsY0FBYztZQUMxQixXQUFXLENBQUMsZUFBZTtZQUMzQixXQUFXLENBQUMsY0FBYztZQUMxQixXQUFXLENBQUMsY0FBYztTQUMzQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsNkNBQTZDO0lBQzdDLG1JQUFtSTtJQUNuSSxpQ0FBaUM7SUFDakMsU0FBUztJQUNULElBQUk7SUFFVSwwQkFBMEI7O1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUU7Z0JBQ2xJLElBQUksQ0FBQyxDQUFBLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUEsRUFBRTtvQkFDbkMsVUFBVSxDQUFDLDhCQUE4QixDQUFDLENBQUM7aUJBQzVDO2FBQ0Y7UUFDSCxDQUFDO0tBQUE7Ozs7WUE3b0JGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7Q3VzdG9tZXJGdWxsT2JqZWN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2N1c3RvbWVyLWZ1bGwtb2JqZWN0LmJvXCI7XG5pbXBvcnQge05VTExfQ1VTVE9NRVJfRlVMTF9PQkpFQ1R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvbnVsLXJlbGF0aW9uLW9iamVjdFwiO1xuaW1wb3J0IHtUcmFuc2FjdGlvbkluZm9SZXNwb25zZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1pbmZvLXJlc3BvbnNlLmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uS2luZH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3RyYW5zYWN0aW9uLWtpbmQuZW51bVwiO1xuaW1wb3J0IHtNYXJrZXRpbmd9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvbWFya2V0aW5nLmJvXCI7XG5pbXBvcnQge1JlbGF0aW9uUHJpdmFjeVNldHRpbmd9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tcHJpdmFjeS1zZXR0aW5nLmJvXCI7XG5pbXBvcnQge1NlcXVlbmNlTmFtZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3NlcXVlbmNlLW5hbWUuZW51bVwiO1xuaW1wb3J0IHtEZWxpdmVyeU1ldGhvZH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9kZWxpdmVyeS1tZXRob2QuYm9cIjtcbmltcG9ydCB7RGVsaXZlcnlPcHRpb259IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZGVsaXZlcnktb3B0aW9uLmJvXCI7XG5pbXBvcnQge1JlbGF0aW9uTGlzdE9iamVjdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1saXN0LW9iamVjdC5ib1wiO1xuaW1wb3J0IHtSZWxhdGlvblJlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tcmVxdWVzdFwiO1xuaW1wb3J0IHtDb3VudHJ5fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NvdW50cnkuYm9cIjtcbmltcG9ydCB7VmFsaWRhdGlvblJlc3VsdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC92YWxpZGF0aW9uLXJlc3VsdFwiO1xuaW1wb3J0IHtUcmFuc2FjdGlvbkxpbmVUeXBlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vdHJhbnNhY3Rpb24tbGluZS10eXBlLmVudW1cIjtcbmltcG9ydCB7Q29Eb21haW5WYWx1ZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jby1kb21haW4tdmFsdWUuYm9cIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWFydGljbGUtd2FyZWhvdXNlLmJvXCI7XG5pbXBvcnQge0FydGljbGVGdWxsT2JqZWN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZnVsbC1vYmplY3RcIjtcbmltcG9ydCB7TGluZU9wZXJhdGlvblN0YXR1c30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9saW5lLW9wZXJhdGlvbi1zdGF0dXMuYm9cIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25MaW5lSW5mb30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1saW5lLWluZm8uYm9cIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25SZXNwb25zZUJhc2V9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tcmVzcG9uc2UtYmFzZS5ib1wiO1xuaW1wb3J0IHtQZW5kaW5nUmVhc29uVHlwZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3BlbmRpbmctcmVhc29uLXR5cGUuZW51bVwiO1xuaW1wb3J0IHtTdGFuZGFyZFRleHR9IGZyb20gXCIuLi9tb2RlbC9zdGFuZGFyZC10ZXh0XCI7XG5pbXBvcnQge0RhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2RhdGEtc2VydmljZS1yZXNwb25zZS1kYXRhXCI7XG5pbXBvcnQge3Rocm93RXJyb3J9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge0FkZHJlc3N9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvYWRkcmVzcy5ib1wiO1xuaW1wb3J0IHtBZGRyZXNzVHlwZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL2FkZHJlc3MtdHlwZS5lbnVtXCI7XG5pbXBvcnQge1JlbGF0aW9uQW55VHlwZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1hbnktdHlwZVwiO1xuaW1wb3J0IHtQZW5kaW5nUmVhc29uU2VydmljZX0gZnJvbSBcIi4vcGVuZGluZy1yZWFzb24uc2VydmljZVwiO1xuaW1wb3J0IHtDYXNoUmVnaXN0ZXJ9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY2FzaC1yZWdpc3RlclwiO1xuaW1wb3J0IHtQcmljZUxpc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpY2UtbGlzdFwiO1xuaW1wb3J0IHtWYXR9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdmF0XCI7XG5pbXBvcnQge0Rpc2NvdW50VHlwZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL2Rpc2NvdW50LXR5cGUuZW51bVwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uU2VydmljZSBleHRlbmRzIFBlbmRpbmdSZWFzb25TZXJ2aWNlIHtcblxuICBwcml2YXRlIF9pbWFnZUNhY2hlOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuXG4gIC8vIHB1YmxpYyBnZXQgY3VycmVudExpbmVzKCk6IFRyYW5zYWN0aW9uTGluZUluZm9bXSB7XG4gIC8vICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRMaW5lcztcbiAgLy8gfVxuICAvL1xuICAvLyBwdWJsaWMgc2V0IGN1cnJlbnRMaW5lcyh2YWx1ZTogVHJhbnNhY3Rpb25MaW5lSW5mb1tdKSB7XG4gIC8vICAgdGhpcy5fY3VycmVudExpbmVzID0gdmFsdWU7XG4gIC8vICAgdGhpcy5hcnRpY2xlQW1vdW50ID0gQXJyYXlVdGlscy5GaW5kQWxsKHRoaXMuX2N1cnJlbnRMaW5lcywgbGluZSA9PiBsaW5lLmlzQXJ0aWNsZSkubGVuZ3RoO1xuICAvLyB9XG4gIC8vXG4gIC8vIHB1YmxpYyBzZXQgY3VycmVudFRvdGFscyh2YWx1ZTogVHJhbnNhY3Rpb25Ub3RhbCkge1xuICAvLyAgIHRoaXMuX2N1cnJlbnRUb3RhbHMgPSB2YWx1ZTtcbiAgLy8gfVxuICAvL1xuICAvLyBwdWJsaWMgZ2V0IGN1cnJlbnRUb3RhbHMoKTogVHJhbnNhY3Rpb25Ub3RhbCB7XG4gIC8vICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRUb3RhbHM7XG4gIC8vIH1cbiAgLy9cbiAgLy8gcHVibGljIGdldCBjdXJyZW50UmVsYXRpb24oKTogUmVsYXRpb25BbnlUeXBlIHtcbiAgLy8gICByZXR1cm4gdGhpcy5fY3VycmVudFJlbGF0aW9uO1xuICAvLyB9XG4gIC8vXG4gIC8vIHB1YmxpYyBnZXQgY3VycmVudFRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uSW5mbyB7XG4gIC8vICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbjtcbiAgLy8gfVxuICAvL1xuICAvLyBwdWJsaWMgc2V0IGN1cnJlbnRMaW5lT3BlcmF0aW9uU3RhdHVzZXModmFsdWVzOiBMaW5lT3BlcmF0aW9uU3RhdHVzW10pIHtcbiAgLy8gICB0aGlzLl9jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1c2VzID0gdmFsdWVzO1xuICAvLyB9XG4gIC8vXG4gIC8vIHB1YmxpYyBnZXQgY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXNlcygpOiBMaW5lT3BlcmF0aW9uU3RhdHVzW10ge1xuICAvLyAgIHJldHVybiB0aGlzLl9jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1c2VzO1xuICAvLyB9XG4gIC8vXG4gIC8vIHB1YmxpYyBzZXQgY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXModmFsdWU6IExpbmVPcGVyYXRpb25TdGF0dXMpIHtcbiAgLy8gICB0aGlzLl9jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1cyA9IHZhbHVlO1xuICAvLyB9XG4gIC8vXG4gIC8vIHB1YmxpYyBnZXQgY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXMoKTogTGluZU9wZXJhdGlvblN0YXR1cyB8IHVuZGVmaW5lZCB7XG4gIC8vICAgY29uc3Qgc3RhdHVzOiBMaW5lT3BlcmF0aW9uU3RhdHVzID0gdGhpcy5jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1c2VzLmZpbmQobGluZSA9PiBsaW5lLnBlbmRpbmdSZWFzb25UeXBlICE9PSBQZW5kaW5nUmVhc29uVHlwZS5OT05FXG4gIC8vICAgICAmJiBsaW5lLnBlbmRpbmdSZWFzb25UeXBlICE9PSBQZW5kaW5nUmVhc29uVHlwZS5OT05fQ1JJVElDQUxfRElTQ09OVElOVUFUSU9OKTtcbiAgLy8gICByZXR1cm4gc3RhdHVzO1xuICAvLyB9XG4gIC8vXG4gIC8vIHB1YmxpYyBhcnRpY2xlQW1vdW50OiBudW1iZXIgPSAwO1xuXG4gIC8vIHByaXZhdGUgX2N1cnJlbnRMaW5lczogVHJhbnNhY3Rpb25MaW5lSW5mb1tdID0gW107XG4gIC8vIHByaXZhdGUgX2N1cnJlbnRUb3RhbHM6IFRyYW5zYWN0aW9uVG90YWwgPSBuZXcgVHJhbnNhY3Rpb25Ub3RhbCgpO1xuICAvLyBwcml2YXRlIF9jdXJyZW50UmVsYXRpb246IFJlbGF0aW9uQW55VHlwZTsgLy8gPSBOVUxMX1JFTEFUSU9OX09CSkVDVDtcbiAgLy8gcHJpdmF0ZSBfY3VycmVudFRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbkluZm8gPSBuZXcgVHJhbnNhY3Rpb25JbmZvKCk7XG4gIC8vIHByaXZhdGUgX2N1cnJlbnRMaW5lT3BlcmF0aW9uU3RhdHVzOiBMaW5lT3BlcmF0aW9uU3RhdHVzID0gbmV3IExpbmVPcGVyYXRpb25TdGF0dXMoKTtcbiAgLy8gcHJpdmF0ZSBfY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXNlczogTGluZU9wZXJhdGlvblN0YXR1c1tdID0gW107XG5cbiAgcHVibGljIHBlbmRpbmdMaW5lT3BlcmF0aW9uU3RhdHVzKGxpbmVPcGVyYXRpb25TdGF0dXNlczogTGluZU9wZXJhdGlvblN0YXR1c1tdKTogTGluZU9wZXJhdGlvblN0YXR1cyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3RhdHVzOiBMaW5lT3BlcmF0aW9uU3RhdHVzID0gbGluZU9wZXJhdGlvblN0YXR1c2VzLmZpbmQobGluZSA9PiBsaW5lLnBlbmRpbmdSZWFzb25UeXBlICE9PSBQZW5kaW5nUmVhc29uVHlwZS5OT05FXG4gICAgICAmJiBsaW5lLnBlbmRpbmdSZWFzb25UeXBlICE9PSBQZW5kaW5nUmVhc29uVHlwZS5OT05fQ1JJVElDQUxfRElTQ09OVElOVUFUSU9OKTtcbiAgICByZXR1cm4gc3RhdHVzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVByaWNlVHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgcHJpY2U6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVQcmljZSh1dWlkLCBsaW5lVXVpZCwgcHJpY2UpXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIC8vIHRvZG86IGRvIHNvbWV0aGluZyB3aXRoIHRoZSBlcnJvclxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVJlZmVyZW5jZVRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIHJlZmVyZW5jZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVJlZmVyZW5jZSh1dWlkLCBsaW5lVXVpZCwgcmVmZXJlbmNlKVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAvLyB0b2RvOiBkbyBzb21ldGhpbmcgd2l0aCB0aGUgZXJyb3JcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICBjb25zdCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVRdWFudGl0eVRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIHF1YW50aXR5OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lUXVhbnRpdHkodXVpZCwgbGluZVV1aWQsIHF1YW50aXR5KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAvLyB0b2RvOiBkbyBzb21ldGhpbmcgd2l0aCB0aGUgZXJyb3JcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICBjb25zdCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVEZWxpdmVyeURhdGVUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBkYXRlOiBEYXRlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZURlbGl2ZXJ5RGF0ZSh1dWlkLCBsaW5lVXVpZCwgZGF0ZSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgLy8gdG9kbzogZG8gc29tZXRoaW5nIHdpdGggdGhlIGVycm9yXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgY29uc3Qgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICAgIHRoaXMuX3JlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlUHJpY2VMaXN0VHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgcHJpY2VMaXN0OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lUHJpY2VMaXN0KHV1aWQsIGxpbmVVdWlkLCBwcmljZUxpc3QpXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIC8vIHRvZG86IGRvIHNvbWV0aGluZyB3aXRoIHRoZSBlcnJvclxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVZhdFRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGlkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lVmF0KHV1aWQsIGxpbmVVdWlkLCBpZClcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgLy8gdG9kbzogZG8gc29tZXRoaW5nIHdpdGggdGhlIGVycm9yXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgY29uc3Qgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICAgIHRoaXMuX3JlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlQ29tbWlzc2lvbkNvZGVUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBjb2RlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lQ29tbWlzc2lvbkNvZGUodXVpZCwgbGluZVV1aWQsIGNvZGUpXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIC8vIHRvZG86IGRvIHNvbWV0aGluZyB3aXRoIHRoZSBlcnJvclxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVdhcmVob3VzZVRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIHdhcmVob3VzZU51bWJlcjogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVdhcmVob3VzZSh1dWlkLCBsaW5lVXVpZCwgd2FyZWhvdXNlTnVtYmVyKVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAvLyB0b2RvOiBkbyBzb21ldGhpbmcgd2l0aCB0aGUgZXJyb3JcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICBjb25zdCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVEZWxpdmVyeU1ldGhvZFRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZURlbGl2ZXJ5TWV0aG9kKHV1aWQsIGxpbmVVdWlkLCBtZXRob2QpXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIC8vIHRvZG86IGRvIHNvbWV0aGluZyB3aXRoIHRoZSBlcnJvclxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZURpc2NvdW50VHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgdHlwZTogRGlzY291bnRUeXBlLCBkaXNjb3VudDogbnVtYmVyLCByZWFzb246IHN0cmluZyA9IFwiXCIsIGNvZGU6IHN0cmluZyA9IFwiXCIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lTGluZURpc2NvdW50KHV1aWQsIGxpbmVVdWlkLCB0eXBlLCBkaXNjb3VudCwgcmVhc29uLCBjb2RlKVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAvLyB0b2RvOiBkbyBzb21ldGhpbmcgd2l0aCB0aGUgZXJyb3JcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICBjb25zdCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBcnRpY2xlRnVsbE9iamVjdChnb29kSWQ6IG51bWJlcik6IFByb21pc2U8QXJ0aWNsZUZ1bGxPYmplY3Q+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0QXJ0aWNsZUZ1bGxPYmplY3QoZ29vZElkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREb2N1bWVudENvbnRlbnQoaWQ6IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldERvY3VtZW50Q29udGVudChpZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0R29vZElkRnJvbUFydGljbGVOcihza3U6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEdvb2RJZEZyb21BcnRpY2xlTnIoc2t1KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDb3VudHJ5KGNvdW50cnlDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvdW50cnk+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0Q291bnRyeShjb3VudHJ5Q29kZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q2FzaFJlZ2lzdGVycygpOiBQcm9taXNlPENhc2hSZWdpc3RlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldENhc2hSZWdpc3RlcnModW5kZWZpbmVkLCAxKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRSZWxhdGlvbk51bWJlcihyZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRSZWxhdGlvbk51bWJlcihyZWxhdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQcmljZUxpc3RzKCk6IFByb21pc2U8UHJpY2VMaXN0W10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0UHJpY2VMaXN0cygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFZhdExpc3RzKCk6IFByb21pc2U8VmF0W10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0VmF0TGlzdCgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNhdmVSZWxhdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyB0aGlzLl9jbGVhblJlbGF0aW9uQmVmb3JlU2F2ZSgpO1xuICAgIGlmICghdGhpcy5yZWxhdGlvbi5yZWxhdGlvbklkKSB7XG4gICAgICB0aGlzLnJlbGF0aW9uID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuaW5zZXJ0Q3VzdG9tZXIodGhpcy5yZWxhdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVsYXRpb24gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci51cGRhdGVDdXN0b21lcih0aGlzLnJlbGF0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYWRkUmVsYXRpb25Ub1RyYW5zYWN0aW9uKHRoaXMucmVsYXRpb24ucmVsYXRpb25JZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2VxdWVuY2VWYWx1ZSgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRTZXF1ZW5jZVZhbHVlKFNlcXVlbmNlTmFtZS5SZWxhdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRSZWxhdGlvblByaXZhY3lTZXR0aW5ncygpOiBQcm9taXNlPFJlbGF0aW9uUHJpdmFjeVNldHRpbmdbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRSZWxhdGlvblByaXZhY3lTZXR0aW5ncygpO1xuICB9XG5cbiAgcHVibGljIGdldEFydGljbGVCb3VuZFRleHRMaW5lc09mQXJ0aWNsZUxpbmUoYXJ0aWNsZUxpbmVVdWlkOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uTGluZUluZm9bXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRBcnRpY2xlQm91bmRUZXh0TGluZXNPZkFydGljbGVMaW5lKGFydGljbGVMaW5lVXVpZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlVHJhbnNhY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0b3IuY3JlYXRlVHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIFwiMVwiKS50aGVuKChyZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgcmVqZWN0KGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uTm86IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLm9wZW5FeGlzdGluZ1RyYW5zYWN0aW9uKFRyYW5zYWN0aW9uS2luZC5TYWxlc09yZGVyLCB0cmFuc2FjdGlvbk5vKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuRXhpc3RpbmdUcmFuc2FjdGlvbihraW5kOiBUcmFuc2FjdGlvbktpbmQsIHRyYW5zYWN0aW9uTnI6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uQnlOckFuZEtpbmQoa2luZCwgdHJhbnNhY3Rpb25OcilcbiAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25VcGRhdGVkLm5leHQocmVzcG9uc2UpO1xuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuXG4gIHB1YmxpYyBnZXRUcmFuc2FjdGlvbkJ5SWQodHJhbnNhY3Rpb25JZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25CeUlkKHRyYW5zYWN0aW9uSWQpXG4gICAgICAgIC50aGVuKChyZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uVXBkYXRlZC5uZXh0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdChmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJlamVjdChmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNvbW1pdCgpOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNvbW1pdCgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNhdmVUcmFuc2FjdGlvbihjbG9zZTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnNhdmVUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCk7XG4gICAgaWYgKHJlc3BvbnNlLmlzU3VjY2Vzcykge1xuICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2F2ZVRyYW5zYWN0aW9uQnlVdWlkKHRyYW5zYWN0aW9uVXVpZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0b3Iuc2F2ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uVXVpZClcbiAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25VcGRhdGVkLm5leHQocmVzcG9uc2UpO1xuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgaWYgKHJlYXNvbikge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dFcnJvcihyZWFzb24uZ2V0RnVsbEVycm9yU3RyaW5nKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZWplY3QoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRSZWxhdGlvblRvVHJhbnNhY3Rpb24ocmVsYXRpb25JZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgYXdhaXQgdGhpcy5fY2hlY2tBbmRDcmVhdGVUcmFuc2FjdGlvbigpO1xuICAgIGNvbnN0IHJlc3VsdDogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5hZGRSZWxhdGlvblRvVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQsIHJlbGF0aW9uSWQpO1xuICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKSB7XG4gICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXN1bHQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q29tbWlzc2lvbkNvZGVzKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogUHJvbWlzZTxDb0RvbWFpblZhbHVlW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0Q29tbWlzc2lvbkNvZGVzKGxhbmd1YWdlQ29kZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0SW5PdXRDb2xsZWN0aW9uKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogUHJvbWlzZTxDb0RvbWFpblZhbHVlW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0SW5PdXRDb2xsZWN0aW9uKGxhbmd1YWdlQ29kZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlcyhnb29kSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlcyhnb29kSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE1hcmtldGluZ0NvZGVzKCk6IFByb21pc2U8TWFya2V0aW5nW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0TWFya2V0aW5nQ29kZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbnNlcnRDdXN0b21lcihyZWxhdGlvbjogQ3VzdG9tZXJGdWxsT2JqZWN0KTogUHJvbWlzZTxDdXN0b21lckZ1bGxPYmplY3Q+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuaW5zZXJ0Q3VzdG9tZXIocmVsYXRpb24pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUN1c3RvbWVyKHJlbGF0aW9uOiBDdXN0b21lckZ1bGxPYmplY3QpOiBQcm9taXNlPEN1c3RvbWVyRnVsbE9iamVjdD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxDdXN0b21lckZ1bGxPYmplY3Q+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdG9yLnVwZGF0ZUN1c3RvbWVyKHJlbGF0aW9uKS50aGVuKGFzeW5jKCByZXNwb25zZTogQ3VzdG9tZXJGdWxsT2JqZWN0KSA9PiB7XG4gICAgICAgIC8vIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5yZWxhdGlvbiA9IHJlbGF0aW9uO1xuICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKHJlc3BvbnNlOiBDdXN0b21lckZ1bGxPYmplY3QpID0+IHtcbiAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWxpdmVyeU1ldGhvZHMoKTogUHJvbWlzZTxEZWxpdmVyeU1ldGhvZFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldERlbGl2ZXJ5TWV0aG9kcygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5T3B0aW9ucygpOiBQcm9taXNlPERlbGl2ZXJ5T3B0aW9uW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0RGVsaXZlcnlPcHRpb25zKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0VHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gY29uc3QgdHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0OiBTZXRUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QgPSB0aGlzLl9nZXRUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9ucygpO1xuICAgIGlmICghdGhpcy5kZWxpdmVyeU9wdGlvbnMudHJhbnNhY3Rpb25VdWlkKSB7XG4gICAgICB0aGlzLmRlbGl2ZXJ5T3B0aW9ucy50cmFuc2FjdGlvblV1aWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZDtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uUmVzcG9uc2VCYXNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3Iuc2V0VHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnModGhpcy5kZWxpdmVyeU9wdGlvbnMpXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlICYmIHJlc3BvbnNlLmlzU3VjY2VzcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRSZWxhdGlvbkxpc3RPYmplY3RzKHJlbGF0aW9uUmVxdWVzdDogUmVsYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxSZWxhdGlvbkxpc3RPYmplY3RbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRSZWxhdGlvbkxpc3RPYmplY3RzKHJlbGF0aW9uUmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmV0cmlldmVMaW5lSW1hZ2UobGluZTogVHJhbnNhY3Rpb25MaW5lSW5mbyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0QXJ0aWNsZUltYWdlQnlBcnRpY2xlTnVtYmVyKGxpbmUuYXJ0aWNsZU51bWJlcik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QXJ0aWNsZUltYWdlQnlBcnRpY2xlTnVtYmVyKGFydGljbGVOdW1iZXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuX2ltYWdlQ2FjaGUuaGFzKGFydGljbGVOdW1iZXIpKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW1hZ2VDYWNoZS5nZXQoYXJ0aWNsZU51bWJlcik7XG4gICAgfVxuICAgIGNvbnN0IGdvb2RJZDogbnVtYmVyID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0R29vZElkRnJvbUFydGljbGVOcihhcnRpY2xlTnVtYmVyKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG4gICAgY29uc3QgaW1hZ2UgPSBhd2FpdCB0aGlzLmdldEFydGljbGVJbWFnZUJ5R29vZElkKGdvb2RJZCk7XG4gICAgdGhpcy5faW1hZ2VDYWNoZS5zZXQoYXJ0aWNsZU51bWJlciwgaW1hZ2UpO1xuICAgIHJldHVybiBpbWFnZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBcnRpY2xlSW1hZ2VCeUdvb2RJZChnb29kSWQ6IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc05hTihnb29kSWQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0U2luZ2xlSW1hZ2UoZ29vZElkLCAxLCB0cnVlLCB0cnVlKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRBcnRpY2xlKFxuICAgIGFydGljbGVObzogc3RyaW5nLFxuICAgIGFtb3VudDogbnVtYmVyID0gMSxcbiAgICB3YXJlaG91c2VObzogbnVtYmVyID0gMSxcbiAgICBjb21taXNzaW9uQ29kZTogc3RyaW5nID0gXCIyXCIsXG4gICAgaXNSZXR1cm46IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBhYm92ZUxpbmVOcjogbnVtYmVyID0gMCxcbiAgICBiZWxvd0xpbmVOcjogbnVtYmVyID0gMFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBhd2FpdCB0aGlzLl9jaGVja0FuZENyZWF0ZVRyYW5zYWN0aW9uKCk7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuYWRkVHJhbnNhY3Rpb25MaW5lKFxuICAgICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQsIFRyYW5zYWN0aW9uTGluZVR5cGUuQXJ0aWNsZUxpbmUsIGFydGljbGVObywgYW1vdW50LCB3YXJlaG91c2VObywgY29tbWlzc2lvbkNvZGUsIGlzUmV0dXJuLCBhYm92ZUxpbmVOciwgYmVsb3dMaW5lTnIpO1xuICAgIGlmIChhd2FpdCB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSkpIHtcbiAgICAgIHRoaXMuX3JlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBwdWJsaWMgYXN5bmMgYWRkQXJ0aWNsZVRvVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25VdWlkOiBzdHJpbmcsIGFydGljbGVObzogc3RyaW5nLCBhbW91bnQ6IG51bWJlciA9IDEsIHdhcmVob3VzZU5vOiBudW1iZXIgPSAxLCBjb21taXNzaW9uQ29kZTogc3RyaW5nID0gXCIyXCIsIGlzUmV0dXJuOiBib29sZWFuID0gZmFsc2UsIGFib3ZlTGluZU5yOiBudW1iZXIgPSAwLCBiZWxvd0xpbmVOcjogbnVtYmVyID0gMCk6IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPiB7XG4gIC8vICAgYXdhaXQgdGhpcy5fY2hlY2tBbmRDcmVhdGVUcmFuc2FjdGlvbigpO1xuICAvLyAgIHJldHVybiBuZXcgUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgLy8gICAgIHRoaXMuY29ubmVjdG9yLmFkZFRyYW5zYWN0aW9uTGluZSh0cmFuc2FjdGlvblV1aWQsIFRyYW5zYWN0aW9uTGluZVR5cGUuQXJ0aWNsZUxpbmUsIGFydGljbGVObywgYW1vdW50LCB3YXJlaG91c2VObywgY29tbWlzc2lvbkNvZGUsIGlzUmV0dXJuLCBhYm92ZUxpbmVOciwgYmVsb3dMaW5lTnIpXG4gIC8vICAgICAgIC50aGVuKGFzeW5jKCByZXNwb25zZTogTGluZU9wZXJhdGlvblJlc3BvbnNlKSA9PiB7XG4gIC8vICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIC8vICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAvLyAgICAgICAgIHRoaXMuX3Byb21wdC5zaG93RXJyb3IoZXJyb3IpO1xuICAvLyAgICAgICAgIHJlamVjdChlcnJvcik7XG4gIC8vICAgICAgIH0pXG4gIC8vICAgICAgIC5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gIC8vICAgICAgICAgdGhpcy5fcHJvbXB0LnNob3dFcnJvcihyZWFzb24uZ2V0RnVsbEVycm9yU3RyaW5nKCkpO1xuICAvLyAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gIC8vICAgICAgIH0pO1xuICAvLyAgIH0pO1xuICAvLyB9XG5cbiAgcHVibGljIGFzeW5jIGFkZFRyYW5zYWN0aW9uTGluZShsaW5lVHlwZTogVHJhbnNhY3Rpb25MaW5lVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnRpY2xlTm86IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbW91bnQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJlaG91c2VObz86IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXNzaW9uQ29kZT86IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JldHVybj86IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvdmVMaW5lTnI/OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVsb3dMaW5lTnI/OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtZW1iZXI6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xuICAgIGF3YWl0IHRoaXMuX2NoZWNrQW5kQ3JlYXRlVHJhbnNhY3Rpb24oKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdG9yLmFkZFRyYW5zYWN0aW9uTGluZSh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCwgbGluZVR5cGUsIGFydGljbGVObywgYW1vdW50LCB3YXJlaG91c2VObywgY29tbWlzc2lvbkNvZGUsIGlzUmV0dXJuLCBhYm92ZUxpbmVOciwgYmVsb3dMaW5lTnIpXG4gICAgICAgIC50aGVuKGFzeW5jIChyZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkVGV4dExpbmUoXG4gICAgICAgICAgICAgICAgc2hvd09uRG9jdW1lbnRzOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICAgICAgICAgIGFtb3VudDogbnVtYmVyLFxuICAgICAgICAgICAgICAgIGFydGljbGVCb3VuZDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICByZWZBcnRpY2xlTGluZU5yOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgYWJvdmVMaW5lTnI/OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgYmVsb3dMaW5lTnI/OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgcmVtZW1iZXI6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xuICAgIGF3YWl0IHRoaXMuX2NoZWNrQW5kQ3JlYXRlVHJhbnNhY3Rpb24oKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdG9yLmFkZFRleHRMaW5lVG9UcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCwgc2hvd09uRG9jdW1lbnRzLCB0ZXh0LCBhbW91bnQsIGFydGljbGVCb3VuZCwgcmVmQXJ0aWNsZUxpbmVOciwgYWJvdmVMaW5lTnIsIGJlbG93TGluZU5yKVxuICAgICAgICAudGhlbihhc3luYyAocmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZFRleHRMaW5lVG9UcmFuc2FjdGlvbihcbiAgICB0cmFuc2FjdGlvblV1aWQ6IHN0cmluZyxcbiAgICBzaG93T25Eb2N1bWVudHM6IG51bWJlcixcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgYW1vdW50OiBudW1iZXIsXG4gICAgYXJ0aWNsZUJvdW5kOiBib29sZWFuLFxuICAgIHJlZkFydGljbGVMaW5lTnI6IG51bWJlcixcbiAgICBhYm92ZUxpbmVOcj86IG51bWJlcixcbiAgICBiZWxvd0xpbmVOcj86IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcbiAgICBhd2FpdCB0aGlzLl9jaGVja0FuZENyZWF0ZVRyYW5zYWN0aW9uKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rvci5hZGRUZXh0TGluZVRvVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25VdWlkLCBzaG93T25Eb2N1bWVudHMsIHRleHQsIGFtb3VudCwgYXJ0aWNsZUJvdW5kLCByZWZBcnRpY2xlTGluZU5yLCBhYm92ZUxpbmVOciwgYmVsb3dMaW5lTnIpXG4gICAgICAgIC50aGVuKGFzeW5jIChyZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VMaW5lU2VxdWVuY2UoXG4gICAgbGluZVV1aWQ6IHN0cmluZyxcbiAgICBhYm92ZUxpbmVOcj86IG51bWJlcixcbiAgICBiZWxvd0xpbmVOcj86IG51bWJlcixcbiAgICByZW1lbWJlcjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VMaW5lU2VxdWVuY2UodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQsIGxpbmVVdWlkLCBhYm92ZUxpbmVOciwgYmVsb3dMaW5lTnIpXG4gICAgICAgIC50aGVuKGFzeW5jIChyZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlVHJhbnNhY3Rpb25MaW5lKHRyYW5zYWN0aW9uVXVpZDogc3RyaW5nLCBUcmFuc2FjdGlvbkxpbmVVdWlkOiBzdHJpbmcsIHJlbWVtYmVyOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdG9yLmRlbGV0ZVRyYW5zYWN0aW9uTGluZSh0cmFuc2FjdGlvblV1aWQsIFRyYW5zYWN0aW9uTGluZVV1aWQpXG4gICAgICAgIC50aGVuKGFzeW5jIChyZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmlzU3VjY2Vzcykge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdChyZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoYW5nZVRyYW5zYWN0aW9uTGluZVF1YW50aXR5KGxpbmVVdWlkOiBzdHJpbmcsIG5ld1F1YW50aXR5OiBudW1iZXIsIHJlbWVtYmVyOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+KChyZXNvbHZlOiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lUXVhbnRpdHkodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQsIGxpbmVVdWlkLCBuZXdRdWFudGl0eSlcbiAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgIH0pLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0UmVsYXRpb25CeVVzZXIodXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZTogRnVuY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdG9yLnNldFJlbGF0aW9uQnlVc2VyKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkLCB1c2VybmFtZSwgcGFzc3dvcmQpXG4gICAgICAgIC50aGVuKGFzeW5jIChpc1N1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICByZXNvbHZlKGlzU3VjY2Vzcyk7XG4gICAgICAgIH0pLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDdXN0b21lckZ1bGxPYmplY3RCeVJlbGF0aW9uSWQocmVsYXRpb25JZDogbnVtYmVyKTogUHJvbWlzZTxDdXN0b21lckZ1bGxPYmplY3Q+IHtcbiAgICBjb25zdCByZWxhdGlvbk5yOiBzdHJpbmcgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRSZWxhdGlvbk51bWJlcihyZWxhdGlvbklkKTtcbiAgICBpZiAocmVsYXRpb25Ocikge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEN1c3RvbWVyRnVsbE9iamVjdChOdW1iZXIocmVsYXRpb25OcikpO1xuICAgIH1cbiAgICByZXR1cm4gTlVMTF9DVVNUT01FUl9GVUxMX09CSkVDVDtcbiAgfVxuXG4gIC8vIHB1YmxpYyBhc3luYyBzZXRSZWxhdGlvbkJ5VXNlcih1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIC8vICAgY29uc3QgcmVzcG9uc2U6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5zZXRSZWxhdGlvbkJ5VXNlcih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi51dWlkLCB1c2VybmFtZSwgcGFzc3dvcmQpO1xuICAvLyAgIHJldHVybiByZXNwb25zZTtcbiAgLy8gfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUZXh0VHlwZXMobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRUZXh0VHlwZXMobGFuZ3VhZ2VDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTdGFuZGFyZFRleHRzKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogUHJvbWlzZTxTdGFuZGFyZFRleHRbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRTdGFuZGFyZFRleHRzKGxhbmd1YWdlQ29kZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Rmlyc3RBZGRyZXNzKHJlbGF0aW9uOiBSZWxhdGlvbkFueVR5cGUpOiBBZGRyZXNzIHtcbiAgICBpZiAoIXJlbGF0aW9uIHx8ICFyZWxhdGlvbi5hZGRyZXNzZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbGF0aW9uLmdldEZpcnN0QXZhaWxhYmxlQWRkcmVzcyhbXG4gICAgICBBZGRyZXNzVHlwZS5EZWxpdmVyeUFkZHJlc3MsXG4gICAgICBBZGRyZXNzVHlwZS5CaWxsaW5nQWRkcmVzcyxcbiAgICAgIEFkZHJlc3NUeXBlLlZpc2l0aW5nQWRkcmVzcyxcbiAgICAgIEFkZHJlc3NUeXBlLk1haWxpbmdBZGRyZXNzLFxuICAgICAgQWRkcmVzc1R5cGUuTnVyc2luZ0FkZHJlc3NcbiAgICBdKTtcbiAgfVxuXG4gIC8vIHByaXZhdGUgX2NsZWFuUmVsYXRpb25CZWZvcmVTYXZlKCk6IHZvaWQge1xuICAvLyAgIEFycmF5VXRpbHMuUmVtb3ZlRWxlbWVudHNCeUZpbHRlcih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8ucmVsYXRpb24uY29udGFjdE9wdGlvbnMsICgoaXRlbTogQ29udGFjdE9wdGlvbikgPT4ge1xuICAvLyAgICAgcmV0dXJuIGlzTmlsbChpdGVtLnZhbHVlKTtcbiAgLy8gICB9KSk7XG4gIC8vIH1cblxuICBwcml2YXRlIGFzeW5jIF9jaGVja0FuZENyZWF0ZVRyYW5zYWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gfHwgIXRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mbyB8fCAhdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnRyYW5zYWN0aW9uTnIpIHtcbiAgICAgIGlmICghYXdhaXQgdGhpcy5jcmVhdGVUcmFuc2FjdGlvbigpKSB7XG4gICAgICAgIHRocm93RXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIHRyYW5zYWN0aW9uXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG4iXX0=