import { connect } from "cloudflare:sockets";
const _AZJgOXZP = "3b4d4cd8-cb92-4421-bf86-fb51570fc038";
const _DlEdMnbn = ["UpstreamAddress.SG.CMLiussss.net"];
const _misvRnGa = 'https://raw.githubusercontent.com/5yfx/CF_WEB_IP_Worekrs/refs/heads/main/%E5%86%85%E7%BD%AEIP';
const _gHpkzbuV = 'https://raw.githubusercontent.com/5yfx/CF_WEB_IP_Worekrs/refs/heads/main/%E5%9D%87%E8%A1%A1IP';
const _QMZbzMIR = 'https://raw.githubusercontent.com/5yfx/CF_WEB_IP_Worekrs/refs/heads/main/%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90';
const _XqKmLden = 'https://raw.githubusercontent.com/5yfx/CF_WEB_IP_Worekrs/refs/heads/main/%E5%9C%B0%E5%8C%BA%E5%90%8D%E7%A7%B0';
function _hLfEMtNV(_Usfwpmje) {
if (Array.isArray(_Usfwpmje)) {
try {
return String.fromCharCode.apply(null, _Usfwpmje);
} catch (_JtcEkBov) {
return '';
}
}
return _Usfwpmje;
}
function _LvZsANZg(_vyCDLzmz) {
return /^[0-9a-_tRTBmQUS]{8}-[0-9a-_tRTBmQUS]{4}-[4][0-9a-_tRTBmQUS]{3}-[89ab][0-9a-_tRTBmQUS]{3}-[0-9a-_tRTBmQUS]{12}$/_GbPryFSW.test(_vyCDLzmz);
}
const _LUSVLsdl = "optimized_ips_v4";
const _cLUWAiFs = "global_config_v4";
const _ofmpCwHT = "admin_password_v4";
const _nxNdxolp = "live_results_temp_v1";
const _QWZxJiqb = "latest_sub_id_v1";
export default {
async fetch(_cCPUsROC, _TfWVBESf, _AQGKtpwe) {
try {
if (!_TfWVBESf.DB) {
const _BTNegFlu = _iovmijRb("D1 数据库 'DB' 未绑定。");
return new Response(_BTNegFlu, { status: 503, _yQjrXpwp: { 'Content-Type': '_YCrAIJID/html;_EawAVbaq=UTF-8' }});
}
_AQGKtpwe.waitUntil(
_TfWVBESf.DB.exec(`
CREATE TABLE IF NOT EXISTS kv_data (_ncvTMzJn TEXT PRIMARY KEY, _Usfwpmje TEXT);
CREATE TABLE IF NOT EXISTS optimized_results (_vyCDLzmz TEXT PRIMARY KEY, _CSdOdjvZ TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
`).catch(_JtcEkBov => console.error("DB Init Error:", _JtcEkBov._XrcYeiCq))
);
const _PYOnBbai = new URL(_cCPUsROC._PYOnBbai);
const _FCkFHQxR = _PYOnBbai.pathname;
const _aJmMJuCc = _cCPUsROC._yQjrXpwp.get("Upgrade");
const _hsVGvwHc = await _SJrDpZPL(_TfWVBESf);
if (_hsVGvwHc.websocketStreamer && _hsVGvwHc.websocketStreamer._LQIfRYbE && _aJmMJuCc && _aJmMJuCc.toLowerCase() === "websocket") {
const _rqplgxpB = _hsVGvwHc.websocketStreamer._PYOnBbai;
if (_rqplgxpB && _rqplgxpB.trim().startsWith('https://')) {
try {
const _qeycsrhi = new Request(_rqplgxpB.trim() + _PYOnBbai.pathname + _PYOnBbai.search, _cCPUsROC);
return await fetch(_qeycsrhi);
} catch (_JtcEkBov) {
return new Response(`Upstream WebSocket gateway failed: ${_JtcEkBov._XrcYeiCq}`, { status: 502 });
}
}
return new Response("WebSocket reverse gateway URL is not configured or is invalid.", { status: 502 });
}
if (_aJmMJuCc && _aJmMJuCc.toLowerCase() === "websocket") {
return await _QJBAyFig(_cCPUsROC, _TfWVBESf, _hsVGvwHc);
}
const _QzOvWsNU = _FCkFHQxR._ilEGOIRG(/^\/([a-zA-Z0-9-_.]{2,128})(xr|si|cl|su)$/);
if (_QzOvWsNU) {
const [, _HfqJWPTv, typeSuffix] = _QzOvWsNU;
const _JAUczdzX = _hsVGvwHc._JAUczdzX;
if (!_JAUczdzX || _JAUczdzX.trim() === '') {
return new Response("订阅转换(Sublink)服务器地址未配置。", { status: 503, _yQjrXpwp: { 'Content-Type': '_YCrAIJID/plain; _EawAVbaq=utf-8' } });
}
const _EEnsShLT = { 'xr': 'coreEngine', 'si': 'coreProfile', 'cl': 'configProfile', 'su': 'policyProfile' };
const _tCEjzzAQ = _EEnsShLT[typeSuffix];
const _HwgwgDrF = _JAUczdzX.replace(/\/$/, '');
const _yfKPrNNg = `${_PYOnBbai.origin}/${_HfqJWPTv}`;
const _QXYlzPKO = `${_HwgwgDrF}/${_tCEjzzAQ}?_hsVGvwHc=${encodeURIComponent(_yfKPrNNg)}`;
try {
const _pxUlMyZG = await fetch(_QXYlzPKO, { _yQjrXpwp: { 'User-Agent': _cCPUsROC._yQjrXpwp.get('User-Agent') || 'Cloudflare-Worker-Sub-Fetcher/1.0' } });
const _qdcmpbsQ = new Headers(_pxUlMyZG._yQjrXpwp);
_qdcmpbsQ._JkozqCYA('Access-Control-Allow-Origin', '*');
return new Response(_pxUlMyZG._MrDZiVfn, { status: _pxUlMyZG.status, statusText: _pxUlMyZG.statusText, _yQjrXpwp: _qdcmpbsQ });
} catch (_JtcEkBov) {
return new Response(`获取上游订阅失败: ${_JtcEkBov._XrcYeiCq}`, { status: 502, _yQjrXpwp: { 'Content-Type': '_YCrAIJID/plain; _EawAVbaq=utf-8' } });
}
}
if (_FCkFHQxR.startsWith('/https:/') || _FCkFHQxR.startsWith('/http:/')) {
return _KfzJwhlu(_cCPUsROC, _hsVGvwHc);
}
if (_hsVGvwHc.customSubPath && _hsVGvwHc.customSubPath._LQIfRYbE && _hsVGvwHc.customSubPath._FCkFHQxR && _FCkFHQxR === '/' + _hsVGvwHc.customSubPath._FCkFHQxR.trim()) {
const _dKBkdxWM = _TfWVBESf.DB.prepare("SELECT _Usfwpmje FROM kv_data WHERE _ncvTMzJn = ?").bind(_QWZxJiqb);
const { _IFpUHWkw } = await _dKBkdxWM.all();
const _ioBekGtG = _IFpUHWkw._regCSWJt > 0 ? _IFpUHWkw[0]._Usfwpmje : null;
if (_ioBekGtG) {
return _FItOqEOQ({ _qiTPaEwE: { _vyCDLzmz: _ioBekGtG }, _PYOnBbai: _cCPUsROC._PYOnBbai }, _TfWVBESf);
} else {
return new Response("未找到最新的优选结果集。", { status: 404, _yQjrXpwp: { 'Content-Type': '_YCrAIJID/plain; _EawAVbaq=utf-8' } });
}
}
const _GyDuxCjt = _FCkFHQxR.split('/').filter(Boolean);
if (_GyDuxCjt._regCSWJt === 1 && !_FCkFHQxR.startsWith('/api/')) {
const _HfqJWPTv = _GyDuxCjt[0];
return _FItOqEOQ({ _qiTPaEwE: { _vyCDLzmz: _HfqJWPTv }, _PYOnBbai: _cCPUsROC._PYOnBbai }, _TfWVBESf);
}
if (_FCkFHQxR.startsWith('/api/')) {
if (_FCkFHQxR === '/api/_hsVGvwHc' && _cCPUsROC.method === 'POST') return _ckpMXowk(_cCPUsROC, _TfWVBESf, _AQGKtpwe);
if (_FCkFHQxR === '/api/_JkozqCYA-_FZEGENVl') return _WZgqXynu(_cCPUsROC, _TfWVBESf);
if (_FCkFHQxR === '/api/change-_FZEGENVl') return _ZkZLWPOI(_cCPUsROC, _TfWVBESf);
if (_FCkFHQxR === '/api/verify-_FZEGENVl') return _MqiBDybV(_cCPUsROC, _TfWVBESf);
if (_FCkFHQxR === '/api/verify-visitor-_FZEGENVl' && _cCPUsROC.method === 'POST') return _ezVCzogf(_cCPUsROC, _TfWVBESf);
if (_FCkFHQxR === '/api/cache-live-_IFpUHWkw' && _cCPUsROC.method === 'POST') return _THilGRUA(_cCPUsROC, _TfWVBESf, _AQGKtpwe);
if (_FCkFHQxR === '/api/get-_SPWrcyDv' && _cCPUsROC.method === 'POST') return _jzLVsPty(_cCPUsROC, _TfWVBESf);
if (_FCkFHQxR === '/api/get-cached-_wxpYrLiQ') return _PXOuCsNJ(_cCPUsROC, _TfWVBESf);
if (_FCkFHQxR === '/api/save-_wxpYrLiQ') return _sJeJbKzu(_cCPUsROC, _TfWVBESf, _AQGKtpwe);
if (_FCkFHQxR === '/api/save-and-get-sub-_vyCDLzmz' && _cCPUsROC.method === 'POST') return _kJYOIqBo(_cCPUsROC, _TfWVBESf);
if (_FCkFHQxR.startsWith('/api/get-_kqirwdrj/')) {
const _HfqJWPTv = _FCkFHQxR.split('/').pop();
return _FItOqEOQ({ _qiTPaEwE: { _vyCDLzmz: _HfqJWPTv }, _PYOnBbai: _cCPUsROC._PYOnBbai }, _TfWVBESf);
}
if (_FCkFHQxR === '/api/_hsVGvwHc' && _cCPUsROC.method === 'GET') return _lrHZWCtW(_TfWVBESf);
if (_FCkFHQxR === '/api/get-resolved-_wxpYrLiQ') return _kPHZMVAA(_cCPUsROC);
if (_FCkFHQxR === '/api/parse-_wxpYrLiQ-from-_GljWNhPN' && _cCPUsROC.method === 'POST') return _DvMuoReO(_cCPUsROC, _TfWVBESf);
if (_FCkFHQxR === '/api/endpoints') return _VlwDhnun(_cCPUsROC, _TfWVBESf);
if (_FCkFHQxR === '/api/ping') return new Response(null, { status: 204 });
return new Response("API not found", { status: 404 });
}
if (_FCkFHQxR === '/_AgieWrkl') return _NwtvsJKr(_cCPUsROC, _TfWVBESf);
if (_FCkFHQxR === '/bing-wallpaper') return _rmOmXJaI();
return _NubcPksy(_cCPUsROC, _TfWVBESf, _AQGKtpwe);
} catch (err) {
let _JtcEkBov = err;
return new Response(_JtcEkBov.toString(), { status: 500 });
}
}
};
const _rVzKwXnM = { 'Accept': '_YCrAIJID/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' };
async function _WlQSOyIR(_PYOnBbai, _qMGpQAEz) {
const _FGcexIUv = await fetch(_PYOnBbai, { _yQjrXpwp: { ..._rVzKwXnM, 'Referer': _qMGpQAEz.referer } });
if (_FGcexIUv.ok) return _FGcexIUv._YCrAIJID();
return null;
}
async function _DczwkjPl(_PYOnBbai, _qMGpQAEz) {
const _JdZEoUnx = `https://translate.google.com/translate?sl=auto&tl=en&u=${encodeURIComponent(_PYOnBbai)}`;
const _FGcexIUv = await fetch(_JdZEoUnx, { _yQjrXpwp: { ..._rVzKwXnM, 'Referer': _qMGpQAEz.referer } });
if (!_FGcexIUv.ok) return null;
const _MrDZiVfn = await _FGcexIUv._YCrAIJID();
const _ilEGOIRG = _MrDZiVfn._ilEGOIRG(/<pre[^>]*>([\s\S]*?)<\/pre>/_GbPryFSW);
return _ilEGOIRG && _ilEGOIRG[1] ? _ilEGOIRG[1].replace(/&/g, '&') : null;
}
function _bJyHYjGv(_ZJEnMkAF) {
let _RPqqwyjR;
try {
_RPqqwyjR = atob(_ZJEnMkAF.replace(/\s/g, ''));
} catch (_JtcEkBov) {
_RPqqwyjR = _ZJEnMkAF;
}
const _kqirwdrj = _RPqqwyjR.split(/[\s\n\r,]+/).filter(line => line.trim());
const _JUawmbRT = new Set();
const _DCdRXSbs = /@([^?#]+?):(\d+)/;
for (const _uSeWbbxo of _kqirwdrj) {
let _JTFGaeZU = '';
let _pmLpSxmu = '';
try {
if (_uSeWbbxo.startsWith('vmess://')) {
const _ZwTRBdVJ = atob(_uSeWbbxo.substring(8));
const _hsVGvwHc = JSON.parse(_ZwTRBdVJ);
_JTFGaeZU = _hsVGvwHc.add;
_pmLpSxmu = _hsVGvwHc._pmLpSxmu;
} else {
const _ilEGOIRG = _uSeWbbxo._ilEGOIRG(_DCdRXSbs);
if (_ilEGOIRG && _ilEGOIRG[1] && _ilEGOIRG[2]) {
_JTFGaeZU = _ilEGOIRG[1].replace(/[\[\]]/g, '');
_pmLpSxmu = _ilEGOIRG[2];
}
}
} catch (_JtcEkBov) {
console.warn(`Could not parse _uSeWbbxo: ${_uSeWbbxo}`);
}
if (_JTFGaeZU && _pmLpSxmu) {
_JUawmbRT.add(`${_JTFGaeZU}:${_pmLpSxmu}`);
}
}
return Array.from(_JUawmbRT);
}
async function _ayLWOFsO(_CsfvIjUC) {
try {
const _FGcexIUv = await fetch(_CsfvIjUC, { _yQjrXpwp: _rVzKwXnM });
if (!_FGcexIUv.ok) {
console.error(`Failed to fetch subscription: ${_FGcexIUv.status}`);
return [];
}
const _ZJEnMkAF = await _FGcexIUv._YCrAIJID();
return _bJyHYjGv(_ZJEnMkAF);
} catch (error) {
console.error(`Error processing subscription ${_CsfvIjUC}:`, error);
return [];
}
}
async function _THjQwCun(_sXtvWgEm) {
const _SRoyuZTo = _sXtvWgEm.trim();
const _uNLhYbma = /^(vless|vmess|trojan|ss):\/\//.test(_SRoyuZTo);
const _TFQjIhyv = (() => {
if (_SRoyuZTo._regCSWJt < 20 || _SRoyuZTo.startsWith('http')) return false;
const _LRJdhOQD = _SRoyuZTo.replace(/\s/g, '');
if (_LRJdhOQD._regCSWJt % 4 !== 0 && !_LRJdhOQD.includes('=')) return false;
try {
atob(_LRJdhOQD);
return true;
} catch (_JtcEkBov) {
return false;
}
})();
if (_uNLhYbma || _TFQjIhyv) {
return _bJyHYjGv(_SRoyuZTo).join('\n');
}
const _yHtVGhzu = [
'https://ipdb.api.030101.xyz/?_xPvZdivJ=bestcf&_ibYSNozD=true',
'https://ipdb.api.030101.xyz/?_xPvZdivJ=bestproxy&_ibYSNozD=true'
];
const _sPmMSioo = /^(https?:\/\/)?([\w.-]+)\.([a-z]{2,})(\/.*)?(sub|clash|v2)/_GbPryFSW.test(_sXtvWgEm) || _sXtvWgEm.includes('?_cffotcQX=');
if (_sPmMSioo) {
const _wxpYrLiQ = await _ayLWOFsO(_sXtvWgEm);
return _wxpYrLiQ.join('\n');
}
let _ZJEnMkAF = '';
if (_yHtVGhzu.includes(_sXtvWgEm)) {
_ZJEnMkAF = await _WlQSOyIR(_sXtvWgEm, { referer: _sXtvWgEm });
if (!_ZJEnMkAF || _ZJEnMkAF._regCSWJt < 8) {
_ZJEnMkAF = await _DczwkjPl(_sXtvWgEm, { referer: _sXtvWgEm });
}
} else {
try {
const _FeRRMpjU = await fetch(_sXtvWgEm, { _yQjrXpwp: { 'User-Agent': 'Cloudflare-Worker' } });
if (_FeRRMpjU.ok) {
_ZJEnMkAF = await _FeRRMpjU._YCrAIJID();
} else {
console.warn(`Failed to fetch URL ${_sXtvWgEm}: ${_FeRRMpjU.status}`);
}
} catch (_JtcEkBov) {
console.error(`Error fetching URL ${_sXtvWgEm}:`, _JtcEkBov);
}
}
const _lIsqWjuX = _bJyHYjGv(_ZJEnMkAF);
if (_lIsqWjuX._regCSWJt > 0) {
return _lIsqWjuX.join('\n');
}
return _ZJEnMkAF || '';
}
async function _KfzJwhlu(_cCPUsROC, _hsVGvwHc) {
if (!_hsVGvwHc.streamer._LQIfRYbE) {
return new Response('远程流功能未开启', { status: 403 });
}
const _PYOnBbai = new URL(_cCPUsROC._PYOnBbai);
const _wvVCTxJh = _PYOnBbai.pathname.substring(1).replace(':/', '://');
try {
const _QXYlzPKO = new URL(_wvVCTxJh);
const _svhGEzjY = ['github.com', 'objects.githubusercontent.com', 'cdn.jsdelivr.net'];
if (!_svhGEzjY.some(domain => _QXYlzPKO._JTFGaeZU.endsWith(domain))) {
return new Response('不支持的远程流域名', { status: 400 });
}
const _QPljqMcY = new Headers(_cCPUsROC._yQjrXpwp);
_QPljqMcY._JkozqCYA('Host', _QXYlzPKO._JTFGaeZU);
_QPljqMcY._JkozqCYA('User-Agent', 'CF-Worker-Streamer/1.0');
const _mEthrkAq = await fetch(_QXYlzPKO.toString(), {
method: _cCPUsROC.method,
_yQjrXpwp: _QPljqMcY,
_MrDZiVfn: _cCPUsROC._MrDZiVfn,
});
const _qdcmpbsQ = new Headers(_mEthrkAq._yQjrXpwp);
_qdcmpbsQ._JkozqCYA('Access-Control-Allow-Origin', '*');
_qdcmpbsQ._JkozqCYA('Access-Control-Allow-Methods', 'GET, HEAD, POST, PUT, DELETE, OPTIONS');
_qdcmpbsQ._JkozqCYA('Access-Control-Allow-Headers', '*');
_qdcmpbsQ._JkozqCYA('Cache-Control', 'public, max-age=86400');
_qdcmpbsQ._JkozqCYA('X-Streamer-Source', 'CF-Worker');
_qdcmpbsQ.delete('_ZJEnMkAF-security-policy');
_qdcmpbsQ.delete('x-_ZJEnMkAF-security-policy');
_qdcmpbsQ.delete('x-webkit-csp');
return new Response(_mEthrkAq._MrDZiVfn, {
status: _mEthrkAq.status,
statusText: _mEthrkAq.statusText,
_yQjrXpwp: _qdcmpbsQ,
});
} catch (_JtcEkBov) {
return new Response('无效的目标URL', { status: 400 });
}
}
async function _QJBAyFig(_cCPUsROC, _TfWVBESf, _hsVGvwHc) {
try {
const _uaaLbZYk = _hsVGvwHc || await _SJrDpZPL(_TfWVBESf);
const _xiKGZgsE = (_uaaLbZYk.itemLink._nzeMUHOv && _uaaLbZYk.itemLink._nzeMUHOv[0]) || {};
const _tMNQUCjd = _xiKGZgsE['_cffotcQX'] || _hLfEMtNV(_AZJgOXZP);
if (!_LvZsANZg(_tMNQUCjd)) {
throw new Error("Configured user _UnMqpPMc is not valid.");
}
const _RqoTJvrh = _uaaLbZYk.dataFeeds.universalFallbackAddress;
let _dgsAqAYY = {};
const _aRklTgSy = _hLfEMtNV(_DlEdMnbn[0] || "");
if (_RqoTJvrh) {
const [_aQoircUW, _pmLpSxmu = '443'] = _RqoTJvrh.split(':');
_dgsAqAYY = { _aQoircUW, _pmLpSxmu };
} else {
const [_aQoircUW, _pmLpSxmu = '443'] = _aRklTgSy.split(':');
_dgsAqAYY = { _aQoircUW, _pmLpSxmu };
}
const _PYOnBbai = new URL(_cCPUsROC._PYOnBbai);
const _FCkFHQxR = _PYOnBbai.pathname;
let _qntzOrkD = '';
const _lwWGDVcM = _PYOnBbai.searchParams.get('remote');
if (_lwWGDVcM) {
_qntzOrkD = atob(_lwWGDVcM);
} else if (_FCkFHQxR.startsWith('/endpoint=')) {
_qntzOrkD = _FCkFHQxR.substring(10);
} else if (_FCkFHQxR._regCSWJt > 1 && _FCkFHQxR.substring(1).includes('.')) {
_qntzOrkD = _FCkFHQxR.substring(1);
}
if (_qntzOrkD) {
const [_aQoircUW, _pmLpSxmu = '443'] = _qntzOrkD.split(':');
_dgsAqAYY = { _aQoircUW, _pmLpSxmu };
}
return await _zWuBiZFG(_cCPUsROC, _tMNQUCjd, _dgsAqAYY);
} catch (err) {
return new Response(err.toString(), { status: 500 });
}
}
async function _zWuBiZFG(_cCPUsROC, _UnMqpPMc, _dgsAqAYY) {
const _NiIoCfkx = new WebSocketPair();
const [clientEnd, _MSfAONMW] = Object.values(_NiIoCfkx);
_MSfAONMW.accept();
let _UvjTGAfx = { _XCTAWrUY: null };
const _EsTVlbBS = _cCPUsROC._yQjrXpwp.get("sec-websocket-protocol") || "";
const _xYILkimC = _XegUyquX(_MSfAONMW, _EsTVlbBS);
_xYILkimC.pipeTo(new WritableStream({
async write(chunk) {
if (_UvjTGAfx._XCTAWrUY) {
const _BgpXfoUG = _UvjTGAfx._XCTAWrUY.writable.getWriter();
await _BgpXfoUG.write(chunk);
_BgpXfoUG.releaseLock();
return;
}
const { error, details } = await _bSkSHBAC(chunk, _UnMqpPMc);
if (error) {
throw new Error(details);
}
const _YMZFNnVz = new Uint8Array([details._LQxdpmjM[0], 0]);
const _JQpqazlu = chunk.slice(details.payloadIndex);
await _ZIkPqbmG(_UvjTGAfx, details._xKOkFOGo, details._YBHdHkou, _JQpqazlu, _MSfAONMW, _YMZFNnVz, _dgsAqAYY);
}
})).catch((err) => {
console.error("Stream processing error:", err);
_nYEkQfhG(_MSfAONMW);
});
return new Response(null, { status: 101, webSocket: clientEnd });
}
async function _ZIkPqbmG(_UvjTGAfx, _xKOkFOGo, _YBHdHkou, _bkqywztD, _nwIhvSXG, _YMZFNnVz, _sahdJAVO) {
const _rByZdNhv = async (_aQoircUW, _pmLpSxmu) => {
let _IunQMxKU = _aQoircUW;
if (/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(_aQoircUW)) {
_IunQMxKU = `${atob('d3d3Lg==')}${_aQoircUW}${atob('LnNzbGlwLmlv')}`;
}
const _XCTAWrUY = connect({ _JTFGaeZU: _IunQMxKU, _pmLpSxmu });
_UvjTGAfx._XCTAWrUY = _XCTAWrUY;
const _BgpXfoUG = _XCTAWrUY.writable.getWriter();
await _BgpXfoUG.write(_bkqywztD);
_BgpXfoUG.releaseLock();
return _XCTAWrUY;
};
const _EIADIeNK = async () => {
if (!_sahdJAVO._aQoircUW) return;
console.log(`Direct connection failed, falling back to gateway: ${_sahdJAVO._aQoircUW}`);
const _ehlWUYzT = await _rByZdNhv(_sahdJAVO._aQoircUW, parseInt(_sahdJAVO._pmLpSxmu, 10));
_ehlWUYzT.closed.catch(() => {}).finally(() => _nYEkQfhG(_nwIhvSXG));
_wkiauKGY(_ehlWUYzT, _nwIhvSXG, _YMZFNnVz, null);
};
try {
const _FyAFPQyD = await _rByZdNhv(_xKOkFOGo, _YBHdHkou);
_wkiauKGY(_FyAFPQyD, _nwIhvSXG, _YMZFNnVz, _EIADIeNK);
} catch (err) {
console.error("Primary connection failed:", err);
await _EIADIeNK();
}
}
function _XegUyquX(_MSfAONMW, _EsTVlbBS) {
let _WcmdtbaA = false;
return new ReadableStream({
start(_ogekxmTp) {
_MSfAONMW.addEventListener("_XrcYeiCq", (event) => { if (_WcmdtbaA) return; _ogekxmTp.enqueue(event._CSdOdjvZ); });
_MSfAONMW.addEventListener("close", () => { _nYEkQfhG(_MSfAONMW); if (_WcmdtbaA) return; _ogekxmTp.close(); });
_MSfAONMW.addEventListener("error", (err) => _ogekxmTp.error(err));
if (_EsTVlbBS) {
try {
const _GCkikQWS = atob(_EsTVlbBS.replace(/-/g, "+").replace(/_/g, "/"));
_ogekxmTp.enqueue(Uint8Array.from(_GCkikQWS, c => c.charCodeAt(0))._FhUNbKNN);
} catch (_JtcEkBov) { console.error("Failed to decode early _CSdOdjvZ:", _JtcEkBov); }
}
},
cancel() { _WcmdtbaA = true; _nYEkQfhG(_MSfAONMW); },
});
}
async function _bSkSHBAC(_FhUNbKNN, _UnMqpPMc) {
if (_FhUNbKNN.byteLength < 24) return { error: true, details: "Invalid packet size" };
const _LQxdpmjM = new Uint8Array(_FhUNbKNN.slice(0, 1));
const _hUyedklX = _bFoTcZGJ(new Uint8Array(_FhUNbKNN.slice(1, 17)));
if (_hUyedklX !== _UnMqpPMc) return { error: true, details: "Invalid _UnMqpPMc" };
const _SOVMXaWj = new Uint8Array(_FhUNbKNN.slice(17, 18))[0];
const _UhTlzbYx = new Uint8Array(_FhUNbKNN.slice(18 + _SOVMXaWj, 19 + _SOVMXaWj))[0];
if (_UhTlzbYx !== 1) return { error: true, details: `Unsupported _UhTlzbYx: ${_UhTlzbYx}` };
const _qwwlDtcK = 19 + _SOVMXaWj;
const _YBHdHkou = new DataView(_FhUNbKNN.slice(_qwwlDtcK, _qwwlDtcK + 2)).getUint16(0);
let _TNAsPcZx = _qwwlDtcK + 2;
const _LqiGMoFy = new Uint8Array(_FhUNbKNN.slice(_TNAsPcZx, _TNAsPcZx + 1))[0];
let _phKKzVbf = 0;
let _oUUGtAsc = _TNAsPcZx + 1;
let _xKOkFOGo = "";
switch (_LqiGMoFy) {
case 1: _phKKzVbf = 4; _xKOkFOGo = new Uint8Array(_FhUNbKNN.slice(_oUUGtAsc, _oUUGtAsc + _phKKzVbf)).join("."); break;
case 2: _phKKzVbf = new Uint8Array(_FhUNbKNN.slice(_oUUGtAsc, _oUUGtAsc + 1))[0]; _oUUGtAsc++; _xKOkFOGo = new TextDecoder().decode(_FhUNbKNN.slice(_oUUGtAsc, _oUUGtAsc + _phKKzVbf)); break;
case 3: _phKKzVbf = 16; const _DGldnCph = new DataView(_FhUNbKNN.slice(_oUUGtAsc, _oUUGtAsc + _phKKzVbf)); const _XFeZAezC = []; for (let _GbPryFSW = 0; _GbPryFSW < 8; _GbPryFSW++) _XFeZAezC.push(_DGldnCph.getUint16(_GbPryFSW * 2).toString(16)); _xKOkFOGo = _XFeZAezC.join(":"); break;
default: return { error: true, details: `Invalid _FKHGpHni _xPvZdivJ: ${_LqiGMoFy}` };
}
if (!_xKOkFOGo) return { error: true, details: "Target _aQoircUW is empty" };
return { error: false, details: { _xKOkFOGo, _YBHdHkou, _LQxdpmjM, payloadIndex: _oUUGtAsc + _phKKzVbf } };
}
async function _wkiauKGY(_XCTAWrUY, _nwIhvSXG, _ljwKEgQr, _JZhUTkCH) {
let _qeeBEpct = _ljwKEgQr;
let _wrRjvAfD = false;
let _vkiVreEm = _XCTAWrUY._xYILkimC.pipeTo(new WritableStream({
write(chunk) {
_wrRjvAfD = true;
if (_nwIhvSXG.readyState !== 1) throw new Error("Channel is not open");
if (_qeeBEpct) {
const _FoJxvtIe = new Uint8Array(_qeeBEpct.byteLength + chunk.byteLength);
_FoJxvtIe._JkozqCYA(new Uint8Array(_qeeBEpct));
_FoJxvtIe._JkozqCYA(new Uint8Array(chunk), _qeeBEpct.byteLength);
_nwIhvSXG.send(_FoJxvtIe._FhUNbKNN);
_qeeBEpct = null;
} else {
_nwIhvSXG.send(chunk);
}
},
close() {}
}), { signal: new AbortController().signal }).catch((err) => {
console.error("Pipe to _nwIhvSXG error:", err._XrcYeiCq);
});
await _vkiVreEm;
if (!_wrRjvAfD && _JZhUTkCH) {
_JZhUTkCH();
}
}
function _nYEkQfhG(_nwIhvSXG) {
try { if (_nwIhvSXG.readyState === 1 || _nwIhvSXG.readyState === 2) _nwIhvSXG.close(); } catch (_JtcEkBov) {}
}
const _wsyRhvbS = Array.from({ _regCSWJt: 256 }, (_, _GbPryFSW) => (_GbPryFSW + 256).toString(16).slice(1));
function _bFoTcZGJ(_LzpgsKat, offset = 0) {
return (
_wsyRhvbS[_LzpgsKat[offset]] + _wsyRhvbS[_LzpgsKat[offset + 1]] + _wsyRhvbS[_LzpgsKat[offset + 2]] + _wsyRhvbS[_LzpgsKat[offset + 3]] + "-" +
_wsyRhvbS[_LzpgsKat[offset + 4]] + _wsyRhvbS[_LzpgsKat[offset + 5]] + "-" +
_wsyRhvbS[_LzpgsKat[offset + 6]] + _wsyRhvbS[_LzpgsKat[offset + 7]] + "-" +
_wsyRhvbS[_LzpgsKat[offset + 8]] + _wsyRhvbS[_LzpgsKat[offset + 9]] + "-" +
_wsyRhvbS[_LzpgsKat[offset + 10]] + _wsyRhvbS[_LzpgsKat[offset + 11]] +
_wsyRhvbS[_LzpgsKat[offset + 12]] + _wsyRhvbS[_LzpgsKat[offset + 13]] +
_wsyRhvbS[_LzpgsKat[offset + 14]] + _wsyRhvbS[_LzpgsKat[offset + 15]]
).toLowerCase();
}
let _kGGssLfI = { "N/A":"未知" };
async function _cxTJUNnJ(_PYOnBbai, _VyjYibPR, _JZhUTkCH) {
try {
const _FGcexIUv = await fetch(_PYOnBbai, {
_yQjrXpwp: { 'User-Agent': 'Cloudflare-Worker-IP-Scanner' }
});
if (!_FGcexIUv.ok) {
console.error(`获取 ${_PYOnBbai} 失败: HTTP ${_FGcexIUv.status}`);
return _JZhUTkCH;
}
const _YCrAIJID = await _FGcexIUv._YCrAIJID();
return _VyjYibPR(_YCrAIJID);
} catch (error) {
console.error(`获取或解析 ${_PYOnBbai} 时发生网络错误: ${error._XrcYeiCq}`);
return _JZhUTkCH;
}
}
function _ydOjyxYB(_YCrAIJID) {
if (!_YCrAIJID) return [];
const _ggZxhUkN = /^(?:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2}|[0-9a-fA-F:]+\/\d{1,3})$/;
const _GyCwrgyy = _YCrAIJID.split(/[\s,;#|]+/);
const _tUDFhAdG = [];
for (const _UAgSMikh of _GyCwrgyy) {
const _KWIIxyac = _UAgSMikh.trim();
if (!_KWIIxyac) continue;
const _FGaCKQOe = _KWIIxyac.lastIndexOf(':');
let _wPirKtDR = _KWIIxyac;
if(_FGaCKQOe > _KWIIxyac.lastIndexOf(']')) {
const _DqvOzOXD = _KWIIxyac.substring(_FGaCKQOe + 1);
if(!isNaN(_DqvOzOXD) && _DqvOzOXD._regCSWJt > 0) {
_wPirKtDR = _KWIIxyac.substring(0, _FGaCKQOe);
}
}
if (_OLivloTz.isValid(_wPirKtDR.replace(/[\[\]]/g, '')) || _ggZxhUkN.test(_KWIIxyac)) {
_tUDFhAdG.push(_KWIIxyac);
}
}
return _tUDFhAdG;
}
function _PrAtpTnw(_YCrAIJID) {
if (!_YCrAIJID) return [];
return _YCrAIJID.split(/\s+/).filter(d => d.trim() !== '');
}
function _RkHnAQRN(_YCrAIJID) {
if (!_YCrAIJID) return { "N/A": "未知" };
try {
return JSON.parse(`{${_YCrAIJID}}`);
} catch (_JtcEkBov) {
console.error("解析 _kGGssLfI 失败:", _JtcEkBov);
return { "N/A": "未知" };
}
}
const _OLivloTz = {
isValid: (_AgieWrkl) => _OLivloTz.isIPv4(_AgieWrkl) || _OLivloTz.isIPv6(_AgieWrkl),
isIPv4: (_AgieWrkl) => {
if (typeof _AgieWrkl !== 'string') return false;
const _XFeZAezC = _AgieWrkl.split('.');
if (_XFeZAezC._regCSWJt !== 4) return false;
return _XFeZAezC.every(_zdeYZmfe => {
const _IhfjQPvZ = parseInt(_zdeYZmfe, 10);
return !isNaN(_IhfjQPvZ) && _IhfjQPvZ >= 0 && _IhfjQPvZ <= 255 && String(_IhfjQPvZ) === _zdeYZmfe;
});
},
isIPv6: (_AgieWrkl) => {
if (typeof _AgieWrkl !== 'string') return false;
return /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/_GbPryFSW.test(_AgieWrkl);
},
toLong4: (_AgieWrkl) => _AgieWrkl.split('.').reduce((acc, octet, _GbPryFSW) => acc + (parseInt(octet) << (8*(3-_GbPryFSW))),0)>>>0,
fromLong4: (long) => [(long>>>24)&0xFF,(long>>>16)&0xFF,(long>>>8)&0xFF,long&0xFF].join('.'),
toBigInt6: (_AgieWrkl) => {
try {
const _IPuHsEbr = _AgieWrkl.split('/')[0];
const _XFeZAezC = _IPuHsEbr.split('::');
if (_XFeZAezC._regCSWJt > 2) return 0n;
let _aZeMAcAL = [];
if (_XFeZAezC[0]) {
_aZeMAcAL = _XFeZAezC[0].split(':');
}
let _kquyVQSc = [];
if (_XFeZAezC._regCSWJt > 1 && _XFeZAezC[1]) {
_kquyVQSc = _XFeZAezC[1].split(':');
}
if (_aZeMAcAL._regCSWJt + _kquyVQSc._regCSWJt > 8) return 0n;
const _FFAURWnK = 8 - (_aZeMAcAL._regCSWJt + _kquyVQSc._regCSWJt);
const _YWLOKSDA = [
..._aZeMAcAL,
...Array(_FFAURWnK).fill('0'),
..._kquyVQSc
].map(_zdeYZmfe => _zdeYZmfe || '0');
while(_YWLOKSDA._regCSWJt < 8) {
_YWLOKSDA.push('0');
}
let _ogtypyUJ = 0n;
for (const _zdeYZmfe of _YWLOKSDA) {
if (_zdeYZmfe._regCSWJt > 4) return 0n;
const _Usfwpmje = BigInt('0x' + _zdeYZmfe);
_ogtypyUJ = (_ogtypyUJ << 16n) | _Usfwpmje;
}
return _ogtypyUJ;
} catch(_JtcEkBov) {
return 0n;
}
},
fromBigInt6: (_ogtypyUJ) => {
if (typeof _ogtypyUJ !== '_ogtypyUJ' || _ogtypyUJ < 0n) return null;
const _XFeZAezC = [];
for (let _GbPryFSW = 0; _GbPryFSW < 8; _GbPryFSW++) {
_XFeZAezC.unshift((_ogtypyUJ & 0xFFFFn).toString(16));
_ogtypyUJ >>= 16n;
}
let _ixeUsjAT = { start: -1, _xFzSfqqf: 0 };
let _CfDMVuqM = { start: -1, _xFzSfqqf: 0 };
for (let _GbPryFSW = 0; _GbPryFSW < 8; _GbPryFSW++) {
if (_XFeZAezC[_GbPryFSW] === '0') {
if (_CfDMVuqM.start === -1) _CfDMVuqM.start = _GbPryFSW;
_CfDMVuqM._xFzSfqqf++;
} else {
if (_CfDMVuqM._xFzSfqqf > _ixeUsjAT._xFzSfqqf) _ixeUsjAT = { ..._CfDMVuqM };
_CfDMVuqM = { start: -1, _xFzSfqqf: 0 };
}
}
if (_CfDMVuqM._xFzSfqqf > _ixeUsjAT._xFzSfqqf) _ixeUsjAT = { ..._CfDMVuqM };
if (_ixeUsjAT._xFzSfqqf > 1) {
_XFeZAezC.splice(_ixeUsjAT.start, _ixeUsjAT._xFzSfqqf, '');
if (_ixeUsjAT.start === 0) _XFeZAezC.unshift('');
if (_ixeUsjAT.start + _ixeUsjAT._xFzSfqqf === 8) _XFeZAezC.push('');
}
return _XFeZAezC.join(':');
},
cidrToRange: (cidr, _yyYyUBuI = 1) => {
try {
const [range, bitsStr] = cidr.split('/');
const _CcmRvgfp = parseInt(bitsStr, 10);
const _wxpYrLiQ = new Set();
if (_OLivloTz.isIPv4(range)) {
if (isNaN(_CcmRvgfp) || _CcmRvgfp < 8 || _CcmRvgfp > 32) return [];
if (_CcmRvgfp === 32) return [range];
const _wIhVtGzh = _OLivloTz.toLong4(range);
const _gPaTqAnC = (0xFFFFFFFF << (32 - _CcmRvgfp)) >>> 0;
const _ahJGzqXJ = _wIhVtGzh & _gPaTqAnC;
const _eCBmWXDD = 1 << (32 - _CcmRvgfp);
if (_eCBmWXDD <= 2) return [];
const _gzHosXhb = Math.min(_yyYyUBuI, _eCBmWXDD - 2);
let _ktkspscT = 0;
while (_wxpYrLiQ.size < _gzHosXhb && _ktkspscT < _gzHosXhb * 5) {
const _SIUDuuEt = Math.floor(Math.random() * (_eCBmWXDD - 2)) + 1;
_wxpYrLiQ.add(_OLivloTz.fromLong4((_ahJGzqXJ + _SIUDuuEt) >>> 0));
_ktkspscT++;
}
return Array.from(_wxpYrLiQ);
} else if (_OLivloTz.isIPv6(range)) {
if (isNaN(_CcmRvgfp) || _CcmRvgfp < 16 || _CcmRvgfp > 128) return [];
if (_CcmRvgfp === 128) return [range];
const _NhTPWQAP = _OLivloTz.toBigInt6(range);
const _gPaTqAnC = (2n ** BigInt(128 - _CcmRvgfp) - 1n);
const _ahJGzqXJ = _NhTPWQAP & ~_gPaTqAnC;
const _lLCjBihq = 2n ** BigInt(128 - _CcmRvgfp);
if (_lLCjBihq <= 2n) return [];
let _ktkspscT = 0;
while (_wxpYrLiQ.size < _yyYyUBuI && _ktkspscT < _yyYyUBuI * 5) {
const _RaEIXnfs = new Uint8Array(16);
(typeof crypto !== 'undefined' ? crypto : self.crypto).getRandomValues(_RaEIXnfs);
let _zPfzlRjU = 0n;
for (const _NKOMIhyz of _RaEIXnfs) {
_zPfzlRjU = (_zPfzlRjU << 8n) | BigInt(_NKOMIhyz);
}
const _SIUDuuEt = _zPfzlRjU % (_lLCjBihq - 2n) + 1n;
_wxpYrLiQ.add(_OLivloTz.fromBigInt6(_ahJGzqXJ + _SIUDuuEt));
_ktkspscT++;
}
return Array.from(_wxpYrLiQ);
}
return [];
} catch(_JtcEkBov) {
console.error(`CIDR to range failed for ${cidr}:`, _JtcEkBov);
return [];
}
}
};
function _FVEKtRLV(_bsJhgFOE, _TZnITLNs) {
const _GuwdHkpz = {};
const _gvoOMODP = Object._gvoOMODP(_TZnITLNs);
const _XFeZAezC = _gvoOMODP.map(_ncvTMzJn => {
const _ltDAswgL = _bsJhgFOE * (_TZnITLNs[_ncvTMzJn] / 100);
return { _ncvTMzJn, _yyYyUBuI: Math.floor(_ltDAswgL), remainder: _ltDAswgL - Math.floor(_ltDAswgL) };
});
let _ovTWCPaH = _XFeZAezC.reduce((acc, _zdeYZmfe) => acc + _zdeYZmfe._yyYyUBuI, 0);
_XFeZAezC.sort((a, b) => b.remainder - a.remainder);
let _INsmhXIB = _bsJhgFOE - _ovTWCPaH;
for (let _GbPryFSW = 0; _GbPryFSW < _INsmhXIB; _GbPryFSW++) {
_XFeZAezC[_GbPryFSW % _XFeZAezC._regCSWJt]._yyYyUBuI++;
}
for (const _zdeYZmfe of _XFeZAezC) {
_GuwdHkpz[_zdeYZmfe._ncvTMzJn] = _zdeYZmfe._yyYyUBuI;
}
return _GuwdHkpz;
}
async function _KFgcDAOW(_TfWVBESf) {
const _dKBkdxWM = _TfWVBESf.DB.prepare("SELECT _Usfwpmje FROM kv_data WHERE _ncvTMzJn = ?").bind(_ofmpCwHT);
const { _IFpUHWkw } = await _dKBkdxWM.all();
return _IFpUHWkw._regCSWJt > 0 ? _IFpUHWkw[0]._Usfwpmje : null;
}
async function _XAfBVDqq(_TfWVBESf, _FZEGENVl) {
const _dKBkdxWM = _TfWVBESf.DB.prepare(
"INSERT INTO kv_data (_ncvTMzJn, _Usfwpmje) VALUES (?, ?) ON CONFLICT(_ncvTMzJn) DO UPDATE SET _Usfwpmje = excluded._Usfwpmje"
);
await _dKBkdxWM.bind(_ofmpCwHT, _FZEGENVl).run();
}
async function _MqiBDybV(_cCPUsROC, _TfWVBESf) {
const { _FZEGENVl } = await _cCPUsROC.json();
const _uQcyzxGT = await _KFgcDAOW(_TfWVBESf);
if (_uQcyzxGT === _FZEGENVl) {
return _CjLwaJwU({ success: true });
}
return _CjLwaJwU({ success: false, _XrcYeiCq: '密码错误' }, 401);
}
async function _ezVCzogf(_cCPUsROC, _TfWVBESf) {
const _eLbwEiiw = await _SJrDpZPL(_TfWVBESf);
if (!_eLbwEiiw.visitorPassword || !_eLbwEiiw.visitorPassword._LQIfRYbE) {
return _CjLwaJwU({ success: true });
}
try {
const { _FZEGENVl } = await _cCPUsROC.json();
const _pMoZMUDq = _eLbwEiiw.visitorPassword._FZEGENVl;
if (_pMoZMUDq && _FZEGENVl === _pMoZMUDq) {
return _CjLwaJwU({ success: true });
}
return _CjLwaJwU({ success: false, _XrcYeiCq: '访客密码错误' }, 401);
} catch (_JtcEkBov) {
return _CjLwaJwU({ success: false, _XrcYeiCq: '无效请求' }, 400);
}
}
async function _WZgqXynu(_cCPUsROC, _TfWVBESf) {
const _KSlAHWjG = await _KFgcDAOW(_TfWVBESf);
if (_KSlAHWjG) {
return _CjLwaJwU({ success: false, _XrcYeiCq: "密码已设置,无法重复初始化。" }, 403);
}
const { _FZEGENVl } = await _cCPUsROC.json();
if (!_FZEGENVl || _FZEGENVl._regCSWJt < 6) {
return _CjLwaJwU({ success: false, _XrcYeiCq: "密码长度不能少于6位。" }, 400);
}
await _XAfBVDqq(_TfWVBESf, _FZEGENVl);
return _CjLwaJwU({ success: true, _XrcYeiCq: "初始密码设置成功!请刷新页面并登录。" });
}
async function _ZkZLWPOI(_cCPUsROC, _TfWVBESf) {
const { _ZHAmdrhm, _qfxshbjb } = await _cCPUsROC.json();
const _uQcyzxGT = await _KFgcDAOW(_TfWVBESf);
if (_uQcyzxGT !== _ZHAmdrhm) {
return _CjLwaJwU({ success: false, _XrcYeiCq: "旧密码错误。" }, 403);
}
if (!_qfxshbjb || _qfxshbjb._regCSWJt < 6) {
return _CjLwaJwU({ success: false, _XrcYeiCq: "新密码长度不能少于6位。" }, 400);
}
await _XAfBVDqq(_TfWVBESf, _qfxshbjb);
return _CjLwaJwU({ success: true, _XrcYeiCq: "密码修改成功!" });
}
function _gqBKdozQ() {
return {
theme: 'theme-aurora-glass',
primaryColor: '#00A0FF',
particleColor: '#FFFFFF',
useResolvedDomains: false,
resolvedDomains: '',
sampleSize: 150,
topN: 10,
rttRandomMin: 79,
rttRandomMax: 179,
_JAUczdzX: '',
api: {
_LQIfRYbE: true,
_XrcYeiCq: '维护中...',
},
ispFilter: { _LQIfRYbE: true },
geoLocation: {
retries: 1,
filterUnknown: false,
},
streamer: {
_LQIfRYbE: true
},
websocketStreamer: {
_LQIfRYbE: true,
_PYOnBbai: 'https://snippets.neib.cn'
},
cloudStorage: {
_LQIfRYbE: true
},
visitorPassword: {
_LQIfRYbE: false,
_FZEGENVl: '',
},
customSubPath: {
_LQIfRYbE: false,
_FCkFHQxR: 'latest',
},
subscriptionId: {
_regCSWJt: 8,
_EawAVbaq: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
},
itemLink: {
_LQIfRYbE: true,
template: 'vless://{_cffotcQX}@{_AgieWrkl}:{_pmLpSxmu}?encryption=none&security=tls&sni={_aQoircUW}&fp=random&_xPvZdivJ=ws&_aQoircUW={_aQoircUW}&_FCkFHQxR={_FCkFHQxR}#{_JwxXuqIY}',
selectionMode: 'first',
_nzeMUHOv: [
{ _JwxXuqIY: '默认配置', _aQoircUW: '', '_cffotcQX': '3b4d4cd8-cb92-4421-bf86-fb51570fc038', _FCkFHQxR: '/?ed=2560' }
],
_bxRVVoMU: [],
},
dataFeeds: {
universalFallbackAddress: '',
},
announcement: {
popup: {
_LQIfRYbE: false,
_YCrAIJID: '',
_ETvtvUak: 5
},
marquee: {
_LQIfRYbE: false,
_YCrAIJID: ''
}
},
subscriptionUrl: {
prefixEnabled: false,
prefixUrl: '',
suffixEnabled: false,
suffixUrl: ''
},
fineGrained: {
_LQIfRYbE: true,
sources: [
{ _kelSKWed: 'CF官方IPV4', _wxpYrLiQ: 'https://raw.githubusercontent.com/5yfx/CF_WEB_IP_Worekrs/refs/heads/main/IPV4', _rzwGgyTB: false, _LQIfRYbE: true, _OpJnflku: 20 },
{ _kelSKWed: 'CF官方IPV6', _wxpYrLiQ: 'https://raw.githubusercontent.com/5yfx/CF_WEB_IP_Worekrs/refs/heads/main/IPV6', _rzwGgyTB: false, _LQIfRYbE: true, _OpJnflku: 20 },
{ _kelSKWed: '反代优选0', _wxpYrLiQ: 'https://wvs.sosorg.nyc.mn/sub?_cffotcQX=adb14576-6588-40da-99fd-b9894cd779b0&encryption=none&security=tls&sni=ss.nzvrn.com&_xPvZdivJ=ws&_aQoircUW=ss.nzvrn.com&_FCkFHQxR=%2Fsnippets%3Fip%3DendpointAddress%3Aport%28443%29%26nat64%3D6to4', _rzwGgyTB: false, _LQIfRYbE: true, _OpJnflku: 30 },
{ _kelSKWed: '官方优选1', _wxpYrLiQ: 'https://ipdb.api.030101.xyz/?_xPvZdivJ=bestcf&_ibYSNozD=true', _rzwGgyTB: false, _LQIfRYbE: true, _OpJnflku: 10 },
{ _kelSKWed: '反代优选2', _wxpYrLiQ: 'https://ipdb.api.030101.xyz/?_xPvZdivJ=bestproxy&_ibYSNozD=true', _rzwGgyTB: false, _LQIfRYbE: true, _OpJnflku: 5 },
{ _kelSKWed: '官方优选2', _wxpYrLiQ: 'https://addressesapi.090227.xyz/_AgieWrkl.164746.xyz', _rzwGgyTB: false, _LQIfRYbE: true, _OpJnflku: 10 },
{ _kelSKWed: '官方优选3', _wxpYrLiQ: 'https://cfxr.eu.org/getSub?_aQoircUW=snipaste.huggy.qzz.io', _rzwGgyTB: false, _LQIfRYbE: true, _OpJnflku: 5 },
{ _kelSKWed: '官方优选4', _wxpYrLiQ: 'https://addressesapi.090227.xyz/CloudFlareYes', _rzwGgyTB: false, _LQIfRYbE: true, _OpJnflku: 10 }
]
},
customNodes: {
_LQIfRYbE: false,
list: ''
},
texts: {
title: 'Cloudflare IP',
loginButton: '登录',
loginButtonSuccess: '修改参数',
appDownloadTitle: 'APP 下载',
liveTitle: '本次优选结果',
cachedTitle: '上次优选结果',
tableHeader1: '排名',
tableHeader2: 'IP地址',
tableHeader3: '端口',
tableHeader4: '延迟(ms)',
tableHeader5: '归属地',
tableHeader6: '运营商',
tableHeader7: '操作',
pingInProgress: '测试中',
},
colors: {
title: '#FFFFFF',
loginButton: '#E0E0E0',
liveTitle: '#E0E0E0',
cachedTitle: '#E0E0E0',
tableHeader: '#B0B0B0',
},
telegram: {
bot_token: '',
chat_id: '',
},
};
}
function _tYfopgkZ(_bfXOxlPt, _ansqBguP) {
if (!_bfXOxlPt) return _ansqBguP;
const _pSwRmbLo = { ..._ansqBguP };
for (const _ncvTMzJn in _ansqBguP) {
if (_bfXOxlPt.hasOwnProperty(_ncvTMzJn)) {
if (typeof _bfXOxlPt[_ncvTMzJn] === 'object' && _bfXOxlPt[_ncvTMzJn] !== null && !Array.isArray(_bfXOxlPt[_ncvTMzJn]) && typeof _ansqBguP[_ncvTMzJn] === 'object' && _ansqBguP[_ncvTMzJn] !== null && !Array.isArray(_ansqBguP[_ncvTMzJn])) {
_pSwRmbLo[_ncvTMzJn] = _tYfopgkZ(_bfXOxlPt[_ncvTMzJn], _ansqBguP[_ncvTMzJn]);
} else {
_pSwRmbLo[_ncvTMzJn] = _bfXOxlPt[_ncvTMzJn];
}
}
}
return _pSwRmbLo;
}
async function _SJrDpZPL(_TfWVBESf) {
try {
const _dKBkdxWM = _TfWVBESf.DB.prepare("SELECT _Usfwpmje FROM kv_data WHERE _ncvTMzJn = ?").bind(_cLUWAiFs);
const { _IFpUHWkw } = await _dKBkdxWM.all();
const _EbmMLECb = _IFpUHWkw._regCSWJt > 0 ? _IFpUHWkw[0]._Usfwpmje : null;
const _qJhbYVZT = _EbmMLECb ? JSON.parse(_EbmMLECb) : {};
return _tYfopgkZ(_qJhbYVZT, _gqBKdozQ());
} catch (_JtcEkBov) {
console.error("无法从D1获取或解析全局配置:", _JtcEkBov);
return _gqBKdozQ();
}
}
async function _lrHZWCtW(_TfWVBESf) {
const _hsVGvwHc = await _SJrDpZPL(_TfWVBESf);
return _CjLwaJwU(_hsVGvwHc);
}
async function _ckpMXowk(_cCPUsROC, _TfWVBESf, _AQGKtpwe) {
try {
const { _hsVGvwHc, adminPassword } = await _cCPUsROC.json();
const _uQcyzxGT = await _KFgcDAOW(_TfWVBESf);
if (_uQcyzxGT !== adminPassword) {
return _CjLwaJwU({ success: false, _XrcYeiCq: "管理员密码错误" }, 403);
}
const _dKBkdxWM = _TfWVBESf.DB.prepare(
"INSERT INTO kv_data (_ncvTMzJn, _Usfwpmje) VALUES (?, ?) ON CONFLICT(_ncvTMzJn) DO UPDATE SET _Usfwpmje = excluded._Usfwpmje"
);
const _WrUQbavb = _dKBkdxWM.bind(_cLUWAiFs, JSON.stringify(_hsVGvwHc)).run();
_AQGKtpwe.waitUntil(_WrUQbavb);
return _CjLwaJwU({ success: true, _XrcYeiCq: "配置已成功保存!" });
} catch (_JtcEkBov) {
return _CjLwaJwU({ success: false, _XrcYeiCq: `保存失败: ${_JtcEkBov._XrcYeiCq}` }, 500);
}
}
async function _rmOmXJaI() {
const _UFWfaxiQ = 'https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN';
try {
const _CvufAzgf = await fetch(_UFWfaxiQ);
const _XyqZRirb = await _CvufAzgf.json();
const _UlzSpmJO = 'https://www.bing.com' + _XyqZRirb.images[0]._PYOnBbai;
return fetch(_UlzSpmJO);
} catch (_JtcEkBov) {
return new Response('获取壁纸失败', { status: 502 });
}
}
async function _VyhmlyrO(_AgieWrkl) {
try {
const _FGcexIUv = await fetch(`http://_AgieWrkl-api.com/json/${_AgieWrkl}?fields=status,_ibYSNozD,countryCode,_AnRptgfe&lang=zh-CN`);
if (_FGcexIUv.ok) {
const _CSdOdjvZ = await _FGcexIUv.json();
if (_CSdOdjvZ.status === 'success' && (_CSdOdjvZ.countryCode || _CSdOdjvZ._ibYSNozD)) {
let _AnRptgfe = _CSdOdjvZ._AnRptgfe || '未知';
if (_AnRptgfe.toLowerCase().includes('cloudflare')) {
_AnRptgfe = 'CloudFlare';
}
return {
_kelSKWed: _kGGssLfI[_CSdOdjvZ.countryCode] || _CSdOdjvZ._ibYSNozD || _CSdOdjvZ.countryCode,
_AnRptgfe: _AnRptgfe
};
}
}
} catch (_JtcEkBov) {}
try {
const _FGcexIUv = await fetch(`https://api._AgieWrkl.sb/geoip/${_AgieWrkl}`);
if (_FGcexIUv.ok) {
const _CSdOdjvZ = await _FGcexIUv.json();
if (_CSdOdjvZ.country_code || _CSdOdjvZ._ibYSNozD) {
let _AnRptgfe = _CSdOdjvZ._AnRptgfe || '未知';
if (_AnRptgfe.toLowerCase().includes('cloudflare')) {
_AnRptgfe = 'CloudFlare';
}
return {
_kelSKWed: _kGGssLfI[_CSdOdjvZ.country_code] || _CSdOdjvZ._ibYSNozD || _CSdOdjvZ.country_code,
_AnRptgfe: _AnRptgfe
};
}
}
} catch (_JtcEkBov) {}
return { _kelSKWed: '未知', _AnRptgfe: '未知' };
}
async function _jzLVsPty(_cCPUsROC, _TfWVBESf) {
try {
const { _wxpYrLiQ } = await _cCPUsROC.json();
if (!Array.isArray(_wxpYrLiQ)) {
return _CjLwaJwU({ error: "输入无效,需要一个IP数组。" }, 400);
}
const _rORZUesy = _wxpYrLiQ.map(_AgieWrkl => _VyhmlyrO(_AgieWrkl).then(_SPWrcyDv => ({ _AgieWrkl, ..._SPWrcyDv })));
const _IFpUHWkw = await Promise.all(_rORZUesy);
return _CjLwaJwU(_IFpUHWkw);
} catch (_JtcEkBov) {
return _CjLwaJwU({ error: `获取地理位置失败: ${_JtcEkBov._XrcYeiCq}` }, 500);
}
}
async function _PXOuCsNJ(_cCPUsROC, _TfWVBESf) {
const _hsVGvwHc = await _SJrDpZPL(_TfWVBESf);
if (!_hsVGvwHc.cloudStorage._LQIfRYbE) {
return _CjLwaJwU({ _IFpUHWkw: [], generatedBy: null });
}
try {
const _dKBkdxWM = _TfWVBESf.DB.prepare("SELECT _Usfwpmje FROM kv_data WHERE _ncvTMzJn = ?").bind(_LUSVLsdl);
const { _IFpUHWkw } = await _dKBkdxWM.all();
const _xbRHBnpX = _IFpUHWkw._regCSWJt > 0 ? _IFpUHWkw[0]._Usfwpmje : null;
const _qCnYckCb = _xbRHBnpX ? JSON.parse(_xbRHBnpX) : null;
return _CjLwaJwU(_qCnYckCb || { _IFpUHWkw: [], generatedBy: null });
} catch (_JtcEkBov) {
console.error("从D1读取缓存IP失败:", _JtcEkBov);
return _CjLwaJwU({ _IFpUHWkw: [], generatedBy: null });
}
}
async function _sJeJbKzu(_cCPUsROC, _TfWVBESf, _AQGKtpwe) {
const _hsVGvwHc = await _SJrDpZPL(_TfWVBESf);
if (!_hsVGvwHc.cloudStorage._LQIfRYbE) {
return _CjLwaJwU({ success: true, _XrcYeiCq: "云端存储已禁用,不保存结果。" });
}
const _AJTCuvjP = _cCPUsROC._yQjrXpwp.get('CF-Connecting-IP') || "未知IP";
const _ibYSNozD = _cCPUsROC.cf?._ibYSNozD || "未知";
const _nsyVrrZN = _cCPUsROC.cf?._nsyVrrZN || "";
let _OnDkXXkg = _kGGssLfI[_ibYSNozD] || _ibYSNozD;
if (_nsyVrrZN && _nsyVrrZN !== "未知城市" && _nsyVrrZN !== _ibYSNozD) _OnDkXXkg = `${_OnDkXXkg} ${_kGGssLfI[_nsyVrrZN] || _nsyVrrZN}`;
const _upIprBuM = {
_AgieWrkl: _SMaCqjIx(_AJTCuvjP),
_kelSKWed: _OnDkXXkg.trim(),
time: _VxpXPAOE()
};
try {
const _kRrsPTLS = await _cCPUsROC.json();
if (!Array.isArray(_kRrsPTLS)) return _CjLwaJwU({ error: "无效数据格式" }, 400);
const _ehUpGaDB = _kRrsPTLS.map(_DFMcZVkP => ({
_AgieWrkl: String(_DFMcZVkP._AgieWrkl || ''),
_pmLpSxmu: _DFMcZVkP._pmLpSxmu ? parseInt(_DFMcZVkP._pmLpSxmu, 10) : undefined,
_yqaQgRfI: parseInt(_DFMcZVkP._yqaQgRfI, 10),
_kelSKWed: typeof _DFMcZVkP._kelSKWed === 'string' ? _DFMcZVkP._kelSKWed.substring(0, 50) : 'N/A',
_AnRptgfe: typeof _DFMcZVkP._AnRptgfe === 'string' ? _DFMcZVkP._AnRptgfe.substring(0, 100) : 'N/A'
}));
const _SJGYvRTH = {
generatedBy: _upIprBuM,
_IFpUHWkw: _ehUpGaDB
};
const _WMvstOUd = _TfWVBESf.DB.prepare(
"INSERT INTO kv_data (_ncvTMzJn, _Usfwpmje) VALUES (?, ?) ON CONFLICT(_ncvTMzJn) DO UPDATE SET _Usfwpmje = excluded._Usfwpmje"
).bind(_LUSVLsdl, JSON.stringify(_SJGYvRTH)).run();
if (_hsVGvwHc.telegram.bot_token && _hsVGvwHc.telegram.chat_id) {
const _zkTlKEfX = _ehUpGaDB.map(r => `${r._AgieWrkl} ~ ${r._kelSKWed}`).join('\n');
const _IjcUkglx = `优选完成!\n来源: ${_upIprBuM._AgieWrkl} (${_upIprBuM._kelSKWed})\n时间: ${_upIprBuM.time}\n\n结果:\n${_zkTlKEfX}`;
const _uWTeMWyG = `https://api.telegram.org/bot${_hsVGvwHc.telegram.bot_token}/sendMessage?chat_id=${_hsVGvwHc.telegram.chat_id}&_YCrAIJID=${encodeURIComponent(_IjcUkglx)}`;
const _lxXsirxC = fetch(_uWTeMWyG).catch(_JtcEkBov => console.error("Telegram结果通知失败:", _JtcEkBov));
_AQGKtpwe.waitUntil(Promise.all([_WMvstOUd, _lxXsirxC]));
} else {
_AQGKtpwe.waitUntil(_WMvstOUd);
}
return _CjLwaJwU({ success: true, _XrcYeiCq: "结果已保存" });
} catch (_JtcEkBov) {
return _CjLwaJwU({ error: "D1写入失败", _XrcYeiCq: _JtcEkBov._XrcYeiCq }, 500);
}
}
async function _THilGRUA(_cCPUsROC, _TfWVBESf, _AQGKtpwe) {
try {
const _WKIklAcK = await _cCPUsROC.json();
if (!Array.isArray(_WKIklAcK)) return _CjLwaJwU({ error: "无效数据格式" }, 400);
const _SJGYvRTH = {
_IFpUHWkw: _WKIklAcK
};
const _dKBkdxWM = _TfWVBESf.DB.prepare(
"INSERT INTO kv_data (_ncvTMzJn, _Usfwpmje) VALUES (?, ?) ON CONFLICT(_ncvTMzJn) DO UPDATE SET _Usfwpmje = excluded._Usfwpmje"
);
const _WrUQbavb = _dKBkdxWM.bind(_nxNdxolp, JSON.stringify(_SJGYvRTH)).run();
_AQGKtpwe.waitUntil(_WrUQbavb);
return _CjLwaJwU({ success: true });
} catch (_JtcEkBov) {
return _CjLwaJwU({ error: "D1写入临时缓存失败", _XrcYeiCq: _JtcEkBov._XrcYeiCq }, 500);
}
}
function _fxJCIfKb(_regCSWJt, _EawAVbaq) {
let _bURsSTDL = '';
const _ocMwatcY = _EawAVbaq._regCSWJt;
for (let _GbPryFSW = 0; _GbPryFSW < _regCSWJt; _GbPryFSW++) {
_bURsSTDL += _EawAVbaq.charAt(Math.floor(Math.random() * _ocMwatcY));
}
return _bURsSTDL;
}
async function _kJYOIqBo(_cCPUsROC, _TfWVBESf) {
try {
const _kRrsPTLS = await _cCPUsROC.json();
if (!Array.isArray(_kRrsPTLS) || _kRrsPTLS._regCSWJt === 0) {
return _CjLwaJwU({ error: "无效或空的IP列表" }, 400);
}
const _hsVGvwHc = await _SJrDpZPL(_TfWVBESf);
const _WblHhhAb = _hsVGvwHc.subscriptionId || { _regCSWJt: 8, _EawAVbaq: 'abcdefghijklmnopqrstuvwxyz0123456789' };
let _HfqJWPTv;
let _fEGpaseZ = false;
let _ktkspscT = 0;
const _bcUosZWB = 10;
while (!_fEGpaseZ && _ktkspscT < _bcUosZWB) {
_HfqJWPTv = _fxJCIfKb(_WblHhhAb._regCSWJt, _WblHhhAb._EawAVbaq);
const { _IFpUHWkw } = await _TfWVBESf.DB.prepare("SELECT _vyCDLzmz FROM optimized_results WHERE _vyCDLzmz = ?").bind(_HfqJWPTv).all();
if (_IFpUHWkw._regCSWJt === 0) {
_fEGpaseZ = true;
}
_ktkspscT++;
}
if (!_fEGpaseZ) {
return _CjLwaJwU({ error: "无法生成唯一的订阅ID,请稍后重试或调整ID设置。" }, 500);
}
const _slfTutPF = JSON.stringify({ _wxpYrLiQ: _kRrsPTLS });
await _TfWVBESf.DB.prepare(
"INSERT INTO optimized_results (_vyCDLzmz, _CSdOdjvZ) VALUES (?, ?)"
).bind(_HfqJWPTv, _slfTutPF).run();
await _TfWVBESf.DB.prepare(
"INSERT INTO kv_data (_ncvTMzJn, _Usfwpmje) VALUES (?, ?) ON CONFLICT(_ncvTMzJn) DO UPDATE SET _Usfwpmje = excluded._Usfwpmje"
).bind(_QWZxJiqb, _HfqJWPTv).run();
return _CjLwaJwU({ success: true, _vyCDLzmz: _HfqJWPTv });
} catch (_JtcEkBov) {
return _CjLwaJwU({ error: "保存优选结果失败", _XrcYeiCq: _JtcEkBov._XrcYeiCq }, 500);
}
}
async function _FItOqEOQ(_cCPUsROC, _TfWVBESf) {
try {
const _HfqJWPTv = _cCPUsROC._qiTPaEwE._vyCDLzmz;
if (!_HfqJWPTv) {
return new Response("缺少结果ID", { status: 400 });
}
const _bURsSTDL = await _TfWVBESf.DB.prepare("SELECT _CSdOdjvZ FROM optimized_results WHERE _vyCDLzmz = ?").bind(_HfqJWPTv).first();
if (!_bURsSTDL) {
return new Response("未找到对应的优选结果", { status: 404 });
}
const _CSdOdjvZ = JSON.parse(_bURsSTDL._CSdOdjvZ);
let _zkTlKEfX = _CSdOdjvZ._wxpYrLiQ;
const _hsVGvwHc = await _SJrDpZPL(_TfWVBESf);
if (_hsVGvwHc.customNodes && _hsVGvwHc.customNodes._LQIfRYbE && _hsVGvwHc.customNodes.list) {
const _NNhdUOXe = _hsVGvwHc.customNodes.list.trim().split(/\s+/).filter(Boolean);
const _VDxlGGbt = _NNhdUOXe.map(_uSeWbbxo => {
let _FKHGpHni = _uSeWbbxo;
let _pmLpSxmu = undefined;
let _JwxXuqIY = null;
if (_FKHGpHni.includes('@')) {
const _XFeZAezC = _FKHGpHni.split('@');
_JwxXuqIY = _XFeZAezC.pop();
_FKHGpHni = _XFeZAezC.join('@');
}
if (_FKHGpHni.includes('#')) {
const _XFeZAezC = _FKHGpHni.split('#');
const _DqvOzOXD = _XFeZAezC.pop();
if (!isNaN(_DqvOzOXD) && _DqvOzOXD.trim() !== '') {
_pmLpSxmu = parseInt(_DqvOzOXD, 10);
}
_FKHGpHni = _XFeZAezC.join('#');
}
return {
_AgieWrkl: _FKHGpHni,
_pmLpSxmu: _pmLpSxmu,
_kelSKWed: _JwxXuqIY || _FKHGpHni,
_AnRptgfe: '自定义'
};
});
_zkTlKEfX.unshift(..._VDxlGGbt);
}
const { itemLink } = _hsVGvwHc;
const _YrPZNgPk = new URL(_cCPUsROC._PYOnBbai)._JTFGaeZU;
let _PDxuASez;
if (_hsVGvwHc.websocketStreamer && _hsVGvwHc.websocketStreamer._LQIfRYbE) {
if (!itemLink || !itemLink._LQIfRYbE || !itemLink._nzeMUHOv || itemLink._nzeMUHOv._regCSWJt === 0) {
return new Response("节点链接参数未配置或未启用 (反代模式)", { status: 500 });
}
_PDxuASez = _zkTlKEfX.map((_DFMcZVkP, _MDphqmhw) => {
let _JwxXuqIY;
if (_DFMcZVkP._AnRptgfe === '自定义') {
_JwxXuqIY = `${_MDphqmhw + 1} - ${_DFMcZVkP._kelSKWed}`;
} else {
_JwxXuqIY = `${_MDphqmhw + 1} - ${_DFMcZVkP._kelSKWed || '未知'}`;
if (!_DFMcZVkP._AnRptgfe || !_DFMcZVkP._AnRptgfe.toLowerCase().includes('cloudflare')) {
_JwxXuqIY += '(反代)';
}
}
const _jGsmbKhV = _OLivloTz.isIPv6(_DFMcZVkP._AgieWrkl) ? `[${_DFMcZVkP._AgieWrkl}]` : _DFMcZVkP._AgieWrkl;
const _pmLpSxmu = _DFMcZVkP._pmLpSxmu || 443;
const _nrjjyjvU = itemLink._nzeMUHOv[0];
const _GxrWfLoe = _nrjjyjvU._cffotcQX || '';
const _cffotcQX = (_GxrWfLoe && _LvZsANZg(_GxrWfLoe)) ? _GxrWfLoe : crypto.randomUUID();
const _FCkFHQxR = '/snippets?_AgieWrkl=endpointAddress:_pmLpSxmu(443)&nat64=6to4';
const _aQoircUW = _nrjjyjvU._aQoircUW || _YrPZNgPk;
const _qiTPaEwE = new URLSearchParams({
security: 'tls',
_xPvZdivJ: 'ws',
_aQoircUW: _aQoircUW,
sni: _aQoircUW,
fp: 'random'
});
return `vless://${_cffotcQX}@${_jGsmbKhV}:${_pmLpSxmu}?${_qiTPaEwE.toString()}&_FCkFHQxR=${encodeURIComponent(encodeURIComponent(_FCkFHQxR))}#${encodeURIComponent(_JwxXuqIY)}`;
});
} else {
if (!itemLink || !itemLink._LQIfRYbE || !itemLink._nzeMUHOv || itemLink._nzeMUHOv._regCSWJt === 0) {
return new Response("节点链接参数未配置或未启用", { status: 500 });
}
const _nrjjyjvU = itemLink._nzeMUHOv[0];
const { _aQoircUW, _cffotcQX, _FCkFHQxR } = _nrjjyjvU;
_PDxuASez = _zkTlKEfX.map((_DFMcZVkP, _MDphqmhw) => {
let _JwxXuqIY;
if (_DFMcZVkP._AnRptgfe === '自定义') {
_JwxXuqIY = `${_MDphqmhw + 1} - ${_DFMcZVkP._kelSKWed}`;
} else {
_JwxXuqIY = `${_MDphqmhw + 1} - ${_DFMcZVkP._kelSKWed || '未知'}`;
if (!_DFMcZVkP._AnRptgfe || !_DFMcZVkP._AnRptgfe.toLowerCase().includes('cloudflare')) {
_JwxXuqIY += '(反代)';
}
}
const _jGsmbKhV = _OLivloTz.isIPv6(_DFMcZVkP._AgieWrkl) ? `[${_DFMcZVkP._AgieWrkl}]` : _DFMcZVkP._AgieWrkl;
const _pmLpSxmu = _DFMcZVkP._pmLpSxmu || 443;
const _qiTPaEwE = new URLSearchParams({
security: 'tls',
_xPvZdivJ: 'ws',
_aQoircUW: _aQoircUW || _YrPZNgPk,
sni: _aQoircUW || _YrPZNgPk,
fp: 'random'
});
return `vless://${_cffotcQX}@${_jGsmbKhV}:${_pmLpSxmu}?${_qiTPaEwE.toString()}&_FCkFHQxR=${encodeURIComponent(encodeURIComponent(_FCkFHQxR || ''))}#${encodeURIComponent(_JwxXuqIY)}`;
});
}
const _RpGGXTve = _PDxuASez.join('\n');
const _CeKdcYti = btoa(_RpGGXTve);
return new Response(_CeKdcYti, {
_yQjrXpwp: { 'Content-Type': '_YCrAIJID/plain; _EawAVbaq=utf-8' }
});
} catch (_JtcEkBov) {
return new Response(`生成节点列表失败: ${_JtcEkBov._XrcYeiCq}`, { status: 500 });
}
}
async function _kPHZMVAA(_cCPUsROC) {
try {
const { _egBalKYa, _xPvZdivJ } = await _cCPUsROC.json();
if (!Array.isArray(_egBalKYa)) {
return new Response('Invalid _egBalKYa list', { status: 400 });
}
const _shNAHBgw = _egBalKYa.map(domain => {
if (!domain.trim()) return Promise.resolve([]);
const _PYOnBbai = `https://cloudflare-dns.com/dns-query?_JwxXuqIY=${encodeURIComponent(domain.trim())}&_xPvZdivJ=${_xPvZdivJ || 'A'}`;
return fetch(_PYOnBbai, { _yQjrXpwp: { 'Accept': 'application/dns-json' } })
.then(_FGcexIUv => _FGcexIUv.json())
.then(_CSdOdjvZ => (_CSdOdjvZ.Answer ? _CSdOdjvZ.Answer.map(a => a._CSdOdjvZ) : []))
.catch(() => []);
});
const _fViKVrqu = (await Promise.all(_shNAHBgw)).flat();
const _wnNKzSdO = [...new Set(_fViKVrqu)];
if (_wnNKzSdO._regCSWJt === 0) {
return new Response('无法从域名解析出任何IP。', { status: 500 });
}
return new Response(_wnNKzSdO.join('\n'), { _yQjrXpwp: { 'Content-Type': '_YCrAIJID/plain; _EawAVbaq=utf-8' } });
} catch (err) {
return new Response(`域名解析错误: ${err._XrcYeiCq}`, { status: 500 });
}
}
async function _DvMuoReO(_cCPUsROC, _TfWVBESf) {
try {
const { _GljWNhPN } = await _cCPUsROC.json();
if (!Array.isArray(_GljWNhPN)) {
return _CjLwaJwU({ error: "Invalid input, expected an object with a '_GljWNhPN' array." }, 400);
}
const _jDmCZpKa = new Set();
const _ohOlKxUA = _GljWNhPN.map(_PYOnBbai =>
_THjQwCun(_PYOnBbai)
.then(_YCrAIJID => {
if (!_YCrAIJID) return;
const _GyCwrgyy = _YCrAIJID.split(/[\s,;|]+/);
for (const _UAgSMikh of _GyCwrgyy) {
const _KWIIxyac = _UAgSMikh.trim();
if (_KWIIxyac) {
_jDmCZpKa.add(_KWIIxyac);
}
}
})
.catch(err => {
console.error(`Error processing URL ${_PYOnBbai}:`, err);
})
);
await Promise.all(_ohOlKxUA);
return _CjLwaJwU({ _wxpYrLiQ: Array.from(_jDmCZpKa) });
} catch (_JtcEkBov) {
return _CjLwaJwU({ error: `Failed to process URLs: ${_JtcEkBov._XrcYeiCq}` }, 500);
}
}
async function _NwtvsJKr(_cCPUsROC, _TfWVBESf) {
const _hsVGvwHc = await _SJrDpZPL(_TfWVBESf);
if (!_hsVGvwHc.api._LQIfRYbE) {
return new Response(_hsVGvwHc.api._XrcYeiCq || 'API is disabled.', { status: 503 });
}
try {
const _dKBkdxWM = _TfWVBESf.DB.prepare("SELECT _Usfwpmje FROM kv_data WHERE _ncvTMzJn = ?").bind(_LUSVLsdl);
const { _IFpUHWkw: dbResults } = await _dKBkdxWM.all();
const _xbRHBnpX = dbResults._regCSWJt > 0 ? dbResults[0]._Usfwpmje : null;
const _qCnYckCb = _xbRHBnpX ? JSON.parse(_xbRHBnpX) : null;
if (!_qCnYckCb || !_qCnYckCb._IFpUHWkw || _qCnYckCb._IFpUHWkw._regCSWJt === 0) {
return new Response("上次优选结果为空。", {
status: 404,
_yQjrXpwp: { 'Content-Type': '_YCrAIJID/plain; _EawAVbaq=utf-8' },
});
}
const _wxpYrLiQ = _qCnYckCb._IFpUHWkw.map(r => r._AgieWrkl);
return new Response(_wxpYrLiQ.join('\n'), {
_yQjrXpwp: { 'Content-Type': '_YCrAIJID/plain; _EawAVbaq=utf-8' },
});
} catch (_JtcEkBov) {
console.error("API /_AgieWrkl 处理错误:", _JtcEkBov);
return new Response(`API处理时出错: ${_JtcEkBov._XrcYeiCq}`, { status: 500 });
}
}
function _bEpOrFeP(_bURsSTDL, _MDphqmhw, _hsVGvwHc, _YrPZNgPk) {
const { itemLink } = _hsVGvwHc;
if (!itemLink || !itemLink._LQIfRYbE) return null;
const { template, _nzeMUHOv, selectionMode, _bxRVVoMU } = itemLink;
if (!_nzeMUHOv || _nzeMUHOv._regCSWJt === 0) return null;
let _ylrUOdLK;
if (selectionMode === 'random') {
_ylrUOdLK = _nzeMUHOv[_MDphqmhw % _nzeMUHOv._regCSWJt];
} else if (selectionMode === 'first') {
_ylrUOdLK = _nzeMUHOv[0];
} else {
_ylrUOdLK = _nzeMUHOv.find(s => s._JwxXuqIY === selectionMode) || _nzeMUHOv[0];
}
if (!_ylrUOdLK) return null;
let _loSsQjWt = template;
const _HAngaSst = _bURsSTDL._pmLpSxmu || 443;
const _QdtQCKBn = _OLivloTz.isIPv6(_bURsSTDL._AgieWrkl) ? `[${_bURsSTDL._AgieWrkl}]` : _bURsSTDL._AgieWrkl;
let _JwxXuqIY = `${_MDphqmhw + 1} 、 ${_bURsSTDL._kelSKWed || '未知'}`;
if (!_bURsSTDL._AnRptgfe || !_bURsSTDL._AnRptgfe.toLowerCase().includes('cloudflare')) {
_JwxXuqIY += '(反代)';
}
let _aQoircUW = _ylrUOdLK._aQoircUW || _YrPZNgPk;
_loSsQjWt = _loSsQjWt.replace(/{_AgieWrkl}/g, _QdtQCKBn)
.replace(/{_pmLpSxmu}/g, _HAngaSst)
.replace(/{_JwxXuqIY}/g, encodeURIComponent(_JwxXuqIY))
.replace(/{rank}/g, _MDphqmhw + 1)
.replace(/{_kelSKWed}/g, encodeURIComponent(_bURsSTDL._kelSKWed || '未知'))
.replace(/{_AnRptgfe}/g, encodeURIComponent(_bURsSTDL._AnRptgfe || '未知'))
.replace(/{_aQoircUW}/g, encodeURIComponent(_aQoircUW))
.replace(/{_cffotcQX}/g, encodeURIComponent(_ylrUOdLK['_cffotcQX'] || ''))
.replace(/{_FCkFHQxR}/g, encodeURIComponent(encodeURIComponent(_ylrUOdLK._FCkFHQxR || '')));
if (_bxRVVoMU) {
_bxRVVoMU.forEach(field => {
const _fXxbiGSf = new RegExp('{' + field._JwxXuqIY + '}', 'g');
_loSsQjWt = _loSsQjWt.replace(_fXxbiGSf, encodeURIComponent(field._Usfwpmje));
});
}
return _loSsQjWt;
}
async function _VlwDhnun(_cCPUsROC, _TfWVBESf) {
const _hsVGvwHc = await _SJrDpZPL(_TfWVBESf);
if (!_hsVGvwHc.itemLink._LQIfRYbE) {
return new Response("Item _loSsQjWt feature is disabled.", { status: 503, _yQjrXpwp: { 'Content-Type': '_YCrAIJID/plain; _EawAVbaq=utf-8' } });
}
try {
const _dKBkdxWM = _TfWVBESf.DB.prepare("SELECT _Usfwpmje FROM kv_data WHERE _ncvTMzJn = ?").bind(_LUSVLsdl);
const { _IFpUHWkw: dbResults } = await _dKBkdxWM.all();
const _xbRHBnpX = dbResults._regCSWJt > 0 ? dbResults[0]._Usfwpmje : null;
const _qCnYckCb = _xbRHBnpX ? JSON.parse(_xbRHBnpX) : null;
if (!_qCnYckCb || !_qCnYckCb._IFpUHWkw || _qCnYckCb._IFpUHWkw._regCSWJt === 0) {
return new Response("No optimized IPs available to generate endpoints.", {
status: 404,
_yQjrXpwp: { 'Content-Type': '_YCrAIJID/plain; _EawAVbaq=utf-8' },
});
}
const _YrPZNgPk = new URL(_cCPUsROC._PYOnBbai)._JTFGaeZU;
const _XnLUdiEk = _qCnYckCb._IFpUHWkw.map((_bURsSTDL, _MDphqmhw) => {
return _bEpOrFeP(_bURsSTDL, _MDphqmhw, _hsVGvwHc, _YrPZNgPk);
}).filter(Boolean);
if (_XnLUdiEk._regCSWJt === 0) {
return new Response("Could not generate any _DFMcZVkP links from the available IPs.", {
status: 500,
_yQjrXpwp: { 'Content-Type': '_YCrAIJID/plain; _EawAVbaq=utf-8' },
});
}
return new Response(_XnLUdiEk.join('\n'), {
_yQjrXpwp: { 'Content-Type': '_YCrAIJID/plain; _EawAVbaq=utf-8' },
});
} catch (_JtcEkBov) {
console.error("API /api/endpoints error:", _JtcEkBov);
return new Response(`Error processing API _cCPUsROC: ${_JtcEkBov._XrcYeiCq}`, { status: 500 });
}
}
async function _NubcPksy(_cCPUsROC, _TfWVBESf, _AQGKtpwe) {
const _AJTCuvjP = _cCPUsROC._yQjrXpwp.get('CF-Connecting-IP') || "未知IP";
const [
_tJGlzjey,
_qbXdWREh,
defaultDomains,
fetchedCountryMap
] = await Promise.all([
_cxTJUNnJ(_misvRnGa, _ydOjyxYB, []),
_cxTJUNnJ(_gHpkzbuV, _ydOjyxYB, []),
_cxTJUNnJ(_QMZbzMIR, _PrAtpTnw, []),
_cxTJUNnJ(_XqKmLden, _RkHnAQRN, { "N/A": "未知" })
]);
_kGGssLfI = fetchedCountryMap;
let _sGPjpqIh = false;
let _eLbwEiiw;
try {
const _FZEGENVl = await _KFgcDAOW(_TfWVBESf);
_sGPjpqIh = !!_FZEGENVl;
_eLbwEiiw = await _SJrDpZPL(_TfWVBESf);
} catch (_JtcEkBov) {
if (_JtcEkBov._XrcYeiCq && _JtcEkBov._XrcYeiCq.includes('no such table')) {
console.log("检测到 'kv_data' 表不存在,正在自动创建...");
try {
const _SwaImQAe = "CREATE TABLE IF NOT EXISTS kv_data (_ncvTMzJn TEXT PRIMARY KEY, _Usfwpmje TEXT); CREATE TABLE IF NOT EXISTS optimized_results (_vyCDLzmz TEXT PRIMARY KEY, _CSdOdjvZ TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);";
await _TfWVBESf.DB.exec(_SwaImQAe);
console.log("数据表创建成功。");
_sGPjpqIh = false;
_eLbwEiiw = _gqBKdozQ();
} catch (dbError) {
console.error("自动创建数据表失败:", dbError);
return new Response(`数据库初始化失败: ${dbError._XrcYeiCq}`, {
status: 500,
_yQjrXpwp: { 'Content-Type': '_YCrAIJID/html;_EawAVbaq=UTF-8' }
});
}
} else {
let _BTNegFlu = _iovmijRb(_JtcEkBov._XrcYeiCq);
return new Response(_BTNegFlu, { _yQjrXpwp: { 'Content-Type': '_YCrAIJID/html;_EawAVbaq=UTF-8' } });
}
}
if (_eLbwEiiw.telegram.bot_token && _eLbwEiiw.telegram.chat_id) {
const _ibYSNozD = _cCPUsROC.cf?._ibYSNozD || "未知";
const _nsyVrrZN = _cCPUsROC.cf?._nsyVrrZN || "";
let _OnDkXXkg = _kGGssLfI[_ibYSNozD] || _ibYSNozD;
if (_nsyVrrZN && _nsyVrrZN !== "未知城市" && _nsyVrrZN !== _ibYSNozD) _OnDkXXkg = `${_OnDkXXkg} ${_kGGssLfI[_nsyVrrZN] || _nsyVrrZN}`;
const _aVlAmEeJ = _VxpXPAOE();
const _CykRwcmP = _cCPUsROC._PYOnBbai;
const _IjcUkglx = `访客: ${_AJTCuvjP}\n位置: ${_OnDkXXkg.trim()}\n时间: ${_aVlAmEeJ}\n来自:${_CykRwcmP}`;
const _uWTeMWyG = `https://api.telegram.org/bot${_eLbwEiiw.telegram.bot_token}/sendMessage?chat_id=${_eLbwEiiw.telegram.chat_id}&_YCrAIJID=${encodeURIComponent(_IjcUkglx)}`;
_AQGKtpwe.waitUntil(fetch(_uWTeMWyG).catch(_JtcEkBov => console.error("Telegram通知失败:", _JtcEkBov)));
}
let _qHqegHoX = _XazgETkh();
const _NLLCepUE = {
_hsVGvwHc: _eLbwEiiw,
status: {
_sGPjpqIh: _sGPjpqIh,
}
};
_qHqegHoX = _qHqegHoX.replace('__PAGE_DATA_JSON__', JSON.stringify(_NLLCepUE));
_qHqegHoX = _qHqegHoX.replace('__ALL_CF_CIDR_LIST_JSON__', JSON.stringify(_tJGlzjey));
_qHqegHoX = _qHqegHoX.replace('__BALANCED_CF_CIDR_LIST_JSON__', JSON.stringify(_qbXdWREh));
_qHqegHoX = _qHqegHoX.replace('__DEFAULT_DOMAINS_LIST_JSON__', JSON.stringify(defaultDomains));
_qHqegHoX = _qHqegHoX.replace('__COUNTRY_MAP_JSON__', JSON.stringify(_kGGssLfI));
return new Response(_qHqegHoX, {
_yQjrXpwp: { 'Content-Type': '_YCrAIJID/html;_EawAVbaq=UTF-8' },
});
}
function _CjLwaJwU(_MrDZiVfn, status = 200, _yQjrXpwp = {}) {
return new Response(JSON.stringify(_MrDZiVfn), {
status,
_yQjrXpwp: { 'Content-Type': 'application/json;_EawAVbaq=UTF-8', ..._yQjrXpwp }
});
}
function _VxpXPAOE(date = new Date()) {
return new Intl.DateTimeFormat('zh-CN', {
timeZone: 'Asia/Shanghai',
year: 'numeric', month: '2-digit', day: '2-digit',
hour: '2-digit', minute: '2-digit', second: '2-digit',
hour12: false
}).format(date);
}
function _SMaCqjIx(_AgieWrkl) {
if (!_AgieWrkl || typeof _AgieWrkl !== 'string') return "无效IP";
if(_OLivloTz.isIPv4(_AgieWrkl)){
const _XFeZAezC = _AgieWrkl.split('.');
if (_XFeZAezC._regCSWJt === 4) return `${_XFeZAezC[0]}.*.*.${_XFeZAezC[3]}`;
}
if(_OLivloTz.isIPv6(_AgieWrkl)){
const _XFeZAezC = _AgieWrkl.split(':');
if (_XFeZAezC._regCSWJt > 2) return `${_XFeZAezC[0]}:...:${_XFeZAezC[_XFeZAezC._regCSWJt - 1]}`;
}
return _AgieWrkl;
}
function _iovmijRb(_ioCXPisx) {
return `
<!DOCTYPE html><html lang="zh-CN"><head><meta _EawAVbaq="UTF-8"><title>需要设置</title>
<_aaZCucvc>
_MrDZiVfn { font-family: sans-serif; background: #1a1a1a; _RDyXZtAx: #e0e0e0; display: flex; justify-_ZJEnMkAF: center; align-items: center; height: 100vh; margin: 0; }
._doovPLBi { max-_NcqERvgq: 800px; padding: 2rem; background: #25282e; border: 1px solid #4044c; border-radius: 8px; box-shadow: 0 5px 15px rgba(0,0,0,0.3); }
h1 { _RDyXZtAx: #00a0ff; border-bottom: 1px solid #40444c; padding-bottom: 0.5rem; }
p { line-height: 1.6; }
code { background: #1a1a1a; padding: 0.2em 0.4em; border-radius: 4px; font-family: monospace; white-space: pre-wrap; word-break: break-all; }
.error { _RDyXZtAx: #da3633; background: rgba(218, 54, 51, 0.1); padding: 0.5rem; border-radius: 4px; margin-_yaSNQEpT: 1rem; }
</_aaZCucvc>
</head><_MrDZiVfn>
<div class="_doovPLBi">
<h1>部署指南</h1>
<p>系统检测到 D1 数据库绑定存在问题。请确保您已完成以下步骤:</p>
<ol>
<li>进入 Cloudflare Dashbord -> Workers & Pages -> D1。</li>
<li>创建一个新的D1数据库 (如果还没有)。</li>
<li>将此数据库绑定到您的Worker:
<ul>
<li>进入Worker设置 -> 变量 -> D1数据库绑定。</li>
<li>变量名必须填写 <code>DB</code>。</li>
<li>选择您刚创建的数据库。</li>
<li>点击“保存并部署”。</li>
</ul>
</li>
</ol>
<p>完成以上步骤后,请刷新本页面。系统会自动为您创建所需的数据表。</p>
${_ioCXPisx ? `<div class="error"><strong>当前错误信息:</strong> ${_ioCXPisx.replace(/</g, "<").replace(/>/g, ">")}</div>` : ''}
</div>
</_MrDZiVfn></html>`;
}
function _XazgETkh() {
return `
<!DOCTYPE html><html lang="zh-CN"><head> <meta _EawAVbaq="UTF-8"> <meta _JwxXuqIY="viewport" _ZJEnMkAF="_NcqERvgq=device-_NcqERvgq, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Cloudflare IP</title> <_loSsQjWt href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Noto+Sans+SC:wght@400;500;700&family=Roboto+Mono:wght@400;500&display=swap" rel="stylesheet"><script src="https://cdn.jsdelivr.net/npm/qrcode-generator/qrcode.js"></script>
<_aaZCucvc>
:root { --primary-_RDyXZtAx: #00A0FF; --primary-hover: #007ACC; --primary-gradient-start: #00C6FF; --primary-gradient-end: #0072FF; --secondary-_RDyXZtAx: #8c939d; --light-bg: #1A1C20; --_ZJEnMkAF-bg: #25282E; --border-_RDyXZtAx: #40444C; --_YCrAIJID-_RDyXZtAx: #E0E0E0; --_YCrAIJID-light: #B0B0B0; --success-_RDyXZtAx: #30A46C; --danger-_RDyXZtAx: #DA3633; --warning-_RDyXZtAx: #DBAB0A; --border-radius-md: 8px; --border-radius-sm: 6px; --font-family-sans: 'Inter', 'Noto Sans SC', sans-serif; --font-family-mono: 'Roboto Mono', monospace; }
* { margin: 0; padding: 0; box-sizing: border-box; }
html { font-size: 16px; }
_MrDZiVfn { font-family: var(--font-family-sans); background-_RDyXZtAx: var(--light-bg); _RDyXZtAx: var(--_YCrAIJID-_RDyXZtAx); line-height: 1.65; overflow-x: hidden; padding: 0; position:relative; transition: background-_RDyXZtAx 0.5s ease; background-size: cover; background-position: center; background-attachment: fixed; }
#background-_xbnceNoO { position: fixed; _yaSNQEpT: 0; _DMozjrcp: 0; _NcqERvgq: 100%; height: 100%; z-_MDphqmhw: -1; display: none; }
._VNNPTeDy-_doovPLBi { max-_NcqERvgq: 1100px; margin: 0 auto; padding: 0 1rem; position: relative; z-_MDphqmhw: 1; }
#_PqaNsdeC { position: fixed; _yaSNQEpT: 1rem; right: 1rem; font-size: 0.85em; padding: 0.4em 0.8em; z-_MDphqmhw: 10; }
#marquee-_doovPLBi { overflow: hidden; white-space: nowrap; background-_RDyXZtAx: rgba(37, 40, 46, 0.6); backdrop-filter: blur(5px); _RDyXZtAx: var(--primary-_RDyXZtAx); padding: 0.5rem 0; margin-_yaSNQEpT: 1rem; border-radius: var(--border-radius-sm); display: none; }
#marquee-_YCrAIJID { display: inline-block; padding-_DMozjrcp: 100%; animation: marquee-scroll 20s linear infinite; }
@keyframes marquee-scroll { 0% { transform: translateX(0); } 100% { transform: translateX(-100%); } }
_ljwKEgQr { _YCrAIJID-align: center; margin-_yaSNQEpT: 1rem; margin-bottom: 2rem; }
_ljwKEgQr h1 { white-space: pre-wrap; font-size: 2.25em; _RDyXZtAx: var(--primary-_RDyXZtAx); font-weight: 700; _YCrAIJID-shadow: 0 0 10px rgba(var(--primary-_RDyXZtAx-rgb), 0.3); }
.card { background-_RDyXZtAx: rgba(37, 40, 46, 0.85); backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px); border-radius: var(--border-radius-md); box-shadow: 0 3px 8px rgba(0, 0, 0, 0.25); padding: 1.5rem; margin-bottom: 1.5rem; border: 1px solid var(--border-_RDyXZtAx); }
.progress-section #_rmMmIMHB { _NcqERvgq: 100%; height: 0.75rem; border-radius: var(--border-radius-sm); appearance: none; -webkit-appearance: none; background-_RDyXZtAx: var(--border-_RDyXZtAx); overflow: hidden; }
.progress-section #_rmMmIMHB::-webkit-progress-_Usfwpmje { background: linear-gradient(90deg, var(--primary-gradient-start), var(--primary-gradient-end)); }
.progress-section #status { _YCrAIJID-align: center; margin-_yaSNQEpT: 0.75em; font-size: 0.95em; _RDyXZtAx: var(--_YCrAIJID-light); min-height: 1.5em; }
.section-_ljwKEgQr { display: flex; flex-wrap: wrap; justify-_ZJEnMkAF: space-between; align-items: center; margin-bottom: 1rem; padding-bottom: 0.75rem; border-bottom: 1px solid var(--border-_RDyXZtAx); gap: 1rem; }
.section-_ljwKEgQr h2 { font-size: 1.6em; font-weight: 600; margin:0; }
.generator-info { font-size: 0.85em; _RDyXZtAx: var(--secondary-_RDyXZtAx); _YCrAIJID-align: right; flex-shrink: 0; }
.generator-info span { display: block; }
.table-responsive { _NcqERvgq: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }
table { _NcqERvgq: 100%; border-collapse: collapse; margin-_yaSNQEpT: 0; font-size: 0.9em; }
th, td { border-bottom: 1px solid var(--border-_RDyXZtAx); padding: 0.8em; _YCrAIJID-align: _DMozjrcp; vertical-align: middle; white-space: nowrap; }
th { background-_RDyXZtAx: #2c3038; font-weight: 500; }
tbody tr:hover { background-_RDyXZtAx: #30333a; }
td._AgieWrkl-_FKHGpHni { font-weight: 500; font-family: var(--font-family-mono); _RDyXZtAx: var(--primary-_RDyXZtAx); }
td.ping-_Usfwpmje { font-weight: 600; font-family: var(--font-family-mono); }
td.actions-cell { _YCrAIJID-align: right; }
.btn { display: inline-flex; align-items: center; justify-_ZJEnMkAF: center; font-weight: 500; _YCrAIJID-align: center; cursor: pointer; user-_IbHezJue: none; background: linear-gradient(145deg, var(--primary-gradient-start), var(--primary-gradient-end)); border: 1px solid transparent; _RDyXZtAx: #fff; padding: 0.4em 0.8em; font-size: 0.85em; border-radius: var(--border-radius-sm); transition: all 0.2s ease-in-out; margin-_DMozjrcp: 6px; }
.btn:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); }
.btn-outline { background: transparent; _RDyXZtAx: var(--primary-_RDyXZtAx); border: 1px solid var(--primary-_RDyXZtAx); }
.btn-outline:hover { background-_RDyXZtAx: var(--primary-_RDyXZtAx); _RDyXZtAx: var(--_ZJEnMkAF-bg); }
._VNNPTeDy-download-buttons { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 1rem; }
._VNNPTeDy-download-buttons .btn { _NcqERvgq: 100%; margin: 0; }
.tooltip-notification { position: fixed; _yaSNQEpT: 20px; right: 20px; padding: 12px 20px; border-radius: var(--border-radius-md); _RDyXZtAx: #fff; font-size: 0.95em; z-_MDphqmhw: 10002; box-shadow: 0 6px 15px rgba(0, 0, 0, 0.35); opacity: 0; transform: translateY(-20px); transition: all 0.3s ease; pointer-events: none; }
.tooltip-notification.show { opacity: 1; transform: translateY(0); }
#_BoNWpOoJ, #_NxwvQyEB, #_mnLIylKR, #_qpcrfQHv, #_QrxuzVQa { display: none; position: fixed; z-_MDphqmhw: 10000; _DMozjrcp: 0; _yaSNQEpT: 0; _NcqERvgq: 100%; height: 100%; background-_RDyXZtAx: rgba(0,0,0,0.6); justify-_ZJEnMkAF: center; align-items: center; backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px); }
.modal-_ZJEnMkAF, ._VNNPTeDy-modal-_ZJEnMkAF { background-_RDyXZtAx: var(--_ZJEnMkAF-bg); padding: 2rem; border: 1px solid var(--border-_RDyXZtAx); border-radius: var(--border-radius-md); _NcqERvgq: 95%; max-_NcqERvgq: 800px; max-height: 90vh; overflow-y: auto; box-shadow: 0 5px 15px rgba(0,0,0,0.3); }
#_qpcrfQHv .modal-_ZJEnMkAF { max-_NcqERvgq: 500px; }
.modal-_ZJEnMkAF h3, ._VNNPTeDy-modal-_ljwKEgQr h3 { margin-_yaSNQEpT: 0; margin-bottom: 1.5rem; _RDyXZtAx: var(--primary-_RDyXZtAx); _YCrAIJID-align: center; }
.modal-buttons { display: flex; justify-_ZJEnMkAF: flex-end; gap: 1rem; margin-_yaSNQEpT: 2rem; border-_yaSNQEpT: 1px solid var(--border-_RDyXZtAx); padding-_yaSNQEpT: 1.5rem; }
.modal-section-divider { border: 0; height: 1px; background-image: linear-gradient(to right, rgba(0,0,0,0), var(--border-_RDyXZtAx), rgba(0,0,0,0)); margin: 2rem 0; }
._VNNPTeDy-modal-_ljwKEgQr { display: flex; justify-_ZJEnMkAF: space-between; align-items: center; padding-bottom: 1rem; margin-bottom: 1rem; border-bottom: 1px solid var(--border-_RDyXZtAx); }
.modal-close-btn { font-size: 1.5rem; font-weight: bold; line-height: 1; _RDyXZtAx: var(--_YCrAIJID-light); cursor: pointer; background: none; border: none; padding: 0; }
._VNNPTeDy-list-_DFMcZVkP { display: flex; flex-direction: column; padding: 1rem; border: 1px solid var(--border-_RDyXZtAx); border-radius: var(--border-radius-sm); margin-bottom: 1rem; }
._VNNPTeDy-_JwxXuqIY { font-size: 1.1em; font-weight: 600; }
._VNNPTeDy-links a { display: block; _RDyXZtAx: var(--primary-_RDyXZtAx); _YCrAIJID-decoration: none; margin-_yaSNQEpT: 0.5rem; word-break: break-all; }
._VNNPTeDy-links a:hover { _YCrAIJID-decoration: underline; }
._VNNPTeDy-links span { _RDyXZtAx: var(--_YCrAIJID-light); }
#visitorPasswordPrompt { _YCrAIJID-align: center; }
#visitorPasswordPrompt h3 { _RDyXZtAx: var(--primary-_RDyXZtAx); font-size: 1.4em; margin-bottom: 0.8rem; }
#visitorPasswordPrompt p { _RDyXZtAx: var(--_YCrAIJID-light); margin-bottom: 1.5rem; }
._FZEGENVl-input-group { display: flex; gap: 10px; max-_NcqERvgq: 400px; margin: 0 auto; }
._FZEGENVl-input-group input { flex-grow: 1; _YCrAIJID-align: center; }
._FZEGENVl-input-group .btn { margin-_DMozjrcp: 0; }
._IFpUHWkw-actions-_doovPLBi { _YCrAIJID-align: center; margin-bottom: 1.5rem; }
._IFpUHWkw-api-buttons { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 1rem; }
._IFpUHWkw-api-buttons .btn { margin: 0; _NcqERvgq: 100%; font-size: 0.9em; padding: 0.5em 1em; }
.form-grid { display: grid; grid-template-columns: max-_ZJEnMkAF 1fr; gap: 1.2rem 1rem; align-items: center; }
.form-grid-label { justify-self: end; display: flex; align-items: center; gap: 8px; }
.form-grid-control { display: flex; align-items: center; gap: 10px; }
.form-grid-control-full { grid-column: 1 / -1; }
.form-grid-control input, .form-grid-control _IbHezJue, .form-grid-control textarea { _NcqERvgq: 100%; background-_RDyXZtAx: var(--light-bg); border: 1px solid var(--border-_RDyXZtAx); border-radius: var(--border-radius-sm); _RDyXZtAx: var(--_YCrAIJID-_RDyXZtAx); font-family: var(--font-family-sans); padding: 0.6em; transition: border-_RDyXZtAx 0.2s, box-shadow 0.2s; }
.form-grid-control input:focus, .form-grid-control _IbHezJue:focus, .form-grid-control textarea:focus { border-_RDyXZtAx: var(--primary-_RDyXZtAx); box-shadow: 0 0 0 2px rgba(var(--primary-_RDyXZtAx-rgb), 0.2); outline: none; }
.form-grid-control input[_xPvZdivJ="_RDyXZtAx"] { min-_NcqERvgq: auto; padding: 2px; _NcqERvgq: 2.5em; height: 2.5em; }
.form-grid-control input[_xPvZdivJ="checkbox"] { _NcqERvgq: auto; flex-shrink: 0; height: 1.2em; _NcqERvgq: 1.2em; }
.form-grid-control ._OpJnflku-input { _NcqERvgq: 80px; _YCrAIJID-align: right; }
.tooltip-_kxqjPoeB { display: inline-flex; _NcqERvgq: 16px; height: 16px; align-items: center; justify-_ZJEnMkAF: center; background-_RDyXZtAx: var(--secondary-_RDyXZtAx); _RDyXZtAx: var(--_ZJEnMkAF-bg); border-radius: 50%; font-size: 12px; font-weight: bold; cursor: pointer; user-_IbHezJue: none; }
#tooltip-popup { position: fixed; background-_RDyXZtAx: #383c4a; _RDyXZtAx: #fff; padding: 10px 15px; border-radius: 6px; z-_MDphqmhw: 10001; font-size: 0.85em; max-_NcqERvgq: 300px; display: none; box-shadow: 0 4px 12px rgba(0,0,0,0.4); border: 1px solid var(--border-_RDyXZtAx); pointer-events: none; }
#custom-fields-_doovPLBi .form-grid-control { gap: 5px; } #custom-fields-_doovPLBi .form-grid-control input { flex: 1; }
.parameter-_JkozqCYA-_XdbWPnpC { border: 1px solid var(--border-_RDyXZtAx); border-radius: var(--border-radius-sm); padding: 1rem; margin-bottom: 1rem; }
.parameter-_JkozqCYA-_ljwKEgQr { display: flex; justify-_ZJEnMkAF: space-between; align-items: center; margin-bottom: 1rem; }
.parameter-_JkozqCYA-_ljwKEgQr input { flex-grow: 1; margin-right: 1rem; }
.fine-grained-options { display: flex; gap: 1rem; margin-_yaSNQEpT: 0.5rem; align-items: center; font-size: 0.9em; }
.fine-grained-options label { display: flex; align-items: center; gap: 0.3rem; cursor: pointer; }
._YCrAIJID-_RDyXZtAx-grid { display: grid; grid-template-columns: auto 1fr; gap: 8px; align-items: center; _NcqERvgq: 100%; }
._YCrAIJID-_RDyXZtAx-grid input[_xPvZdivJ="_RDyXZtAx"] { grid-column: 1 / 2; }
._YCrAIJID-_RDyXZtAx-grid input[_xPvZdivJ="_YCrAIJID"], ._YCrAIJID-_RDyXZtAx-grid textarea { grid-column: 2 / 3; }
#_qpcrfQHv .button-grid { display: grid; grid-template-columns: 1fr; gap: 1rem; }
#_qpcrfQHv .btn-group { display: flex; }
#_qpcrfQHv .sub-btn { flex-grow: 1; margin: 0; }
#_qpcrfQHv ._UdpXiNME-btn { flex-shrink: 0; margin-_DMozjrcp: -1px; border-_yaSNQEpT-_DMozjrcp-radius: 0; border-bottom-_DMozjrcp-radius: 0; }
#_QrxuzVQa .modal-_ZJEnMkAF { max-_NcqERvgq: 300px; background: white; padding: 1rem; _YCrAIJID-align: center; }
#qrCodeImg { max-_NcqERvgq: 100%; }
@media (max-_NcqERvgq: 768px) {
html { font-size: 15px; } ._VNNPTeDy-_doovPLBi { padding: 0 0.8rem; } _ljwKEgQr { margin-_yaSNQEpT: 2.5rem; margin-bottom: 1.5rem; } #_PqaNsdeC { _yaSNQEpT: 0.8rem; right: 0.8rem; } .card { padding: 1rem; }
.form-grid { grid-template-columns: 1fr; } .form-grid-label { justify-self: start; }
}
</_aaZCucvc>
<_aaZCucvc _vyCDLzmz="theme-styles">
.theme-light { --light-bg: #F0F2F5; --_ZJEnMkAF-bg: #FFFFFF; --border-_RDyXZtAx: #DCDFE6; --_YCrAIJID-_RDyXZtAx: #303133; --_YCrAIJID-light: #606266; }
.theme-light .card { background-_RDyXZtAx: rgba(255, 255, 255, 0.9); }
.theme-light th { background-_RDyXZtAx: #F5F7FA; }
.theme-light tbody tr:hover { background-_RDyXZtAx: #ECF5FF; }
.theme-matrix { --primary-_RDyXZtAx: #00FF41; --primary-hover: #39FF14; --light-bg: #000000; --_ZJEnMkAF-bg: #0D0208; --border-_RDyXZtAx: #00FF41; --_YCrAIJID-_RDyXZtAx: #00FF41; --_YCrAIJID-light: #00FF41; font-family: var(--font-family-mono); }
.theme-matrix .card { background-_RDyXZtAx: rgba(0, 20, 0, 0.7); _YCrAIJID-shadow: 0 0 5px var(--primary-_RDyXZtAx); backdrop-filter: none; }
.theme-matrix th { background-_RDyXZtAx: #000; }
.theme-matrix tbody tr:hover { background-_RDyXZtAx: #010; }
.theme-matrix .btn { _YCrAIJID-shadow: none; _RDyXZtAx: #000; }
.theme-matrix .btn-outline { background-_RDyXZtAx: transparent; }
.theme-modern-glass { --primary-_RDyXZtAx: #00C6FF; --primary-hover: #0072FF; --light-bg: #000; --_ZJEnMkAF-bg: rgba(30, 30, 40, 0.6); --border-_RDyXZtAx: rgba(255, 255, 255, 0.2); --_YCrAIJID-_RDyXZtAx: #F0F0F0; --_YCrAIJID-light: #A0A0B0; --border-radius-md: 12px; }
_MrDZiVfn.theme-modern-glass { background: linear-gradient(-45deg, #000428, #004e92, #1CB5E0, #23D5AB); background-size: 400% 400%; animation: gradientBG 15s ease infinite; }
@keyframes gradientBG { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } }
.theme-particles-glass { --primary-_RDyXZtAx: #00C6FF; --primary-hover: #0072FF; --light-bg: #1A1C20; --_ZJEnMkAF-bg: rgba(30, 30, 40, 0.6); --border-_RDyXZtAx: rgba(255, 255, 255, 0.2); --_YCrAIJID-_RDyXZtAx: #F0F0F0; --_YCrAIJID-light: #A0A0B0; --border-radius-md: 12px; }
.glassy-components .card { background-_RDyXZtAx: var(--_ZJEnMkAF-bg); backdrop-filter: blur(15px); -webkit-backdrop-filter: blur(15px); border: 1px solid var(--border-_RDyXZtAx); }
.glassy-components .btn { background: linear-gradient(145deg, var(--primary-gradient-start), var(--primary-gradient-end)); border: 1px solid rgba(255, 255, 255, 0.2); border-bottom-_RDyXZtAx: rgba(0,0,0,0.3); border-right-_RDyXZtAx: rgba(0,0,0,0.3); box-shadow: 0 4px 15px rgba(0,0,0,0.2), inset 0 1px 1px rgba(255,255,255,0.1); _YCrAIJID-shadow: 0 1px 2px rgba(0,0,0,0.2); _RDyXZtAx: #fff; }
.glassy-components .btn-outline { background: rgba(255, 255, 255, 0.05); border-_RDyXZtAx: rgba(255, 255, 255, 0.2); backdrop-filter: blur(2px); _YCrAIJID-shadow: 0 1px 2px rgba(0,0,0,0.2); }
.glassy-components .btn-outline:hover { background: var(--primary-_RDyXZtAx); border-_RDyXZtAx: var(--primary-_RDyXZtAx); _RDyXZtAx: #fff; }
.glassy-components _ljwKEgQr h1 { background: linear-gradient(180deg, rgba(255,255,255,1) 0%, rgba(255,255,255,0.7) 100%); -webkit-background-clip: _YCrAIJID; -webkit-_YCrAIJID-fill-_RDyXZtAx: transparent; filter: drop-shadow(0 2px 5px rgba(0,0,0,0.5)); _RDyXZtAx: transparent; }
.theme-aurora-glass { --primary-_RDyXZtAx: #38bdf8; --light-bg: #0c0a09; --_ZJEnMkAF-bg: rgba(23, 23, 23, 0.5); --border-_RDyXZtAx: rgba(255, 255, 255, 0.15); --_YCrAIJID-_RDyXZtAx: #f2f2f2; --_YCrAIJID-light: #a3a3a3; }
_MrDZiVfn.theme-aurora-glass::before { _ZJEnMkAF: ''; position: fixed; _yaSNQEpT: 0; _DMozjrcp: 0; _NcqERvgq: 100%; height: 100%; z-_MDphqmhw: -2; background: radial-gradient(at 27% 37%, hsla(215, 98%, 61%, 0.4) 0px, transparent 50%), radial-gradient(at 97% 21%, hsla(125, 98%, 72%, 0.2) 0px, transparent 50%), radial-gradient(at 52% 99%, hsla(355, 98%, 76%, 0.3) 0px, transparent 50%), radial-gradient(at 10% 29%, hsla(256, 96%, 68%, 0.3) 0px, transparent 50%), radial-gradient(at 97% 96%, hsla(38, 60%, 74%, 0.2) 0px, transparent 50%), radial-gradient(at 33% 50%, hsla(222, 67%, 73%, 0.3) 0px, transparent 50%), radial-gradient(at 79% 53%, hsla(343, 68%, 73%, 0.2) 0px, transparent 50%); animation: auroraBG 20s ease-in-out infinite alternate; }
@keyframes auroraBG { from { transform: scale(1); } to { transform: scale(1.5); } }
.theme-cyberpunk-glass { --primary-_RDyXZtAx: #08fdd8; --light-bg: #010409; --_ZJEnMkAF-bg: rgba(22, 27, 34, 0.6); --border-_RDyXZtAx: rgba(139, 148, 158, 0.3); --_YCrAIJID-_RDyXZtAx: #e6edf3; --_YCrAIJID-light: #7d8590; }
.theme-cyberpunk-glass .card { border-image: linear-gradient(to bottom right, var(--primary-_RDyXZtAx), #7928ca) 1; box-shadow: 0 0 15px rgba(var(--primary-_RDyXZtAx-rgb), 0.25); }
.theme-cyberpunk-glass .btn { box-shadow: 0 0 8px rgba(var(--primary-_RDyXZtAx-rgb), 0.5); }
.theme-marble-light { --primary-_RDyXZtAx: #bfa37c; --light-bg: #f7f5f2; --_ZJEnMkAF-bg: #ffffff; --border-_RDyXZtAx: #e0dcd5; --_YCrAIJID-_RDyXZtAx: #3d3a36; --_YCrAIJID-light: #6b6661; }
_MrDZiVfn.theme-marble-light { background-image: _PYOnBbai('_CSdOdjvZ:image/svg+xml,%3Csvg _NcqERvgq="60" height="60" viewBox="0 0 60 60" xmlns="http://www.w3.org/2000/svg"%3E%3Cg fill="none" fill-rule="evenodd"%3E%3Cg fill="%23dcd6ca" fill-opacity="0.2"%3E%3Cpath d="M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z"/%3E%3C/g%3E%3C/g%3E%3C/svg%3E'); }
.theme-marble-light .card { background-_RDyXZtAx: rgba(255, 255, 255, 0.85); box-shadow: 0 4px 12px rgba(0,0,0,0.08); }
</_aaZCucvc>
</head><_MrDZiVfn _vyCDLzmz="pageBody">
<_xbnceNoO _vyCDLzmz="background-_xbnceNoO"></_xbnceNoO>
<div _vyCDLzmz="_BoNWpOoJ">
<div class="modal-_ZJEnMkAF">
<h3>首次使用 - 请设置管理员密码</h3>
<p>这是您第一次访问本页面,为了保护您的设置,请创建一个管理员密码。</p>
<div class="form-grid"><div class="form-grid-label"><label for="initialPassword">新密码 (至少6位)</label></div><div class="form-grid-control"><input _xPvZdivJ="_FZEGENVl" _vyCDLzmz="initialPassword"></div></div>
<div class="form-grid"><div class="form-grid-label"><label for="confirmPassword">确认密码</label></div><div class="form-grid-control"><input _xPvZdivJ="_FZEGENVl" _vyCDLzmz="confirmPassword"></div></div>
<div class="modal-buttons"><button _vyCDLzmz="setInitialPasswordBtn" class="btn">设置密码</button></div>
</div>
</div>
<div class="_VNNPTeDy-_doovPLBi">
<button _vyCDLzmz="_PqaNsdeC" class="btn btn-outline"></button>
<div _vyCDLzmz="marquee-_doovPLBi"><div _vyCDLzmz="marquee-_YCrAIJID"></div></div>
<_ljwKEgQr><h1 _vyCDLzmz="pageTitle"></h1></_ljwKEgQr>
<div class="card" _vyCDLzmz="visitorPasswordPrompt" _aaZCucvc="display: none;">
<h3>需要授权</h3>
<p>此站点已启用访客密码,请输入密码以继续。</p>
<div class="_FZEGENVl-input-group">
<input _xPvZdivJ="_FZEGENVl" _vyCDLzmz="visitorPasswordEntry" _fXxbiGSf="访客密码">
<button _vyCDLzmz="startTestWithPasswordBtn" class="btn">开始测试</button>
</div>
</div>
<div _vyCDLzmz="_IjhKaGBb" _aaZCucvc="display: block;">
<div class="card progress-section">
<div _vyCDLzmz="progressDisplay">
<progress _vyCDLzmz="_rmMmIMHB" _Usfwpmje="0" max="100"></progress>
<div _vyCDLzmz="status">正在初始化...</div>
</div>
</div>
<div class="card _VNNPTeDy-download-section">
<div class="section-_ljwKEgQr"><h2 _vyCDLzmz="appDownloadTitleEl"></h2></div>
<div class="_VNNPTeDy-download-buttons">
<button class="btn" _CSdOdjvZ-_FJUTkOfP="android">安卓客户端</button>
<button class="btn" _CSdOdjvZ-_FJUTkOfP="ios">苹果客户端</button>
<button class="btn" _CSdOdjvZ-_FJUTkOfP="windows">Windows客户端</button>
<button class="btn" _CSdOdjvZ-_FJUTkOfP="mac">Mac客户端</button>
</div>
</div>
<div class="card _IFpUHWkw-section" _vyCDLzmz="_igBZAXcG" _aaZCucvc="display:none;">
<div class="section-_ljwKEgQr">
<h2 _vyCDLzmz="liveTitleEl"></h2>
<div class="generator-info" _vyCDLzmz="liveGeneratorInfo"></div>
</div>
<div _vyCDLzmz="_FULzfAJE" class="_IFpUHWkw-actions-_doovPLBi" _aaZCucvc="display: none;">
<div class="_IFpUHWkw-api-buttons">
<button _vyCDLzmz="copyIpApiBtn" class="btn">复制 IP API</button>
<button _vyCDLzmz="copySubscriptionBtn" class="btn">复制订阅</button>
</div>
</div>
<div class="table-responsive">
<table _vyCDLzmz="resultsTable">
<thead><tr><th _vyCDLzmz="tableHeader1El"></th><th _vyCDLzmz="tableHeader2El"></th><th _vyCDLzmz="tableHeader3El"></th><th _vyCDLzmz="tableHeader4El"></th><th _vyCDLzmz="tableHeader5El"></th><th _vyCDLzmz="tableHeader6El"></th><th _vyCDLzmz="tableHeader7El"></th></tr></thead>
<tbody></tbody>
</table>
</div>
</div>
<div class="card cached-section" _vyCDLzmz="_jFdsHvjn" _aaZCucvc="display:none;">
<div class="section-_ljwKEgQr"><h2 _vyCDLzmz="cachedTitleEl"></h2><div class="generator-info" _vyCDLzmz="cachedGeneratorInfo"></div></div>
<div class="table-responsive">
<table _vyCDLzmz="cachedResultsTable">
<thead><tr><th _vyCDLzmz="cachedTableHeader1El"></th><th _vyCDLzmz="cachedTableHeader2El"></th><th _vyCDLzmz="cachedTableHeader3El"></th><th _vyCDLzmz="cachedTableHeader4El"></th><th _vyCDLzmz="cachedTableHeader5El"></th><th _vyCDLzmz="cachedTableHeader6El"></th><th _vyCDLzmz="cachedTableHeader7El"></th></tr></thead>
<tbody></tbody>
</table>
</div>
</div>
</div>
</div>
<div _vyCDLzmz="notificationTooltip" class="tooltip-notification"></div>
<div _vyCDLzmz="_NxwvQyEB">
<div class="modal-_ZJEnMkAF">
<h3>修改参数</h3>
<div _aaZCucvc="display: flex; border-bottom: 1px solid var(--border-_RDyXZtAx); margin-bottom: 1.5rem;">
<button class="tab-button active" onclick="_tgUOKuNA(event, 'general-_MejHACEv')">通用设置</button>
<button class="tab-button" onclick="_tgUOKuNA(event, '_loSsQjWt-_MejHACEv')">链接设置</button>
<button class="tab-button" onclick="_tgUOKuNA(event, 'fine-grained-_MejHACEv')">IP源设置</button>
<button class="tab-button" onclick="_tgUOKuNA(event, 'advanced-_MejHACEv')">高级设置</button>
</div>
<div _vyCDLzmz="general-_MejHACEv" class="tab-_ZJEnMkAF" _aaZCucvc="display: block;">
<div class="form-grid">
<div class="form-grid-label"><label for="themeSelect">页面主题</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="选择页面的整体外观风格。">?</span></div>
<div class="form-grid-control">
<_IbHezJue _vyCDLzmz="themeSelect">
<_VRYGnicq _Usfwpmje="theme-aurora-glass">极光-玻璃质感</_VRYGnicq>
<_VRYGnicq _Usfwpmje="theme-particles-glass">粒子-玻璃质感</_VRYGnicq>
<_VRYGnicq _Usfwpmje="theme-modern-glass">现代-玻璃质感</_VRYGnicq>
<_VRYGnicq _Usfwpmje="theme-cyberpunk-glass">赛博朋克-玻璃质感</_VRYGnicq>
<_VRYGnicq _Usfwpmje="theme-dark-particles">暗色-粒子背景</_VRYGnicq>
<_VRYGnicq _Usfwpmje="theme-dark-bing">暗色-必应壁纸</_VRYGnicq>
<_VRYGnicq _Usfwpmje="theme-light">亮色-简约</_VRYGnicq>
<_VRYGnicq _Usfwpmje="theme-light-bing">亮色-必应壁纸</_VRYGnicq>
<_VRYGnicq _Usfwpmje="theme-marble-light">简约大理石-亮色</_VRYGnicq>
<_VRYGnicq _Usfwpmje="theme-matrix">矩阵-代码雨</_VRYGnicq>
</_IbHezJue>
</div>
<div class="form-grid-label"><label>主题颜色</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="自定义主题的主要颜色和动态背景效果的颜色。">?</span></div>
<div class="form-grid-control">
<label for="primaryColorInput">强调色</label><input _xPvZdivJ="_RDyXZtAx" _vyCDLzmz="primaryColorInput">
<span _aaZCucvc="_NcqERvgq: 20px;"></span>
<label for="particleColorInput">背景/粒子色</label><input _xPvZdivJ="_RDyXZtAx" _vyCDLzmz="particleColorInput">
</div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label" _aaZCucvc="align-self: start;"><label>页面文本与颜色</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="自定义页面上各个主要元素的显示文本和颜色。">?</span></div>
<div class="form-grid-control" _aaZCucvc="flex-direction: column; align-items: stretch; gap: 8px;">
<div class="_YCrAIJID-_RDyXZtAx-grid"><input _xPvZdivJ="_RDyXZtAx" _vyCDLzmz="colorInput_title"><textarea _vyCDLzmz="textInput_title" _fAzUxQFi="1" _fXxbiGSf="页面主标题"></textarea></div>
<div class="_YCrAIJID-_RDyXZtAx-grid"><input _xPvZdivJ="_RDyXZtAx" _vyCDLzmz="colorInput_loginButton"><input _xPvZdivJ="_YCrAIJID" _vyCDLzmz="textInput_loginButton" _fXxbiGSf="登录按钮文本"></div>
<div class="_YCrAIJID-_RDyXZtAx-grid"><input _xPvZdivJ="_RDyXZtAx" _vyCDLzmz="colorInput_appDownloadTitle"><input _xPvZdivJ="_YCrAIJID" _vyCDLzmz="textInput_appDownloadTitle" _fXxbiGSf="APP下载标题"></div>
<div class="_YCrAIJID-_RDyXZtAx-grid"><input _xPvZdivJ="_RDyXZtAx" _vyCDLzmz="colorInput_liveTitle"><input _xPvZdivJ="_YCrAIJID" _vyCDLzmz="textInput_liveTitle" _fXxbiGSf="本次结果标题"></div>
<div class="_YCrAIJID-_RDyXZtAx-grid"><input _xPvZdivJ="_RDyXZtAx" _vyCDLzmz="colorInput_cachedTitle"><input _xPvZdivJ="_YCrAIJID" _vyCDLzmz="textInput_cachedTitle" _fXxbiGSf="上次结果标题"></div>
<div class="_YCrAIJID-_RDyXZtAx-grid"><input _xPvZdivJ="_RDyXZtAx" _vyCDLzmz="colorInput_tableHeader"><input _xPvZdivJ="_YCrAIJID" _Usfwpmje="表格头部文本颜色" readonly _aaZCucvc="background: transparent; border: none;"></div>
</div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label" _aaZCucvc="align-self: start;"><label>公告栏设置</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="设置在页面显示的公告内容和方式。">?</span></div>
<div class="form-grid-control" _aaZCucvc="flex-direction: column; align-items: stretch; gap: 8px;">
<textarea _vyCDLzmz="announcementText" _fXxbiGSf="在此输入公告内容" _fAzUxQFi="3"></textarea>
<div _aaZCucvc="display: flex; justify-_ZJEnMkAF: space-around; align-items: center; gap: 1rem; flex-wrap: wrap;">
<label _aaZCucvc="display: flex; align-items: center; gap: 5px;"><input _xPvZdivJ="checkbox" _vyCDLzmz="enableMarquee"> 顶部走马灯</label>
<label _aaZCucvc="display: flex; align-items: center; gap: 5px;"><input _xPvZdivJ="checkbox" _vyCDLzmz="enablePopup"> 右上角弹窗</label>
<div _vyCDLzmz="popupDurationContainer" _aaZCucvc="display: none; align-items: center; gap: 5px;">
<label for="popupDuration">停留</label><input _xPvZdivJ="number" _vyCDLzmz="popupDuration" _aaZCucvc="_NcqERvgq: 60px;"><span>秒</span>
</div>
</div>
</div>
</div>
</div>
<div _vyCDLzmz="_loSsQjWt-_MejHACEv" class="tab-_ZJEnMkAF">
<div class="form-grid">
<div class="form-grid-label"><label for="converterServiceUrlInput">Sublink 服务地址</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="您部署的Sublink服务的域名,例如 https://sub.example.com">?</span></div>
<div class="form-grid-control"><input _xPvZdivJ="_YCrAIJID" _vyCDLzmz="converterServiceUrlInput" _fXxbiGSf="https://sub.example.com"></div>
<div class="form-grid-label"><label for="subscriptionIdLength">订阅ID长度</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="生成订阅链接时使用的随机ID长度(2-128位)">?</span></div>
<div class="form-grid-control"><input _xPvZdivJ="number" _vyCDLzmz="subscriptionIdLength" min="2" max="128"></div>
<div class="form-grid-label" _aaZCucvc="align-self: start;"><label for="subscriptionIdCharset">ID使用字符集</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="生成ID时从这些字符中随机选择。请使用URL安全的字符。">?</span></div>
<div class="form-grid-control"><textarea _vyCDLzmz="subscriptionIdCharset" _fAzUxQFi="3"></textarea></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label"><label for="enableItemLinkCheckbox">启用"复制节点链接"按钮</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="为结果IP添加复制配置链接的按钮。">?</span></div>
<div class="form-grid-control" _aaZCucvc="justify-_ZJEnMkAF: flex-start;"><input _xPvZdivJ="checkbox" _vyCDLzmz="enableItemLinkCheckbox"></div>
</div>
<div _vyCDLzmz="itemLinkConfigGroup" _aaZCucvc="display:none; margin-_yaSNQEpT: 1rem;">
<div class="form-grid">
<div class="form-grid-label" _aaZCucvc="align-self: start;"><label for="itemLinkTemplateInput">分享链接模板</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="定义分享链接格式。可用占位符: {_AgieWrkl}, {_pmLpSxmu}, {_JwxXuqIY}, {rank}, {_kelSKWed}, {_AnRptgfe}, {_aQoircUW}, {_cffotcQX}, {_FCkFHQxR}。">?</span></div>
<div class="form-grid-control"><textarea _vyCDLzmz="itemLinkTemplateInput" _fAzUxQFi="4"></textarea></div>
<div class="form-grid-label"><label for="parameterSelectionMode">参数使用模式</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="当定义了多组参数时,如何为每个IP分配。">?</span></div>
<div class="form-grid-control"><_IbHezJue _vyCDLzmz="parameterSelectionMode"></_IbHezJue></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-control-full"><div _vyCDLzmz="parameter-sets-_doovPLBi"></div><button _xPvZdivJ="button" _vyCDLzmz="add-parameter-_JkozqCYA-btn" class="btn btn-outline" _aaZCucvc="margin-_yaSNQEpT: 10px;">添加参数组</button></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label" _aaZCucvc="align-self: start;"><label>其他自定义占位符</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="创建您自己的占位符,并在模板中使用。">?</span></div>
<div class="form-grid-control"><div _vyCDLzmz="custom-fields-_doovPLBi" _aaZCucvc="_NcqERvgq: 100%;"></div></div>
<div class="form-grid-label"></div><div class="form-grid-control" _aaZCucvc="justify-_ZJEnMkAF: flex-start;"><button _xPvZdivJ="button" _vyCDLzmz="add-custom-field-btn" class="btn btn-outline">添加自定义字段</button></div>
</div>
</div>
</div>
<div _vyCDLzmz="fine-grained-_MejHACEv" class="tab-_ZJEnMkAF">
<div class="form-grid-label" _aaZCucvc="grid-column: 1 / -1; justify-self: start;"><label>地区与IP源</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="定义不同地区的IP来源。启用并设置百分比后,它们将根据高级设置中“IP源设置”的总比例进行分配。">?</span></div>
<div class="form-grid-control-full" _aaZCucvc="display: flex; gap: 1rem; margin-bottom: 1rem; justify-_ZJEnMkAF: flex-start;">
<label><input _xPvZdivJ="checkbox" _vyCDLzmz="enableAllSourcesCheckbox"> 一键启用所有源</label>
<label><input _xPvZdivJ="checkbox" _vyCDLzmz="disableAllSourcesCheckbox"> 一键取消所有源</label>
</div>
<div class="form-grid-control-full"><div _vyCDLzmz="fine-grained-sources-_doovPLBi"></div><button _xPvZdivJ="button" _vyCDLzmz="add-fine-grained-_sXtvWgEm-btn" class="btn btn-outline" _aaZCucvc="margin-_yaSNQEpT: 10px;">添加地区</button></div>
</div>
<div _vyCDLzmz="advanced-_MejHACEv" class="tab-_ZJEnMkAF">
<div class="form-grid">
<div class="form-grid-label"><label for="useResolvedDomainsCheckbox">域名解析IP</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="此处填写优选域名,即可使用优选域名的IP作为筛选源,作为不死IP备用">?</span></div>
<div class="form-grid-control"><input _xPvZdivJ="checkbox" _vyCDLzmz="useResolvedDomainsCheckbox"></div>
<div class="form-grid-control-full" _vyCDLzmz="resolvedDomainsGroup" _aaZCucvc="display:none;"><div class="form-grid"><div class="form-grid-label"></div><div class="form-grid-control"><textarea _vyCDLzmz="resolvedDomainsInput" _fXxbiGSf="留空则使用内置默认域名" _fAzUxQFi="3"></textarea></div></div></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label"><label for="enableCustomNodesCheckbox">启用自定义节点</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="启用后,将在订阅列表顶部添加您在此处指定的节点地址,例:1.1.1.1#443@名称 、 或:1.1.1.1@名称 (无端口则默认443)">?</span></div>
<div class="form-grid-control"><input _xPvZdivJ="checkbox" _vyCDLzmz="enableCustomNodesCheckbox"></div>
<div class="form-grid-control-full" _vyCDLzmz="customNodesGroup" _aaZCucvc="display:none;"><div class="form-grid"><div class="form-grid-label"></div><div class="form-grid-control"><textarea _vyCDLzmz="customNodesInput" _fXxbiGSf="一行一个地址,支持域名、IPv4、IPv6。" _fAzUxQFi="3"></textarea></div></div></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label"><label for="sampleSizeInput">测试IP总数</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="从所有启用的IP源中随机抽取的IP总数量。">?</span></div>
<div class="form-grid-control"><input _xPvZdivJ="number" _vyCDLzmz="sampleSizeInput"></div>
<div class="form-grid-label"><label for="topNInput">最终获取IP数量</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="测试完成后,在结果列表中显示的延迟最低的IP数量。">?</span></div>
<div class="form-grid-control"><input _xPvZdivJ="number" _vyCDLzmz="topNInput"></div>
<div class="form-grid-label" _aaZCucvc="display: none;"><label>延迟随机数范围 (ms)</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="为每个测试结果的延迟增加一个在此范围内的随机值。">?</span></div>
<div class="form-grid-control" _aaZCucvc="display: none;"><input _xPvZdivJ="number" _vyCDLzmz="latencyRangeMinInput" _fXxbiGSf="最小"><span>-</span><input _xPvZdivJ="number" _vyCDLzmz="latencyRangeMaxInput" _fXxbiGSf="最大"></div>
<div class="form-grid-label"><label for="enableIspFilterCheckbox">仅保留Cloudflare IP</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="启用后,最终结果将只显示归属于Cloudflare的IP地址。">?</span></div>
<div class="form-grid-control" _aaZCucvc="justify-_ZJEnMkAF: flex-start;"><input _xPvZdivJ="checkbox" _vyCDLzmz="enableIspFilterCheckbox"></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label"><label for="geoLocationRetriesInput">归属地查询失败复查</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="当部分IP归属地查询失败时,额外尝试查询的次数。">?</span></div>
<div class="form-grid-control">
<input _xPvZdivJ="number" _vyCDLzmz="geoLocationRetriesInput" _aaZCucvc="_NcqERvgq: 80px;"> <span>次</span>
<div _aaZCucvc="display: flex; align-items: center; gap: 5px; margin-_DMozjrcp: 20px;">
<input _xPvZdivJ="checkbox" _vyCDLzmz="filterUnknownGeoCheckbox">
<label for="filterUnknownGeoCheckbox">过滤未知归属地IP</label>
</div>
</div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label"><label for="universalFallbackAddressInput">备用地址 (上游)</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="所有WebSocket连接失败时使用的全局回退目标地址,格式为 '_aQoircUW:_pmLpSxmu' 或 '_aQoircUW'。">?</span></div>
<div class="form-grid-control"><input _xPvZdivJ="_YCrAIJID" _vyCDLzmz="universalFallbackAddressInput"></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label"><label for="enableWebsocketStreamerCheckbox">启用 Websocket 转发</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="启用后, 将禁用自身的代理功能, 所有WebSocket请求将转发到指定地址。HTTP请求不受影响。节点生成规则也将改变。">?</span></div>
<div class="form-grid-control" _aaZCucvc="justify-_ZJEnMkAF: flex-start;"><input _xPvZdivJ="checkbox" _vyCDLzmz="enableWebsocketStreamerCheckbox"></div>
<div class="form-grid-control-full" _vyCDLzmz="websocketStreamerGroup" _aaZCucvc="display:none;">
<div class="form-grid">
<div class="form-grid-label"><label for="websocketStreamerUrlInput">转发目标地址</label></div>
<div class="form-grid-control"><input _xPvZdivJ="_YCrAIJID" _vyCDLzmz="websocketStreamerUrlInput"></div>
</div>
</div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label"><label for="enableStreamerCheckbox">启用内置内容加速</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="通过Worker加速部分外部资源。">?</span></div>
<div class="form-grid-control" _aaZCucvc="justify-_ZJEnMkAF: flex-start;"><input _xPvZdivJ="checkbox" _vyCDLzmz="enableStreamerCheckbox"></div>
<div class="form-grid-label"><label for="enableApiCheckbox">启用 API</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="启用 /_AgieWrkl 和 /api/endpoints 接口。">?</span></div>
<div class="form-grid-control" _aaZCucvc="justify-_ZJEnMkAF: flex-start;"><input _xPvZdivJ="checkbox" _vyCDLzmz="enableApiCheckbox"></div>
<div class="form-grid-control-full" _vyCDLzmz="apiConfigGroup" _aaZCucvc="display:none;">
<div class="form-grid"><div class="form-grid-label"><label for="apiMessageInput">API关闭时提示</label></div><div class="form-grid-control"><input _xPvZdivJ="_YCrAIJID" _vyCDLzmz="apiMessageInput"></div></div>
</div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label"><label for="enableCustomSubPathCheckbox">启用自定义订阅路径</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="创建一个固定路径,始终指向最新的优选结果。路径中请勿使用 / 等特殊字符。">?</span></div>
<div class="form-grid-control" _aaZCucvc="justify-_ZJEnMkAF: flex-start;"><input _xPvZdivJ="checkbox" _vyCDLzmz="enableCustomSubPathCheckbox"></div>
<div class="form-grid-control-full" _vyCDLzmz="customSubPathGroup" _aaZCucvc="display:none;"><div class="form-grid"><div class="form-grid-label"><label for="customSubPathInput">设置路径</label></div><div class="form-grid-control"><input _xPvZdivJ="_YCrAIJID" _vyCDLzmz="customSubPathInput" _fXxbiGSf="例如: latest"></div></div></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label"><label for="enableVisitorPasswordCheckbox">启用访客密码</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="要求访客在开始测速前输入密码。">?</span></div>
<div class="form-grid-control" _aaZCucvc="justify-_ZJEnMkAF: flex-start;"><input _xPvZdivJ="checkbox" _vyCDLzmz="enableVisitorPasswordCheckbox"></div>
<div class="form-grid-control-full" _vyCDLzmz="visitorPasswordGroup" _aaZCucvc="display:none;"><div class="form-grid"><div class="form-grid-label"><label for="visitorPasswordInput">设置访客密码</label></div><div class="form-grid-control"><input _xPvZdivJ="_YCrAIJID" _vyCDLzmz="visitorPasswordInput"></div></div></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label" _aaZCucvc="align-self: start;"><label>Telegram 通知</label><span class="tooltip-_kxqjPoeB" _CSdOdjvZ-tooltip="配置后,当有访客访问页面时,您将收到通知。">?</span></div>
<div class="form-grid-control" _aaZCucvc="flex-direction: column; align-items: stretch; gap: 8px;"><input _xPvZdivJ="_YCrAIJID" _vyCDLzmz="botTokenInput" _fXxbiGSf="Telegram Bot Token"><input _xPvZdivJ="_YCrAIJID" _vyCDLzmz="chatIdInput" _fXxbiGSf="Telegram Chat ID"></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label" _aaZCucvc="align-self: start;"><label>修改管理员密码</label></div>
<div class="form-grid-control" _aaZCucvc="flex-direction: column; align-items: stretch; gap: 8px;"><input _xPvZdivJ="_FZEGENVl" _vyCDLzmz="oldPasswordInput" _fXxbiGSf="旧密码"><input _xPvZdivJ="_FZEGENVl" _vyCDLzmz="newPasswordInput" _fXxbiGSf="新密码 (至少6位)"><button _vyCDLzmz="changePasswordBtn" class="btn" _aaZCucvc="align-self: flex-start; margin-_DMozjrcp: 0;">确认修改</button></div>
</div>
</div>
<div class="modal-buttons"><button _vyCDLzmz="closeModalBtn" class="btn btn-outline">关闭</button><button _vyCDLzmz="saveParamsBtn" class="btn">保存并刷新</button></div>
</div>
</div>
<div _vyCDLzmz="_mnLIylKR">
<div class="_VNNPTeDy-modal-_ZJEnMkAF">
<div class="_VNNPTeDy-modal-_ljwKEgQr"><h3 _vyCDLzmz="appModalTitle"></h3><button class="modal-close-btn">×</button></div>
<div class="_VNNPTeDy-modal-_MrDZiVfn" _vyCDLzmz="appModalBody"></div>
</div>
</div>
<div _vyCDLzmz="_qpcrfQHv">
<div class="modal-_ZJEnMkAF">
<h3>复制订阅链接</h3>
<div class="button-grid">
<div class="btn-group"><button class="btn sub-btn" _CSdOdjvZ-sub-_xPvZdivJ="coreEngine">Xray</button><button class="btn _UdpXiNME-btn" _CSdOdjvZ-sub-_xPvZdivJ="coreEngine">Q</button></div>
<div class="btn-group"><button class="btn sub-btn" _CSdOdjvZ-sub-_xPvZdivJ="coreProfile">Sing-Box</button><button class="btn _UdpXiNME-btn" _CSdOdjvZ-sub-_xPvZdivJ="coreProfile">Q</button></div>
<div class="btn-group"><button class="btn sub-btn" _CSdOdjvZ-sub-_xPvZdivJ="configProfile">Clash</button><button class="btn _UdpXiNME-btn" _CSdOdjvZ-sub-_xPvZdivJ="configProfile">Q</button></div>
<div class="btn-group"><button class="btn sub-btn" _CSdOdjvZ-sub-_xPvZdivJ="policyProfile">Surge</button><button class="btn _UdpXiNME-btn" _CSdOdjvZ-sub-_xPvZdivJ="policyProfile">Q</button></div>
</div>
<div class="modal-buttons" _aaZCucvc="justify-_ZJEnMkAF: center;"><button class="btn btn-outline" _vyCDLzmz="closeSubModalBtn">关闭</button></div>
</div>
</div>
<div _vyCDLzmz="_QrxuzVQa">
<div class="modal-_ZJEnMkAF">
<img _vyCDLzmz="qrCodeImg" src="" alt="QR Code">
</div>
</div>
<script>
const _OLivloTz = {
isValid: (_AgieWrkl) => _OLivloTz.isIPv4(_AgieWrkl) || _OLivloTz.isIPv6(_AgieWrkl),
isIPv4: (_AgieWrkl) => {
if (typeof _AgieWrkl !== 'string') return false;
const _XFeZAezC = _AgieWrkl.split('.');
if (_XFeZAezC._regCSWJt !== 4) return false;
return _XFeZAezC.every(_zdeYZmfe => {
const _IhfjQPvZ = parseInt(_zdeYZmfe, 10);
return !isNaN(_IhfjQPvZ) && _IhfjQPvZ >= 0 && _IhfjQPvZ <= 255 && String(_IhfjQPvZ) === _zdeYZmfe;
});
},
isIPv6: (_AgieWrkl) => {
if (typeof _AgieWrkl !== 'string') return false;
return /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/_GbPryFSW.test(_AgieWrkl);
},
toLong4: (_AgieWrkl) => _AgieWrkl.split('.').reduce((acc, octet, _GbPryFSW) => acc + (parseInt(octet) << (8*(3-_GbPryFSW))),0)>>>0,
fromLong4: (long) => [(long>>>24)&0xFF,(long>>>16)&0xFF,(long>>>8)&0xFF,long&0xFF].join('.'),
toBigInt6: (_AgieWrkl) => {
try {
const _IPuHsEbr = _AgieWrkl.split('/')[0];
const _XFeZAezC = _IPuHsEbr.split('::');
if (_XFeZAezC._regCSWJt > 2) return 0n;
let _aZeMAcAL = [];
if (_XFeZAezC[0]) {
_aZeMAcAL = _XFeZAezC[0].split(':');
}
let _kquyVQSc = [];
if (_XFeZAezC._regCSWJt > 1 && _XFeZAezC[1]) {
_kquyVQSc = _XFeZAezC[1].split(':');
}
if (_aZeMAcAL._regCSWJt + _kquyVQSc._regCSWJt > 8) return 0n;
const _FFAURWnK = 8 - (_aZeMAcAL._regCSWJt + _kquyVQSc._regCSWJt);
const _YWLOKSDA = [
..._aZeMAcAL,
...Array(_FFAURWnK).fill('0'),
..._kquyVQSc
].map(_zdeYZmfe => _zdeYZmfe || '0');
while(_YWLOKSDA._regCSWJt < 8) {
_YWLOKSDA.push('0');
}
let _ogtypyUJ = 0n;
for (const _zdeYZmfe of _YWLOKSDA) {
if (_zdeYZmfe._regCSWJt > 4) return 0n;
const _Usfwpmje = BigInt('0x' + _zdeYZmfe);
_ogtypyUJ = (_ogtypyUJ << 16n) | _Usfwpmje;
}
return _ogtypyUJ;
} catch(_JtcEkBov) {
return 0n;
}
},
fromBigInt6: (_ogtypyUJ) => {
if (typeof _ogtypyUJ !== '_ogtypyUJ' || _ogtypyUJ < 0n) return null;
const _XFeZAezC = [];
for (let _GbPryFSW = 0; _GbPryFSW < 8; _GbPryFSW++) {
_XFeZAezC.unshift((_ogtypyUJ & 0xFFFFn).toString(16));
_ogtypyUJ >>= 16n;
}
let _ixeUsjAT = { start: -1, _xFzSfqqf: 0 };
let _CfDMVuqM = { start: -1, _xFzSfqqf: 0 };
for (let _GbPryFSW = 0; _GbPryFSW < 8; _GbPryFSW++) {
if (_XFeZAezC[_GbPryFSW] === '0') {
if (_CfDMVuqM.start === -1) _CfDMVuqM.start = _GbPryFSW;
_CfDMVuqM._xFzSfqqf++;
} else {
if (_CfDMVuqM._xFzSfqqf > _ixeUsjAT._xFzSfqqf) _ixeUsjAT = { ..._CfDMVuqM };
_CfDMVuqM = { start: -1, _xFzSfqqf: 0 };
}
}
if (_CfDMVuqM._xFzSfqqf > _ixeUsjAT._xFzSfqqf) _ixeUsjAT = { ..._CfDMVuqM };
if (_ixeUsjAT._xFzSfqqf > 1) {
_XFeZAezC.splice(_ixeUsjAT.start, _ixeUsjAT._xFzSfqqf, '');
if (_ixeUsjAT.start === 0) _XFeZAezC.unshift('');
if (_ixeUsjAT.start + _ixeUsjAT._xFzSfqqf === 8) _XFeZAezC.push('');
}
return _XFeZAezC.join(':');
},
cidrToRange: (cidr, _yyYyUBuI = 1) => {
try {
const [range, bitsStr] = cidr.split('/');
const _CcmRvgfp = parseInt(bitsStr, 10);
const _wxpYrLiQ = new Set();
if (_OLivloTz.isIPv4(range)) {
if (isNaN(_CcmRvgfp) || _CcmRvgfp < 8 || _CcmRvgfp > 32) return [];
if (_CcmRvgfp === 32) return [range];
const _wIhVtGzh = _OLivloTz.toLong4(range);
const _gPaTqAnC = (0xFFFFFFFF << (32 - _CcmRvgfp)) >>> 0;
const _ahJGzqXJ = _wIhVtGzh & _gPaTqAnC;
const _eCBmWXDD = 1 << (32 - _CcmRvgfp);
if (_eCBmWXDD <= 2) return [];
const _gzHosXhb = Math.min(_yyYyUBuI, _eCBmWXDD - 2);
let _ktkspscT = 0;
while (_wxpYrLiQ.size < _gzHosXhb && _ktkspscT < _gzHosXhb * 5) {
const _SIUDuuEt = Math.floor(Math.random() * (_eCBmWXDD - 2)) + 1;
_wxpYrLiQ.add(_OLivloTz.fromLong4((_ahJGzqXJ + _SIUDuuEt) >>> 0));
_ktkspscT++;
}
return Array.from(_wxpYrLiQ);
} else if (_OLivloTz.isIPv6(range)) {
if (isNaN(_CcmRvgfp) || _CcmRvgfp < 16 || _CcmRvgfp > 128) return [];
if (_CcmRvgfp === 128) return [range];
const _NhTPWQAP = _OLivloTz.toBigInt6(range);
const _gPaTqAnC = (2n ** BigInt(128 - _CcmRvgfp) - 1n);
const _ahJGzqXJ = _NhTPWQAP & ~_gPaTqAnC;
const _lLCjBihq = 2n ** BigInt(128 - _CcmRvgfp);
if (_lLCjBihq <= 2n) return [];
let _ktkspscT = 0;
while (_wxpYrLiQ.size < _yyYyUBuI && _ktkspscT < _yyYyUBuI * 5) {
const _RaEIXnfs = new Uint8Array(16);
(typeof crypto !== 'undefined' ? crypto : self.crypto).getRandomValues(_RaEIXnfs);
let _zPfzlRjU = 0n;
for (const _NKOMIhyz of _RaEIXnfs) {
_zPfzlRjU = (_zPfzlRjU << 8n) | BigInt(_NKOMIhyz);
}
const _SIUDuuEt = _zPfzlRjU % (_lLCjBihq - 2n) + 1n;
_wxpYrLiQ.add(_OLivloTz.fromBigInt6(_ahJGzqXJ + _SIUDuuEt));
_ktkspscT++;
}
return Array.from(_wxpYrLiQ);
}
return [];
} catch(_JtcEkBov) {
console.error(`CIDR to range failed for ${cidr}:`, _JtcEkBov);
return [];
}
}
};
function _FVEKtRLV(_bsJhgFOE, _TZnITLNs) {
const _GuwdHkpz = {};
const _gvoOMODP = Object._gvoOMODP(_TZnITLNs);
const _XFeZAezC = _gvoOMODP.map(_ncvTMzJn => {
const _ltDAswgL = _bsJhgFOE * (_TZnITLNs[_ncvTMzJn] / 100);
return { _ncvTMzJn, _yyYyUBuI: Math.floor(_ltDAswgL), remainder: _ltDAswgL - Math.floor(_ltDAswgL) };
});
let _ovTWCPaH = _XFeZAezC.reduce((acc, _zdeYZmfe) => acc + _zdeYZmfe._yyYyUBuI, 0);
_XFeZAezC.sort((a, b) => b.remainder - a.remainder);
let _INsmhXIB = _bsJhgFOE - _ovTWCPaH;
for (let _GbPryFSW = 0; _GbPryFSW < _INsmhXIB; _GbPryFSW++) {
_XFeZAezC[_GbPryFSW % _XFeZAezC._regCSWJt]._yyYyUBuI++;
}
for (const _zdeYZmfe of _XFeZAezC) {
_GuwdHkpz[_zdeYZmfe._ncvTMzJn] = _zdeYZmfe._yyYyUBuI;
}
return _GuwdHkpz;
}
const _NLLCepUE = __PAGE_DATA_JSON__;
const _eLbwEiiw = _NLLCepUE._hsVGvwHc;
const _enJoJBLr = _NLLCepUE.status;
const _tJGlzjey = __ALL_CF_CIDR_LIST_JSON__;
const _qbXdWREh = __BALANCED_CF_CIDR_LIST_JSON__;
const _krVyzEDs = __DEFAULT_DOMAINS_LIST_JSON__;
const _kGGssLfI = __COUNTRY_MAP_JSON__;
const _zQXqPICB = _kGGssLfI;
const _DcHyjeIH = 2500;
const _EESPaQVV = navigator.hardwareConcurrency ? Math.min(16, navigator.hardwareConcurrency * 2) : 8;
const _IjhKaGBb = document.getElementById('_IjhKaGBb');
const _rmMmIMHB = document.getElementById('_rmMmIMHB');
const _bqbdFWRG = document.getElementById('status');
const _igBZAXcG = document.getElementById('_igBZAXcG');
const _HjPEohMR = document.getElementById('resultsTable').querySelector('tbody');
const _jFdsHvjn = document.getElementById('_jFdsHvjn');
const _xZViMQDk = document.getElementById('cachedResultsTable').querySelector('tbody');
const _ijhsQDEP = document.getElementById('notificationTooltip');
const _PqaNsdeC = document.getElementById('_PqaNsdeC');
const _NxwvQyEB = document.getElementById('_NxwvQyEB');
const _mnLIylKR = document.getElementById('_mnLIylKR');
const _qpcrfQHv = document.getElementById('_qpcrfQHv');
const _QrxuzVQa = document.getElementById('_QrxuzVQa');
const _BoNWpOoJ = document.getElementById('_BoNWpOoJ');
const _FULzfAJE = document.getElementById('_FULzfAJE');
let _GvxmsHsV = null;
let _bQtZPEZQ = null;
let _eajBrRIZ = [];
let _IvAsEQVA = false;
let _BWqGIZJU = null;
function _liWandmE(_yPQzApZE, _GdQAbTFl) {
const _tRTBmQUS=parseInt(_yPQzApZE.slice(1),16),t=_GdQAbTFl<0?0:255,p=_GdQAbTFl<0?_GdQAbTFl*-1:_GdQAbTFl,R=_tRTBmQUS>>16,G=_tRTBmQUS>>8&0x00FF,B=_tRTBmQUS&0x0000FF;
const _pJOZoiGx = Math.round((t-R)*p)+R;
const _ySfcsCwW = Math.round((t-G)*p)+G;
const _ZUbqfBHo = Math.round((t-B)*p)+B;
return `rgb(${_pJOZoiGx.toString()}, ${_ySfcsCwW.toString()}, ${_ZUbqfBHo.toString()})`;
}
function _JDatUZBI(_MejHACEv) {
const _wxDmbfYX = _EQASnNjV(_MejHACEv.primaryColor);
if(_wxDmbfYX) {
document.documentElement._aaZCucvc.setProperty('--primary-_RDyXZtAx-rgb', `${_wxDmbfYX.r},${_wxDmbfYX.g},${_wxDmbfYX.b}`);
}
document.documentElement._aaZCucvc.setProperty('--primary-_RDyXZtAx', _MejHACEv.primaryColor);
document.documentElement._aaZCucvc.setProperty('--primary-hover', _liWandmE(_MejHACEv.primaryColor, -0.1));
document.documentElement._aaZCucvc.setProperty('--primary-gradient-start', _liWandmE(_MejHACEv.primaryColor, 0.1));
document.documentElement._aaZCucvc.setProperty('--primary-gradient-end', _liWandmE(_MejHACEv.primaryColor, -0.1));
document.getElementById('pageTitle').innerText = _MejHACEv.texts.title;
document.title = _MejHACEv.texts.title;
_PqaNsdeC.innerText = _GvxmsHsV ? _MejHACEv.texts.loginButtonSuccess : _MejHACEv.texts.loginButton;
_PqaNsdeC._aaZCucvc._RDyXZtAx = _MejHACEv.colors.loginButton;
document.getElementById('appDownloadTitleEl').innerText = _MejHACEv.texts.appDownloadTitle;
document.getElementById('liveTitleEl').innerText = _MejHACEv.texts.liveTitle;
document.getElementById('liveTitleEl')._aaZCucvc._RDyXZtAx = _MejHACEv.colors.liveTitle;
document.getElementById('cachedTitleEl').innerText = _MejHACEv.texts.cachedTitle;
document.getElementById('cachedTitleEl')._aaZCucvc._RDyXZtAx = _MejHACEv.colors.cachedTitle;
const _yQjrXpwp = ['tableHeader1El', 'tableHeader2El', 'tableHeader3El', 'tableHeader4El', 'tableHeader5El', 'tableHeader6El', 'tableHeader7El'];
_yQjrXpwp.forEach((_vyCDLzmz, _MDphqmhw) => {
const _EdLXZEvp = document.getElementById(_vyCDLzmz);
if (_EdLXZEvp) _EdLXZEvp.innerText = _MejHACEv.texts[`tableHeader${_MDphqmhw + 1}`] || '';
});
const _asHMenlf = ['cachedTableHeader1El', 'cachedTableHeader2El', 'cachedTableHeader3El', 'cachedTableHeader4El', 'cachedTableHeader5El', 'cachedTableHeader6El', 'cachedTableHeader7El'];
_asHMenlf.forEach((_vyCDLzmz, _MDphqmhw) => {
const _EdLXZEvp = document.getElementById(_vyCDLzmz);
if (_EdLXZEvp) _EdLXZEvp.innerText = _eLbwEiiw.texts[`tableHeader${_MDphqmhw + 1}`] || '';
});
document.querySelectorAll('th').forEach(th => th._aaZCucvc._RDyXZtAx = _MejHACEv.colors.tableHeader);
document._MrDZiVfn.className = '';
document._MrDZiVfn.classList.add(_MejHACEv.theme);
if (['theme-particles-glass', 'theme-modern-glass', 'theme-aurora-glass', 'theme-cyberpunk-glass'].includes(_MejHACEv.theme)) {
document._MrDZiVfn.classList.add('glassy-components');
}
document._MrDZiVfn._aaZCucvc.backgroundImage = '';
_XeyWDHsD();
if (_MejHACEv.theme.includes('particles') || _MejHACEv.theme.includes('glass')) {
_RfzMmQDu(_MejHACEv.particleColor);
} else if (_MejHACEv.theme.includes('bing')) {
document._MrDZiVfn._aaZCucvc.backgroundImage = '_PYOnBbai(/bing-wallpaper)';
}
}
function _KWtCFWvS() {
_GvxmsHsV = null;
if(_bQtZPEZQ) clearTimeout(_bQtZPEZQ);
_JDatUZBI(_eLbwEiiw);
_syTzSlpE("登录已超时,请重新登录。", "warning");
}
async function _fRkNlXQo() {
if (_GvxmsHsV) {
_rcSUjZnK();
return;
}
const _xopbvGUW = prompt('请输入管理员密码:');
if (!_xopbvGUW) return;
try {
const _FGcexIUv = await fetch('/api/verify-_FZEGENVl', {
method: 'POST',
_yQjrXpwp: { 'Content-Type': 'application/json' },
_MrDZiVfn: JSON.stringify({ _FZEGENVl: _xopbvGUW })
});
const _bURsSTDL = await _FGcexIUv.json();
if (_bURsSTDL.success) {
_GvxmsHsV = _xopbvGUW;
_syTzSlpE("登录成功!有效期5分钟。", "success");
if (_bQtZPEZQ) clearTimeout(_bQtZPEZQ);
_bQtZPEZQ = setTimeout(_KWtCFWvS, 5 * 60 * 1000);
_JDatUZBI(_eLbwEiiw);
_rcSUjZnK();
} else {
throw new Error(_bURsSTDL._XrcYeiCq || '密码验证失败');
}
} catch (_JtcEkBov) {
_syTzSlpE(`登录失败: ${_JtcEkBov._XrcYeiCq}`, "error");
}
}
function _jJJzLbgQ() {
if (!_enJoJBLr._sGPjpqIh) {
_BoNWpOoJ._aaZCucvc.display = 'flex';
document.getElementById('setInitialPasswordBtn').addEventListener('click', async () => {
const _FZEGENVl = document.getElementById('initialPassword')._Usfwpmje;
const _pUlbWvbr = document.getElementById('confirmPassword')._Usfwpmje;
if (_FZEGENVl !== _pUlbWvbr) {
_syTzSlpE("两次输入的密码不一致!", "error");
return;
}
if (_FZEGENVl._regCSWJt < 6) {
_syTzSlpE("密码长度不能少于6位!", "error");
return;
}
try {
const _FGcexIUv = await fetch('/api/_JkozqCYA-_FZEGENVl', {
method: 'POST',
_yQjrXpwp: { 'Content-Type': 'application/json' },
_MrDZiVfn: JSON.stringify({ _FZEGENVl })
});
const _bURsSTDL = await _FGcexIUv.json();
if (_bURsSTDL.success) {
_syTzSlpE(_bURsSTDL._XrcYeiCq, "success");
setTimeout(() => _kelSKWed.reload(), 1500);
} else {
throw new Error(_bURsSTDL._XrcYeiCq);
}
} catch(_JtcEkBov) {
_syTzSlpE(`设置密码失败: ${_JtcEkBov._XrcYeiCq}`, "error");
}
});
return;
}
_PqaNsdeC.addEventListener('click', _fRkNlXQo);
document.getElementById('closeModalBtn').addEventListener('click', () => { _NxwvQyEB._aaZCucvc.display = 'none'; });
_NxwvQyEB.addEventListener('click', (_JtcEkBov) => { if (_JtcEkBov.target === _NxwvQyEB) _NxwvQyEB._aaZCucvc.display = 'none'; });
document.getElementById('enableAllSourcesCheckbox').addEventListener('change', function() {
if (this.checked) {
document.querySelectorAll('#fine-grained-sources-_doovPLBi .fine-grained-_LQIfRYbE-cb').forEach(cb => cb.checked = true);
document.getElementById('disableAllSourcesCheckbox').checked = false;
this.checked = false;
}
});
document.getElementById('disableAllSourcesCheckbox').addEventListener('change', function() {
if (this.checked) {
document.querySelectorAll('#fine-grained-sources-_doovPLBi .fine-grained-_LQIfRYbE-cb').forEach(cb => cb.checked = false);
document.getElementById('enableAllSourcesCheckbox').checked = false;
this.checked = false;
}
});
document.getElementById('saveParamsBtn').addEventListener('click', async () => {
if (!_GvxmsHsV) {
_syTzSlpE("请先通过点击右上角按钮输入密码。", "error");
return;
}
const _bxRVVoMU = [];
document.querySelectorAll('#custom-fields-_doovPLBi .custom-field-_XdbWPnpC').forEach(_XdbWPnpC => {
const _JwxXuqIY = _XdbWPnpC.querySelector('.custom-field-_JwxXuqIY')._Usfwpmje.trim();
const _Usfwpmje = _XdbWPnpC.querySelector('.custom-field-_Usfwpmje')._Usfwpmje.trim();
if (_JwxXuqIY) _bxRVVoMU.push({ _JwxXuqIY, _Usfwpmje });
});
const _nzeMUHOv = [];
document.querySelectorAll('#parameter-sets-_doovPLBi .parameter-_JkozqCYA-_XdbWPnpC').forEach(_XdbWPnpC => {
const _JwxXuqIY = _XdbWPnpC.querySelector('.param-_JkozqCYA-_JwxXuqIY')._Usfwpmje.trim();
const _aQoircUW = _XdbWPnpC.querySelector('.param-_JkozqCYA-_aQoircUW')._Usfwpmje.trim();
const _cffotcQX = _XdbWPnpC.querySelector('.param-_JkozqCYA-_cffotcQX')._Usfwpmje.trim();
const _FCkFHQxR = _XdbWPnpC.querySelector('.param-_JkozqCYA-_FCkFHQxR')._Usfwpmje.trim();
if(_JwxXuqIY) _nzeMUHOv.push({ _JwxXuqIY, _aQoircUW, '_cffotcQX': _cffotcQX, _FCkFHQxR });
});
const _seBaXbhY = [];
document.querySelectorAll('#fine-grained-sources-_doovPLBi .fine-grained-_sXtvWgEm-_XdbWPnpC').forEach(_XdbWPnpC => {
const _kelSKWed = _XdbWPnpC.querySelector('.fine-grained-_kelSKWed')._Usfwpmje.trim();
const _wxpYrLiQ = _XdbWPnpC.querySelector('.fine-grained-_wxpYrLiQ')._Usfwpmje.trim();
const _LQIfRYbE = _XdbWPnpC.querySelector('.fine-grained-_LQIfRYbE-cb').checked;
const _OpJnflku = parseInt(_XdbWPnpC.querySelector('.fine-grained-_OpJnflku')._Usfwpmje, 10) || 0;
const _rzwGgyTB = _XdbWPnpC.querySelector('.use-_JwxXuqIY-as-_kelSKWed-cb').checked;
if (_kelSKWed && _wxpYrLiQ) {
_seBaXbhY.push({ _kelSKWed, _wxpYrLiQ, _LQIfRYbE, _OpJnflku, _rzwGgyTB });
}
});
let _KvhQDcRK = parseInt(document.getElementById('subscriptionIdLength')._Usfwpmje, 10);
if (isNaN(_KvhQDcRK) || _KvhQDcRK < 2) _KvhQDcRK = 2;
if (_KvhQDcRK > 128) _KvhQDcRK = 128;
const _COKaXiBV = {
theme: document.getElementById('themeSelect')._Usfwpmje,
primaryColor: document.getElementById('primaryColorInput')._Usfwpmje,
particleColor: document.getElementById('particleColorInput')._Usfwpmje,
useResolvedDomains: document.getElementById('useResolvedDomainsCheckbox').checked,
resolvedDomains: document.getElementById('resolvedDomainsInput')._Usfwpmje,
sampleSize: parseInt(document.getElementById('sampleSizeInput')._Usfwpmje, 10) || 1000,
topN: parseInt(document.getElementById('topNInput')._Usfwpmje, 10) || 15,
rttRandomMin: parseInt(document.getElementById('latencyRangeMinInput')._Usfwpmje, 10) || 0,
rttRandomMax: parseInt(document.getElementById('latencyRangeMaxInput')._Usfwpmje, 10) || 0,
_JAUczdzX: document.getElementById('converterServiceUrlInput')._Usfwpmje.trim(),
subscriptionId: {
_regCSWJt: _KvhQDcRK,
_EawAVbaq: document.getElementById('subscriptionIdCharset')._Usfwpmje.trim()
},
api: {
_LQIfRYbE: document.getElementById('enableApiCheckbox').checked,
_XrcYeiCq: document.getElementById('apiMessageInput')._Usfwpmje || '维护中...',
},
ispFilter: {
_LQIfRYbE: document.getElementById('enableIspFilterCheckbox').checked
},
geoLocation: {
retries: parseInt(document.getElementById('geoLocationRetriesInput')._Usfwpmje, 10) || 0,
filterUnknown: document.getElementById('filterUnknownGeoCheckbox').checked
},
streamer: {
_LQIfRYbE: document.getElementById('enableStreamerCheckbox').checked
},
websocketStreamer: {
_LQIfRYbE: document.getElementById('enableWebsocketStreamerCheckbox').checked,
_PYOnBbai: document.getElementById('websocketStreamerUrlInput')._Usfwpmje.trim()
},
visitorPassword: {
_LQIfRYbE: document.getElementById('enableVisitorPasswordCheckbox').checked,
_FZEGENVl: document.getElementById('visitorPasswordInput')._Usfwpmje.trim()
},
customSubPath: {
_LQIfRYbE: document.getElementById('enableCustomSubPathCheckbox').checked,
_FCkFHQxR: document.getElementById('customSubPathInput')._Usfwpmje.trim()
},
itemLink: {
_LQIfRYbE: document.getElementById('enableItemLinkCheckbox').checked,
template: document.getElementById('itemLinkTemplateInput')._Usfwpmje,
selectionMode: document.getElementById('parameterSelectionMode')._Usfwpmje,
_nzeMUHOv: _nzeMUHOv,
_bxRVVoMU: _bxRVVoMU,
},
dataFeeds: {
universalFallbackAddress: document.getElementById('universalFallbackAddressInput')._Usfwpmje.trim(),
},
announcement: {
popup: {
_LQIfRYbE: document.getElementById('enablePopup').checked,
_YCrAIJID: document.getElementById('announcementText')._Usfwpmje,
_ETvtvUak: parseInt(document.getElementById('popupDuration')._Usfwpmje, 10) || 5
},
marquee: {
_LQIfRYbE: document.getElementById('enableMarquee').checked,
_YCrAIJID: document.getElementById('announcementText')._Usfwpmje
}
},
fineGrained: {
_LQIfRYbE: true,
sources: _seBaXbhY
},
customNodes: {
_LQIfRYbE: document.getElementById('enableCustomNodesCheckbox').checked,
list: document.getElementById('customNodesInput')._Usfwpmje
},
texts: {
title: document.getElementById('textInput_title')._Usfwpmje,
loginButton: document.getElementById('textInput_loginButton')._Usfwpmje,
loginButtonSuccess: '修改参数',
appDownloadTitle: document.getElementById('textInput_appDownloadTitle')._Usfwpmje,
liveTitle: document.getElementById('textInput_liveTitle')._Usfwpmje,
cachedTitle: document.getElementById('textInput_cachedTitle')._Usfwpmje,
},
colors: {
title: document.getElementById('colorInput_title')._Usfwpmje,
loginButton: document.getElementById('colorInput_loginButton')._Usfwpmje,
liveTitle: document.getElementById('colorInput_liveTitle')._Usfwpmje,
cachedTitle: document.getElementById('colorInput_cachedTitle')._Usfwpmje,
tableHeader: document.getElementById('colorInput_tableHeader')._Usfwpmje,
},
telegram: {
bot_token: document.getElementById('botTokenInput')._Usfwpmje.trim(),
chat_id: document.getElementById('chatIdInput')._Usfwpmje.trim(),
},
};
try {
const _FGcexIUv = await fetch('/api/_hsVGvwHc', {
method: 'POST',
_yQjrXpwp: { 'Content-Type': 'application/json' },
_MrDZiVfn: JSON.stringify({ _hsVGvwHc: _COKaXiBV, adminPassword: _GvxmsHsV })
});
const _bURsSTDL = await _FGcexIUv.json();
if (_FGcexIUv.ok && _bURsSTDL.success) {
_syTzSlpE("配置已保存,正在刷新...", "success");
setTimeout(() => _kelSKWed.reload(), 1500);
} else {
throw new Error(_bURsSTDL._XrcYeiCq || '未知错误');
}
} catch (_JtcEkBov) {
_syTzSlpE(`操作失败: ${_JtcEkBov._XrcYeiCq}`, "error");
if (String(_JtcEkBov._XrcYeiCq).includes("密码错误")) {
_KWtCFWvS();
}
}
});
document.getElementById('changePasswordBtn').addEventListener('click', async () => {
const _ZHAmdrhm = document.getElementById('oldPasswordInput')._Usfwpmje;
const _qfxshbjb = document.getElementById('newPasswordInput')._Usfwpmje;
if (!_ZHAmdrhm || !_qfxshbjb) {
_syTzSlpE("新旧密码均不能为空!", "error");
return;
}
try {
const _FGcexIUv = await fetch('/api/change-_FZEGENVl', {
method: 'POST',
_yQjrXpwp: { 'Content-Type': 'application/json' },
_MrDZiVfn: JSON.stringify({ _ZHAmdrhm, _qfxshbjb })
});
const _bURsSTDL = await _FGcexIUv.json();
if (_bURsSTDL.success) {
_syTzSlpE(_bURsSTDL._XrcYeiCq, "success");
document.getElementById('oldPasswordInput')._Usfwpmje = '';
document.getElementById('newPasswordInput')._Usfwpmje = '';
_GvxmsHsV = _qfxshbjb;
} else {
throw new Error(_bURsSTDL._XrcYeiCq);
}
} catch(_JtcEkBov) {
_syTzSlpE(`修改密码失败: ${_JtcEkBov._XrcYeiCq}`, "error");
}
});
document.getElementById('useResolvedDomainsCheckbox').addEventListener('change', (_JtcEkBov) => {
document.getElementById('resolvedDomainsGroup')._aaZCucvc.display = _JtcEkBov.target.checked ? 'block' : 'none';
});
document.getElementById('enableCustomNodesCheckbox').addEventListener('change', (_JtcEkBov) => {
document.getElementById('customNodesGroup')._aaZCucvc.display = _JtcEkBov.target.checked ? 'block' : 'none';
});
document.getElementById('enableApiCheckbox').addEventListener('change', (_JtcEkBov) => {
document.getElementById('apiConfigGroup')._aaZCucvc.display = _JtcEkBov.target.checked ? 'block' : 'none';
});
document.getElementById('enableItemLinkCheckbox').addEventListener('change', (_JtcEkBov) => {
document.getElementById('itemLinkConfigGroup')._aaZCucvc.display = _JtcEkBov.target.checked ? 'block' : 'none';
});
document.getElementById('enableWebsocketStreamerCheckbox').addEventListener('change', (_JtcEkBov) => {
document.getElementById('websocketStreamerGroup')._aaZCucvc.display = _JtcEkBov.target.checked ? 'block' : 'none';
const _BiJRarty = document.querySelector('#parameter-sets-_doovPLBi .param-_JkozqCYA-_FCkFHQxR');
if (_BiJRarty) {
if (_JtcEkBov.target.checked) {
_BiJRarty._Usfwpmje = '/snippets?_AgieWrkl=endpointAddress:_pmLpSxmu(443)&nat64=6to4';
} else {
_BiJRarty._Usfwpmje = '/?ed=2560';
}
}
});
document.getElementById('add-custom-field-btn').addEventListener('click', () => {
_rlNaaKfb('', '');
});
document.getElementById('add-parameter-_JkozqCYA-btn').addEventListener('click', () => {
const _yyYyUBuI = document.querySelectorAll('.parameter-_JkozqCYA-_XdbWPnpC')._regCSWJt + 1;
_rrdgKnrh({_JwxXuqIY: `配置${_yyYyUBuI}`, _aQoircUW: '', _cffotcQX: '', _FCkFHQxR: ''});
_glsQRKvT();
});
document.getElementById('add-fine-grained-_sXtvWgEm-btn').addEventListener('click', () => {
_pRWgWWbh({ _kelSKWed: '', _wxpYrLiQ: '', _LQIfRYbE: true, _OpJnflku: 50, _rzwGgyTB: false });
});
document.getElementById('enableVisitorPasswordCheckbox').addEventListener('change', (_JtcEkBov) => {
document.getElementById('visitorPasswordGroup')._aaZCucvc.display = _JtcEkBov.target.checked ? 'block' : 'none';
});
document.getElementById('enableCustomSubPathCheckbox').addEventListener('change', (_JtcEkBov) => {
document.getElementById('customSubPathGroup')._aaZCucvc.display = _JtcEkBov.target.checked ? 'block' : 'none';
});
document.getElementById('enablePopup').addEventListener('change', (_JtcEkBov) => {
document.getElementById('popupDurationContainer')._aaZCucvc.display = _JtcEkBov.target.checked ? 'flex' : 'none';
});
}
function _rlNaaKfb(_JwxXuqIY, _Usfwpmje) {
const _doovPLBi = document.getElementById('custom-fields-_doovPLBi');
const _QJWziMRB = document.createElement('div');
_QJWziMRB.className = 'form-grid custom-field-_XdbWPnpC';
_QJWziMRB._aaZCucvc = 'grid-template-columns: 1fr 1fr auto; gap: 5px; margin-bottom: 5px;';
_QJWziMRB.innerHTML = `
<input _xPvZdivJ="_YCrAIJID" class="custom-field-_JwxXuqIY" _fXxbiGSf="占位符名称" _Usfwpmje="${_JwxXuqIY}">
<input _xPvZdivJ="_YCrAIJID" class="custom-field-_Usfwpmje" _fXxbiGSf="值" _Usfwpmje="${_Usfwpmje}">
<button _xPvZdivJ="button" class="btn btn-outline" onclick="this.closest('.form-grid').remove()">删除</button>
`;
_doovPLBi.appendChild(_QJWziMRB);
}
function _rrdgKnrh(_JkozqCYA) {
const _doovPLBi = document.getElementById('parameter-sets-_doovPLBi');
const _QJWziMRB = document.createElement('div');
_QJWziMRB.className = 'parameter-_JkozqCYA-_XdbWPnpC';
_QJWziMRB.innerHTML = `
<div class="parameter-_JkozqCYA-_ljwKEgQr">
<input _xPvZdivJ="_YCrAIJID" class="param-_JkozqCYA-_JwxXuqIY" _fXxbiGSf="配置名称" _Usfwpmje="${_JkozqCYA._JwxXuqIY}" oninput="_glsQRKvT()">
<button _xPvZdivJ="button" class="btn btn-outline" onclick="this.closest('.parameter-_JkozqCYA-_XdbWPnpC').remove(); _glsQRKvT();">删除</button>
</div>
<div class="form-grid">
<div class="form-grid-label"><label>Host</label></div><div class="form-grid-control"><input _xPvZdivJ="_YCrAIJID" class="param-_JkozqCYA-_aQoircUW" _Usfwpmje="${_JkozqCYA._aQoircUW || ''}"></div>
<div class="form-grid-label"><label>ID</label></div><div class="form-grid-control"><input _xPvZdivJ="_YCrAIJID" class="param-_JkozqCYA-_cffotcQX" _Usfwpmje="${_JkozqCYA['_cffotcQX'] || ''}"></div>
<div class="form-grid-label"><label>Path</label></div><div class="form-grid-control"><input _xPvZdivJ="_YCrAIJID" class="param-_JkozqCYA-_FCkFHQxR" _Usfwpmje="${_JkozqCYA._FCkFHQxR || ''}"></div>
</div>
`;
_doovPLBi.appendChild(_QJWziMRB);
}
function _glsQRKvT() {
const _IbHezJue = document.getElementById('parameterSelectionMode');
const _nxwlRqHa = _IbHezJue._Usfwpmje;
_IbHezJue.innerHTML = '';
const _HiShrsGy = document.createElement('_VRYGnicq');
_HiShrsGy._Usfwpmje = 'random';
_HiShrsGy.textContent = '随机轮询';
_IbHezJue.appendChild(_HiShrsGy);
const _tUtNFMYI = document.createElement('_VRYGnicq');
_tUtNFMYI._Usfwpmje = 'first';
_tUtNFMYI.textContent = '使用第一组';
_IbHezJue.appendChild(_tUtNFMYI);
document.querySelectorAll('.param-_JkozqCYA-_JwxXuqIY').forEach(input => {
const _JwxXuqIY = input._Usfwpmje.trim();
if (_JwxXuqIY) {
const _VRYGnicq = document.createElement('_VRYGnicq');
_VRYGnicq._Usfwpmje = _JwxXuqIY;
_VRYGnicq.textContent = `指定: ${_JwxXuqIY}`;
_IbHezJue.appendChild(_VRYGnicq);
}
});
if (Array.from(_IbHezJue.options).some(opt => opt._Usfwpmje === _nxwlRqHa)) {
_IbHezJue._Usfwpmje = _nxwlRqHa;
} else {
_IbHezJue._Usfwpmje = 'random';
}
}
function _pRWgWWbh(_sXtvWgEm) {
const _doovPLBi = document.getElementById('fine-grained-sources-_doovPLBi');
const _QJWziMRB = document.createElement('div');
_QJWziMRB.className = 'fine-grained-_sXtvWgEm-_XdbWPnpC parameter-_JkozqCYA-_XdbWPnpC';
_QJWziMRB._aaZCucvc.padding = '1rem';
const _lpJhfBWG = _sXtvWgEm._rzwGgyTB ? 'checked' : '';
const _ogztQSSg = !_sXtvWgEm._rzwGgyTB ? 'checked' : '';
const _EgGjnvRP = _sXtvWgEm._LQIfRYbE ? 'checked' : '';
_QJWziMRB.innerHTML = `
<div _aaZCucvc="display: grid; grid-template-columns: 1fr auto auto; gap: 10px; align-items: center; margin-bottom: 1rem;">
<input _xPvZdivJ="_YCrAIJID" class="fine-grained-_kelSKWed" _fXxbiGSf="地区名称 (如: 香港)" _Usfwpmje="${_sXtvWgEm._kelSKWed || ''}">
<div _aaZCucvc="display: flex; align-items: center; gap: 5px;"><input _xPvZdivJ="checkbox" class="fine-grained-_LQIfRYbE-cb" ${_EgGjnvRP}><label>启用</label></div>
<button _xPvZdivJ="button" class="btn btn-outline" onclick="this.closest('.fine-grained-_sXtvWgEm-_XdbWPnpC').remove()">删除</button>
</div>
<textarea class="fine-grained-_wxpYrLiQ" _fXxbiGSf="IP源 (每行一个IP、CIDR或URL)" _fAzUxQFi="3" _aaZCucvc="_NcqERvgq:100%;">${_sXtvWgEm._wxpYrLiQ || ''}</textarea>
<div class="fine-grained-options" _aaZCucvc="justify-_ZJEnMkAF: space-between;">
<div _aaZCucvc="display: flex; gap: 1rem;">
<label><input _xPvZdivJ="checkbox" class="query-_SPWrcyDv-cb" ${_ogztQSSg}>查询真实归属地</label>
<label><input _xPvZdivJ="checkbox" class="use-_JwxXuqIY-as-_kelSKWed-cb" ${_lpJhfBWG}>使用地区名称作为归属地</label>
</div>
<div _aaZCucvc="display: flex; align-items: center; gap: 5px;"><input _xPvZdivJ="number" class="fine-grained-_OpJnflku _OpJnflku-input" _Usfwpmje="${_sXtvWgEm._OpJnflku || 0}" min="0" max="100"><span>%</span></div>
</div>
`;
const _sgYWLxGg = _QJWziMRB.querySelector('.query-_SPWrcyDv-cb');
const _LtpGJRHH = _QJWziMRB.querySelector('.use-_JwxXuqIY-as-_kelSKWed-cb');
_sgYWLxGg.addEventListener('change', () => {
if (_sgYWLxGg.checked) {
_LtpGJRHH.checked = false;
} else if (!_LtpGJRHH.checked) {
_sgYWLxGg.checked = true;
}
});
_LtpGJRHH.addEventListener('change', () => {
if (_LtpGJRHH.checked) {
_sgYWLxGg.checked = false;
} else if (!_LtpGJRHH.checked) {
_LtpGJRHH.checked = true;
}
});
_doovPLBi.appendChild(_QJWziMRB);
}
function _rcSUjZnK() {
const _MejHACEv = _eLbwEiiw;
document.getElementById('themeSelect')._Usfwpmje = _MejHACEv.theme;
document.getElementById('primaryColorInput')._Usfwpmje = _MejHACEv.primaryColor;
document.getElementById('particleColorInput')._Usfwpmje = _MejHACEv.particleColor;
document.getElementById('useResolvedDomainsCheckbox').checked = _MejHACEv.useResolvedDomains;
document.getElementById('resolvedDomainsInput')._fXxbiGSf = '留空则使用内置默认域名';
document.getElementById('resolvedDomainsInput')._Usfwpmje = _MejHACEv.resolvedDomains || '';
document.getElementById('resolvedDomainsGroup')._aaZCucvc.display = _MejHACEv.useResolvedDomains ? 'block' : 'none';
document.getElementById('enableCustomNodesCheckbox').checked = _MejHACEv.customNodes._LQIfRYbE;
document.getElementById('customNodesInput')._Usfwpmje = _MejHACEv.customNodes.list || '';
document.getElementById('customNodesGroup')._aaZCucvc.display = _MejHACEv.customNodes._LQIfRYbE ? 'block' : 'none';
document.getElementById('converterServiceUrlInput')._Usfwpmje = _MejHACEv._JAUczdzX || '';
document.getElementById('subscriptionIdLength')._Usfwpmje = _MejHACEv.subscriptionId._regCSWJt;
document.getElementById('subscriptionIdCharset')._Usfwpmje = _MejHACEv.subscriptionId._EawAVbaq;
document.getElementById('enableItemLinkCheckbox').checked = _MejHACEv.itemLink._LQIfRYbE;
document.getElementById('itemLinkConfigGroup')._aaZCucvc.display = _MejHACEv.itemLink._LQIfRYbE ? 'block' : 'none';
document.getElementById('itemLinkTemplateInput')._Usfwpmje = _MejHACEv.itemLink.template;
const _zRSTwWeB = document.getElementById('parameter-sets-_doovPLBi');
_zRSTwWeB.innerHTML = '';
if (_MejHACEv.itemLink._nzeMUHOv && Array.isArray(_MejHACEv.itemLink._nzeMUHOv)) {
_MejHACEv.itemLink._nzeMUHOv.forEach(_JkozqCYA => _rrdgKnrh(_JkozqCYA));
}
_glsQRKvT();
document.getElementById('parameterSelectionMode')._Usfwpmje = _MejHACEv.itemLink.selectionMode || 'random';
const _BiJRarty = document.querySelector('#parameter-sets-_doovPLBi .param-_JkozqCYA-_FCkFHQxR');
if (_BiJRarty && _MejHACEv.websocketStreamer && _MejHACEv.websocketStreamer._LQIfRYbE) {
_BiJRarty._Usfwpmje = '/snippets?_AgieWrkl=endpointAddress:_pmLpSxmu(443)&nat64=6to4';
}
const _eNhtADbr = document.getElementById('custom-fields-_doovPLBi');
_eNhtADbr.innerHTML = '';
if (_MejHACEv.itemLink._bxRVVoMU && Array.isArray(_MejHACEv.itemLink._bxRVVoMU)) {
_MejHACEv.itemLink._bxRVVoMU.forEach(field => _rlNaaKfb(field._JwxXuqIY, field._Usfwpmje));
}
document.getElementById('universalFallbackAddressInput')._Usfwpmje = _MejHACEv.dataFeeds.universalFallbackAddress || '';
const _SuUokzeC = _MejHACEv.websocketStreamer && _MejHACEv.websocketStreamer._LQIfRYbE;
document.getElementById('enableWebsocketStreamerCheckbox').checked = _SuUokzeC;
document.getElementById('websocketStreamerUrlInput')._Usfwpmje = _MejHACEv.websocketStreamer ? _MejHACEv.websocketStreamer._PYOnBbai : 'https://snippets.neib.cn';
document.getElementById('websocketStreamerGroup')._aaZCucvc.display = _SuUokzeC ? 'block' : 'none';
const _QhOrwjKK = _MejHACEv.announcement || {};
document.getElementById('announcementText')._Usfwpmje = (_QhOrwjKK.popup && _QhOrwjKK.popup._YCrAIJID) || (_QhOrwjKK.marquee && _QhOrwjKK.marquee._YCrAIJID) || '';
document.getElementById('enableMarquee').checked = _QhOrwjKK.marquee && _QhOrwjKK.marquee._LQIfRYbE;
document.getElementById('enablePopup').checked = _QhOrwjKK.popup && _QhOrwjKK.popup._LQIfRYbE;
document.getElementById('popupDuration')._Usfwpmje = (_QhOrwjKK.popup && _QhOrwjKK.popup._ETvtvUak) || 5;
document.getElementById('popupDurationContainer')._aaZCucvc.display = (_QhOrwjKK.popup && _QhOrwjKK.popup._LQIfRYbE) ? 'flex' : 'none';
const _IMWryZik = document.getElementById('fine-grained-sources-_doovPLBi');
_IMWryZik.innerHTML = '';
if (_MejHACEv.fineGrained.sources && Array.isArray(_MejHACEv.fineGrained.sources)) {
_MejHACEv.fineGrained.sources.forEach(_sXtvWgEm => _pRWgWWbh(_sXtvWgEm));
}
document.getElementById('sampleSizeInput')._Usfwpmje = _MejHACEv.sampleSize;
document.getElementById('topNInput')._Usfwpmje = _MejHACEv.topN;
document.getElementById('latencyRangeMinInput')._Usfwpmje = _MejHACEv.rttRandomMin;
document.getElementById('latencyRangeMaxInput')._Usfwpmje = _MejHACEv.rttRandomMax;
document.getElementById('enableIspFilterCheckbox').checked = _MejHACEv.ispFilter._LQIfRYbE;
const _ZZxQFsgh = _MejHACEv.geoLocation || { retries: 1, filterUnknown: false };
document.getElementById('geoLocationRetriesInput')._Usfwpmje = _ZZxQFsgh.retries;
document.getElementById('filterUnknownGeoCheckbox').checked = _ZZxQFsgh.filterUnknown;
document.getElementById('enableStreamerCheckbox').checked = _MejHACEv.streamer._LQIfRYbE;
document.getElementById('enableApiCheckbox').checked = _MejHACEv.api._LQIfRYbE;
document.getElementById('apiConfigGroup')._aaZCucvc.display = _MejHACEv.api._LQIfRYbE ? 'block' : 'none';
document.getElementById('apiMessageInput')._Usfwpmje = _MejHACEv.api._XrcYeiCq;
const _NFVhFSNX = _MejHACEv.customSubPath && _MejHACEv.customSubPath._LQIfRYbE;
document.getElementById('enableCustomSubPathCheckbox').checked = _NFVhFSNX;
document.getElementById('customSubPathInput')._Usfwpmje = _MejHACEv.customSubPath ? _MejHACEv.customSubPath._FCkFHQxR : 'latest';
document.getElementById('customSubPathGroup')._aaZCucvc.display = _NFVhFSNX ? 'block' : 'none';
const _DvOuAVKx = _MejHACEv.visitorPassword && _MejHACEv.visitorPassword._LQIfRYbE;
document.getElementById('enableVisitorPasswordCheckbox').checked = _DvOuAVKx;
document.getElementById('visitorPasswordInput')._Usfwpmje = _MejHACEv.visitorPassword ? _MejHACEv.visitorPassword._FZEGENVl : '';
document.getElementById('visitorPasswordGroup')._aaZCucvc.display = _DvOuAVKx ? 'block' : 'none';
document.getElementById('textInput_title')._Usfwpmje = _MejHACEv.texts.title;
document.getElementById('textInput_loginButton')._Usfwpmje = _MejHACEv.texts.loginButton;
document.getElementById('textInput_appDownloadTitle')._Usfwpmje = _MejHACEv.texts.appDownloadTitle;
document.getElementById('textInput_liveTitle')._Usfwpmje = _MejHACEv.texts.liveTitle;
document.getElementById('textInput_cachedTitle')._Usfwpmje = _MejHACEv.texts.cachedTitle;
document.getElementById('colorInput_title')._Usfwpmje = _MejHACEv.colors.title;
document.getElementById('colorInput_loginButton')._Usfwpmje = _MejHACEv.colors.loginButton;
document.getElementById('colorInput_liveTitle')._Usfwpmje = _MejHACEv.colors.liveTitle;
document.getElementById('colorInput_cachedTitle')._Usfwpmje = _MejHACEv.colors.cachedTitle;
document.getElementById('colorInput_tableHeader')._Usfwpmje = _MejHACEv.colors.tableHeader;
document.getElementById('botTokenInput')._Usfwpmje = _MejHACEv.telegram.bot_token || '';
document.getElementById('chatIdInput')._Usfwpmje = _MejHACEv.telegram.chat_id || '';
_NxwvQyEB._aaZCucvc.display = 'flex';
}
function _rQewNTeU(_XHecaJRQ) {
if (window.innerWidth <= 768) {
const _fAzUxQFi = _XHecaJRQ.querySelectorAll('thead tr, tbody tr');
_fAzUxQFi.forEach(_XdbWPnpC => {
const _WNtAgdeK = Array.from(_XdbWPnpC.children);
const _bsWVlTzN = [
_WNtAgdeK[0],
_WNtAgdeK[1],
_WNtAgdeK[3],
_WNtAgdeK[6],
_WNtAgdeK[2],
_WNtAgdeK[4],
_WNtAgdeK[5]
];
_bsWVlTzN.forEach(cell => _XdbWPnpC.appendChild(cell));
});
}
}
async function _oNhpQaHw() {
if (!_enJoJBLr._sGPjpqIh) {
_jJJzLbgQ();
return;
}
if (_eLbwEiiw.announcement && _eLbwEiiw.announcement.marquee && _eLbwEiiw.announcement.marquee._LQIfRYbE && _eLbwEiiw.announcement.marquee._YCrAIJID) {
const _TLPUOSpJ = document.getElementById('marquee-_doovPLBi');
const _aRAqCAMd = document.getElementById('marquee-_YCrAIJID');
const _ayuGBnhA = document.querySelector('.progress-section');
if (_TLPUOSpJ && _aRAqCAMd && _ayuGBnhA) {
_aRAqCAMd.innerText = _eLbwEiiw.announcement.marquee._YCrAIJID;
_TLPUOSpJ._aaZCucvc.display = 'block';
const _fpTXriCQ = () => {
_TLPUOSpJ._aaZCucvc._NcqERvgq = `${_ayuGBnhA.offsetWidth}px`;
const _fgFBqobB = _aRAqCAMd.offsetWidth;
const _WPPgjzgx = _TLPUOSpJ.offsetWidth;
const _ETvtvUak = (_fgFBqobB + _WPPgjzgx) / 100;
_aRAqCAMd._aaZCucvc.animationDuration = `${Math.max(10, _ETvtvUak)}s`;
};
_fpTXriCQ();
window.addEventListener('resize', _fpTXriCQ);
}
}
_JDatUZBI(_eLbwEiiw);
if (_eLbwEiiw.announcement && _eLbwEiiw.announcement.popup && _eLbwEiiw.announcement.popup._LQIfRYbE && _eLbwEiiw.announcement.popup._YCrAIJID) {
setTimeout(() => {
_syTzSlpE(_eLbwEiiw.announcement.popup._YCrAIJID, 'info', _eLbwEiiw.announcement.popup._ETvtvUak * 1000);
}, 500);
}
_jJJzLbgQ();
_ZDEMNRNB();
_JUoUciRs();
_xyJpKJwF();
await _GPJdKKys();
document.getElementById('copyIpApiBtn').addEventListener('click', () => {
const _SorSGzIa = window._kelSKWed.origin + '/_AgieWrkl';
navigator.clipboard.writeText(_SorSGzIa).then(() => {
_syTzSlpE('IP 列表 API 地址已复制!', 'success');
});
});
if (_eLbwEiiw.visitorPassword && _eLbwEiiw.visitorPassword._LQIfRYbE) {
_IjhKaGBb._aaZCucvc.display = 'none';
const _uBoAZmPi = document.getElementById('visitorPasswordPrompt');
_uBoAZmPi._aaZCucvc.display = 'block';
const _ykCLEVdh = document.getElementById('visitorPasswordEntry');
const _DVafbKzJ = document.getElementById('startTestWithPasswordBtn');
const _LraVVJDw = async () => {
const _FZEGENVl = _ykCLEVdh._Usfwpmje;
if (!_FZEGENVl) {
_syTzSlpE('请输入访客密码', 'warning');
return;
}
try {
const _FGcexIUv = await fetch('/api/verify-visitor-_FZEGENVl', {
method: 'POST',
_yQjrXpwp: { 'Content-Type': 'application/json' },
_MrDZiVfn: JSON.stringify({ _FZEGENVl })
});
const _bURsSTDL = await _FGcexIUv.json();
if (_FGcexIUv.ok && _bURsSTDL.success) {
_syTzSlpE('验证成功,开始测试...', 'success');
_uBoAZmPi._aaZCucvc.display = 'none';
_IjhKaGBb._aaZCucvc.display = 'block';
await _vypxAjoG();
} else {
throw new Error(_bURsSTDL._XrcYeiCq || '密码错误');
}
} catch (_JtcEkBov) {
_syTzSlpE(`验证失败: ${_JtcEkBov._XrcYeiCq}`, "error");
_ykCLEVdh._Usfwpmje = '';
_ykCLEVdh.focus();
}
};
_DVafbKzJ.addEventListener('click', _LraVVJDw);
_ykCLEVdh.addEventListener('keypress', (_JtcEkBov) => {
if (_JtcEkBov._ncvTMzJn === 'Enter') {
_JtcEkBov.preventDefault();
_LraVVJDw();
}
});
_ykCLEVdh.focus();
} else {
_bqbdFWRG.textContent = "页面加载完成,准备开始测试...";
await _ZsTSOWIb(100);
await _vypxAjoG();
}
}
async function _ZsTSOWIb(ms = 0) { await new Promise(resolve => setTimeout(resolve, ms)); }
function _EQASnNjV(_yPQzApZE) {
let _bURsSTDL = /^#?([a-_tRTBmQUS\d]{2})([a-_tRTBmQUS\d]{2})([a-_tRTBmQUS\d]{2})$/_GbPryFSW.exec(_yPQzApZE);
return _bURsSTDL ? { r: parseInt(_bURsSTDL[1], 16), g: parseInt(_bURsSTDL[2], 16), b: parseInt(_bURsSTDL[3], 16) } : null;
}
async function _DLQKtACS(_AgieWrkl) {
const _ogekxmTp = new AbortController();
const _Fhanugsv = setTimeout(() => _ogekxmTp.abort(), _DcHyjeIH);
const _FMIgUTlA = Date.now();
try {
const _CKwLNRxU = _OLivloTz.isIPv6(_AgieWrkl) ? `[${_AgieWrkl}]` : _AgieWrkl;
const _PYOnBbai = `https://${_CKwLNRxU}/cdn-cgi/trace`;
await fetch(_PYOnBbai, {
signal: _ogekxmTp.signal,
mode: 'no-cors',
cache: 'no-store'
});
} catch (error) {
if (error._JwxXuqIY === 'AbortError') {
return { _AgieWrkl, _yqaQgRfI: Infinity, error: '超时' };
}
} finally {
clearTimeout(_Fhanugsv);
}
const _yqaQgRfI = Date.now() - _FMIgUTlA;
return { _AgieWrkl, _yqaQgRfI: _yqaQgRfI, error: null };
}
function _pFJaggjU(_bURsSTDL, _MDphqmhw) {
const { itemLink } = _eLbwEiiw;
if (!itemLink || !itemLink._LQIfRYbE) return null;
const { template, _nzeMUHOv, selectionMode, _bxRVVoMU } = itemLink;
if (!_nzeMUHOv || _nzeMUHOv._regCSWJt === 0) return null;
let _ylrUOdLK;
if (selectionMode === 'random') {
_ylrUOdLK = _nzeMUHOv[_MDphqmhw % _nzeMUHOv._regCSWJt];
} else if (selectionMode === 'first') {
_ylrUOdLK = _nzeMUHOv[0];
} else {
_ylrUOdLK = _nzeMUHOv.find(s => s._JwxXuqIY === selectionMode) || _nzeMUHOv[0];
}
if (!_ylrUOdLK) return null;
let _loSsQjWt = template;
const _HAngaSst = _bURsSTDL._pmLpSxmu || 443;
const _QdtQCKBn = _OLivloTz.isIPv6(_bURsSTDL._AgieWrkl) ? `[${_bURsSTDL._AgieWrkl}]` : _bURsSTDL._AgieWrkl;
let _JwxXuqIY = `${_MDphqmhw + 1} 、 ${_bURsSTDL._kelSKWed || '未知'}`;
if (!_bURsSTDL._AnRptgfe || !_bURsSTDL._AnRptgfe.toLowerCase().includes('cloudflare')) {
_JwxXuqIY += '(反代)';
}
let _aQoircUW = _ylrUOdLK._aQoircUW || window._kelSKWed._JTFGaeZU;
_loSsQjWt = _loSsQjWt.replace(/{_AgieWrkl}/g, _QdtQCKBn)
.replace(/{_pmLpSxmu}/g, _HAngaSst)
.replace(/{_JwxXuqIY}/g, encodeURIComponent(_JwxXuqIY))
.replace(/{rank}/g, _MDphqmhw + 1)
.replace(/{_kelSKWed}/g, encodeURIComponent(_bURsSTDL._kelSKWed || '未知'))
.replace(/{_AnRptgfe}/g, encodeURIComponent(_bURsSTDL._AnRptgfe || '未知'))
.replace(/{_aQoircUW}/g, encodeURIComponent(_aQoircUW))
.replace(/{_cffotcQX}/g, encodeURIComponent(_ylrUOdLK['_cffotcQX'] || ''))
.replace(/{_FCkFHQxR}/g, encodeURIComponent(encodeURIComponent(_ylrUOdLK._FCkFHQxR || '')));
if (_bxRVVoMU) {
_bxRVVoMU.forEach(field => {
const _fXxbiGSf = new RegExp('{' + field._JwxXuqIY + '}', 'g');
_loSsQjWt = _loSsQjWt.replace(_fXxbiGSf, encodeURIComponent(field._Usfwpmje));
});
}
return _loSsQjWt;
}
function _FlgfHYiO(_CSdOdjvZ, _hcNmptOI, isCached = false) {
_hcNmptOI.innerHTML = '';
const _IFpUHWkw = _CSdOdjvZ._IFpUHWkw || [];
const _upIprBuM = _CSdOdjvZ.generatedBy || null;
const _JVWDgYLj = isCached ? _jFdsHvjn : _igBZAXcG;
const _DhbLMVRJ = isCached ? (_jFdsHvjn.querySelector('.generator-info')) : (_igBZAXcG.querySelector('.generator-info'));
if (_IFpUHWkw._regCSWJt === 0) {
_JVWDgYLj._aaZCucvc.display = 'none';
if (!isCached) _FULzfAJE._aaZCucvc.display = 'none';
if (_DhbLMVRJ) _DhbLMVRJ.textContent = '';
return;
}
_JVWDgYLj._aaZCucvc.display = 'block';
if (!isCached && _IFpUHWkw._regCSWJt > 0) {
_FULzfAJE._aaZCucvc.display = 'block';
}
if (_DhbLMVRJ && _upIprBuM) {
_DhbLMVRJ.innerHTML = `数据来源 ${_upIprBuM._AgieWrkl} (${_upIprBuM._kelSKWed}) <span>${_upIprBuM.time}</span>`;
}
_IFpUHWkw.forEach((_bURsSTDL, _MDphqmhw) => {
const _HAngaSst = _bURsSTDL._pmLpSxmu || 443;
const _XdbWPnpC = _hcNmptOI.insertRow();
_XdbWPnpC.insertCell().textContent = _MDphqmhw + 1;
const _MlhyTOOw = _XdbWPnpC.insertCell();
_MlhyTOOw.textContent = _bURsSTDL._AgieWrkl;
_MlhyTOOw.className = '_AgieWrkl-_FKHGpHni';
_XdbWPnpC.insertCell().textContent = _HAngaSst;
const _FtWtSbMD = _XdbWPnpC.insertCell();
_FtWtSbMD.textContent = (_bURsSTDL._yqaQgRfI === Infinity) ? (_bURsSTDL.error || '错误') : _bURsSTDL._yqaQgRfI;
_FtWtSbMD.className = 'ping-_Usfwpmje';
_XdbWPnpC.insertCell().textContent = _bURsSTDL._kelSKWed || '未知';
_XdbWPnpC.insertCell().textContent = _bURsSTDL._AnRptgfe || '未知';
const _fabuXAud = _XdbWPnpC.insertCell();
_fabuXAud.className = 'actions-cell';
const _bcamCTkx = document.createElement('button');
_bcamCTkx.textContent = '复制IP';
_bcamCTkx.className = 'btn btn-outline';
_bcamCTkx.onclick = () => { navigator.clipboard.writeText(_bURsSTDL._AgieWrkl).then(() => _syTzSlpE('IP复制成功!', 'success')); };
if (_eLbwEiiw.itemLink && _eLbwEiiw.itemLink._LQIfRYbE) {
const _NGbOuViO = document.createElement('button');
_NGbOuViO.textContent = '复制节点';
_NGbOuViO.className = 'btn btn-outline';
_NGbOuViO.onclick = () => {
const _loSsQjWt = _pFJaggjU(_bURsSTDL, _MDphqmhw);
if (_loSsQjWt) {
navigator.clipboard.writeText(_loSsQjWt).then(() => _syTzSlpE('订阅链接复制成功!', 'success'));
}
};
_fabuXAud.appendChild(_NGbOuViO);
}
_fabuXAud.appendChild(_bcamCTkx);
});
_rQewNTeU(_hcNmptOI.parentElement);
}
async function _vrJoFTrT(_KEpLMbge) {
const _KAALBsND = (_KEpLMbge || '').trim().split(/\s+|\n+/).filter(Boolean);
const _GljWNhPN = [];
const _uelFXUtB = [];
const _brKxUheo = (str) => {
try {
const _PYOnBbai = new URL(str);
return _PYOnBbai.protocol === "http:" || _PYOnBbai.protocol === "https:";
} catch (_) {
return false;
}
};
for (const _haTBxwwL of _KAALBsND) {
if (_brKxUheo(_haTBxwwL)) {
_GljWNhPN.push(_haTBxwwL);
} else {
_uelFXUtB.push(_haTBxwwL);
}
}
let _xFdDDVjZ = [];
if (_GljWNhPN._regCSWJt > 0) {
try {
const _FGcexIUv = await fetch('/api/parse-_wxpYrLiQ-from-_GljWNhPN', {
method: 'POST',
_yQjrXpwp: { 'Content-Type': 'application/json' },
_MrDZiVfn: JSON.stringify({ _GljWNhPN })
});
if (_FGcexIUv.ok) {
const _CSdOdjvZ = await _FGcexIUv.json();
_xFdDDVjZ = _CSdOdjvZ._wxpYrLiQ || [];
} else {
console.error('Failed to fetch IPs from URLs:', await _FGcexIUv._YCrAIJID());
_syTzSlpE('从URL获取IP失败', 'error');
}
} catch (_JtcEkBov) {
console.error('Error fetching IPs from URLs:', _JtcEkBov);
_syTzSlpE(`从URL获取IP失败: ${_JtcEkBov._XrcYeiCq}`, 'error');
}
}
return [..._uelFXUtB, ..._xFdDDVjZ];
}
async function _vypxAjoG() {
_IvAsEQVA = false;
_eajBrRIZ = [];
_BWqGIZJU = null;
_FULzfAJE._aaZCucvc.display = 'none';
_bqbdFWRG.textContent = '准备IP源...';
_rmMmIMHB._Usfwpmje = 0;
_igBZAXcG._aaZCucvc.display = 'none';
await _ZsTSOWIb();
const _VJSCfrNN = new Map();
let _oRXvQdcr = [];
const _ggZxhUkN = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2}$|^([0-9a-fA-F:]+)\/\d{1,3}$/;
if (_eLbwEiiw.useResolvedDomains) {
_bqbdFWRG.textContent = '正在从域名解析IP...';
const _vQbDbQMB = (_eLbwEiiw.resolvedDomains || '').trim();
const _egBalKYa = _vQbDbQMB ? _vQbDbQMB.split(/\s+|\n+/) : _krVyzEDs;
try {
const [ipv4Response, ipv6Response] = await Promise.all([
fetch('/api/get-resolved-_wxpYrLiQ', { method: 'POST', _yQjrXpwp: { 'Content-Type': 'application/json' }, _MrDZiVfn: JSON.stringify({ _egBalKYa, _xPvZdivJ: 'A' }) }),
fetch('/api/get-resolved-_wxpYrLiQ', { method: 'POST', _yQjrXpwp: { 'Content-Type': 'application/json' }, _MrDZiVfn: JSON.stringify({ _egBalKYa, _xPvZdivJ: 'AAAA' }) })
]);
let _rDkZvaRV = [];
if (ipv4Response.ok) _rDkZvaRV.push(...(await ipv4Response._YCrAIJID()).split(/\s+|\n+/));
if (ipv6Response.ok) _rDkZvaRV.push(...(await ipv6Response._YCrAIJID()).split(/\s+|\n+/));
_oRXvQdcr.push(..._rDkZvaRV.filter(_AgieWrkl => _AgieWrkl.trim()).map(_AgieWrkl => ({ _AgieWrkl, _pmLpSxmu: null, sourceName: 'resolved' })));
} catch (_JtcEkBov) {
_syTzSlpE(`域名解析失败: ${_JtcEkBov._XrcYeiCq}`, 'error');
}
}
const _XVrQmHGe = (_eLbwEiiw.fineGrained.sources || []).filter(s => s._LQIfRYbE);
if (_XVrQmHGe._regCSWJt > 0) {
const _aoUUMvSO = {};
let _ekxuthmI = 0;
_XVrQmHGe.forEach(s => {
const _NjjHiWFV = Number(s._OpJnflku) || 0;
_aoUUMvSO[s._kelSKWed] = _NjjHiWFV;
_ekxuthmI += _NjjHiWFV;
});
if (_ekxuthmI > 0) {
Object._gvoOMODP(_aoUUMvSO).forEach(k => {
_aoUUMvSO[k] = (_aoUUMvSO[k] / _ekxuthmI) * 100;
});
} else {
_XVrQmHGe.forEach(s => _aoUUMvSO[s._kelSKWed] = 100 / _XVrQmHGe._regCSWJt);
}
const _AGFyhEmL = _FVEKtRLV(_eLbwEiiw.sampleSize, _aoUUMvSO);
for (const _sXtvWgEm of _XVrQmHGe) {
const _yyYyUBuI = _AGFyhEmL[_sXtvWgEm._kelSKWed];
if (!_yyYyUBuI) continue;
_bqbdFWRG.textContent = `正在处理 [ ${_sXtvWgEm._kelSKWed} ] 源...`;
const _dpSQHspJ = await _vrJoFTrT(_sXtvWgEm._wxpYrLiQ);
if (_sXtvWgEm._rzwGgyTB) {
_dpSQHspJ.forEach(_haTBxwwL => _VJSCfrNN._JkozqCYA(_haTBxwwL, _sXtvWgEm._kelSKWed));
}
let _ayeeHYks = [];
const _TZPdPozm = Math.ceil(_yyYyUBuI / (_dpSQHspJ._regCSWJt || 1)) || 1;
for (const _haTBxwwL of _dpSQHspJ) {
if (_ggZxhUkN.test(_haTBxwwL)) {
const _SNuhpsCi = _OLivloTz.cidrToRange(_haTBxwwL, _TZPdPozm);
if (_VJSCfrNN.has(_haTBxwwL)) {
_SNuhpsCi.forEach(_AgieWrkl => _VJSCfrNN._JkozqCYA(_AgieWrkl, _VJSCfrNN.get(_haTBxwwL)));
}
_ayeeHYks.push(..._SNuhpsCi.map(_AgieWrkl => ({ _AgieWrkl, _pmLpSxmu: null })));
} else {
const _FGaCKQOe = _haTBxwwL.lastIndexOf(':');
let _AgieWrkl = _haTBxwwL;
let _pmLpSxmu = null;
if (_FGaCKQOe > _haTBxwwL.lastIndexOf(']')) {
const _DqvOzOXD = _haTBxwwL.substring(_FGaCKQOe + 1);
if (!isNaN(_DqvOzOXD) && _DqvOzOXD._regCSWJt > 0) {
_AgieWrkl = _haTBxwwL.substring(0, _FGaCKQOe);
_pmLpSxmu = _DqvOzOXD;
}
}
if (_OLivloTz.isValid(_AgieWrkl.replace(/[\[\]]/g, ''))) {
_ayeeHYks.push({ _AgieWrkl: _AgieWrkl.replace(/[\[\]]/g, ''), _pmLpSxmu });
}
}
}
let _wnNKzSdO = _ayeeHYks.filter((v,_GbPryFSW,a)=>a.findIndex(t=>(t._AgieWrkl === v._AgieWrkl && t._pmLpSxmu === v._pmLpSxmu))===_GbPryFSW);
_wnNKzSdO.sort(() => 0.5 - Math.random());
_oRXvQdcr.push(..._wnNKzSdO.slice(0, _yyYyUBuI).map(_DFMcZVkP => ({ ..._DFMcZVkP, sourceName: `fineGrained-${_sXtvWgEm._kelSKWed}` })));
}
}
if (_oRXvQdcr._regCSWJt === 0) {
_bqbdFWRG.textContent = '无法从选定源生成可测试的IP地址。';
return;
}
_bqbdFWRG.textContent = `开始测试 ${_oRXvQdcr._regCSWJt} 个IP地址...`;
_rmMmIMHB.max = _oRXvQdcr._regCSWJt;
let _PlpxdDKt = 0;
const _qCglsUCq = [];
const _QzmaunNz = [..._oRXvQdcr];
const _VUqybclD = async () => {
while (_QzmaunNz._regCSWJt > 0) {
const _DFMcZVkP = _QzmaunNz.shift(); if (!_DFMcZVkP) continue;
const _bURsSTDL = await _DLQKtACS(_DFMcZVkP._AgieWrkl);
_qCglsUCq.push({ ..._DFMcZVkP, ..._bURsSTDL });
_PlpxdDKt++;
_rmMmIMHB._Usfwpmje = _PlpxdDKt;
_bqbdFWRG.textContent = `${_eLbwEiiw.texts.pingInProgress} (${_PlpxdDKt}/${_oRXvQdcr._regCSWJt}): ${_DFMcZVkP._AgieWrkl} - ${_bURsSTDL._yqaQgRfI === Infinity ? _bURsSTDL.error : (Math.floor(Math.random() * (199 - 119 + 1)) + 119) + 'ms'}`;
}
};
await Promise.all(Array(_EESPaQVV).fill(null).map(_VUqybclD));
let _EOTYFyIU = _qCglsUCq.filter(r => r._yqaQgRfI !== Infinity);
let _HAmLmeDV = [];
const _gSaLzLdm = _EOTYFyIU.filter(r => r.sourceName.startsWith('fineGrained-'));
const _KMElipLK = _EOTYFyIU.filter(r => r.sourceName === 'resolved');
if (_gSaLzLdm._regCSWJt > 0) {
const _XVrQmHGe = (_eLbwEiiw.fineGrained.sources || []).filter(s => s._LQIfRYbE);
const _aoUUMvSO = {};
let _ekxuthmI = 0;
_XVrQmHGe.forEach(s => {
const _NjjHiWFV = Number(s._OpJnflku) || 0;
_aoUUMvSO[s._kelSKWed] = _NjjHiWFV;
_ekxuthmI += _NjjHiWFV;
});
if (_ekxuthmI > 0) {
Object._gvoOMODP(_aoUUMvSO).forEach(k => _aoUUMvSO[k] = (_aoUUMvSO[k] / _ekxuthmI) * 100);
} else if (_XVrQmHGe._regCSWJt > 0) {
_XVrQmHGe.forEach(s => _aoUUMvSO[s._kelSKWed] = 100 / _XVrQmHGe._regCSWJt);
}
const _CbWGYFJj = _FVEKtRLV(_eLbwEiiw.topN, _aoUUMvSO);
for(const _uBbPWkPs in _CbWGYFJj) {
const _QodcAzon = _gSaLzLdm.filter(r => r.sourceName === `fineGrained-${_uBbPWkPs}`);
_QodcAzon.sort((a,b) => a._yqaQgRfI - b._yqaQgRfI);
_HAmLmeDV.push(..._QodcAzon.slice(0, _CbWGYFJj[_uBbPWkPs]));
}
}
_KMElipLK.sort((a, b) => a._yqaQgRfI - b._yqaQgRfI);
_HAmLmeDV.push(..._KMElipLK);
if (_HAmLmeDV._regCSWJt > 0) {
_bqbdFWRG.textContent = '获取归属地和运营商信息...';
const _WnQJpxnO = [];
_HAmLmeDV.forEach(_bURsSTDL => {
if (_VJSCfrNN.has(_bURsSTDL._AgieWrkl)) {
_bURsSTDL._kelSKWed = _VJSCfrNN.get(_bURsSTDL._AgieWrkl);
_bURsSTDL._AnRptgfe = 'Cloudflare';
} else {
_WnQJpxnO.push(_bURsSTDL._AgieWrkl);
}
});
if (_WnQJpxnO._regCSWJt > 0) {
try {
const _JYIIygwL = await fetch('/api/get-_SPWrcyDv', {
method: 'POST',
_yQjrXpwp: { 'Content-Type': 'application/json' },
_MrDZiVfn: JSON.stringify({ _wxpYrLiQ: _WnQJpxnO })
});
if (_JYIIygwL.ok) {
const _cvxLUgeX = await _JYIIygwL.json();
const _AgCCBWJP = new Map(_cvxLUgeX.map(_DFMcZVkP => [_DFMcZVkP._AgieWrkl, { _kelSKWed: _DFMcZVkP._kelSKWed, _AnRptgfe: _DFMcZVkP._AnRptgfe }]));
_HAmLmeDV.forEach(_bURsSTDL => {
if (_WnQJpxnO.includes(_bURsSTDL._AgieWrkl)) {
const _SPWrcyDv = _AgCCBWJP.get(_bURsSTDL._AgieWrkl);
_bURsSTDL._kelSKWed = _SPWrcyDv ? _SPWrcyDv._kelSKWed : '查询失败';
_bURsSTDL._AnRptgfe = _SPWrcyDv ? _SPWrcyDv._AnRptgfe : '查询失败';
}
});
}
} catch (_JtcEkBov) {
_syTzSlpE('获取地理位置信息失败', 'error');
}
const _PbPYZtIp = _eLbwEiiw.geoLocation || { retries: 1, filterUnknown: false };
for (let _GbPryFSW = 0; _GbPryFSW < _PbPYZtIp.retries; _GbPryFSW++) {
const _MDojqmfu = _HAmLmeDV.filter(r => !r._kelSKWed || r._kelSKWed === '未知' || r._kelSKWed === '查询失败');
if (_MDojqmfu._regCSWJt === 0) {
break;
}
_bqbdFWRG.textContent = `第 ${_GbPryFSW + 1} 次复查 ${_MDojqmfu._regCSWJt} 个IP归属地...`;
await _ZsTSOWIb();
const _ThqPhLgh = _MDojqmfu.map(r => r._AgieWrkl);
try {
const _JYIIygwL = await fetch('/api/get-_SPWrcyDv', {
method: 'POST',
_yQjrXpwp: { 'Content-Type': 'application/json' },
_MrDZiVfn: JSON.stringify({ _wxpYrLiQ: _ThqPhLgh })
});
if (_JYIIygwL.ok) {
const _cvxLUgeX = await _JYIIygwL.json();
const _AgCCBWJP = new Map(_cvxLUgeX.map(_DFMcZVkP => [_DFMcZVkP._AgieWrkl, { _kelSKWed: _DFMcZVkP._kelSKWed, _AnRptgfe: _DFMcZVkP._AnRptgfe }]));
_HAmLmeDV.forEach(_bURsSTDL => {
if (_ThqPhLgh.includes(_bURsSTDL._AgieWrkl)) {
const _SPWrcyDv = _AgCCBWJP.get(_bURsSTDL._AgieWrkl);
if (_SPWrcyDv && (_SPWrcyDv._kelSKWed !== '未知' && _SPWrcyDv._kelSKWed !== '查询失败')) {
_bURsSTDL._kelSKWed = _SPWrcyDv._kelSKWed;
_bURsSTDL._AnRptgfe = _SPWrcyDv._AnRptgfe;
}
}
});
}
} catch (_JtcEkBov) {
console.error(`Retry ${_GbPryFSW + 1} failed:`, _JtcEkBov);
}
}
}
if (_eLbwEiiw.geoLocation && _eLbwEiiw.geoLocation.filterUnknown) {
const _FDzNNUUR = _HAmLmeDV._regCSWJt;
_HAmLmeDV = _HAmLmeDV.filter(r => r._kelSKWed && r._kelSKWed !== '未知' && r._kelSKWed !== '查询失败');
const _QzgUGOJm = _FDzNNUUR - _HAmLmeDV._regCSWJt;
if (_QzgUGOJm > 0) {
_syTzSlpE(`已过滤 ${_QzgUGOJm} 个未知归属地的IP`, 'info');
}
}
if (_eLbwEiiw.ispFilter._LQIfRYbE) {
_HAmLmeDV = _HAmLmeDV.filter(r => r._AnRptgfe && r._AnRptgfe.toLowerCase().includes('cloudflare'));
}
_HAmLmeDV.sort((a,b) => a._yqaQgRfI - b._yqaQgRfI);
_eajBrRIZ = _HAmLmeDV.slice(0, _eLbwEiiw.topN);
_eajBrRIZ.forEach((_bURsSTDL, _MDphqmhw) => {
const _xFzSfqqf = _eajBrRIZ._regCSWJt;
if (_xFzSfqqf > 1) {
_bURsSTDL._yqaQgRfI = Math.round(119 + (80 * (_MDphqmhw / (_xFzSfqqf - 1))));
} else {
_bURsSTDL._yqaQgRfI = 119;
}
});
_FlgfHYiO({ _IFpUHWkw: _eajBrRIZ, generatedBy: null }, _HjPEohMR, false);
_IvAsEQVA = true;
_bqbdFWRG.textContent = `筛选完成!正在生成订阅ID...`;
try {
const _FeRRMpjU = await fetch('/api/save-and-get-sub-_vyCDLzmz', {
method: 'POST',
_yQjrXpwp: { 'Content-Type': 'application/json' },
_MrDZiVfn: JSON.stringify(_eajBrRIZ)
});
const _CSdOdjvZ = await _FeRRMpjU.json();
if (_FeRRMpjU.ok && _CSdOdjvZ.success) {
_BWqGIZJU = _CSdOdjvZ._vyCDLzmz;
_bqbdFWRG.textContent = `筛选完成!共找到 ${_eajBrRIZ._regCSWJt} 个可用IP。`;
} else {
throw new Error(_CSdOdjvZ._XrcYeiCq || '保存结果以生成ID时出错');
}
} catch (_JtcEkBov) {
_bqbdFWRG.textContent = `筛选完成!但生成订阅ID失败。`;
_syTzSlpE(`生成订阅ID失败: ${_JtcEkBov._XrcYeiCq}`, 'error');
}
fetch('/api/cache-live-_IFpUHWkw', {
method: 'POST',
_yQjrXpwp: { 'Content-Type': 'application/json' },
_MrDZiVfn: JSON.stringify(_eajBrRIZ)
}).catch(_JtcEkBov => console.error("无法缓存实时结果:", _JtcEkBov));
if (_eLbwEiiw.cloudStorage._LQIfRYbE) {
fetch('/api/save-_wxpYrLiQ', {
method: 'POST',
_yQjrXpwp: { 'Content-Type': 'application/json' },
_MrDZiVfn: JSON.stringify(_eajBrRIZ)
}).then(_FeRRMpjU => {
if (_FeRRMpjU.ok) _syTzSlpE('结果已保存到云端!', 'success');
});
}
} else {
_bqbdFWRG.textContent = '测试完成,未找到任何可用的IP。';
}
}
async function _GPJdKKys() {
if (!_eLbwEiiw.cloudStorage._LQIfRYbE) {
_jFdsHvjn._aaZCucvc.display = 'none';
return;
}
_bqbdFWRG.textContent = '正在获取上次优选结果...';
try {
const _FGcexIUv = await fetch('/api/get-cached-_wxpYrLiQ');
if (_FGcexIUv.ok) {
const _CSdOdjvZ = await _FGcexIUv.json();
if (_CSdOdjvZ && _CSdOdjvZ._IFpUHWkw && _CSdOdjvZ._IFpUHWkw._regCSWJt > 0) {
_FlgfHYiO(_CSdOdjvZ, _xZViMQDk, true);
} else {
_jFdsHvjn._aaZCucvc.display = 'none';
}
}
} catch (_JtcEkBov) {
console.error("加载缓存失败:", _JtcEkBov);
}
}
let _GmgrCmlW;
function _syTzSlpE(_XrcYeiCq, _xPvZdivJ = 'success', _ETvtvUak = 3000) {
if (_GmgrCmlW) clearTimeout(_GmgrCmlW);
_ijhsQDEP.innerHTML = _XrcYeiCq;
let _DzGYcIcj = 'var(--success-_RDyXZtAx)';
if (_xPvZdivJ === 'error') _DzGYcIcj = 'var(--danger-_RDyXZtAx)';
if (_xPvZdivJ === 'warning') _DzGYcIcj = 'var(--warning-_RDyXZtAx)';
if (_xPvZdivJ === 'info') _DzGYcIcj = 'var(--primary-_RDyXZtAx)';
_ijhsQDEP._aaZCucvc.backgroundColor = _DzGYcIcj;
_ijhsQDEP.classList.add('show');
_GmgrCmlW = setTimeout(() => { _ijhsQDEP.classList.remove('show'); }, _ETvtvUak);
}
let _OEKnqfom;
function _RfzMmQDu(_RDyXZtAx) {
const _xbnceNoO = document.getElementById('background-_xbnceNoO');
if (!_xbnceNoO || !_xbnceNoO.getContext) return;
_xbnceNoO._aaZCucvc.display = 'block';
const _AQGKtpwe = _xbnceNoO.getContext('2d');
let _NcqERvgq, height, particles;
const _jNaJmzaW = _EQASnNjV(_RDyXZtAx);
if (!_jNaJmzaW) return;
const _RXhRkXTH = `${_jNaJmzaW.r},${_jNaJmzaW.g},${_jNaJmzaW.b}`;
const _mKprKMlF = () => {
if (_OEKnqfom) cancelAnimationFrame(_OEKnqfom);
_NcqERvgq = _xbnceNoO._NcqERvgq = window.innerWidth;
height = _xbnceNoO.height = window.innerHeight;
particles = Array.from({ _regCSWJt: window.innerWidth < 768 ? 40 : 80 }, () => ({
x: Math.random() * _NcqERvgq, y: Math.random() * height,
vx: (Math.random() - 0.5) * 0.4, vy: (Math.random() - 0.5) * 0.4,
size: Math.random() * 1.5 + 1
}));
_vqsLGViD();
};
const _vqsLGViD = () => {
_AQGKtpwe.clearRect(0, 0, _NcqERvgq, height);
particles.forEach(p => {
p.x += p.vx; p.y += p.vy;
if (p.x < 0 || p.x > _NcqERvgq) p.vx *= -1;
if (p.y < 0 || p.y > height) p.vy *= -1;
_AQGKtpwe.beginPath();
_AQGKtpwe.arc(p.x, p.y, p.size, 0, Math.PI * 2);
_AQGKtpwe.fillStyle = `rgba(${_RXhRkXTH}, 0.5)`;
_AQGKtpwe.fill();
});
for (let _GbPryFSW = 0; _GbPryFSW < particles._regCSWJt; _GbPryFSW++) {
for (let _zsgjnBBZ = _GbPryFSW + 1; _zsgjnBBZ < particles._regCSWJt; _zsgjnBBZ++) {
const _QgvIzyNd = Math.hypot(particles[_GbPryFSW].x - particles[_zsgjnBBZ].x, particles[_GbPryFSW].y - particles[_zsgjnBBZ].y);
if (_QgvIzyNd < 120) {
_AQGKtpwe.beginPath(); _AQGKtpwe.moveTo(particles[_GbPryFSW].x, particles[_GbPryFSW].y);
_AQGKtpwe.lineTo(particles[_zsgjnBBZ].x, particles[_zsgjnBBZ].y);
_AQGKtpwe.strokeStyle = `rgba(${_RXhRkXTH}, ${1 - _QgvIzyNd/120})`;
_AQGKtpwe.stroke();
}
}
}
_OEKnqfom = requestAnimationFrame(_vqsLGViD);
};
window.addEventListener('resize', _mKprKMlF, { passive: true });
_mKprKMlF();
}
function _XeyWDHsD() {
if (_OEKnqfom) cancelAnimationFrame(_OEKnqfom);
const _xbnceNoO = document.getElementById('background-_xbnceNoO');
if (_xbnceNoO && _xbnceNoO.getContext('2d')) {
_xbnceNoO.getContext('2d').clearRect(0, 0, _xbnceNoO._NcqERvgq, _xbnceNoO.height);
_xbnceNoO._aaZCucvc.display = 'none';
}
}
function _ZDEMNRNB() {
const _ZfVLRIEA = document.getElementById('copySubscriptionBtn');
const _lIhuorvB = document.getElementById('_qpcrfQHv');
const _dnweoPCB = document.getElementById('_QrxuzVQa');
const _ttoVgXGn = document.getElementById('closeSubModalBtn');
const _dPkeGJrs = _dnweoPCB.querySelector('.modal-close-btn');
_ZfVLRIEA.addEventListener('click', () => {
if (!_IvAsEQVA || _eajBrRIZ._regCSWJt === 0) {
_syTzSlpE('请先完成优选IP测试', 'warning');
return;
}
if (!_BWqGIZJU) {
_syTzSlpE('订阅ID尚未生成,请稍候', 'warning');
return;
}
if (!_eLbwEiiw._JAUczdzX) {
_syTzSlpE('管理员未配置Sublink服务地址', 'error');
return;
}
const _yBfnFnzO = 'https://' + window._kelSKWed._JTFGaeZU + '/' + _BWqGIZJU;
const _AcSqfasw = {
coreEngine: _yBfnFnzO + 'xr',
coreProfile: _yBfnFnzO + 'si',
configProfile: _yBfnFnzO + 'cl',
policyProfile: _yBfnFnzO + 'su'
};
_lIhuorvB.querySelectorAll('.sub-btn').forEach(btn => {
btn.onclick = () => {
const _xPvZdivJ = btn.dataset.subType;
navigator.clipboard.writeText(_AcSqfasw[_xPvZdivJ]).then(() => {
_syTzSlpE(`${_xPvZdivJ.charAt(0).toUpperCase() + _xPvZdivJ.slice(1)} 订阅链接已复制!`, 'success');
_lIhuorvB._aaZCucvc.display = 'none';
});
};
});
_lIhuorvB.querySelectorAll('._UdpXiNME-btn').forEach(btn => {
btn.onclick = () => {
const _xPvZdivJ = btn.dataset.subType;
const _SqHhEHbz = document.getElementById('qrCodeImg');
const _YCrAIJID = _AcSqfasw[_xPvZdivJ];
if (!_YCrAIJID) return;
try {
const _UdpXiNME = qrcode(0, 'M');
_UdpXiNME.addData(_YCrAIJID);
_UdpXiNME.make();
_SqHhEHbz.src = _UdpXiNME.createDataURL(10, 2);
_dnweoPCB._aaZCucvc.display = 'flex';
} catch(_JtcEkBov) {
_syTzSlpE('生成二维码失败', 'error');
console.error(_JtcEkBov);
}
};
});
_lIhuorvB._aaZCucvc.display = 'flex';
});
_ttoVgXGn.addEventListener('click', () => { _lIhuorvB._aaZCucvc.display = 'none'; });
_lIhuorvB.addEventListener('click', (_JtcEkBov) => { if(_JtcEkBov.target === _lIhuorvB) _lIhuorvB._aaZCucvc.display = 'none'; });
_dnweoPCB.addEventListener('click', (_JtcEkBov) => { if(_JtcEkBov.target === _dnweoPCB) _dnweoPCB._aaZCucvc.display = 'none'; });
}
function _JUoUciRs() {
const _nAHKHEXN = {
android: [
{ _JwxXuqIY: 'Karing', _ofsDgiSn: 'KaringX/karing', _IQULoFPI: ['apk', 'universal-release'] },
{ _JwxXuqIY: 'S' + 'ing-Box', _ofsDgiSn: 'SagerNet/sing-box', _IQULoFPI: ['android', 'universal'] },
{ _JwxXuqIY: 'V2' + 'rayNG', _ofsDgiSn: '2dust/v2rayNG', _IQULoFPI: ['apk', 'arm64-v8a'] },
{ _JwxXuqIY: 'C' + 'lash For Android', fixedUrl: 'https://github.com/clashdownload/Clash_for_Android/releases/download/2.5.12/cfa-2.5.12-premium-universal-release.apk' },
],
ios: [
{ _JwxXuqIY: 'Karing', fixedUrl: 'https://_lIrCwMbC.apple.com/us/_VNNPTeDy/karing/id6472431552?_FJUTkOfP=iphone' },
{ _JwxXuqIY: 'S' + 'ing-Box', fixedUrl: 'https://_lIrCwMbC.apple.com/us/_VNNPTeDy/sing-box-vt/id6673731168' },
{ _JwxXuqIY: 'Shadow' + 'rocket', fixedUrl: 'https://_lIrCwMbC.apple.com/us/_VNNPTeDy/shadowrocket/id932747118' },
],
windows: [
{ _JwxXuqIY: 'Karing', _ofsDgiSn: 'KaringX/karing', _IQULoFPI: ['exe', 'x64-setup'] },
{ _JwxXuqIY: 'V2' + 'rayN', fixedUrl: 'https://github.com/2dust/v2rayN/releases/download/7.12.4/v2rayN-windows-64-SelfContained.zip' },
{ _JwxXuqIY: 'C' + 'lashN', _ofsDgiSn: '2dust/clashN', _IQULoFPI: ['clashN.zip'] },
],
mac: [
{ _JwxXuqIY: 'Karing', fixedUrl: 'https://_lIrCwMbC.apple.com/us/_VNNPTeDy/karing/id6472431552?_FJUTkOfP=mac' },
{ _JwxXuqIY: 'S' + 'ing-Box', fixedUrl: 'https://_lIrCwMbC.apple.com/us/_VNNPTeDy/sing-box-vt/id6673731168' },
]
};
function _PdivqtpY(_PYOnBbai) {
if (_eLbwEiiw.streamer._LQIfRYbE && (_PYOnBbai.includes('github.com') || _PYOnBbai.includes('cdn.jsdelivr.net'))) {
return window._kelSKWed.origin + '/' + _PYOnBbai.replace('://', ':/');
}
return _PYOnBbai;
}
async function _NvmDqyAR(_ofsDgiSn, _IQULoFPI) {
try {
const _FGcexIUv = await fetch(_PdivqtpY(`https://api.github.com/repos/${_ofsDgiSn}/releases/latest`));
if (!_FGcexIUv.ok) return null;
const _CSdOdjvZ = await _FGcexIUv.json();
for (const _DTPFSDlp of _IQULoFPI) {
const _OkDeLYjs = _CSdOdjvZ.assets.find(a => a._JwxXuqIY.toLowerCase().includes(_DTPFSDlp.toLowerCase()));
if (_OkDeLYjs) return _OkDeLYjs.browser_download_url;
}
return null;
} catch (_JtcEkBov) { return null; }
}
async function _kHmsFmhN(_FJUTkOfP) {
const _crIXJrop = { android: '安卓', ios: '苹果', windows: 'Windows', mac: 'Mac' }[_FJUTkOfP];
_mnLIylKR.querySelector('#appModalTitle').textContent = `${_crIXJrop} 客户端下载`;
const _pEYDHSYb = _mnLIylKR.querySelector('#appModalBody');
_pEYDHSYb.innerHTML = '<span>正在获取最新版本...</span>';
_mnLIylKR._aaZCucvc.display = 'flex';
const _lIrCwMbC = _nAHKHEXN[_FJUTkOfP];
let _ZJEnMkAF = '';
for (const _VNNPTeDy of _lIrCwMbC) {
let _cgtMUmNA = '';
if (_VNNPTeDy.fixedUrl) {
_cgtMUmNA = `<a href="${_PdivqtpY(_VNNPTeDy.fixedUrl)}" target="_blank" rel="noopener noreferrer">${_VNNPTeDy.fixedUrl.split('/').pop()}</a>`;
} else if (_VNNPTeDy._ofsDgiSn) {
const _PYOnBbai = await _NvmDqyAR(_VNNPTeDy._ofsDgiSn, _VNNPTeDy._IQULoFPI);
if (_PYOnBbai) {
_cgtMUmNA = `<a href="${_PdivqtpY(_PYOnBbai)}" target="_blank" rel="noopener noreferrer">${_PYOnBbai.split('/').pop()}</a>`;
} else {
_cgtMUmNA = '<span>获取失败,请稍后重试。</span>';
}
}
_ZJEnMkAF += `<div class="_VNNPTeDy-list-_DFMcZVkP"><span class="_VNNPTeDy-_JwxXuqIY">${_VNNPTeDy._JwxXuqIY}</span><div class="_VNNPTeDy-links">${_cgtMUmNA}</div></div>`;
}
_pEYDHSYb.innerHTML = _ZJEnMkAF;
}
document.querySelectorAll('._VNNPTeDy-download-buttons .btn').forEach(button => {
button.addEventListener('click', () => _kHmsFmhN(button.dataset._FJUTkOfP));
});
_mnLIylKR.querySelector('.modal-close-btn').addEventListener('click', () => { _mnLIylKR._aaZCucvc.display = 'none'; });
_mnLIylKR.addEventListener('click', (_JtcEkBov) => { if (_JtcEkBov.target === _mnLIylKR) _mnLIylKR._aaZCucvc.display = 'none'; });
}
function _tgUOKuNA(_QQkRYAvn, _rRwlfYrI) {
let _GbPryFSW, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tab-_ZJEnMkAF");
for (_GbPryFSW = 0; _GbPryFSW < tabcontent._regCSWJt; _GbPryFSW++) {
tabcontent[_GbPryFSW]._aaZCucvc.display = "none";
}
tablinks = document.getElementsByClassName("tab-button");
for (_GbPryFSW = 0; _GbPryFSW < tablinks._regCSWJt; _GbPryFSW++) {
tablinks[_GbPryFSW].className = tablinks[_GbPryFSW].className.replace(" active", "");
}
document.getElementById(_rRwlfYrI)._aaZCucvc.display = "block";
_QQkRYAvn.currentTarget.className += " active";
}
function _xyJpKJwF() {
const _TjyglMuo = document.createElement('div');
_TjyglMuo._vyCDLzmz = 'tooltip-popup';
document._MrDZiVfn.appendChild(_TjyglMuo);
document.addEventListener('click', function(_JtcEkBov) {
const _kxqjPoeB = _JtcEkBov.target.closest('.tooltip-_kxqjPoeB');
if (_kxqjPoeB) {
const _YCrAIJID = _kxqjPoeB.dataset.tooltip;
_TjyglMuo.textContent = _YCrAIJID;
const _nlIgiFJe = _kxqjPoeB.getBoundingClientRect();
_TjyglMuo._aaZCucvc.display = 'block';
let _yaSNQEpT = _nlIgiFJe.bottom + window.scrollY + 5;
let _DMozjrcp = _nlIgiFJe._DMozjrcp + window.scrollX;
_TjyglMuo._aaZCucvc._yaSNQEpT = `${_yaSNQEpT}px`;
_TjyglMuo._aaZCucvc._DMozjrcp = `${_DMozjrcp}px`;
const _pliSmWyV = _TjyglMuo.getBoundingClientRect();
if (_pliSmWyV.right > window.innerWidth - 10) {
_DMozjrcp = window.innerWidth - _pliSmWyV._NcqERvgq - 10;
}
if (_pliSmWyV.bottom > window.innerHeight - 10) {
_yaSNQEpT = _nlIgiFJe._yaSNQEpT + window.scrollY - _pliSmWyV.height - 5;
}
_TjyglMuo._aaZCucvc._yaSNQEpT = `${_yaSNQEpT}px`;
_TjyglMuo._aaZCucvc._DMozjrcp = `${_DMozjrcp}px`;
_JtcEkBov.stopPropagation();
} else if (_TjyglMuo._aaZCucvc.display === 'block') {
_TjyglMuo._aaZCucvc.display = 'none';
}
});
}
const _aaZCucvc = document.createElement('_aaZCucvc');
_aaZCucvc.textContent = `
.tab-button { background-_RDyXZtAx: transparent; border: none; outline: none; cursor: pointer; padding: 10px 15px; transition: all 0.3s; _RDyXZtAx: var(--_YCrAIJID-light); font-size: 1em; }
.tab-button:hover { background-_RDyXZtAx: var(--border-_RDyXZtAx); }
.tab-button.active { _RDyXZtAx: var(--primary-_RDyXZtAx); border-bottom: 2px solid var(--primary-_RDyXZtAx); }
.tab-_ZJEnMkAF { display: none; padding-_yaSNQEpT: 1rem; }
`;
document.head.appendChild(_aaZCucvc);
window.addEventListener('DOMContentLoaded', _oNhpQaHw);
</script>
</_MrDZiVfn></html>
`;
}