1import __vite__cjsImport0_react_jsxDevRuntime from "/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=6dae5f06"; const Fragment = __vite__cjsImport0_react_jsxDevRuntime["Fragment"]; const jsxDEV = __vite__cjsImport0_react_jsxDevRuntime["jsxDEV"]; 2import __vite__cjsImport1_react from "/node_modules/.vite/deps/react.js?v=6dae5f06"; const React = __vite__cjsImport1_react.__esModule ? __vite__cjsImport1_react.default : __vite__cjsImport1_react; const useState = __vite__cjsImport1_react["useState"]; 3import { User, Mail, Lock, Save, Camera, Key } from "/node_modules/.vite/deps/lucide-react.js?v=6dae5f06"; 4import { Button } from "/components/ui/button.tsx"; 5import { Input } from "/components/ui/input.tsx"; 6import { Label } from "/components/ui/label.tsx"; 7import { toast } from "/node_modules/.vite/deps/sonner.js?v=6dae5f06"; 8import api from "/src/lib/api.ts"; 9export default function AdminProfile() { 10 const [isLoading, setIsLoading] = useState(false); 11 const [isPasswordLoading, setIsPasswordLoading] = useState(false); 12 const [adminData, setAdminData] = useState({ 13 name: "", 14 email: "" 15 }); 16 const [passwords, setPasswords] = useState({ 17 currentPassword: "", 18 newPassword: "", 19 confirmPassword: "" 20 }); 21 React.useEffect(() => { 22 api.get("/auth/me").then((res) => { 23 setAdminData({ 24 name: res.data.name, 25 email: res.data.email 26 }); 27 }).catch((err) => { 28 toast.error("Failed to fetch profile data"); 29 }); 30 }, []); 31 const handleSave = async (e) => { 32 e.preventDefault(); 33 setIsLoading(true); 34 try { 35 await api.patch("/admin/profile", { 36 name: adminData.name, 37 email: adminData.email 38 }); 39 toast.success("Profile updated successfully"); 40 } catch (error) { 41 toast.error(error.response?.data?.error || "Failed to update profile"); 42 } finally { 43 setIsLoading(false); 44 } 45 }; 46 const handleChangePassword = async (e) => { 47 e.preventDefault(); 48 if (passwords.newPassword !== passwords.confirmPassword) { 49 toast.error("New passwords do not match"); 50 return; 51 } 52 if (passwords.newPassword.length < 6) { 53 toast.error("Password must be at least 6 characters"); 54 return; 55 } 56 setIsPasswordLoading(true); 57 try { 58 await api.patch("/admin/change-password", { 59 currentPassword: passwords.currentPassword, 60 newPassword: passwords.newPassword 61 }); 62 toast.success("Password updated successfully"); 63 setPasswords({ 64 currentPassword: "", 65 newPassword: "", 66 confirmPassword: "" 67 }); 68 } catch (error) { 69 toast.error(error.response?.data?.error || "Failed to update password"); 70 } finally { 71 setIsPasswordLoading(false); 72 } 73 }; 74 return /* @__PURE__ */ jsxDEV("div", { className: "max-w-4xl mx-auto space-y-8", children: [ 75 /* @__PURE__ */ jsxDEV("div", { children: [
76 /* @__PURE__ */ jsxDEV("h1", { className: "text-2xl font-bold text-slate-900", children: "Admin Profile" }, void 0, false, { 77 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 78 lineNumber: 82, 79 columnNumber: 9 80 }, this), 81 /* @__PURE__ */ jsxDEV("p", { className: "text-slate-500", children: "Manage your account settings and security preferences" }, void 0, false, { 82 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 83 lineNumber: 83, 84 columnNumber: 9 85 }, this) 86 ] }, void 0, true, { 87 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 88 lineNumber: 81, 89 columnNumber: 7 90 }, this), 91 /* @__PURE__ */ jsxDEV("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-8", children: [ 92 /* @__PURE__ */ jsxDEV("div", { className: "md:col-span-1", children: /* @__PURE__ */ jsxDEV("div", { className: "bg-white p-6 rounded-2xl border border-slate-100 shadow-sm text-center", children: [ 93 /* @__P
93URE__ */ jsxDEV("div", { className: "relative inline-block", children: [ 94 /* @__PURE__ */ jsxDEV("div", { className: "w-32 h-32 rounded-full bg-red-50 flex items-center justify-center text-[#bb1341] text-4xl font-bold border-4 border-white shadow-lg uppercase", children: adminData.name ? adminData.name.substring(0, 2) : "AD" }, void 0, false, { 95 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 96 lineNumber: 90, 97 columnNumber: 15 98 }, this), 99 /* @__PURE__ */ jsxDEV("button", { className: "absolute bottom-0 right-0 p-2 bg-slate-900 text-white rounded-full border-2 border-white hover:bg-slate-800 transition-colors", children: /* @__PURE__ */ jsxDEV(Camera, { size: 16 }, void 0, false, { 100 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 101 lineNumber: 94, 102 columnNumber: 17 103 }, this) }, void 0, false, { 104 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 105 lineNumber: 93, 106 columnNumber: 15 107 }, this) 108 ] }, void 0, true, { 109 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 110 lineNumber: 89, 111 columnNumber: 13 112 }, this),
113 /* @__PURE__ */ jsxDEV("h2", { className: "mt-4 font-bold text-slate-900 text-lg", children: adminData.name || "Admin" }, void 0, false, { 114 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 115 lineNumber: 97, 116 columnNumber: 13 117 }, this), 118 /* @__PURE__ */ jsxDEV("p", { className: "text-slate-500 text-sm", children: "Administrator" }, void 0, false, { 119 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 120 lineNumber: 98, 121 columnNumber: 13 122 }, this), 123 /* @__PURE__ */ jsxDEV("div", { className: "mt-6 pt-6 border-t border-slate-50 space-y-2", children: [ 124 /* @__PURE__ */ jsxDEV("div", { className: "flex items-center justify-between text-xs", children: [ 125 /* @__PURE__ */ jsxDEV("span", { className: "text-slate-400", children: "Role" }, void 0, false, { 126 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 127 lineNumber: 101, 128 columnNumber: 17 129 }, this),
130 /* @__PURE__ */ jsxDEV("span", { className: "font-semibold text-slate-700", children: "Full Access" }, void 0, false, { 131 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 132 lineNumber: 102, 133 columnNumber: 17 134 }, this) 135 ] }, void 0, true, { 136 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 137 lineNumber: 100, 138 columnNumber: 15 139 }, this), 140 /* @__PURE__ */ jsxDEV("div", { className: "flex items-center justify-between text-xs", children: [ 141 /* @__PURE__ */ jsxDEV("span", { className: "text-slate-400", children: "Member since" }, void 0, false, { 142 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 143 lineNumber: 105, 144 columnNumber: 17 145 }, this), 146 /* @__PURE__ */ jsxDEV("span", { className: "font-semibold text-slate-700", children: "April 2024" }, void 0, false, { 147 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 148 lineNumber: 106, 149 columnNumber: 17 150 }, this) 151 ] }, void 0, true, { 152 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 153 lineNumber: 104, 154 columnNumber: 15 155 }, this) 156 ] }, void 0, true, { 157 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 158 lineNumber: 99, 159 columnNumber: 13 160 }, this) 161 ] }, void 0, true, { 162 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 163 lineNumber: 88, 164 columnNumber: 11 165 }, this) }, void 0, false, { 166 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 167 lineNumber: 87, 168 columnNumber: 9 169 }, this),
170 /* @__PURE__ */ jsxDEV("div", { className: "md:col-span-2 space-y-6", children: [ 171 /* @__PURE__ */ jsxDEV("form", { onSubmit: handleSave, className: "bg-white p-8 rounded-2xl border border-slate-100 shadow-sm space-y-6", children: [ 172 /* @__PURE__ */ jsxDEV("div", { className: "flex items-center space-x-2 text-slate-900 font-bold border-b border-slate-50 pb-4 mb-6", children: [ 173 /* @__PURE__ */ jsxDEV(User, { size: 20, className: "text-[#bb1341]" }, void 0, false, { 174 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 175 lineNumber: 115, 176 columnNumber: 15 177 }, this), 178 /* @__PURE__ */ jsxDEV("span", { children: "Personal Information" }, void 0, false, { 179 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 180 lineNumber: 116, 181 columnNumber: 15 182 }, this) 183 ] }, void 0, true, { 184 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 185 lineNumber: 114, 186 columnNumber: 13 187 }, this),
188 /* @__PURE__ */ jsxDEV("div", { className: "grid grid-cols-1 gap-6", children: /* @__PURE__ */ jsxDEV("div", { className: "space-y-2", children: [ 189 /* @__PURE__ */ jsxDEV(Label, { htmlFor: "name", children: "Full Name" }, void 0, false, { 190 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 191 lineNumber: 121, 192 columnNumber: 17 193 }, this), 194 /* @__PURE__ */ jsxDEV( 195 Input, 196 { 197 id: "name", 198 value: adminData.name, 199 onChange: (e) => setAdminData({ ...adminData, name: e.target.value }), 200 className: "rounded-xl border-slate-200", 201 required: true 202 }, 203 void 0, 204 false, 205 { 206 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 207 lineNumber: 122, 208 columnNumber: 17 209 }, 210 this 211 ) 212 ] }, void 0, true, { 213 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 214 lineNumber: 120, 215 columnNumber: 15 216 }, this) }, void 0, false, { 217 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 218 lineNumber: 119, 219 columnNumber: 13 220 }, this),
221 /* @__PURE__ */ jsxDEV("div", { className: "space-y-2", children: [ 222 /* @__PURE__ */ jsxDEV(Label, { htmlFor: "email", children: "Email Address" }, void 0, false, { 223 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 224 lineNumber: 133, 225 columnNumber: 15 226 }, this), 227 /* @__PURE__ */ jsxDEV("div", { className: "relative", children: [ 228 /* @__PURE__ */ jsxDEV(Mail, { className: "absolute left-3 top-1/2 -translate-y-1/2 text-slate-400", size: 18 }, void 0, false, { 229 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 230 lineNumber: 135, 231 columnNumber: 17 232 }, this), 233 /* @__PURE__ */ jsxDEV( 234 Input, 235 { 236 id: "email", 237 type: "email", 238 value: adminData.email, 239 onChange: (e) => setAdminData({ ...adminData, email: e.target.value }), 240 className: "pl-10 rounded-xl border-slate-200", 241 required: true 242 }, 243 void 0, 244 false, 245 { 246 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 247 lineNumber: 136, 248 columnNumber: 17 249 }, 250 this 251 ) 252 ] }, void 0, true, { 253 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 254 lineNumber: 134, 255 columnNumber: 15 256 }, this) 257 ] }, void 0, true, { 258 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 259 lineNumber: 132, 260 columnNumber: 13 261 }, this),
262 /* @__PURE__ */ jsxDEV("div", { className: "pt-4", children: /* @__PURE__ */ jsxDEV(Button, { type: "submit", disabled: isLoading, className: "bg-slate-900 hover:bg-slate-800 text-white rounded-xl px-8 h-12", children: isLoading ? "Saving..." : /* @__PURE__ */ jsxDEV(Fragment, { children: [ 263 /* @__PURE__ */ jsxDEV(Save, { size: 18, className: "mr-2" }, void 0, false, { 264 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 265 lineNumber: 151, 266 columnNumber: 21 267 }, this), 268 " Save Changes" 269 ] }, void 0, true, { 270 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 271 lineNumber: 150, 272 columnNumber: 19 273 }, this) }, void 0, false, { 274 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 275 lineNumber: 148, 276 columnNumber: 15 277 }, this) }, void 0, false, { 278 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 279 lineNumber: 147, 280 columnNumber: 13 281 }, this) 282 ] }, void 0, true, { 283 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 284 lineNumber: 113, 285 columnNumber: 11 286 }, this),
287 /* @__PURE__ */ jsxDEV("form", { onSubmit: handleChangePassword, className: "bg-white p-8 rounded-2xl border border-slate-100 shadow-sm space-y-6", children: [ 288 /* @__PURE__ */ jsxDEV("div", { className: "flex items-center space-x-2 text-slate-900 font-bold border-b border-slate-50 pb-4 mb-6", children: [ 289 /* @__PURE__ */ jsxDEV(Lock, { size: 20, className: "text-[#bb1341]" }, void 0, false, { 290 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 291 lineNumber: 160, 292 columnNumber: 15 293 }, this), 294 /* @__PURE__ */ jsxDEV("span", { children: "Security Settings" }, void 0, false, { 295 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 296 lineNumber: 161, 297 columnNumber: 15 298 }, this) 299 ] }, void 0, true, { 300 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 301 lineNumber: 159, 302 columnNumber: 13 303 }, this),
304 /* @__PURE__ */ jsxDEV("div", { className: "space-y-4", children: [ 305 /* @__PURE__ */ jsxDEV("div", { className: "space-y-2", children: [ 306 /* @__PURE__ */ jsxDEV(Label, { htmlFor: "currentPassword", children: "Current Password" }, void 0, false, { 307 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 308 lineNumber: 166, 309 columnNumber: 17 310 }, this), 311 /* @__PURE__ */ jsxDEV("div", { className: "relative", children: [ 312 /* @__PURE__ */ jsxDEV(Key, { className: "absolute left-3 top-1/2 -translate-y-1/2 text-slate-400", size: 18 }, void 0, false, { 313 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 314 lineNumber: 168, 315 columnNumber: 19 316 }, this), 317 /* @__PURE__ */ jsxDEV( 318 Input, 319 { 320 id: "currentPassword", 321 type: "password", 322 value: passwords.currentPassword, 323 onChange: (e) => setPasswords({ ...passwords, currentPassword: e.target.value }), 324 className: "pl-10 rounded-xl border-slate-200", 325 required: true 326 }, 327 void 0, 328 false, 329 { 330 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 331 lineNumber: 169, 332 columnNumber: 19 333 }, 334 this 335 ) 336 ] }, void 0, true, { 337 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 338 lineNumber: 167, 339 columnNumber: 17 340 }, this) 341 ] }, void 0, true, { 342 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 343 lineNumber: 165, 344 columnNumber: 15 345 }, this),
346 /* @__PURE__ */ jsxDEV("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-6", children: [ 347 /* @__PURE__ */ jsxDEV("div", { className: "space-y-2", children: [ 348 /* @__PURE__ */ jsxDEV(Label, { htmlFor: "newPassword", children: "New Password" }, void 0, false, { 349 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 350 lineNumber: 182, 351 columnNumber: 19 352 }, this), 353 /* @__PURE__ */ jsxDEV( 354 Input, 355 { 356 id: "newPassword", 357 type: "password", 358 value: passwords.newPassword, 359 onChange: (e) => setPasswords({ ...passwords, newPassword: e.target.value }), 360 className: "rounded-xl border-slate-200", 361 required: true 362 }, 363 void 0, 364 false, 365 { 366 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 367 lineNumber: 183, 368 columnNumber: 19 369 }, 370 this 371 ) 372 ] }, void 0, true, { 373 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 374 lineNumber: 181, 375 columnNumber: 17 376 }, this),
377 /* @__PURE__ */ jsxDEV("div", { className: "space-y-2", children: [ 378 /* @__PURE__ */ jsxDEV(Label, { htmlFor: "confirmPassword", children: "Confirm New Password" }, void 0, false, { 379 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 380 lineNumber: 193, 381 columnNumber: 19 382 }, this), 383 /* @__PURE__ */ jsxDEV( 384 Input, 385 { 386 id: "confirmPassword", 387 type: "password", 388 value: passwords.confirmPassword, 389 onChange: (e) => setPasswords({ ...passwords, confirmPassword: e.target.value }), 390 className: "rounded-xl border-slate-200", 391 required: true 392 }, 393 void 0, 394 false, 395 { 396 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 397 lineNumber: 194, 398 columnNumber: 19 399 }, 400 this 401 ) 402 ] }, void 0, true, { 403 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 404 lineNumber: 192, 405 columnNumber: 17 406 }, this) 407 ] }, void 0, true, { 408 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 409 lineNumber: 180, 410 columnNumber: 15 411 }, this),
412 /* @__PURE__ */ jsxDEV("div", { className: "pt-4", children: /* @__PURE__ */ jsxDEV(Button, { type: "submit", disabled: isPasswordLoading, className: "btn-gradient border-none text-white rounded-xl px-8 h-12", children: isPasswordLoading ? "Updating..." : "Update Password" }, void 0, false, { 413 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 414 lineNumber: 206, 415 columnNumber: 17 416 }, this) }, void 0, false, { 417 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 418 lineNumber: 205, 419 columnNumber: 15 420 }, this) 421 ] }, void 0, true, { 422 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 423 lineNumber: 164, 424 columnNumber: 13 425 }, this) 426 ] }, void 0, true, { 427 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 428 lineNumber: 158, 429 columnNumber: 11 430 }, this) 431 ] }, void 0, true, { 432 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 433 lineNumber: 112, 434 columnNumber: 9 435 }, this) 436 ] }, void 0, true, { 437 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 438 lineNumber: 86, 439 columnNumber: 7 440 }, this) 441 ] }, void 0, true, { 442 fileName: "/home/myinteri/nodejs/src/pages/admin/AdminProfile.tsx", 443 lineNumber: 80, 444 columnNumber: 5 445 }, this); 446} 447 448//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFkbWluUHJvZmlsZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBVc2VyLCBNYWlsLCBMb2NrLCBTYXZlLCBDYW1lcmEsIEtleSB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nO1xyXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCc7XHJcbmltcG9ydCB7IExhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2xhYmVsJztcclxuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdzb25uZXInO1xyXG5pbXBvcnQgYXBpIGZyb20gJ0Avc3JjL2xpYi9hcGknO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQWRtaW5Qcm9maWxlKCkge1xyXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgY29uc3QgW2lzUGFzc3dvcmRMb2FkaW5nLCBzZXRJc1Bhc3N3b3JkTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgY29uc3QgW2FkbWluRGF0YSwgc2V0QWRtaW5EYXRhXSA9IHVzZVN0YXRlKHtcclxuICAgIG5hbWU6ICcnLFxyXG4gICAgZW1haWw6ICcnXHJcbiAgfSk7XHJcbiAgY29uc3QgW3Bhc3N3b3Jkcywgc2V0UGFzc3dvcmRzXSA9IHVzZVN0YXRlKHtcclxuICAgIGN1cnJlbnRQYXNzd29yZDogJycsXHJcbiAgICBuZXdQYXNzd29yZDogJycsXHJcbiAgICBjb25maXJtUGFzc3dvcmQ6ICcnXHJcbiAgfSk7XHJcblxyXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBhcGkuZ2V0KCcvYXV0aC9tZScpLnRoZW4ocmVzID0+IHtcclxuICAgICAgc2V0QWRtaW5EYXRhKHtcclxuICAgICAgICBuYW1lOiByZXMuZGF0YS5uYW1lLFxyXG4gICAgICAgIGVtYWlsOiByZXMuZGF0YS5lbWFpbFxyXG4gICAgICB9KTtcclxuICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgIHRvYXN0LmVycm9yKFwiRmFpbGVkIHRvIGZldGNoIHByb2ZpbGUgZGF0YVwiKTtcclxuICAgIH0pO1xyXG4gIH0sIFtdKTtcclxuXHJcbiAgY29uc3QgaGFuZGxlU2F2ZSA9IGFzeW5jIChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIHNldElzTG9hZGluZyh0cnVlKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IGFwaS5wYXRjaCgnL2FkbWluL3Byb2ZpbGUnLCB7XHJcbiAgICAgICAgbmFtZTogYWRtaW5EYXRhLm5hbWUsXHJcbiAgICAgICAgZW1haWw6IGFkbWluRGF0YS5lbWFpbFxyXG4gICAgICB9KTtcclxuICAgICAgdG9hc3Quc3VjY2VzcygnUHJvZmlsZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICB0b2FzdC5lcnJvcihlcnJvci5yZXNwb25zZT8uZGF0YT8uZXJyb3IgfHwgJ0ZhaWxlZCB0byB1cGRhdGUgcHJvZmlsZScpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVDaGFuZ2VQYXNzd29yZCA9IGFzeW5jIChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmIChwYXNzd29yZHMubmV3UGFzc3dvcmQgIT09IHBhc3N3b3Jkcy5jb25maXJtUGFzc3dvcmQpIHtcclxuICAgICAgdG9hc3QuZXJyb3IoXCJOZXcgcGFzc3dvcmRzIGRvIG5vdCBtYXRjaFwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhc3N3b3Jkcy5uZXdQYXNzd29yZC5sZW5ndGggPCA2KSB7XHJcbiAgICAgIHRvYXN0LmVycm9yKFwiUGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCA2IGNoYXJhY3RlcnNcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJc1Bhc3N3b3JkTG9hZGluZyh0cnVlKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IGFwaS5wYXRjaCgnL2FkbWluL2NoYW5nZS1wYXNzd29yZCcsIHtcclxuICAgICAgICBjdXJyZW50UGFzc3dvcmQ6IHBhc3N3b3Jkcy5jdXJyZW50UGFzc3dvcmQsXHJcbiAgICAgICAgbmV3
448UGFzc3dvcmQ6IHBhc3N3b3Jkcy5uZXdQYXNzd29yZFxyXG4gICAgICB9KTtcclxuICAgICAgdG9hc3Quc3VjY2VzcygnUGFzc3dvcmQgdXBkYXRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgc2V0UGFzc3dvcmRzKHtcclxuICAgICAgICBjdXJyZW50UGFzc3dvcmQ6ICcnLFxyXG4gICAgICAgIG5ld1Bhc3N3b3JkOiAnJyxcclxuICAgICAgICBjb25maXJtUGFzc3dvcmQ6ICcnXHJcbiAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICB0b2FzdC5lcnJvcihlcnJvci5yZXNwb25zZT8uZGF0YT8uZXJyb3IgfHwgJ0ZhaWxlZCB0byB1cGRhdGUgcGFzc3dvcmQnKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHNldElzUGFzc3dvcmRMb2FkaW5nKGZhbHNlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy00eGwgbXgtYXV0byBzcGFjZS15LThcIj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8aDEgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtc2xhdGUtOTAwXCI+QWRtaW4gUHJvZmlsZTwvaDE+XHJcbiAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbGF0ZS01MDBcIj5NYW5hZ2UgeW91ciBhY2NvdW50IHNldHRpbmdzIGFuZCBzZWN1cml0eSBwcmVmZXJlbmNlczwvcD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTMgZ2FwLThcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1kOmNvbC1zcGFuLTFcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctd2h
448pdGUgcC02IHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItc2xhdGUtMTAwIHNoYWRvdy1zbSB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGlubGluZS1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zMiBoLTMyIHJvdW5kZWQtZnVsbCBiZy1yZWQtNTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1bI2JiMTM0MV0gdGV4dC00eGwgZm9udC1ib2xkIGJvcmRlci00IGJvcmRlci13aGl0ZSBzaGFkb3ctbGcgdXBwZXJjYXNlXCI+XHJcbiAgICAgICAgICAgICAgICB7YWRtaW5EYXRhLm5hbWUgPyBhZG1pbkRhdGEubmFtZS5zdWJzdHJpbmcoMCwgMikgOiAnQUQnfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiYWJzb2x1dGUgYm90dG9tLTAgcmlnaHQtMCBwLTIgYmctc2xhdGUtOTAwIHRleHQtd2hpdGUgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZSBob3ZlcjpiZy1zbGF0ZS04MDAgdHJhbnNpdGlvbi1jb2xvcnNcIj5cclxuICAgICAgICAgICAgICAgIDxDYW1lcmEgc2l6ZT17MTZ9IC8+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwibXQtNCBmb250LWJvbGQgdGV4dC1zbGF0ZS05MDAgdGV4dC1sZ1wiPnthZG1pbkRhdGEubmFtZSB8fCAnQWRtaW4nfTwvaDI+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc2xhdGUtNTAwIHRleHQtc21cIj5BZG1pbmlzdHJhdG9yPC9wPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTYgcHQtNiBib3JkZXItdCBib3JkZXItc2xhdGUtNTAgc3BhY2UteS0yXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gdGV4dC14c1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbGF0ZS00MDBcIj5Sb2xlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTcwMFwiPkZ1bGwgQWNjZXNzPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHRleHQteHNcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc2xhdGUtNDAwXCI+TWVtYmVyIHNpbmNlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTcwMFwiPkFwcmlsIDIwMjQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWQ6Y29sLXNwYW4tMiBzcGFjZS15LTZcIj5cclxuICAgICAgICAgIDxmb3JtIG9uU3VibWl0PXtoYW5kbGVTYXZlfSBjbGFzc05hbWU9XCJiZy13aGl0ZSBwLTggcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1zbGF0ZS0xMDAgc2hhZG93LXNtIHNwYWNlLXktNlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiB0ZXh0LXNsYXRlLTkwMCBmb250LWJvbGQgYm9yZGVyLWIgYm9yZGVyLXNsYXRlLTUwIHBiLTQgbWItNlwiPlxyXG4gICAgICAgICAgICAgIDxVc2VyIHNpemU9ezIwfSBjbGFzc05hbWU9XCJ0ZXh0LVsjYmIxMzQxXVwiIC8+XHJcbiAgICAgICAgICAgICAgPHNwYW4+UGVyc29uYWwgSW5mb3JtYXRpb248L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0xIGdhcC02XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cclxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwibmFtZVwiPkZ1bGwgTmFtZTwvTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8SW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgIGlkPVwibmFtZVwiIFxyXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17YWRtaW5EYXRhLm5hbWV9IFxyXG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEFkbWluRGF0YSh7Li4uYWRtaW5EYXRhLCBuYW1lOiBlLnRhcmdldC52YWx1ZX0pfVxyXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLXhsIGJvcmRlci1zbGF0ZS0yMDBcIiBcclxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cclxuICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImVtYWlsXCI+RW1haWwgQWRkcmVzczwvTGFiZWw+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgPE1haWwgY2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0zIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LXNsYXRlLTQwMFwiIHNpemU9ezE4fSAvPlxyXG4gICAgICAgICAgICAgICAgPElucHV0IFxyXG4gICAgICAgICAgICAgICAgICBpZD1cImVtYWlsXCIgXHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJlbWFpbFwiIFxyXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17YWRtaW5EYXRhLmVtYWlsfSBcclxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRBZG1pbkRhdGEoey4uLmFkbWluRGF0YSwgZW1haWw6IGUudGFyZ2V0LnZhbHVlfSl9XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInBsLTEwIHJvdW5kZWQteGwgYm9yZGVyLXNsYXRlLTIwMFwiIFxyXG4gICAgICAgICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInB0LTRcIj5cclxuICAgICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBkaXNhYmxlZD17aXNMb2FkaW5nfSBjbGFzc05hbWU9XCJiZy1zbGF0ZS05MDAgaG92ZXI6Ymctc2xhdGUtODAwIHRleHQtd2hpdGUgcm91bmRlZC14bCBweC04IGgtMTJcIj5cclxuICAgICAgICAgICAgICAgI
448Htpc0xvYWRpbmcgPyAnU2F2aW5nLi4uJyA6IChcclxuICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICA8U2F2ZSBzaXplPXsxOH0gY2xhc3NOYW1lPVwibXItMlwiIC8+IFNhdmUgQ2hhbmdlc1xyXG4gICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9mb3JtPlxyXG5cclxuICAgICAgICAgIDxmb3JtIG9uU3VibWl0PXtoYW5kbGVDaGFuZ2VQYXNzd29yZH0gY2xhc3NOYW1lPVwiYmctd2hpdGUgcC04IHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItc2xhdGUtMTAwIHNoYWRvdy1zbSBzcGFjZS15LTZcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgdGV4dC1zbGF0ZS05MDAgZm9udC1ib2xkIGJvcmRlci1iIGJvcmRlci1zbGF0ZS01MCBwYi00IG1iLTZcIj5cclxuICAgICAgICAgICAgICA8TG9jayBzaXplPXsyMH0gY2xhc3NOYW1lPVwidGV4dC1bI2JiMTM0MV1cIiAvPlxyXG4gICAgICAgICAgICAgIDxzcGFuPlNlY3VyaXR5IFNldHRpbmdzPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS00XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cclxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiY3VycmVudFBhc3N3b3JkXCI+Q3VycmVudCBQYXNzd29yZDwvTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxLZXkgY2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0zIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LXNsYXRlLTQwMFwiIHNpemU9ezE4fSAvPlxyXG4gICAgICAgICAgICAgICAgICA8SW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJjdXJyZW50UGFzc3dvcmRcIiBcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIiBcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cGFzc3dvcmRzLmN1cnJlbnRQYXNzd29yZH1cclxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFBhc3N3b3Jkcyh7Li4ucGFzc3dvcmRzLCBjdXJyZW50UGFzc3dvcmQ6IGUudGFyZ2V0LnZhbHVlfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicGwtMTAgcm91bmRlZC14bCBib3JkZXItc2xhdGUtMjAwXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMSBzbTpncmlkLWNvbHMtMiBnYXAtNlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJuZXdQYXNzd29yZFwiPk5ldyBQYXNzd29yZDwvTGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxJbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICBpZD1cIm5ld1Bhc3N3b3JkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Bhc3N3b3Jkcy5uZXdQYXNzd29yZH1cclxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFBhc3N3b3Jkcyh7Li4ucGFzc3dvcmRzLCBuZXdQYXNzd29yZDogZS50YXJnZXQudmFsdWV9KX1cclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLXhsIGJvcmRlci1zbGF0ZS0yMDBcIiBcclxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImNvbmZpcm1QYXNzd29yZFwiPkNvbmZpcm0gTmV3IFBhc3N3b3JkPC9MYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPElucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiY29uZmlybVBhc3N3b3JkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Bhc3N3b3Jkcy5jb25maXJtUGFzc3dvcmR9XHJcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRQYXNzd29yZHMoey4uLnBhc3N3b3JkcywgY29uZmlybVBhc3N3b3JkOiBlLnRhcmdldC52YWx1ZX0pfVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQteGwgYm9yZGVyLXNsYXRlLTIwMFwiIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwdC00XCI+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBkaXNhYmxlZD17aXNQYXNzd29yZExvYWRpbmd9IGNsYXNzTmFtZT1cImJ0bi1ncmFkaWVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlIHJvdW5kZWQteGwgcHgtOCBoLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgIHtpc1Bhc3N3b3JkTG9hZGluZyA/ICdVcGRhdGluZy4uLicgOiAnVXBkYXRlIFBhc3N3b3JkJ31cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICApO
4481xyXG59XHJcbiJdLCJtYXBwaW5ncyI6IkFBaUZRLFNBb0VVLFVBcEVWO0FBakZSLE9BQU8sU0FBUyxnQkFBZ0I7QUFDaEMsU0FBUyxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsV0FBVztBQUNwRCxTQUFTLGNBQWM7QUFDdkIsU0FBUyxhQUFhO0FBQ3RCLFNBQVMsYUFBYTtBQUN0QixTQUFTLGFBQWE7QUFDdEIsT0FBTyxTQUFTO0FBRWhCLHdCQUF3QixlQUFlO0FBQ3JDLFFBQU0sQ0FBQyxXQUFXLFlBQVksSUFBSSxTQUFTLEtBQUs7QUFDaEQsUUFBTSxDQUFDLG1CQUFtQixvQkFBb0IsSUFBSSxTQUFTLEtBQUs7QUFDaEUsUUFBTSxDQUFDLFdBQVcsWUFBWSxJQUFJLFNBQVM7QUFBQSxJQUN6QyxNQUFNO0FBQUEsSUFDTixPQUFPO0FBQUEsRUFDVCxDQUFDO0FBQ0QsUUFBTSxDQUFDLFdBQVcsWUFBWSxJQUFJLFNBQVM7QUFBQSxJQUN6QyxpQkFBaUI7QUFBQSxJQUNqQixhQUFhO0FBQUEsSUFDYixpQkFBaUI7QUFBQSxFQUNuQixDQUFDO0FBRUQsUUFBTSxVQUFVLE1BQU07QUFDcEIsUUFBSSxJQUFJLFVBQVUsRUFBRSxLQUFLLFNBQU87QUFDOUIsbUJBQWE7QUFBQSxRQUNYLE1BQU0sSUFBSSxLQUFLO0FBQUEsUUFDZixPQUFPLElBQUksS0FBSztBQUFBLE1BQ2xCLENBQUM7QUFBQSxJQUNILENBQUMsRUFBRSxNQUFNLFNBQU87QUFDZCxZQUFNLE1BQU0sOEJBQThCO0FBQUEsSUFDNUMsQ0FBQztBQUFBLEVBQ0gsR0FBRyxDQUFDLENBQUM7QUFFTCxRQUFNLGFBQWEsT0FBTyxNQUF1QjtBQUMvQyxNQUFFLGVBQWU7QUFDakIsaUJBQWEsSUFBSTtBQUNqQixRQUFJO0FBQ0YsWUFBTSxJQUFJLE1BQU0sa0JBQWtCO0FBQUEsUUFDaEMsTUFBTSxVQUFVO0FBQUEsUUFDaEIsT0FBTyxVQUFVO0FBQUEsTUFDbkIsQ0FBQztBQUNELFlBQU0sUUFBUSw4QkFBOEI7QUFBQSxJQUM5QyxTQUFTLE9BQV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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.