@sunbird-cb/toc 0.0.9 → 0.0.10

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 (495) hide show
  1. package/esm2022/lib/_collection/_common/attendance-card/attendance-card.component.mjs +55 -55
  2. package/esm2022/lib/_collection/_common/attendance-card/attendance-card.module.mjs +126 -126
  3. package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.component.mjs +32 -32
  4. package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.module.mjs +85 -85
  5. package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.component.mjs +100 -100
  6. package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.module.mjs +48 -48
  7. package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.component.mjs +120 -120
  8. package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.module.mjs +92 -92
  9. package/esm2022/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.mjs +48 -48
  10. package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.component.mjs +25 -25
  11. package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.module.mjs +41 -41
  12. package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover-card.component.mjs +89 -89
  13. package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.module.mjs +42 -42
  14. package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.servive.mjs +41 -41
  15. package/esm2022/lib/_collection/_common/connection-name/connection-name.component.mjs +78 -78
  16. package/esm2022/lib/_collection/_common/connection-name/connection-name.module.mjs +45 -45
  17. package/esm2022/lib/_collection/_common/connection-name/profile-v2.model.mjs +2 -2
  18. package/esm2022/lib/_collection/_common/content-progress/content-progress.component.mjs +70 -70
  19. package/esm2022/lib/_collection/_common/content-progress/content-progress.module.mjs +28 -28
  20. package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.mjs +187 -187
  21. package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.mjs +86 -86
  22. package/esm2022/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.mjs +31 -31
  23. package/esm2022/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.mjs +941 -941
  24. package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.mjs +183 -183
  25. package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.mjs +327 -327
  26. package/esm2022/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.mjs +297 -297
  27. package/esm2022/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.mjs +261 -248
  28. package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +1177 -1148
  29. package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.mjs +16 -16
  30. package/esm2022/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.mjs +43 -43
  31. package/esm2022/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.mjs +133 -133
  32. package/esm2022/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.mjs +66 -66
  33. package/esm2022/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.mjs +278 -278
  34. package/esm2022/lib/_collection/_common/content-toc/content-services/handle-claim.service.mjs +21 -21
  35. package/esm2022/lib/_collection/_common/content-toc/content-services/review-component-data.service.mjs +21 -21
  36. package/esm2022/lib/_collection/_common/content-toc/content-toc.component.mjs +847 -847
  37. package/esm2022/lib/_collection/_common/content-toc/content-toc.module.mjs +219 -219
  38. package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.component.mjs +209 -209
  39. package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.module.mjs +26 -26
  40. package/esm2022/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.mjs +19 -19
  41. package/esm2022/lib/_collection/_common/content-toc/pipes/truncate.pipe.mjs +23 -23
  42. package/esm2022/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.mjs +113 -113
  43. package/esm2022/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.mjs +110 -110
  44. package/esm2022/lib/_collection/_common/display-content-type/display-content-type.component.mjs +26 -26
  45. package/esm2022/lib/_collection/_common/display-content-type/display-content-type.module.mjs +19 -19
  46. package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.mjs +67 -67
  47. package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.mjs +28 -28
  48. package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.component.mjs +77 -77
  49. package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.model.mjs +2 -2
  50. package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.module.mjs +61 -61
  51. package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.module.mjs +20 -20
  52. package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.mjs +67 -67
  53. package/esm2022/lib/_collection/_common/player-brief/player-brief.component.mjs +139 -139
  54. package/esm2022/lib/_collection/_common/player-brief/player-brief.module.mjs +71 -71
  55. package/esm2022/lib/_collection/_common/rating-summary/rating-summary.component.mjs +34 -34
  56. package/esm2022/lib/_collection/_common/rating-summary/rating-summary.module.mjs +56 -56
  57. package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.component.mjs +25 -25
  58. package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.module.mjs +37 -37
  59. package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.mjs +32 -32
  60. package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner.module.mjs +30 -30
  61. package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.mjs +38 -38
  62. package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.mjs +51 -51
  63. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.component.mjs +115 -115
  64. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.model.mjs +12 -12
  65. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.module.mjs +51 -51
  66. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.service.mjs +61 -61
  67. package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.component.mjs +87 -87
  68. package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.module.mjs +36 -36
  69. package/esm2022/lib/_collection/_common/user-image/user-image.component.mjs +62 -62
  70. package/esm2022/lib/_collection/_common/user-image/user-image.module.mjs +24 -24
  71. package/esm2022/lib/_collection/btn-page-back/btn-page-back.component.mjs +192 -192
  72. package/esm2022/lib/_collection/btn-page-back/btn-page-back.module.mjs +44 -44
  73. package/esm2022/lib/_collection/btn-page-back/btn-page-back.service.mjs +99 -99
  74. package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.component.mjs +58 -58
  75. package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.module.mjs +67 -67
  76. package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.component.mjs +112 -112
  77. package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.model.mjs +2 -2
  78. package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.module.mjs +69 -69
  79. package/esm2022/lib/_collection-api.mjs +57 -57
  80. package/esm2022/lib/_constants/widget-content.constants.mjs +19 -19
  81. package/esm2022/lib/_directives/tooltip.directive.mjs +68 -68
  82. package/esm2022/lib/_models/common.model.mjs +2 -2
  83. package/esm2022/lib/_models/error.model.mjs +2 -2
  84. package/esm2022/lib/_pipes/highlight.pipe.mjs +24 -24
  85. package/esm2022/lib/_services/rating.service.mjs +89 -89
  86. package/esm2022/lib/_services/samuhik-charcha.service.mjs +29 -29
  87. package/esm2022/lib/_services/viewer-route-util.mjs +103 -103
  88. package/esm2022/lib/_services/widget-content.model.mjs +247 -247
  89. package/esm2022/lib/_services/widget-content.service.mjs +594 -594
  90. package/esm2022/lib/_shared/translate-loader.factory.mjs +9 -9
  91. package/esm2022/lib/app-toc-lib.module.mjs +499 -499
  92. package/esm2022/lib/collection.config.mjs +161 -161
  93. package/esm2022/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.mjs +37 -37
  94. package/esm2022/lib/components/app-toc-banner/app-toc-banner.component.mjs +1436 -1436
  95. package/esm2022/lib/components/app-toc-cios-home/app-toc-cios-home.component.mjs +475 -475
  96. package/esm2022/lib/components/app-toc-cios-home/consent-dialog.component.mjs +119 -119
  97. package/esm2022/lib/components/app-toc-cohorts/app-toc-cohorts.component.mjs +80 -80
  98. package/esm2022/lib/components/app-toc-content-card/app-toc-content-card.component.mjs +249 -249
  99. package/esm2022/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.mjs +39 -39
  100. package/esm2022/lib/components/app-toc-discussion/app-toc-discussion.component.mjs +58 -58
  101. package/esm2022/lib/components/app-toc-home/app-toc-home.component.mjs +2229 -2229
  102. package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +2938 -2907
  103. package/esm2022/lib/components/app-toc-overview/app-toc-overview.component.mjs +157 -157
  104. package/esm2022/lib/components/app-toc-session-card/app-toc-session-card.component.mjs +48 -48
  105. package/esm2022/lib/components/app-toc-sessions/app-toc-sessions.component.mjs +47 -47
  106. package/esm2022/lib/components/app-toc-single-page/app-toc-single-page.component.mjs +766 -766
  107. package/esm2022/lib/components/completion-survey-form/completion-survey-form.component.mjs +243 -243
  108. package/esm2022/lib/components/create-batch-dialog/create-batch-dialog.component.mjs +116 -116
  109. package/esm2022/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.mjs +44 -44
  110. package/esm2022/lib/components/enroll-profile-form/enroll-profile-form.component.mjs +1838 -1838
  111. package/esm2022/lib/components/enroll-questionnaire/enroll-questionnaire.component.mjs +236 -236
  112. package/esm2022/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.mjs +213 -213
  113. package/esm2022/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.mjs +36 -36
  114. package/esm2022/lib/components/public-survey-form/public-survey-form.component.mjs +256 -256
  115. package/esm2022/lib/components/survey-form-question/survey-form-question.component.mjs +133 -133
  116. package/esm2022/lib/components/survey-form-section/survey-form-section.component.mjs +36 -36
  117. package/esm2022/lib/models/app-toc-analytics.model.mjs +2 -2
  118. package/esm2022/lib/models/app-toc.model.mjs +38 -38
  119. package/esm2022/lib/models/auto-complete.model.mjs +2 -2
  120. package/esm2022/lib/models/card-content.model.mjs +13 -13
  121. package/esm2022/lib/models/content-strip-with-tabs.model.mjs +2 -2
  122. package/esm2022/lib/models/discussion-forum.model.mjs +14 -14
  123. package/esm2022/lib/models/goal.model.mjs +2 -2
  124. package/esm2022/lib/models/meta-tag.model.mjs +8 -8
  125. package/esm2022/lib/models/playlist.model.mjs +2 -2
  126. package/esm2022/lib/models/profile-revamp.model.mjs +2 -2
  127. package/esm2022/lib/models/rating.model.mjs +2 -2
  128. package/esm2022/lib/models/user-profile.model.mjs +21 -21
  129. package/esm2022/lib/resolvers/app-toc-cios-resolver.service.mjs +24 -24
  130. package/esm2022/lib/resolvers/app-toc-cios-user-enroll-resolver.service.mjs +24 -24
  131. package/esm2022/lib/resolvers/app-toc-content-read-resolver.service.mjs +60 -60
  132. package/esm2022/lib/resolvers/app-toc-ext-public-resolver.service.mjs +25 -25
  133. package/esm2022/lib/resolvers/app-toc-resolver.service.mjs +106 -106
  134. package/esm2022/lib/resolvers/config-resolver.service.mjs +25 -25
  135. package/esm2022/lib/resolvers/profile-resolver.service.mjs +25 -25
  136. package/esm2022/lib/resolvers/restricted-features-resolver.service.mjs +25 -25
  137. package/esm2022/lib/routes/app-toc-home/app-toc-home.component.mjs +51 -51
  138. package/esm2022/lib/routes/app-toc-home/app-toc-home.directive.mjs +16 -16
  139. package/esm2022/lib/routes/app-toc-home/app-toc-home.service.mjs +18 -18
  140. package/esm2022/lib/services/access-control.service.mjs +56 -56
  141. package/esm2022/lib/services/action.service.mjs +23 -23
  142. package/esm2022/lib/services/app-toc-v2.service.mjs +332 -313
  143. package/esm2022/lib/services/app-toc.service.mjs +1647 -1613
  144. package/esm2022/lib/services/certificate.service.mjs +69 -69
  145. package/esm2022/lib/services/discuss-utils.service.mjs +58 -58
  146. package/esm2022/lib/services/editor.service.mjs +34 -34
  147. package/esm2022/lib/services/load-check.service.mjs +21 -21
  148. package/esm2022/lib/services/loader.service.mjs +33 -33
  149. package/esm2022/lib/services/mobile-apps.service.mjs +67 -67
  150. package/esm2022/lib/services/netcore.service.mjs +56 -56
  151. package/esm2022/lib/services/nps-grid.service.mjs +31 -31
  152. package/esm2022/lib/services/otp.service.mjs +43 -43
  153. package/esm2022/lib/services/profile-v2.service.mjs +43 -43
  154. package/esm2022/lib/services/reset-ratings.service.mjs +19 -19
  155. package/esm2022/lib/services/resource-download-helper.service.mjs +64 -64
  156. package/esm2022/lib/services/timer.service.mjs +23 -23
  157. package/esm2022/lib/services/title-tag.service.mjs +71 -71
  158. package/esm2022/lib/services/user-profile.service.mjs +55 -55
  159. package/esm2022/lib/services/viewer-data.service.mjs +64 -64
  160. package/esm2022/lib/services/viewer-util.service.mjs +599 -590
  161. package/esm2022/lib/share-toc/share-toc/share-toc.component.mjs +291 -291
  162. package/esm2022/lib/share-toc/share-toc.module.mjs +119 -119
  163. package/esm2022/public-api.mjs +73 -71
  164. package/esm2022/sunbird-cb-toc.mjs +4 -4
  165. package/fesm2022/sunbird-cb-toc.mjs +24901 -24766
  166. package/fesm2022/sunbird-cb-toc.mjs.map +1 -1
  167. package/index.d.ts +6 -5
  168. package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts +17 -16
  169. package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts.map +1 -0
  170. package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts +32 -31
  171. package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts.map +1 -0
  172. package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts +16 -15
  173. package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts.map +1 -0
  174. package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts +21 -20
  175. package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts.map +1 -0
  176. package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts +23 -22
  177. package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts.map +1 -0
  178. package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts +16 -15
  179. package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts.map +1 -0
  180. package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts +23 -22
  181. package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts.map +1 -0
  182. package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts +23 -22
  183. package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts.map +1 -0
  184. package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts +10 -9
  185. package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts.map +1 -0
  186. package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts +12 -11
  187. package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts.map +1 -0
  188. package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts +13 -12
  189. package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts.map +1 -0
  190. package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts +19 -18
  191. package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts.map +1 -0
  192. package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts +15 -14
  193. package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts.map +1 -0
  194. package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts +12 -11
  195. package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts.map +1 -0
  196. package/lib/_collection/_common/connection-name/connection-name.component.d.ts +18 -17
  197. package/lib/_collection/_common/connection-name/connection-name.component.d.ts.map +1 -0
  198. package/lib/_collection/_common/connection-name/connection-name.module.d.ts +15 -14
  199. package/lib/_collection/_common/connection-name/connection-name.module.d.ts.map +1 -0
  200. package/lib/_collection/_common/connection-name/profile-v2.model.d.ts +200 -199
  201. package/lib/_collection/_common/connection-name/profile-v2.model.d.ts.map +1 -0
  202. package/lib/_collection/_common/content-progress/content-progress.component.d.ts +17 -16
  203. package/lib/_collection/_common/content-progress/content-progress.component.d.ts.map +1 -0
  204. package/lib/_collection/_common/content-progress/content-progress.module.d.ts +11 -10
  205. package/lib/_collection/_common/content-progress/content-progress.module.d.ts.map +1 -0
  206. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts +39 -38
  207. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts.map +1 -0
  208. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts +20 -19
  209. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts.map +1 -0
  210. package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts +12 -11
  211. package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts.map +1 -0
  212. package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts +184 -183
  213. package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts.map +1 -0
  214. package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts +42 -41
  215. package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts.map +1 -0
  216. package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts +55 -54
  217. package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts.map +1 -0
  218. package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts +48 -47
  219. package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts.map +1 -0
  220. package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts +51 -49
  221. package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts.map +1 -0
  222. package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts +175 -171
  223. package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts.map +1 -0
  224. package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts +9 -8
  225. package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts.map +1 -0
  226. package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts +17 -16
  227. package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts.map +1 -0
  228. package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts +41 -40
  229. package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts.map +1 -0
  230. package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts +22 -21
  231. package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts.map +1 -0
  232. package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts +46 -45
  233. package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts.map +1 -0
  234. package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts +11 -10
  235. package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts.map +1 -0
  236. package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts +11 -10
  237. package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts.map +1 -0
  238. package/lib/_collection/_common/content-toc/content-toc.component.d.ts +129 -128
  239. package/lib/_collection/_common/content-toc/content-toc.component.d.ts.map +1 -0
  240. package/lib/_collection/_common/content-toc/content-toc.module.d.ts +52 -51
  241. package/lib/_collection/_common/content-toc/content-toc.module.d.ts.map +1 -0
  242. package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts +30 -29
  243. package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts.map +1 -0
  244. package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts +10 -9
  245. package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts.map +1 -0
  246. package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts +8 -7
  247. package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts.map +1 -0
  248. package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts +8 -7
  249. package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts.map +1 -0
  250. package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts +29 -28
  251. package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts.map +1 -0
  252. package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts +25 -24
  253. package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts.map +1 -0
  254. package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts +15 -14
  255. package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts.map +1 -0
  256. package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts +10 -9
  257. package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts.map +1 -0
  258. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts +13 -12
  259. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts.map +1 -0
  260. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts +11 -10
  261. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts.map +1 -0
  262. package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts +23 -22
  263. package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts.map +1 -0
  264. package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts +9 -8
  265. package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts.map +1 -0
  266. package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts +19 -18
  267. package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts.map +1 -0
  268. package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts +9 -8
  269. package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts.map +1 -0
  270. package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts +16 -15
  271. package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts.map +1 -0
  272. package/lib/_collection/_common/player-brief/player-brief.component.d.ts +36 -35
  273. package/lib/_collection/_common/player-brief/player-brief.component.d.ts.map +1 -0
  274. package/lib/_collection/_common/player-brief/player-brief.module.d.ts +20 -19
  275. package/lib/_collection/_common/player-brief/player-brief.module.d.ts.map +1 -0
  276. package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts +15 -14
  277. package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts.map +1 -0
  278. package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts +14 -13
  279. package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts.map +1 -0
  280. package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts +12 -11
  281. package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts.map +1 -0
  282. package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts +12 -11
  283. package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts.map +1 -0
  284. package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts +16 -15
  285. package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts.map +1 -0
  286. package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts +11 -10
  287. package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts.map +1 -0
  288. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts +17 -16
  289. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts.map +1 -0
  290. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts +12 -11
  291. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts.map +1 -0
  292. package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts +35 -34
  293. package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts.map +1 -0
  294. package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts +18 -17
  295. package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts.map +1 -0
  296. package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts +16 -15
  297. package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts.map +1 -0
  298. package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts +16 -15
  299. package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts.map +1 -0
  300. package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts +22 -21
  301. package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts.map +1 -0
  302. package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts +13 -12
  303. package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts.map +1 -0
  304. package/lib/_collection/_common/user-image/user-image.component.d.ts +22 -21
  305. package/lib/_collection/_common/user-image/user-image.component.d.ts.map +1 -0
  306. package/lib/_collection/_common/user-image/user-image.module.d.ts +10 -9
  307. package/lib/_collection/_common/user-image/user-image.module.d.ts.map +1 -0
  308. package/lib/_collection/btn-page-back/btn-page-back.component.d.ts +48 -47
  309. package/lib/_collection/btn-page-back/btn-page-back.component.d.ts.map +1 -0
  310. package/lib/_collection/btn-page-back/btn-page-back.module.d.ts +15 -14
  311. package/lib/_collection/btn-page-back/btn-page-back.module.d.ts.map +1 -0
  312. package/lib/_collection/btn-page-back/btn-page-back.service.d.ts +23 -22
  313. package/lib/_collection/btn-page-back/btn-page-back.service.d.ts.map +1 -0
  314. package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts +20 -19
  315. package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts.map +1 -0
  316. package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts +16 -15
  317. package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts.map +1 -0
  318. package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts +26 -25
  319. package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts.map +1 -0
  320. package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts +22 -21
  321. package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts.map +1 -0
  322. package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts +19 -18
  323. package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts.map +1 -0
  324. package/lib/_collection-api.d.ts +35 -34
  325. package/lib/_collection-api.d.ts.map +1 -0
  326. package/lib/_constants/widget-content.constants.d.ts +8 -7
  327. package/lib/_constants/widget-content.constants.d.ts.map +1 -0
  328. package/lib/_directives/tooltip.directive.d.ts +18 -17
  329. package/lib/_directives/tooltip.directive.d.ts.map +1 -0
  330. package/lib/_models/common.model.d.ts +4 -3
  331. package/lib/_models/common.model.d.ts.map +1 -0
  332. package/lib/_models/error.model.d.ts +6 -5
  333. package/lib/_models/error.model.d.ts.map +1 -0
  334. package/lib/_pipes/highlight.pipe.d.ts +11 -10
  335. package/lib/_pipes/highlight.pipe.d.ts.map +1 -0
  336. package/lib/_services/rating.service.d.ts +19 -18
  337. package/lib/_services/rating.service.d.ts.map +1 -0
  338. package/lib/_services/samuhik-charcha.service.d.ts +14 -13
  339. package/lib/_services/samuhik-charcha.service.d.ts.map +1 -0
  340. package/lib/_services/viewer-route-util.d.ts +9 -8
  341. package/lib/_services/viewer-route-util.d.ts.map +1 -0
  342. package/lib/_services/widget-content.model.d.ts +516 -515
  343. package/lib/_services/widget-content.model.d.ts.map +1 -0
  344. package/lib/_services/widget-content.service.d.ts +102 -101
  345. package/lib/_services/widget-content.service.d.ts.map +1 -0
  346. package/lib/_shared/translate-loader.factory.d.ts +8 -7
  347. package/lib/_shared/translate-loader.factory.d.ts.map +1 -0
  348. package/lib/app-toc-lib.module.d.ts +89 -88
  349. package/lib/app-toc-lib.module.d.ts.map +1 -0
  350. package/lib/collection.config.d.ts +160 -159
  351. package/lib/collection.config.d.ts.map +1 -0
  352. package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts +18 -17
  353. package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts.map +1 -0
  354. package/lib/components/app-toc-banner/app-toc-banner.component.d.ts +226 -225
  355. package/lib/components/app-toc-banner/app-toc-banner.component.d.ts.map +1 -0
  356. package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts +79 -78
  357. package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts.map +1 -0
  358. package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts +23 -22
  359. package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts.map +1 -0
  360. package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts +32 -31
  361. package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts.map +1 -0
  362. package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts +48 -47
  363. package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts.map +1 -0
  364. package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts +15 -14
  365. package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts.map +1 -0
  366. package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts +22 -21
  367. package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts.map +1 -0
  368. package/lib/components/app-toc-home/app-toc-home.component.d.ts +315 -314
  369. package/lib/components/app-toc-home/app-toc-home.component.d.ts.map +1 -0
  370. package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts +415 -408
  371. package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts.map +1 -0
  372. package/lib/components/app-toc-overview/app-toc-overview.component.d.ts +48 -47
  373. package/lib/components/app-toc-overview/app-toc-overview.component.d.ts.map +1 -0
  374. package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts +23 -22
  375. package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts.map +1 -0
  376. package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts +15 -14
  377. package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts.map +1 -0
  378. package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts +150 -149
  379. package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts.map +1 -0
  380. package/lib/components/completion-survey-form/completion-survey-form.component.d.ts +43 -42
  381. package/lib/components/completion-survey-form/completion-survey-form.component.d.ts.map +1 -0
  382. package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts +28 -27
  383. package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts.map +1 -0
  384. package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts +16 -15
  385. package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts.map +1 -0
  386. package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts +196 -195
  387. package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts.map +1 -0
  388. package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts +45 -44
  389. package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts.map +1 -0
  390. package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts +55 -54
  391. package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts.map +1 -0
  392. package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts +19 -18
  393. package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts.map +1 -0
  394. package/lib/components/public-survey-form/public-survey-form.component.d.ts +44 -43
  395. package/lib/components/public-survey-form/public-survey-form.component.d.ts.map +1 -0
  396. package/lib/components/survey-form-question/survey-form-question.component.d.ts +21 -20
  397. package/lib/components/survey-form-question/survey-form-question.component.d.ts.map +1 -0
  398. package/lib/components/survey-form-section/survey-form-section.component.d.ts +14 -13
  399. package/lib/components/survey-form-section/survey-form-section.component.d.ts.map +1 -0
  400. package/lib/models/app-toc-analytics.model.d.ts +153 -152
  401. package/lib/models/app-toc-analytics.model.d.ts.map +1 -0
  402. package/lib/models/app-toc.model.d.ts +85 -84
  403. package/lib/models/app-toc.model.d.ts.map +1 -0
  404. package/lib/models/auto-complete.model.d.ts +28 -27
  405. package/lib/models/auto-complete.model.d.ts.map +1 -0
  406. package/lib/models/card-content.model.d.ts +20 -19
  407. package/lib/models/card-content.model.d.ts.map +1 -0
  408. package/lib/models/content-strip-with-tabs.model.d.ts +45 -44
  409. package/lib/models/content-strip-with-tabs.model.d.ts.map +1 -0
  410. package/lib/models/discussion-forum.model.d.ts +41 -40
  411. package/lib/models/discussion-forum.model.d.ts.map +1 -0
  412. package/lib/models/goal.model.d.ts +23 -22
  413. package/lib/models/goal.model.d.ts.map +1 -0
  414. package/lib/models/meta-tag.model.d.ts +7 -6
  415. package/lib/models/meta-tag.model.d.ts.map +1 -0
  416. package/lib/models/playlist.model.d.ts +24 -23
  417. package/lib/models/playlist.model.d.ts.map +1 -0
  418. package/lib/models/profile-revamp.model.d.ts +15 -14
  419. package/lib/models/profile-revamp.model.d.ts.map +1 -0
  420. package/lib/models/rating.model.d.ts +18 -17
  421. package/lib/models/rating.model.d.ts.map +1 -0
  422. package/lib/models/user-profile.model.d.ts +38 -37
  423. package/lib/models/user-profile.model.d.ts.map +1 -0
  424. package/lib/resolvers/app-toc-cios-resolver.service.d.ts +13 -12
  425. package/lib/resolvers/app-toc-cios-resolver.service.d.ts.map +1 -0
  426. package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts +13 -12
  427. package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts.map +1 -0
  428. package/lib/resolvers/app-toc-content-read-resolver.service.d.ts +17 -16
  429. package/lib/resolvers/app-toc-content-read-resolver.service.d.ts.map +1 -0
  430. package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts +13 -12
  431. package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts.map +1 -0
  432. package/lib/resolvers/app-toc-resolver.service.d.ts +17 -16
  433. package/lib/resolvers/app-toc-resolver.service.d.ts.map +1 -0
  434. package/lib/resolvers/config-resolver.service.d.ts +12 -11
  435. package/lib/resolvers/config-resolver.service.d.ts.map +1 -0
  436. package/lib/resolvers/profile-resolver.service.d.ts +12 -11
  437. package/lib/resolvers/profile-resolver.service.d.ts.map +1 -0
  438. package/lib/resolvers/restricted-features-resolver.service.d.ts +12 -11
  439. package/lib/resolvers/restricted-features-resolver.service.d.ts.map +1 -0
  440. package/lib/routes/app-toc-home/app-toc-home.component.d.ts +20 -19
  441. package/lib/routes/app-toc-home/app-toc-home.component.d.ts.map +1 -0
  442. package/lib/routes/app-toc-home/app-toc-home.directive.d.ts +9 -8
  443. package/lib/routes/app-toc-home/app-toc-home.directive.d.ts.map +1 -0
  444. package/lib/routes/app-toc-home/app-toc-home.service.d.ts +9 -8
  445. package/lib/routes/app-toc-home/app-toc-home.service.d.ts.map +1 -0
  446. package/lib/services/access-control.service.d.ts +30 -29
  447. package/lib/services/access-control.service.d.ts.map +1 -0
  448. package/lib/services/action.service.d.ts +10 -9
  449. package/lib/services/action.service.d.ts.map +1 -0
  450. package/lib/services/app-toc-v2.service.d.ts +17 -16
  451. package/lib/services/app-toc-v2.service.d.ts.map +1 -0
  452. package/lib/services/app-toc.service.d.ts +241 -235
  453. package/lib/services/app-toc.service.d.ts.map +1 -0
  454. package/lib/services/certificate.service.d.ts +43 -42
  455. package/lib/services/certificate.service.d.ts.map +1 -0
  456. package/lib/services/discuss-utils.service.d.ts +34 -33
  457. package/lib/services/discuss-utils.service.d.ts.map +1 -0
  458. package/lib/services/editor.service.d.ts +18 -17
  459. package/lib/services/editor.service.d.ts.map +1 -0
  460. package/lib/services/load-check.service.d.ts +9 -8
  461. package/lib/services/load-check.service.d.ts.map +1 -0
  462. package/lib/services/loader.service.d.ts +17 -16
  463. package/lib/services/loader.service.d.ts.map +1 -0
  464. package/lib/services/mobile-apps.service.d.ts +39 -38
  465. package/lib/services/mobile-apps.service.d.ts.map +1 -0
  466. package/lib/services/netcore.service.d.ts +34 -33
  467. package/lib/services/netcore.service.d.ts.map +1 -0
  468. package/lib/services/nps-grid.service.d.ts +16 -15
  469. package/lib/services/nps-grid.service.d.ts.map +1 -0
  470. package/lib/services/otp.service.d.ts +21 -20
  471. package/lib/services/otp.service.d.ts.map +1 -0
  472. package/lib/services/profile-v2.service.d.ts +21 -20
  473. package/lib/services/profile-v2.service.d.ts.map +1 -0
  474. package/lib/services/reset-ratings.service.d.ts +9 -8
  475. package/lib/services/reset-ratings.service.d.ts.map +1 -0
  476. package/lib/services/resource-download-helper.service.d.ts +30 -29
  477. package/lib/services/resource-download-helper.service.d.ts.map +1 -0
  478. package/lib/services/timer.service.d.ts +10 -9
  479. package/lib/services/timer.service.d.ts.map +1 -0
  480. package/lib/services/title-tag.service.d.ts +22 -21
  481. package/lib/services/title-tag.service.d.ts.map +1 -0
  482. package/lib/services/user-profile.service.d.ts +25 -24
  483. package/lib/services/user-profile.service.d.ts.map +1 -0
  484. package/lib/services/viewer-data.service.d.ts +59 -58
  485. package/lib/services/viewer-data.service.d.ts.map +1 -0
  486. package/lib/services/viewer-util.service.d.ts +77 -76
  487. package/lib/services/viewer-util.service.d.ts.map +1 -0
  488. package/lib/share-toc/share-toc/share-toc.component.d.ts +57 -56
  489. package/lib/share-toc/share-toc/share-toc.component.d.ts.map +1 -0
  490. package/lib/share-toc/share-toc.module.d.ts +33 -32
  491. package/lib/share-toc/share-toc.module.d.ts.map +1 -0
  492. package/package.json +1 -1
  493. package/public-api.d.ts +59 -56
  494. package/public-api.d.ts.map +1 -0
  495. package/sunbird-cb-toc.d.ts.map +1 -0
@@ -1,475 +1,475 @@
1
- import { Component, HostListener, Inject, Optional, ViewChild } from '@angular/core';
2
- import { WsEvents } from '@sunbird-cb/utils-v2';
3
- import * as _ from 'lodash';
4
- import { ConsentDialogComponent } from './consent-dialog.component';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/router";
7
- import * as i2 from "@sunbird-cb/consumption";
8
- import * as i3 from "@ngx-translate/core";
9
- import * as i4 from "@sunbird-cb/utils-v2";
10
- import * as i5 from "../../services/certificate.service";
11
- import * as i6 from "../../services/loader.service";
12
- import * as i7 from "@angular/material/dialog";
13
- import * as i8 from "@angular/material/legacy-snack-bar";
14
- import * as i9 from "../../services/netcore.service";
15
- import * as i10 from "@angular/common";
16
- import * as i11 from "@angular/material/icon";
17
- import * as i12 from "@angular/material/legacy-tabs";
18
- import * as i13 from "../../_collection/_common/skeleton-loader/skeleton-loader.component";
19
- import * as i14 from "../../_collection/_common/content-toc/app-toc-about/app-toc-about.component";
20
- import * as i15 from "../../share-toc/share-toc/share-toc.component";
21
- import * as i16 from "@sunbird-cb/discussion-v2";
22
- export class AppTocCiosHomeComponent {
23
- handleScroll() {
24
- if (this.scrollLimit) {
25
- if ((window.scrollY + this.rcElem.BottomPos) >= this.scrollLimit) {
26
- this.rcElement.nativeElement.style.position = 'sticky';
27
- }
28
- else {
29
- this.rcElement.nativeElement.style.position = 'fixed';
30
- }
31
- }
32
- // 236... (OffsetTop of right container + 104)
33
- if (window.scrollY > (this.rcElem.offSetTop + 104)) {
34
- this.scrolled = true;
35
- }
36
- else {
37
- this.scrolled = false;
38
- }
39
- }
40
- constructor(route, commonSvc, translate, configSvc, events, langtranslations, contentSvc, certSvc, loader, matDialog, snackBar, netCoreService, environment) {
41
- this.route = route;
42
- this.commonSvc = commonSvc;
43
- this.translate = translate;
44
- this.configSvc = configSvc;
45
- this.events = events;
46
- this.langtranslations = langtranslations;
47
- this.contentSvc = contentSvc;
48
- this.certSvc = certSvc;
49
- this.loader = loader;
50
- this.matDialog = matDialog;
51
- this.snackBar = snackBar;
52
- this.netCoreService = netCoreService;
53
- this.environment = environment;
54
- this.commentId = '';
55
- this.skeletonLoader = true;
56
- this.extContentReadData = {};
57
- this.userExtCourseEnroll = {};
58
- this.downloadCertificateLoading = false;
59
- this.forPreview = window.location.href.includes('/public/') || window.location.href.includes('?editMode=true');
60
- this.extContentAvailable = true;
61
- this.canEnroll = false;
62
- this.enrollValidationLoading = true;
63
- this.rcElem = {
64
- offSetTop: 0,
65
- BottomPos: 0,
66
- };
67
- this.contentLink = '';
68
- this.isMobile = false;
69
- this.enableShare = false;
70
- this.currentLang = 'en';
71
- this.route.data.subscribe((data) => {
72
- this.enrollValidationLoading = false;
73
- if (data && data.extContent && data.extContent.data && data.extContent.data.content) {
74
- this.extContentReadData = data.extContent.data.content;
75
- this.extContentReadData['certificateObj'] = {
76
- data: {},
77
- };
78
- this.skeletonLoader = false;
79
- }
80
- else {
81
- this.extContentAvailable = false;
82
- this.skeletonLoader = false;
83
- }
84
- if (data && data.userEnrollContent && data.userEnrollContent.data && data.userEnrollContent.data.result &&
85
- Object.keys(data.userEnrollContent.data.result).length > 0) {
86
- this.userExtCourseEnroll = data.userEnrollContent.data.result;
87
- if (this.userExtCourseEnroll.completionpercentage === 100) {
88
- this.extContentReadData['completionStatus'] = 2;
89
- this.downloadCert();
90
- this.contentViewEventForNetCore('completion');
91
- }
92
- }
93
- else {
94
- this.validateEnrollmentEligibility();
95
- }
96
- });
97
- if (localStorage.getItem('websiteLanguage')) {
98
- this.translate.setDefaultLang('en');
99
- this.currentLang = localStorage.getItem('websiteLanguage');
100
- this.translate.use(this.currentLang);
101
- }
102
- this.configSvc.languageTranslationFlag.subscribe((data) => {
103
- if (data) {
104
- if (localStorage.getItem('websiteLanguage')) {
105
- this.currentLang = localStorage.getItem('websiteLanguage');
106
- this.translate.use(this.currentLang);
107
- }
108
- }
109
- });
110
- if (this.configSvc.userProfile) {
111
- this.rootOrgId = this.configSvc.userProfile.rootOrgId;
112
- }
113
- this.contentLink = `${window.location.pathname.substring(1)}${window.location.search}`;
114
- this.commentId = this.route.snapshot.queryParams.commentId ? this.route.snapshot.queryParams.commentId : '';
115
- if (this.commentId) {
116
- //this.selectedTabIndex = 2
117
- }
118
- }
119
- ngOnInit() {
120
- if (this.route.snapshot.data.pageData && this.route.snapshot.data.pageData.data) {
121
- this.config = this.route.snapshot.data.pageData.data;
122
- this.initializeDiscussData();
123
- }
124
- if (window.innerWidth <= 1200) {
125
- this.isMobile = true;
126
- }
127
- else {
128
- this.isMobile = false;
129
- }
130
- this.contentViewEventForNetCore('view');
131
- }
132
- initializeDiscussData() {
133
- if (this.config && this.config.discussWidgetData) {
134
- this.discussWidgetData = this.config.discussWidgetData;
135
- if (this.extContentReadData && this.extContentReadData.contentId) {
136
- this.discussWidgetData.newCommentSection.commentTreeData.entityId = this.extContentReadData.contentId;
137
- if (this.discussWidgetData.commentsList.repliesSection && this.discussWidgetData.commentsList.repliesSection.newCommentReply) {
138
- this.discussWidgetData.commentsList.repliesSection.newCommentReply.commentTreeData.entityId = this.extContentReadData.contentId;
139
- }
140
- }
141
- this.widgetData = this.config;
142
- this.widgetData['type'] = 'tips';
143
- this.widgetData['cardClass'] = 'slider-container';
144
- this.widgetData['height'] = 'auto';
145
- this.widgetData['sliderData'] = _.get(this.extContentReadData, 'contentPartner.providerTips', []);
146
- if (Object.keys(this.userExtCourseEnroll).length) {
147
- this.discussWidgetData.enrolledContent = true;
148
- this.discussWidgetData.newCommentSection.commentBox.placeholder = 'Start a discussion';
149
- }
150
- else {
151
- this.discussWidgetData.enrolledContent = false;
152
- this.discussWidgetData.newCommentSection.commentBox.placeholder = 'Enrol to add your comments';
153
- }
154
- this.discussWidgetData = { ...this.discussWidgetData };
155
- }
156
- }
157
- handleCapitalize(str, type) {
158
- return this.commonSvc.handleCapitalize(str, type);
159
- }
160
- translateLabels(label, type) {
161
- return this.langtranslations.translateLabel(label, type, '');
162
- }
163
- ngAfterViewInit() {
164
- if (this.rcElement) {
165
- this.rcElem.BottomPos = this.rcElement.nativeElement.offsetTop + this.rcElement.nativeElement.offsetHeight;
166
- this.rcElem.offSetTop = this.rcElement.nativeElement.offsetTop;
167
- }
168
- }
169
- redirectToContent(contentData) {
170
- const userData = this.configSvc.userProfileV2;
171
- const extUrl = contentData.redirectUrl.replace('<username>', userData.email);
172
- return extUrl;
173
- }
174
- replaceText(str, replaceTxt) {
175
- return str.replaceAll(replaceTxt, '');
176
- }
177
- formatcourseProviders(providers) {
178
- if (!providers || !Array.isArray(providers)) {
179
- return '';
180
- }
181
- return providers.map((provider) => provider.name).join(', ');
182
- }
183
- async enRollToExtCourse(content) {
184
- const consentUrl = `${this.environment?.missionKarmayogiPath}${this.config?.contentConsent?.consentDocUrl}` || '';
185
- const assetsDocUrl = `${this.config?.contentConsent?.assetsDocUrl}` || '';
186
- const dialogRef = this.matDialog.open(ConsentDialogComponent, {
187
- width: '900px',
188
- height: '70vh',
189
- maxHeight: '90vh',
190
- minHeight: '400px',
191
- disableClose: true,
192
- hasBackdrop: true,
193
- panelClass: 'consent-dialog-panel',
194
- data: {
195
- consentUrl: consentUrl,
196
- assetsDocUrl: assetsDocUrl
197
- }
198
- });
199
- // Handle dialog close
200
- dialogRef.afterClosed().subscribe((result) => {
201
- if (result === true) {
202
- // User agreed - proceed with enrollment
203
- // need to call consent api
204
- this.callConsentApi(content);
205
- }
206
- else {
207
- // User disagreed
208
- this.snackBar.open('You must agree to the terms to enroll in this course.', 'X', {
209
- duration: 5000,
210
- });
211
- }
212
- });
213
- }
214
- callConsentApi(content) {
215
- console.log(content);
216
- const request = {
217
- "request": {
218
- "contentId": content?.contentId,
219
- "consentId": this.config?.contentConsent?.consentId || '',
220
- "additionalAttributes": {
221
- "userRoles": ["public"],
222
- "versionKey": new Date().getTime(),
223
- "description": "I have read and agree with the above declaration."
224
- }
225
- }
226
- };
227
- this.certSvc.consentSubmit(request).subscribe((_res) => {
228
- this.proceedWithEnrollment(content);
229
- }, (error) => {
230
- this.snackBar.open(error?.error?.params?.msg || 'Unable to submit consent', 'X', {
231
- duration: 5000,
232
- });
233
- });
234
- }
235
- async proceedWithEnrollment(content) {
236
- this.loader.changeLoad.next(true);
237
- const reqbody = {
238
- courseId: content.contentId,
239
- partnerId: content.contentPartner.id,
240
- };
241
- const enrollRes = await this.contentSvc.extContentEnroll(reqbody).toPromise().catch(_error => { return _error; });
242
- if (enrollRes && enrollRes.result && Object.keys(enrollRes.result).length > 0) {
243
- this.discussWidgetData.enrolledContent = true;
244
- this.discussWidgetData.newCommentSection.commentBox.placeholder = 'Start a discussion';
245
- this.getUserContentEnroll(content.contentId);
246
- this.contentViewEventForNetCore('enroll');
247
- }
248
- else {
249
- this.loader.changeLoad.next(false);
250
- this.snackBar.open(enrollRes?.error?.params?.msg || 'Unable to enroll to the content', 'X', {
251
- duration: 10000,
252
- });
253
- }
254
- }
255
- async getUserContentEnroll(contentId) {
256
- const enrollRes = await this.contentSvc.fetchExtUserContentEnroll(contentId).toPromise().catch(_error => { });
257
- if (enrollRes && enrollRes.result && Object.keys(enrollRes.result).length > 0) {
258
- this.userExtCourseEnroll = enrollRes.result;
259
- this.loader.changeLoad.next(false);
260
- this.telemetryToCaptureInteract(contentId, 'enroll', 'enrol-content');
261
- this.snackBar.open('Successfully enrolled in the course.');
262
- }
263
- else {
264
- this.loader.changeLoad.next(false);
265
- this.snackBar.open('Unable to get the enrolled details');
266
- }
267
- }
268
- captureRedirectTelemetry(content) {
269
- this.raiseTelemtryStartEvent();
270
- this.telemetryToCaptureInteract(content.contentId, 'redirect', 'redirect-content');
271
- this.raiseTelemtryEndEvent();
272
- }
273
- raiseTelemtryStartEvent() {
274
- const event = {
275
- eventType: WsEvents.WsEventType.Telemetry,
276
- eventLogLevel: WsEvents.WsEventLogLevel.Info,
277
- from: 'test',
278
- to: '',
279
- data: {
280
- edata: { type: '' },
281
- object: {},
282
- state: WsEvents.EnumTelemetrySubType.Loaded,
283
- type: 'session',
284
- mode: 'view',
285
- },
286
- };
287
- this.events.dispatchEvent(event);
288
- }
289
- telemetryToCaptureInteract(contentId, subType, id) {
290
- this.events.raiseInteractTelemetry({
291
- type: 'click',
292
- subType,
293
- id: id,
294
- }, {
295
- id: contentId,
296
- type: 'External content',
297
- }, {
298
- module: 'Home',
299
- });
300
- }
301
- raiseTelemtryEndEvent() {
302
- const event = {
303
- eventType: WsEvents.WsEventType.Telemetry,
304
- eventLogLevel: WsEvents.WsEventLogLevel.Info,
305
- from: 'test',
306
- to: '',
307
- data: {
308
- edata: { type: '' },
309
- object: {},
310
- state: WsEvents.EnumTelemetrySubType.Unloaded,
311
- type: 'session',
312
- mode: 'view',
313
- },
314
- };
315
- this.events.dispatchEvent(event);
316
- }
317
- async downloadCert() {
318
- this.downloadCertificateLoading = true;
319
- const certRes = await this.certSvc.downloadCertificate_v2(this.userExtCourseEnroll.issued_certificates[0].identifier).toPromise().catch(_error => { });
320
- if (certRes && Object.keys(certRes.result).length > 0) {
321
- this.downloadCertificateLoading = false;
322
- if (this.userExtCourseEnroll.issued_certificates && this.userExtCourseEnroll.issued_certificates.length
323
- && this.userExtCourseEnroll.issued_certificates[0]) {
324
- this.extContentReadData['certificateObj'] = {
325
- data: this.userExtCourseEnroll.issued_certificates[0],
326
- certData: certRes.result.printUri,
327
- certId: this.userExtCourseEnroll.issued_certificates[0].identifier,
328
- };
329
- }
330
- }
331
- else {
332
- this.downloadCertificateLoading = false;
333
- }
334
- }
335
- onClickOfShare() {
336
- this.enableShare = true;
337
- //this.raiseTelemetryForShare('shareContent')
338
- }
339
- /* tslint:disable */
340
- // raiseTelemetryForShare(subType: any) {
341
- // //console.log(this.extContentReadData, this.events, subType)
342
- // // this.events.raiseInteractTelemetry(
343
- // // {
344
- // // type: 'click',
345
- // // subType,
346
- // // id: this.content ? this.content.identifier : '',
347
- // // },
348
- // // {
349
- // // id: this.content ? this.content.identifier : '',
350
- // // type: this.content ? this.content.primaryCategory : '',
351
- // // },
352
- // // {
353
- // // pageIdExt: `btn-${subType}`,
354
- // // module: WsEvents.EnumTelemetrymodules.CONTENT,
355
- // // }
356
- // // )
357
- // }
358
- resetEnableShare(_eventData) {
359
- this.enableShare = false;
360
- }
361
- contentViewEventForNetCore(eventType) {
362
- if (this.configSvc.netcoreConfig && this.configSvc.netcoreConfig.netcoreWebConfig // NOSONAR
363
- && this.configSvc.netcoreConfig.netcoreWebConfig.isActive // NOSONAR
364
- && this.configSvc.netcoreConfig.netcoreWebConfig.events // NOSONAR
365
- && this.configSvc.netcoreConfig.netcoreWebConfig.events.content_view // NOSONAR
366
- && this.configSvc.netcoreConfig.netcoreWebConfig.events.content_view.isActive // NOSONAR
367
- ) {
368
- let payload = {};
369
- // if (this.configSvc && this.configSvc.unMappedUser && this.configSvc.unMappedUser.identifier) { // NOSONAR
370
- // payload['pk^userid'] = this.configSvc.unMappedUser.identifier.trim().toLowerCase()
371
- // }
372
- // console.log('payload', payload)
373
- if (this.extContentReadData && this.extContentReadData.name) {
374
- payload['content_name'] = this.extContentReadData.name;
375
- }
376
- // if(this.extContentReadData && this.extContentReadData.courseCategory) {
377
- payload['content_category'] = 'External Course';
378
- // }
379
- if (this.extContentReadData && this.extContentReadData.externalId) {
380
- payload['content_id'] = this.extContentReadData.externalId;
381
- }
382
- // if(this.extContentReadData && this.extContentReadData.name) {
383
- payload['content_url'] = window.location.href;
384
- // }
385
- if (this.extContentReadData && this.extContentReadData.appIcon) {
386
- payload['content_image'] = this.extContentReadData.appIcon;
387
- }
388
- if (this.extContentReadData && this.extContentReadData.duration) {
389
- payload['content_duration'] = this.extContentReadData.duration && Number(this.extContentReadData.duration) > 0 ? Number(this.extContentReadData.duration) : 0;
390
- }
391
- else {
392
- payload['content_duration'] = 0;
393
- }
394
- if (this.extContentReadData && this.extContentReadData.avgRating) {
395
- payload['content_rating'] = this.extContentReadData.avgRating;
396
- payload['content rating'] = this.extContentReadData.avgRating;
397
- }
398
- if (this.extContentReadData && this.extContentReadData.totalNoOfRating) {
399
- payload['no_users_rated'] = this.extContentReadData.totalNoOfRating;
400
- }
401
- // if(Object.keys(this.userExtCourseEnroll).length) {
402
- payload['learning_path_content'] = Object.keys(this.userExtCourseEnroll).length ? true : false;
403
- payload['learning path content'] = Object.keys(this.userExtCourseEnroll).length ? true : false;
404
- // }
405
- if (this.extContentReadData && this.extContentReadData.source) {
406
- payload['content_provider_name'] = this.extContentReadData.source;
407
- }
408
- else if (this.extContentReadData && this.extContentReadData.contentPartner &&
409
- this.extContentReadData.contentPartner.contentPartnerName) {
410
- payload['content_provider_name'] = this.extContentReadData.contentPartner.contentPartnerName;
411
- }
412
- else {
413
- payload['content_provider_name'] = 'Karmayogi Bharat';
414
- }
415
- if (eventType === 'view') {
416
- this.netCoreService.trackEventForContentAndEvent('content_view', this.configSvc.unMappedUser.identifier.trim().toLowerCase(), payload);
417
- }
418
- else if (eventType === 'enroll') {
419
- this.netCoreService.trackEventForContentAndEvent('content_enrolment', this.configSvc.unMappedUser.identifier.trim().toLowerCase(), payload);
420
- }
421
- else if (eventType === 'completion') {
422
- this.netCoreService.trackEventForContentAndEvent('content_completion', this.configSvc.unMappedUser.identifier.trim().toLowerCase(), payload);
423
- }
424
- }
425
- }
426
- secondsToTime(d) {
427
- d = Number(d);
428
- var h = Math.floor(d / 3600);
429
- var m = Math.floor(d % 3600 / 60);
430
- var s = Math.floor(d % 3600 % 60);
431
- var hDisplay = h > 0 ? h + (h == 1 ? " hour, " : " hours, ") : "";
432
- var mDisplay = m > 0 ? m + (m == 1 ? " minute, " : " minutes, ") : "";
433
- var sDisplay = s > 0 ? s + (s == 1 ? " second" : " seconds") : "";
434
- return hDisplay + mDisplay + sDisplay;
435
- }
436
- clearCommentIdFromUrl() {
437
- const currentQueryParams = { ...this.route.snapshot.queryParams };
438
- delete currentQueryParams.commentId;
439
- this.commentId = '';
440
- }
441
- validateEnrollmentEligibility() {
442
- // Only validate if user is not already enrolled and content is available
443
- if (Object.keys(this.userExtCourseEnroll).length === 0 && this.extContentReadData && this.extContentReadData.contentId && this.extContentReadData.contentPartner && this.extContentReadData.contentPartner.id) {
444
- this.enrollValidationLoading = true;
445
- this.certSvc.validateEnrollmentEligibility(this.extContentReadData.contentId, this.extContentReadData.contentPartner.id).subscribe((_response) => {
446
- this.enrollValidationLoading = false;
447
- this.canEnroll = true;
448
- }, (error) => {
449
- this.snackBar.open(error?.error?.params?.msg || 'Unable to validate enrollment eligibility', 'X', {
450
- duration: 10000,
451
- });
452
- this.enrollValidationLoading = false;
453
- this.canEnroll = false;
454
- });
455
- }
456
- }
457
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocCiosHomeComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.CommonMethodsService }, { token: i3.TranslateService }, { token: i4.ConfigurationsService }, { token: i4.EventService }, { token: i4.MultilingualTranslationsService }, { token: i4.WidgetContentService }, { token: i5.CertificateService }, { token: i6.LoaderService }, { token: i7.MatDialog }, { token: i8.MatLegacySnackBar }, { token: i9.NetCoreService }, { token: 'environment', optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
458
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AppTocCiosHomeComponent, selector: "ws-app-app-toc-cios-home", host: { listeners: { "window:scroll": "handleScroll($event)" } }, viewQueries: [{ propertyName: "rcElement", first: true, predicate: ["rightContainer"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"extContentAvailable\">\r\n <div class=\"toc-banner\">\r\n <div class=\"flex flex-row gap-6 fixed-width\">\r\n <div class=\"banner-details toc-content\" #bannerDetails>\r\n <div class=\"flex flex-col gap-4\">\r\n <div class=\"flex items-center justify-between gap-4\">\r\n <ng-container *ngIf=\"skeletonLoader\">\r\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\r\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\r\n <ws-widget-skeleton-loader [width]=\"'140px'\" [height]=\"'24px'\"\r\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!skeletonLoader\">\r\n <!-- <div class=\"flex flex-row gap-2\">\r\n <div class=\"flex flex-row tag-div rounded-2xl gap-1 items-center p-2\">\r\n <mat-icon class=\"ws-mat-orange-text\">video_library</mat-icon>\r\n <ng-container *ngIf=\"content?.courseCategory\">\r\n <div class=\"text-xs font-bold text-white leading-3\">{{ translateLabel(content?.courseCategory, 'searchfilters') }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"extContentReadData?.topic\">\r\n <div class=\"text-xs font-bold text-white leading-3\">{{ 'External Course' }}</div>\r\n </ng-container>\r\n </div>\r\n </div> -->\r\n </ng-container>\r\n\r\n <div class=\"flex items-center text-white mob-share\">\r\n <mat-icon (click)=\"onClickOfShare()\">share</mat-icon>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"!skeletonLoader\">\r\n <!-- Knowledge level block -->\r\n <div *ngIf=\"extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel\"\r\n class=\"knowledge-level-container\">\r\n <span\r\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'beginner' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'beginner'\"\r\n class=\"level-badge beginner\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\r\n <rect width=\"16\" height=\"16\" fill=\"#DBF4DC\" />\r\n <path\r\n d=\"M7.42267 5C7.67927 4.55555 8.32077 4.55556 8.57737 5L12.0415 11C12.2981 11.4444 11.9773 12 11.4641 12H4.53592C4.02272 12 3.70197 11.4444 3.95857 11L7.42267 5Z\"\r\n fill=\"#49C951\" />\r\n </svg>\r\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\r\n </span>\r\n <span\r\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'intermediate' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'intermediate'\"\r\n class=\"level-badge intermediate\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\r\n <rect width=\"16\" height=\"16\" fill=\"#D1DBEC\" />\r\n <path\r\n d=\"M7.42267 2.66666C7.67927 2.22221 8.32077 2.22221 8.57737 2.66666L12.0415 8.66666C12.2981 9.1111 11.9773 9.66666 11.4641 9.66666H4.53592C4.02272 9.66666 3.70197 9.1111 3.95857 8.66666L7.42267 2.66666Z\"\r\n fill=\"#1B4CA1\" />\r\n <path\r\n d=\"M7.42267 5.66666C7.67927 5.22221 8.32077 5.22221 8.57737 5.66666L12.0415 11.6667C12.2981 12.1111 11.9773 12.6667 11.4641 12.6667H4.53592C4.02272 12.6667 3.70197 12.1111 3.95857 11.6667L7.42267 5.66666Z\"\r\n fill=\"#1B4CA1\" stroke=\"#D1DBEC\" stroke-width=\"0.5\" />\r\n </svg>\r\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\r\n </span>\r\n <span\r\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'advanced' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'advanced'\"\r\n class=\"level-badge advanced\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0)\">\r\n <rect width=\"16\" height=\"16\" fill=\"#FFE6E1\" />\r\n <path\r\n d=\"M7.42264 2.33334C7.67924 1.8889 8.32074 1.8889 8.57734 2.33334L12.0414 8.33334C12.298 8.77779 11.9773 9.33334 11.4641 9.33334H4.53589C4.02269 9.33334 3.70194 8.77779 3.95854 8.33334L7.42264 2.33334Z\"\r\n fill=\"#FF8268\" />\r\n <path\r\n d=\"M7.42264 5C7.67924 4.55555 8.32074 4.55556 8.57734 5L12.0414 11C12.298 11.4444 11.9773 12 11.4641 12H4.53589C4.02269 12 3.70194 11.4444 3.95854 11L7.42264 5Z\"\r\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\r\n <path\r\n d=\"M7.42264 7.66669C7.67924 7.22224 8.32074 7.22224 8.57734 7.66669L12.0414 13.6667C12.298 14.1111 11.9773 14.6667 11.4641 14.6667H4.53589C4.02269 14.6667 3.70194 14.1111 3.95854 13.6667L7.42264 7.66669Z\"\r\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\r\n </span>\r\n </div>\r\n </ng-container>\r\n <div class=\"flex flex-col gap-2\">\r\n <ng-container *ngIf=\"skeletonLoader\">\r\n <ws-widget-skeleton-loader [width]=\"'90%'\" [height]=\"'32px'\"\r\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\r\n <ws-widget-skeleton-loader [width]=\"'70%'\" [height]=\"'32px'\"\r\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\r\n </ng-container>\r\n <ng-container *ngIf=\"!skeletonLoader\">\r\n <div class=\"banner-text text-base sm:text-4xl leading-6 sm:leading-10 font-bold\">{{\r\n handleCapitalize(extContentReadData?.name) }}</div>\r\n <div class=\"text-sm sm:text-base source-text font-semibold break-words\" #contentSource\r\n [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\r\n {{ 'cardcontentv2.by' | translate }}\r\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">\r\n <span *ngIf=\"extContentReadData?.courseProvider?.length;else contentPartnerName\">\r\n {{ formatcourseProviders(extContentReadData?.courseProvider) }}\r\n </span>\r\n <ng-template #contentPartnerName>\r\n {{extContentReadData?.contentPartner?.contentPartnerName }}\r\n </ng-template>\r\n </span>\r\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{\r\n 'common.karmayogiBharat' | translate }}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container *ngIf=\"skeletonLoader\">\r\n <ws-widget-skeleton-loader [width]=\"'120px'\" [height]=\"'40px'\"\r\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\r\n <ws-widget-skeleton-loader [width]=\"'88px'\" [height]=\"'24px'\"\r\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\r\n </ng-container>\r\n <ng-container *ngIf=\"!skeletonLoader\">\r\n <!-- <div class=\"flex gap-4 items-center\" *ngIf=\"content?.averageRating || content?.additionalTags?.length\">\r\n <div class=\"flex flex-row rating-chip py-2 items-center cursor-pointer\" (click)=\"handleNavigateToReviews()\" *ngIf=\"content?.averageRating\">\r\n <div class=\"flex flex-row gap-1 margin-left-s items-center\">\r\n <mat-icon>grade</mat-icon>\r\n <div class=\"text-white text-sm leading-4\">{{ content?.averageRating }}</div>\r\n </div>\r\n <div class=\"separator\"></div>\r\n <div class=\"text-white text-sm leading-4 margin-right-m\">{{ content?.totalRating | pipeCountTransform }}</div>\r\n </div>\r\n <div class=\"flex items-center\" *ngIf=\"content?.additionalTags?.length\">\r\n <div class=\"most-enrolled-chip text-xs leading-3\">\r\n <span *ngIf=\"content?.additionalTags?.includes('mostTrending')\">{{ 'cardcontentv2.mostTrending' | translate }}</span>\r\n <span *ngIf=\"content?.additionalTags?.includes('mostEnrolled')\">{{ 'cardcontentv2.mostEnrolled' | translate }}</span>\r\n </div>\r\n </div>\r\n </div> -->\r\n </ng-container>\r\n <ng-container *ngIf=\"skeletonLoader\">\r\n <ws-widget-skeleton-loader [width]=\"'180px'\" [height]=\"'20px'\"\r\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\r\n </ng-container>\r\n <ng-container *ngIf=\"!skeletonLoader && extContentReadData?.lastUpdatedOn\">\r\n <div class=\"text-xs leading-4 source-text\">({{ 'apptoc.lastUpdatedOn' | translate }} {{\r\n extContentReadData?.lastUpdatedOn | date: 'MMM d, y' }})</div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"!forPreview\">\r\n\r\n <div *ngIf=\"isMobile\">\r\n <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length === 0\r\n && userExtCourseEnroll?.progress <= 100\">\r\n <div class=\"no-certificate-found mt-6 mb-4 mx-2\">\r\n <div>\r\n <span>Progress and certificates for {{ extContentReadData?.contentPartner?.contentPartnerName }}\r\n courses are visible only after you complete the course and pass the assessment.</span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"flex flex-col gap-4 p-5 border-bottom position-bottom\">\r\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\r\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\r\n <span class=\"mat-body-2 ws-mat-black-text\">\r\n {{userExtCourseEnroll?.progress}}%</span>\r\n </div>\r\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\r\n [progress]=\"userExtCourseEnroll?.progress\"\r\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\r\n </ws-widget-content-progress>\r\n </ng-container> -->\r\n <ng-container *ngIf=\"(userExtCourseEnroll | json) === '{}' && !enrollValidationLoading && canEnroll\">\r\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\r\n (click)=\"enRollToExtCourse(extContentReadData)\">\r\n <ng-container>{{ 'apptochome.enroll' | translate }}\r\n </ng-container>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"enrollValidationLoading\">\r\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\r\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\r\n </ng-container>\r\n <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && extContentReadData?.redirectUrl\">\r\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\r\n [href]=\"extContentReadData?.redirectUrl\" (click)=\"captureRedirectTelemetry(extContentReadData)\">\r\n <ng-container>{{ 'apptochome.redirect' | translate }}\r\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\r\n </ng-container>\r\n </a>\r\n </ng-container>\r\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\r\n && userExtCourseEnroll?.progress === 100\">\r\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\r\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\r\n <span>Certificate</span>\r\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\r\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\r\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\r\n </div>\r\n </button>\r\n </ng-container> -->\r\n </div>\r\n <div>\r\n <div class=\"flex flex-col px-8 py-4 gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\r\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\r\n <div class=\"text-xs\">{{ extContentReadData?.duration * 60 | pipeDurationTransform: 'hms' }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"flex flex-row gap-6 fixed-width\">\r\n <div class=\"toc-content\" [ngClass]=\"isMobile ? '':'mt-8 mb-8'\">\r\n <mat-tab-group>\r\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\r\n <ng-template matTabContent>\r\n <div class=\"flex flex-col\" [ngClass]=\"isMobile ? '':'mt-5 mb-5'\">\r\n <ng-container *ngIf=\"skeletonLoader\">\r\n <ws-widget-skeleton-loader [width]=\"'80px'\" [height]=\"'16px'\"\r\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\r\n <div class=\"flex flex-col gap-2 mt-4\">\r\n <ws-widget-skeleton-loader [width]=\"'80%'\" [height]=\"'16px'\"\r\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\r\n <ws-widget-skeleton-loader [width]=\"'95%'\" [height]=\"'16px'\"\r\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\r\n <ws-widget-skeleton-loader [width]=\"'65%'\" [height]=\"'16px'\"\r\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!skeletonLoader\">\r\n <ws-widget-app-toc-about [contentReadData]=\"extContentReadData\" [showReviews]=\"false\"\r\n [baseContentReadData]=\"extContentReadData\"\r\n [showMarketPlaceCertificate]=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0 && userExtCourseEnroll?.progress === 100\"\r\n [content]=\"extContentReadData\" [fromMarketPlace]=\"true\"\r\n [skeletonLoader]=\"skeletonLoader\">\r\n </ws-widget-app-toc-about>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </mat-tab>\r\n\r\n <ng-container *ngIf=\"config?.commentsTab\">\r\n <mat-tab label=\"{{ 'apptocsinglepage.comments' | translate }}\">\r\n <!-- <ng-template matTabContent> -->\r\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\" *ngIf=\"discussWidgetData\">\r\n <ng-container *ngIf=\"!commentId\">\r\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\r\n </ng-container>\r\n <ng-container *ngIf=\"commentId\">\r\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\r\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\r\n Back to all comments\r\n </div>\r\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\r\n [skeletonLoader]></d-v2-widget-comment>\r\n </ng-container>\r\n\r\n </div>\r\n <!-- </ng-template> -->\r\n </mat-tab>\r\n </ng-container>\r\n </mat-tab-group>\r\n\r\n </div>\r\n <div class=\"right-container\">\r\n <div class=\"right-content\" #rightContainer>\r\n <ng-container *ngIf=\"skeletonLoader\">\r\n <ws-widget-skeleton-loader [width]=\"'384px'\" [height]=\"'224px'\"\r\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\r\n </ng-container>\r\n <ng-container *ngIf=\"!skeletonLoader\">\r\n <div class=\"flex flex-col image-div\"\r\n [ngStyle]=\"{\r\n 'background-image': 'url(' + extContentReadData?.appIcon + ')', 'background-repeat': 'no-repeat', 'background-size': 'cover'}\"\r\n [ngClass]=\"{'image-backdrop': scrolled}\">\r\n <div class=\"flex flex-col justify-between text-container\">\r\n <div class=\"flex items-center gap-4 justify-end\">\r\n <div (click)=\"onClickOfShare()\"\r\n class=\"flex flex-row items-center justify-end gap-2 share-tag\" *ngIf=\"!forPreview\">\r\n <mat-icon>share</mat-icon>\r\n <div>{{ 'apptocsinglepage.share' | translate }}</div>\r\n </div>\r\n </div>\r\n <div class=\"flex flex-col gap-1\" *ngIf=\"scrolled\">\r\n <div class=\"text-xl leading-6 text-white font-bold text-scrol-custom\">{{\r\n handleCapitalize(extContentReadData?.name) }}\r\n </div>\r\n <!-- <div class=\"text-sm source-text font-semibold break-words\" #contentSource [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\r\n {{ 'cardcontentv2.by' | translate }}\r\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">{{ extContentReadData?.contentPartner?.contentPartnerName }}</span>\r\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{ 'common.karmayogiBharat' | translate }}</span>\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!forPreview\">\r\n <div class=\"flex flex-col gap-3 p-3 border-bottom\">\r\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\r\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\r\n <span class=\"mat-body-2 ws-mat-black-text\">\r\n {{userExtCourseEnroll?.progress}}%</span>\r\n </div>\r\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\r\n [progress]=\"userExtCourseEnroll?.progress\"\r\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\r\n </ws-widget-content-progress>\r\n </ng-container> -->\r\n\r\n <ng-container\r\n *ngIf=\"(userExtCourseEnroll | json) === '{}' && !enrollValidationLoading && canEnroll\">\r\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\r\n (click)=\"enRollToExtCourse(extContentReadData)\">\r\n <ng-container>{{ 'apptochome.enroll' | translate }}\r\n </ng-container>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"enrollValidationLoading\">\r\n <ws-widget-skeleton-loader [width]=\"'100%'\" [height]=\"'32px'\"\r\n [bindingClass]=\"'rounded '\"></ws-widget-skeleton-loader>\r\n </ng-container>\r\n <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && extContentReadData?.redirectUrl\">\r\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\r\n [href]=\"extContentReadData?.redirectUrl\"\r\n (click)=\"captureRedirectTelemetry(extContentReadData)\">\r\n <ng-container>{{ 'apptochome.redirect' | translate }}\r\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\r\n </ng-container>\r\n </a>\r\n </ng-container>\r\n <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length === 0\r\n && userExtCourseEnroll?.progress <= 100 && widgetData && widgetData.sliderData?.length\">\r\n <div class=\"no-certificate-found\">\r\n <ws-widget-sliders-dynamic [widgetData]=\"widgetData\"></ws-widget-sliders-dynamic>\r\n </div>\r\n </ng-container>\r\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\r\n && userExtCourseEnroll?.progress === 100\">\r\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\r\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\r\n <span>Certificate</span>\r\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\r\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\r\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\r\n </div>\r\n </button>\r\n </ng-container> -->\r\n </div>\r\n </ng-container>\r\n <div>\r\n <div class=\"flex flex-col kpi-values items-center gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\r\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\r\n <div class=\"text-xs\">\r\n {{ extContentReadData?.duration | pipeDurationTransform: 'hms' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n<div *ngIf=\"!extContentAvailable\">\r\n <div class=\"flex justify-center w-full\">\r\n <div class=\"margin-xl text-center\">\r\n <img src=\"/assets/common/error-pages/empty_search.svg\" wsUtilsImageResponsive alt=\"No results\"\r\n class=\"margin-top-l margin-bottom-s\">\r\n <h2 class=\"mat-h2\" i18n=\"search route no result\">{{'learnsearch.noResults' | translate}}</h2>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<ws-app-share-toc *ngIf=\"enableShare\" [contentLink]=\"contentLink\" [rootOrgId]=\"rootOrgId\" [content]=\"extContentReadData\"\r\n (resetEnableShare)=\"resetEnableShare($event)\"></ws-app-share-toc>", styles: [".source-text{color:#ffffffb3}.toc-banner{background:#3a83cf;background:linear-gradient(135deg,#3a83cf,#1b4ca1);width:100%}.toc-banner .fixed-width{padding:0 16px}.toc-banner .banner-details{padding:36px 0}.toc-banner .banner-details .due-tag{padding:4px;color:#fff;border-radius:4px}.toc-banner .banner-details .due-warning{background-color:#ff9800;border:1px solid #FF9800}.toc-banner .banner-details .due-overdue{background-color:#f44336;border:1px solid #F44336}.toc-banner .banner-details .due-success{background-color:#4caf50;border:1px solid #4CAF50}.toc-banner .banner-details .rating-chip{border:1px solid rgba(0,0,0,.6);border-radius:20px;background-color:#0009}.toc-banner .banner-details .rating-chip mat-icon{width:16px;height:16px;color:#ff9800;font-size:16px}.toc-banner .banner-details .rating-chip .separator{width:1px;height:20px;border-right:1px solid rgba(255,255,255,.16);margin:0 8px}.toc-banner .banner-details .banner-text{color:#fffffff2;word-wrap:break-word}.toc-banner .info-div{max-width:384px;width:100%}.toc-banner .most-enrolled-chip{background-color:#ffea9e;border:1px solid #FFEA9E;padding:4px;border-radius:2px}.text-info-div{padding:8px;background-color:#fff;border-radius:64px}.tag-div{border:1px solid #FF9800;background-color:#00000080}.tag-div mat-icon{font-size:12px;width:12px;height:12px}.fixed-width{max-width:1200px;display:block;margin:0 auto}.mat-subheading-1{margin-bottom:4px!important}.initial-circle{width:36px;height:36px;border-radius:50%;background:#1b2133;color:#fff;text-transform:uppercase}.toc-content{max-width:792px;width:100%}.right-container .image-div{height:220px;background-color:#ccc;border-top-left-radius:12px;border-top-right-radius:12px}.right-container .image-div img{max-width:384px;width:100%;height:220px;border-top-left-radius:12px;border-top-right-radius:12px;position:relative;top:-42px}.right-container .image-div .share-container{position:relative;z-index:2;top:20px;margin-right:20px}.right-container .image-div .share-tag{font-weight:700;background-color:#000;border:1px solid #FFF;border-radius:20px;padding:6px 16px;color:#fff;cursor:pointer}.right-container .tag-div mat-icon{width:16px;height:16px;font-size:16px}.right-container .share-tag mat-icon{width:20px;height:20px;font-size:20px}.right-container .text-container{position:relative;z-index:2;height:220px;padding:16px}.right-container .right-content{background-color:#fff;border-radius:12px;position:fixed;z-index:10;top:132px;width:384px;margin-bottom:2rem;box-shadow:0 2px 6px -1px #00000080,0 -4px 4px -2px #00000080}.right-container .border-bottom{border-bottom:1px solid rgba(0,0,0,.2)}.right-container .info-div{background-color:#fef7ed;border:none;border-radius:8px;padding:8px 12px;font-size:14px}.right-container .info-div .mat-icon{width:18px;height:18px;font-size:18px}.right-container .kpi-values{width:64px;padding:8px;text-align:center}.right-container .kpi-values .timer-icon{color:#000000de;height:20px}.batch-info{padding:16px;border-radius:4px;background-color:#1b4ca114;border:1px solid rgba(27,76,161,.08);text-align:center}.batch-info .batch-label{font-size:.75rem;color:#0009;line-height:1rem}.button{border-radius:64px;letter-spacing:.25px;padding:12px 36px;font-weight:700;cursor:pointer;text-align:center}@media screen and (max-width: 1200px){.right-container{display:none}.action-button:before{content:\"\";position:absolute;inset:-10px;background-color:#ffffff40;border-radius:inherit;filter:blur(10px);z-index:-1}.action-button:after{content:\"\";position:absolute;inset:-10px;box-shadow:0 0 -4px -4px #fff9;border-radius:inherit;z-index:-1}.karma-points-div{display:none}}.enroll-modal{max-width:600px!important;width:100%!important}.enroll-modal .mat-dialog-container{padding:0;border-radius:12px}.confirmation-modal{max-width:420px!important;width:100%!important}.confirmation-modal .mat-dialog-container{border-radius:12px;padding:0}.image-backdrop{background-color:#000!important;position:relative}.image-backdrop:after{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);content:\"\";display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-color:#000000a6;border-top-left-radius:12px;border-top-right-radius:12px}.text-scrol-custom{height:200px;overflow-y:auto}@media screen and (max-width: 1000px){.confirmation-modal,.enroll-modal{max-width:90vw!important}}.kpi-loader-div{width:18%}a.action-button{color:#fff!important;width:auto}.rate-button{color:#000000de!important;font-size:.875rem;font-weight:700;border:none!important}.rate-button .mat-button-wrapper{display:flex;gap:8px;align-items:center}.mobile-enroll-div{padding:16px;position:fixed;z-index:1000;bottom:0;width:calc(100% - 32px)}.mobile-enroll-div .action-button{min-width:320px;max-width:400px;margin:auto}@media screen and (min-width: 1201px){.mobile-enroll-div,.mob-share{display:none!important}.hideAbove1200{display:none}}.mobile-progress{padding:16px}@media screen and (min-width: 1200px){.mobile-progress{display:none}}.sourceEllipsis{white-space:break-spaces;position:relative;overflow:hidden;text-overflow:clip;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}.text-white{color:#fff!important}.custom-button,.fluid-width{width:100%}.toc-container{background:#fff;width:100%}mat-divider{border-top-color:#d9d9d9}.sticky{top:56px;overflow:hidden;z-index:10;width:100%}.statusMsg{border-radius:4px;height:40px}.toc-body{padding-bottom:1rem}.toc-body .toc-links{width:100%;z-index:1;border:none;background:transparent}.toc-body .toc-links .mat-tab-link{text-align:left;justify-content:flex-start}.toc-body .toc-links .mat-tab-link.justify-center{justify-content:center}.toc-body .toc-links .mat-tab-link.link-active{color:#0074b6!important}.tab:focus{outline:1px solid!important}.rounded-icon{background:#fff 0% 0% no-repeat padding-box;box-shadow:0 2px 4px #00000029;border:2px solid #00A9F4;border-radius:50%;min-width:0;opacity:1;height:35px;width:35px;padding:0;align-items:center;align-self:center;float:right}.rounded-icon mat-icon{color:#00a9f4}.blue-border{border:2px solid #0074b6!important}.hidden-xs-inline{display:inline}@media only screen and (max-width: 599px){.hidden-xs-inline{display:none}}.visible-xs-inline{display:none}@media only screen and (max-width: 599px){.visible-xs-inline{display:inline}}.meta-section{flex:1;min-width:1px}.meta-section .unit-meta-item{border-radius:2px;box-sizing:border-box;margin-bottom:16px;box-shadow:none;padding-left:0}@media only screen and (max-width: 599px){.meta-section{width:100%}}.font-bold-imp{font-weight:700!important}.info-section{width:20%;min-width:250px}.info-section .custom-button{background:#0074b6 0% 0% no-repeat padding-box!important;border-radius:4px}@media only screen and (max-width: 599px){.info-section{width:100%;margin-left:0!important}}.info-section .glance-container .at-glance-heading{letter-spacing:0px;color:#222}.info-section .glance-container .info-item .cs-icons .mat-icon{color:#666;vertical-align:middle;font-size:20px}.info-section .glance-container .info-item .cs-icons img{width:20px;height:20px;vertical-align:middle}.info-section .glance-container .info-item .item-heading{font:600 14px/21px Lato;margin:0 0 4px;letter-spacing:0px;color:#0074b6!important}.info-section .glance-container .info-item .item-value{letter-spacing:0px;color:#5f5f5f}.info-section .glance-container .info-item .item-icon{width:20px;height:20px;font-size:20px;margin-left:8px}.toc-discussion-container{display:flex;justify-content:space-between;flex-wrap:wrap-reverse}.toc-discussion-container .discussion{flex:1;min-width:1px}.toc-discussion-container .cohorts{width:100%;background:#fff 0% 0% no-repeat padding-box;border:1px solid #D9D9D9;border-radius:8px;box-shadow:none}@media only screen and (min-width: 600px) and (max-width: 959px){.toc-discussion-container .cohorts{margin-left:24px;min-width:250px}}@media only screen and (max-width: 599px){.toc-discussion-container .cohorts{margin-left:0;margin-bottom:24px;width:100%}}.mtb-xl{margin-top:3.5rem;margin-bottom:3.5rem}.detailBar{display:flex}.editDetails{margin:auto;display:flex}.white-bg{background:#fff!important;background-color:#fff!important}.contacts-container{padding:22px 0 10px;border:0;border-top:1px;border-style:solid;border-bottom:1px;border-color:#ececec}.contacts-container .contacts-head{letter-spacing:0px;color:#222;background:transparent;margin-bottom:24px}.contacts-container .author-card{min-width:291px;width:291px;display:flex;flex-direction:row;align-items:center;margin-bottom:30px;padding-right:10px}.contacts-container .author-card .right{padding:0 15px}.contacts-container .author-card .user-name{letter-spacing:0px;color:#5f5f5f}.contacts-container .author-card .user-university{letter-spacing:0px;color:#00a9f4}.contacts-container .author-card .user-button{background:#fff 0% 0% no-repeat padding-box;border:1px solid #F58634;border-radius:15px;letter-spacing:0px;color:#f58634;max-width:60px;padding:4px}.divider-transparent{border-top-color:transparent!important}.scroll-to-top{position:fixed;bottom:15px;right:15px;opacity:0;transition:all .2s ease-in-out;border-radius:50%}.scroll-to-top .icon{font-size:24px!important}.show-scroll{opacity:1;transition:all .2s ease-in-out}.sticky-breadcrumbs{position:sticky;z-index:999;top:72px;width:100%}.sticky-banner{position:sticky;z-index:999}.sticky-navs{position:sticky!important;background:#fff;z-index:999;top:auto}.actbutton{border:1px solid rgba(0,0,0,.16);border-radius:4px;padding:0 15px;width:100%;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.actbutton .mat-icon{margin-right:6px}.disable-start-btn{cursor:not-allowed!important;pointer-events:none!important;opacity:.5!important}.certificate-loader ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#fff}.cb-plan-wrap{opacity:1;color:#1b4ca1;font-family:Lato-Regular;font-size:12px;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:16px}.cb-plan-wrap .cb-danger{border-radius:2px;padding:4px 8px;border:1px solid #d13924;background-color:#d13924!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-success{padding:4px 8px;border-radius:2px;border:1px solid #1d8922;background-color:#1d8922!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-warning{padding:4px 8px;border-radius:2px;border:1px solid #ef951e;background-color:#ef951e!important;color:#fff!important;opacity:1}.bg-white{background-color:#fff}.provider-logo-div{border-radius:4px;box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.provider-logo-div img{display:flex;border-radius:4px;width:40px;height:40px;padding:4px}ul{padding:0!important}.kpi-values{min-width:64px;padding:8px;text-align:center}.kpi-values img{height:24px;width:24px}.position-bottom{position:fixed;width:88%;bottom:0;z-index:99}.no-certificate-found{border:1px solid #ccc;border-color:#f3962f;background-color:#fceedb;border-radius:12px}.no-certificate-found{min-height:56px}.no-certificate-found ::ng-deep ws-widget-sliders-dynamic .banner-data{font-size:16px!important;font-family:lato,sans-serif!important}.truncate-5{-webkit-line-clamp:1;text-overflow:ellipsis;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;word-wrap:break-word}.ext-info-slider{padding:8px}#commentsDiv{margin:1rem auto;min-height:500px}.knowledge-level-container{margin-right:auto}.level-badge{display:inline-flex;height:24px;padding:2px 8px;align-items:center;gap:4px;flex-shrink:0;border-radius:12px;font-weight:600;font-size:12px;line-height:16px;white-space:nowrap}.level-badge.beginner{border:1px solid #49C951;background:linear-gradient(0deg,#49c95133 0% 100%),#fff;color:#2f8132;border-radius:16px}.level-badge.intermediate{border:1px solid #1B4CA1;background:linear-gradient(0deg,#1b4ca133 0% 100%),#fff;color:#1b4ca1;border-radius:16px}.level-badge.advanced{border:1px solid #FF8268;background:linear-gradient(0deg,#ff826833 0% 100%),#fff;color:#ff4b25;border-radius:16px}.level-badge svg{flex-shrink:0}::ng-deep .consent-dialog-panel .mat-dialog-container{overflow:hidden;padding:0;margin:0;border-radius:8px}::ng-deep .consent-dialog-panel .mat-dialog-content{padding:0;margin:0;max-height:none;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatLegacyTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "component", type: i12.MatLegacyTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "directive", type: i12.MatLegacyTabContent, selector: "[matTabContent]" }, { kind: "component", type: i13.SkeletonLoaderComponent, selector: "ws-widget-skeleton-loader", inputs: ["bindingClass", "height", "width"] }, { kind: "component", type: i14.AppTocAboutComponent, selector: "ws-widget-app-toc-about", inputs: ["condition", "kparray", "content", "contentReadData", "baseContentReadData", "skeletonLoader", "sticky", "tocStructure", "pathSet", "config", "resumeData", "forPreview", "showReviews", "batchData", "fromViewer", "selectedBatchData", "selectedTabValue", "fromMarketPlace", "showMarketPlaceCertificate", "languageList", "lockCertificate"], outputs: ["trigerCompletionSurveyForm"] }, { kind: "component", type: i15.ShareTocComponent, selector: "ws-app-share-toc", inputs: ["rootOrgId", "content", "contentLink", "baseContentReadData"], outputs: ["resetEnableShare"] }, { kind: "component", type: i16.WidgetCommentComponent, selector: "d-v2-widget-comment", inputs: ["widgetData", "commentId"], outputs: ["commentDataChange"] }, { kind: "pipe", type: i10.JsonPipe, name: "json" }, { kind: "pipe", type: i10.DatePipe, name: "date" }, { kind: "pipe", type: i4.PipeDurationTransformPipe, name: "pipeDurationTransform" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
459
- }
460
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocCiosHomeComponent, decorators: [{
461
- type: Component,
462
- args: [{ selector: 'ws-app-app-toc-cios-home', template: "<ng-container *ngIf=\"extContentAvailable\">\r\n <div class=\"toc-banner\">\r\n <div class=\"flex flex-row gap-6 fixed-width\">\r\n <div class=\"banner-details toc-content\" #bannerDetails>\r\n <div class=\"flex flex-col gap-4\">\r\n <div class=\"flex items-center justify-between gap-4\">\r\n <ng-container *ngIf=\"skeletonLoader\">\r\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\r\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\r\n <ws-widget-skeleton-loader [width]=\"'140px'\" [height]=\"'24px'\"\r\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!skeletonLoader\">\r\n <!-- <div class=\"flex flex-row gap-2\">\r\n <div class=\"flex flex-row tag-div rounded-2xl gap-1 items-center p-2\">\r\n <mat-icon class=\"ws-mat-orange-text\">video_library</mat-icon>\r\n <ng-container *ngIf=\"content?.courseCategory\">\r\n <div class=\"text-xs font-bold text-white leading-3\">{{ translateLabel(content?.courseCategory, 'searchfilters') }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"extContentReadData?.topic\">\r\n <div class=\"text-xs font-bold text-white leading-3\">{{ 'External Course' }}</div>\r\n </ng-container>\r\n </div>\r\n </div> -->\r\n </ng-container>\r\n\r\n <div class=\"flex items-center text-white mob-share\">\r\n <mat-icon (click)=\"onClickOfShare()\">share</mat-icon>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"!skeletonLoader\">\r\n <!-- Knowledge level block -->\r\n <div *ngIf=\"extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel\"\r\n class=\"knowledge-level-container\">\r\n <span\r\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'beginner' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'beginner'\"\r\n class=\"level-badge beginner\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\r\n <rect width=\"16\" height=\"16\" fill=\"#DBF4DC\" />\r\n <path\r\n d=\"M7.42267 5C7.67927 4.55555 8.32077 4.55556 8.57737 5L12.0415 11C12.2981 11.4444 11.9773 12 11.4641 12H4.53592C4.02272 12 3.70197 11.4444 3.95857 11L7.42267 5Z\"\r\n fill=\"#49C951\" />\r\n </svg>\r\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\r\n </span>\r\n <span\r\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'intermediate' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'intermediate'\"\r\n class=\"level-badge intermediate\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\r\n <rect width=\"16\" height=\"16\" fill=\"#D1DBEC\" />\r\n <path\r\n d=\"M7.42267 2.66666C7.67927 2.22221 8.32077 2.22221 8.57737 2.66666L12.0415 8.66666C12.2981 9.1111 11.9773 9.66666 11.4641 9.66666H4.53592C4.02272 9.66666 3.70197 9.1111 3.95857 8.66666L7.42267 2.66666Z\"\r\n fill=\"#1B4CA1\" />\r\n <path\r\n d=\"M7.42267 5.66666C7.67927 5.22221 8.32077 5.22221 8.57737 5.66666L12.0415 11.6667C12.2981 12.1111 11.9773 12.6667 11.4641 12.6667H4.53592C4.02272 12.6667 3.70197 12.1111 3.95857 11.6667L7.42267 5.66666Z\"\r\n fill=\"#1B4CA1\" stroke=\"#D1DBEC\" stroke-width=\"0.5\" />\r\n </svg>\r\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\r\n </span>\r\n <span\r\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'advanced' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'advanced'\"\r\n class=\"level-badge advanced\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0)\">\r\n <rect width=\"16\" height=\"16\" fill=\"#FFE6E1\" />\r\n <path\r\n d=\"M7.42264 2.33334C7.67924 1.8889 8.32074 1.8889 8.57734 2.33334L12.0414 8.33334C12.298 8.77779 11.9773 9.33334 11.4641 9.33334H4.53589C4.02269 9.33334 3.70194 8.77779 3.95854 8.33334L7.42264 2.33334Z\"\r\n fill=\"#FF8268\" />\r\n <path\r\n d=\"M7.42264 5C7.67924 4.55555 8.32074 4.55556 8.57734 5L12.0414 11C12.298 11.4444 11.9773 12 11.4641 12H4.53589C4.02269 12 3.70194 11.4444 3.95854 11L7.42264 5Z\"\r\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\r\n <path\r\n d=\"M7.42264 7.66669C7.67924 7.22224 8.32074 7.22224 8.57734 7.66669L12.0414 13.6667C12.298 14.1111 11.9773 14.6667 11.4641 14.6667H4.53589C4.02269 14.6667 3.70194 14.1111 3.95854 13.6667L7.42264 7.66669Z\"\r\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\r\n </span>\r\n </div>\r\n </ng-container>\r\n <div class=\"flex flex-col gap-2\">\r\n <ng-container *ngIf=\"skeletonLoader\">\r\n <ws-widget-skeleton-loader [width]=\"'90%'\" [height]=\"'32px'\"\r\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\r\n <ws-widget-skeleton-loader [width]=\"'70%'\" [height]=\"'32px'\"\r\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\r\n </ng-container>\r\n <ng-container *ngIf=\"!skeletonLoader\">\r\n <div class=\"banner-text text-base sm:text-4xl leading-6 sm:leading-10 font-bold\">{{\r\n handleCapitalize(extContentReadData?.name) }}</div>\r\n <div class=\"text-sm sm:text-base source-text font-semibold break-words\" #contentSource\r\n [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\r\n {{ 'cardcontentv2.by' | translate }}\r\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">\r\n <span *ngIf=\"extContentReadData?.courseProvider?.length;else contentPartnerName\">\r\n {{ formatcourseProviders(extContentReadData?.courseProvider) }}\r\n </span>\r\n <ng-template #contentPartnerName>\r\n {{extContentReadData?.contentPartner?.contentPartnerName }}\r\n </ng-template>\r\n </span>\r\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{\r\n 'common.karmayogiBharat' | translate }}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container *ngIf=\"skeletonLoader\">\r\n <ws-widget-skeleton-loader [width]=\"'120px'\" [height]=\"'40px'\"\r\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\r\n <ws-widget-skeleton-loader [width]=\"'88px'\" [height]=\"'24px'\"\r\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\r\n </ng-container>\r\n <ng-container *ngIf=\"!skeletonLoader\">\r\n <!-- <div class=\"flex gap-4 items-center\" *ngIf=\"content?.averageRating || content?.additionalTags?.length\">\r\n <div class=\"flex flex-row rating-chip py-2 items-center cursor-pointer\" (click)=\"handleNavigateToReviews()\" *ngIf=\"content?.averageRating\">\r\n <div class=\"flex flex-row gap-1 margin-left-s items-center\">\r\n <mat-icon>grade</mat-icon>\r\n <div class=\"text-white text-sm leading-4\">{{ content?.averageRating }}</div>\r\n </div>\r\n <div class=\"separator\"></div>\r\n <div class=\"text-white text-sm leading-4 margin-right-m\">{{ content?.totalRating | pipeCountTransform }}</div>\r\n </div>\r\n <div class=\"flex items-center\" *ngIf=\"content?.additionalTags?.length\">\r\n <div class=\"most-enrolled-chip text-xs leading-3\">\r\n <span *ngIf=\"content?.additionalTags?.includes('mostTrending')\">{{ 'cardcontentv2.mostTrending' | translate }}</span>\r\n <span *ngIf=\"content?.additionalTags?.includes('mostEnrolled')\">{{ 'cardcontentv2.mostEnrolled' | translate }}</span>\r\n </div>\r\n </div>\r\n </div> -->\r\n </ng-container>\r\n <ng-container *ngIf=\"skeletonLoader\">\r\n <ws-widget-skeleton-loader [width]=\"'180px'\" [height]=\"'20px'\"\r\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\r\n </ng-container>\r\n <ng-container *ngIf=\"!skeletonLoader && extContentReadData?.lastUpdatedOn\">\r\n <div class=\"text-xs leading-4 source-text\">({{ 'apptoc.lastUpdatedOn' | translate }} {{\r\n extContentReadData?.lastUpdatedOn | date: 'MMM d, y' }})</div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"!forPreview\">\r\n\r\n <div *ngIf=\"isMobile\">\r\n <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length === 0\r\n && userExtCourseEnroll?.progress <= 100\">\r\n <div class=\"no-certificate-found mt-6 mb-4 mx-2\">\r\n <div>\r\n <span>Progress and certificates for {{ extContentReadData?.contentPartner?.contentPartnerName }}\r\n courses are visible only after you complete the course and pass the assessment.</span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"flex flex-col gap-4 p-5 border-bottom position-bottom\">\r\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\r\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\r\n <span class=\"mat-body-2 ws-mat-black-text\">\r\n {{userExtCourseEnroll?.progress}}%</span>\r\n </div>\r\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\r\n [progress]=\"userExtCourseEnroll?.progress\"\r\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\r\n </ws-widget-content-progress>\r\n </ng-container> -->\r\n <ng-container *ngIf=\"(userExtCourseEnroll | json) === '{}' && !enrollValidationLoading && canEnroll\">\r\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\r\n (click)=\"enRollToExtCourse(extContentReadData)\">\r\n <ng-container>{{ 'apptochome.enroll' | translate }}\r\n </ng-container>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"enrollValidationLoading\">\r\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\r\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\r\n </ng-container>\r\n <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && extContentReadData?.redirectUrl\">\r\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\r\n [href]=\"extContentReadData?.redirectUrl\" (click)=\"captureRedirectTelemetry(extContentReadData)\">\r\n <ng-container>{{ 'apptochome.redirect' | translate }}\r\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\r\n </ng-container>\r\n </a>\r\n </ng-container>\r\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\r\n && userExtCourseEnroll?.progress === 100\">\r\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\r\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\r\n <span>Certificate</span>\r\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\r\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\r\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\r\n </div>\r\n </button>\r\n </ng-container> -->\r\n </div>\r\n <div>\r\n <div class=\"flex flex-col px-8 py-4 gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\r\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\r\n <div class=\"text-xs\">{{ extContentReadData?.duration * 60 | pipeDurationTransform: 'hms' }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"flex flex-row gap-6 fixed-width\">\r\n <div class=\"toc-content\" [ngClass]=\"isMobile ? '':'mt-8 mb-8'\">\r\n <mat-tab-group>\r\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\r\n <ng-template matTabContent>\r\n <div class=\"flex flex-col\" [ngClass]=\"isMobile ? '':'mt-5 mb-5'\">\r\n <ng-container *ngIf=\"skeletonLoader\">\r\n <ws-widget-skeleton-loader [width]=\"'80px'\" [height]=\"'16px'\"\r\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\r\n <div class=\"flex flex-col gap-2 mt-4\">\r\n <ws-widget-skeleton-loader [width]=\"'80%'\" [height]=\"'16px'\"\r\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\r\n <ws-widget-skeleton-loader [width]=\"'95%'\" [height]=\"'16px'\"\r\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\r\n <ws-widget-skeleton-loader [width]=\"'65%'\" [height]=\"'16px'\"\r\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!skeletonLoader\">\r\n <ws-widget-app-toc-about [contentReadData]=\"extContentReadData\" [showReviews]=\"false\"\r\n [baseContentReadData]=\"extContentReadData\"\r\n [showMarketPlaceCertificate]=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0 && userExtCourseEnroll?.progress === 100\"\r\n [content]=\"extContentReadData\" [fromMarketPlace]=\"true\"\r\n [skeletonLoader]=\"skeletonLoader\">\r\n </ws-widget-app-toc-about>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </mat-tab>\r\n\r\n <ng-container *ngIf=\"config?.commentsTab\">\r\n <mat-tab label=\"{{ 'apptocsinglepage.comments' | translate }}\">\r\n <!-- <ng-template matTabContent> -->\r\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\" *ngIf=\"discussWidgetData\">\r\n <ng-container *ngIf=\"!commentId\">\r\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\r\n </ng-container>\r\n <ng-container *ngIf=\"commentId\">\r\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\r\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\r\n Back to all comments\r\n </div>\r\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\r\n [skeletonLoader]></d-v2-widget-comment>\r\n </ng-container>\r\n\r\n </div>\r\n <!-- </ng-template> -->\r\n </mat-tab>\r\n </ng-container>\r\n </mat-tab-group>\r\n\r\n </div>\r\n <div class=\"right-container\">\r\n <div class=\"right-content\" #rightContainer>\r\n <ng-container *ngIf=\"skeletonLoader\">\r\n <ws-widget-skeleton-loader [width]=\"'384px'\" [height]=\"'224px'\"\r\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\r\n </ng-container>\r\n <ng-container *ngIf=\"!skeletonLoader\">\r\n <div class=\"flex flex-col image-div\"\r\n [ngStyle]=\"{\r\n 'background-image': 'url(' + extContentReadData?.appIcon + ')', 'background-repeat': 'no-repeat', 'background-size': 'cover'}\"\r\n [ngClass]=\"{'image-backdrop': scrolled}\">\r\n <div class=\"flex flex-col justify-between text-container\">\r\n <div class=\"flex items-center gap-4 justify-end\">\r\n <div (click)=\"onClickOfShare()\"\r\n class=\"flex flex-row items-center justify-end gap-2 share-tag\" *ngIf=\"!forPreview\">\r\n <mat-icon>share</mat-icon>\r\n <div>{{ 'apptocsinglepage.share' | translate }}</div>\r\n </div>\r\n </div>\r\n <div class=\"flex flex-col gap-1\" *ngIf=\"scrolled\">\r\n <div class=\"text-xl leading-6 text-white font-bold text-scrol-custom\">{{\r\n handleCapitalize(extContentReadData?.name) }}\r\n </div>\r\n <!-- <div class=\"text-sm source-text font-semibold break-words\" #contentSource [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\r\n {{ 'cardcontentv2.by' | translate }}\r\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">{{ extContentReadData?.contentPartner?.contentPartnerName }}</span>\r\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{ 'common.karmayogiBharat' | translate }}</span>\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!forPreview\">\r\n <div class=\"flex flex-col gap-3 p-3 border-bottom\">\r\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\r\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\r\n <span class=\"mat-body-2 ws-mat-black-text\">\r\n {{userExtCourseEnroll?.progress}}%</span>\r\n </div>\r\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\r\n [progress]=\"userExtCourseEnroll?.progress\"\r\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\r\n </ws-widget-content-progress>\r\n </ng-container> -->\r\n\r\n <ng-container\r\n *ngIf=\"(userExtCourseEnroll | json) === '{}' && !enrollValidationLoading && canEnroll\">\r\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\r\n (click)=\"enRollToExtCourse(extContentReadData)\">\r\n <ng-container>{{ 'apptochome.enroll' | translate }}\r\n </ng-container>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"enrollValidationLoading\">\r\n <ws-widget-skeleton-loader [width]=\"'100%'\" [height]=\"'32px'\"\r\n [bindingClass]=\"'rounded '\"></ws-widget-skeleton-loader>\r\n </ng-container>\r\n <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && extContentReadData?.redirectUrl\">\r\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\r\n [href]=\"extContentReadData?.redirectUrl\"\r\n (click)=\"captureRedirectTelemetry(extContentReadData)\">\r\n <ng-container>{{ 'apptochome.redirect' | translate }}\r\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\r\n </ng-container>\r\n </a>\r\n </ng-container>\r\n <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length === 0\r\n && userExtCourseEnroll?.progress <= 100 && widgetData && widgetData.sliderData?.length\">\r\n <div class=\"no-certificate-found\">\r\n <ws-widget-sliders-dynamic [widgetData]=\"widgetData\"></ws-widget-sliders-dynamic>\r\n </div>\r\n </ng-container>\r\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\r\n && userExtCourseEnroll?.progress === 100\">\r\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\r\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\r\n <span>Certificate</span>\r\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\r\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\r\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\r\n </div>\r\n </button>\r\n </ng-container> -->\r\n </div>\r\n </ng-container>\r\n <div>\r\n <div class=\"flex flex-col kpi-values items-center gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\r\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\r\n <div class=\"text-xs\">\r\n {{ extContentReadData?.duration | pipeDurationTransform: 'hms' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n<div *ngIf=\"!extContentAvailable\">\r\n <div class=\"flex justify-center w-full\">\r\n <div class=\"margin-xl text-center\">\r\n <img src=\"/assets/common/error-pages/empty_search.svg\" wsUtilsImageResponsive alt=\"No results\"\r\n class=\"margin-top-l margin-bottom-s\">\r\n <h2 class=\"mat-h2\" i18n=\"search route no result\">{{'learnsearch.noResults' | translate}}</h2>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<ws-app-share-toc *ngIf=\"enableShare\" [contentLink]=\"contentLink\" [rootOrgId]=\"rootOrgId\" [content]=\"extContentReadData\"\r\n (resetEnableShare)=\"resetEnableShare($event)\"></ws-app-share-toc>", styles: [".source-text{color:#ffffffb3}.toc-banner{background:#3a83cf;background:linear-gradient(135deg,#3a83cf,#1b4ca1);width:100%}.toc-banner .fixed-width{padding:0 16px}.toc-banner .banner-details{padding:36px 0}.toc-banner .banner-details .due-tag{padding:4px;color:#fff;border-radius:4px}.toc-banner .banner-details .due-warning{background-color:#ff9800;border:1px solid #FF9800}.toc-banner .banner-details .due-overdue{background-color:#f44336;border:1px solid #F44336}.toc-banner .banner-details .due-success{background-color:#4caf50;border:1px solid #4CAF50}.toc-banner .banner-details .rating-chip{border:1px solid rgba(0,0,0,.6);border-radius:20px;background-color:#0009}.toc-banner .banner-details .rating-chip mat-icon{width:16px;height:16px;color:#ff9800;font-size:16px}.toc-banner .banner-details .rating-chip .separator{width:1px;height:20px;border-right:1px solid rgba(255,255,255,.16);margin:0 8px}.toc-banner .banner-details .banner-text{color:#fffffff2;word-wrap:break-word}.toc-banner .info-div{max-width:384px;width:100%}.toc-banner .most-enrolled-chip{background-color:#ffea9e;border:1px solid #FFEA9E;padding:4px;border-radius:2px}.text-info-div{padding:8px;background-color:#fff;border-radius:64px}.tag-div{border:1px solid #FF9800;background-color:#00000080}.tag-div mat-icon{font-size:12px;width:12px;height:12px}.fixed-width{max-width:1200px;display:block;margin:0 auto}.mat-subheading-1{margin-bottom:4px!important}.initial-circle{width:36px;height:36px;border-radius:50%;background:#1b2133;color:#fff;text-transform:uppercase}.toc-content{max-width:792px;width:100%}.right-container .image-div{height:220px;background-color:#ccc;border-top-left-radius:12px;border-top-right-radius:12px}.right-container .image-div img{max-width:384px;width:100%;height:220px;border-top-left-radius:12px;border-top-right-radius:12px;position:relative;top:-42px}.right-container .image-div .share-container{position:relative;z-index:2;top:20px;margin-right:20px}.right-container .image-div .share-tag{font-weight:700;background-color:#000;border:1px solid #FFF;border-radius:20px;padding:6px 16px;color:#fff;cursor:pointer}.right-container .tag-div mat-icon{width:16px;height:16px;font-size:16px}.right-container .share-tag mat-icon{width:20px;height:20px;font-size:20px}.right-container .text-container{position:relative;z-index:2;height:220px;padding:16px}.right-container .right-content{background-color:#fff;border-radius:12px;position:fixed;z-index:10;top:132px;width:384px;margin-bottom:2rem;box-shadow:0 2px 6px -1px #00000080,0 -4px 4px -2px #00000080}.right-container .border-bottom{border-bottom:1px solid rgba(0,0,0,.2)}.right-container .info-div{background-color:#fef7ed;border:none;border-radius:8px;padding:8px 12px;font-size:14px}.right-container .info-div .mat-icon{width:18px;height:18px;font-size:18px}.right-container .kpi-values{width:64px;padding:8px;text-align:center}.right-container .kpi-values .timer-icon{color:#000000de;height:20px}.batch-info{padding:16px;border-radius:4px;background-color:#1b4ca114;border:1px solid rgba(27,76,161,.08);text-align:center}.batch-info .batch-label{font-size:.75rem;color:#0009;line-height:1rem}.button{border-radius:64px;letter-spacing:.25px;padding:12px 36px;font-weight:700;cursor:pointer;text-align:center}@media screen and (max-width: 1200px){.right-container{display:none}.action-button:before{content:\"\";position:absolute;inset:-10px;background-color:#ffffff40;border-radius:inherit;filter:blur(10px);z-index:-1}.action-button:after{content:\"\";position:absolute;inset:-10px;box-shadow:0 0 -4px -4px #fff9;border-radius:inherit;z-index:-1}.karma-points-div{display:none}}.enroll-modal{max-width:600px!important;width:100%!important}.enroll-modal .mat-dialog-container{padding:0;border-radius:12px}.confirmation-modal{max-width:420px!important;width:100%!important}.confirmation-modal .mat-dialog-container{border-radius:12px;padding:0}.image-backdrop{background-color:#000!important;position:relative}.image-backdrop:after{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);content:\"\";display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-color:#000000a6;border-top-left-radius:12px;border-top-right-radius:12px}.text-scrol-custom{height:200px;overflow-y:auto}@media screen and (max-width: 1000px){.confirmation-modal,.enroll-modal{max-width:90vw!important}}.kpi-loader-div{width:18%}a.action-button{color:#fff!important;width:auto}.rate-button{color:#000000de!important;font-size:.875rem;font-weight:700;border:none!important}.rate-button .mat-button-wrapper{display:flex;gap:8px;align-items:center}.mobile-enroll-div{padding:16px;position:fixed;z-index:1000;bottom:0;width:calc(100% - 32px)}.mobile-enroll-div .action-button{min-width:320px;max-width:400px;margin:auto}@media screen and (min-width: 1201px){.mobile-enroll-div,.mob-share{display:none!important}.hideAbove1200{display:none}}.mobile-progress{padding:16px}@media screen and (min-width: 1200px){.mobile-progress{display:none}}.sourceEllipsis{white-space:break-spaces;position:relative;overflow:hidden;text-overflow:clip;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}.text-white{color:#fff!important}.custom-button,.fluid-width{width:100%}.toc-container{background:#fff;width:100%}mat-divider{border-top-color:#d9d9d9}.sticky{top:56px;overflow:hidden;z-index:10;width:100%}.statusMsg{border-radius:4px;height:40px}.toc-body{padding-bottom:1rem}.toc-body .toc-links{width:100%;z-index:1;border:none;background:transparent}.toc-body .toc-links .mat-tab-link{text-align:left;justify-content:flex-start}.toc-body .toc-links .mat-tab-link.justify-center{justify-content:center}.toc-body .toc-links .mat-tab-link.link-active{color:#0074b6!important}.tab:focus{outline:1px solid!important}.rounded-icon{background:#fff 0% 0% no-repeat padding-box;box-shadow:0 2px 4px #00000029;border:2px solid #00A9F4;border-radius:50%;min-width:0;opacity:1;height:35px;width:35px;padding:0;align-items:center;align-self:center;float:right}.rounded-icon mat-icon{color:#00a9f4}.blue-border{border:2px solid #0074b6!important}.hidden-xs-inline{display:inline}@media only screen and (max-width: 599px){.hidden-xs-inline{display:none}}.visible-xs-inline{display:none}@media only screen and (max-width: 599px){.visible-xs-inline{display:inline}}.meta-section{flex:1;min-width:1px}.meta-section .unit-meta-item{border-radius:2px;box-sizing:border-box;margin-bottom:16px;box-shadow:none;padding-left:0}@media only screen and (max-width: 599px){.meta-section{width:100%}}.font-bold-imp{font-weight:700!important}.info-section{width:20%;min-width:250px}.info-section .custom-button{background:#0074b6 0% 0% no-repeat padding-box!important;border-radius:4px}@media only screen and (max-width: 599px){.info-section{width:100%;margin-left:0!important}}.info-section .glance-container .at-glance-heading{letter-spacing:0px;color:#222}.info-section .glance-container .info-item .cs-icons .mat-icon{color:#666;vertical-align:middle;font-size:20px}.info-section .glance-container .info-item .cs-icons img{width:20px;height:20px;vertical-align:middle}.info-section .glance-container .info-item .item-heading{font:600 14px/21px Lato;margin:0 0 4px;letter-spacing:0px;color:#0074b6!important}.info-section .glance-container .info-item .item-value{letter-spacing:0px;color:#5f5f5f}.info-section .glance-container .info-item .item-icon{width:20px;height:20px;font-size:20px;margin-left:8px}.toc-discussion-container{display:flex;justify-content:space-between;flex-wrap:wrap-reverse}.toc-discussion-container .discussion{flex:1;min-width:1px}.toc-discussion-container .cohorts{width:100%;background:#fff 0% 0% no-repeat padding-box;border:1px solid #D9D9D9;border-radius:8px;box-shadow:none}@media only screen and (min-width: 600px) and (max-width: 959px){.toc-discussion-container .cohorts{margin-left:24px;min-width:250px}}@media only screen and (max-width: 599px){.toc-discussion-container .cohorts{margin-left:0;margin-bottom:24px;width:100%}}.mtb-xl{margin-top:3.5rem;margin-bottom:3.5rem}.detailBar{display:flex}.editDetails{margin:auto;display:flex}.white-bg{background:#fff!important;background-color:#fff!important}.contacts-container{padding:22px 0 10px;border:0;border-top:1px;border-style:solid;border-bottom:1px;border-color:#ececec}.contacts-container .contacts-head{letter-spacing:0px;color:#222;background:transparent;margin-bottom:24px}.contacts-container .author-card{min-width:291px;width:291px;display:flex;flex-direction:row;align-items:center;margin-bottom:30px;padding-right:10px}.contacts-container .author-card .right{padding:0 15px}.contacts-container .author-card .user-name{letter-spacing:0px;color:#5f5f5f}.contacts-container .author-card .user-university{letter-spacing:0px;color:#00a9f4}.contacts-container .author-card .user-button{background:#fff 0% 0% no-repeat padding-box;border:1px solid #F58634;border-radius:15px;letter-spacing:0px;color:#f58634;max-width:60px;padding:4px}.divider-transparent{border-top-color:transparent!important}.scroll-to-top{position:fixed;bottom:15px;right:15px;opacity:0;transition:all .2s ease-in-out;border-radius:50%}.scroll-to-top .icon{font-size:24px!important}.show-scroll{opacity:1;transition:all .2s ease-in-out}.sticky-breadcrumbs{position:sticky;z-index:999;top:72px;width:100%}.sticky-banner{position:sticky;z-index:999}.sticky-navs{position:sticky!important;background:#fff;z-index:999;top:auto}.actbutton{border:1px solid rgba(0,0,0,.16);border-radius:4px;padding:0 15px;width:100%;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.actbutton .mat-icon{margin-right:6px}.disable-start-btn{cursor:not-allowed!important;pointer-events:none!important;opacity:.5!important}.certificate-loader ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#fff}.cb-plan-wrap{opacity:1;color:#1b4ca1;font-family:Lato-Regular;font-size:12px;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:16px}.cb-plan-wrap .cb-danger{border-radius:2px;padding:4px 8px;border:1px solid #d13924;background-color:#d13924!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-success{padding:4px 8px;border-radius:2px;border:1px solid #1d8922;background-color:#1d8922!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-warning{padding:4px 8px;border-radius:2px;border:1px solid #ef951e;background-color:#ef951e!important;color:#fff!important;opacity:1}.bg-white{background-color:#fff}.provider-logo-div{border-radius:4px;box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.provider-logo-div img{display:flex;border-radius:4px;width:40px;height:40px;padding:4px}ul{padding:0!important}.kpi-values{min-width:64px;padding:8px;text-align:center}.kpi-values img{height:24px;width:24px}.position-bottom{position:fixed;width:88%;bottom:0;z-index:99}.no-certificate-found{border:1px solid #ccc;border-color:#f3962f;background-color:#fceedb;border-radius:12px}.no-certificate-found{min-height:56px}.no-certificate-found ::ng-deep ws-widget-sliders-dynamic .banner-data{font-size:16px!important;font-family:lato,sans-serif!important}.truncate-5{-webkit-line-clamp:1;text-overflow:ellipsis;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;word-wrap:break-word}.ext-info-slider{padding:8px}#commentsDiv{margin:1rem auto;min-height:500px}.knowledge-level-container{margin-right:auto}.level-badge{display:inline-flex;height:24px;padding:2px 8px;align-items:center;gap:4px;flex-shrink:0;border-radius:12px;font-weight:600;font-size:12px;line-height:16px;white-space:nowrap}.level-badge.beginner{border:1px solid #49C951;background:linear-gradient(0deg,#49c95133 0% 100%),#fff;color:#2f8132;border-radius:16px}.level-badge.intermediate{border:1px solid #1B4CA1;background:linear-gradient(0deg,#1b4ca133 0% 100%),#fff;color:#1b4ca1;border-radius:16px}.level-badge.advanced{border:1px solid #FF8268;background:linear-gradient(0deg,#ff826833 0% 100%),#fff;color:#ff4b25;border-radius:16px}.level-badge svg{flex-shrink:0}::ng-deep .consent-dialog-panel .mat-dialog-container{overflow:hidden;padding:0;margin:0;border-radius:8px}::ng-deep .consent-dialog-panel .mat-dialog-content{padding:0;margin:0;max-height:none;overflow:hidden}\n"] }]
463
- }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.CommonMethodsService }, { type: i3.TranslateService }, { type: i4.ConfigurationsService }, { type: i4.EventService }, { type: i4.MultilingualTranslationsService }, { type: i4.WidgetContentService }, { type: i5.CertificateService }, { type: i6.LoaderService }, { type: i7.MatDialog }, { type: i8.MatLegacySnackBar }, { type: i9.NetCoreService }, { type: undefined, decorators: [{
464
- type: Inject,
465
- args: ['environment']
466
- }, {
467
- type: Optional
468
- }] }]; }, propDecorators: { rcElement: [{
469
- type: ViewChild,
470
- args: ['rightContainer']
471
- }], handleScroll: [{
472
- type: HostListener,
473
- args: ['window:scroll', ['$event']]
474
- }] } });
475
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy1jaW9zLWhvbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXRvYy1jaW9zLWhvbWUvYXBwLXRvYy1jaW9zLWhvbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXRvYy1jaW9zLWhvbWUvYXBwLXRvYy1jaW9zLWhvbWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBVSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBSXZILE9BQU8sRUFBOEYsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFNM0ksT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUE7QUFFM0IsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9uRSxNQUFNLE9BQU8sdUJBQXVCO0lBMkJsQyxZQUFZO1FBRVYsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7YUFDdkQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUE7YUFDdEQ7U0FDRjtRQUVELDhDQUE4QztRQUM5QyxJQUFJLE1BQU0sQ0FB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aXN0ZW5lciwgSW5qZWN0LCBPbkluaXQsIE9wdGlvbmFsLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcidcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnXHJcbmltcG9ydCB7IENvbW1vbk1ldGhvZHNTZXJ2aWNlIH0gZnJvbSAnQHN1bmJpcmQtY2IvY29uc3VtcHRpb24nXHJcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSwgRXZlbnRTZXJ2aWNlLCBNdWx0aWxpbmd1YWxUcmFuc2xhdGlvbnNTZXJ2aWNlLCBXaWRnZXRDb250ZW50U2VydmljZSwgV3NFdmVudHMgfSBmcm9tICdAc3VuYmlyZC1jYi91dGlscy12MidcclxuaW1wb3J0IHsgTG9hZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvYWRlci5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBNYXRMZWdhY3lTbmFja0JhciBhcyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1zbmFjay1iYXInXHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZydcclxuaW1wb3J0IHsgQ2VydGlmaWNhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2VydGlmaWNhdGUuc2VydmljZSdcclxuaW1wb3J0IHsgTnNEaXNjdXNzaW9uVjIgfSBmcm9tICdAc3VuYmlyZC1jYi9kaXNjdXNzaW9uLXYyJ1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IHsgTmV0Q29yZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9uZXRjb3JlLnNlcnZpY2UnXHJcbmltcG9ydCB7IENvbnNlbnREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbnNlbnQtZGlhbG9nLmNvbXBvbmVudCdcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnd3MtYXBwLWFwcC10b2MtY2lvcy1ob21lJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLXRvYy1jaW9zLWhvbWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FwcC10b2MtY2lvcy1ob21lLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHBUb2NDaW9zSG9tZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgY29tbWVudElkPzogc3RyaW5nID0gJydcclxuICBza2VsZXRvbkxvYWRlciA9IHRydWVcclxuICBleHRDb250ZW50UmVhZERhdGE6IGFueSA9IHt9XHJcbiAgdXNlckV4dENvdXJzZUVucm9sbDogYW55ID0ge31cclxuICBkb3dubG9hZENlcnRpZmljYXRlTG9hZGluZyA9IGZhbHNlXHJcbiAgZm9yUHJldmlldzogYW55ID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9wdWJsaWMvJykgfHwgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJz9lZGl0TW9kZT10cnVlJylcclxuICBleHRDb250ZW50QXZhaWxhYmxlID0gdHJ1ZVxyXG4gIGNhbkVucm9sbCA9IGZhbHNlXHJcbiAgZW5yb2xsVmFsaWRhdGlvbkxvYWRpbmcgPSB0cnVlXHJcbiAgcmNFbGVtID0ge1xyXG4gICAgb2ZmU2V0VG9wOiAwLFxyXG4gICAgQm90dG9tUG9zOiAwLFxyXG4gIH1cclxuICBjb250ZW50TGluazogYW55ID0gJydcclxuICBAVmlld0NoaWxkKCdyaWdodENvbnRhaW5lcicpIHJjRWxlbWVudCE6IEVsZW1lbnRSZWZcclxuICBzY3JvbGxMaW1pdDogYW55XHJcbiAgc2Nyb2xsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWRcclxuICBpc01vYmlsZSA9IGZhbHNlXHJcbiAgY29uZmlnOiBhbnlcclxuICB3aWRnZXREYXRhOiBhbnlcclxuICBlbmFibGVTaGFyZSA9IGZhbHNlXHJcbiAgcm9vdE9yZ0lkOiBhbnlcclxuICBjdXJyZW50TGFuZzogYW55ID0gJ2VuJ1xyXG4gIGRpc2N1c3NXaWRnZXREYXRhITogTnNEaXNjdXNzaW9uVjIuSUNvbW1lbnRXaWRnZXREYXRhXHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZVNjcm9sbCgpIHtcclxuXHJcbiAgICBpZiAodGhpcy5zY3JvbGxMaW1pdCkge1xyXG4gICAgICBpZiAoKHdpbmRvdy5zY3JvbGxZICsgdGhpcy5yY0VsZW0uQm90dG9tUG9zKSA+PSB0aGlzLnNjcm9sbExpbWl0KSB7XHJcbiAgICAgICAgdGhpcy5yY0VsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdzdGlja3knXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yY0VsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCdcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIDIzNi4uLiAoT2Zmc2V0VG9wIG9mIHJpZ2h0IGNvbnRhaW5lciArIDEwNClcclxuICAgIGlmICh3aW5kb3cuc2Nyb2xsWSA+ICh0aGlzLnJjRWxlbS5vZmZTZXRUb3AgKyAxMDQpKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsZWQgPSB0cnVlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNjcm9sbGVkID0gZmFsc2VcclxuICAgIH1cclxuICB9XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIGNvbW1vblN2YzogQ29tbW9uTWV0aG9kc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlnU3ZjOiBDb25maWd1cmF0aW9uc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGV2ZW50czogRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsYW5ndHJhbnNsYXRpb25zOiBNdWx0aWxpbmd1YWxUcmFuc2xhdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb250ZW50U3ZjOiBXaWRnZXRDb250ZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgY2VydFN2YzogQ2VydGlmaWNhdGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIGxvYWRlcjogTG9hZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgbWF0RGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwdWJsaWMgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxyXG4gICAgcHVibGljIG5ldENvcmVTZXJ2aWNlOiBOZXRDb3JlU2VydmljZSxcclxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgQE9wdGlvbmFsKCkgcHJpdmF0ZSBlbnZpcm9ubWVudDogYW55XHJcbiAgKSB7XHJcbiAgICB0aGlzLnJvdXRlLmRhdGEuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5lbnJvbGxWYWxpZGF0aW9uTG9hZGluZyA9IGZhbHNlXHJcbiAgICAgIGlmIChkYXRhICYmIGRhdGEuZXh0Q29udGVudCAmJiBkYXRhLmV4dENvbnRlbnQuZGF0YSAmJiBkYXRhLmV4dENvbnRlbnQuZGF0YS5jb250ZW50KSB7XHJcbiAgICAgICAgdGhpcy5leHRDb250ZW50UmVhZERhdGEgPSBkYXRhLmV4dENvbnRlbnQuZGF0YS5jb250ZW50XHJcbiAgICAgICAgdGhpcy5leHRDb250ZW50UmVhZERhdGFbJ2NlcnRpZmljYXRlT2JqJ10gPSB7XHJcbiAgICAgICAgICBkYXRhOiB7fSxcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5za2VsZXRvbkxvYWRlciA9IGZhbHNlXHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZXh0Q29udGVudEF2YWlsYWJsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5za2VsZXRvbkxvYWRlciA9IGZhbHNlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkYXRhICYmIGRhdGEudXNlckVucm9sbENvbnRlbnQgJiYgZGF0YS51c2VyRW5yb2xsQ29udGVudC5kYXRhICYmIGRhdGEudXNlckVucm9sbENvbnRlbnQuZGF0YS5yZXN1bHQgJiZcclxuICAgICAgICBPYmplY3Qua2V5cyhkYXRhLnVzZXJFbnJvbGxDb250ZW50LmRhdGEucmVzdWx0KS5sZW5ndGggPiAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMudXNlckV4dENvdXJzZUVucm9sbCA9IGRhdGEudXNlckVucm9sbENvbnRlbnQuZGF0YS5yZXN1bHRcclxuICAgICAgICBpZiAodGhpcy51c2VyRXh0Q291cnNlRW5yb2xsLmNvbXBsZXRpb25wZXJjZW50YWdlID09PSAxMDApIHtcclxuICAgICAgICAgIHRoaXMuZXh0Q29udGVudFJlYWREYXRhWydjb21wbGV0aW9uU3RhdHVzJ10gPSAyXHJcblxyXG4gICAgICAgICAgdGhpcy5kb3dubG9hZENlcnQoKVxyXG4gICAgICAgICAgdGhpcy5jb250ZW50Vmlld0V2ZW50Rm9yTmV0Q29yZSgnY29tcGxldGlvbicpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGVFbnJvbGxtZW50RWxpZ2liaWxpdHkoKVxyXG4gICAgICB9XHJcblxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpKSB7XHJcbiAgICAgIHRoaXMudHJhbnNsYXRlLnNldERlZmF1bHRMYW5nKCdlbicpXHJcbiAgICAgIHRoaXMuY3VycmVudExhbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2Vic2l0ZUxhbmd1YWdlJykhXHJcbiAgICAgIHRoaXMudHJhbnNsYXRlLnVzZSh0aGlzLmN1cnJlbnRMYW5nKVxyXG4gICAgfVxyXG4gICAgdGhpcy5jb25maWdTdmMubGFuZ3VhZ2VUcmFuc2xhdGlvbkZsYWcuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpIVxyXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKHRoaXMuY3VycmVudExhbmcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSkge1xyXG4gICAgICB0aGlzLnJvb3RPcmdJZCA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnJvb3RPcmdJZFxyXG4gICAgfVxyXG4gICAgdGhpcy5jb250ZW50TGluayA9IGAke3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdWJzdHJpbmcoMSl9JHt3aW5kb3cubG9jYXRpb24uc2VhcmNofWBcclxuXHJcbiAgICB0aGlzLmNvbW1lbnRJZCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuY29tbWVudElkID8gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5jb21tZW50SWQgOiAnJ1xyXG4gICAgaWYgKHRoaXMuY29tbWVudElkKSB7XHJcbiAgICAgIC8vdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMlxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLnBhZ2VEYXRhICYmIHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5wYWdlRGF0YS5kYXRhKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLnBhZ2VEYXRhLmRhdGFcclxuICAgICAgdGhpcy5pbml0aWFsaXplRGlzY3Vzc0RhdGEoKVxyXG4gICAgfVxyXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDEyMDApIHtcclxuICAgICAgdGhpcy5pc01vYmlsZSA9IHRydWVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNNb2JpbGUgPSBmYWxzZVxyXG4gICAgfVxyXG4gICAgdGhpcy5jb250ZW50Vmlld0V2ZW50Rm9yTmV0Q29yZSgndmlldycpXHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplRGlzY3Vzc0RhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuZGlzY3Vzc1dpZGdldERhdGEpIHtcclxuICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YSA9IHRoaXMuY29uZmlnLmRpc2N1c3NXaWRnZXREYXRhXHJcbiAgICAgIGlmICh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5jb250ZW50SWQpIHtcclxuICAgICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLm5ld0NvbW1lbnRTZWN0aW9uLmNvbW1lbnRUcmVlRGF0YS5lbnRpdHlJZCA9IHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmNvbnRlbnRJZFxyXG4gICAgICAgIGlmICh0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmNvbW1lbnRzTGlzdC5yZXBsaWVzU2VjdGlvbiAmJiB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmNvbW1lbnRzTGlzdC5yZXBsaWVzU2VjdGlvbi5uZXdDb21tZW50UmVwbHkpIHtcclxuICAgICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEuY29tbWVudHNMaXN0LnJlcGxpZXNTZWN0aW9uLm5ld0NvbW1lbnRSZXBseS5jb21tZW50VHJlZURhdGEuZW50aXR5SWQgPSB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5jb250ZW50SWRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy53aWRnZXREYXRhID0gdGhpcy5jb25maWdcclxuICAgICAgdGhpcy53aWRnZXREYXRhWyd0eXBlJ10gPSAndGlwcydcclxuICAgICAgdGhpcy53aWRnZXREYXRhWydjYXJkQ2xhc3MnXSA9ICdzbGlkZXItY29udGFpbmVyJ1xyXG4gICAgICB0aGlzLndpZGdldERhdGFbJ2hlaWdodCddID0gJ2F1dG8nXHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YVsnc2xpZGVyRGF0YSddID0gXy5nZXQodGhpcy5leHRDb250ZW50UmVhZERhdGEsICdjb250ZW50UGFydG5lci5wcm92aWRlclRpcHMnLCBbXSlcclxuXHJcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnVzZXJFeHRDb3Vyc2VFbnJvbGwpLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEuZW5yb2xsZWRDb250ZW50ID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uY29tbWVudEJveC5wbGFjZWhvbGRlciA9ICdTdGFydCBhIGRpc2N1c3Npb24nXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5lbnJvbGxlZENvbnRlbnQgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uY29tbWVudEJveC5wbGFjZWhvbGRlciA9ICdFbnJvbCB0byBhZGQgeW91ciBjb21tZW50cydcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhID0geyAuLi50aGlzLmRpc2N1c3NXaWRnZXREYXRhIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUNhcGl0YWxpemUoc3RyOiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU3ZjLmhhbmRsZUNhcGl0YWxpemUoc3RyLCB0eXBlKVxyXG4gIH1cclxuXHJcbiAgdHJhbnNsYXRlTGFiZWxzKGxhYmVsOiBzdHJpbmcsIHR5cGU6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMubGFuZ3RyYW5zbGF0aW9ucy50cmFuc2xhdGVMYWJlbChsYWJlbCwgdHlwZSwgJycpXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAodGhpcy5yY0VsZW1lbnQpIHtcclxuICAgICAgdGhpcy5yY0VsZW0uQm90dG9tUG9zID0gdGhpcy5yY0VsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgKyB0aGlzLnJjRWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodFxyXG4gICAgICB0aGlzLnJjRWxlbS5vZmZTZXRUb3AgPSB0aGlzLnJjRWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcFxyXG4gICAgfVxyXG4gIH1cclxuICByZWRpcmVjdFRvQ29udGVudChjb250ZW50RGF0YTogYW55KSB7XHJcbiAgICBjb25zdCB1c2VyRGF0YTogYW55ID0gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGVWMlxyXG4gICAgY29uc3QgZXh0VXJsOiBzdHJpbmcgPSBjb250ZW50RGF0YS5yZWRpcmVjdFVybC5yZXBsYWNlKCc8dXNlcm5hbWU+JywgdXNlckRhdGEuZW1haWwpXHJcbiAgICByZXR1cm4gZXh0VXJsXHJcbiAgfVxyXG4gIHJlcGxhY2VUZXh0KHN0cjogYW55LCByZXBsYWNlVHh0OiBhbnkpIHtcclxuICAgIHJldHVybiBzdHIucmVwbGFjZUFsbChyZXBsYWNlVHh0LCAnJylcclxuICB9XHJcblxyXG4gIGZvcm1hdGNvdXJzZVByb3ZpZGVycyhwcm92aWRlcnM6IGFueVtdKTogc3RyaW5nIHtcclxuICAgIGlmICghcHJvdmlkZXJzIHx8ICFBcnJheS5pc0FycmF5KHByb3ZpZGVycykpIHtcclxuICAgICAgcmV0dXJuICcnXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvdmlkZXJzLm1hcCgocHJvdmlkZXI6IGFueSkgPT4gcHJvdmlkZXIubmFtZSkuam9pbignLCAnKVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZW5Sb2xsVG9FeHRDb3Vyc2UoY29udGVudDogYW55KSB7XHJcbiAgICBjb25zdCBjb25zZW50VXJsOiBzdHJpbmcgPSBgJHt0aGlzLmVudmlyb25tZW50Py5taXNzaW9uS2FybWF5b2dpUGF0aH0ke3RoaXMuY29uZmlnPy5jb250ZW50Q29uc2VudD8uY29uc2VudERvY1VybH1gIHx8ICcnXHJcbiAgICBjb25zdCBhc3NldHNEb2NVcmw6IHN0cmluZyA9IGAke3RoaXMuY29uZmlnPy5jb250ZW50Q29uc2VudD8uYXNzZXRzRG9jVXJsfWAgfHwgJydcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMubWF0RGlhbG9nLm9wZW4oQ29uc2VudERpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICB3aWR0aDogJzkwMHB4JyxcclxuICAgICAgaGVpZ2h0OiAnNzB2aCcsXHJcbiAgICAgIG1heEhlaWdodDogJzkwdmgnLFxyXG4gICAgICBtaW5IZWlnaHQ6ICc0MDBweCcsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHBhbmVsQ2xhc3M6ICdjb25zZW50LWRpYWxvZy1wYW5lbCcsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBjb25zZW50VXJsOiBjb25zZW50VXJsLFxyXG4gICAgICAgIGFzc2V0c0RvY1VybDogYXNzZXRzRG9jVXJsXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgLy8gSGFuZGxlIGRpYWxvZyBjbG9zZVxyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIC8vIFVzZXIgYWdyZWVkIC0gcHJvY2VlZCB3aXRoIGVucm9sbG1lbnRcclxuICAgICAgICAvLyBuZWVkIHRvIGNhbGwgY29uc2VudCBhcGlcclxuICAgICAgICB0aGlzLmNhbGxDb25zZW50QXBpKGNvbnRlbnQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gVXNlciBkaXNhZ3JlZWRcclxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1lvdSBtdXN0IGFncmVlIHRvIHRoZSB0ZXJtcyB0byBlbnJvbGwgaW4gdGhpcyBjb3Vyc2UuJywgJ1gnLCB7XHJcbiAgICAgICAgICBkdXJhdGlvbjogNTAwMCxcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgY2FsbENvbnNlbnRBcGkoY29udGVudDogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhjb250ZW50KVxyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgXCJyZXF1ZXN0XCI6IHtcclxuICAgICAgICBcImNvbnRlbnRJZFwiOiBjb250ZW50Py5jb250ZW50SWQsXHJcbiAgICAgICAgXCJjb25zZW50SWRcIjogdGhpcy5jb25maWc/LmNvbnRlbnRDb25zZW50Py5jb25zZW50SWQgfHwgJycsXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsQXR0cmlidXRlc1wiOiB7XHJcbiAgICAgICAgICBcInVzZXJSb2xlc1wiOiBbXCJwdWJsaWNcIl0sXHJcbiAgICAgICAgICBcInZlcnNpb25LZXlcIjogbmV3IERhdGUoKS5nZXRUaW1lKCksXHJcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSSBoYXZlIHJlYWQgYW5kIGFncmVlIHdpdGggdGhlIGFib3ZlIGRlY2xhcmF0aW9uLlwiXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jZXJ0U3ZjLmNvbnNlbnRTdWJtaXQocmVxdWVzdCkuc3Vic2NyaWJlKChfcmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5wcm9jZWVkV2l0aEVucm9sbG1lbnQoY29udGVudClcclxuICAgIH0sIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LnBhcmFtcz8ubXNnIHx8ICdVbmFibGUgdG8gc3VibWl0IGNvbnNlbnQnLCAnWCcsIHtcclxuICAgICAgICBkdXJhdGlvbjogNTAwMCxcclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgcHJvY2VlZFdpdGhFbnJvbGxtZW50KGNvbnRlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5sb2FkZXIuY2hhbmdlTG9hZC5uZXh0KHRydWUpXHJcbiAgICBjb25zdCByZXFib2R5ID0ge1xyXG4gICAgICBjb3Vyc2VJZDogY29udGVudC5jb250ZW50SWQsXHJcbiAgICAgIHBhcnRuZXJJZDogY29udGVudC5jb250ZW50UGFydG5lci5pZCxcclxuICAgIH1cclxuICAgIGNvbnN0IGVucm9sbFJlcyA9IGF3YWl0IHRoaXMuY29udGVudFN2Yy5leHRDb250ZW50RW5yb2xsKHJlcWJvZHkpLnRvUHJvbWlzZSgpLmNhdGNoKF9lcnJvciA9PiB7IHJldHVybiBfZXJyb3IgfSlcclxuICAgIGlmIChlbnJvbGxSZXMgJiYgZW5yb2xsUmVzLnJlc3VsdCAmJiBPYmplY3Qua2V5cyhlbnJvbGxSZXMucmVzdWx0KS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEuZW5yb2xsZWRDb250ZW50ID0gdHJ1ZVxyXG4gICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLm5ld0NvbW1lbnRTZWN0aW9uLmNvbW1lbnRCb3gucGxhY2Vob2xkZXIgPSAnU3RhcnQgYSBkaXNjdXNzaW9uJ1xyXG4gICAgICB0aGlzLmdldFVzZXJDb250ZW50RW5yb2xsKGNvbnRlbnQuY29udGVudElkKVxyXG4gICAgICB0aGlzLmNvbnRlbnRWaWV3RXZlbnRGb3JOZXRDb3JlKCdlbnJvbGwnKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5sb2FkZXIuY2hhbmdlTG9hZC5uZXh0KGZhbHNlKVxyXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZW5yb2xsUmVzPy5lcnJvcj8ucGFyYW1zPy5tc2cgfHwgJ1VuYWJsZSB0byBlbnJvbGwgdG8gdGhlIGNvbnRlbnQnLCAnWCcsIHtcclxuICAgICAgICBkdXJhdGlvbjogMTAwMDAsXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRVc2VyQ29udGVudEVucm9sbChjb250ZW50SWQ6IGFueSkge1xyXG4gICAgY29uc3QgZW5yb2xsUmVzID0gYXdhaXQgdGhpcy5jb250ZW50U3ZjLmZldGNoRXh0VXNlckNvbnRlbnRFbnJvbGwoY29udGVudElkKS50b1Byb21pc2UoKS5jYXRjaChfZXJyb3IgPT4geyB9KVxyXG4gICAgaWYgKGVucm9sbFJlcyAmJiBlbnJvbGxSZXMucmVzdWx0ICYmIE9iamVjdC5rZXlzKGVucm9sbFJlcy5yZXN1bHQpLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy51c2VyRXh0Q291cnNlRW5yb2xsID0gZW5yb2xsUmVzLnJlc3VsdFxyXG4gICAgICB0aGlzLmxvYWRlci5jaGFuZ2VMb2FkLm5leHQoZmFsc2UpXHJcbiAgICAgIHRoaXMudGVsZW1ldHJ5VG9DYXB0dXJlSW50ZXJhY3QoY29udGVudElkLCAnZW5yb2xsJywgJ2Vucm9sLWNvbnRlbnQnKVxyXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1N1Y2Nlc3NmdWxseSBlbnJvbGxlZCBpbiB0aGUgY291cnNlLicpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxvYWRlci5jaGFuZ2VMb2FkLm5leHQoZmFsc2UpXHJcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignVW5hYmxlIHRvIGdldCB0aGUgZW5yb2xsZWQgZGV0YWlscycpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYXB0dXJlUmVkaXJlY3RUZWxlbWV0cnkoY29udGVudDogYW55KSB7XHJcbiAgICB0aGlzLnJhaXNlVGVsZW10cnlTdGFydEV2ZW50KClcclxuICAgIHRoaXMudGVsZW1ldHJ5VG9DYXB0dXJlSW50ZXJhY3QoY29udGVudC5jb250ZW50SWQsICdyZWRpcmVjdCcsICdyZWRpcmVjdC1jb250ZW50JylcclxuICAgIHRoaXMucmFpc2VUZWxlbXRyeUVuZEV2ZW50KClcclxuICB9XHJcblxyXG4gIHJhaXNlVGVsZW10cnlTdGFydEV2ZW50KCkge1xyXG4gICAgY29uc3QgZXZlbnQgPSB7XHJcbiAgICAgIGV2ZW50VHlwZTogV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5LFxyXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcclxuICAgICAgZnJvbTogJ3Rlc3QnLFxyXG4gICAgICB0bzogJycsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBlZGF0YTogeyB0eXBlOiAnJyB9LFxyXG4gICAgICAgIG9iamVjdDoge30sXHJcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkxvYWRlZCxcclxuICAgICAgICB0eXBlOiAnc2Vzc2lvbicsXHJcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxyXG4gICAgICB9LFxyXG4gICAgfVxyXG4gICAgdGhpcy5ldmVudHMuZGlzcGF0Y2hFdmVudChldmVudClcclxuXHJcbiAgfVxyXG5cclxuICB0ZWxlbWV0cnlUb0NhcHR1cmVJbnRlcmFjdChjb250ZW50SWQ6IGFueSwgc3ViVHlwZTogYW55LCBpZDogYW55KSB7XHJcbiAgICB0aGlzLmV2ZW50cy5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KFxyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogJ2NsaWNrJyxcclxuICAgICAgICBzdWJUeXBlLFxyXG4gICAgICAgIGlkOiBpZCxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiBjb250ZW50SWQsXHJcbiAgICAgICAgdHlwZTogJ0V4dGVybmFsIGNvbnRlbnQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbW9kdWxlOiAnSG9tZScsXHJcbiAgICAgIH1cclxuICAgIClcclxuICB9XHJcblxyXG4gIHJhaXNlVGVsZW10cnlFbmRFdmVudCgpIHtcclxuICAgIGNvbnN0IGV2ZW50ID0ge1xyXG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcclxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXHJcbiAgICAgIGZyb206ICd0ZXN0JyxcclxuICAgICAgdG86ICcnLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJycgfSxcclxuICAgICAgICBvYmplY3Q6IHt9LFxyXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5VbmxvYWRlZCxcclxuICAgICAgICB0eXBlOiAnc2Vzc2lvbicsXHJcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxyXG4gICAgICB9LFxyXG4gICAgfVxyXG4gICAgdGhpcy5ldmVudHMuZGlzcGF0Y2hFdmVudChldmVudClcclxuICB9XHJcblxyXG4gIGFzeW5jIGRvd25sb2FkQ2VydCgpIHtcclxuICAgIHRoaXMuZG93bmxvYWRDZXJ0aWZpY2F0ZUxvYWRpbmcgPSB0cnVlXHJcbiAgICBjb25zdCBjZXJ0UmVzOiBhbnkgPSBhd2FpdFxyXG4gICAgICB0aGlzLmNlcnRTdmMuZG93bmxvYWRDZXJ0aWZpY2F0ZV92Mih0aGlzLnVzZXJFeHRDb3Vyc2VFbnJvbGwuaXNzdWVkX2NlcnRpZmljYXRlc1swXS5pZGVudGlmaWVyKS50b1Byb21pc2UoKS5jYXRjaChfZXJyb3IgPT4geyB9KVxyXG4gICAgaWYgKGNlcnRSZXMgJiYgT2JqZWN0LmtleXMoY2VydFJlcy5yZXN1bHQpLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5kb3dubG9hZENlcnRpZmljYXRlTG9hZGluZyA9IGZhbHNlXHJcbiAgICAgIGlmICh0aGlzLnVzZXJFeHRDb3Vyc2VFbnJvbGwuaXNzdWVkX2NlcnRpZmljYXRlcyAmJiB0aGlzLnVzZXJFeHRDb3Vyc2VFbnJvbGwuaXNzdWVkX2NlcnRpZmljYXRlcy5sZW5ndGhcclxuICAgICAgICAmJiB0aGlzLnVzZXJFeHRDb3Vyc2VFbnJvbGwuaXNzdWVkX2NlcnRpZmljYXRlc1swXSkge1xyXG4gICAgICAgIHRoaXMuZXh0Q29udGVudFJlYWREYXRhWydjZXJ0aWZpY2F0ZU9iaiddID0ge1xyXG4gICAgICAgICAgZGF0YTogdGhpcy51c2VyRXh0Q291cnNlRW5yb2xsLmlzc3VlZF9jZXJ0aWZpY2F0ZXNbMF0sXHJcbiAgICAgICAgICBjZXJ0RGF0YTogY2VydFJlcy5yZXN1bHQucHJpbnRVcmksXHJcbiAgICAgICAgICBjZXJ0SWQ6IHRoaXMudXNlckV4dENvdXJzZUVucm9sbC5pc3N1ZWRfY2VydGlmaWNhdGVzWzBdLmlkZW50aWZpZXIsXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRvd25sb2FkQ2VydGlmaWNhdGVMb2FkaW5nID0gZmFsc2VcclxuICAgIH1cclxuICB9XHJcbiAgb25DbGlja09mU2hhcmUoKSB7XHJcbiAgICB0aGlzLmVuYWJsZVNoYXJlID0gdHJ1ZVxyXG4gICAgLy90aGlzLnJhaXNlVGVsZW1ldHJ5Rm9yU2hhcmUoJ3NoYXJlQ29udGVudCcpXHJcbiAgfVxyXG5cclxuICAvKiB0c2xpbnQ6ZGlzYWJsZSAqL1xyXG4gIC8vIHJhaXNlVGVsZW1ldHJ5Rm9yU2hhcmUoc3ViVHlwZTogYW55KSB7XHJcbiAgLy8gICAvL2NvbnNvbGUubG9nKHRoaXMuZXh0Q29udGVudFJlYWREYXRhLCB0aGlzLmV2ZW50cywgc3ViVHlwZSlcclxuICAvLyAgIC8vIHRoaXMuZXZlbnRzLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoXHJcbiAgLy8gICAvLyB7XHJcbiAgLy8gICAvLyAgIHR5cGU6ICdjbGljaycsXHJcbiAgLy8gICAvLyAgIHN1YlR5cGUsXHJcbiAgLy8gICAvLyAgIGlkOiB0aGlzLmNvbnRlbnQgPyB0aGlzLmNvbnRlbnQuaWRlbnRpZmllciA6ICcnLFxyXG4gIC8vICAgLy8gfSxcclxuICAvLyAgIC8vIHtcclxuICAvLyAgIC8vICAgaWQ6IHRoaXMuY29udGVudCA/IHRoaXMuY29udGVudC5pZGVudGlmaWVyIDogJycsXHJcbiAgLy8gICAvLyAgIHR5cGU6IHRoaXMuY29udGVudCA/IHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgOiAnJyxcclxuICAvLyAgIC8vIH0sXHJcbiAgLy8gICAvLyB7XHJcbiAgLy8gICAvLyAgIHBhZ2VJZEV4dDogYGJ0bi0ke3N1YlR5cGV9YCxcclxuICAvLyAgIC8vICAgbW9kdWxlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5bW9kdWxlcy5DT05URU5ULFxyXG4gIC8vICAgLy8gfVxyXG4gIC8vICAgLy8gKVxyXG4gIC8vIH1cclxuXHJcbiAgcmVzZXRFbmFibGVTaGFyZShfZXZlbnREYXRhOiBhbnkpIHtcclxuXHJcbiAgICB0aGlzLmVuYWJsZVNoYXJlID0gZmFsc2VcclxuICB9XHJcblxyXG4gIGNvbnRlbnRWaWV3RXZlbnRGb3JOZXRDb3JlKGV2ZW50VHlwZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jb25maWdTdmMubmV0Y29yZUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1N2Yy5uZXRjb3JlQ29uZmlnLm5ldGNvcmVXZWJDb25maWcgIC8vIE5PU09OQVJcclxuICAgICAgJiYgdGhpcy5jb25maWdTdmMubmV0Y29yZUNvbmZpZy5uZXRjb3JlV2ViQ29uZmlnLmlzQWN0aXZlIC8vIE5PU09OQVJcclxuICAgICAgJiYgdGhpcy5jb25maWdTdmMubmV0Y29yZUNvbmZpZy5uZXRjb3JlV2ViQ29uZmlnLmV2ZW50cyAvLyBOT1NPTkFSXHJcbiAgICAgICYmIHRoaXMuY29uZmlnU3ZjLm5ldGNvcmVDb25maWcubmV0Y29yZVdlYkNvbmZpZy5ldmVudHMuY29udGVudF92aWV3IC8vIE5PU09OQVJcclxuICAgICAgJiYgdGhpcy5jb25maWdTdmMubmV0Y29yZUNvbmZpZy5uZXRjb3JlV2ViQ29uZmlnLmV2ZW50cy5jb250ZW50X3ZpZXcuaXNBY3RpdmUgLy8gTk9TT05BUlxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBwYXlsb2FkOiBhbnkgPSB7fVxyXG4gICAgICAvLyBpZiAodGhpcy5jb25maWdTdmMgJiYgdGhpcy5jb25maWdTdmMudW5NYXBwZWRVc2VyICYmIHRoaXMuY29uZmlnU3ZjLnVuTWFwcGVkVXNlci5pZGVudGlmaWVyKSB7IC8vIE5PU09OQVJcclxuICAgICAgLy8gICBwYXlsb2FkWydwa151c2VyaWQnXSA9IHRoaXMuY29uZmlnU3ZjLnVuTWFwcGVkVXNlci5pZGVudGlmaWVyLnRyaW0oKS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgIC8vIH1cclxuICAgICAgLy8gY29uc29sZS5sb2coJ3BheWxvYWQnLCBwYXlsb2FkKVxyXG4gICAgICBpZiAodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEubmFtZSkge1xyXG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfbmFtZSddID0gdGhpcy5leHRDb250ZW50UmVhZERhdGEubmFtZVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGlmKHRoaXMuZXh0Q29udGVudFJlYWREYXRhICYmIHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmNvdXJzZUNhdGVnb3J5KSB7XHJcbiAgICAgIHBheWxvYWRbJ2NvbnRlbnRfY2F0ZWdvcnknXSA9ICdFeHRlcm5hbCBDb3Vyc2UnXHJcbiAgICAgIC8vIH1cclxuICAgICAgaWYgKHRoaXMuZXh0Q29udGVudFJlYWREYXRhICYmIHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmV4dGVybmFsSWQpIHtcclxuICAgICAgICBwYXlsb2FkWydjb250ZW50X2lkJ10gPSB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5leHRlcm5hbElkXHJcbiAgICAgIH1cclxuICAgICAgLy8gaWYodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEubmFtZSkge1xyXG4gICAgICBwYXlsb2FkWydjb250ZW50X3VybCddID0gd2luZG93LmxvY2F0aW9uLmhyZWZcclxuICAgICAgLy8gfVxyXG4gICAgICBpZiAodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEuYXBwSWNvbikge1xyXG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfaW1hZ2UnXSA9IHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmFwcEljb25cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEuZHVyYXRpb24pIHtcclxuICAgICAgICBwYXlsb2FkWydjb250ZW50X2R1cmF0aW9uJ10gPSB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5kdXJhdGlvbiAmJiBOdW1iZXIodGhpcy5leHRDb250ZW50UmVhZERhdGEuZHVyYXRpb24pID4gMCA/IE51bWJlcih0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5kdXJhdGlvbikgOiAwXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGF5bG9hZFsnY29udGVudF9kdXJhdGlvbiddID0gMFxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5hdmdSYXRpbmdcclxuICAgICAgKSB7XHJcbiAgICAgICAgcGF5bG9hZFsnY29udGVudF9yYXRpbmcnXSA9IHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmF2Z1JhdGluZ1xyXG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnQgcmF0aW5nJ10gPSB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5hdmdSYXRpbmdcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEudG90YWxOb09mUmF0aW5nKSB7XHJcbiAgICAgICAgcGF5bG9hZFsnbm9fdXNlcnNfcmF0ZWQnXSA9IHRoaXMuZXh0Q29udGVudFJlYWREYXRhLnRvdGFsTm9PZlJhdGluZ1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGlmKE9iamVjdC5rZXlzKHRoaXMudXNlckV4dENvdXJzZUVucm9sbCkubGVuZ3RoKSB7XHJcbiAgICAgIHBheWxvYWRbJ2xlYXJuaW5nX3BhdGhfY29udGVudCddID0gT2JqZWN0LmtleXModGhpcy51c2VyRXh0Q291cnNlRW5yb2xsKS5sZW5ndGggPyB0cnVlIDogZmFsc2VcclxuICAgICAgcGF5bG9hZFsnbGVhcm5pbmcgcGF0aCBjb250ZW50J10gPSBPYmplY3Qua2V5cyh0aGlzLnVzZXJFeHRDb3Vyc2VFbnJvbGwpLmxlbmd0aCA/IHRydWUgOiBmYWxzZVxyXG4gICAgICAvLyB9XHJcbiAgICAgIGlmICh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5zb3VyY2UpIHtcclxuICAgICAgICBwYXlsb2FkWydjb250ZW50X3Byb3ZpZGVyX25hbWUnXSA9IHRoaXMuZXh0Q29udGVudFJlYWREYXRhLnNvdXJjZVxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZXh0Q29udGVudFJlYWREYXRhICYmIHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmNvbnRlbnRQYXJ0bmVyICYmXHJcbiAgICAgICAgdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudFBhcnRuZXIuY29udGVudFBhcnRuZXJOYW1lXHJcbiAgICAgICkge1xyXG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfcHJvdmlkZXJfbmFtZSddID0gdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudFBhcnRuZXIuY29udGVudFBhcnRuZXJOYW1lXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGF5bG9hZFsnY29udGVudF9wcm92aWRlcl9uYW1lJ10gPSAnS2FybWF5b2dpIEJoYXJhdCdcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXZlbnRUeXBlID09PSAndmlldycpIHtcclxuICAgICAgICB0aGlzLm5ldENvcmVTZXJ2aWNlLnRyYWNrRXZlbnRGb3JDb250ZW50QW5kRXZlbnQoJ2NvbnRlbnRfdmlldycsIHRoaXMuY29uZmlnU3ZjLnVuTWFwcGVkVXNlci5pZGVudGlmaWVyLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCBwYXlsb2FkKVxyXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Vucm9sbCcpIHtcclxuICAgICAgICB0aGlzLm5ldENvcmVTZXJ2aWNlLnRyYWNrRXZlbnRGb3JDb250ZW50QW5kRXZlbnQoJ2NvbnRlbnRfZW5yb2xtZW50JywgdGhpcy5jb25maWdTdmMudW5NYXBwZWRVc2VyLmlkZW50aWZpZXIudHJpbSgpLnRvTG93ZXJDYXNlKCksIHBheWxvYWQpXHJcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnY29tcGxldGlvbicpIHtcclxuICAgICAgICB0aGlzLm5ldENvcmVTZXJ2aWNlLnRyYWNrRXZlbnRGb3JDb250ZW50QW5kRXZlbnQoJ2NvbnRlbnRfY29tcGxldGlvbicsIHRoaXMuY29uZmlnU3ZjLnVuTWFwcGVkVXNlci5pZGVudGlmaWVyLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCBwYXlsb2FkKVxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2Vjb25kc1RvVGltZShkOiBhbnkpIHtcclxuICAgIGQgPSBOdW1iZXIoZClcclxuICAgIHZhciBoID0gTWF0aC5mbG9vcihkIC8gMzYwMClcclxuICAgIHZhciBtID0gTWF0aC5mbG9vcihkICUgMzYwMCAvIDYwKVxyXG4gICAgdmFyIHMgPSBNYXRoLmZsb29yKGQgJSAzNjAwICUgNjApXHJcblxyXG4gICAgdmFyIGhEaXNwbGF5ID0gaCA+IDAgPyBoICsgKGggPT0gMSA/IFwiIGhvdXIsIFwiIDogXCIgaG91cnMsIFwiKSA6IFwiXCJcclxuICAgIHZhciBtRGlzcGxheSA9IG0gPiAwID8gbSArIChtID09IDEgPyBcIiBtaW51dGUsIFwiIDogXCIgbWludXRlcywgXCIpIDogXCJcIlxyXG4gICAgdmFyIHNEaXNwbGF5ID0gcyA+IDAgPyBzICsgKHMgPT0gMSA/IFwiIHNlY29uZFwiIDogXCIgc2Vjb25kc1wiKSA6IFwiXCJcclxuICAgIHJldHVybiBoRGlzcGxheSArIG1EaXNwbGF5ICsgc0Rpc3BsYXlcclxuICB9XHJcblxyXG4gIGNsZWFyQ29tbWVudElkRnJvbVVybCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnJlbnRRdWVyeVBhcmFtcyA9IHsgLi4udGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyB9XHJcbiAgICBkZWxldGUgY3VycmVudFF1ZXJ5UGFyYW1zLmNvbW1lbnRJZFxyXG4gICAgdGhpcy5jb21tZW50SWQgPSAnJ1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZUVucm9sbG1lbnRFbGlnaWJpbGl0eSgpOiB2b2lkIHtcclxuICAgIC8vIE9ubHkgdmFsaWRhdGUgaWYgdXNlciBpcyBub3QgYWxyZWFkeSBlbnJvbGxlZCBhbmQgY29udGVudCBpcyBhdmFpbGFibGVcclxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnVzZXJFeHRDb3Vyc2VFbnJvbGwpLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5jb250ZW50SWQgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudFBhcnRuZXIgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudFBhcnRuZXIuaWQpIHtcclxuICAgICAgdGhpcy5lbnJvbGxWYWxpZGF0aW9uTG9hZGluZyA9IHRydWVcclxuICAgICAgdGhpcy5jZXJ0U3ZjLnZhbGlkYXRlRW5yb2xsbWVudEVsaWdpYmlsaXR5KHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmNvbnRlbnRJZCwgdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudFBhcnRuZXIuaWQpLnN1YnNjcmliZShcclxuICAgICAgICAoX3Jlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuZW5yb2xsVmFsaWRhdGlvbkxvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy5jYW5FbnJvbGwgPSB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yPy5lcnJvcj8ucGFyYW1zPy5tc2cgfHwgJ1VuYWJsZSB0byB2YWxpZGF0ZSBlbnJvbGxtZW50IGVsaWdpYmlsaXR5JywgJ1gnLCB7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxMDAwMCxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGlzLmVucm9sbFZhbGlkYXRpb25Mb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgIHRoaXMuY2FuRW5yb2xsID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJleHRDb250ZW50QXZhaWxhYmxlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidG9jLWJhbm5lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC02IGZpeGVkLXdpZHRoXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5uZXItZGV0YWlscyB0b2MtY29udGVudFwiICNiYW5uZXJEZXRhaWxzPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJza2VsZXRvbkxvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicxMzJweCdcIiBbaGVpZ2h0XT1cIiczMnB4J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCBibHVlLTItbG9hZGVyJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMTQwcHgnXCIgW2hlaWdodF09XCInMjRweCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgYmx1ZS0yLWxvYWRlcidcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IHRhZy1kaXYgcm91bmRlZC0yeGwgZ2FwLTEgaXRlbXMtY2VudGVyIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIndzLW1hdC1vcmFuZ2UtdGV4dFwiPnZpZGVvX2xpYnJhcnk8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudD8uY291cnNlQ2F0ZWdvcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQteHMgZm9udC1ib2xkIHRleHQtd2hpdGUgbGVhZGluZy0zXCI+e3sgdHJhbnNsYXRlTGFiZWwoY29udGVudD8uY291cnNlQ2F0ZWdvcnksICdzZWFyY2hmaWx0ZXJzJykgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZXh0Q29udGVudFJlYWREYXRhPy50b3BpY1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyBmb250LWJvbGQgdGV4dC13aGl0ZSBsZWFkaW5nLTNcIj57eyAnRXh0ZXJuYWwgQ291cnNlJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXdoaXRlIG1vYi1zaGFyZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJvbkNsaWNrT2ZTaGFyZSgpXCI+c2hhcmU8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNrZWxldG9uTG9hZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gS25vd2xlZGdlIGxldmVsIGJsb2NrIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZXh0Q29udGVudFJlYWREYXRhPy5kaWZmaWN1bHR5TGV2ZWwgfHwgZXh0Q29udGVudFJlYWREYXRhPy5rbm93bGVkZ2VMZXZlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImtub3dsZWRnZS1sZXZlbC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJleHRDb250ZW50UmVhZERhdGE/LmRpZmZpY3VsdHlMZXZlbD8udG9Mb3dlckNhc2UoKSA9PT0gJ2JlZ2lubmVyJyB8fCBleHRDb250ZW50UmVhZERhdGE/Lmtub3dsZWRnZUxldmVsPy50b0xvd2VyQ2FzZSgpID09PSAnYmVnaW5uZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxldmVsLWJhZGdlIGJlZ2lubmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIiNEQkY0RENcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjQyMjY3IDVDNy42NzkyNyA0LjU1NTU1IDguMzIwNzcgNC41NTU1NiA4LjU3NzM3IDVMMTIuMDQxNSAxMUMxMi4yOTgxIDExLjQ0NDQgMTEuOTc3MyAxMiAxMS40NjQxIDEySDQuNTM1OTJDNC4wMjI3MiAxMiAzLjcwMTk3IDExLjQ0NDQgMy45NTg1NyAxMUw3LjQyMjY3IDVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNDlDOTUxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2V4dENvbnRlbnRSZWFkRGF0YT8uZGlmZmljdWx0eUxldmVsIHx8IGV4dENvbnRlbnRSZWFkRGF0YT8ua25vd2xlZGdlTGV2ZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV4dENvbnRlbnRSZWFkRGF0YT8uZGlmZmljdWx0eUxldmVsPy50b0xvd2VyQ2FzZSgpID09PSAnaW50ZXJtZWRpYXRlJyB8fCBleHRDb250ZW50UmVhZERhdGE/Lmtub3dsZWRnZUxldmVsPy50b0xvd2VyQ2FzZSgpID09PSAnaW50ZXJtZWRpYXRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsZXZlbC1iYWRnZSBpbnRlcm1lZGlhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiI0QxREJFQ1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuNDIyNjcgMi42NjY2NkM3LjY3OTI3IDIuMjIyMjEgOC4zMjA3NyAyLjIyMjIxIDguNTc3MzcgMi42NjY2NkwxMi4wNDE1IDguNjY2NjZDMTIuMjk4MSA5LjExMTEgMTEuOTc3MyA5LjY2NjY2IDExLjQ2NDEgOS42NjY2Nkg0LjUzNTkyQzQuMDIyNzIgOS42NjY2NiAzLjcwMTk3IDkuMTExMSAzLjk1ODU3IDguNjY2NjZMNy40MjI2NyAyLjY2NjY2WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzFCNENBMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuNDIyNjcgNS42NjY2NkM3LjY3OTI3IDUuMjIyMjEgOC4zMjA3NyA1LjIyMjIxIDguNTc3MzcgNS42NjY2NkwxMi4wNDE1IDExLjY2NjdDMTIuMjk4MSAxMi4xMTExIDExLjk3NzMgMTIuNjY2NyAxMS40NjQxIDEyLjY2NjdINC41MzU5MkM0LjAyMjcyIDEyLjY2NjcgMy43MDE5NyAxMi4xMTExIDMuOTU4NTcgMTEuNjY2N0w3LjQyMjY3IDUuNjY2NjZaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMUI0Q0ExXCIgc3Ryb2tlPVwiI0QxREJFQ1wiIHN0cm9rZS13aWR0aD1cIjAuNVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tleHRDb250ZW50UmVhZERhdGE/LmRpZmZpY3VsdHlMZXZlbCB8fCBleHRDb250ZW50UmVhZERhdGE/Lmtub3dsZWRnZUxldmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJleHRDb250ZW50UmVhZERhdGE/LmRpZmZpY3VsdHlMZXZlbD8udG9Mb3dlckNhc2UoKSA9PT0gJ2FkdmFuY2VkJyB8fCBleHRDb250ZW50UmVhZERhdGE/Lmtub3dsZWRnZUxldmVsPy50b0xvd2VyQ2FzZSgpID09PSAnYWR2YW5jZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxldmVsLWJhZGdlIGFkdmFuY2VkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCIjRkZFNkUxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjQyMjY0IDIuMzMzMzRDNy42NzkyNCAxLjg4ODkgOC4zMjA3NCAxLjg4ODkgOC41NzczNCAyLjMzMzM0TDEyLjA0MTQgOC4zMzMzNEMxMi4yOTggOC43Nzc3OSAxMS45NzczIDkuMzMzMzQgMTEuNDY0MSA5LjMzMzM0SDQuNTM1ODlDNC4wMjI2OSA5LjMzMzM0IDMuNzAxOTQgOC43Nzc3OSAzLjk1ODU0IDguMzMzMzRMNy40MjI2NCAyLjMzMzM0WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGRjgyNjhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuNDIyNjQgNUM3LjY3OTI0IDQuNTU1NTUgOC4zMjA3NCA0LjU1NTU2IDguNTc3MzQgNUwxMi4wNDE0IDExQzEyLjI5OCAxMS40NDQ0IDExLjk3NzMgMTIgMTEuNDY0MSAxMkg0LjUzNTg5QzQuMDIyNjkgMTIgMy43MDE5NCAxMS40NDQ0IDMuOTU4NTQgMTFMNy40MjI2NCA1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGRjgyNjhcIiBzdHJva2U9XCIjRkZFNkUxXCIgc3Ryb2tlLXdpZHRoPVwiMC41XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjQyMjY0IDcuNjY2NjlDNy42NzkyNCA3LjIyMjI0IDguMzIwNzQgNy4yMjIyNCA4LjU3NzM0IDcuNjY2NjlMMTIuMDQxNCAxMy42NjY3QzEyLjI5OCAxNC4xMTExIDExLjk3NzMgMTQuNjY2NyAxMS40NjQxIDE0LjY2NjdINC41MzU4OUM0LjAyMjY5IDE0LjY2NjcgMy43MDE5NCAxNC4xMTExIDMuOTU4NTQgMTMuNjY2N0w3LjQyMjY0IDcuNjY2NjlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0ZGODI2OFwiIHN0cm9rZT1cIiNGRkU2RTFcIiBzdHJva2Utd2lkdGg9XCIwLjVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZXh0Q29udGVudFJlYWREYXRhPy5kaWZmaWN1bHR5TGV2ZWwgfHwgZXh0Q29udGVudFJlYWREYXRhPy5rbm93bGVkZ2VMZXZlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJza2VsZXRvbkxvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIic5MCUnXCIgW2hlaWdodF09XCInMzJweCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgYmx1ZS0yLWxvYWRlcidcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzcwJSdcIiBbaGVpZ2h0XT1cIiczMnB4J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCBibHVlLTItbG9hZGVyJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2tlbGV0b25Mb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5uZXItdGV4dCB0ZXh0LWJhc2Ugc206dGV4dC00eGwgbGVhZGluZy02IHNtOmxlYWRpbmctMTAgZm9udC1ib2xkXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVDYXBpdGFsaXplKGV4dENvbnRlbnRSZWFkRGF0YT8ubmFtZSkgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIHNtOnRleHQtYmFzZSBzb3VyY2UtdGV4dCBmb250LXNlbWlib2xkIGJyZWFrLXdvcmRzXCIgI2NvbnRlbnRTb3VyY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NvdXJjZUVsbGlwc2lzJzogc291cmNlRWxsaXBzaXN9XCIgdGl0bGU9XCJ7e2NvbnRlbnQ/LnNvdXJjZX19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhcmRjb250ZW50djIuYnknIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJleHRDb250ZW50UmVhZERhdGE/LmNvbnRlbnRQYXJ0bmVyPy5jb250ZW50UGFydG5lck5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJleHRDb250ZW50UmVhZERhdGE/LmNvdXJzZVByb3ZpZGVyPy5sZW5ndGg7ZWxzZSBjb250ZW50UGFydG5lck5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdGNvdXJzZVByb3ZpZGVycyhleHRDb250ZW50UmVhZERhdGE/LmNvdXJzZVByb3ZpZGVyKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29udGVudFBhcnRuZXJOYW1lPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tleHRDb250ZW50UmVhZERhdGE/LmNvbnRlbnRQYXJ0bmVyPy5jb250ZW50UGFydG5lck5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZXh0Q29udGVudFJlYWREYXRhPy5jb250ZW50UGFydG5lcj8uY29udGVudFBhcnRuZXJOYW1lXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbW1vbi5rYXJtYXlvZ2lCaGFyYXQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2tlbGV0b25Mb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicxMjBweCdcIiBbaGVpZ2h0XT1cIic0MHB4J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkIGJsdWUtMi1sb2FkZXInXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzg4cHgnXCIgW2hlaWdodF09XCInMjRweCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCBibHVlLTItbG9hZGVyJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNrZWxldG9uTG9hZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZsZXggZ2FwLTQgaXRlbXMtY2VudGVyXCIgKm5nSWY9XCJjb250ZW50Py5hdmVyYWdlUmF0aW5nIHx8IGNvbnRlbnQ/LmFkZGl0aW9uYWxUYWdzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyByYXRpbmctY2hpcCBweS0yIGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJoYW5kbGVOYXZpZ2F0ZVRvUmV2aWV3cygpXCIgKm5nSWY9XCJjb250ZW50Py5hdmVyYWdlUmF0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTEgbWFyZ2luLWxlZnQtcyBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmdyYWRlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtd2hpdGUgdGV4dC1zbSBsZWFkaW5nLTRcIj57eyBjb250ZW50Py5hdmVyYWdlUmF0aW5nIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXdoaXRlIHRleHQtc20gbGVhZGluZy00IG1hcmdpbi1yaWdodC1tXCI+e3sgY29udGVudD8udG90YWxSYXRpbmcgfCBwaXBlQ291bnRUcmFuc2Zvcm0gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIiAqbmdJZj1cImNvbnRlbnQ/LmFkZGl0aW9uYWxUYWdzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9zdC1lbnJvbGxlZC1jaGlwIHRleHQteHMgbGVhZGluZy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29udGVudD8uYWRkaXRpb25hbFRhZ3M/LmluY2x1ZGVzKCdtb3N0VHJlbmRpbmcnKVwiPnt7ICdjYXJkY29udGVudHYyLm1vc3RUcmVuZGluZycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29udGVudD8uYWRkaXRpb25hbFRhZ3M/LmluY2x1ZGVzKCdtb3N0RW5yb2xsZWQnKVwiPnt7ICdjYXJkY29udGVudHYyLm1vc3RFbnJvbGxlZCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNrZWxldG9uTG9hZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMTgwcHgnXCIgW2hlaWdodF09XCInMjBweCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCBibHVlLTItbG9hZGVyJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNrZWxldG9uTG9hZGVyICYmIGV4dENvbnRlbnRSZWFkRGF0YT8ubGFzdFVwZGF0ZWRPblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyBsZWFkaW5nLTQgc291cmNlLXRleHRcIj4oe3sgJ2FwcHRvYy5sYXN0VXBkYXRlZE9uJyB8IHRyYW5zbGF0ZSB9fSB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0Q29udGVudFJlYWREYXRhPy5sYXN0VXBkYXRlZE9uIHwgZGF0ZTogJ01NTSBkLCB5JyB9fSk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmb3JQcmV2aWV3XCI+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc01vYmlsZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHVzZXJFeHRDb3Vyc2VFbnJvbGwgfCBqc29uKSAhPT0gJ3t9JyAmJiB1c2VyRXh0Q291cnNlRW5yb2xsPy5pc3N1ZWRfY2VydGlmaWNhdGVzPy5sZW5ndGggPT09ICAwXHJcbiAgICAgICAgICAgICYmIHVzZXJFeHRDb3Vyc2VFbnJvbGw/LnByb2dyZXNzIDw9IDEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLWNlcnRpZmljYXRlLWZvdW5kIG10LTYgbWItNCBteC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+UHJvZ3Jlc3MgYW5kIGNlcnRpZmljYXRlcyBmb3Ige3sgZXh0Q29udGVudFJlYWREYXRhPy5jb250ZW50UGFydG5lcj8uY29udGVudFBhcnRuZXJOYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vyc2VzIGFyZSB2aXNpYmxlIG9ubHkgYWZ0ZXIgeW91IGNvbXBsZXRlIHRoZSBjb3Vyc2UgYW5kIHBhc3MgdGhlIGFzc2Vzc21lbnQuPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNCBwLTUgYm9yZGVyLWJvdHRvbSBwb3NpdGlvbi1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cIih1c2VyRXh0Q291cnNlRW5yb2xsIHwganNvbikgIT09ICd7fSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWVuZCB3LWZ1bGwgd3MtbWF0LWJsYWNrLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXQtYm9keS0yICB3cy1tYXQtYmxhY2stdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3t1c2VyRXh0Q291cnNlRW5yb2xsPy5wcm9ncmVzc319JTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LWNvbnRlbnQtcHJvZ3Jlc3MgW2NvbnRlbnRJZF09XCJ1c2VyRXh0Q291cnNlRW5yb2xsPy5wcm9ncmVzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9ncmVzc109XCJ1c2VyRXh0Q291cnNlRW5yb2xsPy5wcm9ncmVzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9ncmVzc1R5cGVdPVwiJ3BlcmNlbnRhZ2UnXCIgW2N1c3RvbUNsYXNzTmFtZV09XCIndmlld2VyLXByb2dyZXNzJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd3Mtd2lkZ2V0LWNvbnRlbnQtcHJvZ3Jlc3M+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAgIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIih1c2VyRXh0Q291cnNlRW5yb2xsIHwganNvbikgPT09ICd7fScgJiYgIWVucm9sbFZhbGlkYXRpb25Mb2FkaW5nICYmIGNhbkVucm9sbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgZmxleC1taWRkbGUgcmVzdW1lXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlblJvbGxUb0V4dENvdXJzZShleHRDb250ZW50UmVhZERhdGEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+e3sgJ2FwcHRvY2hvbWUuZW5yb2xsJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVucm9sbFZhbGlkYXRpb25Mb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicxMzJweCdcIiBbaGVpZ2h0XT1cIiczMnB4J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgYmx1ZS0yLWxvYWRlcidcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIodXNlckV4dENvdXJzZUVucm9sbCB8IGpzb24pICE9PSAne30nICYmIGV4dENvbnRlbnRSZWFkRGF0YT8ucmVkaXJlY3RVcmxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbiBqdXN0aWZ5LWNlbnRlciBmbGV4LW1pZGRsZSByZXN1bWVcIiB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJleHRDb250ZW50UmVhZERhdGE/LnJlZGlyZWN0VXJsXCIgKGNsaWNrKT1cImNhcHR1cmVSZWRpcmVjdFRlbGVtZXRyeShleHRDb250ZW50UmVhZERhdGEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+e3sgJ2FwcHRvY2hvbWUucmVkaXJlY3QnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtbC0yIHdzLW1hdC13aGl0ZS10ZXh0XCI+b3Blbl9pbl9uZXc8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cIih1c2VyRXh0Q291cnNlRW5yb2xsIHwganNvbikgIT09ICd7fScgJiYgdXNlckV4dENvdXJzZUVucm9sbD8uaXNzdWVkX2NlcnRpZmljYXRlcz8ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICYmIHVzZXJFeHRDb3Vyc2VFbnJvbGw/LnByb2dyZXNzID09PSAxMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyIGZsZXgtbWlkZGxlIHJlc3VtZVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZG93bmxvYWRDZXJ0KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiZnVzaW9uLWFzc2V0cy9pbWFnZXMvY2VydGlmaWNhdGUtaWNvLnN2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5DZXJ0aWZpY2F0ZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICAqbmdJZj1cIiFkb3dubG9hZENlcnRpZmljYXRlTG9hZGluZ1wiIGNsYXNzPVwibWwtMlwiPmFycm93X2Rvd253YXJkPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlciBmbGV4IGZsZXgtbWlkZGxlIGNlcnRpZmljYXRlLWxvYWRlciBtYXJnaW4tbGVmdC1zXCIgKm5nSWY9XCJkb3dubG9hZENlcnRpZmljYXRlTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiIHN0cm9rZT1cIid3aGl0ZSdcIiBjbGFzcz1cIndoaXRlLXNwaW5uZXJcIiBbZGlhbWV0ZXJdPVwiMjRcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+ICAtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBweC04IHB5LTQgZ2FwLTJcIiAqbmdJZj1cImV4dENvbnRlbnRSZWFkRGF0YT8uZHVyYXRpb24gPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2ljb25zL3RvYy90aW1lci5zdmdcIiB3aWR0aD1cIjIwcHhcIiBhbHQ9XCJ3ZWIgaW1hZ2VcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzXCI+e3sgZXh0Q29udGVudFJlYWREYXRhPy5kdXJhdGlvbiAqIDYwIHwgcGlwZUR1cmF0aW9uVHJhbnNmb3JtOiAnaG1zJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtNiBmaXhlZC13aWR0aFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2MtY29udGVudFwiIFtuZ0NsYXNzXT1cImlzTW9iaWxlID8gJyc6J210LTggbWItOCdcIj5cclxuICAgICAgICAgICAgPG1hdC10YWItZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cInt7ICdhcHB0b2NzaW5nbGVwYWdlLmFib3V0JyB8IHRyYW5zbGF0ZSB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbFwiIFtuZ0NsYXNzXT1cImlzTW9iaWxlID8gJyc6J210LTUgbWItNSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJza2VsZXRvbkxvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInODBweCdcIiBbaGVpZ2h0XT1cIicxNnB4J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yIG10LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIic4MCUnXCIgW2hlaWdodF09XCInMTZweCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCdcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInOTUlJ1wiIFtoZWlnaHRdPVwiJzE2cHgnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzY1JSdcIiBbaGVpZ2h0XT1cIicxNnB4J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtYXBwLXRvYy1hYm91dCBbY29udGVudFJlYWREYXRhXT1cImV4dENvbnRlbnRSZWFkRGF0YVwiIFtzaG93UmV2aWV3c109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiYXNlQ29udGVudFJlYWREYXRhXT1cImV4dENvbnRlbnRSZWFkRGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93TWFya2V0UGxhY2VDZXJ0aWZpY2F0ZV09XCIodXNlckV4dENvdXJzZUVucm9sbCB8IGpzb24pICE9PSAne30nICYmIHVzZXJFeHRDb3Vyc2VFbnJvbGw/Lmlzc3VlZF9jZXJ0aWZpY2F0ZXM/Lmxlbmd0aCA+ICAwICYmIHVzZXJFeHRDb3Vyc2VFbnJvbGw/LnByb2dyZXNzID09PSAxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudF09XCJleHRDb250ZW50UmVhZERhdGFcIiBbZnJvbU1hcmtldFBsYWNlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2tlbGV0b25Mb2FkZXJdPVwic2tlbGV0b25Mb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dzLXdpZGdldC1hcHAtdG9jLWFib3V0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L21hdC10YWI+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZz8uY29tbWVudHNUYWJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cInt7ICdhcHB0b2NzaW5nbGVwYWdlLmNvbW1lbnRzJyB8IHRyYW5zbGF0ZSB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgcmF0aW5ncy1kaXYgbXQtNVwiIGlkPVwiY29tbWVudHNEaXZcIiAqbmdJZj1cImRpc2N1c3NXaWRnZXREYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbW1lbnRJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkLXYyLXdpZGdldC1jb21tZW50IFt3aWRnZXREYXRhXT1cImRpc2N1c3NXaWRnZXREYXRhXCI+PC9kLXYyLXdpZGdldC1jb21tZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tbWVudElkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTMgY3Vyc29yLXBvaW50ZXIgbWItNVwiIChjbGljayk9XCJjbGVhckNvbW1lbnRJZEZyb21VcmwoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPmFycm93X2JhY2s8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrIHRvIGFsbCBjb21tZW50c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkLXYyLXdpZGdldC1jb21tZW50IFt3aWRnZXREYXRhXT1cImRpc2N1c3NXaWRnZXREYXRhXCIgW2NvbW1lbnRJZF09XCJjb21tZW50SWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2tlbGV0b25Mb2FkZXJdPjwvZC12Mi13aWRnZXQtY29tbWVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPC9uZy10ZW1wbGF0ZT4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQtY29udGVudFwiICNyaWdodENvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJza2VsZXRvbkxvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMzg0cHgnXCIgW2hlaWdodF09XCInMjI0cHgnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCdcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2tlbGV0b25Mb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpbWFnZS1kaXZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICdiYWNrZ3JvdW5kLWltYWdlJzogJ3VybCgnICsgZXh0Q29udGVudFJlYWREYXRhPy5hcHBJY29uICsgJyknLCAnYmFja2dyb3VuZC1yZXBlYXQnOiAnbm8tcmVwZWF0JywgJ2JhY2tncm91bmQtc2l6ZSc6ICdjb3Zlcid9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpbWFnZS1iYWNrZHJvcCc6IHNjcm9sbGVkfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWJldHdlZW4gdGV4dC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBqdXN0aWZ5LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIm9uQ2xpY2tPZlNoYXJlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGdhcC0yIHNoYXJlLXRhZ1wiICpuZ0lmPVwiIWZvclByZXZpZXdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnNoYXJlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57eyAnYXBwdG9jc2luZ2xlcGFnZS5zaGFyZScgfCB0cmFuc2xhdGUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTFcIiAqbmdJZj1cInNjcm9sbGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQteGwgbGVhZGluZy02IHRleHQtd2hpdGUgZm9udC1ib2xkIHRleHQtc2Nyb2wtY3VzdG9tXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2FwaXRhbGl6ZShleHRDb250ZW50UmVhZERhdGE/Lm5hbWUpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwidGV4dC1zbSBzb3VyY2UtdGV4dCBmb250LXNlbWlib2xkIGJyZWFrLXdvcmRzXCIgI2NvbnRlbnRTb3VyY2UgW25nQ2xhc3NdPVwieydzb3VyY2VFbGxpcHNpcyc6IHNvdXJjZUVsbGlwc2lzfVwiIHRpdGxlPVwie3tjb250ZW50Py5zb3VyY2V9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2FyZGNvbnRlbnR2Mi5ieScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJleHRDb250ZW50UmVhZERhdGE/LmNvbnRlbnRQYXJ0bmVyPy5jb250ZW50UGFydG5lck5hbWVcIj57eyBleHRDb250ZW50UmVhZERhdGE/LmNvbnRlbnRQYXJ0bmVyPy5jb250ZW50UGFydG5lck5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWV4dENvbnRlbnRSZWFkRGF0YT8uY29udGVudFBhcnRuZXI/LmNvbnRlbnRQYXJ0bmVyTmFtZVwiPnt7ICdjb21tb24ua2FybWF5b2dpQmhhcmF0JyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmb3JQcmV2aWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTMgcC0zIGJvcmRlci1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiKHVzZXJFeHRDb3Vyc2VFbnJvbGwgfCBqc29uKSAhPT0gJ3t9J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWVuZCB3LWZ1bGwgd3MtbWF0LWJsYWNrLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWJvZHktMiAgd3MtbWF0LWJsYWNrLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3VzZXJFeHRDb3Vyc2VFbnJvbGw/LnByb2dyZXNzfX0lPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1jb250ZW50LXByb2dyZXNzIFtjb250ZW50SWRdPVwidXNlckV4dENvdXJzZUVucm9sbD8ucHJvZ3Jlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb2dyZXNzXT1cInVzZXJFeHRDb3Vyc2VFbnJvbGw/LnByb2dyZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9ncmVzc1R5cGVdPVwiJ3BlcmNlbnRhZ2UnXCIgW2N1c3RvbUNsYXNzTmFtZV09XCIndmlld2VyLXByb2dyZXNzJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dzLXdpZGdldC1jb250ZW50LXByb2dyZXNzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAgIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIodXNlckV4dENvdXJzZUVucm9sbCB8IGpzb24pID09PSAne30nICYmICFlbnJvbGxWYWxpZGF0aW9uTG9hZGluZyAmJiBjYW5FbnJvbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgZmxleC1taWRkbGUgcmVzdW1lXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVuUm9sbFRvRXh0Q291cnNlKGV4dENvbnRlbnRSZWFkRGF0YSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPnt7ICdhcHB0b2Nob21lLmVucm9sbCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVucm9sbFZhbGlkYXRpb25Mb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzEwMCUnXCIgW2hlaWdodF09XCInMzJweCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIodXNlckV4dENvdXJzZUVucm9sbCB8IGpzb24pICE9PSAne30nICYmIGV4dENvbnRlbnRSZWFkRGF0YT8ucmVkaXJlY3RVcmxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyIGZsZXgtbWlkZGxlIHJlc3VtZVwiIHRhcmdldD1cIl9ibGFua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiZXh0Q29udGVudFJlYWREYXRhPy5yZWRpcmVjdFVybFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhcHR1cmVSZWRpcmVjdFRlbGVtZXRyeShleHRDb250ZW50UmVhZERhdGEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj57eyAnYXBwdG9jaG9tZS5yZWRpcmVjdCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWwtMiB3cy1tYXQtd2hpdGUtdGV4dFwiPm9wZW5faW5fbmV3PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIodXNlckV4dENvdXJzZUVucm9sbCB8IGpzb24pICE9PSAne30nICYmIHVzZXJFeHRDb3Vyc2VFbnJvbGw/Lmlzc3VlZF9jZXJ0aWZpY2F0ZXM/Lmxlbmd0aCA9PT0gIDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdXNlckV4dENvdXJzZUVucm9sbD8ucHJvZ3Jlc3MgPD0gMTAwICYmIHdpZGdldERhdGEgJiYgd2lkZ2V0RGF0YS5zbGlkZXJEYXRhPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuby1jZXJ0aWZpY2F0ZS1mb3VuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2xpZGVycy1keW5hbWljIFt3aWRnZXREYXRhXT1cIndpZGdldERhdGFcIj48L3dzLXdpZGdldC1zbGlkZXJzLWR5bmFtaWM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cIih1c2VyRXh0Q291cnNlRW5yb2xsIHwganNvbikgIT09ICd7fScgJiYgdXNlckV4dENvdXJzZUVucm9sbD8uaXNzdWVkX2NlcnRpZmljYXRlcz8ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB1c2VyRXh0Q291cnNlRW5yb2xsPy5wcm9ncmVzcyA9PT0gMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgZmxleC1taWRkbGUgcmVzdW1lXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJkb3dubG9hZENlcnQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJmdXNpb24tYXNzZXRzL2ltYWdlcy9jZXJ0aWZpY2F0ZS1pY28uc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5DZXJ0aWZpY2F0ZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAgKm5nSWY9XCIhZG93bmxvYWRDZXJ0aWZpY2F0ZUxvYWRpbmdcIiBjbGFzcz1cIm1sLTJcIj5hcnJvd19kb3dud2FyZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyIGZsZXggZmxleC1taWRkbGUgY2VydGlmaWNhdGUtbG9hZGVyIG1hcmdpbi1sZWZ0LXNcIiAqbmdJZj1cImRvd25sb2FkQ2VydGlmaWNhdGVMb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiIHN0cm9rZT1cIid3aGl0ZSdcIiBjbGFzcz1cIndoaXRlLXNwaW5uZXJcIiBbZGlhbWV0ZXJdPVwiMjRcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wga3BpLXZhbHVlcyBpdGVtcy1jZW50ZXIgZ2FwLTJcIiAqbmdJZj1cImV4dENvbnRlbnRSZWFkRGF0YT8uZHVyYXRpb24gPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pY29ucy90b2MvdGltZXIuc3ZnXCIgd2lkdGg9XCIyMHB4XCIgYWx0PVwid2ViIGltYWdlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQteHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGV4dENvbnRlbnRSZWFkRGF0YT8uZHVyYXRpb24gfCBwaXBlRHVyYXRpb25UcmFuc2Zvcm06ICdobXMnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG48ZGl2ICpuZ0lmPVwiIWV4dENvbnRlbnRBdmFpbGFibGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyIHctZnVsbFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXJnaW4teGwgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2NvbW1vbi9lcnJvci1wYWdlcy9lbXB0eV9zZWFyY2guc3ZnXCIgd3NVdGlsc0ltYWdlUmVzcG9uc2l2ZSBhbHQ9XCJObyByZXN1bHRzXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWFyZ2luLXRvcC1sIG1hcmdpbi1ib3R0b20tc1wiPlxyXG4gICAgICAgICAgICA8aDIgY2xhc3M9XCJtYXQtaDJcIiBpMThuPVwic2VhcmNoIHJvdXRlIG5vIHJlc3VsdFwiPnt7J2xlYXJuc2VhcmNoLm5vUmVzdWx0cycgfCB0cmFuc2xhdGV9fTwvaDI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG5cclxuPHdzLWFwcC1zaGFyZS10b2MgKm5nSWY9XCJlbmFibGVTaGFyZVwiIFtjb250ZW50TGlua109XCJjb250ZW50TGlua1wiIFtyb290T3JnSWRdPVwicm9vdE9yZ0lkXCIgW2NvbnRlbnRdPVwiZXh0Q29udGVudFJlYWREYXRhXCJcclxuICAgIChyZXNldEVuYWJsZVNoYXJlKT1cInJlc2V0RW5hYmxlU2hhcmUoJGV2ZW50KVwiPjwvd3MtYXBwLXNoYXJlLXRvYz4iXX0=
1
+ import { Component, HostListener, Inject, Optional, ViewChild } from '@angular/core';
2
+ import { WsEvents } from '@sunbird-cb/utils-v2';
3
+ import * as _ from 'lodash';
4
+ import { ConsentDialogComponent } from './consent-dialog.component';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/router";
7
+ import * as i2 from "@sunbird-cb/consumption";
8
+ import * as i3 from "@ngx-translate/core";
9
+ import * as i4 from "@sunbird-cb/utils-v2";
10
+ import * as i5 from "../../services/certificate.service";
11
+ import * as i6 from "../../services/loader.service";
12
+ import * as i7 from "@angular/material/dialog";
13
+ import * as i8 from "@angular/material/legacy-snack-bar";
14
+ import * as i9 from "../../services/netcore.service";
15
+ import * as i10 from "@angular/common";
16
+ import * as i11 from "@angular/material/icon";
17
+ import * as i12 from "@angular/material/legacy-tabs";
18
+ import * as i13 from "../../_collection/_common/skeleton-loader/skeleton-loader.component";
19
+ import * as i14 from "../../_collection/_common/content-toc/app-toc-about/app-toc-about.component";
20
+ import * as i15 from "../../share-toc/share-toc/share-toc.component";
21
+ import * as i16 from "@sunbird-cb/discussion-v2";
22
+ export class AppTocCiosHomeComponent {
23
+ handleScroll() {
24
+ if (this.scrollLimit) {
25
+ if ((window.scrollY + this.rcElem.BottomPos) >= this.scrollLimit) {
26
+ this.rcElement.nativeElement.style.position = 'sticky';
27
+ }
28
+ else {
29
+ this.rcElement.nativeElement.style.position = 'fixed';
30
+ }
31
+ }
32
+ // 236... (OffsetTop of right container + 104)
33
+ if (window.scrollY > (this.rcElem.offSetTop + 104)) {
34
+ this.scrolled = true;
35
+ }
36
+ else {
37
+ this.scrolled = false;
38
+ }
39
+ }
40
+ constructor(route, commonSvc, translate, configSvc, events, langtranslations, contentSvc, certSvc, loader, matDialog, snackBar, netCoreService, environment) {
41
+ this.route = route;
42
+ this.commonSvc = commonSvc;
43
+ this.translate = translate;
44
+ this.configSvc = configSvc;
45
+ this.events = events;
46
+ this.langtranslations = langtranslations;
47
+ this.contentSvc = contentSvc;
48
+ this.certSvc = certSvc;
49
+ this.loader = loader;
50
+ this.matDialog = matDialog;
51
+ this.snackBar = snackBar;
52
+ this.netCoreService = netCoreService;
53
+ this.environment = environment;
54
+ this.commentId = '';
55
+ this.skeletonLoader = true;
56
+ this.extContentReadData = {};
57
+ this.userExtCourseEnroll = {};
58
+ this.downloadCertificateLoading = false;
59
+ this.forPreview = window.location.href.includes('/public/') || window.location.href.includes('?editMode=true');
60
+ this.extContentAvailable = true;
61
+ this.canEnroll = false;
62
+ this.enrollValidationLoading = true;
63
+ this.rcElem = {
64
+ offSetTop: 0,
65
+ BottomPos: 0,
66
+ };
67
+ this.contentLink = '';
68
+ this.isMobile = false;
69
+ this.enableShare = false;
70
+ this.currentLang = 'en';
71
+ this.route.data.subscribe((data) => {
72
+ this.enrollValidationLoading = false;
73
+ if (data && data.extContent && data.extContent.data && data.extContent.data.content) {
74
+ this.extContentReadData = data.extContent.data.content;
75
+ this.extContentReadData['certificateObj'] = {
76
+ data: {},
77
+ };
78
+ this.skeletonLoader = false;
79
+ }
80
+ else {
81
+ this.extContentAvailable = false;
82
+ this.skeletonLoader = false;
83
+ }
84
+ if (data && data.userEnrollContent && data.userEnrollContent.data && data.userEnrollContent.data.result &&
85
+ Object.keys(data.userEnrollContent.data.result).length > 0) {
86
+ this.userExtCourseEnroll = data.userEnrollContent.data.result;
87
+ if (this.userExtCourseEnroll.completionpercentage === 100) {
88
+ this.extContentReadData['completionStatus'] = 2;
89
+ this.downloadCert();
90
+ this.contentViewEventForNetCore('completion');
91
+ }
92
+ }
93
+ else {
94
+ this.validateEnrollmentEligibility();
95
+ }
96
+ });
97
+ if (localStorage.getItem('websiteLanguage')) {
98
+ this.translate.setDefaultLang('en');
99
+ this.currentLang = localStorage.getItem('websiteLanguage');
100
+ this.translate.use(this.currentLang);
101
+ }
102
+ this.configSvc.languageTranslationFlag.subscribe((data) => {
103
+ if (data) {
104
+ if (localStorage.getItem('websiteLanguage')) {
105
+ this.currentLang = localStorage.getItem('websiteLanguage');
106
+ this.translate.use(this.currentLang);
107
+ }
108
+ }
109
+ });
110
+ if (this.configSvc.userProfile) {
111
+ this.rootOrgId = this.configSvc.userProfile.rootOrgId;
112
+ }
113
+ this.contentLink = `${window.location.pathname.substring(1)}${window.location.search}`;
114
+ this.commentId = this.route.snapshot.queryParams.commentId ? this.route.snapshot.queryParams.commentId : '';
115
+ if (this.commentId) {
116
+ //this.selectedTabIndex = 2
117
+ }
118
+ }
119
+ ngOnInit() {
120
+ if (this.route.snapshot.data.pageData && this.route.snapshot.data.pageData.data) {
121
+ this.config = this.route.snapshot.data.pageData.data;
122
+ this.initializeDiscussData();
123
+ }
124
+ if (window.innerWidth <= 1200) {
125
+ this.isMobile = true;
126
+ }
127
+ else {
128
+ this.isMobile = false;
129
+ }
130
+ this.contentViewEventForNetCore('view');
131
+ }
132
+ initializeDiscussData() {
133
+ if (this.config && this.config.discussWidgetData) {
134
+ this.discussWidgetData = this.config.discussWidgetData;
135
+ if (this.extContentReadData && this.extContentReadData.contentId) {
136
+ this.discussWidgetData.newCommentSection.commentTreeData.entityId = this.extContentReadData.contentId;
137
+ if (this.discussWidgetData.commentsList.repliesSection && this.discussWidgetData.commentsList.repliesSection.newCommentReply) {
138
+ this.discussWidgetData.commentsList.repliesSection.newCommentReply.commentTreeData.entityId = this.extContentReadData.contentId;
139
+ }
140
+ }
141
+ this.widgetData = this.config;
142
+ this.widgetData['type'] = 'tips';
143
+ this.widgetData['cardClass'] = 'slider-container';
144
+ this.widgetData['height'] = 'auto';
145
+ this.widgetData['sliderData'] = _.get(this.extContentReadData, 'contentPartner.providerTips', []);
146
+ if (Object.keys(this.userExtCourseEnroll).length) {
147
+ this.discussWidgetData.enrolledContent = true;
148
+ this.discussWidgetData.newCommentSection.commentBox.placeholder = 'Start a discussion';
149
+ }
150
+ else {
151
+ this.discussWidgetData.enrolledContent = false;
152
+ this.discussWidgetData.newCommentSection.commentBox.placeholder = 'Enrol to add your comments';
153
+ }
154
+ this.discussWidgetData = { ...this.discussWidgetData };
155
+ }
156
+ }
157
+ handleCapitalize(str, type) {
158
+ return this.commonSvc.handleCapitalize(str, type);
159
+ }
160
+ translateLabels(label, type) {
161
+ return this.langtranslations.translateLabel(label, type, '');
162
+ }
163
+ ngAfterViewInit() {
164
+ if (this.rcElement) {
165
+ this.rcElem.BottomPos = this.rcElement.nativeElement.offsetTop + this.rcElement.nativeElement.offsetHeight;
166
+ this.rcElem.offSetTop = this.rcElement.nativeElement.offsetTop;
167
+ }
168
+ }
169
+ redirectToContent(contentData) {
170
+ const userData = this.configSvc.userProfileV2;
171
+ const extUrl = contentData.redirectUrl.replace('<username>', userData.email);
172
+ return extUrl;
173
+ }
174
+ replaceText(str, replaceTxt) {
175
+ return str.replaceAll(replaceTxt, '');
176
+ }
177
+ formatcourseProviders(providers) {
178
+ if (!providers || !Array.isArray(providers)) {
179
+ return '';
180
+ }
181
+ return providers.map((provider) => provider.name).join(', ');
182
+ }
183
+ async enRollToExtCourse(content) {
184
+ const consentUrl = `${this.environment?.missionKarmayogiPath}${this.config?.contentConsent?.consentDocUrl}` || '';
185
+ const assetsDocUrl = `${this.config?.contentConsent?.assetsDocUrl}` || '';
186
+ const dialogRef = this.matDialog.open(ConsentDialogComponent, {
187
+ width: '900px',
188
+ height: '70vh',
189
+ maxHeight: '90vh',
190
+ minHeight: '400px',
191
+ disableClose: true,
192
+ hasBackdrop: true,
193
+ panelClass: 'consent-dialog-panel',
194
+ data: {
195
+ consentUrl: consentUrl,
196
+ assetsDocUrl: assetsDocUrl
197
+ }
198
+ });
199
+ // Handle dialog close
200
+ dialogRef.afterClosed().subscribe((result) => {
201
+ if (result === true) {
202
+ // User agreed - proceed with enrollment
203
+ // need to call consent api
204
+ this.callConsentApi(content);
205
+ }
206
+ else {
207
+ // User disagreed
208
+ this.snackBar.open('You must agree to the terms to enroll in this course.', 'X', {
209
+ duration: 5000,
210
+ });
211
+ }
212
+ });
213
+ }
214
+ callConsentApi(content) {
215
+ console.log(content);
216
+ const request = {
217
+ "request": {
218
+ "contentId": content?.contentId,
219
+ "consentId": this.config?.contentConsent?.consentId || '',
220
+ "additionalAttributes": {
221
+ "userRoles": ["public"],
222
+ "versionKey": new Date().getTime(),
223
+ "description": "I have read and agree with the above declaration."
224
+ }
225
+ }
226
+ };
227
+ this.certSvc.consentSubmit(request).subscribe((_res) => {
228
+ this.proceedWithEnrollment(content);
229
+ }, (error) => {
230
+ this.snackBar.open(error?.error?.params?.msg || 'Unable to submit consent', 'X', {
231
+ duration: 5000,
232
+ });
233
+ });
234
+ }
235
+ async proceedWithEnrollment(content) {
236
+ this.loader.changeLoad.next(true);
237
+ const reqbody = {
238
+ courseId: content.contentId,
239
+ partnerId: content.contentPartner.id,
240
+ };
241
+ const enrollRes = await this.contentSvc.extContentEnroll(reqbody).toPromise().catch(_error => { return _error; });
242
+ if (enrollRes && enrollRes.result && Object.keys(enrollRes.result).length > 0) {
243
+ this.discussWidgetData.enrolledContent = true;
244
+ this.discussWidgetData.newCommentSection.commentBox.placeholder = 'Start a discussion';
245
+ this.getUserContentEnroll(content.contentId);
246
+ this.contentViewEventForNetCore('enroll');
247
+ }
248
+ else {
249
+ this.loader.changeLoad.next(false);
250
+ this.snackBar.open(enrollRes?.error?.params?.msg || 'Unable to enroll to the content', 'X', {
251
+ duration: 10000,
252
+ });
253
+ }
254
+ }
255
+ async getUserContentEnroll(contentId) {
256
+ const enrollRes = await this.contentSvc.fetchExtUserContentEnroll(contentId).toPromise().catch(_error => { });
257
+ if (enrollRes && enrollRes.result && Object.keys(enrollRes.result).length > 0) {
258
+ this.userExtCourseEnroll = enrollRes.result;
259
+ this.loader.changeLoad.next(false);
260
+ this.telemetryToCaptureInteract(contentId, 'enroll', 'enrol-content');
261
+ this.snackBar.open('Successfully enrolled in the course.');
262
+ }
263
+ else {
264
+ this.loader.changeLoad.next(false);
265
+ this.snackBar.open('Unable to get the enrolled details');
266
+ }
267
+ }
268
+ captureRedirectTelemetry(content) {
269
+ this.raiseTelemtryStartEvent();
270
+ this.telemetryToCaptureInteract(content.contentId, 'redirect', 'redirect-content');
271
+ this.raiseTelemtryEndEvent();
272
+ }
273
+ raiseTelemtryStartEvent() {
274
+ const event = {
275
+ eventType: WsEvents.WsEventType.Telemetry,
276
+ eventLogLevel: WsEvents.WsEventLogLevel.Info,
277
+ from: 'test',
278
+ to: '',
279
+ data: {
280
+ edata: { type: '' },
281
+ object: {},
282
+ state: WsEvents.EnumTelemetrySubType.Loaded,
283
+ type: 'session',
284
+ mode: 'view',
285
+ },
286
+ };
287
+ this.events.dispatchEvent(event);
288
+ }
289
+ telemetryToCaptureInteract(contentId, subType, id) {
290
+ this.events.raiseInteractTelemetry({
291
+ type: 'click',
292
+ subType,
293
+ id: id,
294
+ }, {
295
+ id: contentId,
296
+ type: 'External content',
297
+ }, {
298
+ module: 'Home',
299
+ });
300
+ }
301
+ raiseTelemtryEndEvent() {
302
+ const event = {
303
+ eventType: WsEvents.WsEventType.Telemetry,
304
+ eventLogLevel: WsEvents.WsEventLogLevel.Info,
305
+ from: 'test',
306
+ to: '',
307
+ data: {
308
+ edata: { type: '' },
309
+ object: {},
310
+ state: WsEvents.EnumTelemetrySubType.Unloaded,
311
+ type: 'session',
312
+ mode: 'view',
313
+ },
314
+ };
315
+ this.events.dispatchEvent(event);
316
+ }
317
+ async downloadCert() {
318
+ this.downloadCertificateLoading = true;
319
+ const certRes = await this.certSvc.downloadCertificate_v2(this.userExtCourseEnroll.issued_certificates[0].identifier).toPromise().catch(_error => { });
320
+ if (certRes && Object.keys(certRes.result).length > 0) {
321
+ this.downloadCertificateLoading = false;
322
+ if (this.userExtCourseEnroll.issued_certificates && this.userExtCourseEnroll.issued_certificates.length
323
+ && this.userExtCourseEnroll.issued_certificates[0]) {
324
+ this.extContentReadData['certificateObj'] = {
325
+ data: this.userExtCourseEnroll.issued_certificates[0],
326
+ certData: certRes.result.printUri,
327
+ certId: this.userExtCourseEnroll.issued_certificates[0].identifier,
328
+ };
329
+ }
330
+ }
331
+ else {
332
+ this.downloadCertificateLoading = false;
333
+ }
334
+ }
335
+ onClickOfShare() {
336
+ this.enableShare = true;
337
+ //this.raiseTelemetryForShare('shareContent')
338
+ }
339
+ /* tslint:disable */
340
+ // raiseTelemetryForShare(subType: any) {
341
+ // //console.log(this.extContentReadData, this.events, subType)
342
+ // // this.events.raiseInteractTelemetry(
343
+ // // {
344
+ // // type: 'click',
345
+ // // subType,
346
+ // // id: this.content ? this.content.identifier : '',
347
+ // // },
348
+ // // {
349
+ // // id: this.content ? this.content.identifier : '',
350
+ // // type: this.content ? this.content.primaryCategory : '',
351
+ // // },
352
+ // // {
353
+ // // pageIdExt: `btn-${subType}`,
354
+ // // module: WsEvents.EnumTelemetrymodules.CONTENT,
355
+ // // }
356
+ // // )
357
+ // }
358
+ resetEnableShare(_eventData) {
359
+ this.enableShare = false;
360
+ }
361
+ contentViewEventForNetCore(eventType) {
362
+ if (this.configSvc.netcoreConfig && this.configSvc.netcoreConfig.netcoreWebConfig // NOSONAR
363
+ && this.configSvc.netcoreConfig.netcoreWebConfig.isActive // NOSONAR
364
+ && this.configSvc.netcoreConfig.netcoreWebConfig.events // NOSONAR
365
+ && this.configSvc.netcoreConfig.netcoreWebConfig.events.content_view // NOSONAR
366
+ && this.configSvc.netcoreConfig.netcoreWebConfig.events.content_view.isActive // NOSONAR
367
+ ) {
368
+ let payload = {};
369
+ // if (this.configSvc && this.configSvc.unMappedUser && this.configSvc.unMappedUser.identifier) { // NOSONAR
370
+ // payload['pk^userid'] = this.configSvc.unMappedUser.identifier.trim().toLowerCase()
371
+ // }
372
+ // console.log('payload', payload)
373
+ if (this.extContentReadData && this.extContentReadData.name) {
374
+ payload['content_name'] = this.extContentReadData.name;
375
+ }
376
+ // if(this.extContentReadData && this.extContentReadData.courseCategory) {
377
+ payload['content_category'] = 'External Course';
378
+ // }
379
+ if (this.extContentReadData && this.extContentReadData.externalId) {
380
+ payload['content_id'] = this.extContentReadData.externalId;
381
+ }
382
+ // if(this.extContentReadData && this.extContentReadData.name) {
383
+ payload['content_url'] = window.location.href;
384
+ // }
385
+ if (this.extContentReadData && this.extContentReadData.appIcon) {
386
+ payload['content_image'] = this.extContentReadData.appIcon;
387
+ }
388
+ if (this.extContentReadData && this.extContentReadData.duration) {
389
+ payload['content_duration'] = this.extContentReadData.duration && Number(this.extContentReadData.duration) > 0 ? Number(this.extContentReadData.duration) : 0;
390
+ }
391
+ else {
392
+ payload['content_duration'] = 0;
393
+ }
394
+ if (this.extContentReadData && this.extContentReadData.avgRating) {
395
+ payload['content_rating'] = this.extContentReadData.avgRating;
396
+ payload['content rating'] = this.extContentReadData.avgRating;
397
+ }
398
+ if (this.extContentReadData && this.extContentReadData.totalNoOfRating) {
399
+ payload['no_users_rated'] = this.extContentReadData.totalNoOfRating;
400
+ }
401
+ // if(Object.keys(this.userExtCourseEnroll).length) {
402
+ payload['learning_path_content'] = Object.keys(this.userExtCourseEnroll).length ? true : false;
403
+ payload['learning path content'] = Object.keys(this.userExtCourseEnroll).length ? true : false;
404
+ // }
405
+ if (this.extContentReadData && this.extContentReadData.source) {
406
+ payload['content_provider_name'] = this.extContentReadData.source;
407
+ }
408
+ else if (this.extContentReadData && this.extContentReadData.contentPartner &&
409
+ this.extContentReadData.contentPartner.contentPartnerName) {
410
+ payload['content_provider_name'] = this.extContentReadData.contentPartner.contentPartnerName;
411
+ }
412
+ else {
413
+ payload['content_provider_name'] = 'Karmayogi Bharat';
414
+ }
415
+ if (eventType === 'view') {
416
+ this.netCoreService.trackEventForContentAndEvent('content_view', this.configSvc.unMappedUser.identifier.trim().toLowerCase(), payload);
417
+ }
418
+ else if (eventType === 'enroll') {
419
+ this.netCoreService.trackEventForContentAndEvent('content_enrolment', this.configSvc.unMappedUser.identifier.trim().toLowerCase(), payload);
420
+ }
421
+ else if (eventType === 'completion') {
422
+ this.netCoreService.trackEventForContentAndEvent('content_completion', this.configSvc.unMappedUser.identifier.trim().toLowerCase(), payload);
423
+ }
424
+ }
425
+ }
426
+ secondsToTime(d) {
427
+ d = Number(d);
428
+ var h = Math.floor(d / 3600);
429
+ var m = Math.floor(d % 3600 / 60);
430
+ var s = Math.floor(d % 3600 % 60);
431
+ var hDisplay = h > 0 ? h + (h == 1 ? " hour, " : " hours, ") : "";
432
+ var mDisplay = m > 0 ? m + (m == 1 ? " minute, " : " minutes, ") : "";
433
+ var sDisplay = s > 0 ? s + (s == 1 ? " second" : " seconds") : "";
434
+ return hDisplay + mDisplay + sDisplay;
435
+ }
436
+ clearCommentIdFromUrl() {
437
+ const currentQueryParams = { ...this.route.snapshot.queryParams };
438
+ delete currentQueryParams.commentId;
439
+ this.commentId = '';
440
+ }
441
+ validateEnrollmentEligibility() {
442
+ // Only validate if user is not already enrolled and content is available
443
+ if (Object.keys(this.userExtCourseEnroll).length === 0 && this.extContentReadData && this.extContentReadData.contentId && this.extContentReadData.contentPartner && this.extContentReadData.contentPartner.id) {
444
+ this.enrollValidationLoading = true;
445
+ this.certSvc.validateEnrollmentEligibility(this.extContentReadData.contentId, this.extContentReadData.contentPartner.id).subscribe((_response) => {
446
+ this.enrollValidationLoading = false;
447
+ this.canEnroll = true;
448
+ }, (error) => {
449
+ this.snackBar.open(error?.error?.params?.msg || 'Unable to validate enrollment eligibility', 'X', {
450
+ duration: 10000,
451
+ });
452
+ this.enrollValidationLoading = false;
453
+ this.canEnroll = false;
454
+ });
455
+ }
456
+ }
457
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocCiosHomeComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.CommonMethodsService }, { token: i3.TranslateService }, { token: i4.ConfigurationsService }, { token: i4.EventService }, { token: i4.MultilingualTranslationsService }, { token: i4.WidgetContentService }, { token: i5.CertificateService }, { token: i6.LoaderService }, { token: i7.MatDialog }, { token: i8.MatLegacySnackBar }, { token: i9.NetCoreService }, { token: 'environment', optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
458
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AppTocCiosHomeComponent, selector: "ws-app-app-toc-cios-home", host: { listeners: { "window:scroll": "handleScroll($event)" } }, viewQueries: [{ propertyName: "rcElement", first: true, predicate: ["rightContainer"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"extContentAvailable\">\n <div class=\"toc-banner\">\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"banner-details toc-content\" #bannerDetails>\n <div class=\"flex flex-col gap-4\">\n <div class=\"flex items-center justify-between gap-4\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'140px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex flex-row gap-2\">\n <div class=\"flex flex-row tag-div rounded-2xl gap-1 items-center p-2\">\n <mat-icon class=\"ws-mat-orange-text\">video_library</mat-icon>\n <ng-container *ngIf=\"content?.courseCategory\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ translateLabel(content?.courseCategory, 'searchfilters') }}</div>\n </ng-container>\n <ng-container *ngIf=\"extContentReadData?.topic\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ 'External Course' }}</div>\n </ng-container>\n </div>\n </div> -->\n </ng-container>\n\n <div class=\"flex items-center text-white mob-share\">\n <mat-icon (click)=\"onClickOfShare()\">share</mat-icon>\n </div>\n </div>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- Knowledge level block -->\n <div *ngIf=\"extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel\"\n class=\"knowledge-level-container\">\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'beginner' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'beginner'\"\n class=\"level-badge beginner\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#DBF4DC\" />\n <path\n d=\"M7.42267 5C7.67927 4.55555 8.32077 4.55556 8.57737 5L12.0415 11C12.2981 11.4444 11.9773 12 11.4641 12H4.53592C4.02272 12 3.70197 11.4444 3.95857 11L7.42267 5Z\"\n fill=\"#49C951\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'intermediate' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'intermediate'\"\n class=\"level-badge intermediate\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#D1DBEC\" />\n <path\n d=\"M7.42267 2.66666C7.67927 2.22221 8.32077 2.22221 8.57737 2.66666L12.0415 8.66666C12.2981 9.1111 11.9773 9.66666 11.4641 9.66666H4.53592C4.02272 9.66666 3.70197 9.1111 3.95857 8.66666L7.42267 2.66666Z\"\n fill=\"#1B4CA1\" />\n <path\n d=\"M7.42267 5.66666C7.67927 5.22221 8.32077 5.22221 8.57737 5.66666L12.0415 11.6667C12.2981 12.1111 11.9773 12.6667 11.4641 12.6667H4.53592C4.02272 12.6667 3.70197 12.1111 3.95857 11.6667L7.42267 5.66666Z\"\n fill=\"#1B4CA1\" stroke=\"#D1DBEC\" stroke-width=\"0.5\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'advanced' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'advanced'\"\n class=\"level-badge advanced\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <g clip-path=\"url(#clip0)\">\n <rect width=\"16\" height=\"16\" fill=\"#FFE6E1\" />\n <path\n d=\"M7.42264 2.33334C7.67924 1.8889 8.32074 1.8889 8.57734 2.33334L12.0414 8.33334C12.298 8.77779 11.9773 9.33334 11.4641 9.33334H4.53589C4.02269 9.33334 3.70194 8.77779 3.95854 8.33334L7.42264 2.33334Z\"\n fill=\"#FF8268\" />\n <path\n d=\"M7.42264 5C7.67924 4.55555 8.32074 4.55556 8.57734 5L12.0414 11C12.298 11.4444 11.9773 12 11.4641 12H4.53589C4.02269 12 3.70194 11.4444 3.95854 11L7.42264 5Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n <path\n d=\"M7.42264 7.66669C7.67924 7.22224 8.32074 7.22224 8.57734 7.66669L12.0414 13.6667C12.298 14.1111 11.9773 14.6667 11.4641 14.6667H4.53589C4.02269 14.6667 3.70194 14.1111 3.95854 13.6667L7.42264 7.66669Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n </g>\n <defs>\n <clipPath id=\"clip0\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n </div>\n </ng-container>\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'90%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'70%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"banner-text text-base sm:text-4xl leading-6 sm:leading-10 font-bold\">{{\n handleCapitalize(extContentReadData?.name) }}</div>\n <div class=\"text-sm sm:text-base source-text font-semibold break-words\" #contentSource\n [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">\n <span *ngIf=\"extContentReadData?.courseProvider?.length;else contentPartnerName\">\n {{ formatcourseProviders(extContentReadData?.courseProvider) }}\n </span>\n <ng-template #contentPartnerName>\n {{extContentReadData?.contentPartner?.contentPartnerName }}\n </ng-template>\n </span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{\n 'common.karmayogiBharat' | translate }}</span>\n </div>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'120px'\" [height]=\"'40px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'88px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex gap-4 items-center\" *ngIf=\"content?.averageRating || content?.additionalTags?.length\">\n <div class=\"flex flex-row rating-chip py-2 items-center cursor-pointer\" (click)=\"handleNavigateToReviews()\" *ngIf=\"content?.averageRating\">\n <div class=\"flex flex-row gap-1 margin-left-s items-center\">\n <mat-icon>grade</mat-icon>\n <div class=\"text-white text-sm leading-4\">{{ content?.averageRating }}</div>\n </div>\n <div class=\"separator\"></div>\n <div class=\"text-white text-sm leading-4 margin-right-m\">{{ content?.totalRating | pipeCountTransform }}</div>\n </div>\n <div class=\"flex items-center\" *ngIf=\"content?.additionalTags?.length\">\n <div class=\"most-enrolled-chip text-xs leading-3\">\n <span *ngIf=\"content?.additionalTags?.includes('mostTrending')\">{{ 'cardcontentv2.mostTrending' | translate }}</span>\n <span *ngIf=\"content?.additionalTags?.includes('mostEnrolled')\">{{ 'cardcontentv2.mostEnrolled' | translate }}</span>\n </div>\n </div>\n </div> -->\n </ng-container>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'180px'\" [height]=\"'20px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader && extContentReadData?.lastUpdatedOn\">\n <div class=\"text-xs leading-4 source-text\">({{ 'apptoc.lastUpdatedOn' | translate }} {{\n extContentReadData?.lastUpdatedOn | date: 'MMM d, y' }})</div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"!forPreview\">\n\n <div *ngIf=\"isMobile\">\n <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length === 0\n && userExtCourseEnroll?.progress <= 100\">\n <div class=\"no-certificate-found mt-6 mb-4 mx-2\">\n <div>\n <span>Progress and certificates for {{ extContentReadData?.contentPartner?.contentPartnerName }}\n courses are visible only after you complete the course and pass the assessment.</span>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-col gap-4 p-5 border-bottom position-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n <ng-container *ngIf=\"(userExtCourseEnroll | json) === '{}' && !enrollValidationLoading && canEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && extContentReadData?.redirectUrl\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\" (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n <div>\n <div class=\"flex flex-col px-8 py-4 gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">{{ extContentReadData?.duration * 60 | pipeDurationTransform: 'hms' }}</div>\n </div>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"toc-content\" [ngClass]=\"isMobile ? '':'mt-8 mb-8'\">\n <mat-tab-group>\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col\" [ngClass]=\"isMobile ? '':'mt-5 mb-5'\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'80px'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <div class=\"flex flex-col gap-2 mt-4\">\n <ws-widget-skeleton-loader [width]=\"'80%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'95%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'65%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <ws-widget-app-toc-about [contentReadData]=\"extContentReadData\" [showReviews]=\"false\"\n [baseContentReadData]=\"extContentReadData\"\n [showMarketPlaceCertificate]=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0 && userExtCourseEnroll?.progress === 100\"\n [content]=\"extContentReadData\" [fromMarketPlace]=\"true\"\n [skeletonLoader]=\"skeletonLoader\">\n </ws-widget-app-toc-about>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n\n <ng-container *ngIf=\"config?.commentsTab\">\n <mat-tab label=\"{{ 'apptocsinglepage.comments' | translate }}\">\n <!-- <ng-template matTabContent> -->\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\" *ngIf=\"discussWidgetData\">\n <ng-container *ngIf=\"!commentId\">\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\n </ng-container>\n <ng-container *ngIf=\"commentId\">\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\n Back to all comments\n </div>\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\n [skeletonLoader]></d-v2-widget-comment>\n </ng-container>\n\n </div>\n <!-- </ng-template> -->\n </mat-tab>\n </ng-container>\n </mat-tab-group>\n\n </div>\n <div class=\"right-container\">\n <div class=\"right-content\" #rightContainer>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'384px'\" [height]=\"'224px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"flex flex-col image-div\"\n [ngStyle]=\"{\n 'background-image': 'url(' + extContentReadData?.appIcon + ')', 'background-repeat': 'no-repeat', 'background-size': 'cover'}\"\n [ngClass]=\"{'image-backdrop': scrolled}\">\n <div class=\"flex flex-col justify-between text-container\">\n <div class=\"flex items-center gap-4 justify-end\">\n <div (click)=\"onClickOfShare()\"\n class=\"flex flex-row items-center justify-end gap-2 share-tag\" *ngIf=\"!forPreview\">\n <mat-icon>share</mat-icon>\n <div>{{ 'apptocsinglepage.share' | translate }}</div>\n </div>\n </div>\n <div class=\"flex flex-col gap-1\" *ngIf=\"scrolled\">\n <div class=\"text-xl leading-6 text-white font-bold text-scrol-custom\">{{\n handleCapitalize(extContentReadData?.name) }}\n </div>\n <!-- <div class=\"text-sm source-text font-semibold break-words\" #contentSource [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">{{ extContentReadData?.contentPartner?.contentPartnerName }}</span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{ 'common.karmayogiBharat' | translate }}</span>\n </div> -->\n </div>\n </div>\n\n\n </div>\n\n\n </ng-container>\n\n <ng-container *ngIf=\"!forPreview\">\n <div class=\"flex flex-col gap-3 p-3 border-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n\n <ng-container\n *ngIf=\"(userExtCourseEnroll | json) === '{}' && !enrollValidationLoading && canEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'100%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded '\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && extContentReadData?.redirectUrl\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\"\n (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length === 0\n && userExtCourseEnroll?.progress <= 100 && widgetData && widgetData.sliderData?.length\">\n <div class=\"no-certificate-found\">\n <ws-widget-sliders-dynamic [widgetData]=\"widgetData\"></ws-widget-sliders-dynamic>\n </div>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n </ng-container>\n <div>\n <div class=\"flex flex-col kpi-values items-center gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">\n {{ extContentReadData?.duration | pipeDurationTransform: 'hms' }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n<div *ngIf=\"!extContentAvailable\">\n <div class=\"flex justify-center w-full\">\n <div class=\"margin-xl text-center\">\n <img src=\"/assets/common/error-pages/empty_search.svg\" wsUtilsImageResponsive alt=\"No results\"\n class=\"margin-top-l margin-bottom-s\">\n <h2 class=\"mat-h2\" i18n=\"search route no result\">{{'learnsearch.noResults' | translate}}</h2>\n </div>\n </div>\n\n</div>\n\n<ws-app-share-toc *ngIf=\"enableShare\" [contentLink]=\"contentLink\" [rootOrgId]=\"rootOrgId\" [content]=\"extContentReadData\"\n (resetEnableShare)=\"resetEnableShare($event)\"></ws-app-share-toc>", styles: [".source-text{color:#ffffffb3}.toc-banner{background:#3a83cf;background:linear-gradient(135deg,#3a83cf,#1b4ca1);width:100%}.toc-banner .fixed-width{padding:0 16px}.toc-banner .banner-details{padding:36px 0}.toc-banner .banner-details .due-tag{padding:4px;color:#fff;border-radius:4px}.toc-banner .banner-details .due-warning{background-color:#ff9800;border:1px solid #FF9800}.toc-banner .banner-details .due-overdue{background-color:#f44336;border:1px solid #F44336}.toc-banner .banner-details .due-success{background-color:#4caf50;border:1px solid #4CAF50}.toc-banner .banner-details .rating-chip{border:1px solid rgba(0,0,0,.6);border-radius:20px;background-color:#0009}.toc-banner .banner-details .rating-chip mat-icon{width:16px;height:16px;color:#ff9800;font-size:16px}.toc-banner .banner-details .rating-chip .separator{width:1px;height:20px;border-right:1px solid rgba(255,255,255,.16);margin:0 8px}.toc-banner .banner-details .banner-text{color:#fffffff2;word-wrap:break-word}.toc-banner .info-div{max-width:384px;width:100%}.toc-banner .most-enrolled-chip{background-color:#ffea9e;border:1px solid #FFEA9E;padding:4px;border-radius:2px}.text-info-div{padding:8px;background-color:#fff;border-radius:64px}.tag-div{border:1px solid #FF9800;background-color:#00000080}.tag-div mat-icon{font-size:12px;width:12px;height:12px}.fixed-width{max-width:1200px;display:block;margin:0 auto}.mat-subheading-1{margin-bottom:4px!important}.initial-circle{width:36px;height:36px;border-radius:50%;background:#1b2133;color:#fff;text-transform:uppercase}.toc-content{max-width:792px;width:100%}.right-container .image-div{height:220px;background-color:#ccc;border-top-left-radius:12px;border-top-right-radius:12px}.right-container .image-div img{max-width:384px;width:100%;height:220px;border-top-left-radius:12px;border-top-right-radius:12px;position:relative;top:-42px}.right-container .image-div .share-container{position:relative;z-index:2;top:20px;margin-right:20px}.right-container .image-div .share-tag{font-weight:700;background-color:#000;border:1px solid #FFF;border-radius:20px;padding:6px 16px;color:#fff;cursor:pointer}.right-container .tag-div mat-icon{width:16px;height:16px;font-size:16px}.right-container .share-tag mat-icon{width:20px;height:20px;font-size:20px}.right-container .text-container{position:relative;z-index:2;height:220px;padding:16px}.right-container .right-content{background-color:#fff;border-radius:12px;position:fixed;z-index:10;top:132px;width:384px;margin-bottom:2rem;box-shadow:0 2px 6px -1px #00000080,0 -4px 4px -2px #00000080}.right-container .border-bottom{border-bottom:1px solid rgba(0,0,0,.2)}.right-container .info-div{background-color:#fef7ed;border:none;border-radius:8px;padding:8px 12px;font-size:14px}.right-container .info-div .mat-icon{width:18px;height:18px;font-size:18px}.right-container .kpi-values{width:64px;padding:8px;text-align:center}.right-container .kpi-values .timer-icon{color:#000000de;height:20px}.batch-info{padding:16px;border-radius:4px;background-color:#1b4ca114;border:1px solid rgba(27,76,161,.08);text-align:center}.batch-info .batch-label{font-size:.75rem;color:#0009;line-height:1rem}.button{border-radius:64px;letter-spacing:.25px;padding:12px 36px;font-weight:700;cursor:pointer;text-align:center}@media screen and (max-width: 1200px){.right-container{display:none}.action-button:before{content:\"\";position:absolute;inset:-10px;background-color:#ffffff40;border-radius:inherit;filter:blur(10px);z-index:-1}.action-button:after{content:\"\";position:absolute;inset:-10px;box-shadow:0 0 -4px -4px #fff9;border-radius:inherit;z-index:-1}.karma-points-div{display:none}}.enroll-modal{max-width:600px!important;width:100%!important}.enroll-modal .mat-dialog-container{padding:0;border-radius:12px}.confirmation-modal{max-width:420px!important;width:100%!important}.confirmation-modal .mat-dialog-container{border-radius:12px;padding:0}.image-backdrop{background-color:#000!important;position:relative}.image-backdrop:after{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);content:\"\";display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-color:#000000a6;border-top-left-radius:12px;border-top-right-radius:12px}.text-scrol-custom{height:200px;overflow-y:auto}@media screen and (max-width: 1000px){.confirmation-modal,.enroll-modal{max-width:90vw!important}}.kpi-loader-div{width:18%}a.action-button{color:#fff!important;width:auto}.rate-button{color:#000000de!important;font-size:.875rem;font-weight:700;border:none!important}.rate-button .mat-button-wrapper{display:flex;gap:8px;align-items:center}.mobile-enroll-div{padding:16px;position:fixed;z-index:1000;bottom:0;width:calc(100% - 32px)}.mobile-enroll-div .action-button{min-width:320px;max-width:400px;margin:auto}@media screen and (min-width: 1201px){.mobile-enroll-div,.mob-share{display:none!important}.hideAbove1200{display:none}}.mobile-progress{padding:16px}@media screen and (min-width: 1200px){.mobile-progress{display:none}}.sourceEllipsis{white-space:break-spaces;position:relative;overflow:hidden;text-overflow:clip;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}.text-white{color:#fff!important}.custom-button,.fluid-width{width:100%}.toc-container{background:#fff;width:100%}mat-divider{border-top-color:#d9d9d9}.sticky{top:56px;overflow:hidden;z-index:10;width:100%}.statusMsg{border-radius:4px;height:40px}.toc-body{padding-bottom:1rem}.toc-body .toc-links{width:100%;z-index:1;border:none;background:transparent}.toc-body .toc-links .mat-tab-link{text-align:left;justify-content:flex-start}.toc-body .toc-links .mat-tab-link.justify-center{justify-content:center}.toc-body .toc-links .mat-tab-link.link-active{color:#0074b6!important}.tab:focus{outline:1px solid!important}.rounded-icon{background:#fff 0% 0% no-repeat padding-box;box-shadow:0 2px 4px #00000029;border:2px solid #00A9F4;border-radius:50%;min-width:0;opacity:1;height:35px;width:35px;padding:0;align-items:center;align-self:center;float:right}.rounded-icon mat-icon{color:#00a9f4}.blue-border{border:2px solid #0074b6!important}.hidden-xs-inline{display:inline}@media only screen and (max-width: 599px){.hidden-xs-inline{display:none}}.visible-xs-inline{display:none}@media only screen and (max-width: 599px){.visible-xs-inline{display:inline}}.meta-section{flex:1;min-width:1px}.meta-section .unit-meta-item{border-radius:2px;box-sizing:border-box;margin-bottom:16px;box-shadow:none;padding-left:0}@media only screen and (max-width: 599px){.meta-section{width:100%}}.font-bold-imp{font-weight:700!important}.info-section{width:20%;min-width:250px}.info-section .custom-button{background:#0074b6 0% 0% no-repeat padding-box!important;border-radius:4px}@media only screen and (max-width: 599px){.info-section{width:100%;margin-left:0!important}}.info-section .glance-container .at-glance-heading{letter-spacing:0px;color:#222}.info-section .glance-container .info-item .cs-icons .mat-icon{color:#666;vertical-align:middle;font-size:20px}.info-section .glance-container .info-item .cs-icons img{width:20px;height:20px;vertical-align:middle}.info-section .glance-container .info-item .item-heading{font:600 14px/21px Lato;margin:0 0 4px;letter-spacing:0px;color:#0074b6!important}.info-section .glance-container .info-item .item-value{letter-spacing:0px;color:#5f5f5f}.info-section .glance-container .info-item .item-icon{width:20px;height:20px;font-size:20px;margin-left:8px}.toc-discussion-container{display:flex;justify-content:space-between;flex-wrap:wrap-reverse}.toc-discussion-container .discussion{flex:1;min-width:1px}.toc-discussion-container .cohorts{width:100%;background:#fff 0% 0% no-repeat padding-box;border:1px solid #D9D9D9;border-radius:8px;box-shadow:none}@media only screen and (min-width: 600px) and (max-width: 959px){.toc-discussion-container .cohorts{margin-left:24px;min-width:250px}}@media only screen and (max-width: 599px){.toc-discussion-container .cohorts{margin-left:0;margin-bottom:24px;width:100%}}.mtb-xl{margin-top:3.5rem;margin-bottom:3.5rem}.detailBar{display:flex}.editDetails{margin:auto;display:flex}.white-bg{background:#fff!important;background-color:#fff!important}.contacts-container{padding:22px 0 10px;border:0;border-top:1px;border-style:solid;border-bottom:1px;border-color:#ececec}.contacts-container .contacts-head{letter-spacing:0px;color:#222;background:transparent;margin-bottom:24px}.contacts-container .author-card{min-width:291px;width:291px;display:flex;flex-direction:row;align-items:center;margin-bottom:30px;padding-right:10px}.contacts-container .author-card .right{padding:0 15px}.contacts-container .author-card .user-name{letter-spacing:0px;color:#5f5f5f}.contacts-container .author-card .user-university{letter-spacing:0px;color:#00a9f4}.contacts-container .author-card .user-button{background:#fff 0% 0% no-repeat padding-box;border:1px solid #F58634;border-radius:15px;letter-spacing:0px;color:#f58634;max-width:60px;padding:4px}.divider-transparent{border-top-color:transparent!important}.scroll-to-top{position:fixed;bottom:15px;right:15px;opacity:0;transition:all .2s ease-in-out;border-radius:50%}.scroll-to-top .icon{font-size:24px!important}.show-scroll{opacity:1;transition:all .2s ease-in-out}.sticky-breadcrumbs{position:sticky;z-index:999;top:72px;width:100%}.sticky-banner{position:sticky;z-index:999}.sticky-navs{position:sticky!important;background:#fff;z-index:999;top:auto}.actbutton{border:1px solid rgba(0,0,0,.16);border-radius:4px;padding:0 15px;width:100%;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.actbutton .mat-icon{margin-right:6px}.disable-start-btn{cursor:not-allowed!important;pointer-events:none!important;opacity:.5!important}.certificate-loader ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#fff}.cb-plan-wrap{opacity:1;color:#1b4ca1;font-family:Lato-Regular;font-size:12px;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:16px}.cb-plan-wrap .cb-danger{border-radius:2px;padding:4px 8px;border:1px solid #d13924;background-color:#d13924!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-success{padding:4px 8px;border-radius:2px;border:1px solid #1d8922;background-color:#1d8922!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-warning{padding:4px 8px;border-radius:2px;border:1px solid #ef951e;background-color:#ef951e!important;color:#fff!important;opacity:1}.bg-white{background-color:#fff}.provider-logo-div{border-radius:4px;box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.provider-logo-div img{display:flex;border-radius:4px;width:40px;height:40px;padding:4px}ul{padding:0!important}.kpi-values{min-width:64px;padding:8px;text-align:center}.kpi-values img{height:24px;width:24px}.position-bottom{position:fixed;width:88%;bottom:0;z-index:99}.no-certificate-found{border:1px solid #ccc;border-color:#f3962f;background-color:#fceedb;border-radius:12px}.no-certificate-found{min-height:56px}.no-certificate-found ::ng-deep ws-widget-sliders-dynamic .banner-data{font-size:16px!important;font-family:lato,sans-serif!important}.truncate-5{-webkit-line-clamp:1;text-overflow:ellipsis;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;word-wrap:break-word}.ext-info-slider{padding:8px}#commentsDiv{margin:1rem auto;min-height:500px}.knowledge-level-container{margin-right:auto}.level-badge{display:inline-flex;height:24px;padding:2px 8px;align-items:center;gap:4px;flex-shrink:0;border-radius:12px;font-weight:600;font-size:12px;line-height:16px;white-space:nowrap}.level-badge.beginner{border:1px solid #49C951;background:linear-gradient(0deg,#49c95133 0% 100%),#fff;color:#2f8132;border-radius:16px}.level-badge.intermediate{border:1px solid #1B4CA1;background:linear-gradient(0deg,#1b4ca133 0% 100%),#fff;color:#1b4ca1;border-radius:16px}.level-badge.advanced{border:1px solid #FF8268;background:linear-gradient(0deg,#ff826833 0% 100%),#fff;color:#ff4b25;border-radius:16px}.level-badge svg{flex-shrink:0}::ng-deep .consent-dialog-panel .mat-dialog-container{overflow:hidden;padding:0;margin:0;border-radius:8px}::ng-deep .consent-dialog-panel .mat-dialog-content{padding:0;margin:0;max-height:none;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatLegacyTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "component", type: i12.MatLegacyTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "directive", type: i12.MatLegacyTabContent, selector: "[matTabContent]" }, { kind: "component", type: i13.SkeletonLoaderComponent, selector: "ws-widget-skeleton-loader", inputs: ["bindingClass", "height", "width"] }, { kind: "component", type: i14.AppTocAboutComponent, selector: "ws-widget-app-toc-about", inputs: ["condition", "kparray", "content", "contentReadData", "baseContentReadData", "skeletonLoader", "sticky", "tocStructure", "pathSet", "config", "resumeData", "forPreview", "showReviews", "batchData", "fromViewer", "selectedBatchData", "selectedTabValue", "fromMarketPlace", "showMarketPlaceCertificate", "languageList", "lockCertificate"], outputs: ["trigerCompletionSurveyForm"] }, { kind: "component", type: i15.ShareTocComponent, selector: "ws-app-share-toc", inputs: ["rootOrgId", "content", "contentLink", "baseContentReadData"], outputs: ["resetEnableShare"] }, { kind: "component", type: i16.WidgetCommentComponent, selector: "d-v2-widget-comment", inputs: ["widgetData", "commentId"], outputs: ["commentDataChange"] }, { kind: "pipe", type: i10.JsonPipe, name: "json" }, { kind: "pipe", type: i10.DatePipe, name: "date" }, { kind: "pipe", type: i4.PipeDurationTransformPipe, name: "pipeDurationTransform" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
459
+ }
460
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocCiosHomeComponent, decorators: [{
461
+ type: Component,
462
+ args: [{ selector: 'ws-app-app-toc-cios-home', template: "<ng-container *ngIf=\"extContentAvailable\">\n <div class=\"toc-banner\">\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"banner-details toc-content\" #bannerDetails>\n <div class=\"flex flex-col gap-4\">\n <div class=\"flex items-center justify-between gap-4\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'140px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex flex-row gap-2\">\n <div class=\"flex flex-row tag-div rounded-2xl gap-1 items-center p-2\">\n <mat-icon class=\"ws-mat-orange-text\">video_library</mat-icon>\n <ng-container *ngIf=\"content?.courseCategory\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ translateLabel(content?.courseCategory, 'searchfilters') }}</div>\n </ng-container>\n <ng-container *ngIf=\"extContentReadData?.topic\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ 'External Course' }}</div>\n </ng-container>\n </div>\n </div> -->\n </ng-container>\n\n <div class=\"flex items-center text-white mob-share\">\n <mat-icon (click)=\"onClickOfShare()\">share</mat-icon>\n </div>\n </div>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- Knowledge level block -->\n <div *ngIf=\"extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel\"\n class=\"knowledge-level-container\">\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'beginner' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'beginner'\"\n class=\"level-badge beginner\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#DBF4DC\" />\n <path\n d=\"M7.42267 5C7.67927 4.55555 8.32077 4.55556 8.57737 5L12.0415 11C12.2981 11.4444 11.9773 12 11.4641 12H4.53592C4.02272 12 3.70197 11.4444 3.95857 11L7.42267 5Z\"\n fill=\"#49C951\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'intermediate' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'intermediate'\"\n class=\"level-badge intermediate\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#D1DBEC\" />\n <path\n d=\"M7.42267 2.66666C7.67927 2.22221 8.32077 2.22221 8.57737 2.66666L12.0415 8.66666C12.2981 9.1111 11.9773 9.66666 11.4641 9.66666H4.53592C4.02272 9.66666 3.70197 9.1111 3.95857 8.66666L7.42267 2.66666Z\"\n fill=\"#1B4CA1\" />\n <path\n d=\"M7.42267 5.66666C7.67927 5.22221 8.32077 5.22221 8.57737 5.66666L12.0415 11.6667C12.2981 12.1111 11.9773 12.6667 11.4641 12.6667H4.53592C4.02272 12.6667 3.70197 12.1111 3.95857 11.6667L7.42267 5.66666Z\"\n fill=\"#1B4CA1\" stroke=\"#D1DBEC\" stroke-width=\"0.5\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'advanced' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'advanced'\"\n class=\"level-badge advanced\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <g clip-path=\"url(#clip0)\">\n <rect width=\"16\" height=\"16\" fill=\"#FFE6E1\" />\n <path\n d=\"M7.42264 2.33334C7.67924 1.8889 8.32074 1.8889 8.57734 2.33334L12.0414 8.33334C12.298 8.77779 11.9773 9.33334 11.4641 9.33334H4.53589C4.02269 9.33334 3.70194 8.77779 3.95854 8.33334L7.42264 2.33334Z\"\n fill=\"#FF8268\" />\n <path\n d=\"M7.42264 5C7.67924 4.55555 8.32074 4.55556 8.57734 5L12.0414 11C12.298 11.4444 11.9773 12 11.4641 12H4.53589C4.02269 12 3.70194 11.4444 3.95854 11L7.42264 5Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n <path\n d=\"M7.42264 7.66669C7.67924 7.22224 8.32074 7.22224 8.57734 7.66669L12.0414 13.6667C12.298 14.1111 11.9773 14.6667 11.4641 14.6667H4.53589C4.02269 14.6667 3.70194 14.1111 3.95854 13.6667L7.42264 7.66669Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n </g>\n <defs>\n <clipPath id=\"clip0\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n </div>\n </ng-container>\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'90%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'70%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"banner-text text-base sm:text-4xl leading-6 sm:leading-10 font-bold\">{{\n handleCapitalize(extContentReadData?.name) }}</div>\n <div class=\"text-sm sm:text-base source-text font-semibold break-words\" #contentSource\n [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">\n <span *ngIf=\"extContentReadData?.courseProvider?.length;else contentPartnerName\">\n {{ formatcourseProviders(extContentReadData?.courseProvider) }}\n </span>\n <ng-template #contentPartnerName>\n {{extContentReadData?.contentPartner?.contentPartnerName }}\n </ng-template>\n </span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{\n 'common.karmayogiBharat' | translate }}</span>\n </div>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'120px'\" [height]=\"'40px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'88px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex gap-4 items-center\" *ngIf=\"content?.averageRating || content?.additionalTags?.length\">\n <div class=\"flex flex-row rating-chip py-2 items-center cursor-pointer\" (click)=\"handleNavigateToReviews()\" *ngIf=\"content?.averageRating\">\n <div class=\"flex flex-row gap-1 margin-left-s items-center\">\n <mat-icon>grade</mat-icon>\n <div class=\"text-white text-sm leading-4\">{{ content?.averageRating }}</div>\n </div>\n <div class=\"separator\"></div>\n <div class=\"text-white text-sm leading-4 margin-right-m\">{{ content?.totalRating | pipeCountTransform }}</div>\n </div>\n <div class=\"flex items-center\" *ngIf=\"content?.additionalTags?.length\">\n <div class=\"most-enrolled-chip text-xs leading-3\">\n <span *ngIf=\"content?.additionalTags?.includes('mostTrending')\">{{ 'cardcontentv2.mostTrending' | translate }}</span>\n <span *ngIf=\"content?.additionalTags?.includes('mostEnrolled')\">{{ 'cardcontentv2.mostEnrolled' | translate }}</span>\n </div>\n </div>\n </div> -->\n </ng-container>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'180px'\" [height]=\"'20px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader && extContentReadData?.lastUpdatedOn\">\n <div class=\"text-xs leading-4 source-text\">({{ 'apptoc.lastUpdatedOn' | translate }} {{\n extContentReadData?.lastUpdatedOn | date: 'MMM d, y' }})</div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"!forPreview\">\n\n <div *ngIf=\"isMobile\">\n <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length === 0\n && userExtCourseEnroll?.progress <= 100\">\n <div class=\"no-certificate-found mt-6 mb-4 mx-2\">\n <div>\n <span>Progress and certificates for {{ extContentReadData?.contentPartner?.contentPartnerName }}\n courses are visible only after you complete the course and pass the assessment.</span>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-col gap-4 p-5 border-bottom position-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n <ng-container *ngIf=\"(userExtCourseEnroll | json) === '{}' && !enrollValidationLoading && canEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && extContentReadData?.redirectUrl\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\" (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n <div>\n <div class=\"flex flex-col px-8 py-4 gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">{{ extContentReadData?.duration * 60 | pipeDurationTransform: 'hms' }}</div>\n </div>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"toc-content\" [ngClass]=\"isMobile ? '':'mt-8 mb-8'\">\n <mat-tab-group>\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col\" [ngClass]=\"isMobile ? '':'mt-5 mb-5'\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'80px'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <div class=\"flex flex-col gap-2 mt-4\">\n <ws-widget-skeleton-loader [width]=\"'80%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'95%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'65%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <ws-widget-app-toc-about [contentReadData]=\"extContentReadData\" [showReviews]=\"false\"\n [baseContentReadData]=\"extContentReadData\"\n [showMarketPlaceCertificate]=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0 && userExtCourseEnroll?.progress === 100\"\n [content]=\"extContentReadData\" [fromMarketPlace]=\"true\"\n [skeletonLoader]=\"skeletonLoader\">\n </ws-widget-app-toc-about>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n\n <ng-container *ngIf=\"config?.commentsTab\">\n <mat-tab label=\"{{ 'apptocsinglepage.comments' | translate }}\">\n <!-- <ng-template matTabContent> -->\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\" *ngIf=\"discussWidgetData\">\n <ng-container *ngIf=\"!commentId\">\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\n </ng-container>\n <ng-container *ngIf=\"commentId\">\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\n Back to all comments\n </div>\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\n [skeletonLoader]></d-v2-widget-comment>\n </ng-container>\n\n </div>\n <!-- </ng-template> -->\n </mat-tab>\n </ng-container>\n </mat-tab-group>\n\n </div>\n <div class=\"right-container\">\n <div class=\"right-content\" #rightContainer>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'384px'\" [height]=\"'224px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"flex flex-col image-div\"\n [ngStyle]=\"{\n 'background-image': 'url(' + extContentReadData?.appIcon + ')', 'background-repeat': 'no-repeat', 'background-size': 'cover'}\"\n [ngClass]=\"{'image-backdrop': scrolled}\">\n <div class=\"flex flex-col justify-between text-container\">\n <div class=\"flex items-center gap-4 justify-end\">\n <div (click)=\"onClickOfShare()\"\n class=\"flex flex-row items-center justify-end gap-2 share-tag\" *ngIf=\"!forPreview\">\n <mat-icon>share</mat-icon>\n <div>{{ 'apptocsinglepage.share' | translate }}</div>\n </div>\n </div>\n <div class=\"flex flex-col gap-1\" *ngIf=\"scrolled\">\n <div class=\"text-xl leading-6 text-white font-bold text-scrol-custom\">{{\n handleCapitalize(extContentReadData?.name) }}\n </div>\n <!-- <div class=\"text-sm source-text font-semibold break-words\" #contentSource [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">{{ extContentReadData?.contentPartner?.contentPartnerName }}</span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{ 'common.karmayogiBharat' | translate }}</span>\n </div> -->\n </div>\n </div>\n\n\n </div>\n\n\n </ng-container>\n\n <ng-container *ngIf=\"!forPreview\">\n <div class=\"flex flex-col gap-3 p-3 border-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n\n <ng-container\n *ngIf=\"(userExtCourseEnroll | json) === '{}' && !enrollValidationLoading && canEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'100%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded '\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && extContentReadData?.redirectUrl\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\"\n (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length === 0\n && userExtCourseEnroll?.progress <= 100 && widgetData && widgetData.sliderData?.length\">\n <div class=\"no-certificate-found\">\n <ws-widget-sliders-dynamic [widgetData]=\"widgetData\"></ws-widget-sliders-dynamic>\n </div>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n </ng-container>\n <div>\n <div class=\"flex flex-col kpi-values items-center gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">\n {{ extContentReadData?.duration | pipeDurationTransform: 'hms' }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n<div *ngIf=\"!extContentAvailable\">\n <div class=\"flex justify-center w-full\">\n <div class=\"margin-xl text-center\">\n <img src=\"/assets/common/error-pages/empty_search.svg\" wsUtilsImageResponsive alt=\"No results\"\n class=\"margin-top-l margin-bottom-s\">\n <h2 class=\"mat-h2\" i18n=\"search route no result\">{{'learnsearch.noResults' | translate}}</h2>\n </div>\n </div>\n\n</div>\n\n<ws-app-share-toc *ngIf=\"enableShare\" [contentLink]=\"contentLink\" [rootOrgId]=\"rootOrgId\" [content]=\"extContentReadData\"\n (resetEnableShare)=\"resetEnableShare($event)\"></ws-app-share-toc>", styles: [".source-text{color:#ffffffb3}.toc-banner{background:#3a83cf;background:linear-gradient(135deg,#3a83cf,#1b4ca1);width:100%}.toc-banner .fixed-width{padding:0 16px}.toc-banner .banner-details{padding:36px 0}.toc-banner .banner-details .due-tag{padding:4px;color:#fff;border-radius:4px}.toc-banner .banner-details .due-warning{background-color:#ff9800;border:1px solid #FF9800}.toc-banner .banner-details .due-overdue{background-color:#f44336;border:1px solid #F44336}.toc-banner .banner-details .due-success{background-color:#4caf50;border:1px solid #4CAF50}.toc-banner .banner-details .rating-chip{border:1px solid rgba(0,0,0,.6);border-radius:20px;background-color:#0009}.toc-banner .banner-details .rating-chip mat-icon{width:16px;height:16px;color:#ff9800;font-size:16px}.toc-banner .banner-details .rating-chip .separator{width:1px;height:20px;border-right:1px solid rgba(255,255,255,.16);margin:0 8px}.toc-banner .banner-details .banner-text{color:#fffffff2;word-wrap:break-word}.toc-banner .info-div{max-width:384px;width:100%}.toc-banner .most-enrolled-chip{background-color:#ffea9e;border:1px solid #FFEA9E;padding:4px;border-radius:2px}.text-info-div{padding:8px;background-color:#fff;border-radius:64px}.tag-div{border:1px solid #FF9800;background-color:#00000080}.tag-div mat-icon{font-size:12px;width:12px;height:12px}.fixed-width{max-width:1200px;display:block;margin:0 auto}.mat-subheading-1{margin-bottom:4px!important}.initial-circle{width:36px;height:36px;border-radius:50%;background:#1b2133;color:#fff;text-transform:uppercase}.toc-content{max-width:792px;width:100%}.right-container .image-div{height:220px;background-color:#ccc;border-top-left-radius:12px;border-top-right-radius:12px}.right-container .image-div img{max-width:384px;width:100%;height:220px;border-top-left-radius:12px;border-top-right-radius:12px;position:relative;top:-42px}.right-container .image-div .share-container{position:relative;z-index:2;top:20px;margin-right:20px}.right-container .image-div .share-tag{font-weight:700;background-color:#000;border:1px solid #FFF;border-radius:20px;padding:6px 16px;color:#fff;cursor:pointer}.right-container .tag-div mat-icon{width:16px;height:16px;font-size:16px}.right-container .share-tag mat-icon{width:20px;height:20px;font-size:20px}.right-container .text-container{position:relative;z-index:2;height:220px;padding:16px}.right-container .right-content{background-color:#fff;border-radius:12px;position:fixed;z-index:10;top:132px;width:384px;margin-bottom:2rem;box-shadow:0 2px 6px -1px #00000080,0 -4px 4px -2px #00000080}.right-container .border-bottom{border-bottom:1px solid rgba(0,0,0,.2)}.right-container .info-div{background-color:#fef7ed;border:none;border-radius:8px;padding:8px 12px;font-size:14px}.right-container .info-div .mat-icon{width:18px;height:18px;font-size:18px}.right-container .kpi-values{width:64px;padding:8px;text-align:center}.right-container .kpi-values .timer-icon{color:#000000de;height:20px}.batch-info{padding:16px;border-radius:4px;background-color:#1b4ca114;border:1px solid rgba(27,76,161,.08);text-align:center}.batch-info .batch-label{font-size:.75rem;color:#0009;line-height:1rem}.button{border-radius:64px;letter-spacing:.25px;padding:12px 36px;font-weight:700;cursor:pointer;text-align:center}@media screen and (max-width: 1200px){.right-container{display:none}.action-button:before{content:\"\";position:absolute;inset:-10px;background-color:#ffffff40;border-radius:inherit;filter:blur(10px);z-index:-1}.action-button:after{content:\"\";position:absolute;inset:-10px;box-shadow:0 0 -4px -4px #fff9;border-radius:inherit;z-index:-1}.karma-points-div{display:none}}.enroll-modal{max-width:600px!important;width:100%!important}.enroll-modal .mat-dialog-container{padding:0;border-radius:12px}.confirmation-modal{max-width:420px!important;width:100%!important}.confirmation-modal .mat-dialog-container{border-radius:12px;padding:0}.image-backdrop{background-color:#000!important;position:relative}.image-backdrop:after{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);content:\"\";display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-color:#000000a6;border-top-left-radius:12px;border-top-right-radius:12px}.text-scrol-custom{height:200px;overflow-y:auto}@media screen and (max-width: 1000px){.confirmation-modal,.enroll-modal{max-width:90vw!important}}.kpi-loader-div{width:18%}a.action-button{color:#fff!important;width:auto}.rate-button{color:#000000de!important;font-size:.875rem;font-weight:700;border:none!important}.rate-button .mat-button-wrapper{display:flex;gap:8px;align-items:center}.mobile-enroll-div{padding:16px;position:fixed;z-index:1000;bottom:0;width:calc(100% - 32px)}.mobile-enroll-div .action-button{min-width:320px;max-width:400px;margin:auto}@media screen and (min-width: 1201px){.mobile-enroll-div,.mob-share{display:none!important}.hideAbove1200{display:none}}.mobile-progress{padding:16px}@media screen and (min-width: 1200px){.mobile-progress{display:none}}.sourceEllipsis{white-space:break-spaces;position:relative;overflow:hidden;text-overflow:clip;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}.text-white{color:#fff!important}.custom-button,.fluid-width{width:100%}.toc-container{background:#fff;width:100%}mat-divider{border-top-color:#d9d9d9}.sticky{top:56px;overflow:hidden;z-index:10;width:100%}.statusMsg{border-radius:4px;height:40px}.toc-body{padding-bottom:1rem}.toc-body .toc-links{width:100%;z-index:1;border:none;background:transparent}.toc-body .toc-links .mat-tab-link{text-align:left;justify-content:flex-start}.toc-body .toc-links .mat-tab-link.justify-center{justify-content:center}.toc-body .toc-links .mat-tab-link.link-active{color:#0074b6!important}.tab:focus{outline:1px solid!important}.rounded-icon{background:#fff 0% 0% no-repeat padding-box;box-shadow:0 2px 4px #00000029;border:2px solid #00A9F4;border-radius:50%;min-width:0;opacity:1;height:35px;width:35px;padding:0;align-items:center;align-self:center;float:right}.rounded-icon mat-icon{color:#00a9f4}.blue-border{border:2px solid #0074b6!important}.hidden-xs-inline{display:inline}@media only screen and (max-width: 599px){.hidden-xs-inline{display:none}}.visible-xs-inline{display:none}@media only screen and (max-width: 599px){.visible-xs-inline{display:inline}}.meta-section{flex:1;min-width:1px}.meta-section .unit-meta-item{border-radius:2px;box-sizing:border-box;margin-bottom:16px;box-shadow:none;padding-left:0}@media only screen and (max-width: 599px){.meta-section{width:100%}}.font-bold-imp{font-weight:700!important}.info-section{width:20%;min-width:250px}.info-section .custom-button{background:#0074b6 0% 0% no-repeat padding-box!important;border-radius:4px}@media only screen and (max-width: 599px){.info-section{width:100%;margin-left:0!important}}.info-section .glance-container .at-glance-heading{letter-spacing:0px;color:#222}.info-section .glance-container .info-item .cs-icons .mat-icon{color:#666;vertical-align:middle;font-size:20px}.info-section .glance-container .info-item .cs-icons img{width:20px;height:20px;vertical-align:middle}.info-section .glance-container .info-item .item-heading{font:600 14px/21px Lato;margin:0 0 4px;letter-spacing:0px;color:#0074b6!important}.info-section .glance-container .info-item .item-value{letter-spacing:0px;color:#5f5f5f}.info-section .glance-container .info-item .item-icon{width:20px;height:20px;font-size:20px;margin-left:8px}.toc-discussion-container{display:flex;justify-content:space-between;flex-wrap:wrap-reverse}.toc-discussion-container .discussion{flex:1;min-width:1px}.toc-discussion-container .cohorts{width:100%;background:#fff 0% 0% no-repeat padding-box;border:1px solid #D9D9D9;border-radius:8px;box-shadow:none}@media only screen and (min-width: 600px) and (max-width: 959px){.toc-discussion-container .cohorts{margin-left:24px;min-width:250px}}@media only screen and (max-width: 599px){.toc-discussion-container .cohorts{margin-left:0;margin-bottom:24px;width:100%}}.mtb-xl{margin-top:3.5rem;margin-bottom:3.5rem}.detailBar{display:flex}.editDetails{margin:auto;display:flex}.white-bg{background:#fff!important;background-color:#fff!important}.contacts-container{padding:22px 0 10px;border:0;border-top:1px;border-style:solid;border-bottom:1px;border-color:#ececec}.contacts-container .contacts-head{letter-spacing:0px;color:#222;background:transparent;margin-bottom:24px}.contacts-container .author-card{min-width:291px;width:291px;display:flex;flex-direction:row;align-items:center;margin-bottom:30px;padding-right:10px}.contacts-container .author-card .right{padding:0 15px}.contacts-container .author-card .user-name{letter-spacing:0px;color:#5f5f5f}.contacts-container .author-card .user-university{letter-spacing:0px;color:#00a9f4}.contacts-container .author-card .user-button{background:#fff 0% 0% no-repeat padding-box;border:1px solid #F58634;border-radius:15px;letter-spacing:0px;color:#f58634;max-width:60px;padding:4px}.divider-transparent{border-top-color:transparent!important}.scroll-to-top{position:fixed;bottom:15px;right:15px;opacity:0;transition:all .2s ease-in-out;border-radius:50%}.scroll-to-top .icon{font-size:24px!important}.show-scroll{opacity:1;transition:all .2s ease-in-out}.sticky-breadcrumbs{position:sticky;z-index:999;top:72px;width:100%}.sticky-banner{position:sticky;z-index:999}.sticky-navs{position:sticky!important;background:#fff;z-index:999;top:auto}.actbutton{border:1px solid rgba(0,0,0,.16);border-radius:4px;padding:0 15px;width:100%;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.actbutton .mat-icon{margin-right:6px}.disable-start-btn{cursor:not-allowed!important;pointer-events:none!important;opacity:.5!important}.certificate-loader ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#fff}.cb-plan-wrap{opacity:1;color:#1b4ca1;font-family:Lato-Regular;font-size:12px;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:16px}.cb-plan-wrap .cb-danger{border-radius:2px;padding:4px 8px;border:1px solid #d13924;background-color:#d13924!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-success{padding:4px 8px;border-radius:2px;border:1px solid #1d8922;background-color:#1d8922!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-warning{padding:4px 8px;border-radius:2px;border:1px solid #ef951e;background-color:#ef951e!important;color:#fff!important;opacity:1}.bg-white{background-color:#fff}.provider-logo-div{border-radius:4px;box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.provider-logo-div img{display:flex;border-radius:4px;width:40px;height:40px;padding:4px}ul{padding:0!important}.kpi-values{min-width:64px;padding:8px;text-align:center}.kpi-values img{height:24px;width:24px}.position-bottom{position:fixed;width:88%;bottom:0;z-index:99}.no-certificate-found{border:1px solid #ccc;border-color:#f3962f;background-color:#fceedb;border-radius:12px}.no-certificate-found{min-height:56px}.no-certificate-found ::ng-deep ws-widget-sliders-dynamic .banner-data{font-size:16px!important;font-family:lato,sans-serif!important}.truncate-5{-webkit-line-clamp:1;text-overflow:ellipsis;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;word-wrap:break-word}.ext-info-slider{padding:8px}#commentsDiv{margin:1rem auto;min-height:500px}.knowledge-level-container{margin-right:auto}.level-badge{display:inline-flex;height:24px;padding:2px 8px;align-items:center;gap:4px;flex-shrink:0;border-radius:12px;font-weight:600;font-size:12px;line-height:16px;white-space:nowrap}.level-badge.beginner{border:1px solid #49C951;background:linear-gradient(0deg,#49c95133 0% 100%),#fff;color:#2f8132;border-radius:16px}.level-badge.intermediate{border:1px solid #1B4CA1;background:linear-gradient(0deg,#1b4ca133 0% 100%),#fff;color:#1b4ca1;border-radius:16px}.level-badge.advanced{border:1px solid #FF8268;background:linear-gradient(0deg,#ff826833 0% 100%),#fff;color:#ff4b25;border-radius:16px}.level-badge svg{flex-shrink:0}::ng-deep .consent-dialog-panel .mat-dialog-container{overflow:hidden;padding:0;margin:0;border-radius:8px}::ng-deep .consent-dialog-panel .mat-dialog-content{padding:0;margin:0;max-height:none;overflow:hidden}\n"] }]
463
+ }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.CommonMethodsService }, { type: i3.TranslateService }, { type: i4.ConfigurationsService }, { type: i4.EventService }, { type: i4.MultilingualTranslationsService }, { type: i4.WidgetContentService }, { type: i5.CertificateService }, { type: i6.LoaderService }, { type: i7.MatDialog }, { type: i8.MatLegacySnackBar }, { type: i9.NetCoreService }, { type: undefined, decorators: [{
464
+ type: Inject,
465
+ args: ['environment']
466
+ }, {
467
+ type: Optional
468
+ }] }]; }, propDecorators: { rcElement: [{
469
+ type: ViewChild,
470
+ args: ['rightContainer']
471
+ }], handleScroll: [{
472
+ type: HostListener,
473
+ args: ['window:scroll', ['$event']]
474
+ }] } });
475
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy1jaW9zLWhvbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXRvYy1jaW9zLWhvbWUvYXBwLXRvYy1jaW9zLWhvbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXRvYy1jaW9zLWhvbWUvYXBwLXRvYy1jaW9zLWhvbWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBVSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBSXZILE9BQU8sRUFBOEYsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFNM0ksT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUE7QUFFM0IsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9uRSxNQUFNLE9BQU8sdUJBQXVCO0lBMkJsQyxZQUFZO1FBRVYsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7YUFDdkQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUE7YUFDdEQ7U0FDRjtRQUVELDhDQUE4QztRQUM5QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsRUFBRTtZQUNsRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtTQUNyQjthQUFNO1lBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7U0FDdEI7SUFDSCxDQUFDO0lBQ0QsWUFBb0IsS0FBcUIsRUFDL0IsU0FBK0IsRUFDL0IsU0FBMkIsRUFDM0IsU0FBZ0MsRUFDaEMsTUFBb0IsRUFDcEIsZ0JBQWlELEVBQ2pELFVBQWdDLEVBQ2hDLE9BQTJCLEVBQzVCLE1BQXFCLEVBQ3BCLFNBQW9CLEVBQ3JCLFFBQXFCLEVBQ3JCLGNBQThCLEVBQ00sV0FBZ0I7UUFaekMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDL0IsY0FBUyxHQUFULFNBQVMsQ0FBc0I7UUFDL0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsY0FBUyxHQUFULFNBQVMsQ0FBdUI7UUFDaEMsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUNwQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlDO1FBQ2pELGVBQVUsR0FBVixVQUFVLENBQXNCO1FBQ2hDLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBQzVCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDcEIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNNLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBdkQ3RCxjQUFTLEdBQVksRUFBRSxDQUFBO1FBQ3ZCLG1CQUFjLEdBQUcsSUFBSSxDQUFBO1FBQ3JCLHVCQUFrQixHQUFRLEVBQUUsQ0FBQTtRQUM1Qix3QkFBbUIsR0FBUSxFQUFFLENBQUE7UUFDN0IsK0JBQTBCLEdBQUcsS0FBSyxDQUFBO1FBQ2xDLGVBQVUsR0FBUSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFDOUcsd0JBQW1CLEdBQUcsSUFBSSxDQUFBO1FBQzFCLGNBQVMsR0FBRyxLQUFLLENBQUE7UUFDakIsNEJBQXVCLEdBQUcsSUFBSSxDQUFBO1FBQzlCLFdBQU0sR0FBRztZQUNQLFNBQVMsRUFBRSxDQUFDO1lBQ1osU0FBUyxFQUFFLENBQUM7U0FDYixDQUFBO1FBQ0QsZ0JBQVcsR0FBUSxFQUFFLENBQUE7UUFJckIsYUFBUSxHQUFHLEtBQUssQ0FBQTtRQUdoQixnQkFBVyxHQUFHLEtBQUssQ0FBQTtRQUVuQixnQkFBVyxHQUFRLElBQUksQ0FBQTtRQW1DckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQTtZQUNwQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDbkYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtnQkFDdEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLEdBQUc7b0JBQzFDLElBQUksRUFBRSxFQUFFO2lCQUNULENBQUE7Z0JBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUE7YUFFNUI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQTtnQkFDaEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUE7YUFDNUI7WUFFRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU07Z0JBQ3JHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUMxRDtnQkFDQSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUE7Z0JBQzdELElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLG9CQUFvQixLQUFLLEdBQUcsRUFBRTtvQkFDekQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFBO29CQUUvQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7b0JBQ25CLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxZQUFZLENBQUMsQ0FBQTtpQkFDOUM7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQTthQUNyQztRQUVILENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFFLENBQUE7WUFDM0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1NBQ3JDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUM3RCxJQUFJLElBQUksRUFBRTtnQkFDUixJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRTtvQkFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFFLENBQUE7b0JBQzNELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtpQkFDckM7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRTtZQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQTtTQUN0RDtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUV0RixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUMzRyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsMkJBQTJCO1NBQzVCO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDL0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQTtZQUNwRCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQTtTQUM3QjtRQUNELElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7U0FDckI7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1NBQ3RCO1FBQ0QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUU7WUFDaEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUE7WUFDdEQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQTtnQkFDckcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUU7b0JBQzVILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUE7aUJBQ2hJO2FBQ0Y7WUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUE7WUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUE7WUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxrQkFBa0IsQ0FBQTtZQUNqRCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQTtZQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLDZCQUE2QixFQUFFLEVBQUUsQ0FBQyxDQUFBO1lBRWpHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFBO2dCQUM3QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQTthQUN2RjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQTtnQkFDOUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsNEJBQTRCLENBQUE7YUFDL0Y7WUFDRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1NBQ3ZEO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQVcsRUFBRSxJQUFhO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDbkQsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFhLEVBQUUsSUFBUztRQUN0QyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFBO1lBQzFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQTtTQUMvRDtJQUNILENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxXQUFnQjtRQUNoQyxNQUFNLFFBQVEsR0FBUSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQTtRQUNsRCxNQUFNLE1BQU0sR0FBVyxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3BGLE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUNELFdBQVcsQ0FBQyxHQUFRLEVBQUUsVUFBZTtRQUNuQyxPQUFPLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxTQUFnQjtRQUNwQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMzQyxPQUFPLEVBQUUsQ0FBQTtTQUNWO1FBQ0QsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ25FLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBWTtRQUNsQyxNQUFNLFVBQVUsR0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFBO1FBQ3pILE1BQU0sWUFBWSxHQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFBO1FBQ2pGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQzVELEtBQUssRUFBRSxPQUFPO1lBQ2QsTUFBTSxFQUFFLE1BQU07WUFDZCxTQUFTLEVBQUUsTUFBTTtZQUNqQixTQUFTLEVBQUUsT0FBTztZQUNsQixZQUFZLEVBQUUsSUFBSTtZQUNsQixXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUUsc0JBQXNCO1lBQ2xDLElBQUksRUFBRTtnQkFDSixVQUFVLEVBQUUsVUFBVTtnQkFDdEIsWUFBWSxFQUFFLFlBQVk7YUFDM0I7U0FDRixDQUFDLENBQUE7UUFFRixzQkFBc0I7UUFDdEIsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzNDLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtnQkFDbkIsd0NBQXdDO2dCQUN4QywyQkFBMkI7Z0JBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUE7YUFDN0I7aUJBQU07Z0JBQ0wsaUJBQWlCO2dCQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx1REFBdUQsRUFBRSxHQUFHLEVBQUU7b0JBQy9FLFFBQVEsRUFBRSxJQUFJO2lCQUNmLENBQUMsQ0FBQTthQUNIO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQVk7UUFDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNwQixNQUFNLE9BQU8sR0FBRztZQUNkLFNBQVMsRUFBRTtnQkFDVCxXQUFXLEVBQUUsT0FBTyxFQUFFLFNBQVM7Z0JBQy9CLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxTQUFTLElBQUksRUFBRTtnQkFDekQsc0JBQXNCLEVBQUU7b0JBQ3RCLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztvQkFDdkIsWUFBWSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFO29CQUNsQyxhQUFhLEVBQUUsbURBQW1EO2lCQUNuRTthQUNGO1NBQ0YsQ0FBQTtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQzFELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNyQyxDQUFDLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksMEJBQTBCLEVBQUUsR0FBRyxFQUFFO2dCQUMvRSxRQUFRLEVBQUUsSUFBSTthQUNmLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNPLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxPQUFZO1FBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNqQyxNQUFNLE9BQU8sR0FBRztZQUNkLFFBQVEsRUFBRSxPQUFPLENBQUMsU0FBUztZQUMzQixTQUFTLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1NBQ3JDLENBQUE7UUFDRCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNoSCxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0UsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUE7WUFDN0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUE7WUFDdEYsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUM1QyxJQUFJLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDLENBQUE7U0FDMUM7YUFBTTtZQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksaUNBQWlDLEVBQUUsR0FBRyxFQUFFO2dCQUMxRixRQUFRLEVBQUUsS0FBSzthQUNoQixDQUFDLENBQUE7U0FDSDtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9CLENBQUMsU0FBYztRQUN2QyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMseUJBQXlCLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDN0csSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFBO1lBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNsQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQTtZQUNyRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFBO1NBQzNEO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsb0NBQW9DLENBQUMsQ0FBQTtTQUN6RDtJQUNILENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxPQUFZO1FBQ25DLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO1FBQzlCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO1FBQ2xGLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFBO0lBQzlCLENBQUM7SUFFRCx1QkFBdUI7UUFDckIsTUFBTSxLQUFLLEdBQUc7WUFDWixTQUFTLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTO1lBQ3pDLGFBQWEsRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUk7WUFDNUMsSUFBSSxFQUFFLE1BQU07WUFDWixFQUFFLEVBQUUsRUFBRTtZQUNOLElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO2dCQUNuQixNQUFNLEVBQUUsRUFBRTtnQkFDVixLQUFLLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU07Z0JBQzNDLElBQUksRUFBRSxTQUFTO2dCQUNmLElBQUksRUFBRSxNQUFNO2FBQ2I7U0FDRixDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFbEMsQ0FBQztJQUVELDBCQUEwQixDQUFDLFNBQWMsRUFBRSxPQUFZLEVBQUUsRUFBTztRQUM5RCxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUNoQztZQUNFLElBQUksRUFBRSxPQUFPO1lBQ2IsT0FBTztZQUNQLEVBQUUsRUFBRSxFQUFFO1NBQ1AsRUFDRDtZQUNFLEVBQUUsRUFBRSxTQUFTO1lBQ2IsSUFBSSxFQUFFLGtCQUFrQjtTQUN6QixFQUNEO1lBQ0UsTUFBTSxFQUFFLE1BQU07U0FDZixDQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE1BQU0sS0FBSyxHQUFHO1lBQ1osU0FBUyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsU0FBUztZQUN6QyxhQUFhLEVBQUUsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJO1lBQzVDLElBQUksRUFBRSxNQUFNO1lBQ1osRUFBRSxFQUFFLEVBQUU7WUFDTixJQUFJLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtnQkFDbkIsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsS0FBSyxFQUFFLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRO2dCQUM3QyxJQUFJLEVBQUUsU0FBUztnQkFDZixJQUFJLEVBQUUsTUFBTTthQUNiO1NBQ0YsQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWTtRQUNoQixJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFBO1FBQ3RDLE1BQU0sT0FBTyxHQUFRLE1BQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQ2xJLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckQsSUFBSSxDQUFDLDBCQUEwQixHQUFHLEtBQUssQ0FBQTtZQUN2QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsTUFBTTttQkFDbEcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNwRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsR0FBRztvQkFDMUMsSUFBSSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7b0JBQ3JELFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVE7b0JBQ2pDLE1BQU0sRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVTtpQkFDbkUsQ0FBQTthQUNGO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQywwQkFBMEIsR0FBRyxLQUFLLENBQUE7U0FDeEM7SUFDSCxDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO1FBQ3ZCLDZDQUE2QztJQUMvQyxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLHlDQUF5QztJQUN6QyxpRUFBaUU7SUFDakUsMkNBQTJDO0lBQzNDLFNBQVM7SUFDVCx3QkFBd0I7SUFDeEIsa0JBQWtCO0lBQ2xCLDBEQUEwRDtJQUMxRCxVQUFVO0lBQ1YsU0FBUztJQUNULDBEQUEwRDtJQUMxRCxpRUFBaUU7SUFDakUsVUFBVTtJQUNWLFNBQVM7SUFDVCxzQ0FBc0M7SUFDdEMsd0RBQXdEO0lBQ3hELFNBQVM7SUFDVCxTQUFTO0lBQ1QsSUFBSTtJQUVKLGdCQUFnQixDQUFDLFVBQWU7UUFFOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUE7SUFDMUIsQ0FBQztJQUVELDBCQUEwQixDQUFDLFNBQWM7UUFDdkMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBRSxVQUFVO2VBQ3hGLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxVQUFVO2VBQ2pFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxVQUFVO2VBQy9ELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVTtlQUM1RSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVO1VBQ3hGO1lBQ0EsSUFBSSxPQUFPLEdBQVEsRUFBRSxDQUFBO1lBQ3JCLDRHQUE0RztZQUM1Ryx1RkFBdUY7WUFDdkYsSUFBSTtZQUNKLGtDQUFrQztZQUNsQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFO2dCQUMzRCxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQTthQUN2RDtZQUNELDBFQUEwRTtZQUMxRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxpQkFBaUIsQ0FBQTtZQUMvQyxJQUFJO1lBQ0osSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRTtnQkFDakUsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUE7YUFDM0Q7WUFDRCxnRUFBZ0U7WUFDaEUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFBO1lBQzdDLElBQUk7WUFDSixJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFO2dCQUM5RCxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQTthQUMzRDtZQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7Z0JBQy9ELE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUM5SjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUE7YUFDaEM7WUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUM5RDtnQkFDQSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFBO2dCQUM3RCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFBO2FBQzlEO1lBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRTtnQkFDdEUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQTthQUNwRTtZQUNELHFEQUFxRDtZQUNyRCxPQUFPLENBQUMsdUJBQXVCLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7WUFDOUYsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO1lBQzlGLElBQUk7WUFDSixJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFO2dCQUM3RCxPQUFPLENBQUMsdUJBQXVCLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFBO2FBQ2xFO2lCQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjO2dCQUMxRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUN6RDtnQkFDQSxPQUFPLENBQUMsdUJBQXVCLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFBO2FBQzdGO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLGtCQUFrQixDQUFBO2FBQ3REO1lBQ0QsSUFBSSxTQUFTLEtBQUssTUFBTSxFQUFFO2dCQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLDRCQUE0QixDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7YUFDdkk7aUJBQU0sSUFBSSxTQUFTLEtBQUssUUFBUSxFQUFFO2dCQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLDRCQUE0QixDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTthQUM1STtpQkFBTSxJQUFJLFNBQVMsS0FBSyxZQUFZLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsNEJBQTRCLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO2FBQzdJO1NBRUY7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLENBQU07UUFDbEIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNiLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFBO1FBQzVCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUNqQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFFakMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ2pFLElBQUksUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUNyRSxJQUFJLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDakUsT0FBTyxRQUFRLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQTtJQUN2QyxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ2pFLE9BQU8sa0JBQWtCLENBQUMsU0FBUyxDQUFBO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFBO0lBQ3JCLENBQUM7SUFFTyw2QkFBNkI7UUFDbkMseUVBQXlFO1FBQ3pFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUU7WUFDN00sSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQTtZQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQ2hJLENBQUMsU0FBYyxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUE7Z0JBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO1lBQ3ZCLENBQUMsRUFDRCxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSwyQ0FBMkMsRUFBRSxHQUFHLEVBQUU7b0JBQ2hHLFFBQVEsRUFBRSxLQUFLO2lCQUNoQixDQUFDLENBQUE7Z0JBQ0YsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQTtnQkFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUE7WUFDeEIsQ0FBQyxDQUNGLENBQUE7U0FDRjtJQUNILENBQUM7K0dBM2RVLHVCQUF1QiwrWkF3RHhCLGFBQWE7bUdBeERaLHVCQUF1QiwrT0NuQnBDLDhzMUJBMFhxRTs7NEZEdld4RCx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UsMEJBQTBCOzswQkE0RGpDLE1BQU07MkJBQUMsYUFBYTs7MEJBQUcsUUFBUTs0Q0F6Q0wsU0FBUztzQkFBckMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBWTNCLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBPbkluaXQsIE9wdGlvbmFsLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbmltcG9ydCB7IENvbW1vbk1ldGhvZHNTZXJ2aWNlIH0gZnJvbSAnQHN1bmJpcmQtY2IvY29uc3VtcHRpb24nXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UsIEV2ZW50U2VydmljZSwgTXVsdGlsaW5ndWFsVHJhbnNsYXRpb25zU2VydmljZSwgV2lkZ2V0Q29udGVudFNlcnZpY2UsIFdzRXZlbnRzIH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInXG5pbXBvcnQgeyBMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9hZGVyLnNlcnZpY2UnXG5pbXBvcnQgeyBNYXRMZWdhY3lTbmFja0JhciBhcyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1zbmFjay1iYXInXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnXG5pbXBvcnQgeyBDZXJ0aWZpY2F0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jZXJ0aWZpY2F0ZS5zZXJ2aWNlJ1xuaW1wb3J0IHsgTnNEaXNjdXNzaW9uVjIgfSBmcm9tICdAc3VuYmlyZC1jYi9kaXNjdXNzaW9uLXYyJ1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBOZXRDb3JlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25ldGNvcmUuc2VydmljZSdcbmltcG9ydCB7IENvbnNlbnREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbnNlbnQtZGlhbG9nLmNvbXBvbmVudCdcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd3MtYXBwLWFwcC10b2MtY2lvcy1ob21lJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcC10b2MtY2lvcy1ob21lLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBwLXRvYy1jaW9zLWhvbWUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQXBwVG9jQ2lvc0hvbWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBjb21tZW50SWQ/OiBzdHJpbmcgPSAnJ1xuICBza2VsZXRvbkxvYWRlciA9IHRydWVcbiAgZXh0Q29udGVudFJlYWREYXRhOiBhbnkgPSB7fVxuICB1c2VyRXh0Q291cnNlRW5yb2xsOiBhbnkgPSB7fVxuICBkb3dubG9hZENlcnRpZmljYXRlTG9hZGluZyA9IGZhbHNlXG4gIGZvclByZXZpZXc6IGFueSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvcHVibGljLycpIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCc/ZWRpdE1vZGU9dHJ1ZScpXG4gIGV4dENvbnRlbnRBdmFpbGFibGUgPSB0cnVlXG4gIGNhbkVucm9sbCA9IGZhbHNlXG4gIGVucm9sbFZhbGlkYXRpb25Mb2FkaW5nID0gdHJ1ZVxuICByY0VsZW0gPSB7XG4gICAgb2ZmU2V0VG9wOiAwLFxuICAgIEJvdHRvbVBvczogMCxcbiAgfVxuICBjb250ZW50TGluazogYW55ID0gJydcbiAgQFZpZXdDaGlsZCgncmlnaHRDb250YWluZXInKSByY0VsZW1lbnQhOiBFbGVtZW50UmVmXG4gIHNjcm9sbExpbWl0OiBhbnlcbiAgc2Nyb2xsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgaXNNb2JpbGUgPSBmYWxzZVxuICBjb25maWc6IGFueVxuICB3aWRnZXREYXRhOiBhbnlcbiAgZW5hYmxlU2hhcmUgPSBmYWxzZVxuICByb290T3JnSWQ6IGFueVxuICBjdXJyZW50TGFuZzogYW55ID0gJ2VuJ1xuICBkaXNjdXNzV2lkZ2V0RGF0YSE6IE5zRGlzY3Vzc2lvblYyLklDb21tZW50V2lkZ2V0RGF0YVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnLCBbJyRldmVudCddKVxuICBoYW5kbGVTY3JvbGwoKSB7XG5cbiAgICBpZiAodGhpcy5zY3JvbGxMaW1pdCkge1xuICAgICAgaWYgKCh3aW5kb3cuc2Nyb2xsWSArIHRoaXMucmNFbGVtLkJvdHRvbVBvcykgPj0gdGhpcy5zY3JvbGxMaW1pdCkge1xuICAgICAgICB0aGlzLnJjRWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ3N0aWNreSdcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMjM2Li4uIChPZmZzZXRUb3Agb2YgcmlnaHQgY29udGFpbmVyICsgMTA0KVxuICAgIGlmICh3aW5kb3cuc2Nyb2xsWSA+ICh0aGlzLnJjRWxlbS5vZmZTZXRUb3AgKyAxMDQpKSB7XG4gICAgICB0aGlzLnNjcm9sbGVkID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNjcm9sbGVkID0gZmFsc2VcbiAgICB9XG4gIH1cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBjb21tb25TdmM6IENvbW1vbk1ldGhvZHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU3ZjOiBDb25maWd1cmF0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBldmVudHM6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGxhbmd0cmFuc2xhdGlvbnM6IE11bHRpbGluZ3VhbFRyYW5zbGF0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250ZW50U3ZjOiBXaWRnZXRDb250ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNlcnRTdmM6IENlcnRpZmljYXRlU2VydmljZSxcbiAgICBwdWJsaWMgbG9hZGVyOiBMb2FkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWF0RGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHVibGljIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwdWJsaWMgbmV0Q29yZVNlcnZpY2U6IE5ldENvcmVTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgQE9wdGlvbmFsKCkgcHJpdmF0ZSBlbnZpcm9ubWVudDogYW55XG4gICkge1xuICAgIHRoaXMucm91dGUuZGF0YS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgdGhpcy5lbnJvbGxWYWxpZGF0aW9uTG9hZGluZyA9IGZhbHNlXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhLmV4dENvbnRlbnQgJiYgZGF0YS5leHRDb250ZW50LmRhdGEgJiYgZGF0YS5leHRDb250ZW50LmRhdGEuY29udGVudCkge1xuICAgICAgICB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSA9IGRhdGEuZXh0Q29udGVudC5kYXRhLmNvbnRlbnRcbiAgICAgICAgdGhpcy5leHRDb250ZW50UmVhZERhdGFbJ2NlcnRpZmljYXRlT2JqJ10gPSB7XG4gICAgICAgICAgZGF0YToge30sXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5za2VsZXRvbkxvYWRlciA9IGZhbHNlXG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZXh0Q29udGVudEF2YWlsYWJsZSA9IGZhbHNlXG4gICAgICAgIHRoaXMuc2tlbGV0b25Mb2FkZXIgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhLnVzZXJFbnJvbGxDb250ZW50ICYmIGRhdGEudXNlckVucm9sbENvbnRlbnQuZGF0YSAmJiBkYXRhLnVzZXJFbnJvbGxDb250ZW50LmRhdGEucmVzdWx0ICYmXG4gICAgICAgIE9iamVjdC5rZXlzKGRhdGEudXNlckVucm9sbENvbnRlbnQuZGF0YS5yZXN1bHQpLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICB0aGlzLnVzZXJFeHRDb3Vyc2VFbnJvbGwgPSBkYXRhLnVzZXJFbnJvbGxDb250ZW50LmRhdGEucmVzdWx0XG4gICAgICAgIGlmICh0aGlzLnVzZXJFeHRDb3Vyc2VFbnJvbGwuY29tcGxldGlvbnBlcmNlbnRhZ2UgPT09IDEwMCkge1xuICAgICAgICAgIHRoaXMuZXh0Q29udGVudFJlYWREYXRhWydjb21wbGV0aW9uU3RhdHVzJ10gPSAyXG5cbiAgICAgICAgICB0aGlzLmRvd25sb2FkQ2VydCgpXG4gICAgICAgICAgdGhpcy5jb250ZW50Vmlld0V2ZW50Rm9yTmV0Q29yZSgnY29tcGxldGlvbicpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVFbnJvbGxtZW50RWxpZ2liaWxpdHkoKVxuICAgICAgfVxuXG4gICAgfSlcblxuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2Vic2l0ZUxhbmd1YWdlJykpIHtcbiAgICAgIHRoaXMudHJhbnNsYXRlLnNldERlZmF1bHRMYW5nKCdlbicpXG4gICAgICB0aGlzLmN1cnJlbnRMYW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpIVxuICAgICAgdGhpcy50cmFuc2xhdGUudXNlKHRoaXMuY3VycmVudExhbmcpXG4gICAgfVxuICAgIHRoaXMuY29uZmlnU3ZjLmxhbmd1YWdlVHJhbnNsYXRpb25GbGFnLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50TGFuZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSFcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS51c2UodGhpcy5jdXJyZW50TGFuZylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpZiAodGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUpIHtcbiAgICAgIHRoaXMucm9vdE9yZ0lkID0gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUucm9vdE9yZ0lkXG4gICAgfVxuICAgIHRoaXMuY29udGVudExpbmsgPSBgJHt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpfSR7d2luZG93LmxvY2F0aW9uLnNlYXJjaH1gXG5cbiAgICB0aGlzLmNvbW1lbnRJZCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuY29tbWVudElkID8gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5jb21tZW50SWQgOiAnJ1xuICAgIGlmICh0aGlzLmNvbW1lbnRJZCkge1xuICAgICAgLy90aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAyXG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5wYWdlRGF0YSAmJiB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEucGFnZURhdGEuZGF0YSkge1xuICAgICAgdGhpcy5jb25maWcgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEucGFnZURhdGEuZGF0YVxuICAgICAgdGhpcy5pbml0aWFsaXplRGlzY3Vzc0RhdGEoKVxuICAgIH1cbiAgICBpZiAod2luZG93LmlubmVyV2lkdGggPD0gMTIwMCkge1xuICAgICAgdGhpcy5pc01vYmlsZSA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc01vYmlsZSA9IGZhbHNlXG4gICAgfVxuICAgIHRoaXMuY29udGVudFZpZXdFdmVudEZvck5ldENvcmUoJ3ZpZXcnKVxuICB9XG5cbiAgaW5pdGlhbGl6ZURpc2N1c3NEYXRhKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5kaXNjdXNzV2lkZ2V0RGF0YSkge1xuICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YSA9IHRoaXMuY29uZmlnLmRpc2N1c3NXaWRnZXREYXRhXG4gICAgICBpZiAodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudElkKSB7XG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uY29tbWVudFRyZWVEYXRhLmVudGl0eUlkID0gdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudElkXG4gICAgICAgIGlmICh0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmNvbW1lbnRzTGlzdC5yZXBsaWVzU2VjdGlvbiAmJiB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmNvbW1lbnRzTGlzdC5yZXBsaWVzU2VjdGlvbi5uZXdDb21tZW50UmVwbHkpIHtcbiAgICAgICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmNvbW1lbnRzTGlzdC5yZXBsaWVzU2VjdGlvbi5uZXdDb21tZW50UmVwbHkuY29tbWVudFRyZWVEYXRhLmVudGl0eUlkID0gdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudElkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMud2lkZ2V0RGF0YSA9IHRoaXMuY29uZmlnXG4gICAgICB0aGlzLndpZGdldERhdGFbJ3R5cGUnXSA9ICd0aXBzJ1xuICAgICAgdGhpcy53aWRnZXREYXRhWydjYXJkQ2xhc3MnXSA9ICdzbGlkZXItY29udGFpbmVyJ1xuICAgICAgdGhpcy53aWRnZXREYXRhWydoZWlnaHQnXSA9ICdhdXRvJ1xuICAgICAgdGhpcy53aWRnZXREYXRhWydzbGlkZXJEYXRhJ10gPSBfLmdldCh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSwgJ2NvbnRlbnRQYXJ0bmVyLnByb3ZpZGVyVGlwcycsIFtdKVxuXG4gICAgICBpZiAoT2JqZWN0LmtleXModGhpcy51c2VyRXh0Q291cnNlRW5yb2xsKS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5lbnJvbGxlZENvbnRlbnQgPSB0cnVlXG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uY29tbWVudEJveC5wbGFjZWhvbGRlciA9ICdTdGFydCBhIGRpc2N1c3Npb24nXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmVucm9sbGVkQ29udGVudCA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uY29tbWVudEJveC5wbGFjZWhvbGRlciA9ICdFbnJvbCB0byBhZGQgeW91ciBjb21tZW50cydcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEgPSB7IC4uLnRoaXMuZGlzY3Vzc1dpZGdldERhdGEgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNhcGl0YWxpemUoc3RyOiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblN2Yy5oYW5kbGVDYXBpdGFsaXplKHN0ciwgdHlwZSlcbiAgfVxuXG4gIHRyYW5zbGF0ZUxhYmVscyhsYWJlbDogc3RyaW5nLCB0eXBlOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndHJhbnNsYXRpb25zLnRyYW5zbGF0ZUxhYmVsKGxhYmVsLCB0eXBlLCAnJylcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5yY0VsZW1lbnQpIHtcbiAgICAgIHRoaXMucmNFbGVtLkJvdHRvbVBvcyA9IHRoaXMucmNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wICsgdGhpcy5yY0VsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHRcbiAgICAgIHRoaXMucmNFbGVtLm9mZlNldFRvcCA9IHRoaXMucmNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wXG4gICAgfVxuICB9XG4gIHJlZGlyZWN0VG9Db250ZW50KGNvbnRlbnREYXRhOiBhbnkpIHtcbiAgICBjb25zdCB1c2VyRGF0YTogYW55ID0gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGVWMlxuICAgIGNvbnN0IGV4dFVybDogc3RyaW5nID0gY29udGVudERhdGEucmVkaXJlY3RVcmwucmVwbGFjZSgnPHVzZXJuYW1lPicsIHVzZXJEYXRhLmVtYWlsKVxuICAgIHJldHVybiBleHRVcmxcbiAgfVxuICByZXBsYWNlVGV4dChzdHI6IGFueSwgcmVwbGFjZVR4dDogYW55KSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlQWxsKHJlcGxhY2VUeHQsICcnKVxuICB9XG5cbiAgZm9ybWF0Y291cnNlUHJvdmlkZXJzKHByb3ZpZGVyczogYW55W10pOiBzdHJpbmcge1xuICAgIGlmICghcHJvdmlkZXJzIHx8ICFBcnJheS5pc0FycmF5KHByb3ZpZGVycykpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICByZXR1cm4gcHJvdmlkZXJzLm1hcCgocHJvdmlkZXI6IGFueSkgPT4gcHJvdmlkZXIubmFtZSkuam9pbignLCAnKVxuICB9XG5cbiAgYXN5bmMgZW5Sb2xsVG9FeHRDb3Vyc2UoY29udGVudDogYW55KSB7XG4gICAgY29uc3QgY29uc2VudFVybDogc3RyaW5nID0gYCR7dGhpcy5lbnZpcm9ubWVudD8ubWlzc2lvbkthcm1heW9naVBhdGh9JHt0aGlzLmNvbmZpZz8uY29udGVudENvbnNlbnQ/LmNvbnNlbnREb2NVcmx9YCB8fCAnJ1xuICAgIGNvbnN0IGFzc2V0c0RvY1VybDogc3RyaW5nID0gYCR7dGhpcy5jb25maWc/LmNvbnRlbnRDb25zZW50Py5hc3NldHNEb2NVcmx9YCB8fCAnJ1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMubWF0RGlhbG9nLm9wZW4oQ29uc2VudERpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc5MDBweCcsXG4gICAgICBoZWlnaHQ6ICc3MHZoJyxcbiAgICAgIG1heEhlaWdodDogJzkwdmgnLFxuICAgICAgbWluSGVpZ2h0OiAnNDAwcHgnLFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICBwYW5lbENsYXNzOiAnY29uc2VudC1kaWFsb2ctcGFuZWwnLFxuICAgICAgZGF0YToge1xuICAgICAgICBjb25zZW50VXJsOiBjb25zZW50VXJsLFxuICAgICAgICBhc3NldHNEb2NVcmw6IGFzc2V0c0RvY1VybFxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBIYW5kbGUgZGlhbG9nIGNsb3NlXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgLy8gVXNlciBhZ3JlZWQgLSBwcm9jZWVkIHdpdGggZW5yb2xsbWVudFxuICAgICAgICAvLyBuZWVkIHRvIGNhbGwgY29uc2VudCBhcGlcbiAgICAgICAgdGhpcy5jYWxsQ29uc2VudEFwaShjb250ZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXNlciBkaXNhZ3JlZWRcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdZb3UgbXVzdCBhZ3JlZSB0byB0aGUgdGVybXMgdG8gZW5yb2xsIGluIHRoaXMgY291cnNlLicsICdYJywge1xuICAgICAgICAgIGR1cmF0aW9uOiA1MDAwLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjYWxsQ29uc2VudEFwaShjb250ZW50OiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZyhjb250ZW50KVxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBcInJlcXVlc3RcIjoge1xuICAgICAgICBcImNvbnRlbnRJZFwiOiBjb250ZW50Py5jb250ZW50SWQsXG4gICAgICAgIFwiY29uc2VudElkXCI6IHRoaXMuY29uZmlnPy5jb250ZW50Q29uc2VudD8uY29uc2VudElkIHx8ICcnLFxuICAgICAgICBcImFkZGl0aW9uYWxBdHRyaWJ1dGVzXCI6IHtcbiAgICAgICAgICBcInVzZXJSb2xlc1wiOiBbXCJwdWJsaWNcIl0sXG4gICAgICAgICAgXCJ2ZXJzaW9uS2V5XCI6IG5ldyBEYXRlKCkuZ2V0VGltZSgpLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJIGhhdmUgcmVhZCBhbmQgYWdyZWUgd2l0aCB0aGUgYWJvdmUgZGVjbGFyYXRpb24uXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY2VydFN2Yy5jb25zZW50U3VibWl0KHJlcXVlc3QpLnN1YnNjcmliZSgoX3JlczogYW55KSA9PiB7XG4gICAgICB0aGlzLnByb2NlZWRXaXRoRW5yb2xsbWVudChjb250ZW50KVxuICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZXJyb3I/LmVycm9yPy5wYXJhbXM/Lm1zZyB8fCAnVW5hYmxlIHRvIHN1Ym1pdCBjb25zZW50JywgJ1gnLCB7XG4gICAgICAgIGR1cmF0aW9uOiA1MDAwLFxuICAgICAgfSlcbiAgICB9KVxuICB9XG4gIHByaXZhdGUgYXN5bmMgcHJvY2VlZFdpdGhFbnJvbGxtZW50KGNvbnRlbnQ6IGFueSkge1xuICAgIHRoaXMubG9hZGVyLmNoYW5nZUxvYWQubmV4dCh0cnVlKVxuICAgIGNvbnN0IHJlcWJvZHkgPSB7XG4gICAgICBjb3Vyc2VJZDogY29udGVudC5jb250ZW50SWQsXG4gICAgICBwYXJ0bmVySWQ6IGNvbnRlbnQuY29udGVudFBhcnRuZXIuaWQsXG4gICAgfVxuICAgIGNvbnN0IGVucm9sbFJlcyA9IGF3YWl0IHRoaXMuY29udGVudFN2Yy5leHRDb250ZW50RW5yb2xsKHJlcWJvZHkpLnRvUHJvbWlzZSgpLmNhdGNoKF9lcnJvciA9PiB7IHJldHVybiBfZXJyb3IgfSlcbiAgICBpZiAoZW5yb2xsUmVzICYmIGVucm9sbFJlcy5yZXN1bHQgJiYgT2JqZWN0LmtleXMoZW5yb2xsUmVzLnJlc3VsdCkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5lbnJvbGxlZENvbnRlbnQgPSB0cnVlXG4gICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLm5ld0NvbW1lbnRTZWN0aW9uLmNvbW1lbnRCb3gucGxhY2Vob2xkZXIgPSAnU3RhcnQgYSBkaXNjdXNzaW9uJ1xuICAgICAgdGhpcy5nZXRVc2VyQ29udGVudEVucm9sbChjb250ZW50LmNvbnRlbnRJZClcbiAgICAgIHRoaXMuY29udGVudFZpZXdFdmVudEZvck5ldENvcmUoJ2Vucm9sbCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9hZGVyLmNoYW5nZUxvYWQubmV4dChmYWxzZSlcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlbnJvbGxSZXM/LmVycm9yPy5wYXJhbXM/Lm1zZyB8fCAnVW5hYmxlIHRvIGVucm9sbCB0byB0aGUgY29udGVudCcsICdYJywge1xuICAgICAgICBkdXJhdGlvbjogMTAwMDAsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFVzZXJDb250ZW50RW5yb2xsKGNvbnRlbnRJZDogYW55KSB7XG4gICAgY29uc3QgZW5yb2xsUmVzID0gYXdhaXQgdGhpcy5jb250ZW50U3ZjLmZldGNoRXh0VXNlckNvbnRlbnRFbnJvbGwoY29udGVudElkKS50b1Byb21pc2UoKS5jYXRjaChfZXJyb3IgPT4geyB9KVxuICAgIGlmIChlbnJvbGxSZXMgJiYgZW5yb2xsUmVzLnJlc3VsdCAmJiBPYmplY3Qua2V5cyhlbnJvbGxSZXMucmVzdWx0KS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnVzZXJFeHRDb3Vyc2VFbnJvbGwgPSBlbnJvbGxSZXMucmVzdWx0XG4gICAgICB0aGlzLmxvYWRlci5jaGFuZ2VMb2FkLm5leHQoZmFsc2UpXG4gICAgICB0aGlzLnRlbGVtZXRyeVRvQ2FwdHVyZUludGVyYWN0KGNvbnRlbnRJZCwgJ2Vucm9sbCcsICdlbnJvbC1jb250ZW50JylcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignU3VjY2Vzc2Z1bGx5IGVucm9sbGVkIGluIHRoZSBjb3Vyc2UuJylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2FkZXIuY2hhbmdlTG9hZC5uZXh0KGZhbHNlKVxuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdVbmFibGUgdG8gZ2V0IHRoZSBlbnJvbGxlZCBkZXRhaWxzJylcbiAgICB9XG4gIH1cblxuICBjYXB0dXJlUmVkaXJlY3RUZWxlbWV0cnkoY29udGVudDogYW55KSB7XG4gICAgdGhpcy5yYWlzZVRlbGVtdHJ5U3RhcnRFdmVudCgpXG4gICAgdGhpcy50ZWxlbWV0cnlUb0NhcHR1cmVJbnRlcmFjdChjb250ZW50LmNvbnRlbnRJZCwgJ3JlZGlyZWN0JywgJ3JlZGlyZWN0LWNvbnRlbnQnKVxuICAgIHRoaXMucmFpc2VUZWxlbXRyeUVuZEV2ZW50KClcbiAgfVxuXG4gIHJhaXNlVGVsZW10cnlTdGFydEV2ZW50KCkge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcbiAgICAgIGZyb206ICd0ZXN0JyxcbiAgICAgIHRvOiAnJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJycgfSxcbiAgICAgICAgb2JqZWN0OiB7fSxcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkxvYWRlZCxcbiAgICAgICAgdHlwZTogJ3Nlc3Npb24nLFxuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICB9LFxuICAgIH1cbiAgICB0aGlzLmV2ZW50cy5kaXNwYXRjaEV2ZW50KGV2ZW50KVxuXG4gIH1cblxuICB0ZWxlbWV0cnlUb0NhcHR1cmVJbnRlcmFjdChjb250ZW50SWQ6IGFueSwgc3ViVHlwZTogYW55LCBpZDogYW55KSB7XG4gICAgdGhpcy5ldmVudHMucmFpc2VJbnRlcmFjdFRlbGVtZXRyeShcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2NsaWNrJyxcbiAgICAgICAgc3ViVHlwZSxcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IGNvbnRlbnRJZCxcbiAgICAgICAgdHlwZTogJ0V4dGVybmFsIGNvbnRlbnQnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbW9kdWxlOiAnSG9tZScsXG4gICAgICB9XG4gICAgKVxuICB9XG5cbiAgcmFpc2VUZWxlbXRyeUVuZEV2ZW50KCkge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcbiAgICAgIGZyb206ICd0ZXN0JyxcbiAgICAgIHRvOiAnJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJycgfSxcbiAgICAgICAgb2JqZWN0OiB7fSxcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkLFxuICAgICAgICB0eXBlOiAnc2Vzc2lvbicsXG4gICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgIH0sXG4gICAgfVxuICAgIHRoaXMuZXZlbnRzLmRpc3BhdGNoRXZlbnQoZXZlbnQpXG4gIH1cblxuICBhc3luYyBkb3dubG9hZENlcnQoKSB7XG4gICAgdGhpcy5kb3dubG9hZENlcnRpZmljYXRlTG9hZGluZyA9IHRydWVcbiAgICBjb25zdCBjZXJ0UmVzOiBhbnkgPSBhd2FpdFxuICAgICAgdGhpcy5jZXJ0U3ZjLmRvd25sb2FkQ2VydGlmaWNhdGVfdjIodGhpcy51c2VyRXh0Q291cnNlRW5yb2xsLmlzc3VlZF9jZXJ0aWZpY2F0ZXNbMF0uaWRlbnRpZmllcikudG9Qcm9taXNlKCkuY2F0Y2goX2Vycm9yID0+IHsgfSlcbiAgICBpZiAoY2VydFJlcyAmJiBPYmplY3Qua2V5cyhjZXJ0UmVzLnJlc3VsdCkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5kb3dubG9hZENlcnRpZmljYXRlTG9hZGluZyA9IGZhbHNlXG4gICAgICBpZiAodGhpcy51c2VyRXh0Q291cnNlRW5yb2xsLmlzc3VlZF9jZXJ0aWZpY2F0ZXMgJiYgdGhpcy51c2VyRXh0Q291cnNlRW5yb2xsLmlzc3VlZF9jZXJ0aWZpY2F0ZXMubGVuZ3RoXG4gICAgICAgICYmIHRoaXMudXNlckV4dENvdXJzZUVucm9sbC5pc3N1ZWRfY2VydGlmaWNhdGVzWzBdKSB7XG4gICAgICAgIHRoaXMuZXh0Q29udGVudFJlYWREYXRhWydjZXJ0aWZpY2F0ZU9iaiddID0ge1xuICAgICAgICAgIGRhdGE6IHRoaXMudXNlckV4dENvdXJzZUVucm9sbC5pc3N1ZWRfY2VydGlmaWNhdGVzWzBdLFxuICAgICAgICAgIGNlcnREYXRhOiBjZXJ0UmVzLnJlc3VsdC5wcmludFVyaSxcbiAgICAgICAgICBjZXJ0SWQ6IHRoaXMudXNlckV4dENvdXJzZUVucm9sbC5pc3N1ZWRfY2VydGlmaWNhdGVzWzBdLmlkZW50aWZpZXIsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb3dubG9hZENlcnRpZmljYXRlTG9hZGluZyA9IGZhbHNlXG4gICAgfVxuICB9XG4gIG9uQ2xpY2tPZlNoYXJlKCkge1xuICAgIHRoaXMuZW5hYmxlU2hhcmUgPSB0cnVlXG4gICAgLy90aGlzLnJhaXNlVGVsZW1ldHJ5Rm9yU2hhcmUoJ3NoYXJlQ29udGVudCcpXG4gIH1cblxuICAvKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuICAvLyByYWlzZVRlbGVtZXRyeUZvclNoYXJlKHN1YlR5cGU6IGFueSkge1xuICAvLyAgIC8vY29uc29sZS5sb2codGhpcy5leHRDb250ZW50UmVhZERhdGEsIHRoaXMuZXZlbnRzLCBzdWJUeXBlKVxuICAvLyAgIC8vIHRoaXMuZXZlbnRzLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoXG4gIC8vICAgLy8ge1xuICAvLyAgIC8vICAgdHlwZTogJ2NsaWNrJyxcbiAgLy8gICAvLyAgIHN1YlR5cGUsXG4gIC8vICAgLy8gICBpZDogdGhpcy5jb250ZW50ID8gdGhpcy5jb250ZW50LmlkZW50aWZpZXIgOiAnJyxcbiAgLy8gICAvLyB9LFxuICAvLyAgIC8vIHtcbiAgLy8gICAvLyAgIGlkOiB0aGlzLmNvbnRlbnQgPyB0aGlzLmNvbnRlbnQuaWRlbnRpZmllciA6ICcnLFxuICAvLyAgIC8vICAgdHlwZTogdGhpcy5jb250ZW50ID8gdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA6ICcnLFxuICAvLyAgIC8vIH0sXG4gIC8vICAgLy8ge1xuICAvLyAgIC8vICAgcGFnZUlkRXh0OiBgYnRuLSR7c3ViVHlwZX1gLFxuICAvLyAgIC8vICAgbW9kdWxlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5bW9kdWxlcy5DT05URU5ULFxuICAvLyAgIC8vIH1cbiAgLy8gICAvLyApXG4gIC8vIH1cblxuICByZXNldEVuYWJsZVNoYXJlKF9ldmVudERhdGE6IGFueSkge1xuXG4gICAgdGhpcy5lbmFibGVTaGFyZSA9IGZhbHNlXG4gIH1cblxuICBjb250ZW50Vmlld0V2ZW50Rm9yTmV0Q29yZShldmVudFR5cGU6IGFueSkge1xuICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy5uZXRjb3JlQ29uZmlnICYmIHRoaXMuY29uZmlnU3ZjLm5ldGNvcmVDb25maWcubmV0Y29yZVdlYkNvbmZpZyAgLy8gTk9TT05BUlxuICAgICAgJiYgdGhpcy5jb25maWdTdmMubmV0Y29yZUNvbmZpZy5uZXRjb3JlV2ViQ29uZmlnLmlzQWN0aXZlIC8vIE5PU09OQVJcbiAgICAgICYmIHRoaXMuY29uZmlnU3ZjLm5ldGNvcmVDb25maWcubmV0Y29yZVdlYkNvbmZpZy5ldmVudHMgLy8gTk9TT05BUlxuICAgICAgJiYgdGhpcy5jb25maWdTdmMubmV0Y29yZUNvbmZpZy5uZXRjb3JlV2ViQ29uZmlnLmV2ZW50cy5jb250ZW50X3ZpZXcgLy8gTk9TT05BUlxuICAgICAgJiYgdGhpcy5jb25maWdTdmMubmV0Y29yZUNvbmZpZy5uZXRjb3JlV2ViQ29uZmlnLmV2ZW50cy5jb250ZW50X3ZpZXcuaXNBY3RpdmUgLy8gTk9TT05BUlxuICAgICkge1xuICAgICAgbGV0IHBheWxvYWQ6IGFueSA9IHt9XG4gICAgICAvLyBpZiAodGhpcy5jb25maWdTdmMgJiYgdGhpcy5jb25maWdTdmMudW5NYXBwZWRVc2VyICYmIHRoaXMuY29uZmlnU3ZjLnVuTWFwcGVkVXNlci5pZGVudGlmaWVyKSB7IC8vIE5PU09OQVJcbiAgICAgIC8vICAgcGF5bG9hZFsncGtedXNlcmlkJ10gPSB0aGlzLmNvbmZpZ1N2Yy51bk1hcHBlZFVzZXIuaWRlbnRpZmllci50cmltKCkudG9Mb3dlckNhc2UoKVxuICAgICAgLy8gfVxuICAgICAgLy8gY29uc29sZS5sb2coJ3BheWxvYWQnLCBwYXlsb2FkKVxuICAgICAgaWYgKHRoaXMuZXh0Q29udGVudFJlYWREYXRhICYmIHRoaXMuZXh0Q29udGVudFJlYWREYXRhLm5hbWUpIHtcbiAgICAgICAgcGF5bG9hZFsnY29udGVudF9uYW1lJ10gPSB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5uYW1lXG4gICAgICB9XG4gICAgICAvLyBpZih0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5jb3Vyc2VDYXRlZ29yeSkge1xuICAgICAgcGF5bG9hZFsnY29udGVudF9jYXRlZ29yeSddID0gJ0V4dGVybmFsIENvdXJzZSdcbiAgICAgIC8vIH1cbiAgICAgIGlmICh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5leHRlcm5hbElkKSB7XG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfaWQnXSA9IHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmV4dGVybmFsSWRcbiAgICAgIH1cbiAgICAgIC8vIGlmKHRoaXMuZXh0Q29udGVudFJlYWREYXRhICYmIHRoaXMuZXh0Q29udGVudFJlYWREYXRhLm5hbWUpIHtcbiAgICAgIHBheWxvYWRbJ2NvbnRlbnRfdXJsJ10gPSB3aW5kb3cubG9jYXRpb24uaHJlZlxuICAgICAgLy8gfVxuICAgICAgaWYgKHRoaXMuZXh0Q29udGVudFJlYWREYXRhICYmIHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmFwcEljb24pIHtcbiAgICAgICAgcGF5bG9hZFsnY29udGVudF9pbWFnZSddID0gdGhpcy5leHRDb250ZW50UmVhZERhdGEuYXBwSWNvblxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZXh0Q29udGVudFJlYWREYXRhICYmIHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmR1cmF0aW9uKSB7XG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfZHVyYXRpb24nXSA9IHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmR1cmF0aW9uICYmIE51bWJlcih0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5kdXJhdGlvbikgPiAwID8gTnVtYmVyKHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmR1cmF0aW9uKSA6IDBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfZHVyYXRpb24nXSA9IDBcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5hdmdSYXRpbmdcbiAgICAgICkge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X3JhdGluZyddID0gdGhpcy5leHRDb250ZW50UmVhZERhdGEuYXZnUmF0aW5nXG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnQgcmF0aW5nJ10gPSB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5hdmdSYXRpbmdcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS50b3RhbE5vT2ZSYXRpbmcpIHtcbiAgICAgICAgcGF5bG9hZFsnbm9fdXNlcnNfcmF0ZWQnXSA9IHRoaXMuZXh0Q29udGVudFJlYWREYXRhLnRvdGFsTm9PZlJhdGluZ1xuICAgICAgfVxuICAgICAgLy8gaWYoT2JqZWN0LmtleXModGhpcy51c2VyRXh0Q291cnNlRW5yb2xsKS5sZW5ndGgpIHtcbiAgICAgIHBheWxvYWRbJ2xlYXJuaW5nX3BhdGhfY29udGVudCddID0gT2JqZWN0LmtleXModGhpcy51c2VyRXh0Q291cnNlRW5yb2xsKS5sZW5ndGggPyB0cnVlIDogZmFsc2VcbiAgICAgIHBheWxvYWRbJ2xlYXJuaW5nIHBhdGggY29udGVudCddID0gT2JqZWN0LmtleXModGhpcy51c2VyRXh0Q291cnNlRW5yb2xsKS5sZW5ndGggPyB0cnVlIDogZmFsc2VcbiAgICAgIC8vIH1cbiAgICAgIGlmICh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5zb3VyY2UpIHtcbiAgICAgICAgcGF5bG9hZFsnY29udGVudF9wcm92aWRlcl9uYW1lJ10gPSB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5zb3VyY2VcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudFBhcnRuZXIgJiZcbiAgICAgICAgdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudFBhcnRuZXIuY29udGVudFBhcnRuZXJOYW1lXG4gICAgICApIHtcbiAgICAgICAgcGF5bG9hZFsnY29udGVudF9wcm92aWRlcl9uYW1lJ10gPSB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5jb250ZW50UGFydG5lci5jb250ZW50UGFydG5lck5hbWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfcHJvdmlkZXJfbmFtZSddID0gJ0thcm1heW9naSBCaGFyYXQnXG4gICAgICB9XG4gICAgICBpZiAoZXZlbnRUeXBlID09PSAndmlldycpIHtcbiAgICAgICAgdGhpcy5uZXRDb3JlU2VydmljZS50cmFja0V2ZW50Rm9yQ29udGVudEFuZEV2ZW50KCdjb250ZW50X3ZpZXcnLCB0aGlzLmNvbmZpZ1N2Yy51bk1hcHBlZFVzZXIuaWRlbnRpZmllci50cmltKCkudG9Mb3dlckNhc2UoKSwgcGF5bG9hZClcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnZW5yb2xsJykge1xuICAgICAgICB0aGlzLm5ldENvcmVTZXJ2aWNlLnRyYWNrRXZlbnRGb3JDb250ZW50QW5kRXZlbnQoJ2NvbnRlbnRfZW5yb2xtZW50JywgdGhpcy5jb25maWdTdmMudW5NYXBwZWRVc2VyLmlkZW50aWZpZXIudHJpbSgpLnRvTG93ZXJDYXNlKCksIHBheWxvYWQpXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2NvbXBsZXRpb24nKSB7XG4gICAgICAgIHRoaXMubmV0Q29yZVNlcnZpY2UudHJhY2tFdmVudEZvckNvbnRlbnRBbmRFdmVudCgnY29udGVudF9jb21wbGV0aW9uJywgdGhpcy5jb25maWdTdmMudW5NYXBwZWRVc2VyLmlkZW50aWZpZXIudHJpbSgpLnRvTG93ZXJDYXNlKCksIHBheWxvYWQpXG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICBzZWNvbmRzVG9UaW1lKGQ6IGFueSkge1xuICAgIGQgPSBOdW1iZXIoZClcbiAgICB2YXIgaCA9IE1hdGguZmxvb3IoZCAvIDM2MDApXG4gICAgdmFyIG0gPSBNYXRoLmZsb29yKGQgJSAzNjAwIC8gNjApXG4gICAgdmFyIHMgPSBNYXRoLmZsb29yKGQgJSAzNjAwICUgNjApXG5cbiAgICB2YXIgaERpc3BsYXkgPSBoID4gMCA/IGggKyAoaCA9PSAxID8gXCIgaG91ciwgXCIgOiBcIiBob3VycywgXCIpIDogXCJcIlxuICAgIHZhciBtRGlzcGxheSA9IG0gPiAwID8gbSArIChtID09IDEgPyBcIiBtaW51dGUsIFwiIDogXCIgbWludXRlcywgXCIpIDogXCJcIlxuICAgIHZhciBzRGlzcGxheSA9IHMgPiAwID8gcyArIChzID09IDEgPyBcIiBzZWNvbmRcIiA6IFwiIHNlY29uZHNcIikgOiBcIlwiXG4gICAgcmV0dXJuIGhEaXNwbGF5ICsgbURpc3BsYXkgKyBzRGlzcGxheVxuICB9XG5cbiAgY2xlYXJDb21tZW50SWRGcm9tVXJsKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRRdWVyeVBhcmFtcyA9IHsgLi4udGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyB9XG4gICAgZGVsZXRlIGN1cnJlbnRRdWVyeVBhcmFtcy5jb21tZW50SWRcbiAgICB0aGlzLmNvbW1lbnRJZCA9ICcnXG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlRW5yb2xsbWVudEVsaWdpYmlsaXR5KCk6IHZvaWQge1xuICAgIC8vIE9ubHkgdmFsaWRhdGUgaWYgdXNlciBpcyBub3QgYWxyZWFkeSBlbnJvbGxlZCBhbmQgY29udGVudCBpcyBhdmFpbGFibGVcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy51c2VyRXh0Q291cnNlRW5yb2xsKS5sZW5ndGggPT09IDAgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudElkICYmIHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmNvbnRlbnRQYXJ0bmVyICYmIHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmNvbnRlbnRQYXJ0bmVyLmlkKSB7XG4gICAgICB0aGlzLmVucm9sbFZhbGlkYXRpb25Mb2FkaW5nID0gdHJ1ZVxuICAgICAgdGhpcy5jZXJ0U3ZjLnZhbGlkYXRlRW5yb2xsbWVudEVsaWdpYmlsaXR5KHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmNvbnRlbnRJZCwgdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudFBhcnRuZXIuaWQpLnN1YnNjcmliZShcbiAgICAgICAgKF9yZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lbnJvbGxWYWxpZGF0aW9uTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5jYW5FbnJvbGwgPSB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yPy5lcnJvcj8ucGFyYW1zPy5tc2cgfHwgJ1VuYWJsZSB0byB2YWxpZGF0ZSBlbnJvbGxtZW50IGVsaWdpYmlsaXR5JywgJ1gnLCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogMTAwMDAsXG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLmVucm9sbFZhbGlkYXRpb25Mb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLmNhbkVucm9sbCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gIH1cblxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImV4dENvbnRlbnRBdmFpbGFibGVcIj5cbiAgICA8ZGl2IGNsYXNzPVwidG9jLWJhbm5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtNiBmaXhlZC13aWR0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbm5lci1kZXRhaWxzIHRvYy1jb250ZW50XCIgI2Jhbm5lckRldGFpbHM+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicxMzJweCdcIiBbaGVpZ2h0XT1cIiczMnB4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgYmx1ZS0yLWxvYWRlcidcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicxNDBweCdcIiBbaGVpZ2h0XT1cIicyNHB4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgYmx1ZS0yLWxvYWRlcidcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgdGFnLWRpdiByb3VuZGVkLTJ4bCBnYXAtMSBpdGVtcy1jZW50ZXIgcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIndzLW1hdC1vcmFuZ2UtdGV4dFwiPnZpZGVvX2xpYnJhcnk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyBmb250LWJvbGQgdGV4dC13aGl0ZSBsZWFkaW5nLTNcIj57eyB0cmFuc2xhdGVMYWJlbChjb250ZW50Py5jb3Vyc2VDYXRlZ29yeSwgJ3NlYXJjaGZpbHRlcnMnKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImV4dENvbnRlbnRSZWFkRGF0YT8udG9waWNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LXdoaXRlIGxlYWRpbmctM1wiPnt7ICdFeHRlcm5hbCBDb3Vyc2UnIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHRleHQtd2hpdGUgbW9iLXNoYXJlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJvbkNsaWNrT2ZTaGFyZSgpXCI+c2hhcmU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEtub3dsZWRnZSBsZXZlbCBibG9jayAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJleHRDb250ZW50UmVhZERhdGE/LmRpZmZpY3VsdHlMZXZlbCB8fCBleHRDb250ZW50UmVhZERhdGE/Lmtub3dsZWRnZUxldmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImtub3dsZWRnZS1sZXZlbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV4dENvbnRlbnRSZWFkRGF0YT8uZGlmZmljdWx0eUxldmVsPy50b0xvd2VyQ2FzZSgpID09PSAnYmVnaW5uZXInIHx8IGV4dENvbnRlbnRSZWFkRGF0YT8ua25vd2xlZGdlTGV2ZWw/LnRvTG93ZXJDYXNlKCkgPT09ICdiZWdpbm5lcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxldmVsLWJhZGdlIGJlZ2lubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiI0RCRjREQ1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy40MjI2NyA1QzcuNjc5MjcgNC41NTU1NSA4LjMyMDc3IDQuNTU1NTYgOC41NzczNyA1TDEyLjA0MTUgMTFDMTIuMjk4MSAxMS40NDQ0IDExLjk3NzMgMTIgMTEuNDY0MSAxMkg0LjUzNTkyQzQuMDIyNzIgMTIgMy43MDE5NyAxMS40NDQ0IDMuOTU4NTcgMTFMNy40MjI2NyA1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM0OUM5NTFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tleHRDb250ZW50UmVhZERhdGE/LmRpZmZpY3VsdHlMZXZlbCB8fCBleHRDb250ZW50UmVhZERhdGE/Lmtub3dsZWRnZUxldmVsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJleHRDb250ZW50UmVhZERhdGE/LmRpZmZpY3VsdHlMZXZlbD8udG9Mb3dlckNhc2UoKSA9PT0gJ2ludGVybWVkaWF0ZScgfHwgZXh0Q29udGVudFJlYWREYXRhPy5rbm93bGVkZ2VMZXZlbD8udG9Mb3dlckNhc2UoKSA9PT0gJ2ludGVybWVkaWF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxldmVsLWJhZGdlIGludGVybWVkaWF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIiNEMURCRUNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuNDIyNjcgMi42NjY2NkM3LjY3OTI3IDIuMjIyMjEgOC4zMjA3NyAyLjIyMjIxIDguNTc3MzcgMi42NjY2NkwxMi4wNDE1IDguNjY2NjZDMTIuMjk4MSA5LjExMTEgMTEuOTc3MyA5LjY2NjY2IDExLjQ2NDEgOS42NjY2Nkg0LjUzNTkyQzQuMDIyNzIgOS42NjY2NiAzLjcwMTk3IDkuMTExMSAzLjk1ODU3IDguNjY2NjZMNy40MjI2NyAyLjY2NjY2WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxQjRDQTFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuNDIyNjcgNS42NjY2NkM3LjY3OTI3IDUuMjIyMjEgOC4zMjA3NyA1LjIyMjIxIDguNTc3MzcgNS42NjY2NkwxMi4wNDE1IDExLjY2NjdDMTIuMjk4MSAxMi4xMTExIDExLjk3NzMgMTIuNjY2NyAxMS40NjQxIDEyLjY2NjdINC41MzU5MkM0LjAyMjcyIDEyLjY2NjcgMy43MDE5NyAxMi4xMTExIDMuOTU4NTcgMTEuNjY2N0w3LjQyMjY3IDUuNjY2NjZaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzFCNENBMVwiIHN0cm9rZT1cIiNEMURCRUNcIiBzdHJva2Utd2lkdGg9XCIwLjVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tleHRDb250ZW50UmVhZERhdGE/LmRpZmZpY3VsdHlMZXZlbCB8fCBleHRDb250ZW50UmVhZERhdGE/Lmtub3dsZWRnZUxldmVsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJleHRDb250ZW50UmVhZERhdGE/LmRpZmZpY3VsdHlMZXZlbD8udG9Mb3dlckNhc2UoKSA9PT0gJ2FkdmFuY2VkJyB8fCBleHRDb250ZW50UmVhZERhdGE/Lmtub3dsZWRnZUxldmVsPy50b0xvd2VyQ2FzZSgpID09PSAnYWR2YW5jZWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsZXZlbC1iYWRnZSBhZHZhbmNlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiI0ZGRTZFMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjQyMjY0IDIuMzMzMzRDNy42NzkyNCAxLjg4ODkgOC4zMjA3NCAxLjg4ODkgOC41NzczNCAyLjMzMzM0TDEyLjA0MTQgOC4zMzMzNEMxMi4yOTggOC43Nzc3OSAxMS45NzczIDkuMzMzMzQgMTEuNDY0MSA5LjMzMzM0SDQuNTM1ODlDNC4wMjI2OSA5LjMzMzM0IDMuNzAxOTQgOC43Nzc3OSAzLjk1ODU0IDguMzMzMzRMNy40MjI2NCAyLjMzMzM0WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkY4MjY4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuNDIyNjQgNUM3LjY3OTI0IDQuNTU1NTUgOC4zMjA3NCA0LjU1NTU2IDguNTc3MzQgNUwxMi4wNDE0IDExQzEyLjI5OCAxMS40NDQ0IDExLjk3NzMgMTIgMTEuNDY0MSAxMkg0LjUzNTg5QzQuMDIyNjkgMTIgMy43MDE5NCAxMS40NDQ0IDMuOTU4NTQgMTFMNy40MjI2NCA1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkY4MjY4XCIgc3Ryb2tlPVwiI0ZGRTZFMVwiIHN0cm9rZS13aWR0aD1cIjAuNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjQyMjY0IDcuNjY2NjlDNy42NzkyNCA3LjIyMjI0IDguMzIwNzQgNy4yMjIyNCA4LjU3NzM0IDcuNjY2NjlMMTIuMDQxNCAxMy42NjY3QzEyLjI5OCAxNC4xMTExIDExLjk3NzMgMTQuNjY2NyAxMS40NjQxIDE0LjY2NjdINC41MzU4OUM0LjAyMjY5IDE0LjY2NjcgMy43MDE5NCAxNC4xMTExIDMuOTU4NTQgMTMuNjY2N0w3LjQyMjY0IDcuNjY2NjlaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGRjgyNjhcIiBzdHJva2U9XCIjRkZFNkUxXCIgc3Ryb2tlLXdpZHRoPVwiMC41XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZXh0Q29udGVudFJlYWREYXRhPy5kaWZmaWN1bHR5TGV2ZWwgfHwgZXh0Q29udGVudFJlYWREYXRhPy5rbm93bGVkZ2VMZXZlbH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIic5MCUnXCIgW2hlaWdodF09XCInMzJweCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkIGJsdWUtMi1sb2FkZXInXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInNzAlJ1wiIFtoZWlnaHRdPVwiJzMycHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCBibHVlLTItbG9hZGVyJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5uZXItdGV4dCB0ZXh0LWJhc2Ugc206dGV4dC00eGwgbGVhZGluZy02IHNtOmxlYWRpbmctMTAgZm9udC1ib2xkXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2FwaXRhbGl6ZShleHRDb250ZW50UmVhZERhdGE/Lm5hbWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc20gc206dGV4dC1iYXNlIHNvdXJjZS10ZXh0IGZvbnQtc2VtaWJvbGQgYnJlYWstd29yZHNcIiAjY29udGVudFNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NvdXJjZUVsbGlwc2lzJzogc291cmNlRWxsaXBzaXN9XCIgdGl0bGU9XCJ7e2NvbnRlbnQ/LnNvdXJjZX19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXJkY29udGVudHYyLmJ5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImV4dENvbnRlbnRSZWFkRGF0YT8uY29udGVudFBhcnRuZXI/LmNvbnRlbnRQYXJ0bmVyTmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJleHRDb250ZW50UmVhZERhdGE/LmNvdXJzZVByb3ZpZGVyPy5sZW5ndGg7ZWxzZSBjb250ZW50UGFydG5lck5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtYXRjb3Vyc2VQcm92aWRlcnMoZXh0Q29udGVudFJlYWREYXRhPy5jb3Vyc2VQcm92aWRlcikgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29udGVudFBhcnRuZXJOYW1lPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZXh0Q29udGVudFJlYWREYXRhPy5jb250ZW50UGFydG5lcj8uY29udGVudFBhcnRuZXJOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWV4dENvbnRlbnRSZWFkRGF0YT8uY29udGVudFBhcnRuZXI/LmNvbnRlbnRQYXJ0bmVyTmFtZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tbW9uLmthcm1heW9naUJoYXJhdCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzEyMHB4J1wiIFtoZWlnaHRdPVwiJzQwcHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkIGJsdWUtMi1sb2FkZXInXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIic4OHB4J1wiIFtoZWlnaHRdPVwiJzI0cHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkIGJsdWUtMi1sb2FkZXInXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtNCBpdGVtcy1jZW50ZXJcIiAqbmdJZj1cImNvbnRlbnQ/LmF2ZXJhZ2VSYXRpbmcgfHwgY29udGVudD8uYWRkaXRpb25hbFRhZ3M/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyByYXRpbmctY2hpcCBweS0yIGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJoYW5kbGVOYXZpZ2F0ZVRvUmV2aWV3cygpXCIgKm5nSWY9XCJjb250ZW50Py5hdmVyYWdlUmF0aW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0xIG1hcmdpbi1sZWZ0LXMgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Z3JhZGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtd2hpdGUgdGV4dC1zbSBsZWFkaW5nLTRcIj57eyBjb250ZW50Py5hdmVyYWdlUmF0aW5nIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXdoaXRlIHRleHQtc20gbGVhZGluZy00IG1hcmdpbi1yaWdodC1tXCI+e3sgY29udGVudD8udG90YWxSYXRpbmcgfCBwaXBlQ291bnRUcmFuc2Zvcm0gfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiICpuZ0lmPVwiY29udGVudD8uYWRkaXRpb25hbFRhZ3M/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9zdC1lbnJvbGxlZC1jaGlwIHRleHQteHMgbGVhZGluZy0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbnRlbnQ/LmFkZGl0aW9uYWxUYWdzPy5pbmNsdWRlcygnbW9zdFRyZW5kaW5nJylcIj57eyAnY2FyZGNvbnRlbnR2Mi5tb3N0VHJlbmRpbmcnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb250ZW50Py5hZGRpdGlvbmFsVGFncz8uaW5jbHVkZXMoJ21vc3RFbnJvbGxlZCcpXCI+e3sgJ2NhcmRjb250ZW50djIubW9zdEVucm9sbGVkJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicxODBweCdcIiBbaGVpZ2h0XT1cIicyMHB4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCBibHVlLTItbG9hZGVyJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2tlbGV0b25Mb2FkZXIgJiYgZXh0Q29udGVudFJlYWREYXRhPy5sYXN0VXBkYXRlZE9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyBsZWFkaW5nLTQgc291cmNlLXRleHRcIj4oe3sgJ2FwcHRvYy5sYXN0VXBkYXRlZE9uJyB8IHRyYW5zbGF0ZSB9fSB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dENvbnRlbnRSZWFkRGF0YT8ubGFzdFVwZGF0ZWRPbiB8IGRhdGU6ICdNTU0gZCwgeScgfX0pPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZm9yUHJldmlld1wiPlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc01vYmlsZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIih1c2VyRXh0Q291cnNlRW5yb2xsIHwganNvbikgIT09ICd7fScgJiYgdXNlckV4dENvdXJzZUVucm9sbD8uaXNzdWVkX2NlcnRpZmljYXRlcz8ubGVuZ3RoID09PSAgMFxuICAgICAgICAgICAgJiYgdXNlckV4dENvdXJzZUVucm9sbD8ucHJvZ3Jlc3MgPD0gMTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLWNlcnRpZmljYXRlLWZvdW5kIG10LTYgbWItNCBteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Qcm9ncmVzcyBhbmQgY2VydGlmaWNhdGVzIGZvciB7eyBleHRDb250ZW50UmVhZERhdGE/LmNvbnRlbnRQYXJ0bmVyPy5jb250ZW50UGFydG5lck5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vyc2VzIGFyZSB2aXNpYmxlIG9ubHkgYWZ0ZXIgeW91IGNvbXBsZXRlIHRoZSBjb3Vyc2UgYW5kIHBhc3MgdGhlIGFzc2Vzc21lbnQuPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTQgcC01IGJvcmRlci1ib3R0b20gcG9zaXRpb24tYm90dG9tXCI+XG4gICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiKHVzZXJFeHRDb3Vyc2VFbnJvbGwgfCBqc29uKSAhPT0gJ3t9J1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWVuZCB3LWZ1bGwgd3MtbWF0LWJsYWNrLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWJvZHktMiAgd3MtbWF0LWJsYWNrLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3VzZXJFeHRDb3Vyc2VFbnJvbGw/LnByb2dyZXNzfX0lPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1jb250ZW50LXByb2dyZXNzIFtjb250ZW50SWRdPVwidXNlckV4dENvdXJzZUVucm9sbD8ucHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb2dyZXNzXT1cInVzZXJFeHRDb3Vyc2VFbnJvbGw/LnByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9ncmVzc1R5cGVdPVwiJ3BlcmNlbnRhZ2UnXCIgW2N1c3RvbUNsYXNzTmFtZV09XCIndmlld2VyLXByb2dyZXNzJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dzLXdpZGdldC1jb250ZW50LXByb2dyZXNzPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+ICAgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIih1c2VyRXh0Q291cnNlRW5yb2xsIHwganNvbikgPT09ICd7fScgJiYgIWVucm9sbFZhbGlkYXRpb25Mb2FkaW5nICYmIGNhbkVucm9sbFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyIGZsZXgtbWlkZGxlIHJlc3VtZVwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVuUm9sbFRvRXh0Q291cnNlKGV4dENvbnRlbnRSZWFkRGF0YSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+e3sgJ2FwcHRvY2hvbWUuZW5yb2xsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbnJvbGxWYWxpZGF0aW9uTG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzEzMnB4J1wiIFtoZWlnaHRdPVwiJzMycHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgYmx1ZS0yLWxvYWRlcidcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIih1c2VyRXh0Q291cnNlRW5yb2xsIHwganNvbikgIT09ICd7fScgJiYgZXh0Q29udGVudFJlYWREYXRhPy5yZWRpcmVjdFVybFwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbiBqdXN0aWZ5LWNlbnRlciBmbGV4LW1pZGRsZSByZXN1bWVcIiB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiZXh0Q29udGVudFJlYWREYXRhPy5yZWRpcmVjdFVybFwiIChjbGljayk9XCJjYXB0dXJlUmVkaXJlY3RUZWxlbWV0cnkoZXh0Q29udGVudFJlYWREYXRhKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj57eyAnYXBwdG9jaG9tZS5yZWRpcmVjdCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtbC0yIHdzLW1hdC13aGl0ZS10ZXh0XCI+b3Blbl9pbl9uZXc8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCIodXNlckV4dENvdXJzZUVucm9sbCB8IGpzb24pICE9PSAne30nICYmIHVzZXJFeHRDb3Vyc2VFbnJvbGw/Lmlzc3VlZF9jZXJ0aWZpY2F0ZXM/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgJiYgdXNlckV4dENvdXJzZUVucm9sbD8ucHJvZ3Jlc3MgPT09IDEwMFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyIGZsZXgtbWlkZGxlIHJlc3VtZVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZG93bmxvYWRDZXJ0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImZ1c2lvbi1hc3NldHMvaW1hZ2VzL2NlcnRpZmljYXRlLWljby5zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkNlcnRpZmljYXRlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICAqbmdJZj1cIiFkb3dubG9hZENlcnRpZmljYXRlTG9hZGluZ1wiIGNsYXNzPVwibWwtMlwiPmFycm93X2Rvd253YXJkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXIgZmxleCBmbGV4LW1pZGRsZSBjZXJ0aWZpY2F0ZS1sb2FkZXIgbWFyZ2luLWxlZnQtc1wiICpuZ0lmPVwiZG93bmxvYWRDZXJ0aWZpY2F0ZUxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCIgc3Ryb2tlPVwiJ3doaXRlJ1wiIGNsYXNzPVwid2hpdGUtc3Bpbm5lclwiIFtkaWFtZXRlcl09XCIyNFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gIC0tPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHB4LTggcHktNCBnYXAtMlwiICpuZ0lmPVwiZXh0Q29udGVudFJlYWREYXRhPy5kdXJhdGlvbiA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2ljb25zL3RvYy90aW1lci5zdmdcIiB3aWR0aD1cIjIwcHhcIiBhbHQ9XCJ3ZWIgaW1hZ2VcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14c1wiPnt7IGV4dENvbnRlbnRSZWFkRGF0YT8uZHVyYXRpb24gKiA2MCB8IHBpcGVEdXJhdGlvblRyYW5zZm9ybTogJ2htcycgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtNiBmaXhlZC13aWR0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9jLWNvbnRlbnRcIiBbbmdDbGFzc109XCJpc01vYmlsZSA/ICcnOidtdC04IG1iLTgnXCI+XG4gICAgICAgICAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cInt7ICdhcHB0b2NzaW5nbGVwYWdlLmFib3V0JyB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCIgW25nQ2xhc3NdPVwiaXNNb2JpbGUgPyAnJzonbXQtNSBtYi01J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzgwcHgnXCIgW2hlaWdodF09XCInMTZweCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCdcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yIG10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInODAlJ1wiIFtoZWlnaHRdPVwiJzE2cHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInOTUlJ1wiIFtoZWlnaHRdPVwiJzE2cHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInNjUlJ1wiIFtoZWlnaHRdPVwiJzE2cHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LWFwcC10b2MtYWJvdXQgW2NvbnRlbnRSZWFkRGF0YV09XCJleHRDb250ZW50UmVhZERhdGFcIiBbc2hvd1Jldmlld3NdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Jhc2VDb250ZW50UmVhZERhdGFdPVwiZXh0Q29udGVudFJlYWREYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93TWFya2V0UGxhY2VDZXJ0aWZpY2F0ZV09XCIodXNlckV4dENvdXJzZUVucm9sbCB8IGpzb24pICE9PSAne30nICYmIHVzZXJFeHRDb3Vyc2VFbnJvbGw/Lmlzc3VlZF9jZXJ0aWZpY2F0ZXM/Lmxlbmd0aCA+ICAwICYmIHVzZXJFeHRDb3Vyc2VFbnJvbGw/LnByb2dyZXNzID09PSAxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiZXh0Q29udGVudFJlYWREYXRhXCIgW2Zyb21NYXJrZXRQbGFjZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtza2VsZXRvbkxvYWRlcl09XCJza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dzLXdpZGdldC1hcHAtdG9jLWFib3V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZz8uY29tbWVudHNUYWJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJ7eyAnYXBwdG9jc2luZ2xlcGFnZS5jb21tZW50cycgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgcmF0aW5ncy1kaXYgbXQtNVwiIGlkPVwiY29tbWVudHNEaXZcIiAqbmdJZj1cImRpc2N1c3NXaWRnZXREYXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb21tZW50SWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGQtdjItd2lkZ2V0LWNvbW1lbnQgW3dpZGdldERhdGFdPVwiZGlzY3Vzc1dpZGdldERhdGFcIj48L2QtdjItd2lkZ2V0LWNvbW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbW1lbnRJZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMyBjdXJzb3ItcG9pbnRlciBtYi01XCIgKGNsaWNrKT1cImNsZWFyQ29tbWVudElkRnJvbVVybCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPmFycm93X2JhY2s8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFjayB0byBhbGwgY29tbWVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkLXYyLXdpZGdldC1jb21tZW50IFt3aWRnZXREYXRhXT1cImRpc2N1c3NXaWRnZXREYXRhXCIgW2NvbW1lbnRJZF09XCJjb21tZW50SWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NrZWxldG9uTG9hZGVyXT48L2QtdjItd2lkZ2V0LWNvbW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8L25nLXRlbXBsYXRlPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQtY29udGVudFwiICNyaWdodENvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2tlbGV0b25Mb2FkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIiczODRweCdcIiBbaGVpZ2h0XT1cIicyMjRweCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCdcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpbWFnZS1kaXZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgJ2JhY2tncm91bmQtaW1hZ2UnOiAndXJsKCcgKyBleHRDb250ZW50UmVhZERhdGE/LmFwcEljb24gKyAnKScsICdiYWNrZ3JvdW5kLXJlcGVhdCc6ICduby1yZXBlYXQnLCAnYmFja2dyb3VuZC1zaXplJzogJ2NvdmVyJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpbWFnZS1iYWNrZHJvcCc6IHNjcm9sbGVkfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIHRleHQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00IGp1c3RpZnktZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIm9uQ2xpY2tPZlNoYXJlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBnYXAtMiBzaGFyZS10YWdcIiAqbmdJZj1cIiFmb3JQcmV2aWV3XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+c2hhcmU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57eyAnYXBwdG9jc2luZ2xlcGFnZS5zaGFyZScgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTFcIiAqbmdJZj1cInNjcm9sbGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhsIGxlYWRpbmctNiB0ZXh0LXdoaXRlIGZvbnQtYm9sZCB0ZXh0LXNjcm9sLWN1c3RvbVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVDYXBpdGFsaXplKGV4dENvbnRlbnRSZWFkRGF0YT8ubmFtZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInRleHQtc20gc291cmNlLXRleHQgZm9udC1zZW1pYm9sZCBicmVhay13b3Jkc1wiICNjb250ZW50U291cmNlIFtuZ0NsYXNzXT1cInsnc291cmNlRWxsaXBzaXMnOiBzb3VyY2VFbGxpcHNpc31cIiB0aXRsZT1cInt7Y29udGVudD8uc291cmNlfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXJkY29udGVudHYyLmJ5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJleHRDb250ZW50UmVhZERhdGE/LmNvbnRlbnRQYXJ0bmVyPy5jb250ZW50UGFydG5lck5hbWVcIj57eyBleHRDb250ZW50UmVhZERhdGE/LmNvbnRlbnRQYXJ0bmVyPy5jb250ZW50UGFydG5lck5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFleHRDb250ZW50UmVhZERhdGE/LmNvbnRlbnRQYXJ0bmVyPy5jb250ZW50UGFydG5lck5hbWVcIj57eyAnY29tbW9uLmthcm1heW9naUJoYXJhdCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmb3JQcmV2aWV3XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0zIHAtMyBib3JkZXItYm90dG9tXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCIodXNlckV4dENvdXJzZUVucm9sbCB8IGpzb24pICE9PSAne30nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWVuZCB3LWZ1bGwgd3MtbWF0LWJsYWNrLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdC1ib2R5LTIgIHdzLW1hdC1ibGFjay10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dXNlckV4dENvdXJzZUVucm9sbD8ucHJvZ3Jlc3N9fSU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtY29udGVudC1wcm9ncmVzcyBbY29udGVudElkXT1cInVzZXJFeHRDb3Vyc2VFbnJvbGw/LnByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvZ3Jlc3NdPVwidXNlckV4dENvdXJzZUVucm9sbD8ucHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9ncmVzc1R5cGVdPVwiJ3BlcmNlbnRhZ2UnXCIgW2N1c3RvbUNsYXNzTmFtZV09XCIndmlld2VyLXByb2dyZXNzJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93cy13aWRnZXQtY29udGVudC1wcm9ncmVzcz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+ICAgLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIih1c2VyRXh0Q291cnNlRW5yb2xsIHwganNvbikgPT09ICd7fScgJiYgIWVucm9sbFZhbGlkYXRpb25Mb2FkaW5nICYmIGNhbkVucm9sbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgZmxleC1taWRkbGUgcmVzdW1lXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlblJvbGxUb0V4dENvdXJzZShleHRDb250ZW50UmVhZERhdGEpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+e3sgJ2FwcHRvY2hvbWUuZW5yb2xsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVucm9sbFZhbGlkYXRpb25Mb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicxMDAlJ1wiIFtoZWlnaHRdPVwiJzMycHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCAnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHVzZXJFeHRDb3Vyc2VFbnJvbGwgfCBqc29uKSAhPT0gJ3t9JyAmJiBleHRDb250ZW50UmVhZERhdGE/LnJlZGlyZWN0VXJsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgZmxleC1taWRkbGUgcmVzdW1lXCIgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiZXh0Q29udGVudFJlYWREYXRhPy5yZWRpcmVjdFVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYXB0dXJlUmVkaXJlY3RUZWxlbWV0cnkoZXh0Q29udGVudFJlYWREYXRhKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPnt7ICdhcHB0b2Nob21lLnJlZGlyZWN0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWwtMiB3cy1tYXQtd2hpdGUtdGV4dFwiPm9wZW5faW5fbmV3PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHVzZXJFeHRDb3Vyc2VFbnJvbGwgfCBqc29uKSAhPT0gJ3t9JyAmJiB1c2VyRXh0Q291cnNlRW5yb2xsPy5pc3N1ZWRfY2VydGlmaWNhdGVzPy5sZW5ndGggPT09ICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB1c2VyRXh0Q291cnNlRW5yb2xsPy5wcm9ncmVzcyA8PSAxMDAgJiYgd2lkZ2V0RGF0YSAmJiB3aWRnZXREYXRhLnNsaWRlckRhdGE/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuby1jZXJ0aWZpY2F0ZS1mb3VuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNsaWRlcnMtZHluYW1pYyBbd2lkZ2V0RGF0YV09XCJ3aWRnZXREYXRhXCI+PC93cy13aWRnZXQtc2xpZGVycy1keW5hbWljPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCIodXNlckV4dENvdXJzZUVucm9sbCB8IGpzb24pICE9PSAne30nICYmIHVzZXJFeHRDb3Vyc2VFbnJvbGw/Lmlzc3VlZF9jZXJ0aWZpY2F0ZXM/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHVzZXJFeHRDb3Vyc2VFbnJvbGw/LnByb2dyZXNzID09PSAxMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgZmxleC1taWRkbGUgcmVzdW1lXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJkb3dubG9hZENlcnQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiZnVzaW9uLWFzc2V0cy9pbWFnZXMvY2VydGlmaWNhdGUtaWNvLnN2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkNlcnRpZmljYXRlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAgKm5nSWY9XCIhZG93bmxvYWRDZXJ0aWZpY2F0ZUxvYWRpbmdcIiBjbGFzcz1cIm1sLTJcIj5hcnJvd19kb3dud2FyZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlciBmbGV4IGZsZXgtbWlkZGxlIGNlcnRpZmljYXRlLWxvYWRlciBtYXJnaW4tbGVmdC1zXCIgKm5nSWY9XCJkb3dubG9hZENlcnRpZmljYXRlTG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCIgc3Ryb2tlPVwiJ3doaXRlJ1wiIGNsYXNzPVwid2hpdGUtc3Bpbm5lclwiIFtkaWFtZXRlcl09XCIyNFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+ICAtLT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wga3BpLXZhbHVlcyBpdGVtcy1jZW50ZXIgZ2FwLTJcIiAqbmdJZj1cImV4dENvbnRlbnRSZWFkRGF0YT8uZHVyYXRpb24gPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi9hc3NldHMvaWNvbnMvdG9jL3RpbWVyLnN2Z1wiIHdpZHRoPVwiMjBweFwiIGFsdD1cIndlYiBpbWFnZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGV4dENvbnRlbnRSZWFkRGF0YT8uZHVyYXRpb24gfCBwaXBlRHVyYXRpb25UcmFuc2Zvcm06ICdobXMnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbjxkaXYgKm5nSWY9XCIhZXh0Q29udGVudEF2YWlsYWJsZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyIHctZnVsbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWFyZ2luLXhsIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8aW1nIHNyYz1cIi9hc3NldHMvY29tbW9uL2Vycm9yLXBhZ2VzL2VtcHR5X3NlYXJjaC5zdmdcIiB3c1V0aWxzSW1hZ2VSZXNwb25zaXZlIGFsdD1cIk5vIHJlc3VsdHNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWFyZ2luLXRvcC1sIG1hcmdpbi1ib3R0b20tc1wiPlxuICAgICAgICAgICAgPGgyIGNsYXNzPVwibWF0LWgyXCIgaTE4bj1cInNlYXJjaCByb3V0ZSBubyByZXN1bHRcIj57eydsZWFybnNlYXJjaC5ub1Jlc3VsdHMnIHwgdHJhbnNsYXRlfX08L2gyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuPC9kaXY+XG5cbjx3cy1hcHAtc2hhcmUtdG9jICpuZ0lmPVwiZW5hYmxlU2hhcmVcIiBbY29udGVudExpbmtdPVwiY29udGVudExpbmtcIiBbcm9vdE9yZ0lkXT1cInJvb3RPcmdJZFwiIFtjb250ZW50XT1cImV4dENvbnRlbnRSZWFkRGF0YVwiXG4gICAgKHJlc2V0RW5hYmxlU2hhcmUpPVwicmVzZXRFbmFibGVTaGFyZSgkZXZlbnQpXCI+PC93cy1hcHAtc2hhcmUtdG9jPiJdfQ==