@cometchat/chat-uikit-angular 4.3.36 → 5.0.0-beta.2

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 (648) hide show
  1. package/README.md +41 -14
  2. package/fesm2022/cometchat-chat-uikit-angular.mjs +107859 -0
  3. package/fesm2022/cometchat-chat-uikit-angular.mjs.map +1 -0
  4. package/package.json +14 -21
  5. package/screenshots/sample_app_overview.png +0 -0
  6. package/src/lib/assets/Collaborative-Whiteboard-Preview-Light.png +0 -0
  7. package/src/lib/assets/Collaborative-document-Preview-light.png +0 -0
  8. package/src/lib/assets/Collaborative_Document_Dark.png +0 -0
  9. package/src/lib/assets/Collaborative_Document_Light.png +0 -0
  10. package/src/lib/assets/Collaborative_Whiteboard_Dark.png +0 -0
  11. package/src/lib/assets/Collaborative_Whiteboard_Light.png +0 -0
  12. package/src/lib/assets/Copy.svg +5 -0
  13. package/src/lib/assets/Info.svg +8 -0
  14. package/src/lib/assets/Profile.png +0 -0
  15. package/src/lib/assets/Send.svg +3 -0
  16. package/src/lib/assets/Spinner-Gradient-1.svg +12 -0
  17. package/src/lib/assets/account_circle.svg +8 -0
  18. package/src/lib/assets/activity.svg +10 -0
  19. package/src/lib/assets/add.svg +8 -0
  20. package/src/lib/assets/add_a_photo.svg +8 -0
  21. package/src/lib/assets/add_box.svg +8 -0
  22. package/src/lib/assets/add_call.svg +8 -0
  23. package/src/lib/assets/add_circle.svg +3 -0
  24. package/src/lib/assets/add_circle_fill.svg +3 -0
  25. package/src/lib/assets/add_comment.svg +8 -0
  26. package/src/lib/assets/add_reaction.svg +8 -0
  27. package/src/lib/assets/add_reaction_icon.svg +5 -0
  28. package/src/lib/assets/ai_conversation_summary.svg +3 -0
  29. package/src/lib/assets/ai_fill.svg +4 -0
  30. package/src/lib/assets/ai_suggest_reply.svg +3 -0
  31. package/src/lib/assets/alternate_email.svg +8 -0
  32. package/src/lib/assets/animals_nature.svg +10 -0
  33. package/src/lib/assets/archive.svg +8 -0
  34. package/src/lib/assets/arrow_back.svg +8 -0
  35. package/src/lib/assets/arrow_forward.svg +8 -0
  36. package/src/lib/assets/attach_file.svg +8 -0
  37. package/src/lib/assets/audio_call_button.svg +5 -0
  38. package/src/lib/assets/audio_filter_icon.svg +3 -0
  39. package/src/lib/assets/bar_chart.svg +3 -0
  40. package/src/lib/assets/bedtime.svg +8 -0
  41. package/src/lib/assets/block.svg +8 -0
  42. package/src/lib/assets/bold-format.svg +3 -0
  43. package/src/lib/assets/bookmark.svg +8 -0
  44. package/src/lib/assets/bookmark_add.svg +8 -0
  45. package/src/lib/assets/bullet-list-format.svg +3 -0
  46. package/src/lib/assets/calendar_add_on.svg +8 -0
  47. package/src/lib/assets/calendar_today.svg +8 -0
  48. package/src/lib/assets/call-log-audio.svg +3 -0
  49. package/src/lib/assets/call-log_video.svg +3 -0
  50. package/src/lib/assets/call-logs_empty_state.svg +8 -0
  51. package/src/lib/assets/call-logs_empty_state_dark.svg +8 -0
  52. package/src/lib/assets/call.svg +8 -0
  53. package/src/lib/assets/call_end.svg +8 -0
  54. package/src/lib/assets/call_end_no_fill.svg +3 -0
  55. package/src/lib/assets/call_log.svg +8 -0
  56. package/src/lib/assets/call_made.svg +8 -0
  57. package/src/lib/assets/call_missed.svg +8 -0
  58. package/src/lib/assets/call_missed_outgoing.svg +8 -0
  59. package/src/lib/assets/call_received.svg +8 -0
  60. package/src/lib/assets/cancel.svg +8 -0
  61. package/src/lib/assets/cancel_fill.svg +8 -0
  62. package/src/lib/assets/change_circle.svg +3 -0
  63. package/src/lib/assets/change_scope.png +0 -0
  64. package/src/lib/assets/chat-history.svg +3 -0
  65. package/src/lib/assets/chat.svg +8 -0
  66. package/src/lib/assets/chat_bot.svg +3 -0
  67. package/src/lib/assets/chats_filter_icon.svg +1 -0
  68. package/src/lib/assets/check.svg +8 -0
  69. package/src/lib/assets/check_circle.svg +3 -0
  70. package/src/lib/assets/checkbox_tick.svg +5 -0
  71. package/src/lib/assets/chevron_left.svg +8 -0
  72. package/src/lib/assets/chevron_right.svg +8 -0
  73. package/src/lib/assets/circle.svg +3 -0
  74. package/src/lib/assets/close.svg +8 -0
  75. package/src/lib/assets/code-block-format.svg +3 -0
  76. package/src/lib/assets/code-format.svg +3 -0
  77. package/src/lib/assets/collaborative_document_fill.svg +4 -0
  78. package/src/lib/assets/collaborative_whiteboard.svg +4 -0
  79. package/src/lib/assets/collaborative_whiteboard_fill.svg +4 -0
  80. package/src/lib/assets/collabrative_document.svg +4 -0
  81. package/src/lib/assets/content_copy.svg +8 -0
  82. package/src/lib/assets/conversation_summary.svg +4 -0
  83. package/src/lib/assets/conversations_audio-message.svg +8 -0
  84. package/src/lib/assets/conversations_card-message.svg +8 -0
  85. package/src/lib/assets/conversations_collaborative-document-message.svg +4 -0
  86. package/src/lib/assets/conversations_collaborative-whiteboard-message.svg +5 -0
  87. package/src/lib/assets/conversations_delete.svg +8 -0
  88. package/src/lib/assets/conversations_delivered.svg +3 -0
  89. package/src/lib/assets/conversations_dropdown.svg +3 -0
  90. package/src/lib/assets/conversations_empty_state.svg +20 -0
  91. package/src/lib/assets/conversations_empty_state_dark.svg +20 -0
  92. package/src/lib/assets/conversations_error.svg +16 -0
  93. package/src/lib/assets/conversations_file-message.svg +8 -0
  94. package/src/lib/assets/conversations_form-message.svg +3 -0
  95. package/src/lib/assets/conversations_image-message.svg +8 -0
  96. package/src/lib/assets/conversations_incoming-video-call.svg +8 -0
  97. package/src/lib/assets/conversations_incoming-voice-call.svg +3 -0
  98. package/src/lib/assets/conversations_link.svg +8 -0
  99. package/src/lib/assets/conversations_missed-video-call.svg +8 -0
  100. package/src/lib/assets/conversations_missed-voice-call.svg +3 -0
  101. package/src/lib/assets/conversations_outgoing-video-call.svg +8 -0
  102. package/src/lib/assets/conversations_outgoing-voice-call.svg +4 -0
  103. package/src/lib/assets/conversations_poll-message.svg +3 -0
  104. package/src/lib/assets/conversations_read.svg +3 -0
  105. package/src/lib/assets/conversations_schedular-message.svg +8 -0
  106. package/src/lib/assets/conversations_sent.svg +3 -0
  107. package/src/lib/assets/conversations_sticker-message.svg +4 -0
  108. package/src/lib/assets/conversations_thread.svg +8 -0
  109. package/src/lib/assets/conversations_video-message.svg +8 -0
  110. package/{assets/wait.svg → src/lib/assets/conversations_wait.svg} +0 -0
  111. package/src/lib/assets/copy-text.svg +3 -0
  112. package/src/lib/assets/crop.svg +8 -0
  113. package/src/lib/assets/delete.svg +8 -0
  114. package/src/lib/assets/delete_icon.svg +4 -0
  115. package/src/lib/assets/deliveredIcon.svg +5 -0
  116. package/src/lib/assets/description.svg +8 -0
  117. package/src/lib/assets/document_icon.svg +10 -0
  118. package/src/lib/assets/done_all.svg +8 -0
  119. package/src/lib/assets/download.svg +8 -0
  120. package/src/lib/assets/dropdown-arrow.svg +3 -0
  121. package/src/lib/assets/edit.svg +8 -0
  122. package/src/lib/assets/edit_calendar.svg +8 -0
  123. package/src/lib/assets/edit_icon.svg +5 -0
  124. package/src/lib/assets/edit_square.svg +3 -0
  125. package/src/lib/assets/error.svg +9 -0
  126. package/src/lib/assets/error_icon.svg +3 -0
  127. package/src/lib/assets/error_info.svg +3 -0
  128. package/src/lib/assets/event.svg +8 -0
  129. package/src/lib/assets/favorite.svg +8 -0
  130. package/src/lib/assets/file_filter_icon.svg +4 -0
  131. package/src/lib/assets/file_type_jpg.png +0 -0
  132. package/src/lib/assets/file_type_link.png +0 -0
  133. package/src/lib/assets/file_type_mov.png +0 -0
  134. package/src/lib/assets/file_type_mp3.png +0 -0
  135. package/src/lib/assets/file_type_pdf.png +0 -0
  136. package/src/lib/assets/file_type_ppt.png +0 -0
  137. package/src/lib/assets/file_type_txt.png +0 -0
  138. package/src/lib/assets/file_type_unsupported.png +0 -0
  139. package/src/lib/assets/file_type_word.png +0 -0
  140. package/src/lib/assets/file_type_xlsx.png +0 -0
  141. package/src/lib/assets/file_type_zip.png +0 -0
  142. package/src/lib/assets/filter_list.svg +8 -0
  143. package/src/lib/assets/filter_list_off.svg +8 -0
  144. package/src/lib/assets/flags.svg +5 -0
  145. package/src/lib/assets/flip_camera_ios.svg +8 -0
  146. package/src/lib/assets/food_drink.svg +10 -0
  147. package/src/lib/assets/forward.svg +8 -0
  148. package/src/lib/assets/gif.svg +3 -0
  149. package/src/lib/assets/graphic_eq.svg +3 -0
  150. package/src/lib/assets/group_filter_icon.svg +3 -0
  151. package/src/lib/assets/groups_empty_state.svg +8 -0
  152. package/src/lib/assets/groups_empty_state_dark.svg +8 -0
  153. package/src/lib/assets/help.svg +8 -0
  154. package/src/lib/assets/history.svg +8 -0
  155. package/src/lib/assets/image_placeholder.png +0 -0
  156. package/src/lib/assets/incoming_video.svg +8 -0
  157. package/src/lib/assets/incoming_video_no_fill.svg +4 -0
  158. package/src/lib/assets/info_icon.svg +3 -0
  159. package/src/lib/assets/info_icon_fill.svg +5 -0
  160. package/src/lib/assets/italic-format.svg +3 -0
  161. package/src/lib/assets/keep.svg +8 -0
  162. package/src/lib/assets/keep_off.svg +8 -0
  163. package/src/lib/assets/keyboard.svg +8 -0
  164. package/src/lib/assets/keyboard_arrow_down.svg +8 -0
  165. package/src/lib/assets/keyboard_arrow_up.svg +8 -0
  166. package/src/lib/assets/language.svg +8 -0
  167. package/src/lib/assets/link.svg +8 -0
  168. package/src/lib/assets/link_filter_icon.svg +3 -0
  169. package/src/lib/assets/link_icon_2x.svg +3 -0
  170. package/src/lib/assets/list_error_state_icon.svg +20 -0
  171. package/src/lib/assets/list_error_state_icon_dark.svg +27 -0
  172. package/src/lib/assets/loading.svg +5 -0
  173. package/src/lib/assets/loading_animation.svg +5 -0
  174. package/src/lib/assets/loading_icon.svg +3 -0
  175. package/src/lib/assets/location_on.svg +8 -0
  176. package/src/lib/assets/lock.svg +8 -0
  177. package/src/lib/assets/lock_open.svg +8 -0
  178. package/src/lib/assets/logout.svg +3 -0
  179. package/src/lib/assets/mail.svg +8 -0
  180. package/src/lib/assets/message_blocked.svg +8 -0
  181. package/src/lib/assets/message_delete.svg +8 -0
  182. package/src/lib/assets/messages_filter_icon.svg +1 -0
  183. package/src/lib/assets/mic.svg +3 -0
  184. package/src/lib/assets/mic_fill.svg +8 -0
  185. package/src/lib/assets/mic_off.svg +8 -0
  186. package/src/lib/assets/missedCallIcon.svg +10 -0
  187. package/src/lib/assets/missed_video_call.svg +8 -0
  188. package/src/lib/assets/missed_video_call_no_fill.svg +3 -0
  189. package/src/lib/assets/mood.svg +3 -0
  190. package/src/lib/assets/mood_fill.svg +8 -0
  191. package/src/lib/assets/more_icon.svg +5 -0
  192. package/src/lib/assets/more_vert.svg +8 -0
  193. package/src/lib/assets/near_me.svg +3 -0
  194. package/src/lib/assets/new-chat.svg +3 -0
  195. package/src/lib/assets/no-messages.svg +8 -0
  196. package/src/lib/assets/no_photography.svg +8 -0
  197. package/src/lib/assets/notifications.svg +8 -0
  198. package/src/lib/assets/notifications_off.svg +8 -0
  199. package/src/lib/assets/number-list-format.svg +3 -0
  200. package/src/lib/assets/objects.svg +10 -0
  201. package/src/lib/assets/outgoing_video.svg +8 -0
  202. package/src/lib/assets/outgoing_video_no_fill.svg +4 -0
  203. package/src/lib/assets/pause.svg +8 -0
  204. package/src/lib/assets/person.svg +8 -0
  205. package/src/lib/assets/person_add.svg +8 -0
  206. package/src/lib/assets/phone_in_talk.svg +8 -0
  207. package/src/lib/assets/phone_incoming.svg +3 -0
  208. package/src/lib/assets/phone_incoming_no_fill.svg +3 -0
  209. package/src/lib/assets/phone_missed.svg +8 -0
  210. package/src/lib/assets/phone_missed_no_fill.svg +3 -0
  211. package/src/lib/assets/phone_outgoing.svg +4 -0
  212. package/src/lib/assets/phone_outgoing_no_fill.svg +4 -0
  213. package/src/lib/assets/photo.svg +8 -0
  214. package/src/lib/assets/photo_camera.svg +8 -0
  215. package/src/lib/assets/photo_filter_icon.svg +3 -0
  216. package/src/lib/assets/placeholder.png +0 -0
  217. package/src/lib/assets/play_arrow.svg +8 -0
  218. package/src/lib/assets/play_circle.svg +8 -0
  219. package/src/lib/assets/poll.svg +5 -0
  220. package/src/lib/assets/quote-format.svg +3 -0
  221. package/src/lib/assets/readIcon.svg +5 -0
  222. package/src/lib/assets/rearrange.svg +3 -0
  223. package/src/lib/assets/recording_icon.svg +10 -0
  224. package/src/lib/assets/recording_resume.svg +10 -0
  225. package/src/lib/assets/refresh.svg +8 -0
  226. package/src/lib/assets/reply.svg +8 -0
  227. package/src/lib/assets/reply_all.svg +8 -0
  228. package/src/lib/assets/reply_in_thread.svg +10 -0
  229. package/src/lib/assets/retry.svg +3 -0
  230. package/src/lib/assets/right-arrow.svg +3 -0
  231. package/src/lib/assets/sample-audio.wav +0 -0
  232. package/src/lib/assets/sample-video-thumbnail.svg +7 -0
  233. package/src/lib/assets/sample-video.mp4 +0 -0
  234. package/src/lib/assets/schedule.svg +8 -0
  235. package/src/lib/assets/screen_share.svg +8 -0
  236. package/src/lib/assets/search.svg +8 -0
  237. package/src/lib/assets/search_message_icon.svg +8 -0
  238. package/src/lib/assets/send-message.svg +3 -0
  239. package/src/lib/assets/send_fill.svg +8 -0
  240. package/src/lib/assets/settings.svg +8 -0
  241. package/src/lib/assets/share.svg +8 -0
  242. package/src/lib/assets/shield.svg +3 -0
  243. package/src/lib/assets/smileys_people.svg +10 -0
  244. package/src/lib/assets/star.svg +8 -0
  245. package/src/lib/assets/status_delivered.svg +5 -0
  246. package/src/lib/assets/status_error.svg +16 -0
  247. package/src/lib/assets/status_read.svg +3 -0
  248. package/src/lib/assets/status_sending.svg +5 -0
  249. package/src/lib/assets/status_sent.svg +5 -0
  250. package/src/lib/assets/sticker.svg +3 -0
  251. package/src/lib/assets/sticker_fill.svg +4 -0
  252. package/src/lib/assets/stop-message.svg +3 -0
  253. package/src/lib/assets/stop.svg +8 -0
  254. package/src/lib/assets/stop_circle.svg +8 -0
  255. package/src/lib/assets/stop_screen_share.svg +8 -0
  256. package/src/lib/assets/strike-out-format.svg +3 -0
  257. package/src/lib/assets/subdirectory_arrow_left.svg +8 -0
  258. package/src/lib/assets/subdirectory_arrow_right.svg +8 -0
  259. package/src/lib/assets/sunny.svg +8 -0
  260. package/src/lib/assets/symbols.svg +13 -0
  261. package/src/lib/assets/thumb_down.svg +8 -0
  262. package/src/lib/assets/thumb_up.svg +8 -0
  263. package/src/lib/assets/toast_check_circle.svg +3 -0
  264. package/src/lib/assets/toast_error.svg +3 -0
  265. package/src/lib/assets/toast_info.svg +3 -0
  266. package/src/lib/assets/toast_warning.svg +3 -0
  267. package/src/lib/assets/toolbar-toggle.svg +3 -0
  268. package/src/lib/assets/tooltip-side.svg +5 -0
  269. package/src/lib/assets/tooltip.svg +5 -0
  270. package/src/lib/assets/translate.svg +3 -0
  271. package/src/lib/assets/travel_places.svg +10 -0
  272. package/src/lib/assets/ulr-format.svg +3 -0
  273. package/src/lib/assets/underline-format.svg +3 -0
  274. package/src/lib/assets/unread_filter_icon.svg +7 -0
  275. package/src/lib/assets/upload.svg +3 -0
  276. package/src/lib/assets/user_empty.svg +8 -0
  277. package/src/lib/assets/user_empty_dark.svg +8 -0
  278. package/src/lib/assets/video_call.svg +8 -0
  279. package/src/lib/assets/video_call_button.svg +5 -0
  280. package/src/lib/assets/video_filter_icon.svg +3 -0
  281. package/src/lib/assets/videocam.svg +8 -0
  282. package/src/lib/assets/videocam_off.svg +8 -0
  283. package/src/lib/assets/visibility_off.svg +3 -0
  284. package/src/lib/assets/volume_down.svg +8 -0
  285. package/src/lib/assets/volume_mute.svg +8 -0
  286. package/src/lib/assets/volume_off.svg +8 -0
  287. package/src/lib/assets/volume_up.svg +8 -0
  288. package/src/lib/assets/warning.svg +8 -0
  289. package/src/lib/assets/warning_neutral.svg +3 -0
  290. package/src/lib/assets/wifi.svg +8 -0
  291. package/src/lib/assets/zoom_in_map.svg +8 -0
  292. package/src/lib/assets/zoom_out_map.svg +8 -0
  293. package/styles/accessibility.css +148 -0
  294. package/styles/css-variables.css +547 -0
  295. package/styles/fonts/Roboto/LICENSE.txt +202 -0
  296. package/styles/fonts/Roboto/Roboto-Black.ttf +0 -0
  297. package/styles/fonts/Roboto/Roboto-BlackItalic.ttf +0 -0
  298. package/styles/fonts/Roboto/Roboto-Bold.ttf +0 -0
  299. package/styles/fonts/Roboto/Roboto-BoldItalic.ttf +0 -0
  300. package/styles/fonts/Roboto/Roboto-Italic.ttf +0 -0
  301. package/styles/fonts/Roboto/Roboto-Light.ttf +0 -0
  302. package/styles/fonts/Roboto/Roboto-LightItalic.ttf +0 -0
  303. package/styles/fonts/Roboto/Roboto-Medium.ttf +0 -0
  304. package/styles/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
  305. package/styles/fonts/Roboto/Roboto-Regular.ttf +0 -0
  306. package/styles/fonts/Roboto/Roboto-Thin.ttf +0 -0
  307. package/styles/fonts/Roboto/Roboto-ThinItalic.ttf +0 -0
  308. package/styles/mention-styles.css +190 -0
  309. package/styles/rich-text-styles.css +310 -0
  310. package/types/cometchat-chat-uikit-angular.d.ts +34636 -0
  311. package/AI/AIAssistBot/AIAssistBot.d.ts +0 -7
  312. package/AI/AIAssistBot/AIAssistBotDecorator.d.ts +0 -11
  313. package/AI/AIConversationStarter/AIConversationStarter.d.ts +0 -7
  314. package/AI/AIConversationStarter/AIConversationStarterDecorator.d.ts +0 -9
  315. package/AI/AIConversationSummary/AIConversationSummary.d.ts +0 -7
  316. package/AI/AIConversationSummary/AIConversationSummaryDecorator.d.ts +0 -10
  317. package/AI/AISmartReplies/AISmartReplies.d.ts +0 -7
  318. package/AI/AISmartReplies/AISmartRepliesDecorator.d.ts +0 -9
  319. package/Calls/CallingExtension.d.ts +0 -6
  320. package/Calls/CallingExtensionDecorator.d.ts +0 -16
  321. package/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.d.ts +0 -79
  322. package/Calls/CometChatCallButtons/cometchat-call-buttons.module.d.ts +0 -11
  323. package/Calls/CometChatCallLogDetails/cometchat-call-log-details/cometchat-call-log-details.component.d.ts +0 -136
  324. package/Calls/CometChatCallLogDetails/cometchat-call-log-details.module.d.ts +0 -14
  325. package/Calls/CometChatCallLogHistory/cometchat-call-log-history/cometchat-call-log-history.component.d.ts +0 -112
  326. package/Calls/CometChatCallLogHistory/cometchat-call-log-history.module.d.ts +0 -10
  327. package/Calls/CometChatCallLogParticipants/cometchat-call-log-participants/cometchat-call-log-participants.component.d.ts +0 -77
  328. package/Calls/CometChatCallLogParticipants/cometchat-call-log-participants.module.d.ts +0 -10
  329. package/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings/cometchat-call-log-recordings.component.d.ts +0 -91
  330. package/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings.module.d.ts +0 -10
  331. package/Calls/CometChatCallLogs/cometchat-call-logs/cometchat-call-logs.component.d.ts +0 -134
  332. package/Calls/CometChatCallLogs/cometchat-call-logs.module.d.ts +0 -12
  333. package/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details/cometchat-call-logs-with-details.component.d.ts +0 -54
  334. package/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details.module.d.ts +0 -12
  335. package/Calls/CometChatIncomingCall/cometchat-incoming-call/cometchat-incoming-call.component.d.ts +0 -81
  336. package/Calls/CometChatIncomingCall/cometchat-incoming-call.module.d.ts +0 -11
  337. package/Calls/CometChatOngoingCall/cometchat-ongoing-call/cometchat-ongoing-call.component.d.ts +0 -38
  338. package/Calls/CometChatOngoingCall/cometchat-ongoing-call.module.d.ts +0 -9
  339. package/Calls/CometChatOutgoingCall/cometchat-outgoing-call/cometchat-outgoing-call.component.d.ts +0 -57
  340. package/Calls/CometChatOutgoingCall/cometchat-outgoing-call.module.d.ts +0 -10
  341. package/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.d.ts +0 -117
  342. package/CometChatAddMembers/cometchat-add-members.module.d.ts +0 -12
  343. package/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.d.ts +0 -152
  344. package/CometChatBannedMembers/cometchat-banned-members.module.d.ts +0 -13
  345. package/CometChatContacts/cometchat-contacts/cometchat-contacts.component.d.ts +0 -66
  346. package/CometChatContacts/cometchat-contacts.module.d.ts +0 -12
  347. package/CometChatConversations/cometchat-conversations/cometchat-conversations.component.d.ts +0 -387
  348. package/CometChatConversations/cometchat-conversations.module.d.ts +0 -10
  349. package/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.d.ts +0 -98
  350. package/CometChatConversationsWithMessages/cometchat-conversations-with-messages.module.d.ts +0 -11
  351. package/CometChatDetails/cometchat-details/cometchat-details.component.d.ts +0 -164
  352. package/CometChatDetails/cometchat-details.module.d.ts +0 -12
  353. package/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.d.ts +0 -162
  354. package/CometChatGroupMembers/cometchat-group-members.module.d.ts +0 -13
  355. package/CometChatGroups/cometchat-groups/cometchat-groups.component.d.ts +0 -150
  356. package/CometChatGroups/cometchat-groups.module.d.ts +0 -10
  357. package/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.d.ts +0 -103
  358. package/CometChatGroupsWithMessages/cometchat-groups-with-messages.module.d.ts +0 -11
  359. package/CometChatList/cometchat-list.component.d.ts +0 -91
  360. package/CometChatList/cometchat-list.module.d.ts +0 -10
  361. package/CometChatMessageBubble/cometchat-message-bubble/cometchat-message-bubble.component.d.ts +0 -63
  362. package/CometChatMessageBubble/cometchat-message-bubble.module.d.ts +0 -8
  363. package/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.d.ts +0 -326
  364. package/CometChatMessageComposer/cometchat-message-composer.module.d.ts +0 -11
  365. package/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.d.ts +0 -99
  366. package/CometChatMessageHeader/cometchat-message-header.module.d.ts +0 -9
  367. package/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.d.ts +0 -99
  368. package/CometChatMessageInformation/cometchat-message-information.module.d.ts +0 -10
  369. package/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.d.ts +0 -819
  370. package/CometChatMessageList/cometchat-message-list.module.d.ts +0 -13
  371. package/CometChatMessages/cometchat-messages/cometchat-messages.component.d.ts +0 -149
  372. package/CometChatMessages/cometchat-messages.module.d.ts +0 -16
  373. package/CometChatTheme.service.d.ts +0 -7
  374. package/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.d.ts +0 -85
  375. package/CometChatThreadedMessages/cometchat-threaded-messages.module.d.ts +0 -12
  376. package/CometChatTransferOwnership/cometchat-transfer-ownership/cometchat-transfer-ownership.component.d.ts +0 -88
  377. package/CometChatTransferOwnership/cometchat-transfer-ownership.module.d.ts +0 -10
  378. package/CometChatUserMemberWrapper/cometchat-user-member-wrapper.component.d.ts +0 -41
  379. package/CometChatUserMemberWrapper/cometchat-user-member-wrapper.module.d.ts +0 -11
  380. package/CometChatUsers/cometchat-users/cometchat-users.component.d.ts +0 -194
  381. package/CometChatUsers/cometchat-users.module.d.ts +0 -11
  382. package/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.d.ts +0 -72
  383. package/CometChatUsersWithMessages/cometchat-users-with-messages.module.d.ts +0 -10
  384. package/Extensions/CollaborativeDocument/CollaborativeDocumentExtension.d.ts +0 -5
  385. package/Extensions/CollaborativeDocument/CollaborativeDocumentExtensionDecorator.d.ts +0 -14
  386. package/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtension.d.ts +0 -5
  387. package/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtensionDecorator.d.ts +0 -14
  388. package/Extensions/ImageModeration/ImageModerationExtension.d.ts +0 -5
  389. package/Extensions/ImageModeration/ImageModerationExtensionDecorator.d.ts +0 -6
  390. package/Extensions/LinkPreviewExtension/LinkPreviewExtension.d.ts +0 -5
  391. package/Extensions/LinkPreviewExtension/LinkPreviewExtensionDecorator.d.ts +0 -6
  392. package/Extensions/MessageTranslation/MessageTranslationExtension.d.ts +0 -5
  393. package/Extensions/MessageTranslation/MessageTranslationExtensionDecorator.d.ts +0 -9
  394. package/Extensions/PollsExtension/PollsExtension.d.ts +0 -5
  395. package/Extensions/PollsExtension/PollsExtensionDecorator.d.ts +0 -14
  396. package/Extensions/SmartReplies/SmartRepliesExtension.d.ts +0 -5
  397. package/Extensions/SmartReplies/SmartRepliesExtensionDecorator.d.ts +0 -16
  398. package/Extensions/Stickers/StickersExtension.d.ts +0 -5
  399. package/Extensions/Stickers/StickersExtensionDecorator.d.ts +0 -28
  400. package/Extensions/TextModerator/TextModeratorExtension.d.ts +0 -6
  401. package/Extensions/TextModerator/TextModeratorExtensionDecorator.d.ts +0 -8
  402. package/Extensions/ThumbnailGeneration/ThumbnailGenerationExtension.d.ts +0 -5
  403. package/Extensions/ThumbnailGeneration/ThumbnailGenerationExtensionDecorator.d.ts +0 -6
  404. package/Screenshots/overview_cometchat_screens.png +0 -0
  405. package/Shared/CometChatUIkit/CometChatUIKit.d.ts +0 -49
  406. package/Shared/Framework/AIExtensionDataSource.d.ts +0 -5
  407. package/Shared/Framework/ChatConfigurator.d.ts +0 -8
  408. package/Shared/Framework/DataSource.d.ts +0 -40
  409. package/Shared/Framework/DataSourceDecorator.d.ts +0 -43
  410. package/Shared/Framework/ExtensionDataSource.d.ts +0 -3
  411. package/Shared/Utils/CallDetailUtils.d.ts +0 -8
  412. package/Shared/Utils/CallLogUtils.d.ts +0 -8
  413. package/Shared/Utils/ComeChatException.d.ts +0 -1
  414. package/Shared/Utils/MessageUtils.d.ts +0 -151
  415. package/Shared/Utils/UtilityFunctions.d.ts +0 -6
  416. package/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list/aiassist-bot-message-list.component.d.ts +0 -71
  417. package/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list.module.d.ts +0 -11
  418. package/Shared/Views/CometChatTabs/cometchat-tabs/cometchat-tabs.component.d.ts +0 -82
  419. package/Shared/Views/CometChatTabs/cometchat-tabs.module.d.ts +0 -8
  420. package/assets/.gitkeep +0 -0
  421. package/assets/Audio-Call.svg +0 -11
  422. package/assets/Audio-Call2x.svg +0 -11
  423. package/assets/Copy.svg +0 -17
  424. package/assets/Grid-layout.svg +0 -1
  425. package/assets/Heart.svg +0 -11
  426. package/assets/Imagemoderation.svg +0 -14
  427. package/assets/Info.svg +0 -13
  428. package/assets/InfoIcon.svg +0 -13
  429. package/assets/InfoSimpleIcon.svg +0 -4
  430. package/assets/Locked.svg +0 -10
  431. package/assets/More@2x.svg +0 -9
  432. package/assets/Plus.svg +0 -13
  433. package/assets/Private.svg +0 -10
  434. package/assets/Reactionsicon.svg +0 -9
  435. package/assets/Reply@2x.svg +0 -9
  436. package/assets/Send.svg +0 -12
  437. package/assets/Spinner.svg +0 -15
  438. package/assets/Stickers.svg +0 -16
  439. package/assets/Stipop.svg +0 -9
  440. package/assets/Video-call.svg +0 -12
  441. package/assets/Video-call2x.svg +0 -12
  442. package/assets/activity.svg +0 -22
  443. package/assets/addreaction.svg +0 -9
  444. package/assets/ai-bot.svg +0 -24
  445. package/assets/ai-empty.svg +0 -22
  446. package/assets/ai-error.svg +0 -21
  447. package/assets/animals.svg +0 -15
  448. package/assets/attachment-file.svg +0 -14
  449. package/assets/audio-file.svg +0 -12
  450. package/assets/back.png +0 -0
  451. package/assets/backbutton.svg +0 -12
  452. package/assets/call.svg +0 -1
  453. package/assets/chats.svg +0 -1
  454. package/assets/checkmark.svg +0 -11
  455. package/assets/close.svg +0 -12
  456. package/assets/close2x.svg +0 -12
  457. package/assets/collaborativedocument.svg +0 -13
  458. package/assets/collaborativewhiteboard.svg +0 -12
  459. package/assets/create-button.svg +0 -12
  460. package/assets/declaration.d.ts +0 -3
  461. package/assets/delete.svg +0 -7
  462. package/assets/deleteicon.svg +0 -15
  463. package/assets/down-arrow.svg +0 -1
  464. package/assets/download.svg +0 -13
  465. package/assets/editicon.svg +0 -14
  466. package/assets/emoji.svg +0 -2693
  467. package/assets/empty-slot.svg +0 -14
  468. package/assets/file-upload.svg +0 -2693
  469. package/assets/flags.svg +0 -12
  470. package/assets/food.svg +0 -26
  471. package/assets/greaterThanIcon.svg +0 -3
  472. package/assets/group.svg +0 -40
  473. package/assets/heart-reaction.png +0 -0
  474. package/assets/heart.png +0 -0
  475. package/assets/image.svg +0 -2693
  476. package/assets/incomingAudioCallIconUrl.svg +0 -5
  477. package/assets/incomingVideoCallIconUrl.svg +0 -6
  478. package/assets/incomingcall.wav +0 -0
  479. package/assets/increase-size.svg +0 -6
  480. package/assets/location.svg +0 -2693
  481. package/assets/message-delivered.png +0 -0
  482. package/assets/message-delivered.svg +0 -5
  483. package/assets/message-read.png +0 -0
  484. package/assets/message-read.svg +0 -5
  485. package/assets/message-sent.png +0 -0
  486. package/assets/message-sent.svg +0 -3
  487. package/assets/mic.svg +0 -11
  488. package/assets/missedAudioCallIconUrl.svg +0 -5
  489. package/assets/missedVideoCallIconUrl.svg +0 -6
  490. package/assets/moreicon.svg +0 -9
  491. package/assets/new-chat.svg +0 -13
  492. package/assets/new-message-icon.svg +0 -1
  493. package/assets/objects.svg +0 -13
  494. package/assets/open-thread.svg +0 -11
  495. package/assets/outgoingAudioCallIconUrl.svg +0 -5
  496. package/assets/outgoingVideoCallIconUrl.svg +0 -6
  497. package/assets/password-protected-group.svg +0 -3
  498. package/assets/pause-icon.svg +0 -14
  499. package/assets/photolibrary.svg +0 -11
  500. package/assets/placeholder.png +0 -0
  501. package/assets/play-icon.svg +0 -18
  502. package/assets/plus-rotated.svg +0 -13
  503. package/assets/polls.svg +0 -14
  504. package/assets/privacy.svg +0 -4
  505. package/assets/private-group.svg +0 -9
  506. package/assets/public.svg +0 -3
  507. package/assets/record-icon.svg +0 -8
  508. package/assets/reduce-size.svg +0 -6
  509. package/assets/right-arrow.svg +0 -6
  510. package/assets/search.png +0 -0
  511. package/assets/search.svg +0 -4
  512. package/assets/side-arrow.svg +0 -1
  513. package/assets/smileys.svg +0 -16
  514. package/assets/start-chat.svg +0 -1
  515. package/assets/start-conversation.svg +0 -46
  516. package/assets/stop.svg +0 -1
  517. package/assets/symbols.svg +0 -16
  518. package/assets/thread-arrow.svg +0 -1
  519. package/assets/thread-icon.svg +0 -38
  520. package/assets/threadIndicatorIcon.svg +0 -11
  521. package/assets/threadicon.svg +0 -14
  522. package/assets/translation.svg +0 -16
  523. package/assets/travel.svg +0 -18
  524. package/assets/unsafe-content.svg +0 -23
  525. package/assets/user.svg +0 -31
  526. package/assets/video-upload.svg +0 -2693
  527. package/assets/video.svg +0 -12
  528. package/assets/wait.png +0 -0
  529. package/assets/warning-small.png +0 -0
  530. package/assets/warning-small.svg +0 -5
  531. package/cometchat-chat-uikit-angular.d.ts +0 -5
  532. package/esm2020/AI/AIAssistBot/AIAssistBot.mjs +0 -21
  533. package/esm2020/AI/AIAssistBot/AIAssistBotDecorator.mjs +0 -68
  534. package/esm2020/AI/AIConversationStarter/AIConversationStarter.mjs +0 -21
  535. package/esm2020/AI/AIConversationStarter/AIConversationStarterDecorator.mjs +0 -31
  536. package/esm2020/AI/AIConversationSummary/AIConversationSummary.mjs +0 -21
  537. package/esm2020/AI/AIConversationSummary/AIConversationSummaryDecorator.mjs +0 -32
  538. package/esm2020/AI/AISmartReplies/AISmartReplies.mjs +0 -21
  539. package/esm2020/AI/AISmartReplies/AISmartRepliesDecorator.mjs +0 -31
  540. package/esm2020/Calls/CallingExtension.mjs +0 -14
  541. package/esm2020/Calls/CallingExtensionDecorator.mjs +0 -127
  542. package/esm2020/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.mjs +0 -409
  543. package/esm2020/Calls/CometChatCallButtons/cometchat-call-buttons.module.mjs +0 -32
  544. package/esm2020/Calls/CometChatCallLogDetails/cometchat-call-log-details/cometchat-call-log-details.component.mjs +0 -373
  545. package/esm2020/Calls/CometChatCallLogDetails/cometchat-call-log-details.module.mjs +0 -47
  546. package/esm2020/Calls/CometChatCallLogHistory/cometchat-call-log-history/cometchat-call-log-history.component.mjs +0 -352
  547. package/esm2020/Calls/CometChatCallLogHistory/cometchat-call-log-history.module.mjs +0 -21
  548. package/esm2020/Calls/CometChatCallLogParticipants/cometchat-call-log-participants/cometchat-call-log-participants.component.mjs +0 -189
  549. package/esm2020/Calls/CometChatCallLogParticipants/cometchat-call-log-participants.module.mjs +0 -21
  550. package/esm2020/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings/cometchat-call-log-recordings.component.mjs +0 -246
  551. package/esm2020/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings.module.mjs +0 -21
  552. package/esm2020/Calls/CometChatCallLogs/cometchat-call-logs/cometchat-call-logs.component.mjs +0 -592
  553. package/esm2020/Calls/CometChatCallLogs/cometchat-call-logs.module.mjs +0 -36
  554. package/esm2020/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details/cometchat-call-logs-with-details.component.mjs +0 -198
  555. package/esm2020/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details.module.mjs +0 -39
  556. package/esm2020/Calls/CometChatIncomingCall/cometchat-incoming-call/cometchat-incoming-call.component.mjs +0 -464
  557. package/esm2020/Calls/CometChatIncomingCall/cometchat-incoming-call.module.mjs +0 -32
  558. package/esm2020/Calls/CometChatOngoingCall/cometchat-ongoing-call/cometchat-ongoing-call.component.mjs +0 -176
  559. package/esm2020/Calls/CometChatOngoingCall/cometchat-ongoing-call.module.mjs +0 -27
  560. package/esm2020/Calls/CometChatOutgoingCall/cometchat-outgoing-call/cometchat-outgoing-call.component.mjs +0 -188
  561. package/esm2020/Calls/CometChatOutgoingCall/cometchat-outgoing-call.module.mjs +0 -28
  562. package/esm2020/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.mjs +0 -374
  563. package/esm2020/CometChatAddMembers/cometchat-add-members.module.mjs +0 -23
  564. package/esm2020/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.mjs +0 -530
  565. package/esm2020/CometChatBannedMembers/cometchat-banned-members.module.mjs +0 -24
  566. package/esm2020/CometChatContacts/cometchat-contacts/cometchat-contacts.component.mjs +0 -274
  567. package/esm2020/CometChatContacts/cometchat-contacts.module.mjs +0 -23
  568. package/esm2020/CometChatConversations/cometchat-conversations/cometchat-conversations.component.mjs +0 -1837
  569. package/esm2020/CometChatConversations/cometchat-conversations.module.mjs +0 -28
  570. package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.mjs +0 -413
  571. package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages.module.mjs +0 -35
  572. package/esm2020/CometChatDetails/cometchat-details/cometchat-details.component.mjs +0 -789
  573. package/esm2020/CometChatDetails/cometchat-details.module.mjs +0 -27
  574. package/esm2020/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.mjs +0 -807
  575. package/esm2020/CometChatGroupMembers/cometchat-group-members.module.mjs +0 -24
  576. package/esm2020/CometChatGroups/cometchat-groups/cometchat-groups.component.mjs +0 -681
  577. package/esm2020/CometChatGroups/cometchat-groups.module.mjs +0 -28
  578. package/esm2020/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.mjs +0 -499
  579. package/esm2020/CometChatGroupsWithMessages/cometchat-groups-with-messages.module.mjs +0 -35
  580. package/esm2020/CometChatList/cometchat-list.component.mjs +0 -225
  581. package/esm2020/CometChatList/cometchat-list.module.mjs +0 -28
  582. package/esm2020/CometChatMessageBubble/cometchat-message-bubble/cometchat-message-bubble.component.mjs +0 -166
  583. package/esm2020/CometChatMessageBubble/cometchat-message-bubble.module.mjs +0 -23
  584. package/esm2020/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.mjs +0 -1976
  585. package/esm2020/CometChatMessageComposer/cometchat-message-composer.module.mjs +0 -22
  586. package/esm2020/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.mjs +0 -467
  587. package/esm2020/CometChatMessageHeader/cometchat-message-header.module.mjs +0 -26
  588. package/esm2020/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.mjs +0 -308
  589. package/esm2020/CometChatMessageInformation/cometchat-message-information.module.mjs +0 -28
  590. package/esm2020/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.mjs +0 -4360
  591. package/esm2020/CometChatMessageList/cometchat-message-list.module.mjs +0 -42
  592. package/esm2020/CometChatMessages/cometchat-messages/cometchat-messages.component.mjs +0 -449
  593. package/esm2020/CometChatMessages/cometchat-messages.module.mjs +0 -52
  594. package/esm2020/CometChatTheme.service.mjs +0 -17
  595. package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.mjs +0 -372
  596. package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages.module.mjs +0 -36
  597. package/esm2020/CometChatTransferOwnership/cometchat-transfer-ownership/cometchat-transfer-ownership.component.mjs +0 -336
  598. package/esm2020/CometChatTransferOwnership/cometchat-transfer-ownership.module.mjs +0 -21
  599. package/esm2020/CometChatUserMemberWrapper/cometchat-user-member-wrapper.component.mjs +0 -75
  600. package/esm2020/CometChatUserMemberWrapper/cometchat-user-member-wrapper.module.mjs +0 -21
  601. package/esm2020/CometChatUsers/cometchat-users/cometchat-users.component.mjs +0 -788
  602. package/esm2020/CometChatUsers/cometchat-users.module.mjs +0 -32
  603. package/esm2020/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.mjs +0 -205
  604. package/esm2020/CometChatUsersWithMessages/cometchat-users-with-messages.module.mjs +0 -31
  605. package/esm2020/Extensions/CollaborativeDocument/CollaborativeDocumentExtension.mjs +0 -12
  606. package/esm2020/Extensions/CollaborativeDocument/CollaborativeDocumentExtensionDecorator.mjs +0 -93
  607. package/esm2020/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtension.mjs +0 -12
  608. package/esm2020/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtensionDecorator.mjs +0 -94
  609. package/esm2020/Extensions/ImageModeration/ImageModerationExtension.mjs +0 -12
  610. package/esm2020/Extensions/ImageModeration/ImageModerationExtensionDecorator.mjs +0 -10
  611. package/esm2020/Extensions/LinkPreviewExtension/LinkPreviewExtension.mjs +0 -12
  612. package/esm2020/Extensions/LinkPreviewExtension/LinkPreviewExtensionDecorator.mjs +0 -10
  613. package/esm2020/Extensions/MessageTranslation/MessageTranslationExtension.mjs +0 -12
  614. package/esm2020/Extensions/MessageTranslation/MessageTranslationExtensionDecorator.mjs +0 -31
  615. package/esm2020/Extensions/PollsExtension/PollsExtension.mjs +0 -12
  616. package/esm2020/Extensions/PollsExtension/PollsExtensionDecorator.mjs +0 -77
  617. package/esm2020/Extensions/SmartReplies/SmartRepliesExtension.mjs +0 -12
  618. package/esm2020/Extensions/SmartReplies/SmartRepliesExtensionDecorator.mjs +0 -115
  619. package/esm2020/Extensions/Stickers/StickersExtension.mjs +0 -12
  620. package/esm2020/Extensions/Stickers/StickersExtensionDecorator.mjs +0 -125
  621. package/esm2020/Extensions/TextModerator/TextModeratorExtension.mjs +0 -22
  622. package/esm2020/Extensions/TextModerator/TextModeratorExtensionDecorator.mjs +0 -87
  623. package/esm2020/Extensions/ThumbnailGeneration/ThumbnailGenerationExtension.mjs +0 -12
  624. package/esm2020/Extensions/ThumbnailGeneration/ThumbnailGenerationExtensionDecorator.mjs +0 -10
  625. package/esm2020/Shared/CometChatUIkit/CometChatUIKit.mjs +0 -495
  626. package/esm2020/Shared/Framework/AIExtensionDataSource.mjs +0 -3
  627. package/esm2020/Shared/Framework/ChatConfigurator.mjs +0 -23
  628. package/esm2020/Shared/Framework/DataSource.mjs +0 -3
  629. package/esm2020/Shared/Framework/DataSourceDecorator.mjs +0 -113
  630. package/esm2020/Shared/Framework/ExtensionDataSource.mjs +0 -4
  631. package/esm2020/Shared/Utils/CallDetailUtils.mjs +0 -72
  632. package/esm2020/Shared/Utils/CallLogUtils.mjs +0 -122
  633. package/esm2020/Shared/Utils/ComeChatException.mjs +0 -10
  634. package/esm2020/Shared/Utils/MessageUtils.mjs +0 -682
  635. package/esm2020/Shared/Utils/UtilityFunctions.mjs +0 -36
  636. package/esm2020/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list/aiassist-bot-message-list.component.mjs +0 -290
  637. package/esm2020/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list.module.mjs +0 -22
  638. package/esm2020/Shared/Views/CometChatTabs/cometchat-tabs/cometchat-tabs.component.mjs +0 -124
  639. package/esm2020/Shared/Views/CometChatTabs/cometchat-tabs.module.mjs +0 -23
  640. package/esm2020/cometchat-chat-uikit-angular.mjs +0 -5
  641. package/esm2020/public-api.mjs +0 -115
  642. package/examples/sample-app/README.md +0 -50
  643. package/fesm2015/cometchat-chat-uikit-angular.mjs +0 -22649
  644. package/fesm2015/cometchat-chat-uikit-angular.mjs.map +0 -1
  645. package/fesm2020/cometchat-chat-uikit-angular.mjs +0 -22538
  646. package/fesm2020/cometchat-chat-uikit-angular.mjs.map +0 -1
  647. package/public-api.d.ts +0 -106
  648. /package/{assets/message-privately.svg → src/lib/assets/send_message_privately.svg} +0 -0
@@ -1,682 +0,0 @@
1
- import { CometChatMessageOption, MessageBubbleAlignment, CometChatMessageTemplate, CometChatMessageComposerAction, localize, CometChatUIKitConstants, fontHelper, MentionsTargetElement, } from "@cometchat/uikit-resources";
2
- import { CometChatMentionsFormatter, CometChatUIKitLoginListener, CometChatUrlsFormatter, ConversationUtils, UserMentionStyle, } from "@cometchat/uikit-shared";
3
- import { CometChat } from "@cometchat/chat-sdk-javascript";
4
- import { ChatConfigurator } from "../Framework/ChatConfigurator";
5
- export class MessageUtils {
6
- /**
7
- * Creates an option to edit message.
8
- * @param {CometChatTheme} theme - The theme object.
9
- * @return {CometChatMessageOption} - Returns a new message option.
10
- */
11
- getEditOption(theme) {
12
- return new CometChatMessageOption({
13
- id: CometChatUIKitConstants.MessageOption.editMessage,
14
- title: localize("EDIT"),
15
- iconURL: "assets/editicon.svg",
16
- onClick: null,
17
- iconTint: theme.palette.getAccent600(),
18
- backgroundColor: "transparent",
19
- titleFont: fontHelper(theme.typography.subtitle1),
20
- titleColor: theme.palette.getAccent600(),
21
- });
22
- }
23
- /**
24
- * Creates an option to react to a message.
25
- * @param {CometChatTheme} theme - The theme object.
26
- * @return {CometChatMessageOption} - Returns a new message option.
27
- */
28
- getReactionOption(theme) {
29
- return new CometChatMessageOption({
30
- id: CometChatUIKitConstants.MessageOption.reactToMessage,
31
- title: localize("REACT"),
32
- iconURL: "assets/addreaction.svg",
33
- onClick: undefined,
34
- iconTint: theme.palette.getAccent600(),
35
- backgroundColor: "transparent",
36
- titleFont: fontHelper(theme.typography.subtitle1),
37
- titleColor: theme.palette.getAccent600(),
38
- });
39
- }
40
- /**
41
- * Creates an option to get info about a message.
42
- * @param {CometChatTheme} theme - The theme object.
43
- * @return {CometChatMessageOption} - Returns a new message option.
44
- */
45
- getMessageInfoOption(theme) {
46
- return new CometChatMessageOption({
47
- id: CometChatUIKitConstants.MessageOption.messageInformation,
48
- title: localize("INFO"),
49
- iconURL: "assets/Info.svg",
50
- onClick: null,
51
- iconTint: theme.palette.getAccent600(),
52
- backgroundColor: "transparent",
53
- titleFont: fontHelper(theme.typography.subtitle1),
54
- titleColor: theme.palette.getAccent600(),
55
- });
56
- }
57
- /**
58
- * Creates an option to send a private message.
59
- * @param {CometChatTheme} theme - The theme object.
60
- * @return {CometChatMessageOption} - Returns a new message option.
61
- */
62
- getMessagePrivatelyOption(theme) {
63
- return new CometChatMessageOption({
64
- id: CometChatUIKitConstants.MessageOption.sendMessagePrivately,
65
- title: localize("MESSAGE_PRIVATELY"),
66
- iconURL: "assets/message-privately.svg",
67
- onClick: null,
68
- iconTint: theme.palette.getAccent600(),
69
- backgroundColor: "transparent",
70
- titleFont: fontHelper(theme.typography.subtitle1),
71
- titleColor: theme.palette.getAccent600(),
72
- });
73
- }
74
- /**
75
- * Creates an option to delete a message.
76
- * @param {CometChatTheme} theme - The theme object.
77
- * @return {CometChatMessageOption} - Returns a new message option.
78
- */
79
- getDeleteOption(theme) {
80
- return new CometChatMessageOption({
81
- id: CometChatUIKitConstants.MessageOption.deleteMessage,
82
- title: localize("DELETE"),
83
- iconURL: "assets/deleteicon.svg",
84
- onClick: null,
85
- iconTint: theme.palette.getAccent600(),
86
- backgroundColor: "transparent",
87
- titleFont: fontHelper(theme.typography.subtitle1),
88
- titleColor: theme.palette.getAccent600(),
89
- });
90
- }
91
- /**
92
- * Creates an option to reply to a message in a thread.
93
- * @param {CometChatTheme} theme - The theme object.
94
- * @return {CometChatMessageOption} - Returns a new message option.
95
- */
96
- getReplyInThreadOption(theme) {
97
- return new CometChatMessageOption({
98
- id: CometChatUIKitConstants.MessageOption.replyInThread,
99
- title: localize("REPLY"),
100
- iconURL: "assets/threadicon.svg",
101
- onClick: null,
102
- iconTint: theme.palette.getAccent600(),
103
- backgroundColor: "transparent",
104
- titleFont: fontHelper(theme.typography.subtitle1),
105
- titleColor: theme.palette.getAccent600(),
106
- });
107
- }
108
- /**
109
- * Creates an option to copy a message.
110
- * @param {CometChatTheme} theme - The theme object.
111
- * @return {CometChatMessageOption} - Returns a new message option.
112
- */
113
- getCopyOption(theme) {
114
- return new CometChatMessageOption({
115
- id: CometChatUIKitConstants.MessageOption.copyMessage,
116
- title: localize("COPY"),
117
- iconURL: "assets/Copy.svg",
118
- onClick: null,
119
- iconTint: theme.palette.getAccent600(),
120
- backgroundColor: "transparent",
121
- titleFont: fontHelper(theme.typography.subtitle1),
122
- titleColor: theme.palette.getAccent600(),
123
- });
124
- }
125
- /**
126
- * Checks if a message is sent by current logged in user.
127
- * @param {CometChat.User} loggedInUser - The current logged in user.
128
- * @param {CometChat.BaseMessage} message - The message to check.
129
- * @return {boolean} - Returns true if message is sent by current logged in user, otherwise false.
130
- */
131
- isSentByMe(loggedInUser, message) {
132
- return loggedInUser.getUid() === message.getSender().getUid();
133
- }
134
- /**
135
- * Fetches options for text messages.
136
- * @param {CometChat.User} loggedInUser - The current logged in user.
137
- * @param {CometChat.BaseMessage} messageObject - The message object.
138
- * @param {CometChatTheme} theme - The theme object.
139
- * @param {CometChat.Group} group - The group object.
140
- * @return {Array<CometChatMessageOption>} - Returns an array of message options.
141
- */
142
- getTextMessageOptions(loggedInUser, messageObject, theme, group) {
143
- let isSentByMe = this.isSentByMe(loggedInUser, messageObject);
144
- let isParticipant = false;
145
- if (group?.getScope() == CometChatUIKitConstants.groupMemberScope.participant) {
146
- isParticipant = true;
147
- }
148
- let messageOptionList = [];
149
- messageOptionList.push(this.getReactionOption(theme));
150
- if (!messageObject.getParentMessageId()) {
151
- messageOptionList.push(this.getReplyInThreadOption(theme));
152
- }
153
- messageOptionList.push(this.getCopyOption(theme));
154
- if (isSentByMe || (!isParticipant && group)) {
155
- messageOptionList.push(this.getEditOption(theme));
156
- }
157
- if (isSentByMe) {
158
- messageOptionList.push(this.getMessageInfoOption(theme));
159
- }
160
- if (isSentByMe || (!isParticipant && group))
161
- messageOptionList.push(this.getDeleteOption(theme));
162
- if (group && !isSentByMe) {
163
- messageOptionList.push(this.getMessagePrivatelyOption(theme));
164
- }
165
- return messageOptionList;
166
- }
167
- /**
168
- * Fetches options for image messages.
169
- * @param {CometChat.User} loggedInUser - The current logged in user.
170
- * @param {CometChat.BaseMessage} messageObject - The message object.
171
- * @param {CometChatTheme} theme - The theme object.
172
- * @param {CometChat.Group} group - The group object.
173
- * @return {Array<CometChatMessageOption>} - Returns an array of message options.
174
- */
175
- getImageMessageOptions(loggedInUser, messageObject, theme, group) {
176
- let messageOptionList = [];
177
- messageOptionList = ChatConfigurator.getDataSource().getCommonOptions(loggedInUser, messageObject, theme, group);
178
- return messageOptionList;
179
- }
180
- /**
181
- * Fetches options for video messages.
182
- * @param {CometChat.User} loggedInUser - The current logged in user.
183
- * @param {CometChat.BaseMessage} messageObject - The message object.
184
- * @param {CometChatTheme} theme - The theme object.
185
- * @param {CometChat.Group} group - (Optional) The group object.
186
- * @return {Array<CometChatMessageOption>} - Returns an array of message options.
187
- */
188
- getVideoMessageOptions(loggedInUser, messageObject, theme, group) {
189
- let messageOptionList = [];
190
- messageOptionList = ChatConfigurator.getDataSource().getCommonOptions(loggedInUser, messageObject, theme, group);
191
- return messageOptionList;
192
- }
193
- /**
194
- * Fetches options for audio messages.
195
- * @param {CometChat.User} loggedInUser - The current logged in user.
196
- * @param {CometChat.BaseMessage} messageObject - The message object.
197
- * @param {CometChatTheme} theme - The theme object.
198
- * @param {CometChat.Group} group - (Optional) The group object.
199
- * @return {Array<CometChatMessageOption>} - Returns an array of message options.
200
- */
201
- getAudioMessageOptions(loggedInUser, messageObject, theme, group) {
202
- let messageOptionList = [];
203
- messageOptionList = ChatConfigurator.getDataSource().getCommonOptions(loggedInUser, messageObject, theme, group);
204
- return messageOptionList;
205
- }
206
- /**
207
- * Fetches options for file messages.
208
- * @param {CometChat.User} loggedInUser - The current logged in user.
209
- * @param {CometChat.BaseMessage} messageObject - The message object.
210
- * @param {CometChatTheme} theme - The theme object.
211
- * @param {CometChat.Group} group - (Optional) The group object.
212
- * @return {Array<CometChatMessageOption>} - Returns an array of message options.
213
- */
214
- getFileMessageOptions(loggedInUser, messageObject, theme, group) {
215
- let messageOptionList = [];
216
- messageOptionList = ChatConfigurator.getDataSource().getCommonOptions(loggedInUser, messageObject, theme, group);
217
- return messageOptionList;
218
- }
219
- getBottomView(_messageObject, _alignment) {
220
- return null;
221
- }
222
- getSchedulerMessageTemplate() {
223
- return new CometChatMessageTemplate({
224
- type: CometChatUIKitConstants.MessageTypes.scheduler,
225
- category: CometChatUIKitConstants.MessageCategory.interactive,
226
- options: ChatConfigurator.getDataSource().getMessageOptions,
227
- });
228
- }
229
- getTextMessageTemplate() {
230
- return new CometChatMessageTemplate({
231
- type: CometChatUIKitConstants.MessageTypes.text,
232
- category: CometChatUIKitConstants.MessageCategory.message,
233
- options: ChatConfigurator.getDataSource().getMessageOptions,
234
- });
235
- }
236
- getAudioMessageTemplate() {
237
- return new CometChatMessageTemplate({
238
- type: CometChatUIKitConstants.MessageTypes.audio,
239
- category: CometChatUIKitConstants.MessageCategory.message,
240
- options: ChatConfigurator.getDataSource().getMessageOptions,
241
- });
242
- }
243
- getVideoMessageTemplate() {
244
- return new CometChatMessageTemplate({
245
- type: CometChatUIKitConstants.MessageTypes.video,
246
- category: CometChatUIKitConstants.MessageCategory.message,
247
- options: ChatConfigurator.getDataSource().getMessageOptions,
248
- });
249
- }
250
- getImageMessageTemplate() {
251
- return new CometChatMessageTemplate({
252
- type: CometChatUIKitConstants.MessageTypes.image,
253
- category: CometChatUIKitConstants.MessageCategory.message,
254
- options: ChatConfigurator.getDataSource().getMessageOptions,
255
- });
256
- }
257
- getGroupActionTemplate() {
258
- return new CometChatMessageTemplate({
259
- type: CometChatUIKitConstants.MessageTypes.groupMember,
260
- category: CometChatUIKitConstants.MessageCategory.action,
261
- });
262
- }
263
- getFileMessageTemplate() {
264
- return new CometChatMessageTemplate({
265
- type: CometChatUIKitConstants.MessageTypes.file,
266
- category: CometChatUIKitConstants.MessageCategory.message,
267
- options: ChatConfigurator.getDataSource().getMessageOptions,
268
- });
269
- }
270
- getFormMessageTemplate() {
271
- return new CometChatMessageTemplate({
272
- type: CometChatUIKitConstants.MessageTypes.form,
273
- category: CometChatUIKitConstants.MessageCategory.interactive,
274
- options: ChatConfigurator.getDataSource().getMessageOptions,
275
- });
276
- }
277
- getCardMessageTemplate() {
278
- return new CometChatMessageTemplate({
279
- type: CometChatUIKitConstants.MessageTypes.card,
280
- category: CometChatUIKitConstants.MessageCategory.interactive,
281
- options: ChatConfigurator.getDataSource().getMessageOptions,
282
- });
283
- }
284
- /**
285
- * Function to check if a user's status should be visible
286
- * @param {CometChat.User | CometChat.GroupMember} user - The user whose status visibility is to be checked.
287
- * @return {boolean} - Returns `true` if the user's status should be hidden (blocked or offline), `false` otherwise.
288
- */
289
- getUserStatusVisibility(user) {
290
- let userBlockedFlag = false;
291
- if (user) {
292
- if (user.getBlockedByMe() || user.getHasBlockedMe() || user.getStatus() === CometChatUIKitConstants.userStatusType.offline) {
293
- userBlockedFlag = true;
294
- }
295
- }
296
- return userBlockedFlag;
297
- }
298
- getAllMessageTemplates() {
299
- return [
300
- ChatConfigurator.getDataSource().getTextMessageTemplate(),
301
- ChatConfigurator.getDataSource().getImageMessageTemplate(),
302
- ChatConfigurator.getDataSource().getVideoMessageTemplate(),
303
- ChatConfigurator.getDataSource().getAudioMessageTemplate(),
304
- ChatConfigurator.getDataSource().getFileMessageTemplate(),
305
- ChatConfigurator.getDataSource().getGroupActionTemplate(),
306
- ChatConfigurator.getDataSource().getFormMessageTemplate(),
307
- ChatConfigurator.getDataSource().getCardMessageTemplate(),
308
- ChatConfigurator.getDataSource().getSchedulerMessageTemplate(),
309
- ];
310
- }
311
- getMessageTemplate(messageType, messageCategory) {
312
- let _template = null;
313
- if (messageCategory != CometChatUIKitConstants.MessageCategory.call) {
314
- switch (messageType) {
315
- case CometChatUIKitConstants.MessageTypes.text:
316
- _template = ChatConfigurator.getDataSource().getTextMessageTemplate();
317
- break;
318
- case CometChatUIKitConstants.MessageTypes.image:
319
- _template =
320
- ChatConfigurator.getDataSource().getImageMessageTemplate();
321
- break;
322
- case CometChatUIKitConstants.MessageTypes.video:
323
- _template =
324
- ChatConfigurator.getDataSource().getVideoMessageTemplate();
325
- break;
326
- case CometChatUIKitConstants.MessageTypes.groupMember:
327
- _template = ChatConfigurator.getDataSource().getGroupActionTemplate();
328
- break;
329
- case CometChatUIKitConstants.MessageTypes.file:
330
- _template = ChatConfigurator.getDataSource().getFileMessageTemplate();
331
- break;
332
- case CometChatUIKitConstants.MessageTypes.audio:
333
- _template =
334
- ChatConfigurator.getDataSource().getAudioMessageTemplate();
335
- break;
336
- case CometChatUIKitConstants.MessageTypes.form:
337
- _template = ChatConfigurator.getDataSource().getFormMessageTemplate();
338
- break;
339
- case CometChatUIKitConstants.MessageTypes.card:
340
- _template = ChatConfigurator.getDataSource().getCardMessageTemplate();
341
- break;
342
- case CometChatUIKitConstants.MessageTypes.scheduler:
343
- _template =
344
- ChatConfigurator.getDataSource().getSchedulerMessageTemplate();
345
- break;
346
- }
347
- }
348
- return _template;
349
- }
350
- getMessageOptions(loggedInUser, messageObject, theme, group) {
351
- let _optionList = [];
352
- if (messageObject.getCategory() ==
353
- CometChatUIKitConstants.MessageCategory.message) {
354
- switch (messageObject.getType()) {
355
- case CometChatUIKitConstants.MessageTypes.text:
356
- _optionList = ChatConfigurator.getDataSource().getTextMessageOptions(loggedInUser, messageObject, theme, group);
357
- break;
358
- case CometChatUIKitConstants.MessageTypes.image:
359
- _optionList = ChatConfigurator.getDataSource().getImageMessageOptions(loggedInUser, messageObject, theme, group);
360
- break;
361
- case CometChatUIKitConstants.MessageTypes.video:
362
- _optionList = ChatConfigurator.getDataSource().getVideoMessageOptions(loggedInUser, messageObject, theme, group);
363
- break;
364
- case CometChatUIKitConstants.MessageTypes.groupMember:
365
- _optionList = [];
366
- break;
367
- case CometChatUIKitConstants.MessageTypes.file:
368
- _optionList = ChatConfigurator.getDataSource().getFileMessageOptions(loggedInUser, messageObject, theme, group);
369
- break;
370
- case CometChatUIKitConstants.MessageTypes.audio:
371
- _optionList = ChatConfigurator.getDataSource().getAudioMessageOptions(loggedInUser, messageObject, theme, group);
372
- break;
373
- }
374
- }
375
- else if (messageObject.getCategory() ==
376
- CometChatUIKitConstants.MessageCategory.custom ||
377
- messageObject.getCategory() ==
378
- CometChatUIKitConstants.MessageCategory.interactive) {
379
- _optionList = ChatConfigurator.getDataSource().getCommonOptions(loggedInUser, messageObject, theme, group);
380
- }
381
- return _optionList;
382
- }
383
- getCommonOptions(loggedInUser, messageObject, theme, group) {
384
- let isSentByMe = this.isSentByMe(loggedInUser, messageObject);
385
- let isParticipant = false;
386
- if (group?.getScope() == CometChatUIKitConstants.groupMemberScope.participant)
387
- isParticipant = true;
388
- let messageOptionList = [];
389
- messageOptionList.push(this.getReactionOption(theme));
390
- if (!messageObject?.getParentMessageId()) {
391
- messageOptionList.push(this.getReplyInThreadOption(theme));
392
- }
393
- if (isSentByMe) {
394
- messageOptionList.push(this.getMessageInfoOption(theme));
395
- }
396
- if (isSentByMe || (!isParticipant && group))
397
- messageOptionList.push(this.getDeleteOption(theme));
398
- if (group && !isSentByMe) {
399
- messageOptionList.push(this.getMessagePrivatelyOption(theme));
400
- }
401
- return messageOptionList;
402
- }
403
- getAllMessageTypes() {
404
- return [
405
- CometChatUIKitConstants.MessageTypes.text,
406
- CometChatUIKitConstants.MessageTypes.image,
407
- CometChatUIKitConstants.MessageTypes.audio,
408
- CometChatUIKitConstants.MessageTypes.video,
409
- CometChatUIKitConstants.MessageTypes.file,
410
- CometChatUIKitConstants.MessageTypes.groupMember,
411
- CometChatUIKitConstants.MessageTypes.form,
412
- CometChatUIKitConstants.MessageTypes.card,
413
- CometChatUIKitConstants.MessageTypes.scheduler,
414
- ];
415
- }
416
- addList() {
417
- return "<Message Utils>";
418
- }
419
- getAllMessageCategories() {
420
- return [
421
- CometChatUIKitConstants.MessageCategory.message,
422
- CometChatUIKitConstants.MessageCategory.action,
423
- CometChatUIKitConstants.MessageCategory.interactive,
424
- ];
425
- }
426
- getAuxiliaryOptions(id, user, group) {
427
- return null;
428
- }
429
- getId() {
430
- return "messageUtils";
431
- }
432
- getActionMessage(message) {
433
- try {
434
- if (message instanceof CometChat.Action) {
435
- const action = message.getAction();
436
- const actionBy = message.getActionBy();
437
- const actionOn = message.getActionOn();
438
- const byString = actionBy.getName();
439
- const forString = action === CometChatUIKitConstants.groupMemberAction.JOINED ||
440
- action === CometChatUIKitConstants.groupMemberAction.LEFT
441
- ? ""
442
- : actionOn.getName();
443
- switch (action) {
444
- case CometChatUIKitConstants.groupMemberAction.ADDED:
445
- return `${byString} ${localize("ADDED")} ${forString}`;
446
- case CometChatUIKitConstants.groupMemberAction.JOINED:
447
- return `${byString} ${localize("JOINED")}`;
448
- case CometChatUIKitConstants.groupMemberAction.LEFT:
449
- return `${byString} ${localize("LEFT")}`;
450
- case CometChatUIKitConstants.groupMemberAction.KICKED:
451
- return `${byString} ${localize("KICKED")} ${forString}`;
452
- case CometChatUIKitConstants.groupMemberAction.BANNED:
453
- return `${byString} ${localize("BANNED")} ${forString}`;
454
- case CometChatUIKitConstants.groupMemberAction.UNBANNED:
455
- return `${byString} ${localize("UNBANNED")} ${forString}`;
456
- case CometChatUIKitConstants.groupMemberAction.SCOPE_CHANGE:
457
- return `${byString} ${localize("MADE")} ${forString} ${message.getNewScope()}`;
458
- default:
459
- return "";
460
- }
461
- }
462
- else {
463
- return "";
464
- }
465
- }
466
- catch (e) {
467
- return "";
468
- }
469
- }
470
- imageAttachmentOption(theme) {
471
- return new CometChatMessageComposerAction({
472
- id: CometChatUIKitConstants.MessageTypes.image,
473
- title: localize("ATTACH_IMAGE"),
474
- iconURL: "assets/photolibrary.svg",
475
- onClick: null,
476
- iconTint: theme.palette.getAccent700(),
477
- titleFont: fontHelper(theme.typography.subtitle1),
478
- titleColor: theme.palette.getAccent700(),
479
- borderRadius: "8px",
480
- background: theme.palette.getAccent100(),
481
- });
482
- }
483
- videoAttachmentOption(theme) {
484
- return new CometChatMessageComposerAction({
485
- id: CometChatUIKitConstants.MessageTypes.video,
486
- title: localize("ATTACH_VIDEO"),
487
- iconURL: "assets/video.svg",
488
- onClick: null,
489
- iconTint: theme.palette.getAccent700(),
490
- titleFont: fontHelper(theme.typography.subtitle1),
491
- titleColor: theme.palette.getAccent700(),
492
- borderRadius: "8px",
493
- background: theme.palette.getAccent100(),
494
- });
495
- }
496
- audioAttachmentOption(theme) {
497
- return new CometChatMessageComposerAction({
498
- id: CometChatUIKitConstants.MessageTypes.audio,
499
- title: localize("ATTACH_AUDIO"),
500
- iconURL: "assets/audio-file.svg",
501
- onClick: null,
502
- iconTint: theme.palette.getAccent700(),
503
- titleFont: fontHelper(theme.typography.subtitle1),
504
- titleColor: theme.palette.getAccent700(),
505
- borderRadius: "8px",
506
- background: theme.palette.getAccent100(),
507
- });
508
- }
509
- fileAttachmentOption(theme) {
510
- return new CometChatMessageComposerAction({
511
- id: CometChatUIKitConstants.MessageTypes.file,
512
- title: localize("ATTACH_FILE"),
513
- iconURL: "assets/attachment-file.svg",
514
- onClick: null,
515
- iconTint: theme.palette.getAccent700(),
516
- titleFont: fontHelper(theme.typography.subtitle1),
517
- titleColor: theme.palette.getAccent700(),
518
- borderRadius: "8px",
519
- background: theme.palette.getAccent100(),
520
- });
521
- }
522
- getAttachmentOptions(theme, user, group, id) {
523
- let actions = [
524
- this.imageAttachmentOption(theme),
525
- this.videoAttachmentOption(theme),
526
- this.audioAttachmentOption(theme),
527
- this.fileAttachmentOption(theme),
528
- ];
529
- return actions;
530
- }
531
- getLastConversationMessage(conversation, loggedInUser, additionalConfigurations) {
532
- let config = {
533
- ...additionalConfigurations,
534
- textFormatters: additionalConfigurations?.textFormatters &&
535
- additionalConfigurations?.textFormatters.length
536
- ? [...additionalConfigurations.textFormatters]
537
- : [this.getMentionsTextFormatter({ theme: additionalConfigurations.theme, disableMentions: additionalConfigurations.disableMentions })],
538
- };
539
- let message = ConversationUtils.getLastConversationMessage(conversation, loggedInUser, config);
540
- let messageObject = conversation?.getLastMessage();
541
- if (messageObject) {
542
- let textFormatters = config.textFormatters;
543
- if (config && !config.disableMentions) {
544
- let mentionsTextFormatter;
545
- for (let i = 0; i < textFormatters.length; i++) {
546
- if (textFormatters[i] instanceof CometChatMentionsFormatter) {
547
- mentionsTextFormatter = textFormatters[i];
548
- mentionsTextFormatter.setMessage(messageObject);
549
- if (messageObject.getMentionedUsers().length) {
550
- mentionsTextFormatter.setCometChatUserGroupMembers(messageObject.getMentionedUsers());
551
- }
552
- mentionsTextFormatter.setLoggedInUser(CometChatUIKitLoginListener.getLoggedInUser());
553
- }
554
- if (mentionsTextFormatter) {
555
- break;
556
- }
557
- }
558
- if (!mentionsTextFormatter) {
559
- mentionsTextFormatter =
560
- ChatConfigurator.getDataSource().getMentionsTextFormatter({
561
- messageObject,
562
- ...config,
563
- alignment: null,
564
- theme: additionalConfigurations.theme,
565
- });
566
- textFormatters.push(mentionsTextFormatter);
567
- }
568
- }
569
- if (messageObject &&
570
- messageObject instanceof CometChat.TextMessage) {
571
- for (let i = 0; i < textFormatters.length; i++) {
572
- message = textFormatters[i].getFormattedText(message, { mentionsTargetElement: MentionsTargetElement.conversation });
573
- }
574
- }
575
- }
576
- return message;
577
- }
578
- /**
579
- * Adds styled @ for every mention in the text by matching uid
580
- *
581
- * @param {CometChat.TextMessage} message
582
- * @param {string} subtitle
583
- * @returns {void}
584
- */
585
- getMentionsFormattedText(message, subtitle, mentionsFormatterParams) {
586
- const regex = /<@uid:(.*?)>/g;
587
- let messageText = message.getText();
588
- let messageTextTmp = subtitle;
589
- let match = regex.exec(messageText);
590
- let cometChatUsers = [];
591
- let mentionedUsers = message.getMentionedUsers();
592
- while (match !== null) {
593
- let user;
594
- for (let i = 0; i < mentionedUsers.length; i++) {
595
- if (match[1] == mentionedUsers[i].getUid()) {
596
- user = mentionedUsers[i];
597
- }
598
- }
599
- if (user) {
600
- cometChatUsers.push(user);
601
- }
602
- match = regex.exec(messageText);
603
- }
604
- let mentionsFormatter = this.getMentionsTextFormatter(mentionsFormatterParams);
605
- mentionsFormatter.setClasses(["cc-mentions"]);
606
- mentionsFormatter.setCometChatUserGroupMembers(cometChatUsers);
607
- messageTextTmp = mentionsFormatter.getFormattedText(messageTextTmp, mentionsFormatterParams);
608
- return messageTextTmp;
609
- }
610
- getAIOptions(theme, id) {
611
- return [];
612
- }
613
- getAllTextFormatters(formatterParams) {
614
- let formatters = [];
615
- const mentionsFormatter = formatterParams.disableMentions ? null : ChatConfigurator.getDataSource().getMentionsTextFormatter(formatterParams);
616
- const urlTextFormatter = ChatConfigurator.getDataSource().getUrlTextFormatter(formatterParams);
617
- if (mentionsFormatter) {
618
- formatters.push(mentionsFormatter);
619
- }
620
- if (urlTextFormatter) {
621
- formatters.push(urlTextFormatter);
622
- }
623
- return formatters;
624
- }
625
- getMentionsTextFormatter(params) {
626
- let mentionsTextFormatter = new CometChatMentionsFormatter();
627
- if (params && params.theme) {
628
- mentionsTextFormatter.setComposerMentionStyle(new UserMentionStyle({
629
- loggedInUserTextFont: fontHelper(params.theme.typography.text2),
630
- loggedInUserTextColor: params.theme.palette.getPrimary(),
631
- loggedInUserTextBackground: "",
632
- mentionTextFont: fontHelper(params.theme.typography.text2),
633
- mentionTextColor: params.theme.palette.getPrimary(),
634
- mentionTextBackground: "",
635
- }));
636
- mentionsTextFormatter.setConversationMentionStyle(new UserMentionStyle({
637
- loggedInUserTextFont: fontHelper(params.theme.typography.text3),
638
- loggedInUserTextColor: params.theme.palette.getPrimary(),
639
- loggedInUserTextBackground: "",
640
- mentionTextFont: fontHelper(params.theme.typography.text3),
641
- mentionTextColor: params.theme.palette.getPrimary(),
642
- mentionTextBackground: "",
643
- }));
644
- mentionsTextFormatter.setRightBubbleMentionStyle(new UserMentionStyle({
645
- loggedInUserTextFont: fontHelper(params.theme.typography.text3),
646
- loggedInUserTextColor: params.theme.palette.getTertiary(),
647
- loggedInUserTextBackground: "",
648
- mentionTextFont: fontHelper(params.theme.typography.text3),
649
- mentionTextColor: params.theme.palette.getTertiary(),
650
- mentionTextBackground: "",
651
- }));
652
- mentionsTextFormatter.setLeftBubbleMentionStyle(new UserMentionStyle({
653
- loggedInUserTextFont: fontHelper(params.theme.typography.text3),
654
- loggedInUserTextColor: params.theme.palette.getPrimary(),
655
- loggedInUserTextBackground: "",
656
- mentionTextFont: fontHelper(params.theme.typography.text3),
657
- mentionTextColor: params.theme.palette.getPrimary(),
658
- mentionTextBackground: "",
659
- }));
660
- }
661
- return mentionsTextFormatter;
662
- }
663
- getUrlTextFormatter(params = {}) {
664
- let urlTextFormatter = new CometChatUrlsFormatter([
665
- /(https?:\/\/[^\s]+)/g,
666
- ]);
667
- if (params.alignment == MessageBubbleAlignment.left) {
668
- urlTextFormatter.setStyle({
669
- formattedTextColor: params.theme.palette.getPrimary(),
670
- formattedTextFont: fontHelper(params.theme.typography.text3),
671
- });
672
- }
673
- else {
674
- urlTextFormatter.setStyle({
675
- formattedTextColor: params.theme.palette.getTertiary(),
676
- formattedTextFont: fontHelper(params.theme.typography.text3),
677
- });
678
- }
679
- return urlTextFormatter;
680
- }
681
- }
682
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVzc2FnZVV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9TaGFyZWQvVXRpbHMvTWVzc2FnZVV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4Qiw4QkFBOEIsRUFFOUIsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixVQUFVLEVBRVYscUJBQXFCLEdBQ3RCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUNMLDBCQUEwQixFQUUxQiwyQkFBMkIsRUFDM0Isc0JBQXNCLEVBQ3RCLGlCQUFpQixFQUNqQixnQkFBZ0IsR0FDakIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFakUsTUFBTSxPQUFPLFlBQVk7SUFDdkI7Ozs7S0FJQztJQUVELGFBQWEsQ0FBQyxLQUFxQjtRQUNqQyxPQUFPLElBQUksc0JBQXNCLENBQUM7WUFDaEMsRUFBRSxFQUFFLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxXQUFXO1lBQ3JELEtBQUssRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRSxxQkFBcUI7WUFDOUIsT0FBTyxFQUFFLElBQUk7WUFDYixRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDdEMsZUFBZSxFQUFFLGFBQWE7WUFDOUIsU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUNqRCxVQUFVLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNEOzs7O0tBSUM7SUFF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SUFFRCxtQkFBbUIsQ0FBQyxTQUFjLEVBQUU7UUFDbEMsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLHNCQUFzQixDQUFDO1lBQ2hELHNCQUFzQjtTQUN2QixDQUFDLENBQUM7UUFDSCxJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksc0JBQXNCLENBQUMsSUFBSSxFQUFFO1lBQ25ELGdCQUFnQixDQUFDLFFBQVEsQ0FBQztnQkFDeEIsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO2dCQUNyRCxpQkFBaUIsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQzdELENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtnQkFDdEQsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUM3RCxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tZXRDaGF0TWVzc2FnZU9wdGlvbixcbiAgTWVzc2FnZUJ1YmJsZUFsaWdubWVudCxcbiAgQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlLFxuICBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24sXG4gIENvbWV0Q2hhdFRoZW1lLFxuICBsb2NhbGl6ZSxcbiAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMsXG4gIGZvbnRIZWxwZXIsXG4gIENvbWV0Q2hhdEFjdGlvbnNWaWV3LFxuICBNZW50aW9uc1RhcmdldEVsZW1lbnQsXG59IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXJlc291cmNlc1wiO1xuaW1wb3J0IHtcbiAgQ29tZXRDaGF0TWVudGlvbnNGb3JtYXR0ZXIsXG4gIENvbWV0Q2hhdFRleHRGb3JtYXR0ZXIsXG4gIENvbWV0Q2hhdFVJS2l0TG9naW5MaXN0ZW5lcixcbiAgQ29tZXRDaGF0VXJsc0Zvcm1hdHRlcixcbiAgQ29udmVyc2F0aW9uVXRpbHMsXG4gIFVzZXJNZW50aW9uU3R5bGUsXG59IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXNoYXJlZFwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0IH0gZnJvbSBcIkBjb21ldGNoYXQvY2hhdC1zZGstamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gXCIuLi9GcmFtZXdvcmsvRGF0YVNvdXJjZVwiO1xuaW1wb3J0IHsgQ2hhdENvbmZpZ3VyYXRvciB9IGZyb20gXCIuLi9GcmFtZXdvcmsvQ2hhdENvbmZpZ3VyYXRvclwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0VUlLaXQgfSBmcm9tIFwiLi4vQ29tZXRDaGF0VUlraXQvQ29tZXRDaGF0VUlLaXRcIjtcbmV4cG9ydCBjbGFzcyBNZXNzYWdlVXRpbHMgaW1wbGVtZW50cyBEYXRhU291cmNlIHtcbiAgLyoqXG4gKiBDcmVhdGVzIGFuIG9wdGlvbiB0byBlZGl0IG1lc3NhZ2UuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdFRoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSBvYmplY3QuXG4gKiBAcmV0dXJuIHtDb21ldENoYXRNZXNzYWdlT3B0aW9ufSAtIFJldHVybnMgYSBuZXcgbWVzc2FnZSBvcHRpb24uXG4gKi9cblxuICBnZXRFZGl0T3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZU9wdGlvbih7XG4gICAgICBpZDogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZU9wdGlvbi5lZGl0TWVzc2FnZSxcbiAgICAgIHRpdGxlOiBsb2NhbGl6ZShcIkVESVRcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9lZGl0aWNvbi5zdmdcIixcbiAgICAgIG9uQ2xpY2s6IG51bGwsXG4gICAgICBpY29uVGludDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gKiBDcmVhdGVzIGFuIG9wdGlvbiB0byByZWFjdCB0byBhIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdFRoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSBvYmplY3QuXG4gKiBAcmV0dXJuIHtDb21ldENoYXRNZXNzYWdlT3B0aW9ufSAtIFJldHVybnMgYSBuZXcgbWVzc2FnZSBvcHRpb24uXG4gKi9cblxuICBnZXRSZWFjdGlvbk9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlT3B0aW9uIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24oe1xuICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VPcHRpb24ucmVhY3RUb01lc3NhZ2UsXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJSRUFDVFwiKSxcbiAgICAgIGljb25VUkw6IFwiYXNzZXRzL2FkZHJlYWN0aW9uLnN2Z1wiLFxuICAgICAgb25DbGljazogdW5kZWZpbmVkLFxuICAgICAgaWNvblRpbnQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICB0aXRsZUNvbG9yOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICogQ3JlYXRlcyBhbiBvcHRpb24gdG8gZ2V0IGluZm8gYWJvdXQgYSBtZXNzYWdlLlxuICogQHBhcmFtIHtDb21ldENoYXRUaGVtZX0gdGhlbWUgLSBUaGUgdGhlbWUgb2JqZWN0LlxuICogQHJldHVybiB7Q29tZXRDaGF0TWVzc2FnZU9wdGlvbn0gLSBSZXR1cm5zIGEgbmV3IG1lc3NhZ2Ugb3B0aW9uLlxuICovXG5cbiAgZ2V0TWVzc2FnZUluZm9PcHRpb24odGhlbWU6IENvbWV0Q2hhdFRoZW1lKTogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlT3B0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlT3B0aW9uLm1lc3NhZ2VJbmZvcm1hdGlvbixcbiAgICAgIHRpdGxlOiBsb2NhbGl6ZShcIklORk9cIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9JbmZvLnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgKiBDcmVhdGVzIGFuIG9wdGlvbiB0byBzZW5kIGEgcHJpdmF0ZSBtZXNzYWdlLlxuICAqIEBwYXJhbSB7Q29tZXRDaGF0VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIG9iamVjdC5cbiAgKiBAcmV0dXJuIHtDb21ldENoYXRNZXNzYWdlT3B0aW9ufSAtIFJldHVybnMgYSBuZXcgbWVzc2FnZSBvcHRpb24uXG4gICovXG4gIGdldE1lc3NhZ2VQcml2YXRlbHlPcHRpb24odGhlbWU6IENvbWV0Q2hhdFRoZW1lKTogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlT3B0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlT3B0aW9uLnNlbmRNZXNzYWdlUHJpdmF0ZWx5LFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiTUVTU0FHRV9QUklWQVRFTFlcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9tZXNzYWdlLXByaXZhdGVseS5zdmdcIixcbiAgICAgIG9uQ2xpY2s6IG51bGwsXG4gICAgICBpY29uVGludDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gKiBDcmVhdGVzIGFuIG9wdGlvbiB0byBkZWxldGUgYSBtZXNzYWdlLlxuICogQHBhcmFtIHtDb21ldENoYXRUaGVtZX0gdGhlbWUgLSBUaGUgdGhlbWUgb2JqZWN0LlxuICogQHJldHVybiB7Q29tZXRDaGF0TWVzc2FnZU9wdGlvbn0gLSBSZXR1cm5zIGEgbmV3IG1lc3NhZ2Ugb3B0aW9uLlxuICovXG5cbiAgZ2V0RGVsZXRlT3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZU9wdGlvbih7XG4gICAgICBpZDogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZU9wdGlvbi5kZWxldGVNZXNzYWdlLFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiREVMRVRFXCIpLFxuICAgICAgaWNvblVSTDogXCJhc3NldHMvZGVsZXRlaWNvbi5zdmdcIixcbiAgICAgIG9uQ2xpY2s6IG51bGwsXG4gICAgICBpY29uVGludDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gKiBDcmVhdGVzIGFuIG9wdGlvbiB0byByZXBseSB0byBhIG1lc3NhZ2UgaW4gYSB0aHJlYWQuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdFRoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSBvYmplY3QuXG4gKiBAcmV0dXJuIHtDb21ldENoYXRNZXNzYWdlT3B0aW9ufSAtIFJldHVybnMgYSBuZXcgbWVzc2FnZSBvcHRpb24uXG4gKi9cblxuICBnZXRSZXBseUluVGhyZWFkT3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZU9wdGlvbih7XG4gICAgICBpZDogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZU9wdGlvbi5yZXBseUluVGhyZWFkLFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiUkVQTFlcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy90aHJlYWRpY29uLnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAqIENyZWF0ZXMgYW4gb3B0aW9uIHRvIGNvcHkgYSBtZXNzYWdlLlxuICogQHBhcmFtIHtDb21ldENoYXRUaGVtZX0gdGhlbWUgLSBUaGUgdGhlbWUgb2JqZWN0LlxuICogQHJldHVybiB7Q29tZXRDaGF0TWVzc2FnZU9wdGlvbn0gLSBSZXR1cm5zIGEgbmV3IG1lc3NhZ2Ugb3B0aW9uLlxuICovXG4gIGdldENvcHlPcHRpb24odGhlbWU6IENvbWV0Q2hhdFRoZW1lKTogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlT3B0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlT3B0aW9uLmNvcHlNZXNzYWdlLFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiQ09QWVwiKSxcbiAgICAgIGljb25VUkw6IFwiYXNzZXRzL0NvcHkuc3ZnXCIsXG4gICAgICBvbkNsaWNrOiBudWxsLFxuICAgICAgaWNvblRpbnQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICB0aXRsZUNvbG9yOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICogQ2hlY2tzIGlmIGEgbWVzc2FnZSBpcyBzZW50IGJ5IGN1cnJlbnQgbG9nZ2VkIGluIHVzZXIuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdC5Vc2VyfSBsb2dnZWRJblVzZXIgLSBUaGUgY3VycmVudCBsb2dnZWQgaW4gdXNlci5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0LkJhc2VNZXNzYWdlfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJuIHtib29sZWFufSAtIFJldHVybnMgdHJ1ZSBpZiBtZXNzYWdlIGlzIHNlbnQgYnkgY3VycmVudCBsb2dnZWQgaW4gdXNlciwgb3RoZXJ3aXNlIGZhbHNlLlxuICovXG5cbiAgaXNTZW50QnlNZShcbiAgICBsb2dnZWRJblVzZXI6IENvbWV0Q2hhdC5Vc2VyLFxuICAgIG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZVxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gbG9nZ2VkSW5Vc2VyLmdldFVpZCgpID09PSBtZXNzYWdlLmdldFNlbmRlcigpLmdldFVpZCgpO1xuICB9XG4gIC8qKlxuICogRmV0Y2hlcyBvcHRpb25zIGZvciB0ZXh0IG1lc3NhZ2VzLlxuICogQHBhcmFtIHtDb21ldENoYXQuVXNlcn0gbG9nZ2VkSW5Vc2VyIC0gVGhlIGN1cnJlbnQgbG9nZ2VkIGluIHVzZXIuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZU9iamVjdCAtIFRoZSBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIG9iamVjdC5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0Lkdyb3VwfSBncm91cCAtIFRoZSBncm91cCBvYmplY3QuXG4gKiBAcmV0dXJuIHtBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPn0gLSBSZXR1cm5zIGFuIGFycmF5IG9mIG1lc3NhZ2Ugb3B0aW9ucy5cbiAqL1xuXG4gIGdldFRleHRNZXNzYWdlT3B0aW9ucyhcbiAgICBsb2dnZWRJblVzZXI6IENvbWV0Q2hhdC5Vc2VyLFxuICAgIG1lc3NhZ2VPYmplY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSxcbiAgICB0aGVtZTogQ29tZXRDaGF0VGhlbWUsXG4gICAgZ3JvdXA/OiBDb21ldENoYXQuR3JvdXBcbiAgKTogQXJyYXk8Q29tZXRDaGF0TWVzc2FnZU9wdGlvbj4ge1xuICAgIGxldCBpc1NlbnRCeU1lOiBib29sZWFuID0gdGhpcy5pc1NlbnRCeU1lKGxvZ2dlZEluVXNlciwgbWVzc2FnZU9iamVjdCk7XG4gICAgbGV0IGlzUGFydGljaXBhbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAoXG4gICAgICBncm91cD8uZ2V0U2NvcGUoKSA9PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlclNjb3BlLnBhcnRpY2lwYW50XG4gICAgKSB7XG4gICAgICBpc1BhcnRpY2lwYW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgbGV0IG1lc3NhZ2VPcHRpb25MaXN0OiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiA9IFtdO1xuICAgIG1lc3NhZ2VPcHRpb25MaXN0LnB1c2godGhpcy5nZXRSZWFjdGlvbk9wdGlvbih0aGVtZSkpO1xuICAgIGlmICghbWVzc2FnZU9iamVjdC5nZXRQYXJlbnRNZXNzYWdlSWQoKSkge1xuICAgICAgbWVzc2FnZU9wdGlvbkxpc3QucHVzaCh0aGlzLmdldFJlcGx5SW5UaHJlYWRPcHRpb24odGhlbWUpKTtcbiAgICB9XG4gICAgbWVzc2FnZU9wdGlvbkxpc3QucHVzaCh0aGlzLmdldENvcHlPcHRpb24odGhlbWUpKTtcbiAgICBpZiAoaXNTZW50QnlNZSB8fCAoIWlzUGFydGljaXBhbnQgJiYgZ3JvdXApKSB7XG4gICAgICBtZXNzYWdlT3B0aW9uTGlzdC5wdXNoKHRoaXMuZ2V0RWRpdE9wdGlvbih0aGVtZSkpO1xuICAgIH1cbiAgICBpZiAoaXNTZW50QnlNZSkge1xuICAgICAgbWVzc2FnZU9wdGlvbkxpc3QucHVzaCh0aGlzLmdldE1lc3NhZ2VJbmZvT3B0aW9uKHRoZW1lKSk7XG4gICAgfVxuICAgIGlmIChpc1NlbnRCeU1lIHx8ICghaXNQYXJ0aWNpcGFudCAmJiBncm91cCkpXG4gICAgICBtZXNzYWdlT3B0aW9uTGlzdC5wdXNoKHRoaXMuZ2V0RGVsZXRlT3B0aW9uKHRoZW1lKSk7XG4gICAgaWYgKGdyb3VwICYmICFpc1NlbnRCeU1lKSB7XG4gICAgICBtZXNzYWdlT3B0aW9uTGlzdC5wdXNoKHRoaXMuZ2V0TWVzc2FnZVByaXZhdGVseU9wdGlvbih0aGVtZSkpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZU9wdGlvbkxpc3Q7XG4gIH1cbiAgLyoqXG4gKiBGZXRjaGVzIG9wdGlvbnMgZm9yIGltYWdlIG1lc3NhZ2VzLlxuICogQHBhcmFtIHtDb21ldENoYXQuVXNlcn0gbG9nZ2VkSW5Vc2VyIC0gVGhlIGN1cnJlbnQgbG9nZ2VkIGluIHVzZXIuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZU9iamVjdCAtIFRoZSBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIG9iamVjdC5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0Lkdyb3VwfSBncm91cCAtIFRoZSBncm91cCBvYmplY3QuXG4gKiBAcmV0dXJuIHtBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPn0gLSBSZXR1cm5zIGFuIGFycmF5IG9mIG1lc3NhZ2Ugb3B0aW9ucy5cbiAqL1xuICBnZXRJbWFnZU1lc3NhZ2VPcHRpb25zKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgbGV0IG1lc3NhZ2VPcHRpb25MaXN0OiBDb21ldENoYXRNZXNzYWdlT3B0aW9uW10gPSBbXTtcbiAgICBtZXNzYWdlT3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldENvbW1vbk9wdGlvbnMoXG4gICAgICBsb2dnZWRJblVzZXIsXG4gICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgdGhlbWUsXG4gICAgICBncm91cFxuICAgICk7XG4gICAgcmV0dXJuIG1lc3NhZ2VPcHRpb25MaXN0O1xuICB9XG4gIC8qKlxuICogRmV0Y2hlcyBvcHRpb25zIGZvciB2aWRlbyBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0LlVzZXJ9IGxvZ2dlZEluVXNlciAtIFRoZSBjdXJyZW50IGxvZ2dlZCBpbiB1c2VyLlxuICogQHBhcmFtIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VPYmplY3QgLSBUaGUgbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdFRoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSBvYmplY3QuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdC5Hcm91cH0gZ3JvdXAgLSAoT3B0aW9uYWwpIFRoZSBncm91cCBvYmplY3QuXG4gKiBAcmV0dXJuIHtBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPn0gLSBSZXR1cm5zIGFuIGFycmF5IG9mIG1lc3NhZ2Ugb3B0aW9ucy5cbiAqL1xuICBnZXRWaWRlb01lc3NhZ2VPcHRpb25zKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgbGV0IG1lc3NhZ2VPcHRpb25MaXN0OiBDb21ldENoYXRNZXNzYWdlT3B0aW9uW10gPSBbXTtcbiAgICBtZXNzYWdlT3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldENvbW1vbk9wdGlvbnMoXG4gICAgICBsb2dnZWRJblVzZXIsXG4gICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgdGhlbWUsXG4gICAgICBncm91cFxuICAgICk7XG4gICAgcmV0dXJuIG1lc3NhZ2VPcHRpb25MaXN0O1xuICB9XG4gIC8qKlxuICogRmV0Y2hlcyBvcHRpb25zIGZvciBhdWRpbyBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0LlVzZXJ9IGxvZ2dlZEluVXNlciAtIFRoZSBjdXJyZW50IGxvZ2dlZCBpbiB1c2VyLlxuICogQHBhcmFtIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VPYmplY3QgLSBUaGUgbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdFRoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSBvYmplY3QuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdC5Hcm91cH0gZ3JvdXAgLSAoT3B0aW9uYWwpIFRoZSBncm91cCBvYmplY3QuXG4gKiBAcmV0dXJuIHtBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPn0gLSBSZXR1cm5zIGFuIGFycmF5IG9mIG1lc3NhZ2Ugb3B0aW9ucy5cbiAqL1xuICBnZXRBdWRpb01lc3NhZ2VPcHRpb25zKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgbGV0IG1lc3NhZ2VPcHRpb25MaXN0OiBDb21ldENoYXRNZXNzYWdlT3B0aW9uW10gPSBbXTtcbiAgICBtZXNzYWdlT3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldENvbW1vbk9wdGlvbnMoXG4gICAgICBsb2dnZWRJblVzZXIsXG4gICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgdGhlbWUsXG4gICAgICBncm91cFxuICAgICk7XG4gICAgcmV0dXJuIG1lc3NhZ2VPcHRpb25MaXN0O1xuICB9XG4gIC8qKlxuICogRmV0Y2hlcyBvcHRpb25zIGZvciBmaWxlIG1lc3NhZ2VzLlxuICogQHBhcmFtIHtDb21ldENoYXQuVXNlcn0gbG9nZ2VkSW5Vc2VyIC0gVGhlIGN1cnJlbnQgbG9nZ2VkIGluIHVzZXIuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZU9iamVjdCAtIFRoZSBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIG9iamVjdC5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0Lkdyb3VwfSBncm91cCAtIChPcHRpb25hbCkgVGhlIGdyb3VwIG9iamVjdC5cbiAqIEByZXR1cm4ge0FycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+fSAtIFJldHVybnMgYW4gYXJyYXkgb2YgbWVzc2FnZSBvcHRpb25zLlxuICovXG4gIGdldEZpbGVNZXNzYWdlT3B0aW9ucyhcbiAgICBsb2dnZWRJblVzZXI6IENvbWV0Q2hhdC5Vc2VyLFxuICAgIG1lc3NhZ2VPYmplY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSxcbiAgICB0aGVtZTogQ29tZXRDaGF0VGhlbWUsXG4gICAgZ3JvdXA/OiBDb21ldENoYXQuR3JvdXBcbiAgKTogQXJyYXk8Q29tZXRDaGF0TWVzc2FnZU9wdGlvbj4ge1xuICAgIGxldCBtZXNzYWdlT3B0aW9uTGlzdDogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbltdID0gW107XG4gICAgbWVzc2FnZU9wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRDb21tb25PcHRpb25zKFxuICAgICAgbG9nZ2VkSW5Vc2VyLFxuICAgICAgbWVzc2FnZU9iamVjdCxcbiAgICAgIHRoZW1lLFxuICAgICAgZ3JvdXBcbiAgICApO1xuICAgIHJldHVybiBtZXNzYWdlT3B0aW9uTGlzdDtcbiAgfVxuICBnZXRCb3R0b21WaWV3KFxuICAgIF9tZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsXG4gICAgX2FsaWdubWVudDogTWVzc2FnZUJ1YmJsZUFsaWdubWVudFxuICApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXRTY2hlZHVsZXJNZXNzYWdlVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSh7XG4gICAgICB0eXBlOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuc2NoZWR1bGVyLFxuICAgICAgY2F0ZWdvcnk6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5pbnRlcmFjdGl2ZSxcbiAgICAgIG9wdGlvbnM6IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldE1lc3NhZ2VPcHRpb25zLFxuICAgIH0pO1xuICB9XG4gIGdldFRleHRNZXNzYWdlVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSh7XG4gICAgICB0eXBlOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudGV4dCxcbiAgICAgIGNhdGVnb3J5OiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkubWVzc2FnZSxcbiAgICAgIG9wdGlvbnM6IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldE1lc3NhZ2VPcHRpb25zLFxuICAgIH0pO1xuICB9XG4gIGdldEF1ZGlvTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmF1ZGlvLFxuICAgICAgY2F0ZWdvcnk6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5tZXNzYWdlLFxuICAgICAgb3B0aW9uczogQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgfSk7XG4gIH1cbiAgZ2V0VmlkZW9NZXNzYWdlVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSh7XG4gICAgICB0eXBlOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudmlkZW8sXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5Lm1lc3NhZ2UsXG4gICAgICBvcHRpb25zOiBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRNZXNzYWdlT3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuICBnZXRJbWFnZU1lc3NhZ2VUZW1wbGF0ZSgpOiBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlKHtcbiAgICAgIHR5cGU6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5pbWFnZSxcbiAgICAgIGNhdGVnb3J5OiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkubWVzc2FnZSxcbiAgICAgIG9wdGlvbnM6IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldE1lc3NhZ2VPcHRpb25zLFxuICAgIH0pO1xuICB9XG4gIGdldEdyb3VwQWN0aW9uVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSh7XG4gICAgICB0eXBlOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZ3JvdXBNZW1iZXIsXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmFjdGlvbixcbiAgICB9KTtcbiAgfVxuICBnZXRGaWxlTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZpbGUsXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5Lm1lc3NhZ2UsXG4gICAgICBvcHRpb25zOiBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRNZXNzYWdlT3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuICBnZXRGb3JtTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZvcm0sXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmludGVyYWN0aXZlLFxuICAgICAgb3B0aW9uczogQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBnZXRDYXJkTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmNhcmQsXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmludGVyYWN0aXZlLFxuICAgICAgb3B0aW9uczogQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gKiBGdW5jdGlvbiB0byBjaGVjayBpZiBhIHVzZXIncyBzdGF0dXMgc2hvdWxkIGJlIHZpc2libGVcbiAqIEBwYXJhbSB7Q29tZXRDaGF0LlVzZXIgfCBDb21ldENoYXQuR3JvdXBNZW1iZXJ9IHVzZXIgLSBUaGUgdXNlciB3aG9zZSBzdGF0dXMgdmlzaWJpbGl0eSBpcyB0byBiZSBjaGVja2VkLlxuICogQHJldHVybiB7Ym9vbGVhbn0gLSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdXNlcidzIHN0YXR1cyBzaG91bGQgYmUgaGlkZGVuIChibG9ja2VkIG9yIG9mZmxpbmUpLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuICBnZXRVc2VyU3RhdHVzVmlzaWJpbGl0eShcbiAgICB1c2VyPzogQ29tZXRDaGF0LlVzZXIgfCBDb21ldENoYXQuR3JvdXBNZW1iZXJcbiAgKSB7XG4gICAgbGV0IHVzZXJCbG9ja2VkRmxhZyA9IGZhbHNlO1xuICAgIGlmICh1c2VyKSB7XG4gICAgICBpZiAodXNlci5nZXRCbG9ja2VkQnlNZSgpIHx8IHVzZXIuZ2V0SGFzQmxvY2tlZE1lKCkgfHwgdXNlci5nZXRTdGF0dXMoKSA9PT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMudXNlclN0YXR1c1R5cGUub2ZmbGluZSkge1xuICAgICAgICB1c2VyQmxvY2tlZEZsYWcgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXNlckJsb2NrZWRGbGFnO1xuICB9XG4gIGdldEFsbE1lc3NhZ2VUZW1wbGF0ZXMoKTogQXJyYXk8Q29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFRleHRNZXNzYWdlVGVtcGxhdGUoKSxcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEltYWdlTWVzc2FnZVRlbXBsYXRlKCksXG4gICAgICBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRWaWRlb01lc3NhZ2VUZW1wbGF0ZSgpLFxuICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0QXVkaW9NZXNzYWdlVGVtcGxhdGUoKSxcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEZpbGVNZXNzYWdlVGVtcGxhdGUoKSxcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEdyb3VwQWN0aW9uVGVtcGxhdGUoKSxcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEZvcm1NZXNzYWdlVGVtcGxhdGUoKSxcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldENhcmRNZXNzYWdlVGVtcGxhdGUoKSxcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFNjaGVkdWxlck1lc3NhZ2VUZW1wbGF0ZSgpLFxuICAgIF07XG4gIH1cbiAgZ2V0TWVzc2FnZVRlbXBsYXRlKFxuICAgIG1lc3NhZ2VUeXBlOiBzdHJpbmcsXG4gICAgbWVzc2FnZUNhdGVnb3J5OiBzdHJpbmdcbiAgKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHwgbnVsbCB7XG4gICAgbGV0IF90ZW1wbGF0ZTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKG1lc3NhZ2VDYXRlZ29yeSAhPSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkuY2FsbCkge1xuICAgICAgc3dpdGNoIChtZXNzYWdlVHlwZSkge1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy50ZXh0OlxuICAgICAgICAgIF90ZW1wbGF0ZSA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFRleHRNZXNzYWdlVGVtcGxhdGUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuaW1hZ2U6XG4gICAgICAgICAgX3RlbXBsYXRlID1cbiAgICAgICAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEltYWdlTWVzc2FnZVRlbXBsYXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLnZpZGVvOlxuICAgICAgICAgIF90ZW1wbGF0ZSA9XG4gICAgICAgICAgICBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRWaWRlb01lc3NhZ2VUZW1wbGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5ncm91cE1lbWJlcjpcbiAgICAgICAgICBfdGVtcGxhdGUgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRHcm91cEFjdGlvblRlbXBsYXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZpbGU6XG4gICAgICAgICAgX3RlbXBsYXRlID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0RmlsZU1lc3NhZ2VUZW1wbGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5hdWRpbzpcbiAgICAgICAgICBfdGVtcGxhdGUgPVxuICAgICAgICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0QXVkaW9NZXNzYWdlVGVtcGxhdGUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZm9ybTpcbiAgICAgICAgICBfdGVtcGxhdGUgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRGb3JtTWVzc2FnZVRlbXBsYXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmNhcmQ6XG4gICAgICAgICAgX3RlbXBsYXRlID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0Q2FyZE1lc3NhZ2VUZW1wbGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5zY2hlZHVsZXI6XG4gICAgICAgICAgX3RlbXBsYXRlID1cbiAgICAgICAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFNjaGVkdWxlck1lc3NhZ2VUZW1wbGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX3RlbXBsYXRlO1xuICB9XG4gIGdldE1lc3NhZ2VPcHRpb25zKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgbGV0IF9vcHRpb25MaXN0OiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiA9IFtdO1xuICAgIGlmIChcbiAgICAgIG1lc3NhZ2VPYmplY3QuZ2V0Q2F0ZWdvcnkoKSA9PVxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5Lm1lc3NhZ2VcbiAgICApIHtcbiAgICAgIHN3aXRjaCAobWVzc2FnZU9iamVjdC5nZXRUeXBlKCkpIHtcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudGV4dDpcbiAgICAgICAgICBfb3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFRleHRNZXNzYWdlT3B0aW9ucyhcbiAgICAgICAgICAgIGxvZ2dlZEluVXNlcixcbiAgICAgICAgICAgIG1lc3NhZ2VPYmplY3QsXG4gICAgICAgICAgICB0aGVtZSxcbiAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuaW1hZ2U6XG4gICAgICAgICAgX29wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRJbWFnZU1lc3NhZ2VPcHRpb25zKFxuICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLFxuICAgICAgICAgICAgbWVzc2FnZU9iamVjdCxcbiAgICAgICAgICAgIHRoZW1lLFxuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy52aWRlbzpcbiAgICAgICAgICBfb3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFZpZGVvTWVzc2FnZU9wdGlvbnMoXG4gICAgICAgICAgICBsb2dnZWRJblVzZXIsXG4gICAgICAgICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgICAgICAgdGhlbWUsXG4gICAgICAgICAgICBncm91cFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmdyb3VwTWVtYmVyOlxuICAgICAgICAgIF9vcHRpb25MaXN0ID0gW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZpbGU6XG4gICAgICAgICAgX29wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRGaWxlTWVzc2FnZU9wdGlvbnMoXG4gICAgICAgICAgICBsb2dnZWRJblVzZXIsXG4gICAgICAgICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgICAgICAgdGhlbWUsXG4gICAgICAgICAgICBncm91cFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmF1ZGlvOlxuICAgICAgICAgIF9vcHRpb25MaXN0ID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0QXVkaW9NZXNzYWdlT3B0aW9ucyhcbiAgICAgICAgICAgIGxvZ2dlZEluVXNlcixcbiAgICAgICAgICAgIG1lc3NhZ2VPYmplY3QsXG4gICAgICAgICAgICB0aGVtZSxcbiAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgbWVzc2FnZU9iamVjdC5nZXRDYXRlZ29yeSgpID09XG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkuY3VzdG9tIHx8XG4gICAgICBtZXNzYWdlT2JqZWN0LmdldENhdGVnb3J5KCkgPT1cbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5pbnRlcmFjdGl2ZVxuICAgICkge1xuICAgICAgX29wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRDb21tb25PcHRpb25zKFxuICAgICAgICBsb2dnZWRJblVzZXIsXG4gICAgICAgIG1lc3NhZ2VPYmplY3QsXG4gICAgICAgIHRoZW1lLFxuICAgICAgICBncm91cFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIF9vcHRpb25MaXN0O1xuICB9XG4gIGdldENvbW1vbk9wdGlvbnMoXG4gICAgbG9nZ2VkSW5Vc2VyOiBDb21ldENoYXQuVXNlcixcbiAgICBtZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsXG4gICAgdGhlbWU6IENvbWV0Q2hhdFRoZW1lLFxuICAgIGdyb3VwPzogQ29tZXRDaGF0Lkdyb3VwXG4gICk6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+IHtcbiAgICBsZXQgaXNTZW50QnlNZTogYm9vbGVhbiA9IHRoaXMuaXNTZW50QnlNZShsb2dnZWRJblVzZXIsIG1lc3NhZ2VPYmplY3QpO1xuICAgIGxldCBpc1BhcnRpY2lwYW50OiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKGdyb3VwPy5nZXRTY29wZSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyU2NvcGUucGFydGljaXBhbnQpXG4gICAgICBpc1BhcnRpY2lwYW50ID0gdHJ1ZTtcbiAgICBsZXQgbWVzc2FnZU9wdGlvbkxpc3Q6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+ID0gW107XG4gICAgbWVzc2FnZU9wdGlvbkxpc3QucHVzaCh0aGlzLmdldFJlYWN0aW9uT3B0aW9uKHRoZW1lKSk7XG4gICAgaWYgKCFtZXNzYWdlT2JqZWN0Py5nZXRQYXJlbnRNZXNzYWdlSWQoKSkge1xuICAgICAgbWVzc2FnZU9wdGlvbkxpc3QucHVzaCh0aGlzLmdldFJlcGx5SW5UaHJlYWRPcHRpb24odGhlbWUpKTtcbiAgICB9XG4gICAgaWYgKGlzU2VudEJ5TWUpIHtcbiAgICAgIG1lc3NhZ2VPcHRpb25MaXN0LnB1c2godGhpcy5nZXRNZXNzYWdlSW5mb09wdGlvbih0aGVtZSkpO1xuICAgIH1cbiAgICBpZiAoaXNTZW50QnlNZSB8fCAoIWlzUGFydGljaXBhbnQgJiYgZ3JvdXApKVxuICAgICAgbWVzc2FnZU9wdGlvbkxpc3QucHVzaCh0aGlzLmdldERlbGV0ZU9wdGlvbih0aGVtZSkpO1xuICAgIGlmIChncm91cCAmJiAhaXNTZW50QnlNZSkge1xuICAgICAgbWVzc2FnZU9wdGlvbkxpc3QucHVzaCh0aGlzLmdldE1lc3NhZ2VQcml2YXRlbHlPcHRpb24odGhlbWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VPcHRpb25MaXN0O1xuICB9XG4gIGdldEFsbE1lc3NhZ2VUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gW1xuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLnRleHQsXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuaW1hZ2UsXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuYXVkaW8sXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudmlkZW8sXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZmlsZSxcbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5ncm91cE1lbWJlcixcbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5mb3JtLFxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmNhcmQsXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuc2NoZWR1bGVyLFxuICAgIF07XG4gIH1cbiAgYWRkTGlzdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjxNZXNzYWdlIFV0aWxzPlwiO1xuICB9XG4gIGdldEFsbE1lc3NhZ2VDYXRlZ29yaWVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBbXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkubWVzc2FnZSxcbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5hY3Rpb24sXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkuaW50ZXJhY3RpdmUsXG4gICAgXTtcbiAgfVxuICBnZXRBdXhpbGlhcnlPcHRpb25zKFxuICAgIGlkOiBDb21wb3NlcklkLFxuICAgIHVzZXI/OiBDb21ldENoYXQuVXNlcixcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBhbnkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibWVzc2FnZVV0aWxzXCI7XG4gIH1cbiAgZ2V0QWN0aW9uTWVzc2FnZShtZXNzYWdlOiBDb21ldENoYXQuQWN0aW9uKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBDb21ldENoYXQuQWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IG1lc3NhZ2UuZ2V0QWN0aW9uKCk7XG4gICAgICAgIGNvbnN0IGFjdGlvbkJ5ID0gbWVzc2FnZS5nZXRBY3Rpb25CeSgpO1xuICAgICAgICBjb25zdCBhY3Rpb25PbiA9IG1lc3NhZ2UuZ2V0QWN0aW9uT24oKTtcblxuICAgICAgICBjb25zdCBieVN0cmluZyA9IChhY3Rpb25CeSBhcyBDb21ldENoYXQuVXNlcikuZ2V0TmFtZSgpO1xuICAgICAgICBjb25zdCBmb3JTdHJpbmcgPVxuICAgICAgICAgIGFjdGlvbiA9PT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJBY3Rpb24uSk9JTkVEIHx8XG4gICAgICAgICAgICBhY3Rpb24gPT09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLkxFRlRcbiAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgOiAoYWN0aW9uT24gYXMgQ29tZXRDaGF0LlVzZXIpLmdldE5hbWUoKTtcblxuICAgICAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJBY3Rpb24uQURERUQ6XG4gICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXCJBRERFRFwiKX0gJHtmb3JTdHJpbmd9YDtcbiAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLkpPSU5FRDpcbiAgICAgICAgICAgIHJldHVybiBgJHtieVN0cmluZ30gJHtsb2NhbGl6ZShcIkpPSU5FRFwiKX1gO1xuICAgICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJBY3Rpb24uTEVGVDpcbiAgICAgICAgICAgIHJldHVybiBgJHtieVN0cmluZ30gJHtsb2NhbGl6ZShcIkxFRlRcIil9YDtcbiAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLktJQ0tFRDpcbiAgICAgICAgICAgIHJldHVybiBgJHtieVN0cmluZ30gJHtsb2NhbGl6ZShcIktJQ0tFRFwiKX0gJHtmb3JTdHJpbmd9YDtcbiAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLkJBTk5FRDpcbiAgICAgICAgICAgIHJldHVybiBgJHtieVN0cmluZ30gJHtsb2NhbGl6ZShcIkJBTk5FRFwiKX0gJHtmb3JTdHJpbmd9YDtcbiAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLlVOQkFOTkVEOlxuICAgICAgICAgICAgcmV0dXJuIGAke2J5U3RyaW5nfSAke2xvY2FsaXplKFwiVU5CQU5ORURcIil9ICR7Zm9yU3RyaW5nfWA7XG4gICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5TQ09QRV9DSEFOR0U6XG4gICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXG4gICAgICAgICAgICAgIFwiTUFERVwiXG4gICAgICAgICAgICApfSAke2ZvclN0cmluZ30gJHttZXNzYWdlLmdldE5ld1Njb3BlKCl9YDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIGltYWdlQXR0YWNobWVudE9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuaW1hZ2UsXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJBVFRBQ0hfSU1BR0VcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9waG90b2xpYnJhcnkuc3ZnXCIsXG4gICAgICBvbkNsaWNrOiBudWxsLFxuICAgICAgaWNvblRpbnQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ3MDAoKSxcbiAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIixcbiAgICAgIGJhY2tncm91bmQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MTAwKCksXG4gICAgfSk7XG4gIH1cbiAgdmlkZW9BdHRhY2htZW50T3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24oe1xuICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy52aWRlbyxcbiAgICAgIHRpdGxlOiBsb2NhbGl6ZShcIkFUVEFDSF9WSURFT1wiKSxcbiAgICAgIGljb25VUkw6IFwiYXNzZXRzL3ZpZGVvLnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDcwMCgpLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDEwMCgpLFxuICAgIH0pO1xuICB9XG4gIGF1ZGlvQXR0YWNobWVudE9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuYXVkaW8sXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJBVFRBQ0hfQVVESU9cIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9hdWRpby1maWxlLnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDcwMCgpLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDEwMCgpLFxuICAgIH0pO1xuICB9XG4gIGZpbGVBdHRhY2htZW50T3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24oe1xuICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5maWxlLFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiQVRUQUNIX0ZJTEVcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9hdHRhY2htZW50LWZpbGUuc3ZnXCIsXG4gICAgICBvbkNsaWNrOiBudWxsLFxuICAgICAgaWNvblRpbnQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ3MDAoKSxcbiAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIixcbiAgICAgIGJhY2tncm91bmQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MTAwKCksXG4gICAgfSk7XG4gIH1cbiAgZ2V0QXR0YWNobWVudE9wdGlvbnMoXG4gICAgdGhlbWU6IENvbWV0Q2hhdFRoZW1lLFxuICAgIHVzZXI/OiBDb21ldENoYXQuVXNlcixcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cCxcbiAgICBpZD86IENvbXBvc2VySWRcbiAgKTogQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uW10ge1xuICAgIGxldCBhY3Rpb25zOiBBcnJheTxDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24+ID0gW1xuICAgICAgdGhpcy5pbWFnZUF0dGFjaG1lbnRPcHRpb24odGhlbWUpLFxuICAgICAgdGhpcy52aWRlb0F0dGFjaG1lbnRPcHRpb24odGhlbWUpLFxuICAgICAgdGhpcy5hdWRpb0F0dGFjaG1lbnRPcHRpb24odGhlbWUpLFxuICAgICAgdGhpcy5maWxlQXR0YWNobWVudE9wdGlvbih0aGVtZSksXG4gICAgXTtcbiAgICByZXR1cm4gYWN0aW9ucztcbiAgfVxuXG4gIGdldExhc3RDb252ZXJzYXRpb25NZXNzYWdlKFxuICAgIGNvbnZlcnNhdGlvbjogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbixcbiAgICBsb2dnZWRJblVzZXI6IENvbWV0Q2hhdC5Vc2VyLFxuICAgIGFkZGl0aW9uYWxDb25maWd1cmF0aW9uczogYW55XG4gICk6IHN0cmluZyB7XG4gICAgbGV0IGNvbmZpZyA9IHtcbiAgICAgIC4uLmFkZGl0aW9uYWxDb25maWd1cmF0aW9ucyxcbiAgICAgIHRleHRGb3JtYXR0ZXJzOlxuICAgICAgICBhZGRpdGlvbmFsQ29uZmlndXJhdGlvbnM/LnRleHRGb3JtYXR0ZXJzICYmXG4gICAgICAgICAgYWRkaXRpb25hbENvbmZpZ3VyYXRpb25zPy50ZXh0Rm9ybWF0dGVycy5sZW5ndGhcbiAgICAgICAgICA/IFsuLi5hZGRpdGlvbmFsQ29uZmlndXJhdGlvbnMudGV4dEZvcm1hdHRlcnNdXG4gICAgICAgICAgOiBbdGhpcy5nZXRNZW50aW9uc1RleHRGb3JtYXR0ZXIoeyB0aGVtZTogYWRkaXRpb25hbENvbmZpZ3VyYXRpb25zLnRoZW1lLCBkaXNhYmxlTWVudGlvbnM6IGFkZGl0aW9uYWxDb25maWd1cmF0aW9ucy5kaXNhYmxlTWVudGlvbnMgfSldLFxuICAgIH07XG4gICAgbGV0IG1lc3NhZ2UgPSBDb252ZXJzYXRpb25VdGlscy5nZXRMYXN0Q29udmVyc2F0aW9uTWVzc2FnZShcbiAgICAgIGNvbnZlcnNhdGlvbixcbiAgICAgIGxvZ2dlZEluVXNlcixcbiAgICAgIGNvbmZpZ1xuICAgICk7XG4gICAgbGV0IG1lc3NhZ2VPYmplY3QgPSBjb252ZXJzYXRpb24/LmdldExhc3RNZXNzYWdlKCk7XG4gICAgaWYgKG1lc3NhZ2VPYmplY3QpIHtcbiAgICAgIGxldCB0ZXh0Rm9ybWF0dGVyczogQXJyYXk8Q29tZXRDaGF0VGV4dEZvcm1hdHRlcj4gPSBjb25maWcudGV4dEZvcm1hdHRlcnM7XG4gICAgICBpZiAoY29uZmlnICYmICFjb25maWcuZGlzYWJsZU1lbnRpb25zKSB7XG4gICAgICAgIGxldCBtZW50aW9uc1RleHRGb3JtYXR0ZXIhOiBDb21ldENoYXRNZW50aW9uc0Zvcm1hdHRlcjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Rm9ybWF0dGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh0ZXh0Rm9ybWF0dGVyc1tpXSBpbnN0YW5jZW9mIENvbWV0Q2hhdE1lbnRpb25zRm9ybWF0dGVyKSB7XG4gICAgICAgICAgICBtZW50aW9uc1RleHRGb3JtYXR0ZXIgPSB0ZXh0Rm9ybWF0dGVyc1tcbiAgICAgICAgICAgICAgaVxuICAgICAgICAgICAgXSBhcyBDb21ldENoYXRNZW50aW9uc0Zvcm1hdHRlcjtcbiAgICAgICAgICAgIG1lbnRpb25zVGV4dEZvcm1hdHRlci5zZXRNZXNzYWdlKG1lc3NhZ2VPYmplY3QpO1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QuZ2V0TWVudGlvbmVkVXNlcnMoKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgbWVudGlvbnNUZXh0Rm9ybWF0dGVyLnNldENvbWV0Q2hhdFVzZXJHcm91cE1lbWJlcnMoXG4gICAgICAgICAgICAgICAgbWVzc2FnZU9iamVjdC5nZXRNZW50aW9uZWRVc2VycygpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtZW50aW9uc1RleHRGb3JtYXR0ZXIuc2V0TG9nZ2VkSW5Vc2VyKFxuICAgICAgICAgICAgICBDb21ldENoYXRVSUtpdExvZ2luTGlzdGVuZXIuZ2V0TG9nZ2VkSW5Vc2VyKCkhXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWVudGlvbnNUZXh0Rm9ybWF0dGVyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtZW50aW9uc1RleHRGb3JtYXR0ZXIpIHtcbiAgICAgICAgICBtZW50aW9uc1RleHRGb3JtYXR0ZXIgPVxuICAgICAgICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVudGlvbnNUZXh0Rm9ybWF0dGVyKHtcbiAgICAgICAgICAgICAgbWVzc2FnZU9iamVjdCxcbiAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICBhbGlnbm1lbnQ6IG51bGwsXG4gICAgICAgICAgICAgIHRoZW1lOiBhZGRpdGlvbmFsQ29uZmlndXJhdGlvbnMudGhlbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB0ZXh0Rm9ybWF0dGVycy5wdXNoKG1lbnRpb25zVGV4dEZvcm1hdHRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBtZXNzYWdlT2JqZWN0ICYmXG4gICAgICAgIG1lc3NhZ2VPYmplY3QgaW5zdGFuY2VvZiBDb21ldENoYXQuVGV4dE1lc3NhZ2VcbiAgICAgICkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHRGb3JtYXR0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbWVzc2FnZSA9IHRleHRGb3JtYXR0ZXJzW2ldLmdldEZvcm1hdHRlZFRleHQobWVzc2FnZSwgeyBtZW50aW9uc1RhcmdldEVsZW1lbnQ6IE1lbnRpb25zVGFyZ2V0RWxlbWVudC5jb252ZXJzYXRpb24gfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBzdHlsZWQgQCBmb3IgZXZlcnkgbWVudGlvbiBpbiB0aGUgdGV4dCBieSBtYXRjaGluZyB1aWRcbiAgICpcbiAgICogQHBhcmFtIHtDb21ldENoYXQuVGV4dE1lc3NhZ2V9IG1lc3NhZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YnRpdGxlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZ2V0TWVudGlvbnNGb3JtYXR0ZWRUZXh0KFxuICAgIG1lc3NhZ2U6IENvbWV0Q2hhdC5UZXh0TWVzc2FnZSxcbiAgICBzdWJ0aXRsZTogc3RyaW5nLFxuICAgIG1lbnRpb25zRm9ybWF0dGVyUGFyYW1zOiB7XG4gICAgICBtZW50aW9uc1RhcmdldEVsZW1lbnQ6IE1lbnRpb25zVGFyZ2V0RWxlbWVudDtcbiAgICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZTtcbiAgICB9XG4gICkge1xuICAgIGNvbnN0IHJlZ2V4ID0gLzxAdWlkOiguKj8pPi9nO1xuICAgIGxldCBtZXNzYWdlVGV4dCA9IG1lc3NhZ2UuZ2V0VGV4dCgpO1xuICAgIGxldCBtZXNzYWdlVGV4dFRtcDogc3RyaW5nID0gc3VidGl0bGU7XG4gICAgbGV0IG1hdGNoID0gcmVnZXguZXhlYyhtZXNzYWdlVGV4dCk7XG4gICAgbGV0IGNvbWV0Q2hhdFVzZXJzOiBBcnJheTxDb21ldENoYXQuVXNlciB8IENvbWV0Q2hhdC5Hcm91cE1lbWJlcj4gPSBbXTtcbiAgICBsZXQgbWVudGlvbmVkVXNlcnMgPSBtZXNzYWdlLmdldE1lbnRpb25lZFVzZXJzKCk7XG4gICAgd2hpbGUgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgICBsZXQgdXNlcjtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVudGlvbmVkVXNlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKG1hdGNoWzFdID09IG1lbnRpb25lZFVzZXJzW2ldLmdldFVpZCgpKSB7XG4gICAgICAgICAgdXNlciA9IG1lbnRpb25lZFVzZXJzW2ldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodXNlcikge1xuICAgICAgICBjb21ldENoYXRVc2Vycy5wdXNoKHVzZXIpO1xuICAgICAgfVxuICAgICAgbWF0Y2ggPSByZWdleC5leGVjKG1lc3NhZ2VUZXh0KTtcbiAgICB9XG4gICAgbGV0IG1lbnRpb25zRm9ybWF0dGVyID0gdGhpcy5nZXRNZW50aW9uc1RleHRGb3JtYXR0ZXIoXG4gICAgICBtZW50aW9uc0Zvcm1hdHRlclBhcmFtc1xuICAgICk7XG4gICAgbWVudGlvbnNGb3JtYXR0ZXIuc2V0Q2xhc3NlcyhbXCJjYy1tZW50aW9uc1wiXSk7XG4gICAgbWVudGlvbnNGb3JtYXR0ZXIuc2V0Q29tZXRDaGF0VXNlckdyb3VwTWVtYmVycyhjb21ldENoYXRVc2Vycyk7XG4gICAgbWVzc2FnZVRleHRUbXAgPSBtZW50aW9uc0Zvcm1hdHRlci5nZXRGb3JtYXR0ZWRUZXh0KFxuICAgICAgbWVzc2FnZVRleHRUbXAsXG4gICAgICBtZW50aW9uc0Zvcm1hdHRlclBhcmFtc1xuICAgICkgYXMgc3RyaW5nO1xuICAgIHJldHVybiBtZXNzYWdlVGV4dFRtcDtcbiAgfVxuXG4gIGdldEFJT3B0aW9ucyhcbiAgICB0aGVtZTogQ29tZXRDaGF0VGhlbWUsXG4gICAgaWQ/OiBNYXA8U3RyaW5nLCBhbnk+XG4gICk6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbiB8IENvbWV0Q2hhdEFjdGlvbnNWaWV3PiB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0QWxsVGV4dEZvcm1hdHRlcnMoZm9ybWF0dGVyUGFyYW1zOiBhbnkpOiBDb21ldENoYXRUZXh0Rm9ybWF0dGVyW10ge1xuICAgIGxldCBmb3JtYXR0ZXJzID0gW107XG4gICAgY29uc3QgbWVudGlvbnNGb3JtYXR0ZXIgPSBmb3JtYXR0ZXJQYXJhbXMuZGlzYWJsZU1lbnRpb25zID8gbnVsbCA6IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldE1lbnRpb25zVGV4dEZvcm1hdHRlcihcbiAgICAgIGZvcm1hdHRlclBhcmFtc1xuICAgICk7XG4gICAgY29uc3QgdXJsVGV4dEZvcm1hdHRlciA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFVybFRleHRGb3JtYXR0ZXIoZm9ybWF0dGVyUGFyYW1zKTtcbiAgICBpZiAobWVudGlvbnNGb3JtYXR0ZXIpIHtcbiAgICAgIGZvcm1hdHRlcnMucHVzaChtZW50aW9uc0Zvcm1hdHRlcik7XG4gICAgfVxuICAgIGlmICh1cmxUZXh0Rm9ybWF0dGVyKSB7XG4gICAgICBmb3JtYXR0ZXJzLnB1c2godXJsVGV4dEZvcm1hdHRlcik7XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXR0ZXJzO1xuICB9XG5cbiAgZ2V0TWVudGlvbnNUZXh0Rm9ybWF0dGVyKHBhcmFtczogYW55KTogQ29tZXRDaGF0TWVudGlvbnNGb3JtYXR0ZXIge1xuICAgIGxldCBtZW50aW9uc1RleHRGb3JtYXR0ZXIgPSBuZXcgQ29tZXRDaGF0TWVudGlvbnNGb3JtYXR0ZXIoKTtcbiAgICBpZiAocGFyYW1zICYmIHBhcmFtcy50aGVtZSkge1xuICAgICAgbWVudGlvbnNUZXh0Rm9ybWF0dGVyLnNldENvbXBvc2VyTWVudGlvblN0eWxlKFxuICAgICAgICBuZXcgVXNlck1lbnRpb25TdHlsZSh7XG4gICAgICAgICAgbG9nZ2VkSW5Vc2VyVGV4dEZvbnQ6IGZvbnRIZWxwZXIocGFyYW1zLnRoZW1lLnR5cG9ncmFwaHkudGV4dDIpLFxuICAgICAgICAgIGxvZ2dlZEluVXNlclRleHRDb2xvcjogcGFyYW1zLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpLFxuICAgICAgICAgIGxvZ2dlZEluVXNlclRleHRCYWNrZ3JvdW5kOiBcIlwiLFxuICAgICAgICAgIG1lbnRpb25UZXh0Rm9udDogZm9udEhlbHBlcihwYXJhbXMudGhlbWUudHlwb2dyYXBoeS50ZXh0MiksXG4gICAgICAgICAgbWVudGlvblRleHRDb2xvcjogcGFyYW1zLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpLFxuICAgICAgICAgIG1lbnRpb25UZXh0QmFja2dyb3VuZDogXCJcIixcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBtZW50aW9uc1RleHRGb3JtYXR0ZXIuc2V0Q29udmVyc2F0aW9uTWVudGlvblN0eWxlKFxuICAgICAgICBuZXcgVXNlck1lbnRpb25TdHlsZSh7XG4gICAgICAgICAgbG9nZ2VkSW5Vc2VyVGV4dEZvbnQ6IGZvbnRIZWxwZXIocGFyYW1zLnRoZW1lLnR5cG9ncmFwaHkudGV4dDMpLFxuICAgICAgICAgIGxvZ2dlZEluVXNlclRleHRDb2xvcjogcGFyYW1zLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpLFxuICAgICAgICAgIGxvZ2dlZEluVXNlclRleHRCYWNrZ3JvdW5kOiBcIlwiLFxuICAgICAgICAgIG1lbnRpb25UZXh0Rm9udDogZm9udEhlbHBlcihwYXJhbXMudGhlbWUudHlwb2dyYXBoeS50ZXh0MyksXG4gICAgICAgICAgbWVudGlvblRleHRDb2xvcjogcGFyYW1zLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpLFxuICAgICAgICAgIG1lbnRpb25UZXh0QmFja2dyb3VuZDogXCJcIixcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBtZW50aW9uc1RleHRGb3JtYXR0ZXIuc2V0UmlnaHRCdWJibGVNZW50aW9uU3R5bGUoXG4gICAgICAgIG5ldyBVc2VyTWVudGlvblN0eWxlKHtcbiAgICAgICAgICBsb2dnZWRJblVzZXJUZXh0Rm9udDogZm9udEhlbHBlcihwYXJhbXMudGhlbWUudHlwb2dyYXBoeS50ZXh0MyksXG4gICAgICAgICAgbG9nZ2VkSW5Vc2VyVGV4dENvbG9yOiBwYXJhbXMudGhlbWUucGFsZXR0ZS5nZXRUZXJ0aWFyeSgpLFxuICAgICAgICAgIGxvZ2dlZEluVXNlclRleHRCYWNrZ3JvdW5kOiBcIlwiLFxuICAgICAgICAgIG1lbnRpb25UZXh0Rm9udDogZm9udEhlbHBlcihwYXJhbXMudGhlbWUudHlwb2dyYXBoeS50ZXh0MyksXG4gICAgICAgICAgbWVudGlvblRleHRDb2xvcjogcGFyYW1zLnRoZW1lLnBhbGV0dGUuZ2V0VGVydGlhcnkoKSxcbiAgICAgICAgICBtZW50aW9uVGV4dEJhY2tncm91bmQ6IFwiXCIsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgbWVudGlvbnNUZXh0Rm9ybWF0dGVyLnNldExlZnRCdWJibGVNZW50aW9uU3R5bGUoXG4gICAgICAgIG5ldyBVc2VyTWVudGlvblN0eWxlKHtcbiAgICAgICAgICBsb2dnZWRJblVzZXJUZXh0Rm9udDogZm9udEhlbHBlcihwYXJhbXMudGhlbWUudHlwb2dyYXBoeS50ZXh0MyksXG4gICAgICAgICAgbG9nZ2VkSW5Vc2VyVGV4dENvbG9yOiBwYXJhbXMudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KCksXG4gICAgICAgICAgbG9nZ2VkSW5Vc2VyVGV4dEJhY2tncm91bmQ6IFwiXCIsXG4gICAgICAgICAgbWVudGlvblRleHRGb250OiBmb250SGVscGVyKHBhcmFtcy50aGVtZS50eXBvZ3JhcGh5LnRleHQzKSxcbiAgICAgICAgICBtZW50aW9uVGV4dENvbG9yOiBwYXJhbXMudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KCksXG4gICAgICAgICAgbWVudGlvblRleHRCYWNrZ3JvdW5kOiBcIlwiLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lbnRpb25zVGV4dEZvcm1hdHRlcjtcbiAgfVxuXG4gIGdldFVybFRleHRGb3JtYXR0ZXIocGFyYW1zOiBhbnkgPSB7fSk6IENvbWV0Q2hhdFVybHNGb3JtYXR0ZXIge1xuICAgIGxldCB1cmxUZXh0Rm9ybWF0dGVyID0gbmV3IENvbWV0Q2hhdFVybHNGb3JtYXR0ZXIoW1xuICAgICAgLyhodHRwcz86XFwvXFwvW15cXHNdKykvZyxcbiAgICBdKTtcbiAgICBpZiAocGFyYW1zLmFsaWdubWVudCA9PSBNZXNzYWdlQnViYmxlQWxpZ25tZW50LmxlZnQpIHtcbiAgICAgIHVybFRleHRGb3JtYXR0ZXIuc2V0U3R5bGUoe1xuICAgICAgICBmb3JtYXR0ZWRUZXh0Q29sb3I6IHBhcmFtcy50aGVtZS5wYWxldHRlLmdldFByaW1hcnkoKSxcbiAgICAgICAgZm9ybWF0dGVkVGV4dEZvbnQ6IGZvbnRIZWxwZXIocGFyYW1zLnRoZW1lLnR5cG9ncmFwaHkudGV4dDMpLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVybFRleHRGb3JtYXR0ZXIuc2V0U3R5bGUoe1xuICAgICAgICBmb3JtYXR0ZWRUZXh0Q29sb3I6IHBhcmFtcy50aGVtZS5wYWxldHRlLmdldFRlcnRpYXJ5KCksXG4gICAgICAgIGZvcm1hdHRlZFRleHRGb250OiBmb250SGVscGVyKHBhcmFtcy50aGVtZS50eXBvZ3JhcGh5LnRleHQzKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdXJsVGV4dEZvcm1hdHRlcjtcbiAgfVxufVxuZXhwb3J0IHR5cGUgQ29tcG9zZXJJZCA9IHtcbiAgcGFyZW50TWVzc2FnZUlkOiBudW1iZXIgfCBudWxsO1xuICB1c2VyOiBzdHJpbmcgfCBudWxsO1xuICBncm91cDogc3RyaW5nIHwgbnVsbDtcbn07XG4iXX0=