source dump of claude code
at main 401 lines 34 kB view raw
1import { c as _c } from "react/compiler-runtime"; 2import { basename } from 'path'; 3import { toString as qrToString } from 'qrcode'; 4import * as React from 'react'; 5import { useEffect, useState } from 'react'; 6import { getOriginalCwd } from '../bootstrap/state.js'; 7import { buildActiveFooterText, buildIdleFooterText, FAILED_FOOTER_TEXT, getBridgeStatus } from '../bridge/bridgeStatusUtil.js'; 8import { BRIDGE_FAILED_INDICATOR, BRIDGE_READY_INDICATOR } from '../constants/figures.js'; 9import { useRegisterOverlay } from '../context/overlayContext.js'; 10// eslint-disable-next-line custom-rules/prefer-use-keybindings -- raw 'd' key for disconnect, not a configurable keybinding action 11import { Box, Text, useInput } from '../ink.js'; 12import { useKeybindings } from '../keybindings/useKeybinding.js'; 13import { useAppState, useSetAppState } from '../state/AppState.js'; 14import { saveGlobalConfig } from '../utils/config.js'; 15import { getBranch } from '../utils/git.js'; 16import { Dialog } from './design-system/Dialog.js'; 17type Props = { 18 onDone: () => void; 19}; 20export function BridgeDialog(t0) { 21 const $ = _c(87); 22 const { 23 onDone 24 } = t0; 25 useRegisterOverlay("bridge-dialog"); 26 const connected = useAppState(_temp); 27 const sessionActive = useAppState(_temp2); 28 const reconnecting = useAppState(_temp3); 29 const connectUrl = useAppState(_temp4); 30 const sessionUrl = useAppState(_temp5); 31 const error = useAppState(_temp6); 32 const explicit = useAppState(_temp7); 33 const environmentId = useAppState(_temp8); 34 const sessionId = useAppState(_temp9); 35 const verbose = useAppState(_temp0); 36 const setAppState = useSetAppState(); 37 const [showQR, setShowQR] = useState(false); 38 const [qrText, setQrText] = useState(""); 39 const [branchName, setBranchName] = useState(""); 40 let t1; 41 if ($[0] === Symbol.for("react.memo_cache_sentinel")) { 42 t1 = basename(getOriginalCwd()); 43 $[0] = t1; 44 } else { 45 t1 = $[0]; 46 } 47 const repoName = t1; 48 let t2; 49 let t3; 50 if ($[1] === Symbol.for("react.memo_cache_sentinel")) { 51 t2 = () => { 52 getBranch().then(setBranchName).catch(_temp1); 53 }; 54 t3 = []; 55 $[1] = t2; 56 $[2] = t3; 57 } else { 58 t2 = $[1]; 59 t3 = $[2]; 60 } 61 useEffect(t2, t3); 62 const displayUrl = sessionActive ? sessionUrl : connectUrl; 63 let t4; 64 let t5; 65 if ($[3] !== displayUrl || $[4] !== showQR) { 66 t4 = () => { 67 if (!showQR || !displayUrl) { 68 setQrText(""); 69 return; 70 } 71 qrToString(displayUrl, { 72 type: "utf8", 73 errorCorrectionLevel: "L", 74 small: true 75 }).then(setQrText).catch(() => setQrText("")); 76 }; 77 t5 = [showQR, displayUrl]; 78 $[3] = displayUrl; 79 $[4] = showQR; 80 $[5] = t4; 81 $[6] = t5; 82 } else { 83 t4 = $[5]; 84 t5 = $[6]; 85 } 86 useEffect(t4, t5); 87 let t6; 88 if ($[7] === Symbol.for("react.memo_cache_sentinel")) { 89 t6 = () => { 90 setShowQR(_temp10); 91 }; 92 $[7] = t6; 93 } else { 94 t6 = $[7]; 95 } 96 let t7; 97 if ($[8] !== onDone) { 98 t7 = { 99 "confirm:yes": onDone, 100 "confirm:toggle": t6 101 }; 102 $[8] = onDone; 103 $[9] = t7; 104 } else { 105 t7 = $[9]; 106 } 107 let t8; 108 if ($[10] === Symbol.for("react.memo_cache_sentinel")) { 109 t8 = { 110 context: "Confirmation" 111 }; 112 $[10] = t8; 113 } else { 114 t8 = $[10]; 115 } 116 useKeybindings(t7, t8); 117 let t9; 118 if ($[11] !== explicit || $[12] !== onDone || $[13] !== setAppState) { 119 t9 = input => { 120 if (input === "d") { 121 if (explicit) { 122 saveGlobalConfig(_temp11); 123 } 124 setAppState(_temp12); 125 onDone(); 126 } 127 }; 128 $[11] = explicit; 129 $[12] = onDone; 130 $[13] = setAppState; 131 $[14] = t9; 132 } else { 133 t9 = $[14]; 134 } 135 useInput(t9); 136 let t10; 137 if ($[15] !== connected || $[16] !== error || $[17] !== reconnecting || $[18] !== sessionActive) { 138 t10 = getBridgeStatus({ 139 error, 140 connected, 141 sessionActive, 142 reconnecting 143 }); 144 $[15] = connected; 145 $[16] = error; 146 $[17] = reconnecting; 147 $[18] = sessionActive; 148 $[19] = t10; 149 } else { 150 t10 = $[19]; 151 } 152 const { 153 label: statusLabel, 154 color: statusColor 155 } = t10; 156 const indicator = error ? BRIDGE_FAILED_INDICATOR : BRIDGE_READY_INDICATOR; 157 let T0; 158 let T1; 159 let footerText; 160 let t11; 161 let t12; 162 let t13; 163 let t14; 164 let t15; 165 let t16; 166 let t17; 167 if ($[20] !== branchName || $[21] !== displayUrl || $[22] !== environmentId || $[23] !== error || $[24] !== indicator || $[25] !== onDone || $[26] !== qrText || $[27] !== sessionActive || $[28] !== sessionId || $[29] !== showQR || $[30] !== statusColor || $[31] !== statusLabel || $[32] !== verbose) { 168 const qrLines = qrText ? qrText.split("\n").filter(_temp13) : []; 169 let contextParts; 170 if ($[43] !== branchName) { 171 contextParts = []; 172 if (repoName) { 173 contextParts.push(repoName); 174 } 175 if (branchName) { 176 contextParts.push(branchName); 177 } 178 $[43] = branchName; 179 $[44] = contextParts; 180 } else { 181 contextParts = $[44]; 182 } 183 const contextSuffix = contextParts.length > 0 ? " \xB7 " + contextParts.join(" \xB7 ") : ""; 184 let t18; 185 if ($[45] !== displayUrl || $[46] !== error || $[47] !== sessionActive) { 186 t18 = error ? FAILED_FOOTER_TEXT : displayUrl ? sessionActive ? buildActiveFooterText(displayUrl) : buildIdleFooterText(displayUrl) : undefined; 187 $[45] = displayUrl; 188 $[46] = error; 189 $[47] = sessionActive; 190 $[48] = t18; 191 } else { 192 t18 = $[48]; 193 } 194 footerText = t18; 195 T1 = Dialog; 196 t15 = "Remote Control"; 197 t16 = onDone; 198 t17 = true; 199 T0 = Box; 200 t11 = "column"; 201 t12 = 1; 202 let t19; 203 if ($[49] !== indicator || $[50] !== statusColor || $[51] !== statusLabel) { 204 t19 = <Text color={statusColor}>{indicator} {statusLabel}</Text>; 205 $[49] = indicator; 206 $[50] = statusColor; 207 $[51] = statusLabel; 208 $[52] = t19; 209 } else { 210 t19 = $[52]; 211 } 212 let t20; 213 if ($[53] !== contextSuffix) { 214 t20 = <Text dimColor={true}>{contextSuffix}</Text>; 215 $[53] = contextSuffix; 216 $[54] = t20; 217 } else { 218 t20 = $[54]; 219 } 220 let t21; 221 if ($[55] !== t19 || $[56] !== t20) { 222 t21 = <Text>{t19}{t20}</Text>; 223 $[55] = t19; 224 $[56] = t20; 225 $[57] = t21; 226 } else { 227 t21 = $[57]; 228 } 229 let t22; 230 if ($[58] !== error) { 231 t22 = error && <Text color="error">{error}</Text>; 232 $[58] = error; 233 $[59] = t22; 234 } else { 235 t22 = $[59]; 236 } 237 let t23; 238 if ($[60] !== environmentId || $[61] !== verbose) { 239 t23 = verbose && environmentId && <Text dimColor={true}>Environment: {environmentId}</Text>; 240 $[60] = environmentId; 241 $[61] = verbose; 242 $[62] = t23; 243 } else { 244 t23 = $[62]; 245 } 246 let t24; 247 if ($[63] !== sessionId || $[64] !== verbose) { 248 t24 = verbose && sessionId && <Text dimColor={true}>Session: {sessionId}</Text>; 249 $[63] = sessionId; 250 $[64] = verbose; 251 $[65] = t24; 252 } else { 253 t24 = $[65]; 254 } 255 if ($[66] !== t21 || $[67] !== t22 || $[68] !== t23 || $[69] !== t24) { 256 t13 = <Box flexDirection="column">{t21}{t22}{t23}{t24}</Box>; 257 $[66] = t21; 258 $[67] = t22; 259 $[68] = t23; 260 $[69] = t24; 261 $[70] = t13; 262 } else { 263 t13 = $[70]; 264 } 265 t14 = showQR && qrLines.length > 0 && <Box flexDirection="column">{qrLines.map(_temp14)}</Box>; 266 $[20] = branchName; 267 $[21] = displayUrl; 268 $[22] = environmentId; 269 $[23] = error; 270 $[24] = indicator; 271 $[25] = onDone; 272 $[26] = qrText; 273 $[27] = sessionActive; 274 $[28] = sessionId; 275 $[29] = showQR; 276 $[30] = statusColor; 277 $[31] = statusLabel; 278 $[32] = verbose; 279 $[33] = T0; 280 $[34] = T1; 281 $[35] = footerText; 282 $[36] = t11; 283 $[37] = t12; 284 $[38] = t13; 285 $[39] = t14; 286 $[40] = t15; 287 $[41] = t16; 288 $[42] = t17; 289 } else { 290 T0 = $[33]; 291 T1 = $[34]; 292 footerText = $[35]; 293 t11 = $[36]; 294 t12 = $[37]; 295 t13 = $[38]; 296 t14 = $[39]; 297 t15 = $[40]; 298 t16 = $[41]; 299 t17 = $[42]; 300 } 301 let t18; 302 if ($[71] !== footerText) { 303 t18 = footerText && <Text dimColor={true}>{footerText}</Text>; 304 $[71] = footerText; 305 $[72] = t18; 306 } else { 307 t18 = $[72]; 308 } 309 let t19; 310 if ($[73] === Symbol.for("react.memo_cache_sentinel")) { 311 t19 = <Text dimColor={true}>d to disconnect · space for QR code · Enter/Esc to close</Text>; 312 $[73] = t19; 313 } else { 314 t19 = $[73]; 315 } 316 let t20; 317 if ($[74] !== T0 || $[75] !== t11 || $[76] !== t12 || $[77] !== t13 || $[78] !== t14 || $[79] !== t18) { 318 t20 = <T0 flexDirection={t11} gap={t12}>{t13}{t14}{t18}{t19}</T0>; 319 $[74] = T0; 320 $[75] = t11; 321 $[76] = t12; 322 $[77] = t13; 323 $[78] = t14; 324 $[79] = t18; 325 $[80] = t20; 326 } else { 327 t20 = $[80]; 328 } 329 let t21; 330 if ($[81] !== T1 || $[82] !== t15 || $[83] !== t16 || $[84] !== t17 || $[85] !== t20) { 331 t21 = <T1 title={t15} onCancel={t16} hideInputGuide={t17}>{t20}</T1>; 332 $[81] = T1; 333 $[82] = t15; 334 $[83] = t16; 335 $[84] = t17; 336 $[85] = t20; 337 $[86] = t21; 338 } else { 339 t21 = $[86]; 340 } 341 return t21; 342} 343function _temp14(line, i) { 344 return <Text key={i}>{line}</Text>; 345} 346function _temp13(l) { 347 return l.length > 0; 348} 349function _temp12(prev_0) { 350 if (!prev_0.replBridgeEnabled) { 351 return prev_0; 352 } 353 return { 354 ...prev_0, 355 replBridgeEnabled: false 356 }; 357} 358function _temp11(current) { 359 if (current.remoteControlAtStartup === false) { 360 return current; 361 } 362 return { 363 ...current, 364 remoteControlAtStartup: false 365 }; 366} 367function _temp10(prev) { 368 return !prev; 369} 370function _temp1() {} 371function _temp0(s_8) { 372 return s_8.verbose; 373} 374function _temp9(s_7) { 375 return s_7.replBridgeSessionId; 376} 377function _temp8(s_6) { 378 return s_6.replBridgeEnvironmentId; 379} 380function _temp7(s_5) { 381 return s_5.replBridgeExplicit; 382} 383function _temp6(s_4) { 384 return s_4.replBridgeError; 385} 386function _temp5(s_3) { 387 return s_3.replBridgeSessionUrl; 388} 389function _temp4(s_2) { 390 return s_2.replBridgeConnectUrl; 391} 392function _temp3(s_1) { 393 return s_1.replBridgeReconnecting; 394} 395function _temp2(s_0) { 396 return s_0.replBridgeSessionActive; 397} 398function _temp(s) { 399 return s.replBridgeConnected; 400} 401//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYXNlbmFtZSIsInRvU3RyaW5nIiwicXJUb1N0cmluZyIsIlJlYWN0IiwidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJnZXRPcmlnaW5hbEN3ZCIsImJ1aWxkQWN0aXZlRm9vdGVyVGV4dCIsImJ1aWxkSWRsZUZvb3RlclRleHQiLCJGQUlMRURfRk9PVEVSX1RFWFQiLCJnZXRCcmlkZ2VTdGF0dXMiLCJCUklER0VfRkFJTEVEX0lORElDQVRPUiIsIkJSSURHRV9SRUFEWV9JTkRJQ0FUT1IiLCJ1c2VSZWdpc3Rlck92ZXJsYXkiLCJCb3giLCJUZXh0IiwidXNlSW5wdXQiLCJ1c2VLZXliaW5kaW5ncyIsInVzZUFwcFN0YXRlIiwidXNlU2V0QXBwU3RhdGUiLCJzYXZlR2xvYmFsQ29uZmlnIiwiZ2V0QnJhbmNoIiwiRGlhbG9nIiwiUHJvcHMiLCJvbkRvbmUiLCJCcmlkZ2VEaWFsb2ciLCJ0MCIsIiQiLCJfYyIsImNvbm5lY3RlZCIsIl90ZW1wIiwic2Vzc2lvbkFjdGl2ZSIsIl90ZW1wMiIsInJlY29ubmVjdGluZyIsIl90ZW1wMyIsImNvbm5lY3RVcmwiLCJfdGVtcDQiLCJzZXNzaW9uVXJsIiwiX3RlbXA1IiwiZXJyb3IiLCJfdGVtcDYiLCJleHBsaWNpdCIsIl90ZW1wNyIsImVudmlyb25tZW50SWQiLCJfdGVtcDgiLCJzZXNzaW9uSWQiLCJfdGVtcDkiLCJ2ZXJib3NlIiwiX3RlbXAwIiwic2V0QXBwU3RhdGUiLCJzaG93UVIiLCJzZXRTaG93UVIiLCJxclRleHQiLCJzZXRRclRleHQiLCJicmFuY2hOYW1lIiwic2V0QnJhbmNoTmFtZSIsInQxIiwiU3ltYm9sIiwiZm9yIiwicmVwb05hbWUiLCJ0MiIsInQzIiwidGhlbiIsImNhdGNoIiwiX3RlbXAxIiwiZGlzcGxheVVybCIsInQ0IiwidDUiLCJ0eXBlIiwiZXJyb3JDb3JyZWN0aW9uTGV2ZWwiLCJzbWFsbCIsInQ2IiwiX3RlbXAxMCIsInQ3IiwidDgiLCJjb250ZXh0IiwidDkiLCJpbnB1dCIsIl90ZW1wMTEiLCJfdGVtcDEyIiwidDEwIiwibGFiZWwiLCJzdGF0dXNMYWJlbCIsImNvbG9yIiwic3RhdHVzQ29sb3IiLCJpbmRpY2F0b3IiLCJUMCIsIlQxIiwiZm9vdGVyVGV4dCIsInQxMSIsInQxMiIsInQxMyIsInQxNCIsInQxNSIsInQxNiIsInQxNyIsInFyTGluZXMiLCJzcGxpdCIsImZpbHRlciIsIl90ZW1wMTMiLCJjb250ZXh0UGFydHMiLCJwdXNoIiwiY29udGV4dFN1ZmZpeCIsImxlbmd0aCIsImpvaW4iLCJ0MTgiLCJ1bmRlZmluZWQiLCJ0MTkiLCJ0MjAiLCJ0MjEiLCJ0MjIiLCJ0MjMiLCJ0MjQiLCJtYXAiLCJfdGVtcDE0IiwibGluZSIsImkiLCJsIiwicHJldl8wIiwicHJldiIsInJlcGxCcmlkZ2VFbmFibGVkIiwiY3VycmVudCIsInJlbW90ZUNvbnRyb2xBdFN0YXJ0dXAiLCJzXzgiLCJzIiwic183IiwicmVwbEJyaWRnZVNlc3Npb25JZCIsInNfNiIsInJlcGxCcmlkZ2VFbnZpcm9ubWVudElkIiwic181IiwicmVwbEJyaWRnZUV4cGxpY2l0Iiwic180IiwicmVwbEJyaWRnZUVycm9yIiwic18zIiwicmVwbEJyaWRnZVNlc3Npb25VcmwiLCJzXzIiLCJyZXBsQnJpZGdlQ29ubmVjdFVybCIsInNfMSIsInJlcGxCcmlkZ2VSZWNvbm5lY3RpbmciLCJzXzAiLCJyZXBsQnJpZGdlU2Vzc2lvbkFjdGl2ZSIsInJlcGxCcmlkZ2VDb25uZWN0ZWQiXSwic291cmNlcyI6WyJCcmlkZ2VEaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSAncGF0aCdcbmltcG9ydCB7IHRvU3RyaW5nIGFzIHFyVG9TdHJpbmcgfSBmcm9tICdxcmNvZGUnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdldE9yaWdpbmFsQ3dkIH0gZnJvbSAnLi4vYm9vdHN0cmFwL3N0YXRlLmpzJ1xuaW1wb3J0IHtcbiAgYnVpbGRBY3RpdmVGb290ZXJUZXh0LFxuICBidWlsZElkbGVGb290ZXJUZXh0LFxuICBGQUlMRURfRk9PVEVSX1RFWFQsXG4gIGdldEJyaWRnZVN0YXR1cyxcbn0gZnJvbSAnLi4vYnJpZGdlL2JyaWRnZVN0YXR1c1V0aWwuanMnXG5pbXBvcnQge1xuICBCUklER0VfRkFJTEVEX0lORElDQVRPUixcbiAgQlJJREdFX1JFQURZX0lORElDQVRPUixcbn0gZnJvbSAnLi4vY29uc3RhbnRzL2ZpZ3VyZXMuanMnXG5pbXBvcnQgeyB1c2VSZWdpc3Rlck92ZXJsYXkgfSBmcm9tICcuLi9jb250ZXh0L292ZXJsYXlDb250ZXh0LmpzJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGN1c3RvbS1ydWxlcy9wcmVmZXItdXNlLWtleWJpbmRpbmdzIC0tIHJhdyAnZCcga2V5IGZvciBkaXNjb25uZWN0LCBub3QgYSBjb25maWd1cmFibGUga2V5YmluZGluZyBhY3Rpb25cbmltcG9ydCB7IEJveCwgVGV4dCwgdXNlSW5wdXQgfSBmcm9tICcuLi9pbmsuanMnXG5pbXBvcnQgeyB1c2VLZXliaW5kaW5ncyB9IGZyb20gJy4uL2tleWJpbmRpbmdzL3VzZUtleWJpbmRpbmcuanMnXG5pbXBvcnQgeyB1c2VBcHBTdGF0ZSwgdXNlU2V0QXBwU3RhdGUgfSBmcm9tICcuLi9zdGF0ZS9BcHBTdGF0ZS5qcydcbmltcG9ydCB7IHNhdmVHbG9iYWxDb25maWcgfSBmcm9tICcuLi91dGlscy9jb25maWcuanMnXG5pbXBvcnQgeyBnZXRCcmFuY2ggfSBmcm9tICcuLi91dGlscy9naXQuanMnXG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tICcuL2Rlc2lnbi1zeXN0ZW0vRGlhbG9nLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBvbkRvbmU6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEJyaWRnZURpYWxvZyh7IG9uRG9uZSB9OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIHVzZVJlZ2lzdGVyT3ZlcmxheSgnYnJpZGdlLWRpYWxvZycpXG5cbiAgY29uc3QgY29ubmVjdGVkID0gdXNlQXBwU3RhdGUocyA9PiBzLnJlcGxCcmlkZ2VDb25uZWN0ZWQpXG4gIGNvbnN0IHNlc3Npb25BY3RpdmUgPSB1c2VBcHBTdGF0ZShzID0+IHMucmVwbEJyaWRnZVNlc3Npb25BY3RpdmUpXG4gIGNvbnN0IHJlY29ubmVjdGluZyA9IHVzZUFwcFN0YXRlKHMgPT4gcy5yZXBsQnJpZGdlUmVjb25uZWN0aW5nKVxuICBjb25zdCBjb25uZWN0VXJsID0gdXNlQXBwU3RhdGUocyA9PiBzLnJlcGxCcmlkZ2VDb25uZWN0VXJsKVxuICBjb25zdCBzZXNzaW9uVXJsID0gdXNlQXBwU3RhdGUocyA9PiBzLnJlcGxCcmlkZ2VTZXNzaW9uVXJsKVxuICBjb25zdCBlcnJvciA9IHVzZUFwcFN0YXRlKHMgPT4gcy5yZXBsQnJpZGdlRXJyb3IpXG4gIGNvbnN0IGV4cGxpY2l0ID0gdXNlQXBwU3RhdGUocyA9PiBzLnJlcGxCcmlkZ2VFeHBsaWNpdClcbiAgY29uc3QgZW52aXJvbm1lbnRJZCA9IHVzZUFwcFN0YXRlKHMgPT4gcy5yZXBsQnJpZGdlRW52aXJvbm1lbnRJZClcbiAgY29uc3Qgc2Vzc2lvbklkID0gdXNlQXBwU3RhdGUocyA9PiBzLnJlcGxCcmlkZ2VTZXNzaW9uSWQpXG4gIGNvbnN0IHZlcmJvc2UgPSB1c2VBcHBTdGF0ZShzID0+IHMudmVyYm9zZSlcbiAgY29uc3Qgc2V0QXBwU3RhdGUgPSB1c2VTZXRBcHBTdGF0ZSgpXG5cbiAgY29uc3QgW3Nob3dRUiwgc2V0U2hvd1FSXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbcXJUZXh0LCBzZXRRclRleHRdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IFticmFuY2hOYW1lLCBzZXRCcmFuY2hOYW1lXSA9IHVzZVN0YXRlKCcnKVxuXG4gIGNvbnN0IHJlcG9OYW1lID0gYmFzZW5hbWUoZ2V0T3JpZ2luYWxDd2QoKSlcblxuICAvLyBGZXRjaCBicmFuY2ggbmFtZSBvbiBtb3VudFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGdldEJyYW5jaCgpXG4gICAgICAudGhlbihzZXRCcmFuY2hOYW1lKVxuICAgICAgLmNhdGNoKCgpID0+IHt9KVxuICB9LCBbXSlcblxuICAvLyBUaGUgVVJMIHRvIGRpc3BsYXkvUVI6IHNlc3Npb24gVVJMIHdoZW4gY29ubmVjdGVkLCBjb25uZWN0IFVSTCB3aGVuIHJlYWR5XG4gIGNvbnN0IGRpc3BsYXlVcmwgPSBzZXNzaW9uQWN0aXZlID8gc2Vzc2lvblVybCA6IGNvbm5lY3RVcmxcblxuICAvLyBHZW5lcmF0ZSBRUiBjb2RlIHdoZW4gVVJMIGNoYW5nZXMgb3IgUVIgaXMgdG9nZ2xlZCBvblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc2hvd1FSIHx8ICFkaXNwbGF5VXJsKSB7XG4gICAgICBzZXRRclRleHQoJycpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgcXJUb1N0cmluZyhkaXNwbGF5VXJsLCB7XG4gICAgICB0eXBlOiAndXRmOCcsXG4gICAgICBlcnJvckNvcnJlY3Rpb25MZXZlbDogJ0wnLFxuICAgICAgc21hbGw6IHRydWUsXG4gICAgfSlcbiAgICAgIC50aGVuKHNldFFyVGV4dClcbiAgICAgIC5jYXRjaCgoKSA9PiBzZXRRclRleHQoJycpKVxuICB9LCBbc2hvd1FSLCBkaXNwbGF5VXJsXSlcblxuICB1c2VLZXliaW5kaW5ncyhcbiAgICB7XG4gICAgICAnY29uZmlybTp5ZXMnOiBvbkRvbmUsXG4gICAgICAnY29uZmlybTp0b2dnbGUnOiAoKSA9PiB7XG4gICAgICAgIHNldFNob3dRUihwcmV2ID0+ICFwcmV2KVxuICAgICAgfSxcbiAgICB9LFxuICAgIHsgY29udGV4dDogJ0NvbmZpcm1hdGlvbicgfSxcbiAgKVxuXG4gIHVzZUlucHV0KGlucHV0ID0+IHtcbiAgICBpZiAoaW5wdXQgPT09ICdkJykge1xuICAgICAgLy8gUGVyc2lzdCBvcHQtb3V0IG9ubHkgZm9yIENMSS1mbGFnL2NvbW1hbmQtYWN0aXZhdGVkIGJyaWRnZS5cbiAgICAgIC8vIENvbmZpZy1kcml2ZW4gYW5kIEdCLWF1dG8tY29ubmVjdCB1c2VycyBnZXQgc2Vzc2lvbi1vbmx5IGRpc2Nvbm5lY3RcbiAgICAgIC8vIOKAlCB3cml0aW5nIGZhbHNlIHdvdWxkIHNpbGVudGx5IHVuZG8gYSBTZXR0aW5ncyBjaG9pY2Ugb3Igb3B0IGFcbiAgICAgIC8vIEdCLXJvbGxvdXQgdXNlciBvdXQgcGVybWFuZW50bHkuXG4gICAgICBpZiAoZXhwbGljaXQpIHtcbiAgICAgICAgc2F2ZUdsb2JhbENvbmZpZyhjdXJyZW50ID0+IHtcbiAgICAgICAgICBpZiAoY3VycmVudC5yZW1vdGVDb250cm9sQXRTdGFydHVwID09PSBmYWxzZSkgcmV0dXJuIGN1cnJlbnRcbiAgICAgICAgICByZXR1cm4geyAuLi5jdXJyZW50LCByZW1vdGVDb250cm9sQXRTdGFydHVwOiBmYWxzZSB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBzZXRBcHBTdGF0ZShwcmV2ID0+IHtcbiAgICAgICAgaWYgKCFwcmV2LnJlcGxCcmlkZ2VFbmFibGVkKSByZXR1cm4gcHJldlxuICAgICAgICByZXR1cm4geyAuLi5wcmV2LCByZXBsQnJpZGdlRW5hYmxlZDogZmFsc2UgfVxuICAgICAgfSlcbiAgICAgIG9uRG9uZSgpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IHsgbGFiZWw6IHN0YXR1c0xhYmVsLCBjb2xvcjogc3RhdHVzQ29sb3IgfSA9IGdldEJyaWRnZVN0YXR1cyh7XG4gICAgZXJyb3IsXG4gICAgY29ubmVjdGVkLFxuICAgIHNlc3Npb25BY3RpdmUsXG4gICAgcmVjb25uZWN0aW5nLFxuICB9KVxuICBjb25zdCBpbmRpY2F0b3IgPSBlcnJvciA/IEJSSURHRV9GQUlMRURfSU5ESUNBVE9SIDogQlJJREdFX1JFQURZX0lORElDQVRPUlxuICBjb25zdCBxckxpbmVzID0gcXJUZXh0ID8gcXJUZXh0LnNwbGl0KCdcXG4nKS5maWx0ZXIobCA9PiBsLmxlbmd0aCA+IDApIDogW11cblxuICAvLyBCdWlsZCBzdWZmaXggd2l0aCByZXBvIGFuZCBicmFuY2ggKG1hdGNoZXMgc3RhbmRhbG9uZSBicmlkZ2UgZm9ybWF0KVxuICBjb25zdCBjb250ZXh0UGFydHM6IHN0cmluZ1tdID0gW11cbiAgaWYgKHJlcG9OYW1lKSBjb250ZXh0UGFydHMucHVzaChyZXBvTmFtZSlcbiAgaWYgKGJyYW5jaE5hbWUpIGNvbnRleHRQYXJ0cy5wdXNoKGJyYW5jaE5hbWUpXG4gIGNvbnN0IGNvbnRleHRTdWZmaXggPVxuICAgIGNvbnRleHRQYXJ0cy5sZW5ndGggPiAwID8gJyBcXHUwMGI3ICcgKyBjb250ZXh0UGFydHMuam9pbignIFxcdTAwYjcgJykgOiAnJ1xuXG4gIC8vIEZvb3RlciB0ZXh0IG1hdGNoZXMgc3RhbmRhbG9uZSBicmlkZ2VcbiAgY29uc3QgZm9vdGVyVGV4dCA9IGVycm9yXG4gICAgPyBGQUlMRURfRk9PVEVSX1RFWFRcbiAgICA6IGRpc3BsYXlVcmxcbiAgICAgID8gc2Vzc2lvbkFjdGl2ZVxuICAgICAgICA/IGJ1aWxkQWN0aXZlRm9vdGVyVGV4dChkaXNwbGF5VXJsKVxuICAgICAgICA6IGJ1aWxkSWRsZUZvb3RlclRleHQoZGlzcGxheVVybClcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nIHRpdGxlPVwiUmVtb3RlIENvbnRyb2xcIiBvbkNhbmNlbD17b25Eb25lfSBoaWRlSW5wdXRHdWlkZT5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIGdhcD17MX0+XG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9e3N0YXR1c0NvbG9yfT5cbiAgICAgICAgICAgICAge2luZGljYXRvcn0ge3N0YXR1c0xhYmVsfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+e2NvbnRleHRTdWZmaXh9PC9UZXh0PlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICB7ZXJyb3IgJiYgPFRleHQgY29sb3I9XCJlcnJvclwiPntlcnJvcn08L1RleHQ+fVxuICAgICAgICAgIHt2ZXJib3NlICYmIGVudmlyb25tZW50SWQgJiYgKFxuICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+RW52aXJvbm1lbnQ6IHtlbnZpcm9ubWVudElkfTwvVGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHt2ZXJib3NlICYmIHNlc3Npb25JZCAmJiA8VGV4dCBkaW1Db2xvcj5TZXNzaW9uOiB7c2Vzc2lvbklkfTwvVGV4dD59XG4gICAgICAgIDwvQm94PlxuICAgICAgICB7c2hvd1FSICYmIHFyTGluZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICB7cXJMaW5lcy5tYXAoKGxpbmUsIGkpID0+IChcbiAgICAgICAgICAgICAgPFRleHQga2V5PXtpfT57bGluZX08L1RleHQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgKX1cbiAgICAgICAge2Zvb3RlclRleHQgJiYgPFRleHQgZGltQ29sb3I+e2Zvb3RlclRleHR9PC9UZXh0Pn1cbiAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAgZCB0byBkaXNjb25uZWN0IMK3IHNwYWNlIGZvciBRUiBjb2RlIMK3IEVudGVyL0VzYyB0byBjbG9zZVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L0JveD5cbiAgICA8L0RpYWxvZz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBU0EsUUFBUSxRQUFRLE1BQU07QUFDL0IsU0FBU0MsUUFBUSxJQUFJQyxVQUFVLFFBQVEsUUFBUTtBQUMvQyxPQUFPLEtBQUtDLEtBQUssTUFBTSxPQUFPO0FBQzlCLFNBQVNDLFNBQVMsRUFBRUMsUUFBUSxRQUFRLE9B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