1import __vite__cjsImport0_react_jsxRuntime from "/@fs/home/runner/workspace/node_modules/.vite/deps/react_jsx-runtime.js?v=3bc92834"; const jsx = __vite__cjsImport0_react_jsxRuntime["jsx"]; const jsxs = __vite__cjsImport0_react_jsxRuntime["jsxs"]; 2import __vite__cjsImport1_react from "/@fs/home/runner/workspace/node_modules/.vite/deps/react.js?v=3bc92834"; const useState = __vite__cjsImport1_react["useState"]; 3import { useMutation, useQueryClient, useQuery } from "/@fs/home/runner/workspace/node_modules/.vite/deps/@tanstack_react-query.js?v=9abba70f"; 4import { Button } from "/src/components/ui/button.tsx"; 5import { Input } from "/src/components/ui/input.tsx"; 6import { Label } from "/src/components/ui/label.tsx"; 7import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "/src/components/ui/select.tsx"; 8import { Crosshair, Search, Zap, Brain, StopCircle, AlertTriangle } from "/@fs/home/runner/workspace/node_modules/.vite/deps/lucide-react.js?v=c62bd0b8"; 9import { useToast } from "/src/hooks/use-toast.ts"; 10import { apiRequest } from "/src/lib/queryClient.ts"; 11export default function TargetAcquisition() { 12 const [target, setTarget] = useState(""); 13 const [scanType, setScanType] = useState("OWASP Top 10 Assessment"); 14 const { toast } = useToast(); 15 const queryClient = useQueryClient(); 16 const { data: user, isLoading: userLoading, error: userError } = useQuery({ 17 queryKey: ["/api/user"], 18 retry: false, 19 refetchOnWindowFocus: false 20 }); 21 const createScanMutation = useMutation({ 22 mutationFn: async (data) => { 23 const scanData = { 24 target: data.target, 25 scanType: data.scanType, 26 status: "running", 27 progress: 0, 28 currentPhase: "initializing", 29 results: null, 30 riskScore: null, 31 vulnerabilities: null, 32 aiAnalysis: null, 33 detailedLogs: [], 34 portsScanned: [], 35 servicesDetected: [], 36 scanDuration: 0, 37 completedAt: null 38 }; 39 const response = await apiRequest("POST", "/api/scans", scanData); 40 return response.json(); 41 }, 42 onSuccess: (data) => { 43 console.log("Scan created successfully:", data); 44 toast({ 45 title: "Scan Initiated", 46 description: "Target acquisition successful. Scanning in progress..." 47 }); 48 setTarget(""); 49 queryClient.invalidateQueries({ queryKey: ["/api/scans"] }); 50 queryClient.invalidateQueries({ queryKey: ["/api/stats"] }); 51 queryClient.invalidateQueries({ queryKey: ["/api/console"] }); 52 }, 53 onError: (error) => { 54 console.error("Scan creation failed:", error); 55 let errorMessage = "An error occurred during scan initiation"; 56 if (error?.message?.includes("401") || error?.message?.includes("authentication")) { 57 errorMessage = "Authentication required. Please log in to initiate scans."; 58 } else if (error?.message?.includes("400") || error?.message?.includes("validation")) { 59 errorMessage = "Invalid scan parameters. Please check your target and scan type."; 60 } else if (error?.message) { 61 errorMessage = error.message; 62 } 63 toast({ 64 title: "Scan Failed", 65 description: errorMessage, 66 variant: "destructive" 67 }); 68 } 69 }); 70 const handleDeepScan = () => { 71 if (!user) { 72 toast({ 73 title: "Authentication Required", 74 description: "Please log in to initiate vulnerability scans", 75 variant: "destructive" 76 }); 77 return; 78 } 79 if (!target.trim()) { 80 toast({ 81 title: "Target Required", 82 description: "Please enter a target URL or IP address", 83 variant: "destructive" 84 }); 85 return; 86 } 87 createScanMutation.mutate({ 88 target: target.trim(), 89 scanType 90 }); 91 }; 92 const handleQuickAssess = () => { 93 if (!user) { 94 toast({ 95 title: "Authentication Required", 96 description: "Please log in to initiate vulnerability scans", 97 variant: "destructive" 98 }); 99 return; 100 } 101 if (!target.trim()) { 102 toast({ 103 title: "Target Required", 104 description: "Please enter a target URL or IP address", 105 variant: "destructive" 106 }); 107 return; 108 } 109 createScanMutation.mutate({ 110 target: target.trim(), 111 scanType: "Quick Assessment" 112 }); 113 }; 114 return /* @__PURE__ */ jsxs("div", { className: "holographic-mobile rounded-lg mobile-glow", children: [
115 /* @__PURE__ */ jsx("div", { className: "bg-gradient-to-r from-orange-500/20 to-blue-600/20 px-3 sm:px-6 py-3 border-b border-orange-500/30", children: /* @__PURE__ */ jsxs("h2", { className: "font-mono text-base sm:text-xl font-bold text-orange-500 tracking-wider flex items-center", children: [ 116 /* @__PURE__ */ jsx(Crosshair, { className: "mr-3 w-6 h-6" }), 117 "TARGET ACQUISITION & RECONNAISSANCE", 118 /* @__PURE__ */ jsxs("div", { className: "ml-auto flex items-center space-x-2", children: [ 119 /* @__PURE__ */ jsx("div", { className: "w-2 h-2 bg-green-500 rounded-full animate-pulse" }), 120 /* @__PURE__ */ jsx("span", { className: "text-green-400 text-sm", children: "ACTIVE" }) 121 ] }) 122 ] }) }), 123 /* @__PURE__ */ jsxs("div", { className: "p-3 sm:p-6", children: [ 124 /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4 sm:gap-6 mb-6 sm:mb-8", children: [ 125 /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [ 126 /* @__PURE__ */ jsx(Label, { className: "text-blue-300 font-mono text-sm font-bold tracking-wide", children: "TARGET COORDINATES" }),
127 /* @__PURE__ */ jsx( 128 Input, 129 { 130 type: "text", 131 value: target, 132 onChange: (e) => setTarget(e.target.value), 133 className: "bg-slate-800/80 border-2 border-blue-500/50 text-white font-mono focus:border-orange-500 focus:ring-2 focus:ring-orange-500/20 transition-all duration-300 min-h-[48px]", 134 placeholder: "https://target.example.com" 135 } 136 ), 137 /* @__PURE__ */ jsx("div", { className: "text-xs text-blue-400 font-mono", children: "Enter target URL or IP address for reconnaissance" }) 138 ] }), 139 /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [ 140 /* @__PURE__ */ jsx(Label, { className: "text-blue-300 font-mono text-sm font-bold tracking-wide", children: "MISSION PROFILE" }), 141 /* @__PURE__ */ jsxs(Select, { value: scanType, onValueChange: setScanType, children: [ 142 /* @__PURE__ */ jsx(SelectTrigger, { className: "bg-slate-800/80 border-2 border-blue-500/50 text-white font-mono focus:border-orange-500", children: /* @__PURE__ */ jsx(SelectValue, {}) }),
143 /* @__PURE__ */ jsxs(SelectContent, { className: "bg-slate-900/95 border-2 border-blue-500/50 backdrop-blur-md", children: [ 144 /* @__PURE__ */ jsx(SelectItem, { value: "OWASP Top 10 Assessment", children: "ð¡ï¸ OWASP Top 10 Assessment" }), 145 /* @__PURE__ */ jsx(SelectItem, { value: "Full Vulnerability Scan", children: "ð Full Vulnerability Scan" }), 146 /* @__PURE__ */ jsx(SelectItem, { value: "Port & Service Analysis", children: "ð¡ Port & Service Analysis" }), 147 /* @__PURE__ */ jsx(SelectItem, { value: "Web Application Audit", children: "ð Web Application Audit" }) 148 ] }) 149 ] }), 150 /* @__PURE__ */ jsx("div", { className: "text-xs text-blue-400 font-mono", children: "Select operational reconnaissance profile" }) 151 ] }) 152 ] }), 153 !user && !userLoading && /* @__PURE__ */ jsxs("div", { className: "mb-4 p-3 bg-red-900/30 border border-red-500/50 rounded-lg flex items-center space-x-3", children: [ 154 /* @__PURE__ */ jsx(AlertTriangle, { className: "w-5 h-5 text-red-400" }),
155 /* @__PURE__ */ jsx("div", { className: "text-sm text-red-300 font-mono", children: "Authentication required - Please log in to initiate vulnerability scans" }) 156 ] }), 157 /* @__PURE__ */ jsxs("div", { className: "mobile-grid sm:grid-cols-2 lg:grid-cols-4 gap-3 sm:gap-4 mb-6 sm:mb-8", children: [ 158 /* @__PURE__ */ jsxs( 159 Button, 160 { 161 onClick: handleDeepScan, 162 disabled: createScanMutation.isPending || !user, 163 className: "mobile-tactical-button", 164 "data-testid": "deep-scan-button", 165 children: [ 166 /* @__PURE__ */ jsx(Search, { className: "mr-2 w-4 h-4 sm:w-5 sm:h-5" }), 167 /* @__PURE__ */ jsx("span", { className: "hidden sm:inline", children: createScanMutation.isPending ? "EXECUTING..." : "DEEP SCAN" }), 168 /* @__PURE__ */ jsx("span", { className: "sm:hidden", children: createScanMutation.isPending ? "EXEC..." : "DEEP" }) 169 ] 170 } 171 ), 172 /* @__PURE__ */ jsxs( 173 Button, 174 { 175 onClick: handleQuickAssess, 176 disabled: createScanMutation.isPending || !user, 177 className: "mobile-tactical-button", 178 "data-testid": "quick-recon-button", 179 children: [
180 /* @__PURE__ */ jsx(Zap, { className: "mr-2 w-4 h-4 sm:w-5 sm:h-5" }), 181 /* @__PURE__ */ jsx("span", { className: "hidden sm:inline", children: "QUICK RECON" }), 182 /* @__PURE__ */ jsx("span", { className: "sm:hidden", children: "QUICK" }) 183 ] 184 } 185 ), 186 /* @__PURE__ */ jsxs( 187 Button, 188 { 189 onClick: handleDeepScan, 190 disabled: createScanMutation.isPending || !user, 191 className: "mobile-tactical-button", 192 "data-testid": "ai-analysis-button", 193 children: [ 194 /* @__PURE__ */ jsx(Brain, { className: "mr-2 w-4 h-4 sm:w-5 sm:h-5" }), 195 /* @__PURE__ */ jsx("span", { className: "hidden sm:inline", children: "AI ANALYSIS" }), 196 /* @__PURE__ */ jsx("span", { className: "sm:hidden", children: "AI" }) 197 ] 198 } 199 ), 200 /* @__PURE__ */ jsxs( 201 Button, 202 { 203 disabled: !createScanMutation.isPending, 204 className: "mobile-tactical-button disabled:opacity-50 disabled:cursor-not-allowed", 205 children: [
206 /* @__PURE__ */ jsx(StopCircle, { className: "mr-2 w-5 h-5" }), 207 "ABORT" 208 ] 209 } 210 ) 211 ] }), 212 /* @__PURE__ */ jsxs("div", { className: "bg-slate-800/60 rounded-lg border border-blue-500/30 p-6 backdrop-blur-sm", children: [ 213 /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-4", children: [ 214 /* @__PURE__ */ jsx("h3", { className: "font-mono font-bold text-orange-500 text-lg", children: "MISSION STATUS" }), 215 /* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-2", children: [ 216 /* @__PURE__ */ jsx("div", { className: "w-2 h-2 bg-green-500 rounded-full animate-pulse" }), 217 /* @__PURE__ */ jsx("span", { className: "text-green-400 font-mono text-sm", children: "STANDBY" }) 218 ] }) 219 ] }), 220 /* @__PURE__ */ jsx("div", { className: "space-y-4", children: createScanMutation.isPending ? /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [ 221 /* @__P
221URE__ */ jsxs("div", { className: "flex items-center justify-between p-3 bg-blue-900/30 rounded border-l-4 border-orange-500", children: [ 222 /* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-3", children: [ 223 /* @__PURE__ */ jsx("div", { className: "w-3 h-3 bg-orange-500 rounded-full animate-pulse" }), 224 /* @__PURE__ */ jsxs("span", { className: "font-mono text-sm text-white", children: [ 225 "Mission initialization: ", 226 target 227 ] }) 228 ] }), 229 /* @__PURE__ */ jsx("span", { className: "text-orange-500 font-mono text-sm font-bold", children: "EXECUTING" }) 230 ] }), 231 /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between p-3 bg-green-900/30 rounded border-l-4 border-green-500", children: [ 232 /* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-3", children: [ 233 /* @__PURE__ */ jsx("div", { className: "w-3 h-3 bg-green-500 rounded-full animate-pulse" }),
234 /* @__PURE__ */ jsx("span", { className: "font-mono text-sm text-white", children: "Reconnaissance protocol active" }) 235 ] }), 236 /* @__PURE__ */ jsx("span", { className: "text-green-500 font-mono text-sm font-bold", children: "NOMINAL" }) 237 ] }), 238 /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between p-3 bg-blue-900/30 rounded border-l-4 border-blue-500", children: [ 239 /* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-3", children: [ 240 /* @__PURE__ */ jsx("div", { className: "w-3 h-3 bg-blue-500 rounded-full animate-pulse" }), 241 /* @__PURE__ */ jsx("span", { className: "font-mono text-sm text-white", children: "Data acquisition in progress" }) 242 ] }), 243 /* @__PURE__ */ jsx("span", { className: "text-blue-500 font-mono text-sm font-bold", children: "ACQUIRING" }) 244 ] }) 245 ] }) : /* @__PURE__ */ jsxs("div", { className: "text-center py-8", children: [ 246 /* @__P
246URE__ */ jsx("div", { className: "mb-4", children: /* @__PURE__ */ jsx("div", { className: "w-12 h-12 mx-auto bg-gradient-to-br from-blue-600 to-blue-800 rounded-full flex items-center justify-center border-2 border-blue-400", children: /* @__PURE__ */ jsx(Crosshair, { className: "w-6 h-6 text-blue-300" }) }) }), 247 /* @__PURE__ */ jsx("span", { className: "font-mono text-blue-300 block", children: "Mission Control ready for target acquisition" }), 248 /* @__PURE__ */ jsx("span", { className: "font-mono text-blue-400 text-sm", children: "All systems nominal - awaiting target coordinates" }) 249 ] }) }) 250 ] }) 251 ] }) 252 ] }); 253} 254 255//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRhcmdldC1hY3F1aXNpdGlvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZU11dGF0aW9uLCB1c2VRdWVyeUNsaWVudCwgdXNlUXVlcnkgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL2J1dHRvblwiO1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL2lucHV0XCI7XG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCJAL2NvbXBvbmVudHMvdWkvbGFiZWxcIjtcbmltcG9ydCB7IFNlbGVjdCwgU2VsZWN0Q29udGVudCwgU2VsZWN0SXRlbSwgU2VsZWN0VHJpZ2dlciwgU2VsZWN0VmFsdWUgfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL3NlbGVjdFwiO1xuaW1wb3J0IHsgQ3Jvc3NoYWlyLCBTZWFyY2gsIFphcCwgQnJhaW4sIFN0b3BDaXJjbGUsIEFsZXJ0VHJpYW5nbGUgfSBmcm9tIFwibHVjaWRlLXJlYWN0XCI7XG5pbXBvcnQgeyB1c2VUb2FzdCB9IGZyb20gXCJAL2hvb2tzL3VzZS10b2FzdFwiO1xuaW1wb3J0IHsgYXBpUmVxdWVzdCB9IGZyb20gXCJAL2xpYi9xdWVyeUNsaWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUYXJnZXRBY3F1aXNpdGlvbigpIHtcbiAgY29uc3QgW3RhcmdldCwgc2V0VGFyZ2V0XSA9IHVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbc2NhblR5cGUsIHNldFNjYW5UeXBlXSA9IHVzZVN0YXRlKFwiT1dBU1AgVG9wIDEwIEFzc2Vzc21lbnRcIik7XG4gIGNvbnN0IHsgdG9hc3QgfSA9IHVzZVRvYXN0KCk7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICAvLyBDaGVjayBpZiB1c2VyIGlzIGF1dGhlbnRpY2F0ZWRcbiAgY29uc3QgeyBkYXRhOiB1c2VyLCBpc0xvYWRpbmc6IHVzZXJMb2FkaW5nLCBlcnJvcjogdXNlckVycm9yIH0gPSB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IFtcIi9hcGkvdXNlclwiXSxcbiAgICByZXRyeTogZmFsc2UsXG4gICAgcmVmZXRjaE9uV2luZG93Rm9jdXM6IGZhbHNlLFxuICB9KTtcblxuICBjb25zdCBjcmVhdGVTY2FuTXV0YXRpb24gPSB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IHsgdGFyZ2V0OiBzdHJpbmc7IHNjYW5UeXBlOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgLy8gQ3JlYXRlIHByb3BlciBzY2FuIGRhdGEgc3RydWN0dXJlIG1hdGNoaW5nIGluc2VydFNjYW5TY2hlbWFcbiAgICAgIGNvbnN0IHNjYW5EYXRhID0ge1xuICAgICAgICB0YXJnZXQ6IGRhdGEudGFyZ2V0LFxuICAgICAgICBzY2FuVHlwZTogZGF0YS5zY2FuVHlwZSxcbiAgICAgICAgc3RhdHVzOiBcInJ1bm5pbmdcIixcbiAgICAgICAgcHJvZ3Jlc3M6IDAsXG4gICAgICAgIGN1cnJlbnRQaGFzZTogXCJpbml0aWFsaXppbmdcIixcbiAgICAgICAgcmVzdWx0czogbnVsbCxcbiAgICAgICAgcmlza1Njb3JlOiBudWxsLFxuICAgICAgICB2dWxuZXJhYmlsaXRpZXM6IG51bGwsXG4gICAgICAgIGFpQW5hbHlzaXM6IG51bGwsXG4gICAgICAgIGRldGFpbGVkTG9nczogW10sXG4gICAgICAgIHBvcnRzU2Nhbm5lZDogW10sXG4gICAgICAgIHNlcnZpY2VzRGV0ZWN0ZWQ6IFtdLFxuICAgICAgICBzY2FuRHVyYXRpb246IDAsXG4gICAgICAgIGNvbXBsZXRlZEF0OiBudWxsXG4gICAgICB9O1xuICAgICAgXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaVJlcXVlc3QoXCJQT1NUXCIsIFwiL2FwaS9zY2Fuc1wiLCBzY2FuRGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoZGF0YSkgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJTY2FuIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5OlwiLCBkYXRhKTtcbiAgICAgIHRvYXN0KHtcbiAgICAgICAgdGl0bGU6IFwiU2NhbiBJbml0aWF0ZWRcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVGFyZ2V0IGFjcXVpc2l0aW9uIHN1Y2Nlc3NmdWwuIFNjYW5uaW5nIGluIHByb2dyZXNzLi4uXCIsXG4gICAgICB9KTtcbiAgICAgIHNldFRhcmdldChcIlwiKTsgLy8gQ2xlYXIgdGhlIGlucHV0IGZpZWxkIGFmdGVyIHN1Y2Nlc3NmdWwgc2NhblxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogW1wiL2FwaS9zY2Fuc1wiXSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IFtcIi9hcGkvc3RhdHNcIl0gfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBbXCIvYXBpL2NvbnNvbGVcIl0gfSk7XG4gICAgfSxcbiAgICBvbkVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihcIlNjYW4gY3JlYXRpb24gZmFpbGVkOlwiLCBlcnJvcik7XG4gICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgc2NhbiBpbml0aWF0aW9uXCI7XG4gICAgICBcbiAgICAgIGlmIChlcnJvcj8ubWVzc2FnZT8uaW5jbHVkZXMoXCI0MDFcIikgfHwgZXJyb3I/Lm1lc3NhZ2U/LmluY2x1ZGVzKFwiYXV0aGVudGljYXRpb25cIikpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJBdXRoZW50aWNhdGlvbiByZXF1aXJlZC4gUGxlYXNlIGxvZyBpbiB0byBpbml0aWF0ZSBzY2Fucy5cIjtcbiAgICAgIH0gZWxzZSBpZiAoZXJyb3I/Lm1lc3NhZ2U/LmluY2x1ZGVzKFwiNDAwXCIpIHx8IGVycm9yPy5tZXNzYWdlPy5pbmNsdWRlcyhcInZhbGlkYXRpb25cIikpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIHNjYW4gcGFyYW1ldGVycy4gUGxlYXNlIGNoZWNrIHlvdXIgdGFyZ2V0IGFuZCBzY2FuIHR5cGUuXCI7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yPy5tZXNzYWdlKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRvYXN0KHtcbiAgICAgICAgdGl0bGU6IFwiU2NhbiBGYWlsZWRcIixcbiAgICAgICAgZGVzY3JpcHRpb246IGVycm9yTWVzc2FnZSxcbiAgICAgICAgdmFyaWFudDogXCJkZXN0cnVjdGl2ZVwiLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlRGVlcFNjYW4gPSAoKSA9PiB7XG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICB0b2FzdCh7XG4gICAgICAgI
255HRpdGxlOiBcIkF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlBsZWFzZSBsb2cgaW4gdG8gaW5pdGlhdGUgdnVsbmVyYWJpbGl0eSBzY2Fuc1wiLFxuICAgICAgICB2YXJpYW50OiBcImRlc3RydWN0aXZlXCIsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldC50cmltKCkpIHtcbiAgICAgIHRvYXN0KHtcbiAgICAgICAgdGl0bGU6IFwiVGFyZ2V0IFJlcXVpcmVkXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlBsZWFzZSBlbnRlciBhIHRhcmdldCBVUkwgb3IgSVAgYWRkcmVzc1wiLFxuICAgICAgICB2YXJpYW50OiBcImRlc3RydWN0aXZlXCIsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjcmVhdGVTY2FuTXV0YXRpb24ubXV0YXRlKHtcbiAgICAgIHRhcmdldDogdGFyZ2V0LnRyaW0oKSxcbiAgICAgIHNjYW5UeXBlLFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVF1aWNrQXNzZXNzID0gKCkgPT4ge1xuICAgIGlmICghdXNlcikge1xuICAgICAgdG9hc3Qoe1xuICAgICAgICB0aXRsZTogXCJBdXRoZW50aWNhdGlvbiBSZXF1aXJlZFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJQbGVhc2UgbG9nIGluIHRvIGluaXRpYXRlIHZ1bG5lcmFiaWxpdHkgc2NhbnNcIixcbiAgICAgICAgdmFyaWFudDogXCJkZXN0cnVjdGl2ZVwiLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXQudHJpbSgpKSB7XG4gICAgICB0b2FzdCh7XG4gICAgICAgIHRpdGxlOiBcIlRhcmdldCBSZXF1aXJlZFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJQbGVhc2UgZW50ZXIgYSB0YXJnZXQgVVJMIG9yIElQIGFkZHJlc3NcIixcbiAgICAgICAgdmFyaWFudDogXCJkZXN0cnVjdGl2ZVwiLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY3JlYXRlU2Nhbk11dGF0aW9uLm11dGF0ZSh7XG4gICAgICB0YXJnZXQ6IHRhcmdldC50cmltKCksXG4gICAgICBzY2FuVHlwZTogXCJRdWljayBBc3Nlc3NtZW50XCIsXG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImhvbG9ncmFwaGljLW1vYmlsZSByb3VuZGVkLWxnIG1vYmlsZS1nbG93XCI+XG4gICAgICB7LyogV0lMS0VZIG1pc3Npb24gcGFuZWwgaGVhZGVyICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy1ncmFkaWVudC10by1yIGZyb20tb3JhbmdlLTUwMC8yMCB0by1ibHVlLTYwMC8yMCBweC0zIHNtOnB4LTYgcHktMyBib3JkZXItYiBib3JkZXItb3JhbmdlLTUwMC8zMFwiPlxuICAgICAgICA8aDIgY2xhc3NOYW1lPVwiZm9udC1tb25vIHRleHQtYmFzZSBzbTp0ZXh0LXhsIGZvbnQtYm9sZCB0ZXh0LW9yYW5nZS01MDAgdHJhY2tpbmctd2lkZXIgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8Q3Jvc3NoYWlyIGNsYXNzTmFtZT1cIm1yLTMgdy02IGgtNlwiIC8+XG4gICAgICAgICAgVEFSR0VUIEFDUVVJU0lUSU9OICYgUkVDT05OQUlTU0FOQ0VcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1sLWF1dG8gZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMiBoLTIgYmctZ3JlZW4tNTAwIHJvdW5kZWQtZnVsbCBhbmltYXRlLXB1bHNlXCI+PC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyZWVuLTQwMCB0ZXh0LXNtXCI+QUNUSVZFPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2gyPlxuICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC0zIHNtOnAtNlwiPlxuICAgICAgXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTIgZ2FwLTQgc206Z2FwLTYgbWItNiBzbTptYi04XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQtYmx1ZS0zMDAgZm9udC1tb25vIHRleHQtc20gZm9udC1ib2xkIHRyYWNraW5nLXdpZGVcIj5UQVJHRVQgQ09PUkRJTkFURVM8L0xhYmVsPlxuICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgdmFsdWU9e3RhcmdldH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0VGFyZ2V0KGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLXNsYXRlLTgwMC84MCBib3JkZXItMiBib3JkZXItYmx1ZS01MDAvNTAgdGV4dC13aGl0ZSBmb250LW1vbm8gZm9jdXM6Ym9yZGVyLW9yYW5nZS01MDAgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctb3JhbmdlLTUwMC8yMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgbWluLWgtWzQ4cHhdXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiaHR0cHM6Ly90YXJnZXQuZXhhbXBsZS5jb21cIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtYmx1ZS00MDAgZm9udC1tb25vXCI+RW50ZXIgdGFyZ2V0IFVSTCBvciBJUCBhZGRyZXNzIGZvciByZWNvbm5haXNzYW5jZTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC1ibHVlLTMwMCBmb250LW1vbm8gdGV4dC1zbSBmb250LWJvbGQgdHJhY2tpbmctd2lkZVwiPk1JU1NJT04gUFJPRklMRTwvTGFiZWw+XG4gICAgICAgICAgPFNlbGVjdCB2YWx1ZT17c2NhblR5cGV9IG9uVmFsdWVDaGFuZ2U9e3NldFNjYW5UeXBlfT5cbiAgICAgICAgICAgIDxTZWxlY3RUcmlnZ2VyIGNsYXNzTmFtZT1cImJnLXNsYXRlLTgwMC84MCBib3JkZXItMiBib3JkZXItYmx1ZS01MDAvNTAgdGV4dC13aGl0ZSBmb250LW1vbm8gZm9jdXM6Ym9yZGVyLW9yYW5nZS01MDBcIj5cbiAgICAgICAgICAgICAgPFNlbGVjdFZhbHVlIC8+XG4gICAgICAgICAgICA8L1NlbGVjdFRyaWdnZXI+XG4gICAgICAgICAgICA8U2VsZWN0Q29udGVudCBjbGFzc05hbWU9XCJiZy1zbGF0ZS05MDAvOTUgYm9yZGVyLTIgYm9yZGVyLWJsdWUtNTAwLzUwIGJhY2tkcm9wLWJsdXItbWRcIj5cbiAgICAgICAgICAgICAgPFNlbGVjdEl0ZW0gdmFsdWU9XCJPV0FTUCBUb3AgMTAgQXNzZXNzbWVudFwiPvCfm6HvuI8gT1dBU1AgVG9wIDEwIEFzc2Vzc21lbnQ8L1NlbGVjdEl0ZW0+XG4gICAgICAgICAgICAgIDxTZWxlY3RJdGVtIHZhbHVlPVwiRnVsbCBWdWxuZXJhYmlsaXR5IFNjYW5cIj7wn5SNIEZ1bGwgVnVsbmVyYWJpbGl0eSBTY2FuPC9TZWxlY3RJdGVtPlxuICAgICAgICAgICAgICA8U2VsZWN0SXRlbSB2YWx1ZT1cIlBvcnQgJiBTZXJ2aWNlIEFuYWx5c2lzXCI+8J+ToSBQb3J0ICYgU2VydmljZSBBbmFseXNpczwvU2VsZWN0SXRlbT5cbiAgICAgICAgICAgICAgPFNlbGVjdEl0ZW0gdmFsdWU9XCJXZWIgQXBwbGljYXRpb24gQXVkaXRcIj7wn4yQIFdlYiBBcHBsaWNhdGlvbiBBdWRpdDwvU2VsZWN0SXRlbT5cbiAgICAgICAgICAgIDwvU2VsZWN0Q29udGVudD5cbiAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1ibHVlLTQwMCBmb250LW1vbm9cIj5TZWxlY3Qgb3BlcmF0aW9uYWwgcmVjb25uYWlzc2FuY2UgcHJvZmlsZTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICB7LyogQXV0aGVudGljYXRpb24gU3RhdHVzICovfVxuICAgICAgeyF1c2VyICYmICF1c2VyTG9hZGluZyAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNCBwLTMgYmctcmVkLTkwMC8zMCBib3JkZXIgYm9yZGVyLXJlZC01MDAvNTAgcm91bmRlZC1sZyBmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTNcIj5cbiAgICAgICAgICA8QWxlcnRUcmlhbmdsZSBjbGFzc05hbWU9XCJ3LTUgaC01IHRleHQtcmVkLTQwMFwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTMwMCBmb250LW1vbm9cIj5cbiAgICAgICAgICAgIEF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkIC0gUGxlYXNlIGxvZyBpbiB0byBpbml0aWF0ZSB2dWxuZXJhYmlsaXR5IHNjYW5zXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAgey8qIE1pc3Npb24gQ29udHJvbCBCdXR0b25zICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2JpbGUtZ3JpZCBzbTpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtNCBnYXAtMyBzbTpnYXAtNCBtYi02IHNtOm1iLThcIj5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZURlZXBTY2FufVxuICAgICAgICAgIGRpc2FibGVkPXtjcmVhdGVTY2FuTXV0YXRpb24uaXNQZW5kaW5nIHx8ICF1c2VyfVxuICAgICAgICAgIGNsYXNzTmFtZT1cIm1vYmlsZS10YWN0aWNhbC1idXR0b25cIlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGVlcC1zY2FuLWJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8U2VhcmNoIGNsYXNzTmFtZT1cIm1yLTIgdy00IGgtNCBzbTp3LTUgc206aC01XCIgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoaWRkZW4gc206aW5saW5lXCI+e2NyZWF0ZVNjYW5NdXRhdGlvbi5pc1BlbmRpbmcgPyBcIkVYRUNVVElORy4uLlwiIDogXCJ
255ERUVQIFNDQU5cIn08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic206aGlkZGVuXCI+e2NyZWF0ZVNjYW5NdXRhdGlvbi5pc1BlbmRpbmcgPyBcIkVYRUMuLi5cIiA6IFwiREVFUFwifTwvc3Bhbj5cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVRdWlja0Fzc2Vzc31cbiAgICAgICAgICBkaXNhYmxlZD17Y3JlYXRlU2Nhbk11dGF0aW9uLmlzUGVuZGluZyB8fCAhdXNlcn1cbiAgICAgICAgICBjbGFzc05hbWU9XCJtb2JpbGUtdGFjdGljYWwtYnV0dG9uXCJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLXJlY29uLWJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8WmFwIGNsYXNzTmFtZT1cIm1yLTIgdy00IGgtNCBzbTp3LTUgc206aC01XCIgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoaWRkZW4gc206aW5saW5lXCI+UVVJQ0sgUkVDT048L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic206aGlkZGVuXCI+UVVJQ0s8L3NwYW4+XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlRGVlcFNjYW59XG4gICAgICAgICAgZGlzYWJsZWQ9e2NyZWF0ZVNjYW5NdXRhdGlvbi5pc1BlbmRpbmcgfHwgIXVzZXJ9XG4gICAgICAgICAgY2xhc3NOYW1lPVwibW9iaWxlLXRhY3RpY2FsLWJ1dHRvblwiXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJhaS1hbmFseXNpcy1idXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgPEJyYWluIGNsYXNzTmFtZT1cIm1yLTIgdy00IGgtNCBzbTp3LTUgc206aC01XCIgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoaWRkZW4gc206aW5saW5lXCI+QUkgQU5BTFlTSVM8L3
255NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic206aGlkZGVuXCI+QUk8L3NwYW4+XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgZGlzYWJsZWQ9eyFjcmVhdGVTY2FuTXV0YXRpb24uaXNQZW5kaW5nfVxuICAgICAgICAgIGNsYXNzTmFtZT1cIm1vYmlsZS10YWN0aWNhbC1idXR0b24gZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPFN0b3BDaXJjbGUgY2xhc3NOYW1lPVwibXItMiB3LTUgaC01XCIgLz5cbiAgICAgICAgICBBQk9SVFxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICB7LyogTWlzc2lvbiBTdGF0dXMgUGFuZWwgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXNsYXRlLTgwMC82MCByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItYmx1ZS01MDAvMzAgcC02IGJhY2tkcm9wLWJsdXItc21cIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItNFwiPlxuICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJmb250LW1vbm8gZm9udC1ib2xkIHRleHQtb3JhbmdlLTUwMCB0ZXh0LWxnXCI+TUlTU0lPTiBTVEFUVVM8L2gzPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMiBoLTIgYmctZ3JlZW4tNTAwIHJvdW5kZWQtZnVsbCBhbmltYXRlLXB1bHNlXCI+PC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyZWVuLTQwMCBmb250LW1vbm8gdGV4dC1zbVwiPlNUQU5EQlk8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuICAgICAgICAgIHtjcmVhdGVTY2FuTXV0YXRpb24uaXNQZW5kaW5nID8gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcC0zIGJnLWJsdWUtOTAwLzMwIHJvdW5kZWQgYm9yZGVyLWwtNCBib3JkZXItb3JhbmdlLTUwMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgYmctb3JhbmdlLTUwMCByb3VuZGVkLWZ1bGwgYW5pbWF0ZS1wdWxzZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tb25vIHRleHQtc20gdGV4dC13aGl0ZVwiPk1pc3Npb24gaW5pdGlhbGl6YXRpb246IHt0YXJnZXR9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtb3JhbmdlLTUwMCBmb250LW1vbm8gdGV4dC1zbSBmb250LWJvbGRcIj5FWEVDVVRJTkc8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwLTMgYmctZ3JlZW4tOTAwLzMwIHJvdW5kZWQgYm9yZGVyLWwtNCBib3JkZXItZ3JlZW4tNTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTNcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyBiZy1ncmVlbi01MDAgcm91bmRlZC1mdWxsIGFuaW1hdGUtcHVsc2VcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbW9ubyB0ZXh0LXNtIHRleHQtd2hpdGVcIj5SZWNvbm5haXNzYW5jZSBwcm90b2NvbCBhY3RpdmU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmVlbi01MDAgZm9udC1tb25vIHRleHQtc20gZm9udC1ib2xkXCI+Tk9NSU5BTDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHAtMyBiZy1ibHVlLTkwMC8zMCByb3VuZGVkIGJvcmRlci1sLTQgYm9yZGVyLWJsdWUtNTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTNcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyBiZy1ibHVlLTUwMCByb3VuZGVkLWZ1bGwgYW5pbWF0ZS1wdWxzZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tb25vIHRleHQtc20gdGV4dC13aGl0ZVwiPkRhdGEgYWNxdWlzaXRpb24gaW4gcHJvZ3Jlc3M8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ibHVlLTUwMCBmb250LW1vbm8gdGV4dC1zbSBmb250LWJvbGRcIj5BQ1FVSVJJTkc8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMTIgaC0xMiBteC1hdXRvIGJnLWdyYWRpZW50LXRvLWJyIGZyb20tYmx1ZS02MDAgdG8tYmx1ZS04MDAgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci0yIGJvcmRlci1ibHVlLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgPENyb3NzaGFpciBjbGFzc05hbWU9XCJ3LTYgaC02IHRleHQtYmx1ZS0zMDBcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tb25vIHRleHQtYmx1ZS0zMDAgYmxvY2tcIj5cbiAgICAgICAgICAgICAgICBNaXNzaW9uIENvbnRyb2wgcmVhZHkgZm9yIHRhcmdldCBhY3F1aXNpdGlvblxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbW9ubyB0ZXh0LWJsdWUtNDAwIHRleHQtc21cIj5cbiAgICAgICAgICAgICAgICB
255BbGwgc3lzdGVtcyBub21pbmFsIC0gYXdhaXRpbmcgdGFyZ2V0IGNvb3JkaW5hdGVzXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBb0lVLGNBRUEsWUFGQTtBQXBJVixTQUFTLGdCQUFnQjtBQUN6QixTQUFTLGFBQWEsZ0JBQWdCLGdCQUFnQjtBQUN0RCxTQUFTLGNBQWM7QUFDdkIsU0FBUyxhQUFhO0FBQ3RCLFNBQVMsYUFBYTtBQUN0QixTQUFTLFFBQVEsZUFBZSxZQUFZLGVBQWUsbUJBQW1CO0FBQzlFLFNBQVMsV0FBVyxRQUFRLEtBQUssT0FBTyxZQUFZLHFCQUFxQjtBQUN6RSxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLGtCQUFrQjtBQUUzQix3QkFBd0Isb0JBQW9CO0FBQzFDLFFBQU0sQ0FBQyxRQUFRLFNBQVMsSUFBSSxTQUFTLEVBQUU7QUFDdkMsUUFBTSxDQUFDLFVBQVUsV0FBVyxJQUFJLFNBQVMseUJBQXlCO0FBQ2xFLFFBQU0sRUFBRSxNQUFNLElBQUksU0FBUztBQUMzQixRQUFNLGNBQWMsZUFBZTtBQUduQyxRQUFNLEVBQUUsTUFBTSxNQUFNLFdBQVcsYUFBYSxPQUFPLFVBQVUsSUFBSSxTQUFTO0FBQUEsSUFDeEUsVUFBVSxDQUFDLFdBQVc7QUFBQSxJQUN0QixPQUFPO0FBQUEsSUFDUCxzQkFBc0I7QUFBQSxFQUN4QixDQUFDO0FBRUQsUUFBTSxxQkFBcUIsWUFBWTtBQUFBLElBQ3JDLFlBQVksT0FBTyxTQUErQztBQUVoRSxZQUFNLFdBQVc7QUFBQSxRQUNmLFFBQVEsS0FBSztBQUFBLFFBQ2IsVUFBVSxLQUFLO0FBQUEsUUFDZixRQUFRO0FBQUEsUUFDUixVQUFVO0FBQUEsUUFDVixjQUFjO0FBQUEsUUFDZCxTQUFTO0FBQUEsUUFDVCxXQUFXO0FBQUEsUUFDWCxpQkFB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
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.