@projectcor/maia-components 2.48.1-1 → 2.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) hide show
  1. package/README.md +2 -0
  2. package/lib/App.js +19 -44
  3. package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.js +37 -0
  4. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +3 -37
  5. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +53 -1
  6. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +28 -52
  7. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +37 -1
  8. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +33 -66
  9. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +227 -1
  10. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +53 -177
  11. package/lib/components/atoms/ClientSelector/ClientSelector.helpers.js +26 -0
  12. package/lib/components/atoms/ClientSelector/ClientSelector.js +12 -21
  13. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +29 -1
  14. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +12 -28
  15. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +1 -3
  16. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -19
  17. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +74 -0
  18. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +173 -1
  19. package/lib/components/atoms/MAIAInput/MAIAInput.js +126 -171
  20. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +47 -1
  21. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +40 -61
  22. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +2 -7
  23. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +24 -41
  24. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +10 -25
  25. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +43 -78
  26. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +11 -9
  27. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +15 -37
  28. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.js +101 -0
  29. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +21 -77
  30. package/lib/components/atoms/TextArea/TextArea.helpers.js +23 -0
  31. package/lib/components/atoms/TextArea/TextArea.js +11 -20
  32. package/lib/components/index.js +1 -2
  33. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +30 -1
  34. package/lib/components/molecules/AbmSection/AbmGeneralSection.js +13 -18
  35. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +48 -1
  36. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +17 -26
  37. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -7
  38. package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.js +370 -0
  39. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +266 -321
  40. package/lib/components/molecules/ChatAIHome/styles.js +78 -85
  41. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +345 -1
  42. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +201 -200
  43. package/lib/components/molecules/ChatAIMessages/newStyles.js +35 -32
  44. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +373 -5
  45. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +199 -271
  46. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  47. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +153 -15
  48. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +26 -2
  49. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +20 -1
  50. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +87 -74
  51. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.js +39 -0
  52. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +30 -33
  53. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.js +41 -0
  54. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +9 -35
  55. package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -10
  56. package/lib/components/molecules/Sidebar/Sidebar.helpers.js +43 -0
  57. package/lib/components/molecules/Sidebar/Sidebar.js +46 -61
  58. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +314 -1
  59. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +261 -480
  60. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.js +37 -0
  61. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +13 -25
  62. package/lib/constants/permissions/index.js +2 -2
  63. package/lib/constants/permissions/utils.js +1 -4
  64. package/lib/dev/DevReasoningTimeline.js +37 -68
  65. package/lib/dev/Providers.js +3 -5
  66. package/lib/hooks/useAgentModel/useCreateAgent.helpers.js +144 -0
  67. package/lib/hooks/useAgentModel/useCreateAgent.js +38 -102
  68. package/lib/hooks/useChatManager/useChatManager.helpers.js +550 -1
  69. package/lib/hooks/useChatManager/useChatManager.js +245 -429
  70. package/lib/hooks/useChatMessages/useChatMessages.helpers.js +257 -1
  71. package/lib/hooks/useChatMessages/useChatMessages.js +50 -206
  72. package/lib/hooks/useContextMentions.helpers.js +61 -1
  73. package/lib/hooks/useContextMentions.js +5 -62
  74. package/lib/hooks/useEntitySearch.helpers.js +49 -1
  75. package/lib/hooks/useEntitySearch.js +22 -53
  76. package/lib/hooks/useFrequentlyUsedActions.js +22 -60
  77. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.js +86 -0
  78. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +8 -82
  79. package/lib/index.js +2 -5
  80. package/lib/lang/br/index.js +1 -26
  81. package/lib/lang/en/index.js +1 -26
  82. package/lib/lang/es/index.js +1 -26
  83. package/lib/lang/fr/index.js +1 -26
  84. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  85. package/lib/services/maia/Agents/getAgents.helpers.js +61 -1
  86. package/lib/services/maia/Agents/getAgents.js +31 -59
  87. package/lib/services/utils/mapChatMessages.helpers.js +223 -0
  88. package/lib/services/utils/mapChatMessages.js +25 -249
  89. package/lib/store/sessions/sessionStreamManager.helpers.js +134 -0
  90. package/lib/store/sessions/sessionStreamManager.js +213 -273
  91. package/lib/styles/cascade.js +3 -29
  92. package/lib/styles/transitions.js +1 -3
  93. package/lib/types/global.d.js +1 -1
  94. package/lib/utils/hoursPlannerQuickActionType.js +1 -74
  95. package/lib/utils/renderContextMentions.helpers.js +110 -0
  96. package/lib/utils/renderContextMentions.js +4 -110
  97. package/lib/utils/streamActivityMessages.helpers.js +222 -0
  98. package/lib/utils/streamActivityMessages.js +21 -251
  99. package/package.json +1 -1
  100. package/lib/components/atoms/ActionableButton.spec.js +0 -111
  101. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +0 -52
  102. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +0 -11
  103. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +0 -135
  104. package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +0 -123
  105. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +0 -66
  106. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +0 -211
  107. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +0 -78
  108. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +0 -41
  109. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +0 -253
  110. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +0 -80
  111. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +0 -33
  112. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +0 -25
  113. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +0 -11
  114. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +0 -77
  115. package/lib/components/atoms/Backdrop/Backdrop.spec.js +0 -28
  116. package/lib/components/atoms/CardMenu/CardMenu.spec.js +0 -56
  117. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +0 -67
  118. package/lib/components/atoms/Checkbox/Checkbox.spec.js +0 -27
  119. package/lib/components/atoms/Chip/Chip.spec.js +0 -82
  120. package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +0 -26
  121. package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +0 -88
  122. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +0 -29
  123. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +0 -46
  124. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +0 -77
  125. package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +0 -81
  126. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +0 -48
  127. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +0 -231
  128. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +0 -107
  129. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +0 -136
  130. package/lib/components/atoms/CopyToClipboard.spec.js +0 -74
  131. package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +0 -76
  132. package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +0 -86
  133. package/lib/components/atoms/Expand/Expand.spec.js +0 -57
  134. package/lib/components/atoms/Fade/Fade.spec.js +0 -31
  135. package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +0 -75
  136. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +0 -104
  137. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +0 -91
  138. package/lib/components/atoms/HelpButton.spec.js +0 -87
  139. package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +0 -96
  140. package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +0 -54
  141. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +0 -21
  142. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +0 -20
  143. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +0 -26
  144. package/lib/components/atoms/LoadingText/LoadingText.spec.js +0 -25
  145. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +0 -42
  146. package/lib/components/atoms/MAIAError/MAIAError.spec.js +0 -27
  147. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +0 -26
  148. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +0 -444
  149. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +0 -20
  150. package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +0 -53
  151. package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +0 -22
  152. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +0 -64
  153. package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +0 -43
  154. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +0 -114
  155. package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +0 -51
  156. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +0 -48
  157. package/lib/components/atoms/ModalProject/ModalProject.spec.js +0 -66
  158. package/lib/components/atoms/NextPageLoader.spec.js +0 -37
  159. package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +0 -20
  160. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +0 -35
  161. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +0 -47
  162. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +0 -86
  163. package/lib/components/atoms/PrimaryButton.spec.js +0 -42
  164. package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +0 -69
  165. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +0 -69
  166. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +0 -59
  167. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +0 -170
  168. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +0 -199
  169. package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +0 -70
  170. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +0 -120
  171. package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +0 -8
  172. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +0 -31
  173. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +0 -52
  174. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +0 -90
  175. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +0 -29
  176. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +0 -38
  177. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +0 -16
  178. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
  179. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +0 -24
  180. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +0 -85
  181. package/lib/components/atoms/Switch/Switch.spec.js +0 -41
  182. package/lib/components/atoms/TextArea/CustomTextArea.spec.js +0 -52
  183. package/lib/components/atoms/TextArea/TextArea.spec.js +0 -68
  184. package/lib/components/atoms/ThirdButton.spec.js +0 -29
  185. package/lib/components/atoms/VideoModal/VideoModal.spec.js +0 -68
  186. package/lib/components/atoms/WithAppCfg.spec.js +0 -60
  187. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +0 -53
  188. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -495
  189. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +0 -57
  190. package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +0 -227
  191. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +0 -108
  192. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +0 -254
  193. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +0 -50
  194. package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +0 -94
  195. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +0 -83
  196. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +0 -30
  197. package/lib/components/molecules/AgentInputBlock/index.js +0 -5
  198. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +0 -52
  199. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +0 -76
  200. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +0 -20
  201. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +0 -34
  202. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +0 -36
  203. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +0 -66
  204. package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +0 -145
  205. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +0 -204
  206. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +0 -246
  207. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +0 -86
  208. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +0 -104
  209. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +0 -77
  210. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +0 -445
  211. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +0 -46
  212. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +0 -471
  213. package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +0 -659
  214. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +0 -33
  215. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +0 -116
  216. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +0 -134
  217. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +0 -95
  218. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +0 -241
  219. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +0 -37
  220. package/lib/components/molecules/ChatAIModal/constants.spec.js +0 -16
  221. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +0 -22
  222. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +0 -67
  223. package/lib/components/molecules/ChatAIModal/layout.spec.js +0 -72
  224. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +0 -172
  225. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -128
  226. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +0 -66
  227. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +0 -369
  228. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +0 -10
  229. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +0 -82
  230. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +0 -139
  231. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +0 -84
  232. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +0 -116
  233. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +0 -126
  234. package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +0 -115
  235. package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +0 -79
  236. package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +0 -37
  237. package/lib/components/molecules/Sidebar/Sidebar.spec.js +0 -453
  238. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +0 -391
  239. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +0 -1204
  240. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +0 -112
  241. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +0 -405
  242. package/lib/components/organisms/ChatAI/ChatAI.spec.js +0 -174
  243. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +0 -525
  244. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +0 -246
  245. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +0 -16
  246. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +0 -253
  247. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +0 -139
  248. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +0 -13
  249. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +0 -275
  250. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +0 -275
  251. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +0 -195
  252. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +0 -94
  253. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +0 -69
  254. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +0 -38
  255. package/lib/components/organisms/ChatAIPage/getDaypart.js +0 -9
  256. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +0 -19
  257. package/lib/components/organisms/ChatAIPage/index.js +0 -3
  258. package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +0 -53
  259. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +0 -59
  260. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +0 -79
  261. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +0 -86
  262. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +0 -49
  263. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +0 -67
  264. package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +0 -117
  265. package/lib/components/organisms/SnackBar/Snackbar.spec.js +0 -66
  266. package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +0 -19
  267. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +0 -52
  268. package/lib/constants/maiaExternalConnectorsAccess.spec.js +0 -29
  269. package/lib/constants/maiaFeatureAccess.spec.js +0 -30
  270. package/lib/constants/maiaHourAgentAccess.spec.js +0 -30
  271. package/lib/constants/maiaTaskPanelAccess.spec.js +0 -30
  272. package/lib/constants/permissions/clientRoleAccess.spec.js +0 -31
  273. package/lib/constants/permissions/utils.spec.js +0 -128
  274. package/lib/dev/DevMaiaPage.js +0 -30
  275. package/lib/hooks/frequentlyUsedActionsCache.js +0 -17
  276. package/lib/hooks/frequentlyUsedActionsCache.spec.js +0 -25
  277. package/lib/hooks/useAccessClient/useAccessClient.spec.js +0 -149
  278. package/lib/hooks/useAgentModel/useAgentModel.spec.js +0 -83
  279. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -231
  280. package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +0 -183
  281. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -313
  282. package/lib/hooks/useAgentSuggestions.spec.js +0 -89
  283. package/lib/hooks/useCaretPosition.spec.js +0 -58
  284. package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +0 -506
  285. package/lib/hooks/useChatManager/useChatManager.spec.js +0 -1261
  286. package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +0 -176
  287. package/lib/hooks/useChatMessages/useChatMessages.spec.js +0 -379
  288. package/lib/hooks/useChats/useChats.spec.js +0 -208
  289. package/lib/hooks/useClientSearch.helpers.spec.js +0 -52
  290. package/lib/hooks/useClientSearch.spec.js +0 -86
  291. package/lib/hooks/useContextMentions.helpers.spec.js +0 -143
  292. package/lib/hooks/useContextMentions.spec.js +0 -239
  293. package/lib/hooks/useContextPinPopover.helpers.spec.js +0 -115
  294. package/lib/hooks/useContextPinPopover.spec.js +0 -159
  295. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +0 -2
  296. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +0 -93
  297. package/lib/hooks/useDebounce.spec.js +0 -42
  298. package/lib/hooks/useEntitySearch.helpers.spec.js +0 -321
  299. package/lib/hooks/useEntitySearch.spec.js +0 -443
  300. package/lib/hooks/useEvent.spec.js +0 -45
  301. package/lib/hooks/useFrequentlyAskedQuestions.spec.js +0 -222
  302. package/lib/hooks/useFrequentlyUsedActions.spec.js +0 -135
  303. package/lib/hooks/useIsMaiaPageRoute.js +0 -26
  304. package/lib/hooks/useIsMaiaPageRoute.spec.js +0 -26
  305. package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +0 -122
  306. package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +0 -148
  307. package/lib/hooks/useKnowledge/saveKnowledge.spec.js +0 -104
  308. package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +0 -178
  309. package/lib/hooks/useMaiaChatSessionMeta/index.js +0 -2
  310. package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +0 -24
  311. package/lib/hooks/useMentionAllowedTypes.spec.js +0 -89
  312. package/lib/hooks/useMentionPopover.helpers.spec.js +0 -71
  313. package/lib/hooks/useMentionPopover.spec.js +0 -215
  314. package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +0 -132
  315. package/lib/hooks/useMinimizedPillBottomOffset.spec.js +0 -89
  316. package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +0 -67
  317. package/lib/hooks/useModal/useModal.spec.js +0 -73
  318. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +0 -192
  319. package/lib/hooks/useProjectSearch.helpers.spec.js +0 -70
  320. package/lib/hooks/useProjectSearch.spec.js +0 -91
  321. package/lib/hooks/useProjectSummary.spec.js +0 -193
  322. package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +0 -92
  323. package/lib/hooks/useProjectSummaryConfig.spec.js +0 -133
  324. package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +0 -112
  325. package/lib/hooks/useRecentClientsSearch.helpers.spec.js +0 -33
  326. package/lib/hooks/useRecentClientsSearch.spec.js +0 -85
  327. package/lib/hooks/useRecentContexts.spec.js +0 -139
  328. package/lib/hooks/useResize.spec.js +0 -37
  329. package/lib/hooks/useSkillsCatalog.spec.js +0 -88
  330. package/lib/hooks/useSlashCommands.spec.js +0 -139
  331. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +0 -101
  332. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +0 -33
  333. package/lib/hooks/useStreamResponse.spec.js +0 -199
  334. package/lib/hooks/useT.spec.js +0 -20
  335. package/lib/hooks/useToggle.spec.js +0 -33
  336. package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +0 -171
  337. package/lib/services/maia/Access/updateAccess.spec.js +0 -137
  338. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +0 -56
  339. package/lib/services/maia/Actions/getSlashCommands.spec.js +0 -91
  340. package/lib/services/maia/Agents/connectors.spec.js +0 -359
  341. package/lib/services/maia/Agents/createAgent.spec.js +0 -55
  342. package/lib/services/maia/Agents/deleteAgent.spec.js +0 -57
  343. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +0 -108
  344. package/lib/services/maia/Agents/getAgentById.spec.js +0 -190
  345. package/lib/services/maia/Agents/getAgentModels.spec.js +0 -190
  346. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +0 -89
  347. package/lib/services/maia/Agents/getAgents.helpers.spec.js +0 -211
  348. package/lib/services/maia/Agents/getAgents.spec.js +0 -697
  349. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +0 -45
  350. package/lib/services/maia/Agents/toggleFavorite.spec.js +0 -59
  351. package/lib/services/maia/Agents/updateAgent.spec.js +0 -48
  352. package/lib/services/maia/Chats/deleteChat.spec.js +0 -31
  353. package/lib/services/maia/Chats/getChatMessages.spec.js +0 -150
  354. package/lib/services/maia/Chats/getChatsByUserId.spec.js +0 -149
  355. package/lib/services/maia/Chats/markSessionAsRead.spec.js +0 -30
  356. package/lib/services/maia/Chats/patchChat.spec.js +0 -41
  357. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +0 -28
  358. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +0 -58
  359. package/lib/services/maia/Knowledge/delete.spec.js +0 -45
  360. package/lib/services/maia/Knowledge/download.spec.js +0 -78
  361. package/lib/services/maia/Knowledge/save.spec.js +0 -58
  362. package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +0 -153
  363. package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -181
  364. package/lib/services/maia/RecentClients/getRecentClients.spec.js +0 -52
  365. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +0 -103
  366. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +0 -82
  367. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +0 -63
  368. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +0 -82
  369. package/lib/services/maia/Skills/createSkill.spec.js +0 -68
  370. package/lib/services/maia/Skills/deleteSkill.spec.js +0 -42
  371. package/lib/services/maia/Skills/generateSkill.spec.js +0 -48
  372. package/lib/services/maia/Skills/getSkills.spec.js +0 -152
  373. package/lib/services/maia/Skills/updateSkill.spec.js +0 -62
  374. package/lib/services/maia/client.spec.js +0 -56
  375. package/lib/services/utils/fetchCOR.spec.js +0 -211
  376. package/lib/services/utils/getCookie.spec.js +0 -20
  377. package/lib/services/utils/mapChatMessages.spec.js +0 -254
  378. package/lib/store/chatsSidebarOptimistic.spec.js +0 -112
  379. package/lib/store/maiaLastChatPersistence.spec.js +0 -22
  380. package/lib/store/maiaPanelSessionPersistence.spec.js +0 -62
  381. package/lib/store/sessions/sessionNotificationSound.spec.js +0 -145
  382. package/lib/store/sessions/sessionNotifications.helpers.spec.js +0 -63
  383. package/lib/store/sessions/sessionNotifications.spec.js +0 -106
  384. package/lib/store/sessions/sessionStreamManager.spec.js +0 -503
  385. package/lib/store/sessions/sessions.types.spec.js +0 -16
  386. package/lib/store/sessions/useSessionsStore.spec.js +0 -135
  387. package/lib/store/useChatsStore.spec.js +0 -619
  388. package/lib/store/useFaqsStore.spec.js +0 -57
  389. package/lib/utils/actionCategoryMap.spec.js +0 -18
  390. package/lib/utils/agentDisplayName.spec.js +0 -44
  391. package/lib/utils/autoApproveStorage.spec.js +0 -25
  392. package/lib/utils/chatInputFiles.spec.js +0 -39
  393. package/lib/utils/contextMentionIcons.spec.js +0 -41
  394. package/lib/utils/contextMentionLabel.spec.js +0 -13
  395. package/lib/utils/contextMentionTriggers.spec.js +0 -38
  396. package/lib/utils/contextMentionTypeLabel.spec.js +0 -14
  397. package/lib/utils/corConnectorMentionTypes.spec.js +0 -23
  398. package/lib/utils/entityLinkRender.spec.js +0 -72
  399. package/lib/utils/fileDownloadHelper.spec.js +0 -67
  400. package/lib/utils/formatQuickActionMessage.spec.js +0 -27
  401. package/lib/utils/formatUnreadCount.spec.js +0 -12
  402. package/lib/utils/getUnitFileSize.spec.js +0 -18
  403. package/lib/utils/hitlAnalytics.spec.js +0 -100
  404. package/lib/utils/hoursPlannerQuickActionType.spec.js +0 -64
  405. package/lib/utils/imagePreprocessor.helpers.spec.js +0 -28
  406. package/lib/utils/imagePreprocessor.spec.js +0 -112
  407. package/lib/utils/maiaPageRoute.js +0 -24
  408. package/lib/utils/maiaPageRoute.spec.js +0 -23
  409. package/lib/utils/mapBackendLang.spec.js +0 -19
  410. package/lib/utils/navigateContextEntity.spec.js +0 -50
  411. package/lib/utils/normalizeAgentConnectors.spec.js +0 -98
  412. package/lib/utils/orchestratorSubagents.spec.js +0 -32
  413. package/lib/utils/reasoningMappers.spec.js +0 -103
  414. package/lib/utils/recentContextsHomeLimit.spec.js +0 -32
  415. package/lib/utils/renderContextMentions.spec.js +0 -158
  416. package/lib/utils/retryCompletion.spec.js +0 -99
  417. package/lib/utils/skillContentSize.spec.js +0 -13
  418. package/lib/utils/slashCommandMarker.spec.js +0 -43
  419. package/lib/utils/sortManagerHoursHomeFuas.spec.js +0 -51
  420. package/lib/utils/sseStreamContent.spec.js +0 -31
  421. package/lib/utils/streamActivityMessages.spec.js +0 -253
  422. package/lib/utils/validateTrimmedFields.spec.js +0 -26
@@ -1,10 +1,14 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
1
3
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
2
5
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
6
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
7
  import { buildContextMessage } from '../../types/contextMention';
5
8
  import { TASK_URL_REGEX_PATTERN } from '../../constants/taskUrls';
6
9
  import { formatQuickActionMessageForDisplay } from '../../utils/formatQuickActionMessage';
7
10
  import { getChatsStoreState } from '../../store/useChatsStore';
11
+ import { isActiveSessionStatus } from '../../store/sessions/sessions.types';
8
12
  /** El modal usa `{ message: '', attachments: [] }` como "sin mensaje inicial"; no es falsy. */
9
13
  export var hasMeaningfulUserInitialMessage = function hasMeaningfulUserInitialMessage(userInitialMessage) {
10
14
  var _userInitialMessage$m, _userInitialMessage$a;
@@ -106,4 +110,256 @@ export var resolveProjectContextFromFetch = function resolveProjectContextFromFe
106
110
  project: null
107
111
  };
108
112
  };
109
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJidWlsZENvbnRleHRNZXNzYWdlIiwiVEFTS19VUkxfUkVHRVhfUEFUVEVSTiIsImZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkiLCJnZXRDaGF0c1N0b3JlU3RhdGUiLCJoYXNNZWFuaW5nZnVsVXNlckluaXRpYWxNZXNzYWdlIiwidXNlckluaXRpYWxNZXNzYWdlIiwiX3VzZXJJbml0aWFsTWVzc2FnZSRtIiwiX3VzZXJJbml0aWFsTWVzc2FnZSRhIiwiQm9vbGVhbiIsIm1lc3NhZ2UiLCJ0cmltIiwiYXR0YWNobWVudHMiLCJsZW5ndGgiLCJmdWFJZCIsInNjSWQiLCJtYXJrT3BlbmVkU2Vzc2lvbkFzUmVhZElmVmlzaWJsZSIsInNlc3Npb25JZCIsIl9nZXRDaGF0c1N0b3JlU3RhdGUiLCJpc0NoYXRWaWV3VmlzaWJsZSIsImFjdGl2ZUNoYXRJZCIsIm1hcmtDaGF0QXNSZWFkIiwiYnVpbGRJbml0aWFsTWVzc2FnZVBsYWNlaG9sZGVyIiwiY3VycmVudFVzZXIiLCJfb2JqZWN0U3ByZWFkIiwiaWQiLCJkYXRlIiwiRGF0ZSIsInVzZXIiLCJtZW50aW9ucyIsImNvbnRleHRNZXNzYWdlIiwicmV3cml0ZVRhc2tVcmxzSW5Db250ZW50IiwiY29udGVudCIsInRhYlNlZ21lbnQiLCJ0YXNrVXJsUmVnZXgiLCJSZWdFeHAiLCJyZXBsYWNlIiwidXJsIiwiY29udmVyc2F0aW9uUHJvamVjdFRvR2xvYmFsUHJvamVjdCIsInByb2plY3QiLCJfcHJvamVjdCRjbGllbnQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIm5hbWUiLCJjbGllbnQiLCJyZXNvbHZlVGFza0Zyb21Db252ZXJzYXRpb25NZXRhZGF0YSIsInRhc2tJZCIsInRhc2tOYW1lIiwiaGFzQ2xpZW50Q29udmVyc2F0aW9uTWV0YWRhdGEiLCJjbGllbnRJZCIsImNsaWVudE5hbWUiLCJzaG91bGRBcHBseU11bHRpQWdlbnRQcm9qZWN0Q29udGV4dCIsInByb2plY3RJZE1lc3NhZ2UiLCJoYXNNdWx0aUFnZW50c0FjY2VzcyIsInJlc29sdmVQcm9qZWN0Q2hpcEZyb21TZXNzaW9uIiwicHJvamVjdE5hbWVGcm9tU2Vzc2lvbiIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsInByb2plY3ROYW1lIiwicHJvamVjdElkIiwiU3RyaW5nIiwicmVzb2x2ZVByb2plY3RDb250ZXh0RnJvbUZldGNoIiwicHJvamVjdHMiLCJwcm9qZWN0SWROdW0iLCJmb3VuZFByb2plY3QiLCJmaW5kIiwiX2ZvdW5kUHJvamVjdCRjbGllbnQiLCJjaGlwc1Byb2plY3QiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlQ2hhdE1lc3NhZ2VzL3VzZUNoYXRNZXNzYWdlcy5oZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0TWVzc2FnZVVzZXIgfSBmcm9tICcuLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHsgYnVpbGRDb250ZXh0TWVzc2FnZSB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgVEFTS19VUkxfUkVHRVhfUEFUVEVSTiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy90YXNrVXJscydcbmltcG9ydCB7IGZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkgfSBmcm9tICcuLi8uLi91dGlscy9mb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2UnXG5pbXBvcnQgeyBnZXRDaGF0c1N0b3JlU3RhdGUgfSBmcm9tICcuLi8uLi9zdG9yZS91c2VDaGF0c1N0b3JlJ1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvUHJvamVjdCdcbmltcG9ydCB0eXBlIHsgVXNlQ2hhdE1lc3NhZ2VzUHJvcHMgfSBmcm9tICcuL3VzZUNoYXRNZXNzYWdlcy5pbnRlcmZhY2UnXG5cbnR5cGUgVXNlckluaXRpYWxNZXNzYWdlID0gVXNlQ2hhdE1lc3NhZ2VzUHJvcHNbJ3VzZXJJbml0aWFsTWVzc2FnZSddXG5cbi8qKiBFbCBtb2RhbCB1c2EgYHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9YCBjb21vIFwic2luIG1lbnNhamUgaW5pY2lhbFwiOyBubyBlcyBmYWxzeS4gKi9cbmV4cG9ydCBjb25zdCBoYXNNZWFuaW5nZnVsVXNlckluaXRpYWxNZXNzYWdlID0gKHVzZXJJbml0aWFsTWVzc2FnZT86IFVzZXJJbml0aWFsTWVzc2FnZSk6IGJvb2xlYW4gPT5cbiAgQm9vbGVhbihcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UgJiZcbiAgICAodXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2U/LnRyaW0oKSB8fFxuICAgICAgdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzPy5sZW5ndGggfHxcbiAgICAgIHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZCB8fFxuICAgICAgdXNlckluaXRpYWxNZXNzYWdlLnNjSWQpXG4gIClcblxuLyoqIE1hcmNhIGxhIHNlc2nDs24gY29tbyBsZcOtZGEgY3VhbmRvIHRlcm1pbsOzIGRlIGhpZHJhdGFyc2UgeSBzaWd1ZSBzaWVuZG8gbGEgYWN0aXZhIHkgdmlzaWJsZS4gKi9cbmV4cG9ydCBjb25zdCBtYXJrT3BlbmVkU2Vzc2lvbkFzUmVhZElmVmlzaWJsZSA9IChzZXNzaW9uSWQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBjb25zdCB7IGlzQ2hhdFZpZXdWaXNpYmxlLCBhY3RpdmVDaGF0SWQsIG1hcmtDaGF0QXNSZWFkIH0gPSBnZXRDaGF0c1N0b3JlU3RhdGUoKVxuICBpZiAoIWlzQ2hhdFZpZXdWaXNpYmxlIHx8IGFjdGl2ZUNoYXRJZCAhPT0gc2Vzc2lvbklkKSByZXR1cm5cbiAgbWFya0NoYXRBc1JlYWQoc2Vzc2lvbklkKVxufVxuXG5leHBvcnQgY29uc3QgYnVpbGRJbml0aWFsTWVzc2FnZVBsYWNlaG9sZGVyID0gKFxuICB1c2VySW5pdGlhbE1lc3NhZ2U6IE5vbk51bGxhYmxlPFVzZXJJbml0aWFsTWVzc2FnZT4sXG4gIGN1cnJlbnRVc2VyOiBDaGF0TWVzc2FnZVVzZXJcbik6IENoYXRNZXNzYWdlW10gPT4gW1xuICB7XG4gICAgaWQ6ICd1c2VyLWluaXRpYWwtbWVzc2FnZScsXG4gICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICB1c2VyOiBjdXJyZW50VXNlcixcbiAgICBtZXNzYWdlOiBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5KHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLCB7XG4gICAgICBmdWFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkLFxuICAgICAgc2NJZDogdXNlckluaXRpYWxNZXNzYWdlLnNjSWQsXG4gICAgfSksXG4gICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyB9IDoge30pLFxuICAgIC4uLihidWlsZENvbnRleHRNZXNzYWdlKHVzZXJJbml0aWFsTWVzc2FnZS5tZW50aW9ucylcbiAgICAgID8geyBjb250ZXh0TWVzc2FnZTogYnVpbGRDb250ZXh0TWVzc2FnZSh1c2VySW5pdGlhbE1lc3NhZ2UubWVudGlvbnMpIH1cbiAgICAgIDoge30pLFxuICB9LFxuXVxuXG5leHBvcnQgY29uc3QgcmV3cml0ZVRhc2tVcmxzSW5Db250ZW50ID0gKGNvbnRlbnQ6IHN0cmluZywgdGFiU2VnbWVudDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gIHJldHVybiBjb250ZW50LnJlcGxhY2UodGFza1VybFJlZ2V4LCB1cmwgPT5cbiAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgKVxufVxuXG5leHBvcnQgdHlwZSBDb252ZXJzYXRpb25Qcm9qZWN0T3B0aW9uID0ge1xuICBpZDogbnVtYmVyIHwgc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBjbGllbnQ/OiB7IG5hbWU/OiBzdHJpbmc7IGlkPzogbnVtYmVyIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNvbnZlcnNhdGlvblByb2plY3RUb0dsb2JhbFByb2plY3QgPSAocHJvamVjdDogQ29udmVyc2F0aW9uUHJvamVjdE9wdGlvbiB8IG51bGwpOiBQcm9qZWN0IHwgbnVsbCA9PiB7XG4gIGlmICghcHJvamVjdCkgcmV0dXJuIG51bGxcbiAgY29uc3QgaWQgPSB0eXBlb2YgcHJvamVjdC5pZCA9PT0gJ251bWJlcicgPyBwcm9qZWN0LmlkIDogTnVtYmVyKHByb2plY3QuaWQpXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGlkKSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIG5hbWU6IHByb2plY3QubmFtZSxcbiAgICAuLi4ocHJvamVjdC5jbGllbnQ/LmlkICE9IG51bGwgJiYgcHJvamVjdC5jbGllbnQubmFtZVxuICAgICAgPyB7IGNsaWVudDogeyBpZDogcHJvamVjdC5jbGllbnQuaWQsIG5hbWU6IHByb2plY3QuY2xpZW50Lm5hbWUgfSB9XG4gICAgICA6IHt9KSxcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBDb252ZXJzYXRpb25Qcm9qZWN0Q2hpcCA9IHtcbiAgcHJvamVjdE5hbWU6IHN0cmluZ1xuICBjbGllbnROYW1lOiBzdHJpbmdcbiAgcHJvamVjdElkOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVUYXNrRnJvbUNvbnZlcnNhdGlvbk1ldGFkYXRhID0gKFxuICB0YXNrSWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsLFxuICB0YXNrTmFtZT86IHN0cmluZyB8IG51bGxcbik6IHsgaWQ6IHN0cmluZyB8IG51bWJlcjsgbmFtZTogc3RyaW5nIH0gfCBudWxsID0+ICh0YXNrSWQgIT0gbnVsbCAmJiB0YXNrTmFtZSA/IHsgaWQ6IHRhc2tJZCwgbmFtZTogdGFza05hbWUgfSA6IG51bGwpXG5cbmV4cG9ydCBjb25zdCBoYXNDbGllbnRDb252ZXJzYXRpb25NZXRhZGF0YSA9IChjbGllbnRJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGwsIGNsaWVudE5hbWU/OiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiA9PlxuICBjbGllbnRJZCAhPSBudWxsICYmIEJvb2xlYW4oY2xpZW50TmFtZSlcblxuZXhwb3J0IGNvbnN0IHNob3VsZEFwcGx5TXVsdGlBZ2VudFByb2plY3RDb250ZXh0ID0gKFxuICBwcm9qZWN0SWRNZXNzYWdlOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBoYXNNdWx0aUFnZW50c0FjY2VzczogYm9vbGVhblxuKTogYm9vbGVhbiA9PiBCb29sZWFuKHByb2plY3RJZE1lc3NhZ2UgJiYgaGFzTXVsdGlBZ2VudHNBY2Nlc3MpXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUHJvamVjdENoaXBGcm9tU2Vzc2lvbiA9IChcbiAgcHJvamVjdElkTWVzc2FnZTogc3RyaW5nIHwgbnVtYmVyLFxuICBwcm9qZWN0TmFtZUZyb21TZXNzaW9uOiBzdHJpbmcsXG4gIGNsaWVudE5hbWUgPSAnJ1xuKTogQ29udmVyc2F0aW9uUHJvamVjdENoaXAgPT4gKHtcbiAgcHJvamVjdE5hbWU6IHByb2plY3ROYW1lRnJvbVNlc3Npb24sXG4gIGNsaWVudE5hbWUsXG4gIHByb2plY3RJZDogU3RyaW5nKHByb2plY3RJZE1lc3NhZ2UpLFxufSlcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVQcm9qZWN0Q29udGV4dEZyb21GZXRjaCA9IChcbiAgcHJvamVjdElkTWVzc2FnZTogc3RyaW5nIHwgbnVtYmVyLFxuICBwcm9qZWN0czogQ29udmVyc2F0aW9uUHJvamVjdE9wdGlvbltdLFxuICBwcm9qZWN0TmFtZUZyb21TZXNzaW9uPzogc3RyaW5nIHwgbnVsbFxuKTogeyBjaGlwc1Byb2plY3Q6IENvbnZlcnNhdGlvblByb2plY3RDaGlwIHwgbnVsbDsgcHJvamVjdDogQ29udmVyc2F0aW9uUHJvamVjdE9wdGlvbiB8IG51bGwgfSA9PiB7XG4gIGNvbnN0IHByb2plY3RJZE51bSA9IE51bWJlcihwcm9qZWN0SWRNZXNzYWdlKVxuICBjb25zdCBmb3VuZFByb2plY3QgPSBwcm9qZWN0cy5maW5kKHByb2plY3QgPT4gTnVtYmVyKHByb2plY3QuaWQpID09PSBwcm9qZWN0SWROdW0pXG5cbiAgaWYgKGZvdW5kUHJvamVjdCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGlwc1Byb2plY3Q6IHtcbiAgICAgICAgcHJvamVjdE5hbWU6IGZvdW5kUHJvamVjdC5uYW1lLFxuICAgICAgICBjbGllbnROYW1lOiBmb3VuZFByb2plY3QuY2xpZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhmb3VuZFByb2plY3QuaWQpLFxuICAgICAgfSxcbiAgICAgIHByb2plY3Q6IGZvdW5kUHJvamVjdCxcbiAgICB9XG4gIH1cblxuICBpZiAocHJvamVjdE5hbWVGcm9tU2Vzc2lvbikge1xuICAgIHJldHVybiB7XG4gICAgICBjaGlwc1Byb2plY3Q6IHJlc29sdmVQcm9qZWN0Q2hpcEZyb21TZXNzaW9uKHByb2plY3RJZE1lc3NhZ2UsIHByb2plY3ROYW1lRnJvbVNlc3Npb24pLFxuICAgICAgcHJvamVjdDogeyBpZDogcHJvamVjdElkTnVtLCBuYW1lOiBwcm9qZWN0TmFtZUZyb21TZXNzaW9uIH0sXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgY2hpcHNQcm9qZWN0OiBudWxsLCBwcm9qZWN0OiBudWxsIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsU0FBU0EsbUJBQW1CLFFBQVEsNEJBQTRCO0FBQ2hFLFNBQVNDLHNCQUFzQixRQUFRLDBCQUEwQjtBQUNqRSxTQUFTQyxrQ0FBa0MsUUFBUSxzQ0FBc0M7QUFDekYsU0FBU0Msa0JBQWtCLFFBQVEsMkJBQTJCO0FBTTlEO0FBQ0EsT0FBTyxJQUFNQywrQkFBK0IsR0FBRyxTQUFsQ0EsK0JBQStCQSxDQUFJQyxrQkFBdUM7RUFBQSxJQUFB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
113
+ export var resolveTaskUrlTabSegment = function resolveTaskUrlTabSegment(tab) {
114
+ return tab ? "/".concat(tab) : '/detail';
115
+ };
116
+ export var rewriteChatMessagesTaskUrls = function rewriteChatMessagesTaskUrls(items, tabSegment) {
117
+ return items.map(function (item) {
118
+ return _objectSpread(_objectSpread({}, item), {}, {
119
+ message: rewriteTaskUrlsInContent(item.message || '', tabSegment)
120
+ });
121
+ });
122
+ };
123
+ export var mergeChatMessagesWithActiveSessionTail = function mergeChatMessagesWithActiveSessionTail(historical, tail) {
124
+ var existingIds = new Set(historical.map(function (item) {
125
+ return item.id;
126
+ }));
127
+ var extra = tail.filter(function (item) {
128
+ return !existingIds.has(item.id);
129
+ });
130
+ return extra.length ? [].concat(_toConsumableArray(historical), _toConsumableArray(extra)) : historical;
131
+ };
132
+ export var shouldAbortStaleMessageLoad = function shouldAbortStaleMessageLoad(seq, currentSeq, targetChatId, activeChatId) {
133
+ return seq !== currentSeq || targetChatId !== activeChatId;
134
+ };
135
+ export var buildDeletedSessionAgent = function buildDeletedSessionAgent(agentDeleted, agentNoPermission) {
136
+ return _objectSpread(_objectSpread({
137
+ id: agentDeleted.id,
138
+ name: agentDeleted.name,
139
+ emoji: agentDeleted.emoji,
140
+ type: 'custom',
141
+ is_deleted: true
142
+ }, agentDeleted.deletedAt ? {
143
+ deleted_at: agentDeleted.deletedAt
144
+ } : {}), agentNoPermission !== null && agentNoPermission !== void 0 && agentNoPermission.connectors ? {
145
+ connectors: agentNoPermission.connectors
146
+ } : {});
147
+ };
148
+ export var shouldSelectOrphanSessionAgent = function shouldSelectOrphanSessionAgent(params) {
149
+ return Boolean(params.agentNoPermission && !params.agentDeleted && params.userCanViewAgents && params.hasAgentAccess && params.hasAgentPermission && !params.agentExistsInList);
150
+ };
151
+ export var buildOrphanSessionAgent = function buildOrphanSessionAgent(agentNoPermission, projectDeleted) {
152
+ return _objectSpread(_objectSpread({
153
+ id: agentNoPermission.id,
154
+ name: agentNoPermission.name,
155
+ emoji: agentNoPermission.emoji,
156
+ type: agentNoPermission.type,
157
+ is_from_conversation: true
158
+ }, agentNoPermission.connectors ? {
159
+ connectors: agentNoPermission.connectors
160
+ } : {}), projectDeleted ? {
161
+ project_deleted: {
162
+ name: projectDeleted.name
163
+ }
164
+ } : {});
165
+ };
166
+ export var shouldMergeListedSessionAgent = function shouldMergeListedSessionAgent(params) {
167
+ return Boolean(params.agentNoPermission && !params.agentDeleted && params.hasAgentAccess && params.hasAgentPermission && params.agentExistsInList);
168
+ };
169
+ export var mergeListedSessionAgent = function mergeListedSessionAgent(agentInList, agentNoPermission, projectDeleted) {
170
+ return _objectSpread(_objectSpread(_objectSpread({}, agentInList), agentNoPermission.connectors ? {
171
+ connectors: agentNoPermission.connectors
172
+ } : {}), projectDeleted ? {
173
+ project_deleted: {
174
+ name: projectDeleted.name
175
+ }
176
+ } : {
177
+ project_deleted: undefined
178
+ });
179
+ };
180
+ export var resolveRestrictedSessionAgent = function resolveRestrictedSessionAgent(agentNoPermission, params) {
181
+ var base = _objectSpread(_objectSpread({
182
+ id: agentNoPermission.id,
183
+ name: agentNoPermission.name,
184
+ emoji: agentNoPermission.emoji,
185
+ type: agentNoPermission.type
186
+ }, agentNoPermission.connectors ? {
187
+ connectors: agentNoPermission.connectors
188
+ } : {}), params.projectDeleted ? {
189
+ project_deleted: {
190
+ name: params.projectDeleted.name
191
+ }
192
+ } : {});
193
+ if (!params.hasAgentAccess) {
194
+ return {
195
+ reason: 'no_access',
196
+ agent: _objectSpread(_objectSpread({}, base), {}, {
197
+ has_not_access: true
198
+ })
199
+ };
200
+ }
201
+ if (!params.hasAgentPermission) {
202
+ return {
203
+ reason: 'no_permission',
204
+ agent: _objectSpread(_objectSpread({}, base), {}, {
205
+ has_not_permissions: true
206
+ })
207
+ };
208
+ }
209
+ if (params.projectDeleted) {
210
+ return {
211
+ reason: 'project_deleted',
212
+ agent: _objectSpread(_objectSpread({
213
+ id: agentNoPermission.id,
214
+ name: agentNoPermission.name,
215
+ emoji: agentNoPermission.emoji,
216
+ type: agentNoPermission.type
217
+ }, agentNoPermission.connectors ? {
218
+ connectors: agentNoPermission.connectors
219
+ } : {}), {}, {
220
+ project_deleted: {
221
+ name: params.projectDeleted.name
222
+ }
223
+ })
224
+ };
225
+ }
226
+ return null;
227
+ };
228
+ /** Réplica la cadena de `selectAgent` en `loadMessages` (última selección gana). */
229
+ export var resolveSessionAgentFromChatLoad = function resolveSessionAgentFromChatLoad(ctx) {
230
+ var agentDeleted = ctx.agentDeleted,
231
+ agentNoPermission = ctx.agentNoPermission,
232
+ agents = ctx.agents,
233
+ projectDeleted = ctx.projectDeleted;
234
+ var selected = null;
235
+ if (agentDeleted) {
236
+ selected = buildDeletedSessionAgent(agentDeleted, agentNoPermission);
237
+ }
238
+ var agentExistsInList = Boolean(agentNoPermission && agents.some(function (agentItem) {
239
+ return agentItem.id === agentNoPermission.id;
240
+ }));
241
+ if (shouldSelectOrphanSessionAgent({
242
+ agentNoPermission: agentNoPermission,
243
+ agentDeleted: agentDeleted,
244
+ userCanViewAgents: ctx.userCanViewAgents,
245
+ hasAgentAccess: ctx.hasAgentAccess,
246
+ hasAgentPermission: ctx.hasAgentPermission,
247
+ agentExistsInList: agentExistsInList
248
+ }) && agentNoPermission) {
249
+ selected = buildOrphanSessionAgent(agentNoPermission, projectDeleted);
250
+ }
251
+ if (shouldMergeListedSessionAgent({
252
+ agentNoPermission: agentNoPermission,
253
+ agentDeleted: agentDeleted,
254
+ hasAgentAccess: ctx.hasAgentAccess,
255
+ hasAgentPermission: ctx.hasAgentPermission,
256
+ agentExistsInList: agentExistsInList
257
+ }) && agentNoPermission) {
258
+ var agentInList = agents.find(function (agentItem) {
259
+ return agentItem.id === agentNoPermission.id;
260
+ });
261
+ if (agentInList) {
262
+ selected = mergeListedSessionAgent(agentInList, agentNoPermission, projectDeleted);
263
+ }
264
+ }
265
+ if (agentNoPermission && !agentDeleted) {
266
+ var restricted = resolveRestrictedSessionAgent(agentNoPermission, {
267
+ hasAgentAccess: ctx.hasAgentAccess,
268
+ hasAgentPermission: ctx.hasAgentPermission,
269
+ projectDeleted: projectDeleted
270
+ });
271
+ if (restricted) {
272
+ selected = restricted.agent;
273
+ }
274
+ }
275
+ return selected;
276
+ };
277
+ export var buildSessionConversationMeta = function buildSessionConversationMeta(fields) {
278
+ return {
279
+ projectIdMessage: fields.projectIdMessage,
280
+ projectNameFromSession: fields.projectNameFromSession,
281
+ clientIdFromSession: fields.clientIdFromSession,
282
+ clientNameFromSession: fields.clientNameFromSession,
283
+ taskIdFromSession: fields.taskIdFromSession,
284
+ taskNameFromSession: fields.taskNameFromSession
285
+ };
286
+ };
287
+ export var buildSessionMetaEventDetail = function buildSessionMetaEventDetail(chatId, fields) {
288
+ return {
289
+ chatId: chatId,
290
+ agentType: fields.agentType,
291
+ agentEntity: fields.agentEntity,
292
+ projectId: fields.projectId,
293
+ projectName: fields.projectName,
294
+ clientId: fields.clientId,
295
+ clientName: fields.clientName,
296
+ taskId: fields.taskId,
297
+ taskName: fields.taskName
298
+ };
299
+ };
300
+ export var hasConversationProjectContext = function hasConversationProjectContext(projectIdMessage) {
301
+ return Boolean(projectIdMessage);
302
+ };
303
+ export var rewriteMessagesForProjectTaskUrls = /*#__PURE__*/function () {
304
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(items, projectIdMessage, getTabTaskDefault) {
305
+ var tab;
306
+ return _regeneratorRuntime.wrap(function (_context) {
307
+ while (1) switch (_context.prev = _context.next) {
308
+ case 0:
309
+ if (hasConversationProjectContext(projectIdMessage)) {
310
+ _context.next = 1;
311
+ break;
312
+ }
313
+ return _context.abrupt("return", items);
314
+ case 1:
315
+ _context.next = 2;
316
+ return getTabTaskDefault(1);
317
+ case 2:
318
+ tab = _context.sent;
319
+ return _context.abrupt("return", rewriteChatMessagesTaskUrls(items, resolveTaskUrlTabSegment(tab)));
320
+ case 3:
321
+ case "end":
322
+ return _context.stop();
323
+ }
324
+ }, _callee);
325
+ }));
326
+ return function rewriteMessagesForProjectTaskUrls(_x, _x2, _x3) {
327
+ return _ref.apply(this, arguments);
328
+ };
329
+ }();
330
+ export var resolveFinalMessagesWithActiveStreamingTail = function resolveFinalMessagesWithActiveStreamingTail(items, tail, sessionStatus) {
331
+ if (sessionStatus && isActiveSessionStatus(sessionStatus)) {
332
+ return mergeChatMessagesWithActiveSessionTail(items, tail);
333
+ }
334
+ return items;
335
+ };
336
+ export var shouldLoadMoreMessagesOnScroll = function shouldLoadMoreMessagesOnScroll(scrollTop, scrollHeight, clientHeight) {
337
+ var thresholdPercent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 90;
338
+ var scrollable = scrollHeight - clientHeight;
339
+ if (scrollable <= 0) return false;
340
+ var scrollPercentage = scrollTop / scrollable * 100;
341
+ return scrollPercentage > thresholdPercent;
342
+ };
343
+ export var messagesNeedTabRewrite = function messagesNeedTabRewrite(messages, tabTaskDefault) {
344
+ var taskUrlRegex = new RegExp(TASK_URL_REGEX_PATTERN, 'g');
345
+ return messages.some(function (msg) {
346
+ var content = msg.message || '';
347
+ var matches = content.match(taskUrlRegex);
348
+ if (!(matches !== null && matches !== void 0 && matches.length)) return false;
349
+ return matches.some(function (url) {
350
+ return !url.endsWith("/".concat(tabTaskDefault)) && !url.includes("/".concat(tabTaskDefault, "?"));
351
+ });
352
+ });
353
+ };
354
+ export var upsertChatMessage = function upsertChatMessage(previous, message) {
355
+ var existingMessageIndex = previous.findIndex(function (msg) {
356
+ return msg.id === message.id;
357
+ });
358
+ if (existingMessageIndex >= 0) {
359
+ return previous.map(function (msg, index) {
360
+ return index === existingMessageIndex ? message : msg;
361
+ });
362
+ }
363
+ return [].concat(_toConsumableArray(previous), [message]);
364
+ };
365
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJidWlsZENvbnRleHRNZXNzYWdlIiwiVEFTS19VUkxfUkVHRVhfUEFUVEVSTiIsImZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkiLCJnZXRDaGF0c1N0b3JlU3RhdGUiLCJpc0FjdGl2ZVNlc3Npb25TdGF0dXMiLCJoYXNNZWFuaW5nZnVsVXNlckluaXRpYWxNZXNzYWdlIiwidXNlckluaXRpYWxNZXNzYWdlIiwiX3VzZXJJbml0aWFsTWVzc2FnZSRtIiwiX3VzZXJJbml0aWFsTWVzc2FnZSRhIiwiQm9vbGVhbiIsIm1lc3NhZ2UiLCJ0cmltIiwiYXR0YWNobWVudHMiLCJsZW5ndGgiLCJmdWFJZCIsInNjSWQiLCJtYXJrT3BlbmVkU2Vzc2lvbkFzUmVhZElmVmlzaWJsZSIsInNlc3Npb25JZCIsIl9nZXRDaGF0c1N0b3JlU3RhdGUiLCJpc0NoYXRWaWV3VmlzaWJsZSIsImFjdGl2ZUNoYXRJZCIsIm1hcmtDaGF0QXNSZWFkIiwiYnVpbGRJbml0aWFsTWVzc2FnZVBsYWNlaG9sZGVyIiwiY3VycmVudFVzZXIiLCJfb2JqZWN0U3ByZWFkIiwiaWQiLCJkYXRlIiwiRGF0ZSIsInVzZXIiLCJtZW50aW9ucyIsImNvbnRleHRNZXNzYWdlIiwicmV3cml0ZVRhc2tVcmxzSW5Db250ZW50IiwiY29udGVudCIsInRhYlNlZ21lbnQiLCJ0YXNrVXJsUmVnZXgiLCJSZWdFeHAiLCJyZXBsYWNlIiwidXJsIiwiY29udmVyc2F0aW9uUHJvamVjdFRvR2xvYmFsUHJvamVjdCIsInByb2plY3QiLCJfcHJvamVjdCRjbGllbnQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIm5hbWUiLCJjbGllbnQiLCJyZXNvbHZlVGFza0Zyb21Db252ZXJzYXRpb25NZXRhZGF0YSIsInRhc2tJZCIsInRhc2tOYW1lIiwiaGFzQ2xpZW50Q29udmVyc2F0aW9uTWV0YWRhdGEiLCJjbGllbnRJZCIsImNsaWVudE5hbWUiLCJzaG91bGRBcHBseU11bHRpQWdlbnRQcm9qZWN0Q29udGV4dCIsInByb2plY3RJZE1lc3NhZ2UiLCJoYXNNdWx0aUFnZW50c0FjY2VzcyIsInJlc29sdmVQcm9qZWN0Q2hpcEZyb21TZXNzaW9uIiwicHJvamVjdE5hbWVGcm9tU2Vzc2lvbiIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsInByb2plY3ROYW1lIiwicHJvamVjdElkIiwiU3RyaW5nIiwicmVzb2x2ZVByb2plY3RDb250ZXh0RnJvbUZldGNoIiwicHJvamVjdHMiLCJwcm9qZWN0SWROdW0iLCJmb3VuZFByb2plY3QiLCJmaW5kIiwiX2ZvdW5kUHJvamVjdCRjbGllbnQiLCJjaGlwc1Byb2plY3QiLCJyZXNvbHZlVGFza1VybFRhYlNlZ21lbnQiLCJ0YWIiLCJjb25jYXQiLCJyZXdyaXRlQ2hhdE1lc3NhZ2VzVGFza1VybHMiLCJpdGVtcyIsIm1hcCIsIml0ZW0iLCJtZXJnZUNoYXRNZXNzYWdlc1dpdGhBY3RpdmVTZXNzaW9uVGFpbCIsImhpc3RvcmljYWwiLCJ0YWlsIiwiZXhpc3RpbmdJZHMiLCJTZXQiLCJleHRyYSIsImZpbHRlciIsImhhcyIsIl90b0NvbnN1bWFibGVBcnJheSIsInNob3VsZEFib3J0U3RhbGVNZXNzYWdlTG9hZCIsInNlcSIsImN1cnJlbnRTZXEiLCJ0YXJnZXRDaGF0SWQiLCJidWlsZERlbGV0ZWRTZXNzaW9uQWdlbnQiLCJhZ2VudERlbGV0ZWQiLCJhZ2VudE5vUGVybWlzc2lvbiIsImVtb2ppIiwidHlwZSIsImlzX2RlbGV0ZWQiLCJkZWxldGVkQXQiLCJkZWxldGVkX2F0IiwiY29ubmVjdG9ycyIsInNob3VsZFNlbGVjdE9ycGhhblNlc3Npb25BZ2VudCIsInBhcmFtcyIsInVzZXJDYW5WaWV3QWdlbnRzIiwiaGFzQWdlbnRBY2Nlc3MiLCJoYXNBZ2VudFBlcm1pc3Npb24iLCJhZ2VudEV4aXN0c0luTGlzdCIsImJ1aWxkT3JwaGFuU2Vzc2lvbkFnZW50IiwicHJvamVjdERlbGV0ZWQiLCJpc19mcm9tX2NvbnZlcnNhdGlvbiIsInByb2plY3RfZGVsZXRlZCIsInNob3VsZE1lcmdlTGlzdGVkU2Vzc2lvbkFnZW50IiwibWVyZ2VMaXN0ZWRTZXNzaW9uQWdlbnQiLCJhZ2VudEluTGlzdCIsInJlc29sdmVSZXN0cmljdGVkU2Vzc2lvbkFnZW50IiwiYmFzZSIsInJlYXNvbiIsImFnZW50IiwiaGFzX25vdF9hY2Nlc3MiLCJoYXNfbm90X3Blcm1pc3Npb25zIiwicmVzb2x2ZVNlc3Npb25BZ2VudEZyb21DaGF0TG9hZCIsImN0eCIsImFnZW50cyIsInNlbGVjdGVkIiwic29tZSIsImFnZW50SXRlbSIsInJlc3RyaWN0ZWQiLCJidWlsZFNlc3Npb25Db252ZXJzYXRpb25NZXRhIiwiZmllbGRzIiwiY2xpZW50SWRGcm9tU2Vzc2lvbiIsImNsaWVudE5hbWVGcm9tU2Vzc2lvbiIsInRhc2tJZEZyb21TZXNzaW9uIiwidGFza05hbWVGcm9tU2Vzc2lvbiIsImJ1aWxkU2Vzc2lvbk1ldGFFdmVudERldGFpbCIsImNoYXRJZCIsImFnZW50VHlwZSIsImFnZW50RW50aXR5IiwiaGFzQ29udmVyc2F0aW9uUHJvamVjdENvbnRleHQiLCJyZXdyaXRlTWVzc2FnZXNGb3JQcm9qZWN0VGFza1VybHMiLCJfcmVmIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJnZXRUYWJUYXNrRGVmYXVsdCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiYWJydXB0Iiwic2VudCIsInN0b3AiLCJfeCIsIl94MiIsIl94MyIsImFwcGx5IiwicmVzb2x2ZUZpbmFsTWVzc2FnZXNXaXRoQWN0aXZlU3RyZWFtaW5nVGFpbCIsInNlc3Npb25TdGF0dXMiLCJzaG91bGRMb2FkTW9yZU1lc3NhZ2VzT25TY3JvbGwiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJ0aHJlc2hvbGRQZXJjZW50Iiwic2Nyb2xsYWJsZSIsInNjcm9sbFBlcmNlbnRhZ2UiLCJtZXNzYWdlc05lZWRUYWJSZXdyaXRlIiwibWVzc2FnZXMiLCJ0YWJUYXNrRGVmYXVsdCIsIm1zZyIsIm1hdGNoZXMiLCJtYXRjaCIsImVuZHNXaXRoIiwiaW5jbHVkZXMiLCJ1cHNlcnRDaGF0TWVzc2FnZSIsInByZXZpb3VzIiwiZXhpc3RpbmdNZXNzYWdlSW5kZXgiLCJmaW5kSW5kZXgiLCJpbmRleCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy91c2VDaGF0TWVzc2FnZXMvdXNlQ2hhdE1lc3NhZ2VzLmhlbHBlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRNZXNzYWdlVXNlciB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBidWlsZENvbnRleHRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuaW1wb3J0IHsgZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheSB9IGZyb20gJy4uLy4uL3V0aWxzL2Zvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZSdcbmltcG9ydCB7IGdldENoYXRzU3RvcmVTdGF0ZSB9IGZyb20gJy4uLy4uL3N0b3JlL3VzZUNoYXRzU3RvcmUnXG5pbXBvcnQgdHlwZSB7IEFnZW50LCBBZ2VudFR5cGUgfSBmcm9tICcuLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gJy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgdHlwZSB7IFVzZUNoYXRNZXNzYWdlc1Byb3BzIH0gZnJvbSAnLi91c2VDaGF0TWVzc2FnZXMuaW50ZXJmYWNlJ1xuaW1wb3J0IHtcbiAgaXNBY3RpdmVTZXNzaW9uU3RhdHVzLFxuICB0eXBlIFNlc3Npb25Db252ZXJzYXRpb25NZXRhLFxuICB0eXBlIFNlc3Npb25NZXRhRXZlbnREZXRhaWwsXG4gIHR5cGUgU2Vzc2lvblN0YXR1cyxcbn0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvbnMudHlwZXMnXG5cbnR5cGUgVXNlckluaXRpYWxNZXNzYWdlID0gVXNlQ2hhdE1lc3NhZ2VzUHJvcHNbJ3VzZXJJbml0aWFsTWVzc2FnZSddXG5cbi8qKiBFbCBtb2RhbCB1c2EgYHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9YCBjb21vIFwic2luIG1lbnNhamUgaW5pY2lhbFwiOyBubyBlcyBmYWxzeS4gKi9cbmV4cG9ydCBjb25zdCBoYXNNZWFuaW5nZnVsVXNlckluaXRpYWxNZXNzYWdlID0gKHVzZXJJbml0aWFsTWVzc2FnZT86IFVzZXJJbml0aWFsTWVzc2FnZSk6IGJvb2xlYW4gPT5cbiAgQm9vbGVhbihcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UgJiZcbiAgICAodXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2U/LnRyaW0oKSB8fFxuICAgICAgdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzPy5sZW5ndGggfHxcbiAgICAgIHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZCB8fFxuICAgICAgdXNlckluaXRpYWxNZXNzYWdlLnNjSWQpXG4gIClcblxuLyoqIE1hcmNhIGxhIHNlc2nDs24gY29tbyBsZcOtZGEgY3VhbmRvIHRlcm1pbsOzIGRlIGhpZHJhdGFyc2UgeSBzaWd1ZSBzaWVuZG8gbGEgYWN0aXZhIHkgdmlzaWJsZS4gKi9cbmV4cG9ydCBjb25zdCBtYXJrT3BlbmVkU2Vzc2lvbkFzUmVhZElmVmlzaWJsZSA9IChzZXNzaW9uSWQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBjb25zdCB7IGlzQ2hhdFZpZXdWaXNpYmxlLCBhY3RpdmVDaGF0SWQsIG1hcmtDaGF0QXNSZWFkIH0gPSBnZXRDaGF0c1N0b3JlU3RhdGUoKVxuICBpZiAoIWlzQ2hhdFZpZXdWaXNpYmxlIHx8IGFjdGl2ZUNoYXRJZCAhPT0gc2Vzc2lvbklkKSByZXR1cm5cbiAgbWFya0NoYXRBc1JlYWQoc2Vzc2lvbklkKVxufVxuXG5leHBvcnQgY29uc3QgYnVpbGRJbml0aWFsTWVzc2FnZVBsYWNlaG9sZGVyID0gKFxuICB1c2VySW5pdGlhbE1lc3NhZ2U6IE5vbk51bGxhYmxlPFVzZXJJbml0aWFsTWVzc2FnZT4sXG4gIGN1cnJlbnRVc2VyOiBDaGF0TWVzc2FnZVVzZXJcbik6IENoYXRNZXNzYWdlW10gPT4gW1xuICB7XG4gICAgaWQ6ICd1c2VyLWluaXRpYWwtbWVzc2FnZScsXG4gICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICB1c2VyOiBjdXJyZW50VXNlcixcbiAgICBtZXNzYWdlOiBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5KHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLCB7XG4gICAgICBmdWFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkLFxuICAgICAgc2NJZDogdXNlckluaXRpYWxNZXNzYWdlLnNjSWQsXG4gICAgfSksXG4gICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyB9IDoge30pLFxuICAgIC4uLihidWlsZENvbnRleHRNZXNzYWdlKHVzZXJJbml0aWFsTWVzc2FnZS5tZW50aW9ucylcbiAgICAgID8geyBjb250ZXh0TWVzc2FnZTogYnVpbGRDb250ZXh0TWVzc2FnZSh1c2VySW5pdGlhbE1lc3NhZ2UubWVudGlvbnMpIH1cbiAgICAgIDoge30pLFxuICB9LFxuXVxuXG5leHBvcnQgY29uc3QgcmV3cml0ZVRhc2tVcmxzSW5Db250ZW50ID0gKGNvbnRlbnQ6IHN0cmluZywgdGFiU2VnbWVudDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gIHJldHVybiBjb250ZW50LnJlcGxhY2UodGFza1VybFJlZ2V4LCB1cmwgPT5cbiAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgKVxufVxuXG5leHBvcnQgdHlwZSBDb252ZXJzYXRpb25Qcm9qZWN0T3B0aW9uID0ge1xuICBpZDogbnVtYmVyIHwgc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBjbGllbnQ/OiB7IG5hbWU/OiBzdHJpbmc7IGlkPzogbnVtYmVyIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNvbnZlcnNhdGlvblByb2plY3RUb0dsb2JhbFByb2plY3QgPSAocHJvamVjdDogQ29udmVyc2F0aW9uUHJvamVjdE9wdGlvbiB8IG51bGwpOiBQcm9qZWN0IHwgbnVsbCA9PiB7XG4gIGlmICghcHJvamVjdCkgcmV0dXJuIG51bGxcbiAgY29uc3QgaWQgPSB0eXBlb2YgcHJvamVjdC5pZCA9PT0gJ251bWJlcicgPyBwcm9qZWN0LmlkIDogTnVtYmVyKHByb2plY3QuaWQpXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGlkKSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIG5hbWU6IHByb2plY3QubmFtZSxcbiAgICAuLi4ocHJvamVjdC5jbGllbnQ/LmlkICE9IG51bGwgJiYgcHJvamVjdC5jbGllbnQubmFtZVxuICAgICAgPyB7IGNsaWVudDogeyBpZDogcHJvamVjdC5jbGllbnQuaWQsIG5hbWU6IHByb2plY3QuY2xpZW50Lm5hbWUgfSB9XG4gICAgICA6IHt9KSxcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBDb252ZXJzYXRpb25Qcm9qZWN0Q2hpcCA9IHtcbiAgcHJvamVjdE5hbWU6IHN0cmluZ1xuICBjbGllbnROYW1lOiBzdHJpbmdcbiAgcHJvamVjdElkOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVUYXNrRnJvbUNvbnZlcnNhdGlvbk1ldGFkYXRhID0gKFxuICB0YXNrSWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsLFxuICB0YXNrTmFtZT86IHN0cmluZyB8IG51bGxcbik6IHsgaWQ6IHN0cmluZyB8IG51bWJlcjsgbmFtZTogc3RyaW5nIH0gfCBudWxsID0+ICh0YXNrSWQgIT0gbnVsbCAmJiB0YXNrTmFtZSA/IHsgaWQ6IHRhc2tJZCwgbmFtZTogdGFza05hbWUgfSA6IG51bGwpXG5cbmV4cG9ydCBjb25zdCBoYXNDbGllbnRDb252ZXJzYXRpb25NZXRhZGF0YSA9IChjbGllbnRJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGwsIGNsaWVudE5hbWU/OiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiA9PlxuICBjbGllbnRJZCAhPSBudWxsICYmIEJvb2xlYW4oY2xpZW50TmFtZSlcblxuZXhwb3J0IGNvbnN0IHNob3VsZEFwcGx5TXVsdGlBZ2VudFByb2plY3RDb250ZXh0ID0gKFxuICBwcm9qZWN0SWRNZXNzYWdlOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBoYXNNdWx0aUFnZW50c0FjY2VzczogYm9vbGVhblxuKTogYm9vbGVhbiA9PiBCb29sZWFuKHByb2plY3RJZE1lc3NhZ2UgJiYgaGFzTXVsdGlBZ2VudHNBY2Nlc3MpXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUHJvamVjdENoaXBGcm9tU2Vzc2lvbiA9IChcbiAgcHJvamVjdElkTWVzc2FnZTogc3RyaW5nIHwgbnVtYmVyLFxuICBwcm9qZWN0TmFtZUZyb21TZXNzaW9uOiBzdHJpbmcsXG4gIGNsaWVudE5hbWUgPSAnJ1xuKTogQ29udmVyc2F0aW9uUHJvamVjdENoaXAgPT4gKHtcbiAgcHJvamVjdE5hbWU6IHByb2plY3ROYW1lRnJvbVNlc3Npb24sXG4gIGNsaWVudE5hbWUsXG4gIHByb2plY3RJZDogU3RyaW5nKHByb2plY3RJZE1lc3NhZ2UpLFxufSlcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVQcm9qZWN0Q29udGV4dEZyb21GZXRjaCA9IChcbiAgcHJvamVjdElkTWVzc2FnZTogc3RyaW5nIHwgbnVtYmVyLFxuICBwcm9qZWN0czogQ29udmVyc2F0aW9uUHJvamVjdE9wdGlvbltdLFxuICBwcm9qZWN0TmFtZUZyb21TZXNzaW9uPzogc3RyaW5nIHwgbnVsbFxuKTogeyBjaGlwc1Byb2plY3Q6IENvbnZlcnNhdGlvblByb2plY3RDaGlwIHwgbnVsbDsgcHJvamVjdDogQ29udmVyc2F0aW9uUHJvamVjdE9wdGlvbiB8IG51bGwgfSA9PiB7XG4gIGNvbnN0IHByb2plY3RJZE51bSA9IE51bWJlcihwcm9qZWN0SWRNZXNzYWdlKVxuICBjb25zdCBmb3VuZFByb2plY3QgPSBwcm9qZWN0cy5maW5kKHByb2plY3QgPT4gTnVtYmVyKHByb2plY3QuaWQpID09PSBwcm9qZWN0SWROdW0pXG5cbiAgaWYgKGZvdW5kUHJvamVjdCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGlwc1Byb2plY3Q6IHtcbiAgICAgICAgcHJvamVjdE5hbWU6IGZvdW5kUHJvamVjdC5uYW1lLFxuICAgICAgICBjbGllbnROYW1lOiBmb3VuZFByb2plY3QuY2xpZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhmb3VuZFByb2plY3QuaWQpLFxuICAgICAgfSxcbiAgICAgIHByb2plY3Q6IGZvdW5kUHJvamVjdCxcbiAgICB9XG4gIH1cblxuICBpZiAocHJvamVjdE5hbWVGcm9tU2Vzc2lvbikge1xuICAgIHJldHVybiB7XG4gICAgICBjaGlwc1Byb2plY3Q6IHJlc29sdmVQcm9qZWN0Q2hpcEZyb21TZXNzaW9uKHByb2plY3RJZE1lc3NhZ2UsIHByb2plY3ROYW1lRnJvbVNlc3Npb24pLFxuICAgICAgcHJvamVjdDogeyBpZDogcHJvamVjdElkTnVtLCBuYW1lOiBwcm9qZWN0TmFtZUZyb21TZXNzaW9uIH0sXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgY2hpcHNQcm9qZWN0OiBudWxsLCBwcm9qZWN0OiBudWxsIH1cbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVUYXNrVXJsVGFiU2VnbWVudCA9ICh0YWI6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgPT4gKHRhYiA/IGAvJHt0YWJ9YCA6ICcvZGV0YWlsJylcblxuZXhwb3J0IGNvbnN0IHJld3JpdGVDaGF0TWVzc2FnZXNUYXNrVXJscyA9IChpdGVtczogQ2hhdE1lc3NhZ2VbXSwgdGFiU2VnbWVudDogc3RyaW5nKTogQ2hhdE1lc3NhZ2VbXSA9PlxuICBpdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgIC4uLml0ZW0sXG4gICAgbWVzc2FnZTogcmV3cml0ZVRhc2tVcmxzSW5Db250ZW50KGl0ZW0ubWVzc2FnZSB8fCAnJywgdGFiU2VnbWVudCksXG4gIH0pKVxuXG5leHBvcnQgY29uc3QgbWVyZ2VDaGF0TWVzc2FnZXNXaXRoQWN0aXZlU2Vzc2lvblRhaWwgPSAoXG4gIGhpc3RvcmljYWw6IENoYXRNZXNzYWdlW10sXG4gIHRhaWw6IENoYXRNZXNzYWdlW11cbik6IENoYXRNZXNzYWdlW10gPT4ge1xuICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQoaGlzdG9yaWNhbC5tYXAoaXRlbSA9PiBpdGVtLmlkKSlcbiAgY29uc3QgZXh0cmEgPSB0YWlsLmZpbHRlcihpdGVtID0+ICFleGlzdGluZ0lkcy5oYXMoaXRlbS5pZCkpXG4gIHJldHVybiBleHRyYS5sZW5ndGggPyBbLi4uaGlzdG9yaWNhbCwgLi4uZXh0cmFdIDogaGlzdG9yaWNhbFxufVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkQWJvcnRTdGFsZU1lc3NhZ2VMb2FkID0gKFxuICBzZXE6IG51bWJlcixcbiAgY3VycmVudFNlcTogbnVtYmVyLFxuICB0YXJnZXRDaGF0SWQ6IHN0cmluZyxcbiAgYWN0aXZlQ2hhdElkOiBzdHJpbmdcbik6IGJvb2xlYW4gPT4gc2VxICE9PSBjdXJyZW50U2VxIHx8IHRhcmdldENoYXRJZCAhPT0gYWN0aXZlQ2hhdElkXG5cbmV4cG9ydCB0eXBlIFNlc3Npb25BZ2VudE5vUGVybWlzc2lvbiA9IHtcbiAgaWQ6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgZW1vamk6IHN0cmluZ1xuICB0eXBlOiBzdHJpbmdcbiAgY29ubmVjdG9ycz86IEFnZW50Wydjb25uZWN0b3JzJ11cbn1cblxuZXhwb3J0IHR5cGUgU2Vzc2lvbkFnZW50RGVsZXRlZCA9IHtcbiAgaWQ6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgZW1vamk6IHN0cmluZ1xuICBkZWxldGVkQXQ/OiBzdHJpbmcgfCBudWxsXG4gIGNvbm5lY3RvcnM/OiBBZ2VudFsnY29ubmVjdG9ycyddXG59XG5cbmV4cG9ydCBjb25zdCBidWlsZERlbGV0ZWRTZXNzaW9uQWdlbnQgPSAoXG4gIGFnZW50RGVsZXRlZDogU2Vzc2lvbkFnZW50RGVsZXRlZCxcbiAgYWdlbnROb1Blcm1pc3Npb24/OiBTZXNzaW9uQWdlbnROb1Blcm1pc3Npb24gfCBudWxsXG4pOiBBZ2VudCA9PiAoe1xuICBpZDogYWdlbnREZWxldGVkLmlkLFxuICBuYW1lOiBhZ2VudERlbGV0ZWQubmFtZSxcbiAgZW1vamk6IGFnZW50RGVsZXRlZC5lbW9qaSxcbiAgdHlwZTogJ2N1c3RvbScsXG4gIGlzX2RlbGV0ZWQ6IHRydWUsXG4gIC4uLihhZ2VudERlbGV0ZWQuZGVsZXRlZEF0ID8geyBkZWxldGVkX2F0OiBhZ2VudERlbGV0ZWQuZGVsZXRlZEF0IH0gOiB7fSksXG4gIC4uLihhZ2VudE5vUGVybWlzc2lvbj8uY29ubmVjdG9ycyA/IHsgY29ubmVjdG9yczogYWdlbnROb1Blcm1pc3Npb24uY29ubmVjdG9ycyB9IDoge30pLFxufSlcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNlbGVjdE9ycGhhblNlc3Npb25BZ2VudCA9IChwYXJhbXM6IHtcbiAgYWdlbnROb1Blcm1pc3Npb246IFNlc3Npb25BZ2VudE5vUGVybWlzc2lvbiB8IG51bGwgfCB1bmRlZmluZWRcbiAgYWdlbnREZWxldGVkOiBTZXNzaW9uQWdlbnREZWxldGVkIHwgbnVsbCB8IHVuZGVmaW5lZFxuICB1c2VyQ2FuVmlld0FnZW50czogYm9vbGVhblxuICBoYXNBZ2VudEFjY2VzczogYm9vbGVhblxuICBoYXNBZ2VudFBlcm1pc3Npb246IGJvb2xlYW5cbiAgYWdlbnRFeGlzdHNJbkxpc3Q6IGJvb2xlYW5cbn0pOiBib29sZWFuID0+XG4gIEJvb2xlYW4oXG4gICAgcGFyYW1zLmFnZW50Tm9QZXJtaXNzaW9uICYmXG4gICAgIXBhcmFtcy5hZ2VudERlbGV0ZWQgJiZcbiAgICBwYXJhbXMudXNlckNhblZpZXdBZ2VudHMgJiZcbiAgICBwYXJhbXMuaGFzQWdlbnRBY2Nlc3MgJiZcbiAgICBwYXJhbXMuaGFzQWdlbnRQZXJtaXNzaW9uICYmXG4gICAgIXBhcmFtcy5hZ2VudEV4aXN0c0luTGlzdFxuICApXG5cbmV4cG9ydCBjb25zdCBidWlsZE9ycGhhblNlc3Npb25BZ2VudCA9IChcbiAgYWdlbnROb1Blcm1pc3Npb246IFNlc3Npb25BZ2VudE5vUGVybWlzc2lvbixcbiAgcHJvamVjdERlbGV0ZWQ/OiB7IG5hbWU6IHN0cmluZyB9IHwgbnVsbFxuKTogQWdlbnQgPT4gKHtcbiAgaWQ6IGFnZW50Tm9QZXJtaXNzaW9uLmlkLFxuICBuYW1lOiBhZ2VudE5vUGVybWlzc2lvbi5uYW1lLFxuICBlbW9qaTogYWdlbnROb1Blcm1pc3Npb24uZW1vamksXG4gIHR5cGU6IGFnZW50Tm9QZXJtaXNzaW9uLnR5cGUgYXMgQWdlbnRUeXBlLFxuICBpc19mcm9tX2NvbnZlcnNhdGlvbjogdHJ1ZSxcbiAgLi4uKGFnZW50Tm9QZXJtaXNzaW9uLmNvbm5lY3RvcnMgPyB7IGNvbm5lY3RvcnM6IGFnZW50Tm9QZXJtaXNzaW9uLmNvbm5lY3RvcnMgfSA6IHt9KSxcbiAgLi4uKHByb2plY3REZWxldGVkID8geyBwcm9qZWN0X2RlbGV0ZWQ6IHsgbmFtZTogcHJvamVjdERlbGV0ZWQubmFtZSB9IH0gOiB7fSksXG59KVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkTWVyZ2VMaXN0ZWRTZXNzaW9uQWdlbnQgPSAocGFyYW1zOiB7XG4gIGFnZW50Tm9QZXJtaXNzaW9uOiBTZXNzaW9uQWdlbnROb1Blcm1pc3Npb24gfCBudWxsIHwgdW5kZWZpbmVkXG4gIGFnZW50RGVsZXRlZDogU2Vzc2lvbkFnZW50RGVsZXRlZCB8IG51bGwgfCB1bmRlZmluZWRcbiAgaGFzQWdlbnRBY2Nlc3M6IGJvb2xlYW5cbiAgaGFzQWdlbnRQZXJtaXNzaW9uOiBib29sZWFuXG4gIGFnZW50RXhpc3RzSW5MaXN0OiBib29sZWFuXG59KTogYm9vbGVhbiA9PlxuICBCb29sZWFuKFxuICAgIHBhcmFtcy5hZ2VudE5vUGVybWlzc2lvbiAmJlxuICAgICFwYXJhbXMuYWdlbnREZWxldGVkICYmXG4gICAgcGFyYW1zLmhhc0FnZW50QWNjZXNzICYmXG4gICAgcGFyYW1zLmhhc0FnZW50UGVybWlzc2lvbiAmJlxuICAgIHBhcmFtcy5hZ2VudEV4aXN0c0luTGlzdFxuICApXG5cbmV4cG9ydCBjb25zdCBtZXJnZUxpc3RlZFNlc3Npb25BZ2VudCA9IChcbiAgYWdlbnRJbkxpc3Q6IEFnZW50LFxuICBhZ2VudE5vUGVybWlzc2lvbjogU2Vzc2lvbkFnZW50Tm9QZXJtaXNzaW9uLFxuICBwcm9qZWN0RGVsZXRlZD86IHsgbmFtZTogc3RyaW5nIH0gfCBudWxsXG4pOiBBZ2VudCA9PiAoe1xuICAuLi5hZ2VudEluTGlzdCxcbiAgLi4uKGFnZW50Tm9QZXJtaXNzaW9uLmNvbm5lY3RvcnMgPyB7IGNvbm5lY3RvcnM6IGFnZW50Tm9QZXJtaXNzaW9uLmNvbm5lY3RvcnMgfSA6IHt9KSxcbiAgLi4uKHByb2plY3REZWxldGVkID8geyBwcm9qZWN0X2RlbGV0ZWQ6IHsgbmFtZTogcHJvamVjdERlbGV0ZWQubmFtZSB9IH0gOiB7IHByb2plY3RfZGVsZXRlZDogdW5kZWZpbmVkIH0pLFxufSlcblxuZXhwb3J0IHR5cGUgUmVzdHJpY3RlZFNlc3Npb25BZ2VudFJlYXNvbiA9ICdub19hY2Nlc3MnIHwgJ25vX3Blcm1pc3Npb24nIHwgJ3Byb2plY3RfZGVsZXRlZCdcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVSZXN0cmljdGVkU2Vzc2lvbkFnZW50ID0gKFxuICBhZ2VudE5vUGVybWlzc2lvbjogU2Vzc2lvbkFnZW50Tm9QZXJtaXNzaW9uLFxuICBwYXJhbXM6IHtcbiAgICBoYXNBZ2VudEFjY2VzczogYm9vbGVhblxuICAgIGhhc0FnZW50UGVybWlzc2lvbjogYm9vbGVhblxuICAgIHByb2plY3REZWxldGVkPzogeyBuYW1lOiBzdHJpbmcgfSB8IG51bGxcbiAgfVxuKTogeyBhZ2VudDogQWdlbnQ7IHJlYXNvbjogUmVzdHJpY3RlZFNlc3Npb25BZ2VudFJlYXNvbiB9IHwgbnVsbCA9PiB7XG4gIGNvbnN0IGJhc2UgPSB7XG4gICAgaWQ6IGFnZW50Tm9QZXJtaXNzaW9uLmlkLFxuICAgIG5hbWU6IGFnZW50Tm9QZXJtaXNzaW9uLm5hbWUsXG4gICAgZW1vamk6IGFnZW50Tm9QZXJtaXNzaW9uLmVtb2ppLFxuICAgIHR5cGU6IGFnZW50Tm9QZXJtaXNzaW9uLnR5cGUgYXMgQWdlbnRUeXBlLFxuICAgIC4uLihhZ2VudE5vUGVybWlzc2lvbi5jb25uZWN0b3JzID8geyBjb25uZWN0b3JzOiBhZ2VudE5vUGVybWlzc2lvbi5jb25uZWN0b3JzIH0gOiB7fSksXG4gICAgLi4uKHBhcmFtcy5wcm9qZWN0RGVsZXRlZCA/IHsgcHJvamVjdF9kZWxldGVkOiB7IG5hbWU6IHBhcmFtcy5wcm9qZWN0RGVsZXRlZC5uYW1lIH0gfSA6IHt9KSxcbiAgfVxuXG4gIGlmICghcGFyYW1zLmhhc0FnZW50QWNjZXNzKSB7XG4gICAgcmV0dXJuIHsgcmVhc29uOiAnbm9fYWNjZXNzJywgYWdlbnQ6IHsgLi4uYmFzZSwgaGFzX25vdF9hY2Nlc3M6IHRydWUgfSB9XG4gIH1cbiAgaWYgKCFwYXJhbXMuaGFzQWdlbnRQZXJtaXNzaW9uKSB7XG4gICAgcmV0dXJuIHsgcmVhc29uOiAnbm9fcGVybWlzc2lvbicsIGFnZW50OiB7IC4uLmJhc2UsIGhhc19ub3RfcGVybWlzc2lvbnM6IHRydWUgfSB9XG4gIH1cbiAgaWYgKHBhcmFtcy5wcm9qZWN0RGVsZXRlZCkge1xuICAgIHJldHVybiB7XG4gICAgICByZWFzb246ICdwcm9qZWN0X2RlbGV0ZWQnLFxuICAgICAgYWdlbnQ6IHtcbiAgICAgICAgaWQ6IGFnZW50Tm9QZXJtaXNzaW9uLmlkLFxuICAgICAgICBuYW1lOiBhZ2VudE5vUGVybWlzc2lvbi5uYW1lLFxuICAgICAgICBlbW9qaTogYWdlbnROb1Blcm1pc3Npb24uZW1vamksXG4gICAgICAgIHR5cGU6IGFnZW50Tm9QZXJtaXNzaW9uLnR5cGUgYXMgQWdlbnRUeXBlLFxuICAgICAgICAuLi4oYWdlbnROb1Blcm1pc3Npb24uY29ubmVjdG9ycyA/IHsgY29ubmVjdG9yczogYWdlbnROb1Blcm1pc3Npb24uY29ubmVjdG9ycyB9IDoge30pLFxuICAgICAgICBwcm9qZWN0X2RlbGV0ZWQ6IHsgbmFtZTogcGFyYW1zLnByb2plY3REZWxldGVkLm5hbWUgfSxcbiAgICAgIH0sXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCB0eXBlIENoYXRMb2FkU2Vzc2lvbkFnZW50Q29udGV4dCA9IHtcbiAgYWdlbnREZWxldGVkOiBTZXNzaW9uQWdlbnREZWxldGVkIHwgbnVsbCB8IHVuZGVmaW5lZFxuICBhZ2VudE5vUGVybWlzc2lvbjogU2Vzc2lvbkFnZW50Tm9QZXJtaXNzaW9uIHwgbnVsbCB8IHVuZGVmaW5lZFxuICBhZ2VudHM6IEFnZW50W11cbiAgdXNlckNhblZpZXdBZ2VudHM6IGJvb2xlYW5cbiAgaGFzQWdlbnRBY2Nlc3M6IGJvb2xlYW5cbiAgaGFzQWdlbnRQZXJtaXNzaW9uOiBib29sZWFuXG4gIHByb2plY3REZWxldGVkPzogeyBuYW1lOiBzdHJpbmcgfSB8IG51bGxcbn1cblxuLyoqIFLDqXBsaWNhIGxhIGNhZGVuYSBkZSBgc2VsZWN0QWdlbnRgIGVuIGBsb2FkTWVzc2FnZXNgICjDumx0aW1hIHNlbGVjY2nDs24gZ2FuYSkuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZVNlc3Npb25BZ2VudEZyb21DaGF0TG9hZCA9IChjdHg6IENoYXRMb2FkU2Vzc2lvbkFnZW50Q29udGV4dCk6IEFnZW50IHwgbnVsbCA9PiB7XG4gIGNvbnN0IHsgYWdlbnREZWxldGVkLCBhZ2VudE5vUGVybWlzc2lvbiwgYWdlbnRzLCBwcm9qZWN0RGVsZXRlZCB9ID0gY3R4XG4gIGxldCBzZWxlY3RlZDogQWdlbnQgfCBudWxsID0gbnVsbFxuXG4gIGlmIChhZ2VudERlbGV0ZWQpIHtcbiAgICBzZWxlY3RlZCA9IGJ1aWxkRGVsZXRlZFNlc3Npb25BZ2VudChhZ2VudERlbGV0ZWQsIGFnZW50Tm9QZXJtaXNzaW9uKVxuICB9XG5cbiAgY29uc3QgYWdlbnRFeGlzdHNJbkxpc3QgPSBCb29sZWFuKFxuICAgIGFnZW50Tm9QZXJtaXNzaW9uICYmIGFnZW50cy5zb21lKGFnZW50SXRlbSA9PiBhZ2VudEl0ZW0uaWQgPT09IGFnZW50Tm9QZXJtaXNzaW9uLmlkKVxuICApXG5cbiAgaWYgKFxuICAgIHNob3VsZFNlbGVjdE9ycGhhblNlc3Npb25BZ2VudCh7XG4gICAgICBhZ2VudE5vUGVybWlzc2lvbixcbiAgICAgIGFnZW50RGVsZXRlZCxcbiAgICAgIHVzZXJDYW5WaWV3QWdlbnRzOiBjdHgudXNlckNhblZpZXdBZ2VudHMsXG4gICAgICBoYXNBZ2VudEFjY2VzczogY3R4Lmhhc0FnZW50QWNjZXNzLFxuICAgICAgaGFzQWdlbnRQZXJtaXNzaW9uOiBjdHguaGFzQWdlbnRQZXJtaXNzaW9uLFxuICAgICAgYWdlbnRFeGlzdHNJbkxpc3QsXG4gICAgfSkgJiZcbiAgICBhZ2VudE5vUGVybWlzc2lvblxuICApIHtcbiAgICBzZWxlY3RlZCA9IGJ1aWxkT3JwaGFuU2Vzc2lvbkFnZW50KGFnZW50Tm9QZXJtaXNzaW9uLCBwcm9qZWN0RGVsZXRlZClcbiAgfVxuXG4gIGlmIChcbiAgICBzaG91bGRNZXJnZUxpc3RlZFNlc3Npb25BZ2VudCh7XG4gICAgICBhZ2VudE5vUGVybWlzc2lvbixcbiAgICAgIGFnZW50RGVsZXRlZCxcbiAgICAgIGhhc0FnZW50QWNjZXNzOiBjdHguaGFzQWdlbnRBY2Nlc3MsXG4gICAgICBoYXNBZ2VudFBlcm1pc3Npb246IGN0eC5oYXNBZ2VudFBlcm1pc3Npb24sXG4gICAgICBhZ2VudEV4aXN0c0luTGlzdCxcbiAgICB9KSAmJlxuICAgIGFnZW50Tm9QZXJtaXNzaW9uXG4gICkge1xuICAgIGNvbnN0IGFnZW50SW5MaXN0ID0gYWdlbnRzLmZpbmQoYWdlbnRJdGVtID0+IGFnZW50SXRlbS5pZCA9PT0gYWdlbnROb1Blcm1pc3Npb24uaWQpXG4gICAgaWYgKGFnZW50SW5MaXN0KSB7XG4gICAgICBzZWxlY3RlZCA9IG1lcmdlTGlzdGVkU2Vzc2lvbkFnZW50KGFnZW50SW5MaXN0LCBhZ2VudE5vUGVybWlzc2lvbiwgcHJvamVjdERlbGV0ZWQpXG4gICAgfVxuICB9XG5cbiAgaWYgKGFnZW50Tm9QZXJtaXNzaW9uICYmICFhZ2VudERlbGV0ZWQpIHtcbiAgICBjb25zdCByZXN0cmljdGVkID0gcmVzb2x2ZVJlc3RyaWN0ZWRTZXNzaW9uQWdlbnQoYWdlbnROb1Blcm1pc3Npb24sIHtcbiAgICAgIGhhc0FnZW50QWNjZXNzOiBjdHguaGFzQWdlbnRBY2Nlc3MsXG4gICAgICBoYXNBZ2VudFBlcm1pc3Npb246IGN0eC5oYXNBZ2VudFBlcm1pc3Npb24sXG4gICAgICBwcm9qZWN0RGVsZXRlZCxcbiAgICB9KVxuICAgIGlmIChyZXN0cmljdGVkKSB7XG4gICAgICBzZWxlY3RlZCA9IHJlc3RyaWN0ZWQuYWdlbnRcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2VsZWN0ZWRcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkU2Vzc2lvbkNvbnZlcnNhdGlvbk1ldGEgPSAoZmllbGRzOiB7XG4gIHByb2plY3RJZE1lc3NhZ2U/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIHByb2plY3ROYW1lRnJvbVNlc3Npb24/OiBzdHJpbmcgfCBudWxsXG4gIGNsaWVudElkRnJvbVNlc3Npb24/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIGNsaWVudE5hbWVGcm9tU2Vzc2lvbj86IHN0cmluZyB8IG51bGxcbiAgdGFza0lkRnJvbVNlc3Npb24/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIHRhc2tOYW1lRnJvbVNlc3Npb24/OiBzdHJpbmcgfCBudWxsXG59KTogU2Vzc2lvbkNvbnZlcnNhdGlvbk1ldGEgPT4gKHtcbiAgcHJvamVjdElkTWVzc2FnZTogZmllbGRzLnByb2plY3RJZE1lc3NhZ2UsXG4gIHByb2plY3ROYW1lRnJvbVNlc3Npb246IGZpZWxkcy5wcm9qZWN0TmFtZUZyb21TZXNzaW9uLFxuICBjbGllbnRJZEZyb21TZXNzaW9uOiBmaWVsZHMuY2xpZW50SWRGcm9tU2Vzc2lvbixcbiAgY2xpZW50TmFtZUZyb21TZXNzaW9uOiBmaWVsZHMuY2xpZW50TmFtZUZyb21TZXNzaW9uLFxuICB0YXNrSWRGcm9tU2Vzc2lvbjogZmllbGRzLnRhc2tJZEZyb21TZXNzaW9uLFxuICB0YXNrTmFtZUZyb21TZXNzaW9uOiBmaWVsZHMudGFza05hbWVGcm9tU2Vzc2lvbixcbn0pXG5cbmV4cG9ydCBjb25zdCBidWlsZFNlc3Npb25NZXRhRXZlbnREZXRhaWwgPSAoXG4gIGNoYXRJZDogc3RyaW5nLFxuICBmaWVsZHM6IE9taXQ8U2Vzc2lvbk1ldGFFdmVudERldGFpbCwgJ2NoYXRJZCc+XG4pOiBTZXNzaW9uTWV0YUV2ZW50RGV0YWlsID0+ICh7XG4gIGNoYXRJZCxcbiAgYWdlbnRUeXBlOiBmaWVsZHMuYWdlbnRUeXBlLFxuICBhZ2VudEVudGl0eTogZmllbGRzLmFnZW50RW50aXR5LFxuICBwcm9qZWN0SWQ6IGZpZWxkcy5wcm9qZWN0SWQsXG4gIHByb2plY3ROYW1lOiBmaWVsZHMucHJvamVjdE5hbWUsXG4gIGNsaWVudElkOiBmaWVsZHMuY2xpZW50SWQsXG4gIGNsaWVudE5hbWU6IGZpZWxkcy5jbGllbnROYW1lLFxuICB0YXNrSWQ6IGZpZWxkcy50YXNrSWQsXG4gIHRhc2tOYW1lOiBmaWVsZHMudGFza05hbWUsXG59KVxuXG5leHBvcnQgY29uc3QgaGFzQ29udmVyc2F0aW9uUHJvamVjdENvbnRleHQgPSAocHJvamVjdElkTWVzc2FnZTogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT5cbiAgQm9vbGVhbihwcm9qZWN0SWRNZXNzYWdlKVxuXG5leHBvcnQgY29uc3QgcmV3cml0ZU1lc3NhZ2VzRm9yUHJvamVjdFRhc2tVcmxzID0gYXN5bmMgKFxuICBpdGVtczogQ2hhdE1lc3NhZ2VbXSxcbiAgcHJvamVjdElkTWVzc2FnZTogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgZ2V0VGFiVGFza0RlZmF1bHQ6IChwYWdlOiBudW1iZXIpID0+IFByb21pc2U8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD5cbik6IFByb21pc2U8Q2hhdE1lc3NhZ2VbXT4gPT4ge1xuICBpZiAoIWhhc0NvbnZlcnNhdGlvblByb2plY3RDb250ZXh0KHByb2plY3RJZE1lc3NhZ2UpKSB7XG4gICAgcmV0dXJuIGl0ZW1zXG4gIH1cbiAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQoMSlcbiAgcmV0dXJuIHJld3JpdGVDaGF0TWVzc2FnZXNUYXNrVXJscyhpdGVtcywgcmVzb2x2ZVRhc2tVcmxUYWJTZWdtZW50KHRhYikpXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlRmluYWxNZXNzYWdlc1dpdGhBY3RpdmVTdHJlYW1pbmdUYWlsID0gKFxuICBpdGVtczogQ2hhdE1lc3NhZ2VbXSxcbiAgdGFpbDogQ2hhdE1lc3NhZ2VbXSxcbiAgc2Vzc2lvblN0YXR1czogU2Vzc2lvblN0YXR1cyB8IHVuZGVmaW5lZFxuKTogQ2hhdE1lc3NhZ2VbXSA9PiB7XG4gIGlmIChzZXNzaW9uU3RhdHVzICYmIGlzQWN0aXZlU2Vzc2lvblN0YXR1cyhzZXNzaW9uU3RhdHVzKSkge1xuICAgIHJldHVybiBtZXJnZUNoYXRNZXNzYWdlc1dpdGhBY3RpdmVTZXNzaW9uVGFpbChpdGVtcywgdGFpbClcbiAgfVxuICByZXR1cm4gaXRlbXNcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZExvYWRNb3JlTWVzc2FnZXNPblNjcm9sbCA9IChcbiAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gIHNjcm9sbEhlaWdodDogbnVtYmVyLFxuICBjbGllbnRIZWlnaHQ6IG51bWJlcixcbiAgdGhyZXNob2xkUGVyY2VudCA9IDkwXG4pOiBib29sZWFuID0+IHtcbiAgY29uc3Qgc2Nyb2xsYWJsZSA9IHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodFxuICBpZiAoc2Nyb2xsYWJsZSA8PSAwKSByZXR1cm4gZmFsc2VcbiAgY29uc3Qgc2Nyb2xsUGVyY2VudGFnZSA9IChzY3JvbGxUb3AgLyBzY3JvbGxhYmxlKSAqIDEwMFxuICByZXR1cm4gc2Nyb2xsUGVyY2VudGFnZSA+IHRocmVzaG9sZFBlcmNlbnRcbn1cblxuZXhwb3J0IGNvbnN0IG1lc3NhZ2VzTmVlZFRhYlJld3JpdGUgPSAobWVzc2FnZXM6IENoYXRNZXNzYWdlW10sIHRhYlRhc2tEZWZhdWx0OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gIHJldHVybiBtZXNzYWdlcy5zb21lKG1zZyA9PiB7XG4gICAgY29uc3QgY29udGVudCA9IG1zZy5tZXNzYWdlIHx8ICcnXG4gICAgY29uc3QgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2godGFza1VybFJlZ2V4KVxuICAgIGlmICghbWF0Y2hlcz8ubGVuZ3RoKSByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gbWF0Y2hlcy5zb21lKHVybCA9PiAhdXJsLmVuZHNXaXRoKGAvJHt0YWJUYXNrRGVmYXVsdH1gKSAmJiAhdXJsLmluY2x1ZGVzKGAvJHt0YWJUYXNrRGVmYXVsdH0/YCkpXG4gIH0pXG59XG5cbmV4cG9ydCBjb25zdCB1cHNlcnRDaGF0TWVzc2FnZSA9IChwcmV2aW91czogQ2hhdE1lc3NhZ2VbXSwgbWVzc2FnZTogQ2hhdE1lc3NhZ2UpOiBDaGF0TWVzc2FnZVtdID0+IHtcbiAgY29uc3QgZXhpc3RpbmdNZXNzYWdlSW5kZXggPSBwcmV2aW91cy5maW5kSW5kZXgobXNnID0+IG1zZy5pZCA9PT0gbWVzc2FnZS5pZClcbiAgaWYgKGV4aXN0aW5nTWVzc2FnZUluZGV4ID49IDApIHtcbiAgICByZXR1cm4gcHJldmlvdXMubWFwKChtc2csIGluZGV4KSA9PiAoaW5kZXggPT09IGV4aXN0aW5nTWVzc2FnZUluZGV4ID8gbWVzc2FnZSA6IG1zZykpXG4gIH1cbiAgcmV0dXJuIFsuLi5wcmV2aW91cywgbWVzc2FnZV1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsU0FBU0EsbUJBQW1CLFFBQVEsNEJBQTRCO0FBQ2hFLFNBQVNDLHNCQUFzQixRQUFRLDBCQUEwQjtBQUNqRSxTQUFTQyxrQ0FBa0MsUUFBUSxzQ0FBc0M7QUFDekYsU0FBU0Msa0JBQWtCLFFBQVEsMkJBQTJCO0FBSTlELFNBQ0VDLHFCQUFxQixRQUloQixxQ0FBcUM7QUFJNUM7QUFDQSxPQUFPLElBQU1DLCtCQUErQixHQUFHLFNBQWxDQSwrQkFBK0JBLENBQUlDLGtCQUF1QztFQUFBLElBQUFDLHFCQUFBLEVBQUFDLHFCQUFBO0VBQUEsT0FDckZDLE9BQU8sQ0FDTEgsa0JBQWtCLEtBQ2pCLEVBQUFDLHFCQUFBLEdBQUFELGtCQUFrQixDQUFDSSxPQUFPLGNBQUFILHFCQUFBLHVCQUExQkEscUJBQUEsQ0FBNEJJLElBQUksQ0FBQyxDQUFDLE9BQUFILHFCQUFBLEdBQ2pDRixrQkFBa0IsQ0FBQ00sV0FBVyxjQUFBSixxQkFBQSx1QkFBOUJBLHFCQUFBLENBQWdDSyxNQUFNLEtBQ3RDUCxrQkFBa0IsQ0FBQ1EsS0FBSyxJQUN4QlIsa0JBQWtCLENBQUNTLElBQUksQ0FDM0IsQ0FBQztBQUFBOztBQUVIO0FBQ0EsT0FBTyxJQUFNQyxnQ0FBZ0MsR0FBRyxTQUFuQ0EsZ0NBQWdDQSxDQUFJQyxTQUFpQixFQUFXO0VBQzNFLElBQUFDLG1CQUFBLEdBQTREZixrQkFBa0IsQ0FBQyxDQUFDO0lBQXhFZ0IsaUJBQWlCLEdBQUFELG1CQUFBLENBQWpCQyxpQkFBaUI7SUFBRUMsWUFB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