ets-fe-ng-sdk 0.0.7 → 1.0.0

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 (261) hide show
  1. package/README.md +1 -13
  2. package/esm2020/lib/Reusables/reusable-pages/logger/logger.interface.mjs +21 -0
  3. package/esm2020/lib/Reusables/reusable-pages/logger/logger.service.mjs +64 -0
  4. package/esm2020/lib/Reusables/reusable-pages/user-activity/ua-extras/user-activity.model.mjs +25 -0
  5. package/esm2020/lib/Reusables/reusable-pages/user-activity/ua-extras/user-activity.service.mjs +30 -0
  6. package/esm2020/lib/Services/api.service.mjs +280 -0
  7. package/esm2020/lib/Services/app.service.mjs +103 -0
  8. package/esm2020/lib/Services/cache/cache.service.mjs +42 -0
  9. package/esm2020/lib/Services/cache/local-cache.service.mjs +66 -0
  10. package/esm2020/lib/Services/input.service.mjs +45 -0
  11. package/esm2020/lib/Services/page-loader.service.mjs +15 -0
  12. package/esm2020/lib/Services/page.service.mjs +36 -0
  13. package/esm2020/lib/Services/route.service.mjs +49 -0
  14. package/esm2020/lib/Services/storage.service.mjs +95 -0
  15. package/esm2020/lib/Services/translation.service.mjs +140 -0
  16. package/esm2020/lib/Services/utility.service.mjs +555 -0
  17. package/esm2020/lib/Shared/classes/permission-manager.class.mjs +30 -0
  18. package/esm2020/lib/Shared/components/autocomplete/autocomplete-td-rf/autocomplete-td-rf.component.mjs +93 -0
  19. package/esm2020/lib/Shared/components/autocomplete/autocomplete.component.mjs +64 -0
  20. package/esm2020/lib/Shared/components/autocomplete/autocomplete.module.mjs +33 -0
  21. package/esm2020/lib/Shared/components/autocomplete/autocomplete.service.mjs +23 -0
  22. package/esm2020/lib/Shared/components/autocomplete-ng-model/autocomplete-ng-model.component.mjs +76 -0
  23. package/esm2020/lib/Shared/components/autocomplete-ng-model/autocomplete-ng-model.module.mjs +28 -0
  24. package/esm2020/lib/Shared/components/btn/btn-lg/btn-lg.component.mjs +36 -0
  25. package/esm2020/lib/Shared/components/btn/btn.component.mjs +219 -0
  26. package/esm2020/lib/Shared/components/btn/btn.module.mjs +49 -0
  27. package/esm2020/lib/Shared/components/btn/btn.service.mjs +150 -0
  28. package/esm2020/lib/Shared/components/btn/details-btn/details-btn.component.mjs +33 -0
  29. package/esm2020/lib/Shared/components/btn/details-btn/details-btn.module.mjs +19 -0
  30. package/esm2020/lib/Shared/components/card/card.component.mjs +17 -0
  31. package/esm2020/lib/Shared/components/card/card.module.mjs +19 -0
  32. package/esm2020/lib/Shared/components/confirm-dialog/confirm-dialog.component.mjs +29 -0
  33. package/esm2020/lib/Shared/components/confirm-dialog/confirm-dialog.module.mjs +22 -0
  34. package/esm2020/lib/Shared/components/confirm-dialog/confirm-dialog.service.mjs +37 -0
  35. package/esm2020/lib/Shared/components/core/button/button.component.mjs +44 -0
  36. package/esm2020/lib/Shared/components/core/button/components.module.mjs +32 -0
  37. package/esm2020/lib/Shared/components/documents-name-display/documents-name-display.component.mjs +112 -0
  38. package/esm2020/lib/Shared/components/documents-name-display/documents-name-display.model.mjs +11 -0
  39. package/esm2020/lib/Shared/components/documents-name-display/documents-name-display.module.mjs +40 -0
  40. package/esm2020/lib/Shared/components/editable-text-case/editable-text-case.component.mjs +66 -0
  41. package/esm2020/lib/Shared/components/editable-text-case/editable-text-case.module.mjs +40 -0
  42. package/esm2020/lib/Shared/components/export-table/export-table.component.mjs +44 -0
  43. package/esm2020/lib/Shared/components/export-table/export-table.module.mjs +25 -0
  44. package/esm2020/lib/Shared/components/file-upload/file-upload.component.mjs +127 -0
  45. package/esm2020/lib/Shared/components/file-upload/file-upload.module.mjs +20 -0
  46. package/esm2020/lib/Shared/components/form-generator/form-generator.component.mjs +101 -0
  47. package/esm2020/lib/Shared/components/form-generator/form-generator.module.mjs +44 -0
  48. package/esm2020/lib/Shared/components/form-link/form-link.component.mjs +27 -0
  49. package/esm2020/lib/Shared/components/form-link/form-link.module.mjs +20 -0
  50. package/esm2020/lib/Shared/components/form-tab-headers/form-tab-headers.component.mjs +29 -0
  51. package/esm2020/lib/Shared/components/form-tab-headers/form-tab-headers.module.mjs +19 -0
  52. package/esm2020/lib/Shared/components/info-dialog/happy-icon.component.mjs +109 -0
  53. package/esm2020/lib/Shared/components/info-dialog/info-dialog.component.mjs +43 -0
  54. package/esm2020/lib/Shared/components/info-dialog/info-dialog.module.mjs +63 -0
  55. package/esm2020/lib/Shared/components/info-dialog/info-dialog.service.mjs +45 -0
  56. package/esm2020/lib/Shared/components/info-dialog/info-icon.component.mjs +135 -0
  57. package/esm2020/lib/Shared/components/info-dialog/sad-icon.component.mjs +137 -0
  58. package/esm2020/lib/Shared/components/info-icon/info-icon.component.mjs +28 -0
  59. package/esm2020/lib/Shared/components/info-icon/info-icon.module.mjs +27 -0
  60. package/esm2020/lib/Shared/components/input/day-hour-min-input/day-hour-min-input.component.mjs +135 -0
  61. package/esm2020/lib/Shared/components/input/input-basic.component.mjs +298 -0
  62. package/esm2020/lib/Shared/components/input/input-control.component.mjs +43 -0
  63. package/esm2020/lib/Shared/components/input/input-label/input-label.component.mjs +60 -0
  64. package/esm2020/lib/Shared/components/input/input-td-rf.component.mjs +101 -0
  65. package/esm2020/lib/Shared/components/input/input.component.mjs +178 -0
  66. package/esm2020/lib/Shared/components/input/input.module.mjs +104 -0
  67. package/esm2020/lib/Shared/components/input/input.service.mjs +85 -0
  68. package/esm2020/lib/Shared/components/input/inputs-pipes.pipe.mjs +175 -0
  69. package/esm2020/lib/Shared/components/input/validation-message/validation-message.component.mjs +67 -0
  70. package/esm2020/lib/Shared/components/input/year-month-td-rf/year-month-td-rf.component.mjs +38 -0
  71. package/esm2020/lib/Shared/components/input-NgModel/input-ngmodel.component.mjs +176 -0
  72. package/esm2020/lib/Shared/components/input-NgModel/input-ngmodel.module.mjs +24 -0
  73. package/esm2020/lib/Shared/components/input-NgModel/validation-message-ngmodel/validation-message-ngmodel.component.mjs +51 -0
  74. package/esm2020/lib/Shared/components/label/label.component.mjs +55 -0
  75. package/esm2020/lib/Shared/components/label/label.module.mjs +32 -0
  76. package/esm2020/lib/Shared/components/loader/loader.component.mjs +46 -0
  77. package/esm2020/lib/Shared/components/loader/loader.module.mjs +22 -0
  78. package/esm2020/lib/Shared/components/loader/spinner.component.mjs +26 -0
  79. package/esm2020/lib/Shared/components/modal/modal.component.mjs +53 -0
  80. package/esm2020/lib/Shared/components/modal/modal.module.mjs +22 -0
  81. package/esm2020/lib/Shared/components/modal-form/modal-form.component.mjs +52 -0
  82. package/esm2020/lib/Shared/components/modal-form/modal-form.module.mjs +40 -0
  83. package/esm2020/lib/Shared/components/modal-header/modal-header.component.mjs +26 -0
  84. package/esm2020/lib/Shared/components/modal-header/modal-header.module.mjs +37 -0
  85. package/esm2020/lib/Shared/components/page-template/page-template.component.mjs +82 -0
  86. package/esm2020/lib/Shared/components/page-template/page-template.module.mjs +21 -0
  87. package/esm2020/lib/Shared/components/page-to-component/page-to-component.component.mjs +61 -0
  88. package/esm2020/lib/Shared/components/page-to-component/page-to-component.directive.mjs +16 -0
  89. package/esm2020/lib/Shared/components/page-to-component/page-to-component.module.mjs +21 -0
  90. package/esm2020/lib/Shared/components/page-to-component/page-to-component.service.mjs +32 -0
  91. package/esm2020/lib/Shared/components/phone-number/iso-3166.json +1 -0
  92. package/esm2020/lib/Shared/components/phone-number/phone-number.component.mjs +101 -0
  93. package/esm2020/lib/Shared/components/phone-number/phone-number.directive.mjs +25 -0
  94. package/esm2020/lib/Shared/components/phone-number/phone-number.model.mjs +43 -0
  95. package/esm2020/lib/Shared/components/phone-number/phone-number.module.mjs +45 -0
  96. package/esm2020/lib/Shared/components/phone-number/phone-number.service.mjs +27 -0
  97. package/esm2020/lib/Shared/components/row-actions/row-actions.component.mjs +30 -0
  98. package/esm2020/lib/Shared/components/row-actions/row-actions.module.mjs +25 -0
  99. package/esm2020/lib/Shared/components/table-https/table-https.component.mjs +183 -0
  100. package/esm2020/lib/Shared/components/table-https/table-https.module.mjs +87 -0
  101. package/esm2020/lib/Shared/components/table-plain/table-plain.component.mjs +307 -0
  102. package/esm2020/lib/Shared/components/table-plain/table-plain.module.mjs +105 -0
  103. package/esm2020/lib/Shared/components/table-plain/table-plain.service.mjs +19 -0
  104. package/esm2020/lib/Shared/components/table-plain/table.pipe.mjs +94 -0
  105. package/esm2020/lib/Shared/components/text-case-1/text-case-1.component.mjs +59 -0
  106. package/esm2020/lib/Shared/components/text-case-1/text-case-1.module.mjs +37 -0
  107. package/esm2020/lib/Shared/components/text-case-2/text-case-2.component.mjs +71 -0
  108. package/esm2020/lib/Shared/components/text-case-2/text-case-2.module.mjs +40 -0
  109. package/esm2020/lib/Shared/components/view-form-buttons/view-form-buttons.component.mjs +20 -0
  110. package/esm2020/lib/Shared/components/view-form-buttons/view-form-buttons.module.mjs +20 -0
  111. package/esm2020/lib/Shared/directives/InputFormat.directive.mjs +319 -0
  112. package/esm2020/lib/Shared/directives/commafy-number.directive.mjs +79 -0
  113. package/esm2020/lib/Shared/directives/drag-drop-file-upload.directive.mjs +61 -0
  114. package/esm2020/lib/Shared/directives/index.directive.mjs +284 -0
  115. package/esm2020/lib/Shared/directives/integer-only.directive.mjs +59 -0
  116. package/esm2020/lib/Shared/directives/mHref.directive.mjs +14 -0
  117. package/esm2020/lib/Shared/directives/negative-number-only.directive.mjs +24 -0
  118. package/esm2020/lib/Shared/directives/permission-manager.directive.mjs +91 -0
  119. package/esm2020/lib/Shared/injection-tokens/index.injection-tokens.mjs +3 -0
  120. package/esm2020/lib/Shared/models/environment.model.mjs +4 -1
  121. package/esm2020/lib/Shared/pipes/translate.pipe.mjs +66 -0
  122. package/esm2020/lib/Shared/pipes/utility.pipe.mjs +418 -0
  123. package/esm2020/lib/Shared/shared.module.mjs +168 -0
  124. package/esm2020/lib/configs/index.config.mjs +65 -0
  125. package/esm2020/lib/configs/validation-messages.config.mjs +248 -0
  126. package/esm2020/lib/label-customization/label-customization.model.mjs +6 -0
  127. package/esm2020/lib/label-customization/label-customization.module.mjs +23 -0
  128. package/esm2020/lib/label-customization/label-customization.service.mjs +68 -0
  129. package/esm2020/public-api.mjs +107 -1
  130. package/fesm2015/ets-fe-ng-sdk.mjs +11043 -6
  131. package/fesm2015/ets-fe-ng-sdk.mjs.map +1 -1
  132. package/fesm2020/ets-fe-ng-sdk.mjs +10956 -6
  133. package/fesm2020/ets-fe-ng-sdk.mjs.map +1 -1
  134. package/lib/Reusables/reusable-pages/logger/logger.interface.d.ts +27 -0
  135. package/lib/Reusables/reusable-pages/logger/logger.service.d.ts +23 -0
  136. package/lib/Reusables/reusable-pages/user-activity/ua-extras/user-activity.model.d.ts +55 -0
  137. package/lib/Reusables/reusable-pages/user-activity/ua-extras/user-activity.service.d.ts +11 -0
  138. package/lib/Services/api.service.d.ts +51 -0
  139. package/lib/Services/app.service.d.ts +35 -0
  140. package/lib/Services/cache/cache.service.d.ts +17 -0
  141. package/lib/Services/cache/local-cache.service.d.ts +19 -0
  142. package/lib/Services/input.service.d.ts +19 -0
  143. package/lib/Services/page-loader.service.d.ts +7 -0
  144. package/lib/Services/page.service.d.ts +14 -0
  145. package/lib/Services/route.service.d.ts +13 -0
  146. package/lib/Services/storage.service.d.ts +19 -0
  147. package/lib/Services/translation.service.d.ts +26 -0
  148. package/lib/Services/utility.service.d.ts +193 -0
  149. package/lib/Shared/classes/permission-manager.class.d.ts +6 -0
  150. package/lib/Shared/components/autocomplete/autocomplete-td-rf/autocomplete-td-rf.component.d.ts +24 -0
  151. package/lib/Shared/components/autocomplete/autocomplete.component.d.ts +22 -0
  152. package/lib/Shared/components/autocomplete/autocomplete.module.d.ts +12 -0
  153. package/lib/Shared/components/autocomplete/autocomplete.service.d.ts +9 -0
  154. package/lib/Shared/components/autocomplete-ng-model/autocomplete-ng-model.component.d.ts +25 -0
  155. package/lib/Shared/components/autocomplete-ng-model/autocomplete-ng-model.module.d.ts +12 -0
  156. package/lib/Shared/components/btn/btn-lg/btn-lg.component.d.ts +20 -0
  157. package/lib/Shared/components/btn/btn.component.d.ts +51 -0
  158. package/lib/Shared/components/btn/btn.module.d.ts +16 -0
  159. package/lib/Shared/components/btn/btn.service.d.ts +12 -0
  160. package/lib/Shared/components/btn/details-btn/details-btn.component.d.ts +18 -0
  161. package/lib/Shared/components/btn/details-btn/details-btn.module.d.ts +9 -0
  162. package/lib/Shared/components/card/card.component.d.ts +9 -0
  163. package/lib/Shared/components/card/card.module.d.ts +9 -0
  164. package/lib/Shared/components/confirm-dialog/confirm-dialog.component.d.ts +13 -0
  165. package/lib/Shared/components/confirm-dialog/confirm-dialog.module.d.ts +12 -0
  166. package/lib/Shared/components/confirm-dialog/confirm-dialog.service.d.ts +9 -0
  167. package/lib/Shared/components/core/button/button.component.d.ts +28 -0
  168. package/lib/Shared/components/core/button/components.module.d.ts +11 -0
  169. package/lib/Shared/components/documents-name-display/documents-name-display.component.d.ts +44 -0
  170. package/lib/Shared/components/documents-name-display/documents-name-display.model.d.ts +6 -0
  171. package/lib/Shared/components/documents-name-display/documents-name-display.module.d.ts +13 -0
  172. package/lib/Shared/components/editable-text-case/editable-text-case.component.d.ts +30 -0
  173. package/lib/Shared/components/editable-text-case/editable-text-case.module.d.ts +13 -0
  174. package/lib/Shared/components/export-table/export-table.component.d.ts +16 -0
  175. package/lib/Shared/components/export-table/export-table.module.d.ts +9 -0
  176. package/lib/Shared/components/file-upload/file-upload.component.d.ts +37 -0
  177. package/lib/Shared/components/file-upload/file-upload.module.d.ts +10 -0
  178. package/lib/Shared/components/form-generator/form-generator.component.d.ts +34 -0
  179. package/lib/Shared/components/form-generator/form-generator.module.d.ts +14 -0
  180. package/lib/Shared/components/form-link/form-link.component.d.ts +16 -0
  181. package/lib/Shared/components/form-link/form-link.module.d.ts +10 -0
  182. package/lib/Shared/components/form-tab-headers/form-tab-headers.component.d.ts +13 -0
  183. package/lib/Shared/components/form-tab-headers/form-tab-headers.module.d.ts +9 -0
  184. package/lib/Shared/components/info-dialog/happy-icon.component.d.ts +8 -0
  185. package/lib/Shared/components/info-dialog/info-dialog.component.d.ts +25 -0
  186. package/lib/Shared/components/info-dialog/info-dialog.module.d.ts +17 -0
  187. package/lib/Shared/components/info-dialog/info-dialog.service.d.ts +10 -0
  188. package/lib/Shared/components/info-dialog/info-icon.component.d.ts +8 -0
  189. package/lib/Shared/components/info-dialog/sad-icon.component.d.ts +8 -0
  190. package/lib/Shared/components/info-icon/info-icon.component.d.ts +12 -0
  191. package/lib/Shared/components/info-icon/info-icon.module.d.ts +11 -0
  192. package/lib/Shared/components/input/day-hour-min-input/day-hour-min-input.component.d.ts +27 -0
  193. package/lib/Shared/components/input/input-basic.component.d.ts +102 -0
  194. package/lib/Shared/components/input/input-control.component.d.ts +15 -0
  195. package/lib/Shared/components/input/input-label/input-label.component.d.ts +25 -0
  196. package/lib/Shared/components/input/input-td-rf.component.d.ts +22 -0
  197. package/lib/Shared/components/input/input.component.d.ts +73 -0
  198. package/lib/Shared/components/input/input.module.d.ts +21 -0
  199. package/lib/Shared/components/input/input.service.d.ts +22 -0
  200. package/lib/Shared/components/input/inputs-pipes.pipe.d.ts +55 -0
  201. package/lib/Shared/components/input/validation-message/validation-message.component.d.ts +29 -0
  202. package/lib/Shared/components/input/year-month-td-rf/year-month-td-rf.component.d.ts +15 -0
  203. package/lib/Shared/components/input-NgModel/input-ngmodel.component.d.ts +67 -0
  204. package/lib/Shared/components/input-NgModel/input-ngmodel.module.d.ts +13 -0
  205. package/lib/Shared/components/input-NgModel/validation-message-ngmodel/validation-message-ngmodel.component.d.ts +23 -0
  206. package/lib/Shared/components/label/label.component.d.ts +25 -0
  207. package/lib/Shared/components/label/label.module.d.ts +11 -0
  208. package/lib/Shared/components/loader/loader.component.d.ts +21 -0
  209. package/lib/Shared/components/loader/loader.module.d.ts +11 -0
  210. package/lib/Shared/components/loader/spinner.component.d.ts +8 -0
  211. package/lib/Shared/components/modal/modal.component.d.ts +26 -0
  212. package/lib/Shared/components/modal/modal.module.d.ts +12 -0
  213. package/lib/Shared/components/modal-form/modal-form.component.d.ts +28 -0
  214. package/lib/Shared/components/modal-form/modal-form.module.d.ts +13 -0
  215. package/lib/Shared/components/modal-header/modal-header.component.d.ts +16 -0
  216. package/lib/Shared/components/modal-header/modal-header.module.d.ts +13 -0
  217. package/lib/Shared/components/page-template/page-template.component.d.ts +34 -0
  218. package/lib/Shared/components/page-template/page-template.module.d.ts +8 -0
  219. package/lib/Shared/components/page-to-component/page-to-component.component.d.ts +34 -0
  220. package/lib/Shared/components/page-to-component/page-to-component.directive.d.ts +8 -0
  221. package/lib/Shared/components/page-to-component/page-to-component.module.d.ts +11 -0
  222. package/lib/Shared/components/page-to-component/page-to-component.service.d.ts +11 -0
  223. package/lib/Shared/components/phone-number/phone-number.component.d.ts +32 -0
  224. package/lib/Shared/components/phone-number/phone-number.directive.d.ts +11 -0
  225. package/lib/Shared/components/phone-number/phone-number.model.d.ts +139 -0
  226. package/lib/Shared/components/phone-number/phone-number.module.d.ts +15 -0
  227. package/lib/Shared/components/phone-number/phone-number.service.d.ts +37 -0
  228. package/lib/Shared/components/row-actions/row-actions.component.d.ts +13 -0
  229. package/lib/Shared/components/row-actions/row-actions.module.d.ts +9 -0
  230. package/lib/Shared/components/table-https/table-https.component.d.ts +61 -0
  231. package/lib/Shared/components/table-https/table-https.module.d.ts +24 -0
  232. package/lib/Shared/components/table-plain/table-plain.component.d.ts +81 -0
  233. package/lib/Shared/components/table-plain/table-plain.module.d.ts +28 -0
  234. package/lib/Shared/components/table-plain/table-plain.service.d.ts +8 -0
  235. package/lib/Shared/components/table-plain/table.pipe.d.ts +31 -0
  236. package/lib/Shared/components/text-case-1/text-case-1.component.d.ts +27 -0
  237. package/lib/Shared/components/text-case-1/text-case-1.module.d.ts +13 -0
  238. package/lib/Shared/components/text-case-2/text-case-2.component.d.ts +72 -0
  239. package/lib/Shared/components/text-case-2/text-case-2.module.d.ts +13 -0
  240. package/lib/Shared/components/view-form-buttons/view-form-buttons.component.d.ts +10 -0
  241. package/lib/Shared/components/view-form-buttons/view-form-buttons.module.d.ts +10 -0
  242. package/lib/Shared/directives/InputFormat.directive.d.ts +88 -0
  243. package/lib/Shared/directives/commafy-number.directive.d.ts +23 -0
  244. package/lib/Shared/directives/drag-drop-file-upload.directive.d.ts +15 -0
  245. package/lib/Shared/directives/index.directive.d.ts +85 -0
  246. package/lib/Shared/directives/integer-only.directive.d.ts +16 -0
  247. package/lib/Shared/directives/mHref.directive.d.ts +6 -0
  248. package/lib/Shared/directives/negative-number-only.directive.d.ts +9 -0
  249. package/lib/Shared/directives/permission-manager.directive.d.ts +27 -0
  250. package/lib/Shared/injection-tokens/index.injection-tokens.d.ts +3 -0
  251. package/lib/Shared/models/environment.model.d.ts +2 -0
  252. package/lib/Shared/pipes/translate.pipe.d.ts +20 -0
  253. package/lib/Shared/pipes/utility.pipe.d.ts +156 -0
  254. package/lib/Shared/shared.module.d.ts +43 -0
  255. package/lib/configs/index.config.d.ts +32 -0
  256. package/lib/configs/validation-messages.config.d.ts +101 -0
  257. package/lib/label-customization/label-customization.model.d.ts +9 -0
  258. package/lib/label-customization/label-customization.module.d.ts +7 -0
  259. package/lib/label-customization/label-customization.service.d.ts +22 -0
  260. package/package.json +6 -1
  261. package/public-api.d.ts +102 -0
package/README.md CHANGED
@@ -4,18 +4,6 @@ This library was generated for use in Angular ETS projects
4
4
 
5
5
  # New Features
6
6
 
7
- Added the following:
8
-
9
- environment.model
10
-
11
- form-schema.model
12
-
13
- form.class
14
-
15
- IMenuItem
16
-
17
- index.model
18
-
19
- RouteItem.class
7
+ Migrated Shared modules. This is the first stable build.
20
8
 
21
9
  # Bug Fixes
@@ -0,0 +1,21 @@
1
+ export class Log {
2
+ constructor(data) {
3
+ Object.assign(this, data);
4
+ if (data.payload instanceof FormData) {
5
+ this.payload = null;
6
+ data.payload.forEach((file) => {
7
+ if (!(!file || file == undefined || file == null))
8
+ if (file instanceof File) {
9
+ this.files.push({ size: file.size, title: file.name, type: file.type });
10
+ }
11
+ else {
12
+ this.payload = { ...this.payload, ...JSON.parse(file) };
13
+ }
14
+ });
15
+ }
16
+ this.route = this.route || location.pathname;
17
+ this.time = Date.now();
18
+ this.id = 'id' + Math.round(Math.random() * 1000000);
19
+ }
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9SZXVzYWJsZXMvcmV1c2FibGUtcGFnZXMvbG9nZ2VyL2xvZ2dlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsTUFBTSxPQUFPLEdBQUc7SUFVZCxZQUFZLElBQWE7UUFDdkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUIsSUFBSSxJQUFJLENBQUMsT0FBTyxZQUFZLFFBQVEsRUFBRTtZQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNuQixJQUFJLENBQUMsT0FBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLFNBQVMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDO29CQUMvQyxJQUFJLElBQUksWUFBWSxJQUFJLEVBQUU7d0JBQ3pCLElBQUksQ0FBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxJQUFJLEVBQUMsS0FBSyxFQUFDLElBQUksQ0FBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDO3FCQUNsRTt5QkFBTTt3QkFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3FCQUN6RDtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFFLElBQUksQ0FBQyxLQUFLLElBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUMzQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztJQUN2RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIgXG50eXBlIE1ldGhvZCA9ICdQT1NUJyB8ICdQVVQnO1xuZXhwb3J0IGludGVyZmFjZSBJTG9nPFQ+IHtcbiAgcGF5bG9hZDogVDtcbiAgZmlsZXM/OiBGaWxlW107XG4gIGlzU3VjY2Vzcz86IGJvb2xlYW47XG4gIHJvdXRlPzogc3RyaW5nO1xuICBlbmRwb2ludDogc3RyaW5nO1xuICBtZXRob2Q6IE1ldGhvZDtcbn1cbmV4cG9ydCBjbGFzcyBMb2c8VCA9IGFueT4ge1xuICBpZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICB0aW1lOiBudW1iZXI7XG4gIHBheWxvYWQ6IFQ7XG4gIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgcm91dGU6IHN0cmluZztcbiAgZW5kcG9pbnQ6IHN0cmluZztcbiAgZmlsZXM6IElGaWxlRGF0YVtdO1xuICBtZXRob2Q6IHN0cmluZztcbiAgY29uc3RydWN0b3IoZGF0YTogSUxvZzxUPikge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgZGF0YSk7IFxuICAgIGlmIChkYXRhLnBheWxvYWQgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgdGhpcy5wYXlsb2FkID0gbnVsbDtcbiAgICAgIChkYXRhLnBheWxvYWQgYXMgRm9ybURhdGEpLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgICAgaWYgKCEoIWZpbGUgfHwgZmlsZSA9PSB1bmRlZmluZWQgfHwgZmlsZSA9PSBudWxsKSlcbiAgICAgICAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgICAgdGhpcy4gZmlsZXMucHVzaCh7c2l6ZTpmaWxlLnNpemUsdGl0bGU6ZmlsZS5uYW1lLHR5cGU6ZmlsZS50eXBlfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGF5bG9hZCA9IHsgLi4udGhpcy5wYXlsb2FkLCAuLi5KU09OLnBhcnNlKGZpbGUpIH07XG4gICAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSAgXG4gICAgdGhpcy5yb3V0ZSA9dGhpcy5yb3V0ZXx8IGxvY2F0aW9uLnBhdGhuYW1lOyBcbiAgICB0aGlzLnRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuaWQgPSAnaWQnICsgTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwMDAwMCk7XG4gIH1cbn1cbmludGVyZmFjZSBJRmlsZURhdGEge1xuICB0aXRsZTogc3RyaW5nO1xuICBzaXplOiBudW1iZXI7XG4gIHR5cGU6IHN0cmluZztcbn1cbiJdfQ==
@@ -0,0 +1,64 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Log } from './logger.interface';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@Services/storage.service";
5
+ export class LoggerService {
6
+ constructor(sS) {
7
+ this.sS = sS;
8
+ this.logAuthKey = 'logAuth';
9
+ this.logsKey = 'logs';
10
+ this._logs = [];
11
+ this.pwd = '1234';
12
+ setInterval(() => {
13
+ this.getLogs();
14
+ }, 1000);
15
+ this.checkAuth();
16
+ }
17
+ get logs() {
18
+ return this._logs;
19
+ }
20
+ addLog(log) {
21
+ this.pushLog(new Log(log));
22
+ }
23
+ pushLog(log) {
24
+ if (!Array.isArray(this._logs))
25
+ this._logs = [];
26
+ this._logs?.sort2('time').reverse();
27
+ if (this._logs.length >= 30)
28
+ this._logs.pop();
29
+ this._logs.unshift(log);
30
+ this.saveToLocal();
31
+ }
32
+ saveToLocal() {
33
+ this.sS.saveItem(this.logsKey, this._logs);
34
+ }
35
+ unlock() {
36
+ this.sS.saveItem(this.logAuthKey, this.pwd);
37
+ this.checkAuth();
38
+ }
39
+ lock() {
40
+ this.sS.removeItem(this.logAuthKey);
41
+ this.checkAuth();
42
+ }
43
+ getLogs() {
44
+ this.sS
45
+ .getItemA(this.logsKey)
46
+ .then((r) => (this._logs = r?.sort2('time').reverse() || []));
47
+ return this._logs;
48
+ }
49
+ checkAuth() {
50
+ this._isAuthed = this.sS.getItem(this.logAuthKey) == this.pwd;
51
+ }
52
+ get isAuthed() {
53
+ return this._isAuthed;
54
+ }
55
+ }
56
+ LoggerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: LoggerService, deps: [{ token: i1.StorageService }], target: i0.ɵɵFactoryTarget.Injectable });
57
+ LoggerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: LoggerService, providedIn: 'root' });
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: LoggerService, decorators: [{
59
+ type: Injectable,
60
+ args: [{
61
+ providedIn: 'root',
62
+ }]
63
+ }], ctorParameters: function () { return [{ type: i1.StorageService }]; } });
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvUmV1c2FibGVzL3JldXNhYmxlLXBhZ2VzL2xvZ2dlci9sb2dnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBUSxHQUFHLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBSy9DLE1BQU0sT0FBTyxhQUFhO0lBU3hCLFlBQW1CLEVBQWtCO1FBQWxCLE9BQUUsR0FBRixFQUFFLENBQWdCO1FBUjVCLGVBQVUsR0FBRyxTQUFTLENBQUM7UUFDdkIsWUFBTyxHQUFHLE1BQU0sQ0FBQztRQUNsQixVQUFLLEdBQVUsRUFBRSxDQUFDO1FBRWpCLFFBQUcsR0FBRyxNQUFNLENBQUM7UUFLcEIsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUNmLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDVCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQVJELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBT0QsTUFBTSxDQUFJLEdBQVk7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxPQUFPLENBQUMsR0FBUTtRQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEVBQUU7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxNQUFNO1FBQ0osSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTztRQUNMLElBQUksQ0FBQyxFQUFFO2FBQ0osUUFBUSxDQUFRLElBQUksQ0FBQyxPQUFPLENBQUM7YUFDN0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ0QsU0FBUztRQUNQLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDaEUsQ0FBQztJQUNELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDOzswR0EvQ1UsYUFBYTs4R0FBYixhQUFhLGNBRlosTUFBTTsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQFNlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBJTG9nLCBMb2cgfSBmcm9tICcuL2xvZ2dlci5pbnRlcmZhY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTG9nZ2VyU2VydmljZSB7XG4gIHJlYWRvbmx5IGxvZ0F1dGhLZXkgPSAnbG9nQXV0aCc7XG4gIHJlYWRvbmx5IGxvZ3NLZXkgPSAnbG9ncyc7XG4gIHByaXZhdGUgX2xvZ3M6IExvZ1tdID0gW107XG4gIHByaXZhdGUgX2lzQXV0aGVkOiBib29sZWFuO1xuICByZWFkb25seSBwd2QgPSAnMTIzNCc7XG4gIGdldCBsb2dzKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2dzO1xuICB9XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzUzogU3RvcmFnZVNlcnZpY2UpIHtcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLmdldExvZ3MoKTtcbiAgICB9LCAxMDAwKTtcbiAgICB0aGlzLmNoZWNrQXV0aCgpO1xuICB9XG4gIGFkZExvZzxUPihsb2c6IElMb2c8VD4pIHtcbiAgICB0aGlzLnB1c2hMb2cobmV3IExvZyhsb2cpKTtcbiAgfVxuICBwdXNoTG9nKGxvZzogTG9nKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuX2xvZ3MpKSB0aGlzLl9sb2dzID0gW107XG4gICAgdGhpcy5fbG9ncz8uc29ydDIoJ3RpbWUnKS5yZXZlcnNlKCk7XG4gICAgaWYgKHRoaXMuX2xvZ3MubGVuZ3RoID49IDMwKSB0aGlzLl9sb2dzLnBvcCgpO1xuICAgIHRoaXMuX2xvZ3MudW5zaGlmdChsb2cpO1xuICAgIHRoaXMuc2F2ZVRvTG9jYWwoKTtcbiAgfVxuICBzYXZlVG9Mb2NhbCgpIHtcbiAgICB0aGlzLnNTLnNhdmVJdGVtKHRoaXMubG9nc0tleSwgdGhpcy5fbG9ncyk7XG4gIH1cbiAgdW5sb2NrKCkge1xuICAgIHRoaXMuc1Muc2F2ZUl0ZW0odGhpcy5sb2dBdXRoS2V5LCB0aGlzLnB3ZCk7XG4gICAgdGhpcy5jaGVja0F1dGgoKTtcbiAgfVxuICBsb2NrKCkge1xuICAgIHRoaXMuc1MucmVtb3ZlSXRlbSh0aGlzLmxvZ0F1dGhLZXkpO1xuICAgIHRoaXMuY2hlY2tBdXRoKCk7XG4gIH1cbiAgZ2V0TG9ncygpIHtcbiAgICB0aGlzLnNTXG4gICAgICAuZ2V0SXRlbUE8TG9nW10+KHRoaXMubG9nc0tleSlcbiAgICAgIC50aGVuKChyKSA9PiAodGhpcy5fbG9ncyA9IHI/LnNvcnQyKCd0aW1lJykucmV2ZXJzZSgpIHx8IFtdKSk7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ3M7XG4gIH1cbiAgY2hlY2tBdXRoKCkge1xuICAgIHRoaXMuX2lzQXV0aGVkID0gdGhpcy5zUy5nZXRJdGVtKHRoaXMubG9nQXV0aEtleSkgPT0gdGhpcy5wd2Q7XG4gIH1cbiAgZ2V0IGlzQXV0aGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc0F1dGhlZDtcbiAgfVxufVxuIl19
@@ -0,0 +1,25 @@
1
+ import { environment } from "@environments/environment";
2
+ export class UserActivity {
3
+ constructor(data) {
4
+ Object.assign(this, data);
5
+ this.activityDescription = (codeToDescriptionMap.find((x) => x.key == this.code)?.value +
6
+ ' ' +
7
+ (this.activityDescription ? `{${this.activityDescription}}` : ''))?.trim();
8
+ this.pageUrl = this.pageUrl || location.href;
9
+ this.pageTitle = this.pageTitle || environment.pageTitle;
10
+ }
11
+ }
12
+ export var EUA;
13
+ (function (EUA) {
14
+ EUA["exported"] = "export";
15
+ EUA["visited"] = "visited";
16
+ EUA["searched"] = "searched";
17
+ EUA["downloaded"] = "downloaded";
18
+ })(EUA || (EUA = {}));
19
+ const codeToDescriptionMap = [
20
+ { key: EUA.exported, value: 'Exported data' },
21
+ { key: EUA.visited, value: 'User visited new page' },
22
+ { key: EUA.searched, value: 'User performed a search' },
23
+ { key: EUA.downloaded, value: 'User downloaded an item' },
24
+ ];
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1hY3Rpdml0eS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9SZXVzYWJsZXMvcmV1c2FibGUtcGFnZXMvdXNlci1hY3Rpdml0eS91YS1leHRyYXMvdXNlci1hY3Rpdml0eS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUEwQ3hELE1BQU0sT0FBTyxZQUFZO0lBUXZCLFlBQVksSUFBa0I7UUFDNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQ3pCLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSztZQUMzRCxHQUFHO1lBQ0gsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNsRSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ1YsSUFBSSxDQUFDLE9BQU8sR0FBRSxJQUFJLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsR0FBRSxJQUFJLENBQUMsU0FBUyxJQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUM7SUFDekQsQ0FBQztDQUNGO0FBQ0QsTUFBTSxDQUFOLElBQVksR0FLWDtBQUxELFdBQVksR0FBRztJQUNiLDBCQUFtQixDQUFBO0lBQ25CLDBCQUFtQixDQUFBO0lBQ25CLDRCQUFxQixDQUFBO0lBQ3JCLGdDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFMVyxHQUFHLEtBQUgsR0FBRyxRQUtkO0FBQ0QsTUFBTSxvQkFBb0IsR0FBRztJQUMzQixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUU7SUFDN0MsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUU7SUFDcEQsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUseUJBQXlCLEVBQUU7SUFDdkQsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUseUJBQXlCLEVBQUU7Q0FDMUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSBcIkBlbnZpcm9ubWVudHMvZW52aXJvbm1lbnRcIjtcblxuIFxuZXhwb3J0IGludGVyZmFjZSBJVUFEZWxldGlvblBheWxvYWQge1xuICBpZDogbnVtYmVyO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSVVBU2VhcmNoT2JqIHtcbiAgbG9nZ2VkVGltZUZyb206IHN0cmluZztcbiAgbG9nZ2VkVGltZVRvOiBzdHJpbmc7XG4gIHBhZ2VOdW1iZXI6IG51bWJlcjtcbiAgcGFnZVNpemU6IG51bWJlcjtcbiAgcGFnZVRpdGxlOiBzdHJpbmc7XG4gIHNjcmVlbjogc3RyaW5nO1xuICBzb3J0Qnk6IHN0cmluZztcbiAgdXNlckFnZW50OiBzdHJpbmc7XG4gIHVzZXJOYW1lOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIElVQVNlYXJjaFJlc3BvbnNlIHtcbiAgaWQ6IG51bWJlcjtcbiAgdXNlck5hbWU/OiBzdHJpbmc7XG4gIGxvZ2dlZEluOiBib29sZWFuO1xuICBpcEFkZHJlc3M6IHN0cmluZztcbiAgbG9nZ2VkVGltZTogc3RyaW5nO1xuICB1c2VyQWdlbnQ6IHN0cmluZztcbiAgcGFnZVVybD86IHN0cmluZztcbiAgc2NyZWVuPzogc3RyaW5nO1xuICBwYWdlVGl0bGU6IHN0cmluZztcbiAgYWN0aXZpdHlEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcmVxdWVzdFVybD86IHN0cmluZztcbiAgcmVxdWVzdE1ldGhvZD86IHN0cmluZztcbiAgY29tcGFueUNvZGU/OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIElVc2VyQWN0aXZpdHkge1xuICBpZD86IG51bWJlcjtcbiAgYWN0aXZpdHlEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcGFnZVRpdGxlPzogc3RyaW5nO1xuICBwYWdlVXJsPzogc3RyaW5nO1xuICByZXF1ZXN0TWV0aG9kPzogc3RyaW5nO1xuICByZXF1ZXN0VXJsPzogc3RyaW5nO1xuICBjb2RlOiBFVUE7XG59XG5leHBvcnQgY2xhc3MgVXNlckFjdGl2aXR5IGltcGxlbWVudHMgSVVzZXJBY3Rpdml0eSB7XG4gIGlkOiBudW1iZXI7XG4gIGFjdGl2aXR5RGVzY3JpcHRpb246IHN0cmluZztcbiAgcGFnZVRpdGxlOiBzdHJpbmc7XG4gIHBhZ2VVcmw6IHN0cmluZztcbiAgcmVxdWVzdE1ldGhvZDogc3RyaW5nO1xuICByZXF1ZXN0VXJsOiBzdHJpbmc7XG4gIGNvZGU6IEVVQTtcbiAgY29uc3RydWN0b3IoZGF0YTpJVXNlckFjdGl2aXR5KSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBkYXRhKTtcbiAgICB0aGlzLmFjdGl2aXR5RGVzY3JpcHRpb24gPSAoXG4gICAgICBjb2RlVG9EZXNjcmlwdGlvbk1hcC5maW5kKCh4KSA9PiB4LmtleSA9PSB0aGlzLmNvZGUpPy52YWx1ZSArXG4gICAgICAnICcgK1xuICAgICAgKHRoaXMuYWN0aXZpdHlEZXNjcmlwdGlvbiA/IGB7JHt0aGlzLmFjdGl2aXR5RGVzY3JpcHRpb259fWAgOiAnJylcbiAgICApPy50cmltKCk7XG4gICAgdGhpcy5wYWdlVXJsID10aGlzLnBhZ2VVcmwgfHwgbG9jYXRpb24uaHJlZjtcbiAgICB0aGlzLnBhZ2VUaXRsZSA9dGhpcy5wYWdlVGl0bGV8fCBlbnZpcm9ubWVudC5wYWdlVGl0bGU7XG4gIH1cbn1cbmV4cG9ydCBlbnVtIEVVQSB7XG4gIGV4cG9ydGVkID0gJ2V4cG9ydCcsXG4gIHZpc2l0ZWQgPSAndmlzaXRlZCcsXG4gIHNlYXJjaGVkID0gJ3NlYXJjaGVkJyxcbiAgZG93bmxvYWRlZCA9IFwiZG93bmxvYWRlZFwiXG59XG5jb25zdCBjb2RlVG9EZXNjcmlwdGlvbk1hcCA9IFtcbiAgeyBrZXk6IEVVQS5leHBvcnRlZCwgdmFsdWU6ICdFeHBvcnRlZCBkYXRhJyB9LFxuICB7IGtleTogRVVBLnZpc2l0ZWQsIHZhbHVlOiAnVXNlciB2aXNpdGVkIG5ldyBwYWdlJyB9LFxuICB7IGtleTogRVVBLnNlYXJjaGVkLCB2YWx1ZTogJ1VzZXIgcGVyZm9ybWVkIGEgc2VhcmNoJyB9LFxuICB7IGtleTogRVVBLmRvd25sb2FkZWQsIHZhbHVlOiAnVXNlciBkb3dubG9hZGVkIGFuIGl0ZW0nIH0sXG5dO1xuIl19
@@ -0,0 +1,30 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { clone } from 'lodash-es';
3
+ import { environment } from '@environments/environment';
4
+ import { UserActivity } from './user-activity.model';
5
+ import * as i0 from "@angular/core";
6
+ export class UserActivityService {
7
+ constructor() {
8
+ this.activities = [];
9
+ this.add = (data) => {
10
+ if (environment.production)
11
+ this.activities.push(new UserActivity(data));
12
+ };
13
+ setInterval(() => {
14
+ if (!this.activities?.length)
15
+ return;
16
+ const activities = clone(this.activities);
17
+ this.activities = [];
18
+ this.submissionFunc(activities).toPromise();
19
+ }, 1000);
20
+ }
21
+ }
22
+ UserActivityService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: UserActivityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
23
+ UserActivityService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: UserActivityService, providedIn: 'root' });
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: UserActivityService, decorators: [{
25
+ type: Injectable,
26
+ args: [{
27
+ providedIn: 'root',
28
+ }]
29
+ }], ctorParameters: function () { return []; } });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1hY3Rpdml0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1JldXNhYmxlcy9yZXVzYWJsZS1wYWdlcy91c2VyLWFjdGl2aXR5L3VhLWV4dHJhcy91c2VyLWFjdGl2aXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RCxPQUFPLEVBQWlCLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUtwRSxNQUFNLE9BQU8sbUJBQW1CO0lBRzlCO1FBRlEsZUFBVSxHQUFvQixFQUFFLENBQUM7UUFXekMsUUFBRyxHQUFHLENBQUMsSUFBbUIsRUFBRSxFQUFFO1lBQzVCLElBQUksV0FBVyxDQUFDLFVBQVU7Z0JBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUM7UUFWQSxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTTtnQkFBRSxPQUFPO1lBQ3JDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM5QyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDOztnSEFWVSxtQkFBbUI7b0hBQW5CLG1CQUFtQixjQUZsQixNQUFNOzJGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJ0BlbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSVVzZXJBY3Rpdml0eSwgVXNlckFjdGl2aXR5IH0gZnJvbSAnLi91c2VyLWFjdGl2aXR5Lm1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJBY3Rpdml0eVNlcnZpY2Uge1xuICBwcml2YXRlIGFjdGl2aXRpZXM6IElVc2VyQWN0aXZpdHlbXSA9IFtdO1xuICBzdWJtaXNzaW9uRnVuYzogKGFjdGl2aXRpZXM6IFVzZXJBY3Rpdml0eVtdKSA9PiBPYnNlcnZhYmxlPGFueT47XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5hY3Rpdml0aWVzPy5sZW5ndGgpIHJldHVybjtcbiAgICAgIGNvbnN0IGFjdGl2aXRpZXMgPSBjbG9uZSh0aGlzLmFjdGl2aXRpZXMpO1xuICAgICAgdGhpcy5hY3Rpdml0aWVzID0gW107XG4gICAgICB0aGlzLnN1Ym1pc3Npb25GdW5jKGFjdGl2aXRpZXMpLnRvUHJvbWlzZSgpO1xuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgYWRkID0gKGRhdGE6IElVc2VyQWN0aXZpdHkpID0+IHtcbiAgICBpZiAoZW52aXJvbm1lbnQucHJvZHVjdGlvbikgdGhpcy5hY3Rpdml0aWVzLnB1c2gobmV3IFVzZXJBY3Rpdml0eShkYXRhKSk7XG4gIH07XG59XG4iXX0=
@@ -0,0 +1,280 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { HttpHeaders, HttpRequest, } from '@angular/common/http';
3
+ import { Observable, throwError } from 'rxjs';
4
+ import { catchError, map, retry, tap } from 'rxjs/operators';
5
+ import { environment } from '@environments/environment';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common/http";
8
+ import * as i2 from "./cache/cache.service";
9
+ import * as i3 from "./cache/local-cache.service";
10
+ export class ApiService {
11
+ constructor(http, cacheS, lCacheS) {
12
+ this.http = http;
13
+ this.cacheS = cacheS;
14
+ this.lCacheS = lCacheS;
15
+ this.showRoutes = 0;
16
+ this.retryCount = 0;
17
+ this.handleRequestError = (err) => {
18
+ let message;
19
+ if (err?.error instanceof ArrayBuffer)
20
+ message = String.fromCharCode.apply(null, new Uint8Array(err?.error));
21
+ return throwError(message || err?.error?.message);
22
+ };
23
+ //#endregion
24
+ //#region GET
25
+ this.get = (route, parameters, extras) => {
26
+ this.logRoutes('get', route, parameters);
27
+ return new Observable((res) => {
28
+ const query = route + this.getRequestParse(parameters);
29
+ // if (this.cacheS.has(query)) {
30
+ // res.next(this.cacheS.getItem<T>(route));
31
+ // }
32
+ this.http
33
+ .get(query, {
34
+ headers: new HttpHeaders(this.headers),
35
+ responseType: 'json',
36
+ ...extras?.options,
37
+ })
38
+ .pipe(retry(this.retryCount), tap((x) => (this.showRoutes ? console.log(x) : null)), map((res) => {
39
+ if (Array.isArray(res))
40
+ if (res[0]?.code)
41
+ return res.sort().sort2('code', true);
42
+ else if (res[0]?.columnName)
43
+ return res.sort().sort2('columnName', true);
44
+ else
45
+ return res.sort();
46
+ return res;
47
+ }), catchError(this.handleRequestError))
48
+ .toPromise()
49
+ .then((r) => {
50
+ res.next(r);
51
+ this.cacheS.setItem(query, r);
52
+ res.complete();
53
+ })
54
+ .catch((err) => res.error(err));
55
+ });
56
+ };
57
+ this.getCodes = (route) => this.get(route).pipe(map((res) => this.sortCodes(res)));
58
+ this.getText = (route, parameters) => this.get(route, parameters, {
59
+ options: {
60
+ headers: new HttpHeaders(this.headers),
61
+ responseType: 'text',
62
+ },
63
+ });
64
+ this.getFile = (route, parameters) => this.get(route, parameters, {
65
+ options: {
66
+ headers: new HttpHeaders(this.headers),
67
+ responseType: 'arrayBuffer',
68
+ },
69
+ });
70
+ this.getWithBody = (route, body, extras) => {
71
+ this.logRoutes('get', route);
72
+ // debugger
73
+ const req = new HttpRequest('GET', route, body, extras?.options || {
74
+ headers: new HttpHeaders(this.headers),
75
+ responseType: 'json',
76
+ });
77
+ return this.http
78
+ .request(req)
79
+ .pipe(catchError(this.handleRequestError));
80
+ };
81
+ this.getFromlocal = (route, parameters, options) => {
82
+ return new Observable((res) => {
83
+ const query = route + this.getRequestParse(parameters);
84
+ if (this.lCacheS.has(query)) {
85
+ res.next(this.lCacheS.getItem(query));
86
+ res.complete();
87
+ }
88
+ else
89
+ this.get(query, null, options)
90
+ .toPromise()
91
+ .then((r) => {
92
+ // if (!this.cS.has(route))
93
+ res.next(r);
94
+ this.lCacheS.setItem(query, r);
95
+ res.complete();
96
+ });
97
+ });
98
+ };
99
+ this.getWithLocalCache = (route, parameters, options) => {
100
+ return new Observable((res) => {
101
+ const query = route + this.getRequestParse(parameters);
102
+ if (this.lCacheS.has(query)) {
103
+ res.next(this.lCacheS.getItem(query));
104
+ }
105
+ this.get(query, null, options)
106
+ .toPromise()
107
+ .then((r) => {
108
+ // if (!this.cS.has(route))
109
+ res.next(r);
110
+ this.lCacheS.setItem(query, r);
111
+ res.complete();
112
+ })
113
+ .catch((e) => {
114
+ res.error(e);
115
+ res.complete();
116
+ });
117
+ });
118
+ };
119
+ //#endregion
120
+ //#region DELETE
121
+ this.delete = (route, options) => {
122
+ this.logRoutes('delete', route);
123
+ return this.http
124
+ .delete(route, options || {
125
+ headers: new HttpHeaders(this.headers),
126
+ responseType: 'json',
127
+ })
128
+ .pipe(catchError(this.handleRequestError));
129
+ };
130
+ this.deleteWithBody = (route, body, options) => {
131
+ this.logRoutes('delete', route);
132
+ const req = new HttpRequest('DELETE', route, body, options || {
133
+ headers: new HttpHeaders(this.headers),
134
+ responseType: 'json',
135
+ });
136
+ return this.http
137
+ .request(req)
138
+ .pipe(catchError(this.handleRequestError));
139
+ };
140
+ this.deleteText = (route) => this.delete(route, {
141
+ headers: new HttpHeaders(this.headers),
142
+ responseType: 'text',
143
+ });
144
+ //#endregion
145
+ this.sortCodes = (data) => {
146
+ return data?.sort2('code', true)?.sort2('code');
147
+ };
148
+ }
149
+ get headers() {
150
+ return {
151
+ 'Content-Type': 'application/json',
152
+ };
153
+ }
154
+ get fileHeaders() {
155
+ return {
156
+ enctype: 'multipart/form-data',
157
+ };
158
+ }
159
+ logRoutes(method, route, ...extras) {
160
+ if (this.showRoutes) {
161
+ console.log(method, route, ...extras);
162
+ }
163
+ }
164
+ //#region PATCH
165
+ patch(route, body, options) {
166
+ this.logRoutes('post', route, body);
167
+ console.log(body);
168
+ return this.http
169
+ .patch(encodeURI(route), body, {
170
+ headers: new HttpHeaders(this.headers),
171
+ responseType: 'json',
172
+ ...options,
173
+ })
174
+ .pipe(catchError(this.handleRequestError));
175
+ }
176
+ //#endregion
177
+ //#region POST
178
+ post(route, body, extras) {
179
+ this.logRoutes('post', route, body);
180
+ console.log(body);
181
+ return this.http
182
+ .post(encodeURI(route), body, {
183
+ headers: new HttpHeaders(this.headers),
184
+ responseType: 'json',
185
+ ...extras?.options,
186
+ })
187
+ .pipe(catchError(this.handleRequestError));
188
+ }
189
+ postFile(route, body) {
190
+ return this.post(route, body, {
191
+ options: {
192
+ headers: new HttpHeaders(this.fileHeaders),
193
+ responseType: 'json',
194
+ },
195
+ });
196
+ }
197
+ postFileWithEndorsement(route, body) {
198
+ return this.post(route, body, {
199
+ options: {
200
+ headers: new HttpHeaders(this.fileHeaders).set('useEndorsement', 'true'),
201
+ responseType: 'json',
202
+ },
203
+ });
204
+ }
205
+ postString(route, body) {
206
+ console.log('requestCount', ++environment.requestCount);
207
+ return this.post(route, body, {
208
+ options: {
209
+ headers: new HttpHeaders({
210
+ 'Content-Type': 'text/plain',
211
+ }),
212
+ responseType: 'text',
213
+ },
214
+ });
215
+ }
216
+ postStringWithLocalCache(route, body) {
217
+ return new Observable((res) => {
218
+ const bdy = body?.trim();
219
+ // debugger
220
+ if (this.lCacheS.has(route + '_' + bdy)) {
221
+ res.next(this.lCacheS.getItem(route + '_' + bdy));
222
+ }
223
+ this.postString(route, bdy)
224
+ .toPromise()
225
+ .then((r) => {
226
+ res.next(r);
227
+ this.lCacheS.setItem(route + '_' + bdy, r);
228
+ res.complete();
229
+ })
230
+ .catch((e) => {
231
+ res.error(e);
232
+ });
233
+ });
234
+ }
235
+ getRequestParse(parameters) {
236
+ // const nbody = new URLSearchParams();
237
+ // for (const key in parameters) {
238
+ // if (Object.prototype.hasOwnProperty.call(parameters, key)) {
239
+ // const element = parameters[key];
240
+ // if (element != null) nbody.set(key, element + '');
241
+ // }
242
+ // }
243
+ // const str = nbody.toString();
244
+ // if(parameters)
245
+ // debugger;
246
+ if (!parameters)
247
+ return '';
248
+ return ('?' +
249
+ Object.keys(parameters)
250
+ .filter((key) => parameters[key]?.toString()?.trim() != null)
251
+ .map((key) => `${key}=${parameters[key]?.toString()?.trim()}`)
252
+ .join('&'));
253
+ }
254
+ //#endregion
255
+ //#region PUT
256
+ put(route, body, extras) {
257
+ this.logRoutes('put', route, body);
258
+ let query = route + '', nbody = body;
259
+ if (extras?.requestType == 'queryParams') {
260
+ query += this.getRequestParse(body);
261
+ nbody = null;
262
+ }
263
+ return this.http
264
+ .put(query, nbody, {
265
+ headers: new HttpHeaders(this.headers),
266
+ responseType: 'json',
267
+ ...extras?.options,
268
+ })
269
+ .pipe(catchError(this.handleRequestError));
270
+ }
271
+ }
272
+ ApiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ApiService, deps: [{ token: i1.HttpClient }, { token: i2.CacheService }, { token: i3.LocalCacheService }], target: i0.ɵɵFactoryTarget.Injectable });
273
+ ApiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ApiService, providedIn: 'root' });
274
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ApiService, decorators: [{
275
+ type: Injectable,
276
+ args: [{
277
+ providedIn: 'root',
278
+ }]
279
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.CacheService }, { type: i3.LocalCacheService }]; } });
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvU2VydmljZXMvYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBR0wsV0FBVyxFQUNYLFdBQVcsR0FDWixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBTyxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7O0FBWXhELE1BQU0sT0FBTyxVQUFVO0lBYXJCLFlBQ1MsSUFBZ0IsRUFDaEIsTUFBb0IsRUFDcEIsT0FBMEI7UUFGMUIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ3BCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBZjNCLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFXZixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBZ0JmLHVCQUFrQixHQUFHLENBQUMsR0FBc0IsRUFBRSxFQUFFO1lBQ3RELElBQUksT0FBTyxDQUFDO1lBQ1osSUFBSSxHQUFHLEVBQUUsS0FBSyxZQUFZLFdBQVc7Z0JBQ25DLE9BQU8sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDeEUsT0FBTyxVQUFVLENBQUMsT0FBTyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDO1FBNkVGLFlBQVk7UUFFWixhQUFhO1FBQ2IsUUFBRyxHQUFHLENBQ0osS0FBYSxFQUNiLFVBQW1CLEVBQ25CLE1BQWdCLEVBQ0QsRUFBRTtZQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDekMsT0FBTyxJQUFJLFVBQVUsQ0FBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUMvQixNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdkQsZ0NBQWdDO2dCQUNoQyw2Q0FBNkM7Z0JBQzdDLElBQUk7Z0JBQ0osSUFBSSxDQUFDLElBQUk7cUJBQ04sR0FBRyxDQUFDLEtBQUssRUFBRTtvQkFDVixPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztvQkFDdEMsWUFBWSxFQUFFLE1BQU07b0JBQ3BCLEdBQUcsTUFBTSxFQUFFLE9BQU87aUJBQ25CLENBQUM7cUJBQ0QsSUFBSSxDQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNyRCxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDZixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO3dCQUNwQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJOzRCQUFFLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7NkJBQ25ELElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVU7NEJBQ3pCLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7OzRCQUN6QyxPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDekIsT0FBTyxHQUFHLENBQUM7Z0JBQ2IsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUNwQztxQkFDQSxTQUFTLEVBQUU7cUJBQ1gsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ1YsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDWixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDakIsQ0FBQyxDQUFDO3FCQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsYUFBUSxHQUFHLENBQW9DLEtBQWEsRUFBRSxFQUFFLENBQzlELElBQUksQ0FBQyxHQUFHLENBQU0sS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFL0QsWUFBTyxHQUFHLENBQWEsS0FBYSxFQUFFLFVBQW1CLEVBQUUsRUFBRSxDQUMzRCxJQUFJLENBQUMsR0FBRyxDQUFJLEtBQUssRUFBRSxVQUFVLEVBQUU7WUFDN0IsT0FBTyxFQUFFO2dCQUNQLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUN0QyxZQUFZLEVBQUUsTUFBTTthQUNyQjtTQUNGLENBQUMsQ0FBQztRQUNMLFlBQU8sR0FBRyxDQUFhLEtBQWEsRUFBRSxVQUFtQixFQUFFLEVBQUUsQ0FDM0QsSUFBSSxDQUFDLEdBQUcsQ0FBSSxLQUFLLEVBQUUsVUFBVSxFQUFFO1lBQzdCLE9BQU8sRUFBRTtnQkFDUCxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDdEMsWUFBWSxFQUFFLGFBQWE7YUFDNUI7U0FDRixDQUFDLENBQUM7UUFDTCxnQkFBVyxHQUFHLENBQVUsS0FBYSxFQUFFLElBQVUsRUFBRSxNQUFnQixFQUFFLEVBQUU7WUFDckUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0IsV0FBVztZQUNYLE1BQU0sR0FBRyxHQUFHLElBQUksV0FBVyxDQUN6QixLQUFLLEVBQ0wsS0FBSyxFQUNMLElBQUksRUFDSixNQUFNLEVBQUUsT0FBTyxJQUFJO2dCQUNqQixPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDdEMsWUFBWSxFQUFFLE1BQU07YUFDckIsQ0FDRixDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUMsSUFBSTtpQkFDYixPQUFPLENBQUksR0FBRyxDQUFDO2lCQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQWtCLENBQUM7UUFDaEUsQ0FBQyxDQUFDO1FBRUYsaUJBQVksR0FBRyxDQUNiLEtBQWEsRUFDYixVQUFtQixFQUNuQixPQUFhLEVBQ2IsRUFBRTtZQUNGLE9BQU8sSUFBSSxVQUFVLENBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDL0IsTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3ZELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDekMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2lCQUNoQjs7b0JBQ0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQzt5QkFDM0IsU0FBUyxFQUFFO3lCQUNYLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO3dCQUNWLDJCQUEyQjt3QkFDM0IsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDWixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQy9CLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDakIsQ0FBQyxDQUFDLENBQUM7WUFDVCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUNGLHNCQUFpQixHQUFHLENBQ2xCLEtBQWEsRUFDYixVQUFtQixFQUNuQixPQUFhLEVBQ2IsRUFBRTtZQUNGLE9BQU8sSUFBSSxVQUFVLENBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDL0IsTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3ZELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDMUM7Z0JBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQztxQkFDM0IsU0FBUyxFQUFFO3FCQUNYLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNWLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDWixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQy9CLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDakIsQ0FBQyxDQUFDO3FCQUNELEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNYLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2IsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNqQixDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBd0NGLFlBQVk7UUFFWixnQkFBZ0I7UUFDaEIsV0FBTSxHQUFHLENBQVUsS0FBYSxFQUFFLE9BQVEsRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLElBQUk7aUJBQ2IsTUFBTSxDQUNMLEtBQUssRUFDTCxPQUFPLElBQUk7Z0JBQ1QsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ3RDLFlBQVksRUFBRSxNQUFNO2FBQ3JCLENBQ0Y7aUJBQ0EsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBb0IsQ0FBQztRQUNsRSxDQUFDLENBQUM7UUFDRixtQkFBYyxHQUFHLENBQVUsS0FBYSxFQUFFLElBQVUsRUFBRSxPQUFRLEVBQUUsRUFBRTtZQUNoRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNoQyxNQUFNLEdBQUcsR0FBRyxJQUFJLFdBQVcsQ0FDekIsUUFBUSxFQUNSLEtBQUssRUFDTCxJQUFJLEVBQ0osT0FBTyxJQUFJO2dCQUNULE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUN0QyxZQUFZLEVBQUUsTUFBTTthQUNyQixDQUNGLENBQUM7WUFDRixPQUFPLElBQUksQ0FBQyxJQUFJO2lCQUNiLE9BQU8sQ0FBSSxHQUFHLENBQUM7aUJBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBb0IsQ0FBQztRQUNsRSxDQUFDLENBQUM7UUFDRixlQUFVLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUM3QixJQUFJLENBQUMsTUFBTSxDQUFTLEtBQUssRUFBRTtZQUN6QixPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN0QyxZQUFZLEVBQUUsTUFBTTtTQUNyQixDQUFDLENBQUM7UUFDTCxZQUFZO1FBRVosY0FBUyxHQUFHLENBQUksSUFBUyxFQUFFLEVBQUU7WUFDM0IsT0FBTyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFlLENBQUM7UUFDaEUsQ0FBQyxDQUFDO0lBclNDLENBQUM7SUFmSixJQUFZLE9BQU87UUFDakIsT0FBTztZQUNMLGNBQWMsRUFBRSxrQkFBa0I7U0FDbkMsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFZLFdBQVc7UUFDckIsT0FBTztZQUNMLE9BQU8sRUFBRSxxQkFBcUI7U0FDL0IsQ0FBQztJQUNKLENBQUM7SUFRTyxTQUFTLENBQ2YsTUFBeUMsRUFDekMsS0FBSyxFQUNMLEdBQUcsTUFBTTtRQUVULElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztTQUN2QztJQUNILENBQUM7SUFRRCxlQUFlO0lBQ2YsS0FBSyxDQUFVLEtBQWEsRUFBRSxJQUFLLEVBQUUsT0FBYTtRQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUU7WUFDN0IsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDdEMsWUFBWSxFQUFFLE1BQU07WUFDcEIsR0FBRyxPQUFPO1NBQ1gsQ0FBQzthQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQW9CLENBQUM7SUFDbEUsQ0FBQztJQUNELFlBQVk7SUFDWixjQUFjO0lBQ2QsSUFBSSxDQUFVLEtBQWEsRUFBRSxJQUFLLEVBQUUsTUFBZ0I7UUFDbEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFO1lBQzVCLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3RDLFlBQVksRUFBRSxNQUFNO1lBQ3BCLEdBQUcsTUFBTSxFQUFFLE9BQU87U0FDbkIsQ0FBQzthQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQW9CLENBQUM7SUFDbEUsQ0FBQztJQUNELFFBQVEsQ0FBVSxLQUFhLEVBQUUsSUFBYztRQUM3QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUksS0FBSyxFQUFFLElBQUksRUFBRTtZQUMvQixPQUFPLEVBQUU7Z0JBQ1AsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQzFDLFlBQVksRUFBRSxNQUFNO2FBQ3JCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELHVCQUF1QixDQUFVLEtBQWEsRUFBRSxJQUFjO1FBQzVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBSSxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQy9CLE9BQU8sRUFBRTtnQkFDUCxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FDNUMsZ0JBQWdCLEVBQ2hCLE1BQU0sQ0FDUDtnQkFDRCxZQUFZLEVBQUUsTUFBTTthQUNyQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxVQUFVLENBQUMsS0FBYSxFQUFFLElBQUs7UUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsRUFBRSxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFTLEtBQUssRUFBRSxJQUFJLEVBQUU7WUFDcEMsT0FBTyxFQUFFO2dCQUNQLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQztvQkFDdkIsY0FBYyxFQUFFLFlBQVk7aUJBQzdCLENBQUM7Z0JBQ0YsWUFBWSxFQUFFLE1BQU07YUFDckI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0Qsd0JBQXdCLENBQUMsS0FBYSxFQUFFLElBQVk7UUFDbEQsT0FBTyxJQUFJLFVBQVUsQ0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sR0FBRyxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUN6QixXQUFXO1lBQ1gsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFO2dCQUN2QyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFTLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUMzRDtZQUVELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztpQkFDeEIsU0FBUyxFQUFFO2lCQUNYLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNWLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQixDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ1gsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBMkhELGVBQWUsQ0FBQyxVQUFtQjtRQUNqQyx1Q0FBdUM7UUFDdkMsa0NBQWtDO1FBQ2xDLGlFQUFpRTtRQUNqRSx1Q0FBdUM7UUFDdkMseURBQXlEO1FBQ3pELE1BQU07UUFDTixJQUFJO1FBQ0osZ0NBQWdDO1FBQ2hDLGlCQUFpQjtRQUNqQixZQUFZO1FBQ1osSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUMzQixPQUFPLENBQ0wsR0FBRztZQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUNwQixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUM7aUJBQzVELEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7aUJBQzdELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUNELFlBQVk7SUFFWixhQUFhO0lBQ2IsR0FBRyxDQUFVLEtBQWEsRUFBRSxJQUFLLEVBQUUsTUFBZ0I7UUFDakQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksS0FBSyxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQ3BCLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDZixJQUFJLE1BQU0sRUFBRSxXQUFXLElBQUksYUFBYSxFQUFFO1lBQ3hDLEtBQUssSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLEtBQUssR0FBRyxJQUFJLENBQUM7U0FDZDtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRTtZQUNqQixPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN0QyxZQUFZLEVBQUUsTUFBTTtZQUNwQixHQUFHLE1BQU0sRUFBRSxPQUFPO1NBQ25CLENBQUM7YUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFvQixDQUFDO0lBQ2xFLENBQUM7O3VHQTlRVSxVQUFVOzJHQUFWLFVBQVUsY0FGVCxNQUFNOzJGQUVQLFVBQVU7a0JBSHRCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSHR0cENsaWVudCxcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG4gIEh0dHBIZWFkZXJzLFxuICBIdHRwUmVxdWVzdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgaWlmLCBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHJldHJ5LCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJQ29kZURlc2NyaXB0aW9uLCBJQ29kZVRpdGxlIH0gZnJvbSAnLi4vU2hhcmVkL21vZGVscy9pbmRleC5tb2RlbCc7XG5pbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJ0BlbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnLi9jYWNoZS9jYWNoZS5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnLi9jYWNoZS9sb2NhbC1jYWNoZS5zZXJ2aWNlJztcbmV4cG9ydCBpbnRlcmZhY2UgSVJlc3BvbnNlIHtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICByZXN1bHQ6IGFueTtcbiAgc3RhdHVzOiAnc3VjY2VzcycgfCAnZXJyb3InIHwgJ2ZhaWx1cmUnO1xuICBzdGF0dXNDb2RlOiAnU00wMDAnIHwgJ1NNMDAxJyB8ICdTTTAwMicgfCAnU00wMDMnO1xufVxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFwaVNlcnZpY2Uge1xuICBwcml2YXRlIHNob3dSb3V0ZXMgPSAwO1xuICBwcml2YXRlIGdldCBoZWFkZXJzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgZmlsZUhlYWRlcnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVuY3R5cGU6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcbiAgICB9O1xuICB9XG4gIHByaXZhdGUgcmV0cnlDb3VudCA9IDA7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHB1YmxpYyBjYWNoZVM6IENhY2hlU2VydmljZSxcbiAgICBwdWJsaWMgbENhY2hlUzogTG9jYWxDYWNoZVNlcnZpY2VcbiAgKSB7fVxuXG4gIHByaXZhdGUgbG9nUm91dGVzKFxuICAgIG1ldGhvZDogJ2dldCcgfCAncG9zdCcgfCAncHV0JyB8ICdkZWxldGUnLFxuICAgIHJvdXRlLFxuICAgIC4uLmV4dHJhc1xuICApIHtcbiAgICBpZiAodGhpcy5zaG93Um91dGVzKSB7XG4gICAgICBjb25zb2xlLmxvZyhtZXRob2QsIHJvdXRlLCAuLi5leHRyYXMpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGhhbmRsZVJlcXVlc3RFcnJvciA9IChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgbGV0IG1lc3NhZ2U7XG4gICAgaWYgKGVycj8uZXJyb3IgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilcbiAgICAgIG1lc3NhZ2UgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIG5ldyBVaW50OEFycmF5KGVycj8uZXJyb3IpKTtcbiAgICByZXR1cm4gdGhyb3dFcnJvcihtZXNzYWdlIHx8IGVycj8uZXJyb3I/Lm1lc3NhZ2UpO1xuICB9O1xuXG4gIC8vI3JlZ2lvbiBQQVRDSFxuICBwYXRjaDxUID0gYW55Pihyb3V0ZTogc3RyaW5nLCBib2R5Pywgb3B0aW9ucz86IGFueSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHRoaXMubG9nUm91dGVzKCdwb3N0Jywgcm91dGUsIGJvZHkpO1xuICAgIGNvbnNvbGUubG9nKGJvZHkpO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wYXRjaChlbmNvZGVVUkkocm91dGUpLCBib2R5LCB7XG4gICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlUmVxdWVzdEVycm9yKSkgYXMgT2JzZXJ2YWJsZTxhbnk+O1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuICAvLyNyZWdpb24gUE9TVFxuICBwb3N0PFQgPSBhbnk+KHJvdXRlOiBzdHJpbmcsIGJvZHk/LCBleHRyYXM/OiBJRXh0cmFzKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgdGhpcy5sb2dSb3V0ZXMoJ3Bvc3QnLCByb3V0ZSwgYm9keSk7XG4gICAgY29uc29sZS5sb2coYm9keSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QoZW5jb2RlVVJJKHJvdXRlKSwgYm9keSwge1xuICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgIC4uLmV4dHJhcz8ub3B0aW9ucyxcbiAgICAgIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlUmVxdWVzdEVycm9yKSkgYXMgT2JzZXJ2YWJsZTxhbnk+O1xuICB9XG4gIHBvc3RGaWxlPFQgPSBhbnk+KHJvdXRlOiBzdHJpbmcsIGJvZHk6IEZvcm1EYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMucG9zdDxUPihyb3V0ZSwgYm9keSwge1xuICAgICAgb3B0aW9uczoge1xuICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5maWxlSGVhZGVycyksXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBwb3N0RmlsZVdpdGhFbmRvcnNlbWVudDxUID0gYW55Pihyb3V0ZTogc3RyaW5nLCBib2R5OiBGb3JtRGF0YSkge1xuICAgIHJldHVybiB0aGlzLnBvc3Q8VD4ocm91dGUsIGJvZHksIHtcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuZmlsZUhlYWRlcnMpLnNldChcbiAgICAgICAgICAndXNlRW5kb3JzZW1lbnQnLFxuICAgICAgICAgICd0cnVlJ1xuICAgICAgICApLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgcG9zdFN0cmluZyhyb3V0ZTogc3RyaW5nLCBib2R5Pykge1xuICAgIGNvbnNvbGUubG9nKCdyZXF1ZXN0Q291bnQnLCArK2Vudmlyb25tZW50LnJlcXVlc3RDb3VudCk7XG4gICAgcmV0dXJuIHRoaXMucG9zdDxzdHJpbmc+KHJvdXRlLCBib2R5LCB7XG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluJyxcbiAgICAgICAgfSksXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBwb3N0U3RyaW5nV2l0aExvY2FsQ2FjaGUocm91dGU6IHN0cmluZywgYm9keTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKHJlcykgPT4ge1xuICAgICAgY29uc3QgYmR5ID0gYm9keT8udHJpbSgpO1xuICAgICAgLy8gZGVidWdnZXJcbiAgICAgIGlmICh0aGlzLmxDYWNoZVMuaGFzKHJvdXRlICsgJ18nICsgYmR5KSkge1xuICAgICAgICByZXMubmV4dCh0aGlzLmxDYWNoZVMuZ2V0SXRlbTxzdHJpbmc+KHJvdXRlICsgJ18nICsgYmR5KSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9zdFN0cmluZyhyb3V0ZSwgYmR5KVxuICAgICAgICAudG9Qcm9taXNlKClcbiAgICAgICAgLnRoZW4oKHIpID0+IHtcbiAgICAgICAgICByZXMubmV4dChyKTtcbiAgICAgICAgICB0aGlzLmxDYWNoZVMuc2V0SXRlbShyb3V0ZSArICdfJyArIGJkeSwgcik7XG4gICAgICAgICAgcmVzLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgIHJlcy5lcnJvcihlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIEdFVFxuICBnZXQgPSA8VCA9IGFueT4oXG4gICAgcm91dGU6IHN0cmluZyxcbiAgICBwYXJhbWV0ZXJzPzogT2JqZWN0LFxuICAgIGV4dHJhcz86IElFeHRyYXNcbiAgKTogT2JzZXJ2YWJsZTxUPiA9PiB7XG4gICAgdGhpcy5sb2dSb3V0ZXMoJ2dldCcsIHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8VD4oKHJlcykgPT4ge1xuICAgICAgY29uc3QgcXVlcnkgPSByb3V0ZSArIHRoaXMuZ2V0UmVxdWVzdFBhcnNlKHBhcmFtZXRlcnMpO1xuICAgICAgLy8gaWYgKHRoaXMuY2FjaGVTLmhhcyhxdWVyeSkpIHtcbiAgICAgIC8vICAgcmVzLm5leHQodGhpcy5jYWNoZVMuZ2V0SXRlbTxUPihyb3V0ZSkpO1xuICAgICAgLy8gfVxuICAgICAgdGhpcy5odHRwXG4gICAgICAgIC5nZXQocXVlcnksIHtcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAuLi5leHRyYXM/Lm9wdGlvbnMsXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHJldHJ5KHRoaXMucmV0cnlDb3VudCksXG4gICAgICAgICAgdGFwKCh4KSA9PiAodGhpcy5zaG93Um91dGVzID8gY29uc29sZS5sb2coeCkgOiBudWxsKSksXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzKSlcbiAgICAgICAgICAgICAgaWYgKHJlc1swXT8uY29kZSkgcmV0dXJuIHJlcy5zb3J0KCkuc29ydDIoJ2NvZGUnLCB0cnVlKTtcbiAgICAgICAgICAgICAgZWxzZSBpZiAocmVzWzBdPy5jb2x1bW5OYW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXMuc29ydCgpLnNvcnQyKCdjb2x1bW5OYW1lJywgdHJ1ZSk7XG4gICAgICAgICAgICAgIGVsc2UgcmV0dXJuIHJlcy5zb3J0KCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVSZXF1ZXN0RXJyb3IpXG4gICAgICAgIClcbiAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgIC50aGVuKChyKSA9PiB7XG4gICAgICAgICAgcmVzLm5leHQocik7XG4gICAgICAgICAgdGhpcy5jYWNoZVMuc2V0SXRlbShxdWVyeSwgcik7XG4gICAgICAgICAgcmVzLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiByZXMuZXJyb3IoZXJyKSk7XG4gICAgfSk7XG4gIH07XG5cbiAgZ2V0Q29kZXMgPSA8VCA9IElDb2RlVGl0bGUgJiBJQ29kZURlc2NyaXB0aW9uPihyb3V0ZTogc3RyaW5nKSA9PlxuICAgIHRoaXMuZ2V0PFRbXT4ocm91dGUpLnBpcGUobWFwKChyZXMpID0+IHRoaXMuc29ydENvZGVzKHJlcykpKTtcblxuICBnZXRUZXh0ID0gPFQgPSBzdHJpbmc+KHJvdXRlOiBzdHJpbmcsIHBhcmFtZXRlcnM/OiBPYmplY3QpID0+XG4gICAgdGhpcy5nZXQ8VD4ocm91dGUsIHBhcmFtZXRlcnMsIHtcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgZ2V0RmlsZSA9IDxUID0gc3RyaW5nPihyb3V0ZTogc3RyaW5nLCBwYXJhbWV0ZXJzPzogT2JqZWN0KSA9PlxuICAgIHRoaXMuZ2V0PFQ+KHJvdXRlLCBwYXJhbWV0ZXJzLCB7XG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheUJ1ZmZlcicsXG4gICAgICB9LFxuICAgIH0pO1xuICBnZXRXaXRoQm9keSA9IDxUID0gYW55Pihyb3V0ZTogc3RyaW5nLCBib2R5PzogYW55LCBleHRyYXM/OiBJRXh0cmFzKSA9PiB7XG4gICAgdGhpcy5sb2dSb3V0ZXMoJ2dldCcsIHJvdXRlKTtcbiAgICAvLyBkZWJ1Z2dlclxuICAgIGNvbnN0IHJlcSA9IG5ldyBIdHRwUmVxdWVzdChcbiAgICAgICdHRVQnLFxuICAgICAgcm91dGUsXG4gICAgICBib2R5LFxuICAgICAgZXh0cmFzPy5vcHRpb25zIHx8IHtcbiAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnJlcXVlc3Q8VD4ocmVxKVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZVJlcXVlc3RFcnJvcikpIGFzIE9ic2VydmFibGU8VD47XG4gIH07XG5cbiAgZ2V0RnJvbWxvY2FsID0gPFQgPSBhbnk+KFxuICAgIHJvdXRlOiBzdHJpbmcsXG4gICAgcGFyYW1ldGVycz86IE9iamVjdCxcbiAgICBvcHRpb25zPzogYW55XG4gICkgPT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxUPigocmVzKSA9PiB7XG4gICAgICBjb25zdCBxdWVyeSA9IHJvdXRlICsgdGhpcy5nZXRSZXF1ZXN0UGFyc2UocGFyYW1ldGVycyk7XG4gICAgICBpZiAodGhpcy5sQ2FjaGVTLmhhcyhxdWVyeSkpIHtcbiAgICAgICAgcmVzLm5leHQodGhpcy5sQ2FjaGVTLmdldEl0ZW08VD4ocXVlcnkpKTtcbiAgICAgICAgcmVzLmNvbXBsZXRlKCk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgdGhpcy5nZXQocXVlcnksIG51bGwsIG9wdGlvbnMpXG4gICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgICAgLnRoZW4oKHIpID0+IHtcbiAgICAgICAgICAgIC8vIGlmICghdGhpcy5jUy5oYXMocm91dGUpKVxuICAgICAgICAgICAgcmVzLm5leHQocik7XG4gICAgICAgICAgICB0aGlzLmxDYWNoZVMuc2V0SXRlbShxdWVyeSwgcik7XG4gICAgICAgICAgICByZXMuY29tcGxldGUoKTtcbiAgICAgICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbiAgZ2V0V2l0aExvY2FsQ2FjaGUgPSA8VCA9IGFueT4oXG4gICAgcm91dGU6IHN0cmluZyxcbiAgICBwYXJhbWV0ZXJzPzogT2JqZWN0LFxuICAgIG9wdGlvbnM/OiBhbnlcbiAgKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFQ+KChyZXMpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gcm91dGUgKyB0aGlzLmdldFJlcXVlc3RQYXJzZShwYXJhbWV0ZXJzKTtcbiAgICAgIGlmICh0aGlzLmxDYWNoZVMuaGFzKHF1ZXJ5KSkge1xuICAgICAgICByZXMubmV4dCh0aGlzLmxDYWNoZVMuZ2V0SXRlbTxUPihxdWVyeSkpO1xuICAgICAgfVxuICAgICAgdGhpcy5nZXQocXVlcnksIG51bGwsIG9wdGlvbnMpXG4gICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAudGhlbigocikgPT4ge1xuICAgICAgICAgIC8vIGlmICghdGhpcy5jUy5oYXMocm91dGUpKVxuICAgICAgICAgIHJlcy5uZXh0KHIpO1xuICAgICAgICAgIHRoaXMubENhY2hlUy5zZXRJdGVtKHF1ZXJ5LCByKTtcbiAgICAgICAgICByZXMuY29tcGxldGUoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgcmVzLmVycm9yKGUpO1xuICAgICAgICAgIHJlcy5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbiAgZ2V0UmVxdWVzdFBhcnNlKHBhcmFtZXRlcnM/OiBPYmplY3QpIHtcbiAgICAvLyBjb25zdCBuYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAvLyBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbWV0ZXJzKSB7XG4gICAgLy8gICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmFtZXRlcnMsIGtleSkpIHtcbiAgICAvLyAgICAgY29uc3QgZWxlbWVudCA9IHBhcmFtZXRlcnNba2V5XTtcbiAgICAvLyAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkgbmJvZHkuc2V0KGtleSwgZWxlbWVudCArICcnKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gICAgLy8gY29uc3Qgc3RyID0gbmJvZHkudG9TdHJpbmcoKTtcbiAgICAvLyBpZihwYXJhbWV0ZXJzKVxuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGlmICghcGFyYW1ldGVycykgcmV0dXJuICcnO1xuICAgIHJldHVybiAoXG4gICAgICAnPycgK1xuICAgICAgT2JqZWN0LmtleXMocGFyYW1ldGVycylcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBwYXJhbWV0ZXJzW2tleV0/LnRvU3RyaW5nKCk/LnRyaW0oKSAhPSBudWxsKVxuICAgICAgICAubWFwKChrZXkpID0+IGAke2tleX09JHtwYXJhbWV0ZXJzW2tleV0/LnRvU3RyaW5nKCk/LnRyaW0oKX1gKVxuICAgICAgICAuam9pbignJicpXG4gICAgKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gUFVUXG4gIHB1dDxUID0gYW55Pihyb3V0ZTogc3RyaW5nLCBib2R5PywgZXh0cmFzPzogSUV4dHJhcyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHRoaXMubG9nUm91dGVzKCdwdXQnLCByb3V0ZSwgYm9keSk7XG4gICAgbGV0IHF1ZXJ5ID0gcm91dGUgKyAnJyxcbiAgICAgIG5ib2R5ID0gYm9keTtcbiAgICBpZiAoZXh0cmFzPy5yZXF1ZXN0VHlwZSA9PSAncXVlcnlQYXJhbXMnKSB7XG4gICAgICBxdWVyeSArPSB0aGlzLmdldFJlcXVlc3RQYXJzZShib2R5KTtcbiAgICAgIG5ib2R5ID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnB1dChxdWVyeSwgbmJvZHksIHtcbiAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICAuLi5leHRyYXM/Lm9wdGlvbnMsXG4gICAgICB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZVJlcXVlc3RFcnJvcikpIGFzIE9ic2VydmFibGU8YW55PjtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gREVMRVRFXG4gIGRlbGV0ZSA9IDxUID0gYW55Pihyb3V0ZTogc3RyaW5nLCBvcHRpb25zPykgPT4ge1xuICAgIHRoaXMubG9nUm91dGVzKCdkZWxldGUnLCByb3V0ZSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmRlbGV0ZTxUPihcbiAgICAgICAgcm91dGUsXG4gICAgICAgIG9wdGlvbnMgfHwge1xuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICB9XG4gICAgICApXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlUmVxdWVzdEVycm9yKSkgYXMgT2JzZXJ2YWJsZTxhbnk+O1xuICB9O1xuICBkZWxldGVXaXRoQm9keSA9IDxUID0gYW55Pihyb3V0ZTogc3RyaW5nLCBib2R5PzogYW55LCBvcHRpb25zPykgPT4ge1xuICAgIHRoaXMubG9nUm91dGVzKCdkZWxldGUnLCByb3V0ZSk7XG4gICAgY29uc3QgcmVxID0gbmV3IEh0dHBSZXF1ZXN0KFxuICAgICAgJ0RFTEVURScsXG4gICAgICByb3V0ZSxcbiAgICAgIGJvZHksXG4gICAgICBvcHRpb25zIHx8IHtcbiAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnJlcXVlc3Q8VD4ocmVxKVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZVJlcXVlc3RFcnJvcikpIGFzIE9ic2VydmFibGU8YW55PjtcbiAgfTtcbiAgZGVsZXRlVGV4dCA9IChyb3V0ZTogc3RyaW5nKSA9PlxuICAgIHRoaXMuZGVsZXRlPHN0cmluZz4ocm91dGUsIHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXG4gICAgfSk7XG4gIC8vI2VuZHJlZ2lvblxuXG4gIHNvcnRDb2RlcyA9IDxUPihkYXRhOiBUW10pID0+IHtcbiAgICByZXR1cm4gZGF0YT8uc29ydDIoJ2NvZGUnLCB0cnVlKT8uc29ydDIoJ2NvZGUnKSBhcyBhbnkgYXMgVFtdO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgSUV4dHJhcyB7XG4gIG5vRm9ybWF0PzogYm9vbGVhbjtcbiAgb3B0aW9ucz86IGFueTtcbiAgcmVxdWVzdFR5cGU/OiAncXVlcnlQYXJhbXMnO1xufVxuIl19
@@ -0,0 +1,103 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { environment } from '@environments/environment';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/platform-browser";
5
+ import * as i2 from "./translation.service";
6
+ export class AppService {
7
+ constructor(titleS, translator) {
8
+ this.titleS = titleS;
9
+ this.translator = translator;
10
+ this.topMenu = environment.menus;
11
+ this.bottomMenu = [];
12
+ this.systemMetadataMap = new Map([]);
13
+ this.addTitle = (title, translate = environment.translate) => {
14
+ environment.pageTitle = title;
15
+ if (!translate)
16
+ this.titleS.setTitle((title ? title + ' | ' : '') +
17
+ environment.appName +
18
+ ' | ' +
19
+ environment.name);
20
+ else
21
+ this.translator
22
+ .translateHTML((title ? title + ' | ' : '') +
23
+ environment.appName +
24
+ ' | ' +
25
+ environment.name)
26
+ .subscribe((r) => {
27
+ this.titleS.setTitle(r);
28
+ }, (e) => {
29
+ this.addTitle(title, false);
30
+ });
31
+ };
32
+ this.filterNavMenuFunc = (value) => !value.locations?.size;
33
+ this.busLines = [];
34
+ }
35
+ get system() {
36
+ return this._system;
37
+ }
38
+ set system(value) {
39
+ this._system = value;
40
+ environment.currentSystem = value;
41
+ document.getElementsByTagName('body')[0].className =
42
+ value?.toString() || value;
43
+ this.bottomMenu = this.topMenu.find((x) => x.system == value)?.subs;
44
+ // debugger
45
+ document.documentElement.style.setProperty('--primary', this.getCurrentSystemMetadata.colourCode);
46
+ }
47
+ get currentTopMenu() {
48
+ return this._currentTopMenu;
49
+ }
50
+ set currentTopMenu(value) {
51
+ this._currentTopMenu = value;
52
+ this.bottomMenu = value.subs;
53
+ // debugger
54
+ }
55
+ async setCurrentTopMenu(system) {
56
+ this.currentTopMenu = this.topMenu.find((x) => x.system == system);
57
+ }
58
+ get getFirstAvailableSystem() {
59
+ return this.systemMetadataMap.get(environment.activeSystems?.length
60
+ ? environment.activeSystems[0]
61
+ : this.systemMetadataMap.keys[0]);
62
+ }
63
+ get getCurrentSystemMetadata() {
64
+ return this.systemMetadataMap.get(this.system);
65
+ }
66
+ setDefaultClass() {
67
+ document.getElementsByTagName('body')[0].className =
68
+ this.getFirstAvailableSystem.name?.toString();
69
+ }
70
+ get busLine() {
71
+ return this.getCurrentSystemMetadata?.busline;
72
+ }
73
+ get activeSystems() {
74
+ return environment.activeSystems?.length
75
+ ? this.topMenu.filter((x) => environment.activeSystems.includes(x.system))
76
+ : this.topMenu;
77
+ }
78
+ get hasBusLine() {
79
+ return !!this.getCurrentSystemMetadata?.busline;
80
+ }
81
+ //#region pagename
82
+ get pageName() {
83
+ return this._pageName;
84
+ }
85
+ set pageName(value) {
86
+ this._pageName = value;
87
+ this.addTitle(this._pageName);
88
+ }
89
+ //#endregion
90
+ setMetaTheme() {
91
+ const metaTag = document.getElementById('metaThemeColour');
92
+ metaTag.content = this.getCurrentSystemMetadata.colourCode;
93
+ }
94
+ }
95
+ AppService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: AppService, deps: [{ token: i1.Title }, { token: i2.TranslationService }], target: i0.ɵɵFactoryTarget.Injectable });
96
+ AppService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: AppService, providedIn: 'root' });
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: AppService, decorators: [{
98
+ type: Injectable,
99
+ args: [{
100
+ providedIn: 'root',
101
+ }]
102
+ }], ctorParameters: function () { return [{ type: i1.Title }, { type: i2.TranslationService }]; } });
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvU2VydmljZXMvYXBwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7QUFheEQsTUFBTSxPQUFPLFVBQVU7SUE0Q3JCLFlBQW1CLE1BQWEsRUFBUyxVQUE4QjtRQUFwRCxXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQVMsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUEzQ3ZFLFlBQU8sR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQzVCLGVBQVUsR0FBZSxFQUFFLENBQUM7UUE4QjVCLHNCQUFpQixHQUFHLElBQUksR0FBRyxDQUFtQixFQUFFLENBQUMsQ0FBQztRQXNDbEQsYUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsR0FBRyxXQUFXLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDdEQsV0FBVyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDOUIsSUFBSSxDQUFDLFNBQVM7Z0JBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQ2xCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzFCLFdBQVcsQ0FBQyxPQUFPO29CQUNuQixLQUFLO29CQUNMLFdBQVcsQ0FBQyxJQUFJLENBQ25CLENBQUM7O2dCQUVGLElBQUksQ0FBQyxVQUFVO3FCQUNaLGFBQWEsQ0FDWixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUMxQixXQUFXLENBQUMsT0FBTztvQkFDbkIsS0FBSztvQkFDTCxXQUFXLENBQUMsSUFBSSxDQUNuQjtxQkFDQSxTQUFTLENBQ1IsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDSixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUIsQ0FBQyxFQUNELENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzlCLENBQUMsQ0FDRixDQUFDO1FBQ1IsQ0FBQyxDQUFDO1FBUUYsc0JBQWlCLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUM7UUFDaEUsYUFBUSxHQUFrQyxFQUFFLENBQUM7SUE1RDZCLENBQUM7SUF0QzNFLElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBVyxNQUFNLENBQUMsS0FBYztRQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixXQUFXLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUNsQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNoRCxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUssS0FBYSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQ3BFLFdBQVc7UUFDWCxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQ3hDLFdBQVcsRUFDWCxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxDQUN6QyxDQUFDO0lBQ0osQ0FBQztJQUNELElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUNELElBQVcsY0FBYyxDQUFDLEtBQWU7UUFDdkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQzdCLFdBQVc7SUFDYixDQUFDO0lBQ0QsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQWU7UUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsSUFBSSx1QkFBdUI7UUFDekIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUMvQixXQUFXLENBQUMsYUFBYSxFQUFFLE1BQU07WUFDL0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNuQyxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksd0JBQXdCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUlELGVBQWU7UUFDYixRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNoRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFDRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUM7SUFDaEQsQ0FBQztJQUNELElBQUksYUFBYTtRQUNmLE9BQU8sV0FBVyxDQUFDLGFBQWEsRUFBRSxNQUFNO1lBQ3RDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFJLFVBQVU7UUFDWixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDO0lBQ2xELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFhO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUEyQkQsWUFBWTtJQUNaLFlBQVk7UUFDVixNQUFNLE9BQU8sR0FBb0IsUUFBUSxDQUFDLGNBQWMsQ0FDdEQsaUJBQWlCLENBQ1gsQ0FBQztRQUNULE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQztJQUM3RCxDQUFDOzt1R0F0R1UsVUFBVTsyR0FBVixVQUFVLGNBRlQsTUFBTTsyRkFFUCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJ0BlbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtcbiAgRVN5c3RlbSxcbiAgRVN5c3RlbUJ1c0xpbmUsXG4gIElTeXN0ZW0sXG4gIElWYWx1ZUxhYmVsLFxufSBmcm9tICcuLi9TaGFyZWQvbW9kZWxzL2luZGV4Lm1vZGVsJztcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAnLi4vU2hhcmVkL21vZGVscy9JTWVudUl0ZW0nO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFwcFNlcnZpY2Uge1xuICB0b3BNZW51ID0gZW52aXJvbm1lbnQubWVudXM7XG4gIGJvdHRvbU1lbnU6IE1lbnVJdGVtW10gPSBbXTtcbiAgcHJpdmF0ZSBfY3VycmVudFRvcE1lbnU6IE1lbnVJdGVtO1xuICBwcml2YXRlIF9zeXN0ZW06IEVTeXN0ZW07XG4gIHByaXZhdGUgX3BhZ2VOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgc3lzdGVtKCk6IEVTeXN0ZW0ge1xuICAgIHJldHVybiB0aGlzLl9zeXN0ZW07XG4gIH1cbiAgcHVibGljIHNldCBzeXN0ZW0odmFsdWU6IEVTeXN0ZW0pIHtcbiAgICB0aGlzLl9zeXN0ZW0gPSB2YWx1ZTtcbiAgICBlbnZpcm9ubWVudC5jdXJyZW50U3lzdGVtID0gdmFsdWU7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5jbGFzc05hbWUgPVxuICAgICAgdmFsdWU/LnRvU3RyaW5nKCkgfHwgKHZhbHVlIGFzIGFueSk7XG4gICAgdGhpcy5ib3R0b21NZW51ID0gdGhpcy50b3BNZW51LmZpbmQoKHgpID0+IHguc3lzdGVtID09IHZhbHVlKT8uc3VicztcbiAgICAvLyBkZWJ1Z2dlclxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICctLXByaW1hcnknLFxuICAgICAgdGhpcy5nZXRDdXJyZW50U3lzdGVtTWV0YWRhdGEuY29sb3VyQ29kZVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBjdXJyZW50VG9wTWVudSgpOiBNZW51SXRlbSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRUb3BNZW51O1xuICB9XG4gIHB1YmxpYyBzZXQgY3VycmVudFRvcE1lbnUodmFsdWU6IE1lbnVJdGVtKSB7XG4gICAgdGhpcy5fY3VycmVudFRvcE1lbnUgPSB2YWx1ZTtcbiAgICB0aGlzLmJvdHRvbU1lbnUgPSB2YWx1ZS5zdWJzO1xuICAgIC8vIGRlYnVnZ2VyXG4gIH1cbiAgYXN5bmMgc2V0Q3VycmVudFRvcE1lbnUoc3lzdGVtOiBFU3lzdGVtKSB7XG4gICAgdGhpcy5jdXJyZW50VG9wTWVudSA9IHRoaXMudG9wTWVudS5maW5kKCh4KSA9PiB4LnN5c3RlbSA9PSBzeXN0ZW0pO1xuICB9XG4gIHN5c3RlbU1ldGFkYXRhTWFwID0gbmV3IE1hcDxFU3lzdGVtLCBJU3lzdGVtPihbXSk7XG4gIGdldCBnZXRGaXJzdEF2YWlsYWJsZVN5c3RlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5zeXN0ZW1NZXRhZGF0YU1hcC5nZXQoXG4gICAgICBlbnZpcm9ubWVudC5hY3RpdmVTeXN0ZW1zPy5sZW5ndGhcbiAgICAgICAgPyBlbnZpcm9ubWVudC5hY3RpdmVTeXN0ZW1zWzBdXG4gICAgICAgIDogdGhpcy5zeXN0ZW1NZXRhZGF0YU1hcC5rZXlzWzBdXG4gICAgKTtcbiAgfVxuICBnZXQgZ2V0Q3VycmVudFN5c3RlbU1ldGFkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLnN5c3RlbU1ldGFkYXRhTWFwLmdldCh0aGlzLnN5c3RlbSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGl0bGVTOiBUaXRsZSwgcHVibGljIHRyYW5zbGF0b3I6IFRyYW5zbGF0aW9uU2VydmljZSkge31cblxuICBzZXREZWZhdWx0Q2xhc3MoKSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5jbGFzc05hbWUgPVxuICAgICAgdGhpcy5nZXRGaXJzdEF2YWlsYWJsZVN5c3RlbS5uYW1lPy50b1N0cmluZygpO1xuICB9XG4gIGdldCBidXNMaW5lKCkge1xuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRTeXN0ZW1NZXRhZGF0YT8uYnVzbGluZTtcbiAgfVxuICBnZXQgYWN0aXZlU3lzdGVtcygpIHtcbiAgICByZXR1cm4gZW52aXJvbm1lbnQuYWN0aXZlU3lzdGVtcz8ubGVuZ3RoXG4gICAgICA/IHRoaXMudG9wTWVudS5maWx0ZXIoKHgpID0+IGVudmlyb25tZW50LmFjdGl2ZVN5c3RlbXMuaW5jbHVkZXMoeC5zeXN0ZW0pKVxuICAgICAgOiB0aGlzLnRvcE1lbnU7XG4gIH1cbiAgZ2V0IGhhc0J1c0xpbmUoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRDdXJyZW50U3lzdGVtTWV0YWRhdGE/LmJ1c2xpbmU7XG4gIH1cblxuICAvLyNyZWdpb24gcGFnZW5hbWVcbiAgZ2V0IHBhZ2VOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9wYWdlTmFtZTtcbiAgfVxuICBzZXQgcGFnZU5hbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3BhZ2VOYW1lID0gdmFsdWU7XG4gICAgdGhpcy5hZGRUaXRsZSh0aGlzLl9wYWdlTmFtZSk7XG4gIH1cbiAgYWRkVGl0bGUgPSAodGl0bGUsIHRyYW5zbGF0ZSA9IGVudmlyb25tZW50LnRyYW5zbGF0ZSkgPT4ge1xuICAgIGVudmlyb25tZW50LnBhZ2VUaXRsZSA9IHRpdGxlO1xuICAgIGlmICghdHJhbnNsYXRlKVxuICAgICAgdGhpcy50aXRsZVMuc2V0VGl0bGUoXG4gICAgICAgICh0aXRsZSA/IHRpdGxlICsgJyB8ICcgOiAnJykgK1xuICAgICAgICAgIGVudmlyb25tZW50LmFwcE5hbWUgK1xuICAgICAgICAgICcgfCAnICtcbiAgICAgICAgICBlbnZpcm9ubWVudC5uYW1lXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRoaXMudHJhbnNsYXRvclxuICAgICAgICAudHJhbnNsYXRlSFRNTChcbiAgICAgICAgICAodGl0bGUgPyB0aXRsZSArICcgfCAnIDogJycpICtcbiAgICAgICAgICAgIGVudmlyb25tZW50LmFwcE5hbWUgK1xuICAgICAgICAgICAgJyB8ICcgK1xuICAgICAgICAgICAgZW52aXJvbm1lbnQubmFtZVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKHIpID0+IHtcbiAgICAgICAgICAgIHRoaXMudGl0bGVTLnNldFRpdGxlKHIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkVGl0bGUodGl0bGUsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gIH07XG4gIC8vI2VuZHJlZ2lvblxuICBzZXRNZXRhVGhlbWUoKSB7XG4gICAgY29uc3QgbWV0YVRhZzogSFRNTE1ldGFFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAnbWV0YVRoZW1lQ29sb3VyJ1xuICAgICkgYXMgYW55O1xuICAgIG1ldGFUYWcuY29udGVudCA9IHRoaXMuZ2V0Q3VycmVudFN5c3RlbU1ldGFkYXRhLmNvbG91ckNvZGU7XG4gIH1cbiAgZmlsdGVyTmF2TWVudUZ1bmMgPSAodmFsdWU6IE1lbnVJdGVtKSA9PiAhdmFsdWUubG9jYXRpb25zPy5zaXplO1xuICBidXNMaW5lczogSVZhbHVlTGFiZWw8RVN5c3RlbUJ1c0xpbmU+W10gPSBbXTtcbn1cbiJdfQ==