1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/components/game/GameControls.tsx");import __vite__cjsImport0_react_jsxDevRuntime from "/@fs/home/runner/workspace/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=50bf458b"; const Fragment = __vite__cjsImport0_react_jsxDevRuntime["Fragment"]; const jsxDEV = __vite__cjsImport0_react_jsxDevRuntime["jsxDEV"]; 2import RefreshRuntime from "/@react-refresh"; 3const inWebWorker = typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope; 4let prevRefreshReg; 5let prevRefreshSig; 6if (import.meta.hot && !inWebWorker) { 7 if (!window.__vite_plugin_react_preamble_installed__) { 8 throw new Error("@vitejs/plugin-react can't detect preamble. Something is wrong. See https://github.com/vitejs/vite-plugin-react/pull/11#discussion_r430879201"); 9 } 10 prevRefreshReg = window.$RefreshReg$; 11 prevRefreshSig = window.$RefreshSig$; 12 window.$RefreshReg$ = (type, id) => { 13 RefreshRuntime.register(type, "/home/runner/workspace/client/src/components/game/GameControls.tsx " + id); 14 }; 15 window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform; 16} 17var _s = $RefreshSig$(); 18import __vite__cjsImport3_react from "/@fs/home/runner/workspace/node_modules/.vite/deps/react.js?v=50bf458b"; const useEffect = __vite__cjsImport3_react["useEffect"]; const useState = __vite__cjsImport3_react["useState"]; 19import { useKeyboardControls } from "/@fs/home/runner/workspace/node_modules/.vite/deps/@react-three_drei.js?v=50bf458b"; 20import { useRunner } from "/src/lib/stores/useRunner.tsx"; 21export function GameControls() { 22 _s(); 23 const { jump, moveLeft, moveRight, gamePhase } = useRunner(); 24 const [showMobileControls, setShowMobileControls] = useState(false); 25 const jumpPressed = useKeyboardControls((state) => state.jump); 26 const leftPressed = useKeyboardControls((state) => state.left); 27 const rightPressed = useKeyboardControls((state) => state.right); 28 useEffect(() => { 29 const checkIfMobile = () => { 30 const isTouchDevice = "ontouchstart" in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0; 31 const isMobileSize = window.innerWidth <= 1024; 32 console.log("Touch device check:", { 33 isTouchDevice, 34 isMobileSize, 35 width: window.innerWidth, 36 userAgent: navigator.userAgent 37 }); 38 setShowMobileControls(isTouchDevice || isMobileSize); 39 }; 40 checkIfMobile(); 41 window.addEventListener("resize", checkIfMobile); 42 setShowMobileControls(true); 43 return () => { 44 window.removeEventListener("resize", checkIfMobile); 45 }; 46 }, []); 47 useEffect(() => { 48 if (jumpPressed && gamePhase === "playing") { 49 jump(); 50 } 51 }, [jumpPressed, jump, gamePhase]); 52 useEffect(() => { 53 if (leftPressed && gamePhase === "playing") { 54 moveLeft(); 55 console.log("Left key pressed - moving left"); 56 } 57 }, [leftPressed, moveLeft, gamePhase]); 58 useEffect(() => { 59 if (rightPressed && gamePhase === "playing") { 60 moveRight(); 61 console.log("Right key pressed - moving right"); 62 } 63 }, [rightPressed, moveRight, gamePhase]); 64 const handleJump = () => { 65 if (gamePhase === "ready") { 66 jump(); 67 console.log("Game started from jump"); 68 return; 69 } 70 if (gamePhase === "playing") { 71 jump(); 72 console.log("Jump executed, game phase:", gamePhase); 73 } 74 }; 75 const handleMoveLeft = () => { 76 if (gamePhase !== "playing") { 77 console.log("Cannot move left, game not playing. Phase:", gamePhase); 78 return; 79 } 80 moveLeft(); 81 console.log("Move left executed, game phase:", gamePhase); 82 }; 83 const handleMoveRight = () => { 84 if (gamePhase !== "playing") { 85 console.log("Cannot move right, game not playing. Phase:", gamePhase); 86 return; 87 } 88 moveRight(); 89 console.log("Move right executed, game phase:", gamePhase); 90 }; 91 const buttonStyle = { 92 width: "90px", 93 // Increased size 94 height: "90px", 95 // Increased size 96 borderRadius: "50%", 97 display: "flex", 98 justifyContent: "center", 99 alignItems: "center", 100 fontSize: "36px", 101 // Larger font size 102 fontWeight: "bold", 103 backgroundColor: "rgba(255, 255, 255, 0.5)", 104 // More opaque background 105 backdropFilter: "blur(10px)", 106 border: "3px solid rgba(255, 255, 255, 0.8)", 107 // More visible border 108 color: "white", 109 boxShadow: "0 6px 12px rgba(0, 0, 0, 0.4)", 110 // More pronounced shadow 111 userSelect: "none", 112 // Type assertion to fix the error 113 touchAction: "manipulation", 114 WebkitTapHighlightColor: "transparent" 115 }; 116 return /* @__PURE__ */ jsxDEV(Fragment, { children: showMobileControls && /* @__P
116URE__ */ jsxDEV(Fragment, { children: gamePhase === "playing" && /* @__PURE__ */ jsxDEV("div", { className: "fixed bottom-10 inset-x-0 z-50 flex justify-between px-4 pointer-events-none", children: [ 117 /* @__PURE__ */ jsxDEV("div", { className: "left-control pointer-events-auto", children: /* @__PURE__ */ jsxDEV( 118 "div", 119 { 120 style: buttonStyle, 121 className: "left-button", 122 onTouchStart: (e) => { 123 e.preventDefault(); 124 handleMoveLeft(); 125 console.log("Touch left button - moving LEFT"); 126 }, 127 onTouchEnd: (e) => e.preventDefault(), 128 onClick: handleMoveLeft, 129 children: "â" 130 }, 131 void 0, 132 false, 133 { 134 fileName: "/home/runner/workspace/client/src/components/game/GameControls.tsx", 135 lineNumber: 146, 136 columnNumber: 17 137 }, 138 this 139 ) }, void 0, false, { 140 fileName: "/home/runner/workspace/client/src/components/game/GameControls.tsx", 141 lineNumber: 145, 142 columnNumber: 15 143 }, this), 144 /* @__PURE__ */ jsxDEV("div", { className: "middle-control pointer-events-auto", children: /* @__PURE__ */ jsxDEV( 145 "div", 146 { 147 style: buttonStyle, 148 className: "jump-button", 149 onTouchStart: (e) => { 150 e.preventDefault(); 151 handleJump(); 152 console.log("Touch jump button"); 153 }, 154 onTouchEnd: (e) => e.preventDefault(), 155 onClick: handleJump, 156 children: "â²" 157 }, 158 void 0, 159 false, 160 { 161 fileName: "/home/runner/workspace/client/src/components/game/GameControls.tsx", 162 lineNumber: 162, 163 columnNumber: 17 164 }, 165 this 166 ) }, void 0, false, { 167 fileName: "/home/runner/workspace/client/src/components/game/GameControls.tsx", 168 lineNumber: 161, 169 columnNumber: 15 170 }, this), 171 /* @__PURE__ */ jsxDEV("div", { className: "right-control pointer-events-auto", children: /* @__PURE__ */ jsxDEV( 172 "div", 173 { 174 style: buttonStyle, 175 className: "right-button", 176 onTouchStart: (e) => { 177 e.preventDefault(); 178 handleMoveRight(); 179 console.log("Touch right button - moving RIGHT"); 180 }, 181 onTouchEnd: (e) => e.preventDefault(), 182 onClick: handleMoveRight, 183 children: "â¶" 184 }, 185 void 0, 186 false, 187 { 188 fileName: "/home/runner/workspace/client/src/components/game/GameControls.tsx", 189 lineNumber: 178, 190 columnNumber: 17 191 }, 192 this 193 ) }, void 0, false, { 194 fileName: "/home/runner/workspace/client/src/components/game/GameControls.tsx", 195 lineNumber: 177, 196 columnNumber: 15 197 }, this) 198 ] }, void 0, true, { 199 fileName: "/home/runner/workspace/client/src/components/game/GameControls.tsx", 200 lineNumber: 144, 201 columnNumber: 9 202 }, this) }, void 0, false, { 203 fileName: "/home/runner/workspace/client/src/components/game/GameControls.tsx", 204 lineNumber: 139, 205 columnNumber: 7 206 }, this) }, void 0, false, { 207 fileName: "/home/runner/workspace/client/src/components/game/GameControls.tsx", 208 lineNumber: 136, 209 columnNumber: 5 210 }, this); 211} 212_s(GameControls, "l6h6PGU4o3D5U6dQ/eowA2pvQ/c=", false, function() { 213 return [useRunner, useKeyboardControls, useKeyboardControls, useKeyboardControls]; 214}); 215_c = GameControls; 216var _c; 217$RefreshReg$(_c, "GameControls"); 218if (import.meta.hot && !inWebWorker) { 219 window.$RefreshReg$ = prevRefreshReg; 220 window.$RefreshSig$ = prevRefreshSig; 221} 222if (import.meta.hot && !inWebWorker) { 223 RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => { 224 RefreshRuntime.registerExportsForReactRefresh("/home/runner/workspace/client/src/components/game/GameControls.tsx", currentExports); 225 import.meta.hot.accept((nextExports) => { 226 if (!nextExports) return; 227 const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/home/runner/workspace/client/src/components/game/GameControls.tsx", currentExports, nextExports); 228 if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage); 229 }); 230 }); 231} 232 233//# sourceMappingURL=data:application/json;base64,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tBQUFBO0FBQUEsSUFZQSxLQWJGO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FjQTtBQUFBLElBRUEsdUJBQUMsU0FBSSxXQUFVLHFDQUNiO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDQyxPQUFPRztBQUFBQSxRQUNQLFdBQVU7QUFBQSxRQUNWLGNBQWMsQ0FBQ2dCLE1BQU07QUFDbkJBLFlBQUVDLGVBQWU7QUFDakJsQiwwQkFBZ0I7QUFDaEJSLGtCQUFRQyxJQUFJLG1DQUFtQztBQUFBLFFBQ2pEO0FBQUEsUUFDQSxZQUFZLENBQUN3QixNQUFNQSxFQUFFQyxlQUFlO0FBQUEsUUFDcEMsU0FBU2xCO0FBQUFBLFFBQWlCO0FBQUE7QUFBQSxNQVQ1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFZQSxLQWJGO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FjQTtBQUFBLE9BL0NGO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FnREEsS0FyREo7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQXVEQSxLQTFESjtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBNERBO0FBRUo7QUFBQzlCLEdBaE1lRCxjQUFZO0FBQUEsVUFDdUJELFdBTTdCRCxxQkFDQUEscUJBQ0NBLG1CQUFtQjtBQUFBO0FBQUFvRCxLQVQxQmxEO0FBQVksSUFBQWtEO0FBQUFDLGFBQUFELElBQUEiLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUtleWJvYXJkQ29udHJvbHMiLCJ1c2VSdW5uZXIiLCJHYW1lQ29udHJvbHMiLCJfcyIsImp1bXAiLCJtb3ZlTGVmdCIsIm1vdmVSaWdodCIsImdhbWVQaGFzZSIsInNob3dNb2JpbGVDb250cm9scyIsInNldFNob3dNb2JpbGVDb250cm9scyIsImp1bXBQcmVzc2VkIiwic3RhdGUiLCJsZWZ0UHJlc3NlZCIsImxlZnQiLCJyaWdodFByZXNzZWQiLCJyaWdodCIsInVzZUVmZmVjdCIsImNoZWNrSWZNb2JpbGUiLCJpc1RvdWNoRGV2aWNlIiwid2luZG93IiwibmF2aWdhdG9yIiwibWF4VG91Y2hQb2ludHMiLCJtc01heFRvdWNoUG9pbnRzIiwiaXNNb2JpbGVTaXplIiwiaW5uZXJXaWR0aCIsImNvbnNvbGUiLCJsb2ciLCJ3aWR0aCIsInVzZXJBZ2VudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlSnVtcCIsImhhbmRsZU1vdmVMZWZ0IiwiaGFuZGxlTW92ZVJpZ2h0IiwiYnV0dG9uU3R5bGUiLCJoZWlnaHQiLCJib3JkZXJSYWRpdXMiLCJkaXNwbGF5IiwianVzdGlmeUNvbnRlbnQiLCJhbGlnbkl0ZW1zIiwiZm9udFNpemUiLCJmb250V2VpZ2h0IiwiYmFja2dyb3VuZENvbG9yIiwiYmFja2Ryb3BGaWx0ZXIiLCJib3JkZXIiLCJjb2xvciIsImJveFNoYWRvdyIsInVzZXJTZWxlY3QiLCJ0b3VjaEFjdGlvbiIsIldlYmtpdFRhcEhpZ2hsaWdodENvbG9yIiwiZSIsInByZXZlbn
233REZWZhdWx0IiwiX2MiLCIkUmVmcmVzaFJlZyQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiR2FtZUNvbnRyb2xzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VLZXlib2FyZENvbnRyb2xzIH0gZnJvbSBcIkByZWFjdC10aHJlZS9kcmVpXCI7XG5pbXBvcnQgeyB1c2VSdW5uZXIgfSBmcm9tIFwiQC9saWIvc3RvcmVzL3VzZVJ1bm5lclwiO1xuaW1wb3J0IHsgQ29udHJvbHMgfSBmcm9tIFwiQC9saWIvY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBHYW1lQ29udHJvbHMoKSB7XG4gIGNvbnN0IHsganVtcCwgbW92ZUxlZnQsIG1vdmVSaWdodCwgZ2FtZVBoYXNlIH0gPSB1c2VSdW5uZXIoKTtcbiAgXG4gIC8vIFN0YXRlIGZvciBtb2JpbGUgY29udHJvbHNcbiAgY29uc3QgW3Nob3dNb2JpbGVDb250cm9scywgc2V0U2hvd01vYmlsZUNvbnRyb2xzXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgXG4gIC8vIERldGVjdCBrZXlib2FyZCBpbnB1dCB1c2luZyBkcmVpIGtleWJvYXJkIGNvbnRyb2xzXG4gIGNvbnN0IGp1bXBQcmVzc2VkID0gdXNlS2V5Ym9hcmRDb250cm9sczxDb250cm9scz4oc3RhdGUgPT4gc3RhdGUuanVtcCk7XG4gIGNvbnN0IGxlZnRQcmVzc2VkID0gdXNlS2V5Ym9hcmRDb250cm9sczxDb250cm9scz4oc3RhdGUgPT4gc3RhdGUubGVmdCk7XG4gIGNvbnN0IHJpZ2h0UHJlc3NlZCA9IHVzZUtleWJvYXJkQ29udHJvbHM8Q29udHJvbHM+KHN0YXRlID0+IHN0YXRlLnJpZ2h0KTtcbiAgXG4gIC8vIERldGVjdCBpZiBkZXZpY2UgaXMgbW9iaWxlIG9yIGhhcyB0b3VjaCBjYXBhYmlsaXR5XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY2hlY2tJZk1vYmlsZSA9ICgpID0+IHtcbiAgICAgIC8vIENoZWNrIGZvciB0b3VjaCBkZXZpY2UgYnkgZmVhdHVyZSBkZXRlY3Rpb25cbiAgICAgIGNvbnN0IGlzVG91Y2hEZXZpY2UgPSAnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAwIHx8IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hdmlnYXRvciBhcyBhbnkpLm1zTWF4VG91Y2hQb2ludHMgPiAwO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBkZXZpY2Ugd2lkdGggLSBjb25zaWRlciB0YWJsZXRzIGFzIG1vYmlsZSBmb3IgY29udHJvbHNcbiAgICAgIGNvbnN0IGlzTW9iaWxlU2l6ZSA9IHdpbmRvdy5pbm5lcldpZHRoIDw9IDEwMjQ7XG4gICAgICBcbiAgICAgIC8vIExvZyBmb3IgZGVidWdnaW5nXG4gICAgICBjb25zb2xlLmxvZygnVG91Y2ggZGV2aWNlIGNoZWNrOicsIHsgXG4gICAgICAgIGlzVG91Y2hEZXZpY2UsIFxuICAgICAgICBpc01vYmlsZVNpemUsIFxuICAgICAgICB3aWR0aDogd2luZG93LmlubmVyV2lkdGgsIFxuICAgICAgICB1c2VyQWdlbnQ6IG5hdmlnYXRvci51c2VyQWdlbnQgXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gU2V0IG1vYmlsZSBjb250cm9scyBpZiBlaXRoZXIgY29uZGl0aW9uIGlzIHRydWVcbiAgICAgIHNldFNob3dNb2JpbGVDb250cm9scyhpc1RvdWNoRGV2aWNlIHx8IGlzTW9iaWxlU2l6ZSk7XG4gICAgfTtcbiAgICBcbiAgICAvLyBJbml0aWFsIGNoZWNrXG4gICAgY2hlY2tJZk1vYmlsZSgpO1xuICAgIFxuICAgIC8vIExpc3RlbiBmb3Igd2luZG93IHJlc2l6ZVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja0lmTW9iaWxlKTtcbiAgICBcbiAgICAvLyBBbHNvIGZvcmNlIG1vYmlsZSBjb250cm9scyB2aXNpYmxlIGZvciB0ZXN0aW5nXG4gICAgLy8gQ29tbWVudCBvdXQgZm9yIHByb2R1Y3Rpb24gaWYgbmVlZGVkXG4gICAgc2V0U2hvd01vYmlsZUNvbnRyb2xzKHRydWUpO1xuICAgIFxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2hlY2tJZk1vYmlsZSk7XG4gICAgfTtcbiAgfSwgW10pO1xuICBcbiAgLy8gSGFuZGxlIGtleWJvYXJkIGNvbnRyb2xzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGp1bXBQcmVzc2VkICYmIGdhbWVQaGFzZSA9PT0gJ3BsYXlpbmcnKSB7XG4gICAgICBqdW1wKCk7XG4gICAgfVxuICB9LCBbanVtcFByZXNzZWQsIGp1bXAsIGdhbWVQaGFzZV0pO1xuICBcbiAgLy8gSGFuZGxlIGxlZnQvcmlnaHQgbW92ZW1lbnRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobGVmdFByZXNzZWQgJiYgZ2FtZVBoYXNlID09PSAncGxheWluZycpIHtcbiAgICAgIG1vdmVMZWZ0KCk7XG4gICAgICBjb25zb2xlLmxvZygnTGVmdCBrZXkgcHJlc3NlZCAtIG1vdmluZyBsZWZ0Jyk7XG4gICAgfVxuICB9LCBbbGVmdFByZXNzZWQsIG1vdmVMZWZ0LCBnYW1lUGhhc2VdKTtcbiAgXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJpZ2h0UHJlc3NlZCAmJiBnYW1lUGhhc2UgPT09ICdwbGF5aW5nJykge1xuICAgICAgbW92ZVJpZ2h0KCk7XG4gICAgICBjb25zb2xlLmxvZygnUmlnaHQga2V5IHByZXNzZWQgLSBtb3ZpbmcgcmlnaHQnKTtcbiAgICB9XG4gIH0sIFtyaWdodFByZXNzZWQsIG1vdmVSaWdodCwgZ2FtZVBoYXNlXSk7XG4gIFxuICAvLyBIYW5kbGVyIGZ1bmN0aW9ucyBmb3IgdG91Y2ggY29udHJvbHMgd2l0aCBpbXByb3ZlZCBkZWJ1Z2dpbmdcbiAgY29uc3QgaGFuZGxlSnVtcCA9ICgpID0+IHtcbiAgICAvLyBTdGFydCBnYW1lIGlmIG5vdCBhbHJlYWR5IHBsYXlpbmdcbiAgICBpZiAoZ2FtZVBoYXNlID09PSAncmVhZHknKSB7XG4gICAgICBqdW1wKCk7IC8vIFRoaXMgc2hvdWxkIGNhbGwgc3RhcnRHYW1lKClcbiAgICAgIGNvbnNvbGUubG9nKCdHYW1lIHN0YXJ0ZWQgZnJvbSBqdW1wJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIE9ubHkganVtcCBpZiBnYW1lIGlzIHBsYXlpbmdcbiAgICBpZiAoZ2FtZVBoYXNlID09PSAncGxheWluZycpIHtcbiAgICAgIGp1bXAoKTtcbiAgICAgIGNvbnNvbGUubG9nKCdKdW1wIGV4ZWN1dGVkLCBnYW1lIHBoYXNlOicsIGdhbWVQaGFzZSk7XG4gICAgfVxuICB9O1xuICBcbiAgY29uc3QgaGFuZGxlTW92ZUxlZnQgPSAoKSA9PiB7XG4gICAgaWYgKGdhbWVQaGFzZSAhPT0gJ3BsYXlpbmcnKSB7XG4gICAgICBjb25zb2xlLmxvZygnQ2Fubm90IG1vdmUgbGVmdCwgZ2FtZSBub3QgcGxheWluZy4gUGhhc2U6JywgZ2FtZVBoYXNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgbW92ZUxlZnQoKTtcbiAgICBjb25zb2xlLmxvZygnTW92ZSBsZWZ0IGV4ZWN1dGVkLCBnYW1lIHBoYXNlOicsIGdhbWVQaGFzZSk7XG4gIH07XG4gIFxuICBjb25zdCBoYW5kbGVNb3ZlUmlnaHQgPSAoKSA9PiB7XG4gICAgaWYgKGdhbWVQaGFzZSAhPT0gJ3BsYXlpbmcnKSB7XG4gICAgICBjb25zb2xlLmxvZygnQ2Fubm90IG1vdmUgcmlnaHQsIGdhbWUgbm90IHBsYXlpbmcuIFBoYXNlOicsIGdhbWVQaGFzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIG1vdmVSaWdodCgpO1xuICAgIGNvbnNvbGUubG9nKCdNb3ZlIHJpZ2h0IGV4ZWN1dGVkLCBnYW1lIHBoYXNlOicsIGdhbWVQaGFzZSk7XG4gIH07XG4gIFxuICAvLyBNb2JpbGUgY29udHJvbCBzdHlsZXMgLSBtYWtpbmcgbGFyZ2VyIGFuZCBtb3JlIHZpc2libGVcbiAgY29uc3QgYnV0dG9uU3R5bGUgPSB7XG4gICAgd2lkdGg6ICc5MHB4JywgIC8vIEluY3JlYXNlZCBzaXplXG4gICAgaGVpZ2h0OiAnOTBweCcsICAvLyBJbmNyZWFzZWQgc2l6ZVxuICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBmb250U2l6ZTogJzM2cHgnLCAgLy8gTGFyZ2VyIGZvbnQgc2l6ZVxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBiYWNrZ3JvdW5k
233Q29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknLCAgLy8gTW9yZSBvcGFxdWUgYmFja2dyb3VuZFxuICAgIGJhY2tkcm9wRmlsdGVyOiAnYmx1cigxMHB4KScsXG4gICAgYm9yZGVyOiAnM3B4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KScsICAvLyBNb3JlIHZpc2libGUgYm9yZGVyXG4gICAgY29sb3I6ICd3aGl0ZScsXG4gICAgYm94U2hhZG93OiAnMCA2cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuNCknLCAgLy8gTW9yZSBwcm9ub3VuY2VkIHNoYWRvd1xuICAgIHVzZXJTZWxlY3Q6ICdub25lJyBhcyAnbm9uZScsICAvLyBUeXBlIGFzc2VydGlvbiB0byBmaXggdGhlIGVycm9yXG4gICAgdG91Y2hBY3Rpb246ICdtYW5pcHVsYXRpb24nLFxuICAgIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICB9O1xuICBcbiAgLy8gU3RhcnQgYnV0dG9uIHN0eWxlIHJlbW92ZWQgc2luY2Ugd2UncmUgdXNpbmcgb25seSB0aGUgbWFpbiBTVEFSVCBidXR0b25cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7LyogTW9iaWxlIGNvbnRyb2xzICovfVxuICAgICAge3Nob3dNb2JpbGVDb250cm9scyAmJiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgey8qIE1vYmlsZSBTVEFSVCBidXR0b24gcmVtb3ZlZCB0byBwcmV2ZW50IGR1cGxpY2F0aW9uIHdpdGggdGhlIG1haW4gU1RBUlQgYnV0dG9uICovfVxuICAgICAgICAgIFxuICAgICAgICAgIHsvKiBHYW1lIGNvbnRyb2xzIC0gb25seSBzaG93IHdoZW4gZ2FtZSBpcyBwbGF5aW5nICovfVxuICAgICAgICAgIHtnYW1lUGhhc2UgPT09ICdwbGF5aW5nJyAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpeGVkIGJvdHRvbS0xMCBpbnNldC14LTAgei01MCBmbGV4IGp1c3RpZnktYmV0d2VlbiBweC00IHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsZWZ0LWNvbnRyb2wgcG9pbnRlci1ldmVudHMtYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICAgICAgICBzdHlsZT17YnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJsZWZ0LWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvblRvdWNoU3RhcnQ9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlTW92ZUxlZnQoKTsgLy8gRml4ZWQ6IFVzaW5nIGNvcnJlY3QgaGFuZGxlciBmb3IgbGVmdCBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1RvdWNoIGxlZnQgYnV0dG9uIC0gbW92aW5nIExFRlQnKTtcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBvblRvdWNoRW5kPXsoZSkgPT4gZS5wcmV2ZW50RGVmYXVsdCgpfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlTW92ZUxlZnR9IC8vIEZpeGVkOiBVc2luZyBjb3JyZWN0IGhhbmRsZXIgZm9yIGxlZnQgYnV0dG9uXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAg4peAXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaWRkbGUtY29udHJvbCBwb2ludGVyLWV2ZW50cy1hdXRvXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXtidXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImp1bXAtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uVG91Y2hTdGFydD17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVKdW1wKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUb3VjaCBqdW1wIGJ1dHRvbicpO1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIG9uVG91Y2hFbmQ9eyhlKSA9PiBlLnByZXZlbnREZWZhdWx0KCl9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVKdW1wfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIOKWslxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmlnaHQtY29udHJvbCBwb2ludGVyLWV2ZW50cy1hdXRvXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXtidXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJpZ2h0LWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvblRvdWNoU3RhcnQ9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlTW92ZVJpZ2h0KCk7IC8vIEZpeGVkOiBVc2luZyBjb3JyZWN0IGhhbmRsZXIgZm9yIHJpZ2h0IGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVG91Y2ggcmlnaHQgYnV0dG9uIC0gbW92aW5nIFJJR0hUJyk7XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgb25Ub3VjaEVuZD17KGUpID0+IGUucHJldmVudERlZmF1bHQoKX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU1vdmVSaWdodH0gLy8gRml4ZWQ6IFVzaW5nIGNvcnJlY3QgaGFuZGxlciBmb3IgcmlnaHQgYnV0dG9uXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAg4pa2XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufVxuIl0sImZpbGUiOiIvaG9tZS9ydW5uZXIvd29ya3NwYWNlL2NsaWVudC9zcmMvY29tcG9uZW50cy9nYW1lL0dhbWVDb250cm9scy50c3gifQ==
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.