source dump of claude code
at main 241 lines 26 kB view raw
1import { c as _c } from "react/compiler-runtime"; 2import figures from 'figures'; 3import * as React from 'react'; 4import { Suspense, use } from 'react'; 5import { getSessionId } from '../../bootstrap/state.js'; 6import type { LocalJSXCommandContext } from '../../commands.js'; 7import { useIsInsideModal } from '../../context/modalContext.js'; 8import { Box, Text, useTheme } from '../../ink.js'; 9import { type AppState, useAppState } from '../../state/AppState.js'; 10import { getCwd } from '../../utils/cwd.js'; 11import { getCurrentSessionTitle } from '../../utils/sessionStorage.js'; 12import { buildAccountProperties, buildAPIProviderProperties, buildIDEProperties, buildInstallationDiagnostics, buildInstallationHealthDiagnostics, buildMcpProperties, buildMemoryDiagnostics, buildSandboxProperties, buildSettingSourcesProperties, type Diagnostic, getModelDisplayLabel, type Property } from '../../utils/status.js'; 13import type { ThemeName } from '../../utils/theme.js'; 14import { ConfigurableShortcutHint } from '../ConfigurableShortcutHint.js'; 15type Props = { 16 context: LocalJSXCommandContext; 17 diagnosticsPromise: Promise<Diagnostic[]>; 18}; 19function buildPrimarySection(): Property[] { 20 const sessionId = getSessionId(); 21 const customTitle = getCurrentSessionTitle(sessionId); 22 const nameValue = customTitle ?? <Text dimColor>/rename to add a name</Text>; 23 return [{ 24 label: 'Version', 25 value: MACRO.VERSION 26 }, { 27 label: 'Session name', 28 value: nameValue 29 }, { 30 label: 'Session ID', 31 value: sessionId 32 }, { 33 label: 'cwd', 34 value: getCwd() 35 }, ...buildAccountProperties(), ...buildAPIProviderProperties()]; 36} 37function buildSecondarySection({ 38 mainLoopModel, 39 mcp, 40 theme, 41 context 42}: { 43 mainLoopModel: AppState['mainLoopModel']; 44 mcp: AppState['mcp']; 45 theme: ThemeName; 46 context: LocalJSXCommandContext; 47}): Property[] { 48 const modelLabel = getModelDisplayLabel(mainLoopModel); 49 return [{ 50 label: 'Model', 51 value: modelLabel 52 }, ...buildIDEProperties(mcp.clients, context.options.ideInstallationStatus, theme), ...buildMcpProperties(mcp.clients, theme), ...buildSandboxProperties(), ...buildSettingSourcesProperties()]; 53} 54export async function buildDiagnostics(): Promise<Diagnostic[]> { 55 return [...(await buildInstallationDiagnostics()), ...(await buildInstallationHealthDiagnostics()), ...(await buildMemoryDiagnostics())]; 56} 57function PropertyValue(t0) { 58 const $ = _c(8); 59 const { 60 value 61 } = t0; 62 if (Array.isArray(value)) { 63 let t1; 64 if ($[0] !== value) { 65 let t2; 66 if ($[2] !== value.length) { 67 t2 = (item, i) => <Text key={i}>{item}{i < value.length - 1 ? "," : ""}</Text>; 68 $[2] = value.length; 69 $[3] = t2; 70 } else { 71 t2 = $[3]; 72 } 73 t1 = value.map(t2); 74 $[0] = value; 75 $[1] = t1; 76 } else { 77 t1 = $[1]; 78 } 79 let t2; 80 if ($[4] !== t1) { 81 t2 = <Box flexWrap="wrap" columnGap={1} flexShrink={99}>{t1}</Box>; 82 $[4] = t1; 83 $[5] = t2; 84 } else { 85 t2 = $[5]; 86 } 87 return t2; 88 } 89 if (typeof value === "string") { 90 let t1; 91 if ($[6] !== value) { 92 t1 = <Text>{value}</Text>; 93 $[6] = value; 94 $[7] = t1; 95 } else { 96 t1 = $[7]; 97 } 98 return t1; 99 } 100 return value; 101} 102export function Status(t0) { 103 const $ = _c(20); 104 const { 105 context, 106 diagnosticsPromise 107 } = t0; 108 const mainLoopModel = useAppState(_temp); 109 const mcp = useAppState(_temp2); 110 const [theme] = useTheme(); 111 let t1; 112 if ($[0] === Symbol.for("react.memo_cache_sentinel")) { 113 t1 = buildPrimarySection(); 114 $[0] = t1; 115 } else { 116 t1 = $[0]; 117 } 118 let t2; 119 if ($[1] !== context || $[2] !== mainLoopModel || $[3] !== mcp || $[4] !== theme) { 120 t2 = buildSecondarySection({ 121 mainLoopModel, 122 mcp, 123 theme, 124 context 125 }); 126 $[1] = context; 127 $[2] = mainLoopModel; 128 $[3] = mcp; 129 $[4] = theme; 130 $[5] = t2; 131 } else { 132 t2 = $[5]; 133 } 134 let t3; 135 if ($[6] !== t2) { 136 t3 = [t1, t2]; 137 $[6] = t2; 138 $[7] = t3; 139 } else { 140 t3 = $[7]; 141 } 142 const sections = t3; 143 const grow = useIsInsideModal() ? 1 : undefined; 144 let t4; 145 if ($[8] !== sections) { 146 t4 = sections.map(_temp4); 147 $[8] = sections; 148 $[9] = t4; 149 } else { 150 t4 = $[9]; 151 } 152 let t5; 153 if ($[10] !== diagnosticsPromise) { 154 t5 = <Suspense fallback={null}><Diagnostics promise={diagnosticsPromise} /></Suspense>; 155 $[10] = diagnosticsPromise; 156 $[11] = t5; 157 } else { 158 t5 = $[11]; 159 } 160 let t6; 161 if ($[12] !== grow || $[13] !== t4 || $[14] !== t5) { 162 t6 = <Box flexDirection="column" gap={1} flexGrow={grow}>{t4}{t5}</Box>; 163 $[12] = grow; 164 $[13] = t4; 165 $[14] = t5; 166 $[15] = t6; 167 } else { 168 t6 = $[15]; 169 } 170 let t7; 171 if ($[16] === Symbol.for("react.memo_cache_sentinel")) { 172 t7 = <Text dimColor={true}><ConfigurableShortcutHint action="confirm:no" context="Settings" fallback="Esc" description="cancel" /></Text>; 173 $[16] = t7; 174 } else { 175 t7 = $[16]; 176 } 177 let t8; 178 if ($[17] !== grow || $[18] !== t6) { 179 t8 = <Box flexDirection="column" flexGrow={grow}>{t6}{t7}</Box>; 180 $[17] = grow; 181 $[18] = t6; 182 $[19] = t8; 183 } else { 184 t8 = $[19]; 185 } 186 return t8; 187} 188function _temp4(properties, i) { 189 return properties.length > 0 && <Box key={i} flexDirection="column">{properties.map(_temp3)}</Box>; 190} 191function _temp3(t0, j) { 192 const { 193 label, 194 value 195 } = t0; 196 return <Box key={j} flexDirection="row" gap={1} flexShrink={0}>{label !== undefined && <Text bold={true}>{label}:</Text>}<PropertyValue value={value} /></Box>; 197} 198function _temp2(s_0) { 199 return s_0.mcp; 200} 201function _temp(s) { 202 return s.mainLoopModel; 203} 204function Diagnostics(t0) { 205 const $ = _c(5); 206 const { 207 promise 208 } = t0; 209 const diagnostics = use(promise); 210 if (diagnostics.length === 0) { 211 return null; 212 } 213 let t1; 214 if ($[0] === Symbol.for("react.memo_cache_sentinel")) { 215 t1 = <Text bold={true}>System Diagnostics</Text>; 216 $[0] = t1; 217 } else { 218 t1 = $[0]; 219 } 220 let t2; 221 if ($[1] !== diagnostics) { 222 t2 = diagnostics.map(_temp5); 223 $[1] = diagnostics; 224 $[2] = t2; 225 } else { 226 t2 = $[2]; 227 } 228 let t3; 229 if ($[3] !== t2) { 230 t3 = <Box flexDirection="column" paddingBottom={1}>{t1}{t2}</Box>; 231 $[3] = t2; 232 $[4] = t3; 233 } else { 234 t3 = $[4]; 235 } 236 return t3; 237} 238function _temp5(diagnostic, i) { 239 return <Box key={i} flexDirection="row" gap={1} paddingX={1}><Text color="error">{figures.warning}</Text>{typeof diagnostic === "string" ? <Text wrap="wrap">{diagnostic}</Text> : diagnostic}</Box>; 240} 241//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWd1cmVzIiwiUmVhY3QiLCJTdXNwZW5zZSIsInVzZSIsImdldFNlc3Npb25JZCIsIkxvY2FsSlNYQ29tbWFuZENvbnRleHQiLCJ1c2VJc0luc2lkZU1vZGFsIiwiQm94IiwiVGV4dCIsInVzZVRoZW1lIiwiQXBwU3RhdGUiLCJ1c2VBcHBTdGF0ZSIsImdldEN3ZCIsImdldEN1cnJlbnRTZXNzaW9uVGl0bGUiLCJidWlsZEFjY291bnRQcm9wZXJ0aWVzIiwiYnVpbGRBUElQcm92aWRlclByb3BlcnRpZXMiLCJidWlsZElERVByb3BlcnRpZXMiLCJidWlsZEluc3RhbGxhdGlvbkRpYWdub3N0aWNzIiwiYnVpbGRJbnN0YWxsYXRpb25IZWFsdGhEaWFnbm9zdGljcyIsImJ1aWxkTWNwUHJvcGVydGllcyIsImJ1aWxkTWVtb3J5RGlhZ25vc3RpY3MiLCJidWlsZFNhbmRib3hQcm9wZXJ0aWVzIiwiYnVpbGRTZXR0aW5nU291cmNlc1Byb3BlcnRpZXMiLCJEaWFnbm9zdGljIiwiZ2V0TW9kZWxEaXNwbGF5TGFiZWwiLCJQcm9wZXJ0eSIsIlRoZW1lTmFtZSIsIkNvbmZpZ3VyYWJsZVNob3J0Y3V0SGludCIsIlByb3BzIiwiY29udGV4dCIsImRpYWdub3N0aWNzUHJvbWlzZSIsIlByb21pc2UiLCJidWlsZFByaW1hcnlTZWN0aW9uIiwic2Vzc2lvbklkIiwiY3VzdG9tVGl0bGUiLCJuYW1lVmFsdWUiLCJsYWJlbCIsInZhbHVlIiwiTUFDUk8iLCJWRVJTSU9OIiwiYnVpbGRTZWNvbmRhcnlTZWN0aW9uIiwibWFpbkxvb3BNb2RlbCIsIm1jcCIsInRoZW1lIiwibW9kZWxMYWJlbCIsImNsaWVudHMiLCJvcHRpb25zIiwiaWRlSW5zdGFsbGF0aW9uU3RhdHVzIiwiYnVpbGREaWFnbm9zdGljcyIsIlByb3BlcnR5VmFsdWUiLCJ0MCIsIiQiLCJfYyIsIkFycmF5IiwiaXNBcnJheSIsInQxIiwidDIiLCJsZW5ndGgiLCJpdGVtIiwiaSIsIm1hcCIsIlN0YXR1cyIsIl90ZW1wIiwiX3RlbXAyIiwiU3ltYm9sIiwiZm9yIiwidDMiLCJzZWN0aW9ucyIsImdyb3ciLCJ1bmRlZmluZWQiLCJ0NCIsIl90ZW1wNCIsInQ1IiwidDYiLCJ0NyIsInQ4IiwicHJvcGVydGllcyIsIl90ZW1wMyIsImoiLCJzXzAiLCJzIiwiRGlhZ25vc3RpY3MiLCJwcm9taXNlIiwiZGlhZ25vc3RpY3MiLCJfdGVtcDUiLCJkaWFnbm9zdGljIiwid2FybmluZyJdLCJzb3VyY2VzIjpbIlN0YXR1cy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZpZ3VyZXMgZnJvbSAnZmlndXJlcydcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU3VzcGVuc2UsIHVzZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0U2Vzc2lvbklkIH0gZnJvbSAnLi4vLi4vYm9vdHN0cmFwL3N0YXRlLmpzJ1xuaW1wb3J0IHR5cGUgeyBMb2NhbEpTWENvbW1hbmRDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29tbWFuZHMuanMnXG5pbXBvcnQgeyB1c2VJc0luc2lkZU1vZGFsIH0gZnJvbSAnLi4vLi4vY29udGV4dC9tb2RhbENvbnRleHQuanMnXG5pbXBvcnQgeyBCb3gsIFRleHQsIHVzZVRoZW1lIH0gZnJvbSAnLi4vLi4vaW5rLmpzJ1xuaW1wb3J0IHsgdHlwZSBBcHBTdGF0ZSwgdXNlQXBwU3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZS9BcHBTdGF0ZS5qcydcbmltcG9ydCB7IGdldEN3ZCB9IGZyb20gJy4uLy4uL3V0aWxzL2N3ZC5qcydcbmltcG9ydCB7IGdldEN1cnJlbnRTZXNzaW9uVGl0bGUgfSBmcm9tICcuLi8uLi91dGlscy9zZXNzaW9uU3RvcmFnZS5qcydcbmltcG9ydCB7XG4gIGJ1aWxkQWNjb3VudFByb3BlcnRpZXMsXG4gIGJ1aWxkQVBJUHJvdmlkZXJQcm9wZXJ0aWVzLFxuICBidWlsZElERVByb3BlcnRpZXMsXG4gIGJ1aWxkSW5zdGFsbGF0aW9uRGlhZ25vc3RpY3MsXG4gIGJ1aWxkSW5zdGFsbGF0aW9uSGVhbHRoRGlhZ25vc3RpY3MsXG4gIGJ1aWxkTWNwUHJvcGVydGllcyxcbiAgYnVpbGRNZW1vcnlEaWFnbm9zdGljcyxcbiAgYnVpbGRTYW5kYm94UHJvcGVydGllcyxcbiAgYnVpbGRTZXR0aW5nU291cmNlc1Byb3BlcnRpZXMsXG4gIHR5cGUgRGlhZ25vc3RpYyxcbiAgZ2V0TW9kZWxEaXNwbGF5TGFiZWwsXG4gIHR5cGUgUHJvcGVydHksXG59IGZyb20gJy4uLy4uL3V0aWxzL3N0YXR1cy5qcydcbmltcG9ydCB0eXBlIHsgVGhlbWVOYW1lIH0gZnJvbSAnLi4vLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyBDb25maWd1cmFibGVTaG9ydGN1dEhpbnQgfSBmcm9tICcuLi9Db25maWd1cmFibGVTaG9ydGN1dEhpbnQuanMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbnRleHQ6IExvY2FsSlNYQ29tbWFuZENvbnRleHRcbiAgZGlhZ25vc3RpY3NQcm9taXNlOiBQcm9taXNlPERpYWdub3N0aWNbXT5cbn1cblxuZnVuY3Rpb24gYnVpbGRQcmltYXJ5U2VjdGlvbigpOiBQcm9wZXJ0eVtdIHtcbiAgY29uc3Qgc2Vzc2lvbklkID0gZ2V0U2Vzc2lvbklkKClcbiAgY29uc3QgY3VzdG9tVGl0bGUgPSBnZXRDdXJyZW50U2Vzc2lvblRpdGxlKHNlc3Npb25JZClcbiAgY29uc3QgbmFtZVZhbHVlID0gY3VzdG9tVGl0bGUgPz8gPFRleHQgZGltQ29sb3I+L3JlbmFtZSB0byBhZGQgYSBuYW1lPC9UZXh0PlxuXG4gIHJldHVybiBbXG4gICAgeyBsYWJlbDogJ1ZlcnNpb24nLCB2YWx1ZTogTUFDUk8uVkVSU0lPTiB9LFxuICAgIHsgbGFiZWw6ICdTZXNzaW9uIG5hbWUnLCB2YWx1ZTogbmFtZVZhbHVlIH0sXG4gICAgeyBsYWJlbDogJ1Nlc3Npb24gSUQnLCB2YWx1ZTogc2Vzc2lvbklkIH0sXG4gICAgeyBsYWJlbDogJ2N3ZCcsIHZhbHVlOiBnZXRDd2QoKSB9LFxuICAgIC4uLmJ1aWxkQWNjb3VudFByb3BlcnRpZXMoKSxcbiAgICAuLi5idWlsZEFQSVByb3ZpZGVyUHJvcGVydGllcygpLFxuICBdXG59XG5cbmZ1bmN0aW9uIGJ1aWxkU2Vjb25kYXJ5U2VjdGlvbih7XG4gIG1haW5Mb29wTW9kZWwsXG4gIG1jcCxcbiAgdGhlbWUsXG4gIGNvbnRleHQsXG59OiB7XG4gIG1haW5Mb29wTW9kZWw6IEFwcFN0YXRlWydtYWluTG9vcE1vZGVsJ11cbiAgbWNwOiBBcHBTdGF0ZVsnbWNwJ11cbiAgdGhlbWU6IFRoZW1lTmFtZVxuICBjb250ZXh0OiBMb2NhbEpTWENvbW1hbmRDb250ZXh0XG59KTogUHJvcGVydHlbXSB7XG4gIGNvbnN0IG1vZGVsTGFiZWwgPSBnZXRNb2RlbERpc3BsYXlMYWJlbChtYWluTG9vcE1vZGVsKVxuXG4gIHJldHVybiBbXG4gICAgeyBsYWJlbDogJ01vZGVsJywgdmFsdWU6IG1vZGVsTGFiZWwgfSxcbiAgICAuLi5idWlsZElERVByb3BlcnRpZXMoXG4gICAgICBtY3AuY2xpZW50cyxcbiAgICAgIGNvbnRleHQub3B0aW9ucy5pZGVJbnN0YWxsYXRpb25TdGF0dXMsXG4gICAgICB0aGVtZSxcbiAgICApLFxuICAgIC4uLmJ1aWxkTWNwUHJvcGVydGllcyhtY3AuY2xpZW50cywgdGhlbWUpLFxuICAgIC4uLmJ1aWxkU2FuZGJveFByb3BlcnRpZXMoKSxcbiAgICAuLi5idWlsZFNldHRpbmdTb3VyY2VzUHJvcGVydGllcygpLFxuICBdXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZERpYWdub3N0aWNzKCk6IFByb21pc2U8RGlhZ25vc3RpY1tdPiB7XG4gIHJldHVybiBbXG4gICAgLi4uKGF3YWl0IGJ1aWxkSW5zdGFsbGF0aW9uRGlhZ25vc3RpY3MoKSksXG4gICAgLi4uKGF3YWl0IGJ1aWxkSW5zdGFsbGF0aW9uSGVhbHRoRGlhZ25vc3RpY3MoKSksXG4gICAgLi4uKGF3YWl0IGJ1aWxkTWVtb3J5RGlhZ25vc3RpY3MoKSksXG4gIF1cbn1cblxuZnVuY3Rpb24gUHJvcGVydHlWYWx1ZSh7XG4gIHZhbHVlLFxufToge1xuICB2YWx1ZTogUHJvcGVydHlbJ3ZhbHVlJ11cbn0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJveCBmbGV4V3JhcD1cIndyYXBcIiBjb2x1bW5HYXA9ezF9IGZsZXhTaHJpbms9ezk5fT5cbiAgICAgICAge3ZhbHVlLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8VGV4dCBrZXk9e2l9PlxuICAgICAgICAgICAgICB7aXRlbX1cbiAgICAgICAgICAgICAge2kgPCB2YWx1ZS5sZW5ndGggLSAxID8gJywnIDogJyd9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgKVxuICAgICAgICB9KX1cbiAgICAgIDwvQm94PlxuICAgIClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIDxUZXh0Pnt2YWx1ZX08L1RleHQ+XG4gIH1cblxuICByZXR1cm4gdmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFN0YXR1cyh7XG4gIGNvbnRleHQsXG4gIGRpYWdub3N0aWNzUHJvbWlzZSxcbn06IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgbWFpbkxvb3BNb2RlbCA9IHVzZUFwcFN0YXRlKHMgPT4gcy5tYWluTG9vcE1vZGVsKVxuICBjb25zdCBtY3AgPSB1c2VBcHBTdGF0ZShzID0+IHMubWNwKVxuICBjb25zdCBbdGhlbWVdID0gdXNlVGhlbWUoKVxuXG4gIC8vIFNlY3Rpb25zIGFyZSBzeW5jaHJvbm91cyDigJQgY29tcHV0ZSBpbiByZW5kZXIgc28gdGhleSdyZSBuZXZlciBlbXB0eS5cbiAgLy8gZGlhZ25vc3RpY3NQcm9taXNlIGlzIGNyZWF0ZWQgb25jZSBpbiBTZXR0aW5ncy50c3ggc28gaXQgcmVzb2x2ZXMgb25jZVxuICAvLyBwZXIgcGFuZSBpbnZvY2F0aW9uIGluc3RlYWQgb2YgcmUtZmV0Y2hpbmcgb24gZXZlcnkgdGFiIHN3aXRjaCAoVGFiXG4gIC8vIHVubW91bnRzIGNoaWxkcmVuIHdoZW4gbm90IHNlbGVjdGVkLCB3aGljaCB3YXMgY2F1c2luZyB0aGUgZmxhc2gpLlxuICBjb25zdCBzZWN0aW9ucyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gW1xuICAgICAgYnVpbGRQcmltYXJ5U2VjdGlvbigpLFxuICAgICAgYnVpbGRTZWNvbmRhcnlTZWN0aW9uKHsgbWFpbkxvb3BNb2RlbCwgbWNwLCB0aGVtZSwgY29udGV4dCB9KSxcbiAgICBdLFxuICAgIFttYWluTG9vcE1vZGVsLCBtY3AsIHRoZW1lLCBjb250ZXh0XSxcbiAgKVxuXG4gIC8vIGZsZXhHcm93IHNvIHRoZSBcIkVzYyB0byBjYW5jZWxcIiBmb290ZXIgcGlucyB0byB0aGUgYm90dG9tIG9mIHRoZVxuICAvLyBNb2RhbCdzIGlubmVyIFNjcm9sbEJveCB3aGVuIGNvbnRlbnQgaXMgc2hvcnQuIFRoZSBTY3JvbGxCb3ggY29udGVudFxuICAvLyB3cmFwcGVyIGhhcyBmbGV4R3JvdzoxIChmaWxscyBhdCBsZWFzdCB0aGUgdmlld3BvcnQpLCBzbyB0aGlzIHN0cmV0Y2hlc1xuICAvLyB0byBtYXRjaC4gV2l0aG91dCBpdCwgc2hvcnQgU3RhdHVzIGNvbnRlbnQgZmxvYXRzIGF0IHRoZSB0b3AgYW5kIHRoZVxuICAvLyBmb290ZXIgc2l0cyBtaWQtbW9kYWwgd2l0aCAyLTMgdHJhaWxpbmcgYmxhbmsgcm93cyBiZWxvdy4gT3V0c2lkZSBhXG4gIC8vIE1vZGFsIChub24tZnVsbHNjcmVlbiksIGxlYXZlIGxheW91dCBhbG9uZSDigJQgbm8gU2Nyb2xsQm94IHRvIGZpbGwuXG4gIGNvbnN0IGdyb3cgPSB1c2VJc0luc2lkZU1vZGFsKCkgPyAxIDogdW5kZWZpbmVkXG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBmbGV4R3Jvdz17Z3Jvd30+XG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBnYXA9ezF9IGZsZXhHcm93PXtncm93fT5cbiAgICAgICAge3NlY3Rpb25zLm1hcChcbiAgICAgICAgICAocHJvcGVydGllcywgaSkgPT5cbiAgICAgICAgICAgIHByb3BlcnRpZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgIDxCb3gga2V5PXtpfSBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAge3Byb3BlcnRpZXMubWFwKCh7IGxhYmVsLCB2YWx1ZSB9LCBqKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8Qm94IGtleT17an0gZmxleERpcmVjdGlvbj1cInJvd1wiIGdhcD17MX0gZmxleFNocmluaz17MH0+XG4gICAgICAgICAgICAgICAgICAgIHtsYWJlbCAhPT0gdW5kZWZpbmVkICYmIDxUZXh0IGJvbGQ+e2xhYmVsfTo8L1RleHQ+fVxuICAgICAgICAgICAgICAgICAgICA8UHJvcGVydHlWYWx1ZSB2YWx1ZT17dmFsdWV9IC8+XG4gICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApLFxuICAgICAgICApfVxuXG4gICAgICAgIDxTdXNwZW5zZSBmYWxsYmFjaz17bnVsbH0+XG4gICAgICAgICAgPERpYWdub3N0aWNzIHByb21pc2U9e2RpYWdub3N0aWNzUHJvbWlzZX0gLz5cbiAgICAgICAgPC9TdXNwZW5zZT5cbiAgICAgIDwvQm94PlxuICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgIDxDb25maWd1cmFibGVTaG9ydGN1dEhpbnRcbiAgICAgICAgICBhY3Rpb249XCJjb25maXJtOm5vXCJcbiAgICAgICAgICBjb250ZXh0PVwiU2V0dGluZ3NcIlxuICAgICAgICAgIGZhbGxiYWNrPVwiRXNjXCJcbiAgICAgICAgICBkZXNjcmlwdGlvbj1cImNhbmNlbFwiXG4gICAgICAgIC8+XG4gICAgICA8L1RleHQ+XG4gICAgPC9Cb3g+XG4gIClcbn1cblxuZnVuY3Rpb24gRGlhZ25vc3RpY3Moe1xuICBwcm9taXNlLFxufToge1xuICBwcm9taXNlOiBQcm9taXNlPERpYWdub3N0aWNbXT5cbn0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBkaWFnbm9zdGljcyA9IHVzZShwcm9taXNlKVxuICBpZiAoZGlhZ25vc3RpY3MubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbFxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHBhZGRpbmdCb3R0b209ezF9PlxuICAgICAgPFRleHQgYm9sZD5TeXN0ZW0gRGlhZ25vc3RpY3M8L1RleHQ+XG4gICAgICB7ZGlhZ25vc3RpY3MubWFwKChkaWFnbm9zdGljLCBpKSA9PiAoXG4gICAgICAgIDxCb3gga2V5PXtpfSBmbGV4RGlyZWN0aW9uPVwicm93XCIgZ2FwPXsxfSBwYWRkaW5nWD17MX0+XG4gICAgICAgICAgPFRleHQgY29sb3I9XCJlcnJvclwiPntmaWd1cmVzLndhcm5pbmd9PC9UZXh0PlxuICAgICAgICAgIHt0eXBlb2YgZGlhZ25vc3RpYyA9PT0gJ3N0cmluZycgPyAoXG4gICAgICAgICAgICA8VGV4dCB3cmFwPVwid3JhcFwiPntkaWFnbm9zdGljfTwvVGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgZGlhZ25vc3RpY1xuICAgICAgICAgICl9XG4gICAgICAgIDwvQm94PlxuICAgICAgKSl9XG4gICAgPC9Cb3g+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU9BLE9BQU8sTUFBTSxTQUFTO0FBQzdCLE9BQU8sS0FBS0MsS0FBSyxNQUFNLE9BQU87QUFDOUIsU0FBU0MsUUFBUSxFQUFFQyxHQUFHLFFBQVEsT0FBTztBQUNyQyxTQUFTQyxZQUFZLFFBQVEsMEJBQTBCO0FBQ3ZELGNBQWNDLHNCQUFzQixRQUFRLG1CQUFtQjtBQUMv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