@thetradeengineorg1/snova-shell-module 0.0.1

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 (288) hide show
  1. package/README.md +24 -0
  2. package/bundles/thetradeengineorg1-snova-shell-module.umd.js +13896 -0
  3. package/bundles/thetradeengineorg1-snova-shell-module.umd.js.map +1 -0
  4. package/esm2015/lib/globaldependencies/components/componentbase.js +538 -0
  5. package/esm2015/lib/globaldependencies/constants/feature-ids.js +449 -0
  6. package/esm2015/lib/globaldependencies/constants/localstorage-properties.js +38 -0
  7. package/esm2015/lib/globaldependencies/helpers/dom.helper.js +70 -0
  8. package/esm2015/lib/globaldependencies/helpers/fontawesome-icons.js +144 -0
  9. package/esm2015/lib/globaldependencies/helpers/moment-utc-date-adapter.js +37 -0
  10. package/esm2015/lib/globaldependencies/helpers/window.helper.js +32 -0
  11. package/esm2015/lib/globaldependencies/intercepter/jwt.interceptor.js +40 -0
  12. package/esm2015/lib/globaldependencies/pipes/fetchSizedAndCachedImage.pipe.js +36 -0
  13. package/esm2015/lib/globaldependencies/pipes/highLightText.pipe.js +24 -0
  14. package/esm2015/lib/globaldependencies/pipes/orderby-pipe.js +24 -0
  15. package/esm2015/lib/globaldependencies/pipes/removeSpecialCharacters.pipe.js +22 -0
  16. package/esm2015/lib/globaldependencies/pipes/sanitize.pipe.js +24 -0
  17. package/esm2015/lib/globaldependencies/pipes/softlabels.pipes.js +346 -0
  18. package/esm2015/lib/globaldependencies/pipes/utctolocaltime.pipe.js +23 -0
  19. package/esm2015/lib/globaldependencies/pipes/utctolocaltimewithdate.pipe.js +25 -0
  20. package/esm2015/lib/globaldependencies/pipes/workflowstatus.pipes.js +27 -0
  21. package/esm2015/lib/shell-components/components/Payments/account.component.js +50 -0
  22. package/esm2015/lib/shell-components/components/Payments/company-information.js +262 -0
  23. package/esm2015/lib/shell-components/components/Payments/company-plans.component.js +138 -0
  24. package/esm2015/lib/shell-components/components/Payments/document.component.js +57 -0
  25. package/esm2015/lib/shell-components/components/Payments/payment-method.component.js +32 -0
  26. package/esm2015/lib/shell-components/components/Payments/product-service.component.js +143 -0
  27. package/esm2015/lib/shell-components/components/Payments/purchase-more-licenses.js +152 -0
  28. package/esm2015/lib/shell-components/components/Payments/transactions.component.js +60 -0
  29. package/esm2015/lib/shell-components/components/admin-layout/admin-layout.component.js +250 -0
  30. package/esm2015/lib/shell-components/components/all-work-items-dialog/all-work-items-dialog.component.js +89 -0
  31. package/esm2015/lib/shell-components/components/confirmation-dialog/confirmation-dialog.component.js +90 -0
  32. package/esm2015/lib/shell-components/components/export-import-configuration/export-configuration.component.js +357 -0
  33. package/esm2015/lib/shell-components/components/feed-time/feed-time-dialog.component.js +85 -0
  34. package/esm2015/lib/shell-components/components/feed-time/feed-time.component.js +83 -0
  35. package/esm2015/lib/shell-components/components/header-side/header-side.component.js +1642 -0
  36. package/esm2015/lib/shell-components/components/header-top/header-top.component.js +93 -0
  37. package/esm2015/lib/shell-components/components/lives/lives-welcome-page.js +26 -0
  38. package/esm2015/lib/shell-components/components/menu/menu.component.js +2478 -0
  39. package/esm2015/lib/shell-components/components/menu/searchTask.enum.js +10 -0
  40. package/esm2015/lib/shell-components/components/notifications/announcement-dialog.component.js +73 -0
  41. package/esm2015/lib/shell-components/components/notifications/notifications.component.js +449 -0
  42. package/esm2015/lib/shell-components/components/sidebar-top/sidebar-top.component.js +33 -0
  43. package/esm2015/lib/shell-components/components/sidenav/side-bar.component.js +81 -0
  44. package/esm2015/lib/shell-components/components/sidenav/sidenav.component.js +43 -0
  45. package/esm2015/lib/shell-components/components/submit-feedback/submit-feedback.component.js +71 -0
  46. package/esm2015/lib/shell-components/constants/api-urls.js +1052 -0
  47. package/esm2015/lib/shell-components/constants/available-languages.js +25 -0
  48. package/esm2015/lib/shell-components/constants/channel-names.js +38 -0
  49. package/esm2015/lib/shell-components/constants/menu-categories.js +6 -0
  50. package/esm2015/lib/shell-components/constants/notification-routes.js +6 -0
  51. package/esm2015/lib/shell-components/constants/notification-type-ids.js +42 -0
  52. package/esm2015/lib/shell-components/enum/recentSearchType.enum.js +13 -0
  53. package/esm2015/lib/shell-components/models/AppMenuItemModel.js +3 -0
  54. package/esm2015/lib/shell-components/models/AppNotification.js +17 -0
  55. package/esm2015/lib/shell-components/models/AssetAssignedNotificationModel.js +12 -0
  56. package/esm2015/lib/shell-components/models/ChannelUpdateModel.js +3 -0
  57. package/esm2015/lib/shell-components/models/EmployeeStatusModel.js +3 -0
  58. package/esm2015/lib/shell-components/models/IAdjust-screen-options.js +2 -0
  59. package/esm2015/lib/shell-components/models/IBadge.js +2 -0
  60. package/esm2015/lib/shell-components/models/IChildItem.js +2 -0
  61. package/esm2015/lib/shell-components/models/ILayout-change-options.js +2 -0
  62. package/esm2015/lib/shell-components/models/IMenuItem.js +2 -0
  63. package/esm2015/lib/shell-components/models/IlayoutConf.js +2 -0
  64. package/esm2015/lib/shell-components/models/IntroModel.js +3 -0
  65. package/esm2015/lib/shell-components/models/MessageDetails.js +3 -0
  66. package/esm2015/lib/shell-components/models/MessageTypingDetails.js +3 -0
  67. package/esm2015/lib/shell-components/models/NewProjectCreatedNotificationModel.js +10 -0
  68. package/esm2015/lib/shell-components/models/NewProjectFeatureNotificationModel.js +10 -0
  69. package/esm2015/lib/shell-components/models/NotificationsOutPutModel.js +22 -0
  70. package/esm2015/lib/shell-components/models/ProjectSearchCriteriaInputModel.js +3 -0
  71. package/esm2015/lib/shell-components/models/RecentSearchModel.js +5 -0
  72. package/esm2015/lib/shell-components/models/ReportConfigAssignedNotification.js +11 -0
  73. package/esm2015/lib/shell-components/models/ReportSubmittedNotification.js +12 -0
  74. package/esm2015/lib/shell-components/models/RoleUpdatedNotification.js +9 -0
  75. package/esm2015/lib/shell-components/models/UserStoryAssignedNotification.js +13 -0
  76. package/esm2015/lib/shell-components/models/archiveUserStoryModel.js +10 -0
  77. package/esm2015/lib/shell-components/models/companieslist.model.js +3 -0
  78. package/esm2015/lib/shell-components/models/company-model.js +7 -0
  79. package/esm2015/lib/shell-components/models/company-payment-model.js +3 -0
  80. package/esm2015/lib/shell-components/models/dragedWidget.js +3 -0
  81. package/esm2015/lib/shell-components/models/employee-List.js +3 -0
  82. package/esm2015/lib/shell-components/models/employee.js +4 -0
  83. package/esm2015/lib/shell-components/models/entityRoleFeature.js +3 -0
  84. package/esm2015/lib/shell-components/models/export-configuration-model.js +3 -0
  85. package/esm2015/lib/shell-components/models/export-data.module.js +8 -0
  86. package/esm2015/lib/shell-components/models/goalApprovedNotificationModel.js +9 -0
  87. package/esm2015/lib/shell-components/models/import-configuration-model.js +3 -0
  88. package/esm2015/lib/shell-components/models/initialStatusofUsers.js +3 -0
  89. package/esm2015/lib/shell-components/models/invoiceOutput-model.js +3 -0
  90. package/esm2015/lib/shell-components/models/leaveApplicationNotifiction.js +9 -0
  91. package/esm2015/lib/shell-components/models/multiChartsScheduling.js +11 -0
  92. package/esm2015/lib/shell-components/models/parkUserStoryInputModel.js +10 -0
  93. package/esm2015/lib/shell-components/models/project.js +3 -0
  94. package/esm2015/lib/shell-components/models/recentSearchApiModel.js +3 -0
  95. package/esm2015/lib/shell-components/models/searchCriteriaInputModelBase.js +3 -0
  96. package/esm2015/lib/shell-components/models/shellModulesInfo.js +7 -0
  97. package/esm2015/lib/shell-components/models/softlabels-model.js +7 -0
  98. package/esm2015/lib/shell-components/models/sprintReplanRequestedModel.js +9 -0
  99. package/esm2015/lib/shell-components/models/sprintStartedNotificationModel.js +9 -0
  100. package/esm2015/lib/shell-components/models/store-model.js +3 -0
  101. package/esm2015/lib/shell-components/models/store-search-model.js +4 -0
  102. package/esm2015/lib/shell-components/models/themes.model.js +3 -0
  103. package/esm2015/lib/shell-components/models/timesheetenabledisable.js +4 -0
  104. package/esm2015/lib/shell-components/models/user.js +8 -0
  105. package/esm2015/lib/shell-components/models/userStory.js +3 -0
  106. package/esm2015/lib/shell-components/models/userStoryCommentNotificationModel.js +9 -0
  107. package/esm2015/lib/shell-components/models/userStoryUpdateNotificationModel.js +9 -0
  108. package/esm2015/lib/shell-components/models/userstory-custom-fields.model.js +3 -0
  109. package/esm2015/lib/shell-components/models/validation.model.js +2 -0
  110. package/esm2015/lib/shell-components/models/widgetlist.js +6 -0
  111. package/esm2015/lib/shell-components/models/workspaceList.js +3 -0
  112. package/esm2015/lib/shell-components/services/authentication.service.js +96 -0
  113. package/esm2015/lib/shell-components/services/chat.service.js +67 -0
  114. package/esm2015/lib/shell-components/services/common-used.service.js +263 -0
  115. package/esm2015/lib/shell-components/services/feature.service.js +101 -0
  116. package/esm2015/lib/shell-components/services/google-analytics.service.js +24 -0
  117. package/esm2015/lib/shell-components/services/layout.service.js +68 -0
  118. package/esm2015/lib/shell-components/services/payment.service.js +103 -0
  119. package/esm2015/lib/shell-components/services/recentSearch.service.js +90 -0
  120. package/esm2015/lib/shell-components/services/shell.modules.service.js +24 -0
  121. package/esm2015/lib/shell-components/services/signalr.service.js +113 -0
  122. package/esm2015/lib/shell-components/services/theme.service.js +161 -0
  123. package/esm2015/lib/shell-components/shell.module.js +436 -0
  124. package/esm2015/lib/shell-components/shell.routing.js +16 -0
  125. package/esm2015/lib/shell-components/store/actions/authentication.actions.js +260 -0
  126. package/esm2015/lib/shell-components/store/actions/chat.actions.js +248 -0
  127. package/esm2015/lib/shell-components/store/actions/menuitems.actions.js +39 -0
  128. package/esm2015/lib/shell-components/store/actions/notification-validator.action.js +19 -0
  129. package/esm2015/lib/shell-components/store/actions/notifications.actions.js +74 -0
  130. package/esm2015/lib/shell-components/store/effects/authentication.effects.js +503 -0
  131. package/esm2015/lib/shell-components/store/effects/chat.effects.js +139 -0
  132. package/esm2015/lib/shell-components/store/effects/index.js +13 -0
  133. package/esm2015/lib/shell-components/store/effects/menuitems.effects.js +53 -0
  134. package/esm2015/lib/shell-components/store/effects/notification-validator.effects.js +56 -0
  135. package/esm2015/lib/shell-components/store/effects/notifications.effects.js +116 -0
  136. package/esm2015/lib/shell-components/store/reducers/authentication.reducers.js +86 -0
  137. package/esm2015/lib/shell-components/store/reducers/chat.reducers.js +68 -0
  138. package/esm2015/lib/shell-components/store/reducers/index.js +80 -0
  139. package/esm2015/lib/shell-components/store/reducers/menuitems.reducers.js +56 -0
  140. package/esm2015/lib/shell-components/store/reducers/notification-validator.reducers.js +13 -0
  141. package/esm2015/lib/shell-components/store/reducers/notifications.reducers.js +38 -0
  142. package/esm2015/public-api.js +90 -0
  143. package/esm2015/store/reducers/index.js +47 -0
  144. package/esm2015/thetradeengineorg1-snova-shell-module.js +5 -0
  145. package/fesm2015/thetradeengineorg1-snova-shell-module.js +12808 -0
  146. package/fesm2015/thetradeengineorg1-snova-shell-module.js.map +1 -0
  147. package/lib/globaldependencies/components/componentbase.d.ts +455 -0
  148. package/lib/globaldependencies/constants/feature-ids.d.ts +448 -0
  149. package/lib/globaldependencies/constants/localstorage-properties.d.ts +37 -0
  150. package/lib/globaldependencies/helpers/dom.helper.d.ts +7 -0
  151. package/lib/globaldependencies/helpers/fontawesome-icons.d.ts +1 -0
  152. package/lib/globaldependencies/helpers/moment-utc-date-adapter.d.ts +9 -0
  153. package/lib/globaldependencies/helpers/window.helper.d.ts +12 -0
  154. package/lib/globaldependencies/intercepter/jwt.interceptor.d.ts +11 -0
  155. package/lib/globaldependencies/pipes/fetchSizedAndCachedImage.pipe.d.ts +8 -0
  156. package/lib/globaldependencies/pipes/highLightText.pipe.d.ts +8 -0
  157. package/lib/globaldependencies/pipes/orderby-pipe.d.ts +9 -0
  158. package/lib/globaldependencies/pipes/removeSpecialCharacters.pipe.d.ts +8 -0
  159. package/lib/globaldependencies/pipes/sanitize.pipe.d.ts +11 -0
  160. package/lib/globaldependencies/pipes/softlabels.pipes.d.ts +8 -0
  161. package/lib/globaldependencies/pipes/utctolocaltime.pipe.d.ts +8 -0
  162. package/lib/globaldependencies/pipes/utctolocaltimewithdate.pipe.d.ts +8 -0
  163. package/lib/globaldependencies/pipes/workflowstatus.pipes.d.ts +8 -0
  164. package/lib/shell-components/components/Payments/account.component.d.ts +14 -0
  165. package/lib/shell-components/components/Payments/company-information.d.ts +62 -0
  166. package/lib/shell-components/components/Payments/company-plans.component.d.ts +47 -0
  167. package/lib/shell-components/components/Payments/document.component.d.ts +20 -0
  168. package/lib/shell-components/components/Payments/payment-method.component.d.ts +15 -0
  169. package/lib/shell-components/components/Payments/product-service.component.d.ts +48 -0
  170. package/lib/shell-components/components/Payments/purchase-more-licenses.d.ts +37 -0
  171. package/lib/shell-components/components/Payments/transactions.component.d.ts +28 -0
  172. package/lib/shell-components/components/admin-layout/admin-layout.component.d.ts +67 -0
  173. package/lib/shell-components/components/all-work-items-dialog/all-work-items-dialog.component.d.ts +32 -0
  174. package/lib/shell-components/components/confirmation-dialog/confirmation-dialog.component.d.ts +32 -0
  175. package/lib/shell-components/components/export-import-configuration/export-configuration.component.d.ts +60 -0
  176. package/lib/shell-components/components/feed-time/feed-time-dialog.component.d.ts +33 -0
  177. package/lib/shell-components/components/feed-time/feed-time.component.d.ts +27 -0
  178. package/lib/shell-components/components/header-side/header-side.component.d.ts +216 -0
  179. package/lib/shell-components/components/header-top/header-top.component.d.ts +40 -0
  180. package/lib/shell-components/components/lives/lives-welcome-page.d.ts +14 -0
  181. package/lib/shell-components/components/menu/menu.component.d.ts +220 -0
  182. package/lib/shell-components/components/menu/searchTask.enum.d.ts +8 -0
  183. package/lib/shell-components/components/notifications/announcement-dialog.component.d.ts +27 -0
  184. package/lib/shell-components/components/notifications/notifications.component.d.ts +53 -0
  185. package/lib/shell-components/components/sidebar-top/sidebar-top.component.d.ts +10 -0
  186. package/lib/shell-components/components/sidenav/side-bar.component.d.ts +23 -0
  187. package/lib/shell-components/components/sidenav/sidenav.component.d.ts +17 -0
  188. package/lib/shell-components/components/submit-feedback/submit-feedback.component.d.ts +25 -0
  189. package/lib/shell-components/constants/api-urls.d.ts +1051 -0
  190. package/lib/shell-components/constants/available-languages.d.ts +7 -0
  191. package/lib/shell-components/constants/channel-names.d.ts +37 -0
  192. package/lib/shell-components/constants/menu-categories.d.ts +5 -0
  193. package/lib/shell-components/constants/notification-routes.d.ts +5 -0
  194. package/lib/shell-components/constants/notification-type-ids.d.ts +41 -0
  195. package/lib/shell-components/enum/recentSearchType.enum.d.ts +11 -0
  196. package/lib/shell-components/models/AppMenuItemModel.d.ts +12 -0
  197. package/lib/shell-components/models/AppNotification.d.ts +12 -0
  198. package/lib/shell-components/models/AssetAssignedNotificationModel.d.ts +10 -0
  199. package/lib/shell-components/models/ChannelUpdateModel.d.ts +47 -0
  200. package/lib/shell-components/models/EmployeeStatusModel.d.ts +11 -0
  201. package/lib/shell-components/models/IAdjust-screen-options.d.ts +4 -0
  202. package/lib/shell-components/models/IBadge.d.ts +4 -0
  203. package/lib/shell-components/models/IChildItem.d.ts +7 -0
  204. package/lib/shell-components/models/ILayout-change-options.d.ts +4 -0
  205. package/lib/shell-components/models/IMenuItem.d.ts +14 -0
  206. package/lib/shell-components/models/IlayoutConf.d.ts +10 -0
  207. package/lib/shell-components/models/IntroModel.d.ts +3 -0
  208. package/lib/shell-components/models/MessageDetails.d.ts +55 -0
  209. package/lib/shell-components/models/MessageTypingDetails.d.ts +9 -0
  210. package/lib/shell-components/models/NewProjectCreatedNotificationModel.d.ts +8 -0
  211. package/lib/shell-components/models/NewProjectFeatureNotificationModel.d.ts +8 -0
  212. package/lib/shell-components/models/NotificationsOutPutModel.d.ts +41 -0
  213. package/lib/shell-components/models/ProjectSearchCriteriaInputModel.d.ts +10 -0
  214. package/lib/shell-components/models/RecentSearchModel.d.ts +14 -0
  215. package/lib/shell-components/models/ReportConfigAssignedNotification.d.ts +9 -0
  216. package/lib/shell-components/models/ReportSubmittedNotification.d.ts +10 -0
  217. package/lib/shell-components/models/RoleUpdatedNotification.d.ts +7 -0
  218. package/lib/shell-components/models/UserStoryAssignedNotification.d.ts +8 -0
  219. package/lib/shell-components/models/archiveUserStoryModel.d.ts +7 -0
  220. package/lib/shell-components/models/companieslist.model.d.ts +8 -0
  221. package/lib/shell-components/models/company-model.d.ts +31 -0
  222. package/lib/shell-components/models/company-payment-model.d.ts +18 -0
  223. package/lib/shell-components/models/dragedWidget.d.ts +16 -0
  224. package/lib/shell-components/models/employee-List.d.ts +8 -0
  225. package/lib/shell-components/models/employee.d.ts +60 -0
  226. package/lib/shell-components/models/entityRoleFeature.d.ts +9 -0
  227. package/lib/shell-components/models/export-configuration-model.d.ts +8 -0
  228. package/lib/shell-components/models/export-data.module.d.ts +6 -0
  229. package/lib/shell-components/models/goalApprovedNotificationModel.d.ts +8 -0
  230. package/lib/shell-components/models/import-configuration-model.d.ts +3 -0
  231. package/lib/shell-components/models/initialStatusofUsers.d.ts +5 -0
  232. package/lib/shell-components/models/invoiceOutput-model.d.ts +9 -0
  233. package/lib/shell-components/models/leaveApplicationNotifiction.d.ts +7 -0
  234. package/lib/shell-components/models/multiChartsScheduling.d.ts +9 -0
  235. package/lib/shell-components/models/parkUserStoryInputModel.d.ts +7 -0
  236. package/lib/shell-components/models/project.d.ts +28 -0
  237. package/lib/shell-components/models/recentSearchApiModel.d.ts +6 -0
  238. package/lib/shell-components/models/searchCriteriaInputModelBase.d.ts +10 -0
  239. package/lib/shell-components/models/shellModulesInfo.d.ts +16 -0
  240. package/lib/shell-components/models/softlabels-model.d.ts +66 -0
  241. package/lib/shell-components/models/sprintReplanRequestedModel.d.ts +7 -0
  242. package/lib/shell-components/models/sprintStartedNotificationModel.d.ts +7 -0
  243. package/lib/shell-components/models/store-model.d.ts +13 -0
  244. package/lib/shell-components/models/store-search-model.d.ts +7 -0
  245. package/lib/shell-components/models/themes.model.d.ts +9 -0
  246. package/lib/shell-components/models/timesheetenabledisable.d.ts +16 -0
  247. package/lib/shell-components/models/user.d.ts +40 -0
  248. package/lib/shell-components/models/userStory.d.ts +188 -0
  249. package/lib/shell-components/models/userStoryCommentNotificationModel.d.ts +6 -0
  250. package/lib/shell-components/models/userStoryUpdateNotificationModel.d.ts +6 -0
  251. package/lib/shell-components/models/userstory-custom-fields.model.d.ts +6 -0
  252. package/lib/shell-components/models/validation.model.d.ts +5 -0
  253. package/lib/shell-components/models/widgetlist.d.ts +28 -0
  254. package/lib/shell-components/models/workspaceList.d.ts +19 -0
  255. package/lib/shell-components/services/authentication.service.d.ts +18 -0
  256. package/lib/shell-components/services/chat.service.d.ts +16 -0
  257. package/lib/shell-components/services/common-used.service.d.ts +45 -0
  258. package/lib/shell-components/services/feature.service.d.ts +19 -0
  259. package/lib/shell-components/services/google-analytics.service.d.ts +9 -0
  260. package/lib/shell-components/services/layout.service.d.ts +23 -0
  261. package/lib/shell-components/services/payment.service.d.ts +19 -0
  262. package/lib/shell-components/services/recentSearch.service.d.ts +16 -0
  263. package/lib/shell-components/services/shell.modules.service.d.ts +9 -0
  264. package/lib/shell-components/services/signalr.service.d.ts +25 -0
  265. package/lib/shell-components/services/theme.service.d.ts +14 -0
  266. package/lib/shell-components/shell.module.d.ts +117 -0
  267. package/lib/shell-components/shell.routing.d.ts +2 -0
  268. package/lib/shell-components/store/actions/authentication.actions.d.ts +327 -0
  269. package/lib/shell-components/store/actions/chat.actions.d.ts +399 -0
  270. package/lib/shell-components/store/actions/menuitems.actions.d.ts +51 -0
  271. package/lib/shell-components/store/actions/notification-validator.action.d.ts +25 -0
  272. package/lib/shell-components/store/actions/notifications.actions.d.ts +116 -0
  273. package/lib/shell-components/store/effects/authentication.effects.d.ts +54 -0
  274. package/lib/shell-components/store/effects/chat.effects.d.ts +30 -0
  275. package/lib/shell-components/store/effects/index.d.ts +1 -0
  276. package/lib/shell-components/store/effects/menuitems.effects.d.ts +17 -0
  277. package/lib/shell-components/store/effects/notification-validator.effects.d.ts +21 -0
  278. package/lib/shell-components/store/effects/notifications.effects.d.ts +23 -0
  279. package/lib/shell-components/store/reducers/authentication.reducers.d.ts +30 -0
  280. package/lib/shell-components/store/reducers/chat.reducers.d.ts +17 -0
  281. package/lib/shell-components/store/reducers/index.d.ts +59 -0
  282. package/lib/shell-components/store/reducers/menuitems.reducers.d.ts +11 -0
  283. package/lib/shell-components/store/reducers/notification-validator.reducers.d.ts +5 -0
  284. package/lib/shell-components/store/reducers/notifications.reducers.d.ts +10 -0
  285. package/package.json +22 -0
  286. package/public-api.d.ts +80 -0
  287. package/store/reducers/index.d.ts +24 -0
  288. package/thetradeengineorg1-snova-shell-module.d.ts +5 -0
@@ -0,0 +1,143 @@
1
+ import { Component, Inject, ViewChildren } from "@angular/core";
2
+ import { MAT_DIALOG_DATA } from "@angular/material/dialog";
3
+ import { LocalStorageProperties } from '../../../globaldependencies/constants/localstorage-properties';
4
+ import '../../../globaldependencies/helpers/fontawesome-icons';
5
+ import { PurchaseMoreLicensesComponent } from './purchase-more-licenses';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "ngx-toastr";
8
+ import * as i2 from "../../services/payment.service";
9
+ import * as i3 from "@angular/router";
10
+ import * as i4 from "ngx-cookie-service";
11
+ import * as i5 from "@angular/material/dialog";
12
+ import * as i6 from "@angular/material/card";
13
+ import * as i7 from "@angular/material/button";
14
+ import * as i8 from "@ncstate/sat-popover";
15
+ import * as i9 from "@fortawesome/angular-fontawesome";
16
+ import * as i10 from "@angular/flex-layout/flex";
17
+ import * as i11 from "@angular/common";
18
+ export class ProductAndServicesComponent {
19
+ constructor(data, toastr, paymentService, router, cookieService, dialog) {
20
+ this.data = data;
21
+ this.toastr = toastr;
22
+ this.paymentService = paymentService;
23
+ this.router = router;
24
+ this.cookieService = cookieService;
25
+ this.dialog = dialog;
26
+ this.isSubscriptionCancel = false;
27
+ this.isAnyOperationIsInprogress = false;
28
+ this.isFromRoute = false;
29
+ this.totalNoOfActiveUsers = 0;
30
+ this.totalNoOfPurchases = 0;
31
+ this.isShowRenewal = false;
32
+ this.productName = "Snovasys";
33
+ this.isTrailValid = true;
34
+ this.noOfDays = 0;
35
+ this.isLoading = true;
36
+ }
37
+ ngOnInit() {
38
+ if (this.cookieService.check(LocalStorageProperties.CompanyDetails) && this.cookieService.check(LocalStorageProperties.CompanyId)) {
39
+ this.company = JSON.parse(this.cookieService.get(LocalStorageProperties.CompanyDetails));
40
+ this.noOfDays = this.company != null && this.company != undefined ? this.company.trailDays : 0;
41
+ }
42
+ this.getActiveUsersCount();
43
+ this.getPurchasedLicensesCount();
44
+ this.getPaymentHistory();
45
+ }
46
+ cancelSubscription() {
47
+ this.paymentService.cancelSubscription().subscribe((responseData) => {
48
+ if (responseData.success == true) {
49
+ this.toastr.success("Your subscription has been cancelled successfully");
50
+ this.isSubscriptionCancel = true;
51
+ setTimeout(() => {
52
+ this.getPurchasedLicensesCount();
53
+ this.getPaymentHistory();
54
+ }, 2000);
55
+ }
56
+ else {
57
+ this.toastr.error(responseData.apiResponseMessages[0].message);
58
+ this.isSubscriptionCancel = false;
59
+ }
60
+ });
61
+ }
62
+ getActiveUsersCount() {
63
+ this.paymentService.getActiveUsersCount().subscribe((responseData) => {
64
+ if (responseData.success == true) {
65
+ this.totalNoOfActiveUsers = responseData.data;
66
+ }
67
+ });
68
+ }
69
+ getPurchasedLicensesCount() {
70
+ this.isLoading = true;
71
+ this.paymentService.getPurchasedLicensesCount().subscribe((responseData) => {
72
+ if (responseData.success == true) {
73
+ if (responseData.data) {
74
+ this.totalNoOfPurchases = responseData.data.purchasedLicensesCount;
75
+ this.isShowRenewal = responseData.data.isShowRenewal;
76
+ this.productName = responseData.data.purchaseType;
77
+ this.isTrailValid = false;
78
+ this.renewalDate = responseData.data.renewalDate;
79
+ this.isCancelled = responseData.data.isCancelled;
80
+ this.subscriptionType = responseData.data.subscriptionType;
81
+ }
82
+ else {
83
+ this.isTrailValid = true;
84
+ }
85
+ }
86
+ this.isLoading = false;
87
+ });
88
+ }
89
+ navigateToSubscription() {
90
+ this.router.navigate(["/shell/payments-plans"]);
91
+ }
92
+ purchaseMoreLicenses() {
93
+ const dialogRef = this.dialog.open(PurchaseMoreLicensesComponent, {
94
+ height: "45%",
95
+ width: "28%",
96
+ hasBackdrop: true,
97
+ direction: "ltr",
98
+ data: { noOfPurchases: this.totalNoOfPurchases, productName: this.productName, subscriptionType: this.subscriptionType },
99
+ disableClose: true
100
+ });
101
+ dialogRef.afterClosed().subscribe((result) => {
102
+ if (result != undefined && result.isReload == true) {
103
+ this.getPaymentHistory();
104
+ this.getPurchasedLicensesCount();
105
+ }
106
+ });
107
+ }
108
+ navigateToPlans() {
109
+ this.router.navigate(["/shell/payments-plans"]);
110
+ }
111
+ getPaymentHistory() {
112
+ this.paymentService.getPaymentHistory().subscribe((responseData) => {
113
+ if (responseData.success == true) {
114
+ this.paymentHistory = responseData.data;
115
+ }
116
+ else {
117
+ this.toastr.error(responseData.apiResponseMessages[0].message);
118
+ }
119
+ });
120
+ }
121
+ openpop(closeBookingPopup) {
122
+ closeBookingPopup.openPopover();
123
+ }
124
+ close() {
125
+ this.closeBookingPopup.forEach((p) => p.closePopover());
126
+ }
127
+ }
128
+ ProductAndServicesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.1", ngImport: i0, type: ProductAndServicesComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.ToastrService }, { token: i2.PaymentService }, { token: i3.Router }, { token: i4.CookieService }, { token: i5.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
129
+ ProductAndServicesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.1", type: ProductAndServicesComponent, selector: "app-product-services-component", viewQueries: [{ propertyName: "closeBookingPopup", predicate: ["closeBookingPopup"], descendants: true }], ngImport: i0, template: "<div fxFlex fxFlex=\"100\">\r\n <h4 class=\"ml-1 mt-05\">Products & Services</h4>\r\n <hr>\r\n</div>\r\n<mat-card>\r\n <div style=\"height:fit-content;border: 1px solid #eceaea;margin: 0;padding: 0px 10px 0px 10px; background: aliceblue;\"\r\n fxLayout=\"row\">\r\n <div fxFlex=\"80\" style=\"padding-top: 15px !important;\">\r\n <span> Customize and enhance your plan with additional features.\r\n </span>\r\n </div>\r\n <div fxFlex=\"20\" style=\"text-align: right;\">\r\n <button mat-raised-button color=\"primary\" type=\"submit\" class=\"ml-05 mt-05 mb-05\"\r\n (click)=\"openpop(closeBookingPopup)\" [satPopoverAnchorFor]=\"feedTimeSheet\"\r\n #closeBookingPopup=\"satPopoverAnchor\">\r\n Customize\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</mat-card>\r\n<mat-card *ngIf=\"!isLoading\">\r\n <div style=\"height: fit-content;border: 1px solid #eceaea;margin: 0;padding: 0px 10px 0px 10px;\" fxLayout=\"row\"\r\n *ngIf=\"isCancelled\">\r\n <div fxFlex=\"80\" style=\"padding-top: 15px !important;\">\r\n <span> We are sorry to see you go. Thank you for letting us to be a part of your growth so far. We'll miss\r\n you around here! If you decide you'd like to continue using this product, you can renew at any time by\r\n clicking on the subscribe button. We hope to see you around! Thank you.\r\n </span>\r\n </div>\r\n <div fxFlex=\"20\" style=\"text-align: right;\">\r\n <button mat-raised-button color=\"primary\" type=\"submit\" class=\"ml-05 mt-05\"\r\n (click)=\"navigateToSubscription()\">\r\n Subscribe\r\n </button>\r\n </div>\r\n </div>\r\n <div style=\"height: fit-content;border: 1px solid #eceaea;margin: 0;padding: 0px 10px 0px 10px; \" fxLayout=\"row\"\r\n *ngIf=\"isTrailValid\">\r\n <div fxFlex=\"80\" style=\"padding-top: 15px !important;\">\r\n <span> It looks like you\u2019ve already seen some great results with our Product. This is a great time to\r\n consider taking a look at our different plans, so that you can take full advantage of our Product. As\r\n your trail is going to expire in {{noOfDays}} days, please have a look at our different plans and\r\n subscribe to them.\r\n </span>\r\n </div>\r\n <div fxFlex=\"20\" style=\"text-align: right;\">\r\n <button mat-raised-button color=\"primary\" type=\"submit\" class=\"ml-05 mt-05\"\r\n (click)=\"navigateToSubscription()\">\r\n Subscribe\r\n </button>\r\n </div>\r\n </div>\r\n <div style=\"height: fit-content;border: 1px solid #eceaea;margin: 0;padding: 15px;\" fxLayout=\"row\"\r\n *ngIf=\"isTrailValid == false && !isCancelled\">\r\n\r\n <div fxFlex=\"70\">\r\n <label><b>{{productName}}</b></label><br>\r\n <span>{{totalNoOfActiveUsers}} of {{totalNoOfPurchases}} Users assigned</span><br>\r\n <span>Automatically renews on {{renewalDate | date}}. <a (click)=\"cancelSubscription()\"\r\n style=\"cursor: pointer; color: #337ab7 !important; text-decoration: none !important; \">Cancel\r\n subscription</a></span>\r\n </div>\r\n <div fxFlex=\"30\" style=\"text-align: right;\">\r\n <button mat-raised-button color=\"primary\" type=\"submit\" class=\"ml-05 mt-05\" *ngIf=\"!isCancelled\"\r\n (click)=\"purchaseMoreLicenses()\">\r\n Purchase more licenses\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"submit\" class=\"ml-05 mt-05\" *ngIf=\"!isCancelled\"\r\n (click)=\"navigateToPlans()\">\r\n Change Plan\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div style=\"height: fit-content;border: 1px solid #eceaea;margin: 0;padding: 0px 10px 0px 10px;\" fxLayout=\"row\"\r\n *ngFor=\"let history of paymentHistory\">\r\n <div fxFlex=\"70\" style=\"padding-top: 15px !important;\">\r\n <table style=\"width: 100%;\">\r\n <tr fxLayout=\"row\">\r\n <span style=\"font-weight: bold;\">Subscription term : {{history.startTime | date}} to\r\n {{history.endTime | date}}</span>\r\n </tr>\r\n <tr fxLayout=\"row\" *ngIf=\"!history.isUpdate\">\r\n <td fxFlex=\"80\"><span>{{history.purchaseType}} ({{history.noofpurchasedlicences}} Users Included)<br>\r\n Billed every {{history.subscriptionType}} </span>\r\n </td>\r\n <td fxFlex=\"20\"> \u00A3{{history.totalAmountPaid}}</td>\r\n </tr>\r\n <tr fxLayout=\"row\" *ngIf=\"history.isUpdate\">\r\n <td fxFlex=\"80\"><span>{{history.purchaseType}} ({{history.originalPurchases}} Users Included)\r\n </span>\r\n </td>\r\n <td fxFlex=\"20\">\r\n \u00A3{{history.totalAmountPaid / history.noofpurchasedlicences * history.originalPurchases }}</td>\r\n </tr>\r\n <tr fxLayout=\"row\" *ngIf=\"history.isUpdate\">\r\n <td fxFlex=\"80\"><span>{{history.purchaseType}} Additional Users\r\n ({{history.noofpurchasedlicences - history.originalPurchases}} Users)</span>\r\n </td>\r\n <td fxFlex=\"20\">\r\n \u00A3{{history.totalAmountPaid / history.noofpurchasedlicences * ( history.noofpurchasedlicences - history.originalPurchases)}}\r\n </td>\r\n </tr>\r\n <tr fxLayout=\"row\" *ngIf=\"history.isUpdate\">\r\n <td fxFlex=\"80\">{{history.purchaseType}} Total ({{history.noofpurchasedlicences}} Users)<br>\r\n <span style=\"font-size: 14px;\"> Billed every {{history.subscriptionType}}</span>\r\n </td>\r\n <td fxFlex=\"20\"> \u00A3{{history.totalAmountPaid}}</td>\r\n </tr>\r\n <tr *ngIf=\"history.isCancelled\">\r\n <span>Subscription was cancelled at {{history.cancelledDate | date}}</span>\r\n </tr>\r\n </table>\r\n </div>\r\n </div>\r\n\r\n</mat-card>\r\n<sat-popover #feedTimeSheet [autoFocus]=\"false\" hasBackdrop backdropClass=\"backdrop-color\" [restoreFocus]=\"false\"\r\n [interactiveClose]=\"false\" scrollStrategy=\"reposition\" verticalAlign=\"below\" horizontalAlign=\"before\">\r\n <mat-card class=\"filter-data p-0\" style=\"min-height: 150px;\">\r\n\r\n <div class=\"custom-dialog\">\r\n <div class=\"custom-close ml-lg-n4 mt-0 mt-lg-n4 ml-n3 \" mat-dialog-close (click)=\"close()\">\r\n <fa-icon icon=\"times\" class=\"project-dialog\"></fa-icon>\r\n </div>\r\n </div>\r\n <mat-card-title class=\"text-center\">\r\n <div class=\"card-title-text mat-bg-primary p-05 mb-1\">\r\n <h4 class=\"mt-05\"> Customize site</h4>\r\n </div>\r\n\r\n </mat-card-title>\r\n <mat-card-content class=\"card-content\">\r\n <div fxFlex=\"100\" class=\"mt-2\" style=\"text-align: center;\">\r\n If there is need to customize the site, then please call 0044-7944144944.\r\n </div>\r\n <!-- <div fxFlex=\"100\" class=\"mt-2\" style=\"text-align: center;\">\r\n <button mat-raised-button class=\"mr-1\" color=\"primary\" (click)=\"close()\" type=\"submit\">\r\n No\r\n </button>\r\n </div> -->\r\n </mat-card-content>\r\n </mat-card>\r\n</sat-popover>", components: [{ type: i6.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i7.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i8.SatPopover, selector: "sat-popover", inputs: ["backdropClass", "horizontalAlign", "xAlign", "verticalAlign", "yAlign", "forceAlignment", "lockAlignment", "autoFocus", "restoreFocus", "scrollStrategy", "hasBackdrop", "interactiveClose", "openTransition", "closeTransition"], outputs: ["opened", "closed", "afterOpen", "afterClose", "backdropClicked", "overlayKeydown"] }, { type: i9.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "listItem", "rotate", "fixedWidth", "transform"] }], directives: [{ type: i10.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i10.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.SatPopoverAnchor, selector: "[satPopoverAnchorFor]", inputs: ["satPopoverAnchorFor"], outputs: ["popoverOpened", "popoverClosed"], exportAs: ["satPopoverAnchor"] }, { type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i6.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i6.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }], pipes: { "date": i11.DatePipe } });
130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.1", ngImport: i0, type: ProductAndServicesComponent, decorators: [{
131
+ type: Component,
132
+ args: [{
133
+ selector: "app-product-services-component",
134
+ templateUrl: "./product-service.component.html"
135
+ }]
136
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
137
+ type: Inject,
138
+ args: [MAT_DIALOG_DATA]
139
+ }] }, { type: i1.ToastrService }, { type: i2.PaymentService }, { type: i3.Router }, { type: i4.CookieService }, { type: i5.MatDialog }]; }, propDecorators: { closeBookingPopup: [{
140
+ type: ViewChildren,
141
+ args: ["closeBookingPopup"]
142
+ }] } });
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1zZXJ2aWNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NoZWxsLW1vZHVsZS1jb21wb25lbnRzL3NoZWxsLWNvbXBvbmVudHMvc3JjL2xpYi9zaGVsbC1jb21wb25lbnRzL2NvbXBvbmVudHMvUGF5bWVudHMvcHJvZHVjdC1zZXJ2aWNlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NoZWxsLW1vZHVsZS1jb21wb25lbnRzL3NoZWxsLWNvbXBvbmVudHMvc3JjL2xpYi9zaGVsbC1jb21wb25lbnRzL2NvbXBvbmVudHMvUGF5bWVudHMvcHJvZHVjdC1zZXJ2aWNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFhLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQTJCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBTXBGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQ3ZHLE9BQU8sdURBQXVELENBQUM7QUFFL0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFPekUsTUFBTSxPQUFPLDJCQUEyQjtJQXNCdEMsWUFBNEMsSUFBUyxFQUMzQyxNQUFxQixFQUNuQixjQUE4QixFQUMvQixNQUFjLEVBQ2IsYUFBNEIsRUFDL0IsTUFBaUI7UUFMa0IsU0FBSSxHQUFKLElBQUksQ0FBSztRQUMzQyxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ25CLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUMvQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Isa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDL0IsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQXJCMUIseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBQ3RDLCtCQUEwQixHQUFZLEtBQUssQ0FBQztRQUM1QyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3Qix5QkFBb0IsR0FBUSxDQUFDLENBQUM7UUFDOUIsdUJBQWtCLEdBQVEsQ0FBQyxDQUFDO1FBQzVCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGdCQUFXLEdBQVcsVUFBVSxDQUFDO1FBQ2pDLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBQzdCLGFBQVEsR0FBUSxDQUFDLENBQUM7UUFLbEIsY0FBUyxHQUFZLElBQUksQ0FBQztJQVUxQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDakksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDekYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRztRQUNELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQWlCLEVBQUUsRUFBRTtZQUN2RSxJQUFJLFlBQVksQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO2dCQUN6RSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO2dCQUNqQyxVQUFVLENBQUMsR0FBRSxFQUFFO29CQUNiLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO29CQUNqQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDOUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBRVA7aUJBQ0k7Z0JBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMvRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO2FBQ25DO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFpQixFQUFFLEVBQUU7WUFDeEUsSUFBSSxZQUFZLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtnQkFDaEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7YUFDL0M7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx5QkFBeUI7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQWlCLEVBQUUsRUFBRTtZQUM5RSxJQUFJLFlBQVksQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFO2dCQUNoQyxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUU7b0JBQ3JCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDO29CQUNuRSxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO29CQUNyRCxJQUFJLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO29CQUNsRCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztvQkFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztvQkFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztvQkFDakQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7aUJBQzVEO3FCQUNJO29CQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2lCQUMxQjthQUNGO1lBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUU7WUFDaEUsTUFBTSxFQUFFLEtBQUs7WUFDYixLQUFLLEVBQUUsS0FBSztZQUNaLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLElBQUksRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3hILFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMzQyxJQUFHLE1BQU0sSUFBRyxTQUFTLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUM7Z0JBQy9DLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQzthQUNsQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELGVBQWU7UUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQWlCLEVBQUUsRUFBRTtZQUN0RSxJQUFJLFlBQVksQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUE7YUFDeEM7aUJBQ0k7Z0JBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ2hFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxDQUFDLGlCQUFpQjtRQUN2QixpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsS0FBSztRQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7O3dIQTdIWSwyQkFBMkIsa0JBc0JsQixlQUFlOzRHQXRCeEIsMkJBQTJCLGlMQ2pCeEMsNDNQQWdKYzsyRkQvSEQsMkJBQTJCO2tCQUx2QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQ0FBZ0M7b0JBQzFDLFdBQVcsRUFBRSxrQ0FBa0M7aUJBQ2hEOzswQkF3QmMsTUFBTTsyQkFBQyxlQUFlOzhLQURBLGlCQUFpQjtzQkFBbkQsWUFBWTt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5qZWN0LCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IE1hdE9wdGlvbiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XHJcbmltcG9ydCB7IE1hdFRhYkNoYW5nZUV2ZW50IH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3RhYnNcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlUHJvcGVydGllcyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbGRlcGVuZGVuY2llcy9jb25zdGFudHMvbG9jYWxzdG9yYWdlLXByb3BlcnRpZXMnO1xyXG5pbXBvcnQgJy4uLy4uLy4uL2dsb2JhbGRlcGVuZGVuY2llcy9oZWxwZXJzL2ZvbnRhd2Vzb21lLWljb25zJztcclxuaW1wb3J0IHsgUGF5bWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYXltZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQdXJjaGFzZU1vcmVMaWNlbnNlc0NvbXBvbmVudCB9IGZyb20gJy4vcHVyY2hhc2UtbW9yZS1saWNlbnNlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtcHJvZHVjdC1zZXJ2aWNlcy1jb21wb25lbnRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3Byb2R1Y3Qtc2VydmljZS5jb21wb25lbnQuaHRtbFwiXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvZHVjdEFuZFNlcnZpY2VzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblxyXG4gIHNlbGVjdGVkVGFiOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRUYWJJbmRleDogbnVtYmVyO1xyXG4gIHBheW1lbnREZXRhaWxzOiBhbnk7XHJcbiAgaXNTdWJzY3JpcHRpb25DYW5jZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0FueU9wZXJhdGlvbklzSW5wcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzRnJvbVJvdXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdG90YWxOb09mQWN0aXZlVXNlcnM6IGFueSA9IDA7XHJcbiAgdG90YWxOb09mUHVyY2hhc2VzOiBhbnkgPSAwO1xyXG4gIGlzU2hvd1JlbmV3YWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm9kdWN0TmFtZTogc3RyaW5nID0gXCJTbm92YXN5c1wiO1xyXG4gIGlzVHJhaWxWYWxpZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgbm9PZkRheXM6IGFueSA9IDA7XHJcbiAgY29tcGFueTogYW55O1xyXG4gIHJlbmV3YWxEYXRlOiBhbnk7XHJcbiAgaXNDYW5jZWxsZWQ6IGJvb2xlYW47XHJcbiAgc3Vic2NyaXB0aW9uVHlwZTogYW55O1xyXG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgcGF5bWVudEhpc3RvcnkgOiBhbnk7XHJcbiAgQFZpZXdDaGlsZHJlbihcImNsb3NlQm9va2luZ1BvcHVwXCIpIGNsb3NlQm9va2luZ1BvcHVwO1xyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxyXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBwYXltZW50U2VydmljZTogUGF5bWVudFNlcnZpY2VcclxuICAgICwgcHVibGljIHJvdXRlcjogUm91dGVyXHJcbiAgICAsIHByaXZhdGUgY29va2llU2VydmljZTogQ29va2llU2VydmljZSxcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZywpIHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmNvb2tpZVNlcnZpY2UuY2hlY2soTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55RGV0YWlscykgJiYgdGhpcy5jb29raWVTZXJ2aWNlLmNoZWNrKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueUlkKSkge1xyXG4gICAgICB0aGlzLmNvbXBhbnkgPSBKU09OLnBhcnNlKHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55RGV0YWlscykpO1xyXG4gICAgICB0aGlzLm5vT2ZEYXlzID0gdGhpcy5jb21wYW55ICE9IG51bGwgJiYgdGhpcy5jb21wYW55ICE9IHVuZGVmaW5lZCA/IHRoaXMuY29tcGFueS50cmFpbERheXMgOiAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRBY3RpdmVVc2Vyc0NvdW50KCk7XHJcbiAgICB0aGlzLmdldFB1cmNoYXNlZExpY2Vuc2VzQ291bnQoKTtcclxuICAgIHRoaXMuZ2V0UGF5bWVudEhpc3RvcnkoKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbFN1YnNjcmlwdGlvbigpIHtcclxuICAgIHRoaXMucGF5bWVudFNlcnZpY2UuY2FuY2VsU3Vic2NyaXB0aW9uKCkuc3Vic2NyaWJlKChyZXNwb25zZURhdGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2VEYXRhLnN1Y2Nlc3MgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoXCJZb3VyIHN1YnNjcmlwdGlvbiBoYXMgYmVlbiBjYW5jZWxsZWQgc3VjY2Vzc2Z1bGx5XCIpO1xyXG4gICAgICAgIHRoaXMuaXNTdWJzY3JpcHRpb25DYW5jZWwgPSB0cnVlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCk9PntcclxuICAgICAgICAgIHRoaXMuZ2V0UHVyY2hhc2VkTGljZW5zZXNDb3VudCgpO1xyXG4gICAgICAgICAgdGhpcy5nZXRQYXltZW50SGlzdG9yeSgpO1xyXG4gICAgIH0sIDIwMDApO1xyXG4gICAgICAgXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2VEYXRhLmFwaVJlc3BvbnNlTWVzc2FnZXNbMF0ubWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5pc1N1YnNjcmlwdGlvbkNhbmNlbCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0QWN0aXZlVXNlcnNDb3VudCgpIHtcclxuICAgIHRoaXMucGF5bWVudFNlcnZpY2UuZ2V0QWN0aXZlVXNlcnNDb3VudCgpLnN1YnNjcmliZSgocmVzcG9uc2VEYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlRGF0YS5zdWNjZXNzID09IHRydWUpIHtcclxuICAgICAgICB0aGlzLnRvdGFsTm9PZkFjdGl2ZVVzZXJzID0gcmVzcG9uc2VEYXRhLmRhdGE7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHVyY2hhc2VkTGljZW5zZXNDb3VudCgpIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucGF5bWVudFNlcnZpY2UuZ2V0UHVyY2hhc2VkTGljZW5zZXNDb3VudCgpLnN1YnNjcmliZSgocmVzcG9uc2VEYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlRGF0YS5zdWNjZXNzID09IHRydWUpIHtcclxuICAgICAgICBpZiAocmVzcG9uc2VEYXRhLmRhdGEpIHtcclxuICAgICAgICAgIHRoaXMudG90YWxOb09mUHVyY2hhc2VzID0gcmVzcG9uc2VEYXRhLmRhdGEucHVyY2hhc2VkTGljZW5zZXNDb3VudDtcclxuICAgICAgICAgIHRoaXMuaXNTaG93UmVuZXdhbCA9IHJlc3BvbnNlRGF0YS5kYXRhLmlzU2hvd1JlbmV3YWw7XHJcbiAgICAgICAgICB0aGlzLnByb2R1Y3ROYW1lID0gcmVzcG9uc2VEYXRhLmRhdGEucHVyY2hhc2VUeXBlO1xyXG4gICAgICAgICAgdGhpcy5pc1RyYWlsVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucmVuZXdhbERhdGUgPSByZXNwb25zZURhdGEuZGF0YS5yZW5ld2FsRGF0ZTtcclxuICAgICAgICAgIHRoaXMuaXNDYW5jZWxsZWQgPSByZXNwb25zZURhdGEuZGF0YS5pc0NhbmNlbGxlZDtcclxuICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uVHlwZSA9IHJlc3BvbnNlRGF0YS5kYXRhLnN1YnNjcmlwdGlvblR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5pc1RyYWlsVmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuYXZpZ2F0ZVRvU3Vic2NyaXB0aW9uKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL3NoZWxsL3BheW1lbnRzLXBsYW5zXCJdKTtcclxuICB9XHJcblxyXG4gIHB1cmNoYXNlTW9yZUxpY2Vuc2VzKCkge1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihQdXJjaGFzZU1vcmVMaWNlbnNlc0NvbXBvbmVudCwge1xyXG4gICAgICBoZWlnaHQ6IFwiNDUlXCIsXHJcbiAgICAgIHdpZHRoOiBcIjI4JVwiLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgZGlyZWN0aW9uOiBcImx0clwiLFxyXG4gICAgICBkYXRhOiB7IG5vT2ZQdXJjaGFzZXM6IHRoaXMudG90YWxOb09mUHVyY2hhc2VzLCBwcm9kdWN0TmFtZTogdGhpcy5wcm9kdWN0TmFtZSwgc3Vic2NyaXB0aW9uVHlwZTogdGhpcy5zdWJzY3JpcHRpb25UeXBlIH0sXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZihyZXN1bHQgIT11bmRlZmluZWQgJiYgcmVzdWx0LmlzUmVsb2FkID09IHRydWUpe1xyXG4gICAgICAgIHRoaXMuZ2V0UGF5bWVudEhpc3RvcnkoKTtcclxuICAgICAgICB0aGlzLmdldFB1cmNoYXNlZExpY2Vuc2VzQ291bnQoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG5hdmlnYXRlVG9QbGFucygpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9zaGVsbC9wYXltZW50cy1wbGFuc1wiXSk7XHJcbiAgfVxyXG4gIGdldFBheW1lbnRIaXN0b3J5KCl7XHJcbiAgICB0aGlzLnBheW1lbnRTZXJ2aWNlLmdldFBheW1lbnRIaXN0b3J5KCkuc3Vic2NyaWJlKChyZXNwb25zZURhdGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2VEYXRhLnN1Y2Nlc3MgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMucGF5bWVudEhpc3RvcnkgPSByZXNwb25zZURhdGEuZGF0YVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlRGF0YS5hcGlSZXNwb25zZU1lc3NhZ2VzWzBdLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgb3BlbnBvcChjbG9zZUJvb2tpbmdQb3B1cCkge1xyXG4gICAgY2xvc2VCb29raW5nUG9wdXAub3BlblBvcG92ZXIoKTtcclxuICB9XHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLmNsb3NlQm9va2luZ1BvcHVwLmZvckVhY2goKHApID0+IHAuY2xvc2VQb3BvdmVyKCkpO1xyXG59XHJcblxyXG59XHJcbiIsIjxkaXYgZnhGbGV4IGZ4RmxleD1cIjEwMFwiPlxyXG4gICAgPGg0IGNsYXNzPVwibWwtMSBtdC0wNVwiPlByb2R1Y3RzICYgU2VydmljZXM8L2g0PlxyXG4gICAgPGhyPlxyXG48L2Rpdj5cclxuPG1hdC1jYXJkPlxyXG4gICAgPGRpdiBzdHlsZT1cImhlaWdodDpmaXQtY29udGVudDtib3JkZXI6IDFweCBzb2xpZCAjZWNlYWVhO21hcmdpbjogMDtwYWRkaW5nOiAwcHggMTBweCAwcHggMTBweDsgYmFja2dyb3VuZDogYWxpY2VibHVlO1wiXHJcbiAgICAgICAgZnhMYXlvdXQ9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjgwXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMTVweCAhaW1wb3J0YW50O1wiPlxyXG4gICAgICAgICAgICA8c3Bhbj4gQ3VzdG9taXplIGFuZCBlbmhhbmNlIHlvdXIgcGxhbiB3aXRoIGFkZGl0aW9uYWwgZmVhdHVyZXMuXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjIwXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodDtcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJtbC0wNSBtdC0wNSBtYi0wNVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbnBvcChjbG9zZUJvb2tpbmdQb3B1cClcIiBbc2F0UG9wb3ZlckFuY2hvckZvcl09XCJmZWVkVGltZVNoZWV0XCJcclxuICAgICAgICAgICAgICAgICNjbG9zZUJvb2tpbmdQb3B1cD1cInNhdFBvcG92ZXJBbmNob3JcIj5cclxuICAgICAgICAgICAgICAgIEN1c3RvbWl6ZVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9tYXQtY2FyZD5cclxuPG1hdC1jYXJkICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxyXG4gICAgPGRpdiBzdHlsZT1cImhlaWdodDogZml0LWNvbnRlbnQ7Ym9yZGVyOiAxcHggc29saWQgI2VjZWFlYTttYXJnaW46IDA7cGFkZGluZzogMHB4IDEwcHggMHB4IDEwcHg7XCIgZnhMYXlvdXQ9XCJyb3dcIlxyXG4gICAgICAgICpuZ0lmPVwiaXNDYW5jZWxsZWRcIj5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjgwXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMTVweCAhaW1wb3J0YW50O1wiPlxyXG4gICAgICAgICAgICA8c3Bhbj4gV2UgYXJlIHNvcnJ5IHRvIHNlZSB5b3UgZ28uIFRoYW5rIHlvdSBmb3IgbGV0dGluZyB1cyB0byBiZSBhIHBhcnQgb2YgeW91ciBncm93dGggc28gZmFyLiBXZSdsbCBtaXNzXHJcbiAgICAgICAgICAgICAgICB5b3UgYXJvdW5kIGhlcmUhIElmIHlvdSBkZWNpZGUgeW91J2QgbGlrZSB0byBjb250aW51ZSB1c2luZyB0aGlzIHByb2R1Y3QsIHlvdSBjYW4gcmVuZXcgYXQgYW55IHRpbWUgYnlcclxuICAgICAgICAgICAgICAgIGNsaWNraW5nIG9uIHRoZSBzdWJzY3JpYmUgYnV0dG9uLiBXZSBob3BlIHRvIHNlZSB5b3UgYXJvdW5kISBUaGFuayB5b3UuXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjIwXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodDtcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJtbC0wNSBtdC0wNVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVUb1N1YnNjcmlwdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICBTdWJzY3JpYmVcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IGZpdC1jb250ZW50O2JvcmRlcjogMXB4IHNvbGlkICNlY2VhZWE7bWFyZ2luOiAwO3BhZGRpbmc6IDBweCAxMHB4IDBweCAxMHB4OyBcIiBmeExheW91dD1cInJvd1wiXHJcbiAgICAgICAgKm5nSWY9XCJpc1RyYWlsVmFsaWRcIj5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjgwXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMTVweCAhaW1wb3J0YW50O1wiPlxyXG4gICAgICAgICAgICA8c3Bhbj4gSXQgbG9va3MgbGlrZSB5b3XigJl2ZSBhbHJlYWR5IHNlZW4gc29tZSBncmVhdCByZXN1bHRzIHdpdGggb3VyIFByb2R1Y3QuIFRoaXMgaXMgYSBncmVhdCB0aW1lIHRvXHJcbiAgICAgICAgICAgICAgICBjb25zaWRlciB0YWtpbmcgYSBsb29rIGF0IG91ciBkaWZmZXJlbnQgcGxhbnMsIHNvIHRoYXQgeW91IGNhbiB0YWtlIGZ1bGwgYWR2YW50YWdlIG9mIG91ciBQcm9kdWN0LiBBc1xyXG4gICAgICAgICAgICAgICAgeW91ciB0cmFpbCBpcyBnb2luZyB0byBleHBpcmUgaW4ge3tub09mRGF5c319IGRheXMsIHBsZWFzZSBoYXZlIGEgbG9vayBhdCBvdXIgZGlmZmVyZW50IHBsYW5zIGFuZFxyXG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlIHRvIHRoZW0uXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjIwXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodDtcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJtbC0wNSBtdC0wNVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVUb1N1YnNjcmlwdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICBTdWJzY3JpYmVcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IGZpdC1jb250ZW50O2JvcmRlcjogMXB4IHNvbGlkICNlY2VhZWE7bWFyZ2luOiAwO3BhZGRpbmc6IDE1cHg7XCIgZnhMYXlvdXQ9XCJyb3dcIlxyXG4gICAgICAgICpuZ0lmPVwiaXNUcmFpbFZhbGlkID09IGZhbHNlICYmICFpc0NhbmNlbGxlZFwiPlxyXG5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjcwXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbD48Yj57e3Byb2R1Y3ROYW1lfX08L2I+PC9sYWJlbD48YnI+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7dG90YWxOb09mQWN0aXZlVXNlcnN9fSBvZiB7e3RvdGFsTm9PZlB1cmNoYXNlc319IFVzZXJzIGFzc2lnbmVkPC9zcGFuPjxicj5cclxuICAgICAgICAgICAgPHNwYW4+QXV0b21hdGljYWxseSByZW5ld3Mgb24ge3tyZW5ld2FsRGF0ZSB8IGRhdGV9fS4gPGEgKGNsaWNrKT1cImNhbmNlbFN1YnNjcmlwdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgY29sb3I6ICMzMzdhYjcgIWltcG9ydGFudDsgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7IFwiPkNhbmNlbFxyXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbjwvYT48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIzMFwiIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHQ7XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwibWwtMDUgbXQtMDVcIiAqbmdJZj1cIiFpc0NhbmNlbGxlZFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicHVyY2hhc2VNb3JlTGljZW5zZXMoKVwiPlxyXG4gICAgICAgICAgICAgICAgUHVyY2hhc2UgbW9yZSBsaWNlbnNlc1xyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJtbC0wNSBtdC0wNVwiICpuZ0lmPVwiIWlzQ2FuY2VsbGVkXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvUGxhbnMoKVwiPlxyXG4gICAgICAgICAgICAgICAgQ2hhbmdlIFBsYW5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiBmaXQtY29udGVudDtib3JkZXI6IDFweCBzb2xpZCAjZWNlYWVhO21hcmdpbjogMDtwYWRkaW5nOiAwcHggMTBweCAwcHggMTBweDtcIiBmeExheW91dD1cInJvd1wiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGhpc3Rvcnkgb2YgcGF5bWVudEhpc3RvcnlcIj5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjcwXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMTVweCAhaW1wb3J0YW50O1wiPlxyXG4gICAgICAgICAgICA8dGFibGUgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgIDx0ciBmeExheW91dD1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7XCI+U3Vic2NyaXB0aW9uIHRlcm0gOiB7e2hpc3Rvcnkuc3RhcnRUaW1lIHwgZGF0ZX19IHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7aGlzdG9yeS5lbmRUaW1lIHwgZGF0ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDx0ciBmeExheW91dD1cInJvd1wiICpuZ0lmPVwiIWhpc3RvcnkuaXNVcGRhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgZnhGbGV4PVwiODBcIj48c3Bhbj57e2hpc3RvcnkucHVyY2hhc2VUeXBlfX0gKHt7aGlzdG9yeS5ub29mcHVyY2hhc2VkbGljZW5jZXN9fSBVc2VycyBJbmNsdWRlZCk8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWxsZWQgZXZlcnkge3toaXN0b3J5LnN1YnNjcmlwdGlvblR5cGV9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgZnhGbGV4PVwiMjBcIj4gwqN7e2hpc3RvcnkudG90YWxBbW91bnRQYWlkfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDx0ciBmeExheW91dD1cInJvd1wiICpuZ0lmPVwiaGlzdG9yeS5pc1VwZGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBmeEZsZXg9XCI4MFwiPjxzcGFuPnt7aGlzdG9yeS5wdXJjaGFzZVR5cGV9fSAoe3toaXN0b3J5Lm9yaWdpbmFsUHVyY2hhc2VzfX0gVXNlcnMgSW5jbHVkZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBmeEZsZXg9XCIyMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDCo3t7aGlzdG9yeS50b3RhbEFtb3VudFBhaWQgLyBoaXN0b3J5Lm5vb2ZwdXJjaGFzZWRsaWNlbmNlcyAqIGhpc3Rvcnkub3JpZ2luYWxQdXJjaGFzZXMgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDx0ciBmeExheW91dD1cInJvd1wiICpuZ0lmPVwiaGlzdG9yeS5pc1VwZGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBmeEZsZXg9XCI4MFwiPjxzcGFuPnt7aGlzdG9yeS5wdXJjaGFzZVR5cGV9fSBBZGRpdGlvbmFsIFVzZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoe3toaXN0b3J5Lm5vb2ZwdXJjaGFzZWRsaWNlbmNlcyAtIGhpc3Rvcnkub3JpZ2luYWxQdXJjaGFzZXN9fSBVc2Vycyk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgZnhGbGV4PVwiMjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgwqN7e2hpc3RvcnkudG90YWxBbW91bnRQYWlkIC8gaGlzdG9yeS5ub29mcHVyY2hhc2VkbGljZW5jZXMgKiAoIGhpc3Rvcnkubm9vZnB1cmNoYXNlZGxpY2VuY2VzIC0gaGlzdG9yeS5vcmlnaW5hbFB1cmNoYXNlcyl9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPHRyIGZ4TGF5b3V0PVwicm93XCIgKm5nSWY9XCJoaXN0b3J5LmlzVXBkYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIGZ4RmxleD1cIjgwXCI+e3toaXN0b3J5LnB1cmNoYXNlVHlwZX19IFRvdGFsICh7e2hpc3Rvcnkubm9vZnB1cmNoYXNlZGxpY2VuY2VzfX0gVXNlcnMpPGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDtcIj4gQmlsbGVkIGV2ZXJ5IHt7aGlzdG9yeS5zdWJzY3JpcHRpb25UeXBlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgZnhGbGV4PVwiMjBcIj4gwqN7e2hpc3RvcnkudG90YWxBbW91bnRQYWlkfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cImhpc3RvcnkuaXNDYW5jZWxsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5TdWJzY3JpcHRpb24gd2FzIGNhbmNlbGxlZCBhdCB7e2hpc3RvcnkuY2FuY2VsbGVkRGF0ZSB8IGRhdGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvbWF0LWNhcmQ+XHJcbjxzYXQtcG9wb3ZlciAjZmVlZFRpbWVTaGVldCBbYXV0b0ZvY3VzXT1cImZhbHNlXCIgaGFzQmFja2Ryb3AgYmFja2Ryb3BDbGFzcz1cImJhY2tkcm9wLWNvbG9yXCIgW3Jlc3RvcmVGb2N1c109XCJmYWxzZVwiXHJcbiAgICBbaW50ZXJhY3RpdmVDbG9zZV09XCJmYWxzZVwiIHNjcm9sbFN0cmF0ZWd5PVwicmVwb3NpdGlvblwiIHZlcnRpY2FsQWxpZ249XCJiZWxvd1wiIGhvcml6b250YWxBbGlnbj1cImJlZm9yZVwiPlxyXG4gICAgPG1hdC1jYXJkIGNsYXNzPVwiZmlsdGVyLWRhdGEgcC0wXCIgc3R5bGU9XCJtaW4taGVpZ2h0OiAxNTBweDtcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1kaWFsb2dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1jbG9zZSBtbC1sZy1uNCBtdC0wIG10LWxnLW40IG1sLW4zIFwiIG1hdC1kaWFsb2ctY2xvc2UgKGNsaWNrKT1cImNsb3NlKClcIj5cclxuICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJ0aW1lc1wiIGNsYXNzPVwicHJvamVjdC1kaWFsb2dcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtY2FyZC10aXRsZSBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlLXRleHQgbWF0LWJnLXByaW1hcnkgcC0wNSBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtdC0wNVwiPiBDdXN0b21pemUgc2l0ZTwvaDQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwiY2FyZC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiMTAwXCIgY2xhc3M9XCJtdC0yXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICBJZiB0aGVyZSBpcyBuZWVkIHRvIGN1c3RvbWl6ZSB0aGUgc2l0ZSwgdGhlbiBwbGVhc2UgY2FsbCAwMDQ0LTc5NDQxNDQ5NDQuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgZnhGbGV4PVwiMTAwXCIgY2xhc3M9XCJtdC0yXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwibXItMVwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJjbG9zZSgpXCIgdHlwZT1cInN1Ym1pdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIE5vXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgIDwvbWF0LWNhcmQ+XHJcbjwvc2F0LXBvcG92ZXI+Il19
@@ -0,0 +1,152 @@
1
+ import { Component, Inject } from "@angular/core";
2
+ import { MAT_DIALOG_DATA } from "@angular/material/dialog";
3
+ import { SPINNER } from 'ngx-ui-loader';
4
+ import { LocalStorageProperties } from '../../../globaldependencies/constants/localstorage-properties';
5
+ import '../../../globaldependencies/helpers/fontawesome-icons';
6
+ import { CompanyPaymentUpsertModel } from '../../models/company-payment-model';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/material/dialog";
9
+ import * as i2 from "ngx-toastr";
10
+ import * as i3 from "@angular/router";
11
+ import * as i4 from "../../services/payment.service";
12
+ import * as i5 from "@fortawesome/angular-fontawesome";
13
+ import * as i6 from "@angular/material/form-field";
14
+ import * as i7 from "@angular/material/select";
15
+ import * as i8 from "@angular/material/core";
16
+ import * as i9 from "@angular/material/button";
17
+ import * as i10 from "@angular/material/card";
18
+ import * as i11 from "@angular/flex-layout/flex";
19
+ import * as i12 from "@angular/material/input";
20
+ import * as i13 from "@angular/forms";
21
+ import * as i14 from "@angular/common";
22
+ export class PurchaseMoreLicensesComponent {
23
+ constructor(data, dialogRef, toastr, router, paymentService) {
24
+ this.data = data;
25
+ this.dialogRef = dialogRef;
26
+ this.toastr = toastr;
27
+ this.router = router;
28
+ this.paymentService = paymentService;
29
+ this.handler = null;
30
+ this.totalAmount = 0;
31
+ this.isAnyOperationIsInprogress = false;
32
+ this.isFromRoute = false;
33
+ this.activeUsers = 0;
34
+ this.companyMainLogo = "https://bviewstorage.blob.core.windows.net/6671cd0d-5b91-4044-bdcc-e1f201c086c5/projects/d72d1c2f-dfbe-4d48-9605-cd3b7e38ed17/Main-Logo-9277cc4b-0c1f-4093-a917-1a65e874b3c9.png";
35
+ this.isDisable = false;
36
+ this.isNewSub = false;
37
+ this.spinnerType = SPINNER.pulse;
38
+ if (data != undefined && data != null) {
39
+ this.selectedPlanName = data.productName;
40
+ this.subscriptionType = this.planInterval = data.subscriptionType;
41
+ this.activeUsers = this.noOfPurchases = data.noOfPurchases;
42
+ this.isNewSub = data.isSubscriberNew;
43
+ this.costCalculation();
44
+ }
45
+ }
46
+ ngOnInit() {
47
+ }
48
+ close() {
49
+ this.dialogRef.close({ isReload: false });
50
+ }
51
+ costCalculation() {
52
+ var purchases = Number(this.noOfPurchases);
53
+ if (!isNaN(purchases) && this.activeUsers > purchases) {
54
+ this.toastr.warning("No. of purchases should be more than previous one's");
55
+ this.isDisable = true;
56
+ return;
57
+ }
58
+ this.isDisable = false;
59
+ if (this.noOfPurchases != undefined && this.noOfPurchases != null && this.noOfPurchases != ''
60
+ && this.planInterval != undefined && this.planInterval != null && this.planInterval != '' && !isNaN(purchases)) {
61
+ var perUser = 0;
62
+ if (this.selectedPlanName == 'Standard')
63
+ perUser = 3;
64
+ else if (this.selectedPlanName == 'Premium')
65
+ perUser = 5;
66
+ else if (this.selectedPlanName == 'Enterprise')
67
+ perUser = 10;
68
+ else
69
+ perUser = 0;
70
+ var normalTotal = perUser * Number(this.noOfPurchases);
71
+ if (this.planInterval == 'month') {
72
+ this.totalAmount = normalTotal.toFixed(2);
73
+ }
74
+ else if (this.planInterval == 'year') {
75
+ this.totalAmount = ((normalTotal - (normalTotal * 20 / 100)) * 12).toFixed(2);
76
+ }
77
+ else
78
+ this.totalAmount = 0;
79
+ }
80
+ }
81
+ pay() {
82
+ let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
83
+ var service = this.paymentService;
84
+ var purchases = this.noOfPurchases;
85
+ var totalAmt = this.totalAmount;
86
+ var plan = this.selectedPlanName;
87
+ var planInterval = this.planInterval;
88
+ var tosters = this.toastr;
89
+ var router = this.router;
90
+ var dailogRef = this.dialogRef;
91
+ this.isSucessPay = true;
92
+ var isSucessPay = this.isSucessPay;
93
+ var handler = window.StripeCheckout.configure({
94
+ key: environment.stripeAPIKey,
95
+ image: 'https://bviewstorage.blob.core.windows.net/4afeb444-e826-4f95-ac41-2175e36a0c16/hrm/0b2921a9-e930-4013-9047-670b5352f308/snovasys-72112b03-95dc-432c-aeef-c89fa13eae32.png',
96
+ locale: 'auto',
97
+ token: function (token) {
98
+ if (token) {
99
+ var companyPaymentUpsertModel = new CompanyPaymentUpsertModel();
100
+ companyPaymentUpsertModel.CardHolderName = token.card.name;
101
+ companyPaymentUpsertModel.CardHolderBillingAddress = token.card.name;
102
+ companyPaymentUpsertModel.PlanName = plan;
103
+ companyPaymentUpsertModel.SubscriptionType = planInterval;
104
+ companyPaymentUpsertModel.TotalAmount = totalAmt;
105
+ companyPaymentUpsertModel.NoOfPurchases = purchases;
106
+ companyPaymentUpsertModel.Email = token.email;
107
+ companyPaymentUpsertModel.StripeTokenId = token.id;
108
+ companyPaymentUpsertModel.AddressOptions = token.card;
109
+ service.upsertCompanyPayments(companyPaymentUpsertModel).subscribe((responseData) => {
110
+ if (responseData.success == true) {
111
+ tosters.success("Your subscription has been successfully completed");
112
+ isSucessPay = false;
113
+ router.navigate(['/shell/Accounts']);
114
+ dailogRef.close({ isReload: true });
115
+ }
116
+ else {
117
+ tosters.error(responseData.apiResponseMessages[0].message);
118
+ isSucessPay = false;
119
+ }
120
+ });
121
+ }
122
+ }
123
+ });
124
+ this.isSucessPay = isSucessPay;
125
+ var description = this.planInterval == 'month' ? 'Monthly subscription' : 'Annual subscription';
126
+ handler.open({
127
+ name: this.selectedPlanName,
128
+ description: description,
129
+ amount: this.totalAmount * 100,
130
+ currency: 'GBP',
131
+ billingAddress: "true",
132
+ shippingAddress: "false",
133
+ closed: () => { this.close2(); }
134
+ });
135
+ }
136
+ close2() {
137
+ this.isSucessPay = !this.isSucessPay;
138
+ }
139
+ }
140
+ PurchaseMoreLicensesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.1", ngImport: i0, type: PurchaseMoreLicensesComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i2.ToastrService }, { token: i3.Router }, { token: i4.PaymentService }], target: i0.ɵɵFactoryTarget.Component });
141
+ PurchaseMoreLicensesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.1", type: PurchaseMoreLicensesComponent, selector: "app-purchase-licenses", ngImport: i0, template: "<div class=\"custom-dialog\">\r\n <div class=\"custom-close\" mat-dialog-close (click)=\"close()\">\r\n <fa-icon icon=\"times\" class=\"project-dialog\"></fa-icon>\r\n </div>\r\n</div>\r\n\r\n<div mat-dialog-content class=\"project-dialogContent\" id=\"style-1\">\r\n\r\n <mat-card-title>\r\n <div class=\"text-center pb-1\">Subscription</div>\r\n </mat-card-title>\r\n\r\n <div class=\"login-page\" fxLayout=\"column\">\r\n <div fxFlex=\"50\" fxFlex.xs=\"100\"><label>Selected plan : {{selectedPlanName}} </label></div>\r\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"10px\" fxLayoutGap.xs=\"0px\">\r\n <div fxFlex=\"100\" fxFlex.xs=\"100\">\r\n <mat-form-field class=\"full-width\">\r\n <input matInput [(ngModel)]=\"noOfPurchases\" placeholder=\"No.of purchases\" (change)=\"costCalculation()\"\r\n required>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"10px\" fxLayoutGap.xs=\"0px\">\r\n <div fxFlex=\"100\" fxFlex.xs=\"100\">\r\n <mat-form-field class=\"full-width\" *ngIf=\"!isNewSub\">\r\n <mat-select placeholder=\"Select a subscription type\" [(ngModel)]=\"planInterval\"\r\n [disabled]=\"subscriptionType =='year'\" (selectionChange)=\"costCalculation()\" required>\r\n <mat-option value=\"month\">Monthly</mat-option>\r\n <mat-option value=\"year\">Annually</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field class=\"full-width\" *ngIf=\"isNewSub\">\r\n <mat-select placeholder=\"Select a subscription type\" [(ngModel)]=\"planInterval\"\r\n (selectionChange)=\"costCalculation()\" required>\r\n <mat-option value=\"month\">Monthly</mat-option>\r\n <mat-option value=\"year\">Annually</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-1\">\r\n <button class=\"full-width mb-1 btn btn-block\" mat-raised-button color=\"primary\" (click)=\"pay()\"\r\n [disabled]=\"totalAmount == 0 || isDisable ||isSucessPay\"> Pay ${{totalAmount}}\r\n <i class=\"fa fa-spin fa-spinner\" *ngIf=\"isSucessPay\"></i>\r\n </button>\r\n </div>\r\n <!-- <ngx-ui-loader fgsSize=\"180\" [fgsType]=\"spinnerType\" color=\"primary\"></ngx-ui-loader> -->\r\n</div>", components: [{ type: i5.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "listItem", "rotate", "fixedWidth", "transform"] }, { type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i9.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i10.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i11.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i11.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i11.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i12.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i13.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i13.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i13.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.1", ngImport: i0, type: PurchaseMoreLicensesComponent, decorators: [{
143
+ type: Component,
144
+ args: [{
145
+ selector: "app-purchase-licenses",
146
+ templateUrl: "./purchase-more-licenses.html"
147
+ }]
148
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
149
+ type: Inject,
150
+ args: [MAT_DIALOG_DATA]
151
+ }] }, { type: i1.MatDialogRef }, { type: i2.ToastrService }, { type: i3.Router }, { type: i4.PaymentService }]; } });
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyY2hhc2UtbW9yZS1saWNlbnNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NoZWxsLW1vZHVsZS1jb21wb25lbnRzL3NoZWxsLWNvbXBvbmVudHMvc3JjL2xpYi9zaGVsbC1jb21wb25lbnRzL2NvbXBvbmVudHMvUGF5bWVudHMvcHVyY2hhc2UtbW9yZS1saWNlbnNlcy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NoZWxsLW1vZHVsZS1jb21wb25lbnRzL3NoZWxsLWNvbXBvbmVudHMvc3JjL2xpYi9zaGVsbC1jb21wb25lbnRzL2NvbXBvbmVudHMvUGF5bWVudHMvcHVyY2hhc2UtbW9yZS1saWNlbnNlcy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHekUsT0FBTyxFQUFzQixPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDdkcsT0FBTyx1REFBdUQsQ0FBQztBQUMvRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVEvRSxNQUFNLE9BQU8sNkJBQTZCO0lBZ0J4QyxZQUE0QyxJQUFTLEVBQzFDLFNBQXNELEVBQ3ZELE1BQXFCLEVBQ3BCLE1BQWMsRUFDYixjQUE4QjtRQUpFLFNBQUksR0FBSixJQUFJLENBQUs7UUFDMUMsY0FBUyxHQUFULFNBQVMsQ0FBNkM7UUFDdkQsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNwQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2IsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBbEIxQyxZQUFPLEdBQVEsSUFBSSxDQUFDO1FBQ3BCLGdCQUFXLEdBQVEsQ0FB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QUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUMzQixXQUFXLEVBQUUsV0FBVztZQUN4QixNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHO1lBQzlCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsY0FBYyxFQUFFLE1BQU07WUFDdEIsZUFBZSxFQUFFLE9BQU87WUFDeEIsTUFBTSxFQUFFLEdBQUUsRUFBRSxHQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBLENBQUM7U0FDN0IsQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsV0FBVyxHQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUNyQyxDQUFDOzswSEFoSVUsNkJBQTZCLGtCQWdCcEIsZUFBZTs4R0FoQnhCLDZCQUE2Qiw2RENmMUMsazRFQWdETTsyRkRqQ08sNkJBQTZCO2tCQUx6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFdBQVcsRUFBRSwrQkFBK0I7aUJBQzdDOzswQkFrQmMsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEluamVjdCwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuaW1wb3J0IHsgTmd4VWlMb2FkZXJTZXJ2aWNlLCBTUElOTkVSIH0gZnJvbSAnbmd4LXVpLWxvYWRlcic7XHJcbmltcG9ydCB7IExvY2FsU3RvcmFnZVByb3BlcnRpZXMgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxkZXBlbmRlbmNpZXMvY29uc3RhbnRzL2xvY2Fsc3RvcmFnZS1wcm9wZXJ0aWVzJztcclxuaW1wb3J0ICcuLi8uLi8uLi9nbG9iYWxkZXBlbmRlbmNpZXMvaGVscGVycy9mb250YXdlc29tZS1pY29ucyc7XHJcbmltcG9ydCB7IENvbXBhbnlQYXltZW50VXBzZXJ0TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tcGFueS1wYXltZW50LW1vZGVsJztcclxuaW1wb3J0IHsgUGF5bWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYXltZW50LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXB1cmNoYXNlLWxpY2Vuc2VzXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9wdXJjaGFzZS1tb3JlLWxpY2Vuc2VzLmh0bWxcIlxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFB1cmNoYXNlTW9yZUxpY2Vuc2VzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgaGFuZGxlcjogYW55ID0gbnVsbDtcclxuICB0b3RhbEFtb3VudDogYW55ID0gMDtcclxuICBpc0FueU9wZXJhdGlvbklzSW5wcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzRnJvbVJvdXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWN0aXZlVXNlcnM6IGFueSA9IDA7XHJcbiAgcGxhbkludGVydmFsOiBhbnk7XHJcbiAgbm9PZlB1cmNoYXNlczogYW55O1xyXG4gIHNlbGVjdGVkUGxhbk5hbWU6IGFueTtcclxuICBzdWJzY3JpcHRpb25UeXBlOiBzdHJpbmc7XHJcbiAgY29tcGFueU1haW5Mb2dvOiBhbnkgPSBcImh0dHBzOi8vYnZpZXdzdG9yYWdlLmJsb2IuY29yZS53aW5kb3dzLm5ldC82NjcxY2QwZC01YjkxLTQwNDQtYmRjYy1lMWYyMDFjMDg2YzUvcHJvamVjdHMvZDcyZDFjMmYtZGZiZS00ZDQ4LTk2MDUtY2QzYjdlMzhlZDE3L01haW4tTG9nby05Mjc3Y2M0Yi0wYzFmLTQwOTMtYTkxNy0xYTY1ZTg3NGIzYzkucG5nXCI7XHJcbiAgaXNEaXNhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNOZXdTdWI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzcGlubmVyVHlwZSA9IFNQSU5ORVIucHVsc2U7XHJcbiAgaXNTdWNlc3NQYXk6IGJvb2xlYW47XHJcbiAgY29uc3RydWN0b3IoQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnlcclxuICAgICwgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFB1cmNoYXNlTW9yZUxpY2Vuc2VzQ29tcG9uZW50PixcclxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlXHJcbiAgICAsIHB1YmxpYyByb3V0ZXI6IFJvdXRlclxyXG4gICAgLCBwcml2YXRlIHBheW1lbnRTZXJ2aWNlOiBQYXltZW50U2VydmljZSwpIHtcclxuICAgIGlmIChkYXRhICE9IHVuZGVmaW5lZCAmJiBkYXRhICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFBsYW5OYW1lID0gZGF0YS5wcm9kdWN0TmFtZTtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25UeXBlID0gdGhpcy5wbGFuSW50ZXJ2YWwgPSBkYXRhLnN1YnNjcmlwdGlvblR5cGU7XHJcbiAgICAgIHRoaXMuYWN0aXZlVXNlcnMgPSB0aGlzLm5vT2ZQdXJjaGFzZXMgPSBkYXRhLm5vT2ZQdXJjaGFzZXM7XHJcbiAgICAgIHRoaXMuaXNOZXdTdWIgPSBkYXRhLmlzU3Vic2NyaWJlck5ldztcclxuICAgICAgdGhpcy5jb3N0Q2FsY3VsYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBpc1JlbG9hZDogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICBjb3N0Q2FsY3VsYXRpb24oKSB7XHJcbiAgICB2YXIgcHVyY2hhc2VzID0gTnVtYmVyKHRoaXMubm9PZlB1cmNoYXNlcylcclxuICAgIGlmICghaXNOYU4ocHVyY2hhc2VzKSAmJiB0aGlzLmFjdGl2ZVVzZXJzID4gcHVyY2hhc2VzKSB7XHJcbiAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcoXCJOby4gb2YgcHVyY2hhc2VzIHNob3VsZCBiZSBtb3JlIHRoYW4gcHJldmlvdXMgb25lJ3NcIik7XHJcbiAgICAgIHRoaXMuaXNEaXNhYmxlID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0Rpc2FibGUgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLm5vT2ZQdXJjaGFzZXMgIT0gdW5kZWZpbmVkICYmIHRoaXMubm9PZlB1cmNoYXNlcyAhPSBudWxsICYmIHRoaXMubm9PZlB1cmNoYXNlcyAhPSAnJ1xyXG4gICAgICAmJiB0aGlzLnBsYW5JbnRlcnZhbCAhPSB1bmRlZmluZWQgJiYgdGhpcy5wbGFuSW50ZXJ2YWwgIT0gbnVsbCAmJiB0aGlzLnBsYW5JbnRlcnZhbCAhPSAnJyAmJiAhaXNOYU4ocHVyY2hhc2VzKSkge1xyXG4gICAgICB2YXIgcGVyVXNlciA9IDA7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkUGxhbk5hbWUgPT0gJ1N0YW5kYXJkJylcclxuICAgICAgICBwZXJVc2VyID0gMztcclxuICAgICAgZWxzZSBpZiAodGhpcy5zZWxlY3RlZFBsYW5OYW1lID09ICdQcmVtaXVtJylcclxuICAgICAgICBwZXJVc2VyID0gNTtcclxuICAgICAgZWxzZSBpZiAodGhpcy5zZWxlY3RlZFBsYW5OYW1lID09ICdFbnRlcnByaXNlJylcclxuICAgICAgICBwZXJVc2VyID0gMTA7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBwZXJVc2VyID0gMDtcclxuXHJcbiAgICAgIHZhciBub3JtYWxUb3RhbCA9IHBlclVzZXIgKiBOdW1iZXIodGhpcy5ub09mUHVyY2hhc2VzKTtcclxuICAgICAgaWYgKHRoaXMucGxhbkludGVydmFsID09ICdtb250aCcpIHtcclxuICAgICAgICB0aGlzLnRvdGFsQW1vdW50ID0gbm9ybWFsVG90YWwudG9GaXhlZCgyKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLnBsYW5JbnRlcnZhbCA9PSAneWVhcicpIHtcclxuICAgICAgICB0aGlzLnRvdGFsQW1vdW50ID0gKChub3JtYWxUb3RhbCAtIChub3JtYWxUb3RhbCAqIDIwIC8gMTAwKSkgKiAxMikudG9GaXhlZCgyKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy50b3RhbEFtb3VudCA9IDA7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHBheSgpIHtcclxuICAgIGxldCBlbnZpcm9ubWVudCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5FbnZpcm9ubWVudCkpO1xyXG4gICAgdmFyIHNlcnZpY2UgPSB0aGlzLnBheW1lbnRTZXJ2aWNlO1xyXG4gICAgdmFyIHB1cmNoYXNlcyA9IHRoaXMubm9PZlB1cmNoYXNlcztcclxuICAgIHZhciB0b3RhbEFtdCA9IHRoaXMudG90YWxBbW91bnQ7XHJcbiAgICB2YXIgcGxhbiA9IHRoaXMuc2VsZWN0ZWRQbGFuTmFtZTtcclxuICAgIHZhciBwbGFuSW50ZXJ2YWwgPSB0aGlzLnBsYW5JbnRlcnZhbDtcclxuICAgIHZhciB0b3N0ZXJzID0gdGhpcy50b2FzdHI7XHJcbiAgICB2YXIgcm91dGVyID0gdGhpcy5yb3V0ZXI7XHJcbiAgICB2YXIgZGFpbG9nUmVmID0gdGhpcy5kaWFsb2dSZWY7XHJcbiAgICB0aGlzLmlzU3VjZXNzUGF5ID0gdHJ1ZTtcclxuICAgIHZhciBpc1N1Y2Vzc1BheSA9IHRoaXMuaXNTdWNlc3NQYXk7XHJcbiAgICB2YXIgaGFuZGxlciA9ICg8YW55PndpbmRvdykuU3RyaXBlQ2hlY2tvdXQuY29uZmlndXJlKHtcclxuICAgICAga2V5OiBlbnZpcm9ubWVudC5zdHJpcGVBUElLZXksXHJcbiAgICAgIGltYWdlOiAnaHR0cHM6Ly9idmlld3N0b3JhZ2UuYmxvYi5jb3JlLndpbmRvd3MubmV0LzRhZmViNDQ0LWU4MjYtNGY5NS1hYzQxLTIxNzVlMzZhMGMxNi9ocm0vMGIyOTIxYTktZTkzMC00MDEzLTkwNDctNjcwYjUzNTJmMzA4L3Nub3Zhc3lzLTcyMTEyYjAzLTk1ZGMtNDMyYy1hZWVmLWM4OWZhMTNlYWUzMi5wbmcnLFxyXG4gICAgICBsb2NhbGU6ICdhdXRvJyxcclxuICAgICAgdG9rZW46IGZ1bmN0aW9uICh0b2tlbjogYW55KSB7XHJcbiAgICAgICAgaWYgKHRva2VuKSB7XHJcbiAgICAgICAgICB2YXIgY29tcGFueVBheW1lbnRVcHNlcnRNb2RlbCA9IG5ldyBDb21wYW55UGF5bWVudFVwc2VydE1vZGVsKCk7XHJcbiAgICAgICAgICBjb21wYW55UGF5bWVudFVwc2VydE1vZGVsLkNhcmRIb2xkZXJOYW1lID0gdG9rZW4uY2FyZC5uYW1lO1xyXG4gICAgICAgICAgY29tcGFueVBheW1lbnRVcHNlcnRNb2RlbC5DYXJkSG9sZGVyQmlsbGluZ0FkZHJlc3MgPSB0b2tlbi5jYXJkLm5hbWU7XHJcbiAgICAgICAgICBjb21wYW55UGF5bWVudFVwc2VydE1vZGVsLlBsYW5OYW1lID0gcGxhbjtcclxuICAgICAgICAgIGNvbXBhbnlQYXltZW50VXBzZXJ0TW9kZWwuU3Vic2NyaXB0aW9uVHlwZSA9IHBsYW5JbnRlcnZhbDtcclxuICAgICAgICAgIGNvbXBhbnlQYXltZW50VXBzZXJ0TW9kZWwuVG90YWxBbW91bnQgPSB0b3RhbEFtdDtcclxuICAgICAgICAgIGNvbXBhbnlQYXltZW50VXBzZXJ0TW9kZWwuTm9PZlB1cmNoYXNlcyA9IHB1cmNoYXNlcztcclxuICAgICAgICAgIGNvbXBhbnlQYXltZW50VXBzZXJ0TW9kZWwuRW1haWwgPSB0b2tlbi5lbWFpbDtcclxuICAgICAgICAgIGNvbXBhbnlQYXltZW50VXBzZXJ0TW9kZWwuU3RyaXBlVG9rZW5JZCA9IHRva2VuLmlkO1xyXG4gICAgICAgICAgY29tcGFueVBheW1lbnRVcHNlcnRNb2RlbC5BZGRyZXNzT3B0aW9ucyA9IHRva2VuLmNhcmQ7XHJcbiAgICAgICAgICBzZXJ2aWNlLnVwc2VydENvbXBhbnlQYXltZW50cyhjb21wYW55UGF5bWVudFVwc2VydE1vZGVsKS5zdWJzY3JpYmUoKHJlc3BvbnNlRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZURhdGEuc3VjY2VzcyA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgdG9zdGVycy5zdWNjZXNzKFwiWW91ciBzdWJzY3JpcHRpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZFwiKTtcclxuICAgICAgICAgICAgICBpc1N1Y2Vzc1BheSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZShbJy9zaGVsbC9BY2NvdW50cyddKTtcclxuICAgICAgICAgICAgICBkYWlsb2dSZWYuY2xvc2UoeyBpc1JlbG9hZDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0b3N0ZXJzLmVycm9yKHJlc3BvbnNlRGF0YS5hcGlSZXNwb25zZU1lc3NhZ2VzWzBdLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIGlzU3VjZXNzUGF5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmlzU3VjZXNzUGF5ID0gaXNTdWNlc3NQYXk7XHJcbiAgICB2YXIgZGVzY3JpcHRpb24gPSB0aGlzLnBsYW5JbnRlcnZhbCA9PSAnbW9udGgnID8gJ01vbnRobHkgc3Vic2NyaXB0aW9uJyA6ICdBbm51YWwgc3Vic2NyaXB0aW9uJ1xyXG4gICAgaGFuZGxlci5vcGVuKHtcclxuICAgICAgbmFtZTogdGhpcy5zZWxlY3RlZFBsYW5OYW1lLFxyXG4gICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXHJcbiAgICAgIGFtb3VudDogdGhpcy50b3RhbEFtb3VudCAqIDEwMCxcclxuICAgICAgY3VycmVuY3k6ICdHQlAnLFxyXG4gICAgICBiaWxsaW5nQWRkcmVzczogXCJ0cnVlXCIsXHJcbiAgICAgIHNoaXBwaW5nQWRkcmVzczogXCJmYWxzZVwiLFxyXG4gICAgICBjbG9zZWQ6ICgpPT57dGhpcy5jbG9zZTIoKTt9IFxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgY2xvc2UyKCl7XHJcbiAgICB0aGlzLmlzU3VjZXNzUGF5PSF0aGlzLmlzU3VjZXNzUGF5O1xyXG4gIH1cclxufSIsIjxkaXYgY2xhc3M9XCJjdXN0b20tZGlhbG9nXCI+XHJcbiAgPGRpdiBjbGFzcz1cImN1c3RvbS1jbG9zZVwiIG1hdC1kaWFsb2ctY2xvc2UgKGNsaWNrKT1cImNsb3NlKClcIj5cclxuICAgIDxmYS1pY29uIGljb249XCJ0aW1lc1wiIGNsYXNzPVwicHJvamVjdC1kaWFsb2dcIj48L2ZhLWljb24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJwcm9qZWN0LWRpYWxvZ0NvbnRlbnRcIiBpZD1cInN0eWxlLTFcIj5cclxuXHJcbiAgPG1hdC1jYXJkLXRpdGxlPlxyXG4gICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHBiLTFcIj5TdWJzY3JpcHRpb248L2Rpdj5cclxuICA8L21hdC1jYXJkLXRpdGxlPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwibG9naW4tcGFnZVwiIGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICA8ZGl2IGZ4RmxleD1cIjUwXCIgZnhGbGV4LnhzPVwiMTAwXCI+PGxhYmVsPlNlbGVjdGVkIHBsYW4gOiB7e3NlbGVjdGVkUGxhbk5hbWV9fSA8L2xhYmVsPjwvZGl2PlxyXG4gICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0LnhzPVwiY29sdW1uXCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhMYXlvdXRHYXAueHM9XCIwcHhcIj5cclxuICAgICAgPGRpdiBmeEZsZXg9XCIxMDBcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJub09mUHVyY2hhc2VzXCIgcGxhY2Vob2xkZXI9XCJOby5vZiBwdXJjaGFzZXNcIiAoY2hhbmdlKT1cImNvc3RDYWxjdWxhdGlvbigpXCJcclxuICAgICAgICAgICAgcmVxdWlyZWQ+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dC54cz1cImNvbHVtblwiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4TGF5b3V0R2FwLnhzPVwiMHB4XCI+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiMTAwXCIgZnhGbGV4LnhzPVwiMTAwXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiICpuZ0lmPVwiIWlzTmV3U3ViXCI+XHJcbiAgICAgICAgICA8bWF0LXNlbGVjdCBwbGFjZWhvbGRlcj1cIlNlbGVjdCBhIHN1YnNjcmlwdGlvbiB0eXBlXCIgWyhuZ01vZGVsKV09XCJwbGFuSW50ZXJ2YWxcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwic3Vic2NyaXB0aW9uVHlwZSA9PSd5ZWFyJ1wiIChzZWxlY3Rpb25DaGFuZ2UpPVwiY29zdENhbGN1bGF0aW9uKClcIiByZXF1aXJlZD5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJtb250aFwiPk1vbnRobHk8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwieWVhclwiPkFubnVhbGx5PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiICpuZ0lmPVwiaXNOZXdTdWJcIj5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0IHBsYWNlaG9sZGVyPVwiU2VsZWN0IGEgc3Vic2NyaXB0aW9uIHR5cGVcIiBbKG5nTW9kZWwpXT1cInBsYW5JbnRlcnZhbFwiXHJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY29zdENhbGN1bGF0aW9uKClcIiByZXF1aXJlZD5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJtb250aFwiPk1vbnRobHk8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwieWVhclwiPkFubnVhbGx5PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm10LTFcIj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJmdWxsLXdpZHRoIG1iLTEgYnRuIGJ0bi1ibG9ja1wiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJwYXkoKVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJ0b3RhbEFtb3VudCA9PSAwIHx8IGlzRGlzYWJsZSB8fGlzU3VjZXNzUGF5XCI+IFBheSAke3t0b3RhbEFtb3VudH19XHJcbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc3BpbiBmYS1zcGlubmVyXCIgKm5nSWY9XCJpc1N1Y2Vzc1BheVwiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gPG5neC11aS1sb2FkZXIgZmdzU2l6ZT1cIjE4MFwiIFtmZ3NUeXBlXT1cInNwaW5uZXJUeXBlXCIgY29sb3I9XCJwcmltYXJ5XCI+PC9uZ3gtdWktbG9hZGVyPiAtLT5cclxuPC9kaXY+Il19
@@ -0,0 +1,60 @@
1
+ import { Component, Inject } from "@angular/core";
2
+ import { MAT_DIALOG_DATA } from "@angular/material/dialog";
3
+ import '../../../globaldependencies/helpers/fontawesome-icons';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../services/payment.service";
6
+ import * as i2 from "ngx-toastr";
7
+ import * as i3 from "@angular/material/card";
8
+ import * as i4 from "@angular/material/list";
9
+ import * as i5 from "@angular/material/divider";
10
+ import * as i6 from "@swimlane/ngx-datatable";
11
+ import * as i7 from "@angular/material/button";
12
+ import * as i8 from "@angular/flex-layout/flex";
13
+ import * as i9 from "@angular/router";
14
+ import * as i10 from "@angular/common";
15
+ export class TransactionsComponent {
16
+ constructor(data, paymentService, toastr, cdRef) {
17
+ this.data = data;
18
+ this.paymentService = paymentService;
19
+ this.toastr = toastr;
20
+ this.cdRef = cdRef;
21
+ this.selectedTab = "Invoices";
22
+ this.isAnyOperationIsInprogress = false;
23
+ this.isFromRoute = false;
24
+ this.invoiceList = [];
25
+ }
26
+ ngOnInit() {
27
+ this.getAllTransactions();
28
+ }
29
+ onTabClick(selectedName) {
30
+ this.selectedTab = selectedName;
31
+ this.getAllTransactions();
32
+ }
33
+ getAllTransactions() {
34
+ this.invoices = [];
35
+ this.paymentService.getAllTransactions(this.selectedTab).subscribe((responseData) => {
36
+ if (responseData.success == true) {
37
+ this.invoices = responseData.data;
38
+ }
39
+ else {
40
+ this.toastr.error(responseData.apiResponseMessages[0].message);
41
+ }
42
+ });
43
+ }
44
+ downloadInvoice(pdfLink) {
45
+ window.open(pdfLink);
46
+ }
47
+ }
48
+ TransactionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.1", ngImport: i0, type: TransactionsComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.PaymentService }, { token: i2.ToastrService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
49
+ TransactionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.1", type: TransactionsComponent, selector: "app-transactions-component", ngImport: i0, template: "<div fxLayout=\"row wrap\" fxFlex fxFlex=\"100\">\r\n <div fxFlex=\"100\" fxFlex.gt-sm=\"20\" fxFlex.gt-md=\"300px\">\r\n <mat-card class=\"profile-sidebar pb-0 pt-0 custom-box w3rt-card organisation-management mb-0 mt-0\">\r\n <div class=\"profile-nav\">\r\n <mat-nav-list class=\"pt-0\">\r\n <ng-container>\r\n <mat-list-item (click)=\"onTabClick('Invoices')\" class=\"role-card\" routerLinkActive=\"list-item-active\">\r\n Invoices\r\n </mat-list-item>\r\n <mat-divider></mat-divider>\r\n </ng-container>\r\n <ng-container>\r\n <mat-list-item (click)=\"onTabClick('Payments')\" class=\"role-card\" routerLinkActive=\"list-item-active\">\r\n Payments\r\n </mat-list-item>\r\n <mat-divider></mat-divider>\r\n </ng-container>\r\n <ng-container>\r\n <mat-list-item (click)=\"onTabClick('All')\" class=\"role-card\" routerLinkActive=\"list-item-active\">\r\n All\r\n </mat-list-item>\r\n <mat-divider></mat-divider>\r\n </ng-container>\r\n </mat-nav-list>\r\n </div>\r\n </mat-card>\r\n </div>\r\n\r\n <div fxFlex=\"100\" fxFlex.gt-sm=\"80\" fxFlex.gt-md=\"calc(100% - 300px)\"\r\n class=\"organisation-pages organisation-pages-1\">\r\n <div fxFlex fxFlex=\"100\">\r\n <h4 class=\"ml-1 mt-05\">{{selectedTab}}</h4>\r\n <hr>\r\n <div class=\"activity-data no-drag accessible-ip-height\">\r\n <ngx-datatable class=\"btrak\" [columnMode]=\"'flex'\"\r\n [headerHeight]=\"35\" [footerHeight]=\"50\" [rowHeight]=\"50\" [limit]=\"10\" [rows]=\"invoices\"\r\n [scrollbarH]=\"true\" [virtualization]=\"false\"\r\n >\r\n <ngx-datatable-column minWidth=\"150\" name=\"DATE ISSUED\"\r\n [flexGrow]=\"1\" [sortable]=\"true\" prop=\"createdDateTime\">\r\n <ng-template let-row=\"row\" ngx-datatable-cell-template>\r\n {{ row?.createdDateTime | date }}\r\n </ng-template>\r\n </ngx-datatable-column>\r\n <ngx-datatable-column minWidth=\"150\" name=\"DETAILS\"\r\n [flexGrow]=\"1\" [sortable]=\"true\" prop=\"details\">\r\n <ng-template let-row=\"row\" ngx-datatable-cell-template>\r\n <span> <a mat-button color=\"accent\" class=\"pl-0\" (click)=\"downloadInvoice(row.pdfUrl)\">{{ row?.details }}</a></span> \r\n </ng-template>\r\n </ngx-datatable-column>\r\n <ngx-datatable-column minWidth=\"150\" name=\"PRODUCT(S)\"\r\n [flexGrow]=\"1\" [sortable]=\"true\" prop=\"product\">\r\n <ng-template let-row=\"row\" ngx-datatable-cell-template>\r\n {{ row?.product }}\r\n </ng-template>\r\n </ngx-datatable-column>\r\n <ngx-datatable-column minWidth=\"150\" name=\"AMOUNT\"\r\n [flexGrow]=\"1\" [sortable]=\"true\" prop=\"amount\">\r\n <ng-template let-row=\"row\" ngx-datatable-cell-template>\r\n {{ row?.amount }}\r\n </ng-template>\r\n </ngx-datatable-column>\r\n <ngx-datatable-column minWidth=\"150\" name=\"STATUS\" [flexGrow]=\"1\"\r\n [sortable]=\"true\" prop=\"status\">\r\n <ng-template let-row=\"row\" ngx-datatable-cell-template>\r\n {{ row?.status }}\r\n </ng-template>\r\n </ngx-datatable-column>\r\n </ngx-datatable>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", components: [{ type: i3.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i4.MatNavList, selector: "mat-nav-list", inputs: ["disableRipple", "disabled"], exportAs: ["matNavList"] }, { type: i4.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: i6.DatatableComponent, selector: "ngx-datatable", inputs: ["selected", "scrollbarV", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "loadingIndicator", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "groupExpansionDefault", "selectAllRowsOnPage", "virtualization", "summaryRow", "summaryHeight", "summaryPosition", "rowIdentity", "rows", "groupedRows", "groupRowsBy", "columns", "limit", "count", "offset", "targetMarkerTemplate", "selectionType", "rowClass", "selectCheck", "displayCheck", "trackByProp", "treeFromRelation", "treeToRelation"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction"] }, { type: i7.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }], directives: [{ type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i9.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], exportAs: ["routerLinkActive"] }, { type: i6.DataTableColumnDirective, selector: "ngx-datatable-column", inputs: ["name", "prop", "frozenLeft", "frozenRight", "flexGrow", "resizeable", "comparator", "pipe", "sortable", "draggable", "canAutoResize", "minWidth", "width", "maxWidth", "checkboxable", "headerCheckboxable", "headerClass", "cellClass", "isTreeColumn", "treeLevelIndent", "summaryFunc", "summaryTemplate", "cellTemplate", "headerTemplate", "treeToggleTemplate"] }, { type: i6.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }], pipes: { "date": i10.DatePipe } });
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.1", ngImport: i0, type: TransactionsComponent, decorators: [{
51
+ type: Component,
52
+ args: [{
53
+ selector: "app-transactions-component",
54
+ templateUrl: "./transactions.component.html"
55
+ }]
56
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
57
+ type: Inject,
58
+ args: [MAT_DIALOG_DATA]
59
+ }] }, { type: i1.PaymentService }, { type: i2.ToastrService }, { type: i0.ChangeDetectorRef }]; } });
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NoZWxsLW1vZHVsZS1jb21wb25lbnRzL3NoZWxsLWNvbXBvbmVudHMvc3JjL2xpYi9zaGVsbC1jb21wb25lbnRzL2NvbXBvbmVudHMvUGF5bWVudHMvdHJhbnNhY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NoZWxsLW1vZHVsZS1jb21wb25lbnRzL3NoZWxsLWNvbXBvbmVudHMvc3JjL2xpYi9zaGVsbC1jb21wb25lbnRzL2NvbXBvbmVudHMvUGF5bWVudHMvdHJhbnNhY3Rpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFnQyxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQTJCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSXBGLE9BQU8sdURBQXVELENBQUM7Ozs7Ozs7Ozs7OztBQVMvRCxNQUFNLE9BQU8scUJBQXFCO0lBWWhDLFlBQTRDLElBQVMsRUFDNUMsY0FBOEIsRUFDOUIsTUFBcUIsRUFDdEIsS0FBd0I7UUFIWSxTQUFJLEdBQUosSUFBSSxDQUFLO1FBQzVDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3RCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBWmhDLGdCQUFXLEdBQVcsVUFBVSxDQUFDO1FBR2pDLCtCQUEwQixHQUFhLEtBQUssQ0FBQztRQUM3QyxnQkFBVyxHQUFhLEtBQUssQ0FBQztRQUU5QixnQkFBVyxHQUEwQixFQUFFLENBQUM7SUFReEMsQ0FBQztJQUVELFFBQVE7UUFDUCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsVUFBVSxDQUFDLFlBQVk7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUM7UUFDaEMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFpQixFQUFFLEVBQUU7WUFDdkYsSUFBSSxZQUFZLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtnQkFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO2FBQ25DO2lCQUNJO2dCQUNILElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNoRTtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFPO1FBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsQ0FBQzs7a0hBekNVLHFCQUFxQixrQkFZWixlQUFlO3NHQVp4QixxQkFBcUIsa0VDZGxDLDBwSUF3RU07MkZEMURPLHFCQUFxQjtrQkFMakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxXQUFXLEVBQUUsK0JBQStCO2lCQUM3Qzs7MEJBY2MsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEluamVjdCwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IE1hdE9wdGlvbiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XHJcbmltcG9ydCB7IE1hdFRhYkNoYW5nZUV2ZW50IH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3RhYnNcIjtcclxuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xyXG5pbXBvcnQgJy4uLy4uLy4uL2dsb2JhbGRlcGVuZGVuY2llcy9oZWxwZXJzL2ZvbnRhd2Vzb21lLWljb25zJztcclxuaW1wb3J0IHsgSW52b2ljZU91dHB1dE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ludm9pY2VPdXRwdXQtbW9kZWwnO1xyXG5pbXBvcnQgeyBQYXltZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BheW1lbnQuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtdHJhbnNhY3Rpb25zLWNvbXBvbmVudFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vdHJhbnNhY3Rpb25zLmNvbXBvbmVudC5odG1sXCJcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuXHJcbiAgc2VsZWN0ZWRUYWI6IHN0cmluZyA9IFwiSW52b2ljZXNcIjtcclxuICBzZWxlY3RlZFRhYkluZGV4OiBudW1iZXI7XHJcbiAgcGF5bWVudERldGFpbHMgOiBhbnk7XHJcbiAgaXNBbnlPcGVyYXRpb25Jc0lucHJvZ3Jlc3MgOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNGcm9tUm91dGUgOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaW52b2ljZURldGFpbHMgOiBJbnZvaWNlT3V0cHV0TW9kZWw7XHJcbiAgaW52b2ljZUxpc3QgOiBJbnZvaWNlT3V0cHV0TW9kZWxbXSA9IFtdO1xyXG4gIGludm9pY2VzIDogYW55O1xyXG4gIHBheW1lbnRzIDogYW55O1xyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55XHJcbiAgLHByaXZhdGUgcGF5bWVudFNlcnZpY2U6IFBheW1lbnRTZXJ2aWNlXHJcbiAgLHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxyXG4gIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgIHRoaXMuZ2V0QWxsVHJhbnNhY3Rpb25zKCk7XHJcbiAgfVxyXG4gIG9uVGFiQ2xpY2soc2VsZWN0ZWROYW1lKXtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHNlbGVjdGVkTmFtZTtcclxuICAgICAgdGhpcy5nZXRBbGxUcmFuc2FjdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIGdldEFsbFRyYW5zYWN0aW9ucygpe1xyXG4gICAgdGhpcy5pbnZvaWNlcyA9IFtdO1xyXG4gICAgdGhpcy5wYXltZW50U2VydmljZS5nZXRBbGxUcmFuc2FjdGlvbnModGhpcy5zZWxlY3RlZFRhYikuc3Vic2NyaWJlKChyZXNwb25zZURhdGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2VEYXRhLnN1Y2Nlc3MgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuaW52b2ljZXMgPSByZXNwb25zZURhdGEuZGF0YTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZURhdGEuYXBpUmVzcG9uc2VNZXNzYWdlc1swXS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gIH0pO1xyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRJbnZvaWNlKHBkZkxpbmspe1xyXG4gICAgd2luZG93Lm9wZW4ocGRmTGluayk7XHJcbiAgfVxyXG4gIFxyXG59XHJcbiIsIjxkaXYgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiIGZ4RmxleCBmeEZsZXg9XCIxMDBcIj5cclxuICAgIDxkaXYgZnhGbGV4PVwiMTAwXCIgZnhGbGV4Lmd0LXNtPVwiMjBcIiBmeEZsZXguZ3QtbWQ9XCIzMDBweFwiPlxyXG4gICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cInByb2ZpbGUtc2lkZWJhciBwYi0wIHB0LTAgY3VzdG9tLWJveCB3M3J0LWNhcmQgb3JnYW5pc2F0aW9uLW1hbmFnZW1lbnQgbWItMCBtdC0wXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9maWxlLW5hdlwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1uYXYtbGlzdCBjbGFzcz1cInB0LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxpc3QtaXRlbSAoY2xpY2spPVwib25UYWJDbGljaygnSW52b2ljZXMnKVwiIGNsYXNzPVwicm9sZS1jYXJkXCIgcm91dGVyTGlua0FjdGl2ZT1cImxpc3QtaXRlbS1hY3RpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludm9pY2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxpc3QtaXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1saXN0LWl0ZW0gKGNsaWNrKT1cIm9uVGFiQ2xpY2soJ1BheW1lbnRzJylcIiBjbGFzcz1cInJvbGUtY2FyZFwiIHJvdXRlckxpbmtBY3RpdmU9XCJsaXN0LWl0ZW0tYWN0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXltZW50c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1saXN0LWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGlzdC1pdGVtIChjbGljayk9XCJvblRhYkNsaWNrKCdBbGwnKVwiIGNsYXNzPVwicm9sZS1jYXJkXCIgcm91dGVyTGlua0FjdGl2ZT1cImxpc3QtaXRlbS1hY3RpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1saXN0LWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtbmF2LWxpc3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbWF0LWNhcmQ+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGZ4RmxleD1cIjEwMFwiIGZ4RmxleC5ndC1zbT1cIjgwXCIgZnhGbGV4Lmd0LW1kPVwiY2FsYygxMDAlIC0gMzAwcHgpXCJcclxuICAgICAgICBjbGFzcz1cIm9yZ2FuaXNhdGlvbi1wYWdlcyBvcmdhbmlzYXRpb24tcGFnZXMtMVwiPlxyXG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4RmxleD1cIjEwMFwiPlxyXG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJtbC0xIG10LTA1XCI+e3tzZWxlY3RlZFRhYn19PC9oND5cclxuICAgICAgICAgICAgPGhyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aXZpdHktZGF0YSBuby1kcmFnIGFjY2Vzc2libGUtaXAtaGVpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LWRhdGF0YWJsZSBjbGFzcz1cImJ0cmFrXCIgW2NvbHVtbk1vZGVdPVwiJ2ZsZXgnXCJcclxuICAgICAgICAgICAgICAgICAgICBbaGVhZGVySGVpZ2h0XT1cIjM1XCIgW2Zvb3RlckhlaWdodF09XCI1MFwiIFtyb3dIZWlnaHRdPVwiNTBcIiBbbGltaXRdPVwiMTBcIiBbcm93c109XCJpbnZvaWNlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Njcm9sbGJhckhdPVwidHJ1ZVwiIFt2aXJ0dWFsaXphdGlvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtZGF0YXRhYmxlLWNvbHVtbiBtaW5XaWR0aD1cIjE1MFwiIG5hbWU9XCJEQVRFIElTU1VFRFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmbGV4R3Jvd109XCIxXCIgW3NvcnRhYmxlXT1cInRydWVcIiBwcm9wPVwiY3JlYXRlZERhdGVUaW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbmd4LWRhdGF0YWJsZS1jZWxsLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcm93Py5jcmVhdGVkRGF0ZVRpbWUgfCBkYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8bmd4LWRhdGF0YWJsZS1jb2x1bW4gbWluV2lkdGg9XCIxNTBcIiBuYW1lPVwiREVUQUlMU1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmbGV4R3Jvd109XCIxXCIgW3NvcnRhYmxlXT1cInRydWVcIiBwcm9wPVwiZGV0YWlsc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiA8YSBtYXQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgY2xhc3M9XCJwbC0wXCIgKGNsaWNrKT1cImRvd25sb2FkSW52b2ljZShyb3cucGRmVXJsKVwiPnt7IHJvdz8uZGV0YWlscyB9fTwvYT48L3NwYW4+ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L25neC1kYXRhdGFibGUtY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtZGF0YXRhYmxlLWNvbHVtbiBtaW5XaWR0aD1cIjE1MFwiIG5hbWU9XCJQUk9EVUNUKFMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZsZXhHcm93XT1cIjFcIiBbc29ydGFibGVdPVwidHJ1ZVwiIHByb3A9XCJwcm9kdWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbmd4LWRhdGF0YWJsZS1jZWxsLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcm93Py5wcm9kdWN0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8bmd4LWRhdGF0YWJsZS1jb2x1bW4gbWluV2lkdGg9XCIxNTBcIiBuYW1lPVwiQU1PVU5UXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZsZXhHcm93XT1cIjFcIiBbc29ydGFibGVdPVwidHJ1ZVwiIHByb3A9XCJhbW91bnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByb3c/LmFtb3VudCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmd4LWRhdGF0YWJsZS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uIG1pbldpZHRoPVwiMTUwXCIgbmFtZT1cIlNUQVRVU1wiIFtmbGV4R3Jvd109XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwidHJ1ZVwiIHByb3A9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByb3c/LnN0YXR1cyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmd4LWRhdGF0YWJsZS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICA8L25neC1kYXRhdGFibGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==