ummaya 0.2.13 → 0.2.15

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 (566) hide show
  1. package/npm-shrinkwrap.json +2 -2
  2. package/package.json +7 -4
  3. package/pyproject.toml +2 -2
  4. package/tui/package.json +1 -1
  5. package/tui/src/buddy/CompanionSprite.tsx +1 -2
  6. package/tui/src/buddy/useBuddyNotification.tsx +1 -2
  7. package/tui/src/cli/controlAuth.ts +20 -0
  8. package/tui/src/cli/handlers/auth.ts +7 -7
  9. package/tui/src/cli/handlers/mcp.tsx +0 -1
  10. package/tui/src/cli/handlers/util.tsx +2 -3
  11. package/tui/src/cli/print.ts +7 -4
  12. package/tui/src/commands/add-dir/add-dir.tsx +1 -2
  13. package/tui/src/commands/agents/agents.tsx +1 -2
  14. package/tui/src/commands/bridge/bridge.tsx +1 -2
  15. package/tui/src/commands/btw/btw.tsx +1 -2
  16. package/tui/src/commands/config/config.tsx +1 -2
  17. package/tui/src/commands/context/context.tsx +1 -2
  18. package/tui/src/commands/copy/copy.tsx +1 -2
  19. package/tui/src/commands/desktop/desktop.tsx +1 -2
  20. package/tui/src/commands/diff/diff.tsx +1 -2
  21. package/tui/src/commands/doctor/doctor.tsx +1 -2
  22. package/tui/src/commands/effort/effort.tsx +1 -2
  23. package/tui/src/commands/exit/exit.tsx +1 -2
  24. package/tui/src/commands/export/export.tsx +1 -2
  25. package/tui/src/commands/extra-usage/extra-usage.tsx +1 -2
  26. package/tui/src/commands/fast/fast.tsx +0 -1
  27. package/tui/src/commands/feedback/feedback.tsx +1 -2
  28. package/tui/src/commands/help/help.tsx +1 -2
  29. package/tui/src/commands/hooks/hooks.tsx +1 -2
  30. package/tui/src/commands/ide/ide.tsx +0 -1
  31. package/tui/src/commands/install-github-app/OAuthFlowStep.tsx +1 -2
  32. package/tui/src/commands/install-github-app/install-github-app.tsx +4 -4
  33. package/tui/src/commands/install.tsx +0 -1
  34. package/tui/src/commands/login/login.tsx +1 -2
  35. package/tui/src/commands/logout/logout.tsx +0 -1
  36. package/tui/src/commands/mcp/mcp.tsx +1 -2
  37. package/tui/src/commands/memory/memory.tsx +0 -1
  38. package/tui/src/commands/mobile/mobile.tsx +0 -1
  39. package/tui/src/commands/model/model.tsx +0 -1
  40. package/tui/src/commands/output-style/output-style.tsx +1 -2
  41. package/tui/src/commands/passes/passes.tsx +1 -2
  42. package/tui/src/commands/permissions/permissions.tsx +1 -2
  43. package/tui/src/commands/plan/plan.tsx +1 -2
  44. package/tui/src/commands/plugin/AddMarketplace.tsx +1 -2
  45. package/tui/src/commands/plugin/BrowseMarketplace.tsx +1 -2
  46. package/tui/src/commands/plugin/DiscoverPlugins.tsx +0 -1
  47. package/tui/src/commands/plugin/ManageMarketplaces.tsx +0 -1
  48. package/tui/src/commands/plugin/ManagePlugins.tsx +1 -2
  49. package/tui/src/commands/plugin/PluginErrors.tsx +1 -2
  50. package/tui/src/commands/plugin/PluginOptionsDialog.tsx +1 -2
  51. package/tui/src/commands/plugin/PluginOptionsFlow.tsx +1 -2
  52. package/tui/src/commands/plugin/PluginSettings.tsx +1 -2
  53. package/tui/src/commands/plugin/PluginTrustWarning.tsx +0 -1
  54. package/tui/src/commands/plugin/UnifiedInstalledCell.tsx +1 -2
  55. package/tui/src/commands/plugin/ValidatePlugin.tsx +1 -2
  56. package/tui/src/commands/plugin/index.tsx +0 -1
  57. package/tui/src/commands/plugin/plugin.tsx +1 -2
  58. package/tui/src/commands/plugin/pluginDetailsHelpers.tsx +1 -2
  59. package/tui/src/commands/privacy-settings/privacy-settings.tsx +0 -1
  60. package/tui/src/commands/rate-limit-options/rate-limit-options.tsx +1 -2
  61. package/tui/src/commands/remote-env/remote-env.tsx +1 -2
  62. package/tui/src/commands/remote-setup/remote-setup.tsx +0 -1
  63. package/tui/src/commands/resume/resume.tsx +1 -2
  64. package/tui/src/commands/review/UltrareviewOverageDialog.tsx +1 -2
  65. package/tui/src/commands/review/ultrareviewCommand.tsx +0 -1
  66. package/tui/src/commands/sandbox-toggle/sandbox-toggle.tsx +1 -2
  67. package/tui/src/commands/session/session.tsx +0 -1
  68. package/tui/src/commands/skills/skills.tsx +1 -2
  69. package/tui/src/commands/stats/stats.tsx +1 -2
  70. package/tui/src/commands/status/status.tsx +1 -2
  71. package/tui/src/commands/statusline.tsx +0 -1
  72. package/tui/src/commands/tag/tag.tsx +1 -2
  73. package/tui/src/commands/tasks/tasks.tsx +1 -2
  74. package/tui/src/commands/terminalSetup/terminalSetup.tsx +1 -2
  75. package/tui/src/commands/theme/theme.tsx +1 -2
  76. package/tui/src/commands/thinkback/thinkback.tsx +0 -1
  77. package/tui/src/commands/ultraplan.tsx +0 -1
  78. package/tui/src/commands/usage/usage.tsx +1 -2
  79. package/tui/src/commands/voice/voice.ts +2 -2
  80. package/tui/src/components/AgentProgressLine.tsx +1 -2
  81. package/tui/src/components/App.tsx +1 -2
  82. package/tui/src/components/ApproveApiKey.tsx +1 -2
  83. package/tui/src/components/AutoModeOptInDialog.tsx +0 -1
  84. package/tui/src/components/AutoUpdater.tsx +1 -2
  85. package/tui/src/components/AutoUpdaterWrapper.tsx +1 -2
  86. package/tui/src/components/AwsAuthStatusBox.tsx +1 -2
  87. package/tui/src/components/BaseTextInput.tsx +0 -1
  88. package/tui/src/components/BashModeProgress.tsx +1 -2
  89. package/tui/src/components/BridgeDialog.tsx +1 -2
  90. package/tui/src/components/BypassPermissionsModeDialog.tsx +0 -1
  91. package/tui/src/components/ChannelDowngradeDialog.tsx +1 -2
  92. package/tui/src/components/ClaudeCodeHint/PluginHintMenu.tsx +1 -2
  93. package/tui/src/components/ClaudeMdExternalIncludesDialog.tsx +0 -1
  94. package/tui/src/components/ClickableImageRef.tsx +1 -2
  95. package/tui/src/components/CompactSummary.tsx +1 -2
  96. package/tui/src/components/ConfigurableShortcutHint.tsx +1 -2
  97. package/tui/src/components/ContextSuggestions.tsx +1 -2
  98. package/tui/src/components/ContextVisualization.tsx +1 -2
  99. package/tui/src/components/CoordinatorAgentStatus.tsx +1 -2
  100. package/tui/src/components/CostThresholdDialog.tsx +0 -1
  101. package/tui/src/components/CtrlOToExpand.tsx +1 -2
  102. package/tui/src/components/CustomSelect/SelectMulti.tsx +1 -2
  103. package/tui/src/components/CustomSelect/select-input-option.tsx +1 -2
  104. package/tui/src/components/CustomSelect/select-option.tsx +1 -2
  105. package/tui/src/components/CustomSelect/select.tsx +1 -2
  106. package/tui/src/components/DesktopHandoff.tsx +0 -1
  107. package/tui/src/components/DesktopUpsell/DesktopUpsellStartup.tsx +0 -1
  108. package/tui/src/components/DevBar.tsx +1 -2
  109. package/tui/src/components/DevChannelsDialog.tsx +1 -2
  110. package/tui/src/components/DiagnosticsDisplay.tsx +1 -2
  111. package/tui/src/components/EffortCallout.tsx +1 -2
  112. package/tui/src/components/ExitFlow.tsx +1 -2
  113. package/tui/src/components/ExportDialog.tsx +1 -2
  114. package/tui/src/components/FallbackToolUseErrorMessage.tsx +0 -1
  115. package/tui/src/components/FallbackToolUseRejectedMessage.tsx +1 -2
  116. package/tui/src/components/FastIcon.tsx +1 -2
  117. package/tui/src/components/Feedback.tsx +0 -1
  118. package/tui/src/components/FeedbackSurvey/FeedbackSurvey.tsx +1 -2
  119. package/tui/src/components/FeedbackSurvey/FeedbackSurveyView.tsx +0 -1
  120. package/tui/src/components/FeedbackSurvey/TranscriptSharePrompt.tsx +0 -1
  121. package/tui/src/components/FeedbackSurvey/useFeedbackSurvey.tsx +0 -1
  122. package/tui/src/components/FeedbackSurvey/useMemorySurvey.tsx +0 -1
  123. package/tui/src/components/FeedbackSurvey/usePostCompactSurvey.tsx +0 -1
  124. package/tui/src/components/FeedbackSurvey/useSurveyState.tsx +1 -2
  125. package/tui/src/components/FileEditToolDiff.tsx +1 -2
  126. package/tui/src/components/FileEditToolUpdatedMessage.tsx +1 -2
  127. package/tui/src/components/FileEditToolUseRejectedMessage.tsx +1 -2
  128. package/tui/src/components/FilePathLink.tsx +1 -2
  129. package/tui/src/components/FullscreenLayout.tsx +1 -2
  130. package/tui/src/components/GlobalSearchDialog.tsx +1 -2
  131. package/tui/src/components/HelpV2/Commands.tsx +1 -2
  132. package/tui/src/components/HelpV2/General.tsx +0 -1
  133. package/tui/src/components/HelpV2/HelpV2.tsx +0 -1
  134. package/tui/src/components/HighlightedCode/Fallback.tsx +1 -2
  135. package/tui/src/components/HighlightedCode.tsx +1 -2
  136. package/tui/src/components/HistorySearchDialog.tsx +1 -2
  137. package/tui/src/components/IdeAutoConnectDialog.tsx +1 -2
  138. package/tui/src/components/IdeOnboardingDialog.tsx +0 -1
  139. package/tui/src/components/IdeStatusIndicator.tsx +1 -2
  140. package/tui/src/components/IdleReturnDialog.tsx +1 -2
  141. package/tui/src/components/InterruptedByUser.tsx +0 -1
  142. package/tui/src/components/InvalidConfigDialog.tsx +1 -2
  143. package/tui/src/components/InvalidSettingsDialog.tsx +1 -2
  144. package/tui/src/components/KeybindingWarnings.tsx +1 -2
  145. package/tui/src/components/LanguagePicker.tsx +1 -2
  146. package/tui/src/components/LogSelector.tsx +0 -1
  147. package/tui/src/components/LogoV2/AnimatedAsterisk.tsx +1 -2
  148. package/tui/src/components/LogoV2/AnimatedClawd.tsx +1 -2
  149. package/tui/src/components/LogoV2/ChannelsNotice.tsx +0 -1
  150. package/tui/src/components/LogoV2/Clawd.tsx +1 -2
  151. package/tui/src/components/LogoV2/CondensedLogo.tsx +0 -1
  152. package/tui/src/components/LogoV2/EmergencyTip.tsx +0 -1
  153. package/tui/src/components/LogoV2/Feed.tsx +1 -2
  154. package/tui/src/components/LogoV2/FeedColumn.tsx +1 -2
  155. package/tui/src/components/LogoV2/GuestPassesUpsell.tsx +0 -1
  156. package/tui/src/components/LogoV2/LogoV2.tsx +0 -1
  157. package/tui/src/components/LogoV2/Opus1mMergeNotice.tsx +1 -2
  158. package/tui/src/components/LogoV2/OverageCreditUpsell.tsx +1 -2
  159. package/tui/src/components/LogoV2/VoiceModeNotice.tsx +1 -2
  160. package/tui/src/components/LogoV2/feedConfigs.tsx +0 -1
  161. package/tui/src/components/LspRecommendation/LspRecommendationMenu.tsx +1 -2
  162. package/tui/src/components/MCPServerApprovalDialog.tsx +1 -2
  163. package/tui/src/components/MCPServerDesktopImportDialog.tsx +0 -1
  164. package/tui/src/components/MCPServerDialogCopy.tsx +0 -1
  165. package/tui/src/components/MCPServerMultiselectDialog.tsx +1 -2
  166. package/tui/src/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.tsx +0 -1
  167. package/tui/src/components/Markdown.tsx +1 -2
  168. package/tui/src/components/MarkdownTable.tsx +1 -2
  169. package/tui/src/components/MemoryUsageIndicator.tsx +1 -2
  170. package/tui/src/components/Message.tsx +1 -2
  171. package/tui/src/components/MessageModel.tsx +1 -2
  172. package/tui/src/components/MessageResponse.tsx +1 -2
  173. package/tui/src/components/MessageRow.tsx +1 -2
  174. package/tui/src/components/MessageSelector.tsx +1 -2
  175. package/tui/src/components/MessageTimestamp.tsx +1 -2
  176. package/tui/src/components/Messages.tsx +0 -1
  177. package/tui/src/components/ModelPicker.tsx +0 -1
  178. package/tui/src/components/NativeAutoUpdater.tsx +1 -2
  179. package/tui/src/components/NotebookEditToolUseRejectedMessage.tsx +1 -2
  180. package/tui/src/components/OffscreenFreeze.tsx +1 -2
  181. package/tui/src/components/Onboarding.tsx +2 -3
  182. package/tui/src/components/OutputStylePicker.tsx +0 -1
  183. package/tui/src/components/PackageManagerAutoUpdater.tsx +0 -1
  184. package/tui/src/components/Passes/Passes.tsx +0 -1
  185. package/tui/src/components/PrBadge.tsx +1 -2
  186. package/tui/src/components/PressEnterToContinue.tsx +1 -2
  187. package/tui/src/components/PromptInput/HistorySearchInput.tsx +1 -2
  188. package/tui/src/components/PromptInput/IssueFlagBanner.tsx +1 -2
  189. package/tui/src/components/PromptInput/Notifications.tsx +1 -2
  190. package/tui/src/components/PromptInput/PromptInput.tsx +0 -1
  191. package/tui/src/components/PromptInput/PromptInputFooter.tsx +1 -2
  192. package/tui/src/components/PromptInput/PromptInputFooterLeftSide.tsx +1 -2
  193. package/tui/src/components/PromptInput/PromptInputFooterSuggestions.tsx +1 -2
  194. package/tui/src/components/PromptInput/PromptInputHelpMenu.tsx +1 -2
  195. package/tui/src/components/PromptInput/PromptInputModeIndicator.tsx +1 -2
  196. package/tui/src/components/PromptInput/PromptInputQueuedCommands.tsx +1 -2
  197. package/tui/src/components/PromptInput/PromptInputStashNotice.tsx +1 -2
  198. package/tui/src/components/PromptInput/SandboxPromptFooterHint.tsx +1 -2
  199. package/tui/src/components/PromptInput/ShimmeredInput.tsx +1 -2
  200. package/tui/src/components/PromptInput/VoiceIndicator.tsx +1 -2
  201. package/tui/src/components/QuickOpenDialog.tsx +1 -2
  202. package/tui/src/components/RemoteCallout.tsx +0 -1
  203. package/tui/src/components/RemoteEnvironmentDialog.tsx +0 -1
  204. package/tui/src/components/ResumeTask.tsx +0 -1
  205. package/tui/src/components/SandboxViolationExpandedView.tsx +1 -2
  206. package/tui/src/components/ScrollKeybindingHandler.tsx +0 -1
  207. package/tui/src/components/SearchBox.tsx +1 -2
  208. package/tui/src/components/SessionBackgroundHint.tsx +1 -2
  209. package/tui/src/components/SessionPreview.tsx +1 -2
  210. package/tui/src/components/Settings/Config.tsx +0 -1
  211. package/tui/src/components/Settings/Settings.tsx +1 -2
  212. package/tui/src/components/Settings/Status.tsx +1 -2
  213. package/tui/src/components/Settings/Usage.tsx +1 -2
  214. package/tui/src/components/ShowInIDEPrompt.tsx +1 -2
  215. package/tui/src/components/SkillImprovementSurvey.tsx +1 -2
  216. package/tui/src/components/Spinner/FlashingChar.tsx +1 -2
  217. package/tui/src/components/Spinner/GlimmerMessage.tsx +1 -2
  218. package/tui/src/components/Spinner/ShimmerChar.tsx +1 -2
  219. package/tui/src/components/Spinner/SpinnerAnimationRow.tsx +1 -2
  220. package/tui/src/components/Spinner/SpinnerGlyph.tsx +1 -2
  221. package/tui/src/components/Spinner/TeammateSpinnerLine.tsx +1 -2
  222. package/tui/src/components/Spinner/TeammateSpinnerTree.tsx +1 -2
  223. package/tui/src/components/Spinner.tsx +0 -1
  224. package/tui/src/components/Stats.tsx +0 -1
  225. package/tui/src/components/StatusLine.tsx +1 -2
  226. package/tui/src/components/StatusNotices.tsx +1 -2
  227. package/tui/src/components/StructuredDiff/Fallback.tsx +1 -2
  228. package/tui/src/components/StructuredDiff.tsx +1 -2
  229. package/tui/src/components/StructuredDiffList.tsx +1 -2
  230. package/tui/src/components/TagTabs.tsx +1 -2
  231. package/tui/src/components/TaskListV2.tsx +1 -2
  232. package/tui/src/components/TeammateViewHeader.tsx +1 -2
  233. package/tui/src/components/TeleportError.tsx +0 -1
  234. package/tui/src/components/TeleportProgress.tsx +1 -2
  235. package/tui/src/components/TeleportRepoMismatchDialog.tsx +0 -1
  236. package/tui/src/components/TeleportStash.tsx +1 -2
  237. package/tui/src/components/TextInput.tsx +1 -2
  238. package/tui/src/components/ThemePicker.tsx +0 -1
  239. package/tui/src/components/ThinkingToggle.tsx +0 -1
  240. package/tui/src/components/TokenWarning.tsx +1 -2
  241. package/tui/src/components/ToolUseLoader.tsx +1 -2
  242. package/tui/src/components/TrustDialog/TrustDialog.tsx +0 -1
  243. package/tui/src/components/ValidationErrorsList.tsx +1 -2
  244. package/tui/src/components/VimTextInput.tsx +1 -2
  245. package/tui/src/components/VirtualMessageList.tsx +1 -2
  246. package/tui/src/components/WorktreeExitDialog.tsx +1 -2
  247. package/tui/src/components/agents/AgentDetail.tsx +0 -1
  248. package/tui/src/components/agents/AgentEditor.tsx +1 -2
  249. package/tui/src/components/agents/AgentNavigationFooter.tsx +1 -2
  250. package/tui/src/components/agents/AgentsList.tsx +0 -1
  251. package/tui/src/components/agents/AgentsMenu.tsx +1 -2
  252. package/tui/src/components/agents/ColorPicker.tsx +1 -2
  253. package/tui/src/components/agents/ModelSelector.tsx +1 -2
  254. package/tui/src/components/agents/ToolSelector.tsx +1 -2
  255. package/tui/src/components/agents/new-agent-creation/CreateAgentWizard.tsx +1 -2
  256. package/tui/src/components/agents/new-agent-creation/wizard-steps/ColorStep.tsx +1 -2
  257. package/tui/src/components/agents/new-agent-creation/wizard-steps/ConfirmStep.tsx +0 -1
  258. package/tui/src/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.tsx +1 -2
  259. package/tui/src/components/agents/new-agent-creation/wizard-steps/DescriptionStep.tsx +0 -1
  260. package/tui/src/components/agents/new-agent-creation/wizard-steps/GenerateStep.tsx +1 -2
  261. package/tui/src/components/agents/new-agent-creation/wizard-steps/LocationStep.tsx +1 -2
  262. package/tui/src/components/agents/new-agent-creation/wizard-steps/MemoryStep.tsx +1 -2
  263. package/tui/src/components/agents/new-agent-creation/wizard-steps/MethodStep.tsx +0 -1
  264. package/tui/src/components/agents/new-agent-creation/wizard-steps/ModelStep.tsx +1 -2
  265. package/tui/src/components/agents/new-agent-creation/wizard-steps/PromptStep.tsx +1 -2
  266. package/tui/src/components/agents/new-agent-creation/wizard-steps/ToolsStep.tsx +1 -2
  267. package/tui/src/components/agents/new-agent-creation/wizard-steps/TypeStep.tsx +1 -2
  268. package/tui/src/components/design-system/Byline.tsx +1 -2
  269. package/tui/src/components/design-system/Dialog.tsx +1 -2
  270. package/tui/src/components/design-system/Divider.tsx +1 -2
  271. package/tui/src/components/design-system/FuzzyPicker.tsx +1 -2
  272. package/tui/src/components/design-system/KeyboardShortcutHint.tsx +1 -2
  273. package/tui/src/components/design-system/ListItem.tsx +1 -2
  274. package/tui/src/components/design-system/LoadingState.tsx +0 -1
  275. package/tui/src/components/design-system/Pane.tsx +1 -2
  276. package/tui/src/components/design-system/ProgressBar.tsx +1 -2
  277. package/tui/src/components/design-system/Ratchet.tsx +1 -2
  278. package/tui/src/components/design-system/StatusIcon.tsx +1 -2
  279. package/tui/src/components/design-system/Tabs.tsx +1 -2
  280. package/tui/src/components/design-system/ThemeProvider.tsx +1 -2
  281. package/tui/src/components/design-system/ThemedBox.tsx +1 -2
  282. package/tui/src/components/design-system/ThemedText.tsx +1 -2
  283. package/tui/src/components/diff/DiffDetailView.tsx +1 -2
  284. package/tui/src/components/diff/DiffDialog.tsx +1 -2
  285. package/tui/src/components/diff/DiffFileList.tsx +1 -2
  286. package/tui/src/components/grove/Grove.tsx +0 -1
  287. package/tui/src/components/hooks/HooksConfigMenu.tsx +0 -1
  288. package/tui/src/components/hooks/PromptDialog.tsx +1 -2
  289. package/tui/src/components/hooks/SelectEventMode.tsx +0 -1
  290. package/tui/src/components/hooks/SelectHookMode.tsx +0 -1
  291. package/tui/src/components/hooks/SelectMatcherMode.tsx +0 -1
  292. package/tui/src/components/hooks/ViewHookMode.tsx +0 -1
  293. package/tui/src/components/mcp/CapabilitiesSection.tsx +1 -2
  294. package/tui/src/components/mcp/ElicitationDialog.tsx +0 -1
  295. package/tui/src/components/mcp/MCPAgentServerMenu.tsx +1 -2
  296. package/tui/src/components/mcp/MCPListPanel.tsx +0 -1
  297. package/tui/src/components/mcp/MCPReconnect.tsx +1 -2
  298. package/tui/src/components/mcp/MCPRemoteServerMenu.tsx +2 -3
  299. package/tui/src/components/mcp/MCPSettings.tsx +0 -1
  300. package/tui/src/components/mcp/MCPStdioServerMenu.tsx +1 -2
  301. package/tui/src/components/mcp/MCPToolDetailView.tsx +1 -2
  302. package/tui/src/components/mcp/MCPToolListView.tsx +1 -2
  303. package/tui/src/components/mcp/McpParsingWarnings.tsx +0 -1
  304. package/tui/src/components/mcp/utils/reconnectHelpers.tsx +1 -2
  305. package/tui/src/components/memory/MemoryFileSelector.tsx +1 -2
  306. package/tui/src/components/memory/MemoryUpdateNotification.tsx +1 -2
  307. package/tui/src/components/messageActions.tsx +1 -2
  308. package/tui/src/components/messages/AdvisorMessage.tsx +1 -2
  309. package/tui/src/components/messages/AssistantRedactedThinkingMessage.tsx +1 -2
  310. package/tui/src/components/messages/AssistantThinkingMessage.tsx +1 -2
  311. package/tui/src/components/messages/AssistantToolUseMessage.tsx +0 -1
  312. package/tui/src/components/messages/AttachmentMessage.tsx +1 -2
  313. package/tui/src/components/messages/CollapsedReadSearchContent.tsx +1 -2
  314. package/tui/src/components/messages/CompactBoundaryMessage.tsx +1 -2
  315. package/tui/src/components/messages/GroupedToolUseContent.tsx +1 -2
  316. package/tui/src/components/messages/HighlightedThinkingText.tsx +1 -2
  317. package/tui/src/components/messages/HookProgressMessage.tsx +1 -2
  318. package/tui/src/components/messages/PlanApprovalMessage.tsx +1 -2
  319. package/tui/src/components/messages/RateLimitMessage.tsx +1 -2
  320. package/tui/src/components/messages/ShutdownMessage.tsx +1 -2
  321. package/tui/src/components/messages/SystemAPIErrorMessage.tsx +1 -2
  322. package/tui/src/components/messages/SystemTextMessage.tsx +1 -2
  323. package/tui/src/components/messages/TaskAssignmentMessage.tsx +1 -2
  324. package/tui/src/components/messages/UserAgentNotificationMessage.tsx +1 -2
  325. package/tui/src/components/messages/UserBashInputMessage.tsx +1 -2
  326. package/tui/src/components/messages/UserBashOutputMessage.tsx +1 -2
  327. package/tui/src/components/messages/UserChannelMessage.tsx +1 -2
  328. package/tui/src/components/messages/UserCommandMessage.tsx +1 -2
  329. package/tui/src/components/messages/UserImageMessage.tsx +1 -2
  330. package/tui/src/components/messages/UserLocalCommandOutputMessage.tsx +1 -2
  331. package/tui/src/components/messages/UserMemoryInputMessage.tsx +1 -2
  332. package/tui/src/components/messages/UserPlanMessage.tsx +1 -2
  333. package/tui/src/components/messages/UserPromptMessage.tsx +1 -2
  334. package/tui/src/components/messages/UserResourceUpdateMessage.tsx +1 -2
  335. package/tui/src/components/messages/UserTeammateMessage.tsx +1 -2
  336. package/tui/src/components/messages/UserTextMessage.tsx +1 -2
  337. package/tui/src/components/messages/UserToolResultMessage/RejectedPlanMessage.tsx +0 -1
  338. package/tui/src/components/messages/UserToolResultMessage/RejectedToolUseMessage.tsx +1 -2
  339. package/tui/src/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx +1 -2
  340. package/tui/src/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx +1 -2
  341. package/tui/src/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx +1 -2
  342. package/tui/src/components/messages/UserToolResultMessage/UserToolResultMessage.tsx +1 -2
  343. package/tui/src/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx +1 -2
  344. package/tui/src/components/messages/UserToolResultMessage/utils.tsx +0 -1
  345. package/tui/src/components/messages/teamMemCollapsed.tsx +1 -2
  346. package/tui/src/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.tsx +1 -2
  347. package/tui/src/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.tsx +1 -2
  348. package/tui/src/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.tsx +1 -2
  349. package/tui/src/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.tsx +1 -2
  350. package/tui/src/components/permissions/AskUserQuestionPermissionRequest/QuestionView.tsx +1 -2
  351. package/tui/src/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.tsx +1 -2
  352. package/tui/src/components/permissions/BashPermissionRequest/BashPermissionRequest.tsx +1 -2
  353. package/tui/src/components/permissions/BashPermissionRequest/bashToolUseOptions.tsx +0 -1
  354. package/tui/src/components/permissions/ComputerUseApproval/ComputerUseApproval.tsx +0 -1
  355. package/tui/src/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.tsx +0 -1
  356. package/tui/src/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.tsx +0 -1
  357. package/tui/src/components/permissions/FallbackPermissionRequest.tsx +1 -2
  358. package/tui/src/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.tsx +1 -2
  359. package/tui/src/components/permissions/FilePermissionDialog/FilePermissionDialog.tsx +1 -2
  360. package/tui/src/components/permissions/FilePermissionDialog/permissionOptions.tsx +0 -1
  361. package/tui/src/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.tsx +1 -2
  362. package/tui/src/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.tsx +1 -2
  363. package/tui/src/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.tsx +1 -2
  364. package/tui/src/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.tsx +1 -2
  365. package/tui/src/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.tsx +1 -2
  366. package/tui/src/components/permissions/PermissionDecisionDebugInfo.tsx +1 -2
  367. package/tui/src/components/permissions/PermissionDialog.tsx +1 -2
  368. package/tui/src/components/permissions/PermissionExplanation.tsx +1 -2
  369. package/tui/src/components/permissions/PermissionPrompt.tsx +0 -1
  370. package/tui/src/components/permissions/PermissionRequest.tsx +0 -1
  371. package/tui/src/components/permissions/PermissionRequestTitle.tsx +1 -2
  372. package/tui/src/components/permissions/PermissionRuleExplanation.tsx +1 -2
  373. package/tui/src/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.tsx +1 -2
  374. package/tui/src/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.tsx +0 -1
  375. package/tui/src/components/permissions/SandboxPermissionRequest.tsx +0 -1
  376. package/tui/src/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.tsx +1 -2
  377. package/tui/src/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx +0 -1
  378. package/tui/src/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.tsx +0 -1
  379. package/tui/src/components/permissions/WorkerBadge.tsx +1 -2
  380. package/tui/src/components/permissions/WorkerPendingPermission.tsx +1 -2
  381. package/tui/src/components/permissions/rules/AddPermissionRules.tsx +0 -1
  382. package/tui/src/components/permissions/rules/AddWorkspaceDirectory.tsx +0 -1
  383. package/tui/src/components/permissions/rules/PermissionRuleDescription.tsx +1 -2
  384. package/tui/src/components/permissions/rules/PermissionRuleInput.tsx +1 -2
  385. package/tui/src/components/permissions/rules/PermissionRuleList.tsx +0 -1
  386. package/tui/src/components/permissions/rules/RecentDenialsTab.tsx +1 -2
  387. package/tui/src/components/permissions/rules/RemoveWorkspaceDirectory.tsx +0 -1
  388. package/tui/src/components/permissions/rules/WorkspaceTab.tsx +1 -2
  389. package/tui/src/components/permissions/shellPermissionHelpers.tsx +1 -2
  390. package/tui/src/components/sandbox/SandboxConfigTab.tsx +1 -2
  391. package/tui/src/components/sandbox/SandboxDependenciesTab.tsx +1 -2
  392. package/tui/src/components/sandbox/SandboxDoctorSection.tsx +1 -2
  393. package/tui/src/components/sandbox/SandboxOverridesTab.tsx +0 -1
  394. package/tui/src/components/sandbox/SandboxSettings.tsx +0 -1
  395. package/tui/src/components/shell/ExpandShellOutputContext.tsx +1 -2
  396. package/tui/src/components/shell/OutputLine.tsx +1 -2
  397. package/tui/src/components/shell/ShellProgressMessage.tsx +1 -2
  398. package/tui/src/components/shell/ShellTimeDisplay.tsx +1 -2
  399. package/tui/src/components/skills/SkillsMenu.tsx +0 -1
  400. package/tui/src/components/tasks/AsyncAgentDetailDialog.tsx +1 -2
  401. package/tui/src/components/tasks/BackgroundTask.tsx +1 -2
  402. package/tui/src/components/tasks/BackgroundTaskStatus.tsx +1 -2
  403. package/tui/src/components/tasks/BackgroundTasksDialog.tsx +1 -2
  404. package/tui/src/components/tasks/DreamDetailDialog.tsx +1 -2
  405. package/tui/src/components/tasks/InProcessTeammateDetailDialog.tsx +1 -2
  406. package/tui/src/components/tasks/RemoteSessionDetailDialog.tsx +0 -1
  407. package/tui/src/components/tasks/RemoteSessionProgress.tsx +1 -2
  408. package/tui/src/components/tasks/ShellDetailDialog.tsx +1 -2
  409. package/tui/src/components/tasks/ShellProgress.tsx +1 -2
  410. package/tui/src/components/tasks/renderToolActivity.tsx +1 -2
  411. package/tui/src/components/tasks/taskStatusUtils.tsx +1 -2
  412. package/tui/src/components/teams/TeamStatus.tsx +1 -2
  413. package/tui/src/components/teams/TeamsDialog.tsx +1 -2
  414. package/tui/src/components/ui/OrderedList.tsx +1 -2
  415. package/tui/src/components/ui/OrderedListItem.tsx +1 -2
  416. package/tui/src/components/ui/TreeSelect.tsx +1 -2
  417. package/tui/src/components/wizard/WizardDialogLayout.tsx +1 -2
  418. package/tui/src/components/wizard/WizardNavigationFooter.tsx +1 -2
  419. package/tui/src/components/wizard/WizardProvider.tsx +1 -2
  420. package/tui/src/context/QueuedMessageContext.tsx +1 -2
  421. package/tui/src/context/fpsMetrics.tsx +1 -2
  422. package/tui/src/context/mailbox.tsx +1 -2
  423. package/tui/src/context/modalContext.tsx +1 -2
  424. package/tui/src/context/notifications.tsx +1 -2
  425. package/tui/src/context/overlayContext.tsx +1 -2
  426. package/tui/src/context/promptOverlayContext.tsx +1 -2
  427. package/tui/src/context/stats.tsx +1 -2
  428. package/tui/src/context/voice.tsx +1 -2
  429. package/tui/src/dialogLaunchers.tsx +0 -1
  430. package/tui/src/entrypoints/cli.tsx +0 -1
  431. package/tui/src/hooks/notifs/useCanSwitchToExistingSubscription.tsx +0 -1
  432. package/tui/src/hooks/notifs/useDeprecationWarningNotification.tsx +1 -2
  433. package/tui/src/hooks/notifs/useFastModeNotification.tsx +1 -2
  434. package/tui/src/hooks/notifs/useIDEStatusIndicator.tsx +1 -2
  435. package/tui/src/hooks/notifs/useInstallMessages.tsx +1 -2
  436. package/tui/src/hooks/notifs/useLspInitializationNotification.tsx +1 -2
  437. package/tui/src/hooks/notifs/useMcpConnectivityStatus.tsx +0 -1
  438. package/tui/src/hooks/notifs/useModelMigrationNotifications.tsx +1 -2
  439. package/tui/src/hooks/notifs/useNpmDeprecationNotification.tsx +1 -2
  440. package/tui/src/hooks/notifs/usePluginAutoupdateNotification.tsx +1 -2
  441. package/tui/src/hooks/notifs/usePluginInstallationStatus.tsx +1 -2
  442. package/tui/src/hooks/notifs/useRateLimitWarningNotification.tsx +1 -2
  443. package/tui/src/hooks/notifs/useSettingsErrors.tsx +1 -2
  444. package/tui/src/hooks/useApiKeyVerification.ts +7 -7
  445. package/tui/src/hooks/useArrowKeyHistory.tsx +1 -2
  446. package/tui/src/hooks/useCanUseTool.tsx +0 -1
  447. package/tui/src/hooks/useChromeExtensionNotification.tsx +0 -1
  448. package/tui/src/hooks/useClaudeCodeHintRecommendation.tsx +1 -2
  449. package/tui/src/hooks/useCommandKeybindings.tsx +1 -2
  450. package/tui/src/hooks/useGlobalKeybindings.tsx +1 -2
  451. package/tui/src/hooks/useIDEIntegration.tsx +1 -2
  452. package/tui/src/hooks/useLspPluginRecommendation.tsx +1 -2
  453. package/tui/src/hooks/useOfficialMarketplaceNotification.tsx +0 -1
  454. package/tui/src/hooks/usePluginRecommendationBase.tsx +1 -2
  455. package/tui/src/hooks/usePromptsFromClaudeInChrome.tsx +1 -2
  456. package/tui/src/hooks/useReplBridge.tsx +1 -2
  457. package/tui/src/hooks/useTypeahead.tsx +0 -1
  458. package/tui/src/hooks/useVoiceIntegration.tsx +1 -2
  459. package/tui/src/ink/Ansi.tsx +1 -2
  460. package/tui/src/ink/components/AlternateScreen.tsx +1 -2
  461. package/tui/src/ink/components/App.tsx +0 -1
  462. package/tui/src/ink/components/Box.tsx +1 -2
  463. package/tui/src/ink/components/Button.tsx +1 -2
  464. package/tui/src/ink/components/ClockContext.tsx +1 -2
  465. package/tui/src/ink/components/ErrorOverview.tsx +1 -2
  466. package/tui/src/ink/components/Link.tsx +1 -2
  467. package/tui/src/ink/components/Newline.tsx +1 -2
  468. package/tui/src/ink/components/NoSelect.tsx +1 -2
  469. package/tui/src/ink/components/RawAnsi.tsx +1 -2
  470. package/tui/src/ink/components/ScrollBox.tsx +1 -2
  471. package/tui/src/ink/components/Spacer.tsx +1 -2
  472. package/tui/src/ink/components/TerminalFocusContext.tsx +1 -2
  473. package/tui/src/ink/components/TerminalSizeContext.tsx +1 -2
  474. package/tui/src/ink/components/Text.tsx +1 -2
  475. package/tui/src/ink/ink.tsx +0 -1
  476. package/tui/src/interactiveHelpers.tsx +0 -1
  477. package/tui/src/keybindings/KeybindingContext.tsx +1 -2
  478. package/tui/src/keybindings/KeybindingProviderSetup.tsx +1 -2
  479. package/tui/src/main.tsx +0 -1
  480. package/tui/src/moreright/useMoreRight.tsx +1 -2
  481. package/tui/src/replLauncher.tsx +1 -2
  482. package/tui/src/screens/Doctor.tsx +0 -1
  483. package/tui/src/screens/REPL.tsx +0 -1
  484. package/tui/src/screens/ResumeConversation.tsx +0 -1
  485. package/tui/src/services/mcp/MCPConnectionManager.tsx +1 -2
  486. package/tui/src/services/mcp/claudeai.ts +1 -1
  487. package/tui/src/services/mcpServerApproval.tsx +1 -2
  488. package/tui/src/services/oauth/client.ts +16 -14
  489. package/tui/src/services/oauth/getOauthProfile.ts +2 -2
  490. package/tui/src/services/oauth/index.ts +12 -16
  491. package/tui/src/services/policyLimits/index.ts +3 -3
  492. package/tui/src/services/remoteManagedSettings/index.ts +3 -3
  493. package/tui/src/services/remoteManagedSettings/securityCheck.tsx +1 -2
  494. package/tui/src/services/remoteManagedSettings/syncCache.ts +3 -3
  495. package/tui/src/services/voiceStreamSTT.ts +2 -2
  496. package/tui/src/state/AppState.tsx +1 -2
  497. package/tui/src/tasks/InProcessTeammateTask/InProcessTeammateTask.tsx +1 -2
  498. package/tui/src/tasks/LocalAgentTask/LocalAgentTask.tsx +1 -2
  499. package/tui/src/tasks/LocalShellTask/LocalShellTask.tsx +1 -2
  500. package/tui/src/tasks/RemoteAgentTask/RemoteAgentTask.tsx +0 -1
  501. package/tui/src/tools/AgentTool/UI.tsx +1 -2
  502. package/tui/src/tools/BashTool/BashToolResultMessage.tsx +0 -1
  503. package/tui/src/tools/BashTool/UI.tsx +1 -2
  504. package/tui/src/tools/BriefTool/UI.tsx +0 -1
  505. package/tui/src/tools/ConfigTool/ConfigTool.ts +2 -2
  506. package/tui/src/tools/ConfigTool/UI.tsx +1 -2
  507. package/tui/src/tools/EnterPlanModeTool/UI.tsx +0 -1
  508. package/tui/src/tools/EnterWorktreeTool/UI.tsx +1 -2
  509. package/tui/src/tools/ExitPlanModeTool/UI.tsx +0 -1
  510. package/tui/src/tools/ExitWorktreeTool/UI.tsx +1 -2
  511. package/tui/src/tools/FileEditTool/UI.tsx +1 -2
  512. package/tui/src/tools/FileReadTool/UI.tsx +1 -2
  513. package/tui/src/tools/FileWriteTool/UI.tsx +1 -2
  514. package/tui/src/tools/GlobTool/UI.tsx +1 -2
  515. package/tui/src/tools/GrepTool/UI.tsx +1 -2
  516. package/tui/src/tools/LSPTool/UI.tsx +1 -2
  517. package/tui/src/tools/ListMcpResourcesTool/UI.tsx +1 -2
  518. package/tui/src/tools/MCPTool/UI.tsx +1 -2
  519. package/tui/src/tools/NotebookEditTool/UI.tsx +1 -2
  520. package/tui/src/tools/PowerShellTool/UI.tsx +0 -1
  521. package/tui/src/tools/ReadMcpResourceTool/UI.tsx +1 -2
  522. package/tui/src/tools/RemoteTriggerTool/UI.tsx +1 -2
  523. package/tui/src/tools/ScheduleCronTool/UI.tsx +1 -2
  524. package/tui/src/tools/SendMessageTool/UI.tsx +1 -2
  525. package/tui/src/tools/SkillTool/UI.tsx +1 -2
  526. package/tui/src/tools/TaskStopTool/UI.tsx +1 -2
  527. package/tui/src/tools/TeamCreateTool/UI.tsx +1 -2
  528. package/tui/src/tools/TeamDeleteTool/UI.tsx +1 -2
  529. package/tui/src/tools/WebFetchTool/UI.tsx +1 -2
  530. package/tui/src/tools/testing/TestingPermissionTool.tsx +1 -2
  531. package/tui/src/utils/auth.ts +8 -8
  532. package/tui/src/utils/autoRunIssue.tsx +1 -2
  533. package/tui/src/utils/billing.ts +2 -2
  534. package/tui/src/utils/computerUse/toolRendering.tsx +1 -2
  535. package/tui/src/utils/computerUse/wrapper.tsx +0 -1
  536. package/tui/src/utils/exportRenderer.tsx +1 -2
  537. package/tui/src/utils/fastMode.ts +2 -2
  538. package/tui/src/utils/highlightMatch.tsx +1 -2
  539. package/tui/src/utils/http.ts +2 -2
  540. package/tui/src/utils/managedEnv.ts +1 -1
  541. package/tui/src/utils/messages/systemInit.ts +2 -2
  542. package/tui/src/utils/plugins/performStartupChecks.tsx +1 -2
  543. package/tui/src/utils/preflightChecks.tsx +0 -1
  544. package/tui/src/utils/processUserInput/processBashCommand.tsx +1 -2
  545. package/tui/src/utils/processUserInput/processSlashCommand.tsx +0 -1
  546. package/tui/src/utils/staticRender.tsx +1 -2
  547. package/tui/src/utils/status.tsx +1 -2
  548. package/tui/src/utils/statusNoticeDefinitions.tsx +5 -6
  549. package/tui/src/utils/swarm/It2SetupPrompt.tsx +1 -2
  550. package/tui/src/utils/teleport.tsx +0 -1
  551. package/tui/src/voice/voiceModeEnabled.ts +3 -3
  552. package/uv.lock +1 -1
  553. package/src/ummaya/llm/_cc_reference/README.md +0 -104
  554. package/src/ummaya/llm/_cc_reference/api.ts +0 -721
  555. package/src/ummaya/llm/_cc_reference/claude.ts +0 -3422
  556. package/src/ummaya/llm/_cc_reference/client.ts +0 -392
  557. package/src/ummaya/llm/_cc_reference/emptyUsage.ts +0 -25
  558. package/src/ummaya/llm/_cc_reference/errors.ts +0 -1210
  559. package/src/ummaya/llm/_cc_reference/messages.ts +0 -5515
  560. package/src/ummaya/llm/_cc_reference/permissions.ts +0 -1489
  561. package/src/ummaya/llm/_cc_reference/prompts.ts +0 -917
  562. package/src/ummaya/llm/_cc_reference/query.ts +0 -1732
  563. package/src/ummaya/llm/_cc_reference/toolExecution.ts +0 -1748
  564. package/src/ummaya/llm/_cc_reference/toolOrchestration.ts +0 -191
  565. package/src/ummaya/llm/_cc_reference/toolResultStorage.ts +0 -1043
  566. package/src/ummaya/llm/_cc_reference/tools.ts +0 -392
@@ -519,5 +519,4 @@ async function flushAndCleanup(shellCommand: ShellCommand): Promise<void> {
519
519
  } catch (error) {
520
520
  logError(error);
521
521
  }
522
- }
523
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmZWF0dXJlIiwic3RhdCIsIk9VVFBVVF9GSUxFX1RBRyIsIlNUQVRVU19UQUciLCJTVU1NQVJZX1RBRyIsIlRBU0tfSURfVEFHIiwiVEFTS19OT1RJRklDQVRJT05fVEFHIiwiVE9PTF9VU0VfSURfVEFHIiwiYWJvcnRTcGVjdWxhdGlvbiIsIkFwcFN0YXRlIiwiTG9jYWxTaGVsbFNwYXduSW5wdXQiLCJTZXRBcHBTdGF0ZSIsIlRhc2siLCJUYXNrQ29udGV4dCIsIlRhc2tIYW5kbGUiLCJjcmVhdGVUYXNrU3RhdGVCYXNlIiwiQWdlbnRJZCIsInJlZ2lzdGVyQ2xlYW51cCIsInRhaWxGaWxlIiwibG9nRXJyb3IiLCJlbnF1ZXVlUGVuZGluZ05vdGlmaWNhdGlvbiIsIlNoZWxsQ29tbWFuZCIsImV2aWN0VGFza091dHB1dCIsImdldFRhc2tPdXRwdXRQYXRoIiwicmVnaXN0ZXJUYXNrIiwidXBkYXRlVGFza1N0YXRlIiwiZXNjYXBlWG1sIiwiYmFja2dyb3VuZEFnZW50VGFzayIsImlzTG9jYWxBZ2VudFRhc2siLCJpc01haW5TZXNzaW9uVGFzayIsIkJhc2hUYXNrS2luZCIsImlzTG9jYWxTaGVsbFRhc2siLCJMb2NhbFNoZWxsVGFza1N0YXRlIiwia2lsbFRhc2siLCJCQUNLR1JPVU5EX0JBU0hfU1VNTUFSWV9QUkVGSVgiLCJTVEFMTF9DSEVDS19JTlRFUlZBTF9NUyIsIlNUQUxMX1RIUkVTSE9MRF9NUyIsIlNUQUxMX1RBSUxfQllURVMiLCJQUk9NUFRfUEFUVEVSTlMiLCJsb29rc0xpa2VQcm9tcHQiLCJ0YWlsIiwibGFzdExpbmUiLCJ0cmltRW5kIiwic3BsaXQiLCJwb3AiLCJzb21lIiwicCIsInRlc3QiLCJzdGFydFN0YWxsV2F0Y2hkb2ciLCJ0YXNrSWQiLCJkZXNjcmlwdGlvbiIsImtpbmQiLCJ0b29sVXNlSWQiLCJhZ2VudElkIiwib3V0cHV0UGF0aCIsImxhc3RTaXplIiwibGFzdEdyb3d0aCIsIkRhdGUiLCJub3ciLCJjYW5jZWxsZWQiLCJ0aW1lciIsInNldEludGVydmFsIiwidGhlbiIsInMiLCJzaXplIiwiY29udGVudCIsImNsZWFySW50ZXJ2YWwiLCJ0b29sVXNlSWRMaW5lIiwic3VtbWFyeSIsIm1lc3NhZ2UiLCJ2YWx1ZSIsIm1vZGUiLCJwcmlvcml0eSIsInVucmVmIiwiZW5xdWV1ZVNoZWxsTm90aWZpY2F0aW9uIiwic3RhdHVzIiwiZXhpdENvZGUiLCJzZXRBcHBTdGF0ZSIsInNob3VsZEVucXVldWUiLCJ0YXNrIiwibm90aWZpZWQiLCJ1bmRlZmluZWQiLCJMb2NhbFNoZWxsVGFzayIsIm5hbWUiLCJ0eXBlIiwia2lsbCIsInNwYXduU2hlbGxUYXNrIiwiaW5wdXQiLCJzaGVsbENvbW1hbmQiLCJjb250ZXh0IiwiUHJvbWlzZSIsImNvbW1hbmQiLCJ0YXNrT3V0cHV0IiwidW5yZWdpc3RlckNsZWFudXAiLCJ0YXNrU3RhdGUiLCJjb21wbGV0aW9uU3RhdHVzU2VudEluQXR0YWNobWVudCIsImxhc3RSZXBvcnRlZFRvdGFsTGluZXMiLCJpc0JhY2tncm91bmRlZCIsImJhY2tncm91bmQiLCJjYW5jZWxTdGFsbFdhdGNoZG9nIiwicmVzdWx0IiwiZmx1c2hBbmRDbGVhbnVwIiwid2FzS2lsbGVkIiwiY29kZSIsImludGVycnVwdGVkIiwiZW5kVGltZSIsImNsZWFudXAiLCJyZWdpc3RlckZvcmVncm91bmQiLCJiYWNrZ3JvdW5kVGFzayIsImdldEFwcFN0YXRlIiwic3RhdGUiLCJ0YXNrcyIsInByZXYiLCJwcmV2VGFzayIsImNsZWFudXBGbiIsInQiLCJmaW5hbFN0YXR1cyIsImhhc0ZvcmVncm91bmRUYXNrcyIsIk9iamVjdCIsInZhbHVlcyIsImJhY2tncm91bmRBbGwiLCJmb3JlZ3JvdW5kQmFzaFRhc2tJZHMiLCJrZXlzIiwiZmlsdGVyIiwiaWQiLCJmb3JlZ3JvdW5kQWdlbnRUYXNrSWRzIiwiYmFja2dyb3VuZEV4aXN0aW5nRm9yZWdyb3VuZFRhc2siLCJtYXJrVGFza05vdGlmaWVkIiwidW5yZWdpc3RlckZvcmVncm91bmQiLCJyZW1vdmVkIiwicmVzdCIsImZsdXNoIiwiZXJyb3IiXSwic291cmNlcyI6WyJMb2NhbFNoZWxsVGFzay50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmVhdHVyZSB9IGZyb20gJ2J1bjpidW5kbGUnXG5pbXBvcnQgeyBzdGF0IH0gZnJvbSAnZnMvcHJvbWlzZXMnXG5pbXBvcnQge1xuICBPVVRQVVRfRklMRV9UQUcsXG4gIFNUQVRVU19UQUcsXG4gIFNVTU1BUllfVEFHLFxuICBUQVNLX0lEX1RBRyxcbiAgVEFTS19OT1RJRklDQVRJT05fVEFHLFxuICBUT09MX1VTRV9JRF9UQUcsXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cy94bWwuanMnXG5pbXBvcnQgeyBhYm9ydFNwZWN1bGF0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvUHJvbXB0U3VnZ2VzdGlvbi9zcGVjdWxhdGlvbi5qcydcbmltcG9ydCB0eXBlIHsgQXBwU3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZS9BcHBTdGF0ZS5qcydcbmltcG9ydCB0eXBlIHtcbiAgTG9jYWxTaGVsbFNwYXduSW5wdXQsXG4gIFNldEFwcFN0YXRlLFxuICBUYXNrLFxuICBUYXNrQ29udGV4dCxcbiAgVGFza0hhbmRsZSxcbn0gZnJvbSAnLi4vLi4vVGFzay5qcydcbmltcG9ydCB7IGNyZWF0ZVRhc2tTdGF0ZUJhc2UgfSBmcm9tICcuLi8uLi9UYXNrLmpzJ1xuaW1wb3J0IHR5cGUgeyBBZ2VudElkIH0gZnJvbSAnLi4vLi4vdHlwZXMvaWRzLmpzJ1xuaW1wb3J0IHsgcmVnaXN0ZXJDbGVhbnVwIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2xlYW51cFJlZ2lzdHJ5LmpzJ1xuaW1wb3J0IHsgdGFpbEZpbGUgfSBmcm9tICcuLi8uLi91dGlscy9mc09wZXJhdGlvbnMuanMnXG5pbXBvcnQgeyBsb2dFcnJvciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcydcbmltcG9ydCB7IGVucXVldWVQZW5kaW5nTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbHMvbWVzc2FnZVF1ZXVlTWFuYWdlci5qcydcbmltcG9ydCB0eXBlIHsgU2hlbGxDb21tYW5kIH0gZnJvbSAnLi4vLi4vdXRpbHMvU2hlbGxDb21tYW5kLmpzJ1xuaW1wb3J0IHtcbiAgZXZpY3RUYXNrT3V0cHV0LFxuICBnZXRUYXNrT3V0cHV0UGF0aCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvdGFzay9kaXNrT3V0cHV0LmpzJ1xuaW1wb3J0IHsgcmVnaXN0ZXJUYXNrLCB1cGRhdGVUYXNrU3RhdGUgfSBmcm9tICcuLi8uLi91dGlscy90YXNrL2ZyYW1ld29yay5qcydcbmltcG9ydCB7IGVzY2FwZVhtbCB9IGZyb20gJy4uLy4uL3V0aWxzL3htbC5qcydcbmltcG9ydCB7XG4gIGJhY2tncm91bmRBZ2VudFRhc2ssXG4gIGlzTG9jYWxBZ2VudFRhc2ssXG59IGZyb20gJy4uL0xvY2FsQWdlbnRUYXNrL0xvY2FsQWdlbnRUYXNrLmpzJ1xuaW1wb3J0IHsgaXNNYWluU2Vzc2lvblRhc2sgfSBmcm9tICcuLi9Mb2NhbE1haW5TZXNzaW9uVGFzay5qcydcbmltcG9ydCB7XG4gIHR5cGUgQmFzaFRhc2tLaW5kLFxuICBpc0xvY2FsU2hlbGxUYXNrLFxuICB0eXBlIExvY2FsU2hlbGxUYXNrU3RhdGUsXG59IGZyb20gJy4vZ3VhcmRzLmpzJ1xuaW1wb3J0IHsga2lsbFRhc2sgfSBmcm9tICcuL2tpbGxTaGVsbFRhc2tzLmpzJ1xuXG4vKiogUHJlZml4IHRoYXQgaWRlbnRpZmllcyBhIExvY2FsU2hlbGxUYXNrIHN1bW1hcnkgdG8gdGhlIFVJIGNvbGxhcHNlIHRyYW5zZm9ybS4gKi9cbmV4cG9ydCBjb25zdCBCQUNLR1JPVU5EX0JBU0hfU1VNTUFSWV9QUkVGSVggPSAnQmFja2dyb3VuZCBjb21tYW5kICdcblxuY29uc3QgU1RBTExfQ0hFQ0tfSU5URVJWQUxfTVMgPSA1XzAwMFxuY29uc3QgU1RBTExfVEhSRVNIT0xEX01TID0gNDVfMDAwXG5jb25zdCBTVEFMTF9UQUlMX0JZVEVTID0gMTAyNFxuXG4vLyBMYXN0LWxpbmUgcGF0dGVybnMgdGhhdCBzdWdnZXN0IGEgY29tbWFuZCBpcyBibG9ja2VkIHdhaXRpbmcgZm9yIGtleWJvYXJkXG4vLyBpbnB1dC4gVXNlZCB0byBnYXRlIHRoZSBzdGFsbCBub3RpZmljYXRpb24g4oCUIHdlIHN0YXkgc2lsZW50IG9uIGNvbW1hbmRzIHRoYXRcbi8vIGFyZSBtZXJlbHkgc2xvdyAoZ2l0IGxvZyAtUywgbG9uZyBidWlsZHMpIGFuZCBvbmx5IG5vdGlmeSB3aGVuIHRoZSB0YWlsXG4vLyBsb29rcyBsaWtlIGFuIGludGVyYWN0aXZlIHByb21wdCB0aGUgbW9kZWwgY2FuIGFjdCBvbi4gU2VlIENDLTExNzUuXG5jb25zdCBQUk9NUFRfUEFUVEVSTlMgPSBbXG4gIC9cXCh5XFwvblxcKS9pLCAvLyAoWS9uKSwgKHkvTilcbiAgL1xcW3lcXC9uXFxdL2ksIC8vIFtZL25dLCBbeS9OXVxuICAvXFwoeWVzXFwvbm9cXCkvaSxcbiAgL1xcYig/OkRvIHlvdXxXb3VsZCB5b3V8U2hhbGwgSXxBcmUgeW91IHN1cmV8UmVhZHkgdG8pXFxiLipcXD8gKiQvaSwgLy8gZGlyZWN0ZWQgcXVlc3Rpb25zXG4gIC9QcmVzcyAoYW55IGtleXxFbnRlcikvaSxcbiAgL0NvbnRpbnVlXFw/L2ksXG4gIC9PdmVyd3JpdGVcXD8vaSxcbl1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvb2tzTGlrZVByb21wdCh0YWlsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgbGFzdExpbmUgPSB0YWlsLnRyaW1FbmQoKS5zcGxpdCgnXFxuJykucG9wKCkgPz8gJydcbiAgcmV0dXJuIFBST01QVF9QQVRURVJOUy5zb21lKHAgPT4gcC50ZXN0KGxhc3RMaW5lKSlcbn1cblxuLy8gT3V0cHV0LXNpZGUgYW5hbG9nIG9mIHBlZWtGb3JTdGRpbkRhdGEgKHV0aWxzL3Byb2Nlc3MudHMpOiBmaXJlIGEgb25lLXNob3Rcbi8vIG5vdGlmaWNhdGlvbiBpZiBvdXRwdXQgc3RvcHMgZ3Jvd2luZyBhbmQgdGhlIHRhaWwgbG9va3MgbGlrZSBhIHByb21wdC5cbmZ1bmN0aW9uIHN0YXJ0U3RhbGxXYXRjaGRvZyhcbiAgdGFza0lkOiBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIGtpbmQ6IEJhc2hUYXNrS2luZCB8IHVuZGVmaW5lZCxcbiAgdG9vbFVzZUlkPzogc3RyaW5nLFxuICBhZ2VudElkPzogQWdlbnRJZCxcbik6ICgpID0+IHZvaWQge1xuICBpZiAoa2luZCA9PT0gJ21vbml0b3InKSByZXR1cm4gKCkgPT4ge31cbiAgY29uc3Qgb3V0cHV0UGF0aCA9IGdldFRhc2tPdXRwdXRQYXRoKHRhc2tJZClcbiAgbGV0IGxhc3RTaXplID0gMFxuICBsZXQgbGFzdEdyb3d0aCA9IERhdGUubm93KClcbiAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlXG5cbiAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgdm9pZCBzdGF0KG91dHB1dFBhdGgpLnRoZW4oXG4gICAgICBzID0+IHtcbiAgICAgICAgaWYgKHMuc2l6ZSA+IGxhc3RTaXplKSB7XG4gICAgICAgICAgbGFzdFNpemUgPSBzLnNpemVcbiAgICAgICAgICBsYXN0R3Jvd3RoID0gRGF0ZS5ub3coKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChEYXRlLm5vdygpIC0gbGFzdEdyb3d0aCA8IFNUQUxMX1RIUkVTSE9MRF9NUykgcmV0dXJuXG4gICAgICAgIHZvaWQgdGFpbEZpbGUob3V0cHV0UGF0aCwgU1RBTExfVEFJTF9CWVRFUykudGhlbihcbiAgICAgICAgICAoeyBjb250ZW50IH0pID0+IHtcbiAgICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVyblxuICAgICAgICAgICAgaWYgKCFsb29rc0xpa2VQcm9tcHQoY29udGVudCkpIHtcbiAgICAgICAgICAgICAgLy8gTm90IGEgcHJvbXB0IOKAlCBrZWVwIHdhdGNoaW5nLiBSZXNldCBzbyB0aGUgbmV4dCBjaGVjayBpc1xuICAgICAgICAgICAgICAvLyA0NXMgb3V0IGluc3RlYWQgb2YgcmUtcmVhZGluZyB0aGUgdGFpbCBvbiBldmVyeSB0aWNrLlxuICAgICAgICAgICAgICBsYXN0R3Jvd3RoID0gRGF0ZS5ub3coKVxuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIExhdGNoIGJlZm9yZSB0aGUgYXN5bmMtYm91bmRhcnktdmlzaWJsZSBzaWRlIGVmZmVjdHMgc28gYW5cbiAgICAgICAgICAgIC8vIG92ZXJsYXBwaW5nIHRpY2sncyBjYWxsYmFjayBzZWVzIGNhbmNlbGxlZD10cnVlIGFuZCBiYWlscy5cbiAgICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWVcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpXG4gICAgICAgICAgICBjb25zdCB0b29sVXNlSWRMaW5lID0gdG9vbFVzZUlkXG4gICAgICAgICAgICAgID8gYFxcbjwke1RPT0xfVVNFX0lEX1RBR30+JHt0b29sVXNlSWR9PC8ke1RPT0xfVVNFX0lEX1RBR30+YFxuICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICBjb25zdCBzdW1tYXJ5ID0gYCR7QkFDS0dST1VORF9CQVNIX1NVTU1BUllfUFJFRklYfVwiJHtkZXNjcmlwdGlvbn1cIiBhcHBlYXJzIHRvIGJlIHdhaXRpbmcgZm9yIGludGVyYWN0aXZlIGlucHV0YFxuICAgICAgICAgICAgLy8gTm8gPHN0YXR1cz4gdGFnIOKAlCBwcmludC50cyB0cmVhdHMgPHN0YXR1cz4gYXMgYSB0ZXJtaW5hbFxuICAgICAgICAgICAgLy8gc2lnbmFsIGFuZCBhbiB1bmtub3duIHZhbHVlIGZhbGxzIHRocm91Z2ggdG8gJ2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAvLyBmYWxzZWx5IGNsb3NpbmcgdGhlIHRhc2sgZm9yIFNESyBjb25zdW1lcnMuIFN0YXR1c2xlc3NcbiAgICAgICAgICAgIC8vIG5vdGlmaWNhdGlvbnMgYXJlIHNraXBwZWQgYnkgdGhlIFNESyBlbWl0dGVyIChwcm9ncmVzcyBwaW5nKS5cbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgPCR7VEFTS19OT1RJRklDQVRJT05fVEFHfT5cbjwke1RBU0tfSURfVEFHfT4ke3Rhc2tJZH08LyR7VEFTS19JRF9UQUd9PiR7dG9vbFVzZUlkTGluZX1cbjwke09VVFBVVF9GSUxFX1RBR30+JHtvdXRwdXRQYXRofTwvJHtPVVRQVVRfRklMRV9UQUd9PlxuPCR7U1VNTUFSWV9UQUd9PiR7ZXNjYXBlWG1sKHN1bW1hcnkpfTwvJHtTVU1NQVJZX1RBR30+XG48LyR7VEFTS19OT1RJRklDQVRJT05fVEFHfT5cbkxhc3Qgb3V0cHV0OlxuJHtjb250ZW50LnRyaW1FbmQoKX1cblxuVGhlIGNvbW1hbmQgaXMgbGlrZWx5IGJsb2NrZWQgb24gYW4gaW50ZXJhY3RpdmUgcHJvbXB0LiBLaWxsIHRoaXMgdGFzayBhbmQgcmUtcnVuIHdpdGggcGlwZWQgaW5wdXQgKGUuZy4sIFxcYGVjaG8geSB8IGNvbW1hbmRcXGApIG9yIGEgbm9uLWludGVyYWN0aXZlIGZsYWcgaWYgb25lIGV4aXN0cy5gXG4gICAgICAgICAgICBlbnF1ZXVlUGVuZGluZ05vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIHZhbHVlOiBtZXNzYWdlLFxuICAgICAgICAgICAgICBtb2RlOiAndGFzay1ub3RpZmljYXRpb24nLFxuICAgICAgICAgICAgICBwcmlvcml0eTogJ25leHQnLFxuICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHt9LFxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgKCkgPT4ge30sIC8vIEZpbGUgbWF5IG5vdCBleGlzdCB5ZXRcbiAgICApXG4gIH0sIFNUQUxMX0NIRUNLX0lOVEVSVkFMX01TKVxuICB0aW1lci51bnJlZigpXG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBjYW5jZWxsZWQgPSB0cnVlXG4gICAgY2xlYXJJbnRlcnZhbCh0aW1lcilcbiAgfVxufVxuXG5mdW5jdGlvbiBlbnF1ZXVlU2hlbGxOb3RpZmljYXRpb24oXG4gIHRhc2tJZDogc3RyaW5nLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBzdGF0dXM6ICdjb21wbGV0ZWQnIHwgJ2ZhaWxlZCcgfCAna2lsbGVkJyxcbiAgZXhpdENvZGU6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgc2V0QXBwU3RhdGU6IFNldEFwcFN0YXRlLFxuICB0b29sVXNlSWQ/OiBzdHJpbmcsXG4gIGtpbmQ6IEJhc2hUYXNrS2luZCA9ICdiYXNoJyxcbiAgYWdlbnRJZD86IEFnZW50SWQsXG4pOiB2b2lkIHtcbiAgLy8gQXRvbWljYWxseSBjaGVjayBhbmQgc2V0IG5vdGlmaWVkIGZsYWcgdG8gcHJldmVudCBkdXBsaWNhdGUgbm90aWZpY2F0aW9ucy5cbiAgLy8gSWYgdGhlIHRhc2sgd2FzIGFscmVhZHkgbWFya2VkIGFzIG5vdGlmaWVkIChlLmcuLCBieSBUYXNrU3RvcFRvb2wpLCBza2lwXG4gIC8vIGVucXVldWVpbmcgdG8gYXZvaWQgc2VuZGluZyByZWR1bmRhbnQgbWVzc2FnZXMgdG8gdGhlIG1vZGVsLlxuICBsZXQgc2hvdWxkRW5xdWV1ZSA9IGZhbHNlXG4gIHVwZGF0ZVRhc2tTdGF0ZSh0YXNrSWQsIHNldEFwcFN0YXRlLCB0YXNrID0+IHtcbiAgICBpZiAodGFzay5ub3RpZmllZCkge1xuICAgICAgcmV0dXJuIHRhc2tcbiAgICB9XG4gICAgc2hvdWxkRW5xdWV1ZSA9IHRydWVcbiAgICByZXR1cm4geyAuLi50YXNrLCBub3RpZmllZDogdHJ1ZSB9XG4gIH0pXG5cbiAgaWYgKCFzaG91bGRFbnF1ZXVlKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBBYm9ydCBhbnkgYWN0aXZlIHNwZWN1bGF0aW9uIOKAlCBiYWNrZ3JvdW5kIHRhc2sgc3RhdGUgY2hhbmdlZCwgc28gc3BlY3VsYXRlZFxuICAvLyByZXN1bHRzIG1heSByZWZlcmVuY2Ugc3RhbGUgdGFzayBvdXRwdXQuIFRoZSBwcm9tcHQgc3VnZ2VzdGlvbiB0ZXh0IGlzXG4gIC8vIHByZXNlcnZlZDsgb25seSB0aGUgcHJlLWNvbXB1dGVkIHJlc3BvbnNlIGlzIGRpc2NhcmRlZC5cbiAgYWJvcnRTcGVjdWxhdGlvbihzZXRBcHBTdGF0ZSlcblxuICBsZXQgc3VtbWFyeTogc3RyaW5nXG4gIGlmIChmZWF0dXJlKCdNT05JVE9SX1RPT0wnKSAmJiBraW5kID09PSAnbW9uaXRvcicpIHtcbiAgICAvLyBNb25pdG9yIGlzIHN0cmVhbWluZy1vbmx5IChwb3N0LSMyMjc2NCkg4oCUIHRoZSBzY3JpcHQgZXhpdGluZyBtZWFuc1xuICAgIC8vIHRoZSBzdHJlYW0gZW5kZWQsIG5vdCBcImNvbmRpdGlvbiBtZXRcIi4gRGlzdGluY3QgZnJvbSB0aGUgYmFzaCBwcmVmaXhcbiAgICAvLyBzbyBNb25pdG9yIGNvbXBsZXRpb25zIGRvbid0IGZvbGQgaW50byB0aGUgXCJOIGJhY2tncm91bmQgY29tbWFuZHNcbiAgICAvLyBjb21wbGV0ZWRcIiBjb2xsYXBzZS5cbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgc3VtbWFyeSA9IGBNb25pdG9yIFwiJHtkZXNjcmlwdGlvbn1cIiBzdHJlYW0gZW5kZWRgXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICBzdW1tYXJ5ID0gYE1vbml0b3IgXCIke2Rlc2NyaXB0aW9ufVwiIHNjcmlwdCBmYWlsZWQke2V4aXRDb2RlICE9PSB1bmRlZmluZWQgPyBgIChleGl0ICR7ZXhpdENvZGV9KWAgOiAnJ31gXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdraWxsZWQnOlxuICAgICAgICBzdW1tYXJ5ID0gYE1vbml0b3IgXCIke2Rlc2NyaXB0aW9ufVwiIHN0b3BwZWRgXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICBzdW1tYXJ5ID0gYCR7QkFDS0dST1VORF9CQVNIX1NVTU1BUllfUFJFRklYfVwiJHtkZXNjcmlwdGlvbn1cIiBjb21wbGV0ZWQke2V4aXRDb2RlICE9PSB1bmRlZmluZWQgPyBgIChleGl0IGNvZGUgJHtleGl0Q29kZX0pYCA6ICcnfWBcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHN1bW1hcnkgPSBgJHtCQUNLR1JPVU5EX0JBU0hfU1VNTUFSWV9QUkVGSVh9XCIke2Rlc2NyaXB0aW9ufVwiIGZhaWxlZCR7ZXhpdENvZGUgIT09IHVuZGVmaW5lZCA/IGAgd2l0aCBleGl0IGNvZGUgJHtleGl0Q29kZX1gIDogJyd9YFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAna2lsbGVkJzpcbiAgICAgICAgc3VtbWFyeSA9IGAke0JBQ0tHUk9VTkRfQkFTSF9TVU1NQVJZX1BSRUZJWH1cIiR7ZGVzY3JpcHRpb259XCIgd2FzIHN0b3BwZWRgXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3V0cHV0UGF0aCA9IGdldFRhc2tPdXRwdXRQYXRoKHRhc2tJZClcbiAgY29uc3QgdG9vbFVzZUlkTGluZSA9IHRvb2xVc2VJZFxuICAgID8gYFxcbjwke1RPT0xfVVNFX0lEX1RBR30+JHt0b29sVXNlSWR9PC8ke1RPT0xfVVNFX0lEX1RBR30+YFxuICAgIDogJydcbiAgY29uc3QgbWVzc2FnZSA9IGA8JHtUQVNLX05PVElGSUNBVElPTl9UQUd9PlxuPCR7VEFTS19JRF9UQUd9PiR7dGFza0lkfTwvJHtUQVNLX0lEX1RBR30+JHt0b29sVXNlSWRMaW5lfVxuPCR7T1VUUFVUX0ZJTEVfVEFHfT4ke291dHB1dFBhdGh9PC8ke09VVFBVVF9GSUxFX1RBR30+XG48JHtTVEFUVVNfVEFHfT4ke3N0YXR1c308LyR7U1RBVFVTX1RBR30+XG48JHtTVU1NQVJZX1RBR30+JHtlc2NhcGVYbWwoc3VtbWFyeSl9PC8ke1NVTU1BUllfVEFHfT5cbjwvJHtUQVNLX05PVElGSUNBVElPTl9UQUd9PmBcblxuICBlbnF1ZXVlUGVuZGluZ05vdGlmaWNhdGlvbih7XG4gICAgdmFsdWU6IG1lc3NhZ2UsXG4gICAgbW9kZTogJ3Rhc2stbm90aWZpY2F0aW9uJyxcbiAgICBwcmlvcml0eTogZmVhdHVyZSgnTU9OSVRPUl9UT09MJykgPyAnbmV4dCcgOiAnbGF0ZXInLFxuICAgIGFnZW50SWQsXG4gIH0pXG59XG5cbmV4cG9ydCBjb25zdCBMb2NhbFNoZWxsVGFzazogVGFzayA9IHtcbiAgbmFtZTogJ0xvY2FsU2hlbGxUYXNrJyxcbiAgdHlwZTogJ2xvY2FsX2Jhc2gnLFxuICBhc3luYyBraWxsKHRhc2tJZCwgc2V0QXBwU3RhdGUpIHtcbiAgICBraWxsVGFzayh0YXNrSWQsIHNldEFwcFN0YXRlKVxuICB9LFxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3Bhd25TaGVsbFRhc2soXG4gIGlucHV0OiBMb2NhbFNoZWxsU3Bhd25JbnB1dCAmIHsgc2hlbGxDb21tYW5kOiBTaGVsbENvbW1hbmQgfSxcbiAgY29udGV4dDogVGFza0NvbnRleHQsXG4pOiBQcm9taXNlPFRhc2tIYW5kbGU+IHtcbiAgY29uc3QgeyBjb21tYW5kLCBkZXNjcmlwdGlvbiwgc2hlbGxDb21tYW5kLCB0b29sVXNlSWQsIGFnZW50SWQsIGtpbmQgfSA9IGlucHV0XG4gIGNvbnN0IHsgc2V0QXBwU3RhdGUgfSA9IGNvbnRleHRcblxuICAvLyBUYXNrT3V0cHV0IG93bnMgdGhlIGRhdGEg4oCUIHVzZSBpdHMgdGFza0lkIHNvIGRpc2sgd3JpdGVzIGFyZSBjb25zaXN0ZW50XG4gIGNvbnN0IHsgdGFza091dHB1dCB9ID0gc2hlbGxDb21tYW5kXG4gIGNvbnN0IHRhc2tJZCA9IHRhc2tPdXRwdXQudGFza0lkXG5cbiAgY29uc3QgdW5yZWdpc3RlckNsZWFudXAgPSByZWdpc3RlckNsZWFudXAoYXN5bmMgKCkgPT4ge1xuICAgIGtpbGxUYXNrKHRhc2tJZCwgc2V0QXBwU3RhdGUpXG4gIH0pXG5cbiAgY29uc3QgdGFza1N0YXRlOiBMb2NhbFNoZWxsVGFza1N0YXRlID0ge1xuICAgIC4uLmNyZWF0ZVRhc2tTdGF0ZUJhc2UodGFza0lkLCAnbG9jYWxfYmFzaCcsIGRlc2NyaXB0aW9uLCB0b29sVXNlSWQpLFxuICAgIHR5cGU6ICdsb2NhbF9iYXNoJyxcbiAgICBzdGF0dXM6ICdydW5uaW5nJyxcbiAgICBjb21tYW5kLFxuICAgIGNvbXBsZXRpb25TdGF0dXNTZW50SW5BdHRhY2htZW50OiBmYWxzZSxcbiAgICBzaGVsbENvbW1hbmQsXG4gICAgdW5yZWdpc3RlckNsZWFudXAsXG4gICAgbGFzdFJlcG9ydGVkVG90YWxMaW5lczogMCxcbiAgICBpc0JhY2tncm91bmRlZDogdHJ1ZSxcbiAgICBhZ2VudElkLFxuICAgIGtpbmQsXG4gIH1cblxuICByZWdpc3RlclRhc2sodGFza1N0YXRlLCBzZXRBcHBTdGF0ZSlcblxuICAvLyBEYXRhIGZsb3dzIHRocm91Z2ggVGFza091dHB1dCBhdXRvbWF0aWNhbGx5IOKAlCBubyBzdHJlYW0gbGlzdGVuZXJzIG5lZWRlZC5cbiAgLy8gSnVzdCB0cmFuc2l0aW9uIHRvIGJhY2tncm91bmRlZCBzdGF0ZSBzbyB0aGUgcHJvY2VzcyBrZWVwcyBydW5uaW5nLlxuICBzaGVsbENvbW1hbmQuYmFja2dyb3VuZCh0YXNrSWQpXG5cbiAgY29uc3QgY2FuY2VsU3RhbGxXYXRjaGRvZyA9IHN0YXJ0U3RhbGxXYXRjaGRvZyhcbiAgICB0YXNrSWQsXG4gICAgZGVzY3JpcHRpb24sXG4gICAga2luZCxcbiAgICB0b29sVXNlSWQsXG4gICAgYWdlbnRJZCxcbiAgKVxuXG4gIHZvaWQgc2hlbGxDb21tYW5kLnJlc3VsdC50aGVuKGFzeW5jIHJlc3VsdCA9PiB7XG4gICAgY2FuY2VsU3RhbGxXYXRjaGRvZygpXG4gICAgYXdhaXQgZmx1c2hBbmRDbGVhbnVwKHNoZWxsQ29tbWFuZClcbiAgICBsZXQgd2FzS2lsbGVkID0gZmFsc2VcblxuICAgIHVwZGF0ZVRhc2tTdGF0ZTxMb2NhbFNoZWxsVGFza1N0YXRlPih0YXNrSWQsIHNldEFwcFN0YXRlLCB0YXNrID0+IHtcbiAgICAgIGlmICh0YXNrLnN0YXR1cyA9PT0gJ2tpbGxlZCcpIHtcbiAgICAgICAgd2FzS2lsbGVkID0gdHJ1ZVxuICAgICAgICByZXR1cm4gdGFza1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50YXNrLFxuICAgICAgICBzdGF0dXM6IHJlc3VsdC5jb2RlID09PSAwID8gJ2NvbXBsZXRlZCcgOiAnZmFpbGVkJyxcbiAgICAgICAgcmVzdWx0OiB7IGNvZGU6IHJlc3VsdC5jb2RlLCBpbnRlcnJ1cHRlZDogcmVzdWx0LmludGVycnVwdGVkIH0sXG4gICAgICAgIHNoZWxsQ29tbWFuZDogbnVsbCxcbiAgICAgICAgdW5yZWdpc3RlckNsZWFudXA6IHVuZGVmaW5lZCxcbiAgICAgICAgZW5kVGltZTogRGF0ZS5ub3coKSxcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgZW5xdWV1ZVNoZWxsTm90aWZpY2F0aW9uKFxuICAgICAgdGFza0lkLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICB3YXNLaWxsZWQgPyAna2lsbGVkJyA6IHJlc3VsdC5jb2RlID09PSAwID8gJ2NvbXBsZXRlZCcgOiAnZmFpbGVkJyxcbiAgICAgIHJlc3VsdC5jb2RlLFxuICAgICAgc2V0QXBwU3RhdGUsXG4gICAgICB0b29sVXNlSWQsXG4gICAgICBraW5kLFxuICAgICAgYWdlbnRJZCxcbiAgICApXG5cbiAgICB2b2lkIGV2aWN0VGFza091dHB1dCh0YXNrSWQpXG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICB0YXNrSWQsXG4gICAgY2xlYW51cDogKCkgPT4ge1xuICAgICAgdW5yZWdpc3RlckNsZWFudXAoKVxuICAgIH0sXG4gIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIGZvcmVncm91bmQgdGFzayB0aGF0IGNvdWxkIGJlIGJhY2tncm91bmRlZCBsYXRlci5cbiAqIENhbGxlZCB3aGVuIGEgYmFzaCBjb21tYW5kIGhhcyBiZWVuIHJ1bm5pbmcgbG9uZyBlbm91Z2ggdG8gc2hvdyB0aGUgQmFja2dyb3VuZEhpbnQuXG4gKiBAcmV0dXJucyB0YXNrSWQgZm9yIHRoZSByZWdpc3RlcmVkIHRhc2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRm9yZWdyb3VuZChcbiAgaW5wdXQ6IExvY2FsU2hlbGxTcGF3bklucHV0ICYgeyBzaGVsbENvbW1hbmQ6IFNoZWxsQ29tbWFuZCB9LFxuICBzZXRBcHBTdGF0ZTogU2V0QXBwU3RhdGUsXG4gIHRvb2xVc2VJZD86IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHsgY29tbWFuZCwgZGVzY3JpcHRpb24sIHNoZWxsQ29tbWFuZCwgYWdlbnRJZCB9ID0gaW5wdXRcblxuICBjb25zdCB0YXNrSWQgPSBzaGVsbENvbW1hbmQudGFza091dHB1dC50YXNrSWRcblxuICBjb25zdCB1bnJlZ2lzdGVyQ2xlYW51cCA9IHJlZ2lzdGVyQ2xlYW51cChhc3luYyAoKSA9PiB7XG4gICAga2lsbFRhc2sodGFza0lkLCBzZXRBcHBTdGF0ZSlcbiAgfSlcblxuICBjb25zdCB0YXNrU3RhdGU6IExvY2FsU2hlbGxUYXNrU3RhdGUgPSB7XG4gICAgLi4uY3JlYXRlVGFza1N0YXRlQmFzZSh0YXNrSWQsICdsb2NhbF9iYXNoJywgZGVzY3JpcHRpb24sIHRvb2xVc2VJZCksXG4gICAgdHlwZTogJ2xvY2FsX2Jhc2gnLFxuICAgIHN0YXR1czogJ3J1bm5pbmcnLFxuICAgIGNvbW1hbmQsXG4gICAgY29tcGxldGlvblN0YXR1c1NlbnRJbkF0dGFjaG1lbnQ6IGZhbHNlLFxuICAgIHNoZWxsQ29tbWFuZCxcbiAgICB1bnJlZ2lzdGVyQ2xlYW51cCxcbiAgICBsYXN0UmVwb3J0ZWRUb3RhbExpbmVzOiAwLFxuICAgIGlzQmFja2dyb3VuZGVkOiBmYWxzZSwgLy8gTm90IHlldCBiYWNrZ3JvdW5kZWQgLSBydW5uaW5nIGluIGZvcmVncm91bmRcbiAgICBhZ2VudElkLFxuICB9XG5cbiAgcmVnaXN0ZXJUYXNrKHRhc2tTdGF0ZSwgc2V0QXBwU3RhdGUpXG4gIHJldHVybiB0YXNrSWRcbn1cblxuLyoqXG4gKiBCYWNrZ3JvdW5kIGEgc3BlY2lmaWMgZm9yZWdyb3VuZCB0YXNrLlxuICogQHJldHVybnMgdHJ1ZSBpZiBiYWNrZ3JvdW5kZWQgc3VjY2Vzc2Z1bGx5LCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gYmFja2dyb3VuZFRhc2soXG4gIHRhc2tJZDogc3RyaW5nLFxuICBnZXRBcHBTdGF0ZTogKCkgPT4gQXBwU3RhdGUsXG4gIHNldEFwcFN0YXRlOiBTZXRBcHBTdGF0ZSxcbik6IGJvb2xlYW4ge1xuICAvLyBTdGVwIDE6IEdldCB0aGUgdGFzayBhbmQgc2hlbGwgY29tbWFuZCBmcm9tIGN1cnJlbnQgc3RhdGVcbiAgY29uc3Qgc3RhdGUgPSBnZXRBcHBTdGF0ZSgpXG4gIGNvbnN0IHRhc2sgPSBzdGF0ZS50YXNrc1t0YXNrSWRdXG4gIGlmICghaXNMb2NhbFNoZWxsVGFzayh0YXNrKSB8fCB0YXNrLmlzQmFja2dyb3VuZGVkIHx8ICF0YXNrLnNoZWxsQ29tbWFuZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3Qgc2hlbGxDb21tYW5kID0gdGFzay5zaGVsbENvbW1hbmRcbiAgY29uc3QgZGVzY3JpcHRpb24gPSB0YXNrLmRlc2NyaXB0aW9uXG4gIGNvbnN0IHsgdG9vbFVzZUlkLCBraW5kLCBhZ2VudElkIH0gPSB0YXNrXG5cbiAgLy8gVHJhbnNpdGlvbiB0byBiYWNrZ3JvdW5kZWQg4oCUIFRhc2tPdXRwdXQgY29udGludWVzIHJlY2VpdmluZyBkYXRhIGF1dG9tYXRpY2FsbHlcbiAgaWYgKCFzaGVsbENvbW1hbmQuYmFja2dyb3VuZCh0YXNrSWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBzZXRBcHBTdGF0ZShwcmV2ID0+IHtcbiAgICBjb25zdCBwcmV2VGFzayA9IHByZXYudGFza3NbdGFza0lkXVxuICAgIGlmICghaXNMb2NhbFNoZWxsVGFzayhwcmV2VGFzaykgfHwgcHJldlRhc2suaXNCYWNrZ3JvdW5kZWQpIHtcbiAgICAgIHJldHVybiBwcmV2XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5wcmV2LFxuICAgICAgdGFza3M6IHtcbiAgICAgICAgLi4ucHJldi50YXNrcyxcbiAgICAgICAgW3Rhc2tJZF06IHsgLi4ucHJldlRhc2ssIGlzQmFja2dyb3VuZGVkOiB0cnVlIH0sXG4gICAgICB9LFxuICAgIH1cbiAgfSlcblxuICBjb25zdCBjYW5jZWxTdGFsbFdhdGNoZG9nID0gc3RhcnRTdGFsbFdhdGNoZG9nKFxuICAgIHRhc2tJZCxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBraW5kLFxuICAgIHRvb2xVc2VJZCxcbiAgICBhZ2VudElkLFxuICApXG5cbiAgLy8gU2V0IHVwIHJlc3VsdCBoYW5kbGVyXG4gIHZvaWQgc2hlbGxDb21tYW5kLnJlc3VsdC50aGVuKGFzeW5jIHJlc3VsdCA9PiB7XG4gICAgY2FuY2VsU3RhbGxXYXRjaGRvZygpXG4gICAgYXdhaXQgZmx1c2hBbmRDbGVhbnVwKHNoZWxsQ29tbWFuZClcbiAgICBsZXQgd2FzS2lsbGVkID0gZmFsc2VcbiAgICBsZXQgY2xlYW51cEZuOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWRcblxuICAgIHVwZGF0ZVRhc2tTdGF0ZTxMb2NhbFNoZWxsVGFza1N0YXRlPih0YXNrSWQsIHNldEFwcFN0YXRlLCB0ID0+IHtcbiAgICAgIGlmICh0LnN0YXR1cyA9PT0gJ2tpbGxlZCcpIHtcbiAgICAgICAgd2FzS2lsbGVkID0gdHJ1ZVxuICAgICAgICByZXR1cm4gdFxuICAgICAgfVxuXG4gICAgICAvLyBDYXB0dXJlIGNsZWFudXAgZnVuY3Rpb24gdG8gY2FsbCBvdXRzaWRlIG9mIHVwZGF0ZXJcbiAgICAgIGNsZWFudXBGbiA9IHQudW5yZWdpc3RlckNsZWFudXBcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udCxcbiAgICAgICAgc3RhdHVzOiByZXN1bHQuY29kZSA9PT0gMCA/ICdjb21wbGV0ZWQnIDogJ2ZhaWxlZCcsXG4gICAgICAgIHJlc3VsdDogeyBjb2RlOiByZXN1bHQuY29kZSwgaW50ZXJydXB0ZWQ6IHJlc3VsdC5pbnRlcnJ1cHRlZCB9LFxuICAgICAgICBzaGVsbENvbW1hbmQ6IG51bGwsXG4gICAgICAgIHVucmVnaXN0ZXJDbGVhbnVwOiB1bmRlZmluZWQsXG4gICAgICAgIGVuZFRpbWU6IERhdGUubm93KCksXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIENhbGwgY2xlYW51cCBvdXRzaWRlIG9mIHRoZSBzdGF0ZSB1cGRhdGVyIChhdm9pZCBzaWRlIGVmZmVjdHMgaW4gdXBkYXRlcilcbiAgICBjbGVhbnVwRm4/LigpXG5cbiAgICBpZiAod2FzS2lsbGVkKSB7XG4gICAgICBlbnF1ZXVlU2hlbGxOb3RpZmljYXRpb24oXG4gICAgICAgIHRhc2tJZCxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICdraWxsZWQnLFxuICAgICAgICByZXN1bHQuY29kZSxcbiAgICAgICAgc2V0QXBwU3RhdGUsXG4gICAgICAgIHRvb2xVc2VJZCxcbiAgICAgICAga2luZCxcbiAgICAgICAgYWdlbnRJZCxcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmluYWxTdGF0dXMgPSByZXN1bHQuY29kZSA9PT0gMCA/ICdjb21wbGV0ZWQnIDogJ2ZhaWxlZCdcbiAgICAgIGVucXVldWVTaGVsbE5vdGlmaWNhdGlvbihcbiAgICAgICAgdGFza0lkLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgZmluYWxTdGF0dXMsXG4gICAgICAgIHJlc3VsdC5jb2RlLFxuICAgICAgICBzZXRBcHBTdGF0ZSxcbiAgICAgICAgdG9vbFVzZUlkLFxuICAgICAgICBraW5kLFxuICAgICAgICBhZ2VudElkLFxuICAgICAgKVxuICAgIH1cblxuICAgIHZvaWQgZXZpY3RUYXNrT3V0cHV0KHRhc2tJZClcbiAgfSlcblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEJhY2tncm91bmQgQUxMIGZvcmVncm91bmQgdGFza3MgKGJhc2ggY29tbWFuZHMgYW5kIGFnZW50cykuXG4gKiBDYWxsZWQgd2hlbiB1c2VyIHByZXNzZXMgQ3RybCtCIHRvIGJhY2tncm91bmQgYWxsIHJ1bm5pbmcgdGFza3MuXG4gKi9cbi8qKlxuICogQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBmb3JlZ3JvdW5kIHRhc2tzIChiYXNoIG9yIGFnZW50KSB0aGF0IGNhbiBiZSBiYWNrZ3JvdW5kZWQuXG4gKiBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIEN0cmwrQiBzaG91bGQgYmFja2dyb3VuZCBleGlzdGluZyB0YXNrcyB2cy4gYmFja2dyb3VuZCB0aGUgc2Vzc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0ZvcmVncm91bmRUYXNrcyhzdGF0ZTogQXBwU3RhdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoc3RhdGUudGFza3MpLnNvbWUodGFzayA9PiB7XG4gICAgaWYgKGlzTG9jYWxTaGVsbFRhc2sodGFzaykgJiYgIXRhc2suaXNCYWNrZ3JvdW5kZWQgJiYgdGFzay5zaGVsbENvbW1hbmQpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIEV4Y2x1ZGUgbWFpbiBzZXNzaW9uIHRhc2tzIC0gdGhleSBkaXNwbGF5IGluIHRoZSBtYWluIHZpZXcsIG5vdCBhcyBmb3JlZ3JvdW5kIHRhc2tzXG4gICAgaWYgKFxuICAgICAgaXNMb2NhbEFnZW50VGFzayh0YXNrKSAmJlxuICAgICAgIXRhc2suaXNCYWNrZ3JvdW5kZWQgJiZcbiAgICAgICFpc01haW5TZXNzaW9uVGFzayh0YXNrKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrZ3JvdW5kQWxsKFxuICBnZXRBcHBTdGF0ZTogKCkgPT4gQXBwU3RhdGUsXG4gIHNldEFwcFN0YXRlOiBTZXRBcHBTdGF0ZSxcbik6IHZvaWQge1xuICBjb25zdCBzdGF0ZSA9IGdldEFwcFN0YXRlKClcblxuICAvLyBCYWNrZ3JvdW5kIGFsbCBmb3JlZ3JvdW5kIGJhc2ggdGFza3NcbiAgY29uc3QgZm9yZWdyb3VuZEJhc2hUYXNrSWRzID0gT2JqZWN0LmtleXMoc3RhdGUudGFza3MpLmZpbHRlcihpZCA9PiB7XG4gICAgY29uc3QgdGFzayA9IHN0YXRlLnRhc2tzW2lkXVxuICAgIHJldHVybiBpc0xvY2FsU2hlbGxUYXNrKHRhc2spICYmICF0YXNrLmlzQmFja2dyb3VuZGVkICYmIHRhc2suc2hlbGxDb21tYW5kXG4gIH0pXG4gIGZvciAoY29uc3QgdGFza0lkIG9mIGZvcmVncm91bmRCYXNoVGFza0lkcykge1xuICAgIGJhY2tncm91bmRUYXNrKHRhc2tJZCwgZ2V0QXBwU3RhdGUsIHNldEFwcFN0YXRlKVxuICB9XG5cbiAgLy8gQmFja2dyb3VuZCBhbGwgZm9yZWdyb3VuZCBhZ2VudCB0YXNrc1xuICBjb25zdCBmb3JlZ3JvdW5kQWdlbnRUYXNrSWRzID0gT2JqZWN0LmtleXMoc3RhdGUudGFza3MpLmZpbHRlcihpZCA9PiB7XG4gICAgY29uc3QgdGFzayA9IHN0YXRlLnRhc2tzW2lkXVxuICAgIHJldHVybiBpc0xvY2FsQWdlbnRUYXNrKHRhc2spICYmICF0YXNrLmlzQmFja2dyb3VuZGVkXG4gIH0pXG4gIGZvciAoY29uc3QgdGFza0lkIG9mIGZvcmVncm91bmRBZ2VudFRhc2tJZHMpIHtcbiAgICBiYWNrZ3JvdW5kQWdlbnRUYXNrKHRhc2tJZCwgZ2V0QXBwU3RhdGUsIHNldEFwcFN0YXRlKVxuICB9XG59XG5cbi8qKlxuICogQmFja2dyb3VuZCBhbiBhbHJlYWR5LXJlZ2lzdGVyZWQgZm9yZWdyb3VuZCB0YXNrIGluLXBsYWNlLlxuICogVW5saWtlIHNwYXduKCksIHRoaXMgZG9lcyBOT1QgcmUtcmVnaXN0ZXIgdGhlIHRhc2sg4oCUIGl0IGZsaXBzIGlzQmFja2dyb3VuZGVkXG4gKiBvbiB0aGUgZXhpc3RpbmcgcmVnaXN0cmF0aW9uIGFuZCBzZXRzIHVwIGEgY29tcGxldGlvbiBoYW5kbGVyLlxuICogVXNlZCB3aGVuIHRoZSBhdXRvLWJhY2tncm91bmQgdGltZXIgZmlyZXMgYWZ0ZXIgcmVnaXN0ZXJGb3JlZ3JvdW5kKCkgaGFzXG4gKiBhbHJlYWR5IHJlZ2lzdGVyZWQgdGhlIHRhc2sgKGF2b2lkaW5nIGR1cGxpY2F0ZSB0YXNrX3N0YXJ0ZWQgU0RLIGV2ZW50c1xuICogYW5kIGxlYWtlZCBjbGVhbnVwIGNhbGxiYWNrcykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYWNrZ3JvdW5kRXhpc3RpbmdGb3JlZ3JvdW5kVGFzayhcbiAgdGFza0lkOiBzdHJpbmcsXG4gIHNoZWxsQ29tbWFuZDogU2hlbGxDb21tYW5kLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBzZXRBcHBTdGF0ZTogU2V0QXBwU3RhdGUsXG4gIHRvb2xVc2VJZD86IHN0cmluZyxcbik6IGJvb2xlYW4ge1xuICBpZiAoIXNoZWxsQ29tbWFuZC5iYWNrZ3JvdW5kKHRhc2tJZCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGxldCBhZ2VudElkOiBBZ2VudElkIHwgdW5kZWZpbmVkXG4gIHNldEFwcFN0YXRlKHByZXYgPT4ge1xuICAgIGNvbnN0IHByZXZUYXNrID0gcHJldi50YXNrc1t0YXNrSWRdXG4gICAgaWYgKCFpc0xvY2FsU2hlbGxUYXNrKHByZXZUYXNrKSB8fCBwcmV2VGFzay5pc0JhY2tncm91bmRlZCkge1xuICAgICAgcmV0dXJuIHByZXZcbiAgICB9XG4gICAgYWdlbnRJZCA9IHByZXZUYXNrLmFnZW50SWRcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucHJldixcbiAgICAgIHRhc2tzOiB7XG4gICAgICAgIC4uLnByZXYudGFza3MsXG4gICAgICAgIFt0YXNrSWRdOiB7IC4uLnByZXZUYXNrLCBpc0JhY2tncm91bmRlZDogdHJ1ZSB9LFxuICAgICAgfSxcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgY2FuY2VsU3RhbGxXYXRjaGRvZyA9IHN0YXJ0U3RhbGxXYXRjaGRvZyhcbiAgICB0YXNrSWQsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgdW5kZWZpbmVkLFxuICAgIHRvb2xVc2VJZCxcbiAgICBhZ2VudElkLFxuICApXG5cbiAgLy8gU2V0IHVwIHJlc3VsdCBoYW5kbGVyIChtaXJyb3JzIGJhY2tncm91bmRUYXNrJ3MgaGFuZGxlcilcbiAgdm9pZCBzaGVsbENvbW1hbmQucmVzdWx0LnRoZW4oYXN5bmMgcmVzdWx0ID0+IHtcbiAgICBjYW5jZWxTdGFsbFdhdGNoZG9nKClcbiAgICBhd2FpdCBmbHVzaEFuZENsZWFudXAoc2hlbGxDb21tYW5kKVxuICAgIGxldCB3YXNLaWxsZWQgPSBmYWxzZVxuICAgIGxldCBjbGVhbnVwRm46ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZFxuXG4gICAgdXBkYXRlVGFza1N0YXRlPExvY2FsU2hlbGxUYXNrU3RhdGU+KHRhc2tJZCwgc2V0QXBwU3RhdGUsIHQgPT4ge1xuICAgICAgaWYgKHQuc3RhdHVzID09PSAna2lsbGVkJykge1xuICAgICAgICB3YXNLaWxsZWQgPSB0cnVlXG4gICAgICAgIHJldHVybiB0XG4gICAgICB9XG4gICAgICBjbGVhbnVwRm4gPSB0LnVucmVnaXN0ZXJDbGVhbnVwXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50LFxuICAgICAgICBzdGF0dXM6IHJlc3VsdC5jb2RlID09PSAwID8gJ2NvbXBsZXRlZCcgOiAnZmFpbGVkJyxcbiAgICAgICAgcmVzdWx0OiB7IGNvZGU6IHJlc3VsdC5jb2RlLCBpbnRlcnJ1cHRlZDogcmVzdWx0LmludGVycnVwdGVkIH0sXG4gICAgICAgIHNoZWxsQ29tbWFuZDogbnVsbCxcbiAgICAgICAgdW5yZWdpc3RlckNsZWFudXA6IHVuZGVmaW5lZCxcbiAgICAgICAgZW5kVGltZTogRGF0ZS5ub3coKSxcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgY2xlYW51cEZuPy4oKVxuXG4gICAgY29uc3QgZmluYWxTdGF0dXMgPSB3YXNLaWxsZWRcbiAgICAgID8gJ2tpbGxlZCdcbiAgICAgIDogcmVzdWx0LmNvZGUgPT09IDBcbiAgICAgICAgPyAnY29tcGxldGVkJ1xuICAgICAgICA6ICdmYWlsZWQnXG4gICAgZW5xdWV1ZVNoZWxsTm90aWZpY2F0aW9uKFxuICAgICAgdGFza0lkLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBmaW5hbFN0YXR1cyxcbiAgICAgIHJlc3VsdC5jb2RlLFxuICAgICAgc2V0QXBwU3RhdGUsXG4gICAgICB0b29sVXNlSWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBhZ2VudElkLFxuICAgIClcblxuICAgIHZvaWQgZXZpY3RUYXNrT3V0cHV0KHRhc2tJZClcbiAgfSlcblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIE1hcmsgYSB0YXNrIGFzIG5vdGlmaWVkIHRvIHN1cHByZXNzIGEgcGVuZGluZyBlbnF1ZXVlU2hlbGxOb3RpZmljYXRpb24uXG4gKiBVc2VkIHdoZW4gYmFja2dyb3VuZGluZyByYWNlZCB3aXRoIGNvbXBsZXRpb24g4oCUIHRoZSB0b29sIHJlc3VsdCBhbHJlYWR5XG4gKiBjYXJyaWVzIHRoZSBmdWxsIG91dHB1dCwgc28gdGhlIDx0YXNrX25vdGlmaWNhdGlvbj4gd291bGQgYmUgcmVkdW5kYW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya1Rhc2tOb3RpZmllZChcbiAgdGFza0lkOiBzdHJpbmcsXG4gIHNldEFwcFN0YXRlOiBTZXRBcHBTdGF0ZSxcbik6IHZvaWQge1xuICB1cGRhdGVUYXNrU3RhdGUodGFza0lkLCBzZXRBcHBTdGF0ZSwgdCA9PlxuICAgIHQubm90aWZpZWQgPyB0IDogeyAuLi50LCBub3RpZmllZDogdHJ1ZSB9LFxuICApXG59XG5cbi8qKlxuICogVW5yZWdpc3RlciBhIGZvcmVncm91bmQgdGFzayB3aGVuIHRoZSBjb21tYW5kIGNvbXBsZXRlcyB3aXRob3V0IGJlaW5nIGJhY2tncm91bmRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVucmVnaXN0ZXJGb3JlZ3JvdW5kKFxuICB0YXNrSWQ6IHN0cmluZyxcbiAgc2V0QXBwU3RhdGU6IFNldEFwcFN0YXRlLFxuKTogdm9pZCB7XG4gIGxldCBjbGVhbnVwRm46ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZFxuXG4gIHNldEFwcFN0YXRlKHByZXYgPT4ge1xuICAgIGNvbnN0IHRhc2sgPSBwcmV2LnRhc2tzW3Rhc2tJZF1cbiAgICAvLyBPbmx5IHJlbW92ZSBpZiBpdCdzIGEgZm9yZWdyb3VuZCB0YXNrIChub3QgYmFja2dyb3VuZGVkKVxuICAgIGlmICghaXNMb2NhbFNoZWxsVGFzayh0YXNrKSB8fCB0YXNrLmlzQmFja2dyb3VuZGVkKSB7XG4gICAgICByZXR1cm4gcHJldlxuICAgIH1cblxuICAgIC8vIENhcHR1cmUgY2xlYW51cCBmdW5jdGlvbiB0byBjYWxsIG91dHNpZGUgb2YgdXBkYXRlclxuICAgIGNsZWFudXBGbiA9IHRhc2sudW5yZWdpc3RlckNsZWFudXBcblxuICAgIGNvbnN0IHsgW3Rhc2tJZF06IHJlbW92ZWQsIC4uLnJlc3QgfSA9IHByZXYudGFza3NcbiAgICByZXR1cm4geyAuLi5wcmV2LCB0YXNrczogcmVzdCB9XG4gIH0pXG5cbiAgLy8gQ2FsbCBjbGVhbnVwIG91dHNpZGUgb2YgdGhlIHN0YXRlIHVwZGF0ZXIgKGF2b2lkIHNpZGUgZWZmZWN0cyBpbiB1cGRhdGVyKVxuICBjbGVhbnVwRm4/LigpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZsdXNoQW5kQ2xlYW51cChzaGVsbENvbW1hbmQ6IFNoZWxsQ29tbWFuZCk6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGF3YWl0IHNoZWxsQ29tbWFuZC50YXNrT3V0cHV0LmZsdXNoKClcbiAgICBzaGVsbENvbW1hbmQuY2xlYW51cCgpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nRXJyb3IoZXJyb3IpXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsT0FBTyxRQUFRLFlBQVk7QUFDcEMsU0FBU0Ms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
522
+ }
@@ -853,4 +853,3 @@ export const RemoteAgentTask: Task = {
853
853
  export function getRemoteTaskSessionUrl(sessionId: string): string {
854
854
  return getRemoteSessionUrl(sessionId, process.env.SESSION_INGRESS_URL);
855
855
  }
856
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUb29sVXNlQmxvY2siLCJnZXRSZW1vdGVTZXNzaW9uVXJsIiwiT1VUUFVUX0ZJTEVfVEFHIiwiUkVNT1RFX1JFVklFV19QUk9HUkVTU19UQUciLCJSRU1PVEVfUkVWSUVXX1RBRyIsIlNUQVRVU19UQUciLCJTVU1NQVJZX1RBRyIsIlRBU0tfSURfVEFHIiwiVEFTS19OT1RJRklDQVRJT05fVEFHIiwiVEFTS19UWVBFX1RBRyIsIlRPT0xfVVNFX0lEX1RBRyIsIlVMVFJBUExBTl9UQUciLCJTREtBc3Npc3RhbnRNZXNzYWdlIiwiU0RLTWVzc2FnZSIsIlNldEFwcFN0YXRlIiwiVGFzayIsIlRhc2tDb250ZXh0IiwiVGFza1N0YXRlQmFzZSIsImNyZWF0ZVRhc2tTdGF0ZUJhc2UiLCJnZW5lcmF0ZVRhc2tJZCIsIlRvZG9Xcml0ZVRvb2wiLCJCYWNrZ3JvdW5kUmVtb3RlU2Vzc2lvblByZWNvbmRpdGlvbiIsImNoZWNrQmFja2dyb3VuZFJlbW90ZVNlc3Npb25FbGlnaWJpbGl0eSIsImxvZ0ZvckRlYnVnZ2luZyIsImxvZ0Vycm9yIiwiZW5xdWV1ZVBlbmRpbmdOb3RpZmljYXRpb24iLCJleHRyYWN0VGFnIiwiZXh0cmFjdFRleHRDb250ZW50IiwiZW1pdFRhc2tUZXJtaW5hdGVkU2RrIiwiZGVsZXRlUmVtb3RlQWdlbnRNZXRhZGF0YSIsImxpc3RSZW1vdGVBZ2VudE1ldGFkYXRhIiwiUmVtb3RlQWdlbnRNZXRhZGF0YSIsIndyaXRlUmVtb3RlQWdlbnRNZXRhZGF0YSIsImpzb25TdHJpbmdpZnkiLCJhcHBlbmRUYXNrT3V0cHV0IiwiZXZpY3RUYXNrT3V0cHV0IiwiZ2V0VGFza091dHB1dFBhdGgiLCJpbml0VGFza091dHB1dCIsInJlZ2lzdGVyVGFzayIsInVwZGF0ZVRhc2tTdGF0ZSIsImZldGNoU2Vzc2lvbiIsImFyY2hpdmVSZW1vdGVTZXNzaW9uIiwicG9sbFJlbW90ZVNlc3Npb25FdmVudHMiLCJUb2RvTGlzdCIsIlVsdHJhcGxhblBoYXNlIiwiUmVtb3RlQWdlbnRUYXNrU3RhdGUiLCJ0eXBlIiwicmVtb3RlVGFza1R5cGUiLCJSZW1vdGVUYXNrVHlwZSIsInJlbW90ZVRhc2tNZXRhZGF0YSIsIlJlbW90ZVRhc2tNZXRhZGF0YSIsInNlc3Npb25JZCIsImNvbW1hbmQiLCJ0aXRsZSIsInRvZG9MaXN0IiwibG9nIiwiaXNMb25nUnVubmluZyIsInBvbGxTdGFydGVkQXQiLCJpc1JlbW90ZVJldmlldyIsInJldmlld1Byb2dyZXNzIiwic3RhZ2UiLCJidWdzRm91bmQiLCJidWdzVmVyaWZpZWQiLCJidWdzUmVmdXRlZCIsImlzVWx0cmFwbGFuIiwidWx0cmFwbGFuUGhhc2UiLCJFeGNsdWRlIiwiUkVNT1RFX1RBU0tfVFlQRVMiLCJjb25zdCIsImlzUmVtb3RlVGFza1R5cGUiLCJ2IiwiaW5jbHVkZXMiLCJBdXRvZml4UHJSZW1vdGVUYXNrTWV0YWRhdGEiLCJvd25lciIsInJlcG8iLCJwck51bWJlciIsIlJlbW90ZVRhc2tDb21wbGV0aW9uQ2hlY2tlciIsIlByb21pc2UiLCJjb21wbGV0aW9uQ2hlY2tlcnMiLCJNYXAiLCJyZWdpc3RlckNvbXBsZXRpb25DaGVja2VyIiwiY2hlY2tlciIsInNldCIsInBlcnNpc3RSZW1vdGVBZ2VudE1ldGFkYXRhIiwibWV0YSIsInRhc2tJZCIsImUiLCJTdHJpbmciLCJyZW1vdmVSZW1vdGVBZ2VudE1ldGFkYXRhIiwiUmVtb3RlQWdlbnRQcmVjb25kaXRpb25SZXN1bHQiLCJlbGlnaWJsZSIsImVycm9ycyIsImNoZWNrUmVtb3RlQWdlbnRFbGlnaWJpbGl0eSIsInNraXBCdW5kbGUiLCJsZW5ndGgiLCJmb3JtYXRQcmVjb25kaXRpb25FcnJvciIsImVycm9yIiwiZW5xdWV1ZVJlbW90ZU5vdGlmaWNhdGlvbiIsInN0YXR1cyIsInNldEFwcFN0YXRlIiwidG9vbFVzZUlkIiwibWFya1Rhc2tOb3RpZmllZCIsInN0YXR1c1RleHQiLCJ0b29sVXNlSWRMaW5lIiwib3V0cHV0UGF0aCIsIm1lc3NhZ2UiLCJ2YWx1ZSIsIm1vZGUiLCJzaG91bGRFbnF1ZXVlIiwidGFzayIsIm5vdGlmaWVkIiwiZXh0cmFjdFBsYW5Gcm9tTG9nIiwiaSIsIm1zZyIsImZ1bGxUZXh0IiwiY29udGVudCIsInBsYW4iLCJ0cmltIiwiZW5xdWV1ZVVsdHJhcGxhbkZhaWx1cmVOb3RpZmljYXRpb24iLCJyZWFzb24iLCJzZXNzaW9uVXJsIiwiZ2V0UmVtb3RlVGFza1Nlc3Npb25VcmwiLCJleHRyYWN0UmV2aWV3RnJvbUxvZyIsInN1YnR5cGUiLCJ0YWdnZWQiLCJzdGRvdXQiLCJob29rU3Rkb3V0IiwiZmlsdGVyIiwibWFwIiwiam9pbiIsImhvb2tUYWdnZWQiLCJhbGxUZXh0IiwiZXh0cmFjdFJldmlld1RhZ0Zyb21Mb2ciLCJlbnF1ZXVlUmVtb3RlUmV2aWV3Tm90aWZpY2F0aW9uIiwicmV2aWV3Q29udGVudCIsImVucXVldWVSZW1vdGVSZXZpZXdGYWlsdXJlTm90aWZpY2F0aW9uIiwiZXh0cmFjdFRvZG9MaXN0RnJvbUxvZyIsInRvZG9MaXN0TWVzc2FnZSIsImZpbmRMYXN0Iiwic29tZSIsImJsb2NrIiwibmFtZSIsImlucHV0IiwiZmluZCIsInBhcnNlZElucHV0IiwiaW5wdXRTY2hlbWEiLCJzYWZlUGFyc2UiLCJzdWNjZXNzIiwiZGF0YSIsInRvZG9zIiwicmVnaXN0ZXJSZW1vdGVBZ2VudFRhc2siLCJvcHRpb25zIiwic2Vzc2lvbiIsImlkIiwiY29udGV4dCIsImNsZWFudXAiLCJ0YXNrU3RhdGUiLCJEYXRlIiwibm93Iiwic3Bhd25lZEF0Iiwic3RvcFBvbGxpbmciLCJzdGFydFJlbW90ZVNlc3Npb25Qb2xsaW5nIiwicmVzdG9yZVJlbW90ZUFnZW50VGFza3MiLCJyZXN0b3JlUmVtb3RlQWdlbnRUYXNrc0ltcGwiLCJwZXJzaXN0ZWQiLCJyZW1vdGVTdGF0dXMiLCJzZXNzaW9uX3N0YXR1cyIsIkVycm9yIiwic3RhcnRzV2l0aCIsInN0YXJ0VGltZSIsImlzUnVubmluZyIsIlBPTExfSU5URVJWQUxfTVMiLCJSRU1PVEVfUkVWSUVXX1RJTUVPVVRfTVMiLCJTVEFCTEVfSURMRV9QT0xMUyIsImNvbnNlY3V0aXZlSWRsZVBvbGxzIiwibGFzdEV2ZW50SWQiLCJhY2N1bXVsYXRlZExvZyIsImNhY2hlZFJldmlld0NvbnRlbnQiLCJwb2xsIiwiYXBwU3RhdGUiLCJnZXRBcHBTdGF0ZSIsInRhc2tzIiwicmVzcG9uc2UiLCJsb2dHcmV3IiwibmV3RXZlbnRzIiwiZGVsdGFUZXh0IiwidGV4dCIsInNlc3Npb25TdGF0dXMiLCJ0IiwiZW5kVGltZSIsImdldCIsImNvbXBsZXRpb25SZXN1bHQiLCJyZXN1bHQiLCJ1bmRlZmluZWQiLCJuZXdQcm9ncmVzcyIsIm9wZW4iLCJjbG9zZSIsImV2IiwicyIsImNsb3NlQXQiLCJsYXN0SW5kZXhPZiIsIm9wZW5BdCIsInAiLCJKU09OIiwicGFyc2UiLCJzbGljZSIsImJ1Z3NfZm91bmQiLCJidWdzX3ZlcmlmaWVkIiwiYnVnc19yZWZ1dGVkIiwiaGFzQW55T3V0cHV0Iiwic3RhYmxlSWRsZSIsImhhc1Nlc3Npb25TdGFydEhvb2siLCJtIiwiaG9va19ldmVudCIsImhhc0Fzc2lzdGFudEV2ZW50cyIsInNlc3Npb25Eb25lIiwicmV2aWV3VGltZWRPdXQiLCJuZXdTdGF0dXMiLCJyYWNlVGVybWluYXRlZCIsInByZXZUYXNrIiwic3RhdHVzVW5jaGFuZ2VkIiwiZmluYWxTdGF0dXMiLCJzZXRUaW1lb3V0IiwiUmVtb3RlQWdlbnRUYXNrIiwia2lsbCIsImRlc2NyaXB0aW9uIiwia2lsbGVkIiwic3VtbWFyeSIsImNhdGNoIiwicHJvY2VzcyIsImVudiIsIlNFU1NJT05fSU5HUkVTU19VUkwiXSwic291cmNlcyI6WyJSZW1vdGVBZ2VudFRhc2sudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVG9vbFVzZUJsb2NrIH0gZnJvbSAnQGFudGhyb3BpYy1haS9zZGsvcmVzb3VyY2VzJ1xuaW1wb3J0IHsgZ2V0UmVtb3RlU2Vzc2lvblVybCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9wcm9kdWN0LmpzJ1xuaW1wb3J0IHtcbiAgT1VUUFVUX0ZJTEVfVEFHLFxuICBSRU1PVEVfUkVWSUVXX1BST0dSRVNTX1RBRyxcbiAgUkVNT1RFX1JFVklFV19UQUcsXG4gIFNUQVRVU19UQUcsXG4gIFNVTU1BUllfVEFHLFxuICBUQVNLX0lEX1RBRyxcbiAgVEFTS19OT1RJRklDQVRJT05fVEFHLFxuICBUQVNLX1RZUEVfVEFHLFxuICBUT09MX1VTRV9JRF9UQUcsXG4gIFVMVFJBUExBTl9UQUcsXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cy94bWwuanMnXG5pbXBvcnQgdHlwZSB7XG4gIFNES0Fzc2lzdGFudE1lc3NhZ2UsXG4gIFNES01lc3NhZ2UsXG59IGZyb20gJy4uLy4uL2VudHJ5cG9pbnRzL2FnZW50U2RrVHlwZXMuanMnXG5pbXBvcnQgdHlwZSB7XG4gIFNldEFwcFN0YXRlLFxuICBUYXNrLFxuICBUYXNrQ29udGV4dCxcbiAgVGFza1N0YXRlQmFzZSxcbn0gZnJvbSAnLi4vLi4vVGFzay5qcydcbmltcG9ydCB7IGNyZWF0ZVRhc2tTdGF0ZUJhc2UsIGdlbmVyYXRlVGFza0lkIH0gZnJvbSAnLi4vLi4vVGFzay5qcydcbmltcG9ydCB7IFRvZG9Xcml0ZVRvb2wgfSBmcm9tICcuLi8uLi90b29scy9Ub2RvV3JpdGVUb29sL1RvZG9Xcml0ZVRvb2wuanMnXG5pbXBvcnQge1xuICB0eXBlIEJhY2tncm91bmRSZW1vdGVTZXNzaW9uUHJlY29uZGl0aW9uLFxuICBjaGVja0JhY2tncm91bmRSZW1vdGVTZXNzaW9uRWxpZ2liaWxpdHksXG59IGZyb20gJy4uLy4uL3V0aWxzL2JhY2tncm91bmQvcmVtb3RlL3JlbW90ZVNlc3Npb24uanMnXG5pbXBvcnQgeyBsb2dGb3JEZWJ1Z2dpbmcgfSBmcm9tICcuLi8uLi91dGlscy9kZWJ1Zy5qcydcbmltcG9ydCB7IGxvZ0Vycm9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJ1xuaW1wb3J0IHsgZW5xdWV1ZVBlbmRpbmdOb3RpZmljYXRpb24gfSBmcm9tICcuLi8uLi91dGlscy9tZXNzYWdlUXVldWVNYW5hZ2VyLmpzJ1xuaW1wb3J0IHsgZXh0cmFjdFRhZywgZXh0cmFjdFRleHRDb250ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvbWVzc2FnZXMuanMnXG5pbXBvcnQgeyBlbWl0VGFza1Rlcm1pbmF0ZWRTZGsgfSBmcm9tICcuLi8uLi91dGlscy9zZGtFdmVudFF1ZXVlLmpzJ1xuaW1wb3J0IHtcbiAgZGVsZXRlUmVtb3RlQWdlbnRNZXRhZGF0YSxcbiAgbGlzdFJlbW90ZUFnZW50TWV0YWRhdGEsXG4gIHR5cGUgUmVtb3RlQWdlbnRNZXRhZGF0YSxcbiAgd3JpdGVSZW1vdGVBZ2VudE1ldGFkYXRhLFxufSBmcm9tICcuLi8uLi91dGlscy9zZXNzaW9uU3RvcmFnZS5qcydcbmltcG9ydCB7IGpzb25TdHJpbmdpZnkgfSBmcm9tICcuLi8uLi91dGlscy9zbG93T3BlcmF0aW9ucy5qcydcbmltcG9ydCB7XG4gIGFwcGVuZFRhc2tPdXRwdXQsXG4gIGV2aWN0VGFza091dHB1dCxcbiAgZ2V0VGFza091dHB1dFBhdGgsXG4gIGluaXRUYXNrT3V0cHV0LFxufSBmcm9tICcuLi8uLi91dGlscy90YXNrL2Rpc2tPdXRwdXQuanMnXG5pbXBvcnQgeyByZWdpc3RlclRhc2ssIHVwZGF0ZVRhc2tTdGF0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL3Rhc2svZnJhbWV3b3JrLmpzJ1xuaW1wb3J0IHsgZmV0Y2hTZXNzaW9uIH0gZnJvbSAnLi4vLi4vdXRpbHMvdGVsZXBvcnQvYXBpLmpzJ1xuaW1wb3J0IHtcbiAgYXJjaGl2ZVJlbW90ZVNlc3Npb24sXG4gIHBvbGxSZW1vdGVTZXNzaW9uRXZlbnRzLFxufSBmcm9tICcuLi8uLi91dGlscy90ZWxlcG9ydC5qcydcbmltcG9ydCB0eXBlIHsgVG9kb0xpc3QgfSBmcm9tICcuLi8uLi91dGlscy90b2RvL3R5cGVzLmpzJ1xuaW1wb3J0IHR5cGUgeyBVbHRyYXBsYW5QaGFzZSB9IGZyb20gJy4uLy4uL3V0aWxzL3VsdHJhcGxhbi9jY3JTZXNzaW9uLmpzJ1xuXG5leHBvcnQgdHlwZSBSZW1vdGVBZ2VudFRhc2tTdGF0ZSA9IFRhc2tTdGF0ZUJhc2UgJiB7XG4gIHR5cGU6ICdyZW1vdGVfYWdlbnQnXG4gIHJlbW90ZVRhc2tUeXBlOiBSZW1vdGVUYXNrVHlwZVxuICAvKiogVGFzay1zcGVjaWZpYyBtZXRhZGF0YSAoUFIgbnVtYmVyLCByZXBvLCBldGMuKS4gKi9cbiAgcmVtb3RlVGFza01ldGFkYXRhPzogUmVtb3RlVGFza01ldGFkYXRhXG4gIHNlc3Npb25JZDogc3RyaW5nIC8vIE9yaWdpbmFsIHNlc3Npb24gSUQgZm9yIEFQSSBjYWxsc1xuICBjb21tYW5kOiBzdHJpbmdcbiAgdGl0bGU6IHN0cmluZ1xuICB0b2RvTGlzdDogVG9kb0xpc3RcbiAgbG9nOiBTREtNZXNzYWdlW11cbiAgLyoqXG4gICAqIExvbmctcnVubmluZyBhZ2VudCB0aGF0IHdpbGwgbm90IGJlIG1hcmtlZCBhcyBjb21wbGV0ZSBhZnRlciB0aGUgZmlyc3QgYHJlc3VsdGAuXG4gICAqL1xuICBpc0xvbmdSdW5uaW5nPzogYm9vbGVhblxuICAvKipcbiAgICogV2hlbiB0aGUgbG9jYWwgcG9sbGVyIHN0YXJ0ZWQgd2F0Y2hpbmcgdGhpcyB0YXNrIChhdCBzcGF3biBvciBvbiByZXN0b3JlKS5cbiAgICogUmV2aWV3IHRpbWVvdXQgY2xvY2tzIGZyb20gaGVyZSBzbyBhIHJlc3RvcmUgZG9lc24ndCBpbW1lZGlhdGVseSB0aW1lIG91dFxuICAgKiBhIHRhc2sgc3Bhd25lZCA+MzBtaW4gYWdvLlxuICAgKi9cbiAgcG9sbFN0YXJ0ZWRBdDogbnVtYmVyXG4gIC8qKiBUcnVlIHdoZW4gdGhpcyB0YXNrIHdhcyBjcmVhdGVkIGJ5IGEgdGVsZXBvcnRlZCAvdWx0cmFyZXZpZXcgY29tbWFuZC4gKi9cbiAgaXNSZW1vdGVSZXZpZXc/OiBib29sZWFuXG4gIC8qKiBQYXJzZWQgZnJvbSB0aGUgb3JjaGVzdHJhdG9yJ3MgPHJlbW90ZS1yZXZpZXctcHJvZ3Jlc3M+IGhlYXJ0YmVhdCBlY2hvZXMuICovXG4gIHJldmlld1Byb2dyZXNzPzoge1xuICAgIHN0YWdlPzogJ2ZpbmRpbmcnIHwgJ3ZlcmlmeWluZycgfCAnc3ludGhlc2l6aW5nJ1xuICAgIGJ1Z3NGb3VuZDogbnVtYmVyXG4gICAgYnVnc1ZlcmlmaWVkOiBudW1iZXJcbiAgICBidWdzUmVmdXRlZDogbnVtYmVyXG4gIH1cbiAgaXNVbHRyYXBsYW4/OiBib29sZWFuXG4gIC8qKlxuICAgKiBTY2FubmVyLWRlcml2ZWQgcGlsbCBzdGF0ZS4gVW5kZWZpbmVkID0gcnVubmluZy4gYG5lZWRzX2lucHV0YCB3aGVuIHRoZVxuICAgKiByZW1vdGUgYXNrZWQgYSBjbGFyaWZ5aW5nIHF1ZXN0aW9uIGFuZCBpcyBpZGxlOyBgcGxhbl9yZWFkeWAgd2hlblxuICAgKiBFeGl0UGxhbk1vZGUgaXMgYXdhaXRpbmcgYnJvd3NlciBhcHByb3ZhbC4gU3VyZmFjZWQgaW4gdGhlIHBpbGwgYmFkZ2VcbiAgICogYW5kIGRldGFpbCBkaWFsb2cgc3RhdHVzIGxpbmUuXG4gICAqL1xuICB1bHRyYXBsYW5QaGFzZT86IEV4Y2x1ZGU8VWx0cmFwbGFuUGhhc2UsICdydW5uaW5nJz5cbn1cblxuY29uc3QgUkVNT1RFX1RBU0tfVFlQRVMgPSBbXG4gICdyZW1vdGUtYWdlbnQnLFxuICAndWx0cmFwbGFuJyxcbiAgJ3VsdHJhcmV2aWV3JyxcbiAgJ2F1dG9maXgtcHInLFxuICAnYmFja2dyb3VuZC1wcicsXG5dIGFzIGNvbnN0XG5leHBvcnQgdHlwZSBSZW1vdGVUYXNrVHlwZSA9ICh0eXBlb2YgUkVNT1RFX1RBU0tfVFlQRVMpW251bWJlcl1cblxuZnVuY3Rpb24gaXNSZW1vdGVUYXNrVHlwZSh2OiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2IGlzIFJlbW90ZVRhc2tUeXBlIHtcbiAgcmV0dXJuIChSRU1PVEVfVEFTS19UWVBFUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModiA/PyAnJylcbn1cblxuZXhwb3J0IHR5cGUgQXV0b2ZpeFByUmVtb3RlVGFza01ldGFkYXRhID0ge1xuICBvd25lcjogc3RyaW5nXG4gIHJlcG86IHN0cmluZ1xuICBwck51bWJlcjogbnVtYmVyXG59XG5cbmV4cG9ydCB0eXBlIFJlbW90ZVRhc2tNZXRhZGF0YSA9IEF1dG9maXhQclJlbW90ZVRhc2tNZXRhZGF0YVxuXG4vKipcbiAqIENhbGxlZCBvbiBldmVyeSBwb2xsIHRpY2sgZm9yIHRhc2tzIHdpdGggYSBtYXRjaGluZyByZW1vdGVUYXNrVHlwZS4gUmV0dXJuIGFcbiAqIG5vbi1udWxsIHN0cmluZyB0byBjb21wbGV0ZSB0aGUgdGFzayAoc3RyaW5nIGJlY29tZXMgdGhlIG5vdGlmaWNhdGlvbiB0ZXh0KSxcbiAqIG9yIG51bGwgdG8ga2VlcCBwb2xsaW5nLiBDaGVja2VycyB0aGF0IGhpdCBleHRlcm5hbCBBUElzIHNob3VsZCBzZWxmLXRocm90dGxlLlxuICovXG5leHBvcnQgdHlwZSBSZW1vdGVUYXNrQ29tcGxldGlvbkNoZWNrZXIgPSAoXG4gIHJlbW90ZVRhc2tNZXRhZGF0YTogUmVtb3RlVGFza01ldGFkYXRhIHwgdW5kZWZpbmVkLFxuKSA9PiBQcm9taXNlPHN0cmluZyB8IG51bGw+XG5cbmNvbnN0IGNvbXBsZXRpb25DaGVja2VycyA9IG5ldyBNYXA8XG4gIFJlbW90ZVRhc2tUeXBlLFxuICBSZW1vdGVUYXNrQ29tcGxldGlvbkNoZWNrZXJcbj4oKVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgY29tcGxldGlvbiBjaGVja2VyIGZvciBhIHJlbW90ZSB0YXNrIHR5cGUuIEludm9rZWQgb24gZXZlcnkgcG9sbFxuICogdGljazsgc3Vydml2ZXMgLS1yZXN1bWUgdmlhIHRoZSBzaWRlY2FyJ3MgcmVtb3RlVGFza1R5cGUgKyByZW1vdGVUYXNrTWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckNvbXBsZXRpb25DaGVja2VyKFxuICByZW1vdGVUYXNrVHlwZTogUmVtb3RlVGFza1R5cGUsXG4gIGNoZWNrZXI6IFJlbW90ZVRhc2tDb21wbGV0aW9uQ2hlY2tlcixcbik6IHZvaWQge1xuICBjb21wbGV0aW9uQ2hlY2tlcnMuc2V0KHJlbW90ZVRhc2tUeXBlLCBjaGVja2VyKVxufVxuXG4vKipcbiAqIFBlcnNpc3QgYSByZW1vdGUtYWdlbnQgbWV0YWRhdGEgZW50cnkgdG8gdGhlIHNlc3Npb24gc2lkZWNhci5cbiAqIEZpcmUtYW5kLWZvcmdldCDigJQgcGVyc2lzdGVuY2UgZmFpbHVyZXMgbXVzdCBub3QgYmxvY2sgdGFzayByZWdpc3RyYXRpb24uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBlcnNpc3RSZW1vdGVBZ2VudE1ldGFkYXRhKFxuICBtZXRhOiBSZW1vdGVBZ2VudE1ldGFkYXRhLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgd3JpdGVSZW1vdGVBZ2VudE1ldGFkYXRhKG1ldGEudGFza0lkLCBtZXRhKVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nRm9yRGVidWdnaW5nKGBwZXJzaXN0UmVtb3RlQWdlbnRNZXRhZGF0YSBmYWlsZWQ6ICR7U3RyaW5nKGUpfWApXG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmUgYSByZW1vdGUtYWdlbnQgbWV0YWRhdGEgZW50cnkgZnJvbSB0aGUgc2Vzc2lvbiBzaWRlY2FyLlxuICogQ2FsbGVkIG9uIHRhc2sgY29tcGxldGlvbi9raWxsIHNvIHJlc3RvcmVkIHNlc3Npb25zIGRvbid0IHJlc3VycmVjdFxuICogdGFza3MgdGhhdCBhbHJlYWR5IGZpbmlzaGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiByZW1vdmVSZW1vdGVBZ2VudE1ldGFkYXRhKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZGVsZXRlUmVtb3RlQWdlbnRNZXRhZGF0YSh0YXNrSWQpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dGb3JEZWJ1Z2dpbmcoYHJlbW92ZVJlbW90ZUFnZW50TWV0YWRhdGEgZmFpbGVkOiAke1N0cmluZyhlKX1gKVxuICB9XG59XG5cbi8vIFByZWNvbmRpdGlvbiBlcnJvciByZXN1bHRcbmV4cG9ydCB0eXBlIFJlbW90ZUFnZW50UHJlY29uZGl0aW9uUmVzdWx0ID1cbiAgfCB7XG4gICAgICBlbGlnaWJsZTogdHJ1ZVxuICAgIH1cbiAgfCB7XG4gICAgICBlbGlnaWJsZTogZmFsc2VcbiAgICAgIGVycm9yczogQmFja2dyb3VuZFJlbW90ZVNlc3Npb25QcmVjb25kaXRpb25bXVxuICAgIH1cblxuLyoqXG4gKiBDaGVjayBlbGlnaWJpbGl0eSBmb3IgY3JlYXRpbmcgYSByZW1vdGUgYWdlbnQgc2Vzc2lvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrUmVtb3RlQWdlbnRFbGlnaWJpbGl0eSh7XG4gIHNraXBCdW5kbGUgPSBmYWxzZSxcbn06IHtcbiAgc2tpcEJ1bmRsZT86IGJvb2xlYW5cbn0gPSB7fSk6IFByb21pc2U8UmVtb3RlQWdlbnRQcmVjb25kaXRpb25SZXN1bHQ+IHtcbiAgY29uc3QgZXJyb3JzID0gYXdhaXQgY2hlY2tCYWNrZ3JvdW5kUmVtb3RlU2Vzc2lvbkVsaWdpYmlsaXR5KHsgc2tpcEJ1bmRsZSB9KVxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4geyBlbGlnaWJsZTogZmFsc2UsIGVycm9ycyB9XG4gIH1cbiAgcmV0dXJuIHsgZWxpZ2libGU6IHRydWUgfVxufVxuXG4vKipcbiAqIEZvcm1hdCBwcmVjb25kaXRpb24gZXJyb3IgZm9yIGRpc3BsYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRQcmVjb25kaXRpb25FcnJvcihcbiAgZXJyb3I6IEJhY2tncm91bmRSZW1vdGVTZXNzaW9uUHJlY29uZGl0aW9uLFxuKTogc3RyaW5nIHtcbiAgc3dpdGNoIChlcnJvci50eXBlKSB7XG4gICAgY2FzZSAnbm90X2xvZ2dlZF9pbic6XG4gICAgICByZXR1cm4gJ1BsZWFzZSBydW4gL2xvZ2luIGFuZCBzaWduIGluIHdpdGggeW91ciBDbGF1ZGUuYWkgYWNjb3VudCAobm90IENvbnNvbGUpLidcbiAgICBjYXNlICdub19yZW1vdGVfZW52aXJvbm1lbnQnOlxuICAgICAgcmV0dXJuICdObyBjbG91ZCBlbnZpcm9ubWVudCBhdmFpbGFibGUuIFNldCBvbmUgdXAgYXQgaHR0cHM6Ly9jbGF1ZGUuYWkvY29kZS9vbmJvYXJkaW5nP21hZ2ljPWVudi1zZXR1cCdcbiAgICBjYXNlICdub3RfaW5fZ2l0X3JlcG8nOlxuICAgICAgcmV0dXJuICdCYWNrZ3JvdW5kIHRhc2tzIHJlcXVpcmUgYSBnaXQgcmVwb3NpdG9yeS4gSW5pdGlhbGl6ZSBnaXQgb3IgcnVuIGZyb20gYSBnaXQgcmVwb3NpdG9yeS4nXG4gICAgY2FzZSAnbm9fZ2l0X3JlbW90ZSc6XG4gICAgICByZXR1cm4gJ0JhY2tncm91bmQgdGFza3MgcmVxdWlyZSBhIEdpdEh1YiByZW1vdGUuIEFkZCBvbmUgd2l0aCBgZ2l0IHJlbW90ZSBhZGQgb3JpZ2luIFJFUE9fVVJMYC4nXG4gICAgY2FzZSAnZ2l0aHViX2FwcF9ub3RfaW5zdGFsbGVkJzpcbiAgICAgIHJldHVybiAnVGhlIENsYXVkZSBHaXRIdWIgYXBwIG11c3QgYmUgaW5zdGFsbGVkIG9uIHRoaXMgcmVwb3NpdG9yeSBmaXJzdC5cXG5odHRwczovL2dpdGh1Yi5jb20vYXBwcy9jbGF1ZGUvaW5zdGFsbGF0aW9ucy9uZXcnXG4gICAgY2FzZSAncG9saWN5X2Jsb2NrZWQnOlxuICAgICAgcmV0dXJuIFwiUmVtb3RlIHNlc3Npb25zIGFyZSBkaXNhYmxlZCBieSB5b3VyIG9yZ2FuaXphdGlvbidzIHBvbGljeS4gQ29udGFjdCB5b3VyIG9yZ2FuaXphdGlvbiBhZG1pbiB0byBlbmFibGUgdGhlbS5cIlxuICB9XG59XG5cbi8qKlxuICogRW5xdWV1ZSBhIHJlbW90ZSB0YXNrIG5vdGlmaWNhdGlvbiB0byB0aGUgbWVzc2FnZSBxdWV1ZS5cbiAqL1xuZnVuY3Rpb24gZW5xdWV1ZVJlbW90ZU5vdGlmaWNhdGlvbihcbiAgdGFza0lkOiBzdHJpbmcsXG4gIHRpdGxlOiBzdHJpbmcsXG4gIHN0YXR1czogJ2NvbXBsZXRlZCcgfCAnZmFpbGVkJyB8ICdraWxsZWQnLFxuICBzZXRBcHBTdGF0ZTogU2V0QXBwU3RhdGUsXG4gIHRvb2xVc2VJZD86IHN0cmluZyxcbik6IHZvaWQge1xuICAvLyBBdG9taWNhbGx5IGNoZWNrIGFuZCBzZXQgbm90aWZpZWQgZmxhZyB0byBwcmV2ZW50IGR1cGxpY2F0ZSBub3RpZmljYXRpb25zLlxuICBpZiAoIW1hcmtUYXNrTm90aWZpZWQodGFza0lkLCBzZXRBcHBTdGF0ZSkpIHJldHVyblxuXG4gIGNvbnN0IHN0YXR1c1RleHQgPVxuICAgIHN0YXR1cyA9PT0gJ2NvbXBsZXRlZCdcbiAgICAgID8gJ2NvbXBsZXRlZCBzdWNjZXNzZnVsbHknXG4gICAgICA6IHN0YXR1cyA9PT0gJ2ZhaWxlZCdcbiAgICAgICAgPyAnZmFpbGVkJ1xuICAgICAgICA6ICd3YXMgc3RvcHBlZCdcblxuICBjb25zdCB0b29sVXNlSWRMaW5lID0gdG9vbFVzZUlkXG4gICAgPyBgXFxuPCR7VE9PTF9VU0VfSURfVEFHfT4ke3Rvb2xVc2VJZH08LyR7VE9PTF9VU0VfSURfVEFHfT5gXG4gICAgOiAnJ1xuXG4gIGNvbnN0IG91dHB1dFBhdGggPSBnZXRUYXNrT3V0cHV0UGF0aCh0YXNrSWQpXG4gIGNvbnN0IG1lc3NhZ2UgPSBgPCR7VEFTS19OT1RJRklDQVRJT05fVEFHfT5cbjwke1RBU0tfSURfVEFHfT4ke3Rhc2tJZH08LyR7VEFTS19JRF9UQUd9PiR7dG9vbFVzZUlkTGluZX1cbjwke1RBU0tfVFlQRV9UQUd9PnJlbW90ZV9hZ2VudDwvJHtUQVNLX1RZUEVfVEFHfT5cbjwke09VVFBVVF9GSUxFX1RBR30+JHtvdXRwdXRQYXRofTwvJHtPVVRQVVRfRklMRV9UQUd9PlxuPCR7U1RBVFVTX1RBR30+JHtzdGF0dXN9PC8ke1NUQVRVU19UQUd9PlxuPCR7U1VNTUFSWV9UQUd9PlJlbW90ZSB0YXNrIFwiJHt0aXRsZX1cIiAke3N0YXR1c1RleHR9PC8ke1NVTU1BUllfVEFHfT5cbjwvJHtUQVNLX05PVElGSUNBVElPTl9UQUd9PmBcblxuICBlbnF1ZXVlUGVuZGluZ05vdGlmaWNhdGlvbih7IHZhbHVlOiBtZXNzYWdlLCBtb2RlOiAndGFzay1ub3RpZmljYXRpb24nIH0pXG59XG5cbi8qKlxuICogQXRvbWljYWxseSBtYXJrIGEgdGFzayBhcyBub3RpZmllZC4gUmV0dXJucyB0cnVlIGlmIHRoaXMgY2FsbCBmbGlwcGVkIHRoZVxuICogZmxhZyAoY2FsbGVyIHNob3VsZCBlbnF1ZXVlKSwgZmFsc2UgaWYgYWxyZWFkeSBub3RpZmllZCAoY2FsbGVyIHNob3VsZCBza2lwKS5cbiAqL1xuZnVuY3Rpb24gbWFya1Rhc2tOb3RpZmllZCh0YXNrSWQ6IHN0cmluZywgc2V0QXBwU3RhdGU6IFNldEFwcFN0YXRlKTogYm9vbGVhbiB7XG4gIGxldCBzaG91bGRFbnF1ZXVlID0gZmFsc2VcbiAgdXBkYXRlVGFza1N0YXRlKHRhc2tJZCwgc2V0QXBwU3RhdGUsIHRhc2sgPT4ge1xuICAgIGlmICh0YXNrLm5vdGlmaWVkKSB7XG4gICAgICByZXR1cm4gdGFza1xuICAgIH1cbiAgICBzaG91bGRFbnF1ZXVlID0gdHJ1ZVxuICAgIHJldHVybiB7IC4uLnRhc2ssIG5vdGlmaWVkOiB0cnVlIH1cbiAgfSlcbiAgcmV0dXJuIHNob3VsZEVucXVldWVcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBwbGFuIGNvbnRlbnQgZnJvbSB0aGUgcmVtb3RlIHNlc3Npb24gbG9nLlxuICogU2VhcmNoZXMgYWxsIGFzc2lzdGFudCBtZXNzYWdlcyBmb3IgPHVsdHJhcGxhbj4uLi48L3VsdHJhcGxhbj4gdGFncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RQbGFuRnJvbUxvZyhsb2c6IFNES01lc3NhZ2VbXSk6IHN0cmluZyB8IG51bGwge1xuICAvLyBXYWxrIGJhY2t3YXJkcyB0aHJvdWdoIGFzc2lzdGFudCBtZXNzYWdlcyB0byBmaW5kIDx1bHRyYXBsYW4+IGNvbnRlbnRcbiAgZm9yIChsZXQgaSA9IGxvZy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IG1zZyA9IGxvZ1tpXVxuICAgIGlmIChtc2c/LnR5cGUgIT09ICdhc3Npc3RhbnQnKSBjb250aW51ZVxuICAgIGNvbnN0IGZ1bGxUZXh0ID0gZXh0cmFjdFRleHRDb250ZW50KG1zZy5tZXNzYWdlLmNvbnRlbnQsICdcXG4nKVxuICAgIGNvbnN0IHBsYW4gPSBleHRyYWN0VGFnKGZ1bGxUZXh0LCBVTFRSQVBMQU5fVEFHKVxuICAgIGlmIChwbGFuPy50cmltKCkpIHJldHVybiBwbGFuLnRyaW0oKVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogRW5xdWV1ZSBhbiB1bHRyYXBsYW4tc3BlY2lmaWMgZmFpbHVyZSBub3RpZmljYXRpb24uIFVubGlrZSBlbnF1ZXVlUmVtb3RlTm90aWZpY2F0aW9uXG4gKiB0aGlzIGRvZXMgTk9UIGluc3RydWN0IHRoZSBtb2RlbCB0byByZWFkIHRoZSByYXcgb3V0cHV0IGZpbGUgKGEgSlNPTkwgZHVtcCB0aGF0IGlzXG4gKiB1c2VsZXNzIGZvciBwbGFuIGV4dHJhY3Rpb24pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5xdWV1ZVVsdHJhcGxhbkZhaWx1cmVOb3RpZmljYXRpb24oXG4gIHRhc2tJZDogc3RyaW5nLFxuICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgcmVhc29uOiBzdHJpbmcsXG4gIHNldEFwcFN0YXRlOiBTZXRBcHBTdGF0ZSxcbik6IHZvaWQge1xuICBpZiAoIW1hcmtUYXNrTm90aWZpZWQodGFza0lkLCBzZXRBcHBTdGF0ZSkpIHJldHVyblxuXG4gIGNvbnN0IHNlc3Npb25VcmwgPSBnZXRSZW1vdGVUYXNrU2Vzc2lvblVybChzZXNzaW9uSWQpXG4gIGNvbnN0IG1lc3NhZ2UgPSBgPCR7VEFTS19OT1RJRklDQVRJT05fVEFHfT5cbjwke1RBU0tfSURfVEFHfT4ke3Rhc2tJZH08LyR7VEFTS19JRF9UQUd9PlxuPCR7VEFTS19UWVBFX1RBR30+cmVtb3RlX2FnZW50PC8ke1RBU0tfVFlQRV9UQUd9PlxuPCR7U1RBVFVTX1RBR30+ZmFpbGVkPC8ke1NUQVRVU19UQUd9PlxuPCR7U1VNTUFSWV9UQUd9PlVsdHJhcGxhbiBmYWlsZWQ6ICR7cmVhc29ufTwvJHtTVU1NQVJZX1RBR30+XG48LyR7VEFTS19OT1RJRklDQVRJT05fVEFHfT5cblRoZSByZW1vdGUgVWx0cmFwbGFuIHNlc3Npb24gZGlkIG5vdCBwcm9kdWNlIGEgcGxhbiAoJHtyZWFzb259KS4gSW5zcGVjdCB0aGUgc2Vzc2lvbiBhdCAke3Nlc3Npb25Vcmx9IGFuZCB0ZWxsIHRoZSB1c2VyIHRvIHJldHJ5IGxvY2FsbHkgd2l0aCBwbGFuIG1vZGUuYFxuXG4gIGVucXVldWVQZW5kaW5nTm90aWZpY2F0aW9uKHsgdmFsdWU6IG1lc3NhZ2UsIG1vZGU6ICd0YXNrLW5vdGlmaWNhdGlvbicgfSlcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHJldmlldyBjb250ZW50IGZyb20gdGhlIHJlbW90ZSBzZXNzaW9uIGxvZy5cbiAqXG4gKiBUd28gcHJvZHVjZXJzLCB0d28gZXZlbnQgc2hhcGVzOlxuICogLSBidWdodW50ZXIgbW9kZTogcnVuX2h1bnQuc2ggaXMgYSBTZXNzaW9uU3RhcnQgaG9vazsgaXRzIGVjaG8gbGFuZHMgYXNcbiAqICAge3R5cGU6J3N5c3RlbScsIHN1YnR5cGU6J2hvb2tfcHJvZ3Jlc3MnLCBzdGRvdXQ6Jy4uLid9LiBDbGF1ZGUgbmV2ZXJcbiAqICAgdGFrZXMgYSB0dXJuIHNvIHRoZXJlIGFyZSB6ZXJvIGFzc2lzdGFudCBtZXNzYWdlcy5cbiAqIC0gcHJvbXB0IG1vZGU6IGEgcmVhbCBhc3Npc3RhbnQgdHVybiB3cmFwcyB0aGUgcmV2aWV3IGluIHRoZSB0YWcuXG4gKlxuICogU2NhbnMgaG9va19wcm9ncmVzcyBmaXJzdCBzaW5jZSBidWdodW50ZXIgaXMgdGhlIGludGVuZGVkIHByb2R1Y3Rpb24gcGF0aFxuICogYW5kIHByb21wdCBtb2RlIGlzIHRoZSBkZXYvZmFsbGJhY2suIE5ld2VzdC1maXJzdCBpbiBib3RoIGNhc2VzIOKAlCB0aGUgdGFnXG4gKiBhcHBlYXJzIG9uY2UgYXQgdGhlIGVuZCBvZiB0aGUgcnVuIHNvIHJldmVyc2UgaXRlcmF0aW9uIHNob3J0LWNpcmN1aXRzLlxuICovXG5mdW5jdGlvbiBleHRyYWN0UmV2aWV3RnJvbUxvZyhsb2c6IFNES01lc3NhZ2VbXSk6IHN0cmluZyB8IG51bGwge1xuICBmb3IgKGxldCBpID0gbG9nLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgbXNnID0gbG9nW2ldXG4gICAgLy8gVGhlIGZpbmFsIGVjaG8gYmVmb3JlIGhvb2sgZXhpdCBtYXkgbGFuZCBpbiBlaXRoZXIgdGhlIGxhc3RcbiAgICAvLyBob29rX3Byb2dyZXNzIG9yIHRoZSB0ZXJtaW5hbCBob29rX3Jlc3BvbnNlIGRlcGVuZGluZyBvbiBidWZmZXJpbmc7XG4gICAgLy8gYm90aCBoYXZlIGZsYXQgc3Rkb3V0LlxuICAgIGlmIChcbiAgICAgIG1zZz8udHlwZSA9PT0gJ3N5c3RlbScgJiZcbiAgICAgIChtc2cuc3VidHlwZSA9PT0gJ2hvb2tfcHJvZ3Jlc3MnIHx8IG1zZy5zdWJ0eXBlID09PSAnaG9va19yZXNwb25zZScpXG4gICAgKSB7XG4gICAgICBjb25zdCB0YWdnZWQgPSBleHRyYWN0VGFnKG1zZy5zdGRvdXQsIFJFTU9URV9SRVZJRVdfVEFHKVxuICAgICAgaWYgKHRhZ2dlZD8udHJpbSgpKSByZXR1cm4gdGFnZ2VkLnRyaW0oKVxuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSBsb2cubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBtc2cgPSBsb2dbaV1cbiAgICBpZiAobXNnPy50eXBlICE9PSAnYXNzaXN0YW50JykgY29udGludWVcbiAgICBjb25zdCBmdWxsVGV4dCA9IGV4dHJhY3RUZXh0Q29udGVudChtc2cubWVzc2FnZS5jb250ZW50LCAnXFxuJylcbiAgICBjb25zdCB0YWdnZWQgPSBleHRyYWN0VGFnKGZ1bGxUZXh0LCBSRU1PVEVfUkVWSUVXX1RBRylcbiAgICBpZiAodGFnZ2VkPy50cmltKCkpIHJldHVybiB0YWdnZWQudHJpbSgpXG4gIH1cblxuICAvLyBIb29rLXN0ZG91dCBjb25jYXQgZmFsbGJhY2s6IGEgc2luZ2xlIGVjaG8gc2hvdWxkIGxhbmQgaW4gb25lIGV2ZW50LCBidXRcbiAgLy8gbGFyZ2UgSlNPTiBwYXlsb2FkcyBjYW4gZmx1c2ggYWNyb3NzIHR3byBpZiB0aGUgcGlwZSBidWZmZXIgZmlsbHNcbiAgLy8gbWlkLXdyaXRlLiBQZXItbWVzc2FnZSBzY2FuIGFib3ZlIG1pc3NlcyBhIHRhZyBzcGxpdCBhY3Jvc3MgZXZlbnRzLlxuICBjb25zdCBob29rU3Rkb3V0ID0gbG9nXG4gICAgLmZpbHRlcihcbiAgICAgIG1zZyA9PlxuICAgICAgICBtc2cudHlwZSA9PT0gJ3N5c3RlbScgJiZcbiAgICAgICAgKG1zZy5zdWJ0eXBlID09PSAnaG9va19wcm9ncmVzcycgfHwgbXNnLnN1YnR5cGUgPT09ICdob29rX3Jlc3BvbnNlJyksXG4gICAgKVxuICAgIC5tYXAobXNnID0+IG1zZy5zdGRvdXQpXG4gICAgLmpvaW4oJycpXG4gIGNvbnN0IGhvb2tUYWdnZWQgPSBleHRyYWN0VGFnKGhvb2tTdGRvdXQsIFJFTU9URV9SRVZJRVdfVEFHKVxuICBpZiAoaG9va1RhZ2dlZD8udHJpbSgpKSByZXR1cm4gaG9va1RhZ2dlZC50cmltKClcblxuICAvLyBGYWxsYmFjazogY29uY2F0ZW5hdGUgYWxsIGFzc2lzdGFudCB0ZXh0IGluIGNocm9ub2xvZ2ljYWwgb3JkZXIuXG4gIGNvbnN0IGFsbFRleHQgPSBsb2dcbiAgICAuZmlsdGVyKChtc2cpOiBtc2cgaXMgU0RLQXNzaXN0YW50TWVzc2FnZSA9PiBtc2cudHlwZSA9PT0gJ2Fzc2lzdGFudCcpXG4gICAgLm1hcChtc2cgPT4gZXh0cmFjdFRleHRDb250ZW50KG1zZy5tZXNzYWdlLmNvbnRlbnQsICdcXG4nKSlcbiAgICAuam9pbignXFxuJylcbiAgICAudHJpbSgpXG5cbiAgcmV0dXJuIGFsbFRleHQgfHwgbnVsbFxufVxuXG4vKipcbiAqIFRhZy1vbmx5IHZhcmlhbnQgb2YgZXh0cmFjdFJldmlld0Zyb21Mb2cgZm9yIGRlbHRhIHNjYW5uaW5nLlxuICpcbiAqIFJldHVybnMgbm9uLW51bGwgT05MWSB3aGVuIGFuIGV4cGxpY2l0IDxyZW1vdGUtcmV2aWV3PiB0YWcgaXMgZm91bmQuXG4gKiBVbmxpa2UgZXh0cmFjdFJldmlld0Zyb21Mb2csIHRoaXMgZG9lcyBOT1QgZmFsbCBiYWNrIHRvIGNvbmNhdGVuYXRlZFxuICogYXNzaXN0YW50IHRleHQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHRoZSBkZWx0YSBzY2FuOiBpbiBwcm9tcHQgbW9kZSxcbiAqIGVhcmx5IHVudGFnZ2VkIGFzc2lzdGFudCBtZXNzYWdlcyAoZS5nLiBcIkknbSBhbmFseXppbmcgdGhlIGRpZmYuLi5cIilcbiAqIHdvdWxkIHRyaWdnZXIgdGhlIGZhbGxiYWNrIGFuZCBwcmVtYXR1cmVseSBzZXQgY2FjaGVkUmV2aWV3Q29udGVudCxcbiAqIGNvbXBsZXRpbmcgdGhlIHJldmlldyBiZWZvcmUgdGhlIGFjdHVhbCB0YWdnZWQgb3V0cHV0IGFycml2ZXMuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RSZXZpZXdUYWdGcm9tTG9nKGxvZzogU0RLTWVzc2FnZVtdKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIGhvb2tfcHJvZ3Jlc3MgLyBob29rX3Jlc3BvbnNlIHBlci1tZXNzYWdlIHNjYW4gKGJ1Z2h1bnRlciBwYXRoKVxuICBmb3IgKGxldCBpID0gbG9nLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgbXNnID0gbG9nW2ldXG4gICAgaWYgKFxuICAgICAgbXNnPy50eXBlID09PSAnc3lzdGVtJyAmJlxuICAgICAgKG1zZy5zdWJ0eXBlID09PSAnaG9va19wcm9ncmVzcycgfHwgbXNnLnN1YnR5cGUgPT09ICdob29rX3Jlc3BvbnNlJylcbiAgICApIHtcbiAgICAgIGNvbnN0IHRhZ2dlZCA9IGV4dHJhY3RUYWcobXNnLnN0ZG91dCwgUkVNT1RFX1JFVklFV19UQUcpXG4gICAgICBpZiAodGFnZ2VkPy50cmltKCkpIHJldHVybiB0YWdnZWQudHJpbSgpXG4gICAgfVxuICB9XG5cbiAgLy8gYXNzaXN0YW50IHRleHQgcGVyLW1lc3NhZ2Ugc2NhbiAocHJvbXB0IG1vZGUpXG4gIGZvciAobGV0IGkgPSBsb2cubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBtc2cgPSBsb2dbaV1cbiAgICBpZiAobXNnPy50eXBlICE9PSAnYXNzaXN0YW50JykgY29udGludWVcbiAgICBjb25zdCBmdWxsVGV4dCA9IGV4dHJhY3RUZXh0Q29udGVudChtc2cubWVzc2FnZS5jb250ZW50LCAnXFxuJylcbiAgICBjb25zdCB0YWdnZWQgPSBleHRyYWN0VGFnKGZ1bGxUZXh0LCBSRU1PVEVfUkVWSUVXX1RBRylcbiAgICBpZiAodGFnZ2VkPy50cmltKCkpIHJldHVybiB0YWdnZWQudHJpbSgpXG4gIH1cblxuICAvLyBIb29rLXN0ZG91dCBjb25jYXQgZmFsbGJhY2sgZm9yIHNwbGl0IHRhZ3NcbiAgY29uc3QgaG9va1N0ZG91dCA9IGxvZ1xuICAgIC5maWx0ZXIoXG4gICAgICBtc2cgPT5cbiAgICAgICAgbXNnLnR5cGUgPT09ICdzeXN0ZW0nICYmXG4gICAgICAgIChtc2cuc3VidHlwZSA9PT0gJ2hvb2tfcHJvZ3Jlc3MnIHx8IG1zZy5zdWJ0eXBlID09PSAnaG9va19yZXNwb25zZScpLFxuICAgIClcbiAgICAubWFwKG1zZyA9PiBtc2cuc3Rkb3V0KVxuICAgIC5qb2luKCcnKVxuICBjb25zdCBob29rVGFnZ2VkID0gZXh0cmFjdFRhZyhob29rU3Rkb3V0LCBSRU1PVEVfUkVWSUVXX1RBRylcbiAgaWYgKGhvb2tUYWdnZWQ/LnRyaW0oKSkgcmV0dXJuIGhvb2tUYWdnZWQudHJpbSgpXG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBFbnF1ZXVlIGEgcmVtb3RlLXJldmlldyBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbi4gSW5qZWN0cyB0aGUgcmV2aWV3IHRleHRcbiAqIGRpcmVjdGx5IGludG8gdGhlIG1lc3NhZ2UgcXVldWUgc28gdGhlIGxvY2FsIG1vZGVsIHJlY2VpdmVzIGl0IG9uIHRoZSBuZXh0XG4gKiB0dXJuIOKAlCBubyBmaWxlIGluZGlyZWN0aW9uLCBubyBtb2RlIGNoYW5nZS4gU2Vzc2lvbiBpcyBrZXB0IGFsaXZlIHNvIHRoZVxuICogY2xhdWRlLmFpIFVSTCBzdGF5cyBhIGR1cmFibGUgcmVjb3JkIHRoZSB1c2VyIGNhbiByZXZpc2l0OyBUVEwgaGFuZGxlcyBjbGVhbnVwLlxuICovXG5mdW5jdGlvbiBlbnF1ZXVlUmVtb3RlUmV2aWV3Tm90aWZpY2F0aW9uKFxuICB0YXNrSWQ6IHN0cmluZyxcbiAgcmV2aWV3Q29udGVudDogc3RyaW5nLFxuICBzZXRBcHBTdGF0ZTogU2V0QXBwU3RhdGUsXG4pOiB2b2lkIHtcbiAgaWYgKCFtYXJrVGFza05vdGlmaWVkKHRhc2tJZCwgc2V0QXBwU3RhdGUpKSByZXR1cm5cblxuICBjb25zdCBtZXNzYWdlID0gYDwke1RBU0tfTk9USUZJQ0FUSU9OX1RBR30+XG48JHtUQVNLX0lEX1RBR30+JHt0YXNrSWR9PC8ke1RBU0tfSURfVEFHfT5cbjwke1RBU0tfVFlQRV9UQUd9PnJlbW90ZV9hZ2VudDwvJHtUQVNLX1RZUEVfVEFHfT5cbjwke1NUQVRVU19UQUd9PmNvbXBsZXRlZDwvJHtTVEFUVVNfVEFHfT5cbjwke1NVTU1BUllfVEFHfT5SZW1vdGUgcmV2aWV3IGNvbXBsZXRlZDwvJHtTVU1NQVJZX1RBR30+XG48LyR7VEFTS19OT1RJRklDQVRJT05fVEFHfT5cblRoZSByZW1vdGUgcmV2aWV3IHByb2R1Y2VkIHRoZSBmb2xsb3dpbmcgZmluZGluZ3M6XG5cbiR7cmV2aWV3Q29udGVudH1gXG5cbiAgZW5xdWV1ZVBlbmRpbmdOb3RpZmljYXRpb24oeyB2YWx1ZTogbWVzc2FnZSwgbW9kZTogJ3Rhc2stbm90aWZpY2F0aW9uJyB9KVxufVxuXG4vKipcbiAqIEVucXVldWUgYSByZW1vdGUtcmV2aWV3IGZhaWx1cmUgbm90aWZpY2F0aW9uLlxuICovXG5mdW5jdGlvbiBlbnF1ZXVlUmVtb3RlUmV2aWV3RmFpbHVyZU5vdGlmaWNhdGlvbihcbiAgdGFza0lkOiBzdHJpbmcsXG4gIHJlYXNvbjogc3RyaW5nLFxuICBzZXRBcHBTdGF0ZTogU2V0QXBwU3RhdGUsXG4pOiB2b2lkIHtcbiAgaWYgKCFtYXJrVGFza05vdGlmaWVkKHRhc2tJZCwgc2V0QXBwU3RhdGUpKSByZXR1cm5cblxuICBjb25zdCBtZXNzYWdlID0gYDwke1RBU0tfTk9USUZJQ0FUSU9OX1RBR30+XG48JHtUQVNLX0lEX1RBR30+JHt0YXNrSWR9PC8ke1RBU0tfSURfVEFHfT5cbjwke1RBU0tfVFlQRV9UQUd9PnJlbW90ZV9hZ2VudDwvJHtUQVNLX1RZUEVfVEFHfT5cbjwke1NUQVRVU19UQUd9PmZhaWxlZDwvJHtTVEFUVVNfVEFHfT5cbjwke1NVTU1BUllfVEFHfT5SZW1vdGUgcmV2aWV3IGZhaWxlZDogJHtyZWFzb259PC8ke1NVTU1BUllfVEFHfT5cbjwvJHtUQVNLX05PVElGSUNBVElPTl9UQUd9PlxuUmVtb3RlIHJldmlldyBkaWQgbm90IHByb2R1Y2Ugb3V0cHV0ICgke3JlYXNvbn0pLiBUZWxsIHRoZSB1c2VyIHRvIHJldHJ5IC91bHRyYXJldmlldywgb3IgdXNlIC9yZXZpZXcgZm9yIGEgbG9jYWwgcmV2aWV3IGluc3RlYWQuYFxuXG4gIGVucXVldWVQZW5kaW5nTm90aWZpY2F0aW9uKHsgdmFsdWU6IG1lc3NhZ2UsIG1vZGU6ICd0YXNrLW5vdGlmaWNhdGlvbicgfSlcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRvZG8gbGlzdCBmcm9tIFNESyBtZXNzYWdlcyAoZmluZHMgbGFzdCBUb2RvV3JpdGUgdG9vbCB1c2UpLlxuICovXG5mdW5jdGlvbiBleHRyYWN0VG9kb0xpc3RGcm9tTG9nKGxvZzogU0RLTWVzc2FnZVtdKTogVG9kb0xpc3Qge1xuICBjb25zdCB0b2RvTGlzdE1lc3NhZ2UgPSBsb2cuZmluZExhc3QoXG4gICAgKG1zZyk6IG1zZyBpcyBTREtBc3Npc3RhbnRNZXNzYWdlID0+XG4gICAgICBtc2cudHlwZSA9PT0gJ2Fzc2lzdGFudCcgJiZcbiAgICAgIG1zZy5tZXNzYWdlLmNvbnRlbnQuc29tZShcbiAgICAgICAgYmxvY2sgPT4gYmxvY2sudHlwZSA9PT0gJ3Rvb2xfdXNlJyAmJiBibG9jay5uYW1lID09PSBUb2RvV3JpdGVUb29sLm5hbWUsXG4gICAgICApLFxuICApXG4gIGlmICghdG9kb0xpc3RNZXNzYWdlKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICBjb25zdCBpbnB1dCA9IHRvZG9MaXN0TWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQuZmluZChcbiAgICAoYmxvY2spOiBibG9jayBpcyBUb29sVXNlQmxvY2sgPT5cbiAgICAgIGJsb2NrLnR5cGUgPT09ICd0b29sX3VzZScgJiYgYmxvY2submFtZSA9PT0gVG9kb1dyaXRlVG9vbC5uYW1lLFxuICApPy5pbnB1dFxuICBpZiAoIWlucHV0KSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICBjb25zdCBwYXJzZWRJbnB1dCA9IFRvZG9Xcml0ZVRvb2wuaW5wdXRTY2hlbWEuc2FmZVBhcnNlKGlucHV0KVxuICBpZiAoIXBhcnNlZElucHV0LnN1Y2Nlc3MpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIHJldHVybiBwYXJzZWRJbnB1dC5kYXRhLnRvZG9zXG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYSByZW1vdGUgYWdlbnQgdGFzayBpbiB0aGUgdW5pZmllZCB0YXNrIGZyYW1ld29yay5cbiAqIEJ1bmRsZXMgdGFzayBJRCBnZW5lcmF0aW9uLCBvdXRwdXQgaW5pdCwgc3RhdGUgY3JlYXRpb24sIHJlZ2lzdHJhdGlvbiwgYW5kIHBvbGxpbmcuXG4gKiBDYWxsZXJzIHJlbWFpbiByZXNwb25zaWJsZSBmb3IgY3VzdG9tIHByZS1yZWdpc3RyYXRpb24gbG9naWMgKGdpdCBkaWFsb2dzLCB0cmFuc2NyaXB0IHVwbG9hZCwgdGVsZXBvcnQgb3B0aW9ucykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclJlbW90ZUFnZW50VGFzayhvcHRpb25zOiB7XG4gIHJlbW90ZVRhc2tUeXBlOiBSZW1vdGVUYXNrVHlwZVxuICBzZXNzaW9uOiB7IGlkOiBzdHJpbmc7IHRpdGxlOiBzdHJpbmcgfVxuICBjb21tYW5kOiBzdHJpbmdcbiAgY29udGV4dDogVGFza0NvbnRleHRcbiAgdG9vbFVzZUlkPzogc3RyaW5nXG4gIGlzUmVtb3RlUmV2aWV3PzogYm9vbGVhblxuICBpc1VsdHJhcGxhbj86IGJvb2xlYW5cbiAgaXNMb25nUnVubmluZz86IGJvb2xlYW5cbiAgcmVtb3RlVGFza01ldGFkYXRhPzogUmVtb3RlVGFza01ldGFkYXRhXG59KToge1xuICB0YXNrSWQ6IHN0cmluZ1xuICBzZXNzaW9uSWQ6IHN0cmluZ1xuICBjbGVhbnVwOiAoKSA9PiB2b2lkXG59IHtcbiAgY29uc3Qge1xuICAgIHJlbW90ZVRhc2tUeXBlLFxuICAgIHNlc3Npb24sXG4gICAgY29tbWFuZCxcbiAgICBjb250ZXh0LFxuICAgIHRvb2xVc2VJZCxcbiAgICBpc1JlbW90ZVJldmlldyxcbiAgICBpc1VsdHJhcGxhbixcbiAgICBpc0xvbmdSdW5uaW5nLFxuICAgIHJlbW90ZVRhc2tNZXRhZGF0YSxcbiAgfSA9IG9wdGlvbnNcbiAgY29uc3QgdGFza0lkID0gZ2VuZXJhdGVUYXNrSWQoJ3JlbW90ZV9hZ2VudCcpXG5cbiAgLy8gQ3JlYXRlIHRoZSBvdXRwdXQgZmlsZSBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhlIHRhc2suXG4gIC8vIFJlbW90ZUFnZW50VGFzayB1c2VzIGFwcGVuZFRhc2tPdXRwdXQoKSAobm90IFRhc2tPdXRwdXQpLCBzb1xuICAvLyB0aGUgZmlsZSBtdXN0IGV4aXN0IGZvciByZWFkZXJzIGJlZm9yZSBhbnkgb3V0cHV0IGFycml2ZXMuXG4gIHZvaWQgaW5pdFRhc2tPdXRwdXQodGFza0lkKVxuXG4gIGNvbnN0IHRhc2tTdGF0ZTogUmVtb3RlQWdlbnRUYXNrU3RhdGUgPSB7XG4gICAgLi4uY3JlYXRlVGFza1N0YXRlQmFzZSh0YXNrSWQsICdyZW1vdGVfYWdlbnQnLCBzZXNzaW9uLnRpdGxlLCB0b29sVXNlSWQpLFxuICAgIHR5cGU6ICdyZW1vdGVfYWdlbnQnLFxuICAgIHJlbW90ZVRhc2tUeXBlLFxuICAgIHN0YXR1czogJ3J1bm5pbmcnLFxuICAgIHNlc3Npb25JZDogc2Vzc2lvbi5pZCxcbiAgICBjb21tYW5kLFxuICAgIHRpdGxlOiBzZXNzaW9uLnRpdGxlLFxuICAgIHRvZG9MaXN0OiBbXSxcbiAgICBsb2c6IFtdLFxuICAgIGlzUmVtb3RlUmV2aWV3LFxuICAgIGlzVWx0cmFwbGFuLFxuICAgIGlzTG9uZ1J1bm5pbmcsXG4gICAgcG9sbFN0YXJ0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICByZW1vdGVUYXNrTWV0YWRhdGEsXG4gIH1cblxuICByZWdpc3RlclRhc2sodGFza1N0YXRlLCBjb250ZXh0LnNldEFwcFN0YXRlKVxuXG4gIC8vIFBlcnNpc3QgaWRlbnRpdHkgdG8gdGhlIHNlc3Npb24gc2lkZWNhciBzbyAtLXJlc3VtZSBjYW4gcmVjb25uZWN0IHRvXG4gIC8vIHN0aWxsLXJ1bm5pbmcgcmVtb3RlIHNlc3Npb25zLiBTdGF0dXMgaXMgbm90IHN0b3JlZCDigJQgaXQncyBmZXRjaGVkXG4gIC8vIGZyZXNoIGZyb20gQ0NSIG9uIHJlc3RvcmUuXG4gIHZvaWQgcGVyc2lzdFJlbW90ZUFnZW50TWV0YWRhdGEoe1xuICAgIHRhc2tJZCxcbiAgICByZW1vdGVUYXNrVHlwZSxcbiAgICBzZXNzaW9uSWQ6IHNlc3Npb24uaWQsXG4gICAgdGl0bGU6IHNlc3Npb24udGl0bGUsXG4gICAgY29tbWFuZCxcbiAgICBzcGF3bmVkQXQ6IERhdGUubm93KCksXG4gICAgdG9vbFVzZUlkLFxuICAgIGlzVWx0cmFwbGFuLFxuICAgIGlzUmVtb3RlUmV2aWV3LFxuICAgIGlzTG9uZ1J1bm5pbmcsXG4gICAgcmVtb3RlVGFza01ldGFkYXRhLFxuICB9KVxuXG4gIC8vIFVsdHJhcGxhbiBsaWZlY3ljbGUgaXMgb3duZWQgYnkgc3RhcnREZXRhY2hlZFBvbGwgaW4gdWx0cmFwbGFuLnRzeC4gR2VuZXJpY1xuICAvLyBwb2xsaW5nIHN0aWxsIHJ1bnMgc28gc2Vzc2lvbi5sb2cgcG9wdWxhdGVzIGZvciB0aGUgZGV0YWlsIHZpZXcncyBwcm9ncmVzc1xuICAvLyBjb3VudHM7IHRoZSByZXN1bHQtbG9va3VwIGd1YXJkIGJlbG93IHByZXZlbnRzIGVhcmx5IGNvbXBsZXRpb24uXG4gIC8vIFRPRE8oIzIzOTg1KTogZm9sZCBFeGl0UGxhbk1vZGVTY2FubmVyIGludG8gdGhpcyBwb2xsZXIsIGRyb3Agc3RhcnREZXRhY2hlZFBvbGwuXG4gIGNvbnN0IHN0b3BQb2xsaW5nID0gc3RhcnRSZW1vdGVTZXNzaW9uUG9sbGluZyh0YXNrSWQsIGNvbnRleHQpXG5cbiAgcmV0dXJuIHtcbiAgICB0YXNrSWQsXG4gICAgc2Vzc2lvbklkOiBzZXNzaW9uLmlkLFxuICAgIGNsZWFudXA6IHN0b3BQb2xsaW5nLFxuICB9XG59XG5cbi8qKlxuICogUmVzdG9yZSByZW1vdGUtYWdlbnQgdGFza3MgZnJvbSB0aGUgc2Vzc2lvbiBzaWRlY2FyIG9uIC0tcmVzdW1lLlxuICpcbiAqIFNjYW5zIHJlbW90ZS1hZ2VudHMvLCBmZXRjaGVzIGxpdmUgQ0NSIHN0YXR1cyBmb3IgZWFjaCwgcmVjb25zdHJ1Y3RzXG4gKiBSZW1vdGVBZ2VudFRhc2tTdGF0ZSBpbnRvIEFwcFN0YXRlLnRhc2tzLCBhbmQgcmVzdGFydHMgcG9sbGluZyBmb3Igc2Vzc2lvbnNcbiAqIHN0aWxsIHJ1bm5pbmcuIFNlc3Npb25zIHRoYXQgYXJlIGFyY2hpdmVkIG9yIDQwNCBoYXZlIHRoZWlyIHNpZGVjYXIgZmlsZVxuICogcmVtb3ZlZC4gTXVzdCBydW4gYWZ0ZXIgc3dpdGNoU2Vzc2lvbigpIHNvIGdldFNlc3Npb25JZCgpIHBvaW50cyBhdCB0aGVcbiAqIHJlc3VtZWQgc2Vzc2lvbidzIHNpZGVjYXIgZGlyZWN0b3J5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzdG9yZVJlbW90ZUFnZW50VGFza3MoXG4gIGNvbnRleHQ6IFRhc2tDb250ZXh0LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcmVzdG9yZVJlbW90ZUFnZW50VGFza3NJbXBsKGNvbnRleHQpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dGb3JEZWJ1Z2dpbmcoYHJlc3RvcmVSZW1vdGVBZ2VudFRhc2tzIGZhaWxlZDogJHtTdHJpbmcoZSl9YClcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXN0b3JlUmVtb3RlQWdlbnRUYXNrc0ltcGwoXG4gIGNvbnRleHQ6IFRhc2tDb250ZXh0LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBlcnNpc3RlZCA9IGF3YWl0IGxpc3RSZW1vdGVBZ2VudE1ldGFkYXRhKClcbiAgaWYgKHBlcnNpc3RlZC5sZW5ndGggPT09IDApIHJldHVyblxuXG4gIGZvciAoY29uc3QgbWV0YSBvZiBwZXJzaXN0ZWQpIHtcbiAgICBsZXQgcmVtb3RlU3RhdHVzOiBzdHJpbmdcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGZldGNoU2Vzc2lvbihtZXRhLnNlc3Npb25JZClcbiAgICAgIHJlbW90ZVN0YXR1cyA9IHNlc3Npb24uc2Vzc2lvbl9zdGF0dXNcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBPbmx5IDQwNCBtZWFucyB0aGUgQ0NSIHNlc3Npb24gaXMgdHJ1bHkgZ29uZS4gQXV0aCBlcnJvcnMgKDQwMSxcbiAgICAgIC8vIG1pc3NpbmcgT0F1dGggdG9rZW4pIGFyZSByZWNvdmVyYWJsZSB2aWEgL2xvZ2luIOKAlCB0aGUgcmVtb3RlXG4gICAgICAvLyBzZXNzaW9uIGlzIHN0aWxsIHJ1bm5pbmcuIGZldGNoU2Vzc2lvbiB0aHJvd3MgcGxhaW4gRXJyb3IgZm9yIGFsbFxuICAgICAgLy8gNHh4ICh2YWxpZGF0ZVN0YXR1cyB0cmVhdHMgPDUwMCBhcyBzdWNjZXNzKSwgc28gaXNUcmFuc2llbnROZXR3b3JrRXJyb3JcbiAgICAgIC8vIGNhbid0IGRpc3Rpbmd1aXNoIHRoZW07IG1hdGNoIHRoZSA0MDQgbWVzc2FnZSBpbnN0ZWFkLlxuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnU2Vzc2lvbiBub3QgZm91bmQ6JykpIHtcbiAgICAgICAgbG9nRm9yRGVidWdnaW5nKFxuICAgICAgICAgIGByZXN0b3JlUmVtb3RlQWdlbnRUYXNrczogZHJvcHBpbmcgJHttZXRhLnRhc2tJZH0gKDQwNDogJHtTdHJpbmcoZSl9KWAsXG4gICAgICAgIClcbiAgICAgICAgdm9pZCByZW1vdmVSZW1vdGVBZ2VudE1ldGFkYXRhKG1ldGEudGFza0lkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nRm9yRGVidWdnaW5nKFxuICAgICAgICAgIGByZXN0b3JlUmVtb3RlQWdlbnRUYXNrczogc2tpcHBpbmcgJHttZXRhLnRhc2tJZH0gKHJlY292ZXJhYmxlOiAke1N0cmluZyhlKX0pYCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAocmVtb3RlU3RhdHVzID09PSAnYXJjaGl2ZWQnKSB7XG4gICAgICAvLyBTZXNzaW9uIGVuZGVkIHdoaWxlIHRoZSBsb2NhbCBjbGllbnQgd2FzIG9mZmxpbmUuIERvbid0IHJlc3VycmVjdC5cbiAgICAgIHZvaWQgcmVtb3ZlUmVtb3RlQWdlbnRNZXRhZGF0YShtZXRhLnRhc2tJZClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgdGFza1N0YXRlOiBSZW1vdGVBZ2VudFRhc2tTdGF0ZSA9IHtcbiAgICAgIC4uLmNyZWF0ZVRhc2tTdGF0ZUJhc2UoXG4gICAgICAgIG1ldGEudGFza0lkLFxuICAgICAgICAncmVtb3RlX2FnZW50JyxcbiAgICAgICAgbWV0YS50aXRsZSxcbiAgICAgICAgbWV0YS50b29sVXNlSWQsXG4gICAgICApLFxuICAgICAgdHlwZTogJ3JlbW90ZV9hZ2VudCcsXG4gICAgICByZW1vdGVUYXNrVHlwZTogaXNSZW1vdGVUYXNrVHlwZShtZXRhLnJlbW90ZVRhc2tUeXBlKVxuICAgICAgICA/IG1ldGEucmVtb3RlVGFza1R5cGVcbiAgICAgICAgOiAncmVtb3RlLWFnZW50JyxcbiAgICAgIHN0YXR1czogJ3J1bm5pbmcnLFxuICAgICAgc2Vzc2lvbklkOiBtZXRhLnNlc3Npb25JZCxcbiAgICAgIGNvbW1hbmQ6IG1ldGEuY29tbWFuZCxcbiAgICAgIHRpdGxlOiBtZXRhLnRpdGxlLFxuICAgICAgdG9kb0xpc3Q6IFtdLFxuICAgICAgbG9nOiBbXSxcbiAgICAgIGlzUmVtb3RlUmV2aWV3OiBtZXRhLmlzUmVtb3RlUmV2aWV3LFxuICAgICAgaXNVbHRyYXBsYW46IG1ldGEuaXNVbHRyYXBsYW4sXG4gICAgICBpc0xvbmdSdW5uaW5nOiBtZXRhLmlzTG9uZ1J1bm5pbmcsXG4gICAgICBzdGFydFRpbWU6IG1ldGEuc3Bhd25lZEF0LFxuICAgICAgcG9sbFN0YXJ0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgIHJlbW90ZVRhc2tNZXRhZGF0YTogbWV0YS5yZW1vdGVUYXNrTWV0YWRhdGEgYXNcbiAgICAgICAgfCBSZW1vdGVUYXNrTWV0YWRhdGFcbiAgICAgICAgfCB1bmRlZmluZWQsXG4gICAgfVxuXG4gICAgcmVnaXN0ZXJUYXNrKHRhc2tTdGF0ZSwgY29udGV4dC5zZXRBcHBTdGF0ZSlcbiAgICB2b2lkIGluaXRUYXNrT3V0cHV0KG1ldGEudGFza0lkKVxuICAgIHN0YXJ0UmVtb3RlU2Vzc2lvblBvbGxpbmcobWV0YS50YXNrSWQsIGNvbnRleHQpXG4gIH1cbn1cblxuLyoqXG4gKiBTdGFydCBwb2xsaW5nIGZvciByZW1vdGUgc2Vzc2lvbiB1cGRhdGVzLlxuICogUmV0dXJucyBhIGNsZWFudXAgZnVuY3Rpb24gdG8gc3RvcCBwb2xsaW5nLlxuICovXG5mdW5jdGlvbiBzdGFydFJlbW90ZVNlc3Npb25Qb2xsaW5nKFxuICB0YXNrSWQ6IHN0cmluZyxcbiAgY29udGV4dDogVGFza0NvbnRleHQsXG4pOiAoKSA9PiB2b2lkIHtcbiAgbGV0IGlzUnVubmluZyA9IHRydWVcbiAgY29uc3QgUE9MTF9JTlRFUlZBTF9NUyA9IDEwMDBcbiAgY29uc3QgUkVNT1RFX1JFVklFV19USU1FT1VUX01TID0gMzAgKiA2MCAqIDEwMDBcbiAgLy8gUmVtb3RlIHNlc3Npb25zIGZsaXAgdG8gJ2lkbGUnIGJldHdlZW4gdG9vbCB0dXJucy4gV2l0aCAxMDArIHJhcGlkXG4gIC8vIHR1cm5zLCBhIDFzIHBvbGwgV0lMTCBjYXRjaCBhIHRyYW5zaWVudCBpZGxlIG1pZC1ydW4uIFJlcXVpcmUgc3RhYmxlXG4gIC8vIGlkbGUgKG5vIGxvZyBncm93dGggZm9yIE4gY29uc2VjdXRpdmUgcG9sbHMpIGJlZm9yZSBiZWxpZXZpbmcgaXQuXG4gIGNvbnN0IFNUQUJMRV9JRExFX1BPTExTID0gNVxuICBsZXQgY29uc2VjdXRpdmVJZGxlUG9sbHMgPSAwXG4gIGxldCBsYXN0RXZlbnRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgbGV0IGFjY3VtdWxhdGVkTG9nOiBTREtNZXNzYWdlW10gPSBbXVxuICAvLyBDYWNoZWQgYWNyb3NzIHRpY2tzIHNvIHdlIGRvbid0IHJlLXNjYW4gdGhlIGZ1bGwgbG9nLiBUYWcgYXBwZWFycyBvbmNlXG4gIC8vIGF0IGVuZCBvZiBydW47IHNjYW5uaW5nIG9ubHkgdGhlIGRlbHRhIChyZXNwb25zZS5uZXdFdmVudHMpIGlzIE8obmV3KS5cbiAgbGV0IGNhY2hlZFJldmlld0NvbnRlbnQ6IHN0cmluZyB8IG51bGwgPSBudWxsXG5cbiAgY29uc3QgcG9sbCA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoIWlzUnVubmluZykgcmV0dXJuXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYXBwU3RhdGUgPSBjb250ZXh0LmdldEFwcFN0YXRlKClcbiAgICAgIGNvbnN0IHRhc2sgPSBhcHBTdGF0ZS50YXNrcz8uW3Rhc2tJZF0gYXMgUmVtb3RlQWdlbnRUYXNrU3RhdGUgfCB1bmRlZmluZWRcbiAgICAgIGlmICghdGFzayB8fCB0YXNrLnN0YXR1cyAhPT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgIC8vIFRhc2sgd2FzIGtpbGxlZCBleHRlcm5hbGx5IChUYXNrU3RvcFRvb2wpIG9yIGFscmVhZHkgdGVybWluYWwuXG4gICAgICAgIC8vIFNlc3Npb24gbGVmdCBhbGl2ZSBzbyB0aGUgY2xhdWRlLmFpIFVSTCBzdGF5cyB2YWxpZCDigJQgdGhlIHJ1bl9odW50LnNoXG4gICAgICAgIC8vIHBvc3Rfc3RhZ2UoKSBjYWxscyBsYW5kIGFzIGFzc2lzdGFudCBldmVudHMgdGhlcmUsIGFuZCB0aGUgdXNlciBtYXlcbiAgICAgICAgLy8gd2FudCB0byByZXZpc2l0IHRoZW0gYWZ0ZXIgY2xvc2luZyB0aGUgdGVybWluYWwuIFRUTCByZWFwcyBpdC5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9sbFJlbW90ZVNlc3Npb25FdmVudHMoXG4gICAgICAgIHRhc2suc2Vzc2lvbklkLFxuICAgICAgICBsYXN0RXZlbnRJZCxcbiAgICAgIClcbiAgICAgIGxhc3RFdmVudElkID0gcmVzcG9uc2UubGFzdEV2ZW50SWRcbiAgICAgIGNvbnN0IGxvZ0dyZXcgPSByZXNwb25zZS5uZXdFdmVudHMubGVuZ3RoID4gMFxuICAgICAgaWYgKGxvZ0dyZXcpIHtcbiAgICAgICAgYWNjdW11bGF0ZWRMb2cgPSBbLi4uYWNjdW11bGF0ZWRMb2csIC4uLnJlc3BvbnNlLm5ld0V2ZW50c11cbiAgICAgICAgY29uc3QgZGVsdGFUZXh0ID0gcmVzcG9uc2UubmV3RXZlbnRzXG4gICAgICAgICAgLm1hcChtc2cgPT4ge1xuICAgICAgICAgICAgaWYgKG1zZy50eXBlID09PSAnYXNzaXN0YW50Jykge1xuICAgICAgICAgICAgICByZXR1cm4gbXNnLm1lc3NhZ2UuY29udGVudFxuICAgICAgICAgICAgICAgIC5maWx0ZXIoYmxvY2sgPT4gYmxvY2sudHlwZSA9PT0gJ3RleHQnKVxuICAgICAgICAgICAgICAgIC5tYXAoYmxvY2sgPT4gKCd0ZXh0JyBpbiBibG9jayA/IGJsb2NrLnRleHQgOiAnJykpXG4gICAgICAgICAgICAgICAgLmpvaW4oJ1xcbicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ganNvblN0cmluZ2lmeShtc2cpXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuam9pbignXFxuJylcbiAgICAgICAgaWYgKGRlbHRhVGV4dCkge1xuICAgICAgICAgIGFwcGVuZFRhc2tPdXRwdXQodGFza0lkLCBkZWx0YVRleHQgKyAnXFxuJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2Uuc2Vzc2lvblN0YXR1cyA9PT0gJ2FyY2hpdmVkJykge1xuICAgICAgICB1cGRhdGVUYXNrU3RhdGU8UmVtb3RlQWdlbnRUYXNrU3RhdGU+KHRhc2tJZCwgY29udGV4dC5zZXRBcHBTdGF0ZSwgdCA9PlxuICAgICAgICAgIHQuc3RhdHVzID09PSAncnVubmluZydcbiAgICAgICAgICAgID8geyAuLi50LCBzdGF0dXM6ICdjb21wbGV0ZWQnLCBlbmRUaW1lOiBEYXRlLm5vdygpIH1cbiAgICAgICAgICAgIDogdCxcbiAgICAgICAgKVxuICAgICAgICBlbnF1ZXVlUmVtb3RlTm90aWZpY2F0aW9uKFxuICAgICAgICAgIHRhc2tJZCxcbiAgICAgICAgICB0YXNrLnRpdGxlLFxuICAgICAgICAgICdjb21wbGV0ZWQnLFxuICAgICAgICAgIGNvbnRleHQuc2V0QXBwU3RhdGUsXG4gICAgICAgICAgdGFzay50b29sVXNlSWQsXG4gICAgICAgIClcbiAgICAgICAgdm9pZCBldmljdFRhc2tPdXRwdXQodGFza0lkKVxuICAgICAgICB2b2lkIHJlbW92ZVJlbW90ZUFnZW50TWV0YWRhdGEodGFza0lkKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hlY2tlciA9IGNvbXBsZXRpb25DaGVja2Vycy5nZXQodGFzay5yZW1vdGVUYXNrVHlwZSlcbiAgICAgIGlmIChjaGVja2VyKSB7XG4gICAgICAgIGNvbnN0IGNvbXBsZXRpb25SZXN1bHQgPSBhd2FpdCBjaGVja2VyKHRhc2sucmVtb3RlVGFza01ldGFkYXRhKVxuICAgICAgICBpZiAoY29tcGxldGlvblJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHVwZGF0ZVRhc2tTdGF0ZTxSZW1vdGVBZ2VudFRhc2tTdGF0ZT4oXG4gICAgICAgICAgICB0YXNrSWQsXG4gICAgICAgICAgICBjb250ZXh0LnNldEFwcFN0YXRlLFxuICAgICAgICAgICAgdCA9PlxuICAgICAgICAgICAgICB0LnN0YXR1cyA9PT0gJ3J1bm5pbmcnXG4gICAgICAgICAgICAgICAgPyB7IC4uLnQsIHN0YXR1czogJ2NvbXBsZXRlZCcsIGVuZFRpbWU6IERhdGUubm93KCkgfVxuICAgICAgICAgICAgICAgIDogdCxcbiAgICAgICAgICApXG4gICAgICAgICAgZW5xdWV1ZVJlbW90ZU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIHRhc2tJZCxcbiAgICAgICAgICAgIGNvbXBsZXRpb25SZXN1bHQsXG4gICAgICAgICAgICAnY29tcGxldGVkJyxcbiAgICAgICAgICAgIGNvbnRleHQuc2V0QXBwU3RhdGUsXG4gICAgICAgICAgICB0YXNrLnRvb2xVc2VJZCxcbiAgICAgICAgICApXG4gICAgICAgICAgdm9pZCBldmljdFRhc2tPdXRwdXQodGFza0lkKVxuICAgICAgICAgIHZvaWQgcmVtb3ZlUmVtb3RlQWdlbnRNZXRhZGF0YSh0YXNrSWQpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVWx0cmFwbGFuOiByZXN1bHQoc3VjY2VzcykgZmlyZXMgYWZ0ZXIgZXZlcnkgQ0NSIHR1cm4sIHNvIGl0IG11c3Qgbm90XG4gICAgICAvLyBkcml2ZSBjb21wbGV0aW9uIOKAlCBzdGFydERldGFjaGVkUG9sbCBvd25zIHRoYXQgdmlhIEV4aXRQbGFuTW9kZSBzY2FuLlxuICAgICAgLy8gTG9uZy1ydW5uaW5nIG1vbml0b3JzIChhdXRvZml4LXByKSBlbWl0IHJlc3VsdCBwZXIgbm90aWZpY2F0aW9uIGN5Y2xlLFxuICAgICAgLy8gc28gdGhlIHNhbWUgc2tpcCBhcHBsaWVzLlxuICAgICAgY29uc3QgcmVzdWx0ID1cbiAgICAgICAgdGFzay5pc1VsdHJhcGxhbiB8fCB0YXNrLmlzTG9uZ1J1bm5pbmdcbiAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgIDogYWNjdW11bGF0ZWRMb2cuZmluZExhc3QobXNnID0+IG1zZy50eXBlID09PSAncmVzdWx0JylcblxuICAgICAgLy8gRm9yIHJlbW90ZS1yZXZpZXc6IDxyZW1vdGUtcmV2aWV3PiBpbiBob29rX3Byb2dyZXNzIHN0ZG91dCBpcyB0aGVcbiAgICAgIC8vIGJ1Z2h1bnRlciBwYXRoJ3MgY29tcGxldGlvbiBzaWduYWwuIFNjYW4gb25seSB0aGUgZGVsdGEgdG8gc3RheSBPKG5ldyk7XG4gICAgICAvLyB0YWcgYXBwZWFycyBvbmNlIGF0IGVuZCBvZiBydW4gc28gd2Ugd29uJ3QgbWlzcyBpdCBhY3Jvc3MgdGlja3MuXG4gICAgICAvLyBGb3IgdGhlIGZhaWx1cmUgc2lnbmFsLCBkZWJvdW5jZSBpZGxlOiByZW1vdGUgc2Vzc2lvbnMgYnJpZWZseSBmbGlwXG4gICAgICAvLyB0byAnaWRsZScgYmV0d2VlbiBldmVyeSB0b29sIHR1cm4sIHNvIGEgc2luZ2xlIGlkbGUgb2JzZXJ2YXRpb24gbWVhbnNcbiAgICAgIC8vIG5vdGhpbmcuIFJlcXVpcmUgU1RBQkxFX0lETEVfUE9MTFMgY29uc2VjdXRpdmUgaWRsZSBwb2xscyB3aXRoIG5vIGxvZ1xuICAgICAgLy8gZ3Jvd3RoLlxuICAgICAgaWYgKHRhc2suaXNSZW1vdGVSZXZpZXcgJiYgbG9nR3JldyAmJiBjYWNoZWRSZXZpZXdDb250ZW50ID09PSBudWxsKSB7XG4gICAgICAgIGNhY2hlZFJldmlld0NvbnRlbnQgPSBleHRyYWN0UmV2aWV3VGFnRnJvbUxvZyhyZXNwb25zZS5uZXdFdmVudHMpXG4gICAgICB9XG4gICAgICAvLyBQYXJzZSBsaXZlIHByb2dyZXNzIGNvdW50cyBmcm9tIHRoZSBvcmNoZXN0cmF0b3IncyBoZWFydGJlYXQgZWNob2VzLlxuICAgICAgLy8gaG9va19wcm9ncmVzcyBzdGRvdXQgaXMgY3VtdWxhdGl2ZSAoZXZlcnkgZWNobyBzaW5jZSBob29rIHN0YXJ0KSwgc29cbiAgICAgIC8vIGVhY2ggZXZlbnQgY29udGFpbnMgYWxsIHByb2dyZXNzIHRhZ3MuIEdyYWIgdGhlIExBU1Qgb2NjdXJyZW5jZSDigJRcbiAgICAgIC8vIGV4dHJhY3RUYWcgcmV0dXJucyB0aGUgZmlyc3QgbWF0Y2ggd2hpY2ggd291bGQgYWx3YXlzIGJlIHRoZSBlYXJsaWVzdFxuICAgICAgLy8gdmFsdWUgKDAvMCkuXG4gICAgICBsZXQgbmV3UHJvZ3Jlc3M6IFJlbW90ZUFnZW50VGFza1N0YXRlWydyZXZpZXdQcm9ncmVzcyddXG4gICAgICBpZiAodGFzay5pc1JlbW90ZVJldmlldyAmJiBsb2dHcmV3KSB7XG4gICAgICAgIGNvbnN0IG9wZW4gPSBgPCR7UkVNT1RFX1JFVklFV19QUk9HUkVTU19UQUd9PmBcbiAgICAgICAgY29uc3QgY2xvc2UgPSBgPC8ke1JFTU9URV9SRVZJRVdfUFJPR1JFU1NfVEFHfT5gXG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgcmVzcG9uc2UubmV3RXZlbnRzKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZXYudHlwZSA9PT0gJ3N5c3RlbScgJiZcbiAgICAgICAgICAgIChldi5zdWJ0eXBlID09PSAnaG9va19wcm9ncmVzcycgfHwgZXYuc3VidHlwZSA9PT0gJ2hvb2tfcmVzcG9uc2UnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgcyA9IGV2LnN0ZG91dFxuICAgICAgICAgICAgY29uc3QgY2xvc2VBdCA9IHMubGFzdEluZGV4T2YoY2xvc2UpXG4gICAgICAgICAgICBjb25zdCBvcGVuQXQgPSBjbG9zZUF0ID09PSAtMSA/IC0xIDogcy5sYXN0SW5kZXhPZihvcGVuLCBjbG9zZUF0KVxuICAgICAgICAgICAgaWYgKG9wZW5BdCAhPT0gLTEgJiYgY2xvc2VBdCA+IG9wZW5BdCkge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICAgICAgcy5zbGljZShvcGVuQXQgKyBvcGVuLmxlbmd0aCwgY2xvc2VBdCksXG4gICAgICAgICAgICAgICAgKSBhcyB7XG4gICAgICAgICAgICAgICAgICBzdGFnZT86ICdmaW5kaW5nJyB8ICd2ZXJpZnlpbmcnIHwgJ3N5bnRoZXNpemluZydcbiAgICAgICAgICAgICAgICAgIGJ1Z3NfZm91bmQ/OiBudW1iZXJcbiAgICAgICAgICAgICAgICAgIGJ1Z3NfdmVyaWZpZWQ/OiBudW1iZXJcbiAgICAgICAgICAgICAgICAgIGJ1Z3NfcmVmdXRlZD86IG51bWJlclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXdQcm9ncmVzcyA9IHtcbiAgICAgICAgICAgICAgICAgIHN0YWdlOiBwLnN0YWdlLFxuICAgICAgICAgICAgICAgICAgYnVnc0ZvdW5kOiBwLmJ1Z3NfZm91bmQgPz8gMCxcbiAgICAgICAgICAgICAgICAgIGJ1Z3NWZXJpZmllZDogcC5idWdzX3ZlcmlmaWVkID8/IDAsXG4gICAgICAgICAgICAgICAgICBidWdzUmVmdXRlZDogcC5idWdzX3JlZnV0ZWQgPz8gMCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBtYWxmb3JtZWQgcHJvZ3Jlc3NcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gSG9vayBldmVudHMgY291bnQgYXMgb3V0cHV0IG9ubHkgZm9yIHJlbW90ZS1yZXZpZXcg4oCUIGJ1Z2h1bnRlcidzXG4gICAgICAvLyBTZXNzaW9uU3RhcnQgaG9vayBwcm9kdWNlcyB6ZXJvIGFzc2lzdGFudCB0dXJucyBzbyBzdGFibGVJZGxlIHdvdWxkXG4gICAgICAvLyBuZXZlciBhcm0gd2l0aG91dCB0aGlzLlxuICAgICAgY29uc3QgaGFzQW55T3V0cHV0ID0gYWNjdW11bGF0ZWRMb2cuc29tZShcbiAgICAgICAgbXNnID0+XG4gICAgICAgICAgbXNnLnR5cGUgPT09ICdhc3Npc3RhbnQnIHx8XG4gICAgICAgICAgKHRhc2suaXNSZW1vdGVSZXZpZXcgJiZcbiAgICAgICAgICAgIG1zZy50eXBlID09PSAnc3lzdGVtJyAmJlxuICAgICAgICAgICAgKG1zZy5zdWJ0eXBlID09PSAnaG9va19wcm9ncmVzcycgfHxcbiAgICAgICAgICAgICAgbXNnLnN1YnR5cGUgPT09ICdob29rX3Jlc3BvbnNlJykpLFxuICAgICAgKVxuICAgICAgaWYgKHJlc3BvbnNlLnNlc3Npb25TdGF0dXMgPT09ICdpZGxlJyAmJiAhbG9nR3JldyAmJiBoYXNBbnlPdXRwdXQpIHtcbiAgICAgICAgY29uc2VjdXRpdmVJZGxlUG9sbHMrK1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc2VjdXRpdmVJZGxlUG9sbHMgPSAwXG4gICAgICB9XG4gICAgICBjb25zdCBzdGFibGVJZGxlID0gY29uc2VjdXRpdmVJZGxlUG9sbHMgPj0gU1RBQkxFX0lETEVfUE9MTFNcbiAgICAgIC8vIHN0YWJsZUlkbGUgaXMgYSBwcm9tcHQtbW9kZSBjb21wbGV0aW9uIHNpZ25hbCAoQ2xhdWRlIHN0b3BzIHdyaXRpbmdcbiAgICAgIC8vIOKGkiBzZXNzaW9uIGlkbGVzIOKGkiBkb25lKS4gSW4gYnVnaHVudGVyIG1vZGUgdGhlIHNlc3Npb24gaXMgXCJpZGxlXCIgdGhlXG4gICAgICAvLyBlbnRpcmUgdGltZSB0aGUgU2Vzc2lvblN0YXJ0IGhvb2sgcnVuczsgdGhlIHByZXZpb3VzIGd1YXJkIGNoZWNrZWRcbiAgICAgIC8vIGhhc0Fzc2lzdGFudEV2ZW50cyBhcyBhIHByb21wdC1tb2RlIHByb3h5LCBidXQgcG9zdF9zdGFnZSgpIG5vd1xuICAgICAgLy8gd3JpdGVzIGFzc2lzdGFudCBldmVudHMgaW4gYnVnaHVudGVyIG1vZGUgdG9vLCBzbyB0aGF0IGNoZWNrXG4gICAgICAvLyBtaXNmaXJlcyBiZXR3ZWVuIGhlYXJ0YmVhdHMuIFByZXNlbmNlIG9mIGEgU2Vzc2lvblN0YXJ0IGhvb2sgZXZlbnRcbiAgICAgIC8vIGlzIHRoZSBkaXNjcmltaW5hdG9yIOKAlCBidWdodW50ZXIgbW9kZSBhbHdheXMgaGFzIG9uZSAocnVuX2h1bnQuc2gpLFxuICAgICAgLy8gcHJvbXB0IG1vZGUgbmV2ZXIgZG9lcyDigJQgYW5kIGl0IGFycml2ZXMgYmVmb3JlIHRoZSBraWNrb2ZmXG4gICAgICAvLyBwb3N0X3N0YWdlIHNvIHRoZXJlJ3Mgbm8gcmFjZS4gV2hlbiB0aGUgaG9vayBpcyBydW5uaW5nLCBvbmx5IHRoZVxuICAgICAgLy8gPHJlbW90ZS1yZXZpZXc+IHRhZyBvciB0aGUgMzBtaW4gdGltZW91dCBjb21wbGV0ZSB0aGUgdGFzay5cbiAgICAgIC8vIEZpbHRlcmluZyBvbiBob29rX2V2ZW50IGF2b2lkcyBhICh0aGVvcmV0aWNhbCkgbm9uLVNlc3Npb25TdGFydCBob29rXG4gICAgICAvLyBpbiBwcm9tcHQgbW9kZSBmcm9tIGJsb2NraW5nIHN0YWJsZUlkbGUg4oCUIHRoZSBjb2RlX3JldmlldyBjb250YWluZXJcbiAgICAgIC8vIG9ubHkgcmVnaXN0ZXJzIFNlc3Npb25TdGFydCwgYnV0IHRoZSAzMG1pbi1oYW5nIGZhaWx1cmUgbW9kZSBpc1xuICAgICAgLy8gd29ydGggZGVmZW5kaW5nIGFnYWluc3QuXG4gICAgICBjb25zdCBoYXNTZXNzaW9uU3RhcnRIb29rID0gYWNjdW11bGF0ZWRMb2cuc29tZShcbiAgICAgICAgbSA9PlxuICAgICAgICAgIG0udHlwZSA9PT0gJ3N5c3RlbScgJiZcbiAgICAgICAgICAobS5zdWJ0eXBlID09PSAnaG9va19zdGFydGVkJyB8fFxuICAgICAgICAgICAgbS5zdWJ0eXBlID09PSAnaG9va19wcm9ncmVzcycgfHxcbiAgICAgICAgICAgIG0uc3VidHlwZSA9PT0gJ2hvb2tfcmVzcG9uc2UnKSAmJlxuICAgICAgICAgIChtIGFzIHsgaG9va19ldmVudD86IHN0cmluZyB9KS5ob29rX2V2ZW50ID09PSAnU2Vzc2lvblN0YXJ0JyxcbiAgICAgIClcbiAgICAgIGNvbnN0IGhhc0Fzc2lzdGFudEV2ZW50cyA9IGFjY3VtdWxhdGVkTG9nLnNvbWUoXG4gICAgICAgIG0gPT4gbS50eXBlID09PSAnYXNzaXN0YW50JyxcbiAgICAgIClcbiAgICAgIGNvbnN0IHNlc3Npb25Eb25lID1cbiAgICAgICAgdGFzay5pc1JlbW90ZVJldmlldyAmJlxuICAgICAgICAoY2FjaGVkUmV2aWV3Q29udGVudCAhPT0gbnVsbCB8fFxuICAgICAgICAgICghaGFzU2Vzc2lvblN0YXJ0SG9vayAmJiBzdGFibGVJZGxlICYmIGhhc0Fzc2lzdGFudEV2ZW50cykpXG4gICAgICBjb25zdCByZXZpZXdUaW1lZE91dCA9XG4gICAgICAgIHRhc2suaXNSZW1vdGVSZXZpZXcgJiZcbiAgICAgICAgRGF0ZS5ub3coKSAtIHRhc2sucG9sbFN0YXJ0ZWRBdCA+IFJFTU9URV9SRVZJRVdfVElNRU9VVF9NU1xuICAgICAgY29uc3QgbmV3U3RhdHVzID0gcmVzdWx0XG4gICAgICAgID8gcmVzdWx0LnN1YnR5cGUgPT09ICdzdWNjZXNzJ1xuICAgICAgICAgID8gKCdjb21wbGV0ZWQnIGFzIGNvbnN0KVxuICAgICAgICAgIDogKCdmYWlsZWQnIGFzIGNvbnN0KVxuICAgICAgICA6IHNlc3Npb25Eb25lIHx8IHJldmlld1RpbWVkT3V0XG4gICAgICAgICAgPyAoJ2NvbXBsZXRlZCcgYXMgY29uc3QpXG4gICAgICAgICAgOiBhY2N1bXVsYXRlZExvZy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/ICgncnVubmluZycgYXMgY29uc3QpXG4gICAgICAgICAgICA6ICgnc3RhcnRpbmcnIGFzIGNvbnN0KVxuXG4gICAgICAvLyBVcGRhdGUgdGFzayBzdGF0ZS4gR3VhcmQgYWdhaW5zdCB0ZXJtaW5hbCBzdGF0ZXMg4oCUIGlmIHN0b3BUYXNrIHJhY2VkXG4gICAgICAvLyB3aGlsZSBwb2xsUmVtb3RlU2Vzc2lvbkV2ZW50cyB3YXMgaW4tZmxpZ2h0IChzdGF0dXMgc2V0IHRvICdraWxsZWQnLFxuICAgICAgLy8gbm90aWZpZWQgc2V0IHRvIHRydWUpLCBiYWlsIHdpdGhvdXQgb3ZlcndyaXRpbmcgc3RhdHVzIG9yIHByb2NlZWRpbmcgdG9cbiAgICAgIC8vIHNpZGUgZWZmZWN0cyAobm90aWZpY2F0aW9uLCBwZXJtaXNzaW9uLW1vZGUgZmxpcCkuXG4gICAgICBsZXQgcmFjZVRlcm1pbmF0ZWQgPSBmYWxzZVxuICAgICAgdXBkYXRlVGFza1N0YXRlPFJlbW90ZUFnZW50VGFza1N0YXRlPihcbiAgICAgICAgdGFza0lkLFxuICAgICAgICBjb250ZXh0LnNldEFwcFN0YXRlLFxuICAgICAgICBwcmV2VGFzayA9PiB7XG4gICAgICAgICAgaWYgKHByZXZUYXNrLnN0YXR1cyAhPT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgICAgICByYWNlVGVybWluYXRlZCA9IHRydWVcbiAgICAgICAgICAgIHJldHVybiBwcmV2VGFza1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBObyBsb2cgZ3Jvd3RoIGFuZCBzdGF0dXMgdW5jaGFuZ2VkIOKGkiBub3RoaW5nIHRvIHJlcG9ydC4gUmV0dXJuXG4gICAgICAgICAgLy8gc2FtZSByZWYgc28gdXBkYXRlVGFza1N0YXRlIHNraXBzIHRoZSBzcHJlYWQgYW5kIDE4IHMudGFza3NcbiAgICAgICAgICAvLyBzdWJzY3JpYmVycyAoUkVQTCwgU3Bpbm5lciwgUHJvbXB0SW5wdXQsIC4uLikgZG9uJ3QgcmUtcmVuZGVyLlxuICAgICAgICAgIC8vIG5ld1Byb2dyZXNzIG9ubHkgYXJyaXZlcyB2aWEgbG9nIGdyb3d0aCAoaGVhcnRiZWF0IGVjaG8gaXMgYVxuICAgICAgICAgIC8vIGhvb2tfcHJvZ3Jlc3MgZXZlbnQpLCBzbyAhbG9nR3JldyBhbHJlYWR5IGNvdmVycyBuby11cGRhdGUuXG4gICAgICAgICAgY29uc3Qgc3RhdHVzVW5jaGFuZ2VkID1cbiAgICAgICAgICAgIG5ld1N0YXR1cyA9PT0gJ3J1bm5pbmcnIHx8IG5ld1N0YXR1cyA9PT0gJ3N0YXJ0aW5nJ1xuICAgICAgICAgIGlmICghbG9nR3JldyAmJiBzdGF0dXNVbmNoYW5nZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2VGFza1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ucHJldlRhc2ssXG4gICAgICAgICAgICBzdGF0dXM6IG5ld1N0YXR1cyA9PT0gJ3N0YXJ0aW5nJyA/ICdydW5uaW5nJyA6IG5ld1N0YXR1cyxcbiAgICAgICAgICAgIGxvZzogYWNjdW11bGF0ZWRMb2csXG4gICAgICAgICAgICAvLyBPbmx5IHJlLXNjYW4gZm9yIFRvZG9Xcml0ZSB3aGVuIGxvZyBncmV3IOKAlCBsb2cgaXMgYXBwZW5kLW9ubHksXG4gICAgICAgICAgICAvLyBzbyBubyBncm93dGggbWVhbnMgbm8gbmV3IHRvb2xfdXNlIGJsb2Nrcy4gQXZvaWRzIGZpbmRMYXN0ICtcbiAgICAgICAgICAgIC8vIHNvbWUgKyBmaW5kICsgc2FmZVBhcnNlIGV2ZXJ5IHNlY29uZCB3aGVuIGlkbGUuXG4gICAgICAgICAgICB0b2RvTGlzdDogbG9nR3Jld1xuICAgICAgICAgICAgICA/IGV4dHJhY3RUb2RvTGlzdEZyb21Mb2coYWNjdW11bGF0ZWRMb2cpXG4gICAgICAgICAgICAgIDogcHJldlRhc2sudG9kb0xpc3QsXG4gICAgICAgICAgICByZXZpZXdQcm9ncmVzczogbmV3UHJvZ3Jlc3MgPz8gcHJldlRhc2sucmV2aWV3UHJvZ3Jlc3MsXG4gICAgICAgICAgICBlbmRUaW1lOlxuICAgICAgICAgICAgICByZXN1bHQgfHwgc2Vzc2lvbkRvbmUgfHwgcmV2aWV3VGltZWRPdXQgPyBEYXRlLm5vdygpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIGlmIChyYWNlVGVybWluYXRlZCkgcmV0dXJuXG5cbiAgICAgIC8vIFNlbmQgbm90aWZpY2F0aW9uIGlmIHRhc2sgY29tcGxldGVkIG9yIHRpbWVkIG91dFxuICAgICAgaWYgKHJlc3VsdCB8fCBzZXNzaW9uRG9uZSB8fCByZXZpZXdUaW1lZE91dCkge1xuICAgICAgICBjb25zdCBmaW5hbFN0YXR1cyA9XG4gICAgICAgICAgcmVzdWx0ICYmIHJlc3VsdC5zdWJ0eXBlICE9PSAnc3VjY2VzcycgPyAnZmFpbGVkJyA6ICdjb21wbGV0ZWQnXG5cbiAgICAgICAgLy8gRm9yIHJlbW90ZS1yZXZpZXcgdGFza3M6IGluamVjdCB0aGUgcmV2aWV3IHRleHQgZGlyZWN0bHkgaW50byB0aGVcbiAgICAgICAgLy8gbWVzc2FnZSBxdWV1ZS4gTm8gbW9kZSBjaGFuZ2UsIG5vIGZpbGUgaW5kaXJlY3Rpb24g4oCUIHRoZSBsb2NhbCBtb2RlbFxuICAgICAgICAvLyBqdXN0IHNlZXMgdGhlIHJldmlldyBhcHBlYXIgYXMgYSB0YXNrLW5vdGlmaWNhdGlvbiBvbiBpdHMgbmV4dCB0dXJuLlxuICAgICAgICAvLyBTZXNzaW9uIGtlcHQgYWxpdmUg4oCUIHJ1bl9odW50LnNoJ3MgcG9zdF9zdGFnZSgpIGhhcyBhbHJlYWR5IHdyaXR0ZW5cbiAgICAgICAgLy8gdGhlIGZvcm1hdHRlZCBmaW5kaW5ncyBhcyBhbiBhc3Npc3RhbnQgZXZlbnQsIHNvIHRoZSBjbGF1ZGUuYWkgVVJMXG4gICAgICAgIC8vIHN0YXlzIGEgZHVyYWJsZSByZWNvcmQgdGhlIHVzZXIgY2FuIHJldmlzaXQuIFRUTCBoYW5kbGVzIGNsZWFudXAuXG4gICAgICAgIGlmICh0YXNrLmlzUmVtb3RlUmV2aWV3KSB7XG4gICAgICAgICAgLy8gY2FjaGVkUmV2aWV3Q29udGVudCBoaXQgdGhlIHRhZyBpbiB0aGUgZGVsdGEgc2Nhbi4gRnVsbC1sb2cgc2NhblxuICAgICAgICAgIC8vIGNhdGNoZXMgdGhlIHN0YWJsZUlkbGUgcGF0aCB3aGVyZSB0aGUgdGFnIGFycml2ZWQgaW4gYW4gZWFybGllclxuICAgICAgICAgIC8vIHRpY2sgYnV0IHRoZSBkZWx0YSBzY2FuIHdhc24ndCB3aXJlZCB5ZXQgKGZpcnN0IHBvbGwgYWZ0ZXIgcmVzdW1lKS5cbiAgICAgICAgICBjb25zdCByZXZpZXdDb250ZW50ID1cbiAgICAgICAgICAgIGNhY2hlZFJldmlld0NvbnRlbnQgPz8gZXh0cmFjdFJldmlld0Zyb21Mb2coYWNjdW11bGF0ZWRMb2cpXG4gICAgICAgICAgaWYgKHJldmlld0NvbnRlbnQgJiYgZmluYWxTdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgICAgICAgICBlbnF1ZXVlUmVtb3RlUmV2aWV3Tm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgICB0YXNrSWQsXG4gICAgICAgICAgICAgIHJldmlld0NvbnRlbnQsXG4gICAgICAgICAgICAgIGNvbnRleHQuc2V0QXBwU3RhdGUsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICB2b2lkIGV2aWN0VGFza091dHB1dCh0YXNrSWQpXG4gICAgICAgICAgICB2b2lkIHJlbW92ZVJlbW90ZUFnZW50TWV0YWRhdGEodGFza0lkKVxuICAgICAgICAgICAgcmV0dXJuIC8vIFN0b3AgcG9sbGluZ1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE5vIG91dHB1dCBvciByZW1vdGUgZXJyb3Ig4oCUIG1hcmsgZmFpbGVkIHdpdGggYSByZXZpZXctc3BlY2lmaWMgbWVzc2FnZS5cbiAgICAgICAgICB1cGRhdGVUYXNrU3RhdGUodGFza0lkLCBjb250ZXh0LnNldEFwcFN0YXRlLCB0ID0+ICh7XG4gICAgICAgICAgICAuLi50LFxuICAgICAgICAgICAgc3RhdHVzOiAnZmFpbGVkJyxcbiAgICAgICAgICB9KSlcbiAgICAgICAgICBjb25zdCByZWFzb24gPVxuICAgICAgICAgICAgcmVzdWx0ICYmIHJlc3VsdC5zdWJ0eXBlICE9PSAnc3VjY2VzcydcbiAgICAgICAgICAgICAgPyAncmVtb3RlIHNlc3Npb24gcmV0dXJuZWQgYW4gZXJyb3InXG4gICAgICAgICAgICAgIDogcmV2aWV3VGltZWRPdXQgJiYgIXNlc3Npb25Eb25lXG4gICAgICAgICAgICAgICAgPyAncmVtb3RlIHNlc3Npb24gZXhjZWVkZWQgMzAgbWludXRlcydcbiAgICAgICAgICAgICAgICA6ICdubyByZXZpZXcgb3V0cHV0IOKAlCBvcmNoZXN0cmF0b3IgbWF5IGhhdmUgZXhpdGVkIGVhcmx5J1xuICAgICAgICAgIGVucXVldWVSZW1vdGVSZXZpZXdGYWlsdXJlTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgdGFza0lkLFxuICAgICAgICAgICAgcmVhc29uLFxuICAgICAgICAgICAgY29udGV4dC5zZXRBcHBTdGF0ZSxcbiAgICAgICAgICApXG4gICAgICAgICAgdm9pZCBldmljdFRhc2tPdXRwdXQodGFza0lkKVxuICAgICAgICAgIHZvaWQgcmVtb3ZlUmVtb3RlQWdlbnRNZXRhZGF0YSh0YXNrSWQpXG4gICAgICAgICAgcmV0dXJuIC8vIFN0b3AgcG9sbGluZ1xuICAgICAgICB9XG5cbiAgICAgICAgZW5xdWV1ZVJlbW90ZU5vdGlmaWNhdGlvbihcbiAgICAgICAgICB0YXNrSWQsXG4gICAgICAgICAgdGFzay50aXRsZSxcbiAgICAgICAgICBmaW5hbFN0YXR1cyxcbiAgICAgICAgICBjb250ZXh0LnNldEFwcFN0YXRlLFxuICAgICAgICAgIHRhc2sudG9vbFVzZUlkLFxuICAgICAgICApXG4gICAgICAgIHZvaWQgZXZpY3RUYXNrT3V0cHV0KHRhc2tJZClcbiAgICAgICAgdm9pZCByZW1vdmVSZW1vdGVBZ2VudE1ldGFkYXRhKHRhc2tJZClcbiAgICAgICAgcmV0dXJuIC8vIFN0b3AgcG9sbGluZ1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcihlcnJvcilcbiAgICAgIC8vIFJlc2V0IHNvIGFuIEFQSSBlcnJvciBkb2Vzbid0IGxldCBub24tY29uc2VjdXRpdmUgaWRsZSBwb2xscyBhY2N1bXVsYXRlLlxuICAgICAgY29uc2VjdXRpdmVJZGxlUG9sbHMgPSAwXG5cbiAgICAgIC8vIENoZWNrIHJldmlldyB0aW1lb3V0IGV2ZW4gd2hlbiB0aGUgQVBJIGNhbGwgZmFpbHMg4oCUIHdpdGhvdXQgdGhpcyxcbiAgICAgIC8vIHBlcnNpc3RlbnQgQVBJIGVycm9ycyBza2lwIHRoZSB0aW1lb3V0IGNoZWNrIGFuZCBwb2xsIGZvcmV2ZXIuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBhcHBTdGF0ZSA9IGNvbnRleHQuZ2V0QXBwU3RhdGUoKVxuICAgICAgICBjb25zdCB0YXNrID0gYXBwU3RhdGUudGFza3M/Llt0YXNrSWRdIGFzXG4gICAgICAgICAgfCBSZW1vdGVBZ2VudFRhc2tTdGF0ZVxuICAgICAgICAgIHwgdW5kZWZpbmVkXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0YXNrPy5pc1JlbW90ZVJldmlldyAmJlxuICAgICAgICAgIHRhc2suc3RhdHVzID09PSAncnVubmluZycgJiZcbiAgICAgICAgICBEYXRlLm5vdygpIC0gdGFzay5wb2xsU3RhcnRlZEF0ID4gUkVNT1RFX1JFVklFV19USU1FT1VUX01TXG4gICAgICAgICkge1xuICAgICAgICAgIHVwZGF0ZVRhc2tTdGF0ZSh0YXNrSWQsIGNvbnRleHQuc2V0QXBwU3RhdGUsIHQgPT4gKHtcbiAgICAgICAgICAgIC4uLnQsXG4gICAgICAgICAgICBzdGF0dXM6ICdmYWlsZWQnLFxuICAgICAgICAgICAgZW5kVGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgICBlbnF1ZXVlUmVtb3RlUmV2aWV3RmFpbHVyZU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIHRhc2tJZCxcbiAgICAgICAgICAgICdyZW1vdGUgc2Vzc2lvbiBleGNlZWRlZCAzMCBtaW51dGVzJyxcbiAgICAgICAgICAgIGNvbnRleHQuc2V0QXBwU3RhdGUsXG4gICAgICAgICAgKVxuICAgICAgICAgIHZvaWQgZXZpY3RUYXNrT3V0cHV0KHRhc2tJZClcbiAgICAgICAgICB2b2lkIHJlbW92ZVJlbW90ZUFnZW50TWV0YWRhdGEodGFza0lkKVxuICAgICAgICAgIHJldHVybiAvLyBTdG9wIHBvbGxpbmdcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEJlc3QgZWZmb3J0IOKAlCBpZiBnZXRBcHBTdGF0ZSBmYWlscywgY29udGludWUgcG9sbGluZ1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbnRpbnVlIHBvbGxpbmdcbiAgICBpZiAoaXNSdW5uaW5nKSB7XG4gICAgICBzZXRUaW1lb3V0KHBvbGwsIFBPTExfSU5URVJWQUxfTVMpXG4gICAgfVxuICB9XG5cbiAgLy8gU3RhcnQgcG9sbGluZ1xuICB2b2lkIHBvbGwoKVxuXG4gIC8vIFJldHVybiBjbGVhbnVwIGZ1bmN0aW9uXG4gIHJldHVybiAoKSA9PiB7XG4gICAgaXNSdW5uaW5nID0gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIFJlbW90ZUFnZW50VGFzayAtIEhhbmRsZXMgcmVtb3RlIENsYXVkZS5haSBzZXNzaW9uIGV4ZWN1dGlvbi5cbiAqXG4gKiBSZXBsYWNlcyB0aGUgQmFja2dyb3VuZFJlbW90ZVNlc3Npb24gaW1wbGVtZW50YXRpb24gZnJvbTpcbiAqIC0gc3JjL3V0aWxzL2JhY2tncm91bmQvcmVtb3RlL3JlbW90ZVNlc3Npb24udHNcbiAqIC0gc3JjL2NvbXBvbmVudHMvdGFza3MvQmFja2dyb3VuZFRhc2tTdGF0dXMudHN4IChwb2xsaW5nIGxvZ2ljKVxuICovXG5leHBvcnQgY29uc3QgUmVtb3RlQWdlbnRUYXNrOiBUYXNrID0ge1xuICBuYW1lOiAnUmVtb3RlQWdlbnRUYXNrJyxcbiAgdHlwZTogJ3JlbW90ZV9hZ2VudCcsXG4gIGFzeW5jIGtpbGwodGFza0lkLCBzZXRBcHBTdGF0ZSkge1xuICAgIGxldCB0b29sVXNlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgIGxldCBkZXNjcmlwdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgbGV0IHNlc3Npb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgbGV0IGtpbGxlZCA9IGZhbHNlXG4gICAgdXBkYXRlVGFza1N0YXRlPFJlbW90ZUFnZW50VGFza1N0YXRlPih0YXNrSWQsIHNldEFwcFN0YXRlLCB0YXNrID0+IHtcbiAgICAgIGlmICh0YXNrLnN0YXR1cyAhPT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgIHJldHVybiB0YXNrXG4gICAgICB9XG4gICAgICB0b29sVXNlSWQgPSB0YXNrLnRvb2xVc2VJZFxuICAgICAgZGVzY3JpcHRpb24gPSB0YXNrLmRlc2NyaXB0aW9uXG4gICAgICBzZXNzaW9uSWQgPSB0YXNrLnNlc3Npb25JZFxuICAgICAga2lsbGVkID0gdHJ1ZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGFzayxcbiAgICAgICAgc3RhdHVzOiAna2lsbGVkJyxcbiAgICAgICAgbm90aWZpZWQ6IHRydWUsXG4gICAgICAgIGVuZFRpbWU6IERhdGUubm93KCksXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIENsb3NlIHRoZSB0YXNrX3N0YXJ0ZWQgYm9va2VuZCBmb3IgU0RLIGNvbnN1bWVycy4gVGhlIHBvbGwgbG9vcCdzXG4gICAgLy8gZWFybHktcmV0dXJuIHdoZW4gc3RhdHVzIT09J3J1bm5pbmcnIHdvbid0IGVtaXQgYSBub3RpZmljYXRpb24uXG4gICAgaWYgKGtpbGxlZCkge1xuICAgICAgZW1pdFRhc2tUZXJtaW5hdGVkU2RrKHRhc2tJZCwgJ3N0b3BwZWQnLCB7XG4gICAgICAgIHRvb2xVc2VJZCxcbiAgICAgICAgc3VtbWFyeTogZGVzY3JpcHRpb24sXG4gICAgICB9KVxuICAgICAgLy8gQXJjaGl2ZSB0aGUgcmVtb3RlIHNlc3Npb24gc28gaXQgc3RvcHMgY29uc3VtaW5nIGNsb3VkIHJlc291cmNlcy5cbiAgICAgIGlmIChzZXNzaW9uSWQpIHtcbiAgICAgICAgdm9pZCBhcmNoaXZlUmVtb3RlU2Vzc2lvbihzZXNzaW9uSWQpLmNhdGNoKGUgPT5cbiAgICAgICAgICBsb2dGb3JEZWJ1Z2dpbmcoYFJlbW90ZUFnZW50VGFzayBhcmNoaXZlIGZhaWxlZDogJHtTdHJpbmcoZSl9YCksXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2b2lkIGV2aWN0VGFza091dHB1dCh0YXNrSWQpXG4gICAgdm9pZCByZW1vdmVSZW1vdGVBZ2VudE1ldGFkYXRhKHRhc2tJZClcbiAgICBsb2dGb3JEZWJ1Z2dpbmcoXG4gICAgICBgUmVtb3RlQWdlbnRUYXNrICR7dGFza0lkfSBraWxsZWQsIGFyY2hpdmluZyBzZXNzaW9uICR7c2Vzc2lvbklkID8/ICd1bmtub3duJ31gLFxuICAgIClcbiAgfSxcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHNlc3Npb24gVVJMIGZvciBhIHJlbW90ZSB0YXNrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVtb3RlVGFza1Nlc3Npb25Vcmwoc2Vzc2lvbklkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZ2V0UmVtb3RlU2Vzc2lvblVybChzZXNzaW9uSWQsIHByb2Nlc3MuZW52LlNFU1NJT05fSU5HUkVTU19VUkwpXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLGNBQWNBLFlBQVksUUFBUSw2QkFBNkI7QUFDL0QsU0FBU0MsbUJBQW1CLFFBQVEsNEJBQTRCO0FBQ2hFLFNBQ0VDLGVBQWUsRUFDZkMsMEJBQTBCLEVBQzFCQyxpQkFBaUIsRUFDakJDLFVBQVUsRUFDVkMsV0FBVyxFQUNYQyxXQUFXLEVBQ1hDLHFCQUFxQixFQUNyQkMsYUFBYSxFQUNiQyxlQUFlLEVBQ2ZDLGFBQWEsUUFDUix3QkFBd0I7QUFDL0IsY0FD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
@@ -868,5 +868,4 @@ export function extractLastToolInfo(progressMessages: ProgressMessage<Progress>[
868
868
  }
869
869
  function isCustomSubagentType(subagentType: string | undefined): subagentType is string {
870
870
  return !!subagentType && subagentType !== GENERAL_PURPOSE_AGENT.agentType && subagentType !== 'worker';
871
- }
872
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUb29sUmVzdWx0QmxvY2tQYXJhbSIsIlRvb2xVc2VCbG9ja1BhcmFtIiwiUmVhY3QiLCJDb25maWd1cmFibGVTaG9ydGN1dEhpbnQiLCJDdHJsT1RvRXhwYW5kIiwiU3ViQWdlbnRQcm92aWRlciIsIkJ5bGluZSIsIktleWJvYXJkU2hvcnRjdXRIaW50IiwieiIsIkFnZW50UHJvZ3Jlc3NMaW5lIiwiRmFsbGJhY2tUb29sVXNlRXJyb3JNZXNzYWdlIiwiRmFsbGJhY2tUb29sVXNlUmVqZWN0ZWRNZXNzYWdlIiwiTWFya2Rvd24iLCJNZXNzYWdlIiwiTWVzc2FnZUNvbXBvbmVudCIsIk1lc3NhZ2VSZXNwb25zZSIsIlRvb2xVc2VMb2FkZXIiLCJCb3giLCJUZXh0IiwiZ2V0RHVtcFByb21wdHNQYXRoIiwiZmluZFRvb2xCeU5hbWUiLCJUb29scyIsIlByb2dyZXNzTWVzc2FnZSIsIkFnZW50VG9vbFByb2dyZXNzIiwiY291bnQiLCJnZXRTZWFyY2hPclJlYWRGcm9tQ29udGVudCIsImdldFNlYXJjaFJlYWRTdW1tYXJ5VGV4dCIsImdldERpc3BsYXlQYXRoIiwiZm9ybWF0RHVyYXRpb24iLCJmb3JtYXROdW1iZXIiLCJidWlsZFN1YmFnZW50TG9va3VwcyIsImNyZWF0ZUFzc2lzdGFudE1lc3NhZ2UiLCJFTVBUWV9MT09LVVBTIiwiTW9kZWxBbGlhcyIsImdldE1haW5Mb29wTW9kZWwiLCJwYXJzZVVzZXJTcGVjaWZpZWRNb2RlbCIsInJlbmRlck1vZGVsTmFtZSIsIlRoZW1lIiwiVGhlbWVOYW1lIiwib3V0cHV0U2NoZW1hIiwiUHJvZ3Jlc3MiLCJSZW1vdGVMYXVuY2hlZE91dHB1dCIsImlucHV0U2NoZW1hIiwiZ2V0QWdlbnRDb2xvciIsIkdFTkVSQUxfUFVSUE9TRV9BR0VOVCIsIk1BWF9QUk9HUkVTU19NRVNTQUdFU19UT19TSE9XIiwiaGFzUHJvZ3Jlc3NNZXNzYWdlIiwiZGF0YSIsIm1zZyIsIm1lc3NhZ2UiLCJnZXRTZWFyY2hPclJlYWRJbmZvIiwicHJvZ3Jlc3NNZXNzYWdlIiwidG9vbHMiLCJ0b29sVXNlQnlJRCIsIk1hcCIsImlzU2VhcmNoIiwiaXNSZWFkIiwiaXNSRVBMIiwidHlwZSIsImNvbnRlbnQiLCJ0b29sVXNlIiwiZ2V0IiwidG9vbF91c2VfaWQiLCJTdW1tYXJ5TWVzc2FnZSIsInNlYXJjaENvdW50IiwicmVhZENvdW50IiwicmVwbENvdW50IiwidXVpZCIsImlzQWN0aXZlIiwiUHJvY2Vzc2VkTWVzc2FnZSIsInByb2Nlc3NQcm9ncmVzc01lc3NhZ2VzIiwibWVzc2FnZXMiLCJpc0FnZW50UnVubmluZyIsImZpbHRlciIsIm0iLCJtYXAiLCJyZXN1bHQiLCJjdXJyZW50R3JvdXAiLCJzdGFydFV1aWQiLCJmbHVzaEdyb3VwIiwicHVzaCIsImFnZW50TWVzc2FnZXMiLCJjIiwic2V0IiwiaWQiLCJpbmZvIiwiRVNUSU1BVEVEX0xJTkVTX1BFUl9UT09MIiwiVEVSTUlOQUxfQlVGRkVSX0xJTkVTIiwiT3V0cHV0IiwiaW5wdXQiLCJSZXR1cm5UeXBlIiwiQWdlbnRQcm9tcHREaXNwbGF5IiwidDAiLCIkIiwiX2MiLCJwcm9tcHQiLCJkaW0iLCJ0MSIsInVuZGVmaW5lZCIsInQyIiwiU3ltYm9sIiwiZm9yIiwidDMiLCJBZ2VudFJlc3BvbnNlRGlzcGxheSIsIl90ZW1wIiwiYmxvY2siLCJpbmRleCIsInRleHQiLCJWZXJib3NlQWdlbnRUcmFuc2NyaXB0UHJvcHMiLCJwcm9ncmVzc01lc3NhZ2VzIiwidmVyYm9zZSIsIlZlcmJvc2VBZ2VudFRyYW5zY3JpcHQiLCJfdGVtcDIiLCJfdGVtcDMiLCJsb29rdXBzIiwiYWdlbnRMb29rdXBzIiwiaW5Qcm9ncmVzc1Rvb2xVc2VJRHMiLCJmaWx0ZXJlZE1lc3NhZ2VzIiwiX3RlbXA0IiwicG1fMSIsInBtIiwidG9vbFVzZVJlc3VsdCIsInBtXzAiLCJyZW5kZXJUb29sUmVzdWx0TWVzc2FnZSIsInByb2dyZXNzTWVzc2FnZXNGb3JNZXNzYWdlIiwidGhlbWUiLCJpc1RyYW5zY3JpcHRNb2RlIiwiUmVhY3ROb2RlIiwiaW50ZXJuYWwiLCJzdGF0dXMiLCJ0YXNrSWQiLCJzZXNzaW9uVXJsIiwiYWdlbnRJZCIsInRvdGFsRHVyYXRpb25NcyIsInRvdGFsVG9vbFVzZUNvdW50IiwidG90YWxUb2tlbnMiLCJ1c2FnZSIsImNvbXBsZXRpb25NZXNzYWdlIiwiam9pbiIsImZpbmFsQXNzaXN0YW50TWVzc2FnZSIsImluZmVyZW5jZV9nZW8iLCJpdGVyYXRpb25zIiwic3BlZWQiLCJsZW5ndGgiLCJTZXQiLCJyZW5kZXJUb29sVXNlTWVzc2FnZSIsImRlc2NyaXB0aW9uIiwiUGFydGlhbCIsInJlbmRlclRvb2xVc2VUYWciLCJzdWJhZ2VudF90eXBlIiwibW9kZWwiLCJ0YWdzIiwibWFpbk1vZGVsIiwiYWdlbnRNb2RlbCIsIklOSVRJQUxJWklOR19URVhUIiwicmVuZGVyVG9vbFVzZVByb2dyZXNzTWVzc2FnZSIsInRlcm1pbmFsU2l6ZSIsImluUHJvZ3Jlc3NUb29sQ2FsbENvdW50IiwiY29sdW1ucyIsInJvd3MiLCJ0b29sVG9vbFJlbmRlckxpbmVzRXN0aW1hdGUiLCJzaG91bGRVc2VDb25kZW5zZWRNb2RlIiwiZ2V0UHJvZ3Jlc3NTdGF0cyIsInRvb2xVc2VDb3VudCIsInNvbWUiLCJsYXRlc3RBc3Npc3RhbnQiLCJmaW5kTGFzdCIsInRva2VucyIsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyIsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIiwiaW5wdXRfdG9rZW5zIiwib3V0cHV0X3Rva2VucyIsInByb2Nlc3NlZE1lc3NhZ2VzIiwiZGlzcGxheWVkTWVzc2FnZXMiLCJzbGljZSIsImhpZGRlbk1lc3NhZ2VzIiwiTWF0aCIsIm1heCIsImhpZGRlblRvb2xVc2VDb3VudCIsImZpcnN0RGF0YSIsInN1YmFnZW50TG9va3VwcyIsImNvbGxhcHNlZEluUHJvZ3Jlc3NJRHMiLCJwcm9jZXNzZWQiLCJzdW1tYXJ5VGV4dCIsInJlbmRlclRvb2xVc2VSZWplY3RlZE1lc3NhZ2UiLCJfaW5wdXQiLCJzdHlsZSIsInJlbmRlclRvb2xVc2VFcnJvck1lc3NhZ2UiLCJjYWxjdWxhdGVBZ2VudFN0YXRzIiwicmVuZGVyR3JvdXBlZEFnZW50VG9vbFVzZSIsInRvb2xVc2VzIiwiQXJyYXkiLCJwYXJhbSIsImlzUmVzb2x2ZWQiLCJpc0Vycm9yIiwiaXNJblByb2dyZXNzIiwib3V0cHV0Iiwib3B0aW9ucyIsInNob3VsZEFuaW1hdGUiLCJhZ2VudFN0YXRzIiwic3RhdHMiLCJsYXN0VG9vbEluZm8iLCJleHRyYWN0TGFzdFRvb2xJbmZvIiwicGFyc2VkSW5wdXQiLCJzYWZlUGFyc2UiLCJpc1RlYW1tYXRlU3Bhd24iLCJhZ2VudFR5cGUiLCJjb2xvciIsImRlc2NyaXB0aW9uQ29sb3IiLCJ0YXNrRGVzY3JpcHRpb24iLCJzdWNjZXNzIiwibmFtZSIsInN1YmFnZW50VHlwZSIsImlzQ3VzdG9tU3ViYWdlbnRUeXBlIiwidXNlckZhY2luZ05hbWUiLCJ1c2VyRmFjaW5nTmFtZUJhY2tncm91bmRDb2xvciIsImxhdW5jaGVkQXNBc3luYyIsInJ1bl9pbl9iYWNrZ3JvdW5kIiwib3V0cHV0U3RhdHVzIiwiYmFja2dyb3VuZGVkTWlkRXhlY3V0aW9uIiwiaXNBc3luYyIsImFueVVucmVzb2x2ZWQiLCJ0IiwiYW55RXJyb3IiLCJhbGxDb21wbGV0ZSIsImFsbFNhbWVUeXBlIiwiZXZlcnkiLCJzdGF0IiwiY29tbW9uVHlwZSIsImFsbEFzeW5jIiwidGVhbV9uYW1lIiwiaSIsImxhc3RUb29sUmVzdWx0IiwidG9vbFJlc3VsdEJsb2NrIiwiZmluZCIsInRvb2xVc2VCbG9jayIsInRvb2wiLCJSZWNvcmQiLCJ1c2VyRmFjaW5nVG9vbE5hbWUiLCJnZXRUb29sVXNlU3VtbWFyeSIsInN1bW1hcnkiXSwic291cmNlcyI6WyJVSS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBUb29sUmVzdWx0QmxvY2tQYXJhbSxcbiAgVG9vbFVzZUJsb2NrUGFyYW0sXG59IGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL3Jlc291cmNlcy9pbmRleC5tanMnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENvbmZpZ3VyYWJsZVNob3J0Y3V0SGludCB9IGZyb20gJ3NyYy9jb21wb25lbnRzL0NvbmZpZ3VyYWJsZVNob3J0Y3V0SGludC5qcydcbmltcG9ydCB7XG4gIEN0cmxPVG9FeHBhbmQsXG4gIFN1YkFnZW50UHJvdmlkZXIsXG59IGZyb20gJ3NyYy9jb21wb25lbnRzL0N0cmxPVG9FeHBhbmQuanMnXG5pbXBvcnQgeyBCeWxpbmUgfSBmcm9tICdzcmMvY29tcG9uZW50cy9kZXNpZ24tc3lzdGVtL0J5bGluZS5qcydcbmltcG9ydCB7IEtleWJvYXJkU2hvcnRjdXRIaW50IH0gZnJvbSAnc3JjL2NvbXBvbmVudHMvZGVzaWduLXN5c3RlbS9LZXlib2FyZFNob3J0Y3V0SGludC5qcydcbmltcG9ydCB0eXBlIHsgeiB9IGZyb20gJ3pvZC92NCdcbmltcG9ydCB7IEFnZW50UHJvZ3Jlc3NMaW5lIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9BZ2VudFByb2dyZXNzTGluZS5qcydcbmltcG9ydCB7IEZhbGxiYWNrVG9vbFVzZUVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvRmFsbGJhY2tUb29sVXNlRXJyb3JNZXNzYWdlLmpzJ1xuaW1wb3J0IHsgRmFsbGJhY2tUb29sVXNlUmVqZWN0ZWRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9GYWxsYmFja1Rvb2xVc2VSZWplY3RlZE1lc3NhZ2UuanMnXG5pbXBvcnQgeyBNYXJrZG93biB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvTWFya2Rvd24uanMnXG5pbXBvcnQgeyBNZXNzYWdlIGFzIE1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL01lc3NhZ2UuanMnXG5pbXBvcnQgeyBNZXNzYWdlUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL01lc3NhZ2VSZXNwb25zZS5qcydcbmltcG9ydCB7IFRvb2xVc2VMb2FkZXIgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL1Rvb2xVc2VMb2FkZXIuanMnXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICcuLi8uLi9pbmsuanMnXG5pbXBvcnQgeyBnZXREdW1wUHJvbXB0c1BhdGggfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcGkvZHVtcFByb21wdHMuanMnXG5pbXBvcnQgeyBmaW5kVG9vbEJ5TmFtZSwgdHlwZSBUb29scyB9IGZyb20gJy4uLy4uL1Rvb2wuanMnXG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2UsIFByb2dyZXNzTWVzc2FnZSB9IGZyb20gJy4uLy4uL3R5cGVzL21lc3NhZ2UuanMnXG5pbXBvcnQgdHlwZSB7IEFnZW50VG9vbFByb2dyZXNzIH0gZnJvbSAnLi4vLi4vdHlwZXMvdG9vbHMuanMnXG5pbXBvcnQgeyBjb3VudCB9IGZyb20gJy4uLy4uL3V0aWxzL2FycmF5LmpzJ1xuaW1wb3J0IHtcbiAgZ2V0U2VhcmNoT3JSZWFkRnJvbUNvbnRlbnQsXG4gIGdldFNlYXJjaFJlYWRTdW1tYXJ5VGV4dCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvY29sbGFwc2VSZWFkU2VhcmNoLmpzJ1xuaW1wb3J0IHsgZ2V0RGlzcGxheVBhdGggfSBmcm9tICcuLi8uLi91dGlscy9maWxlLmpzJ1xuaW1wb3J0IHsgZm9ybWF0RHVyYXRpb24sIGZvcm1hdE51bWJlciB9IGZyb20gJy4uLy4uL3V0aWxzL2Zvcm1hdC5qcydcbmltcG9ydCB7XG4gIGJ1aWxkU3ViYWdlbnRMb29rdXBzLFxuICBjcmVhdGVBc3Npc3RhbnRNZXNzYWdlLFxuICBFTVBUWV9MT09LVVBTLFxufSBmcm9tICcuLi8uLi91dGlscy9tZXNzYWdlcy5qcydcbmltcG9ydCB0eXBlIHsgTW9kZWxBbGlhcyB9IGZyb20gJy4uLy4uL3V0aWxzL21vZGVsL2FsaWFzZXMuanMnXG5pbXBvcnQge1xuICBnZXRNYWluTG9vcE1vZGVsLFxuICBwYXJzZVVzZXJTcGVjaWZpZWRNb2RlbCxcbiAgcmVuZGVyTW9kZWxOYW1lLFxufSBmcm9tICcuLi8uLi91dGlscy9tb2RlbC9tb2RlbC5qcydcbmltcG9ydCB0eXBlIHsgVGhlbWUsIFRoZW1lTmFtZSB9IGZyb20gJy4uLy4uL3V0aWxzL3RoZW1lLmpzJ1xuaW1wb3J0IHR5cGUge1xuICBvdXRwdXRTY2hlbWEsXG4gIFByb2dyZXNzLFxuICBSZW1vdGVMYXVuY2hlZE91dHB1dCxcbn0gZnJvbSAnLi9BZ2VudFRvb2wuanMnXG5pbXBvcnQgeyBpbnB1dFNjaGVtYSB9IGZyb20gJy4vQWdlbnRUb29sLmpzJ1xuaW1wb3J0IHsgZ2V0QWdlbnRDb2xvciB9IGZyb20gJy4vYWdlbnRDb2xvck1hbmFnZXIuanMnXG5pbXBvcnQgeyBHRU5FUkFMX1BVUlBPU0VfQUdFTlQgfSBmcm9tICcuL2J1aWx0LWluL2dlbmVyYWxQdXJwb3NlQWdlbnQuanMnXG5cbmNvbnN0IE1BWF9QUk9HUkVTU19NRVNTQUdFU19UT19TSE9XID0gM1xuXG4vKipcbiAqIEd1YXJkOiBjaGVja3MgaWYgcHJvZ3Jlc3MgZGF0YSBoYXMgYSBgbWVzc2FnZWAgZmllbGQgKGFnZW50X3Byb2dyZXNzIG9yXG4gKiBza2lsbF9wcm9ncmVzcykuICBPdGhlciBwcm9ncmVzcyB0eXBlcyAoZS5nLiBiYXNoX3Byb2dyZXNzIGZvcndhcmRlZCBmcm9tXG4gKiBzdWItYWdlbnRzKSBsYWNrIHRoaXMgZmllbGQgYW5kIG11c3QgYmUgc2tpcHBlZCBieSBVSSBoZWxwZXJzLlxuICovXG5mdW5jdGlvbiBoYXNQcm9ncmVzc01lc3NhZ2UoZGF0YTogUHJvZ3Jlc3MpOiBkYXRhIGlzIEFnZW50VG9vbFByb2dyZXNzIHtcbiAgaWYgKCEoJ21lc3NhZ2UnIGluIGRhdGEpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgbXNnID0gKGRhdGEgYXMgQWdlbnRUb29sUHJvZ3Jlc3MpLm1lc3NhZ2VcbiAgcmV0dXJuIG1zZyAhPSBudWxsICYmIHR5cGVvZiBtc2cgPT09ICdvYmplY3QnICYmICd0eXBlJyBpbiBtc2dcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHByb2dyZXNzIG1lc3NhZ2UgaXMgYSBzZWFyY2gvcmVhZC9SRVBMIG9wZXJhdGlvbiAodG9vbCB1c2Ugb3IgcmVzdWx0KS5cbiAqIFJldHVybnMgeyBpc1NlYXJjaCwgaXNSZWFkLCBpc1JFUEwgfSBpZiBpdCdzIGEgY29sbGFwc2libGUgb3BlcmF0aW9uLCBudWxsIG90aGVyd2lzZS5cbiAqXG4gKiBGb3IgdG9vbF9yZXN1bHQgbWVzc2FnZXMsIHVzZXMgdGhlIHByb3ZpZGVkIGB0b29sVXNlQnlJRGAgbWFwIHRvIGZpbmQgdGhlXG4gKiBjb3JyZXNwb25kaW5nIHRvb2xfdXNlIGJsb2NrIGluc3RlYWQgb2YgcmVseWluZyBvbiBgbm9ybWFsaXplZE1lc3NhZ2VzYC5cbiAqL1xuZnVuY3Rpb24gZ2V0U2VhcmNoT3JSZWFkSW5mbyhcbiAgcHJvZ3Jlc3NNZXNzYWdlOiBQcm9ncmVzc01lc3NhZ2U8UHJvZ3Jlc3M+LFxuICB0b29sczogVG9vbHMsXG4gIHRvb2xVc2VCeUlEOiBNYXA8c3RyaW5nLCBUb29sVXNlQmxvY2tQYXJhbT4sXG4pOiB7IGlzU2VhcmNoOiBib29sZWFuOyBpc1JlYWQ6IGJvb2xlYW47IGlzUkVQTDogYm9vbGVhbiB9IHwgbnVsbCB7XG4gIGlmICghaGFzUHJvZ3Jlc3NNZXNzYWdlKHByb2dyZXNzTWVzc2FnZS5kYXRhKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgbWVzc2FnZSA9IHByb2dyZXNzTWVzc2FnZS5kYXRhLm1lc3NhZ2VcblxuICAvLyBDaGVjayB0b29sX3VzZSAoYXNzaXN0YW50IG1lc3NhZ2UpXG4gIGlmIChtZXNzYWdlLnR5cGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgcmV0dXJuIGdldFNlYXJjaE9yUmVhZEZyb21Db250ZW50KG1lc3NhZ2UubWVzc2FnZS5jb250ZW50WzBdLCB0b29scylcbiAgfVxuXG4gIC8vIENoZWNrIHRvb2xfcmVzdWx0ICh1c2VyIG1lc3NhZ2UpIC0gZmluZCBjb3JyZXNwb25kaW5nIHRvb2wgdXNlIGZyb20gdGhlIG1hcFxuICBpZiAobWVzc2FnZS50eXBlID09PSAndXNlcicpIHtcbiAgICBjb25zdCBjb250ZW50ID0gbWVzc2FnZS5tZXNzYWdlLmNvbnRlbnRbMF1cbiAgICBpZiAoY29udGVudD8udHlwZSA9PT0gJ3Rvb2xfcmVzdWx0Jykge1xuICAgICAgY29uc3QgdG9vbFVzZSA9IHRvb2xVc2VCeUlELmdldChjb250ZW50LnRvb2xfdXNlX2lkKVxuICAgICAgaWYgKHRvb2xVc2UpIHtcbiAgICAgICAgcmV0dXJuIGdldFNlYXJjaE9yUmVhZEZyb21Db250ZW50KHRvb2xVc2UsIHRvb2xzKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbnR5cGUgU3VtbWFyeU1lc3NhZ2UgPSB7XG4gIHR5cGU6ICdzdW1tYXJ5J1xuICBzZWFyY2hDb3VudDogbnVtYmVyXG4gIHJlYWRDb3VudDogbnVtYmVyXG4gIHJlcGxDb3VudDogbnVtYmVyXG4gIHV1aWQ6IHN0cmluZ1xuICBpc0FjdGl2ZTogYm9vbGVhbiAvLyB0cnVlIGlmIHN0aWxsIGluIHByb2dyZXNzIChsYXN0IG1lc3NhZ2Ugd2FzIHRvb2xfdXNlLCBub3QgdG9vbF9yZXN1bHQpXG59XG5cbnR5cGUgUHJvY2Vzc2VkTWVzc2FnZSA9XG4gIHwgeyB0eXBlOiAnb3JpZ2luYWwnOyBtZXNzYWdlOiBQcm9ncmVzc01lc3NhZ2U8QWdlbnRUb29sUHJvZ3Jlc3M+IH1cbiAgfCBTdW1tYXJ5TWVzc2FnZVxuXG4vKipcbiAqIFByb2Nlc3MgcHJvZ3Jlc3MgbWVzc2FnZXMgdG8gZ3JvdXAgY29uc2VjdXRpdmUgc2VhcmNoL3JlYWQgb3BlcmF0aW9ucyBpbnRvIHN1bW1hcmllcy5cbiAqIEZvciBhbnRzIG9ubHkgLSByZXR1cm5zIG9yaWdpbmFsIG1lc3NhZ2VzIGZvciBub24tYW50cy5cbiAqIEBwYXJhbSBpc0FnZW50UnVubmluZyAtIElmIHRydWUsIHRoZSBsYXN0IGdyb3VwIGlzIGFsd2F5cyBtYXJrZWQgYXMgYWN0aXZlIChpbiBwcm9ncmVzcylcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc1Byb2dyZXNzTWVzc2FnZXMoXG4gIG1lc3NhZ2VzOiBQcm9ncmVzc01lc3NhZ2U8UHJvZ3Jlc3M+W10sXG4gIHRvb2xzOiBUb29scyxcbiAgaXNBZ2VudFJ1bm5pbmc6IGJvb2xlYW4sXG4pOiBQcm9jZXNzZWRNZXNzYWdlW10ge1xuICAvLyBPbmx5IHByb2Nlc3MgZm9yIGFudHNcbiAgaWYgKFwiZXh0ZXJuYWxcIiAhPT0gJ2FudCcpIHtcbiAgICByZXR1cm4gbWVzc2FnZXNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChtKTogbSBpcyBQcm9ncmVzc01lc3NhZ2U8QWdlbnRUb29sUHJvZ3Jlc3M+ID0+XG4gICAgICAgICAgaGFzUHJvZ3Jlc3NNZXNzYWdlKG0uZGF0YSkgJiYgbS5kYXRhLm1lc3NhZ2UudHlwZSAhPT0gJ3VzZXInLFxuICAgICAgKVxuICAgICAgLm1hcChtID0+ICh7IHR5cGU6ICdvcmlnaW5hbCcsIG1lc3NhZ2U6IG0gfSkpXG4gIH1cblxuICBjb25zdCByZXN1bHQ6IFByb2Nlc3NlZE1lc3NhZ2VbXSA9IFtdXG4gIGxldCBjdXJyZW50R3JvdXA6IHtcbiAgICBzZWFyY2hDb3VudDogbnVtYmVyXG4gICAgcmVhZENvdW50OiBudW1iZXJcbiAgICByZXBsQ291bnQ6IG51bWJlclxuICAgIHN0YXJ0VXVpZDogc3RyaW5nXG4gIH0gfCBudWxsID0gbnVsbFxuXG4gIGZ1bmN0aW9uIGZsdXNoR3JvdXAoaXNBY3RpdmU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICBjdXJyZW50R3JvdXAgJiZcbiAgICAgIChjdXJyZW50R3JvdXAuc2VhcmNoQ291bnQgPiAwIHx8XG4gICAgICAgIGN1cnJlbnRHcm91cC5yZWFkQ291bnQgPiAwIHx8XG4gICAgICAgIGN1cnJlbnRHcm91cC5yZXBsQ291bnQgPiAwKVxuICAgICkge1xuICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICB0eXBlOiAnc3VtbWFyeScsXG4gICAgICAgIHNlYXJjaENvdW50OiBjdXJyZW50R3JvdXAuc2VhcmNoQ291bnQsXG4gICAgICAgIHJlYWRDb3VudDogY3VycmVudEdyb3VwLnJlYWRDb3VudCxcbiAgICAgICAgcmVwbENvdW50OiBjdXJyZW50R3JvdXAucmVwbENvdW50LFxuICAgICAgICB1dWlkOiBgc3VtbWFyeS0ke2N1cnJlbnRHcm91cC5zdGFydFV1aWR9YCxcbiAgICAgICAgaXNBY3RpdmUsXG4gICAgICB9KVxuICAgIH1cbiAgICBjdXJyZW50R3JvdXAgPSBudWxsXG4gIH1cblxuICBjb25zdCBhZ2VudE1lc3NhZ2VzID0gbWVzc2FnZXMuZmlsdGVyKFxuICAgIChtKTogbSBpcyBQcm9ncmVzc01lc3NhZ2U8QWdlbnRUb29sUHJvZ3Jlc3M+ID0+IGhhc1Byb2dyZXNzTWVzc2FnZShtLmRhdGEpLFxuICApXG5cbiAgLy8gQnVpbGQgdG9vbF91c2UgbG9va3VwIGluY3JlbWVudGFsbHkgYXMgd2UgaXRlcmF0ZVxuICBjb25zdCB0b29sVXNlQnlJRCA9IG5ldyBNYXA8c3RyaW5nLCBUb29sVXNlQmxvY2tQYXJhbT4oKVxuICBmb3IgKGNvbnN0IG1zZyBvZiBhZ2VudE1lc3NhZ2VzKSB7XG4gICAgLy8gVHJhY2sgdG9vbF91c2UgYmxvY2tzIGFzIHdlIHNlZSB0aGVtXG4gICAgaWYgKG1zZy5kYXRhLm1lc3NhZ2UudHlwZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgIGZvciAoY29uc3QgYyBvZiBtc2cuZGF0YS5tZXNzYWdlLm1lc3NhZ2UuY29udGVudCkge1xuICAgICAgICBpZiAoYy50eXBlID09PSAndG9vbF91c2UnKSB7XG4gICAgICAgICAgdG9vbFVzZUJ5SUQuc2V0KGMuaWQsIGMgYXMgVG9vbFVzZUJsb2NrUGFyYW0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaW5mbyA9IGdldFNlYXJjaE9yUmVhZEluZm8obXNnLCB0b29scywgdG9vbFVzZUJ5SUQpXG5cbiAgICBpZiAoaW5mbyAmJiAoaW5mby5pc1NlYXJjaCB8fCBpbmZvLmlzUmVhZCB8fCBpbmZvLmlzUkVQTCkpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBzZWFyY2gvcmVhZC9SRVBMIG9wZXJhdGlvbiAtIGFkZCB0byBjdXJyZW50IGdyb3VwXG4gICAgICBpZiAoIWN1cnJlbnRHcm91cCkge1xuICAgICAgICBjdXJyZW50R3JvdXAgPSB7XG4gICAgICAgICAgc2VhcmNoQ291bnQ6IDAsXG4gICAgICAgICAgcmVhZENvdW50OiAwLFxuICAgICAgICAgIHJlcGxDb3VudDogMCxcbiAgICAgICAgICBzdGFydFV1aWQ6IG1zZy51dWlkLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBPbmx5IGNvdW50IHRvb2xfcmVzdWx0IG1lc3NhZ2VzIChub3QgdG9vbF91c2UpIHRvIGF2b2lkIGRvdWJsZSBjb3VudGluZ1xuICAgICAgaWYgKG1zZy5kYXRhLm1lc3NhZ2UudHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgICAgIGlmIChpbmZvLmlzU2VhcmNoKSB7XG4gICAgICAgICAgY3VycmVudEdyb3VwLnNlYXJjaENvdW50KytcbiAgICAgICAgfSBlbHNlIGlmIChpbmZvLmlzUkVQTCkge1xuICAgICAgICAgIGN1cnJlbnRHcm91cC5yZXBsQ291bnQrK1xuICAgICAgICB9IGVsc2UgaWYgKGluZm8uaXNSZWFkKSB7XG4gICAgICAgICAgY3VycmVudEdyb3VwLnJlYWRDb3VudCsrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm9uLXNlYXJjaC9yZWFkL1JFUEwgbWVzc2FnZSAtIGZsdXNoIGN1cnJlbnQgZ3JvdXAgKGNvbXBsZXRlZCkgYW5kIGFkZCB0aGlzIG1lc3NhZ2VcbiAgICAgIGZsdXNoR3JvdXAoZmFsc2UpXG4gICAgICAvLyBTa2lwIHVzZXIgdG9vbF9yZXN1bHQgbWVzc2FnZXMg4oCUIHN1YmFnZW50IHByb2dyZXNzIG1lc3NhZ2VzIGxhY2tcbiAgICAgIC8vIHRvb2xVc2VSZXN1bHQsIHNvIFVzZXJUb29sU3VjY2Vzc01lc3NhZ2UgcmV0dXJucyBudWxsIGFuZCB0aGVcbiAgICAgIC8vIGhlaWdodD0xIEJveCBpbiByZW5kZXJUb29sVXNlUHJvZ3Jlc3NNZXNzYWdlIHNob3dzIGFzIGEgYmxhbmsgbGluZS5cbiAgICAgIGlmIChtc2cuZGF0YS5tZXNzYWdlLnR5cGUgIT09ICd1c2VyJykge1xuICAgICAgICByZXN1bHQucHVzaCh7IHR5cGU6ICdvcmlnaW5hbCcsIG1lc3NhZ2U6IG1zZyB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZsdXNoIGFueSByZW1haW5pbmcgZ3JvdXAgLSBpdCdzIGFjdGl2ZSBpZiB0aGUgYWdlbnQgaXMgc3RpbGwgcnVubmluZ1xuICBmbHVzaEdyb3VwKGlzQWdlbnRSdW5uaW5nKVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuY29uc3QgRVNUSU1BVEVEX0xJTkVTX1BFUl9UT09MID0gOVxuY29uc3QgVEVSTUlOQUxfQlVGRkVSX0xJTkVTID0gN1xuXG50eXBlIE91dHB1dCA9IHouaW5wdXQ8UmV0dXJuVHlwZTx0eXBlb2Ygb3V0cHV0U2NoZW1hPj5cblxuZXhwb3J0IGZ1bmN0aW9uIEFnZW50UHJvbXB0RGlzcGxheSh7XG4gIHByb21wdCxcbiAgZGltOiBfZGltID0gZmFsc2UsXG59OiB7XG4gIHByb21wdDogc3RyaW5nXG4gIHRoZW1lPzogVGhlbWVOYW1lIC8vIGRlcHJlY2F0ZWQsIGtlcHQgZm9yIGNvbXBhdGliaWxpdHkgLSBNYXJrZG93biB1c2VzIHVzZVRoZW1lIGludGVybmFsbHlcbiAgZGltPzogYm9vbGVhbiAvLyBkZXByZWNhdGVkLCBrZXB0IGZvciBjb21wYXRpYmlsaXR5IC0gZGltQ29sb3IgY2Fubm90IGJlIGFwcGxpZWQgdG8gQm94IChNYXJrZG93biByZXR1cm5zIEJveClcbn0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgPFRleHQgY29sb3I9XCJzdWNjZXNzXCIgYm9sZD5cbiAgICAgICAgUHJvbXB0OlxuICAgICAgPC9UZXh0PlxuICAgICAgPEJveCBwYWRkaW5nTGVmdD17Mn0+XG4gICAgICAgIDxNYXJrZG93bj57cHJvbXB0fTwvTWFya2Rvd24+XG4gICAgICA8L0JveD5cbiAgICA8L0JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQWdlbnRSZXNwb25zZURpc3BsYXkoe1xuICBjb250ZW50LFxufToge1xuICBjb250ZW50OiB7IHR5cGU6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1bXVxuICB0aGVtZT86IFRoZW1lTmFtZSAvLyBkZXByZWNhdGVkLCBrZXB0IGZvciBjb21wYXRpYmlsaXR5IC0gTWFya2Rvd24gdXNlcyB1c2VUaGVtZSBpbnRlcm5hbGx5XG59KTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgcmV0dXJuIChcbiAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgIDxUZXh0IGNvbG9yPVwic3VjY2Vzc1wiIGJvbGQ+XG4gICAgICAgIFJlc3BvbnNlOlxuICAgICAgPC9UZXh0PlxuICAgICAge2NvbnRlbnQubWFwKChibG9jazogeyB0eXBlOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9LCBpbmRleDogbnVtYmVyKSA9PiAoXG4gICAgICAgIDxCb3gga2V5PXtpbmRleH0gcGFkZGluZ0xlZnQ9ezJ9IG1hcmdpblRvcD17aW5kZXggPT09IDAgPyAwIDogMX0+XG4gICAgICAgICAgPE1hcmtkb3duPntibG9jay50ZXh0fTwvTWFya2Rvd24+XG4gICAgICAgIDwvQm94PlxuICAgICAgKSl9XG4gICAgPC9Cb3g+XG4gIClcbn1cblxudHlwZSBWZXJib3NlQWdlbnRUcmFuc2NyaXB0UHJvcHMgPSB7XG4gIHByb2dyZXNzTWVzc2FnZXM6IFByb2dyZXNzTWVzc2FnZTxQcm9ncmVzcz5bXVxuICB0b29sczogVG9vbHNcbiAgdmVyYm9zZTogYm9vbGVhblxufVxuXG5mdW5jdGlvbiBWZXJib3NlQWdlbnRUcmFuc2NyaXB0KHtcbiAgcHJvZ3Jlc3NNZXNzYWdlcyxcbiAgdG9vbHMsXG4gIHZlcmJvc2UsXG59OiBWZXJib3NlQWdlbnRUcmFuc2NyaXB0UHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCB7IGxvb2t1cHM6IGFnZW50TG9va3VwcywgaW5Qcm9ncmVzc1Rvb2xVc2VJRHMgfSA9IGJ1aWxkU3ViYWdlbnRMb29rdXBzKFxuICAgIHByb2dyZXNzTWVzc2FnZXNcbiAgICAgIC5maWx0ZXIoKHBtKTogcG0gaXMgUHJvZ3Jlc3NNZXNzYWdlPEFnZW50VG9vbFByb2dyZXNzPiA9PlxuICAgICAgICBoYXNQcm9ncmVzc01lc3NhZ2UocG0uZGF0YSksXG4gICAgICApXG4gICAgICAubWFwKHBtID0+IHBtLmRhdGEpLFxuICApXG5cbiAgLy8gRmlsdGVyIG91dCB1c2VyIHRvb2xfcmVzdWx0IG1lc3NhZ2VzIHRoYXQgbGFjayB0b29sVXNlUmVzdWx0LlxuICAvLyBTdWJhZ2VudCBwcm9ncmVzcyBtZXNzYWdlcyBkb24ndCBjYXJyeSB0aGUgcGFyc2VkIHRvb2wgb3V0cHV0LFxuICAvLyBzbyBVc2VyVG9vbFN1Y2Nlc3NNZXNzYWdlIHJldHVybnMgbnVsbCBhbmQgTWVzc2FnZVJlc3BvbnNlIHJlbmRlcnNcbiAgLy8gYSBiYXJlIOKOvyB3aXRoIG5vIGNvbnRlbnQuXG4gIGNvbnN0IGZpbHRlcmVkTWVzc2FnZXMgPSBwcm9ncmVzc01lc3NhZ2VzLmZpbHRlcihcbiAgICAocG0pOiBwbSBpcyBQcm9ncmVzc01lc3NhZ2U8QWdlbnRUb29sUHJvZ3Jlc3M+ID0+IHtcbiAgICAgIGlmICghaGFzUHJvZ3Jlc3NNZXNzYWdlKHBtLmRhdGEpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgY29uc3QgbXNnID0gcG0uZGF0YS5tZXNzYWdlXG4gICAgICBpZiAobXNnLnR5cGUgPT09ICd1c2VyJyAmJiBtc2cudG9vbFVzZVJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2ZpbHRlcmVkTWVzc2FnZXMubWFwKHByb2dyZXNzTWVzc2FnZSA9PiAoXG4gICAgICAgIDxNZXNzYWdlUmVzcG9uc2Uga2V5PXtwcm9ncmVzc01lc3NhZ2UudXVpZH0gaGVpZ2h0PXsxfT5cbiAgICAgICAgICA8TWVzc2FnZUNvbXBvbmVudFxuICAgICAgICAgICAgbWVzc2FnZT17cHJvZ3Jlc3NNZXNzYWdlLmRhdGEubWVzc2FnZX1cbiAgICAgICAgICAgIGxvb2t1cHM9e2FnZW50TG9va3Vwc31cbiAgICAgICAgICAgIGFkZE1hcmdpbj17ZmFsc2V9XG4gICAgICAgICAgICB0b29scz17dG9vbHN9XG4gICAgICAgICAgICBjb21tYW5kcz17W119XG4gICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlfVxuICAgICAgICAgICAgaW5Qcm9ncmVzc1Rvb2xVc2VJRHM9e2luUHJvZ3Jlc3NUb29sVXNlSURzfVxuICAgICAgICAgICAgcHJvZ3Jlc3NNZXNzYWdlc0Zvck1lc3NhZ2U9e1tdfVxuICAgICAgICAgICAgc2hvdWxkQW5pbWF0ZT17ZmFsc2V9XG4gICAgICAgICAgICBzaG91bGRTaG93RG90PXtmYWxzZX1cbiAgICAgICAgICAgIGlzVHJhbnNjcmlwdE1vZGU9e2ZhbHNlfVxuICAgICAgICAgICAgaXNTdGF0aWM9e3RydWV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9NZXNzYWdlUmVzcG9uc2U+XG4gICAgICApKX1cbiAgICA8Lz5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVG9vbFJlc3VsdE1lc3NhZ2UoXG4gIGRhdGE6IE91dHB1dCxcbiAgcHJvZ3Jlc3NNZXNzYWdlc0Zvck1lc3NhZ2U6IFByb2dyZXNzTWVzc2FnZTxQcm9ncmVzcz5bXSxcbiAge1xuICAgIHRvb2xzLFxuICAgIHZlcmJvc2UsXG4gICAgdGhlbWUsXG4gICAgaXNUcmFuc2NyaXB0TW9kZSA9IGZhbHNlLFxuICB9OiB7XG4gICAgdG9vbHM6IFRvb2xzXG4gICAgdmVyYm9zZTogYm9vbGVhblxuICAgIHRoZW1lOiBUaGVtZU5hbWVcbiAgICBpc1RyYW5zY3JpcHRNb2RlPzogYm9vbGVhblxuICB9LFxuKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgLy8gUmVtb3RlLWxhdW5jaGVkIGFnZW50cyAoYW50LW9ubHkpIHVzZSBhIHByaXZhdGUgb3V0cHV0IHR5cGUgbm90IGluIHRoZVxuICAvLyBwdWJsaWMgc2NoZW1hLiBOYXJyb3cgdmlhIHRoZSBpbnRlcm5hbCBkaXNjcmltaW5hbnQuXG4gIGNvbnN0IGludGVybmFsID0gZGF0YSBhcyBPdXRwdXQgfCBSZW1vdGVMYXVuY2hlZE91dHB1dFxuICBpZiAoaW50ZXJuYWwuc3RhdHVzID09PSAncmVtb3RlX2xhdW5jaGVkJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgPE1lc3NhZ2VSZXNwb25zZSBoZWlnaHQ9ezF9PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgUmVtb3RlIGFnZW50IGxhdW5jaGVkeycgJ31cbiAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgICAgICDCtyB7aW50ZXJuYWwudGFza0lkfSDCtyB7aW50ZXJuYWwuc2Vzc2lvblVybH1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvTWVzc2FnZVJlc3BvbnNlPlxuICAgICAgPC9Cb3g+XG4gICAgKVxuICB9XG4gIGlmIChkYXRhLnN0YXR1cyA9PT0gJ2FzeW5jX2xhdW5jaGVkJykge1xuICAgIGNvbnN0IHsgcHJvbXB0IH0gPSBkYXRhXG4gICAgcmV0dXJuIChcbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICA8TWVzc2FnZVJlc3BvbnNlIGhlaWdodD17MX0+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICBCYWNrZ3JvdW5kZWQgYWdlbnRcbiAgICAgICAgICAgIHshaXNUcmFuc2NyaXB0TW9kZSAmJiAoXG4gICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgICAgICAgIHsnICgnfVxuICAgICAgICAgICAgICAgIDxCeWxpbmU+XG4gICAgICAgICAgICAgICAgICA8S2V5Ym9hcmRTaG9ydGN1dEhpbnQgc2hvcnRjdXQ9XCLihpNcIiBhY3Rpb249XCJtYW5hZ2VcIiAvPlxuICAgICAgICAgICAgICAgICAge3Byb21wdCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxDb25maWd1cmFibGVTaG9ydGN1dEhpbnRcbiAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249XCJhcHA6dG9nZ2xlVHJhbnNjcmlwdFwiXG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1cIkdsb2JhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2s9XCJjdHJsK29cIlxuICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPVwiZXhwYW5kXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9CeWxpbmU+XG4gICAgICAgICAgICAgICAgeycpJ31cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvTWVzc2FnZVJlc3BvbnNlPlxuICAgICAgICB7aXNUcmFuc2NyaXB0TW9kZSAmJiBwcm9tcHQgJiYgKFxuICAgICAgICAgIDxNZXNzYWdlUmVzcG9uc2U+XG4gICAgICAgICAgICA8QWdlbnRQcm9tcHREaXNwbGF5IHByb21wdD17cHJvbXB0fSB0aGVtZT17dGhlbWV9IC8+XG4gICAgICAgICAgPC9NZXNzYWdlUmVzcG9uc2U+XG4gICAgICAgICl9XG4gICAgICA8L0JveD5cbiAgICApXG4gIH1cblxuICBpZiAoZGF0YS5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBhZ2VudElkLFxuICAgIHRvdGFsRHVyYXRpb25NcyxcbiAgICB0b3RhbFRvb2xVc2VDb3VudCxcbiAgICB0b3RhbFRva2VucyxcbiAgICB1c2FnZSxcbiAgICBjb250ZW50LFxuICAgIHByb21wdCxcbiAgfSA9IGRhdGFcbiAgY29uc3QgcmVzdWx0ID0gW1xuICAgIHRvdGFsVG9vbFVzZUNvdW50ID09PSAxID8gJzEgdG9vbCB1c2UnIDogYCR7dG90YWxUb29sVXNlQ291bnR9IHRvb2wgdXNlc2AsXG4gICAgZm9ybWF0TnVtYmVyKHRvdGFsVG9rZW5zKSArICcgdG9rZW5zJyxcbiAgICBmb3JtYXREdXJhdGlvbih0b3RhbER1cmF0aW9uTXMpLFxuICBdXG5cbiAgY29uc3QgY29tcGxldGlvbk1lc3NhZ2UgPSBgRG9uZSAoJHtyZXN1bHQuam9pbignIMK3ICcpfSlgXG5cbiAgY29uc3QgZmluYWxBc3Npc3RhbnRNZXNzYWdlID0gY3JlYXRlQXNzaXN0YW50TWVzc2FnZSh7XG4gICAgY29udGVudDogY29tcGxldGlvbk1lc3NhZ2UsXG4gICAgdXNhZ2U6IHsgLi4udXNhZ2UsIGluZmVyZW5jZV9nZW86IG51bGwsIGl0ZXJhdGlvbnM6IG51bGwsIHNwZWVkOiBudWxsIH0sXG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgIHtcImV4dGVybmFsXCIgPT09ICdhbnQnICYmIChcbiAgICAgICAgPE1lc3NhZ2VSZXNwb25zZT5cbiAgICAgICAgICA8VGV4dCBjb2xvcj1cIndhcm5pbmdcIj5cbiAgICAgICAgICAgIFtBTlQtT05MWV0gQVBJIGNhbGxzOiB7Z2V0RGlzcGxheVBhdGgoZ2V0RHVtcFByb21wdHNQYXRoKGFnZW50SWQpKX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvTWVzc2FnZVJlc3BvbnNlPlxuICAgICAgKX1cbiAgICAgIHtpc1RyYW5zY3JpcHRNb2RlICYmIHByb21wdCAmJiAoXG4gICAgICAgIDxNZXNzYWdlUmVzcG9uc2U+XG4gICAgICAgICAgPEFnZW50UHJvbXB0RGlzcGxheSBwcm9tcHQ9e3Byb21wdH0gdGhlbWU9e3RoZW1lfSAvPlxuICAgICAgICA8L01lc3NhZ2VSZXNwb25zZT5cbiAgICAgICl9XG4gICAgICB7aXNUcmFuc2NyaXB0TW9kZSA/IChcbiAgICAgICAgPFN1YkFnZW50UHJvdmlkZXI+XG4gICAgICAgICAgPFZlcmJvc2VBZ2VudFRyYW5zY3JpcHRcbiAgICAgICAgICAgIHByb2dyZXNzTWVzc2FnZXM9e3Byb2dyZXNzTWVzc2FnZXNGb3JNZXNzYWdlfVxuICAgICAgICAgICAgdG9vbHM9e3Rvb2xzfVxuICAgICAgICAgICAgdmVyYm9zZT17dmVyYm9zZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1N1YkFnZW50UHJvdmlkZXI+XG4gICAgICApIDogbnVsbH1cbiAgICAgIHtpc1RyYW5zY3JpcHRNb2RlICYmIGNvbnRlbnQgJiYgY29udGVudC5sZW5ndGggPiAwICYmIChcbiAgICAgICAgPE1lc3NhZ2VSZXNwb25zZT5cbiAgICAgICAgICA8QWdlbnRSZXNwb25zZURpc3BsYXkgY29udGVudD17Y29udGVudH0gdGhlbWU9e3RoZW1lfSAvPlxuICAgICAgICA8L01lc3NhZ2VSZXNwb25zZT5cbiAgICAgICl9XG4gICAgICA8TWVzc2FnZVJlc3BvbnNlIGhlaWdodD17MX0+XG4gICAgICAgIDxNZXNzYWdlQ29tcG9uZW50XG4gICAgICAgICAgbWVzc2FnZT17ZmluYWxBc3Npc3RhbnRNZXNzYWdlfVxuICAgICAgICAgIGxvb2t1cHM9e0VNUFRZX0xPT0tVUFN9XG4gICAgICAgICAgYWRkTWFyZ2luPXtmYWxzZX1cbiAgICAgICAgICB0b29scz17dG9vbHN9XG4gICAgICAgICAgY29tbWFuZHM9e1tdfVxuICAgICAgICAgIHZlcmJvc2U9e3ZlcmJvc2V9XG4gICAgICAgICAgaW5Qcm9ncmVzc1Rvb2xVc2VJRHM9e25ldyBTZXQoKX1cbiAgICAgICAgICBwcm9ncmVzc01lc3NhZ2VzRm9yTWVzc2FnZT17W119XG4gICAgICAgICAgc2hvdWxkQW5pbWF0ZT17ZmFsc2V9XG4gICAgICAgICAgc2hvdWxkU2hvd0RvdD17ZmFsc2V9XG4gICAgICAgICAgaXNUcmFuc2NyaXB0TW9kZT17ZmFsc2V9XG4gICAgICAgICAgaXNTdGF0aWM9e3RydWV9XG4gICAgICAgIC8+XG4gICAgICA8L01lc3NhZ2VSZXNwb25zZT5cbiAgICAgIHshaXNUcmFuc2NyaXB0TW9kZSAmJiAoXG4gICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgIHsnICAnfVxuICAgICAgICAgIDxDdHJsT1RvRXhwYW5kIC8+XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICl9XG4gICAgPC9Cb3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclRvb2xVc2VNZXNzYWdlKHtcbiAgZGVzY3JpcHRpb24sXG4gIHByb21wdCxcbn06IFBhcnRpYWw8e1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIHByb21wdDogc3RyaW5nXG59Pik6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGlmICghZGVzY3JpcHRpb24gfHwgIXByb21wdCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJUb29sVXNlVGFnKFxuICBpbnB1dDogUGFydGlhbDx7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZ1xuICAgIHByb21wdDogc3RyaW5nXG4gICAgc3ViYWdlbnRfdHlwZTogc3RyaW5nXG4gICAgbW9kZWw/OiBNb2RlbEFsaWFzXG4gIH0+LFxuKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgdGFnczogUmVhY3QuUmVhY3ROb2RlW10gPSBbXVxuXG4gIGlmIChpbnB1dC5tb2RlbCkge1xuICAgIGNvbnN0IG1haW5Nb2RlbCA9IGdldE1haW5Mb29wTW9kZWwoKVxuICAgIGNvbnN0IGFnZW50TW9kZWwgPSBwYXJzZVVzZXJTcGVjaWZpZWRNb2RlbChpbnB1dC5tb2RlbClcbiAgICBpZiAoYWdlbnRNb2RlbCAhPT0gbWFpbk1vZGVsKSB7XG4gICAgICB0YWdzLnB1c2goXG4gICAgICAgIDxCb3gga2V5PVwibW9kZWxcIiBmbGV4V3JhcD1cIm5vd3JhcFwiIG1hcmdpbkxlZnQ9ezF9PlxuICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPntyZW5kZXJNb2RlbE5hbWUoYWdlbnRNb2RlbCl9PC9UZXh0PlxuICAgICAgICA8L0JveD4sXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgaWYgKHRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiA8Pnt0YWdzfTwvPlxufVxuXG5jb25zdCBJTklUSUFMSVpJTkdfVEVYVCA9ICdJbml0aWFsaXppbmfigKYnXG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJUb29sVXNlUHJvZ3Jlc3NNZXNzYWdlKFxuICBwcm9ncmVzc01lc3NhZ2VzOiBQcm9ncmVzc01lc3NhZ2U8UHJvZ3Jlc3M+W10sXG4gIHtcbiAgICB0b29scyxcbiAgICB2ZXJib3NlLFxuICAgIHRlcm1pbmFsU2l6ZSxcbiAgICBpblByb2dyZXNzVG9vbENhbGxDb3VudCxcbiAgICBpc1RyYW5zY3JpcHRNb2RlID0gZmFsc2UsXG4gIH06IHtcbiAgICB0b29sczogVG9vbHNcbiAgICB2ZXJib3NlOiBib29sZWFuXG4gICAgdGVybWluYWxTaXplPzogeyBjb2x1bW5zOiBudW1iZXI7IHJvd3M6IG51bWJlciB9XG4gICAgaW5Qcm9ncmVzc1Rvb2xDYWxsQ291bnQ/OiBudW1iZXJcbiAgICBpc1RyYW5zY3JpcHRNb2RlPzogYm9vbGVhblxuICB9LFxuKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgaWYgKCFwcm9ncmVzc01lc3NhZ2VzLmxlbmd0aCkge1xuICAgIHJldHVybiAoXG4gICAgICA8TWVzc2FnZVJlc3BvbnNlIGhlaWdodD17MX0+XG4gICAgICAgIDxUZXh0IGRpbUNvbG9yPntJTklUSUFMSVpJTkdfVEVYVH08L1RleHQ+XG4gICAgICA8L01lc3NhZ2VSZXNwb25zZT5cbiAgICApXG4gIH1cblxuICAvLyBDaGVja3MgdG8gc2VlIGlmIHdlIHNob3VsZCBzaG93IGEgc3VwZXIgY29uZGVuc2VkIHByb2dyZXNzIG1lc3NhZ2Ugc3VtbWFyeS5cbiAgLy8gVGhpcyBwcmV2ZW50cyBmbGlja2VycyB3aGVuIHRoZSB0ZXJtaW5hbCBzaXplIGlzIHRvbyBzbWFsbCB0byByZW5kZXIgYWxsIHRoZSBkeW5hbWljIGNvbnRlbnRcbiAgY29uc3QgdG9vbFRvb2xSZW5kZXJMaW5lc0VzdGltYXRlID1cbiAgICAoaW5Qcm9ncmVzc1Rvb2xDYWxsQ291bnQgPz8gMSkgKiBFU1RJTUFURURfTElORVNfUEVSX1RPT0wgK1xuICAgIFRFUk1JTkFMX0JVRkZFUl9MSU5FU1xuICBjb25zdCBzaG91bGRVc2VDb25kZW5zZWRNb2RlID1cbiAgICAhaXNUcmFuc2NyaXB0TW9kZSAmJlxuICAgIHRlcm1pbmFsU2l6ZSAmJlxuICAgIHRlcm1pbmFsU2l6ZS5yb3dzICYmXG4gICAgdGVybWluYWxTaXplLnJvd3MgPCB0b29sVG9vbFJlbmRlckxpbmVzRXN0aW1hdGVcblxuICBjb25zdCBnZXRQcm9ncmVzc1N0YXRzID0gKCkgPT4ge1xuICAgIGNvbnN0IHRvb2xVc2VDb3VudCA9IGNvdW50KHByb2dyZXNzTWVzc2FnZXMsIG1zZyA9PiB7XG4gICAgICBpZiAoIWhhc1Byb2dyZXNzTWVzc2FnZShtc2cuZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBjb25zdCBtZXNzYWdlID0gbXNnLmRhdGEubWVzc2FnZVxuICAgICAgcmV0dXJuIG1lc3NhZ2UubWVzc2FnZS5jb250ZW50LnNvbWUoXG4gICAgICAgIGNvbnRlbnQgPT4gY29udGVudC50eXBlID09PSAndG9vbF91c2UnLFxuICAgICAgKVxuICAgIH0pXG5cbiAgICBjb25zdCBsYXRlc3RBc3Npc3RhbnQgPSBwcm9ncmVzc01lc3NhZ2VzLmZpbmRMYXN0KFxuICAgICAgKG1zZyk6IG1zZyBpcyBQcm9ncmVzc01lc3NhZ2U8QWdlbnRUb29sUHJvZ3Jlc3M+ID0+XG4gICAgICAgIGhhc1Byb2dyZXNzTWVzc2FnZShtc2cuZGF0YSkgJiYgbXNnLmRhdGEubWVzc2FnZS50eXBlID09PSAnYXNzaXN0YW50JyxcbiAgICApXG5cbiAgICBsZXQgdG9rZW5zID0gbnVsbFxuICAgIGlmIChsYXRlc3RBc3Npc3RhbnQ/LmRhdGEubWVzc2FnZS50eXBlID09PSAnYXNzaXN0YW50Jykge1xuICAgICAgY29uc3QgdXNhZ2UgPSBsYXRlc3RBc3Npc3RhbnQuZGF0YS5tZXNzYWdlLm1lc3NhZ2UudXNhZ2VcbiAgICAgIHRva2VucyA9XG4gICAgICAgICh1c2FnZS5jYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMgPz8gMCkgK1xuICAgICAgICAodXNhZ2UuY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMgPz8gMCkgK1xuICAgICAgICB1c2FnZS5pbnB1dF90b2tlbnMgK1xuICAgICAgICB1c2FnZS5vdXRwdXRfdG9rZW5zXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdG9vbFVzZUNvdW50LCB0b2tlbnMgfVxuICB9XG5cbiAgaWYgKHNob3VsZFVzZUNvbmRlbnNlZE1vZGUpIHtcbiAgICBjb25zdCB7IHRvb2xVc2VDb3VudCwgdG9rZW5zIH0gPSBnZXRQcm9ncmVzc1N0YXRzKClcblxuICAgIHJldHVybiAoXG4gICAgICA8TWVzc2FnZVJlc3BvbnNlIGhlaWdodD17MX0+XG4gICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgIEluIHByb2dyZXNz4oCmIMK3IDxUZXh0IGJvbGQ+e3Rvb2xVc2VDb3VudH08L1RleHQ+IHRvb2x7JyAnfVxuICAgICAgICAgIHt0b29sVXNlQ291bnQgPT09IDEgPyAndXNlJyA6ICd1c2VzJ31cbiAgICAgICAgICB7dG9rZW5zICYmIGAgwrcgJHtmb3JtYXROdW1iZXIodG9rZW5zKX0gdG9rZW5zYH0gwrd7JyAnfVxuICAgICAgICAgIDxDb25maWd1cmFibGVTaG9ydGN1dEhpbnRcbiAgICAgICAgICAgIGFjdGlvbj1cImFwcDp0b2dnbGVUcmFuc2NyaXB0XCJcbiAgICAgICAgICAgIGNvbnRleHQ9XCJHbG9iYWxcIlxuICAgICAgICAgICAgZmFsbGJhY2s9XCJjdHJsK29cIlxuICAgICAgICAgICAgZGVzY3JpcHRpb249XCJleHBhbmRcIlxuICAgICAgICAgICAgcGFyZW5zXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9NZXNzYWdlUmVzcG9uc2U+XG4gICAgKVxuICB9XG5cbiAgLy8gUHJvY2VzcyBtZXNzYWdlcyB0byBncm91cCBjb25zZWN1dGl2ZSBzZWFyY2gvcmVhZCBvcGVyYXRpb25zIGludG8gc3VtbWFyaWVzIChhbnRzIG9ubHkpXG4gIC8vIGlzQWdlbnRSdW5uaW5nPXRydWUgc2luY2UgdGhpcyBpcyB0aGUgcHJvZ3Jlc3MgdmlldyB3aGlsZSB0aGUgYWdlbnQgaXMgc3RpbGwgcnVubmluZ1xuICBjb25zdCBwcm9jZXNzZWRNZXNzYWdlcyA9IHByb2Nlc3NQcm9ncmVzc01lc3NhZ2VzKFxuICAgIHByb2dyZXNzTWVzc2FnZXMsXG4gICAgdG9vbHMsXG4gICAgdHJ1ZSxcbiAgKVxuXG4gIC8vIEZvciBkaXNwbGF5LCB0YWtlIHRoZSBsYXN0IGZldyBwcm9jZXNzZWQgbWVzc2FnZXNcbiAgY29uc3QgZGlzcGxheWVkTWVzc2FnZXMgPSBpc1RyYW5zY3JpcHRNb2RlXG4gICAgPyBwcm9jZXNzZWRNZXNzYWdlc1xuICAgIDogcHJvY2Vzc2VkTWVzc2FnZXMuc2xpY2UoLU1BWF9QUk9HUkVTU19NRVNTQUdFU19UT19TSE9XKVxuXG4gIC8vIENvdW50IGhpZGRlbiB0b29sIHVzZXMgc3BlY2lmaWNhbGx5IChub3QgYWxsIG1lc3NhZ2VzKSB0byBtYXRjaCB0aGVcbiAgLy8gZmluYWwgXCJEb25lIChOIHRvb2wgdXNlcylcIiBjb3VudC4gRWFjaCB0b29sIHVzZSBnZW5lcmF0ZXMgbXVsdGlwbGVcbiAgLy8gcHJvZ3Jlc3MgbWVzc2FnZXMgKHRvb2xfdXNlICsgdG9vbF9yZXN1bHQgKyB0ZXh0KSwgc28gY291bnRpbmcgYWxsXG4gIC8vIGhpZGRlbiBtZXNzYWdlcyBpbmZsYXRlcyB0aGUgbnVtYmVyIHNob3duIHRvIHRoZSB1c2VyLlxuICBjb25zdCBoaWRkZW5NZXNzYWdlcyA9IGlzVHJhbnNjcmlwdE1vZGVcbiAgICA/IFtdXG4gICAgOiBwcm9jZXNzZWRNZXNzYWdlcy5zbGljZShcbiAgICAgICAgMCxcbiAgICAgICAgTWF0aC5tYXgoMCwgcHJvY2Vzc2VkTWVzc2FnZXMubGVuZ3RoIC0gTUFYX1BST0dSRVNTX01FU1NBR0VTX1RPX1NIT1cpLFxuICAgICAgKVxuICBjb25zdCBoaWRkZW5Ub29sVXNlQ291bnQgPSBjb3VudChoaWRkZW5NZXNzYWdlcywgbSA9PiB7XG4gICAgaWYgKG0udHlwZSA9PT0gJ3N1bW1hcnknKSB7XG4gICAgICByZXR1cm4gbS5zZWFyY2hDb3VudCArIG0ucmVhZENvdW50ICsgbS5yZXBsQ291bnQgPiAwXG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBtLm1lc3NhZ2UuZGF0YVxuICAgIGlmICghaGFzUHJvZ3Jlc3NNZXNzYWdlKGRhdGEpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEubWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQuc29tZShcbiAgICAgIGNvbnRlbnQgPT4gY29udGVudC50eXBlID09PSAndG9vbF91c2UnLFxuICAgIClcbiAgfSlcblxuICBjb25zdCBmaXJzdERhdGEgPSBwcm9ncmVzc01lc3NhZ2VzWzBdPy5kYXRhXG4gIGNvbnN0IHByb21wdCA9XG4gICAgZmlyc3REYXRhICYmIGhhc1Byb2dyZXNzTWVzc2FnZShmaXJzdERhdGEpID8gZmlyc3REYXRhLnByb21wdCA6IHVuZGVmaW5lZFxuXG4gIC8vIEFmdGVyIGdyb3VwaW5nLCBkaXNwbGF5ZWRNZXNzYWdlcyBjYW4gYmUgZW1wdHkgd2hlbiB0aGUgb25seSBwcm9ncmVzcyBzb1xuICAvLyBmYXIgaXMgYW4gYXNzaXN0YW50IHRvb2xfdXNlIGZvciBhIHNlYXJjaC9yZWFkIG9wIChncm91cGVkIGJ1dCBub3QgeWV0XG4gIC8vIGNvdW50ZWQsIHNpbmNlIGNvdW50cyBpbmNyZW1lbnQgb24gdG9vbF9yZXN1bHQpLiBGYWxsIGJhY2sgdG8gdGhlXG4gIC8vIGluaXRpYWxpemluZyB0ZXh0IHNvIE1lc3NhZ2VSZXNwb25zZSBkb2Vzbid0IHJlbmRlciBhIGJhcmUg4o6/LlxuICBpZiAoZGlzcGxheWVkTWVzc2FnZXMubGVuZ3RoID09PSAwICYmICEoaXNUcmFuc2NyaXB0TW9kZSAmJiBwcm9tcHQpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZXNzYWdlUmVzcG9uc2UgaGVpZ2h0PXsxfT5cbiAgICAgICAgPFRleHQgZGltQ29sb3I+e0lOSVRJQUxJWklOR19URVhUfTwvVGV4dD5cbiAgICAgIDwvTWVzc2FnZVJlc3BvbnNlPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBsb29rdXBzOiBzdWJhZ2VudExvb2t1cHMsXG4gICAgaW5Qcm9ncmVzc1Rvb2xVc2VJRHM6IGNvbGxhcHNlZEluUHJvZ3Jlc3NJRHMsXG4gIH0gPSBidWlsZFN1YmFnZW50TG9va3VwcyhcbiAgICBwcm9ncmVzc01lc3NhZ2VzXG4gICAgICAuZmlsdGVyKChwbSk6IHBtIGlzIFByb2dyZXNzTWVzc2FnZTxBZ2VudFRvb2xQcm9ncmVzcz4gPT5cbiAgICAgICAgaGFzUHJvZ3Jlc3NNZXNzYWdlKHBtLmRhdGEpLFxuICAgICAgKVxuICAgICAgLm1hcChwbSA9PiBwbS5kYXRhKSxcbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPE1lc3NhZ2VSZXNwb25zZT5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICA8U3ViQWdlbnRQcm92aWRlcj5cbiAgICAgICAgICB7aXNUcmFuc2NyaXB0TW9kZSAmJiBwcm9tcHQgJiYgKFxuICAgICAgICAgICAgPEJveCBtYXJnaW5Cb3R0b209ezF9PlxuICAgICAgICAgICAgICA8QWdlbnRQcm9tcHREaXNwbGF5IHByb21wdD17cHJvbXB0fSAvPlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7ZGlzcGxheWVkTWVzc2FnZXMubWFwKHByb2Nlc3NlZCA9PiB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzc2VkLnR5cGUgPT09ICdzdW1tYXJ5Jykge1xuICAgICAgICAgICAgICAvLyBSZW5kZXIgc3VtbWFyeSBmb3IgZ3JvdXBlZCBzZWFyY2gvcmVhZC9SRVBMIG9wZXJhdGlvbnMgdXNpbmcgc2hhcmVkIGZvcm1hdHRpbmdcbiAgICAgICAgICAgICAgY29uc3Qgc3VtbWFyeVRleHQgPSBnZXRTZWFyY2hSZWFkU3VtbWFyeVRleHQoXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkLnNlYXJjaENvdW50LFxuICAgICAgICAgICAgICAgIHByb2Nlc3NlZC5yZWFkQ291bnQsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkLmlzQWN0aXZlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NlZC5yZXBsQ291bnQsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8Qm94IGtleT17cHJvY2Vzc2VkLnV1aWR9IGhlaWdodD17MX0gb3ZlcmZsb3c9XCJoaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPntzdW1tYXJ5VGV4dH08L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbmRlciBvcmlnaW5hbCBtZXNzYWdlIHdpdGhvdXQgaGVpZ2h0PTEgd3JhcHBlciBzbyBudWxsXG4gICAgICAgICAgICAvLyBjb250ZW50ICh0b29sIG5vdCBmb3VuZCwgcmVuZGVyVG9vbFVzZU1lc3NhZ2UgcmV0dXJucyBudWxsKVxuICAgICAgICAgICAgLy8gZG9lc24ndCBsZWF2ZSBhIGJsYW5rIGxpbmUuIFRvb2wgY2FsbCBoZWFkZXJzIGFyZSBzaW5nbGUtbGluZVxuICAgICAgICAgICAgLy8gYW55d2F5IHNvIHRydW5jYXRpb24gaXNuJ3QgbmVlZGVkLlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPE1lc3NhZ2VDb21wb25lbnRcbiAgICAgICAgICAgICAgICBrZXk9e3Byb2Nlc3NlZC5tZXNzYWdlLnV1aWR9XG4gICAgICAgICAgICAgICAgbWVzc2FnZT17cHJvY2Vzc2VkLm1lc3NhZ2UuZGF0YS5tZXNzYWdlfVxuICAgICAgICAgICAgICAgIGxvb2t1cHM9e3N1YmFnZW50TG9va3Vwc31cbiAgICAgICAgICAgICAgICBhZGRNYXJnaW49e2ZhbHNlfVxuICAgICAgICAgICAgICAgIHRvb2xzPXt0b29sc31cbiAgICAgICAgICAgICAgICBjb21tYW5kcz17W119XG4gICAgICAgICAgICAgICAgdmVyYm9zZT17dmVyYm9zZX1cbiAgICAgICAgICAgICAgICBpblByb2dyZXNzVG9vbFVzZUlEcz17Y29sbGFwc2VkSW5Qcm9ncmVzc0lEc31cbiAgICAgICAgICAgICAgICBwcm9ncmVzc01lc3NhZ2VzRm9yTWVzc2FnZT17W119XG4gICAgICAgICAgICAgICAgc2hvdWxkQW5pbWF0ZT17ZmFsc2V9XG4gICAgICAgICAgICAgICAgc2hvdWxkU2hvd0RvdD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgc3R5bGU9XCJjb25kZW5zZWRcIlxuICAgICAgICAgICAgICAgIGlzVHJhbnNjcmlwdE1vZGU9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGlzU3RhdGljPXt0cnVlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICA8L1N1YkFnZW50UHJvdmlkZXI+XG4gICAgICAgIHtoaWRkZW5Ub29sVXNlQ291bnQgPiAwICYmIChcbiAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICAgICt7aGlkZGVuVG9vbFVzZUNvdW50fSBtb3JlIHRvb2x7JyAnfVxuICAgICAgICAgICAge2hpZGRlblRvb2xVc2VDb3VudCA9PT0gMSA/ICd1c2UnIDogJ3VzZXMnfSA8Q3RybE9Ub0V4cGFuZCAvPlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgKX1cbiAgICAgIDwvQm94PlxuICAgIDwvTWVzc2FnZVJlc3BvbnNlPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJUb29sVXNlUmVqZWN0ZWRNZXNzYWdlKFxuICBfaW5wdXQ6IHsgZGVzY3JpcHRpb246IHN0cmluZzsgcHJvbXB0OiBzdHJpbmc7IHN1YmFnZW50X3R5cGU6IHN0cmluZyB9LFxuICB7XG4gICAgcHJvZ3Jlc3NNZXNzYWdlc0Zvck1lc3NhZ2UsXG4gICAgdG9vbHMsXG4gICAgdmVyYm9zZSxcbiAgICBpc1RyYW5zY3JpcHRNb2RlLFxuICB9OiB7XG4gICAgY29sdW1uczogbnVtYmVyXG4gICAgbWVzc2FnZXM6IE1lc3NhZ2VbXVxuICAgIHN0eWxlPzogJ2NvbmRlbnNlZCdcbiAgICB0aGVtZTogVGhlbWVOYW1lXG4gICAgcHJvZ3Jlc3NNZXNzYWdlc0Zvck1lc3NhZ2U6IFByb2dyZXNzTWVzc2FnZTxQcm9ncmVzcz5bXVxuICAgIHRvb2xzOiBUb29sc1xuICAgIHZlcmJvc2U6IGJvb2xlYW5cbiAgICBpc1RyYW5zY3JpcHRNb2RlPzogYm9vbGVhblxuICB9LFxuKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgLy8gR2V0IGFnZW50SWQgZnJvbSBwcm9ncmVzcyBtZXNzYWdlcyBpZiBhdmFpbGFibGUgKGFnZW50IHdhcyBydW5uaW5nIGJlZm9yZSByZWplY3Rpb24pXG4gIGNvbnN0IGZpcnN0RGF0YSA9IHByb2dyZXNzTWVzc2FnZXNGb3JNZXNzYWdlWzBdPy5kYXRhXG4gIGNvbnN0IGFnZW50SWQgPVxuICAgIGZpcnN0RGF0YSAmJiBoYXNQcm9ncmVzc01lc3NhZ2UoZmlyc3REYXRhKSA/IGZpcnN0RGF0YS5hZ2VudElkIDogdW5kZWZpbmVkXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge1wiZXh0ZXJuYWxcIiA9PT0gJ2FudCcgJiYgYWdlbnRJZCAmJiAoXG4gICAgICAgIDxNZXNzYWdlUmVzcG9uc2U+XG4gICAgICAgICAgPFRleHQgY29sb3I9XCJ3YXJuaW5nXCI+XG4gICAgICAgICAgICBbQU5ULU9OTFldIEFQSSBjYWxsczoge2dldERpc3BsYXlQYXRoKGdldER1bXBQcm9tcHRzUGF0aChhZ2VudElkKSl9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L01lc3NhZ2VSZXNwb25zZT5cbiAgICAgICl9XG4gICAgICB7cmVuZGVyVG9vbFVzZVByb2dyZXNzTWVzc2FnZShwcm9ncmVzc01lc3NhZ2VzRm9yTWVzc2FnZSwge1xuICAgICAgICB0b29scyxcbiAgICAgICAgdmVyYm9zZSxcbiAgICAgICAgaXNUcmFuc2NyaXB0TW9kZSxcbiAgICAgIH0pfVxuICAgICAgPEZhbGxiYWNrVG9vbFVzZVJlamVjdGVkTWVzc2FnZSAvPlxuICAgIDwvPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJUb29sVXNlRXJyb3JNZXNzYWdlKFxuICByZXN1bHQ6IFRvb2xSZXN1bHRCbG9ja1BhcmFtWydjb250ZW50J10sXG4gIHtcbiAgICBwcm9ncmVzc01lc3NhZ2VzRm9yTWVzc2FnZSxcbiAgICB0b29scyxcbiAgICB2ZXJib3NlLFxuICAgIGlzVHJhbnNjcmlwdE1vZGUsXG4gIH06IHtcbiAgICBwcm9ncmVzc01lc3NhZ2VzRm9yTWVzc2FnZTogUHJvZ3Jlc3NNZXNzYWdlPFByb2dyZXNzPltdXG4gICAgdG9vbHM6IFRvb2xzXG4gICAgdmVyYm9zZTogYm9vbGVhblxuICAgIGlzVHJhbnNjcmlwdE1vZGU/OiBib29sZWFuXG4gIH0sXG4pOiBSZWFjdC5SZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7cmVuZGVyVG9vbFVzZVByb2dyZXNzTWVzc2FnZShwcm9ncmVzc01lc3NhZ2VzRm9yTWVzc2FnZSwge1xuICAgICAgICB0b29scyxcbiAgICAgICAgdmVyYm9zZSxcbiAgICAgICAgaXNUcmFuc2NyaXB0TW9kZSxcbiAgICAgIH0pfVxuICAgICAgPEZhbGxiYWNrVG9vbFVzZUVycm9yTWVzc2FnZSByZXN1bHQ9e3Jlc3VsdH0gdmVyYm9zZT17dmVyYm9zZX0gLz5cbiAgICA8Lz5cbiAgKVxufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVBZ2VudFN0YXRzKHByb2dyZXNzTWVzc2FnZXM6IFByb2dyZXNzTWVzc2FnZTxQcm9ncmVzcz5bXSk6IHtcbiAgdG9vbFVzZUNvdW50OiBudW1iZXJcbiAgdG9rZW5zOiBudW1iZXIgfCBudWxsXG59IHtcbiAgY29uc3QgdG9vbFVzZUNvdW50ID0gY291bnQocHJvZ3Jlc3NNZXNzYWdlcywgbXNnID0+IHtcbiAgICBpZiAoIWhhc1Byb2dyZXNzTWVzc2FnZShtc2cuZGF0YSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBjb25zdCBtZXNzYWdlID0gbXNnLmRhdGEubWVzc2FnZVxuICAgIHJldHVybiAoXG4gICAgICBtZXNzYWdlLnR5cGUgPT09ICd1c2VyJyAmJlxuICAgICAgbWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQuc29tZShjb250ZW50ID0+IGNvbnRlbnQudHlwZSA9PT0gJ3Rvb2xfcmVzdWx0JylcbiAgICApXG4gIH0pXG5cbiAgY29uc3QgbGF0ZXN0QXNzaXN0YW50ID0gcHJvZ3Jlc3NNZXNzYWdlcy5maW5kTGFzdChcbiAgICAobXNnKTogbXNnIGlzIFByb2dyZXNzTWVzc2FnZTxBZ2VudFRvb2xQcm9ncmVzcz4gPT5cbiAgICAgIGhhc1Byb2dyZXNzTWVzc2FnZShtc2cuZGF0YSkgJiYgbXNnLmRhdGEubWVzc2FnZS50eXBlID09PSAnYXNzaXN0YW50JyxcbiAgKVxuXG4gIGxldCB0b2tlbnMgPSBudWxsXG4gIGlmIChsYXRlc3RBc3Npc3RhbnQ/LmRhdGEubWVzc2FnZS50eXBlID09PSAnYXNzaXN0YW50Jykge1xuICAgIGNvbnN0IHVzYWdlID0gbGF0ZXN0QXNzaXN0YW50LmRhdGEubWVzc2FnZS5tZXNzYWdlLnVzYWdlXG4gICAgdG9rZW5zID1cbiAgICAgICh1c2FnZS5jYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMgPz8gMCkgK1xuICAgICAgKHVzYWdlLmNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zID8/IDApICtcbiAgICAgIHVzYWdlLmlucHV0X3Rva2VucyArXG4gICAgICB1c2FnZS5vdXRwdXRfdG9rZW5zXG4gIH1cblxuICByZXR1cm4geyB0b29sVXNlQ291bnQsIHRva2VucyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJHcm91cGVkQWdlbnRUb29sVXNlKFxuICB0b29sVXNlczogQXJyYXk8e1xuICAgIHBhcmFtOiBUb29sVXNlQmxvY2tQYXJhbVxuICAgIGlzUmVzb2x2ZWQ6IGJvb2xlYW5cbiAgICBpc0Vycm9yOiBib29sZWFuXG4gICAgaXNJblByb2dyZXNzOiBib29sZWFuXG4gICAgcHJvZ3Jlc3NNZXNzYWdlczogUHJvZ3Jlc3NNZXNzYWdlPFByb2dyZXNzPltdXG4gICAgcmVzdWx0Pzoge1xuICAgICAgcGFyYW06IFRvb2xSZXN1bHRCbG9ja1BhcmFtXG4gICAgICBvdXRwdXQ6IE91dHB1dFxuICAgIH1cbiAgfT4sXG4gIG9wdGlvbnM6IHtcbiAgICBzaG91bGRBbmltYXRlOiBib29sZWFuXG4gICAgdG9vbHM6IFRvb2xzXG4gIH0sXG4pOiBSZWFjdC5SZWFjdE5vZGUgfCBudWxsIHtcbiAgY29uc3QgeyBzaG91bGRBbmltYXRlLCB0b29scyB9ID0gb3B0aW9uc1xuXG4gIC8vIENhbGN1bGF0ZSBzdGF0cyBmb3IgZWFjaCBhZ2VudFxuICBjb25zdCBhZ2VudFN0YXRzID0gdG9vbFVzZXMubWFwKFxuICAgICh7IHBhcmFtLCBpc1Jlc29sdmVkLCBpc0Vycm9yLCBwcm9ncmVzc01lc3NhZ2VzLCByZXN1bHQgfSkgPT4ge1xuICAgICAgY29uc3Qgc3RhdHMgPSBjYWxjdWxhdGVBZ2VudFN0YXRzKHByb2dyZXNzTWVzc2FnZXMpXG4gICAgICBjb25zdCBsYXN0VG9vbEluZm8gPSBleHRyYWN0TGFzdFRvb2xJbmZvKHByb2dyZXNzTWVzc2FnZXMsIHRvb2xzKVxuICAgICAgY29uc3QgcGFyc2VkSW5wdXQgPSBpbnB1dFNjaGVtYSgpLnNhZmVQYXJzZShwYXJhbS5pbnB1dClcblxuICAgICAgLy8gdGVhbW1hdGVfc3Bhd25lZCBpcyBub3QgcGFydCBvZiB0aGUgZXhwb3J0ZWQgT3V0cHV0IHR5cGUgKGNhc3QgdGhyb3VnaCB1bmtub3duXG4gICAgICAvLyBmb3IgZGVhZCBjb2RlIGVsaW1pbmF0aW9uKSwgc28gY2hlY2sgdmlhIHN0cmluZyBjb21wYXJpc29uIG9uIHRoZSByYXcgdmFsdWVcbiAgICAgIGNvbnN0IGlzVGVhbW1hdGVTcGF3biA9XG4gICAgICAgIChyZXN1bHQ/Lm91dHB1dD8uc3RhdHVzIGFzIHN0cmluZykgPT09ICd0ZWFtbWF0ZV9zcGF3bmVkJ1xuXG4gICAgICAvLyBGb3IgdGVhbW1hdGUgc3Bhd25zLCBzaG93IEBuYW1lIHdpdGggdHlwZSBpbiBwYXJlbnMgYW5kIGRlc2NyaXB0aW9uIGFzIHN0YXR1c1xuICAgICAgbGV0IGFnZW50VHlwZTogc3RyaW5nXG4gICAgICBsZXQgZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgICAgbGV0IGNvbG9yOiBrZXlvZiBUaGVtZSB8IHVuZGVmaW5lZFxuICAgICAgbGV0IGRlc2NyaXB0aW9uQ29sb3I6IGtleW9mIFRoZW1lIHwgdW5kZWZpbmVkXG4gICAgICBsZXQgdGFza0Rlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgICAgIGlmIChpc1RlYW1tYXRlU3Bhd24gJiYgcGFyc2VkSW5wdXQuc3VjY2VzcyAmJiBwYXJzZWRJbnB1dC5kYXRhLm5hbWUpIHtcbiAgICAgICAgYWdlbnRUeXBlID0gYEAke3BhcnNlZElucHV0LmRhdGEubmFtZX1gXG4gICAgICAgIGNvbnN0IHN1YmFnZW50VHlwZSA9IHBhcnNlZElucHV0LmRhdGEuc3ViYWdlbnRfdHlwZVxuICAgICAgICBkZXNjcmlwdGlvbiA9IGlzQ3VzdG9tU3ViYWdlbnRUeXBlKHN1YmFnZW50VHlwZSlcbiAgICAgICAgICA/IHN1YmFnZW50VHlwZVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIHRhc2tEZXNjcmlwdGlvbiA9IHBhcnNlZElucHV0LmRhdGEuZGVzY3JpcHRpb25cbiAgICAgICAgLy8gVXNlIHRoZSBjdXN0b20gYWdlbnQgZGVmaW5pdGlvbidzIGNvbG9yIG9uIHRoZSB0eXBlLCBub3QgdGhlIG5hbWVcbiAgICAgICAgZGVzY3JpcHRpb25Db2xvciA9IGlzQ3VzdG9tU3ViYWdlbnRUeXBlKHN1YmFnZW50VHlwZSlcbiAgICAgICAgICA/IChnZXRBZ2VudENvbG9yKHN1YmFnZW50VHlwZSkgYXMga2V5b2YgVGhlbWUgfCB1bmRlZmluZWQpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFnZW50VHlwZSA9IHBhcnNlZElucHV0LnN1Y2Nlc3NcbiAgICAgICAgICA/IHVzZXJGYWNpbmdOYW1lKHBhcnNlZElucHV0LmRhdGEpXG4gICAgICAgICAgOiAnQWdlbnQnXG4gICAgICAgIGRlc2NyaXB0aW9uID0gcGFyc2VkSW5wdXQuc3VjY2Vzc1xuICAgICAgICAgID8gcGFyc2VkSW5wdXQuZGF0YS5kZXNjcmlwdGlvblxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIGNvbG9yID0gcGFyc2VkSW5wdXQuc3VjY2Vzc1xuICAgICAgICAgID8gdXNlckZhY2luZ05hbWVCYWNrZ3JvdW5kQ29sb3IocGFyc2VkSW5wdXQuZGF0YSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB0YXNrRGVzY3JpcHRpb24gPSB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyB3YXMgbGF1bmNoZWQgYXMgYSBiYWNrZ3JvdW5kIGFnZW50IE9SIGJhY2tncm91bmRlZCBtaWQtZXhlY3V0aW9uXG4gICAgICBjb25zdCBsYXVuY2hlZEFzQXN5bmMgPVxuICAgICAgICBwYXJzZWRJbnB1dC5zdWNjZXNzICYmXG4gICAgICAgICdydW5faW5fYmFja2dyb3VuZCcgaW4gcGFyc2VkSW5wdXQuZGF0YSAmJlxuICAgICAgICBwYXJzZWRJbnB1dC5kYXRhLnJ1bl9pbl9iYWNrZ3JvdW5kID09PSB0cnVlXG4gICAgICBjb25zdCBvdXRwdXRTdGF0dXMgPSAocmVzdWx0Py5vdXRwdXQgYXMgeyBzdGF0dXM/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZClcbiAgICAgICAgPy5zdGF0dXNcbiAgICAgIGNvbnN0IGJhY2tncm91bmRlZE1pZEV4ZWN1dGlvbiA9XG4gICAgICAgIG91dHB1dFN0YXR1cyA9PT0gJ2FzeW5jX2xhdW5jaGVkJyB8fCBvdXRwdXRTdGF0dXMgPT09ICdyZW1vdGVfbGF1bmNoZWQnXG4gICAgICBjb25zdCBpc0FzeW5jID1cbiAgICAgICAgbGF1bmNoZWRBc0FzeW5jIHx8IGJhY2tncm91bmRlZE1pZEV4ZWN1dGlvbiB8fCBpc1RlYW1tYXRlU3Bhd25cblxuICAgICAgY29uc3QgbmFtZSA9IHBhcnNlZElucHV0LnN1Y2Nlc3MgPyBwYXJzZWRJbnB1dC5kYXRhLm5hbWUgOiB1bmRlZmluZWRcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHBhcmFtLmlkLFxuICAgICAgICBhZ2VudFR5cGUsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICB0b29sVXNlQ291bnQ6IHN0YXRzLnRvb2xVc2VDb3VudCxcbiAgICAgICAgdG9rZW5zOiBzdGF0cy50b2tlbnMsXG4gICAgICAgIGlzUmVzb2x2ZWQsXG4gICAgICAgIGlzRXJyb3IsXG4gICAgICAgIGlzQXN5bmMsXG4gICAgICAgIGNvbG9yLFxuICAgICAgICBkZXNjcmlwdGlvbkNvbG9yLFxuICAgICAgICBsYXN0VG9vbEluZm8sXG4gICAgICAgIHRhc2tEZXNjcmlwdGlvbixcbiAgICAgICAgbmFtZSxcbiAgICAgIH1cbiAgICB9LFxuICApXG5cbiAgY29uc3QgYW55VW5yZXNvbHZlZCA9IHRvb2xVc2VzLnNvbWUodCA9PiAhdC5pc1Jlc29sdmVkKVxuICBjb25zdCBhbnlFcnJvciA9IHRvb2xVc2VzLnNvbWUodCA9PiB0LmlzRXJyb3IpXG4gIGNvbnN0IGFsbENvbXBsZXRlID0gIWFueVVucmVzb2x2ZWRcblxuICAvLyBDaGVjayBpZiBhbGwgYWdlbnRzIGFyZSB0aGUgc2FtZSB0eXBlXG4gIGNvbnN0IGFsbFNhbWVUeXBlID1cbiAgICBhZ2VudFN0YXRzLmxlbmd0aCA+IDAgJiZcbiAgICBhZ2VudFN0YXRzLmV2ZXJ5KHN0YXQgPT4gc3RhdC5hZ2VudFR5cGUgPT09IGFnZW50U3RhdHNbMF0/LmFnZW50VHlwZSlcbiAgY29uc3QgY29tbW9uVHlwZSA9XG4gICAgYWxsU2FtZVR5cGUgJiYgYWdlbnRTdGF0c1swXT8uYWdlbnRUeXBlICE9PSAnQWdlbnQnXG4gICAgICA/IGFnZW50U3RhdHNbMF0/LmFnZW50VHlwZVxuICAgICAgOiBudWxsXG5cbiAgLy8gQ2hlY2sgaWYgYWxsIHJlc29sdmVkIGFnZW50cyBhcmUgYXN5bmMgKGJhY2tncm91bmQpXG4gIGNvbnN0IGFsbEFzeW5jID0gYWdlbnRTdGF0cy5ldmVyeShzdGF0ID0+IHN0YXQuaXNBc3luYylcblxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIG1hcmdpblRvcD17MX0+XG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJyb3dcIj5cbiAgICAgICAgPFRvb2xVc2VMb2FkZXJcbiAgICAgICAgICBzaG91bGRBbmltYXRlPXtzaG91bGRBbmltYXRlICYmIGFueVVucmVzb2x2ZWR9XG4gICAgICAgICAgaXNVbnJlc29sdmVkPXthbnlVbnJlc29sdmVkfVxuICAgICAgICAgIGlzRXJyb3I9e2FueUVycm9yfVxuICAgICAgICAvPlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICB7YWxsQ29tcGxldGUgPyAoXG4gICAgICAgICAgICBhbGxBc3luYyA/IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPnt0b29sVXNlcy5sZW5ndGh9PC9UZXh0PiBiYWNrZ3JvdW5kIGFnZW50cyBsYXVuY2hlZHsnICd9XG4gICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAgICAgICAgICA8S2V5Ym9hcmRTaG9ydGN1dEhpbnQgc2hvcnRjdXQ9XCLihpNcIiBhY3Rpb249XCJtYW5hZ2VcIiBwYXJlbnMgLz5cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPnt0b29sVXNlcy5sZW5ndGh9PC9UZXh0PnsnICd9XG4gICAgICAgICAgICAgICAge2NvbW1vblR5cGUgPyBgJHtjb21tb25UeXBlfSBhZ2VudHNgIDogJ2FnZW50cyd9IGZpbmlzaGVkXG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKVxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICBSdW5uaW5nIDxUZXh0IGJvbGQ+e3Rvb2xVc2VzLmxlbmd0aH08L1RleHQ+eycgJ31cbiAgICAgICAgICAgICAge2NvbW1vblR5cGUgPyBgJHtjb21tb25UeXBlfSBhZ2VudHNgIDogJ2FnZW50cyd94oCmXG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfXsnICd9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgeyFhbGxBc3luYyAmJiA8Q3RybE9Ub0V4cGFuZCAvPn1cbiAgICAgIDwvQm94PlxuICAgICAge2FnZW50U3RhdHMubWFwKChzdGF0LCBpbmRleCkgPT4gKFxuICAgICAgICA8QWdlbnRQcm9ncmVzc0xpbmVcbiAgICAgICAgICBrZXk9e3N0YXQuaWR9XG4gICAgICAgICAgYWdlbnRUeXBlPXtzdGF0LmFnZW50VHlwZX1cbiAgICAgICAgICBkZXNjcmlwdGlvbj17c3RhdC5kZXNjcmlwdGlvbn1cbiAgICAgICAgICBkZXNjcmlwdGlvbkNvbG9yPXtzdGF0LmRlc2NyaXB0aW9uQ29sb3J9XG4gICAgICAgICAgdGFza0Rlc2NyaXB0aW9uPXtzdGF0LnRhc2tEZXNjcmlwdGlvbn1cbiAgICAgICAgICB0b29sVXNlQ291bnQ9e3N0YXQudG9vbFVzZUNvdW50fVxuICAgICAgICAgIHRva2Vucz17c3RhdC50b2tlbnN9XG4gICAgICAgICAgY29sb3I9e3N0YXQuY29sb3J9XG4gICAgICAgICAgaXNMYXN0PXtpbmRleCA9PT0gYWdlbnRTdGF0cy5sZW5ndGggLSAxfVxuICAgICAgICAgIGlzUmVzb2x2ZWQ9e3N0YXQuaXNSZXNvbHZlZH1cbiAgICAgICAgICBpc0Vycm9yPXtzdGF0LmlzRXJyb3J9XG4gICAgICAgICAgaXNBc3luYz17c3RhdC5pc0FzeW5jfVxuICAgICAgICAgIHNob3VsZEFuaW1hdGU9e3Nob3VsZEFuaW1hdGV9XG4gICAgICAgICAgbGFzdFRvb2xJbmZvPXtzdGF0Lmxhc3RUb29sSW5mb31cbiAgICAgICAgICBoaWRlVHlwZT17YWxsU2FtZVR5cGV9XG4gICAgICAgICAgbmFtZT17c3RhdC5uYW1lfVxuICAgICAgICAvPlxuICAgICAgKSl9XG4gICAgPC9Cb3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZXJGYWNpbmdOYW1lKFxuICBpbnB1dDpcbiAgICB8IFBhcnRpYWw8e1xuICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gICAgICAgIHByb21wdDogc3RyaW5nXG4gICAgICAgIHN1YmFnZW50X3R5cGU6IHN0cmluZ1xuICAgICAgICBuYW1lOiBzdHJpbmdcbiAgICAgICAgdGVhbV9uYW1lOiBzdHJpbmdcbiAgICAgIH0+XG4gICAgfCB1bmRlZmluZWQsXG4pOiBzdHJpbmcge1xuICBpZiAoXG4gICAgaW5wdXQ/LnN1YmFnZW50X3R5cGUgJiZcbiAgICBpbnB1dC5zdWJhZ2VudF90eXBlICE9PSBHRU5FUkFMX1BVUlBPU0VfQUdFTlQuYWdlbnRUeXBlXG4gICkge1xuICAgIC8vIERpc3BsYXkgXCJ3b3JrZXJcIiBhZ2VudHMgYXMgXCJBZ2VudFwiIGZvciBjbGVhbmVyIFVJXG4gICAgaWYgKGlucHV0LnN1YmFnZW50X3R5cGUgPT09ICd3b3JrZXInKSB7XG4gICAgICByZXR1cm4gJ0FnZW50J1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXQuc3ViYWdlbnRfdHlwZVxuICB9XG4gIHJldHVybiAnQWdlbnQnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VyRmFjaW5nTmFtZUJhY2tncm91bmRDb2xvcihcbiAgaW5wdXQ6XG4gICAgfCBQYXJ0aWFsPHsgZGVzY3JpcHRpb246IHN0cmluZzsgcHJvbXB0OiBzdHJpbmc7IHN1YmFnZW50X3R5cGU6IHN0cmluZyB9PlxuICAgIHwgdW5kZWZpbmVkLFxuKToga2V5b2YgVGhlbWUgfCB1bmRlZmluZWQge1xuICBpZiAoIWlucHV0Py5zdWJhZ2VudF90eXBlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgLy8gR2V0IHRoZSBjb2xvciBmb3IgdGhpcyBhZ2VudFxuICByZXR1cm4gZ2V0QWdlbnRDb2xvcihpbnB1dC5zdWJhZ2VudF90eXBlKSBhcyBrZXlvZiBUaGVtZSB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdExhc3RUb29sSW5mbyhcbiAgcHJvZ3Jlc3NNZXNzYWdlczogUHJvZ3Jlc3NNZXNzYWdlPFByb2dyZXNzPltdLFxuICB0b29sczogVG9vbHMsXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gQnVpbGQgdG9vbF91c2UgbG9va3VwIGZyb20gYWxsIHByb2dyZXNzIG1lc3NhZ2VzIChuZWVkZWQgZm9yIHJldmVyc2UgaXRlcmF0aW9uKVxuICBjb25zdCB0b29sVXNlQnlJRCA9IG5ldyBNYXA8c3RyaW5nLCBUb29sVXNlQmxvY2tQYXJhbT4oKVxuICBmb3IgKGNvbnN0IHBtIG9mIHByb2dyZXNzTWVzc2FnZXMpIHtcbiAgICBpZiAoIWhhc1Byb2dyZXNzTWVzc2FnZShwbS5kYXRhKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKHBtLmRhdGEubWVzc2FnZS50eXBlID09PSAnYXNzaXN0YW50Jykge1xuICAgICAgZm9yIChjb25zdCBjIG9mIHBtLmRhdGEubWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQpIHtcbiAgICAgICAgaWYgKGMudHlwZSA9PT0gJ3Rvb2xfdXNlJykge1xuICAgICAgICAgIHRvb2xVc2VCeUlELnNldChjLmlkLCBjIGFzIFRvb2xVc2VCbG9ja1BhcmFtKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ291bnQgdHJhaWxpbmcgY29uc2VjdXRpdmUgc2VhcmNoL3JlYWQgb3BlcmF0aW9ucyBmcm9tIHRoZSBlbmRcbiAgbGV0IHNlYXJjaENvdW50ID0gMFxuICBsZXQgcmVhZENvdW50ID0gMFxuICBmb3IgKGxldCBpID0gcHJvZ3Jlc3NNZXNzYWdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IG1zZyA9IHByb2dyZXNzTWVzc2FnZXNbaV0hXG4gICAgaWYgKCFoYXNQcm9ncmVzc01lc3NhZ2UobXNnLmRhdGEpKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBpbmZvID0gZ2V0U2VhcmNoT3JSZWFkSW5mbyhtc2csIHRvb2xzLCB0b29sVXNlQnlJRClcbiAgICBpZiAoaW5mbyAmJiAoaW5mby5pc1NlYXJjaCB8fCBpbmZvLmlzUmVhZCkpIHtcbiAgICAgIC8vIE9ubHkgY291bnQgdG9vbF9yZXN1bHQgbWVzc2FnZXMgdG8gYXZvaWQgZG91YmxlIGNvdW50aW5nXG4gICAgICBpZiAobXNnLmRhdGEubWVzc2FnZS50eXBlID09PSAndXNlcicpIHtcbiAgICAgICAgaWYgKGluZm8uaXNTZWFyY2gpIHtcbiAgICAgICAgICBzZWFyY2hDb3VudCsrXG4gICAgICAgIH0gZWxzZSBpZiAoaW5mby5pc1JlYWQpIHtcbiAgICAgICAgICByZWFkQ291bnQrK1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHNlYXJjaENvdW50ICsgcmVhZENvdW50ID49IDIpIHtcbiAgICByZXR1cm4gZ2V0U2VhcmNoUmVhZFN1bW1hcnlUZXh0KHNlYXJjaENvdW50LCByZWFkQ291bnQsIHRydWUpXG4gIH1cblxuICAvLyBGaW5kIHRoZSBsYXN0IHRvb2xfcmVzdWx0IG1lc3NhZ2VcbiAgY29uc3QgbGFzdFRvb2xSZXN1bHQgPSBwcm9ncmVzc01lc3NhZ2VzLmZpbmRMYXN0KFxuICAgIChtc2cpOiBtc2cgaXMgUHJvZ3Jlc3NNZXNzYWdlPEFnZW50VG9vbFByb2dyZXNzPiA9PiB7XG4gICAgICBpZiAoIWhhc1Byb2dyZXNzTWVzc2FnZShtc2cuZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBjb25zdCBtZXNzYWdlID0gbXNnLmRhdGEubWVzc2FnZVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgbWVzc2FnZS50eXBlID09PSAndXNlcicgJiZcbiAgICAgICAgbWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQuc29tZShjID0+IGMudHlwZSA9PT0gJ3Rvb2xfcmVzdWx0JylcbiAgICAgIClcbiAgICB9LFxuICApXG5cbiAgaWYgKGxhc3RUb29sUmVzdWx0Py5kYXRhLm1lc3NhZ2UudHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgY29uc3QgdG9vbFJlc3VsdEJsb2NrID0gbGFzdFRvb2xSZXN1bHQuZGF0YS5tZXNzYWdlLm1lc3NhZ2UuY29udGVudC5maW5kKFxuICAgICAgYyA9PiBjLnR5cGUgPT09ICd0b29sX3Jlc3VsdCcsXG4gICAgKVxuXG4gICAgaWYgKHRvb2xSZXN1bHRCbG9jaz8udHlwZSA9PT0gJ3Rvb2xfcmVzdWx0Jykge1xuICAgICAgLy8gTG9vayB1cCB0aGUgY29ycmVzcG9uZGluZyB0b29sX3VzZSDigJQgYWxyZWFkeSBpbmRleGVkIGFib3ZlXG4gICAgICBjb25zdCB0b29sVXNlQmxvY2sgPSB0b29sVXNlQnlJRC5nZXQodG9vbFJlc3VsdEJsb2NrLnRvb2xfdXNlX2lkKVxuXG4gICAgICBpZiAodG9vbFVzZUJsb2NrKSB7XG4gICAgICAgIGNvbnN0IHRvb2wgPSBmaW5kVG9vbEJ5TmFtZSh0b29scywgdG9vbFVzZUJsb2NrLm5hbWUpXG4gICAgICAgIGlmICghdG9vbCkge1xuICAgICAgICAgIHJldHVybiB0b29sVXNlQmxvY2submFtZSAvLyBGYWxsYmFjayB0byByYXcgbmFtZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5wdXQgPSB0b29sVXNlQmxvY2suaW5wdXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgY29uc3QgcGFyc2VkSW5wdXQgPSB0b29sLmlucHV0U2NoZW1hLnNhZmVQYXJzZShpbnB1dClcblxuICAgICAgICAvLyBHZXQgdXNlci1mYWNpbmcgdG9vbCBuYW1lXG4gICAgICAgIGNvbnN0IHVzZXJGYWNpbmdUb29sTmFtZSA9IHRvb2wudXNlckZhY2luZ05hbWUoXG4gICAgICAgICAgcGFyc2VkSW5wdXQuc3VjY2VzcyA/IHBhcnNlZElucHV0LmRhdGEgOiB1bmRlZmluZWQsXG4gICAgICAgIClcblxuICAgICAgICAvLyBUcnkgdG8gZ2V0IHN1bW1hcnkgZnJvbSB0aGUgdG9vbCBpdHNlbGZcbiAgICAgICAgaWYgKHRvb2wuZ2V0VG9vbFVzZVN1bW1hcnkpIHtcbiAgICAgICAgICBjb25zdCBzdW1tYXJ5ID0gdG9vbC5nZXRUb29sVXNlU3VtbWFyeShcbiAgICAgICAgICAgIHBhcnNlZElucHV0LnN1Y2Nlc3MgPyBwYXJzZWRJbnB1dC5kYXRhIDogdW5kZWZpbmVkLFxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAoc3VtbWFyeSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3VzZXJGYWNpbmdUb29sTmFtZX06ICR7c3VtbWFyeX1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVmYXVsdDoganVzdCBzaG93IHVzZXItZmFjaW5nIHRvb2wgbmFtZVxuICAgICAgICByZXR1cm4gdXNlckZhY2luZ1Rvb2xOYW1lXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gaXNDdXN0b21TdWJhZ2VudFR5cGUoXG4gIHN1YmFnZW50VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuKTogc3ViYWdlbnRUeXBlIGlzIHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgISFzdWJhZ2VudFR5cGUgJiZcbiAgICBzdWJhZ2VudFR5cGUgIT09IEdFTkVSQUxfUFVSUE9TRV9BR0VOVC5hZ2VudFR5cGUgJiZcbiAgICBzdWJhZ2VudFR5cGUgIT09ICd3b3JrZXInXG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLGNBQ0VBLG9CQUFvQixFQUNwQkMsaUJBQWlCLFFBQ1osdUNBQXVDO0FBQzlDLE9BQU8sS0FBS0MsS0FBSyxNQUFNLE9BQU87QUFDOUIsU0FBU0Msd0JBQXdCLFFBQVEsNENBQTRDO0FBQ3JGLFNBQ0VDLGFBQWEsRUFDYkMsZ0JBQWdCLFFBQ1gsaUNBQWlDO0FBQ3hDLFNBQVNDLE1BQU0sUUFBUSx3Q0FBd0M7QUFDL0QsU0FBU0Msb0JBQW9CLFFBQVEsc0RBQXNEO0FBQzNGLGNBQWNDLENBQUMsUUFBUSxRQUFRO0FBQy9CLFNBQVNDLGlCQUFpQixRQUFRLHVDQUF1QztBQUN6RSxTQUFTQywyQkFBMkIsUUFBUSxpREFBaUQ7QUFDN0YsU0FBU0MsOEJBQThCLFFBQVEsb0RBQW9EO0FBQ25HLFNBQVNDLFFBQVEsUUFBUSw4QkFBOEI7QUFDdkQsU0FBU0MsT0FBTyxJQUFJQyxnQkFBZ0IsUUFBUSw2QkFBNkI7QUFDekUsU0FBU0MsZUFBZSxRQUFRLHFDQUFxQztBQUNyRSxTQUFTQyxhQUFhLFFBQVEsbUNBQW1D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
871
+ }
@@ -188,4 +188,3 @@ export default function BashToolResultMessage(t0) {
188
188
  }
189
189
  return t11;
190
190
  }
191
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInJlbW92ZVNhbmRib3hWaW9sYXRpb25UYWdzIiwiS2V5Ym9hcmRTaG9ydGN1dEhpbnQiLCJNZXNzYWdlUmVzcG9uc2UiLCJPdXRwdXRMaW5lIiwiU2hlbGxUaW1lRGlzcGxheSIsIkJveCIsIlRleHQiLCJPdXQiLCJCYXNoT3V0IiwiUHJvcHMiLCJjb250ZW50IiwiT21pdCIsInZlcmJvc2UiLCJ0aW1lb3V0TXMiLCJTSEVMTF9DV0RfUkVTRVRfUEFUVEVSTiIsImV4dHJhY3RTYW5kYm94VmlvbGF0aW9ucyIsInN0ZGVyciIsImNsZWFuZWRTdGRlcnIiLCJ2aW9sYXRpb25zTWF0Y2giLCJtYXRjaCIsInRyaW0iLCJleHRyYWN0Q3dkUmVzZXRXYXJuaW5nIiwiY3dkUmVzZXRXYXJuaW5nIiwicmVwbGFjZSIsIkJhc2hUb29sUmVzdWx0TWVzc2FnZSIsInQwIiwiJCIsIl9jIiwidDEiLCJzdGRvdXQiLCJ0MiIsInQzIiwiaXNJbWFnZSIsInJldHVybkNvZGVJbnRlcnByZXRhdGlvbiIsIm5vT3V0cHV0RXhwZWN0ZWQiLCJiYWNrZ3JvdW5kVGFza0lkIiwidW5kZWZpbmVkIiwic3RkRXJyV2l0aFZpb2xhdGlvbnMiLCJUMCIsInQ0IiwidDUiLCJ0NiIsInQ3IiwiU3ltYm9sIiwiZm9yIiwiYmIwIiwic3RkZXJyV2l0aG91dFZpb2xhdGlvbnMiLCJ0OCIsInQ5IiwidDEwIiwidDExIl0sInNvdXJjZXMiOlsiQmFzaFRvb2xSZXN1bHRNZXNzYWdlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyByZW1vdmVTYW5kYm94VmlvbGF0aW9uVGFncyB9IGZyb20gJ3NyYy91dGlscy9zYW5kYm94L3NhbmRib3gtdWktdXRpbHMuanMnXG5pbXBvcnQgeyBLZXlib2FyZFNob3J0Y3V0SGludCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZGVzaWduLXN5c3RlbS9LZXlib2FyZFNob3J0Y3V0SGludC5qcydcbmltcG9ydCB7IE1lc3NhZ2VSZXNwb25zZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvTWVzc2FnZVJlc3BvbnNlLmpzJ1xuaW1wb3J0IHsgT3V0cHV0TGluZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2hlbGwvT3V0cHV0TGluZS5qcydcbmltcG9ydCB7IFNoZWxsVGltZURpc3BsYXkgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3NoZWxsL1NoZWxsVGltZURpc3BsYXkuanMnXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICcuLi8uLi9pbmsuanMnXG5pbXBvcnQgdHlwZSB7IE91dCBhcyBCYXNoT3V0IH0gZnJvbSAnLi9CYXNoVG9vbC5qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgY29udGVudDogT21pdDxCYXNoT3V0LCAnaW50ZXJydXB0ZWQnPlxuICB2ZXJib3NlOiBib29sZWFuXG4gIHRpbWVvdXRNcz86IG51bWJlclxufVxuXG4vLyBQYXR0ZXJuIHRvIG1hdGNoIFwiU2hlbGwgY3dkIHdhcyByZXNldCB0byA8cGF0aD5cIiBtZXNzYWdlXG4vLyBVc2UgKD86XnxcXG4pIHRvIG1hdGNoIGVpdGhlciBzdGFydCBvZiBzdHJpbmcgb3IgYWZ0ZXIgYSBuZXdsaW5lXG5jb25zdCBTSEVMTF9DV0RfUkVTRVRfUEFUVEVSTiA9IC8oPzpefFxcbikoU2hlbGwgY3dkIHdhcyByZXNldCB0byAuKykkL1xuXG4vKipcbiAqIEV4dHJhY3RzIHNhbmRib3ggdmlvbGF0aW9ucyBmcm9tIHN0ZGVyciBpZiBwcmVzZW50XG4gKiBSZXR1cm5zIGJvdGggdGhlIGNsZWFuZWQgc3RkZXJyIGFuZCB0aGUgdmlvbGF0aW9ucyBjb250ZW50XG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTYW5kYm94VmlvbGF0aW9ucyhzdGRlcnI6IHN0cmluZyk6IHtcbiAgY2xlYW5lZFN0ZGVycjogc3RyaW5nXG59IHtcbiAgY29uc3QgdmlvbGF0aW9uc01hdGNoID0gc3RkZXJyLm1hdGNoKFxuICAgIC88c2FuZGJveF92aW9sYXRpb25zPihbXFxzXFxTXSo/KTxcXC9zYW5kYm94X3Zpb2xhdGlvbnM+LyxcbiAgKVxuXG4gIGlmICghdmlvbGF0aW9uc01hdGNoKSB7XG4gICAgcmV0dXJuIHsgY2xlYW5lZFN0ZGVycjogc3RkZXJyIH1cbiAgfVxuXG4gIC8vIFJlbW92ZSB0aGUgc2FuZGJveCB2aW9sYXRpb25zIHNlY3Rpb24gZnJvbSBzdGRlcnJcbiAgY29uc3QgY2xlYW5lZFN0ZGVyciA9IHJlbW92ZVNhbmRib3hWaW9sYXRpb25UYWdzKHN0ZGVycikudHJpbSgpXG5cbiAgcmV0dXJuIHtcbiAgICBjbGVhbmVkU3RkZXJyLFxuICB9XG59XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIFwiU2hlbGwgY3dkIHdhcyByZXNldFwiIHdhcm5pbmcgbWVzc2FnZSBmcm9tIHN0ZGVyclxuICogUmV0dXJucyB0aGUgY2xlYW5lZCBzdGRlcnIgYW5kIHRoZSB3YXJuaW5nIG1lc3NhZ2Ugc2VwYXJhdGVseVxuICovXG5mdW5jdGlvbiBleHRyYWN0Q3dkUmVzZXRXYXJuaW5nKHN0ZGVycjogc3RyaW5nKToge1xuICBjbGVhbmVkU3RkZXJyOiBzdHJpbmdcbiAgY3dkUmVzZXRXYXJuaW5nOiBzdHJpbmcgfCBudWxsXG59IHtcbiAgY29uc3QgbWF0Y2ggPSBzdGRlcnIubWF0Y2goU0hFTExfQ1dEX1JFU0VUX1BBVFRFUk4pXG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4geyBjbGVhbmVkU3RkZXJyOiBzdGRlcnIsIGN3ZFJlc2V0V2FybmluZzogbnVsbCB9XG4gIH1cblxuICAvLyBFeHRyYWN0IHRoZSB3YXJuaW5nIG1lc3NhZ2UgZnJvbSBjYXB0dXJlIGdyb3VwIDFcbiAgY29uc3QgY3dkUmVzZXRXYXJuaW5nID0gbWF0Y2hbMV0gPz8gbnVsbFxuICAvLyBSZW1vdmUgdGhlIHdhcm5pbmcgZnJvbSBzdGRlcnIgKHJlcGxhY2UgdGhlIGZ1bGwgbWF0Y2gpXG4gIGNvbnN0IGNsZWFuZWRTdGRlcnIgPSBzdGRlcnIucmVwbGFjZShTSEVMTF9DV0RfUkVTRVRfUEFUVEVSTiwgJycpLnRyaW0oKVxuXG4gIHJldHVybiB7IGNsZWFuZWRTdGRlcnIsIGN3ZFJlc2V0V2FybmluZyB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJhc2hUb29sUmVzdWx0TWVzc2FnZSh7XG4gIGNvbnRlbnQ6IHtcbiAgICBzdGRvdXQgPSAnJyxcbiAgICBzdGRlcnI6IHN0ZEVycldpdGhWaW9sYXRpb25zID0gJycsXG4gICAgaXNJbWFnZSxcbiAgICByZXR1cm5Db2RlSW50ZXJwcmV0YXRpb24sXG4gICAgbm9PdXRwdXRFeHBlY3RlZCxcbiAgICBiYWNrZ3JvdW5kVGFza0lkLFxuICB9LFxuICB2ZXJib3NlLFxuICB0aW1lb3V0TXMsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIC8vIEV4dHJhY3Qgc2FuZGJveCB2aW9sYXRpb25zIGZyb20gc3RkZXJyIGFzIGl0IGZlZWxzIGNsZWFuZXIgb24gdGhlIFVJXG4gIC8vIFdlIHdhbnQgdGhlIG1vZGVsIHRvIHNlZSB0aGUgdmlvbGF0aW9ucywgc28gaXQgY2FuIGV4cGxhaW4gd2hhdCB3ZW50IHdyb25nLCBhbmQgdGhlXG4gIC8vIHVzZXIgY2FuIGFjY2VzcyB0aGVtIGluIHRoZSB2aW9sYXRpb24gbG9nc1xuICBjb25zdCB7IGNsZWFuZWRTdGRlcnI6IHN0ZGVycldpdGhvdXRWaW9sYXRpb25zIH0gPVxuICAgIGV4dHJhY3RTYW5kYm94VmlvbGF0aW9ucyhzdGRFcnJXaXRoVmlvbGF0aW9ucylcblxuICAvLyBFeHRyYWN0IFwiU2hlbGwgY3dkIHdhcyByZXNldFwiIHdhcm5pbmcgdG8gcmVuZGVyIGl0IHdpdGggd2FybmluZyBjb2xvciBpbnN0ZWFkIG9mIGVycm9yXG4gIGNvbnN0IHsgY2xlYW5lZFN0ZGVycjogc3RkZXJyLCBjd2RSZXNldFdhcm5pbmcgfSA9IGV4dHJhY3RDd2RSZXNldFdhcm5pbmcoXG4gICAgc3RkZXJyV2l0aG91dFZpb2xhdGlvbnMsXG4gIClcblxuICAvLyBJZiB0aGlzIGlzIGFuIGltYWdlLCB3ZSBkb24ndCB3YW50IHRvIHRydW5jYXRlIGl0IGluIHRoZSBVSVxuICBpZiAoaXNJbWFnZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TWVzc2FnZVJlc3BvbnNlIGhlaWdodD17MX0+XG4gICAgICAgIDxUZXh0IGRpbUNvbG9yPltJbWFnZSBkYXRhIGRldGVjdGVkIGFuZCBzZW50IHRvIENsYXVkZV08L1RleHQ+XG4gICAgICA8L01lc3NhZ2VSZXNwb25zZT5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAge3N0ZG91dCAhPT0gJycgPyA8T3V0cHV0TGluZSBjb250ZW50PXtzdGRvdXR9IHZlcmJvc2U9e3ZlcmJvc2V9IC8+IDogbnVsbH1cbiAgICAgIHtzdGRlcnIudHJpbSgpICE9PSAnJyA/IChcbiAgICAgICAgPE91dHB1dExpbmUgY29udGVudD17c3RkZXJyfSB2ZXJib3NlPXt2ZXJib3NlfSBpc0Vycm9yIC8+XG4gICAgICApIDogbnVsbH1cbiAgICAgIHtjd2RSZXNldFdhcm5pbmcgPyAoXG4gICAgICAgIDxNZXNzYWdlUmVzcG9uc2U+XG4gICAgICAgICAgPFRleHQgZGltQ29sb3I+e2N3ZFJlc2V0V2FybmluZ308L1RleHQ+XG4gICAgICAgIDwvTWVzc2FnZVJlc3BvbnNlPlxuICAgICAgKSA6IG51bGx9XG4gICAgICB7c3Rkb3V0ID09PSAnJyAmJiBzdGRlcnIudHJpbSgpID09PSAnJyAmJiAhY3dkUmVzZXRXYXJuaW5nID8gKFxuICAgICAgICA8TWVzc2FnZVJlc3BvbnNlIGhlaWdodD17MX0+XG4gICAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAgICB7YmFja2dyb3VuZFRhc2tJZCA/IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICBSdW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5keycgJ31cbiAgICAgICAgICAgICAgICA8S2V5Ym9hcmRTaG9ydGN1dEhpbnQgc2hvcnRjdXQ9XCLihpNcIiBhY3Rpb249XCJtYW5hZ2VcIiBwYXJlbnMgLz5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICByZXR1cm5Db2RlSW50ZXJwcmV0YXRpb24gfHxcbiAgICAgICAgICAgICAgKG5vT3V0cHV0RXhwZWN0ZWQgPyAnRG9uZScgOiAnKE5vIG91dHB1dCknKVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvTWVzc2FnZVJlc3BvbnNlPlxuICAgICAgKSA6IG51bGx9XG4gICAgICB7dGltZW91dE1zICYmIChcbiAgICAgICAgPE1lc3NhZ2VSZXNwb25zZT5cbiAgICAgICAgICA8U2hlbGxUaW1lRGlzcGxheSB0aW1lb3V0TXM9e3RpbWVvdXRNc30gLz5cbiAgICAgICAgPC9NZXNzYWdlUmVzcG9uc2U+XG4gICAgICApfVxuICAgIDwvQm94PlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxLQUFLLE1BQU0sT0FBTztBQUN6QixTQUFTQywwQkFBMEIsUUFBUSx1Q0FBdUM7QUFDbEYsU0FBU0Msb0JBQW9CLFFBQVEsd0RBQXdEO0FBQzdGLFNBQVNDLGVBQWUsUUFBUSxxQ0FBcUM7QUFDckUsU0FBU0MsVUFBVSxRQUFRLHNDQUFzQztBQUNqRSxTQUFTQyxnQkFBZ0IsUUFBUSw0Q0FBNEM7QUFDN0UsU0FBU0MsR0FBRyxFQUFFQyxJQUFJLFFBQVEsY0FBYztBQUN4QyxjQUFjQyxHQUFHLElBQUlDLE9BQU8sUUFBUSxlQUFlO0FBRW5ELEtBQUtDLEtBQUssR0FBRztFQUNYQyxPQUFPLEVBQUVDLElBQUksQ0FBQ0gsT0FBTyxFQUFFLGFBQWEsQ0FBQztFQUNyQ0ksT0FBTyxFQUFFLE9BQU87RUFDaEJDLFNBQVMsQ0FBQyxFQUFFLE1BQU07QUFDcEIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsTUFBTUMsdUJBQXVCLEdBQUcsc0NBQXNDOztBQUV0RTtBQUNBO0FBQ0E7QUFDQTtBQUNB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N0MsQ0FDRixFQVZDLElBQUksQ0FXUCxFQVpDLGVBQWUsQ0FhVixHQWRQLElBY087SUFBQVIsQ0FBQSxPQUFBUyxnQkFBQTtJQUFBVCxDQUFBLE9BQUFKLGVBQUE7SUFBQUksQ0FBQSxPQUFBUSxnQkFBQTtJQUFBUixDQUFBLE9BQUFPLHdCQUFBO0lBQUFQLENBQUEsT0FBQVYsTUFBQTtJQUFBVSxDQUFBLE9BQUFHLE1BQUE7SUFBQUgsQ0FBQSxPQUFBc0IsRUFBQTtFQUFBO0lBQUFBLEVBQUEsR0FBQXRCLENBQUE7RUFBQTtFQUFBLElBQUF1QixHQUFBO0VBQUEsSUFBQXZCLENBQUEsU0FBQWIsU0FBQTtJQUNQb0MsR0FBQSxHQUFBcEMsU0FJQSxJQUhDLENBQUMsZUFBZSxDQUNkLENBQUMsZ0JBQWdCLENBQVlBLFNBQVMsQ0FBVEEsVUFBUSxDQUFDLEdBQ3hDLEVBRkMsZUFBZSxDQUdqQjtJQUFBYSxDQUFBLE9BQUFiLFNBQUE7SUFBQWEsQ0FBQSxPQUFBdUIsR0FBQTtFQUFBO0lBQUFBLEdBQUEsR0FBQXZCLENBQUE7RUFBQTtFQUFBLElBQUF3QixHQUFBO0VBQUEsSUFBQXhCLENBQUEsU0FBQVksRUFBQSxJQUFBWixDQUFBLFNBQUF1QixHQUFBLElBQUF2QixDQUFBLFNBQUFhLEVBQUEsSUFBQWIsQ0FBQSxTQUFBYyxFQUFBLElBQUFkLENBQUEsU0FBQWUsRUFBQSxJQUFBZixDQUFBLFNBQUFxQixFQUFBLElBQUFyQixDQUFBLFNBQUFzQixFQUFBO0lBN0JIRSxHQUFBLElBQUMsRUFBRyxDQUFlLGFBQVEsQ0FBUixDQUFBWCxFQUFPLENBQUMsQ0FDeEIsQ0FBQUMsRUFBdUUsQ0FDdkUsQ0FBQUMsRUFFTSxDQUNOLENBQUFNLEVBSU0sQ0FDTixDQUFBQyxFQWNNLENBQ04sQ0FBQUMsR0FJRCxDQUNGLEVBOUJDLEVBQUcsQ0E4QkU7SUFBQXZCLENBQUEsT0FBQVksRUFBQTtJQUFBWixDQUFBLE9BQUF1QixHQUFBO0lBQUF2QixDQUFBLE9BQUFhLEVBQUE7SUFBQWIsQ0FBQSxPQUFBYyxFQUFBO0lBQUFkLENBQUEsT0FBQWUsRUFBQTtJQUFBZixDQUFBLE9BQUFxQixFQUFBO0lBQUFyQixDQUFBLE9BQUFzQixFQUFBO0lBQUF0QixDQUFBLE9BQUF3QixHQUFBO0VBQUE7SUFBQUEsR0FBQSxHQUFBeEIsQ0FBQTtFQUFBO0VBQUEsT0E5Qk53QixHQThCTTtBQUFBIiwiaWdub3JlTGlzdCI6W119