@projectcor/maia-components 2.45.0 → 2.45.1-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 (430) hide show
  1. package/lib/App.js +44 -19
  2. package/lib/components/atoms/ActionableButton.spec.js +111 -0
  3. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +52 -0
  4. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +11 -0
  5. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +135 -0
  6. package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
  7. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +65 -0
  8. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +66 -0
  9. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +5 -51
  10. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +211 -0
  11. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
  12. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +55 -0
  13. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +41 -0
  14. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +18 -76
  15. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +253 -0
  16. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
  17. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +31 -0
  18. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +33 -0
  19. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +3 -31
  20. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +25 -0
  21. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +4 -0
  22. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +11 -0
  23. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +2 -4
  24. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +77 -0
  25. package/lib/components/atoms/Backdrop/Backdrop.spec.js +28 -0
  26. package/lib/components/atoms/CardMenu/CardMenu.spec.js +56 -0
  27. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +67 -0
  28. package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
  29. package/lib/components/atoms/Chip/Chip.spec.js +82 -0
  30. package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +26 -0
  31. package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +88 -0
  32. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
  33. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +46 -0
  34. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +227 -0
  35. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +77 -0
  36. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +15 -255
  37. package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +81 -0
  38. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +31 -0
  39. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +48 -0
  40. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +5 -34
  41. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +231 -0
  42. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +107 -0
  43. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +136 -0
  44. package/lib/components/atoms/CopyToClipboard.spec.js +74 -0
  45. package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +76 -0
  46. package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +86 -0
  47. package/lib/components/atoms/Expand/Expand.spec.js +57 -0
  48. package/lib/components/atoms/Fade/Fade.spec.js +31 -0
  49. package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +75 -0
  50. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +104 -0
  51. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
  52. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +91 -0
  53. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
  54. package/lib/components/atoms/HelpButton.spec.js +87 -0
  55. package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +96 -0
  56. package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +54 -0
  57. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +21 -0
  58. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +20 -0
  59. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +26 -0
  60. package/lib/components/atoms/LoadingText/LoadingText.spec.js +25 -0
  61. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
  62. package/lib/components/atoms/MAIAError/MAIAError.spec.js +27 -0
  63. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +12 -0
  64. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +26 -0
  65. package/lib/components/atoms/MAIAInput/MAIAInput.js +8 -12
  66. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +444 -0
  67. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +50 -0
  68. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +20 -0
  69. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +8 -60
  70. package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +53 -0
  71. package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +22 -0
  72. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +64 -0
  73. package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +43 -0
  74. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +114 -0
  75. package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +51 -0
  76. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +48 -0
  77. package/lib/components/atoms/ModalProject/ModalProject.spec.js +66 -0
  78. package/lib/components/atoms/NextPageLoader.spec.js +37 -0
  79. package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +20 -0
  80. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +17 -0
  81. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +35 -0
  82. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +3 -15
  83. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +47 -0
  84. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +86 -0
  85. package/lib/components/atoms/PrimaryButton.spec.js +42 -0
  86. package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +69 -0
  87. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
  88. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
  89. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +41 -24
  90. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +27 -13
  91. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
  92. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +79 -52
  93. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +170 -0
  94. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +9 -11
  95. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +199 -0
  96. package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +6 -1
  97. package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +70 -0
  98. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +36 -15
  99. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +120 -0
  100. package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +8 -0
  101. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +10 -0
  102. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +31 -0
  103. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
  104. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
  105. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +29 -0
  106. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +38 -0
  107. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +16 -0
  108. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
  109. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +24 -0
  110. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +85 -0
  111. package/lib/components/atoms/Switch/Switch.spec.js +41 -0
  112. package/lib/components/atoms/TextArea/CustomTextArea.spec.js +52 -0
  113. package/lib/components/atoms/TextArea/TextArea.spec.js +68 -0
  114. package/lib/components/atoms/ThirdButton.spec.js +29 -0
  115. package/lib/components/atoms/VideoModal/VideoModal.spec.js +68 -0
  116. package/lib/components/atoms/WithAppCfg.spec.js +60 -0
  117. package/lib/components/index.js +2 -1
  118. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +37 -0
  119. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +53 -0
  120. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +5 -29
  121. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +371 -0
  122. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +39 -0
  123. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +57 -0
  124. package/lib/components/molecules/AbmSection/AbmGeneralSection.js +6 -40
  125. package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +227 -0
  126. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +86 -0
  127. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +108 -0
  128. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +18 -90
  129. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +254 -0
  130. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +17 -0
  131. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +50 -0
  132. package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +5 -15
  133. package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +94 -0
  134. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
  135. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
  136. package/lib/components/molecules/AgentInputBlock/index.js +5 -0
  137. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
  138. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
  139. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
  140. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
  141. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
  142. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +66 -0
  143. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
  144. package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +145 -0
  145. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +204 -0
  146. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +21 -6
  147. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +246 -0
  148. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +86 -0
  149. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
  150. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +54 -0
  151. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +77 -0
  152. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +19 -47
  153. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +410 -0
  154. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
  155. package/lib/components/molecules/ChatAIMessages/newStyles.js +29 -26
  156. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +147 -4
  157. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +471 -0
  158. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +64 -108
  159. package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +659 -0
  160. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +5 -0
  161. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +33 -0
  162. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +3 -2
  163. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +116 -0
  164. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
  165. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +134 -0
  166. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
  167. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +30 -0
  168. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +95 -0
  169. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +76 -86
  170. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +241 -0
  171. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
  172. package/lib/components/molecules/ChatAIModal/constants.spec.js +16 -0
  173. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +22 -0
  174. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +67 -0
  175. package/lib/components/molecules/ChatAIModal/layout.spec.js +72 -0
  176. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +172 -0
  177. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +128 -0
  178. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +66 -0
  179. package/lib/components/molecules/ChatFooter/ChatFooter.js +10 -4
  180. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +369 -0
  181. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +10 -0
  182. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +48 -0
  183. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +82 -0
  184. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +9 -44
  185. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +139 -0
  186. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
  187. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
  188. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +126 -0
  189. package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +115 -0
  190. package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +79 -0
  191. package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +37 -0
  192. package/lib/components/molecules/Sidebar/Sidebar.js +41 -23
  193. package/lib/components/molecules/Sidebar/Sidebar.spec.js +453 -0
  194. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +198 -0
  195. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +385 -0
  196. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +56 -171
  197. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1125 -0
  198. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
  199. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +405 -0
  200. package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
  201. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +525 -0
  202. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +231 -0
  203. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
  204. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
  205. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +139 -0
  206. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
  207. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +275 -0
  208. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +275 -0
  209. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +195 -0
  210. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +94 -0
  211. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +69 -0
  212. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
  213. package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
  214. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
  215. package/lib/components/organisms/ChatAIPage/index.js +3 -0
  216. package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +53 -0
  217. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
  218. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
  219. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
  220. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +49 -0
  221. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +67 -0
  222. package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +117 -0
  223. package/lib/components/organisms/SnackBar/Snackbar.spec.js +66 -0
  224. package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +19 -0
  225. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +52 -0
  226. package/lib/constants/maiaExternalConnectorsAccess.spec.js +29 -0
  227. package/lib/constants/permissions/index.js +2 -2
  228. package/lib/constants/permissions/utils.js +4 -1
  229. package/lib/constants/permissions/utils.spec.js +128 -0
  230. package/lib/dev/DevMaiaPage.js +30 -0
  231. package/lib/dev/DevReasoningTimeline.js +68 -37
  232. package/lib/dev/Providers.js +5 -3
  233. package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
  234. package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
  235. package/lib/hooks/useAccessClient/useAccessClient.spec.js +149 -0
  236. package/lib/hooks/useAgentModel/useAgentModel.spec.js +83 -0
  237. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +231 -0
  238. package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
  239. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +313 -0
  240. package/lib/hooks/useAgentSuggestions.spec.js +89 -0
  241. package/lib/hooks/useCaretPosition.spec.js +58 -0
  242. package/lib/hooks/useChatManager/useChatManager.helpers.js +353 -0
  243. package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +506 -0
  244. package/lib/hooks/useChatManager/useChatManager.js +76 -351
  245. package/lib/hooks/useChatManager/useChatManager.spec.js +1261 -0
  246. package/lib/hooks/useChatMessages/useChatMessages.helpers.js +109 -0
  247. package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +176 -0
  248. package/lib/hooks/useChatMessages/useChatMessages.js +12 -82
  249. package/lib/hooks/useChatMessages/useChatMessages.spec.js +379 -0
  250. package/lib/hooks/useChats/useChats.spec.js +208 -0
  251. package/lib/hooks/useClientSearch.helpers.js +36 -0
  252. package/lib/hooks/useClientSearch.helpers.spec.js +52 -0
  253. package/lib/hooks/useClientSearch.js +4 -32
  254. package/lib/hooks/useClientSearch.spec.js +86 -0
  255. package/lib/hooks/useContextMentions.helpers.js +152 -0
  256. package/lib/hooks/useContextMentions.helpers.spec.js +143 -0
  257. package/lib/hooks/useContextMentions.js +2 -163
  258. package/lib/hooks/useContextMentions.spec.js +239 -0
  259. package/lib/hooks/useContextMentions.types.js +2 -0
  260. package/lib/hooks/useContextPinPopover.helpers.js +95 -0
  261. package/lib/hooks/useContextPinPopover.helpers.spec.js +115 -0
  262. package/lib/hooks/useContextPinPopover.js +16 -75
  263. package/lib/hooks/useContextPinPopover.spec.js +159 -0
  264. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
  265. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
  266. package/lib/hooks/useDebounce.spec.js +42 -0
  267. package/lib/hooks/useEntitySearch.helpers.js +359 -0
  268. package/lib/hooks/useEntitySearch.helpers.spec.js +321 -0
  269. package/lib/hooks/useEntitySearch.js +38 -391
  270. package/lib/hooks/useEntitySearch.spec.js +443 -0
  271. package/lib/hooks/useEvent.spec.js +45 -0
  272. package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
  273. package/lib/hooks/useFrequentlyUsedActions.js +60 -22
  274. package/lib/hooks/useFrequentlyUsedActions.spec.js +135 -0
  275. package/lib/hooks/useIsMaiaPageRoute.js +26 -0
  276. package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
  277. package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +122 -0
  278. package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +148 -0
  279. package/lib/hooks/useKnowledge/saveKnowledge.spec.js +104 -0
  280. package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +178 -0
  281. package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
  282. package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
  283. package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
  284. package/lib/hooks/useMentionPopover.helpers.js +41 -0
  285. package/lib/hooks/useMentionPopover.helpers.spec.js +71 -0
  286. package/lib/hooks/useMentionPopover.js +9 -35
  287. package/lib/hooks/useMentionPopover.spec.js +215 -0
  288. package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +47 -0
  289. package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +132 -0
  290. package/lib/hooks/useMinimizedPillBottomOffset.js +15 -45
  291. package/lib/hooks/useMinimizedPillBottomOffset.spec.js +89 -0
  292. package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
  293. package/lib/hooks/useModal/useModal.spec.js +73 -0
  294. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +192 -0
  295. package/lib/hooks/useProjectSearch.helpers.js +61 -0
  296. package/lib/hooks/useProjectSearch.helpers.spec.js +70 -0
  297. package/lib/hooks/useProjectSearch.js +4 -58
  298. package/lib/hooks/useProjectSearch.spec.js +91 -0
  299. package/lib/hooks/useProjectSummary.spec.js +193 -0
  300. package/lib/hooks/useProjectSummaryConfig.helpers.js +62 -0
  301. package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +92 -0
  302. package/lib/hooks/useProjectSummaryConfig.js +14 -52
  303. package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
  304. package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +112 -0
  305. package/lib/hooks/useRecentClientsSearch.helpers.js +33 -0
  306. package/lib/hooks/useRecentClientsSearch.helpers.spec.js +33 -0
  307. package/lib/hooks/useRecentClientsSearch.js +4 -32
  308. package/lib/hooks/useRecentClientsSearch.spec.js +85 -0
  309. package/lib/hooks/useRecentContexts.spec.js +139 -0
  310. package/lib/hooks/useResize.spec.js +37 -0
  311. package/lib/hooks/useSkillsCatalog.spec.js +88 -0
  312. package/lib/hooks/useSlashCommands.spec.js +139 -0
  313. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +101 -0
  314. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
  315. package/lib/hooks/useStreamResponse.spec.js +199 -0
  316. package/lib/hooks/useT.spec.js +20 -0
  317. package/lib/hooks/useToggle.spec.js +33 -0
  318. package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +171 -0
  319. package/lib/index.js +5 -2
  320. package/lib/lang/br/index.js +26 -1
  321. package/lib/lang/en/index.js +26 -1
  322. package/lib/lang/es/index.js +26 -1
  323. package/lib/lang/fr/index.js +26 -1
  324. package/lib/services/maia/Access/updateAccess.spec.js +137 -0
  325. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  326. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +56 -0
  327. package/lib/services/maia/Actions/getSlashCommands.spec.js +91 -0
  328. package/lib/services/maia/Agents/connectors.spec.js +359 -0
  329. package/lib/services/maia/Agents/createAgent.spec.js +55 -0
  330. package/lib/services/maia/Agents/deleteAgent.spec.js +57 -0
  331. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
  332. package/lib/services/maia/Agents/getAgentById.spec.js +190 -0
  333. package/lib/services/maia/Agents/getAgentModels.spec.js +190 -0
  334. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +89 -0
  335. package/lib/services/maia/Agents/getAgents.helpers.js +181 -0
  336. package/lib/services/maia/Agents/getAgents.helpers.spec.js +211 -0
  337. package/lib/services/maia/Agents/getAgents.js +78 -242
  338. package/lib/services/maia/Agents/getAgents.spec.js +697 -0
  339. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
  340. package/lib/services/maia/Agents/toggleFavorite.spec.js +59 -0
  341. package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
  342. package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
  343. package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
  344. package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
  345. package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
  346. package/lib/services/maia/Chats/patchChat.spec.js +41 -0
  347. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
  348. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
  349. package/lib/services/maia/Knowledge/delete.spec.js +45 -0
  350. package/lib/services/maia/Knowledge/download.spec.js +78 -0
  351. package/lib/services/maia/Knowledge/save.spec.js +58 -0
  352. package/lib/services/maia/Orchestrator/orchestrator.helpers.js +130 -0
  353. package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +153 -0
  354. package/lib/services/maia/Orchestrator/orchestrator.js +38 -121
  355. package/lib/services/maia/Orchestrator/orchestrator.spec.js +181 -0
  356. package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
  357. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +103 -0
  358. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
  359. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
  360. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
  361. package/lib/services/maia/Skills/createSkill.spec.js +68 -0
  362. package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
  363. package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
  364. package/lib/services/maia/Skills/getSkills.spec.js +152 -0
  365. package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
  366. package/lib/services/maia/client.spec.js +56 -0
  367. package/lib/services/utils/fetchCOR.spec.js +211 -0
  368. package/lib/services/utils/getCookie.spec.js +20 -0
  369. package/lib/services/utils/mapChatMessages.spec.js +254 -0
  370. package/lib/store/chatsSidebarOptimistic.spec.js +112 -0
  371. package/lib/store/maiaLastChatPersistence.spec.js +22 -0
  372. package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
  373. package/lib/store/sessions/sessionNotificationSound.spec.js +145 -0
  374. package/lib/store/sessions/sessionNotifications.helpers.js +45 -0
  375. package/lib/store/sessions/sessionNotifications.helpers.spec.js +63 -0
  376. package/lib/store/sessions/sessionNotifications.js +35 -41
  377. package/lib/store/sessions/sessionNotifications.spec.js +106 -0
  378. package/lib/store/sessions/sessionStreamManager.js +40 -52
  379. package/lib/store/sessions/sessionStreamManager.spec.js +503 -0
  380. package/lib/store/sessions/sessions.types.spec.js +16 -0
  381. package/lib/store/sessions/useSessionsStore.spec.js +135 -0
  382. package/lib/store/useChatsStore.spec.js +619 -0
  383. package/lib/store/useFaqsStore.spec.js +57 -0
  384. package/lib/styles/cascade.js +29 -3
  385. package/lib/styles/transitions.js +3 -1
  386. package/lib/test/mockSseStream.js +121 -0
  387. package/lib/test/streamdownCodeMock.js +6 -0
  388. package/lib/test/streamdownMock.js +12 -0
  389. package/lib/types/agentModal.js +1 -1
  390. package/lib/types/global.d.js +1 -1
  391. package/lib/utils/actionCategoryMap.spec.js +18 -0
  392. package/lib/utils/agentDisplayName.spec.js +44 -0
  393. package/lib/utils/autoApproveStorage.spec.js +25 -0
  394. package/lib/utils/chatInputFiles.spec.js +39 -0
  395. package/lib/utils/contextMentionIcons.spec.js +41 -0
  396. package/lib/utils/contextMentionLabel.spec.js +13 -0
  397. package/lib/utils/contextMentionTriggers.spec.js +38 -0
  398. package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
  399. package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
  400. package/lib/utils/entityLinkRender.spec.js +72 -0
  401. package/lib/utils/fileDownloadHelper.spec.js +67 -0
  402. package/lib/utils/formatQuickActionMessage.spec.js +27 -0
  403. package/lib/utils/formatUnreadCount.spec.js +12 -0
  404. package/lib/utils/getUnitFileSize.spec.js +18 -0
  405. package/lib/utils/hitlAnalytics.spec.js +100 -0
  406. package/lib/utils/hoursPlannerQuickActionType.js +74 -1
  407. package/lib/utils/hoursPlannerQuickActionType.spec.js +64 -0
  408. package/lib/utils/imagePreprocessor.helpers.js +28 -0
  409. package/lib/utils/imagePreprocessor.helpers.spec.js +28 -0
  410. package/lib/utils/imagePreprocessor.js +12 -37
  411. package/lib/utils/imagePreprocessor.spec.js +112 -0
  412. package/lib/utils/maiaPageRoute.js +24 -0
  413. package/lib/utils/maiaPageRoute.spec.js +23 -0
  414. package/lib/utils/mapBackendLang.spec.js +19 -0
  415. package/lib/utils/navigateContextEntity.spec.js +50 -0
  416. package/lib/utils/normalizeAgentConnectors.spec.js +107 -0
  417. package/lib/utils/orchestratorSubagents.spec.js +32 -0
  418. package/lib/utils/reasoningMappers.spec.js +103 -0
  419. package/lib/utils/recentContextsHomeLimit.spec.js +32 -0
  420. package/lib/utils/renderContextMentions.spec.js +158 -0
  421. package/lib/utils/retryCompletion.spec.js +99 -0
  422. package/lib/utils/skillContentSize.spec.js +13 -0
  423. package/lib/utils/slashCommandMarker.spec.js +43 -0
  424. package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
  425. package/lib/utils/sseStreamContent.spec.js +31 -0
  426. package/lib/utils/streamActivityMessages.js +32 -19
  427. package/lib/utils/streamActivityMessages.spec.js +229 -0
  428. package/lib/utils/validateTrimmedFields.spec.js +26 -0
  429. package/package.json +1 -1
  430. package/README.md +0 -2
@@ -26,9 +26,10 @@ import { useUser } from '../../../../../context/cor-user';
26
26
  import { isMaiaCloneAgentsRoleBlocked } from '../../../../../constants/maiaTaskPanelAccess';
27
27
  import { Loader } from '../../../../atoms/Loader';
28
28
  import { useMaiaTaskPanelZIndex } from '../../../../../hooks/useMaiaTaskPanelZIndex';
29
+ import { canShowHeaderCreateAgentButton, filterAgentsForSelector, isMaiaOrchestratorAgent, resolveHeaderSelectorLabel, resolveLocalSelectedAgent } from './ChatAiModalHeader.helpers';
29
30
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
30
31
  export var ChatAIModalHeader = function ChatAIModalHeader(_ref) {
31
- var _user$permissions, _localAgents$name;
32
+ var _user$permissions;
32
33
  var layoutMode = _ref.layoutMode,
33
34
  onLayoutModeChange = _ref.onLayoutModeChange,
34
35
  _ref$draggable = _ref.draggable,
@@ -59,6 +60,8 @@ export var ChatAIModalHeader = function ChatAIModalHeader(_ref) {
59
60
  isMaiakerSection = _ref$isMaiakerSection === void 0 ? false : _ref$isMaiakerSection,
60
61
  _ref$hideAgentSelecto = _ref.hideAgentSelector,
61
62
  hideAgentSelector = _ref$hideAgentSelecto === void 0 ? false : _ref$hideAgentSelecto,
63
+ _ref$hideControls = _ref.hideControls,
64
+ hideControls = _ref$hideControls === void 0 ? false : _ref$hideControls,
62
65
  onAgentSelected = _ref.onAgentSelected,
63
66
  _ref$showBackButton = _ref.showBackButton,
64
67
  showBackButton = _ref$showBackButton === void 0 ? false : _ref$showBackButton,
@@ -95,17 +98,11 @@ export var ChatAIModalHeader = function ChatAIModalHeader(_ref) {
95
98
  var _useResizeListener = useResizeListener(textRefAgent, [selectedAgent === null || selectedAgent === void 0 ? void 0 : selectedAgent.name]),
96
99
  showTooltipAgent = _useResizeListener.showTooltip;
97
100
  var agentsRef = useRef(null);
98
- var isMaiaAgent = useCallback(function (agentItem) {
99
- return agentItem.type === 'orchestrator';
100
- }, []);
101
101
  var agentsForSelector = useMemo(function () {
102
- return agents.filter(function (agentItem) {
103
- return isMaiaAgent(agentItem) || agentItem.entity !== 'global';
104
- });
105
- }, [agents, isMaiaAgent]);
102
+ return filterAgentsForSelector(agents);
103
+ }, [agents]);
106
104
  var userPermissions = user === null || user === void 0 || (_user$permissions = user.permissions) === null || _user$permissions === void 0 ? void 0 : _user$permissions.ai_agents;
107
- var canCreateAgent = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.create) && !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
108
- var showHeaderCreateAgentButton = canCreateAgent && (isMyAgentsSection || isMaiakerSection);
105
+ var showHeaderCreateAgentButton = canShowHeaderCreateAgentButton(userPermissions === null || userPermissions === void 0 ? void 0 : userPermissions.create, Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS), isMyAgentsSection, isMaiakerSection);
109
106
  var handleOpenCreateAgentModal = useCallback(function () {
110
107
  amplitudEvent(EVENTS.openModal, {
111
108
  option: 'create_agent'
@@ -160,26 +157,17 @@ export var ChatAIModalHeader = function ChatAIModalHeader(_ref) {
160
157
  };
161
158
  }, [isExpanded, loadMoreAgents, hasMore, loadingMore]);
162
159
  var localAgents = useMemo(function () {
163
- var _ref2;
164
- if (selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_deleted || selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_permissions || selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_access || selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_from_conversation || selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_legacy_context) {
165
- return selectedAgent;
166
- }
167
- var fromList = agents.find(function (agent) {
168
- return !agent.is_deleted && !agent.has_not_permissions && !agent.has_not_access && agent.id === (selectedAgent === null || selectedAgent === void 0 ? void 0 : selectedAgent.id);
169
- });
170
- // Agente hidratado por GET (p. ej. nuevo chat tras create_agent) puede no estar aún en la lista paginada
171
- return (_ref2 = fromList !== null && fromList !== void 0 ? fromList : selectedAgent) !== null && _ref2 !== void 0 ? _ref2 : null;
160
+ return resolveLocalSelectedAgent(agents, selectedAgent);
172
161
  }, [agents, selectedAgent]);
173
162
 
174
163
  // En 'Mis agentes' / 'Skills' sin agente seteado, el selector muestra el icono de MAIA y el nombre de la sección
175
164
  // en lugar del agente, para que el usuario pueda abrir el dropdown y elegir uno.
176
165
  var selectorIcon = (localAgents === null || localAgents === void 0 ? void 0 : localAgents.type) === 'custom' && !(localAgents !== null && localAgents !== void 0 && localAgents.is_legacy_context) ? localAgents === null || localAgents === void 0 ? void 0 : localAgents.emoji : /*#__PURE__*/_jsx(MAIAIcon, {});
177
- var sectionSelectorLabel = isMyAgentsSection ? t('marketplace.myAgentsTitle', {
166
+ var selectorLabel = resolveHeaderSelectorLabel(localAgents, isMyAgentsSection, isMySkillsSection, t('marketplace.myAgentsTitle', {
178
167
  ns: SECTIONS.chatAI
179
- }) : isMySkillsSection ? t('conversations.mySkillsNav', {
168
+ }), t('conversations.mySkillsNav', {
180
169
  ns: SECTIONS.chatAI
181
- }) : '';
182
- var selectorLabel = (_localAgents$name = localAgents === null || localAgents === void 0 ? void 0 : localAgents.name) !== null && _localAgents$name !== void 0 ? _localAgents$name : sectionSelectorLabel;
170
+ }));
183
171
  var handleSelectAgent = useCallback(function (agent) {
184
172
  selectAgent(agent);
185
173
  amplitudEvent(EVENTS.aiChatAgentSelect, {
@@ -284,7 +272,7 @@ export var ChatAIModalHeader = function ChatAIModalHeader(_ref) {
284
272
  children: /*#__PURE__*/_jsxs(SCCAIMHWrapperModalContent, {
285
273
  children: [window.MAIA_CHAT_AI_FEATURE_ACCESS && !cloneAgentsRoleBlocked && /*#__PURE__*/_jsx(_Fragment, {
286
274
  children: function () {
287
- var maiaAgents = agentsForSelector.filter(isMaiaAgent);
275
+ var maiaAgents = agentsForSelector.filter(isMaiaOrchestratorAgent);
288
276
  if (!maiaAgents.length) return null;
289
277
  return /*#__PURE__*/_jsx(_Fragment, {
290
278
  children: maiaAgents.map(function (maiaAgent, index) {
@@ -310,7 +298,7 @@ export var ChatAIModalHeader = function ChatAIModalHeader(_ref) {
310
298
  agentsCount: agentsForSelector.length,
311
299
  ref: agentsRef,
312
300
  children: [agentsForSelector === null || agentsForSelector === void 0 ? void 0 : agentsForSelector.map(function (agent, index) {
313
- if (agent !== null && agent !== void 0 && agent.is_deleted || agent !== null && agent !== void 0 && agent.has_not_permissions || agent !== null && agent !== void 0 && agent.has_not_access || (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone' || isMaiaAgent(agent) || (agent === null || agent === void 0 ? void 0 : agent.type) === 'custom' && !window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) return null;
301
+ if (agent !== null && agent !== void 0 && agent.is_deleted || agent !== null && agent !== void 0 && agent.has_not_permissions || agent !== null && agent !== void 0 && agent.has_not_access || (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone' || isMaiaOrchestratorAgent(agent) || (agent === null || agent === void 0 ? void 0 : agent.type) === 'custom' && !window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) return null;
314
302
  return /*#__PURE__*/_jsx(ChatAIAgentOption, {
315
303
  agent: agent,
316
304
  index: index,
@@ -385,69 +373,71 @@ export var ChatAIModalHeader = function ChatAIModalHeader(_ref) {
385
373
  children: /*#__PURE__*/_jsx(SCCAIMHCreateAgentButtonText, {
386
374
  children: t('openAgentCreator')
387
375
  })
388
- }), /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuAnchor, {
389
- ref: layoutMenuRef,
390
- "data-no-drag": "true",
391
- children: [/*#__PURE__*/_jsx(IconButton, {
392
- buttonId: "btn-maia-layout-menu",
393
- handleClick: function handleClick() {
394
- if (!layoutMenuOpen) {
395
- amplitudEvent(EVENTS.aiChatOpenViewOptions);
396
- }
397
- setLayoutMenuOpen(function (prev) {
398
- return !prev;
399
- });
400
- },
401
- tooltip: t('layoutMenuTooltip'),
402
- disableTooltip: layoutMenuOpen,
403
- tooltipZIndex: tooltipZIndex,
404
- children: /*#__PURE__*/_jsx(MaiaChatLayoutMenuIcon, {})
405
- }), layoutMenuOpen ? /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuPanel, {
406
- role: "menu",
407
- children: [/*#__PURE__*/_jsxs(SCCAIMHLayoutMenuRow, {
408
- type: "button",
409
- $active: layoutMode === 'sidebar',
410
- onClick: function onClick() {
411
- return handlePickLayout('sidebar');
412
- },
413
- children: [/*#__PURE__*/_jsx(SCCAIMHLayoutMenuRowIcon, {
414
- "aria-hidden": true,
415
- children: /*#__PURE__*/_jsx(MaiaChatLayoutSidebarIcon, {})
416
- }), t('layoutSidebar')]
417
- }), /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuRow, {
418
- type: "button",
419
- $active: layoutMode === 'fullscreen',
420
- onClick: function onClick() {
421
- return handlePickLayout('fullscreen');
422
- },
423
- children: [/*#__PURE__*/_jsx(SCCAIMHLayoutMenuRowIcon, {
424
- "aria-hidden": true,
425
- children: /*#__PURE__*/_jsx(MaiaChatLayoutFullscreenIcon, {})
426
- }), t('layoutFullscreen')]
427
- }), /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuRow, {
428
- type: "button",
429
- $active: layoutMode === 'floating',
430
- onClick: function onClick() {
431
- return handlePickLayout('floating');
376
+ }), !hideControls && /*#__PURE__*/_jsxs(_Fragment, {
377
+ children: [/*#__PURE__*/_jsxs(SCCAIMHLayoutMenuAnchor, {
378
+ ref: layoutMenuRef,
379
+ "data-no-drag": "true",
380
+ children: [/*#__PURE__*/_jsx(IconButton, {
381
+ buttonId: "btn-maia-layout-menu",
382
+ handleClick: function handleClick() {
383
+ if (!layoutMenuOpen) {
384
+ amplitudEvent(EVENTS.aiChatOpenViewOptions);
385
+ }
386
+ setLayoutMenuOpen(function (prev) {
387
+ return !prev;
388
+ });
432
389
  },
433
- children: [/*#__PURE__*/_jsx(SCCAIMHLayoutMenuRowIcon, {
434
- "aria-hidden": true,
435
- children: /*#__PURE__*/_jsx(MaiaChatLayoutFloatingIcon, {})
436
- }), t('layoutFloating')]
437
- })]
438
- }) : null]
439
- }), handleMinimize ? /*#__PURE__*/_jsx(IconButton, {
440
- handleClick: handleMinimize,
441
- tooltip: t('globals.minimize'),
442
- tooltipZIndex: tooltipZIndex,
443
- children: /*#__PURE__*/_jsx(SCCAIMHMinimizeIcon, {
444
- children: /*#__PURE__*/_jsx(Status, {
445
- width: 24,
446
- height: 24
390
+ tooltip: t('layoutMenuTooltip'),
391
+ disableTooltip: layoutMenuOpen,
392
+ tooltipZIndex: tooltipZIndex,
393
+ children: /*#__PURE__*/_jsx(MaiaChatLayoutMenuIcon, {})
394
+ }), layoutMenuOpen ? /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuPanel, {
395
+ role: "menu",
396
+ children: [/*#__PURE__*/_jsxs(SCCAIMHLayoutMenuRow, {
397
+ type: "button",
398
+ $active: layoutMode === 'sidebar',
399
+ onClick: function onClick() {
400
+ return handlePickLayout('sidebar');
401
+ },
402
+ children: [/*#__PURE__*/_jsx(SCCAIMHLayoutMenuRowIcon, {
403
+ "aria-hidden": true,
404
+ children: /*#__PURE__*/_jsx(MaiaChatLayoutSidebarIcon, {})
405
+ }), t('layoutSidebar')]
406
+ }), /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuRow, {
407
+ type: "button",
408
+ $active: layoutMode === 'fullscreen',
409
+ onClick: function onClick() {
410
+ return handlePickLayout('fullscreen');
411
+ },
412
+ children: [/*#__PURE__*/_jsx(SCCAIMHLayoutMenuRowIcon, {
413
+ "aria-hidden": true,
414
+ children: /*#__PURE__*/_jsx(MaiaChatLayoutFullscreenIcon, {})
415
+ }), t('layoutFullscreen')]
416
+ }), /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuRow, {
417
+ type: "button",
418
+ $active: layoutMode === 'floating',
419
+ onClick: function onClick() {
420
+ return handlePickLayout('floating');
421
+ },
422
+ children: [/*#__PURE__*/_jsx(SCCAIMHLayoutMenuRowIcon, {
423
+ "aria-hidden": true,
424
+ children: /*#__PURE__*/_jsx(MaiaChatLayoutFloatingIcon, {})
425
+ }), t('layoutFloating')]
426
+ })]
427
+ }) : null]
428
+ }), handleMinimize ? /*#__PURE__*/_jsx(IconButton, {
429
+ handleClick: handleMinimize,
430
+ tooltip: t('globals.minimize'),
431
+ tooltipZIndex: tooltipZIndex,
432
+ children: /*#__PURE__*/_jsx(SCCAIMHMinimizeIcon, {
433
+ children: /*#__PURE__*/_jsx(Status, {
434
+ width: 24,
435
+ height: 24
436
+ })
447
437
  })
448
- })
449
- }) : null]
438
+ }) : null]
439
+ })]
450
440
  })]
451
441
  });
452
442
  };
453
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsIlRvb2x0aXAiLCJTdGF0dXMiLCJDaGV2cm9uRG93biIsIkNoZXZyb25MZWZ0IiwiUGx1cyIsInVzZVRyYW5zbGF0aW9uIiwiU0VDVElPTlMiLCJ1c2VHbG9iYWxDb250ZXh0IiwidXNlUmVzaXplTGlzdGVuZXIiLCJJY29uQnV0dG9uIiwiTUFJQUljb24iLCJNYWlhQ2hhdExheW91dE1lbnVJY29uIiwiTWFpYUNoYXRMYXlvdXRTaWRlYmFySWNvbiIsIk1haWFDaGF0TGF5b3V0RnVsbHNjcmVlbkljb24iLCJNYWlhQ2hhdExheW91dEZsb2F0aW5nSWNvbiIsIkNoYXRBSUFnZW50T3B0aW9uIiwiU0NDQUlNSE1vZGFsIiwiU0NDQUlNSFNlbGVjdGVkQWdlbnQiLCJTQ0NBSU1IU2VsZWN0ZWRBZ2VudFRleHQiLCJTQ0NBSU1IV3JhcHBlciIsIlNDQ0FJTUhXcmFwcGVyQnV0dG9uIiwiU0NDQUlNSFdyYXBwZXJJY29uIiwiU0NDQUlNSFdyYXBwZXJNb2RhbCIsIlNDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50IiwiU0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnRUaXRsZSIsIlNDQ0FJTUhBZGRBZ2VudCIsIlNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvbiIsIlNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvblRleHQiLCJTQ0NBSU1IRGl2aWRlciIsIlNDQ0FJTUhBZ2VudHNMaXN0IiwiU0NDQUlNSExvYWRlcldyYXBwZXIiLCJTQ0NBSU1IUGx1c0ljb25XcmFwcGVyIiwiU0NDQUlNSExheW91dE1lbnVBbmNob3IiLCJTQ0NBSU1ITGF5b3V0TWVudVBhbmVsIiwiU0NDQUlNSExheW91dE1lbnVSb3ciLCJTQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24iLCJTQ0NBSU1IQmFja0J1dHRvbiIsIlNDQ0FJTUhNaW5pbWl6ZUljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsInVzZVVzZXIiLCJpc01haWFDbG9uZUFnZW50c1JvbGVCbG9ja2VkIiwiTG9hZGVyIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIkNoYXRBSU1vZGFsSGVhZGVyIiwiX3JlZiIsIl91c2VyJHBlcm1pc3Npb25zIiwiX2xvY2FsQWdlbnRzJG5hbWUiLCJsYXlvdXRNb2RlIiwib25MYXlvdXRNb2RlQ2hhbmdlIiwiX3JlZiRkcmFnZ2FibGUiLCJkcmFnZ2FibGUiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ01vdmUiLCJvbkRyYWdFbmQiLCJoYW5kbGVNaW5pbWl6ZSIsIl9yZWYkYWdlbnRzIiwiYWdlbnRzIiwiX3JlZiRoYXNFcnJvciIsImhhc0Vycm9yIiwiX3JlZiRsb2FkaW5nIiwibG9hZGluZyIsIl9yZWYkbG9hZGluZ01vcmUiLCJsb2FkaW5nTW9yZSIsIl9yZWYkaGFzTW9yZSIsImhhc01vcmUiLCJoYW5kbGVSZXNldENoYXQiLCJvbkFnZW50VXBkYXRlIiwibG9hZE1vcmVBZ2VudHMiLCJzb3J0QWdlbnRzTGlzdCIsIl9yZWYkaXNNeUFnZW50c1NlY3RpbyIsImlzTXlBZ2VudHNTZWN0aW9uIiwiX3JlZiRpc015U2tpbGxzU2VjdGlvIiwiaXNNeVNraWxsc1NlY3Rpb24iLCJfcmVmJGlzTWFpYWtlclNlY3Rpb24iLCJpc01haWFrZXJTZWN0aW9uIiwiX3JlZiRoaWRlQWdlbnRTZWxlY3RvIiwiaGlkZUFnZW50U2VsZWN0b3IiLCJvbkFnZW50U2VsZWN0ZWQiLCJfcmVmJHNob3dCYWNrQnV0dG9uIiwic2hvd0JhY2tCdXR0b24iLCJfcmVmJG9uQmFjayIsIm9uQmFjayIsIl91c2VUcmFuc2xhdGlvbiIsImFibUFnZW50IiwiY2hhdEFJIiwidCIsInVzZXIiLCJhbXBsaXR1ZEV2ZW50IiwiX3VzZUdsb2JhbENvbnRleHQiLCJzZWxlY3RlZEFnZW50IiwiYWdlbnQiLCJzZWxlY3RBZ2VudCIsInNldFByb2plY3QiLCJzZXRDbGllbnQiLCJzZXRUYXNrIiwic2VjdGlvbiIsInRvb2x0aXBaSW5kZXgiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJpc0V4cGFuZGVkIiwic2V0SXNFeHBhbmRlZCIsInRleHRSZWZBZ2VudCIsImRyb3Bkb3duUmVmIiwibGF5b3V0TWVudVJlZiIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwibGF5b3V0TWVudU9wZW4iLCJzZXRMYXlvdXRNZW51T3BlbiIsIl91c2VSZXNpemVMaXN0ZW5lciIsIm5hbWUiLCJzaG93VG9vbHRpcEFnZW50Iiwic2hvd1Rvb2x0aXAiLCJhZ2VudHNSZWYiLCJpc01haWFBZ2VudCIsImFnZW50SXRlbSIsInR5cGUiLCJhZ2VudHNGb3JTZWxlY3RvciIsImZpbHRlciIsImVudGl0eSIsInVzZXJQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWlfYWdlbnRzIiwiY2FuQ3JlYXRlQWdlbnQiLCJjcmVhdGUiLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwic2hvd0hlYWRlckNyZWF0ZUFnZW50QnV0dG9uIiwiaGFuZGxlT3BlbkNyZWF0ZUFnZW50TW9kYWwiLCJvcGVuTW9kYWwiLCJvcHRpb24iLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImFnZW50VmFsdWVzIiwidmFsdWVzIiwiaXNFZGl0aW5nIiwiaXNPcGVuIiwidW5kZWZpbmVkIiwiaGFuZGxlU2Nyb2xsIiwiY3VycmVudCIsIl9hZ2VudHNSZWYkY3VycmVudCIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImRpc3RhbmNlRnJvbUJvdHRvbSIsInRpbWVvdXRJZCIsInNldFRpbWVvdXQiLCJzY3JvbGxFbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImNsZWFyVGltZW91dCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJsb2NhbEFnZW50cyIsIl9yZWYyIiwiaXNfZGVsZXRlZCIsImhhc19ub3RfcGVybWlzc2lvbnMiLCJoYXNfbm90X2FjY2VzcyIsImlzX2Zyb21fY29udmVyc2F0aW9uIiwiaXNfbGVnYWN5X2NvbnRleHQiLCJmcm9tTGlzdCIsImZpbmQiLCJpZCIsInNlbGVjdG9ySWNvbiIsImVtb2ppIiwic2VjdGlvblNlbGVjdG9yTGFiZWwiLCJucyIsInNlbGVjdG9yTGFiZWwiLCJoYW5kbGVTZWxlY3RBZ2VudCIsImFpQ2hhdEFnZW50U2VsZWN0IiwiYWdlbnRfdHlwZSIsIm5lZWRzRW50aXR5IiwiaGFuZGxlRXhwYW5kTW9kYWwiLCJhaUNoYXRPcGVuQWdlbnRTZWxlY3QiLCJwcmV2IiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwiZXZlbnQiLCJ0YXJnZXQiLCJjb250YWlucyIsImhhbmRsZVBpY2tMYXlvdXQiLCJtb2RlIiwicHJvamVjdFJlc3VtZUV4cGFuZCIsImV4cGFuZGVkIiwiYWlDaGF0U2VsZWN0Vmlld09wdGlvbnMiLCJjbG9uZUFnZW50c1JvbGVCbG9ja2VkIiwicmVuZGVyTW9kYWwiLCJyZWYiLCJvbkNsaWNrIiwibGVuZ3RoIiwiY2hpbGRyZW4iLCJfb2JqZWN0U3ByZWFkIiwidGl0bGUiLCJzdHlsZSIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwiZ2FwIiwicGxhY2VtZW50IiwiekluZGV4IiwiaXNBZ2VudERlbGV0ZWQiLCJ3aWR0aCIsImhlaWdodCIsImNvbG9yIiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTIiwibWFpYUFnZW50cyIsIm1hcCIsIm1haWFBZ2VudCIsImluZGV4IiwiaXNTZWxlY3RlZCIsImlzTWFpYSIsIm9uRmF2b3JpdGVUb2dnbGUiLCJjb25jYXQiLCJzb21lIiwiY29tcGFueSIsImFnZW50c0NvdW50Iiwic2l6ZSIsInNob3VsZFJlbmRlclNlbGVjdG9yIiwiJGhhc0Vycm9yIiwiJGxvYWRpbmciLCIkaGFzQWdlbnRzIiwib25Qb2ludGVyRG93biIsIm9uUG9pbnRlck1vdmUiLCJvblBvaW50ZXJVcCIsIm9uUG9pbnRlckNhbmNlbCIsIm9uTG9zdFBvaW50ZXJDYXB0dXJlIiwiY3Vyc29yIiwidG91Y2hBY3Rpb24iLCJidXR0b25JZCIsImhhbmRsZUNsaWNrIiwiYWlDaGF0T3BlblZpZXdPcHRpb25zIiwidG9vbHRpcCIsImRpc2FibGVUb29sdGlwIiwicm9sZSIsIiRhY3RpdmUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTW9kYWwvY29tcG9uZW50cy9DaGF0QWlNb2RhbEhlYWRlci9DaGF0QWlNb2RhbEhlYWRlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIFBvaW50ZXJFdmVudCBhcyBSZWFjdFBvaW50ZXJFdmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvU3RhdHVzJ1xuaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGV2cm9uRG93bidcbmltcG9ydCB7IENoZXZyb25MZWZ0IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2hldnJvbkxlZnQnXG5pbXBvcnQgeyBQbHVzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvUGx1cydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgdXNlUmVzaXplTGlzdGVuZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9ob29rcy91c2VSZXNpemUnXG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXRvbXMvSWNvbkJ1dHRvbidcbmltcG9ydCB7IE1BSUFJY29uLCBNYWlhQ2hhdExheW91dE1lbnVJY29uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXRvbXMvaWNvbnMnXG5pbXBvcnQgeyBNYWlhQ2hhdExheW91dFNpZGViYXJJY29uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXRvbXMvaWNvbnMvTWFpYUNoYXRMYXlvdXRTaWRlYmFySWNvbidcbmltcG9ydCB7IE1haWFDaGF0TGF5b3V0RnVsbHNjcmVlbkljb24gfSBmcm9tICcuLi8uLi8uLi8uLi9hdG9tcy9pY29ucy9NYWlhQ2hhdExheW91dEZ1bGxzY3JlZW5JY29uJ1xuaW1wb3J0IHsgTWFpYUNoYXRMYXlvdXRGbG9hdGluZ0ljb24gfSBmcm9tICcuLi8uLi8uLi8uLi9hdG9tcy9pY29ucy9NYWlhQ2hhdExheW91dEZsb2F0aW5nSWNvbidcbmltcG9ydCB7IENoYXRBSUFnZW50T3B0aW9uIH0gZnJvbSAnLi4vQ2hhdEFpQWdlbnRPcHRpb25zL0NoYXRBaUFnZW50T3B0aW9ucydcbmltcG9ydCB7XG4gIFNDQ0FJTUhNb2RhbCxcbiAgU0NDQUlNSFNlbGVjdGVkQWdlbnQsXG4gIFNDQ0FJTUhTZWxlY3RlZEFnZW50VGV4dCxcbiAgU0NDQUlNSFdyYXBwZXIsXG4gIFNDQ0FJTUhXcmFwcGVyQnV0dG9uLFxuICBTQ0NBSU1IV3JhcHBlckljb24sXG4gIFNDQ0FJTUhXcmFwcGVyTW9kYWwsXG4gIFNDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50LFxuICBTQ0NBSU1IV3JhcHBlck1vZGFsQ29udGVudFRpdGxlLFxuICBTQ0NBSU1IQWRkQWdlbnQsXG4gIFNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvbixcbiAgU0NDQUlNSENyZWF0ZUFnZW50QnV0dG9uVGV4dCxcbiAgU0NDQUlNSERpdmlkZXIsXG4gIFNDQ0FJTUhBZ2VudHNMaXN0LFxuICBTQ0NBSU1ITG9hZGVyV3JhcHBlcixcbiAgU0NDQUlNSFBsdXNJY29uV3JhcHBlcixcbiAgU0NDQUlNSExheW91dE1lbnVBbmNob3IsXG4gIFNDQ0FJTUhMYXlvdXRNZW51UGFuZWwsXG4gIFNDQ0FJTUhMYXlvdXRNZW51Um93LFxuICBTQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24sXG4gIFNDQ0FJTUhCYWNrQnV0dG9uLFxuICBTQ0NBSU1ITWluaW1pemVJY29uLFxufSBmcm9tICcuL0NoYXRBaU1vZGFsSGVhZGVyLnN0eWxlcydcbmltcG9ydCB0eXBlIHsgTWFpYUNoYXRNb2RhbExheW91dE1vZGUgfSBmcm9tICcuLi8uLi9sYXlvdXQnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IGlzTWFpYUNsb25lQWdlbnRzUm9sZUJsb2NrZWQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb25zdGFudHMvbWFpYVRhc2tQYW5lbEFjY2VzcydcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaG9va3MvdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcblxuZXhwb3J0IGNvbnN0IENoYXRBSU1vZGFsSGVhZGVyID0gKHtcbiAgbGF5b3V0TW9kZSxcbiAgb25MYXlvdXRNb2RlQ2hhbmdlLFxuICBkcmFnZ2FibGUgPSBmYWxzZSxcbiAgb25EcmFnU3RhcnQsXG4gIG9uRHJhZ01vdmUsXG4gIG9uRHJhZ0VuZCxcbiAgaGFuZGxlTWluaW1pemUsXG4gIGFnZW50cyA9IFtdLFxuICBoYXNFcnJvciA9IGZhbHNlLFxuICBsb2FkaW5nID0gZmFsc2UsXG4gIGxvYWRpbmdNb3JlID0gZmFsc2UsXG4gIGhhc01vcmUgPSBmYWxzZSxcbiAgaGFuZGxlUmVzZXRDaGF0LFxuICBvbkFnZW50VXBkYXRlLFxuICBsb2FkTW9yZUFnZW50cyxcbiAgc29ydEFnZW50c0xpc3QsXG4gIGlzTXlBZ2VudHNTZWN0aW9uID0gZmFsc2UsXG4gIGlzTXlTa2lsbHNTZWN0aW9uID0gZmFsc2UsXG4gIGlzTWFpYWtlclNlY3Rpb24gPSBmYWxzZSxcbiAgaGlkZUFnZW50U2VsZWN0b3IgPSBmYWxzZSxcbiAgb25BZ2VudFNlbGVjdGVkLFxuICBzaG93QmFja0J1dHRvbiA9IGZhbHNlLFxuICBvbkJhY2sgPSAoKSA9PiBudWxsLFxufToge1xuICBsYXlvdXRNb2RlOiBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZVxuICBvbkxheW91dE1vZGVDaGFuZ2U6IChtb2RlOiBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZSkgPT4gdm9pZFxuICBleHBhbmRlZDogYm9vbGVhblxuICBkcmFnZ2FibGU/OiBib29sZWFuXG4gIG9uRHJhZ1N0YXJ0PzogKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHZvaWRcbiAgb25EcmFnTW92ZT86IChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB2b2lkXG4gIG9uRHJhZ0VuZD86IChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB2b2lkXG4gIGhhbmRsZU1pbmltaXplPzogKCkgPT4gdm9pZFxuICBhZ2VudHM6IEFnZW50W11cbiAgaGFzRXJyb3I6IGJvb2xlYW5cbiAgbG9hZGluZzogYm9vbGVhblxuICBsb2FkaW5nTW9yZT86IGJvb2xlYW5cbiAgaGFzTW9yZT86IGJvb2xlYW5cbiAgaGFuZGxlUmVzZXRDaGF0OiAoKSA9PiB2b2lkXG4gIG9uQWdlbnRVcGRhdGU/OiAodXBkYXRlZEFnZW50OiBBZ2VudCkgPT4gdm9pZFxuICBsb2FkTW9yZUFnZW50cz86ICgpID0+IHZvaWRcbiAgc29ydEFnZW50c0xpc3Q/OiAoKSA9PiB2b2lkXG4gIC8qKiBTZWNjacOzbiBcIk1pcyBhZ2VudGVzXCI6IHNpIG5vIGhheSBhZ2VudGUgc2V0ZWFkbywgZWwgc2VsZWN0b3IgbXVlc3RyYSBlbCBpY29ubyBkZSBNQUlBIHkgZWwgbm9tYnJlIGRlIGxhIHNlY2Npw7NuICovXG4gIGlzTXlBZ2VudHNTZWN0aW9uPzogYm9vbGVhblxuICAvKiogU2VjY2nDs24gXCJTa2lsbHNcIjogbWlzbW8gY29tcG9ydGFtaWVudG8gZGUgc2VsZWN0b3IgcXVlIE1pcyBhZ2VudGVzLCBjb24gZWwgbm9tYnJlIGRlIGxhIHNlY2Npw7NuICovXG4gIGlzTXlTa2lsbHNTZWN0aW9uPzogYm9vbGVhblxuICAvKiogT2N1bHRhIGVsIGNoaXAgZGUgbW9kZWxvIExMTSAocC4gZWouIGVuIE1pcyBhZ2VudGVzIC8gTWlzIHNraWxscykgKi9cbiAgaGlkZUFnZW50U2VsZWN0b3I/OiBib29sZWFuXG4gIC8qKiBTZWNjacOzbiBcIkNyZWFkb3IgZGUgYWdlbnRlc1wiIChNYWlha2VyKTogaGFiaWxpdGEgZWwgYm90w7NuIFwiQ3JlYXIgYWdlbnRlXCIgZGVsIGhlYWRlciAqL1xuICBpc01haWFrZXJTZWN0aW9uPzogYm9vbGVhblxuICAvKipcbiAgICogU2UgaW52b2NhIGRlc3B1w6lzIGRlbCByZXNldCBjdWFuZG8gZWwgYWdlbnRlIHNlbGVjY2lvbmFkbyBOTyByZXF1aWVyZSBzZWxlY2Npw7NuXG4gICAqIGRlIGVudGl0eSAoY3VzdG9tIG8gY2xvbmUrZ2xvYmFsKS4gUGVybWl0ZSByZXNvbHZlciBgR0VUIC92Mi9zZXNzaW9ucy9hZ2VudC97aWR9YFxuICAgKiB5IG5hdmVnYXIgYSB1bmEgY29udmVyc2FjacOzbiBleGlzdGVudGUgc2kgbGEgaGF5LlxuICAgKi9cbiAgb25BZ2VudFNlbGVjdGVkPzogKGFnZW50OiBBZ2VudCkgPT4gdm9pZCB8IFByb21pc2U8dW5rbm93bj5cbiAgc2hvd0JhY2tCdXR0b24/OiBib29sZWFuXG4gIG9uQmFjaz86ICgpID0+IHZvaWRcbn0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuYWJtQWdlbnQsIFNFQ1RJT05TLmNoYXRBSV0pXG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgYW1wbGl0dWRFdmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBhZ2VudDogc2VsZWN0ZWRBZ2VudCwgc2VsZWN0QWdlbnQsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0VGFzaywgc2VjdGlvbiB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIC8vIEVuIHNlY3Rpb24gJ3Rhc2snIGVsIG1vZGFsIGRlIE1haWEgc2UgZWxldmEgcG9yIGVuY2ltYSBkZWwgdGFzayBwYW5lbCAoei1pbmRleCA5ODAwMDAxKS5cbiAgLy8gTG9zIHRvb2x0aXBzIHNlIG1vbnRhbiBlbiBwb3J0YWwgY29uIHotaW5kZXggMTUwMCBwb3IgZGVmZWN0bywgYXPDrSBxdWUgcXVlZGFyw61hbiBkZXRyw6FzLlxuICAvLyBTdWJpbW9zIHN1IHotaW5kZXggc8OzbG8gZW4gZXN0ZSBjYXNvIHBhcmEgcXVlIHNlIHZlYW4gcG9yIGVuY2ltYSBkZWwgbW9kYWwuXG4gIGNvbnN0IHRvb2x0aXBaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDE1MDAsICdvdmVybGF5JylcbiAgY29uc3QgW2lzRXhwYW5kZWQsIHNldElzRXhwYW5kZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHRleHRSZWZBZ2VudCA9IHVzZVJlZjxIVE1MU3BhbkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGRyb3Bkb3duUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBsYXlvdXRNZW51UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBbbGF5b3V0TWVudU9wZW4sIHNldExheW91dE1lbnVPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB7IHNob3dUb29sdGlwOiBzaG93VG9vbHRpcEFnZW50IH0gPSB1c2VSZXNpemVMaXN0ZW5lcih0ZXh0UmVmQWdlbnQsIFtzZWxlY3RlZEFnZW50Py5uYW1lXSlcbiAgY29uc3QgYWdlbnRzUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuXG4gIGNvbnN0IGlzTWFpYUFnZW50ID0gdXNlQ2FsbGJhY2soKGFnZW50SXRlbTogQWdlbnQpID0+IGFnZW50SXRlbS50eXBlID09PSAnb3JjaGVzdHJhdG9yJywgW10pXG4gIGNvbnN0IGFnZW50c0ZvclNlbGVjdG9yID0gdXNlTWVtbyhcbiAgICAoKSA9PiBhZ2VudHMuZmlsdGVyKGFnZW50SXRlbSA9PiBpc01haWFBZ2VudChhZ2VudEl0ZW0pIHx8IGFnZW50SXRlbS5lbnRpdHkgIT09ICdnbG9iYWwnKSxcbiAgICBbYWdlbnRzLCBpc01haWFBZ2VudF1cbiAgKVxuXG4gIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHNcbiAgY29uc3QgY2FuQ3JlYXRlQWdlbnQgPSAhIXVzZXJQZXJtaXNzaW9ucz8uY3JlYXRlICYmICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcbiAgY29uc3Qgc2hvd0hlYWRlckNyZWF0ZUFnZW50QnV0dG9uID0gY2FuQ3JlYXRlQWdlbnQgJiYgKGlzTXlBZ2VudHNTZWN0aW9uIHx8IGlzTWFpYWtlclNlY3Rpb24pXG5cbiAgY29uc3QgaGFuZGxlT3BlbkNyZWF0ZUFnZW50TW9kYWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYW1wbGl0dWRFdmVudChFVkVOVFMub3Blbk1vZGFsLCB7IG9wdGlvbjogJ2NyZWF0ZV9hZ2VudCcgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgYWdlbnRWYWx1ZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApXG4gIH0sIFthbXBsaXR1ZEV2ZW50XSlcblxuICAvLyBNYW5lamFyIHNjcm9sbCBpbmZpbml0byBwYXJhIGNhcmdhciBtw6FzIGFnZW50c1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFNvbG8gY3VhbmRvIGVsIGRyb3Bkb3duIGVzdMOpIGFiaWVydG9cbiAgICBpZiAoIWlzRXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7XG4gICAgICBpZiAoIWFnZW50c1JlZi5jdXJyZW50IHx8ICFsb2FkTW9yZUFnZW50cyB8fCAhaGFzTW9yZSB8fCBsb2FkaW5nTW9yZSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBhZ2VudHNSZWYuY3VycmVudFxuICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG5cbiAgICAgIC8vIENhcmdhciBtw6FzICg1MHB4IGFudGVzKVxuICAgICAgaWYgKGRpc3RhbmNlRnJvbUJvdHRvbSA8IDUwKSB7XG4gICAgICAgIGxvYWRNb3JlQWdlbnRzKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkZWxheSBwYXJhIGFzZWd1cmFyIHF1ZSBlbCBET00gZXN0w6kgcmVuZGVyaXphZG9cbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBhZ2VudHNSZWYuY3VycmVudFxuICAgICAgaWYgKHNjcm9sbEVsZW1lbnQpIHtcbiAgICAgICAgc2Nyb2xsRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpXG4gICAgICB9XG4gICAgfSwgMTAwKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gICAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gYWdlbnRzUmVmLmN1cnJlbnRcbiAgICAgIGlmIChzY3JvbGxFbGVtZW50KSB7XG4gICAgICAgIHNjcm9sbEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2lzRXhwYW5kZWQsIGxvYWRNb3JlQWdlbnRzLCBoYXNNb3JlLCBsb2FkaW5nTW9yZV0pXG5cbiAgY29uc3QgbG9jYWxBZ2VudHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoXG4gICAgICBzZWxlY3RlZEFnZW50Py5pc19kZWxldGVkIHx8XG4gICAgICBzZWxlY3RlZEFnZW50Py5oYXNfbm90X3Blcm1pc3Npb25zIHx8XG4gICAgICBzZWxlY3RlZEFnZW50Py5oYXNfbm90X2FjY2VzcyB8fFxuICAgICAgc2VsZWN0ZWRBZ2VudD8uaXNfZnJvbV9jb252ZXJzYXRpb24gfHxcbiAgICAgIHNlbGVjdGVkQWdlbnQ/LmlzX2xlZ2FjeV9jb250ZXh0XG4gICAgKSB7XG4gICAgICByZXR1cm4gc2VsZWN0ZWRBZ2VudFxuICAgIH1cbiAgICBjb25zdCBmcm9tTGlzdCA9IGFnZW50cy5maW5kKFxuICAgICAgYWdlbnQgPT5cbiAgICAgICAgIWFnZW50LmlzX2RlbGV0ZWQgJiYgIWFnZW50Lmhhc19ub3RfcGVybWlzc2lvbnMgJiYgIWFnZW50Lmhhc19ub3RfYWNjZXNzICYmIGFnZW50LmlkID09PSBzZWxlY3RlZEFnZW50Py5pZFxuICAgIClcbiAgICAvLyBBZ2VudGUgaGlkcmF0YWRvIHBvciBHRVQgKHAuIGVqLiBudWV2byBjaGF0IHRyYXMgY3JlYXRlX2FnZW50KSBwdWVkZSBubyBlc3RhciBhw7puIGVuIGxhIGxpc3RhIHBhZ2luYWRhXG4gICAgcmV0dXJuIGZyb21MaXN0ID8/IHNlbGVjdGVkQWdlbnQgPz8gbnVsbFxuICB9LCBbYWdlbnRzLCBzZWxlY3RlZEFnZW50XSlcblxuICAvLyBFbiAnTWlzIGFnZW50ZXMnIC8gJ1NraWxscycgc2luIGFnZW50ZSBzZXRlYWRvLCBlbCBzZWxlY3RvciBtdWVzdHJhIGVsIGljb25vIGRlIE1BSUEgeSBlbCBub21icmUgZGUgbGEgc2VjY2nDs25cbiAgLy8gZW4gbHVnYXIgZGVsIGFnZW50ZSwgcGFyYSBxdWUgZWwgdXN1YXJpbyBwdWVkYSBhYnJpciBlbCBkcm9wZG93biB5IGVsZWdpciB1bm8uXG4gIGNvbnN0IHNlbGVjdG9ySWNvbiA9XG4gICAgbG9jYWxBZ2VudHM/LnR5cGUgPT09ICdjdXN0b20nICYmICFsb2NhbEFnZW50cz8uaXNfbGVnYWN5X2NvbnRleHQgPyBsb2NhbEFnZW50cz8uZW1vamkgOiA8TUFJQUljb24gLz5cbiAgY29uc3Qgc2VjdGlvblNlbGVjdG9yTGFiZWwgPSBpc015QWdlbnRzU2VjdGlvblxuICAgID8gdCgnbWFya2V0cGxhY2UubXlBZ2VudHNUaXRsZScsIHsgbnM6IFNFQ1RJT05TLmNoYXRBSSB9KVxuICAgIDogaXNNeVNraWxsc1NlY3Rpb25cbiAgICAgID8gdCgnY29udmVyc2F0aW9ucy5teVNraWxsc05hdicsIHsgbnM6IFNFQ1RJT05TLmNoYXRBSSB9KVxuICAgICAgOiAnJ1xuICBjb25zdCBzZWxlY3RvckxhYmVsID0gbG9jYWxBZ2VudHM/Lm5hbWUgPz8gc2VjdGlvblNlbGVjdG9yTGFiZWxcblxuICBjb25zdCBoYW5kbGVTZWxlY3RBZ2VudCA9IHVzZUNhbGxiYWNrKFxuICAgIChhZ2VudDogQWdlbnQpID0+IHtcbiAgICAgIHNlbGVjdEFnZW50KGFnZW50KVxuICAgICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0QWdlbnRTZWxlY3QsIHtcbiAgICAgICAgYWdlbnRfdHlwZTogYWdlbnQ/LnR5cGUsXG4gICAgICB9KVxuICAgICAgc2V0SXNFeHBhbmRlZChmYWxzZSlcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRUYXNrKG51bGwpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaGFuZGxlUmVzZXRDaGF0KClcbiAgICAgICAgLy8gU2kgZWwgYWdlbnRlIG5vIGRlcGVuZGUgZGUgdW5hIGVudGl0eSAoY3VzdG9tIG8gY2xvbmUrZ2xvYmFsKSB5YSBwb2RlbW9zXG4gICAgICAgIC8vIHJlc29sdmVyIHNpIGV4aXN0ZSB1bmEgc2VzacOzbiBwcmV2aWEgeSwgZW4gZXNlIGNhc28sIG5hdmVnYXIgYSBlbGxhLlxuICAgICAgICAvLyBQYXJhIGNsb25lK3Byb2plY3R8Y2xpZW50LCBsYSByZXNvbHVjacOzbiBvY3VycmUgZW4gbG9zIHNlbGVjdG9ycyBkZSBlbnRpdHkuXG4gICAgICAgIGNvbnN0IG5lZWRzRW50aXR5ID0gYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgJiYgKGFnZW50Py5lbnRpdHkgPT09ICdwcm9qZWN0JyB8fCBhZ2VudD8uZW50aXR5ID09PSAnY2xpZW50JylcbiAgICAgICAgaWYgKCFuZWVkc0VudGl0eSkge1xuICAgICAgICAgIG9uQWdlbnRTZWxlY3RlZD8uKGFnZW50KVxuICAgICAgICB9XG4gICAgICB9LCAxMDApXG4gICAgfSxcbiAgICBbc2VsZWN0QWdlbnQsIGFtcGxpdHVkRXZlbnQsIGhhbmRsZVJlc2V0Q2hhdCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRUYXNrLCBvbkFnZW50U2VsZWN0ZWRdXG4gIClcblxuICBjb25zdCBoYW5kbGVFeHBhbmRNb2RhbCA9ICgpID0+IHtcbiAgICBpZiAoIWlzRXhwYW5kZWQpIHtcbiAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdE9wZW5BZ2VudFNlbGVjdClcbiAgICAgIC8vIEN1YW5kbyBzZSBhYnJlIGVsIHNlbGVjdG9yLCBvcmRlbmFyIGxvcyBhZ2VudGVzXG4gICAgICBpZiAoc29ydEFnZW50c0xpc3QpIHtcbiAgICAgICAgc29ydEFnZW50c0xpc3QoKVxuICAgICAgfVxuICAgIH1cbiAgICBzZXRJc0V4cGFuZGVkKHByZXYgPT4gIXByZXYpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNFeHBhbmRlZCAmJiAhbGF5b3V0TWVudU9wZW4pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBOb2RlXG4gICAgICBpZiAoaXNFeHBhbmRlZCAmJiBkcm9wZG93blJlZi5jdXJyZW50ICYmICFkcm9wZG93blJlZi5jdXJyZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgc2V0SXNFeHBhbmRlZChmYWxzZSlcbiAgICAgIH1cbiAgICAgIGlmIChsYXlvdXRNZW51T3BlbiAmJiBsYXlvdXRNZW51UmVmLmN1cnJlbnQgJiYgIWxheW91dE1lbnVSZWYuY3VycmVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgIHNldExheW91dE1lbnVPcGVuKGZhbHNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIH1cbiAgfSwgW2lzRXhwYW5kZWQsIGxheW91dE1lbnVPcGVuXSlcblxuICBjb25zdCBoYW5kbGVQaWNrTGF5b3V0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG1vZGU6IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlKSA9PiB7XG4gICAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5wcm9qZWN0UmVzdW1lRXhwYW5kLCB7XG4gICAgICAgIGV4cGFuZGVkOiBtb2RlID09PSAnZnVsbHNjcmVlbicsXG4gICAgICB9KVxuICAgICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0U2VsZWN0Vmlld09wdGlvbnMsIHsgb3B0aW9uOiBtb2RlIH0pXG4gICAgICBvbkxheW91dE1vZGVDaGFuZ2UobW9kZSlcbiAgICAgIHNldExheW91dE1lbnVPcGVuKGZhbHNlKVxuICAgIH0sXG4gICAgW2FtcGxpdHVkRXZlbnQsIG9uTGF5b3V0TW9kZUNoYW5nZV1cbiAgKVxuXG4gIGNvbnN0IGNsb25lQWdlbnRzUm9sZUJsb2NrZWQgPSBpc01haWFDbG9uZUFnZW50c1JvbGVCbG9ja2VkKHVzZXIsIHNlY3Rpb24pXG5cbiAgY29uc3QgcmVuZGVyTW9kYWwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ0NBSU1IV3JhcHBlclxuICAgICAgICByZWY9e2Ryb3Bkb3duUmVmfVxuICAgICAgICBkYXRhLW5vLWRyYWc9XCJ0cnVlXCJcbiAgICAgICAgb25DbGljaz17YWdlbnRzLmxlbmd0aCA/IGhhbmRsZUV4cGFuZE1vZGFsIDogdW5kZWZpbmVkfVxuICAgICAgICBpZD1cImNoYXQtYWktbW9kYWwtaGVhZGVyLXdyYXBwZXJcIlxuICAgICAgPlxuICAgICAgICA8U0NDQUlNSFNlbGVjdGVkQWdlbnQ+XG4gICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgc2hvd1Rvb2x0aXBBZ2VudCA/IChcbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc0cHgnIH19PlxuICAgICAgICAgICAgICAgICAge2xvY2FsQWdlbnRzPy50eXBlID09PSAnY3VzdG9tJyAmJiAhbG9jYWxBZ2VudHM/LmlzX2xlZ2FjeV9jb250ZXh0ID8gKFxuICAgICAgICAgICAgICAgICAgICBsb2NhbEFnZW50cz8uZW1vamlcbiAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxNQUlBSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgKX17JyAnfVxuICAgICAgICAgICAgICAgICAge2xvY2FsQWdlbnRzPy5uYW1lfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwbGFjZW1lbnQ9e2lzRXhwYW5kZWQgPyAnbGVmdCcgOiAndG9wJ31cbiAgICAgICAgICAgIHsuLi4odG9vbHRpcFpJbmRleCAhPSBudWxsID8geyB6SW5kZXg6IHRvb2x0aXBaSW5kZXggfSA6IHt9KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U0NDQUlNSFNlbGVjdGVkQWdlbnRUZXh0XG4gICAgICAgICAgICAgIHJlZj17dGV4dFJlZkFnZW50fVxuICAgICAgICAgICAgICBpc0FnZW50RGVsZXRlZD17XG4gICAgICAgICAgICAgICAgISFzZWxlY3RlZEFnZW50Py5pc19kZWxldGVkIHx8XG4gICAgICAgICAgICAgICAgISFzZWxlY3RlZEFnZW50Py5oYXNfbm90X3Blcm1pc3Npb25zIHx8XG4gICAgICAgICAgICAgICAgISFzZWxlY3RlZEFnZW50Py5oYXNfbm90X2FjY2VzcyB8fFxuICAgICAgICAgICAgICAgICEhc2VsZWN0ZWRBZ2VudD8uaXNfbGVnYWN5X2NvbnRleHRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc0cHgnIH19PlxuICAgICAgICAgICAgICAgIHtzZWxlY3Rvckljb259IHtzZWxlY3RvckxhYmVsfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L1NDQ0FJTUhTZWxlY3RlZEFnZW50VGV4dD5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgIDwvU0NDQUlNSFNlbGVjdGVkQWdlbnQ+XG4gICAgICAgIDxTQ0NBSU1IV3JhcHBlckljb24+XG4gICAgICAgICAgPENoZXZyb25Eb3duIHdpZHRoPXsxNH0gaGVpZ2h0PXsxNH0gY29sb3I9XCIjMjAyMDFGXCIgLz5cbiAgICAgICAgPC9TQ0NBSU1IV3JhcHBlckljb24+XG4gICAgICAgIHtpc0V4cGFuZGVkICYmIChcbiAgICAgICAgICA8U0NDQUlNSFdyYXBwZXJNb2RhbD5cbiAgICAgICAgICAgIDxTQ0NBSU1IV3JhcHBlck1vZGFsQ29udGVudD5cbiAgICAgICAgICAgICAge3dpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MgJiYgIWNsb25lQWdlbnRzUm9sZUJsb2NrZWQgJiYgKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFpYUFnZW50cyA9IGFnZW50c0ZvclNlbGVjdG9yLmZpbHRlcihpc01haWFBZ2VudClcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtYWlhQWdlbnRzLmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAge21haWFBZ2VudHMubWFwKChtYWlhQWdlbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxDaGF0QUlBZ2VudE9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGFnZW50LSR7bWFpYUFnZW50LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnQ9e21haWFBZ2VudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0QWdlbnQ9e2hhbmRsZVNlbGVjdEFnZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e3NlbGVjdGVkQWdlbnQ/LmlkID09PSBtYWlhQWdlbnQuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNYWlhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25GYXZvcml0ZVRvZ2dsZT17b25BZ2VudFVwZGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9KSgpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7YWdlbnRzRm9yU2VsZWN0b3Iuc29tZShhZ2VudCA9PiBhZ2VudC50eXBlID09PSAnY3VzdG9tJykgJiZcbiAgICAgICAgICAgICAgICB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyAmJiAoXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8U0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnRUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICB7dCgnYWdlbnRzJyl9IGJ5IHt1c2VyLmNvbXBhbnl9XG4gICAgICAgICAgICAgICAgICAgIDwvU0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnRUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPFNDQ0FJTUhEaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8U0NDQUlNSEFnZW50c0xpc3QgaGFzTW9yZT17aGFzTW9yZX0gYWdlbnRzQ291bnQ9e2FnZW50c0ZvclNlbGVjdG9yLmxlbmd0aH0gcmVmPXthZ2VudHNSZWZ9PlxuICAgICAgICAgICAgICAgIHthZ2VudHNGb3JTZWxlY3Rvcj8ubWFwKChhZ2VudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgYWdlbnQ/LmlzX2RlbGV0ZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnQ/Lmhhc19ub3RfcGVybWlzc2lvbnMgfHxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnQ/Lmhhc19ub3RfYWNjZXNzIHx8XG4gICAgICAgICAgICAgICAgICAgIGFnZW50Py50eXBlID09PSAnY2xvbmUnIHx8XG4gICAgICAgICAgICAgICAgICAgIGlzTWFpYUFnZW50KGFnZW50KSB8fFxuICAgICAgICAgICAgICAgICAgICAoYWdlbnQ/LnR5cGUgPT09ICdjdXN0b20nICYmICF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUylcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxDaGF0QUlBZ2VudE9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGtleT17YGFnZW50LSR7YWdlbnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICBhZ2VudD17YWdlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdEFnZW50PXtoYW5kbGVTZWxlY3RBZ2VudH1cbiAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzZWxlY3RlZEFnZW50Py5pZCA9PT0gYWdlbnQuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgb25GYXZvcml0ZVRvZ2dsZT17b25BZ2VudFVwZGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBzZXRJc0V4cGFuZGVkPXtzZXRJc0V4cGFuZGVkfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIHtsb2FkaW5nTW9yZSAmJiAoXG4gICAgICAgICAgICAgICAgICA8U0NDQUlNSExvYWRlcldyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgIDxMb2FkZXIgc2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvU0NDQUlNSExvYWRlcldyYXBwZXI+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9TQ0NBSU1IQWdlbnRzTGlzdD5cbiAgICAgICAgICAgICAge3VzZXJQZXJtaXNzaW9ucz8uY3JlYXRlICYmXG4gICAgICAgICAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiZcbiAgICAgICAgICAgICAgICAhaXNNeUFnZW50c1NlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICAhaXNNeVNraWxsc1NlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICAhaXNNYWlha2VyU2VjdGlvbiAmJiAoXG4gICAgICAgICAgICAgICAgICA8U0NDQUlNSEFkZEFnZW50XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRJc0V4cGFuZGVkKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLm9wZW5Nb2RhbCwgeyBvcHRpb246ICdjcmVhdGVfYWdlbnQnIH0pXG4gICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnYWJtLWFnZW50LW1vZGFsLXNldC12YWx1ZXMnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50VmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8U0NDQUlNSFBsdXNJY29uV3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8UGx1cyBjb2xvcj1cIndoaXRlXCIgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICAgICAgICAgICAgICA8L1NDQ0FJTUhQbHVzSWNvbldyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdjcmVhdGVBZ2VudCcpfVxuICAgICAgICAgICAgICAgICAgPC9TQ0NBSU1IQWRkQWdlbnQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvU0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnQ+XG4gICAgICAgICAgPC9TQ0NBSU1IV3JhcHBlck1vZGFsPlxuICAgICAgICApfVxuICAgICAgPC9TQ0NBSU1IV3JhcHBlcj5cbiAgICApXG4gIH1cblxuICBjb25zdCBzaG91bGRSZW5kZXJTZWxlY3RvciA9XG4gICAgIWhhc0Vycm9yICYmXG4gICAgIWxvYWRpbmcgJiZcbiAgICAhaGlkZUFnZW50U2VsZWN0b3IgJiZcbiAgICAoISFzZWxlY3RlZEFnZW50IHx8IGlzTXlBZ2VudHNTZWN0aW9uIHx8IGlzTXlTa2lsbHNTZWN0aW9uKSAmJlxuICAgICghIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIHx8ICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUylcblxuICByZXR1cm4gKFxuICAgIDxTQ0NBSU1ITW9kYWxcbiAgICAgICRoYXNFcnJvcj17aGFzRXJyb3J9XG4gICAgICAkbG9hZGluZz17bG9hZGluZ31cbiAgICAgICRoYXNBZ2VudHM9eyEhYWdlbnRzLmxlbmd0aH1cbiAgICAgIG9uUG9pbnRlckRvd249e2RyYWdnYWJsZSA/IG9uRHJhZ1N0YXJ0IDogdW5kZWZpbmVkfVxuICAgICAgb25Qb2ludGVyTW92ZT17ZHJhZ2dhYmxlID8gb25EcmFnTW92ZSA6IHVuZGVmaW5lZH1cbiAgICAgIG9uUG9pbnRlclVwPXtkcmFnZ2FibGUgPyBvbkRyYWdFbmQgOiB1bmRlZmluZWR9XG4gICAgICBvblBvaW50ZXJDYW5jZWw9e2RyYWdnYWJsZSA/IG9uRHJhZ0VuZCA6IHVuZGVmaW5lZH1cbiAgICAgIG9uTG9zdFBvaW50ZXJDYXB0dXJlPXtkcmFnZ2FibGUgPyBvbkRyYWdFbmQgOiB1bmRlZmluZWR9XG4gICAgICBzdHlsZT17eyBjdXJzb3I6IGRyYWdnYWJsZSA/ICdncmFiJyA6IHVuZGVmaW5lZCwgdG91Y2hBY3Rpb246IGRyYWdnYWJsZSA/ICdtYW5pcHVsYXRpb24nIDogdW5kZWZpbmVkIH19XG4gICAgPlxuICAgICAge3Nob3VsZFJlbmRlclNlbGVjdG9yID8gcmVuZGVyTW9kYWwoKSA6IDxkaXYgLz59XG4gICAgICA8U0NDQUlNSFdyYXBwZXJCdXR0b24gZGF0YS1uby1kcmFnPVwidHJ1ZVwiPlxuICAgICAgICB7c2hvd0JhY2tCdXR0b24gJiYgKFxuICAgICAgICAgIDxTQ0NBSU1IQmFja0J1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgIG9uQmFjaygpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDaGV2cm9uTGVmdCB3aWR0aD17MTR9IGhlaWdodD17MTR9IGNvbG9yPVwiIzM0MzQzM1wiIC8+XG4gICAgICAgICAgICB7dCgnYmFjaycpfVxuICAgICAgICAgIDwvU0NDQUlNSEJhY2tCdXR0b24+XG4gICAgICAgICl9XG4gICAgICAgIHtzaG93SGVhZGVyQ3JlYXRlQWdlbnRCdXR0b24gJiYgKFxuICAgICAgICAgIDxTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZU9wZW5DcmVhdGVBZ2VudE1vZGFsfT5cbiAgICAgICAgICAgIDxTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b25UZXh0Pnt0KCdvcGVuQWdlbnRDcmVhdG9yJyl9PC9TQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b25UZXh0PlxuICAgICAgICAgIDwvU0NDQUlNSENyZWF0ZUFnZW50QnV0dG9uPlxuICAgICAgICApfVxuICAgICAgICA8U0NDQUlNSExheW91dE1lbnVBbmNob3IgcmVmPXtsYXlvdXRNZW51UmVmfSBkYXRhLW5vLWRyYWc9XCJ0cnVlXCI+XG4gICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgIGJ1dHRvbklkPVwiYnRuLW1haWEtbGF5b3V0LW1lbnVcIlxuICAgICAgICAgICAgaGFuZGxlQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFsYXlvdXRNZW51T3Blbikge1xuICAgICAgICAgICAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdE9wZW5WaWV3T3B0aW9ucylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzZXRMYXlvdXRNZW51T3BlbihwcmV2ID0+ICFwcmV2KVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHRvb2x0aXA9e3QoJ2xheW91dE1lbnVUb29sdGlwJyl9XG4gICAgICAgICAgICBkaXNhYmxlVG9vbHRpcD17bGF5b3V0TWVudU9wZW59XG4gICAgICAgICAgICB0b29sdGlwWkluZGV4PXt0b29sdGlwWkluZGV4fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxNYWlhQ2hhdExheW91dE1lbnVJY29uIC8+XG4gICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgIHtsYXlvdXRNZW51T3BlbiA/IChcbiAgICAgICAgICAgIDxTQ0NBSU1ITGF5b3V0TWVudVBhbmVsIHJvbGU9XCJtZW51XCI+XG4gICAgICAgICAgICAgIDxTQ0NBSU1ITGF5b3V0TWVudVJvd1xuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICRhY3RpdmU9e2xheW91dE1vZGUgPT09ICdzaWRlYmFyJ31cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVQaWNrTGF5b3V0KCdzaWRlYmFyJyl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8U0NDQUlNSExheW91dE1lbnVSb3dJY29uIGFyaWEtaGlkZGVuPlxuICAgICAgICAgICAgICAgICAgPE1haWFDaGF0TGF5b3V0U2lkZWJhckljb24gLz5cbiAgICAgICAgICAgICAgICA8L1NDQ0FJTUhMYXlvdXRNZW51Um93SWNvbj5cbiAgICAgICAgICAgICAgICB7dCgnbGF5b3V0U2lkZWJhcicpfVxuICAgICAgICAgICAgICA8L1NDQ0FJTUhMYXlvdXRNZW51Um93PlxuICAgICAgICAgICAgICA8U0NDQUlNSExheW91dE1lbnVSb3dcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAkYWN0aXZlPXtsYXlvdXRNb2RlID09PSAnZnVsbHNjcmVlbid9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUGlja0xheW91dCgnZnVsbHNjcmVlbicpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFNDQ0FJTUhMYXlvdXRNZW51Um93SWNvbiBhcmlhLWhpZGRlbj5cbiAgICAgICAgICAgICAgICAgIDxNYWlhQ2hhdExheW91dEZ1bGxzY3JlZW5JY29uIC8+XG4gICAgICAgICAgICAgICAgPC9TQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24+XG4gICAgICAgICAgICAgICAge3QoJ2xheW91dEZ1bGxzY3JlZW4nKX1cbiAgICAgICAgICAgICAgPC9TQ0NBSU1ITGF5b3V0TWVudVJvdz5cbiAgICAgICAgICAgICAgPFNDQ0FJTUhMYXlvdXRNZW51Um93XG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgJGFjdGl2ZT17bGF5b3V0TW9kZSA9PT0gJ2Zsb2F0aW5nJ31cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVQaWNrTGF5b3V0KCdmbG9hdGluZycpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFNDQ0FJTUhMYXlvdXRNZW51Um93SWNvbiBhcmlhLWhpZGRlbj5cbiAgICAgICAgICAgICAgICAgIDxNYWlhQ2hhdExheW91dEZsb2F0aW5nSWNvbiAvPlxuICAgICAgICAgICAgICAgIDwvU0NDQUlNSExheW91dE1lbnVSb3dJY29uPlxuICAgICAgICAgICAgICAgIHt0KCdsYXlvdXRGbG9hdGluZycpfVxuICAgICAgICAgICAgICA8L1NDQ0FJTUhMYXlvdXRNZW51Um93PlxuICAgICAgICAgICAgPC9TQ0NBSU1ITGF5b3V0TWVudVBhbmVsPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1NDQ0FJTUhMYXlvdXRNZW51QW5jaG9yPlxuICAgICAgICB7aGFuZGxlTWluaW1pemUgPyAoXG4gICAgICAgICAgPEljb25CdXR0b24gaGFuZGxlQ2xpY2s9e2hhbmRsZU1pbmltaXplfSB0b29sdGlwPXt0KCdnbG9iYWxzLm1pbmltaXplJyl9IHRvb2x0aXBaSW5kZXg9e3Rvb2x0aXBaSW5kZXh9PlxuICAgICAgICAgICAgPFNDQ0FJTUhNaW5pbWl6ZUljb24+XG4gICAgICAgICAgICAgIDxTdGF0dXMgd2lkdGg9ezI0fSBoZWlnaHQ9ezI0fSAvPlxuICAgICAgICAgICAgPC9TQ0NBSU1ITWluaW1pemVJY29uPlxuICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L1NDQ0FJTUhXcmFwcGVyQnV0dG9uPlxuICAgIDwvU0NDQUlNSE1vZGFsPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0EsU0FBU0EsU0FBUyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsV0FBVyxFQUFFQyxPQUFPLFFBQTJDLE9BQU87QUFDNUcsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUN0RSxTQUFTQyxNQUFNLFFBQVEseUNBQXlDO0FBQ2hFLFNBQVNDLFdBQVcsUUFBUSw4Q0FBOEM7QUFDMUUsU0FBU0MsV0FBVyxRQUFRLDhDQUE4QztBQUMxRSxTQUFTQyxJQUFJLFFBQVEsdUNBQXVDO0FBQzVELFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBQzlDLFNBQVNDLFFBQVEsUUFBUSxpQ0FBaUM7QUFDMUQsU0FBU0MsZ0JBQWdCLFFBQVEsdUNBQXVDO0FBQ3hFLFNBQVNDLGlCQUFpQixRQUFRLGdDQUFnQztBQUNsRSxTQUFTQyxVQUFVLFFBQVEsOEJBQThCO0FBQ3pELFNBQVNDLFFBQVEsRUFBRUMsc0JBQXNCLFFBQVEseUJBQXlCO0FBQzFF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
443
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsIlRvb2x0aXAiLCJTdGF0dXMiLCJDaGV2cm9uRG93biIsIkNoZXZyb25MZWZ0IiwiUGx1cyIsInVzZVRyYW5zbGF0aW9uIiwiU0VDVElPTlMiLCJ1c2VHbG9iYWxDb250ZXh0IiwidXNlUmVzaXplTGlzdGVuZXIiLCJJY29uQnV0dG9uIiwiTUFJQUljb24iLCJNYWlhQ2hhdExheW91dE1lbnVJY29uIiwiTWFpYUNoYXRMYXlvdXRTaWRlYmFySWNvbiIsIk1haWFDaGF0TGF5b3V0RnVsbHNjcmVlbkljb24iLCJNYWlhQ2hhdExheW91dEZsb2F0aW5nSWNvbiIsIkNoYXRBSUFnZW50T3B0aW9uIiwiU0NDQUlNSE1vZGFsIiwiU0NDQUlNSFNlbGVjdGVkQWdlbnQiLCJTQ0NBSU1IU2VsZWN0ZWRBZ2VudFRleHQiLCJTQ0NBSU1IV3JhcHBlciIsIlNDQ0FJTUhXcmFwcGVyQnV0dG9uIiwiU0NDQUlNSFdyYXBwZXJJY29uIiwiU0NDQUlNSFdyYXBwZXJNb2RhbCIsIlNDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50IiwiU0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnRUaXRsZSIsIlNDQ0FJTUhBZGRBZ2VudCIsIlNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvbiIsIlNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvblRleHQiLCJTQ0NBSU1IRGl2aWRlciIsIlNDQ0FJTUhBZ2VudHNMaXN0IiwiU0NDQUlNSExvYWRlcldyYXBwZXIiLCJTQ0NBSU1IUGx1c0ljb25XcmFwcGVyIiwiU0NDQUlNSExheW91dE1lbnVBbmNob3IiLCJTQ0NBSU1ITGF5b3V0TWVudVBhbmVsIiwiU0NDQUlNSExheW91dE1lbnVSb3ciLCJTQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24iLCJTQ0NBSU1IQmFja0J1dHRvbiIsIlNDQ0FJTUhNaW5pbWl6ZUljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsInVzZVVzZXIiLCJpc01haWFDbG9uZUFnZW50c1JvbGVCbG9ja2VkIiwiTG9hZGVyIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsImNhblNob3dIZWFkZXJDcmVhdGVBZ2VudEJ1dHRvbiIsImZpbHRlckFnZW50c0ZvclNlbGVjdG9yIiwiaXNNYWlhT3JjaGVzdHJhdG9yQWdlbnQiLCJyZXNvbHZlSGVhZGVyU2VsZWN0b3JMYWJlbCIsInJlc29sdmVMb2NhbFNlbGVjdGVkQWdlbnQiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJDaGF0QUlNb2RhbEhlYWRlciIsIl9yZWYiLCJfdXNlciRwZXJtaXNzaW9ucyIsImxheW91dE1vZGUiLCJvbkxheW91dE1vZGVDaGFuZ2UiLCJfcmVmJGRyYWdnYWJsZSIsImRyYWdnYWJsZSIsIm9uRHJhZ1N0YXJ0Iiwib25EcmFnTW92ZSIsIm9uRHJhZ0VuZCIsImhhbmRsZU1pbmltaXplIiwiX3JlZiRhZ2VudHMiLCJhZ2VudHMiLCJfcmVmJGhhc0Vycm9yIiwiaGFzRXJyb3IiLCJfcmVmJGxvYWRpbmciLCJsb2FkaW5nIiwiX3JlZiRsb2FkaW5nTW9yZSIsImxvYWRpbmdNb3JlIiwiX3JlZiRoYXNNb3JlIiwiaGFzTW9yZSIsImhhbmRsZVJlc2V0Q2hhdCIsIm9uQWdlbnRVcGRhdGUiLCJsb2FkTW9yZUFnZW50cyIsInNvcnRBZ2VudHNMaXN0IiwiX3JlZiRpc015QWdlbnRzU2VjdGlvIiwiaXNNeUFnZW50c1NlY3Rpb24iLCJfcmVmJGlzTXlTa2lsbHNTZWN0aW8iLCJpc015U2tpbGxzU2VjdGlvbiIsIl9yZWYkaXNNYWlha2VyU2VjdGlvbiIsImlzTWFpYWtlclNlY3Rpb24iLCJfcmVmJGhpZGVBZ2VudFNlbGVjdG8iLCJoaWRlQWdlbnRTZWxlY3RvciIsIl9yZWYkaGlkZUNvbnRyb2xzIiwiaGlkZUNvbnRyb2xzIiwib25BZ2VudFNlbGVjdGVkIiwiX3JlZiRzaG93QmFja0J1dHRvbiIsInNob3dCYWNrQnV0dG9uIiwiX3JlZiRvbkJhY2siLCJvbkJhY2siLCJfdXNlVHJhbnNsYXRpb24iLCJhYm1BZ2VudCIsImNoYXRBSSIsInQiLCJ1c2VyIiwiYW1wbGl0dWRFdmVudCIsIl91c2VHbG9iYWxDb250ZXh0Iiwic2VsZWN0ZWRBZ2VudCIsImFnZW50Iiwic2VsZWN0QWdlbnQiLCJzZXRQcm9qZWN0Iiwic2V0Q2xpZW50Iiwic2V0VGFzayIsInNlY3Rpb24iLCJ0b29sdGlwWkluZGV4IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaXNFeHBhbmRlZCIsInNldElzRXhwYW5kZWQiLCJ0ZXh0UmVmQWdlbnQiLCJkcm9wZG93blJlZiIsImxheW91dE1lbnVSZWYiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImxheW91dE1lbnVPcGVuIiwic2V0TGF5b3V0TWVudU9wZW4iLCJfdXNlUmVzaXplTGlzdGVuZXIiLCJuYW1lIiwic2hvd1Rvb2x0aXBBZ2VudCIsInNob3dUb29sdGlwIiwiYWdlbnRzUmVmIiwiYWdlbnRzRm9yU2VsZWN0b3IiLCJ1c2VyUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsImFpX2FnZW50cyIsInNob3dIZWFkZXJDcmVhdGVBZ2VudEJ1dHRvbiIsImNyZWF0ZSIsIkJvb2xlYW4iLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiaGFuZGxlT3BlbkNyZWF0ZUFnZW50TW9kYWwiLCJvcGVuTW9kYWwiLCJvcHRpb24iLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImFnZW50VmFsdWVzIiwidmFsdWVzIiwiaXNFZGl0aW5nIiwiaXNPcGVuIiwidW5kZWZpbmVkIiwiaGFuZGxlU2Nyb2xsIiwiY3VycmVudCIsIl9hZ2VudHNSZWYkY3VycmVudCIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImRpc3RhbmNlRnJvbUJvdHRvbSIsInRpbWVvdXRJZCIsInNldFRpbWVvdXQiLCJzY3JvbGxFbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImNsZWFyVGltZW91dCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJsb2NhbEFnZW50cyIsInNlbGVjdG9ySWNvbiIsInR5cGUiLCJpc19sZWdhY3lfY29udGV4dCIsImVtb2ppIiwic2VsZWN0b3JMYWJlbCIsIm5zIiwiaGFuZGxlU2VsZWN0QWdlbnQiLCJhaUNoYXRBZ2VudFNlbGVjdCIsImFnZW50X3R5cGUiLCJuZWVkc0VudGl0eSIsImVudGl0eSIsImhhbmRsZUV4cGFuZE1vZGFsIiwiYWlDaGF0T3BlbkFnZW50U2VsZWN0IiwicHJldiIsImhhbmRsZUNsaWNrT3V0c2lkZSIsImV2ZW50IiwidGFyZ2V0IiwiY29udGFpbnMiLCJoYW5kbGVQaWNrTGF5b3V0IiwibW9kZSIsInByb2plY3RSZXN1bWVFeHBhbmQiLCJleHBhbmRlZCIsImFpQ2hhdFNlbGVjdFZpZXdPcHRpb25zIiwiY2xvbmVBZ2VudHNSb2xlQmxvY2tlZCIsInJlbmRlck1vZGFsIiwicmVmIiwib25DbGljayIsImxlbmd0aCIsImlkIiwiY2hpbGRyZW4iLCJfb2JqZWN0U3ByZWFkIiwidGl0bGUiLCJzdHlsZSIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwiZ2FwIiwicGxhY2VtZW50IiwiekluZGV4IiwiaXNBZ2VudERlbGV0ZWQiLCJpc19kZWxldGVkIiwiaGFzX25vdF9wZXJtaXNzaW9ucyIsImhhc19ub3RfYWNjZXNzIiwid2lkdGgiLCJoZWlnaHQiLCJjb2xvciIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUyIsIm1haWFBZ2VudHMiLCJmaWx0ZXIiLCJtYXAiLCJtYWlhQWdlbnQiLCJpbmRleCIsImlzU2VsZWN0ZWQiLCJpc01haWEiLCJvbkZhdm9yaXRlVG9nZ2xlIiwiY29uY2F0Iiwic29tZSIsImNvbXBhbnkiLCJhZ2VudHNDb3VudCIsInNpemUiLCJzaG91bGRSZW5kZXJTZWxlY3RvciIsIiRoYXNFcnJvciIsIiRsb2FkaW5nIiwiJGhhc0FnZW50cyIsIm9uUG9pbnRlckRvd24iLCJvblBvaW50ZXJNb3ZlIiwib25Qb2ludGVyVXAiLCJvblBvaW50ZXJDYW5jZWwiLCJvbkxvc3RQb2ludGVyQ2FwdHVyZSIsImN1cnNvciIsInRvdWNoQWN0aW9uIiwiYnV0dG9uSWQiLCJoYW5kbGVDbGljayIsImFpQ2hhdE9wZW5WaWV3T3B0aW9ucyIsInRvb2x0aXAiLCJkaXNhYmxlVG9vbHRpcCIsInJvbGUiLCIkYWN0aXZlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1vZGFsL2NvbXBvbmVudHMvQ2hhdEFpTW9kYWxIZWFkZXIvQ2hhdEFpTW9kYWxIZWFkZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VNZW1vLCBQb2ludGVyRXZlbnQgYXMgUmVhY3RQb2ludGVyRXZlbnQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IFN0YXR1cyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1N0YXR1cydcbmltcG9ydCB7IENoZXZyb25Eb3duIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2hldnJvbkRvd24nXG5pbXBvcnQgeyBDaGV2cm9uTGVmdCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0NoZXZyb25MZWZ0J1xuaW1wb3J0IHsgUGx1cyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1BsdXMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHVzZVJlc2l6ZUxpc3RlbmVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaG9va3MvdXNlUmVzaXplJ1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2F0b21zL0ljb25CdXR0b24nXG5pbXBvcnQgeyBNQUlBSWNvbiwgTWFpYUNoYXRMYXlvdXRNZW51SWNvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2F0b21zL2ljb25zJ1xuaW1wb3J0IHsgTWFpYUNoYXRMYXlvdXRTaWRlYmFySWNvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2F0b21zL2ljb25zL01haWFDaGF0TGF5b3V0U2lkZWJhckljb24nXG5pbXBvcnQgeyBNYWlhQ2hhdExheW91dEZ1bGxzY3JlZW5JY29uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXRvbXMvaWNvbnMvTWFpYUNoYXRMYXlvdXRGdWxsc2NyZWVuSWNvbidcbmltcG9ydCB7IE1haWFDaGF0TGF5b3V0RmxvYXRpbmdJY29uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXRvbXMvaWNvbnMvTWFpYUNoYXRMYXlvdXRGbG9hdGluZ0ljb24nXG5pbXBvcnQgeyBDaGF0QUlBZ2VudE9wdGlvbiB9IGZyb20gJy4uL0NoYXRBaUFnZW50T3B0aW9ucy9DaGF0QWlBZ2VudE9wdGlvbnMnXG5pbXBvcnQge1xuICBTQ0NBSU1ITW9kYWwsXG4gIFNDQ0FJTUhTZWxlY3RlZEFnZW50LFxuICBTQ0NBSU1IU2VsZWN0ZWRBZ2VudFRleHQsXG4gIFNDQ0FJTUhXcmFwcGVyLFxuICBTQ0NBSU1IV3JhcHBlckJ1dHRvbixcbiAgU0NDQUlNSFdyYXBwZXJJY29uLFxuICBTQ0NBSU1IV3JhcHBlck1vZGFsLFxuICBTQ0NBSU1IV3JhcHBlck1vZGFsQ29udGVudCxcbiAgU0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnRUaXRsZSxcbiAgU0NDQUlNSEFkZEFnZW50LFxuICBTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b24sXG4gIFNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvblRleHQsXG4gIFNDQ0FJTUhEaXZpZGVyLFxuICBTQ0NBSU1IQWdlbnRzTGlzdCxcbiAgU0NDQUlNSExvYWRlcldyYXBwZXIsXG4gIFNDQ0FJTUhQbHVzSWNvbldyYXBwZXIsXG4gIFNDQ0FJTUhMYXlvdXRNZW51QW5jaG9yLFxuICBTQ0NBSU1ITGF5b3V0TWVudVBhbmVsLFxuICBTQ0NBSU1ITGF5b3V0TWVudVJvdyxcbiAgU0NDQUlNSExheW91dE1lbnVSb3dJY29uLFxuICBTQ0NBSU1IQmFja0J1dHRvbixcbiAgU0NDQUlNSE1pbmltaXplSWNvbixcbn0gZnJvbSAnLi9DaGF0QWlNb2RhbEhlYWRlci5zdHlsZXMnXG5pbXBvcnQgdHlwZSB7IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlIH0gZnJvbSAnLi4vLi4vbGF5b3V0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBpc01haWFDbG9uZUFnZW50c1JvbGVCbG9ja2VkIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29uc3RhbnRzL21haWFUYXNrUGFuZWxBY2Nlc3MnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2hvb2tzL3VzZU1haWFUYXNrUGFuZWxaSW5kZXgnXG5pbXBvcnQge1xuICBjYW5TaG93SGVhZGVyQ3JlYXRlQWdlbnRCdXR0b24sXG4gIGZpbHRlckFnZW50c0ZvclNlbGVjdG9yLFxuICBpc01haWFPcmNoZXN0cmF0b3JBZ2VudCxcbiAgcmVzb2x2ZUhlYWRlclNlbGVjdG9yTGFiZWwsXG4gIHJlc29sdmVMb2NhbFNlbGVjdGVkQWdlbnQsXG59IGZyb20gJy4vQ2hhdEFpTW9kYWxIZWFkZXIuaGVscGVycydcblxuZXhwb3J0IGNvbnN0IENoYXRBSU1vZGFsSGVhZGVyID0gKHtcbiAgbGF5b3V0TW9kZSxcbiAgb25MYXlvdXRNb2RlQ2hhbmdlLFxuICBkcmFnZ2FibGUgPSBmYWxzZSxcbiAgb25EcmFnU3RhcnQsXG4gIG9uRHJhZ01vdmUsXG4gIG9uRHJhZ0VuZCxcbiAgaGFuZGxlTWluaW1pemUsXG4gIGFnZW50cyA9IFtdLFxuICBoYXNFcnJvciA9IGZhbHNlLFxuICBsb2FkaW5nID0gZmFsc2UsXG4gIGxvYWRpbmdNb3JlID0gZmFsc2UsXG4gIGhhc01vcmUgPSBmYWxzZSxcbiAgaGFuZGxlUmVzZXRDaGF0LFxuICBvbkFnZW50VXBkYXRlLFxuICBsb2FkTW9yZUFnZW50cyxcbiAgc29ydEFnZW50c0xpc3QsXG4gIGlzTXlBZ2VudHNTZWN0aW9uID0gZmFsc2UsXG4gIGlzTXlTa2lsbHNTZWN0aW9uID0gZmFsc2UsXG4gIGlzTWFpYWtlclNlY3Rpb24gPSBmYWxzZSxcbiAgaGlkZUFnZW50U2VsZWN0b3IgPSBmYWxzZSxcbiAgaGlkZUNvbnRyb2xzID0gZmFsc2UsXG4gIG9uQWdlbnRTZWxlY3RlZCxcbiAgc2hvd0JhY2tCdXR0b24gPSBmYWxzZSxcbiAgb25CYWNrID0gKCkgPT4gbnVsbCxcbn06IHtcbiAgbGF5b3V0TW9kZTogTWFpYUNoYXRNb2RhbExheW91dE1vZGVcbiAgb25MYXlvdXRNb2RlQ2hhbmdlOiAobW9kZTogTWFpYUNoYXRNb2RhbExheW91dE1vZGUpID0+IHZvaWRcbiAgZXhwYW5kZWQ6IGJvb2xlYW5cbiAgZHJhZ2dhYmxlPzogYm9vbGVhblxuICBvbkRyYWdTdGFydD86IChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB2b2lkXG4gIG9uRHJhZ01vdmU/OiAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4gdm9pZFxuICBvbkRyYWdFbmQ/OiAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4gdm9pZFxuICBoYW5kbGVNaW5pbWl6ZT86ICgpID0+IHZvaWRcbiAgYWdlbnRzOiBBZ2VudFtdXG4gIGhhc0Vycm9yOiBib29sZWFuXG4gIGxvYWRpbmc6IGJvb2xlYW5cbiAgbG9hZGluZ01vcmU/OiBib29sZWFuXG4gIGhhc01vcmU/OiBib29sZWFuXG4gIGhhbmRsZVJlc2V0Q2hhdDogKCkgPT4gdm9pZFxuICBvbkFnZW50VXBkYXRlPzogKHVwZGF0ZWRBZ2VudDogQWdlbnQpID0+IHZvaWRcbiAgbG9hZE1vcmVBZ2VudHM/OiAoKSA9PiB2b2lkXG4gIHNvcnRBZ2VudHNMaXN0PzogKCkgPT4gdm9pZFxuICAvKiogU2VjY2nDs24gXCJNaXMgYWdlbnRlc1wiOiBzaSBubyBoYXkgYWdlbnRlIHNldGVhZG8sIGVsIHNlbGVjdG9yIG11ZXN0cmEgZWwgaWNvbm8gZGUgTUFJQSB5IGVsIG5vbWJyZSBkZSBsYSBzZWNjacOzbiAqL1xuICBpc015QWdlbnRzU2VjdGlvbj86IGJvb2xlYW5cbiAgLyoqIFNlY2Npw7NuIFwiU2tpbGxzXCI6IG1pc21vIGNvbXBvcnRhbWllbnRvIGRlIHNlbGVjdG9yIHF1ZSBNaXMgYWdlbnRlcywgY29uIGVsIG5vbWJyZSBkZSBsYSBzZWNjacOzbiAqL1xuICBpc015U2tpbGxzU2VjdGlvbj86IGJvb2xlYW5cbiAgLyoqIE9jdWx0YSBlbCBjaGlwIGRlIG1vZGVsbyBMTE0gKHAuIGVqLiBlbiBNaXMgYWdlbnRlcyAvIE1pcyBza2lsbHMpICovXG4gIGhpZGVBZ2VudFNlbGVjdG9yPzogYm9vbGVhblxuICAvKiogT2N1bHRhIGxvcyBib3RvbmVzIGRlIGxheW91dCB5IGNpZXJyZSAobW9kbyBww6FnaW5hIGNvbXBsZXRhKSAqL1xuICBoaWRlQ29udHJvbHM/OiBib29sZWFuXG4gIC8qKiBTZWNjacOzbiBcIkNyZWFkb3IgZGUgYWdlbnRlc1wiIChNYWlha2VyKTogaGFiaWxpdGEgZWwgYm90w7NuIFwiQ3JlYXIgYWdlbnRlXCIgZGVsIGhlYWRlciAqL1xuICBpc01haWFrZXJTZWN0aW9uPzogYm9vbGVhblxuICAvKipcbiAgICogU2UgaW52b2NhIGRlc3B1w6lzIGRlbCByZXNldCBjdWFuZG8gZWwgYWdlbnRlIHNlbGVjY2lvbmFkbyBOTyByZXF1aWVyZSBzZWxlY2Npw7NuXG4gICAqIGRlIGVudGl0eSAoY3VzdG9tIG8gY2xvbmUrZ2xvYmFsKS4gUGVybWl0ZSByZXNvbHZlciBgR0VUIC92Mi9zZXNzaW9ucy9hZ2VudC97aWR9YFxuICAgKiB5IG5hdmVnYXIgYSB1bmEgY29udmVyc2FjacOzbiBleGlzdGVudGUgc2kgbGEgaGF5LlxuICAgKi9cbiAgb25BZ2VudFNlbGVjdGVkPzogKGFnZW50OiBBZ2VudCkgPT4gdm9pZCB8IFByb21pc2U8dW5rbm93bj5cbiAgc2hvd0JhY2tCdXR0b24/OiBib29sZWFuXG4gIG9uQmFjaz86ICgpID0+IHZvaWRcbn0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuYWJtQWdlbnQsIFNFQ1RJT05TLmNoYXRBSV0pXG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgYW1wbGl0dWRFdmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBhZ2VudDogc2VsZWN0ZWRBZ2VudCwgc2VsZWN0QWdlbnQsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0VGFzaywgc2VjdGlvbiB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIC8vIEVuIHNlY3Rpb24gJ3Rhc2snIGVsIG1vZGFsIGRlIE1haWEgc2UgZWxldmEgcG9yIGVuY2ltYSBkZWwgdGFzayBwYW5lbCAoei1pbmRleCA5ODAwMDAxKS5cbiAgLy8gTG9zIHRvb2x0aXBzIHNlIG1vbnRhbiBlbiBwb3J0YWwgY29uIHotaW5kZXggMTUwMCBwb3IgZGVmZWN0bywgYXPDrSBxdWUgcXVlZGFyw61hbiBkZXRyw6FzLlxuICAvLyBTdWJpbW9zIHN1IHotaW5kZXggc8OzbG8gZW4gZXN0ZSBjYXNvIHBhcmEgcXVlIHNlIHZlYW4gcG9yIGVuY2ltYSBkZWwgbW9kYWwuXG4gIGNvbnN0IHRvb2x0aXBaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDE1MDAsICdvdmVybGF5JylcbiAgY29uc3QgW2lzRXhwYW5kZWQsIHNldElzRXhwYW5kZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHRleHRSZWZBZ2VudCA9IHVzZVJlZjxIVE1MU3BhbkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGRyb3Bkb3duUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBsYXlvdXRNZW51UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBbbGF5b3V0TWVudU9wZW4sIHNldExheW91dE1lbnVPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB7IHNob3dUb29sdGlwOiBzaG93VG9vbHRpcEFnZW50IH0gPSB1c2VSZXNpemVMaXN0ZW5lcih0ZXh0UmVmQWdlbnQsIFtzZWxlY3RlZEFnZW50Py5uYW1lXSlcbiAgY29uc3QgYWdlbnRzUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuXG4gIGNvbnN0IGFnZW50c0ZvclNlbGVjdG9yID0gdXNlTWVtbygoKSA9PiBmaWx0ZXJBZ2VudHNGb3JTZWxlY3RvcihhZ2VudHMpLCBbYWdlbnRzXSlcblxuICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzXG4gIGNvbnN0IHNob3dIZWFkZXJDcmVhdGVBZ2VudEJ1dHRvbiA9IGNhblNob3dIZWFkZXJDcmVhdGVBZ2VudEJ1dHRvbihcbiAgICB1c2VyUGVybWlzc2lvbnM/LmNyZWF0ZSxcbiAgICBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSxcbiAgICBpc015QWdlbnRzU2VjdGlvbixcbiAgICBpc01haWFrZXJTZWN0aW9uXG4gIClcblxuICBjb25zdCBoYW5kbGVPcGVuQ3JlYXRlQWdlbnRNb2RhbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5vcGVuTW9kYWwsIHsgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyB9KVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywge1xuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBhZ2VudFZhbHVlczoge1xuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIGlzRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIClcbiAgfSwgW2FtcGxpdHVkRXZlbnRdKVxuXG4gIC8vIE1hbmVqYXIgc2Nyb2xsIGluZmluaXRvIHBhcmEgY2FyZ2FyIG3DoXMgYWdlbnRzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gU29sbyBjdWFuZG8gZWwgZHJvcGRvd24gZXN0w6kgYWJpZXJ0b1xuICAgIGlmICghaXNFeHBhbmRlZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZVNjcm9sbCA9ICgpID0+IHtcbiAgICAgIGlmICghYWdlbnRzUmVmLmN1cnJlbnQgfHwgIWxvYWRNb3JlQWdlbnRzIHx8ICFoYXNNb3JlIHx8IGxvYWRpbmdNb3JlKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGFnZW50c1JlZi5jdXJyZW50XG4gICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcblxuICAgICAgLy8gQ2FyZ2FyIG3DoXMgKDUwcHggYW50ZXMpXG4gICAgICBpZiAoZGlzdGFuY2VGcm9tQm90dG9tIDwgNTApIHtcbiAgICAgICAgbG9hZE1vcmVBZ2VudHMoKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRlbGF5IHBhcmEgYXNlZ3VyYXIgcXVlIGVsIERPTSBlc3TDqSByZW5kZXJpemFkb1xuICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGFnZW50c1JlZi5jdXJyZW50XG4gICAgICBpZiAoc2Nyb2xsRWxlbWVudCkge1xuICAgICAgICBzY3JvbGxFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbClcbiAgICAgIH1cbiAgICB9LCAxMDApXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBhZ2VudHNSZWYuY3VycmVudFxuICAgICAgaWYgKHNjcm9sbEVsZW1lbnQpIHtcbiAgICAgICAgc2Nyb2xsRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpXG4gICAgICB9XG4gICAgfVxuICB9LCBbaXNFeHBhbmRlZCwgbG9hZE1vcmVBZ2VudHMsIGhhc01vcmUsIGxvYWRpbmdNb3JlXSlcblxuICBjb25zdCBsb2NhbEFnZW50cyA9IHVzZU1lbW8oKCkgPT4gcmVzb2x2ZUxvY2FsU2VsZWN0ZWRBZ2VudChhZ2VudHMsIHNlbGVjdGVkQWdlbnQpLCBbYWdlbnRzLCBzZWxlY3RlZEFnZW50XSlcblxuICAvLyBFbiAnTWlzIGFnZW50ZXMnIC8gJ1NraWxscycgc2luIGFnZW50ZSBzZXRlYWRvLCBlbCBzZWxlY3RvciBtdWVzdHJhIGVsIGljb25vIGRlIE1BSUEgeSBlbCBub21icmUgZGUgbGEgc2VjY2nDs25cbiAgLy8gZW4gbHVnYXIgZGVsIGFnZW50ZSwgcGFyYSBxdWUgZWwgdXN1YXJpbyBwdWVkYSBhYnJpciBlbCBkcm9wZG93biB5IGVsZWdpciB1bm8uXG4gIGNvbnN0IHNlbGVjdG9ySWNvbiA9XG4gICAgbG9jYWxBZ2VudHM/LnR5cGUgPT09ICdjdXN0b20nICYmICFsb2NhbEFnZW50cz8uaXNfbGVnYWN5X2NvbnRleHQgPyBsb2NhbEFnZW50cz8uZW1vamkgOiA8TUFJQUljb24gLz5cbiAgY29uc3Qgc2VsZWN0b3JMYWJlbCA9IHJlc29sdmVIZWFkZXJTZWxlY3RvckxhYmVsKFxuICAgIGxvY2FsQWdlbnRzLFxuICAgIGlzTXlBZ2VudHNTZWN0aW9uLFxuICAgIGlzTXlTa2lsbHNTZWN0aW9uLFxuICAgIHQoJ21hcmtldHBsYWNlLm15QWdlbnRzVGl0bGUnLCB7IG5zOiBTRUNUSU9OUy5jaGF0QUkgfSksXG4gICAgdCgnY29udmVyc2F0aW9ucy5teVNraWxsc05hdicsIHsgbnM6IFNFQ1RJT05TLmNoYXRBSSB9KVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0QWdlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoYWdlbnQ6IEFnZW50KSA9PiB7XG4gICAgICBzZWxlY3RBZ2VudChhZ2VudClcbiAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdEFnZW50U2VsZWN0LCB7XG4gICAgICAgIGFnZW50X3R5cGU6IGFnZW50Py50eXBlLFxuICAgICAgfSlcbiAgICAgIHNldElzRXhwYW5kZWQoZmFsc2UpXG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0VGFzayhudWxsKVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGhhbmRsZVJlc2V0Q2hhdCgpXG4gICAgICAgIC8vIFNpIGVsIGFnZW50ZSBubyBkZXBlbmRlIGRlIHVuYSBlbnRpdHkgKGN1c3RvbSBvIGNsb25lK2dsb2JhbCkgeWEgcG9kZW1vc1xuICAgICAgICAvLyByZXNvbHZlciBzaSBleGlzdGUgdW5hIHNlc2nDs24gcHJldmlhIHksIGVuIGVzZSBjYXNvLCBuYXZlZ2FyIGEgZWxsYS5cbiAgICAgICAgLy8gUGFyYSBjbG9uZStwcm9qZWN0fGNsaWVudCwgbGEgcmVzb2x1Y2nDs24gb2N1cnJlIGVuIGxvcyBzZWxlY3RvcnMgZGUgZW50aXR5LlxuICAgICAgICBjb25zdCBuZWVkc0VudGl0eSA9IGFnZW50Py50eXBlID09PSAnY2xvbmUnICYmIChhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCcgfHwgYWdlbnQ/LmVudGl0eSA9PT0gJ2NsaWVudCcpXG4gICAgICAgIGlmICghbmVlZHNFbnRpdHkpIHtcbiAgICAgICAgICBvbkFnZW50U2VsZWN0ZWQ/LihhZ2VudClcbiAgICAgICAgfVxuICAgICAgfSwgMTAwKVxuICAgIH0sXG4gICAgW3NlbGVjdEFnZW50LCBhbXBsaXR1ZEV2ZW50LCBoYW5kbGVSZXNldENoYXQsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0VGFzaywgb25BZ2VudFNlbGVjdGVkXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRXhwYW5kTW9kYWwgPSAoKSA9PiB7XG4gICAgaWYgKCFpc0V4cGFuZGVkKSB7XG4gICAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRPcGVuQWdlbnRTZWxlY3QpXG4gICAgICAvLyBDdWFuZG8gc2UgYWJyZSBlbCBzZWxlY3Rvciwgb3JkZW5hciBsb3MgYWdlbnRlc1xuICAgICAgaWYgKHNvcnRBZ2VudHNMaXN0KSB7XG4gICAgICAgIHNvcnRBZ2VudHNMaXN0KClcbiAgICAgIH1cbiAgICB9XG4gICAgc2V0SXNFeHBhbmRlZChwcmV2ID0+ICFwcmV2KVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzRXhwYW5kZWQgJiYgIWxheW91dE1lbnVPcGVuKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgTm9kZVxuICAgICAgaWYgKGlzRXhwYW5kZWQgJiYgZHJvcGRvd25SZWYuY3VycmVudCAmJiAhZHJvcGRvd25SZWYuY3VycmVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgIHNldElzRXhwYW5kZWQoZmFsc2UpXG4gICAgICB9XG4gICAgICBpZiAobGF5b3V0TWVudU9wZW4gJiYgbGF5b3V0TWVudVJlZi5jdXJyZW50ICYmICFsYXlvdXRNZW51UmVmLmN1cnJlbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICBzZXRMYXlvdXRNZW51T3BlbihmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICB9XG4gIH0sIFtpc0V4cGFuZGVkLCBsYXlvdXRNZW51T3Blbl0pXG5cbiAgY29uc3QgaGFuZGxlUGlja0xheW91dCA9IHVzZUNhbGxiYWNrKFxuICAgIChtb2RlOiBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZSkgPT4ge1xuICAgICAgYW1wbGl0dWRFdmVudChFVkVOVFMucHJvamVjdFJlc3VtZUV4cGFuZCwge1xuICAgICAgICBleHBhbmRlZDogbW9kZSA9PT0gJ2Z1bGxzY3JlZW4nLFxuICAgICAgfSlcbiAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdFNlbGVjdFZpZXdPcHRpb25zLCB7IG9wdGlvbjogbW9kZSB9KVxuICAgICAgb25MYXlvdXRNb2RlQ2hhbmdlKG1vZGUpXG4gICAgICBzZXRMYXlvdXRNZW51T3BlbihmYWxzZSlcbiAgICB9LFxuICAgIFthbXBsaXR1ZEV2ZW50LCBvbkxheW91dE1vZGVDaGFuZ2VdXG4gIClcblxuICBjb25zdCBjbG9uZUFnZW50c1JvbGVCbG9ja2VkID0gaXNNYWlhQ2xvbmVBZ2VudHNSb2xlQmxvY2tlZCh1c2VyLCBzZWN0aW9uKVxuXG4gIGNvbnN0IHJlbmRlck1vZGFsID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8U0NDQUlNSFdyYXBwZXJcbiAgICAgICAgcmVmPXtkcm9wZG93blJlZn1cbiAgICAgICAgZGF0YS1uby1kcmFnPVwidHJ1ZVwiXG4gICAgICAgIG9uQ2xpY2s9e2FnZW50cy5sZW5ndGggPyBoYW5kbGVFeHBhbmRNb2RhbCA6IHVuZGVmaW5lZH1cbiAgICAgICAgaWQ9XCJjaGF0LWFpLW1vZGFsLWhlYWRlci13cmFwcGVyXCJcbiAgICAgID5cbiAgICAgICAgPFNDQ0FJTUhTZWxlY3RlZEFnZW50PlxuICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgIHNob3dUb29sdGlwQWdlbnQgPyAoXG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnNHB4JyB9fT5cbiAgICAgICAgICAgICAgICAgIHtsb2NhbEFnZW50cz8udHlwZSA9PT0gJ2N1c3RvbScgJiYgIWxvY2FsQWdlbnRzPy5pc19sZWdhY3lfY29udGV4dCA/IChcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxBZ2VudHM/LmVtb2ppXG4gICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8TUFJQUljb24gLz5cbiAgICAgICAgICAgICAgICAgICl9eycgJ31cbiAgICAgICAgICAgICAgICAgIHtsb2NhbEFnZW50cz8ubmFtZX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGxhY2VtZW50PXtpc0V4cGFuZGVkID8gJ2xlZnQnIDogJ3RvcCd9XG4gICAgICAgICAgICB7Li4uKHRvb2x0aXBaSW5kZXggIT0gbnVsbCA/IHsgekluZGV4OiB0b29sdGlwWkluZGV4IH0gOiB7fSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNDQ0FJTUhTZWxlY3RlZEFnZW50VGV4dFxuICAgICAgICAgICAgICByZWY9e3RleHRSZWZBZ2VudH1cbiAgICAgICAgICAgICAgaXNBZ2VudERlbGV0ZWQ9e1xuICAgICAgICAgICAgICAgICEhc2VsZWN0ZWRBZ2VudD8uaXNfZGVsZXRlZCB8fFxuICAgICAgICAgICAgICAgICEhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9wZXJtaXNzaW9ucyB8fFxuICAgICAgICAgICAgICAgICEhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9hY2Nlc3MgfHxcbiAgICAgICAgICAgICAgICAhIXNlbGVjdGVkQWdlbnQ/LmlzX2xlZ2FjeV9jb250ZXh0XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnNHB4JyB9fT5cbiAgICAgICAgICAgICAgICB7c2VsZWN0b3JJY29ufSB7c2VsZWN0b3JMYWJlbH1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9TQ0NBSU1IU2VsZWN0ZWRBZ2VudFRleHQ+XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICA8L1NDQ0FJTUhTZWxlY3RlZEFnZW50PlxuICAgICAgICA8U0NDQUlNSFdyYXBwZXJJY29uPlxuICAgICAgICAgIDxDaGV2cm9uRG93biB3aWR0aD17MTR9IGhlaWdodD17MTR9IGNvbG9yPVwiIzIwMjAxRlwiIC8+XG4gICAgICAgIDwvU0NDQUlNSFdyYXBwZXJJY29uPlxuICAgICAgICB7aXNFeHBhbmRlZCAmJiAoXG4gICAgICAgICAgPFNDQ0FJTUhXcmFwcGVyTW9kYWw+XG4gICAgICAgICAgICA8U0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnQ+XG4gICAgICAgICAgICAgIHt3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTICYmICFjbG9uZUFnZW50c1JvbGVCbG9ja2VkICYmIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1haWFBZ2VudHMgPSBhZ2VudHNGb3JTZWxlY3Rvci5maWx0ZXIoaXNNYWlhT3JjaGVzdHJhdG9yQWdlbnQpXG4gICAgICAgICAgICAgICAgICAgIGlmICghbWFpYUFnZW50cy5sZW5ndGgpIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHttYWlhQWdlbnRzLm1hcCgobWFpYUFnZW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hhdEFJQWdlbnRPcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2BhZ2VudC0ke21haWFBZ2VudC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50PXttYWlhQWdlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdEFnZW50PXtoYW5kbGVTZWxlY3RBZ2VudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzZWxlY3RlZEFnZW50Py5pZCA9PT0gbWFpYUFnZW50LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTWFpYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRmF2b3JpdGVUb2dnbGU9e29uQWdlbnRVcGRhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSkoKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2FnZW50c0ZvclNlbGVjdG9yLnNvbWUoYWdlbnQgPT4gYWdlbnQudHlwZSA9PT0gJ2N1c3RvbScpICYmXG4gICAgICAgICAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgKFxuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPFNDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50VGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAge3QoJ2FnZW50cycpfSBieSB7dXNlci5jb21wYW55fVxuICAgICAgICAgICAgICAgICAgICA8L1NDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50VGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxTQ0NBSU1IRGl2aWRlciAvPlxuICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPFNDQ0FJTUhBZ2VudHNMaXN0IGhhc01vcmU9e2hhc01vcmV9IGFnZW50c0NvdW50PXthZ2VudHNGb3JTZWxlY3Rvci5sZW5ndGh9IHJlZj17YWdlbnRzUmVmfT5cbiAgICAgICAgICAgICAgICB7YWdlbnRzRm9yU2VsZWN0b3I/Lm1hcCgoYWdlbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGFnZW50Py5pc19kZWxldGVkIHx8XG4gICAgICAgICAgICAgICAgICAgIGFnZW50Py5oYXNfbm90X3Blcm1pc3Npb25zIHx8XG4gICAgICAgICAgICAgICAgICAgIGFnZW50Py5oYXNfbm90X2FjY2VzcyB8fFxuICAgICAgICAgICAgICAgICAgICBhZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyB8fFxuICAgICAgICAgICAgICAgICAgICBpc01haWFPcmNoZXN0cmF0b3JBZ2VudChhZ2VudCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKGFnZW50Py50eXBlID09PSAnY3VzdG9tJyAmJiAhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8Q2hhdEFJQWdlbnRPcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2BhZ2VudC0ke2FnZW50LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgYWdlbnQ9e2FnZW50fVxuICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RBZ2VudD17aGFuZGxlU2VsZWN0QWdlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c2VsZWN0ZWRBZ2VudD8uaWQgPT09IGFnZW50LmlkfVxuICAgICAgICAgICAgICAgICAgICAgIG9uRmF2b3JpdGVUb2dnbGU9e29uQWdlbnRVcGRhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgc2V0SXNFeHBhbmRlZD17c2V0SXNFeHBhbmRlZH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICB7bG9hZGluZ01vcmUgJiYgKFxuICAgICAgICAgICAgICAgICAgPFNDQ0FJTUhMb2FkZXJXcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICA8TG9hZGVyIHNpemU9XCJzbWFsbFwiIC8+XG4gICAgICAgICAgICAgICAgICA8L1NDQ0FJTUhMb2FkZXJXcmFwcGVyPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvU0NDQUlNSEFnZW50c0xpc3Q+XG4gICAgICAgICAgICAgIHt1c2VyUGVybWlzc2lvbnM/LmNyZWF0ZSAmJlxuICAgICAgICAgICAgICAgIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTICYmXG4gICAgICAgICAgICAgICAgIWlzTXlBZ2VudHNTZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgIWlzTXlTa2lsbHNTZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgIWlzTWFpYWtlclNlY3Rpb24gJiYgKFxuICAgICAgICAgICAgICAgICAgPFNDQ0FJTUhBZGRBZ2VudFxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0SXNFeHBhbmRlZChmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5vcGVuTW9kYWwsIHsgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyB9KVxuICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudFZhbHVlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNDQ0FJTUhQbHVzSWNvbldyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPFBsdXMgY29sb3I9XCJ3aGl0ZVwiIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0NBSU1IUGx1c0ljb25XcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICB7dCgnY3JlYXRlQWdlbnQnKX1cbiAgICAgICAgICAgICAgICAgIDwvU0NDQUlNSEFkZEFnZW50PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1NDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50PlxuICAgICAgICAgIDwvU0NDQUlNSFdyYXBwZXJNb2RhbD5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlNSFdyYXBwZXI+XG4gICAgKVxuICB9XG5cbiAgY29uc3Qgc2hvdWxkUmVuZGVyU2VsZWN0b3IgPVxuICAgICFoYXNFcnJvciAmJlxuICAgICFsb2FkaW5nICYmXG4gICAgIWhpZGVBZ2VudFNlbGVjdG9yICYmXG4gICAgKCEhc2VsZWN0ZWRBZ2VudCB8fCBpc015QWdlbnRzU2VjdGlvbiB8fCBpc015U2tpbGxzU2VjdGlvbikgJiZcbiAgICAoISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyB8fCAhIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MpXG5cbiAgcmV0dXJuIChcbiAgICA8U0NDQUlNSE1vZGFsXG4gICAgICAkaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgJGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICAkaGFzQWdlbnRzPXshIWFnZW50cy5sZW5ndGh9XG4gICAgICBvblBvaW50ZXJEb3duPXtkcmFnZ2FibGUgPyBvbkRyYWdTdGFydCA6IHVuZGVmaW5lZH1cbiAgICAgIG9uUG9pbnRlck1vdmU9e2RyYWdnYWJsZSA/IG9uRHJhZ01vdmUgOiB1bmRlZmluZWR9XG4gICAgICBvblBvaW50ZXJVcD17ZHJhZ2dhYmxlID8gb25EcmFnRW5kIDogdW5kZWZpbmVkfVxuICAgICAgb25Qb2ludGVyQ2FuY2VsPXtkcmFnZ2FibGUgPyBvbkRyYWdFbmQgOiB1bmRlZmluZWR9XG4gICAgICBvbkxvc3RQb2ludGVyQ2FwdHVyZT17ZHJhZ2dhYmxlID8gb25EcmFnRW5kIDogdW5kZWZpbmVkfVxuICAgICAgc3R5bGU9e3sgY3Vyc29yOiBkcmFnZ2FibGUgPyAnZ3JhYicgOiB1bmRlZmluZWQsIHRvdWNoQWN0aW9uOiBkcmFnZ2FibGUgPyAnbWFuaXB1bGF0aW9uJyA6IHVuZGVmaW5lZCB9fVxuICAgID5cbiAgICAgIHtzaG91bGRSZW5kZXJTZWxlY3RvciA/IHJlbmRlck1vZGFsKCkgOiA8ZGl2IC8+fVxuICAgICAgPFNDQ0FJTUhXcmFwcGVyQnV0dG9uIGRhdGEtbm8tZHJhZz1cInRydWVcIj5cbiAgICAgICAge3Nob3dCYWNrQnV0dG9uICYmIChcbiAgICAgICAgICA8U0NDQUlNSEJhY2tCdXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBvbkJhY2soKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2hldnJvbkxlZnQgd2lkdGg9ezE0fSBoZWlnaHQ9ezE0fSBjb2xvcj1cIiMzNDM0MzNcIiAvPlxuICAgICAgICAgICAge3QoJ2JhY2snKX1cbiAgICAgICAgICA8L1NDQ0FJTUhCYWNrQnV0dG9uPlxuICAgICAgICApfVxuICAgICAgICB7c2hvd0hlYWRlckNyZWF0ZUFnZW50QnV0dG9uICYmIChcbiAgICAgICAgICA8U0NDQUlNSENyZWF0ZUFnZW50QnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVPcGVuQ3JlYXRlQWdlbnRNb2RhbH0+XG4gICAgICAgICAgICA8U0NDQUlNSENyZWF0ZUFnZW50QnV0dG9uVGV4dD57dCgnb3BlbkFnZW50Q3JlYXRvcicpfTwvU0NDQUlNSENyZWF0ZUFnZW50QnV0dG9uVGV4dD5cbiAgICAgICAgICA8L1NDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvbj5cbiAgICAgICAgKX1cbiAgICAgICAgeyFoaWRlQ29udHJvbHMgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8U0NDQUlNSExheW91dE1lbnVBbmNob3IgcmVmPXtsYXlvdXRNZW51UmVmfSBkYXRhLW5vLWRyYWc9XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgYnV0dG9uSWQ9XCJidG4tbWFpYS1sYXlvdXQtbWVudVwiXG4gICAgICAgICAgICAgICAgaGFuZGxlQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICghbGF5b3V0TWVudU9wZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0T3BlblZpZXdPcHRpb25zKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc2V0TGF5b3V0TWVudU9wZW4ocHJldiA9PiAhcHJldilcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIHRvb2x0aXA9e3QoJ2xheW91dE1lbnVUb29sdGlwJyl9XG4gICAgICAgICAgICAgICAgZGlzYWJsZVRvb2x0aXA9e2xheW91dE1lbnVPcGVufVxuICAgICAgICAgICAgICAgIHRvb2x0aXBaSW5kZXg9e3Rvb2x0aXBaSW5kZXh9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8TWFpYUNoYXRMYXlvdXRNZW51SWNvbiAvPlxuICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICAgIHtsYXlvdXRNZW51T3BlbiA/IChcbiAgICAgICAgICAgICAgICA8U0NDQUlNSExheW91dE1lbnVQYW5lbCByb2xlPVwibWVudVwiPlxuICAgICAgICAgICAgICAgICAgPFNDQ0FJTUhMYXlvdXRNZW51Um93XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAkYWN0aXZlPXtsYXlvdXRNb2RlID09PSAnc2lkZWJhcid9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVBpY2tMYXlvdXQoJ3NpZGViYXInKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNDQ0FJTUhMYXlvdXRNZW51Um93SWNvbiBhcmlhLWhpZGRlbj5cbiAgICAgICAgICAgICAgICAgICAgICA8TWFpYUNoYXRMYXlvdXRTaWRlYmFySWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICA8L1NDQ0FJTUhMYXlvdXRNZW51Um93SWNvbj5cbiAgICAgICAgICAgICAgICAgICAge3QoJ2xheW91dFNpZGViYXInKX1cbiAgICAgICAgICAgICAgICAgIDwvU0NDQUlNSExheW91dE1lbnVSb3c+XG4gICAgICAgICAgICAgICAgICA8U0NDQUlNSExheW91dE1lbnVSb3dcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICRhY3RpdmU9e2xheW91dE1vZGUgPT09ICdmdWxsc2NyZWVuJ31cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUGlja0xheW91dCgnZnVsbHNjcmVlbicpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8U0NDQUlNSExheW91dE1lbnVSb3dJY29uIGFyaWEtaGlkZGVuPlxuICAgICAgICAgICAgICAgICAgICAgIDxNYWlhQ2hhdExheW91dEZ1bGxzY3JlZW5JY29uIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NDQUlNSExheW91dE1lbnVSb3dJY29uPlxuICAgICAgICAgICAgICAgICAgICB7dCgnbGF5b3V0RnVsbHNjcmVlbicpfVxuICAgICAgICAgICAgICAgICAgPC9TQ0NBSU1ITGF5b3V0TWVudVJvdz5cbiAgICAgICAgICAgICAgICAgIDxTQ0NBSU1ITGF5b3V0TWVudVJvd1xuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgJGFjdGl2ZT17bGF5b3V0TW9kZSA9PT0gJ2Zsb2F0aW5nJ31cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUGlja0xheW91dCgnZmxvYXRpbmcnKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNDQ0FJTUhMYXlvdXRNZW51Um93SWNvbiBhcmlhLWhpZGRlbj5cbiAgICAgICAgICAgICAgICAgICAgICA8TWFpYUNoYXRMYXlvdXRGbG9hdGluZ0ljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdsYXlvdXRGbG9hdGluZycpfVxuICAgICAgICAgICAgICAgICAgPC9TQ0NBSU1ITGF5b3V0TWVudVJvdz5cbiAgICAgICAgICAgICAgICA8L1NDQ0FJTUhMYXlvdXRNZW51UGFuZWw+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPC9TQ0NBSU1ITGF5b3V0TWVudUFuY2hvcj5cbiAgICAgICAgICAgIHtoYW5kbGVNaW5pbWl6ZSA/IChcbiAgICAgICAgICAgICAgPEljb25CdXR0b24gaGFuZGxlQ2xpY2s9e2hhbmRsZU1pbmltaXplfSB0b29sdGlwPXt0KCdnbG9iYWxzLm1pbmltaXplJyl9IHRvb2x0aXBaSW5kZXg9e3Rvb2x0aXBaSW5kZXh9PlxuICAgICAgICAgICAgICAgIDxTQ0NBSU1ITWluaW1pemVJY29uPlxuICAgICAgICAgICAgICAgICAgPFN0YXR1cyB3aWR0aD17MjR9IGhlaWdodD17MjR9IC8+XG4gICAgICAgICAgICAgICAgPC9TQ0NBSU1ITWluaW1pemVJY29uPlxuICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlNSFdyYXBwZXJCdXR0b24+XG4gICAgPC9TQ0NBSU1ITW9kYWw+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQSxTQUFTQSxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxXQUFXLEVBQUVDLE9BQU8sUUFBMkMsT0FBTztBQUM1RyxTQUFTQyxPQUFPLFFBQVEsOENBQThDO0FBQ3RFLFNBQVNDLE1BQU0sUUFBUSx5Q0FBeUM7QUFDaEUsU0FBU0MsV0FBVyxRQUFRLDhDQUE4QztBQUMxRSxTQUFTQyxXQUFXLFFBQVEsOENBQThDO0FBQzFFLFNBQVNDLElBQUksUUFBUSx1Q0FBdUM7QUFDNUQsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBU0MsUUFBUSxRQUFRLGlDQUFpQztBQUMxRCxTQUFTQyxnQkFBZ0IsUUFBUSx1Q0FBdUM7QUFDeEUsU0FBU0MsaUJBQWlCLFFBQVEsZ0NBQWdDO0FBQ2xFLFNBQVNDLFVBQVUsUUFBUSw4QkFBOEI7QUFDekQsU0FBU0MsUUFBUSxFQUFFQyxzQkFBc0IsUUFBUSx5QkFBeUI7QUFDMUUsU0FBU0MseUJBQXlCLFFBQVEsbURBQW1EO0FBQzdGLFNBQVNDLDRCQUE0QixRQUFRLHNE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