@hitsoft/kadooglu-keops 0.0.1 → 0.0.3

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 (565) hide show
  1. package/config/enums/route-names.d.ts +15 -1
  2. package/esm2020/config/enums/route-names.mjs +1 -1
  3. package/esm2020/config/providers/route.provider.mjs +132 -4
  4. package/esm2020/lib/features/bl-tracking/components/bl-tracking-form.component.mjs +82 -0
  5. package/esm2020/lib/features/bl-tracking/components/bl-tracking.component.mjs +65 -0
  6. package/esm2020/lib/features/bl-tracking/hit-bl-tracking-routing.module.mjs +29 -0
  7. package/esm2020/lib/features/bl-tracking/hit-bl-tracking.module.mjs +58 -0
  8. package/esm2020/lib/features/carriers/components/carrier-form.component.mjs +78 -0
  9. package/esm2020/lib/features/carriers/components/carriers.component.mjs +66 -0
  10. package/esm2020/lib/features/carriers/hit-carriers-routing.module.mjs +29 -0
  11. package/esm2020/lib/features/carriers/hit-carriers.module.mjs +58 -0
  12. package/esm2020/lib/features/container-definitions/components/container-definition-form.component.mjs +2 -2
  13. package/esm2020/lib/features/container-definitions/components/container-definitions.component.mjs +2 -2
  14. package/esm2020/lib/features/container-loading-counts/components/container-loading-counts.component.mjs +4 -4
  15. package/esm2020/lib/features/container-loading-scenarios/components/container-loading-scenarios.component.mjs +2 -2
  16. package/esm2020/lib/features/container-loading-scenarios/container-loading-scenario-l10n-helper.mjs +2 -2
  17. package/esm2020/lib/features/container-mix-types/components/container-mix-type-form.component.mjs +2 -2
  18. package/esm2020/lib/features/container-mix-types/components/container-mix-types.component.mjs +2 -2
  19. package/esm2020/lib/features/container-pallet-capacities/components/container-pallet-capacities.component.mjs +7 -6
  20. package/esm2020/lib/features/container-pallet-capacities/components/container-pallet-capacity-form.component.mjs +2 -2
  21. package/esm2020/lib/features/cost-calculation/components/cost-calculation-inputs.component.mjs +20 -11
  22. package/esm2020/lib/features/cost-calculation/components/cost-calculation-result-sum.component.mjs +2 -2
  23. package/esm2020/lib/features/cost-calculation/components/cost-calculation.component.mjs +16 -22
  24. package/esm2020/lib/features/cost-calculation/cost-calculation.models.mjs +1 -1
  25. package/esm2020/lib/features/cost-calculation/engine/currency.utils.mjs +2 -2
  26. package/esm2020/lib/features/cost-calculation/engine/item-resolver.mjs +2 -2
  27. package/esm2020/lib/features/cost-calculation/engine/models.mjs +2 -2
  28. package/esm2020/lib/features/cost-calculation/engine/stage-builder.mjs +4 -4
  29. package/esm2020/lib/features/cost-calculation/hit-cost-calculation.module.mjs +7 -3
  30. package/esm2020/lib/features/cost-groups/components/cost-group-form.component.mjs +3 -3
  31. package/esm2020/lib/features/cost-groups/components/cost-groups.component.mjs +3 -3
  32. package/esm2020/lib/features/cost-groups/cost-group-role-l10n-helper.mjs +2 -2
  33. package/esm2020/lib/features/cost-items/components/cost-item-form.component.mjs +8 -7
  34. package/esm2020/lib/features/cost-items/components/cost-items.component.mjs +2 -2
  35. package/esm2020/lib/features/cost-items/cost-item-l10n-helper.mjs +2 -2
  36. package/esm2020/lib/features/cost-parameter-categories/components/cost-parameter-categories.component.mjs +2 -2
  37. package/esm2020/lib/features/cost-parameter-categories/components/cost-parameter-category-form.component.mjs +4 -4
  38. package/esm2020/lib/features/cost-parameter-categories/cost-parameter-category-l10n-helper.mjs +2 -5
  39. package/esm2020/lib/features/cost-parameters/components/cost-parameter-form.component.mjs +20 -38
  40. package/esm2020/lib/features/cost-parameters/components/cost-parameters.component.mjs +18 -11
  41. package/esm2020/lib/features/cost-parameters/cost-parameter-l10n-helper.mjs +2 -2
  42. package/esm2020/lib/features/destination-ports/components/destination-port-form.component.mjs +86 -0
  43. package/esm2020/lib/features/destination-ports/components/destination-ports.component.mjs +74 -0
  44. package/esm2020/lib/features/destination-ports/hit-destination-ports-routing.module.mjs +29 -0
  45. package/esm2020/lib/features/destination-ports/hit-destination-ports.module.mjs +58 -0
  46. package/esm2020/lib/features/exchange-rates/components/central-bank-rates.component.mjs +1 -1
  47. package/esm2020/lib/features/exchange-rates/components/exchange-rates.component.mjs +2 -2
  48. package/esm2020/lib/features/exchange-rates/components/fixed-rates-form.component.mjs +3 -3
  49. package/esm2020/lib/features/fob-inland-definitions/components/fob-inland-definition-form.component.mjs +80 -0
  50. package/esm2020/lib/features/fob-inland-definitions/components/fob-inland-definitions.component.mjs +65 -0
  51. package/esm2020/lib/features/fob-inland-definitions/hit-fob-inland-definitions-routing.module.mjs +29 -0
  52. package/esm2020/lib/features/fob-inland-definitions/hit-fob-inland-definitions.module.mjs +58 -0
  53. package/esm2020/lib/features/freight-offers/components/freight-offer-copy.component.mjs +67 -0
  54. package/esm2020/lib/features/freight-offers/components/freight-offer-form.component.mjs +181 -0
  55. package/esm2020/lib/features/freight-offers/components/freight-offers.component.mjs +159 -0
  56. package/esm2020/lib/features/freight-offers/hit-freight-offers-routing.module.mjs +29 -0
  57. package/esm2020/lib/features/freight-offers/hit-freight-offers.module.mjs +62 -0
  58. package/esm2020/lib/features/incoterms/components/incoterm-form.component.mjs +81 -0
  59. package/esm2020/lib/features/incoterms/components/incoterms.component.mjs +65 -0
  60. package/esm2020/lib/features/incoterms/hit-incoterms-routing.module.mjs +29 -0
  61. package/esm2020/lib/features/incoterms/hit-incoterms.module.mjs +58 -0
  62. package/esm2020/lib/features/index.mjs +29 -1
  63. package/esm2020/lib/features/item-package-groups/components/item-package-group-form.component.mjs +78 -0
  64. package/esm2020/lib/features/item-package-groups/components/item-package-groups.component.mjs +69 -0
  65. package/esm2020/lib/features/item-package-groups/hit-item-package-groups-routing.module.mjs +29 -0
  66. package/esm2020/lib/features/item-package-groups/hit-item-package-groups.module.mjs +58 -0
  67. package/esm2020/lib/features/item-package-types/components/item-package-type-form.component.mjs +78 -0
  68. package/esm2020/lib/features/item-package-types/components/item-package-types.component.mjs +69 -0
  69. package/esm2020/lib/features/item-package-types/hit-item-package-types-routing.module.mjs +29 -0
  70. package/esm2020/lib/features/item-package-types/hit-item-package-types.module.mjs +58 -0
  71. package/esm2020/lib/features/item-product-types/components/item-product-type-form.component.mjs +78 -0
  72. package/esm2020/lib/features/item-product-types/components/item-product-types.component.mjs +69 -0
  73. package/esm2020/lib/features/item-product-types/hit-item-product-types-routing.module.mjs +29 -0
  74. package/esm2020/lib/features/item-product-types/hit-item-product-types.module.mjs +58 -0
  75. package/esm2020/lib/features/lines/components/line-form.component.mjs +78 -0
  76. package/esm2020/lib/features/lines/components/lines.component.mjs +66 -0
  77. package/esm2020/lib/features/lines/hit-lines-routing.module.mjs +29 -0
  78. package/esm2020/lib/features/lines/hit-lines.module.mjs +58 -0
  79. package/esm2020/lib/features/packaging-materials/components/packaging-material-form.component.mjs +2 -2
  80. package/esm2020/lib/features/packaging-materials/components/packaging-materials.component.mjs +2 -2
  81. package/esm2020/lib/features/packaging-prices/components/packaging-price-form.component.mjs +6 -11
  82. package/esm2020/lib/features/packaging-prices/components/packaging-prices.component.mjs +2 -2
  83. package/esm2020/lib/features/packaging-prices/packaging-price-calculator.mjs +2 -2
  84. package/esm2020/lib/features/packaging-prices/packaging-price-excel.service.mjs +2 -2
  85. package/esm2020/lib/features/packaging-prices/packaging-price-form.factory.mjs +1 -1
  86. package/esm2020/lib/features/packaging-prices/packaging-price-lines.builder.mjs +2 -2
  87. package/esm2020/lib/features/packaging-types/components/packaging-type-form.component.mjs +2 -2
  88. package/esm2020/lib/features/packaging-types/components/packaging-types.component.mjs +2 -2
  89. package/esm2020/lib/features/pallet-definitions/components/pallet-definition-form.component.mjs +2 -2
  90. package/esm2020/lib/features/pallet-definitions/components/pallet-definitions.component.mjs +2 -2
  91. package/esm2020/lib/features/pos/components/pos-form.component.mjs +77 -0
  92. package/esm2020/lib/features/pos/components/pos.component.mjs +65 -0
  93. package/esm2020/lib/features/pos/hit-pos-routing.module.mjs +29 -0
  94. package/esm2020/lib/features/pos/hit-pos.module.mjs +58 -0
  95. package/esm2020/lib/features/price-parameter-types/components/price-parameter-type-form.component.mjs +2 -2
  96. package/esm2020/lib/features/price-parameter-types/components/price-parameter-types.component.mjs +4 -4
  97. package/esm2020/lib/features/price-parameters/components/price-parameter-form-cost-items.component.mjs +32 -0
  98. package/esm2020/lib/features/price-parameters/components/price-parameter-form-discount-rates-modal.component.mjs +52 -0
  99. package/esm2020/lib/features/price-parameters/components/price-parameter-form-discount-rates.component.mjs +84 -0
  100. package/esm2020/lib/features/price-parameters/components/price-parameter-form-items.component.mjs +43 -0
  101. package/esm2020/lib/features/price-parameters/components/price-parameter-form-price-lists.component.mjs +42 -0
  102. package/esm2020/lib/features/price-parameters/components/price-parameter-form.component.mjs +252 -0
  103. package/esm2020/lib/features/price-parameters/components/price-parameters.component.mjs +78 -0
  104. package/esm2020/lib/features/price-parameters/hit-price-parameters-routing.module.mjs +46 -0
  105. package/esm2020/lib/features/price-parameters/hit-price-parameters.module.mjs +93 -0
  106. package/esm2020/lib/features/price-parameters/price-parameter-cost-match.service.mjs +21 -0
  107. package/esm2020/lib/features/price-parameters/price-parameter-form-data.service.mjs +50 -0
  108. package/esm2020/lib/features/price-parameters/price-parameter-l10n-helper.mjs +7 -0
  109. package/esm2020/lib/features/price-parameters/price-parameter-lookups.service.mjs +32 -0
  110. package/esm2020/lib/features/sap-sales-persons/components/sap-sales-person-form.component.mjs +3 -3
  111. package/esm2020/lib/features/sap-sales-persons/components/sap-sales-persons.component.mjs +5 -3
  112. package/esm2020/lib/features/settings/components/cost-settings.component.mjs +2 -2
  113. package/esm2020/lib/kadooglu-keops-routing.module.mjs +25 -1
  114. package/esm2020/lib/shared/amount-currency-input/amount-currency-input.component.mjs +66 -0
  115. package/esm2020/lib/shared/cost-item-classification.utils.mjs +12 -0
  116. package/esm2020/lib/shared/cost-item-rows.builder.mjs +40 -0
  117. package/esm2020/lib/shared/pipes/resolve-code-name.pipe.mjs +16 -0
  118. package/esm2020/lib/shared/shared-ui.module.mjs +20 -0
  119. package/esm2020/lib/utils/currency.utils.mjs +4 -2
  120. package/esm2020/lib/utils/exchange-rate.utils.mjs +12 -0
  121. package/esm2020/proxy/bl-tracking/dtos/index.mjs +2 -0
  122. package/esm2020/proxy/bl-tracking/dtos/models.mjs +2 -0
  123. package/esm2020/{lib/proxy/cost-items → proxy/business-partners}/dtos/index.mjs +1 -1
  124. package/esm2020/proxy/business-partners/dtos/models.mjs +2 -0
  125. package/esm2020/proxy/carriers/dtos/index.mjs +2 -0
  126. package/esm2020/proxy/carriers/dtos/models.mjs +2 -0
  127. package/esm2020/{lib/proxy/exchange-rates → proxy/container-definitions}/dtos/index.mjs +1 -1
  128. package/esm2020/proxy/container-definitions/dtos/models.mjs +2 -0
  129. package/esm2020/proxy/container-loading-counts/dtos/index.mjs +2 -0
  130. package/esm2020/proxy/container-loading-counts/dtos/models.mjs +2 -0
  131. package/esm2020/proxy/container-loading-counts/loading-target-kind.enum.mjs +8 -0
  132. package/esm2020/proxy/container-loading-scenarios/dtos/index.mjs +2 -0
  133. package/esm2020/proxy/container-loading-scenarios/dtos/models.mjs +2 -0
  134. package/esm2020/proxy/container-loading-scenarios/pallet-status.enum.mjs +8 -0
  135. package/esm2020/proxy/container-mix-types/dtos/index.mjs +2 -0
  136. package/esm2020/proxy/container-mix-types/dtos/models.mjs +2 -0
  137. package/esm2020/proxy/container-pallet-capacities/dtos/index.mjs +2 -0
  138. package/esm2020/proxy/container-pallet-capacities/dtos/models.mjs +2 -0
  139. package/esm2020/proxy/controllers/bl-tracking.service.mjs +36 -0
  140. package/esm2020/proxy/controllers/business-partner.service.mjs +22 -0
  141. package/esm2020/proxy/controllers/carrier.service.mjs +36 -0
  142. package/esm2020/proxy/controllers/container-definition.service.mjs +40 -0
  143. package/esm2020/proxy/controllers/container-loading-count.service.mjs +31 -0
  144. package/esm2020/proxy/controllers/container-loading-scenario.service.mjs +27 -0
  145. package/esm2020/proxy/controllers/container-mix-type.service.mjs +40 -0
  146. package/esm2020/proxy/controllers/container-pallet-capacity.service.mjs +40 -0
  147. package/esm2020/proxy/controllers/cost-group.service.mjs +40 -0
  148. package/esm2020/proxy/controllers/cost-item.service.mjs +40 -0
  149. package/esm2020/proxy/controllers/cost-parameter-category.service.mjs +40 -0
  150. package/esm2020/proxy/controllers/cost-parameter.service.mjs +36 -0
  151. package/esm2020/proxy/controllers/cost-settings.service.mjs +27 -0
  152. package/esm2020/proxy/controllers/destination-port.service.mjs +44 -0
  153. package/esm2020/proxy/controllers/exchange-rate.service.mjs +27 -0
  154. package/esm2020/proxy/controllers/fob-inland-definition.service.mjs +36 -0
  155. package/esm2020/proxy/controllers/freight-offer.service.mjs +57 -0
  156. package/esm2020/proxy/controllers/incoterm.service.mjs +36 -0
  157. package/esm2020/proxy/controllers/index.mjs +33 -0
  158. package/esm2020/proxy/controllers/item-package-group.service.mjs +40 -0
  159. package/esm2020/proxy/controllers/item-package-type.service.mjs +40 -0
  160. package/esm2020/proxy/controllers/item-product-type.service.mjs +40 -0
  161. package/esm2020/proxy/controllers/item.service.mjs +23 -0
  162. package/esm2020/proxy/controllers/line.service.mjs +36 -0
  163. package/esm2020/proxy/controllers/packaging-material.service.mjs +40 -0
  164. package/esm2020/proxy/controllers/packaging-price.service.mjs +55 -0
  165. package/esm2020/proxy/controllers/packaging-type.service.mjs +40 -0
  166. package/esm2020/proxy/controllers/pallet-definition.service.mjs +40 -0
  167. package/esm2020/proxy/controllers/pos.service.mjs +36 -0
  168. package/esm2020/proxy/controllers/price-list.service.mjs +28 -0
  169. package/esm2020/proxy/controllers/price-parameter-type.service.mjs +40 -0
  170. package/esm2020/proxy/controllers/price-parameter.service.mjs +40 -0
  171. package/esm2020/proxy/controllers/sap-sales-person.service.mjs +27 -0
  172. package/esm2020/proxy/cost-groups/cost-group-role.enum.mjs +10 -0
  173. package/esm2020/proxy/cost-groups/dtos/index.mjs +2 -0
  174. package/esm2020/proxy/cost-groups/dtos/models.mjs +2 -0
  175. package/esm2020/proxy/cost-items/cost-item-calculation-type.enum.mjs +9 -0
  176. package/esm2020/{lib/proxy → proxy}/cost-items/cost-item-system-code.enum.mjs +1 -1
  177. package/esm2020/proxy/cost-items/dtos/index.mjs +2 -0
  178. package/esm2020/proxy/cost-items/dtos/models.mjs +2 -0
  179. package/esm2020/proxy/cost-parameter-categories/cost-parameter-category-parent-code.enum.mjs +8 -0
  180. package/esm2020/{lib/proxy/pallet-definitions → proxy/cost-parameter-categories}/dtos/index.mjs +1 -1
  181. package/esm2020/proxy/cost-parameter-categories/dtos/models.mjs +2 -0
  182. package/esm2020/proxy/cost-parameters/cost-parameter-status.enum.mjs +9 -0
  183. package/esm2020/proxy/cost-parameters/dtos/index.mjs +2 -0
  184. package/esm2020/proxy/cost-parameters/dtos/models.mjs +2 -0
  185. package/esm2020/proxy/currencies/currency.enum.mjs +9 -0
  186. package/esm2020/proxy/currencies/index.mjs +2 -0
  187. package/esm2020/proxy/destination-ports/dtos/index.mjs +2 -0
  188. package/esm2020/proxy/destination-ports/dtos/models.mjs +2 -0
  189. package/esm2020/proxy/exchange-rates/dtos/index.mjs +2 -0
  190. package/esm2020/proxy/exchange-rates/dtos/models.mjs +2 -0
  191. package/esm2020/proxy/exchange-rates/exchange-rate-source.enum.mjs +8 -0
  192. package/esm2020/{lib/proxy/cost-parameters → proxy/fob-inland-definitions}/dtos/index.mjs +1 -1
  193. package/esm2020/proxy/fob-inland-definitions/dtos/models.mjs +2 -0
  194. package/esm2020/proxy/freight-offers/dtos/index.mjs +2 -0
  195. package/esm2020/proxy/freight-offers/dtos/models.mjs +2 -0
  196. package/esm2020/proxy/hitsoft-kadooglu-keops-proxy.mjs +5 -0
  197. package/esm2020/proxy/incoterms/dtos/index.mjs +2 -0
  198. package/esm2020/proxy/incoterms/dtos/models.mjs +2 -0
  199. package/esm2020/proxy/item-package-groups/dtos/index.mjs +2 -0
  200. package/esm2020/proxy/item-package-groups/dtos/models.mjs +2 -0
  201. package/esm2020/{lib/proxy/cost-groups → proxy/item-package-types}/dtos/index.mjs +1 -1
  202. package/esm2020/proxy/item-package-types/dtos/models.mjs +2 -0
  203. package/esm2020/proxy/item-product-types/dtos/index.mjs +2 -0
  204. package/esm2020/proxy/item-product-types/dtos/models.mjs +2 -0
  205. package/esm2020/proxy/items/dtos/index.mjs +2 -0
  206. package/esm2020/proxy/items/dtos/models.mjs +2 -0
  207. package/esm2020/proxy/lines/dtos/index.mjs +2 -0
  208. package/esm2020/proxy/lines/dtos/models.mjs +2 -0
  209. package/esm2020/proxy/packaging-materials/dtos/index.mjs +2 -0
  210. package/esm2020/proxy/packaging-materials/dtos/models.mjs +2 -0
  211. package/esm2020/proxy/packaging-prices/dtos/index.mjs +2 -0
  212. package/esm2020/proxy/packaging-prices/dtos/models.mjs +2 -0
  213. package/esm2020/proxy/packaging-types/dtos/index.mjs +2 -0
  214. package/esm2020/proxy/packaging-types/dtos/models.mjs +2 -0
  215. package/esm2020/proxy/pallet-definitions/dtos/index.mjs +2 -0
  216. package/esm2020/proxy/pallet-definitions/dtos/models.mjs +2 -0
  217. package/esm2020/proxy/pos/dtos/index.mjs +2 -0
  218. package/esm2020/proxy/pos/dtos/models.mjs +2 -0
  219. package/esm2020/proxy/price-lists/dtos/index.mjs +2 -0
  220. package/esm2020/proxy/price-lists/dtos/models.mjs +2 -0
  221. package/esm2020/proxy/price-parameter-types/dtos/index.mjs +2 -0
  222. package/esm2020/proxy/price-parameter-types/dtos/models.mjs +2 -0
  223. package/esm2020/proxy/price-parameters/dtos/index.mjs +2 -0
  224. package/esm2020/proxy/price-parameters/dtos/models.mjs +2 -0
  225. package/esm2020/proxy/price-parameters/price-parameter-status.enum.mjs +9 -0
  226. package/esm2020/proxy/public-api.mjs +45 -0
  227. package/esm2020/proxy/sales-persons/dtos/index.mjs +2 -0
  228. package/esm2020/proxy/sales-persons/dtos/models.mjs +2 -0
  229. package/esm2020/proxy/settings/index.mjs +2 -0
  230. package/esm2020/proxy/settings/models.mjs +2 -0
  231. package/esm2020/public-api.mjs +1 -2
  232. package/fesm2015/hitsoft-kadooglu-keops-config.mjs +131 -3
  233. package/fesm2015/hitsoft-kadooglu-keops-config.mjs.map +1 -1
  234. package/fesm2015/hitsoft-kadooglu-keops-proxy.mjs +1185 -0
  235. package/fesm2015/hitsoft-kadooglu-keops-proxy.mjs.map +1 -0
  236. package/fesm2015/hitsoft-kadooglu-keops.mjs +4082 -1728
  237. package/fesm2015/hitsoft-kadooglu-keops.mjs.map +1 -1
  238. package/fesm2020/hitsoft-kadooglu-keops-config.mjs +131 -3
  239. package/fesm2020/hitsoft-kadooglu-keops-config.mjs.map +1 -1
  240. package/fesm2020/hitsoft-kadooglu-keops-proxy.mjs +1185 -0
  241. package/fesm2020/hitsoft-kadooglu-keops-proxy.mjs.map +1 -0
  242. package/fesm2020/hitsoft-kadooglu-keops.mjs +4070 -1729
  243. package/fesm2020/hitsoft-kadooglu-keops.mjs.map +1 -1
  244. package/lib/features/bl-tracking/components/bl-tracking-form.component.d.ts +24 -0
  245. package/lib/features/bl-tracking/components/bl-tracking.component.d.ts +22 -0
  246. package/lib/features/bl-tracking/hit-bl-tracking-routing.module.d.ts +7 -0
  247. package/lib/features/bl-tracking/hit-bl-tracking.module.d.ts +18 -0
  248. package/lib/features/carriers/components/carrier-form.component.d.ts +24 -0
  249. package/lib/features/carriers/components/carriers.component.d.ts +22 -0
  250. package/lib/features/carriers/hit-carriers-routing.module.d.ts +7 -0
  251. package/lib/features/carriers/hit-carriers.module.d.ts +18 -0
  252. package/lib/features/container-definitions/components/container-definition-form.component.d.ts +1 -2
  253. package/lib/features/container-definitions/components/container-definitions.component.d.ts +1 -2
  254. package/lib/features/container-loading-counts/components/container-loading-counts.component.d.ts +2 -5
  255. package/lib/features/container-loading-scenarios/components/container-loading-scenarios.component.d.ts +1 -5
  256. package/lib/features/container-loading-scenarios/container-loading-scenario-l10n-helper.d.ts +1 -1
  257. package/lib/features/container-mix-types/components/container-mix-type-form.component.d.ts +1 -2
  258. package/lib/features/container-mix-types/components/container-mix-types.component.d.ts +1 -2
  259. package/lib/features/container-pallet-capacities/components/container-pallet-capacities.component.d.ts +2 -5
  260. package/lib/features/container-pallet-capacities/components/container-pallet-capacity-form.component.d.ts +1 -4
  261. package/lib/features/cost-calculation/components/cost-calculation-inputs.component.d.ts +3 -5
  262. package/lib/features/cost-calculation/components/cost-calculation-results.component.d.ts +1 -1
  263. package/lib/features/cost-calculation/components/cost-calculation.component.d.ts +3 -6
  264. package/lib/features/cost-calculation/cost-calculation.models.d.ts +1 -3
  265. package/lib/features/cost-calculation/engine/currency.utils.d.ts +1 -1
  266. package/lib/features/cost-calculation/engine/models.d.ts +1 -3
  267. package/lib/features/cost-calculation/hit-cost-calculation.module.d.ts +2 -1
  268. package/lib/features/cost-groups/components/cost-group-form.component.d.ts +2 -4
  269. package/lib/features/cost-groups/components/cost-groups.component.d.ts +1 -5
  270. package/lib/features/cost-groups/cost-group-role-l10n-helper.d.ts +1 -1
  271. package/lib/features/cost-items/components/cost-item-form.component.d.ts +1 -3
  272. package/lib/features/cost-items/components/cost-items.component.d.ts +1 -2
  273. package/lib/features/cost-items/cost-item-l10n-helper.d.ts +1 -1
  274. package/lib/features/cost-parameter-categories/components/cost-parameter-categories.component.d.ts +1 -2
  275. package/lib/features/cost-parameter-categories/components/cost-parameter-category-form.component.d.ts +1 -3
  276. package/lib/features/cost-parameter-categories/cost-parameter-category-l10n-helper.d.ts +1 -1
  277. package/lib/features/cost-parameters/components/cost-parameter-form.component.d.ts +9 -9
  278. package/lib/features/cost-parameters/components/cost-parameters.component.d.ts +6 -6
  279. package/lib/features/cost-parameters/cost-parameter-l10n-helper.d.ts +1 -1
  280. package/lib/features/destination-ports/components/destination-port-form.component.d.ts +25 -0
  281. package/lib/features/destination-ports/components/destination-ports.component.d.ts +24 -0
  282. package/lib/features/destination-ports/hit-destination-ports-routing.module.d.ts +7 -0
  283. package/lib/features/destination-ports/hit-destination-ports.module.d.ts +18 -0
  284. package/lib/features/exchange-rates/components/central-bank-rates.component.d.ts +1 -1
  285. package/lib/features/exchange-rates/components/exchange-rates.component.d.ts +1 -2
  286. package/lib/features/exchange-rates/components/fixed-rates-form.component.d.ts +1 -3
  287. package/lib/features/fob-inland-definitions/components/fob-inland-definition-form.component.d.ts +24 -0
  288. package/lib/features/fob-inland-definitions/components/fob-inland-definitions.component.d.ts +22 -0
  289. package/lib/features/fob-inland-definitions/hit-fob-inland-definitions-routing.module.d.ts +7 -0
  290. package/lib/features/fob-inland-definitions/hit-fob-inland-definitions.module.d.ts +18 -0
  291. package/lib/features/freight-offers/components/freight-offer-copy.component.d.ts +22 -0
  292. package/lib/features/freight-offers/components/freight-offer-form.component.d.ts +49 -0
  293. package/lib/features/freight-offers/components/freight-offers.component.d.ts +47 -0
  294. package/lib/features/freight-offers/hit-freight-offers-routing.module.d.ts +7 -0
  295. package/lib/features/freight-offers/hit-freight-offers.module.d.ts +19 -0
  296. package/lib/features/incoterms/components/incoterm-form.component.d.ts +24 -0
  297. package/lib/features/incoterms/components/incoterms.component.d.ts +22 -0
  298. package/lib/features/incoterms/hit-incoterms-routing.module.d.ts +7 -0
  299. package/lib/features/incoterms/hit-incoterms.module.d.ts +18 -0
  300. package/lib/features/index.d.ts +21 -0
  301. package/lib/features/item-package-groups/components/item-package-group-form.component.d.ts +24 -0
  302. package/lib/features/item-package-groups/components/item-package-groups.component.d.ts +22 -0
  303. package/lib/features/item-package-groups/hit-item-package-groups-routing.module.d.ts +7 -0
  304. package/lib/features/item-package-groups/hit-item-package-groups.module.d.ts +18 -0
  305. package/lib/features/item-package-types/components/item-package-type-form.component.d.ts +24 -0
  306. package/lib/features/item-package-types/components/item-package-types.component.d.ts +22 -0
  307. package/lib/features/item-package-types/hit-item-package-types-routing.module.d.ts +7 -0
  308. package/lib/features/item-package-types/hit-item-package-types.module.d.ts +18 -0
  309. package/lib/features/item-product-types/components/item-product-type-form.component.d.ts +24 -0
  310. package/lib/features/item-product-types/components/item-product-types.component.d.ts +22 -0
  311. package/lib/features/item-product-types/hit-item-product-types-routing.module.d.ts +7 -0
  312. package/lib/features/item-product-types/hit-item-product-types.module.d.ts +18 -0
  313. package/lib/features/lines/components/line-form.component.d.ts +24 -0
  314. package/lib/features/lines/components/lines.component.d.ts +22 -0
  315. package/lib/features/lines/hit-lines-routing.module.d.ts +7 -0
  316. package/lib/features/lines/hit-lines.module.d.ts +18 -0
  317. package/lib/features/packaging-materials/components/packaging-material-form.component.d.ts +1 -3
  318. package/lib/features/packaging-materials/components/packaging-materials.component.d.ts +1 -2
  319. package/lib/features/packaging-prices/components/packaging-price-form.component.d.ts +1 -3
  320. package/lib/features/packaging-prices/components/packaging-prices.component.d.ts +1 -3
  321. package/lib/features/packaging-prices/packaging-price-calculator.d.ts +1 -1
  322. package/lib/features/packaging-prices/packaging-price-excel.service.d.ts +1 -2
  323. package/lib/features/packaging-prices/packaging-price-form.factory.d.ts +1 -1
  324. package/lib/features/packaging-prices/packaging-price-lines.builder.d.ts +1 -1
  325. package/lib/features/packaging-types/components/packaging-type-form.component.d.ts +1 -2
  326. package/lib/features/packaging-types/components/packaging-types.component.d.ts +1 -2
  327. package/lib/features/pallet-definitions/components/pallet-definition-form.component.d.ts +1 -2
  328. package/lib/features/pallet-definitions/components/pallet-definitions.component.d.ts +1 -2
  329. package/lib/features/pos/components/pos-form.component.d.ts +24 -0
  330. package/lib/features/pos/components/pos.component.d.ts +22 -0
  331. package/lib/features/pos/hit-pos-routing.module.d.ts +7 -0
  332. package/lib/features/pos/hit-pos.module.d.ts +18 -0
  333. package/lib/features/price-parameter-types/components/price-parameter-type-form.component.d.ts +1 -2
  334. package/lib/features/price-parameter-types/components/price-parameter-types.component.d.ts +1 -2
  335. package/lib/features/price-parameters/components/price-parameter-form-cost-items.component.d.ts +15 -0
  336. package/lib/features/price-parameters/components/price-parameter-form-discount-rates-modal.component.d.ts +24 -0
  337. package/lib/features/price-parameters/components/price-parameter-form-discount-rates.component.d.ts +22 -0
  338. package/lib/features/price-parameters/components/price-parameter-form-items.component.d.ts +15 -0
  339. package/lib/features/price-parameters/components/price-parameter-form-price-lists.component.d.ts +15 -0
  340. package/lib/features/price-parameters/components/price-parameter-form.component.d.ts +70 -0
  341. package/lib/features/price-parameters/components/price-parameters.component.d.ts +27 -0
  342. package/lib/features/price-parameters/hit-price-parameters-routing.module.d.ts +7 -0
  343. package/lib/features/price-parameters/hit-price-parameters.module.d.ts +24 -0
  344. package/lib/features/price-parameters/price-parameter-cost-match.service.d.ts +10 -0
  345. package/lib/features/price-parameters/price-parameter-form-data.service.d.ts +26 -0
  346. package/lib/features/price-parameters/price-parameter-l10n-helper.d.ts +2 -0
  347. package/lib/features/price-parameters/price-parameter-lookups.service.d.ts +16 -0
  348. package/lib/features/sap-sales-persons/components/sap-sales-person-form.component.d.ts +1 -2
  349. package/lib/features/sap-sales-persons/components/sap-sales-persons.component.d.ts +1 -2
  350. package/lib/features/settings/components/cost-settings.component.d.ts +1 -1
  351. package/lib/shared/amount-currency-input/amount-currency-input.component.d.ts +23 -0
  352. package/lib/shared/cost-item-classification.utils.d.ts +7 -0
  353. package/lib/shared/cost-item-rows.builder.d.ts +11 -0
  354. package/lib/shared/pipes/resolve-code-name.pipe.d.ts +11 -0
  355. package/lib/shared/shared-ui.module.d.ts +10 -0
  356. package/lib/utils/currency.utils.d.ts +2 -1
  357. package/lib/utils/exchange-rate.utils.d.ts +2 -0
  358. package/package.json +9 -1
  359. package/proxy/bl-tracking/dtos/models.d.ts +25 -0
  360. package/proxy/business-partners/dtos/models.d.ts +4 -0
  361. package/proxy/carriers/dtos/models.d.ts +10 -0
  362. package/{lib/proxy → proxy}/container-loading-counts/dtos/models.d.ts +1 -1
  363. package/proxy/controllers/bl-tracking.service.d.ts +14 -0
  364. package/proxy/controllers/business-partner.service.d.ts +11 -0
  365. package/proxy/controllers/carrier.service.d.ts +14 -0
  366. package/{lib/proxy → proxy}/controllers/container-loading-count.service.d.ts +2 -2
  367. package/{lib/proxy → proxy}/controllers/cost-parameter.service.d.ts +1 -2
  368. package/proxy/controllers/destination-port.service.d.ts +17 -0
  369. package/proxy/controllers/fob-inland-definition.service.d.ts +14 -0
  370. package/proxy/controllers/freight-offer.service.d.ts +19 -0
  371. package/proxy/controllers/incoterm.service.d.ts +14 -0
  372. package/{lib/proxy → proxy}/controllers/index.d.ts +14 -0
  373. package/proxy/controllers/item-package-group.service.d.ts +15 -0
  374. package/proxy/controllers/item-package-type.service.d.ts +15 -0
  375. package/proxy/controllers/item-product-type.service.d.ts +15 -0
  376. package/proxy/controllers/line.service.d.ts +14 -0
  377. package/proxy/controllers/pos.service.d.ts +14 -0
  378. package/proxy/controllers/price-list.service.d.ts +12 -0
  379. package/proxy/controllers/price-parameter.service.d.ts +15 -0
  380. package/{lib/proxy → proxy}/cost-parameter-categories/cost-parameter-category-parent-code.enum.d.ts +1 -4
  381. package/{lib/proxy → proxy}/cost-parameters/dtos/models.d.ts +0 -8
  382. package/proxy/destination-ports/dtos/models.d.ts +19 -0
  383. package/proxy/fob-inland-definitions/dtos/models.d.ts +19 -0
  384. package/proxy/freight-offers/dtos/models.d.ts +66 -0
  385. package/proxy/incoterms/dtos/models.d.ts +22 -0
  386. package/proxy/index.d.ts +5 -0
  387. package/proxy/item-package-groups/dtos/models.d.ts +13 -0
  388. package/proxy/item-package-types/dtos/index.d.ts +1 -0
  389. package/proxy/item-package-types/dtos/models.d.ts +13 -0
  390. package/proxy/item-product-types/dtos/index.d.ts +1 -0
  391. package/proxy/item-product-types/dtos/models.d.ts +13 -0
  392. package/proxy/items/dtos/index.d.ts +1 -0
  393. package/proxy/lines/dtos/index.d.ts +1 -0
  394. package/proxy/lines/dtos/models.d.ts +10 -0
  395. package/proxy/packaging-materials/dtos/index.d.ts +1 -0
  396. package/proxy/packaging-prices/dtos/index.d.ts +1 -0
  397. package/proxy/packaging-types/dtos/index.d.ts +1 -0
  398. package/proxy/pallet-definitions/dtos/index.d.ts +1 -0
  399. package/proxy/pos/dtos/index.d.ts +1 -0
  400. package/proxy/pos/dtos/models.d.ts +10 -0
  401. package/proxy/price-lists/dtos/index.d.ts +1 -0
  402. package/proxy/price-lists/dtos/models.d.ts +10 -0
  403. package/proxy/price-parameter-types/dtos/index.d.ts +1 -0
  404. package/proxy/price-parameters/dtos/index.d.ts +1 -0
  405. package/proxy/price-parameters/dtos/models.d.ts +78 -0
  406. package/proxy/price-parameters/price-parameter-status.enum.d.ts +6 -0
  407. package/proxy/public-api.d.ts +43 -0
  408. package/proxy/sales-persons/dtos/index.d.ts +1 -0
  409. package/proxy/settings/index.d.ts +1 -0
  410. package/public-api.d.ts +0 -1
  411. package/esm2020/lib/proxy/container-definitions/dtos/index.mjs +0 -2
  412. package/esm2020/lib/proxy/container-definitions/dtos/models.mjs +0 -2
  413. package/esm2020/lib/proxy/container-definitions/index.mjs +0 -3
  414. package/esm2020/lib/proxy/container-loading-counts/dtos/index.mjs +0 -2
  415. package/esm2020/lib/proxy/container-loading-counts/dtos/models.mjs +0 -2
  416. package/esm2020/lib/proxy/container-loading-counts/index.mjs +0 -4
  417. package/esm2020/lib/proxy/container-loading-counts/loading-target-kind.enum.mjs +0 -8
  418. package/esm2020/lib/proxy/container-loading-scenarios/dtos/index.mjs +0 -2
  419. package/esm2020/lib/proxy/container-loading-scenarios/dtos/models.mjs +0 -2
  420. package/esm2020/lib/proxy/container-loading-scenarios/index.mjs +0 -4
  421. package/esm2020/lib/proxy/container-loading-scenarios/pallet-status.enum.mjs +0 -8
  422. package/esm2020/lib/proxy/container-mix-types/dtos/index.mjs +0 -2
  423. package/esm2020/lib/proxy/container-mix-types/dtos/models.mjs +0 -2
  424. package/esm2020/lib/proxy/container-mix-types/index.mjs +0 -3
  425. package/esm2020/lib/proxy/container-pallet-capacities/dtos/index.mjs +0 -2
  426. package/esm2020/lib/proxy/container-pallet-capacities/dtos/models.mjs +0 -2
  427. package/esm2020/lib/proxy/container-pallet-capacities/index.mjs +0 -3
  428. package/esm2020/lib/proxy/controllers/container-definition.service.mjs +0 -40
  429. package/esm2020/lib/proxy/controllers/container-loading-count.service.mjs +0 -31
  430. package/esm2020/lib/proxy/controllers/container-loading-scenario.service.mjs +0 -27
  431. package/esm2020/lib/proxy/controllers/container-mix-type.service.mjs +0 -40
  432. package/esm2020/lib/proxy/controllers/container-pallet-capacity.service.mjs +0 -40
  433. package/esm2020/lib/proxy/controllers/cost-group.service.mjs +0 -40
  434. package/esm2020/lib/proxy/controllers/cost-item.service.mjs +0 -40
  435. package/esm2020/lib/proxy/controllers/cost-parameter-category.service.mjs +0 -40
  436. package/esm2020/lib/proxy/controllers/cost-parameter.service.mjs +0 -40
  437. package/esm2020/lib/proxy/controllers/cost-settings.service.mjs +0 -27
  438. package/esm2020/lib/proxy/controllers/exchange-rate.service.mjs +0 -27
  439. package/esm2020/lib/proxy/controllers/index.mjs +0 -19
  440. package/esm2020/lib/proxy/controllers/item.service.mjs +0 -23
  441. package/esm2020/lib/proxy/controllers/packaging-material.service.mjs +0 -40
  442. package/esm2020/lib/proxy/controllers/packaging-price.service.mjs +0 -55
  443. package/esm2020/lib/proxy/controllers/packaging-type.service.mjs +0 -40
  444. package/esm2020/lib/proxy/controllers/pallet-definition.service.mjs +0 -40
  445. package/esm2020/lib/proxy/controllers/price-parameter-type.service.mjs +0 -40
  446. package/esm2020/lib/proxy/controllers/sap-sales-person.service.mjs +0 -27
  447. package/esm2020/lib/proxy/cost-groups/cost-group-role.enum.mjs +0 -10
  448. package/esm2020/lib/proxy/cost-groups/dtos/models.mjs +0 -2
  449. package/esm2020/lib/proxy/cost-groups/index.mjs +0 -4
  450. package/esm2020/lib/proxy/cost-items/cost-item-calculation-type.enum.mjs +0 -9
  451. package/esm2020/lib/proxy/cost-items/dtos/models.mjs +0 -2
  452. package/esm2020/lib/proxy/cost-items/index.mjs +0 -5
  453. package/esm2020/lib/proxy/cost-parameter-categories/cost-parameter-category-parent-code.enum.mjs +0 -11
  454. package/esm2020/lib/proxy/cost-parameter-categories/dtos/index.mjs +0 -2
  455. package/esm2020/lib/proxy/cost-parameter-categories/dtos/models.mjs +0 -2
  456. package/esm2020/lib/proxy/cost-parameter-categories/index.mjs +0 -4
  457. package/esm2020/lib/proxy/cost-parameters/cost-parameter-status.enum.mjs +0 -9
  458. package/esm2020/lib/proxy/cost-parameters/dtos/models.mjs +0 -2
  459. package/esm2020/lib/proxy/cost-parameters/index.mjs +0 -4
  460. package/esm2020/lib/proxy/currencies/currency.enum.mjs +0 -9
  461. package/esm2020/lib/proxy/currencies/index.mjs +0 -2
  462. package/esm2020/lib/proxy/exchange-rates/dtos/models.mjs +0 -2
  463. package/esm2020/lib/proxy/exchange-rates/exchange-rate-source.enum.mjs +0 -8
  464. package/esm2020/lib/proxy/exchange-rates/index.mjs +0 -4
  465. package/esm2020/lib/proxy/index.mjs +0 -22
  466. package/esm2020/lib/proxy/items/dtos/index.mjs +0 -2
  467. package/esm2020/lib/proxy/items/dtos/models.mjs +0 -2
  468. package/esm2020/lib/proxy/items/index.mjs +0 -3
  469. package/esm2020/lib/proxy/packaging-materials/dtos/index.mjs +0 -2
  470. package/esm2020/lib/proxy/packaging-materials/dtos/models.mjs +0 -2
  471. package/esm2020/lib/proxy/packaging-materials/index.mjs +0 -3
  472. package/esm2020/lib/proxy/packaging-prices/dtos/index.mjs +0 -2
  473. package/esm2020/lib/proxy/packaging-prices/dtos/models.mjs +0 -2
  474. package/esm2020/lib/proxy/packaging-prices/index.mjs +0 -3
  475. package/esm2020/lib/proxy/packaging-types/dtos/index.mjs +0 -2
  476. package/esm2020/lib/proxy/packaging-types/dtos/models.mjs +0 -2
  477. package/esm2020/lib/proxy/packaging-types/index.mjs +0 -3
  478. package/esm2020/lib/proxy/pallet-definitions/dtos/models.mjs +0 -2
  479. package/esm2020/lib/proxy/pallet-definitions/index.mjs +0 -3
  480. package/esm2020/lib/proxy/price-parameter-types/dtos/index.mjs +0 -2
  481. package/esm2020/lib/proxy/price-parameter-types/dtos/models.mjs +0 -2
  482. package/esm2020/lib/proxy/price-parameter-types/index.mjs +0 -3
  483. package/esm2020/lib/proxy/sales-persons/dtos/index.mjs +0 -2
  484. package/esm2020/lib/proxy/sales-persons/dtos/models.mjs +0 -2
  485. package/esm2020/lib/proxy/sales-persons/index.mjs +0 -3
  486. package/esm2020/lib/proxy/settings/index.mjs +0 -2
  487. package/esm2020/lib/proxy/settings/models.mjs +0 -2
  488. package/lib/proxy/container-definitions/index.d.ts +0 -2
  489. package/lib/proxy/container-loading-counts/index.d.ts +0 -3
  490. package/lib/proxy/container-loading-scenarios/index.d.ts +0 -3
  491. package/lib/proxy/container-mix-types/index.d.ts +0 -2
  492. package/lib/proxy/container-pallet-capacities/index.d.ts +0 -2
  493. package/lib/proxy/cost-groups/index.d.ts +0 -3
  494. package/lib/proxy/cost-items/index.d.ts +0 -4
  495. package/lib/proxy/cost-parameter-categories/index.d.ts +0 -3
  496. package/lib/proxy/cost-parameters/index.d.ts +0 -3
  497. package/lib/proxy/exchange-rates/index.d.ts +0 -3
  498. package/lib/proxy/index.d.ts +0 -21
  499. package/lib/proxy/items/index.d.ts +0 -2
  500. package/lib/proxy/packaging-materials/index.d.ts +0 -2
  501. package/lib/proxy/packaging-prices/index.d.ts +0 -2
  502. package/lib/proxy/packaging-types/index.d.ts +0 -2
  503. package/lib/proxy/pallet-definitions/index.d.ts +0 -2
  504. package/lib/proxy/price-parameter-types/index.d.ts +0 -2
  505. package/lib/proxy/sales-persons/index.d.ts +0 -2
  506. /package/{lib/proxy/container-definitions → proxy/bl-tracking}/dtos/index.d.ts +0 -0
  507. /package/{lib/proxy/container-loading-counts → proxy/business-partners}/dtos/index.d.ts +0 -0
  508. /package/{lib/proxy/container-loading-scenarios → proxy/carriers}/dtos/index.d.ts +0 -0
  509. /package/{lib/proxy/container-mix-types → proxy/container-definitions}/dtos/index.d.ts +0 -0
  510. /package/{lib/proxy → proxy}/container-definitions/dtos/models.d.ts +0 -0
  511. /package/{lib/proxy/container-pallet-capacities → proxy/container-loading-counts}/dtos/index.d.ts +0 -0
  512. /package/{lib/proxy → proxy}/container-loading-counts/loading-target-kind.enum.d.ts +0 -0
  513. /package/{lib/proxy/cost-groups → proxy/container-loading-scenarios}/dtos/index.d.ts +0 -0
  514. /package/{lib/proxy → proxy}/container-loading-scenarios/dtos/models.d.ts +0 -0
  515. /package/{lib/proxy → proxy}/container-loading-scenarios/pallet-status.enum.d.ts +0 -0
  516. /package/{lib/proxy/cost-items → proxy/container-mix-types}/dtos/index.d.ts +0 -0
  517. /package/{lib/proxy → proxy}/container-mix-types/dtos/models.d.ts +0 -0
  518. /package/{lib/proxy/cost-parameter-categories → proxy/container-pallet-capacities}/dtos/index.d.ts +0 -0
  519. /package/{lib/proxy → proxy}/container-pallet-capacities/dtos/models.d.ts +0 -0
  520. /package/{lib/proxy → proxy}/controllers/container-definition.service.d.ts +0 -0
  521. /package/{lib/proxy → proxy}/controllers/container-loading-scenario.service.d.ts +0 -0
  522. /package/{lib/proxy → proxy}/controllers/container-mix-type.service.d.ts +0 -0
  523. /package/{lib/proxy → proxy}/controllers/container-pallet-capacity.service.d.ts +0 -0
  524. /package/{lib/proxy → proxy}/controllers/cost-group.service.d.ts +0 -0
  525. /package/{lib/proxy → proxy}/controllers/cost-item.service.d.ts +0 -0
  526. /package/{lib/proxy → proxy}/controllers/cost-parameter-category.service.d.ts +0 -0
  527. /package/{lib/proxy → proxy}/controllers/cost-settings.service.d.ts +0 -0
  528. /package/{lib/proxy → proxy}/controllers/exchange-rate.service.d.ts +0 -0
  529. /package/{lib/proxy → proxy}/controllers/item.service.d.ts +0 -0
  530. /package/{lib/proxy → proxy}/controllers/packaging-material.service.d.ts +0 -0
  531. /package/{lib/proxy → proxy}/controllers/packaging-price.service.d.ts +0 -0
  532. /package/{lib/proxy → proxy}/controllers/packaging-type.service.d.ts +0 -0
  533. /package/{lib/proxy → proxy}/controllers/pallet-definition.service.d.ts +0 -0
  534. /package/{lib/proxy → proxy}/controllers/price-parameter-type.service.d.ts +0 -0
  535. /package/{lib/proxy → proxy}/controllers/sap-sales-person.service.d.ts +0 -0
  536. /package/{lib/proxy → proxy}/cost-groups/cost-group-role.enum.d.ts +0 -0
  537. /package/{lib/proxy/cost-parameters → proxy/cost-groups}/dtos/index.d.ts +0 -0
  538. /package/{lib/proxy → proxy}/cost-groups/dtos/models.d.ts +0 -0
  539. /package/{lib/proxy → proxy}/cost-items/cost-item-calculation-type.enum.d.ts +0 -0
  540. /package/{lib/proxy → proxy}/cost-items/cost-item-system-code.enum.d.ts +0 -0
  541. /package/{lib/proxy/exchange-rates → proxy/cost-items}/dtos/index.d.ts +0 -0
  542. /package/{lib/proxy → proxy}/cost-items/dtos/models.d.ts +0 -0
  543. /package/{lib/proxy/items → proxy/cost-parameter-categories}/dtos/index.d.ts +0 -0
  544. /package/{lib/proxy → proxy}/cost-parameter-categories/dtos/models.d.ts +0 -0
  545. /package/{lib/proxy → proxy}/cost-parameters/cost-parameter-status.enum.d.ts +0 -0
  546. /package/{lib/proxy/packaging-materials → proxy/cost-parameters}/dtos/index.d.ts +0 -0
  547. /package/{lib/proxy → proxy}/currencies/currency.enum.d.ts +0 -0
  548. /package/{lib/proxy → proxy}/currencies/index.d.ts +0 -0
  549. /package/{lib/proxy/packaging-prices → proxy/destination-ports}/dtos/index.d.ts +0 -0
  550. /package/{lib/proxy/packaging-types → proxy/exchange-rates}/dtos/index.d.ts +0 -0
  551. /package/{lib/proxy → proxy}/exchange-rates/dtos/models.d.ts +0 -0
  552. /package/{lib/proxy → proxy}/exchange-rates/exchange-rate-source.enum.d.ts +0 -0
  553. /package/{lib/proxy/pallet-definitions → proxy/fob-inland-definitions}/dtos/index.d.ts +0 -0
  554. /package/{lib/proxy/price-parameter-types → proxy/freight-offers}/dtos/index.d.ts +0 -0
  555. /package/{lib/proxy/sales-persons → proxy/incoterms}/dtos/index.d.ts +0 -0
  556. /package/{lib/proxy/settings → proxy/item-package-groups/dtos}/index.d.ts +0 -0
  557. /package/{lib/proxy → proxy}/items/dtos/models.d.ts +0 -0
  558. /package/{lib/proxy → proxy}/packaging-materials/dtos/models.d.ts +0 -0
  559. /package/{lib/proxy → proxy}/packaging-prices/dtos/models.d.ts +0 -0
  560. /package/{lib/proxy → proxy}/packaging-types/dtos/models.d.ts +0 -0
  561. /package/{lib/proxy → proxy}/pallet-definitions/dtos/models.d.ts +0 -0
  562. /package/{lib/proxy → proxy}/price-parameter-types/dtos/models.d.ts +0 -0
  563. /package/{lib/proxy → proxy}/sales-persons/dtos/models.d.ts +0 -0
  564. /package/{lib/proxy → proxy}/settings/models.d.ts +0 -0
  565. /package/{src/lib/proxy → proxy/src}/README.md +0 -0
@@ -0,0 +1,181 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import { forkJoin, of } from 'rxjs';
4
+ import { finalize } from 'rxjs/operators';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/forms";
7
+ import * as i2 from "@hitsoft/kadooglu-keops/proxy";
8
+ import * as i3 from "@angular/common";
9
+ import * as i4 from "@abp/ng.core";
10
+ import * as i5 from "@abp/ng.theme.shared";
11
+ import * as i6 from "devextreme-angular";
12
+ /**
13
+ * Navlun teklifi oluştur/güncelle formu.
14
+ * Nakliye firması, hat ve POS alanları master tablolardan seçim dropdown'u olarak sunulur.
15
+ * Ülke seçimi değiştiğinde varış limanı listesi cascade olarak yeniden yüklenir.
16
+ */
17
+ export class FreightOfferFormComponent {
18
+ constructor(fb, service, carrierService, lineService, loadingPortService, destinationPortService) {
19
+ this.fb = fb;
20
+ this.service = service;
21
+ this.carrierService = carrierService;
22
+ this.lineService = lineService;
23
+ this.loadingPortService = loadingPortService;
24
+ this.destinationPortService = destinationPortService;
25
+ this.visible = false;
26
+ this.mode = 'create';
27
+ this.current = null;
28
+ this.countries = [];
29
+ this.usdRate = 0;
30
+ this.visibleChange = new EventEmitter();
31
+ this.saved = new EventEmitter();
32
+ this.saving = false;
33
+ this.loading = true;
34
+ this.carriers = [];
35
+ this.lines = [];
36
+ this.loadingPorts = [];
37
+ this.containerDefinitions = [];
38
+ this.filteredPorts = [];
39
+ }
40
+ ngOnInit() {
41
+ const destPorts$ = this.current?.destCountryCode
42
+ ? this.destinationPortService.getLookupByCountry(this.current.destCountryCode)
43
+ : of([]);
44
+ forkJoin({
45
+ carriers: this.carrierService.getList(),
46
+ lines: this.lineService.getList(),
47
+ loadingPorts: this.loadingPortService.getList(),
48
+ containerDefs: this.service.getContainerDefinitionsLookup(),
49
+ destPorts: destPorts$,
50
+ }).subscribe(result => {
51
+ this.carriers = result.carriers;
52
+ this.lines = result.lines;
53
+ this.loadingPorts = result.loadingPorts;
54
+ this.containerDefinitions = result.containerDefs.filter(d => d.isActive);
55
+ this.filteredPorts = result.destPorts;
56
+ this.buildForm();
57
+ this.loading = false;
58
+ });
59
+ }
60
+ ngOnChanges(changes) {
61
+ // Yalnızca form açıkken kullanıcı ülke değiştirirse ilgili port listesini sıfırla
62
+ if (changes['current'] && !changes['current'].isFirstChange()) {
63
+ if (this.current?.destCountryCode) {
64
+ this.loadPortsByCountry(this.current.destCountryCode);
65
+ }
66
+ else {
67
+ this.filteredPorts = [];
68
+ }
69
+ }
70
+ }
71
+ onCountryChange(countryCode) {
72
+ this.form.get('destPortCode')?.setValue('');
73
+ this.filteredPorts = [];
74
+ if (countryCode) {
75
+ this.loadPortsByCountry(countryCode);
76
+ }
77
+ }
78
+ loadPortsByCountry(countryCode) {
79
+ this.destinationPortService.getLookupByCountry(countryCode).subscribe(data => {
80
+ this.filteredPorts = data;
81
+ // *ngFor options DOM'a eklendikten sonra (bir tick sonra) değeri yeniden ata
82
+ const saved = this.form?.get('destPortCode')?.value;
83
+ if (saved) {
84
+ setTimeout(() => this.form?.get('destPortCode')?.setValue(saved, { emitEvent: false }));
85
+ }
86
+ });
87
+ }
88
+ get linesArray() {
89
+ return this.form.get('lines');
90
+ }
91
+ buildLineGroup(line) {
92
+ return this.fb.group({
93
+ containerTypeCode: [line?.containerTypeCode ?? '', Validators.required],
94
+ freightUsd: [line?.freightUsd ?? null, [Validators.required, Validators.min(0)]],
95
+ portLocalUsd: [line?.portLocalUsd ?? null, [Validators.required, Validators.min(0)]],
96
+ inlandTry: [line?.inlandTry ?? null, [Validators.required, Validators.min(0)]],
97
+ });
98
+ }
99
+ buildForm() {
100
+ const existingLines = this.current?.lines ?? [];
101
+ const lineGroups = existingLines.length > 0
102
+ ? existingLines.map(l => this.buildLineGroup(l))
103
+ : this.containerDefinitions.map(cd => this.buildLineGroup({ containerTypeCode: cd.code }));
104
+ this.form = this.fb.group({
105
+ offerDate: [this.current?.offerDate ?? new Date().toISOString().split('T')[0], Validators.required],
106
+ validFrom: [this.current?.validFrom ?? '', Validators.required],
107
+ validTo: [this.current?.validTo ?? '', Validators.required],
108
+ carrierBpCode: [this.current?.carrierBpCode ?? '', Validators.required],
109
+ lineName: [this.current?.lineName ?? '', Validators.required],
110
+ posCode: [this.current?.posCode ?? '', Validators.required],
111
+ destCountryCode: [this.current?.destCountryCode ?? '', Validators.required],
112
+ destPortCode: [this.current?.destPortCode ?? '', Validators.required],
113
+ transitDays: [this.current?.transitDays ?? 0, [Validators.required, Validators.min(0)]],
114
+ freeTime: [this.current?.freeTime ?? null],
115
+ lines: this.fb.array(lineGroups),
116
+ });
117
+ }
118
+ getInlandUsd(index) {
119
+ if (!this.usdRate)
120
+ return 0;
121
+ return (this.linesArray.at(index).value.inlandTry || 0) / this.usdRate;
122
+ }
123
+ getLineTotalUsd(index) {
124
+ const v = this.linesArray.at(index).value;
125
+ return (v.freightUsd || 0) + (v.portLocalUsd || 0) + this.getInlandUsd(index);
126
+ }
127
+ addLine() {
128
+ this.linesArray.push(this.buildLineGroup());
129
+ }
130
+ removeLine(index) {
131
+ this.linesArray.removeAt(index);
132
+ }
133
+ get title() {
134
+ return this.mode === 'create' ? 'Keops::FreightOffers:CreateTitle' : 'Keops::FreightOffers:EditTitle';
135
+ }
136
+ onVisibleChange(value) {
137
+ this.visible = value;
138
+ this.visibleChange.emit(value);
139
+ }
140
+ save() {
141
+ if (this.saving)
142
+ return;
143
+ if (this.form.invalid) {
144
+ this.form.markAllAsTouched();
145
+ return;
146
+ }
147
+ const value = this.form.value;
148
+ this.saving = true;
149
+ const request$ = this.mode === 'create'
150
+ ? this.service.create(value)
151
+ : this.service.update(this.current.code, value);
152
+ request$.pipe(finalize(() => (this.saving = false))).subscribe({
153
+ next: () => {
154
+ this.saved.emit();
155
+ this.visible = false;
156
+ this.visibleChange.emit(false);
157
+ },
158
+ });
159
+ }
160
+ }
161
+ FreightOfferFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FreightOfferFormComponent, deps: [{ token: i1.FormBuilder }, { token: i2.FreightOfferService }, { token: i2.CarrierService }, { token: i2.LineService }, { token: i2.PosService }, { token: i2.DestinationPortService }], target: i0.ɵɵFactoryTarget.Component });
162
+ FreightOfferFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FreightOfferFormComponent, selector: "lib-freight-offer-form", inputs: { visible: "visible", mode: "mode", current: "current", countries: "countries", usdRate: "usdRate" }, outputs: { visibleChange: "visibleChange", saved: "saved" }, usesOnChanges: true, ngImport: i0, template: "<abp-modal [(visible)]=\"visible\" (visibleChange)=\"onVisibleChange($event)\" [busy]=\"saving\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ title | abpLocalization }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <div *ngIf=\"loading\" class=\"text-center py-5\">\r\n <div class=\"spinner-border text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">Y\u00FCkleniyor...</span>\r\n </div>\r\n </div>\r\n <form *ngIf=\"!loading\" [formGroup]=\"form\" (ngSubmit)=\"save()\">\r\n <div class=\"d-flex justify-content-end mb-2\" *ngIf=\"usdRate > 0\">\r\n <span class=\"badge bg-secondary fs-6\">\r\n <i class=\"fa fa-dollar-sign me-1\"></i>1 USD = {{ usdRate | number:'1.4-4' }} TRY\r\n </span>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"offerDate\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:OfferDate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-date-box\r\n id=\"offerDate\"\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"offerDate\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"validFrom\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:ValidFrom' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-date-box\r\n id=\"validFrom\"\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"validFrom\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"validTo\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:ValidTo' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-date-box\r\n id=\"validTo\"\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"validTo\"\r\n [min]=\"form.get('validFrom')?.value || null\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"carrierBpCode\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:CarrierBpCode' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"carrierBpCode\" class=\"form-select\" formControlName=\"carrierBpCode\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let c of carriers\" [value]=\"c.code\">{{ c.name }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"lineName\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:LineName' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"lineName\" class=\"form-select\" formControlName=\"lineName\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let l of lines\" [value]=\"l.code\">{{ l.name }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"posCode\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:PosCode' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"posCode\" class=\"form-select\" formControlName=\"posCode\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let p of loadingPorts\" [value]=\"p.code\">{{ p.name }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"destCountryCode\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:DestCountryCode' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"destCountryCode\" class=\"form-select\" formControlName=\"destCountryCode\"\r\n (change)=\"onCountryChange($any($event.target).value)\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let c of countries\" [value]=\"c.code\">{{ c.name }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"destPortCode\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:DestPortCode' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"destPortCode\" class=\"form-select\" formControlName=\"destPortCode\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let p of filteredPorts\" [value]=\"p.code\">{{ p.portName }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"transitDays\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:TransitDays' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <input\r\n id=\"transitDays\"\r\n type=\"number\"\r\n min=\"0\"\r\n class=\"form-control\"\r\n formControlName=\"transitDays\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"freeTime\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:FreeTime' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"freeTime\"\r\n type=\"number\"\r\n min=\"0\"\r\n class=\"form-control\"\r\n formControlName=\"freeTime\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-4\">\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\r\n <div class=\"border-start border-4 border-primary ps-3\">\r\n <span class=\"fw-bold text-dark\" style=\"font-size: 1rem;\">{{ 'Keops::FreightOffers:ContainerInfo' | abpLocalization }}</span>\r\n <div class=\"text-muted\" style=\"font-size: 0.75rem;\">{{ linesArray.length }} sat\u0131r</div>\r\n </div>\r\n <!-- <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"addLine()\">\r\n <i class=\"fa fa-plus me-1\"></i>{{ 'Keops::FreightOffers:AddLine' | abpLocalization }}\r\n </button> -->\r\n </div>\r\n <div class=\"border rounded overflow-hidden\">\r\n <table class=\"table table-bordered table-sm align-middle mb-0\" formArrayName=\"lines\">\r\n <thead class=\"table-light\">\r\n <tr>\r\n <th>{{ 'Keops::FreightOffers:ContainerTypeCode' | abpLocalization }} <span class=\"text-danger\">*</span></th>\r\n <th>{{ 'Keops::FreightOffers:FreightUsd' | abpLocalization }}</th>\r\n <th>{{ 'Keops::FreightOffers:PortLocalUsd' | abpLocalization }}</th>\r\n <th>{{ 'Keops::FreightOffers:InlandTry' | abpLocalization }}</th>\r\n <th>{{ 'Keops::FreightOffers:TotalUsd' | abpLocalization }}</th>\r\n <th class=\"text-center\" style=\"width: 50px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let lineCtrl of linesArray.controls; let i = index\" [formGroupName]=\"i\">\r\n <td>\r\n <select class=\"form-select form-select-sm\" formControlName=\"containerTypeCode\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let c of containerDefinitions\" [value]=\"c.code\">{{ c.name }}</option>\r\n </select>\r\n </td>\r\n <td><input type=\"number\" step=\"0.01\" min=\"0\" class=\"form-control form-control-sm\" formControlName=\"freightUsd\" /></td>\r\n <td><input type=\"number\" step=\"0.01\" min=\"0\" class=\"form-control form-control-sm\" formControlName=\"portLocalUsd\" /></td>\r\n <td>\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"number\" step=\"0.01\" min=\"0\" class=\"form-control form-control-sm\" formControlName=\"inlandTry\" />\r\n <span class=\"input-group-text text-muted\" [style.visibility]=\"usdRate > 0 ? 'visible' : 'hidden'\">\r\n \u2248 {{ getInlandUsd(i) | number:'1.2-2' }} $\r\n </span>\r\n </div>\r\n </td>\r\n <td><input type=\"text\" class=\"form-control form-control-sm bg-light\" readonly [value]=\"getLineTotalUsd(i) | number:'1.2-2'\" /></td>\r\n <td class=\"text-center\">\r\n <button type=\"button\" class=\"btn btn-sm btn-outline-danger\" (click)=\"removeLine(i)\">\r\n <i class=\"fa fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"linesArray.length === 0\">\r\n <td colspan=\"6\" class=\"text-center text-muted py-3\">\r\n <small><i class=\"fa fa-info-circle me-1\"></i>{{ 'Keops::FreightOffers:AddLine' | abpLocalization }}</small>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button abpClose type=\"button\" class=\"btn btn-secondary\">{{ 'AbpUi::Cancel' | abpLocalization }}</button>\r\n <abp-button iconClass=\"fa fa-check\" buttonClass=\"btn btn-primary\" [loading]=\"saving\" [disabled]=\"loading || saving || form?.invalid\" (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i4.FormSubmitDirective, selector: "form[ngSubmit][formGroup]", inputs: ["debounce", "notValidateOnSubmit", "markAsDirtyWhenSubmit"], outputs: ["ngSubmit"] }, { kind: "component", type: i5.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i5.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i5.ModalCloseDirective, selector: "[abpClose]" }, { kind: "component", type: i6.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "todayButtonText", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "todayButtonTextChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }, { kind: "pipe", type: i4.LocalizationPipe, name: "abpLocalization" }] });
163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FreightOfferFormComponent, decorators: [{
164
+ type: Component,
165
+ args: [{ selector: 'lib-freight-offer-form', template: "<abp-modal [(visible)]=\"visible\" (visibleChange)=\"onVisibleChange($event)\" [busy]=\"saving\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ title | abpLocalization }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <div *ngIf=\"loading\" class=\"text-center py-5\">\r\n <div class=\"spinner-border text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">Y\u00FCkleniyor...</span>\r\n </div>\r\n </div>\r\n <form *ngIf=\"!loading\" [formGroup]=\"form\" (ngSubmit)=\"save()\">\r\n <div class=\"d-flex justify-content-end mb-2\" *ngIf=\"usdRate > 0\">\r\n <span class=\"badge bg-secondary fs-6\">\r\n <i class=\"fa fa-dollar-sign me-1\"></i>1 USD = {{ usdRate | number:'1.4-4' }} TRY\r\n </span>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"offerDate\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:OfferDate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-date-box\r\n id=\"offerDate\"\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"offerDate\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"validFrom\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:ValidFrom' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-date-box\r\n id=\"validFrom\"\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"validFrom\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"validTo\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:ValidTo' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-date-box\r\n id=\"validTo\"\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"validTo\"\r\n [min]=\"form.get('validFrom')?.value || null\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"carrierBpCode\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:CarrierBpCode' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"carrierBpCode\" class=\"form-select\" formControlName=\"carrierBpCode\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let c of carriers\" [value]=\"c.code\">{{ c.name }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"lineName\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:LineName' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"lineName\" class=\"form-select\" formControlName=\"lineName\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let l of lines\" [value]=\"l.code\">{{ l.name }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"posCode\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:PosCode' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"posCode\" class=\"form-select\" formControlName=\"posCode\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let p of loadingPorts\" [value]=\"p.code\">{{ p.name }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"destCountryCode\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:DestCountryCode' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"destCountryCode\" class=\"form-select\" formControlName=\"destCountryCode\"\r\n (change)=\"onCountryChange($any($event.target).value)\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let c of countries\" [value]=\"c.code\">{{ c.name }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"destPortCode\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:DestPortCode' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"destPortCode\" class=\"form-select\" formControlName=\"destPortCode\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let p of filteredPorts\" [value]=\"p.code\">{{ p.portName }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"transitDays\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:TransitDays' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <input\r\n id=\"transitDays\"\r\n type=\"number\"\r\n min=\"0\"\r\n class=\"form-control\"\r\n formControlName=\"transitDays\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"freeTime\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:FreeTime' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"freeTime\"\r\n type=\"number\"\r\n min=\"0\"\r\n class=\"form-control\"\r\n formControlName=\"freeTime\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-4\">\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\r\n <div class=\"border-start border-4 border-primary ps-3\">\r\n <span class=\"fw-bold text-dark\" style=\"font-size: 1rem;\">{{ 'Keops::FreightOffers:ContainerInfo' | abpLocalization }}</span>\r\n <div class=\"text-muted\" style=\"font-size: 0.75rem;\">{{ linesArray.length }} sat\u0131r</div>\r\n </div>\r\n <!-- <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"addLine()\">\r\n <i class=\"fa fa-plus me-1\"></i>{{ 'Keops::FreightOffers:AddLine' | abpLocalization }}\r\n </button> -->\r\n </div>\r\n <div class=\"border rounded overflow-hidden\">\r\n <table class=\"table table-bordered table-sm align-middle mb-0\" formArrayName=\"lines\">\r\n <thead class=\"table-light\">\r\n <tr>\r\n <th>{{ 'Keops::FreightOffers:ContainerTypeCode' | abpLocalization }} <span class=\"text-danger\">*</span></th>\r\n <th>{{ 'Keops::FreightOffers:FreightUsd' | abpLocalization }}</th>\r\n <th>{{ 'Keops::FreightOffers:PortLocalUsd' | abpLocalization }}</th>\r\n <th>{{ 'Keops::FreightOffers:InlandTry' | abpLocalization }}</th>\r\n <th>{{ 'Keops::FreightOffers:TotalUsd' | abpLocalization }}</th>\r\n <th class=\"text-center\" style=\"width: 50px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let lineCtrl of linesArray.controls; let i = index\" [formGroupName]=\"i\">\r\n <td>\r\n <select class=\"form-select form-select-sm\" formControlName=\"containerTypeCode\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let c of containerDefinitions\" [value]=\"c.code\">{{ c.name }}</option>\r\n </select>\r\n </td>\r\n <td><input type=\"number\" step=\"0.01\" min=\"0\" class=\"form-control form-control-sm\" formControlName=\"freightUsd\" /></td>\r\n <td><input type=\"number\" step=\"0.01\" min=\"0\" class=\"form-control form-control-sm\" formControlName=\"portLocalUsd\" /></td>\r\n <td>\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"number\" step=\"0.01\" min=\"0\" class=\"form-control form-control-sm\" formControlName=\"inlandTry\" />\r\n <span class=\"input-group-text text-muted\" [style.visibility]=\"usdRate > 0 ? 'visible' : 'hidden'\">\r\n \u2248 {{ getInlandUsd(i) | number:'1.2-2' }} $\r\n </span>\r\n </div>\r\n </td>\r\n <td><input type=\"text\" class=\"form-control form-control-sm bg-light\" readonly [value]=\"getLineTotalUsd(i) | number:'1.2-2'\" /></td>\r\n <td class=\"text-center\">\r\n <button type=\"button\" class=\"btn btn-sm btn-outline-danger\" (click)=\"removeLine(i)\">\r\n <i class=\"fa fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"linesArray.length === 0\">\r\n <td colspan=\"6\" class=\"text-center text-muted py-3\">\r\n <small><i class=\"fa fa-info-circle me-1\"></i>{{ 'Keops::FreightOffers:AddLine' | abpLocalization }}</small>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button abpClose type=\"button\" class=\"btn btn-secondary\">{{ 'AbpUi::Cancel' | abpLocalization }}</button>\r\n <abp-button iconClass=\"fa fa-check\" buttonClass=\"btn btn-primary\" [loading]=\"saving\" [disabled]=\"loading || saving || form?.invalid\" (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
166
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.FreightOfferService }, { type: i2.CarrierService }, { type: i2.LineService }, { type: i2.PosService }, { type: i2.DestinationPortService }]; }, propDecorators: { visible: [{
167
+ type: Input
168
+ }], mode: [{
169
+ type: Input
170
+ }], current: [{
171
+ type: Input
172
+ }], countries: [{
173
+ type: Input
174
+ }], usdRate: [{
175
+ type: Input
176
+ }], visibleChange: [{
177
+ type: Output
178
+ }], saved: [{
179
+ type: Output
180
+ }] } });
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlaWdodC1vZmZlci1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2thZG9vZ2x1LWtlb3BzL3NyYy9saWIvZmVhdHVyZXMvZnJlaWdodC1vZmZlcnMvY29tcG9uZW50cy9mcmVpZ2h0LW9mZmVyLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUta2VvcHMvc3JjL2xpYi9mZWF0dXJlcy9mcmVpZ2h0LW9mZmVycy9jb21wb25lbnRzL2ZyZWlnaHQtb2ZmZXItZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFxQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7O0FBWTFDOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8seUJBQXlCO0lBb0JwQyxZQUNtQixFQUFlLEVBQ2YsT0FBNEIsRUFDNUIsY0FBOEIsRUFDOUIsV0FBd0IsRUFDeEIsa0JBQThCLEVBQzlCLHNCQUE4QztRQUw5QyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBWTtRQUM5QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBekJ4RCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFNBQUksR0FBc0IsUUFB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QUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM3RCxJQUFJLEVBQUUsR0FBRyxFQUFFO2dCQUNULElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7c0hBbktVLHlCQUF5QjswR0FBekIseUJBQXlCLDhQQ3BCdEMsaXNWQStOQTsyRkQzTWEseUJBQXlCO2tCQVRyQyxTQUFTOytCQUNFLHdCQUF3Qjt5UEFTekIsT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENhcnJpZXJTZXJ2aWNlLCBEZXN0aW5hdGlvblBvcnRTZXJ2aWNlLCBGcmVpZ2h0T2ZmZXJTZXJ2aWNlLCBMaW5lU2VydmljZSwgUG9zU2VydmljZSB9IGZyb20gJ0BoaXRzb2Z0L2thZG9vZ2x1LWtlb3BzL3Byb3h5JztcclxuaW1wb3J0IHR5cGUgeyBDb250YWluZXJEZWZpbml0aW9uTG9va3VwRHRvLCBDb3VudHJ5TG9va3VwRHRvLCBGcmVpZ2h0T2ZmZXJEdG8gfSBmcm9tICdAaGl0c29mdC9rYWRvb2dsdS1rZW9wcy9wcm94eSc7XHJcbmltcG9ydCB0eXBlIHsgQ2FycmllckR0byB9IGZyb20gJ0BoaXRzb2Z0L2thZG9vZ2x1LWtlb3BzL3Byb3h5JztcclxuaW1wb3J0IHR5cGUgeyBMaW5lRHRvIH0gZnJvbSAnQGhpdHNvZnQva2Fkb29nbHUta2VvcHMvcHJveHknO1xyXG5pbXBvcnQgdHlwZSB7IFBvc0R0byB9IGZyb20gJ0BoaXRzb2Z0L2thZG9vZ2x1LWtlb3BzL3Byb3h5JztcclxuaW1wb3J0IHR5cGUgeyBEZXN0aW5hdGlvblBvcnRMb29rdXBEdG8gfSBmcm9tICdAaGl0c29mdC9rYWRvb2dsdS1rZW9wcy9wcm94eSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1mcmVpZ2h0LW9mZmVyLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mcmVpZ2h0LW9mZmVyLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG4vKipcclxuICogTmF2bHVuIHRla2xpZmkgb2x1xZ90dXIvZ8O8bmNlbGxlIGZvcm11LlxyXG4gKiBOYWtsaXllIGZpcm1hc8SxLCBoYXQgdmUgUE9TIGFsYW5sYXLEsSBtYXN0ZXIgdGFibG9sYXJkYW4gc2XDp2ltIGRyb3Bkb3duJ3Ugb2xhcmFrIHN1bnVsdXIuXHJcbiAqIMOcbGtlIHNlw6dpbWkgZGXEn2nFn3RpxJ9pbmRlIHZhcsSxxZ8gbGltYW7EsSBsaXN0ZXNpIGNhc2NhZGUgb2xhcmFrIHllbmlkZW4gecO8a2xlbmlyLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEZyZWlnaHRPZmZlckZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgdmlzaWJsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG1vZGU6ICdjcmVhdGUnIHwgJ2VkaXQnID0gJ2NyZWF0ZSc7XHJcbiAgQElucHV0KCkgY3VycmVudDogRnJlaWdodE9mZmVyRHRvIHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgY291bnRyaWVzOiBDb3VudHJ5TG9va3VwRHRvW10gPSBbXTtcclxuICBASW5wdXQoKSB1c2RSYXRlID0gMDtcclxuXHJcbiAgQE91dHB1dCgpIHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIHNhdmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBmb3JtITogRm9ybUdyb3VwO1xyXG4gIHNhdmluZyA9IGZhbHNlO1xyXG4gIGxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICBjYXJyaWVyczogQ2FycmllckR0b1tdID0gW107XHJcbiAgbGluZXM6IExpbmVEdG9bXSA9IFtdO1xyXG4gIGxvYWRpbmdQb3J0czogUG9zRHRvW10gPSBbXTtcclxuICBjb250YWluZXJEZWZpbml0aW9uczogQ29udGFpbmVyRGVmaW5pdGlvbkxvb2t1cER0b1tdID0gW107XHJcbiAgZmlsdGVyZWRQb3J0czogRGVzdGluYXRpb25Qb3J0TG9va3VwRHRvW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VydmljZTogRnJlaWdodE9mZmVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FycmllclNlcnZpY2U6IENhcnJpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsaW5lU2VydmljZTogTGluZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvYWRpbmdQb3J0U2VydmljZTogUG9zU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdGluYXRpb25Qb3J0U2VydmljZTogRGVzdGluYXRpb25Qb3J0U2VydmljZSxcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZGVzdFBvcnRzJCA9IHRoaXMuY3VycmVudD8uZGVzdENvdW50cnlDb2RlXHJcbiAgICAgID8gdGhpcy5kZXN0aW5hdGlvblBvcnRTZXJ2aWNlLmdldExvb2t1cEJ5Q291bnRyeSh0aGlzLmN1cnJlbnQuZGVzdENvdW50cnlDb2RlKVxyXG4gICAgICA6IG9mKFtdIGFzIERlc3RpbmF0aW9uUG9ydExvb2t1cER0b1tdKTtcclxuXHJcbiAgICBmb3JrSm9pbih7XHJcbiAgICAgIGNhcnJpZXJzOiB0aGlzLmNhcnJpZXJTZXJ2aWNlLmdldExpc3QoKSxcclxuICAgICAgbGluZXM6IHRoaXMubGluZVNlcnZpY2UuZ2V0TGlzdCgpLFxyXG4gICAgICBsb2FkaW5nUG9ydHM6IHRoaXMubG9hZGluZ1BvcnRTZXJ2aWNlLmdldExpc3QoKSxcclxuICAgICAgY29udGFpbmVyRGVmczogdGhpcy5zZXJ2aWNlLmdldENvbnRhaW5lckRlZmluaXRpb25zTG9va3VwKCksXHJcbiAgICAgIGRlc3RQb3J0czogZGVzdFBvcnRzJCxcclxuICAgIH0pLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLmNhcnJpZXJzID0gcmVzdWx0LmNhcnJpZXJzO1xyXG4gICAgICB0aGlzLmxpbmVzID0gcmVzdWx0LmxpbmVzO1xyXG4gICAgICB0aGlzLmxvYWRpbmdQb3J0cyA9IHJlc3VsdC5sb2FkaW5nUG9ydHM7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyRGVmaW5pdGlvbnMgPSByZXN1bHQuY29udGFpbmVyRGVmcy5maWx0ZXIoZCA9PiBkLmlzQWN0aXZlKTtcclxuICAgICAgdGhpcy5maWx0ZXJlZFBvcnRzID0gcmVzdWx0LmRlc3RQb3J0cztcclxuICAgICAgdGhpcy5idWlsZEZvcm0oKTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIC8vIFlhbG7EsXpjYSBmb3JtIGHDp8Sxa2tlbiBrdWxsYW7EsWPEsSDDvGxrZSBkZcSfacWfdGlyaXJzZSBpbGdpbGkgcG9ydCBsaXN0ZXNpbmkgc8SxZsSxcmxhXHJcbiAgICBpZiAoY2hhbmdlc1snY3VycmVudCddICYmICFjaGFuZ2VzWydjdXJyZW50J10uaXNGaXJzdENoYW5nZSgpKSB7XHJcbiAgICAgIGlmICh0aGlzLmN1cnJlbnQ/LmRlc3RDb3VudHJ5Q29kZSkge1xyXG4gICAgICAgIHRoaXMubG9hZFBvcnRzQnlDb3VudHJ5KHRoaXMuY3VycmVudC5kZXN0Q291bnRyeUNvZGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRQb3J0cyA9IFtdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNvdW50cnlDaGFuZ2UoY291bnRyeUNvZGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtLmdldCgnZGVzdFBvcnRDb2RlJyk/LnNldFZhbHVlKCcnKTtcclxuICAgIHRoaXMuZmlsdGVyZWRQb3J0cyA9IFtdO1xyXG4gICAgaWYgKGNvdW50cnlDb2RlKSB7XHJcbiAgICAgIHRoaXMubG9hZFBvcnRzQnlDb3VudHJ5KGNvdW50cnlDb2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZFBvcnRzQnlDb3VudHJ5KGNvdW50cnlDb2RlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdGluYXRpb25Qb3J0U2VydmljZS5nZXRMb29rdXBCeUNvdW50cnkoY291bnRyeUNvZGUpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgdGhpcy5maWx0ZXJlZFBvcnRzID0gZGF0YTtcclxuICAgICAgLy8gKm5nRm9yIG9wdGlvbnMgRE9NJ2EgZWtsZW5kaWt0ZW4gc29ucmEgKGJpciB0aWNrIHNvbnJhKSBkZcSfZXJpIHllbmlkZW4gYXRhXHJcbiAgICAgIGNvbnN0IHNhdmVkID0gdGhpcy5mb3JtPy5nZXQoJ2Rlc3RQb3J0Q29kZScpPy52YWx1ZTtcclxuICAgICAgaWYgKHNhdmVkKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvcm0/LmdldCgnZGVzdFBvcnRDb2RlJyk/LnNldFZhbHVlKHNhdmVkLCB7IGVtaXRFdmVudDogZmFsc2UgfSkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBsaW5lc0FycmF5KCk6IEZvcm1BcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnbGluZXMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkTGluZUdyb3VwKGxpbmU/OiBhbnkpOiBGb3JtR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBjb250YWluZXJUeXBlQ29kZTogW2xpbmU/LmNvbnRhaW5lclR5cGVDb2RlID8/ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgZnJlaWdodFVzZDogW2xpbmU/LmZyZWlnaHRVc2QgPz8gbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluKDApXV0sXHJcbiAgICAgIHBvcnRMb2NhbFVzZDogW2xpbmU/LnBvcnRMb2NhbFVzZCA/PyBudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW4oMCldXSxcclxuICAgICAgaW5sYW5kVHJ5OiBbbGluZT8uaW5sYW5kVHJ5ID8/IG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbigwKV1dLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkRm9ybSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGV4aXN0aW5nTGluZXMgPSB0aGlzLmN1cnJlbnQ/LmxpbmVzID8/IFtdO1xyXG4gICAgY29uc3QgbGluZUdyb3VwcyA9IGV4aXN0aW5nTGluZXMubGVuZ3RoID4gMFxyXG4gICAgICA/IGV4aXN0aW5nTGluZXMubWFwKGwgPT4gdGhpcy5idWlsZExpbmVHcm91cChsKSlcclxuICAgICAgOiB0aGlzLmNvbnRhaW5lckRlZmluaXRpb25zLm1hcChjZCA9PiB0aGlzLmJ1aWxkTGluZUdyb3VwKHsgY29udGFpbmVyVHlwZUNvZGU6IGNkLmNvZGUgfSkpO1xyXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIG9mZmVyRGF0ZTogW3RoaXMuY3VycmVudD8ub2ZmZXJEYXRlID8/IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgdmFsaWRGcm9tOiBbdGhpcy5jdXJyZW50Py52YWxpZEZyb20gPz8gJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICB2YWxpZFRvOiBbdGhpcy5jdXJyZW50Py52YWxpZFRvID8/ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgY2FycmllckJwQ29kZTogW3RoaXMuY3VycmVudD8uY2FycmllckJwQ29kZSA/PyAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGxpbmVOYW1lOiBbdGhpcy5jdXJyZW50Py5saW5lTmFtZSA/PyAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIHBvc0NvZGU6IFt0aGlzLmN1cnJlbnQ/LnBvc0NvZGUgPz8gJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBkZXN0Q291bnRyeUNvZGU6IFt0aGlzLmN1cnJlbnQ/LmRlc3RDb3VudHJ5Q29kZSA/PyAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGRlc3RQb3J0Q29kZTogW3RoaXMuY3VycmVudD8uZGVzdFBvcnRDb2RlID8/ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgdHJhbnNpdERheXM6IFt0aGlzLmN1cnJlbnQ/LnRyYW5zaXREYXlzID8/IDAsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbigwKV1dLFxyXG4gICAgICBmcmVlVGltZTogW3RoaXMuY3VycmVudD8uZnJlZVRpbWUgPz8gbnVsbF0sXHJcbiAgICAgIGxpbmVzOiB0aGlzLmZiLmFycmF5KGxpbmVHcm91cHMpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRJbmxhbmRVc2QoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAoIXRoaXMudXNkUmF0ZSkgcmV0dXJuIDA7XHJcbiAgICByZXR1cm4gKHRoaXMubGluZXNBcnJheS5hdChpbmRleCkudmFsdWUuaW5sYW5kVHJ5IHx8IDApIC8gdGhpcy51c2RSYXRlO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGluZVRvdGFsVXNkKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgdiA9IHRoaXMubGluZXNBcnJheS5hdChpbmRleCkudmFsdWU7XHJcbiAgICByZXR1cm4gKHYuZnJlaWdodFVzZCB8fCAwKSArICh2LnBvcnRMb2NhbFVzZCB8fCAwKSArIHRoaXMuZ2V0SW5sYW5kVXNkKGluZGV4KTtcclxuICB9XHJcblxyXG4gIGFkZExpbmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpbmVzQXJyYXkucHVzaCh0aGlzLmJ1aWxkTGluZUdyb3VwKCkpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTGluZShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpbmVzQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnY3JlYXRlJyA/ICdLZW9wczo6RnJlaWdodE9mZmVyczpDcmVhdGVUaXRsZScgOiAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6RWRpdFRpdGxlJztcclxuICB9XHJcblxyXG4gIG9uVmlzaWJsZUNoYW5nZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy52aXNpYmxlID0gdmFsdWU7XHJcbiAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBzYXZlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2F2aW5nKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcclxuICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtLnZhbHVlO1xyXG4gICAgdGhpcy5zYXZpbmcgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3QkID1cclxuICAgICAgdGhpcy5tb2RlID09PSAnY3JlYXRlJ1xyXG4gICAgICAgID8gdGhpcy5zZXJ2aWNlLmNyZWF0ZSh2YWx1ZSlcclxuICAgICAgICA6IHRoaXMuc2VydmljZS51cGRhdGUodGhpcy5jdXJyZW50IS5jb2RlISwgdmFsdWUpO1xyXG5cclxuICAgIHJlcXVlc3QkLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMuc2F2aW5nID0gZmFsc2UpKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2F2ZWQuZW1pdCgpO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8YWJwLW1vZGFsIFsodmlzaWJsZSldPVwidmlzaWJsZVwiICh2aXNpYmxlQ2hhbmdlKT1cIm9uVmlzaWJsZUNoYW5nZSgkZXZlbnQpXCIgW2J1c3ldPVwic2F2aW5nXCIgW29wdGlvbnNdPVwieyBzaXplOiAneGwnIH1cIj5cclxuICA8bmctdGVtcGxhdGUgI2FicEhlYWRlcj5cclxuICAgIDxoMz57eyB0aXRsZSB8IGFicExvY2FsaXphdGlvbiB9fTwvaDM+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxyXG4gICAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPlnDvGtsZW5peW9yLi4uPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGZvcm0gKm5nSWY9XCIhbG9hZGluZ1wiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChuZ1N1Ym1pdCk9XCJzYXZlKClcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG1iLTJcIiAqbmdJZj1cInVzZFJhdGUgPiAwXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1zZWNvbmRhcnkgZnMtNlwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kb2xsYXItc2lnbiBtZS0xXCI+PC9pPjEgVVNEID0ge3sgdXNkUmF0ZSB8IG51bWJlcjonMS40LTQnIH19IFRSWVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJvZmZlckRhdGVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICB7eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6T2ZmZXJEYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZHgtZGF0ZS1ib3hcclxuICAgICAgICAgICAgICBpZD1cIm9mZmVyRGF0ZVwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxyXG4gICAgICAgICAgICAgIGRhdGVTZXJpYWxpemF0aW9uRm9ybWF0PVwieXl5eS1NTS1kZFwiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwib2ZmZXJEYXRlXCJcclxuICAgICAgICAgICAgPjwvZHgtZGF0ZS1ib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ2YWxpZEZyb21cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICB7eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6VmFsaWRGcm9tJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZHgtZGF0ZS1ib3hcclxuICAgICAgICAgICAgICBpZD1cInZhbGlkRnJvbVwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxyXG4gICAgICAgICAgICAgIGRhdGVTZXJpYWxpemF0aW9uRm9ybWF0PVwieXl5eS1NTS1kZFwiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidmFsaWRGcm9tXCJcclxuICAgICAgICAgICAgPjwvZHgtZGF0ZS1ib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ2YWxpZFRvXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAge3sgJ0tlb3BzOjpGcmVpZ2h0T2ZmZXJzOlZhbGlkVG8nIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkeC1kYXRlLWJveFxyXG4gICAgICAgICAgICAgIGlkPVwidmFsaWRUb1wiXHJcbiAgICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxyXG4gICAgICAgICAgICAgIGRhdGVTZXJpYWxpemF0aW9uRm9ybWF0PVwieXl5eS1NTS1kZFwiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidmFsaWRUb1wiXHJcbiAgICAgICAgICAgICAgW21pbl09XCJmb3JtLmdldCgndmFsaWRGcm9tJyk/LnZhbHVlIHx8IG51bGxcIlxyXG4gICAgICAgICAgICA+PC9keC1kYXRlLWJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNhcnJpZXJCcENvZGVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICB7eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6Q2FycmllckJwQ29kZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPHNlbGVjdCBpZD1cImNhcnJpZXJCcENvZGVcIiBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwiY2FycmllckJwQ29kZVwiPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBkaXNhYmxlZCBoaWRkZW4+PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYyBvZiBjYXJyaWVyc1wiIFt2YWx1ZV09XCJjLmNvZGVcIj57eyBjLm5hbWUgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJsaW5lTmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgIHt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpMaW5lTmFtZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPHNlbGVjdCBpZD1cImxpbmVOYW1lXCIgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGZvcm1Db250cm9sTmFtZT1cImxpbmVOYW1lXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIGRpc2FibGVkIGhpZGRlbj48L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsIG9mIGxpbmVzXCIgW3ZhbHVlXT1cImwuY29kZVwiPnt7IGwubmFtZSB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBvc0NvZGVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICB7eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6UG9zQ29kZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPHNlbGVjdCBpZD1cInBvc0NvZGVcIiBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwicG9zQ29kZVwiPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBkaXNhYmxlZCBoaWRkZW4+PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgcCBvZiBsb2FkaW5nUG9ydHNcIiBbdmFsdWVdPVwicC5jb2RlXCI+e3sgcC5uYW1lIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiZGVzdENvdW50cnlDb2RlXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAge3sgJ0tlb3BzOjpGcmVpZ2h0T2ZmZXJzOkRlc3RDb3VudHJ5Q29kZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPHNlbGVjdCBpZD1cImRlc3RDb3VudHJ5Q29kZVwiIGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJkZXN0Q291bnRyeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Db3VudHJ5Q2hhbmdlKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIGRpc2FibGVkIGhpZGRlbj48L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGNvdW50cmllc1wiIFt2YWx1ZV09XCJjLmNvZGVcIj57eyBjLm5hbWUgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZXN0UG9ydENvZGVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICB7eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6RGVzdFBvcnRDb2RlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8c2VsZWN0IGlkPVwiZGVzdFBvcnRDb2RlXCIgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGZvcm1Db250cm9sTmFtZT1cImRlc3RQb3J0Q29kZVwiPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBkaXNhYmxlZCBoaWRkZW4+PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgcCBvZiBmaWx0ZXJlZFBvcnRzXCIgW3ZhbHVlXT1cInAuY29kZVwiPnt7IHAucG9ydE5hbWUgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ0cmFuc2l0RGF5c1wiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgIHt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpUcmFuc2l0RGF5cycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgaWQ9XCJ0cmFuc2l0RGF5c1wiXHJcbiAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRyYW5zaXREYXlzXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZyZWVUaW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAge3sgJ0tlb3BzOjpGcmVpZ2h0T2ZmZXJzOkZyZWVUaW1lJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBpZD1cImZyZWVUaW1lXCJcclxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZnJlZVRpbWVcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXN0YXJ0IGJvcmRlci00IGJvcmRlci1wcmltYXJ5IHBzLTNcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1ib2xkIHRleHQtZGFya1wiIHN0eWxlPVwiZm9udC1zaXplOiAxcmVtO1wiPnt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpDb250YWluZXJJbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMC43NXJlbTtcIj57eyBsaW5lc0FycmF5Lmxlbmd0aCB9fSBzYXTEsXI8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiYWRkTGluZSgpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1cyBtZS0xXCI+PC9pPnt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpBZGRMaW5lJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgPC9idXR0b24+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLXNtIGFsaWduLW1pZGRsZSBtYi0wXCIgZm9ybUFycmF5TmFtZT1cImxpbmVzXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cInRhYmxlLWxpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPHRoPnt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpDb250YWluZXJUeXBlQ29kZScgfCBhYnBMb2NhbGl6YXRpb24gfX0gPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aD57eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6RnJlaWdodFVzZCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoPnt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpQb3J0TG9jYWxVc2QnIHwgYWJwTG9jYWxpemF0aW9uIH19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aD57eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6SW5sYW5kVHJ5JyB8IGFicExvY2FsaXphdGlvbiB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGg+e3sgJ0tlb3BzOjpGcmVpZ2h0T2ZmZXJzOlRvdGFsVXNkJyB8IGFicExvY2FsaXphdGlvbiB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIHN0eWxlPVwid2lkdGg6IDUwcHhcIj48L3RoPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGxpbmVDdHJsIG9mIGxpbmVzQXJyYXkuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiIGZvcm1Db250cm9sTmFtZT1cImNvbnRhaW5lclR5cGVDb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIGRpc2FibGVkIGhpZGRlbj48L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGNvbnRhaW5lckRlZmluaXRpb25zXCIgW3ZhbHVlXT1cImMuY29kZVwiPnt7IGMubmFtZSB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9XCJudW1iZXJcIiBzdGVwPVwiMC4wMVwiIG1pbj1cIjBcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBmb3JtQ29udHJvbE5hbWU9XCJmcmVpZ2h0VXNkXCIgLz48L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPVwibnVtYmVyXCIgc3RlcD1cIjAuMDFcIiBtaW49XCIwXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgZm9ybUNvbnRyb2xOYW1lPVwicG9ydExvY2FsVXNkXCIgLz48L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIHN0ZXA9XCIwLjAxXCIgbWluPVwiMFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIGZvcm1Db250cm9sTmFtZT1cImlubGFuZFRyeVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0IHRleHQtbXV0ZWRcIiBbc3R5bGUudmlzaWJpbGl0eV09XCJ1c2RSYXRlID4gMCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICDiiYgge3sgZ2V0SW5sYW5kVXNkKGkpIHwgbnVtYmVyOicxLjItMicgfX0gJFxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBiZy1saWdodFwiIHJlYWRvbmx5IFt2YWx1ZV09XCJnZXRMaW5lVG90YWxVc2QoaSkgfCBudW1iZXI6JzEuMi0yJ1wiIC8+PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1kYW5nZXJcIiAoY2xpY2spPVwicmVtb3ZlTGluZShpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cImxpbmVzQXJyYXkubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjZcIiBjbGFzcz1cInRleHQtY2VudGVyIHRleHQtbXV0ZWQgcHktM1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c21hbGw+PGkgY2xhc3M9XCJmYSBmYS1pbmZvLWNpcmNsZSBtZS0xXCI+PC9pPnt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpBZGRMaW5lJyB8IGFicExvY2FsaXphdGlvbiB9fTwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cclxuICAgIDxidXR0b24gYWJwQ2xvc2UgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIj57eyAnQWJwVWk6OkNhbmNlbCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L2J1dHRvbj5cclxuICAgIDxhYnAtYnV0dG9uIGljb25DbGFzcz1cImZhIGZhLWNoZWNrXCIgYnV0dG9uQ2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBbbG9hZGluZ109XCJzYXZpbmdcIiBbZGlzYWJsZWRdPVwibG9hZGluZyB8fCBzYXZpbmcgfHwgZm9ybT8uaW52YWxpZFwiIChjbGljayk9XCJzYXZlKClcIj5cclxuICAgICAge3sgJ0FicFVpOjpTYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgPC9hYnAtYnV0dG9uPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvYWJwLW1vZGFsPlxyXG4iXX0=
@@ -0,0 +1,159 @@
1
+ import { Component, ViewChild } from '@angular/core';
2
+ import { DxDataGridComponent } from 'devextreme-angular';
3
+ import { Confirmation } from '@abp/ng.theme.shared';
4
+ import { forkJoin } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@hitsoft/kadooglu-keops/proxy";
7
+ import * as i2 from "@abp/ng.theme.shared";
8
+ import * as i3 from "@angular/common";
9
+ import * as i4 from "@angular/forms";
10
+ import * as i5 from "@abp/ng.core";
11
+ import * as i6 from "@abp/ng.components/page";
12
+ import * as i7 from "@ng-bootstrap/ng-bootstrap";
13
+ import * as i8 from "devextreme-angular";
14
+ import * as i9 from "devextreme-angular/ui/nested";
15
+ import * as i10 from "devextreme-angular/core";
16
+ import * as i11 from "./freight-offer-form.component";
17
+ export class FreightOffersComponent {
18
+ constructor(service, carrierService, lineService, posService, destinationPortService, toaster, confirmation) {
19
+ this.service = service;
20
+ this.carrierService = carrierService;
21
+ this.lineService = lineService;
22
+ this.posService = posService;
23
+ this.destinationPortService = destinationPortService;
24
+ this.toaster = toaster;
25
+ this.confirmation = confirmation;
26
+ this.items = [];
27
+ this.countries = [];
28
+ this.carriers = [];
29
+ this.lines = [];
30
+ this.loadingPorts = [];
31
+ this.destPorts = [];
32
+ this.containerDefinitions = [];
33
+ this.usdRate = 0;
34
+ this.loading = true;
35
+ this.showOnlyValid = false;
36
+ this.selected = null;
37
+ this.formVisible = false;
38
+ this.formMode = 'create';
39
+ this.calcTotalUsd = (row) => {
40
+ return (row.lines ?? []).reduce((sum, line) => sum + this.calcLineTotalUsd(line), 0);
41
+ };
42
+ }
43
+ ngOnInit() {
44
+ forkJoin({
45
+ items: this.service.getList(),
46
+ countries: this.service.getCountriesLookup(),
47
+ usdRate: this.service.getUsdRate(),
48
+ carriers: this.carrierService.getList(),
49
+ lines: this.lineService.getList(),
50
+ loadingPorts: this.posService.getList(),
51
+ destPorts: this.destinationPortService.getList(),
52
+ containerDefs: this.service.getContainerDefinitionsLookup(),
53
+ }).subscribe(result => {
54
+ this.items = result.items;
55
+ this.countries = result.countries;
56
+ this.usdRate = result.usdRate;
57
+ this.carriers = result.carriers;
58
+ this.lines = result.lines;
59
+ this.loadingPorts = result.loadingPorts;
60
+ this.destPorts = result.destPorts;
61
+ this.containerDefinitions = result.containerDefs.filter(d => d.isActive);
62
+ this.loading = false;
63
+ });
64
+ }
65
+ loadList() {
66
+ this.service.getList().subscribe(data => {
67
+ this.items = data;
68
+ if (this.showOnlyValid)
69
+ this.onShowOnlyValidChange();
70
+ });
71
+ }
72
+ onShowOnlyValidChange() {
73
+ if (!this.showOnlyValid) {
74
+ this.grid.instance.option('dataSource', this.items);
75
+ return;
76
+ }
77
+ const d = new Date();
78
+ const todayStr = [
79
+ d.getFullYear(),
80
+ String(d.getMonth() + 1).padStart(2, '0'),
81
+ String(d.getDate()).padStart(2, '0'),
82
+ ].join('-');
83
+ const filtered = this.items.filter(item => {
84
+ const from = item.validFrom ? item.validFrom.substring(0, 10) : null;
85
+ const to = item.validTo ? item.validTo.substring(0, 10) : null;
86
+ return (!from || from <= todayStr) && (!to || to >= todayStr);
87
+ });
88
+ this.grid.instance.option('dataSource', filtered);
89
+ }
90
+ openCreate() {
91
+ this.selected = null;
92
+ this.formMode = 'create';
93
+ this.formVisible = true;
94
+ }
95
+ openEdit(row) {
96
+ this.selected = row;
97
+ this.formMode = 'edit';
98
+ this.formVisible = true;
99
+ }
100
+ openCopy(row) {
101
+ this.confirmation.warn('Keops::FreightOffers:CopyConfirmMessage', 'Keops::FreightOffers:CopyTitle', { yesText: 'Keops::FreightOffers:CopyAutoYes', cancelText: 'Keops::FreightOffers:CopyManualNo' }).subscribe(status => {
102
+ if (status === Confirmation.Status.confirm) {
103
+ this.service.copy(row.code, { manualDates: false }).subscribe({
104
+ next: () => {
105
+ this.toaster.success('Keops::FreightOffers:SuccessfullyCopied');
106
+ this.loadList();
107
+ },
108
+ });
109
+ }
110
+ else if (status === Confirmation.Status.reject) {
111
+ this.selected = this.buildCopyDto(row);
112
+ this.formMode = 'create';
113
+ this.formVisible = true;
114
+ }
115
+ });
116
+ }
117
+ buildCopyDto(source) {
118
+ return {
119
+ ...source,
120
+ code: null,
121
+ offerDate: new Date().toISOString().split('T')[0],
122
+ };
123
+ }
124
+ onSaved() {
125
+ this.formVisible = false;
126
+ this.selected = null;
127
+ this.toaster.success('Keops::FreightOffers:SuccessfullySaved');
128
+ this.loadList();
129
+ }
130
+ getContainerName(code) {
131
+ return this.containerDefinitions.find(c => c.code === code)?.name ?? code;
132
+ }
133
+ calcLineTotalUsd(line) {
134
+ const inlandUsd = this.usdRate > 0 ? (line.inlandTry || 0) / this.usdRate : 0;
135
+ return (line.freightUsd || 0) + (line.portLocalUsd || 0) + inlandUsd;
136
+ }
137
+ remove(row) {
138
+ this.confirmation.warn('AbpUi::ItemWillBeDeletedMessage', 'AbpUi::AreYouSure').subscribe(status => {
139
+ if (status === Confirmation.Status.confirm) {
140
+ this.service.delete(row.code).subscribe({
141
+ next: () => {
142
+ this.toaster.success('Keops::FreightOffers:SuccessfullyDeleted');
143
+ this.loadList();
144
+ },
145
+ });
146
+ }
147
+ });
148
+ }
149
+ }
150
+ FreightOffersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FreightOffersComponent, deps: [{ token: i1.FreightOfferService }, { token: i1.CarrierService }, { token: i1.LineService }, { token: i1.PosService }, { token: i1.DestinationPortService }, { token: i2.ToasterService }, { token: i2.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
151
+ FreightOffersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FreightOffersComponent, selector: "lib-freight-offers", viewQueries: [{ propertyName: "grid", first: true, predicate: DxDataGridComponent, descendants: true }], ngImport: i0, template: "<abp-page [title]=\"'Keops::FreightOffers:Title' | abpLocalization\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row justify-content-end mx-0\" id=\"FreightOffersToolbar\">\r\n <div class=\"col-auto px-1 pt-0 pt-md-2 pe-0\">\r\n <button\r\n *abpPermission=\"'KeopsFreight.FreightOffers.Create'\"\r\n id=\"create\"\r\n class=\"btn btn-primary\"\r\n type=\"button\"\r\n (click)=\"openCreate()\"\r\n >\r\n <i class=\"fa fa-plus me-1\"></i>\r\n <span>{{ 'Keops::FreightOffers:New' | abpLocalization }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <div id=\"FreightOffersWrapper\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div *ngIf=\"loading\" class=\"d-flex justify-content-center align-items-center py-5\">\r\n <div class=\"spinner-border text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"!loading\">\r\n <div class=\"mb-3\">\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" id=\"showOnlyValid\" [(ngModel)]=\"showOnlyValid\" (ngModelChange)=\"onShowOnlyValidChange()\" />\r\n <label class=\"form-check-label\" for=\"showOnlyValid\">\r\n {{ 'Keops::FreightOffers:ShowOnlyValid' | abpLocalization }}\r\n </label>\r\n </div>\r\n </div>\r\n <dx-data-grid\r\n [showBorders]=\"true\"\r\n [showRowLines]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [allowColumnResizing]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n [dataSource]=\"items\"\r\n keyExpr=\"code\"\r\n columnResizingMode=\"widget\"\r\n width=\"100%\"\r\n >\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-header-filter [visible]=\"true\" [allowSearch]=\"true\"></dxo-header-filter>\r\n\r\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [allowedPageSizes]=\"[10, 20, 50]\" [showPageSizeSelector]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\r\n <dxo-paging [pageSize]=\"10\"></dxo-paging>\r\n\r\n <dxi-column [fixed]=\"true\" [allowFiltering]=\"false\" [allowHeaderFiltering]=\"false\" [allowReordering]=\"false\" [allowHiding]=\"false\" [allowGrouping]=\"false\" [allowSorting]=\"false\" cellTemplate=\"optTpl\" caption=\"{{ 'AbpUi::Actions' | abpLocalization }}\" width=\"120\">\r\n <div *dxTemplate=\"let row of 'optTpl'\">\r\n <div ngbDropdown container=\"body\" class=\"d-inline-block\">\r\n <button class=\"btn btn-primary btn-sm\" ngbDropdownToggle>\r\n <i class=\"fa fa-cog me-1\"></i>{{ 'AbpUi::Actions' | abpLocalization }}\r\n </button>\r\n <div ngbDropdownMenu>\r\n <button *abpPermission=\"'KeopsFreight.FreightOffers.Copy'\" ngbDropdownItem (click)=\"openCopy(row.data)\">{{ 'Keops::FreightOffers:Copy' | abpLocalization }}</button>\r\n <button *abpPermission=\"'KeopsFreight.FreightOffers.Update'\" ngbDropdownItem (click)=\"openEdit(row.data)\">{{ 'AbpUi::Edit' | abpLocalization }}</button>\r\n <button *abpPermission=\"'KeopsFreight.FreightOffers.Delete'\" ngbDropdownItem (click)=\"remove(row.data)\">{{ 'AbpUi::Delete' | abpLocalization }}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </dxi-column>\r\n <dxi-column dataField=\"offerDate\" dataType=\"date\" caption=\"{{ 'Keops::FreightOffers:OfferDate' | abpLocalization }}\" width=\"110\"></dxi-column>\r\n <dxi-column dataField=\"validFrom\" dataType=\"date\" caption=\"{{ 'Keops::FreightOffers:ValidFrom' | abpLocalization }}\" width=\"110\"></dxi-column>\r\n <dxi-column dataField=\"validTo\" dataType=\"date\" caption=\"{{ 'Keops::FreightOffers:ValidTo' | abpLocalization }}\" width=\"110\"></dxi-column>\r\n <dxi-column dataField=\"carrierBpCode\" caption=\"{{ 'Keops::FreightOffers:CarrierBpCode' | abpLocalization }}\">\r\n <dxo-lookup [dataSource]=\"carriers\" valueExpr=\"code\" displayExpr=\"name\"></dxo-lookup>\r\n </dxi-column>\r\n <dxi-column dataField=\"lineName\" caption=\"{{ 'Keops::FreightOffers:LineName' | abpLocalization }}\">\r\n <dxo-lookup [dataSource]=\"lines\" valueExpr=\"code\" displayExpr=\"name\"></dxo-lookup>\r\n </dxi-column>\r\n <dxi-column dataField=\"posCode\" caption=\"{{ 'Keops::FreightOffers:PosCode' | abpLocalization }}\">\r\n <dxo-lookup [dataSource]=\"loadingPorts\" valueExpr=\"code\" displayExpr=\"name\"></dxo-lookup>\r\n </dxi-column>\r\n <dxi-column dataField=\"destPortCode\" caption=\"{{ 'Keops::FreightOffers:DestPortCode' | abpLocalization }}\">\r\n <dxo-lookup [dataSource]=\"destPorts\" valueExpr=\"code\" displayExpr=\"portName\"></dxo-lookup>\r\n </dxi-column>\r\n <dxi-column dataField=\"transitDays\" dataType=\"number\" caption=\"{{ 'Keops::FreightOffers:TransitDays' | abpLocalization }}\" width=\"90\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"freeTime\" dataType=\"number\" caption=\"{{ 'Keops::FreightOffers:FreeTime' | abpLocalization }}\" width=\"90\" alignment=\"center\"></dxi-column>\r\n <dxi-column [caption]=\"'Keops::FreightOffers:ContainerInfo' | abpLocalization\" cellTemplate=\"containerInfoTpl\" [allowSorting]=\"false\" [allowFiltering]=\"false\" [allowHeaderFiltering]=\"false\" [minWidth]=\"520\"></dxi-column>\r\n\r\n <div *dxTemplate=\"let cell of 'containerInfoTpl'\">\r\n <table class=\"table table-sm table-bordered mb-0\" style=\"font-size: 0.8rem;\">\r\n <thead class=\"table-dark\">\r\n <tr>\r\n <th style=\"min-width:80px\">{{ 'Keops::FreightOffers:ContainerTypeCode' | abpLocalization }}</th>\r\n <th class=\"text-end\" style=\"min-width:90px\">{{ 'Keops::FreightOffers:FreightUsd' | abpLocalization }}</th>\r\n <th class=\"text-end\" style=\"min-width:90px\">{{ 'Keops::FreightOffers:PortLocalUsd' | abpLocalization }}</th>\r\n <th class=\"text-end\" style=\"min-width:85px\">{{ 'Keops::FreightOffers:InlandTry' | abpLocalization }}</th>\r\n <th class=\"text-end\" style=\"min-width:85px\">{{ 'Keops::FreightOffers:TotalUsd' | abpLocalization }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let line of cell.data.lines\">\r\n <td>{{ getContainerName(line.containerTypeCode) }}</td>\r\n <td class=\"text-end\">{{ line.freightUsd | number:'1.2-2' }}</td>\r\n <td class=\"text-end\">{{ line.portLocalUsd | number:'1.2-2' }}</td>\r\n <td class=\"text-end\">{{ line.inlandTry | number:'1.0-0' }}</td>\r\n <td class=\"text-end fw-semibold\">{{ calcLineTotalUsd(line) | number:'1.2-2' }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </dx-data-grid>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n\r\n<lib-freight-offer-form\r\n *ngIf=\"formVisible\"\r\n [(visible)]=\"formVisible\"\r\n [mode]=\"formMode\"\r\n [current]=\"selected\"\r\n [countries]=\"countries\"\r\n [usdRate]=\"usdRate\"\r\n (saved)=\"onSaved()\"\r\n></lib-freight-offer-form>\r\n\r\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "component", type: i6.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i6.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "directive", type: i7.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i7.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i7.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i7.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { kind: "component", type: i8.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExporting", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i9.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i9.DxoHeaderFilterComponent, selector: "dxo-header-filter", inputs: ["allowSearch", "dataSource", "groupInterval", "height", "searchMode", "width", "searchTimeout", "texts", "visible", "showRelevantValues"] }, { kind: "component", type: i9.DxoLookupComponent, selector: "dxo-lookup", inputs: ["allowClearing", "calculateCellValue", "dataSource", "displayExpr", "valueExpr"] }, { kind: "component", type: i9.DxoFilterRowComponent, selector: "dxo-filter-row", inputs: ["applyFilter", "applyFilterText", "betweenEndText", "betweenStartText", "operationDescriptions", "resetOperationText", "showAllText", "showOperationChooser", "visible"] }, { kind: "component", type: i9.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "label", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i9.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "directive", type: i10.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i11.FreightOfferFormComponent, selector: "lib-freight-offer-form", inputs: ["visible", "mode", "current", "countries", "usdRate"], outputs: ["visibleChange", "saved"] }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }, { kind: "pipe", type: i5.LocalizationPipe, name: "abpLocalization" }] });
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FreightOffersComponent, decorators: [{
153
+ type: Component,
154
+ args: [{ selector: 'lib-freight-offers', template: "<abp-page [title]=\"'Keops::FreightOffers:Title' | abpLocalization\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row justify-content-end mx-0\" id=\"FreightOffersToolbar\">\r\n <div class=\"col-auto px-1 pt-0 pt-md-2 pe-0\">\r\n <button\r\n *abpPermission=\"'KeopsFreight.FreightOffers.Create'\"\r\n id=\"create\"\r\n class=\"btn btn-primary\"\r\n type=\"button\"\r\n (click)=\"openCreate()\"\r\n >\r\n <i class=\"fa fa-plus me-1\"></i>\r\n <span>{{ 'Keops::FreightOffers:New' | abpLocalization }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <div id=\"FreightOffersWrapper\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div *ngIf=\"loading\" class=\"d-flex justify-content-center align-items-center py-5\">\r\n <div class=\"spinner-border text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"!loading\">\r\n <div class=\"mb-3\">\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" id=\"showOnlyValid\" [(ngModel)]=\"showOnlyValid\" (ngModelChange)=\"onShowOnlyValidChange()\" />\r\n <label class=\"form-check-label\" for=\"showOnlyValid\">\r\n {{ 'Keops::FreightOffers:ShowOnlyValid' | abpLocalization }}\r\n </label>\r\n </div>\r\n </div>\r\n <dx-data-grid\r\n [showBorders]=\"true\"\r\n [showRowLines]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [allowColumnResizing]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n [dataSource]=\"items\"\r\n keyExpr=\"code\"\r\n columnResizingMode=\"widget\"\r\n width=\"100%\"\r\n >\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-header-filter [visible]=\"true\" [allowSearch]=\"true\"></dxo-header-filter>\r\n\r\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [allowedPageSizes]=\"[10, 20, 50]\" [showPageSizeSelector]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\r\n <dxo-paging [pageSize]=\"10\"></dxo-paging>\r\n\r\n <dxi-column [fixed]=\"true\" [allowFiltering]=\"false\" [allowHeaderFiltering]=\"false\" [allowReordering]=\"false\" [allowHiding]=\"false\" [allowGrouping]=\"false\" [allowSorting]=\"false\" cellTemplate=\"optTpl\" caption=\"{{ 'AbpUi::Actions' | abpLocalization }}\" width=\"120\">\r\n <div *dxTemplate=\"let row of 'optTpl'\">\r\n <div ngbDropdown container=\"body\" class=\"d-inline-block\">\r\n <button class=\"btn btn-primary btn-sm\" ngbDropdownToggle>\r\n <i class=\"fa fa-cog me-1\"></i>{{ 'AbpUi::Actions' | abpLocalization }}\r\n </button>\r\n <div ngbDropdownMenu>\r\n <button *abpPermission=\"'KeopsFreight.FreightOffers.Copy'\" ngbDropdownItem (click)=\"openCopy(row.data)\">{{ 'Keops::FreightOffers:Copy' | abpLocalization }}</button>\r\n <button *abpPermission=\"'KeopsFreight.FreightOffers.Update'\" ngbDropdownItem (click)=\"openEdit(row.data)\">{{ 'AbpUi::Edit' | abpLocalization }}</button>\r\n <button *abpPermission=\"'KeopsFreight.FreightOffers.Delete'\" ngbDropdownItem (click)=\"remove(row.data)\">{{ 'AbpUi::Delete' | abpLocalization }}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </dxi-column>\r\n <dxi-column dataField=\"offerDate\" dataType=\"date\" caption=\"{{ 'Keops::FreightOffers:OfferDate' | abpLocalization }}\" width=\"110\"></dxi-column>\r\n <dxi-column dataField=\"validFrom\" dataType=\"date\" caption=\"{{ 'Keops::FreightOffers:ValidFrom' | abpLocalization }}\" width=\"110\"></dxi-column>\r\n <dxi-column dataField=\"validTo\" dataType=\"date\" caption=\"{{ 'Keops::FreightOffers:ValidTo' | abpLocalization }}\" width=\"110\"></dxi-column>\r\n <dxi-column dataField=\"carrierBpCode\" caption=\"{{ 'Keops::FreightOffers:CarrierBpCode' | abpLocalization }}\">\r\n <dxo-lookup [dataSource]=\"carriers\" valueExpr=\"code\" displayExpr=\"name\"></dxo-lookup>\r\n </dxi-column>\r\n <dxi-column dataField=\"lineName\" caption=\"{{ 'Keops::FreightOffers:LineName' | abpLocalization }}\">\r\n <dxo-lookup [dataSource]=\"lines\" valueExpr=\"code\" displayExpr=\"name\"></dxo-lookup>\r\n </dxi-column>\r\n <dxi-column dataField=\"posCode\" caption=\"{{ 'Keops::FreightOffers:PosCode' | abpLocalization }}\">\r\n <dxo-lookup [dataSource]=\"loadingPorts\" valueExpr=\"code\" displayExpr=\"name\"></dxo-lookup>\r\n </dxi-column>\r\n <dxi-column dataField=\"destPortCode\" caption=\"{{ 'Keops::FreightOffers:DestPortCode' | abpLocalization }}\">\r\n <dxo-lookup [dataSource]=\"destPorts\" valueExpr=\"code\" displayExpr=\"portName\"></dxo-lookup>\r\n </dxi-column>\r\n <dxi-column dataField=\"transitDays\" dataType=\"number\" caption=\"{{ 'Keops::FreightOffers:TransitDays' | abpLocalization }}\" width=\"90\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"freeTime\" dataType=\"number\" caption=\"{{ 'Keops::FreightOffers:FreeTime' | abpLocalization }}\" width=\"90\" alignment=\"center\"></dxi-column>\r\n <dxi-column [caption]=\"'Keops::FreightOffers:ContainerInfo' | abpLocalization\" cellTemplate=\"containerInfoTpl\" [allowSorting]=\"false\" [allowFiltering]=\"false\" [allowHeaderFiltering]=\"false\" [minWidth]=\"520\"></dxi-column>\r\n\r\n <div *dxTemplate=\"let cell of 'containerInfoTpl'\">\r\n <table class=\"table table-sm table-bordered mb-0\" style=\"font-size: 0.8rem;\">\r\n <thead class=\"table-dark\">\r\n <tr>\r\n <th style=\"min-width:80px\">{{ 'Keops::FreightOffers:ContainerTypeCode' | abpLocalization }}</th>\r\n <th class=\"text-end\" style=\"min-width:90px\">{{ 'Keops::FreightOffers:FreightUsd' | abpLocalization }}</th>\r\n <th class=\"text-end\" style=\"min-width:90px\">{{ 'Keops::FreightOffers:PortLocalUsd' | abpLocalization }}</th>\r\n <th class=\"text-end\" style=\"min-width:85px\">{{ 'Keops::FreightOffers:InlandTry' | abpLocalization }}</th>\r\n <th class=\"text-end\" style=\"min-width:85px\">{{ 'Keops::FreightOffers:TotalUsd' | abpLocalization }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let line of cell.data.lines\">\r\n <td>{{ getContainerName(line.containerTypeCode) }}</td>\r\n <td class=\"text-end\">{{ line.freightUsd | number:'1.2-2' }}</td>\r\n <td class=\"text-end\">{{ line.portLocalUsd | number:'1.2-2' }}</td>\r\n <td class=\"text-end\">{{ line.inlandTry | number:'1.0-0' }}</td>\r\n <td class=\"text-end fw-semibold\">{{ calcLineTotalUsd(line) | number:'1.2-2' }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </dx-data-grid>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n\r\n<lib-freight-offer-form\r\n *ngIf=\"formVisible\"\r\n [(visible)]=\"formVisible\"\r\n [mode]=\"formMode\"\r\n [current]=\"selected\"\r\n [countries]=\"countries\"\r\n [usdRate]=\"usdRate\"\r\n (saved)=\"onSaved()\"\r\n></lib-freight-offer-form>\r\n\r\n" }]
155
+ }], ctorParameters: function () { return [{ type: i1.FreightOfferService }, { type: i1.CarrierService }, { type: i1.LineService }, { type: i1.PosService }, { type: i1.DestinationPortService }, { type: i2.ToasterService }, { type: i2.ConfirmationService }]; }, propDecorators: { grid: [{
156
+ type: ViewChild,
157
+ args: [DxDataGridComponent]
158
+ }] } });
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlaWdodC1vZmZlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUta2VvcHMvc3JjL2xpYi9mZWF0dXJlcy9mcmVpZ2h0LW9mZmVycy9jb21wb25lbnRzL2ZyZWlnaHQtb2ZmZXJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2thZG9vZ2x1LWtlb3BzL3NyYy9saWIvZmVhdHVyZXMvZnJlaWdodC1vZmZlcnMvY29tcG9uZW50cy9mcmVpZ2h0LW9mZmVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQXVCLFlBQVksRUFBa0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7O0FBV2hDLE1BQU0sT0FBTyxzQkFBc0I7SUFpQmpDLFlBQ21CLE9BQTRCLEVBQzVCLGNBQThCLEVBQzlCLFdBQXdCLEVBQ3hCLFVBQXNCLEVBQ3RCLHNCQUE4QyxFQUM5QyxPQUF1QixFQUN2QixZQUFpQztRQU5qQyxZQUFPLEdBQVAsT0FBTyxDQUFxQjtRQUM1QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQXJCcEQsVUFBSyxHQUFzQixFQUFFLENBQUM7UUFDOUIsY0FBUyxHQUF1QixFQUFFLENBQUM7UUFD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QUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFLLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ3ZDLElBQUksRUFBRSxHQUFHLEVBQUU7d0JBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsMENBQTBDLENBQUMsQ0FBQzt3QkFDakUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNsQixDQUFDO2lCQUNGLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzttSEFwSlUsc0JBQXNCO3VHQUF0QixzQkFBc0IsZ0dBQ3RCLG1CQUFtQixnRENmaEMsNmtQQTRIQTsyRkQ5R2Esc0JBQXNCO2tCQUpsQyxTQUFTOytCQUNFLG9CQUFvQjs4UkFJRSxJQUFJO3NCQUFuQyxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRHhEYXRhR3JpZENvbXBvbmVudCB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhcic7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIENvbmZpcm1hdGlvbiwgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENhcnJpZXJTZXJ2aWNlLCBEZXN0aW5hdGlvblBvcnRTZXJ2aWNlLCBGcmVpZ2h0T2ZmZXJTZXJ2aWNlLCBMaW5lU2VydmljZSwgUG9zU2VydmljZSwgQ291bnRyeUxvb2t1cER0bywgQ29udGFpbmVyRGVmaW5pdGlvbkxvb2t1cER0bywgRnJlaWdodE9mZmVyRHRvLCBGcmVpZ2h0T2ZmZXJMaW5lRHRvIH0gZnJvbSAnQGhpdHNvZnQva2Fkb29nbHUta2VvcHMvcHJveHknO1xyXG5pbXBvcnQgdHlwZSB7IENhcnJpZXJEdG8gfSBmcm9tICdAaGl0c29mdC9rYWRvb2dsdS1rZW9wcy9wcm94eSc7XHJcbmltcG9ydCB0eXBlIHsgTGluZUR0byB9IGZyb20gJ0BoaXRzb2Z0L2thZG9vZ2x1LWtlb3BzL3Byb3h5JztcclxuaW1wb3J0IHR5cGUgeyBQb3NEdG8gfSBmcm9tICdAaGl0c29mdC9rYWRvb2dsdS1rZW9wcy9wcm94eSc7XHJcbmltcG9ydCB0eXBlIHsgRGVzdGluYXRpb25Qb3J0RHRvIH0gZnJvbSAnQGhpdHNvZnQva2Fkb29nbHUta2VvcHMvcHJveHknO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZnJlaWdodC1vZmZlcnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mcmVpZ2h0LW9mZmVycy5jb21wb25lbnQuaHRtbCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGcmVpZ2h0T2ZmZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKER4RGF0YUdyaWRDb21wb25lbnQpIGdyaWQhOiBEeERhdGFHcmlkQ29tcG9uZW50O1xyXG5cclxuICBpdGVtczogRnJlaWdodE9mZmVyRHRvW10gPSBbXTtcclxuICBjb3VudHJpZXM6IENvdW50cnlMb29rdXBEdG9bXSA9IFtdO1xyXG4gIGNhcnJpZXJzOiBDYXJyaWVyRHRvW10gPSBbXTtcclxuICBsaW5lczogTGluZUR0b1tdID0gW107XHJcbiAgbG9hZGluZ1BvcnRzOiBQb3NEdG9bXSA9IFtdO1xyXG4gIGRlc3RQb3J0czogRGVzdGluYXRpb25Qb3J0RHRvW10gPSBbXTtcclxuICBjb250YWluZXJEZWZpbml0aW9uczogQ29udGFpbmVyRGVmaW5pdGlvbkxvb2t1cER0b1tdID0gW107XHJcbiAgdXNkUmF0ZSA9IDA7XHJcbiAgbG9hZGluZyA9IHRydWU7XHJcbiAgc2hvd09ubHlWYWxpZCA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkOiBGcmVpZ2h0T2ZmZXJEdG8gfCBudWxsID0gbnVsbDtcclxuICBmb3JtVmlzaWJsZSA9IGZhbHNlO1xyXG4gIGZvcm1Nb2RlOiAnY3JlYXRlJyB8ICdlZGl0JyA9ICdjcmVhdGUnO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VydmljZTogRnJlaWdodE9mZmVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FycmllclNlcnZpY2U6IENhcnJpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsaW5lU2VydmljZTogTGluZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvc1NlcnZpY2U6IFBvc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3RpbmF0aW9uUG9ydFNlcnZpY2U6IERlc3RpbmF0aW9uUG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvYXN0ZXI6IFRvYXN0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maXJtYXRpb246IENvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgaXRlbXM6IHRoaXMuc2VydmljZS5nZXRMaXN0KCksXHJcbiAgICAgIGNvdW50cmllczogdGhpcy5zZXJ2aWNlLmdldENvdW50cmllc0xvb2t1cCgpLFxyXG4gICAgICB1c2RSYXRlOiB0aGlzLnNlcnZpY2UuZ2V0VXNkUmF0ZSgpLFxyXG4gICAgICBjYXJyaWVyczogdGhpcy5jYXJyaWVyU2VydmljZS5nZXRMaXN0KCksXHJcbiAgICAgIGxpbmVzOiB0aGlzLmxpbmVTZXJ2aWNlLmdldExpc3QoKSxcclxuICAgICAgbG9hZGluZ1BvcnRzOiB0aGlzLnBvc1NlcnZpY2UuZ2V0TGlzdCgpLFxyXG4gICAgICBkZXN0UG9ydHM6IHRoaXMuZGVzdGluYXRpb25Qb3J0U2VydmljZS5nZXRMaXN0KCksXHJcbiAgICAgIGNvbnRhaW5lckRlZnM6IHRoaXMuc2VydmljZS5nZXRDb250YWluZXJEZWZpbml0aW9uc0xvb2t1cCgpLFxyXG4gICAgfSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIHRoaXMuaXRlbXMgPSByZXN1bHQuaXRlbXM7XHJcbiAgICAgIHRoaXMuY291bnRyaWVzID0gcmVzdWx0LmNvdW50cmllcztcclxuICAgICAgdGhpcy51c2RSYXRlID0gcmVzdWx0LnVzZFJhdGU7XHJcbiAgICAgIHRoaXMuY2FycmllcnMgPSByZXN1bHQuY2FycmllcnM7XHJcbiAgICAgIHRoaXMubGluZXMgPSByZXN1bHQubGluZXM7XHJcbiAgICAgIHRoaXMubG9hZGluZ1BvcnRzID0gcmVzdWx0LmxvYWRpbmdQb3J0cztcclxuICAgICAgdGhpcy5kZXN0UG9ydHMgPSByZXN1bHQuZGVzdFBvcnRzO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lckRlZmluaXRpb25zID0gcmVzdWx0LmNvbnRhaW5lckRlZnMuZmlsdGVyKGQgPT4gZC5pc0FjdGl2ZSk7XHJcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkTGlzdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VydmljZS5nZXRMaXN0KCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICB0aGlzLml0ZW1zID0gZGF0YTtcclxuICAgICAgaWYgKHRoaXMuc2hvd09ubHlWYWxpZCkgdGhpcy5vblNob3dPbmx5VmFsaWRDaGFuZ2UoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25TaG93T25seVZhbGlkQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnNob3dPbmx5VmFsaWQpIHtcclxuICAgICAgdGhpcy5ncmlkLmluc3RhbmNlLm9wdGlvbignZGF0YVNvdXJjZScsIHRoaXMuaXRlbXMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBkID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IHRvZGF5U3RyID0gW1xyXG4gICAgICBkLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgIFN0cmluZyhkLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICBTdHJpbmcoZC5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyksXHJcbiAgICBdLmpvaW4oJy0nKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgIGNvbnN0IGZyb20gPSBpdGVtLnZhbGlkRnJvbSA/IGl0ZW0udmFsaWRGcm9tLnN1YnN0cmluZygwLCAxMCkgOiBudWxsO1xyXG4gICAgICBjb25zdCB0byA9IGl0ZW0udmFsaWRUbyA/IGl0ZW0udmFsaWRUby5zdWJzdHJpbmcoMCwgMTApIDogbnVsbDtcclxuICAgICAgcmV0dXJuICghZnJvbSB8fCBmcm9tIDw9IHRvZGF5U3RyKSAmJiAoIXRvIHx8IHRvID49IHRvZGF5U3RyKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5ncmlkLmluc3RhbmNlLm9wdGlvbignZGF0YVNvdXJjZScsIGZpbHRlcmVkKTtcclxuICB9XHJcblxyXG4gIG9wZW5DcmVhdGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkID0gbnVsbDtcclxuICAgIHRoaXMuZm9ybU1vZGUgPSAnY3JlYXRlJztcclxuICAgIHRoaXMuZm9ybVZpc2libGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb3BlbkVkaXQocm93OiBGcmVpZ2h0T2ZmZXJEdG8pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWQgPSByb3c7XHJcbiAgICB0aGlzLmZvcm1Nb2RlID0gJ2VkaXQnO1xyXG4gICAgdGhpcy5mb3JtVmlzaWJsZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBvcGVuQ29weShyb3c6IEZyZWlnaHRPZmZlckR0byk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maXJtYXRpb24ud2FybihcclxuICAgICAgJ0tlb3BzOjpGcmVpZ2h0T2ZmZXJzOkNvcHlDb25maXJtTWVzc2FnZScsXHJcbiAgICAgICdLZW9wczo6RnJlaWdodE9mZmVyczpDb3B5VGl0bGUnLFxyXG4gICAgICB7IHllc1RleHQ6ICdLZW9wczo6RnJlaWdodE9mZmVyczpDb3B5QXV0b1llcycsIGNhbmNlbFRleHQ6ICdLZW9wczo6RnJlaWdodE9mZmVyczpDb3B5TWFudWFsTm8nIH1cclxuICAgICkuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XHJcbiAgICAgIGlmIChzdGF0dXMgPT09IENvbmZpcm1hdGlvbi5TdGF0dXMuY29uZmlybSkge1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5jb3B5KHJvdy5jb2RlISwgeyBtYW51YWxEYXRlczogZmFsc2UgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3MoJ0tlb3BzOjpGcmVpZ2h0T2ZmZXJzOlN1Y2Nlc3NmdWxseUNvcGllZCcpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRMaXN0KCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gQ29uZmlybWF0aW9uLlN0YXR1cy5yZWplY3QpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkID0gdGhpcy5idWlsZENvcHlEdG8ocm93KTtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlID0gJ2NyZWF0ZSc7XHJcbiAgICAgICAgdGhpcy5mb3JtVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZENvcHlEdG8oc291cmNlOiBGcmVpZ2h0T2ZmZXJEdG8pOiBGcmVpZ2h0T2ZmZXJEdG8ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4uc291cmNlLFxyXG4gICAgICBjb2RlOiBudWxsISxcclxuICAgICAgb2ZmZXJEYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBvblNhdmVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RlZCA9IG51bGw7XHJcbiAgICB0aGlzLnRvYXN0ZXIuc3VjY2VzcygnS2VvcHM6OkZyZWlnaHRPZmZlcnM6U3VjY2Vzc2Z1bGx5U2F2ZWQnKTtcclxuICAgIHRoaXMubG9hZExpc3QoKTtcclxuICB9XHJcblxyXG4gIGdldENvbnRhaW5lck5hbWUoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lckRlZmluaXRpb25zLmZpbmQoYyA9PiBjLmNvZGUgPT09IGNvZGUpPy5uYW1lID8/IGNvZGU7XHJcbiAgfVxyXG5cclxuICBjYWxjTGluZVRvdGFsVXNkKGxpbmU6IEZyZWlnaHRPZmZlckxpbmVEdG8pOiBudW1iZXIge1xyXG4gICAgY29uc3QgaW5sYW5kVXNkID0gdGhpcy51c2RSYXRlID4gMCA/IChsaW5lLmlubGFuZFRyeSB8fCAwKSAvIHRoaXMudXNkUmF0ZSA6IDA7XHJcbiAgICByZXR1cm4gKGxpbmUuZnJlaWdodFVzZCB8fCAwKSArIChsaW5lLnBvcnRMb2NhbFVzZCB8fCAwKSArIGlubGFuZFVzZDtcclxuICB9XHJcblxyXG4gIGNhbGNUb3RhbFVzZCA9IChyb3c6IEZyZWlnaHRPZmZlckR0byk6IG51bWJlciA9PiB7XHJcbiAgICByZXR1cm4gKHJvdy5saW5lcyA/PyBbXSkucmVkdWNlKChzdW0sIGxpbmUpID0+IHN1bSArIHRoaXMuY2FsY0xpbmVUb3RhbFVzZChsaW5lKSwgMCk7XHJcbiAgfTtcclxuXHJcbiAgcmVtb3ZlKHJvdzogRnJlaWdodE9mZmVyRHRvKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKCdBYnBVaTo6SXRlbVdpbGxCZURlbGV0ZWRNZXNzYWdlJywgJ0FicFVpOjpBcmVZb3VTdXJlJykuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XHJcbiAgICAgIGlmIChzdGF0dXMgPT09IENvbmZpcm1hdGlvbi5TdGF0dXMuY29uZmlybSkge1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5kZWxldGUocm93LmNvZGUhKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXIuc3VjY2VzcygnS2VvcHM6OkZyZWlnaHRPZmZlcnM6U3VjY2Vzc2Z1bGx5RGVsZXRlZCcpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRMaXN0KCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGFicC1wYWdlIFt0aXRsZV09XCInS2VvcHM6OkZyZWlnaHRPZmZlcnM6VGl0bGUnIHwgYWJwTG9jYWxpemF0aW9uXCI+XHJcbiAgPGFicC1wYWdlLXRvb2xiYXItY29udGFpbmVyIGNsYXNzPVwiY29sXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1lbmQgbXgtMFwiIGlkPVwiRnJlaWdodE9mZmVyc1Rvb2xiYXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIHB4LTEgcHQtMCBwdC1tZC0yIHBlLTBcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqYWJwUGVybWlzc2lvbj1cIidLZW9wc0ZyZWlnaHQuRnJlaWdodE9mZmVycy5DcmVhdGUnXCJcclxuICAgICAgICAgIGlkPVwiY3JlYXRlXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5DcmVhdGUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICA8c3Bhbj57eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6TmV3JyB8IGFicExvY2FsaXphdGlvbiB9fTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2FicC1wYWdlLXRvb2xiYXItY29udGFpbmVyPlxyXG5cclxuICA8ZGl2IGlkPVwiRnJlaWdodE9mZmVyc1dyYXBwZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHB5LTVcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciB0ZXh0LXByaW1hcnlcIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+TG9hZGluZy4uLjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJzaG93T25seVZhbGlkXCIgWyhuZ01vZGVsKV09XCJzaG93T25seVZhbGlkXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25TaG93T25seVZhbGlkQ2hhbmdlKClcIiAvPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2hvd09ubHlWYWxpZFwiPlxyXG4gICAgICAgICAgICAgIHt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpTaG93T25seVZhbGlkJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGR4LWRhdGEtZ3JpZFxyXG4gICAgICAgICAgW3Nob3dCb3JkZXJzXT1cInRydWVcIlxyXG4gICAgICAgICAgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCJcclxuICAgICAgICAgIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgIFthbGxvd0NvbHVtblJlc2l6aW5nXT1cInRydWVcIlxyXG4gICAgICAgICAgW3Jvd0FsdGVybmF0aW9uRW5hYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgIFtkYXRhU291cmNlXT1cIml0ZW1zXCJcclxuICAgICAgICAgIGtleUV4cHI9XCJjb2RlXCJcclxuICAgICAgICAgIGNvbHVtblJlc2l6aW5nTW9kZT1cIndpZGdldFwiXHJcbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkeG8tZmlsdGVyLXJvdyBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tZmlsdGVyLXJvdz5cclxuICAgICAgICAgIDxkeG8taGVhZGVyLWZpbHRlciBbdmlzaWJsZV09XCJ0cnVlXCIgW2FsbG93U2VhcmNoXT1cInRydWVcIj48L2R4by1oZWFkZXItZmlsdGVyPlxyXG5cclxuICAgICAgICAgIDxkeG8tcGFnZXIgW3Zpc2libGVdPVwidHJ1ZVwiIFtzaG93SW5mb109XCJ0cnVlXCIgW2FsbG93ZWRQYWdlU2l6ZXNdPVwiWzEwLCAyMCwgNTBdXCIgW3Nob3dQYWdlU2l6ZVNlbGVjdG9yXT1cInRydWVcIiBbc2hvd05hdmlnYXRpb25CdXR0b25zXT1cInRydWVcIj48L2R4by1wYWdlcj5cclxuICAgICAgICAgIDxkeG8tcGFnaW5nIFtwYWdlU2l6ZV09XCIxMFwiPjwvZHhvLXBhZ2luZz5cclxuXHJcbiAgICAgICAgICA8ZHhpLWNvbHVtbiBbZml4ZWRdPVwidHJ1ZVwiIFthbGxvd0ZpbHRlcmluZ109XCJmYWxzZVwiIFthbGxvd0hlYWRlckZpbHRlcmluZ109XCJmYWxzZVwiIFthbGxvd1Jlb3JkZXJpbmddPVwiZmFsc2VcIiBbYWxsb3dIaWRpbmddPVwiZmFsc2VcIiBbYWxsb3dHcm91cGluZ109XCJmYWxzZVwiIFthbGxvd1NvcnRpbmddPVwiZmFsc2VcIiBjZWxsVGVtcGxhdGU9XCJvcHRUcGxcIiBjYXB0aW9uPVwie3sgJ0FicFVpOjpBY3Rpb25zJyB8IGFicExvY2FsaXphdGlvbiB9fVwiIHdpZHRoPVwiMTIwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgcm93IG9mICdvcHRUcGwnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjb250YWluZXI9XCJib2R5XCIgY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiBuZ2JEcm9wZG93blRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jb2cgbWUtMVwiPjwvaT57eyAnQWJwVWk6OkFjdGlvbnMnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51PlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uICphYnBQZXJtaXNzaW9uPVwiJ0tlb3BzRnJlaWdodC5GcmVpZ2h0T2ZmZXJzLkNvcHknXCIgbmdiRHJvcGRvd25JdGVtIChjbGljayk9XCJvcGVuQ29weShyb3cuZGF0YSlcIj57eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6Q29weScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqYWJwUGVybWlzc2lvbj1cIidLZW9wc0ZyZWlnaHQuRnJlaWdodE9mZmVycy5VcGRhdGUnXCIgbmdiRHJvcGRvd25JdGVtIChjbGljayk9XCJvcGVuRWRpdChyb3cuZGF0YSlcIj57eyAnQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gKmFicFBlcm1pc3Npb249XCInS2VvcHNGcmVpZ2h0LkZyZWlnaHRPZmZlcnMuRGVsZXRlJ1wiIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2spPVwicmVtb3ZlKHJvdy5kYXRhKVwiPnt7ICdBYnBVaTo6RGVsZXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9keGktY29sdW1uPlxyXG4gICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwib2ZmZXJEYXRlXCIgZGF0YVR5cGU9XCJkYXRlXCIgY2FwdGlvbj1cInt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpPZmZlckRhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XCIgd2lkdGg9XCIxMTBcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJ2YWxpZEZyb21cIiBkYXRhVHlwZT1cImRhdGVcIiBjYXB0aW9uPVwie3sgJ0tlb3BzOjpGcmVpZ2h0T2ZmZXJzOlZhbGlkRnJvbScgfCBhYnBMb2NhbGl6YXRpb24gfX1cIiB3aWR0aD1cIjExMFwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInZhbGlkVG9cIiBkYXRhVHlwZT1cImRhdGVcIiBjYXB0aW9uPVwie3sgJ0tlb3BzOjpGcmVpZ2h0T2ZmZXJzOlZhbGlkVG8nIHwgYWJwTG9jYWxpemF0aW9uIH19XCIgd2lkdGg9XCIxMTBcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJjYXJyaWVyQnBDb2RlXCIgY2FwdGlvbj1cInt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpDYXJyaWVyQnBDb2RlJyB8IGFicExvY2FsaXphdGlvbiB9fVwiPlxyXG4gICAgICAgICAgICA8ZHhvLWxvb2t1cCBbZGF0YVNvdXJjZV09XCJjYXJyaWVyc1wiIHZhbHVlRXhwcj1cImNvZGVcIiBkaXNwbGF5RXhwcj1cIm5hbWVcIj48L2R4by1sb29rdXA+XHJcbiAgICAgICAgICA8L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJsaW5lTmFtZVwiIGNhcHRpb249XCJ7eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6TGluZU5hbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19XCI+XHJcbiAgICAgICAgICAgIDxkeG8tbG9va3VwIFtkYXRhU291cmNlXT1cImxpbmVzXCIgdmFsdWVFeHByPVwiY29kZVwiIGRpc3BsYXlFeHByPVwibmFtZVwiPjwvZHhvLWxvb2t1cD5cclxuICAgICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInBvc0NvZGVcIiBjYXB0aW9uPVwie3sgJ0tlb3BzOjpGcmVpZ2h0T2ZmZXJzOlBvc0NvZGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XCI+XHJcbiAgICAgICAgICAgIDxkeG8tbG9va3VwIFtkYXRhU291cmNlXT1cImxvYWRpbmdQb3J0c1wiIHZhbHVlRXhwcj1cImNvZGVcIiBkaXNwbGF5RXhwcj1cIm5hbWVcIj48L2R4by1sb29rdXA+XHJcbiAgICAgICAgICA8L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkZXN0UG9ydENvZGVcIiBjYXB0aW9uPVwie3sgJ0tlb3BzOjpGcmVpZ2h0T2ZmZXJzOkRlc3RQb3J0Q29kZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cIj5cclxuICAgICAgICAgICAgPGR4by1sb29rdXAgW2RhdGFTb3VyY2VdPVwiZGVzdFBvcnRzXCIgdmFsdWVFeHByPVwiY29kZVwiIGRpc3BsYXlFeHByPVwicG9ydE5hbWVcIj48L2R4by1sb29rdXA+XHJcbiAgICAgICAgICA8L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJ0cmFuc2l0RGF5c1wiIGRhdGFUeXBlPVwibnVtYmVyXCIgY2FwdGlvbj1cInt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpUcmFuc2l0RGF5cycgfCBhYnBMb2NhbGl6YXRpb24gfX1cIiB3aWR0aD1cIjkwXCIgYWxpZ25tZW50PVwiY2VudGVyXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZnJlZVRpbWVcIiBkYXRhVHlwZT1cIm51bWJlclwiIGNhcHRpb249XCJ7eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6RnJlZVRpbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19XCIgd2lkdGg9XCI5MFwiIGFsaWdubWVudD1cImNlbnRlclwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgIDxkeGktY29sdW1uIFtjYXB0aW9uXT1cIidLZW9wczo6RnJlaWdodE9mZmVyczpDb250YWluZXJJbmZvJyB8IGFicExvY2FsaXphdGlvblwiIGNlbGxUZW1wbGF0ZT1cImNvbnRhaW5lckluZm9UcGxcIiBbYWxsb3dTb3J0aW5nXT1cImZhbHNlXCIgW2FsbG93RmlsdGVyaW5nXT1cImZhbHNlXCIgW2FsbG93SGVhZGVyRmlsdGVyaW5nXT1cImZhbHNlXCIgW21pbldpZHRoXT1cIjUyMFwiPjwvZHhpLWNvbHVtbj5cclxuXHJcbiAgICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGwgb2YgJ2NvbnRhaW5lckluZm9UcGwnXCI+XHJcbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXNtIHRhYmxlLWJvcmRlcmVkIG1iLTBcIiBzdHlsZT1cImZvbnQtc2l6ZTogMC44cmVtO1wiPlxyXG4gICAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cInRhYmxlLWRhcmtcIj5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwibWluLXdpZHRoOjgwcHhcIj57eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6Q29udGFpbmVyVHlwZUNvZGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1lbmRcIiBzdHlsZT1cIm1pbi13aWR0aDo5MHB4XCI+e3sgJ0tlb3BzOjpGcmVpZ2h0T2ZmZXJzOkZyZWlnaHRVc2QnIHwgYWJwTG9jYWxpemF0aW9uIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1lbmRcIiBzdHlsZT1cIm1pbi13aWR0aDo5MHB4XCI+e3sgJ0tlb3BzOjpGcmVpZ2h0T2ZmZXJzOlBvcnRMb2NhbFVzZCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWVuZFwiIHN0eWxlPVwibWluLXdpZHRoOjg1cHhcIj57eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6SW5sYW5kVHJ5JyB8IGFicExvY2FsaXphdGlvbiB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtZW5kXCIgc3R5bGU9XCJtaW4td2lkdGg6ODVweFwiPnt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpUb3RhbFVzZCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgbGluZSBvZiBjZWxsLmRhdGEubGluZXNcIj5cclxuICAgICAgICAgICAgICAgICAgPHRkPnt7IGdldENvbnRhaW5lck5hbWUobGluZS5jb250YWluZXJUeXBlQ29kZSkgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWVuZFwiPnt7IGxpbmUuZnJlaWdodFVzZCB8IG51bWJlcjonMS4yLTInIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1lbmRcIj57eyBsaW5lLnBvcnRMb2NhbFVzZCB8IG51bWJlcjonMS4yLTInIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1lbmRcIj57eyBsaW5lLmlubGFuZFRyeSB8IG51bWJlcjonMS4wLTAnIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1lbmQgZnctc2VtaWJvbGRcIj57eyBjYWxjTGluZVRvdGFsVXNkKGxpbmUpIHwgbnVtYmVyOicxLjItMicgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9keC1kYXRhLWdyaWQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvYWJwLXBhZ2U+XHJcblxyXG48bGliLWZyZWlnaHQtb2ZmZXItZm9ybVxyXG4gICpuZ0lmPVwiZm9ybVZpc2libGVcIlxyXG4gIFsodmlzaWJsZSldPVwiZm9ybVZpc2libGVcIlxyXG4gIFttb2RlXT1cImZvcm1Nb2RlXCJcclxuICBbY3VycmVudF09XCJzZWxlY3RlZFwiXHJcbiAgW2NvdW50cmllc109XCJjb3VudHJpZXNcIlxyXG4gIFt1c2RSYXRlXT1cInVzZFJhdGVcIlxyXG4gIChzYXZlZCk9XCJvblNhdmVkKClcIlxyXG4+PC9saWItZnJlaWdodC1vZmZlci1mb3JtPlxyXG5cclxuIl19