@projectcor/maia-components 2.49.0-beta.1 → 2.49.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 (493) 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.helpers.js +37 -0
  6. package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.spec.js +63 -0
  7. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +3 -37
  8. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +183 -0
  9. package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
  10. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +117 -0
  11. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +139 -0
  12. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +31 -101
  13. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +385 -0
  14. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
  15. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +91 -0
  16. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +94 -0
  17. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +49 -140
  18. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +396 -0
  19. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
  20. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +257 -0
  21. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +526 -0
  22. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +53 -205
  23. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +137 -0
  24. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +4 -0
  25. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +11 -0
  26. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +2 -4
  27. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +77 -0
  28. package/lib/components/atoms/Backdrop/Backdrop.spec.js +28 -0
  29. package/lib/components/atoms/CardMenu/CardMenu.spec.js +56 -0
  30. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +67 -0
  31. package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
  32. package/lib/components/atoms/Chip/Chip.spec.js +82 -0
  33. package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +26 -0
  34. package/lib/components/atoms/ClientSelector/ClientSelector.helpers.js +26 -0
  35. package/lib/components/atoms/ClientSelector/ClientSelector.helpers.spec.js +45 -0
  36. package/lib/components/atoms/ClientSelector/ClientSelector.js +12 -21
  37. package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +133 -0
  38. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
  39. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +46 -0
  40. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +227 -0
  41. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +109 -0
  42. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +15 -255
  43. package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +81 -0
  44. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +59 -0
  45. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +92 -0
  46. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +12 -57
  47. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +319 -0
  48. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +107 -0
  49. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +136 -0
  50. package/lib/components/atoms/CopyToClipboard.spec.js +74 -0
  51. package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +76 -0
  52. package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +86 -0
  53. package/lib/components/atoms/Expand/Expand.spec.js +57 -0
  54. package/lib/components/atoms/Fade/Fade.spec.js +31 -0
  55. package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +75 -0
  56. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +104 -0
  57. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
  58. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +91 -0
  59. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
  60. package/lib/components/atoms/HelpButton.spec.js +87 -0
  61. package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +96 -0
  62. package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +54 -0
  63. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +21 -0
  64. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +20 -0
  65. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +26 -0
  66. package/lib/components/atoms/LoadingText/LoadingText.spec.js +25 -0
  67. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
  68. package/lib/components/atoms/MAIAError/MAIAError.spec.js +27 -0
  69. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +74 -0
  70. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.spec.js +113 -0
  71. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +184 -0
  72. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +381 -0
  73. package/lib/components/atoms/MAIAInput/MAIAInput.js +130 -177
  74. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +641 -0
  75. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +96 -0
  76. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +92 -0
  77. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +40 -113
  78. package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +193 -0
  79. package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +32 -0
  80. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +64 -0
  81. package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +43 -0
  82. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +114 -0
  83. package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +51 -0
  84. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +48 -0
  85. package/lib/components/atoms/ModalProject/ModalProject.spec.js +66 -0
  86. package/lib/components/atoms/NextPageLoader.spec.js +37 -0
  87. package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +20 -0
  88. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +17 -0
  89. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +35 -0
  90. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +3 -15
  91. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +47 -0
  92. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +146 -0
  93. package/lib/components/atoms/PrimaryButton.spec.js +42 -0
  94. package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +69 -0
  95. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
  96. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
  97. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +41 -24
  98. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +27 -13
  99. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
  100. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +79 -52
  101. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +170 -0
  102. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +9 -11
  103. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +199 -0
  104. package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +6 -1
  105. package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +70 -0
  106. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +36 -15
  107. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +120 -0
  108. package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +8 -0
  109. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +10 -0
  110. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +31 -0
  111. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
  112. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
  113. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +29 -0
  114. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +38 -0
  115. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +16 -0
  116. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
  117. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +24 -0
  118. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.js +101 -0
  119. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.spec.js +71 -0
  120. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +21 -77
  121. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +120 -0
  122. package/lib/components/atoms/Switch/Switch.spec.js +41 -0
  123. package/lib/components/atoms/TextArea/CustomTextArea.spec.js +52 -0
  124. package/lib/components/atoms/TextArea/TextArea.helpers.js +23 -0
  125. package/lib/components/atoms/TextArea/TextArea.helpers.spec.js +25 -0
  126. package/lib/components/atoms/TextArea/TextArea.js +11 -20
  127. package/lib/components/atoms/TextArea/TextArea.spec.js +126 -0
  128. package/lib/components/atoms/ThirdButton.spec.js +29 -0
  129. package/lib/components/atoms/VideoModal/VideoModal.spec.js +68 -0
  130. package/lib/components/atoms/WithAppCfg.spec.js +82 -0
  131. package/lib/components/index.js +2 -1
  132. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +37 -0
  133. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +53 -0
  134. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +6 -29
  135. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +742 -0
  136. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +68 -0
  137. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +107 -0
  138. package/lib/components/molecules/AbmSection/AbmGeneralSection.js +17 -56
  139. package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +256 -0
  140. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +133 -0
  141. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +175 -0
  142. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +31 -112
  143. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +318 -0
  144. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +17 -0
  145. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +50 -0
  146. package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +5 -15
  147. package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +94 -0
  148. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
  149. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
  150. package/lib/components/molecules/AgentInputBlock/index.js +5 -0
  151. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
  152. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
  153. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
  154. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
  155. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
  156. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +66 -0
  157. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
  158. package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +145 -0
  159. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +204 -0
  160. package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.js +370 -0
  161. package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.spec.js +622 -0
  162. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +285 -302
  163. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +264 -0
  164. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +86 -0
  165. package/lib/components/molecules/ChatAIHome/styles.js +85 -78
  166. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
  167. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +398 -0
  168. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +742 -0
  169. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +235 -245
  170. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +541 -0
  171. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
  172. package/lib/components/molecules/ChatAIMessages/newStyles.js +32 -35
  173. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +522 -4
  174. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +1394 -0
  175. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +250 -349
  176. package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +1401 -0
  177. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  178. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +5 -0
  179. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +33 -0
  180. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +3 -2
  181. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +116 -0
  182. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
  183. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +134 -0
  184. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
  185. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +49 -0
  186. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +142 -0
  187. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +100 -93
  188. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +241 -0
  189. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
  190. package/lib/components/molecules/ChatAIModal/constants.spec.js +16 -0
  191. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +22 -0
  192. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +67 -0
  193. package/lib/components/molecules/ChatAIModal/layout.spec.js +72 -0
  194. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.js +39 -0
  195. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.spec.js +93 -0
  196. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +30 -33
  197. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +297 -0
  198. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.js +41 -0
  199. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.spec.js +62 -0
  200. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +9 -35
  201. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +221 -0
  202. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +66 -0
  203. package/lib/components/molecules/ChatFooter/ChatFooter.js +10 -4
  204. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +369 -0
  205. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +10 -0
  206. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +48 -0
  207. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +104 -0
  208. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +9 -44
  209. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +139 -0
  210. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
  211. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
  212. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +126 -0
  213. package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +115 -0
  214. package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +79 -0
  215. package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +37 -0
  216. package/lib/components/molecules/Sidebar/Sidebar.helpers.js +43 -0
  217. package/lib/components/molecules/Sidebar/Sidebar.helpers.spec.js +119 -0
  218. package/lib/components/molecules/Sidebar/Sidebar.js +65 -44
  219. package/lib/components/molecules/Sidebar/Sidebar.spec.js +464 -0
  220. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +512 -0
  221. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +1067 -0
  222. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +310 -644
  223. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1236 -0
  224. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
  225. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.js +37 -0
  226. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.spec.js +77 -0
  227. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +13 -25
  228. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +503 -0
  229. package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
  230. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +525 -0
  231. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +246 -0
  232. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
  233. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
  234. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +139 -0
  235. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
  236. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +275 -0
  237. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +275 -0
  238. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +195 -0
  239. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +94 -0
  240. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +69 -0
  241. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
  242. package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
  243. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
  244. package/lib/components/organisms/ChatAIPage/index.js +3 -0
  245. package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +53 -0
  246. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
  247. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
  248. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
  249. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +49 -0
  250. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +67 -0
  251. package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +117 -0
  252. package/lib/components/organisms/SnackBar/Snackbar.spec.js +66 -0
  253. package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +19 -0
  254. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +52 -0
  255. package/lib/constants/formatExtensions.js +7 -8
  256. package/lib/constants/formatExtensions.spec.js +14 -0
  257. package/lib/constants/maiaExternalConnectorsAccess.spec.js +29 -0
  258. package/lib/constants/maiaFeatureAccess.spec.js +30 -0
  259. package/lib/constants/maiaHourAgentAccess.spec.js +30 -0
  260. package/lib/constants/maiaTaskPanelAccess.spec.js +41 -0
  261. package/lib/constants/permissions/clientRoleAccess.spec.js +65 -0
  262. package/lib/constants/permissions/index.js +2 -2
  263. package/lib/constants/permissions/utils.js +4 -1
  264. package/lib/constants/permissions/utils.spec.js +128 -0
  265. package/lib/constants/plannerSyncEvents.spec.js +31 -0
  266. package/lib/constants/taskUrls.spec.js +9 -0
  267. package/lib/dev/DevMaiaPage.js +30 -0
  268. package/lib/dev/DevReasoningTimeline.js +75 -86
  269. package/lib/dev/Providers.js +5 -3
  270. package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
  271. package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
  272. package/lib/hooks/useAccessClient/useAccessClient.spec.js +149 -0
  273. package/lib/hooks/useAgentModel/useAgentModel.spec.js +83 -0
  274. package/lib/hooks/useAgentModel/useCreateAgent.helpers.js +144 -0
  275. package/lib/hooks/useAgentModel/useCreateAgent.helpers.spec.js +268 -0
  276. package/lib/hooks/useAgentModel/useCreateAgent.js +38 -102
  277. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +314 -0
  278. package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
  279. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +374 -0
  280. package/lib/hooks/useAgentSuggestions.spec.js +89 -0
  281. package/lib/hooks/useCaretPosition.spec.js +58 -0
  282. package/lib/hooks/useChatManager/useChatManager.helpers.js +902 -0
  283. package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +2027 -0
  284. package/lib/hooks/useChatManager/useChatManager.js +272 -745
  285. package/lib/hooks/useChatManager/useChatManager.spec.js +2409 -0
  286. package/lib/hooks/useChatMessages/useChatMessages.helpers.js +365 -0
  287. package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +491 -0
  288. package/lib/hooks/useChatMessages/useChatMessages.js +59 -285
  289. package/lib/hooks/useChatMessages/useChatMessages.spec.js +729 -0
  290. package/lib/hooks/useChats/useChats.spec.js +208 -0
  291. package/lib/hooks/useClientSearch.helpers.js +36 -0
  292. package/lib/hooks/useClientSearch.helpers.spec.js +52 -0
  293. package/lib/hooks/useClientSearch.js +4 -32
  294. package/lib/hooks/useClientSearch.spec.js +86 -0
  295. package/lib/hooks/useContextMentions.helpers.js +212 -0
  296. package/lib/hooks/useContextMentions.helpers.spec.js +267 -0
  297. package/lib/hooks/useContextMentions.js +5 -223
  298. package/lib/hooks/useContextMentions.spec.js +338 -0
  299. package/lib/hooks/useContextMentions.types.js +2 -0
  300. package/lib/hooks/useContextPinPopover.helpers.js +95 -0
  301. package/lib/hooks/useContextPinPopover.helpers.spec.js +183 -0
  302. package/lib/hooks/useContextPinPopover.js +16 -75
  303. package/lib/hooks/useContextPinPopover.spec.js +159 -0
  304. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
  305. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
  306. package/lib/hooks/useDebounce.spec.js +42 -0
  307. package/lib/hooks/useEntitySearch.helpers.js +407 -0
  308. package/lib/hooks/useEntitySearch.helpers.spec.js +723 -0
  309. package/lib/hooks/useEntitySearch.js +52 -436
  310. package/lib/hooks/useEntitySearch.spec.js +718 -0
  311. package/lib/hooks/useEvent.spec.js +45 -0
  312. package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
  313. package/lib/hooks/useFrequentlyUsedActions.js +60 -22
  314. package/lib/hooks/useFrequentlyUsedActions.spec.js +135 -0
  315. package/lib/hooks/useIsMaiaPageRoute.js +26 -0
  316. package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
  317. package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +122 -0
  318. package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +148 -0
  319. package/lib/hooks/useKnowledge/saveKnowledge.spec.js +104 -0
  320. package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +178 -0
  321. package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
  322. package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
  323. package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
  324. package/lib/hooks/useMentionPopover.helpers.js +41 -0
  325. package/lib/hooks/useMentionPopover.helpers.spec.js +100 -0
  326. package/lib/hooks/useMentionPopover.js +9 -35
  327. package/lib/hooks/useMentionPopover.spec.js +392 -0
  328. package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +47 -0
  329. package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +176 -0
  330. package/lib/hooks/useMinimizedPillBottomOffset.js +15 -45
  331. package/lib/hooks/useMinimizedPillBottomOffset.spec.js +89 -0
  332. package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
  333. package/lib/hooks/useModal/useModal.spec.js +73 -0
  334. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.js +86 -0
  335. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.spec.js +138 -0
  336. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +8 -82
  337. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +417 -0
  338. package/lib/hooks/useProjectSearch.helpers.js +61 -0
  339. package/lib/hooks/useProjectSearch.helpers.spec.js +89 -0
  340. package/lib/hooks/useProjectSearch.js +4 -58
  341. package/lib/hooks/useProjectSearch.spec.js +91 -0
  342. package/lib/hooks/useProjectSummary.spec.js +193 -0
  343. package/lib/hooks/useProjectSummaryConfig.helpers.js +62 -0
  344. package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +151 -0
  345. package/lib/hooks/useProjectSummaryConfig.js +14 -52
  346. package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
  347. package/lib/hooks/useReasoningTrace/reasoningStore.js +8 -39
  348. package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +112 -0
  349. package/lib/hooks/useRecentClientsSearch.helpers.js +33 -0
  350. package/lib/hooks/useRecentClientsSearch.helpers.spec.js +33 -0
  351. package/lib/hooks/useRecentClientsSearch.js +4 -32
  352. package/lib/hooks/useRecentClientsSearch.spec.js +85 -0
  353. package/lib/hooks/useRecentContexts.spec.js +139 -0
  354. package/lib/hooks/useResize.spec.js +37 -0
  355. package/lib/hooks/useSkillsCatalog.spec.js +88 -0
  356. package/lib/hooks/useSlashCommands.spec.js +139 -0
  357. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +101 -0
  358. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
  359. package/lib/hooks/useStreamResponse.spec.js +199 -0
  360. package/lib/hooks/useT.spec.js +20 -0
  361. package/lib/hooks/useToggle.spec.js +33 -0
  362. package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +171 -0
  363. package/lib/index.js +5 -2
  364. package/lib/lang/br/index.js +26 -7
  365. package/lib/lang/en/index.js +26 -7
  366. package/lib/lang/es/index.js +26 -7
  367. package/lib/lang/fr/index.js +26 -7
  368. package/lib/services/appcues.spec.js +37 -0
  369. package/lib/services/maia/Access/updateAccess.spec.js +137 -0
  370. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  371. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +56 -0
  372. package/lib/services/maia/Actions/getSlashCommands.spec.js +91 -0
  373. package/lib/services/maia/Agents/connectors.spec.js +496 -0
  374. package/lib/services/maia/Agents/createAgent.spec.js +55 -0
  375. package/lib/services/maia/Agents/deleteAgent.spec.js +57 -0
  376. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
  377. package/lib/services/maia/Agents/getAgentById.spec.js +190 -0
  378. package/lib/services/maia/Agents/getAgentModels.spec.js +190 -0
  379. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +89 -0
  380. package/lib/services/maia/Agents/getAgents.helpers.js +241 -0
  381. package/lib/services/maia/Agents/getAgents.helpers.spec.js +325 -0
  382. package/lib/services/maia/Agents/getAgents.js +90 -282
  383. package/lib/services/maia/Agents/getAgents.spec.js +1135 -0
  384. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
  385. package/lib/services/maia/Agents/toggleFavorite.spec.js +59 -0
  386. package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
  387. package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
  388. package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
  389. package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
  390. package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
  391. package/lib/services/maia/Chats/patchChat.spec.js +41 -0
  392. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
  393. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
  394. package/lib/services/maia/Knowledge/delete.spec.js +45 -0
  395. package/lib/services/maia/Knowledge/download.spec.js +78 -0
  396. package/lib/services/maia/Knowledge/save.spec.js +58 -0
  397. package/lib/services/maia/Orchestrator/orchestrator.helpers.js +130 -0
  398. package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +225 -0
  399. package/lib/services/maia/Orchestrator/orchestrator.js +38 -121
  400. package/lib/services/maia/Orchestrator/orchestrator.spec.js +181 -0
  401. package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
  402. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +103 -0
  403. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
  404. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
  405. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
  406. package/lib/services/maia/Skills/createSkill.spec.js +68 -0
  407. package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
  408. package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
  409. package/lib/services/maia/Skills/getSkills.spec.js +152 -0
  410. package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
  411. package/lib/services/maia/client.spec.js +56 -0
  412. package/lib/services/utils/fetchCOR.spec.js +211 -0
  413. package/lib/services/utils/getCookie.spec.js +20 -0
  414. package/lib/services/utils/mapChatMessages.helpers.js +223 -0
  415. package/lib/services/utils/mapChatMessages.helpers.spec.js +336 -0
  416. package/lib/services/utils/mapChatMessages.js +25 -254
  417. package/lib/services/utils/mapChatMessages.spec.js +254 -0
  418. package/lib/store/chatsSidebarOptimistic.spec.js +145 -0
  419. package/lib/store/maiaLastChatPersistence.spec.js +22 -0
  420. package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
  421. package/lib/store/sessions/sessionNotificationSound.spec.js +145 -0
  422. package/lib/store/sessions/sessionNotifications.helpers.js +45 -0
  423. package/lib/store/sessions/sessionNotifications.helpers.spec.js +63 -0
  424. package/lib/store/sessions/sessionNotifications.js +35 -41
  425. package/lib/store/sessions/sessionNotifications.spec.js +106 -0
  426. package/lib/store/sessions/sessionStreamManager.helpers.js +134 -0
  427. package/lib/store/sessions/sessionStreamManager.helpers.spec.js +177 -0
  428. package/lib/store/sessions/sessionStreamManager.js +209 -277
  429. package/lib/store/sessions/sessionStreamManager.spec.js +939 -0
  430. package/lib/store/sessions/sessions.types.spec.js +16 -0
  431. package/lib/store/sessions/useSessionsStore.spec.js +135 -0
  432. package/lib/store/useChatsStore.spec.js +619 -0
  433. package/lib/store/useFaqsStore.spec.js +57 -0
  434. package/lib/styles/cascade.js +29 -3
  435. package/lib/styles/transitions.js +3 -1
  436. package/lib/test/mockSseStream.js +121 -0
  437. package/lib/test/streamdownCodeMock.js +6 -0
  438. package/lib/test/streamdownMock.js +12 -0
  439. package/lib/types/Chat.js +1 -1
  440. package/lib/types/agentModal.js +1 -1
  441. package/lib/types/global.d.js +1 -1
  442. package/lib/types/reasoning.js +1 -1
  443. package/lib/utils/actionCategoryMap.spec.js +18 -0
  444. package/lib/utils/agentDisplayName.spec.js +48 -0
  445. package/lib/utils/autoApproveStorage.spec.js +25 -0
  446. package/lib/utils/chatInputFiles.spec.js +39 -0
  447. package/lib/utils/contextMentionIcons.spec.js +41 -0
  448. package/lib/utils/contextMentionLabel.spec.js +13 -0
  449. package/lib/utils/contextMentionTriggers.spec.js +44 -0
  450. package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
  451. package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
  452. package/lib/utils/entityLinkRender.spec.js +72 -0
  453. package/lib/utils/fileDownloadHelper.spec.js +67 -0
  454. package/lib/utils/formatQuickActionMessage.spec.js +27 -0
  455. package/lib/utils/formatUnreadCount.spec.js +12 -0
  456. package/lib/utils/getUnitFileSize.spec.js +18 -0
  457. package/lib/utils/hitlAnalytics.spec.js +136 -0
  458. package/lib/utils/hoursPlannerQuickActionType.js +74 -1
  459. package/lib/utils/hoursPlannerQuickActionType.spec.js +64 -0
  460. package/lib/utils/imagePreprocessor.helpers.js +28 -0
  461. package/lib/utils/imagePreprocessor.helpers.spec.js +28 -0
  462. package/lib/utils/imagePreprocessor.js +12 -37
  463. package/lib/utils/imagePreprocessor.spec.js +112 -0
  464. package/lib/utils/maiaPageRoute.js +24 -0
  465. package/lib/utils/maiaPageRoute.spec.js +23 -0
  466. package/lib/utils/mapBackendLang.spec.js +19 -0
  467. package/lib/utils/navigateContextEntity.spec.js +50 -0
  468. package/lib/utils/normalizeAgentConnectors.spec.js +98 -0
  469. package/lib/utils/openTaskInCorPanel.spec.js +43 -0
  470. package/lib/utils/orchestratorSubagents.spec.js +32 -0
  471. package/lib/utils/reasoningMappers.spec.js +103 -0
  472. package/lib/utils/recentContextsHomeLimit.spec.js +32 -0
  473. package/lib/utils/renderContextMentions.helpers.js +110 -0
  474. package/lib/utils/renderContextMentions.helpers.spec.js +87 -0
  475. package/lib/utils/renderContextMentions.js +4 -110
  476. package/lib/utils/renderContextMentions.spec.js +268 -0
  477. package/lib/utils/retryCompletion.spec.js +181 -0
  478. package/lib/utils/skillContentSize.spec.js +13 -0
  479. package/lib/utils/slashCommandMarker.spec.js +43 -0
  480. package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
  481. package/lib/utils/sseStreamContent.spec.js +31 -0
  482. package/lib/utils/streamActivityMessages.helpers.js +223 -0
  483. package/lib/utils/streamActivityMessages.helpers.spec.js +84 -0
  484. package/lib/utils/streamActivityMessages.js +33 -238
  485. package/lib/utils/streamActivityMessages.spec.js +336 -0
  486. package/lib/utils/validateTrimmedFields.spec.js +26 -0
  487. package/package.json +2 -2
  488. package/README.md +0 -2
  489. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.js +0 -53
  490. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.styles.js +0 -8
  491. package/lib/components/atoms/ContextCompactedNotice/index.js +0 -2
  492. package/lib/types/contextCompaction.js +0 -48
  493. package/lib/types/jest-dom.d.js +0 -2
@@ -0,0 +1,93 @@
1
+ import { buildAgentDeleteModalChat, getAgentCreatedAtLabel, normalizeAgentIntroText, shouldAutoLoadMoreAgents, shouldDebounceAgentSearch, shouldLoadMoreAgentsOnScroll, shouldUseMaiakerEmptyStateAction } from './ChatAIMyAgents.helpers';
2
+ describe('ChatAIMyAgents.helpers', function () {
3
+ it('normalizeAgentIntroText supports arrays and empty values', function () {
4
+ expect(normalizeAgentIntroText(['Primero', 'Segundo'])).toBe('Primero');
5
+ expect(normalizeAgentIntroText(null)).toBe('');
6
+ });
7
+ it('getAgentCreatedAtLabel formats relative dates', function () {
8
+ var now = Date.parse('2026-09-24T12:00:00.000Z');
9
+ var labels = {
10
+ today: 'Hoy',
11
+ oneDayAgo: 'Ayer',
12
+ daysAgo: function daysAgo(days) {
13
+ return "".concat(days, " d\xEDas");
14
+ }
15
+ };
16
+ expect(getAgentCreatedAtLabel({
17
+ id: '1',
18
+ name: 'A',
19
+ type: 'custom',
20
+ entity: 'global'
21
+ }, labels, now)).toBe('');
22
+ expect(getAgentCreatedAtLabel({
23
+ id: '1',
24
+ name: 'A',
25
+ type: 'custom',
26
+ entity: 'global',
27
+ created_at: 'invalid'
28
+ }, labels, now)).toBe('');
29
+ expect(getAgentCreatedAtLabel({
30
+ id: '1',
31
+ name: 'A',
32
+ type: 'custom',
33
+ entity: 'global',
34
+ created_at: '2026-09-24T10:00:00.000Z'
35
+ }, labels, now)).toBe('Hoy');
36
+ expect(getAgentCreatedAtLabel({
37
+ id: '1',
38
+ name: 'A',
39
+ type: 'custom',
40
+ entity: 'global',
41
+ created_at: '2026-09-23T10:00:00.000Z'
42
+ }, labels, now)).toBe('Ayer');
43
+ expect(getAgentCreatedAtLabel({
44
+ id: '1',
45
+ name: 'A',
46
+ type: 'custom',
47
+ entity: 'global',
48
+ created_at: '2026-09-20T10:00:00.000Z'
49
+ }, labels, now)).toBe('4 días');
50
+ });
51
+ it('shouldLoadMoreAgentsOnScroll respects loading flags and threshold', function () {
52
+ expect(shouldLoadMoreAgentsOnScroll({
53
+ scrollTop: 500,
54
+ clientHeight: 200,
55
+ scrollHeight: 720,
56
+ hasMoreAgents: true,
57
+ loadingMoreAgents: false
58
+ })).toBe(true);
59
+ expect(shouldLoadMoreAgentsOnScroll({
60
+ scrollTop: 0,
61
+ clientHeight: 200,
62
+ scrollHeight: 720,
63
+ hasMoreAgents: false,
64
+ loadingMoreAgents: false
65
+ })).toBe(false);
66
+ });
67
+ it('shouldAutoLoadMoreAgents triggers when content does not fill the container', function () {
68
+ expect(shouldAutoLoadMoreAgents({
69
+ scrollHeight: 100,
70
+ clientHeight: 200,
71
+ hasMoreAgents: true,
72
+ loadingMoreAgents: false
73
+ })).toBe(true);
74
+ });
75
+ it('buildAgentDeleteModalChat and empty-state helpers', function () {
76
+ expect(buildAgentDeleteModalChat(null)).toBeNull();
77
+ expect(buildAgentDeleteModalChat({
78
+ id: 'a1',
79
+ name: 'Bot',
80
+ type: 'custom',
81
+ entity: 'global'
82
+ })).toEqual({
83
+ title: 'Bot',
84
+ id: 'a1'
85
+ });
86
+ expect(shouldDebounceAgentSearch('')).toBe(true);
87
+ expect(shouldDebounceAgentSearch('ab')).toBe(false);
88
+ expect(shouldDebounceAgentSearch('abc')).toBe(true);
89
+ expect(shouldUseMaiakerEmptyStateAction(true, undefined)).toBe(false);
90
+ expect(shouldUseMaiakerEmptyStateAction(true, function () {})).toBe(true);
91
+ });
92
+ });
93
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJidWlsZEFnZW50RGVsZXRlTW9kYWxDaGF0IiwiZ2V0QWdlbnRDcmVhdGVkQXRMYWJlbCIsIm5vcm1hbGl6ZUFnZW50SW50cm9UZXh0Iiwic2hvdWxkQXV0b0xvYWRNb3JlQWdlbnRzIiwic2hvdWxkRGVib3VuY2VBZ2VudFNlYXJjaCIsInNob3VsZExvYWRNb3JlQWdlbnRzT25TY3JvbGwiLCJzaG91bGRVc2VNYWlha2VyRW1wdHlTdGF0ZUFjdGlvbiIsImRlc2NyaWJlIiwiaXQiLCJleHBlY3QiLCJ0b0JlIiwibm93IiwiRGF0ZSIsInBhcnNlIiwibGFiZWxzIiwidG9kYXkiLCJvbmVEYXlBZ28iLCJkYXlzQWdvIiwiZGF5cyIsImNvbmNhdCIsImlkIiwibmFtZSIsInR5cGUiLCJlbnRpdHkiLCJjcmVhdGVkX2F0Iiwic2Nyb2xsVG9wIiwiY2xpZW50SGVpZ2h0Iiwic2Nyb2xsSGVpZ2h0IiwiaGFzTW9yZUFnZW50cyIsImxvYWRpbmdNb3JlQWdlbnRzIiwidG9CZU51bGwiLCJ0b0VxdWFsIiwidGl0bGUiLCJ1bmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTXlBZ2VudHMvQ2hhdEFJTXlBZ2VudHMuaGVscGVycy5zcGVjLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7XG4gIGJ1aWxkQWdlbnREZWxldGVNb2RhbENoYXQsXG4gIGdldEFnZW50Q3JlYXRlZEF0TGFiZWwsXG4gIG5vcm1hbGl6ZUFnZW50SW50cm9UZXh0LFxuICBzaG91bGRBdXRvTG9hZE1vcmVBZ2VudHMsXG4gIHNob3VsZERlYm91bmNlQWdlbnRTZWFyY2gsXG4gIHNob3VsZExvYWRNb3JlQWdlbnRzT25TY3JvbGwsXG4gIHNob3VsZFVzZU1haWFrZXJFbXB0eVN0YXRlQWN0aW9uLFxufSBmcm9tICcuL0NoYXRBSU15QWdlbnRzLmhlbHBlcnMnXG5cbmRlc2NyaWJlKCdDaGF0QUlNeUFnZW50cy5oZWxwZXJzJywgKCkgPT4ge1xuICBpdCgnbm9ybWFsaXplQWdlbnRJbnRyb1RleHQgc3VwcG9ydHMgYXJyYXlzIGFuZCBlbXB0eSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KG5vcm1hbGl6ZUFnZW50SW50cm9UZXh0KFsnUHJpbWVybycsICdTZWd1bmRvJ10pKS50b0JlKCdQcmltZXJvJylcbiAgICBleHBlY3Qobm9ybWFsaXplQWdlbnRJbnRyb1RleHQobnVsbCkpLnRvQmUoJycpXG4gIH0pXG5cbiAgaXQoJ2dldEFnZW50Q3JlYXRlZEF0TGFiZWwgZm9ybWF0cyByZWxhdGl2ZSBkYXRlcycsICgpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLnBhcnNlKCcyMDI2LTA5LTI0VDEyOjAwOjAwLjAwMFonKVxuICAgIGNvbnN0IGxhYmVscyA9IHtcbiAgICAgIHRvZGF5OiAnSG95JyxcbiAgICAgIG9uZURheUFnbzogJ0F5ZXInLFxuICAgICAgZGF5c0FnbzogKGRheXM6IG51bWJlcikgPT4gYCR7ZGF5c30gZMOtYXNgLFxuICAgIH1cblxuICAgIGV4cGVjdChnZXRBZ2VudENyZWF0ZWRBdExhYmVsKHsgaWQ6ICcxJywgbmFtZTogJ0EnLCB0eXBlOiAnY3VzdG9tJywgZW50aXR5OiAnZ2xvYmFsJyB9LCBsYWJlbHMsIG5vdykpLnRvQmUoJycpXG4gICAgZXhwZWN0KFxuICAgICAgZ2V0QWdlbnRDcmVhdGVkQXRMYWJlbChcbiAgICAgICAgeyBpZDogJzEnLCBuYW1lOiAnQScsIHR5cGU6ICdjdXN0b20nLCBlbnRpdHk6ICdnbG9iYWwnLCBjcmVhdGVkX2F0OiAnaW52YWxpZCcgfSBhcyBBZ2VudCxcbiAgICAgICAgbGFiZWxzLFxuICAgICAgICBub3dcbiAgICAgIClcbiAgICApLnRvQmUoJycpXG4gICAgZXhwZWN0KFxuICAgICAgZ2V0QWdlbnRDcmVhdGVkQXRMYWJlbChcbiAgICAgICAgeyBpZDogJzEnLCBuYW1lOiAnQScsIHR5cGU6ICdjdXN0b20nLCBlbnRpdHk6ICdnbG9iYWwnLCBjcmVhdGVkX2F0OiAnMjAyNi0wOS0yNFQxMDowMDowMC4wMDBaJyB9IGFzIEFnZW50LFxuICAgICAgICBsYWJlbHMsXG4gICAgICAgIG5vd1xuICAgICAgKVxuICAgICkudG9CZSgnSG95JylcbiAgICBleHBlY3QoXG4gICAgICBnZXRBZ2VudENyZWF0ZWRBdExhYmVsKFxuICAgICAgICB7IGlkOiAnMScsIG5hbWU6ICdBJywgdHlwZTogJ2N1c3RvbScsIGVudGl0eTogJ2dsb2JhbCcsIGNyZWF0ZWRfYXQ6ICcyMDI2LTA5LTIzVDEwOjAwOjAwLjAwMFonIH0gYXMgQWdlbnQsXG4gICAgICAgIGxhYmVscyxcbiAgICAgICAgbm93XG4gICAgICApXG4gICAgKS50b0JlKCdBeWVyJylcbiAgICBleHBlY3QoXG4gICAgICBnZXRBZ2VudENyZWF0ZWRBdExhYmVsKFxuICAgICAgICB7IGlkOiAnMScsIG5hbWU6ICdBJywgdHlwZTogJ2N1c3RvbScsIGVudGl0eTogJ2dsb2JhbCcsIGNyZWF0ZWRfYXQ6ICcyMDI2LTA5LTIwVDEwOjAwOjAwLjAwMFonIH0gYXMgQWdlbnQsXG4gICAgICAgIGxhYmVscyxcbiAgICAgICAgbm93XG4gICAgICApXG4gICAgKS50b0JlKCc0IGTDrWFzJylcbiAgfSlcblxuICBpdCgnc2hvdWxkTG9hZE1vcmVBZ2VudHNPblNjcm9sbCByZXNwZWN0cyBsb2FkaW5nIGZsYWdzIGFuZCB0aHJlc2hvbGQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgc2hvdWxkTG9hZE1vcmVBZ2VudHNPblNjcm9sbCh7XG4gICAgICAgIHNjcm9sbFRvcDogNTAwLFxuICAgICAgICBjbGllbnRIZWlnaHQ6IDIwMCxcbiAgICAgICAgc2Nyb2xsSGVpZ2h0OiA3MjAsXG4gICAgICAgIGhhc01vcmVBZ2VudHM6IHRydWUsXG4gICAgICAgIGxvYWRpbmdNb3JlQWdlbnRzOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgKS50b0JlKHRydWUpXG5cbiAgICBleHBlY3QoXG4gICAgICBzaG91bGRMb2FkTW9yZUFnZW50c09uU2Nyb2xsKHtcbiAgICAgICAgc2Nyb2xsVG9wOiAwLFxuICAgICAgICBjbGllbnRIZWlnaHQ6IDIwMCxcbiAgICAgICAgc2Nyb2xsSGVpZ2h0OiA3MjAsXG4gICAgICAgIGhhc01vcmVBZ2VudHM6IGZhbHNlLFxuICAgICAgICBsb2FkaW5nTW9yZUFnZW50czogZmFsc2UsXG4gICAgICB9KVxuICAgICkudG9CZShmYWxzZSlcbiAgfSlcblxuICBpdCgnc2hvdWxkQXV0b0xvYWRNb3JlQWdlbnRzIHRyaWdnZXJzIHdoZW4gY29udGVudCBkb2VzIG5vdCBmaWxsIHRoZSBjb250YWluZXInLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgc2hvdWxkQXV0b0xvYWRNb3JlQWdlbnRzKHtcbiAgICAgICAgc2Nyb2xsSGVpZ2h0OiAxMDAsXG4gICAgICAgIGNsaWVudEhlaWdodDogMjAwLFxuICAgICAgICBoYXNNb3JlQWdlbnRzOiB0cnVlLFxuICAgICAgICBsb2FkaW5nTW9yZUFnZW50czogZmFsc2UsXG4gICAgICB9KVxuICAgICkudG9CZSh0cnVlKVxuICB9KVxuXG4gIGl0KCdidWlsZEFnZW50RGVsZXRlTW9kYWxDaGF0IGFuZCBlbXB0eS1zdGF0ZSBoZWxwZXJzJywgKCkgPT4ge1xuICAgIGV4cGVjdChidWlsZEFnZW50RGVsZXRlTW9kYWxDaGF0KG51bGwpKS50b0JlTnVsbCgpXG4gICAgZXhwZWN0KGJ1aWxkQWdlbnREZWxldGVNb2RhbENoYXQoeyBpZDogJ2ExJywgbmFtZTogJ0JvdCcsIHR5cGU6ICdjdXN0b20nLCBlbnRpdHk6ICdnbG9iYWwnIH0pKS50b0VxdWFsKHtcbiAgICAgIHRpdGxlOiAnQm90JyxcbiAgICAgIGlkOiAnYTEnLFxuICAgIH0pXG4gICAgZXhwZWN0KHNob3VsZERlYm91bmNlQWdlbnRTZWFyY2goJycpKS50b0JlKHRydWUpXG4gICAgZXhwZWN0KHNob3VsZERlYm91bmNlQWdlbnRTZWFyY2goJ2FiJykpLnRvQmUoZmFsc2UpXG4gICAgZXhwZWN0KHNob3VsZERlYm91bmNlQWdlbnRTZWFyY2goJ2FiYycpKS50b0JlKHRydWUpXG4gICAgZXhwZWN0KHNob3VsZFVzZU1haWFrZXJFbXB0eVN0YXRlQWN0aW9uKHRydWUsIHVuZGVmaW5lZCkpLnRvQmUoZmFsc2UpXG4gICAgZXhwZWN0KHNob3VsZFVzZU1haWFrZXJFbXB0eVN0YXRlQWN0aW9uKHRydWUsICgpID0+IHt9KSkudG9CZSh0cnVlKVxuICB9KVxufSlcbiJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FDRUEseUJBQXlCLEVBQ3pCQyxzQkFBc0IsRUFDdEJDLHVCQUF1QixFQUN2QkMsd0JBQXdCLEVBQ3hCQyx5QkFBeUIsRUFDekJDLDRCQUE0QixFQUM1QkMsZ0NBQWdDLFFBQzNCLDBCQUEwQjtBQUVqQ0MsUUFBUSxDQUFDLHdCQUF3QixFQUFFLFlBQU07RUFDdkNDLEVBQUUsQ0FBQywwREFBMEQsRUFBRSxZQUFNO0lBQ25FQyxNQUFNLENBQUNQLHVCQUF1QixDQUFDLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ1EsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN2RUQsTUFBTSxDQUFDUCx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDUSxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQ2hELENBQUMsQ0FBQztFQUVGRixFQUFFLENBQUMsK0NBQStDLEVBQUUsWUFBTTtJQUN4RCxJQUFNRyxHQUFHLEdBQUdDLElBQUksQ0FBQ0MsS0FBSyxDQUFDLDBCQUEwQixDQUFDO0lBQ2xELElBQU1DLE1BQU0sR0FBRztNQUNiQyxLQUFLLEVBQUUsS0FBSztNQUNaQyxTQUFTLEVBQUUsTUFBTTtNQUNqQkMsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUdDLElBQVk7UUFBQSxVQUFBQyxNQUFBLENBQVFELElBQUk7TUFBQTtJQUNwQyxDQUFDO0lBRURULE1BQU0sQ0FBQ1Isc0JBQXNCLENBQUM7TUFBRW1CLEVBQUUs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
@@ -20,6 +20,7 @@ import { useToggleFavorite } from '../../../hooks';
20
20
  import { EVENTS, useEvent } from '../../../hooks/useEvent';
21
21
  import { SCMABody, SCMACardBody, SCMACardButton, SCMACardFooter, SCMACardHeader, SCMACardTopRow, SCMACardIntroText, SCMACardMenu, SCMACardMenuItem, SCMACardMenuItems, SCMAFavoriteButton, SCMAFavoriteStarWrap, SCMACardFooterDate, SCMACardTitleEmoji, SCMACardTitleName, SCMACardsOuter, SCMACardsRow, SCMAEmptyStateRoot, SCMAEmptyStateColumn, SCMAEmptyStateTitleBlock, SCMAEmptyStateTitle, SCMAEmptyStateSubtitle, SCMAEmptyStateButton, SCMAKebabButton, SCMALoadMoreWrapper, SCMALogoContainer, SCMAMyAgentsContainer, SCMATitle, SCMATitleInner, SCMATitleWrap, SCMACardSkeletonItem, SCMASearchWrapper, SCMASearchInput, SCMASearchHint, SCMASearchNoResults, SCMASearchNoResultsTitle, SCMASearchNoResultsSubtitle } from './ChatAIMyAgents.styles';
22
22
  import { MAIAIsologo } from '../../atoms/icons';
23
+ import { buildAgentDeleteModalChat, getAgentCreatedAtLabel, normalizeAgentIntroText, shouldAutoLoadMoreAgents, shouldDebounceAgentSearch, shouldLoadMoreAgentsOnScroll, shouldUseMaiakerEmptyStateAction } from './ChatAIMyAgents.helpers';
23
24
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
24
25
  var AgentSearchInput = /*#__PURE__*/React.memo(function (_ref) {
25
26
  var onSearch = _ref.onSearch,
@@ -36,7 +37,7 @@ var AgentSearchInput = /*#__PURE__*/React.memo(function (_ref) {
36
37
  setValue(val);
37
38
  if (debounceRef.current) clearTimeout(debounceRef.current);
38
39
  debounceRef.current = setTimeout(function () {
39
- if (val === '' || val.length >= 3) onSearch(val);
40
+ if (shouldDebounceAgentSearch(val)) onSearch(val);
40
41
  }, 350);
41
42
  }, [onSearch]);
42
43
  useEffect(function () {
@@ -128,24 +129,18 @@ export var ChatAIMyAgents = function ChatAIMyAgents(_ref2) {
128
129
  }));
129
130
  }, [eventAmplitude]);
130
131
  var handleEmptyStatePrimaryAction = useCallback(function () {
131
- var useMarketplace = !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS && typeof onGoToMaiaker === 'function';
132
- if (useMarketplace) {
133
- onGoToMaiaker();
132
+ if (shouldUseMaiakerEmptyStateAction(!!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS, onGoToMaiaker)) {
133
+ onGoToMaiaker === null || onGoToMaiaker === void 0 || onGoToMaiaker();
134
134
  return;
135
135
  }
136
136
  openCreateAgentModal();
137
137
  }, [onGoToMaiaker, openCreateAgentModal]);
138
138
  var handleLoadMore = function handleLoadMore() {
139
- if (!onLoadMoreAgents || !hasMoreAgents || loadingMoreAgents) {
140
- return;
141
- }
139
+ if (!onLoadMoreAgents) return;
142
140
  onLoadMoreAgents();
143
141
  };
144
142
  var deleteModalChat = useMemo(function () {
145
- return agentToDelete ? {
146
- title: agentToDelete.name,
147
- id: agentToDelete.id
148
- } : null;
143
+ return buildAgentDeleteModalChat(agentToDelete);
149
144
  }, [agentToDelete]);
150
145
  var handleUseAgent = function handleUseAgent(agent) {
151
146
  setProject(null);
@@ -154,23 +149,16 @@ export var ChatAIMyAgents = function ChatAIMyAgents(_ref2) {
154
149
  selectAgent(agent);
155
150
  onBack();
156
151
  };
157
- var normalizeText = function normalizeText(value) {
158
- if (Array.isArray(value)) return value[0] || '';
159
- return value || '';
160
- };
161
152
  var getCreatedAtLabel = function getCreatedAtLabel(agent) {
162
- var createdAt = agent.created_at;
163
- if (!createdAt) return '';
164
- var createdAtDate = new Date(createdAt);
165
- if (Number.isNaN(createdAtDate.getTime())) return '';
166
- var diffMs = Date.now() - createdAtDate.getTime();
167
- var dayMs = 1000 * 60 * 60 * 24;
168
- var days = Math.max(0, Math.floor(diffMs / dayMs));
169
- if (days === 0) return t('marketplace.myAgentsToday');
170
- if (days === 1) return t('marketplace.myAgentsOneDayAgo');
171
- return t('marketplace.myAgentsDaysAgo', {
172
- days: days
173
- });
153
+ return getAgentCreatedAtLabel(agent, {
154
+ today: t('marketplace.myAgentsToday'),
155
+ oneDayAgo: t('marketplace.myAgentsOneDayAgo'),
156
+ daysAgo: function daysAgo(days) {
157
+ return t('marketplace.myAgentsDaysAgo', {
158
+ days: days
159
+ });
160
+ }
161
+ }, Date.now());
174
162
  };
175
163
  var handleOpenEditAgent = function handleOpenEditAgent(agent) {
176
164
  document.dispatchEvent(new CustomEvent('abm-agent-modal-set-values', {
@@ -248,12 +236,16 @@ export var ChatAIMyAgents = function ChatAIMyAgents(_ref2) {
248
236
  return undefined;
249
237
  }
250
238
  var onScroll = function onScroll() {
251
- if (!hasMoreAgents || loadingMoreAgents) return;
252
239
  var scrollTop = container.scrollTop,
253
240
  clientHeight = container.clientHeight,
254
241
  scrollHeight = container.scrollHeight;
255
- var nearBottom = scrollTop + clientHeight >= scrollHeight - 40;
256
- if (nearBottom) {
242
+ if (shouldLoadMoreAgentsOnScroll({
243
+ scrollTop: scrollTop,
244
+ clientHeight: clientHeight,
245
+ scrollHeight: scrollHeight,
246
+ hasMoreAgents: hasMoreAgents,
247
+ loadingMoreAgents: loadingMoreAgents
248
+ })) {
257
249
  handleLoadMore();
258
250
  }
259
251
  };
@@ -267,7 +259,12 @@ export var ChatAIMyAgents = function ChatAIMyAgents(_ref2) {
267
259
  if (!container || !hasMoreAgents || loadingMoreAgents) {
268
260
  return undefined;
269
261
  }
270
- if (container.scrollHeight <= container.clientHeight + 1) {
262
+ if (shouldAutoLoadMoreAgents({
263
+ scrollHeight: container.scrollHeight,
264
+ clientHeight: container.clientHeight,
265
+ hasMoreAgents: hasMoreAgents,
266
+ loadingMoreAgents: loadingMoreAgents
267
+ })) {
271
268
  handleLoadMore();
272
269
  }
273
270
  return undefined;
@@ -361,7 +358,7 @@ export var ChatAIMyAgents = function ChatAIMyAgents(_ref2) {
361
358
  })]
362
359
  }), /*#__PURE__*/_jsxs(SCMACardBody, {
363
360
  children: [/*#__PURE__*/_jsx(SCMACardIntroText, {
364
- children: normalizeText(agent.introduction)
361
+ children: normalizeAgentIntroText(agent.introduction)
365
362
  }), /*#__PURE__*/_jsxs(SCMACardFooter, {
366
363
  children: [/*#__PURE__*/_jsx(SCMACardFooterDate, {
367
364
  children: getCreatedAtLabel(agent) || t('marketplace.myAgentsFallbackDate')
@@ -454,4 +451,4 @@ export var ChatAIMyAgents = function ChatAIMyAgents(_ref2) {
454
451
  }) : null]
455
452
  });
456
453
  };
457
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVJlZiIsInVzZVN0YXRlIiwiTWVudURvdHMiLCJTZWFyY2giLCJTdGFyIiwiVG9vbHRpcCIsInVzZVRyYW5zbGF0aW9uIiwidXNlR2xvYmFsQ29udGV4dCIsInVzZVVzZXIiLCJkZWxldGVBZ2VudCIsInVzZVNuYWNrQmFyTWFuYWdlciIsIkRlbGV0ZVF1ZXN0aW9uTW9kYWwiLCJTRUNUSU9OUyIsIkxvYWRlciIsIkZhZGUiLCJTa2VsZXRvbiIsInVzZVRvZ2dsZUZhdm9yaXRlIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJTQ01BQm9keSIsIlNDTUFDYXJkQm9keSIsIlNDTUFDYXJkQnV0dG9uIiwiU0NNQUNhcmRGb290ZXIiLCJTQ01BQ2FyZEhlYWRlciIsIlNDTUFDYXJkVG9wUm93IiwiU0NNQUNhcmRJbnRyb1RleHQiLCJTQ01BQ2FyZE1lbnUiLCJTQ01BQ2FyZE1lbnVJdGVtIiwiU0NNQUNhcmRNZW51SXRlbXMiLCJTQ01BRmF2b3JpdGVCdXR0b24iLCJTQ01BRmF2b3JpdGVTdGFyV3JhcCIsIlNDTUFDYXJkRm9vdGVyRGF0ZSIsIlNDTUFDYXJkVGl0bGVFbW9qaSIsIlNDTUFDYXJkVGl0bGVOYW1lIiwiU0NNQUNhcmRzT3V0ZXIiLCJTQ01BQ2FyZHNSb3ciLCJTQ01BRW1wdHlTdGF0ZVJvb3QiLCJTQ01BRW1wdHlTdGF0ZUNvbHVtbiIsIlNDTUFFbXB0eVN0YXRlVGl0bGVCbG9jayIsIlNDTUFFbXB0eVN0YXRlVGl0bGUiLCJTQ01BRW1wdHlTdGF0ZVN1YnRpdGxlIiwiU0NNQUVtcHR5U3RhdGVCdXR0b24iLCJTQ01BS2ViYWJCdXR0b24iLCJTQ01BTG9hZE1vcmVXcmFwcGVyIiwiU0NNQUxvZ29Db250YWluZXIiLCJTQ01BTXlBZ2VudHNDb250YWluZXIiLCJTQ01BVGl0bGUiLCJTQ01BVGl0bGVJbm5lciIsIlNDTUFUaXRsZVdyYXAiLCJTQ01BQ2FyZFNrZWxldG9uSXRlbSIsIlNDTUFTZWFyY2hXcmFwcGVyIiwiU0NNQVNlYXJjaElucHV0IiwiU0NNQVNlYXJjaEhpbnQiLCJTQ01BU2VhcmNoTm9SZXN1bHRzIiwiU0NNQVNlYXJjaE5vUmVzdWx0c1RpdGxlIiwiU0NNQVNlYXJjaE5vUmVzdWx0c1N1YnRpdGxlIiwiTUFJQUlzb2xvZ28iLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiQWdlbnRTZWFyY2hJbnB1dCIsIm1lbW8iLCJfcmVmIiwib25TZWFyY2giLCJwbGFjZWhvbGRlciIsImhpbnQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJ2YWx1ZSIsInNldFZhbHVlIiwiZGVib3VuY2VSZWYiLCJzaG93SGludCIsImxlbmd0aCIsImhhbmRsZUNoYW5nZSIsImUiLCJ2YWwiLCJ0YXJnZXQiLCJjdXJyZW50IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImNoaWxkcmVuIiwid2lkdGgiLCJoZWlnaHQiLCJjb2xvciIsInR5cGUiLCJvbkNoYW5nZSIsIkNoYXRBSU15QWdlbnRzIiwiX3JlZjIiLCJfdXNlciRwZXJtaXNzaW9ucyIsIm9uQmFjayIsImFnZW50cyIsIm9uRGVsZXRlQWdlbnQiLCJvbkZhdm9yaXRlQWdlbnRVcGRhdGUiLCJfcmVmMiRoYXNNb3JlQWdlbnRzIiwiaGFzTW9yZUFnZW50cyIsIl9yZWYyJGxvYWRpbmdNb3JlQWdlbiIsImxvYWRpbmdNb3JlQWdlbnRzIiwib25Mb2FkTW9yZUFnZW50cyIsIm9uR29Ub01haWFrZXIiLCJvblNlYXJjaEFnZW50cyIsIl9yZWYyJHNlYXJjaExvYWRpbmdBZyIsInNlYXJjaExvYWRpbmdBZ2VudHMiLCJfdXNlVHJhbnNsYXRpb24iLCJjaGF0QUkiLCJhYm1BZ2VudCIsInQiLCJ1c2VyIiwiX3VzZUdsb2JhbENvbnRleHQiLCJzZWxlY3RBZ2VudCIsInNldFByb2plY3QiLCJzZXRDbGllbnQiLCJzZXRUYXNrIiwiX3VzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyU3VjY2VzcyIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJjdXN0b21BZ2VudHMiLCJmaWx0ZXIiLCJhZ2VudCIsImlzX2RlbGV0ZWQiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsIm1lbnVPcGVuRm9yQWdlbnRJZCIsInNldE1lbnVPcGVuRm9yQWdlbnRJZCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiYWdlbnRUb0RlbGV0ZSIsInNldEFnZW50VG9EZWxldGUiLCJ1c2VyUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsImFpX2FnZW50cyIsImNhbkNyZWF0ZUFnZW50IiwiY3JlYXRlIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsImNhbkVkaXQiLCJlZGl0IiwiY2FuRGVsZXRlIiwiY2FuU2hvd01lbnUiLCJfdXNlVG9nZ2xlRmF2b3JpdGUiLCJ0b2dnbGVGYXZvcml0ZSIsImV2ZW50QW1wbGl0dWRlIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJpc1NlYXJjaEFjdGl2ZSIsInNldElzU2VhcmNoQWN0aXZlIiwiaGFuZGxlU2VhcmNoQWdlbnRzIiwicXVlcnkiLCJvcGVuQ3JlYXRlQWdlbnRNb2RhbCIsIm9wZW5Nb2RhbCIsIm9wdGlvbiIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiYWdlbnRWYWx1ZXMiLCJ2YWx1ZXMiLCJpc0VkaXRpbmciLCJpc09wZW4iLCJoYW5kbGVFbXB0eVN0YXRlUHJpbWFyeUFjdGlvbiIsInVzZU1hcmtldHBsYWNlIiwiaGFuZGxlTG9hZE1vcmUiLCJkZWxldGVNb2RhbENoYXQiLCJ0aXRsZSIsIm5hbWUiLCJpZCIsImhhbmRsZVVzZUFnZW50Iiwibm9ybWFsaXplVGV4dCIsIkFycmF5IiwiaXNBcnJheSIsImdldENyZWF0ZWRBdExhYmVsIiwiY3JlYXRlZEF0IiwiY3JlYXRlZF9hdCIsImNyZWF0ZWRBdERhdGUiLCJEYXRlIiwiTnVtYmVyIiwiaXNOYU4iLCJnZXRUaW1lIiwiZGlmZk1zIiwibm93IiwiZGF5TXMiLCJkYXlzIiwiTWF0aCIsIm1heCIsImZsb29yIiwiaGFuZGxlT3BlbkVkaXRBZ2VudCIsImtub3dsZWRnZSIsImdlbmVyYWwiLCJoYW5kbGVUb2dnbGVGYXZvcml0ZSIsImV2ZW50IiwiaXNGYXZvcml0ZSIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwidXBkYXRlZEFnZW50IiwidW5kZWZpbmVkIiwiaGFuZGxlQ29uZmlybURlbGV0ZSIsIl9yZWYzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJjaGF0IiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIm5zIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYW5kbGVDbGlja091dHNpZGUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNvbnRhaW5lciIsImdldEVsZW1lbnRCeUlkIiwib25TY3JvbGwiLCJzY3JvbGxUb3AiLCJjbGllbnRIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCJuZWFyQm90dG9tIiwiJGhhc0FnZW50cyIsIiRjYW5DcmVhdGVBZ2VudCIsImZyb20iLCJtYXAiLCJfIiwiaSIsInZhcmlhbnQiLCJpbmRleCIsIl9hZ2VudCRlbW9qaSIsIiRpbmRleCIsIm9uQ2xpY2siLCJlbW9qaSIsInRyaW0iLCJpbnRyb2R1Y3Rpb24iLCJpc19mYXZvcml0ZSIsIiRhbHdheXNWaXNpYmxlIiwiZmlsbCIsImNsYXNzTmFtZSIsInNpemUiLCJvbkNsb3NlIiwiaGFuZGxlcnMiLCJoYW5kbGVDb25maXJtQWN0aW9uIiwiYWN0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU15QWdlbnRzL0NoYXRBSU15QWdlbnRzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgTWVudURvdHMgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9NZW51RG90cydcbmltcG9ydCB7IFNlYXJjaCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1NlYXJjaCdcbmltcG9ydCB7IFN0YXIgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9TdGFyJ1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBkZWxldGVBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2RlbGV0ZUFnZW50J1xuaW1wb3J0IHsgdXNlU25hY2tCYXJNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU25hY2tCYXJNYW5hZ2VyL3VzZVNuYWNrQmFyTWFuYWdlcidcbmltcG9ydCB7IERlbGV0ZVF1ZXN0aW9uTW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvRGVsZXRlUXVlc3Rpb25Nb2RhbC9EZWxldGVRdWVzdGlvbk1vZGFsJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgRmFkZSB9IGZyb20gJy4uLy4uL2F0b21zL0ZhZGUnXG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gJy4uLy4uL2F0b21zL1NrZWxldG9uL1NrZWxldG9uJ1xuaW1wb3J0IHsgdXNlVG9nZ2xlRmF2b3JpdGUgfSBmcm9tICcuLi8uLi8uLi9ob29rcydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7XG4gIFNDTUFCb2R5LFxuICBTQ01BQ2FyZEJvZHksXG4gIFNDTUFDYXJkQnV0dG9uLFxuICBTQ01BQ2FyZEZvb3RlcixcbiAgU0NNQUNhcmRIZWFkZXIsXG4gIFNDTUFDYXJkVG9wUm93LFxuICBTQ01BQ2FyZEludHJvVGV4dCxcbiAgU0NNQUNhcmRNZW51LFxuICBTQ01BQ2FyZE1lbnVJdGVtLFxuICBTQ01BQ2FyZE1lbnVJdGVtcyxcbiAgU0NNQUZhdm9yaXRlQnV0dG9uLFxuICBTQ01BRmF2b3JpdGVTdGFyV3JhcCxcbiAgU0NNQUNhcmRGb290ZXJEYXRlLFxuICBTQ01BQ2FyZFRpdGxlRW1vamksXG4gIFNDTUFDYXJkVGl0bGVOYW1lLFxuICBTQ01BQ2FyZHNPdXRlcixcbiAgU0NNQUNhcmRzUm93LFxuICBTQ01BRW1wdHlTdGF0ZVJvb3QsXG4gIFNDTUFFbXB0eVN0YXRlQ29sdW1uLFxuICBTQ01BRW1wdHlTdGF0ZVRpdGxlQmxvY2ssXG4gIFNDTUFFbXB0eVN0YXRlVGl0bGUsXG4gIFNDTUFFbXB0eVN0YXRlU3VidGl0bGUsXG4gIFNDTUFFbXB0eVN0YXRlQnV0dG9uLFxuICBTQ01BS2ViYWJCdXR0b24sXG4gIFNDTUFMb2FkTW9yZVdyYXBwZXIsXG4gIFNDTUFMb2dvQ29udGFpbmVyLFxuICBTQ01BTXlBZ2VudHNDb250YWluZXIsXG4gIFNDTUFUaXRsZSxcbiAgU0NNQVRpdGxlSW5uZXIsXG4gIFNDTUFUaXRsZVdyYXAsXG4gIFNDTUFDYXJkU2tlbGV0b25JdGVtLFxuICBTQ01BU2VhcmNoV3JhcHBlcixcbiAgU0NNQVNlYXJjaElucHV0LFxuICBTQ01BU2VhcmNoSGludCxcbiAgU0NNQVNlYXJjaE5vUmVzdWx0cyxcbiAgU0NNQVNlYXJjaE5vUmVzdWx0c1RpdGxlLFxuICBTQ01BU2VhcmNoTm9SZXN1bHRzU3VidGl0bGUsXG59IGZyb20gJy4vQ2hhdEFJTXlBZ2VudHMuc3R5bGVzJ1xuaW1wb3J0IHsgTUFJQUlzb2xvZ28gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcblxuY29uc3QgQWdlbnRTZWFyY2hJbnB1dCA9IFJlYWN0Lm1lbW8oXG4gICh7IG9uU2VhcmNoLCBwbGFjZWhvbGRlciwgaGludCB9OiB7IG9uU2VhcmNoOiAocTogc3RyaW5nKSA9PiB2b2lkOyBwbGFjZWhvbGRlcjogc3RyaW5nOyBoaW50OiBzdHJpbmcgfSkgPT4ge1xuICAgIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGUoJycpXG4gICAgY29uc3QgZGVib3VuY2VSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsPihudWxsKVxuICAgIGNvbnN0IHNob3dIaW50ID0gdmFsdWUubGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPCAzXG5cbiAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgIChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICBjb25zdCB7IHZhbHVlOiB2YWwgfSA9IGUudGFyZ2V0XG4gICAgICAgIHNldFZhbHVlKHZhbClcbiAgICAgICAgaWYgKGRlYm91bmNlUmVmLmN1cnJlbnQpIGNsZWFyVGltZW91dChkZWJvdW5jZVJlZi5jdXJyZW50KVxuICAgICAgICBkZWJvdW5jZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHZhbCA9PT0gJycgfHwgdmFsLmxlbmd0aCA+PSAzKSBvblNlYXJjaCh2YWwpXG4gICAgICAgIH0sIDM1MClcbiAgICAgIH0sXG4gICAgICBbb25TZWFyY2hdXG4gICAgKVxuXG4gICAgdXNlRWZmZWN0KFxuICAgICAgKCkgPT4gKCkgPT4ge1xuICAgICAgICBpZiAoZGVib3VuY2VSZWYuY3VycmVudCkgY2xlYXJUaW1lb3V0KGRlYm91bmNlUmVmLmN1cnJlbnQpXG4gICAgICB9LFxuICAgICAgW11cbiAgICApXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNDTUFTZWFyY2hXcmFwcGVyPlxuICAgICAgICA8U2VhcmNoIHdpZHRoPXsxNn0gaGVpZ2h0PXsxNn0gY29sb3I9XCIjOTk5XCIgLz5cbiAgICAgICAgPFNDTUFTZWFyY2hJbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPXt2YWx1ZX0gb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX0gcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfSAvPlxuICAgICAgICB7c2hvd0hpbnQgPyA8U0NNQVNlYXJjaEhpbnQ+e2hpbnR9PC9TQ01BU2VhcmNoSGludD4gOiBudWxsfVxuICAgICAgPC9TQ01BU2VhcmNoV3JhcHBlcj5cbiAgICApXG4gIH1cbilcblxudHlwZSBDaGF0QUlNeUFnZW50c1Byb3BzID0ge1xuICBvbkJhY2s6ICgpID0+IHZvaWRcbiAgYWdlbnRzOiBBZ2VudFtdXG4gIG9uRGVsZXRlQWdlbnQ/OiAoYWdlbnRJZDogc3RyaW5nKSA9PiB2b2lkXG4gIG9uRmF2b3JpdGVBZ2VudFVwZGF0ZT86IChhZ2VudDogQWdlbnQpID0+IHZvaWRcbiAgaGFzTW9yZUFnZW50cz86IGJvb2xlYW5cbiAgbG9hZGluZ01vcmVBZ2VudHM/OiBib29sZWFuXG4gIG9uTG9hZE1vcmVBZ2VudHM/OiAoKSA9PiB2b2lkXG4gIG9uR29Ub01haWFrZXI/OiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxuICBvblNlYXJjaEFnZW50cz86IChxdWVyeTogc3RyaW5nKSA9PiB2b2lkXG4gIHNlYXJjaExvYWRpbmdBZ2VudHM/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNeUFnZW50cyA9ICh7XG4gIG9uQmFjayxcbiAgYWdlbnRzLFxuICBvbkRlbGV0ZUFnZW50LFxuICBvbkZhdm9yaXRlQWdlbnRVcGRhdGUsXG4gIGhhc01vcmVBZ2VudHMgPSBmYWxzZSxcbiAgbG9hZGluZ01vcmVBZ2VudHMgPSBmYWxzZSxcbiAgb25Mb2FkTW9yZUFnZW50cyxcbiAgb25Hb1RvTWFpYWtlcixcbiAgb25TZWFyY2hBZ2VudHMsXG4gIHNlYXJjaExvYWRpbmdBZ2VudHMgPSBmYWxzZSxcbn06IENoYXRBSU15QWdlbnRzUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuY2hhdEFJLCBTRUNUSU9OUy5hYm1BZ2VudF0pXG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyBzZWxlY3RBZ2VudCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRUYXNrIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgeyBoYW5kbGVTbmFja2JhclN1Y2Nlc3MsIGhhbmRsZVNuYWNrYmFyRXJyb3IgfSA9IHVzZVNuYWNrQmFyTWFuYWdlcigpXG4gIGNvbnN0IGN1c3RvbUFnZW50cyA9IGFnZW50cy5maWx0ZXIoYWdlbnQgPT4gYWdlbnQudHlwZSA9PT0gJ2N1c3RvbScgJiYgIWFnZW50LmlzX2RlbGV0ZWQpXG4gIGNvbnN0IFttZW51T3BlbkZvckFnZW50SWQsIHNldE1lbnVPcGVuRm9yQWdlbnRJZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbYWdlbnRUb0RlbGV0ZSwgc2V0QWdlbnRUb0RlbGV0ZV0gPSB1c2VTdGF0ZTxBZ2VudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHNcbiAgY29uc3QgY2FuQ3JlYXRlQWdlbnQgPSAhIXVzZXJQZXJtaXNzaW9ucz8uY3JlYXRlICYmICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcbiAgY29uc3QgY2FuRWRpdCA9ICEhdXNlclBlcm1pc3Npb25zPy5lZGl0ICYmICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcbiAgY29uc3QgY2FuRGVsZXRlID0gISF1c2VyUGVybWlzc2lvbnM/LmRlbGV0ZSAmJiAhIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTXG4gIGNvbnN0IGNhblNob3dNZW51ID0gY2FuRWRpdCB8fCBjYW5EZWxldGVcbiAgY29uc3QgeyB0b2dnbGVGYXZvcml0ZSB9ID0gdXNlVG9nZ2xlRmF2b3JpdGUoKVxuICBjb25zdCBldmVudEFtcGxpdHVkZSA9IHVzZUV2ZW50KClcbiAgY29uc3QgW2lzU2VhcmNoQWN0aXZlLCBzZXRJc1NlYXJjaEFjdGl2ZV0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBoYW5kbGVTZWFyY2hBZ2VudHMgPSB1c2VDYWxsYmFjayhcbiAgICAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgc2V0SXNTZWFyY2hBY3RpdmUocXVlcnkgIT09ICcnKVxuICAgICAgb25TZWFyY2hBZ2VudHM/LihxdWVyeSlcbiAgICB9LFxuICAgIFtvblNlYXJjaEFnZW50c11cbiAgKVxuXG4gIGNvbnN0IG9wZW5DcmVhdGVBZ2VudE1vZGFsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5vcGVuTW9kYWwsIHsgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyB9KVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywge1xuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBhZ2VudFZhbHVlczoge1xuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIGlzRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIClcbiAgfSwgW2V2ZW50QW1wbGl0dWRlXSlcblxuICBjb25zdCBoYW5kbGVFbXB0eVN0YXRlUHJpbWFyeUFjdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCB1c2VNYXJrZXRwbGFjZSA9ICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgdHlwZW9mIG9uR29Ub01haWFrZXIgPT09ICdmdW5jdGlvbidcbiAgICBpZiAodXNlTWFya2V0cGxhY2UpIHtcbiAgICAgIG9uR29Ub01haWFrZXIoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIG9wZW5DcmVhdGVBZ2VudE1vZGFsKClcbiAgfSwgW29uR29Ub01haWFrZXIsIG9wZW5DcmVhdGVBZ2VudE1vZGFsXSlcblxuICBjb25zdCBoYW5kbGVMb2FkTW9yZSA9ICgpID0+IHtcbiAgICBpZiAoIW9uTG9hZE1vcmVBZ2VudHMgfHwgIWhhc01vcmVBZ2VudHMgfHwgbG9hZGluZ01vcmVBZ2VudHMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBvbkxvYWRNb3JlQWdlbnRzKClcbiAgfVxuXG4gIGNvbnN0IGRlbGV0ZU1vZGFsQ2hhdCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKGFnZW50VG9EZWxldGUgPyB7IHRpdGxlOiBhZ2VudFRvRGVsZXRlLm5hbWUsIGlkOiBhZ2VudFRvRGVsZXRlLmlkIH0gOiBudWxsKSxcbiAgICBbYWdlbnRUb0RlbGV0ZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVVzZUFnZW50ID0gKGFnZW50OiBBZ2VudCkgPT4ge1xuICAgIHNldFByb2plY3QobnVsbClcbiAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIHNldFRhc2sobnVsbClcbiAgICBzZWxlY3RBZ2VudChhZ2VudClcbiAgICBvbkJhY2soKVxuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplVGV4dCA9ICh2YWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlWzBdIHx8ICcnXG4gICAgcmV0dXJuIHZhbHVlIHx8ICcnXG4gIH1cblxuICBjb25zdCBnZXRDcmVhdGVkQXRMYWJlbCA9IChhZ2VudDogQWdlbnQpID0+IHtcbiAgICBjb25zdCBjcmVhdGVkQXQgPSAoYWdlbnQgYXMgQWdlbnQgJiB7IGNyZWF0ZWRfYXQ/OiBzdHJpbmcgfSkuY3JlYXRlZF9hdFxuICAgIGlmICghY3JlYXRlZEF0KSByZXR1cm4gJydcblxuICAgIGNvbnN0IGNyZWF0ZWRBdERhdGUgPSBuZXcgRGF0ZShjcmVhdGVkQXQpXG4gICAgaWYgKE51bWJlci5pc05hTihjcmVhdGVkQXREYXRlLmdldFRpbWUoKSkpIHJldHVybiAnJ1xuXG4gICAgY29uc3QgZGlmZk1zID0gRGF0ZS5ub3coKSAtIGNyZWF0ZWRBdERhdGUuZ2V0VGltZSgpXG4gICAgY29uc3QgZGF5TXMgPSAxMDAwICogNjAgKiA2MCAqIDI0XG4gICAgY29uc3QgZGF5cyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoZGlmZk1zIC8gZGF5TXMpKVxuXG4gICAgaWYgKGRheXMgPT09IDApIHJldHVybiB0KCdtYXJrZXRwbGFjZS5teUFnZW50c1RvZGF5JylcbiAgICBpZiAoZGF5cyA9PT0gMSkgcmV0dXJuIHQoJ21hcmtldHBsYWNlLm15QWdlbnRzT25lRGF5QWdvJylcbiAgICByZXR1cm4gdCgnbWFya2V0cGxhY2UubXlBZ2VudHNEYXlzQWdvJywgeyBkYXlzIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVPcGVuRWRpdEFnZW50ID0gKGFnZW50OiBBZ2VudCkgPT4ge1xuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywge1xuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBhZ2VudFZhbHVlczoge1xuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIGlzRWRpdGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAga25vd2xlZGdlOiBhZ2VudD8ua25vd2xlZGdlIHx8IFtdLFxuICAgICAgICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogYWdlbnQubmFtZSxcbiAgICAgICAgICAgICAgICBpZDogYWdlbnQuaWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIClcbiAgICBzZXRNZW51T3BlbkZvckFnZW50SWQobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZUZhdm9yaXRlID0gKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PiwgYWdlbnQ6IEFnZW50LCBpc0Zhdm9yaXRlOiBib29sZWFuKSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICB0b2dnbGVGYXZvcml0ZShcbiAgICAgIGFnZW50LmlkLFxuICAgICAgdXBkYXRlZEFnZW50ID0+IHtcbiAgICAgICAgb25GYXZvcml0ZUFnZW50VXBkYXRlPy4odXBkYXRlZEFnZW50KVxuICAgICAgfSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGlzRmF2b3JpdGVcbiAgICApXG4gIH1cblxuICBjb25zdCBoYW5kbGVDb25maXJtRGVsZXRlID0gYXN5bmMgKGNoYXQ6IHsgaWQ6IHN0cmluZyB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZUFnZW50KGNoYXQuaWQpXG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50RGVsZXRlZCcsIHsgbnM6IFNFQ1RJT05TLmFibUFnZW50IH0pKVxuICAgICAgb25EZWxldGVBZ2VudD8uKGNoYXQuaWQpXG4gICAgICBzZXRBZ2VudFRvRGVsZXRlKG51bGwpXG4gICAgICBzZXRNZW51T3BlbkZvckFnZW50SWQobnVsbClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdlcnJvckFnZW50Q3JlYXRlZCcsIHsgbnM6IFNFQ1RJT05TLmFibUFnZW50IH0pKVxuICAgIH1cbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKCkgPT4ge1xuICAgICAgaWYgKG1lbnVPcGVuRm9yQWdlbnRJZCkge1xuICAgICAgICBzZXRNZW51T3BlbkZvckFnZW50SWQobnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgfVxuICB9LCBbbWVudU9wZW5Gb3JBZ2VudElkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteS1hZ2VudHMtc2Nyb2xsLWNvbnRhaW5lcicpXG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBvblNjcm9sbCA9ICgpID0+IHtcbiAgICAgIGlmICghaGFzTW9yZUFnZW50cyB8fCBsb2FkaW5nTW9yZUFnZW50cykgcmV0dXJuXG4gICAgICBjb25zdCB7IHNjcm9sbFRvcCwgY2xpZW50SGVpZ2h0LCBzY3JvbGxIZWlnaHQgfSA9IGNvbnRhaW5lclxuICAgICAgY29uc3QgbmVhckJvdHRvbSA9IHNjcm9sbFRvcCArIGNsaWVudEhlaWdodCA+PSBzY3JvbGxIZWlnaHQgLSA0MFxuICAgICAgaWYgKG5lYXJCb3R0b20pIHtcbiAgICAgICAgaGFuZGxlTG9hZE1vcmUoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBvblNjcm9sbClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsKVxuICAgIH1cbiAgfSwgW2hhc01vcmVBZ2VudHMsIGxvYWRpbmdNb3JlQWdlbnRzLCBvbkxvYWRNb3JlQWdlbnRzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteS1hZ2VudHMtc2Nyb2xsLWNvbnRhaW5lcicpXG4gICAgaWYgKCFjb250YWluZXIgfHwgIWhhc01vcmVBZ2VudHMgfHwgbG9hZGluZ01vcmVBZ2VudHMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpZiAoY29udGFpbmVyLnNjcm9sbEhlaWdodCA8PSBjb250YWluZXIuY2xpZW50SGVpZ2h0ICsgMSkge1xuICAgICAgaGFuZGxlTG9hZE1vcmUoKVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0sIFtjdXN0b21BZ2VudHMubGVuZ3RoLCBoYXNNb3JlQWdlbnRzLCBsb2FkaW5nTW9yZUFnZW50cywgb25Mb2FkTW9yZUFnZW50c10pXG5cbiAgcmV0dXJuIChcbiAgICA8U0NNQU15QWdlbnRzQ29udGFpbmVyIGlkPVwibXktYWdlbnRzLXNjcm9sbC1jb250YWluZXJcIiAkaGFzQWdlbnRzPXshIWN1c3RvbUFnZW50cy5sZW5ndGggfHwgaXNTZWFyY2hBY3RpdmV9PlxuICAgICAgPFNDTUFMb2dvQ29udGFpbmVyPlxuICAgICAgICA8TUFJQUlzb2xvZ28gLz5cbiAgICAgIDwvU0NNQUxvZ29Db250YWluZXI+XG5cbiAgICAgIDxTQ01BQm9keSAkY2FuQ3JlYXRlQWdlbnQ9e2NhbkNyZWF0ZUFnZW50fT5cbiAgICAgICAge2N1c3RvbUFnZW50cy5sZW5ndGggfHwgaXNTZWFyY2hBY3RpdmUgPyAoXG4gICAgICAgICAgPFNDTUFUaXRsZVdyYXA+XG4gICAgICAgICAgICA8U0NNQVRpdGxlSW5uZXI+XG4gICAgICAgICAgICAgIDxTQ01BVGl0bGU+e3QoJ21hcmtldHBsYWNlLm15QWdlbnRzUmVhZHlUaXRsZScpfTwvU0NNQVRpdGxlPlxuICAgICAgICAgICAgPC9TQ01BVGl0bGVJbm5lcj5cbiAgICAgICAgICAgIHtvblNlYXJjaEFnZW50cyA/IChcbiAgICAgICAgICAgICAgPEFnZW50U2VhcmNoSW5wdXRcbiAgICAgICAgICAgICAgICBvblNlYXJjaD17aGFuZGxlU2VhcmNoQWdlbnRzfVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdtYXJrZXRwbGFjZS5zZWFyY2hBZ2VudFBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgICAgaGludD17dCgnbWFya2V0cGxhY2Uuc2VhcmNoTWluTGVuZ3RoJyl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L1NDTUFUaXRsZVdyYXA+XG4gICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgIHtzZWFyY2hMb2FkaW5nQWdlbnRzID8gKFxuICAgICAgICAgIDxTQ01BQ2FyZHNPdXRlcj5cbiAgICAgICAgICAgIDxTQ01BQ2FyZHNSb3c+XG4gICAgICAgICAgICAgIHtBcnJheS5mcm9tKHsgbGVuZ3RoOiA2IH0pLm1hcCgoXywgaSkgPT4gKFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXlcbiAgICAgICAgICAgICAgICA8U0NNQUNhcmRTa2VsZXRvbkl0ZW0ga2V5PXtpfT5cbiAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiB2YXJpYW50PVwiY2lyY3VsYXJcIiB3aWR0aD17MTZ9IGhlaWdodD17MTZ9IC8+XG4gICAgICAgICAgICAgICAgICA8U2tlbGV0b24gdmFyaWFudD1cInRleHRcIiBoZWlnaHQ9ezE0fSAvPlxuICAgICAgICAgICAgICAgICAgPFNrZWxldG9uIHZhcmlhbnQ9XCJ0ZXh0XCIgaGVpZ2h0PXsxNH0gd2lkdGg9XCI3NSVcIiAvPlxuICAgICAgICAgICAgICAgICAgPFNrZWxldG9uIHZhcmlhbnQ9XCJ0ZXh0XCIgaGVpZ2h0PXsxMn0gLz5cbiAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiB2YXJpYW50PVwidGV4dFwiIGhlaWdodD17MTJ9IHdpZHRoPVwiODUlXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiB2YXJpYW50PVwidGV4dFwiIGhlaWdodD17MTF9IHdpZHRoPVwiNDAlXCIgLz5cbiAgICAgICAgICAgICAgICA8L1NDTUFDYXJkU2tlbGV0b25JdGVtPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvU0NNQUNhcmRzUm93PlxuICAgICAgICAgIDwvU0NNQUNhcmRzT3V0ZXI+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7IXNlYXJjaExvYWRpbmdBZ2VudHMgJiYgY3VzdG9tQWdlbnRzLmxlbmd0aCA/IChcbiAgICAgICAgICA8U0NNQUNhcmRzT3V0ZXI+XG4gICAgICAgICAgICA8U0NNQUNhcmRzUm93PlxuICAgICAgICAgICAgICB7Y3VzdG9tQWdlbnRzLm1hcCgoYWdlbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgPFNDTUFDYXJkQnV0dG9uIGtleT17YWdlbnQuaWR9ICRpbmRleD17aW5kZXh9IHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBoYW5kbGVVc2VBZ2VudChhZ2VudCl9PlxuICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICA8U0NNQUNhcmRUb3BSb3c+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkVGl0bGVFbW9qaSBhcmlhLWhpZGRlbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthZ2VudC5lbW9qaT8udHJpbSgpID8gYWdlbnQuZW1vamkgOiAnXFx1MDBhMCd9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZFRpdGxlRW1vamk+XG4gICAgICAgICAgICAgICAgICAgICAge2NhblNob3dNZW51ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFNDTUFLZWJhYkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnbWFya2V0cGxhY2UuY2FyZE1lbnVBcmlhTGFiZWwnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1lbnVPcGVuRm9yQWdlbnRJZChwcmV2ID0+IChwcmV2ID09PSBhZ2VudC5pZCA/IG51bGwgOiBhZ2VudC5pZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxNZW51RG90cyBjb2xvcj1cIiM5OTlcIiB3aWR0aD17MTV9IGhlaWdodD17MTV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NDTUFLZWJhYkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZFRvcFJvdz5cbiAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkVGl0bGVOYW1lPnthZ2VudC5uYW1lfTwvU0NNQUNhcmRUaXRsZU5hbWU+XG4gICAgICAgICAgICAgICAgICA8L1NDTUFDYXJkSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkQm9keT5cbiAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkSW50cm9UZXh0Pntub3JtYWxpemVUZXh0KGFnZW50LmludHJvZHVjdGlvbil9PC9TQ01BQ2FyZEludHJvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkRm9vdGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZEZvb3RlckRhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0Q3JlYXRlZEF0TGFiZWwoYWdlbnQpIHx8IHQoJ21hcmtldHBsYWNlLm15QWdlbnRzRmFsbGJhY2tEYXRlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZEZvb3RlckRhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2FnZW50LmlzX2Zhdm9yaXRlID8gdCgnYWdlbnRzLnJlbW92ZUZhdm9yaXRlJykgOiB0KCdhZ2VudHMuYWRkRmF2b3JpdGUnKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U0NNQUZhdm9yaXRlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXthZ2VudC5pc19mYXZvcml0ZSA/IHQoJ2FnZW50cy5yZW1vdmVGYXZvcml0ZScpIDogdCgnYWdlbnRzLmFkZEZhdm9yaXRlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICRhbHdheXNWaXNpYmxlPXshIWFnZW50LmlzX2Zhdm9yaXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtldmVudCA9PiBoYW5kbGVUb2dnbGVGYXZvcml0ZShldmVudCwgYWdlbnQsICEhYWdlbnQuaXNfZmF2b3JpdGUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U0NNQUZhdm9yaXRlU3RhcldyYXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsxNn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MTZ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17YWdlbnQuaXNfZmF2b3JpdGUgPyAnI0ZGQzYyNCcgOiAnIzk5OSd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPXthZ2VudC5pc19mYXZvcml0ZSA/ICcjRkZDNjI0JyA6ICdub25lJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2FnZW50LmlzX2Zhdm9yaXRlID8gJycgOiAnc3Rhci1mYXZvcml0ZS1pY29uJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NDTUFGYXZvcml0ZVN0YXJXcmFwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ01BRmF2b3JpdGVCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICA8L1NDTUFDYXJkRm9vdGVyPlxuICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZEJvZHk+XG4gICAgICAgICAgICAgICAgICB7bWVudU9wZW5Gb3JBZ2VudElkID09PSBhZ2VudC5pZCAmJiBjYW5TaG93TWVudSA/IChcbiAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkTWVudVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZE1lbnVJdGVtcz5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjYW5FZGl0ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U0NNQUNhcmRNZW51SXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9wZW5FZGl0QWdlbnQoYWdlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdlZGl0JywgeyBuczogU0VDVElPTlMuYWJtQWdlbnQgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NNQUNhcmRNZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAge2NhbkRlbGV0ZSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkTWVudUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZ2VudFRvRGVsZXRlKGFnZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dCgnZGVsZXRlJywgeyBuczogU0VDVElPTlMuYWJtQWdlbnQgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NNQUNhcmRNZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NNQUNhcmRNZW51SXRlbXM+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NNQUNhcmRNZW51PlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC9TQ01BQ2FyZEJ1dHRvbj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L1NDTUFDYXJkc1Jvdz5cbiAgICAgICAgICA8L1NDTUFDYXJkc091dGVyPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgeyFzZWFyY2hMb2FkaW5nQWdlbnRzICYmICFjdXN0b21BZ2VudHMubGVuZ3RoICYmIGlzU2VhcmNoQWN0aXZlID8gKFxuICAgICAgICAgIDxTQ01BU2VhcmNoTm9SZXN1bHRzPlxuICAgICAgICAgICAgPFNDTUFTZWFyY2hOb1Jlc3VsdHNUaXRsZT57dCgnbWFya2V0cGxhY2Uuc2VhcmNoTm9SZXN1bHRzJyl9PC9TQ01BU2VhcmNoTm9SZXN1bHRzVGl0bGU+XG4gICAgICAgICAgICB7Y2FuQ3JlYXRlQWdlbnQgPyAoXG4gICAgICAgICAgICAgIDxTQ01BU2VhcmNoTm9SZXN1bHRzU3VidGl0bGU+e3QoJ21hcmtldHBsYWNlLnNlYXJjaE5vUmVzdWx0c1N1YnRpdGxlJyl9PC9TQ01BU2VhcmNoTm9SZXN1bHRzU3VidGl0bGU+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L1NDTUFTZWFyY2hOb1Jlc3VsdHM+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7IXNlYXJjaExvYWRpbmdBZ2VudHMgJiYgIWN1c3RvbUFnZW50cy5sZW5ndGggJiYgIWlzU2VhcmNoQWN0aXZlID8gKFxuICAgICAgICAgIDxTQ01BRW1wdHlTdGF0ZVJvb3Q+XG4gICAgICAgICAgICA8U0NNQUVtcHR5U3RhdGVDb2x1bW4+XG4gICAgICAgICAgICAgIDxTQ01BRW1wdHlTdGF0ZVRpdGxlQmxvY2s+XG4gICAgICAgICAgICAgICAgPFNDTUFFbXB0eVN0YXRlVGl0bGU+e3QoJ21hcmtldHBsYWNlLm15QWdlbnRzRW1wdHlTdGF0ZVRpdGxlJyl9PC9TQ01BRW1wdHlTdGF0ZVRpdGxlPlxuICAgICAgICAgICAgICAgIDxTQ01BRW1wdHlTdGF0ZVN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAge2NhbkNyZWF0ZUFnZW50XG4gICAgICAgICAgICAgICAgICAgID8gdCgnbWFya2V0cGxhY2UubXlBZ2VudHNFbXB0eVN0YXRlRGVzY3JpcHRpb24nKVxuICAgICAgICAgICAgICAgICAgICA6IHQoJ21hcmtldHBsYWNlLm15QWdlbnRzRW1wdHlTdGF0ZURlc2NyaXB0aW9uTm9QZXJtJyl9XG4gICAgICAgICAgICAgICAgPC9TQ01BRW1wdHlTdGF0ZVN1YnRpdGxlPlxuICAgICAgICAgICAgICA8L1NDTUFFbXB0eVN0YXRlVGl0bGVCbG9jaz5cbiAgICAgICAgICAgIDwvU0NNQUVtcHR5U3RhdGVDb2x1bW4+XG4gICAgICAgICAgICB7Y2FuQ3JlYXRlQWdlbnQgPyAoXG4gICAgICAgICAgICAgIDxTQ01BRW1wdHlTdGF0ZUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlRW1wdHlTdGF0ZVByaW1hcnlBY3Rpb259PlxuICAgICAgICAgICAgICAgIHt0KCdtYXJrZXRwbGFjZS5teUFnZW50c0VtcHR5U3RhdGVCdXR0b24nKX1cbiAgICAgICAgICAgICAgPC9TQ01BRW1wdHlTdGF0ZUJ1dHRvbj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvU0NNQUVtcHR5U3RhdGVSb290PlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge2xvYWRpbmdNb3JlQWdlbnRzID8gKFxuICAgICAgICAgIDxTQ01BTG9hZE1vcmVXcmFwcGVyPlxuICAgICAgICAgICAgPEZhZGU+XG4gICAgICAgICAgICAgIDxMb2FkZXIgc2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgICAgIDwvRmFkZT5cbiAgICAgICAgICA8L1NDTUFMb2FkTW9yZVdyYXBwZXI+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9TQ01BQm9keT5cbiAgICAgIHtkZWxldGVNb2RhbENoYXQgPyAoXG4gICAgICAgIDxEZWxldGVRdWVzdGlvbk1vZGFsXG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0QWdlbnRUb0RlbGV0ZShudWxsKX1cbiAgICAgICAgICBoYW5kbGVycz17e1xuICAgICAgICAgICAgaGFuZGxlQ29uZmlybUFjdGlvbjogaGFuZGxlQ29uZmlybURlbGV0ZSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIGNoYXQ9e2RlbGV0ZU1vZGFsQ2hhdH1cbiAgICAgICAgICBhY3Rpb249XCJhZ2VudFwiXG4gICAgICAgIC8+XG4gICAgICApIDogbnVsbH1cbiAgICA8L1NDTUFNeUFnZW50c0NvbnRhaW5lcj5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxPQUFPQSxLQUFLLElBQUlDLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDaEYsU0FBU0MsUUFBUSxRQUFRLDJDQUEyQztBQUNwRSxTQUFTQyxNQUFNLFFBQVEseUNBQXlDO0FBQ2hFLFNBQVNDLElBQUksUUFBUSx1Q0FBdUM7QUFDNUQsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUN0RSxTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUM5QyxTQUFTQyxnQkFBZ0IsUUFBUSxpQ0FBaUM7QUFDbEUsU0FBU0MsT0FBTyxRQUFRLDJCQUEyQjtBQUVuRCxTQUFTQyxXQUFXLFFBQVEsMkNBQTJDO0FBQ3ZFLFNBQVNDLGtCQUFrQixRQUFRLHNEQUFzRDtBQUN6RixTQUFTQyxtQkFBbUIs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cEIsSUFBSSxFQUNQLENBQUNKLG1CQUFtQixJQUFJLENBQUNjLFlBQVksQ0FBQzNDLE1BQU0sSUFBSSxDQUFDdUUsY0FBYyxnQkFDOURyRixLQUFBLENBQUN4QixrQkFBa0I7UUFBQThDLFFBQUEsZ0JBQ2pCeEIsSUFBQSxDQUFDckIsb0JBQW9CO1VBQUE2QyxRQUFBLGVBQ25CdEIsS0FBQSxDQUFDdEIsd0JBQXdCO1lBQUE0QyxRQUFBLGdCQUN2QnhCLElBQUEsQ0FBQ25CLG1CQUFtQjtjQUFBMkMsUUFBQSxFQUFFeUIsQ0FBQyxDQUFDLHFDQUFxQztZQUFDLENBQXNCLENBQUMsZUFDckZqRCxJQUFBLENBQUNsQixzQkFBc0I7Y0FBQTBDLFFBQUEsRUFDcEJrRCxjQUFjLEdBQ1h6QixDQUFDLENBQUMsMkNBQTJDLENBQUMsR0FDOUNBLENBQUMsQ0FBQyxpREFBaUQ7WUFBQyxDQUNsQyxDQUFDO1VBQUEsQ0FDRDtRQUFDLENBQ1AsQ0FBQyxFQUN0QnlCLGNBQWMsZ0JBQ2IxRSxJQUFBLENBQUNqQixvQkFBb0I7VUFBQzZDLElBQUksRUFBQyxRQUFRO1VBQUNtSixPQUFPLEVBQUV6RSw2QkFBOEI7VUFBQTlFLFFBQUEsRUFDeEV5QixDQUFDLENBQUMsc0NBQXNDO1FBQUMsQ0FDdEIsQ0FBQyxHQUNyQixJQUFJO01BQUEsQ0FDVSxDQUFDLEdBQ25CLElBQUksRUFDUFQsaUJBQWlCLGdCQUNoQnhDLElBQUEsQ0FBQ2YsbUJBQW1CO1FBQUF1QyxRQUFBLGVBQ2xCeEIsSUFBQSxDQUFDNUMsSUFBSTtVQUFBb0UsUUFBQSxlQUNIeEIsSUFBQSxDQUFDN0MsTUFBTTtZQUFDb08sSUFBSSxFQUFDO1VBQU8sQ0FBRTtRQUFDLENBQ25CO01BQUMsQ0FDWSxDQUFDLEdBQ3BCLElBQUk7SUFBQSxDQUNBLENBQUMsRUFDVjlFLGVBQWUsZ0JBQ2R6RyxJQUFBLENBQUMvQyxtQkFBbUI7TUFDbEJ1TyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtRQUFBLE9BQVFsSCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7TUFBQSxDQUFDO01BQ3RDbUgsUUFBUSxFQUFFO1FBQ1JDLG1CQUFtQixFQUFFaEQ7TUFDdkIsQ0FBRTtNQUNGTSxJQUFJLEVBQUV2QyxlQUFnQjtNQUN0QmtGLE1BQU0sRUFBQztJQUFPLENBQ2YsQ0FBQyxHQUNBLElBQUk7RUFBQSxDQUNhLENBQUM7QUFFNUIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
454
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVJlZiIsInVzZVN0YXRlIiwiTWVudURvdHMiLCJTZWFyY2giLCJTdGFyIiwiVG9vbHRpcCIsInVzZVRyYW5zbGF0aW9uIiwidXNlR2xvYmFsQ29udGV4dCIsInVzZVVzZXIiLCJkZWxldGVBZ2VudCIsInVzZVNuYWNrQmFyTWFuYWdlciIsIkRlbGV0ZVF1ZXN0aW9uTW9kYWwiLCJTRUNUSU9OUyIsIkxvYWRlciIsIkZhZGUiLCJTa2VsZXRvbiIsInVzZVRvZ2dsZUZhdm9yaXRlIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJTQ01BQm9keSIsIlNDTUFDYXJkQm9keSIsIlNDTUFDYXJkQnV0dG9uIiwiU0NNQUNhcmRGb290ZXIiLCJTQ01BQ2FyZEhlYWRlciIsIlNDTUFDYXJkVG9wUm93IiwiU0NNQUNhcmRJbnRyb1RleHQiLCJTQ01BQ2FyZE1lbnUiLCJTQ01BQ2FyZE1lbnVJdGVtIiwiU0NNQUNhcmRNZW51SXRlbXMiLCJTQ01BRmF2b3JpdGVCdXR0b24iLCJTQ01BRmF2b3JpdGVTdGFyV3JhcCIsIlNDTUFDYXJkRm9vdGVyRGF0ZSIsIlNDTUFDYXJkVGl0bGVFbW9qaSIsIlNDTUFDYXJkVGl0bGVOYW1lIiwiU0NNQUNhcmRzT3V0ZXIiLCJTQ01BQ2FyZHNSb3ciLCJTQ01BRW1wdHlTdGF0ZVJvb3QiLCJTQ01BRW1wdHlTdGF0ZUNvbHVtbiIsIlNDTUFFbXB0eVN0YXRlVGl0bGVCbG9jayIsIlNDTUFFbXB0eVN0YXRlVGl0bGUiLCJTQ01BRW1wdHlTdGF0ZVN1YnRpdGxlIiwiU0NNQUVtcHR5U3RhdGVCdXR0b24iLCJTQ01BS2ViYWJCdXR0b24iLCJTQ01BTG9hZE1vcmVXcmFwcGVyIiwiU0NNQUxvZ29Db250YWluZXIiLCJTQ01BTXlBZ2VudHNDb250YWluZXIiLCJTQ01BVGl0bGUiLCJTQ01BVGl0bGVJbm5lciIsIlNDTUFUaXRsZVdyYXAiLCJTQ01BQ2FyZFNrZWxldG9uSXRlbSIsIlNDTUFTZWFyY2hXcmFwcGVyIiwiU0NNQVNlYXJjaElucHV0IiwiU0NNQVNlYXJjaEhpbnQiLCJTQ01BU2VhcmNoTm9SZXN1bHRzIiwiU0NNQVNlYXJjaE5vUmVzdWx0c1RpdGxlIiwiU0NNQVNlYXJjaE5vUmVzdWx0c1N1YnRpdGxlIiwiTUFJQUlzb2xvZ28iLCJidWlsZEFnZW50RGVsZXRlTW9kYWxDaGF0IiwiZ2V0QWdlbnRDcmVhdGVkQXRMYWJlbCIsIm5vcm1hbGl6ZUFnZW50SW50cm9UZXh0Iiwic2hvdWxkQXV0b0xvYWRNb3JlQWdlbnRzIiwic2hvdWxkRGVib3VuY2VBZ2VudFNlYXJjaCIsInNob3VsZExvYWRNb3JlQWdlbnRzT25TY3JvbGwiLCJzaG91bGRVc2VNYWlha2VyRW1wdHlTdGF0ZUFjdGlvbiIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJBZ2VudFNlYXJjaElucHV0IiwibWVtbyIsIl9yZWYiLCJvblNlYXJjaCIsInBsYWNlaG9sZGVyIiwiaGludCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInZhbHVlIiwic2V0VmFsdWUiLCJkZWJvdW5jZVJlZiIsInNob3dIaW50IiwibGVuZ3RoIiwiaGFuZGxlQ2hhbmdlIiwiZSIsInZhbCIsInRhcmdldCIsImN1cnJlbnQiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiY2hpbGRyZW4iLCJ3aWR0aCIsImhlaWdodCIsImNvbG9yIiwidHlwZSIsIm9uQ2hhbmdlIiwiQ2hhdEFJTXlBZ2VudHMiLCJfcmVmMiIsIl91c2VyJHBlcm1pc3Npb25zIiwib25CYWNrIiwiYWdlbnRzIiwib25EZWxldGVBZ2VudCIsIm9uRmF2b3JpdGVBZ2VudFVwZGF0ZSIsIl9yZWYyJGhhc01vcmVBZ2VudHMiLCJoYXNNb3JlQWdlbnRzIiwiX3JlZjIkbG9hZGluZ01vcmVBZ2VuIiwibG9hZGluZ01vcmVBZ2VudHMiLCJvbkxvYWRNb3JlQWdlbnRzIiwib25Hb1RvTWFpYWtlciIsIm9uU2VhcmNoQWdlbnRzIiwiX3JlZjIkc2VhcmNoTG9hZGluZ0FnIiwic2VhcmNoTG9hZGluZ0FnZW50cyIsIl91c2VUcmFuc2xhdGlvbiIsImNoYXRBSSIsImFibUFnZW50IiwidCIsInVzZXIiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdEFnZW50Iiwic2V0UHJvamVjdCIsInNldENsaWVudCIsInNldFRhc2siLCJfdXNlU25hY2tCYXJNYW5hZ2VyIiwiaGFuZGxlU25hY2tiYXJTdWNjZXNzIiwiaGFuZGxlU25hY2tiYXJFcnJvciIsImN1c3RvbUFnZW50cyIsImZpbHRlciIsImFnZW50IiwiaXNfZGVsZXRlZCIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwibWVudU9wZW5Gb3JBZ2VudElkIiwic2V0TWVudU9wZW5Gb3JBZ2VudElkIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJhZ2VudFRvRGVsZXRlIiwic2V0QWdlbnRUb0RlbGV0ZSIsInVzZXJQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWlfYWdlbnRzIiwiY2FuQ3JlYXRlQWdlbnQiLCJjcmVhdGUiLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiY2FuRWRpdCIsImVkaXQiLCJjYW5EZWxldGUiLCJjYW5TaG93TWVudSIsIl91c2VUb2dnbGVGYXZvcml0ZSIsInRvZ2dsZUZhdm9yaXRlIiwiZXZlbnRBbXBsaXR1ZGUiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImlzU2VhcmNoQWN0aXZlIiwic2V0SXNTZWFyY2hBY3RpdmUiLCJoYW5kbGVTZWFyY2hBZ2VudHMiLCJxdWVyeSIsIm9wZW5DcmVhdGVBZ2VudE1vZGFsIiwib3Blbk1vZGFsIiwib3B0aW9uIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJhZ2VudFZhbHVlcyIsInZhbHVlcyIsImlzRWRpdGluZyIsImlzT3BlbiIsImhhbmRsZUVtcHR5U3RhdGVQcmltYXJ5QWN0aW9uIiwiaGFuZGxlTG9hZE1vcmUiLCJkZWxldGVNb2RhbENoYXQiLCJoYW5kbGVVc2VBZ2VudCIsImdldENyZWF0ZWRBdExhYmVsIiwidG9kYXkiLCJvbmVEYXlBZ28iLCJkYXlzQWdvIiwiZGF5cyIsIkRhdGUiLCJub3ciLCJoYW5kbGVPcGVuRWRpdEFnZW50Iiwia25vd2xlZGdlIiwiZ2VuZXJhbCIsIm5hbWUiLCJpZCIsImhhbmRsZVRvZ2dsZUZhdm9yaXRlIiwiZXZlbnQiLCJpc0Zhdm9yaXRlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJ1cGRhdGVkQWdlbnQiLCJ1bmRlZmluZWQiLCJoYW5kbGVDb25maXJtRGVsZXRlIiwiX3JlZjMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImNoYXQiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwibnMiLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImhhbmRsZUNsaWNrT3V0c2lkZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY29udGFpbmVyIiwiZ2V0RWxlbWVudEJ5SWQiLCJvblNjcm9sbCIsInNjcm9sbFRvcCIsImNsaWVudEhlaWdodCIsInNjcm9sbEhlaWdodCIsIiRoYXNBZ2VudHMiLCIkY2FuQ3JlYXRlQWdlbnQiLCJBcnJheSIsImZyb20iLCJtYXAiLCJfIiwiaSIsInZhcmlhbnQiLCJpbmRleCIsIl9hZ2VudCRlbW9qaSIsIiRpbmRleCIsIm9uQ2xpY2siLCJlbW9qaSIsInRyaW0iLCJpbnRyb2R1Y3Rpb24iLCJ0aXRsZSIsImlzX2Zhdm9yaXRlIiwiJGFsd2F5c1Zpc2libGUiLCJmaWxsIiwiY2xhc3NOYW1lIiwic2l6ZSIsIm9uQ2xvc2UiLCJoYW5kbGVycyIsImhhbmRsZUNvbmZpcm1BY3Rpb24iLCJhY3Rpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTXlBZ2VudHMvQ2hhdEFJTXlBZ2VudHMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBNZW51RG90cyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL01lbnVEb3RzJ1xuaW1wb3J0IHsgU2VhcmNoIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvU2VhcmNoJ1xuaW1wb3J0IHsgU3RhciB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1N0YXInXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IGRlbGV0ZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZGVsZXRlQWdlbnQnXG5pbXBvcnQgeyB1c2VTbmFja0Jhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbmFja0Jhck1hbmFnZXIvdXNlU25hY2tCYXJNYW5hZ2VyJ1xuaW1wb3J0IHsgRGVsZXRlUXVlc3Rpb25Nb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9EZWxldGVRdWVzdGlvbk1vZGFsL0RlbGV0ZVF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBGYWRlIH0gZnJvbSAnLi4vLi4vYXRvbXMvRmFkZSdcbmltcG9ydCB7IFNrZWxldG9uIH0gZnJvbSAnLi4vLi4vYXRvbXMvU2tlbGV0b24vU2tlbGV0b24nXG5pbXBvcnQgeyB1c2VUb2dnbGVGYXZvcml0ZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHtcbiAgU0NNQUJvZHksXG4gIFNDTUFDYXJkQm9keSxcbiAgU0NNQUNhcmRCdXR0b24sXG4gIFNDTUFDYXJkRm9vdGVyLFxuICBTQ01BQ2FyZEhlYWRlcixcbiAgU0NNQUNhcmRUb3BSb3csXG4gIFNDTUFDYXJkSW50cm9UZXh0LFxuICBTQ01BQ2FyZE1lbnUsXG4gIFNDTUFDYXJkTWVudUl0ZW0sXG4gIFNDTUFDYXJkTWVudUl0ZW1zLFxuICBTQ01BRmF2b3JpdGVCdXR0b24sXG4gIFNDTUFGYXZvcml0ZVN0YXJXcmFwLFxuICBTQ01BQ2FyZEZvb3RlckRhdGUsXG4gIFNDTUFDYXJkVGl0bGVFbW9qaSxcbiAgU0NNQUNhcmRUaXRsZU5hbWUsXG4gIFNDTUFDYXJkc091dGVyLFxuICBTQ01BQ2FyZHNSb3csXG4gIFNDTUFFbXB0eVN0YXRlUm9vdCxcbiAgU0NNQUVtcHR5U3RhdGVDb2x1bW4sXG4gIFNDTUFFbXB0eVN0YXRlVGl0bGVCbG9jayxcbiAgU0NNQUVtcHR5U3RhdGVUaXRsZSxcbiAgU0NNQUVtcHR5U3RhdGVTdWJ0aXRsZSxcbiAgU0NNQUVtcHR5U3RhdGVCdXR0b24sXG4gIFNDTUFLZWJhYkJ1dHRvbixcbiAgU0NNQUxvYWRNb3JlV3JhcHBlcixcbiAgU0NNQUxvZ29Db250YWluZXIsXG4gIFNDTUFNeUFnZW50c0NvbnRhaW5lcixcbiAgU0NNQVRpdGxlLFxuICBTQ01BVGl0bGVJbm5lcixcbiAgU0NNQVRpdGxlV3JhcCxcbiAgU0NNQUNhcmRTa2VsZXRvbkl0ZW0sXG4gIFNDTUFTZWFyY2hXcmFwcGVyLFxuICBTQ01BU2VhcmNoSW5wdXQsXG4gIFNDTUFTZWFyY2hIaW50LFxuICBTQ01BU2VhcmNoTm9SZXN1bHRzLFxuICBTQ01BU2VhcmNoTm9SZXN1bHRzVGl0bGUsXG4gIFNDTUFTZWFyY2hOb1Jlc3VsdHNTdWJ0aXRsZSxcbn0gZnJvbSAnLi9DaGF0QUlNeUFnZW50cy5zdHlsZXMnXG5pbXBvcnQgeyBNQUlBSXNvbG9nbyB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zJ1xuaW1wb3J0IHtcbiAgYnVpbGRBZ2VudERlbGV0ZU1vZGFsQ2hhdCxcbiAgZ2V0QWdlbnRDcmVhdGVkQXRMYWJlbCxcbiAgbm9ybWFsaXplQWdlbnRJbnRyb1RleHQsXG4gIHNob3VsZEF1dG9Mb2FkTW9yZUFnZW50cyxcbiAgc2hvdWxkRGVib3VuY2VBZ2VudFNlYXJjaCxcbiAgc2hvdWxkTG9hZE1vcmVBZ2VudHNPblNjcm9sbCxcbiAgc2hvdWxkVXNlTWFpYWtlckVtcHR5U3RhdGVBY3Rpb24sXG59IGZyb20gJy4vQ2hhdEFJTXlBZ2VudHMuaGVscGVycydcblxuY29uc3QgQWdlbnRTZWFyY2hJbnB1dCA9IFJlYWN0Lm1lbW8oXG4gICh7IG9uU2VhcmNoLCBwbGFjZWhvbGRlciwgaGludCB9OiB7IG9uU2VhcmNoOiAocTogc3RyaW5nKSA9PiB2b2lkOyBwbGFjZWhvbGRlcjogc3RyaW5nOyBoaW50OiBzdHJpbmcgfSkgPT4ge1xuICAgIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGUoJycpXG4gICAgY29uc3QgZGVib3VuY2VSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsPihudWxsKVxuICAgIGNvbnN0IHNob3dIaW50ID0gdmFsdWUubGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPCAzXG5cbiAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgIChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICBjb25zdCB7IHZhbHVlOiB2YWwgfSA9IGUudGFyZ2V0XG4gICAgICAgIHNldFZhbHVlKHZhbClcbiAgICAgICAgaWYgKGRlYm91bmNlUmVmLmN1cnJlbnQpIGNsZWFyVGltZW91dChkZWJvdW5jZVJlZi5jdXJyZW50KVxuICAgICAgICBkZWJvdW5jZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHNob3VsZERlYm91bmNlQWdlbnRTZWFyY2godmFsKSkgb25TZWFyY2godmFsKVxuICAgICAgICB9LCAzNTApXG4gICAgICB9LFxuICAgICAgW29uU2VhcmNoXVxuICAgIClcblxuICAgIHVzZUVmZmVjdChcbiAgICAgICgpID0+ICgpID0+IHtcbiAgICAgICAgaWYgKGRlYm91bmNlUmVmLmN1cnJlbnQpIGNsZWFyVGltZW91dChkZWJvdW5jZVJlZi5jdXJyZW50KVxuICAgICAgfSxcbiAgICAgIFtdXG4gICAgKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ01BU2VhcmNoV3JhcHBlcj5cbiAgICAgICAgPFNlYXJjaCB3aWR0aD17MTZ9IGhlaWdodD17MTZ9IGNvbG9yPVwiIzk5OVwiIC8+XG4gICAgICAgIDxTQ01BU2VhcmNoSW5wdXQgdHlwZT1cInRleHRcIiB2YWx1ZT17dmFsdWV9IG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9IHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn0gLz5cbiAgICAgICAge3Nob3dIaW50ID8gPFNDTUFTZWFyY2hIaW50PntoaW50fTwvU0NNQVNlYXJjaEhpbnQ+IDogbnVsbH1cbiAgICAgIDwvU0NNQVNlYXJjaFdyYXBwZXI+XG4gICAgKVxuICB9XG4pXG5cbnR5cGUgQ2hhdEFJTXlBZ2VudHNQcm9wcyA9IHtcbiAgb25CYWNrOiAoKSA9PiB2b2lkXG4gIGFnZW50czogQWdlbnRbXVxuICBvbkRlbGV0ZUFnZW50PzogKGFnZW50SWQ6IHN0cmluZykgPT4gdm9pZFxuICBvbkZhdm9yaXRlQWdlbnRVcGRhdGU/OiAoYWdlbnQ6IEFnZW50KSA9PiB2b2lkXG4gIGhhc01vcmVBZ2VudHM/OiBib29sZWFuXG4gIGxvYWRpbmdNb3JlQWdlbnRzPzogYm9vbGVhblxuICBvbkxvYWRNb3JlQWdlbnRzPzogKCkgPT4gdm9pZFxuICBvbkdvVG9NYWlha2VyPzogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD5cbiAgb25TZWFyY2hBZ2VudHM/OiAocXVlcnk6IHN0cmluZykgPT4gdm9pZFxuICBzZWFyY2hMb2FkaW5nQWdlbnRzPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJTXlBZ2VudHMgPSAoe1xuICBvbkJhY2ssXG4gIGFnZW50cyxcbiAgb25EZWxldGVBZ2VudCxcbiAgb25GYXZvcml0ZUFnZW50VXBkYXRlLFxuICBoYXNNb3JlQWdlbnRzID0gZmFsc2UsXG4gIGxvYWRpbmdNb3JlQWdlbnRzID0gZmFsc2UsXG4gIG9uTG9hZE1vcmVBZ2VudHMsXG4gIG9uR29Ub01haWFrZXIsXG4gIG9uU2VhcmNoQWdlbnRzLFxuICBzZWFyY2hMb2FkaW5nQWdlbnRzID0gZmFsc2UsXG59OiBDaGF0QUlNeUFnZW50c1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oW1NFQ1RJT05TLmNoYXRBSSwgU0VDVElPTlMuYWJtQWdlbnRdKVxuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHsgc2VsZWN0QWdlbnQsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0VGFzayB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IHsgaGFuZGxlU25hY2tiYXJTdWNjZXNzLCBoYW5kbGVTbmFja2JhckVycm9yIH0gPSB1c2VTbmFja0Jhck1hbmFnZXIoKVxuICBjb25zdCBjdXN0b21BZ2VudHMgPSBhZ2VudHMuZmlsdGVyKGFnZW50ID0+IGFnZW50LnR5cGUgPT09ICdjdXN0b20nICYmICFhZ2VudC5pc19kZWxldGVkKVxuICBjb25zdCBbbWVudU9wZW5Gb3JBZ2VudElkLCBzZXRNZW51T3BlbkZvckFnZW50SWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2FnZW50VG9EZWxldGUsIHNldEFnZW50VG9EZWxldGVdID0gdXNlU3RhdGU8QWdlbnQgfCBudWxsPihudWxsKVxuICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzXG4gIGNvbnN0IGNhbkNyZWF0ZUFnZW50ID0gISF1c2VyUGVybWlzc2lvbnM/LmNyZWF0ZSAmJiAhIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTXG4gIGNvbnN0IGNhbkVkaXQgPSAhIXVzZXJQZXJtaXNzaW9ucz8uZWRpdCAmJiAhIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTXG4gIGNvbnN0IGNhbkRlbGV0ZSA9ICEhdXNlclBlcm1pc3Npb25zPy5kZWxldGUgJiYgISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuICBjb25zdCBjYW5TaG93TWVudSA9IGNhbkVkaXQgfHwgY2FuRGVsZXRlXG4gIGNvbnN0IHsgdG9nZ2xlRmF2b3JpdGUgfSA9IHVzZVRvZ2dsZUZhdm9yaXRlKClcbiAgY29uc3QgZXZlbnRBbXBsaXR1ZGUgPSB1c2VFdmVudCgpXG4gIGNvbnN0IFtpc1NlYXJjaEFjdGl2ZSwgc2V0SXNTZWFyY2hBY3RpdmVdID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgaGFuZGxlU2VhcmNoQWdlbnRzID0gdXNlQ2FsbGJhY2soXG4gICAgKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICAgIHNldElzU2VhcmNoQWN0aXZlKHF1ZXJ5ICE9PSAnJylcbiAgICAgIG9uU2VhcmNoQWdlbnRzPy4ocXVlcnkpXG4gICAgfSxcbiAgICBbb25TZWFyY2hBZ2VudHNdXG4gIClcblxuICBjb25zdCBvcGVuQ3JlYXRlQWdlbnRNb2RhbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMub3Blbk1vZGFsLCB7IG9wdGlvbjogJ2NyZWF0ZV9hZ2VudCcgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgYWdlbnRWYWx1ZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApXG4gIH0sIFtldmVudEFtcGxpdHVkZV0pXG5cbiAgY29uc3QgaGFuZGxlRW1wdHlTdGF0ZVByaW1hcnlBY3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNob3VsZFVzZU1haWFrZXJFbXB0eVN0YXRlQWN0aW9uKCEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMsIG9uR29Ub01haWFrZXIpKSB7XG4gICAgICBvbkdvVG9NYWlha2VyPy4oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIG9wZW5DcmVhdGVBZ2VudE1vZGFsKClcbiAgfSwgW29uR29Ub01haWFrZXIsIG9wZW5DcmVhdGVBZ2VudE1vZGFsXSlcblxuICBjb25zdCBoYW5kbGVMb2FkTW9yZSA9ICgpID0+IHtcbiAgICBpZiAoIW9uTG9hZE1vcmVBZ2VudHMpIHJldHVyblxuICAgIG9uTG9hZE1vcmVBZ2VudHMoKVxuICB9XG5cbiAgY29uc3QgZGVsZXRlTW9kYWxDaGF0ID0gdXNlTWVtbygoKSA9PiBidWlsZEFnZW50RGVsZXRlTW9kYWxDaGF0KGFnZW50VG9EZWxldGUpLCBbYWdlbnRUb0RlbGV0ZV0pXG5cbiAgY29uc3QgaGFuZGxlVXNlQWdlbnQgPSAoYWdlbnQ6IEFnZW50KSA9PiB7XG4gICAgc2V0UHJvamVjdChudWxsKVxuICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgc2V0VGFzayhudWxsKVxuICAgIHNlbGVjdEFnZW50KGFnZW50KVxuICAgIG9uQmFjaygpXG4gIH1cblxuICBjb25zdCBnZXRDcmVhdGVkQXRMYWJlbCA9IChhZ2VudDogQWdlbnQpID0+XG4gICAgZ2V0QWdlbnRDcmVhdGVkQXRMYWJlbChcbiAgICAgIGFnZW50LFxuICAgICAge1xuICAgICAgICB0b2RheTogdCgnbWFya2V0cGxhY2UubXlBZ2VudHNUb2RheScpLFxuICAgICAgICBvbmVEYXlBZ286IHQoJ21hcmtldHBsYWNlLm15QWdlbnRzT25lRGF5QWdvJyksXG4gICAgICAgIGRheXNBZ286IGRheXMgPT4gdCgnbWFya2V0cGxhY2UubXlBZ2VudHNEYXlzQWdvJywgeyBkYXlzIH0pLFxuICAgICAgfSxcbiAgICAgIERhdGUubm93KClcbiAgICApXG5cbiAgY29uc3QgaGFuZGxlT3BlbkVkaXRBZ2VudCA9IChhZ2VudDogQWdlbnQpID0+IHtcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgYWdlbnRWYWx1ZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBpc0VkaXRpbmc6IHRydWUsXG4gICAgICAgICAgICAgIGtub3dsZWRnZTogYWdlbnQ/Lmtub3dsZWRnZSB8fCBbXSxcbiAgICAgICAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgICAgICAgIG5hbWU6IGFnZW50Lm5hbWUsXG4gICAgICAgICAgICAgICAgaWQ6IGFnZW50LmlkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApXG4gICAgc2V0TWVudU9wZW5Gb3JBZ2VudElkKG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVUb2dnbGVGYXZvcml0ZSA9IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4sIGFnZW50OiBBZ2VudCwgaXNGYXZvcml0ZTogYm9vbGVhbikgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgdG9nZ2xlRmF2b3JpdGUoXG4gICAgICBhZ2VudC5pZCxcbiAgICAgIHVwZGF0ZWRBZ2VudCA9PiB7XG4gICAgICAgIG9uRmF2b3JpdGVBZ2VudFVwZGF0ZT8uKHVwZGF0ZWRBZ2VudClcbiAgICAgIH0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBpc0Zhdm9yaXRlXG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybURlbGV0ZSA9IGFzeW5jIChjaGF0OiB7IGlkOiBzdHJpbmcgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkZWxldGVBZ2VudChjaGF0LmlkKVxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudERlbGV0ZWQnLCB7IG5zOiBTRUNUSU9OUy5hYm1BZ2VudCB9KSlcbiAgICAgIG9uRGVsZXRlQWdlbnQ/LihjaGF0LmlkKVxuICAgICAgc2V0QWdlbnRUb0RlbGV0ZShudWxsKVxuICAgICAgc2V0TWVudU9wZW5Gb3JBZ2VudElkKG51bGwpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnZXJyb3JBZ2VudENyZWF0ZWQnLCB7IG5zOiBTRUNUSU9OUy5hYm1BZ2VudCB9KSlcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUNsaWNrT3V0c2lkZSA9ICgpID0+IHtcbiAgICAgIGlmIChtZW51T3BlbkZvckFnZW50SWQpIHtcbiAgICAgICAgc2V0TWVudU9wZW5Gb3JBZ2VudElkKG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIH1cbiAgfSwgW21lbnVPcGVuRm9yQWdlbnRJZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXktYWdlbnRzLXNjcm9sbC1jb250YWluZXInKVxuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3Qgb25TY3JvbGwgPSAoKSA9PiB7XG4gICAgICBjb25zdCB7IHNjcm9sbFRvcCwgY2xpZW50SGVpZ2h0LCBzY3JvbGxIZWlnaHQgfSA9IGNvbnRhaW5lclxuICAgICAgaWYgKFxuICAgICAgICBzaG91bGRMb2FkTW9yZUFnZW50c09uU2Nyb2xsKHtcbiAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgY2xpZW50SGVpZ2h0LFxuICAgICAgICAgIHNjcm9sbEhlaWdodCxcbiAgICAgICAgICBoYXNNb3JlQWdlbnRzLFxuICAgICAgICAgIGxvYWRpbmdNb3JlQWdlbnRzLFxuICAgICAgICB9KVxuICAgICAgKSB7XG4gICAgICAgIGhhbmRsZUxvYWRNb3JlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgb25TY3JvbGwpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBvblNjcm9sbClcbiAgICB9XG4gIH0sIFtoYXNNb3JlQWdlbnRzLCBsb2FkaW5nTW9yZUFnZW50cywgb25Mb2FkTW9yZUFnZW50c10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXktYWdlbnRzLXNjcm9sbC1jb250YWluZXInKVxuICAgIGlmICghY29udGFpbmVyIHx8ICFoYXNNb3JlQWdlbnRzIHx8IGxvYWRpbmdNb3JlQWdlbnRzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgc2hvdWxkQXV0b0xvYWRNb3JlQWdlbnRzKHtcbiAgICAgICAgc2Nyb2xsSGVpZ2h0OiBjb250YWluZXIuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICBjbGllbnRIZWlnaHQ6IGNvbnRhaW5lci5jbGllbnRIZWlnaHQsXG4gICAgICAgIGhhc01vcmVBZ2VudHMsXG4gICAgICAgIGxvYWRpbmdNb3JlQWdlbnRzLFxuICAgICAgfSlcbiAgICApIHtcbiAgICAgIGhhbmRsZUxvYWRNb3JlKClcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9LCBbY3VzdG9tQWdlbnRzLmxlbmd0aCwgaGFzTW9yZUFnZW50cywgbG9hZGluZ01vcmVBZ2VudHMsIG9uTG9hZE1vcmVBZ2VudHNdKVxuXG4gIHJldHVybiAoXG4gICAgPFNDTUFNeUFnZW50c0NvbnRhaW5lciBpZD1cIm15LWFnZW50cy1zY3JvbGwtY29udGFpbmVyXCIgJGhhc0FnZW50cz17ISFjdXN0b21BZ2VudHMubGVuZ3RoIHx8IGlzU2VhcmNoQWN0aXZlfT5cbiAgICAgIDxTQ01BTG9nb0NvbnRhaW5lcj5cbiAgICAgICAgPE1BSUFJc29sb2dvIC8+XG4gICAgICA8L1NDTUFMb2dvQ29udGFpbmVyPlxuXG4gICAgICA8U0NNQUJvZHkgJGNhbkNyZWF0ZUFnZW50PXtjYW5DcmVhdGVBZ2VudH0+XG4gICAgICAgIHtjdXN0b21BZ2VudHMubGVuZ3RoIHx8IGlzU2VhcmNoQWN0aXZlID8gKFxuICAgICAgICAgIDxTQ01BVGl0bGVXcmFwPlxuICAgICAgICAgICAgPFNDTUFUaXRsZUlubmVyPlxuICAgICAgICAgICAgICA8U0NNQVRpdGxlPnt0KCdtYXJrZXRwbGFjZS5teUFnZW50c1JlYWR5VGl0bGUnKX08L1NDTUFUaXRsZT5cbiAgICAgICAgICAgIDwvU0NNQVRpdGxlSW5uZXI+XG4gICAgICAgICAgICB7b25TZWFyY2hBZ2VudHMgPyAoXG4gICAgICAgICAgICAgIDxBZ2VudFNlYXJjaElucHV0XG4gICAgICAgICAgICAgICAgb25TZWFyY2g9e2hhbmRsZVNlYXJjaEFnZW50c31cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnbWFya2V0cGxhY2Uuc2VhcmNoQWdlbnRQbGFjZWhvbGRlcicpfVxuICAgICAgICAgICAgICAgIGhpbnQ9e3QoJ21hcmtldHBsYWNlLnNlYXJjaE1pbkxlbmd0aCcpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9TQ01BVGl0bGVXcmFwPlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7c2VhcmNoTG9hZGluZ0FnZW50cyA/IChcbiAgICAgICAgICA8U0NNQUNhcmRzT3V0ZXI+XG4gICAgICAgICAgICA8U0NNQUNhcmRzUm93PlxuICAgICAgICAgICAgICB7QXJyYXkuZnJvbSh7IGxlbmd0aDogNiB9KS5tYXAoKF8sIGkpID0+IChcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5XG4gICAgICAgICAgICAgICAgPFNDTUFDYXJkU2tlbGV0b25JdGVtIGtleT17aX0+XG4gICAgICAgICAgICAgICAgICA8U2tlbGV0b24gdmFyaWFudD1cImNpcmN1bGFyXCIgd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSAvPlxuICAgICAgICAgICAgICAgICAgPFNrZWxldG9uIHZhcmlhbnQ9XCJ0ZXh0XCIgaGVpZ2h0PXsxNH0gLz5cbiAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiB2YXJpYW50PVwidGV4dFwiIGhlaWdodD17MTR9IHdpZHRoPVwiNzUlXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiB2YXJpYW50PVwidGV4dFwiIGhlaWdodD17MTJ9IC8+XG4gICAgICAgICAgICAgICAgICA8U2tlbGV0b24gdmFyaWFudD1cInRleHRcIiBoZWlnaHQ9ezEyfSB3aWR0aD1cIjg1JVwiIC8+XG4gICAgICAgICAgICAgICAgICA8U2tlbGV0b24gdmFyaWFudD1cInRleHRcIiBoZWlnaHQ9ezExfSB3aWR0aD1cIjQwJVwiIC8+XG4gICAgICAgICAgICAgICAgPC9TQ01BQ2FyZFNrZWxldG9uSXRlbT5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L1NDTUFDYXJkc1Jvdz5cbiAgICAgICAgICA8L1NDTUFDYXJkc091dGVyPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgeyFzZWFyY2hMb2FkaW5nQWdlbnRzICYmIGN1c3RvbUFnZW50cy5sZW5ndGggPyAoXG4gICAgICAgICAgPFNDTUFDYXJkc091dGVyPlxuICAgICAgICAgICAgPFNDTUFDYXJkc1Jvdz5cbiAgICAgICAgICAgICAge2N1c3RvbUFnZW50cy5tYXAoKGFnZW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxTQ01BQ2FyZEJ1dHRvbiBrZXk9e2FnZW50LmlkfSAkaW5kZXg9e2luZGV4fSB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gaGFuZGxlVXNlQWdlbnQoYWdlbnQpfT5cbiAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkVG9wUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZFRpdGxlRW1vamkgYXJpYS1oaWRkZW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YWdlbnQuZW1vamk/LnRyaW0oKSA/IGFnZW50LmVtb2ppIDogJ1xcdTAwYTAnfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NNQUNhcmRUaXRsZUVtb2ppPlxuICAgICAgICAgICAgICAgICAgICAgIHtjYW5TaG93TWVudSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01BS2ViYWJCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ21hcmtldHBsYWNlLmNhcmRNZW51QXJpYUxhYmVsJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNZW51T3BlbkZvckFnZW50SWQocHJldiA9PiAocHJldiA9PT0gYWdlbnQuaWQgPyBudWxsIDogYWdlbnQuaWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWVudURvdHMgY29sb3I9XCIjOTk5XCIgd2lkdGg9ezE1fSBoZWlnaHQ9ezE1fSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ01BS2ViYWJCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDwvU0NNQUNhcmRUb3BSb3c+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZFRpdGxlTmFtZT57YWdlbnQubmFtZX08L1NDTUFDYXJkVGl0bGVOYW1lPlxuICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZEJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZEludHJvVGV4dD57bm9ybWFsaXplQWdlbnRJbnRyb1RleHQoYWdlbnQuaW50cm9kdWN0aW9uKX08L1NDTUFDYXJkSW50cm9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8U0NNQUNhcmRGb290ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkRm9vdGVyRGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRDcmVhdGVkQXRMYWJlbChhZ2VudCkgfHwgdCgnbWFya2V0cGxhY2UubXlBZ2VudHNGYWxsYmFja0RhdGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDTUFDYXJkRm9vdGVyRGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17YWdlbnQuaXNfZmF2b3JpdGUgPyB0KCdhZ2VudHMucmVtb3ZlRmF2b3JpdGUnKSA6IHQoJ2FnZW50cy5hZGRGYXZvcml0ZScpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01BRmF2b3JpdGVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2FnZW50LmlzX2Zhdm9yaXRlID8gdCgnYWdlbnRzLnJlbW92ZUZhdm9yaXRlJykgOiB0KCdhZ2VudHMuYWRkRmF2b3JpdGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsd2F5c1Zpc2libGU9eyEhYWdlbnQuaXNfZmF2b3JpdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IGhhbmRsZVRvZ2dsZUZhdm9yaXRlKGV2ZW50LCBhZ2VudCwgISFhZ2VudC5pc19mYXZvcml0ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01BRmF2b3JpdGVTdGFyV3JhcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezE2fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsxNn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXthZ2VudC5pc19mYXZvcml0ZSA/ICcjRkZDNjI0JyA6ICcjOTk5J31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9e2FnZW50LmlzX2Zhdm9yaXRlID8gJyNGRkM2MjQnIDogJ25vbmUnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YWdlbnQuaXNfZmF2b3JpdGUgPyAnJyA6ICdzdGFyLWZhdm9yaXRlLWljb24nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NNQUZhdm9yaXRlU3RhcldyYXA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NDTUFGYXZvcml0ZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NNQUNhcmRGb290ZXI+XG4gICAgICAgICAgICAgICAgICA8L1NDTUFDYXJkQm9keT5cbiAgICAgICAgICAgICAgICAgIHttZW51T3BlbkZvckFnZW50SWQgPT09IGFnZW50LmlkICYmIGNhblNob3dNZW51ID8gKFxuICAgICAgICAgICAgICAgICAgICA8U0NNQUNhcmRNZW51XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkTWVudUl0ZW1zPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhbkVkaXQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZE1lbnVJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3BlbkVkaXRBZ2VudChhZ2VudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2VkaXQnLCB7IG5zOiBTRUNUSU9OUy5hYm1BZ2VudCB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZE1lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2FuRGVsZXRlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U0NNQUNhcmRNZW51SXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFnZW50VG9EZWxldGUoYWdlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdkZWxldGUnLCB7IG5zOiBTRUNUSU9OUy5hYm1BZ2VudCB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZE1lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZE1lbnVJdGVtcz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZE1lbnU+XG4gICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8L1NDTUFDYXJkQnV0dG9uPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvU0NNQUNhcmRzUm93PlxuICAgICAgICAgIDwvU0NNQUNhcmRzT3V0ZXI+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7IXNlYXJjaExvYWRpbmdBZ2VudHMgJiYgIWN1c3RvbUFnZW50cy5sZW5ndGggJiYgaXNTZWFyY2hBY3RpdmUgPyAoXG4gICAgICAgICAgPFNDTUFTZWFyY2hOb1Jlc3VsdHM+XG4gICAgICAgICAgICA8U0NNQVNlYXJjaE5vUmVzdWx0c1RpdGxlPnt0KCdtYXJrZXRwbGFjZS5zZWFyY2hOb1Jlc3VsdHMnKX08L1NDTUFTZWFyY2hOb1Jlc3VsdHNUaXRsZT5cbiAgICAgICAgICAgIHtjYW5DcmVhdGVBZ2VudCA/IChcbiAgICAgICAgICAgICAgPFNDTUFTZWFyY2hOb1Jlc3VsdHNTdWJ0aXRsZT57dCgnbWFya2V0cGxhY2Uuc2VhcmNoTm9SZXN1bHRzU3VidGl0bGUnKX08L1NDTUFTZWFyY2hOb1Jlc3VsdHNTdWJ0aXRsZT5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvU0NNQVNlYXJjaE5vUmVzdWx0cz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHshc2VhcmNoTG9hZGluZ0FnZW50cyAmJiAhY3VzdG9tQWdlbnRzLmxlbmd0aCAmJiAhaXNTZWFyY2hBY3RpdmUgPyAoXG4gICAgICAgICAgPFNDTUFFbXB0eVN0YXRlUm9vdD5cbiAgICAgICAgICAgIDxTQ01BRW1wdHlTdGF0ZUNvbHVtbj5cbiAgICAgICAgICAgICAgPFNDTUFFbXB0eVN0YXRlVGl0bGVCbG9jaz5cbiAgICAgICAgICAgICAgICA8U0NNQUVtcHR5U3RhdGVUaXRsZT57dCgnbWFya2V0cGxhY2UubXlBZ2VudHNFbXB0eVN0YXRlVGl0bGUnKX08L1NDTUFFbXB0eVN0YXRlVGl0bGU+XG4gICAgICAgICAgICAgICAgPFNDTUFFbXB0eVN0YXRlU3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICB7Y2FuQ3JlYXRlQWdlbnRcbiAgICAgICAgICAgICAgICAgICAgPyB0KCdtYXJrZXRwbGFjZS5teUFnZW50c0VtcHR5U3RhdGVEZXNjcmlwdGlvbicpXG4gICAgICAgICAgICAgICAgICAgIDogdCgnbWFya2V0cGxhY2UubXlBZ2VudHNFbXB0eVN0YXRlRGVzY3JpcHRpb25Ob1Blcm0nKX1cbiAgICAgICAgICAgICAgICA8L1NDTUFFbXB0eVN0YXRlU3VidGl0bGU+XG4gICAgICAgICAgICAgIDwvU0NNQUVtcHR5U3RhdGVUaXRsZUJsb2NrPlxuICAgICAgICAgICAgPC9TQ01BRW1wdHlTdGF0ZUNvbHVtbj5cbiAgICAgICAgICAgIHtjYW5DcmVhdGVBZ2VudCA/IChcbiAgICAgICAgICAgICAgPFNDTUFFbXB0eVN0YXRlQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVFbXB0eVN0YXRlUHJpbWFyeUFjdGlvbn0+XG4gICAgICAgICAgICAgICAge3QoJ21hcmtldHBsYWNlLm15QWdlbnRzRW1wdHlTdGF0ZUJ1dHRvbicpfVxuICAgICAgICAgICAgICA8L1NDTUFFbXB0eVN0YXRlQnV0dG9uPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9TQ01BRW1wdHlTdGF0ZVJvb3Q+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7bG9hZGluZ01vcmVBZ2VudHMgPyAoXG4gICAgICAgICAgPFNDTUFMb2FkTW9yZVdyYXBwZXI+XG4gICAgICAgICAgICA8RmFkZT5cbiAgICAgICAgICAgICAgPExvYWRlciBzaXplPVwic21hbGxcIiAvPlxuICAgICAgICAgICAgPC9GYWRlPlxuICAgICAgICAgIDwvU0NNQUxvYWRNb3JlV3JhcHBlcj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L1NDTUFCb2R5PlxuICAgICAge2RlbGV0ZU1vZGFsQ2hhdCA/IChcbiAgICAgICAgPERlbGV0ZVF1ZXN0aW9uTW9kYWxcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRBZ2VudFRvRGVsZXRlKG51bGwpfVxuICAgICAgICAgIGhhbmRsZXJzPXt7XG4gICAgICAgICAgICBoYW5kbGVDb25maXJtQWN0aW9uOiBoYW5kbGVDb25maXJtRGVsZXRlLFxuICAgICAgICAgIH19XG4gICAgICAgICAgY2hhdD17ZGVsZXRlTW9kYWxDaGF0fVxuICAgICAgICAgIGFjdGlvbj1cImFnZW50XCJcbiAgICAgICAgLz5cbiAgICAgICkgOiBudWxsfVxuICAgIDwvU0NNQU15QWdlbnRzQ29udGFpbmVyPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBLE9BQU9BLEtBQUssSUFBSUMsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNoRixTQUFTQyxRQUFRLFFBQVEsMkNBQTJDO0FBQ3BFLFNBQVNDLE1BQU0sUUFBUSx5Q0FBeUM7QUFDaEUsU0FBU0MsSUFBSSxRQUFRLHVDQUF1QztBQUM1RCxTQUFTQyxPQUFPLFFBQVEsOENBQThDO0FBQ3RFLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBQzlDLFNBQVNDLGdCQUFnQixRQUFRLGlDQUFpQztBQUNsRSxTQUFTQyxPQUFPLFFBQVEsMkJBQTJCO0FBRW5ELFNBQVNDLFdBQVcsUUFBUSwyQ0FBMkM7QUFDdkUsU0FBU0Msa0JBQWtCLFFBQVEsc0RBQXNEO0FBQ3pGLFNBQVNDLG1CQUFtQixRQUFRLHlEQUF5RDtBQUM3RixTQUFTQyxRQUFRLFFBQVEsMkJBQTJCO0FBQ3BELFNB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