某网站Web端爬虫攻防大赛题目交流
本帖最后由 漁滒 于 2020-11-15 14:59 编辑比赛网站的链接http://match.yuanrenxue.com/list,比赛目前已经结束
题目序号 题目内容 是否完成
第一题 js 混淆 - 源码乱码 已完成
第二题 js 混淆 - 动态cookie 1 已完成
第三题 访问逻辑 - 推心置腹 已完成
第四题 雪碧图、样式干扰 已完成
第五题 js 混淆 - 乱码增强 已完成
第六题 js 混淆 - 回溯已完成
第七题 动态字体,随风漂移 已完成
第八题 验证码 - 图文点选 已完成
第九题 js 混淆 - 动态cookie 2已完成
第十题 js 混淆 - 重放攻击对抗仅答案
第十一题app抓取 - so文件协议破解 已完成
第十二题入门级js 已完成
第十三题入门级cookie_某乐V1.0版 已完成
第一题【接口-查询参数-值加密】
开打题目后按f12,会出现setInterval函数,直接禁用断点,然后就可以继续执行了,f5刷新一下
在NetWork窗口可以查看到需要的数据来源于【http://match.yuanrenxue.com/api/match/1】接口,而请求中有一个m参数是加密的,也就是说需要找到这个m参数的生成方法,那么在全局中搜索【api/match/1】
可以搜索到这个内容,复制这一段内的script代码进行格式化
其主要内容大概是这些
window.url = '/api/match/1';
request = function() {
var timestamp = Date.parse(new Date());
var m = oo0O0(timestamp.toString()) + window.f;
var list = {
"page": window.page,
"m": m + '丨' + timestamp / 1000
};
$.ajax({
url: window.url,
dataType: "json",
async: false,
data: list,
type: "GET",
beforeSend: function(request) {},
})
};
这里可以清楚的看到m参数是由oo0O0函数的结果加上window.f得到的,继续查找一下oo0O0函数
也是在当前的页面,只是在不同的script标签下,将这个script标签下的代码进行格式化可以得到下面
function oo0O0(mw) {
window.b = '';
for (var i = 0, len = window.a.length; i < len; i++) {
console.log(window.a);
window.b += String(window.a() - i - window.c)
}
var U = ['W5r5W6VdIHZcT8kU', 'WQ8CWRaxWQirAW=='];
var J = function(o, E) {
o = o - 0x0;
var N = U;
if (J['bSSGte'] === undefined) {
var Y = function(w) {
var m = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=',
T = String(w)['replace'](/=+$/, '');
var A = '';
for (var C = 0x0, b, W, l = 0x0; W = T['charAt'](l++);~W && (b = C % 0x4 ? b * 0x40 + W : W, C++ % 0x4) ? A += String['fromCharCode'](0xff & b >> (-0x2 * C & 0x6)) : 0x0) {
W = m['indexOf'](W)
}
return A
};
var t = function(w, m) {
var T = [],
A = 0x0,
C, b = '',
W = '';
w = Y(w);
for (var R = 0x0, v = w['length']; R < v; R++) {
W += '%' + ('00' + w['charCodeAt'](R)['toString'](0x10))['slice'](-0x2)
}
w = decodeURIComponent(W);
var l;
for (l = 0x0; l < 0x100; l++) {
T = l
}
for (l = 0x0; l < 0x100; l++) {
A = (A + T + m['charCodeAt'](l % m['length'])) % 0x100, C = T, T = T, T = C
}
l = 0x0, A = 0x0;
for (var L = 0x0; L < w['length']; L++) {
l = (l + 0x1) % 0x100, A = (A + T) % 0x100, C = T, T = T, T = C, b += String['fromCharCode'](w['charCodeAt'](L) ^ T[(T + T) % 0x100])
}
return b
};
J['luAabU'] = t, J['qlVPZg'] = {}, J['bSSGte'] = !! []
}
var H = J['qlVPZg'];
return H === undefined ? (J['TUDBIJ'] === undefined && (J['TUDBIJ'] = !! []), N = J['luAabU'](N, E), J['qlVPZg'] = N) : N = H, N
};
eval(atob(window['b'])dQW')](J('0x1', 'GTu!'), '\x27' + mw + '\x27'));
return ''
}
这里有一点是这个oo0O0函数的返回值是一个空值,也就是说m的值完全由window.f决定。
尝试在控制台输出一下window.f
但是当我们执行一次oo0O0函数后,再输出window.f,这时候window.f被修改了
同时会输出一大堆乱码,那就说明oo0O0函数会修改window.f的值,下面详细看看oo0O0函数,其内部并没有出现window.f这个变量,但是在返回值前有一句比较特殊的代码
eval(atob(window['b'])dQW')](J('0x1', 'GTu!'), '\x27' + mw + '\x27'));
这里将window['b']的值进行base64解码后还进行了一些函数的传参运算,那么在控制台输出一下【atob(window['b'])】,看看是什么内容
输出后可以看到是一段script代码,将其进行格式化
var hexcase = 0;
var b64pad = "";
var chrsz = 16;
function hex_md5(a) {
return binl2hex(core_md5(str2binl(a), a.length * chrsz))
}
function b64_md5(a) {
return binl2b64(core_md5(str2binl(a), a.length * chrsz))
}
function str_md5(a) {
return binl2str(core_md5(str2binl(a), a.length * chrsz))
}
function hex_hmac_md5(a, b) {
return binl2hex(core_hmac_md5(a, b))
}
function b64_hmac_md5(a, b) {
return binl2b64(core_hmac_md5(a, b))
}
function str_hmac_md5(a, b) {
return binl2str(core_hmac_md5(a, b))
}
function md5_vm_test() {
return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72"
}
function core_md5(p, k) {
p |= 128 << ((k) % 32);
p[(((k + 64) >>> 9) << 4) + 14] = k;
var o = 1732584193;
var n = -271733879;
var m = -1732584194;
var l = 271733878;
for (var g = 0; g < p.length; g += 16) {
var j = o;
var h = n;
var f = m;
var e = l;
o = md5_ff(o, n, m, l, p, 7, -680976936);
l = md5_ff(l, o, n, m, p, 12, -389564586);
m = md5_ff(m, l, o, n, p, 17, 606105819);
n = md5_ff(n, m, l, o, p, 22, -1044525330);
o = md5_ff(o, n, m, l, p, 7, -176418897);
l = md5_ff(l, o, n, m, p, 12, 1200080426);
m = md5_ff(m, l, o, n, p, 17, -1473231341);
n = md5_ff(n, m, l, o, p, 22, -45705983);
o = md5_ff(o, n, m, l, p, 7, 1770035416);
l = md5_ff(l, o, n, m, p, 12, -1958414417);
m = md5_ff(m, l, o, n, p, 17, -42063);
n = md5_ff(n, m, l, o, p, 22, -1990404162);
o = md5_ff(o, n, m, l, p, 7, 1804660682);
l = md5_ff(l, o, n, m, p, 12, -40341101);
m = md5_ff(m, l, o, n, p, 17, -1502002290);
n = md5_ff(n, m, l, o, p, 22, 1236535329);
o = md5_gg(o, n, m, l, p, 5, -165796510);
l = md5_gg(l, o, n, m, p, 9, -1069501632);
m = md5_gg(m, l, o, n, p, 14, 643717713);
n = md5_gg(n, m, l, o, p, 20, -373897302);
o = md5_gg(o, n, m, l, p, 5, -701558691);
l = md5_gg(l, o, n, m, p, 9, 38016083);
m = md5_gg(m, l, o, n, p, 14, -660478335);
n = md5_gg(n, m, l, o, p, 20, -405537848);
o = md5_gg(o, n, m, l, p, 5, 568446438);
l = md5_gg(l, o, n, m, p, 9, -1019803690);
m = md5_gg(m, l, o, n, p, 14, -187363961);
n = md5_gg(n, m, l, o, p, 20, 1163531501);
o = md5_gg(o, n, m, l, p, 5, -1444681467);
l = md5_gg(l, o, n, m, p, 9, -51403784);
m = md5_gg(m, l, o, n, p, 14, 1735328473);
n = md5_gg(n, m, l, o, p, 20, -1921207734);
o = md5_hh(o, n, m, l, p, 4, -378558);
l = md5_hh(l, o, n, m, p, 11, -2022574463);
m = md5_hh(m, l, o, n, p, 16, 1839030562);
n = md5_hh(n, m, l, o, p, 23, -35309556);
o = md5_hh(o, n, m, l, p, 4, -1530992060);
l = md5_hh(l, o, n, m, p, 11, 1272893353);
m = md5_hh(m, l, o, n, p, 16, -155497632);
n = md5_hh(n, m, l, o, p, 23, -1094730640);
o = md5_hh(o, n, m, l, p, 4, 681279174);
l = md5_hh(l, o, n, m, p, 11, -358537222);
m = md5_hh(m, l, o, n, p, 16, -722881979);
n = md5_hh(n, m, l, o, p, 23, 76029189);
o = md5_hh(o, n, m, l, p, 4, -640364487);
l = md5_hh(l, o, n, m, p, 11, -421815835);
m = md5_hh(m, l, o, n, p, 16, 530742520);
n = md5_hh(n, m, l, o, p, 23, -995338651);
o = md5_ii(o, n, m, l, p, 6, -198630844);
l = md5_ii(l, o, n, m, p, 10, 11261161415);
m = md5_ii(m, l, o, n, p, 15, -1416354905);
n = md5_ii(n, m, l, o, p, 21, -57434055);
o = md5_ii(o, n, m, l, p, 6, 1700485571);
l = md5_ii(l, o, n, m, p, 10, -1894446606);
m = md5_ii(m, l, o, n, p, 15, -1051523);
n = md5_ii(n, m, l, o, p, 21, -2054922799);
o = md5_ii(o, n, m, l, p, 6, 1873313359);
l = md5_ii(l, o, n, m, p, 10, -30611744);
m = md5_ii(m, l, o, n, p, 15, -1560198380);
n = md5_ii(n, m, l, o, p, 21, 1309151649);
o = md5_ii(o, n, m, l, p, 6, -145523070);
l = md5_ii(l, o, n, m, p, 10, -1120210379);
m = md5_ii(m, l, o, n, p, 15, 718787259);
n = md5_ii(n, m, l, o, p, 21, -343485551);
o = safe_add(o, j);
n = safe_add(n, h);
m = safe_add(m, f);
l = safe_add(l, e)
}
return Array(o, n, m, l)
}
function md5_cmn(h, e, d, c, g, f) {
return safe_add(bit_rol(safe_add(safe_add(e, h), safe_add(c, f)), g), d)
}
function md5_ff(g, f, k, j, e, i, h) {
return md5_cmn((f & k) | ((~f) & j), g, f, e, i, h)
}
function md5_gg(g, f, k, j, e, i, h) {
return md5_cmn((f & j) | (k & (~j)), g, f, e, i, h)
}
function md5_hh(g, f, k, j, e, i, h) {
return md5_cmn(f ^ k ^ j, g, f, e, i, h)
}
function md5_ii(g, f, k, j, e, i, h) {
return md5_cmn(k ^ (f | (~j)), g, f, e, i, h)
}
function core_hmac_md5(c, f) {
var e = str2binl(c);
if (e.length > 16) {
e = core_md5(e, c.length * chrsz)
}
var a = Array(16),
d = Array(16);
for (var b = 0; b < 16; b++) {
a = e ^ 909522486;
d = e ^ 1549556828
}
var g = core_md5(a.concat(str2binl(f)), 512 + f.length * chrsz);
return core_md5(d.concat(g), 512 + 128)
}
function safe_add(a, d) {
var c = (a & 65535) + (d & 65535);
var b = (a >> 16) + (d >> 16) + (c >> 16);
return (b << 16) | (c & 65535)
}
function bit_rol(a, b) {
return (a << b) | (a >>> (32 - b))
}
function str2binl(d) {
var c = Array();
var a = (1 << chrsz) - 1;
for (var b = 0; b < d.length * chrsz; b += chrsz) {
c |= (d.charCodeAt(b / chrsz) & a) << (b % 32)
}
return c
}
function binl2str(c) {
var d = "";
var a = (1 << chrsz) - 1;
for (var b = 0; b < c.length * 32; b += chrsz) {
d += String.fromCharCode((c >>> (b % 32)) & a)
}
return d
}
function binl2hex(c) {
var b = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var d = "";
for (var a = 0; a < c.length * 4; a++) {
d += b.charAt((c >> ((a % 4) * 8 + 4)) & 15) + b.charAt((c >> ((a % 4) * 8)) & 15)
}
return d
}
function binl2b64(d) {
var c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var f = "";
for (var b = 0; b < d.length * 4; b += 3) {
var e = (((d >> 8 * (b % 4)) & 255) << 16) | (((d >> 8 * ((b + 1) % 4)) & 255) << 8) | ((d >> 8 * ((b + 2) % 4)) & 255);
for (var a = 0; a < 4; a++) {
if (b * 8 + a * 6 > d.length * 32) {
f += b64pad
} else {
f += c.charAt((e >> 6 * (3 - a)) & 63)
}
}
}
return f
};
window.f = hex_md5(mwqqppz)
在函数的最后可以看到window.f是通过hex_md5函数运算得到的
但是这里的【mwqqppz】变量并没有出现的地方,此时就往前看看上一段代码传入的是什么参数
可以看到这里有一些小混淆,此时将上面函数中出现的下方代码输入到控制台,并跟着输入【J('0x0', ']dQW')】和【J('0x1', 'GTu!')】
var U = ['W5r5W6VdIHZcT8kU', 'WQ8CWRaxWQirAW=='];
var J = function(o, E) {
o = o - 0x0;
var N = U;
if (J['bSSGte'] === undefined) {
var Y = function(w) {
var m = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=',
T = String(w)['replace'](/=+$/, '');
var A = '';
for (var C = 0x0, b, W, l = 0x0; W = T['charAt'](l++);~W && (b = C % 0x4 ? b * 0x40 + W : W, C++ % 0x4) ? A += String['fromCharCode'](0xff & b >> (-0x2 * C & 0x6)) : 0x0) {
W = m['indexOf'](W)
}
return A
};
var t = function(w, m) {
var T = [],
A = 0x0,
C, b = '',
W = '';
w = Y(w);
for (var R = 0x0, v = w['length']; R < v; R++) {
W += '%' + ('00' + w['charCodeAt'](R)['toString'](0x10))['slice'](-0x2)
}
w = decodeURIComponent(W);
var l;
for (l = 0x0; l < 0x100; l++) {
T = l
}
for (l = 0x0; l < 0x100; l++) {
A = (A + T + m['charCodeAt'](l % m['length'])) % 0x100, C = T, T = T, T = C
}
l = 0x0, A = 0x0;
for (var L = 0x0; L < w['length']; L++) {
l = (l + 0x1) % 0x100, A = (A + T) % 0x100, C = T, T = T, T = C, b += String['fromCharCode'](w['charCodeAt'](L) ^ T[(T + T) % 0x100])
}
return b
};
J['luAabU'] = t, J['qlVPZg'] = {}, J['bSSGte'] = !! []
}
var H = J['qlVPZg'];
return H === undefined ? (J['TUDBIJ'] === undefined && (J['TUDBIJ'] = !! []), N = J['luAabU'](N, E), J['qlVPZg'] = N) : N = H, N
};
可以得到其解混淆后的两个值
还原一下就变成了
eval(atob(window['b'])["replace"]("mwqqppz", '\x27' + mw + '\x27'));
这是就清楚了。将mwqqppz替换为我们传入的变量进行计算
此时只要将最后一句的
window.f = hex_md5(mwqqppz)
修改为
var mwqqppz = process.argv;
console.log(hex_md5(mwqqppz));
就可以给我们进行调用,修改好后另存为01.js
接下来就是简单的写一下接口调用的代码,其中的m值通过用nodejs调用js文件进行计算,需要先安装nodejs
import requests
import time
import os
def main():
money = 0
number = 0
ts = str(int(time.time()))
nodejs = os.popen('node 01 '+ts+'000')
m = nodejs.read().replace('\n', '') + '丨' + ts
nodejs.close()
for page in range(1, 6):
url = 'http://match.yuanrenxue.com/api/match/1?page='+str(page)+'&m='+m
response = requests.get(url).json()
for each in response['data']:
money += each['value']
number += 1
print(money)
print(number)
print(money // number)
# 总价:235000
# 总数:50
# 均值:4700
if __name__ == '__main__':
main()
第二题【接口-请求头-值加密】
因为第二题是动态cookie,为了避免其他cookie的影响,所以使用浏览器的无痕模式进行调试,按f12并选中【Preserve log】
此时可以看到接口中的cookie有一个m参数是加密的
继续往前找到第二条数据出现过这个相同的值
但是当去到第一条数据的时候,就没有这个值了
而且这个点开【Preview】并没有任何内容,而且在响应头也没有set-cookie,那就说明这个页面里面有script代码设置了【document.cookie】的属性
此时关闭f12,使用Fiddler.exe进行抓包,此时可以看到第一次返回的是一段script代码
使用网页提供的ob混淆专解测试版V0.1,进行反混淆,因为代码比较长,只贴出核心代码
function _0x165f49(_0x3601cd, _0x44836c) {
document["cookie"] = "m" + _0x53b25d() + "=" + _0xb4d4cd(_0x3601cd) + "|" + _0x3601cd + "; path=/";
location["reload"]();
}
function _0x19c5c1(_0x5d05a8, _0x3f4653) {
return Date["parse"](new Date());
}
_0x165f49(_0x19c5c1());
这里可以看到执行了_0x165f49函数,这里设置了document.cookie的值,并对页面重新加载
其中计算m参数的函数就是_0xb4d4cd函数,将这个函数复制出来,并复制出其调用到的函数,重新封装另存为02.js
qz = ;
function _0x38927c(_0x31c213, _0x15819d) {
var _0x1ebfad = (65535 & _0x31c213) + (65535 & _0x15819d);
return (_0x31c213 >> 16) + (_0x15819d >> 16) + (_0x1ebfad >> 16) << 16 | 65535 & _0x1ebfad;
}
function _0x42ea6b(_0x4311af, _0x1d26cb) {
return _0x4311af << _0x1d26cb | _0x4311af >>> 32 - _0x1d26cb;
}
function _0x17df27(_0x149b94, _0x40ae03, _0x4c4c51, _0x896443, _0x2066e1, _0x339641) {
return _0x38927c(_0x42ea6b(_0x38927c(_0x38927c(_0x40ae03, _0x149b94), _0x38927c(_0x896443, _0x339641)), _0x2066e1), _0x4c4c51);
}
function _0x4eb065(_0x4701be, _0x41f76b, _0x58a63e, _0x333b01, _0x1fac47, _0x37993e, _0xd21e0d) {
return _0x17df27(_0x41f76b & _0x58a63e | ~_0x41f76b & _0x333b01, _0x4701be, _0x41f76b, _0x1fac47, _0x37993e, _0xd21e0d);
}
function _0x1f13e1(_0x29d2ad, _0x3bd4bc, _0xff4102, _0x3979c2, _0xd8d449, _0x78fa9b, _0xe01ea7) {
return _0x17df27(_0x3bd4bc & _0x3979c2 | _0xff4102 & ~_0x3979c2, _0x29d2ad, _0x3bd4bc, _0xd8d449, _0x78fa9b, _0xe01ea7);
}
function _0x3e3606(_0x2ef909, _0x3bd8d3, _0x892bc5, _0x13c904, _0x2342a0, _0x35f109, _0x19c0e1) {
return _0x17df27(_0x3bd8d3 ^ _0x892bc5 ^ _0x13c904, _0x2ef909, _0x3bd8d3, _0x2342a0, _0x35f109, _0x19c0e1);
}
function _0x3d2668(_0x4cd0a8, _0xe871c7, _0x5f0915, _0x10cf3a, _0x929107, _0x39dc73, _0x10c64e) {
return _0x17df27(_0x5f0915 ^ (_0xe871c7 | ~_0x10cf3a), _0x4cd0a8, _0xe871c7, _0x929107, _0x39dc73, _0x10c64e);
}
function _0x2f0e92(_0x492976, _0x1ca955) {
_0x492976 |= 128 << _0x1ca955 % 32, _0x492976 = _0x1ca955;
if (qz) {
var _0x2856ca,
_0x56938f,
_0x2632f2,
_0x1fc011,
_0x1b5b0b,
_0x27964a = 1732584193,
_0x5b3ae5 = -271733879,
_0x529d7c = -1732584194,
_0x4813f1 = 271733878;
} else {
var _0x2856ca,
_0x56938f,
_0x2632f2,
_0x1fc011,
_0x1b5b0b,
_0x27964a = 0,
_0x5b3ae5 = -0,
_0x529d7c = -0,
_0x4813f1 = 0;
}
for (_0x2856ca = 0; _0x2856ca < _0x492976["length"]; _0x2856ca += 16) _0x56938f = _0x27964a, _0x2632f2 = _0x5b3ae5, _0x1fc011 = _0x529d7c, _0x1b5b0b = _0x4813f1, _0x27964a = _0x4eb065(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976, 7, -680876936), _0x4813f1 = _0x4eb065(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976, 12, -389564586), _0x529d7c = _0x4eb065(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976, 17, 606105819), _0x5b3ae5 = _0x4eb065(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976, 22, -1044525330), _0x27964a = _0x4eb065(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976, 7, -176418897), _0x4813f1 = _0x4eb065(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976, 12, 1200080426), _0x529d7c = _0x4eb065(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976, 17, -1473231341), _0x5b3ae5 = _0x4eb065(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976, 22, -45705983), _0x27964a = _0x4eb065(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976, 7, 1770035416), _0x4813f1 = _0x4eb065(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976, 12, -1958414417), _0x529d7c = _0x4eb065(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976, 17, -42063), _0x5b3ae5 = _0x4eb065(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976, 22, -1990404162), _0x27964a = _0x4eb065(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976, 7, 1804603682), _0x4813f1 = _0x4eb065(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976, 12, -40341101), _0x529d7c = _0x4eb065(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976, 17, -1502882290), _0x5b3ae5 = _0x4eb065(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976, 22, 1236535329), _0x27964a = _0x1f13e1(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976, 5, -165796510), _0x4813f1 = _0x1f13e1(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976, 9, -1069501632), _0x529d7c = _0x1f13e1(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976, 14, 643717713), _0x5b3ae5 = _0x1f13e1(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976, 20, -373897302), _0x27964a = _0x1f13e1(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976, 5, -701558691), _0x4813f1 = _0x1f13e1(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976, 9, 38016083), _0x529d7c = _0x1f13e1(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976, 14, -660478335), _0x5b3ae5 = _0x1f13e1(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976, 20, -405537848), _0x27964a = _0x1f13e1(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976, 5, 568446438), _0x4813f1 = _0x1f13e1(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976, 9, -1019803690), _0x529d7c = _0x1f13e1(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976, 14, -187363961), _0x5b3ae5 = _0x1f13e1(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976, 20, 1163531501), _0x27964a = _0x1f13e1(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976, 5, -1444681467), _0x4813f1 = _0x1f13e1(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976, 9, -51403784), _0x529d7c = _0x1f13e1(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976, 14, 1735328473), _0x5b3ae5 = _0x1f13e1(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976, 20, -1926607734), _0x27964a = _0x3e3606(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976, 4, -378558), _0x4813f1 = _0x3e3606(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976, 11, -2022574463), _0x529d7c = _0x3e3606(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976, 16, 1839030562), _0x5b3ae5 = _0x3e3606(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976, 23, -35309556), _0x27964a = _0x3e3606(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976, 4, -1530992060), _0x4813f1 = _0x3e3606(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976, 11, 1272893353), _0x529d7c = _0x3e3606(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976, 16, -155497632), _0x5b3ae5 = _0x3e3606(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976, 23, -1094730640), _0x27964a = _0x3e3606(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976, 4, 681279174), _0x4813f1 = _0x3e3606(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976, 11, -358537222), _0x529d7c = _0x3e3606(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976, 16, -722521979), _0x5b3ae5 = _0x3e3606(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976, 23, 76029189), _0x27964a = _0x3e3606(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976, 4, -640364487), _0x4813f1 = _0x3e3606(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976, 11, -421815835), _0x529d7c = _0x3e3606(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976, 16, 530742520), _0x5b3ae5 = _0x3e3606(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976, 23, -995338651), _0x27964a = _0x3d2668(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976, 6, -198630844), _0x4813f1 = _0x3d2668(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976, 10, 1126891415), _0x529d7c = _0x3d2668(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976, 15, -1416354905), _0x5b3ae5 = _0x3d2668(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976, 21, -57434055), _0x27964a = _0x3d2668(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976, 6, 1700485571), _0x4813f1 = _0x3d2668(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976, 10, -1894986606), _0x529d7c = _0x3d2668(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976, 15, -1051523), _0x5b3ae5 = _0x3d2668(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976, 21, -2054922799), _0x27964a = _0x3d2668(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976, 6, 1873313359), _0x4813f1 = _0x3d2668(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976, 10, -30611744), _0x529d7c = _0x3d2668(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976, 15, -1560198380), _0x5b3ae5 = _0x3d2668(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976, 21, 1309151649), _0x27964a = _0x3d2668(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976, 6, -145523070), _0x4813f1 = _0x3d2668(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976, 10, -1120210379), _0x529d7c = _0x3d2668(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976, 15, 718787259), _0x5b3ae5 = _0x3d2668(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976, 21, -343485441), _0x27964a = _0x38927c(_0x27964a, _0x56938f), _0x5b3ae5 = _0x38927c(_0x5b3ae5, _0x2632f2), _0x529d7c = _0x38927c(_0x529d7c, _0x1fc011), _0x4813f1 = _0x38927c(_0x4813f1, _0x1b5b0b);
return ;
}
function _0x5c0cba(_0x4b9003) {
var _0x7b6654,
_0x81a5a1 = [];
for (_0x81a5a1[(_0x4b9003["length"] >> 2) - 1] = undefined, _0x7b6654 = 0; _0x7b6654 < _0x81a5a1["length"]; _0x7b6654 += 1) _0x81a5a1 = 0;
var _0x4a7c5e = 8 * _0x4b9003["length"];
for (_0x7b6654 = 0; _0x7b6654 < _0x4a7c5e; _0x7b6654 += 8) _0x81a5a1 |= (255 & _0x4b9003["charCodeAt"](_0x7b6654 / 8)) << _0x7b6654 % 32;
return _0x81a5a1;
}
function _0x2498e1(_0xab1134) {
var _0x5b6833,
_0x2717db,
_0x55f85f = "0123456789abcdef",
_0xf7fa75 = "";
for (_0x2717db = 0; _0x2717db < _0xab1134["length"]; _0x2717db += 1) _0x5b6833 = _0xab1134["charCodeAt"](_0x2717db), _0xf7fa75 += _0x55f85f["charAt"](_0x5b6833 >>> 4 & 15) + _0x55f85f["charAt"](15 & _0x5b6833);
return _0xf7fa75;
}
function _0x43808a(_0xcb333) {
var _0x49e4a7,
_0x530dde = "",
_0x568ad8 = 32 * _0xcb333["length"];
for (_0x49e4a7 = 0; _0x49e4a7 < _0x568ad8; _0x49e4a7 += 8) _0x530dde += String["fromCharCode"](_0xcb333 >>> _0x49e4a7 % 32 & 255);
return _0x530dde;
}
function _0x4094fc(_0x2be7d6) {
return _0x1faf49(_0x102c73(_0x2be7d6));
}
function _0x102c73(_0x4c0c42) {
return unescape(encodeURIComponent(_0x4c0c42));
}
function _0x1faf49(_0x5cf3e8) {
return _0x43808a(_0x2f0e92(_0x5c0cba(_0x5cf3e8), 8 * _0x5cf3e8["length"]));
}
function _0x554c2e(_0x1bfaf7) {
return _0x2498e1(_0x4094fc(_0x1bfaf7));
}
function _0xb4d4cd(_0x3ed615) {
return _0x554c2e(_0x3ed615);
}
var mwqqppz = process.argv;
console.log(_0x115b90(mwqqppz));
此时就可以给我们使用nodejs进行调用计算了
接下来编写请求的代码
import requests
import time
import os
def main():
sums = 0
ts = str(int(time.time()))+'000'
nodejs = os.popen('node 02 '+ts)
m = nodejs.read().replace('\n', '') + '|' + ts
nodejs.close()
headers = {
'cookie': 'm='+m,
}
for page in range(1, 6):
url = 'http://match.yuanrenxue.com/api/match/2?page='+str(page)
response = requests.get(url, headers=headers).json()
for each in response['data']:
sums += each['value']
print(sums)
# 总和:248974
if __name__ == '__main__':
main()
第三题【接口-请求头】
第三题相对于前面两题就简单很多了,服务器检验的请求头的三个参数【Accept-Language】【Cookie】【Referer】自行多次测试可以发现
其中【Accept-Language】和【Referer】都是固定值,就没有什么好说的了
主要是【Cookie】里面的【sessionid】
因为有cookie的影响,依然是使用浏览器的无痕模式打开,并先选中【Preserve log】
这里可以看到sessionid的值,在全局中搜索sessionid的值
这里可以看到在http://match.yuanrenxue.com/logo中首次出现这个值,那么整个逻辑就清楚了
首先访问http://match.yuanrenxue.com/logo,在响应头中取得sessionid的值,然后带进接口请求
下面的python请求的代码,其中题目要求的是求出出现频率最高的数字
import requests
import re
from collections import Counter
def main():
Registration = []
for page in range(1, 6):
url = 'http://match.yuanrenxue.com/logo'
headers = {
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,ko;q=0.6',
'Referer': 'http://match.yuanrenxue.com/match/3',
}
response = requests.post(url, headers=headers)
sessionid = re.findall('(?<=sessionid=).+?(?=;)', response.headers['Set-Cookie'])
headers = {
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,ko;q=0.6',
'Cookie': 'sessionid='+sessionid,
'Referer': 'http://match.yuanrenxue.com/match/3',
}
url = 'http://match.yuanrenxue.com/api/match/3?page='+str(page)
response = requests.get(url, headers=headers).json()
for each in response['data']:
Registration.append(each['value'])
print(Counter(Registration))
print(Counter(Registration).most_common(1))
# {8717: 7, 2838: 1, 7609: 1, 6923: 1, 5325: 1, 4118: 1, 8884: 1, 2680: 1, 3721: 1, 8490: 1, 3148: 1, 6025: 1, 8526: 1, 8529: 1, 6481: 1, 9489: 1, 6599: 1, 5500: 1, 185: 1, 8498: 1, 6102: 1, 9222: 1, 2008: 1, 9827: 1, 8224: 1, 2929: 1, 3762: 1, 567: 1, 672: 1, 9524: 1, 7159: 1, 986: 1, 505: 1, 6535: 1, 9491: 1, 3612: 1, 9095: 1, 7357: 1, 9307: 1, 5650: 1, 2109: 1, 23: 1, 2110: 1, 2792: 1}
# 最高 8717
if __name__ == '__main__':
main()
第四题【响应-字体反爬-CSS反爬】
第四题接口没有设置任何反爬,直接获取数据即可
可以看到返回的是一个json,其中的info字段是一段html文本,格式化一下html代码,因为比较长,只复制小部分
<td>
<img
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAIAAAAl5NuSAAACy0lEQVQ4EZ1UTWgTQRSeJNtsNyXbxmZF3BWkgpocRC9NDyYn8RD04A9YKKRUiCAV8VAPimg9VEE8KaV6Cg1YgxRyEAoePGgvaS+tCLYg7Sk5yBooW9Nk003i7My83c2mFnVZeN977/vem3m7M54jR4+j/324DqHcGrtVHTn3SxF13kx6kc6rmz3zs8KzvIvsaessD9dy98sK33SxiOtXP/ePprk1O+e1oZzaWXisOpS8ruPXB4y6lPiRyxoy+Oai2CMbLyfKInMCK2/l5ImDJ0/h9/DwVLio00RTjG09T4HEEo893TpDtoiQUJjqvzzptZa3lBXij8Iqk1SHRmsxhmlnuX41VqURfbVvImvVBpAXZpYE5iiVm5coJGI5rUdZJlDIcSWQOG0m1wPNd6JJOlEivn66wnia8Mn9PaDCgn9DY1ga2CVjM8WNqLzLwiUuA+QO6/tW6mJBsXHeREQswZRVtfOnsYtsaJAVDbJNLE42QIu0n2QbNr8NzZX84NeVYQwxOdxi3wgJqvV9gPVHa9bZr1OHcI2DkdEUFkcMa9kd9P0D/9TZXQqL3YtxU2xfsUdLgm2ddSliM/dAwRYEfdo6hli87oUxNHmYO5Da7IWwAb5PW6biZUuMRDsNNIeNiiDWuBUzbi67q1hkFFE24LixiMM0ozI71vqmf85MmGJPoWQdt9rIoIPvhIP1YxL1uza+0P+UDCyTD8Bx2x5K73mBoSvpikK1evD9E4qIGOWFQpEiJCW0F3FnR4LjtTuJHYK86pLwiuWZxHN7NgQz3744vfU61bIuuliqujhdZm210Mwk0+D92lfvWLb8MEbLk8r46jStwfMN1knvnR8X7y4yDyFfb18/c1bxziOtswN1dmq5Bme+8GNooTcPgvc+WkoMHGLsfV3ozm/2KIeQFGryHJ2cX1ODKx8O3LjW/e67U4mxY9muzF+4vwHPdM7J2FS8qwAAAABJRU5ErkJggg=="
class="img_number 6c7ac088bd56d619f1bbcc2aee9facea"
style="left: 11px;"
/><img
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAdCAIAAADKJrCsAAADAklEQVQ4EaWVX0hTURzHz7brzt30bqLcfNgN0kFtPZR7mgQqhASlPkx6MB98iBZICWL0IESISKZoSCBRSeKg7CHsQfNB7KF82faQ9aK9GBR3D3XFP9fadrY2u3fn/nZv2wyhy4V7fr/f9/M7v3POb2em4ydOov94mH+xXYPxy42J0zzBOJPTWYlsXY9yz+4xizEKmkrP7w3Gn/TuCDhbOv2XmtqL1lyo1PxdU7t3W/axjjKEWFQLpzGiGQ8gWMQ3jcg6TCrC887Jp+aIVi3yBtJ91/cuAI1QQf2BRPT+Fp8LE5Ef6mZfAKkjCHk9aOMzdZiN/oPHN7cpjOTq0UNgBQBYGRr5YLxZoMtj117aZ0rNbJwtNzbww62wZyI3OlGkLO3I866Uz5umKTejbKS0utib5zvTbi1q33xdrDvMA+fX5iHagcs4HFXVbbcSPYFfbj6R85sRYcUN+8KsbWzJmAt4H5/S3LJl2ZV9OL3VXkcMwizCcaE+3lOP2wNVnUEGNhfq5zm6eIRSB33TEsBWQrDyGhIRoen7Uui3S3NpfIZ3gMa1316XQqQ8POe6dKrGc+aY8taeF4beOGVNknX4d8e7qQHzA600eRIT56sbVVcGzRt5b8w00+/onXfCkhINHalcCcU8Mosr3O3VPKoP3g9wyyIA3mSfGgFTVyEuPGEymMahafRTOdgpQV2CxlskWBySmXXYXJDq39hHKwgJ79V5JO2X6aojjegvBepfjsEhOTLCkXibpG4v8JEIhsKSvuChCfx+AgdtkdUrAHgUYtckiiV9rfRsirNke87+1LwSu6C2eZ5H5kdRTot5d2ZH8jecnqVtaq9Zu17KNlfZRTWi8yjSz4VlaqfcHVsrDzJ+6FLkyQ6HtsdbYHKxcmiAnnHB/ddIVqZ+uGErEVL6X9VhDI2nGHLl837ujtZgFmdltVqH9nxj3n61NZxL8pjWn2EY9YWwmYhVE9cqxj6Ao/D+BX/XSPxqY1xQ/nnohU9sUsz+bs42GTL93VwF9QN/5O8fGRn4ilT2qk0AAAAASUVORK5CYII="
class="img_number 6c7ac088bd56d619f1bbcc2aee9facea"
style="left: -11px;"
/><img
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAIAAAAl5NuSAAADUElEQVQ4EZ1UX0hTURi/u7vbmV29ztwiuwvSQOYegj2kIqXlg5DkgxQlaInCVIiepKQgMss9ZEFQUlkPIZgz+gfiopDA5cMUApMYvejTBuVVi93m3dH96d57zrl3ExVpG7vf953f7/u+c7/fOYaDh0qp//0wWxBPd0vt9WsuOwQgqSxDEBXYoD+n7z4dyYIbsis7Ey8GV2scMAuDHRqGC0Z699z+oi0a862FxOETo69+HbMniM9AaEomGeWrhNIMJ7lPmKJ+05yIIDRBUtSNwZVKLqX6ZiFQ1FRb5DyyT/nVOvom83Az3ErP4DqPSVrleulei8gqUTo8ub+qyxjB6SlKNMz5LfO8ob4Myi0wdto+a/mg7F6rfHzDjvJB6/glAzIz/wPXcoMCCsRcjcgg5DZ+HUMjzN1Mkm7TAu4FbU1eIOSQaMQwc7pCJ+xsEfLMDIgipCPeXL4Vh193laA4G8bTImRqOCcYRo5YdwtWb6anB57/dqHgIvvYjyyNTBk6e20L6kBAydLQdGzAky5TMdUe+HZ66WyJ+lJg/msvmMGpsxXGN8V911ccQHslGIUfMO+T19rp04LanNWI+J0JJZiaKkkduAZCBjv1wHpz2KCNn6IyK/Opp8PLdbqwaQqaIJUEQBOsLO/CvouWl/h8aHuWhT32kzBzFiYONNXyxYo8i4pleU5Y1VmkgEPoH1trw/okbbcNrjaXklfSVXDhGZ0lz49gfNFSczK2V9YnK7md7Pg7WsQiKY+3V0jqzswhH3dFP3T6tiN+0OqzouPBVfztUbSgtl3RKjkQDOZOeXXCJivizQnhwyVWeuSJqOQ6HseobYWN8jAL5CqxO+S3qJI5sLGpyC7cNCYLUYDRtmTbTrykw4aXYVQ+SGrlkUULjnGxBs/2bE/czaFVWogQcuSRJYQpcXeHNsbsLM7EaMcf0mFe0CdfGGjOojFclmpE0gdSTaPhMDTPf9OVeKZ7bah/2cUizdNCoPDcE5msyzN95/1yc1k8o5wZQvU+ApAUlBdpuGjrOAUCCo4oTE7z2ccKJfTR0jiBJhn50sX3LsppCQdsLefNX5GXURkHKGfq6mWpoTxm5zYAhfoEMGoKzeaOPDS9+UFgylNvOzO6S/sfNQgekSrMrRAAAAAASUVORK5CYII="
class="img_number 6c7ac088bd56d619f1bbcc2aee9facea"
style="left: 0px;"
/><img
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAcCAIAAAABemMJAAAAyElEQVQ4EWOUVVBjoAAw4dWr8Xfm3lf3b75ZHodLGQsuCYaovs/l3h/4QPKcOBUxYOqX/p+Y8y3J+6MM+1/c2uAySPrNA38nRXyxMPjGx/APLk+IAdcf921W9VuwayFamF8/4eST+cJOwACs4fdJYHO9lNlC9p8ENAOl4faDlDL/fM13cD1XUy/TUyAPZ5iDlMIAXP9eztwbXIdOwcSJpeH6nzIeAllKKsDqfxIMGdVPQmBhUToaflgChQSh0fAjIbCwKB3o8AMADiotC5QUM1oAAAAASUVORK5CYII="
class="img_number 6c7ac088bd56d619f1bbcc2aee9facea"
style="left: 0px;"
/>
</td>
可以看到主要有三个值,一个【src】是图片的base64编码文本,一个【class】是图片对应的类,一个【style】是图片对应的样式
每一个src对应唯一的一个数字图片,那么可以根据这个base64编码的文本判断是什么数字
那么类和样式有什么用呢?现在还不知道,那么在页面对着数字审查一下元素,看看页面的组成结构
此时可以看到,并不是多少位数,页面就有多少张数字图片。其中有一些多余的,其样式会被设置为【display: none;】,可以理解为不显示出来的意思
除去这个样式的,剩下数字的数量就可以与现实数字的数量一样了,那么怎么知道哪些是隐藏,哪些是不隐藏呢?
通过对比发现,返回的class数值中,【mg_number】后面的数字有两种,其中一种是全部隐藏,另外一种就是显示的图片,接下来就是要找怎么判断两种数字了
因为要添加【display: none;】属性,所以在全局中搜索【'display', 'none'】(备注:这里涉及一些html的知识)
可以看到搜索到两处都在同一个页面,那么格式化一下这个页面继续查找,在下面的图片中就可以找到我们需要的函数
这里使用的是ajax进行异步请求,主要看其中的success回调函数
success: function(data) {
datas = data.info;
$('.number').text('').append(datas);
var j_key = '.' + hex_md5(btoa(data.key + data.value).replace(/=/g, ''));
$(j_key).css('display', 'none');
$('.img_number').removeClass().addClass('img_number')
}
这里可以看到取响应体中【key】和【value】两个字段进行base64编码后去除等号计算md5
如果数值相等,那么这个图片就是一个不需要的图片,此时数量的问题就解决了
解决了数量问题,还有一个顺序问题。请求返回的图片顺序和显示的图片顺序并不相同,因为我们还遗漏了图片的【style】
可以看到其中的【style】有正数和负数,说明对排版进行了一些小小的操作
此时根据【style】的数值,对图片进行重新排序即可(备注:这里涉及一些html的知识)
到这里的时候,已经把数量和顺序的问题都解决了,下面编写代码请求,并还原数值
import requests
import hashlib
import base64
import re
def main():
numbers = {
'iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAIAAAAl5NuSAAACy0lEQVQ4EZ1UTWgTQRSeJNtsNyXbxmZF3BWkgpocRC9NDyYn8RD04A9YKKRUiCAV8VAPimg9VEE8KaV6Cg1YgxRyEAoePGgvaS+tCLYg7Sk5yBooW9Nk003i7My83c2mFnVZeN977/vem3m7M54jR4+j/324DqHcGrtVHTn3SxF13kx6kc6rmz3zs8KzvIvsaessD9dy98sK33SxiOtXP/ePprk1O+e1oZzaWXisOpS8ruPXB4y6lPiRyxoy+Oai2CMbLyfKInMCK2/l5ImDJ0/h9/DwVLio00RTjG09T4HEEo893TpDtoiQUJjqvzzptZa3lBXij8Iqk1SHRmsxhmlnuX41VqURfbVvImvVBpAXZpYE5iiVm5coJGI5rUdZJlDIcSWQOG0m1wPNd6JJOlEivn66wnia8Mn9PaDCgn9DY1ga2CVjM8WNqLzLwiUuA+QO6/tW6mJBsXHeREQswZRVtfOnsYtsaJAVDbJNLE42QIu0n2QbNr8NzZX84NeVYQwxOdxi3wgJqvV9gPVHa9bZr1OHcI2DkdEUFkcMa9kd9P0D/9TZXQqL3YtxU2xfsUdLgm2ddSliM/dAwRYEfdo6hli87oUxNHmYO5Da7IWwAb5PW6biZUuMRDsNNIeNiiDWuBUzbi67q1hkFFE24LixiMM0ozI71vqmf85MmGJPoWQdt9rIoIPvhIP1YxL1uza+0P+UDCyTD8Bx2x5K73mBoSvpikK1evD9E4qIGOWFQpEiJCW0F3FnR4LjtTuJHYK86pLwiuWZxHN7NgQz3744vfU61bIuuliqujhdZm210Mwk0+D92lfvWLb8MEbLk8r46jStwfMN1knvnR8X7y4yDyFfb18/c1bxziOtswN1dmq5Bme+8GNooTcPgvc+WkoMHGLsfV3ozm/2KIeQFGryHJ2cX1ODKx8O3LjW/e67U4mxY9muzF+4vwHPdM7J2FS8qwAAAABJRU5ErkJggg==': '0',
'iVBORw0KGgoAAAANSUhEUgAAABUAAAAcCAIAAAABemMJAAAAyElEQVQ4EWOUVVBjoAAw4dWr8Xfm3lf3b75ZHodLGQsuCYaovs/l3h/4QPKcOBUxYOqX/p+Y8y3J+6MM+1/c2uAySPrNA38nRXyxMPjGx/APLk+IAdcf921W9VuwayFamF8/4eST+cJOwACs4fdJYHO9lNlC9p8ENAOl4faDlDL/fM13cD1XUy/TUyAPZ5iDlMIAXP9eztwbXIdOwcSJpeH6nzIeAllKKsDqfxIMGdVPQmBhUToaflgChQSh0fAjIbCwKB3o8AMADiotC5QUM1oAAAAASUVORK5CYII=': '1',
'iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAIAAAAl5NuSAAACO0lEQVQ4EWOUVVBjIBewoGqU/p+Y8z3a9puM6E92hn9gObafn9iuXeBe08u27AaqYgZGhM12Vd9aI97LsEP0oKkDcjnubhWOL2J6ipCBaU6c+q7c5Ss7QoL9508g5z87+y+EGAPTp5PiXnEsMP1MUCktJYhO5k/3RKZXyCqqi2noAZG4opNM01aBT1BV//jM308uhpsG0wwS+MS/uV5K35Ozaz1cmoHhKeP8Il6vVmGY/h+GLj+lofIwzT+fCDcF8OWtQNKGxHy6iGv6BQ6ogNKvJDTNNalc82FeQdKFYM64CNPM8EfGDCIOsxmhChfrCTPM5X/5lEjVrPmHD2ou2xOo74i2OUMJFHUg8InlGoTBQKRm6V++mj+gWp6yzCdJc8vU91rQBMR5Yh0bVC8xNicuehOtCU1nP6/zlSyC6WVAyxhwcQhD+l/L1LfRcAd/Eu7MZkOKUNyapb1+T656bSj6F2rga+GmcLS0gEOzT8OX1sj3sLhhAqW/OI5lSJaCTcTUjOZULDkR7jc0zba/17UjO1VoXht38za4ajQGsmbbX1v7XmvxQQoD5tcXREvCWQ+hqUfhwjVL/1mO0Ml1fqFQUBsjikosHJjmxPYPFlA7OU+0CkciIhOLJpgQJHma/Ugy/w4WYn2ylUidQOVgzebx32Ugpv3k3VxE0LUwiyGa3aRhOeY180G4FGEG2M+ivL+hKmVer7hJWBMDA/8adb5SsM1/RWFJiRh9SGogAYYkQAoTVuiTogeuFgCpiqrSY0PgFgAAAABJRU5ErkJggg==': '2',
'iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAIAAAAl5NuSAAACpElEQVQ4EWOUVVBjIBewoGiUNvtbkPPNXvM7H99PdojMT/ZPr7lPbONs6mV6iqIWyGGE2/y/dtGHaPMvUD3o6ph+PhGckM014wayBDO/gDCY3/55oetnmDvYfv5k+fuX5S/LfxaG/2Dp/yx83228WT9tY73wGa6fCc4CMz4J7Jol7aUurqEnBkLq0hGtonc/MUMV8b0t7/uDpAGhmfH1SUkvU970XqbrSPInF3G4BIid/wkVYjf4XouQhTv7Bvu2RUz3EBJIrM9MX43+esn/Bgsx/vzEtfYiRBZu81MGjMBE6N9ygx1mN0KQgQGuGVkQk/2akXzN0ga/+KAmsj1ZBDebKJv/1+l/heq4zjEBrpcYZ2cseusm8w+shWdXLxtS0MCSBcI4GMvc+a+990832w/KfH/BYlwnegTTD8OkQTSq5u7tj0OUkKUhbJZP9wQ7CzmWoaRNoBRhPzP9fM355DUjOyzEkMxG1fzzJzsSgqTKf+yin7XMX9UtfnZx+88oaSS9SLkKWRTGlv4fHPEjKfCzligsml8LN4VzzYcGGiJLwjRgoxNnvyu3+wrOrUyvD0mapUIcjOpsbBpBYvNTBQ8+gSj9J2r+vQyqjjjNwEKj6SI3VAv7d8MICJNYzQxPfyIpZSNRszQ7JJEBtTH9fIOsWZoBJQogUijk/3J48v7JfmIbsuacz+tX/vbBbYBP32dY8mb4dIFjBtRcqEf+ixq8mLz9/br2P3YaKDZqBv6euf3NZO+PsJJYaGklrEhDSdvsXwyDviwMYmL4yQpNE+y/2RngXmVg+Mm/Jpu7C5GtIDafYkcUkUDV7D/ZIQihk/nTPdHqML5SlFyFlMKCi3+EuHzTkv7Nx/4L5nT2n59Y717nWjOFff4pmBiCRtKMECSWBQDfGNuYxLjW9gAAAABJRU5ErkJggg==': '3',
'iVBORw0KGgoAAAANSUhEUgAAABUAAAAbCAIAAAAcf1OxAAABhElEQVQ4EWOUVVBjIAhqN7xM0vwFVsZ5olUkchFcBxOchZsR+M0XqhlTDWH9/7vTPoliaoSKENIvXfzNV+k3Tu0MBPT/7Yn4wI5bNwN+/XZTP1nw/QNq//ma+xN2U/DYb/uz1eULWBfPwW0c2LXjtv9/d9UHGZAmpteH+NOf4NCOS795+2dfJXCEfxKc3oDHkVilzH61en8EBxvH+RVc85/ishzkOky5/92N75XBun9e58/txVSALIKh3w7u8p/8m9vY8NkNMgdNv+2P1iCIy9nubuUtPYVsFVY2sn7pP8v73oLDnOHndcH4SkasOlAFkfQntn+ApBaGT8Kd2QRdDjEHpt+u/VO5+XewGOeJyfjDHNkFYP3Scd8mQ73N+mSrMFL2RlaKlQ3Ub/tzYclbPrDsz3uC1UXEeBthlmzjCc7//xnIQpzHW2D+RxhIGouF4edP5p8/8eZxkIl/2dn/gE1mYvjJ+hNqB/PPX4xElZ8Mcd8uVkPCiIzyE2obVopS/w91/QDSPZdPKmG8AQAAAABJRU5ErkJggg==': '4',
'iVBORw0KGgoAAAANSUhEUgAAABUAAAAcCAIAAAABemMJAAAB+ElEQVQ4EWOUVVBjoACwIOv9uefmK2VkAWzsTyel9OOYYTJMMAaQ9vrHh8QjjomsX+Q/O3GakFShuB8m/km4yZRrPoyHl0a2X/MPZe6HW/SJeRecTYCBZH+U9C+o4l8MTwlog0sj6UcE3k9GuDwhBpJ+UfZ/ENWfPsGjl5B2BmT9fD8JKsdQgKQfLvfpDfH2I+L/r4wI1AQZ76f3vaF+YWBg//mJ9e51rjVT2OefglsBZ2Czn4EBrhmo7ic73xct81d1i59d3P4zShquE8JA6P/LB009LD9/soMQmkqGv3xKr1o3fEtEMYKRQP61S/2VFPTJXuk73LSf98TjPdlOQvnM/ALCcCksjIfnmDcs5dr1k9XN+Ds3OLBYBP+LPuXacAOiGOF+LJrhQtdnc+Vu5YdxvxkG/oWxidMPVH2ykus8LEj4RP+QrJ+BgeXJa5guBE20/QwMWEsXEvT/lpGB2vsTkUGI1m/X900Lqh2YHOHJljj90nHfe1w+w2zn3dwAZTIg8p/Gfx9buCiCIW32t3vl+73Vb0ShxQPbtRXcMxDy8PTX/ul+0EeQOErK/cPODo9qoBzb3a2i8UVMSKUT3CNwI9l/IgoiuCDIXJ6DkwUTZiMLAdlw/ac4Tmj+1VL6zc6AbCfzz59sn55yndjDMb2X6TqaXhAXAA8XiW6ahRdHAAAAAElFTkSuQmCC': '5',
'iVBORw0KGgoAAAANSUhEUgAAABUAAAAdCAIAAADKJrCsAAADAklEQVQ4EaWVX0hTURzHz7brzt30bqLcfNgN0kFtPZR7mgQqhASlPkx6MB98iBZICWL0IESISKZoSCBRSeKg7CHsQfNB7KF82faQ9aK9GBR3D3XFP9fadrY2u3fn/nZv2wyhy4V7fr/f9/M7v3POb2em4ydOov94mH+xXYPxy42J0zzBOJPTWYlsXY9yz+4xizEKmkrP7w3Gn/TuCDhbOv2XmtqL1lyo1PxdU7t3W/axjjKEWFQLpzGiGQ8gWMQ3jcg6TCrC887Jp+aIVi3yBtJ91/cuAI1QQf2BRPT+Fp8LE5Ef6mZfAKkjCHk9aOMzdZiN/oPHN7cpjOTq0UNgBQBYGRr5YLxZoMtj117aZ0rNbJwtNzbww62wZyI3OlGkLO3I866Uz5umKTejbKS0utib5zvTbi1q33xdrDvMA+fX5iHagcs4HFXVbbcSPYFfbj6R85sRYcUN+8KsbWzJmAt4H5/S3LJl2ZV9OL3VXkcMwizCcaE+3lOP2wNVnUEGNhfq5zm6eIRSB33TEsBWQrDyGhIRoen7Uui3S3NpfIZ3gMa1316XQqQ8POe6dKrGc+aY8taeF4beOGVNknX4d8e7qQHzA600eRIT56sbVVcGzRt5b8w00+/onXfCkhINHalcCcU8Mosr3O3VPKoP3g9wyyIA3mSfGgFTVyEuPGEymMahafRTOdgpQV2CxlskWBySmXXYXJDq39hHKwgJ79V5JO2X6aojjegvBepfjsEhOTLCkXibpG4v8JEIhsKSvuChCfx+AgdtkdUrAHgUYtckiiV9rfRsirNke87+1LwSu6C2eZ5H5kdRTot5d2ZH8jecnqVtaq9Zu17KNlfZRTWi8yjSz4VlaqfcHVsrDzJ+6FLkyQ6HtsdbYHKxcmiAnnHB/ddIVqZ+uGErEVL6X9VhDI2nGHLl837ujtZgFmdltVqH9nxj3n61NZxL8pjWn2EY9YWwmYhVE9cqxj6Ao/D+BX/XSPxqY1xQ/nnohU9sUsz+bs42GTL93VwF9QN/5O8fGRn4ilT2qk0AAAAASUVORK5CYII=': '6',
'iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAIAAACjcKk8AAABuklEQVQ4EWOUVVBjIBcwkasRpI8FrDnu28Xqt3ykmcO/Rp0im8nWfI99DQMjKQEW+P1UxxtRkO+4D1YIJawnweb/3WkfwToZfl7gq14PNIJozdLF33yVfoPDlH9zL8tTEItYzf/rvD6wg7W+PsRTegrMIlKzdNUXe5l/YB0CuxrgFsIZELOwk/9aEdZy14BdDFZIhGbphq/2kIBiQLYWqJ2w5n+tLh8gDnp9CNlaIjRLV321gFrLe2I2mlVoXIgVCPJ/ufMnSCD/vMCTBw1kuDR+zXHfYYHMdWIFJA/BdQIZeDW3BH2CZrUn3NNBSQoN4NFs9sNeE5KkWK8d5jiJphHExa3ZPOKHDFQD9/nZWLTi0fwv0+wzRMfPC5xICQPZFFw2B/7QgsYQ+7VTmEEFMQKH5sTAb1C9P7lP9CLbhszGrvmvm+Z3iKqf19m7kNWjsLFq9vqlDI0i1rsXcbkZaAw2zebeP6BuZuC4uxDFLlQONs0hSt+gil6z70JkQFSNIB4WzX+UpSH5nuHnU9YtmFoQIpiavX7LQLICA8PrN8wIlVhYmJoN/sA8zP76HiMWLQghkspthDYICwBClnHZDNYAMQAAAABJRU5ErkJggg==': '7',
'iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAIAAAAl5NuSAAADUElEQVQ4EZ1UX0hTURi/u7vbmV29ztwiuwvSQOYegj2kIqXlg5DkgxQlaInCVIiepKQgMss9ZEFQUlkPIZgz+gfiopDA5cMUApMYvejTBuVVi93m3dH96d57zrl3ExVpG7vf953f7/u+c7/fOYaDh0qp//0wWxBPd0vt9WsuOwQgqSxDEBXYoD+n7z4dyYIbsis7Ey8GV2scMAuDHRqGC0Z699z+oi0a862FxOETo69+HbMniM9AaEomGeWrhNIMJ7lPmKJ+05yIIDRBUtSNwZVKLqX6ZiFQ1FRb5DyyT/nVOvom83Az3ErP4DqPSVrleulei8gqUTo8ub+qyxjB6SlKNMz5LfO8ob4Myi0wdto+a/mg7F6rfHzDjvJB6/glAzIz/wPXcoMCCsRcjcgg5DZ+HUMjzN1Mkm7TAu4FbU1eIOSQaMQwc7pCJ+xsEfLMDIgipCPeXL4Vh193laA4G8bTImRqOCcYRo5YdwtWb6anB57/dqHgIvvYjyyNTBk6e20L6kBAydLQdGzAky5TMdUe+HZ66WyJ+lJg/msvmMGpsxXGN8V911ccQHslGIUfMO+T19rp04LanNWI+J0JJZiaKkkduAZCBjv1wHpz2KCNn6IyK/Opp8PLdbqwaQqaIJUEQBOsLO/CvouWl/h8aHuWhT32kzBzFiYONNXyxYo8i4pleU5Y1VmkgEPoH1trw/okbbcNrjaXklfSVXDhGZ0lz49gfNFSczK2V9YnK7md7Pg7WsQiKY+3V0jqzswhH3dFP3T6tiN+0OqzouPBVfztUbSgtl3RKjkQDOZOeXXCJivizQnhwyVWeuSJqOQ6HseobYWN8jAL5CqxO+S3qJI5sLGpyC7cNCYLUYDRtmTbTrykw4aXYVQ+SGrlkUULjnGxBs/2bE/czaFVWogQcuSRJYQpcXeHNsbsLM7EaMcf0mFe0CdfGGjOojFclmpE0gdSTaPhMDTPf9OVeKZ7bah/2cUizdNCoPDcE5msyzN95/1yc1k8o5wZQvU+ApAUlBdpuGjrOAUCCo4oTE7z2ccKJfTR0jiBJhn50sX3LsppCQdsLefNX5GXURkHKGfq6mWpoTxm5zYAhfoEMGoKzeaOPDS9+UFgylNvOzO6S/sfNQgekSrMrRAAAAAASUVORK5CYII=': '8',
'iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAIAAADuuAg3AAAC9klEQVQ4EZVUTUwTQRSeblvG1rYW6KKwJVZMEDgYPFB6kaMHwEQSDyZGkChejAlKRY1eROJBrDFBYjAEYhNCPGCIP3DQi3CBJoYQEspBenE5yJ9hwZah7dbZnZl1t9QE2snOe99837w3f89U6isHWb/KpmT7pe1A5a4L7qpDFiQdWog4B59aPi3ruSajWJC7+zYuVyb0lH82cnx7nn81rAHmI+5C5gipkXe/6o+TaBjkAMpDaYvyJxTLrq8uGZDso3PE55gSZHoG1gN8WvU5KcZ3XRFOnC6qwO1UaXCkYJUSE4Fb8VaBOFrabX8WgxtQBVH0WNMFa5SyaSc0x8cfrrsUj1udLPa34bAscnfDFlEC5B6+ma3EiuWw/eWMTZ1J5qt3WtVZVBekqsqSxEJR2xPDlhJY+Q69cojEc8XPNWOLRPaneBoXiDG6O4Rm+EasokSAhLc2w8QVsroYAzOXYxbXKMx78NayNWtUyFLQkJwGdGnisJmdBOCFVE62Cqa9HjbolBtZZKvI1LA63uNnDGMvdOyc0ZYHMzwTc68jTsbcPP8YNdJrwDDcn0VvW+hFYChb80zIMS1RB5at9I5t9Xek6yoUmuCXO/u25gZWTirbYaVKZMK54ofB2rWiHzsgk/l/2yz8MG2jhKUiXzmLrMw3BVvuH12QzHTurE7KH75jn9VAZMo+quXxvIaakuAbz2zssIQgUpsk5k+/L6mvcTyaAlU8fa2SEiPXdRoN2XDTYugM7ais4iIW69PWsXKb/qSXHhUUv2LKQcS1LQkvmVW0DUYOJk63+7dVLSfOwRnF2nfk1vDvAMkZuT+G8FYbxcLeW6VS8KfxhXSvluxz3tJn+zP64HWR2wdWImOJziamUHtchvsn1nobNsljQzF31wMSFg9rNQyAnomfF8uIEp+wasAkBDKB8ApRzBO8DnWlO9c5A4D2vGooThbcaLMYq6Kubn/57oS8tdgjQ8gKNYBIss1PFYRuu+4OcayKsFT0aWvYvo2/Mt8Dn3GoSZ0AAAAASUVORK5CYII=': '9'
}
sums = 0
for page in range(1, 6):
url = 'http://match.yuanrenxue.com/api/match/4?page='+str(page)
response = requests.get(url)
response = response.json()
j_key = hashlib.md5(base64.b64encode((response['key']+response['value']).encode()).replace(b'=', b'')).hexdigest()
tds = re.findall('(?<=<td>).+?(?=</td>)', response['info'])
for td in tds:
imgs = re.findall('(?<=<img).+?(?=>)', td)
outnumber = ['', '', '', '', '']
i = 0
for img in imgs:
number = re.findall('(?<=data:image/png;base64,).+?(?=")', img)
imgclass = re.findall('(?<=img_number ).+?(?=")', img)
imgstyle = int(int(re.findall('(?<=style="left:).+?(?=px")', img)) / 11)
if imgclass != j_key:
outnumber = numbers
i += 1
outnumber = int(''.join(list(filter(lambda n: n, outnumber))))
sums += outnumber
print(sums)
# 总数:243701
if __name__ == '__main__':
main()
第五题【接口-查询参数-值加密】【接口-请求头-值加密】
这题还是和cookie有关,那么依旧使用浏览器的无痕模式打开,并先选中【Preserve log】
查看其接口的请求内容
可以看到cookie有m参数和RM4hZBv0dDon443M参数两个加密参数,已经查询参数m和f,看起来有点像两个时间戳
首先从识别度比较高的RM4hZBv0dDon443M参数开始,在全局中搜索RM4hZBv0dDon443M参数,这里就不贴图了,因为发现啥也么有
那么此时比较值得分析的就是主页,格式化一下代码
这里可以发现有一段混淆的代码,复制出来使用之前用过的ob混淆专解测试版V0.1进行反混淆
function _$KS() {
V();
if (eval["toString"]() === "function eval() { }") {
if ($_zw["length"] === 25) {
$_ow = "";
for (var h = 0; h < window["$$$"]["length"]; h++) {
$_ow += String["fromCharCode"](window["$$$"]["charCodeAt"]() - ($_zw["length"] + 1) * 3 - parseInt(h["toString"]()["slice"](0, 1)) * 2);
}
eval($_ow);
} else {
$_ow = "";
for (var h = 0; h < window["$$$"]["length"]; h++) {
$_ow += String["fromCharCode"](window["$$$"]["charCodeAt"]() - 78 - parseInt(h["toString"]()["slice"](0, 1)) * 2);
}
eval($_ow);
}
} else {
$_ow = "";
for (var h = 0; h < window["$$$"]["length"]; h++) {
$_ow += String["fromCharCode"](window["$$$"]["charCodeAt"]() - 2331 - parseInt(h["toString"]()["slice"](0, 1)) * 2);
}
eval($_ow);
}
}
_$KS();
这里就和第一题有点像,代码是在eval函数里面的,此时我们就要拿到解密后的代码,在三个eval前面都点一下,饭后刷新页面
此时成功断下,如果不行的话就重新开一个无痕模式重复上面步骤
然后在控制台分别输入【eval["toString"]()】和【$_zw["length"]】
可以得出函数最后运行的是这段代码,然后在控制台输入
$_ow = "";
for (var h = 0; h < window["$$$"]["length"]; h++) {
$_ow += String["fromCharCode"](window["$$$"]["charCodeAt"]() - 78 - parseInt(h["toString"]()["slice"](0, 1)) * 2);
}
此时可以得到解密后的js代码,复制出来格式化一下
此时就可以搜索到我们需要的RM4hZBv0dDon443M变量
这里网站给我们留下了一条路,我们发现在控制台会不断的打印【世上无难事,只要肯放弃】
而在我们解密后的js中也可以搜索到这段字符串,也就是说这段字符串是在我们解密后的代码里面执行打印的,此时只要点击右边的链接就可以进入到代码块了
找到我们需要的RM4hZBv0dDon443M变量,然后设置断点,并刷新,就可以成功断下
此时我们看到【_$8K['_$ss']】还是【undefined】,那么就继续执行,直到不为【undefined】的时候,此时RM4hZBv0dDon443M的值已经加密完成
此时我们在代码中搜索【_$ss】的话,又是啥也没有搜索到,那就转为搜索【_$8K[】,发现有61个结果,还行,不算很多,都过一遍,查找可能与【_$ss】有关的,跳过赋值的操作,只看被赋值的操作
可以找到1207行就是【_$8K['_$ss']】被赋值的操作,继续下断点,然后刷新
再次断下后可以看到【_$8K['_$ss']】是前面加密的结果,加密的算法使用的是AES/ECB/Pkcs7,,然后在控制台输入【_$8K.toString()】来获取加解密的key
将16进制转换为2进制可以发现是一段字符串,并且像是base64编码的,那么再将它进行base64解码
可以看到最终得到的是一个类似与时间截的东西,经过对比发现其实这就是查询参数中的m参数去掉最后一位
因为AES是对称加密,所以可以用得到的key来看看加密前的内容是什么
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
_ss = 'X+B1D1B6iiwDOZVNuWwP3wjJ3DfyVTh1+mvR8dZicNoQ4+tfI4QQ2Qpbe2IU4xXfYQMzGBT5qP4uR6lEUtY8kbmCITQJ7CkIum8vf5VxuEWy6nujLSXDlI/scpSr/J3/TrmXvzYFnqAziOoUBq7hGLXC6RLJhLi1MNyVV3HDKlUkwbFQ/iFusspgWs/tTdZkg1qkg95k5BW+/mgfiZSPNLms5aekP+IdTpdJM3Y2948='
cryptor = AES.new(key='MTYwMzI5MTg1NTU4'.encode(), mode=AES.MODE_ECB)
print(unpad(cryptor.decrypt(base64.b64decode(_ss.encode())), AES.block_size).decode())
# 6e6c4989f57580aa4a1ba51fe6901ed2,788d57895ac6376da4ea4cf54875e6ce,90aa7ce116c6c55311eccc1ddf868adb,90aa7ce116c6c55311eccc1ddf868adb,be4d9d6c4119c22212430ea3ba4947de
可以看到是由5段字符串用逗号拼接后组成的,接着搜索【'_$pr'】,看看这些字符串是什么时候被加入进去的
因为【_$8K['_$pr']】是一个数组,那么主要看它的【push】方法,在这个方法的地方都下一个端点,其中可以发现都是调用的b函数
经过对比发现,第一次调用b函数的参数就是查询参数中的f参数,其他三个都是比第一个大的数即可,第五次调用b函数的参数就是查询参数中的m参数
那么就下来就只能下b函数的问题了,重新刷新页面,再次断下的时候,进入b函数看一下,然后将b函数以及它调用到的函数都复制出来
后面发现前面四次和最后一次里面的参数有少许的变化,需要分别修改,分别保存为0501.js和0502.js
var _$8K = {};
var _$ev = [], _$Uy = String.fromCharCode;
function _$HY(_$5X) {
var _$HY = _$Uy(96);
_$ev = _$Ch(_$5X).split(_$HY)
}
function _$Ch(_$5X) {
var _$HY = _$5X.length;
var _$o4, _$_Z = new Array(_$HY - 1), _$KJ = _$5X.charCodeAt(0) - 97;
for (var _$Q_ = 0, _$TO = 1; _$TO < _$HY; ++_$TO) {
_$o4 = _$5X.charCodeAt(_$TO);
if (_$o4 >= 40 && _$o4 < 92) {
_$o4 += _$KJ;
if (_$o4 >= 92)
_$o4 = _$o4 - 52
} else if (_$o4 >= 97 && _$o4 < 127) {
_$o4 += _$KJ;
if (_$o4 >= 127)
_$o4 = _$o4 - 30
}
_$_Z = _$o4
}
return _$Uy.apply(null, _$_Z)
}
_$HY('o~q}u`euf3ffdyrgfu`fkbu`xduv`wuf3ffdyrgfu`qsfya~`sq||`efdy~w`bdafafkbu`e|ysu`$_vb~W`eb|ysu`qbb|k`3sfyhuJArzusf`dueg|f`sxqd5atu3f`rgffa~`eu~t`vad}`ratk`}ageu}ahu`xqeAi~Bdabudfk`xaef~q}u`|asqfya~`abu~`eb|yf`euf;~fudhq|`xffbe,`s|ys{`sa~sqf`}ufxat`faEfdy~w`~atuFkbu`adywy~`v|aad`badf`$_~t`:F?>9u~udys7|u}u~f`fqw@q}u`saa{yu`$_<C~x`exai?atq|6yq|aw`du}ahu5xy|t`{uk5atu`bqdu~f@atu`wufFy}u`duqtkEfqfu`ujus`bqfx~q}u`euqdsx`fuef`yvdq}u`eufFy}uagf`:F?>8ad}7|u}u~f`hyeyry|yfk`qbbu~t5xy|t`qtt7hu~f>yefu~ud`y~tujut64`esdybf`a~duqtkefqfusxq~wu`uhq|`y~~ud:F?>`hq|gu`7{sB`|asq|Efadqwu`a~egr}yf`arzusf`bdafasa|`sa~fu~f`s|a~u@atu`y~tujAv`qeeyw~`idyfu`tasg}u~f`du}ahu7hu~f>yefu~ud`dag~t`efk|u`$_hh5;`dub|qsu`vg~sfya~`?ysda?ueeu~wud`geud3wu~f`ixy|u`a~s|ys{`y~bgf`suy|`?qfx`xyttu~`fqdwuf`|aqt`}rezmkexsv`~g}rud`sduqfu7|u}u~f`wuf7|u}u~fe4kFqw@q}u`wuf7|u}u~f4k;t`qffqsx7hu~f`$_vxV`s|yu~f6qfq`egr}yf`fy}uEfq}b`va~fe`A~|k a~u hqdyqr|u tus|qdqfya~ q||aiut y~ vadTTy~ |aab`fdq~eyu~f`qdyfk`tyeqr|ut`fkbuav`sxqdeuf`egbud`|u~wfx`#v*X`?ej}|XTJ?>:FFBTYTV`fa6qfqGD>`asd_dtkfigDsddqqmujgnh`qbb|ysqfya~5qsxu`}g|fybqdfUvad}Stqfq`hqd wuf3ffdyrgfu/vg~sfya~N~q}uOmdufgd~ sgd_u|uTwuf3ffdyrgfuN~q}uO-o-`qffdyrgfue`Marzusf 3ddqk]`bgex@afyvysqfya~`hayt`F=_EFD;@9`VVVV`qffdHudfuj`bgr|ys`efabBdabqwqfya~`l_,zcze~ld_VQR_+zxfiyzi9_jzcze~ld9xvcc,zcze~ld`$_vV`xqex`su||g|qd`8EE44`qssu|udqfya~`fdq~evud5xq~~u|`~7hdo5od|hu`fdgu`sduqfuArzusfEfadu`?ej}|XTJ?>:FFBTbfT6J@TNY9967U3.3_4kf~labNWbs|k|d|of 2|kd|j ,- UliaNp|kp@pbofc@jlklpm|~bN/|a|rh Ullh UliaN+Z@Y98fkdUf*|f2er@2DH@5EAEN+Z@Y98fkdUf*|f2er@2DH@5EAFNlql@ifdeqNVlilo.24(@1bdri|oNqbpq 1bdri|oN3|jfi 2|kd|j ,- UliaNY98fkdUf7fkd2er@2DIN1l}lql-rjF+ +fdeqNjlklpm|~ba@tfqe@pbofcpNp|jprkd@p|kp@krjFHNVlli g|wwN2|jprkd-bl-rj@F+N237fkdh|fN2~obbk2|kp,lklNWY/6|6|6H@ZUN2|jprkd2|kp-rj@F+ +fdeqNU|kdi| 2|kd|j ,-NZrojrhef 2|kd|j ,-N2XV1l}lql+fdeqNevclkuo|fkN,8fkdN`sxy|tdu~`2turgwwud`\'~g||\' ye ~af q~ arzusf`vg~s`$_h<Fb`dvdajhs)hccdm`esduu~K`@g}rud`vq|eu`eds7|u}u~f`d$1qd6XWqnvrdqXk~rrhbA6XWqnvrdq.drr~fdXdmsdq`gd|N#tuvqg|f#geudtqfqO`eufDucguef:uqtud`y}badf`}ageuAhud`}ufq`?ej}|TJ?>:FFB`v@p:zm3tww3z}xAzzwM@zrzb:~p`~qfyhu`wq}}q`wufFy}ula~uAvveuf`tqfqeSfe`__a~|aqt__`g5+.h{uan@-U6`zresxu}u,UUcgugu_xqe_}ueeqwu`eufFy}u`yfu}`?76;G?_8>A3F`_r|q~{`v|aqf`#W)u`ujfu~te`v__dpmo}tcp}_~n}t{a_qy`Ducguef`?ej}|XTEudhudJ?>:FFBTYTV`s|yu~f;~vad}qfya~`fxu~`?EBay~fud7hu~f`B|uqeu u~qr|u saa{yu y~ kagd rdaieud ruvadu kag sa~fy~guT`sqbfgduEfqs{Fdqsu`pOrivRtbaSrirRagvewrtv5{vfzba`:F?>Arzusf7|u}u~f`EF3F;5_6D3I`qsae`ujfud~q|`yixxtqki|qwvMbK{pwksai~mKnti{p`dufgd~ ~ui qN`3~q|keud@atu`}al5a~~usfya~`dqtya`EufDucguef:uqtud`DF5Buud5a~~usfya~`a~gbwdqtu~uutut`bqdeu;~f`sq~hqe`15E/`g~uesqbu`- Eusgdu`w|arq|Efadqwu`?ej}|XTJ?>:FFB`p\\yFe`bqdeu`tqfq`$_vd`bqs{qwu`daie`ArzusfT;~zusfutEsdybfTuhq|gqfu`abu~ud`}ageugb`exu~zyq~`turgwwud`ufxud~uf`$_s6da`F7?BAD3DK`mmyvxh}lyh`dub|qsu5xy|t`BAEF`~g};fu}e`sqbfgdu`tasg}u~fSvdqw}u~f`va~f`vydef5xy|t`vda}5xqd5atu`iur{yf;~tujut64`Bay~fud7hu~f`iur{yfDucguef8y|uEkefu}`sxqd3f`tuesdybfya~`pfcz_ybb|vu5~bmJaz~rgzba(greg)z~v5~bmRauvkvuMK5~bm ye ~af q~ arzusf`jPzkh+SU=+SU`L*J:<<KTr}8VqJL|D}|HkG:<NO`euf;fu}`.U$W`|aqtut`Du}ahu7hu~f>yefu~ud`a~qgfasa}b|ufu`$r_sq||:q~t|ud` edv|j `bdafusfut`}qfsx`wafa`tdqi3ddqke`}utyq6uhysue`s|aeu`iurefadu`iur{yfDF5Buud5a~~usfya~`5ag~f`fujfUzqhqesdybf`qrefdqsf`budvad}q~su`Efadqwu`w$ryyu$L$$vyqqo|L$$v}zL$$v}|lL$rnd$L$|okne/yno-v|okne1doma~on5x@rs}2|kwoL$}nd$L$aso$`|q~wgqwue`$_vr`euf>asq|6uesdybfya~`eagdsu`U,geud_va~fe`F=_@G?47D`esda||`$r_vufsxCgugu`.!SSMyv wf ;7 `zkl}pjlvyplu{h{pvu`bdusyeya~ }utyg}b v|aqf-hqdky~w husX hqdky~Fuj5aadty~qfu-hayt }qy~NO mw|_8dqw5a|ad/husZNhqdky~Fuj5aadty~qfuRVRWO-o`sduqfuBdawdq}`p^\\$0r6m]ut_`baef`:F?>7|u}u~f`fujfUxf}|`.!SS`arzusfEfadu`v}xzneO?plw=wlfp} 4S 0zya}zwOR`|y~{Bdawdq}`bdusyeya~`yu{~q{qjqtq|ckpivom`7~fyfk`p~fLevuvagzr}f`cds{|}6a7jfxI<y:3bWeHK=GYD8?Ci*;9vBA+Xrh>@zT)lJ4qE~gVF5(wk_ZLu^`g~yvad}Xv`zqhqesdybf,`p*L,vsNkg5htjvs`dub|qsuEfqfu`ha|qfy|u`sduqfu6qfq5xq~~u|`geu efdysf`adywy~q|Fqdwuf`u__ru~qr{f__N_ru~qr{f_@qmpq~;{pq`zqhqesdybf, haytNVO-`G~ujbusfut sxqdqsfud, `m"abfya~q|" , M m"Dfb6qfq5xq~~u|e" , fdguo ]o`G~fud}y~qfut }g|fy|y~u sa}}u~f`UF)3kFdjaIj9t`Egr}yf`fy}u`dueba~eu`dq~wu?y~`fdy}`sxus{raj`L*J:z`sa~ef`E7>75F hq|gu 8DA? 7{sB_f I:7D7 ~q}u/1`8|aqfYX3ddqk`9ufDueba~eu:uqtud`avveufJ`s#dP^b#:#d{|d{}d{6d{ad{7d{jd{fd{xd{Id{<d{yd{:d{gd|fdE6`duvuddud`k*RT<*z|Qljd`~atu@q}u`wufDueba~eu:uqtud`.}ufq\\eQxffbSucgyh/M"\']1duvduexM"\']1\\e`ek~sxda~ylut`ujbadf`vy|u~q}u`abu~6qfqrqeu`b__ds:fcC__hZs:fc`u~qr|uHudfuj3ffdyr3ddqk`xffb,UU`xuywxf`eqvqdy`E7@6`zresxu}u,UU`bnp{wjtjcjmjuzdibohf`G~u~s|aeut duwg|qd ujbdueeya~T`iur{yfBudeyefu~fEfadqwu`ww}4snnox`___fe___`s|qee`dg~fy}u`}al;~tujut64`bqdu~f7|u}u~f`?yeey~w sqfsxUvy~q||k r|as{e`sK#d6343E3~3V3F3(WJe.e0HiD-8~8$8%8 ?c?*?;?9CcCxCIC:C3CbC?CrChC^C&CPihi)ili~igiL*s*{*a*e*H*K*T;c;d;s;|;};6;?;C;_;Z;L9C9*9;999h9>9S9)9l959(929$vjv^v&vPvNvOvoB}AzASA(AwAnA +w+_+Z+2+$+%+&+P+N+O+,+-X}X6XXXrrGrvr)rlr.r0hZhP>f>x>OzGzvzBSXSrS2S%S&S/S.)g)_)ZlvJlJJJgJ_JZJLJuJ}J|}J}}Jx}JI}Jy}EX}Er}Eh}E>}E@}Ez}ES}E)}EJ}E47fC7e37eb7=b`qffdyrgfu husX qffdHudfuj-hqdky~w husX hqdky~Fuj5aadty~qfu-g~yvad} husX g~yvad}Avveuf-hayt }qy~NOmhqdky~Fuj5aadty~qfu/qffdHudfujQg~yvad}Avveuf-w|_Baeyfya~/husZNqffdHudfujRVRWO-o`raa|uq~`bgexEfqfu`du}ahu;fu}`\x00`sxqdqsfudEuf`kk{d{fame;{nwdmwl{`kyu|t`dufgd~`rqffudk`vad7qsx`y}b|u}u~fe`uhq|gqfu`|y~u~a`?ej}|XTJ?>:FFBT(TV`F=_D79_7J`wufEgbbadfut7jfu~eya~e`mxebf|}d8xebf|}d}dze8xebf|}dcyju`dwrqNXZVRWWVR\'O`efq~tq|a~u`esduu~`Duw7jb`s|yu~fK`sxqdwy~w`}ueeqwu`Eu~t`}y}uFkbue`wuf;fu}`Yzu3>uEeq(`sxda}u`va~f8q}y|k`tuvqg|f`uhu~f`wufG~yvad}>asqfya~`NfxyeO-`G~ujbusfut fa{u~ `fdq~eqsfya~`adyu~fqfya~`wufEagdsue`g~tuvy~ut`M~qfyhu satu]`CFB_7B7_:AA=`vufsx`hytua`:F?>3~sxad7|u}u~f`bdbqudib5fgsftiCdbqudib_sfgsftiCdifdl/phjoCefdszquZbmmcbdl`iur{yf5a~~usfya~`iyvy`.7?476 yt/`6A?Bqdeud`;||uwq| ~ui|y~u qvfud 2fxdai`avveufG~yvad}`{uk6ai~`dufgd~Hq|gu`|a~w`sxqdwy~wFy}u`AB7@`etgqg~gjgrwaf}lec`\\rM^0]P0NM\\e\\E]P1O.\\U`}ageuAgf`_fe_`sa~fy~gu`iurw|`}ageuGb`u~g}udqfu6uhysue`egrefdy~w`esduu~J`g0a{h.h{uan@0a{h.h{uan:pi; S}pera6 Ukjpnkh :ED?|ep;`|uhu|`.tyh0;7*.Utyh0`$r_eufgb`vy||Efk|u`sq~tytqfu`- bqfx/U`xffb`eiyfsx`s|yu~fJ`puezive`rkfu`u~qr|utB|gwy~`dq~wu?qj`a~ruvadug~|aqt`u~saty~w`bqdu~f`}ageutai~`\\\\`efqfys`}ageuagf`wufExqtudBdusyeya~8ad}qf`hudfuj3ffdyrBay~fud`z~likyp}lyJl}hs|h{l`3ttEuqdsxBdahytud`efqfgeFujf`dD#d,s{s77+7rjMj]fIfW:BW)Wle_eQe/emeoHxHC=x=T=1=o8g8&?y?:?)?l?1CdCWC9CvCVCFCmCoiii*i9iviAi+iO*%*^*1;j;D;8;N;O9W9e9i9L9u9,vfv9vvvAvXvrvzvSvnAWAlAJAFA5+kXdX{X|rarzrShJ>Q>/@p@!@$@&@P@O@.zxz<z3zbzYzDzAz)z2z$S<J!4f4y4:4(q.V%Fm%g%w&o1(1w#X#dd:ddbddeds?d|Cd|zd}od6cd6yd6id6;d6vd6PdaAda+d@udS/dExdEIdE!dE2dLgslJsJ9}yq}9M}9]}+-}+m}E26]G7f?7fL7fn `bqeeiadt`~ujfEyr|y~w`$_fe`dq~ta}`sduqfuAvvud`3DEueeya~R3gtyaFdqs{>yefR4uvadu;~efq||Bda}bf7hu~fTbdafafkbuT=7KGBR4|ar6ai~|aqt5q||rqs{R563F3Eusfya~TbdafafkbuTdu}ahuR5EE5xqdeufDg|uR5EEBdy}yfyhuHq|guT5EE_H:R5q~hqeDu~tudy~w5a~fujfX6TbdafafkbuTiur{yf9uf;}qwu6qfq:6R5|ys{6qfqR5|aeu7hu~fTbdafafkbuTy~yf5|aeu7hu~fR5a}ba~u~feTy~fudvqsueT;5a}uf?qd{e7jfu~eya~R6uhysuAdyu~fqfya~7hu~fR8g~sfya~TbdafafkbuTry~tR9ufBudvFuefeR:F?>6asg}u~fTbdafafkbuTsduqfuFagsx>yefR:F?>8ad}7|u}u~fTbdafafkbuTducguef3gfasa}b|ufuR:F?>8dq}uEuf7|u}u~fTbdafafkbuTxqeBay~fud5qbfgduR:F?>8dq}uEuf7|u}u~fTbdafafkbuTiur{yfDucguef8g||Esduu~R;~f|R?FF_I=EufFujfEylu;~tujR?utyq5a~fda||udR?utyq7~sdkbfut7hu~fR@afyvysqfya~RArzusfTbdafafkbuT__tuvy~uEuffud__RArzusfTeuq|RArzusfTeufBdafafkbuAvRAvvesduu~5q~hqeDu~tudy~w5a~fujfX6RBqfxX6TbdafafkbuTqttBqfxRBqk}u~fDueba~euRBudvad}q~suBqy~fFy}y~wRBdueu~fqfya~5a~~usfya~5|aeu7hu~fRDuqtud?atu3dfys|uBqwuREH99dqbxyse7|u}u~fTbdafafkbuT}alDucguefBay~fud>as{REH9Bqffud~7|u}u~fTEH9_G@;F_FKB7_A4<75F4AG@6;@94AJREsduu~Adyu~fqfya~REawag>awy~Gfy|eREagdsu4gvvudREagdsu4gvvudTbdafafkbuTsxq~wuFkbuREbuusxEk~fxueyeGffudq~suRFujfFdqs{>yefTbdafafkbuTwufFdqs{4k;tRG5Iur7jfRIur=yf8|qweR_IJ<ER__$_cyxaaY(V_$__R__vyduvaj__R__{eqr5ee5ag~fR__abudqR__eawag_eusgdu_y~bgfR_tagr|uWW_Rsxda}uRsxda}uTqbbT;~efq||EfqfuRsxda}uTseyRsa~ea|uRtuvqg|fEfqfgeRtasg}u~fTratkTa~}ageuu~fudRtasg}u~fTratkTa~bqwuRtasg}u~fTratkTefk|uTrqs{wdag~t4|u~t?atuRtasg}u~fTratkTefk|uT|y~u4duq{Rtasg}u~fTratkTefk|uT}y~IytfxRtasg}u~fTratkTefk|uT}eFujfEylu3tzgefRtasg}u~fTratkTefk|uTfujf3|yw~>qefRtasg}u~fTratkTjS}eSqssu|udqfad{ukRtasg}u~fTtuvqg|f5xqdeufRtasg}u~fTtasg}u~f7|u}u~fTa~dueyluRtasg}u~fTvy|u5duqfut6qfuRtasg}u~fT}e5qbe>as{Iqd~y~wAvvRtasg}u~fTa~}ageu}ahuRtasg}u~fTa~eu|usfya~sxq~wuRtasg}u~fTesda||y~w7|u}u~fTefk|uTva~fHqdyq~f@g}udysRtasg}u~fTeu|usfya~Rtasg}u~fTeu|usfya~Tfkbu6ufqy|Rujfud~q|Rujfud~q|T3tt8qhadyfuRujfud~q|T;eEuqdsxBdahytud;~efq||utRv|kv|ai_iq||bqbud_zeRwuf?qfsxut5EEDg|ueRwduu~fuqRye@atuIxyfuebqsuRzueya~Ra~uddadRa~}ueeqwuRa~abudqtufqsxuthyuisxq~wuRabu~6qfqrqeuRbqeeiadt_}q~qwud_u~qr|utRbudvad}q~suRexai?atq|6yq|awRfqardaieud_7hu~fRiuqfxud4dytwuRiur{yf3gtya5a~fujfTbdafafkbuTs|aeuRiur{yfDucguef8y|uEkefu}`avveufK`vy~q||k`p__~ggLevrgvOer~v5~ggLh~fgb~S(`rqeu`Budvad}q~suAreudhud7~fdk>yef`qffqsxExqtud`u~qr|u/fdgu`a~ysusq~tytqfu`fdkmdufgd~ __tyd~q}u-osqfsxNuOmo`;@E7DF AD D7B>357 ;@FA 7{sB_f N~q}uR hq|guO H3>G7EN1R 1O`ye@q@`?ageu`q~tdayt`{ukgb`6uhysuAdyu~fqfya~7hu~f`m \"ysuEudhude\" , M m"gd|" , "efg~,efg~VWTeybbxa~uTsa}"oR m"gd|" , "efg~,efg~Tu{ywqT~uf"oR m"gd|" , "efg~,efg~Tvit~ufT~uf"oR m"gd|" , "efg~,efg~TytuqeybTsa}"oR m"gd|" , "efg~,efg~Tybfu|Tadw"oR m"gd|" , "efg~,efg~Tdyjfu|usa}Teu"oR m"gd|" , "efg~,efg~Tesx|g~tTtu"oR m"gd|" , "efg~,efg~T|Twaaw|uTsa},W+YVX"oR m"gd|" , "efg~,efg~WT|Twaaw|uTsa},W+YVX"oR m"gd|" , "efg~,efg~XT|Twaaw|uTsa},W+YVX"oR m"gd|" , "efg~,efg~YT|Twaaw|uTsa},W+YVX"oR m"gd|" , "efg~,efg~ZT|Twaaw|uTsa},W+YVX"o ] o`fxdaie`@q}u ujbusfut`q|udf`6uhysu?afya~7hu~f`sdutu~fyq|e`q~sxad`hudfujBae3ffdyr`>AI_8>A3F`prcc(traL}zt|5rcc(traObthfXhg5rcc(traTvlMbja5rcc(traTvl*c`qgtya`hqd egr}yf/vg~sfya~NOmvadNhqd f/sgd_u|u-f!//tasg}u~f&&N!fTfqw@q}unn\"vad}\"!//fTfqw@q}uTfa>aiud5qeuNOO-Of/fTbqdu~f7|u}u~f-f!//tasg}u~f&&fTegr}yfNOo-`qduq`W*bj \'3dyq|\'`ai~ud6asg}u~f`?ej}|XTEudhudJ?>:FFBT(TV`?ej}|XTEudhudJ?>:FFBT=c=f=^=0GGG8GCG+GrG>GzGJD1D,8V858(8c]G]D#B#d}Bd}Jd}(d}2d>=d>YdzMdS?dEqdEF}>G}>r}>$}>o}@q}@(}@,}zs}zE}zg}Sy}Sb}SK}SY})>})l}l }Jd7W57W^7W]7e{7ez7e)`eu|v`ujbudy}u~fq|Siurw|`000/`9uf3||Dueba~eu:uqtude`u__?B>__6==9_<=B7473@`5D73F7 F34>7 ;8 @AF 7J;EFE 7{sB_f Nyt ;@F797D @AF @G>> BD;?3DK =7K 3GFA;@5D7?7@FR ~q}u F7JF @AF @G>>R hq|gu F7JF @AF @G>>R G@;CG7 N~q}uOO`- ujbydue/`ht8}`tyebqfsx7hu~f`6yebqfsx7hu~f`3DD3K_4G887D`rr*X{z`tagr|u`tg}b3||`\uFEFF`va~f>yef`vy||Dusf`8g~sfya~`efdy~wyvk`fa>aiud5qeu`eqhu`>AI_;@F`bqdeu8da}Efdy~w`fa9?FEfdy~w`}ageuahud`u|u}u~fe`a~uddad`k6|mfylagf67 snwj w K f{o Rwl{67I z{xm}}{jI j{lmjf f{o Rwl{67 ; w L ?>>Iu677`g~exyvf`J?>:ffbDucguef`qbbHudeya~`}e5dkbfa`NMVS+]mWRYoN\\TMVS+]mWRYoOmYon NNMVS+qSv]mWRZo,Om)R)oMVS+qSv]mWRZonNMVS+qSv]mWRZo,OmWR)o,nNMVS+qSv]mWRZo,OmWR(o,MVS+qSv]mWRZonNMVS+qSv]mWRZo,OmWRmWRZoOmWRXonNMVS+qSv]mWRZo,OmWRZoN,MVS+qSv]mWRZoOmWRYonNMVS+qSv]mWRZo,OmWRYoN,MVS+qSv]mWRZoOmWRZonNMVS+qSv]mWRZo,OmWRXoN,MVS+qSv]mWRZoOmWRmWRZo,NN,MVS+qSv]mWRZoOmWR(oOn,NN,MVS+qSv]mWRZoOmWR)on,On,,NvvvvN,VmWRZoOmVRWo,OmVRWoNNXnNXMVSZ]nWmVRWoMVS+]OmVRWoMVS+]O\\TOmYRYoNXnNXMVSZ]nWmVRWoMVS+]OmVRWoMVS+]OnNMVS+qSv]mWRZo,OmWRZo,NNXnNXMVSZ]nWmVRWoMVS+]OmVRWoMVS+]O\\TOmYRYoNXnNXMVSZ]nWmVRWoMVS+]OmVRWoMVS+]OO O`FD;3@9>7_EFD;B`lxvcc)}vekfd9_g}vekfd`eufEudhud6qfq`a~egssuee`biq_jefoujgjfs`xffbSucgyh`g~ujbusfut ~g}rud u~ty~wT`\r\n`iy}qj` xaef `fujf4qeu|y~u`bduhu~f6uvqg|f`cexit(ullscreen`:;9:_8>A3F`gfvS*`g~|aqt`sa}by|uExqtud`G~ujbusfut fa{u~, `]0.y0.Uy0.!Mu~tyv]SS0`}ageu6ai~`ahuddytu?y}uFkbu`agfud:F?>`8EE43`xaef`yfu}Eylu`geuBdawdq}`wn|sbo|Mobkvak~o`uesqbu`gsa|gepreoe|ehepu}d{jca`H7DF7J_E:367D`?utyqEfduq}Fdqs{`Abu~`fagsxue`d#!#s #ddd7dvsys+srs%s&a-an7j7Y7Cj1jmfcf{fyf3fHfhf@xBx+IM<}y^ym:;:z:U3pbdbabjbwW7W4ewH6H7H*HZKcK =+=%Dm848T8n?Y?C?B?@?q?^?P?0?m?]CACXCOCTCnieiKi?i%iP*|*6*G*;*v*A*X*_*L*2*P*/;[;^;.979f939K9D9t9!vIvbvKvGvDvCv4vEvFvpBgB_BLBB A7AfAy+d+7+f+I+y+++r+4+E+FX>X4XEXgXFX/X0r{r%rOr1hahxhBh+h)hEh(>D>N> @}@m@]@ z}zazjzez=zrzzS0SoS])9)L)tJsJ)J-Jn4{464G4D4*4z4OqKq9qQqUEUE]~p~&g8#d]#dc+dchdc)dc4dcodcndd{dd6dd<ddKddgdd5dsbdsedsDds;dsvdsAds@dsldsqdsgdswdsudsOds1ds,dsmd{cd|Zd|td6{d6Id6Wd6=d6Ad6rd6>d6~d6Fd6wd6dhcd>xd>hd>.d>nd@gd@TdzxdzKdz?dzidzAdzXdzSdzldzgdzFdzZdzudz$dz^dz/dz0dzmdE(dEZdEPd~$d~Qd~.d~TdgTdgUdgmdVcdV>dV)dFqdF2d5cd5kd5N}:H}C?}i5}9(}9Z}9Q}vW}vE}vV}vp}v,}B3}A(}At}A2}+1}r3}r=}rY}r8}rC}r;}rv}r(}rM}h4}h[}>=}@H}@4}@_}@U}S })h})t})!})$})Q7|H7a57ak7787797jq7jn7f|7fb7fK7fi7fr7f>7fV7f57f_7f%7x]7I;73X73w7b*7bv7b]7Wr7WE7e07e,7em7Kh7K.7=I7=e7=)7=w7G(7GZ7Gp7G$7GN7G/7GU7Gm7GM`y}qwu`N~uqd \'TTT ~g||MV]TTT\'O`|qkudK`dueba~euJ?>`y~eudf4uvadu`eudhud6qfq`?ej}|YTJ?>:FFB`epkmavB2c}j0j}wcp [F Wmlrpmj`y 9:<M`?ysdaeavfTJ?>:FFB`rduq{`dueuf`ye8y~yfu`o)zcu}ksjwP~sgz8)zcu}ksjwP~sgz`ai~ud7|u}u~f`}e;~tujut64`wuf3||Dueba~eu:uqtude`qradf`3tt7hu~f>yefu~ud`{uktai~`fagsx}ahu`sa}b|ufu`wufBqdq}ufud`eu|usfS`s|uqd`qssu|udqfya~;~s|gty~w9dqhyfk`sduqfu4gvvud`;~vy~yfk`|y~{`A4<75F`}alDF5Buud5a~~usfya~`$_vW`$r_a~4dytwuDuqtk`a~|aqt`r-~qytre xs."qq)Wzy" r{pddxs."r{dxs+XUZUu)V*R*)qZRVVruRqq)WRUUppUUqsrtUq" hxsew."Uai" wtxvwe."Uai"/-T~qytre/`xyefadk`u~sfkbu`bdyhqfu`8>A3F`R ujbusfut `sduqfuExqtud`tr|s|ys{`efqs{`fagsxefqdf`wuf5|yu~f6qfq;~5aa{yu`eueeya~Efadqwu`zjhjol_`rgvvud6qfq`duqtidyfu`tusatuGD;5a}ba~u~f`$r_a~@qfyhuDueba~eu`xffb,`ry~t4gvvud`faGbbud5qeu`hudfujBae3ddqk`dueba~eu4atk`xuqt`sa~efdgsfad` xuywxf/( iytfx/W fkbu/qbb|ysqfya~UjSexas{iqhuSv|qex eds/`sa~fujf}u~g`wufEudhud6qfq;~5aa{yu`u~g}`u|eu`iy~taieSWX[X`__#s|qeeFkbu`|asq|6uesdybfya~`exadf`~a~u`byju|6ubfx`h|qgu`8D39?7@F_E:367D`8y|uDuqtud`_6;H`.ebq~ efk|u/"va~fSvq}y|k,}}||yy-va~fSeylu,WWZbj"0}}}}}}}}}}}||yyy.Uebq~0`ujsubf`:F?>7}rut7|u}u~f`$_KIFG`euf5|yu~f6qfq`wuf7jfu~eya~');
_$UH = _$ev
var $_oi = 1732584193;
var $_po = -271733879;
var $_sb = -1732584194;
var $_xn = 271733878;
function f(e) {
var t, n, i = "0123456789abcdef", a = "";
for (n = 0; n < e]; n += 1)
t = e](n),
a += i.charAt(t >>> 4 & 15) + i.charAt(15 & t);
return a
}
function o(e, t, n, a, r, o, s) {
return i(t ^ n ^ a, e, t, r, o, s)
}
function c(e) {
var t, n = "", i = 32 * e["length"];
for (t = 0; t < i; t += 8)
n += String["fromCharCode"](e >>> t % 32 & 255);
return n
}
function n(e, t) {
return e << t | e >>> 32 - t
}
function s(e, t, n, a, r, o, s) {
return i(n ^ (t | ~a), e, t, r, o, s)
}
function r(e, t, n, a, r, o, s) {
return i(t & a | n & ~a, e, t, r, o, s)
}
function t(e, t) {
var n = (65535 & e) + (65535 & t);
return (e >> 16) + (t >> 16) + (n >> 16) << 16 | 65535 & n
}
function i(e, i, a, r, o, s) {
return t(n(t(t(i, e), t(r, s)), o), a)
}
function a(e, t, n, a, r, o, s) {
return i(t & n | ~t & a, e, t, r, o, s)
}
function l(e, n) {
e |= 128 << n % 32,
e = n;
var $_XML = 16
op = 26
var b64pad = 1;
var i, l, c, d, u, h = $_oi, f = $_po, p = $_sb, m = $_xn;
try {
if (_$8K['_$6_']) {} else {
_$8K['_$6_'] = 8821003647
}
} catch (e) {
_$8K['_$6_'] = 37885443
}
for (i = 0; i < e]; i += $_XML)
l = h,
c = f,
d = p,
u = m,
h = a(h, f, p, m, e, 7, 513548),
m = a(m, h, f, p, e, 12, _$8K['_$6_']),
p = a(p, m, h, f, e, 17, 606105819),
f = a(f, p, m, h, e, 22, -1044525330),
h = a(h, f, p, m, e, 7, -176418897),
m = a(m, h, f, p, e, 12, 1200080426),
p = a(p, m, h, f, e, 17, -1473231341),
f = a(f, p, m, h, e, 22, -45705983),
h = a(h, f, p, m, e, 7, 1770035416),
m = a(m, h, f, p, e, 12, -1958414417),
p = a(p, m, h, f, e, 17, -42063),
f = a(f, p, m, h, e, 22, -1990404162),
h = a(h, f, p, m, e, 7, 1804603682),
m = a(m, h, f, p, e, 12, -40341101),
p = a(p, m, h, f, e, 17, -1502882290),
f = a(f, p, m, h, e, 22, 1236535329),
h = r(h, f, p, m, e, 5, -165796510),
m = r(m, h, f, p, e, 9, -1069501632),
p = r(p, m, h, f, e, 14, 643717713),
f = r(f, p, m, h, e, 20, -373897302),
h = r(h, f, p, m, e, 5, -701558691),
m = r(m, h, f, p, e, 9, 38016083),
p = r(p, m, h, f, e, 14, -172015004),
f = r(f, p, m, h, e, 20, 461512024),
h = r(h, f, p, m, e, 5, 568446438),
m = r(m, h, f, p, e, 9, -1019783690),
p = r(p, m, h, f, e, 14, -187363961),
f = r(f, p, m, h, e, 20, 1163531501),
h = r(h, f, p, m, e, 5, -1554681467),
m = r(m, h, f, p, e, 9, -51403784),
p = r(p, m, h, f, e, 14, 1735328473),
f = r(f, p, m, h, e, 20, -1926607734),
h = o(h, f, p, m, e, 4, -37824558),
m = o(m, h, f, p, e, 11, -2022574463),
p = o(p, m, h, f, e, 16, 1839030562),
f = o(f, p, m, h, e, 23, -35309556),
h = o(h, f, p, m, e, 4, -1530992060 * (b64pad)),
m = o(m, h, f, p, e, 11, 1272893353),
p = o(p, m, h, f, e, 16, -155497632),
f = o(f, p, m, h, e, 23, -1094730640),
h = o(h, f, p, m, e, 4, 681279174),
m = o(m, h, f, p, e, 11, -358537222),
p = o(p, m, h, f, e, 16, -722521979),
f = o(f, p, m, h, e, 23, 760291289),
h = o(h, f, p, m, e, 4, -64036887),
m = o(m, h, f, p, e, 11, -421815835),
p = o(p, m, h, f, e, 16, 530742520),
f = o(f, p, m, h, e, 23, -995338651),
h = s(h, f, p, m, e, 6, -198630844),
m = s(m, h, f, p, e, 10, 1126891415),
p = s(p, m, h, f, e, 15, -1416354905),
f = s(f, p, m, h, e, 21, -57434055),
h = s(h, f, p, m, e, 6, 1700485571),
m = s(m, h, f, p, e, 10, -1894746606),
p = s(p, m, h, f, e, 15, -105181523),
f = s(f, p, m, h, e, 21, -2054922799),
h = s(h, f, p, m, e, 6, 1873313359),
m = s(m, h, f, p, e, 10, -30611744),
p = s(p, m, h, f, e, 15, -1560198380),
f = s(f, p, m, h, e, 21, 1309151649),
h = s(h, f, p, m, e, 6, -145523070),
m = s(m, h, f, p, e, 10, -1120210379),
p = s(p, m, h, f, e, 15, 718787259),
f = s(f, p, m, h, e, 21, -343485441),
h = t(h, l),
f = t(f, c),
p = t(p, d),
m = t(m, u);
return
}
function d(e) {
var t, n = [];
for (n[(e["length"] >> 2) - 1] = void 0,
t = 0; t < n["length"]; t += 1)
n = 0;
var i = 8 * e["length"];
for (t = 0; t < i; t += 8)
n |= (255 & e["charCodeAt"](t / 8)) << t % 32;
return n
}
function u(e) {
return c(l(d(e), 8 * e["length"]))
}
function p(e) {
return unescape(encodeURIComponent(e))
}
function m(e) {
return u(p(e))
}
function g(e) {
return f(m(e))
}
var mwqqppz = process.argv;
console.log(g(mwqqppz));
var _$8K = {};
var _$ev = [], _$Uy = String.fromCharCode;
function _$HY(_$5X) {
var _$HY = _$Uy(96);
_$ev = _$Ch(_$5X).split(_$HY)
}
function _$Ch(_$5X) {
var _$HY = _$5X.length;
var _$o4, _$_Z = new Array(_$HY - 1), _$KJ = _$5X.charCodeAt(0) - 97;
for (var _$Q_ = 0, _$TO = 1; _$TO < _$HY; ++_$TO) {
_$o4 = _$5X.charCodeAt(_$TO);
if (_$o4 >= 40 && _$o4 < 92) {
_$o4 += _$KJ;
if (_$o4 >= 92)
_$o4 = _$o4 - 52
} else if (_$o4 >= 97 && _$o4 < 127) {
_$o4 += _$KJ;
if (_$o4 >= 127)
_$o4 = _$o4 - 30
}
_$_Z = _$o4
}
return _$Uy.apply(null, _$_Z)
}
_$HY('o~q}u`euf3ffdyrgfu`fkbu`xduv`wuf3ffdyrgfu`qsfya~`sq||`efdy~w`bdafafkbu`e|ysu`$_vb~W`eb|ysu`qbb|k`3sfyhuJArzusf`dueg|f`sxqd5atu3f`rgffa~`eu~t`vad}`ratk`}ageu}ahu`xqeAi~Bdabudfk`xaef~q}u`|asqfya~`abu~`eb|yf`euf;~fudhq|`xffbe,`s|ys{`sa~sqf`}ufxat`faEfdy~w`~atuFkbu`adywy~`v|aad`badf`$_~t`:F?>9u~udys7|u}u~f`fqw@q}u`saa{yu`$_<C~x`exai?atq|6yq|aw`du}ahu5xy|t`{uk5atu`bqdu~f@atu`wufFy}u`duqtkEfqfu`ujus`bqfx~q}u`euqdsx`fuef`yvdq}u`eufFy}uagf`:F?>8ad}7|u}u~f`hyeyry|yfk`qbbu~t5xy|t`qtt7hu~f>yefu~ud`y~tujut64`esdybf`a~duqtkefqfusxq~wu`uhq|`y~~ud:F?>`hq|gu`7{sB`|asq|Efadqwu`a~egr}yf`arzusf`bdafasa|`sa~fu~f`s|a~u@atu`y~tujAv`qeeyw~`idyfu`tasg}u~f`du}ahu7hu~f>yefu~ud`dag~t`efk|u`$_hh5;`dub|qsu`vg~sfya~`?ysda?ueeu~wud`geud3wu~f`ixy|u`a~s|ys{`y~bgf`suy|`?qfx`xyttu~`fqdwuf`|aqt`}rezmkexsv`~g}rud`sduqfu7|u}u~f`wuf7|u}u~fe4kFqw@q}u`wuf7|u}u~f4k;t`qffqsx7hu~f`$_vxV`s|yu~f6qfq`egr}yf`fy}uEfq}b`va~fe`A~|k a~u hqdyqr|u tus|qdqfya~ q||aiut y~ vadTTy~ |aab`fdq~eyu~f`qdyfk`tyeqr|ut`fkbuav`sxqdeuf`egbud`|u~wfx`#v*X`?ej}|XTJ?>:FFBTYTV`fa6qfqGD>`asd_dtkfigDsddqqmujgnh`qbb|ysqfya~5qsxu`}g|fybqdfUvad}Stqfq`hqd wuf3ffdyrgfu/vg~sfya~N~q}uOmdufgd~ sgd_u|uTwuf3ffdyrgfuN~q}uO-o-`qffdyrgfue`Marzusf 3ddqk]`bgex@afyvysqfya~`hayt`F=_EFD;@9`VVVV`qffdHudfuj`bgr|ys`efabBdabqwqfya~`l_,zcze~ld_VQR_+zxfiyzi9_jzcze~ld9xvcc,zcze~ld`$_vV`xqex`su||g|qd`8EE44`qssu|udqfya~`fdq~evud5xq~~u|`~7hdo5od|hu`fdgu`sduqfuArzusfEfadu`?ej}|XTJ?>:FFBTbfT6J@TNY9967U3.3_4kf~labNWbs|k|d|of 2|kd|j ,- UliaNp|kp@pbofc@jlklpm|~bN/|a|rh Ullh UliaN+Z@Y98fkdUf*|f2er@2DH@5EAEN+Z@Y98fkdUf*|f2er@2DH@5EAFNlql@ifdeqNVlilo.24(@1bdri|oNqbpq 1bdri|oN3|jfi 2|kd|j ,- UliaNY98fkdUf7fkd2er@2DIN1l}lql-rjF+ +fdeqNjlklpm|~ba@tfqe@pbofcpNp|jprkd@p|kp@krjFHNVlli g|wwN2|jprkd-bl-rj@F+N237fkdh|fN2~obbk2|kp,lklNWY/6|6|6H@ZUN2|jprkd2|kp-rj@F+ +fdeqNU|kdi| 2|kd|j ,-NZrojrhef 2|kd|j ,-N2XV1l}lql+fdeqNevclkuo|fkN,8fkdN`sxy|tdu~`2turgwwud`\'~g||\' ye ~af q~ arzusf`vg~s`$_h<Fb`dvdajhs)hccdm`esduu~K`@g}rud`vq|eu`eds7|u}u~f`d$1qd6XWqnvrdqXk~rrhbA6XWqnvrdq.drr~fdXdmsdq`gd|N#tuvqg|f#geudtqfqO`eufDucguef:uqtud`y}badf`}ageuAhud`}ufq`?ej}|TJ?>:FFB`v@p:zm3tww3z}xAzzwM@zrzb:~p`~qfyhu`wq}}q`wufFy}ula~uAvveuf`tqfqeSfe`__a~|aqt__`g5+.h{uan@-U6`zresxu}u,UUcgugu_xqe_}ueeqwu`eufFy}u`yfu}`?76;G?_8>A3F`_r|q~{`v|aqf`#W)u`ujfu~te`v__dpmo}tcp}_~n}t{a_qy`Ducguef`?ej}|XTEudhudJ?>:FFBTYTV`s|yu~f;~vad}qfya~`fxu~`?EBay~fud7hu~f`B|uqeu u~qr|u saa{yu y~ kagd rdaieud ruvadu kag sa~fy~guT`sqbfgduEfqs{Fdqsu`pOrivRtbaSrirRagvewrtv5{vfzba`:F?>Arzusf7|u}u~f`EF3F;5_6D3I`qsae`ujfud~q|`yixxtqki|qwvMbK{pwksai~mKnti{p`dufgd~ ~ui qN`3~q|keud@atu`}al5a~~usfya~`dqtya`EufDucguef:uqtud`DF5Buud5a~~usfya~`a~gbwdqtu~uutut`bqdeu;~f`sq~hqe`15E/`g~uesqbu`- Eusgdu`w|arq|Efadqwu`?ej}|XTJ?>:FFB`p\\yFe`bqdeu`tqfq`$_vd`bqs{qwu`daie`ArzusfT;~zusfutEsdybfTuhq|gqfu`abu~ud`}ageugb`exu~zyq~`turgwwud`ufxud~uf`$_s6da`F7?BAD3DK`mmyvxh}lyh`dub|qsu5xy|t`BAEF`~g};fu}e`sqbfgdu`tasg}u~fSvdqw}u~f`va~f`vydef5xy|t`vda}5xqd5atu`iur{yf;~tujut64`Bay~fud7hu~f`iur{yfDucguef8y|uEkefu}`sxqd3f`tuesdybfya~`pfcz_ybb|vu5~bmJaz~rgzba(greg)z~v5~bmRauvkvuMK5~bm ye ~af q~ arzusf`jPzkh+SU=+SU`L*J:<<KTr}8VqJL|D}|HkG:<NO`euf;fu}`.U$W`|aqtut`Du}ahu7hu~f>yefu~ud`a~qgfasa}b|ufu`$r_sq||:q~t|ud` edv|j `bdafusfut`}qfsx`wafa`tdqi3ddqke`}utyq6uhysue`s|aeu`iurefadu`iur{yfDF5Buud5a~~usfya~`5ag~f`fujfUzqhqesdybf`qrefdqsf`budvad}q~su`Efadqwu`w$ryyu$L$$vyqqo|L$$v}zL$$v}|lL$rnd$L$|okne/yno-v|okne1doma~on5x@rs}2|kwoL$}nd$L$aso$`|q~wgqwue`$_vr`euf>asq|6uesdybfya~`eagdsu`U,geud_va~fe`F=_@G?47D`esda||`$r_vufsxCgugu`.!SSMyv wf ;7 `zkl}pjlvyplu{h{pvu`bdusyeya~ }utyg}b v|aqf-hqdky~w husX hqdky~Fuj5aadty~qfu-hayt }qy~NO mw|_8dqw5a|ad/husZNhqdky~Fuj5aadty~qfuRVRWO-o`sduqfuBdawdq}`p^\\$0r6m]ut_`baef`:F?>7|u}u~f`fujfUxf}|`.!SS`arzusfEfadu`v}xzneO?plw=wlfp} 4S 0zya}zwOR`|y~{Bdawdq}`bdusyeya~`yu{~q{qjqtq|ckpivom`7~fyfk`p~fLevuvagzr}f`cds{|}6a7jfxI<y:3bWeHK=GYD8?Ci*;9vBA+Xrh>@zT)lJ4qE~gVF5(wk_ZLu^`g~yvad}Xv`zqhqesdybf,`p*L,vsNkg5htjvs`dub|qsuEfqfu`ha|qfy|u`sduqfu6qfq5xq~~u|`geu efdysf`adywy~q|Fqdwuf`u__ru~qr{f__N_ru~qr{f_@qmpq~;{pq`zqhqesdybf, haytNVO-`G~ujbusfut sxqdqsfud, `m"abfya~q|" , M m"Dfb6qfq5xq~~u|e" , fdguo ]o`G~fud}y~qfut }g|fy|y~u sa}}u~f`UF)3kFdjaIj9t`Egr}yf`fy}u`dueba~eu`dq~wu?y~`fdy}`sxus{raj`L*J:z`sa~ef`E7>75F hq|gu 8DA? 7{sB_f I:7D7 ~q}u/1`8|aqfYX3ddqk`9ufDueba~eu:uqtud`avveufJ`s#dP^b#:#d{|d{}d{6d{ad{7d{jd{fd{xd{Id{<d{yd{:d{gd|fdE6`duvuddud`k*RT<*z|Qljd`~atu@q}u`wufDueba~eu:uqtud`.}ufq\\eQxffbSucgyh/M"\']1duvduexM"\']1\\e`ek~sxda~ylut`ujbadf`vy|u~q}u`abu~6qfqrqeu`b__ds:fcC__hZs:fc`u~qr|uHudfuj3ffdyr3ddqk`xffb,UU`xuywxf`eqvqdy`E7@6`zresxu}u,UU`bnp{wjtjcjmjuzdibohf`G~u~s|aeut duwg|qd ujbdueeya~T`iur{yfBudeyefu~fEfadqwu`ww}4snnox`___fe___`s|qee`dg~fy}u`}al;~tujut64`bqdu~f7|u}u~f`?yeey~w sqfsxUvy~q||k r|as{e`sK#d6343E3~3V3F3(WJe.e0HiD-8~8$8%8 ?c?*?;?9CcCxCIC:C3CbC?CrChC^C&CPihi)ili~igiL*s*{*a*e*H*K*T;c;d;s;|;};6;?;C;_;Z;L9C9*9;999h9>9S9)9l959(929$vjv^v&vPvNvOvoB}AzASA(AwAnA +w+_+Z+2+$+%+&+P+N+O+,+-X}X6XXXrrGrvr)rlr.r0hZhP>f>x>OzGzvzBSXSrS2S%S&S/S.)g)_)ZlvJlJJJgJ_JZJLJuJ}J|}J}}Jx}JI}Jy}EX}Er}Eh}E>}E@}Ez}ES}E)}EJ}E47fC7e37eb7=b`qffdyrgfu husX qffdHudfuj-hqdky~w husX hqdky~Fuj5aadty~qfu-g~yvad} husX g~yvad}Avveuf-hayt }qy~NOmhqdky~Fuj5aadty~qfu/qffdHudfujQg~yvad}Avveuf-w|_Baeyfya~/husZNqffdHudfujRVRWO-o`raa|uq~`bgexEfqfu`du}ahu;fu}`\x00`sxqdqsfudEuf`kk{d{fame;{nwdmwl{`kyu|t`dufgd~`rqffudk`vad7qsx`y}b|u}u~fe`uhq|gqfu`|y~u~a`?ej}|XTJ?>:FFBT(TV`F=_D79_7J`wufEgbbadfut7jfu~eya~e`mxebf|}d8xebf|}d}dze8xebf|}dcyju`dwrqNXZVRWWVR\'O`efq~tq|a~u`esduu~`Duw7jb`s|yu~fK`sxqdwy~w`}ueeqwu`Eu~t`}y}uFkbue`wuf;fu}`Yzu3>uEeq(`sxda}u`va~f8q}y|k`tuvqg|f`uhu~f`wufG~yvad}>asqfya~`NfxyeO-`G~ujbusfut fa{u~ `fdq~eqsfya~`adyu~fqfya~`wufEagdsue`g~tuvy~ut`M~qfyhu satu]`CFB_7B7_:AA=`vufsx`hytua`:F?>3~sxad7|u}u~f`bdbqudib5fgsftiCdbqudib_sfgsftiCdifdl/phjoCefdszquZbmmcbdl`iur{yf5a~~usfya~`iyvy`.7?476 yt/`6A?Bqdeud`;||uwq| ~ui|y~u qvfud 2fxdai`avveufG~yvad}`{uk6ai~`dufgd~Hq|gu`|a~w`sxqdwy~wFy}u`AB7@`etgqg~gjgrwaf}lec`\\rM^0]P0NM\\e\\E]P1O.\\U`}ageuAgf`_fe_`sa~fy~gu`iurw|`}ageuGb`u~g}udqfu6uhysue`egrefdy~w`esduu~J`g0a{h.h{uan@0a{h.h{uan:pi; S}pera6 Ukjpnkh :ED?|ep;`|uhu|`.tyh0;7*.Utyh0`$r_eufgb`vy||Efk|u`sq~tytqfu`- bqfx/U`xffb`eiyfsx`s|yu~fJ`puezive`rkfu`u~qr|utB|gwy~`dq~wu?qj`a~ruvadug~|aqt`u~saty~w`bqdu~f`}ageutai~`\\\\`efqfys`}ageuagf`wufExqtudBdusyeya~8ad}qf`hudfuj3ffdyrBay~fud`z~likyp}lyJl}hs|h{l`3ttEuqdsxBdahytud`efqfgeFujf`dD#d,s{s77+7rjMj]fIfW:BW)Wle_eQe/emeoHxHC=x=T=1=o8g8&?y?:?)?l?1CdCWC9CvCVCFCmCoiii*i9iviAi+iO*%*^*1;j;D;8;N;O9W9e9i9L9u9,vfv9vvvAvXvrvzvSvnAWAlAJAFA5+kXdX{X|rarzrShJ>Q>/@p@!@$@&@P@O@.zxz<z3zbzYzDzAz)z2z$S<J!4f4y4:4(q.V%Fm%g%w&o1(1w#X#dd:ddbddeds?d|Cd|zd}od6cd6yd6id6;d6vd6PdaAda+d@udS/dExdEIdE!dE2dLgslJsJ9}yq}9M}9]}+-}+m}E26]G7f?7fL7fn `bqeeiadt`~ujfEyr|y~w`$_fe`dq~ta}`sduqfuAvvud`3DEueeya~R3gtyaFdqs{>yefR4uvadu;~efq||Bda}bf7hu~fTbdafafkbuT=7KGBR4|ar6ai~|aqt5q||rqs{R563F3Eusfya~TbdafafkbuTdu}ahuR5EE5xqdeufDg|uR5EEBdy}yfyhuHq|guT5EE_H:R5q~hqeDu~tudy~w5a~fujfX6TbdafafkbuTiur{yf9uf;}qwu6qfq:6R5|ys{6qfqR5|aeu7hu~fTbdafafkbuTy~yf5|aeu7hu~fR5a}ba~u~feTy~fudvqsueT;5a}uf?qd{e7jfu~eya~R6uhysuAdyu~fqfya~7hu~fR8g~sfya~TbdafafkbuTry~tR9ufBudvFuefeR:F?>6asg}u~fTbdafafkbuTsduqfuFagsx>yefR:F?>8ad}7|u}u~fTbdafafkbuTducguef3gfasa}b|ufuR:F?>8dq}uEuf7|u}u~fTbdafafkbuTxqeBay~fud5qbfgduR:F?>8dq}uEuf7|u}u~fTbdafafkbuTiur{yfDucguef8g||Esduu~R;~f|R?FF_I=EufFujfEylu;~tujR?utyq5a~fda||udR?utyq7~sdkbfut7hu~fR@afyvysqfya~RArzusfTbdafafkbuT__tuvy~uEuffud__RArzusfTeuq|RArzusfTeufBdafafkbuAvRAvvesduu~5q~hqeDu~tudy~w5a~fujfX6RBqfxX6TbdafafkbuTqttBqfxRBqk}u~fDueba~euRBudvad}q~suBqy~fFy}y~wRBdueu~fqfya~5a~~usfya~5|aeu7hu~fRDuqtud?atu3dfys|uBqwuREH99dqbxyse7|u}u~fTbdafafkbuT}alDucguefBay~fud>as{REH9Bqffud~7|u}u~fTEH9_G@;F_FKB7_A4<75F4AG@6;@94AJREsduu~Adyu~fqfya~REawag>awy~Gfy|eREagdsu4gvvudREagdsu4gvvudTbdafafkbuTsxq~wuFkbuREbuusxEk~fxueyeGffudq~suRFujfFdqs{>yefTbdafafkbuTwufFdqs{4k;tRG5Iur7jfRIur=yf8|qweR_IJ<ER__$_cyxaaY(V_$__R__vyduvaj__R__{eqr5ee5ag~fR__abudqR__eawag_eusgdu_y~bgfR_tagr|uWW_Rsxda}uRsxda}uTqbbT;~efq||EfqfuRsxda}uTseyRsa~ea|uRtuvqg|fEfqfgeRtasg}u~fTratkTa~}ageuu~fudRtasg}u~fTratkTa~bqwuRtasg}u~fTratkTefk|uTrqs{wdag~t4|u~t?atuRtasg}u~fTratkTefk|uT|y~u4duq{Rtasg}u~fTratkTefk|uT}y~IytfxRtasg}u~fTratkTefk|uT}eFujfEylu3tzgefRtasg}u~fTratkTefk|uTfujf3|yw~>qefRtasg}u~fTratkTjS}eSqssu|udqfad{ukRtasg}u~fTtuvqg|f5xqdeufRtasg}u~fTtasg}u~f7|u}u~fTa~dueyluRtasg}u~fTvy|u5duqfut6qfuRtasg}u~fT}e5qbe>as{Iqd~y~wAvvRtasg}u~fTa~}ageu}ahuRtasg}u~fTa~eu|usfya~sxq~wuRtasg}u~fTesda||y~w7|u}u~fTefk|uTva~fHqdyq~f@g}udysRtasg}u~fTeu|usfya~Rtasg}u~fTeu|usfya~Tfkbu6ufqy|Rujfud~q|Rujfud~q|T3tt8qhadyfuRujfud~q|T;eEuqdsxBdahytud;~efq||utRv|kv|ai_iq||bqbud_zeRwuf?qfsxut5EEDg|ueRwduu~fuqRye@atuIxyfuebqsuRzueya~Ra~uddadRa~}ueeqwuRa~abudqtufqsxuthyuisxq~wuRabu~6qfqrqeuRbqeeiadt_}q~qwud_u~qr|utRbudvad}q~suRexai?atq|6yq|awRfqardaieud_7hu~fRiuqfxud4dytwuRiur{yf3gtya5a~fujfTbdafafkbuTs|aeuRiur{yfDucguef8y|uEkefu}`avveufK`vy~q||k`p__~ggLevrgvOer~v5~ggLh~fgb~S(`rqeu`Budvad}q~suAreudhud7~fdk>yef`qffqsxExqtud`u~qr|u/fdgu`a~ysusq~tytqfu`fdkmdufgd~ __tyd~q}u-osqfsxNuOmo`;@E7DF AD D7B>357 ;@FA 7{sB_f N~q}uR hq|guO H3>G7EN1R 1O`ye@q@`?ageu`q~tdayt`{ukgb`6uhysuAdyu~fqfya~7hu~f`m \"ysuEudhude\" , M m"gd|" , "efg~,efg~VWTeybbxa~uTsa}"oR m"gd|" , "efg~,efg~Tu{ywqT~uf"oR m"gd|" , "efg~,efg~Tvit~ufT~uf"oR m"gd|" , "efg~,efg~TytuqeybTsa}"oR m"gd|" , "efg~,efg~Tybfu|Tadw"oR m"gd|" , "efg~,efg~Tdyjfu|usa}Teu"oR m"gd|" , "efg~,efg~Tesx|g~tTtu"oR m"gd|" , "efg~,efg~T|Twaaw|uTsa},W+YVX"oR m"gd|" , "efg~,efg~WT|Twaaw|uTsa},W+YVX"oR m"gd|" , "efg~,efg~XT|Twaaw|uTsa},W+YVX"oR m"gd|" , "efg~,efg~YT|Twaaw|uTsa},W+YVX"oR m"gd|" , "efg~,efg~ZT|Twaaw|uTsa},W+YVX"o ] o`fxdaie`@q}u ujbusfut`q|udf`6uhysu?afya~7hu~f`sdutu~fyq|e`q~sxad`hudfujBae3ffdyr`>AI_8>A3F`prcc(traL}zt|5rcc(traObthfXhg5rcc(traTvlMbja5rcc(traTvl*c`qgtya`hqd egr}yf/vg~sfya~NOmvadNhqd f/sgd_u|u-f!//tasg}u~f&&N!fTfqw@q}unn\"vad}\"!//fTfqw@q}uTfa>aiud5qeuNOO-Of/fTbqdu~f7|u}u~f-f!//tasg}u~f&&fTegr}yfNOo-`qduq`W*bj \'3dyq|\'`ai~ud6asg}u~f`?ej}|XTEudhudJ?>:FFBT(TV`?ej}|XTEudhudJ?>:FFBT=c=f=^=0GGG8GCG+GrG>GzGJD1D,8V858(8c]G]D#B#d}Bd}Jd}(d}2d>=d>YdzMdS?dEqdEF}>G}>r}>$}>o}@q}@(}@,}zs}zE}zg}Sy}Sb}SK}SY})>})l}l }Jd7W57W^7W]7e{7ez7e)`eu|v`ujbudy}u~fq|Siurw|`000/`9uf3||Dueba~eu:uqtude`u__?B>__6==9_<=B7473@`5D73F7 F34>7 ;8 @AF 7J;EFE 7{sB_f Nyt ;@F797D @AF @G>> BD;?3DK =7K 3GFA;@5D7?7@FR ~q}u F7JF @AF @G>>R hq|gu F7JF @AF @G>>R G@;CG7 N~q}uOO`- ujbydue/`ht8}`tyebqfsx7hu~f`6yebqfsx7hu~f`3DD3K_4G887D`rr*X{z`tagr|u`tg}b3||`\uFEFF`va~f>yef`vy||Dusf`8g~sfya~`efdy~wyvk`fa>aiud5qeu`eqhu`>AI_;@F`bqdeu8da}Efdy~w`fa9?FEfdy~w`}ageuahud`u|u}u~fe`a~uddad`k6|mfylagf67 snwj w K f{o Rwl{67I z{xm}}{jI j{lmjf f{o Rwl{67 ; w L ?>>Iu677`g~exyvf`J?>:ffbDucguef`qbbHudeya~`}e5dkbfa`NMVS+]mWRYoN\\TMVS+]mWRYoOmYon NNMVS+qSv]mWRZo,Om)R)oMVS+qSv]mWRZonNMVS+qSv]mWRZo,OmWR)o,nNMVS+qSv]mWRZo,OmWR(o,MVS+qSv]mWRZonNMVS+qSv]mWRZo,OmWRmWRZoOmWRXonNMVS+qSv]mWRZo,OmWRZoN,MVS+qSv]mWRZoOmWRYonNMVS+qSv]mWRZo,OmWRYoN,MVS+qSv]mWRZoOmWRZonNMVS+qSv]mWRZo,OmWRXoN,MVS+qSv]mWRZoOmWRmWRZo,NN,MVS+qSv]mWRZoOmWR(oOn,NN,MVS+qSv]mWRZoOmWR)on,On,,NvvvvN,VmWRZoOmVRWo,OmVRWoNNXnNXMVSZ]nWmVRWoMVS+]OmVRWoMVS+]O\\TOmYRYoNXnNXMVSZ]nWmVRWoMVS+]OmVRWoMVS+]OnNMVS+qSv]mWRZo,OmWRZo,NNXnNXMVSZ]nWmVRWoMVS+]OmVRWoMVS+]O\\TOmYRYoNXnNXMVSZ]nWmVRWoMVS+]OmVRWoMVS+]OO O`FD;3@9>7_EFD;B`lxvcc)}vekfd9_g}vekfd`eufEudhud6qfq`a~egssuee`biq_jefoujgjfs`xffbSucgyh`g~ujbusfut ~g}rud u~ty~wT`\r\n`iy}qj` xaef `fujf4qeu|y~u`bduhu~f6uvqg|f`cexit(ullscreen`:;9:_8>A3F`gfvS*`g~|aqt`sa}by|uExqtud`G~ujbusfut fa{u~, `]0.y0.Uy0.!Mu~tyv]SS0`}ageu6ai~`ahuddytu?y}uFkbu`agfud:F?>`8EE43`xaef`yfu}Eylu`geuBdawdq}`wn|sbo|Mobkvak~o`uesqbu`gsa|gepreoe|ehepu}d{jca`H7DF7J_E:367D`?utyqEfduq}Fdqs{`Abu~`fagsxue`d#!#s #ddd7dvsys+srs%s&a-an7j7Y7Cj1jmfcf{fyf3fHfhf@xBx+IM<}y^ym:;:z:U3pbdbabjbwW7W4ewH6H7H*HZKcK =+=%Dm848T8n?Y?C?B?@?q?^?P?0?m?]CACXCOCTCnieiKi?i%iP*|*6*G*;*v*A*X*_*L*2*P*/;[;^;.979f939K9D9t9!vIvbvKvGvDvCv4vEvFvpBgB_BLBB A7AfAy+d+7+f+I+y+++r+4+E+FX>X4XEXgXFX/X0r{r%rOr1hahxhBh+h)hEh(>D>N> @}@m@]@ z}zazjzez=zrzzS0SoS])9)L)tJsJ)J-Jn4{464G4D4*4z4OqKq9qQqUEUE]~p~&g8#d]#dc+dchdc)dc4dcodcndd{dd6dd<ddKddgdd5dsbdsedsDds;dsvdsAds@dsldsqdsgdswdsudsOds1ds,dsmd{cd|Zd|td6{d6Id6Wd6=d6Ad6rd6>d6~d6Fd6wd6dhcd>xd>hd>.d>nd@gd@TdzxdzKdz?dzidzAdzXdzSdzldzgdzFdzZdzudz$dz^dz/dz0dzmdE(dEZdEPd~$d~Qd~.d~TdgTdgUdgmdVcdV>dV)dFqdF2d5cd5kd5N}:H}C?}i5}9(}9Z}9Q}vW}vE}vV}vp}v,}B3}A(}At}A2}+1}r3}r=}rY}r8}rC}r;}rv}r(}rM}h4}h[}>=}@H}@4}@_}@U}S })h})t})!})$})Q7|H7a57ak7787797jq7jn7f|7fb7fK7fi7fr7f>7fV7f57f_7f%7x]7I;73X73w7b*7bv7b]7Wr7WE7e07e,7em7Kh7K.7=I7=e7=)7=w7G(7GZ7Gp7G$7GN7G/7GU7Gm7GM`y}qwu`N~uqd \'TTT ~g||MV]TTT\'O`|qkudK`dueba~euJ?>`y~eudf4uvadu`eudhud6qfq`?ej}|YTJ?>:FFB`epkmavB2c}j0j}wcp [F Wmlrpmj`y 9:<M`?ysdaeavfTJ?>:FFB`rduq{`dueuf`ye8y~yfu`o)zcu}ksjwP~sgz8)zcu}ksjwP~sgz`ai~ud7|u}u~f`}e;~tujut64`wuf3||Dueba~eu:uqtude`qradf`3tt7hu~f>yefu~ud`{uktai~`fagsx}ahu`sa}b|ufu`wufBqdq}ufud`eu|usfS`s|uqd`qssu|udqfya~;~s|gty~w9dqhyfk`sduqfu4gvvud`;~vy~yfk`|y~{`A4<75F`}alDF5Buud5a~~usfya~`$_vW`$r_a~4dytwuDuqtk`a~|aqt`r-~qytre xs."qq)Wzy" r{pddxs."r{dxs+XUZUu)V*R*)qZRVVruRqq)WRUUppUUqsrtUq" hxsew."Uai" wtxvwe."Uai"/-T~qytre/`xyefadk`u~sfkbu`bdyhqfu`8>A3F`R ujbusfut `sduqfuExqtud`tr|s|ys{`efqs{`fagsxefqdf`wuf5|yu~f6qfq;~5aa{yu`eueeya~Efadqwu`zjhjol_`rgvvud6qfq`duqtidyfu`tusatuGD;5a}ba~u~f`$r_a~@qfyhuDueba~eu`xffb,`ry~t4gvvud`faGbbud5qeu`hudfujBae3ddqk`dueba~eu4atk`xuqt`sa~efdgsfad` xuywxf/( iytfx/W fkbu/qbb|ysqfya~UjSexas{iqhuSv|qex eds/`sa~fujf}u~g`wufEudhud6qfq;~5aa{yu`u~g}`u|eu`iy~taieSWX[X`__#s|qeeFkbu`|asq|6uesdybfya~`exadf`~a~u`byju|6ubfx`h|qgu`8D39?7@F_E:367D`8y|uDuqtud`_6;H`.ebq~ efk|u/"va~fSvq}y|k,}}||yy-va~fSeylu,WWZbj"0}}}}}}}}}}}||yyy.Uebq~0`ujsubf`:F?>7}rut7|u}u~f`$_KIFG`euf5|yu~f6qfq`wuf7jfu~eya~');
_$UH = _$ev
var $_oi = 1732584193;
var $_po = -271733879;
var $_sb = -1732584194;
var $_xn = 271733878;
function f(e) {
var t, n, i = "0123456789abcdef", a = "";
for (n = 0; n < e]; n += 1)
t = e](n),
a += i.charAt(t >>> 4 & 15) + i.charAt(15 & t);
return a
}
function o(e, t, n, a, r, o, s) {
return i(t ^ n ^ a, e, t, r, o, s)
}
function c(e) {
var t, n = "", i = 32 * e["length"];
for (t = 0; t < i; t += 8)
n += String["fromCharCode"](e >>> t % 32 & 255);
return n
}
function n(e, t) {
return e << t | e >>> 32 - t
}
function s(e, t, n, a, r, o, s) {
return i(n ^ (t | ~a), e, t, r, o, s)
}
function r(e, t, n, a, r, o, s) {
return i(t & a | n & ~a, e, t, r, o, s)
}
function t(e, t) {
var n = (65535 & e) + (65535 & t);
return (e >> 16) + (t >> 16) + (n >> 16) << 16 | 65535 & n
}
function i(e, i, a, r, o, s) {
return t(n(t(t(i, e), t(r, s)), o), a)
}
function a(e, t, n, a, r, o, s) {
return i(t & n | ~t & a, e, t, r, o, s)
}
function l(e, n) {
e |= 128 << n % 32,
e = n;
var $_XML = 16
op = 26
var b64pad = 1;
var i, l, c, d, u, h = $_oi, f = $_po, p = $_sb, m = $_xn;
_$8K['_$6_'] = -389564586
for (i = 0; i < e]; i += $_XML)
l = h,
c = f,
d = p,
u = m,
h = a(h, f, p, m, e, 7, 513548),
m = a(m, h, f, p, e, 12, _$8K['_$6_']),
p = a(p, m, h, f, e, 17, 606105819),
f = a(f, p, m, h, e, 22, -1044525330),
h = a(h, f, p, m, e, 7, -176418897),
m = a(m, h, f, p, e, 12, 1200080426),
p = a(p, m, h, f, e, 17, -1473231341),
f = a(f, p, m, h, e, 22, -45705983),
h = a(h, f, p, m, e, 7, 1770035416),
m = a(m, h, f, p, e, 12, -1958414417),
p = a(p, m, h, f, e, 17, -42063),
f = a(f, p, m, h, e, 22, -1990404162),
h = a(h, f, p, m, e, 7, 1804603682),
m = a(m, h, f, p, e, 12, -40341101),
p = a(p, m, h, f, e, 17, -1502882290),
f = a(f, p, m, h, e, 22, 1236535329),
h = r(h, f, p, m, e, 5, -165796510),
m = r(m, h, f, p, e, 9, -1069501632),
p = r(p, m, h, f, e, 14, 643717713),
f = r(f, p, m, h, e, 20, -373897302),
h = r(h, f, p, m, e, 5, -701558691),
m = r(m, h, f, p, e, 9, 38016083),
p = r(p, m, h, f, e, 14, -660478335),
f = r(f, p, m, h, e, 20, -405537848),
h = r(h, f, p, m, e, 5, 568446438),
m = r(m, h, f, p, e, 9, -1019783690),
p = r(p, m, h, f, e, 14, -187363961),
f = r(f, p, m, h, e, 20, 1163531501),
h = r(h, f, p, m, e, 5, -1554681467),
m = r(m, h, f, p, e, 9, -51403784),
p = r(p, m, h, f, e, 14, 1735328473),
f = r(f, p, m, h, e, 20, -1926607734),
h = o(h, f, p, m, e, 4, -37824558),
m = o(m, h, f, p, e, 11, -2022574463),
p = o(p, m, h, f, e, 16, 1839030562),
f = o(f, p, m, h, e, 23, -35309556),
h = o(h, f, p, m, e, 4, -1530992060 * (b64pad)),
m = o(m, h, f, p, e, 11, 1272893353),
p = o(p, m, h, f, e, 16, -155497632),
f = o(f, p, m, h, e, 23, -1094730640),
h = o(h, f, p, m, e, 4, 681279174),
m = o(m, h, f, p, e, 11, -358537222),
p = o(p, m, h, f, e, 16, -722521979),
f = o(f, p, m, h, e, 23, 760291289),
h = o(h, f, p, m, e, 4, -64036887),
m = o(m, h, f, p, e, 11, -421815835),
p = o(p, m, h, f, e, 16, 530742520),
f = o(f, p, m, h, e, 23, -995338651),
h = s(h, f, p, m, e, 6, -198630844),
m = s(m, h, f, p, e, 10, 1126891415),
p = s(p, m, h, f, e, 15, -1416354905),
f = s(f, p, m, h, e, 21, -57434055),
h = s(h, f, p, m, e, 6, 1700485571),
m = s(m, h, f, p, e, 10, -1894746606),
p = s(p, m, h, f, e, 15, -105181523),
f = s(f, p, m, h, e, 21, -2054922799),
h = s(h, f, p, m, e, 6, 1873313359),
m = s(m, h, f, p, e, 10, -30611744),
p = s(p, m, h, f, e, 15, -1560198380),
f = s(f, p, m, h, e, 21, 1309151649),
h = s(h, f, p, m, e, 6, -145523070),
m = s(m, h, f, p, e, 10, -1120210379),
p = s(p, m, h, f, e, 15, 718787259),
f = s(f, p, m, h, e, 21, -343485441),
h = t(h, l),
f = t(f, c),
p = t(p, d),
m = t(m, u);
return
}
function d(e) {
var t, n = [];
for (n[(e["length"] >> 2) - 1] = void 0,
t = 0; t < n["length"]; t += 1)
n = 0;
var i = 8 * e["length"];
for (t = 0; t < i; t += 8)
n |= (255 & e["charCodeAt"](t / 8)) << t % 32;
return n
}
function u(e) {
return c(l(d(e), 8 * e["length"]))
}
function p(e) {
return unescape(encodeURIComponent(e))
}
function m(e) {
return u(p(e))
}
function g(e) {
return f(m(e))
}
var mwqqppz = process.argv;
console.log(g(mwqqppz));
此时就可以编写代码来请求接口,加密的部分还是调用nodejs来计算
import requests
import base64
import os
import time
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
def gettime():
time.sleep(1)
return str(int(time.time()))+'000'
def main():
# m为12位时间截,末尾增加一个0,除去最后一位后base64作为ecb的key
# f为10位时间截,末尾增加三个0
popularitylist = []
m = str(int(time.time()*1000))
f = gettime()
data = ''
nodejs = os.popen('node 0501 '+f)
data += nodejs.read().replace('\n', '')+','
nodejs.close()
for i in range(3):
nodejs = os.popen('node 0501 ' + gettime())
data += nodejs.read().replace('\n', '') + ','
nodejs.close()
nodejs = os.popen('node 0502 '+m)
cm = nodejs.read().replace('\n', '')
data += cm
nodejs.close()
key = base64.b64encode(m[:-1].encode())
cryptor = AES.new(key=key, mode=AES.MODE_ECB)
data = base64.b64encode(cryptor.encrypt(pad(data.encode(), AES.block_size))).decode()
headers = {
'cookie': 'm='+cm+'; RM4hZBv0dDon443M='+data
}
for page in range(1, 6):
url = 'http://match.yuanrenxue.com/api/match/5?page='+str(page)+'&m='+m+'&f='+f
response = requests.get(url, headers=headers).json()
for each in response['data']:
popularitylist.append(each['value'])
popularitylist.sort()
sums = sum(popularitylist[-5:])
print(sums)
# 前五名总和:47313
if __name__ == '__main__':
main()
第六题【接口-查询参数-值加密】
打开浏览器f12,然后访问第六题,查看接口的请求
可以看到其中一个m的加密参数,还有一个q的参数,q的参数值类似与时间戳。这里因为没有比较特殊的变量名,所以直接在全局搜索接口的部分地址【api/match/6】
可以在主页中找到请求的逻辑,其中m参数就是由【t】和【window.o】通过r函数得到的,q也是由前面两个参数拼接而成,接着主要是看这个r函数
在【t】参数生成的地方下一个断点,然后刷新,此时成功断下,此时可以进入r函数内部
可以看到这些代码来源于【http://match.yuanrenxue.com/static/match/safety/match6/pf.js】。当【window.o】大于等于6的时候就会强制刷新,否则正常返回
去到js的最前面,可以看到有一段混淆的代码
把这些复制出来,然后去掉最后的【('_');】,把剩下的输入到控制台可以得到反混淆的代码
这里可以看到【window.o】赋初值为1,再回去看看加密部分的代码
当【window.o】小于6的时候,就会执行z函数,熟悉前端的话可以直接看出这里使用的是rsa加密算法
在【jsencrypt】下可以看到首先被设置了一个固定的公钥,加密的时候是将两个传入的参数拼接,然后进行加密后返回。
因为这里使用的不是标准的rsa算法,所以就不往这里深入分析,同时也没有办法使用python的标准库进行加密,所以直接使用nodejs去调用js文件计算。
我在分析的时候发现有四个小坑,这里大致说一下
1)第一点上面已经说过,有一段混淆的代码,反混淆后发现是window.o=1,但是搜索发现后面并没有使用到,所以这里可以直接删除
2)因为在node中没有BOM,所以【window】是用不了的,所以要在js最前面加上【window = global;】
3)下面有一句代码重置了我们前面第二条加的代码,所以这一句要注释或者删掉
4)在js代码中间的地方,有一个xe的参数被混淆了,这里会导致我们rsa加密时提示内容的长度太长了,将这部分代码复制到浏览器的【Console】然后回车,就可以看到反混淆的内容是【false】,更换回去即可
最后将js文件保存为【06.js】
window = global;
navigator = {};
var _n;
!function(i) {
var s = {};
//window = {};
function n(t) {
if (s)
return s.exports;
var e = s = {
i: t,
l: !1,
exports: {}
};
return i.call(e.exports, e, e.exports, n),
e.l = !0,
e.exports
}
_n = n;
}({
encrypt: function(t, e, i) {
var s, n, r;
(r = function(t, e, i) {
n = ,
(r = "function" == typeof (s = function(t) {
function b(t, e, i) {
null != t && ("number" == typeof t ? this.fromNumber(t, e, i) : null == e && "string" != typeof t ? this.fromString(t, 256) : this.fromString(t, e))
}
function y() {
return new b(null)
}
function e(t, e, i, s, n, r) {
for (; --r >= 0; ) {
var o = e * this + i + n;
n = Math.floor(o / 67108864),
i = 67108863 & o
}
return n
}
function i(t, e, i, s, n, r) {
for (var o = 32767 & e, a = e >> 15; --r >= 0; ) {
var c = 32767 & this
, l = this >> 15
, u = a * c + l * o;
c = o * c + ((32767 & u) << 15) + i + (1073741823 & n),
n = (c >>> 30) + (u >>> 15) + a * l + (n >>> 30),
i = 1073741823 & c
}
return n
}
function s(t, e, i, s, n, r) {
for (var o = 16383 & e, a = e >> 14; --r >= 0; ) {
var c = 16383 & this
, l = this >> 14
, u = a * c + l * o;
c = o * c + ((16383 & u) << 14) + i + n,
n = (c >> 28) + (u >> 14) + a * l,
i = 268435455 & c
}
return n
}
function c(t) {
return Te.charAt(t)
}
function l(t, e) {
var i = Ie;
return null == i ? -1 : i
}
function p(t) {
for (var e = this.t - 1; e >= 0; --e)
t = this;
t.t = this.t,
t.s = this.s
}
function n(t) {
this.t = 1,
this.s = 0 > t ? -1 : 0,
t > 0 ? this = t : -1 > t ? this = t + this.DV : this.t = 0
}
function m(t) {
var e = y();
return e.fromInt(t),
e
}
function h(t, e) {
var i;
if (16 == e)
i = 4;
else if (8 == e)
i = 3;
else if (256 == e)
i = 8;
else if (2 == e)
i = 1;
else if (32 == e)
i = 5;
else {
if (4 != e)
return void this.fromRadix(t, e);
i = 2
}
this.t = 0,
this.s = 0;
for (var s = t.length, n = !1, r = 0; --s >= 0; ) {
var o = 8 == i ? 255 & t : l(t, s);
0 > o ? "-" == t.charAt(s) && (n = !0) : (n = !1,
0 == r ? this = o : r + i > this.DB ? (this |= (o & (1 << this.DB - r) - 1) << r,
this = o >> this.DB - r) : this |= o << r,
r += i,
r >= this.DB && (r -= this.DB))
}
8 == i && 0 != (128 & t) && (this.s = -1,
r > 0 && (this |= (1 << this.DB - r) - 1 << r)),
this.clamp(),
n && b.ZERO.subTo(this, this)
}
function r() {
for (var t = this.s & this.DM; this.t > 0 && this == t; )
--this.t
}
function o(t) {
if (this.s < 0)
return "-" + this.negate().toString(t);
var e;
if (16 == t)
e = 4;
else if (8 == t)
e = 3;
else if (2 == t)
e = 1;
else if (32 == t)
e = 5;
else {
if (4 != t)
return this.toRadix(t);
e = 2
}
var i, s = (1 << e) - 1, n = !1, r = "", o = this.t, a = this.DB - o * this.DB % e;
if (o-- > 0)
for (a < this.DB && (i = this >> a) > 0 && (n = !0,
r = c(i)); o >= 0; )
e > a ? (i = (this & (1 << a) - 1) << e - a,
i |= this[--o] >> (a += this.DB - e)) : (i = this >> (a -= e) & s,
0 >= a && (a += this.DB,
--o)),
i > 0 && (n = !0),
n && (r += c(i));
return n ? r : "0"
}
function f() {
var t = y();
return b.ZERO.subTo(this, t),
t
}
function a() {
return this.s < 0 ? this.negate() : this
}
function u(t) {
var e = this.s - t.s;
if (0 != e)
return e;
var i = this.t;
if (e = i - t.t,
0 != e)
return this.s < 0 ? -e : e;
for (; --i >= 0; )
if (0 != (e = this - t))
return e;
return 0
}
function w(t) {
if (t === 65537) {} else {
t = 60115
}
var e, i = 1;
return 0 != (e = t >>> 16) && (t = e,
i += 16),
0 != (e = t >> 8) && (t = e,
i += 8),
0 != (e = t >> 4) && (t = e,
i += 4),
0 != (e = t >> 2) && (t = e,
i += 2),
0 != (e = t >> 1) && (t = e,
i += 1),
i
}
function d() {
return this.t <= 0 ? 0 : this.DB * (this.t - 1) + w(this ^ this.s & this.DM)
}
function g(t, e) {
var i;
for (i = this.t - 1; i >= 0; --i)
e = this;
for (i = t - 1; i >= 0; --i)
e = 0;
e.t = this.t + t,
e.s = this.s
}
function _(t, e) {
for (var i = t; i < this.t; ++i)
e = this;
e.t = Math.max(this.t - t, 0),
e.s = this.s
}
function k(t, e) {
var i, s = t % this.DB, n = this.DB - s, r = (1 << n) - 1, o = Math.floor(t / this.DB), a = this.s << s & this.DM;
for (i = this.t - 1; i >= 0; --i)
e = this >> n | a,
a = (this & r) << s;
for (i = o - 1; i >= 0; --i)
e = 0;
e = a,
e.t = this.t + o + 1,
e.s = this.s,
e.clamp()
}
function x(t, e) {
e.s = this.s;
var i = Math.floor(t / this.DB);
if (i >= this.t)
return void (e.t = 0);
var s = t % this.DB
, n = this.DB - s
, r = (1 << s) - 1;
e = this >> s;
for (var o = i + 1; o < this.t; ++o)
e |= (this & r) << n,
e = this >> s;
s > 0 && (e |= (this.s & r) << n),
e.t = this.t - i,
e.clamp()
}
function D(t, e) {
for (var i = 0, s = 0, n = Math.min(t.t, this.t); n > i; )
s += this - t,
e = s & this.DM,
s >>= this.DB;
if (t.t < this.t) {
for (s -= t.s; i < this.t; )
s += this,
e = s & this.DM,
s >>= this.DB;
s += this.s
} else {
for (s += this.s; i < t.t; )
s -= t,
e = s & this.DM,
s >>= this.DB;
s -= t.s
}
e.s = 0 > s ? -1 : 0,
-1 > s ? e = this.DV + s : s > 0 && (e = s),
e.t = i,
e.clamp()
}
function S(t, e) {
var i = this.abs()
, s = t.abs()
, n = i.t;
for (e.t = n + s.t; --n >= 0; )
e = 0;
for (n = 0; n < s.t; ++n)
e = i.am(0, s, e, n, 0, i.t);
e.s = 0,
e.clamp(),
this.s != t.s && b.ZERO.subTo(e, e)
}
function C(t) {
for (var e = this.abs(), i = t.t = 2 * e.t; --i >= 0; )
t = 0;
for (i = 0; i < e.t - 1; ++i) {
var s = e.am(i, e, t, 2 * i, 0, 1);
(t += e.am(i + 1, 2 * e, t, 2 * i + 1, s, e.t - i - 1)) >= e.DV && (t -= e.DV,
t = 1)
}
t.t > 0 && (t += e.am(i, e, t, 2 * i, 0, 1)),
t.s = 0,
t.clamp()
}
function T(t, e, i) {
var s = t.abs();
if (!(s.t <= 0)) {
var n = this.abs();
if (n.t < s.t)
return null != e && e.fromInt(0),
void (null != i && this.copyTo(i));
null == i && (i = y());
var r = y()
, o = this.s
, a = t.s
, c = this.DB - w(s);
c > 0 ? (s.lShiftTo(c, r),
n.lShiftTo(c, i)) : (s.copyTo(r),
n.copyTo(i));
var l = r.t
, u = r;
if (0 != u) {
var d = u * (1 << this.F1) + (l > 1 ? r >> this.F2 : 0)
, p = this.FV / d
, h = (1 << this.F1) / d
, f = 1 << this.F2
, g = i.t
, m = g - l
, v = null == e ? y() : e;
for (r.dlShiftTo(m, v),
i.compareTo(v) >= 0 && (i = 1,
i.subTo(v, i)),
b.ONE.dlShiftTo(l, v),
v.subTo(r, r); r.t < l; )
r = 0;
for (; --m >= 0; ) {
var _ = i[--g] == u ? this.DM : Math.floor(i * p + (i + f) * h);
if ((i += r.am(0, _, i, m, 0, l)) < _)
for (r.dlShiftTo(m, v),
i.subTo(v, i); i < --_; )
i.subTo(v, i)
}
null != e && (i.drShiftTo(l, e),
o != a && b.ZERO.subTo(e, e)),
i.t = l,
i.clamp(),
c > 0 && i.rShiftTo(c, i),
0 > o && b.ZERO.subTo(i, i)
}
}
}
function I(t) {
var e = y();
return this.abs().divRemTo(t, null, e),
this.s < 0 && e.compareTo(b.ZERO) > 0 && t.subTo(e, e),
e
}
function $(t) {
this.m = t
}
function P(t) {
return t.s < 0 || t.compareTo(this.m) >= 0 ? t.mod(this.m) : t
}
function R(t) {
return t
}
function A(t) {
t.divRemTo(this.m, null, t)
}
function E(t, e, i) {
t.multiplyTo(e, i),
this.reduce(i)
}
function M(t, e) {
t.squareTo(e),
this.reduce(e)
}
function N() {
if (this.t < 1)
return 0;
var t = this;
if (0 == (1 & t))
return 0;
var e = 3 & t;
return e = e * (2 - (15 & t) * e) & 15,
e = e * (2 - (255 & t) * e) & 255,
e = e * (2 - ((65535 & t) * e & 65535)) & 65535,
e = e * (2 - t * e % this.DV) % this.DV,
e > 0 ? this.DV - e : -e
}
function O(t) {
this.m = t,
this.mp = t.invDigit(),
this.mpl = 32767 & this.mp,
this.mph = this.mp >> 15,
this.um = (1 << t.DB - 15) - 1,
this.mt2 = 2 * t.t
}
function B(t) {
var e = y();
return t.abs().dlShiftTo(this.m.t, e),
e.divRemTo(this.m, null, e),
t.s < 0 && e.compareTo(b.ZERO) > 0 && this.m.subTo(e, e),
e
}
function j(t) {
var e = y();
return t.copyTo(e),
this.reduce(e),
e
}
function L(t) {
for (; t.t <= this.mt2; )
t = 0;
for (var e = 0; e < this.m.t; ++e) {
var i = 32767 & t
, s = i * this.mpl + ((i * this.mph + (t >> 15) * this.mpl & this.um) << 15) & t.DM;
for (i = e + this.m.t,
t += this.m.am(0, s, t, e, 0, this.m.t); t >= t.DV; )
t -= t.DV,
t[++i]++
}
t.clamp(),
t.drShiftTo(this.m.t, t),
t.compareTo(this.m) >= 0 && t.subTo(this.m, t)
}
function F(t, e) {
t.squareTo(e),
this.reduce(e)
}
function K(t, e, i) {
t.multiplyTo(e, i),
this.reduce(i)
}
function U() {
return 0 == (this.t > 0 ? 1 & this : this.s)
}
function V(t, e) {
if (t > 4294967295 || 1 > t)
return b.ONE;
var i = y()
, s = y()
, n = e.convert(this)
, r = w(t) - 1;
for (n.copyTo(i); --r >= 0; )
if (e.sqrTo(i, s),
(t & 1 << r) > 0)
e.mulTo(s, n, i);
else {
var o = i;
i = s,
s = o
}
return e.revert(i)
}
;function z(t, e) {
var i;
return i = 256 > t || e.isEven() ? new $(e) : new O(e),
this.exp(t, i)
}
function q() {
var t = y();
return this.copyTo(t),
t
}
function H() {
if (this.s < 0) {
if (1 == this.t)
return this - this.DV;
if (0 == this.t)
return -1
} else {
if (1 == this.t)
return this;
if (0 == this.t)
return 0
}
return (this & (1 << 32 - this.DB) - 1) << this.DB | this
}
function J() {
return 0 == this.t ? this.s : this << 24 >> 24
}
function G() {
return 0 == this.t ? this.s : this << 16 >> 16
}
function Y(t) {
return Math.floor(Math.LN2 * this.DB / Math.log(t))
}
function W() {
return this.s < 0 ? -1 : this.t <= 0 || 1 == this.t && this <= 0 ? 0 : 1
}
function Z(t) {
if (null == t && (t = 10),
0 == this.signum() || 2 > t || t > 36)
return "0";
var e = this.chunkSize(t)
, i = Math.pow(t, e)
, s = m(i)
, n = y()
, r = y()
, o = "";
for (this.divRemTo(s, n, r); n.signum() > 0; )
o = (i + r.intValue()).toString(t).substr(1) + o,
n.divRemTo(s, n, r);
return r.intValue().toString(t) + o
}
function Q(t, e) {
this.fromInt(0),
null == e && (e = 10);
for (var i = this.chunkSize(e), s = Math.pow(e, i), n = !1, r = 0, o = 0, a = 0; a < t.length; ++a) {
var c = l(t, a);
0 > c ? "-" == t.charAt(a) && 0 == this.signum() && (n = !0) : (o = e * o + c,
++r >= i && (this.dMultiply(s),
this.dAddOffset(o, 0),
r = 0,
o = 0))
}
r > 0 && (this.dMultiply(Math.pow(e, r)),
this.dAddOffset(o, 0)),
n && b.ZERO.subTo(this, this)
}
function X(t, e, i) {
if ("number" == typeof e)
if (2 > t)
this.fromInt(1);
else
for (this.fromNumber(t, i),
this.testBit(t - 1) || this.bitwiseTo(b.ONE.shiftLeft(t - 1), at, this),
this.isEven() && this.dAddOffset(1, 0); !this.isProbablePrime(e); )
this.dAddOffset(2, 0),
this.bitLength() > t && this.subTo(b.ONE.shiftLeft(t - 1), this);
else {
var s = new Array
, n = 7 & t;
s.length = (t >> 3) + 1,
e.nextBytes(s),
n > 0 ? s &= (1 << n) - 1 : s = 0,
this.fromString(s, 256)
}
}
function tt() {
var t = this.t
, e = new Array;
e = this.s;
var i, s = this.DB - t * this.DB % 8, n = 0;
if (t-- > 0)
for (s < this.DB && (i = this >> s) != (this.s & this.DM) >> s && (e = i | this.s << this.DB - s); t >= 0; )
8 > s ? (i = (this & (1 << s) - 1) << 8 - s,
i |= this[--t] >> (s += this.DB - 8)) : (i = this >> (s -= 8) & 255,
0 >= s && (s += this.DB,
--t)),
0 != (128 & i) && (i |= -256),
0 == n && (128 & this.s) != (128 & i) && ++n,
(n > 0 || i != this.s) && (e = i);
return e
}
function et(t) {
return 0 == this.compareTo(t)
}
function it(t) {
return this.compareTo(t) < 0 ? this : t
}
function st(t) {
return this.compareTo(t) > 0 ? this : t
}
function nt(t, e, i) {
var s, n, r = Math.min(t.t, this.t);
for (s = 0; r > s; ++s)
i = e(this, t);
if (t.t < this.t) {
for (n = t.s & this.DM,
s = r; s < this.t; ++s)
i = e(this, n);
i.t = this.t
} else {
for (n = this.s & this.DM,
s = r; s < t.t; ++s)
i = e(n, t);
i.t = t.t
}
i.s = e(this.s, t.s),
i.clamp()
}
function rt(t, e) {
return t & e
}
function ot(t) {
var e = y();
return this.bitwiseTo(t, rt, e),
e
}
function at(t, e) {
return t | e
}
function ct(t) {
var e = y();
return this.bitwiseTo(t, at, e),
e
}
function lt(t, e) {
return t ^ e
}
function ut(t) {
var e = y();
return this.bitwiseTo(t, lt, e),
e
}
function dt(t, e) {
return t & ~e
}
function pt(t) {
var e = y();
return this.bitwiseTo(t, dt, e),
e
}
function ht() {
for (var t = y(), e = 0; e < this.t; ++e)
t = this.DM & ~this;
return t.t = this.t,
t.s = ~this.s,
t
}
function ft(t) {
var e = y();
return 0 > t ? this.rShiftTo(-t, e) : this.lShiftTo(t, e),
e
}
function gt(t) {
var e = y();
return 0 > t ? this.lShiftTo(-t, e) : this.rShiftTo(t, e),
e
}
function mt(t) {
if (0 == t)
return -1;
var e = 0;
return 0 == (65535 & t) && (t >>= 16,
e += 16),
0 == (255 & t) && (t >>= 8,
e += 8),
0 == (15 & t) && (t >>= 4,
e += 4),
0 == (3 & t) && (t >>= 2,
e += 2),
0 == (1 & t) && ++e,
e
}
function vt() {
for (var t = 0; t < this.t; ++t)
if (0 != this)
return t * this.DB + mt(this);
return this.s < 0 ? this.t * this.DB : -1
}
function _t(t) {
for (var e = 0; 0 != t; )
t &= t - 1,
++e;
return e
}
function bt() {
for (var t = 0, e = this.s & this.DM, i = 0; i < this.t; ++i)
t += _t(this ^ e);
return t
}
function yt(t) {
var e = Math.floor(t / this.DB);
return e >= this.t ? 0 != this.s : 0 != (this & 1 << t % this.DB)
}
function wt(t, e) {
var i = b.ONE.shiftLeft(t);
return this.bitwiseTo(i, e, i),
i
}
function kt(t) {
return this.changeBit(t, at)
}
function xt(t) {
return this.changeBit(t, dt)
}
function Dt(t) {
return this.changeBit(t, lt)
}
function St(t, e) {
for (var i = 0, s = 0, n = Math.min(t.t, this.t); n > i; )
s += this + t,
e = s & this.DM,
s >>= this.DB;
if (t.t < this.t) {
for (s += t.s; i < this.t; )
s += this,
e = s & this.DM,
s >>= this.DB;
s += this.s
} else {
for (s += this.s; i < t.t; )
s += t,
e = s & this.DM,
s >>= this.DB;
s += t.s
}
e.s = 0 > s ? -1 : 0,
s > 0 ? e = s : -1 > s && (e = this.DV + s),
e.t = i,
e.clamp()
}
function Ct(t) {
var e = y();
return this.addTo(t, e),
e
}
function Tt(t) {
var e = y();
return this.subTo(t, e),
e
}
function It(t) {
var e = y();
return this.multiplyTo(t, e),
e
}
function $t() {
var t = y();
return this.squareTo(t),
t
}
function Pt(t) {
var e = y();
return this.divRemTo(t, e, null),
e
}
function Rt(t) {
var e = y();
return this.divRemTo(t, null, e),
e
}
function At(t) {
var e = y()
, i = y();
return this.divRemTo(t, e, i),
new Array(e,i)
}
function Et(t) {
this = this.am(0, t - 1, this, 0, 0, this.t),
++this.t,
this.clamp()
}
function Mt(t, e) {
if (0 != t) {
for (; this.t <= e; )
this = 0;
for (this += t; this >= this.DV; )
this -= this.DV,
++e >= this.t && (this = 0),
++this
}
}
function Nt() {}
function Ot(t) {
return t
}
function Bt(t, e, i) {
t.multiplyTo(e, i)
}
function jt(t, e) {
t.squareTo(e)
}
function Lt(t) {
return this.exp(t, new Nt)
}
function Ft(t, e, i) {
var s = Math.min(this.t + t.t, e);
for (i.s = 0,
i.t = s; s > 0; )
i[--s] = 0;
var n;
for (n = i.t - this.t; n > s; ++s)
i = this.am(0, t, i, s, 0, this.t);
for (n = Math.min(t.t, e); n > s; ++s)
this.am(0, t, i, s, 0, e - s);
i.clamp()
}
function Kt(t, e, i) {
--e;
var s = i.t = this.t + t.t - e;
for (i.s = 0; --s >= 0; )
i = 0;
for (s = Math.max(e - this.t, 0); s < t.t; ++s)
i = this.am(e - s, t, i, 0, 0, this.t + s - e);
i.clamp(),
i.drShiftTo(1, i)
}
function Ut(t) {
this.r2 = y(),
this.q3 = y(),
b.ONE.dlShiftTo(2 * t.t, this.r2),
this.mu = this.r2.divide(t),
this.m = t
}
function Vt(t) {
if (t.s < 0 || t.t > 2 * this.m.t)
return t.mod(this.m);
if (t.compareTo(this.m) < 0)
return t;
var e = y();
return t.copyTo(e),
this.reduce(e),
e
}
function zt(t) {
return t
}
function qt(t) {
for (t.drShiftTo(this.m.t - 1, this.r2),
t.t > this.m.t + 1 && (t.t = this.m.t + 1,
t.clamp()),
this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3),
this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); t.compareTo(this.r2) < 0; )
t.dAddOffset(1, this.m.t + 1);
for (t.subTo(this.r2, t); t.compareTo(this.m) >= 0; )
t.subTo(this.m, t)
}
function Ht(t, e) {
t.squareTo(e),
this.reduce(e)
}
function Jt(t, e, i) {
t.multiplyTo(e, i),
this.reduce(i)
}
function Gt(t, e) {
var i, s, n = t.bitLength(), r = m(1);
if (0 >= n)
return r;
i = 18 > n ? 1 : 48 > n ? 3 : 144 > n ? 4 : 768 > n ? 5 : 6,
s = 8 > n ? new $(e) : e.isEven() ? new Ut(e) : new O(e);
var o = new Array
, a = 3
, c = i - 1
, l = (1 << i) - 1;
if (o = s.convert(this),
i > 1) {
var u = y();
for (s.sqrTo(o, u); l >= a; )
o = y(),
s.mulTo(u, o, o),
a += 2
}
var d, p, h = t.t - 1, f = !0, g = y();
for (n = w(t) - 1; h >= 0; ) {
for (n >= c ? d = t >> n - c & l : (d = (t & (1 << n + 1) - 1) << c - n,
h > 0 && (d |= t >> this.DB + n - c)),
a = i; 0 == (1 & d); )
d >>= 1,
--a;
if ((n -= a) < 0 && (n += this.DB,
--h),
f)
o.copyTo(r),
f = !1;
else {
for (; a > 1; )
s.sqrTo(r, g),
s.sqrTo(g, r),
a -= 2;
a > 0 ? s.sqrTo(r, g) : (p = r,
r = g,
g = p),
s.mulTo(g, o, r)
}
for (; h >= 0 && 0 == (t & 1 << n); )
s.sqrTo(r, g),
p = r,
r = g,
g = p,
--n < 0 && (n = this.DB - 1,
--h)
}
return s.revert(r)
}
function Yt(t) {
var e = this.s < 0 ? this.negate() : this.clone()
, i = t.s < 0 ? t.negate() : t.clone();
if (e.compareTo(i) < 0) {
var s = e;
e = i,
i = s
}
var n = e.getLowestSetBit()
, r = i.getLowestSetBit();
if (0 > r)
return e;
for (r > n && (r = n),
r > 0 && (e.rShiftTo(r, e),
i.rShiftTo(r, i)); e.signum() > 0; )
(n = e.getLowestSetBit()) > 0 && e.rShiftTo(n, e),
(n = i.getLowestSetBit()) > 0 && i.rShiftTo(n, i),
e.compareTo(i) >= 0 ? (e.subTo(i, e),
e.rShiftTo(1, e)) : (i.subTo(e, i),
i.rShiftTo(1, i));
return r > 0 && i.lShiftTo(r, i),
i
}
function Wt(t) {
if (0 >= t)
return 0;
var e = this.DV % t
, i = this.s < 0 ? t - 1 : 0;
if (this.t > 0)
if (0 == e)
i = this % t;
else
for (var s = this.t - 1; s >= 0; --s)
i = (e * i + this) % t;
return i
}
function Zt(t) {
var e = t.isEven();
if (this.isEven() && e || 0 == t.signum())
return b.ZERO;
for (var i = t.clone(), s = this.clone(), n = m(1), r = m(0), o = m(0), a = m(1); 0 != i.signum(); ) {
for (; i.isEven(); )
i.rShiftTo(1, i),
e ? (n.isEven() && r.isEven() || (n.addTo(this, n),
r.subTo(t, r)),
n.rShiftTo(1, n)) : r.isEven() || r.subTo(t, r),
r.rShiftTo(1, r);
for (; s.isEven(); )
s.rShiftTo(1, s),
e ? (o.isEven() && a.isEven() || (o.addTo(this, o),
a.subTo(t, a)),
o.rShiftTo(1, o)) : a.isEven() || a.subTo(t, a),
a.rShiftTo(1, a);
i.compareTo(s) >= 0 ? (i.subTo(s, i),
e && n.subTo(o, n),
r.subTo(a, r)) : (s.subTo(i, s),
e && o.subTo(n, o),
a.subTo(r, a))
}
return 0 != s.compareTo(b.ONE) ? b.ZERO : a.compareTo(t) >= 0 ? a.subtract(t) : a.signum() < 0 ? (a.addTo(t, a),
a.signum() < 0 ? a.add(t) : a) : a
}
function Qt(t) {
var e, i = this.abs();
if (1 == i.t && i <= $e[$e.length - 1]) {
for (e = 0; e < $e.length; ++e)
if (i == $e)
return !0;
return !1
}
if (i.isEven())
return !1;
for (e = 1; e < $e.length; ) {
for (var s = $e, n = e + 1; n < $e.length && Pe > s; )
s *= $e;
for (s = i.modInt(s); n > e; )
if (s % $e == 0)
return !1
}
return i.millerRabin(t)
}
function Xt(t) {
var e = this.subtract(b.ONE)
, i = e.getLowestSetBit();
if (0 >= i)
return !1;
var s = e.shiftRight(i);
t = t + 1 >> 1,
t > $e.length && (t = $e.length);
for (var n = y(), r = 0; t > r; ++r) {
var o = n.modPow(s, this);
if (0 != o.compareTo(b.ONE) && 0 != o.compareTo(e)) {
for (var a = 1; a++ < i && 0 != o.compareTo(e); )
if (o = o.modPowInt(2, this),
0 == o.compareTo(b.ONE))
return !1;
if (0 != o.compareTo(e))
return !1
}
}
return !0
}
function te() {
this.i = 0,
this.j = 0,
this.S = new Array
}
function ee(t) {
var e, i, s;
for (e = 0; 256 > e; ++e)
this.S = e;
for (i = 0,
e = 0; 256 > e; ++e)
i = i + this.S + t & 255,
s = this.S,
this.S = this.S,
this.S = s;
this.i = 0,
this.j = 0
}
function ie() {
var t;
return this.i = this.i + 1 & 255,
this.j = this.j + this.S & 255,
t = this.S,
this.S = this.S,
this.S = t,
this.S & 255]
}
function se() {
return new te
}
function ne() {
if (null == Re) {
for (Re = se(); Me > Ee; ) {
Ae = 255 & t
}
for (Re.init(Ae),
Ee = 0; Ee < Ae.length; ++Ee)
Ae = 0;
Ee = 0
}
return Re.next()
}
function re(t) {
var e;
for (e = 0; e < t.length; ++e)
t = ne()
}
function oe() {}
function ae(t, e) {
return new b(t,e)
}
function ce(t, e) {
if (e < t.length + 11)
return console.error("Message too long for RSA"),
null;
for (var i = new Array, s = t.length - 1; s >= 0 && e > 0; ) {
var n = t.charCodeAt(s--);
128 > n ? i[--e] = n : n > 127 && 2048 > n ? (i[--e] = 63 & n | 128,
i[--e] = n >> 6 | 192) : (i[--e] = 63 & n | 128,
i[--e] = n >> 6 & 63 | 128,
i[--e] = n >> 12 | 224)
}
i[--e] = 0;
for (var r = new oe, o = new Array; e > 2; ) {
for (o = 0; 0 == o; )
r.nextBytes(o);
i[--e] = o
}
return i[--e] = 2,
i[--e] = 0,
new b(i)
}
function le() {
this.n = null,
this.e = 0,
this.d = null,
this.p = null,
this.q = null,
this.dmp1 = null,
this.dmq1 = null,
this.coeff = null
}
function ue(t, e) {
null != t && null != e && t.length > 0 && e.length > 0 ? (this.n = ae(t, 16),
this.e = parseInt(e, 16)) : console.error("Invalid RSA public key")
}
function de(t) {
return t.modPowInt(this.e, this.n)
}
function pe(t) {
var e = ce(t, this.n.bitLength() + 7 >> 3);
if (null == e)
return null;
var i = this.doPublic(e);
if (null == i)
return null;
var s = i.toString(16);
return 0 == (1 & s.length) ? s : "0" + s
}
function he(t, e) {
for (var i = t.toByteArray(), s = 0; s < i.length && 0 == i; )
++s;
if (i.length - s != e - 1 || 2 != i)
return null;
for (++s; 0 != i; )
if (++s >= i.length)
return null;
for (var n = ""; ++s < i.length; ) {
var r = 255 & i;
128 > r ? n += String.fromCharCode(r) : r > 191 && 224 > r ? (n += String.fromCharCode((31 & r) << 6 | 63 & i),
++s) : (n += String.fromCharCode((15 & r) << 12 | (63 & i) << 6 | 63 & i),
s += 2)
}
return n
}
function fe(t, e, i) {
null != t && null != e && t.length > 0 && e.length > 0 ? (this.n = ae(t, 16),
this.e = parseInt(e, 16),
this.d = ae(i, 16)) : console.error("Invalid RSA private key")
}
function ge(t, e, i, s, n, r, o, a) {
null != t && null != e && t.length > 0 && e.length > 0 ? (this.n = ae(t, 16),
this.e = parseInt(e, 16),
this.d = ae(i, 16),
this.p = ae(s, 16),
this.q = ae(n, 16),
this.dmp1 = ae(r, 16),
this.dmq1 = ae(o, 16),
this.coeff = ae(a, 16)) : console.error("Invalid RSA private key")
}
function me(t, e) {
var i = new oe
, s = t >> 1;
this.e = parseInt(e, 16);
for (var n = new b(e,16); ; ) {
for (; this.p = new b(t - s,1,i),
0 != this.p.subtract(b.ONE).gcd(n).compareTo(b.ONE) || !this.p.isProbablePrime(10); )
;
for (; this.q = new b(s,1,i),
0 != this.q.subtract(b.ONE).gcd(n).compareTo(b.ONE) || !this.q.isProbablePrime(10); )
;
if (this.p.compareTo(this.q) <= 0) {
var r = this.p;
this.p = this.q,
this.q = r
}
var o = this.p.subtract(b.ONE)
, a = this.q.subtract(b.ONE)
, c = o.multiply(a);
if (0 == c.gcd(n).compareTo(b.ONE)) {
this.n = this.p.multiply(this.q),
this.d = n.modInverse(c),
this.dmp1 = this.d.mod(o),
this.dmq1 = this.d.mod(a),
this.coeff = this.q.modInverse(this.p);
break
}
}
}
function ve(t) {
if (null == this.p || null == this.q)
return t.modPow(this.d, this.n);
for (var e = t.mod(this.p).modPow(this.dmp1, this.p), i = t.mod(this.q).modPow(this.dmq1, this.q); e.compareTo(i) < 0; )
e = e.add(this.p);
return e.subtract(i).multiply(this.coeff).mod(this.p).multiply(this.q).add(i)
}
function _e(t) {
var e = ae(t, 16)
, i = this.doPrivate(e);
return null == i ? null : he(i, this.n.bitLength() + 7 >> 3)
}
function be(t) {
var e, i, s = "";
for (e = 0; e + 3 <= t.length; e += 3)
i = parseInt(t.substring(e, e + 3), 16),
s += je.charAt(i >> 6) + je.charAt(63 & i);
for (e + 1 == t.length ? (i = parseInt(t.substring(e, e + 1), 16),
s += je.charAt(i << 2)) : e + 2 == t.length && (i = parseInt(t.substring(e, e + 2), 16),
s += je.charAt(i >> 2) + je.charAt((3 & i) << 4)); (3 & s.length) > 0; )
s += Le;
return s
}
function ye(t) {
var e, i, s = "", n = 0;
for (e = 0; e < t.length && t.charAt(e) != Le; ++e)
v = je.indexOf(t.charAt(e)),
v < 0 || (0 == n ? (s += c(v >> 2),
i = 3 & v,
n = 1) : 1 == n ? (s += c(i << 2 | v >> 4),
i = 15 & v,
n = 2) : 2 == n ? (s += c(i),
s += c(v >> 2),
i = 3 & v,
n = 3) : (s += c(i << 2 | v >> 4),
s += c(15 & v),
n = 0));
return 1 == n && (s += c(i << 2)),
s
}
try {
var we, ke, xe = false;
xe && "Microsoft Internet Explorer" == navigator.appName ? (b.prototype.am = i,
we = 26) : xe && "Netscape" != navigator.appName ? (b.prototype.am = e,
we = 26) : (b.prototype.am = s,
we = 28),
b.prototype.DB = we,
b.prototype.DM = (1 << we) - 1,
b.prototype.DV = 1 << we;
} catch (e) {}
var De = 52;
b.prototype.FV = Math.pow(2, De),
b.prototype.F1 = De - we,
b.prototype.F2 = 2 * we - De;
var Se, Ce, Te = "0123456789abcdefghijklmnopqrstuvwxyz", Ie = new Array;
for (Se = "0".charCodeAt(0),
Ce = 0; 9 >= Ce; ++Ce)
Ie = Ce;
for (Se = "a".charCodeAt(0),
Ce = 10; 36 > Ce; ++Ce)
Ie = Ce;
for (Se = "A".charCodeAt(0),
Ce = 10; 36 > Ce; ++Ce)
Ie = Ce;
$.prototype.convert = P,
$.prototype.revert = R,
$.prototype.reduce = A,
$.prototype.mulTo = E,
$.prototype.sqrTo = M,
O.prototype.convert = B,
O.prototype.revert = j,
O.prototype.reduce = L,
O.prototype.mulTo = K,
O.prototype.sqrTo = F,
b.prototype.copyTo = p,
b.prototype.fromInt = n,
b.prototype.fromString = h,
b.prototype.clamp = r,
b.prototype.dlShiftTo = g,
b.prototype.drShiftTo = _,
b.prototype.lShiftTo = k,
b.prototype.rShiftTo = x,
b.prototype.subTo = D,
b.prototype.multiplyTo = S,
b.prototype.squareTo = C,
b.prototype.divRemTo = T,
b.prototype.invDigit = N,
b.prototype.isEven = U,
b.prototype.exp = V,
b.prototype.toString = o,
b.prototype.negate = f,
b.prototype.abs = a,
b.prototype.compareTo = u,
b.prototype.bitLength = d,
b.prototype.mod = I,
b.prototype.modPowInt = z,
b.ZERO = m(0),
b.ONE = m(1),
Nt.prototype.convert = Ot,
Nt.prototype.revert = Ot,
Nt.prototype.mulTo = Bt,
Nt.prototype.sqrTo = jt,
Ut.prototype.convert = Vt,
Ut.prototype.revert = zt,
Ut.prototype.reduce = qt,
Ut.prototype.mulTo = Jt,
Ut.prototype.sqrTo = Ht;
var $e = [(![] + [])[!+[] + !![] + !![]] + ([] + {})[+!![]] + (!![] + [])[+!![]] + (!![] + [])[+[]]][([] + {})[!+[] + !![] + !![] + !![] + !![]] + ([] + {})[+!![]] + ([][[]] + [])[+!![]] + (![] + [])[!+[] + !![] + !![]] + (!![] + [])[+[]] + (!![] + [])[+!![]] + ([][[]] + [])[+[]] + ([] + {})[!+[] + !![] + !![] + !![] + !![]] + (!![] + [])[+[]] + ([] + {})[+!![]] + (!![] + [])[+!![]]]((!+[] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + []) + (!+[] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + []) + (!+[] + !![] + !![] + !![] + !![] + !![] + !![] + []))(+[])]
, Pe = (1 << 26) / $e[$e.length - 1];
b.prototype.chunkSize = Y,
b.prototype.toRadix = Z,
b.prototype.fromRadix = Q,
b.prototype.fromNumber = X,
b.prototype.bitwiseTo = nt,
b.prototype.changeBit = wt,
b.prototype.addTo = St,
b.prototype.dMultiply = Et,
b.prototype.dAddOffset = Mt,
b.prototype.multiplyLowerTo = Ft,
b.prototype.multiplyUpperTo = Kt,
b.prototype.modInt = Wt,
b.prototype.millerRabin = Xt,
b.prototype.clone = q,
b.prototype.intValue = H,
b.prototype.byteValue = J,
b.prototype.shortValue = G,
b.prototype.signum = W,
b.prototype.toByteArray = tt,
b.prototype.equals = et,
b.prototype.min = it,
b.prototype.max = st,
b.prototype.and = ot,
b.prototype.or = ct,
b.prototype.xor = ut,
b.prototype.andNot = pt,
b.prototype.not = ht,
b.prototype.shiftLeft = ft,
b.prototype.shiftRight = gt,
b.prototype.getLowestSetBit = vt,
b.prototype.bitCount = bt,
b.prototype.testBit = yt,
b.prototype.setBit = kt,
b.prototype.clearBit = xt,
b.prototype.flipBit = Dt,
b.prototype.add = Ct,
b.prototype.subtract = Tt,
b.prototype.multiply = It,
b.prototype.divide = Pt,
b.prototype.remainder = Rt,
b.prototype.divideAndRemainder = At,
b.prototype.modPow = Gt,
b.prototype.modInverse = Zt,
b.prototype.pow = Lt,
b.prototype.gcd = Yt,
b.prototype.isProbablePrime = Qt,
b.prototype.square = $t,
te.prototype.init = ee,
te.prototype.next = ie;
var Re, Ae, Ee, Me = 256;
if (null == Ae) {
Ae = new Array,
Ee = 0;
var Ne;
var Be = function(t) {
if (this.count = this.count || 0,
this.count >= 256 || Ee >= Me)
try {
var e = t.x + t.y;
Ae = 255 & e,
this.count += 1
} catch (y) {}
};
window.addEventListener ? window.addEventListener("mousemove", Be, !1) : window.attachEvent && window.attachEvent("onmousemove", Be)
}
oe.prototype.nextBytes = re,
le.prototype.doPublic = de,
le.prototype.setPublic = ue,
le.prototype.encrypt = pe,
le.prototype.doPrivate = ve,
le.prototype.setPrivate = fe,
le.prototype.setPrivateEx = ge,
le.prototype.generate = me,
le.prototype.decrypt = _e,
function() {
var t = function(t, e, n) {
var r = new oe
, o = t >> 1;
this.e = parseInt(e, 16);
var a = new b(e,16)
, c = this
, l = function() {
var e = function() {
if (c.p.compareTo(c.q) <= 0) {
var t = c.p;
c.p = c.q,
c.q = t
}
var e = c.p.subtract(b.ONE)
, i = c.q.subtract(b.ONE)
, s = e.multiply(i);
0 == s.gcd(a).compareTo(b.ONE) ? (c.n = c.p.multiply(c.q),
c.d = a.modInverse(s),
c.dmp1 = c.d.mod(e),
c.dmq1 = c.d.mod(i),
c.coeff = c.q.modInverse(c.p),
setTimeout(function() {
n()
}, 0)) : setTimeout(l, 0)
}
, i = function() {
c.q = y(),
c.q.fromNumberAsync(o, 1, r, function() {
c.q.subtract(b.ONE).gcda(a, function(t) {
0 == t.compareTo(b.ONE) && c.q.isProbablePrime(10) ? setTimeout(e, 0) : setTimeout(i, 0)
})
})
}
, s = function() {
c.p = y(),
c.p.fromNumberAsync(t - o, 1, r, function() {
c.p.subtract(b.ONE).gcda(a, function(t) {
0 == t.compareTo(b.ONE) && c.p.isProbablePrime(10) ? setTimeout(i, 0) : setTimeout(s, 0)
})
})
};
setTimeout(s, 0)
};
setTimeout(l, 0)
};
le.prototype.generateAsync = t;
var e = function(t, e) {
var i = this.s < 0 ? this.negate() : this.clone()
, s = t.s < 0 ? t.negate() : t.clone();
if (i.compareTo(s) < 0) {
var n = i;
i = s,
s = n
}
var r = i.getLowestSetBit()
, o = s.getLowestSetBit();
if (0 > o)
return void e(i);
o > r && (o = r),
o > 0 && (i.rShiftTo(o, i),
s.rShiftTo(o, s));
var a = function() {
(r = i.getLowestSetBit()) > 0 && i.rShiftTo(r, i),
(r = s.getLowestSetBit()) > 0 && s.rShiftTo(r, s),
i.compareTo(s) >= 0 ? (i.subTo(s, i),
i.rShiftTo(1, i)) : (s.subTo(i, s),
s.rShiftTo(1, s)),
i.signum() > 0 ? setTimeout(a, 0) : (o > 0 && s.lShiftTo(o, s),
setTimeout(function() {
e(s)
}, 0))
};
setTimeout(a, 10)
};
b.prototype.gcda = e;
var i = function(t, e, i, s) {
if ("number" == typeof e)
if (2 > t)
this.fromInt(1);
else {
this.fromNumber(t, i),
this.testBit(t - 1) || this.bitwiseTo(b.ONE.shiftLeft(t - 1), at, this),
this.isEven() && this.dAddOffset(1, 0);
var n = this
, r = function() {
n.dAddOffset(2, 0),
n.bitLength() > t && n.subTo(b.ONE.shiftLeft(t - 1), n),
n.isProbablePrime(e) ? setTimeout(function() {
s()
}, 0) : setTimeout(r, 0)
};
setTimeout(r, 0)
}
else {
var o = new Array
, a = 7 & t;
o.length = (t >> 3) + 1,
e.nextBytes(o),
a > 0 ? o &= (1 << a) - 1 : o = 0,
this.fromString(o, 256)
}
};
b.prototype.fromNumberAsync = i
}();
var je = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
, Le = "="
, Fe = Fe || {};
Fe.env = Fe.env || {};
var Ke = Fe
, Ue = Object.prototype
, Ve = ""
, ze = ["toString", "valueOf"];
Fe.env.parseUA = function(t) {
var e, i = function(t) {
var e = 0;
return parseFloat(t.replace(/\./g, function() {
return 1 == e++ ? "" : "."
}))
}, s = navigator, n = {
ie: 0,
opera: 0,
gecko: 0,
webkit: 0,
chrome: 0,
mobile: null,
air: 0,
ipad: 0,
iphone: 0,
ipod: 0,
ios: null,
android: 0,
webos: 0,
caja: s && s.cajaVersion,
secure: !1,
os: null
};
try {
r = t || navigator && navigator.userAgent,
o = window && window,
a = o && o.href;
} catch (e) {}
return n.secure = a && 0 === a.toLowerCase().indexOf("https"),
r && (/windows|win32/i.test(r) ? n.os = "windows" : /macintosh/i.test(r) ? n.os = "macintosh" : /rhino/i.test(r) && (n.os = "rhino"),
/KHTML/.test(r) && (n.webkit = 1),
e = r.match(/AppleWebKit\/([^\s]*)/),
e && e && (n.webkit = i(e),
/ Mobile\//.test(r) ? (n.mobile = "Apple",
e = r.match(/OS ([^\s]*)/),
e && e && (e = i(e.replace("_", "."))),
n.ios = e,
n.ipad = n.ipod = n.iphone = 0,
e = r.match(/iPad|iPod|iPhone/),
e && e && (n.toLowerCase()] = n.ios)) : (e = r.match(/NokiaN[^\/]*|Android \d\.\d|webOS\/\d\.\d/),
e && (n.mobile = e),
/webOS/.test(r) && (n.mobile = "WebOS",
e = r.match(/webOS\/([^\s]*);/),
e && e && (n.webos = i(e))),
/ Android/.test(r) && (n.mobile = "Android",
e = r.match(/Android ([^\s]*);/),
e && e && (n.android = i(e)))),
e = r.match(/Chrome\/([^\s]*)/),
e && e ? n.chrome = i(e) : (e = r.match(/AdobeAIR\/([^\s]*)/),
e && (n.air = e))),
n.webkit || (e = r.match(/Opera[\s\/]([^\s]*)/),
e && e ? (n.opera = i(e),
e = r.match(/Version\/([^\s]*)/),
e && e && (n.opera = i(e)),
e = r.match(/Opera Mini[^;]*/),
e && (n.mobile = e)) : (e = r.match(/MSIE\s([^;]*)/),
e && e ? n.ie = i(e) : (e = r.match(/Gecko\/([^\s]*)/),
e && (n.gecko = 1,
e = r.match(/rv:([^\s\)]*)/),
e && e && (n.gecko = i(e))))))),
n
}
,
Fe.env.ua = Fe.env.parseUA(),
Fe.isFunction = function(t) {
return "function" == typeof t || Ue.toString.apply(t) === Ve
}
,
Fe._IEEnumFix = Fe.env.ua.ie ? function(t, e) {
var i, s, n;
for (i = 0; i < ze.length; i += 1)
s = ze,
n = e,
Ke.isFunction(n) && n != Ue && (t = n)
}
: function() {}
,
Fe.extend = function(t, e, i) {
if (!e || !t)
throw new Error("extend failed, please check that all dependencies are included.");
var s, n = function() {};
if (n.prototype = e.prototype,
t.prototype = new n,
t.prototype.constructor = t,
t.superclass = e.prototype,
e.prototype.constructor == Ue.constructor && (e.prototype.constructor = e),
i) {
for (s in i)
Ke.hasOwnProperty(i, s) && (t.prototype = i);
Ke._IEEnumFix(t.prototype, i)
}
}
,
"undefined" != typeof KJUR && KJUR || (KJUR = {}),
"undefined" != typeof KJUR.asn1 && KJUR.asn1 || (KJUR.asn1 = {}),
KJUR.asn1.ASN1Util = new function() {
this.integerToByteHex = function(t) {
var e = t.toString(16);
return e.length % 2 == 1 && (e = "0" + e),
e
}
,
this.bigIntToMinTwosComplementsHex = function(t) {
var e = t.toString(16);
if ("-" != e.substr(0, 1))
e.length % 2 == 1 ? e = "0" + e : e.match(/^/) || (e = "00" + e);
else {
var i = e.substr(1)
, s = i.length;
s % 2 == 1 ? s += 1 : e.match(/^/) || (s += 2);
for (var n = "", r = 0; s > r; r++)
n += "f";
var o = new b(n,16)
, a = o.xor(t).add(b.ONE);
e = a.toString(16).replace(/^-/, "")
}
return e
}
,
this.getPEMStringFromHex = function(t, e) {
var i = CryptoJS.enc.Hex.parse(t)
, s = CryptoJS.enc.Base64.stringify(i)
, n = s.replace(/(.{64})/g, "$1\r\n");
return n = n.replace(/\r\n$/, ""),
"-----BEGIN " + e + "-----\r\n" + n + "\r\n-----END " + e + "-----\r\n"
}
}
,
KJUR.asn1.ASN1Object = function() {
var n = "";
this.getLengthHexFromValue = function() {
if ("undefined" == typeof this.hV || null == this.hV)
throw "this.hV is null or undefined.";
if (this.hV.length % 2 == 1)
throw "value hex must be even length: n=" + n.length + ",v=" + this.hV;
var t = this.hV.length / 2
, e = t.toString(16);
if (e.length % 2 == 1 && (e = "0" + e),
128 > t)
return e;
var i = e.length / 2;
if (i > 15)
throw "ASN.1 length too long to represent by 8x: n = " + t.toString(16);
var s = 128 + i;
return s.toString(16) + e
}
,
this.getEncodedHex = function() {
return (null == this.hTLV || this.isModified) && (this.hV = this.getFreshValueHex(),
this.hL = this.getLengthHexFromValue(),
this.hTLV = this.hT + this.hL + this.hV,
this.isModified = !1),
this.hTLV
}
,
this.getValueHex = function() {
return this.getEncodedHex(),
this.hV
}
,
this.getFreshValueHex = function() {
return ""
}
}
,
KJUR.asn1.DERAbstractString = function(t) {
KJUR.asn1.DERAbstractString.superclass.constructor.call(this);
this.getString = function() {
return this.s
}
,
this.setString = function(t) {
this.hTLV = null,
this.isModified = !0,
this.s = t,
this.hV = stohex(this.s)
}
,
this.setStringHex = function(t) {
this.hTLV = null,
this.isModified = !0,
this.s = null,
this.hV = t
}
,
this.getFreshValueHex = function() {
return this.hV
}
,
"undefined" != typeof t && ("undefined" != typeof t.str ? this.setString(t.str) : "undefined" != typeof t.hex && this.setStringHex(t.hex))
}
,
Fe.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object),
KJUR.asn1.DERAbstractTime = function(t) {
KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);
this.localDateToUTC = function(t) {
utc = t.getTime() + 6e4 * t.getTimezoneOffset();
var e = new Date(utc);
return e
}
,
this.formatDate = function(t, e) {
var i = this.zeroPadding
, s = this.localDateToUTC(t)
, n = String(s.getFullYear());
"utc" == e && (n = n.substr(2, 2));
var r = i(String(s.getMonth() + 1), 2)
, o = i(String(s.getDate()), 2)
, a = i(String(s.getHours()), 2)
, c = i(String(s.getMinutes()), 2)
, l = i(String(s.getSeconds()), 2);
return n + r + o + a + c + l + "Z"
}
,
this.zeroPadding = function(t, e) {
return t.length >= e ? t : new Array(e - t.length + 1).join("0") + t
}
,
this.getString = function() {
return this.s
}
,
this.setString = function(t) {
this.hTLV = null,
this.isModified = !0,
this.s = t,
this.hV = stohex(this.s)
}
,
this.setByDateValue = function(t, e, i, s, n, r) {
var o = new Date(Date.UTC(t, e - 1, i, s, n, r, 0));
this.setByDate(o)
}
,
this.getFreshValueHex = function() {
return this.hV
}
}
,
Fe.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object),
KJUR.asn1.DERAbstractStructured = function(t) {
KJUR.asn1.DERAbstractString.superclass.constructor.call(this);
this.setByASN1ObjectArray = function(t) {
this.hTLV = null,
this.isModified = !0,
this.asn1Array = t
}
,
this.appendASN1Object = function(t) {
this.hTLV = null,
this.isModified = !0,
this.asn1Array.push(t)
}
,
this.asn1Array = new Array,
"undefined" != typeof t && "undefined" != typeof t.array && (this.asn1Array = t.array)
}
,
Fe.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object),
KJUR.asn1.DERBoolean = function() {
KJUR.asn1.DERBoolean.superclass.constructor.call(this),
this.hT = "01",
this.hTLV = "0101ff"
}
,
Fe.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object),
KJUR.asn1.DERInteger = function(t) {
KJUR.asn1.DERInteger.superclass.constructor.call(this),
this.hT = "02",
this.setByBigInteger = function(t) {
this.hTLV = null,
this.isModified = !0,
this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(t)
}
,
this.setByInteger = function(t) {
var e = new b(String(t),10);
this.setByBigInteger(e)
}
,
this.setValueHex = function(t) {
this.hV = t
}
,
this.getFreshValueHex = function() {
return this.hV
}
,
"undefined" != typeof t && ("undefined" != typeof t.bigint ? this.setByBigInteger(t.bigint) : "undefined" != typeof t["int"] ? this.setByInteger(t["int"]) : "undefined" != typeof t.hex && this.setValueHex(t.hex))
}
,
Fe.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object),
KJUR.asn1.DERBitString = function(t) {
KJUR.asn1.DERBitString.superclass.constructor.call(this),
this.hT = "03",
this.setHexValueIncludingUnusedBits = function(t) {
this.hTLV = null,
this.isModified = !0,
this.hV = t
}
,
this.setUnusedBitsAndHexValue = function(t, e) {
if (0 > t || t > 7)
throw "unused bits shall be from 0 to 7: u = " + t;
var i = "0" + t;
this.hTLV = null,
this.isModified = !0,
this.hV = i + e
}
,
this.setByBinaryString = function(t) {
t = t.replace(/0+$/, "");
var e = 8 - t.length % 8;
8 == e && (e = 0);
for (var i = 0; e >= i; i++)
t += "0";
for (var s = "", i = 0; i < t.length - 1; i += 8) {
var n = t.substr(i, 8)
, r = parseInt(n, 2).toString(16);
1 == r.length && (r = "0" + r),
s += r
}
this.hTLV = null,
this.isModified = !0,
this.hV = "0" + e + s
}
,
this.setByBooleanArray = function(t) {
for (var e = "", i = 0; i < t.length; i++)
e += 1 == t ? "1" : "0";
this.setByBinaryString(e)
}
,
this.newFalseArray = function(t) {
for (var e = new Array(t), i = 0; t > i; i++)
e = !1;
return e
}
,
this.getFreshValueHex = function() {
return this.hV
}
,
"undefined" != typeof t && ("undefined" != typeof t.hex ? this.setHexValueIncludingUnusedBits(t.hex) : "undefined" != typeof t.bin ? this.setByBinaryString(t.bin) : "undefined" != typeof t.array && this.setByBooleanArray(t.array))
}
,
Fe.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object),
KJUR.asn1.DEROctetString = function(t) {
KJUR.asn1.DEROctetString.superclass.constructor.call(this, t),
this.hT = "04"
}
,
Fe.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString),
KJUR.asn1.DERNull = function() {
KJUR.asn1.DERNull.superclass.constructor.call(this),
this.hT = "05",
this.hTLV = "0500"
}
,
Fe.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object),
KJUR.asn1.DERObjectIdentifier = function(t) {
var c = function(t) {
var e = t.toString(16);
return 1 == e.length && (e = "0" + e),
e
}
, r = function(t) {
var e = ""
, i = new b(t,10)
, s = i.toString(2)
, n = 7 - s.length % 7;
7 == n && (n = 0);
for (var r = "", o = 0; n > o; o++)
r += "0";
s = r + s;
for (var o = 0; o < s.length - 1; o += 7) {
var a = s.substr(o, 7);
o != s.length - 7 && (a = "1" + a),
e += c(parseInt(a, 2))
}
return e
};
KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this),
this.hT = "06",
this.setValueHex = function(t) {
this.hTLV = null,
this.isModified = !0,
this.s = null,
this.hV = t
}
,
this.setValueOidString = function(t) {
if (!t.match(/^+$/))
throw "malformed oid string: " + t;
var e = ""
, i = t.split(".")
, s = 40 * parseInt(i) + parseInt(i);
e += c(s),
i.splice(0, 2);
for (var n = 0; n < i.length; n++)
e += r(i);
this.hTLV = null,
this.isModified = !0,
this.s = null,
this.hV = e
}
,
this.setValueName = function(t) {
if ("undefined" == typeof KJUR.asn1.x509.OID.name2oidList)
throw "DERObjectIdentifier oidName undefined: " + t;
var e = KJUR.asn1.x509.OID.name2oidList;
this.setValueOidString(e)
}
,
this.getFreshValueHex = function() {
return this.hV
}
,
"undefined" != typeof t && ("undefined" != typeof t.oid ? this.setValueOidString(t.oid) : "undefined" != typeof t.hex ? this.setValueHex(t.hex) : "undefined" != typeof t.name && this.setValueName(t.name))
}
,
Fe.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object),
KJUR.asn1.DERUTF8String = function(t) {
KJUR.asn1.DERUTF8String.superclass.constructor.call(this, t),
this.hT = "0c"
}
,
Fe.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString),
KJUR.asn1.DERNumericString = function(t) {
KJUR.asn1.DERNumericString.superclass.constructor.call(this, t),
this.hT = "12"
}
,
Fe.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString),
KJUR.asn1.DERPrintableString = function(t) {
KJUR.asn1.DERPrintableString.superclass.constructor.call(this, t),
this.hT = "13"
}
,
Fe.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString),
KJUR.asn1.DERTeletexString = function(t) {
KJUR.asn1.DERTeletexString.superclass.constructor.call(this, t),
this.hT = "14"
}
,
Fe.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString),
KJUR.asn1.DERIA5String = function(t) {
KJUR.asn1.DERIA5String.superclass.constructor.call(this, t),
this.hT = "16"
}
,
Fe.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString),
KJUR.asn1.DERUTCTime = function(t) {
KJUR.asn1.DERUTCTime.superclass.constructor.call(this, t),
this.hT = "17",
this.setByDate = function(t) {
this.hTLV = null,
this.isModified = !0,
this.date = t,
this.s = this.formatDate(this.date, "utc"),
this.hV = stohex(this.s)
}
,
"undefined" != typeof t && ("undefined" != typeof t.str ? this.setString(t.str) : "undefined" != typeof t.hex ? this.setStringHex(t.hex) : "undefined" != typeof t.date && this.setByDate(t.date))
}
,
Fe.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime),
KJUR.asn1.DERGeneralizedTime = function(t) {
KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, t),
this.hT = "18",
this.setByDate = function(t) {
this.hTLV = null,
this.isModified = !0,
this.date = t,
this.s = this.formatDate(this.date, "gen"),
this.hV = stohex(this.s)
}
,
"undefined" != typeof t && ("undefined" != typeof t.str ? this.setString(t.str) : "undefined" != typeof t.hex ? this.setStringHex(t.hex) : "undefined" != typeof t.date && this.setByDate(t.date))
}
,
Fe.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime),
KJUR.asn1.DERSequence = function(t) {
KJUR.asn1.DERSequence.superclass.constructor.call(this, t),
this.hT = "30",
this.getFreshValueHex = function() {
for (var t = "", e = 0; e < this.asn1Array.length; e++) {
var i = this.asn1Array;
t += i.getEncodedHex()
}
return this.hV = t,
this.hV
}
}
,
Fe.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured),
KJUR.asn1.DERSet = function(t) {
KJUR.asn1.DERSet.superclass.constructor.call(this, t),
this.hT = "31",
this.getFreshValueHex = function() {
for (var t = new Array, e = 0; e < this.asn1Array.length; e++) {
var i = this.asn1Array;
t.push(i.getEncodedHex())
}
return t.sort(),
this.hV = t.join(""),
this.hV
}
}
,
Fe.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured),
KJUR.asn1.DERTaggedObject = function(t) {
KJUR.asn1.DERTaggedObject.superclass.constructor.call(this),
this.hT = "a0",
this.hV = "",
this.isExplicit = !0,
this.asn1Object = null,
this.setASN1Object = function(t, e, i) {
this.hT = e,
this.isExplicit = t,
this.asn1Object = i,
this.isExplicit ? (this.hV = this.asn1Object.getEncodedHex(),
this.hTLV = null,
this.isModified = !0) : (this.hV = null,
this.hTLV = i.getEncodedHex(),
this.hTLV = this.hTLV.replace(/^../, e),
this.isModified = !1)
}
,
this.getFreshValueHex = function() {
return this.hV
}
,
"undefined" != typeof t && ("undefined" != typeof t.tag && (this.hT = t.tag),
"undefined" != typeof t.explicit && (this.isExplicit = t.explicit),
"undefined" != typeof t.obj && (this.asn1Object = t.obj,
this.setASN1Object(this.isExplicit, this.hT, this.asn1Object)))
}
,
Fe.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object),
function(c) {
"use strict";
var l, t = {};
t.decode = function(t) {
var e;
if (l === c) {
var i = "0123456789ABCDEF"
, s = " \f\n\r\u2028\u2029";
for (l = [],
e = 0; 16 > e; ++e)
l = e;
for (i = i.toLowerCase(),
e = 10; 16 > e; ++e)
l = e;
for (e = 0; e < s.length; ++e)
l = -1
}
var n = []
, r = 0
, o = 0;
for (e = 0; e < t.length; ++e) {
var a = t.charAt(e);
if ("=" == a)
break;
if (a = l,
-1 != a) {
if (a === c)
throw "Illegal character at offset " + e;
r |= a,
++o >= 2 ? (n = r,
r = 0,
o = 0) : r <<= 4
}
}
if (o)
throw "Hex encoding incomplete: 4 bits missing";
return n
}
,
window.Hex = t
}(),
function(c) {
"use strict";
var l, i = {};
i.decode = function(t) {
var e;
if (l === c) {
var i = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
, s = "= \f\n\r\u2028\u2029";
for (l = [],
e = 0; 64 > e; ++e)
l = e;
for (e = 0; e < s.length; ++e)
l = -1
}
var n = []
, r = 0
, o = 0;
for (e = 0; e < t.length; ++e) {
var a = t.charAt(e);
if ("=" == a)
break;
if (a = l,
-1 != a) {
if (a === c)
throw "Illegal character at offset " + e;
r |= a,
++o >= 4 ? (n = r >> 16,
n = r >> 8 & 255,
n = 255 & r,
r = 0,
o = 0) : r <<= 6
}
}
switch (o) {
case 1:
throw "Base64 encoding incomplete: at least 2 bits missing";
case 2:
n = r >> 10;
break;
case 3:
n = r >> 16,
n = r >> 8 & 255
}
return n
}
,
i.re = /-----BEGIN [^-]+-----(+)-----END [^-]+-----|begin-base64[^\n]+\n(+)====/,
i.unarmor = function(t) {
var e = i.re.exec(t);
if (e)
if (e)
t = e;
else {
if (!e)
throw "RegExp out of sync";
t = e
}
return i.decode(t)
}
,
window.Base64 = i
}(),
function(o) {
"use strict";
function l(t, e) {
t instanceof l ? (this.enc = t.enc,
this.pos = t.pos) : (this.enc = t,
this.pos = e)
}
function u(t, e, i, s, n) {
this.stream = t,
this.header = e,
this.length = i,
this.tag = s,
this.sub = n
}
var r = 100
, a = "…"
, d = {
tag: function(t, e) {},
text: function(t) {}
};
l.prototype.get = function(t) {
if (t === o && (t = this.pos++),
t >= this.enc.length)
throw "Requesting byte offset " + t + " on a stream of length " + this.enc.length;
return this.enc
}
,
l.prototype.hexDigits = "0123456789ABCDEF",
l.prototype.hexByte = function(t) {
return this.hexDigits.charAt(t >> 4 & 15) + this.hexDigits.charAt(15 & t)
}
,
l.prototype.hexDump = function(t, e, i) {
for (var s = "", n = t; e > n; ++n)
if (s += this.hexByte(this.get(n)),
i !== !0)
switch (15 & n) {
case 7:
s += " ";
break;
case 15:
s += "\n";
break;
default:
s += " "
}
return s
}
,
l.prototype.parseStringISO = function(t, e) {
for (var i = "", s = t; e > s; ++s)
i += String.fromCharCode(this.get(s));
return i
}
,
l.prototype.parseStringUTF = function(t, e) {
for (var i = "", s = t; e > s; ) {
var n = this.get(s++);
i += 128 > n ? String.fromCharCode(n) : n > 191 && 224 > n ? String.fromCharCode((31 & n) << 6 | 63 & this.get(s++)) : String.fromCharCode((15 & n) << 12 | (63 & this.get(s++)) << 6 | 63 & this.get(s++))
}
return i
}
,
l.prototype.parseStringBMP = function(t, e) {
for (var i = "", s = t; e > s; s += 2) {
var n = this.get(s)
, r = this.get(s + 1);
i += String.fromCharCode((n << 8) + r)
}
return i
}
,
l.prototype.reTime = /^((?:1|2\d)?\d\d)(0|1)(0|\d|3)(\d|2)(?:(\d)(?:(\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:\d|1)(\d)?)?$/,
l.prototype.parseTime = function(t, e) {
var i = this.parseStringISO(t, e)
, s = this.reTime.exec(i);
return s ? (i = s + "-" + s + "-" + s + " " + s,
s && (i += ":" + s,
s && (i += ":" + s,
s && (i += "." + s))),
s && (i += " UTC",
"Z" != s && (i += s,
s && (i += ":" + s))),
i) : "Unrecognized time: " + i
}
,
l.prototype.parseInteger = function(t, e) {
var i = e - t;
if (i > 4) {
i <<= 3;
var s = this.get(t);
if (0 === s)
i -= 8;
else
for (; 128 > s; )
s <<= 1,
--i;
return "(" + i + " bit)"
}
for (var n = 0, r = t; e > r; ++r)
n = n << 8 | this.get(r);
return n
}
,
l.prototype.parseBitString = function(t, e) {
var i = this.get(t)
, s = (e - t - 1 << 3) - i
, n = "(" + s + " bit)";
if (20 >= s) {
var r = i;
n += " ";
for (var o = e - 1; o > t; --o) {
for (var a = this.get(o), c = r; 8 > c; ++c)
n += a >> c & 1 ? "1" : "0";
r = 0
}
}
return n
}
,
l.prototype.parseOctetString = function(t, e) {
var i = e - t
, s = "(" + i + " byte) ";
i > r && (e = t + r);
for (var n = t; e > n; ++n)
s += this.hexByte(this.get(n));
return i > r && (s += a),
s
}
,
l.prototype.parseOID = function(t, e) {
for (var i = "", s = 0, n = 0, r = t; e > r; ++r) {
var o = this.get(r);
if (s = s << 7 | 127 & o,
n += 7,
!(128 & o)) {
if ("" === i) {
var a = 80 > s ? 40 > s ? 0 : 1 : 2;
i = a + "." + (s - 40 * a)
} else
i += "." + (n >= 31 ? "bigint" : s);
s = n = 0
}
}
return i
}
,
u.prototype.typeName = function() {
if (this.tag === o)
return "unknown";
var t = this.tag >> 6
, e = (this.tag >> 5 & 1,
31 & this.tag);
switch (t) {
case 0:
switch (e) {
case 0:
return "EOC";
case 1:
return "BOOLEAN";
case 2:
return "INTEGER";
case 3:
return "BIT_STRING";
case 4:
return "OCTET_STRING";
case 5:
return "NULL";
case 6:
return "OBJECT_IDENTIFIER";
case 7:
return "ObjectDescriptor";
case 8:
return "EXTERNAL";
case 9:
return "REAL";
case 10:
return "ENUMERATED";
case 11:
return "EMBEDDED_PDV";
case 12:
return "UTF8String";
case 16:
return "SEQUENCE";
case 17:
return "SET";
case 18:
return "NumericString";
case 19:
return "PrintableString";
case 20:
return "TeletexString";
case 21:
return "VideotexString";
case 22:
return "IA5String";
case 23:
return "UTCTime";
case 24:
return "GeneralizedTime";
case 25:
return "GraphicString";
case 26:
return "VisibleString";
case 27:
return "GeneralString";
case 28:
return "UniversalString";
case 30:
return "BMPString";
default:
return "Universal_" + e.toString(16)
}
case 1:
return "Application_" + e.toString(16);
case 2:
return "[" + e + "]";
case 3:
return "Private_" + e.toString(16)
}
}
,
u.prototype.reSeemsASCII = /^[ -~]+$/,
u.prototype.content = function() {
if (this.tag === o)
return null;
var t = this.tag >> 6
, e = 31 & this.tag
, i = this.posContent()
, s = Math.abs(this.length);
if (0 !== t) {
if (null !== this.sub)
return "(" + this.sub.length + " elem)";
var n = this.stream.parseStringISO(i, i + Math.min(s, r));
return this.reSeemsASCII.test(n) ? n.substring(0, 2 * r) + (n.length > 2 * r ? a : "") : this.stream.parseOctetString(i, i + s)
}
switch (e) {
case 1:
return 0 === this.stream.get(i) ? "false" : "true";
case 2:
return this.stream.parseInteger(i, i + s);
case 3:
return this.sub ? "(" + this.sub.length + " elem)" : this.stream.parseBitString(i, i + s);
case 4:
return this.sub ? "(" + this.sub.length + " elem)" : this.stream.parseOctetString(i, i + s);
case 6:
return this.stream.parseOID(i, i + s);
case 16:
case 17:
return "(" + this.sub.length + " elem)";
case 12:
return this.stream.parseStringUTF(i, i + s);
case 18:
case 19:
case 20:
case 21:
case 22:
case 26:
return this.stream.parseStringISO(i, i + s);
case 30:
return this.stream.parseStringBMP(i, i + s);
case 23:
case 24:
return this.stream.parseTime(i, i + s)
}
return null
}
,
u.prototype.toString = function() {
return this.typeName() + "@" + this.stream.pos + ""
}
,
u.prototype.print = function(t) {
if (t === o && (t = ""),
null !== this.sub) {
t += " ";
for (var e = 0, i = this.sub.length; i > e; ++e)
this.sub.print(t)
}
}
,
u.prototype.toPrettyString = function(t) {
t === o && (t = "");
var e = t + this.typeName() + " @" + this.stream.pos;
if (this.length >= 0 && (e += "+"),
e += this.length,
32 & this.tag ? e += " (constructed)" : 3 != this.tag && 4 != this.tag || null === this.sub || (e += " (encapsulates)"),
e += "\n",
null !== this.sub) {
t += " ";
for (var i = 0, s = this.sub.length; s > i; ++i)
e += this.sub.toPrettyString(t)
}
return e
}
,
u.prototype.toDOM = function() {
var t = d.tag("div", "node");
t.asn1 = this;
var e = d.tag("div", "head")
, i = this.typeName().replace(/_/g, " ");
e.innerHTML = i;
var s = this.content();
if (null !== s) {
s = String(s).replace(/</g, "<");
var n = d.tag("span", "preview");
n.appendChild(d.text(s)),
e.appendChild(n)
}
t.appendChild(e),
this.node = t,
this.head = e;
var r = d.tag("div", "value");
if (i = "Offset: " + this.stream.pos + "<br/>",
i += "Length: " + this.header + "+",
i += this.length >= 0 ? this.length : -this.length + " (undefined)",
32 & this.tag ? i += "<br/>(constructed)" : 3 != this.tag && 4 != this.tag || null === this.sub || (i += "<br/>(encapsulates)"),
null !== s && (i += "<br/>Value:<br/><b>" + s + "</b>",
"object" == typeof oids && 6 == this.tag)) {
var o = oids;
o && (o.d && (i += "<br/>" + o.d),
o.c && (i += "<br/>" + o.c),
o.w && (i += "<br/>(warning!)"))
}
r.innerHTML = i,
t.appendChild(r);
var a = d.tag("div", "sub");
if (null !== this.sub)
for (var c = 0, l = this.sub.length; l > c; ++c)
a.appendChild(this.sub.toDOM());
return t.appendChild(a),
e.onclick = function() {
t.className = "node collapsed" == t.className ? "node" : "node collapsed"
}
,
t
}
,
u.prototype.posStart = function() {
return this.stream.pos
}
,
u.prototype.posContent = function() {
return this.stream.pos + this.header
}
,
u.prototype.posEnd = function() {
return this.stream.pos + this.header + Math.abs(this.length)
}
,
u.prototype.fakeHover = function(t) {
this.node.className += " hover",
t && (this.head.className += " hover")
}
,
u.prototype.fakeOut = function(t) {
var e = / ?hover/;
this.node.className = this.node.className.replace(e, ""),
t && (this.head.className = this.head.className.replace(e, ""))
}
,
u.prototype.toHexDOM_sub = function(t, e, i, s, n) {
if (!(s >= n)) {
var r = d.tag("span", e);
r.appendChild(d.text(i.hexDump(s, n))),
t.appendChild(r)
}
}
,
u.prototype.toHexDOM = function(e) {
var t = d.tag("span", "hex");
if (e === o && (e = t),
this.head.hexNode = t,
this.head.onmouseover = function() {
this.hexNode.className = "hexCurrent"
}
,
this.head.onmouseout = function() {
this.hexNode.className = "hex"
}
,
t.asn1 = this,
t.onmouseover = function() {
var t = !e.selected;
t && (e.selected = this.asn1,
this.className = "hexCurrent"),
this.asn1.fakeHover(t)
}
,
t.onmouseout = function() {
var t = e.selected == this.asn1;
this.asn1.fakeOut(t),
t && (e.selected = null,
this.className = "hex")
}
,
this.toHexDOM_sub(t, "tag", this.stream, this.posStart(), this.posStart() + 1),
this.toHexDOM_sub(t, this.length >= 0 ? "dlen" : "ulen", this.stream, this.posStart() + 1, this.posContent()),
null === this.sub)
t.appendChild(d.text(this.stream.hexDump(this.posContent(), this.posEnd())));
else if (this.sub.length > 0) {
var i = this.sub
, s = this.sub;
this.toHexDOM_sub(t, "intro", this.stream, this.posContent(), i.posStart());
for (var n = 0, r = this.sub.length; r > n; ++n)
t.appendChild(this.sub.toHexDOM(e));
this.toHexDOM_sub(t, "outro", this.stream, s.posEnd(), this.posEnd())
}
return t
}
,
u.prototype.toHexString = function(t) {
return this.stream.hexDump(this.posStart(), this.posEnd(), !0)
}
,
u.decodeLength = function(t) {
var e = t.get()
, i = 127 & e;
if (i == e)
return i;
if (i > 3)
throw "Length over 24 bits not supported at position " + (t.pos - 1);
if (0 === i)
return -1;
e = 0;
for (var s = 0; i > s; ++s)
e = e << 8 | t.get();
return e
}
,
u.hasContent = function(t, e, i) {
if (32 & t)
return !0;
if (3 > t || t > 4)
return !1;
var s = new l(i);
3 == t && s.get();
var n = s.get();
if (n >> 6 & 1)
return !1;
try {
var r = u.decodeLength(s);
return s.pos - i.pos + r == e
} catch (p) {
return !1
}
}
,
u.decode = function(t) {
t instanceof l || (t = new l(t,0));
var e = new l(t)
, i = t.get()
, s = u.decodeLength(t)
, n = t.pos - e.pos
, r = null;
if (u.hasContent(i, s, t)) {
var o = t.pos;
if (3 == i && t.get(),
r = [],
s >= 0) {
for (var a = o + s; t.pos < a; )
r = u.decode(t);
if (t.pos != a)
throw "Content size is not correct for container starting at offset " + o
} else
try {
for (; ; ) {
var c = u.decode(t);
if (0 === c.tag)
break;
r = c
}
s = o - t.pos
} catch (h) {
throw "Exception while decoding undefined length content: " + h
}
} else
t.pos += s;
return new u(e,n,s,i,r)
}
,
u.test = function() {
for (var t = [{
value: ,
expected: 39
}, {
value: ,
expected: 201
}, {
value: ,
expected: 16702650
}], e = 0, i = t.length; i > e; ++e) {
var s = new l(t.value,0)
, n = u.decodeLength(s);
}
}
,
window.ASN1 = u
}(),
ASN1.prototype.getHexStringValue = function() {
var t = this.toHexString()
, e = 2 * this.header
, i = 2 * this.length;
return t.substr(e, i)
}
,
le.prototype.parseKey = function(t) {
try {
var e = 0
, i = 0
, s = /^\s*(?:\s*)+$/
, n = s.test(t) ? Hex.decode(t) : Base64.unarmor(t)
, r = ASN1.decode(n);
if (3 === r.sub.length && (r = r.sub.sub),
9 === r.sub.length) {
e = r.sub.getHexStringValue(),
this.n = ae(e, 16),
i = r.sub.getHexStringValue(),
this.e = parseInt(i, 16);
var o = r.sub.getHexStringValue();
this.d = ae(o, 16);
var a = r.sub.getHexStringValue();
this.p = ae(a, 16);
var c = r.sub.getHexStringValue();
this.q = ae(c, 16);
var l = r.sub.getHexStringValue();
this.dmp1 = ae(l, 16);
var u = r.sub.getHexStringValue();
this.dmq1 = ae(u, 16);
var d = r.sub.getHexStringValue();
this.coeff = ae(d, 16)
} else {
if (2 !== r.sub.length)
return !1;
var p = r.sub
, h = p.sub;
e = h.sub.getHexStringValue(),
this.n = ae(e, 16),
i = h.sub.getHexStringValue(),
this.e = parseInt(i, 16)
}
return !0
} catch (f) {
return !1
}
}
,
le.prototype.getPrivateBaseKey = function() {
var t = {
array: [new KJUR.asn1.DERInteger({
"int": 0
}), new KJUR.asn1.DERInteger({
bigint: this.n
}), new KJUR.asn1.DERInteger({
"int": this.e
}), new KJUR.asn1.DERInteger({
bigint: this.d
}), new KJUR.asn1.DERInteger({
bigint: this.p
}), new KJUR.asn1.DERInteger({
bigint: this.q
}), new KJUR.asn1.DERInteger({
bigint: this.dmp1
}), new KJUR.asn1.DERInteger({
bigint: this.dmq1
}), new KJUR.asn1.DERInteger({
bigint: this.coeff
})]
}
, e = new KJUR.asn1.DERSequence(t);
return e.getEncodedHex()
}
,
le.prototype.getPrivateBaseKeyB64 = function() {
return be(this.getPrivateBaseKey())
}
,
le.prototype.getPublicBaseKey = function() {
var t = {
array: [new KJUR.asn1.DERObjectIdentifier({
oid: "1.2.840.113549.1.1.1"
}), new KJUR.asn1.DERNull]
}
, e = new KJUR.asn1.DERSequence(t);
t = {
array: [new KJUR.asn1.DERInteger({
bigint: this.n
}), new KJUR.asn1.DERInteger({
"int": this.e
})]
};
var i = new KJUR.asn1.DERSequence(t);
t = {
hex: "00" + i.getEncodedHex()
};
var s = new KJUR.asn1.DERBitString(t);
t = {
array:
};
var n = new KJUR.asn1.DERSequence(t);
return n.getEncodedHex()
}
,
le.prototype.getPublicBaseKeyB64 = function() {
return be(this.getPublicBaseKey())
}
,
le.prototype.wordwrap = function(t, e) {
if (e = e || 64,
!t)
return t;
var i = "(.{1," + e + "})( +|$\n?)|(.{1," + e + "})";
return t.match(RegExp(i, "g")).join("\n")
}
,
le.prototype.getPrivateKey = function() {
var t = "-----BEGIN RSA PRIVATE KEY-----\n";
return t += this.wordwrap(this.getPrivateBaseKeyB64()) + "\n",
t += "-----END RSA PRIVATE KEY-----"
}
,
le.prototype.getPublicKey = function() {
var t = "-----BEGIN PUBLIC KEY-----\n";
return t += this.wordwrap(this.getPublicBaseKeyB64()) + "\n",
t += "-----END PUBLIC KEY-----"
}
,
le.prototype.hasPublicKeyProperty = function(t) {
return t = t || {},
t.hasOwnProperty("n") && t.hasOwnProperty("e")
}
,
le.prototype.hasPrivateKeyProperty = function(t) {
return t = t || {},
t.hasOwnProperty("n") && t.hasOwnProperty("e") && t.hasOwnProperty("d") && t.hasOwnProperty("p") && t.hasOwnProperty("q") && t.hasOwnProperty("dmp1") && t.hasOwnProperty("dmq1") && t.hasOwnProperty("coeff")
}
,
le.prototype.parsePropertiesFrom = function(t) {
this.n = t.n,
this.e = t.e,
t.hasOwnProperty("d") && (this.d = t.d,
this.p = t.p,
this.q = t.q,
this.dmp1 = t.dmp1,
this.dmq1 = t.dmq1,
this.coeff = t.coeff)
}
;
var qe = function(t) {
le.call(this),
t && ("string" == typeof t ? this.parseKey(t) : (this.hasPrivateKeyProperty(t) || this.hasPublicKeyProperty(t)) && this.parsePropertiesFrom(t))
};
(qe.prototype = new le).constructor = qe;
var He = function(t) {
t = t || {},
this.default_key_size = parseInt(t.default_key_size) || 1024,
this.default_public_exponent = t.default_public_exponent || "010001",
this.log = t.log || !1,
this.key = null
};
He.prototype.setKey = function(t) {
this.log && this.key && console.warn("A key was already set, overriding existing."),
this.key = new qe(t)
}
,
He.prototype.setPrivateKey = function(t) {
this.setKey(t)
}
,
He.prototype.setPublicKey = function(t) {
this.setKey(t)
}
,
He.prototype.decrypt = function(t) {
try {
return this.getKey().decrypt(ye(t))
} catch (b) {
return !1
}
}
,
He.prototype.encrypt = function(t) {
try {
return be(this.getKey().encrypt(t))
} catch (b) {
return !1
}
}
,
He.prototype.getKey = function(t) {
if (!this.key) {
if (this.key = new qe,
t && "" === {}.toString.call(t))
return void this.key.generateAsync(this.default_key_size, this.default_public_exponent, t);
this.key.generate(this.default_key_size, this.default_public_exponent)
}
return this.key
}
,
He.prototype.getPrivateKey = function() {
return this.getKey().getPrivateKey()
}
,
He.prototype.getPrivateKeyB64 = function() {
return this.getKey().getPrivateBaseKeyB64()
}
,
He.prototype.getPublicKey = function() {
return this.getKey().getPublicKey()
}
,
He.prototype.getPublicKeyB64 = function() {
return this.getKey().getPublicBaseKeyB64()
}
,
He.version = "2.3.1",
t.JSEncrypt = He
}
) ? s.apply(e, n) : s) === undefined || (i.exports = r)
}
.call(e, i, e, t)) === undefined || (t.exports = r)
},
jsencrypt: function(t, e, r) {
var i;
(i = function(t, e, i) {
var s = r("encrypt");
function n() {
void 0 !== s && (this.jsencrypt = new s.JSEncrypt,
this.jsencrypt.setPublicKey("-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDq04c6My441Gj0UFKgrqUhAUg+kQZeUeWSPlAU9fr4HBPDldAeqzx1UR92KJHuQh/zs1HOamE2dgX9z/2oXcJaqoRIA/FXysx+z2YlJkSk8XQLcQ8EBOkp//MZrixam7lCYpNOjadQBb2Ot0U/Ky+jF2p+Ie8gSZ7/u+Wnr5grywIDAQAB-----END PUBLIC KEY-----"))
}
n.prototype.encode = function(t, e) {
var i = e ? e + "|" + t : t;
return encodeURIComponent(this.jsencrypt.encrypt(i))
}
,
i.exports = n
}
.call(e, r, e, t)) === undefined || (t.exports = i)
}
});
function z(pwd, time) {
var n = _n("jsencrypt");
var g = (new n);
var r = g.encode(pwd, time);
return r;
}
var pwd = process.argv;
var time = process.argv;
console.log(z(pwd, time));
加密的算法到手了,现在就请求获取数据即可。这时会发现题目要求的是【总金额】,而接口返回的仅仅是【三等奖中奖金额】,然后在全局中搜索其他金额,但是没有搜索到,此时接口也没返回,说明是根据接口的参数计算得出的
回去看一下请求成功时的回调函数
这里可以看到响应的内一个值赋值给了val
往右拉可以看到其中的值分别为【三等奖】、【总金额】、【二等奖】和【一等奖】。因为我们要总金额,所以所有数值直接乘以24即可
import requests
import time
import os
from urllib import parse
def main():
sums = 0
for page in range(1, 6):
t = str(int(time.time()))+'000'
q = str(page) + '-' + t + '|'
nodejs = os.popen('node 06 '+t+' '+str(page))
m = nodejs.read().replace('\n', '')
nodejs.close()
data = {
'page': page,
'm': m,
'q': q
}
url = 'http://match.yuanrenxue.com/api/match/6?'+parse.urlencode(data)
headers = {
'User-Agent': 'yuanrenxue.project'
}
response = requests.get(url, headers=headers).json()
for each in response['data']:
sums += each['value'] * 24
print(sums)
# 总金额: 6883344
if __name__ == '__main__':
main()
第七题【响应-字体反爬-字体映射文件】
这里可以直接抓取接口的数据,请求的时候没有存在反爬
可以看到返回的值都已以空格分隔的字符串,还有一个base64编码的woff文件
我们将这个woff文件保存下来,并将其转换为xml文件
from fontTools.ttLib import TTFont
url = 'http://match.yuanrenxue.com/api/match/7?page=1'
response = requests.get(url).json()
woffb64 = response['woff']
with open('07.woff', 'wb') as f:
f.write(base64.b64decode(woffb64.encode()))
TTFont('07.woff').saveXML('07.xml')
此时可以查看到字体文件的内容,其中最主要的是两个部分【cmap】和【glyf】
【cmap】表示的是我们响应的内容(源码内容)与name的映射关系
【glyf】表示name对应字体的轮廓信息
(备注:信息参考来源https://blog.csdn.net/dream_dt/article/details/82725398)
因为每个数字的轮廓是固定的,那么可以通过轮廓信息的前几个点来确定是哪一个数字
所以对于字体文件的处理。基本思路就是
1.获取相应内容
2.根据响应找到对应的name
3.根据name找到对应的轮廓信息
4.根据轮廓信息的前几个点,确定对应的数字
到这里数字就已经处理完成了,但是题目要求的是找出胜点最高的召唤师的姓名,所以还需要获取每一个数字对应的姓名,这里随意搜索名字都可以
我使用的是第一个名字,实际随意一个都是可以的,都可以找到这段代码,主要看里面success的回调函数,因为这里就是绘制页面的
这里1557行的name变量就是所有的名字,1563行就是取name的值进行显示
那么将这些变量复制出来重新编写函数就可以了
import requests
import base64
import xmltodict
import os
from fontTools.ttLib import TTFont
def main():
name = ['极镀ギ紬荕', '爷灬霸气傀儡', '梦战苍穹', '傲世哥', 'мaη肆風聲', '一刀メ隔世', '横刀メ绝杀', 'Q不死你R死你', '魔帝殤邪', '封刀不再战', '倾城孤狼', '戎马江湖',
'狂得像风', '影之哀伤', '謸氕づ独尊', '傲视狂杀', '追风之梦', '枭雄在世', '傲视之巅', '黑夜刺客', '占你心为王', '爷来取你狗命', '御风踏血', '凫矢暮城', '孤影メ残刀',
'野区霸王', '噬血啸月', '风逝无迹', '帅的睡不着', '血色杀戮者', '冷视天下', '帅出新高度', '風狆瑬蒗', '灵魂禁锢', 'ヤ地狱篮枫ゞ', '溅血メ破天', '剑尊メ杀戮',
'塞外う飛龍', '哥‘K纯帅', '逆風祈雨', '恣意踏江山', '望断、天涯路', '地獄惡灵', '疯狂メ孽杀', '寂月灭影', '骚年霸称帝王', '狂杀メ无赦', '死灵的哀伤', '撩妹界扛把子',
'霸刀☆藐视天下', '潇洒又能打', '狂卩龙灬巅丷峰', '羁旅天涯.', '南宫沐风', '风恋绝尘', '剑下孤魂', '一蓑烟雨', '领域★倾战', '威龙丶断魂神狙', '辉煌战绩', '屎来运赚',
'伱、Bu够档次', '九音引魂箫', '骨子里的傲气', '霸海断长空', '没枪也很狂', '死魂★之灵']
peopledict = {}
for page in range(1, 6):
yyq = 1
url = 'http://match.yuanrenxue.com/api/match/7?page='+str(page)
response = requests.get(url).json()
woffb64 = response['woff']
with open('07.woff', 'wb') as f:
f.write(base64.b64decode(woffb64.encode()))
TTFont('07.woff').saveXML('07.xml')
with open('07.xml', 'r') as f:
xmldict = xmltodict.parse(f.read())
namedict = {}
for each in xmldict['ttFont']['cmap']['cmap_format_4']['map']:
namedict] = each['@name']
numberdict = {}
for each in xmldict['ttFont']['glyf']['TTGlyph']:
if 'uni' in each['@name']:
if type(each['contour']) == list:
pt = each['contour']['pt']
else:
pt = each['contour']['pt']
if pt['@x'] == '300':
if pt['@x'] == '171':
numberdict] = '0'
else:
numberdict] = '8'
elif pt['@x'] == '297':
numberdict] = '1'
elif pt['@x'] == '310':
if pt['@x'] == '202':
numberdict] = '2'
else:
numberdict] = '6'
elif pt['@x'] == '307':
numberdict] = '3'
elif pt['@x'] == '384':
numberdict] = '4'
elif pt['@x'] == '105':
numberdict] = '5'
elif pt['@x'] == '66':
numberdict] = '7'
elif pt['@x'] == '292':
numberdict] = '9'
for each in response['data']:
number = each['value'].replace('&#', '0').strip().split(' ')
number = int(''.join(list(map(lambda n: numberdict], number))))
peopledict] = number
yyq += 1
people = max(peopledict, key=peopledict.get)
pt = peopledict
print(people)
print(pt)
# 胜点最高召唤师名字:冷视天下
# 胜点最高:9711
# 清空缓存
os.remove('07.woff')
os.remove('07.xml')
if __name__ == '__main__':
main()
第八题【接口-验证码-文字点选】
(备注:题目要求是不能够使用打码平台,因为考虑到我不是比赛,而且个人少量需求的识别使用打码平台是比较方便的,所以这一题我是用的是腾讯云的通用手写体识别,
虽然识别不是百分百准确,但是对付本题足够了。而且每月有1000次免费调用,用来做这题是完全够的)
直接使用f12进行抓包,一般验证码都会返回一个参数用于请求的时候一起提交,用于知道你输入的是哪个验证码,这里明显就是【Set-Cookie】中的【sessionid】
首先将html字段的内容复制出来格式化一下
此时可以看到需要点击的文字在第二个div中,而验证码图片则在最后的img标签中,查看一下这张图片
如果就这样直接去识别的话,别说AI,人都看的辣眼睛,所以需要对图片做进一步的处理
那么现在的问题就变成了怎么处理图片来更好的识别了,处理方法有很多,我处理这种也是比较少,我的基本思路是
1.去除背景色影响
2.去除噪点的影响
3.去除框线和斜线的影响
4.增强字体强度
5.二值化
处理的效果大概就像上图,此时就可以调用腾讯云的api进行文字识别了
接下来看看怎么请求。随便点四个地方,然后查看一下请求的内容
看一看到我们选择验证码的结果再查询参数中,仔细观察可以发现,当我们点下一个点的时候,左边的图片就会在点的地方出现一个红点,此时对着图片右键,选择审查元素
可以看到图片上面有很多的div,实际上图片上是有30*30个div,每个代表一个序号,那么通过这个序号就可以知道点击的是哪个地方的文字了,这里我一律按照点击图片左上角第一个div
编写代码实现请求
import requests
import re
import base64
import os
import json
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.ocr.v20181119 import ocr_client, models
from PIL import Image
from collections import Counter
clicklist =
def main():
numberanswer = []
for page in range(1, 6):
while True:
try:
print('正在获取第'+str(page)+'页验证码')
url = 'http://match.yuanrenxue.com/api/match/8_verify'
response = requests.get(url)
sessionid = re.findall('(?<=sessionid=).+?(?=;)', response.headers['Set-Cookie'])
response = response.json()['html']
divs = re.findall('(?<=请依次点击).+<br>', response)
words = re.findall('[\u4e00-\u9fa5]', divs)
print('需要依次点击的文字')
print(words)
img = re.findall('(?<=<img src="data:image/jpeg;base64,).+?(?=")', response)
print('正在处理图片')
with open('08.png', 'wb') as f:
f.write(base64.b64decode(img.encode()))
image = Image.open('08.png').convert("RGB")
width, height = image.size
rgblst = []
lesslist = []
morelist = []
linelist = []
# 去除噪点影响
for y in range(height):
for x in range(width):
rgblst.append(image.getpixel((x, y)))
for rgb, number in Counter(rgblst).most_common():
if number < 500:
lesslist.append(rgb)
else:
morelist.append(rgb)
# 校验颜色区间阀值
for rgb in morelist:
xlist = []
ylist = []
for y in range(height):
for x in range(width):
if rgb == image.getpixel((x, y)):
xlist.append(x)
ylist.append(y)
xlist.sort()
ylist.sort()
if (xlist[-1] - xlist) > 110:
linelist.append(rgb)
if (ylist[-1] - ylist) > 110:
linelist.append(rgb)
if xlist < 80 and xlist[-1] > 120:
linelist.append(rgb)
if xlist < 180 and xlist[-1] > 220:
linelist.append(rgb)
if ylist < 80 and ylist[-1] > 120:
linelist.append(rgb)
if ylist < 180 and ylist[-1] > 220:
linelist.append(rgb)
# 去除背景色影响
counter = Counter(rgblst).most_common(2)
f1 = counter
f2 = counter
image2 = Image.new("RGB", (width, height))
for y in range(height):
for x in range(width):
if image.getpixel((x, y)) == f1 or image.getpixel((x, y)) == f2:
image2.putpixel((x, y), (255, 255, 255))
elif image.getpixel((x, y)) in lesslist:
image2.putpixel((x, y), (255, 255, 255))
elif image.getpixel((x, y)) in linelist:
image2.putpixel((x, y), (255, 255, 255))
else:
image2.putpixel((x, y), image.getpixel((x, y)))
rgblist = []
# 最后去除前面遗漏的线条
for y in range(height):
for x in range(width):
rgb = image2.getpixel((x, y))
if not rgb in rgblist:
rgblist.append(rgb)
def contrast1(zhongrgb, bianrgb):
for each in bianrgb:
if zhongrgb != each:
return False
return True
if len(rgblist) > 10:
linelist = []
for rgb in rgblist:
if rgb != (255, 255, 255):
allnumber = 0
nonumber = 0
for y in range(height):
for x in range(width):
if 0 < x < (width-1) and 0 < y < (height-1):
zhongrgb = image2.getpixel((x, y))
if zhongrgb == rgb:
bianrgb = [
image2.getpixel((x-1, y-1)), image2.getpixel((x, y-1)), image2.getpixel((x+1, y-1)),
image2.getpixel((x-1, y)), image2.getpixel((x+1, y)),
image2.getpixel((x-1, y+1)), image2.getpixel((x, y+1)), image2.getpixel((x+1, y+1))
]
if contrast1(zhongrgb, bianrgb):
allnumber += 1
else:
nonumber += 1
if (allnumber / (allnumber + nonumber)) > 0.5:
linelist.append(rgb)
image3 = Image.new("RGB", (width, height))
for y in range(height):
for x in range(width):
if image2.getpixel((x, y)) in linelist:
image3.putpixel((x, y), (255, 255, 255))
else:
image3.putpixel((x, y), image2.getpixel((x, y)))
else:
image3 = image2
def contrast2(zhongrgb, bianrgb):
rgb, number = Counter(bianrgb).most_common(1)
if number >= 7 and rgb != zhongrgb:
return True
else:
return False
# 首次增强字体
for i in range(5):
image4 = Image.new("RGB", (width, height))
for y in range(height):
for x in range(width):
if 0 < x < (width - 1) and 0 < y < (height - 1):
zhongrgb = image3.getpixel((x, y))
bianrgb = [
image3.getpixel((x - 1, y - 1)), image3.getpixel((x, y - 1)), image3.getpixel((x + 1, y - 1)),
image3.getpixel((x - 1, y)), image3.getpixel((x + 1, y)),
image3.getpixel((x - 1, y + 1)), image3.getpixel((x, y + 1)), image3.getpixel((x + 1, y + 1))
]
if contrast2(zhongrgb, bianrgb):
image4.putpixel((x, y), Counter(bianrgb).most_common(1))
else:
image4.putpixel((x, y), zhongrgb)
else:
image4.putpixel((x, y), image3.getpixel((x, y)))
image4.save('08'+str(i)+'.png')
image3 = image4
# 二值化
image4 = Image.new("RGB", (width, height))
for y in range(height):
for x in range(width):
rgb = image3.getpixel((x, y))
if rgb == (255, 255, 255):
image4.putpixel((x, y), (255, 255, 255))
else:
image4.putpixel((x, y), (0, 0, 0))
image4.save('08.png')
print('正在识别图片')
# 腾讯云
with open('08.png', 'rb') as f:
img = base64.b64encode(f.read()).decode()
cred = credential.Credential("", "") # 填写自己的帐号信息
httpProfile = HttpProfile()
httpProfile.endpoint = "ocr.tencentcloudapi.com"
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
client = ocr_client.OcrClient(cred, "ap-beijing", clientProfile)
req = models.GeneralHandwritingOCRRequest()
params = {"ImageBase64": img}
req.from_json_string(json.dumps(params))
response = json.loads(client.GeneralHandwritingOCR(req).to_json_string())
wordlist = []
for each in response['TextDetections']:
wordlist += list(each['DetectedText'])
if len(wordlist) == 9:
print('识别成功')
print(wordlist)
answer = ''
for word in words:
if word in wordlist:
answer += str(clicklist)+'|'
else:
print('无法找到与 ' + word + ' 对应的文字')
print('重新获取')
raise ()
print('识别答案成功')
print(answer)
url = 'http://match.yuanrenxue.com/api/match/8?page='+str(page)+'&answer='+answer
headers = {
'cookie': 'sessionid='+sessionid
}
response = requests.get(url, headers=headers).json()
print(response)
for each in response['data']:
numberanswer.append(each['value'])
break
else:
print('识别失败')
print('重新获取')
except:
pass
# 请求完成,开始统计
answer = Counter(numberanswer).most_common(1)
print(answer)
# 众数:7453
# 删除缓存
os.remove('08.png')
if __name__ == '__main__':
main()
第九题【接口-请求头-值加密】
第九题也是动态cookie,根据第二题的经验,这次直接使用Fiddler.exe进行抓包
可以看到与第二题比较类似,都是不带cookie的时候访问会返回一段script,然后通过这段script代码计算出cookie,把这段代码复制出来
可以看到这段代码由三段script代码组成,复制第二段代码到ob混淆专解测试版V0.1
(function () {
var _0x5d195 = function () {
var _0x430ddc = true;
return function (_0x23198c, _0x471107) {
var _0x4ab8c8 = _0x430ddc ? function () {
if (_0x471107) {
var _0xc5dcca = _0x471107["apply"](_0x23198c, arguments);
_0x471107 = null;
return _0xc5dcca;
}
} : function () {};
_0x430ddc = false;
return _0x4ab8c8;
};
}();
var _0x389c3c = _0x5d195(this, function () {
var _0x4008ad = function () {
var _0x2a79aa = _0x4008ad["constructor"]("return /\" + this + \"/")()["compile"]("^([^ ]+( +[^ ]+)+)+[^ ]}");
return !_0x2a79aa["test"](_0x389c3c);
};
return _0x4008ad();
});
_0x389c3c();
var _0x2c92eb = function () {
var _0x2b55f5 = true;
return function (_0x2e56bc, _0x41f85d) {
var _0x1d675f = _0x2b55f5 ? function () {
if (_0x41f85d) {
var _0x1fa9cf = _0x41f85d["apply"](_0x2e56bc, arguments);
_0x41f85d = null;
return _0x1fa9cf;
}
} : function () {};
_0x2b55f5 = false;
return _0x1d675f;
};
}();
(function () {
_0x2c92eb(this, function () {
var _0x15381a = new RegExp("function *\\( *\\)");
var _0x4d1b66 = new RegExp("\\+\\+ *(?:*)", "i");
var _0x5e999b = $_0x1ffae4("init");
if (!_0x15381a["test"](_0x5e999b + "chain") || !_0x4d1b66["test"](_0x5e999b + "input")) {
_0x5e999b("0");
} else {
$_0x1ffae4();
}
})();
})();
try {
if (global) {
decrypt(1603414848);
}
} catch (_0x5bf545) {
global = new Array();
}
window = new Array();
for (var _0x37c17b = 1; _0x37c17b <= 2; _0x37c17b++) {
res = decrypt(1603414848);
}
document["cookie"] = "m=" + (_0x37c17b - 1)["toString"]() + res + "; path=/";
})();
setInterval(function () {
$_0x1ffae4();
}, 4000);
function $_0x1ffae4(_0xb714e3) {
function _0xc8254d(_0x3bda70) {
if (typeof _0x3bda70 === "string") {
return function (_0x2c1643) {}["constructor"]("while (true) {}")["apply"]("counter");
} else {
if (("" + _0x3bda70 / _0x3bda70)["length"] !== 1 || _0x3bda70 % 20 === 0) {
(function () {
return true;
})["constructor"]("debugger")["call"]("action");
} else {
(function () {
return false;
})["constructor"]("debugger")["apply"]("stateObject");
}
}
_0xc8254d(++_0x3bda70);
}
try {
if (_0xb714e3) {
return _0xc8254d;
} else {
_0xc8254d(0);
}
} catch (_0x4ae91f) {}
}
这里可以看到【(_0x37c17b - 1)["toString"]() + res】组成,前面的就是一个定值【2】,后面的【res】就是由【decrypt(1603414848)】函数得到
然后搜索【decrypt】函数,发现里面并没有【decrypt】函数的实现方法,在一开始的页面还引入了一个外部的js文件【http://match.yuanrenxue.com/static/match/safety/match9/udc.js】
可以看到这个js使用的是v5的混淆,依然使用ob混淆专解测试版V0.1进行反混淆。这次的时间可能比较长,我用了十多秒。因为代码比较长,只贴出核心部分
function _0x4f6d79(_0x50f9fa) {
const _0x506402 = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5GVku07yXCndaMS1evPIPyWwhbdWMVRqL4qg4OsKbzyTGmV4YkG8H0hwwrFLuPhqC5tL136aaizuL/lN5DRRbePct6syILOLLCBJ5J5rQyGr00l1zQvdNKYp4tT5EFlqw8tlPkibcsd5Ecc8sTYa77HxNeIa6DRuObC5H9t85ALJyDVZC3Y4ES/u61Q7LDnB3kG9MnXJsJiQxm1pLkE7Zfxy29d5JaXbbfwhCDSjE4+dUQoq2MVIt2qVjZSo5Hd/bAFGU1Lmc7GkFeLiLjNTOfECF52ms/dks92Wx/glfRuK4h/fcxtGB4Q2VXu5k68e/2uojs6jnFsMKVe+FVUDkQIDAQAB";
const _0xc7daa3 = new JSEncrypt();
_0xc7daa3["setPublicKey"](_0x506402);
return encodeURIComponent(_0xc7daa3["encrypt"](_0x50f9fa));
}
window["decrypt"] = _0x4f6d79;
这里可以看出与第六题类似,使用的是rsa加密,因为js使用的是免费版的加密,会有一些多余的代码,那么将包含【jsjiami.com.v5】的函数的变量全部删掉
根据第六题的经验,还要做两部,js开始设置window是全局
window = global;
navigator = {};
document = {
cookie: ""
};
然后删除多余的window和global的影响,js里有两处,搜索删除即可
最后是反混淆里面暂时有一个小bug
if (null == _0x28fced) {
_0x28fced = [];
var _0x234805 = undefined;
var _0xde5242 = new Uint32Array(256);
}
这里出现了一些小错误,修改一下即可
if (null == _0x28fced) {
_0x28fced = [];
_0x198bd8 = 0
var _0x234805 = undefined;
var _0xde5242 = new Uint32Array(256);
}
最后将js文件保存为0901.js
window = global;
navigator = {};
document = {
cookie: ""
};
!function (_0x53bae5, _0x153ef4) {
"object" == typeof exports && "undefined" != typeof module ? _0x153ef4(exports) : "function" == typeof define && define["amd"] ? define(["exports"], _0x153ef4) : _0x153ef4(_0x53bae5["JSEncrypt"] = {});
}(this, function (_0x20544c) {
"use strict";
var _0x58c808 = "0123456789abcdefghijklmnopqrstuvwxyz";
function _0x4e31bb(_0x10a3c5) {
return _0x58c808["charAt"](_0x10a3c5);
}
function _0x4273b2(_0x264e76, _0x11e1ea) {
return _0x264e76 & _0x11e1ea;
}
function _0xfb232b(_0x5495a1, _0xc02b9e) {
return _0x5495a1 | _0xc02b9e;
}
function _0x3eba95(_0x539dd8, _0x59bb2f) {
return _0x539dd8 ^ _0x59bb2f;
}
function _0x1e8fa0(_0x7b2e5b, _0x119827) {
return _0x7b2e5b & ~_0x119827;
}
function _0x525b4a(_0x5a7bd7) {
if (0 == _0x5a7bd7) {
return -1;
}
var _0x1049e5 = 0;
return 0 == (65535 & _0x5a7bd7) && (_0x5a7bd7 >>= 16, _0x1049e5 += 16), 0 == (255 & _0x5a7bd7) && (_0x5a7bd7 >>= 8, _0x1049e5 += 8), 0 == (15 & _0x5a7bd7) && (_0x5a7bd7 >>= 4, _0x1049e5 += 4), 0 == (3 & _0x5a7bd7) && (_0x5a7bd7 >>= 2, _0x1049e5 += 2), 0 == (1 & _0x5a7bd7) && ++_0x1049e5, _0x1049e5;
}
function _0xbc2d31(_0x371ef4) {
for (var _0x280ad5 = 0; 0 != _0x371ef4;) _0x371ef4 &= _0x371ef4 - 1, ++_0x280ad5;
return _0x280ad5;
}
var _0x407614 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
function _0x125db2(_0x3d3880) {
var _0x1b5e9b,
_0x4c43ce,
_0x1b4ee6 = "";
for (_0x1b5e9b = 0; _0x1b5e9b + 3 <= _0x3d3880["length"]; _0x1b5e9b += 3) _0x4c43ce = parseInt(_0x3d3880["substring"](_0x1b5e9b, _0x1b5e9b + 3), 16), _0x1b4ee6 += _0x407614["charAt"](_0x4c43ce >> 6) + _0x407614["charAt"](63 & _0x4c43ce);
for (_0x1b5e9b + 1 == _0x3d3880["length"] ? (_0x4c43ce = parseInt(_0x3d3880["substring"](_0x1b5e9b, _0x1b5e9b + 1), 16), _0x1b4ee6 += _0x407614["charAt"](_0x4c43ce << 2)) : _0x1b5e9b + 2 == _0x3d3880["length"] && (_0x4c43ce = parseInt(_0x3d3880["substring"](_0x1b5e9b, _0x1b5e9b + 2), 16), _0x1b4ee6 += _0x407614["charAt"](_0x4c43ce >> 2) + _0x407614["charAt"]((3 & _0x4c43ce) << 4)); 0 < (3 & _0x1b4ee6["length"]);) _0x1b4ee6 += "=";
return _0x1b4ee6;
}
function _0x5c2128(_0x3ae9d8) {
var _0x5dbe6d,
_0x483fc9 = "",
_0x196962 = 0,
_0x4eb25a = 0;
for (_0x5dbe6d = 0; _0x5dbe6d < _0x3ae9d8["length"] && "=" != _0x3ae9d8["charAt"](_0x5dbe6d); ++_0x5dbe6d) {
var _0x4ce454 = _0x407614["indexOf"](_0x3ae9d8["charAt"](_0x5dbe6d));
_0x4ce454 < 0 || (0 == _0x196962 ? (_0x483fc9 += _0x4e31bb(_0x4ce454 >> 2), _0x4eb25a = 3 & _0x4ce454, _0x196962 = 1) : 1 == _0x196962 ? (_0x483fc9 += _0x4e31bb(_0x4eb25a << 2 | _0x4ce454 >> 4), _0x4eb25a = 15 & _0x4ce454, _0x196962 = 2) : 2 == _0x196962 ? (_0x483fc9 += _0x4e31bb(_0x4eb25a), _0x483fc9 += _0x4e31bb(_0x4ce454 >> 2), _0x4eb25a = 3 & _0x4ce454, _0x196962 = 3) : (_0x483fc9 += _0x4e31bb(_0x4eb25a << 2 | _0x4ce454 >> 4), _0x483fc9 += _0x4e31bb(15 & _0x4ce454), _0x196962 = 0));
}
return 1 == _0x196962 && (_0x483fc9 += _0x4e31bb(_0x4eb25a << 2)), _0x483fc9;
}
var _0x465910,
_0xd5e875,
_0x556c8d = function (_0x3d0df2, _0x17b610) {
return (_0x556c8d = Object["setPrototypeOf"] || {
"__proto__": []
} instanceof Array && function (_0x2cf4e9, _0x556f9f) {
_0x2cf4e9["__proto__"] = _0x556f9f;
} || function (_0x13aece, _0x3bc240) {
for (var _0x3ee4b8 in _0x3bc240) _0x3bc240["hasOwnProperty"](_0x3ee4b8) && (_0x13aece = _0x3bc240);
})(_0x3d0df2, _0x17b610);
},
_0x5a02a1 = {
"decode": function (_0xb9450d) {
var _0xed6233;
if (undefined === _0xd5e875) {
var _0x4250e6 = "= \f\n\r\t \u2028\u2029";
for (_0xd5e875 = Object["create"](null), _0xed6233 = 0; _0xed6233 < 64; ++_0xed6233) _0xd5e875["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"["charAt"](_0xed6233)] = _0xed6233;
for (_0xed6233 = 0; _0xed6233 < _0x4250e6["length"]; ++_0xed6233) _0xd5e875(_0xed6233)] = -1;
}
var _0x327d03 = [],
_0xde2f63 = 0,
_0x5e70c2 = 0;
for (_0xed6233 = 0; _0xed6233 < _0xb9450d["length"]; ++_0xed6233) {
var _0x1772b4 = _0xb9450d["charAt"](_0xed6233);
if ("=" == _0x1772b4) {
break;
}
if (-1 != (_0x1772b4 = _0xd5e875)) {
if (undefined === _0x1772b4) {
throw new Error("Illegal character at offset " + _0xed6233);
}
_0xde2f63 |= _0x1772b4, 4 <= ++_0x5e70c2 ? (_0x327d03] = _0xde2f63 >> 16, _0x327d03] = _0xde2f63 >> 8 & 255, _0x327d03] = 255 & _0xde2f63, _0x5e70c2 = _0xde2f63 = 0) : _0xde2f63 <<= 6;
}
}
switch (_0x5e70c2) {
case 1:
throw new Error("Base64 encoding incomplete: at least 2 bits missing");
case 2:
_0x327d03] = _0xde2f63 >> 10;
break;
case 3:
_0x327d03] = _0xde2f63 >> 16, _0x327d03] = _0xde2f63 >> 8 & 255;
}
return _0x327d03;
},
"re": /-----BEGIN [^-]+-----(+)-----END [^-]+-----|begin-base64[^\n]+\n(+)====/,
"unarmor": function (_0x22af7d) {
var _0x5bdf97 = _0x5a02a1["re"]["exec"](_0x22af7d);
if (_0x5bdf97) {
if (_0x5bdf97) {
_0x22af7d = _0x5bdf97;
} else {
if (!_0x5bdf97) {
throw new Error("RegExp out of sync");
}
_0x22af7d = _0x5bdf97;
}
}
return _0x5a02a1["decode"](_0x22af7d);
}
},
_0x325070 = 10000000000000,
_0x3b9155 = function () {
function _0x5bc042(_0x4edd84) {
this["buf"] = [+_0x4edd84 || 0];
}
return _0x5bc042["prototype"]["mulAdd"] = function (_0x136455, _0x38d44a) {
var _0x25cdbb,
_0x4b209c,
_0x223e40 = this["buf"],
_0x107191 = _0x223e40["length"];
for (_0x25cdbb = 0; _0x25cdbb < _0x107191; ++_0x25cdbb) (_0x4b209c = _0x223e40 * _0x136455 + _0x38d44a) < _0x325070 ? _0x38d44a = 0 : _0x4b209c -= (_0x38d44a = 0 | _0x4b209c / _0x325070) * _0x325070, _0x223e40 = _0x4b209c;
0 < _0x38d44a && (_0x223e40 = _0x38d44a);
}, _0x5bc042["prototype"]["sub"] = function (_0x200f20) {
var _0x458211,
_0x2d10d4,
_0x35886b = this["buf"],
_0x23e1f0 = _0x35886b["length"];
for (_0x458211 = 0; _0x458211 < _0x23e1f0; ++_0x458211) (_0x2d10d4 = _0x35886b - _0x200f20) < 0 ? (_0x2d10d4 += _0x325070, _0x200f20 = 1) : _0x200f20 = 0, _0x35886b = _0x2d10d4;
for (; 0 === _0x35886b - 1];) _0x35886b["pop"]();
}, _0x5bc042["prototype"]["toString"] = function (_0x594d75) {
if (10 != (_0x594d75 || 10)) {
throw new Error("only base 10 is supported");
}
for (var _0x3268ae = this["buf"], _0xb46b04 = _0x3268ae - 1]["toString"](), _0x56a312 = _0x3268ae["length"] - 2; 0 <= _0x56a312; --_0x56a312) _0xb46b04 += (_0x325070 + _0x3268ae)["toString"]()["substring"](1);
return _0xb46b04;
}, _0x5bc042["prototype"]["valueOf"] = function () {
for (var _0x5bc042 = this["buf"], _0x481f52 = 0, _0x15cd06 = _0x5bc042["length"] - 1; 0 <= _0x15cd06; --_0x15cd06) _0x481f52 = _0x481f52 * _0x325070 + _0x5bc042;
return _0x481f52;
}, _0x5bc042["prototype"]["simplify"] = function () {
var _0x5bc042 = this["buf"];
return 1 == _0x5bc042["length"] ? _0x5bc042 : this;
}, _0x5bc042;
}(),
_0x22eb45 = "\u2026",
_0x5a96f4 = /^(\d\d)(0|1)(0|\d|3)(\d|2)(?:(\d)(?:(\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:\d|1)(\d)?)?$/,
_0x256f93 = /^(\d\d\d\d)(0|1)(0|\d|3)(\d|2)(?:(\d)(?:(\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:\d|1)(\d)?)?$/;
function _0x52a054(_0x12d041, _0x24a766) {
return _0x12d041["length"] > _0x24a766 && (_0x12d041 = _0x12d041["substring"](0, _0x24a766) + _0x22eb45), _0x12d041;
}
var _0x10b29a,
_0x6f15d5 = function () {
function _0x22068b(_0x2fd898, _0x383975) {
this["hexDigits"] = "0123456789ABCDEF", _0x2fd898 instanceof _0x22068b ? (this["enc"] = _0x2fd898["enc"], this["pos"] = _0x2fd898["pos"]) : (this["enc"] = _0x2fd898, this["pos"] = _0x383975);
}
return _0x22068b["prototype"]["get"] = function (_0x5823f1) {
if (undefined === _0x5823f1 && (_0x5823f1 = this["pos"]++), _0x5823f1 >= this["enc"]["length"]) {
throw new Error("Requesting byte offset " + _0x5823f1 + " on a stream of length " + this["enc"]["length"]);
}
return "string" == typeof this["enc"] ? this["enc"]["charCodeAt"](_0x5823f1) : this["enc"];
}, _0x22068b["prototype"]["hexByte"] = function (_0x1aab46) {
return this["hexDigits"]["charAt"](_0x1aab46 >> 4 & 15) + this["hexDigits"]["charAt"](15 & _0x1aab46);
}, _0x22068b["prototype"]["hexDump"] = function (_0x1c3cb1, _0x1fb83a, _0x5c0107) {
for (var _0x56bcdb = "", _0x1a5d02 = _0x1c3cb1; _0x1a5d02 < _0x1fb83a; ++_0x1a5d02) if (_0x56bcdb += this["hexByte"](this["get"](_0x1a5d02)), true !== _0x5c0107) {
switch (15 & _0x1a5d02) {
case 7:
_0x56bcdb += "";
break;
case 15:
_0x56bcdb += "\n";
break;
default:
_0x56bcdb += " ";
}
}
return _0x56bcdb;
}, _0x22068b["prototype"]["isASCII"] = function (_0x378015, _0x3fc4f1) {
for (var _0x34a0e8 = _0x378015; _0x34a0e8 < _0x3fc4f1; ++_0x34a0e8) {
var _0x115402 = this["get"](_0x34a0e8);
if (_0x115402 < 32 || 176 < _0x115402) {
return false;
}
}
return true;
}, _0x22068b["prototype"]["parseStringISO"] = function (_0x10ba28, _0x36143f) {
for (var _0x4438c1 = "", _0x30c77d = _0x10ba28; _0x30c77d < _0x36143f; ++_0x30c77d) _0x4438c1 += String["fromCharCode"](this["get"](_0x30c77d));
return _0x4438c1;
}, _0x22068b["prototype"]["parseStringUTF"] = function (_0x12a1ad, _0x268684) {
for (var _0x3f7963 = "", _0x55eef7 = _0x12a1ad; _0x55eef7 < _0x268684;) {
var _0x588802 = this["get"](_0x55eef7++);
_0x3f7963 += _0x588802 < 128 ? String["fromCharCode"](_0x588802) : 191 < _0x588802 && _0x588802 < 224 ? String["fromCharCode"]((31 & _0x588802) << 6 | 63 & this["get"](_0x55eef7++)) : String["fromCharCode"]((15 & _0x588802) << 12 | (63 & this["get"](_0x55eef7++)) << 6 | 63 & this["get"](_0x55eef7++));
}
return _0x3f7963;
}, _0x22068b["prototype"]["parseStringBMP"] = function (_0x2c3465, _0x4f9411) {
for (var _0x5d0426, _0x2f17e7, _0x36c739 = "", _0x221f11 = _0x2c3465; _0x221f11 < _0x4f9411;) _0x5d0426 = this["get"](_0x221f11++), _0x2f17e7 = this["get"](_0x221f11++), _0x36c739 += String["fromCharCode"](_0x5d0426 << 8 | _0x2f17e7);
return _0x36c739;
}, _0x22068b["prototype"]["parseTime"] = function (_0x48e12c, _0xaea7b4, _0x17adc5) {
var _0x3d8dd8 = this["parseStringISO"](_0x48e12c, _0xaea7b4),
_0x3cefb8 = (_0x17adc5 ? _0x5a96f4 : _0x256f93)["exec"](_0x3d8dd8);
return _0x3cefb8 ? (_0x17adc5 && (_0x3cefb8 = +_0x3cefb8, _0x3cefb8 += +_0x3cefb8 < 70 ? 2000 : 1900), _0x3d8dd8 = _0x3cefb8 + "-" + _0x3cefb8 + "-" + _0x3cefb8 + " " + _0x3cefb8, _0x3cefb8 && (_0x3d8dd8 += ":" + _0x3cefb8, _0x3cefb8 && (_0x3d8dd8 += ":" + _0x3cefb8, _0x3cefb8 && (_0x3d8dd8 += "." + _0x3cefb8))), _0x3cefb8 && (_0x3d8dd8 += " UTC", "Z" != _0x3cefb8 && (_0x3d8dd8 += _0x3cefb8, _0x3cefb8 && (_0x3d8dd8 += ":" + _0x3cefb8))), _0x3d8dd8) : "Unrecognized time: " + _0x3d8dd8;
}, _0x22068b["prototype"]["parseInteger"] = function (_0x32b610, _0x35f119) {
for (var _0x2c8e7d, _0x38d373 = this["get"](_0x32b610), _0x13c3f1 = 127 < _0x38d373, _0x29fedd = _0x13c3f1 ? 255 : 0, _0x5726c2 = ""; _0x38d373 == _0x29fedd && ++_0x32b610 < _0x35f119;) _0x38d373 = this["get"](_0x32b610);
if (0 == (_0x2c8e7d = _0x35f119 - _0x32b610)) {
return _0x13c3f1 ? -1 : 0;
}
if (4 < _0x2c8e7d) {
for (_0x5726c2 = _0x38d373, _0x2c8e7d <<= 3; 0 == (128 & (+_0x5726c2 ^ _0x29fedd));) _0x5726c2 = +_0x5726c2 << 1, --_0x2c8e7d;
_0x5726c2 = "(" + _0x2c8e7d + " bit)\n";
}
_0x13c3f1 && (_0x38d373 -= 256);
for (var _0x43f83d = new _0x3b9155(_0x38d373), _0x725f7e = _0x32b610 + 1; _0x725f7e < _0x35f119; ++_0x725f7e) _0x43f83d["mulAdd"](256, this["get"](_0x725f7e));
return _0x5726c2 + _0x43f83d["toString"]();
}, _0x22068b["prototype"]["parseBitString"] = function (_0x584802, _0x125a75, _0x4330aa) {
for (var _0x2b49b7 = this["get"](_0x584802), _0x5a3d66 = "(" + ((_0x125a75 - _0x584802 - 1 << 3) - _0x2b49b7) + " bit)\n", _0x37def6 = "", _0x68b524 = _0x584802 + 1; _0x68b524 < _0x125a75; ++_0x68b524) {
for (var _0x458110 = this["get"](_0x68b524), _0x5edd1e = _0x68b524 == _0x125a75 - 1 ? _0x2b49b7 : 0, _0x44cc33 = 7; _0x5edd1e <= _0x44cc33; --_0x44cc33) _0x37def6 += _0x458110 >> _0x44cc33 & 1 ? "1" : "0";
if (_0x37def6["length"] > _0x4330aa) {
return _0x5a3d66 + _0x52a054(_0x37def6, _0x4330aa);
}
}
return _0x5a3d66 + _0x37def6;
}, _0x22068b["prototype"]["parseOctetString"] = function (_0x3f709b, _0x5249ed, _0xfca96d) {
if (this["isASCII"](_0x3f709b, _0x5249ed)) {
return _0x52a054(this["parseStringISO"](_0x3f709b, _0x5249ed), _0xfca96d);
}
var _0x4063a5 = _0x5249ed - _0x3f709b,
_0x2f9857 = "(" + _0x4063a5 + " byte)\n";
(_0xfca96d /= 2) < _0x4063a5 && (_0x5249ed = _0x3f709b + _0xfca96d);
for (var _0x5a4777 = _0x3f709b; _0x5a4777 < _0x5249ed; ++_0x5a4777) _0x2f9857 += this["hexByte"](this["get"](_0x5a4777));
return _0xfca96d < _0x4063a5 && (_0x2f9857 += _0x22eb45), _0x2f9857;
}, _0x22068b["prototype"]["parseOID"] = function (_0x32a2a6, _0x26433c, _0xe66585) {
for (var _0x3af3a5 = "", _0x109e46 = new _0x3b9155(), _0x10e125 = 0, _0x1b5e95 = _0x32a2a6; _0x1b5e95 < _0x26433c; ++_0x1b5e95) {
var _0x27b0d0 = this["get"](_0x1b5e95);
if (_0x109e46["mulAdd"](128, 127 & _0x27b0d0), _0x10e125 += 7, !(128 & _0x27b0d0)) {
if ("" === _0x3af3a5) {
if ((_0x109e46 = _0x109e46["simplify"]()) instanceof _0x3b9155) {
_0x109e46["sub"](80), _0x3af3a5 = "2." + _0x109e46["toString"]();
} else {
var _0x473690 = _0x109e46 < 80 ? _0x109e46 < 40 ? 0 : 1 : 2;
_0x3af3a5 = _0x473690 + "." + (_0x109e46 - 40 * _0x473690);
}
} else {
_0x3af3a5 += "." + _0x109e46["toString"]();
}
if (_0x3af3a5["length"] > _0xe66585) {
return _0x52a054(_0x3af3a5, _0xe66585);
}
_0x109e46 = new _0x3b9155(), _0x10e125 = 0;
}
}
return 0 < _0x10e125 && (_0x3af3a5 += ".incomplete"), _0x3af3a5;
}, _0x22068b;
}(),
_0x408860 = function () {
function _0x341895(_0x2c0c31, _0x401ea8, _0xbf59c8, _0x1ba541, _0x912511) {
if (!(_0x1ba541 instanceof _0x463aba)) {
throw new Error("Invalid tag value.");
}
this["stream"] = _0x2c0c31, this["header"] = _0x401ea8, this["length"] = _0xbf59c8, this["tag"] = _0x1ba541, this["sub"] = _0x912511;
}
return _0x341895["prototype"]["typeName"] = function () {
switch (this["tag"]["tagClass"]) {
case 0:
switch (this["tag"]["tagNumber"]) {
case 0:
return "EOC";
case 1:
return "BOOLEAN";
case 2:
return "INTEGER";
case 3:
return "BIT_STRING";
case 4:
return "OCTET_STRING";
case 5:
return "NULL";
case 6:
return "OBJECT_IDENTIFIER";
case 7:
return "ObjectDescriptor";
case 8:
return "EXTERNAL";
case 9:
return "REAL";
case 10:
return "ENUMERATED";
case 11:
return "EMBEDDED_PDV";
case 12:
return "UTF8String";
case 16:
return "SEQUENCE";
case 17:
return "SET";
case 18:
return "NumericString";
case 19:
return "PrintableString";
case 20:
return "TeletexString";
case 21:
return "VideotexString";
case 22:
return "IA5String";
case 23:
return "UTCTime";
case 24:
return "GeneralizedTime";
case 25:
return "GraphicString";
case 26:
return "VisibleString";
case 27:
return "GeneralString";
case 28:
return "UniversalString";
case 30:
return "BMPString";
}
return "Universal_" + this["tag"]["tagNumber"]["toString"]();
case 1:
return "Application_" + this["tag"]["tagNumber"]["toString"]();
case 2:
return "[" + this["tag"]["tagNumber"]["toString"]() + "]";
case 3:
return "Private_" + this["tag"]["tagNumber"]["toString"]();
}
}, _0x341895["prototype"]["content"] = function (_0x6e4ee1) {
if (undefined === this["tag"]) {
return null;
}
undefined === _0x6e4ee1 && (_0x6e4ee1 = 1 / 0);
var _0x5b9d1b = this["posContent"](),
_0x1baaf9 = Math["abs"](this["length"]);
if (!this["tag"]["isUniversal"]()) {
return null !== this["sub"] ? "(" + this["sub"]["length"] + " elem)" : this["stream"]["parseOctetString"](_0x5b9d1b, _0x5b9d1b + _0x1baaf9, _0x6e4ee1);
}
switch (this["tag"]["tagNumber"]) {
case 1:
return 0 === this["stream"]["get"](_0x5b9d1b) ? "false" : "true";
case 2:
return this["stream"]["parseInteger"](_0x5b9d1b, _0x5b9d1b + _0x1baaf9);
case 3:
return this["sub"] ? "(" + this["sub"]["length"] + " elem)" : this["stream"]["parseBitString"](_0x5b9d1b, _0x5b9d1b + _0x1baaf9, _0x6e4ee1);
case 4:
return this["sub"] ? "(" + this["sub"]["length"] + " elem)" : this["stream"]["parseOctetString"](_0x5b9d1b, _0x5b9d1b + _0x1baaf9, _0x6e4ee1);
case 6:
return this["stream"]["parseOID"](_0x5b9d1b, _0x5b9d1b + _0x1baaf9, _0x6e4ee1);
case 16:
case 17:
return null !== this["sub"] ? "(" + this["sub"]["length"] + " elem)" : "(no elem)";
case 12:
return _0x52a054(this["stream"]["parseStringUTF"](_0x5b9d1b, _0x5b9d1b + _0x1baaf9), _0x6e4ee1);
case 18:
case 19:
case 20:
case 21:
case 22:
case 26:
return _0x52a054(this["stream"]["parseStringISO"](_0x5b9d1b, _0x5b9d1b + _0x1baaf9), _0x6e4ee1);
case 30:
return _0x52a054(this["stream"]["parseStringBMP"](_0x5b9d1b, _0x5b9d1b + _0x1baaf9), _0x6e4ee1);
case 23:
case 24:
return this["stream"]["parseTime"](_0x5b9d1b, _0x5b9d1b + _0x1baaf9, 23 == this["tag"]["tagNumber"]);
}
return null;
}, _0x341895["prototype"]["toString"] = function () {
return this["typeName"]() + "@" + this["stream"]["pos"] + " + ",length:" + this["length"] + ",sub:" + (null === this["sub"] ? "null" : this["sub"]["length"]) + "]";
}, _0x341895["prototype"]["toPrettyString"] = function (_0x3682c4) {
undefined === _0x3682c4 && (_0x3682c4 = "");
var _0x42fe60 = _0x3682c4 + this["typeName"]() + " @" + this["stream"]["pos"];
if (0 <= this["length"] && (_0x42fe60 += "+"), _0x42fe60 += this["length"], this["tag"]["tagConstructed"] ? _0x42fe60 += " (constructed)" : !this["tag"]["isUniversal"]() || 3 != this["tag"]["tagNumber"] && 4 != this["tag"]["tagNumber"] || null === this["sub"] || (_0x42fe60 += " (encapsulates)"), _0x42fe60 += "\n", null !== this["sub"]) {
_0x3682c4 += "";
for (var _0x3aa62e = 0, _0x1a1999 = this["sub"]["length"]; _0x3aa62e < _0x1a1999; ++_0x3aa62e) _0x42fe60 += this["sub"]["toPrettyString"](_0x3682c4);
}
return _0x42fe60;
}, _0x341895["prototype"]["posStart"] = function () {
return this["stream"]["pos"];
}, _0x341895["prototype"]["posContent"] = function () {
return this["stream"]["pos"] + this["header"];
}, _0x341895["prototype"]["posEnd"] = function () {
return this["stream"]["pos"] + this["header"] + Math["abs"](this["length"]);
}, _0x341895["prototype"]["toHexString"] = function () {
return this["stream"]["hexDump"](this["posStart"](), this["posEnd"](), true);
}, _0x341895["decodeLength"] = function (_0x2dc1ea) {
var _0x305e45 = _0x2dc1ea["get"](),
_0x3cf1d5 = 127 & _0x305e45;
if (_0x3cf1d5 == _0x305e45) {
return _0x3cf1d5;
}
if (6 < _0x3cf1d5) {
throw new Error("Length over 48 bits not supported at position " + (_0x2dc1ea["pos"] - 1));
}
if (0 === _0x3cf1d5) {
return null;
}
for (var _0x29d41e = _0x305e45 = 0; _0x29d41e < _0x3cf1d5; ++_0x29d41e) _0x305e45 = 256 * _0x305e45 + _0x2dc1ea["get"]();
return _0x305e45;
}, _0x341895["prototype"]["getHexStringValue"] = function () {
return this["toHexString"]()["substr"](2 * this["header"], 2 * this["length"]);
}, _0x341895["decode"] = function (_0xb52542) {
var _0x353bc2;
_0x353bc2 = _0xb52542 instanceof _0x6f15d5 ? _0xb52542 : new _0x6f15d5(_0xb52542, 0);
var _0x811f = new _0x6f15d5(_0x353bc2),
_0x3cc364 = new _0x463aba(_0x353bc2),
_0x32ebe8 = _0x341895["decodeLength"](_0x353bc2),
_0x701f57 = _0x353bc2["pos"],
_0x40bafc = _0x701f57 - _0x811f["pos"],
_0x32b6cf = null,
_0x445e77 = function () {
var _0xb52542 = [];
if (null !== _0x32ebe8) {
for (var _0x196f12 = _0x701f57 + _0x32ebe8; _0x353bc2["pos"] < _0x196f12;) _0xb52542] = _0x341895["decode"](_0x353bc2);
if (_0x353bc2["pos"] != _0x196f12) {
throw new Error("Content size is not correct for container starting at offset " + _0x701f57);
}
} else {
try {
for (;;) {
var _0x1757b5 = _0x341895["decode"](_0x353bc2);
if (_0x1757b5["tag"]["isEOC"]()) {
break;
}
_0xb52542] = _0x1757b5;
}
_0x32ebe8 = _0x701f57 - _0x353bc2["pos"];
} catch (_0x4a78b4) {
throw new Error("Exception while decoding undefined length content: " + _0x4a78b4);
}
}
return _0xb52542;
};
if (_0x3cc364["tagConstructed"]) {
_0x32b6cf = _0x445e77();
} else {
if (_0x3cc364["isUniversal"]() && (3 == _0x3cc364["tagNumber"] || 4 == _0x3cc364["tagNumber"])) {
try {
if (3 == _0x3cc364["tagNumber"] && 0 != _0x353bc2["get"]()) {
throw new Error("BIT STRINGs with unused bits cannot encapsulate.");
}
_0x32b6cf = _0x445e77();
for (var _0x54cfa8 = 0; _0x54cfa8 < _0x32b6cf["length"]; ++_0x54cfa8) if (_0x32b6cf["tag"]["isEOC"]()) {
throw new Error("EOC is not supposed to be actual content.");
}
} catch (_0x29f704) {
_0x32b6cf = null;
}
}
}
if (null === _0x32b6cf) {
if (null === _0x32ebe8) {
throw new Error("We can't skip over an invalid tag with undefined length at offset " + _0x701f57);
}
_0x353bc2["pos"] = _0x701f57 + Math["abs"](_0x32ebe8);
}
return new _0x341895(_0x811f, _0x40bafc, _0x32ebe8, _0x3cc364, _0x32b6cf);
}, _0x341895;
}(),
_0x463aba = function () {
function _0x4eb230(_0x4cc1b4) {
var _0x2513f2 = _0x4cc1b4["get"]();
if (this["tagClass"] = _0x2513f2 >> 6, this["tagConstructed"] = 0 != (32 & _0x2513f2), this["tagNumber"] = 31 & _0x2513f2, 31 == this["tagNumber"]) {
for (var _0x1e3706 = new _0x3b9155(); _0x2513f2 = _0x4cc1b4["get"](), _0x1e3706["mulAdd"](128, 127 & _0x2513f2), 128 & _0x2513f2;) {}
this["tagNumber"] = _0x1e3706["simplify"]();
}
}
return _0x4eb230["prototype"]["isUniversal"] = function () {
return 0 === this["tagClass"];
}, _0x4eb230["prototype"]["isEOC"] = function () {
return 0 === this["tagClass"] && 0 === this["tagNumber"];
}, _0x4eb230;
}(),
_0x16c700 = ,
_0x1777d0 = 67108864 / _0x16c700 - 1],
_0x2935af = function () {
function _0x46cc13(_0x3c1c1e, _0x381598, _0x832dc7) {
null != _0x3c1c1e && ("number" == typeof _0x3c1c1e ? this["fromNumber"](_0x3c1c1e, _0x381598, _0x832dc7) : this["fromString"](_0x3c1c1e, null == _0x381598 && "string" != typeof _0x3c1c1e ? 256 : _0x381598));
}
return _0x46cc13["prototype"]["toString"] = function (_0x10c0f4) {
if (this["s"] < 0) {
return "-" + this["negate"]()["toString"](_0x10c0f4);
}
var _0x2fc7ac;
if (16 == _0x10c0f4) {
_0x2fc7ac = 4;
} else {
if (8 == _0x10c0f4) {
_0x2fc7ac = 3;
} else {
if (2 == _0x10c0f4) {
_0x2fc7ac = 1;
} else {
if (32 == _0x10c0f4) {
_0x2fc7ac = 5;
} else {
if (4 != _0x10c0f4) {
return this["toRadix"](_0x10c0f4);
}
_0x2fc7ac = 2;
}
}
}
}
var _0x8d32c1,
_0x5d5f39 = (1 << _0x2fc7ac) - 1,
_0x39cdad = false,
_0x4d768c = "",
_0x4073a9 = this["t"],
_0x5e3992 = this["DB"] - _0x4073a9 * this["DB"] % _0x2fc7ac;
if (0 < _0x4073a9--) {
for (_0x5e3992 < this["DB"] && 0 < (_0x8d32c1 = this >> _0x5e3992) && (_0x39cdad = true, _0x4d768c = _0x4e31bb(_0x8d32c1)); 0 <= _0x4073a9;) _0x5e3992 < _0x2fc7ac ? (_0x8d32c1 = (this & (1 << _0x5e3992) - 1) << _0x2fc7ac - _0x5e3992, _0x8d32c1 |= this[--_0x4073a9] >> (_0x5e3992 += this["DB"] - _0x2fc7ac)) : (_0x8d32c1 = this >> (_0x5e3992 -= _0x2fc7ac) & _0x5d5f39, _0x5e3992 <= 0 && (_0x5e3992 += this["DB"], --_0x4073a9)), 0 < _0x8d32c1 && (_0x39cdad = true), _0x39cdad && (_0x4d768c += _0x4e31bb(_0x8d32c1));
}
return _0x39cdad ? _0x4d768c : "0";
}, _0x46cc13["prototype"]["negate"] = function () {
var _0x5ae427 = _0x425021();
return _0x46cc13["ZERO"]["subTo"](this, _0x5ae427), _0x5ae427;
}, _0x46cc13["prototype"]["abs"] = function () {
return this["s"] < 0 ? this["negate"]() : this;
}, _0x46cc13["prototype"]["compareTo"] = function (_0x269c23) {
var _0x46545c = this["s"] - _0x269c23["s"];
if (0 != _0x46545c) {
return _0x46545c;
}
var _0xa6017d = this["t"];
if (0 != (_0x46545c = _0xa6017d - _0x269c23["t"])) {
return this["s"] < 0 ? -_0x46545c : _0x46545c;
}
for (; 0 <= --_0xa6017d;) if (0 != (_0x46545c = this - _0x269c23)) {
return _0x46545c;
}
return 0;
}, _0x46cc13["prototype"]["bitLength"] = function () {
return this["t"] <= 0 ? 0 : this["DB"] * (this["t"] - 1) + _0x312495(this - 1] ^ this["s"] & this["DM"]);
}, _0x46cc13["prototype"]["mod"] = function (_0x4c88c2) {
var _0x26f4a3 = _0x425021();
return this["abs"]()["divRemTo"](_0x4c88c2, null, _0x26f4a3), this["s"] < 0 && 0 < _0x26f4a3["compareTo"](_0x46cc13["ZERO"]) && _0x4c88c2["subTo"](_0x26f4a3, _0x26f4a3), _0x26f4a3;
}, _0x46cc13["prototype"]["modPowInt"] = function (_0x22576f, _0x14fc0d) {
var _0xc38aa2;
return _0xc38aa2 = _0x22576f < 256 || _0x14fc0d["isEven"]() ? new _0x3d96c6(_0x14fc0d) : new _0x4cb267(_0x14fc0d), this["exp"](_0x22576f, _0xc38aa2);
}, _0x46cc13["prototype"]["clone"] = function () {
var _0x46cc13 = _0x425021();
return this["copyTo"](_0x46cc13), _0x46cc13;
}, _0x46cc13["prototype"]["intValue"] = function () {
if (this["s"] < 0) {
if (1 == this["t"]) {
return this - this["DV"];
}
if (0 == this["t"]) {
return -1;
}
} else {
if (1 == this["t"]) {
return this;
}
if (0 == this["t"]) {
return 0;
}
}
return (this & (1 << 32 - this["DB"]) - 1) << this["DB"] | this;
}, _0x46cc13["prototype"]["byteValue"] = function () {
return 0 == this["t"] ? this["s"] : this << 24 >> 24;
}, _0x46cc13["prototype"]["shortValue"] = function () {
return 0 == this["t"] ? this["s"] : this << 16 >> 16;
}, _0x46cc13["prototype"]["signum"] = function () {
return this["s"] < 0 ? -1 : this["t"] <= 0 || 1 == this["t"] && this <= 0 ? 0 : 1;
}, _0x46cc13["prototype"]["toByteArray"] = function () {
var _0x46cc13 = this["t"],
_0x342052 = [];
_0x342052 = this["s"];
var _0x1304e5,
_0x3d47a8 = this["DB"] - _0x46cc13 * this["DB"] % 8,
_0x58ab94 = 0;
if (0 < _0x46cc13--) {
for (_0x3d47a8 < this["DB"] && (_0x1304e5 = this >> _0x3d47a8) != (this["s"] & this["DM"]) >> _0x3d47a8 && (_0x342052 = _0x1304e5 | this["s"] << this["DB"] - _0x3d47a8); 0 <= _0x46cc13;) _0x3d47a8 < 8 ? (_0x1304e5 = (this & (1 << _0x3d47a8) - 1) << 8 - _0x3d47a8, _0x1304e5 |= this[--_0x46cc13] >> (_0x3d47a8 += this["DB"] - 8)) : (_0x1304e5 = this >> (_0x3d47a8 -= 8) & 255, _0x3d47a8 <= 0 && (_0x3d47a8 += this["DB"], --_0x46cc13)), 0 != (128 & _0x1304e5) && (_0x1304e5 |= -256), 0 == _0x58ab94 && (128 & this["s"]) != (128 & _0x1304e5) && ++_0x58ab94, (0 < _0x58ab94 || _0x1304e5 != this["s"]) && (_0x342052 = _0x1304e5);
}
return _0x342052;
}, _0x46cc13["prototype"]["equals"] = function (_0x1b1c5e) {
return 0 == this["compareTo"](_0x1b1c5e);
}, _0x46cc13["prototype"]["min"] = function (_0x4aada4) {
return this["compareTo"](_0x4aada4) < 0 ? this : _0x4aada4;
}, _0x46cc13["prototype"]["max"] = function (_0xf2be4f) {
return 0 < this["compareTo"](_0xf2be4f) ? this : _0xf2be4f;
}, _0x46cc13["prototype"]["and"] = function (_0x1c23d9) {
var _0x3109cd = _0x425021();
return this["bitwiseTo"](_0x1c23d9, _0x4273b2, _0x3109cd), _0x3109cd;
}, _0x46cc13["prototype"]["or"] = function (_0x591665) {
var _0x51740a = _0x425021();
return this["bitwiseTo"](_0x591665, _0xfb232b, _0x51740a), _0x51740a;
}, _0x46cc13["prototype"]["xor"] = function (_0x317049) {
var _0x2cf3b9 = _0x425021();
return this["bitwiseTo"](_0x317049, _0x3eba95, _0x2cf3b9), _0x2cf3b9;
}, _0x46cc13["prototype"]["andNot"] = function (_0x1cfd77) {
var _0x314e07 = _0x425021();
return this["bitwiseTo"](_0x1cfd77, _0x1e8fa0, _0x314e07), _0x314e07;
}, _0x46cc13["prototype"]["not"] = function () {
for (var _0x46cc13 = _0x425021(), _0x5605c0 = 0; _0x5605c0 < this["t"]; ++_0x5605c0) _0x46cc13 = this["DM"] & ~this;
return _0x46cc13["t"] = this["t"], _0x46cc13["s"] = ~this["s"], _0x46cc13;
}, _0x46cc13["prototype"]["shiftLeft"] = function (_0x2a3de4) {
var _0x4278c1 = _0x425021();
return _0x2a3de4 < 0 ? this["rShiftTo"](-_0x2a3de4, _0x4278c1) : this["lShiftTo"](_0x2a3de4, _0x4278c1), _0x4278c1;
}, _0x46cc13["prototype"]["shiftRight"] = function (_0x38e950) {
var _0x4a2a69 = _0x425021();
return _0x38e950 < 0 ? this["lShiftTo"](-_0x38e950, _0x4a2a69) : this["rShiftTo"](_0x38e950, _0x4a2a69), _0x4a2a69;
}, _0x46cc13["prototype"]["getLowestSetBit"] = function () {
for (var _0x46cc13 = 0; _0x46cc13 < this["t"]; ++_0x46cc13) if (0 != this) {
return _0x46cc13 * this["DB"] + _0x525b4a(this);
}
return this["s"] < 0 ? this["t"] * this["DB"] : -1;
}, _0x46cc13["prototype"]["bitCount"] = function () {
for (var _0x46cc13 = 0, _0x2a78c4 = this["s"] & this["DM"], _0x35f563 = 0; _0x35f563 < this["t"]; ++_0x35f563) _0x46cc13 += _0xbc2d31(this ^ _0x2a78c4);
return _0x46cc13;
}, _0x46cc13["prototype"]["testBit"] = function (_0x383e28) {
var _0x49e0fb = Math["floor"](_0x383e28 / this["DB"]);
return _0x49e0fb >= this["t"] ? 0 != this["s"] : 0 != (this & 1 << _0x383e28 % this["DB"]);
}, _0x46cc13["prototype"]["setBit"] = function (_0x4a7b8f) {
return this["changeBit"](_0x4a7b8f, _0xfb232b);
}, _0x46cc13["prototype"]["clearBit"] = function (_0x24bb4b) {
return this["changeBit"](_0x24bb4b, _0x1e8fa0);
}, _0x46cc13["prototype"]["flipBit"] = function (_0x5a7e36) {
return this["changeBit"](_0x5a7e36, _0x3eba95);
}, _0x46cc13["prototype"]["add"] = function (_0x14f082) {
var _0x3d6724 = _0x425021();
return this["addTo"](_0x14f082, _0x3d6724), _0x3d6724;
}, _0x46cc13["prototype"]["subtract"] = function (_0x3965b2) {
var _0x1977d7 = _0x425021();
return this["subTo"](_0x3965b2, _0x1977d7), _0x1977d7;
}, _0x46cc13["prototype"]["multiply"] = function (_0x56db7f) {
var _0x4fbf4a = _0x425021();
return this["multiplyTo"](_0x56db7f, _0x4fbf4a), _0x4fbf4a;
}, _0x46cc13["prototype"]["divide"] = function (_0x29845c) {
var _0x3b7914 = _0x425021();
return this["divRemTo"](_0x29845c, _0x3b7914, null), _0x3b7914;
}, _0x46cc13["prototype"]["remainder"] = function (_0x31a121) {
var _0x532485 = _0x425021();
return this["divRemTo"](_0x31a121, null, _0x532485), _0x532485;
}, _0x46cc13["prototype"]["divideAndRemainder"] = function (_0x2c81d5) {
var _0x21ad99 = _0x425021(),
_0x5b6b76 = _0x425021();
return this["divRemTo"](_0x2c81d5, _0x21ad99, _0x5b6b76), ;
}, _0x46cc13["prototype"]["modPow"] = function (_0x4b0895, _0x4004b5) {
var _0x5966fd,
_0x426897,
_0x3b52dc = _0x4b0895["bitLength"](),
_0x172a2d = _0x46df6e(1);
if (_0x3b52dc <= 0) {
return _0x172a2d;
}
_0x5966fd = _0x3b52dc < 18 ? 1 : _0x3b52dc < 48 ? 3 : _0x3b52dc < 144 ? 4 : _0x3b52dc < 768 ? 5 : 6, _0x426897 = _0x3b52dc < 8 ? new _0x3d96c6(_0x4004b5) : _0x4004b5["isEven"]() ? new _0x51d9ef(_0x4004b5) : new _0x4cb267(_0x4004b5);
var _0x55a302 = [],
_0x4e6e4e = 3,
_0x492603 = _0x5966fd - 1,
_0x1aa350 = (1 << _0x5966fd) - 1;
if (_0x55a302 = _0x426897["convert"](this), 1 < _0x5966fd) {
var _0x42ae20 = _0x425021();
for (_0x426897["sqrTo"](_0x55a302, _0x42ae20); _0x4e6e4e <= _0x1aa350;) _0x55a302 = _0x425021(), _0x426897["mulTo"](_0x42ae20, _0x55a302, _0x55a302), _0x4e6e4e += 2;
}
var _0x3f5c04,
_0x2c46b3,
_0x21d1c7 = _0x4b0895["t"] - 1,
_0x3fd0a7 = true,
_0x57d3b0 = _0x425021();
for (_0x3b52dc = _0x312495(_0x4b0895) - 1; 0 <= _0x21d1c7;) {
for (_0x492603 <= _0x3b52dc ? _0x3f5c04 = _0x4b0895 >> _0x3b52dc - _0x492603 & _0x1aa350 : (_0x3f5c04 = (_0x4b0895 & (1 << _0x3b52dc + 1) - 1) << _0x492603 - _0x3b52dc, 0 < _0x21d1c7 && (_0x3f5c04 |= _0x4b0895 >> this["DB"] + _0x3b52dc - _0x492603)), _0x4e6e4e = _0x5966fd; 0 == (1 & _0x3f5c04);) _0x3f5c04 >>= 1, --_0x4e6e4e;
if ((_0x3b52dc -= _0x4e6e4e) < 0 && (_0x3b52dc += this["DB"], --_0x21d1c7), _0x3fd0a7) {
_0x55a302["copyTo"](_0x172a2d), _0x3fd0a7 = false;
} else {
for (; 1 < _0x4e6e4e;) _0x426897["sqrTo"](_0x172a2d, _0x57d3b0), _0x426897["sqrTo"](_0x57d3b0, _0x172a2d), _0x4e6e4e -= 2;
0 < _0x4e6e4e ? _0x426897["sqrTo"](_0x172a2d, _0x57d3b0) : (_0x2c46b3 = _0x172a2d, _0x172a2d = _0x57d3b0, _0x57d3b0 = _0x2c46b3), _0x426897["mulTo"](_0x57d3b0, _0x55a302, _0x172a2d);
}
for (; 0 <= _0x21d1c7 && 0 == (_0x4b0895 & 1 << _0x3b52dc);) _0x426897["sqrTo"](_0x172a2d, _0x57d3b0), _0x2c46b3 = _0x172a2d, _0x172a2d = _0x57d3b0, _0x57d3b0 = _0x2c46b3, --_0x3b52dc < 0 && (_0x3b52dc = this["DB"] - 1, --_0x21d1c7);
}
return _0x426897["revert"](_0x172a2d);
}, _0x46cc13["prototype"]["modInverse"] = function (_0x4090e0) {
var _0x2a8c7f = _0x4090e0["isEven"]();
if (this["isEven"]() && _0x2a8c7f || 0 == _0x4090e0["signum"]()) {
return _0x46cc13["ZERO"];
}
for (var _0x5d781d = _0x4090e0["clone"](), _0x128b08 = this["clone"](), _0x3f6520 = _0x46df6e(1), _0x4cefba = _0x46df6e(0), _0x46a6be = _0x46df6e(0), _0x5a1244 = _0x46df6e(1); 0 != _0x5d781d["signum"]();) {
for (; _0x5d781d["isEven"]();) _0x5d781d["rShiftTo"](1, _0x5d781d), _0x2a8c7f ? (_0x3f6520["isEven"]() && _0x4cefba["isEven"]() || (_0x3f6520["addTo"](this, _0x3f6520), _0x4cefba["subTo"](_0x4090e0, _0x4cefba)), _0x3f6520["rShiftTo"](1, _0x3f6520)) : _0x4cefba["isEven"]() || _0x4cefba["subTo"](_0x4090e0, _0x4cefba), _0x4cefba["rShiftTo"](1, _0x4cefba);
for (; _0x128b08["isEven"]();) _0x128b08["rShiftTo"](1, _0x128b08), _0x2a8c7f ? (_0x46a6be["isEven"]() && _0x5a1244["isEven"]() || (_0x46a6be["addTo"](this, _0x46a6be), _0x5a1244["subTo"](_0x4090e0, _0x5a1244)), _0x46a6be["rShiftTo"](1, _0x46a6be)) : _0x5a1244["isEven"]() || _0x5a1244["subTo"](_0x4090e0, _0x5a1244), _0x5a1244["rShiftTo"](1, _0x5a1244);
0 <= _0x5d781d["compareTo"](_0x128b08) ? (_0x5d781d["subTo"](_0x128b08, _0x5d781d), _0x2a8c7f && _0x3f6520["subTo"](_0x46a6be, _0x3f6520), _0x4cefba["subTo"](_0x5a1244, _0x4cefba)) : (_0x128b08["subTo"](_0x5d781d, _0x128b08), _0x2a8c7f && _0x46a6be["subTo"](_0x3f6520, _0x46a6be), _0x5a1244["subTo"](_0x4cefba, _0x5a1244));
}
return 0 != _0x128b08["compareTo"](_0x46cc13["ONE"]) ? _0x46cc13["ZERO"] : 0 <= _0x5a1244["compareTo"](_0x4090e0) ? _0x5a1244["subtract"](_0x4090e0) : _0x5a1244["signum"]() < 0 ? (_0x5a1244["addTo"](_0x4090e0, _0x5a1244), _0x5a1244["signum"]() < 0 ? _0x5a1244["add"](_0x4090e0) : _0x5a1244) : _0x5a1244;
}, _0x46cc13["prototype"]["pow"] = function (_0x5971fc) {
return this["exp"](_0x5971fc, new _0x24d53a());
}, _0x46cc13["prototype"]["gcd"] = function (_0x3b294d) {
var _0x3228f0 = this["s"] < 0 ? this["negate"]() : this["clone"](),
_0x4d6175 = _0x3b294d["s"] < 0 ? _0x3b294d["negate"]() : _0x3b294d["clone"]();
if (_0x3228f0["compareTo"](_0x4d6175) < 0) {
var _0x36d4a0 = _0x3228f0;
_0x3228f0 = _0x4d6175, _0x4d6175 = _0x36d4a0;
}
var _0x1836f7 = _0x3228f0["getLowestSetBit"](),
_0x23d7c4 = _0x4d6175["getLowestSetBit"]();
if (_0x23d7c4 < 0) {
return _0x3228f0;
}
for (_0x1836f7 < _0x23d7c4 && (_0x23d7c4 = _0x1836f7), 0 < _0x23d7c4 && (_0x3228f0["rShiftTo"](_0x23d7c4, _0x3228f0), _0x4d6175["rShiftTo"](_0x23d7c4, _0x4d6175)); 0 < _0x3228f0["signum"]();) 0 < (_0x1836f7 = _0x3228f0["getLowestSetBit"]()) && _0x3228f0["rShiftTo"](_0x1836f7, _0x3228f0), 0 < (_0x1836f7 = _0x4d6175["getLowestSetBit"]()) && _0x4d6175["rShiftTo"](_0x1836f7, _0x4d6175), 0 <= _0x3228f0["compareTo"](_0x4d6175) ? (_0x3228f0["subTo"](_0x4d6175, _0x3228f0), _0x3228f0["rShiftTo"](1, _0x3228f0)) : (_0x4d6175["subTo"](_0x3228f0, _0x4d6175), _0x4d6175["rShiftTo"](1, _0x4d6175));
return 0 < _0x23d7c4 && _0x4d6175["lShiftTo"](_0x23d7c4, _0x4d6175), _0x4d6175;
}, _0x46cc13["prototype"]["isProbablePrime"] = function (_0x5c47f2) {
var _0x2de4ba,
_0x55b63f = this["abs"]();
if (1 == _0x55b63f["t"] && _0x55b63f <= _0x16c700 - 1]) {
for (_0x2de4ba = 0; _0x2de4ba < _0x16c700["length"]; ++_0x2de4ba) if (_0x55b63f == _0x16c700) {
return true;
}
return false;
}
if (_0x55b63f["isEven"]()) {
return false;
}
for (_0x2de4ba = 1; _0x2de4ba < _0x16c700["length"];) {
for (var _0x4c925d = _0x16c700, _0x1a3d2e = _0x2de4ba + 1; _0x1a3d2e < _0x16c700["length"] && _0x4c925d < _0x1777d0;) _0x4c925d *= _0x16c700;
for (_0x4c925d = _0x55b63f["modInt"](_0x4c925d); _0x2de4ba < _0x1a3d2e;) if (_0x4c925d % _0x16c700 == 0) {
return false;
}
}
return _0x55b63f["millerRabin"](_0x5c47f2);
}, _0x46cc13["prototype"]["copyTo"] = function (_0x2cbf8b) {
for (var _0x11be19 = this["t"] - 1; 0 <= _0x11be19; --_0x11be19) _0x2cbf8b = this;
_0x2cbf8b["t"] = this["t"], _0x2cbf8b["s"] = this["s"];
}, _0x46cc13["prototype"]["fromInt"] = function (_0x40577b) {
this["t"] = 1, this["s"] = _0x40577b < 0 ? -1 : 0, 0 < _0x40577b ? this = _0x40577b : _0x40577b < -1 ? this = _0x40577b + this["DV"] : this["t"] = 0;
}, _0x46cc13["prototype"]["fromString"] = function (_0x46fefe, _0x46bd09) {
var _0x423836;
if (16 == _0x46bd09) {
_0x423836 = 4;
} else {
if (8 == _0x46bd09) {
_0x423836 = 3;
} else {
if (256 == _0x46bd09) {
_0x423836 = 8;
} else {
if (2 == _0x46bd09) {
_0x423836 = 1;
} else {
if (32 == _0x46bd09) {
_0x423836 = 5;
} else {
if (4 != _0x46bd09) {
return undefined;
}
_0x423836 = 2;
}
}
}
}
}
this["t"] = 0, this["s"] = 0;
for (var _0x2203c8 = _0x46fefe["length"], _0x397288 = false, _0x258379 = 0; 0 <= --_0x2203c8;) {
var _0xa341c7 = 8 == _0x423836 ? 255 & +_0x46fefe : _0x1ea6d1(_0x46fefe, _0x2203c8);
_0xa341c7 < 0 ? "-" == _0x46fefe["charAt"](_0x2203c8) && (_0x397288 = true) : (_0x397288 = false, 0 == _0x258379 ? this++] = _0xa341c7 : _0x258379 + _0x423836 > this["DB"] ? (this - 1] |= (_0xa341c7 & (1 << this["DB"] - _0x258379) - 1) << _0x258379, this++] = _0xa341c7 >> this["DB"] - _0x258379) : this - 1] |= _0xa341c7 << _0x258379, (_0x258379 += _0x423836) >= this["DB"] && (_0x258379 -= this["DB"]));
}
8 == _0x423836 && 0 != (128 & +_0x46fefe) && (this["s"] = -1, 0 < _0x258379 && (this - 1] |= (1 << this["DB"] - _0x258379) - 1 << _0x258379)), this["clamp"](), _0x397288 && _0x46cc13["ZERO"]["subTo"](this, this);
}, _0x46cc13["prototype"]["clamp"] = function () {
for (var _0x46cc13 = this["s"] & this["DM"]; 0 < this["t"] && this - 1] == _0x46cc13;) --this["t"];
}, _0x46cc13["prototype"]["dlShiftTo"] = function (_0x170a15, _0x16346a) {
var _0x2078d2;
for (_0x2078d2 = this["t"] - 1; 0 <= _0x2078d2; --_0x2078d2) _0x16346a = this;
for (_0x2078d2 = _0x170a15 - 1; 0 <= _0x2078d2; --_0x2078d2) _0x16346a = 0;
_0x16346a["t"] = this["t"] + _0x170a15, _0x16346a["s"] = this["s"];
}, _0x46cc13["prototype"]["drShiftTo"] = function (_0x300a63, _0x6b0894) {
for (var _0x3a54fe = _0x300a63; _0x3a54fe < this["t"]; ++_0x3a54fe) _0x6b0894 = this;
_0x6b0894["t"] = Math["max"](this["t"] - _0x300a63, 0), _0x6b0894["s"] = this["s"];
}, _0x46cc13["prototype"]["lShiftTo"] = function (_0x273a7f, _0x593c18) {
for (var _0x31a918 = _0x273a7f % this["DB"], _0x4f686b = this["DB"] - _0x31a918, _0xd8e230 = (1 << _0x4f686b) - 1, _0x51bb49 = Math["floor"](_0x273a7f / this["DB"]), _0x5b7ef3 = this["s"] << _0x31a918 & this["DM"], _0x1c599f = this["t"] - 1; 0 <= _0x1c599f; --_0x1c599f) _0x593c18 = this >> _0x4f686b | _0x5b7ef3, _0x5b7ef3 = (this & _0xd8e230) << _0x31a918;
for (_0x1c599f = _0x51bb49 - 1; 0 <= _0x1c599f; --_0x1c599f) _0x593c18 = 0;
_0x593c18 = _0x5b7ef3, _0x593c18["t"] = this["t"] + _0x51bb49 + 1, _0x593c18["s"] = this["s"], _0x593c18["clamp"]();
}, _0x46cc13["prototype"]["rShiftTo"] = function (_0x3a96f4, _0xd83570) {
_0xd83570["s"] = this["s"];
var _0x120f99 = Math["floor"](_0x3a96f4 / this["DB"]);
if (_0x120f99 >= this["t"]) {
_0xd83570["t"] = 0;
} else {
var _0x332ab2 = _0x3a96f4 % this["DB"],
_0x486cfd = this["DB"] - _0x332ab2,
_0x57b419 = (1 << _0x332ab2) - 1;
_0xd83570 = this >> _0x332ab2;
for (var _0x1d86b8 = _0x120f99 + 1; _0x1d86b8 < this["t"]; ++_0x1d86b8) _0xd83570 |= (this & _0x57b419) << _0x486cfd, _0xd83570 = this >> _0x332ab2;
0 < _0x332ab2 && (_0xd83570 - _0x120f99 - 1] |= (this["s"] & _0x57b419) << _0x486cfd), _0xd83570["t"] = this["t"] - _0x120f99, _0xd83570["clamp"]();
}
}, _0x46cc13["prototype"]["subTo"] = function (_0x1bfb46, _0x549664) {
for (var _0x16e8f1 = 0, _0x377986 = 0, _0x32eb74 = Math["min"](_0x1bfb46["t"], this["t"]); _0x16e8f1 < _0x32eb74;) _0x377986 += this - _0x1bfb46, _0x549664 = _0x377986 & this["DM"], _0x377986 >>= this["DB"];
if (_0x1bfb46["t"] < this["t"]) {
for (_0x377986 -= _0x1bfb46["s"]; _0x16e8f1 < this["t"];) _0x377986 += this, _0x549664 = _0x377986 & this["DM"], _0x377986 >>= this["DB"];
_0x377986 += this["s"];
} else {
for (_0x377986 += this["s"]; _0x16e8f1 < _0x1bfb46["t"];) _0x377986 -= _0x1bfb46, _0x549664 = _0x377986 & this["DM"], _0x377986 >>= this["DB"];
_0x377986 -= _0x1bfb46["s"];
}
_0x549664["s"] = _0x377986 < 0 ? -1 : 0, _0x377986 < -1 ? _0x549664 = this["DV"] + _0x377986 : 0 < _0x377986 && (_0x549664 = _0x377986), _0x549664["t"] = _0x16e8f1, _0x549664["clamp"]();
}, _0x46cc13["prototype"]["multiplyTo"] = function (_0x16123a, _0x362a4d) {
var _0x5b71c7 = this["abs"](),
_0x2ef1c3 = _0x16123a["abs"](),
_0x5da087 = _0x5b71c7["t"];
for (_0x362a4d["t"] = _0x5da087 + _0x2ef1c3["t"]; 0 <= --_0x5da087;) _0x362a4d = 0;
for (_0x5da087 = 0; _0x5da087 < _0x2ef1c3["t"]; ++_0x5da087) _0x362a4d] = _0x5b71c7["am"](0, _0x2ef1c3, _0x362a4d, _0x5da087, 0, _0x5b71c7["t"]);
_0x362a4d["s"] = 0, _0x362a4d["clamp"](), this["s"] != _0x16123a["s"] && _0x46cc13["ZERO"]["subTo"](_0x362a4d, _0x362a4d);
}, _0x46cc13["prototype"]["squareTo"] = function (_0x5a401f) {
for (var _0x3d477b = this["abs"](), _0x23fbd0 = _0x5a401f["t"] = 2 * _0x3d477b["t"]; 0 <= --_0x23fbd0;) _0x5a401f = 0;
for (_0x23fbd0 = 0; _0x23fbd0 < _0x3d477b["t"] - 1; ++_0x23fbd0) {
var _0x57617a = _0x3d477b["am"](_0x23fbd0, _0x3d477b, _0x5a401f, 2 * _0x23fbd0, 0, 1);
(_0x5a401f] += _0x3d477b["am"](_0x23fbd0 + 1, 2 * _0x3d477b, _0x5a401f, 2 * _0x23fbd0 + 1, _0x57617a, _0x3d477b["t"] - _0x23fbd0 - 1)) >= _0x3d477b["DV"] && (_0x5a401f] -= _0x3d477b["DV"], _0x5a401f + 1] = 1);
}
0 < _0x5a401f["t"] && (_0x5a401f - 1] += _0x3d477b["am"](_0x23fbd0, _0x3d477b, _0x5a401f, 2 * _0x23fbd0, 0, 1)), _0x5a401f["s"] = 0, _0x5a401f["clamp"]();
}, _0x46cc13["prototype"]["divRemTo"] = function (_0x41ab8c, _0x2824dd, _0x4d1123) {
var _0x7304cf = _0x41ab8c["abs"]();
if (!(_0x7304cf["t"] <= 0)) {
var _0x439dcf = this["abs"]();
if (_0x439dcf["t"] < _0x7304cf["t"]) {
return null != _0x2824dd && _0x2824dd["fromInt"](0), undefined;
}
null == _0x4d1123 && (_0x4d1123 = _0x425021());
var _0x56cb54 = _0x425021(),
_0x2d36e7 = this["s"],
_0x387fdd = _0x41ab8c["s"],
_0x13d1f2 = this["DB"] - _0x312495(_0x7304cf - 1]);
0 < _0x13d1f2 ? (_0x7304cf["lShiftTo"](_0x13d1f2, _0x56cb54), _0x439dcf["lShiftTo"](_0x13d1f2, _0x4d1123)) : (_0x7304cf["copyTo"](_0x56cb54), _0x439dcf["copyTo"](_0x4d1123));
var _0x391c4a = _0x56cb54["t"],
_0x543a0b = _0x56cb54;
if (0 != _0x543a0b) {
var _0x2ae540 = _0x543a0b * (1 << this["F1"]) + (1 < _0x391c4a ? _0x56cb54 >> this["F2"] : 0),
_0x469d6b = this["FV"] / _0x2ae540,
_0x1bb9ba = (1 << this["F1"]) / _0x2ae540,
_0x5f4fc5 = 1 << this["F2"],
_0x56f799 = _0x4d1123["t"],
_0x1e8018 = _0x56f799 - _0x391c4a,
_0x4d3acc = null == _0x2824dd ? _0x425021() : _0x2824dd;
for (_0x56cb54["dlShiftTo"](_0x1e8018, _0x4d3acc), 0 <= _0x4d1123["compareTo"](_0x4d3acc) && (_0x4d1123++] = 1, _0x4d1123["subTo"](_0x4d3acc, _0x4d1123)), _0x46cc13["ONE"]["dlShiftTo"](_0x391c4a, _0x4d3acc), _0x4d3acc["subTo"](_0x56cb54, _0x56cb54); _0x56cb54["t"] < _0x391c4a;) _0x56cb54++] = 0;
for (; 0 <= --_0x1e8018;) {
var _0x161488 = _0x4d1123[--_0x56f799] == _0x543a0b ? this["DM"] : Math["floor"](_0x4d1123 * _0x469d6b + (_0x4d1123 + _0x5f4fc5) * _0x1bb9ba);
if ((_0x4d1123 += _0x56cb54["am"](0, _0x161488, _0x4d1123, _0x1e8018, 0, _0x391c4a)) < _0x161488) {
for (_0x56cb54["dlShiftTo"](_0x1e8018, _0x4d3acc), _0x4d1123["subTo"](_0x4d3acc, _0x4d1123); _0x4d1123 < --_0x161488;) _0x4d1123["subTo"](_0x4d3acc, _0x4d1123);
}
}
null != _0x2824dd && (_0x4d1123["drShiftTo"](_0x391c4a, _0x2824dd), _0x2d36e7 != _0x387fdd && _0x46cc13["ZERO"]["subTo"](_0x2824dd, _0x2824dd)), _0x4d1123["t"] = _0x391c4a, _0x4d1123["clamp"](), 0 < _0x13d1f2 && _0x4d1123["rShiftTo"](_0x13d1f2, _0x4d1123), _0x2d36e7 < 0 && _0x46cc13["ZERO"]["subTo"](_0x4d1123, _0x4d1123);
}
}
}, _0x46cc13["prototype"]["invDigit"] = function () {
if (this["t"] < 1) {
return 0;
}
var _0x46cc13 = this;
if (0 == (1 & _0x46cc13)) {
return 0;
}
var _0x46a795 = 3 & _0x46cc13;
return 0 < (_0x46a795 = (_0x46a795 = (_0x46a795 = (_0x46a795 = _0x46a795 * (2 - (15 & _0x46cc13) * _0x46a795) & 15) * (2 - (255 & _0x46cc13) * _0x46a795) & 255) * (2 - ((65535 & _0x46cc13) * _0x46a795 & 65535)) & 65535) * (2 - _0x46cc13 * _0x46a795 % this["DV"]) % this["DV"]) ? this["DV"] - _0x46a795 : -_0x46a795;
}, _0x46cc13["prototype"]["isEven"] = function () {
return 0 == (0 < this["t"] ? 1 & this : this["s"]);
}, _0x46cc13["prototype"]["exp"] = function (_0x4a65ad, _0x212c70) {
if (4294967295 < _0x4a65ad || _0x4a65ad < 1) {
return _0x46cc13["ONE"];
}
var _0x34ca43 = _0x425021(),
_0x43b99d = _0x425021(),
_0x5e3d8c = _0x212c70["convert"](this),
_0x23c43d = _0x312495(_0x4a65ad) - 1;
for (_0x5e3d8c["copyTo"](_0x34ca43); 0 <= --_0x23c43d;) if (_0x212c70["sqrTo"](_0x34ca43, _0x43b99d), 0 < (_0x4a65ad & 1 << _0x23c43d)) {
_0x212c70["mulTo"](_0x43b99d, _0x5e3d8c, _0x34ca43);
} else {
var _0x2a54ce = _0x34ca43;
_0x34ca43 = _0x43b99d, _0x43b99d = _0x2a54ce;
}
return _0x212c70["revert"](_0x34ca43);
}, _0x46cc13["prototype"]["chunkSize"] = function (_0x41f3a2) {
return Math["floor"](Math["LN2"] * this["DB"] / Math["log"](_0x41f3a2));
}, _0x46cc13["prototype"]["toRadix"] = function (_0x57ab55) {
if (null == _0x57ab55 && (_0x57ab55 = 10), 0 == this["signum"]() || _0x57ab55 < 2 || 36 < _0x57ab55) {
return "0";
}
var _0x4f1caa = this["chunkSize"](_0x57ab55),
_0x113f29 = Math["pow"](_0x57ab55, _0x4f1caa),
_0x3007b3 = _0x46df6e(_0x113f29),
_0x506024 = _0x425021(),
_0x5bfbe2 = _0x425021(),
_0x27f471 = "";
for (this["divRemTo"](_0x3007b3, _0x506024, _0x5bfbe2); 0 < _0x506024["signum"]();) _0x27f471 = (_0x113f29 + _0x5bfbe2["intValue"]())["toString"](_0x57ab55)["substr"](1) + _0x27f471, _0x506024["divRemTo"](_0x3007b3, _0x506024, _0x5bfbe2);
return _0x5bfbe2["intValue"]()["toString"](_0x57ab55) + _0x27f471;
}, _0x46cc13["prototype"]["fromRadix"] = function (_0xab2623, _0x3c412d) {
this["fromInt"](0), null == _0x3c412d && (_0x3c412d = 10);
for (var _0x318346 = this["chunkSize"](_0x3c412d), _0x2a6a20 = Math["pow"](_0x3c412d, _0x318346), _0x10032d = false, _0x3f84db = 0, _0xf95517 = 0, _0x5bda4b = 0; _0x5bda4b < _0xab2623["length"]; ++_0x5bda4b) {
var _0x431258 = _0x1ea6d1(_0xab2623, _0x5bda4b);
_0x431258 < 0 ? "-" == _0xab2623["charAt"](_0x5bda4b) && 0 == this["signum"]() && (_0x10032d = true) : (_0xf95517 = _0x3c412d * _0xf95517 + _0x431258, ++_0x3f84db >= _0x318346 && (this["dMultiply"](_0x2a6a20), this["dAddOffset"](_0xf95517, 0), _0xf95517 = _0x3f84db = 0));
}
0 < _0x3f84db && (this["dMultiply"](Math["pow"](_0x3c412d, _0x3f84db)), this["dAddOffset"](_0xf95517, 0)), _0x10032d && _0x46cc13["ZERO"]["subTo"](this, this);
}, _0x46cc13["prototype"]["fromNumber"] = function (_0x1b6a1b, _0x2799da, _0x3fea16) {
if ("number" == typeof _0x2799da) {
if (_0x1b6a1b < 2) {
this["fromInt"](1);
} else {
for (this["fromNumber"](_0x1b6a1b, _0x3fea16), this["testBit"](_0x1b6a1b - 1) || this["bitwiseTo"](_0x46cc13["ONE"]["shiftLeft"](_0x1b6a1b - 1), _0xfb232b, this), this["isEven"]() && this["dAddOffset"](1, 0); !this["isProbablePrime"](_0x2799da);) this["dAddOffset"](2, 0), this["bitLength"]() > _0x1b6a1b && this["subTo"](_0x46cc13["ONE"]["shiftLeft"](_0x1b6a1b - 1), this);
}
} else {
var _0xaccbba = [],
_0x4bd77e = 7 & _0x1b6a1b;
_0xaccbba["length"] = 1 + (_0x1b6a1b >> 3), _0x2799da["nextBytes"](_0xaccbba), 0 < _0x4bd77e ? _0xaccbba &= (1 << _0x4bd77e) - 1 : _0xaccbba = 0, this["fromString"](_0xaccbba, 256);
}
}, _0x46cc13["prototype"]["bitwiseTo"] = function (_0x5868f5, _0x57e124, _0x5f05b7) {
var _0x13ecef,
_0x431f37,
_0x212347 = Math["min"](_0x5868f5["t"], this["t"]);
for (_0x13ecef = 0; _0x13ecef < _0x212347; ++_0x13ecef) _0x5f05b7 = _0x57e124(this, _0x5868f5);
if (_0x5868f5["t"] < this["t"]) {
for (_0x431f37 = _0x5868f5["s"] & this["DM"], _0x13ecef = _0x212347; _0x13ecef < this["t"]; ++_0x13ecef) _0x5f05b7 = _0x57e124(this, _0x431f37);
_0x5f05b7["t"] = this["t"];
} else {
for (_0x431f37 = this["s"] & this["DM"], _0x13ecef = _0x212347; _0x13ecef < _0x5868f5["t"]; ++_0x13ecef) _0x5f05b7 = _0x57e124(_0x431f37, _0x5868f5);
_0x5f05b7["t"] = _0x5868f5["t"];
}
_0x5f05b7["s"] = _0x57e124(this["s"], _0x5868f5["s"]), _0x5f05b7["clamp"]();
}, _0x46cc13["prototype"]["changeBit"] = function (_0x387312, _0xc77ee7) {
var _0x560ddf = _0x46cc13["ONE"]["shiftLeft"](_0x387312);
return this["bitwiseTo"](_0x560ddf, _0xc77ee7, _0x560ddf), _0x560ddf;
}, _0x46cc13["prototype"]["addTo"] = function (_0x432801, _0x4850ea) {
for (var _0x31b1f0 = 0, _0x30d985 = 0, _0x1b15f9 = Math["min"](_0x432801["t"], this["t"]); _0x31b1f0 < _0x1b15f9;) _0x30d985 += this + _0x432801, _0x4850ea = _0x30d985 & this["DM"], _0x30d985 >>= this["DB"];
if (_0x432801["t"] < this["t"]) {
for (_0x30d985 += _0x432801["s"]; _0x31b1f0 < this["t"];) _0x30d985 += this, _0x4850ea = _0x30d985 & this["DM"], _0x30d985 >>= this["DB"];
_0x30d985 += this["s"];
} else {
for (_0x30d985 += this["s"]; _0x31b1f0 < _0x432801["t"];) _0x30d985 += _0x432801, _0x4850ea = _0x30d985 & this["DM"], _0x30d985 >>= this["DB"];
_0x30d985 += _0x432801["s"];
}
_0x4850ea["s"] = _0x30d985 < 0 ? -1 : 0, 0 < _0x30d985 ? _0x4850ea = _0x30d985 : _0x30d985 < -1 && (_0x4850ea = this["DV"] + _0x30d985), _0x4850ea["t"] = _0x31b1f0, _0x4850ea["clamp"]();
}, _0x46cc13["prototype"]["dMultiply"] = function (_0x2d7d07) {
this] = this["am"](0, _0x2d7d07 - 1, this, 0, 0, this["t"]), ++this["t"], this["clamp"]();
}, _0x46cc13["prototype"]["dAddOffset"] = function (_0x4ef00f, _0x13e7b7) {
if (0 != _0x4ef00f) {
for (; this["t"] <= _0x13e7b7;) this++] = 0;
for (this += _0x4ef00f; this >= this["DV"];) this -= this["DV"], ++_0x13e7b7 >= this["t"] && (this++] = 0), ++this;
}
}, _0x46cc13["prototype"]["multiplyLowerTo"] = function (_0x10db58, _0x3ae37d, _0x4f92b3) {
var _0x5d8c8a = Math["min"](this["t"] + _0x10db58["t"], _0x3ae37d);
for (_0x4f92b3["s"] = 0, _0x4f92b3["t"] = _0x5d8c8a; 0 < _0x5d8c8a;) _0x4f92b3[--_0x5d8c8a] = 0;
for (var _0x5f2c8d = _0x4f92b3["t"] - this["t"]; _0x5d8c8a < _0x5f2c8d; ++_0x5d8c8a) _0x4f92b3] = this["am"](0, _0x10db58, _0x4f92b3, _0x5d8c8a, 0, this["t"]);
for (_0x5f2c8d = Math["min"](_0x10db58["t"], _0x3ae37d); _0x5d8c8a < _0x5f2c8d; ++_0x5d8c8a) this["am"](0, _0x10db58, _0x4f92b3, _0x5d8c8a, 0, _0x3ae37d - _0x5d8c8a);
_0x4f92b3["clamp"]();
}, _0x46cc13["prototype"]["multiplyUpperTo"] = function (_0x160c85, _0x189bce, _0x3a2c9c) {
var _0x51cb9d = _0x3a2c9c["t"] = this["t"] + _0x160c85["t"] - --_0x189bce;
for (_0x3a2c9c["s"] = 0; 0 <= --_0x51cb9d;) _0x3a2c9c = 0;
for (_0x51cb9d = Math["max"](_0x189bce - this["t"], 0); _0x51cb9d < _0x160c85["t"]; ++_0x51cb9d) _0x3a2c9c + _0x51cb9d - _0x189bce] = this["am"](_0x189bce - _0x51cb9d, _0x160c85, _0x3a2c9c, 0, 0, this["t"] + _0x51cb9d - _0x189bce);
_0x3a2c9c["clamp"](), _0x3a2c9c["drShiftTo"](1, _0x3a2c9c);
}, _0x46cc13["prototype"]["modInt"] = function (_0x1647ad) {
if (_0x1647ad <= 0) {
return 0;
}
var _0x453e4c = this["DV"] % _0x1647ad,
_0x5dacdb = this["s"] < 0 ? _0x1647ad - 1 : 0;
if (0 < this["t"]) {
if (0 == _0x453e4c) {
_0x5dacdb = this % _0x1647ad;
} else {
for (var _0x1b9d78 = this["t"] - 1; 0 <= _0x1b9d78; --_0x1b9d78) _0x5dacdb = (_0x453e4c * _0x5dacdb + this) % _0x1647ad;
}
}
return _0x5dacdb;
}, _0x46cc13["prototype"]["millerRabin"] = function (_0x5bea7e) {
var _0x419cf9 = this["subtract"](_0x46cc13["ONE"]),
_0x4f6306 = _0x419cf9["getLowestSetBit"]();
if (_0x4f6306 <= 0) {
return false;
}
var _0x5c625f = _0x419cf9["shiftRight"](_0x4f6306);
_0x16c700["length"] < (_0x5bea7e = _0x5bea7e + 1 >> 1) && (_0x5bea7e = _0x16c700["length"]);
for (var _0x3a0263 = _0x425021(), _0x58e43d = 0; _0x58e43d < _0x5bea7e; ++_0x58e43d) {
var _0x1dfb1a = _0x3a0263["modPow"](_0x5c625f, this);
if (0 != _0x1dfb1a["compareTo"](_0x46cc13["ONE"]) && 0 != _0x1dfb1a["compareTo"](_0x419cf9)) {
for (var _0x5a9e49 = 1; _0x5a9e49++ < _0x4f6306 && 0 != _0x1dfb1a["compareTo"](_0x419cf9);) if (0 == (_0x1dfb1a = _0x1dfb1a["modPowInt"](2, this))["compareTo"](_0x46cc13["ONE"])) {
return false;
}
if (0 != _0x1dfb1a["compareTo"](_0x419cf9)) {
return false;
}
}
}
return true;
}, _0x46cc13["prototype"]["square"] = function () {
var _0x46cc13 = _0x425021();
return this["squareTo"](_0x46cc13), _0x46cc13;
}, _0x46cc13["prototype"]["gcda"] = function (_0x5d3e11, _0x208d32) {
var _0x563b22 = this["s"] < 0 ? this["negate"]() : this["clone"](),
_0x5b7311 = _0x5d3e11["s"] < 0 ? _0x5d3e11["negate"]() : _0x5d3e11["clone"]();
if (_0x563b22["compareTo"](_0x5b7311) < 0) {
var _0x926c66 = _0x563b22;
_0x563b22 = _0x5b7311, _0x5b7311 = _0x926c66;
}
var _0xca6de8 = _0x563b22["getLowestSetBit"](),
_0x1d7bf6 = _0x5b7311["getLowestSetBit"]();
if (_0x1d7bf6 < 0) {
_0x208d32(_0x563b22);
} else {
_0xca6de8 < _0x1d7bf6 && (_0x1d7bf6 = _0xca6de8), 0 < _0x1d7bf6 && (_0x563b22["rShiftTo"](_0x1d7bf6, _0x563b22), _0x5b7311["rShiftTo"](_0x1d7bf6, _0x5b7311));
var _0xa4350a = function () {
0 < (_0xca6de8 = _0x563b22["getLowestSetBit"]()) && _0x563b22["rShiftTo"](_0xca6de8, _0x563b22), 0 < (_0xca6de8 = _0x5b7311["getLowestSetBit"]()) && _0x5b7311["rShiftTo"](_0xca6de8, _0x5b7311), 0 <= _0x563b22["compareTo"](_0x5b7311) ? (_0x563b22["subTo"](_0x5b7311, _0x563b22), _0x563b22["rShiftTo"](1, _0x563b22)) : (_0x5b7311["subTo"](_0x563b22, _0x5b7311), _0x5b7311["rShiftTo"](1, _0x5b7311)), 0 < _0x563b22["signum"]() ? setTimeout(_0xa4350a, 0) : (0 < _0x1d7bf6 && _0x5b7311["lShiftTo"](_0x1d7bf6, _0x5b7311), setTimeout(function () {
_0x208d32(_0x5b7311);
}, 0));
};
setTimeout(_0xa4350a, 10);
}
}, _0x46cc13["prototype"]["fromNumberAsync"] = function (_0x15b60c, _0x1de11d, _0x39e9ee, _0x5cb406) {
if ("number" == typeof _0x1de11d) {
if (_0x15b60c < 2) {
this["fromInt"](1);
} else {
this["fromNumber"](_0x15b60c, _0x39e9ee), this["testBit"](_0x15b60c - 1) || this["bitwiseTo"](_0x46cc13["ONE"]["shiftLeft"](_0x15b60c - 1), _0xfb232b, this), this["isEven"]() && this["dAddOffset"](1, 0);
var _0xfc69a0 = this,
_0x4c3b48 = function () {
_0xfc69a0["dAddOffset"](2, 0), _0xfc69a0["bitLength"]() > _0x15b60c && _0xfc69a0["subTo"](_0x46cc13["ONE"]["shiftLeft"](_0x15b60c - 1), _0xfc69a0), _0xfc69a0["isProbablePrime"](_0x1de11d) ? setTimeout(function () {
_0x5cb406();
}, 0) : setTimeout(_0x4c3b48, 0);
};
setTimeout(_0x4c3b48, 0);
}
} else {
var _0x304322 = [],
_0x5e7edd = 7 & _0x15b60c;
_0x304322["length"] = 1 + (_0x15b60c >> 3), _0x1de11d["nextBytes"](_0x304322), 0 < _0x5e7edd ? _0x304322 &= (1 << _0x5e7edd) - 1 : _0x304322 = 0, this["fromString"](_0x304322, 256);
}
}, _0x46cc13;
}(),
_0x24d53a = function () {
function _0x7a0cac() {}
return _0x7a0cac["prototype"]["convert"] = function (_0x41ce77) {
return _0x41ce77;
}, _0x7a0cac["prototype"]["revert"] = function (_0x4b1d70) {
return _0x4b1d70;
}, _0x7a0cac["prototype"]["mulTo"] = function (_0x50037c, _0x59c94d, _0x11277b) {
_0x50037c["multiplyTo"](_0x59c94d, _0x11277b);
}, _0x7a0cac["prototype"]["sqrTo"] = function (_0x42cc41, _0x2ef799) {
_0x42cc41["squareTo"](_0x2ef799);
}, _0x7a0cac;
}(),
_0x3d96c6 = function () {
function _0xc1f893(_0x3f080a) {
this["m"] = _0x3f080a;
}
return _0xc1f893["prototype"]["convert"] = function (_0xb45a47) {
return _0xb45a47["s"] < 0 || 0 <= _0xb45a47["compareTo"](this["m"]) ? _0xb45a47["mod"](this["m"]) : _0xb45a47;
}, _0xc1f893["prototype"]["revert"] = function (_0x16f707) {
return _0x16f707;
}, _0xc1f893["prototype"]["reduce"] = function (_0x319968) {
_0x319968["divRemTo"](this["m"], null, _0x319968);
}, _0xc1f893["prototype"]["mulTo"] = function (_0x380f64, _0x1b8469, _0x22a3eb) {
_0x380f64["multiplyTo"](_0x1b8469, _0x22a3eb), this["reduce"](_0x22a3eb);
}, _0xc1f893["prototype"]["sqrTo"] = function (_0x1827a1, _0x4c3d20) {
_0x1827a1["squareTo"](_0x4c3d20), this["reduce"](_0x4c3d20);
}, _0xc1f893;
}(),
_0x4cb267 = function () {
function _0xdf43b3(_0x4a9319) {
this["m"] = _0x4a9319, this["mp"] = _0x4a9319["invDigit"](), this["mpl"] = 32767 & this["mp"], this["mph"] = this["mp"] >> 15, this["um"] = (1 << _0x4a9319["DB"] - 15) - 1, this["mt2"] = 2 * _0x4a9319["t"];
}
return _0xdf43b3["prototype"]["convert"] = function (_0x11c977) {
var _0x3dc738 = _0x425021();
return _0x11c977["abs"]()["dlShiftTo"](this["m"]["t"], _0x3dc738), _0x3dc738["divRemTo"](this["m"], null, _0x3dc738), _0x11c977["s"] < 0 && 0 < _0x3dc738["compareTo"](_0x2935af["ZERO"]) && this["m"]["subTo"](_0x3dc738, _0x3dc738), _0x3dc738;
}, _0xdf43b3["prototype"]["revert"] = function (_0x5202f8) {
var _0x4263bf = _0x425021();
return _0x5202f8["copyTo"](_0x4263bf), this["reduce"](_0x4263bf), _0x4263bf;
}, _0xdf43b3["prototype"]["reduce"] = function (_0x3482a1) {
for (; _0x3482a1["t"] <= this["mt2"];) _0x3482a1++] = 0;
for (var _0x204387 = 0; _0x204387 < this["m"]["t"]; ++_0x204387) {
var _0x303298 = 32767 & _0x3482a1,
_0x4d9d80 = _0x303298 * this["mpl"] + ((_0x303298 * this["mph"] + (_0x3482a1 >> 15) * this["mpl"] & this["um"]) << 15) & _0x3482a1["DM"];
for (_0x3482a1["t"]] += this["m"]["am"](0, _0x4d9d80, _0x3482a1, _0x204387, 0, this["m"]["t"]); _0x3482a1 >= _0x3482a1["DV"];) _0x3482a1 -= _0x3482a1["DV"], _0x3482a1[++_0x303298]++;
}
_0x3482a1["clamp"](), _0x3482a1["drShiftTo"](this["m"]["t"], _0x3482a1), 0 <= _0x3482a1["compareTo"](this["m"]) && _0x3482a1["subTo"](this["m"], _0x3482a1);
}, _0xdf43b3["prototype"]["mulTo"] = function (_0x3ffcce, _0x116ccb, _0x3016b6) {
_0x3ffcce["multiplyTo"](_0x116ccb, _0x3016b6), this["reduce"](_0x3016b6);
}, _0xdf43b3["prototype"]["sqrTo"] = function (_0x50e4f5, _0x297e38) {
_0x50e4f5["squareTo"](_0x297e38), this["reduce"](_0x297e38);
}, _0xdf43b3;
}(),
_0x51d9ef = function () {
function _0x100af5(_0x2e4853) {
this["m"] = _0x2e4853, this["r2"] = _0x425021(), this["q3"] = _0x425021(), _0x2935af["ONE"]["dlShiftTo"](2 * _0x2e4853["t"], this["r2"]), this["mu"] = this["r2"]["divide"](_0x2e4853);
}
return _0x100af5["prototype"]["convert"] = function (_0x5e0c07) {
if (_0x5e0c07["s"] < 0 || _0x5e0c07["t"] > 2 * this["m"]["t"]) {
return _0x5e0c07["mod"](this["m"]);
}
if (_0x5e0c07["compareTo"](this["m"]) < 0) {
return _0x5e0c07;
}
var _0x38c177 = _0x425021();
return _0x5e0c07["copyTo"](_0x38c177), this["reduce"](_0x38c177), _0x38c177;
}, _0x100af5["prototype"]["revert"] = function (_0x53035b) {
return _0x53035b;
}, _0x100af5["prototype"]["reduce"] = function (_0x5f39d8) {
for (_0x5f39d8["drShiftTo"](this["m"]["t"] - 1, this["r2"]), _0x5f39d8["t"] > this["m"]["t"] + 1 && (_0x5f39d8["t"] = this["m"]["t"] + 1, _0x5f39d8["clamp"]()), this["mu"]["multiplyUpperTo"](this["r2"], this["m"]["t"] + 1, this["q3"]), this["m"]["multiplyLowerTo"](this["q3"], this["m"]["t"] + 1, this["r2"]); _0x5f39d8["compareTo"](this["r2"]) < 0;) _0x5f39d8["dAddOffset"](1, this["m"]["t"] + 1);
for (_0x5f39d8["subTo"](this["r2"], _0x5f39d8); 0 <= _0x5f39d8["compareTo"](this["m"]);) _0x5f39d8["subTo"](this["m"], _0x5f39d8);
}, _0x100af5["prototype"]["mulTo"] = function (_0x720735, _0x5b47e6, _0x41d9c1) {
_0x720735["multiplyTo"](_0x5b47e6, _0x41d9c1), this["reduce"](_0x41d9c1);
}, _0x100af5["prototype"]["sqrTo"] = function (_0x464b92, _0x42a884) {
_0x464b92["squareTo"](_0x42a884), this["reduce"](_0x42a884);
}, _0x100af5;
}();
function _0x425021() {
return new _0x2935af(null);
}
function _0x5baf06(_0xe04d3b, _0x372989) {
return new _0x2935af(_0xe04d3b, _0x372989);
}
"Microsoft Internet Explorer" == navigator["appName"] ? (_0x2935af["prototype"]["am"] = function (_0x1af29b, _0x16b8da, _0x597a23, _0x401af9, _0x55ee66, _0x516c12) {
for (var _0x36093e = 32767 & _0x16b8da, _0x259618 = _0x16b8da >> 15; 0 <= --_0x516c12;) {
var _0x57bb8f = 32767 & this,
_0x5ae27a = this >> 15,
_0x387d95 = _0x259618 * _0x57bb8f + _0x5ae27a * _0x36093e;
_0x55ee66 = ((_0x57bb8f = _0x36093e * _0x57bb8f + ((32767 & _0x387d95) << 15) + _0x597a23 + (1073741823 & _0x55ee66)) >>> 30) + (_0x387d95 >>> 15) + _0x259618 * _0x5ae27a + (_0x55ee66 >>> 30), _0x597a23 = 1073741823 & _0x57bb8f;
}
return _0x55ee66;
}, _0x10b29a = 30) : "Netscape" != navigator["appName"] ? (_0x2935af["prototype"]["am"] = function (_0x4c4e6e, _0x5ead7c, _0x337aa0, _0x106255, _0x34e937, _0x2d2a12) {
for (; 0 <= --_0x2d2a12;) {
var _0x232504 = _0x5ead7c * this + _0x337aa0 + _0x34e937;
_0x34e937 = Math["floor"](_0x232504 / 67108864), _0x337aa0 = 67108863 & _0x232504;
}
return _0x34e937;
}, _0x10b29a = 26) : (_0x2935af["prototype"]["am"] = function (_0x3c1afb, _0x18bfac, _0x136996, _0x327041, _0x13dbc4, _0x1a1704) {
for (var _0x5c74f1 = 16383 & _0x18bfac, _0x24929e = _0x18bfac >> 14; 0 <= --_0x1a1704;) {
var _0x1dec8c = 16383 & this,
_0x2a0d28 = this >> 14,
_0x380ee7 = _0x24929e * _0x1dec8c + _0x2a0d28 * _0x5c74f1;
_0x13dbc4 = ((_0x1dec8c = _0x5c74f1 * _0x1dec8c + ((16383 & _0x380ee7) << 14) + _0x136996 + _0x13dbc4) >> 28) + (_0x380ee7 >> 14) + _0x24929e * _0x2a0d28, _0x136996 = 268435455 & _0x1dec8c;
}
return _0x13dbc4;
}, _0x10b29a = 28), _0x2935af["prototype"]["DB"] = _0x10b29a, _0x2935af["prototype"]["DM"] = (1 << _0x10b29a) - 1, _0x2935af["prototype"]["DV"] = 1 << _0x10b29a, _0x2935af["prototype"]["FV"] = Math["pow"](2, 52), _0x2935af["prototype"]["F1"] = 52 - _0x10b29a, _0x2935af["prototype"]["F2"] = 2 * _0x10b29a - 52;
var _0x563e61,
_0x1d04ef,
_0x1c8429 = [];
for (_0x563e61 = "0"["charCodeAt"](0), _0x1d04ef = 0; _0x1d04ef <= 9; ++_0x1d04ef) _0x1c8429 = _0x1d04ef;
for (_0x563e61 = "a"["charCodeAt"](0), _0x1d04ef = 10; _0x1d04ef < 36; ++_0x1d04ef) _0x1c8429 = _0x1d04ef;
for (_0x563e61 = "A"["charCodeAt"](0), _0x1d04ef = 10; _0x1d04ef < 36; ++_0x1d04ef) _0x1c8429 = _0x1d04ef;
function _0x1ea6d1(_0x1886b1, _0x3dcfad) {
var _0x9abde0 = _0x1c8429(_0x3dcfad)];
return null == _0x9abde0 ? -1 : _0x9abde0;
}
function _0x46df6e(_0x48f57e) {
var _0x8b3fc2 = _0x425021();
return _0x8b3fc2["fromInt"](_0x48f57e), _0x8b3fc2;
}
function _0x312495(_0x30770b) {
var _0x3e6991,
_0x4657cc = 1;
return 0 != (_0x3e6991 = _0x30770b >>> 16) && (_0x30770b = _0x3e6991, _0x4657cc += 16), 0 != (_0x3e6991 = _0x30770b >> 8) && (_0x30770b = _0x3e6991, _0x4657cc += 8), 0 != (_0x3e6991 = _0x30770b >> 4) && (_0x30770b = _0x3e6991, _0x4657cc += 4), 0 != (_0x3e6991 = _0x30770b >> 2) && (_0x30770b = _0x3e6991, _0x4657cc += 2), 0 != (_0x3e6991 = _0x30770b >> 1) && (_0x30770b = _0x3e6991, _0x4657cc += 1), _0x4657cc;
}
_0x2935af["ZERO"] = _0x46df6e(0), _0x2935af["ONE"] = _0x46df6e(1);
var _0x53c881,
_0x198bd8,
_0x19fde7 = function () {
function _0x7d14e5() {
this["i"] = 0, this["j"] = 0, this["S"] = [];
}
return _0x7d14e5["prototype"]["init"] = function (_0xab856e) {
var _0x2f4340, _0x2e1107, _0xb75fb9;
for (_0x2f4340 = 0; _0x2f4340 < 256; ++_0x2f4340) this["S"] = _0x2f4340;
for (_0x2f4340 = _0x2e1107 = 0; _0x2f4340 < 256; ++_0x2f4340) _0xb75fb9 = this["S"], this["S"] = this["S"] + _0xab856e] & 255], this["S"] = _0xb75fb9;
this["i"] = 0, this["j"] = 0;
}, _0x7d14e5["prototype"]["next"] = function () {
var _0x7d14e5;
return this["i"] = this["i"] + 1 & 255, this["j"] = this["j"] + this["S"]] & 255, _0x7d14e5 = this["S"]], this["S"]] = this["S"]], this["S"]] = _0x7d14e5, this["S"]] & 255];
}, _0x7d14e5;
}(),
_0xd1fcb7 = 256,
_0x28fced = null;
if (null == _0x28fced) {
_0x28fced = [];
_0x198bd8 = 0x0
var _0x234805 = undefined;
var _0xde5242 = new Uint32Array(256);
}
function _0x50b972() {
if (null == _0x53c881) {
for (_0x53c881 = new _0x19fde7(); _0x198bd8 < _0xd1fcb7;) {
var _0x20544c = Math["floor"](65536);
_0x28fced = 255 & _0x20544c;
}
for (_0x53c881["init"](_0x28fced), _0x198bd8 = 0; _0x198bd8 < _0x28fced["length"]; ++_0x198bd8) _0x28fced = 0;
_0x198bd8 = 0;
}
return _0x53c881["next"]();
}
var _0x1c692d = function () {
function _0x3f7749() {}
return _0x3f7749["prototype"]["nextBytes"] = function (_0x218966) {
for (var _0x52ef1d = 0; _0x52ef1d < _0x218966["length"]; ++_0x52ef1d) _0x218966 = _0x50b972();
}, _0x3f7749;
}(),
_0x56aa3c = function () {
function _0x19243d() {
this["n"] = null, this["e"] = 0, this["d"] = null, this["p"] = null, this["q"] = null, this["dmp1"] = null, this["dmq1"] = null, this["coeff"] = null;
}
return _0x19243d["prototype"]["doPublic"] = function (_0x58c5a3) {
return _0x58c5a3["modPowInt"](this["e"], this["n"]);
}, _0x19243d["prototype"]["doPrivate"] = function (_0x126700) {
if (null == this["p"] || null == this["q"]) {
return _0x126700["modPow"](this["d"], this["n"]);
}
for (var _0x3c2a80 = _0x126700["mod"](this["p"])["modPow"](this["dmp1"], this["p"]), _0x4a698e = _0x126700["mod"](this["q"])["modPow"](this["dmq1"], this["q"]); _0x3c2a80["compareTo"](_0x4a698e) < 0;) _0x3c2a80 = _0x3c2a80["add"](this["p"]);
return _0x3c2a80["subtract"](_0x4a698e)["multiply"](this["coeff"])["mod"](this["p"])["multiply"](this["q"])["add"](_0x4a698e);
}, _0x19243d["prototype"]["setPublic"] = function (_0x4cbfaf, _0x576a9c) {
null != _0x4cbfaf && null != _0x576a9c && 0 < _0x4cbfaf["length"] && 0 < _0x576a9c["length"] ? (this["n"] = _0x5baf06(_0x4cbfaf, 16), this["e"] = parseInt(_0x576a9c, 16)) : console["error"]("Invalid RSA public key");
}, _0x19243d["prototype"]["encrypt"] = function (_0x35dde9) {
var _0x1971c2 = function (_0x53504c, _0x520615) {
if (_0x520615 < _0x53504c["length"] + 11) {
return console["error"]("Message too long for RSA"), null;
}
for (var _0x395439 = [], _0x37e200 = _0x53504c["length"] - 1; 0 <= _0x37e200 && 0 < _0x520615;) {
var _0x27c7a6 = _0x53504c["charCodeAt"](_0x37e200--);
_0x27c7a6 < 128 ? _0x395439[--_0x520615] = _0x27c7a6 : 127 < _0x27c7a6 && _0x27c7a6 < 2048 ? (_0x395439[--_0x520615] = 63 & _0x27c7a6 | 128, _0x395439[--_0x520615] = _0x27c7a6 >> 6 | 192) : (_0x395439[--_0x520615] = 63 & _0x27c7a6 | 128, _0x395439[--_0x520615] = _0x27c7a6 >> 6 & 63 | 128, _0x395439[--_0x520615] = _0x27c7a6 >> 12 | 224);
}
_0x395439[--_0x520615] = 0;
for (var _0x5499c2 = new _0x1c692d(), _0x1e4d4c = []; 2 < _0x520615;) {
for (_0x1e4d4c = 0; 0 == _0x1e4d4c;) _0x5499c2["nextBytes"](_0x1e4d4c);
_0x395439[--_0x520615] = _0x1e4d4c;
}
return _0x395439[--_0x520615] = 2, _0x395439[--_0x520615] = 0, new _0x2935af(_0x395439);
}(_0x35dde9, this["n"]["bitLength"]() + 7 >> 3);
if (null == _0x1971c2) {
return null;
}
var _0x173b94 = this["doPublic"](_0x1971c2);
if (null == _0x173b94) {
return null;
}
var _0x423d43 = _0x173b94["toString"](16);
return 0 == (1 & _0x423d43["length"]) ? _0x423d43 : "0" + _0x423d43;
}, _0x19243d["prototype"]["setPrivate"] = function (_0x469101, _0x203293, _0x12e10b) {
null != _0x469101 && null != _0x203293 && 0 < _0x469101["length"] && 0 < _0x203293["length"] ? (this["n"] = _0x5baf06(_0x469101, 16), this["e"] = parseInt(_0x203293, 16), this["d"] = _0x5baf06(_0x12e10b, 16)) : console["error"]("Invalid RSA private key");
}, _0x19243d["prototype"]["setPrivateEx"] = function (_0x41060b, _0x211748, _0x387c5c, _0x369faf, _0x41a59f, _0x1457b9, _0x38e7ba, _0x1a1f21) {
null != _0x41060b && null != _0x211748 && 0 < _0x41060b["length"] && 0 < _0x211748["length"] ? (this["n"] = _0x5baf06(_0x41060b, 16), this["e"] = parseInt(_0x211748, 16), this["d"] = _0x5baf06(_0x387c5c, 16), this["p"] = _0x5baf06(_0x369faf, 16), this["q"] = _0x5baf06(_0x41a59f, 16), this["dmp1"] = _0x5baf06(_0x1457b9, 16), this["dmq1"] = _0x5baf06(_0x38e7ba, 16), this["coeff"] = _0x5baf06(_0x1a1f21, 16)) : console["error"]("Invalid RSA private key");
}, _0x19243d["prototype"]["generate"] = function (_0x54cded, _0x252e2c) {
var _0x4d5ffc = new _0x1c692d(),
_0x196d88 = _0x54cded >> 1;
this["e"] = parseInt(_0x252e2c, 16);
for (var _0x504a1c = new _0x2935af(_0x252e2c, 16);;) {
for (; this["p"] = new _0x2935af(_0x54cded - _0x196d88, 1, _0x4d5ffc), 0 != this["p"]["subtract"](_0x2935af["ONE"])["gcd"](_0x504a1c)["compareTo"](_0x2935af["ONE"]) || !this["p"]["isProbablePrime"](10);) {}
for (; this["q"] = new _0x2935af(_0x196d88, 1, _0x4d5ffc), 0 != this["q"]["subtract"](_0x2935af["ONE"])["gcd"](_0x504a1c)["compareTo"](_0x2935af["ONE"]) || !this["q"]["isProbablePrime"](10);) {}
if (this["p"]["compareTo"](this["q"]) <= 0) {
var _0x2c514a = this["p"];
this["p"] = this["q"], this["q"] = _0x2c514a;
}
var _0x5835c5 = this["p"]["subtract"](_0x2935af["ONE"]),
_0xcff2db = this["q"]["subtract"](_0x2935af["ONE"]),
_0x38f7ca = _0x5835c5["multiply"](_0xcff2db);
if (0 == _0x38f7ca["gcd"](_0x504a1c)["compareTo"](_0x2935af["ONE"])) {
this["n"] = this["p"]["multiply"](this["q"]), this["d"] = _0x504a1c["modInverse"](_0x38f7ca), this["dmp1"] = this["d"]["mod"](_0x5835c5), this["dmq1"] = this["d"]["mod"](_0xcff2db), this["coeff"] = this["q"]["modInverse"](this["p"]);
break;
}
}
}, _0x19243d["prototype"]["decrypt"] = function (_0x36f0fa) {
var _0x481c7d = _0x5baf06(_0x36f0fa, 16),
_0x3758ed = this["doPrivate"](_0x481c7d);
return null == _0x3758ed ? null : function (_0x1a083f, _0x497a1f) {
for (var _0x459609 = _0x1a083f["toByteArray"](), _0x467192 = 0; _0x467192 < _0x459609["length"] && 0 == _0x459609;) ++_0x467192;
if (_0x459609["length"] - _0x467192 != _0x497a1f - 1 || 2 != _0x459609) {
return null;
}
for (++_0x467192; 0 != _0x459609;) if (++_0x467192 >= _0x459609["length"]) {
return null;
}
for (var _0x1ac7fe = ""; ++_0x467192 < _0x459609["length"];) {
var _0x53487d = 255 & _0x459609;
_0x53487d < 128 ? _0x1ac7fe += String["fromCharCode"](_0x53487d) : 191 < _0x53487d && _0x53487d < 224 ? (_0x1ac7fe += String["fromCharCode"]((31 & _0x53487d) << 6 | 63 & _0x459609), ++_0x467192) : (_0x1ac7fe += String["fromCharCode"]((15 & _0x53487d) << 12 | (63 & _0x459609) << 6 | 63 & _0x459609), _0x467192 += 2);
}
return _0x1ac7fe;
}(_0x3758ed, this["n"]["bitLength"]() + 7 >> 3);
}, _0x19243d["prototype"]["generateAsync"] = function (_0x4639cc, _0x5e6d24, _0x2ea27d) {
var _0x3ea2ab = new _0x1c692d(),
_0x17c5f2 = _0x4639cc >> 1;
this["e"] = parseInt(_0x5e6d24, 16);
var _0x5a2115 = new _0x2935af(_0x5e6d24, 16),
_0x18f76e = this,
_0x23dc1f = function () {
var _0x5e6d24 = function () {
if (_0x18f76e["p"]["compareTo"](_0x18f76e["q"]) <= 0) {
var _0x4639cc = _0x18f76e["p"];
_0x18f76e["p"] = _0x18f76e["q"], _0x18f76e["q"] = _0x4639cc;
}
var _0x5e6d24 = _0x18f76e["p"]["subtract"](_0x2935af["ONE"]),
_0x343fe4 = _0x18f76e["q"]["subtract"](_0x2935af["ONE"]),
_0x22c084 = _0x5e6d24["multiply"](_0x343fe4);
0 == _0x22c084["gcd"](_0x5a2115)["compareTo"](_0x2935af["ONE"]) ? (_0x18f76e["n"] = _0x18f76e["p"]["multiply"](_0x18f76e["q"]), _0x18f76e["d"] = _0x5a2115["modInverse"](_0x22c084), _0x18f76e["dmp1"] = _0x18f76e["d"]["mod"](_0x5e6d24), _0x18f76e["dmq1"] = _0x18f76e["d"]["mod"](_0x343fe4), _0x18f76e["coeff"] = _0x18f76e["q"]["modInverse"](_0x18f76e["p"]), setTimeout(function () {
_0x2ea27d();
}, 0)) : setTimeout(_0x23dc1f, 0);
},
_0x3870eb = function () {
_0x18f76e["q"] = _0x425021(), _0x18f76e["q"]["fromNumberAsync"](_0x17c5f2, 1, _0x3ea2ab, function () {
_0x18f76e["q"]["subtract"](_0x2935af["ONE"])["gcda"](_0x5a2115, function (_0x239128) {
0 == _0x239128["compareTo"](_0x2935af["ONE"]) && _0x18f76e["q"]["isProbablePrime"](10) ? setTimeout(_0x5e6d24, 0) : setTimeout(_0x3870eb, 0);
});
});
},
_0xfc89d3 = function () {
_0x18f76e["p"] = _0x425021();
_0x18f76e["p"]["fromNumberAsync"](_0x4639cc - _0x17c5f2, 1, _0x3ea2ab, function () {
_0x18f76e["p"]["subtract"](_0x2935af["ONE"])["gcda"](_0x5a2115, function (_0x4c257a) {
0 == _0x4c257a["compareTo"](_0x2935af["ONE"]) && _0x18f76e["p"]["isProbablePrime"](10) ? setTimeout(_0x3870eb, 0) : setTimeout(_0xfc89d3, 0);
});
});
};
setTimeout(_0xfc89d3, 0);
};
setTimeout(_0x23dc1f, 0);
}, _0x19243d["prototype"]["sign"] = function (_0x555d0b, _0x29b8d0, _0x17eec9) {
var _0x3729c9 = function (_0x3b056e, _0x3f4c23) {
if (_0x3f4c23 < _0x3b056e["length"] + 22) {
return console["error"]("Message too long for RSA"), null;
}
for (var _0x17eec9 = _0x3f4c23 - _0x3b056e["length"] - 6, _0x20f282 = "", _0x549bce = 0; _0x549bce < _0x17eec9; _0x549bce += 2) _0x20f282 += "ff";
return _0x5baf06("0001" + _0x20f282 + "00" + _0x3b056e, 16);
}((_0x50b97f || "") + _0x29b8d0(_0x555d0b)["toString"](), this["n"]["bitLength"]() / 4);
if (null == _0x3729c9) {
return null;
}
var _0x249548 = this["doPrivate"](_0x3729c9);
if (null == _0x249548) {
return null;
}
var _0x2c9b88 = _0x249548["toString"](16);
return 0 == (1 & _0x2c9b88["length"]) ? _0x2c9b88 : "0" + _0x2c9b88;
}, _0x19243d["prototype"]["verify"] = function (_0xc36bda, _0x2a719f, _0x3ab3b4) {
var _0x4ddb5d = _0x5baf06(_0x2a719f, 16),
_0x214cd6 = this["doPublic"](_0x4ddb5d);
return null == _0x214cd6 ? null : function (_0x43ea64) {
for (var _0x2a719f in _0x50b97f) if (_0x50b97f["hasOwnProperty"](_0x2a719f)) {
var _0x3ab3b4 = _0x50b97f,
_0xb76119 = _0x3ab3b4["length"];
if (_0x43ea64["substr"](0, _0xb76119) == _0x3ab3b4) {
return _0x43ea64["substr"](_0xb76119);
}
}
return _0x43ea64;
}(_0x214cd6["toString"](16)["replace"](/^1f+00/, "")) == _0x3ab3b4(_0xc36bda)["toString"]();
}, _0x19243d;
}(),
_0x1bbd98 = {
"lang": {
"extend": function (_0x4d3756, _0x571eb4, _0x29e6d6) {
if (!_0x571eb4 || !_0x4d3756) {
throw new Error("YAHOO.lang.extend failed, please check that all dependencies are included.");
}
var _0x170804 = function () {};
if (_0x170804["prototype"] = _0x571eb4["prototype"], _0x4d3756["prototype"] = new _0x170804(), (_0x4d3756["prototype"]["constructor"] = _0x4d3756)["superclass"] = _0x571eb4["prototype"], _0x571eb4["prototype"]["constructor"] == Object["prototype"]["constructor"] && (_0x571eb4["prototype"]["constructor"] = _0x571eb4), _0x29e6d6) {
var _0x3693d9;
for (_0x3693d9 in _0x29e6d6) _0x4d3756["prototype"] = _0x29e6d6;
var _0xcfffe5 = function () {},
_0x129a8a = ["toString", "valueOf"];
try {
/MSIE/["test"](navigator["uA"]) && (_0xcfffe5 = function (_0x22041f, _0x2959db) {
for (_0x3693d9 = 0; _0x3693d9 < _0x129a8a["length"]; _0x3693d9 += 1) {
var _0x29e6d6 = _0x129a8a,
_0x42e818 = _0x2959db;
"function" == typeof _0x42e818 && _0x42e818 != Object["prototype"] && (_0x22041f = _0x42e818);
}
});
} catch (_0xb09e15) {}
_0xcfffe5(_0x4d3756["prototype"], _0x29e6d6);
}
}
}
};
var _0x2f02a5 = {};
undefined !== _0x2f02a5["asn1"] && _0x2f02a5["asn1"] || (_0x2f02a5["asn1"] = {});
_0x2f02a5["asn1"]["ASN1Util"] = new function () {
this["integerToByteHex"] = function (_0x383c06) {
var _0x1f54af = _0x383c06["toString"](16);
return _0x1f54af["length"] % 2 == 1 && (_0x1f54af = "0" + _0x1f54af), _0x1f54af;
}, this["bigIntToMinTwosComplementsHex"] = function (_0xe3f045) {
var _0x252856 = _0xe3f045["toString"](16);
if ("-" != _0x252856["substr"](0, 1)) {
_0x252856["length"] % 2 == 1 ? _0x252856 = "0" + _0x252856 : _0x252856["match"](/^/) || (_0x252856 = "00" + _0x252856);
} else {
var _0x10e08d = _0x252856["substr"](1)["length"];
_0x10e08d % 2 == 1 ? _0x10e08d += 1 : _0x252856["match"](/^/) || (_0x10e08d += 2);
for (var _0x2a6131 = "", _0x4d211b = 0; _0x4d211b < _0x10e08d; _0x4d211b++) _0x2a6131 += "f";
_0x252856 = new _0x2935af(_0x2a6131, 16)["xor"](_0xe3f045)["add"](_0x2935af["ONE"])["toString"](16)["replace"](/^-/, "");
}
return _0x252856;
}, this["getPEMStringFromHex"] = function (_0x54a841, _0x26cd90) {
return hextopem(_0x54a841, _0x26cd90);
}, this["newObject"] = function (_0x259224) {
var _0x1214de = _0x2f02a5["asn1"],
_0x14f946 = _0x1214de["DERBoolean"],
_0x53b6a1 = _0x1214de["DERInteger"],
_0x2da46f = _0x1214de["DERBitString"],
_0x20daf9 = _0x1214de["DEROctetString"],
_0x262814 = _0x1214de["DERNull"],
_0x348e5d = _0x1214de["DERObjectIdentifier"],
_0x51bc19 = _0x1214de["DEREnumerated"],
_0x4c0132 = _0x1214de["DERUTF8String"],
_0xdf9f07 = _0x1214de["DERNumericString"],
_0x4caa63 = _0x1214de["DERPrintableString"],
_0x2e7100 = _0x1214de["DERTeletexString"],
_0x5aca82 = _0x1214de["DERIA5String"],
_0x3a3cf2 = _0x1214de["DERUTCTime"],
_0x5ca427 = _0x1214de["DERGeneralizedTime"],
_0x1f3b2e = _0x1214de["DERSequence"],
_0x481792 = _0x1214de["DERSet"],
_0x4c37c7 = _0x1214de["DERTaggedObject"],
_0x5e17db = _0x1214de["ASN1Util"]["newObject"],
_0x2f7fd0 = Object["keys"](_0x259224);
if (1 != _0x2f7fd0["length"]) {
throw "key of param shall be only one.";
}
var _0x2c13e9 = _0x2f7fd0;
if (-1 == ":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:"["indexOf"](":" + _0x2c13e9 + ":")) {
throw "undefined key: " + _0x2c13e9;
}
if ("bool" == _0x2c13e9) {
return new _0x14f946(_0x259224);
}
if ("int" == _0x2c13e9) {
return new _0x53b6a1(_0x259224);
}
if ("bitstr" == _0x2c13e9) {
return new _0x2da46f(_0x259224);
}
if ("octstr" == _0x2c13e9) {
return new _0x20daf9(_0x259224);
}
if ("null" == _0x2c13e9) {
return new _0x262814(_0x259224);
}
if ("oid" == _0x2c13e9) {
return new _0x348e5d(_0x259224);
}
if ("enum" == _0x2c13e9) {
return new _0x51bc19(_0x259224);
}
if ("utf8str" == _0x2c13e9) {
return new _0x4c0132(_0x259224);
}
if ("numstr" == _0x2c13e9) {
return new _0xdf9f07(_0x259224);
}
if ("prnstr" == _0x2c13e9) {
return new _0x4caa63(_0x259224);
}
if ("telstr" == _0x2c13e9) {
return new _0x2e7100(_0x259224);
}
if ("ia5str" == _0x2c13e9) {
return new _0x5aca82(_0x259224);
}
if ("utctime" == _0x2c13e9) {
return new _0x3a3cf2(_0x259224);
}
if ("gentime" == _0x2c13e9) {
return new _0x5ca427(_0x259224);
}
if ("seq" == _0x2c13e9) {
for (var _0x6b7664 = _0x259224, _0x14ff88 = [], _0x286e3d = 0; _0x286e3d < _0x6b7664["length"]; _0x286e3d++) {
var _0xe9c724 = _0x5e17db(_0x6b7664);
_0x14ff88["push"](_0xe9c724);
}
return new _0x1f3b2e({
"array": _0x14ff88
});
}
if ("set" == _0x2c13e9) {
for (_0x6b7664 = _0x259224, _0x14ff88 = [], _0x286e3d = 0; _0x286e3d < _0x6b7664["length"]; _0x286e3d++) _0xe9c724 = _0x5e17db(_0x6b7664), _0x14ff88["push"](_0xe9c724);
return new _0x481792({
"array": _0x14ff88
});
}
if ("tag" == _0x2c13e9) {
var _0x2aa86a = _0x259224;
if ("" === Object["prototype"]["toString"]["call"](_0x2aa86a) && 3 == _0x2aa86a["length"]) {
var _0x335059 = _0x5e17db(_0x2aa86a);
return new _0x4c37c7({
"tag": _0x2aa86a,
"explicit": _0x2aa86a,
"obj": _0x335059
});
}
var _0x59154d = {};
if (undefined !== _0x2aa86a["explicit"] && (_0x59154d["explicit"] = _0x2aa86a["explicit"]), undefined !== _0x2aa86a["tag"] && (_0x59154d["tag"] = _0x2aa86a["tag"]), undefined === _0x2aa86a["obj"]) {
throw "obj shall be specified for 'tag'.";
}
return _0x59154d["obj"] = _0x5e17db(_0x2aa86a["obj"]), new _0x4c37c7(_0x59154d);
}
}, this["jsonToASN1HEX"] = function (_0x114a10) {
return this["newObject"](_0x114a10)["getEncodedHex"]();
};
}();
_0x2f02a5["asn1"]["ASN1Util"]["oidHexToInt"] = function (_0x106182) {
for (var _0x58b2b3 = "", _0xe18f61 = parseInt(_0x106182["substr"](0, 2), 16), _0x3c33d9 = (_0x58b2b3 = Math["floor"](_0xe18f61 / 40) + "." + _0xe18f61 % 40, ""), _0x5b109b = 2; _0x5b109b < _0x106182["length"]; _0x5b109b += 2) {
var _0x90a44a = ("00000000" + parseInt(_0x106182["substr"](_0x5b109b, 2), 16)["toString"](2))["slice"](-8);
_0x3c33d9 += _0x90a44a["substr"](1, 7), "0" == _0x90a44a["substr"](0, 1) && (_0x58b2b3 = _0x58b2b3 + "." + new _0x2935af(_0x3c33d9, 2)["toString"](10), _0x3c33d9 = "");
}
return _0x58b2b3;
};
_0x2f02a5["asn1"]["ASN1Util"]["oidIntToHex"] = function (_0x2f3bd9) {
var _0x26d55e = function (_0x2c5e07) {
var _0x352e24 = _0x2c5e07["toString"](16);
return 1 == _0x352e24["length"] && (_0x352e24 = "0" + _0x352e24), _0x352e24;
},
_0x425a60 = function (_0x50a16b) {
var _0x45c230 = "",
_0x3505ab = new _0x2935af(_0x50a16b, 10)["toString"](2),
_0x188633 = 7 - _0x3505ab["length"] % 7;
7 == _0x188633 && (_0x188633 = 0);
for (var _0x22ef93 = "", _0x53f4f8 = 0; _0x53f4f8 < _0x188633; _0x53f4f8++) _0x22ef93 += "0";
for (_0x3505ab = _0x22ef93 + _0x3505ab, _0x53f4f8 = 0; _0x53f4f8 < _0x3505ab["length"] - 1; _0x53f4f8 += 7) {
var _0x38fdfe = _0x3505ab["substr"](_0x53f4f8, 7);
_0x53f4f8 != _0x3505ab["length"] - 7 && (_0x38fdfe = "1" + _0x38fdfe), _0x45c230 += _0x26d55e(parseInt(_0x38fdfe, 2));
}
return _0x45c230;
};
if (!_0x2f3bd9["match"](/^+$/)) {
throw "malformed oid string: " + _0x2f3bd9;
}
var _0x3a63ad = "",
_0x490035 = _0x2f3bd9["split"]("."),
_0x2a5dc2 = 40 * parseInt(_0x490035) + parseInt(_0x490035);
_0x3a63ad += _0x26d55e(_0x2a5dc2), _0x490035["splice"](0, 2);
for (var _0x511933 = 0; _0x511933 < _0x490035["length"]; _0x511933++) _0x3a63ad += _0x425a60(_0x490035);
return _0x3a63ad;
};
_0x2f02a5["asn1"]["ASN1Object"] = function () {
this["getLengthHexFromValue"] = function () {
if (undefined === this["hV"] || null == this["hV"]) {
throw "this.hV is null or undefined.";
}
if (this["hV"]["length"] % 2 == 1) {
throw "value hex must be even length: n=" + ""["length"] + ",v=" + this["hV"];
}
var _0x20544c = this["hV"]["length"] / 2,
_0x10182d = _0x20544c["toString"](16);
if (_0x10182d["length"] % 2 == 1 && (_0x10182d = "0" + _0x10182d), _0x20544c < 128) {
return _0x10182d;
}
var _0x47c599 = _0x10182d["length"] / 2;
if (15 < _0x47c599) {
throw "ASN.1 length too long to represent by 8x: n = " + _0x20544c["toString"](16);
}
return (128 + _0x47c599)["toString"](16) + _0x10182d;
}, this["getEncodedHex"] = function () {
return (null == this["hTLV"] || this["isModified"]) && (this["hV"] = this["getFreshValueHex"](), this["hL"] = this["getLengthHexFromValue"](), this["hTLV"] = this["hT"] + this["hL"] + this["hV"], this["isModified"] = false), this["hTLV"];
}, this["getValueHex"] = function () {
return this["getEncodedHex"](), this["hV"];
}, this["getFreshValueHex"] = function () {
return "";
};
};
_0x2f02a5["asn1"]["DERAbstractString"] = function (_0x545af5) {
_0x2f02a5["asn1"]["DERAbstractString"]["superclass"]["constructor"]["call"](this), this["getString"] = function () {
return this["s"];
}, this["setString"] = function (_0x523241) {
this["hTLV"] = null, this["isModified"] = true, this["s"] = _0x523241, this["hV"] = stohex(this["s"]);
}, this["setStringHex"] = function (_0x4b7ad1) {
this["hTLV"] = null, this["isModified"] = true, this["s"] = null, this["hV"] = _0x4b7ad1;
}, this["getFreshValueHex"] = function () {
return this["hV"];
}, undefined !== _0x545af5 && ("string" == typeof _0x545af5 ? this["setString"](_0x545af5) : undefined !== _0x545af5["str"] ? this["setString"](_0x545af5["str"]) : undefined !== _0x545af5["hex"] && this["setStringHex"](_0x545af5["hex"]));
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DERAbstractString"], _0x2f02a5["asn1"]["ASN1Object"]);
_0x2f02a5["asn1"]["DERAbstractTime"] = function (_0x3e485a) {
_0x2f02a5["asn1"]["DERAbstractTime"]["superclass"]["constructor"]["call"](this);
this["localDateToUTC"] = function (_0x2349ab) {
return utc = _0x2349ab["getTime"]() + 60000 * _0x2349ab["getTimezoneOffset"](), new Date(utc);
};
this["formatDate"] = function (_0x4de640, _0x106cbb, _0x54ca82) {
var _0x2a9c6e = this["zeroPadding"],
_0x5cba9a = this["localDateToUTC"](_0x4de640),
_0xda3fe7 = String(_0x5cba9a["getFullYear"]());
"utc" == _0x106cbb && (_0xda3fe7 = _0xda3fe7["substr"](2, 2));
var _0x181800 = _0xda3fe7 + _0x2a9c6e(String(_0x5cba9a["getMonth"]() + 1), 2) + _0x2a9c6e(String(_0x5cba9a["getDate"]()), 2) + _0x2a9c6e(String(_0x5cba9a["getHours"]()), 2) + _0x2a9c6e(String(_0x5cba9a["getMinutes"]()), 2) + _0x2a9c6e(String(_0x5cba9a["getSeconds"]()), 2);
if (true === _0x54ca82) {
var _0x53fec8 = _0x5cba9a["getMilliseconds"]();
if (0 != _0x53fec8) {
var _0x3a9091 = _0x2a9c6e(String(_0x53fec8), 3);
_0x181800 = _0x181800 + "." + (_0x3a9091 = _0x3a9091["replace"](/+$/, ""));
}
}
return _0x181800 + "Z";
};
this["zeroPadding"] = function (_0x568a80, _0x3b884c) {
return _0x568a80["length"] >= _0x3b884c ? _0x568a80 : new Array(_0x3b884c - _0x568a80["length"] + 1)["join"]("0") + _0x568a80;
};
this["getString"] = function () {
return this["s"];
};
this["setString"] = function (_0x4d7947) {
this["hTLV"] = null, this["isModified"] = true, this["s"] = _0x4d7947, this["hV"] = stohex(_0x4d7947);
};
this["setByDateValue"] = function (_0x4763a7, _0x4ee5a5, _0x4b49e3, _0x4751e7, _0x442a39, _0x11000f) {
var _0x35b914 = new Date(Date["UTC"](_0x4763a7, _0x4ee5a5 - 1, _0x4b49e3, _0x4751e7, _0x442a39, _0x11000f, 0));
this["setByDate"](_0x35b914);
};
this["getFreshValueHex"] = function () {
return this["hV"];
};
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DERAbstractTime"], _0x2f02a5["asn1"]["ASN1Object"]);
_0x2f02a5["asn1"]["DERAbstractStructured"] = function (_0x67861f) {
_0x2f02a5["asn1"]["DERAbstractString"]["superclass"]["constructor"]["call"](this), this["setByASN1ObjectArray"] = function (_0x22cc43) {
this["hTLV"] = null, this["isModified"] = true, this["asn1Array"] = _0x22cc43;
}, this["appendASN1Object"] = function (_0xe45ec3) {
this["hTLV"] = null, this["isModified"] = true, this["asn1Array"]["push"](_0xe45ec3);
}, this["asn1Array"] = new Array(), undefined !== _0x67861f && undefined !== _0x67861f["array"] && (this["asn1Array"] = _0x67861f["array"]);
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DERAbstractStructured"], _0x2f02a5["asn1"]["ASN1Object"]);
_0x2f02a5["asn1"]["DERBoolean"] = function () {
_0x2f02a5["asn1"]["DERBoolean"]["superclass"]["constructor"]["call"](this), this["hT"] = "01", this["hTLV"] = "0101ff";
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DERBoolean"], _0x2f02a5["asn1"]["ASN1Object"]);
_0x2f02a5["asn1"]["DERInteger"] = function (_0x308af7) {
_0x2f02a5["asn1"]["DERInteger"]["superclass"]["constructor"]["call"](this), this["hT"] = "02", this["setByBigInteger"] = function (_0x271a44) {
this["hTLV"] = null, this["isModified"] = true, this["hV"] = _0x2f02a5["asn1"]["ASN1Util"]["bigIntToMinTwosComplementsHex"](_0x271a44);
}, this["setByInteger"] = function (_0x3a56cd) {
var _0x38e81a = new _0x2935af(String(_0x3a56cd), 10);
this["setByBigInteger"](_0x38e81a);
}, this["setValueHex"] = function (_0x11c150) {
this["hV"] = _0x11c150;
}, this["getFreshValueHex"] = function () {
return this["hV"];
}, undefined !== _0x308af7 && (undefined !== _0x308af7["bigint"] ? this["setByBigInteger"](_0x308af7["bigint"]) : undefined !== _0x308af7["int"] ? this["setByInteger"](_0x308af7["int"]) : "number" == typeof _0x308af7 ? this["setByInteger"](_0x308af7) : undefined !== _0x308af7["hex"] && this["setValueHex"](_0x308af7["hex"]));
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DERInteger"], _0x2f02a5["asn1"]["ASN1Object"]);
_0x2f02a5["asn1"]["DERBitString"] = function (_0x14b5e6) {
if (undefined !== _0x14b5e6 && undefined !== _0x14b5e6["obj"]) {
var _0x42353f = _0x2f02a5["asn1"]["ASN1Util"]["newObject"](_0x14b5e6["obj"]);
_0x14b5e6["hex"] = "00" + _0x42353f["getEncodedHex"]();
}
_0x2f02a5["asn1"]["DERBitString"]["superclass"]["constructor"]["call"](this), this["hT"] = "03", this["setHexValueIncludingUnusedBits"] = function (_0x349c4d) {
this["hTLV"] = null, this["isModified"] = true, this["hV"] = _0x349c4d;
}, this["setUnusedBitsAndHexValue"] = function (_0x4ef8fc, _0x444664) {
if (_0x4ef8fc < 0 || 7 < _0x4ef8fc) {
throw "unused bits shall be from 0 to 7: u = " + _0x4ef8fc;
}
var _0x3fb86b = "0" + _0x4ef8fc;
this["hTLV"] = null, this["isModified"] = true, this["hV"] = _0x3fb86b + _0x444664;
}, this["setByBinaryString"] = function (_0x1c0556) {
var _0x483edc = 8 - (_0x1c0556 = _0x1c0556["replace"](/0+$/, ""))["length"] % 8;
8 == _0x483edc && (_0x483edc = 0);
for (var _0x2e0909 = 0; _0x2e0909 <= _0x483edc; _0x2e0909++) _0x1c0556 += "0";
var _0x56ee31 = "";
for (_0x2e0909 = 0; _0x2e0909 < _0x1c0556["length"] - 1; _0x2e0909 += 8) {
var _0x23450d = _0x1c0556["substr"](_0x2e0909, 8),
_0x265248 = parseInt(_0x23450d, 2)["toString"](16);
1 == _0x265248["length"] && (_0x265248 = "0" + _0x265248), _0x56ee31 += _0x265248;
}
this["hTLV"] = null, this["isModified"] = true, this["hV"] = "0" + _0x483edc + _0x56ee31;
}, this["setByBooleanArray"] = function (_0x431fb6) {
for (var _0x2e32c5 = "", _0x2d85d7 = 0; _0x2d85d7 < _0x431fb6["length"]; _0x2d85d7++) _0x2e32c5 += 1 == _0x431fb6 ? "1" : "0";
this["setByBinaryString"](_0x2e32c5);
}, this["newFalseArray"] = function (_0x344f8f) {
for (var _0x540ed4 = new Array(_0x344f8f), _0x50e039 = 0; _0x50e039 < _0x344f8f; _0x50e039++) _0x540ed4 = false;
return _0x540ed4;
}, this["getFreshValueHex"] = function () {
return this["hV"];
}, undefined !== _0x14b5e6 && ("string" == typeof _0x14b5e6 && _0x14b5e6["toLowerCase"]()["match"](/^+$/) ? this["setHexValueIncludingUnusedBits"](_0x14b5e6) : undefined !== _0x14b5e6["hex"] ? this["setHexValueIncludingUnusedBits"](_0x14b5e6["hex"]) : undefined !== _0x14b5e6["bin"] ? this["setByBinaryString"](_0x14b5e6["bin"]) : undefined !== _0x14b5e6["array"] && this["setByBooleanArray"](_0x14b5e6["array"]));
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DERBitString"], _0x2f02a5["asn1"]["ASN1Object"]);
_0x2f02a5["asn1"]["DEROctetString"] = function (_0x443077) {
if (undefined !== _0x443077 && undefined !== _0x443077["obj"]) {
var _0xe36981 = _0x2f02a5["asn1"]["ASN1Util"]["newObject"](_0x443077["obj"]);
_0x443077["hex"] = _0xe36981["getEncodedHex"]();
}
_0x2f02a5["asn1"]["DEROctetString"]["superclass"]["constructor"]["call"](this, _0x443077), this["hT"] = "04";
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DEROctetString"], _0x2f02a5["asn1"]["DERAbstractString"]);
_0x2f02a5["asn1"]["DERNull"] = function () {
_0x2f02a5["asn1"]["DERNull"]["superclass"]["constructor"]["call"](this), this["hT"] = "05", this["hTLV"] = "0500";
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DERNull"], _0x2f02a5["asn1"]["ASN1Object"]);
_0x2f02a5["asn1"]["DERObjectIdentifier"] = function (_0x45f0a0) {
var _0x9f399 = function (_0x2bd6b2) {
var _0x491b72 = _0x2bd6b2["toString"](16);
return 1 == _0x491b72["length"] && (_0x491b72 = "0" + _0x491b72), _0x491b72;
},
_0x5949c2 = function (_0x4722d4) {
var _0x1898e = "",
_0x45a4ff = new _0x2935af(_0x4722d4, 10)["toString"](2),
_0x24b6ed = 7 - _0x45a4ff["length"] % 7;
7 == _0x24b6ed && (_0x24b6ed = 0);
for (var _0x1094f0 = "", _0x5c3350 = 0; _0x5c3350 < _0x24b6ed; _0x5c3350++) _0x1094f0 += "0";
for (_0x45a4ff = _0x1094f0 + _0x45a4ff, _0x5c3350 = 0; _0x5c3350 < _0x45a4ff["length"] - 1; _0x5c3350 += 7) {
var _0x520ee5 = _0x45a4ff["substr"](_0x5c3350, 7);
_0x5c3350 != _0x45a4ff["length"] - 7 && (_0x520ee5 = "1" + _0x520ee5), _0x1898e += _0x9f399(parseInt(_0x520ee5, 2));
}
return _0x1898e;
};
_0x2f02a5["asn1"]["DERObjectIdentifier"]["superclass"]["constructor"]["call"](this), this["hT"] = "06", this["setValueHex"] = function (_0x26f4c9) {
this["hTLV"] = null, this["isModified"] = true, this["s"] = null, this["hV"] = _0x26f4c9;
}, this["setValueOidString"] = function (_0x25cb5a) {
if (!_0x25cb5a["match"](/^+$/)) {
throw "malformed oid string: " + _0x25cb5a;
}
var _0x2614db = "",
_0x492f86 = _0x25cb5a["split"]("."),
_0x424dce = 40 * parseInt(_0x492f86) + parseInt(_0x492f86);
_0x2614db += _0x9f399(_0x424dce), _0x492f86["splice"](0, 2);
for (var _0x25c285 = 0; _0x25c285 < _0x492f86["length"]; _0x25c285++) _0x2614db += _0x5949c2(_0x492f86);
this["hTLV"] = null, this["isModified"] = true, this["s"] = null, this["hV"] = _0x2614db;
}, this["setValueName"] = function (_0x2eae42) {
var _0x14d959 = _0x2f02a5["asn1"]["x509"]["OID"]["name2oid"](_0x2eae42);
if ("" === _0x14d959) {
throw "DERObjectIdentifier oidName undefined: " + _0x2eae42;
}
this["setValueOidString"](_0x14d959);
}, this["getFreshValueHex"] = function () {
return this["hV"];
}, undefined !== _0x45f0a0 && ("string" == typeof _0x45f0a0 ? _0x45f0a0["match"](/^.+$/) ? this["setValueOidString"](_0x45f0a0) : this["setValueName"](_0x45f0a0) : undefined !== _0x45f0a0["oid"] ? this["setValueOidString"](_0x45f0a0["oid"]) : undefined !== _0x45f0a0["hex"] ? this["setValueHex"](_0x45f0a0["hex"]) : undefined !== _0x45f0a0["name"] && this["setValueName"](_0x45f0a0["name"]));
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DERObjectIdentifier"], _0x2f02a5["asn1"]["ASN1Object"]);
_0x2f02a5["asn1"]["DEREnumerated"] = function (_0x37e6d7) {
_0x2f02a5["asn1"]["DEREnumerated"]["superclass"]["constructor"]["call"](this), this["hT"] = "0a", this["setByBigInteger"] = function (_0x31f2a7) {
this["hTLV"] = null, this["isModified"] = true, this["hV"] = _0x2f02a5["asn1"]["ASN1Util"]["bigIntToMinTwosComplementsHex"](_0x31f2a7);
}, this["setByInteger"] = function (_0x3674ed) {
var _0x4a14b7 = new _0x2935af(String(_0x3674ed), 10);
this["setByBigInteger"](_0x4a14b7);
}, this["setValueHex"] = function (_0x3da022) {
this["hV"] = _0x3da022;
}, this["getFreshValueHex"] = function () {
return this["hV"];
}, undefined !== _0x37e6d7 && (undefined !== _0x37e6d7["int"] ? this["setByInteger"](_0x37e6d7["int"]) : "number" == typeof _0x37e6d7 ? this["setByInteger"](_0x37e6d7) : undefined !== _0x37e6d7["hex"] && this["setValueHex"](_0x37e6d7["hex"]));
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DEREnumerated"], _0x2f02a5["asn1"]["ASN1Object"]);
_0x2f02a5["asn1"]["DERUTF8String"] = function (_0x367654) {
_0x2f02a5["asn1"]["DERUTF8String"]["superclass"]["constructor"]["call"](this, _0x367654), this["hT"] = "0c";
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DERUTF8String"], _0x2f02a5["asn1"]["DERAbstractString"]);
_0x2f02a5["asn1"]["DERNumericString"] = function (_0x102996) {
_0x2f02a5["asn1"]["DERNumericString"]["superclass"]["constructor"]["call"](this, _0x102996), this["hT"] = "12";
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DERNumericString"], _0x2f02a5["asn1"]["DERAbstractString"]);
_0x2f02a5["asn1"]["DERPrintableString"] = function (_0x48a4e8) {
_0x2f02a5["asn1"]["DERPrintableString"]["superclass"]["constructor"]["call"](this, _0x48a4e8), this["hT"] = "13";
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DERPrintableString"], _0x2f02a5["asn1"]["DERAbstractString"]);
_0x2f02a5["asn1"]["DERTeletexString"] = function (_0x51e1c4) {
_0x2f02a5["asn1"]["DERTeletexString"]["superclass"]["constructor"]["call"](this, _0x51e1c4), this["hT"] = "14";
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DERTeletexString"], _0x2f02a5["asn1"]["DERAbstractString"]);
_0x2f02a5["asn1"]["DERIA5String"] = function (_0x41620d) {
_0x2f02a5["asn1"]["DERIA5String"]["superclass"]["constructor"]["call"](this, _0x41620d), this["hT"] = "16";
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DERIA5String"], _0x2f02a5["asn1"]["DERAbstractString"]);
_0x2f02a5["asn1"]["DERUTCTime"] = function (_0x2556d3) {
_0x2f02a5["asn1"]["DERUTCTime"]["superclass"]["constructor"]["call"](this, _0x2556d3), this["hT"] = "17", this["setByDate"] = function (_0x5b710b) {
this["hTLV"] = null, this["isModified"] = true, this["date"] = _0x5b710b, this["s"] = this["formatDate"](this["date"], "utc"), this["hV"] = stohex(this["s"]);
}, this["getFreshValueHex"] = function () {
return undefined === this["date"] && undefined === this["s"] && (this["date"] = new Date(), this["s"] = this["formatDate"](this["date"], "utc"), this["hV"] = stohex(this["s"])), this["hV"];
}, undefined !== _0x2556d3 && (undefined !== _0x2556d3["str"] ? this["setString"](_0x2556d3["str"]) : "string" == typeof _0x2556d3 && _0x2556d3["match"](/^{12}Z$/) ? this["setString"](_0x2556d3) : undefined !== _0x2556d3["hex"] ? this["setStringHex"](_0x2556d3["hex"]) : undefined !== _0x2556d3["date"] && this["setByDate"](_0x2556d3["date"]));
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DERUTCTime"], _0x2f02a5["asn1"]["DERAbstractTime"]);
_0x2f02a5["asn1"]["DERGeneralizedTime"] = function (_0x4bf687) {
_0x2f02a5["asn1"]["DERGeneralizedTime"]["superclass"]["constructor"]["call"](this, _0x4bf687);
this["hT"] = "18";
this["withMillis"] = false;
this["setByDate"] = function (_0x246a1b) {
this["hTLV"] = null, this["isModified"] = true, this["date"] = _0x246a1b, this["s"] = this["formatDate"](this["date"], "gen", this["withMillis"]), this["hV"] = stohex(this["s"]);
};
this["getFreshValueHex"] = function () {
return undefined === this["date"] && undefined === this["s"] && (this["date"] = new Date(), this["s"] = this["formatDate"](this["date"], "gen", this["withMillis"]), this["hV"] = stohex(this["s"])), this["hV"];
};
undefined !== _0x4bf687 && (undefined !== _0x4bf687["str"] ? this["setString"](_0x4bf687["str"]) : "string" == typeof _0x4bf687 && _0x4bf687["match"](/^{14}Z$/) ? this["setString"](_0x4bf687) : undefined !== _0x4bf687["hex"] ? this["setStringHex"](_0x4bf687["hex"]) : undefined !== _0x4bf687["date"] && this["setByDate"](_0x4bf687["date"]), true === _0x4bf687["millis"] && (this["withMillis"] = true));
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DERGeneralizedTime"], _0x2f02a5["asn1"]["DERAbstractTime"]);
_0x2f02a5["asn1"]["DERSequence"] = function (_0x126f30) {
_0x2f02a5["asn1"]["DERSequence"]["superclass"]["constructor"]["call"](this, _0x126f30), this["hT"] = "30", this["getFreshValueHex"] = function () {
for (var _0x126f30 = "", _0x184d55 = 0; _0x184d55 < this["asn1Array"]["length"]; _0x184d55++) _0x126f30 += this["asn1Array"]["getEncodedHex"]();
return this["hV"] = _0x126f30, this["hV"];
};
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DERSequence"], _0x2f02a5["asn1"]["DERAbstractStructured"]);
_0x2f02a5["asn1"]["DERSet"] = function (_0x58d390) {
_0x2f02a5["asn1"]["DERSet"]["superclass"]["constructor"]["call"](this, _0x58d390), this["hT"] = "31", this["sortFlag"] = true, this["getFreshValueHex"] = function () {
for (var _0x58d390 = new Array(), _0x4efcb8 = 0; _0x4efcb8 < this["asn1Array"]["length"]; _0x4efcb8++) _0x58d390["push"](this["asn1Array"]["getEncodedHex"]());
return 1 == this["sortFlag"] && _0x58d390["sort"](), this["hV"] = _0x58d390["join"](""), this["hV"];
}, undefined !== _0x58d390 && undefined !== _0x58d390["sortflag"] && 0 == _0x58d390["sortflag"] && (this["sortFlag"] = false);
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DERSet"], _0x2f02a5["asn1"]["DERAbstractStructured"]);
_0x2f02a5["asn1"]["DERTaggedObject"] = function (_0x1351db) {
_0x2f02a5["asn1"]["DERTaggedObject"]["superclass"]["constructor"]["call"](this), this["hT"] = "a0", this["hV"] = "", this["isExplicit"] = true, this["asn1Object"] = null, this["setASN1Object"] = function (_0x244761, _0x5b13dd, _0x433a39) {
this["hT"] = _0x5b13dd, this["isExplicit"] = _0x244761, this["asn1Object"] = _0x433a39, this["isExplicit"] ? (this["hV"] = this["asn1Object"]["getEncodedHex"](), this["hTLV"] = null, this["isModified"] = true) : (this["hV"] = null, this["hTLV"] = _0x433a39["getEncodedHex"](), this["hTLV"] = this["hTLV"]["replace"](/^../, _0x5b13dd), this["isModified"] = false);
}, this["getFreshValueHex"] = function () {
return this["hV"];
}, undefined !== _0x1351db && (undefined !== _0x1351db["tag"] && (this["hT"] = _0x1351db["tag"]), undefined !== _0x1351db["explicit"] && (this["isExplicit"] = _0x1351db["explicit"]), undefined !== _0x1351db["obj"] && (this["asn1Object"] = _0x1351db["obj"], this["setASN1Object"](this["isExplicit"], this["hT"], this["asn1Object"])));
};
_0x1bbd98["lang"]["extend"](_0x2f02a5["asn1"]["DERTaggedObject"], _0x2f02a5["asn1"]["ASN1Object"]);
var _0x41a492 = function (_0x33a578) {
function _0xb3f6eb(_0x24d672) {
var _0xe964c2 = _0x33a578["call"](this) || this;
return _0x24d672 && ("string" == typeof _0x24d672 ? _0xe964c2["parseKey"](_0x24d672) : (_0xb3f6eb["hasPrivateKeyProperty"](_0x24d672) || _0xb3f6eb["hasPublicKeyProperty"](_0x24d672)) && _0xe964c2["parsePropertiesFrom"](_0x24d672)), _0xe964c2;
}
return function (_0xddeca, _0x357b27) {
function _0x814063() {
this["constructor"] = _0xddeca;
}
_0x556c8d(_0xddeca, _0x357b27), _0xddeca["prototype"] = null === _0x357b27 ? Object["create"](_0x357b27) : (_0x814063["prototype"] = _0x357b27["prototype"], new _0x814063());
}(_0xb3f6eb, _0x33a578), _0xb3f6eb["prototype"]["parseKey"] = function (_0x2abee0) {
try {
var _0x53ddf0 = 0,
_0x286e7e = 0,
_0x39332d = /^\s*(?:\s*)+$/["test"](_0x2abee0) ? function (_0x4274ca) {
var _0xa344d5;
if (undefined === _0x465910) {
var _0x1e7d98 = "0123456789ABCDEF",
_0x2d9fcf = " \f\n\r\t \u2028\u2029";
for (_0x465910 = {}, _0xa344d5 = 0; _0xa344d5 < 16; ++_0xa344d5) _0x465910(_0xa344d5)] = _0xa344d5;
for (_0x1e7d98 = _0x1e7d98["toLowerCase"](), _0xa344d5 = 10; _0xa344d5 < 16; ++_0xa344d5) _0x465910(_0xa344d5)] = _0xa344d5;
for (_0xa344d5 = 0; _0xa344d5 < _0x2d9fcf["length"]; ++_0xa344d5) _0x465910(_0xa344d5)] = -1;
}
var _0x3ee697 = [],
_0x13a5fe = 0,
_0x111111 = 0;
for (_0xa344d5 = 0; _0xa344d5 < _0x4274ca["length"]; ++_0xa344d5) {
var _0x5947c6 = _0x4274ca["charAt"](_0xa344d5);
if ("=" == _0x5947c6) {
break;
}
if (-1 != (_0x5947c6 = _0x465910)) {
if (undefined === _0x5947c6) {
throw new Error("Illegal character at offset " + _0xa344d5);
}
_0x13a5fe |= _0x5947c6, 2 <= ++_0x111111 ? (_0x3ee697] = _0x13a5fe, _0x111111 = _0x13a5fe = 0) : _0x13a5fe <<= 4;
}
}
if (_0x111111) {
throw new Error("Hex encoding incomplete: 4 bits missing");
}
return _0x3ee697;
}(_0x2abee0) : _0x5a02a1["unarmor"](_0x2abee0),
_0x264f38 = _0x408860["decode"](_0x39332d);
if (3 === _0x264f38["sub"]["length"] && (_0x264f38 = _0x264f38["sub"]["sub"]), 9 === _0x264f38["sub"]["length"]) {
_0x53ddf0 = _0x264f38["sub"]["getHexStringValue"](), this["n"] = _0x5baf06(_0x53ddf0, 16), _0x286e7e = _0x264f38["sub"]["getHexStringValue"](), this["e"] = parseInt(_0x286e7e, 16);
var _0x3efe14 = _0x264f38["sub"]["getHexStringValue"]();
this["d"] = _0x5baf06(_0x3efe14, 16);
var _0x5a91df = _0x264f38["sub"]["getHexStringValue"]();
this["p"] = _0x5baf06(_0x5a91df, 16);
var _0x356d93 = _0x264f38["sub"]["getHexStringValue"]();
this["q"] = _0x5baf06(_0x356d93, 16);
var _0x5486e5 = _0x264f38["sub"]["getHexStringValue"]();
this["dmp1"] = _0x5baf06(_0x5486e5, 16);
var _0x21f4cd = _0x264f38["sub"]["getHexStringValue"]();
this["dmq1"] = _0x5baf06(_0x21f4cd, 16);
var _0x2d2630 = _0x264f38["sub"]["getHexStringValue"]();
this["coeff"] = _0x5baf06(_0x2d2630, 16);
} else {
if (2 !== _0x264f38["sub"]["length"]) {
return false;
}
var _0x277925 = _0x264f38["sub"]["sub"];
_0x53ddf0 = _0x277925["sub"]["getHexStringValue"](), this["n"] = _0x5baf06(_0x53ddf0, 16), _0x286e7e = _0x277925["sub"]["getHexStringValue"](), this["e"] = parseInt(_0x286e7e, 16);
}
return true;
} catch (_0xb7285e) {
return false;
}
}, _0xb3f6eb["prototype"]["getPrivateBaseKey"] = function () {
var _0x33a578 = {
"array": ["DERInteger"]({
"int": 0
}), new _0x2f02a5["asn1"]["DERInteger"]({
"bigint": this["n"]
}), new _0x2f02a5["asn1"]["DERInteger"]({
"int": this["e"]
}), new _0x2f02a5["asn1"]["DERInteger"]({
"bigint": this["d"]
}), new _0x2f02a5["asn1"]["DERInteger"]({
"bigint": this["p"]
}), new _0x2f02a5["asn1"]["DERInteger"]({
"bigint": this["q"]
}), new _0x2f02a5["asn1"]["DERInteger"]({
"bigint": this["dmp1"]
}), new _0x2f02a5["asn1"]["DERInteger"]({
"bigint": this["dmq1"]
}), new _0x2f02a5["asn1"]["DERInteger"]({
"bigint": this["coeff"]
})]
};
return new _0x2f02a5["asn1"]["DERSequence"](_0x33a578)["getEncodedHex"]();
}, _0xb3f6eb["prototype"]["getPrivateBaseKeyB64"] = function () {
return _0x125db2(this["getPrivateBaseKey"]());
}, _0xb3f6eb["prototype"]["getPublicBaseKey"] = function () {
var _0x33a578 = new _0x2f02a5["asn1"]["DERSequence"]({
"array": ["DERObjectIdentifier"]({
"oid": "1.2.840.113549.1.1.1"
}), new _0x2f02a5["asn1"]["DERNull"]()]
}),
_0x48af93 = new _0x2f02a5["asn1"]["DERSequence"]({
"array": ["DERInteger"]({
"bigint": this["n"]
}), new _0x2f02a5["asn1"]["DERInteger"]({
"int": this["e"]
})]
}),
_0x25edbb = new _0x2f02a5["asn1"]["DERBitString"]({
"hex": "00" + _0x48af93["getEncodedHex"]()
});
return new _0x2f02a5["asn1"]["DERSequence"]({
"array":
})["getEncodedHex"]();
}, _0xb3f6eb["prototype"]["getPublicBaseKeyB64"] = function () {
return _0x125db2(this["getPublicBaseKey"]());
}, _0xb3f6eb["wordwrap"] = function (_0x469c11, _0x2f5bfa) {
if (!_0x469c11) {
return _0x469c11;
}
var _0x37b50e = "(.{1," + (_0x2f5bfa = _0x2f5bfa || 64) + "})( +|$\n?)|(.{1," + _0x2f5bfa + "})";
return _0x469c11["match"](RegExp(_0x37b50e, "g"))["join"]("\n");
}, _0xb3f6eb["prototype"]["getPrivateKey"] = function () {
var _0x33a578 = "-----BEGIN RSA PRIVATE KEY-----\n";
return (_0x33a578 += _0xb3f6eb["wordwrap"](this["getPrivateBaseKeyB64"]()) + "\n") + "-----END RSA PRIVATE KEY-----";
}, _0xb3f6eb["prototype"]["getPublicKey"] = function () {
var _0x33a578 = "-----BEGIN PUBLIC KEY-----\n";
return (_0x33a578 += _0xb3f6eb["wordwrap"](this["getPublicBaseKeyB64"]()) + "\n") + "-----END PUBLIC KEY-----";
}, _0xb3f6eb["hasPublicKeyProperty"] = function (_0x32bb2b) {
return (_0x32bb2b = _0x32bb2b || {})["hasOwnProperty"]("n") && _0x32bb2b["hasOwnProperty"]("e");
}, _0xb3f6eb["hasPrivateKeyProperty"] = function (_0x101d27) {
return (_0x101d27 = _0x101d27 || {})["hasOwnProperty"]("n") && _0x101d27["hasOwnProperty"]("e") && _0x101d27["hasOwnProperty"]("d") && _0x101d27["hasOwnProperty"]("p") && _0x101d27["hasOwnProperty"]("q") && _0x101d27["hasOwnProperty"]("dmp1") && _0x101d27["hasOwnProperty"]("dmq1") && _0x101d27["hasOwnProperty"]("coeff");
}, _0xb3f6eb["prototype"]["parsePropertiesFrom"] = function (_0x19affd) {
this["n"] = _0x19affd["n"], this["e"] = _0x19affd["e"], _0x19affd["hasOwnProperty"]("d") && (this["d"] = _0x19affd["d"], this["p"] = _0x19affd["p"], this["q"] = _0x19affd["q"], this["dmp1"] = _0x19affd["dmp1"], this["dmq1"] = _0x19affd["dmq1"], this["coeff"] = _0x19affd["coeff"]);
}, _0xb3f6eb;
}(_0x56aa3c),
_0x4b4d2c = function () {
function _0x2f9c92(_0x19a9fb) {
_0x19a9fb = _0x19a9fb || {}, this["default_key_size"] = parseInt(_0x19a9fb["default_key_size"], 10) || 1024, this["default_public_exponent"] = _0x19a9fb["default_public_exponent"] || "010001", this["log"] = _0x19a9fb["log"] || false, this["key"] = null;
}
return _0x2f9c92["prototype"]["setKey"] = function (_0x1faf93) {
this["log"] && this["key"] && console["warn"]("A key was already set, overriding existing."), this["key"] = new _0x41a492(_0x1faf93);
}, _0x2f9c92["prototype"]["setPrivateKey"] = function (_0x40b233) {
this["setKey"](_0x40b233);
}, _0x2f9c92["prototype"]["setPublicKey"] = function (_0x3346c5) {
this["setKey"](_0x3346c5);
}, _0x2f9c92["prototype"]["decrypt"] = function (_0x5bbfaf) {
try {
return this["getKey"]()["decrypt"](_0x5c2128(_0x5bbfaf));
} catch (_0x47bbe7) {
return false;
}
}, _0x2f9c92["prototype"]["encrypt"] = function (_0x4c98fe) {
try {
return _0x125db2(this["getKey"]()["encrypt"](_0x4c98fe));
} catch (_0x206989) {
return false;
}
}, _0x2f9c92["prototype"]["sign"] = function (_0x42cd43, _0x32d28f, _0x2a76ad) {
try {
return _0x125db2(this["getKey"]()["sign"](_0x42cd43, _0x32d28f, _0x2a76ad));
} catch (_0x40c544) {
return false;
}
}, _0x2f9c92["prototype"]["verify"] = function (_0x4d5b24, _0x78dca0, _0x9fcf29) {
try {
return this["getKey"]()["verify"](_0x4d5b24, _0x5c2128(_0x78dca0), _0x9fcf29);
} catch (_0x80a5ee) {
return false;
}
}, _0x2f9c92["prototype"]["getKey"] = function (_0x3bdda3) {
if (!this["key"]) {
if (this["key"] = new _0x41a492(), _0x3bdda3 && "" === {}["toString"]["call"](_0x3bdda3)) {
return undefined;
}
this["key"]["generate"](this["default_key_size"], this["default_public_exponent"]);
}
return this["key"];
}, _0x2f9c92["prototype"]["getPrivateKey"] = function () {
return this["getKey"]()["getPrivateKey"]();
}, _0x2f9c92["prototype"]["getPrivateKeyB64"] = function () {
return this["getKey"]()["getPrivateBaseKeyB64"]();
}, _0x2f9c92["prototype"]["getPublicKey"] = function () {
return this["getKey"]()["getPublicKey"]();
}, _0x2f9c92["prototype"]["getPublicKeyB64"] = function () {
return this["getKey"]()["getPublicBaseKeyB64"]();
}, _0x2f9c92["version"] = "3.0.0-rc.1", _0x2f9c92;
}();
window["JSEncrypt"] = _0x4b4d2c, _0x20544c["JSEncrypt"] = _0x4b4d2c, _0x20544c["default"] = _0x4b4d2c, Object["defineProperty"](_0x20544c, "__esModule", {
"value": true
});
});
function _0x4f6d79(_0x50f9fa) {
const _0x506402 = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5GVku07yXCndaMS1evPIPyWwhbdWMVRqL4qg4OsKbzyTGmV4YkG8H0hwwrFLuPhqC5tL136aaizuL/lN5DRRbePct6syILOLLCBJ5J5rQyGr00l1zQvdNKYp4tT5EFlqw8tlPkibcsd5Ecc8sTYa77HxNeIa6DRuObC5H9t85ALJyDVZC3Y4ES/u61Q7LDnB3kG9MnXJsJiQxm1pLkE7Zfxy29d5JaXbbfwhCDSjE4+dUQoq2MVIt2qVjZSo5Hd/bAFGU1Lmc7GkFeLiLjNTOfECF52ms/dks92Wx/glfRuK4h/fcxtGB4Q2VXu5k68e/2uojs6jnFsMKVe+FVUDkQIDAQAB";
const _0xc7daa3 = new JSEncrypt();
_0xc7daa3["setPublicKey"](_0x506402);
return encodeURIComponent(_0xc7daa3["encrypt"](_0x50f9fa));
}
window["decrypt"] = _0x4f6d79;
此时这个js只是一部分,还有当面的js,将他们拼接在一起
这里的js会有一个环境的检验。所以要用replace将他替换掉,最终的请求代码
import requests
import re
import os
def main():
with open('0901.js', 'r', encoding='utf-8') as f:
script1 = f.read()
url = 'http://match.yuanrenxue.com/match/9'
response = requests.get(url)
sessionid = re.findall('(?<=sessionid=).+?(?=;)', response.headers['Set-Cookie'])
script2 = re.findall('(?<=<script type="application/javascript">).+?(?=</script>)', response.text).replace("global", 'yuge')
with open('0902.js', 'w', encoding='utf-8') as f:
f.write(script1+'\n')
f.write(script2+'\n')
f.write('console.log(document.cookie);')
f.write('process.exit();')
nodejs = os.popen('node 0902')
cookie = nodejs.read().replace('\n', '').replace('; path=/', '')
nodejs.close()
nums = 0
sums = 0
for page in range(1, 6):
url = 'http://match.yuanrenxue.com/api/match/9?page='+str(page)
headers = {
'cookie': 'sessionid='+sessionid+'; '+cookie,
'User-Agent': 'yuanrenxue.project'
}
response = requests.get(url, headers=headers).json()
for each in response['data']:
nums += 1
sums += each['value']
print(nums)
print(sums)
print(sums // nums)
# 店铺数:50
# 总评论数:245000
# 平均评论数:4900
if __name__ == '__main__':
main()
第十题【接口-查询参数-值加密】
打开浏览器f12抓包,然后打开第十题。
此时会在这个地方断下,如果直接禁用断点,然后继续执行,浏览器会异常卡顿,甚至崩溃,所以此时先改用Fiddler.exe进行抓包
因为过程过于繁琐,所以这里先贴出答案
保存js内容为【10.js】
window = global
var _yrxQ9C = ["call", "slice", "prototype", "type", "href", "floor", "string", "tylctrlaz}", "concat", "createElement", "readyState", "$_fr", "button", "removeChild", "safari", "$_fpn1", "clientData", "localStorage", "stringify", "onsuccess", "location", "getElementById", "submit", "hidden", "setAttribute", "http:", "open", "HTMLFormElement", "target", "style", "documentElement", "round", "apply", "hostname", "hasOwnProperty", "$_f1", "onreadystatechange", "FSSBB", "innerHTML", "setTimeout", "cookie", "addEventListener", "$_JQnh", "clearInterval", "visibility", "send", "charCodeAt", "protocol", "userAgent", "host", "$_f0", "getElementsByTagName", "EkcP", "load", "https:", "ceil", "pathname", "data", "toString", "document", "$_fh0", "$_vvCI", "port", "appVersion", "splice", "MicroMessenger", "number", "search", "indexedDB", "getTime", "replace", "transaction", "match", "indexOf", "keydown", "keyCode", "name", "$_cDro", "Math", "Request", "script", "appendChild", "___ts___", "removeEventListener", "origin", "fonts", "getAttribute", "ActiveXObject", "result", "$b_callHandler", "input", "timeStamp", "canvas", "setInterval", "body", "XMLHttpRequest", "function", "getContext", "fromCharCode", "split", "isFinite", "chrome", "decodeURIComponent", "nDhzt|Gz~vUDhzt|Gz~v", "Object.InjectedScript.evaluate", "jbscheme://", "GetAllResponseHeaders", "Keyboard", "Msxml2.XMLHTTP", "width", "forEach", "precision", "fontList", "bpa_aqhcfd+paannjrgdke", "/T7AyTrxoWxGd", "getClientDataInCookie", "dumpAll", "", "]><i></i><!-->", "utf-8", "FSSBA", "offsetX", "charging", "vertexPosArray", "{8iep<mhisH8iep<mhisBxqC \\lWv", "charAt", "alpha", "CREATE TABLE IF NOT EXISTS EkcP_t (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, value TEXT NOT NULL, UNIQUE (name))", "Microsoft.XMLHTTP", "cookieEnabled", "qrcklmDoExthWJiHAp1sVYKU3RFMQw8IGfPO92bvLNj.7zXBaSnu0TC6gy_4Ze5d{}|~ !#$%()*+,-;=?@[]^", "webstore", "fM~zgKgzt~m", "iz{nay{eglagf", "@debugger", "bindBuffer", "qfwcwpwzwdiqvo|us", "screenY", "(evaluating 'null')", "__anchor__", "mouseOver", "Gamepad", "Msxml2.XMLHTTP.5.0", "bb82kj", "createShader", "loaded", "x__:=9__1884_78=2/2.;", "none", "TRIANGLE_STRIP", "rzb2arqr{cvnyb", " height=6 width=1 type=application/x-shockwave-flash src=", "ARSession,AudioTrackList,BeforeInstallPromptEvent.prototype.KEYUP,BlobDownloadCallback,CDATASection.prototype.remove,CSSCharsetRule,CSSPrimitiveValue.CSS_VH,CanvasRenderingContext2D.prototype.webkitGetImageDataHD,ClickData,CloseEvent.prototype.initCloseEvent,Components.interfaces.ICometMarksExtension,DeviceOrientationEvent,Function.prototype.bind,GetPerfTests,HTMLDocument.prototype.createTouchList,HTMLFormElement.prototype.requestAutocomplete,HTMLFrameSetElement.prototype.hasPointerCapture,HTMLFrameSetElement.prototype.webkitRequestFullScreen,Intl,MTT_WKSetTextSizeIndex,MediaController,MediaEncryptedEvent,Notification,Object.prototype.__defineSetter__,Object.seal,Object.setPrototypeOf,OffscreenCanvasRenderingContext2D,Path2D.prototype.addPath,PaymentResponse,PerformancePaintTiming,PresentationConnectionCloseEvent,ReaderModeArticlePage,SVGGraphicsElement.prototype.mozRequestPointerLock,SVGPatternElement.SVG_UNIT_TYPE_OBJECTBOUNDINGBOX,ScreenOrientation,SogouLoginUtils,SourceBuffer,SourceBuffer.prototype.changeType,SpeechSynthesisUtterance,TextTrackList.prototype.getTrackById,UCWebExt,WebKitFlags,_WXJS,__~w}uXjihoo360_~w}QoP,__firefox__,__ksabCssCount,__opera,__sogou_secure_input,_double11_,chrome,chrome.app.InstallState,chrome.csi,console,defaultStatus,document.body.onmouseenter,document.body.onpage,document.body.style.backgroundBlendMode,document.body.style.lineBreak,document.body.style.minWidth,document.body.style.msTextSizeAdjust,document.body.style.textAlignLast,document.body.x-ms-acceleratorkey,document.defaultCharset,document.documentElement.onresize,document.fileCreatedDate,document.msCapsLockWarningOff,document.onmousemove,document.onselectionchange,document.scrollingElement.style.fontVariantNumeric,document.selection,document.selection.typeDetail,external,external.AddFavorite,external.IsSearchProviderInstalled,flyflow_wallpaper_js,getMatchedCSSRules,greentea,isNodeWhitespace,jesion,onerror,onmessage,onoperadetachedviewchange,openDatabase,password_manager_enabled,performance,showModalDialog,taobrowser_Event,weatherBridge,webkitAudioContext.prototype.close,webkitRequestFileSystem", "t~{t_szzvpoMxzg.ytxlatzy@al}aAtxpMxzg6yopepo1/Mxzg?p|bp~a.ytxlatzy3}lxp", "Msxml2.XMLHTTP.3.0", "getSources", "post", "mouseUp", "v>n8xk1ruu1x{v?xxuK>xpx~8|n", "FileReader", "msIndexedDB", "method", "readwrite", "bvdacqhudq", "parse", "t:zg.{{pl}lynp", "$_vJTp", "lineno", "data:", "charset", "rgba(240,110,53,0.4)", "Number", "DeviceMotionEvent", "mouseup", "Please enable cookie in your browser before you continue.", "mousedown", "windows-1252", "sessionStorage", "hzxeeIaxgmhfY_iaxgmhf", "onicecandidate", "content", "mimeTypes", "OPEN", "unicode", "null", "LOW_FLOAT", "n~bm;zuuva", "mGzcu}ksjw:~sgzVGzcu}ksjw:~sgz", "0000", "performance", "clientX", "useProgram", "beta", "touchmove", "sA{s{c", "h__fmm<k|xm|?kxf|Yfmm<nflmhfCL", "fillStyle", "cellular", "onload", "include", "linkProgram", "DeviceOrientationEvent", "parseInt", "jbscheme://queue_has_message", "toDataURL", "SEND", "escape", "addBehavior", "acceleration", "callback", "~snpdyE5fbm3mbzfs *I Zpouspm", "STATIC_DRAW", "Msxml2.XMLHTTP.6.0", "; expires=", "close", "getSupportedExtensions", "experimental-webgl", "getAllResponseHeaders", "#f82", "fillRect", "openDatabase", "meta", "eval", "$_YWTU", "y}khjxo|kxIk|gr{gzk", "<EMBED id=", "; Secure", "mouseMove", "toUpperCase", "({1,3}(\\.{1,3}){3}| (({1,4}:){7,7}{1,4}|({1,4}:){1,7}:|({1,4}:){1,6}:{1,4}|({1,4}:){1,5}(:{1,4}){1,2}|({1,4}:){1,4}(:{1,4}){1,3}|({1,4}:){1,3}(:{1,4}){1,4}|({1,4}:){1,2}(:{1,4}){1,5}|{1,4}:((:{1,4}){1,6})|:((:{1,4}){1,7}|:)|::(ffff(:0{1,4}){0,1}:){0,1}((25|(2|1{0,1}){0,1})\\.){3,3}(25|(2|1{0,1}){0,1})|({1,4}:){1,4}:((25|(2|1{0,1}){0,1})\\.){3,3}(25|(2|1{0,1}){0,1})) )", "createOffer", "unescape", "nEvr}C}rlveUEvr}C}rlveOg~P 4tgzivK 6bageb} OZYTszgP", "{gf_", "showModalDialog", "attribute vec2 attrVertex;varying vec2 varyinTexCoordinate;uniform vec2 uniformOffset;void main(){varyinTexCoordinate=attrVertex+uniformOffset;gl_Position=vec4(attrVertex,0,1);}", "scroll", "ethernet", "$_fb", "webkitRequestFileSystem", "\u0000", "i{pal>mddkyj{{f", "credentials", "q ?@BS", "", "(near '... null...')", "MediaStreamTrack", "error", "rows", "keyDown", "http://", "children", "z:>*yqI:>*yq", "message", " srflx ", "Open", "/:user_fonts", "f__|mR~{| ", "GetNextReqID", "stack", "y.g|k1iut2g|g1tzkxlgikHpkyout", "JSON", "$_ts", "setTime", "ARRAY_BUFFER", "z7+-I7ik*ywq", "plugins", "getServerDataInCookie", "position", "fontFamily", "iframe", "colorDepth", "attachEvent", "return a(", "b_Rdkdmhtl_HCD_Qdbnqcdq+_rdkdmhtl+b~kkRdkdmhtl", "setLocalDescription", "}ugngpkwo", "objectStoreNames", "then", "q46@vszfsdwqo+Dwpsdo| =oqvw|s E|w+3}}zxojj+Fsbro|o+8szfsdwqo >ses <D @b} WY Dvw|+dov}{o+<7 C{obd_8 dscd Bsuezob+49>@b}Qzwuvd+8szfsdwqo <D XW <wuvd 5hds|rsr+8szfs=_9|rwo+C53B}p}d}<wuvd 2}zr+?B =}vo|di E|wq}rs Bsuezob+4b}wr Co|c Dvow+;o||oro Co|uo{ =>+443 Eqvs|+qz}qyVTUZ_fURU+Co{ce|u;o||oroBsuezob+=9 <1>D9>7 2}zr+Co{ce|uCo|c>e{W< <wuvd+fsbro|o+8szfsdwqo>sesDvw|+C536ozzpoqy+Co{ce|u5{}xw+Dszeue Co|uo{ =>+3obb}wc 7}dvwq C3+6zi{s <wuvd B}p}d} <wuvd+C}=1Q4wuwd <wuvd+C}=3 Co|c Bsuezob+8IHwIeo|:+ccd+co{ce|uQco|cQ|e{XD+u{_{s|u{s|u+<}vwd ;o||oro+dw{sc |sg b}{o|+co{ce|uQco|cQ|e{X<+csbwtQ{}|}c~oqs+Co{ce|uCo|c>e{QWD Dvw|+3}z}b?CE9QHDvw|+4b}wr >ocyv Cvwtd 1zd+Co{ce|uDszeueBsuezob+2s|uozw ?DC+=9 <o|Dw|u_72 ?edcwrs IC+6J=wo}Ge_72U(TWT+vszfsQ|sesQbsuezob+CCD =srwe{+3}ebwsb >sg+;v{sb =}|rezywbw 2}zr+8szfsdwqo <D VW Ezdbo <wuvd 5hds|rsr+8szfsdwqo <D VY Ezdbo <wuvd+B}p}d} =srwe{+4b}wr Co|c 2}zr+u}eri+co|cQcsbwtQq}|rs|csrQzwuvd+C6w|rsb+|}d}Qco|cQqxyQ{srwe{+{wew+=B}qyi @B3 2}zr+1|rb}wr3z}qy Bsuezob+Co{ce|uCo|c>e{QX< <wuvd+co|cQcsbwtQdvw|+1o@o|uIosb+qoceoz+2> =}vo|di?D 2}zr+hQccd+>}d}Co|c=io|{obJoguiw+8szfsdwqo <D WW Dvw| 5hds|rsr+1cvzsiCqbw~d=D 1zd+>}d} Co|c 4sfo|ouobw E9+B}p}d} 3}|rs|csr 2}zr+B}p}d} =srwe{ 9dozwq+{wewsh+>}d} Co|c 7eb{eyvw E9+CCD Fwsd|o{scs <wuvd+<7_?bwio+viq}ttss+hQccdQezdbozwuvd+468sw1G is not an object", "localDescription", "getBattery", "self", "<!-- }", "rangeMax", "__#classType", "MEDIUM_FLOAT", "musuzw_", "objectStore", "$b_fetchQueue", "3jeALeSsa6", "getItem", "$b_onNativeResponse", "pushNotification", "AnalyserNode", "characterSet", "createDataChannel", "numItems", "boolean", "touchstart", "try{return (window instanceof Window);}catch(e){}", "isNaN", "form", "{\"optional\" : [ {\"RtpDataChannels\" : true} ]}", "applicationCache", "~XhZpouspmEXhZpouspm", "umkz~mrk>op|o}rLmkz~mrk_|op|o}rLmromu8yqsxLnom|ez~/kvvlkmu", "kmyva}j>}xxyd", "runtime", "tests", "mouseout", "RTCPeerConnection", "QQBrowser", "https://", "getShaderPrecisionFormat", "vertexAttribPointer", "Entity", "drawArrays", "fillText", "MSPointerEvent", "except", "external", "try{return __filename;}catch(e){}", "zij{nhjtwnjsyfynts", "$_ck", "vlaue", "onautocomplete", "uniform2f", "compileShader", "complete", "mozIndexedDB", "random", "anchor", "url(#default#userdata)", "behavior"]
var _yrxItP
var _yrx5XG = encodeURIComponent
var _yrxiv8 = unescape
var _yrxWOo = Array
var _yrxD3B = Array
var _yrxKni = Math
var _yrxp7X = String.prototype["charCodeAt"]
var _yrxpbG = String.fromCharCode
var _yrx6U9 = parseInt
var _yrxeFV = Date
_yrx03s] = new _yrxs6z()
function _yrxHR8(_yrx7jl) {
return _yrxiv8(_yrx5XG(_yrx7jl))
}
function _yrxTZR(_yrx7jl) {
var _yrxrqQ, _yrx$Kn = 0, _yrxmEu;
_yrx7jl = _yrxHR8(_yrx7jl);
_yrxmEu = _yrx7jl.length;
_yrxrqQ = new _yrxWOo(_yrxmEu);
_yrxmEu -= 3;
while (_yrx$Kn < _yrxmEu) {
_yrxrqQ = _yrxp7X](_yrx7jl, _yrx$Kn++);
_yrxrqQ = _yrxp7X](_yrx7jl, _yrx$Kn++);
_yrxrqQ = _yrxp7X](_yrx7jl, _yrx$Kn++);
_yrxrqQ = _yrxp7X](_yrx7jl, _yrx$Kn++)
}
_yrxmEu += 3;
while (_yrx$Kn < _yrxmEu)
_yrxrqQ = _yrxp7X](_yrx7jl, _yrx$Kn++);
return _yrxrqQ
}
function _yrxs6z() {
this._yrxS63 = _yrxrqQ;
this._yrxXPb = _yrx$Kn;
this._yrxa9O = ;
this._yrxPtU = ;
this._yrxM5F = _yrxmEu;
function _yrxrqQ(_yrx_cw) {
if (typeof _yrx_cw === _yrxQ9C)
_yrx_cw = _yrxTZR(_yrx_cw);
var _yrxrqQ = this._yrxNj0 = this._yrxNj0](_yrx_cw);
this._yrx2tg += _yrx_cw.length;
while (_yrxrqQ.length >= 64) {
this._yrxM5F(_yrxSVn(_yrxrqQ](0, 64)))
}
return this
}
function _yrx$Kn() {
var _yrxrqQ, _yrx$Kn = this._yrxNj0, _yrxmEu = this._yrx4r0, _yrx2LR = _yrxQ9C;
_yrx$Kn.push(0x80);
for (_yrxrqQ = _yrx$Kn.length + 2 * 4; _yrxrqQ & 0x3f; _yrxrqQ++) {
_yrx$Kn.push(0)
}
while (_yrx$Kn >= 64) {
this._yrxM5F(_yrxSVn(_yrx$Kn](0, 64)))
}
_yrx$Kn = _yrxSVn(_yrx$Kn);
_yrx$Kn.push(_yrxKni](this._yrx2tg * 8 / 0x100000000));
_yrx$Kn.push(this._yrx2tg * 8 | 0);
this._yrxM5F(_yrx$Kn);
_yrx2LR = _yrxmEu.length;
var _yrx3il = new _yrxWOo(_yrx2LR * 4);
for (var _yrxrqQ = _yrxItP = 0; _yrxrqQ < _yrx2LR;) {
var _yrxTXe = _yrxmEu;
_yrx3il = (_yrxTXe >>> 24) & 0xFF;
_yrx3il = (_yrxTXe >>> 16) & 0xFF;
_yrx3il = (_yrxTXe >>> 8) & 0xFF;
_yrx3il = _yrxTXe & 0xFF
}
return _yrx3il
}
function _yrxmEu(_yrx_cw) {
var _yrxrqQ, _yrx$Kn, _yrxmEu, _yrx2LR, _yrx3il, _yrxTXe, _yrxxj7, _yrxUSw = _yrx_cw](0),
_yrxWfm = this._yrx4r0, _yrx7ea, _yrxG5u, _yrx4Sf = _yrxQ9C;
_yrxmEu = _yrxWfm;
_yrx2LR = _yrxWfm;
_yrx3il = _yrxWfm;
_yrxTXe = _yrxWfm;
_yrxxj7 = _yrxWfm;
for (_yrxrqQ = 0; _yrxrqQ <= 79; _yrxrqQ++) {
if (_yrxrqQ >= 16) {
_yrx7ea = _yrxUSw ^ _yrxUSw ^ _yrxUSw ^ _yrxUSw;
_yrxUSw = (_yrx7ea << 1) | (_yrx7ea >>> 31)
}
_yrx7ea = (_yrxmEu << 5) | (_yrxmEu >>> 27);
if (_yrxrqQ <= 19) {
_yrxG5u = (_yrx2LR & _yrx3il) | (~_yrx2LR & _yrxTXe)
} else if (_yrxrqQ <= 39) {
_yrxG5u = _yrx2LR ^ _yrx3il ^ _yrxTXe
} else if (_yrxrqQ <= 59) {
_yrxG5u = (_yrx2LR & _yrx3il) | (_yrx2LR & _yrxTXe) | (_yrx3il & _yrxTXe)
} else if (_yrxrqQ <= 79) {
_yrxG5u = _yrx2LR ^ _yrx3il ^ _yrxTXe
}
_yrx$Kn = (_yrx7ea + _yrxG5u + _yrxxj7 + _yrxUSw + this._yrxPtU(_yrxrqQ / 20)]) | 0;
_yrxxj7 = _yrxTXe;
_yrxTXe = _yrx3il;
_yrx3il = (_yrx2LR << 30) | (_yrx2LR >>> 2);
_yrx2LR = _yrxmEu;
_yrxmEu = _yrx$Kn
}
_yrxWfm = (_yrxWfm + _yrxmEu) | 0;
_yrxWfm = (_yrxWfm + _yrx2LR) | 0;
_yrxWfm = (_yrxWfm + _yrx3il) | 0;
_yrxWfm = (_yrxWfm + _yrxTXe) | 0;
_yrxWfm = (_yrxWfm + _yrxxj7) | 0
}
}
function _yrxWKg() {
var _yrxrqQ = new _yrx03s();
for (var _yrx$Kn = 0; _yrx$Kn < arguments.length; _yrx$Kn++) {
_yrxrqQ._yrxS63(arguments)
}
return _yrxrqQ._yrxXPb()](0, 16)
}
function _yrx03s() {
this._yrx4r0 = this._yrxa9O](0);
this._yrxNj0 = [];
this._yrx2tg = 0
}
function _yrxSVn(_yrx7jl) {
var _yrxrqQ = _yrx7jl.length / 4
, _yrx$Kn = 0
, _yrxmEu = 0
, _yrx2LR = _yrx7jl.length;
if (_yrxrqQ < 1) {
_yrxrqQ = 1
}
try {
var _yrx3il = new _yrxWOo(_yrxrqQ)
} catch (e) {
}
var _yrx3il = new _yrxWOo(16);
while (_yrx$Kn < _yrx2LR) {
_yrx3il = ((_yrx7jl << 24) | (_yrx7jl << 16) | (_yrx7jl << 8) | (_yrx7jl))
}
return _yrx3il
}
var argarr, _yrxitF, _yrx$Ds
function aiding_5702(_yrxays, _yrxVMl, _yrxR7k, _yrxJ_8) {
window.$_ts = _yrxVMl;
$_ts = _yrxVMl;
argarr = _yrxVMl;
_yrx8LV();
_yrxRTX(_yrxays);
_yrxLYu();
_yrxsIp();
_yrx$tH();
_yrxitF = _yrxFV3(5);
_yrx$Ds = _yrx4U7(1, _yrxJ_8);
return _yrx$Ds
}
var _yrx2TP
function _yrx4U7(_yrxtJ1, armin) {
var _yrxmbl = _yrxE5D(_yrxB3q());
var _yrx9mg = four_array(709, _yrxmbl);
var _yrxiyJ = _yrx9mg;
var _yrxB40 = old_time();
var _yrx6um = _yrxTcE((_yrxozw / 1000), Math["floor"](_yrxB27 / 1000)]);
var _yrxFd8 = new_wp(268, _yrxtJ1, armin);
var _yrxpuh = _yrxS_G_691(691);
_yrx9mg = _yrx6um["concat"](_yrxpuh, _yrxFd8);
var _yrx8zK = _yrxlfm(_yrxiyJ["concat"](_yrx9mg));
for (_yrx2TP = 0; _yrx2TP < 64 + 1; _yrx2TP++) {
_yrxiyJ ^= _yrx8zK
}
var _yrxjKb = _yrxS_G_685(_yrxmbl);
var _yrxHwI = _yrxBXG(_yrx9mg, _yrxjKb);
return "4" + _yrx$tI(_yrxiyJ["concat"](_yrx8zK, _yrxHwI))
}
function _yrx$tI(_yrxtJ1, _yrxDnL) {
if (typeof _yrxtJ1 === "string")
_yrxtJ1 = _yrxQ$C(_yrxtJ1);
_yrxDnL = _yrxDnL || _yrxxDc;
var _yrxmbl, _yrx9mg = _yrxF6D = 0, _yrxiyJ = _yrxtJ1.length, _yrxB40, _yrx6um;
_yrxmbl = new _yrxD3B(Math["ceil"](_yrxiyJ * 4 / 3));
_yrxiyJ = _yrxtJ1.length - 2;
while (_yrx9mg < _yrxiyJ) {
_yrxB40 = _yrxtJ1;
_yrxmbl = _yrxDnL;
_yrx6um = _yrxtJ1;
_yrxmbl = _yrxDnL[(_yrxB40 & 3) << 4 | _yrx6um >> 4];
_yrxB40 = _yrxtJ1;
_yrxmbl = _yrxDnL[(_yrx6um & 15) << 2 | _yrxB40 >> 6];
_yrxmbl = _yrxDnL
}
if (_yrx9mg < _yrxtJ1.length) {
_yrxB40 = _yrxtJ1;
_yrxmbl = _yrxDnL;
_yrx6um = _yrxtJ1[++_yrx9mg];
_yrxmbl = _yrxDnL[(_yrxB40 & 3) << 4 | _yrx6um >> 4];
if (_yrx6um !== aiding_arg1) {
_yrxmbl = _yrxDnL[(_yrx6um & 15) << 2]
}
}
return _yrxmbl.join("")
}
function _yrxBXG(_yrxtJ1, _yrxDnL, _yrxMd3) {
if (typeof _yrxtJ1 === "string")
_yrxtJ1 = _yrxQ$C(_yrxtJ1);
var _yrxmbl = _yrxUQA(_yrxDnL, _yrxMd3);
return _yrxmbl._yrxJo8(_yrxtJ1, true)
}
var _yrxZ_m
function _yrxS_G_685(_yrxvAM) {
_yrx$8Y["prototype"] = new _yrxNG6();
var _yrxC2_ = _yrxr_F(_yrxvAM, _yrxnmu(_yrxvAM));
var _yrx9rO = _yrxr_F(_yrxams(_yrxT8b()));
var _yrxnRw = [];
for (_yrxZ_m = 0; _yrxZ_m < 16; _yrxZ_m++) {
_yrxnRw = _yrxC2_;
_yrxnRw = _yrx9rO
}
return _yrxnRw
}
function _yrxams(_yrxvAM) {
var _yrxC2_ = _yrxvAM["slice"](0);
if (_yrxC2_.length < 5) {
return
}
var _yrx9rO = _yrxC2_.pop();
var _yrxnRw = 0
, _yrxZ_m = _yrxC2_.length;
while (_yrxnRw < _yrxZ_m) {
_yrxC2_ ^= _yrx9rO
}
var _yrxdpH = _yrxC2_.length - 4;
function _yrxHnj() {
_yrxdtn = Date;
return window.Math["ceil"](new _yrxdtn()["getTime"]() / 1000)
}
var _yrxlEA = _yrxHnj() - _yrxOFj(_yrxC2_["slice"](_yrxdpH));
_yrxC2_ = _yrxC2_["slice"](0, _yrxdpH);
var _yrx_Uy = window.Math["floor"](window["Math"].log(_yrxlEA / 1.164 + 1));
var _yrxCmO = _yrxC2_.length;
var _yrx6kn = ]];
_yrxnRw = 0;
while (_yrxnRw < _yrxCmO) {
_yrxC2_ = _yrx_Uy | _yrxC2_ ^ _yrx6kn
}
// _yrxKFl(8, _yrx_Uy);
return _yrxC2_
}
function _yrxT8b() {
var _yrxC2_ = _yrxdJ4(_yrxkr0(19) + $_ts]);
return _yrxM3E(_yrxC2_)
}
var _yrxdtn
function _yrxM3E(_yrxvAM) {
var _yrxC2_ = window.ddd + window.aaa;
function _yrxHnj() {
_yrxdtn = Date;
return window.Math["ceil"]((new _yrxdtn()["getTime"]() / 1000))
}
function _yrxcAb(_yrxvAM) {
return
}
_yrxvAM = _yrxvAM["concat"](_yrxcAb(_yrxHnj()));
for (var _yrx9rO = 0; _yrx9rO < _yrxvAM.length; _yrx9rO++) {
_yrxvAM ^= _yrxC2_
}
_yrxvAM = _yrxC2_;
return _yrxvAM
}
function _yrxnmu(_yrxvAM) {
var _yrxC2_ = _yrxvAM["slice"](0, 16), _yrx9rO, _yrxnRw = 0, _yrxZ_m, _yrxdpH = "abs";
getout(_yrxC2_);
_yrxZ_m = _yrxC2_.length;
while (_yrxnRw < _yrxZ_m) {
_yrx9rO = Math["abs"](_yrxC2_);
_yrxC2_ = _yrx9rO > 256 ? 256 : _yrx9rO
}
return _yrxC2_
}
function getout(val) {
function _yrxRcp(_yrxgKO, _yrxcmf) {
return Math.abs(_yrxgKO) % _yrxcmf
}
function _yrxVCU(_yrxlWr) {
_yrxlWr = _yrxgeY(_yrxlWr);
var _yrxPjI = _yrxlWr;
var _yrxPjI = _yrxXzB(_yrxlWr);
var _yrxBEW = _yrxKIo(_yrxlWr);
var _yrxBEW = _yrxOig();
_yrxlWr, 16)] = _yrxlWr;
_yrxlWr = _yrxaXm() - _yrxlWr;
_yrxthy(_yrxlWr);
_yrxlWr = _yrxdb7() - _yrxlWr;
return _yrxlWr, 16)]
}
function _yrx1hH(_yrxlWr) {
_yrxlWr = _yrxeEr();
_yrxlWr = _yrxjJR();
var _yrxPjI = _yrx7v_();
var _yrxljo = _yrxx0X();
return _yrxOig() + _yrxSA8()
}
function _yrxeEr() {
return 2
}
function _yrxaXm() {
return 9
}
function _yrxjJR() {
return 15
}
function _yrx7v_() {
return 8
}
function _yrxx0X() {
return 6
}
function _yrxOig() {
return 13
}
function _yrxSA8() {
return 3
}
function _yrxgeY(_yrxlWr) {
if (_yrxUje()) {
_yrxlWr = _yrxx0X()
}
_yrxlWr = _yrx8Vh();
var _yrxljo = _yrxeEr();
if (_yrxUje()) {
_yrxlWr = _yrxdb7()
}
_yrxlWr = _yrx6$O();
_yrx5RZ(_yrxlWr);
return _yrxtWM(_yrxlWr)
}
function _yrxUje() {
return 5
}
function _yrx8Vh() {
return 14
}
function _yrxdb7() {
return 1
}
function _yrxmFi() {
return 0
}
function _yrx6$O() {
return 12
}
function _yrx5RZ(_yrxlWr) {
var _yrxBEW = _yrxoAL();
var _yrxljo = _yrxOig();
var _yrxljo = _yrxaXm();
_yrxlWr = _yrx$Eu();
return _yrx7v_()
}
function _yrxoAL() {
return 7
}
function _yrx$Eu() {
return 10
}
function _yrxtWM(_yrxlWr) {
_yrxlWr = _yrxSA8();
_yrxlWr = _yrxjJR();
_yrxlWr = _yrx7v_();
return _yrxx0X()
}
function _yrxXzB(_yrxlWr) {
_yrxlWr = _yrxg1K();
_yrxlWr = _yrxoAL();
_yrxNDw(_yrxlWr);
_yrxvpX(_yrxlWr);
return _yrxUje()
}
function _yrxg1K() {
return 11
}
function _yrxNDw(_yrxlWr) {
_yrxlWr = _yrxaXm();
_yrxlWr = _yrxUje();
var _yrxBEW = _yrxx0X();
var _yrxPjI = _yrxya1();
_yrxlWr = _yrxmFi();
return _yrx8Vh()
}
function _yrxya1() {
return 4
}
function _yrxvpX(_yrxlWr) {
_yrxlWr = _yrxdb7();
_yrxlWr = _yrxOig();
_yrxlWr = _yrxaXm();
return _yrxjJR()
}
function _yrxKIo(_yrxlWr) {
var _yrxPjI = _yrxSA8();
var _yrxPjI = _yrxaXm();
_yrxlWr = _yrxUje();
_yrxlWr = _yrxdb7();
return _yrxoAL()
}
function _yrxthy(_yrxlWr) {
var _yrxPjI = _yrx$Eu();
if (_yrxI5n(_yrxlWr)) {
_yrxlWr = _yrxaXm()
}
var _yrxljo = _yrx6$O();
if (_yrxlWr) {
if (_yrxSA8()) {
var _yrxPjI = _yrx$Eu()
}
}
_yrxO7$(_yrxlWr);
_yrxlWr = _yrxOig() + _yrxSA8();
_yrxmsC(_yrxlWr);
var _yrxljo = _yrxOig();
return _yrxlWr
}
function _yrxI5n(_yrxlWr) {
_yrxlWr = _yrxSA8();
var _yrxljo = _yrx6$O();
var _yrxPjI = _yrx$Eu();
_yrxlWr = _yrxoAL();
return _yrxOig()
}
function _yrxO7$(_yrxlWr) {
var _yrxljo = _yrx7v_();
var _yrxljo = _yrxSA8();
if (_yrxjJR()) {
var _yrxBEW = _yrxx0X()
}
if (_yrx6$O()) {
_yrxlWr = _yrxdb7()
}
var _yrxPjI = _yrxjJR();
var _yrxPjI = _yrxUje();
return _yrxlWr
}
function _yrxmsC(_yrxlWr) {
_yrxlWr = _yrx$Eu();
_yrxlWr = _yrxoAL();
_yrxlWr = _yrxSA8();
_yrxlWr = _yrx6$O();
return _yrxzDC(_yrxlWr)
}
function _yrxzDC(_yrxlWr) {
_yrxlWr = _yrxoAL();
_yrxlWr = _yrxmFi();
var _yrxljo = _yrxUje();
var _yrxPjI = _yrxg1K();
return _yrxdb7()
}
return _yrxVCU(val)
}
function _yrxr_F() {
var _yrxC2_ = new _yrx$8Y();
for (var _yrx9rO = 0; _yrx9rO < arguments.length; _yrx9rO++) {
_yrxC2_._yrxdMZ(arguments)
}
return _yrxC2_._yrx5nv()["slice"](0, 16)
}
function _yrx$8Y() {
this._yrxg2p = this._yrxOTj["slice"](0);
this._yrxJLT = [];
this._yrx8H0 = 0
}
var _yrxIE7
function _yrxOFj(_yrxvAM) {
var _yrxC2_ = _yrxvAM.length / 4
, _yrx9rO = 0
, _yrxnRw = 0
, _yrxZ_m = _yrxvAM.length;
_yrxseo = Array;
var _yrxdpH = new _yrxseo(_yrxC2_);
while (_yrx9rO < _yrxZ_m) {
_yrxdpH = _yrxvAM << 24 | _yrxvAM << 16 | _yrxvAM << 8 | _yrxvAM
}
return _yrxdpH
}
function _yrxNG6() {
this._yrxdMZ = _yrxC2_;
this._yrx5nv = _yrx9rO;
this._yrxOTj = ;
this._yrxXCT = ;
this._yrxhCw = _yrxnRw;
function _yrxC2_(_yrx6fP) {
if (typeof _yrx6fP === "string")
_yrx6fP = _yrxdqV(_yrx6fP);
var _yrxC2_ = this._yrxJLT = this._yrxJLT["concat"](_yrx6fP);
this._yrx8H0 += _yrx6fP.length;
while (_yrxC2_.length >= 64) {
this._yrxhCw(_yrxOFj(_yrxC2_["splice"](0, 64)))
}
return this
}
function _yrx9rO() {
var _yrxC2_, _yrx9rO = this._yrxJLT, _yrxnRw = this._yrxg2p, _yrxZ_m = "length";
_yrx9rO.push(128);
for (_yrxC2_ = _yrx9rO.length + 2 * 4; _yrxC2_ & 63; _yrxC2_++) {
_yrx9rO.push(0)
}
while (_yrx9rO >= 64) {
this._yrxhCw(_yrxOFj(_yrx9rO["splice"](0, 64)))
}
_yrx9rO = _yrxOFj(_yrx9rO);
_yrx9rO.push(Math["floor"](this._yrx8H0 * 8 / 4294967296));
_yrx9rO.push(this._yrx8H0 * 8 | 0);
this._yrxhCw(_yrx9rO);
_yrxZ_m = _yrxnRw.length;
var _yrxdpH = new _yrxseo(_yrxZ_m * 4);
for (var _yrxC2_ = _yrxIE7 = 0; _yrxC2_ < _yrxZ_m;) {
var _yrxlEA = _yrxnRw;
_yrxdpH = _yrxlEA >>> 24 & 255;
_yrxdpH = _yrxlEA >>> 16 & 255;
_yrxdpH = _yrxlEA >>> 8 & 255;
_yrxdpH = _yrxlEA & 255
}
return _yrxdpH
}
function _yrxnRw(_yrx6fP) {
var _yrxC2_, _yrx9rO, _yrxnRw, _yrxZ_m, _yrxdpH, _yrxlEA, _yrx_Uy, _yrxCmO = _yrx6fP["slice"](0),
_yrx6kn = this._yrxg2p, _yrx5TB, _yrxSpK, _yrxBC1 = "floor";
_yrxnRw = _yrx6kn;
_yrxZ_m = _yrx6kn;
_yrxdpH = _yrx6kn;
_yrxlEA = _yrx6kn;
_yrx_Uy = _yrx6kn;
for (_yrxC2_ = 0; _yrxC2_ <= 79; _yrxC2_++) {
if (_yrxC2_ >= 16) {
_yrx5TB = _yrxCmO ^ _yrxCmO ^ _yrxCmO ^ _yrxCmO;
_yrxCmO = _yrx5TB << 1 | _yrx5TB >>> 31
}
_yrx5TB = _yrxnRw << 5 | _yrxnRw >>> 27;
if (_yrxC2_ <= 19) {
_yrxSpK = _yrxZ_m & _yrxdpH | ~_yrxZ_m & _yrxlEA
} else if (_yrxC2_ <= 39) {
_yrxSpK = _yrxZ_m ^ _yrxdpH ^ _yrxlEA
} else if (_yrxC2_ <= 59) {
_yrxSpK = _yrxZ_m & _yrxdpH | _yrxZ_m & _yrxlEA | _yrxdpH & _yrxlEA
} else if (_yrxC2_ <= 79) {
_yrxSpK = _yrxZ_m ^ _yrxdpH ^ _yrxlEA
}
_yrx9rO = _yrx5TB + _yrxSpK + _yrx_Uy + _yrxCmO + this._yrxXCT(_yrxC2_ / 20)] | 0;
_yrx_Uy = _yrxlEA;
_yrxlEA = _yrxdpH;
_yrxdpH = _yrxZ_m << 30 | _yrxZ_m >>> 2;
_yrxZ_m = _yrxnRw;
_yrxnRw = _yrx9rO
}
_yrx6kn = _yrx6kn + _yrxnRw | 0;
_yrx6kn = _yrx6kn + _yrxZ_m | 0;
_yrx6kn = _yrx6kn + _yrxdpH | 0;
_yrx6kn = _yrx6kn + _yrxlEA | 0;
_yrx6kn = _yrx6kn + _yrx_Uy | 0
}
}
var _yrxseo = Array
function _yrxdqV(_yrxvAM) {
var _yrxC2_, _yrx9rO = 0, _yrxnRw;
_yrxvAM = _yrxeFV(_yrxvAM);
_yrxnRw = _yrxvAM.length;
_yrxC2_ = new _yrxseo(_yrxnRw);
_yrxnRw -= 3;
while (_yrx9rO < _yrxnRw) {
_yrxC2_ = String.prototype["charCodeAt"]["call"](_yrxvAM, _yrx9rO++);
_yrxC2_ = String.prototype["charCodeAt"]["call"](_yrxvAM, _yrx9rO++);
_yrxC2_ = String.prototype["charCodeAt"]["call"](_yrxvAM, _yrx9rO++);
_yrxC2_ = String.prototype["charCodeAt"]["call"](_yrxvAM, _yrx9rO++)
}
_yrxnRw += 3;
while (_yrx9rO < _yrxnRw)
_yrxC2_ = String.prototype["charCodeAt"]["call"](_yrxvAM, _yrx9rO++);
return _yrxC2_
}
var _yrxpP9 =
function _yrxlfm(_yrxtJ1) {
function _yrxu35() {
var _yrxmbl = [];
for (var _yrx9mg = 0; _yrx9mg < 256; ++_yrx9mg) {
var _yrxiyJ = _yrx9mg;
for (var _yrxB40 = 0; _yrxB40 < 8; ++_yrxB40) {
if ((_yrxiyJ & 128) !== 0)
_yrxiyJ = _yrxiyJ << 1 ^ 7;
else
_yrxiyJ <<= 1
}
_yrxmbl = _yrxiyJ & 255
}
return _yrxmbl
}
function _yrx$q8(_yrxtJ1) {
if (typeof _yrxtJ1 === "string")
_yrxtJ1 = _yrxQ$C(_yrxtJ1);
var _yrxmbl = $_ts] || ($_ts] = _yrxu35());
var _yrx9mg = 0
, _yrxiyJ = _yrxtJ1.length
, _yrxB40 = 0;
while (_yrxB40 < _yrxiyJ) {
_yrx9mg = _yrxmbl[(_yrx9mg ^ _yrxtJ1) & 255]
}
return _yrx9mg
}
if (typeof _yrxtJ1 === "string")
_yrxtJ1 = _yrxQ$C(_yrxtJ1);
_yrxtJ1 = _yrxtJ1["concat"](_yrxpP9);
return _yrx$q8(_yrxtJ1)
}
function _yrxQ$C(_yrxtJ1) {
var _yrxmbl, _yrx9mg = 0, _yrxiyJ;
_yrxtJ1 = _yrxH3$(_yrxtJ1);
_yrxiyJ = _yrxtJ1.length;
_yrxmbl = new _yrxD3B(_yrxiyJ);
_yrxiyJ -= 3;
while (_yrx9mg < _yrxiyJ) {
_yrxmbl = String.prototype["charCodeAt"]["call"](_yrxtJ1, _yrx9mg++);
_yrxmbl = String.prototype["charCodeAt"]["call"](_yrxtJ1, _yrx9mg++);
_yrxmbl = String.prototype["charCodeAt"]["call"](_yrxtJ1, _yrx9mg++);
_yrxmbl = String.prototype["charCodeAt"]["call"](_yrxtJ1, _yrx9mg++)
}
_yrxiyJ += 3;
while (_yrx9mg < _yrxiyJ)
_yrxmbl = String.prototype["charCodeAt"]["call"](_yrxtJ1, _yrx9mg++);
return _yrxmbl
}
function _yrxS_G_691() {
function _yrx6Xk() {
var _yrxmbl = _yrxdJ4(_yrxkr0(22) + $_ts]);
return _yrxmbl
}
var _yrxmbl = _yrx6Xk();
return _yrxmbl["slice"](0, 4)
}
var _yrxiyJ
function new_wp(_yrx_ol, _yrxtJ1, armin) {
var _yrxB40 = new _yrxD3B(128)
, _yrxmbl = 0;
_yrxB40 = 254;
_yrxB40 = 3;
_yrxB40 = _yrxtJ1;
var _yrx6um = _yrxmbl++;
_yrxB40 = undefined;
_yrxB40 = ;
_yrxB40 = 14;
_yrxB40 = 1;
_yrxB40 = ts_four(668, armin);
_yrxB40 = 0;
_yrxB40 = _yrxeCo;
_yrxB40 = 5;
_yrxiyJ = 66112;
_yrxB40 = _yrxSth(_yrxiyJ);
_yrxB40 = 239;
_yrxB40["splice"](_yrxmbl, _yrxB40.length - _yrxmbl);
return Array["prototype"].concat["apply"]([], _yrxB40)
}
function ts_four(tt, armin) {
var _yrxmbl = _yrxdJ4($_ts]);
return _yrxmbl["concat"](armin)
}
function old_time() {
return _yrxozw + _yrxYGj() - _yrxB27
}
var _yrxB40, _yrx6um, _yrxFd8, _yrx8zK
function four_array($zC, _yrxtJ1, _yrxDnL, _yrxMd3) {
var _yrxmbl = aiding_arg1;
var _yrx9mg = "";
var _yrxiyJ = _yrx6fp();
_yrxmbl = String.prototype["charAt"]["call"](_yrxiyJ, 0);
_yrxB40 = _yrxdJ4(String.prototype["substring"]["call"](_yrxiyJ, 1));
_yrx6um = _yrxB40;
for (_yrxFd8 = 0; _yrxFd8 < 64 + 1; _yrxFd8++) {
_yrxB40 ^= _yrx6um
}
_yrx9mg = _yrxB40["slice"](0, 64 + 1);
_yrx8zK = _yrxB40["slice"](64 + 2);
return
}
function _yrx6fp() {
return _yrxitF
}
function _yrxB3q() {
var _yrxmbl = _yrxdJ4(_yrxkr0(21) + $_ts]);
// _yrxMi4(4096, _yrxmbl.length !== 32);
return _yrxa$o(_yrxmbl)
}
var _yrx9mg, _yrxeCo
function _yrx$tH() {
var _yrxiyJ = _yrxkr0(26);
_yrx9mg = _yrxRaI_78(78, _yrxiyJ);
_yrxeCo = _yrx9mg
}
var _yrxmbl
function _yrxRaI_78(_yrx8LV, _yrxB7w) {
_yrxmbl = _yrxGgv(_yrxB7w, _yrx5ih());
return _yrxmbl
}
function _yrxGgv(_yrxtJ1, _yrxDnL) {
var _yrxmbl = _yrxdJ4(_yrxtJ1);
var _yrx9mg = new _yrxUQA(_yrxDnL);
return _yrx9mg._yrxCxm(_yrxmbl, true)
}
function _yrxUQA(_yrxtJ1, _yrxDnL) {
var _yrxmbl = _yrxdZQ()
, _yrxqAs = _yrxmbl
, _yrxPYy = _yrxmbl;
if (!_yrxqAs && !_yrxqAs) {
_yrxyum(_yrxDnL, _yrxqAs, _yrxPYy)
}
var _yrxs0x = _yrxRi8(_yrxtJ1, _yrxqAs, _yrxPYy);
function _yrx9mg(_yrxB7w, _yrxxAF) {
var _yrxmbl = Math["floor"](_yrxB7w.length / 16) + 1, _yrx9mg, _yrxiyJ = [], _yrxB40 = 16 - _yrxB7w.length % 16,
_yrx6um, _yrxFd8;
if (_yrxxAF) {
_yrxiyJ = _yrx6um = _yrxqge()
}
var _yrx8zK = _yrxB7w["slice"](0);
_yrxFd8 = _yrxB7w.length + _yrxB40;
for (_yrx9mg = _yrxB7w.length; _yrx9mg < _yrxFd8;)
_yrx8zK = _yrxB40;
_yrx8zK = _yrx6Vr(_yrx8zK);
for (_yrx9mg = 0; _yrx9mg < _yrxmbl;) {
_yrxFd8 = _yrx8zK["slice"](_yrx9mg << 2, ++_yrx9mg << 2);
_yrxFd8 = _yrx6um ? _yrxznI(_yrxFd8, _yrx6um) : _yrxFd8;
_yrx6um = _yrxbN0(_yrxs0x, _yrxFd8, 0, _yrxqAs);
_yrxiyJ = _yrxiyJ["concat"](_yrx6um)
}
return _yrxTcE(_yrxiyJ)
}
function _yrxiyJ(_yrxB7w, _yrxxAF) {
var _yrxmbl, _yrx9mg, _yrxiyJ, _yrxB40, _yrx6um = [], _yrxFd8, _yrx8zK;
_yrxB7w = _yrx6Vr(_yrxB7w);
if (_yrxxAF) {
_yrx8zK = _yrxB7w["slice"](0, 4);
_yrxB7w = _yrxB7w["slice"](4)
}
_yrxmbl = _yrxB7w.length / 4;
for (_yrx9mg = 0; _yrx9mg < _yrxmbl;) {
_yrxB40 = _yrxB7w["slice"](_yrx9mg << 2, ++_yrx9mg << 2);
_yrxiyJ = _yrxbN0(_yrxs0x, _yrxB40, 1, _yrxPYy);
_yrx6um = _yrx6um["concat"](_yrx8zK ? _yrxznI(_yrxiyJ, _yrx8zK) : _yrxiyJ);
_yrx8zK = _yrxB40
}
_yrx6um = _yrxTcE(_yrx6um);
_yrxFd8 = _yrx6um;
_yrx6um["splice"](_yrx6um.length - _yrxFd8, _yrxFd8);
return _yrx6um
}
var _yrxB40 = {};
_yrxB40._yrxJo8 = _yrx9mg;
_yrxB40._yrxCxm = _yrxiyJ;
return _yrxB40
}
var _yrxF6D
function _yrxTcE(_yrxtJ1) {
var _yrxmbl = _yrxtJ1.length, _yrx9mg = _yrxF6D = 0, _yrxiyJ = _yrxtJ1.length * 4, _yrxB40, _yrx6um;
_yrx6um = new _yrxD3B(_yrxiyJ);
while (_yrx9mg < _yrxmbl) {
_yrxB40 = _yrxtJ1;
_yrx6um = _yrxB40 >>> 24 & 255;
_yrx6um = _yrxB40 >>> 16 & 255;
_yrx6um = _yrxB40 >>> 8 & 255;
_yrx6um = _yrxB40 & 255
}
return _yrx6um
}
function _yrxbN0(_yrxtJ1, _yrxDnL, _yrxMd3, _yrx4kO) {
var _yrxmbl = _yrxtJ1, _yrx9mg = _yrxDnL ^ _yrxmbl, _yrxiyJ = _yrxDnL ^ _yrxmbl,
_yrxB40 = _yrxDnL ^ _yrxmbl, _yrx6um = _yrxDnL ^ _yrxmbl, _yrxFd8, _yrx8zK, _yrx2TP,
_yrxjKb = _yrxmbl.length / 4 - 2, _yrxHwI, _yrxrid = 4, _yrxpW8 = , _yrx1sj = _yrx4kO,
_yrxpnb = _yrx4kO, _yrx8LV = _yrx4kO, _yrxMXv = _yrx4kO, _yrxAOV = _yrx4kO;
for (_yrxHwI = 0; _yrxHwI < _yrxjKb; _yrxHwI++) {
_yrxFd8 = _yrx1sj ^ _yrxpnb ^ _yrx8LV ^ _yrxMXv ^ _yrxmbl;
_yrx8zK = _yrx1sj ^ _yrxpnb ^ _yrx8LV ^ _yrxMXv ^ _yrxmbl;
_yrx2TP = _yrx1sj ^ _yrxpnb ^ _yrx8LV ^ _yrxMXv ^ _yrxmbl;
_yrx6um = _yrx1sj ^ _yrxpnb ^ _yrx8LV ^ _yrxMXv ^ _yrxmbl;
_yrxrid += 4;
_yrx9mg = _yrxFd8;
_yrxiyJ = _yrx8zK;
_yrxB40 = _yrx2TP
}
for (_yrxHwI = 0; _yrxHwI < 4; _yrxHwI++) {
_yrxpW8 = _yrxAOV << 24 ^ _yrxAOV << 16 ^ _yrxAOV << 8 ^ _yrxAOV ^ _yrxmbl;
_yrxFd8 = _yrx9mg;
_yrx9mg = _yrxiyJ;
_yrxiyJ = _yrxB40;
_yrxB40 = _yrx6um;
_yrx6um = _yrxFd8
}
return _yrxpW8
}
function _yrxznI(_yrxtJ1, _yrxDnL) {
return ^ _yrxDnL, _yrxtJ1 ^ _yrxDnL, _yrxtJ1 ^ _yrxDnL, _yrxtJ1 ^ _yrxDnL]
}
function _yrxqge() {
return
}
function _yrxVhD(_yrxtJ1) {
return window.ccc + window.aaa
}
function _yrxRi8(_yrxtJ1, _yrxDnL, _yrxMd3) {
var _yrxmbl = _yrxtJ1;
if (_yrxtJ1.length % 16 !== 0)
_yrxmbl = _yrxE5D(_yrxtJ1);
if (_yrxmbl.length === 10) {
var _yrx9mg = _yrxSVn(_yrxmbl);
} else {
var _yrx9mg = _yrx6Vr(_yrxmbl);
}
var _yrxiyJ, _yrxB40, _yrx6um, _yrxFd8, _yrx8zK, _yrx2TP = _yrxDnL, _yrxjKb = _yrx9mg.length, _yrxHwI = 1;
var _yrxFd8 = _yrx9mg["slice"](0);
var _yrx8zK = [];
for (_yrxiyJ = _yrxjKb; _yrxiyJ < 4 * _yrxjKb + 28; _yrxiyJ++) {
_yrx6um = _yrxFd8;
if (_yrxiyJ % _yrxjKb === 0 || _yrxjKb === 8 && _yrxiyJ % _yrxjKb === 4) {
_yrx6um = _yrx2TP << 24 ^ _yrx2TP << 16 ^ _yrx2TP << 8 ^ _yrx2TP;
if (_yrxiyJ % _yrxjKb === 0) {
_yrx6um = _yrx6um << 8 ^ _yrx6um >>> 24 ^ _yrxHwI << 24;
_yrxHwI = _yrxHwI << 1 ^ (_yrxHwI >> 7) * 283
}
}
_yrxFd8 = _yrxFd8 ^ _yrx6um
}
for (_yrxB40 = 0; _yrxiyJ; _yrxB40++,
_yrxiyJ--) {
_yrx6um = _yrxFd8;
if (_yrxiyJ <= 4 || _yrxB40 < 4) {
_yrx8zK = _yrx6um
} else {
_yrx8zK = _yrxMd3] ^ _yrxMd3] ^ _yrxMd3] ^ _yrxMd3]
}
}
return
}
var _yrxqXj = 1
function _yrxE5D(_yrxtJ1) {
var _yrxmbl = _yrxtJ1["slice"](0);
if (_yrxmbl.length < 5) {
return
}
var _yrx9mg = _yrxmbl.pop();
var _yrxiyJ = 0
, _yrxB40 = _yrxmbl.length;
while (_yrxiyJ < _yrxB40) {
_yrxmbl ^= _yrx9mg
}
var _yrx6um = _yrxmbl.length - 4;
var _yrxFd8 = _yrxdJZ() - _yrx6Vr(_yrxmbl["slice"](_yrx6um));
_yrxmbl = _yrxmbl["slice"](0, _yrx6um);
var _yrx8zK = window.Math["floor"](window["Math"].log(_yrxFd8 / 1.164 + 1));
var _yrx2TP = _yrxmbl.length;
var _yrxjKb = ]];
_yrxiyJ = 0;
while (_yrxiyJ < _yrx2TP) {
_yrxmbl = _yrx8zK | _yrxmbl ^ _yrxjKb
}
// _yrxi67(8, _yrx8zK);
return _yrxmbl
}
function _yrx6Vr(_yrxtJ1) {
var _yrxmbl = _yrxtJ1.length / 4
, _yrx9mg = 0
, _yrxiyJ = 0
, _yrxB40 = _yrxtJ1.length;
var _yrx6um = new _yrxD3B(_yrxmbl);
while (_yrx9mg < _yrxB40) {
_yrx6um = _yrxtJ1 << 24 | _yrxtJ1 << 16 | _yrxtJ1 << 8 | _yrxtJ1
}
return _yrx6um
}
function _yrxyum(_yrxtJ1, _yrxDnL, _yrxMd3) {
var _yrxmbl = _yrxDnL, _yrx9mg = _yrxMd3, _yrxiyJ, _yrxB40, _yrx6um, _yrxFd8 = [], _yrx8zK = [], _yrx2TP,
_yrxjKb, _yrxHwI, _yrxrid, _yrxpW8, _yrx1sj;
for (_yrxiyJ = 0; _yrxiyJ < 256; _yrxiyJ++) {
_yrx8zK[(_yrxFd8 = _yrxiyJ << 1 ^ (_yrxiyJ >> 7) * 283) ^ _yrxiyJ] = _yrxiyJ
}
for (_yrxB40 = _yrx6um = 0; !_yrxmbl; _yrxB40 ^= _yrx2TP || 1,
_yrx6um = _yrx8zK || 1) {
_yrxrid = _yrx6um ^ _yrx6um << 1 ^ _yrx6um << 2 ^ _yrx6um << 3 ^ _yrx6um << 4;
_yrxrid = _yrxrid >> 8 ^ _yrxrid & 255 ^ 99;
_yrxmbl = _yrxrid;
_yrx9mg = _yrxB40;
_yrx2TP = _yrxFd8
}
for (_yrxiyJ = 0; _yrxiyJ < 256; _yrxiyJ++) {
_yrx9mg] = _yrxiyJ
}
for (_yrxB40 = 0; _yrxB40 < 256; _yrxB40++) {
_yrxrid = _yrxmbl;
_yrxHwI = _yrxFd8]];
_yrx1sj = _yrxHwI * 16843009 ^ _yrxjKb * 65537 ^ _yrx2TP * 257 ^ _yrxB40 * 16843008;
_yrxpW8 = _yrxFd8 * 257 ^ _yrxrid * 16843008;
for (_yrxiyJ = 0; _yrxiyJ < 4; _yrxiyJ++) {
_yrxDnL = _yrxpW8 = _yrxpW8 << 24 ^ _yrxpW8 >>> 8;
_yrxMd3 = _yrx1sj = _yrx1sj << 24 ^ _yrx1sj >>> 8
}
}
for (_yrxiyJ = 0; _yrxiyJ < 5; _yrxiyJ++) {
_yrxDnL = _yrxDnL["slice"](0);
_yrxMd3 = _yrxMd3["slice"](0)
}
}
function _yrx5ih() {
var _yrxmbl = _yrxdJ4(_yrxkr0(19) + $_ts]);
return _yrxa$o(_yrxmbl)
}
function _yrxa$o(_yrxtJ1) {
var _yrxmbl = window.bbb + window.aaa;
_yrxtJ1 = _yrxtJ1["concat"](_yrxSth(_yrxdJZ()));
for (var _yrx9mg = 0; _yrx9mg < _yrxtJ1.length; _yrx9mg++) {
_yrxtJ1 ^= _yrxmbl
}
_yrxtJ1 = _yrxmbl;
return _yrxtJ1
}
function _yrxSth(_yrxtJ1) {
return
}
function _yrxdJZ() {
return window.Math["ceil"](new _yrxeFV()["getTime"]() / 1000)
}
var _yrxdZQ
function _yrxsIp() {
var _yrxqAs = [[], [], [], [], []];
var _yrxPYy = [[], [], [], [], []];
_yrxdZQ = _yrxmbl;
function _yrxmbl(_yrxB7w) {
return
}
}
var _yrxWaA, _yrxozw, _yrxB27
function _yrxLYu() {
_yrxWaA = ;
var _yrx9mg = _yrxWaA;
var _yrxiyJ = _yrxWaA;
var _yrxB40 = _yrx6U9(_yrxFV3(25));
_yrxozw = _yrxB40;
_yrxB27 = _yrxYGj()
}
function _yrxYGj() {
return 1601028914126
}
function _yrxFV3(_yrxtJ1) {
return _yrxfXZ(_yrxkr0(_yrxtJ1))
}
function _yrxfXZ(_yrxtJ1) {
return _yrxdFo(_yrxCwK(_yrxtJ1))
}
function _yrxdFo(_yrxtJ1) {
var _yrxmbl = [], _yrx9mg, _yrxiyJ, _yrxB40, _yrx6um = String.prototype["charCodeAt"]["call"]("?", 0);
for (_yrx9mg = 0; _yrx9mg < _yrxtJ1.length;) {
_yrxiyJ = _yrxtJ1;
if (_yrxiyJ < 128) {
_yrxB40 = _yrxiyJ
} else if (_yrxiyJ < 192) {
_yrxB40 = _yrx6um
} else if (_yrxiyJ < 224) {
_yrxB40 = (_yrxiyJ & 63) << 6 | _yrxtJ1 & 63;
_yrx9mg++
} else if (_yrxiyJ < 240) {
_yrxB40 = (_yrxiyJ & 15) << 12 | (_yrxtJ1 & 63) << 6 | _yrxtJ1 & 63;
_yrx9mg += 2
} else if (_yrxiyJ < 248) {
_yrxB40 = _yrx6um;
_yrx9mg += 3
} else if (_yrxiyJ < 252) {
_yrxB40 = _yrx6um;
_yrx9mg += 4
} else if (_yrxiyJ < 254) {
_yrxB40 = _yrx6um;
_yrx9mg += 5
} else {
_yrxB40 = _yrx6um
}
_yrx9mg++;
_yrxmbl.push(_yrxB40)
}
return _yrxA53(_yrxmbl)
}
var aiding_arg1
function _yrxA53(_yrxtJ1, _yrxDnL, _yrxMd3) {
_yrxDnL = _yrxDnL || 0;
if (_yrxMd3 === aiding_arg1)
_yrxMd3 = _yrxtJ1.length;
var _yrxmbl = new _yrxD3B(Math["ceil"](_yrxtJ1.length / 40960))
, _yrx9mg = _yrxMd3 - 40960
, _yrxiyJ = 0;
while (_yrxDnL < _yrx9mg) {
_yrxmbl = _yrxpbG["apply"](null, _yrxtJ1["slice"](_yrxDnL, _yrxDnL += 40960))
}
if (_yrxDnL < _yrxMd3)
_yrxmbl = _yrxpbG["apply"](null, _yrxtJ1["slice"](_yrxDnL, _yrxMd3));
return _yrxmbl.join("")
}
function _yrxCwK(_yrxtJ1) {
var _yrxmbl = _yrxdJ4(_yrxtJ1), _yrx9mg = (_yrxmbl << 8) + _yrxmbl, _yrxiyJ = _yrxmbl.length, _yrxB40;
for (_yrxB40 = 2; _yrxB40 < _yrxiyJ; _yrxB40 += 2) {
_yrxmbl ^= _yrx9mg >> 8 & 255;
if (_yrxB40 + 1 < _yrxiyJ)
_yrxmbl ^= _yrx9mg & 255;
_yrx9mg++
}
return _yrxmbl["slice"](2)
}
function _yrxdJ4(_yrxtJ1) {
var _yrxmbl = _yrxtJ1.length
, _yrx9mg = new _yrxD3B(Math["floor"](_yrxmbl * 3 / 4));
var _yrxiyJ, _yrxB40, _yrx6um, _yrxFd8;
var _yrx8zK = 0
, _yrx2TP = 0
, _yrxjKb = _yrxmbl - 3;
for (_yrx8zK = 0; _yrx8zK < _yrxjKb;) {
_yrxiyJ = String.prototype["charCodeAt"]["call"](_yrxtJ1, _yrx8zK++);
_yrxB40 = String.prototype["charCodeAt"]["call"](_yrxtJ1, _yrx8zK++);
_yrx6um = String.prototype["charCodeAt"]["call"](_yrxtJ1, _yrx8zK++);
_yrxFd8 = String.prototype["charCodeAt"]["call"](_yrxtJ1, _yrx8zK++);
_yrx9mg = _yrxjxG | _yrxTNs;
_yrx9mg = _yrxb0B | _yrx2VK;
_yrx9mg = _yrxvnj | _yrxsNG
}
if (_yrx8zK < _yrxmbl) {
_yrxiyJ = String.prototype["charCodeAt"]["call"](_yrxtJ1, _yrx8zK++);
_yrxB40 = String.prototype["charCodeAt"]["call"](_yrxtJ1, _yrx8zK++);
_yrx9mg = _yrxjxG | _yrxTNs;
if (_yrx8zK < _yrxmbl) {
_yrx6um = String.prototype["charCodeAt"]["call"](_yrxtJ1, _yrx8zK);
_yrx9mg = _yrxb0B | _yrx2VK
}
}
return _yrx9mg
}
var _yrxkr0
function _yrxRTX(_yrxtJ1) {
var _yrxmbl = _yrxtJ1.length, _yrxqAs = 0, _yrx9mg, _yrxiyJ = 0;
var _yrxB40 = _yrx6um();
var _yrxPYy = new _yrxD3B(_yrxB40);
while (_yrxqAs < _yrxmbl) {
_yrx9mg = _yrx6um();
_yrxPYy = String.prototype["substr"]["call"](_yrxtJ1, _yrxqAs, _yrx9mg);
_yrxqAs += _yrx9mg
}
_yrxkr0 = _yrxFd8;
function _yrx6um() {
var _yrxmbl = _yrxsNG["call"](_yrxtJ1, _yrxqAs++)];
if (_yrxmbl < 0) {
return _yrxsNG["call"](_yrxtJ1, _yrxqAs++)] * 7396 + _yrxsNG["call"](_yrxtJ1, _yrxqAs++)] * 86 + _yrxsNG["call"](_yrxtJ1, _yrxqAs++)]
} else if (_yrxmbl < 64) {
return _yrxmbl
} else if (_yrxmbl <= 86) {
return _yrxmbl * 86 + _yrxsNG["call"](_yrxtJ1, _yrxqAs++)] - 5440
}
}
function _yrxFd8(_yrxB7w) {
var _yrxmbl = _yrxB7w % 64;
var _yrx9mg = _yrxB7w - _yrxmbl;
_yrxmbl = _yrxfzV(_yrxmbl);
_yrxmbl ^= $_ts];
_yrx9mg += _yrxmbl;
return _yrxPYy
}
}
function _yrxfzV(_yrxtJ1) {
var _yrxmbl = ;
return _yrxtJ1 >> $_ts] | (_yrxtJ1 & _yrxmbl[$_ts]]) << 6 - $_ts]
}
var _yrxxDc = String.prototype["split"]["call"]("qrcklmDoExthWJiHAp1sVYKU3RFMQw8IGfPO92bvLNj.7zXBaSnu0TC6gy_4Ze5d{}|~ !#$%()*+,-;=?@[]^", "");
var _yrxjxG = []
, _yrxTNs = []
, _yrxb0B = []
, _yrx2VK = []
, _yrxvnj = []
, _yrxsNG = [];
var _yrx$_7
function _yrx8LV() {
for (_yrx$_7 = 0; _yrx$_7 <= 255; _yrx$_7++) {
_yrxsNG = -1
}
for (_yrx$_7 = 0; _yrx$_7 < _yrxxDc.length; _yrx$_7++) {
var _yrxmbl = String.prototype["charCodeAt"]["call"](_yrxxDc, 0);
_yrxjxG = _yrx$_7 << 2;
_yrxTNs = _yrx$_7 >> 4;
_yrxb0B = (_yrx$_7 & 15) << 4;
_yrx2VK = _yrx$_7 >> 2;
_yrxvnj = (_yrx$_7 & 3) << 6;
_yrxsNG = _yrx$_7
}
}
function _yrxwbi(_yrx7jl) {
return _yrxx1M(_yrx7jl, _yrxsK7())
}
function _yrxx1M(_yrx7jl, _yrxcze, _yrxyqC) {
return _yrx$tI(_yrxHCZ(_yrx7jl, _yrxcze, _yrxyqC))
}
function _yrxHCZ(_yrx7jl, _yrxcze, _yrxyqC) {
if (typeof _yrx7jl === _yrxQ9C)
_yrx7jl = _yrxTZR(_yrx7jl);
var _yrxrqQ = _yrxUQA(_yrxcze, _yrxyqC);
return _yrxrqQ._yrxJo8(_yrx7jl, true)
}
function _yrxsK7() {
var _yrxrqQ = _yrxdJ4("EgWWundefined");
return _yrxHad(_yrxrqQ)
}
function _yrxHad(_yrx7jl) {
var _yrxrqQ = Math](Math]() * 256);
_yrx7jl = _yrx7jl](_yrxeh1(_yrxXOl()));
for (var _yrx$Kn = 0; _yrx$Kn < _yrx7jl.length; _yrx$Kn++) {
_yrx7jl ^= _yrxrqQ
}
_yrx7jl = _yrxrqQ;
return _yrx7jl
}
function _yrxeh1(_yrx7jl) {
return [(_yrx7jl >>> 24) & 0xFF, (_yrx7jl >>> 16) & 0xFF, (_yrx7jl >>> 8) & 0xFF, _yrx7jl & 0xFF]
}
function _yrxXOl() {
return Math](new Date()]() / 1000)
}
function get_url(page, aaa, bbb, ccc, ddd) {
page = parseInt(page)
window.aaa = parseInt(aaa)
window.bbb = parseInt(bbb)
window.ccc = parseInt(ccc)
window.ddd = parseInt(ddd)
var url = "/api/match/10"
var real_url = url + "?page=" + page
var _yrxmEu1 = _yrxWKg(unescape(encodeURIComponent(real_url)).toUpperCase());
real_url = real_url + "&"
var _yrxrqQ = []
var _yrx$Kn = ''
var _yrxays = '{qqqqqqqqq~F3F2Y0r8FDwZzST.0m833g1O8K3Lp5rUZVIEcS2.5cJl.aG4FKElt0sBukW2APm.aigTYNPnEiHGB.rsZldYKLmjhKMlS.a14qdQvjSF.ttGuXYj_J4ZD_ubMJXyYvnjaEiNKXmjLtEaVbP_1Wtzp_c8AcRE7CAtcJzEWjnB1kL9o9pK9mgzFLnu3cMGOX2DhxMZHnGFTt7Qhzft6EgVMbYj4hylyunHiJEAxbfUmkF7XpArhr2Jp8YRTsDll3TWSYsTW3SlSqsGkIpl0rKVKFpq9soVlwTW2Y1mWISlzhY70Un2nxPGKMAehKUfUxamAY0GuV1Y_YfGSAmzUhoVzVsxkclyRc80qKXecN.sWZDpUvSdYGoST5hq.nynMpWTcSGZ99KpMJ0B24Wpp33Bjo3ePE0_BzQLBpi9r0l4096hdtX.i.ivhmjqqqqqqqqqDdfe167kR2El3leHql3650hAuA1Wm3ZJmRr0qq!x7z,aac,amr,asm,avi,bak,bat,bmp,bin,c,cab,css,csv,com,cpp,dat,dll,doc,dot,docx,exe,eot,fla,flc,fon,fot,font,gdb,gif,gz,gho,hlp,hpp,htc,ico,ini,inf,ins,iso,js,jar,jpg,jpeg,json,java,lib,log,mid,mp4,mpa,m4a,mp3,mpg,mkv,mod,mov,mim,mpp,msi,mpeg,obj,ocx,ogg,olb,ole,otf,py,pyc,pas,pgm,ppm,pps,ppt,pdf,pptx,png,pic,pli,psd,qif,qtx,ra,rm,ram,rmvb,reg,res,rtf,rar,so,sbl,sfx,swa,swf,svg,sys,tar,taz,tif,tiff,torrent,txt,ttf,vsd,vss,vsw,vxd,woff,woff2,wmv,wma,wav,wps,xbm,xpm,xls,xlsx,xsl,xml,z,zip,apk,plist,ipaqqqqqM1L25X6idI4fnXojgI.z5XU_9I_Q{.DGZ.J1G9Eoe4RoJ08CrTRupbwbxeQUpjJoRdwUTLQv0.xcG7EmJyV6eowqTnAUJcQ2x_mPqFhfJ01CScIVTXAbGqF9JBY6JIFpSCYvpsM20HRSRYxYAGV1ephYWqr1r4k162hZrX5whI412tqq}!iAgmRTwdsDARRVrPUcgMImrSUUJUJp2SU1AMpKR0Y6rKImTrRO0Rs2fWUrZMsUrUwCpWwYwb8m2dlmRiUDmg3K26KbYQAUmEwKRFq9mPAo2zp2zIk6rbQArOsKLhwKSNQKS3UomQsvR.w2ArwOJno9N.1qeNQlWG1GwOo9WFFop4xUy7Ds23Hla0roqUoAl93qr6lC98ksp6FVq5UGpnDlq7DCqqqqqqXAOo30eljTuAgmeehhIUrtA;4kUyzUi8kgD7ll6J2MqFBA;k136EQOTwklqJ|gc10eslSeWlfIq0ms3Vz7rVrl3TRSDkNJ10rt3KSGM6wLpKwWUVpc8la.Wkfjrm9WpnJtw0EfFSfGhmZ9FrJEkYZQIqecmo9mYG9ZH0EP31xQiUSOFueM3s0IM1JQMuafKny3oC3z3sS.kC3OMap4EYrsAn2Lh27nApZZKbgf82NrEbZNpqezJuzcAnRkxYgZVSSJplV5UuxHlkG0Y922mTg5Qczkh6rxs7J2SvHMA7rEasuQMWztyDIIHZwhybsyK8yD4mvm1.ymC2kE8XrenTOGKWxvZ2uXKeYlVMqTwimVCKszMxYZ9Knp3r0t1074790432Y3HGMHwnXHqzPTCrao7BEU';
var _yrxVMl = {
"scj": [],
"_yrxdD_": ["_yrxvn$", "_yrxnIK", "_yrxw3G", "_yrx4Sh", "_yrx8LV", "_yrx1e8", "_yrxc$E", "_yrxIEc", "_yrx9zH", "_yrxYeM", "_yrxlCm", "_yrxUlA", "_yrx6L9", "_yrxCZ3", "_yrxC72", "_yrxEvO", "_yrxksc", "_yrxbDF", "_yrxVrt", "_yrxlQ1", "_yrxYZC", "_yrxdDm", "_yrxFpw", "_yrxJPo", "_yrxfMk", "_yrxpnH", "_yrxyLY", "_yrxEH7", "_yrxwaS", "_yrxXGq", "_yrxdJ4", "_yrxANR", "_yrx9K2", "_yrxCIU", "_yrx_yd", "_yrx5El", "_yrxGxQ", "_yrxDnL", "_yrxgie", "_yrxBoU", "_yrxAv3", "_yrx9XC", "_yrxqy0", "_yrxIvz", "_yrxHpk", "_yrxQsc", "_yrxZXD", "_yrxEM9", "_yrx1x3", "_yrxyum", "_yrxa$M", "_yrxbFy", "_yrxUQ9", "_yrx0N3", "_yrx_Mu", "_yrx4vh", "_yrxphR", "_yrxuIo", "_yrxuHi", "_yrxh5_", "_yrx$re", "_yrxA_W", "_yrxtCE", "_yrxEIH", "_yrxOWU", "_yrxgbu", "_yrxrIo", "_yrxrp_", "_yrxQfa", "_yrxzw0", "_yrxzO0", "_yrxCwK", "_yrxxoO", "_yrxEvl", "_yrx148", "_yrx6sx", "_yrxgJ7", "_yrxzWA", "_yrxbvq", "_yrxMXv", "_yrxEG0", "_yrx1Gh", "_yrxDvn", "_yrxbUG", "_yrx6Ot", "_yrxuxO", "_yrx5T2", "_yrxDH0", "_yrx78n", "_yrxl1W", "_yrxRph", "_yrxhP3", "_yrxYTK", "_yrxB2k", "_yrx8IE", "_yrxiSq", "_yrxRVO", "_yrxkm0", "_yrx3xY", "_yrxFfV", "_yrxL82", "_yrxo5n", "_yrxIE7", "_yrxIN8", "_yrxvah", "_yrxCkZ", "_yrx5Tr", "_yrxKQ7", "_yrxs3J", "_yrx3Zy", "_yrxbVe", "_yrxvpX", "_yrxNy7", "_yrxX7$", "_yrxguY", "_yrxsCY", "_yrx$Rr", "_yrxCKr", "_yrxLm1", "_yrxf$v", "_yrx38N", "_yrxesH", "_yrxBFw", "_yrxaXm", "_yrxKtx", "_yrx62w", "_yrxbzo", "_yrxd$z", "_yrxRNY", "_yrxa01", "_yrxzX3", "_yrxPh$", "_yrxo3Y", "_yrxueR", "_yrxesu", "_yrxZxk", "_yrxFhg", "_yrx1DZ", "_yrxlgb", "_yrx1Dk", "_yrxjRT", "_yrxXZS", "_yrxIZD", "_yrxxLm", "_yrxReq", "_yrxSGY", "_yrxobT", "_yrxLxA", "_yrxljD", "_yrx7Ua", "_yrxIAZ", "_yrxB7N", "_yrxY3F", "_yrxNar", "_yrxeDY", "_yrxxFM", "_yrxYdQ", "_yrxoIx", "_yrxXLs", "_yrxskY", "_yrxOzH", "_yrxRHC", "_yrxdD_", "_yrxF9v", "_yrxSQs", "_yrxXKo", "_yrxe_I", "_yrxkdW", "_yrxjQZ", "_yrxrl5", "_yrx9Cs", "_yrxwrM", "_yrxxuf", "_yrxG1y", "_yrxBeS", "_yrxIR_", "_yrxa05", "_yrxJzA", "_yrxpzH", "_yrx2Qi", "_yrxlS3", "_yrxh$_", "_yrxcUJ", "_yrxHzD", "_yrxkbM", "_yrxtjm", "_yrxujQ", "_yrxQ2N", "_yrxyHY", "_yrx8_W", "_yrx5cB", "_yrxcKn", "_yrxewE", "_yrx3l5", "_yrx9ma", "_yrxwmT", "_yrxPpH", "_yrxPTc", "_yrxHIr", "_yrxJPm", "_yrx5TB", "_yrxNhj", "_yrxzgw", "_yrxwNp", "_yrx384", "_yrxGMB", "_yrxOlf", "_yrxlLZ", "_yrxbmY", "_yrx7fF", "_yrxByv", "_yrxMcz", "_yrx5DU", "_yrxI_A", "_yrxwHl", "_yrxCqV", "_yrxGUo", "_yrx8Bu", "_yrxsA9", "_yrx2vL", "_yrxrmP", "_yrxkcn", "_yrxnbH", "_yrxeCo", "_yrxJTd", "_yrxGr9", "_yrxRFl", "_yrxuZX", "_yrxLB$", "_yrxzfU", "_yrxb8Z", "_yrxoVn", "_yrxs4W", "_yrx7Ly", "_yrx6MZ", "_yrxxzB", "_yrxxJf", "_yrxfLH", "_yrxnaE", "_yrxGLk", "_yrxsfq", "_yrxq1J", "_yrx7MS", "_yrx_CY", "_yrxxs7", "_yrxAUK", "_yrxysL", "_yrxvt0", "_yrxvGj", "_yrxVZ5", "_yrxd6Y", "_yrxGFx", "_yrxwoX", "_yrxMty", "_yrxLAe", "_yrxVH8", "_yrxgny", "_yrxGOA", "_yrxxZ1", "_yrxMtN", "_yrxqc0", "_yrxryX", "_yrxYNU", "_yrxCxm", "_yrx6eT", "_yrxipW", "_yrxxh$", "_yrx$VN", "_yrxAbr", "_yrxYXt", "_yrxn5J", "_yrxyUW", "_yrxWNu", "_yrxCPn", "_yrxrxt", "_yrxMqa", "_yrxwl9", "_yrxpTj", "_yrx5ZS", "_yrxdUL", "_yrxT24", "_yrxj6t", "_yrxqy3", "_yrxeKO", "_yrxJtv", "_yrxYT$", "_yrxQHJ", "_yrxkGQ", "_yrxH$W", "_yrxtlb", "_yrxC6E", "_yrx6Co", "_yrxPoS", "_yrxz5E", "_yrx_MJ", "_yrxCis", "_yrxiJr", "_yrxbW$", "_yrxUCq", "_yrx4L6", "_yrxrNH", "_yrxsbl", "_yrxbGf", "_yrxUtc", "_yrxkAl", "_yrxGx4", "_yrxKHt", "_yrxfzV", "_yrxPjI", "_yrx9$i", "_yrxf8y", "_yrxC8m", "_yrxpvu", "_yrxMYv", "_yrxoBI", "_yrxXNY", "_yrxfop", "_yrxlai", "_yrxhs4", "_yrxt8s", "_yrx3vn", "_yrxiJ_", "_yrxrsz", "_yrxy3U", "_yrxiyJ", "_yrxe95", "_yrx1c3", "_yrxv6V", "_yrxMIW", "_yrx3Zr", "_yrxXaH", "_yrxc9Z", "_yrxvnj", "_yrxITk", "_yrx3gL", "_yrxQjp", "_yrxF7S", "_yrx4nv", "_yrxOti", "_yrxUew", "_yrxZa$", "_yrxs1t", "_yrxACY", "_yrxi0j", "_yrxhKn", "_yrxBR$", "_yrxq1j", "_yrxWFn", "_yrxAsZ", "_yrxIJz", "_yrxcGo", "_yrxkEO", "_yrxBrv", "_yrxQlP", "_yrxk5W", "_yrxQea", "_yrx6Tl", "_yrxspT", "_yrxMdm", "_yrxXjK", "_yrxSXA", "_yrxbhG", "_yrxmQM", "_yrxHMV", "_yrxWfK", "_yrxT30", "_yrxO$q", "_yrxgeN", "_yrxfsZ", "_yrxRkB", "_yrx1oK", "_yrx5eX", "_yrxBOd", "_yrx_FJ", "_yrxCKS", "_yrx0pK", "_yrx8PQ", "_yrxVYs", "_yrxtID", "_yrxQop", "_yrxrti", "_yrxhpM", "_yrxR4J", "_yrxSIs", "_yrxYue", "_yrxaMJ", "_yrxm4r", "_yrxW9G", "_yrxmEn", "_yrxp8I", "_yrx8Mg", "_yrxVCk", "_yrx4yh", "_yrxu$6", "_yrxsKT", "_yrxg_C", "_yrxTek", "_yrx2ls", "_yrxJlC", "_yrxxlW", "_yrxYCT", "_yrxYwL", "_yrxFMr", "_yrx_HZ", "_yrxdP_", "_yrxib_", "_yrxZzn", "_yrxoWN", "_yrxCr8", "_yrxW2V", "_yrxq0O", "_yrxZDq", "_yrxJt6", "_yrx4ZB", "_yrxDtu", "_yrxvws", "_yrxFvG", "_yrxsXn", "_yrxLUO", "_yrxmLF", "_yrx0aH", "_yrxgrL", "_yrx$vi", "_yrxMjU", "_yrxgnz", "_yrxH4g", "_yrxlAD", "_yrxZbF", "_yrxZ9O", "_yrxyDh", "_yrxGQI", "_yrxIXE", "_yrxlKt", "_yrxaMH", "_yrxbwQ", "_yrx7vl", "_yrxcs_", "_yrxnQG", "_yrxLGi", "_yrxqmY", "_yrx3$u", "_yrxsFd", "_yrxsiZ", "_yrxRcF", "_yrxnm6", "_yrxJZB", "_yrxSA8", "_yrxsmv", "_yrx$IW", "_yrx6iQ", "_yrxCSB", "_yrxCSj", "_yrxyol", "_yrxxb7", "_yrx$GK", "_yrxtMv", "_yrxKyq", "_yrxtmC", "_yrxRXY", "_yrx0bX", "_yrxktO", "_yrx0Yy", "_yrxqmN", "_yrxKob", "_yrxDyf", "_yrxWyR", "_yrx0uk", "_yrx35v", "_yrx_c3", "_yrxBhN", "_yrxjFS", "_yrxZBz", "_yrxqir", "_yrx1Zm", "_yrxWXt", "_yrxSiZ", "_yrx1pR", "_yrxnI6", "_yrxgPc", "_yrxHzZ", "_yrx0AE", "_yrxlBA", "_yrxZL7", "_yrxKTc", "_yrxhu3", "_yrxKrv", "_yrxGEI", "_yrxhIk", "_yrxVo3", "_yrxE8B", "_yrx0u2", "_yrxoiI", "_yrx5Nx", "_yrxkbn", "_yrxbc_", "_yrxnWX", "_yrxti2", "_yrxYCx", "_yrxQ5b", "_yrxhqz", "_yrxslt", "_yrxuQs", "_yrx1oc", "_yrxgJq", "_yrxsXq", "_yrxuDZ", "_yrxJvd", "_yrxARP", "_yrxGN1", "_yrxIAU", "_yrxkzY", "_yrxBRE", "_yrx6$W", "_yrxcCO", "_yrxwRb", "_yrxKBC", "_yrxyRP", "_yrxN9H", "_yrxiZr", "_yrxmOc", "_yrxNP$", "_yrxFvM", "_yrxXFt", "_yrxwcB", "_yrxDHA", "_yrxaTZ", "_yrx4nd", "_yrxbSu", "_yrx8fG", "_yrxanS", "_yrx4sc", "_yrx65U", "_yrxWp0", "_yrxeCH", "_yrx6cf", "_yrxRUs", "_yrx5Ez", "_yrxrpn", "_yrxIUj", "_yrxmrS", "_yrxh4U", "_yrx8v4", "_yrxJwg", "_yrxMAX", "_yrxLQa", "_yrxCwd", "_yrxgUq", "_yrxZsd", "_yrxwgT", "_yrx2CI", "_yrxdDM", "_yrxq3B", "_yrx0$G", "_yrxs3D", "_yrxYXC", "_yrxqXj", "_yrxg6c", "_yrxzKr", "_yrxHqj", "_yrxpze", "_yrxavz", "_yrx0UI", "_yrxR9p", "_yrxv1m", "_yrxo$_", "_yrxfZ5", "_yrxR$I", "_yrxoRY", "_yrxXdI", "_yrxZaO", "_yrxvNs", "_yrx94Y", "_yrxpwF", "_yrxhSJ", "_yrx1e0", "_yrxBHc", "_yrxHWO", "_yrxG$u", "_yrx_IP", "_yrxvgx", "_yrx6V8", "_yrxJoN", "_yrx_sb", "_yrxCnA", "_yrxxQ3", "_yrxIz2", "_yrxqe1", "_yrxseo", "_yrxWvn", "_yrxjzR", "_yrxSpt", "_yrxC3u", "_yrxWhC", "_yrxL$E", "_yrxsNG", "_yrxr4R", "_yrxP9n", "_yrxs_S", "_yrxyvu", "_yrxp2H", "_yrxCc5", "_yrxiaz", "_yrxbp3", "_yrxXDC", "_yrxc1W", "_yrxqwf", "_yrx_Md", "_yrxmVv", "_yrxAOV", "_yrxOFw", "_yrx_Jy", "_yrx46_", "_yrxU$j", "_yrxB6t", "_yrxgG$", "_yrx0kE", "_yrxnmu", "_yrxXa9", "_yrxTS1", "_yrxWYB", "_yrxydX", "_yrxs0x", "_yrxVaz", "_yrxemL", "_yrx8OV", "_yrxf6A", "_yrxHqN", "_yrxHnX", "_yrxa0E", "_yrxE1m", "_yrxcSp", "_yrxBsz", "_yrxKrH", "_yrxuPJ", "_yrxx0N", "_yrxSRQ", "_yrxfEV", "_yrxPtQ", "_yrxfaI", "_yrxuNA", "_yrx2jW", "_yrxP9Z", "_yrxNs6", "_yrxRaI", "_yrxBUi", "_yrxoLR", "_yrxcMm", "_yrxLWC", "_yrxjMy", "_yrxyZo", "_yrxFX2", "_yrxMW1", "_yrx5nY", "_yrxgcF", "_yrxB27", "_yrx_t3", "_yrxxFN", "_yrx5C4", "_yrx8O6", "_yrxiC8", "_yrxUzY", "_yrxsf2", "_yrxlRr", "_yrxmtc", "_yrxrFm", "_yrxka3", "_yrxv8F", "_yrxoYx", "_yrxtsH", "_yrxHDC", "_yrxhOy", "_yrxEo1", "_yrxMmL", "_yrxwjf", "_yrxLtD", "_yrxlWr", "_yrxsRq", "_yrxk2P", "_yrxYUF", "_yrx38b", "_yrxeDI", "_yrxD6s", "_yrxlGM", "_yrxM7l", "_yrxdxm", "_yrxZP0", "_yrxuKx", "_yrxqge", "_yrxC2_", "_yrxCLW", "_yrxe9l", "_yrx0SW", "_yrx_DI", "_yrxAGq", "_yrxFBS", "_yrxZ5Q", "_yrxydK", "_yrxcDL", "_yrxEvY", "_yrxT3X", "_yrxwt4", "_yrxWFi", "_yrxcWt", "_yrxX9a", "_yrx6$O", "_yrxioC", "_yrx97k", "_yrx5zl", "_yrxdFJ", "_yrxE78", "_yrxmsT", "_yrxAMx", "_yrx_jm", "_yrxtFh", "_yrxQpl", "_yrxCwc", "_yrxWTD", "_yrxJo8", "_yrx1CB", "_yrxE5Q", "_yrxK$s", "_yrxheq", "_yrxxaO", "_yrxl9I", "_yrxP4e", "_yrxOdV", "_yrxo91", "_yrxsXv", "_yrxBIv", "_yrxgrQ", "_yrxQp3", "_yrx_o4", "_yrx1ZQ", "_yrxTca", "_yrx$ik", "_yrxW4m", "_yrxYfv", "_yrxGTH", "_yrx3Xx", "_yrxvBq", "_yrxOkz", "_yrxbY0", "_yrxvlu", "_yrx6kn", "_yrxOXt", "_yrxDaw", "_yrxPkV", "_yrx9er", "_yrxjGP", "_yrxkr0", "_yrxIYv", "_yrxV9K", "_yrxuXS", "_yrxrsp", "_yrxvAM", "_yrxXZW", "_yrxixH", "_yrx_9X", "_yrxW$P", "_yrxE$A", "_yrxF6D", "_yrxQPF", "_yrxgnE", "_yrxUk5", "_yrxgOw", "_yrx0kY", "_yrx5es", "_yrxHi2", "_yrxaOF", "_yrx5ih", "_yrx60p", "_yrxJe2", "_yrxlXc", "_yrxjCx", "_yrx5ST", "_yrxao0", "_yrxNvQ", "_yrx58d", "_yrxZHQ", "_yrxAib", "_yrxTDa", "_yrxxoi", "_yrxoJG", "_yrxzyD", "_yrxcpE", "_yrx6bH", "_yrxoHC", "_yrxsHn", "_yrxSTy", "_yrxzYG", "_yrxK_u", "_yrxBbS", "_yrxJy8", "_yrxCnq", "_yrxlBI", "_yrxC_3", "_yrxk$S", "_yrxXte", "_yrxg7A", "_yrxwHO", "_yrxDJL", "_yrxMfm", "_yrxt$d", "_yrx0Su", "_yrx7KW", "_yrxVua", "_yrx0jZ", "_yrx2Wn", "_yrx$EP", "_yrxCl6", "_yrxPEb", "_yrx2iR", "_yrxqXd", "_yrxsCu", "_yrxT8A", "_yrx6St", "_yrxfNC", "_yrx0vn", "_yrx_rq", "_yrxRHu", "_yrx70z", "_yrxlJu", "_yrxFyi", "_yrx47w", "_yrxhXn", "_yrxcd6", "_yrxviG", "_yrxhu$", "_yrxWMk", "_yrxCEV", "_yrxrv4", "_yrxa$v", "_yrxE6t", "_yrxGbF", "_yrxQ19", "_yrxOFZ", "_yrxOSA", "_yrxDSX", "_yrxFlt", "_yrxXrx", "_yrxsCI", "_yrxRwv", "_yrx9WZ", "_yrxAiy", "_yrxzXv", "_yrx2IV", "_yrx58j", "_yrxcgQ", "_yrxH3P", "_yrxPVu", "_yrx6LX", "_yrxIar", "_yrxVYQ", "_yrxVSH", "_yrxOr6", "_yrxR$e", "_yrxCxh", "_yrxw8g", "_yrxrjd", "_yrx4G7", "_yrxG$g", "_yrxDL5", "_yrxy6K", "_yrxB7w", "_yrx0UT", "_yrxxEX", "_yrxPFL", "_yrxUDM", "_yrxBqk", "_yrxcOX", "_yrxVw5", "_yrxJLb", "_yrx1j0", "_yrxV6u", "_yrxTcE", "_yrx1rx", "_yrxVZb", "_yrxKDI", "_yrxdCW", "_yrxoGE", "_yrxWMU", "_yrxU0T", "_yrx6TG", "_yrxj$b", "_yrxMBG", "_yrxM8R", "_yrxjHs", "_yrxwsM", "_yrxKmt", "_yrxGhr", "_yrxK1p", "_yrx2Cy", "_yrxKqP", "_yrxpnC", "_yrxgDT", "_yrxpi6", "_yrxjYX", "_yrxac4", "_yrxUva", "_yrxkFO", "_yrxOz6", "_yrx4Lq", "_yrxE5J", "_yrxRGz", "_yrxHaQ", "_yrxVCU", "_yrxaPy", "_yrxzxI", "_yrxxyQ", "_yrxdGe", "_yrxqhC", "_yrxcJC", "_yrxI9o", "_yrxaPr", "_yrxf$e", "_yrx$ki", "_yrxT4k", "_yrx4RC", "_yrxzO3", "_yrxrAG", "_yrxR$H"],
"_yrxJPo": 42,
"_yrxw3G": 25,
"_yrxfMk": 2,
"_yrxueR": "_yrxh5_",
"_yrxRNY": "_yrx0N3",
"_yrxa01": "_yrx_Mu",
"_yrxesu": "_yrx4vh",
"_yrxzX3": "_yrxphR",
"_yrxPh$": "_yrxuIo",
"_yrxo3Y": "_yrxuHi",
"_yrxZxk": "_yrxA_W",
"_yrxyum": "_yrx$re",
"_yrx1x3": "_yrxBoU",
"_yrx8LV": "SKqUSREnLma",
"_yrxpnH": "6IlAN8vwS8G",
"_yrxc$E": "SDYIJJvVXUgSzuW0plhENg",
"_yrxOzH": "JXvH5PnmBoa",
"_yrxAv3": "9cYSTvrLw95znNK8s5SwUa",
"_yrxJPm": "_yrxrGA",
"_yrx9XC": 103,
"_yrx5TB": "_yrx$IW",
"_yrxqy0": 203,
"_yrxNhj": "_yrx71e",
"_yrxgie": 203,
"_yrxzgw": "_yrxb2c",
"_yrxIvz": 180,
"_yrx5El": -15,
"aebi": [[], , , , ]
};
var _yrxR7k = '_yrxdD_';
var _yrxJ_8 = ;
var _yrxmEu = aiding_5702(_yrxays, _yrxVMl, _yrxR7k, _yrxJ_8);
var _yrxTY4 = _yrxmEu
var _yrxrqQ = _yrxrqQ](_yrxmEu1, 0, 0, )
var _yrx2LR = _yrxmEu + _yrxwbi(_yrxrqQ)
return real_url + "m=" + _yrx2LR
}
var pages = process.argv;
var aaas = process.argv;
var bbbs = process.argv;
var cccs = process.argv;
var ddds = process.argv;
console.log(get_url(pages, aaas, bbbs, cccs, ddds));
下面是编写请求函数
import requests
import re
import base64
import os
def main():
sums = 0
for page in range(1, 6):
url = 'http://match.yuanrenxue.com/match/10'
response = requests.get(url)
sessionid = re.findall('(?<=sessionid=).+?(?=;)', response.headers['Set-Cookie'])
headers = {
'cookie': 'sessionid='+sessionid,
'User-Agent': 'yuanrenxue.project'
}
uf = int(re.findall('\d+(?=;var iil)', response.text))
encryptdata = requests.get("http://match.yuanrenxue.com/stati/mu/rsnkw2ksph", headers=headers).text
decryptdata = base64.b64decode(''.join() - i % uf - 50) for i in range(len(encryptdata))]).encode()).decode()
data = ' '.join(re.findall("\d+?(?= \+ _yrxCxm)", decryptdata))
nodejs = os.popen('node 10 '+str(page)+' '+str(uf)+' '+data)
url = 'http://match.yuanrenxue.com'+nodejs.read().replace('\n', '')
nodejs.close()
print(url)
response = requests.get(url, headers=headers).json()
for each in response['data']:
sums += each['value']
print(sums)
# 总价:221919
if __name__ == '__main__':
main()
第十一题【接口-查询参数-值加密】
安装好app后,打开HttpCanary抓包,然后随意查询一个范围内的数字
可以看到我们输入的参数生成一个sign,然后通过接口访问获取到最终需要的数值,那么首先使用jadx进行初步分析
直接搜索接口的网址【https://sekiro.virjar.com/yuanrenxue/query】
可以看到sign参数是调用了一个getSign1方法得到的,那么继续跟进这个方法
这里可以看到加载了一个so文件,然后调用了getSign方法得到了sign,如果继续静态分析的话,就要用到IDA来分析,这里我直接使用python+frida框架解决
这里跳过配置环境的部分,直接遍历0-9999来调用getSign方法获取sign,因为请求次数比较多,所以我这里还是用了多线程进行请求
import frida
import sys
import queue
import threading
import requests
from urllib import parse
class Producer(threading.Thread):
def __init__(self, baoming):
threading.Thread.__init__(self)
self.baoming = baoming
def run(self):
process = frida.get_remote_device().attach(self.baoming)
script = process.create_script(jscode)
script.on("message", message)
script.load()
sys.stdin.read()
class Consumer(threading.Thread):
def __init__(self, q):
threading.Thread.__init__(self)
self.q = q
def run(self):
global sums
while True:
try:
sign = self.q.get(timeout=10)
except:
break
nid, sign = sign.split(':')
while True:
try:
response = requests.get('https://sekiro.virjar.com/yuanrenxue/query?id='+nid+'&sign='+parse.quote(sign)).json()
break
except:
pass
print(nid)
print(response)
sums += response['data']
sums = 0
workqueue = queue.Queue(maxsize=0)
jscode = """
Java.perform(function () {
var OnlineJudgeApp = Java.use('com.yuanrenxue.onlinejudge2020.OnlineJudgeApp');
OnlineJudgeApp.getSign.implementation = function (j){
console.log('HOOK 开始');
for (i = 0; i < 10000; i++){
var sign = this.getSign(i);
send(i+':'+sign);
}
console.log('HOOK 结束');
return this.getSign(j);;
};
});
"""
def message(message, data):
global i
global workqueue
if message["type"] == 'send':
sign = message['payload']
workqueue.put(sign)
else:
print(message['stack'])
def main():
global workqueue
global sums
# 创建线程列表
threads = []
# 创建新线程,并开始线程
for eachthread in range(0, 32):
thread = Consumer(workqueue)
thread.start()
threads.append(thread)
baoming = 'com.yuanrenxue.onlinejudge2020'
thread = Producer(baoming)
thread.start()
# 等待所有线程结束
for t in threads:
t.join()
print(sums)
# 总和:4925000
if __name__ == '__main__':
main()
第十二题【接口-查询参数-值加密】
打开f12进行抓包,刷新页面,查看接口请求
可以看到其中m参数被加密了,然后根据前面的经验,可以在主页中查找接口请求的参数来源,在主页中搜索【api/match/12】
可以看到m参数是由一段固定字符串加上页码进行base64编码得到
到这里逻辑就基本完成了,但是当我们点击第四和第五页是会出现弹窗
此时按照它的提示设置UA即可,编写代码进行请求
import requests
import base64
def main():
headers = {
'User-Agent': 'yuanrenxue.project'
}
sums = 0
for page in range(1, 6):
m = base64.b64encode(('yuanrenxue'+str(page)).encode()).decode()
url = 'http://match.yuanrenxue.com/api/match/12?page='+str(page)+'&m='+m
response = requests.get(url, headers=headers).json()
for each in response['data']:
sums += each['value']
print(sums)
# 总和:247082
if __name__ == '__main__':
main()
第十三题【接口-请求头-值加密】
又是一题cookie的题目,根据前面的经验,直接隐身模式加Fiddler.exe抓包
可以看到和之前的套路一样,第一次访问返回一段script,并设置了cookie的值,因为这里的script代码太有规律,所以直接用正则处理
document.cookie = ('y') + ('u') + ('a') + ('n') + ('r') + ('e') + ('n') + ('x') + ('u') + ('e') + ('_') + ('c') + ('o') +
('o') + ('k') + ('i') + ('e') + ('=') + ('1') + ('6') + ('0') + ('4') + ('9') + ('1') + ('6') + ('6') + ('9') + (
'9') + ('|') + ('Y') + ('2') + ('W') + ('W') + ('G') + ('H') + ('H') + ('P') + ('t') + ('5') + ('m') + ('i') +
('c') + ('P') + ('o') + ('j') + ('R') + ('V') + ('D') + ('4') + ('U') + ('q') + ('3') + ('o') + ('r') + ('p') + (
'y') + ('M') + ('8') + ('t') + ('N') + ('v') + ('X') + ('0') + ('x') + ('7') + ('O') + ('Q') + ('a') + ('M') +
('r') + ('U') + ('3') + ('S') + ('P') + ('6') + ('o') + ('V') + ('y') + ('a') + ('W') + ('i') + ('q') + ('Z') + (
'O') + ('6') + ('G') + ('D') + ('I') + ('i') + ('U') + ('k') + ('0') + ('q') + ('6') + ('8') + ('8') + ('V') +
('I') + ('j') + ('F') + ('c') + ('M') + ('V') + ('S') + ('p') + ('U') + ('y') + ('N') + ('2') + ('Q') + ('N') + (
'H') + ('D') + ('d') + ('F') + ('9') + ('K') + ('l') + ('W') + ('o') + ('F') + ('u') + ('7') + ('7') + ('j') +
('M') + ('y') + ('x') + ('c') + ('Z') + ('w') + ('y') + ('H') + ('v') + ('7') + ('S') + ('9') + ('R') + ('R') + (
'u') + ('M') + ('t') + ('6') + ('Y') + ('m') + ('j') + ('I') + ('N') + ('F') + ('a') + ('r') + ('G') + ('3') +
('C') + ('d') + ('b') + ('8') + ('q') + ('b') + ('c') + ('L') + ('b') + ('b') + ('8') + ('m') + ('W') + ('E') + (
'2') + ('U') + ('w') + ('W') + ('T') + ('5') + ('i') + ('M') + ('E') + ('a') + ('I') + ('M') + ('k') + ('a') +
('j') + ('c') + ('Z') + ('4') + ('i') + ('9') + ('G') + ('F') + ('z') + ('h') + ('v') + ('J') + ('n') + ('u') + (
'S') + ('X') + ('g') + ('U') + ('n') + ('I') + ('u') + ('e') + ';path=/';
location.href = location.pathname + location.search
这里注意两个点,第一个是第一次访问的响应头有sessionid,要放到cookie里面,第四第五页的数据需要规定的请求头
import requests
import re
def main():
sums = 0
url = 'http://match.yuanrenxue.com/match/13'
response = requests.get(url)
cookie = ''.join(re.findall("(?<=\(').(?='\))", response.text))
sessionid = response.headers['Set-Cookie'].split(';')
headers = {
'cookie': sessionid+'; '+cookie,
'User-Agent': 'yuanrenxue.project'
}
for page in range(1, 6):
url = 'http://match.yuanrenxue.com/api/match/13?page='+str(page)
response = requests.get(url, headers=headers).json()
for each in response['data']:
sums += each['value']
print(sums)
# 总数:213133
if __name__ == '__main__':
main()
最后向大佬请教如何完成第十题 本帖最后由 RS水果 于 2020-10-22 04:57 编辑
求求你做个人吧 我看到这头都秃了
以前总是听xxxx中外技术相差几十年几十年
但一直没有个客观印象,没有切实的体验感觉
今天我体验到了
谢谢楼主,我愁的睡不着觉
第一题大概看了一眼,貌似还可以有别的方法,参与讨论一下
> (蠢哭的前端方法)
1. 断点的话可以在左边的行号上右键,选择`Never pause here`也可以绕过。。。
> 顺便再说一句,如果是类似某些“加密”搞得匿名函数一直死循环`debugger`,也可以用`fd`之类的修改后直接本地文件替换。
2. 设置一个变量存储总数,另一个存储个数(相除)
```javascript
var sum=0,num=0;
```
3. 用`query selector`元素选择器筛选出共同的最后一个节点
```javascript
document.querySelectorAll('body > div.body-wrap > div:nth-child(7) > div > div > div > div > div')
```
4. 获取每一个数值,转数字后加到总数里,个数自增;
```javascript
document.querySelectorAll('body > div.body-wrap > div:nth-child(7) > div > div > div > div > div').forEach(function(a){//a为每个html元素
num++;
sum+=Number(a.querySelector("div > div.col-price > p > span > span > span").innerHTML);
});
```
5. 模拟点击下一页,并等待加载完成(因为个数很少,就直接手动点了),判断可以通过下一页元素的变化
(略)
6. 最后一页则总数除以个数,输出平均值,否则继续执行第五步
大佬厉害!
我目前只试了下那个“非常容易”的非赛题-第12题,也是get请求携带了一个m参数,js脚本完全不会看,不过我胡猜乱试搞出来了,m参数原来是”yuanrenxue+页码“的base64编码+URL编码(主要是最后那个“=”,该网站默认utf-8),附上丑陋的代码:
import requests
import base64
from urllib.parse import quote
total = 0
headers1 = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36 Edg/86.0.622.56', 'Referer':'http://match.yuanrenxue.com/match/12'}
headers2 = {'User-Agent':'yuanrenxue.project', 'Referer':'http://match.yuanrenxue.com/match/12'}
for i in range(1, 6):
s = base64.b64encode(f'yuanrenxue{i}'.encode('utf-8'))
m = quote(s, 'utf-8')
if i < 4:
r = requests.get(url = f'http://match.yuanrenxue.com/api/match/12?page={i}&m={m}', headers = headers1)
else:
r = requests.get(url = f'http://match.yuanrenxue.com/api/match/12?page={i}&m={m}', headers = headers2)
total += sum(item['value'] for item in r.json()['data'])
print(total)
本帖最后由 观棋不宇 于 2020-10-25 15:13 编辑
第六题,第九题,和第十题我是有点思路的。
首先就是这个r参数,这个r参数是个重点
里面就是实际上js的执行逻辑。但是这个逻辑里面我放入了一些跟浏览器环境有关的蜜罐陷阱、这就是为什么可以执行出参数但是风控不过的原因。
可以尝试找到代码里jsfuck的值 也就是类似于 “[][![]]”这类的,放到浏览器中,然后运行一下得出值来,然后再利用node执行,第六题就可解了
第九题,我做了个非常有意思的蜜罐。因为node环境里面是一定存在 global的,而浏览器中没有,这里是核心加密点
,里面有很多的环境检测。在js执行的时候,一定要习惯性的搜一下环境。
常用的关键词比如:navigator 、global、document、location等,这样就能发现一些猫腻。
第十题,作为一道压轴题(也是js里面的大轴题),是我做的最久,处理最长的题目。这个我就只能稍微点一下思路,因为破解过程实际上会非常繁琐。
先打script断点,想办法进第一层js壳,然后搜索 .call,去打上断点,追进二层壳,之后进行无穷无尽的单步调试,一直到找到_yrxrqQ = _yrxrqQ](_yrxcze, _yrxBXT(775, _yrx7jl) ? 1 : 0, _yrxyqC || 0, _yrxBXT(789))为止
到这里就要细心了,在经过_yrxwbi函数处理为字符串最后拼接这俩段就是m的值了。(这里面的流程极其繁杂,需要耐心+细心方可解。)
多谢大佬分享经验 跪着看完这个贴 谢谢分享 谢谢分享,过来学习一下
我还是初学者,刚接触{:301_993:}
谢谢分享 又可以深入学习一波了,感谢分享 感谢楼主分享! 自定义加密。。。就离谱。。。 woc谢谢楼主分享啊 涛之雨 发表于 2020-10-22 00:20
自定义加密。。。就离谱。。。
是的,1,2,5题都不是标准的md5,比较麻烦 谢谢分享,太棒了