@resolveio/client-lib-core 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 (350) hide show
  1. package/esm2020/lib/account-manager.service.mjs +213 -0
  2. package/esm2020/lib/auth/auth-guard.service.mjs +137 -0
  3. package/esm2020/lib/auth/auth-permissions.service.mjs +24 -0
  4. package/esm2020/lib/auth/auth.service.mjs +241 -0
  5. package/esm2020/lib/auth/auth365.component.mjs +44 -0
  6. package/esm2020/lib/auth/can-deactivate-guard.service.mjs +13 -0
  7. package/esm2020/lib/auth/enroll.component.mjs +81 -0
  8. package/esm2020/lib/auth/forgot-password.component.mjs +82 -0
  9. package/esm2020/lib/core.component.mjs +488 -0
  10. package/esm2020/lib/core.module.mjs +179 -0
  11. package/esm2020/lib/core.service.mjs +96 -0
  12. package/esm2020/lib/directive/focus.mjs +22 -0
  13. package/esm2020/lib/directive/scroll.mjs +55 -0
  14. package/esm2020/lib/home/about-us.component.mjs +34 -0
  15. package/esm2020/lib/home/contact-us.component.mjs +57 -0
  16. package/esm2020/lib/home/demo.component.mjs +59 -0
  17. package/esm2020/lib/home/home.component.mjs +105 -0
  18. package/esm2020/lib/home/home.module.mjs +50 -0
  19. package/esm2020/lib/logger/logger.component.mjs +221 -0
  20. package/esm2020/lib/models/app-status.model.mjs +2 -0
  21. package/esm2020/lib/models/collection-document.model.mjs +2 -0
  22. package/esm2020/lib/models/cron-job.model.mjs +2 -0
  23. package/esm2020/lib/models/dialog.model.mjs +2 -0
  24. package/esm2020/lib/models/file.model.mjs +2 -0
  25. package/esm2020/lib/models/log-method-latency.model.mjs +2 -0
  26. package/esm2020/lib/models/navbar-main-tab.model.mjs +2 -0
  27. package/esm2020/lib/models/pagination.model.mjs +2 -0
  28. package/esm2020/lib/models/permission.model.mjs +2 -0
  29. package/esm2020/lib/models/select-data-label.model.mjs +2 -0
  30. package/esm2020/lib/models/subscription.model.mjs +2 -0
  31. package/esm2020/lib/models/support-ticket.model.mjs +2 -0
  32. package/esm2020/lib/models/user-group.model.mjs +2 -0
  33. package/esm2020/lib/models/user.model.mjs +2 -0
  34. package/esm2020/lib/offline-db.mjs +519 -0
  35. package/esm2020/lib/offline-manager.service.mjs +107 -0
  36. package/esm2020/lib/pipes/domsanitizor.pipe.mjs +28 -0
  37. package/esm2020/lib/pipes/filter.pipe.mjs +36 -0
  38. package/esm2020/lib/pipes/json-parse.pipe.mjs +29 -0
  39. package/esm2020/lib/pipes/minus-currency.pipe.mjs +16 -0
  40. package/esm2020/lib/pipes/phone.pipe.mjs +47 -0
  41. package/esm2020/lib/pipes/pipe.module.mjs +54 -0
  42. package/esm2020/lib/pipes/reverse-list.pipe.mjs +17 -0
  43. package/esm2020/lib/pipes/titlecase.pipe.mjs +22 -0
  44. package/esm2020/lib/resolveio-class.mjs +41 -0
  45. package/esm2020/lib/shared/shared.module.mjs +91 -0
  46. package/esm2020/lib/socket-manager.service.mjs +360 -0
  47. package/esm2020/lib/socket.service.mjs +129 -0
  48. package/esm2020/lib/standard-pages/contactus/contactus.component.mjs +45 -0
  49. package/esm2020/lib/standard-pages/faq/faq.component.mjs +45 -0
  50. package/esm2020/lib/standard-pages/features/features.component.mjs +23 -0
  51. package/esm2020/lib/standard-pages/home/home.component.mjs +38 -0
  52. package/esm2020/lib/standard-pages/howitwork/howitwork.component.mjs +23 -0
  53. package/esm2020/lib/standard-pages/loginsignup/loginsignup.component.mjs +23 -0
  54. package/esm2020/lib/standard-pages/pricing/pricing.component.mjs +37 -0
  55. package/esm2020/lib/standard-pages/standard-pages.module.mjs +69 -0
  56. package/esm2020/lib/support-ticket/detail/support-ticket-detail.component.mjs +204 -0
  57. package/esm2020/lib/support-ticket/edit/support-ticket-edit.component.mjs +122 -0
  58. package/esm2020/lib/support-ticket/list/support-ticket-list.component.mjs +137 -0
  59. package/esm2020/lib/support-ticket/new/support-ticket-new.component.mjs +115 -0
  60. package/esm2020/lib/support-ticket/support-ticket.component.mjs +63 -0
  61. package/esm2020/lib/support-ticket/support-ticket.module.mjs +57 -0
  62. package/esm2020/lib/support-ticket/support-ticket.routing.mjs +20 -0
  63. package/esm2020/lib/support-ticket/support-ticket.service.mjs +17 -0
  64. package/esm2020/lib/token-manager.service.mjs +24 -0
  65. package/esm2020/lib/user-settings/settings/users-settings.component.mjs +312 -0
  66. package/esm2020/lib/user-settings/user-settings.component.mjs +57 -0
  67. package/esm2020/lib/user-settings/user-settings.module.mjs +58 -0
  68. package/esm2020/lib/user-settings/user-settings.permission.mjs +10 -0
  69. package/esm2020/lib/user-settings/user-settings.routing.mjs +14 -0
  70. package/esm2020/lib/user-settings/user-settings.service.mjs +17 -0
  71. package/esm2020/lib/util/action-name.helper.mjs +9 -0
  72. package/esm2020/lib/util/aws.service.mjs +79 -0
  73. package/esm2020/lib/util/common.helper.mjs +140 -0
  74. package/esm2020/lib/util/validation.service.mjs +177 -0
  75. package/esm2020/lib/util/window-resize.service.mjs +24 -0
  76. package/esm2020/lib/util/window.service.mjs +16 -0
  77. package/esm2020/lib/widgets/alert/alert.model.mjs +2 -0
  78. package/esm2020/lib/widgets/alert/alert.service.mjs +76 -0
  79. package/esm2020/lib/widgets/chartjs/chart.component.mjs +86 -0
  80. package/esm2020/lib/widgets/chartjs/chart.module.mjs +17 -0
  81. package/esm2020/lib/widgets/collapse-table/collapse-table.component.mjs +79 -0
  82. package/esm2020/lib/widgets/collapse-table/collapse-table.module.mjs +36 -0
  83. package/esm2020/lib/widgets/data-table/data-table.component.mjs +77 -0
  84. package/esm2020/lib/widgets/data-table/data-table.model.mjs +2 -0
  85. package/esm2020/lib/widgets/data-table/data-table.module.mjs +43 -0
  86. package/esm2020/lib/widgets/date-shortcut/date-shortcut.component.mjs +195 -0
  87. package/esm2020/lib/widgets/date-shortcut/date-shortcut.module.mjs +34 -0
  88. package/esm2020/lib/widgets/dialog/dialog.confirm.content.mjs +63 -0
  89. package/esm2020/lib/widgets/dialog/dialog.error.content.mjs +57 -0
  90. package/esm2020/lib/widgets/dialog/dialog.input.content.mjs +197 -0
  91. package/esm2020/lib/widgets/dialog/dialog.login.content.mjs +348 -0
  92. package/esm2020/lib/widgets/dialog/dialog.notify.content.mjs +57 -0
  93. package/esm2020/lib/widgets/dialog/dialog.register.content.mjs +330 -0
  94. package/esm2020/lib/widgets/dialog/dialog.select-data-labels.content.mjs +191 -0
  95. package/esm2020/lib/widgets/dialog/dialog.select-datetime.content.mjs +140 -0
  96. package/esm2020/lib/widgets/dialog/dialog.service.mjs +71 -0
  97. package/esm2020/lib/widgets/file/file-upload.component.mjs +440 -0
  98. package/esm2020/lib/widgets/file/file-upload.module.mjs +50 -0
  99. package/esm2020/lib/widgets/form-button/form-button.component.mjs +91 -0
  100. package/esm2020/lib/widgets/form-button/form-button.module.mjs +30 -0
  101. package/esm2020/lib/widgets/navbar-main/navbar-main.component.mjs +209 -0
  102. package/esm2020/lib/widgets/navbar-module/navbar-module.component.mjs +138 -0
  103. package/esm2020/lib/widgets/navbar-module/navbar-module.model.mjs +2 -0
  104. package/esm2020/lib/widgets/ngx-tour-ng-bootstrap/ng-bootstrap-tour.service.mjs +14 -0
  105. package/esm2020/lib/widgets/ngx-tour-ng-bootstrap/ng-bootstrap.module.mjs +34 -0
  106. package/esm2020/lib/widgets/ngx-tour-ng-bootstrap/step-option.interface.mjs +2 -0
  107. package/esm2020/lib/widgets/ngx-tour-ng-bootstrap/tour-anchor.directive.mjs +76 -0
  108. package/esm2020/lib/widgets/ngx-tour-ng-bootstrap/tour-step-template.component.mjs +70 -0
  109. package/esm2020/lib/widgets/ngx-tour-ng-bootstrap/tour-step-template.service.mjs +10 -0
  110. package/esm2020/lib/widgets/responsive-button-group/responsive-button-group.component.mjs +38 -0
  111. package/esm2020/lib/widgets/responsive-button-group/responsive-button-group.module.mjs +26 -0
  112. package/esm2020/lib/widgets/scheduler/scheduler.component.mjs +185 -0
  113. package/esm2020/lib/widgets/scheduler/scheduler.module.mjs +39 -0
  114. package/esm2020/lib/widgets/sort-table/sort-table-header.component.mjs +67 -0
  115. package/esm2020/lib/widgets/sort-table/sort-table-ngfor.component.mjs +48 -0
  116. package/esm2020/lib/widgets/sort-table/sort-table.directive.mjs +174 -0
  117. package/esm2020/lib/widgets/sort-table/sort-table.module.mjs +40 -0
  118. package/esm2020/lib/widgets/user-role/user-role.component.mjs +27 -0
  119. package/esm2020/lib/widgets/user-role/user-role.module.mjs +26 -0
  120. package/esm2020/public_api.mjs +109 -0
  121. package/esm2020/resolveio-client-lib-core.mjs +5 -0
  122. package/fesm2015/resolveio-client-lib-core.mjs +8856 -0
  123. package/fesm2015/resolveio-client-lib-core.mjs.map +1 -0
  124. package/fesm2020/resolveio-client-lib-core.mjs +8849 -0
  125. package/fesm2020/resolveio-client-lib-core.mjs.map +1 -0
  126. package/lib/account-manager.service.d.ts +42 -0
  127. package/lib/auth/auth-guard.service.d.ts +25 -0
  128. package/lib/auth/auth-permissions.service.d.ts +10 -0
  129. package/lib/auth/auth.service.d.ts +29 -0
  130. package/lib/auth/auth365.component.d.ts +20 -0
  131. package/lib/auth/can-deactivate-guard.service.d.ts +11 -0
  132. package/lib/auth/enroll.component.d.ts +28 -0
  133. package/lib/auth/forgot-password.component.d.ts +28 -0
  134. package/lib/core.component.d.ts +69 -0
  135. package/lib/core.module.d.ts +32 -0
  136. package/lib/core.service.d.ts +53 -0
  137. package/lib/directive/focus.d.ts +10 -0
  138. package/lib/directive/scroll.d.ts +20 -0
  139. package/lib/home/about-us.component.d.ts +15 -0
  140. package/lib/home/contact-us.component.d.ts +20 -0
  141. package/lib/home/demo.component.d.ts +25 -0
  142. package/lib/home/home.component.d.ts +33 -0
  143. package/lib/home/home.module.d.ts +13 -0
  144. package/lib/logger/logger.component.d.ts +37 -0
  145. package/lib/models/app-status.model.d.ts +4 -0
  146. package/lib/models/collection-document.model.d.ts +6 -0
  147. package/lib/models/cron-job.model.d.ts +13 -0
  148. package/lib/models/dialog.model.d.ts +18 -0
  149. package/lib/models/file.model.d.ts +9 -0
  150. package/lib/models/log-method-latency.model.d.ts +7 -0
  151. package/lib/models/navbar-main-tab.model.d.ts +14 -0
  152. package/lib/models/pagination.model.d.ts +17 -0
  153. package/lib/models/permission.model.d.ts +13 -0
  154. package/lib/models/select-data-label.model.d.ts +9 -0
  155. package/lib/models/subscription.model.d.ts +19 -0
  156. package/lib/models/support-ticket.model.d.ts +71 -0
  157. package/lib/models/user-group.model.d.ts +19 -0
  158. package/lib/models/user.model.d.ts +70 -0
  159. package/lib/offline-db.d.ts +28 -0
  160. package/lib/offline-manager.service.d.ts +23 -0
  161. package/lib/pipes/domsanitizor.pipe.d.ts +10 -0
  162. package/lib/pipes/filter.pipe.d.ts +12 -0
  163. package/lib/pipes/json-parse.pipe.d.ts +7 -0
  164. package/lib/pipes/minus-currency.pipe.d.ts +7 -0
  165. package/lib/pipes/phone.pipe.d.ts +7 -0
  166. package/lib/pipes/pipe.module.d.ts +13 -0
  167. package/lib/pipes/reverse-list.pipe.d.ts +6 -0
  168. package/lib/pipes/titlecase.pipe.d.ts +7 -0
  169. package/lib/resolveio-class.d.ts +26 -0
  170. package/lib/shared/shared.module.d.ts +16 -0
  171. package/lib/socket-manager.service.d.ts +33 -0
  172. package/lib/socket.service.d.ts +33 -0
  173. package/lib/standard-pages/contactus/contactus.component.d.ts +17 -0
  174. package/lib/standard-pages/faq/faq.component.d.ts +17 -0
  175. package/lib/standard-pages/features/features.component.d.ts +12 -0
  176. package/lib/standard-pages/home/home.component.d.ts +14 -0
  177. package/lib/standard-pages/howitwork/howitwork.component.d.ts +12 -0
  178. package/lib/standard-pages/loginsignup/loginsignup.component.d.ts +12 -0
  179. package/lib/standard-pages/pricing/pricing.component.d.ts +14 -0
  180. package/lib/standard-pages/standard-pages.module.d.ts +17 -0
  181. package/lib/support-ticket/detail/support-ticket-detail.component.d.ts +32 -0
  182. package/lib/support-ticket/edit/support-ticket-edit.component.d.ts +30 -0
  183. package/lib/support-ticket/list/support-ticket-list.component.d.ts +26 -0
  184. package/lib/support-ticket/new/support-ticket-new.component.d.ts +26 -0
  185. package/lib/support-ticket/support-ticket.component.d.ts +20 -0
  186. package/lib/support-ticket/support-ticket.module.d.ts +16 -0
  187. package/lib/support-ticket/support-ticket.routing.d.ts +3 -0
  188. package/lib/support-ticket/support-ticket.service.d.ts +9 -0
  189. package/lib/token-manager.service.d.ts +11 -0
  190. package/lib/user-settings/settings/users-settings.component.d.ts +57 -0
  191. package/lib/user-settings/user-settings.component.d.ts +20 -0
  192. package/lib/user-settings/user-settings.module.d.ts +15 -0
  193. package/lib/user-settings/user-settings.permission.d.ts +2 -0
  194. package/lib/user-settings/user-settings.routing.d.ts +3 -0
  195. package/lib/user-settings/user-settings.service.d.ts +9 -0
  196. package/lib/util/action-name.helper.d.ts +1 -0
  197. package/lib/util/aws.service.d.ts +16 -0
  198. package/lib/util/common.helper.d.ts +12 -0
  199. package/lib/util/validation.service.d.ts +85 -0
  200. package/lib/util/window-resize.service.d.ts +12 -0
  201. package/lib/util/window.service.d.ts +6 -0
  202. package/lib/widgets/alert/alert.model.d.ts +1 -0
  203. package/lib/widgets/alert/alert.service.d.ts +11 -0
  204. package/lib/widgets/chartjs/chart.component.d.ts +22 -0
  205. package/lib/widgets/chartjs/chart.module.d.ts +8 -0
  206. package/lib/widgets/collapse-table/collapse-table.component.d.ts +23 -0
  207. package/lib/widgets/collapse-table/collapse-table.module.d.ts +9 -0
  208. package/lib/widgets/data-table/data-table.component.d.ts +23 -0
  209. package/lib/widgets/data-table/data-table.model.d.ts +13 -0
  210. package/lib/widgets/data-table/data-table.module.d.ts +12 -0
  211. package/lib/widgets/date-shortcut/date-shortcut.component.d.ts +20 -0
  212. package/lib/widgets/date-shortcut/date-shortcut.module.d.ts +10 -0
  213. package/lib/widgets/dialog/dialog.confirm.content.d.ts +12 -0
  214. package/lib/widgets/dialog/dialog.error.content.d.ts +11 -0
  215. package/lib/widgets/dialog/dialog.input.content.d.ts +18 -0
  216. package/lib/widgets/dialog/dialog.login.content.d.ts +16 -0
  217. package/lib/widgets/dialog/dialog.notify.content.d.ts +11 -0
  218. package/lib/widgets/dialog/dialog.register.content.d.ts +13 -0
  219. package/lib/widgets/dialog/dialog.select-data-labels.content.d.ts +22 -0
  220. package/lib/widgets/dialog/dialog.select-datetime.content.d.ts +16 -0
  221. package/lib/widgets/dialog/dialog.service.d.ts +18 -0
  222. package/lib/widgets/file/file-upload.component.d.ts +49 -0
  223. package/lib/widgets/file/file-upload.module.d.ts +14 -0
  224. package/lib/widgets/form-button/form-button.component.d.ts +14 -0
  225. package/lib/widgets/form-button/form-button.module.d.ts +9 -0
  226. package/lib/widgets/navbar-main/navbar-main.component.d.ts +52 -0
  227. package/lib/widgets/navbar-module/navbar-module.component.d.ts +24 -0
  228. package/lib/widgets/navbar-module/navbar-module.model.d.ts +13 -0
  229. package/lib/widgets/ngx-tour-ng-bootstrap/ng-bootstrap-tour.service.d.ts +7 -0
  230. package/lib/widgets/ngx-tour-ng-bootstrap/ng-bootstrap.module.d.ts +17 -0
  231. package/lib/widgets/ngx-tour-ng-bootstrap/step-option.interface.d.ts +5 -0
  232. package/lib/widgets/ngx-tour-ng-bootstrap/tour-anchor.directive.d.ts +26 -0
  233. package/lib/widgets/ngx-tour-ng-bootstrap/tour-step-template.component.d.ts +20 -0
  234. package/lib/widgets/ngx-tour-ng-bootstrap/tour-step-template.service.d.ts +9 -0
  235. package/lib/widgets/responsive-button-group/responsive-button-group.component.d.ts +17 -0
  236. package/lib/widgets/responsive-button-group/responsive-button-group.module.d.ts +8 -0
  237. package/lib/widgets/scheduler/scheduler.component.d.ts +50 -0
  238. package/lib/widgets/scheduler/scheduler.module.d.ts +11 -0
  239. package/lib/widgets/sort-table/sort-table-header.component.d.ts +23 -0
  240. package/lib/widgets/sort-table/sort-table-ngfor.component.d.ts +17 -0
  241. package/lib/widgets/sort-table/sort-table.directive.d.ts +48 -0
  242. package/lib/widgets/sort-table/sort-table.module.d.ts +11 -0
  243. package/lib/widgets/user-role/user-role.component.d.ts +10 -0
  244. package/lib/widgets/user-role/user-role.module.d.ts +8 -0
  245. package/package.json +72 -0
  246. package/public_api.d.ts +105 -0
  247. package/resolveio-client-lib-core.d.ts +5 -0
  248. package/src/assets/css/font-awesome.css +2338 -0
  249. package/src/assets/css/home-page-layout.css +7221 -0
  250. package/src/assets/css/home-page-theme.css +1157 -0
  251. package/src/assets/css/leaflet.css +629 -0
  252. package/src/assets/css/owl.carousel.min.css +1 -0
  253. package/src/assets/css/owl.theme.min.css +1 -0
  254. package/src/assets/css/style.css +1283 -0
  255. package/src/assets/css/tablet.css +18 -0
  256. package/src/assets/css/toastr.css +192 -0
  257. package/src/assets/images/ResolveIO.png +0 -0
  258. package/src/assets/images/ResolveIO_white.png +0 -0
  259. package/src/assets/images/contactus/Contact_bnr.jpg +0 -0
  260. package/src/assets/images/contactus/cont-comp.png +0 -0
  261. package/src/assets/images/contactus/cont-mail.png +0 -0
  262. package/src/assets/images/contactus/cont-phone.png +0 -0
  263. package/src/assets/images/contactus/form-img.png +0 -0
  264. package/src/assets/images/contactus/user.png +0 -0
  265. package/src/assets/images/faq/Faq-form.png +0 -0
  266. package/src/assets/images/faq/clientlogo1.jpg +0 -0
  267. package/src/assets/images/faq/clientlogo2.jpg +0 -0
  268. package/src/assets/images/faq/clientlogo3.jpg +0 -0
  269. package/src/assets/images/faq/clientlogo4.jpg +0 -0
  270. package/src/assets/images/faq/clientlogo5.jpg +0 -0
  271. package/src/assets/images/faq/faq_banner copy.jpg +0 -0
  272. package/src/assets/images/faq/faq_banner.jpg +0 -0
  273. package/src/assets/images/faq/faqwomen.jpg +0 -0
  274. package/src/assets/images/faq/mail-input.png +0 -0
  275. package/src/assets/images/faq/user-input.png +0 -0
  276. package/src/assets/images/favicon-32x32.png +0 -0
  277. package/src/assets/images/features/future-bnr.jpg +0 -0
  278. package/src/assets/images/features/polygon.png +0 -0
  279. package/src/assets/images/home/banner-1.jpg +0 -0
  280. package/src/assets/images/home/booking.png +0 -0
  281. package/src/assets/images/home/client.jpg +0 -0
  282. package/src/assets/images/home/client2.jpg +0 -0
  283. package/src/assets/images/home/clientlogo1.jpg +0 -0
  284. package/src/assets/images/home/clientlogo2.jpg +0 -0
  285. package/src/assets/images/home/clientlogo3.jpg +0 -0
  286. package/src/assets/images/home/clientlogo4.jpg +0 -0
  287. package/src/assets/images/home/clientlogo5.jpg +0 -0
  288. package/src/assets/images/home/easy_invoicing.png +0 -0
  289. package/src/assets/images/home/inventory.png +0 -0
  290. package/src/assets/images/home/manage.png +0 -0
  291. package/src/assets/images/home/more.png +0 -0
  292. package/src/assets/images/home/order_management.png +0 -0
  293. package/src/assets/images/home/plan.png +0 -0
  294. package/src/assets/images/home-page/AjaxLoader.gif +0 -0
  295. package/src/assets/images/home-page/ResolveIO_white.png +0 -0
  296. package/src/assets/images/home-page/abt_thumb.png +0 -0
  297. package/src/assets/images/home-page/aero_icon_right_white.png +0 -0
  298. package/src/assets/images/home-page/arrow_btn.png +0 -0
  299. package/src/assets/images/home-page/banner_thumb.png +0 -0
  300. package/src/assets/images/home-page/blank.gif +0 -0
  301. package/src/assets/images/home-page/close_icon.png +0 -0
  302. package/src/assets/images/home-page/contact_bg.jpg +0 -0
  303. package/src/assets/images/home-page/email_icon.png +0 -0
  304. package/src/assets/images/home-page/fancybox_loading.gif +0 -0
  305. package/src/assets/images/home-page/fancybox_loading@2x.gif +0 -0
  306. package/src/assets/images/home-page/fancybox_overlay.png +0 -0
  307. package/src/assets/images/home-page/fancybox_sprite.png +0 -0
  308. package/src/assets/images/home-page/fancybox_sprite@2x.png +0 -0
  309. package/src/assets/images/home-page/header_center_after.png +0 -0
  310. package/src/assets/images/home-page/header_left_after.png +0 -0
  311. package/src/assets/images/home-page/home_banner_1.jpg +0 -0
  312. package/src/assets/images/home-page/logo.png +0 -0
  313. package/src/assets/images/home-page/logo_thumb_ace.png +0 -0
  314. package/src/assets/images/home-page/logo_thumb_acquire.png +0 -0
  315. package/src/assets/images/home-page/logo_thumb_chemtech.jpeg +0 -0
  316. package/src/assets/images/home-page/logo_thumb_cherokee.png +0 -0
  317. package/src/assets/images/home-page/logo_thumb_coilchem.png +0 -0
  318. package/src/assets/images/home-page/logo_thumb_dcs.png +0 -0
  319. package/src/assets/images/home-page/logo_thumb_integrity.png +0 -0
  320. package/src/assets/images/home-page/logo_thumb_intrepid.png +0 -0
  321. package/src/assets/images/home-page/logo_thumb_omt.png +0 -0
  322. package/src/assets/images/home-page/logo_thumb_quantum.png +0 -0
  323. package/src/assets/images/home-page/logo_thumb_smartchemical.png +0 -0
  324. package/src/assets/images/home-page/logo_thumb_terra.png +0 -0
  325. package/src/assets/images/home-page/logo_thumb_truechem.png +0 -0
  326. package/src/assets/images/home-page/password_icon.png +0 -0
  327. package/src/assets/images/home-page/phone_icon.png +0 -0
  328. package/src/assets/images/home-page/software_icon_1.png +0 -0
  329. package/src/assets/images/home-page/software_icon_2.png +0 -0
  330. package/src/assets/images/home-page/software_sec_bg.jpg +0 -0
  331. package/src/assets/images/home-page/software_thumb.png +0 -0
  332. package/src/assets/images/home-page/white_arrow_btn.png +0 -0
  333. package/src/assets/images/howitwork/add-booking.png +0 -0
  334. package/src/assets/images/howitwork/add-order.png +0 -0
  335. package/src/assets/images/howitwork/add-stuff.png +0 -0
  336. package/src/assets/images/howitwork/how_banner.jpg +0 -0
  337. package/src/assets/images/howitwork/howimg1.png +0 -0
  338. package/src/assets/images/howitwork/howimg2.png +0 -0
  339. package/src/assets/images/howitwork/step-check.png +0 -0
  340. package/src/assets/images/loginsignup/formimg.jpg +0 -0
  341. package/src/assets/images/loginsignup/login-logo.png +0 -0
  342. package/src/assets/images/owl.video.play.png +0 -0
  343. package/src/assets/images/pricing/Pricing_banner.jpg +0 -0
  344. package/src/assets/images/pricing/clientlogo1.jpg +0 -0
  345. package/src/assets/images/pricing/clientlogo2.jpg +0 -0
  346. package/src/assets/images/pricing/clientlogo3.jpg +0 -0
  347. package/src/assets/images/pricing/clientlogo4.jpg +0 -0
  348. package/src/assets/images/pricing/clientlogo5.jpg +0 -0
  349. package/src/assets/images/pricing/info-ico.png +0 -0
  350. package/src/assets/scss/toastr.scss +201 -0
@@ -0,0 +1,50 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { FileUploadComponent } from './file-upload.component';
5
+ import { CollapseTableModule } from '../collapse-table/collapse-table.module';
6
+ import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
7
+ import { ResponsiveButtonGroupModule } from '../responsive-button-group/responsive-button-group.module';
8
+ import { NgxFileDropModule } from 'ngx-file-drop';
9
+ import { NgxDocViewerModule } from 'ngx-doc-viewer';
10
+ import * as i0 from "@angular/core";
11
+ export class FileModule {
12
+ }
13
+ FileModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FileModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
+ FileModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FileModule, declarations: [FileUploadComponent], imports: [CommonModule,
15
+ FormsModule,
16
+ CollapseTableModule,
17
+ NgbModule,
18
+ ResponsiveButtonGroupModule,
19
+ NgxFileDropModule,
20
+ NgxDocViewerModule], exports: [FileUploadComponent] });
21
+ FileModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FileModule, imports: [[
22
+ CommonModule,
23
+ FormsModule,
24
+ CollapseTableModule,
25
+ NgbModule,
26
+ ResponsiveButtonGroupModule,
27
+ NgxFileDropModule,
28
+ NgxDocViewerModule
29
+ ]] });
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FileModule, decorators: [{
31
+ type: NgModule,
32
+ args: [{
33
+ imports: [
34
+ CommonModule,
35
+ FormsModule,
36
+ CollapseTableModule,
37
+ NgbModule,
38
+ ResponsiveButtonGroupModule,
39
+ NgxFileDropModule,
40
+ NgxDocViewerModule
41
+ ],
42
+ declarations: [
43
+ FileUploadComponent
44
+ ],
45
+ exports: [
46
+ FileUploadComponent
47
+ ]
48
+ }]
49
+ }] });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3dpZGdldHMvZmlsZS9maWxlLXVwbG9hZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUN4RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBbUJwRCxNQUFNLE9BQU8sVUFBVTs7dUdBQVYsVUFBVTt3R0FBVixVQUFVLGlCQU5yQixtQkFBbUIsYUFUbkIsWUFBWTtRQUNaLFdBQVc7UUFDWCxtQkFBbUI7UUFDbkIsU0FBUztRQUNULDJCQUEyQjtRQUMzQixpQkFBaUI7UUFDakIsa0JBQWtCLGFBTWxCLG1CQUFtQjt3R0FHUixVQUFVLFlBaEJiO1lBQ1IsWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsU0FBUztZQUNULDJCQUEyQjtZQUMzQixpQkFBaUI7WUFDakIsa0JBQWtCO1NBQ2xCOzJGQVFXLFVBQVU7a0JBakJ0QixRQUFRO21CQUFDO29CQUNULE9BQU8sRUFBRTt3QkFDUixZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixTQUFTO3dCQUNULDJCQUEyQjt3QkFDM0IsaUJBQWlCO3dCQUNqQixrQkFBa0I7cUJBQ2xCO29CQUNELFlBQVksRUFBRTt3QkFDYixtQkFBbUI7cUJBQ25CO29CQUNELE9BQU8sRUFBRTt3QkFDUixtQkFBbUI7cUJBQ25CO2lCQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpbGVVcGxvYWRDb21wb25lbnQgfSBmcm9tICcuL2ZpbGUtdXBsb2FkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb2xsYXBzZVRhYmxlTW9kdWxlIH0gZnJvbSAnLi4vY29sbGFwc2UtdGFibGUvY29sbGFwc2UtdGFibGUubW9kdWxlJztcbmltcG9ydCB7IE5nYk1vZHVsZSB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IFJlc3BvbnNpdmVCdXR0b25Hcm91cE1vZHVsZSB9IGZyb20gJy4uL3Jlc3BvbnNpdmUtYnV0dG9uLWdyb3VwL3Jlc3BvbnNpdmUtYnV0dG9uLWdyb3VwLm1vZHVsZSc7XG5pbXBvcnQgeyBOZ3hGaWxlRHJvcE1vZHVsZSB9IGZyb20gJ25neC1maWxlLWRyb3AnO1xuaW1wb3J0IHsgTmd4RG9jVmlld2VyTW9kdWxlIH0gZnJvbSAnbmd4LWRvYy12aWV3ZXInO1xuXG5ATmdNb2R1bGUoe1xuXHRpbXBvcnRzOiBbXG5cdFx0Q29tbW9uTW9kdWxlLFxuXHRcdEZvcm1zTW9kdWxlLFxuXHRcdENvbGxhcHNlVGFibGVNb2R1bGUsXG5cdFx0TmdiTW9kdWxlLFxuXHRcdFJlc3BvbnNpdmVCdXR0b25Hcm91cE1vZHVsZSxcblx0XHROZ3hGaWxlRHJvcE1vZHVsZSxcblx0XHROZ3hEb2NWaWV3ZXJNb2R1bGVcblx0XSxcblx0ZGVjbGFyYXRpb25zOiBbXG5cdFx0RmlsZVVwbG9hZENvbXBvbmVudFxuXHRdLFxuXHRleHBvcnRzOiBbXG5cdFx0RmlsZVVwbG9hZENvbXBvbmVudFxuXHRdXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVNb2R1bGUgeyB9Il19
@@ -0,0 +1,91 @@
1
+ import { Component, Input, ViewChild } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import { ProviderService, BaseComponent } from '../../resolveio-class';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../resolveio-class";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "@ng-bootstrap/ng-bootstrap";
8
+ export class FormButtonComponent extends BaseComponent {
9
+ constructor(_services) {
10
+ super(_services);
11
+ this._services = _services;
12
+ this.disabled = false;
13
+ }
14
+ getTipErrors() {
15
+ let res = [];
16
+ if (this.form && this.form.invalid && typeof (this.form.controls) === 'object') {
17
+ let keys = Object.keys(this.form.controls);
18
+ keys.forEach(key => {
19
+ let ctrl = this.form.controls[key];
20
+ if (ctrl.invalid) {
21
+ res.push(key.replace('_id', '').replace('id_', '').replace('_', ' ').replace(/\b\S/g, function (t) { return t.toUpperCase(); }) + ' is invalid');
22
+ if (this.isSuperAdmin()) {
23
+ if (typeof (ctrl.value) === 'object' && Array.isArray(ctrl.value) && ctrl.controls) {
24
+ for (let i = 0; i < ctrl.controls.length; i++) {
25
+ let group = ctrl.controls[i];
26
+ if (group.controls) {
27
+ let arrayKeys = Object.keys(group.controls);
28
+ arrayKeys.forEach(arrayKey => {
29
+ let arrayCtrl = group.controls[arrayKey];
30
+ if (arrayCtrl.invalid) {
31
+ res.push('[' + i + '] -> ' + arrayKey.replace('_id', '').replace('id_', '').replace('_', ' ').replace(/\b\S/g, function (t) { return t.toUpperCase(); }) + ' is invalid');
32
+ }
33
+ });
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
39
+ });
40
+ }
41
+ return res;
42
+ }
43
+ isSuperAdmin() {
44
+ if (this._services._account.getUser() && this._services._account.getUser().roles.super_admin) {
45
+ return true;
46
+ }
47
+ return false;
48
+ }
49
+ }
50
+ FormButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FormButtonComponent, deps: [{ token: i1.ProviderService }], target: i0.ɵɵFactoryTarget.Component });
51
+ FormButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: FormButtonComponent, selector: "form-button", inputs: { form: "form", disabled: "disabled" }, providers: [ProviderService], viewQueries: [{ propertyName: "formButton", first: true, predicate: ["formButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
52
+ <div style="position: relative; text-align: left; width: 100%">
53
+ <ng-template #tipContent>
54
+ <span style="font-weight: bold">Errors:<br></span>
55
+ <ul>
56
+ <li *ngFor="let error of getTipErrors()">{{error}}</li>
57
+ </ul>
58
+ </ng-template>
59
+ <div [ngbTooltip]="(getTipErrors().length ? tipContent : '')" placement="top-left" #t>
60
+ <button type="submit" [ngClass]="['btn', form && form.valid ? 'btn-success' : 'btn-danger']" [disabled]="!form || !form.valid || disabled" style="width: 200px" [autofocus]="true" #formButton>Submit</button>
61
+ </div>
62
+ </div>
63
+ `, isInline: true, directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FormButtonComponent, decorators: [{
65
+ type: Component,
66
+ args: [{
67
+ providers: [ProviderService],
68
+ selector: 'form-button',
69
+ template: `
70
+ <div style="position: relative; text-align: left; width: 100%">
71
+ <ng-template #tipContent>
72
+ <span style="font-weight: bold">Errors:<br></span>
73
+ <ul>
74
+ <li *ngFor="let error of getTipErrors()">{{error}}</li>
75
+ </ul>
76
+ </ng-template>
77
+ <div [ngbTooltip]="(getTipErrors().length ? tipContent : '')" placement="top-left" #t>
78
+ <button type="submit" [ngClass]="['btn', form && form.valid ? 'btn-success' : 'btn-danger']" [disabled]="!form || !form.valid || disabled" style="width: 200px" [autofocus]="true" #formButton>Submit</button>
79
+ </div>
80
+ </div>
81
+ `
82
+ }]
83
+ }], ctorParameters: function () { return [{ type: i1.ProviderService }]; }, propDecorators: { form: [{
84
+ type: Input
85
+ }], disabled: [{
86
+ type: Input
87
+ }], formButton: [{
88
+ type: ViewChild,
89
+ args: ['formButton', { static: false }]
90
+ }] } });
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3dpZGdldHMvZm9ybS1idXR0b24vZm9ybS1idXR0b24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7QUFvQnZFLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxhQUFhO0lBTXJELFlBQW9CLFNBQTBCO1FBQzdDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQURFLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBSnJDLGFBQVEsR0FBRyxLQUFLLENBQUM7SUFNMUIsQ0FBQztJQUVELFlBQVk7UUFDWCxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFFYixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQzlFLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUUzQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFbkMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNqQixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7b0JBRWhKLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFO3dCQUN4QixJQUFJLE9BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFnQixJQUFLLENBQUMsUUFBUSxFQUFFOzRCQUMvRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQWUsSUFBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0NBQzNELElBQUksS0FBSyxHQUEyQixJQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBRSxDQUFDO2dDQUV2RCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7b0NBQ25CLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29DQUU1QyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO3dDQUM1QixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dDQUV6QyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUU7NENBQ3RCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBUyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQzt5Q0FDeks7b0NBQ0YsQ0FBQyxDQUFDLENBQUM7aUNBQ0g7NkJBQ0Q7eUJBQ0Q7cUJBQ0Q7aUJBQ0Q7WUFDRixDQUFDLENBQUMsQ0FBQztTQUNIO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDWixDQUFDO0lBRUQsWUFBWTtRQUNYLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtZQUM3RixPQUFPLElBQUksQ0FBQztTQUNaO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDOztnSEF0RFcsbUJBQW1CO29HQUFuQixtQkFBbUIsc0ZBakJwQixDQUFDLGVBQWUsQ0FBQywySkFFbEI7Ozs7Ozs7Ozs7OztFQVlUOzJGQUdXLG1CQUFtQjtrQkFsQi9CLFNBQVM7bUJBQUM7b0JBQ1YsU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDO29CQUM1QixRQUFRLEVBQUUsYUFBYTtvQkFDdkIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7RUFZVDtpQkFDRDtzR0FHUyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFMkMsVUFBVTtzQkFBMUQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgUHJvdmlkZXJTZXJ2aWNlLCBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcmVzb2x2ZWlvLWNsYXNzJztcblxuQENvbXBvbmVudCh7XG5cdHByb3ZpZGVyczogW1Byb3ZpZGVyU2VydmljZV0sXG5cdHNlbGVjdG9yOiAnZm9ybS1idXR0b24nLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7IHRleHQtYWxpZ246IGxlZnQ7IHdpZHRoOiAxMDAlXCI+XG5cdFx0XHQ8bmctdGVtcGxhdGUgI3RpcENvbnRlbnQ+XG5cdFx0XHRcdDxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGRcIj5FcnJvcnM6PGJyPjwvc3Bhbj5cblx0XHRcdFx0PHVsPlxuXHRcdFx0XHRcdDxsaSAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgZ2V0VGlwRXJyb3JzKClcIj57e2Vycm9yfX08L2xpPlxuXHRcdFx0XHQ8L3VsPlxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDxkaXYgW25nYlRvb2x0aXBdPVwiKGdldFRpcEVycm9ycygpLmxlbmd0aCA/IHRpcENvbnRlbnQgOiAnJylcIiBwbGFjZW1lbnQ9XCJ0b3AtbGVmdFwiICN0PlxuXHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBbbmdDbGFzc109XCJbJ2J0bicsIGZvcm0gJiYgZm9ybS52YWxpZCA/ICdidG4tc3VjY2VzcycgOiAnYnRuLWRhbmdlciddXCIgW2Rpc2FibGVkXT1cIiFmb3JtIHx8ICFmb3JtLnZhbGlkIHx8IGRpc2FibGVkXCIgc3R5bGU9XCJ3aWR0aDogMjAwcHhcIiBbYXV0b2ZvY3VzXT1cInRydWVcIiAjZm9ybUJ1dHRvbj5TdWJtaXQ8L2J1dHRvbj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHRgXG59KVxuXG5leHBvcnQgY2xhc3MgRm9ybUJ1dHRvbkNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgeyBcblx0QElucHV0KCkgZm9ybTogRm9ybUdyb3VwO1xuXHRASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG5cdEBWaWV3Q2hpbGQoJ2Zvcm1CdXR0b24nLCB7c3RhdGljOiBmYWxzZX0pIHB1YmxpYyBmb3JtQnV0dG9uO1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgX3NlcnZpY2VzOiBQcm92aWRlclNlcnZpY2UpIHtcblx0XHRzdXBlcihfc2VydmljZXMpO1xuXHR9XG5cblx0Z2V0VGlwRXJyb3JzKCkge1xuXHRcdGxldCByZXMgPSBbXTtcblxuXHRcdGlmICh0aGlzLmZvcm0gJiYgdGhpcy5mb3JtLmludmFsaWQgJiYgdHlwZW9mKHRoaXMuZm9ybS5jb250cm9scykgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRsZXQga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybS5jb250cm9scyk7XG5cblx0XHRcdGtleXMuZm9yRWFjaChrZXkgPT4ge1xuXHRcdFx0XHRsZXQgY3RybCA9IHRoaXMuZm9ybS5jb250cm9sc1trZXldO1xuXG5cdFx0XHRcdGlmIChjdHJsLmludmFsaWQpIHtcblx0XHRcdFx0XHRyZXMucHVzaChrZXkucmVwbGFjZSgnX2lkJywgJycpLnJlcGxhY2UoJ2lkXycsICcnKS5yZXBsYWNlKCdfJywgJyAnKS5yZXBsYWNlKC9cXGJcXFMvZywgZnVuY3Rpb24odCkgeyByZXR1cm4gdC50b1VwcGVyQ2FzZSgpOyB9KSArICcgaXMgaW52YWxpZCcpO1xuXG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNTdXBlckFkbWluKCkpIHtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YoY3RybC52YWx1ZSkgPT09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkoY3RybC52YWx1ZSkgJiYgKDxGb3JtQXJyYXk+Y3RybCkuY29udHJvbHMpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAoPEZvcm1BcnJheT5jdHJsKS5jb250cm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdGxldCBncm91cCA9ICg8Rm9ybUdyb3VwPig8Rm9ybUFycmF5PmN0cmwpLmNvbnRyb2xzW2ldKTtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChncm91cC5jb250cm9scykge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGFycmF5S2V5cyA9IE9iamVjdC5rZXlzKGdyb3VwLmNvbnRyb2xzKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0YXJyYXlLZXlzLmZvckVhY2goYXJyYXlLZXkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgYXJyYXlDdHJsID0gZ3JvdXAuY29udHJvbHNbYXJyYXlLZXldO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhcnJheUN0cmwuaW52YWxpZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcy5wdXNoKCdbJyArIGkgKyAnXSAtPiAnICsgYXJyYXlLZXkucmVwbGFjZSgnX2lkJywgJycpLnJlcGxhY2UoJ2lkXycsICcnKS5yZXBsYWNlKCdfJywgJyAnKS5yZXBsYWNlKC9cXGJcXFMvZywgZnVuY3Rpb24odCkgeyByZXR1cm4gdC50b1VwcGVyQ2FzZSgpOyB9KSArICcgaXMgaW52YWxpZCcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRpc1N1cGVyQWRtaW4oKSB7XG5cdFx0aWYgKHRoaXMuX3NlcnZpY2VzLl9hY2NvdW50LmdldFVzZXIoKSAmJiB0aGlzLl9zZXJ2aWNlcy5fYWNjb3VudC5nZXRVc2VyKCkucm9sZXMuc3VwZXJfYWRtaW4pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuIl19
@@ -0,0 +1,30 @@
1
+ import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';
2
+ import { NgModule } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ import { FormButtonComponent } from './form-button.component';
5
+ import * as i0 from "@angular/core";
6
+ export class FormButtonModule {
7
+ }
8
+ FormButtonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FormButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ FormButtonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FormButtonModule, declarations: [FormButtonComponent], imports: [CommonModule,
10
+ NgbTooltipModule], exports: [FormButtonComponent] });
11
+ FormButtonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FormButtonModule, imports: [[
12
+ CommonModule,
13
+ NgbTooltipModule
14
+ ]] });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FormButtonModule, decorators: [{
16
+ type: NgModule,
17
+ args: [{
18
+ imports: [
19
+ CommonModule,
20
+ NgbTooltipModule
21
+ ],
22
+ exports: [
23
+ FormButtonComponent
24
+ ],
25
+ declarations: [
26
+ FormButtonComponent
27
+ ]
28
+ }]
29
+ }] });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1idXR0b24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3dpZGdldHMvZm9ybS1idXR0b24vZm9ybS1idXR0b24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQWM5RCxNQUFNLE9BQU8sZ0JBQWdCOzs2R0FBaEIsZ0JBQWdCOzhHQUFoQixnQkFBZ0IsaUJBSDNCLG1CQUFtQixhQVBuQixZQUFZO1FBQ1osZ0JBQWdCLGFBR2hCLG1CQUFtQjs4R0FNUixnQkFBZ0IsWUFYbkI7WUFDUixZQUFZO1lBQ1osZ0JBQWdCO1NBQ2hCOzJGQVFXLGdCQUFnQjtrQkFaNUIsUUFBUTttQkFBQztvQkFDVCxPQUFPLEVBQUU7d0JBQ1IsWUFBWTt3QkFDWixnQkFBZ0I7cUJBQ2hCO29CQUNELE9BQU8sRUFBRTt3QkFDUixtQkFBbUI7cUJBQ25CO29CQUNELFlBQVksRUFBRTt3QkFDYixtQkFBbUI7cUJBQ25CO2lCQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdiVG9vbHRpcE1vZHVsZSB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nOyBcblxuaW1wb3J0IHsgRm9ybUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1idXR0b24uY29tcG9uZW50JztcdFx0XHRcblxuQE5nTW9kdWxlKHtcblx0aW1wb3J0czogW1xuXHRcdENvbW1vbk1vZHVsZSxcblx0XHROZ2JUb29sdGlwTW9kdWxlXG5cdF0sXG5cdGV4cG9ydHM6IFtcblx0XHRGb3JtQnV0dG9uQ29tcG9uZW50XG5cdF0sXG5cdGRlY2xhcmF0aW9uczogW1xuXHRcdEZvcm1CdXR0b25Db21wb25lbnRcblx0XVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtQnV0dG9uTW9kdWxlIHsgfVxuIl19
@@ -0,0 +1,209 @@
1
+ import { BaseComponent, ProviderService } from '../../resolveio-class';
2
+ import { Component, Input, QueryList, ViewChildren, ViewChild, ElementRef } from '@angular/core';
3
+ import { AuthService } from '../../auth/auth.service';
4
+ import { Validators } from '@angular/forms';
5
+ import { DialogService } from '../dialog/dialog.service';
6
+ import { CoreService } from '../../core.service';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../resolveio-class";
9
+ import * as i2 from "../../auth/auth.service";
10
+ import * as i3 from "../dialog/dialog.service";
11
+ import * as i4 from "../../core.service";
12
+ import * as i5 from "@ng-bootstrap/ng-bootstrap";
13
+ import * as i6 from "@angular/common";
14
+ import * as i7 from "@angular/router";
15
+ import * as i8 from "../../directive/scroll";
16
+ export class NavbarMainComponent extends BaseComponent {
17
+ constructor(_services, auth, _ds, _app) {
18
+ super(_services);
19
+ this._services = _services;
20
+ this.auth = auth;
21
+ this._ds = _ds;
22
+ this._app = _app;
23
+ this.logo = '';
24
+ this.navTabs = [];
25
+ this.fontSize = 12;
26
+ this.user = null;
27
+ this.collapseShowing = false;
28
+ this.client = '';
29
+ this.isResolveIO = false;
30
+ this.standardProgram = false;
31
+ this.tourStarted = false;
32
+ this.scrollRightInterval = null;
33
+ this.scrollLeftInterval = null;
34
+ this.isDemo = false;
35
+ }
36
+ ngOnInit() {
37
+ this._services._account.user.subscribe(user => {
38
+ this.user = user;
39
+ });
40
+ this.client = this._app.client.getValue();
41
+ this.standardProgram = this._app.standardProgram.getValue();
42
+ this.tourStarted = this._services._app.tourStarted.getValue();
43
+ if (!this.client) {
44
+ this.isResolveIO = true;
45
+ }
46
+ this._services._app.tourStarted.subscribe(tourStarted => {
47
+ this.tourStarted = tourStarted;
48
+ });
49
+ this._services._app.isDemo.subscribe(isDemo => {
50
+ this.isDemo = isDemo;
51
+ });
52
+ }
53
+ ngAfterViewInit() {
54
+ setInterval(() => {
55
+ this.calculateDropdownsLeft();
56
+ }, 500);
57
+ document.documentElement.style.setProperty('--font-size', this.fontSize + 'px');
58
+ }
59
+ logout() {
60
+ this._app.isLoggingOut.next(true);
61
+ this._services._router.navigateByUrl('/home');
62
+ this._services._account.logOut();
63
+ }
64
+ login() {
65
+ this.auth.loginUser().then(() => { }, err => { });
66
+ }
67
+ hasScrolled() {
68
+ if (this.scrollable.nativeElement.scrollLeft <= 0) {
69
+ this.stopScrollRight();
70
+ }
71
+ return this.scrollable.nativeElement.scrollLeft > 0 ? true : false;
72
+ }
73
+ hasMoreScroll() {
74
+ if (this.scrollable.nativeElement.scrollWidth <= this.scrollable.nativeElement.clientWidth + this.scrollable.nativeElement.scrollLeft) {
75
+ this.stopScrollLeft();
76
+ }
77
+ return this.scrollable.nativeElement.scrollWidth > this.scrollable.nativeElement.clientWidth + this.scrollable.nativeElement.scrollLeft ? true : false;
78
+ }
79
+ startScrollRight() {
80
+ this.scrollRightInterval = setInterval(() => {
81
+ this.scrollable.nativeElement.scrollLeft -= 1;
82
+ }, 1);
83
+ }
84
+ stopScrollRight() {
85
+ clearInterval(this.scrollRightInterval);
86
+ }
87
+ scrollRightOnce() {
88
+ this.scrollable.nativeElement.scrollLeft -= 50;
89
+ }
90
+ startScrollLeft() {
91
+ this.scrollLeftInterval = setInterval(() => {
92
+ this.scrollable.nativeElement.scrollLeft += 1;
93
+ }, 1);
94
+ }
95
+ stopScrollLeft() {
96
+ clearInterval(this.scrollLeftInterval);
97
+ }
98
+ scrollLeftOnce() {
99
+ this.scrollable.nativeElement.scrollLeft += 50;
100
+ }
101
+ calculateDropdownsLeft() {
102
+ if (this.dropdowns && this.dropdowns.toArray() && this.dropdowns.toArray().length && this.scrollable) {
103
+ this.navTabs.filter(a => a.type === 'dropdown').forEach(tab => {
104
+ let dropDown = this.dropdowns.toArray().filter(a => a.nativeElement.innerText.split('\n')[0].replace(/[^A-Za-z0-9]/g, '') === tab.label.replace(/[^A-Za-z0-9]/g, ''))[0];
105
+ if (dropDown) {
106
+ tab.left = Math.max(dropDown.nativeElement.offsetLeft - this.scrollable.nativeElement.scrollLeft, this.scrollable.nativeElement.offsetLeft);
107
+ }
108
+ else {
109
+ tab.left = 0;
110
+ }
111
+ });
112
+ return true;
113
+ }
114
+ return false;
115
+ }
116
+ isInRole(role) {
117
+ if (this.isSuperAdmin()) {
118
+ return true;
119
+ }
120
+ if (this.user) {
121
+ if (this.user.roles.groups) {
122
+ for (let i = 0; i < this.user.roles.groups.length; i++) {
123
+ let group = this.user.roles.groups[i];
124
+ for (let j = 0; j < group.views.length; j++) {
125
+ let view = group.views[j];
126
+ if (view === role || view.startsWith(role + '/')) {
127
+ return true;
128
+ }
129
+ }
130
+ }
131
+ }
132
+ }
133
+ return false;
134
+ }
135
+ isSuperAdmin() {
136
+ return this.user && this.user.roles ? this.user.roles.super_admin : false;
137
+ }
138
+ isInOneRole(roles) {
139
+ if (this.isSuperAdmin()) {
140
+ return true;
141
+ }
142
+ for (let i = 0; i < roles.length; i++) {
143
+ let role = roles[i];
144
+ if (this._services._account.isUserInView(role)) {
145
+ return true;
146
+ }
147
+ }
148
+ return false;
149
+ }
150
+ navigateTo(route) {
151
+ this._services._router.navigateByUrl(route);
152
+ }
153
+ help() {
154
+ this._ds.input('What do you need help with?', [
155
+ {
156
+ label: 'Title of Problem',
157
+ form: 'problem_title',
158
+ data: '',
159
+ validators: [Validators.required],
160
+ validatorErrors: ['required'],
161
+ validatorMsg: ['Problem title is required.'],
162
+ required: true
163
+ },
164
+ {
165
+ label: 'Description of Problem',
166
+ form: 'problem_desc',
167
+ data: '',
168
+ validators: [Validators.required],
169
+ validatorErrors: ['required'],
170
+ validatorMsg: ['Problem description is required.'],
171
+ required: true,
172
+ type: 'textarea'
173
+ }
174
+ ]).then(helpRes => {
175
+ this._services._socket.call('getHelpNotification', this._services._account.getUser().fullname, helpRes.problem_title.value, helpRes.problem_desc.value);
176
+ }, () => { });
177
+ }
178
+ isCustomer() {
179
+ return this._services._account.getUser().other.customers && this._services._account.getUser().other.customers.length ? true : false;
180
+ }
181
+ getWindowWidth() {
182
+ return window.innerWidth;
183
+ }
184
+ print() {
185
+ window.print();
186
+ }
187
+ }
188
+ NavbarMainComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: NavbarMainComponent, deps: [{ token: i1.ProviderService }, { token: i2.AuthService }, { token: i3.DialogService }, { token: i4.CoreService }], target: i0.ɵɵFactoryTarget.Component });
189
+ NavbarMainComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: NavbarMainComponent, selector: "navbar-main", inputs: { logo: "logo", navTabs: "navTabs", fontSize: "fontSize" }, providers: [ProviderService], viewQueries: [{ propertyName: "scrollable", first: true, predicate: ["scrollable"], descendants: true, static: true }, { propertyName: "dropdowns", predicate: ["dropdowns"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<style>\n\t:root {\n --font-size: 12;\n }\n\n\t:host /deep/ * {\n\t\tfont-size: var(--font-size);\n\t}\n\n @media (max-width: 1200px) {\n .navbarMain a {\n font-size: 18px !important;\n }\n }\n @media (min-width: 1200px) {\n .scrollable-x {\n max-width: 60vw;\n overflow-x: auto;\n overflow-y: visible;\n align-items: center;\n }\n\n ::-webkit-scrollbar {\n display: none;\n }\n\n .verticalAlign {\n display: flex;\n align-items: center;\n }\n\n .dropdown {\n position: static;\n }\n }\n\n .navbar li {\n cursor: pointer;\n text-align: center;\n }\n\n .navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: gray;\n }\n</style>\n\n<div class=\"row\">\n <nav class=\"navbar navbar-expand-xl navbar-dark bg-dark navbarMain\" style=\"width: 100%\">\n <a class=\"navbar-brand\" href=\"#\">\n <img [src]=\"logo\" style=\"width: auto; height: 36px;\" *ngIf=\"!isDemo\">\n </a>\n <button class=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" aria-controls=\"navbarMainNav\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-collapse collapse\" id=\"navbarMainNav\">\n <ul class=\"navbar-nav\">\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" *ngIf=\"!standardProgram\" [style.border-right]=\"getWindowWidth() > 1200 ? '1px solid white' : ''\">\n <a class=\"nav-link\" routerLink=\"home\" [class.disabled]=\"tourStarted ? true : null\" routerLinkActive=\"active\">Home</a>\n </li>\n <ng-container *ngIf=\"standardProgram\">\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" routerLink=\"home-standard\" routerLinkActive=\"active\">Home</a>\n </li>\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" *ngIf=\"!user\">\n <a class=\"nav-link\" routerLink=\"contactus-standard\" routerLinkActive=\"active\">Contact Us</a>\n </li>\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" *ngIf=\"!user\">\n <a class=\"nav-link\" routerLink=\"faq\" routerLinkActive=\"active\">FAQ</a>\n </li>\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" *ngIf=\"!user\">\n <a class=\"nav-link\" routerLink=\"features\" routerLinkActive=\"active\">Features</a>\n </li>\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" *ngIf=\"!user\">\n <a class=\"nav-link\" routerLink=\"howitwork\" routerLinkActive=\"active\">How It Works</a>\n </li>\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" *ngIf=\"!user\">\n <a class=\"nav-link\" routerLink=\"pricing\" routerLinkActive=\"active\">Pricing</a>\n </li> \n </ng-container>\n <!-- <ng-container *ngIf=\"isResolveIO && !standardProgram\">\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" routerLink=\"about-us\" routerLinkActive=\"active\">About Us</a>\n </li>\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" routerLink=\"contact-us\" routerLinkActive=\"active\">Contact Us</a>\n </li>\n </ng-container> -->\n </ul>\n <div *ngIf=\"hasScrolled()\" (mouseover)=\"startScrollRight()\" (mouseout)=\"stopScrollRight()\" (click)=\"scrollRightOnce()\">\n <i class=\"fa fa-arrow-left\" style=\"color: white; font-size: 20px\"></i>\n </div>\n <ul [ngClass]=\"['navbar-nav', 'scrollable-x']\" #scrollable detect-scroll (onScroll)=\"calculateDropdownsLeft()\">\n <ng-container *ngFor=\"let tab of navTabs; let i = index;\">\n <ng-container *ngIf=\"tab.type === 'link'\">\n <!-- <li class=\"nav-item\" *ngIf=\"user && isInRole(tab.links[0].role)\" data-toggle=\"collapse\" [tourAnchor]=\"tab.tourAnchor\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" [routerLink]=\"tab.links[0].routerLink\" routerLinkActive=\"active\">{{tab.links[0].label}}</a>\n </li> -->\n <li class=\"nav-item\" *ngIf=\"user && isInRole(tab.links[0].role)\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" [routerLink]=\"tab.links[0].routerLink\" routerLinkActive=\"active\">{{tab.links[0].label}}</a>\n </li>\n </ng-container>\n <ng-container *ngIf=\"tab.type === 'dropdown'\">\n <li #dropdowns class=\"nav-item dropdown\" *ngIf=\"user && isInOneRole(tab.roles)\">\n <!-- <a class=\"nav-link dropdown-toggle\" [class.disabled]=\"tourStarted ? true : null\" id=\"navbarDropdownAsset\" role=\"button\" [tourAnchor]=\"tab.tourAnchor\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n {{tab.label}}\n </a> -->\n <a class=\"nav-link dropdown-toggle\" [class.disabled]=\"tourStarted ? true : null\" id=\"navbarDropdownAsset\" role=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n {{tab.label}}\n </a>\n <div class=\"dropdown-menu bg-dark\" aria-labelledby=\"navbarDropdownAsset\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" [style.left.px]=\"tab.left || 0\">\n <ng-container *ngFor=\"let link of tab.links\">\n <a class=\"dropdown-item nav-link\" *ngIf=\"user && isInRole(link.role)\" [routerLink]=\"link.routerLink\">{{link.label}}</a>\n </ng-container>\n </div>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n <div *ngIf=\"hasMoreScroll()\" (mouseover)=\"startScrollLeft()\" (mouseout)=\"stopScrollLeft()\" (click)=\"scrollLeftOnce()\">\n <i class=\"fa fa-arrow-right\" style=\"color: white; font-size: 20px\"></i>\n </div>\n <hr />\n <ul [ngClass]=\"['navbar-nav', getWindowWidth() > 1200 ? 'float-lg-right' : '']\">\n <li class=\"nav-item\" *ngIf=\"user\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" [style.border-left]=\"getWindowWidth() > 1200 ? '1px solid white' : ''\" style=\"height: 30px;\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" (click)=\"print()\" style=\"cursor: pointer;\"><i style=\"font-size:20px; color: white;\" class=\"fa fa-print\" aria-hidden=\"true\"></i></a>\n </li>\n <li class=\"nav-item\" *ngIf=\"user && client\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" style=\"height: 30px;\" tourAnchor=\"supportSection\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" routerLink=\"support-ticket\" routerLinkActive=\"active\">Support</a>\n </li>\n <li class=\"nav-item\" *ngIf=\"user && isInRole('super-admin')\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" routerLink=\"logs\" routerLinkActive=\"active\">Logs</a>\n </li>\n <li class=\"nav-item\" *ngIf=\"user && isInRole('super-admin')\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" routerLink=\"super-admin\" routerLinkActive=\"active\">Super Admin</a>\n </li>\n </ul>\n <hr />\n <ul [ngClass]=\"['navbar-nav', getWindowWidth() > 1200 ? 'float-lg-right' : '']\">\n <li class=\"nav-item\" *ngIf=\"!user\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" (click)=\"login()\" style=\"cursor: pointer;\" routerLinkActive=\"active\">Login</a>\n </li>\n <li class=\"nav-item\" *ngIf=\"user\" tourAnchor=\"userSettings\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" routerLink=\"user-settings\">Hello {{user.fullname}}!</a>\n </li>\n <li class=\"nav-item\" *ngIf=\"user\" style=\"cursor: pointer\" (click)=\"logout()\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\">Logout</a>\n <li>\n </ul>\n </div>\n </nav>\n</div>", styles: ["\n\t:root {\n --font-size: 12;\n }\n\n\t:host /deep/ * {\n\t\tfont-size: var(--font-size);\n\t}\n\n @media (max-width: 1200px) {\n .navbarMain a {\n font-size: 18px !important;\n }\n }\n @media (min-width: 1200px) {\n .scrollable-x {\n max-width: 60vw;\n overflow-x: auto;\n overflow-y: visible;\n align-items: center;\n }\n\n ::-webkit-scrollbar {\n display: none;\n }\n\n .verticalAlign {\n display: flex;\n align-items: center;\n }\n\n .dropdown {\n position: static;\n }\n }\n\n .navbar li {\n cursor: pointer;\n text-align: center;\n }\n\n .navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: gray;\n }\n"], directives: [{ type: i5.NgbNavbar, selector: ".navbar" }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i7.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { type: i8.ScrollDirective, selector: "[detect-scroll]", inputs: ["bottomOffset", "topOffset"], outputs: ["onScroll"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
190
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: NavbarMainComponent, decorators: [{
191
+ type: Component,
192
+ args: [{ selector: 'navbar-main', providers: [ProviderService], template: "<style>\n\t:root {\n --font-size: 12;\n }\n\n\t:host /deep/ * {\n\t\tfont-size: var(--font-size);\n\t}\n\n @media (max-width: 1200px) {\n .navbarMain a {\n font-size: 18px !important;\n }\n }\n @media (min-width: 1200px) {\n .scrollable-x {\n max-width: 60vw;\n overflow-x: auto;\n overflow-y: visible;\n align-items: center;\n }\n\n ::-webkit-scrollbar {\n display: none;\n }\n\n .verticalAlign {\n display: flex;\n align-items: center;\n }\n\n .dropdown {\n position: static;\n }\n }\n\n .navbar li {\n cursor: pointer;\n text-align: center;\n }\n\n .navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: gray;\n }\n</style>\n\n<div class=\"row\">\n <nav class=\"navbar navbar-expand-xl navbar-dark bg-dark navbarMain\" style=\"width: 100%\">\n <a class=\"navbar-brand\" href=\"#\">\n <img [src]=\"logo\" style=\"width: auto; height: 36px;\" *ngIf=\"!isDemo\">\n </a>\n <button class=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" aria-controls=\"navbarMainNav\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-collapse collapse\" id=\"navbarMainNav\">\n <ul class=\"navbar-nav\">\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" *ngIf=\"!standardProgram\" [style.border-right]=\"getWindowWidth() > 1200 ? '1px solid white' : ''\">\n <a class=\"nav-link\" routerLink=\"home\" [class.disabled]=\"tourStarted ? true : null\" routerLinkActive=\"active\">Home</a>\n </li>\n <ng-container *ngIf=\"standardProgram\">\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" routerLink=\"home-standard\" routerLinkActive=\"active\">Home</a>\n </li>\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" *ngIf=\"!user\">\n <a class=\"nav-link\" routerLink=\"contactus-standard\" routerLinkActive=\"active\">Contact Us</a>\n </li>\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" *ngIf=\"!user\">\n <a class=\"nav-link\" routerLink=\"faq\" routerLinkActive=\"active\">FAQ</a>\n </li>\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" *ngIf=\"!user\">\n <a class=\"nav-link\" routerLink=\"features\" routerLinkActive=\"active\">Features</a>\n </li>\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" *ngIf=\"!user\">\n <a class=\"nav-link\" routerLink=\"howitwork\" routerLinkActive=\"active\">How It Works</a>\n </li>\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" *ngIf=\"!user\">\n <a class=\"nav-link\" routerLink=\"pricing\" routerLinkActive=\"active\">Pricing</a>\n </li> \n </ng-container>\n <!-- <ng-container *ngIf=\"isResolveIO && !standardProgram\">\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" routerLink=\"about-us\" routerLinkActive=\"active\">About Us</a>\n </li>\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" routerLink=\"contact-us\" routerLinkActive=\"active\">Contact Us</a>\n </li>\n </ng-container> -->\n </ul>\n <div *ngIf=\"hasScrolled()\" (mouseover)=\"startScrollRight()\" (mouseout)=\"stopScrollRight()\" (click)=\"scrollRightOnce()\">\n <i class=\"fa fa-arrow-left\" style=\"color: white; font-size: 20px\"></i>\n </div>\n <ul [ngClass]=\"['navbar-nav', 'scrollable-x']\" #scrollable detect-scroll (onScroll)=\"calculateDropdownsLeft()\">\n <ng-container *ngFor=\"let tab of navTabs; let i = index;\">\n <ng-container *ngIf=\"tab.type === 'link'\">\n <!-- <li class=\"nav-item\" *ngIf=\"user && isInRole(tab.links[0].role)\" data-toggle=\"collapse\" [tourAnchor]=\"tab.tourAnchor\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" [routerLink]=\"tab.links[0].routerLink\" routerLinkActive=\"active\">{{tab.links[0].label}}</a>\n </li> -->\n <li class=\"nav-item\" *ngIf=\"user && isInRole(tab.links[0].role)\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" [routerLink]=\"tab.links[0].routerLink\" routerLinkActive=\"active\">{{tab.links[0].label}}</a>\n </li>\n </ng-container>\n <ng-container *ngIf=\"tab.type === 'dropdown'\">\n <li #dropdowns class=\"nav-item dropdown\" *ngIf=\"user && isInOneRole(tab.roles)\">\n <!-- <a class=\"nav-link dropdown-toggle\" [class.disabled]=\"tourStarted ? true : null\" id=\"navbarDropdownAsset\" role=\"button\" [tourAnchor]=\"tab.tourAnchor\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n {{tab.label}}\n </a> -->\n <a class=\"nav-link dropdown-toggle\" [class.disabled]=\"tourStarted ? true : null\" id=\"navbarDropdownAsset\" role=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n {{tab.label}}\n </a>\n <div class=\"dropdown-menu bg-dark\" aria-labelledby=\"navbarDropdownAsset\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" [style.left.px]=\"tab.left || 0\">\n <ng-container *ngFor=\"let link of tab.links\">\n <a class=\"dropdown-item nav-link\" *ngIf=\"user && isInRole(link.role)\" [routerLink]=\"link.routerLink\">{{link.label}}</a>\n </ng-container>\n </div>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n <div *ngIf=\"hasMoreScroll()\" (mouseover)=\"startScrollLeft()\" (mouseout)=\"stopScrollLeft()\" (click)=\"scrollLeftOnce()\">\n <i class=\"fa fa-arrow-right\" style=\"color: white; font-size: 20px\"></i>\n </div>\n <hr />\n <ul [ngClass]=\"['navbar-nav', getWindowWidth() > 1200 ? 'float-lg-right' : '']\">\n <li class=\"nav-item\" *ngIf=\"user\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" [style.border-left]=\"getWindowWidth() > 1200 ? '1px solid white' : ''\" style=\"height: 30px;\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" (click)=\"print()\" style=\"cursor: pointer;\"><i style=\"font-size:20px; color: white;\" class=\"fa fa-print\" aria-hidden=\"true\"></i></a>\n </li>\n <li class=\"nav-item\" *ngIf=\"user && client\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" style=\"height: 30px;\" tourAnchor=\"supportSection\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" routerLink=\"support-ticket\" routerLinkActive=\"active\">Support</a>\n </li>\n <li class=\"nav-item\" *ngIf=\"user && isInRole('super-admin')\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" routerLink=\"logs\" routerLinkActive=\"active\">Logs</a>\n </li>\n <li class=\"nav-item\" *ngIf=\"user && isInRole('super-admin')\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" routerLink=\"super-admin\" routerLinkActive=\"active\">Super Admin</a>\n </li>\n </ul>\n <hr />\n <ul [ngClass]=\"['navbar-nav', getWindowWidth() > 1200 ? 'float-lg-right' : '']\">\n <li class=\"nav-item\" *ngIf=\"!user\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" (click)=\"login()\" style=\"cursor: pointer;\" routerLinkActive=\"active\">Login</a>\n </li>\n <li class=\"nav-item\" *ngIf=\"user\" tourAnchor=\"userSettings\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" routerLink=\"user-settings\">Hello {{user.fullname}}!</a>\n </li>\n <li class=\"nav-item\" *ngIf=\"user\" style=\"cursor: pointer\" (click)=\"logout()\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\">Logout</a>\n <li>\n </ul>\n </div>\n </nav>\n</div>" }]
193
+ }], ctorParameters: function () { return [{ type: i1.ProviderService }, { type: i2.AuthService }, { type: i3.DialogService }, { type: i4.CoreService }]; }, propDecorators: { dropdowns: [{
194
+ type: ViewChildren,
195
+ args: ['dropdowns']
196
+ }], scrollable: [{
197
+ type: ViewChild,
198
+ args: ['scrollable', { static: true }]
199
+ }], logo: [{
200
+ type: Input,
201
+ args: ['logo']
202
+ }], navTabs: [{
203
+ type: Input,
204
+ args: ['navTabs']
205
+ }], fontSize: [{
206
+ type: Input,
207
+ args: ['fontSize']
208
+ }] } });
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2YmFyLW1haW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3dpZGdldHMvbmF2YmFyLW1haW4vbmF2YmFyLW1haW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3dpZGdldHMvbmF2YmFyLW1haW4vbmF2YmFyLW1haW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQWlCLFlBQVksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRXhILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7OztBQU9qRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsYUFBYTtJQXNCckQsWUFBb0IsU0FBMEIsRUFBVSxJQUFpQixFQUFVLEdBQWtCLEVBQVUsSUFBaUI7UUFDL0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBREUsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFhO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBZTtRQUFVLFNBQUksR0FBSixJQUFJLENBQWE7UUFqQmpILFNBQUksR0FBRyxFQUFFLENBQUM7UUFDUCxZQUFPLEdBQXlCLEVBQUUsQ0FBQztRQUNsQyxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBRWpD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Q0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6SixDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRUQsVUFBVTtRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDckksQ0FBQztJQUVELGNBQWM7UUFDYixPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDMUIsQ0FBQztJQUVELEtBQUs7UUFDSixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEIsQ0FBQzs7Z0hBak5XLG1CQUFtQjtvR0FBbkIsbUJBQW1CLDBHQUZwQixDQUFDLGVBQWUsQ0FBQyxxUENiN0IsNGpUQXNKTTsyRkR2SU8sbUJBQW1CO2tCQUwvQixTQUFTOytCQUNDLGFBQWEsYUFFWixDQUFDLGVBQWUsQ0FBQztzTEFJRCxTQUFTO3NCQUFuQyxZQUFZO3VCQUFDLFdBQVc7Z0JBQ2dCLFVBQVU7c0JBQWxELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFFeEIsSUFBSTtzQkFBbEIsS0FBSzt1QkFBQyxNQUFNO2dCQUNLLE9BQU87c0JBQXhCLEtBQUs7dUJBQUMsU0FBUztnQkFDRyxRQUFRO3NCQUExQixLQUFLO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBQcm92aWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9yZXNvbHZlaW8tY2xhc3MnO1xuaW1wb3J0IHsgVXNlck1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXIubW9kZWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgUXVlcnlMaXN0LCBBZnRlclZpZXdJbml0LCBWaWV3Q2hpbGRyZW4sIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5hdmJhck1haW5UYWJNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9uYXZiYXItbWFpbi10YWIubW9kZWwnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uL2RpYWxvZy9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBDb3JlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25hdmJhci1tYWluJyxcblx0dGVtcGxhdGVVcmw6ICcuL25hdmJhci1tYWluLmNvbXBvbmVudC5odG1sJyxcblx0cHJvdmlkZXJzOiBbUHJvdmlkZXJTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBOYXZiYXJNYWluQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cblx0QFZpZXdDaGlsZHJlbignZHJvcGRvd25zJykgZHJvcGRvd25zOiBRdWVyeUxpc3Q8YW55Pjtcblx0QFZpZXdDaGlsZCgnc2Nyb2xsYWJsZScsIHtzdGF0aWM6IHRydWV9KSBzY3JvbGxhYmxlOiBFbGVtZW50UmVmO1xuXG5cdEBJbnB1dCgnbG9nbycpIGxvZ28gPSAnJztcblx0QElucHV0KCduYXZUYWJzJykgbmF2VGFiczogTmF2YmFyTWFpblRhYk1vZGVsW10gPSBbXTtcblx0QElucHV0KCdmb250U2l6ZScpIGZvbnRTaXplID0gMTI7XG5cblx0dXNlcjogVXNlck1vZGVsID0gbnVsbDtcblx0Y29sbGFwc2VTaG93aW5nID0gZmFsc2U7XG5cblx0Y2xpZW50ID0gJyc7XG5cblx0aXNSZXNvbHZlSU8gPSBmYWxzZTtcblx0c3RhbmRhcmRQcm9ncmFtID0gZmFsc2U7XG5cdHRvdXJTdGFydGVkID0gZmFsc2U7XG5cblx0c2Nyb2xsUmlnaHRJbnRlcnZhbCA9IG51bGw7XG5cdHNjcm9sbExlZnRJbnRlcnZhbCA9IG51bGw7XG5cdGlzRGVtbyA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgX3NlcnZpY2VzOiBQcm92aWRlclNlcnZpY2UsIHByaXZhdGUgYXV0aDogQXV0aFNlcnZpY2UsIHByaXZhdGUgX2RzOiBEaWFsb2dTZXJ2aWNlLCBwcml2YXRlIF9hcHA6IENvcmVTZXJ2aWNlKSB7XG5cdFx0c3VwZXIoX3NlcnZpY2VzKTtcblx0fVxuXG5cdG5nT25Jbml0KCkge1xuXHRcdHRoaXMuX3NlcnZpY2VzLl9hY2NvdW50LnVzZXIuc3Vic2NyaWJlKHVzZXIgPT4ge1xuXHRcdFx0dGhpcy51c2VyID0gdXNlcjtcblx0XHR9KTtcblxuXHRcdHRoaXMuY2xpZW50ID0gdGhpcy5fYXBwLmNsaWVudC5nZXRWYWx1ZSgpO1xuXHRcdHRoaXMuc3RhbmRhcmRQcm9ncmFtID0gdGhpcy5fYXBwLnN0YW5kYXJkUHJvZ3JhbS5nZXRWYWx1ZSgpO1xuXHRcdHRoaXMudG91clN0YXJ0ZWQgPSB0aGlzLl9zZXJ2aWNlcy5fYXBwLnRvdXJTdGFydGVkLmdldFZhbHVlKCk7XG5cblx0XHRpZiAoIXRoaXMuY2xpZW50KSB7XG5cdFx0XHR0aGlzLmlzUmVzb2x2ZUlPID0gdHJ1ZTtcblx0XHR9XG5cblx0XHR0aGlzLl9zZXJ2aWNlcy5fYXBwLnRvdXJTdGFydGVkLnN1YnNjcmliZSh0b3VyU3RhcnRlZCA9PiB7XG5cdFx0XHR0aGlzLnRvdXJTdGFydGVkID0gdG91clN0YXJ0ZWQ7XG5cdFx0fSk7XG5cblx0XHR0aGlzLl9zZXJ2aWNlcy5fYXBwLmlzRGVtby5zdWJzY3JpYmUoaXNEZW1vID0+IHtcblx0XHRcdHRoaXMuaXNEZW1vID0gaXNEZW1vO1xuXHRcdH0pO1xuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCkge1xuXHRcdHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdHRoaXMuY2FsY3VsYXRlRHJvcGRvd25zTGVmdCgpO1xuXHRcdH0sIDUwMCk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWZvbnQtc2l6ZScsIHRoaXMuZm9udFNpemUgKyAncHgnKTtcblx0fVxuXG5cdGxvZ291dCgpIHtcblx0XHR0aGlzLl9hcHAuaXNMb2dnaW5nT3V0Lm5leHQodHJ1ZSk7XG5cdFx0dGhpcy5fc2VydmljZXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvaG9tZScpO1xuXHRcdHRoaXMuX3NlcnZpY2VzLl9hY2NvdW50LmxvZ091dCgpO1xuXHR9XG5cblx0bG9naW4oKSB7XG5cdFx0dGhpcy5hdXRoLmxvZ2luVXNlcigpLnRoZW4oKCkgPT4ge30sIGVyciA9PiB7fSk7XG5cdH1cblxuXHRoYXNTY3JvbGxlZCgpIHtcblx0XHRpZiAodGhpcy5zY3JvbGxhYmxlLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA8PSAwKSB7XG5cdFx0XHR0aGlzLnN0b3BTY3JvbGxSaWdodCgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnNjcm9sbGFibGUubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID4gMCA/IHRydWUgOiBmYWxzZTtcblx0fVxuXG5cdGhhc01vcmVTY3JvbGwoKSB7XG5cdFx0aWYgKHRoaXMuc2Nyb2xsYWJsZS5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoIDw9IHRoaXMuc2Nyb2xsYWJsZS5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoICsgdGhpcy5zY3JvbGxhYmxlLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCkge1xuXHRcdFx0dGhpcy5zdG9wU2Nyb2xsTGVmdCgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnNjcm9sbGFibGUubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCA+IHRoaXMuc2Nyb2xsYWJsZS5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoICsgdGhpcy5zY3JvbGxhYmxlLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA/IHRydWUgOiBmYWxzZTtcblx0fVxuXG5cdHN0YXJ0U2Nyb2xsUmlnaHQoKSB7XG5cdFx0dGhpcy5zY3JvbGxSaWdodEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0dGhpcy5zY3JvbGxhYmxlLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCAtPSAxO1xuXHRcdH0sIDEpO1xuXHR9XG5cblx0c3RvcFNjcm9sbFJpZ2h0KCkge1xuXHRcdGNsZWFySW50ZXJ2YWwodGhpcy5zY3JvbGxSaWdodEludGVydmFsKTtcblx0fVxuXG5cdHNjcm9sbFJpZ2h0T25jZSgpIHtcblx0XHR0aGlzLnNjcm9sbGFibGUubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0IC09IDUwO1xuXHR9XG5cblx0c3RhcnRTY3JvbGxMZWZ0KCkge1xuXHRcdHRoaXMuc2Nyb2xsTGVmdEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0dGhpcy5zY3JvbGxhYmxlLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCArPSAxO1xuXHRcdH0sIDEpO1xuXHR9XG5cblx0c3RvcFNjcm9sbExlZnQoKSB7XG5cdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnNjcm9sbExlZnRJbnRlcnZhbCk7XG5cdH1cblxuXHRzY3JvbGxMZWZ0T25jZSgpIHtcblx0XHR0aGlzLnNjcm9sbGFibGUubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ICs9IDUwO1xuXHR9XG5cdFxuXHRjYWxjdWxhdGVEcm9wZG93bnNMZWZ0KCkge1xuXHRcdGlmICh0aGlzLmRyb3Bkb3ducyAmJiB0aGlzLmRyb3Bkb3ducy50b0FycmF5KCkgJiYgdGhpcy5kcm9wZG93bnMudG9BcnJheSgpLmxlbmd0aCAmJiB0aGlzLnNjcm9sbGFibGUpIHtcblx0XHRcdHRoaXMubmF2VGFicy5maWx0ZXIoYSA9PiBhLnR5cGUgPT09ICdkcm9wZG93bicpLmZvckVhY2godGFiID0+IHtcblx0XHRcdFx0bGV0IGRyb3BEb3duID0gdGhpcy5kcm9wZG93bnMudG9BcnJheSgpLmZpbHRlcihhID0+IGEubmF0aXZlRWxlbWVudC5pbm5lclRleHQuc3BsaXQoJ1xcbicpWzBdLnJlcGxhY2UoL1teQS1aYS16MC05XS9nLCAnJykgPT09IHRhYi5sYWJlbC5yZXBsYWNlKC9bXkEtWmEtejAtOV0vZywgJycpKVswXTtcblxuXHRcdFx0XHRpZiAoZHJvcERvd24pIHtcblx0XHRcdFx0XHR0YWIubGVmdCA9IE1hdGgubWF4KGRyb3BEb3duLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCAtIHRoaXMuc2Nyb2xsYWJsZS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQsIHRoaXMuc2Nyb2xsYWJsZS5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHRhYi5sZWZ0ID0gMDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpc0luUm9sZShyb2xlOiBhbnkpIHtcblx0XHRpZiAodGhpcy5pc1N1cGVyQWRtaW4oKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudXNlcikge1xuXHRcdFx0aWYgKCg8YW55PnRoaXMudXNlci5yb2xlcykuZ3JvdXBzKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgKDxhbnk+dGhpcy51c2VyLnJvbGVzKS5ncm91cHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRsZXQgZ3JvdXAgPSAoPGFueT50aGlzLnVzZXIucm9sZXMpLmdyb3Vwc1tpXTtcblx0XHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGdyb3VwLnZpZXdzLmxlbmd0aDsgaisrKSB7XHRcblx0XHRcdFx0XHRcdGxldCB2aWV3ID0gZ3JvdXAudmlld3Nbal07XG5cdFx0XHRcdFx0XHRpZiAodmlldyA9PT0gcm9sZSB8fCB2aWV3LnN0YXJ0c1dpdGgocm9sZSArICcvJykpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aXNTdXBlckFkbWluKCkge1xuXHRcdHJldHVybiB0aGlzLnVzZXIgJiYgdGhpcy51c2VyLnJvbGVzID8gKDxhbnk+dGhpcy51c2VyLnJvbGVzKS5zdXBlcl9hZG1pbiA6IGZhbHNlO1xuXHR9XG5cblx0aXNJbk9uZVJvbGUocm9sZXM6IHN0cmluZ1tdKSB7XG5cdFx0aWYgKHRoaXMuaXNTdXBlckFkbWluKCkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcm9sZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGxldCByb2xlID0gcm9sZXNbaV07XG5cblx0XHRcdGlmICh0aGlzLl9zZXJ2aWNlcy5fYWNjb3VudC5pc1VzZXJJblZpZXcocm9sZSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0bmF2aWdhdGVUbyhyb3V0ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5fc2VydmljZXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJvdXRlKTtcblx0fVxuXG5cdGhlbHAoKSB7XG5cdFx0dGhpcy5fZHMuaW5wdXQoJ1doYXQgZG8geW91IG5lZWQgaGVscCB3aXRoPycsIFtcblx0XHRcdHtcblx0XHRcdFx0bGFiZWw6ICdUaXRsZSBvZiBQcm9ibGVtJywgXG5cdFx0XHRcdGZvcm06ICdwcm9ibGVtX3RpdGxlJywgXG5cdFx0XHRcdGRhdGE6ICcnLCBcblx0XHRcdFx0dmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxuXHRcdFx0XHR2YWxpZGF0b3JFcnJvcnM6IFsncmVxdWlyZWQnXSxcblx0XHRcdFx0dmFsaWRhdG9yTXNnOiBbJ1Byb2JsZW0gdGl0bGUgaXMgcmVxdWlyZWQuJ10sXG5cdFx0XHRcdHJlcXVpcmVkOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRsYWJlbDogJ0Rlc2NyaXB0aW9uIG9mIFByb2JsZW0nLCBcblx0XHRcdFx0Zm9ybTogJ3Byb2JsZW1fZGVzYycsIFxuXHRcdFx0XHRkYXRhOiAnJywgXG5cdFx0XHRcdHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcblx0XHRcdFx0dmFsaWRhdG9yRXJyb3JzOiBbJ3JlcXVpcmVkJ10sXG5cdFx0XHRcdHZhbGlkYXRvck1zZzogWydQcm9ibGVtIGRlc2NyaXB0aW9uIGlzIHJlcXVpcmVkLiddLFxuXHRcdFx0XHRyZXF1aXJlZDogdHJ1ZSxcblx0XHRcdFx0dHlwZTogJ3RleHRhcmVhJ1xuXHRcdFx0fVxuXHRcdF0pLnRoZW4oaGVscFJlcyA9PiB7XG5cdFx0XHR0aGlzLl9zZXJ2aWNlcy5fc29ja2V0LmNhbGwoJ2dldEhlbHBOb3RpZmljYXRpb24nLCB0aGlzLl9zZXJ2aWNlcy5fYWNjb3VudC5nZXRVc2VyKCkuZnVsbG5hbWUsIGhlbHBSZXMucHJvYmxlbV90aXRsZS52YWx1ZSwgaGVscFJlcy5wcm9ibGVtX2Rlc2MudmFsdWUpO1xuXHRcdH0sICgpID0+IHt9KTtcblx0fVxuXG5cdGlzQ3VzdG9tZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3NlcnZpY2VzLl9hY2NvdW50LmdldFVzZXIoKS5vdGhlci5jdXN0b21lcnMgJiYgdGhpcy5fc2VydmljZXMuX2FjY291bnQuZ2V0VXNlcigpLm90aGVyLmN1c3RvbWVycy5sZW5ndGggPyB0cnVlIDogZmFsc2U7XG5cdH1cblxuXHRnZXRXaW5kb3dXaWR0aCgpIHtcblx0XHRyZXR1cm4gd2luZG93LmlubmVyV2lkdGg7XG5cdH1cblxuXHRwcmludCgpIHtcblx0XHR3aW5kb3cucHJpbnQoKTtcblx0fVxufSIsIjxzdHlsZT5cblx0OnJvb3Qge1xuICAgICAgICAtLWZvbnQtc2l6ZTogMTI7XG4gICAgfVxuXG5cdDpob3N0IC9kZWVwLyAqIHtcblx0XHRmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSk7XG5cdH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjAwcHgpIHtcbiAgICAgICAgLm5hdmJhck1haW4gYSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDE4cHggIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gICAgICAgIC5zY3JvbGxhYmxlLXgge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiA2MHZ3O1xuICAgICAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgICAgIG92ZXJmbG93LXk6IHZpc2libGU7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAudmVydGljYWxBbGlnbiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5kcm9wZG93biB7XG4gICAgICAgICAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLm5hdmJhciBsaSB7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cblxuICAgIC5uYXZiYXItZGFyayAubmF2YmFyLW5hdiAubmF2LWxpbms6aG92ZXIsIC5uYXZiYXItZGFyayAubmF2YmFyLW5hdiAubmF2LWxpbms6Zm9jdXMge1xuICAgICAgICBjb2xvcjogZ3JheTtcbiAgICB9XG48L3N0eWxlPlxuXG48ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgPG5hdiBjbGFzcz1cIm5hdmJhciBuYXZiYXItZXhwYW5kLXhsIG5hdmJhci1kYXJrIGJnLWRhcmsgbmF2YmFyTWFpblwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cbiAgICAgICAgPGEgY2xhc3M9XCJuYXZiYXItYnJhbmRcIiBocmVmPVwiI1wiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImxvZ29cIiBzdHlsZT1cIndpZHRoOiBhdXRvOyBoZWlnaHQ6IDM2cHg7XCIgKm5nSWY9XCIhaXNEZW1vXCI+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm5hdmJhci10b2dnbGVyXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLXRhcmdldD1cIiNuYXZiYXJNYWluTmF2XCIgYXJpYS1jb250cm9scz1cIm5hdmJhck1haW5OYXZcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBhcmlhLWxhYmVsPVwiVG9nZ2xlIG5hdmlnYXRpb25cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXItaWNvblwiPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYXZiYXItY29sbGFwc2UgY29sbGFwc2VcIiBpZD1cIm5hdmJhck1haW5OYXZcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5hdmJhci1uYXZcIj5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLXRhcmdldD1cIiNuYXZiYXJNYWluTmF2XCIgKm5nSWY9XCIhc3RhbmRhcmRQcm9ncmFtXCIgW3N0eWxlLmJvcmRlci1yaWdodF09XCJnZXRXaW5kb3dXaWR0aCgpID4gMTIwMCA/ICcxcHggc29saWQgd2hpdGUnIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIHJvdXRlckxpbms9XCJob21lXCIgW2NsYXNzLmRpc2FibGVkXT1cInRvdXJTdGFydGVkID8gdHJ1ZSA6IG51bGxcIiByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCI+SG9tZTwvYT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGFuZGFyZFByb2dyYW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS10YXJnZXQ9XCIjbmF2YmFyTWFpbk5hdlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIFtjbGFzcy5kaXNhYmxlZF09XCJ0b3VyU3RhcnRlZCA/IHRydWUgOiBudWxsXCIgcm91dGVyTGluaz1cImhvbWUtc3RhbmRhcmRcIiByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCI+SG9tZTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS10YXJnZXQ9XCIjbmF2YmFyTWFpbk5hdlwiICpuZ0lmPVwiIXVzZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmtcIiByb3V0ZXJMaW5rPVwiY29udGFjdHVzLXN0YW5kYXJkXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPkNvbnRhY3QgVXM8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtdGFyZ2V0PVwiI25hdmJhck1haW5OYXZcIiAqbmdJZj1cIiF1c2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rXCIgcm91dGVyTGluaz1cImZhcVwiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIj5GQVE8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtdGFyZ2V0PVwiI25hdmJhck1haW5OYXZcIiAqbmdJZj1cIiF1c2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rXCIgcm91dGVyTGluaz1cImZlYXR1cmVzXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPkZlYXR1cmVzPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLXRhcmdldD1cIiNuYXZiYXJNYWluTmF2XCIgKm5nSWY9XCIhdXNlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIHJvdXRlckxpbms9XCJob3dpdHdvcmtcIiByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCI+SG93IEl0IFdvcmtzPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLXRhcmdldD1cIiNuYXZiYXJNYWluTmF2XCIgKm5nSWY9XCIhdXNlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIHJvdXRlckxpbms9XCJwcmljaW5nXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPlByaWNpbmc8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1Jlc29sdmVJTyAmJiAhc3RhbmRhcmRQcm9ncmFtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtdGFyZ2V0PVwiI25hdmJhck1haW5OYXZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmtcIiByb3V0ZXJMaW5rPVwiYWJvdXQtdXNcIiByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCI+QWJvdXQgVXM8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtdGFyZ2V0PVwiI25hdmJhck1haW5OYXZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmtcIiByb3V0ZXJMaW5rPVwiY29udGFjdC11c1wiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIj5Db250YWN0IFVzPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGFzU2Nyb2xsZWQoKVwiIChtb3VzZW92ZXIpPVwic3RhcnRTY3JvbGxSaWdodCgpXCIgKG1vdXNlb3V0KT1cInN0b3BTY3JvbGxSaWdodCgpXCIgKGNsaWNrKT1cInNjcm9sbFJpZ2h0T25jZSgpXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1sZWZ0XCIgc3R5bGU9XCJjb2xvcjogd2hpdGU7IGZvbnQtc2l6ZTogMjBweFwiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHVsIFtuZ0NsYXNzXT1cIlsnbmF2YmFyLW5hdicsICdzY3JvbGxhYmxlLXgnXVwiICNzY3JvbGxhYmxlIGRldGVjdC1zY3JvbGwgKG9uU2Nyb2xsKT1cImNhbGN1bGF0ZURyb3Bkb3duc0xlZnQoKVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhYiBvZiBuYXZUYWJzOyBsZXQgaSA9IGluZGV4O1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiLnR5cGUgPT09ICdsaW5rJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiICpuZ0lmPVwidXNlciAmJiBpc0luUm9sZSh0YWIubGlua3NbMF0ucm9sZSlcIiBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCIgW3RvdXJBbmNob3JdPVwidGFiLnRvdXJBbmNob3JcIiBkYXRhLXRhcmdldD1cIiNuYXZiYXJNYWluTmF2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIFtjbGFzcy5kaXNhYmxlZF09XCJ0b3VyU3RhcnRlZCA/IHRydWUgOiBudWxsXCIgW3JvdXRlckxpbmtdPVwidGFiLmxpbmtzWzBdLnJvdXRlckxpbmtcIiByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCI+e3t0YWIubGlua3NbMF0ubGFiZWx9fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiAqbmdJZj1cInVzZXIgJiYgaXNJblJvbGUodGFiLmxpbmtzWzBdLnJvbGUpXCIgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtdGFyZ2V0PVwiI25hdmJhck1haW5OYXZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rXCIgW2NsYXNzLmRpc2FibGVkXT1cInRvdXJTdGFydGVkID8gdHJ1ZSA6IG51bGxcIiBbcm91dGVyTGlua109XCJ0YWIubGlua3NbMF0ucm91dGVyTGlua1wiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIj57e3RhYi5saW5rc1swXS5sYWJlbH19PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWIudHlwZSA9PT0gJ2Ryb3Bkb3duJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpICNkcm9wZG93bnMgY2xhc3M9XCJuYXYtaXRlbSBkcm9wZG93blwiICpuZ0lmPVwidXNlciAmJiBpc0luT25lUm9sZSh0YWIucm9sZXMpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YSBjbGFzcz1cIm5hdi1saW5rIGRyb3Bkb3duLXRvZ2dsZVwiIFtjbGFzcy5kaXNhYmxlZF09XCJ0b3VyU3RhcnRlZCA/IHRydWUgOiBudWxsXCIgaWQ9XCJuYXZiYXJEcm9wZG93bkFzc2V0XCIgcm9sZT1cImJ1dHRvblwiIFt0b3VyQW5jaG9yXT1cInRhYi50b3VyQW5jaG9yXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFiLmxhYmVsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmsgZHJvcGRvd24tdG9nZ2xlXCIgW2NsYXNzLmRpc2FibGVkXT1cInRvdXJTdGFydGVkID8gdHJ1ZSA6IG51bGxcIiBpZD1cIm5hdmJhckRyb3Bkb3duQXNzZXRcIiByb2xlPVwiYnV0dG9uXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFiLmxhYmVsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgYmctZGFya1wiIGFyaWEtbGFiZWxsZWRieT1cIm5hdmJhckRyb3Bkb3duQXNzZXRcIiBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS10YXJnZXQ9XCIjbmF2YmFyTWFpbk5hdlwiIFtzdHlsZS5sZWZ0LnB4XT1cInRhYi5sZWZ0IHx8IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGluayBvZiB0YWIubGlua3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiICpuZ0lmPVwidXNlciAmJiBpc0luUm9sZShsaW5rLnJvbGUpXCIgW3JvdXRlckxpbmtdPVwibGluay5yb3V0ZXJMaW5rXCI+e3tsaW5rLmxhYmVsfX08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImhhc01vcmVTY3JvbGwoKVwiIChtb3VzZW92ZXIpPVwic3RhcnRTY3JvbGxMZWZ0KClcIiAobW91c2VvdXQpPVwic3RvcFNjcm9sbExlZnQoKVwiIChjbGljayk9XCJzY3JvbGxMZWZ0T25jZSgpXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1yaWdodFwiIHN0eWxlPVwiY29sb3I6IHdoaXRlOyBmb250LXNpemU6IDIwcHhcIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxociAvPlxuICAgICAgICAgICAgPHVsIFtuZ0NsYXNzXT1cIlsnbmF2YmFyLW5hdicsIGdldFdpbmRvd1dpZHRoKCkgPiAxMjAwID8gJ2Zsb2F0LWxnLXJpZ2h0JyA6ICcnXVwiPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nSWY9XCJ1c2VyXCIgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtdGFyZ2V0PVwiI25hdmJhck1haW5OYXZcIiBbc3R5bGUuYm9yZGVyLWxlZnRdPVwiZ2V0V2luZG93V2lkdGgoKSA+IDEyMDAgPyAnMXB4IHNvbGlkIHdoaXRlJyA6ICcnXCIgc3R5bGU9XCJoZWlnaHQ6IDMwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmtcIiBbY2xhc3MuZGlzYWJsZWRdPVwidG91clN0YXJ0ZWQgPyB0cnVlIDogbnVsbFwiIChjbGljayk9XCJwcmludCgpXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCI+PGkgc3R5bGU9XCJmb250LXNpemU6MjBweDsgY29sb3I6IHdoaXRlO1wiIGNsYXNzPVwiZmEgZmEtcHJpbnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiAqbmdJZj1cInVzZXIgJiYgY2xpZW50XCIgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtdGFyZ2V0PVwiI25hdmJhck1haW5OYXZcIiBzdHlsZT1cImhlaWdodDogMzBweDtcIiB0b3VyQW5jaG9yPVwic3VwcG9ydFNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIFtjbGFzcy5kaXNhYmxlZF09XCJ0b3VyU3RhcnRlZCA/IHRydWUgOiBudWxsXCIgcm91dGVyTGluaz1cInN1cHBvcnQtdGlja2V0XCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPlN1cHBvcnQ8L2E+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiICpuZ0lmPVwidXNlciAmJiBpc0luUm9sZSgnc3VwZXItYWRtaW4nKVwiIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLXRhcmdldD1cIiNuYXZiYXJNYWluTmF2XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmtcIiByb3V0ZXJMaW5rPVwibG9nc1wiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIj5Mb2dzPC9hPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiAqbmdJZj1cInVzZXIgJiYgaXNJblJvbGUoJ3N1cGVyLWFkbWluJylcIiBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS10YXJnZXQ9XCIjbmF2YmFyTWFpbk5hdlwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rXCIgcm91dGVyTGluaz1cInN1cGVyLWFkbWluXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPlN1cGVyIEFkbWluPC9hPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPGhyIC8+XG4gICAgICAgICAgICA8dWwgW25nQ2xhc3NdPVwiWyduYXZiYXItbmF2JywgZ2V0V2luZG93V2lkdGgoKSA+IDEyMDAgPyAnZmxvYXQtbGctcmlnaHQnIDogJyddXCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiAqbmdJZj1cIiF1c2VyXCIgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtdGFyZ2V0PVwiI25hdmJhck1haW5OYXZcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIChjbGljayk9XCJsb2dpbigpXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPkxvZ2luPC9hPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiAqbmdJZj1cInVzZXJcIiB0b3VyQW5jaG9yPVwidXNlclNldHRpbmdzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmtcIiBbY2xhc3MuZGlzYWJsZWRdPVwidG91clN0YXJ0ZWQgPyB0cnVlIDogbnVsbFwiIHJvdXRlckxpbms9XCJ1c2VyLXNldHRpbmdzXCI+SGVsbG8ge3t1c2VyLmZ1bGxuYW1lfX0hPC9hPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiAqbmdJZj1cInVzZXJcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIChjbGljayk9XCJsb2dvdXQoKVwiIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLXRhcmdldD1cIiNuYXZiYXJNYWluTmF2XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmtcIiBbY2xhc3MuZGlzYWJsZWRdPVwidG91clN0YXJ0ZWQgPyB0cnVlIDogbnVsbFwiPkxvZ291dDwvYT5cbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25hdj5cbjwvZGl2PiJdfQ==