/* 逛京东会场 只能刷浏览量,其他未知,测试脚本 只能刷浏览量,其他未知,测试脚本 只能刷浏览量,其他未知,测试脚本 变量格式 ACT_URL="https://xxx.mall.json" 参考文件 docker文件里里面 mall.json 10 0,20 * * * jd_malls.js */ const $ = new Env("逛会场领卷"); const jdCookieNode = $.isNode() ? require("./jdCookie.js") : ""; let cookiesArr = [], cookie; if ($.isNode()) { Object.keys(jdCookieNode).forEach((item) => { cookiesArr.push(jdCookieNode[item]); }); if (process.env.JD_DEBUG && process.env.JD_DEBUG === "false") console.log = () => {}; if (process.env.ACT_URL && process.env.ACT_URL === '') console.log = () => {}; actURL = process.env.ACT_URL || 'https://raw.githubusercontent.com/okyyds/yyds/master/docker/mall.json' } else { cookiesArr = [$.getdata("CookieJD"), $.getdata("CookieJD2"), ...$.toObj($.getdata("CookiesJD") || "[]").map((item) => item.cookie)].filter((item) => !!item); } !(async () => { if (!cookiesArr[0]) { $.msg($.name, "【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取", "https://bean.m.jd.com/bean/signIndex.action", { "open-url": "https://bean.m.jd.com/bean/signIndex.action" }); return; } $.getCodeListerr = false; mallActiveList = await getCodeList(actURL) if ($.getCodeListerr === false) { mallActiveList = await getCodeList('https://gitee.com/fatelight/code/raw/master/mall.json') } if ($.getCodeListerr === true) { for (let i = 0; i < cookiesArr.length; i++) { if (cookiesArr[i]) { cookie = cookiesArr[i]; $.UserName = decodeURIComponent(cookie.match(/pt_pin=([^; ]+)(?=;?)/) && cookie.match(/pt_pin=([^; ]+)(?=;?)/)[1]); $.index = i + 1; $.isLogin = true; $.nickName = ""; //await TotalBean(); console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`); if (!$.isLogin) { $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/bean/signIndex.action`, {"open-url": "https://bean.m.jd.com/bean/signIndex.action"}); if ($.isNode()) { // await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); } continue; } for (let key of mallActiveList) { if (Date.now() < key.time) { await main(key.type,key.d); await $.wait(1000) } } } } } })() .catch((e) => { $.log("", `❌ ${$.name}, 失败! 原因: ${e}!`, ""); }) .finally(() => { $.done(); }); async function main(urlID,code) { let userName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]); $.UA = `jdapp;iPhone;10.2.0;13.1.2;${randomString(40)};M/5.0;network/wifi;ADID/;model/iPhone8,1;addressid/2308460622;appBuild/167853;jdSupportDarkMode/0;Mozilla/5.0 (iPhone; CPU iPhone OS 13_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1;`; $.max = false; $.hotFlag = false; $.code = code; for (let i = 0; i < 1 && !$.max; i++) { $.newCookie = ""; $.url1 = ""; $.url2 = ""; $.eid = ""; await getInfo1(); if (!$.url1) { console.log(`${userName},初始化1失败,可能黑号`); $.hotFlag = true; break; } await getInfo2(urlID); if (!$.url2) { console.log(`${userName},初始化2失败,可能黑号`); $.hotFlag = true; break; } $.actId = ($.url2.match(/mall\/active\/([^/]+)\/index\.html/) && $.url2.match(/mall\/active\/([^/]+)\/index\.html/)[1]); let arr = getBody($.UA, $.url2); await getEid(arr); console.log(`活动ID :` + $.actId); await $.wait(1000); } } function getEid(arr) { return new Promise((resolve) => { const options = { url: `https://gia.jd.com/fcf.html?a=${arr.a}`, body: `d=${arr.d}`, headers: { "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8", "User-Agent": $.UA, }, }; $.post(options, async (err, resp, data) => { try { if (err) { throw new Error(err); } else { if (data.indexOf("*_*") > 0) { data = data.split("*_*", 2); data = JSON.parse(data[1]); $.eid = data.eid; } else { console.log(`京豆api返回数据为空,请检查自身原因`); } } } catch (e) { $.logErr(e, resp); } finally { resolve(data); } }); }); } function randomString(e) { e = e || 32; let t = "abcdef0123456789", a = t.length, n = ""; for (i = 0; i < e; i++) n += t.charAt(Math.floor(Math.random() * a)); return n; } async function getCoupons() { return new Promise((resolve) => { let opts = { url: `https://api.m.jd.com/api?functionId=getUnionFreeCoupon&appid=u&loginType=2&_=${Date.now()}&body=${encodeURIComponent(JSON.stringify({"couponUrl":$.couponUrl,"source":20118}))}`, headers: { "Host": "api.m.jd.com", "Accept": "application/json, text/plain, */*", "Origin": "https://prodev.m.jd.com", "Accept-Encoding": "gzip, deflate, br", "User-Agent": $.UA, "Accept-Language": "zh-CN,zh-Hans;q=0.9", "Referer": "https://prodev.m.jd.com/", "Cookie": `${cookie} ${$.newCookie}` } }; $.get(opts, async (err, resp, data) => { try { if (err) { console.log(`${$.toStr(err)}`); console.log(`${$.name} API请求失败,请检查网路重试`); } else { let res = $.toObj(data, data); if (typeof res == "object") { if (res.msg) { console.log("异常:" + res.msg); } if (res.msg.indexOf("上限") !== -1 || res.msg.indexOf("未登录") !== -1) { $.max = true; } if (res.code == 200 && res.data) { if (res.data.couponType == 2) { console.log(`获得红包:${res.data.discount || 0}元`); } } } else { console.log(data); } } } catch (e) { $.logErr(e, resp); } finally { resolve(); } }); }); } async function getInfo2(urlID) { return new Promise((resolve) => { const options = { url: $.url1, followRedirect: false, headers: { Cookie: `${cookie} ${$.newCookie}`, "user-agent": $.UA, }, }; $.get(options, async (err, resp, data) => { try { let setcookies = (resp && resp["headers"] && (resp["headers"]["set-cookie"] || resp["headers"]["Set-Cookie"] || "")) || ""; let setcookie = ""; if (setcookies) { if (typeof setcookies != "object") { setcookie = setcookies.split(","); } else setcookie = setcookies; for (let ck of setcookie) { let name = ck.split(";")[0].trim(); if (name.split("=")[1]) { if ($.newCookie.indexOf(name.split("=")[1]) == -1) $.newCookie += name.replace(/ /g, "") + "; "; } } } $.url2 = (resp && resp["headers"] && (resp["headers"]["location"] || resp["headers"]["Location"] || "")) || ""; $.url2 = decodeURIComponent($.url2); switch (urlID) { case 'prodev': $.url2 = ($.url2.match(/(https:\/\/prodev\.m\.jd\.com\/mall[^'"]+)/) && $.url2.match(/(https:\/\/prodev\.m\.jd\.com\/mall[^'"]+)/)[1]) || ""; break; case 'pro': $.url2 = ($.url2.match(/(https:\/\/pro\.m\.jd\.com\/mall[^'"]+)/) && $.url2.match(/(https:\/\/pro\.m\.jd\.com\/mall[^'"]+)/)[1]) || ""; break; default: break; } // console.log($.url2) } catch (e) { $.logErr(e, resp); } finally { resolve(data); } }); }); } async function getInfo1(cookie) { return new Promise((resolve) => { const options = { url: `https://u.jd.com/${$.code}`, followRedirect: false, headers: { Cookie: cookie, "user-agent": $.UA, }, }; $.get(options, async (err, resp, data) => { try { let setcookies = (resp && resp["headers"] && (resp["headers"]["set-cookie"] || resp["headers"]["Set-Cookie"] || "")) || ""; let setcookie = ""; if (setcookies) { if (typeof setcookies != "object") { setcookie = setcookies.split(","); } else setcookie = setcookies; for (let ck of setcookie) { let name = ck.split(";")[0].trim(); if (name.split("=")[1]) { if ($.newCookie.indexOf(name.split("=")[1]) == -1) $.newCookie += name.replace(/ /g, "") + "; "; } } } $.url1 = (data.match(/(https:\/\/u\.jd\.com\/jda[^']+)/) && data.match(/(https:\/\/u\.jd\.com\/jda[^']+)/)[1]) || ""; // console.log($.url1) } catch (e) { $.logErr(e, resp); } finally { resolve(data); } }); }); } const navigator = { userAgent: $.isNode() ? require("./USER_AGENTS").USER_AGENT : $.UA, plugins: { length: 0 }, language: "zh-CN", }; const screen = { availHeight: 812, availWidth: 375, colorDepth: 24, height: 812, width: 375, pixelDepth: 24, }; const window = {}; const document = { location: { ancestorOrigins: {}, href: "https://prodev.m.jd.com/mall/active/3BbAVGQPDd6vTyHYjmAutXrKAos6/index.html", origin: "https://prodev.m.jd.com", protocol: "https:", host: "prodev.m.jd.com", hostname: "prodev.m.jd.com", port: "", pathname: "/mall/active/3BbAVGQPDd6vTyHYjmAutXrKAos6/index.html", search: "", hash: "", }, }; var start_time = new Date().getTime(), _jdfp_canvas_md5 = "", _jdfp_webgl_md5 = "", _fingerprint_step = 1, _JdEid = "", _eidFlag = !1, risk_jd_local_fingerprint = "", _jd_e_joint_; function t(a) { if (null == a || void 0 == a || "" == a) return "NA"; if (null == a || void 0 == a || "" == a) var b = ""; else { b = []; for (var c = 0; c < 8 * a.length; c += 8) b[c >> 5] |= (a.charCodeAt(c / 8) & 255) << c % 32; } a = 8 * a.length; b[a >> 5] |= 128 << a % 32; b[(((a + 64) >>> 9) << 4) + 14] = a; a = 1732584193; c = -271733879; for (var l = -1732584194, h = 271733878, q = 0; q < b.length; q += 16) { var z = a, C = c, D = l, B = h; a = v(a, c, l, h, b[q + 0], 7, -680876936); h = v(h, a, c, l, b[q + 1], 12, -389564586); l = v(l, h, a, c, b[q + 2], 17, 606105819); c = v(c, l, h, a, b[q + 3], 22, -1044525330); a = v(a, c, l, h, b[q + 4], 7, -176418897); h = v(h, a, c, l, b[q + 5], 12, 1200080426); l = v(l, h, a, c, b[q + 6], 17, -1473231341); c = v(c, l, h, a, b[q + 7], 22, -45705983); a = v(a, c, l, h, b[q + 8], 7, 1770035416); h = v(h, a, c, l, b[q + 9], 12, -1958414417); l = v(l, h, a, c, b[q + 10], 17, -42063); c = v(c, l, h, a, b[q + 11], 22, -1990404162); a = v(a, c, l, h, b[q + 12], 7, 1804603682); h = v(h, a, c, l, b[q + 13], 12, -40341101); l = v(l, h, a, c, b[q + 14], 17, -1502002290); c = v(c, l, h, a, b[q + 15], 22, 1236535329); a = x(a, c, l, h, b[q + 1], 5, -165796510); h = x(h, a, c, l, b[q + 6], 9, -1069501632); l = x(l, h, a, c, b[q + 11], 14, 643717713); c = x(c, l, h, a, b[q + 0], 20, -373897302); a = x(a, c, l, h, b[q + 5], 5, -701558691); h = x(h, a, c, l, b[q + 10], 9, 38016083); l = x(l, h, a, c, b[q + 15], 14, -660478335); c = x(c, l, h, a, b[q + 4], 20, -405537848); a = x(a, c, l, h, b[q + 9], 5, 568446438); h = x(h, a, c, l, b[q + 14], 9, -1019803690); l = x(l, h, a, c, b[q + 3], 14, -187363961); c = x(c, l, h, a, b[q + 8], 20, 1163531501); a = x(a, c, l, h, b[q + 13], 5, -1444681467); h = x(h, a, c, l, b[q + 2], 9, -51403784); l = x(l, h, a, c, b[q + 7], 14, 1735328473); c = x(c, l, h, a, b[q + 12], 20, -1926607734); a = u(c ^ l ^ h, a, c, b[q + 5], 4, -378558); h = u(a ^ c ^ l, h, a, b[q + 8], 11, -2022574463); l = u(h ^ a ^ c, l, h, b[q + 11], 16, 1839030562); c = u(l ^ h ^ a, c, l, b[q + 14], 23, -35309556); a = u(c ^ l ^ h, a, c, b[q + 1], 4, -1530992060); h = u(a ^ c ^ l, h, a, b[q + 4], 11, 1272893353); l = u(h ^ a ^ c, l, h, b[q + 7], 16, -155497632); c = u(l ^ h ^ a, c, l, b[q + 10], 23, -1094730640); a = u(c ^ l ^ h, a, c, b[q + 13], 4, 681279174); h = u(a ^ c ^ l, h, a, b[q + 0], 11, -358537222); l = u(h ^ a ^ c, l, h, b[q + 3], 16, -722521979); c = u(l ^ h ^ a, c, l, b[q + 6], 23, 76029189); a = u(c ^ l ^ h, a, c, b[q + 9], 4, -640364487); h = u(a ^ c ^ l, h, a, b[q + 12], 11, -421815835); l = u(h ^ a ^ c, l, h, b[q + 15], 16, 530742520); c = u(l ^ h ^ a, c, l, b[q + 2], 23, -995338651); a = w(a, c, l, h, b[q + 0], 6, -198630844); h = w(h, a, c, l, b[q + 7], 10, 1126891415); l = w(l, h, a, c, b[q + 14], 15, -1416354905); c = w(c, l, h, a, b[q + 5], 21, -57434055); a = w(a, c, l, h, b[q + 12], 6, 1700485571); h = w(h, a, c, l, b[q + 3], 10, -1894986606); l = w(l, h, a, c, b[q + 10], 15, -1051523); c = w(c, l, h, a, b[q + 1], 21, -2054922799); a = w(a, c, l, h, b[q + 8], 6, 1873313359); h = w(h, a, c, l, b[q + 15], 10, -30611744); l = w(l, h, a, c, b[q + 6], 15, -1560198380); c = w(c, l, h, a, b[q + 13], 21, 1309151649); a = w(a, c, l, h, b[q + 4], 6, -145523070); h = w(h, a, c, l, b[q + 11], 10, -1120210379); l = w(l, h, a, c, b[q + 2], 15, 718787259); c = w(c, l, h, a, b[q + 9], 21, -343485551); a = A(a, z); c = A(c, C); l = A(l, D); h = A(h, B); } b = [a, c, l, h]; a = ""; for (c = 0; c < 4 * b.length; c++) a += "0123456789abcdef".charAt((b[c >> 2] >> ((c % 4) * 8 + 4)) & 15) + "0123456789abcdef".charAt((b[c >> 2] >> ((c % 4) * 8)) & 15); return a; } function u(a, b, c, l, h, q) { a = A(A(b, a), A(l, q)); return A((a << h) | (a >>> (32 - h)), c); } function v(a, b, c, l, h, q, z) { return u((b & c) | (~b & l), a, b, h, q, z); } function x(a, b, c, l, h, q, z) { return u((b & l) | (c & ~l), a, b, h, q, z); } function w(a, b, c, l, h, q, z) { return u(c ^ (b | ~l), a, b, h, q, z); } function A(a, b) { var c = (a & 65535) + (b & 65535); return (((a >> 16) + (b >> 16) + (c >> 16)) << 16) | (c & 65535); } _fingerprint_step = 2; var y = "", n = navigator.userAgent.toLowerCase(); n.indexOf("jdapp") && (n = n.substring(0, 90)); var e = navigator.language, f = n; -1 != f.indexOf("ipad") || -1 != f.indexOf("iphone os") || -1 != f.indexOf("midp") || -1 != f.indexOf("rv:1.2.3.4") || -1 != f.indexOf("ucweb") || -1 != f.indexOf("android") || -1 != f.indexOf("windows ce") || f.indexOf("windows mobile"); var r = "NA", k = "NA"; try { -1 != f.indexOf("win") && -1 != f.indexOf("95") && ((r = "windows"), (k = "95")), -1 != f.indexOf("win") && -1 != f.indexOf("98") && ((r = "windows"), (k = "98")), -1 != f.indexOf("win 9x") && -1 != f.indexOf("4.90") && ((r = "windows"), (k = "me")), -1 != f.indexOf("win") && -1 != f.indexOf("nt 5.0") && ((r = "windows"), (k = "2000")), -1 != f.indexOf("win") && -1 != f.indexOf("nt") && ((r = "windows"), (k = "NT")), -1 != f.indexOf("win") && -1 != f.indexOf("nt 5.1") && ((r = "windows"), (k = "xp")), -1 != f.indexOf("win") && -1 != f.indexOf("32") && ((r = "windows"), (k = "32")), -1 != f.indexOf("win") && -1 != f.indexOf("nt 5.1") && ((r = "windows"), (k = "7")), -1 != f.indexOf("win") && -1 != f.indexOf("6.0") && ((r = "windows"), (k = "8")), -1 == f.indexOf("win") || (-1 == f.indexOf("nt 6.0") && -1 == f.indexOf("nt 6.1")) || ((r = "windows"), (k = "9")), -1 != f.indexOf("win") && -1 != f.indexOf("nt 6.2") && ((r = "windows"), (k = "10")), -1 != f.indexOf("linux") && (r = "linux"), -1 != f.indexOf("unix") && (r = "unix"), -1 != f.indexOf("sun") && -1 != f.indexOf("os") && (r = "sun os"), -1 != f.indexOf("ibm") && -1 != f.indexOf("os") && (r = "ibm os/2"), -1 != f.indexOf("mac") && -1 != f.indexOf("pc") && (r = "mac"), -1 != f.indexOf("aix") && (r = "aix"), -1 != f.indexOf("powerpc") && (r = "powerPC"), -1 != f.indexOf("hpux") && (r = "hpux"), -1 != f.indexOf("netbsd") && (r = "NetBSD"), -1 != f.indexOf("bsd") && (r = "BSD"), -1 != f.indexOf("osf1") && (r = "OSF1"), -1 != f.indexOf("irix") && ((r = "IRIX"), (k = "")), -1 != f.indexOf("freebsd") && (r = "FreeBSD"), -1 != f.indexOf("symbianos") && ((r = "SymbianOS"), (k = f.substring(f.indexOf("SymbianOS/") + 10, 3))); } catch (a) {} _fingerprint_step = 3; var g = "NA", m = "NA"; try { -1 != f.indexOf("msie") && ((g = "ie"), (m = f.substring(f.indexOf("msie ") + 5)), m.indexOf(";") && (m = m.substring(0, m.indexOf(";")))); -1 != f.indexOf("firefox") && ((g = "Firefox"), (m = f.substring(f.indexOf("firefox/") + 8))); -1 != f.indexOf("opera") && ((g = "Opera"), (m = f.substring(f.indexOf("opera/") + 6, 4))); -1 != f.indexOf("safari") && ((g = "safari"), (m = f.substring(f.indexOf("safari/") + 7))); -1 != f.indexOf("chrome") && ((g = "chrome"), (m = f.substring(f.indexOf("chrome/") + 7)), m.indexOf(" ") && (m = m.substring(0, m.indexOf(" ")))); -1 != f.indexOf("navigator") && ((g = "navigator"), (m = f.substring(f.indexOf("navigator/") + 10))); -1 != f.indexOf("applewebkit") && ((g = "applewebkit_chrome"), (m = f.substring(f.indexOf("applewebkit/") + 12)), m.indexOf(" ") && (m = m.substring(0, m.indexOf(" ")))); -1 != f.indexOf("sogoumobilebrowser") && (g = "\u641c\u72d7\u624b\u673a\u6d4f\u89c8\u5668"); if (-1 != f.indexOf("ucbrowser") || -1 != f.indexOf("ucweb")) g = "UC\u6d4f\u89c8\u5668"; if (-1 != f.indexOf("qqbrowser") || -1 != f.indexOf("tencenttraveler")) g = "QQ\u6d4f\u89c8\u5668"; -1 != f.indexOf("metasr") && (g = "\u641c\u72d7\u6d4f\u89c8\u5668"); -1 != f.indexOf("360se") && (g = "360\u6d4f\u89c8\u5668"); -1 != f.indexOf("the world") && (g = "\u4e16\u754c\u4e4b\u7a97\u6d4f\u89c8\u5668"); -1 != f.indexOf("maxthon") && (g = "\u9068\u6e38\u6d4f\u89c8\u5668"); } catch (a) {} class JdJrTdRiskFinger { f = { options: function () { return {}; }, nativeForEach: Array.prototype.forEach, nativeMap: Array.prototype.map, extend: function (a, b) { if (null == a) return b; for (var c in a) null != a[c] && b[c] !== a[c] && (b[c] = a[c]); return b; }, getData: function () { return y; }, get: function (a) { var b = 1 * m, c = []; "ie" == g && 7 <= b ? (c.push(n), c.push(e), (y = y + ",'userAgent':'" + t(n) + "','language':'" + e + "'"), this.browserRedirect(n)) : ((c = this.userAgentKey(c)), (c = this.languageKey(c))); c.push(g); c.push(m); c.push(r); c.push(k); y = y + ",'os':'" + r + "','osVersion':'" + k + "','browser':'" + g + "','browserVersion':'" + m + "'"; c = this.colorDepthKey(c); c = this.screenResolutionKey(c); c = this.timezoneOffsetKey(c); c = this.sessionStorageKey(c); c = this.localStorageKey(c); c = this.indexedDbKey(c); c = this.addBehaviorKey(c); c = this.openDatabaseKey(c); c = this.cpuClassKey(c); c = this.platformKey(c); c = this.hardwareConcurrencyKey(c); c = this.doNotTrackKey(c); c = this.pluginsKey(c); c = this.canvasKey(c); c = this.webglKey(c); b = this.x64hash128(c.join("~~~"), 31); return a(b); }, userAgentKey: function (a) { a.push(navigator.userAgent), (y = y + ",'userAgent':'" + t(navigator.userAgent) + "'"), this.browserRedirect(navigator.userAgent); return a; }, replaceAll: function (a, b, c) { for (; 0 <= a.indexOf(b); ) a = a.replace(b, c); return a; }, browserRedirect: function (a) { var b = a.toLowerCase(); a = "ipad" == b.match(/ipad/i); var c = "iphone os" == b.match(/iphone os/i), l = "midp" == b.match(/midp/i), h = "rv:1.2.3.4" == b.match(/rv:1.2.3.4/i), q = "ucweb" == b.match(/ucweb/i), z = "android" == b.match(/android/i), C = "windows ce" == b.match(/windows ce/i); b = "windows mobile" == b.match(/windows mobile/i); y = a || c || l || h || q || z || C || b ? y + ",'origin':'mobile'" : y + ",'origin':'pc'"; }, languageKey: function (a) { "" || (a.push(navigator.language), (y = y + ",'language':'" + this.replaceAll(navigator.language, " ", "_") + "'")); return a; }, colorDepthKey: function (a) { "" || (a.push(screen.colorDepth), (y = y + ",'colorDepth':'" + screen.colorDepth + "'")); return a; }, screenResolutionKey: function (a) { if (!this.options.excludeScreenResolution) { var b = this.getScreenResolution(); "undefined" !== typeof b && (a.push(b.join("x")), (y = y + ",'screenResolution':'" + b.join("x") + "'")); } return a; }, getScreenResolution: function () { return this.options.detectScreenOrientation ? screen.height > screen.width ? [screen.height, screen.width] : [screen.width, screen.height] : [screen.height, screen.width]; }, timezoneOffsetKey: function (a) { this.options.excludeTimezoneOffset || (a.push(new Date().getTimezoneOffset()), (y = y + ",'timezoneOffset':'" + new Date().getTimezoneOffset() / 60 + "'")); return a; }, sessionStorageKey: function (a) { !this.options.excludeSessionStorage && this.hasSessionStorage() && (a.push("sessionStorageKey"), (y += ",'sessionStorage':true")); return a; }, localStorageKey: function (a) { !this.options.excludeSessionStorage && this.hasLocalStorage() && (a.push("localStorageKey"), (y += ",'localStorage':true")); return a; }, indexedDbKey: function (a) { !this.options.excludeIndexedDB && this.hasIndexedDB() && (a.push("indexedDbKey"), (y += ",'indexedDb':true")); return a; }, addBehaviorKey: function (a) { document.body && !this.options.excludeAddBehavior && document.body.addBehavior ? (a.push("addBehaviorKey"), (y += ",'addBehavior':true")) : (y += ",'addBehavior':false"); return a; }, openDatabaseKey: function (a) { !this.options.excludeOpenDatabase && window.openDatabase ? (a.push("openDatabase"), (y += ",'openDatabase':true")) : (y += ",'openDatabase':false"); return a; }, cpuClassKey: function (a) { this.options.excludeCpuClass || (a.push(this.getNavigatorCpuClass()), (y = y + ",'cpu':'" + this.getNavigatorCpuClass() + "'")); return a; }, platformKey: function (a) { this.options.excludePlatform || (a.push(this.getNavigatorPlatform()), (y = y + ",'platform':'" + this.getNavigatorPlatform() + "'")); return a; }, hardwareConcurrencyKey: function (a) { var b = this.getHardwareConcurrency(); a.push(b); y = y + ",'ccn':'" + b + "'"; return a; }, doNotTrackKey: function (a) { this.options.excludeDoNotTrack || (a.push(this.getDoNotTrack()), (y = y + ",'track':'" + this.getDoNotTrack() + "'")); return a; }, canvasKey: function (a) { if (!this.options.excludeCanvas && this.isCanvasSupported()) { var b = this.getCanvasFp(); a.push(b); _jdfp_canvas_md5 = t(b); y = y + ",'canvas':'" + _jdfp_canvas_md5 + "'"; } return a; }, webglKey: function (a) { if (!this.options.excludeWebGL && this.isCanvasSupported()) { var b = this.getWebglFp(); _jdfp_webgl_md5 = t(b); a.push(b); y = y + ",'webglFp':'" + _jdfp_webgl_md5 + "'"; } return a; }, pluginsKey: function (a) { this.isIE() ? (a.push(this.getIEPluginsString()), (y = y + ",'plugins':'" + t(this.getIEPluginsString()) + "'")) : (a.push(this.getRegularPluginsString()), (y = y + ",'plugins':'" + t(this.getRegularPluginsString()) + "'")); return a; }, getRegularPluginsString: function () { return this.map( navigator.plugins, function (a) { var b = this.map(a, function (c) { return [c.type, c.suffixes].join("~"); }).join(","); return [a.name, a.description, b].join("::"); }, this ).join(";"); }, getIEPluginsString: function () { return window.ActiveXObject ? this.map( "AcroPDF.PDF;Adodb.Stream;AgControl.AgControl;DevalVRXCtrl.DevalVRXCtrl.1;MacromediaFlashPaper.MacromediaFlashPaper;Msxml2.DOMDocument;Msxml2.XMLHTTP;PDF.PdfCtrl;QuickTime.QuickTime;QuickTimeCheckObject.QuickTimeCheck.1;RealPlayer;RealPlayer.RealPlayer(tm) ActiveX Control (32-bit);RealVideo.RealVideo(tm) ActiveX Control (32-bit);Scripting.Dictionary;SWCtl.SWCtl;Shell.UIHelper;ShockwaveFlash.ShockwaveFlash;Skype.Detection;TDCCtl.TDCCtl;WMPlayer.OCX;rmocx.RealPlayer G2 Control;rmocx.RealPlayer G2 Control.1".split( ";" ), function (a) { try { return new ActiveXObject(a), a; } catch (b) { return null; } } ).join(";") : ""; }, hasSessionStorage: function () { try { return !!window.sessionStorage; } catch (a) { return !0; } }, hasLocalStorage: function () { try { return !!window.localStorage; } catch (a) { return !0; } }, hasIndexedDB: function () { return true; return !!window.indexedDB; }, getNavigatorCpuClass: function () { return navigator.cpuClass ? navigator.cpuClass : "NA"; }, getNavigatorPlatform: function () { return navigator.platform ? navigator.platform : "NA"; }, getHardwareConcurrency: function () { return navigator.hardwareConcurrency ? navigator.hardwareConcurrency : "NA"; }, getDoNotTrack: function () { return navigator.doNotTrack ? navigator.doNotTrack : "NA"; }, getCanvasFp: function () { return ""; var a = navigator.userAgent.toLowerCase(); if ( (0 < a.indexOf("jdjr-app") || 0 <= a.indexOf("jdapp")) && (0 < a.indexOf("iphone") || 0 < a.indexOf("ipad")) ) return null; a = document.createElement("canvas"); var b = a.getContext("2d"); b.fillStyle = "red"; b.fillRect(30, 10, 200, 100); b.strokeStyle = "#1a3bc1"; b.lineWidth = 6; b.lineCap = "round"; b.arc(50, 50, 20, 0, Math.PI, !1); b.stroke(); b.fillStyle = "#42e1a2"; b.font = "15.4px 'Arial'"; b.textBaseline = "alphabetic"; b.fillText("PR flacks quiz gym: TV DJ box when? \u2620", 15, 60); b.shadowOffsetX = 1; b.shadowOffsetY = 2; b.shadowColor = "white"; b.fillStyle = "rgba(0, 0, 200, 0.5)"; b.font = "60px 'Not a real font'"; b.fillText("No\u9a97", 40, 80); return a.toDataURL(); }, getWebglFp: function () { var a = navigator.userAgent; a = a.toLowerCase(); if ( (0 < a.indexOf("jdjr-app") || 0 <= a.indexOf("jdapp")) && (0 < a.indexOf("iphone") || 0 < a.indexOf("ipad")) ) return null; a = function (D) { b.clearColor(0, 0, 0, 1); b.enable(b.DEPTH_TEST); b.depthFunc(b.LEQUAL); b.clear(b.COLOR_BUFFER_BIT | b.DEPTH_BUFFER_BIT); return "[" + D[0] + ", " + D[1] + "]"; }; var b = this.getWebglCanvas(); if (!b) return null; var c = [], l = b.createBuffer(); b.bindBuffer(b.ARRAY_BUFFER, l); var h = new Float32Array([ -0.2, -0.9, 0, 0.4, -0.26, 0, 0, 0.732134444, 0, ]); b.bufferData(b.ARRAY_BUFFER, h, b.STATIC_DRAW); l.itemSize = 3; l.numItems = 3; h = b.createProgram(); var q = b.createShader(b.VERTEX_SHADER); b.shaderSource( q, "attribute vec2 attrVertex;varying vec2 varyinTexCoordinate;uniform vec2 uniformOffset;void main(){varyinTexCoordinate=attrVertex+uniformOffset;gl_Position=vec4(attrVertex,0,1);}" ); b.compileShader(q); var z = b.createShader(b.FRAGMENT_SHADER); b.shaderSource( z, "precision mediump float;varying vec2 varyinTexCoordinate;void main() {gl_FragColor=vec4(varyinTexCoordinate,0,1);}" ); b.compileShader(z); b.attachShader(h, q); b.attachShader(h, z); b.linkProgram(h); b.useProgram(h); h.vertexPosAttrib = b.getAttribLocation(h, "attrVertex"); h.offsetUniform = b.getUniformLocation(h, "uniformOffset"); b.enableVertexAttribArray(h.vertexPosArray); b.vertexAttribPointer(h.vertexPosAttrib, l.itemSize, b.FLOAT, !1, 0, 0); b.uniform2f(h.offsetUniform, 1, 1); b.drawArrays(b.TRIANGLE_STRIP, 0, l.numItems); null != b.canvas && c.push(b.canvas.toDataURL()); c.push("extensions:" + b.getSupportedExtensions().join(";")); c.push("extensions:" + b.getSupportedExtensions().join(";")); c.push("w1" + a(b.getParameter(b.ALIASED_LINE_WIDTH_RANGE))); c.push("w2" + a(b.getParameter(b.ALIASED_POINT_SIZE_RANGE))); c.push("w3" + b.getParameter(b.ALPHA_BITS)); c.push("w4" + (b.getContextAttributes().antialias ? "yes" : "no")); c.push("w5" + b.getParameter(b.BLUE_BITS)); c.push("w6" + b.getParameter(b.DEPTH_BITS)); c.push("w7" + b.getParameter(b.GREEN_BITS)); c.push( "w8" + (function (D) { var B, F = D.getExtension("EXT_texture_filter_anisotropic") || D.getExtension("WEBKIT_EXT_texture_filter_anisotropic") || D.getExtension("MOZ_EXT_texture_filter_anisotropic"); return F ? ((B = D.getParameter(F.MAX_TEXTURE_MAX_ANISOTROPY_EXT)), 0 === B && (B = 2), B) : null; })(b) ); c.push("w9" + b.getParameter(b.MAX_COMBINED_TEXTURE_IMAGE_UNITS)); c.push("w10" + b.getParameter(b.MAX_CUBE_MAP_TEXTURE_SIZE)); c.push("w11" + b.getParameter(b.MAX_FRAGMENT_UNIFORM_VECTORS)); c.push("w12" + b.getParameter(b.MAX_RENDERBUFFER_SIZE)); c.push("w13" + b.getParameter(b.MAX_TEXTURE_IMAGE_UNITS)); c.push("w14" + b.getParameter(b.MAX_TEXTURE_SIZE)); c.push("w15" + b.getParameter(b.MAX_VARYING_VECTORS)); c.push("w16" + b.getParameter(b.MAX_VERTEX_ATTRIBS)); c.push("w17" + b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)); c.push("w18" + b.getParameter(b.MAX_VERTEX_UNIFORM_VECTORS)); c.push("w19" + a(b.getParameter(b.MAX_VIEWPORT_DIMS))); c.push("w20" + b.getParameter(b.RED_BITS)); c.push("w21" + b.getParameter(b.RENDERER)); c.push("w22" + b.getParameter(b.SHADING_LANGUAGE_VERSION)); c.push("w23" + b.getParameter(b.STENCIL_BITS)); c.push("w24" + b.getParameter(b.VENDOR)); c.push("w25" + b.getParameter(b.VERSION)); try { var C = b.getExtension("WEBGL_debug_renderer_info"); C && (c.push("wuv:" + b.getParameter(C.UNMASKED_VENDOR_WEBGL)), c.push("wur:" + b.getParameter(C.UNMASKED_RENDERER_WEBGL))); } catch (D) {} return c.join("\u00a7"); }, isCanvasSupported: function () { return true; var a = document.createElement("canvas"); return !(!a.getContext || !a.getContext("2d")); }, isIE: function () { return "Microsoft Internet Explorer" === navigator.appName || ("Netscape" === navigator.appName && /Trident/.test(navigator.userAgent)) ? !0 : !1; }, getWebglCanvas: function () { return null; var a = document.createElement("canvas"), b = null; try { var c = navigator.userAgent; c = c.toLowerCase(); ((0 < c.indexOf("jdjr-app") || 0 <= c.indexOf("jdapp")) && (0 < c.indexOf("iphone") || 0 < c.indexOf("ipad"))) || (b = a.getContext("webgl") || a.getContext("experimental-webgl")); } catch (l) {} b || (b = null); return b; }, each: function (a, b, c) { if (null !== a) if (this.nativeForEach && a.forEach === this.nativeForEach) a.forEach(b, c); else if (a.length === +a.length) for ( var l = 0, h = a.length; l < h && b.call(c, a[l], l, a) !== {}; l++ ); else for (l in a) if (a.hasOwnProperty(l) && b.call(c, a[l], l, a) === {}) break; }, map: function (a, b, c) { var l = []; if (null == a) return l; if (this.nativeMap && a.map === this.nativeMap) return a.map(b, c); this.each(a, function (h, q, z) { l[l.length] = b.call(c, h, q, z); }); return l; }, x64Add: function (a, b) { a = [a[0] >>> 16, a[0] & 65535, a[1] >>> 16, a[1] & 65535]; b = [b[0] >>> 16, b[0] & 65535, b[1] >>> 16, b[1] & 65535]; var c = [0, 0, 0, 0]; c[3] += a[3] + b[3]; c[2] += c[3] >>> 16; c[3] &= 65535; c[2] += a[2] + b[2]; c[1] += c[2] >>> 16; c[2] &= 65535; c[1] += a[1] + b[1]; c[0] += c[1] >>> 16; c[1] &= 65535; c[0] += a[0] + b[0]; c[0] &= 65535; return [(c[0] << 16) | c[1], (c[2] << 16) | c[3]]; }, x64Multiply: function (a, b) { a = [a[0] >>> 16, a[0] & 65535, a[1] >>> 16, a[1] & 65535]; b = [b[0] >>> 16, b[0] & 65535, b[1] >>> 16, b[1] & 65535]; var c = [0, 0, 0, 0]; c[3] += a[3] * b[3]; c[2] += c[3] >>> 16; c[3] &= 65535; c[2] += a[2] * b[3]; c[1] += c[2] >>> 16; c[2] &= 65535; c[2] += a[3] * b[2]; c[1] += c[2] >>> 16; c[2] &= 65535; c[1] += a[1] * b[3]; c[0] += c[1] >>> 16; c[1] &= 65535; c[1] += a[2] * b[2]; c[0] += c[1] >>> 16; c[1] &= 65535; c[1] += a[3] * b[1]; c[0] += c[1] >>> 16; c[1] &= 65535; c[0] += a[0] * b[3] + a[1] * b[2] + a[2] * b[1] + a[3] * b[0]; c[0] &= 65535; return [(c[0] << 16) | c[1], (c[2] << 16) | c[3]]; }, x64Rotl: function (a, b) { b %= 64; if (32 === b) return [a[1], a[0]]; if (32 > b) return [ (a[0] << b) | (a[1] >>> (32 - b)), (a[1] << b) | (a[0] >>> (32 - b)), ]; b -= 32; return [ (a[1] << b) | (a[0] >>> (32 - b)), (a[0] << b) | (a[1] >>> (32 - b)), ]; }, x64LeftShift: function (a, b) { b %= 64; return 0 === b ? a : 32 > b ? [(a[0] << b) | (a[1] >>> (32 - b)), a[1] << b] : [a[1] << (b - 32), 0]; }, x64Xor: function (a, b) { return [a[0] ^ b[0], a[1] ^ b[1]]; }, x64Fmix: function (a) { a = this.x64Xor(a, [0, a[0] >>> 1]); a = this.x64Multiply(a, [4283543511, 3981806797]); a = this.x64Xor(a, [0, a[0] >>> 1]); a = this.x64Multiply(a, [3301882366, 444984403]); return (a = this.x64Xor(a, [0, a[0] >>> 1])); }, x64hash128: function (a, b) { a = a || ""; b = b || 0; var c = a.length % 16, l = a.length - c, h = [0, b]; b = [0, b]; for ( var q, z, C = [2277735313, 289559509], D = [1291169091, 658871167], B = 0; B < l; B += 16 ) (q = [ (a.charCodeAt(B + 4) & 255) | ((a.charCodeAt(B + 5) & 255) << 8) | ((a.charCodeAt(B + 6) & 255) << 16) | ((a.charCodeAt(B + 7) & 255) << 24), (a.charCodeAt(B) & 255) | ((a.charCodeAt(B + 1) & 255) << 8) | ((a.charCodeAt(B + 2) & 255) << 16) | ((a.charCodeAt(B + 3) & 255) << 24), ]), (z = [ (a.charCodeAt(B + 12) & 255) | ((a.charCodeAt(B + 13) & 255) << 8) | ((a.charCodeAt(B + 14) & 255) << 16) | ((a.charCodeAt(B + 15) & 255) << 24), (a.charCodeAt(B + 8) & 255) | ((a.charCodeAt(B + 9) & 255) << 8) | ((a.charCodeAt(B + 10) & 255) << 16) | ((a.charCodeAt(B + 11) & 255) << 24), ]), (q = this.x64Multiply(q, C)), (q = this.x64Rotl(q, 31)), (q = this.x64Multiply(q, D)), (h = this.x64Xor(h, q)), (h = this.x64Rotl(h, 27)), (h = this.x64Add(h, b)), (h = this.x64Add(this.x64Multiply(h, [0, 5]), [0, 1390208809])), (z = this.x64Multiply(z, D)), (z = this.x64Rotl(z, 33)), (z = this.x64Multiply(z, C)), (b = this.x64Xor(b, z)), (b = this.x64Rotl(b, 31)), (b = this.x64Add(b, h)), (b = this.x64Add(this.x64Multiply(b, [0, 5]), [0, 944331445])); q = [0, 0]; z = [0, 0]; switch (c) { case 15: z = this.x64Xor(z, this.x64LeftShift([0, a.charCodeAt(B + 14)], 48)); case 14: z = this.x64Xor(z, this.x64LeftShift([0, a.charCodeAt(B + 13)], 40)); case 13: z = this.x64Xor(z, this.x64LeftShift([0, a.charCodeAt(B + 12)], 32)); case 12: z = this.x64Xor(z, this.x64LeftShift([0, a.charCodeAt(B + 11)], 24)); case 11: z = this.x64Xor(z, this.x64LeftShift([0, a.charCodeAt(B + 10)], 16)); case 10: z = this.x64Xor(z, this.x64LeftShift([0, a.charCodeAt(B + 9)], 8)); case 9: (z = this.x64Xor(z, [0, a.charCodeAt(B + 8)])), (z = this.x64Multiply(z, D)), (z = this.x64Rotl(z, 33)), (z = this.x64Multiply(z, C)), (b = this.x64Xor(b, z)); case 8: q = this.x64Xor(q, this.x64LeftShift([0, a.charCodeAt(B + 7)], 56)); case 7: q = this.x64Xor(q, this.x64LeftShift([0, a.charCodeAt(B + 6)], 48)); case 6: q = this.x64Xor(q, this.x64LeftShift([0, a.charCodeAt(B + 5)], 40)); case 5: q = this.x64Xor(q, this.x64LeftShift([0, a.charCodeAt(B + 4)], 32)); case 4: q = this.x64Xor(q, this.x64LeftShift([0, a.charCodeAt(B + 3)], 24)); case 3: q = this.x64Xor(q, this.x64LeftShift([0, a.charCodeAt(B + 2)], 16)); case 2: q = this.x64Xor(q, this.x64LeftShift([0, a.charCodeAt(B + 1)], 8)); case 1: (q = this.x64Xor(q, [0, a.charCodeAt(B)])), (q = this.x64Multiply(q, C)), (q = this.x64Rotl(q, 31)), (q = this.x64Multiply(q, D)), (h = this.x64Xor(h, q)); } h = this.x64Xor(h, [0, a.length]); b = this.x64Xor(b, [0, a.length]); h = this.x64Add(h, b); b = this.x64Add(b, h); h = this.x64Fmix(h); b = this.x64Fmix(b); h = this.x64Add(h, b); b = this.x64Add(b, h); return ( ("00000000" + (h[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (h[1] >>> 0).toString(16)).slice(-8) + ("00000000" + (b[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (b[1] >>> 0).toString(16)).slice(-8) ); }, }; } var JDDSecCryptoJS = JDDSecCryptoJS || (function (t, u) { var v = {}, x = (v.lib = {}), w = (x.Base = (function () { function g() {} return { extend: function (m) { g.prototype = this; var a = new g(); m && a.mixIn(m); a.hasOwnProperty("init") || (a.init = function () { a.$super.init.apply(this, arguments); }); a.init.prototype = a; a.$super = this; return a; }, create: function () { var m = this.extend(); m.init.apply(m, arguments); return m; }, init: function () {}, mixIn: function (m) { for (var a in m) m.hasOwnProperty(a) && (this[a] = m[a]); m.hasOwnProperty("toString") && (this.toString = m.toString); }, clone: function () { return this.init.prototype.extend(this); }, }; })()), A = (x.WordArray = w.extend({ init: function (g, m) { g = this.words = g || []; this.sigBytes = m != u ? m : 4 * g.length; }, toString: function (g) { return (g || n).stringify(this); }, concat: function (g) { var m = this.words, a = g.words, b = this.sigBytes; g = g.sigBytes; this.clamp(); if (b % 4) for (var c = 0; c < g; c++) m[(b + c) >>> 2] |= ((a[c >>> 2] >>> (24 - (c % 4) * 8)) & 255) << (24 - ((b + c) % 4) * 8); else if (65535 < a.length) for (c = 0; c < g; c += 4) m[(b + c) >>> 2] = a[c >>> 2]; else m.push.apply(m, a); this.sigBytes += g; return this; }, clamp: function () { var g = this.words, m = this.sigBytes; g[m >>> 2] &= 4294967295 << (32 - (m % 4) * 8); g.length = t.ceil(m / 4); }, clone: function () { var g = w.clone.call(this); g.words = this.words.slice(0); return g; }, random: function (g) { for (var m = [], a = 0; a < g; a += 4) m.push((4294967296 * t.random()) | 0); return new A.init(m, g); }, })); x.UUID = w.extend({ generateUuid: function () { for ( var g = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split(""), m = 0, a = g.length; m < a; m++ ) switch (g[m]) { case "x": g[m] = t.floor(16 * t.random()).toString(16); break; case "y": g[m] = (t.floor(4 * t.random()) + 8).toString(16); } return g.join(""); }, }); var y = (v.enc = {}), n = (y.Hex = { stringify: function (g) { var m = g.words; g = g.sigBytes; var a = []; for (var b = 0; b < g; b++) { var c = (m[b >>> 2] >>> (24 - (b % 4) * 8)) & 255; a.push((c >>> 4).toString(16)); a.push((c & 15).toString(16)); } return a.join(""); }, parse: function (g) { for (var m = g.length, a = [], b = 0; b < m; b += 2) a[b >>> 3] |= parseInt(g.substr(b, 2), 16) << (24 - (b % 8) * 4); return new A.init(a, m / 2); }, }), e = (y.Latin1 = { stringify: function (g) { var m = g.words; g = g.sigBytes; for (var a = [], b = 0; b < g; b++) a.push( String.fromCharCode((m[b >>> 2] >>> (24 - (b % 4) * 8)) & 255) ); return a.join(""); }, parse: function (g) { for (var m = g.length, a = [], b = 0; b < m; b++) a[b >>> 2] |= (g.charCodeAt(b) & 255) << (24 - (b % 4) * 8); return new A.init(a, m); }, }), f = (y.Utf8 = { stringify: function (g) { try { return decodeURIComponent(escape(e.stringify(g))); } catch (m) { throw Error("Malformed UTF-8 data"); } }, parse: function (g) { return e.parse(unescape(encodeURIComponent(g))); }, }), r = (x.BufferedBlockAlgorithm = w.extend({ reset: function () { this._data = new A.init(); this._nDataBytes = 0; }, _append: function (g) { "string" == typeof g && (g = f.parse(g)); this._data.concat(g); this._nDataBytes += g.sigBytes; }, _process: function (g) { var m = this._data, a = m.words, b = m.sigBytes, c = this.blockSize, l = b / (4 * c); l = g ? t.ceil(l) : t.max((l | 0) - this._minBufferSize, 0); g = l * c; b = t.min(4 * g, b); if (g) { for (var h = 0; h < g; h += c) this._doProcessBlock(a, h); h = a.splice(0, g); m.sigBytes -= b; } return new A.init(h, b); }, clone: function () { var g = w.clone.call(this); g._data = this._data.clone(); return g; }, _minBufferSize: 0, })); x.Hasher = r.extend({ cfg: w.extend(), init: function (g) { this.cfg = this.cfg.extend(g); this.reset(); }, reset: function () { r.reset.call(this); this._doReset(); }, update: function (g) { this._append(g); this._process(); return this; }, finalize: function (g) { g && this._append(g); return this._doFinalize(); }, blockSize: 16, _createHelper: function (g) { return function (m, a) { return new g.init(a).finalize(m); }; }, _createHmacHelper: function (g) { return function (m, a) { return new k.HMAC.init(g, a).finalize(m); }; }, }); var k = (v.algo = {}); v.channel = {}; return v; })(Math); JDDSecCryptoJS.lib.Cipher || (function (t) { var u = JDDSecCryptoJS, v = u.lib, x = v.Base, w = v.WordArray, A = v.BufferedBlockAlgorithm, y = (v.Cipher = A.extend({ cfg: x.extend(), createEncryptor: function (g, m) { return this.create(this._ENC_XFORM_MODE, g, m); }, createDecryptor: function (g, m) { return this.create(this._DEC_XFORM_MODE, g, m); }, init: function (g, m, a) { this.cfg = this.cfg.extend(a); this._xformMode = g; this._key = m; this.reset(); }, reset: function () { A.reset.call(this); this._doReset(); }, process: function (g) { this._append(g); return this._process(); }, finalize: function (g) { g && this._append(g); return this._doFinalize(); }, keySize: 4, ivSize: 4, _ENC_XFORM_MODE: 1, _DEC_XFORM_MODE: 2, _createHelper: (function () { function g(m) { if ("string" != typeof m) return k; } return function (m) { return { encrypt: function (a, b, c) { return g(b).encrypt(m, a, b, c); }, decrypt: function (a, b, c) { return g(b).decrypt(m, a, b, c); }, }; }; })(), })); v.StreamCipher = y.extend({ _doFinalize: function () { return this._process(!0); }, blockSize: 1, }); var n = (u.mode = {}), e = (v.BlockCipherMode = x.extend({ createEncryptor: function (g, m) { return this.Encryptor.create(g, m); }, createDecryptor: function (g, m) { return this.Decryptor.create(g, m); }, init: function (g, m) { this._cipher = g; this._iv = m; }, })); n = n.CBC = (function () { function g(a, b, c) { var l = this._iv; l ? (this._iv = t) : (l = this._prevBlock); for (var h = 0; h < c; h++) a[b + h] ^= l[h]; } var m = e.extend(); m.Encryptor = m.extend({ processBlock: function (a, b) { var c = this._cipher, l = c.blockSize; g.call(this, a, b, l); c.encryptBlock(a, b); this._prevBlock = a.slice(b, b + l); }, }); m.Decryptor = m.extend({ processBlock: function (a, b) { var c = this._cipher, l = c.blockSize, h = a.slice(b, b + l); c.decryptBlock(a, b); g.call(this, a, b, l); this._prevBlock = h; }, }); return m; })(); var f = ((u.pad = {}).Pkcs7 = { pad: function (g, m) { m *= 4; m -= g.sigBytes % m; for ( var a = (m << 24) | (m << 16) | (m << 8) | m, b = [], c = 0; c < m; c += 4 ) b.push(a); m = w.create(b, m); g.concat(m); }, unpad: function (g) { g.sigBytes -= g.words[(g.sigBytes - 1) >>> 2] & 255; }, }); v.BlockCipher = y.extend({ cfg: y.cfg.extend({ mode: n, padding: f, }), reset: function () { y.reset.call(this); var g = this.cfg, m = g.iv; g = g.mode; if (this._xformMode == this._ENC_XFORM_MODE) var a = g.createEncryptor; else (a = g.createDecryptor), (this._minBufferSize = 1); this._mode = a.call(g, this, m && m.words); }, _doProcessBlock: function (g, m) { this._mode.processBlock(g, m); }, _doFinalize: function () { var g = this.cfg.padding; if (this._xformMode == this._ENC_XFORM_MODE) { g.pad(this._data, this.blockSize); var m = this._process(!0); } else (m = this._process(!0)), g.unpad(m); return m; }, blockSize: 4, }); var r = (v.CipherParams = x.extend({ init: function (g) { this.mixIn(g); }, toString: function (g) { return (g || this.formatter).stringify(this); }, })); u.format = {}; var k = (v.SerializableCipher = x.extend({ cfg: x.extend({}), encrypt: function (g, m, a, b) { b = this.cfg.extend(b); var c = g.createEncryptor(a, b); m = c.finalize(m); c = c.cfg; return r.create({ ciphertext: m, key: a, iv: c.iv, algorithm: g, mode: c.mode, padding: c.padding, blockSize: g.blockSize, formatter: b.format, }); }, decrypt: function (g, m, a, b) { b = this.cfg.extend(b); m = this._parse(m, b.format); return g.createDecryptor(a, b).finalize(m.ciphertext); }, _parse: function (g, m) { return "string" == typeof g ? m.parse(g, this) : g; }, })); })(); (function () { var t = JDDSecCryptoJS, u = t.lib.BlockCipher, v = t.algo, x = [], w = [], A = [], y = [], n = [], e = [], f = [], r = [], k = [], g = []; (function () { for (var a = [], b = 0; 256 > b; b++) a[b] = 128 > b ? b << 1 : (b << 1) ^ 283; var c = 0, l = 0; for (b = 0; 256 > b; b++) { var h = l ^ (l << 1) ^ (l << 2) ^ (l << 3) ^ (l << 4); h = (h >>> 8) ^ (h & 255) ^ 99; x[c] = h; w[h] = c; var q = a[c], z = a[q], C = a[z], D = (257 * a[h]) ^ (16843008 * h); A[c] = (D << 24) | (D >>> 8); y[c] = (D << 16) | (D >>> 16); n[c] = (D << 8) | (D >>> 24); e[c] = D; D = (16843009 * C) ^ (65537 * z) ^ (257 * q) ^ (16843008 * c); f[h] = (D << 24) | (D >>> 8); r[h] = (D << 16) | (D >>> 16); k[h] = (D << 8) | (D >>> 24); g[h] = D; c ? ((c = q ^ a[a[a[C ^ q]]]), (l ^= a[a[l]])) : (c = l = 1); } })(); var m = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54]; v = v.AES = u.extend({ _doReset: function () { var a = this._key, b = a.words, c = a.sigBytes / 4; a = 4 * ((this._nRounds = c + 6) + 1); for (var l = (this._keySchedule = []), h = 0; h < a; h++) if (h < c) l[h] = b[h]; else { var q = l[h - 1]; h % c ? 6 < c && 4 == h % c && (q = (x[q >>> 24] << 24) | (x[(q >>> 16) & 255] << 16) | (x[(q >>> 8) & 255] << 8) | x[q & 255]) : ((q = (q << 8) | (q >>> 24)), (q = (x[q >>> 24] << 24) | (x[(q >>> 16) & 255] << 16) | (x[(q >>> 8) & 255] << 8) | x[q & 255]), (q ^= m[(h / c) | 0] << 24)); l[h] = l[h - c] ^ q; } b = this._invKeySchedule = []; for (c = 0; c < a; c++) (h = a - c), (q = c % 4 ? l[h] : l[h - 4]), (b[c] = 4 > c || 4 >= h ? q : f[x[q >>> 24]] ^ r[x[(q >>> 16) & 255]] ^ k[x[(q >>> 8) & 255]] ^ g[x[q & 255]]); }, encryptBlock: function (a, b) { this._doCryptBlock(a, b, this._keySchedule, A, y, n, e, x); }, decryptBlock: function (a, b) { var c = a[b + 1]; a[b + 1] = a[b + 3]; a[b + 3] = c; this._doCryptBlock(a, b, this._invKeySchedule, f, r, k, g, w); c = a[b + 1]; a[b + 1] = a[b + 3]; a[b + 3] = c; }, _doCryptBlock: function (a, b, c, l, h, q, z, C) { for ( var D = this._nRounds, B = a[b] ^ c[0], F = a[b + 1] ^ c[1], H = a[b + 2] ^ c[2], G = a[b + 3] ^ c[3], I = 4, M = 1; M < D; M++ ) { var J = l[B >>> 24] ^ h[(F >>> 16) & 255] ^ q[(H >>> 8) & 255] ^ z[G & 255] ^ c[I++], K = l[F >>> 24] ^ h[(H >>> 16) & 255] ^ q[(G >>> 8) & 255] ^ z[B & 255] ^ c[I++], L = l[H >>> 24] ^ h[(G >>> 16) & 255] ^ q[(B >>> 8) & 255] ^ z[F & 255] ^ c[I++]; G = l[G >>> 24] ^ h[(B >>> 16) & 255] ^ q[(F >>> 8) & 255] ^ z[H & 255] ^ c[I++]; B = J; F = K; H = L; } J = ((C[B >>> 24] << 24) | (C[(F >>> 16) & 255] << 16) | (C[(H >>> 8) & 255] << 8) | C[G & 255]) ^ c[I++]; K = ((C[F >>> 24] << 24) | (C[(H >>> 16) & 255] << 16) | (C[(G >>> 8) & 255] << 8) | C[B & 255]) ^ c[I++]; L = ((C[H >>> 24] << 24) | (C[(G >>> 16) & 255] << 16) | (C[(B >>> 8) & 255] << 8) | C[F & 255]) ^ c[I++]; G = ((C[G >>> 24] << 24) | (C[(B >>> 16) & 255] << 16) | (C[(F >>> 8) & 255] << 8) | C[H & 255]) ^ c[I++]; a[b] = J; a[b + 1] = K; a[b + 2] = L; a[b + 3] = G; }, keySize: 8, }); t.AES = u._createHelper(v); })(); (function () { var t = JDDSecCryptoJS, u = t.lib, v = u.WordArray, x = u.Hasher, w = []; u = t.algo.SHA1 = x.extend({ _doReset: function () { this._hash = new v.init([ 1732584193, 4023233417, 2562383102, 271733878, 3285377520, ]); }, _doProcessBlock: function (A, y) { for ( var n = this._hash.words, e = n[0], f = n[1], r = n[2], k = n[3], g = n[4], m = 0; 80 > m; m++ ) { if (16 > m) w[m] = A[y + m] | 0; else { var a = w[m - 3] ^ w[m - 8] ^ w[m - 14] ^ w[m - 16]; w[m] = (a << 1) | (a >>> 31); } a = ((e << 5) | (e >>> 27)) + g + w[m]; a = 20 > m ? a + (((f & r) | (~f & k)) + 1518500249) : 40 > m ? a + ((f ^ r ^ k) + 1859775393) : 60 > m ? a + (((f & r) | (f & k) | (r & k)) - 1894007588) : a + ((f ^ r ^ k) - 899497514); g = k; k = r; r = (f << 30) | (f >>> 2); f = e; e = a; } n[0] = (n[0] + e) | 0; n[1] = (n[1] + f) | 0; n[2] = (n[2] + r) | 0; n[3] = (n[3] + k) | 0; n[4] = (n[4] + g) | 0; }, _doFinalize: function () { var A = this._data, y = A.words, n = 8 * this._nDataBytes, e = 8 * A.sigBytes; y[e >>> 5] |= 128 << (24 - (e % 32)); y[(((e + 64) >>> 9) << 4) + 14] = Math.floor(n / 4294967296); y[(((e + 64) >>> 9) << 4) + 15] = n; A.sigBytes = 4 * y.length; this._process(); return this._hash; }, clone: function () { var A = x.clone.call(this); A._hash = this._hash.clone(); return A; }, }); t.SHA1 = x._createHelper(u); t.HmacSHA1 = x._createHmacHelper(u); })(); (function () { var t = JDDSecCryptoJS, u = t.channel; u.Downlink = { deBase32: function (v) { if (void 0 == v || "" == v || null == v) return ""; var x = t.enc.Hex.parse("30313233343536373839616263646566"), w = t.enc.Hex.parse("724e5428476f307361374d3233784a6c"); return t.AES.decrypt( { ciphertext: t.enc.Base32.parse(v), }, w, { mode: t.mode.CBC, padding: t.pad.Pkcs7, iv: x, } ).toString(t.enc.Utf8); }, deBase64: function (v) { return ""; }, }; u.Uplink = { enAsBase32: function (v) { return ""; }, enAsBase64: function (v) { return ""; }, }; })(); (function () { var t = JDDSecCryptoJS, u = t.lib.WordArray; t.enc.Base32 = { stringify: function (v) { var x = v.words, w = v.sigBytes, A = this._map; v.clamp(); v = []; for (var y = 0; y < w; y += 5) { for (var n = [], e = 0; 5 > e; e++) n[e] = (x[(y + e) >>> 2] >>> (24 - ((y + e) % 4) * 8)) & 255; n = [ (n[0] >>> 3) & 31, ((n[0] & 7) << 2) | ((n[1] >>> 6) & 3), (n[1] >>> 1) & 31, ((n[1] & 1) << 4) | ((n[2] >>> 4) & 15), ((n[2] & 15) << 1) | ((n[3] >>> 7) & 1), (n[3] >>> 2) & 31, ((n[3] & 3) << 3) | ((n[4] >>> 5) & 7), n[4] & 31, ]; for (e = 0; 8 > e && y + 0.625 * e < w; e++) v.push(A.charAt(n[e])); } if ((x = A.charAt(32))) for (; v.length % 8; ) v.push(x); return v.join(""); }, parse: function (v) { var x = v.length, w = this._map, A = w.charAt(32); A && ((A = v.indexOf(A)), -1 != A && (x = A)); A = []; for (var y = 0, n = 0; n < x; n++) { var e = n % 8; if (0 != e && 2 != e && 5 != e) { var f = 255 & (w.indexOf(v.charAt(n - 1)) << (40 - 5 * e) % 8), r = 255 & (w.indexOf(v.charAt(n)) >>> (5 * e - 3) % 8); e = e % 3 ? 0 : 255 & (w.indexOf(v.charAt(n - 2)) << (3 == e ? 6 : 7)); A[y >>> 2] |= (f | r | e) << (24 - (y % 4) * 8); y++; } } return u.create(A, y); }, _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567", }; })(); class JDDMAC { static t() { return "00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F 63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC 51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E 7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D 806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA 11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F 30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D" .split(" ") .map(function (v) { return parseInt(v, 16); }); } mac(v) { for (var x = -1, w = 0, A = v.length; w < A; w++) x = (x >>> 8) ^ t[(x ^ v.charCodeAt(w)) & 255]; return (x ^ -1) >>> 0; } } var _CurrentPageProtocol = "https:" == document.location.protocol ? "https://" : "http://", _JdJrTdRiskDomainName = window.__fp_domain || "gia.jd.com", _url_query_str = "", _root_domain = "", _CurrentPageUrl = (function () { var t = document.location.href.toString(); try { _root_domain = /^https?:\/\/(?:\w+\.)*?(\w*\.(?:com\.cn|cn|com|net|id))[\\\/]*/.exec( t )[1]; } catch (v) {} var u = t.indexOf("?"); 0 < u && ((_url_query_str = t.substring(u + 1)), 500 < _url_query_str.length && (_url_query_str = _url_query_str.substring(0, 499)), (t = t.substring(0, u))); return (t = t.substring(_CurrentPageProtocol.length)); })(), jd_shadow__ = (function () { try { var t = JDDSecCryptoJS, u = []; u.push(_CurrentPageUrl); var v = t.lib.UUID.generateUuid(); u.push(v); var x = new Date().getTime(); u.push(x); var w = t.SHA1(u.join("")).toString().toUpperCase(); u = []; u.push("JD3"); u.push(w); var A = new JDDMAC().mac(u.join("")); u.push(A); var y = t.enc.Hex.parse("30313233343536373839616263646566"), n = t.enc.Hex.parse("4c5751554935255042304e6458323365"), e = u.join(""); return t.AES.encrypt(t.enc.Utf8.parse(e), n, { mode: t.mode.CBC, padding: t.pad.Pkcs7, iv: y, }).ciphertext.toString(t.enc.Base32); } catch (f) { console.log(f); } })(); var td_collect = new (function () { function t() { var n = window.webkitRTCPeerConnection || window.mozRTCPeerConnection || window.RTCPeerConnection; if (n) { var e = function (k) { var g = /([0-9]{1,3}(\.[0-9]{1,3}){3})/, m = /\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*/; try { var a = g.exec(k); if (null == a || 0 == a.length || void 0 == a) a = m.exec(k); var b = a[1]; void 0 === f[b] && w.push(b); f[b] = !0; } catch (c) {} }, f = {}; try { var r = new n({ iceServers: [ { url: "stun:stun.services.mozilla.com", }, ], }); } catch (k) {} try { void 0 === r && (r = new n({ iceServers: [], })); } catch (k) {} if (r || window.mozRTCPeerConnection) try { r.createDataChannel("chat", { reliable: !1, }); } catch (k) {} r && ((r.onicecandidate = function (k) { k.candidate && e(k.candidate.candidate); }), r.createOffer( function (k) { r.setLocalDescription( k, function () {}, function () {} ); }, function () {} ), setTimeout(function () { try { r.localDescription.sdp.split("\n").forEach(function (k) { 0 === k.indexOf("a=candidate:") && e(k); }); } catch (k) {} }, 800)); } } function u(n) { var e; return (e = document.cookie.match( new RegExp("(^| )" + n + "=([^;]*)(;|$)") )) ? e[2] : ""; } function v() { function n(g) { var m = {}; r.style.fontFamily = g; document.body.appendChild(r); m.height = r.offsetHeight; m.width = r.offsetWidth; document.body.removeChild(r); return m; } var e = ["monospace", "sans-serif", "serif"], f = [], r = document.createElement("span"); r.style.fontSize = "72px"; r.style.visibility = "hidden"; r.innerHTML = "mmmmmmmmmmlli"; for (var k = 0; k < e.length; k++) f[k] = n(e[k]); this.checkSupportFont = function (g) { for (var m = 0; m < f.length; m++) { var a = n(g + "," + e[m]), b = f[m]; if (a.height !== b.height || a.width !== b.width) return !0; } return !1; }; } function x(n) { var e = {}; e.name = n.name; e.filename = n.filename.toLowerCase(); e.description = n.description; void 0 !== n.version && (e.version = n.version); e.mimeTypes = []; for (var f = 0; f < n.length; f++) { var r = n[f], k = {}; k.description = r.description; k.suffixes = r.suffixes; k.type = r.type; e.mimeTypes.push(k); } return e; } this.bizId = ""; this.bioConfig = { type: "42", operation: 1, duraTime: 2, interval: 50, }; this.worder = null; this.deviceInfo = { userAgent: "", isJdApp: !1, isJrApp: !1, sdkToken: "", fp: "", eid: "", }; this.isRpTok = !1; this.obtainLocal = function (n) { n = "undefined" !== typeof n && n ? !0 : !1; var e = {}; try { var f = document.cookie.replace( /(?:(?:^|.*;\s*)3AB9D23F7A4B3C9B\s*=\s*([^;]*).*$)|^.*$/, "$1" ); 0 !== f.length && (e.cookie = f); } catch (k) {} try { window.localStorage && null !== window.localStorage && 0 !== window.localStorage.length && (e.localStorage = window.localStorage.getItem("3AB9D23F7A4B3C9B")); } catch (k) {} try { window.sessionStorage && null !== window.sessionStorage && (e.sessionStorage = window.sessionStorage["3AB9D23F7A4B3C9B"]); } catch (k) {} try { p.globalStorage && (e.globalStorage = window.globalStorage[".localdomain"]["3AB9D23F7A4B3C9B"]); } catch (k) {} try { d && "function" == typeof d.load && "function" == typeof d.getAttribute && (d.load("jdgia_user_data"), (e.userData = d.getAttribute("3AB9D23F7A4B3C9B"))); } catch (k) {} try { E.indexedDbId && (e.indexedDb = E.indexedDbId); } catch (k) {} try { E.webDbId && (e.webDb = E.webDbId); } catch (k) {} try { for (var r in e) if (32 < e[r].length) { _JdEid = e[r]; n || (_eidFlag = !0); break; } } catch (k) {} try { ("undefined" === typeof _JdEid || 0 >= _JdEid.length) && this.db("3AB9D23F7A4B3C9B"); if ("undefined" === typeof _JdEid || 0 >= _JdEid.length) _JdEid = u("3AB9D23F7A4B3C9B"); if ("undefined" === typeof _JdEid || 0 >= _JdEid.length) _eidFlag = !0; } catch (k) {} return _JdEid; }; var w = [], A = "Abadi MT Condensed Light;Adobe Fangsong Std;Adobe Hebrew;Adobe Ming Std;Agency FB;Arab;Arabic Typesetting;Arial Black;Batang;Bauhaus 93;Bell MT;Bitstream Vera Serif;Bodoni MT;Bookman Old Style;Braggadocio;Broadway;Calibri;Californian FB;Castellar;Casual;Centaur;Century Gothic;Chalkduster;Colonna MT;Copperplate Gothic Light;DejaVu LGC Sans Mono;Desdemona;DFKai-SB;Dotum;Engravers MT;Eras Bold ITC;Eurostile;FangSong;Forte;Franklin Gothic Heavy;French Script MT;Gabriola;Gigi;Gisha;Goudy Old Style;Gulim;GungSeo;Haettenschweiler;Harrington;Hiragino Sans GB;Impact;Informal Roman;KacstOne;Kino MT;Kozuka Gothic Pr6N;Lohit Gujarati;Loma;Lucida Bright;Lucida Fax;Magneto;Malgun Gothic;Matura MT Script Capitals;Menlo;MingLiU-ExtB;MoolBoran;MS PMincho;MS Reference Sans Serif;News Gothic MT;Niagara Solid;Nyala;Palace Script MT;Papyrus;Perpetua;Playbill;PMingLiU;Rachana;Rockwell;Sawasdee;Script MT Bold;Segoe Print;Showcard Gothic;SimHei;Snap ITC;TlwgMono;Tw Cen MT Condensed Extra Bold;Ubuntu;Umpush;Univers;Utopia;Vladimir Script;Wide Latin".split( ";" ), y = "4game;AdblockPlugin;AdobeExManCCDetect;AdobeExManDetect;Alawar NPAPI utils;Aliedit Plug-In;Alipay Security Control 3;AliSSOLogin plugin;AmazonMP3DownloaderPlugin;AOL Media Playback Plugin;AppUp;ArchiCAD;AVG SiteSafety plugin;Babylon ToolBar;Battlelog Game Launcher;BitCometAgent;Bitdefender QuickScan;BlueStacks Install Detector;CatalinaGroup Update;Citrix ICA Client;Citrix online plug-in;Citrix Receiver Plug-in;Coowon Update;DealPlyLive Update;Default Browser Helper;DivX Browser Plug-In;DivX Plus Web Player;DivX VOD Helper Plug-in;doubleTwist Web Plugin;Downloaders plugin;downloadUpdater;eMusicPlugin DLM6;ESN Launch Mozilla Plugin;ESN Sonar API;Exif Everywhere;Facebook Plugin;File Downloader Plug-in;FileLab plugin;FlyOrDie Games Plugin;Folx 3 Browser Plugin;FUZEShare;GDL Object Web Plug-in 16.00;GFACE Plugin;Ginger;Gnome Shell Integration;Google Earth Plugin;Google Earth Plug-in;Google Gears 0.5.33.0;Google Talk Effects Plugin;Google Update;Harmony Firefox Plugin;Harmony Plug-In;Heroes & Generals live;HPDetect;Html5 location provider;IE Tab plugin;iGetterScriptablePlugin;iMesh plugin;Kaspersky Password Manager;LastPass;LogMeIn Plugin 1.0.0.935;LogMeIn Plugin 1.0.0.961;Ma-Config.com plugin;Microsoft Office 2013;MinibarPlugin;Native Client;Nitro PDF Plug-In;Nokia Suite Enabler Plugin;Norton Identity Safe;npAPI Plugin;NPLastPass;NPPlayerShell;npTongbuAddin;NyxLauncher;Octoshape Streaming Services;Online Storage plug-in;Orbit Downloader;Pando Web Plugin;Parom.TV player plugin;PDF integrado do WebKit;PDF-XChange Viewer;PhotoCenterPlugin1.1.2.2;Picasa;PlayOn Plug-in;QQ2013 Firefox Plugin;QQDownload Plugin;QQMiniDL Plugin;QQMusic;RealDownloader Plugin;Roblox Launcher Plugin;RockMelt Update;Safer Update;SafeSearch;Scripting.Dictionary;SefClient Plugin;Shell.UIHelper;Silverlight Plug-In;Simple Pass;Skype Web Plugin;SumatraPDF Browser Plugin;Symantec PKI Client;Tencent FTN plug-in;Thunder DapCtrl NPAPI Plugin;TorchHelper;Unity Player;Uplay PC;VDownloader;Veetle TV Core;VLC Multimedia Plugin;Web Components;WebKit-integrierte PDF;WEBZEN Browser Extension;Wolfram Mathematica;WordCaptureX;WPI Detector 1.4;Yandex Media Plugin;Yandex PDF Viewer;YouTube Plug-in;zako".split( ";" ); this.toJson = "object" === typeof JSON && JSON.stringify; this.init = function () { _fingerprint_step = 6; t(); _fingerprint_step = 7; "function" !== typeof this.toJson && (this.toJson = function (n) { var e = typeof n; if ("undefined" === e || null === n) return "null"; if ("number" === e || "boolean" === e) return n + ""; if ("object" === e && n && n.constructor === Array) { e = []; for (var f = 0; n.length > f; f++) e.push(this.toJson(n[f])); return "[" + (e + "]"); } if ("object" === e) { e = []; for (f in n) n.hasOwnProperty(f) && e.push('"' + f + '":' + this.toJson(n[f])); return "{" + (e + "}"); } }); this.sdkCollectInit(); }; this.sdkCollectInit = function () { try { try { bp_bizid && (this.bizId = bp_bizid); } catch (f) { this.bizId = "jsDefault"; } var n = navigator.userAgent.toLowerCase(), e = !n.match(/(iphone|ipad|ipod)/i) && (-1 < n.indexOf("android") || -1 < n.indexOf("adr")); this.deviceInfo.isJdApp = -1 < n.indexOf("jdapp"); this.deviceInfo.isJrApp = -1 < n.indexOf("jdjr"); this.deviceInfo.userAgent = navigator.userAgent; this.deviceInfo.isAndroid = e; this.createWorker(); } catch (f) {} }; this.db = function (n, e) { try { _fingerprint_step = "m"; if (window.openDatabase) { var f = window.openDatabase( "sqlite_jdtdstorage", "", "jdtdstorage", 1048576 ); void 0 !== e && "" != e ? f.transaction(function (r) { r.executeSql( "CREATE TABLE IF NOT EXISTS cache(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, value TEXT NOT NULL, UNIQUE (name))", [], function (k, g) {}, function (k, g) {} ); r.executeSql( "INSERT OR REPLACE INTO cache(name, value) VALUES(?, ?)", [n, e], function (k, g) {}, function (k, g) {} ); }) : f.transaction(function (r) { r.executeSql( "SELECT value FROM cache WHERE name=?", [n], function (k, g) { 1 <= g.rows.length && (_JdEid = g.rows.item(0).value); }, function (k, g) {} ); }); } _fingerprint_step = "n"; } catch (r) {} }; this.setCookie = function (n, e) { void 0 !== e && "" != e && (document.cookie = n + "=" + e + "; expires=Tue, 31 Dec 2030 00:00:00 UTC; path=/; domain=" + _root_domain); }; this.tdencrypt = function (n) { n = this.toJson(n); n = encodeURIComponent(n); var e = "", f = 0; do { var r = n.charCodeAt(f++); var k = n.charCodeAt(f++); var g = n.charCodeAt(f++); var m = r >> 2; r = ((r & 3) << 4) | (k >> 4); var a = ((k & 15) << 2) | (g >> 6); var b = g & 63; isNaN(k) ? (a = b = 64) : isNaN(g) && (b = 64); e = e + "23IL k; k++) (C = q[k]), void 0 !== screen[C] && (z[C] = screen[C]); q = ["devicePixelRatio", "screenTop", "screenLeft"]; l = {}; for (k = 0; q.length > k; k++) (C = q[k]), void 0 !== window[C] && (l[C] = window[C]); e.p = h; e.w = l; e.s = z; e.sc = f; e.tz = n.getTimezoneOffset(); e.lil = w.sort().join("|"); e.wil = ""; f = {}; try { (f.cookie = navigator.cookieEnabled), (f.localStorage = !!window.localStorage), (f.sessionStorage = !!window.sessionStorage), (f.globalStorage = !!window.globalStorage), (f.indexedDB = !!window.indexedDB); } catch (D) {} e.ss = f; e.ts.deviceTime = n.getTime(); e.ts.deviceEndTime = new Date().getTime(); return this.tdencrypt(e); }; this.collectSdk = function (n) { try { var e = this, f = !1, r = e.getLocal("BATQW722QTLYVCRD"); if (null != r && void 0 != r && "" != r) try { var k = JSON.parse(r), g = new Date().getTime(); null != k && void 0 != k.t && "number" == typeof k.t && (12e5 >= g - k.t && void 0 != k.tk && null != k.tk && "" != k.tk && k.tk.startsWith("jdd") ? ((e.deviceInfo.sdkToken = k.tk), (f = !0)) : void 0 != k.tk && null != k.tk && "" != k.tk && (e.deviceInfo.sdkToken = k.tk)); } catch (m) {} r = !1; e.deviceInfo.isJdApp ? ((e.deviceInfo.clientVersion = navigator.userAgent.split(";")[2]), (r = 0 < e.compareVersion(e.deviceInfo.clientVersion, "7.0.2")) && !f && e.getJdSdkCacheToken(function (m) { e.deviceInfo.sdkToken = m; (null != m && "" != m && m.startsWith("jdd")) || e.getJdBioToken(n); })) : e.deviceInfo.isJrApp && ((e.deviceInfo.clientVersion = navigator.userAgent.match( /clientVersion=([^&]*)(&|$)/ )[1]), (r = 0 < e.compareVersion(e.deviceInfo.clientVersion, "4.6.0")) && !f && e.getJdJrSdkCacheToken(function (m) { e.deviceInfo.sdkToken = m; (null != m && "" != m && m.startsWith("jdd")) || e.getJdJrBioToken(n); })); "function" == typeof n && n(e.deviceInfo); } catch (m) {} }; this.compareVersion = function (n, e) { try { if (n === e) return 0; var f = n.split("."); var r = e.split("."); for (n = 0; n < f.length; n++) { var k = parseInt(f[n]); if (!r[n]) return 1; var g = parseInt(r[n]); if (k < g) break; if (k > g) return 1; } } catch (m) {} return -1; }; this.isWKWebView = function () { return this.deviceInfo.userAgent.match(/supportJDSHWK/i) || 1 == window._is_jdsh_wkwebview ? !0 : !1; }; this.getErrorToken = function (n) { try { if (n) { var e = (n + "").match(/"token":"(.*?)"/); if (e && 1 < e.length) return e[1]; } } catch (f) {} return ""; }; this.getJdJrBioToken = function (n) { var e = this; "undefined" != typeof JrBridge && null != JrBridge && "undefined" != typeof JrBridge._version && (0 > e.compareVersion(JrBridge._version, "2.0.0") ? console.error( "\u6865\u7248\u672c\u4f4e\u4e8e2.0\u4e0d\u652f\u6301bio" ) : JrBridge.callNative( { type: e.bioConfig.type, operation: e.bioConfig.operation, biometricData: { bizId: e.bizId, duraTime: e.bioConfig.duraTime, interval: e.bioConfig.interval, }, }, function (f) { try { "object" != typeof f && (f = JSON.parse(f)), (e.deviceInfo.sdkToken = f.token); } catch (r) { console.error(r); } null != e.deviceInfo.sdkToken && "" != e.deviceInfo.sdkToken && ((f = { tk: e.deviceInfo.sdkToken, t: new Date().getTime(), }), e.store("BATQW722QTLYVCRD", JSON.stringify(f))); } )); }; this.getJdJrSdkCacheToken = function (n) { var e = this; try { "undefined" == typeof JrBridge || null == JrBridge || "undefined" == typeof JrBridge._version || 0 > e.compareVersion(JrBridge._version, "2.0.0") || JrBridge.callNative( { type: e.bioConfig.type, operation: 5, biometricData: { bizId: e.bizId, duraTime: e.bioConfig.duraTime, interval: e.bioConfig.interval, }, }, function (f) { var r = ""; try { "object" != typeof f && (f = JSON.parse(f)), (r = f.token); } catch (k) { console.error(k); } null != r && "" != r && "function" == typeof n && (n(r), r.startsWith("jdd") && ((f = { tk: r, t: new Date().getTime(), }), e.store("BATQW722QTLYVCRD", JSON.stringify(f)))); } ); } catch (f) {} }; this.getJdBioToken = function (n) { var e = this; n = JSON.stringify({ businessType: "bridgeBiologicalProbe", callBackName: "_bioDeviceCb", params: { pin: "", jsonData: { type: e.bioConfig.type, operation: e.bioConfig.operation, data: { bizId: e.bizId, duraTime: e.bioConfig.duraTime, interval: e.bioConfig.interval, }, biometricData: { bizId: e.bizId, duraTime: e.bioConfig.duraTime, interval: e.bioConfig.interval, }, }, }, }); e.isWKWebView() ? window.webkit.messageHandlers.JDAppUnite.postMessage({ method: "notifyMessageToNative", params: n, }) : window.JDAppUnite && window.JDAppUnite.notifyMessageToNative(n); window._bioDeviceCb = function (f) { try { var r = "object" == typeof f ? f : JSON.parse(f); if (void 0 != r && null != r && "0" != r.status) return; null != r.data.token && void 0 != r.data.token && "" != r.data.token && (e.deviceInfo.sdkToken = r.data.token); } catch (k) { (f = e.getErrorToken(f)), null != f && "" != f && (e.deviceInfo.sdkToken = f); } null != e.deviceInfo.sdkToken && "" != e.deviceInfo.sdkToken && ((f = { tk: e.deviceInfo.sdkToken, t: new Date().getTime(), }), e.store("BATQW722QTLYVCRD", JSON.stringify(f))); }; }; this.getJdSdkCacheToken = function (n) { try { var e = this, f = JSON.stringify({ businessType: "bridgeBiologicalProbe", callBackName: "_bioDeviceSdkCacheCb", params: { pin: "", jsonData: { type: e.bioConfig.type, operation: 5, data: { bizId: e.bizId, duraTime: e.bioConfig.duraTime, interval: e.bioConfig.interval, }, biometricData: { bizId: e.bizId, duraTime: e.bioConfig.duraTime, interval: e.bioConfig.interval, }, }, }, }); e.isWKWebView() ? window.webkit.messageHandlers.JDAppUnite.postMessage({ method: "notifyMessageToNative", params: f, }) : window.JDAppUnite && window.JDAppUnite.notifyMessageToNative(f); window._bioDeviceSdkCacheCb = function (r) { var k = ""; try { var g = "object" == typeof r ? r : JSON.parse(r); if (void 0 != g && null != g && "0" != g.status) return; k = g.data.token; } catch (m) { k = e.getErrorToken(r); } null != k && "" != k && "function" == typeof n && (n(k), k.startsWith("jdd") && ((r = { tk: k, t: new Date().getTime(), }), e.store("BATQW722QTLYVCRD", JSON.stringify(r)))); }; } catch (r) {} }; this.store = function (n, e) { try { this.setCookie(n, e); } catch (f) {} try { window.localStorage && window.localStorage.setItem(n, e); } catch (f) {} try { window.sessionStorage && window.sessionStorage.setItem(n, e); } catch (f) {} try { window.globalStorage && window.globalStorage[".localdomain"].setItem(n, e); } catch (f) {} try { this.db(n, _JdEid); } catch (f) {} }; this.getLocal = function (n) { var e = {}, f = null; try { var r = document.cookie.replace( new RegExp("(?:(?:^|.*;\\s*)" + n + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1" ); 0 !== r.length && (e.cookie = r); } catch (g) {} try { window.localStorage && null !== window.localStorage && 0 !== window.localStorage.length && (e.localStorage = window.localStorage.getItem(n)); } catch (g) {} try { window.sessionStorage && null !== window.sessionStorage && (e.sessionStorage = window.sessionStorage[n]); } catch (g) {} try { p.globalStorage && (e.globalStorage = window.globalStorage[".localdomain"][n]); } catch (g) {} try { d && "function" == typeof d.load && "function" == typeof d.getAttribute && (d.load("jdgia_user_data"), (e.userData = d.getAttribute(n))); } catch (g) {} try { E.indexedDbId && (e.indexedDb = E.indexedDbId); } catch (g) {} try { E.webDbId && (e.webDb = E.webDbId); } catch (g) {} try { for (var k in e) if (32 < e[k].length) { f = e[k]; break; } } catch (g) {} try { if (null == f || "undefined" === typeof f || 0 >= f.length) f = u(n); } catch (g) {} return f; }; this.createWorker = function () { if (window.Worker) { try { var n = new Blob( [ "onmessage = function (event) {\n var data = JSON.parse(event.data);\n try {\n var httpRequest;\n try {\n httpRequest = new XMLHttpRequest();\n } catch (h) {}\n if (!httpRequest)\n try {\n httpRequest = new (window['ActiveXObject'])('Microsoft.XMLHTTP')\n } catch (l) {}\n if (!httpRequest)\n try {\n httpRequest = new (window['ActiveXObject'])('Msxml2.XMLHTTP')\n } catch (r) {}\n if (!httpRequest)\n try {\n httpRequest = new (window['ActiveXObject'])('Msxml3.XMLHTTP')\n } catch (n) {}\n\n if(data){\n httpRequest['open']('POST', data.url, false);\n httpRequest['setRequestHeader']('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');\n httpRequest['onreadystatechange'] = function () {\n if (4 === httpRequest['readyState'] && 200 === httpRequest['status']) {\n postMessage(httpRequest.responseText);\n }\n };\n httpRequest['send'](data.data);\n }\n\n }catch (e){console.error(e);}\n};", ], { type: "application/javascript", } ); } catch (e) { (window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder), (n = new BlobBuilder()), n.append( "onmessage = function (event) {\n var data = JSON.parse(event.data);\n try {\n var httpRequest;\n try {\n httpRequest = new XMLHttpRequest();\n } catch (h) {}\n if (!httpRequest)\n try {\n httpRequest = new (window['ActiveXObject'])('Microsoft.XMLHTTP')\n } catch (l) {}\n if (!httpRequest)\n try {\n httpRequest = new (window['ActiveXObject'])('Msxml2.XMLHTTP')\n } catch (r) {}\n if (!httpRequest)\n try {\n httpRequest = new (window['ActiveXObject'])('Msxml3.XMLHTTP')\n } catch (n) {}\n\n if(data){\n httpRequest['open']('POST', data.url, false);\n httpRequest['setRequestHeader']('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');\n httpRequest['onreadystatechange'] = function () {\n if (4 === httpRequest['readyState'] && 200 === httpRequest['status']) {\n postMessage(httpRequest.responseText);\n }\n };\n httpRequest['send'](data.data);\n }\n\n }catch (e){console.error(e);}\n};" ), (n = n.getBlob()); } try { this.worker = new Worker(URL.createObjectURL(n)); } catch (e) {} } }; this.reportWorker = function (n, e, f, r) { try { null != this.worker && (this.worker.postMessage( JSON.stringify({ url: n, data: e, success: !1, async: !1, }) ), (this.worker.onmessage = function (k) {})); } catch (k) {} }; })(); function td_collect_exe() { _fingerprint_step = 8; var t = td_collect.collect(); td_collect.collectSdk(); var u = "string" === typeof orderId ? orderId : "", v = "undefined" !== typeof jdfp_pinenp_ext && jdfp_pinenp_ext ? 2 : 1; u = { pin: _jdJrTdCommonsObtainPin(v), oid: u, p: "https:" == document.location.protocol ? "s" : "h", fp: risk_jd_local_fingerprint, ctype: v, v: "2.7.10.4", f: "3", }; try { (u.o = _CurrentPageUrl), (u.qs = _url_query_str); } catch (w) {} _fingerprint_step = 9; 0 >= _JdEid.length && ((_JdEid = td_collect.obtainLocal()), 0 < _JdEid.length && (_eidFlag = !0)); u.fc = _JdEid; try { u.t = jd_risk_token_id; } catch (w) {} try { if ("undefined" != typeof gia_fp_qd_uuid && 0 <= gia_fp_qd_uuid.length) u.qi = gia_fp_qd_uuid; else { var x = _JdJrRiskClientStorage.jdtdstorage_cookie("qd_uid"); u.qi = void 0 == x ? "" : x; } } catch (w) {} "undefined" != typeof jd_shadow__ && 0 < jd_shadow__.length && (u.jtb = jd_shadow__); try { td_collect.deviceInfo && void 0 != td_collect.deviceInfo && null != td_collect.deviceInfo.sdkToken && "" != td_collect.deviceInfo.sdkToken ? ((u.stk = td_collect.deviceInfo.sdkToken), (td_collect.isRpTok = !0)) : (td_collect.isRpTok = !1); } catch (w) { td_collect.isRpTok = !1; } x = td_collect.tdencrypt(u); // console.log(u) return { a: x, d: t }; } function _jdJrTdCommonsObtainPin(t) { var u = ""; "string" === typeof jd_jr_td_risk_pin && 1 == t ? (u = jd_jr_td_risk_pin) : "string" === typeof pin ? (u = pin) : "object" === typeof pin && "string" === typeof jd_jr_td_risk_pin && (u = jd_jr_td_risk_pin); return u; } function getBody(userAgent, url = document.location.href) { navigator.userAgent = userAgent; let href = url; let choose = /((https?:)\/\/([^\/]+))(.+)/.exec(url); let [, origin, protocol, host, pathname] = choose; document.location.href = href; document.location.origin = origin; document.location.protocol = protocol; document.location.host = host; document.location.pathname = pathname; const JF = new JdJrTdRiskFinger(); let fp = JF.f.get(function (t) { risk_jd_local_fingerprint = t; return t; }); let arr = td_collect_exe(); return { fp, ...arr }; } function Env(t, e) { "undefined" != typeof process && JSON.stringify(process.env).indexOf("GITHUB") > -1 && process.exit(0); class s { constructor(t) { this.env = t; } send(t, e = "GET") { t = "string" == typeof t ? { url: t } : t; let s = this.get; return ( "POST" === e && (s = this.post), new Promise((e, i) => { s.call(this, t, (t, s, r) => { t ? i(t) : e(s); }); }) ); } get(t) { return this.send.call(this.env, t); } post(t) { return this.send.call(this.env, t, "POST"); } } return new (class { constructor(t, e) { (this.name = t), (this.http = new s(this)), (this.data = null), (this.dataFile = "box.dat"), (this.logs = []), (this.isMute = !1), (this.isNeedRewrite = !1), (this.logSeparator = "\n"), (this.startTime = new Date().getTime()), Object.assign(this, e), this.log("", `🔔${this.name}, 开始!`); } isNode() { return "undefined" != typeof module && !!module.exports; } isQuanX() { return "undefined" != typeof $task; } isSurge() { return "undefined" != typeof $httpClient && "undefined" == typeof $loon; } isLoon() { return "undefined" != typeof $loon; } toObj(t, e = null) { try { return JSON.parse(t); } catch { return e; } } toStr(t, e = null) { try { return JSON.stringify(t); } catch { return e; } } getjson(t, e) { let s = e; const i = this.getdata(t); if (i) try { s = JSON.parse(this.getdata(t)); } catch {} return s; } setjson(t, e) { try { return this.setdata(JSON.stringify(t), e); } catch { return !1; } } getScript(t) { return new Promise((e) => { this.get({ url: t }, (t, s, i) => e(i)); }); } runScript(t, e) { return new Promise((s) => { let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); i = i ? i.replace(/\n/g, "").trim() : i; let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); (r = r ? 1 * r : 20), (r = e && e.timeout ? e.timeout : r); const [o, h] = i.split("@"), n = { url: `http://${h}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": o, Accept: "*/*" }, }; this.post(n, (t, e, i) => s(i)); }).catch((t) => this.logErr(t)); } loaddata() { if (!this.isNode()) return {}; { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), i = !s && this.fs.existsSync(e); if (!s && !i) return {}; { const i = s ? t : e; try { return JSON.parse(this.fs.readFileSync(i)); } catch (t) { return {}; } } } } writedata() { if (this.isNode()) { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), i = !s && this.fs.existsSync(e), r = JSON.stringify(this.data); s ? this.fs.writeFileSync(t, r) : i ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r); } } lodash_get(t, e, s) { const i = e.replace(/\[(\d+)\]/g, ".$1").split("."); let r = t; for (const t of i) if (((r = Object(r)[t]), void 0 === r)) return s; return r; } lodash_set(t, e, s) { return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), (e .slice(0, -1) .reduce( (t, s, i) => Object(t[s]) === t[s] ? t[s] : (t[s] = Math.abs(e[i + 1]) >> 0 == +e[i + 1] ? [] : {}), t )[e[e.length - 1]] = s), t); } getdata(t) { let e = this.getval(t); if (/^@/.test(t)) { const [, s, i] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; if (r) try { const t = JSON.parse(r); e = t ? this.lodash_get(t, i, "") : e; } catch (t) { e = ""; } } return e; } setdata(t, e) { let s = !1; if (/^@/.test(e)) { const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e), o = this.getval(i), h = i ? ("null" === o ? null : o || "{}") : "{}"; try { const e = JSON.parse(h); this.lodash_set(e, r, t), (s = this.setval(JSON.stringify(e), i)); } catch (e) { const o = {}; this.lodash_set(o, r, t), (s = this.setval(JSON.stringify(o), i)); } } else s = this.setval(t, e); return s; } getval(t) { return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? ((this.data = this.loaddata()), this.data[t]) : (this.data && this.data[t]) || null; } setval(t, e) { return this.isSurge() || this.isLoon() ? $persistentStore.write(t, e) : this.isQuanX() ? $prefs.setValueForKey(t, e) : this.isNode() ? ((this.data = this.loaddata()), (this.data[e] = t), this.writedata(), !0) : (this.data && this.data[e]) || null; } initGotEnv(t) { (this.got = this.got ? this.got : require("got")), (this.cktough = this.cktough ? this.cktough : require("tough-cookie")), (this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar()), t && ((t.headers = t.headers ? t.headers : {}), void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)); } get(t, e = () => {}) { t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"]), this.isSurge() || this.isLoon() ? (this.isSurge() && this.isNeedRewrite && ((t.headers = t.headers || {}), Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.get(t, (t, s, i) => { !t && s && ((s.body = i), (s.statusCode = s.status)), e(t, s, i); })) : this.isQuanX() ? (this.isNeedRewrite && ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then( (t) => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o); }, (t) => e(t) )) : this.isNode() && (this.initGotEnv(t), this.got(t) .on("redirect", (t, e) => { try { if (t.headers["set-cookie"]) { const s = t.headers["set-cookie"] .map(this.cktough.Cookie.parse) .toString(); s && this.ckjar.setCookieSync(s, null), (e.cookieJar = this.ckjar); } } catch (t) { this.logErr(t); } }) .then( (t) => { const { statusCode: s, statusCode: i, headers: r, body: o, } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o); }, (t) => { const { message: s, response: i } = t; e(s, i, i && i.body); } )); } post(t, e = () => {}) { if ( (t.body && t.headers && !t.headers["Content-Type"] && (t.headers["Content-Type"] = "application/x-www-form-urlencoded"), t.headers && delete t.headers["Content-Length"], this.isSurge() || this.isLoon()) ) this.isSurge() && this.isNeedRewrite && ((t.headers = t.headers || {}), Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.post(t, (t, s, i) => { !t && s && ((s.body = i), (s.statusCode = s.status)), e(t, s, i); }); else if (this.isQuanX()) (t.method = "POST"), this.isNeedRewrite && ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then( (t) => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o); }, (t) => e(t) ); else if (this.isNode()) { this.initGotEnv(t); const { url: s, ...i } = t; this.got.post(s, i).then( (t) => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o); }, (t) => { const { message: s, response: i } = t; e(s, i, i && i.body); } ); } } time(t, e = null) { const s = e ? new Date(e) : new Date(); let i = { "M+": s.getMonth() + 1, "d+": s.getDate(), "H+": s.getHours(), "m+": s.getMinutes(), "s+": s.getSeconds(), "q+": Math.floor((s.getMonth() + 3) / 3), S: s.getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace( RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length) )); for (let e in i) new RegExp("(" + e + ")").test(t) && (t = t.replace( RegExp.$1, 1 == RegExp.$1.length ? i[e] : ("00" + i[e]).substr(("" + i[e]).length) )); return t; } msg(e = t, s = "", i = "", r) { const o = (t) => { if (!t) return t; if ("string" == typeof t) return this.isLoon() ? t : this.isQuanX() ? { "open-url": t } : this.isSurge() ? { url: t } : void 0; if ("object" == typeof t) { if (this.isLoon()) { let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"]; return { openUrl: e, mediaUrl: s }; } if (this.isQuanX()) { let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl; return { "open-url": e, "media-url": s }; } if (this.isSurge()) { let e = t.url || t.openUrl || t["open-url"]; return { url: e }; } } }; if ( (this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r))), !this.isMuteLog) ) { let t = ["", "==============📣系统通知📣=============="]; t.push(e), s && t.push(s), i && t.push(i), console.log(t.join("\n")), (this.logs = this.logs.concat(t)); } } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)); } logErr(t, e) { const s = !this.isSurge() && !this.isQuanX() && !this.isLoon(); s ? this.log("", `❗️${this.name}, 错误!`, t.stack) : this.log("", `❗️${this.name}, 错误!`, t); } wait(t) { return new Promise((e) => setTimeout(e, t)); } done(t = {}) { const e = new Date().getTime(), s = (e - this.startTime) / 1e3; this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t); } })(t, e); } function random(min, max) { return Math.floor(Math.random() * (max - min)) + min; } function getCodeList(url) { return new Promise(resolve => { const options = { url: `${url}?${new Date()}`, "timeout": 10000, headers: { "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/87.0.4280.88" } }; $.get(options, async (err, resp, data) => { try { if (err) { // $.log(err) $.getCodeListerr = false } else { if (data) data = JSON.parse(data) $.getCodeListerr = true } } catch (e) { $.logErr(e, resp) data = null; } finally { resolve(data); } }) }) } // prettier-ignore function Env(t,e){"undefined"!=typeof process&&JSON.stringify(process.env).indexOf("GITHUB")>-1&&process.exit(0);class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise((e,i)=>{s.call(this,t,(t,s,r)=>{t?i(t):e(s)})})}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`🔔${this.name}, 开始!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const i=this.getdata(t);if(i)try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise(e=>{this.get({url:t},(t,s,i)=>e(i))})}runScript(t,e){return new Promise(s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let r=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");r=r?1*r:20,r=e&&e.timeout?e.timeout:r;const[o,h]=i.split("@"),n={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,Accept:"*/*"}};this.post(n,(t,e,i)=>s(i))}).catch(t=>this.logErr(t))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),r=JSON.stringify(this.data);s?this.fs.writeFileSync(t,r):i?this.fs.writeFileSync(e,r):this.fs.writeFileSync(t,r)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of i)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==t?t:(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{},t)[e[e.length-1]]=s,t)}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,r]=/^@(.*?)\.(.*?)$/.exec(e),o=this.getval(i),h=i?"null"===o?null:o||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),i)}catch(e){const o={};this.lodash_set(o,r,t),s=this.setval(JSON.stringify(o),i)}}else s=this.setval(t,e);return s}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,e){return this.isSurge()||this.isLoon()?$persistentStore.write(t,e):this.isQuanX()?$prefs.setValueForKey(t,e):this.isNode()?(this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0):this.data&&this.data[e]||null}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,e=(()=>{})){t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon()?(this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)})):this.isQuanX()?(this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t))):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();s&&this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)}))}post(t,e=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.post(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method="POST",this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t));else if(this.isNode()){this.initGotEnv(t);const{url:s,...i}=t;this.got.post(s,i).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)})}}time(t,e=null){const s=e?new Date(e):new Date;let i={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in i)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?i[e]:("00"+i[e]).substr((""+i[e]).length)));return t}msg(e=t,s="",i="",r){const o=t=>{if(!t)return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:this.isSurge()?{url:t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}if(this.isSurge()){let e=t.url||t.openUrl||t["open-url"];return{url:e}}}};if(this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r))),!this.isMuteLog){let t=["","==============📣系统通知📣=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`❗️${this.name}, 错误!`,t.stack):this.log("",`❗️${this.name}, 错误!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`🔔${this.name}, 结束! 🕛 ${s} 秒`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,e)}