@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.
- package/lib/App.js +44 -19
- package/lib/components/atoms/ActionableButton.spec.js +111 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +52 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +11 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.js +37 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.spec.js +63 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.js +3 -37
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +183 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +117 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +139 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +31 -101
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +385 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +91 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +94 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +49 -140
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +396 -0
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +257 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +526 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +53 -205
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +137 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +4 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +11 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +2 -4
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +77 -0
- package/lib/components/atoms/Backdrop/Backdrop.spec.js +28 -0
- package/lib/components/atoms/CardMenu/CardMenu.spec.js +56 -0
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +67 -0
- package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
- package/lib/components/atoms/Chip/Chip.spec.js +82 -0
- package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +26 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.helpers.js +26 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.helpers.spec.js +45 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.js +12 -21
- package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +133 -0
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +46 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +227 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +109 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +15 -255
- package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +81 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +59 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +92 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +12 -57
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +319 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +107 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +136 -0
- package/lib/components/atoms/CopyToClipboard.spec.js +74 -0
- package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +76 -0
- package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +86 -0
- package/lib/components/atoms/Expand/Expand.spec.js +57 -0
- package/lib/components/atoms/Fade/Fade.spec.js +31 -0
- package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +75 -0
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +104 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +91 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
- package/lib/components/atoms/HelpButton.spec.js +87 -0
- package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +96 -0
- package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +54 -0
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +21 -0
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +20 -0
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +26 -0
- package/lib/components/atoms/LoadingText/LoadingText.spec.js +25 -0
- package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
- package/lib/components/atoms/MAIAError/MAIAError.spec.js +27 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +74 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.spec.js +113 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +184 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +381 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +130 -177
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +641 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +96 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +92 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +40 -113
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +193 -0
- package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +32 -0
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +64 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +43 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +114 -0
- package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +51 -0
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +48 -0
- package/lib/components/atoms/ModalProject/ModalProject.spec.js +66 -0
- package/lib/components/atoms/NextPageLoader.spec.js +37 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +20 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +17 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +35 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +3 -15
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +47 -0
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +146 -0
- package/lib/components/atoms/PrimaryButton.spec.js +42 -0
- package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +69 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +41 -24
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +27 -13
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +79 -52
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +170 -0
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +9 -11
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +199 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +6 -1
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +70 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +36 -15
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +120 -0
- package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +8 -0
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +10 -0
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +31 -0
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +29 -0
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +38 -0
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +16 -0
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +24 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.js +101 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.spec.js +71 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +21 -77
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +120 -0
- package/lib/components/atoms/Switch/Switch.spec.js +41 -0
- package/lib/components/atoms/TextArea/CustomTextArea.spec.js +52 -0
- package/lib/components/atoms/TextArea/TextArea.helpers.js +23 -0
- package/lib/components/atoms/TextArea/TextArea.helpers.spec.js +25 -0
- package/lib/components/atoms/TextArea/TextArea.js +11 -20
- package/lib/components/atoms/TextArea/TextArea.spec.js +126 -0
- package/lib/components/atoms/ThirdButton.spec.js +29 -0
- package/lib/components/atoms/VideoModal/VideoModal.spec.js +68 -0
- package/lib/components/atoms/WithAppCfg.spec.js +82 -0
- package/lib/components/index.js +2 -1
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +37 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +53 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +6 -29
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +742 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +68 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +107 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +17 -56
- package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +256 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +133 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +175 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +31 -112
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +318 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +17 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +50 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +5 -15
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +94 -0
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
- package/lib/components/molecules/AgentInputBlock/index.js +5 -0
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
- package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +66 -0
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
- package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +145 -0
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +204 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.js +370 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.spec.js +622 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +285 -302
- package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +264 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +86 -0
- package/lib/components/molecules/ChatAIHome/styles.js +85 -78
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +398 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +742 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +235 -245
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +541 -0
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
- package/lib/components/molecules/ChatAIMessages/newStyles.js +32 -35
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +522 -4
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +1394 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +250 -349
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +1401 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +5 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +33 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +3 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +116 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +134 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +49 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +142 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +100 -93
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +241 -0
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
- package/lib/components/molecules/ChatAIModal/constants.spec.js +16 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +22 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +67 -0
- package/lib/components/molecules/ChatAIModal/layout.spec.js +72 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.js +39 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.spec.js +93 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +30 -33
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +297 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.js +41 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.spec.js +62 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +9 -35
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +221 -0
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +66 -0
- package/lib/components/molecules/ChatFooter/ChatFooter.js +10 -4
- package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +369 -0
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +10 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +48 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +104 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +9 -44
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +139 -0
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
- package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +126 -0
- package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +115 -0
- package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +79 -0
- package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +37 -0
- package/lib/components/molecules/Sidebar/Sidebar.helpers.js +43 -0
- package/lib/components/molecules/Sidebar/Sidebar.helpers.spec.js +119 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +65 -44
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +464 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +512 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +1067 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +310 -644
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1236 -0
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.js +37 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.spec.js +77 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +13 -25
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +503 -0
- package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.js +525 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +246 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +139 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +275 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +275 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +195 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +94 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +69 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
- package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
- package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
- package/lib/components/organisms/ChatAIPage/index.js +3 -0
- package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +53 -0
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +49 -0
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +67 -0
- package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +117 -0
- package/lib/components/organisms/SnackBar/Snackbar.spec.js +66 -0
- package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +19 -0
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +52 -0
- package/lib/constants/formatExtensions.js +7 -8
- package/lib/constants/formatExtensions.spec.js +14 -0
- package/lib/constants/maiaExternalConnectorsAccess.spec.js +29 -0
- package/lib/constants/maiaFeatureAccess.spec.js +30 -0
- package/lib/constants/maiaHourAgentAccess.spec.js +30 -0
- package/lib/constants/maiaTaskPanelAccess.spec.js +41 -0
- package/lib/constants/permissions/clientRoleAccess.spec.js +65 -0
- package/lib/constants/permissions/index.js +2 -2
- package/lib/constants/permissions/utils.js +4 -1
- package/lib/constants/permissions/utils.spec.js +128 -0
- package/lib/constants/plannerSyncEvents.spec.js +31 -0
- package/lib/constants/taskUrls.spec.js +9 -0
- package/lib/dev/DevMaiaPage.js +30 -0
- package/lib/dev/DevReasoningTimeline.js +75 -86
- package/lib/dev/Providers.js +5 -3
- package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
- package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
- package/lib/hooks/useAccessClient/useAccessClient.spec.js +149 -0
- package/lib/hooks/useAgentModel/useAgentModel.spec.js +83 -0
- package/lib/hooks/useAgentModel/useCreateAgent.helpers.js +144 -0
- package/lib/hooks/useAgentModel/useCreateAgent.helpers.spec.js +268 -0
- package/lib/hooks/useAgentModel/useCreateAgent.js +38 -102
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +314 -0
- package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +374 -0
- package/lib/hooks/useAgentSuggestions.spec.js +89 -0
- package/lib/hooks/useCaretPosition.spec.js +58 -0
- package/lib/hooks/useChatManager/useChatManager.helpers.js +902 -0
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +2027 -0
- package/lib/hooks/useChatManager/useChatManager.js +272 -745
- package/lib/hooks/useChatManager/useChatManager.spec.js +2409 -0
- package/lib/hooks/useChatMessages/useChatMessages.helpers.js +365 -0
- package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +491 -0
- package/lib/hooks/useChatMessages/useChatMessages.js +59 -285
- package/lib/hooks/useChatMessages/useChatMessages.spec.js +729 -0
- package/lib/hooks/useChats/useChats.spec.js +208 -0
- package/lib/hooks/useClientSearch.helpers.js +36 -0
- package/lib/hooks/useClientSearch.helpers.spec.js +52 -0
- package/lib/hooks/useClientSearch.js +4 -32
- package/lib/hooks/useClientSearch.spec.js +86 -0
- package/lib/hooks/useContextMentions.helpers.js +212 -0
- package/lib/hooks/useContextMentions.helpers.spec.js +267 -0
- package/lib/hooks/useContextMentions.js +5 -223
- package/lib/hooks/useContextMentions.spec.js +338 -0
- package/lib/hooks/useContextMentions.types.js +2 -0
- package/lib/hooks/useContextPinPopover.helpers.js +95 -0
- package/lib/hooks/useContextPinPopover.helpers.spec.js +183 -0
- package/lib/hooks/useContextPinPopover.js +16 -75
- package/lib/hooks/useContextPinPopover.spec.js +159 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
- package/lib/hooks/useDebounce.spec.js +42 -0
- package/lib/hooks/useEntitySearch.helpers.js +407 -0
- package/lib/hooks/useEntitySearch.helpers.spec.js +723 -0
- package/lib/hooks/useEntitySearch.js +52 -436
- package/lib/hooks/useEntitySearch.spec.js +718 -0
- package/lib/hooks/useEvent.spec.js +45 -0
- package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
- package/lib/hooks/useFrequentlyUsedActions.js +60 -22
- package/lib/hooks/useFrequentlyUsedActions.spec.js +135 -0
- package/lib/hooks/useIsMaiaPageRoute.js +26 -0
- package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
- package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +122 -0
- package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +148 -0
- package/lib/hooks/useKnowledge/saveKnowledge.spec.js +104 -0
- package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +178 -0
- package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
- package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
- package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
- package/lib/hooks/useMentionPopover.helpers.js +41 -0
- package/lib/hooks/useMentionPopover.helpers.spec.js +100 -0
- package/lib/hooks/useMentionPopover.js +9 -35
- package/lib/hooks/useMentionPopover.spec.js +392 -0
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +47 -0
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +176 -0
- package/lib/hooks/useMinimizedPillBottomOffset.js +15 -45
- package/lib/hooks/useMinimizedPillBottomOffset.spec.js +89 -0
- package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
- package/lib/hooks/useModal/useModal.spec.js +73 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.js +86 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.spec.js +138 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +8 -82
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +417 -0
- package/lib/hooks/useProjectSearch.helpers.js +61 -0
- package/lib/hooks/useProjectSearch.helpers.spec.js +89 -0
- package/lib/hooks/useProjectSearch.js +4 -58
- package/lib/hooks/useProjectSearch.spec.js +91 -0
- package/lib/hooks/useProjectSummary.spec.js +193 -0
- package/lib/hooks/useProjectSummaryConfig.helpers.js +62 -0
- package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +151 -0
- package/lib/hooks/useProjectSummaryConfig.js +14 -52
- package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
- package/lib/hooks/useReasoningTrace/reasoningStore.js +8 -39
- package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +112 -0
- package/lib/hooks/useRecentClientsSearch.helpers.js +33 -0
- package/lib/hooks/useRecentClientsSearch.helpers.spec.js +33 -0
- package/lib/hooks/useRecentClientsSearch.js +4 -32
- package/lib/hooks/useRecentClientsSearch.spec.js +85 -0
- package/lib/hooks/useRecentContexts.spec.js +139 -0
- package/lib/hooks/useResize.spec.js +37 -0
- package/lib/hooks/useSkillsCatalog.spec.js +88 -0
- package/lib/hooks/useSlashCommands.spec.js +139 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +101 -0
- package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
- package/lib/hooks/useStreamResponse.spec.js +199 -0
- package/lib/hooks/useT.spec.js +20 -0
- package/lib/hooks/useToggle.spec.js +33 -0
- package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +171 -0
- package/lib/index.js +5 -2
- package/lib/lang/br/index.js +26 -7
- package/lib/lang/en/index.js +26 -7
- package/lib/lang/es/index.js +26 -7
- package/lib/lang/fr/index.js +26 -7
- package/lib/services/appcues.spec.js +37 -0
- package/lib/services/maia/Access/updateAccess.spec.js +137 -0
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
- package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +56 -0
- package/lib/services/maia/Actions/getSlashCommands.spec.js +91 -0
- package/lib/services/maia/Agents/connectors.spec.js +496 -0
- package/lib/services/maia/Agents/createAgent.spec.js +55 -0
- package/lib/services/maia/Agents/deleteAgent.spec.js +57 -0
- package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
- package/lib/services/maia/Agents/getAgentById.spec.js +190 -0
- package/lib/services/maia/Agents/getAgentModels.spec.js +190 -0
- package/lib/services/maia/Agents/getAgentSuggestions.spec.js +89 -0
- package/lib/services/maia/Agents/getAgents.helpers.js +241 -0
- package/lib/services/maia/Agents/getAgents.helpers.spec.js +325 -0
- package/lib/services/maia/Agents/getAgents.js +90 -282
- package/lib/services/maia/Agents/getAgents.spec.js +1135 -0
- package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
- package/lib/services/maia/Agents/toggleFavorite.spec.js +59 -0
- package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
- package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
- package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
- package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
- package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
- package/lib/services/maia/Chats/patchChat.spec.js +41 -0
- package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
- package/lib/services/maia/Knowledge/delete.spec.js +45 -0
- package/lib/services/maia/Knowledge/download.spec.js +78 -0
- package/lib/services/maia/Knowledge/save.spec.js +58 -0
- package/lib/services/maia/Orchestrator/orchestrator.helpers.js +130 -0
- package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +225 -0
- package/lib/services/maia/Orchestrator/orchestrator.js +38 -121
- package/lib/services/maia/Orchestrator/orchestrator.spec.js +181 -0
- package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
- package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +103 -0
- package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
- package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
- package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
- package/lib/services/maia/Skills/createSkill.spec.js +68 -0
- package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
- package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
- package/lib/services/maia/Skills/getSkills.spec.js +152 -0
- package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
- package/lib/services/maia/client.spec.js +56 -0
- package/lib/services/utils/fetchCOR.spec.js +211 -0
- package/lib/services/utils/getCookie.spec.js +20 -0
- package/lib/services/utils/mapChatMessages.helpers.js +223 -0
- package/lib/services/utils/mapChatMessages.helpers.spec.js +336 -0
- package/lib/services/utils/mapChatMessages.js +25 -254
- package/lib/services/utils/mapChatMessages.spec.js +254 -0
- package/lib/store/chatsSidebarOptimistic.spec.js +145 -0
- package/lib/store/maiaLastChatPersistence.spec.js +22 -0
- package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
- package/lib/store/sessions/sessionNotificationSound.spec.js +145 -0
- package/lib/store/sessions/sessionNotifications.helpers.js +45 -0
- package/lib/store/sessions/sessionNotifications.helpers.spec.js +63 -0
- package/lib/store/sessions/sessionNotifications.js +35 -41
- package/lib/store/sessions/sessionNotifications.spec.js +106 -0
- package/lib/store/sessions/sessionStreamManager.helpers.js +134 -0
- package/lib/store/sessions/sessionStreamManager.helpers.spec.js +177 -0
- package/lib/store/sessions/sessionStreamManager.js +209 -277
- package/lib/store/sessions/sessionStreamManager.spec.js +939 -0
- package/lib/store/sessions/sessions.types.spec.js +16 -0
- package/lib/store/sessions/useSessionsStore.spec.js +135 -0
- package/lib/store/useChatsStore.spec.js +619 -0
- package/lib/store/useFaqsStore.spec.js +57 -0
- package/lib/styles/cascade.js +29 -3
- package/lib/styles/transitions.js +3 -1
- package/lib/test/mockSseStream.js +121 -0
- package/lib/test/streamdownCodeMock.js +6 -0
- package/lib/test/streamdownMock.js +12 -0
- package/lib/types/Chat.js +1 -1
- package/lib/types/agentModal.js +1 -1
- package/lib/types/global.d.js +1 -1
- package/lib/types/reasoning.js +1 -1
- package/lib/utils/actionCategoryMap.spec.js +18 -0
- package/lib/utils/agentDisplayName.spec.js +48 -0
- package/lib/utils/autoApproveStorage.spec.js +25 -0
- package/lib/utils/chatInputFiles.spec.js +39 -0
- package/lib/utils/contextMentionIcons.spec.js +41 -0
- package/lib/utils/contextMentionLabel.spec.js +13 -0
- package/lib/utils/contextMentionTriggers.spec.js +44 -0
- package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
- package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
- package/lib/utils/entityLinkRender.spec.js +72 -0
- package/lib/utils/fileDownloadHelper.spec.js +67 -0
- package/lib/utils/formatQuickActionMessage.spec.js +27 -0
- package/lib/utils/formatUnreadCount.spec.js +12 -0
- package/lib/utils/getUnitFileSize.spec.js +18 -0
- package/lib/utils/hitlAnalytics.spec.js +136 -0
- package/lib/utils/hoursPlannerQuickActionType.js +74 -1
- package/lib/utils/hoursPlannerQuickActionType.spec.js +64 -0
- package/lib/utils/imagePreprocessor.helpers.js +28 -0
- package/lib/utils/imagePreprocessor.helpers.spec.js +28 -0
- package/lib/utils/imagePreprocessor.js +12 -37
- package/lib/utils/imagePreprocessor.spec.js +112 -0
- package/lib/utils/maiaPageRoute.js +24 -0
- package/lib/utils/maiaPageRoute.spec.js +23 -0
- package/lib/utils/mapBackendLang.spec.js +19 -0
- package/lib/utils/navigateContextEntity.spec.js +50 -0
- package/lib/utils/normalizeAgentConnectors.spec.js +98 -0
- package/lib/utils/openTaskInCorPanel.spec.js +43 -0
- package/lib/utils/orchestratorSubagents.spec.js +32 -0
- package/lib/utils/reasoningMappers.spec.js +103 -0
- package/lib/utils/recentContextsHomeLimit.spec.js +32 -0
- package/lib/utils/renderContextMentions.helpers.js +110 -0
- package/lib/utils/renderContextMentions.helpers.spec.js +87 -0
- package/lib/utils/renderContextMentions.js +4 -110
- package/lib/utils/renderContextMentions.spec.js +268 -0
- package/lib/utils/retryCompletion.spec.js +181 -0
- package/lib/utils/skillContentSize.spec.js +13 -0
- package/lib/utils/slashCommandMarker.spec.js +43 -0
- package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
- package/lib/utils/sseStreamContent.spec.js +31 -0
- package/lib/utils/streamActivityMessages.helpers.js +223 -0
- package/lib/utils/streamActivityMessages.helpers.spec.js +84 -0
- package/lib/utils/streamActivityMessages.js +33 -238
- package/lib/utils/streamActivityMessages.spec.js +336 -0
- package/lib/utils/validateTrimmedFields.spec.js +26 -0
- package/package.json +2 -2
- package/README.md +0 -2
- package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.js +0 -53
- package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.styles.js +0 -8
- package/lib/components/atoms/ContextCompactedNotice/index.js +0 -2
- package/lib/types/contextCompaction.js +0 -48
- package/lib/types/jest-dom.d.js +0 -2
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { appendKnowledgeAttachments, canPreviewKnowledgeAttachment, computeAttachmentsTotalSize, createClosedKnowledgeFileErrorModalState, getUniqueString, processKnowledgeFiles, removeKnowledgeAttachmentByIndex, resolveKnowledgeAttachmentAtIndex, resolveKnowledgeFileErrorModalState, shouldBlockKnowledgeUpload, shouldEnableKnowledgeDragState, shouldHandleKnowledgeAttachmentAction, shouldProcessKnowledgeFileInput, shouldRunKnowledgeDownloadEffect } from './AbmKnowledgeSection.helpers';
|
|
2
|
+
var makeFile = function makeFile(name, size) {
|
|
3
|
+
var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'text/plain';
|
|
4
|
+
return new File(['x'.repeat(size)], name, {
|
|
5
|
+
type: type
|
|
6
|
+
});
|
|
7
|
+
};
|
|
8
|
+
describe('AbmKnowledgeSection.helpers', function () {
|
|
9
|
+
describe('getUniqueString', function () {
|
|
10
|
+
it('returns the original name when it is available', function () {
|
|
11
|
+
expect(getUniqueString(['other.pdf'], 'manual.pdf')).toBe('manual.pdf');
|
|
12
|
+
});
|
|
13
|
+
it('appends a counter when the name already exists', function () {
|
|
14
|
+
expect(getUniqueString(['manual.pdf'], 'manual.pdf')).toBe('manual(1).pdf');
|
|
15
|
+
expect(getUniqueString(['manual.pdf', 'manual(1).pdf'], 'manual.pdf')).toBe('manual(2).pdf');
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
describe('computeAttachmentsTotalSize', function () {
|
|
19
|
+
it('sums numeric sizes and ignores invalid values', function () {
|
|
20
|
+
expect(computeAttachmentsTotalSize([{
|
|
21
|
+
size: 100
|
|
22
|
+
}, {
|
|
23
|
+
size: '50'
|
|
24
|
+
}, {
|
|
25
|
+
size: Number.NaN
|
|
26
|
+
}])).toBe(150);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe('processKnowledgeFiles', function () {
|
|
30
|
+
it('accepts valid files within the total size limit', function () {
|
|
31
|
+
var result = processKnowledgeFiles({
|
|
32
|
+
files: [makeFile('notes.txt', 1024)],
|
|
33
|
+
existingAttachments: [],
|
|
34
|
+
allowedExtensions: ['.txt'],
|
|
35
|
+
fileTypes: {
|
|
36
|
+
'.txt': 'text/plain'
|
|
37
|
+
},
|
|
38
|
+
createId: function createId() {
|
|
39
|
+
return 'file-1';
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
expect(result.hasErrors).toBe(false);
|
|
43
|
+
expect(result.insertedFiles).toHaveLength(1);
|
|
44
|
+
expect(result.insertedFiles[0]).toMatchObject({
|
|
45
|
+
name: 'notes.txt',
|
|
46
|
+
status: 'started'
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
it('rejects invalid extensions and files that exceed the total limit', function () {
|
|
50
|
+
var result = processKnowledgeFiles({
|
|
51
|
+
files: [makeFile('bad.exe', 100), makeFile('big.txt', 200)],
|
|
52
|
+
existingAttachments: [],
|
|
53
|
+
allowedExtensions: ['.txt'],
|
|
54
|
+
fileTypes: {
|
|
55
|
+
'.txt': 'text/plain'
|
|
56
|
+
},
|
|
57
|
+
maxTotalSize: 100
|
|
58
|
+
});
|
|
59
|
+
expect(result.invalidExtensionFiles).toEqual(['bad.exe']);
|
|
60
|
+
expect(result.exceededFiles).toEqual(['big.txt']);
|
|
61
|
+
expect(result.hasErrors).toBe(true);
|
|
62
|
+
expect(result.insertedFiles).toHaveLength(0);
|
|
63
|
+
});
|
|
64
|
+
it('deduplicates file names against existing attachments', function () {
|
|
65
|
+
var _result$insertedFiles;
|
|
66
|
+
var existingFile = makeFile('notes.txt', 100);
|
|
67
|
+
var result = processKnowledgeFiles({
|
|
68
|
+
files: [makeFile('notes.txt', 100)],
|
|
69
|
+
existingAttachments: [{
|
|
70
|
+
id: '1',
|
|
71
|
+
name: 'notes.txt',
|
|
72
|
+
size: 100,
|
|
73
|
+
type: 'text/plain',
|
|
74
|
+
file: existingFile,
|
|
75
|
+
status: 'done'
|
|
76
|
+
}],
|
|
77
|
+
allowedExtensions: ['.txt'],
|
|
78
|
+
fileTypes: {
|
|
79
|
+
'.txt': 'text/plain'
|
|
80
|
+
},
|
|
81
|
+
createId: function createId() {
|
|
82
|
+
return 'file-2';
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
expect((_result$insertedFiles = result.insertedFiles[0]) === null || _result$insertedFiles === void 0 ? void 0 : _result$insertedFiles.name).toBe('notes(1).txt');
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
describe('upload interaction helpers', function () {
|
|
89
|
+
it('guards upload, drag and file input processing', function () {
|
|
90
|
+
expect(shouldBlockKnowledgeUpload(true)).toBe(true);
|
|
91
|
+
expect(shouldEnableKnowledgeDragState(true)).toBe(false);
|
|
92
|
+
expect(shouldProcessKnowledgeFileInput(null)).toBe(false);
|
|
93
|
+
expect(shouldProcessKnowledgeFileInput({
|
|
94
|
+
length: 1
|
|
95
|
+
})).toBe(true);
|
|
96
|
+
expect(shouldHandleKnowledgeAttachmentAction(true)).toBe(false);
|
|
97
|
+
});
|
|
98
|
+
it('merges attachments and resolves indices', function () {
|
|
99
|
+
var attachment = {
|
|
100
|
+
id: '1',
|
|
101
|
+
name: 'a.pdf',
|
|
102
|
+
size: 1,
|
|
103
|
+
type: 'application/pdf',
|
|
104
|
+
file: makeFile('a.pdf', 1, 'application/pdf')
|
|
105
|
+
};
|
|
106
|
+
expect(appendKnowledgeAttachments([], [attachment])).toHaveLength(1);
|
|
107
|
+
expect(appendKnowledgeAttachments(null, [attachment])).toHaveLength(1);
|
|
108
|
+
expect(removeKnowledgeAttachmentByIndex([attachment], 0)).toEqual([]);
|
|
109
|
+
expect(removeKnowledgeAttachmentByIndex([attachment], 3)).toBeNull();
|
|
110
|
+
expect(resolveKnowledgeAttachmentAtIndex([attachment], 0)).toEqual(attachment);
|
|
111
|
+
expect(resolveKnowledgeAttachmentAtIndex([attachment], 9)).toBeNull();
|
|
112
|
+
});
|
|
113
|
+
it('builds modal states and download effect guard', function () {
|
|
114
|
+
expect(resolveKnowledgeFileErrorModalState({
|
|
115
|
+
exceededFiles: ['a'],
|
|
116
|
+
invalidExtensionFiles: ['b']
|
|
117
|
+
})).toMatchObject({
|
|
118
|
+
isOpen: true,
|
|
119
|
+
exceededFiles: ['a']
|
|
120
|
+
});
|
|
121
|
+
expect(createClosedKnowledgeFileErrorModalState()).toMatchObject({
|
|
122
|
+
isOpen: false
|
|
123
|
+
});
|
|
124
|
+
expect(shouldRunKnowledgeDownloadEffect({
|
|
125
|
+
blob: new Blob([]),
|
|
126
|
+
filename: 'a.pdf'
|
|
127
|
+
}, null, false)).toBe(true);
|
|
128
|
+
expect(shouldRunKnowledgeDownloadEffect(null, 'err', false)).toBe(false);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
describe('canPreviewKnowledgeAttachment', function () {
|
|
132
|
+
it('allows preview for local files and rejects failed uploads', function () {
|
|
133
|
+
expect(canPreviewKnowledgeAttachment({
|
|
134
|
+
id: '1',
|
|
135
|
+
name: 'a.pdf',
|
|
136
|
+
size: 1,
|
|
137
|
+
type: 'application/pdf',
|
|
138
|
+
file: makeFile('a.pdf', 1, 'application/pdf')
|
|
139
|
+
})).toBe(true);
|
|
140
|
+
expect(canPreviewKnowledgeAttachment({
|
|
141
|
+
id: '2',
|
|
142
|
+
name: 'b.pdf',
|
|
143
|
+
size: 1,
|
|
144
|
+
type: 'application/pdf',
|
|
145
|
+
status: 'failed',
|
|
146
|
+
file: makeFile('b.pdf', 1, 'application/pdf')
|
|
147
|
+
})).toBe(false);
|
|
148
|
+
expect(canPreviewKnowledgeAttachment({
|
|
149
|
+
id: '3',
|
|
150
|
+
name: 'remote.pdf',
|
|
151
|
+
size: 1,
|
|
152
|
+
type: 'application/pdf',
|
|
153
|
+
url_original: 'https://cdn/remote.pdf'
|
|
154
|
+
})).toBe(true);
|
|
155
|
+
expect(canPreviewKnowledgeAttachment({
|
|
156
|
+
id: '4',
|
|
157
|
+
name: 'thumb.pdf',
|
|
158
|
+
size: 1,
|
|
159
|
+
type: 'application/pdf',
|
|
160
|
+
url_thumbnail: 'https://cdn/thumb.png'
|
|
161
|
+
})).toBe(true);
|
|
162
|
+
expect(canPreviewKnowledgeAttachment({
|
|
163
|
+
id: '5',
|
|
164
|
+
name: 'local-copy.pdf',
|
|
165
|
+
size: 1,
|
|
166
|
+
type: 'application/pdf',
|
|
167
|
+
originalFile: makeFile('local-copy.pdf', 1, 'application/pdf')
|
|
168
|
+
})).toBe(true);
|
|
169
|
+
});
|
|
170
|
+
it('deduplicates names without extension', function () {
|
|
171
|
+
expect(getUniqueString(['readme'], 'readme')).toBe('readme(1)');
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcHBlbmRLbm93bGVkZ2VBdHRhY2htZW50cyIsImNhblByZXZpZXdLbm93bGVkZ2VBdHRhY2htZW50IiwiY29tcHV0ZUF0dGFjaG1lbnRzVG90YWxTaXplIiwiY3JlYXRlQ2xvc2VkS25vd2xlZGdlRmlsZUVycm9yTW9kYWxTdGF0ZSIsImdldFVuaXF1ZVN0cmluZyIsInByb2Nlc3NLbm93bGVkZ2VGaWxlcyIsInJlbW92ZUtub3dsZWRnZUF0dGFjaG1lbnRCeUluZGV4IiwicmVzb2x2ZUtub3dsZWRnZUF0dGFjaG1lbnRBdEluZGV4IiwicmVzb2x2ZUtub3dsZWRnZUZpbGVFcnJvck1vZGFsU3RhdGUiLCJzaG91bGRCbG9ja0tub3dsZWRnZVVwbG9hZCIsInNob3VsZEVuYWJsZUtub3dsZWRnZURyYWdTdGF0ZSIsInNob3VsZEhhbmRsZUtub3dsZWRnZUF0dGFjaG1lbnRBY3Rpb24iLCJzaG91bGRQcm9jZXNzS25vd2xlZGdlRmlsZUlucHV0Iiwic2hvdWxkUnVuS25vd2xlZGdlRG93bmxvYWRFZmZlY3QiLCJtYWtlRmlsZSIsIm5hbWUiLCJzaXplIiwidHlwZSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIkZpbGUiLCJyZXBlYXQiLCJkZXNjcmliZSIsIml0IiwiZXhwZWN0IiwidG9CZSIsIk51bWJlciIsIk5hTiIsInJlc3VsdCIsImZpbGVzIiwiZXhpc3RpbmdBdHRhY2htZW50cyIsImFsbG93ZWRFeHRlbnNpb25zIiwiZmlsZVR5cGVzIiwiY3JlYXRlSWQiLCJoYXNFcnJvcnMiLCJpbnNlcnRlZEZpbGVzIiwidG9IYXZlTGVuZ3RoIiwidG9NYXRjaE9iamVjdCIsInN0YXR1cyIsIm1heFRvdGFsU2l6ZSIsImludmFsaWRFeHRlbnNpb25GaWxlcyIsInRvRXF1YWwiLCJleGNlZWRlZEZpbGVzIiwiX3Jlc3VsdCRpbnNlcnRlZEZpbGVzIiwiZXhpc3RpbmdGaWxlIiwiaWQiLCJmaWxlIiwiYXR0YWNobWVudCIsInRvQmVOdWxsIiwiaXNPcGVuIiwiYmxvYiIsIkJsb2IiLCJmaWxlbmFtZSIsInVybF9vcmlnaW5hbCIsInVybF90aHVtYm5haWwiLCJvcmlnaW5hbEZpbGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQWJtU2VjdGlvbi9BYm1Lbm93bGVkZ2VTZWN0aW9uLmhlbHBlcnMuc3BlYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhcHBlbmRLbm93bGVkZ2VBdHRhY2htZW50cyxcbiAgY2FuUHJldmlld0tub3dsZWRnZUF0dGFjaG1lbnQsXG4gIGNvbXB1dGVBdHRhY2htZW50c1RvdGFsU2l6ZSxcbiAgY3JlYXRlQ2xvc2VkS25vd2xlZGdlRmlsZUVycm9yTW9kYWxTdGF0ZSxcbiAgZ2V0VW5pcXVlU3RyaW5nLFxuICBwcm9jZXNzS25vd2xlZGdlRmlsZXMsXG4gIHJlbW92ZUtub3dsZWRnZUF0dGFjaG1lbnRCeUluZGV4LFxuICByZXNvbHZlS25vd2xlZGdlQXR0YWNobWVudEF0SW5kZXgsXG4gIHJlc29sdmVLbm93bGVkZ2VGaWxlRXJyb3JNb2RhbFN0YXRlLFxuICBzaG91bGRCbG9ja0tub3dsZWRnZVVwbG9hZCxcbiAgc2hvdWxkRW5hYmxlS25vd2xlZGdlRHJhZ1N0YXRlLFxuICBzaG91bGRIYW5kbGVLbm93bGVkZ2VBdHRhY2htZW50QWN0aW9uLFxuICBzaG91bGRQcm9jZXNzS25vd2xlZGdlRmlsZUlucHV0LFxuICBzaG91bGRSdW5Lbm93bGVkZ2VEb3dubG9hZEVmZmVjdCxcbn0gZnJvbSAnLi9BYm1Lbm93bGVkZ2VTZWN0aW9uLmhlbHBlcnMnXG5cbmNvbnN0IG1ha2VGaWxlID0gKG5hbWU6IHN0cmluZywgc2l6ZTogbnVtYmVyLCB0eXBlID0gJ3RleHQvcGxhaW4nKSA9PiBuZXcgRmlsZShbJ3gnLnJlcGVhdChzaXplKV0sIG5hbWUsIHsgdHlwZSB9KVxuXG5kZXNjcmliZSgnQWJtS25vd2xlZGdlU2VjdGlvbi5oZWxwZXJzJywgKCkgPT4ge1xuICBkZXNjcmliZSgnZ2V0VW5pcXVlU3RyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIHRoZSBvcmlnaW5hbCBuYW1lIHdoZW4gaXQgaXMgYXZhaWxhYmxlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGdldFVuaXF1ZVN0cmluZyhbJ290aGVyLnBkZiddLCAnbWFudWFsLnBkZicpKS50b0JlKCdtYW51YWwucGRmJylcbiAgICB9KVxuXG4gICAgaXQoJ2FwcGVuZHMgYSBjb3VudGVyIHdoZW4gdGhlIG5hbWUgYWxyZWFkeSBleGlzdHMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZ2V0VW5pcXVlU3RyaW5nKFsnbWFudWFsLnBkZiddLCAnbWFudWFsLnBkZicpKS50b0JlKCdtYW51YWwoMSkucGRmJylcbiAgICAgIGV4cGVjdChnZXRVbmlxdWVTdHJpbmcoWydtYW51YWwucGRmJywgJ21hbnVhbCgxKS5wZGYnXSwgJ21hbnVhbC5wZGYnKSkudG9CZSgnbWFudWFsKDIpLnBkZicpXG4gICAgfSlcbiAgfSlcblxuICBkZXNjcmliZSgnY29tcHV0ZUF0dGFjaG1lbnRzVG90YWxTaXplJywgKCkgPT4ge1xuICAgIGl0KCdzdW1zIG51bWVyaWMgc2l6ZXMgYW5kIGlnbm9yZXMgaW52YWxpZCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIGNvbXB1dGVBdHRhY2htZW50c1RvdGFsU2l6ZShbeyBzaXplOiAxMDAgfSwgeyBzaXplOiAnNTAnIGFzIHVua25vd24gYXMgbnVtYmVyIH0sIHsgc2l6ZTogTnVtYmVyLk5hTiB9XSlcbiAgICAgICkudG9CZSgxNTApXG4gICAgfSlcbiAgfSlcblxuICBkZXNjcmliZSgncHJvY2Vzc0tub3dsZWRnZUZpbGVzJywgKCkgPT4ge1xuICAgIGl0KCdhY2NlcHRzIHZhbGlkIGZpbGVzIHdpdGhpbiB0aGUgdG90YWwgc2l6ZSBsaW1pdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHByb2Nlc3NLbm93bGVkZ2VGaWxlcyh7XG4gICAgICAgIGZpbGVzOiBbbWFrZUZpbGUoJ25vdGVzLnR4dCcsIDEwMjQpXSxcbiAgICAgICAgZXhpc3RpbmdBdHRhY2htZW50czogW10sXG4gICAgICAgIGFsbG93ZWRFeHRlbnNpb25zOiBbJy50eHQnXSxcbiAgICAgICAgZmlsZVR5cGVzOiB7ICcudHh0JzogJ3RleHQvcGxhaW4nIH0sXG4gICAgICAgIGNyZWF0ZUlkOiAoKSA9PiAnZmlsZS0xJyxcbiAgICAgIH0pXG5cbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzRXJyb3JzKS50b0JlKGZhbHNlKVxuICAgICAgZXhwZWN0KHJlc3VsdC5pbnNlcnRlZEZpbGVzKS50b0hhdmVMZW5ndGgoMSlcbiAgICAgIGV4cGVjdChyZXN1bHQuaW5zZXJ0ZWRGaWxlc1swXSkudG9NYXRjaE9iamVjdCh7IG5hbWU6ICdub3Rlcy50eHQnLCBzdGF0dXM6ICdzdGFydGVkJyB9KVxuICAgIH0pXG5cbiAgICBpdCgncmVqZWN0cyBpbnZhbGlkIGV4dGVuc2lvbnMgYW5kIGZpbGVzIHRoYXQgZXhjZWVkIHRoZSB0b3RhbCBsaW1pdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHByb2Nlc3NLbm93bGVkZ2VGaWxlcyh7XG4gICAgICAgIGZpbGVzOiBbbWFrZUZpbGUoJ2JhZC5leGUnLCAxMDApLCBtYWtlRmlsZSgnYmlnLnR4dCcsIDIwMCldLFxuICAgICAgICBleGlzdGluZ0F0dGFjaG1lbnRzOiBbXSxcbiAgICAgICAgYWxsb3dlZEV4dGVuc2lvbnM6IFsnLnR4dCddLFxuICAgICAgICBmaWxlVHlwZXM6IHsgJy50eHQnOiAndGV4dC9wbGFpbicgfSxcbiAgICAgICAgbWF4VG90YWxTaXplOiAxMDAsXG4gICAgICB9KVxuXG4gICAgICBleHBlY3QocmVzdWx0LmludmFsaWRFeHRlbnNpb25GaWxlcykudG9FcXVhbChbJ2JhZC5leGUnXSlcbiAgICAgIGV4cGVjdChyZXN1bHQuZXhjZWVkZWRGaWxlcykudG9FcXVhbChbJ2JpZy50eHQnXSlcbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzRXJyb3JzKS50b0JlKHRydWUpXG4gICAgICBleHBlY3QocmVzdWx0Lmluc2VydGVkRmlsZXMpLnRvSGF2ZUxlbmd0aCgwKVxuICAgIH0pXG5cbiAgICBpdCgnZGVkdXBsaWNhdGVzIGZpbGUgbmFtZXMgYWdhaW5zdCBleGlzdGluZyBhdHRhY2htZW50cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nRmlsZSA9IG1ha2VGaWxlKCdub3Rlcy50eHQnLCAxMDApXG4gICAgICBjb25zdCByZXN1bHQgPSBwcm9jZXNzS25vd2xlZGdlRmlsZXMoe1xuICAgICAgICBmaWxlczogW21ha2VGaWxlKCdub3Rlcy50eHQnLCAxMDApXSxcbiAgICAgICAgZXhpc3RpbmdBdHRhY2htZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgICBuYW1lOiAnbm90ZXMudHh0JyxcbiAgICAgICAgICAgIHNpemU6IDEwMCxcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgIGZpbGU6IGV4aXN0aW5nRmlsZSxcbiAgICAgICAgICAgIHN0YXR1czogJ2RvbmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGFsbG93ZWRFeHRlbnNpb25zOiBbJy50eHQnXSxcbiAgICAgICAgZmlsZVR5cGVzOiB7ICcudHh0JzogJ3RleHQvcGxhaW4nIH0sXG4gICAgICAgIGNyZWF0ZUlkOiAoKSA9PiAnZmlsZS0yJyxcbiAgICAgIH0pXG5cbiAgICAgIGV4cGVjdChyZXN1bHQuaW5zZXJ0ZWRGaWxlc1swXT8ubmFtZSkudG9CZSgnbm90ZXMoMSkudHh0JylcbiAgICB9KVxuICB9KVxuXG4gIGRlc2NyaWJlKCd1cGxvYWQgaW50ZXJhY3Rpb24gaGVscGVycycsICgpID0+IHtcbiAgICBpdCgnZ3VhcmRzIHVwbG9hZCwgZHJhZyBhbmQgZmlsZSBpbnB1dCBwcm9jZXNzaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHNob3VsZEJsb2NrS25vd2xlZGdlVXBsb2FkKHRydWUpKS50b0JlKHRydWUpXG4gICAgICBleHBlY3Qoc2hvdWxkRW5hYmxlS25vd2xlZGdlRHJhZ1N0YXRlKHRydWUpKS50b0JlKGZhbHNlKVxuICAgICAgZXhwZWN0KHNob3VsZFByb2Nlc3NLbm93bGVkZ2VGaWxlSW5wdXQobnVsbCkpLnRvQmUoZmFsc2UpXG4gICAgICBleHBlY3Qoc2hvdWxkUHJvY2Vzc0tub3dsZWRnZUZpbGVJbnB1dCh7IGxlbmd0aDogMSB9IGFzIEZpbGVMaXN0KSkudG9CZSh0cnVlKVxuICAgICAgZXhwZWN0KHNob3VsZEhhbmRsZUtub3dsZWRnZUF0dGFjaG1lbnRBY3Rpb24odHJ1ZSkpLnRvQmUoZmFsc2UpXG4gICAgfSlcblxuICAgIGl0KCdtZXJnZXMgYXR0YWNobWVudHMgYW5kIHJlc29sdmVzIGluZGljZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhdHRhY2htZW50ID0ge1xuICAgICAgICBpZDogJzEnLFxuICAgICAgICBuYW1lOiAnYS5wZGYnLFxuICAgICAgICBzaXplOiAxLFxuICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vcGRmJyxcbiAgICAgICAgZmlsZTogbWFrZUZpbGUoJ2EucGRmJywgMSwgJ2FwcGxpY2F0aW9uL3BkZicpLFxuICAgICAgfVxuICAgICAgZXhwZWN0KGFwcGVuZEtub3dsZWRnZUF0dGFjaG1lbnRzKFtdLCBbYXR0YWNobWVudF0pKS50b0hhdmVMZW5ndGgoMSlcbiAgICAgIGV4cGVjdChhcHBlbmRLbm93bGVkZ2VBdHRhY2htZW50cyhudWxsIGFzIHVua25vd24gYXMgW10sIFthdHRhY2htZW50XSkpLnRvSGF2ZUxlbmd0aCgxKVxuICAgICAgZXhwZWN0KHJlbW92ZUtub3dsZWRnZUF0dGFjaG1lbnRCeUluZGV4KFthdHRhY2htZW50XSwgMCkpLnRvRXF1YWwoW10pXG4gICAgICBleHBlY3QocmVtb3ZlS25vd2xlZGdlQXR0YWNobWVudEJ5SW5kZXgoW2F0dGFjaG1lbnRdLCAzKSkudG9CZU51bGwoKVxuICAgICAgZXhwZWN0KHJlc29sdmVLbm93bGVkZ2VBdHRhY2htZW50QXRJbmRleChbYXR0YWNobWVudF0sIDApKS50b0VxdWFsKGF0dGFjaG1lbnQpXG4gICAgICBleHBlY3QocmVzb2x2ZUtub3dsZWRnZUF0dGFjaG1lbnRBdEluZGV4KFthdHRhY2htZW50XSwgOSkpLnRvQmVOdWxsKClcbiAgICB9KVxuXG4gICAgaXQoJ2J1aWxkcyBtb2RhbCBzdGF0ZXMgYW5kIGRvd25sb2FkIGVmZmVjdCBndWFyZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXNvbHZlS25vd2xlZGdlRmlsZUVycm9yTW9kYWxTdGF0ZSh7IGV4Y2VlZGVkRmlsZXM6IFsnYSddLCBpbnZhbGlkRXh0ZW5zaW9uRmlsZXM6IFsnYiddIH0pKS50b01hdGNoT2JqZWN0KFxuICAgICAgICB7XG4gICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgIGV4Y2VlZGVkRmlsZXM6IFsnYSddLFxuICAgICAgICB9XG4gICAgICApXG4gICAgICBleHBlY3QoY3JlYXRlQ2xvc2VkS25vd2xlZGdlRmlsZUVycm9yTW9kYWxTdGF0ZSgpKS50b01hdGNoT2JqZWN0KHsgaXNPcGVuOiBmYWxzZSB9KVxuICAgICAgZXhwZWN0KHNob3VsZFJ1bktub3dsZWRnZURvd25sb2FkRWZmZWN0KHsgYmxvYjogbmV3IEJsb2IoW10pLCBmaWxlbmFtZTogJ2EucGRmJyB9LCBudWxsLCBmYWxzZSkpLnRvQmUodHJ1ZSlcbiAgICAgIGV4cGVjdChzaG91bGRSdW5Lbm93bGVkZ2VEb3dubG9hZEVmZmVjdChudWxsLCAnZXJyJywgZmFsc2UpKS50b0JlKGZhbHNlKVxuICAgIH0pXG4gIH0pXG5cbiAgZGVzY3JpYmUoJ2NhblByZXZpZXdLbm93bGVkZ2VBdHRhY2htZW50JywgKCkgPT4ge1xuICAgIGl0KCdhbGxvd3MgcHJldmlldyBmb3IgbG9jYWwgZmlsZXMgYW5kIHJlamVjdHMgZmFpbGVkIHVwbG9hZHMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIGNhblByZXZpZXdLbm93bGVkZ2VBdHRhY2htZW50KHtcbiAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgIG5hbWU6ICdhLnBkZicsXG4gICAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vcGRmJyxcbiAgICAgICAgICBmaWxlOiBtYWtlRmlsZSgnYS5wZGYnLCAxLCAnYXBwbGljYXRpb24vcGRmJyksXG4gICAgICAgIH0pXG4gICAgICApLnRvQmUodHJ1ZSlcblxuICAgICAgZXhwZWN0KFxuICAgICAgICBjYW5QcmV2aWV3S25vd2xlZGdlQXR0YWNobWVudCh7XG4gICAgICAgICAgaWQ6ICcyJyxcbiAgICAgICAgICBuYW1lOiAnYi5wZGYnLFxuICAgICAgICAgIHNpemU6IDEsXG4gICAgICAgICAgdHlwZTogJ2FwcGxpY2F0aW9uL3BkZicsXG4gICAgICAgICAgc3RhdHVzOiAnZmFpbGVkJyxcbiAgICAgICAgICBmaWxlOiBtYWtlRmlsZSgnYi5wZGYnLCAxLCAnYXBwbGljYXRpb24vcGRmJyksXG4gICAgICAgIH0pXG4gICAgICApLnRvQmUoZmFsc2UpXG5cbiAgICAgIGV4cGVjdChcbiAgICAgICAgY2FuUHJldmlld0tub3dsZWRnZUF0dGFjaG1lbnQoe1xuICAgICAgICAgIGlkOiAnMycsXG4gICAgICAgICAgbmFtZTogJ3JlbW90ZS5wZGYnLFxuICAgICAgICAgIHNpemU6IDEsXG4gICAgICAgICAgdHlwZTogJ2FwcGxpY2F0aW9uL3BkZicsXG4gICAgICAgICAgdXJsX29yaWdpbmFsOiAnaHR0cHM6Ly9jZG4vcmVtb3RlLnBkZicsXG4gICAgICAgIH0pXG4gICAgICApLnRvQmUodHJ1ZSlcblxuICAgICAgZXhwZWN0KFxuICAgICAgICBjYW5QcmV2aWV3S25vd2xlZGdlQXR0YWNobWVudCh7XG4gICAgICAgICAgaWQ6ICc0JyxcbiAgICAgICAgICBuYW1lOiAndGh1bWIucGRmJyxcbiAgICAgICAgICBzaXplOiAxLFxuICAgICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnLFxuICAgICAgICAgIHVybF90aHVtYm5haWw6ICdodHRwczovL2Nkbi90aHVtYi5wbmcnLFxuICAgICAgICB9KVxuICAgICAgKS50b0JlKHRydWUpXG5cbiAgICAgIGV4cGVjdChcbiAgICAgICAgY2FuUHJldmlld0tub3dsZWRnZUF0dGFjaG1lbnQoe1xuICAgICAgICAgIGlkOiAnNScsXG4gICAgICAgICAgbmFtZTogJ2xvY2FsLWNvcHkucGRmJyxcbiAgICAgICAgICBzaXplOiAxLFxuICAgICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnLFxuICAgICAgICAgIG9yaWdpbmFsRmlsZTogbWFrZUZpbGUoJ2xvY2FsLWNvcHkucGRmJywgMSwgJ2FwcGxpY2F0aW9uL3BkZicpLFxuICAgICAgICB9KVxuICAgICAgKS50b0JlKHRydWUpXG4gICAgfSlcblxuICAgIGl0KCdkZWR1cGxpY2F0ZXMgbmFtZXMgd2l0aG91dCBleHRlbnNpb24nLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZ2V0VW5pcXVlU3RyaW5nKFsncmVhZG1lJ10sICdyZWFkbWUnKSkudG9CZSgncmVhZG1lKDEpJylcbiAgICB9KVxuICB9KVxufSlcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FDRUEsMEJBQTBCLEVBQzFCQyw2QkFBNkIsRUFDN0JDLDJCQUEyQixFQUMzQkMsd0NBQXdDLEVBQ3hDQyxlQUFlLEVBQ2ZDLHFCQUFxQixFQUNyQkMsZ0NBQWdDLEVBQ2hDQyxpQ0FBaUMsRUFDakNDLG1DQUFtQyxFQUNuQ0MsMEJBQTBCLEVBQzFCQyw4QkFBOEIsRUFDOUJDLHFDQUFxQyxFQUNyQ0MsK0JBQStCLEVBQy9CQyxnQ0FBZ0MsUUFDM0IsK0JBQStCO0FBRXRDLElBQU1DLFFBQVEsR0FBRyxTQUFYQSxRQUFRQSxDQUFJQyxJQUFZLEVBQUVDLElBQVk7RUFBQSxJQUFFQyxJQUFJLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLFlBQVk7RUFBQSxPQUFLLElBQUlHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQ0MsTUFBTSxDQUFDTixJQUFJLENBQUMsQ0FBQyxFQUFFRCxJQUFJLEVBQUU7SUFBRUUsSUFBSSxFQUFKQTtFQUFLLENBQUMsQ0FBQztBQUFBO0FBRWxITSxRQUFRLENBQUMsNkJBQTZCLEVBQUUsWUFBTTtFQUM1Q0EsUUFBUSxDQUFDLGlCQUFpQixFQUFFLFlBQU07SUFDaENDLEVBQUUsQ0FBQyxnREFBZ0QsRUFBRSxZQUFNO01BQ3pEQyxNQUFNLENBQUNyQixlQUFlLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDc0IsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUN6RSxDQUFDLENBQUM7SUFFRkYsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLFlBQU07TUFDekRDLE1BQU0sQ0FBQ3JCLGVBQWUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUNzQixJQUFJLENBQUMsZUFBZSxDQUFDO01BQzNFRCxNQUFNLENBQUNyQixlQUFlLENBQUMsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQ3NCLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUYsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0VBRUZILFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxZQUFNO0lBQzVDQyxFQUFFLENBQUMsK0NBQStDLEVBQUUsWUFBTTtNQUN4REMsTUFBTSxDQUNKdkIsMkJBQTJCLENBQUMsQ0FBQztRQUFFYyxJQUFJLEVBQUU7TUFBSSxDQUFDLEVBQUU7UUFBRUEsSUFBSSxFQUFFO01BQTBCLENBQUMsRUFBRTtRQUFFQSxJQUFJLEVBQUVXLE1BQU0sQ0FBQ0M7TUFBSSxDQUFDLENBQUMsQ0FDeEcsQ0FBQyxDQUFDRixJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2IsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0VBRUZILFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxZQUFNO0lBQ3RDQyxFQUFFLENBQUMsaURBQWlELEVBQUUsWUFBTTtNQUMxRCxJQUFNSyxNQUFNLEdBQUd4QixxQkFBcUIsQ0FBQztRQUNuQ3lCLEtBQUssRUFBRSxDQUFDaEIsUUFBUSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQ2lCLG1CQUFtQixFQUFFLEVBQUU7UUFDdkJDLGlCQUFpQixFQUFFLENBQUMsTUFBTSxDQUFDO1FBQzNCQyxTQUFTLEVBQUU7VUFBRSxNQUFNLEVBQUU7UUFBYSxDQUFDO1FBQ25DQyxRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBQTtVQUFBLE9BQVEsUUFBUTtRQUFBO01BQzFCLENBQUMsQ0FBQztNQUVGVCxNQUFNLENBQUNJLE1BQU0sQ0FBQ00sU0FBUyxDQUFDLENBQUNULElBQUksQ0FBQyxLQUFLLENBQUM7TUFDcENELE1BQU0sQ0FBQ0ksTUFBTSxDQUFDTyxhQUFhLENBQUMsQ0FBQ0MsWUFBWSxDQUFDLENBQUMsQ0FBQztNQUM1Q1osTUFBTSxDQUFDSSxNQUFNLENBQUNPLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDRSxhQUFhLENBQUM7UUFBRXZCLElBQUksRUFBRSxXQUFXO1FBQUV3QixNQUFNLEVBQUU7TUFBVSxDQUFDLENBQUM7SUFDekYsQ0FBQyxDQUFDO0lBRUZmLEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxZQUFNO01BQzNFLElBQU1LLE1BQU0sR0FBR3hCLHFCQUFxQixDQUFDO1FBQ25DeUIsS0FBSyxFQUFFLENBQUNoQixRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFQSxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNEaUIsbUJBQW1CLEVBQUUsRUFBRTtRQUN2QkMsaUJBQWlCLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDM0JDLFNBQVMsRUFBRTtVQUFFLE1BQU0sRUFBRTtRQUFhLENBQUM7UUFDbkNPLFlBQVksRUFBRTtNQUNoQixDQUFDLENBQUM7TUFFRmYsTUFBTSxDQUFDSSxNQUFNLENBQUNZLHFCQUFxQixDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ3pEakIsTUFBTSxDQUFDSSxNQUFNLENBQUNjLGFBQWEsQ0FBQyxDQUFDRCxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUNqRGpCLE1BQU0sQ0FBQ0ksTUFBTSxDQUFDTSxTQUFTLENBQUMsQ0FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQztNQUNuQ0QsTUFBTSxDQUFDSSxNQUFNLENBQUNPLGFBQWEsQ0FBQyxDQUFDQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FBQztJQUVGYixFQUFFLENBQUMsc0RBQXNELEVBQUUsWUFBTTtNQUFBLElBQUFvQixxQkFBQTtNQUMvRCxJQUFNQyxZQUFZLEdBQUcvQixRQUFRLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQztNQUMvQyxJQUFNZSxNQUFNLEdBQUd4QixxQkFBcUIsQ0FBQztRQUNuQ3lCLEtBQUssRUFBRSxDQUFDaEIsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNuQ2lCLG1CQUFtQixFQUFFLENBQ25CO1VBQ0VlLEVBQUUsRUFBRSxHQUFHO1VBQ1AvQixJQUFJLEVBQUUsV0FBVztVQUNqQkMsSUFBSSxFQUFFLEdBQUc7VUFDVEMsSUFBSSxFQUFFLFlBQVk7VUFDbEI4QixJQUFJLEVBQUVGLFlBQVk7VUFDbEJOLE1BQU0sRUFBRTtRQUNWLENBQUMsQ0FDRjtRQUNEUCxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUMzQkMsU0FBUyxFQUFFO1VBQUUsTUFBTSxFQUFFO1FBQWEsQ0FBQztRQUNuQ0MsUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUE7VUFBQSxPQUFRLFFBQVE7UUFBQTtNQUMxQixDQUFDLENBQUM7TUFFRlQsTUFBTSxFQUFBbUIscUJBQUEsR0FBQ2YsTUFBTSxDQUFDTyxhQUFhLENBQUMsQ0FBQyxDQUFDLGNBQUFRLHFCQUFBLHVCQUF2QkEscUJBQUEsQ0FBeUI3QixJQUFJLENBQUMsQ0FBQ1csSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM1RCxDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7RUFFRkgsUUFBUSxDQUFDLDRCQUE0QixFQUFFLFlBQU07SUFDM0NDLEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxZQUFNO01BQ3hEQyxNQUFNLENBQUNoQiwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDaUIsSUFBSSxDQUFDLElBQUksQ0FBQztNQUNuREQsTUFBTSxDQUFDZiw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQztNQUN4REQsTUFBTSxDQUFDYiwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDYyxJQUFJLENBQUMsS0FBSyxDQUFDO01BQ3pERCxNQUFNLENBQUNiLCtCQUErQixDQUFDO1FBQUVPLE1BQU0sRUFBRTtNQUFFLENBQWEsQ0FBQyxDQUFDLENBQUNPLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDN0VELE1BQU0sQ0FBQ2QscUNBQXFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQ2UsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNqRSxDQUFDLENBQUM7SUFFRkYsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLFlBQU07TUFDbEQsSUFBTXdCLFVBQVUsR0FBRztRQUNqQkYsRUFBRSxFQUFFLEdBQUc7UUFDUC9CLElBQUksRUFBRSxPQUFPO1FBQ2JDLElBQUksRUFBRSxDQUFDO1FBQ1BDLElBQUksRUFBRSxpQkFBaUI7UUFDdkI4QixJQUFJLEVBQUVqQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxpQkFBaUI7TUFDOUMsQ0FBQztNQUNEVyxNQUFNLENBQUN6QiwwQkFBMEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQ2dELFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQ1gsWUFBWSxDQUFDLENBQUMsQ0FBQztNQUNwRVosTUFBTSxDQUFDekIsMEJBQTBCLENBQUMsSUFBSSxFQUFtQixDQUFDZ0QsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDWCxZQUFZLENBQUMsQ0FBQyxDQUFDO01BQ3ZGWixNQUFNLENBQUNuQixnQ0FBZ0MsQ0FBQyxDQUFDMEMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQ04sT0FBTyxDQUFDLEVBQUUsQ0FBQztNQUNyRWpCLE1BQU0sQ0FBQ25CLGdDQUFnQyxDQUFDLENBQUMwQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxRQUFRLENBQUMsQ0FBQztNQUNwRXhCLE1BQU0sQ0FBQ2xCLGlDQUFpQyxDQUFDLENBQUN5QyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDTixPQUFPLENBQUNNLFVBQVUsQ0FBQztNQUM5RXZCLE1BQU0sQ0FBQ2xCLGlDQUFpQyxDQUFDLENBQUN5QyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxRQUFRLENBQUMsQ0FBQztJQUN2RSxDQUFDLENBQUM7SUFFRnpCLEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxZQUFNO01BQ3hEQyxNQUFNLENBQUNqQixtQ0FBbUMsQ0FBQztRQUFFbUMsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQUVGLHFCQUFxQixFQUFFLENBQUMsR0FBRztNQUFFLENBQUMsQ0FBQyxDQUFDLENBQUNILGFBQWEsQ0FDL0c7UUFDRVksTUFBTSxFQUFFLElBQUk7UUFDWlAsYUFBYSxFQUFFLENBQUMsR0FBRztNQUNyQixDQUNGLENBQUM7TUFDRGxCLE1BQU0sQ0FBQ3RCLHdDQUF3QyxDQUFDLENBQUMsQ0FBQyxDQUFDbUMsYUFBYSxDQUFDO1FBQUVZLE1BQU0sRUFBRTtNQUFNLENBQUMsQ0FBQztNQUNuRnpCLE1BQU0sQ0FBQ1osZ0NBQWdDLENBQUM7UUFBRXNDLElBQUksRUFBRSxJQUFJQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQUVDLFFBQVEsRUFBRTtNQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDM0dELE1BQU0sQ0FBQ1osZ0NBQWdDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDYSxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQzFFLENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztFQUVGSCxRQUFRLENBQUMsK0JBQStCLEVBQUUsWUFBTTtJQUM5Q0MsRUFBRSxDQUFDLDJEQUEyRCxFQUFFLFlBQU07TUFDcEVDLE1BQU0sQ0FDSnhCLDZCQUE2QixDQUFDO1FBQzVCNkMsRUFBRSxFQUFFLEdBQUc7UUFDUC9CLElBQUksRUFBRSxPQUFPO1FBQ2JDLElBQUksRUFBRSxDQUFDO1FBQ1BDLElBQUksRUFBRSxpQkFBaUI7UUFDdkI4QixJQUFJLEVBQUVqQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxpQkFBaUI7TUFDOUMsQ0FBQyxDQUNILENBQUMsQ0FBQ1ksSUFBSSxDQUFDLElBQUksQ0FBQztNQUVaRCxNQUFNLENBQ0p4Qiw2QkFBNkIsQ0FBQztRQUM1QjZDLEVBQUUsRUFBRSxHQUFHO1FBQ1AvQixJQUFJLEVBQUUsT0FBTztRQUNiQyxJQUFJLEVBQUUsQ0FBQztRQUNQQyxJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCc0IsTUFBTSxFQUFFLFFBQVE7UUFDaEJRLElBQUksRUFBRWpDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLGlCQUFpQjtNQUM5QyxDQUFDLENBQ0gsQ0FBQyxDQUFDWSxJQUFJLENBQUMsS0FBSyxDQUFDO01BRWJELE1BQU0sQ0FDSnhCLDZCQUE2QixDQUFDO1FBQzVCNkMsRUFBRSxFQUFFLEdBQUc7UUFDUC9CLElBQUksRUFBRSxZQUFZO1FBQ2xCQyxJQUFJLEVBQUUsQ0FBQztRQUNQQyxJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCcUMsWUFBWSxFQUFFO01BQ2hCLENBQUMsQ0FDSCxDQUFDLENBQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDO01BRVpELE1BQU0sQ0FDSnhCLDZCQUE2QixDQUFDO1FBQzVCNkMsRUFBRSxFQUFFLEdBQUc7UUFDUC9CLElBQUksRUFBRSxXQUFXO1FBQ2pCQyxJQUFJLEVBQUUsQ0FBQztRQUNQQyxJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCc0MsYUFBYSxFQUFFO01BQ2pCLENBQUMsQ0FDSCxDQUFDLENBQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDO01BRVpELE1BQU0sQ0FDSnhCLDZCQUE2QixDQUFDO1FBQzVCNkMsRUFBRSxFQUFFLEdBQUc7UUFDUC9CLElBQUksRUFBRSxnQkFBZ0I7UUFDdEJDLElBQUksRUFBRSxDQUFDO1FBQ1BDLElBQUksRUFBRSxpQkFBaUI7UUFDdkJ1QyxZQUFZLEVBQUUxQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLGlCQUFpQjtNQUMvRCxDQUFDLENBQ0gsQ0FBQyxDQUFDWSxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRUZGLEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxZQUFNO01BQy9DQyxNQUFNLENBQUNyQixlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDc0IsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUNqRSxDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
1
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
2
|
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
|
4
3
|
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
@@ -21,27 +20,9 @@ import { useDownloadKnowledge } from '../../../hooks/useKnowledge/downloadKnowle
|
|
|
21
20
|
import { useOnboardingNavigation } from '../../../hooks/useOnboardingNavigation';
|
|
22
21
|
import { ModalFileExceeds } from '../../organisms/ModalFileExceeds/ModalFileExceeds';
|
|
23
22
|
import { allowedFileTypesForKnowledge, fileTypes } from '../../../constants/formatExtensions';
|
|
23
|
+
import { appendKnowledgeAttachments, canPreviewKnowledgeAttachment, computeAttachmentsTotalSize, createClosedKnowledgeFileErrorModalState, MAX_KNOWLEDGE_TOTAL_SIZE, processKnowledgeFiles, removeKnowledgeAttachmentByIndex, resolveKnowledgeAttachmentAtIndex, resolveKnowledgeFileErrorModalState, shouldBlockKnowledgeUpload, shouldEnableKnowledgeDragState, shouldHandleKnowledgeAttachmentAction, shouldProcessKnowledgeFileInput, shouldRunKnowledgeDownloadEffect } from './AbmKnowledgeSection.helpers';
|
|
24
24
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
25
|
-
|
|
26
|
-
var _stringToChange$split = stringToChange.split('.'),
|
|
27
|
-
_stringToChange$split2 = _slicedToArray(_stringToChange$split, 2),
|
|
28
|
-
filename = _stringToChange$split2[0],
|
|
29
|
-
_stringToChange$split3 = _stringToChange$split2[1],
|
|
30
|
-
extension = _stringToChange$split3 === void 0 ? '' : _stringToChange$split3;
|
|
31
|
-
var ext = extension ? ".".concat(extension) : '';
|
|
32
|
-
if (!(prevStrings !== null && prevStrings !== void 0 && prevStrings.includes(stringToChange))) {
|
|
33
|
-
return stringToChange;
|
|
34
|
-
}
|
|
35
|
-
var counter = 1;
|
|
36
|
-
var newFilename;
|
|
37
|
-
do {
|
|
38
|
-
newFilename = "".concat(filename, "(").concat(counter, ")").concat(ext);
|
|
39
|
-
counter++;
|
|
40
|
-
} while (prevStrings !== null && prevStrings !== void 0 && prevStrings.includes(newFilename));
|
|
41
|
-
return newFilename;
|
|
42
|
-
}
|
|
43
|
-
var MAX_TOTAL_SIZE = 5 * 1024 * 1024; // 5MB total
|
|
44
|
-
|
|
25
|
+
var MAX_TOTAL_SIZE = MAX_KNOWLEDGE_TOTAL_SIZE;
|
|
45
26
|
export var AbmKnowledgeSection = function AbmKnowledgeSection(_ref) {
|
|
46
27
|
var handleSetAgentValues = _ref.handleSetAgentValues,
|
|
47
28
|
values = _ref.values,
|
|
@@ -79,103 +60,52 @@ export var AbmKnowledgeSection = function AbmKnowledgeSection(_ref) {
|
|
|
79
60
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
80
61
|
isDragging = _useState8[0],
|
|
81
62
|
setIsDragging = _useState8[1];
|
|
82
|
-
|
|
83
|
-
// Calcular el tamaño total actual de archivos
|
|
84
|
-
var currentTotalSize = (localAttachments || []).reduce(function (total, attachment) {
|
|
85
|
-
var size = typeof attachment.size === 'number' ? attachment.size : Number(attachment.size);
|
|
86
|
-
return total + (Number.isNaN(size) ? 0 : size);
|
|
87
|
-
}, 0);
|
|
63
|
+
var currentTotalSize = computeAttachmentsTotalSize(localAttachments || []);
|
|
88
64
|
var isAtSizeLimit = currentTotalSize >= MAX_TOTAL_SIZE;
|
|
89
65
|
var handleAttachClick = function handleAttachClick() {
|
|
90
66
|
var _fileInputRef$current;
|
|
91
|
-
if (isAtSizeLimit) {
|
|
67
|
+
if (shouldBlockKnowledgeUpload(isAtSizeLimit)) {
|
|
92
68
|
return;
|
|
93
69
|
}
|
|
94
70
|
(_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 || _fileInputRef$current.click();
|
|
95
71
|
};
|
|
96
72
|
var handleFileSelect = function handleFileSelect(e) {
|
|
97
73
|
var files = e.target.files;
|
|
98
|
-
if (!files) return;
|
|
99
|
-
var
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
return total + (Number.isNaN(size) ? 0 : size);
|
|
111
|
-
}, 0);
|
|
112
|
-
var runningTotalSize = existingTotalSize;
|
|
113
|
-
Array.from(files).forEach(function (file) {
|
|
114
|
-
var _fileNameParts$pop;
|
|
115
|
-
var fileNameParts = file.name.split('.');
|
|
116
|
-
var fileExtension = fileNameParts.length > 1 ? ".".concat((_fileNameParts$pop = fileNameParts.pop()) === null || _fileNameParts$pop === void 0 ? void 0 : _fileNameParts$pop.toLowerCase()) : '';
|
|
117
|
-
if (!allowedFileTypesForKnowledge.includes(fileExtension)) {
|
|
118
|
-
invalidExtensionFiles.push(file.name);
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// Verificar si agregar este archivo excedería el límite total de 5MB
|
|
123
|
-
var newTotalSize = runningTotalSize + file.size;
|
|
124
|
-
if (newTotalSize > MAX_TOTAL_SIZE) {
|
|
125
|
-
exceededFiles.push(file.name);
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
var typeFile = file.type || fileTypes[fileExtension];
|
|
129
|
-
var uniqueName = getUniqueString(attachmentsNames, file.name);
|
|
130
|
-
var parsedFile = new File([file], uniqueName, {
|
|
131
|
-
type: typeFile
|
|
132
|
-
});
|
|
133
|
-
var attachmentFile = {
|
|
134
|
-
file: parsedFile,
|
|
135
|
-
id: "".concat(Date.now(), "-").concat(Math.random()),
|
|
136
|
-
name: uniqueName,
|
|
137
|
-
size: file.size,
|
|
138
|
-
type: typeFile,
|
|
139
|
-
status: 'started'
|
|
140
|
-
};
|
|
141
|
-
|
|
142
|
-
// Solo agregar el archivo si no está en la lista de archivos excedidos
|
|
143
|
-
if (!exceededFiles.includes(file.name)) {
|
|
144
|
-
insertedFiles.push(attachmentFile);
|
|
145
|
-
// Actualizar el tamaño total para la siguiente validación
|
|
146
|
-
runningTotalSize += file.size;
|
|
147
|
-
}
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
// Mostrar modal si hay archivos con extensión inválida o que exceden el límite
|
|
151
|
-
var hasErrors = invalidExtensionFiles.length > 0 || exceededFiles.length > 0;
|
|
74
|
+
if (!shouldProcessKnowledgeFileInput(files)) return;
|
|
75
|
+
var _processKnowledgeFile = processKnowledgeFiles({
|
|
76
|
+
files: Array.from(files),
|
|
77
|
+
existingAttachments: localAttachments || [],
|
|
78
|
+
allowedExtensions: allowedFileTypesForKnowledge,
|
|
79
|
+
fileTypes: fileTypes,
|
|
80
|
+
maxTotalSize: MAX_TOTAL_SIZE
|
|
81
|
+
}),
|
|
82
|
+
insertedFiles = _processKnowledgeFile.insertedFiles,
|
|
83
|
+
exceededFiles = _processKnowledgeFile.exceededFiles,
|
|
84
|
+
invalidExtensionFiles = _processKnowledgeFile.invalidExtensionFiles,
|
|
85
|
+
hasErrors = _processKnowledgeFile.hasErrors;
|
|
152
86
|
if (hasErrors) {
|
|
153
|
-
setModalProps({
|
|
154
|
-
isOpen: true,
|
|
155
|
-
excludedFiles: excludedFiles,
|
|
87
|
+
setModalProps(resolveKnowledgeFileErrorModalState({
|
|
156
88
|
exceededFiles: exceededFiles,
|
|
157
89
|
invalidExtensionFiles: invalidExtensionFiles
|
|
158
|
-
});
|
|
90
|
+
}));
|
|
159
91
|
onFileErrorChange === null || onFileErrorChange === void 0 || onFileErrorChange(true);
|
|
160
92
|
} else {
|
|
161
93
|
onFileErrorChange === null || onFileErrorChange === void 0 || onFileErrorChange(false);
|
|
162
94
|
}
|
|
163
|
-
|
|
164
|
-
// Solo agregar archivos válidos que no excedan el límite
|
|
165
95
|
if (insertedFiles.length) {
|
|
166
96
|
handleSetAgentValues === null || handleSetAgentValues === void 0 || handleSetAgentValues({
|
|
167
97
|
key: 'knowledge',
|
|
168
98
|
value: insertedFiles
|
|
169
99
|
});
|
|
170
100
|
setLocalAttachments(function (prev) {
|
|
171
|
-
return
|
|
101
|
+
return appendKnowledgeAttachments(prev || [], insertedFiles);
|
|
172
102
|
});
|
|
173
103
|
}
|
|
174
104
|
};
|
|
175
105
|
var handleDragEnter = function handleDragEnter(e) {
|
|
176
106
|
e.preventDefault();
|
|
177
107
|
e.stopPropagation();
|
|
178
|
-
if (
|
|
108
|
+
if (shouldEnableKnowledgeDragState(isAtSizeLimit)) {
|
|
179
109
|
setIsDragging(true);
|
|
180
110
|
}
|
|
181
111
|
};
|
|
@@ -192,11 +122,11 @@ export var AbmKnowledgeSection = function AbmKnowledgeSection(_ref) {
|
|
|
192
122
|
e.preventDefault();
|
|
193
123
|
e.stopPropagation();
|
|
194
124
|
setIsDragging(false);
|
|
195
|
-
if (isAtSizeLimit) {
|
|
125
|
+
if (shouldBlockKnowledgeUpload(isAtSizeLimit)) {
|
|
196
126
|
return;
|
|
197
127
|
}
|
|
198
128
|
var files = e.dataTransfer.files;
|
|
199
|
-
if (!files
|
|
129
|
+
if (!shouldProcessKnowledgeFileInput(files)) {
|
|
200
130
|
return;
|
|
201
131
|
}
|
|
202
132
|
|
|
@@ -209,11 +139,10 @@ export var AbmKnowledgeSection = function AbmKnowledgeSection(_ref) {
|
|
|
209
139
|
handleFileSelect(syntheticEvent);
|
|
210
140
|
};
|
|
211
141
|
var handleDeleteAttachment = function handleDeleteAttachment(id) {
|
|
212
|
-
var fileToDelete = localAttachments[id
|
|
142
|
+
var fileToDelete = resolveKnowledgeAttachmentAtIndex(localAttachments || [], id);
|
|
213
143
|
if (!fileToDelete) return;
|
|
214
|
-
var newAttachments = (localAttachments || []
|
|
215
|
-
|
|
216
|
-
});
|
|
144
|
+
var newAttachments = removeKnowledgeAttachmentByIndex(localAttachments || [], id);
|
|
145
|
+
if (!newAttachments) return;
|
|
217
146
|
setLocalAttachments(newAttachments);
|
|
218
147
|
handleSetAgentValues === null || handleSetAgentValues === void 0 || handleSetAgentValues({
|
|
219
148
|
key: 'knowledge',
|
|
@@ -223,7 +152,7 @@ export var AbmKnowledgeSection = function AbmKnowledgeSection(_ref) {
|
|
|
223
152
|
onFileErrorChange === null || onFileErrorChange === void 0 || onFileErrorChange(false);
|
|
224
153
|
};
|
|
225
154
|
var handleDownloadAttachment = function handleDownloadAttachment(id) {
|
|
226
|
-
var file = (localAttachments || [])
|
|
155
|
+
var file = resolveKnowledgeAttachmentAtIndex(localAttachments || [], id);
|
|
227
156
|
if (!file) return;
|
|
228
157
|
handleDownloadKnowledge({
|
|
229
158
|
agentId: values.general.id.toString(),
|
|
@@ -231,7 +160,7 @@ export var AbmKnowledgeSection = function AbmKnowledgeSection(_ref) {
|
|
|
231
160
|
});
|
|
232
161
|
};
|
|
233
162
|
useEffect(function () {
|
|
234
|
-
if (isDownloadingSuccess
|
|
163
|
+
if (shouldRunKnowledgeDownloadEffect(isDownloadingSuccess, isDownloadingError, isDownloading)) {
|
|
235
164
|
var url = URL.createObjectURL(isDownloadingSuccess.blob);
|
|
236
165
|
var link = document.createElement('a');
|
|
237
166
|
link.href = url;
|
|
@@ -249,7 +178,7 @@ export var AbmKnowledgeSection = function AbmKnowledgeSection(_ref) {
|
|
|
249
178
|
var handleAction = function handleAction(_ref2) {
|
|
250
179
|
var id = _ref2.id,
|
|
251
180
|
action = _ref2.action;
|
|
252
|
-
if (isDownloading) return;
|
|
181
|
+
if (!shouldHandleKnowledgeAttachmentAction(isDownloading)) return;
|
|
253
182
|
if (action === 'delete') {
|
|
254
183
|
handleDeleteAttachment(id);
|
|
255
184
|
return;
|
|
@@ -259,12 +188,7 @@ export var AbmKnowledgeSection = function AbmKnowledgeSection(_ref) {
|
|
|
259
188
|
}
|
|
260
189
|
};
|
|
261
190
|
var handleAttachmentClick = function handleAttachmentClick(attachment) {
|
|
262
|
-
|
|
263
|
-
// Solo si no tiene errores (status !== 'failed')
|
|
264
|
-
if (attachment.status === 'failed') {
|
|
265
|
-
return;
|
|
266
|
-
}
|
|
267
|
-
if (attachment.file instanceof File || attachment.originalFile instanceof File || attachment.url_thumbnail || attachment.url_original || attachment.url_file) {
|
|
191
|
+
if (canPreviewKnowledgeAttachment(attachment)) {
|
|
268
192
|
setPreviewAttachment(attachment);
|
|
269
193
|
}
|
|
270
194
|
};
|
|
@@ -352,12 +276,7 @@ export var AbmKnowledgeSection = function AbmKnowledgeSection(_ref) {
|
|
|
352
276
|
})]
|
|
353
277
|
}), modalProps.isOpen && /*#__PURE__*/_jsx(ModalFileExceeds, {
|
|
354
278
|
onClose: function onClose() {
|
|
355
|
-
setModalProps(
|
|
356
|
-
isOpen: false,
|
|
357
|
-
excludedFiles: [],
|
|
358
|
-
exceededFiles: [],
|
|
359
|
-
invalidExtensionFiles: []
|
|
360
|
-
});
|
|
279
|
+
setModalProps(createClosedKnowledgeFileErrorModalState());
|
|
361
280
|
onFileErrorChange === null || onFileErrorChange === void 0 || onFileErrorChange(false);
|
|
362
281
|
},
|
|
363
282
|
excludedFiles: modalProps.excludedFiles,
|
|
@@ -371,4 +290,4 @@ export var AbmKnowledgeSection = function AbmKnowledgeSection(_ref) {
|
|
|
371
290
|
})]
|
|
372
291
|
});
|
|
373
292
|
};
|
|
374
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUb29sdGlwIiwiRmlsZVVwbG9hZCIsIk9wZW4iLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZVRyYW5zbGF0aW9uIiwiQXR0YWNobWVudENhcmQiLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiU0NBS1NXcmFwcGVyIiwiU0NBS1NXcmFwcGVySGVhZGVyIiwiU0NBS1NXcmFwcGVyQ29udGVudCIsIlNDQUtTV3JhcHBlckhlYWRlclRpdGxlIiwiU0NBS1NXcmFwcGVySGVhZGVySW5mbyIsIlNDQUtTRmlsZVVwbG9hZFdyYXBwZXJDb250ZW50IiwiU0NBS1NBdHRhY2htZW50c1dyYXBwZXIiLCJTQ0FLU01vcmVJbmZvU3BhbiIsIlNDQUtTTW9yZUluZm9JY29uV3JhcHBlciIsIlNDQUtTRHJvcFpvbmUiLCJTQ0FLU0Ryb3Bab25lSWNvbiIsIlNDQUtTRHJvcFpvbmVUZXh0IiwiU0NBS1NEcm9wWm9uZUluZm8iLCJTQ0FLU0Ryb3Bab25lVGV4dFNwYW4iLCJ1c2VEb3dubG9hZEtub3dsZWRnZSIsInVzZU9uYm9hcmRpbmdOYXZpZ2F0aW9uIiwiTW9kYWxGaWxlRXhjZWVkcyIsImFsbG93ZWRGaWxlVHlwZXNGb3JLbm93bGVkZ2UiLCJmaWxlVHlwZXMiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJnZXRVbmlxdWVTdHJpbmciLCJwcmV2U3RyaW5ncyIsInN0cmluZ1RvQ2hhbmdlIiwiX3N0cmluZ1RvQ2hhbmdlJHNwbGl0Iiwic3BsaXQiLCJfc3RyaW5nVG9DaGFuZ2Ukc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkiLCJmaWxlbmFtZSIsIl9zdHJpbmdUb0NoYW5nZSRzcGxpdDMiLCJleHRlbnNpb24iLCJleHQiLCJjb25jYXQiLCJpbmNsdWRlcyIsImNvdW50ZXIiLCJuZXdGaWxlbmFtZSIsIk1BWF9UT1RBTF9TSVpFIiwiQWJtS25vd2xlZGdlU2VjdGlvbiIsIl9yZWYiLCJoYW5kbGVTZXRBZ2VudFZhbHVlcyIsInZhbHVlcyIsIm9uRmlsZUVycm9yQ2hhbmdlIiwidG9vbHRpcFpJbmRleCIsIl91c2VTdGF0ZSIsImtub3dsZWRnZSIsIl91c2VTdGF0ZTIiLCJsb2NhbEF0dGFjaG1lbnRzIiwic2V0TG9jYWxBdHRhY2htZW50cyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwicHJldmlld0F0dGFjaG1lbnQiLCJzZXRQcmV2aWV3QXR0YWNobWVudCIsIl91c2VUcmFuc2xhdGlvbiIsInQiLCJfdXNlU3RhdGU1IiwiaXNPcGVuIiwiZXhjbHVkZWRGaWxlcyIsImV4Y2VlZGVkRmlsZXMiLCJpbnZhbGlkRXh0ZW5zaW9uRmlsZXMiLCJfdXNlU3RhdGU2IiwibW9kYWxQcm9wcyIsInNldE1vZGFsUHJvcHMiLCJfdXNlRG93bmxvYWRLbm93bGVkZ2UiLCJoYW5kbGVEb3dubG9hZEtub3dsZWRnZSIsImlzRG93bmxvYWRpbmdTdWNjZXNzIiwic3VjY2VzcyIsImlzRG93bmxvYWRpbmdFcnJvciIsImVycm9yIiwiaXNEb3dubG9hZGluZyIsImlzTG9hZGluZyIsImhhbmRsZVJlc2V0U3RhdGVzIiwiX3VzZU9uYm9hcmRpbmdOYXZpZ2F0IiwiaGFuZGxlT25ib2FyZGluZ05hdmlnYXRpb24iLCJmaWxlSW5wdXRSZWYiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImlzRHJhZ2dpbmciLCJzZXRJc0RyYWdnaW5nIiwiY3VycmVudFRvdGFsU2l6ZSIsInJlZHVjZSIsInRvdGFsIiwiYXR0YWNobWVudCIsInNpemUiLCJOdW1iZXIiLCJpc05hTiIsImlzQXRTaXplTGltaXQiLCJoYW5kbGVBdHRhY2hDbGljayIsIl9maWxlSW5wdXRSZWYkY3VycmVudCIsImN1cnJlbnQiLCJjbGljayIsImhhbmRsZUZpbGVTZWxlY3QiLCJlIiwiZmlsZXMiLCJ0YXJnZXQiLCJpbnNlcnRlZEZpbGVzIiwiYXR0YWNobWVudHNOYW1lcyIsIm1hcCIsIm5hbWUiLCJleGlzdGluZ1RvdGFsU2l6ZSIsInJ1bm5pbmdUb3RhbFNpemUiLCJBcnJheSIsImZyb20iLCJmb3JFYWNoIiwiZmlsZSIsIl9maWxlTmFtZVBhcnRzJHBvcCIsImZpbGVOYW1lUGFydHMiLCJmaWxlRXh0ZW5zaW9uIiwibGVuZ3RoIiwicG9wIiwidG9Mb3dlckNhc2UiLCJwdXNoIiwibmV3VG90YWxTaXplIiwidHlwZUZpbGUiLCJ0eXBlIiwidW5pcXVlTmFtZSIsInBhcnNlZEZpbGUiLCJGaWxlIiwiYXR0YWNobWVudEZpbGUiLCJpZCIsIkRhdGUiLCJub3ciLCJNYXRoIiwicmFuZG9tIiwic3RhdHVzIiwiaGFzRXJyb3JzIiwia2V5IiwidmFsdWUiLCJwcmV2IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiaGFuZGxlRHJhZ0VudGVyIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJoYW5kbGVEcmFnTGVhdmUiLCJoYW5kbGVEcmFnT3ZlciIsImhhbmRsZURyb3AiLCJkYXRhVHJhbnNmZXIiLCJzeW50aGV0aWNFdmVudCIsImhhbmRsZURlbGV0ZUF0dGFjaG1lbnQiLCJmaWxlVG9EZWxldGUiLCJuZXdBdHRhY2htZW50cyIsImZpbHRlciIsIl8iLCJpbmRleCIsImRlbGV0ZUtub3dsZWRnZSIsImhhbmRsZURvd25sb2FkQXR0YWNobWVudCIsImFnZW50SWQiLCJnZW5lcmFsIiwidG9TdHJpbmciLCJrbm93bGVkZ2VJZCIsInVybCIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsImJsb2IiLCJsaW5rIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaHJlZiIsImRvd25sb2FkIiwic3R5bGUiLCJkaXNwbGF5IiwiYm9keSIsImFwcGVuZENoaWxkIiwic2V0VGltZW91dCIsInJlbW92ZUNoaWxkIiwicmV2b2tlT2JqZWN0VVJMIiwiaGFuZGxlQWN0aW9uIiwiX3JlZjIiLCJhY3Rpb24iLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJvcmlnaW5hbEZpbGUiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX29yaWdpbmFsIiwidXJsX2ZpbGUiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJjaGlsZHJlbiIsIiRpbmRleCIsIm9uQ2xpY2siLCJ3aWR0aCIsImhlaWdodCIsImNvbG9yIiwidGl0bGUiLCJ6SW5kZXgiLCJvbkRyYWdFbnRlciIsIm9uRHJhZ0xlYXZlIiwib25EcmFnT3ZlciIsIm9uRHJvcCIsInBvc2l0aW9uSW5kZXgiLCJhYm1Lbm93bGVkZ2VTZWN0aW9uIiwiZnVsbFdpZHRoIiwicmVmIiwibXVsdGlwbGUiLCJhY2NlcHQiLCJvbkNoYW5nZSIsIm9uQ2xvc2UiLCJzZWN0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0FibVNlY3Rpb24vQWJtS25vd2xlZGdlU2VjdGlvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wbHVzcGx1cyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tY3ljbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2FuY2hvci1pcy12YWxpZCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9GaWxlVXBsb2FkJ1xuaW1wb3J0IHsgT3BlbiB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL09wZW4nXG5pbXBvcnQgeyBDaGFuZ2VFdmVudCwgRHJhZ0V2ZW50LCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmQnXG5pbXBvcnQgeyBBdHRhY2htZW50UHJldmlld01vZGFsIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudFByZXZpZXdNb2RhbCdcbmltcG9ydCB7IE1vZGFsVmFsdWVzIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnRNb2RhbCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHtcbiAgU0NBS1NXcmFwcGVyLFxuICBTQ0FLU1dyYXBwZXJIZWFkZXIsXG4gIFNDQUtTV3JhcHBlckNvbnRlbnQsXG4gIFNDQUtTV3JhcHBlckhlYWRlclRpdGxlLFxuICBTQ0FLU1dyYXBwZXJIZWFkZXJJbmZvLFxuICBTQ0FLU0ZpbGVVcGxvYWRXcmFwcGVyQ29udGVudCxcbiAgU0NBS1NBdHRhY2htZW50c1dyYXBwZXIsXG4gIFNDQUtTTW9yZUluZm9TcGFuLFxuICBTQ0FLU01vcmVJbmZvSWNvbldyYXBwZXIsXG4gIFNDQUtTRHJvcFpvbmUsXG4gIFNDQUtTRHJvcFpvbmVJY29uLFxuICBTQ0FLU0Ryb3Bab25lVGV4dCxcbiAgU0NBS1NEcm9wWm9uZUluZm8sXG4gIFNDQUtTRHJvcFpvbmVUZXh0U3Bhbixcbn0gZnJvbSAnLi9BYm1Lbm93bGVkZ2VTZWN0aW9uLnN0eWxlcydcbmltcG9ydCB7IHVzZURvd25sb2FkS25vd2xlZGdlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlS25vd2xlZGdlL2Rvd25sb2FkS25vd2xlZGdlJ1xuaW1wb3J0IHsgdXNlT25ib2FyZGluZ05hdmlnYXRpb24gfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VPbmJvYXJkaW5nTmF2aWdhdGlvbidcbmltcG9ydCB7IE1vZGFsRmlsZUV4Y2VlZHMgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvTW9kYWxGaWxlRXhjZWVkcy9Nb2RhbEZpbGVFeGNlZWRzJ1xuaW1wb3J0IHsgYWxsb3dlZEZpbGVUeXBlc0Zvcktub3dsZWRnZSwgZmlsZVR5cGVzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2Zvcm1hdEV4dGVuc2lvbnMnXG5cbmZ1bmN0aW9uIGdldFVuaXF1ZVN0cmluZyhwcmV2U3RyaW5nczogc3RyaW5nW10sIHN0cmluZ1RvQ2hhbmdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBbZmlsZW5hbWUsIGV4dGVuc2lvbiA9ICcnXSA9IHN0cmluZ1RvQ2hhbmdlLnNwbGl0KCcuJylcbiAgY29uc3QgZXh0ID0gZXh0ZW5zaW9uID8gYC4ke2V4dGVuc2lvbn1gIDogJydcblxuICBpZiAoIXByZXZTdHJpbmdzPy5pbmNsdWRlcyhzdHJpbmdUb0NoYW5nZSkpIHtcbiAgICByZXR1cm4gc3RyaW5nVG9DaGFuZ2VcbiAgfVxuXG4gIGxldCBjb3VudGVyID0gMVxuICBsZXQgbmV3RmlsZW5hbWVcbiAgZG8ge1xuICAgIG5ld0ZpbGVuYW1lID0gYCR7ZmlsZW5hbWV9KCR7Y291bnRlcn0pJHtleHR9YFxuICAgIGNvdW50ZXIrK1xuICB9IHdoaWxlIChwcmV2U3RyaW5ncz8uaW5jbHVkZXMobmV3RmlsZW5hbWUpKVxuXG4gIHJldHVybiBuZXdGaWxlbmFtZVxufVxuXG5jb25zdCBNQVhfVE9UQUxfU0laRSA9IDUgKiAxMDI0ICogMTAyNCAvLyA1TUIgdG90YWxcblxuZXhwb3J0IGNvbnN0IEFibUtub3dsZWRnZVNlY3Rpb24gPSAoe1xuICBoYW5kbGVTZXRBZ2VudFZhbHVlcyxcbiAgdmFsdWVzLFxuICBvbkZpbGVFcnJvckNoYW5nZSxcbiAgdG9vbHRpcFpJbmRleCxcbn06IHtcbiAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM6ICh7XG4gICAga2V5LFxuICAgIHZhbHVlLFxuICAgIGRlbGV0ZUtub3dsZWRnZSxcbiAgfToge1xuICAgIGtleTogc3RyaW5nXG4gICAgdmFsdWU6IHVua25vd25cbiAgICBkZWxldGVLbm93bGVkZ2U/OiBib29sZWFuXG4gIH0pID0+IHZvaWRcbiAgdmFsdWVzOiBNb2RhbFZhbHVlc1xuICBvbkZpbGVFcnJvckNoYW5nZT86IChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IHZvaWRcbiAgdG9vbHRpcFpJbmRleD86IG51bWJlclxufSkgPT4ge1xuICBjb25zdCBbbG9jYWxBdHRhY2htZW50cywgc2V0TG9jYWxBdHRhY2htZW50c10gPSB1c2VTdGF0ZTxBdHRhY2htZW50RmlsZVtdPih2YWx1ZXMua25vd2xlZGdlIHx8IFtdKVxuICBjb25zdCBbcHJldmlld0F0dGFjaG1lbnQsIHNldFByZXZpZXdBdHRhY2htZW50XSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRGaWxlIHwgbnVsbD4obnVsbClcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbignYWJtX2FnZW50X3NlY3Rpb24nKVxuICBjb25zdCBbbW9kYWxQcm9wcywgc2V0TW9kYWxQcm9wc10gPSB1c2VTdGF0ZSh7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBleGNsdWRlZEZpbGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBleGNlZWRlZEZpbGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBpbnZhbGlkRXh0ZW5zaW9uRmlsZXM6IFtdIGFzIHN0cmluZ1tdLFxuICB9KVxuICBjb25zdCB7XG4gICAgaGFuZGxlRG93bmxvYWRLbm93bGVkZ2UsXG4gICAgc3VjY2VzczogaXNEb3dubG9hZGluZ1N1Y2Nlc3MsXG4gICAgZXJyb3I6IGlzRG93bmxvYWRpbmdFcnJvcixcbiAgICBpc0xvYWRpbmc6IGlzRG93bmxvYWRpbmcsXG4gICAgaGFuZGxlUmVzZXRTdGF0ZXMsXG4gIH0gPSB1c2VEb3dubG9hZEtub3dsZWRnZSgpXG4gIGNvbnN0IHsgaGFuZGxlT25ib2FyZGluZ05hdmlnYXRpb24gfSA9IHVzZU9uYm9hcmRpbmdOYXZpZ2F0aW9uKClcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtpc0RyYWdnaW5nLCBzZXRJc0RyYWdnaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIC8vIENhbGN1bGFyIGVsIHRhbWHDsW8gdG90YWwgYWN0dWFsIGRlIGFyY2hpdm9zXG4gIGNvbnN0IGN1cnJlbnRUb3RhbFNpemUgPSAobG9jYWxBdHRhY2htZW50cyB8fCBbXSkucmVkdWNlKCh0b3RhbCwgYXR0YWNobWVudCkgPT4ge1xuICAgIGNvbnN0IHNpemUgPSB0eXBlb2YgYXR0YWNobWVudC5zaXplID09PSAnbnVtYmVyJyA/IGF0dGFjaG1lbnQuc2l6ZSA6IE51bWJlcihhdHRhY2htZW50LnNpemUpXG4gICAgcmV0dXJuIHRvdGFsICsgKE51bWJlci5pc05hTihzaXplKSA/IDAgOiBzaXplKVxuICB9LCAwKVxuICBjb25zdCBpc0F0U2l6ZUxpbWl0ID0gY3VycmVudFRvdGFsU2l6ZSA+PSBNQVhfVE9UQUxfU0laRVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaENsaWNrID0gKCkgPT4ge1xuICAgIGlmIChpc0F0U2l6ZUxpbWl0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZpbGVTZWxlY3QgPSAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCB7IGZpbGVzIH0gPSBlLnRhcmdldFxuICAgIGlmICghZmlsZXMpIHJldHVyblxuXG4gICAgY29uc3QgZXhjZWVkZWRGaWxlczogc3RyaW5nW10gPSBbXVxuICAgIGNvbnN0IGV4Y2x1ZGVkRmlsZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBpbnZhbGlkRXh0ZW5zaW9uRmlsZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBpbnNlcnRlZEZpbGVzOiBBdHRhY2htZW50RmlsZVtdID0gW11cbiAgICBjb25zdCBhdHRhY2htZW50c05hbWVzID0gKGxvY2FsQXR0YWNobWVudHMgfHwgW10pLm1hcChhdHRhY2htZW50ID0+IGF0dGFjaG1lbnQubmFtZSlcblxuICAgIC8vIENhbGN1bGFyIGVsIHRhbWHDsW8gdG90YWwgYWN0dWFsIGRlIGFyY2hpdm9zIHlhIGFkanVudG9zXG4gICAgY29uc3QgZXhpc3RpbmdUb3RhbFNpemUgPSAobG9jYWxBdHRhY2htZW50cyB8fCBbXSkucmVkdWNlKCh0b3RhbCwgYXR0YWNobWVudCkgPT4ge1xuICAgICAgY29uc3Qgc2l6ZSA9IHR5cGVvZiBhdHRhY2htZW50LnNpemUgPT09ICdudW1iZXInID8gYXR0YWNobWVudC5zaXplIDogTnVtYmVyKGF0dGFjaG1lbnQuc2l6ZSlcbiAgICAgIHJldHVybiB0b3RhbCArIChOdW1iZXIuaXNOYU4oc2l6ZSkgPyAwIDogc2l6ZSlcbiAgICB9LCAwKVxuICAgIGxldCBydW5uaW5nVG90YWxTaXplID0gZXhpc3RpbmdUb3RhbFNpemVcbiAgICBBcnJheS5mcm9tKGZpbGVzKS5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgY29uc3QgZmlsZU5hbWVQYXJ0cyA9IGZpbGUubmFtZS5zcGxpdCgnLicpXG4gICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZU5hbWVQYXJ0cy5sZW5ndGggPiAxID8gYC4ke2ZpbGVOYW1lUGFydHMucG9wKCk/LnRvTG93ZXJDYXNlKCl9YCA6ICcnXG5cbiAgICAgIGlmICghYWxsb3dlZEZpbGVUeXBlc0Zvcktub3dsZWRnZS5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICBpbnZhbGlkRXh0ZW5zaW9uRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZmljYXIgc2kgYWdyZWdhciBlc3RlIGFyY2hpdm8gZXhjZWRlcsOtYSBlbCBsw61taXRlIHRvdGFsIGRlIDVNQlxuICAgICAgY29uc3QgbmV3VG90YWxTaXplID0gcnVubmluZ1RvdGFsU2l6ZSArIGZpbGUuc2l6ZVxuICAgICAgaWYgKG5ld1RvdGFsU2l6ZSA+IE1BWF9UT1RBTF9TSVpFKSB7XG4gICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0eXBlRmlsZSA9IGZpbGUudHlwZSB8fCBmaWxlVHlwZXNbZmlsZUV4dGVuc2lvbl1cbiAgICAgIGNvbnN0IHVuaXF1ZU5hbWUgPSBnZXRVbmlxdWVTdHJpbmcoYXR0YWNobWVudHNOYW1lcywgZmlsZS5uYW1lKVxuICAgICAgY29uc3QgcGFyc2VkRmlsZSA9IG5ldyBGaWxlKFtmaWxlXSwgdW5pcXVlTmFtZSwgeyB0eXBlOiB0eXBlRmlsZSB9KVxuXG4gICAgICBjb25zdCBhdHRhY2htZW50RmlsZTogQXR0YWNobWVudEZpbGUgPSB7XG4gICAgICAgIGZpbGU6IHBhcnNlZEZpbGUsXG4gICAgICAgIGlkOiBgJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCl9YCxcbiAgICAgICAgbmFtZTogdW5pcXVlTmFtZSxcbiAgICAgICAgc2l6ZTogZmlsZS5zaXplLFxuICAgICAgICB0eXBlOiB0eXBlRmlsZSxcbiAgICAgICAgc3RhdHVzOiAnc3RhcnRlZCcsXG4gICAgICB9XG5cbiAgICAgIC8vIFNvbG8gYWdyZWdhciBlbCBhcmNoaXZvIHNpIG5vIGVzdMOhIGVuIGxhIGxpc3RhIGRlIGFyY2hpdm9zIGV4Y2VkaWRvc1xuICAgICAgaWYgKCFleGNlZWRlZEZpbGVzLmluY2x1ZGVzKGZpbGUubmFtZSkpIHtcbiAgICAgICAgaW5zZXJ0ZWRGaWxlcy5wdXNoKGF0dGFjaG1lbnRGaWxlKVxuICAgICAgICAvLyBBY3R1YWxpemFyIGVsIHRhbWHDsW8gdG90YWwgcGFyYSBsYSBzaWd1aWVudGUgdmFsaWRhY2nDs25cbiAgICAgICAgcnVubmluZ1RvdGFsU2l6ZSArPSBmaWxlLnNpemVcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gTW9zdHJhciBtb2RhbCBzaSBoYXkgYXJjaGl2b3MgY29uIGV4dGVuc2nDs24gaW52w6FsaWRhIG8gcXVlIGV4Y2VkZW4gZWwgbMOtbWl0ZVxuICAgIGNvbnN0IGhhc0Vycm9ycyA9IGludmFsaWRFeHRlbnNpb25GaWxlcy5sZW5ndGggPiAwIHx8IGV4Y2VlZGVkRmlsZXMubGVuZ3RoID4gMFxuICAgIGlmIChoYXNFcnJvcnMpIHtcbiAgICAgIHNldE1vZGFsUHJvcHMoeyBpc09wZW46IHRydWUsIGV4Y2x1ZGVkRmlsZXMsIGV4Y2VlZGVkRmlsZXMsIGludmFsaWRFeHRlbnNpb25GaWxlcyB9KVxuICAgICAgb25GaWxlRXJyb3JDaGFuZ2U/Lih0cnVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkZpbGVFcnJvckNoYW5nZT8uKGZhbHNlKVxuICAgIH1cblxuICAgIC8vIFNvbG8gYWdyZWdhciBhcmNoaXZvcyB2w6FsaWRvcyBxdWUgbm8gZXhjZWRhbiBlbCBsw61taXRlXG4gICAgaWYgKGluc2VydGVkRmlsZXMubGVuZ3RoKSB7XG4gICAgICBoYW5kbGVTZXRBZ2VudFZhbHVlcz8uKHsga2V5OiAna25vd2xlZGdlJywgdmFsdWU6IGluc2VydGVkRmlsZXMgfSlcbiAgICAgIHNldExvY2FsQXR0YWNobWVudHMocHJldiA9PiBbLi4uKHByZXYgfHwgW10pLCAuLi5pbnNlcnRlZEZpbGVzXSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnRW50ZXIgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBpZiAoIWlzQXRTaXplTGltaXQpIHtcbiAgICAgIHNldElzRHJhZ2dpbmcodHJ1ZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnTGVhdmUgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBzZXRJc0RyYWdnaW5nKGZhbHNlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ092ZXIgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyb3AgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBzZXRJc0RyYWdnaW5nKGZhbHNlKVxuXG4gICAgaWYgKGlzQXRTaXplTGltaXQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHsgZmlsZXMgfSA9IGUuZGF0YVRyYW5zZmVyXG4gICAgaWYgKCFmaWxlcyB8fCBmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENyZWFyIHVuIGV2ZW50byBzaW50w6l0aWNvIHBhcmEgcmV1dGlsaXphciBsYSBsw7NnaWNhIGRlIGhhbmRsZUZpbGVTZWxlY3RcbiAgICBjb25zdCBzeW50aGV0aWNFdmVudCA9IHtcbiAgICAgIHRhcmdldDogeyBmaWxlcyB9LFxuICAgIH0gYXMgQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD5cblxuICAgIGhhbmRsZUZpbGVTZWxlY3Qoc3ludGhldGljRXZlbnQpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEZWxldGVBdHRhY2htZW50ID0gKGlkOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBmaWxlVG9EZWxldGUgPSBsb2NhbEF0dGFjaG1lbnRzW2lkXVxuICAgIGlmICghZmlsZVRvRGVsZXRlKSByZXR1cm5cblxuICAgIGNvbnN0IG5ld0F0dGFjaG1lbnRzID0gKGxvY2FsQXR0YWNobWVudHMgfHwgW10pLmZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ICE9PSBpZClcbiAgICBzZXRMb2NhbEF0dGFjaG1lbnRzKG5ld0F0dGFjaG1lbnRzKVxuXG4gICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM/Lih7IGtleTogJ2tub3dsZWRnZScsIHZhbHVlOiBuZXdBdHRhY2htZW50cywgZGVsZXRlS25vd2xlZGdlOiB0cnVlIH0pXG5cbiAgICBvbkZpbGVFcnJvckNoYW5nZT8uKGZhbHNlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRG93bmxvYWRBdHRhY2htZW50ID0gKGlkOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBmaWxlID0gKGxvY2FsQXR0YWNobWVudHMgfHwgW10pW2lkXVxuICAgIGlmICghZmlsZSkgcmV0dXJuXG5cbiAgICBoYW5kbGVEb3dubG9hZEtub3dsZWRnZSh7IGFnZW50SWQ6IHZhbHVlcy5nZW5lcmFsLmlkIS50b1N0cmluZygpLCBrbm93bGVkZ2VJZDogZmlsZS5pZCB9KVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNEb3dubG9hZGluZ1N1Y2Nlc3MgJiYgIWlzRG93bmxvYWRpbmdFcnJvciAmJiAhaXNEb3dubG9hZGluZykge1xuICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChpc0Rvd25sb2FkaW5nU3VjY2Vzcy5ibG9iKVxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gdXJsXG4gICAgICBsaW5rLmRvd25sb2FkID0gaXNEb3dubG9hZGluZ1N1Y2Nlc3MuZmlsZW5hbWVcbiAgICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspXG4gICAgICBsaW5rLmNsaWNrKClcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluaylcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpXG4gICAgICAgIGhhbmRsZVJlc2V0U3RhdGVzKClcbiAgICAgIH0sIDEwMClcbiAgICB9XG4gIH0sIFtpc0Rvd25sb2FkaW5nU3VjY2VzcywgaXNEb3dubG9hZGluZ0Vycm9yLCBpc0Rvd25sb2FkaW5nLCBoYW5kbGVSZXNldFN0YXRlc10pXG5cbiAgY29uc3QgaGFuZGxlQWN0aW9uID0gKHsgaWQsIGFjdGlvbiB9OiB7IGlkOiBudW1iZXI7IGFjdGlvbjogJ2RlbGV0ZScgfCAnZG93bmxvYWQnIH0pID0+IHtcbiAgICBpZiAoaXNEb3dubG9hZGluZykgcmV0dXJuXG4gICAgaWYgKGFjdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIGhhbmRsZURlbGV0ZUF0dGFjaG1lbnQoaWQpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGFjdGlvbiA9PT0gJ2Rvd25sb2FkJykge1xuICAgICAgaGFuZGxlRG93bmxvYWRBdHRhY2htZW50KGlkKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnRDbGljayA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIC8vIFBlcm1pdGlyIHByZXZpc3VhbGl6YWNpw7NuIHNpIHRpZW5lIGFyY2hpdm8gbG9jYWwgbyBVUkxzIGRlbCBiYWNrZW5kXG4gICAgLy8gU29sbyBzaSBubyB0aWVuZSBlcnJvcmVzIChzdGF0dXMgIT09ICdmYWlsZWQnKVxuICAgIGlmIChhdHRhY2htZW50LnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGF0dGFjaG1lbnQuZmlsZSBpbnN0YW5jZW9mIEZpbGUgfHxcbiAgICAgIGF0dGFjaG1lbnQub3JpZ2luYWxGaWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fFxuICAgICAgYXR0YWNobWVudC51cmxfZmlsZVxuICAgICkge1xuICAgICAgc2V0UHJldmlld0F0dGFjaG1lbnQoYXR0YWNobWVudClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVDbG9zZVByZXZpZXcgPSAoKSA9PiB7XG4gICAgc2V0UHJldmlld0F0dGFjaG1lbnQobnVsbClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTQ0FLU1dyYXBwZXI+XG4gICAgICAgIDxTQ0FLU1dyYXBwZXJIZWFkZXIgJGluZGV4PXswfT5cbiAgICAgICAgICA8U0NBS1NXcmFwcGVySGVhZGVyVGl0bGU+e3QoJ2tub3dsZWRnZVNlY3Rpb24ua25vd2xlZGdlVGFiJyl9PC9TQ0FLU1dyYXBwZXJIZWFkZXJUaXRsZT5cbiAgICAgICAgICA8U0NBS1NXcmFwcGVySGVhZGVySW5mbz5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIHt0KCdrbm93bGVkZ2VTZWN0aW9uLmluZm9MYWJlbCcpfVxuICAgICAgICAgICAgICA8U0NBS1NNb3JlSW5mb1NwYW4gb25DbGljaz17KCkgPT4gaGFuZGxlT25ib2FyZGluZ05hdmlnYXRpb24oJ21vcmVJbmZvJyl9PlxuICAgICAgICAgICAgICAgIHt0KCdrbm93bGVkZ2VTZWN0aW9uLm1vcmVJbmZvJyl9XG4gICAgICAgICAgICAgICAgPFNDQUtTTW9yZUluZm9JY29uV3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgIDxPcGVuIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gY29sb3I9XCIjMDA2RkFGXCIgLz5cbiAgICAgICAgICAgICAgICA8L1NDQUtTTW9yZUluZm9JY29uV3JhcHBlcj5cbiAgICAgICAgICAgICAgPC9TQ0FLU01vcmVJbmZvU3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvU0NBS1NXcmFwcGVySGVhZGVySW5mbz5cbiAgICAgICAgPC9TQ0FLU1dyYXBwZXJIZWFkZXI+XG4gICAgICAgIDxTQ0FLU1dyYXBwZXJDb250ZW50ICRpbmRleD17MX0+XG4gICAgICAgICAgPFNDQUtTRmlsZVVwbG9hZFdyYXBwZXJDb250ZW50PlxuICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2lzQXRTaXplTGltaXQgPyB0KCdrbm93bGVkZ2VTZWN0aW9uLmVycm9yLm1heFNpemVUaXRsZScpIDogJyd9IHpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgIDxTQ0FLU0Ryb3Bab25lXG4gICAgICAgICAgICAgICAgaXNBdFNpemVMaW1pdD17aXNBdFNpemVMaW1pdH1cbiAgICAgICAgICAgICAgICBpc0RyYWdnaW5nPXtpc0RyYWdnaW5nfVxuICAgICAgICAgICAgICAgIG9uRHJhZ0VudGVyPXtoYW5kbGVEcmFnRW50ZXJ9XG4gICAgICAgICAgICAgICAgb25EcmFnTGVhdmU9e2hhbmRsZURyYWdMZWF2ZX1cbiAgICAgICAgICAgICAgICBvbkRyYWdPdmVyPXtoYW5kbGVEcmFnT3Zlcn1cbiAgICAgICAgICAgICAgICBvbkRyb3A9e2hhbmRsZURyb3B9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8U0NBS1NEcm9wWm9uZUljb24+XG4gICAgICAgICAgICAgICAgICA8RmlsZVVwbG9hZCB3aWR0aD17MzB9IGhlaWdodD17MzB9IGNvbG9yPXtpc0F0U2l6ZUxpbWl0ID8gJyM5OTknIDogJyMwMDZGQUYnfSAvPlxuICAgICAgICAgICAgICAgIDwvU0NBS1NEcm9wWm9uZUljb24+XG4gICAgICAgICAgICAgICAgPFNDQUtTRHJvcFpvbmVUZXh0PlxuICAgICAgICAgICAgICAgICAgPFNDQUtTRHJvcFpvbmVUZXh0U3BhbiBpc0F0U2l6ZUxpbWl0PXtpc0F0U2l6ZUxpbWl0fSBkYXRhLWRyb3B6b25lLWxpbmsgb25DbGljaz17aGFuZGxlQXR0YWNoQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICB7dCgna25vd2xlZGdlU2VjdGlvbi5kcm9wWm9uZVRleHQuMScpfVxuICAgICAgICAgICAgICAgICAgPC9TQ0FLU0Ryb3Bab25lVGV4dFNwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57dCgna25vd2xlZGdlU2VjdGlvbi5kcm9wWm9uZVRleHQuMicpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L1NDQUtTRHJvcFpvbmVUZXh0PlxuICAgICAgICAgICAgICAgIDxTQ0FLU0Ryb3Bab25lSW5mbz57dCgna25vd2xlZGdlU2VjdGlvbi5pbmZvRmlsZVR5cGVzJyl9PC9TQ0FLU0Ryb3Bab25lSW5mbz5cbiAgICAgICAgICAgICAgPC9TQ0FLU0Ryb3Bab25lPlxuICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgIDwvU0NBS1NGaWxlVXBsb2FkV3JhcHBlckNvbnRlbnQ+XG4gICAgICAgICAgPFNDQUtTQXR0YWNobWVudHNXcmFwcGVyPlxuICAgICAgICAgICAgeyhsb2NhbEF0dGFjaG1lbnRzIHx8IFtdKS5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEF0dGFjaG1lbnRDYXJkXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIGtleT17YGF0dGFjaG1lbnQtJHthdHRhY2htZW50Py5uYW1lfS0ke2F0dGFjaG1lbnQ/LmlkfS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50PXthdHRhY2htZW50fVxuICAgICAgICAgICAgICAgICAgaGFuZGxlQWN0aW9uPXtoYW5kbGVBY3Rpb259XG4gICAgICAgICAgICAgICAgICBhYm1Lbm93bGVkZ2VTZWN0aW9uXG4gICAgICAgICAgICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQUtTQXR0YWNobWVudHNXcmFwcGVyPlxuICAgICAgICA8L1NDQUtTV3JhcHBlckNvbnRlbnQ+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgIGFjY2VwdD1cIi50eHQsLm1kLC5jc3YsLmRvYywuZG9jeCwucHB0LC5wcHR4LC5wZGYsLnBuZywuanBnLC5qcGVnLC54bHN4LC54bHNcIlxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlU2VsZWN0fVxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxuICAgICAgICAvPlxuICAgICAgPC9TQ0FLU1dyYXBwZXI+XG4gICAgICB7bW9kYWxQcm9wcy5pc09wZW4gJiYgKFxuICAgICAgICA8TW9kYWxGaWxlRXhjZWVkc1xuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgIHNldE1vZGFsUHJvcHMoeyBpc09wZW46IGZhbHNlLCBleGNsdWRlZEZpbGVzOiBbXSwgZXhjZWVkZWRGaWxlczogW10sIGludmFsaWRFeHRlbnNpb25GaWxlczogW10gfSlcbiAgICAgICAgICAgIG9uRmlsZUVycm9yQ2hhbmdlPy4oZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBleGNsdWRlZEZpbGVzPXttb2RhbFByb3BzLmV4Y2x1ZGVkRmlsZXN9XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcz17bW9kYWxQcm9wcy5leGNlZWRlZEZpbGVzfVxuICAgICAgICAgIGludmFsaWRFeHRlbnNpb25GaWxlcz17bW9kYWxQcm9wcy5pbnZhbGlkRXh0ZW5zaW9uRmlsZXN9XG4gICAgICAgICAgc2VjdGlvbj1cImFibV9hZ2VudFwiXG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3TW9kYWxcbiAgICAgICAgaXNPcGVuPXshIXByZXZpZXdBdHRhY2htZW50fVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZVByZXZpZXd9XG4gICAgICAgIGF0dGFjaG1lbnQ9e3ByZXZpZXdBdHRhY2htZW50fVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsU0FBU0MsVUFBVSxRQUFRLDZDQUE2QztBQUN4RSxTQUFTQyxJQUFJLFFBQVEsdUNBQXVDO0FBQzVELFNBQWlDQyxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDM0UsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBU0MsY0FBYyxRQUFRLDJDQUEyQztBQUMxRSxTQUFTQyxzQkFBc0IsUUFBUSxvQ0FBb0M7QUFHM0UsU0FDRUMsWUFBWSxFQUNaQyxrQkFBa0IsRUFDbEJDLG1CQUFtQixFQUNuQkMsdUJBQXVCLEVBQ3ZCQyxzQkFBc0IsRUFDdEJDLDZCQUE2QixFQUM3QkMsdUJBQXVCLEVBQ3ZCQyxpQkFBaUIsRUFDakJDLHdCQUF3QixFQUN4QkMsYUFBYSxFQUNiQyxpQkFBaUIsRUFDakJDLGlCQUFpQixFQUNqQkMsaUJBQWlCLEVBQ2pCQyxxQkFBcUIsUUFDaEIsOEJBQThCO0FBQ3JDLFNBQVNDLG9CQUFvQixRQUFRLCtDQUErQztBQUNwRixTQUFTQyx1QkFBdUIsUUFBUSx3Q0FBd0M7QUFDaEYsU0FBU0MsZ0JBQWdCLFFBQVEsbURBQW1EO0FBQ3BGLFNBQVNDLDRCQUE0QixFQUFFQyxTQUFTLFFBQVEscUNBQXFDO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBLEVBQUFDLElBQUEsSUFBQUMsS0FBQSxFQUFBQyxRQUFBLElBQUFDLFNBQUE7QUFFN0YsU0FBU0Ms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
|
|
293
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUb29sdGlwIiwiRmlsZVVwbG9hZCIsIk9wZW4iLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZVRyYW5zbGF0aW9uIiwiQXR0YWNobWVudENhcmQiLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiU0NBS1NXcmFwcGVyIiwiU0NBS1NXcmFwcGVySGVhZGVyIiwiU0NBS1NXcmFwcGVyQ29udGVudCIsIlNDQUtTV3JhcHBlckhlYWRlclRpdGxlIiwiU0NBS1NXcmFwcGVySGVhZGVySW5mbyIsIlNDQUtTRmlsZVVwbG9hZFdyYXBwZXJDb250ZW50IiwiU0NBS1NBdHRhY2htZW50c1dyYXBwZXIiLCJTQ0FLU01vcmVJbmZvU3BhbiIsIlNDQUtTTW9yZUluZm9JY29uV3JhcHBlciIsIlNDQUtTRHJvcFpvbmUiLCJTQ0FLU0Ryb3Bab25lSWNvbiIsIlNDQUtTRHJvcFpvbmVUZXh0IiwiU0NBS1NEcm9wWm9uZUluZm8iLCJTQ0FLU0Ryb3Bab25lVGV4dFNwYW4iLCJ1c2VEb3dubG9hZEtub3dsZWRnZSIsInVzZU9uYm9hcmRpbmdOYXZpZ2F0aW9uIiwiTW9kYWxGaWxlRXhjZWVkcyIsImFsbG93ZWRGaWxlVHlwZXNGb3JLbm93bGVkZ2UiLCJmaWxlVHlwZXMiLCJhcHBlbmRLbm93bGVkZ2VBdHRhY2htZW50cyIsImNhblByZXZpZXdLbm93bGVkZ2VBdHRhY2htZW50IiwiY29tcHV0ZUF0dGFjaG1lbnRzVG90YWxTaXplIiwiY3JlYXRlQ2xvc2VkS25vd2xlZGdlRmlsZUVycm9yTW9kYWxTdGF0ZSIsIk1BWF9LTk9XTEVER0VfVE9UQUxfU0laRSIsInByb2Nlc3NLbm93bGVkZ2VGaWxlcyIsInJlbW92ZUtub3dsZWRnZUF0dGFjaG1lbnRCeUluZGV4IiwicmVzb2x2ZUtub3dsZWRnZUF0dGFjaG1lbnRBdEluZGV4IiwicmVzb2x2ZUtub3dsZWRnZUZpbGVFcnJvck1vZGFsU3RhdGUiLCJzaG91bGRCbG9ja0tub3dsZWRnZVVwbG9hZCIsInNob3VsZEVuYWJsZUtub3dsZWRnZURyYWdTdGF0ZSIsInNob3VsZEhhbmRsZUtub3dsZWRnZUF0dGFjaG1lbnRBY3Rpb24iLCJzaG91bGRQcm9jZXNzS25vd2xlZGdlRmlsZUlucHV0Iiwic2hvdWxkUnVuS25vd2xlZGdlRG93bmxvYWRFZmZlY3QiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJNQVhfVE9UQUxfU0laRSIsIkFibUtub3dsZWRnZVNlY3Rpb24iLCJfcmVmIiwiaGFuZGxlU2V0QWdlbnRWYWx1ZXMiLCJ2YWx1ZXMiLCJvbkZpbGVFcnJvckNoYW5nZSIsInRvb2x0aXBaSW5kZXgiLCJfdXNlU3RhdGUiLCJrbm93bGVkZ2UiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJsb2NhbEF0dGFjaG1lbnRzIiwic2V0TG9jYWxBdHRhY2htZW50cyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwicHJldmlld0F0dGFjaG1lbnQiLCJzZXRQcmV2aWV3QXR0YWNobWVudCIsIl91c2VUcmFuc2xhdGlvbiIsInQiLCJfdXNlU3RhdGU1IiwiaXNPcGVuIiwiZXhjbHVkZWRGaWxlcyIsImV4Y2VlZGVkRmlsZXMiLCJpbnZhbGlkRXh0ZW5zaW9uRmlsZXMiLCJfdXNlU3RhdGU2IiwibW9kYWxQcm9wcyIsInNldE1vZGFsUHJvcHMiLCJfdXNlRG93bmxvYWRLbm93bGVkZ2UiLCJoYW5kbGVEb3dubG9hZEtub3dsZWRnZSIsImlzRG93bmxvYWRpbmdTdWNjZXNzIiwic3VjY2VzcyIsImlzRG93bmxvYWRpbmdFcnJvciIsImVycm9yIiwiaXNEb3dubG9hZGluZyIsImlzTG9hZGluZyIsImhhbmRsZVJlc2V0U3RhdGVzIiwiX3VzZU9uYm9hcmRpbmdOYXZpZ2F0IiwiaGFuZGxlT25ib2FyZGluZ05hdmlnYXRpb24iLCJmaWxlSW5wdXRSZWYiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImlzRHJhZ2dpbmciLCJzZXRJc0RyYWdnaW5nIiwiY3VycmVudFRvdGFsU2l6ZSIsImlzQXRTaXplTGltaXQiLCJoYW5kbGVBdHRhY2hDbGljayIsIl9maWxlSW5wdXRSZWYkY3VycmVudCIsImN1cnJlbnQiLCJjbGljayIsImhhbmRsZUZpbGVTZWxlY3QiLCJlIiwiZmlsZXMiLCJ0YXJnZXQiLCJfcHJvY2Vzc0tub3dsZWRnZUZpbGUiLCJBcnJheSIsImZyb20iLCJleGlzdGluZ0F0dGFjaG1lbnRzIiwiYWxsb3dlZEV4dGVuc2lvbnMiLCJtYXhUb3RhbFNpemUiLCJpbnNlcnRlZEZpbGVzIiwiaGFzRXJyb3JzIiwibGVuZ3RoIiwia2V5IiwidmFsdWUiLCJwcmV2IiwiaGFuZGxlRHJhZ0VudGVyIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJoYW5kbGVEcmFnTGVhdmUiLCJoYW5kbGVEcmFnT3ZlciIsImhhbmRsZURyb3AiLCJkYXRhVHJhbnNmZXIiLCJzeW50aGV0aWNFdmVudCIsImhhbmRsZURlbGV0ZUF0dGFjaG1lbnQiLCJpZCIsImZpbGVUb0RlbGV0ZSIsIm5ld0F0dGFjaG1lbnRzIiwiZGVsZXRlS25vd2xlZGdlIiwiaGFuZGxlRG93bmxvYWRBdHRhY2htZW50IiwiZmlsZSIsImFnZW50SWQiLCJnZW5lcmFsIiwidG9TdHJpbmciLCJrbm93bGVkZ2VJZCIsInVybCIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsImJsb2IiLCJsaW5rIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaHJlZiIsImRvd25sb2FkIiwiZmlsZW5hbWUiLCJzdHlsZSIsImRpc3BsYXkiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJzZXRUaW1lb3V0IiwicmVtb3ZlQ2hpbGQiLCJyZXZva2VPYmplY3RVUkwiLCJoYW5kbGVBY3Rpb24iLCJfcmVmMiIsImFjdGlvbiIsImhhbmRsZUF0dGFjaG1lbnRDbGljayIsImF0dGFjaG1lbnQiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJjaGlsZHJlbiIsIiRpbmRleCIsIm9uQ2xpY2siLCJ3aWR0aCIsImhlaWdodCIsImNvbG9yIiwidGl0bGUiLCJ6SW5kZXgiLCJvbkRyYWdFbnRlciIsIm9uRHJhZ0xlYXZlIiwib25EcmFnT3ZlciIsIm9uRHJvcCIsIm1hcCIsImluZGV4IiwicG9zaXRpb25JbmRleCIsImFibUtub3dsZWRnZVNlY3Rpb24iLCJmdWxsV2lkdGgiLCJjb25jYXQiLCJuYW1lIiwicmVmIiwidHlwZSIsIm11bHRpcGxlIiwiYWNjZXB0Iiwib25DaGFuZ2UiLCJvbkNsb3NlIiwic2VjdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9BYm1TZWN0aW9uL0FibUtub3dsZWRnZVNlY3Rpb24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcGx1c3BsdXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWN5Y2xlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9hbmNob3ItaXMtdmFsaWQgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvRmlsZVVwbG9hZCdcbmltcG9ydCB7IE9wZW4gfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9PcGVuJ1xuaW1wb3J0IHsgQ2hhbmdlRXZlbnQsIERyYWdFdmVudCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkJ1xuaW1wb3J0IHsgQXR0YWNobWVudFByZXZpZXdNb2RhbCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwnXG5pbXBvcnQgeyBNb2RhbFZhbHVlcyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50TW9kYWwnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7XG4gIFNDQUtTV3JhcHBlcixcbiAgU0NBS1NXcmFwcGVySGVhZGVyLFxuICBTQ0FLU1dyYXBwZXJDb250ZW50LFxuICBTQ0FLU1dyYXBwZXJIZWFkZXJUaXRsZSxcbiAgU0NBS1NXcmFwcGVySGVhZGVySW5mbyxcbiAgU0NBS1NGaWxlVXBsb2FkV3JhcHBlckNvbnRlbnQsXG4gIFNDQUtTQXR0YWNobWVudHNXcmFwcGVyLFxuICBTQ0FLU01vcmVJbmZvU3BhbixcbiAgU0NBS1NNb3JlSW5mb0ljb25XcmFwcGVyLFxuICBTQ0FLU0Ryb3Bab25lLFxuICBTQ0FLU0Ryb3Bab25lSWNvbixcbiAgU0NBS1NEcm9wWm9uZVRleHQsXG4gIFNDQUtTRHJvcFpvbmVJbmZvLFxuICBTQ0FLU0Ryb3Bab25lVGV4dFNwYW4sXG59IGZyb20gJy4vQWJtS25vd2xlZGdlU2VjdGlvbi5zdHlsZXMnXG5pbXBvcnQgeyB1c2VEb3dubG9hZEtub3dsZWRnZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUtub3dsZWRnZS9kb3dubG9hZEtub3dsZWRnZSdcbmltcG9ydCB7IHVzZU9uYm9hcmRpbmdOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlT25ib2FyZGluZ05hdmlnYXRpb24nXG5pbXBvcnQgeyBNb2RhbEZpbGVFeGNlZWRzIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL01vZGFsRmlsZUV4Y2VlZHMvTW9kYWxGaWxlRXhjZWVkcydcbmltcG9ydCB7IGFsbG93ZWRGaWxlVHlwZXNGb3JLbm93bGVkZ2UsIGZpbGVUeXBlcyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9mb3JtYXRFeHRlbnNpb25zJ1xuaW1wb3J0IHtcbiAgYXBwZW5kS25vd2xlZGdlQXR0YWNobWVudHMsXG4gIGNhblByZXZpZXdLbm93bGVkZ2VBdHRhY2htZW50LFxuICBjb21wdXRlQXR0YWNobWVudHNUb3RhbFNpemUsXG4gIGNyZWF0ZUNsb3NlZEtub3dsZWRnZUZpbGVFcnJvck1vZGFsU3RhdGUsXG4gIE1BWF9LTk9XTEVER0VfVE9UQUxfU0laRSxcbiAgcHJvY2Vzc0tub3dsZWRnZUZpbGVzLFxuICByZW1vdmVLbm93bGVkZ2VBdHRhY2htZW50QnlJbmRleCxcbiAgcmVzb2x2ZUtub3dsZWRnZUF0dGFjaG1lbnRBdEluZGV4LFxuICByZXNvbHZlS25vd2xlZGdlRmlsZUVycm9yTW9kYWxTdGF0ZSxcbiAgc2hvdWxkQmxvY2tLbm93bGVkZ2VVcGxvYWQsXG4gIHNob3VsZEVuYWJsZUtub3dsZWRnZURyYWdTdGF0ZSxcbiAgc2hvdWxkSGFuZGxlS25vd2xlZGdlQXR0YWNobWVudEFjdGlvbixcbiAgc2hvdWxkUHJvY2Vzc0tub3dsZWRnZUZpbGVJbnB1dCxcbiAgc2hvdWxkUnVuS25vd2xlZGdlRG93bmxvYWRFZmZlY3QsXG59IGZyb20gJy4vQWJtS25vd2xlZGdlU2VjdGlvbi5oZWxwZXJzJ1xuXG5jb25zdCBNQVhfVE9UQUxfU0laRSA9IE1BWF9LTk9XTEVER0VfVE9UQUxfU0laRVxuXG5leHBvcnQgY29uc3QgQWJtS25vd2xlZGdlU2VjdGlvbiA9ICh7XG4gIGhhbmRsZVNldEFnZW50VmFsdWVzLFxuICB2YWx1ZXMsXG4gIG9uRmlsZUVycm9yQ2hhbmdlLFxuICB0b29sdGlwWkluZGV4LFxufToge1xuICBoYW5kbGVTZXRBZ2VudFZhbHVlczogKHtcbiAgICBrZXksXG4gICAgdmFsdWUsXG4gICAgZGVsZXRlS25vd2xlZGdlLFxuICB9OiB7XG4gICAga2V5OiBzdHJpbmdcbiAgICB2YWx1ZTogdW5rbm93blxuICAgIGRlbGV0ZUtub3dsZWRnZT86IGJvb2xlYW5cbiAgfSkgPT4gdm9pZFxuICB2YWx1ZXM6IE1vZGFsVmFsdWVzXG4gIG9uRmlsZUVycm9yQ2hhbmdlPzogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICB0b29sdGlwWkluZGV4PzogbnVtYmVyXG59KSA9PiB7XG4gIGNvbnN0IFtsb2NhbEF0dGFjaG1lbnRzLCBzZXRMb2NhbEF0dGFjaG1lbnRzXSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRGaWxlW10+KHZhbHVlcy5rbm93bGVkZ2UgfHwgW10pXG4gIGNvbnN0IFtwcmV2aWV3QXR0YWNobWVudCwgc2V0UHJldmlld0F0dGFjaG1lbnRdID0gdXNlU3RhdGU8QXR0YWNobWVudEZpbGUgfCBudWxsPihudWxsKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCdhYm1fYWdlbnRfc2VjdGlvbicpXG4gIGNvbnN0IFttb2RhbFByb3BzLCBzZXRNb2RhbFByb3BzXSA9IHVzZVN0YXRlKHtcbiAgICBpc09wZW46IGZhbHNlLFxuICAgIGV4Y2x1ZGVkRmlsZXM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIGV4Y2VlZGVkRmlsZXM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIGludmFsaWRFeHRlbnNpb25GaWxlczogW10gYXMgc3RyaW5nW10sXG4gIH0pXG4gIGNvbnN0IHtcbiAgICBoYW5kbGVEb3dubG9hZEtub3dsZWRnZSxcbiAgICBzdWNjZXNzOiBpc0Rvd25sb2FkaW5nU3VjY2VzcyxcbiAgICBlcnJvcjogaXNEb3dubG9hZGluZ0Vycm9yLFxuICAgIGlzTG9hZGluZzogaXNEb3dubG9hZGluZyxcbiAgICBoYW5kbGVSZXNldFN0YXRlcyxcbiAgfSA9IHVzZURvd25sb2FkS25vd2xlZGdlKClcbiAgY29uc3QgeyBoYW5kbGVPbmJvYXJkaW5nTmF2aWdhdGlvbiB9ID0gdXNlT25ib2FyZGluZ05hdmlnYXRpb24oKVxuICBjb25zdCBmaWxlSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcbiAgY29uc3QgW2lzRHJhZ2dpbmcsIHNldElzRHJhZ2dpbmddID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgY3VycmVudFRvdGFsU2l6ZSA9IGNvbXB1dGVBdHRhY2htZW50c1RvdGFsU2l6ZShsb2NhbEF0dGFjaG1lbnRzIHx8IFtdKVxuICBjb25zdCBpc0F0U2l6ZUxpbWl0ID0gY3VycmVudFRvdGFsU2l6ZSA+PSBNQVhfVE9UQUxfU0laRVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaENsaWNrID0gKCkgPT4ge1xuICAgIGlmIChzaG91bGRCbG9ja0tub3dsZWRnZVVwbG9hZChpc0F0U2l6ZUxpbWl0KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpXG4gIH1cblxuICBjb25zdCBoYW5kbGVGaWxlU2VsZWN0ID0gKGU6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgY29uc3QgeyBmaWxlcyB9ID0gZS50YXJnZXRcbiAgICBpZiAoIXNob3VsZFByb2Nlc3NLbm93bGVkZ2VGaWxlSW5wdXQoZmlsZXMpKSByZXR1cm5cblxuICAgIGNvbnN0IHsgaW5zZXJ0ZWRGaWxlcywgZXhjZWVkZWRGaWxlcywgaW52YWxpZEV4dGVuc2lvbkZpbGVzLCBoYXNFcnJvcnMgfSA9IHByb2Nlc3NLbm93bGVkZ2VGaWxlcyh7XG4gICAgICBmaWxlczogQXJyYXkuZnJvbShmaWxlcyksXG4gICAgICBleGlzdGluZ0F0dGFjaG1lbnRzOiBsb2NhbEF0dGFjaG1lbnRzIHx8IFtdLFxuICAgICAgYWxsb3dlZEV4dGVuc2lvbnM6IGFsbG93ZWRGaWxlVHlwZXNGb3JLbm93bGVkZ2UsXG4gICAgICBmaWxlVHlwZXMsXG4gICAgICBtYXhUb3RhbFNpemU6IE1BWF9UT1RBTF9TSVpFLFxuICAgIH0pXG5cbiAgICBpZiAoaGFzRXJyb3JzKSB7XG4gICAgICBzZXRNb2RhbFByb3BzKHJlc29sdmVLbm93bGVkZ2VGaWxlRXJyb3JNb2RhbFN0YXRlKHsgZXhjZWVkZWRGaWxlcywgaW52YWxpZEV4dGVuc2lvbkZpbGVzIH0pKVxuICAgICAgb25GaWxlRXJyb3JDaGFuZ2U/Lih0cnVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkZpbGVFcnJvckNoYW5nZT8uKGZhbHNlKVxuICAgIH1cblxuICAgIGlmIChpbnNlcnRlZEZpbGVzLmxlbmd0aCkge1xuICAgICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM/Lih7IGtleTogJ2tub3dsZWRnZScsIHZhbHVlOiBpbnNlcnRlZEZpbGVzIH0pXG4gICAgICBzZXRMb2NhbEF0dGFjaG1lbnRzKHByZXYgPT4gYXBwZW5kS25vd2xlZGdlQXR0YWNobWVudHMocHJldiB8fCBbXSwgaW5zZXJ0ZWRGaWxlcykpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ0VudGVyID0gKGU6IERyYWdFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKHNob3VsZEVuYWJsZUtub3dsZWRnZURyYWdTdGF0ZShpc0F0U2l6ZUxpbWl0KSkge1xuICAgICAgc2V0SXNEcmFnZ2luZyh0cnVlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyYWdMZWF2ZSA9IChlOiBEcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHNldElzRHJhZ2dpbmcoZmFsc2UpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnT3ZlciA9IChlOiBEcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJvcCA9IChlOiBEcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHNldElzRHJhZ2dpbmcoZmFsc2UpXG5cbiAgICBpZiAoc2hvdWxkQmxvY2tLbm93bGVkZ2VVcGxvYWQoaXNBdFNpemVMaW1pdCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHsgZmlsZXMgfSA9IGUuZGF0YVRyYW5zZmVyXG4gICAgaWYgKCFzaG91bGRQcm9jZXNzS25vd2xlZGdlRmlsZUlucHV0KGZpbGVzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ3JlYXIgdW4gZXZlbnRvIHNpbnTDqXRpY28gcGFyYSByZXV0aWxpemFyIGxhIGzDs2dpY2EgZGUgaGFuZGxlRmlsZVNlbGVjdFxuICAgIGNvbnN0IHN5bnRoZXRpY0V2ZW50ID0ge1xuICAgICAgdGFyZ2V0OiB7IGZpbGVzIH0sXG4gICAgfSBhcyBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PlxuXG4gICAgaGFuZGxlRmlsZVNlbGVjdChzeW50aGV0aWNFdmVudClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUF0dGFjaG1lbnQgPSAoaWQ6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGZpbGVUb0RlbGV0ZSA9IHJlc29sdmVLbm93bGVkZ2VBdHRhY2htZW50QXRJbmRleChsb2NhbEF0dGFjaG1lbnRzIHx8IFtdLCBpZClcbiAgICBpZiAoIWZpbGVUb0RlbGV0ZSkgcmV0dXJuXG5cbiAgICBjb25zdCBuZXdBdHRhY2htZW50cyA9IHJlbW92ZUtub3dsZWRnZUF0dGFjaG1lbnRCeUluZGV4KGxvY2FsQXR0YWNobWVudHMgfHwgW10sIGlkKVxuICAgIGlmICghbmV3QXR0YWNobWVudHMpIHJldHVyblxuICAgIHNldExvY2FsQXR0YWNobWVudHMobmV3QXR0YWNobWVudHMpXG5cbiAgICBoYW5kbGVTZXRBZ2VudFZhbHVlcz8uKHsga2V5OiAna25vd2xlZGdlJywgdmFsdWU6IG5ld0F0dGFjaG1lbnRzLCBkZWxldGVLbm93bGVkZ2U6IHRydWUgfSlcblxuICAgIG9uRmlsZUVycm9yQ2hhbmdlPy4oZmFsc2UpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEb3dubG9hZEF0dGFjaG1lbnQgPSAoaWQ6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGZpbGUgPSByZXNvbHZlS25vd2xlZGdlQXR0YWNobWVudEF0SW5kZXgobG9jYWxBdHRhY2htZW50cyB8fCBbXSwgaWQpXG4gICAgaWYgKCFmaWxlKSByZXR1cm5cblxuICAgIGhhbmRsZURvd25sb2FkS25vd2xlZGdlKHsgYWdlbnRJZDogdmFsdWVzLmdlbmVyYWwuaWQhLnRvU3RyaW5nKCksIGtub3dsZWRnZUlkOiBmaWxlLmlkIH0pXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG91bGRSdW5Lbm93bGVkZ2VEb3dubG9hZEVmZmVjdChpc0Rvd25sb2FkaW5nU3VjY2VzcywgaXNEb3dubG9hZGluZ0Vycm9yLCBpc0Rvd25sb2FkaW5nKSkge1xuICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChpc0Rvd25sb2FkaW5nU3VjY2Vzcy5ibG9iKVxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gdXJsXG4gICAgICBsaW5rLmRvd25sb2FkID0gaXNEb3dubG9hZGluZ1N1Y2Nlc3MuZmlsZW5hbWVcbiAgICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspXG4gICAgICBsaW5rLmNsaWNrKClcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluaylcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpXG4gICAgICAgIGhhbmRsZVJlc2V0U3RhdGVzKClcbiAgICAgIH0sIDEwMClcbiAgICB9XG4gIH0sIFtpc0Rvd25sb2FkaW5nU3VjY2VzcywgaXNEb3dubG9hZGluZ0Vycm9yLCBpc0Rvd25sb2FkaW5nLCBoYW5kbGVSZXNldFN0YXRlc10pXG5cbiAgY29uc3QgaGFuZGxlQWN0aW9uID0gKHsgaWQsIGFjdGlvbiB9OiB7IGlkOiBudW1iZXI7IGFjdGlvbjogJ2RlbGV0ZScgfCAnZG93bmxvYWQnIH0pID0+IHtcbiAgICBpZiAoIXNob3VsZEhhbmRsZUtub3dsZWRnZUF0dGFjaG1lbnRBY3Rpb24oaXNEb3dubG9hZGluZykpIHJldHVyblxuICAgIGlmIChhY3Rpb24gPT09ICdkZWxldGUnKSB7XG4gICAgICBoYW5kbGVEZWxldGVBdHRhY2htZW50KGlkKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChhY3Rpb24gPT09ICdkb3dubG9hZCcpIHtcbiAgICAgIGhhbmRsZURvd25sb2FkQXR0YWNobWVudChpZClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50Q2xpY2sgPSAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICBpZiAoY2FuUHJldmlld0tub3dsZWRnZUF0dGFjaG1lbnQoYXR0YWNobWVudCkpIHtcbiAgICAgIHNldFByZXZpZXdBdHRhY2htZW50KGF0dGFjaG1lbnQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VQcmV2aWV3ID0gKCkgPT4ge1xuICAgIHNldFByZXZpZXdBdHRhY2htZW50KG51bGwpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U0NBS1NXcmFwcGVyPlxuICAgICAgICA8U0NBS1NXcmFwcGVySGVhZGVyICRpbmRleD17MH0+XG4gICAgICAgICAgPFNDQUtTV3JhcHBlckhlYWRlclRpdGxlPnt0KCdrbm93bGVkZ2VTZWN0aW9uLmtub3dsZWRnZVRhYicpfTwvU0NBS1NXcmFwcGVySGVhZGVyVGl0bGU+XG4gICAgICAgICAgPFNDQUtTV3JhcHBlckhlYWRlckluZm8+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICB7dCgna25vd2xlZGdlU2VjdGlvbi5pbmZvTGFiZWwnKX1cbiAgICAgICAgICAgICAgPFNDQUtTTW9yZUluZm9TcGFuIG9uQ2xpY2s9eygpID0+IGhhbmRsZU9uYm9hcmRpbmdOYXZpZ2F0aW9uKCdtb3JlSW5mbycpfT5cbiAgICAgICAgICAgICAgICB7dCgna25vd2xlZGdlU2VjdGlvbi5tb3JlSW5mbycpfVxuICAgICAgICAgICAgICAgIDxTQ0FLU01vcmVJbmZvSWNvbldyYXBwZXI+XG4gICAgICAgICAgICAgICAgICA8T3BlbiB3aWR0aD17MTh9IGhlaWdodD17MTh9IGNvbG9yPVwiIzAwNkZBRlwiIC8+XG4gICAgICAgICAgICAgICAgPC9TQ0FLU01vcmVJbmZvSWNvbldyYXBwZXI+XG4gICAgICAgICAgICAgIDwvU0NBS1NNb3JlSW5mb1NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L1NDQUtTV3JhcHBlckhlYWRlckluZm8+XG4gICAgICAgIDwvU0NBS1NXcmFwcGVySGVhZGVyPlxuICAgICAgICA8U0NBS1NXcmFwcGVyQ29udGVudCAkaW5kZXg9ezF9PlxuICAgICAgICAgIDxTQ0FLU0ZpbGVVcGxvYWRXcmFwcGVyQ29udGVudD5cbiAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXtpc0F0U2l6ZUxpbWl0ID8gdCgna25vd2xlZGdlU2VjdGlvbi5lcnJvci5tYXhTaXplVGl0bGUnKSA6ICcnfSB6SW5kZXg9e3Rvb2x0aXBaSW5kZXh9PlxuICAgICAgICAgICAgICA8U0NBS1NEcm9wWm9uZVxuICAgICAgICAgICAgICAgIGlzQXRTaXplTGltaXQ9e2lzQXRTaXplTGltaXR9XG4gICAgICAgICAgICAgICAgaXNEcmFnZ2luZz17aXNEcmFnZ2luZ31cbiAgICAgICAgICAgICAgICBvbkRyYWdFbnRlcj17aGFuZGxlRHJhZ0VudGVyfVxuICAgICAgICAgICAgICAgIG9uRHJhZ0xlYXZlPXtoYW5kbGVEcmFnTGVhdmV9XG4gICAgICAgICAgICAgICAgb25EcmFnT3Zlcj17aGFuZGxlRHJhZ092ZXJ9XG4gICAgICAgICAgICAgICAgb25Ecm9wPXtoYW5kbGVEcm9wfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFNDQUtTRHJvcFpvbmVJY29uPlxuICAgICAgICAgICAgICAgICAgPEZpbGVVcGxvYWQgd2lkdGg9ezMwfSBoZWlnaHQ9ezMwfSBjb2xvcj17aXNBdFNpemVMaW1pdCA/ICcjOTk5JyA6ICcjMDA2RkFGJ30gLz5cbiAgICAgICAgICAgICAgICA8L1NDQUtTRHJvcFpvbmVJY29uPlxuICAgICAgICAgICAgICAgIDxTQ0FLU0Ryb3Bab25lVGV4dD5cbiAgICAgICAgICAgICAgICAgIDxTQ0FLU0Ryb3Bab25lVGV4dFNwYW4gaXNBdFNpemVMaW1pdD17aXNBdFNpemVMaW1pdH0gZGF0YS1kcm9wem9uZS1saW5rIG9uQ2xpY2s9e2hhbmRsZUF0dGFjaENsaWNrfT5cbiAgICAgICAgICAgICAgICAgICAge3QoJ2tub3dsZWRnZVNlY3Rpb24uZHJvcFpvbmVUZXh0LjEnKX1cbiAgICAgICAgICAgICAgICAgIDwvU0NBS1NEcm9wWm9uZVRleHRTcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3QoJ2tub3dsZWRnZVNlY3Rpb24uZHJvcFpvbmVUZXh0LjInKX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9TQ0FLU0Ryb3Bab25lVGV4dD5cbiAgICAgICAgICAgICAgICA8U0NBS1NEcm9wWm9uZUluZm8+e3QoJ2tub3dsZWRnZVNlY3Rpb24uaW5mb0ZpbGVUeXBlcycpfTwvU0NBS1NEcm9wWm9uZUluZm8+XG4gICAgICAgICAgICAgIDwvU0NBS1NEcm9wWm9uZT5cbiAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICA8L1NDQUtTRmlsZVVwbG9hZFdyYXBwZXJDb250ZW50PlxuICAgICAgICAgIDxTQ0FLU0F0dGFjaG1lbnRzV3JhcHBlcj5cbiAgICAgICAgICAgIHsobG9jYWxBdHRhY2htZW50cyB8fCBbXSkubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxBdHRhY2htZW50Q2FyZFxuICAgICAgICAgICAgICAgICAgcG9zaXRpb25JbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICBrZXk9e2BhdHRhY2htZW50LSR7YXR0YWNobWVudD8ubmFtZX0tJHthdHRhY2htZW50Py5pZH0tJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudD17YXR0YWNobWVudH1cbiAgICAgICAgICAgICAgICAgIGhhbmRsZUFjdGlvbj17aGFuZGxlQWN0aW9ufVxuICAgICAgICAgICAgICAgICAgYWJtS25vd2xlZGdlU2VjdGlvblxuICAgICAgICAgICAgICAgICAgZnVsbFdpZHRoXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBdHRhY2htZW50Q2xpY2soYXR0YWNobWVudCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9TQ0FLU0F0dGFjaG1lbnRzV3JhcHBlcj5cbiAgICAgICAgPC9TQ0FLU1dyYXBwZXJDb250ZW50PlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICBhY2NlcHQ9XCIudHh0LC5tZCwuY3N2LC5kb2MsLmRvY3gsLnBwdCwucHB0eCwucGRmLC5wbmcsLmpwZywuanBlZywueGxzeCwueGxzXCJcbiAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlRmlsZVNlbGVjdH1cbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvU0NBS1NXcmFwcGVyPlxuICAgICAge21vZGFsUHJvcHMuaXNPcGVuICYmIChcbiAgICAgICAgPE1vZGFsRmlsZUV4Y2VlZHNcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRNb2RhbFByb3BzKGNyZWF0ZUNsb3NlZEtub3dsZWRnZUZpbGVFcnJvck1vZGFsU3RhdGUoKSlcbiAgICAgICAgICAgIG9uRmlsZUVycm9yQ2hhbmdlPy4oZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBleGNsdWRlZEZpbGVzPXttb2RhbFByb3BzLmV4Y2x1ZGVkRmlsZXN9XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcz17bW9kYWxQcm9wcy5leGNlZWRlZEZpbGVzfVxuICAgICAgICAgIGludmFsaWRFeHRlbnNpb25GaWxlcz17bW9kYWxQcm9wcy5pbnZhbGlkRXh0ZW5zaW9uRmlsZXN9XG4gICAgICAgICAgc2VjdGlvbj1cImFibV9hZ2VudFwiXG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3TW9kYWxcbiAgICAgICAgaXNPcGVuPXshIXByZXZpZXdBdHRhY2htZW50fVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZVByZXZpZXd9XG4gICAgICAgIGF0dGFjaG1lbnQ9e3ByZXZpZXdBdHRhY2htZW50fVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsT0FBTyxRQUFRLDhDQUE4QztBQUN0RSxTQUFTQyxVQUFVLFFBQVEsNkNBQTZDO0FBQ3hFLFNBQVNDLElBQUksUUFB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QUs7WUFDbkQsb0JBQ0U3SCxJQUFBLENBQUNwQyxjQUFjO2NBQ2JrSyxhQUFhLEVBQUVELEtBQU07Y0FFckJmLFVBQVUsRUFBRUEsVUFBVztjQUN2QkosWUFBWSxFQUFFQSxZQUFhO2NBQzNCcUIsbUJBQW1CO2NBQ25CQyxTQUFTO2NBQ1RkLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO2dCQUFBLE9BQVFMLHFCQUFxQixDQUFDQyxVQUFVLENBQUM7Y0FBQTtZQUFDLGlCQUFBbUIsTUFBQSxDQUw5Qm5CLFVBQVUsYUFBVkEsVUFBVSx1QkFBVkEsVUFBVSxDQUFFb0IsSUFBSSxPQUFBRCxNQUFBLENBQUluQixVQUFVLGFBQVZBLFVBQVUsdUJBQVZBLFVBQVUsQ0FBRS9CLEVBQUUsT0FBQWtELE1BQUEsQ0FBSUosS0FBSyxDQU0vRCxDQUFDO1VBRU4sQ0FBQztRQUFDLENBQ3FCLENBQUM7TUFBQSxDQUNQLENBQUMsZUFDdEI3SCxJQUFBO1FBQ0VtSSxHQUFHLEVBQUV4RixZQUFhO1FBQ2xCeUYsSUFBSSxFQUFDLE1BQU07UUFDWEMsUUFBUTtRQUNSQyxNQUFNLEVBQUMscUVBQXFFO1FBQzVFQyxRQUFRLEVBQUVqRixnQkFBaUI7UUFDM0I2QyxLQUFLLEVBQUU7VUFBRUMsT0FBTyxFQUFFO1FBQU87TUFBRSxDQUM1QixDQUFDO0lBQUEsQ0FDVSxDQUFDLEVBQ2R0RSxVQUFVLENBQUNMLE1BQU0saUJBQ2hCekIsSUFBQSxDQUFDbEIsZ0JBQWdCO01BQ2YwSixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQSxFQUFRO1FBQ2J6RyxhQUFhLENBQUMzQyx3Q0FBd0MsQ0FBQyxDQUFDLENBQUM7UUFDekRzQixpQkFBaUIsYUFBakJBLGlCQUFpQixlQUFqQkEsaUJBQWlCLENBQUcsS0FBSyxDQUFDO01BQzVCLENBQUU7TUFDRmdCLGFBQWEsRUFBRUksVUFBVSxDQUFDSixhQUFjO01BQ3hDQyxhQUFhLEVBQUVHLFVBQVUsQ0FBQ0gsYUFBYztNQUN4Q0MscUJBQXFCLEVBQUVFLFVBQVUsQ0FBQ0YscUJBQXNCO01BQ3hENkcsT0FBTyxFQUFDO0lBQVcsQ0FDcEIsQ0FDRixlQUNEekksSUFBQSxDQUFDbkMsc0JBQXNCO01BQ3JCNEQsTUFBTSxFQUFFLENBQUMsQ0FBQ0wsaUJBQWtCO01BQzVCb0gsT0FBTyxFQUFFekIsa0JBQW1CO01BQzVCRCxVQUFVLEVBQUUxRjtJQUFrQixDQUMvQixDQUFDO0VBQUEsQ0FDRixDQUFDO0FBRVAsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|