@senior-agronegocio/angular-components 0.0.49

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 (391) hide show
  1. package/agro-angular-components.module.d.ts +9 -0
  2. package/bundles/senior-agronegocio-angular-components.umd.js +5855 -0
  3. package/bundles/senior-agronegocio-angular-components.umd.js.map +1 -0
  4. package/bundles/senior-agronegocio-angular-components.umd.min.js +17 -0
  5. package/bundles/senior-agronegocio-angular-components.umd.min.js.map +1 -0
  6. package/common/agro-array-utils.class.d.ts +35 -0
  7. package/common/agro-cookie-utils.class.d.ts +8 -0
  8. package/common/agro-date-utils.class.d.ts +88 -0
  9. package/common/agro-name-utils.class.d.ts +22 -0
  10. package/common/agro-number-utils.class.d.ts +71 -0
  11. package/common/agro-object-utils.class.d.ts +161 -0
  12. package/common/agro-platform-utils.class.d.ts +38 -0
  13. package/common/agro-regex.constant.d.ts +142 -0
  14. package/common/agro-string-utils.class.d.ts +194 -0
  15. package/common/colors.class.d.ts +76 -0
  16. package/common/index.d.ts +10 -0
  17. package/components/event-control-board/common/control-status.d.ts +5 -0
  18. package/components/event-control-board/common/documentsToIssue.d.ts +4 -0
  19. package/components/event-control-board/common/event-control-constants.d.ts +15 -0
  20. package/components/event-control-board/common/event-operation.d.ts +11 -0
  21. package/components/event-control-board/common/event-origin.d.ts +7 -0
  22. package/components/event-control-board/common/event-status.d.ts +7 -0
  23. package/components/event-control-board/common/invoice-status.d.ts +12 -0
  24. package/components/event-control-board/common/invoice-type.d.ts +5 -0
  25. package/components/event-control-board/common/lookup-error-message.constants.d.ts +3 -0
  26. package/components/event-control-board/common/operation.d.ts +5 -0
  27. package/components/event-control-board/common/operationType.d.ts +5 -0
  28. package/components/event-control-board/common/status-entity.d.ts +4 -0
  29. package/components/event-control-board/common/ticket-status.d.ts +7 -0
  30. package/components/event-control-board/event-control-board.component.d.ts +97 -0
  31. package/components/event-control-board/event-control-board.module.d.ts +2 -0
  32. package/components/event-control-board/index.d.ts +20 -0
  33. package/components/event-control-board/service/e001pes/e001pes-dto.d.ts +12 -0
  34. package/components/event-control-board/service/e001pes/e001pes.d.ts +15 -0
  35. package/components/event-control-board/service/e001pes/e001pes.module.d.ts +2 -0
  36. package/components/event-control-board/service/e001pes/e001pes.service.d.ts +13 -0
  37. package/components/event-control-board/service/e001tns/e001tns-dto.d.ts +14 -0
  38. package/components/event-control-board/service/e001tns/e001tns.d.ts +19 -0
  39. package/components/event-control-board/service/e001tns/e001tns.module.d.ts +2 -0
  40. package/components/event-control-board/service/e001tns/e001tns.service.d.ts +11 -0
  41. package/components/event-control-board/service/e012fam/e012fam-dto.d.ts +11 -0
  42. package/components/event-control-board/service/e012fam/e012fam.d.ts +14 -0
  43. package/components/event-control-board/service/e012fam/e012fam.service.d.ts +11 -0
  44. package/components/event-control-board/service/e070emp/e070emp-dto.d.ts +10 -0
  45. package/components/event-control-board/service/e070emp/e070emp.d.ts +13 -0
  46. package/components/event-control-board/service/e070emp/e070emp.module.d.ts +2 -0
  47. package/components/event-control-board/service/e070emp/e070emp.service.d.ts +12 -0
  48. package/components/event-control-board/service/e070fil/e070fil-dto.d.ts +14 -0
  49. package/components/event-control-board/service/e070fil/e070fil.d.ts +17 -0
  50. package/components/event-control-board/service/e070fil/e070fil.module.d.ts +2 -0
  51. package/components/event-control-board/service/e070fil/e070fil.service.d.ts +12 -0
  52. package/components/event-control-board/service/e075der/e075der-dto.d.ts +15 -0
  53. package/components/event-control-board/service/e075der/e075der.d.ts +18 -0
  54. package/components/event-control-board/service/e075der/e075der.module.d.ts +2 -0
  55. package/components/event-control-board/service/e075der/e075der.service.d.ts +12 -0
  56. package/components/event-control-board/service/e113saf/e113saf-dto.d.ts +11 -0
  57. package/components/event-control-board/service/e113saf/e113saf.d.ts +14 -0
  58. package/components/event-control-board/service/e205dep/deposit-dto.d.ts +11 -0
  59. package/components/event-control-board/service/e205dep/e205dep-dto.d.ts +15 -0
  60. package/components/event-control-board/service/e205dep/e205dep.d.ts +16 -0
  61. package/components/event-control-board/service/e205dep/e205dep.service.d.ts +12 -0
  62. package/components/event-control-board/service/entity-service.d.ts +72 -0
  63. package/components/event-control-board/service/event-control/event-control-dto.d.ts +12 -0
  64. package/components/event-control-board/service/event-control/event-control.d.ts +18 -0
  65. package/components/event-control-board/service/event-control/event-control.module.d.ts +2 -0
  66. package/components/event-control-board/service/event-control/event-control.service.d.ts +11 -0
  67. package/components/event-control-board/service/event-control-board.service.d.ts +11 -0
  68. package/components/event-control-board/service/event-control-item/event-control-item-dto.d.ts +17 -0
  69. package/components/event-control-board/service/event-control-item/event-control-item.d.ts +23 -0
  70. package/components/event-control-board/service/event-control-item/event-control-item.module.d.ts +2 -0
  71. package/components/event-control-board/service/event-control-item/event-control-item.service.d.ts +15 -0
  72. package/components/event-control-board/service/external-invoice/external-invoice-dto.d.ts +13 -0
  73. package/components/event-control-board/service/external-invoice/external-invoice.d.ts +13 -0
  74. package/components/event-control-board/service/external-invoice/external-invoice.module.d.ts +2 -0
  75. package/components/event-control-board/service/external-invoice/external-invoice.service.d.ts +11 -0
  76. package/components/event-control-board/service/invoice/invoice-dto.d.ts +15 -0
  77. package/components/event-control-board/service/invoice/invoice.d.ts +21 -0
  78. package/components/event-control-board/service/invoice/invoice.module.d.ts +2 -0
  79. package/components/event-control-board/service/invoice/invoice.service.d.ts +11 -0
  80. package/components/event-control-board/service/origination/operationType.d.ts +5 -0
  81. package/components/event-control-board/service/origination/origination-dto.d.ts +50 -0
  82. package/components/event-control-board/service/origination/origination.d.ts +51 -0
  83. package/components/event-control-board/service/origination/origination.module.d.ts +2 -0
  84. package/components/event-control-board/service/origination/origination.service.d.ts +11 -0
  85. package/components/event-control-board/service/paginator-storage.service.d.ts +8 -0
  86. package/components/event-control-board/service/producer-invoice/producer-invoice-dto.d.ts +26 -0
  87. package/components/event-control-board/service/producer-invoice/producer-invoice.d.ts +27 -0
  88. package/components/event-control-board/service/producer-invoice/producer-invoice.module.d.ts +2 -0
  89. package/components/event-control-board/service/producer-invoice/producer-invoice.service.d.ts +11 -0
  90. package/components/event-control-board/service/rural-estate/rural-estate-dto.d.ts +28 -0
  91. package/components/event-control-board/service/rural-estate/rural-estate.d.ts +34 -0
  92. package/components/event-control-board/service/rural-estate/rural-estate.module.d.ts +2 -0
  93. package/components/event-control-board/service/rural-estate/rural-estate.service.d.ts +11 -0
  94. package/components/event-control-board/service/ticket/ticket-dto.d.ts +17 -0
  95. package/components/event-control-board/service/ticket/ticket.d.ts +18 -0
  96. package/components/event-control-board/service/ticket/ticket.module.d.ts +2 -0
  97. package/components/event-control-board/service/ticket/ticket.service.d.ts +45 -0
  98. package/components/event-control-board/shared.module.d.ts +2 -0
  99. package/components/event-steps/event-steps.component.d.ts +35 -0
  100. package/components/event-steps/event-steps.module.d.ts +2 -0
  101. package/components/event-steps/index.d.ts +2 -0
  102. package/components/index.d.ts +2 -0
  103. package/enums/agro-entity-status.enum.d.ts +4 -0
  104. package/enums/agro-numbers.enum.d.ts +1006 -0
  105. package/enums/agro-string-masks.enum.d.ts +10 -0
  106. package/enums/date-comparison-type.enum.d.ts +4 -0
  107. package/enums/http-codes.enum.d.ts +64 -0
  108. package/enums/index.d.ts +6 -0
  109. package/enums/number-comparison-type.enum.d.ts +8 -0
  110. package/esm2015/agro-angular-components.module.js +22 -0
  111. package/esm2015/common/agro-array-utils.class.js +56 -0
  112. package/esm2015/common/agro-cookie-utils.class.js +31 -0
  113. package/esm2015/common/agro-date-utils.class.js +117 -0
  114. package/esm2015/common/agro-name-utils.class.js +59 -0
  115. package/esm2015/common/agro-number-utils.class.js +102 -0
  116. package/esm2015/common/agro-object-utils.class.js +245 -0
  117. package/esm2015/common/agro-platform-utils.class.js +97 -0
  118. package/esm2015/common/agro-regex.constant.js +143 -0
  119. package/esm2015/common/agro-string-utils.class.js +367 -0
  120. package/esm2015/common/colors.class.js +77 -0
  121. package/esm2015/common/index.js +11 -0
  122. package/esm2015/components/event-control-board/common/control-status.js +7 -0
  123. package/esm2015/components/event-control-board/common/documentsToIssue.js +6 -0
  124. package/esm2015/components/event-control-board/common/event-control-constants.js +28 -0
  125. package/esm2015/components/event-control-board/common/event-operation.js +13 -0
  126. package/esm2015/components/event-control-board/common/event-origin.js +9 -0
  127. package/esm2015/components/event-control-board/common/event-status.js +9 -0
  128. package/esm2015/components/event-control-board/common/invoice-status.js +14 -0
  129. package/esm2015/components/event-control-board/common/invoice-type.js +7 -0
  130. package/esm2015/components/event-control-board/common/lookup-error-message.constants.js +11 -0
  131. package/esm2015/components/event-control-board/common/operation.js +7 -0
  132. package/esm2015/components/event-control-board/common/operationType.js +7 -0
  133. package/esm2015/components/event-control-board/common/status-entity.js +6 -0
  134. package/esm2015/components/event-control-board/common/ticket-status.js +9 -0
  135. package/esm2015/components/event-control-board/event-control-board.component.js +503 -0
  136. package/esm2015/components/event-control-board/event-control-board.module.js +62 -0
  137. package/esm2015/components/event-control-board/index.js +21 -0
  138. package/esm2015/components/event-control-board/service/e001pes/e001pes-dto.js +1 -0
  139. package/esm2015/components/event-control-board/service/e001pes/e001pes.js +20 -0
  140. package/esm2015/components/event-control-board/service/e001pes/e001pes.module.js +24 -0
  141. package/esm2015/components/event-control-board/service/e001pes/e001pes.service.js +34 -0
  142. package/esm2015/components/event-control-board/service/e001tns/e001tns-dto.js +1 -0
  143. package/esm2015/components/event-control-board/service/e001tns/e001tns.js +42 -0
  144. package/esm2015/components/event-control-board/service/e001tns/e001tns.module.js +26 -0
  145. package/esm2015/components/event-control-board/service/e001tns/e001tns.service.js +24 -0
  146. package/esm2015/components/event-control-board/service/e012fam/e012fam-dto.js +1 -0
  147. package/esm2015/components/event-control-board/service/e012fam/e012fam.js +20 -0
  148. package/esm2015/components/event-control-board/service/e012fam/e012fam.service.js +24 -0
  149. package/esm2015/components/event-control-board/service/e070emp/e070emp-dto.js +1 -0
  150. package/esm2015/components/event-control-board/service/e070emp/e070emp.js +29 -0
  151. package/esm2015/components/event-control-board/service/e070emp/e070emp.module.js +24 -0
  152. package/esm2015/components/event-control-board/service/e070emp/e070emp.service.js +31 -0
  153. package/esm2015/components/event-control-board/service/e070fil/e070fil-dto.js +1 -0
  154. package/esm2015/components/event-control-board/service/e070fil/e070fil.js +41 -0
  155. package/esm2015/components/event-control-board/service/e070fil/e070fil.module.js +24 -0
  156. package/esm2015/components/event-control-board/service/e070fil/e070fil.service.js +31 -0
  157. package/esm2015/components/event-control-board/service/e075der/e075der-dto.js +1 -0
  158. package/esm2015/components/event-control-board/service/e075der/e075der.js +31 -0
  159. package/esm2015/components/event-control-board/service/e075der/e075der.module.js +24 -0
  160. package/esm2015/components/event-control-board/service/e075der/e075der.service.js +29 -0
  161. package/esm2015/components/event-control-board/service/e113saf/e113saf-dto.js +1 -0
  162. package/esm2015/components/event-control-board/service/e113saf/e113saf.js +20 -0
  163. package/esm2015/components/event-control-board/service/e205dep/deposit-dto.js +1 -0
  164. package/esm2015/components/event-control-board/service/e205dep/e205dep-dto.js +1 -0
  165. package/esm2015/components/event-control-board/service/e205dep/e205dep.js +20 -0
  166. package/esm2015/components/event-control-board/service/e205dep/e205dep.service.js +29 -0
  167. package/esm2015/components/event-control-board/service/entity-service.js +129 -0
  168. package/esm2015/components/event-control-board/service/event-control/event-control-dto.js +1 -0
  169. package/esm2015/components/event-control-board/service/event-control/event-control.js +20 -0
  170. package/esm2015/components/event-control-board/service/event-control/event-control.module.js +26 -0
  171. package/esm2015/components/event-control-board/service/event-control/event-control.service.js +24 -0
  172. package/esm2015/components/event-control-board/service/event-control-board.service.js +33 -0
  173. package/esm2015/components/event-control-board/service/event-control-item/event-control-item-dto.js +1 -0
  174. package/esm2015/components/event-control-board/service/event-control-item/event-control-item.js +34 -0
  175. package/esm2015/components/event-control-board/service/event-control-item/event-control-item.module.js +26 -0
  176. package/esm2015/components/event-control-board/service/event-control-item/event-control-item.service.js +29 -0
  177. package/esm2015/components/event-control-board/service/external-invoice/external-invoice-dto.js +1 -0
  178. package/esm2015/components/event-control-board/service/external-invoice/external-invoice.js +20 -0
  179. package/esm2015/components/event-control-board/service/external-invoice/external-invoice.module.js +26 -0
  180. package/esm2015/components/event-control-board/service/external-invoice/external-invoice.service.js +24 -0
  181. package/esm2015/components/event-control-board/service/invoice/invoice-dto.js +1 -0
  182. package/esm2015/components/event-control-board/service/invoice/invoice.js +43 -0
  183. package/esm2015/components/event-control-board/service/invoice/invoice.module.js +26 -0
  184. package/esm2015/components/event-control-board/service/invoice/invoice.service.js +24 -0
  185. package/esm2015/components/event-control-board/service/origination/operationType.js +7 -0
  186. package/esm2015/components/event-control-board/service/origination/origination-dto.js +1 -0
  187. package/esm2015/components/event-control-board/service/origination/origination.js +59 -0
  188. package/esm2015/components/event-control-board/service/origination/origination.module.js +24 -0
  189. package/esm2015/components/event-control-board/service/origination/origination.service.js +24 -0
  190. package/esm2015/components/event-control-board/service/paginator-storage.service.js +32 -0
  191. package/esm2015/components/event-control-board/service/producer-invoice/producer-invoice-dto.js +1 -0
  192. package/esm2015/components/event-control-board/service/producer-invoice/producer-invoice.js +32 -0
  193. package/esm2015/components/event-control-board/service/producer-invoice/producer-invoice.module.js +26 -0
  194. package/esm2015/components/event-control-board/service/producer-invoice/producer-invoice.service.js +24 -0
  195. package/esm2015/components/event-control-board/service/rural-estate/rural-estate-dto.js +1 -0
  196. package/esm2015/components/event-control-board/service/rural-estate/rural-estate.js +78 -0
  197. package/esm2015/components/event-control-board/service/rural-estate/rural-estate.module.js +26 -0
  198. package/esm2015/components/event-control-board/service/rural-estate/rural-estate.service.js +24 -0
  199. package/esm2015/components/event-control-board/service/ticket/ticket-dto.js +1 -0
  200. package/esm2015/components/event-control-board/service/ticket/ticket.js +39 -0
  201. package/esm2015/components/event-control-board/service/ticket/ticket.module.js +26 -0
  202. package/esm2015/components/event-control-board/service/ticket/ticket.service.js +59 -0
  203. package/esm2015/components/event-control-board/shared.module.js +60 -0
  204. package/esm2015/components/event-steps/event-steps.component.js +103 -0
  205. package/esm2015/components/event-steps/event-steps.module.js +16 -0
  206. package/esm2015/components/event-steps/index.js +3 -0
  207. package/esm2015/components/index.js +3 -0
  208. package/esm2015/enums/agro-entity-status.enum.js +6 -0
  209. package/esm2015/enums/agro-numbers.enum.js +1007 -0
  210. package/esm2015/enums/agro-string-masks.enum.js +12 -0
  211. package/esm2015/enums/date-comparison-type.enum.js +6 -0
  212. package/esm2015/enums/http-codes.enum.js +66 -0
  213. package/esm2015/enums/index.js +7 -0
  214. package/esm2015/enums/number-comparison-type.enum.js +10 -0
  215. package/esm2015/form-validator/agro-form-validator.js +229 -0
  216. package/esm2015/form-validator/index.js +2 -0
  217. package/esm2015/lib-translation.module.js +21 -0
  218. package/esm2015/pipe/index.js +2 -0
  219. package/esm2015/pipe/lib-translate.pipe.js +24 -0
  220. package/esm2015/public-api.js +9 -0
  221. package/esm2015/senior-agronegocio-angular-components.js +6 -0
  222. package/esm2015/services/i18n/en-US.js +195 -0
  223. package/esm2015/services/i18n/es-CO.js +195 -0
  224. package/esm2015/services/i18n/pt-BR.js +195 -0
  225. package/esm2015/services/index.js +3 -0
  226. package/esm2015/services/lib-translation.service.js +54 -0
  227. package/esm2015/services/websocket/async-lock.js +34 -0
  228. package/esm2015/services/websocket/index.js +6 -0
  229. package/esm2015/services/websocket/models/index.js +2 -0
  230. package/esm2015/services/websocket/models/primitive-manager.js +39 -0
  231. package/esm2015/services/websocket/protocols/index.js +1 -0
  232. package/esm2015/services/websocket/protocols/on-event-options.js +1 -0
  233. package/esm2015/services/websocket/protocols/primitive-event.js +1 -0
  234. package/esm2015/services/websocket/user-information.service.js +34 -0
  235. package/esm2015/services/websocket/websocket.module.js +21 -0
  236. package/esm2015/services/websocket/websocket.service.js +339 -0
  237. package/esm5/agro-angular-components.module.js +26 -0
  238. package/esm5/common/agro-array-utils.class.js +72 -0
  239. package/esm5/common/agro-cookie-utils.class.js +38 -0
  240. package/esm5/common/agro-date-utils.class.js +122 -0
  241. package/esm5/common/agro-name-utils.class.js +63 -0
  242. package/esm5/common/agro-number-utils.class.js +109 -0
  243. package/esm5/common/agro-object-utils.class.js +250 -0
  244. package/esm5/common/agro-platform-utils.class.js +101 -0
  245. package/esm5/common/agro-regex.constant.js +143 -0
  246. package/esm5/common/agro-string-utils.class.js +383 -0
  247. package/esm5/common/colors.class.js +81 -0
  248. package/esm5/common/index.js +11 -0
  249. package/esm5/components/event-control-board/common/control-status.js +7 -0
  250. package/esm5/components/event-control-board/common/documentsToIssue.js +6 -0
  251. package/esm5/components/event-control-board/common/event-control-constants.js +28 -0
  252. package/esm5/components/event-control-board/common/event-operation.js +13 -0
  253. package/esm5/components/event-control-board/common/event-origin.js +9 -0
  254. package/esm5/components/event-control-board/common/event-status.js +9 -0
  255. package/esm5/components/event-control-board/common/invoice-status.js +14 -0
  256. package/esm5/components/event-control-board/common/invoice-type.js +7 -0
  257. package/esm5/components/event-control-board/common/lookup-error-message.constants.js +11 -0
  258. package/esm5/components/event-control-board/common/operation.js +7 -0
  259. package/esm5/components/event-control-board/common/operationType.js +7 -0
  260. package/esm5/components/event-control-board/common/status-entity.js +6 -0
  261. package/esm5/components/event-control-board/common/ticket-status.js +9 -0
  262. package/esm5/components/event-control-board/event-control-board.component.js +528 -0
  263. package/esm5/components/event-control-board/event-control-board.module.js +65 -0
  264. package/esm5/components/event-control-board/index.js +21 -0
  265. package/esm5/components/event-control-board/service/e001pes/e001pes-dto.js +1 -0
  266. package/esm5/components/event-control-board/service/e001pes/e001pes.js +25 -0
  267. package/esm5/components/event-control-board/service/e001pes/e001pes.module.js +27 -0
  268. package/esm5/components/event-control-board/service/e001pes/e001pes.service.js +37 -0
  269. package/esm5/components/event-control-board/service/e001tns/e001tns-dto.js +1 -0
  270. package/esm5/components/event-control-board/service/e001tns/e001tns.js +45 -0
  271. package/esm5/components/event-control-board/service/e001tns/e001tns.module.js +29 -0
  272. package/esm5/components/event-control-board/service/e001tns/e001tns.service.js +27 -0
  273. package/esm5/components/event-control-board/service/e012fam/e012fam-dto.js +1 -0
  274. package/esm5/components/event-control-board/service/e012fam/e012fam.js +25 -0
  275. package/esm5/components/event-control-board/service/e012fam/e012fam.service.js +27 -0
  276. package/esm5/components/event-control-board/service/e070emp/e070emp-dto.js +1 -0
  277. package/esm5/components/event-control-board/service/e070emp/e070emp.js +34 -0
  278. package/esm5/components/event-control-board/service/e070emp/e070emp.module.js +27 -0
  279. package/esm5/components/event-control-board/service/e070emp/e070emp.service.js +34 -0
  280. package/esm5/components/event-control-board/service/e070fil/e070fil-dto.js +1 -0
  281. package/esm5/components/event-control-board/service/e070fil/e070fil.js +48 -0
  282. package/esm5/components/event-control-board/service/e070fil/e070fil.module.js +27 -0
  283. package/esm5/components/event-control-board/service/e070fil/e070fil.service.js +34 -0
  284. package/esm5/components/event-control-board/service/e075der/e075der-dto.js +1 -0
  285. package/esm5/components/event-control-board/service/e075der/e075der.js +36 -0
  286. package/esm5/components/event-control-board/service/e075der/e075der.module.js +27 -0
  287. package/esm5/components/event-control-board/service/e075der/e075der.service.js +32 -0
  288. package/esm5/components/event-control-board/service/e113saf/e113saf-dto.js +1 -0
  289. package/esm5/components/event-control-board/service/e113saf/e113saf.js +25 -0
  290. package/esm5/components/event-control-board/service/e205dep/deposit-dto.js +1 -0
  291. package/esm5/components/event-control-board/service/e205dep/e205dep-dto.js +1 -0
  292. package/esm5/components/event-control-board/service/e205dep/e205dep.js +25 -0
  293. package/esm5/components/event-control-board/service/e205dep/e205dep.service.js +32 -0
  294. package/esm5/components/event-control-board/service/entity-service.js +140 -0
  295. package/esm5/components/event-control-board/service/event-control/event-control-dto.js +1 -0
  296. package/esm5/components/event-control-board/service/event-control/event-control.js +25 -0
  297. package/esm5/components/event-control-board/service/event-control/event-control.module.js +29 -0
  298. package/esm5/components/event-control-board/service/event-control/event-control.service.js +27 -0
  299. package/esm5/components/event-control-board/service/event-control-board.service.js +34 -0
  300. package/esm5/components/event-control-board/service/event-control-item/event-control-item-dto.js +1 -0
  301. package/esm5/components/event-control-board/service/event-control-item/event-control-item.js +39 -0
  302. package/esm5/components/event-control-board/service/event-control-item/event-control-item.module.js +29 -0
  303. package/esm5/components/event-control-board/service/event-control-item/event-control-item.service.js +32 -0
  304. package/esm5/components/event-control-board/service/external-invoice/external-invoice-dto.js +1 -0
  305. package/esm5/components/event-control-board/service/external-invoice/external-invoice.js +25 -0
  306. package/esm5/components/event-control-board/service/external-invoice/external-invoice.module.js +29 -0
  307. package/esm5/components/event-control-board/service/external-invoice/external-invoice.service.js +27 -0
  308. package/esm5/components/event-control-board/service/invoice/invoice-dto.js +1 -0
  309. package/esm5/components/event-control-board/service/invoice/invoice.js +48 -0
  310. package/esm5/components/event-control-board/service/invoice/invoice.module.js +29 -0
  311. package/esm5/components/event-control-board/service/invoice/invoice.service.js +27 -0
  312. package/esm5/components/event-control-board/service/origination/operationType.js +7 -0
  313. package/esm5/components/event-control-board/service/origination/origination-dto.js +1 -0
  314. package/esm5/components/event-control-board/service/origination/origination.js +62 -0
  315. package/esm5/components/event-control-board/service/origination/origination.module.js +27 -0
  316. package/esm5/components/event-control-board/service/origination/origination.service.js +27 -0
  317. package/esm5/components/event-control-board/service/paginator-storage.service.js +71 -0
  318. package/esm5/components/event-control-board/service/producer-invoice/producer-invoice-dto.js +1 -0
  319. package/esm5/components/event-control-board/service/producer-invoice/producer-invoice.js +37 -0
  320. package/esm5/components/event-control-board/service/producer-invoice/producer-invoice.module.js +29 -0
  321. package/esm5/components/event-control-board/service/producer-invoice/producer-invoice.service.js +27 -0
  322. package/esm5/components/event-control-board/service/rural-estate/rural-estate-dto.js +1 -0
  323. package/esm5/components/event-control-board/service/rural-estate/rural-estate.js +83 -0
  324. package/esm5/components/event-control-board/service/rural-estate/rural-estate.module.js +29 -0
  325. package/esm5/components/event-control-board/service/rural-estate/rural-estate.service.js +27 -0
  326. package/esm5/components/event-control-board/service/ticket/ticket-dto.js +1 -0
  327. package/esm5/components/event-control-board/service/ticket/ticket.js +44 -0
  328. package/esm5/components/event-control-board/service/ticket/ticket.module.js +29 -0
  329. package/esm5/components/event-control-board/service/ticket/ticket.service.js +62 -0
  330. package/esm5/components/event-control-board/shared.module.js +63 -0
  331. package/esm5/components/event-steps/event-steps.component.js +113 -0
  332. package/esm5/components/event-steps/event-steps.module.js +19 -0
  333. package/esm5/components/event-steps/index.js +3 -0
  334. package/esm5/components/index.js +3 -0
  335. package/esm5/enums/agro-entity-status.enum.js +6 -0
  336. package/esm5/enums/agro-numbers.enum.js +1007 -0
  337. package/esm5/enums/agro-string-masks.enum.js +12 -0
  338. package/esm5/enums/date-comparison-type.enum.js +6 -0
  339. package/esm5/enums/http-codes.enum.js +66 -0
  340. package/esm5/enums/index.js +7 -0
  341. package/esm5/enums/number-comparison-type.enum.js +10 -0
  342. package/esm5/form-validator/agro-form-validator.js +239 -0
  343. package/esm5/form-validator/index.js +2 -0
  344. package/esm5/lib-translation.module.js +24 -0
  345. package/esm5/pipe/index.js +2 -0
  346. package/esm5/pipe/lib-translate.pipe.js +29 -0
  347. package/esm5/public-api.js +9 -0
  348. package/esm5/senior-agronegocio-angular-components.js +6 -0
  349. package/esm5/services/i18n/en-US.js +195 -0
  350. package/esm5/services/i18n/es-CO.js +195 -0
  351. package/esm5/services/i18n/pt-BR.js +195 -0
  352. package/esm5/services/index.js +3 -0
  353. package/esm5/services/lib-translation.service.js +56 -0
  354. package/esm5/services/websocket/async-lock.js +43 -0
  355. package/esm5/services/websocket/index.js +6 -0
  356. package/esm5/services/websocket/models/index.js +2 -0
  357. package/esm5/services/websocket/models/primitive-manager.js +58 -0
  358. package/esm5/services/websocket/protocols/index.js +1 -0
  359. package/esm5/services/websocket/protocols/on-event-options.js +1 -0
  360. package/esm5/services/websocket/protocols/primitive-event.js +1 -0
  361. package/esm5/services/websocket/user-information.service.js +38 -0
  362. package/esm5/services/websocket/websocket.module.js +24 -0
  363. package/esm5/services/websocket/websocket.service.js +411 -0
  364. package/fesm2015/senior-agronegocio-angular-components.js +5279 -0
  365. package/fesm2015/senior-agronegocio-angular-components.js.map +1 -0
  366. package/fesm5/senior-agronegocio-angular-components.js +5638 -0
  367. package/fesm5/senior-agronegocio-angular-components.js.map +1 -0
  368. package/form-validator/agro-form-validator.d.ts +103 -0
  369. package/form-validator/index.d.ts +1 -0
  370. package/lib-translation.module.d.ts +2 -0
  371. package/package.json +82 -0
  372. package/pipe/index.d.ts +1 -0
  373. package/pipe/lib-translate.pipe.d.ts +7 -0
  374. package/public-api.d.ts +8 -0
  375. package/senior-agronegocio-angular-components.d.ts +5 -0
  376. package/senior-agronegocio-angular-components.metadata.json +1 -0
  377. package/services/i18n/en-US.d.ts +194 -0
  378. package/services/i18n/es-CO.d.ts +194 -0
  379. package/services/i18n/pt-BR.d.ts +194 -0
  380. package/services/index.d.ts +2 -0
  381. package/services/lib-translation.service.d.ts +15 -0
  382. package/services/websocket/async-lock.d.ts +6 -0
  383. package/services/websocket/index.d.ts +6 -0
  384. package/services/websocket/models/index.d.ts +1 -0
  385. package/services/websocket/models/primitive-manager.d.ts +19 -0
  386. package/services/websocket/protocols/index.d.ts +2 -0
  387. package/services/websocket/protocols/on-event-options.d.ts +8 -0
  388. package/services/websocket/protocols/primitive-event.d.ts +10 -0
  389. package/services/websocket/user-information.service.d.ts +7 -0
  390. package/services/websocket/websocket.module.d.ts +2 -0
  391. package/services/websocket/websocket.service.d.ts +100 -0
@@ -0,0 +1,528 @@
1
+ import { __assign, __awaiter, __decorate, __generator, __read, __spread } from "tslib";
2
+ import { FormBuilder, FormGroup, Validators } from "@angular/forms";
3
+ import { catchError, map, switchMap, takeUntil } from "rxjs/operators";
4
+ import { forkJoin, Subject } from "rxjs";
5
+ import { BadgeColors, ButtonPriority, FieldType, FormField, StepState } from "@seniorsistemas/angular-components";
6
+ import { registerLocaleData } from "@angular/common";
7
+ import localePt from "@angular/common/locales/pt";
8
+ import { Component, Input, LOCALE_ID } from '@angular/core';
9
+ import { ActivatedRoute } from '@angular/router';
10
+ import { WebsocketService } from "../../services/websocket";
11
+ import { LookupErrorMessages } from "./common/lookup-error-message.constants";
12
+ import { MessageService } from "primeng";
13
+ import { PaginatorStorageService } from "./service/paginator-storage.service";
14
+ import { EventStatus } from "./common/event-status";
15
+ import { eventItem } from "./common/event-control-constants";
16
+ import { EventOrigin } from "./common/event-origin";
17
+ import { EventControlBoardService } from "./service/event-control-board.service";
18
+ var moment = require("moment");
19
+ import { AGRO_NUMBERS } from "../../enums/agro-numbers.enum";
20
+ import { LibTranslationService } from "../../services/lib-translation.service";
21
+ var EventControlBoardComponent = /** @class */ (function () {
22
+ function EventControlBoardComponent(route, translate, formBuilder, websocketService, eventControlBoardService, paginatorStorageService, messageService) {
23
+ this.route = route;
24
+ this.translate = translate;
25
+ this.formBuilder = formBuilder;
26
+ this.websocketService = websocketService;
27
+ this.eventControlBoardService = eventControlBoardService;
28
+ this.paginatorStorageService = paginatorStorageService;
29
+ this.messageService = messageService;
30
+ this.steps = [];
31
+ this.showSidebar = false;
32
+ this.showReprocessButton = false;
33
+ this.gridTotalRecords = AGRO_NUMBERS.ZERO;
34
+ this.gridLoading = false;
35
+ this.displayModal = false;
36
+ this.ButtonPriority = ButtonPriority;
37
+ this.BadgeColors = BadgeColors;
38
+ this.permissions = {};
39
+ this.localeConfig = {};
40
+ this.currentListParams = { page: AGRO_NUMBERS.ZERO, size: AGRO_NUMBERS.TEN, sort: [], filterData: {} };
41
+ this.ngUnsubscribe = new Subject();
42
+ this.eventItem = eventItem;
43
+ registerLocaleData(localePt);
44
+ }
45
+ EventControlBoardComponent.prototype.ngOnInit = function () {
46
+ return __awaiter(this, void 0, void 0, function () {
47
+ var _this = this;
48
+ return __generator(this, function (_a) {
49
+ this.route.data.pipe(takeUntil(this.ngUnsubscribe)).subscribe(function (data) { return _this.onRouteDataChange(data); });
50
+ this.gridColumns = this.setGridColumns();
51
+ this.websocketService.onConnect();
52
+ this.callWebsocket();
53
+ return [2 /*return*/];
54
+ });
55
+ });
56
+ };
57
+ EventControlBoardComponent.prototype.ngOnChanges = function (changes) {
58
+ if (!this.filterFormGroup) {
59
+ this.initializeFormGroup();
60
+ this.setFormFields();
61
+ }
62
+ this.updateCompanyAndBranchFormFields(changes);
63
+ this.updateEventOriginAndTicketFormFields(changes);
64
+ this.updateEventStatusAndCreatedDateFormFields(changes);
65
+ this.onSearch();
66
+ };
67
+ EventControlBoardComponent.prototype.updateCompanyAndBranchFormFields = function (changes) {
68
+ var _a, _b, _c, _d;
69
+ if (changes.e070emp && changes.e070emp.currentValue !== changes.e070emp.previousValue) {
70
+ (_a = this.filterFormGroup.get('e070emp')) === null || _a === void 0 ? void 0 : _a.setValue((_b = changes.e070emp.currentValue) !== null && _b !== void 0 ? _b : null);
71
+ }
72
+ if (changes.e070fil && changes.e070fil.currentValue !== changes.e070fil.previousValue) {
73
+ (_c = this.filterFormGroup.get('e070fil')) === null || _c === void 0 ? void 0 : _c.setValue((_d = changes.e070fil.currentValue) !== null && _d !== void 0 ? _d : null);
74
+ }
75
+ };
76
+ EventControlBoardComponent.prototype.updateEventOriginAndTicketFormFields = function (changes) {
77
+ var _a, _b, _c, _d;
78
+ if (changes.eventOrigin && changes.eventOrigin.currentValue !== changes.eventOrigin.previousValue) {
79
+ (_a = this.filterFormGroup.get('eventOrigin')) === null || _a === void 0 ? void 0 : _a.setValue((_b = changes.eventOrigin.currentValue) !== null && _b !== void 0 ? _b : null);
80
+ }
81
+ if (changes.ticket && changes.ticket.currentValue !== changes.ticket.previousValue) {
82
+ (_c = this.filterFormGroup.get('number')) === null || _c === void 0 ? void 0 : _c.setValue((_d = changes.ticket.currentValue) !== null && _d !== void 0 ? _d : null);
83
+ }
84
+ };
85
+ EventControlBoardComponent.prototype.updateEventStatusAndCreatedDateFormFields = function (changes) {
86
+ var _a, _b, _c, _d;
87
+ if (changes.eventStatus && changes.eventStatus.currentValue !== changes.eventStatus.previousValue) {
88
+ (_a = this.filterFormGroup.get('status')) === null || _a === void 0 ? void 0 : _a.setValue((_b = changes.eventStatus.currentValue) !== null && _b !== void 0 ? _b : null);
89
+ }
90
+ if (changes.createdDate && changes.createdDate.currentValue !== changes.createdDate.previousValue) {
91
+ (_c = this.filterFormGroup.get('createdDate')) === null || _c === void 0 ? void 0 : _c.setValue((_d = changes.createdDate.currentValue) !== null && _d !== void 0 ? _d : null);
92
+ }
93
+ };
94
+ EventControlBoardComponent.prototype.initializeFormGroup = function () {
95
+ var _a, _b, _c, _d, _e, _f, _g;
96
+ this.filterFormGroup = this.formBuilder.group({
97
+ e070emp: [{ value: (_a = this.e070emp) !== null && _a !== void 0 ? _a : null, disabled: false }, Validators.compose([])],
98
+ e070fil: [{ value: (_b = this.e070fil) !== null && _b !== void 0 ? _b : null, disabled: false }, Validators.compose([])],
99
+ number: [{ value: (_c = this.ticket) !== null && _c !== void 0 ? _c : null, disabled: false }, Validators.compose([])],
100
+ externalId: [{ value: (_d = this.externalId) !== null && _d !== void 0 ? _d : null, disabled: false }, Validators.compose([])],
101
+ eventOrigin: [{ value: (_e = this.eventOrigin) !== null && _e !== void 0 ? _e : null, disabled: false }, Validators.compose([])],
102
+ status: [{ value: (_f = this.eventStatus) !== null && _f !== void 0 ? _f : null, disabled: false }, Validators.compose([])],
103
+ createdDate: [{ value: (_g = this.createdDate) !== null && _g !== void 0 ? _g : null, disabled: false }, Validators.compose([])],
104
+ });
105
+ };
106
+ EventControlBoardComponent.prototype.setFormFields = function () {
107
+ this.filterFields = [
108
+ new FormField({
109
+ name: "e070emp",
110
+ type: FieldType.Chips,
111
+ }),
112
+ new FormField({
113
+ name: "e070fil",
114
+ type: FieldType.Chips,
115
+ }),
116
+ new FormField({
117
+ name: "number",
118
+ type: FieldType.Chips,
119
+ }),
120
+ new FormField({
121
+ name: "externalId",
122
+ type: FieldType.String,
123
+ }),
124
+ new FormField({
125
+ name: "eventOrigin",
126
+ type: FieldType.Enum,
127
+ }),
128
+ new FormField({
129
+ name: "status",
130
+ type: FieldType.Enum,
131
+ }),
132
+ new FormField({
133
+ name: "createdDate",
134
+ type: FieldType.Date,
135
+ }),
136
+ ];
137
+ };
138
+ EventControlBoardComponent.prototype.setGridColumns = function () {
139
+ return [
140
+ { field: 'e070emp', header: this.translate.instant("agro.angular_components.company") },
141
+ { field: 'e070fil', header: this.translate.instant("agro.angular_components.label_branch") },
142
+ { field: 'eventOrigin', header: this.translate.instant("agro.angular_components.event_origin_label") },
143
+ { field: 'number', header: this.translate.instant("agro.angular_components.ticket") },
144
+ ];
145
+ };
146
+ EventControlBoardComponent.prototype.ngOnDestroy = function () {
147
+ this.ngUnsubscribe.next();
148
+ this.ngUnsubscribe.complete();
149
+ this.websocketService.disconnect();
150
+ };
151
+ EventControlBoardComponent.prototype.callWebsocket = function () {
152
+ var _this = this;
153
+ this.websocketService
154
+ .onEvent({
155
+ domain: 'agro',
156
+ service: 'agro_events',
157
+ primitive: "processedEvent",
158
+ })
159
+ .pipe(takeUntil(this.ngUnsubscribe))
160
+ .subscribe(function () {
161
+ var filterData = _this.filterFormGroup.getRawValue();
162
+ _this.updateGrid({ filterData: filterData });
163
+ });
164
+ this.websocketService
165
+ .onEvent({
166
+ domain: 'platform',
167
+ service: 'notifications',
168
+ primitive: "userNotified",
169
+ })
170
+ .pipe(takeUntil(this.ngUnsubscribe))
171
+ .subscribe(function () {
172
+ var filterData = _this.filterFormGroup.getRawValue();
173
+ _this.updateGrid({ filterData: filterData });
174
+ });
175
+ };
176
+ EventControlBoardComponent.prototype.onSearch = function () {
177
+ var filterData = this.filterFormGroup.getRawValue();
178
+ this.gridLoading = true;
179
+ this.resetGrid({ filterData: filterData });
180
+ this.updateGrid({ filterData: filterData });
181
+ };
182
+ EventControlBoardComponent.prototype.onRouteDataChange = function (data) {
183
+ this.permissions = data.allPermissions;
184
+ this.localeConfig = data.localeConfig;
185
+ };
186
+ EventControlBoardComponent.prototype.resetGrid = function (listParams) {
187
+ if (listParams) {
188
+ this.currentListParams = __assign(__assign({}, this.currentListParams), listParams);
189
+ }
190
+ this.currentListParams.page = AGRO_NUMBERS.ZERO;
191
+ };
192
+ EventControlBoardComponent.prototype.updateGrid = function (listParams) {
193
+ var _this = this;
194
+ if (listParams === void 0) { listParams = {}; }
195
+ this.currentListParams = __assign(__assign({}, this.currentListParams), listParams);
196
+ var _a = this.currentListParams, page = _a.page, size = _a.size;
197
+ var nSort = this.getSortedFields();
198
+ var filterQuery = this.getFilterQuery();
199
+ var displayFields = [""];
200
+ this.eventControlBoardService.eventControlService
201
+ .list({ sort: nSort, page: page, size: size, filterQuery: filterQuery, displayFields: displayFields })
202
+ .pipe(takeUntil(this.ngUnsubscribe), catchError(function (err) {
203
+ _this.gridLoading = false;
204
+ throw err;
205
+ }))
206
+ .subscribe(function (list) { return _this.handleListResponse(list); });
207
+ };
208
+ EventControlBoardComponent.prototype.getSortedFields = function () {
209
+ var _this = this;
210
+ var _a;
211
+ var nSort = [];
212
+ if (((_a = this.currentListParams.sort) === null || _a === void 0 ? void 0 : _a.length) > 0) {
213
+ nSort = JSON.parse(JSON.stringify(this.currentListParams.sort));
214
+ nSort.forEach(function (sortItem) {
215
+ sortItem.field = _this.getFieldNameForSortRequest(sortItem.field);
216
+ });
217
+ }
218
+ else {
219
+ nSort.push({ field: 'lastModifiedDate', order: AGRO_NUMBERS.MINUSONE });
220
+ }
221
+ return nSort;
222
+ };
223
+ EventControlBoardComponent.prototype.getFilterQuery = function () {
224
+ var _this = this;
225
+ var filterData = this.currentListParams.filterData;
226
+ var filterJson = { filter: {} };
227
+ return __spread(this.filterFields).filter(function (_a) {
228
+ var name = _a.name;
229
+ return filterData && filterData[name] !== undefined && filterData[name] !== null && filterData[name].length !== 0;
230
+ })
231
+ .map(function (formField) {
232
+ var _a;
233
+ var lookupFieldName = 'id';
234
+ var finalFilterName = (_a = formField.name) !== null && _a !== void 0 ? _a : '';
235
+ filterJson.filter[finalFilterName] = filterData[finalFilterName].id;
236
+ return _this.createFilterString(finalFilterName, formField.type, filterData[finalFilterName], lookupFieldName);
237
+ })
238
+ .filter(function (filter) { return filter !== null && filter !== '' && filter !== undefined; })
239
+ .join(' and ');
240
+ };
241
+ EventControlBoardComponent.prototype.handleListResponse = function (list) {
242
+ this.gridData = list.contents;
243
+ this.gridTotalRecords = list.totalElements;
244
+ if (!this.gridData || this.gridData.length <= AGRO_NUMBERS.ZERO) {
245
+ this.gridLoading = false;
246
+ return;
247
+ }
248
+ this.processDetailCalls();
249
+ };
250
+ EventControlBoardComponent.prototype.processDetailCalls = function () {
251
+ var _this = this;
252
+ var detailCalls$ = this.gridData.map(function (item) {
253
+ return _this.eventControlBoardService.eventControlItemService.list({
254
+ filterQuery: "eventControl eq '" + item.id + "'",
255
+ sort: [{ field: 'sequence', order: AGRO_NUMBERS.ONE }],
256
+ size: AGRO_NUMBERS.ONE_HUNDRED
257
+ })
258
+ .pipe(takeUntil(_this.ngUnsubscribe), catchError(function (err) {
259
+ _this.gridLoading = false;
260
+ throw err;
261
+ }), switchMap(function (detailsResponse) {
262
+ return _this.eventControlBoardService.ticketService.list({
263
+ filterQuery: "id eq '" + item.externalId + "' or balanceEntryControl.id eq '" + item.externalId + "'",
264
+ displayFields: ['number']
265
+ })
266
+ .pipe(map(function (ticketResponse) { return ({ detailsResponse: detailsResponse, ticketResponse: ticketResponse }); }), catchError(function (err) {
267
+ _this.gridLoading = false;
268
+ throw err;
269
+ }));
270
+ }));
271
+ });
272
+ forkJoin(detailCalls$).subscribe(function (responses) {
273
+ _this.processDetailsResponses(responses);
274
+ });
275
+ };
276
+ EventControlBoardComponent.prototype.processDetailsResponses = function (detailsResponses) {
277
+ var _this = this;
278
+ this.gridData.forEach(function (item, index) {
279
+ var _a, _b;
280
+ var _c = detailsResponses[index], detailsResponse = _c.detailsResponse, ticketResponse = _c.ticketResponse;
281
+ var tickets = (_a = ticketResponse === null || ticketResponse === void 0 ? void 0 : ticketResponse.contents) !== null && _a !== void 0 ? _a : [];
282
+ item.details = (_b = detailsResponse === null || detailsResponse === void 0 ? void 0 : detailsResponse.contents) !== null && _b !== void 0 ? _b : [];
283
+ item.tickets = tickets.map(function (ticket) { return ticket.number; }).join(', ');
284
+ var groupedDetails = _this.groupByEventGroup(item.details);
285
+ item.groups = Object.keys(groupedDetails).map(function (eventGroupId) {
286
+ var groupDetails = groupedDetails[eventGroupId];
287
+ var lastActiveIndex = groupDetails.map(function (detail) {
288
+ return detail.status !== EventStatus.PENDING;
289
+ }).lastIndexOf(true);
290
+ var activeIndex = lastActiveIndex;
291
+ if (lastActiveIndex !== -1 && groupDetails[lastActiveIndex].status === EventStatus.SUCCESS) {
292
+ activeIndex = lastActiveIndex + 1;
293
+ }
294
+ var steps = groupDetails.map(function (detail, detailIndex) {
295
+ return {
296
+ item: detail,
297
+ ticket: item.tickets,
298
+ eventType: detail.eventControl.eventOrigin,
299
+ label: _this.getEventLabel(detail),
300
+ disabled: detail.status === EventStatus.PENDING && detailIndex !== activeIndex,
301
+ tooltip: _this.getEventLabel(detail),
302
+ state: _this.determineStepState(detail),
303
+ };
304
+ });
305
+ return {
306
+ eventGroupId: eventGroupId,
307
+ steps: steps,
308
+ activeIndex: activeIndex
309
+ };
310
+ });
311
+ item.activeIndex = item.groups.length > 0 ? item.groups[0].activeIndex : -1;
312
+ });
313
+ this.gridDataResolved = this.gridData;
314
+ this.gridLoading = false;
315
+ };
316
+ EventControlBoardComponent.prototype.groupByEventGroup = function (details) {
317
+ return details.reduce(function (acc, detail) {
318
+ var eventGroupId = detail.eventGroup;
319
+ if (!acc[eventGroupId]) {
320
+ acc[eventGroupId] = [];
321
+ }
322
+ acc[eventGroupId].push(detail);
323
+ return acc;
324
+ }, {});
325
+ };
326
+ EventControlBoardComponent.prototype.determineStepState = function (detail) {
327
+ var state;
328
+ if (detail.status === EventStatus.SUCCESS) {
329
+ state = StepState.Success;
330
+ }
331
+ else if (detail.status === EventStatus.FAILED) {
332
+ state = StepState.Warning;
333
+ }
334
+ else {
335
+ state = StepState.Default;
336
+ }
337
+ return state;
338
+ };
339
+ EventControlBoardComponent.prototype.getEventLabel = function (detail) {
340
+ var _a;
341
+ var eventLabel = (_a = this.eventItem.find(function (e) { return e.value === detail.eventOperation; })) === null || _a === void 0 ? void 0 : _a.label;
342
+ return eventLabel ? this.translate.instant(eventLabel) : detail.eventOperation;
343
+ };
344
+ EventControlBoardComponent.prototype.getFieldNameForSortRequest = function (name) {
345
+ switch (name) {
346
+ case 'e070emp':
347
+ return 'e070emp.nomEmp';
348
+ case 'e070fil':
349
+ return 'e070fil.nomFil';
350
+ case 'number':
351
+ return 'createdDate';
352
+ default:
353
+ return name;
354
+ }
355
+ };
356
+ EventControlBoardComponent.prototype.createFilterString = function (name, type, value, lookupFieldName) {
357
+ if (lookupFieldName === void 0) { lookupFieldName = 'id'; }
358
+ if (name === 'number') {
359
+ var filterParts_1 = [];
360
+ value.forEach(function (item) {
361
+ filterParts_1.push("externalId eq '" + item.id + "'");
362
+ if (item.invoice) {
363
+ filterParts_1.push("externalId eq '" + item.invoice.id + "'");
364
+ }
365
+ if (item.balanceEntryControl) {
366
+ filterParts_1.push("externalId eq '" + item.balanceEntryControl.id + "'");
367
+ }
368
+ });
369
+ return "(" + filterParts_1.join(' or ') + ")";
370
+ }
371
+ return this.createFilterStringFromType(name, type, value, lookupFieldName);
372
+ };
373
+ EventControlBoardComponent.prototype.createFilterStringFromType = function (name, type, value, lookupFieldName) {
374
+ if (type === FieldType.Chips) {
375
+ return name + " eq '" + value[lookupFieldName] + "'";
376
+ }
377
+ if (type === FieldType.Date) {
378
+ var startOfDay = moment(value).startOf('day').format("YYYY-MM-DDTHH:mm:ss") + 'Z';
379
+ var endOfDay = moment(value).endOf('day').format("YYYY-MM-DDTHH:mm:ss") + 'Z';
380
+ return name + " ge '" + startOfDay + "' and " + name + " le '" + endOfDay + "'";
381
+ }
382
+ return name + " eq '" + value + "'";
383
+ };
384
+ EventControlBoardComponent.prototype.onGridChange = function (event) {
385
+ var size = event === null || event === void 0 ? void 0 : event.rows;
386
+ var page = (event === null || event === void 0 ? void 0 : event.first) / size;
387
+ var sort = event.multiSortMeta;
388
+ this.gridLoading = true;
389
+ if (size !== AGRO_NUMBERS.TEN || page !== AGRO_NUMBERS.ZERO || (sort && sort.length > AGRO_NUMBERS.ZERO)) {
390
+ this.paginatorStorageService.storePaginator('EventControlBoardPaginator', { page: page, size: size, sort: sort });
391
+ }
392
+ return this.updateGrid({ page: page, size: size, sort: sort });
393
+ };
394
+ EventControlBoardComponent.prototype.getPageSize = function () {
395
+ return this.currentListParams.size;
396
+ };
397
+ EventControlBoardComponent.prototype.getRowIndex = function () {
398
+ return this.currentListParams.page * this.currentListParams.size;
399
+ };
400
+ EventControlBoardComponent.prototype.getSortField = function () {
401
+ if (!this.currentListParams.sort || this.currentListParams.sort.length <= AGRO_NUMBERS.ZERO) {
402
+ return this.gridColumns[AGRO_NUMBERS.ZERO].field;
403
+ }
404
+ return this.currentListParams.sort[AGRO_NUMBERS.ZERO].field;
405
+ };
406
+ EventControlBoardComponent.prototype.getSortOrder = function () {
407
+ if (!this.currentListParams.sort || this.currentListParams.sort.length <= AGRO_NUMBERS.ZERO) {
408
+ return AGRO_NUMBERS.ONE;
409
+ }
410
+ return this.currentListParams.sort[AGRO_NUMBERS.ZERO].order;
411
+ };
412
+ EventControlBoardComponent.prototype.getErrorMessages = function () {
413
+ var translatedErrorMessages = {};
414
+ var _loop_1 = function (key) {
415
+ if (LookupErrorMessages.hasOwnProperty(key)) {
416
+ this_1.translate.get(LookupErrorMessages[key]).subscribe(function (res) {
417
+ translatedErrorMessages[key] = res;
418
+ });
419
+ }
420
+ };
421
+ var this_1 = this;
422
+ for (var key in LookupErrorMessages) {
423
+ _loop_1(key);
424
+ }
425
+ return translatedErrorMessages;
426
+ };
427
+ EventControlBoardComponent.prototype.stepSelected = function (event) {
428
+ var _this = this;
429
+ this.selectedStep = event.step;
430
+ if (this.selectedStep.eventType !== EventOrigin.CHANGE_REQUEST) {
431
+ this.sidebarLoading = true;
432
+ var param = JSON.parse(this.selectedStep.item.input);
433
+ var producerInvoiceId = param.producerInvoiceIds ? param.producerInvoiceIds[0]
434
+ : param.invoice.generalData.transactionalId;
435
+ this.eventControlBoardService.producerInvoiceService.get(producerInvoiceId)
436
+ .pipe(takeUntil(this.ngUnsubscribe))
437
+ .subscribe(function (result) {
438
+ _this.producerInvoice = result;
439
+ _this.sidebarLoading = false;
440
+ }, function () {
441
+ _this.sidebarLoading = false;
442
+ });
443
+ }
444
+ this.showReprocessButton = event.step.state === StepState.Warning;
445
+ this.sidebarTitle = this.translate.instant('agro.angular_components.event_sidebar_title', { event: event.step.label });
446
+ this.showSidebar = true;
447
+ };
448
+ EventControlBoardComponent.prototype.reprocessEvent = function () {
449
+ var _this = this;
450
+ var reprocessEventObj = {
451
+ eventControlItemId: this.selectedStep.item.id
452
+ };
453
+ this.eventControlBoardService.eventControlItemService.reprocessFailedEvent(reprocessEventObj)
454
+ .pipe(takeUntil(this.ngUnsubscribe))
455
+ .subscribe(function () {
456
+ _this.addMessage('info', 'agro.angular_components.reprocessing_event_message_title', 'agro.angular_components.reprocessing_event_message_description');
457
+ }, function () {
458
+ _this.addMessage('error', 'agro.angular_components.error_reprocessing_event_message_title', 'agro.angular_components.error_reprocessing_event_message_description');
459
+ });
460
+ };
461
+ EventControlBoardComponent.prototype.addMessage = function (severity, summary, detail) {
462
+ this.messageService.add({
463
+ severity: severity,
464
+ summary: this.translate.instant(summary),
465
+ detail: this.translate.instant(detail),
466
+ });
467
+ };
468
+ EventControlBoardComponent.prototype.openModal = function () {
469
+ this.displayModal = true;
470
+ };
471
+ EventControlBoardComponent.prototype.confirmModal = function () {
472
+ this.reprocessEvent();
473
+ this.displayModal = false;
474
+ this.showSidebar = false;
475
+ };
476
+ EventControlBoardComponent.prototype.cancelModal = function () {
477
+ this.displayModal = false;
478
+ };
479
+ EventControlBoardComponent.prototype.closeSidebar = function () {
480
+ this.showSidebar = false;
481
+ };
482
+ EventControlBoardComponent.ctorParameters = function () { return [
483
+ { type: ActivatedRoute },
484
+ { type: LibTranslationService },
485
+ { type: FormBuilder },
486
+ { type: WebsocketService },
487
+ { type: EventControlBoardService },
488
+ { type: PaginatorStorageService },
489
+ { type: MessageService }
490
+ ]; };
491
+ __decorate([
492
+ Input()
493
+ ], EventControlBoardComponent.prototype, "e070emp", void 0);
494
+ __decorate([
495
+ Input()
496
+ ], EventControlBoardComponent.prototype, "e070fil", void 0);
497
+ __decorate([
498
+ Input()
499
+ ], EventControlBoardComponent.prototype, "ticket", void 0);
500
+ __decorate([
501
+ Input()
502
+ ], EventControlBoardComponent.prototype, "eventOrigin", void 0);
503
+ __decorate([
504
+ Input()
505
+ ], EventControlBoardComponent.prototype, "eventStatus", void 0);
506
+ __decorate([
507
+ Input()
508
+ ], EventControlBoardComponent.prototype, "externalId", void 0);
509
+ __decorate([
510
+ Input()
511
+ ], EventControlBoardComponent.prototype, "createdDate", void 0);
512
+ __decorate([
513
+ Input()
514
+ ], EventControlBoardComponent.prototype, "standalone", void 0);
515
+ EventControlBoardComponent = __decorate([
516
+ Component({
517
+ selector: 'event-control-board',
518
+ template: "<div class=\"ui-g\" *sLoadingState=\"gridLoading\">\r\n <div class=\"ui-g-12\">\r\n <p-panel>\r\n <p-header>\r\n {{ \"agro.angular_components.event_control_header\" | libTranslate }}\r\n </p-header>\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-12\">\r\n <s-button\r\n id=\"refresh-button\"\r\n [priority]=\"ButtonPriority.Primary\"\r\n iconClass=\"fa fa-refresh\"\r\n [label]=\"'agro.angular_components.refresh' | libTranslate\"\r\n (click)=\"onSearch()\"\r\n >\r\n </s-button>\r\n </div>\r\n </div>\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-12 ui-md-12\" *ngIf=\"!gridData || gridData?.length === 0\">\r\n <s-empty-state\r\n iconClass=\"fa fa-exclamation-triangle\"\r\n title=\"{{ 'agro.angular_components.nothing_found' | libTranslate }}\"\r\n [showPrimaryAction]=\"false\"\r\n description=\"{{ 'agro.angular_components.table_empty_description' | libTranslate }}\"\r\n >\r\n </s-empty-state>\r\n </div>\r\n <ng-container *ngIf=\"gridData?.length > 0\">\r\n <p-table\r\n stylelass=\"custom-table\"\r\n #eventControlTable\r\n [value]=\"gridDataResolved\"\r\n [columns]=\"gridColumns\"\r\n dataKey=\"id\"\r\n [lazy]=\"true\"\r\n [scrollable]=\"true\"\r\n [resizableColumns]=\"true\"\r\n [paginator]=\"!standalone\"\r\n [totalRecords]=\"gridTotalRecords\"\r\n [rows]=\"10\"\r\n [responsive]=\"true\"\r\n (onLazyLoad)=\"onGridChange($event)\"\r\n [sortOrder]=\"getSortOrder()\"\r\n [first]=\"getRowIndex()\"\r\n [lazyLoadOnInit]=\"false\"\r\n sortMode=\"multiple\"\r\n [rows]=\"getPageSize()\"\r\n [rowsPerPageOptions]=\"[10, 20, 50, 100]\"\r\n >\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <ng-container *ngIf=\"!standalone\">\r\n <th\r\n *ngFor=\"let col of columns\"\r\n class=\"ui-lg-1 ui-md-1\"\r\n [pSortableColumn]=\"col.field\"\r\n scope=\"col\"\r\n >\r\n <div class=\"senior-header\">\r\n <span class=\"senior-header-title\">{{\r\n col.header\r\n }}</span>\r\n <p-sortIcon [field]=\"col.field\"></p-sortIcon>\r\n </div>\r\n </th>\r\n </ng-container>\r\n <th class=\"ui-lg-8 ui-md-7\" scope=\"col\">\r\n {{ \"agro.angular_components.panel_title_events_events\" | libTranslate }}\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr>\r\n <ng-container *ngIf=\"!standalone\">\r\n <td class=\"ui-lg-1 ui-md-1\">\r\n {{ rowData.e070emp?.nomEmp }}\r\n </td>\r\n <td class=\"ui-lg-1 ui-md-1\">\r\n {{ rowData.e070fil?.nomFil }}\r\n </td>\r\n <td class=\"ui-lg-1 ui-md-1\">\r\n <ng-container [ngSwitch]=\"rowData.eventOrigin\">\r\n <span *ngSwitchCase=\"'BALANCE_ENTRY_CONTROL'\">\r\n {{\r\n \"agro.angular_components.balance_entry_control_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'TICKET'\">\r\n {{\r\n \"agro.angular_components.ticket_maintenance_header\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'INVOICE'\">\r\n {{\r\n \"agro.angular_components.invoice_creating_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'CHANGE_REQUEST'\">\r\n {{\r\n \"agro.angular_components.change_request_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n <td class=\"ui-lg-1 ui ui-md-1\">\r\n {{ rowData.tickets || \"\" }}\r\n </td>\r\n </ng-container>\r\n <td class=\"ui-lg-8 ui-md-7\">\r\n <ng-container *ngFor=\"let group of rowData.groups\">\r\n <s-event-steps\r\n [steps]=\"group.steps || []\"\r\n [activeIndex]=\"group.activeIndex\"\r\n (stepSelected)=\"stepSelected($event)\"\r\n >\r\n </s-event-steps>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template\r\n *ngIf=\"!standalone\"\r\n pTemplate=\"paginatorright\"\r\n class=\"custom-table\"\r\n >\r\n <span>\r\n {{\r\n \"agro.angular_components.registers_found\"\r\n | libTranslate : { total: gridTotalRecords }\r\n }}\r\n </span>\r\n </ng-template>\r\n </p-table>\r\n </ng-container>\r\n </div>\r\n </p-panel>\r\n </div>\r\n</div>\r\n<s-sidebar [visible]=\"showSidebar\" (visibleChange)=\"closeSidebar()\" header=\"{{ 'agro.angular_components.event_details_header' | libTranslate }}\">\r\n <div class=\"ui-fluid\">\r\n <p-fieldset legend=\"{{ sidebarTitle }}\" [toggleable]=\"false\">\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{\r\n \"agro.angular_components.event_origin_label\" | libTranslate\r\n }}</strong></span\r\n >\r\n <ng-container [ngSwitch]=\"selectedStep?.item.eventControl.eventOrigin\">\r\n <p *ngSwitchCase=\"'BALANCE_ENTRY_CONTROL'\">\r\n {{ \"agro.angular_components.balance_entry_control_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TICKET'\">\r\n {{ \"agro.angular_components.ticket_maintenance_header\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'INVOICE'\">\r\n {{ \"agro.angular_components.invoice_creating_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'CHANGE_REQUEST'\">\r\n {{ \"agro.angular_components.change_request_event\" | libTranslate }}\r\n </p>\r\n </ng-container>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"producerInvoice?.e001pes.nomPes\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.supplier\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ producerInvoice?.e001pes.nomPes }}</p>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"producerInvoice?.ruralEstate.name\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.rural_estate\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ producerInvoice?.ruralEstate.name }}</p>\r\n </div>\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.ticket\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ selectedStep?.ticket }}</p>\r\n </div>\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.status_label\" | libTranslate }}</strong></span\r\n >\r\n <ng-container [ngSwitch]=\"selectedStep?.item.status\">\r\n <p *ngSwitchCase=\"'SUCCESS'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Green\"\r\n text=\"{{\r\n 'agro.angular_components.panel_title_events_completed_successfully'\r\n | libTranslate\r\n }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'PROCESSING'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Orange\"\r\n text=\"{{ 'agro.angular_components.processing' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'FAILED'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Red\"\r\n text=\"{{\r\n 'agro.angular_components.panel_title_events_ended_with_error'\r\n | libTranslate\r\n }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'PENDING'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Gray\"\r\n text=\"{{ 'agro.angular_components.pending' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n </ng-container>\r\n </div>\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{\r\n \"agro.angular_components.last_update_date\" | libTranslate\r\n }}</strong></span\r\n >\r\n <p>{{ selectedStep?.item.lastModifiedDate | date : \"dd/MM/yyyy HH:mm:ss\" }}</p>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"selectedStep?.item.status === 'FAILED'\">\r\n <span\r\n ><strong>{{\r\n \"agro.angular_components.event_error_message\" | libTranslate\r\n }}</strong></span\r\n >\r\n <p>{{ selectedStep?.item.message || \"-\" }}</p>\r\n </div>\r\n </div>\r\n </p-fieldset>\r\n </div>\r\n <s-footer>\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-12 width-fit\">\r\n <s-button\r\n id=\"sidebar-close-button\"\r\n [priority]=\"ButtonPriority.Primary\"\r\n [label]=\"'agro.angular_components.events_close' | libTranslate\"\r\n [auxiliary]=\"false\"\r\n (click)=\"closeSidebar()\"\r\n >\r\n </s-button>\r\n <s-button\r\n *ngIf=\"showReprocessButton\"\r\n id=\"sidebar-reprocess-button\"\r\n [priority]=\"ButtonPriority.Secondary\"\r\n iconClass=\"fa fa-refresh\"\r\n [label]=\"'agro.angular_components.reprocess_event' | libTranslate\"\r\n [auxiliary]=\"false\"\r\n (click)=\"openModal()\"\r\n >\r\n </s-button>\r\n </div>\r\n </div>\r\n </s-footer>\r\n</s-sidebar>\r\n\r\n<p-dialog [header]=\"'agro.angular_components.event_modal_title' | libTranslate\" [(visible)]=\"displayModal\" [modal]=\"true\" class=\"dialog\">\r\n <div class=\"event-modal-text\">{{ \"agro.angular_components.event_modal\" | libTranslate }}</div>\r\n <p-footer>\r\n <div class=\"ui-dialog-buttonpane ui-widget-content ui-helper-clearfix\">\r\n <button\r\n id=\"modal-yes\"\r\n type=\"button\"\r\n pButton\r\n icon=\"fa fa-check\"\r\n (click)=\"confirmModal()\"\r\n label=\"{{ 'agro.angular_components.yes' | libTranslate }}\"\r\n class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\"\r\n ></button>\r\n <button\r\n id=\"modal-no\"\r\n type=\"button\"\r\n pButton\r\n icon=\"fa fa-close\"\r\n (click)=\"cancelModal()\"\r\n label=\"{{ 'agro.angular_components.no' | libTranslate }}\"\r\n class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\"\r\n ></button>\r\n </div>\r\n </p-footer>\r\n</p-dialog>\r\n",
519
+ providers: [
520
+ { provide: LOCALE_ID, useValue: 'pt-BR' }
521
+ ],
522
+ styles: [".frozen{border-left:2px solid #ddd}.dialog{width:\"600px\";height:\"300px\";z-index:100000}"]
523
+ })
524
+ ], EventControlBoardComponent);
525
+ return EventControlBoardComponent;
526
+ }());
527
+ export { EventControlBoardComponent };
528
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtY29udHJvbC1ib2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvZXZlbnQtY29udHJvbC1ib2FyZC9ldmVudC1jb250cm9sLWJvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQVEsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxRQUFRLE1BQU0sNEJBQTRCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUErQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFOUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUU5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxF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LEdBQW5CO1FBQ0ksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFTSxnREFBVyxHQUFsQjtRQUNJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFTSxpREFBWSxHQUFuQjtRQUNJLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7O2dCQXhlMkIsY0FBYztnQkFDVixxQkFBcUI7Z0JBQ25CLFdBQVc7Z0JBQ04sZ0JBQWdCO2dCQUNSLHdCQUF3QjtnQkFDekIsdUJBQXVCO2dCQUNoQyxjQUFjOztJQS9DMUM7UUFBUixLQUFLLEVBQUU7K0RBQW1CO0lBQ2xCO1FBQVIsS0FBSyxFQUFFOytEQUFtQjtJQUNsQjtRQUFSLEtBQUssRUFBRTs4REFBaUI7SUFDaEI7UUFBUixLQUFLLEVBQUU7bUVBQTJCO0lBQzFCO1FBQVIsS0FBSyxFQUFFO21FQUEyQjtJQUMxQjtRQUFSLEtBQUssRUFBRTtrRUFBcUI7SUFDcEI7UUFBUixLQUFLLEVBQUU7bUVBQW9CO0lBQ25CO1FBQVIsS0FBSyxFQUFFO2tFQUFzQjtJQVRyQiwwQkFBMEI7UUFSdEMsU0FBUyxDQUFDO1lBQ1AsUUFBUSxFQUFFLHFCQUFxQjtZQUMvQix3MGZBQW1EO1lBRW5ELFNBQVMsRUFBRTtnQkFDUCxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTthQUM1Qzs7U0FDSixDQUFDO09BQ1csMEJBQTBCLENBb2hCdEM7SUFBRCxpQ0FBQztDQUFBLEFBcGhCRCxJQW9oQkM7U0FwaEJZLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEJhZGdlQ29sb3JzLCBCdXR0b25Qcmlvcml0eSwgRmllbGRUeXBlLCBGb3JtRmllbGQsIFN0ZXAsIFN0ZXBTdGF0ZSB9IGZyb20gXCJAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzXCI7XHJcbmltcG9ydCB7IHJlZ2lzdGVyTG9jYWxlRGF0YSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IGxvY2FsZVB0IGZyb20gXCJAYW5ndWxhci9jb21tb24vbG9jYWxlcy9wdFwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBMT0NBTEVfSUQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBXZWJzb2NrZXRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3dlYnNvY2tldFwiO1xyXG5pbXBvcnQgeyBMb29rdXBFcnJvck1lc3NhZ2VzIH0gZnJvbSBcIi4vY29tbW9uL2xvb2t1cC1lcnJvci1tZXNzYWdlLmNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBSZXByb2Nlc3NGYWlsZWRFdmVudCB9IGZyb20gXCIuL3NlcnZpY2UvZXZlbnQtY29udHJvbC1pdGVtL2V2ZW50LWNvbnRyb2wtaXRlbS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcInByaW1lbmdcIjtcclxuaW1wb3J0IHsgUGFnaW5hdG9yU3RvcmFnZVNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlL3BhZ2luYXRvci1zdG9yYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXZlbnRDb250cm9sSXRlbSB9IGZyb20gXCIuL3NlcnZpY2UvZXZlbnQtY29udHJvbC1pdGVtL2V2ZW50LWNvbnRyb2wtaXRlbVwiO1xyXG5pbXBvcnQgeyBFdmVudFN0YXR1cyB9IGZyb20gXCIuL2NvbW1vbi9ldmVudC1zdGF0dXNcIjtcclxuaW1wb3J0IHsgZXZlbnRJdGVtIH0gZnJvbSBcIi4vY29tbW9uL2V2ZW50LWNvbnRyb2wtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IEUwNzBFbXAgfSBmcm9tIFwiLi9zZXJ2aWNlL2UwNzBlbXAvZTA3MGVtcFwiO1xyXG5pbXBvcnQgeyBFMDcwRmlsIH0gZnJvbSBcIi4vc2VydmljZS9lMDcwZmlsL2UwNzBmaWxcIjtcclxuaW1wb3J0IHsgRXZlbnRPcmlnaW4gfSBmcm9tIFwiLi9jb21tb24vZXZlbnQtb3JpZ2luXCI7XHJcbmltcG9ydCB7IFRpY2tldCB9IGZyb20gXCIuL3NlcnZpY2UvdGlja2V0L3RpY2tldFwiO1xyXG5pbXBvcnQgeyBFdmVudENvbnRyb2xCb2FyZFNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlL2V2ZW50LWNvbnRyb2wtYm9hcmQuc2VydmljZVwiO1xyXG5jb25zdCBtb21lbnQgPSByZXF1aXJlKFwibW9tZW50XCIpO1xyXG5pbXBvcnQgeyBQcm9kdWNlckludm9pY2VEdG8gfSBmcm9tIFwiLi9zZXJ2aWNlL3Byb2R1Y2VyLWludm9pY2UvcHJvZHVjZXItaW52b2ljZS1kdG9cIjtcclxuaW1wb3J0IHsgQUdST19OVU1CRVJTIH0gZnJvbSBcIi4uLy4uL2VudW1zL2Fncm8tbnVtYmVycy5lbnVtXCI7XHJcbmltcG9ydCB7IExpYlRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9saWItdHJhbnNsYXRpb24uc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2V2ZW50LWNvbnRyb2wtYm9hcmQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V2ZW50LWNvbnRyb2wtYm9hcmQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZXZlbnQtY29udHJvbC1ib2FyZC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgeyBwcm92aWRlOiBMT0NBTEVfSUQsIHVzZVZhbHVlOiAncHQtQlInIH1cclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEV2ZW50Q29udHJvbEJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XHJcblxyXG4gICAgQElucHV0KCkgZTA3MGVtcCE6IEUwNzBFbXA7XHJcbiAgICBASW5wdXQoKSBlMDcwZmlsITogRTA3MEZpbDtcclxuICAgIEBJbnB1dCgpIHRpY2tldCE6IFRpY2tldDtcclxuICAgIEBJbnB1dCgpIGV2ZW50T3JpZ2luITogRXZlbnRPcmlnaW47XHJcbiAgICBASW5wdXQoKSBldmVudFN0YXR1cyE6IEV2ZW50U3RhdHVzO1xyXG4gICAgQElucHV0KCkgZXh0ZXJuYWxJZCE6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGNyZWF0ZWREYXRlITogRGF0ZTtcclxuICAgIEBJbnB1dCgpIHN0YW5kYWxvbmUhOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBwcm9kdWNlckludm9pY2UhOiBQcm9kdWNlckludm9pY2VEdG87XHJcblxyXG4gICAgcHVibGljIHN0ZXBzOiBTdGVwW10gPSBbXTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZFN0ZXA6IGFueTtcclxuICAgIHB1YmxpYyBldmVudElkITogJyc7XHJcbiAgICBwdWJsaWMgc2hvd1NpZGViYXIgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzaG93UmVwcm9jZXNzQnV0dG9uID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc2lkZWJhclRpdGxlITogc3RyaW5nO1xyXG4gICAgcHVibGljIHNpZGViYXJMb2FkaW5nITogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgZmlsdGVyRm9ybUdyb3VwITogRm9ybUdyb3VwO1xyXG4gICAgcHVibGljIGZpbHRlckZpZWxkcyE6IEZvcm1GaWVsZFtdO1xyXG5cclxuICAgIHB1YmxpYyBncmlkRGF0YSE6IGFueVtdO1xyXG4gICAgcHVibGljIGdyaWREYXRhUmVzb2x2ZWQhOiBhbnlbXTtcclxuICAgIHB1YmxpYyBncmlkQ29sdW1ucyE6IGFueVtdO1xyXG4gICAgcHVibGljIGdyaWRUb3RhbFJlY29yZHMgPSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgIHB1YmxpYyBncmlkTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgcHVibGljIGRpc3BsYXlNb2RhbCA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBCdXR0b25Qcmlvcml0eSA9IEJ1dHRvblByaW9yaXR5O1xyXG4gICAgcHVibGljIEJhZGdlQ29sb3JzID0gQmFkZ2VDb2xvcnM7XHJcblxyXG4gICAgcHVibGljIHBlcm1pc3Npb25zOiBhbnkgPSB7fTtcclxuICAgIHB1YmxpYyBsb2NhbGVDb25maWc6IGFueSA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyBjdXJyZW50TGlzdFBhcmFtczogYW55ID0geyBwYWdlOiBBR1JPX05VTUJFUlMuWkVSTywgc2l6ZTogQUdST19OVU1CRVJTLlRFTiwgc29ydDogW10sIGZpbHRlckRhdGE6IHt9IH07XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRJdGVtID0gZXZlbnRJdGVtO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBMaWJUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB3ZWJzb2NrZXRTZXJ2aWNlOiBXZWJzb2NrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRDb250cm9sQm9hcmRTZXJ2aWNlOiBFdmVudENvbnRyb2xCb2FyZFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwYWdpbmF0b3JTdG9yYWdlU2VydmljZTogUGFnaW5hdG9yU3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICByZWdpc3RlckxvY2FsZURhdGEobG9jYWxlUHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJvdXRlLmRhdGEucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHRoaXMub25Sb3V0ZURhdGFDaGFuZ2UoZGF0YSkpO1xyXG4gICAgICAgIHRoaXMuZ3JpZENvbHVtbnMgPSB0aGlzLnNldEdyaWRDb2x1bW5zKCk7XHJcblxyXG4gICAgICAgIHRoaXMud2Vic29ja2V0U2VydmljZS5vbkNvbm5lY3QoKTtcclxuICAgICAgICB0aGlzLmNhbGxXZWJzb2NrZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGlmICghdGhpcy5maWx0ZXJGb3JtR3JvdXApIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplRm9ybUdyb3VwKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVDb21wYW55QW5kQnJhbmNoRm9ybUZpZWxkcyhjaGFuZ2VzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUV2ZW50T3JpZ2luQW5kVGlja2V0Rm9ybUZpZWxkcyhjaGFuZ2VzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUV2ZW50U3RhdHVzQW5kQ3JlYXRlZERhdGVGb3JtRmllbGRzKGNoYW5nZXMpO1xyXG4gICAgICAgIHRoaXMub25TZWFyY2goKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUNvbXBhbnlBbmRCcmFuY2hGb3JtRmllbGRzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoY2hhbmdlcy5lMDcwZW1wICYmIGNoYW5nZXMuZTA3MGVtcC5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuZTA3MGVtcC5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldCgnZTA3MGVtcCcpPy5zZXRWYWx1ZShjaGFuZ2VzLmUwNzBlbXAuY3VycmVudFZhbHVlID8/IG51bGwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNoYW5nZXMuZTA3MGZpbCAmJiBjaGFuZ2VzLmUwNzBmaWwuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLmUwNzBmaWwucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXQoJ2UwNzBmaWwnKT8uc2V0VmFsdWUoY2hhbmdlcy5lMDcwZmlsLmN1cnJlbnRWYWx1ZSA/PyBudWxsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVFdmVudE9yaWdpbkFuZFRpY2tldEZvcm1GaWVsZHMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGlmIChjaGFuZ2VzLmV2ZW50T3JpZ2luICYmIGNoYW5nZXMuZXZlbnRPcmlnaW4uY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLmV2ZW50T3JpZ2luLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0KCdldmVudE9yaWdpbicpPy5zZXRWYWx1ZShjaGFuZ2VzLmV2ZW50T3JpZ2luLmN1cnJlbnRWYWx1ZSA/PyBudWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2VzLnRpY2tldCAmJiBjaGFuZ2VzLnRpY2tldC5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMudGlja2V0LnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0KCdudW1iZXInKT8uc2V0VmFsdWUoY2hhbmdlcy50aWNrZXQuY3VycmVudFZhbHVlID8/IG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUV2ZW50U3RhdHVzQW5kQ3JlYXRlZERhdGVGb3JtRmllbGRzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoY2hhbmdlcy5ldmVudFN0YXR1cyAmJiBjaGFuZ2VzLmV2ZW50U3RhdHVzLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5ldmVudFN0YXR1cy5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldCgnc3RhdHVzJyk/LnNldFZhbHVlKGNoYW5nZXMuZXZlbnRTdGF0dXMuY3VycmVudFZhbHVlID8/IG51bGwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNoYW5nZXMuY3JlYXRlZERhdGUgJiYgY2hhbmdlcy5jcmVhdGVkRGF0ZS5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuY3JlYXRlZERhdGUucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXQoJ2NyZWF0ZWREYXRlJyk/LnNldFZhbHVlKGNoYW5nZXMuY3JlYXRlZERhdGUuY3VycmVudFZhbHVlID8/IG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRpYWxpemVGb3JtR3JvdXAoKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgZTA3MGVtcDogW3sgdmFsdWU6IHRoaXMuZTA3MGVtcCA/PyBudWxsLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXHJcbiAgICAgICAgICAgIGUwNzBmaWw6IFt7IHZhbHVlOiB0aGlzLmUwNzBmaWwgPz8gbnVsbCwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxyXG4gICAgICAgICAgICBudW1iZXI6IFt7IHZhbHVlOiB0aGlzLnRpY2tldCA/PyBudWxsLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXHJcbiAgICAgICAgICAgIGV4dGVybmFsSWQ6IFt7IHZhbHVlOiB0aGlzLmV4dGVybmFsSWQgPz8gbnVsbCwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxyXG4gICAgICAgICAgICBldmVudE9yaWdpbjogW3sgdmFsdWU6IHRoaXMuZXZlbnRPcmlnaW4gPz8gbnVsbCwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxyXG4gICAgICAgICAgICBzdGF0dXM6IFt7IHZhbHVlOiB0aGlzLmV2ZW50U3RhdHVzID8/IG51bGwsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcclxuICAgICAgICAgICAgY3JlYXRlZERhdGU6IFt7IHZhbHVlOiB0aGlzLmNyZWF0ZWREYXRlID8/IG51bGwsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldEZvcm1GaWVsZHMoKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJGaWVsZHMgPSBbXHJcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJlMDcwZW1wXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuQ2hpcHMsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiZTA3MGZpbFwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkNoaXBzLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm51bWJlclwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkNoaXBzLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcImV4dGVybmFsSWRcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiZXZlbnRPcmlnaW5cIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5FbnVtLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcInN0YXR1c1wiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkVudW0sXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZERhdGVcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5EYXRlLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0R3JpZENvbHVtbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgeyBmaWVsZDogJ2UwNzBlbXAnLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5jb21wYW55XCIpIH0sXHJcbiAgICAgICAgICAgIHsgZmllbGQ6ICdlMDcwZmlsJywgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMubGFiZWxfYnJhbmNoXCIpIH0sXHJcbiAgICAgICAgICAgIHsgZmllbGQ6ICdldmVudE9yaWdpbicsIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmV2ZW50X29yaWdpbl9sYWJlbFwiKSB9LFxyXG4gICAgICAgICAgICB7IGZpZWxkOiAnbnVtYmVyJywgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMudGlja2V0XCIpIH0sXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICAgICAgICB0aGlzLndlYnNvY2tldFNlcnZpY2UuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYWxsV2Vic29ja2V0KCkge1xyXG4gICAgICAgIHRoaXMud2Vic29ja2V0U2VydmljZVxyXG4gICAgICAgIC5vbkV2ZW50PGFueT4oe1xyXG4gICAgICAgICAgICBkb21haW46ICdhZ3JvJyxcclxuICAgICAgICAgICAgc2VydmljZTogJ2Fncm9fZXZlbnRzJyxcclxuICAgICAgICAgICAgcHJpbWl0aXZlOiBcInByb2Nlc3NlZEV2ZW50XCIsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlR3JpZCh7IGZpbHRlckRhdGEgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMud2Vic29ja2V0U2VydmljZVxyXG4gICAgICAgIC5vbkV2ZW50PGFueT4oe1xyXG4gICAgICAgICAgICBkb21haW46ICdwbGF0Zm9ybScsXHJcbiAgICAgICAgICAgIHNlcnZpY2U6ICdub3RpZmljYXRpb25zJyxcclxuICAgICAgICAgICAgcHJpbWl0aXZlOiBcInVzZXJOb3RpZmllZFwiLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUdyaWQoeyBmaWx0ZXJEYXRhIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblNlYXJjaCgpIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJEYXRhID0gdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcclxuICAgICAgICB0aGlzLmdyaWRMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlc2V0R3JpZCh7IGZpbHRlckRhdGEgfSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVHcmlkKHsgZmlsdGVyRGF0YSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Sb3V0ZURhdGFDaGFuZ2UoZGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IGRhdGEuYWxsUGVybWlzc2lvbnM7XHJcbiAgICAgICAgdGhpcy5sb2NhbGVDb25maWcgPSBkYXRhLmxvY2FsZUNvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRHcmlkKGxpc3RQYXJhbXM/OiBhbnkpIHtcclxuICAgICAgICBpZiAobGlzdFBhcmFtcykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zID0geyAuLi50aGlzLmN1cnJlbnRMaXN0UGFyYW1zLCAuLi5saXN0UGFyYW1zIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY3VycmVudExpc3RQYXJhbXMucGFnZSA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlR3JpZChsaXN0UGFyYW1zOiBhbnkgPSB7fSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudExpc3RQYXJhbXMgPSB7IC4uLnRoaXMuY3VycmVudExpc3RQYXJhbXMsIC4uLmxpc3RQYXJhbXMgfTtcclxuICAgICAgICBjb25zdCB7IHBhZ2UsIHNpemUgfSA9IHRoaXMuY3VycmVudExpc3RQYXJhbXM7XHJcbiAgICAgICAgY29uc3QgblNvcnQgPSB0aGlzLmdldFNvcnRlZEZpZWxkcygpO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRGaWx0ZXJRdWVyeSgpO1xyXG5cclxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gW1wiXCJdO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50Q29udHJvbEJvYXJkU2VydmljZS5ldmVudENvbnRyb2xTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5saXN0KHsgc29ydDogblNvcnQsIHBhZ2UsIHNpemUsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHRoaXMuaGFuZGxlTGlzdFJlc3BvbnNlKGxpc3QpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFNvcnRlZEZpZWxkcygpOiBhbnlbXSB7XHJcbiAgICAgICAgbGV0IG5Tb3J0OiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNvcnQ/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgblNvcnQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY3VycmVudExpc3RQYXJhbXMuc29ydCkpO1xyXG4gICAgICAgICAgICBuU29ydC5mb3JFYWNoKChzb3J0SXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzb3J0SXRlbS5maWVsZCA9IHRoaXMuZ2V0RmllbGROYW1lRm9yU29ydFJlcXVlc3Qoc29ydEl0ZW0uZmllbGQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBuU29ydC5wdXNoKHsgZmllbGQ6ICdsYXN0TW9kaWZpZWREYXRlJywgb3JkZXI6IEFHUk9fTlVNQkVSUy5NSU5VU09ORSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5Tb3J0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RmlsdGVyUXVlcnkoKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCB7IGZpbHRlckRhdGEgfSA9IHRoaXMuY3VycmVudExpc3RQYXJhbXM7XHJcbiAgICAgICAgY29uc3QgZmlsdGVySnNvbjogYW55ID0geyBmaWx0ZXI6IHt9IH07XHJcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLmZpbHRlckZpZWxkc11cclxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH06IGFueSkgPT4gZmlsdGVyRGF0YSAmJiBmaWx0ZXJEYXRhW25hbWVdICE9PSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPT0gbnVsbCAmJiBmaWx0ZXJEYXRhW25hbWVdLmxlbmd0aCAhPT0gMClcclxuICAgICAgICAgICAgLm1hcCgoZm9ybUZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb29rdXBGaWVsZE5hbWUgPSAnaWQnO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmluYWxGaWx0ZXJOYW1lID0gZm9ybUZpZWxkLm5hbWUgPz8gJyc7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJKc29uLmZpbHRlcltmaW5hbEZpbHRlck5hbWVdID0gZmlsdGVyRGF0YVtmaW5hbEZpbHRlck5hbWVdLmlkO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRmlsdGVyU3RyaW5nKGZpbmFsRmlsdGVyTmFtZSwgZm9ybUZpZWxkLnR5cGUgYXMgYW55LCBmaWx0ZXJEYXRhW2ZpbmFsRmlsdGVyTmFtZV0sIGxvb2t1cEZpZWxkTmFtZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGZpbHRlcikgPT4gZmlsdGVyICE9PSBudWxsICYmIGZpbHRlciAhPT0gJycgJiYgZmlsdGVyICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIC5qb2luKCcgYW5kICcpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlTGlzdFJlc3BvbnNlKGxpc3Q6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZ3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xyXG4gICAgICAgIHRoaXMuZ3JpZFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcclxuICAgICAgICBpZiAoIXRoaXMuZ3JpZERhdGEgfHwgdGhpcy5ncmlkRGF0YS5sZW5ndGggPD0gQUdST19OVU1CRVJTLlpFUk8pIHtcclxuICAgICAgICAgICAgdGhpcy5ncmlkTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvY2Vzc0RldGFpbENhbGxzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwcm9jZXNzRGV0YWlsQ2FsbHMoKSB7XHJcbiAgICAgICAgY29uc3QgZGV0YWlsQ2FsbHMkID0gdGhpcy5ncmlkRGF0YS5tYXAoKGl0ZW06IGFueSkgPT5cclxuICAgICAgICAgICAgdGhpcy5ldmVudENvbnRyb2xCb2FyZFNlcnZpY2UuZXZlbnRDb250cm9sSXRlbVNlcnZpY2UubGlzdCh7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJRdWVyeTogYGV2ZW50Q29udHJvbCBlcSAnJHtpdGVtLmlkfSdgLFxyXG4gICAgICAgICAgICAgICAgc29ydDogW3sgZmllbGQ6ICdzZXF1ZW5jZScsIG9yZGVyOiBBR1JPX05VTUJFUlMuT05FIH1dLFxyXG4gICAgICAgICAgICAgICAgc2l6ZTogQUdST19OVU1CRVJTLk9ORV9IVU5EUkVEXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChkZXRhaWxzUmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50Q29udHJvbEJvYXJkU2VydmljZS50aWNrZXRTZXJ2aWNlLmxpc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRdWVyeTogYGlkIGVxICcke2l0ZW0uZXh0ZXJuYWxJZH0nIG9yIGJhbGFuY2VFbnRyeUNvbnRyb2wuaWQgZXEgJyR7aXRlbS5leHRlcm5hbElkfSdgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGRzOiBbJ251bWJlciddXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCh0aWNrZXRSZXNwb25zZTogYW55KSA9PiAoeyBkZXRhaWxzUmVzcG9uc2UsIHRpY2tldFJlc3BvbnNlIH0pKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZm9ya0pvaW4oZGV0YWlsQ2FsbHMkKS5zdWJzY3JpYmUoKHJlc3BvbnNlczogYW55W10pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGV0YWlsc1Jlc3BvbnNlcyhyZXNwb25zZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJvY2Vzc0RldGFpbHNSZXNwb25zZXMoZGV0YWlsc1Jlc3BvbnNlczogYW55W10pIHtcclxuICAgICAgICB0aGlzLmdyaWREYXRhLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgZGV0YWlsc1Jlc3BvbnNlLCB0aWNrZXRSZXNwb25zZSB9ID0gZGV0YWlsc1Jlc3BvbnNlc1tpbmRleF07XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0aWNrZXRzID0gdGlja2V0UmVzcG9uc2U/LmNvbnRlbnRzID8/IFtdO1xyXG4gICAgICAgICAgICBpdGVtLmRldGFpbHMgPSBkZXRhaWxzUmVzcG9uc2U/LmNvbnRlbnRzID8/IFtdO1xyXG4gICAgICAgICAgICBpdGVtLnRpY2tldHMgPSB0aWNrZXRzLm1hcCgodGlja2V0OiB7IG51bWJlcjogYW55OyB9KSA9PiB0aWNrZXQubnVtYmVyKS5qb2luKCcsICcpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBlZERldGFpbHMgPSB0aGlzLmdyb3VwQnlFdmVudEdyb3VwKGl0ZW0uZGV0YWlscyk7XHJcblxyXG4gICAgICAgICAgICBpdGVtLmdyb3VwcyA9IE9iamVjdC5rZXlzKGdyb3VwZWREZXRhaWxzKS5tYXAoZXZlbnRHcm91cElkID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwRGV0YWlscyA9IGdyb3VwZWREZXRhaWxzW2V2ZW50R3JvdXBJZF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0QWN0aXZlSW5kZXggPSBncm91cERldGFpbHMubWFwKChkZXRhaWw6IHsgc3RhdHVzOiBzdHJpbmc7IH0pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsLnN0YXR1cyAhPT0gRXZlbnRTdGF0dXMuUEVORElORykubGFzdEluZGV4T2YodHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGFjdGl2ZUluZGV4ID0gbGFzdEFjdGl2ZUluZGV4O1xyXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RBY3RpdmVJbmRleCAhPT0gLTEgJiYgZ3JvdXBEZXRhaWxzW2xhc3RBY3RpdmVJbmRleF0uc3RhdHVzID09PSBFdmVudFN0YXR1cy5TVUNDRVNTKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlSW5kZXggPSBsYXN0QWN0aXZlSW5kZXggKyAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0ZXBzID0gZ3JvdXBEZXRhaWxzLm1hcCgoZGV0YWlsOiBFdmVudENvbnRyb2xJdGVtLCBkZXRhaWxJbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogZGV0YWlsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXQ6IGl0ZW0udGlja2V0cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiBkZXRhaWwuZXZlbnRDb250cm9sLmV2ZW50T3JpZ2luLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5nZXRFdmVudExhYmVsKGRldGFpbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkZXRhaWwuc3RhdHVzID09PSBFdmVudFN0YXR1cy5QRU5ESU5HICYmIGRldGFpbEluZGV4ICE9PSBhY3RpdmVJbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcDogdGhpcy5nZXRFdmVudExhYmVsKGRldGFpbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiB0aGlzLmRldGVybWluZVN0ZXBTdGF0ZShkZXRhaWwpLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50R3JvdXBJZCxcclxuICAgICAgICAgICAgICAgICAgICBzdGVwcyxcclxuICAgICAgICAgICAgICAgICAgICBhY3RpdmVJbmRleFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpdGVtLmFjdGl2ZUluZGV4ID0gaXRlbS5ncm91cHMubGVuZ3RoID4gMCA/IGl0ZW0uZ3JvdXBzWzBdLmFjdGl2ZUluZGV4IDogLTE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5ncmlkRGF0YVJlc29sdmVkID0gdGhpcy5ncmlkRGF0YTtcclxuICAgICAgICB0aGlzLmdyaWRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBncm91cEJ5RXZlbnRHcm91cChkZXRhaWxzOiBhbnlbXSkge1xyXG4gICAgICAgIHJldHVybiBkZXRhaWxzLnJlZHVjZSgoYWNjLCBkZXRhaWwpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZXZlbnRHcm91cElkID0gZGV0YWlsLmV2ZW50R3JvdXA7XHJcbiAgICAgICAgICAgIGlmICghYWNjW2V2ZW50R3JvdXBJZF0pIHtcclxuICAgICAgICAgICAgICAgIGFjY1tldmVudEdyb3VwSWRdID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWNjW2V2ZW50R3JvdXBJZF0ucHVzaChkZXRhaWwpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgIH0sIHt9IGFzIHsgW2tleTogc3RyaW5nXTogYW55W10gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZXRlcm1pbmVTdGVwU3RhdGUoZGV0YWlsOiB7IHN0YXR1czogRXZlbnRTdGF0dXMgfSk6IFN0ZXBTdGF0ZSB7XHJcbiAgICAgICAgbGV0IHN0YXRlO1xyXG4gICAgICAgIGlmIChkZXRhaWwuc3RhdHVzID09PSBFdmVudFN0YXR1cy5TVUNDRVNTKSB7XHJcbiAgICAgICAgICAgIHN0YXRlID0gU3RlcFN0YXRlLlN1Y2Nlc3M7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkZXRhaWwuc3RhdHVzID09PSBFdmVudFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgc3RhdGUgPSBTdGVwU3RhdGUuV2FybmluZztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGF0ZSA9IFN0ZXBTdGF0ZS5EZWZhdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRFdmVudExhYmVsKGRldGFpbDogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBldmVudExhYmVsID0gdGhpcy5ldmVudEl0ZW0uZmluZChlID0+IGUudmFsdWUgPT09IGRldGFpbC5ldmVudE9wZXJhdGlvbik/LmxhYmVsO1xyXG4gICAgICAgIHJldHVybiBldmVudExhYmVsID8gdGhpcy50cmFuc2xhdGUuaW5zdGFudChldmVudExhYmVsKSA6IGRldGFpbC5ldmVudE9wZXJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEZpZWxkTmFtZUZvclNvcnRSZXF1ZXN0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2UwNzBlbXAnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdlMDcwZW1wLm5vbUVtcCc7XHJcbiAgICAgICAgICAgIGNhc2UgJ2UwNzBmaWwnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdlMDcwZmlsLm5vbUZpbCc7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NyZWF0ZWREYXRlJztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZUZpbHRlclN0cmluZyhuYW1lOiBzdHJpbmcsIHR5cGU6IEZpZWxkVHlwZSwgdmFsdWU6IGFueVtdLCBsb29rdXBGaWVsZE5hbWUgPSAnaWQnKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAobmFtZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyUGFydHM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgIHZhbHVlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJQYXJ0cy5wdXNoKGBleHRlcm5hbElkIGVxICcke2l0ZW0uaWR9J2ApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaW52b2ljZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcnRzLnB1c2goYGV4dGVybmFsSWQgZXEgJyR7aXRlbS5pbnZvaWNlLmlkfSdgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmJhbGFuY2VFbnRyeUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJ0cy5wdXNoKGBleHRlcm5hbElkIGVxICcke2l0ZW0uYmFsYW5jZUVudHJ5Q29udHJvbC5pZH0nYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gYCgke2ZpbHRlclBhcnRzLmpvaW4oJyBvciAnKX0pYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRmlsdGVyU3RyaW5nRnJvbVR5cGUobmFtZSwgdHlwZSwgdmFsdWUsIGxvb2t1cEZpZWxkTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVGaWx0ZXJTdHJpbmdGcm9tVHlwZShuYW1lOiBzdHJpbmcsIHR5cGU6IEZpZWxkVHlwZSwgdmFsdWU6IGFueSwgbG9va3VwRmllbGROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuQ2hpcHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlW2xvb2t1cEZpZWxkTmFtZV19J2A7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRGF0ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydE9mRGF5ID0gbW9tZW50KHZhbHVlKS5zdGFydE9mKCdkYXknKS5mb3JtYXQoXCJZWVlZLU1NLUREVEhIOm1tOnNzXCIpICsgJ1onO1xyXG4gICAgICAgICAgICBjb25zdCBlbmRPZkRheSA9IG1vbWVudCh2YWx1ZSkuZW5kT2YoJ2RheScpLmZvcm1hdChcIllZWVktTU0tRERUSEg6bW06c3NcIikgKyAnWic7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZ2UgJyR7c3RhcnRPZkRheX0nIGFuZCAke25hbWV9IGxlICcke2VuZE9mRGF5fSdgO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uR3JpZENoYW5nZShldmVudDogYW55KSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGV2ZW50Py5yb3dzO1xyXG4gICAgICAgIGNvbnN0IHBhZ2UgPSBldmVudD8uZmlyc3QgLyBzaXplO1xyXG4gICAgICAgIGNvbnN0IHNvcnQgPSBldmVudC5tdWx0aVNvcnRNZXRhO1xyXG4gICAgICAgIHRoaXMuZ3JpZExvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIGlmIChzaXplICE9PSBBR1JPX05VTUJFUlMuVEVOIHx8IHBhZ2UgIT09IEFHUk9fTlVNQkVSUy5aRVJPIHx8IChzb3J0ICYmIHNvcnQubGVuZ3RoID4gQUdST19OVU1CRVJTLlpFUk8pKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yU3RvcmFnZVNlcnZpY2Uuc3RvcmVQYWdpbmF0b3IoJ0V2ZW50Q29udHJvbEJvYXJkUGFnaW5hdG9yJywgeyBwYWdlLCBzaXplLCBzb3J0IH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlR3JpZCh7IHBhZ2UsIHNpemUsIHNvcnQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFBhZ2VTaXplKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFJvd0luZGV4KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnBhZ2UgKiB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNvcnRGaWVsZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudExpc3RQYXJhbXMuc29ydCB8fCB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNvcnQubGVuZ3RoIDw9IEFHUk9fTlVNQkVSUy5aRVJPKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWRDb2x1bW5zW0FHUk9fTlVNQkVSUy5aRVJPXS5maWVsZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudExpc3RQYXJhbXMuc29ydFtBR1JPX05VTUJFUlMuWkVST10uZmllbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNvcnRPcmRlcigpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudExpc3RQYXJhbXMuc29ydCB8fCB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNvcnQubGVuZ3RoIDw9IEFHUk9fTlVNQkVSUy5aRVJPKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBBR1JPX05VTUJFUlMuT05FO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudExpc3RQYXJhbXMuc29ydFtBR1JPX05VTUJFUlMuWkVST10ub3JkZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEVycm9yTWVzc2FnZXMoKSB7XHJcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZEVycm9yTWVzc2FnZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBMb29rdXBFcnJvck1lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgIGlmIChMb29rdXBFcnJvck1lc3NhZ2VzLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLmdldChMb29rdXBFcnJvck1lc3NhZ2VzW2tleV0pLnN1YnNjcmliZSgocmVzOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkRXJyb3JNZXNzYWdlc1trZXldID0gcmVzO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWRFcnJvck1lc3NhZ2VzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGVwU2VsZWN0ZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwID0gZXZlbnQuc3RlcDtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFN0ZXAuZXZlbnRUeXBlICE9PSBFdmVudE9yaWdpbi5DSEFOR0VfUkVRVUVTVCkge1xyXG4gICAgICAgICAgICB0aGlzLnNpZGViYXJMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW0gPSBKU09OLnBhcnNlKHRoaXMuc2VsZWN0ZWRTdGVwLml0ZW0uaW5wdXQpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjZXJJbnZvaWNlSWQgPSBwYXJhbS5wcm9kdWNlckludm9pY2VJZHMgPyBwYXJhbS5wcm9kdWNlckludm9pY2VJZHNbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwYXJhbS5pbnZvaWNlLmdlbmVyYWxEYXRhLnRyYW5zYWN0aW9uYWxJZDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRDb250cm9sQm9hcmRTZXJ2aWNlLnByb2R1Y2VySW52b2ljZVNlcnZpY2UuZ2V0KHByb2R1Y2VySW52b2ljZUlkKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjZXJJbnZvaWNlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaWRlYmFyTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNpZGViYXJMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zaG93UmVwcm9jZXNzQnV0dG9uID0gZXZlbnQuc3RlcC5zdGF0ZSA9PT0gU3RlcFN0YXRlLldhcm5pbmc7XHJcbiAgICAgICAgdGhpcy5zaWRlYmFyVGl0bGUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5ldmVudF9zaWRlYmFyX3RpdGxlJywgeyBldmVudDogZXZlbnQuc3RlcC5sYWJlbCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zaG93U2lkZWJhciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlcHJvY2Vzc0V2ZW50KCkge1xyXG4gICAgICAgIGNvbnN0IHJlcHJvY2Vzc0V2ZW50T2JqOiBSZXByb2Nlc3NGYWlsZWRFdmVudCA9IHtcclxuICAgICAgICAgICAgZXZlbnRDb250cm9sSXRlbUlkOiB0aGlzLnNlbGVjdGVkU3RlcC5pdGVtLmlkXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmV2ZW50Q29udHJvbEJvYXJkU2VydmljZS5ldmVudENvbnRyb2xJdGVtU2VydmljZS5yZXByb2Nlc3NGYWlsZWRFdmVudChyZXByb2Nlc3NFdmVudE9iailcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hZGRNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgJ2luZm8nLFxyXG4gICAgICAgICAgICAgICAgJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLnJlcHJvY2Vzc2luZ19ldmVudF9tZXNzYWdlX3RpdGxlJyxcclxuICAgICAgICAgICAgICAgICdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5yZXByb2Nlc3NpbmdfZXZlbnRfbWVzc2FnZV9kZXNjcmlwdGlvbicpO1xyXG4gICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hZGRNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgJ2Vycm9yJyxcclxuICAgICAgICAgICAgICAgICdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5lcnJvcl9yZXByb2Nlc3NpbmdfZXZlbnRfbWVzc2FnZV90aXRsZScsXHJcbiAgICAgICAgICAgICAgICAnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZXJyb3JfcmVwcm9jZXNzaW5nX2V2ZW50X21lc3NhZ2VfZGVzY3JpcHRpb24nKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZE1lc3NhZ2Uoc2V2ZXJpdHk6IHN0cmluZywgc3VtbWFyeTogc3RyaW5nLCBkZXRhaWw6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgICAgc2V2ZXJpdHksXHJcbiAgICAgICAgICAgIHN1bW1hcnk6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoc3VtbWFyeSksXHJcbiAgICAgICAgICAgIGRldGFpbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChkZXRhaWwpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcGVuTW9kYWwoKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5TW9kYWwgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb25maXJtTW9kYWwoKSB7XHJcbiAgICAgICAgdGhpcy5yZXByb2Nlc3NFdmVudCgpO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheU1vZGFsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93U2lkZWJhciA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxNb2RhbCgpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlNb2RhbCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZVNpZGViYXIoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U2lkZWJhciA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==