@projectcor/maia-components 2.50.0 → 2.50.1-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (427) hide show
  1. package/lib/App.js +44 -19
  2. package/lib/components/atoms/ActionableButton.spec.js +111 -0
  3. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +52 -0
  4. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +11 -0
  5. package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.spec.js +63 -0
  6. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +183 -0
  7. package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
  8. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +3 -1
  9. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +139 -0
  10. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +385 -0
  11. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.js +3 -1
  12. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
  13. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +94 -0
  14. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +24 -14
  15. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +396 -0
  16. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.js +28 -10
  17. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
  18. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +526 -0
  19. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +19 -15
  20. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +169 -0
  21. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +11 -0
  22. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +8 -4
  23. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +77 -0
  24. package/lib/components/atoms/Backdrop/Backdrop.spec.js +28 -0
  25. package/lib/components/atoms/CardMenu/CardMenu.spec.js +56 -0
  26. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +67 -0
  27. package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
  28. package/lib/components/atoms/Chip/Chip.spec.js +82 -0
  29. package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +26 -0
  30. package/lib/components/atoms/ClientSelector/ClientSelector.helpers.spec.js +45 -0
  31. package/lib/components/atoms/ClientSelector/ClientSelector.js +15 -13
  32. package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +133 -0
  33. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.spec.js +107 -0
  34. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
  35. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +46 -0
  36. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +109 -0
  37. package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +81 -0
  38. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +92 -0
  39. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +319 -0
  40. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +107 -0
  41. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +136 -0
  42. package/lib/components/atoms/CopyToClipboard.spec.js +74 -0
  43. package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +76 -0
  44. package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +86 -0
  45. package/lib/components/atoms/Expand/Expand.spec.js +57 -0
  46. package/lib/components/atoms/Fade/Fade.js +10 -6
  47. package/lib/components/atoms/Fade/Fade.spec.js +66 -0
  48. package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +75 -0
  49. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +104 -0
  50. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
  51. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +91 -0
  52. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
  53. package/lib/components/atoms/HelpButton.spec.js +87 -0
  54. package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +96 -0
  55. package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +54 -0
  56. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +21 -0
  57. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +20 -0
  58. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +26 -0
  59. package/lib/components/atoms/LoadingText/LoadingText.spec.js +25 -0
  60. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
  61. package/lib/components/atoms/MAIAError/MAIAError.spec.js +27 -0
  62. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +3 -2
  63. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.spec.js +113 -0
  64. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +3 -2
  65. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +381 -0
  66. package/lib/components/atoms/MAIAInput/MAIAInput.js +123 -99
  67. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +719 -0
  68. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +92 -0
  69. package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +193 -0
  70. package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +32 -0
  71. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +64 -0
  72. package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +43 -0
  73. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.js +9 -4
  74. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +114 -0
  75. package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +51 -0
  76. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +48 -0
  77. package/lib/components/atoms/ModalProject/ModalProject.spec.js +66 -0
  78. package/lib/components/atoms/NextPageLoader.spec.js +37 -0
  79. package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +20 -0
  80. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +35 -0
  81. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +47 -0
  82. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.js +4 -5
  83. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +146 -0
  84. package/lib/components/atoms/PrimaryButton.spec.js +42 -0
  85. package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +69 -0
  86. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
  87. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
  88. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +41 -24
  89. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +25 -10
  90. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
  91. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +78 -43
  92. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +170 -0
  93. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +9 -11
  94. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +199 -0
  95. package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +70 -0
  96. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +37 -15
  97. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +120 -0
  98. package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +8 -0
  99. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +31 -0
  100. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
  101. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
  102. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +29 -0
  103. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +38 -0
  104. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +16 -0
  105. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
  106. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +24 -0
  107. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.spec.js +71 -0
  108. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +120 -0
  109. package/lib/components/atoms/Switch/Switch.spec.js +41 -0
  110. package/lib/components/atoms/TextArea/CustomTextArea.spec.js +52 -0
  111. package/lib/components/atoms/TextArea/TextArea.helpers.spec.js +25 -0
  112. package/lib/components/atoms/TextArea/TextArea.spec.js +126 -0
  113. package/lib/components/atoms/ThirdButton.spec.js +29 -0
  114. package/lib/components/atoms/VideoModal/VideoModal.spec.js +68 -0
  115. package/lib/components/atoms/WithAppCfg.spec.js +82 -0
  116. package/lib/components/index.js +2 -1
  117. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +53 -0
  118. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +3 -2
  119. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +742 -0
  120. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +107 -0
  121. package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +256 -0
  122. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +6 -4
  123. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +175 -0
  124. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +25 -16
  125. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +318 -0
  126. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +50 -0
  127. package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +94 -0
  128. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
  129. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
  130. package/lib/components/molecules/AgentInputBlock/index.js +5 -0
  131. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
  132. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
  133. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
  134. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
  135. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
  136. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +66 -0
  137. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
  138. package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +145 -0
  139. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +204 -0
  140. package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.spec.js +622 -0
  141. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +93 -72
  142. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +264 -0
  143. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +86 -0
  144. package/lib/components/molecules/ChatAIHome/styles.js +85 -78
  145. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
  146. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +742 -0
  147. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +30 -14
  148. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +541 -0
  149. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
  150. package/lib/components/molecules/ChatAIMessages/newStyles.js +32 -35
  151. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +8 -1
  152. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +1394 -0
  153. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +25 -8
  154. package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +1401 -0
  155. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  156. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +33 -0
  157. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +116 -0
  158. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
  159. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +134 -0
  160. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
  161. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +142 -0
  162. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +63 -367
  163. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +241 -0
  164. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.js +69 -0
  165. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.spec.js +144 -0
  166. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentDropdown.js +95 -0
  167. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentSelector.js +174 -0
  168. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.js +99 -0
  169. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.spec.js +65 -0
  170. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
  171. package/lib/components/molecules/ChatAIModal/constants.spec.js +16 -0
  172. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +22 -0
  173. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +67 -0
  174. package/lib/components/molecules/ChatAIModal/layout.spec.js +72 -0
  175. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.spec.js +93 -0
  176. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +297 -0
  177. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.spec.js +62 -0
  178. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +221 -0
  179. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +66 -0
  180. package/lib/components/molecules/ChatFooter/ChatFooter.js +10 -4
  181. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +369 -0
  182. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +10 -0
  183. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +104 -0
  184. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +5 -2
  185. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +139 -0
  186. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
  187. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
  188. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +126 -0
  189. package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +115 -0
  190. package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +79 -0
  191. package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +37 -0
  192. package/lib/components/molecules/Sidebar/Sidebar.helpers.spec.js +119 -0
  193. package/lib/components/molecules/Sidebar/Sidebar.js +41 -23
  194. package/lib/components/molecules/Sidebar/Sidebar.spec.js +464 -0
  195. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +1067 -0
  196. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +2 -2
  197. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1236 -0
  198. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
  199. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.spec.js +77 -0
  200. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +503 -0
  201. package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
  202. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +525 -0
  203. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +246 -0
  204. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
  205. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
  206. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +291 -0
  207. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
  208. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +284 -0
  209. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +343 -0
  210. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +197 -0
  211. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +94 -0
  212. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +69 -0
  213. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
  214. package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
  215. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
  216. package/lib/components/organisms/ChatAIPage/index.js +3 -0
  217. package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +53 -0
  218. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
  219. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
  220. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
  221. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +49 -0
  222. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +67 -0
  223. package/lib/components/organisms/ProjectSummary/ProjectSummary.js +11 -7
  224. package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +117 -0
  225. package/lib/components/organisms/SnackBar/Snackbar.spec.js +66 -0
  226. package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +19 -0
  227. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.js +4 -1
  228. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +52 -0
  229. package/lib/constants/formatExtensions.spec.js +15 -0
  230. package/lib/constants/maiaExternalConnectorsAccess.spec.js +29 -0
  231. package/lib/constants/maiaFeatureAccess.spec.js +30 -0
  232. package/lib/constants/maiaHourAgentAccess.spec.js +30 -0
  233. package/lib/constants/maiaTaskPanelAccess.spec.js +41 -0
  234. package/lib/constants/permissions/clientRoleAccess.spec.js +65 -0
  235. package/lib/constants/permissions/index.js +2 -2
  236. package/lib/constants/permissions/utils.js +4 -1
  237. package/lib/constants/permissions/utils.spec.js +128 -0
  238. package/lib/constants/plannerSyncEvents.spec.js +31 -0
  239. package/lib/constants/taskUrls.spec.js +9 -0
  240. package/lib/dev/DevMaiaPage.js +30 -0
  241. package/lib/dev/DevReasoningTimeline.js +68 -37
  242. package/lib/dev/Providers.js +5 -3
  243. package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
  244. package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
  245. package/lib/hooks/useAccessClient/useAccessClient.spec.js +149 -0
  246. package/lib/hooks/useAgentModel/useAgentModel.spec.js +83 -0
  247. package/lib/hooks/useAgentModel/useCreateAgent.helpers.spec.js +268 -0
  248. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +314 -0
  249. package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
  250. package/lib/hooks/useAgentModel/useUpdateAgent.js +7 -6
  251. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +374 -0
  252. package/lib/hooks/useAgentSuggestions.spec.js +89 -0
  253. package/lib/hooks/useCaretPosition.spec.js +58 -0
  254. package/lib/hooks/useChatManager/useChatManager.helpers.js +3 -3
  255. package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +2027 -0
  256. package/lib/hooks/useChatManager/useChatManager.js +8 -7
  257. package/lib/hooks/useChatManager/useChatManager.spec.js +2409 -0
  258. package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +491 -0
  259. package/lib/hooks/useChatMessages/useChatMessages.spec.js +729 -0
  260. package/lib/hooks/useChats/useChats.spec.js +208 -0
  261. package/lib/hooks/useClientSearch.helpers.spec.js +52 -0
  262. package/lib/hooks/useClientSearch.spec.js +86 -0
  263. package/lib/hooks/useContextMentions.helpers.spec.js +267 -0
  264. package/lib/hooks/useContextMentions.spec.js +338 -0
  265. package/lib/hooks/useContextPinPopover.helpers.spec.js +183 -0
  266. package/lib/hooks/useContextPinPopover.spec.js +159 -0
  267. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
  268. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
  269. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.spec.js +257 -0
  270. package/lib/hooks/useDebounce.spec.js +42 -0
  271. package/lib/hooks/useEntitySearch.helpers.spec.js +723 -0
  272. package/lib/hooks/useEntitySearch.js +3 -1
  273. package/lib/hooks/useEntitySearch.spec.js +718 -0
  274. package/lib/hooks/useEvent.spec.js +45 -0
  275. package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
  276. package/lib/hooks/useFrequentlyUsedActions.js +61 -22
  277. package/lib/hooks/useFrequentlyUsedActions.spec.js +293 -0
  278. package/lib/hooks/useIsMaiaPageRoute.js +26 -0
  279. package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
  280. package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +122 -0
  281. package/lib/hooks/useKnowledge/downloadKnowledge.js +4 -4
  282. package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +148 -0
  283. package/lib/hooks/useKnowledge/saveKnowledge.spec.js +104 -0
  284. package/lib/hooks/useKnowledge/useKnowledgeOperations.js +16 -15
  285. package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +178 -0
  286. package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
  287. package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
  288. package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
  289. package/lib/hooks/useMentionPopover.helpers.spec.js +100 -0
  290. package/lib/hooks/useMentionPopover.spec.js +392 -0
  291. package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +176 -0
  292. package/lib/hooks/useMinimizedPillBottomOffset.spec.js +89 -0
  293. package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
  294. package/lib/hooks/useModal/useModal.spec.js +73 -0
  295. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.spec.js +138 -0
  296. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +417 -0
  297. package/lib/hooks/useProjectSearch.helpers.spec.js +89 -0
  298. package/lib/hooks/useProjectSearch.spec.js +91 -0
  299. package/lib/hooks/useProjectSummary.spec.js +193 -0
  300. package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +151 -0
  301. package/lib/hooks/useProjectSummaryConfig.js +10 -5
  302. package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
  303. package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +112 -0
  304. package/lib/hooks/useRecentClientsSearch.helpers.spec.js +33 -0
  305. package/lib/hooks/useRecentClientsSearch.spec.js +85 -0
  306. package/lib/hooks/useRecentContexts.spec.js +139 -0
  307. package/lib/hooks/useResize.spec.js +37 -0
  308. package/lib/hooks/useSkillsCatalog.spec.js +88 -0
  309. package/lib/hooks/useSlashCommands.spec.js +139 -0
  310. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +101 -0
  311. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
  312. package/lib/hooks/useStreamResponse.spec.js +199 -0
  313. package/lib/hooks/useT.spec.js +20 -0
  314. package/lib/hooks/useToggle.spec.js +33 -0
  315. package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +171 -0
  316. package/lib/index.js +5 -2
  317. package/lib/lang/br/index.js +26 -1
  318. package/lib/lang/en/index.js +26 -1
  319. package/lib/lang/es/index.js +26 -1
  320. package/lib/lang/fr/index.js +26 -1
  321. package/lib/services/appcues.spec.js +37 -0
  322. package/lib/services/maia/Access/updateAccess.spec.js +137 -0
  323. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  324. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +121 -0
  325. package/lib/services/maia/Actions/getSlashCommands.spec.js +91 -0
  326. package/lib/services/maia/Agents/connectors.js +3 -1
  327. package/lib/services/maia/Agents/connectors.spec.js +496 -0
  328. package/lib/services/maia/Agents/createAgent.spec.js +55 -0
  329. package/lib/services/maia/Agents/deleteAgent.spec.js +57 -0
  330. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
  331. package/lib/services/maia/Agents/getAgentById.spec.js +190 -0
  332. package/lib/services/maia/Agents/getAgentModels.spec.js +190 -0
  333. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +89 -0
  334. package/lib/services/maia/Agents/getAgents.helpers.spec.js +325 -0
  335. package/lib/services/maia/Agents/getAgents.spec.js +1135 -0
  336. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
  337. package/lib/services/maia/Agents/toggleFavorite.spec.js +59 -0
  338. package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
  339. package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
  340. package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
  341. package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
  342. package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
  343. package/lib/services/maia/Chats/patchChat.spec.js +41 -0
  344. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
  345. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
  346. package/lib/services/maia/Knowledge/delete.spec.js +45 -0
  347. package/lib/services/maia/Knowledge/download.spec.js +78 -0
  348. package/lib/services/maia/Knowledge/save.spec.js +58 -0
  349. package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +225 -0
  350. package/lib/services/maia/Orchestrator/orchestrator.spec.js +181 -0
  351. package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
  352. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +103 -0
  353. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
  354. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
  355. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
  356. package/lib/services/maia/Skills/createSkill.spec.js +68 -0
  357. package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
  358. package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
  359. package/lib/services/maia/Skills/getSkills.spec.js +152 -0
  360. package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
  361. package/lib/services/maia/client.spec.js +56 -0
  362. package/lib/services/utils/fetchCOR.spec.js +211 -0
  363. package/lib/services/utils/getCookie.spec.js +20 -0
  364. package/lib/services/utils/mapChatMessages.helpers.spec.js +336 -0
  365. package/lib/services/utils/mapChatMessages.spec.js +254 -0
  366. package/lib/store/chatsSidebarOptimistic.spec.js +145 -0
  367. package/lib/store/maiaLastChatPersistence.spec.js +22 -0
  368. package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
  369. package/lib/store/sessions/sessionNotificationSound.spec.js +145 -0
  370. package/lib/store/sessions/sessionNotifications.helpers.spec.js +63 -0
  371. package/lib/store/sessions/sessionNotifications.spec.js +106 -0
  372. package/lib/store/sessions/sessionStreamManager.helpers.spec.js +177 -0
  373. package/lib/store/sessions/sessionStreamManager.js +51 -55
  374. package/lib/store/sessions/sessionStreamManager.spec.js +939 -0
  375. package/lib/store/sessions/sessions.types.spec.js +16 -0
  376. package/lib/store/sessions/useSessionsStore.spec.js +135 -0
  377. package/lib/store/useChatsStore.js +4 -3
  378. package/lib/store/useChatsStore.spec.js +619 -0
  379. package/lib/store/useFaqsStore.spec.js +57 -0
  380. package/lib/styles/cascade.js +29 -3
  381. package/lib/styles/transitions.js +3 -1
  382. package/lib/types/global.d.js +1 -1
  383. package/lib/utils/actionCategoryMap.spec.js +18 -0
  384. package/lib/utils/agentDisplayName.spec.js +48 -0
  385. package/lib/utils/autoApproveStorage.spec.js +25 -0
  386. package/lib/utils/chatInputFiles.spec.js +39 -0
  387. package/lib/utils/contextMentionIcons.spec.js +41 -0
  388. package/lib/utils/contextMentionLabel.spec.js +13 -0
  389. package/lib/utils/contextMentionTriggers.spec.js +44 -0
  390. package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
  391. package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
  392. package/lib/utils/entityLinkRender.spec.js +72 -0
  393. package/lib/utils/fileDownloadHelper.spec.js +67 -0
  394. package/lib/utils/formatQuickActionMessage.spec.js +27 -0
  395. package/lib/utils/formatUnreadCount.spec.js +12 -0
  396. package/lib/utils/getUnitFileSize.spec.js +18 -0
  397. package/lib/utils/hitlAnalytics.spec.js +136 -0
  398. package/lib/utils/hoursPlannerQuickActionType.js +116 -1
  399. package/lib/utils/hoursPlannerQuickActionType.spec.js +124 -0
  400. package/lib/utils/imagePreprocessor.helpers.spec.js +28 -0
  401. package/lib/utils/imagePreprocessor.js +14 -3
  402. package/lib/utils/imagePreprocessor.spec.js +112 -0
  403. package/lib/utils/maiaPageRoute.js +24 -0
  404. package/lib/utils/maiaPageRoute.spec.js +23 -0
  405. package/lib/utils/mapBackendLang.spec.js +19 -0
  406. package/lib/utils/navigateContextEntity.js +2 -2
  407. package/lib/utils/navigateContextEntity.spec.js +50 -0
  408. package/lib/utils/normalizeAgentConnectors.spec.js +98 -0
  409. package/lib/utils/openTaskInCorPanel.js +2 -2
  410. package/lib/utils/openTaskInCorPanel.spec.js +43 -0
  411. package/lib/utils/orchestratorSubagents.spec.js +32 -0
  412. package/lib/utils/reasoningMappers.spec.js +103 -0
  413. package/lib/utils/recentContextsHomeLimit.spec.js +32 -0
  414. package/lib/utils/renderContextMentions.helpers.spec.js +87 -0
  415. package/lib/utils/renderContextMentions.spec.js +268 -0
  416. package/lib/utils/retryCompletion.spec.js +181 -0
  417. package/lib/utils/skillContentSize.spec.js +13 -0
  418. package/lib/utils/slashCommandMarker.spec.js +43 -0
  419. package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
  420. package/lib/utils/sseStreamContent.spec.js +31 -0
  421. package/lib/utils/streamActivityMessages.helpers.js +5 -4
  422. package/lib/utils/streamActivityMessages.helpers.spec.js +84 -0
  423. package/lib/utils/streamActivityMessages.js +32 -20
  424. package/lib/utils/streamActivityMessages.spec.js +336 -0
  425. package/lib/utils/validateTrimmedFields.spec.js +26 -0
  426. package/package.json +1 -1
  427. package/README.md +0 -2
@@ -663,7 +663,7 @@ export var useChatManager = function useChatManager(_ref) {
663
663
  };
664
664
  var currentProject = project;
665
665
  var sendMessage = useCallback(/*#__PURE__*/function () {
666
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(message, attachmentsOrOptions, faqId, agentSuggestionId, mentions, fuaId, scId) {
666
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(message, attachmentsOrOptions, faqId, agentSuggestionId, mentions, fuaId, scId, contextData) {
667
667
  var _options$projectChang, _contextRef$current$p;
668
668
  var willStartNewStream, sendGate, _normalizeSendMessage, attachments, options, payloadFields, contextMessage, displayMessage, newMessageId, lastMessageWithProject, currentAgentFromMessages, sessionId, _contextRef$current, ctxChipsProject, ctxProject, ctxClient, ctxTask, streamingPlaceholderId, finalMessage, history, lastMessageProjectId, projectToRequest, projects, payloadData;
669
669
  return _regeneratorRuntime.wrap(function (_context2) {
@@ -703,7 +703,8 @@ export var useChatManager = function useChatManager(_ref) {
703
703
  agentSuggestionId: agentSuggestionId,
704
704
  mentions: mentions,
705
705
  fuaId: fuaId,
706
- scId: scId
706
+ scId: scId,
707
+ contextData: contextData
707
708
  });
708
709
  contextMessage = buildContextMessage(payloadFields.mentions);
709
710
  displayMessage = formatQuickActionMessageForDisplay(message, {
@@ -806,7 +807,7 @@ export var useChatManager = function useChatManager(_ref) {
806
807
  }
807
808
  }, _callee2);
808
809
  }));
809
- return function (_x0, _x1, _x10, _x11, _x12, _x13, _x14) {
810
+ return function (_x0, _x1, _x10, _x11, _x12, _x13, _x14, _x15) {
810
811
  return _ref3.apply(this, arguments);
811
812
  };
812
813
  }(), [addMessage, commitToSession, event, askMaia, project, client, task, chipsProject, authUser, agent, t, waitingResponse, loadingMessages, isWebSearchActive, isDeepSearchActive]);
@@ -1050,7 +1051,7 @@ export var useChatManager = function useChatManager(_ref) {
1050
1051
  }
1051
1052
  }, _callee4);
1052
1053
  }));
1053
- return function (_x15) {
1054
+ return function (_x16) {
1054
1055
  return _ref4.apply(this, arguments);
1055
1056
  };
1056
1057
  }(), [waitingResponse, loadingMessages, replaceMessages, retryCompletion, askMaia, fetchProjects, authUser, agent, t, setActiveChatId]);
@@ -1080,7 +1081,7 @@ export var useChatManager = function useChatManager(_ref) {
1080
1081
  }
1081
1082
  }, _callee5);
1082
1083
  }));
1083
- return function (_x16, _x17) {
1084
+ return function (_x17, _x18) {
1084
1085
  return _ref6.apply(this, arguments);
1085
1086
  };
1086
1087
  }(), []);
@@ -1227,7 +1228,7 @@ export var useChatManager = function useChatManager(_ref) {
1227
1228
  }
1228
1229
  }, _callee6);
1229
1230
  }));
1230
- return function (_x18, _x19, _x20, _x21) {
1231
+ return function (_x19, _x20, _x21, _x22) {
1231
1232
  return _ref7.apply(this, arguments);
1232
1233
  };
1233
1234
  }(), [authUser, agent, commitToSession, handleStreamError, handleStreamUpdate, handleStreamFinish, handleApprovalRequired, t]);
@@ -1377,4 +1378,4 @@ export var useChatManager = function useChatManager(_ref) {
1377
1378
  isDisabled: waitingResponse || loadingMessages
1378
1379
  };
1379
1380
  };
1380
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiZmx1c2hTeW5jIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwiZmluZE1lc3NhZ2VXaXRoQXBwcm92YWxCeVRocmVhZElkcyIsInJlc29sdmVBcHByb3ZhbERlY2lzaW9uU3RhdHVzIiwicmVzb2x2ZUNvbnRpbnVlU3RyZWFtRGVjaXNpb24iLCJtYXBBdXRoVXNlclRvQ2hhdE1lc3NhZ2VVc2VyIiwibm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMiLCJub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MiLCJjb21wYWN0aW9uRm9yIiwicmVhc29uaW5nVHJhY2VGb3IiLCJyZXNvbHZlQ2xpZW50UGF5bG9hZCIsInJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0IiwicmVzb2x2ZVN0cmVhbUVycm9yTWVzc2FnZUtleSIsImFwcGx5UHJvamVjdERhc2hib2FyZE11dGF0aW9uIiwic2hvdWxkUmVmZXRjaE9wZW5UYXNrUGFuZWwiLCJyZXNvbHZlU2VuZE1lc3NhZ2VHYXRlIiwicmVzb2x2ZVNlbmRNZXNzYWdlUGF5bG9hZEZpZWxkcyIsImJ1aWxkQ2hhdEhpc3RvcnlGcm9tTWVzc2FnZXMiLCJyZXNvbHZlTGFzdE1lc3NhZ2VBZ2VudElkIiwicmVzb2x2ZUFnZW50SWRGb3JTdHJlYW0iLCJyZXNvbHZlVXNlclF1ZXN0aW9uTWVzc2FnZUlkIiwiYnVpbGRNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWQiLCJidWlsZE1haWFTdHJlYW1SZXF1ZXN0UGF5bG9hZEZvclByb2plY3RDaGFuZ2UiLCJyZXNvbHZlU3RyZWFtRXJyb3JIYW5kbGluZ01vZGUiLCJidWlsZFN0cmVhbUVycm9yQXNzaXN0YW50TWVzc2FnZSIsInJlc29sdmVIaXRsQXBwcm92YWxSZXF1aXJlZE91dGNvbWUiLCJidWlsZEhpdGxBcHByb3ZhbFBlbmRpbmdNZXNzYWdlIiwic2hvdWxkUHJlc2VydmVSZWFzb25pbmdPblN0cmVhbVN0b3AiLCJidWlsZFN0cmVhbVN0b3BQYXJ0aWFsQXNzaXN0YW50TWVzc2FnZSIsImJ1aWxkU3RyZWFtU3RvcENhbmNlbGxlZEFzc2lzdGFudE1lc3NhZ2UiLCJyZXNvbHZlUmV0cnlCbG9ja1JlYXNvbiIsInJlc29sdmVSZXRyeUVsaWdpYmlsaXR5IiwicmVzb2x2ZVJldHJ5VXNlckF0dGFjaG1lbnRzIiwic2hvdWxkVXBkYXRlUHJvamVjdE9uQ2hhbmdlIiwic2hvdWxkUmVzZW5kQWZ0ZXJQcm9qZWN0Q2hhbmdlIiwicmVzb2x2ZVN0cmVhbUZpbmlzaEZpbmFsTWVzc2FnZUlkIiwicmVzb2x2ZVN0cmVhbVN0b3BNZXNzYWdlSWRzIiwicmVzb2x2ZVJlbnRhYmlsaWRhZFByb2plY3RGYXFNZXNzYWdlIiwicmVzb2x2ZVN0cmVhbUVycm9yVXNlck1lc3NhZ2UiLCJyZXNvbHZlSGl0bEV4ZWN1dGlvbkNvbnRleHQiLCJyZXNvbHZlU2tpcHBlZEhpdGxNYW51YWxBcHByb3ZhbCIsInJlc29sdmVIaXRsU2tpcFJlc29sdXRpb25Tb3VyY2UiLCJyZXNvbHZlQ3JlYXRlQWdlbnRIaXRsQW5hbHl0aWNzRXZlbnRzIiwiYnVpbGRUZXJtaW5hbFNlc3Npb25SZWNvbmNpbGlhdGlvbktleSIsInNob3VsZEZvcmNlUmVsb2FkTWVzc2FnZXNPblRlcm1pbmFsU2Vzc2lvbiIsInNob3VsZFJvdGF0ZVNlc3Npb25Gb3JOZXdIb21lIiwic2hvdWxkU3dpdGNoVG9Jbml0aWFsQ2hhdFNlc3Npb24iLCJidWlsZFN0cmVhbUZpbmlzaEFzc2lzdGFudE1lc3NhZ2UiLCJyZXNvbHZlQWN0aXZlU3RyZWFtRmluaXNoUHJvY2Vzc2luZyIsInNob3VsZE1hcmtDaGF0UmVhZEFmdGVyU3RyZWFtRmluaXNoIiwic2hvdWxkRGlzcGF0Y2hGaXJzdFNlc3Npb25SZWZldGNoIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImJ1aWxkQ29udGV4dE1lc3NhZ2UiLCJmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IiwidXNlUHJvamVjdHMiLCJ1c2VUYWJUYXNrRGVmYXVsdCIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJkaXNwYXRjaE1haWFIb3Vyc0NoYXJnZWQiLCJmZXRjaEFnZW50RGV0YWlsIiwiYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QiLCJnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlIiwibm9ybWFsaXplSGl0bFRvb2xOYW1lIiwidHJhY2tNYW51YWxIaXRsRXZlbnRzIiwic2Vzc2lvblN0cmVhbWluZ1RleHQiLCJ1c2VTZXNzaW9uc1N0b3JlIiwidXNlU2Vzc2lvbk1ldGEiLCJzZXNzaW9uU3RyZWFtTWFuYWdlciIsIk1BWF9DT05DVVJSRU5UX1NUUkVBTVMiLCJhY3RpdmVWaWV3Iiwibm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kIiwiYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlIiwiZW5zdXJlU2Vzc2lvbkluU2lkZWJhciIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQiLCJzdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsImZpbmRVc2VyTWVzc2FnZUZvclJldHJ5IiwibWVzc2FnZXNXaXRob3V0UmV0cmllZFR1cm4iLCJnZXRDaGF0c1N0b3JlU3RhdGUiLCJ1c2VDaGF0c1N0b3JlIiwicmVhc29uaW5nU3RvcmUiLCJtYXBSZWFzb25pbmdUcmFjZSIsInVzZVN0YWJsZUNhbGxiYWNrcyIsImF1dGhVc2VyIiwiY3VycmVudFVzZXIiLCJuZXh0VXNlciIsImN1cnJlbnQiLCJpZCIsIm5hbWUiLCJhdmF0YXIiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWYiLCJpbml0aWFsQ2hhdElkIiwiY2hhdElkIiwidXNlckluaXRpYWxNZXNzYWdlIiwib25FcnJvciIsIl9yZWYkYWdlbnRzIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQiLCJwcm9qZWN0Iiwic2V0UHJvamVjdCIsImNsaWVudCIsInNldENsaWVudCIsInRhc2siLCJzZXRUYXNrIiwiYWdlbnQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImlzQXV0b0FwcHJvdmVBY3RpdmUiLCJjaGlwc1Byb2plY3QiLCJzZXRDaGlwc1Byb2plY3QiLCJldmVudCIsIl91c2VQcm9qZWN0cyIsImZldGNoUHJvamVjdHMiLCJfdXNlU3RhYmxlQ2FsbGJhY2tzIiwiX3VzZVRhYlRhc2tEZWZhdWx0IiwiZ2V0VGFiVGFza0RlZmF1bHQiLCJjdXJyZW50TWVzc2FnZUlkIiwiY3VycmVudFVzZXJRdWVzdGlvbiIsImN1cnJlbnRDaGF0SWQiLCJzZXRBY3RpdmVDaGF0SWQiLCJzdGF0ZSIsInJlcG9ydGVkRXZlbnQiLCJtZXNzYWdlc1JlZiIsImxhc3RNYW51YWxBcHByb3ZhbFJlZiIsInRyYWNrZWRNYW51YWxIaXRsS2V5c1JlZiIsIlNldCIsImhpdGxFeGVjdXRpb25Db250ZXh0UmVmIiwicmV0cnlTbmFwc2hvdFJlZiIsImlzUHJvY2Vzc2luZ1JlZiIsImZpcnN0VGltZVJlZiIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYiLCJhY3RpdmVTdHJlYW1DaGF0SWRSZWYiLCJjbGVhclN0cmVhbVVpUmVmIiwidW5kZWZpbmVkIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiYWN0aXZlTG9hZGluZ3MiLCJzZXRBY3RpdmVMb2FkaW5ncyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiYWN0aXZlU2Vzc2lvbklkIiwic2V0QWN0aXZlU2Vzc2lvbklkIiwiaXNNb3VudGVkUmVmIiwibGFzdEhhbmRsZWRUZXJtaW5hbFJlZiIsImlzV2ViU2VhcmNoQWN0aXZlUmVmIiwiaXNEZWVwU2VhcmNoQWN0aXZlUmVmIiwiaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZiIsImNvbnRleHRSZWYiLCJfdXNlQ2hhdE1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwibWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJsb2FkTWVzc2FnZXMiLCJhZGRNZXNzYWdlIiwicmVtb3ZlTWVzc2FnZSIsInJlcGxhY2VNZXNzYWdlcyIsImhhbmRsZVNjcm9sbCIsImNvbW1pdFRvU2Vzc2lvbiIsInNlc3Npb25JZCIsIm1lc3NhZ2UiLCJnZXRTdGF0ZSIsImlzIiwiZHJvcEZyb21TZXNzaW9uIiwibWVzc2FnZUlkIiwiY2xlYXJTZXNzaW9uVGFpbCIsInNldE1lc3NhZ2VzIiwic2V0IiwiYWN0aXZlU2Vzc2lvbk1ldGEiLCJzdGF0dXMiLCJrZXkiLCJmaW5pc2hlZEF0IiwidGFpbCIsImdldE1lc3NhZ2VzIiwiZm9yY2UiLCJjdXN0b21FdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwicHJldmlvdXNJbml0aWFsQ2hhdElkUmVmIiwicHJldmlvdXNJbml0aWFsQ2hhdElkIiwiaXNBY3RpdmUiLCJoYW5kbGVTdHJlYW1FcnJvciIsImN0eCIsImVycm9yTWVzc2FnZSIsImVycm9yUmF3TWVzc2FnZSIsInBsYWNlaG9sZGVySWQiLCJjbGVhciIsInJldHJ5U25hcHNob3QiLCJCb29sZWFuIiwic2hvdyIsInNldmVyaXR5IiwiX3Jlc29sdmVTdHJlYW1FcnJvck1lIiwibWVzc2FnZUtleSIsInRva2Vuc1VzZWQiLCJzaG93UmV0cnkiLCJyZXRyeUxhYmVsIiwibWFya0NoYXRBc1VucmVhZCIsImhhbmRsZVN0cmVhbVVwZGF0ZSIsImNvbnRlbnQiLCJwbGFjZWhvbGRlckV4aXN0cyIsInNvbWUiLCJtc2ciLCJzdGFydCIsImRhdGUiLCJEYXRlIiwidXNlciIsInJvbGUiLCJBU1NJU1RBTlQiLCJzZXRUZXh0IiwiaGFuZGxlU3RyZWFtRmluaXNoIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJyYXdBdHRhY2htZW50cyIsInN1Z2dlc3Rpb25zIiwiY29tcGxldGVkQWdlbnRJZCIsIl9yZXNvbHZlZENvbnRleHQiLCJyZWFzb25pbmciLCJfcmVhc29uaW5nVHJhY2VGb3IiLCJfd2luZG93JHRhc2tQYW5lbCIsInRlbXBNZXNzYWdlSWQiLCJhdHRhY2htZW50cyIsImZpbmFsTWVzc2FnZUlkIiwiY29tcGFjdGlvbiIsImZpbmFsVHJhY2UiLCJ0YXNrVXJsUmVnZXgiLCJtYW51YWxBcHByb3ZhbEZvckFuYWx5dGljcyIsIm1hbnVhbEFwcHJvdmFsIiwiX3lpZWxkJHJlc29sdmVBY3RpdmVTIiwiY29udGVudFRvQWRkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImVkaXRBZ2VudEZvbGxvd1VwIiwiaG91cnNDaGFyZ2VUb29scyIsImFmZmVjdGVkVGFza0lkcyIsIm1hbnVhbFdhc1Rhc2tFZGl0IiwibWFudWFsV2FzVGFza0RlbGV0ZSIsIndhc1Rhc2tFZGl0Iiwid2FzVGFza0RlbGV0ZSIsIndhc0NyZWF0ZUFnZW50QXBwcm92ZWQiLCJwZW5kaW5nQWN0aW9ucyIsIm9wZW5UYXNrUGFuZWxJZCIsIl93aW5kb3ckdGFza1BhbmVsMiIsIl93aW5kb3ckdGFza1BhbmVsMiRyZSIsIl9nZXRDaGF0c1N0b3JlU3RhdGUiLCJpc0NoYXRWaWV3VmlzaWJsZSIsIm1hcmtDaGF0QXNSZWFkIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJyZW5hbWUiLCJhYnJ1cHQiLCJSZWdFeHAiLCJwcm9qZWN0SWQiLCJwYXRobmFtZSIsIndpbmRvdyIsImxvY2F0aW9uIiwibXVsdGlBZ2VudHNBY2Nlc3MiLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiYXBwbHlEYXNoYm9hcmRNdXRhdGlvbiIsIm11dGF0aW9uIiwidGFza0lkcyIsIm5ld1Byb2plY3REYXNoYm9hcmQiLCJzZW50IiwibWFudWFsQXBwcm92YWxUb29sTmFtZSIsInRvb2xOYW1lIiwiYWdlbnRUeXBlIiwibm9ybWFsaXplVG9vbE5hbWUiLCJidWlsZEFjdGlvblR5cGVMaXN0IiwiZm9yRWFjaCIsInBheWxvYWQiLCJhaUNoYXRIaXRsT3B0aW9uIiwidGFza1BhbmVsIiwidGFza0lkIiwibGVuZ3RoIiwic291cmNlIiwidG9vbHMiLCJyZWZldGNoVGFzayIsImNhbGwiLCJhZ2VudElkIiwidGhlbiIsImNoYXRBZ2VudCIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsIl94MiIsIl94MyIsIl94NCIsIl94NSIsIl94NiIsIl94NyIsIl94OCIsIl94OSIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFuZGxlU3RyZWFtU3RvcCIsInBhcnRpYWxUZXh0IiwiX3Jlc29sdmVTdHJlYW1TdG9wTWVzIiwiY2FuY2VsbGVkTWVzc2FnZUlkIiwic3RvcHBlZFRyYWNlIiwiZmluaXNoIiwicmVtb3ZlIiwiY2FuY2VsbGVkTGFiZWwiLCJoYW5kbGVBcHByb3ZhbFJlcXVpcmVkIiwiYXBwcm92YWwiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJfbWFwUmVhc29uaW5nVHJhY2UiLCJoaXRsQ29udGV4dCIsImhpdGxPdXRjb21lIiwidHlwZSIsImltcHJlc3Npb24iLCJhaUNoYXRIaXRsIiwib3B0aW9uIiwic2tpcHBlZE1hbnVhbEFwcHJvdmFsIiwiYXBwcm92YWxNZXNzYWdlSWQiLCJhcHByb3ZhbFRyYWNlIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsIm9uQXBwcm92YWxSZXF1aXJlZCIsImFza01haWEiLCJyZXRyeUNvbXBsZXRpb24iLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0cmVhbUFjdGl2aXR5IiwidXBkYXRlU3RyZWFtQWN0aXZpdHkiLCJzdG9wU3RyZWFtaW5nIiwiY3VycmVudFByb2plY3QiLCJzZW5kTWVzc2FnZSIsIl9yZWYzIiwiX2NhbGxlZTIiLCJhdHRhY2htZW50c09yT3B0aW9ucyIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsIl9vcHRpb25zJHByb2plY3RDaGFuZyIsIl9jb250ZXh0UmVmJGN1cnJlbnQkcCIsIndpbGxTdGFydE5ld1N0cmVhbSIsInNlbmRHYXRlIiwiX25vcm1hbGl6ZVNlbmRNZXNzYWdlIiwib3B0aW9ucyIsInBheWxvYWRGaWVsZHMiLCJjb250ZXh0TWVzc2FnZSIsImRpc3BsYXlNZXNzYWdlIiwibmV3TWVzc2FnZUlkIiwibGFzdE1lc3NhZ2VXaXRoUHJvamVjdCIsImN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyIsIl9jb250ZXh0UmVmJGN1cnJlbnQiLCJjdHhDaGlwc1Byb2plY3QiLCJjdHhQcm9qZWN0IiwiY3R4Q2xpZW50IiwiY3R4VGFzayIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWQiLCJmaW5hbE1lc3NhZ2UiLCJoaXN0b3J5IiwibGFzdE1lc3NhZ2VQcm9qZWN0SWQiLCJwcm9qZWN0VG9SZXF1ZXN0IiwicHJvamVjdHMiLCJwYXlsb2FkRGF0YSIsIl9jb250ZXh0MiIsImlzUHJvY2Vzc2luZyIsImFjdGl2ZVN0cmVhbUNvdW50IiwiZ2V0QWN0aXZlQ291bnQiLCJtYXhDb25jdXJyZW50IiwicG1BaVR5cGVkVGV4dCIsImZpbHRlciIsImF0IiwidGl0bGUiLCJfb2JqZWN0U3ByZWFkIiwiVVNFUiIsInByb2plY3RDaGFuZ2VkIiwiaW5jb21lVHlwZSIsInRvU3RyaW5nIiwiYWdlbnROYW1lIiwicHJvamVjdE5hbWUiLCJhZ2VudEVudGl0eSIsImVudGl0eSIsImFnZW50RW1vamkiLCJlbW9qaSIsImNvbnRleHREYXRhIiwiX3gwIiwiX3gxIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl94MTQiLCJjaGFuZ2VQcm9qZWN0IiwicmV0cnlNZXNzYWdlIiwiX3JlZjQiLCJfY2FsbGVlNCIsIl90cnVuY2F0ZWQkYXQiLCJyZXRyeUJsb2NrIiwicHJldmlvdXNNZXNzYWdlcyIsInVzZXJNZXNzYWdlIiwicmV0cnlFbGlnaWJpbGl0eSIsInR1cm5JZCIsInVzZU9yY2hlc3RyYXRvckZhbGxiYWNrIiwidHJ1bmNhdGVkIiwicGxhY2Vob2xkZXIiLCJuZXh0TWVzc2FnZXMiLCJfY29udGV4dFJlZiRjdXJyZW50MiIsInJlcGxheVZpYU9yY2hlc3RyYXRvciIsInJlc3VsdCIsIl9jb250ZXh0NCIsImlzU2Vzc2lvblN0cmVhbUFjdGl2ZSIsImVsaWdpYmxlIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiX3JlZjUiLCJfY2FsbGVlMyIsIl90IiwiX2NvbnRleHQzIiwic3RhcnRlZCIsInJlYXNvbiIsImxhbmciLCJTdHJpbmciLCJOdW1iZXIiLCJfeDE1IiwiaGFuZGxlRmVlZGJhY2siLCJfcmVmNiIsIl9jYWxsZWU1IiwiZmVlZGJhY2tQcm9wIiwiY2hhdE1lc3NhZ2VJZCIsInJlc3BvbnNlIiwiX2NvbnRleHQ1IiwiQ2hhdHMiLCJ3YXNIZWxwZnVsQ2hhdCIsIlRIVU1CU19VUCIsIm1hcCIsIndhc0hlbHBmdWwiLCJfeDE2IiwiX3gxNyIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJfcmVmNyIsIl9jYWxsZWU2IiwidGhyZWFkSWRzIiwiZGVjaXNpb24iLCJlZGl0ZWRBY3Rpb25zIiwibWV0YWRhdGEiLCJmb3VuZCIsIm1lc3NhZ2VXaXRoQXBwcm92YWwiLCJmb3VuZFNlc3Npb25JZCIsIm5ld1N0YXR1cyIsImlzQWN0aXZlU2Vzc2lvbiIsInN0cmVhbU1lc3NhZ2VJZCIsImhpdGxDdHgiLCJyZWxlYXNlQWN0aXZlUHJvY2Vzc2luZyIsIl9jb250ZXh0NiIsImdldCIsInNlc3Npb25faWQiLCJtZXNzYWdlVGV4dCIsInBlbmRpbmdfYWN0aW9ucyIsImFwcHJvdmFsU3RhdHVzIiwic3RhcnRDb250aW51ZVN0cmVhbSIsImNvbnRpbnVlUmVxdWVzdCIsImhpdGxFeGVjdXRpb25Db250ZXh0IiwiY2FsbGJhY2tzIiwiZmluaXNoUGF5bG9hZCIsInJlc29sdmVkQ29udGV4dCIsImFwcHJvdmFsUGF5bG9hZCIsIl94MTgiLCJfeDE5IiwiX3gyMCIsIl94MjEiLCJpbml0aWFsaXplQ2hhdCIsIl9jYWxsZWU3IiwiX3VzZXJJbml0aWFsTWVzc2FnZSRtIiwiX3VzZXJJbml0aWFsTWVzc2FnZSRhIiwiX3JlZjkiLCJfcmVzb2x2ZVByb2plY3RUb1JlcXUiLCJoYXNJbml0aWFsTWVzc2FnZSIsImhhc0luaXRpYWxBdHRhY2htZW50cyIsImhhc0luaXRpYWxGYXEiLCJoYXNJbml0aWFsRnVhIiwiaGFzSW5pdGlhbFNjIiwiX2NvbnRleHRSZWYkY3VycmVudDMiLCJpbml0aWFsRGlzcGxheU1lc3NhZ2UiLCJfY29udGV4dDciLCJ0cmltIiwiaGlzdG9yeU1lc3NhZ2UiLCJ1c2VySWQiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsImNvbXBhbnlJZCIsImNvbXBhbnlfaWQiLCJmZWVJZCIsInRhc2tOYW1lIiwicmVzZXRDaGF0IiwicHJldmlvdXNTZXNzaW9uSWQiLCJzdG9wR2VuZXJhdGlvbiIsImlzRGlzYWJsZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlQ2hhdE1hbmFnZXIvdXNlQ2hhdE1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmFkaXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0ZWQtb3B0aW9uYWwtY2hhaW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGZsdXNoU3luYyB9IGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5pbXBvcnQgeyB1c2VDaGF0TWVzc2FnZXMgfSBmcm9tICcuLi91c2VDaGF0TWVzc2FnZXMnXG5pbXBvcnQgeyB1c2VPcmNoZXN0cmF0b3JTdHJlYW0gfSBmcm9tICcuLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0nXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vdXNlVCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHtcbiAgZmluZE1lc3NhZ2VXaXRoQXBwcm92YWxCeVRocmVhZElkcyxcbiAgcmVzb2x2ZUFwcHJvdmFsRGVjaXNpb25TdGF0dXMsXG4gIHJlc29sdmVDb250aW51ZVN0cmVhbURlY2lzaW9uLFxuICBtYXBBdXRoVXNlclRvQ2hhdE1lc3NhZ2VVc2VyLFxuICBub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyxcbiAgbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzLFxuICBjb21wYWN0aW9uRm9yLFxuICByZWFzb25pbmdUcmFjZUZvcixcbiAgcmVzb2x2ZUNsaWVudFBheWxvYWQsXG4gIHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0LFxuICByZXNvbHZlU3RyZWFtRXJyb3JNZXNzYWdlS2V5LFxuICBhcHBseVByb2plY3REYXNoYm9hcmRNdXRhdGlvbixcbiAgc2hvdWxkUmVmZXRjaE9wZW5UYXNrUGFuZWwsXG4gIHJlc29sdmVTZW5kTWVzc2FnZUdhdGUsXG4gIHJlc29sdmVTZW5kTWVzc2FnZVBheWxvYWRGaWVsZHMsXG4gIGJ1aWxkQ2hhdEhpc3RvcnlGcm9tTWVzc2FnZXMsXG4gIHJlc29sdmVMYXN0TWVzc2FnZUFnZW50SWQsXG4gIHJlc29sdmVBZ2VudElkRm9yU3RyZWFtLFxuICByZXNvbHZlVXNlclF1ZXN0aW9uTWVzc2FnZUlkLFxuICBidWlsZE1haWFTdHJlYW1SZXF1ZXN0UGF5bG9hZCxcbiAgYnVpbGRNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWRGb3JQcm9qZWN0Q2hhbmdlLFxuICByZXNvbHZlU3RyZWFtRXJyb3JIYW5kbGluZ01vZGUsXG4gIGJ1aWxkU3RyZWFtRXJyb3JBc3Npc3RhbnRNZXNzYWdlLFxuICByZXNvbHZlSGl0bEFwcHJvdmFsUmVxdWlyZWRPdXRjb21lLFxuICBidWlsZEhpdGxBcHByb3ZhbFBlbmRpbmdNZXNzYWdlLFxuICBzaG91bGRQcmVzZXJ2ZVJlYXNvbmluZ09uU3RyZWFtU3RvcCxcbiAgYnVpbGRTdHJlYW1TdG9wUGFydGlhbEFzc2lzdGFudE1lc3NhZ2UsXG4gIGJ1aWxkU3RyZWFtU3RvcENhbmNlbGxlZEFzc2lzdGFudE1lc3NhZ2UsXG4gIHJlc29sdmVSZXRyeUJsb2NrUmVhc29uLFxuICByZXNvbHZlUmV0cnlFbGlnaWJpbGl0eSxcbiAgcmVzb2x2ZVJldHJ5VXNlckF0dGFjaG1lbnRzLFxuICBzaG91bGRVcGRhdGVQcm9qZWN0T25DaGFuZ2UsXG4gIHNob3VsZFJlc2VuZEFmdGVyUHJvamVjdENoYW5nZSxcbiAgcmVzb2x2ZVN0cmVhbUZpbmlzaEZpbmFsTWVzc2FnZUlkLFxuICByZXNvbHZlU3RyZWFtU3RvcE1lc3NhZ2VJZHMsXG4gIHJlc29sdmVSZW50YWJpbGlkYWRQcm9qZWN0RmFxTWVzc2FnZSxcbiAgcmVzb2x2ZVN0cmVhbUVycm9yVXNlck1lc3NhZ2UsXG4gIHJlc29sdmVIaXRsRXhlY3V0aW9uQ29udGV4dCxcbiAgcmVzb2x2ZVNraXBwZWRIaXRsTWFudWFsQXBwcm92YWwsXG4gIHJlc29sdmVIaXRsU2tpcFJlc29sdXRpb25Tb3VyY2UsXG4gIHJlc29sdmVDcmVhdGVBZ2VudEhpdGxBbmFseXRpY3NFdmVudHMsXG4gIGJ1aWxkVGVybWluYWxTZXNzaW9uUmVjb25jaWxpYXRpb25LZXksXG4gIHNob3VsZEZvcmNlUmVsb2FkTWVzc2FnZXNPblRlcm1pbmFsU2Vzc2lvbixcbiAgc2hvdWxkUm90YXRlU2Vzc2lvbkZvck5ld0hvbWUsXG4gIHNob3VsZFN3aXRjaFRvSW5pdGlhbENoYXRTZXNzaW9uLFxuICBidWlsZFN0cmVhbUZpbmlzaEFzc2lzdGFudE1lc3NhZ2UsXG4gIHJlc29sdmVBY3RpdmVTdHJlYW1GaW5pc2hQcm9jZXNzaW5nLFxuICBzaG91bGRNYXJrQ2hhdFJlYWRBZnRlclN0cmVhbUZpbmlzaCxcbiAgc2hvdWxkRGlzcGF0Y2hGaXJzdFNlc3Npb25SZWZldGNoLFxufSBmcm9tICcuL3VzZUNoYXRNYW5hZ2VyLmhlbHBlcnMnXG5pbXBvcnQgeyBTZW5kTWVzc2FnZU9wdGlvbnMsIFVzZUNoYXRNYW5hZ2VyUHJvcHMgfSBmcm9tICcuL3VzZUNoYXRNYW5hZ2VyLmludGVyZmFjZSdcbmltcG9ydCB7IHVzZVVzZXIsIENPUlVzZXIgfSBmcm9tICcuLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vdXNlRXZlbnQnXG5pbXBvcnQgbWFpYSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRNZXNzYWdlVXNlciwgQ2hhdEhpc3RvcnlSb2xlLCBBcHByb3ZhbFJlcXVlc3QgfSBmcm9tICcuLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24sIENvbnRleHRNZXNzYWdlLCBidWlsZENvbnRleHRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlJ1xuXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvUHJvamVjdCdcbmltcG9ydCB7IHVzZVByb2plY3RzIH0gZnJvbSAnLi4vdXNlUHJvamVjdHMnXG5pbXBvcnQgeyB1c2VUYWJUYXNrRGVmYXVsdCB9IGZyb20gJy4uL3VzZVRhYlRhc2tEZWZhdWx0J1xuaW1wb3J0IHsgVEFTS19VUkxfUkVHRVhfUEFUVEVSTiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy90YXNrVXJscydcbmltcG9ydCB7IGRpc3BhdGNoTWFpYUhvdXJzQ2hhcmdlZCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9wbGFubmVyU3luY0V2ZW50cydcbmltcG9ydCB7IGZldGNoQWdlbnREZXRhaWwgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9mZXRjaEFnZW50RGV0YWlsJ1xuaW1wb3J0IHtcbiAgYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QsXG4gIGdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUsXG4gIG5vcm1hbGl6ZUhpdGxUb29sTmFtZSxcbiAgdHJhY2tNYW51YWxIaXRsRXZlbnRzLFxufSBmcm9tICcuLi8uLi91dGlscy9oaXRsQW5hbHl0aWNzJ1xuaW1wb3J0IHsgdHlwZSBIaXRsRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBzZXNzaW9uU3RyZWFtaW5nVGV4dCB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25TdHJlYW1pbmdUZXh0J1xuaW1wb3J0IHsgdXNlU2Vzc2lvbnNTdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3VzZVNlc3Npb25zU3RvcmUnXG5pbXBvcnQgeyB1c2VTZXNzaW9uTWV0YSB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3VzZVNlc3Npb25NZXRhJ1xuaW1wb3J0IHsgc2Vzc2lvblN0cmVhbU1hbmFnZXIsIE1BWF9DT05DVVJSRU5UX1NUUkVBTVMgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uU3RyZWFtTWFuYWdlcidcbmltcG9ydCB7IGFjdGl2ZVZpZXcgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9hY3RpdmVWaWV3J1xuaW1wb3J0IHsgbm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kIH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvbk5vdGlmaWNhdGlvbnMnXG5pbXBvcnQgeyBidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUsIGVuc3VyZVNlc3Npb25JblNpZGViYXIgfSBmcm9tICcuLi8uLi9zdG9yZS9jaGF0c1NpZGViYXJPcHRpbWlzdGljJ1xuaW1wb3J0IHsgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCwgc3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQgfSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgZmluZFVzZXJNZXNzYWdlRm9yUmV0cnksIG1lc3NhZ2VzV2l0aG91dFJldHJpZWRUdXJuIH0gZnJvbSAnLi4vLi4vdXRpbHMvcmV0cnlDb21wbGV0aW9uJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1Db250ZXh0IH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtL3VzZU9yY2hlc3RyYXRvclN0cmVhbS5pbnRlcmZhY2UnXG5pbXBvcnQgeyBnZXRDaGF0c1N0b3JlU3RhdGUsIHVzZUNoYXRzU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZS91c2VDaGF0c1N0b3JlJ1xuaW1wb3J0IHsgcmVhc29uaW5nU3RvcmUgfSBmcm9tICcuLi91c2VSZWFzb25pbmdUcmFjZSdcbmltcG9ydCB7IG1hcFJlYXNvbmluZ1RyYWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvcmVhc29uaW5nTWFwcGVycydcbmltcG9ydCB0eXBlIHsgUmVhc29uaW5nVHJhY2VQYXlsb2FkIH0gZnJvbSAnLi4vLi4vdHlwZXMvcmVhc29uaW5nJ1xuXG5jb25zdCB1c2VTdGFibGVDYWxsYmFja3MgPSAoYXV0aFVzZXI6IENPUlVzZXIpID0+IHtcbiAgY29uc3QgY3VycmVudFVzZXIgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VVc2VyPihtYXBBdXRoVXNlclRvQ2hhdE1lc3NhZ2VVc2VyKGF1dGhVc2VyKSlcblxuICBjb25zdCBuZXh0VXNlciA9IG1hcEF1dGhVc2VyVG9DaGF0TWVzc2FnZVVzZXIoYXV0aFVzZXIpXG4gIGlmIChcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmlkICE9PSBuZXh0VXNlci5pZCB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQubmFtZSAhPT0gbmV4dFVzZXIubmFtZSB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuYXZhdGFyICE9PSBuZXh0VXNlci5hdmF0YXJcbiAgKSB7XG4gICAgY3VycmVudFVzZXIuY3VycmVudCA9IG5leHRVc2VyXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGN1cnJlbnRVc2VyOiBjdXJyZW50VXNlci5jdXJyZW50LFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VDaGF0TWFuYWdlciA9ICh7XG4gIGNoYXRJZDogaW5pdGlhbENoYXRJZCxcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBvbkVycm9yLFxuICBhZ2VudHMgPSBbXSxcbn06IFVzZUNoYXRNYW5hZ2VyUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3Qge1xuICAgIHByb2plY3QsXG4gICAgc2V0UHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgc2V0Q2xpZW50LFxuICAgIHRhc2ssXG4gICAgc2V0VGFzayxcbiAgICBhZ2VudCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgaXNBdXRvQXBwcm92ZUFjdGl2ZSxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGZldGNoUHJvamVjdHMgfSA9IHVzZVByb2plY3RzKClcbiAgY29uc3QgeyBjdXJyZW50VXNlciB9ID0gdXNlU3RhYmxlQ2FsbGJhY2tzKGF1dGhVc2VyKVxuICBjb25zdCB7IGdldFRhYlRhc2tEZWZhdWx0IH0gPSB1c2VUYWJUYXNrRGVmYXVsdCgpXG5cbiAgY29uc3QgY3VycmVudE1lc3NhZ2VJZCA9IHVzZVJlZih1dWlkdjQoKSlcbiAgY29uc3QgY3VycmVudFVzZXJRdWVzdGlvbiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBjdXJyZW50Q2hhdElkID0gdXNlUmVmKGluaXRpYWxDaGF0SWQgfHwgdXVpZHY0KCkpXG4gIGNvbnN0IHNldEFjdGl2ZUNoYXRJZCA9IHVzZUNoYXRzU3RvcmUoc3RhdGUgPT4gc3RhdGUuc2V0QWN0aXZlQ2hhdElkKVxuICBjb25zdCByZXBvcnRlZEV2ZW50ID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxDaGF0TWVzc2FnZVtdPihbXSlcbiAgLyoqXG4gICAqIEd1YXJkYSBpbmZvIGRlbCDDumx0aW1vIGFwcHJvdmFsIG1hbnVhbCAoY3VhbmRvIGVsIHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIiBlbiBsdWdhclxuICAgKiBkZSBjbGlja2VhciBlbCBib3TDs24pLiBFbiBtYW51YWwgYXBwcm92YWwsIGBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkYCByZXRvcm5hIGVhcmx5XG4gICAqIHNpbiBhZ3JlZ2FyIHVuIG1lbnNhamUgY29uIGBhcHByb3ZhbGAsIGFzw60gcXVlIGxhIGzDs2dpY2EgZGUgcmVmZXRjaCBlbiBgb25TdHJlYW1GaW5pc2hgXG4gICAqIG5vIGxvIGRldGVjdGEgdsOtYSBgcHJldmlvdXNNZXNzYWdlLmFwcHJvdmFsYC4gTG8gZ3VhcmRhbW9zIGFjw6EgcGFyYSBjb25zdW1pcmxvIGRlc3B1w6lzLlxuICAgKi9cbiAgY29uc3QgbGFzdE1hbnVhbEFwcHJvdmFsUmVmID0gdXNlUmVmPHtcbiAgICB0b29sTmFtZTogc3RyaW5nXG4gICAgdG9vbEFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbFxuICB9IHwgbnVsbD4obnVsbClcbiAgLyoqIEV2aXRhIGR1cGxpY2FyIEFJX0NIQVRfSElUTCAvIEFJX0NIQVRfSElUTF9PUFRJT04gZW4gcHJlYXByb2JhY2lvbmVzIChtYW51YWwgbyBhdXRvKSBwb3IgbG90ZS4gKi9cbiAgY29uc3QgdHJhY2tlZE1hbnVhbEhpdGxLZXlzUmVmID0gdXNlUmVmPFNldDxzdHJpbmc+PihuZXcgU2V0KCkpXG4gIC8qKiBDb250ZXh0byBkZWwgbWVuc2FqZSBkZSBhcHJvYmFjacOzbiBwcmV2aW8gYWwgZWplY3V0YXIgY29udGludWUtdGhyZWFkLiAqL1xuICBjb25zdCBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZiA9IHVzZVJlZjxIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGw+KG51bGwpXG4gIC8qKiBNZW5zYWplcyBhIHJlc3RhdXJhciBzaSBgcmV0cnlfY29tcGxldGlvbmAgZmFsbGEgYW50ZXMgZGUgcGVyc2lzdGlyIGVsIHJlZW1wbGF6by4gKi9cbiAgY29uc3QgcmV0cnlTbmFwc2hvdFJlZiA9IHVzZVJlZjxDaGF0TWVzc2FnZVtdIHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNQcm9jZXNzaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBmaXJzdFRpbWVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIC8qKiBJZCBkZWwgcGxhY2Vob2xkZXIgZGVsIG1lbnNhamUgZW4gc3RyZWFtaW5nIGFjdGl2byAoc2kgaGF5KS4gKi9cbiAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICAvKipcbiAgICogQ2hhdCBhbCBxdWUgcGVydGVuZWNlIGVsIHN0cmVhbSBhY3R1YWxtZW50ZSBhY3Rpdm8uIFNpIGNhbWJpYSBlbCBjaGF0XG4gICAqIG1pZW50cmFzIHVuIHN0cmVhbSBlc3TDoSBlbiB2dWVsbywgZGVzY2FydGFtb3MgbG9zIHRva2VucyByZXNpZHVhbGVzXG4gICAqIHF1ZSBwdWVkYW4gbGxlZ2FyIGFudGVzIGRlIHF1ZSBlbCBhYm9ydCBzZSBjb21wbGV0ZS5cbiAgICovXG4gIGNvbnN0IGFjdGl2ZVN0cmVhbUNoYXRJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBjbGVhclN0cmVhbVVpUmVmID0gdXNlUmVmPCgpID0+IHZvaWQ+KCgpID0+IHVuZGVmaW5lZClcbiAgY29uc3QgW2FjdGl2ZUxvYWRpbmdzLCBzZXRBY3RpdmVMb2FkaW5nc10gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pih7fSlcbiAgLyoqXG4gICAqIFNlc2nDs24gYWN0dWFsbWVudGUgdmlzaWJsZS4gU2UgbWFudGllbmUgZW4gc3RhdGUgKG5vIHNvbG8gZW4gcmVmKSBwYXJhIHF1ZVxuICAgKiBlbCBtb3RvciBkZSBzdHJlYW1pbmcgcHVlZGEgbGVlciByZWFjdGl2YW1lbnRlIGxvcyBmbGFncyBkZSBFU1RBIHNlc2nDs25cbiAgICogZGVzZGUgZWwgc3RvcmUsIG1pZW50cmFzIG90cmFzIHNpZ3VlbiBnZW5lcmFuZG8gZW4gYmFja2dyb3VuZC5cbiAgICovXG4gIGNvbnN0IFthY3RpdmVTZXNzaW9uSWQsIHNldEFjdGl2ZVNlc3Npb25JZF0gPSB1c2VTdGF0ZTxzdHJpbmc+KGN1cnJlbnRDaGF0SWQuY3VycmVudClcbiAgLyoqIFRydWUgbWllbnRyYXMgZXN0YSBpbnN0YW5jaWEgZXN0w6kgbW9udGFkYSAoZXZpdGEgc2V0U3RhdGUgdHJhcyBkZXNtb250YXIpLiAqL1xuICBjb25zdCBpc01vdW50ZWRSZWYgPSB1c2VSZWYodHJ1ZSlcbiAgLyoqIEV2aXRhIHJlY29uY2lsaWFyIGRvcyB2ZWNlcyBlbCBtaXNtbyBlc3RhZG8gdGVybWluYWwgZGUgdW5hIHNlc2nDs24uICovXG4gIGNvbnN0IGxhc3RIYW5kbGVkVGVybWluYWxSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICBjb25zdCBpc1dlYlNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc1dlYlNlYXJjaEFjdGl2ZSlcbiAgY29uc3QgaXNEZWVwU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzRGVlcFNlYXJjaEFjdGl2ZSlcbiAgY29uc3QgaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZiA9IHVzZVJlZihpc0F1dG9BcHByb3ZlQWN0aXZlKVxuICAvKiogRXZpdGEgY2xvc3VyZXMgb2Jzb2xldGFzIGN1YW5kbyBlbCBmb290ZXIgY29uc2VydmEgc2VuZE1lc3NhZ2UgZW50cmUgcmVuZGVycy4gKi9cbiAgY29uc3QgY29udGV4dFJlZiA9IHVzZVJlZih7IGNoaXBzUHJvamVjdCwgcHJvamVjdCwgY2xpZW50LCB0YXNrIH0pXG4gIGNvbnRleHRSZWYuY3VycmVudCA9IHsgY2hpcHNQcm9qZWN0LCBwcm9qZWN0LCBjbGllbnQsIHRhc2sgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgICBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0F1dG9BcHByb3ZlQWN0aXZlXG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlLCBpc0F1dG9BcHByb3ZlQWN0aXZlXSlcblxuICBjb25zdCB7XG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIG1lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICBsb2FkTWVzc2FnZXMsXG4gICAgYWRkTWVzc2FnZSxcbiAgICByZW1vdmVNZXNzYWdlLFxuICAgIHJlcGxhY2VNZXNzYWdlcyxcbiAgICBoYW5kbGVTY3JvbGwsXG4gIH0gPSB1c2VDaGF0TWVzc2FnZXMoe1xuICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgY3VycmVudFVzZXIsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIG9uRXJyb3IsXG4gICAgYWdlbnRzLFxuICB9KVxuXG4gIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1xuXG4gIC8qKlxuICAgKiBFc2NyaWJlIHVuIG1lbnNhamUgZW4gZWwgc3RvcmUgcG9yLXNlc2nDs24geSwgc2kgbGEgc2VzacOzbiBlcyBsYSBhY3RpdmEsXG4gICAqIHRhbWJpw6luIGVuIGxhIHZpc3RhIGxvY2FsLiBQZXJtaXRlIHF1ZSBzZXNpb25lcyBlbiBiYWNrZ3JvdW5kIGFjdW11bGVuIHN1XG4gICAqIHJlc3VsdGFkbyBzaW4gcGlzYXIgZWwgY2hhdCBxdWUgZWwgdXN1YXJpbyBlc3TDoSBtaXJhbmRvLlxuICAgKi9cbiAgY29uc3QgY29tbWl0VG9TZXNzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKHNlc3Npb25JZDogc3RyaW5nLCBtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4ge1xuICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLmFkZE1lc3NhZ2Uoc2Vzc2lvbklkLCBtZXNzYWdlKVxuICAgICAgaWYgKGlzTW91bnRlZFJlZi5jdXJyZW50ICYmIGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKSkge1xuICAgICAgICBhZGRNZXNzYWdlKG1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZV1cbiAgKVxuXG4gIGNvbnN0IGRyb3BGcm9tU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzZXNzaW9uSWQ6IHN0cmluZywgbWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5yZW1vdmVNZXNzYWdlKHNlc3Npb25JZCwgbWVzc2FnZUlkKVxuICAgICAgaWYgKGlzTW91bnRlZFJlZi5jdXJyZW50ICYmIGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKSkge1xuICAgICAgICByZW1vdmVNZXNzYWdlKG1lc3NhZ2VJZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtyZW1vdmVNZXNzYWdlXVxuICApXG5cbiAgLyoqIExpbXBpYSBlbCB0YWlsIGVuIHZ1ZWxvIGRlIHVuYSBzZXNpw7NuICh0cmFzIHRlcm1pbmFyOyBlbCBiYWNrZW5kIHBhc2EgYSBzZXIgZnVlbnRlKS4gKi9cbiAgY29uc3QgY2xlYXJTZXNzaW9uVGFpbCA9IHVzZUNhbGxiYWNrKChzZXNzaW9uSWQ6IHN0cmluZykgPT4ge1xuICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5zZXRNZXNzYWdlcyhzZXNzaW9uSWQsIFtdKVxuICB9LCBbXSlcblxuICAvLyBSZWdpc3RyYXIgbGEgc2VzacOzbiB2aXNpYmxlIGVuIGVsIHRyYWNrZXIgZ2xvYmFsIHBhcmEgcXVlIGxvcyBjYWxsYmFja3MgZGVsXG4gIC8vIG1vdG9yIChxdWUgcHVlZGVuIHBlcnRlbmVjZXIgYSB1bmEgaW5zdGFuY2lhIHlhIGRlc21vbnRhZGEpIHNlcGFuIGN1w6FsIGVzIGxhXG4gIC8vIHNlc2nDs24gYWN0aXZhIGFjdHVhbC5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhY3RpdmVWaWV3LnNldChhY3RpdmVTZXNzaW9uSWQpXG4gIH0sIFthY3RpdmVTZXNzaW9uSWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNNb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlzTW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlmIChhY3RpdmVWaWV3LmlzKGN1cnJlbnRDaGF0SWQuY3VycmVudCkpIHtcbiAgICAgICAgYWN0aXZlVmlldy5zZXQobnVsbClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIFJlY29uY2lsaWFjacOzbjogc2kgbGEgc2VzacOzbiBhY3RpdmEgdGVybWluYSAoY29tcGxldGUvZXJyb3IpIHBlcm8gZWwgc3RvcmVcbiAgLy8gcG9yLXNlc2nDs24gdG9kYXbDrWEgdGllbmUgdW4gcGxhY2Vob2xkZXIgZGUgc3RyZWFtaW5nLCByZWZyZXNjYW1vcyBkZXNkZVxuICAvLyBlbCBiYWNrZW5kLiBVc2Ftb3MgZWwgc3RvcmUgKG5vIG1lc3NhZ2VzUmVmKTogaGFuZGxlU3RyZWFtRmluaXNoIGxpbXBpYSBlbFxuICAvLyBwbGFjZWhvbGRlciBhaMOtIGRlIGZvcm1hIHPDrW5jcm9uYTsgbWVzc2FnZXNSZWYgcHVlZGUgcXVlZGFyIHN0YWxlIHVuIHJlbmRlclxuICAvLyBwb3JxdWUgc2V0U3RhdHVzIChadXN0YW5kKSB5IHJlbW92ZU1lc3NhZ2UgKFJlYWN0KSBubyBiYXRjaGFuIGp1bnRvcy5cbiAgLy8gYGNhbmNlbGxlZGAgcXVlZGEgYWZ1ZXJhOiBlbCBzdG9wIHlhIHJlY29uY2lsaWEgbG9jYWwgKHBhcmNpYWwgKyBidXJidWphIGRlXG4gIC8vIGNhbmNlbGFkbykgeSByZWNhcmdhciBhY8OhIG1vc3RyYWJhIGxhIHBhbnRhbGxhIGRlIGNhcmdhIGRlbCBjaGF0IGVudGVyby5cbiAgY29uc3QgYWN0aXZlU2Vzc2lvbk1ldGEgPSB1c2VTZXNzaW9uTWV0YShhY3RpdmVTZXNzaW9uSWQpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc3RhdHVzID0gYWN0aXZlU2Vzc2lvbk1ldGE/LnN0YXR1c1xuICAgIGlmICghc3RhdHVzKSByZXR1cm5cbiAgICBjb25zdCBrZXkgPSBidWlsZFRlcm1pbmFsU2Vzc2lvblJlY29uY2lsaWF0aW9uS2V5KGFjdGl2ZVNlc3Npb25JZCwgc3RhdHVzLCBhY3RpdmVTZXNzaW9uTWV0YT8uZmluaXNoZWRBdClcbiAgICBpZiAobGFzdEhhbmRsZWRUZXJtaW5hbFJlZi5jdXJyZW50ID09PSBrZXkpIHJldHVyblxuICAgIGxhc3RIYW5kbGVkVGVybWluYWxSZWYuY3VycmVudCA9IGtleVxuXG4gICAgY29uc3QgdGFpbCA9IHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5nZXRNZXNzYWdlcyhhY3RpdmVTZXNzaW9uSWQpXG4gICAgaWYgKHNob3VsZEZvcmNlUmVsb2FkTWVzc2FnZXNPblRlcm1pbmFsU2Vzc2lvbihzdGF0dXMsIHRhaWwsIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQpKSB7XG4gICAgICBsb2FkTWVzc2FnZXMoeyBmb3JjZTogdHJ1ZSB9KVxuICAgIH1cbiAgfSwgW2FjdGl2ZVNlc3Npb25NZXRhPy5zdGF0dXMsIGFjdGl2ZVNlc3Npb25NZXRhPy5maW5pc2hlZEF0LCBhY3RpdmVTZXNzaW9uSWQsIGxvYWRNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnY2hhdC1sb2FkaW5nLW1lc3NhZ2VzLWNoYW5nZWQnLCB7XG4gICAgICBkZXRhaWw6IHsgbG9hZGluZ01lc3NhZ2VzIH0sXG4gICAgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzXSlcblxuICBjb25zdCBwcmV2aW91c0luaXRpYWxDaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4oaW5pdGlhbENoYXRJZClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHByZXZpb3VzSW5pdGlhbENoYXRJZCA9IHByZXZpb3VzSW5pdGlhbENoYXRJZFJlZi5jdXJyZW50XG4gICAgcHJldmlvdXNJbml0aWFsQ2hhdElkUmVmLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG5cbiAgICAvLyBDaGF0IG51ZXZvIC8gaG9tZTogaW5pdGlhbENoYXRJZCBwYXNhIGEgbnVsbCwgYXPDrSBxdWUgbGEgcmFtYSBkZSBhYmFqbyBub1xuICAgIC8vIGFwbGljYS4gSGF5IHF1ZSByb3RhciBhIHVuYSBzZXNpw7NuIG51ZXZhIGlndWFsOiBzaSBzZWd1aW1vcyBhcHVudGFuZG8gYSBsYVxuICAgIC8vIGFudGVyaW9yLCBgYWN0aXZlVmlld2AgbGEgc2lndWUgbWFyY2FuZG8gY29tbyBhY3RpdmEgeSBjdWFuZG8gdGVybWluYSBubyBzZVxuICAgIC8vIG5vdGlmaWNhICh5IHN1IHJlc3B1ZXN0YSBzZSBjb21taXRlYSBzb2JyZSBsYSB2aXN0YSBudWV2YSkuIEVsIMOhcmJvbCBub1xuICAgIC8vIHJlbW9udGEgZW4gZXN0ZSBmbHVqbyAobm8gaGF5IGBrZXlgKSB5IG5hZGllIGNvbnN1bWUgYHJlc2V0Q2hhdGAuXG4gICAgaWYgKHNob3VsZFJvdGF0ZVNlc3Npb25Gb3JOZXdIb21lKGluaXRpYWxDaGF0SWQsIHByZXZpb3VzSW5pdGlhbENoYXRJZCkpIHtcbiAgICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBzZXRBY3RpdmVTZXNzaW9uSWQoY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChzaG91bGRTd2l0Y2hUb0luaXRpYWxDaGF0U2Vzc2lvbihpbml0aWFsQ2hhdElkLCBjdXJyZW50Q2hhdElkLmN1cnJlbnQpICYmIGluaXRpYWxDaGF0SWQpIHtcbiAgICAgIC8vIE5PIGFib3J0YW1vcyBlbCBzdHJlYW0gYW50ZXJpb3I6IHB1ZWRlIHNlZ3VpciBnZW5lcmFuZG8gZW4gYmFja2dyb3VuZC5cbiAgICAgIC8vIFNvbG8gY2FtYmlhbW9zIGRlIHNlc2nDs24gYWN0aXZhOyBlbCBtb3RvciBydXRlYSBjYWRhIHN0cmVhbSBwb3Igc3VcbiAgICAgIC8vIHNlc3Npb25JZCwgYXPDrSBxdWUgbG9zIHRva2VucyBkZSBsYSBzZXNpw7NuIHByZXZpYSBzaWd1ZW4gYXBsaWPDoW5kb3NlIGFcbiAgICAgIC8vIEVTQSBzZXNpw7NuIChzdG9yZSksIG5vIGEgbGEgbnVldmEuXG5cbiAgICAgIC8vIExpbXBpYXIgY29udGV4dG8gZ2xvYmFsIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzblxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgICAgc2V0VGFzayhudWxsKVxuXG4gICAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG4gICAgICBzZXRBY3RpdmVTZXNzaW9uSWQoaW5pdGlhbENoYXRJZClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgICAgLy8gaXNQcm9jZXNzaW5nUmVmIHJlZmxlamEgc2kgbGEgc2VzacOzbiBBQ1RJVkEgZXN0w6Egb2N1cGFkYS4gU2kgbGEgc2VzacOzblxuICAgICAgLy8gYSBsYSBxdWUgZW50cmFtb3Mgc2lndWUgZ2VuZXJhbmRvIGVuIGJhY2tncm91bmQsIHF1ZWRhIGJsb3F1ZWFkYTsgc2kgbm8sXG4gICAgICAvLyBzZSBoYWJpbGl0YSBlbCBlbnbDrW8gYXVucXVlIG90cmFzIHNlc2lvbmVzIHNpZ2FuIGdlbmVyYW5kby5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gc2Vzc2lvblN0cmVhbU1hbmFnZXIuaXNBY3RpdmUoaW5pdGlhbENoYXRJZClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICAvLyBsb2FkTWVzc2FnZXMgbG8gZGlzcGFyYSB1c2VDaGF0TWVzc2FnZXMgYWwgY2FtYmlhciBjaGF0SWQgKGNvbiBjYWNoZSBlbiBtZW1vcmlhKS5cbiAgICB9XG4gIH0sIFtpbml0aWFsQ2hhdElkLCBwcm9qZWN0LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldENoaXBzUHJvamVjdCwgc2V0VGFza10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRBY3RpdmVDaGF0SWQoaW5pdGlhbENoYXRJZCB8fCBudWxsKVxuICB9LCBbaW5pdGlhbENoYXRJZCwgc2V0QWN0aXZlQ2hhdElkXSlcblxuICBjb25zdCBoYW5kbGVTdHJlYW1FcnJvciA9IHVzZUNhbGxiYWNrKFxuICAgIChjdHg6IFN0cmVhbUNvbnRleHQsIGVycm9yTWVzc2FnZT86IHN0cmluZywgZXJyb3JSYXdNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25JZCwgbWVzc2FnZUlkLCBwbGFjZWhvbGRlcklkIH0gPSBjdHhcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpXG5cbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgIGRyb3BGcm9tU2Vzc2lvbihzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG5cbiAgICAgIGNvbnN0IHJldHJ5U25hcHNob3QgPSByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnRcbiAgICAgIGlmIChyZXNvbHZlU3RyZWFtRXJyb3JIYW5kbGluZ01vZGUoQm9vbGVhbihyZXRyeVNuYXBzaG90KSkgPT09ICdyZXRyeS1yZXN0b3JlJyAmJiByZXRyeVNuYXBzaG90KSB7XG4gICAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IHJldHJ5U25hcHNob3RcbiAgICAgICAgcmVwbGFjZU1lc3NhZ2VzKHJldHJ5U25hcHNob3QpXG4gICAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICAgIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCgpXG4gICAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdlcnJvcicsIG1lc3NhZ2U6IHQoJ2NoYXQuZXJyb3InKSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQoKVxuICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgbWVzc2FnZUtleSwgdG9rZW5zVXNlZCwgc2hvd1JldHJ5IH0gPSByZXNvbHZlU3RyZWFtRXJyb3JNZXNzYWdlS2V5KGVycm9yTWVzc2FnZSwgZXJyb3JSYXdNZXNzYWdlKVxuICAgICAgY29uc3QgbWVzc2FnZSA9IHJlc29sdmVTdHJlYW1FcnJvclVzZXJNZXNzYWdlKG1lc3NhZ2VLZXksIHQsIHRva2Vuc1VzZWQpXG5cbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICBidWlsZFN0cmVhbUVycm9yQXNzaXN0YW50TWVzc2FnZSh7XG4gICAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgc2hvd1JldHJ5LFxuICAgICAgICAgIHJldHJ5TGFiZWw6IHQoJ2NoYXQucmV0cnknKSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIGNsZWFyU2Vzc2lvblRhaWwoc2Vzc2lvbklkKVxuXG4gICAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICAgIGdldENoYXRzU3RvcmVTdGF0ZSgpLm1hcmtDaGF0QXNVbnJlYWQoc2Vzc2lvbklkKVxuICAgICAgICBub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQoc2Vzc2lvbklkLCAnZXJyb3InKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2NvbW1pdFRvU2Vzc2lvbiwgZHJvcEZyb21TZXNzaW9uLCBjbGVhclNlc3Npb25UYWlsLCByZXBsYWNlTWVzc2FnZXMsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1VcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY3R4OiBTdHJlYW1Db250ZXh0LCBjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkIH0gPSBjdHhcblxuICAgICAgLy8gQXNlZ3VyYW1vcyBlbCBwbGFjZWhvbGRlciB1bmEgw7puaWNhIHZleiBwb3Igc3RyZWFtLCB0YW50byBlbiBlbCBzdG9yZVxuICAgICAgLy8gZGUgbGEgc2VzacOzbiBjb21vIGVuIGxhIHZpc3RhIHNpIGVzIGxhIGFjdGl2YS4gRWwgdGV4dG8gZW4gdml2byB2aWFqYVxuICAgICAgLy8gcG9yIHNlc3Npb25TdHJlYW1pbmdUZXh0IChleHRlcm5vKSwgc2luIHJlLXJlbmRlciBkZWwgw6FyYm9sIGNvbXBsZXRvLlxuICAgICAgY29uc3QgcGxhY2Vob2xkZXJFeGlzdHMgPSB1c2VTZXNzaW9uc1N0b3JlXG4gICAgICAgIC5nZXRTdGF0ZSgpXG4gICAgICAgIC5nZXRNZXNzYWdlcyhzZXNzaW9uSWQpXG4gICAgICAgIC5zb21lKG1zZyA9PiBtc2cuaWQgPT09IHBsYWNlaG9sZGVySWQpXG5cbiAgICAgIGlmICghcGxhY2Vob2xkZXJFeGlzdHMpIHtcbiAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgICAgaWQ6IHBsYWNlaG9sZGVySWQsXG4gICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpKSB7XG4gICAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IHBsYWNlaG9sZGVySWRcbiAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBzZXNzaW9uSWRcbiAgICAgIH1cblxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc2V0VGV4dChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIGNvbnRlbnQpXG4gICAgfSxcbiAgICBbY29tbWl0VG9TZXNzaW9uXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRmluaXNoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgY3R4OiBTdHJlYW1Db250ZXh0LFxuICAgICAgY29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICByYXdBdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgY29tcGxldGVkQWdlbnRJZD86IHN0cmluZyB8IG51bGwsXG4gICAgICAvKiogUG9zaWNpb25hbDogbWFzdGVyIG5vIGxvIGNvbnN1bWUsIHBlcm8gYHJlYXNvbmluZ2AgdmllbmUgZGVzcHXDqXMuICovXG4gICAgICBfcmVzb2x2ZWRDb250ZXh0PzogYW55LFxuICAgICAgcmVhc29uaW5nPzogUmVhc29uaW5nVHJhY2VQYXlsb2FkIHwgbnVsbFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQgfSA9IGN0eFxuICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZClcbiAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IHBsYWNlaG9sZGVySWRcbiAgICAgIC8vIEVsIHBsYWNlaG9sZGVyIHNhbGUgZGVsIHN0b3JlIHBvci1zZXNpw7NuIHlhOiBlbCBlZmVjdG8gZGUgcmVjb25jaWxpYWNpw7NuXG4gICAgICAvLyBsbyB1c2EgcGFyYSBkZXRlY3RhciByZXNwdWVzdGFzIGh1w6lyZmFuYXMgeSBkZSBhY8OhIGFsIGNvbW1pdCBwdWVkZSBoYWJlclxuICAgICAgLy8gdW4gYXdhaXQuIExhIHZpc3RhIGxvY2FsIGxvIHN1ZWx0YSBtw6FzIGFiYWpvLCBqdW50byBhbCBjb21taXQuXG4gICAgICB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKCkucmVtb3ZlTWVzc2FnZShzZXNzaW9uSWQsIHRlbXBNZXNzYWdlSWQpXG4gICAgICBjb25zdCBhdHRhY2htZW50cyA9IG5vcm1hbGl6ZUFzc2lzdGFudEF0dGFjaG1lbnRzKHJhd0F0dGFjaG1lbnRzKVxuXG4gICAgICAvLyBFbCB0cmFjZSBhY3VtdWxhZG8gZW4gdml2byBlc3TDoSBrZXllZCBwb3IgZWwgcGxhY2Vob2xkZXI7IGxvIG1vdmVtb3MgYWxcbiAgICAgIC8vIGlkIGRlZmluaXRpdm8gcGFyYSBxdWUgZWwgYmxvcXVlIGRlIHJhem9uYW1pZW50byBzb2JyZXZpdmEgYWwgc3dhcC5cbiAgICAgIGNvbnN0IGZpbmFsTWVzc2FnZUlkID0gcmVzb2x2ZVN0cmVhbUZpbmlzaEZpbmFsTWVzc2FnZUlkKG1lbW9yeVNlc3Npb25JZClcbiAgICAgIC8vIFByZWZlcmlyIGVsIHNuYXBzaG90IGVuIHZpdm8gKG5hcnJhY2nDs24gYW5jbGFkYSBhbCBpbmljaW8pIHNvYnJlIGVsXG4gICAgICAvLyBgY29tcGxldGVgIGRlbCBiYWNrLCBxdWUgc3VlbGUgbWFuZGFyIGVzYSBuYXJyYWNpw7NuIGFsIGZpbmFsLlxuICAgICAgY29uc3QgY29tcGFjdGlvbiA9IGNvbXBhY3Rpb25Gb3IodGVtcE1lc3NhZ2VJZCwgcmVhc29uaW5nKVxuICAgICAgY29uc3QgZmluYWxUcmFjZSA9IHJlYXNvbmluZ1RyYWNlRm9yKHRlbXBNZXNzYWdlSWQpID8/IG1hcFJlYXNvbmluZ1RyYWNlKHJlYXNvbmluZylcbiAgICAgIHJlYXNvbmluZ1N0b3JlLnJlbmFtZSh0ZW1wTWVzc2FnZUlkLCBmaW5hbE1lc3NhZ2VJZClcblxuICAgICAgLy8gU2VzacOzbiBlbiBiYWNrZ3JvdW5kOiBjZXJyYW1vcyBsZWFuLiBFbCBiYWNrZW5kIHlhIHBlcnNpc3Rpw7MgbGFcbiAgICAgIC8vIHJlc3B1ZXN0YSwgYXPDrSBxdWUgYWwgdm9sdmVyIGEgbGEgc2VzacOzbiBzZSBjYXJnYSBkZXNkZSBhaMOtLiBBdmlzYW1vc1xuICAgICAgLy8gcXVlIHRlcm1pbsOzICh1bnJlYWQgKyBldmVudG8gcGFyYSB0b2FzdC9zb25pZG8pLlxuICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICBjb21taXRUb1Nlc3Npb24oXG4gICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgIGJ1aWxkU3RyZWFtRmluaXNoQXNzaXN0YW50TWVzc2FnZSh7XG4gICAgICAgICAgICBmaW5hbE1lc3NhZ2VJZCxcbiAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgICAgYXR0YWNobWVudHMsXG4gICAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgICAgICBzdWdnZXN0aW9ucyxcbiAgICAgICAgICAgIHJlYXNvbmluZzogZmluYWxUcmFjZSxcbiAgICAgICAgICAgIGNvbXBhY3Rpb24sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBjbGVhclNlc3Npb25UYWlsKHNlc3Npb25JZClcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkubWFya0NoYXRBc1VucmVhZChzZXNzaW9uSWQpXG4gICAgICAgIG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZChzZXNzaW9uSWQsICdjb21wbGV0ZScpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGNvbnN0IHRhc2tVcmxSZWdleCA9IG5ldyBSZWdFeHAoVEFTS19VUkxfUkVHRVhfUEFUVEVSTiwgJ2cnKVxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWxGb3JBbmFseXRpY3MgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWwgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29udGVudFRvQWRkLFxuICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwLFxuICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCxcbiAgICAgICAgaG91cnNDaGFyZ2VUb29scyxcbiAgICAgICAgYWZmZWN0ZWRUYXNrSWRzLFxuICAgICAgICBtYW51YWxXYXNUYXNrRWRpdCxcbiAgICAgICAgbWFudWFsV2FzVGFza0RlbGV0ZSxcbiAgICAgICAgd2FzVGFza0VkaXQsXG4gICAgICAgIHdhc1Rhc2tEZWxldGUsXG4gICAgICAgIHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQsXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLFxuICAgICAgfSA9IGF3YWl0IHJlc29sdmVBY3RpdmVTdHJlYW1GaW5pc2hQcm9jZXNzaW5nKHtcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VzUmVmLmN1cnJlbnQsXG4gICAgICAgIHRlbXBNZXNzYWdlSWQsXG4gICAgICAgIHRhc2tVcmxSZWdleCxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0Py5pZCxcbiAgICAgICAgcGF0aG5hbWU6IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgZ2V0VGFiVGFza0RlZmF1bHQsXG4gICAgICAgIG11bHRpQWdlbnRzQWNjZXNzOiBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSxcbiAgICAgICAgY29tcGxldGVkQWdlbnRJZCxcbiAgICAgICAgbWFudWFsQXBwcm92YWwsXG4gICAgICAgIGFwcGx5RGFzaGJvYXJkTXV0YXRpb246IChtdXRhdGlvbiwgdGFza0lkcykgPT4ge1xuICAgICAgICAgIGFwcGx5UHJvamVjdERhc2hib2FyZE11dGF0aW9uKG11dGF0aW9uLCB0YXNrSWRzLCB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZClcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIHJlc29sdmVDcmVhdGVBZ2VudEhpdGxBbmFseXRpY3NFdmVudHMoe1xuICAgICAgICB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkLFxuICAgICAgICBwZW5kaW5nQWN0aW9ucyxcbiAgICAgICAgbWFudWFsQXBwcm92YWxUb29sTmFtZTogbWFudWFsQXBwcm92YWxGb3JBbmFseXRpY3M/LnRvb2xOYW1lLFxuICAgICAgICBjb21wbGV0ZWRBZ2VudElkLFxuICAgICAgICBhZ2VudFR5cGU6IGdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUoYWdlbnQpLFxuICAgICAgICBub3JtYWxpemVUb29sTmFtZTogbm9ybWFsaXplSGl0bFRvb2xOYW1lLFxuICAgICAgICBidWlsZEFjdGlvblR5cGVMaXN0OiBidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCxcbiAgICAgIH0pLmZvckVhY2gocGF5bG9hZCA9PiB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCBwYXlsb2FkKVxuICAgICAgfSlcblxuICAgICAgY29uc3Qgb3BlblRhc2tQYW5lbElkID0gd2luZG93LnRhc2tQYW5lbD8udGFza0lkXG5cbiAgICAgIGlmIChob3Vyc0NoYXJnZVRvb2xzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGlzcGF0Y2hNYWlhSG91cnNDaGFyZ2VkKHtcbiAgICAgICAgICBzb3VyY2U6ICdtYWlhJyxcbiAgICAgICAgICB0b29sczogaG91cnNDaGFyZ2VUb29scyxcbiAgICAgICAgICBzZXNzaW9uSWQ6IG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBzaG91bGRSZWZldGNoT3BlblRhc2tQYW5lbChcbiAgICAgICAgICBvcGVuVGFza1BhbmVsSWQsXG4gICAgICAgICAgeyB3YXNUYXNrRWRpdCwgd2FzVGFza0RlbGV0ZSB9LFxuICAgICAgICAgIHsgbWFudWFsV2FzVGFza0VkaXQsIG1hbnVhbFdhc1Rhc2tEZWxldGUgfSxcbiAgICAgICAgICBhZmZlY3RlZFRhc2tJZHNcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHdpbmRvdy50YXNrUGFuZWw/LnJlZmV0Y2hUYXNrPy4oKVxuICAgICAgfVxuXG4gICAgICAvLyBTd2FwIHBsYWNlaG9sZGVyIOKGkiBtZW5zYWplIGZpbmFsLiBWYSBlbiBgZmx1c2hTeW5jYCBwb3JxdWUgZWwgbW90b3IgeWFcbiAgICAgIC8vIGRlasOzIGVuY29sYWRhcyBsYXMgZXNjcml0dXJhcyBkZSBmaW4gZGUgc3RyZWFtIChpc1dyaXRpbmcsIGFjdGl2aXR5LFxuICAgICAgLy8gc3RhdHVzKSwgeSBlc2FzIHZpYWphbiBlbiBTeW5jTGFuZSBwb3Igc2VyIGRlIHVuIHN0b3JlIGV4dGVybm8gbWllbnRyYXNcbiAgICAgIC8vIHF1ZSBlc3RvcyBzZXRTdGF0ZSB2aWFqYW4gZW4gRGVmYXVsdExhbmUuIFNpbiBmb3J6YXJsbywgUmVhY3QgcGludGFcbiAgICAgIC8vIHByaW1lcm8gZWwgcGxhY2Vob2xkZXIgeWEgc2luIGluZGljYWRvciBkZSBhY3RpdmlkYWQgKHR1cm5vIDQxcHggbcOhc1xuICAgICAgLy8gYmFqbykgeSByZWNpw6luIH4yNW1zIGRlc3B1w6lzIGVsIG1lbnNhamUgZGVmaW5pdGl2bzogZXNlIHNhbHRvIGRlIGlkYSB5XG4gICAgICAvLyB2dWVsdGEgZXJhIGVsIGZsaWNrZXIgZGUgZmluIGRlIHN0cmVhbS4gQ29uIGVsIGZsdXNoLCB0b2RvIGVsIGZpbiBkZVxuICAgICAgLy8gc3RyZWFtIGVudHJhIGVuIHVuIMO6bmljbyBjb21taXQuXG4gICAgICBmbHVzaFN5bmMoKCkgPT4ge1xuICAgICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCB0ZW1wTWVzc2FnZUlkKVxuICAgICAgICBjb21taXRUb1Nlc3Npb24oXG4gICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgIGJ1aWxkU3RyZWFtRmluaXNoQXNzaXN0YW50TWVzc2FnZSh7XG4gICAgICAgICAgICBmaW5hbE1lc3NhZ2VJZCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRUb0FkZCxcbiAgICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgICAgICAgICAgIHJlYXNvbmluZzogZmluYWxUcmFjZSxcbiAgICAgICAgICAgIGNvbXBhY3Rpb24sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICAgIGNsZWFyU2Vzc2lvblRhaWwoc2Vzc2lvbklkKVxuXG4gICAgICBpZiAoY3JlYXRlQWdlbnRGb2xsb3dVcD8uYWdlbnRJZCkge1xuICAgICAgICBmZXRjaEFnZW50RGV0YWlsKGNyZWF0ZUFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VDaGF0TWFuYWdlcl0gTm8gc2UgcHVkbyBhw7FhZGlyIGVsIGFnZW50ZSByZWNpw6luIGNyZWFkbyBhbCBsaXN0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChlZGl0QWdlbnRGb2xsb3dVcD8uYWdlbnRJZCkge1xuICAgICAgICBmZXRjaEFnZW50RGV0YWlsKGVkaXRBZ2VudEZvbGxvd1VwLmFnZW50SWQpXG4gICAgICAgICAgLnRoZW4oY2hhdEFnZW50ID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1zeW5jLWVkaXRlZC1hZ2VudC1mcm9tLWNoYXQnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIHJlZnJlc2NhciBlbCBhZ2VudGUgZWRpdGFkbycsIGVycilcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGNvbnN0IHsgaXNDaGF0Vmlld1Zpc2libGUsIG1hcmtDaGF0QXNSZWFkIH0gPSBnZXRDaGF0c1N0b3JlU3RhdGUoKVxuICAgICAgaWYgKHNob3VsZE1hcmtDaGF0UmVhZEFmdGVyU3RyZWFtRmluaXNoKGlzQWN0aXZlLCBpc0NoYXRWaWV3VmlzaWJsZSkpIHtcbiAgICAgICAgYXdhaXQgbWFya0NoYXRBc1JlYWQoc2Vzc2lvbklkLCB7IGZvcmNlOiB0cnVlIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGREaXNwYXRjaEZpcnN0U2Vzc2lvblJlZmV0Y2goZmlyc3RUaW1lUmVmLmN1cnJlbnQpKSB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKSlcbiAgICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgW2NvbW1pdFRvU2Vzc2lvbiwgZHJvcEZyb21TZXNzaW9uLCBjbGVhclNlc3Npb25UYWlsLCBwcm9qZWN0LCBnZXRUYWJUYXNrRGVmYXVsdCwgZXZlbnQsIGFnZW50XVxuICApXG5cbiAgLy8gYHBhcnRpYWxUZXh0YCBsbyByZXNjYXRhIGBzdG9wU3RyZWFtYCBhbnRlcyBkZSBsaW1waWFyIGVsIHN0b3JlIGV4dGVybm86IGVsIHRleHRvIGVuIHZpdm9cbiAgLy8gbm8gdml2ZSBlbiBgbWVzc2FnZXNgLCBhc8OtIHF1ZSBzaW4gZXN0byBsYSByZXNwdWVzdGEgYSBtZWRpYXMgZGVzYXBhcmVjZSBkZSBwYW50YWxsYSBhdW5xdWVcbiAgLy8gZWwgYmFja2VuZCBzw60gbGEgaGF5YSBwZXJzaXN0aWRvLlxuICBjb25zdCBoYW5kbGVTdHJlYW1TdG9wID0gdXNlQ2FsbGJhY2soXG4gICAgKHBhcnRpYWxUZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIEVsIHN0b3Agc2llbXByZSBhcGxpY2EgYSBsYSBzZXNpw7NuIGFjdGl2YSAoYm90w7NuIGRlbCBpbnB1dCB2aXNpYmxlKS5cbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50KClcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBzdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQpXG4gICAgICBjb25zdCB7IGZpbmFsTWVzc2FnZUlkLCBjYW5jZWxsZWRNZXNzYWdlSWQgfSA9IHJlc29sdmVTdHJlYW1TdG9wTWVzc2FnZUlkcyhjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQpXG4gICAgICBjb25zdCBzdG9wcGVkVHJhY2UgPSByZWFzb25pbmdUcmFjZUZvcih0ZW1wTWVzc2FnZUlkKVxuICAgICAgY29uc3QgY29tcGFjdGlvbiA9IGNvbXBhY3Rpb25Gb3IodGVtcE1lc3NhZ2VJZClcblxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCB0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBpZiAoc2hvdWxkUHJlc2VydmVSZWFzb25pbmdPblN0cmVhbVN0b3Aoc3RvcHBlZFRyYWNlLCBjb21wYWN0aW9uKSkge1xuICAgICAgICByZWFzb25pbmdTdG9yZS5maW5pc2godGVtcE1lc3NhZ2VJZCwgbnVsbClcbiAgICAgICAgcmVhc29uaW5nU3RvcmUucmVuYW1lKHRlbXBNZXNzYWdlSWQsIGZpbmFsTWVzc2FnZUlkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVhc29uaW5nU3RvcmUucmVtb3ZlKHRlbXBNZXNzYWdlSWQpXG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJ0aWFsVGV4dCkge1xuICAgICAgICBjb21taXRUb1Nlc3Npb24oXG4gICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgIGJ1aWxkU3RyZWFtU3RvcFBhcnRpYWxBc3Npc3RhbnRNZXNzYWdlKHtcbiAgICAgICAgICAgIGZpbmFsTWVzc2FnZUlkLFxuICAgICAgICAgICAgcGFydGlhbFRleHQsXG4gICAgICAgICAgICBzdG9wcGVkVHJhY2UsXG4gICAgICAgICAgICBjb21wYWN0aW9uLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgY29tbWl0VG9TZXNzaW9uKFxuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIGJ1aWxkU3RyZWFtU3RvcENhbmNlbGxlZEFzc2lzdGFudE1lc3NhZ2Uoe1xuICAgICAgICAgIGNhbmNlbGxlZE1lc3NhZ2VJZCxcbiAgICAgICAgICBjYW5jZWxsZWRMYWJlbDogdCgnY2hhdC5jYW5jZWxsZWQnKSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIGNsZWFyU2Vzc2lvblRhaWwoc2Vzc2lvbklkKVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIH0sXG4gICAgW2NvbW1pdFRvU2Vzc2lvbiwgZHJvcEZyb21TZXNzaW9uLCBjbGVhclNlc3Npb25UYWlsLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChjdHg6IFN0cmVhbUNvbnRleHQsIGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKVxuXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXRsQ29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSByZXNvbHZlSGl0bEV4ZWN1dGlvbkNvbnRleHQoYXBwcm92YWwsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gaGl0bENvbnRleHRcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGl0bE91dGNvbWUgPSByZXNvbHZlSGl0bEFwcHJvdmFsUmVxdWlyZWRPdXRjb21lKGFwcHJvdmFsKVxuXG4gICAgICAvLyBQcmVhcHJvYmFkbzogcG9yIGRldGVjY2nDs24gbWFudWFsIG8gcG9yIGF1dG8tYXBwcm92ZS4gRW4gYW1ib3MgY2Fzb3MgZWxcbiAgICAgIC8vIHN0cmVhbSBjb250aW7DumEgeSBubyBoYXkgcXVlIHBpbnRhciBsYSBjYWphIGRlIGFwcm9iYWNpw7NuLlxuICAgICAgaWYgKGhpdGxPdXRjb21lLnR5cGUgPT09ICdza2lwLXVpJykge1xuICAgICAgICB0cmFja01hbnVhbEhpdGxFdmVudHMoXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgeyBpbXByZXNzaW9uOiBFVkVOVFMuYWlDaGF0SGl0bCwgb3B0aW9uOiBFVkVOVFMuYWlDaGF0SGl0bE9wdGlvbiB9LFxuICAgICAgICAgIGFnZW50LFxuICAgICAgICAgIGFwcHJvdmFsLFxuICAgICAgICAgIHRyYWNrZWRNYW51YWxIaXRsS2V5c1JlZi5jdXJyZW50LFxuICAgICAgICAgIHJlc29sdmVIaXRsU2tpcFJlc29sdXRpb25Tb3VyY2UoYXBwcm92YWwpXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBza2lwcGVkTWFudWFsQXBwcm92YWwgPSByZXNvbHZlU2tpcHBlZEhpdGxNYW51YWxBcHByb3ZhbChhcHByb3ZhbClcbiAgICAgICAgaWYgKHNraXBwZWRNYW51YWxBcHByb3ZhbCAmJiBpc0FjdGl2ZSkge1xuICAgICAgICAgIGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50ID0gc2tpcHBlZE1hbnVhbEFwcHJvdmFsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGFwcHJvdmFsTWVzc2FnZUlkIH0gPSBoaXRsT3V0Y29tZVxuICAgICAgY29uc3QgY29tcGFjdGlvbiA9IGNvbXBhY3Rpb25Gb3IocGxhY2Vob2xkZXJJZCwgYXBwcm92YWwucmVhc29uaW5nKVxuICAgICAgcmVhc29uaW5nU3RvcmUucmVuYW1lKHBsYWNlaG9sZGVySWQsIGFwcHJvdmFsTWVzc2FnZUlkKVxuICAgICAgY29uc3QgYXBwcm92YWxUcmFjZSA9IG1hcFJlYXNvbmluZ1RyYWNlKGFwcHJvdmFsLnJlYXNvbmluZykgPz8gcmVhc29uaW5nVHJhY2VGb3IoYXBwcm92YWxNZXNzYWdlSWQpXG4gICAgICBjb21taXRUb1Nlc3Npb24oXG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgYnVpbGRIaXRsQXBwcm92YWxQZW5kaW5nTWVzc2FnZSh7XG4gICAgICAgICAgYXBwcm92YWxNZXNzYWdlSWQsXG4gICAgICAgICAgYWNjdW11bGF0ZWRDb250ZW50LFxuICAgICAgICAgIGFwcHJvdmFsLFxuICAgICAgICAgIHJlYXNvbmluZzogYXBwcm92YWxUcmFjZSxcbiAgICAgICAgICBjb21wYWN0aW9uLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdldENoYXRzU3RvcmVTdGF0ZSgpLm1hcmtDaGF0QXNVbnJlYWQoc2Vzc2lvbklkKVxuICAgICAgICBub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQoc2Vzc2lvbklkLCAnYXBwcm92YWxfcmVxdWlyZWQnKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FnZW50LCBjb21taXRUb1Nlc3Npb24sIGRyb3BGcm9tU2Vzc2lvbiwgZXZlbnRdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICByZXRyeUNvbXBsZXRpb24sXG4gICAgaXNMb2FkaW5nOiB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5LFxuICAgIHN0b3BTdHJlYW1pbmcsXG4gIH0gPSB1c2VPcmNoZXN0cmF0b3JTdHJlYW0oe1xuICAgIGFjdGl2ZVNlc3Npb25JZCxcbiAgICBvbkVycm9yOiBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICBvblN0cmVhbVVwZGF0ZTogaGFuZGxlU3RyZWFtVXBkYXRlLFxuICAgIG9uRmluaXNoU3RyZWFtOiBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgb25TdG9wOiBoYW5kbGVTdHJlYW1TdG9wLFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZDogaGFuZGxlQXBwcm92YWxSZXF1aXJlZCxcbiAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZixcbiAgfSlcblxuICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQgPSAoKSA9PiB7XG4gICAgdXBkYXRlU3RyZWFtQWN0aXZpdHkobnVsbClcbiAgICBzZXRBY3RpdmVMb2FkaW5ncyh7fSlcbiAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gbnVsbFxuICB9XG5cbiAgY29uc3QgY3VycmVudFByb2plY3QgPSBwcm9qZWN0XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnMsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCB3aWxsU3RhcnROZXdTdHJlYW0gPSAhc2Vzc2lvblN0cmVhbU1hbmFnZXIuaXNBY3RpdmUoY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAgICAgY29uc3Qgc2VuZEdhdGUgPSByZXNvbHZlU2VuZE1lc3NhZ2VHYXRlKHtcbiAgICAgICAgaXNQcm9jZXNzaW5nOiBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCxcbiAgICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICAgIHdpbGxTdGFydE5ld1N0cmVhbSxcbiAgICAgICAgYWN0aXZlU3RyZWFtQ291bnQ6IHNlc3Npb25TdHJlYW1NYW5hZ2VyLmdldEFjdGl2ZUNvdW50KCksXG4gICAgICAgIG1heENvbmN1cnJlbnQ6IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMsXG4gICAgICB9KVxuICAgICAgaWYgKHNlbmRHYXRlID09PSAnY29uY3VycmVuY3knKSB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChzZW5kR2F0ZSA9PT0gJ2J1c3knKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGF0dGFjaG1lbnRzLCBvcHRpb25zIH0gPSBub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MoYXR0YWNobWVudHNPck9wdGlvbnMpXG4gICAgICBjb25zdCBwYXlsb2FkRmllbGRzID0gcmVzb2x2ZVNlbmRNZXNzYWdlUGF5bG9hZEZpZWxkcyhvcHRpb25zLCB7XG4gICAgICAgIGZhcUlkLFxuICAgICAgICBhZ2VudFN1Z2dlc3Rpb25JZCxcbiAgICAgICAgbWVudGlvbnMsXG4gICAgICAgIGZ1YUlkLFxuICAgICAgICBzY0lkLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGNvbnRleHRNZXNzYWdlOiBDb250ZXh0TWVzc2FnZSB8IHVuZGVmaW5lZCA9IGJ1aWxkQ29udGV4dE1lc3NhZ2UocGF5bG9hZEZpZWxkcy5tZW50aW9ucylcbiAgICAgIGNvbnN0IGRpc3BsYXlNZXNzYWdlID0gZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheShtZXNzYWdlLCB7XG4gICAgICAgIGZ1YUlkOiBwYXlsb2FkRmllbGRzLmZ1YUlkLFxuICAgICAgICBzY0lkOiBwYXlsb2FkRmllbGRzLnNjSWQsXG4gICAgICB9KVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIHNldEFjdGl2ZUNoYXRJZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgICBjb25zdCBuZXdNZXNzYWdlSWQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gbmV3TWVzc2FnZUlkXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBtZXNzYWdlXG5cbiAgICAgIGlmICghcmVwb3J0ZWRFdmVudC5jdXJyZW50KSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5wbUFpVHlwZWRUZXh0KVxuICAgICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIC8vIFZlcmlmaWNhciBzaSBlbCBjb250ZXh0byBnbG9iYWwgZXN0w6EgZGVzYWN0dWFsaXphZG9cbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlV2l0aFByb2plY3QgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG5cbiAgICAgIGNvbnN0IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyA9IHJlc29sdmVMYXN0TWVzc2FnZUFnZW50SWQobWVzc2FnZXNSZWYuY3VycmVudClcblxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gY3VycmVudENoYXRJZC5jdXJyZW50XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNoaXBzUHJvamVjdDogY3R4Q2hpcHNQcm9qZWN0LFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgdGFzazogY3R4VGFzayxcbiAgICAgIH0gPSBjb250ZXh0UmVmLmN1cnJlbnRcblxuICAgICAgZW5zdXJlU2Vzc2lvbkluU2lkZWJhcih7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgdGl0bGU6IGJ1aWxkU2lkZWJhclNlc3Npb25UaXRsZShkaXNwbGF5TWVzc2FnZSksXG4gICAgICAgIGFnZW50LFxuICAgICAgICBhZ2VudElkOiBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkLFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgYXR0YWNobWVudHMsXG4gICAgICB9KVxuXG4gICAgICAvLyBObyBhZ3JlZ2FyIHByb2plY3RJZCBhbCBtZW5zYWplIGRlbCB1c3VhcmlvIC0gc2UgZGV0ZXJtaW5hcsOhIGRlc3B1w6lzXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgIGlkOiByZXNvbHZlVXNlclF1ZXN0aW9uTWVzc2FnZUlkKGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCksXG4gICAgICAgIG1lc3NhZ2U6IGRpc3BsYXlNZXNzYWdlLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiBjdXJyZW50VXNlcixcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLlVTRVIsXG4gICAgICAgIHNvdXJjZXM6IGF0dGFjaG1lbnRzLFxuICAgICAgICAuLi4oY29udGV4dE1lc3NhZ2UgPyB7IGNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuXG4gICAgICBjb25zdCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkID0gc3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50KVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBzZXNzaW9uSWRcbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZClcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQsXG4gICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogYWdlbnQ/Lm5hbWUgfHwgJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pXG5cbiAgICAgIGxldCBmaW5hbE1lc3NhZ2UgPSBtZXNzYWdlXG5cbiAgICAgIGZpbmFsTWVzc2FnZSA9IHJlc29sdmVSZW50YWJpbGlkYWRQcm9qZWN0RmFxTWVzc2FnZShcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgdCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJyksXG4gICAgICAgIG9wdGlvbnMucHJvamVjdENoYW5nZWQ/LmluY29tZVR5cGUgfHwgY29udGV4dFJlZi5jdXJyZW50LnByb2plY3Q/LmluY29tZVR5cGVcbiAgICAgIClcblxuICAgICAgY29uc3QgaGlzdG9yeSA9IGJ1aWxkQ2hhdEhpc3RvcnlGcm9tTWVzc2FnZXMobWVzc2FnZXNSZWYuY3VycmVudCwgYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcblxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VQcm9qZWN0SWQgPSBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWRcbiAgICAgIGNvbnN0IHByb2plY3RUb1JlcXVlc3QgPSByZXNvbHZlUHJvamVjdFRvUmVxdWVzdChjdHhDaGlwc1Byb2plY3QsIGxhc3RNZXNzYWdlUHJvamVjdElkKVxuXG4gICAgICBjb25zdCBwcm9qZWN0cyA9IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKVxuXG4gICAgICBjb25zdCBwYXlsb2FkRGF0YSA9IGJ1aWxkTWFpYVN0cmVhbVJlcXVlc3RQYXlsb2FkKHtcbiAgICAgICAgbWVzc2FnZTogZmluYWxNZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGF1dGhVc2VyLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIGFnZW50SWQ6IHJlc29sdmVBZ2VudElkRm9yU3RyZWFtKGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcywgYWdlbnQ/LmlkKSxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IEJvb2xlYW4oaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogQm9vbGVhbihpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgIGlzQXV0b0FwcHJvdmVBY3RpdmU6IEJvb2xlYW4oaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZi5jdXJyZW50KSxcbiAgICAgICAgY3R4UHJvamVjdCxcbiAgICAgICAgY3R4Q2xpZW50LFxuICAgICAgICBjdHhUYXNrLFxuICAgICAgICBwcm9qZWN0TmFtZTogcHJvamVjdHM/Lmxlbmd0aCA/IHByb2plY3RzWzBdLm5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgICBmYXFJZDogcGF5bG9hZEZpZWxkcy5mYXFJZCxcbiAgICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ6IHBheWxvYWRGaWVsZHMuYWdlbnRTdWdnZXN0aW9uSWQsXG4gICAgICAgIGZ1YUlkOiBwYXlsb2FkRmllbGRzLmZ1YUlkLFxuICAgICAgICBzY0lkOiBwYXlsb2FkRmllbGRzLnNjSWQsXG4gICAgICAgIGFnZW50RW50aXR5OiBhZ2VudD8uZW50aXR5LFxuICAgICAgICBhZ2VudFR5cGU6IGFnZW50Py50eXBlLFxuICAgICAgICBhZ2VudEVtb2ppOiBhZ2VudD8uZW1vamksXG4gICAgICAgIGNvbnRleHRNZXNzYWdlLFxuICAgICAgICBjb250ZXh0RGF0YTogcGF5bG9hZEZpZWxkcy5jb250ZXh0RGF0YSxcbiAgICAgIH0pXG5cbiAgICAgIGFza01haWEocGF5bG9hZERhdGEpXG4gICAgfSxcbiAgICBbXG4gICAgICBhZGRNZXNzYWdlLFxuICAgICAgY29tbWl0VG9TZXNzaW9uLFxuICAgICAgZXZlbnQsXG4gICAgICBhc2tNYWlhLFxuICAgICAgcHJvamVjdCxcbiAgICAgIGNsaWVudCxcbiAgICAgIHRhc2ssXG4gICAgICBjaGlwc1Byb2plY3QsXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgdCxcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGNoYW5nZVByb2plY3QgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBpZiAoIWN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkgcmV0dXJuXG5cbiAgICAgIGlmIChzaG91bGRVcGRhdGVQcm9qZWN0T25DaGFuZ2Uob3B0aW9uLmlkLCBwcm9qZWN0Py5pZCkpIHtcbiAgICAgICAgc2V0UHJvamVjdChvcHRpb24pXG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRSZXNlbmRBZnRlclByb2plY3RDaGFuZ2UoY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50LCBwcm9qZWN0KSkge1xuICAgICAgICBjb25zdCBoaXN0b3J5ID0gYnVpbGRDaGF0SGlzdG9yeUZyb21NZXNzYWdlcyhtZXNzYWdlc1JlZi5jdXJyZW50LCBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuXG4gICAgICAgIGFza01haWEoXG4gICAgICAgICAgYnVpbGRNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWRGb3JQcm9qZWN0Q2hhbmdlKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCxcbiAgICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgICBwcm9qZWN0OiBvcHRpb24sXG4gICAgICAgICAgICBhdXRoVXNlcixcbiAgICAgICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IEJvb2xlYW4oaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IEJvb2xlYW4oaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQpLFxuICAgICAgICAgICAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogQm9vbGVhbihpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQpLFxuICAgICAgICAgICAgYWdlbnRFbnRpdHk6IGFnZW50Py5lbnRpdHksXG4gICAgICAgICAgICBhZ2VudFR5cGU6IGFnZW50Py50eXBlLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtwcm9qZWN0LCBzZXRQcm9qZWN0LCBhc2tNYWlhLCBhdXRoVXNlciwgaXNXZWJTZWFyY2hBY3RpdmUsIGFnZW50XVxuICApXG5cbiAgY29uc3QgcmV0cnlNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSBjdXJyZW50Q2hhdElkLmN1cnJlbnRcbiAgICAgIGNvbnN0IHJldHJ5QmxvY2sgPSByZXNvbHZlUmV0cnlCbG9ja1JlYXNvbih7XG4gICAgICAgIGlzUHJvY2Vzc2luZzogaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQsXG4gICAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgICBpc1Nlc3Npb25TdHJlYW1BY3RpdmU6IHNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKHNlc3Npb25JZCksXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNvdW50OiBzZXNzaW9uU3RyZWFtTWFuYWdlci5nZXRBY3RpdmVDb3VudCgpLFxuICAgICAgICBtYXhDb25jdXJyZW50OiBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TLFxuICAgICAgfSlcbiAgICAgIGlmIChyZXRyeUJsb2NrID09PSAnY29uY3VycmVuY3knKSB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChyZXRyeUJsb2NrICE9IG51bGwpIHJldHVyblxuXG4gICAgICBjb25zdCBwcmV2aW91c01lc3NhZ2VzID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgY29uc3QgdXNlck1lc3NhZ2UgPSBmaW5kVXNlck1lc3NhZ2VGb3JSZXRyeShwcmV2aW91c01lc3NhZ2VzLCBtZXNzYWdlKVxuICAgICAgY29uc3QgcmV0cnlFbGlnaWJpbGl0eSA9IHJlc29sdmVSZXRyeUVsaWdpYmlsaXR5KHByZXZpb3VzTWVzc2FnZXMsIG1lc3NhZ2UsIHVzZXJNZXNzYWdlKVxuICAgICAgaWYgKCFyZXRyeUVsaWdpYmlsaXR5LmVsaWdpYmxlIHx8ICF1c2VyTWVzc2FnZSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHsgdHVybklkLCB1c2VPcmNoZXN0cmF0b3JGYWxsYmFjayB9ID0gcmV0cnlFbGlnaWJpbGl0eVxuXG4gICAgICBjb25zdCB0cnVuY2F0ZWQgPSBtZXNzYWdlc1dpdGhvdXRSZXRyaWVkVHVybihwcmV2aW91c01lc3NhZ2VzLCBtZXNzYWdlKVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IHByZXZpb3VzTWVzc2FnZXNcbiAgICAgIHNldEFjdGl2ZUNoYXRJZChzZXNzaW9uSWQpXG5cbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBuZXdNZXNzYWdlSWRcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IHVzZXJNZXNzYWdlLm1lc3NhZ2VcbiAgICAgIGNvbnN0IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQgPSBgYW5zd2VyLSR7bmV3TWVzc2FnZUlkfS1zdHJlYW1pbmdgXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBzdHJlYW1pbmdQbGFjZWhvbGRlcklkXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IHNlc3Npb25JZFxuXG4gICAgICBjb25zdCBwbGFjZWhvbGRlcjogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgIGlkOiBzdHJlYW1pbmdQbGFjZWhvbGRlcklkLFxuICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6IGFnZW50Py5uYW1lIHx8ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9XG4gICAgICBjb25zdCBuZXh0TWVzc2FnZXMgPSBbLi4udHJ1bmNhdGVkLCBwbGFjZWhvbGRlcl1cbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBuZXh0TWVzc2FnZXNcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyhuZXh0TWVzc2FnZXMpXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHN0cmVhbWluZ1BsYWNlaG9sZGVySWQpXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpcHNQcm9qZWN0OiBjdHhDaGlwc1Byb2plY3QsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICB0YXNrOiBjdHhUYXNrLFxuICAgICAgfSA9IGNvbnRleHRSZWYuY3VycmVudFxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdCA9IHRydW5jYXRlZC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuICAgICAgY29uc3QgcHJvamVjdFRvUmVxdWVzdCA9IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0KGN0eENoaXBzUHJvamVjdCwgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdD8ucHJvamVjdElkKVxuICAgICAgY29uc3QgY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzID0gdHJ1bmNhdGVkLmF0KC0xKT8uYWdlbnRJZCB8fCBtZXNzYWdlLmFnZW50SWRcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gcmVzb2x2ZVJldHJ5VXNlckF0dGFjaG1lbnRzKHVzZXJNZXNzYWdlKVxuXG4gICAgICBjb25zdCByZXBsYXlWaWFPcmNoZXN0cmF0b3IgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBidWlsZENoYXRIaXN0b3J5RnJvbU1lc3NhZ2VzKHRydW5jYXRlZCwgYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcbiAgICAgICAgY29uc3QgcHJvamVjdHMgPSBwcm9qZWN0VG9SZXF1ZXN0ID8gYXdhaXQgZmV0Y2hQcm9qZWN0cyhbcHJvamVjdFRvUmVxdWVzdF0pIDogbnVsbFxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFza01haWEoXG4gICAgICAgICAgYnVpbGRNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWQoe1xuICAgICAgICAgICAgbWVzc2FnZTogdXNlck1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgICAgICBhdXRoVXNlcixcbiAgICAgICAgICAgIGNoYXRJZDogc2Vzc2lvbklkLFxuICAgICAgICAgICAgbWVzc2FnZUlkOiBuZXdNZXNzYWdlSWQsXG4gICAgICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgYWdlbnRJZDogcmVzb2x2ZUFnZW50SWRGb3JTdHJlYW0oY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzLCBhZ2VudD8uaWQpLFxuICAgICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IEJvb2xlYW4oaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IEJvb2xlYW4oaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQpLFxuICAgICAgICAgICAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogQm9vbGVhbihpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQpLFxuICAgICAgICAgICAgY3R4UHJvamVjdCxcbiAgICAgICAgICAgIGN0eENsaWVudCxcbiAgICAgICAgICAgIGN0eFRhc2ssXG4gICAgICAgICAgICBwcm9qZWN0TmFtZTogcHJvamVjdHM/Lmxlbmd0aCA/IHByb2plY3RzWzBdLm5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICAgIGFnZW50RW50aXR5OiBhZ2VudD8uZW50aXR5LFxuICAgICAgICAgICAgYWdlbnRUeXBlOiBhZ2VudD8udHlwZSxcbiAgICAgICAgICAgIGFnZW50RW1vamk6IGFnZW50Py5lbW9qaSxcbiAgICAgICAgICAgIGNvbnRleHRNZXNzYWdlOiB1c2VyTWVzc2FnZS5jb250ZXh0TWVzc2FnZSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG5cbiAgICAgICAgaWYgKCFyZXN1bHQuc3RhcnRlZCkge1xuICAgICAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gcHJldmlvdXNNZXNzYWdlc1xuICAgICAgICAgIHJlcGxhY2VNZXNzYWdlcyhwcmV2aW91c01lc3NhZ2VzKVxuICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICAgIGlmIChyZXN1bHQucmVhc29uID09PSAnbGltaXQnKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh1c2VPcmNoZXN0cmF0b3JGYWxsYmFjayB8fCAhdHVybklkKSB7XG4gICAgICAgIGF3YWl0IHJlcGxheVZpYU9yY2hlc3RyYXRvcigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXRyeUNvbXBsZXRpb24oe1xuICAgICAgICBjaGF0SWQ6IHNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZUlkOiBuZXdNZXNzYWdlSWQsXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZDogdHVybklkLFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICBhZ2VudElkOiBTdHJpbmcoY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCB8fCAnJyksXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihwcm9qZWN0VG9SZXF1ZXN0ID8geyBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QgfSA6IHt9KSxcbiAgICAgICAgLi4ucmVzb2x2ZUNsaWVudFBheWxvYWQoY3R4Q2xpZW50LCBjdHhQcm9qZWN0KSxcbiAgICAgICAgLi4uKGN0eFRhc2s/LmlkICE9IG51bGwgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBpZiAocmVzdWx0LnN0YXJ0ZWQpIHJldHVyblxuXG4gICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ3R1cm5fbm90X2ZvdW5kJykge1xuICAgICAgICBhd2FpdCByZXBsYXlWaWFPcmNoZXN0cmF0b3IoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IHByZXZpb3VzTWVzc2FnZXNcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyhwcmV2aW91c01lc3NhZ2VzKVxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ2xpbWl0Jykge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyxcbiAgICAgIHJldHJ5Q29tcGxldGlvbixcbiAgICAgIGFza01haWEsXG4gICAgICBmZXRjaFByb2plY3RzLFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICBzZXRBY3RpdmVDaGF0SWQsXG4gICAgXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhhc3luYyAoZmVlZGJhY2tQcm9wOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLkNoYXRzLndhc0hlbHBmdWxDaGF0KGNoYXRNZXNzYWdlSWQsIGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQKVxuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gY2hhdE1lc3NhZ2VJZCAmJiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgd2FzSGVscGZ1bDogZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgICBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcsXG4gICAgICBlZGl0ZWRBY3Rpb25zPzogQXJyYXk8eyB0b29sX25hbWU6IHN0cmluZzsgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4sXG4gICAgICBtZXRhZGF0YT86IHsgdG9vbF9ncm91cF9zbHVnczogc3RyaW5nW10gfVxuICAgICkgPT4ge1xuICAgICAgaWYgKCF0aHJlYWRJZHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0aHJlYWRfaWRzIHByb3ZpZGVkIGZvciBhcHByb3ZhbCBkZWNpc2lvbicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3VuZCA9IGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHMoXG4gICAgICAgIHRocmVhZElkcyxcbiAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCxcbiAgICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLm1lc3NhZ2VzLFxuICAgICAgICBhY3RpdmVWaWV3LmdldCgpXG4gICAgICApXG4gICAgICBpZiAoIWZvdW5kPy5tZXNzYWdlLmFwcHJvdmFsKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlIGVuY29udHLDsyBtZW5zYWplIGNvbiBhcHByb3ZhbCBwYXJhIHRocmVhZF9pZHM6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBtZXNzYWdlOiBtZXNzYWdlV2l0aEFwcHJvdmFsLCBzZXNzaW9uSWQ6IGZvdW5kU2Vzc2lvbklkIH0gPSBmb3VuZFxuICAgICAgY29uc3QgeyBhcHByb3ZhbCB9ID0gbWVzc2FnZVdpdGhBcHByb3ZhbFxuICAgICAgaWYgKCFhcHByb3ZhbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gYXBwcm92YWwuc2Vzc2lvbl9pZCB8fCBmb3VuZFNlc3Npb25JZFxuICAgICAgaWYgKCFzZXNzaW9uSWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc2Vzc2lvbl9pZCBkaXNwb25pYmxlIHBhcmEgYXBwcm92YWw6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzZXNzaW9uU3RyZWFtTWFuYWdlci5nZXRBY3RpdmVDb3VudCgpID49IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlV2l0aEFwcHJvdmFsLmlkXG4gICAgICBjb25zdCBuZXdTdGF0dXMgPSByZXNvbHZlQXBwcm92YWxEZWNpc2lvblN0YXR1cyhkZWNpc2lvbilcbiAgICAgIGNvbnN0IGhpdGxDb250ZXh0OiBIaXRsRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICBtZXNzYWdlVGV4dDogbWVzc2FnZVdpdGhBcHByb3ZhbC5tZXNzYWdlLFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgcGVuZGluZ0FjdGlvbnM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyxcbiAgICAgICAgdGhyZWFkSWRzLFxuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0FjdGl2ZVNlc3Npb24gPSBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZClcbiAgICAgIGlmIChpc0FjdGl2ZVNlc3Npb24pIHtcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IGhpdGxDb250ZXh0XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7IC4uLm1lc3NhZ2VXaXRoQXBwcm92YWwsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfSlcblxuICAgICAgY29uc3Qgc3RyZWFtTWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGlmIChpc0FjdGl2ZVNlc3Npb24pIHtcbiAgICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gc3RyZWFtTWVzc2FnZUlkXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpdGxDdHg6IFN0cmVhbUNvbnRleHQgPSB7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZUlkOiBzdHJlYW1NZXNzYWdlSWQsXG4gICAgICAgIHBsYWNlaG9sZGVySWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKHN0cmVhbU1lc3NhZ2VJZCksXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWlzQWN0aXZlU2Vzc2lvbikgcmV0dXJuXG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2Vzc2lvblN0cmVhbU1hbmFnZXIuc3RhcnRDb250aW51ZVN0cmVhbSh7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgcGxhY2Vob2xkZXJJZDogaGl0bEN0eC5wbGFjZWhvbGRlcklkLFxuICAgICAgICBjb250aW51ZVJlcXVlc3Q6IHtcbiAgICAgICAgICB0aHJlYWRJZHMsXG4gICAgICAgICAgc2Vzc2lvbklkOiBhcHByb3ZhbC5zZXNzaW9uX2lkLFxuICAgICAgICAgIGRlY2lzaW9uOiByZXNvbHZlQ29udGludWVTdHJlYW1EZWNpc2lvbihkZWNpc2lvbiwgZWRpdGVkQWN0aW9ucyksXG4gICAgICAgICAgZWRpdGVkQWN0aW9ucyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIH0sXG4gICAgICAgIHQsXG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0OiBoaXRsQ29udGV4dCxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkLFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lLFxuICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICBvblN0cmVhbVVwZGF0ZTogY29udGVudCA9PiBoYW5kbGVTdHJlYW1VcGRhdGUoaGl0bEN0eCwgY29udGVudCksXG4gICAgICAgICAgb25GaW5pc2hTdHJlYW06IGZpbmlzaFBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRmluaXNoKFxuICAgICAgICAgICAgICBoaXRsQ3R4LFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLmNvbnRlbnQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuc291cmNlcyxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5tZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuYXR0YWNobWVudHMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuY29tcGxldGVkQWdlbnRJZCxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5yZXNvbHZlZENvbnRleHQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQucmVhc29uaW5nXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZygpXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcihoaXRsQ3R4KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkOiAoYXBwcm92YWxQYXlsb2FkLCBhY2N1bXVsYXRlZENvbnRlbnQpID0+IHtcbiAgICAgICAgICAgIHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nKClcbiAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQoaGl0bEN0eCwgYXBwcm92YWxQYXlsb2FkLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIGlmICghcmVzdWx0LnN0YXJ0ZWQpIHtcbiAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ2xpbWl0Jykge1xuICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICBjb21taXRUb1Nlc3Npb24sXG4gICAgICBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICAgIGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gICAgICB0LFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGluaXRpYWxpemVDaGF0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAoaW5pdGlhbENoYXRJZCkge1xuICAgICAgYXdhaXQgbG9hZE1lc3NhZ2VzKClcbiAgICB9IGVsc2UgaWYgKHVzZXJJbml0aWFsTWVzc2FnZSkge1xuICAgICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlPy50cmltKCkpXG4gICAgICBjb25zdCBoYXNJbml0aWFsQXR0YWNobWVudHMgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZhcSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZ1YSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbFNjID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZClcblxuICAgICAgaWYgKCFoYXNJbml0aWFsTWVzc2FnZSAmJiAhaGFzSW5pdGlhbEF0dGFjaG1lbnRzICYmICFoYXNJbml0aWFsRmFxICYmICFoYXNJbml0aWFsRnVhICYmICFoYXNJbml0aWFsU2MpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpcHNQcm9qZWN0OiBjdHhDaGlwc1Byb2plY3QsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICB0YXNrOiBjdHhUYXNrLFxuICAgICAgfSA9IGNvbnRleHRSZWYuY3VycmVudFxuICAgICAgY29uc3QgcHJvamVjdFRvUmVxdWVzdCA9IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0KGN0eENoaXBzUHJvamVjdCwgbnVsbCkgPz8gY3R4UHJvamVjdD8uaWQgPz8gbnVsbFxuXG4gICAgICBjb25zdCBpbml0aWFsRGlzcGxheU1lc3NhZ2UgPSBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5KHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLCB7XG4gICAgICAgIGZ1YUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQsXG4gICAgICAgIHNjSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkLFxuICAgICAgfSlcblxuICAgICAgZW5zdXJlU2Vzc2lvbkluU2lkZWJhcih7XG4gICAgICAgIHNlc3Npb25JZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICB0aXRsZTogYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlKGluaXRpYWxEaXNwbGF5TWVzc2FnZSksXG4gICAgICAgIGFnZW50LFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzLFxuICAgICAgfSlcblxuICAgICAgYXNrTWFpYSh7XG4gICAgICAgIG1lc3NhZ2U6IHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSEsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjdHhQcm9qZWN0Py5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKGN0eFByb2plY3QuZmVlSWQpIH0gOiB7fSksXG4gICAgICAgIC4uLnJlc29sdmVDbGllbnRQYXlsb2FkKGN0eENsaWVudCwgY3R4UHJvamVjdCksXG4gICAgICAgIC4uLihjdHhQcm9qZWN0Py5uYW1lID8geyBwcm9qZWN0TmFtZTogY3R4UHJvamVjdC5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihjdHhUYXNrPy5pZCAhPSBudWxsXG4gICAgICAgICAgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpLCAuLi4oY3R4VGFzay5uYW1lID8geyB0YXNrTmFtZTogY3R4VGFzay5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgPyB7IGZhcUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkID8geyBmdWFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCA/IHsgc2NJZDogdXNlckluaXRpYWxNZXNzYWdlLnNjSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LnR5cGUgIT0gbnVsbCA/IHsgYWdlbnRUeXBlOiBhZ2VudC50eXBlIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW1vamkgIT0gbnVsbCA/IHsgYWdlbnRFbW9qaTogYWdlbnQuZW1vamkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKVxuICAgICAgICAgID8geyBjb250ZXh0TWVzc2FnZTogYnVpbGRDb250ZXh0TWVzc2FnZSh1c2VySW5pdGlhbE1lc3NhZ2UubWVudGlvbnMpIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5jb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGE6IHVzZXJJbml0aWFsTWVzc2FnZS5jb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtcbiAgICBpbml0aWFsQ2hhdElkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBwcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICB0YXNrLFxuICAgIGF1dGhVc2VyLFxuICAgIGFnZW50LFxuICAgIGFza01haWEsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICBdKVxuXG4gIGNvbnN0IHJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBwcmV2aW91c1Nlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHByZXZpb3VzU2Vzc2lvbklkKVxuICAgIHJlYXNvbmluZ1N0b3JlLmNsZWFyKClcbiAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIHNldEFjdGl2ZVNlc3Npb25JZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2V0QWN0aXZlQ2hhdElkKG51bGwpXG4gIH0sIFtzZXRBY3RpdmVDaGF0SWRdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICByZXRyeU1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICByZXNldENoYXQsXG4gICAgc3RvcEdlbmVyYXRpb24sXG5cbiAgICBpc0Rpc2FibGVkOiB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVNDLEVBQUUsSUFBSUMsTUFBTSxRQUFRLE1BQU07QUFDbkMsU0FBU0MsZUFBZSxRQUFRLG9CQUFvQjtBQUNwRCxTQUFTQyxxQkFBcUIsUUFBUSwwQkFBMEI7QUFDaEUsU0FBU0MsSUFBSSxRQUFRLFNBQVM7QUFFOUIsU0FDRUMsa0NBQWtDLEVBQ2xDQyw2QkFBNkIsRUFDN0JDLDZCQUE2QixFQUM3QkMsNEJBQTRCLEVBQzVCQyw2QkFBNkIsRUFDN0JDLHdCQUF3QixFQUN4QkMsYUFBYSxFQUNiQyxpQkFBaUIsRUFDakJDLG9CQUFvQixFQUNwQkMsdUJBQXVCLEVBQ3ZCQyw0QkFBNEIsRUFDNUJDLDZCQUE2QixFQUM3QkMsMEJBQTBCLEVBQzFCQyxzQkFBc0Is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
1381
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiZmx1c2hTeW5jIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwiZmluZE1lc3NhZ2VXaXRoQXBwcm92YWxCeVRocmVhZElkcyIsInJlc29sdmVBcHByb3ZhbERlY2lzaW9uU3RhdHVzIiwicmVzb2x2ZUNvbnRpbnVlU3RyZWFtRGVjaXNpb24iLCJtYXBBdXRoVXNlclRvQ2hhdE1lc3NhZ2VVc2VyIiwibm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMiLCJub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MiLCJjb21wYWN0aW9uRm9yIiwicmVhc29uaW5nVHJhY2VGb3IiLCJyZXNvbHZlQ2xpZW50UGF5bG9hZCIsInJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0IiwicmVzb2x2ZVN0cmVhbUVycm9yTWVzc2FnZUtleSIsImFwcGx5UHJvamVjdERhc2hib2FyZE11dGF0aW9uIiwic2hvdWxkUmVmZXRjaE9wZW5UYXNrUGFuZWwiLCJyZXNvbHZlU2VuZE1lc3NhZ2VHYXRlIiwicmVzb2x2ZVNlbmRNZXNzYWdlUGF5bG9hZEZpZWxkcyIsImJ1aWxkQ2hhdEhpc3RvcnlGcm9tTWVzc2FnZXMiLCJyZXNvbHZlTGFzdE1lc3NhZ2VBZ2VudElkIiwicmVzb2x2ZUFnZW50SWRGb3JTdHJlYW0iLCJyZXNvbHZlVXNlclF1ZXN0aW9uTWVzc2FnZUlkIiwiYnVpbGRNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWQiLCJidWlsZE1haWFTdHJlYW1SZXF1ZXN0UGF5bG9hZEZvclByb2plY3RDaGFuZ2UiLCJyZXNvbHZlU3RyZWFtRXJyb3JIYW5kbGluZ01vZGUiLCJidWlsZFN0cmVhbUVycm9yQXNzaXN0YW50TWVzc2FnZSIsInJlc29sdmVIaXRsQXBwcm92YWxSZXF1aXJlZE91dGNvbWUiLCJidWlsZEhpdGxBcHByb3ZhbFBlbmRpbmdNZXNzYWdlIiwic2hvdWxkUHJlc2VydmVSZWFzb25pbmdPblN0cmVhbVN0b3AiLCJidWlsZFN0cmVhbVN0b3BQYXJ0aWFsQXNzaXN0YW50TWVzc2FnZSIsImJ1aWxkU3RyZWFtU3RvcENhbmNlbGxlZEFzc2lzdGFudE1lc3NhZ2UiLCJyZXNvbHZlUmV0cnlCbG9ja1JlYXNvbiIsInJlc29sdmVSZXRyeUVsaWdpYmlsaXR5IiwicmVzb2x2ZVJldHJ5VXNlckF0dGFjaG1lbnRzIiwic2hvdWxkVXBkYXRlUHJvamVjdE9uQ2hhbmdlIiwic2hvdWxkUmVzZW5kQWZ0ZXJQcm9qZWN0Q2hhbmdlIiwicmVzb2x2ZVN0cmVhbUZpbmlzaEZpbmFsTWVzc2FnZUlkIiwicmVzb2x2ZVN0cmVhbVN0b3BNZXNzYWdlSWRzIiwicmVzb2x2ZVJlbnRhYmlsaWRhZFByb2plY3RGYXFNZXNzYWdlIiwicmVzb2x2ZVN0cmVhbUVycm9yVXNlck1lc3NhZ2UiLCJyZXNvbHZlSGl0bEV4ZWN1dGlvbkNvbnRleHQiLCJyZXNvbHZlU2tpcHBlZEhpdGxNYW51YWxBcHByb3ZhbCIsInJlc29sdmVIaXRsU2tpcFJlc29sdXRpb25Tb3VyY2UiLCJyZXNvbHZlQ3JlYXRlQWdlbnRIaXRsQW5hbHl0aWNzRXZlbnRzIiwiYnVpbGRUZXJtaW5hbFNlc3Npb25SZWNvbmNpbGlhdGlvbktleSIsInNob3VsZEZvcmNlUmVsb2FkTWVzc2FnZXNPblRlcm1pbmFsU2Vzc2lvbiIsInNob3VsZFJvdGF0ZVNlc3Npb25Gb3JOZXdIb21lIiwic2hvdWxkU3dpdGNoVG9Jbml0aWFsQ2hhdFNlc3Npb24iLCJidWlsZFN0cmVhbUZpbmlzaEFzc2lzdGFudE1lc3NhZ2UiLCJyZXNvbHZlQWN0aXZlU3RyZWFtRmluaXNoUHJvY2Vzc2luZyIsInNob3VsZE1hcmtDaGF0UmVhZEFmdGVyU3RyZWFtRmluaXNoIiwic2hvdWxkRGlzcGF0Y2hGaXJzdFNlc3Npb25SZWZldGNoIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImJ1aWxkQ29udGV4dE1lc3NhZ2UiLCJmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IiwidXNlUHJvamVjdHMiLCJ1c2VUYWJUYXNrRGVmYXVsdCIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJkaXNwYXRjaE1haWFIb3Vyc0NoYXJnZWQiLCJmZXRjaEFnZW50RGV0YWlsIiwiYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QiLCJnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlIiwibm9ybWFsaXplSGl0bFRvb2xOYW1lIiwidHJhY2tNYW51YWxIaXRsRXZlbnRzIiwic2Vzc2lvblN0cmVhbWluZ1RleHQiLCJ1c2VTZXNzaW9uc1N0b3JlIiwidXNlU2Vzc2lvbk1ldGEiLCJzZXNzaW9uU3RyZWFtTWFuYWdlciIsIk1BWF9DT05DVVJSRU5UX1NUUkVBTVMiLCJhY3RpdmVWaWV3Iiwibm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kIiwiYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlIiwiZW5zdXJlU2Vzc2lvbkluU2lkZWJhciIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQiLCJzdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsImZpbmRVc2VyTWVzc2FnZUZvclJldHJ5IiwibWVzc2FnZXNXaXRob3V0UmV0cmllZFR1cm4iLCJnZXRDaGF0c1N0b3JlU3RhdGUiLCJ1c2VDaGF0c1N0b3JlIiwicmVhc29uaW5nU3RvcmUiLCJtYXBSZWFzb25pbmdUcmFjZSIsInVzZVN0YWJsZUNhbGxiYWNrcyIsImF1dGhVc2VyIiwiY3VycmVudFVzZXIiLCJuZXh0VXNlciIsImN1cnJlbnQiLCJpZCIsIm5hbWUiLCJhdmF0YXIiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWYiLCJpbml0aWFsQ2hhdElkIiwiY2hhdElkIiwidXNlckluaXRpYWxNZXNzYWdlIiwib25FcnJvciIsIl9yZWYkYWdlbnRzIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQiLCJwcm9qZWN0Iiwic2V0UHJvamVjdCIsImNsaWVudCIsInNldENsaWVudCIsInRhc2siLCJzZXRUYXNrIiwiYWdlbnQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImlzQXV0b0FwcHJvdmVBY3RpdmUiLCJjaGlwc1Byb2plY3QiLCJzZXRDaGlwc1Byb2plY3QiLCJldmVudCIsIl91c2VQcm9qZWN0cyIsImZldGNoUHJvamVjdHMiLCJfdXNlU3RhYmxlQ2FsbGJhY2tzIiwiX3VzZVRhYlRhc2tEZWZhdWx0IiwiZ2V0VGFiVGFza0RlZmF1bHQiLCJjdXJyZW50TWVzc2FnZUlkIiwiY3VycmVudFVzZXJRdWVzdGlvbiIsImN1cnJlbnRDaGF0SWQiLCJzZXRBY3RpdmVDaGF0SWQiLCJzdGF0ZSIsInJlcG9ydGVkRXZlbnQiLCJtZXNzYWdlc1JlZiIsImxhc3RNYW51YWxBcHByb3ZhbFJlZiIsInRyYWNrZWRNYW51YWxIaXRsS2V5c1JlZiIsIlNldCIsImhpdGxFeGVjdXRpb25Db250ZXh0UmVmIiwicmV0cnlTbmFwc2hvdFJlZiIsImlzUHJvY2Vzc2luZ1JlZiIsImZpcnN0VGltZVJlZiIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYiLCJhY3RpdmVTdHJlYW1DaGF0SWRSZWYiLCJjbGVhclN0cmVhbVVpUmVmIiwidW5kZWZpbmVkIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiYWN0aXZlTG9hZGluZ3MiLCJzZXRBY3RpdmVMb2FkaW5ncyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiYWN0aXZlU2Vzc2lvbklkIiwic2V0QWN0aXZlU2Vzc2lvbklkIiwiaXNNb3VudGVkUmVmIiwibGFzdEhhbmRsZWRUZXJtaW5hbFJlZiIsImlzV2ViU2VhcmNoQWN0aXZlUmVmIiwiaXNEZWVwU2VhcmNoQWN0aXZlUmVmIiwiaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZiIsImNvbnRleHRSZWYiLCJfdXNlQ2hhdE1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwibWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJsb2FkTWVzc2FnZXMiLCJhZGRNZXNzYWdlIiwicmVtb3ZlTWVzc2FnZSIsInJlcGxhY2VNZXNzYWdlcyIsImhhbmRsZVNjcm9sbCIsImNvbW1pdFRvU2Vzc2lvbiIsInNlc3Npb25JZCIsIm1lc3NhZ2UiLCJnZXRTdGF0ZSIsImlzIiwiZHJvcEZyb21TZXNzaW9uIiwibWVzc2FnZUlkIiwiY2xlYXJTZXNzaW9uVGFpbCIsInNldE1lc3NhZ2VzIiwic2V0IiwiYWN0aXZlU2Vzc2lvbk1ldGEiLCJzdGF0dXMiLCJrZXkiLCJmaW5pc2hlZEF0IiwidGFpbCIsImdldE1lc3NhZ2VzIiwiZm9yY2UiLCJjdXN0b21FdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwicHJldmlvdXNJbml0aWFsQ2hhdElkUmVmIiwicHJldmlvdXNJbml0aWFsQ2hhdElkIiwiaXNBY3RpdmUiLCJoYW5kbGVTdHJlYW1FcnJvciIsImN0eCIsImVycm9yTWVzc2FnZSIsImVycm9yUmF3TWVzc2FnZSIsInBsYWNlaG9sZGVySWQiLCJjbGVhciIsInJldHJ5U25hcHNob3QiLCJCb29sZWFuIiwic2hvdyIsInNldmVyaXR5IiwiX3Jlc29sdmVTdHJlYW1FcnJvck1lIiwibWVzc2FnZUtleSIsInRva2Vuc1VzZWQiLCJzaG93UmV0cnkiLCJyZXRyeUxhYmVsIiwibWFya0NoYXRBc1VucmVhZCIsImhhbmRsZVN0cmVhbVVwZGF0ZSIsImNvbnRlbnQiLCJwbGFjZWhvbGRlckV4aXN0cyIsInNvbWUiLCJtc2ciLCJzdGFydCIsImRhdGUiLCJEYXRlIiwidXNlciIsInJvbGUiLCJBU1NJU1RBTlQiLCJzZXRUZXh0IiwiaGFuZGxlU3RyZWFtRmluaXNoIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJyYXdBdHRhY2htZW50cyIsInN1Z2dlc3Rpb25zIiwiY29tcGxldGVkQWdlbnRJZCIsIl9yZXNvbHZlZENvbnRleHQiLCJyZWFzb25pbmciLCJfcmVhc29uaW5nVHJhY2VGb3IiLCJfd2luZG93JHRhc2tQYW5lbCIsInRlbXBNZXNzYWdlSWQiLCJhdHRhY2htZW50cyIsImZpbmFsTWVzc2FnZUlkIiwiY29tcGFjdGlvbiIsImZpbmFsVHJhY2UiLCJ0YXNrVXJsUmVnZXgiLCJtYW51YWxBcHByb3ZhbEZvckFuYWx5dGljcyIsIm1hbnVhbEFwcHJvdmFsIiwiX3lpZWxkJHJlc29sdmVBY3RpdmVTIiwiY29udGVudFRvQWRkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImVkaXRBZ2VudEZvbGxvd1VwIiwiaG91cnNDaGFyZ2VUb29scyIsImFmZmVjdGVkVGFza0lkcyIsIm1hbnVhbFdhc1Rhc2tFZGl0IiwibWFudWFsV2FzVGFza0RlbGV0ZSIsIndhc1Rhc2tFZGl0Iiwid2FzVGFza0RlbGV0ZSIsIndhc0NyZWF0ZUFnZW50QXBwcm92ZWQiLCJwZW5kaW5nQWN0aW9ucyIsIm9wZW5UYXNrUGFuZWxJZCIsIl93aW5kb3ckdGFza1BhbmVsMiIsIl93aW5kb3ckdGFza1BhbmVsMiRyZSIsIl9nZXRDaGF0c1N0b3JlU3RhdGUiLCJpc0NoYXRWaWV3VmlzaWJsZSIsIm1hcmtDaGF0QXNSZWFkIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJyZW5hbWUiLCJhYnJ1cHQiLCJSZWdFeHAiLCJwcm9qZWN0SWQiLCJwYXRobmFtZSIsIndpbmRvdyIsImxvY2F0aW9uIiwibXVsdGlBZ2VudHNBY2Nlc3MiLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiYXBwbHlEYXNoYm9hcmRNdXRhdGlvbiIsIm11dGF0aW9uIiwidGFza0lkcyIsIm5ld1Byb2plY3REYXNoYm9hcmQiLCJzZW50IiwibWFudWFsQXBwcm92YWxUb29sTmFtZSIsInRvb2xOYW1lIiwiYWdlbnRUeXBlIiwibm9ybWFsaXplVG9vbE5hbWUiLCJidWlsZEFjdGlvblR5cGVMaXN0IiwiZm9yRWFjaCIsInBheWxvYWQiLCJhaUNoYXRIaXRsT3B0aW9uIiwidGFza1BhbmVsIiwidGFza0lkIiwibGVuZ3RoIiwic291cmNlIiwidG9vbHMiLCJyZWZldGNoVGFzayIsImNhbGwiLCJhZ2VudElkIiwidGhlbiIsImNoYXRBZ2VudCIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsIl94MiIsIl94MyIsIl94NCIsIl94NSIsIl94NiIsIl94NyIsIl94OCIsIl94OSIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFuZGxlU3RyZWFtU3RvcCIsInBhcnRpYWxUZXh0IiwiX3Jlc29sdmVTdHJlYW1TdG9wTWVzIiwiY2FuY2VsbGVkTWVzc2FnZUlkIiwic3RvcHBlZFRyYWNlIiwiZmluaXNoIiwicmVtb3ZlIiwiY2FuY2VsbGVkTGFiZWwiLCJoYW5kbGVBcHByb3ZhbFJlcXVpcmVkIiwiYXBwcm92YWwiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJfbWFwUmVhc29uaW5nVHJhY2UiLCJoaXRsQ29udGV4dCIsImhpdGxPdXRjb21lIiwidHlwZSIsImltcHJlc3Npb24iLCJhaUNoYXRIaXRsIiwib3B0aW9uIiwic2tpcHBlZE1hbnVhbEFwcHJvdmFsIiwiYXBwcm92YWxNZXNzYWdlSWQiLCJhcHByb3ZhbFRyYWNlIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsIm9uQXBwcm92YWxSZXF1aXJlZCIsImFza01haWEiLCJyZXRyeUNvbXBsZXRpb24iLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0cmVhbUFjdGl2aXR5IiwidXBkYXRlU3RyZWFtQWN0aXZpdHkiLCJzdG9wU3RyZWFtaW5nIiwiY3VycmVudFByb2plY3QiLCJzZW5kTWVzc2FnZSIsIl9yZWYzIiwiX2NhbGxlZTIiLCJhdHRhY2htZW50c09yT3B0aW9ucyIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsImNvbnRleHREYXRhIiwiX29wdGlvbnMkcHJvamVjdENoYW5nIiwiX2NvbnRleHRSZWYkY3VycmVudCRwIiwid2lsbFN0YXJ0TmV3U3RyZWFtIiwic2VuZEdhdGUiLCJfbm9ybWFsaXplU2VuZE1lc3NhZ2UiLCJvcHRpb25zIiwicGF5bG9hZEZpZWxkcyIsImNvbnRleHRNZXNzYWdlIiwiZGlzcGxheU1lc3NhZ2UiLCJuZXdNZXNzYWdlSWQiLCJsYXN0TWVzc2FnZVdpdGhQcm9qZWN0IiwiY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIiwiX2NvbnRleHRSZWYkY3VycmVudCIsImN0eENoaXBzUHJvamVjdCIsImN0eFByb2plY3QiLCJjdHhDbGllbnQiLCJjdHhUYXNrIiwic3RyZWFtaW5nUGxhY2Vob2xkZXJJZCIsImZpbmFsTWVzc2FnZSIsImhpc3RvcnkiLCJsYXN0TWVzc2FnZVByb2plY3RJZCIsInByb2plY3RUb1JlcXVlc3QiLCJwcm9qZWN0cyIsInBheWxvYWREYXRhIiwiX2NvbnRleHQyIiwiaXNQcm9jZXNzaW5nIiwiYWN0aXZlU3RyZWFtQ291bnQiLCJnZXRBY3RpdmVDb3VudCIsIm1heENvbmN1cnJlbnQiLCJwbUFpVHlwZWRUZXh0IiwiZmlsdGVyIiwiYXQiLCJ0aXRsZSIsIl9vYmplY3RTcHJlYWQiLCJVU0VSIiwicHJvamVjdENoYW5nZWQiLCJpbmNvbWVUeXBlIiwidG9TdHJpbmciLCJhZ2VudE5hbWUiLCJwcm9qZWN0TmFtZSIsImFnZW50RW50aXR5IiwiZW50aXR5IiwiYWdlbnRFbW9qaSIsImVtb2ppIiwiX3gwIiwiX3gxIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl94MTQiLCJfeDE1IiwiY2hhbmdlUHJvamVjdCIsInJldHJ5TWVzc2FnZSIsIl9yZWY0IiwiX2NhbGxlZTQiLCJfdHJ1bmNhdGVkJGF0IiwicmV0cnlCbG9jayIsInByZXZpb3VzTWVzc2FnZXMiLCJ1c2VyTWVzc2FnZSIsInJldHJ5RWxpZ2liaWxpdHkiLCJ0dXJuSWQiLCJ1c2VPcmNoZXN0cmF0b3JGYWxsYmFjayIsInRydW5jYXRlZCIsInBsYWNlaG9sZGVyIiwibmV4dE1lc3NhZ2VzIiwiX2NvbnRleHRSZWYkY3VycmVudDIiLCJyZXBsYXlWaWFPcmNoZXN0cmF0b3IiLCJyZXN1bHQiLCJfY29udGV4dDQiLCJpc1Nlc3Npb25TdHJlYW1BY3RpdmUiLCJlbGlnaWJsZSIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9yZWY1IiwiX2NhbGxlZTMiLCJfdCIsIl9jb250ZXh0MyIsInN0YXJ0ZWQiLCJyZWFzb24iLCJsYW5nIiwiU3RyaW5nIiwiTnVtYmVyIiwiX3gxNiIsImhhbmRsZUZlZWRiYWNrIiwiX3JlZjYiLCJfY2FsbGVlNSIsImZlZWRiYWNrUHJvcCIsImNoYXRNZXNzYWdlSWQiLCJyZXNwb25zZSIsIl9jb250ZXh0NSIsIkNoYXRzIiwid2FzSGVscGZ1bENoYXQiLCJUSFVNQlNfVVAiLCJtYXAiLCJ3YXNIZWxwZnVsIiwiX3gxNyIsIl94MTgiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwiX3JlZjciLCJfY2FsbGVlNiIsInRocmVhZElkcyIsImRlY2lzaW9uIiwiZWRpdGVkQWN0aW9ucyIsIm1ldGFkYXRhIiwiZm91bmQiLCJtZXNzYWdlV2l0aEFwcHJvdmFsIiwiZm91bmRTZXNzaW9uSWQiLCJuZXdTdGF0dXMiLCJpc0FjdGl2ZVNlc3Npb24iLCJzdHJlYW1NZXNzYWdlSWQiLCJoaXRsQ3R4IiwicmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmciLCJfY29udGV4dDYiLCJnZXQiLCJzZXNzaW9uX2lkIiwibWVzc2FnZVRleHQiLCJwZW5kaW5nX2FjdGlvbnMiLCJhcHByb3ZhbFN0YXR1cyIsInN0YXJ0Q29udGludWVTdHJlYW0iLCJjb250aW51ZVJlcXVlc3QiLCJoaXRsRXhlY3V0aW9uQ29udGV4dCIsImNhbGxiYWNrcyIsImZpbmlzaFBheWxvYWQiLCJyZXNvbHZlZENvbnRleHQiLCJhcHByb3ZhbFBheWxvYWQiLCJfeDE5IiwiX3gyMCIsIl94MjEiLCJfeDIyIiwiaW5pdGlhbGl6ZUNoYXQiLCJfY2FsbGVlNyIsIl91c2VySW5pdGlhbE1lc3NhZ2UkbSIsIl91c2VySW5pdGlhbE1lc3NhZ2UkYSIsIl9yZWY5IiwiX3Jlc29sdmVQcm9qZWN0VG9SZXF1IiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJoYXNJbml0aWFsQXR0YWNobWVudHMiLCJoYXNJbml0aWFsRmFxIiwiaGFzSW5pdGlhbEZ1YSIsImhhc0luaXRpYWxTYyIsIl9jb250ZXh0UmVmJGN1cnJlbnQzIiwiaW5pdGlhbERpc3BsYXlNZXNzYWdlIiwiX2NvbnRleHQ3IiwidHJpbSIsImhpc3RvcnlNZXNzYWdlIiwidXNlcklkIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwiZmVlSWQiLCJ0YXNrTmFtZSIsInJlc2V0Q2hhdCIsInByZXZpb3VzU2Vzc2lvbklkIiwic3RvcEdlbmVyYXRpb24iLCJpc0Rpc2FibGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGVkLW9wdGlvbmFsLWNoYWluICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBmbHVzaFN5bmMgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xuaW1wb3J0IHsgdXNlQ2hhdE1lc3NhZ2VzIH0gZnJvbSAnLi4vdXNlQ2hhdE1lc3NhZ2VzJ1xuaW1wb3J0IHsgdXNlT3JjaGVzdHJhdG9yU3RyZWFtIH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uL3VzZVQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7XG4gIGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHMsXG4gIHJlc29sdmVBcHByb3ZhbERlY2lzaW9uU3RhdHVzLFxuICByZXNvbHZlQ29udGludWVTdHJlYW1EZWNpc2lvbixcbiAgbWFwQXV0aFVzZXJUb0NoYXRNZXNzYWdlVXNlcixcbiAgbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMsXG4gIG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyxcbiAgY29tcGFjdGlvbkZvcixcbiAgcmVhc29uaW5nVHJhY2VGb3IsXG4gIHJlc29sdmVDbGllbnRQYXlsb2FkLFxuICByZXNvbHZlUHJvamVjdFRvUmVxdWVzdCxcbiAgcmVzb2x2ZVN0cmVhbUVycm9yTWVzc2FnZUtleSxcbiAgYXBwbHlQcm9qZWN0RGFzaGJvYXJkTXV0YXRpb24sXG4gIHNob3VsZFJlZmV0Y2hPcGVuVGFza1BhbmVsLFxuICByZXNvbHZlU2VuZE1lc3NhZ2VHYXRlLFxuICByZXNvbHZlU2VuZE1lc3NhZ2VQYXlsb2FkRmllbGRzLFxuICBidWlsZENoYXRIaXN0b3J5RnJvbU1lc3NhZ2VzLFxuICByZXNvbHZlTGFzdE1lc3NhZ2VBZ2VudElkLFxuICByZXNvbHZlQWdlbnRJZEZvclN0cmVhbSxcbiAgcmVzb2x2ZVVzZXJRdWVzdGlvbk1lc3NhZ2VJZCxcbiAgYnVpbGRNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWQsXG4gIGJ1aWxkTWFpYVN0cmVhbVJlcXVlc3RQYXlsb2FkRm9yUHJvamVjdENoYW5nZSxcbiAgcmVzb2x2ZVN0cmVhbUVycm9ySGFuZGxpbmdNb2RlLFxuICBidWlsZFN0cmVhbUVycm9yQXNzaXN0YW50TWVzc2FnZSxcbiAgcmVzb2x2ZUhpdGxBcHByb3ZhbFJlcXVpcmVkT3V0Y29tZSxcbiAgYnVpbGRIaXRsQXBwcm92YWxQZW5kaW5nTWVzc2FnZSxcbiAgc2hvdWxkUHJlc2VydmVSZWFzb25pbmdPblN0cmVhbVN0b3AsXG4gIGJ1aWxkU3RyZWFtU3RvcFBhcnRpYWxBc3Npc3RhbnRNZXNzYWdlLFxuICBidWlsZFN0cmVhbVN0b3BDYW5jZWxsZWRBc3Npc3RhbnRNZXNzYWdlLFxuICByZXNvbHZlUmV0cnlCbG9ja1JlYXNvbixcbiAgcmVzb2x2ZVJldHJ5RWxpZ2liaWxpdHksXG4gIHJlc29sdmVSZXRyeVVzZXJBdHRhY2htZW50cyxcbiAgc2hvdWxkVXBkYXRlUHJvamVjdE9uQ2hhbmdlLFxuICBzaG91bGRSZXNlbmRBZnRlclByb2plY3RDaGFuZ2UsXG4gIHJlc29sdmVTdHJlYW1GaW5pc2hGaW5hbE1lc3NhZ2VJZCxcbiAgcmVzb2x2ZVN0cmVhbVN0b3BNZXNzYWdlSWRzLFxuICByZXNvbHZlUmVudGFiaWxpZGFkUHJvamVjdEZhcU1lc3NhZ2UsXG4gIHJlc29sdmVTdHJlYW1FcnJvclVzZXJNZXNzYWdlLFxuICByZXNvbHZlSGl0bEV4ZWN1dGlvbkNvbnRleHQsXG4gIHJlc29sdmVTa2lwcGVkSGl0bE1hbnVhbEFwcHJvdmFsLFxuICByZXNvbHZlSGl0bFNraXBSZXNvbHV0aW9uU291cmNlLFxuICByZXNvbHZlQ3JlYXRlQWdlbnRIaXRsQW5hbHl0aWNzRXZlbnRzLFxuICBidWlsZFRlcm1pbmFsU2Vzc2lvblJlY29uY2lsaWF0aW9uS2V5LFxuICBzaG91bGRGb3JjZVJlbG9hZE1lc3NhZ2VzT25UZXJtaW5hbFNlc3Npb24sXG4gIHNob3VsZFJvdGF0ZVNlc3Npb25Gb3JOZXdIb21lLFxuICBzaG91bGRTd2l0Y2hUb0luaXRpYWxDaGF0U2Vzc2lvbixcbiAgYnVpbGRTdHJlYW1GaW5pc2hBc3Npc3RhbnRNZXNzYWdlLFxuICByZXNvbHZlQWN0aXZlU3RyZWFtRmluaXNoUHJvY2Vzc2luZyxcbiAgc2hvdWxkTWFya0NoYXRSZWFkQWZ0ZXJTdHJlYW1GaW5pc2gsXG4gIHNob3VsZERpc3BhdGNoRmlyc3RTZXNzaW9uUmVmZXRjaCxcbn0gZnJvbSAnLi91c2VDaGF0TWFuYWdlci5oZWxwZXJzJ1xuaW1wb3J0IHsgU2VuZE1lc3NhZ2VPcHRpb25zLCBVc2VDaGF0TWFuYWdlclByb3BzIH0gZnJvbSAnLi91c2VDaGF0TWFuYWdlci5pbnRlcmZhY2UnXG5pbXBvcnQgeyB1c2VVc2VyLCBDT1JVc2VyIH0gZnJvbSAnLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uL3VzZUV2ZW50J1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0TWVzc2FnZVVzZXIsIENoYXRIaXN0b3J5Um9sZSwgQXBwcm92YWxSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IENvbnRleHRNZW50aW9uLCBDb250ZXh0TWVzc2FnZSwgYnVpbGRDb250ZXh0TWVzc2FnZSB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheSB9IGZyb20gJy4uLy4uL3V0aWxzL2Zvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZSdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyB1c2VQcm9qZWN0cyB9IGZyb20gJy4uL3VzZVByb2plY3RzJ1xuaW1wb3J0IHsgdXNlVGFiVGFza0RlZmF1bHQgfSBmcm9tICcuLi91c2VUYWJUYXNrRGVmYXVsdCdcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5pbXBvcnQgeyBkaXNwYXRjaE1haWFIb3Vyc0NoYXJnZWQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvcGxhbm5lclN5bmNFdmVudHMnXG5pbXBvcnQgeyBmZXRjaEFnZW50RGV0YWlsIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCdcbmltcG9ydCB7XG4gIGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0LFxuICBnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlLFxuICBub3JtYWxpemVIaXRsVG9vbE5hbWUsXG4gIHRyYWNrTWFudWFsSGl0bEV2ZW50cyxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvaGl0bEFuYWx5dGljcydcbmltcG9ydCB7IHR5cGUgSGl0bEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgc2Vzc2lvblN0cmVhbWluZ1RleHQgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uU3RyZWFtaW5nVGV4dCdcbmltcG9ydCB7IHVzZVNlc3Npb25zU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy91c2VTZXNzaW9uc1N0b3JlJ1xuaW1wb3J0IHsgdXNlU2Vzc2lvbk1ldGEgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy91c2VTZXNzaW9uTWV0YSdcbmltcG9ydCB7IHNlc3Npb25TdHJlYW1NYW5hZ2VyLCBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvblN0cmVhbU1hbmFnZXInXG5pbXBvcnQgeyBhY3RpdmVWaWV3IH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvYWN0aXZlVmlldydcbmltcG9ydCB7IG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZCB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25Ob3RpZmljYXRpb25zJ1xuaW1wb3J0IHsgYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlLCBlbnN1cmVTZXNzaW9uSW5TaWRlYmFyIH0gZnJvbSAnLi4vLi4vc3RvcmUvY2hhdHNTaWRlYmFyT3B0aW1pc3RpYydcbmltcG9ydCB7IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQsIHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IGZpbmRVc2VyTWVzc2FnZUZvclJldHJ5LCBtZXNzYWdlc1dpdGhvdXRSZXRyaWVkVHVybiB9IGZyb20gJy4uLy4uL3V0aWxzL3JldHJ5Q29tcGxldGlvbidcbmltcG9ydCB0eXBlIHsgU3RyZWFtQ29udGV4dCB9IGZyb20gJy4uL3VzZU9yY2hlc3RyYXRvclN0cmVhbS91c2VPcmNoZXN0cmF0b3JTdHJlYW0uaW50ZXJmYWNlJ1xuaW1wb3J0IHsgZ2V0Q2hhdHNTdG9yZVN0YXRlLCB1c2VDaGF0c1N0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvdXNlQ2hhdHNTdG9yZSdcbmltcG9ydCB7IHJlYXNvbmluZ1N0b3JlIH0gZnJvbSAnLi4vdXNlUmVhc29uaW5nVHJhY2UnXG5pbXBvcnQgeyBtYXBSZWFzb25pbmdUcmFjZSB9IGZyb20gJy4uLy4uL3V0aWxzL3JlYXNvbmluZ01hcHBlcnMnXG5pbXBvcnQgdHlwZSB7IFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB9IGZyb20gJy4uLy4uL3R5cGVzL3JlYXNvbmluZydcblxuY29uc3QgdXNlU3RhYmxlQ2FsbGJhY2tzID0gKGF1dGhVc2VyOiBDT1JVc2VyKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gdXNlUmVmPENoYXRNZXNzYWdlVXNlcj4obWFwQXV0aFVzZXJUb0NoYXRNZXNzYWdlVXNlcihhdXRoVXNlcikpXG5cbiAgY29uc3QgbmV4dFVzZXIgPSBtYXBBdXRoVXNlclRvQ2hhdE1lc3NhZ2VVc2VyKGF1dGhVc2VyKVxuICBpZiAoXG4gICAgY3VycmVudFVzZXIuY3VycmVudC5pZCAhPT0gbmV4dFVzZXIuaWQgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50Lm5hbWUgIT09IG5leHRVc2VyLm5hbWUgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmF2YXRhciAhPT0gbmV4dFVzZXIuYXZhdGFyXG4gICkge1xuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQgPSBuZXh0VXNlclxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VXNlcjogY3VycmVudFVzZXIuY3VycmVudCxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdE1hbmFnZXIgPSAoe1xuICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQsXG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgb25FcnJvcixcbiAgYWdlbnRzID0gW10sXG59OiBVc2VDaGF0TWFuYWdlclByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHtcbiAgICBwcm9qZWN0LFxuICAgIHNldFByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHNldENsaWVudCxcbiAgICB0YXNrLFxuICAgIHNldFRhc2ssXG4gICAgYWdlbnQsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGlzQXV0b0FwcHJvdmVBY3RpdmUsXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBmZXRjaFByb2plY3RzIH0gPSB1c2VQcm9qZWN0cygpXG4gIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IHVzZVN0YWJsZUNhbGxiYWNrcyhhdXRoVXNlcilcbiAgY29uc3QgeyBnZXRUYWJUYXNrRGVmYXVsdCB9ID0gdXNlVGFiVGFza0RlZmF1bHQoKVxuXG4gIGNvbnN0IGN1cnJlbnRNZXNzYWdlSWQgPSB1c2VSZWYodXVpZHY0KCkpXG4gIGNvbnN0IGN1cnJlbnRVc2VyUXVlc3Rpb24gPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY3VycmVudENoYXRJZCA9IHVzZVJlZihpbml0aWFsQ2hhdElkIHx8IHV1aWR2NCgpKVxuICBjb25zdCBzZXRBY3RpdmVDaGF0SWQgPSB1c2VDaGF0c1N0b3JlKHN0YXRlID0+IHN0YXRlLnNldEFjdGl2ZUNoYXRJZClcbiAgY29uc3QgcmVwb3J0ZWRFdmVudCA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VbXT4oW10pXG4gIC8qKlxuICAgKiBHdWFyZGEgaW5mbyBkZWwgw7psdGltbyBhcHByb3ZhbCBtYW51YWwgKGN1YW5kbyBlbCB1c3VhcmlvIHRpcGVhIFwic2lcIi9cIm5vXCIgZW4gbHVnYXJcbiAgICogZGUgY2xpY2tlYXIgZWwgYm90w7NuKS4gRW4gbWFudWFsIGFwcHJvdmFsLCBgaGFuZGxlQXBwcm92YWxSZXF1aXJlZGAgcmV0b3JuYSBlYXJseVxuICAgKiBzaW4gYWdyZWdhciB1biBtZW5zYWplIGNvbiBgYXBwcm92YWxgLCBhc8OtIHF1ZSBsYSBsw7NnaWNhIGRlIHJlZmV0Y2ggZW4gYG9uU3RyZWFtRmluaXNoYFxuICAgKiBubyBsbyBkZXRlY3RhIHbDrWEgYHByZXZpb3VzTWVzc2FnZS5hcHByb3ZhbGAuIExvIGd1YXJkYW1vcyBhY8OhIHBhcmEgY29uc3VtaXJsbyBkZXNwdcOpcy5cbiAgICovXG4gIGNvbnN0IGxhc3RNYW51YWxBcHByb3ZhbFJlZiA9IHVzZVJlZjx7XG4gICAgdG9vbE5hbWU6IHN0cmluZ1xuICAgIHRvb2xBcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGxcbiAgfSB8IG51bGw+KG51bGwpXG4gIC8qKiBFdml0YSBkdXBsaWNhciBBSV9DSEFUX0hJVEwgLyBBSV9DSEFUX0hJVExfT1BUSU9OIGVuIHByZWFwcm9iYWNpb25lcyAobWFudWFsIG8gYXV0bykgcG9yIGxvdGUuICovXG4gIGNvbnN0IHRyYWNrZWRNYW51YWxIaXRsS2V5c1JlZiA9IHVzZVJlZjxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKVxuICAvKiogQ29udGV4dG8gZGVsIG1lbnNhamUgZGUgYXByb2JhY2nDs24gcHJldmlvIGFsIGVqZWN1dGFyIGNvbnRpbnVlLXRocmVhZC4gKi9cbiAgY29uc3QgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYgPSB1c2VSZWY8SGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsPihudWxsKVxuICAvKiogTWVuc2FqZXMgYSByZXN0YXVyYXIgc2kgYHJldHJ5X2NvbXBsZXRpb25gIGZhbGxhIGFudGVzIGRlIHBlcnNpc3RpciBlbCByZWVtcGxhem8uICovXG4gIGNvbnN0IHJldHJ5U25hcHNob3RSZWYgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VbXSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzUHJvY2Vzc2luZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgZmlyc3RUaW1lUmVmID0gdXNlUmVmKGZhbHNlKVxuICAvKiogSWQgZGVsIHBsYWNlaG9sZGVyIGRlbCBtZW5zYWplIGVuIHN0cmVhbWluZyBhY3Rpdm8gKHNpIGhheSkuICovXG4gIGNvbnN0IHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgLyoqXG4gICAqIENoYXQgYWwgcXVlIHBlcnRlbmVjZSBlbCBzdHJlYW0gYWN0dWFsbWVudGUgYWN0aXZvLiBTaSBjYW1iaWEgZWwgY2hhdFxuICAgKiBtaWVudHJhcyB1biBzdHJlYW0gZXN0w6EgZW4gdnVlbG8sIGRlc2NhcnRhbW9zIGxvcyB0b2tlbnMgcmVzaWR1YWxlc1xuICAgKiBxdWUgcHVlZGFuIGxsZWdhciBhbnRlcyBkZSBxdWUgZWwgYWJvcnQgc2UgY29tcGxldGUuXG4gICAqL1xuICBjb25zdCBhY3RpdmVTdHJlYW1DaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY2xlYXJTdHJlYW1VaVJlZiA9IHVzZVJlZjwoKSA9PiB2b2lkPigoKSA9PiB1bmRlZmluZWQpXG4gIGNvbnN0IFthY3RpdmVMb2FkaW5ncywgc2V0QWN0aXZlTG9hZGluZ3NdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pXG4gIC8qKlxuICAgKiBTZXNpw7NuIGFjdHVhbG1lbnRlIHZpc2libGUuIFNlIG1hbnRpZW5lIGVuIHN0YXRlIChubyBzb2xvIGVuIHJlZikgcGFyYSBxdWVcbiAgICogZWwgbW90b3IgZGUgc3RyZWFtaW5nIHB1ZWRhIGxlZXIgcmVhY3RpdmFtZW50ZSBsb3MgZmxhZ3MgZGUgRVNUQSBzZXNpw7NuXG4gICAqIGRlc2RlIGVsIHN0b3JlLCBtaWVudHJhcyBvdHJhcyBzaWd1ZW4gZ2VuZXJhbmRvIGVuIGJhY2tncm91bmQuXG4gICAqL1xuICBjb25zdCBbYWN0aXZlU2Vzc2lvbklkLCBzZXRBY3RpdmVTZXNzaW9uSWRdID0gdXNlU3RhdGU8c3RyaW5nPihjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gIC8qKiBUcnVlIG1pZW50cmFzIGVzdGEgaW5zdGFuY2lhIGVzdMOpIG1vbnRhZGEgKGV2aXRhIHNldFN0YXRlIHRyYXMgZGVzbW9udGFyKS4gKi9cbiAgY29uc3QgaXNNb3VudGVkUmVmID0gdXNlUmVmKHRydWUpXG4gIC8qKiBFdml0YSByZWNvbmNpbGlhciBkb3MgdmVjZXMgZWwgbWlzbW8gZXN0YWRvIHRlcm1pbmFsIGRlIHVuYSBzZXNpw7NuLiAqL1xuICBjb25zdCBsYXN0SGFuZGxlZFRlcm1pbmFsUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgaXNXZWJTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNXZWJTZWFyY2hBY3RpdmUpXG4gIGNvbnN0IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc0RlZXBTZWFyY2hBY3RpdmUpXG4gIGNvbnN0IGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYgPSB1c2VSZWYoaXNBdXRvQXBwcm92ZUFjdGl2ZSlcbiAgLyoqIEV2aXRhIGNsb3N1cmVzIG9ic29sZXRhcyBjdWFuZG8gZWwgZm9vdGVyIGNvbnNlcnZhIHNlbmRNZXNzYWdlIGVudHJlIHJlbmRlcnMuICovXG4gIGNvbnN0IGNvbnRleHRSZWYgPSB1c2VSZWYoeyBjaGlwc1Byb2plY3QsIHByb2plY3QsIGNsaWVudCwgdGFzayB9KVxuICBjb250ZXh0UmVmLmN1cnJlbnQgPSB7IGNoaXBzUHJvamVjdCwgcHJvamVjdCwgY2xpZW50LCB0YXNrIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc1dlYlNlYXJjaEFjdGl2ZVxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNEZWVwU2VhcmNoQWN0aXZlXG4gICAgaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZi5jdXJyZW50ID0gaXNBdXRvQXBwcm92ZUFjdGl2ZVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZSwgaXNBdXRvQXBwcm92ZUFjdGl2ZV0pXG5cbiAgY29uc3Qge1xuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBtZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgbG9hZE1lc3NhZ2VzLFxuICAgIGFkZE1lc3NhZ2UsXG4gICAgcmVtb3ZlTWVzc2FnZSxcbiAgICByZXBsYWNlTWVzc2FnZXMsXG4gICAgaGFuZGxlU2Nyb2xsLFxuICB9ID0gdXNlQ2hhdE1lc3NhZ2VzKHtcbiAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgIGN1cnJlbnRVc2VyLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBvbkVycm9yLFxuICAgIGFnZW50cyxcbiAgfSlcblxuICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNcblxuICAvKipcbiAgICogRXNjcmliZSB1biBtZW5zYWplIGVuIGVsIHN0b3JlIHBvci1zZXNpw7NuIHksIHNpIGxhIHNlc2nDs24gZXMgbGEgYWN0aXZhLFxuICAgKiB0YW1iacOpbiBlbiBsYSB2aXN0YSBsb2NhbC4gUGVybWl0ZSBxdWUgc2VzaW9uZXMgZW4gYmFja2dyb3VuZCBhY3VtdWxlbiBzdVxuICAgKiByZXN1bHRhZG8gc2luIHBpc2FyIGVsIGNoYXQgcXVlIGVsIHVzdWFyaW8gZXN0w6EgbWlyYW5kby5cbiAgICovXG4gIGNvbnN0IGNvbW1pdFRvU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzZXNzaW9uSWQ6IHN0cmluZywgbWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHtcbiAgICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5hZGRNZXNzYWdlKHNlc3Npb25JZCwgbWVzc2FnZSlcbiAgICAgIGlmIChpc01vdW50ZWRSZWYuY3VycmVudCAmJiBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZCkpIHtcbiAgICAgICAgYWRkTWVzc2FnZShtZXNzYWdlKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2VdXG4gIClcblxuICBjb25zdCBkcm9wRnJvbVNlc3Npb24gPSB1c2VDYWxsYmFjayhcbiAgICAoc2Vzc2lvbklkOiBzdHJpbmcsIG1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgICB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKCkucmVtb3ZlTWVzc2FnZShzZXNzaW9uSWQsIG1lc3NhZ2VJZClcbiAgICAgIGlmIChpc01vdW50ZWRSZWYuY3VycmVudCAmJiBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZCkpIHtcbiAgICAgICAgcmVtb3ZlTWVzc2FnZShtZXNzYWdlSWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBbcmVtb3ZlTWVzc2FnZV1cbiAgKVxuXG4gIC8qKiBMaW1waWEgZWwgdGFpbCBlbiB2dWVsbyBkZSB1bmEgc2VzacOzbiAodHJhcyB0ZXJtaW5hcjsgZWwgYmFja2VuZCBwYXNhIGEgc2VyIGZ1ZW50ZSkuICovXG4gIGNvbnN0IGNsZWFyU2Vzc2lvblRhaWwgPSB1c2VDYWxsYmFjaygoc2Vzc2lvbklkOiBzdHJpbmcpID0+IHtcbiAgICB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKCkuc2V0TWVzc2FnZXMoc2Vzc2lvbklkLCBbXSlcbiAgfSwgW10pXG5cbiAgLy8gUmVnaXN0cmFyIGxhIHNlc2nDs24gdmlzaWJsZSBlbiBlbCB0cmFja2VyIGdsb2JhbCBwYXJhIHF1ZSBsb3MgY2FsbGJhY2tzIGRlbFxuICAvLyBtb3RvciAocXVlIHB1ZWRlbiBwZXJ0ZW5lY2VyIGEgdW5hIGluc3RhbmNpYSB5YSBkZXNtb250YWRhKSBzZXBhbiBjdcOhbCBlcyBsYVxuICAvLyBzZXNpw7NuIGFjdGl2YSBhY3R1YWwuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWN0aXZlVmlldy5zZXQoYWN0aXZlU2Vzc2lvbklkKVxuICB9LCBbYWN0aXZlU2Vzc2lvbklkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzTW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpc01vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBpZiAoYWN0aXZlVmlldy5pcyhjdXJyZW50Q2hhdElkLmN1cnJlbnQpKSB7XG4gICAgICAgIGFjdGl2ZVZpZXcuc2V0KG51bGwpXG4gICAgICB9XG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBSZWNvbmNpbGlhY2nDs246IHNpIGxhIHNlc2nDs24gYWN0aXZhIHRlcm1pbmEgKGNvbXBsZXRlL2Vycm9yKSBwZXJvIGVsIHN0b3JlXG4gIC8vIHBvci1zZXNpw7NuIHRvZGF2w61hIHRpZW5lIHVuIHBsYWNlaG9sZGVyIGRlIHN0cmVhbWluZywgcmVmcmVzY2Ftb3MgZGVzZGVcbiAgLy8gZWwgYmFja2VuZC4gVXNhbW9zIGVsIHN0b3JlIChubyBtZXNzYWdlc1JlZik6IGhhbmRsZVN0cmVhbUZpbmlzaCBsaW1waWEgZWxcbiAgLy8gcGxhY2Vob2xkZXIgYWjDrSBkZSBmb3JtYSBzw61uY3JvbmE7IG1lc3NhZ2VzUmVmIHB1ZWRlIHF1ZWRhciBzdGFsZSB1biByZW5kZXJcbiAgLy8gcG9ycXVlIHNldFN0YXR1cyAoWnVzdGFuZCkgeSByZW1vdmVNZXNzYWdlIChSZWFjdCkgbm8gYmF0Y2hhbiBqdW50b3MuXG4gIC8vIGBjYW5jZWxsZWRgIHF1ZWRhIGFmdWVyYTogZWwgc3RvcCB5YSByZWNvbmNpbGlhIGxvY2FsIChwYXJjaWFsICsgYnVyYnVqYSBkZVxuICAvLyBjYW5jZWxhZG8pIHkgcmVjYXJnYXIgYWPDoSBtb3N0cmFiYSBsYSBwYW50YWxsYSBkZSBjYXJnYSBkZWwgY2hhdCBlbnRlcm8uXG4gIGNvbnN0IGFjdGl2ZVNlc3Npb25NZXRhID0gdXNlU2Vzc2lvbk1ldGEoYWN0aXZlU2Vzc2lvbklkKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHN0YXR1cyA9IGFjdGl2ZVNlc3Npb25NZXRhPy5zdGF0dXNcbiAgICBpZiAoIXN0YXR1cykgcmV0dXJuXG4gICAgY29uc3Qga2V5ID0gYnVpbGRUZXJtaW5hbFNlc3Npb25SZWNvbmNpbGlhdGlvbktleShhY3RpdmVTZXNzaW9uSWQsIHN0YXR1cywgYWN0aXZlU2Vzc2lvbk1ldGE/LmZpbmlzaGVkQXQpXG4gICAgaWYgKGxhc3RIYW5kbGVkVGVybWluYWxSZWYuY3VycmVudCA9PT0ga2V5KSByZXR1cm5cbiAgICBsYXN0SGFuZGxlZFRlcm1pbmFsUmVmLmN1cnJlbnQgPSBrZXlcblxuICAgIGNvbnN0IHRhaWwgPSB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKCkuZ2V0TWVzc2FnZXMoYWN0aXZlU2Vzc2lvbklkKVxuICAgIGlmIChzaG91bGRGb3JjZVJlbG9hZE1lc3NhZ2VzT25UZXJtaW5hbFNlc3Npb24oc3RhdHVzLCB0YWlsLCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKSkge1xuICAgICAgbG9hZE1lc3NhZ2VzKHsgZm9yY2U6IHRydWUgfSlcbiAgICB9XG4gIH0sIFthY3RpdmVTZXNzaW9uTWV0YT8uc3RhdHVzLCBhY3RpdmVTZXNzaW9uTWV0YT8uZmluaXNoZWRBdCwgYWN0aXZlU2Vzc2lvbklkLCBsb2FkTWVzc2FnZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtbG9hZGluZy1tZXNzYWdlcy1jaGFuZ2VkJywge1xuICAgICAgZGV0YWlsOiB7IGxvYWRpbmdNZXNzYWdlcyB9LFxuICAgIH0pXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlc10pXG5cbiAgY29uc3QgcHJldmlvdXNJbml0aWFsQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+KGluaXRpYWxDaGF0SWQpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwcmV2aW91c0luaXRpYWxDaGF0SWQgPSBwcmV2aW91c0luaXRpYWxDaGF0SWRSZWYuY3VycmVudFxuICAgIHByZXZpb3VzSW5pdGlhbENoYXRJZFJlZi5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuXG4gICAgLy8gQ2hhdCBudWV2byAvIGhvbWU6IGluaXRpYWxDaGF0SWQgcGFzYSBhIG51bGwsIGFzw60gcXVlIGxhIHJhbWEgZGUgYWJham8gbm9cbiAgICAvLyBhcGxpY2EuIEhheSBxdWUgcm90YXIgYSB1bmEgc2VzacOzbiBudWV2YSBpZ3VhbDogc2kgc2VndWltb3MgYXB1bnRhbmRvIGEgbGFcbiAgICAvLyBhbnRlcmlvciwgYGFjdGl2ZVZpZXdgIGxhIHNpZ3VlIG1hcmNhbmRvIGNvbW8gYWN0aXZhIHkgY3VhbmRvIHRlcm1pbmEgbm8gc2VcbiAgICAvLyBub3RpZmljYSAoeSBzdSByZXNwdWVzdGEgc2UgY29tbWl0ZWEgc29icmUgbGEgdmlzdGEgbnVldmEpLiBFbCDDoXJib2wgbm9cbiAgICAvLyByZW1vbnRhIGVuIGVzdGUgZmx1am8gKG5vIGhheSBga2V5YCkgeSBuYWRpZSBjb25zdW1lIGByZXNldENoYXRgLlxuICAgIGlmIChzaG91bGRSb3RhdGVTZXNzaW9uRm9yTmV3SG9tZShpbml0aWFsQ2hhdElkLCBwcmV2aW91c0luaXRpYWxDaGF0SWQpKSB7XG4gICAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgc2V0QWN0aXZlU2Vzc2lvbklkKGN1cnJlbnRDaGF0SWQuY3VycmVudClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkU3dpdGNoVG9Jbml0aWFsQ2hhdFNlc3Npb24oaW5pdGlhbENoYXRJZCwgY3VycmVudENoYXRJZC5jdXJyZW50KSAmJiBpbml0aWFsQ2hhdElkKSB7XG4gICAgICAvLyBOTyBhYm9ydGFtb3MgZWwgc3RyZWFtIGFudGVyaW9yOiBwdWVkZSBzZWd1aXIgZ2VuZXJhbmRvIGVuIGJhY2tncm91bmQuXG4gICAgICAvLyBTb2xvIGNhbWJpYW1vcyBkZSBzZXNpw7NuIGFjdGl2YTsgZWwgbW90b3IgcnV0ZWEgY2FkYSBzdHJlYW0gcG9yIHN1XG4gICAgICAvLyBzZXNzaW9uSWQsIGFzw60gcXVlIGxvcyB0b2tlbnMgZGUgbGEgc2VzacOzbiBwcmV2aWEgc2lndWVuIGFwbGljw6FuZG9zZSBhXG4gICAgICAvLyBFU0Egc2VzacOzbiAoc3RvcmUpLCBubyBhIGxhIG51ZXZhLlxuXG4gICAgICAvLyBMaW1waWFyIGNvbnRleHRvIGdsb2JhbCBhbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs25cbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgIHNldFRhc2sobnVsbClcblxuICAgICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuICAgICAgc2V0QWN0aXZlU2Vzc2lvbklkKGluaXRpYWxDaGF0SWQpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIC8vIGlzUHJvY2Vzc2luZ1JlZiByZWZsZWphIHNpIGxhIHNlc2nDs24gQUNUSVZBIGVzdMOhIG9jdXBhZGEuIFNpIGxhIHNlc2nDs25cbiAgICAgIC8vIGEgbGEgcXVlIGVudHJhbW9zIHNpZ3VlIGdlbmVyYW5kbyBlbiBiYWNrZ3JvdW5kLCBxdWVkYSBibG9xdWVhZGE7IHNpIG5vLFxuICAgICAgLy8gc2UgaGFiaWxpdGEgZWwgZW52w61vIGF1bnF1ZSBvdHJhcyBzZXNpb25lcyBzaWdhbiBnZW5lcmFuZG8uXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKGluaXRpYWxDaGF0SWQpXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgLy8gbG9hZE1lc3NhZ2VzIGxvIGRpc3BhcmEgdXNlQ2hhdE1lc3NhZ2VzIGFsIGNhbWJpYXIgY2hhdElkIChjb24gY2FjaGUgZW4gbWVtb3JpYSkuXG4gICAgfVxuICB9LCBbaW5pdGlhbENoYXRJZCwgcHJvamVjdCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRDaGlwc1Byb2plY3QsIHNldFRhc2tdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0QWN0aXZlQ2hhdElkKGluaXRpYWxDaGF0SWQgfHwgbnVsbClcbiAgfSwgW2luaXRpYWxDaGF0SWQsIHNldEFjdGl2ZUNoYXRJZF0pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRXJyb3IgPSB1c2VDYWxsYmFjayhcbiAgICAoY3R4OiBTdHJlYW1Db250ZXh0LCBlcnJvck1lc3NhZ2U/OiBzdHJpbmcsIGVycm9yUmF3TWVzc2FnZT86IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIG1lc3NhZ2VJZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKVxuXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuXG4gICAgICBjb25zdCByZXRyeVNuYXBzaG90ID0gcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50XG4gICAgICBpZiAocmVzb2x2ZVN0cmVhbUVycm9ySGFuZGxpbmdNb2RlKEJvb2xlYW4ocmV0cnlTbmFwc2hvdCkpID09PSAncmV0cnktcmVzdG9yZScgJiYgcmV0cnlTbmFwc2hvdCkge1xuICAgICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSByZXRyeVNuYXBzaG90XG4gICAgICAgIHJlcGxhY2VNZXNzYWdlcyhyZXRyeVNuYXBzaG90KVxuICAgICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQoKVxuICAgICAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnZXJyb3InLCBtZXNzYWdlOiB0KCdjaGF0LmVycm9yJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50KClcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IG1lc3NhZ2VLZXksIHRva2Vuc1VzZWQsIHNob3dSZXRyeSB9ID0gcmVzb2x2ZVN0cmVhbUVycm9yTWVzc2FnZUtleShlcnJvck1lc3NhZ2UsIGVycm9yUmF3TWVzc2FnZSlcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSByZXNvbHZlU3RyZWFtRXJyb3JVc2VyTWVzc2FnZShtZXNzYWdlS2V5LCB0LCB0b2tlbnNVc2VkKVxuXG4gICAgICBjb21taXRUb1Nlc3Npb24oXG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgYnVpbGRTdHJlYW1FcnJvckFzc2lzdGFudE1lc3NhZ2Uoe1xuICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIHNob3dSZXRyeSxcbiAgICAgICAgICByZXRyeUxhYmVsOiB0KCdjaGF0LnJldHJ5JyksXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICBjbGVhclNlc3Npb25UYWlsKHNlc3Npb25JZClcblxuICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5tYXJrQ2hhdEFzVW5yZWFkKHNlc3Npb25JZClcbiAgICAgICAgbm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgIH1cbiAgICB9LFxuICAgIFtjb21taXRUb1Nlc3Npb24sIGRyb3BGcm9tU2Vzc2lvbiwgY2xlYXJTZXNzaW9uVGFpbCwgcmVwbGFjZU1lc3NhZ2VzLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtVXBkYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGN0eDogU3RyZWFtQ29udGV4dCwgY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG5cbiAgICAgIC8vIEFzZWd1cmFtb3MgZWwgcGxhY2Vob2xkZXIgdW5hIMO6bmljYSB2ZXogcG9yIHN0cmVhbSwgdGFudG8gZW4gZWwgc3RvcmVcbiAgICAgIC8vIGRlIGxhIHNlc2nDs24gY29tbyBlbiBsYSB2aXN0YSBzaSBlcyBsYSBhY3RpdmEuIEVsIHRleHRvIGVuIHZpdm8gdmlhamFcbiAgICAgIC8vIHBvciBzZXNzaW9uU3RyZWFtaW5nVGV4dCAoZXh0ZXJubyksIHNpbiByZS1yZW5kZXIgZGVsIMOhcmJvbCBjb21wbGV0by5cbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyRXhpc3RzID0gdXNlU2Vzc2lvbnNTdG9yZVxuICAgICAgICAuZ2V0U3RhdGUoKVxuICAgICAgICAuZ2V0TWVzc2FnZXMoc2Vzc2lvbklkKVxuICAgICAgICAuc29tZShtc2cgPT4gbXNnLmlkID09PSBwbGFjZWhvbGRlcklkKVxuXG4gICAgICBpZiAoIXBsYWNlaG9sZGVyRXhpc3RzKSB7XG4gICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcbiAgICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICAgIGlkOiBwbGFjZWhvbGRlcklkLFxuICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKSkge1xuICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBwbGFjZWhvbGRlcklkXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gc2Vzc2lvbklkXG4gICAgICB9XG5cbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnNldFRleHQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCBjb250ZW50KVxuICAgIH0sXG4gICAgW2NvbW1pdFRvU2Vzc2lvbl1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbUZpbmlzaCA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIGN0eDogU3RyZWFtQ29udGV4dCxcbiAgICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICAgIHNvdXJjZXM6IGFueSxcbiAgICAgIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLFxuICAgICAgcmF3QXR0YWNobWVudHM/OiBhbnlbXSB8IG51bGwsXG4gICAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbCxcbiAgICAgIGNvbXBsZXRlZEFnZW50SWQ/OiBzdHJpbmcgfCBudWxsLFxuICAgICAgLyoqIFBvc2ljaW9uYWw6IG1hc3RlciBubyBsbyBjb25zdW1lLCBwZXJvIGByZWFzb25pbmdgIHZpZW5lIGRlc3B1w6lzLiAqL1xuICAgICAgX3Jlc29sdmVkQ29udGV4dD86IGFueSxcbiAgICAgIHJlYXNvbmluZz86IFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB8IG51bGxcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkIH0gPSBjdHhcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBwbGFjZWhvbGRlcklkXG4gICAgICAvLyBFbCBwbGFjZWhvbGRlciBzYWxlIGRlbCBzdG9yZSBwb3Itc2VzacOzbiB5YTogZWwgZWZlY3RvIGRlIHJlY29uY2lsaWFjacOzblxuICAgICAgLy8gbG8gdXNhIHBhcmEgZGV0ZWN0YXIgcmVzcHVlc3RhcyBodcOpcmZhbmFzIHkgZGUgYWPDoSBhbCBjb21taXQgcHVlZGUgaGFiZXJcbiAgICAgIC8vIHVuIGF3YWl0LiBMYSB2aXN0YSBsb2NhbCBsbyBzdWVsdGEgbcOhcyBhYmFqbywganVudG8gYWwgY29tbWl0LlxuICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLnJlbW92ZU1lc3NhZ2Uoc2Vzc2lvbklkLCB0ZW1wTWVzc2FnZUlkKVxuICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyhyYXdBdHRhY2htZW50cylcblxuICAgICAgLy8gRWwgdHJhY2UgYWN1bXVsYWRvIGVuIHZpdm8gZXN0w6Ega2V5ZWQgcG9yIGVsIHBsYWNlaG9sZGVyOyBsbyBtb3ZlbW9zIGFsXG4gICAgICAvLyBpZCBkZWZpbml0aXZvIHBhcmEgcXVlIGVsIGJsb3F1ZSBkZSByYXpvbmFtaWVudG8gc29icmV2aXZhIGFsIHN3YXAuXG4gICAgICBjb25zdCBmaW5hbE1lc3NhZ2VJZCA9IHJlc29sdmVTdHJlYW1GaW5pc2hGaW5hbE1lc3NhZ2VJZChtZW1vcnlTZXNzaW9uSWQpXG4gICAgICAvLyBQcmVmZXJpciBlbCBzbmFwc2hvdCBlbiB2aXZvIChuYXJyYWNpw7NuIGFuY2xhZGEgYWwgaW5pY2lvKSBzb2JyZSBlbFxuICAgICAgLy8gYGNvbXBsZXRlYCBkZWwgYmFjaywgcXVlIHN1ZWxlIG1hbmRhciBlc2EgbmFycmFjacOzbiBhbCBmaW5hbC5cbiAgICAgIGNvbnN0IGNvbXBhY3Rpb24gPSBjb21wYWN0aW9uRm9yKHRlbXBNZXNzYWdlSWQsIHJlYXNvbmluZylcbiAgICAgIGNvbnN0IGZpbmFsVHJhY2UgPSByZWFzb25pbmdUcmFjZUZvcih0ZW1wTWVzc2FnZUlkKSA/PyBtYXBSZWFzb25pbmdUcmFjZShyZWFzb25pbmcpXG4gICAgICByZWFzb25pbmdTdG9yZS5yZW5hbWUodGVtcE1lc3NhZ2VJZCwgZmluYWxNZXNzYWdlSWQpXG5cbiAgICAgIC8vIFNlc2nDs24gZW4gYmFja2dyb3VuZDogY2VycmFtb3MgbGVhbi4gRWwgYmFja2VuZCB5YSBwZXJzaXN0acOzIGxhXG4gICAgICAvLyByZXNwdWVzdGEsIGFzw60gcXVlIGFsIHZvbHZlciBhIGxhIHNlc2nDs24gc2UgY2FyZ2EgZGVzZGUgYWjDrS4gQXZpc2Ftb3NcbiAgICAgIC8vIHF1ZSB0ZXJtaW7DsyAodW5yZWFkICsgZXZlbnRvIHBhcmEgdG9hc3Qvc29uaWRvKS5cbiAgICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgICAgY29tbWl0VG9TZXNzaW9uKFxuICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICBidWlsZFN0cmVhbUZpbmlzaEFzc2lzdGFudE1lc3NhZ2Uoe1xuICAgICAgICAgICAgZmluYWxNZXNzYWdlSWQsXG4gICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICByZWFzb25pbmc6IGZpbmFsVHJhY2UsXG4gICAgICAgICAgICBjb21wYWN0aW9uLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgY2xlYXJTZXNzaW9uVGFpbChzZXNzaW9uSWQpXG4gICAgICAgIGdldENoYXRzU3RvcmVTdGF0ZSgpLm1hcmtDaGF0QXNVbnJlYWQoc2Vzc2lvbklkKVxuICAgICAgICBub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQoc2Vzc2lvbklkLCAnY29tcGxldGUnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICBjb25zdCB0YXNrVXJsUmVnZXggPSBuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4sICdnJylcbiAgICAgIGNvbnN0IG1hbnVhbEFwcHJvdmFsRm9yQW5hbHl0aWNzID0gbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IG1hbnVhbEFwcHJvdmFsID0gbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnRcbiAgICAgIGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbnRlbnRUb0FkZCxcbiAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgICAgICAgZWRpdEFnZW50Rm9sbG93VXAsXG4gICAgICAgIGhvdXJzQ2hhcmdlVG9vbHMsXG4gICAgICAgIGFmZmVjdGVkVGFza0lkcyxcbiAgICAgICAgbWFudWFsV2FzVGFza0VkaXQsXG4gICAgICAgIG1hbnVhbFdhc1Rhc2tEZWxldGUsXG4gICAgICAgIHdhc1Rhc2tFZGl0LFxuICAgICAgICB3YXNUYXNrRGVsZXRlLFxuICAgICAgICB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkLFxuICAgICAgICBwZW5kaW5nQWN0aW9ucyxcbiAgICAgIH0gPSBhd2FpdCByZXNvbHZlQWN0aXZlU3RyZWFtRmluaXNoUHJvY2Vzc2luZyh7XG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlc1JlZi5jdXJyZW50LFxuICAgICAgICB0ZW1wTWVzc2FnZUlkLFxuICAgICAgICB0YXNrVXJsUmVnZXgsXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdD8uaWQsXG4gICAgICAgIHBhdGhuYW1lOiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgIGdldFRhYlRhc2tEZWZhdWx0LFxuICAgICAgICBtdWx0aUFnZW50c0FjY2VzczogQm9vbGVhbih3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyksXG4gICAgICAgIGNvbXBsZXRlZEFnZW50SWQsXG4gICAgICAgIG1hbnVhbEFwcHJvdmFsLFxuICAgICAgICBhcHBseURhc2hib2FyZE11dGF0aW9uOiAobXV0YXRpb24sIHRhc2tJZHMpID0+IHtcbiAgICAgICAgICBhcHBseVByb2plY3REYXNoYm9hcmRNdXRhdGlvbihtdXRhdGlvbiwgdGFza0lkcywgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQpXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICByZXNvbHZlQ3JlYXRlQWdlbnRIaXRsQW5hbHl0aWNzRXZlbnRzKHtcbiAgICAgICAgd2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCxcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMsXG4gICAgICAgIG1hbnVhbEFwcHJvdmFsVG9vbE5hbWU6IG1hbnVhbEFwcHJvdmFsRm9yQW5hbHl0aWNzPy50b29sTmFtZSxcbiAgICAgICAgY29tcGxldGVkQWdlbnRJZCxcbiAgICAgICAgYWdlbnRUeXBlOiBnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlKGFnZW50KSxcbiAgICAgICAgbm9ybWFsaXplVG9vbE5hbWU6IG5vcm1hbGl6ZUhpdGxUb29sTmFtZSxcbiAgICAgICAgYnVpbGRBY3Rpb25UeXBlTGlzdDogYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QsXG4gICAgICB9KS5mb3JFYWNoKHBheWxvYWQgPT4ge1xuICAgICAgICBldmVudChFVkVOVFMuYWlDaGF0SGl0bE9wdGlvbiwgcGF5bG9hZClcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IG9wZW5UYXNrUGFuZWxJZCA9IHdpbmRvdy50YXNrUGFuZWw/LnRhc2tJZFxuXG4gICAgICBpZiAoaG91cnNDaGFyZ2VUb29scy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRpc3BhdGNoTWFpYUhvdXJzQ2hhcmdlZCh7XG4gICAgICAgICAgc291cmNlOiAnbWFpYScsXG4gICAgICAgICAgdG9vbHM6IGhvdXJzQ2hhcmdlVG9vbHMsXG4gICAgICAgICAgc2Vzc2lvbklkOiBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgc2hvdWxkUmVmZXRjaE9wZW5UYXNrUGFuZWwoXG4gICAgICAgICAgb3BlblRhc2tQYW5lbElkLFxuICAgICAgICAgIHsgd2FzVGFza0VkaXQsIHdhc1Rhc2tEZWxldGUgfSxcbiAgICAgICAgICB7IG1hbnVhbFdhc1Rhc2tFZGl0LCBtYW51YWxXYXNUYXNrRGVsZXRlIH0sXG4gICAgICAgICAgYWZmZWN0ZWRUYXNrSWRzXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB3aW5kb3cudGFza1BhbmVsPy5yZWZldGNoVGFzaz8uKClcbiAgICAgIH1cblxuICAgICAgLy8gU3dhcCBwbGFjZWhvbGRlciDihpIgbWVuc2FqZSBmaW5hbC4gVmEgZW4gYGZsdXNoU3luY2AgcG9ycXVlIGVsIG1vdG9yIHlhXG4gICAgICAvLyBkZWrDsyBlbmNvbGFkYXMgbGFzIGVzY3JpdHVyYXMgZGUgZmluIGRlIHN0cmVhbSAoaXNXcml0aW5nLCBhY3Rpdml0eSxcbiAgICAgIC8vIHN0YXR1cyksIHkgZXNhcyB2aWFqYW4gZW4gU3luY0xhbmUgcG9yIHNlciBkZSB1biBzdG9yZSBleHRlcm5vIG1pZW50cmFzXG4gICAgICAvLyBxdWUgZXN0b3Mgc2V0U3RhdGUgdmlhamFuIGVuIERlZmF1bHRMYW5lLiBTaW4gZm9yemFybG8sIFJlYWN0IHBpbnRhXG4gICAgICAvLyBwcmltZXJvIGVsIHBsYWNlaG9sZGVyIHlhIHNpbiBpbmRpY2Fkb3IgZGUgYWN0aXZpZGFkICh0dXJubyA0MXB4IG3DoXNcbiAgICAgIC8vIGJham8pIHkgcmVjacOpbiB+MjVtcyBkZXNwdcOpcyBlbCBtZW5zYWplIGRlZmluaXRpdm86IGVzZSBzYWx0byBkZSBpZGEgeVxuICAgICAgLy8gdnVlbHRhIGVyYSBlbCBmbGlja2VyIGRlIGZpbiBkZSBzdHJlYW0uIENvbiBlbCBmbHVzaCwgdG9kbyBlbCBmaW4gZGVcbiAgICAgIC8vIHN0cmVhbSBlbnRyYSBlbiB1biDDum5pY28gY29tbWl0LlxuICAgICAgZmx1c2hTeW5jKCgpID0+IHtcbiAgICAgICAgZHJvcEZyb21TZXNzaW9uKHNlc3Npb25JZCwgdGVtcE1lc3NhZ2VJZClcbiAgICAgICAgY29tbWl0VG9TZXNzaW9uKFxuICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICBidWlsZFN0cmVhbUZpbmlzaEFzc2lzdGFudE1lc3NhZ2Uoe1xuICAgICAgICAgICAgZmluYWxNZXNzYWdlSWQsXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50VG9BZGQsXG4gICAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgICAgYXR0YWNobWVudHMsXG4gICAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgICAgICBzdWdnZXN0aW9ucyxcbiAgICAgICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAsXG4gICAgICAgICAgICByZWFzb25pbmc6IGZpbmFsVHJhY2UsXG4gICAgICAgICAgICBjb21wYWN0aW9uLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgICBjbGVhclNlc3Npb25UYWlsKHNlc3Npb25JZClcblxuICAgICAgaWYgKGNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChjcmVhdGVBZ2VudEZvbGxvd1VwLmFnZW50SWQpXG4gICAgICAgICAgLnRoZW4oY2hhdEFnZW50ID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gYcOxYWRpciBlbCBhZ2VudGUgcmVjacOpbiBjcmVhZG8gYWwgbGlzdGFkbycsIGVycilcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoZWRpdEFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChlZGl0QWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VDaGF0TWFuYWdlcl0gTm8gc2UgcHVkbyByZWZyZXNjYXIgZWwgYWdlbnRlIGVkaXRhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICBjb25zdCB7IGlzQ2hhdFZpZXdWaXNpYmxlLCBtYXJrQ2hhdEFzUmVhZCB9ID0gZ2V0Q2hhdHNTdG9yZVN0YXRlKClcbiAgICAgIGlmIChzaG91bGRNYXJrQ2hhdFJlYWRBZnRlclN0cmVhbUZpbmlzaChpc0FjdGl2ZSwgaXNDaGF0Vmlld1Zpc2libGUpKSB7XG4gICAgICAgIGF3YWl0IG1hcmtDaGF0QXNSZWFkKHNlc3Npb25JZCwgeyBmb3JjZTogdHJ1ZSB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkRGlzcGF0Y2hGaXJzdFNlc3Npb25SZWZldGNoKGZpcnN0VGltZVJlZi5jdXJyZW50KSkge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJykpXG4gICAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuICAgIFtjb21taXRUb1Nlc3Npb24sIGRyb3BGcm9tU2Vzc2lvbiwgY2xlYXJTZXNzaW9uVGFpbCwgcHJvamVjdCwgZ2V0VGFiVGFza0RlZmF1bHQsIGV2ZW50LCBhZ2VudF1cbiAgKVxuXG4gIC8vIGBwYXJ0aWFsVGV4dGAgbG8gcmVzY2F0YSBgc3RvcFN0cmVhbWAgYW50ZXMgZGUgbGltcGlhciBlbCBzdG9yZSBleHRlcm5vOiBlbCB0ZXh0byBlbiB2aXZvXG4gIC8vIG5vIHZpdmUgZW4gYG1lc3NhZ2VzYCwgYXPDrSBxdWUgc2luIGVzdG8gbGEgcmVzcHVlc3RhIGEgbWVkaWFzIGRlc2FwYXJlY2UgZGUgcGFudGFsbGEgYXVucXVlXG4gIC8vIGVsIGJhY2tlbmQgc8OtIGxhIGhheWEgcGVyc2lzdGlkby5cbiAgY29uc3QgaGFuZGxlU3RyZWFtU3RvcCA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXJ0aWFsVGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICAvLyBFbCBzdG9wIHNpZW1wcmUgYXBsaWNhIGEgbGEgc2VzacOzbiBhY3RpdmEgKGJvdMOzbiBkZWwgaW5wdXQgdmlzaWJsZSkuXG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSBjdXJyZW50Q2hhdElkLmN1cnJlbnRcbiAgICAgIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCgpXG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gc3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50KVxuICAgICAgY29uc3QgeyBmaW5hbE1lc3NhZ2VJZCwgY2FuY2VsbGVkTWVzc2FnZUlkIH0gPSByZXNvbHZlU3RyZWFtU3RvcE1lc3NhZ2VJZHMoY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50KVxuICAgICAgY29uc3Qgc3RvcHBlZFRyYWNlID0gcmVhc29uaW5nVHJhY2VGb3IodGVtcE1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGNvbXBhY3Rpb24gPSBjb21wYWN0aW9uRm9yKHRlbXBNZXNzYWdlSWQpXG5cbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgZHJvcEZyb21TZXNzaW9uKHNlc3Npb25JZCwgdGVtcE1lc3NhZ2VJZClcblxuICAgICAgaWYgKHNob3VsZFByZXNlcnZlUmVhc29uaW5nT25TdHJlYW1TdG9wKHN0b3BwZWRUcmFjZSwgY29tcGFjdGlvbikpIHtcbiAgICAgICAgcmVhc29uaW5nU3RvcmUuZmluaXNoKHRlbXBNZXNzYWdlSWQsIG51bGwpXG4gICAgICAgIHJlYXNvbmluZ1N0b3JlLnJlbmFtZSh0ZW1wTWVzc2FnZUlkLCBmaW5hbE1lc3NhZ2VJZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlYXNvbmluZ1N0b3JlLnJlbW92ZSh0ZW1wTWVzc2FnZUlkKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydGlhbFRleHQpIHtcbiAgICAgICAgY29tbWl0VG9TZXNzaW9uKFxuICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICBidWlsZFN0cmVhbVN0b3BQYXJ0aWFsQXNzaXN0YW50TWVzc2FnZSh7XG4gICAgICAgICAgICBmaW5hbE1lc3NhZ2VJZCxcbiAgICAgICAgICAgIHBhcnRpYWxUZXh0LFxuICAgICAgICAgICAgc3RvcHBlZFRyYWNlLFxuICAgICAgICAgICAgY29tcGFjdGlvbixcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICBidWlsZFN0cmVhbVN0b3BDYW5jZWxsZWRBc3Npc3RhbnRNZXNzYWdlKHtcbiAgICAgICAgICBjYW5jZWxsZWRNZXNzYWdlSWQsXG4gICAgICAgICAgY2FuY2VsbGVkTGFiZWw6IHQoJ2NoYXQuY2FuY2VsbGVkJyksXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICBjbGVhclNlc3Npb25UYWlsKHNlc3Npb25JZClcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcbiAgICB9LFxuICAgIFtjb21taXRUb1Nlc3Npb24sIGRyb3BGcm9tU2Vzc2lvbiwgY2xlYXJTZXNzaW9uVGFpbCwgdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQgPSB1c2VDYWxsYmFjayhcbiAgICAoY3R4OiBTdHJlYW1Db250ZXh0LCBhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQgfSA9IGN0eFxuICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZClcblxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgZHJvcEZyb21TZXNzaW9uKHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcblxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGl0bENvbnRleHQ6IEhpdGxFeGVjdXRpb25Db250ZXh0ID0gcmVzb2x2ZUhpdGxFeGVjdXRpb25Db250ZXh0KGFwcHJvdmFsLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IGhpdGxDb250ZXh0XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpdGxPdXRjb21lID0gcmVzb2x2ZUhpdGxBcHByb3ZhbFJlcXVpcmVkT3V0Y29tZShhcHByb3ZhbClcblxuICAgICAgLy8gUHJlYXByb2JhZG86IHBvciBkZXRlY2Npw7NuIG1hbnVhbCBvIHBvciBhdXRvLWFwcHJvdmUuIEVuIGFtYm9zIGNhc29zIGVsXG4gICAgICAvLyBzdHJlYW0gY29udGluw7phIHkgbm8gaGF5IHF1ZSBwaW50YXIgbGEgY2FqYSBkZSBhcHJvYmFjacOzbi5cbiAgICAgIGlmIChoaXRsT3V0Y29tZS50eXBlID09PSAnc2tpcC11aScpIHtcbiAgICAgICAgdHJhY2tNYW51YWxIaXRsRXZlbnRzKFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHsgaW1wcmVzc2lvbjogRVZFTlRTLmFpQ2hhdEhpdGwsIG9wdGlvbjogRVZFTlRTLmFpQ2hhdEhpdGxPcHRpb24gfSxcbiAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgICB0cmFja2VkTWFudWFsSGl0bEtleXNSZWYuY3VycmVudCxcbiAgICAgICAgICByZXNvbHZlSGl0bFNraXBSZXNvbHV0aW9uU291cmNlKGFwcHJvdmFsKVxuICAgICAgICApXG5cbiAgICAgICAgY29uc3Qgc2tpcHBlZE1hbnVhbEFwcHJvdmFsID0gcmVzb2x2ZVNraXBwZWRIaXRsTWFudWFsQXBwcm92YWwoYXBwcm92YWwpXG4gICAgICAgIGlmIChza2lwcGVkTWFudWFsQXBwcm92YWwgJiYgaXNBY3RpdmUpIHtcbiAgICAgICAgICBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudCA9IHNraXBwZWRNYW51YWxBcHByb3ZhbFxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhcHByb3ZhbE1lc3NhZ2VJZCB9ID0gaGl0bE91dGNvbWVcbiAgICAgIGNvbnN0IGNvbXBhY3Rpb24gPSBjb21wYWN0aW9uRm9yKHBsYWNlaG9sZGVySWQsIGFwcHJvdmFsLnJlYXNvbmluZylcbiAgICAgIHJlYXNvbmluZ1N0b3JlLnJlbmFtZShwbGFjZWhvbGRlcklkLCBhcHByb3ZhbE1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGFwcHJvdmFsVHJhY2UgPSBtYXBSZWFzb25pbmdUcmFjZShhcHByb3ZhbC5yZWFzb25pbmcpID8/IHJlYXNvbmluZ1RyYWNlRm9yKGFwcHJvdmFsTWVzc2FnZUlkKVxuICAgICAgY29tbWl0VG9TZXNzaW9uKFxuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIGJ1aWxkSGl0bEFwcHJvdmFsUGVuZGluZ01lc3NhZ2Uoe1xuICAgICAgICAgIGFwcHJvdmFsTWVzc2FnZUlkLFxuICAgICAgICAgIGFjY3VtdWxhdGVkQ29udGVudCxcbiAgICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgICByZWFzb25pbmc6IGFwcHJvdmFsVHJhY2UsXG4gICAgICAgICAgY29tcGFjdGlvbixcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5tYXJrQ2hhdEFzVW5yZWFkKHNlc3Npb25JZClcbiAgICAgICAgbm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kKHNlc3Npb25JZCwgJ2FwcHJvdmFsX3JlcXVpcmVkJylcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZ2VudCwgY29tbWl0VG9TZXNzaW9uLCBkcm9wRnJvbVNlc3Npb24sIGV2ZW50XVxuICApXG5cbiAgY29uc3Qge1xuICAgIGFza01haWEsXG4gICAgcmV0cnlDb21wbGV0aW9uLFxuICAgIGlzTG9hZGluZzogd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eSxcbiAgICBzdG9wU3RyZWFtaW5nLFxuICB9ID0gdXNlT3JjaGVzdHJhdG9yU3RyZWFtKHtcbiAgICBhY3RpdmVTZXNzaW9uSWQsXG4gICAgb25FcnJvcjogaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgb25TdHJlYW1VcGRhdGU6IGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICBvbkZpbmlzaFN0cmVhbTogaGFuZGxlU3RyZWFtRmluaXNoLFxuICAgIG9uU3RvcDogaGFuZGxlU3RyZWFtU3RvcCxcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYsXG4gIH0pXG5cbiAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50ID0gKCkgPT4ge1xuICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KG51bGwpXG4gICAgc2V0QWN0aXZlTG9hZGluZ3Moe30pXG4gICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gcHJvamVjdFxuXG4gIGNvbnN0IHNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHNPck9wdGlvbnM/OiBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZyxcbiAgICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHdpbGxTdGFydE5ld1N0cmVhbSA9ICFzZXNzaW9uU3RyZWFtTWFuYWdlci5pc0FjdGl2ZShjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgICBjb25zdCBzZW5kR2F0ZSA9IHJlc29sdmVTZW5kTWVzc2FnZUdhdGUoe1xuICAgICAgICBpc1Byb2Nlc3Npbmc6IGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50LFxuICAgICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgICAgd2lsbFN0YXJ0TmV3U3RyZWFtLFxuICAgICAgICBhY3RpdmVTdHJlYW1Db3VudDogc2Vzc2lvblN0cmVhbU1hbmFnZXIuZ2V0QWN0aXZlQ291bnQoKSxcbiAgICAgICAgbWF4Q29uY3VycmVudDogTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyxcbiAgICAgIH0pXG4gICAgICBpZiAoc2VuZEdhdGUgPT09ICdjb25jdXJyZW5jeScpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHNlbmRHYXRlID09PSAnYnVzeScpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXR0YWNobWVudHMsIG9wdGlvbnMgfSA9IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyhhdHRhY2htZW50c09yT3B0aW9ucylcbiAgICAgIGNvbnN0IHBheWxvYWRGaWVsZHMgPSByZXNvbHZlU2VuZE1lc3NhZ2VQYXlsb2FkRmllbGRzKG9wdGlvbnMsIHtcbiAgICAgICAgZmFxSWQsXG4gICAgICAgIGFnZW50U3VnZ2VzdGlvbklkLFxuICAgICAgICBtZW50aW9ucyxcbiAgICAgICAgZnVhSWQsXG4gICAgICAgIHNjSWQsXG4gICAgICAgIGNvbnRleHREYXRhLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGNvbnRleHRNZXNzYWdlOiBDb250ZXh0TWVzc2FnZSB8IHVuZGVmaW5lZCA9IGJ1aWxkQ29udGV4dE1lc3NhZ2UocGF5bG9hZEZpZWxkcy5tZW50aW9ucylcbiAgICAgIGNvbnN0IGRpc3BsYXlNZXNzYWdlID0gZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheShtZXNzYWdlLCB7XG4gICAgICAgIGZ1YUlkOiBwYXlsb2FkRmllbGRzLmZ1YUlkLFxuICAgICAgICBzY0lkOiBwYXlsb2FkRmllbGRzLnNjSWQsXG4gICAgICB9KVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIHNldEFjdGl2ZUNoYXRJZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgICBjb25zdCBuZXdNZXNzYWdlSWQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gbmV3TWVzc2FnZUlkXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBtZXNzYWdlXG5cbiAgICAgIGlmICghcmVwb3J0ZWRFdmVudC5jdXJyZW50KSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5wbUFpVHlwZWRUZXh0KVxuICAgICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIC8vIFZlcmlmaWNhciBzaSBlbCBjb250ZXh0byBnbG9iYWwgZXN0w6EgZGVzYWN0dWFsaXphZG9cbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlV2l0aFByb2plY3QgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG5cbiAgICAgIGNvbnN0IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyA9IHJlc29sdmVMYXN0TWVzc2FnZUFnZW50SWQobWVzc2FnZXNSZWYuY3VycmVudClcblxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gY3VycmVudENoYXRJZC5jdXJyZW50XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNoaXBzUHJvamVjdDogY3R4Q2hpcHNQcm9qZWN0LFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgdGFzazogY3R4VGFzayxcbiAgICAgIH0gPSBjb250ZXh0UmVmLmN1cnJlbnRcblxuICAgICAgZW5zdXJlU2Vzc2lvbkluU2lkZWJhcih7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgdGl0bGU6IGJ1aWxkU2lkZWJhclNlc3Npb25UaXRsZShkaXNwbGF5TWVzc2FnZSksXG4gICAgICAgIGFnZW50LFxuICAgICAgICBhZ2VudElkOiBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkLFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgYXR0YWNobWVudHMsXG4gICAgICB9KVxuXG4gICAgICAvLyBObyBhZ3JlZ2FyIHByb2plY3RJZCBhbCBtZW5zYWplIGRlbCB1c3VhcmlvIC0gc2UgZGV0ZXJtaW5hcsOhIGRlc3B1w6lzXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgIGlkOiByZXNvbHZlVXNlclF1ZXN0aW9uTWVzc2FnZUlkKGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCksXG4gICAgICAgIG1lc3NhZ2U6IGRpc3BsYXlNZXNzYWdlLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiBjdXJyZW50VXNlcixcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLlVTRVIsXG4gICAgICAgIHNvdXJjZXM6IGF0dGFjaG1lbnRzLFxuICAgICAgICAuLi4oY29udGV4dE1lc3NhZ2UgPyB7IGNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuXG4gICAgICBjb25zdCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkID0gc3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50KVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBzZXNzaW9uSWRcbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZClcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQsXG4gICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogYWdlbnQ/Lm5hbWUgfHwgJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pXG5cbiAgICAgIGxldCBmaW5hbE1lc3NhZ2UgPSBtZXNzYWdlXG5cbiAgICAgIGZpbmFsTWVzc2FnZSA9IHJlc29sdmVSZW50YWJpbGlkYWRQcm9qZWN0RmFxTWVzc2FnZShcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgdCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJyksXG4gICAgICAgIG9wdGlvbnMucHJvamVjdENoYW5nZWQ/LmluY29tZVR5cGUgfHwgY29udGV4dFJlZi5jdXJyZW50LnByb2plY3Q/LmluY29tZVR5cGVcbiAgICAgIClcblxuICAgICAgY29uc3QgaGlzdG9yeSA9IGJ1aWxkQ2hhdEhpc3RvcnlGcm9tTWVzc2FnZXMobWVzc2FnZXNSZWYuY3VycmVudCwgYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcblxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VQcm9qZWN0SWQgPSBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWRcbiAgICAgIGNvbnN0IHByb2plY3RUb1JlcXVlc3QgPSByZXNvbHZlUHJvamVjdFRvUmVxdWVzdChjdHhDaGlwc1Byb2plY3QsIGxhc3RNZXNzYWdlUHJvamVjdElkKVxuXG4gICAgICBjb25zdCBwcm9qZWN0cyA9IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKVxuXG4gICAgICBjb25zdCBwYXlsb2FkRGF0YSA9IGJ1aWxkTWFpYVN0cmVhbVJlcXVlc3RQYXlsb2FkKHtcbiAgICAgICAgbWVzc2FnZTogZmluYWxNZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGF1dGhVc2VyLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIGFnZW50SWQ6IHJlc29sdmVBZ2VudElkRm9yU3RyZWFtKGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcywgYWdlbnQ/LmlkKSxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IEJvb2xlYW4oaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogQm9vbGVhbihpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgIGlzQXV0b0FwcHJvdmVBY3RpdmU6IEJvb2xlYW4oaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZi5jdXJyZW50KSxcbiAgICAgICAgY3R4UHJvamVjdCxcbiAgICAgICAgY3R4Q2xpZW50LFxuICAgICAgICBjdHhUYXNrLFxuICAgICAgICBwcm9qZWN0TmFtZTogcHJvamVjdHM/Lmxlbmd0aCA/IHByb2plY3RzWzBdLm5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgICBmYXFJZDogcGF5bG9hZEZpZWxkcy5mYXFJZCxcbiAgICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ6IHBheWxvYWRGaWVsZHMuYWdlbnRTdWdnZXN0aW9uSWQsXG4gICAgICAgIGZ1YUlkOiBwYXlsb2FkRmllbGRzLmZ1YUlkLFxuICAgICAgICBzY0lkOiBwYXlsb2FkRmllbGRzLnNjSWQsXG4gICAgICAgIGFnZW50RW50aXR5OiBhZ2VudD8uZW50aXR5LFxuICAgICAgICBhZ2VudFR5cGU6IGFnZW50Py50eXBlLFxuICAgICAgICBhZ2VudEVtb2ppOiBhZ2VudD8uZW1vamksXG4gICAgICAgIGNvbnRleHRNZXNzYWdlLFxuICAgICAgICBjb250ZXh0RGF0YTogcGF5bG9hZEZpZWxkcy5jb250ZXh0RGF0YSxcbiAgICAgIH0pXG5cbiAgICAgIGFza01haWEocGF5bG9hZERhdGEpXG4gICAgfSxcbiAgICBbXG4gICAgICBhZGRNZXNzYWdlLFxuICAgICAgY29tbWl0VG9TZXNzaW9uLFxuICAgICAgZXZlbnQsXG4gICAgICBhc2tNYWlhLFxuICAgICAgcHJvamVjdCxcbiAgICAgIGNsaWVudCxcbiAgICAgIHRhc2ssXG4gICAgICBjaGlwc1Byb2plY3QsXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgdCxcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGNoYW5nZVByb2plY3QgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBpZiAoIWN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkgcmV0dXJuXG5cbiAgICAgIGlmIChzaG91bGRVcGRhdGVQcm9qZWN0T25DaGFuZ2Uob3B0aW9uLmlkLCBwcm9qZWN0Py5pZCkpIHtcbiAgICAgICAgc2V0UHJvamVjdChvcHRpb24pXG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRSZXNlbmRBZnRlclByb2plY3RDaGFuZ2UoY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50LCBwcm9qZWN0KSkge1xuICAgICAgICBjb25zdCBoaXN0b3J5ID0gYnVpbGRDaGF0SGlzdG9yeUZyb21NZXNzYWdlcyhtZXNzYWdlc1JlZi5jdXJyZW50LCBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuXG4gICAgICAgIGFza01haWEoXG4gICAgICAgICAgYnVpbGRNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWRGb3JQcm9qZWN0Q2hhbmdlKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCxcbiAgICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgICBwcm9qZWN0OiBvcHRpb24sXG4gICAgICAgICAgICBhdXRoVXNlcixcbiAgICAgICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IEJvb2xlYW4oaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IEJvb2xlYW4oaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQpLFxuICAgICAgICAgICAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogQm9vbGVhbihpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQpLFxuICAgICAgICAgICAgYWdlbnRFbnRpdHk6IGFnZW50Py5lbnRpdHksXG4gICAgICAgICAgICBhZ2VudFR5cGU6IGFnZW50Py50eXBlLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtwcm9qZWN0LCBzZXRQcm9qZWN0LCBhc2tNYWlhLCBhdXRoVXNlciwgaXNXZWJTZWFyY2hBY3RpdmUsIGFnZW50XVxuICApXG5cbiAgY29uc3QgcmV0cnlNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSBjdXJyZW50Q2hhdElkLmN1cnJlbnRcbiAgICAgIGNvbnN0IHJldHJ5QmxvY2sgPSByZXNvbHZlUmV0cnlCbG9ja1JlYXNvbih7XG4gICAgICAgIGlzUHJvY2Vzc2luZzogaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQsXG4gICAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgICBpc1Nlc3Npb25TdHJlYW1BY3RpdmU6IHNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKHNlc3Npb25JZCksXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNvdW50OiBzZXNzaW9uU3RyZWFtTWFuYWdlci5nZXRBY3RpdmVDb3VudCgpLFxuICAgICAgICBtYXhDb25jdXJyZW50OiBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TLFxuICAgICAgfSlcbiAgICAgIGlmIChyZXRyeUJsb2NrID09PSAnY29uY3VycmVuY3knKSB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChyZXRyeUJsb2NrICE9IG51bGwpIHJldHVyblxuXG4gICAgICBjb25zdCBwcmV2aW91c01lc3NhZ2VzID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgY29uc3QgdXNlck1lc3NhZ2UgPSBmaW5kVXNlck1lc3NhZ2VGb3JSZXRyeShwcmV2aW91c01lc3NhZ2VzLCBtZXNzYWdlKVxuICAgICAgY29uc3QgcmV0cnlFbGlnaWJpbGl0eSA9IHJlc29sdmVSZXRyeUVsaWdpYmlsaXR5KHByZXZpb3VzTWVzc2FnZXMsIG1lc3NhZ2UsIHVzZXJNZXNzYWdlKVxuICAgICAgaWYgKCFyZXRyeUVsaWdpYmlsaXR5LmVsaWdpYmxlIHx8ICF1c2VyTWVzc2FnZSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHsgdHVybklkLCB1c2VPcmNoZXN0cmF0b3JGYWxsYmFjayB9ID0gcmV0cnlFbGlnaWJpbGl0eVxuXG4gICAgICBjb25zdCB0cnVuY2F0ZWQgPSBtZXNzYWdlc1dpdGhvdXRSZXRyaWVkVHVybihwcmV2aW91c01lc3NhZ2VzLCBtZXNzYWdlKVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IHByZXZpb3VzTWVzc2FnZXNcbiAgICAgIHNldEFjdGl2ZUNoYXRJZChzZXNzaW9uSWQpXG5cbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBuZXdNZXNzYWdlSWRcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IHVzZXJNZXNzYWdlLm1lc3NhZ2VcbiAgICAgIGNvbnN0IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQgPSBgYW5zd2VyLSR7bmV3TWVzc2FnZUlkfS1zdHJlYW1pbmdgXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBzdHJlYW1pbmdQbGFjZWhvbGRlcklkXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IHNlc3Npb25JZFxuXG4gICAgICBjb25zdCBwbGFjZWhvbGRlcjogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgIGlkOiBzdHJlYW1pbmdQbGFjZWhvbGRlcklkLFxuICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6IGFnZW50Py5uYW1lIHx8ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9XG4gICAgICBjb25zdCBuZXh0TWVzc2FnZXMgPSBbLi4udHJ1bmNhdGVkLCBwbGFjZWhvbGRlcl1cbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBuZXh0TWVzc2FnZXNcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyhuZXh0TWVzc2FnZXMpXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHN0cmVhbWluZ1BsYWNlaG9sZGVySWQpXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpcHNQcm9qZWN0OiBjdHhDaGlwc1Byb2plY3QsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICB0YXNrOiBjdHhUYXNrLFxuICAgICAgfSA9IGNvbnRleHRSZWYuY3VycmVudFxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdCA9IHRydW5jYXRlZC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuICAgICAgY29uc3QgcHJvamVjdFRvUmVxdWVzdCA9IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0KGN0eENoaXBzUHJvamVjdCwgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdD8ucHJvamVjdElkKVxuICAgICAgY29uc3QgY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzID0gdHJ1bmNhdGVkLmF0KC0xKT8uYWdlbnRJZCB8fCBtZXNzYWdlLmFnZW50SWRcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gcmVzb2x2ZVJldHJ5VXNlckF0dGFjaG1lbnRzKHVzZXJNZXNzYWdlKVxuXG4gICAgICBjb25zdCByZXBsYXlWaWFPcmNoZXN0cmF0b3IgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBidWlsZENoYXRIaXN0b3J5RnJvbU1lc3NhZ2VzKHRydW5jYXRlZCwgYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcbiAgICAgICAgY29uc3QgcHJvamVjdHMgPSBwcm9qZWN0VG9SZXF1ZXN0ID8gYXdhaXQgZmV0Y2hQcm9qZWN0cyhbcHJvamVjdFRvUmVxdWVzdF0pIDogbnVsbFxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFza01haWEoXG4gICAgICAgICAgYnVpbGRNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWQoe1xuICAgICAgICAgICAgbWVzc2FnZTogdXNlck1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgICAgICBhdXRoVXNlcixcbiAgICAgICAgICAgIGNoYXRJZDogc2Vzc2lvbklkLFxuICAgICAgICAgICAgbWVzc2FnZUlkOiBuZXdNZXNzYWdlSWQsXG4gICAgICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgYWdlbnRJZDogcmVzb2x2ZUFnZW50SWRGb3JTdHJlYW0oY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzLCBhZ2VudD8uaWQpLFxuICAgICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IEJvb2xlYW4oaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IEJvb2xlYW4oaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQpLFxuICAgICAgICAgICAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogQm9vbGVhbihpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQpLFxuICAgICAgICAgICAgY3R4UHJvamVjdCxcbiAgICAgICAgICAgIGN0eENsaWVudCxcbiAgICAgICAgICAgIGN0eFRhc2ssXG4gICAgICAgICAgICBwcm9qZWN0TmFtZTogcHJvamVjdHM/Lmxlbmd0aCA/IHByb2plY3RzWzBdLm5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICAgIGFnZW50RW50aXR5OiBhZ2VudD8uZW50aXR5LFxuICAgICAgICAgICAgYWdlbnRUeXBlOiBhZ2VudD8udHlwZSxcbiAgICAgICAgICAgIGFnZW50RW1vamk6IGFnZW50Py5lbW9qaSxcbiAgICAgICAgICAgIGNvbnRleHRNZXNzYWdlOiB1c2VyTWVzc2FnZS5jb250ZXh0TWVzc2FnZSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG5cbiAgICAgICAgaWYgKCFyZXN1bHQuc3RhcnRlZCkge1xuICAgICAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gcHJldmlvdXNNZXNzYWdlc1xuICAgICAgICAgIHJlcGxhY2VNZXNzYWdlcyhwcmV2aW91c01lc3NhZ2VzKVxuICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICAgIGlmIChyZXN1bHQucmVhc29uID09PSAnbGltaXQnKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh1c2VPcmNoZXN0cmF0b3JGYWxsYmFjayB8fCAhdHVybklkKSB7XG4gICAgICAgIGF3YWl0IHJlcGxheVZpYU9yY2hlc3RyYXRvcigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXRyeUNvbXBsZXRpb24oe1xuICAgICAgICBjaGF0SWQ6IHNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZUlkOiBuZXdNZXNzYWdlSWQsXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZDogdHVybklkLFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICBhZ2VudElkOiBTdHJpbmcoY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCB8fCAnJyksXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihwcm9qZWN0VG9SZXF1ZXN0ID8geyBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QgfSA6IHt9KSxcbiAgICAgICAgLi4ucmVzb2x2ZUNsaWVudFBheWxvYWQoY3R4Q2xpZW50LCBjdHhQcm9qZWN0KSxcbiAgICAgICAgLi4uKGN0eFRhc2s/LmlkICE9IG51bGwgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBpZiAocmVzdWx0LnN0YXJ0ZWQpIHJldHVyblxuXG4gICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ3R1cm5fbm90X2ZvdW5kJykge1xuICAgICAgICBhd2FpdCByZXBsYXlWaWFPcmNoZXN0cmF0b3IoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IHByZXZpb3VzTWVzc2FnZXNcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyhwcmV2aW91c01lc3NhZ2VzKVxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ2xpbWl0Jykge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyxcbiAgICAgIHJldHJ5Q29tcGxldGlvbixcbiAgICAgIGFza01haWEsXG4gICAgICBmZXRjaFByb2plY3RzLFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICBzZXRBY3RpdmVDaGF0SWQsXG4gICAgXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhhc3luYyAoZmVlZGJhY2tQcm9wOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLkNoYXRzLndhc0hlbHBmdWxDaGF0KGNoYXRNZXNzYWdlSWQsIGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQKVxuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gY2hhdE1lc3NhZ2VJZCAmJiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgd2FzSGVscGZ1bDogZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgICBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcsXG4gICAgICBlZGl0ZWRBY3Rpb25zPzogQXJyYXk8eyB0b29sX25hbWU6IHN0cmluZzsgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4sXG4gICAgICBtZXRhZGF0YT86IHsgdG9vbF9ncm91cF9zbHVnczogc3RyaW5nW10gfVxuICAgICkgPT4ge1xuICAgICAgaWYgKCF0aHJlYWRJZHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0aHJlYWRfaWRzIHByb3ZpZGVkIGZvciBhcHByb3ZhbCBkZWNpc2lvbicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3VuZCA9IGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHMoXG4gICAgICAgIHRocmVhZElkcyxcbiAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCxcbiAgICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLm1lc3NhZ2VzLFxuICAgICAgICBhY3RpdmVWaWV3LmdldCgpXG4gICAgICApXG4gICAgICBpZiAoIWZvdW5kPy5tZXNzYWdlLmFwcHJvdmFsKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlIGVuY29udHLDsyBtZW5zYWplIGNvbiBhcHByb3ZhbCBwYXJhIHRocmVhZF9pZHM6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBtZXNzYWdlOiBtZXNzYWdlV2l0aEFwcHJvdmFsLCBzZXNzaW9uSWQ6IGZvdW5kU2Vzc2lvbklkIH0gPSBmb3VuZFxuICAgICAgY29uc3QgeyBhcHByb3ZhbCB9ID0gbWVzc2FnZVdpdGhBcHByb3ZhbFxuICAgICAgaWYgKCFhcHByb3ZhbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gYXBwcm92YWwuc2Vzc2lvbl9pZCB8fCBmb3VuZFNlc3Npb25JZFxuICAgICAgaWYgKCFzZXNzaW9uSWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc2Vzc2lvbl9pZCBkaXNwb25pYmxlIHBhcmEgYXBwcm92YWw6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzZXNzaW9uU3RyZWFtTWFuYWdlci5nZXRBY3RpdmVDb3VudCgpID49IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlV2l0aEFwcHJvdmFsLmlkXG4gICAgICBjb25zdCBuZXdTdGF0dXMgPSByZXNvbHZlQXBwcm92YWxEZWNpc2lvblN0YXR1cyhkZWNpc2lvbilcbiAgICAgIGNvbnN0IGhpdGxDb250ZXh0OiBIaXRsRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICBtZXNzYWdlVGV4dDogbWVzc2FnZVdpdGhBcHByb3ZhbC5tZXNzYWdlLFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgcGVuZGluZ0FjdGlvbnM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyxcbiAgICAgICAgdGhyZWFkSWRzLFxuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0FjdGl2ZVNlc3Npb24gPSBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZClcbiAgICAgIGlmIChpc0FjdGl2ZVNlc3Npb24pIHtcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IGhpdGxDb250ZXh0XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7IC4uLm1lc3NhZ2VXaXRoQXBwcm92YWwsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfSlcblxuICAgICAgY29uc3Qgc3RyZWFtTWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGlmIChpc0FjdGl2ZVNlc3Npb24pIHtcbiAgICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gc3RyZWFtTWVzc2FnZUlkXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpdGxDdHg6IFN0cmVhbUNvbnRleHQgPSB7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZUlkOiBzdHJlYW1NZXNzYWdlSWQsXG4gICAgICAgIHBsYWNlaG9sZGVySWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKHN0cmVhbU1lc3NhZ2VJZCksXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWlzQWN0aXZlU2Vzc2lvbikgcmV0dXJuXG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2Vzc2lvblN0cmVhbU1hbmFnZXIuc3RhcnRDb250aW51ZVN0cmVhbSh7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgcGxhY2Vob2xkZXJJZDogaGl0bEN0eC5wbGFjZWhvbGRlcklkLFxuICAgICAgICBjb250aW51ZVJlcXVlc3Q6IHtcbiAgICAgICAgICB0aHJlYWRJZHMsXG4gICAgICAgICAgc2Vzc2lvbklkOiBhcHByb3ZhbC5zZXNzaW9uX2lkLFxuICAgICAgICAgIGRlY2lzaW9uOiByZXNvbHZlQ29udGludWVTdHJlYW1EZWNpc2lvbihkZWNpc2lvbiwgZWRpdGVkQWN0aW9ucyksXG4gICAgICAgICAgZWRpdGVkQWN0aW9ucyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIH0sXG4gICAgICAgIHQsXG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0OiBoaXRsQ29udGV4dCxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkLFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lLFxuICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICBvblN0cmVhbVVwZGF0ZTogY29udGVudCA9PiBoYW5kbGVTdHJlYW1VcGRhdGUoaGl0bEN0eCwgY29udGVudCksXG4gICAgICAgICAgb25GaW5pc2hTdHJlYW06IGZpbmlzaFBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRmluaXNoKFxuICAgICAgICAgICAgICBoaXRsQ3R4LFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLmNvbnRlbnQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuc291cmNlcyxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5tZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuYXR0YWNobWVudHMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuY29tcGxldGVkQWdlbnRJZCxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5yZXNvbHZlZENvbnRleHQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQucmVhc29uaW5nXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZygpXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcihoaXRsQ3R4KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkOiAoYXBwcm92YWxQYXlsb2FkLCBhY2N1bXVsYXRlZENvbnRlbnQpID0+IHtcbiAgICAgICAgICAgIHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nKClcbiAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQoaGl0bEN0eCwgYXBwcm92YWxQYXlsb2FkLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIGlmICghcmVzdWx0LnN0YXJ0ZWQpIHtcbiAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ2xpbWl0Jykge1xuICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICBjb21taXRUb1Nlc3Npb24sXG4gICAgICBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICAgIGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gICAgICB0LFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGluaXRpYWxpemVDaGF0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAoaW5pdGlhbENoYXRJZCkge1xuICAgICAgYXdhaXQgbG9hZE1lc3NhZ2VzKClcbiAgICB9IGVsc2UgaWYgKHVzZXJJbml0aWFsTWVzc2FnZSkge1xuICAgICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlPy50cmltKCkpXG4gICAgICBjb25zdCBoYXNJbml0aWFsQXR0YWNobWVudHMgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZhcSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZ1YSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbFNjID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZClcblxuICAgICAgaWYgKCFoYXNJbml0aWFsTWVzc2FnZSAmJiAhaGFzSW5pdGlhbEF0dGFjaG1lbnRzICYmICFoYXNJbml0aWFsRmFxICYmICFoYXNJbml0aWFsRnVhICYmICFoYXNJbml0aWFsU2MpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpcHNQcm9qZWN0OiBjdHhDaGlwc1Byb2plY3QsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICB0YXNrOiBjdHhUYXNrLFxuICAgICAgfSA9IGNvbnRleHRSZWYuY3VycmVudFxuICAgICAgY29uc3QgcHJvamVjdFRvUmVxdWVzdCA9IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0KGN0eENoaXBzUHJvamVjdCwgbnVsbCkgPz8gY3R4UHJvamVjdD8uaWQgPz8gbnVsbFxuXG4gICAgICBjb25zdCBpbml0aWFsRGlzcGxheU1lc3NhZ2UgPSBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5KHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLCB7XG4gICAgICAgIGZ1YUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQsXG4gICAgICAgIHNjSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkLFxuICAgICAgfSlcblxuICAgICAgZW5zdXJlU2Vzc2lvbkluU2lkZWJhcih7XG4gICAgICAgIHNlc3Npb25JZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICB0aXRsZTogYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlKGluaXRpYWxEaXNwbGF5TWVzc2FnZSksXG4gICAgICAgIGFnZW50LFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzLFxuICAgICAgfSlcblxuICAgICAgYXNrTWFpYSh7XG4gICAgICAgIG1lc3NhZ2U6IHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSEsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjdHhQcm9qZWN0Py5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKGN0eFByb2plY3QuZmVlSWQpIH0gOiB7fSksXG4gICAgICAgIC4uLnJlc29sdmVDbGllbnRQYXlsb2FkKGN0eENsaWVudCwgY3R4UHJvamVjdCksXG4gICAgICAgIC4uLihjdHhQcm9qZWN0Py5uYW1lID8geyBwcm9qZWN0TmFtZTogY3R4UHJvamVjdC5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihjdHhUYXNrPy5pZCAhPSBudWxsXG4gICAgICAgICAgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpLCAuLi4oY3R4VGFzay5uYW1lID8geyB0YXNrTmFtZTogY3R4VGFzay5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgPyB7IGZhcUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkID8geyBmdWFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCA/IHsgc2NJZDogdXNlckluaXRpYWxNZXNzYWdlLnNjSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LnR5cGUgIT0gbnVsbCA/IHsgYWdlbnRUeXBlOiBhZ2VudC50eXBlIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW1vamkgIT0gbnVsbCA/IHsgYWdlbnRFbW9qaTogYWdlbnQuZW1vamkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKVxuICAgICAgICAgID8geyBjb250ZXh0TWVzc2FnZTogYnVpbGRDb250ZXh0TWVzc2FnZSh1c2VySW5pdGlhbE1lc3NhZ2UubWVudGlvbnMpIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5jb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGE6IHVzZXJJbml0aWFsTWVzc2FnZS5jb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtcbiAgICBpbml0aWFsQ2hhdElkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBwcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICB0YXNrLFxuICAgIGF1dGhVc2VyLFxuICAgIGFnZW50LFxuICAgIGFza01haWEsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICBdKVxuXG4gIGNvbnN0IHJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBwcmV2aW91c1Nlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHByZXZpb3VzU2Vzc2lvbklkKVxuICAgIHJlYXNvbmluZ1N0b3JlLmNsZWFyKClcbiAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIHNldEFjdGl2ZVNlc3Npb25JZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2V0QWN0aXZlQ2hhdElkKG51bGwpXG4gIH0sIFtzZXRBY3RpdmVDaGF0SWRdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICByZXRyeU1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICByZXNldENoYXQsXG4gICAgc3RvcEdlbmVyYXRpb24sXG5cbiAgICBpc0Rpc2FibGVkOiB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVNDLEVBQUUsSUFBSUMsTUFBTSxRQUFRLE1BQU07QUFDbkMsU0FBU0MsZUFBZSxRQUFRLG9CQUFvQjtBQUNwRCxTQUFTQyxxQkFBcUIsUUFBUSwwQkFBMEI7QUFDaEUsU0FBU0MsSUFBSSxRQUFRLFNBQVM7QUFFOUIsU0FDRUMsa0NBQWtDLEVBQ2xDQyw2QkFBNkIsRUFDN0JDLDZCQUE2QixFQUM3QkMsNEJBQTRCLEVBQzVCQyw2QkFBNkIsRUFDN0JDLHdCQUF3QixFQUN4QkMsYUFBYSxFQUNiQyxpQkFBaUIsRUFDakJDLG9C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