1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/components/betting/history/MyMember.jsx");import __vite__cjsImport0_react_jsxDevRuntime from "/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=b0f315c6"; const jsxDEV = __vite__cjsImport0_react_jsxDevRuntime["jsxDEV"]; 2import * as RefreshRuntime from "/@react-refresh"; 3const inWebWorker = typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope; 4let prevRefreshReg; 5let prevRefreshSig; 6if (import.meta.hot && !inWebWorker) { 7 if (!window.$RefreshReg$) { 8 throw new Error( 9 "@vitejs/plugin-react can't detect preamble. Something is wrong." 10 ); 11 } 12 prevRefreshReg = window.$RefreshReg$; 13 prevRefreshSig = window.$RefreshSig$; 14 window.$RefreshReg$ = RefreshRuntime.getRefreshReg("/root/pub/BettingApp/src/components/betting/history/MyMember.jsx"); 15 window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform; 16} 17var _s = $RefreshSig$(); 18import __vite__cjsImport3_react from "/node_modules/.vite/deps/react.js?v=b0f315c6"; const React = __vite__cjsImport3_react.__esModule ? __vite__cjsImport3_react.default : __vite__cjsImport3_react; const useState = __vite__cjsImport3_react["useState"]; const useEffect = __vite__cjsImport3_react["useEffect"]; 19import { useTranslation } from "/node_modules/.vite/deps/react-i18next.js?v=b0f315c6"; 20import { historyService } from "/src/services/historyService.js"; 21function MyMember() { 22 _s(); 23 const { t } = useTranslation(); 24 const [memberData, setMemberData] = useState([]); 25 const [loading, setLoading] = useState(false); 26 const [error, setError] = useState(null); 27 const [totalCount, setTotalCount] = useState(0); 28 const [currentPage, setCurrentPage] = useState(1); 29 const [totalPages, setTotalPages] = useState(1); 30 const [totalRecords, setTotalRecords] = useState(0); 31 const [copiedId, setCopiedId] = useState(null); 32 const fetchOverallTotal = async () => { 33 try { 34 const response = await historyService.getMemberCount({ page: 1, per: 1e3 }); 35 if (response.success !== false) { 36 const allMembers = response.rows || []; 37 const overallTotal = allMembers.reduce((sum, member) => sum + parseInt(member.cnt || 0), 0); 38 setTotalCount(overallTotal); 39 } 40 } catch (err) { 41 console.error("Error fetching overall total:", err); 42 setTotalCount(0); 43 } 44 }; 45 const fetchMemberData = async (page = 1) => { 46 setLoading(true); 47 setError(null); 48 try { 49 const response = await historyService.getMemberCount({ page, per: 20 }); 50 if (response.success !== false) { 51 const memberRows = response.rows || []; 52 setMemberData(memberRows); 53 setTotalRecords(response.total || 0); 54 setTotalPages(Math.ceil((response.total || 0) / 20)); 55 setCurrentPage(page); 56 } else { 57 throw new Error(response.message || "Failed to fetch member data"); 58 } 59 } catch (err) { 60 setError(err.message); 61 } finally { 62 setLoading(false); 63 } 64 }; 65 useEffect(() => { 66 fetchOverallTotal(); 67 fetchMemberData(1); 68 }, []); 69 const handlePageChange = (page) => { 70 fetchMemberData(page); 71 }; 72 const getMemberColor = (member) => { 73 if (member.iscms === 1 || member.iscms === "1") return "#9900FF"; 74 if (member.isreferal === 1 || member.isreferal === "1") { 75 if (member.iscms === 0 || member.iscms === "0") return "#00FF00"; 76 } 77 if (member.isreferal === 0 || member.isreferal === "0") return "#0066FF"; 78 return "#ffffff"; 79 }; 80 const getFqmStatus = (member) => { 81 if (member.iscms === 1 || member.iscms === "1") return "PURPLE"; 82 if (member.isreferal === 1 || member.isreferal === "1") { 83 if (member.iscms === 0 || member.iscms === "0") return "GREEN"; 84 } 85 if (member.isreferal === 0 || member.isreferal === "0") return "BLUE"; 86 return "UNKNOWN"; 87 }; 88 const handleCopyId = async (id) => { 89 try { 90 await navigator.clipboard.writeText(id); 91 setCopiedId(id); 92 setTimeout(() => { 93 setCopiedId(null); 94 }, 2e3); 95 } catch (err) { 96 console.error("Failed to copy ID:", err); 97 } 98 }; 99 if (loading) { 100 return /* @__PURE__ */ jsxDEV("div", { className: "history-container", children: [
101 /* @__PURE__ */ jsxDEV("div", { className: "history-header", children: /* @__PURE__ */ jsxDEV("h2", { children: t("ddmr.myMember.title", "My Members") }, void 0, false, { 102 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 103 lineNumber: 125, 104 columnNumber: 11 105 }, this) }, void 0, false, { 106 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 107 lineNumber: 124, 108 columnNumber: 9 109 }, this), 110 /* @__PURE__ */ jsxDEV("div", { className: "loading-container", children: [ 111 /* @__PURE__ */ jsxDEV("div", { className: "loading-spinner" }, void 0, false, { 112 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 113 lineNumber: 128, 114 columnNumber: 11 115 }, this), 116 /* @__PURE__ */ jsxDEV("p", { children: t("common.loading", "Loading...") }, void 0, false, { 117 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 118 lineNumber: 129, 119 columnNumber: 11 120 }, this) 121 ] }, void 0, true, { 122 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 123 lineNumber: 127, 124 columnNumber: 9 125 }, this) 126 ] }, void 0, true, { 127 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 128 lineNumber: 123, 129 columnNumber: 7 130 }, this); 131 } 132 if (error) { 133 return /* @__PURE__ */ jsxDEV("div", { className: "history-container", children: [
134 /* @__PURE__ */ jsxDEV("div", { className: "history-header", children: /* @__PURE__ */ jsxDEV("h2", { children: t("ddmr.myMember.title", "My Members") }, void 0, false, { 135 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 136 lineNumber: 139, 137 columnNumber: 11 138 }, this) }, void 0, false, { 139 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 140 lineNumber: 138, 141 columnNumber: 9 142 }, this), 143 /* @__PURE__ */ jsxDEV("div", { className: "error-container", children: [ 144 /* @__PURE__ */ jsxDEV("p", { className: "error-message", children: error }, void 0, false, { 145 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 146 lineNumber: 142, 147 columnNumber: 11 148 }, this), 149 /* @__PURE__ */ jsxDEV("button", { onClick: fetchMemberData, className: "retry-button", children: t("common.retry", "Retry") }, void 0, false, { 150 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 151 lineNumber: 143, 152 columnNumber: 11 153 }, this) 154 ] }, void 0, true, { 155 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 156 lineNumber: 141, 157 columnNumber: 9 158 }, this) 159 ] }, void 0, true, { 160 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 161 lineNumber: 137, 162 columnNumber: 7 163 }, this); 164 } 165 return /* @__PURE__ */ jsxDEV("div", { className: "history-container", children: [ 166 /* @__PURE__ */ jsxDEV("div", { className: "history-header", children: /* @__PURE__ */ jsxDEV("h2", { children: t("ddmr.myMember.title", "My Member") }, void 0, false, { 167 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 168 lineNumber: 154, 169 columnNumber: 9 170 }, this) }, void 0, false, { 171 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 172 lineNumber: 153, 173 columnNumber: 7 174 }, this), 175 /* @__PURE__ */ jsxDEV("div", { className: "table-container", children: [
176 /* @__PURE__ */ jsxDEV("table", { className: "history-table", children: [ 177 /* @__PURE__ */ jsxDEV("thead", { children: /* @__PURE__ */ jsxDEV("tr", { children: [ 178 /* @__PURE__ */ jsxDEV("th", { children: t("ddmr.myMember.table.id", "ID") }, void 0, false, { 179 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 180 lineNumber: 162, 181 columnNumber: 15 182 }, this), 183 /* @__PURE__ */ jsxDEV("th", { children: t("ddmr.myMember.table.fqmStatus", "FQM Status") }, void 0, false, { 184 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 185 lineNumber: 163, 186 columnNumber: 15 187 }, this), 188 /* @__PURE__ */ jsxDEV("th", { children: t("ddmr.myMember.table.userCount", "Sub-Members") }, void 0, false, { 189 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 190 lineNumber: 164, 191 columnNumber: 15 192 }, this) 193 ] }, void 0, true, { 194 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 195 lineNumber: 161, 196 columnNumber: 13 197 }, this) }, void 0, false, { 198 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 199 lineNumber: 160, 200 columnNumber: 11 201 }, this),
202 /* @__PURE__ */ jsxDEV("tbody", { children: [ 203 memberData.map( 204 (member, index) => /* @__PURE__ */ jsxDEV("tr", { children: [ 205 /* @__PURE__ */ jsxDEV("td", { children: /* @__PURE__ */ jsxDEV( 206 "span", 207 { 208 style: { 209 color: getMemberColor(member), 210 fontWeight: "bold", 211 cursor: "pointer", 212 display: "inline-flex", 213 alignItems: "center", 214 gap: "8px" 215 }, 216 onClick: () => handleCopyId(member.uid || member.id || ""), 217 title: "Click to copy ID", 218 children: [ 219 member.uid || member.id || "-", 220 copiedId === (member.uid || member.id) ? /* @__PURE__ */ jsxDEV("i", { className: "fas fa-check", style: { color: "#00FF00", fontSize: "12px" } }, void 0, false, { 221 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 222 lineNumber: 185, 223 columnNumber: 19 224 }, this) : /* @__PURE__ */ jsxDEV("i", { className: "fas fa-copy", style: { fontSize: "12px", opacity: 0.7 } }, void 0, false, { 225 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 226 lineNumber: 187, 227 columnNumber: 19 228 }, this) 229 ] 230 }, 231 void 0, 232 true, 233 { 234 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 235 lineNumber: 171, 236 columnNumber: 19 237 }, 238 this 239 ) }, void 0, false, { 240 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 241 lineNumber: 170, 242 columnNumber: 17 243 }, this),
244 /* @__PURE__ */ jsxDEV("td", { children: /* @__PURE__ */ jsxDEV( 245 "span", 246 { 247 style: { 248 color: getMemberColor(member), 249 fontWeight: "bold" 250 }, 251 children: getFqmStatus(member) 252 }, 253 void 0, 254 false, 255 { 256 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 257 lineNumber: 192, 258 columnNumber: 19 259 }, 260 this 261 ) }, void 0, false, { 262 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 263 lineNumber: 191, 264 columnNumber: 17 265 }, this), 266 /* @__PURE__ */ jsxDEV("td", { children: member.cnt || 0 }, void 0, false, { 267 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 268 lineNumber: 201, 269 columnNumber: 17 270 }, this) 271 ] }, index, true, { 272 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 273 lineNumber: 169, 274 columnNumber: 13 275 }, this) 276 ),
277 /* @__PURE__ */ jsxDEV("tr", { className: "total-row", children: [ 278 /* @__PURE__ */ jsxDEV("td", { children: /* @__PURE__ */ jsxDEV("strong", { children: t("ddmr.myMember.table.total", "TOTAL") }, void 0, false, { 279 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 280 lineNumber: 207, 281 columnNumber: 17 282 }, this) }, void 0, false, { 283 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 284 lineNumber: 206, 285 columnNumber: 15 286 }, this), 287 /* @__PURE__ */ jsxDEV("td", {}, void 0, false, { 288 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 289 lineNumber: 209, 290 columnNumber: 15 291 }, this), 292 /* @__PURE__ */ jsxDEV("td", { children: /* @__PURE__ */ jsxDEV("strong", { children: totalCount }, void 0, false, { 293 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 294 lineNumber: 211, 295 columnNumber: 17 296 }, this) }, void 0, false, { 297 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 298 lineNumber: 210, 299 columnNumber: 15 300 }, this) 301 ] }, void 0, true, { 302 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 303 lineNumber: 205, 304 columnNumber: 13 305 }, this) 306 ] }, void 0, true, { 307 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 308 lineNumber: 167, 309 columnNumber: 11 310 }, this) 311 ] }, void 0, true, { 312 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 313 lineNumber: 159, 314 columnNumber: 9 315 }, this), 316 totalPages > 1 && /* @__PURE__ */ jsxDEV("div", { className: "history-pagination", children: [
317 /* @__PURE__ */ jsxDEV( 318 "button", 319 { 320 onClick: () => handlePageChange(currentPage - 1), 321 disabled: currentPage === 1, 322 className: "pagination-button", 323 children: [ 324 /* @__PURE__ */ jsxDEV("i", { className: "fas fa-chevron-left" }, void 0, false, { 325 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 326 lineNumber: 225, 327 columnNumber: 15 328 }, this), 329 t("ddmr.myMember.previous", "Previous") 330 ] 331 }, 332 void 0, 333 true, 334 { 335 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 336 lineNumber: 220, 337 columnNumber: 13 338 }, 339 this 340 ), 341 /* @__PURE__ */ jsxDEV("div", { className: "pagination-info", children: t("ddmr.myMember.pageInfo", "Page {{current}} of {{total}}", { current: currentPage, total: totalPages }) }, void 0, false, { 342 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 343 lineNumber: 229, 344 columnNumber: 13 345 }, this),
346 /* @__PURE__ */ jsxDEV( 347 "button", 348 { 349 onClick: () => handlePageChange(currentPage + 1), 350 disabled: currentPage === totalPages, 351 className: "pagination-button", 352 children: [ 353 t("ddmr.myMember.next", "Next"), 354 /* @__PURE__ */ jsxDEV("i", { className: "fas fa-chevron-right" }, void 0, false, { 355 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 356 lineNumber: 239, 357 columnNumber: 15 358 }, this) 359 ] 360 }, 361 void 0, 362 true, 363 { 364 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 365 lineNumber: 233, 366 columnNumber: 13 367 }, 368 this 369 ) 370 ] }, void 0, true, { 371 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 372 lineNumber: 219, 373 columnNumber: 9 374 }, this) 375 ] }, void 0, true, { 376 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 377 lineNumber: 158, 378 columnNumber: 7 379 }, this) 380 ] }, void 0, true, { 381 fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", 382 lineNumber: 152, 383 columnNumber: 5 384 }, this); 385} 386_s(MyMember, "wqEzVN4cKlfvTrAgqpn+YTgraHM=", false, function() { 387 return [useTranslation]; 388}); 389_c = MyMember; 390export default MyMember; 391var _c; 392$RefreshReg$(_c, "MyMember"); 393if (import.meta.hot && !inWebWorker) { 394 window.$RefreshReg$ = prevRefreshReg; 395 window.$RefreshSig$ = prevRefreshSig; 396} 397if (import.meta.hot && !inWebWorker) { 398 RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => { 399 RefreshRuntime.registerExportsForReactRefresh("/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", currentExports); 400 import.meta.hot.accept((nextExports) => { 401 if (!nextExports) return; 402 const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", currentExports, nextExports); 403 if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage); 404 }); 405 }); 406} 407 408//# sourceMappingURL=data:application/json;base64,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BQUFBO0FBQUEsV0FxRkE7QUFBQSxPQTNGRjtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBNEZBO0FBRUo7QUFBQ0QsR0E5TlFELFVBQVE7QUFBQSxVQUNERixjQUFjO0FBQUE7QUFBQW1FLEtBRHJCakU7QUFnT1QsZUFBZUE7QUFBUSxJQUFBaUU7QUFBQUMsYUFBQUQsSUFBQSIsIm5hbWVzIjpbIlJlYWN0IiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJ1c2VUcmFuc2xhdGlvbiIsImhpc3RvcnlTZXJ2aWNlIiwiTXlNZW1iZXIiLCJfcyIsInQiLCJtZW1iZXJEYXRhIiwic2V0TWVtYmVyRGF0YSIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsInRvdGFsQ291bnQiLCJzZXRUb3RhbENvdW50IiwiY3VycmVudFBhZ2UiLCJzZXRDdXJyZW50UGFnZSIsInRvdGFsUGFnZXMiLCJzZXRUb3RhbFBhZ2VzIiwidG90YWxSZWNvcmRzIiwic2V0VG90YWxSZWNvcmRzIiwiY29waWVkSWQiLCJzZXRDb3BpZWRJZCIsImZldGNoT3ZlcmFsbFRvdGFsIiwicmVzcG9uc2UiLCJnZXRNZW1iZXJDb3VudCIsInBhZ2UiLCJwZXIiLCJzdWNjZXNzIiwiYWxsTWVtYmVycyIsInJvd3MiLCJvdmVyYWxsVG90YWwiLCJyZWR1Y2UiLCJzdW0iLCJtZW1iZXIiLCJwYXJzZUludCIsImNudCIsImVyciIsImNvbnNvbGUiLCJmZXRjaE1lbWJlckRhdGEiLCJtZW1iZXJSb3dzIiwidG90YWwiLCJNYXRoIiwiY2VpbCIsIkVycm9yIiwibWVzc2FnZSIsImhhbmRsZVBhZ2VDaGFuZ2UiLCJnZXRNZW1iZXJDb2xvciIsImlzY21zIiwiaXNyZWZlcmFsIiwiZ2V0RnFtU3RhdHVzIiwiaGFuZGxlQ29weUlkIiwiaWQiLCJuYXZpZ2F0b3IiLCJjbGlwYm9hcmQiLCJ3cml0ZVRleHQiLCJzZXRUaW1lb3V0IiwibWFwIiwiaW5kZXgiLCJjb2xvciIsImZvbnRXZWlnaHQiLCJjdXJzb3IiLCJkaXNwbGF5IiwiYWxpZ25JdGVtcyIsImdhcCIsInVpZCIsImZvbnRTaXplIiwib3BhY2l0eSIsImN1cnJlbnQiLCJfYyIsIiRSZWZyZXNoUmVnJCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJNeU1lbWJlci5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IGhpc3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaGlzdG9yeVNlcnZpY2UnXG5cbmZ1bmN0aW9uIE15TWVtYmVyKCkge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgW21lbWJlckRhdGEsIHNldE1lbWJlckRhdGFdID0gdXNlU3RhdGUoW10pXG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKG51bGwpXG4gIGNvbnN0IFt0b3RhbENvdW50LCBzZXRUb3RhbENvdW50XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtjdXJyZW50UGFnZSwgc2V0Q3VycmVudFBhZ2VdID0gdXNlU3RhdGUoMSlcbiAgY29uc3QgW3RvdGFsUGFnZXMsIHNldFRvdGFsUGFnZXNdID0gdXNlU3RhdGUoMSlcbiAgY29uc3QgW3RvdGFsUmVjb3Jkcywgc2V0VG90YWxSZWNvcmRzXSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtjb3BpZWRJZCwgc2V0Q29waWVkSWRdID0gdXNlU3RhdGUobnVsbClcblxuICAvLyBGZXRjaCBvdmVyYWxsIHRvdGFsIGNvdW50IGFjcm9zcyBhbGwgcGFnZXNcbiAgY29uc3QgZmV0Y2hPdmVyYWxsVG90YWwgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZldGNoIGFsbCBkYXRhIHRvIGNhbGN1bGF0ZSBvdmVyYWxsIHRvdGFsXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGhpc3RvcnlTZXJ2aWNlLmdldE1lbWJlckNvdW50KHsgcGFnZTogMSwgcGVyOiAxMDAwIH0pIC8vIExhcmdlIHBlciB2YWx1ZSB0byBnZXQgYWxsIGRhdGFcbiAgICAgIFxuICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgIT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGFsbE1lbWJlcnMgPSByZXNwb25zZS5yb3dzIHx8IFtdXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0b3RhbCBjb3VudCBhY3Jvc3MgYWxsIHBhZ2VzXG4gICAgICAgIGNvbnN0IG92ZXJhbGxUb3RhbCA9IGFsbE1lbWJlcnMucmVkdWNlKChzdW0sIG1lbWJlcikgPT4gc3VtICsgcGFyc2VJbnQobWVtYmVyLmNudCB8fCAwKSwgMClcbiAgICAgICAgc2V0VG90YWxDb3VudChvdmVyYWxsVG90YWwpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBvdmVyYWxsIHRvdGFsOicsIGVycilcbiAgICAgIC8vIElmIGVycm9yLCBzZXQgdG90YWwgdG8gMFxuICAgICAgc2V0VG90YWxDb3VudCgwKVxuICAgIH1cbiAgfVxuXG4gIC8vIEZldGNoIG1lbWJlciBkYXRhIGZyb20gQVBJXG4gIGNvbnN0IGZldGNoTWVtYmVyRGF0YSA9IGFzeW5jIChwYWdlID0gMSkgPT4ge1xuICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICBzZXRFcnJvcihudWxsKVxuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGhpc3RvcnlTZXJ2aWNlLmdldE1lbWJlckNvdW50KHsgcGFnZSwgcGVyOiAyMCB9KVxuICAgICAgXG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgbWVtYmVyUm93cyA9IHJlc3BvbnNlLnJvd3MgfHwgW11cbiAgICAgICAgc2V0TWVtYmVyRGF0YShtZW1iZXJSb3dzKVxuICAgICAgICBzZXRUb3RhbFJlY29yZHMocmVzcG9uc2UudG90YWwgfHwgMClcbiAgICAgICAgc2V0VG90YWxQYWdlcyhNYXRoLmNlaWwoKHJlc3BvbnNlLnRvdGFsIHx8IDApIC8gMjApKVxuICAgICAgICBzZXRDdXJyZW50UGFnZShwYWdlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3BvbnNlLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBmZXRjaCBtZW1iZXIgZGF0YScpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICB9XG4gI
408H1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIEZldGNoIG92ZXJhbGwgdG90YWwgYW5kIGZpcnN0IHBhZ2UgZGF0YVxuICAgIGZldGNoT3ZlcmFsbFRvdGFsKClcbiAgICBmZXRjaE1lbWJlckRhdGEoMSlcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlUGFnZUNoYW5nZSA9IChwYWdlKSA9PiB7XG4gICAgZmV0Y2hNZW1iZXJEYXRhKHBhZ2UpXG4gIH1cblxuICAvLyBHZXQgY29sb3IgYmFzZWQgb24gbWVtYmVyIHN0YXR1c1xuICBjb25zdCBnZXRNZW1iZXJDb2xvciA9IChtZW1iZXIpID0+IHtcbiAgICBpZiAobWVtYmVyLmlzY21zID09PSAxIHx8IG1lbWJlci5pc2NtcyA9PT0gJzEnKSByZXR1cm4gJyM5OTAwRkYnIC8vIFB1cnBsZSBmb3IgQ01TXG4gICAgaWYgKG1lbWJlci5pc3JlZmVyYWwgPT09IDEgfHwgbWVtYmVyLmlzcmVmZXJhbCA9PT0gJzEnKSB7XG4gICAgICBpZiAobWVtYmVyLmlzY21zID09PSAwIHx8IG1lbWJlci5pc2NtcyA9PT0gJzAnKSByZXR1cm4gJyMwMEZGMDAnIC8vIEdyZWVuIGZvciByZWZlcnJhbFxuICAgIH1cbiAgICBpZiAobWVtYmVyLmlzcmVmZXJhbCA9PT0gMCB8fCBtZW1iZXIuaXNyZWZlcmFsID09PSAnMCcpIHJldHVybiAnIzAwNjZGRicgLy8gQmx1ZSBmb3Igbm9uLXJlZmVycmFsXG4gICAgcmV0dXJuICcjZmZmZmZmJyAvLyBEZWZhdWx0IHdoaXRlXG4gIH1cblxuICAvLyBHZXQgRlFNIHN0YXR1cyB0ZXh0XG4gIGNvbnN0IGdldEZxbVN0YXR1cyA9IChtZW1iZXIpID0+IHtcbiAgICBpZiAobWVtYmVyLmlzY21zID09PSAxIHx8IG1lbWJlci5pc2NtcyA9PT0gJzEnKSByZXR1cm4gJ1BVUlBMRSdcbiAgICBpZiAobWVtYmVyLmlzcmVmZXJhbCA9PT0gMSB8fCBtZW1iZXIuaXNyZWZlcmFsID09PSAnMScpIHtcbiAgICAgIGlmIChtZW1iZXIuaXNjbXMgPT09IDAgfHwgbWVtYmVyLmlzY21zID09PSAnMCcpIHJldHVybiAnR1JFRU4nXG4gICAgfVxuICAgIGlmIChtZW1iZXIuaXNyZWZlcmFsID09PSAwIHx8IG1lbWJlci5pc3JlZmVyYWwgPT09ICcwJykgcmV0dXJuICdCTFVFJ1xuICAgIHJldHVybiAnVU5LTk9XTidcbiAgfVxuXG4gIC8vIENvcHkgSUQgdG8gY2xpcGJvYXJkXG4gIGNvbnN0IGhhbmRsZUNvcHlJZCA9IGFzeW5jIChpZCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChpZClcbiAgICAgIHNldENvcGllZElkKGlkKVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNldENvcGllZElkKG51bGwpXG4gICAgICB9LCAyMDAwKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNvcHkgSUQ6JywgZXJyKVxuICAgIH1cbiAgfVxuXG4gIGlmIChsb2FkaW5nKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlzdG9yeS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaXN0b3J5LWhlYWRlclwiPlxuICAgICAgICAgIDxoMj57dCgnZGRtci5teU1lbWJlci50aXRsZScsICdNeSBNZW1iZXJzJyl9PC9oMj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibG9hZGluZy1jb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxvYWRpbmctc3Bpbm5lclwiPjwvZGl2PlxuICAgICAgICAgIDxwPnt0KCdjb21tb24ubG9hZGluZycsICdMb2FkaW5nLi4uJyl9PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIGlmIChlcnJvcikge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpc3RvcnktY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlzdG9yeS1oZWFkZXJcIj5cbiAgICAgICAgICA8aDI+e3QoJ2RkbXIubXlNZW1iZXIudGl0bGUnLCAnTXkgTWVtYmVycycpfTwvaDI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImVycm9yLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLW1lc3NhZ2VcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgIDxidXR0b24gb25DbGljaz17ZmV0Y2hNZW1iZXJEYXRhfSBjbGFzc05hbWU9XCJyZXRyeS1idXR0b25cIj5cbiAgICAgICAgICAgIHt0KCdjb21tb24ucmV0cnknLCAnUmV0cnknKX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlzdG9yeS1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlzdG9yeS1oZWFkZXJcIj5cbiAgICAgICAgPGgyPnt0KCdkZG1yLm15TWVtYmVyLnRpdGxlJywgJ015IE1lbWJlcicpfTwvaDI+XG4gICAgICA8L2Rpdj5cblxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInRhYmxlLWNvbnRhaW5lclwiPlxuICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwiaGlzdG9yeS10YWJsZVwiPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRoPnt0KCdkZG1yLm15TWVtYmVyLnRhYmxlLmlkJywgJ0lEJyl9PC90aD5cbiAgICAgICAgICAgICAgPHRoPnt0KCdkZG1yLm15TWVtYmVyLnRhYmxlLmZxbVN0YXR1cycsICdGUU0gU3RhdHVzJyl9PC90aD5cbiAgICAgICAgICAgICAgPHRoPnt0KCdkZG1yLm15TWVtYmVyLnRhYmxlLnVzZXJDb3VudCcsICdTdWItTWVtYmVycycpfTwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAge21lbWJlckRhdGEubWFwKChtZW1iZXIsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDx0ciBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGdldE1lbWJlckNvbG9yKG1lbWJlciksXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgZ2FwOiAnOHB4J1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVDb3B5SWQobWVtYmVyLnVpZCB8fCBtZW1iZXIuaWQgfHwgJycpfVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkNsaWNrIHRvIGNvcHkgSURcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7bWVtYmVyLnVpZCB8fCBtZW1iZXIuaWQgfHwgJy0nfVxuICAgICAgICAgICAgICAgICAgICB7Y29waWVkSWQgPT09IChtZW1iZXIudWlkIHx8IG1lbWJlci5pZCkgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmFzIGZhLWNoZWNrXCIgc3R5bGU9e3sgY29sb3I6ICcjMDBGRjAwJywgZm9udFNpemU6ICcxMnB4JyB9fT48L2k+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmFzIGZhLWNvcHlcIiBzdHlsZT17eyBmb250U2l6ZTogJzEycHgnLCBvcGFjaXR5OiAwLjcgfX0+PC9pPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gXG4gICAgICAgICAgICAgICAgICAgI
408HN0eWxlPXt7IFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBnZXRNZW1iZXJDb2xvcihtZW1iZXIpLFxuICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICdib2xkJ1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0RnFtU3RhdHVzKG1lbWJlcil9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQ+e21lbWJlci5jbnQgfHwgMH08L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICB7LyogVG90YWwgcm93ICovfVxuICAgICAgICAgICAgPHRyIGNsYXNzTmFtZT1cInRvdGFsLXJvd1wiPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz57dCgnZGRtci5teU1lbWJlci50YWJsZS50b3RhbCcsICdUT1RBTCcpfTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQ+PC90ZD5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3RvdGFsQ291bnR9PC9zdHJvbmc+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG5cbiAgICAgICAgey8qIFBhZ2luYXRpb24gKi99XG4gICAgICAgIHt0b3RhbFBhZ2VzID4gMSAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaXN0b3J5LXBhZ2luYXRpb25cIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUGFnZUNoYW5nZShjdXJyZW50UGFnZSAtIDEpfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17Y3VycmVudFBhZ2UgPT09IDF9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInBhZ2luYXRpb24tYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmFzIGZhLWNoZXZyb24tbGVmdFwiPjwvaT5cbiAgICAgICAgICAgICAge3QoJ2RkbXIubXlNZW1iZXIucHJldmlvdXMnLCAnUHJldmlvdXMnKX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhZ2luYXRpb24taW5mb1wiPlxuICAgICAgICAgICAgICB7dCgnZGRtci5teU1lbWJlci5wYWdlSW5mbycsICdQYWdlIHt7Y3VycmVudH19IG9mIHt7dG90YWx9fScsIHsgY3VycmVudDogY3VycmVudFBhZ2UsIHRvdGFsOiB0b3RhbFBhZ2VzIH0pfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUGFnZUNoYW5nZShjdXJyZW50UGFnZSArIDEpfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17Y3VycmVudFBhZ2UgPT09IHRvdGFsUGFnZXN9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInBhZ2luYXRpb24tYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoJ2RkbXIubXlNZW1iZXIubmV4dCcsICdOZXh0Jyl9XG4gICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhcyBmYS1jaGV2cm9uLXJpZ2h0XCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNeU1lbWJlclxuIl0sImZpbGUiOiIvcm9vdC9wdWIvQmV0dGluZ0FwcC9zcmMvY29tcG9uZW50cy9iZXR0aW5nL2hpc3RvcnkvTXlNZW1iZXIuanN4In0=
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.