【猿人学WEB题目专解】猿人学第18题

这篇具有很好参考价值的文章主要介绍了【猿人学WEB题目专解】猿人学第18题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🌈据说,看我文章时 关注、点赞、收藏帅哥美女们 心情都会不自觉的好起来。

前言:
🧡作者简介:大家好我是 user_from_future ,意思是 “ 来自未来的用户 ” ,寓意着未来的自己一定很棒~
✨个人主页:点我直达,在这里肯定能找到你想要的~
👍专栏介绍:猿人学WEB题目专解 ,提供猿人学WEB题目总计20题的解题思路与方法,如有讲述错误,请不吝赐教。

想看往期历史文章,可以浏览此博文: 历史文章目录,后续所有文章发布都会同步更新此博文~

【猿人学WEB题目专解】猿人学第18题,# 猿人学WEB题目专解,python,算法,爬虫

题目网址

猿人学第18题

题目详情

【猿人学WEB题目专解】猿人学第18题,# 猿人学WEB题目专解,python,算法,爬虫
让我们计算 加和

题目思路

我们像往常一样找入口函数,在这题面前却显得不一样:
【猿人学WEB题目专解】猿人学第18题,# 猿人学WEB题目专解,python,算法,爬虫
这题用了原始的 XMLHttpRequest 请求方式,没用 ajax 请求方式,但是我们却看不到哪里有加密的东西,我们只看到了 location.href + 'data?page=' + page ,我们再观察一下前三页的请求,发现只有第一页没有其他两个参数:
【猿人学WEB题目专解】猿人学第18题,# 猿人学WEB题目专解,python,算法,爬虫
那么还有两个参数哪里来的呢?
我们新建一个 XHR 断点:
【猿人学WEB题目专解】猿人学第18题,# 猿人学WEB题目专解,python,算法,爬虫
鼠标不经意间滑动到 xml.open 方法上:
【猿人学WEB题目专解】猿人学第18题,# 猿人学WEB题目专解,python,算法,爬虫
很明显这个函数被动过手脚了,不再是原来的函数了,我们继续往下。
重新打断点,打在 open 上:
【猿人学WEB题目专解】猿人学第18题,# 猿人学WEB题目专解,python,算法,爬虫
发现跳转到了这个鬼都看不懂的代码堆里:
【猿人学WEB题目专解】猿人学第18题,# 猿人学WEB题目专解,python,算法,爬虫
放上这段令人头皮发麻的代码段:(不想看?我经历的痛苦你也要跟着经历😏😏😏)

!function(_, __) {
	var ___ = "undefined" == typeof global ? window : global
	  , v__ = [[___, null, null, this, arguments]]
	  , V__ = String.fromCharCode
	  , y__ = decodeURIComponent
	  , u__ = ReferenceError
	  , U__ = Object.keys
	  , _v_ = parseFloat
	  , _V_ = parseInt
	  , _y_ = Math.pow
	  , _u_ = RegExp
	  , _U_ = ___.BigInt
	  , __v = 1
	  , __V = []
	  , __y = []
	  , __u = Vu_(48, 58) + Vu_(97, 123)
	  , __U = Vu_(65, 91)
	  , v_ = "[" + __U + "]*[" + __u + "]"
	  , V_ = __u + __U
	  , y_ = /[0-9a-f]{2}/g
	  , u_ = "%$&"
	  , U_ = "$"
	  , _v = " is not defined"
	  , _V = "null"
	  , _y = "number"
	  , _u = "object"
	  , _U = "0"
	  , vv_ = "g"
	  , vV_ = ""
	  , vy_ = "arguments";
	function vu_(_, __) {
		return _.push(__)
	}
	function vU_(_) {
		return _.pop()
	}
	function v_v(_) {
		return _.length
	}
	function v_V(_, __) {
		return _.indexOf(__)
	}
	function v_y(_, __) {
		return _.lastIndexOf(__)
	}
	function v_u(_, __) {
		return _.toString(__)
	}
	function v_U(_) {
		return y__(_.replace(y_, u_))
	}
	function Vv_(_, __) {
		return _.hasOwnProperty(__)
	}
	function VV_(_) {
		return _V_(_, 16)
	}
	function Vy_(_, __) {
		if (3 == __ || 6 == __ || 28 == __ || 15 == __ || 11 == __ || 13 == __ || 30 == __ || 41 == __) {
			(u__ = {})._ = __;
			var ___ = function(_, __) {
				var ___, v__ = V_V(__), y__ = v__[0], u__ = v__[1], U__ = __V[y__];
				function _y_(_, __) {
					return V_y(v_U(_))[0] ^ 127 & __
				}
				function __v(_, __) {
					return V_u(V_y(v_U(_)), 127 & __)
				}
				if (3 == _ && (___ = _y_(U__, y__)),
				6 == _ && (___ = v_U(U__)),
				28 == _ && (___ = null),
				15 == _ && (___ = v_U(U__)),
				11 == _ && (___ = _v_(__v(U__, y__))),
				13 == _ && (___ = !!_V_(V__(_y_(U__, y__)))),
				30 == _ && (___ = _U_(__v(U__, y__))),
				41 == _) {
					var __y = __v(U__, y__)
					  , __u = __y.slice(0, v_y(__y, U_))
					  , __U = __y.slice(v_y(__y, U_) + 1);
					___ = _u_(__u, __U)
				}
				return [___, y__, u__]
			}(__, _.slice(__v, 10));
			return u__[__] = ___[0],
			[function(_, __, ___) {
				var v__ = v_V(__y, _[__]);
				return -1 == v__ ? (vu_(__y, _[__]),
				_[__] = v_v(__y) - 1) : _[__] = v__,
				_.__ = ___,
				_
			}(u__, __, ___[1]), ___[2]]
		}
		for (var v__ = V_U(_, __v)[0], y__ = [], u__ = {}; v_v(v__); ) {
			var U__ = VU_(v__.slice(0, __v));
			if (3 != U__ && 6 != U__ && 28 != U__ && 15 != U__ && 11 != U__ && 13 != U__ && 30 != U__ && 41 != U__) {
				var _y_ = V_U(v__, __v, 1);
				vu_(y__, V_v(v__)),
				v__ = v__.slice(_y_[1])
			} else {
				var __u = V_v(v__);
				vu_(y__, __u[0]),
				v__ = v__.slice(__v + __u[1])
			}
		}
		return u__[__] = y__,
		u__._ = __,
		u__
	}
	function Vu_(_, __) {
		for (var ___ = "", v__ = _; v__ < __; v__++)
			___ += V__(v__);
		return ___
	}
	function VU_(_) {
		return v_V(V_, _)
	}
	function V_v(_) {
		var __ = VU_(_.slice(0, __v));
		return Vy_(_, __)
	}
	function V_V(_) {
		var __ = 0
		  , ___ = _.match(v_)[0]
		  , v__ = ___.slice(0, -1)
		  , V__ = ___[v_v(___) - 1];
		__ += v_V(__u, V__);
		for (var y__ = 0, u__ = v_v(v__) - 1; u__ >= 0; u__--)
			__ += v_V(__U, v__[u__]) * _y_(v_v(__U), y__) * v_v(__u),
			y__ += 1;
		return [__, v_v(___)]
	}
	function V_y(_) {
		for (var __, ___ = [], v__ = 0; v__ < v_v(_); v__++)
			___[v__] = (__ = v__,
			_.charCodeAt(__));
		return ___
	}
	function V_u(_, __) {
		for (var ___ = [], v__ = 0; v__ < v_v(_); v__++)
			___[v__] = V__(_[v__] ^ __);
		return ___.join(vV_)
	}
	function V_U(_, __, ___) {
		var v__ = V_V(__ ? _.slice(__) : _);
		return [___ ? null : _.slice(__ + v__[1], __ + v__[0] + v__[1]), __ + v__[0] + v__[1]]
	}
	!function(_) {
		function __(_, __) {
			var ___ = __y[_[__]];
			return !___ || 15 != __ && 6 != __ ? ___ : V_u(V_y(___), 127 & _.__)
		}
		function ___(_) {
			return _[v_v(_) - 1]
		}
		function V__(_, __) {
			return _[v_v(_) - 1] = __
		}
		function y__(_) {
			if (Array.isArray(_)) {
				for (var __ = 0, ___ = Array(v_v(_)); __ < v_v(_); __++)
					___[__] = _[__];
				return ___
			}
			return Array.from(_)
		}
		function _v_(_, __, v__) {
			if (__ == _V)
				return null;
			if (__ == vy_)
				return ___(_)[4];
			for (var V__ = v_v(_) - 1; V__ >= 0; V__--) {
				if (Vv_(_[V__][0], __))
					return _[V__][0][__];
				if (0 == V__ && _[V__][0][__])
					return _[V__][0][__]
			}
			if (!v__)
				throw u__(__ + _v)
		}
		function _V_(_, __, ___) {
			for (var v__ = v_v(_) - 1; v__ >= 0; v__--)
				if (-1 != v_V(U__(_[v__][0]), __))
					return _[v__][0][__] = ___;
			return _[0][0][__] = ___
		}
		function _u_(_) {
			return ___(_)
		}
		function _U_(_, ___, v__, V__, y__) {
			var u__;
			if (Vv_(v__, 32)) {
				var U__ = __V(_, (_u_ = v__[32])[0]);
				if (29 == __V(_, _u_[2]))
					var _u_ = __(_u_[1], 15) || __(_u_[1], 11) || __V(_, _u_[1]);
				else
					_u_ = __(_u_[1], 15) || __(_u_[1], 11) || __(_u_[1], 6);
				u__ = !0
			} else
				v__ = __(v__, 6);
			return y__ && (V__ = __V(_, V__)),
			15 == ___ ? u__ ? U__[_u_] = V__ : _V_(_, v__, V__) : 11 == ___ ? u__ ? U__[_u_] += V__ : _V_(_, v__, _v_(_, v__) + V__) : 30 == ___ ? u__ ? U__[_u_] -= V__ : _V_(_, v__, _v_(_, v__) - V__) : 28 == ___ ? u__ ? U__[_u_] *= V__ : _V_(_, v__, _v_(_, v__) * V__) : 41 == ___ ? u__ ? U__[_u_] /= V__ : _V_(_, v__, _v_(_, v__) / V__) : 13 == ___ ? u__ ? U__[_u_] %= V__ : _V_(_, v__, _v_(_, v__) % V__) : 22 == ___ ? u__ ? U__[_u_] <<= V__ : _V_(_, v__, _v_(_, v__) << V__) : 3 == ___ ? u__ ? U__[_u_] >>= V__ : _V_(_, v__, _v_(_, v__) >> V__) : 48 == ___ ? u__ ? U__[_u_] >>>= V__ : _V_(_, v__, _v_(_, v__) >>> V__) : 43 == ___ ? u__ ? U__[_u_] &= V__ : _V_(_, v__, _v_(_, v__) & V__) : 36 == ___ ? u__ ? U__[_u_] |= V__ : _V_(_, v__, _v_(_, v__) | V__) : 7 == ___ ? u__ ? U__[_u_] ^= V__ : _V_(_, v__, _v_(_, v__) ^ V__) : 6 == ___ ? u__ ? U__[_u_] = _y_(U__[_u_], V__) : _V_(_, v__, _y_(_v_(_, v__), V__)) : void 0
		}
		function __v(_, ___, v__) {
			if (v__)
				var V__ = __(___, 15) || __(___, 11) || __V(_, ___);
			else
				V__ = __(___, 15) || __(___, 11) || __(___, 6);
			return V__
		}
		function __V(_, v__, u__, __y, __u) {
			var __U = v__._;
			if (3 == __U || 15 == __U || 11 == __U || 13 == __U || 28 == __U || 30 == __U || 41 == __U)
				return __(v__, __U);
			if (6 == __U)
				return _v_(_, __(v__, __U));
			var v_, V_, y_, u_ = v__[__U];
			if (43 == __U)
				u_.map(function(__) {
					__V(_, __)
				});
			else {
				if (22 == __U)
					return u_.map(function(__) {
						return v_u(__V(_, __))
					}).join(vV_);
				if (35 == __U)
					return __V(_, u_[0]);
				if (36 == __U)
					if (Vv_(u_[0], 29))
						_v = __V(_, u_[1]),
						u_[0][29].map(function(___, v__) {
							_u_(_)[0][__(___, 6)] = _v[v__]
						});
					else {
						var U_ = __(u_[0], 6)
						  , _v = __V(_, u_[1]);
						Vv_(u_[1], 3) && 49 == __(u_[1], 3) ? _u_(_)[0][U_] = _u_(_)[0][U_] : _u_(_)[0][U_] = _v
					}
				else if (7 == __U) {
					var _U = u__;
					u_.map(function(__) {
						__V(_, __, _U)
					})
				} else {
					if (33 == __U) {
						var vv_ = __(u_[0], 3)
						  , vy_ = u_[1];
						if (Vv_(vy_, 29)) {
							var v_V = __V(_, u_[2]);
							return vy_[29].map(function(__, ___) {
								return _U_(_, vv_, __, v_V[___])
							})
						}
						return _U_(_, vv_, vy_, u_[2], 1)
					}
					if (45 == __U)
						return __V(_, u_[0]);
					if (8 == __U)
						return u_.map(function(__) {
							return __V(_, __)
						});
					if (27 == __U) {
						vv_ = __(u_[0], 3);
						var v_y = __V(_, u_[1])
						  , v_U = __V(_, u_[2]);
						return V_ = v_y,
						y_ = v_U,
						33 == (v_ = vv_) ? V_ instanceof y_ : 23 == v_ ? V_ in y_ : 19 == v_ ? V_ + y_ : 46 == v_ ? V_ - y_ : 14 == v_ ? V_ / y_ : 31 == v_ ? V_ * y_ : 32 == v_ ? _y_(V_, y_) : 27 == v_ ? V_ % y_ : 25 == v_ ? V_ < y_ : 2 == v_ ? V_ <= y_ : 16 == v_ ? V_ > y_ : 42 == v_ ? V_ >= y_ : 40 == v_ ? V_ & y_ : 39 == v_ ? V_ != y_ : 21 == v_ ? V_ !== y_ : 47 == v_ ? V_ | y_ : 50 == v_ ? V_ ^ y_ : 26 == v_ ? V_ == y_ : 37 == v_ ? V_ === y_ : 8 == v_ ? V_ << y_ : 18 == v_ ? V_ >> y_ : 1 == v_ ? V_ >>> y_ : void 0
					}
					if (46 == __U) {
						_U = u__;
						for (var VV_ = u_.filter(function(___) {
							return ___[19] ? __V(_, ___) && null : !___[43] || (___[43].map(function(___) {
								var v__ = __(v__ = ___[36][0], 6);
								Vv_(_u_(_)[0], v__) || (_u_(_)[0][v__] = void 0)
							}),
							!0)
						}), Vy_ = 0; Vy_ < v_v(VV_); Vy_++) {
							if (___(_U[35])) {
								V__(_U[35], 0);
								break
							}
							if (Vu_ = __V(_, VV_[Vy_], _U),
							___(_U[9]))
								break;
							if (_U[0])
								return Vu_
						}
					} else {
						if (14 == __U)
							return (_U = u__) && (_U[0] = 1),
							___(Vu_ = u_.map(function(__) {
								return __V(_, __)
							}));
						if (4 == __U)
							(_U = u__) && V__(_U[9], 1);
						else if (24 == __U)
							(_U = u__) && V__(_U[35], 1);
						else {
							if (18 == __U) {
								var Vu_ = {};
								return u_.map(function(__) {
									var ___ = __V(_, __)
									  , v__ = ___[0]
									  , V__ = ___[1];
									Vu_[v__] = V__
								}),
								Vu_
							}
							if (1 == __U)
								return [U_ = __v(_, u_[0], 0), _v = __V(_, u_[1])];
							if (23 == __U)
								return ___(Vu_ = u_.map(function(__) {
									return __V(_, __)
								}));
							if (31 == __U) {
								_U = u__;
								var VU_ = __V(_, u_[0]);
								if (Vu_ = __V(_, VU_ ? u_[1] : u_[2], _U),
								_U[0])
									return Vu_
							} else if (25 == __U) {
								for (vu_((_U = u__)[9], 0),
								vu_(_U[35], 0),
								__V(_, u_[0]); __V(_, u_[1]); __V(_, u_[2]))
									if (___(_U[35]))
										V__(_U[35], 0);
									else {
										if (Vu_ = __V(_, u_[3], _U),
										___(_U[9]))
											break;
										if (_U[0])
											return Vu_
									}
								vU_(_U[9]),
								vU_(_U[35])
							} else if (17 == __U || 9 == __U) {
								vu_((_U = u__)[9], 0),
								vu_(_U[35], 0);
								var V_v = !0;
								function V_V(_, ___, v__, V__, y__) {
									___[v__].map(function(___) {
										Vv_(___, v__) ? V_V(_, ___, v__, V__, y__) : Vv_(___, 6) && (V_v ? (V_v = !1,
										y__ ? _u_(_)[0][__(___, 6)] = V__ : _V_(_, __(___, 6), V__)) : y__ ? _u_(_)[0][__(___, 6)] = void 0 : _V_(_, __(___, 6), void 0))
									})
								}
								function V_y(_, ___, v__, V__) {
									___[v__].map(function(___) {
										var v__ = ___[36][0];
										Vv_(v__, 6) ? _u_(_)[0][__(v__, 6)] = V__ : Vv_(v__, 29) && V_V(_, v__, 29, V__, 1)
									})
								}
								var V_u = __V(_, u_[1]);
								for (var _v in V_u)
									if (9 == __U && (_v = V_u[_v]),
									___(_U[35]))
										V__(_U[35], 0);
									else {
										if (Vv_(u_[0], 6) ? _V_(_, __(u_[0], 6), _v) : Vv_(u_[0], 29) ? (V_V(_, u_[0], 29, _v),
										V_v = !0) : Vv_(u_[0], 43) && (V_y(_, u_[0], 43, _v),
										V_v = !0),
										Vu_ = __V(_, u_[2], _U),
										___(_U[9]))
											break;
										if (_U[0])
											return Vu_
									}
								vU_(_U[9]),
								vU_(_U[35])
							} else {
								if (2 == __U) {
									var V_U = __V(_, u_[0])
									  , yv_ = __V(_, u_[1])
									  , yV_ = u_[2];
									return function(_, ___, v__, V__) {
										if (10 == ___) {
											if (Vv_(V__, 32)) {
												var y__ = __V(_, (u__ = V__[32])[0]);
												return u__ = __v(_, u__[1], 29 == __V(_, u__[2])),
												29 == v__ ? ++y__[u__] : y__[u__]++
											}
											return u__ = __V(_, V__),
											Vv_(V__, 6) && _V_(_, __(V__, 6), u__ + 1),
											29 == v__ ? u__ + 1 : u__
										}
										var u__;
										if (44 == ___)
											return Vv_(V__, 32) ? (y__ = __V(_, (u__ = V__[32])[0]),
											u__ = __v(_, u__[1], 29 == __V(_, u__[2])),
											29 == v__ ? --y__[u__] : y__[u__]--) : (u__ = __V(_, V__),
											Vv_(V__, 6) && _V_(_, __(V__, 6), u__ - 1),
											29 == v__ ? u__ - 1 : u__)
									}(_, V_U, yv_, yV_)
								}
								if (0 == __U) {
									vu_((_U = u__)[9], 0),
									vu_(_U[35], 0);
									do {
										if (___(_U[35]))
											V__(_U[35], 0);
										else {
											if (Vu_ = __V(_, u_[1], _U),
											___(_U[9]))
												break;
											if (_U[0])
												return Vu_
										}
									} while (__V(_, u_[0], _U));
									vU_(_U[9]),
									vU_(_U[35])
								} else if (50 == __U) {
									for (vu_((_U = u__)[9], 0),
									vu_(_U[35], 0); __V(_, u_[0], _U); )
										if (___(_U[35]))
											V__(_U[35], 0);
										else {
											if (Vu_ = __V(_, u_[1], _U),
											___(_U[9]))
												break;
											if (_U[0])
												return Vu_
										}
									vU_(_U[9]),
									vU_(_U[35])
								} else if (21 == __U) {
									_U = u__;
									try {
										if (Vu_ = __V(_, u_[0], _U),
										_U[0])
											return Vu_
									} catch (__) {
										if (Vu_ = __V(_, u_[1], _U, __),
										_U[0])
											return Vu_
									}
								} else {
									if (5 == __U)
										throw __V(_, u_[0]);
									if (39 == __U) {
										_U = u__;
										var yy_ = {};
										if (yy_[__(u_[0], 6)] = __y,
										vu_(_, [yy_, null]),
										Vu_ = __V(_, u_[1], _U),
										vU_(_),
										_U[0])
											return Vu_
									} else {
										if (16 == __U)
											return __V(_, u_[0]) ? __V(_, u_[1]) : __V(_, u_[2]);
										if (26 == __U)
											return function(_, ___, v__) {
												if (19 == ___)
													return +__V(_, v__);
												if (46 == ___)
													return -__V(_, v__);
												if (12 == ___)
													return !__V(_, v__);
												if (45 == ___)
													return ~__V(_, v__);
												if (4 == ___)
													return Vv_(v__, 6) ? typeof _v_(_, __(v__, 6), 1) : typeof __V(_, v__);
												if (5 != ___) {
													if (38 == ___) {
														if (Vv_(v__, 6))
															return !Vv_(_u_(_)[0], __(v__, 6)) || delete _u_(_)[0][__(v__, 6)];
														if (Vv_(v__, 32)) {
															var V__ = __V(_, (y__ = v__[32])[0]);
															if (29 == __V(_, y__[2]))
																var y__ = __(y__[1], 15) || __(y__[1], 11) || __V(_, y__[1]);
															else
																y__ = __(y__[1], 15) || __(y__[1], 11) || __(y__[1], 6);
															return delete V__[y__]
														}
														return __V(_, v__),
														!0
													}
												} else
													__V(_, v__)
											}(_, __V(_, u_[0]), u_[1]);
										if (20 == __U)
											return function(_, __, ___, v__) {
												return 20 == __ ? ___ || __V(_, v__) : 34 == __ ? ___ && __V(_, v__) : void 0
											}(_, __V(_, u_[0]), __V(_, u_[1]), u_[2]);
										if (19 == __U) {
											U_ = __(___(u_), 6),
											_v = u_[v_v(u_) - 2];
											var yu_ = u_.slice(0, v_v(u_) - 2)
											  , yU_ = _U__(_, U_, _v, yu_);
											_u_(_)[0][U_] = yU_
										} else {
											if (42 == __U)
												return U_ = __(___(u_), 6),
												_v = u_[v_v(u_) - 2],
												yu_ = u_.slice(0, v_v(u_) - 2),
												yU_ = _U__(_, U_, _v, yu_);
											if (34 == __U)
												return _v = ___(u_),
												yu_ = u_.slice(0, v_v(u_) - 1),
												yU_ = _U__(_, _V, _v, yu_);
											if (37 == __U) {
												var y_v = __V(_, ___(u_))
												  , ____ = u_.slice(0, v_v(u_) - 1).map(function(__) {
													return __V(_, __)
												});
												return new (Function.prototype.bind.apply(y_v, [null].concat(y__(____))))
											}
											if (38 == __U)
												return _u_(_)[3];
											if (40 == __U) {
												_U = u__,
												VU_ = __V(_, u_[0]);
												var v___ = u_.slice(1)
												  , V___ = !1;
												for (vu_(_U[9], 0),
												vu_(_U[35], 0),
												Vy_ = 0; Vy_ < v_v(v___); Vy_++)
													if (___(_U[35]))
														V__(_U[35], 0);
													else {
														var y___ = __V(_, v___[Vy_], VU_)
														  , u___ = y___[0]
														  , U___ = y___[1];
														if (VU_ === u___ && (V___ = !0),
														V___ && (Vu_ = __V(_, U___, _U)),
														___(_U[9]))
															break;
														if (_U[0])
															return Vu_
													}
												vU_(_U[9]),
												vU_(_U[35])
											} else {
												if (47 == __U)
													return [u___ = Vv_(u_[0], 6) && __(u_[0], 6) == _V ? u__ : __V(_, u_[0]), u_[1]];
												if (44 == __U)
													debugger ;
												else if (49 == __U) {
													for (VV_ = u_.filter(function(___) {
														return ___[19] ? __V(_, ___) && null : !___[43] || (___[43].map(function(___) {
															var v__ = __(v__ = ___[36][0], 6);
															_u_(_)[0][v__] = void 0
														}),
														!0)
													}),
													_U = {
														9: [],
														35: [],
														0: 0
													},
													Vy_ = 0; Vy_ < v_v(VV_); Vy_++)
														if (Vu_ = __V(_, VV_[Vy_], _U),
														_U[0])
															return Vu_
												} else {
													if (32 == __U) {
														_v = __v(_, u_[1], 29 == __V(_, u_[2]));
														var _v__ = __y || [];
														return yU_ = __V(_, u_[0], typeof u__ != _y ? 1 : u__ + 1, _v__, __u),
														u__ ? (vu_(_v__, _v),
														[yU_, yU_[_v]]) : (_v__.map(function(_) {
															return yU_ = yU_[0],
															_
														}).map(function(_) {
															yU_ = yU_[_]
														}),
														__u && __u[24] ? function() {
															for (var _ = v_v(arguments), __ = Array(_), ___ = 0; ___ < _; ___++)
																__[___] = arguments[___];
															return yU_[_v].apply(yU_, __)
														}
														: yU_[_v])
													}
													if (48 == __U) {
														var _V__, _y__ = !1, _u__ = (____ = u_.slice(0, -1).map(function(__) {
															if (!Vv_(__, 45))
																return __V(_, __);
															_V__ = __V(_, __),
															_y__ = !0
														}),
														typeof u__ == _u ? u__ : {});
														return _u__[24] = 1,
														____ = _y__ ? ____.slice(0, v_v(____) - 1).concat(_V__) : ____,
														__V(_, ___(u_), 0, 0, _u__).apply(void 0, y__(____))
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
			function _U__(_, ___, v__, V__) {
				return function y__() {
					var u__ = [].concat(_, [[{}, V__, v__, this, arguments]]);
					___ !== _V && (_u_(u__)[0][___] = y__);
					var _v_ = _u_(u__)
					  , _V_ = (_u_(_),
					{
						9: [],
						35: [],
						0: 0
					});
					return _v_[1].map(function(_, ___) {
						if (Vv_(_, 6)) {
							var v__ = __(_, 6);
							_v_[0][v__] = _v_[4][___]
						} else
							Vv_(_, [12]) && (v__ = __(__(_[12], 6), 6),
							_v_[0][v__] = U__(_v_[4]).map(function(_) {
								return _v_[4][_]
							}).slice(___))
					}),
					__V(u__, _v_[2], _V_)
				}
			}
		}
		__V(v__, _)
	}(V_v(__ = function(_) {
		var __, ___, v__, V__ = V_U(_, 0), y__ = V__[0], u__ = V__[1];
		for (y__ = function(_) {
			var __ = V_V((_ = _.match(_u_(v_, vv_))).slice(0, 1)[0])[0]
			  , ___ = _.slice(1, -1)
			  , v__ = [];
			___.map(function(_) {
				for (var __ = v_u(V_V(_)[0], 16), ___ = 8 - v_v(__), V__ = 0; V__ < ___; V__++)
					__ = _U + __;
				vu_(v__, __)
			});
			for (var V__ = v_u(V_V(_.slice(-1)[0])[0], 16), y__ = __ - 8 * v_v(___) - v_v(V__), u__ = 0; u__ < y__; u__++)
				V__ = _U + V__;
			return vu_(v__, V__),
			v__.join(vV_)
		}(y__); v_v(y__); ) {
			var U__ = (___ = VV_((__ = y__).slice(0, 1)),
			v__ = VV_(__.slice(1, 1 + ___)),
			[__.slice(1 + ___, 1 + ___ + v__), 1 + ___ + v__])
			  , _v_ = U__[1];
			vu_(__V, U__[0]),
			y__ = y__.slice(_v_)
		}
		return _.slice(u__)
	}(__)))
}("jsvmpzl:ver.1.1.3", "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66HrbJqA66HsbJrA66HtbJsA66HubHdvlrd3BifCyq53E66ye2ba64vlqc3Bcw76y6Ei30e36Hh64vlqc3Bcw76y6Ca30e36Hi64vsqj3Bcwew76y6Ca306Dm30e36Hj64vzqq3Bcwlwew76y6Ca306Dm306Ej30e36Hk64vnwew76y6Ei306Fl30e36Hl64vBekB43Bgwew76y6Ei306Dn30MjfFlwew76y6Ei306Dn30e36Hm64HaA86Ek83FK2hC9H7A56Hv3a6yhBvH7A56Fm3a6EkvBgkB63Bgwfw86Ek6Fm316Fk30Mk6Hvwfw86Ek6Fm316Fk30e36Hn64HBuAB26Fn8xfK3fK4fK5fK6fK7fK8fK9fKafKbfKcfKdAn6Fo8ifKefKffKgfKhfKifKjhB1H7A56Hw3a6Fovnwe6yw86Fo6Hw3131e36Ho64hB8H7A56Hx3a6Fnvuwlw76y6Ca30w86Fn6Hx3131e36Hp64hC0H7A56Fp3aw76y6Ca30vBfkB53BgMdFKkw86Fp6Hy30wlwew76y6Ca306Fp316Kl30e36Hq64eF8gF5kC33Bgks3Bgw76y6Fq30wew76y6Fq306Bd30rB33E9q43tbaMsfKmwnMgwew76y6Fq306Bd306El306HrgCtMqfKnwlwew76y6Ca306Dm306Ej306HsgBvMqfFlwlwew76y6Ca306Dm306Ej306HtgyMqfKowlwew76y6Ca306Dm306Ej306Hu6Hg64K0KQDd79x7326Bki07xxv32w86BkbBe31Mhwfw86Bq6Kp306Bd307mxk32w76Bkb631w76Bqbh317uxs32w76Bkba31wfw86BkbBe316Bl307BoxBl32w76Bkbh31rB73tw76Bkba31wuMnFKqfE5wfw86BkbBe316Kr306Bl30vPYmqC93BckC33BgkB13Bgrf3Biw76Bkbh31bK0rf3Biw76Bkba31bKsru3H9MjfKtwew76Bkb6316El30q43tbaKa78q63E86BkKPVu7PVgMPVcGPV8KPV2HEJ2AEIy6BrkEIr3C86BrMEIh6CfGEIa6Cf6CyKEHyHDdADa6B9kD43C8w86Ku6B930MCoGClKCgj5K06Eaa0eC4GC16HzKBtH7A56Bm3a7hxf32w86Ea6Cz306Hz7cxa326BmB36Ea7gxe32w86Ea6Cz30s4e36Bm6464H7A56B3i0HlAj6B4xe32w86B36Do30i0HOhAOe6BhxO832w86B46Bh30MNtGNqKNleNiiNf1Ga6uGG56FrKFxHeAc6BmM7C2636B9vo6FrKh7fMd6Frw86Bm6Em3064vD9kBd3C8qi3BcMdfB1w86Bm6Dn30ro3Haw9C2636B130w86Bm6B130KBo7BlxBi32w86Bm6B130GB3Kz7xMvC2636Bqwmwfw86Bm6I0306B1306En3064647oxm32wfw86Bm6B1306Cz306Bm7ixg32w86Bm6I030C263e36Bm641Bq6B9GBkKBfHhAf6EoMaw8C2636u307pMn6Eo6Bqwfw86Eo6B1306En30e36Eo64196B1G4K0641Dm6EmGDg6D0KD8hBsH7A56Ep3a6D0KBdvBaMd6Epw86D06Dn30Kr7pxn32w9C2636Ep31w86D06Ep3164vBaMdfBdw86D06Dn30Kr7pxn32w9C2636Bd30w86D06Bd3064641B66BsGB0KweuMsC263wmwgw9C2636B1306Cz306u306464HBHxABHt6BaxBHm32w86B46Ba30MBH6iBGt1D46B1GCy696qKCp7txr3269xl32w8C2636930k73C86980vBrr83E96q6CyKi7gxe32w8C2636q306qKv7txr32w8C2636q30rd3kw7696Bl30bg641B26BdGx6I1KqeoMmC263wgk93C86I16Fj6Cg30641Kb6DpGK56B7KJxHfAd6Fsw8C2636930HeAc6Ftw76B76930HfAd6Dqw8C2636q30HeAc6Eqw76B76q307dMbw9C2636Fu30vGvr83B56DqbgKEapE7H6A465bhr73x656Eq263z3065KDfHBiABf6I2rB93brB237wd6Ftr63765b631rj3tbmrd3kr73B565bgbibf7BrxBo3E7wk6Fsrd37r73e6Dq65b631rx3d6I2rq3tbmrk3kre3B5r73e6Dq65bgbiKC5pC2H6A465bhr73x656Eqx73Bt65bgKB97B6xB332wk6Fsrd37r73e6Dq65b631wd6Ftr63765b6317ixg3Btw8C2636q306Eqe4C263641Dn6FuGDhKDcHeAc69w8C2636930HeAc6qw8C2636q307BdxBa3Kvwc69r6376qb631rr3dbI3rk3tbCprd3kr73B56qbgbi7yxw32w7696Bl30Mjr73Bu6qbgw86Cf6I430641Ca6BsGC4KBzHsAq6BsMlC263wfw86Bh6Bs306C4307yxw32w76Bs6930Mjbhwfw8C26369306Cq30e36Bs641Lx6ErGLr6ChKLjH6A46980HH2AGz6HbGGt6CrKGlH8A66Cr6CrH8A66DrbKwH8A66EsbI3eFoGFlKFg7BbxB8326DrrB03brt3erf3kbKxr83b6DrbI5r83H86Drbl6Es7BbxB8326CrrB03brt3erf3kbKyr83b6CrbI5r83H86Crbl6EsHsAq6Etrl3bre3er73d6Drbl6Cr6Es7bx93Jl6EtbFv7bx93Bt6EtbI6eB1rz3k6Etgsri3DfMaw86Cf6Er30bI6baq43tba6464pDkHdA465bhA56Fw3ar73x656Chx73Bt65bgKCkHB1Az6FxMurp3kki3C86FwMaw86Cf6Er30bFv6Hb7jxh326Fwra3kM36FxbKz7tMrrg3nra3kM36FxbFvbhw7696C330ehBf696Chw86Ba6B13064w76Bh6u30HlAj6Cbxe32w86B36D130i0HLtALq6FjxLk32w86Cb6Fj30iL51G96CgGG36B7KFvHdAb69w76B76930HdAb6qw76B76q30H7A56Eu80pE8H6A465bhr63x656q263z3065KDhHBhABe6DlrB83brB137wc69r63765b631rj3tbmrd3kr73B565bgbibf7wMuMiblwer7376Dlbg6Bd30w86Eu6C3307xMvMjblwfr83b6DlbHd6Bd30w86Eu6C330efMdfE5w86Eu6Fy30641Eq6BvGEk6FzKEcHfAd6G0w86Fz6Bl30H6A46980pCuH6A465bhr73x656G0x73Bt65b6KC17ByxBv3E7wd69r73765bBe31rBa3dMlMe65b6w86Fz6L030bl6I7rj3tbmrd3kr73B565bibgeoBm69r83Bu6G0b6w86Ba6B13064HKdAKa6EvxK432w86Cb6Ev30iJp1F56CgGEz6B7KErHdAb69w76B76930HdAb6qw76B76q30H7A56G180pD4H6A465bhr63x656q263z3065KCdHBhABe6DlrB83brB137wc69r63765b631rj3tbmrd3kr73B565bgbibf7rMpMd6Dlw86L16L230w86G16C330efMdfE5w86G16Fy30641Ee6BvGE86G2KE0HfAd6G3w86G26Bl30H6A46980pCpH6A465bhr73x656G3263z3065KBx7BuxBr3E7wc69r63765b631rB73dri3bMc65w86G26Ew30bfrj3tbmrd3kr73B565bgbiehBf696G3w86Ba6B13064HDoADl6CexDf32w86Cb6Ce30iD01Br6CgGBl6B7KBdlBaKrepMnMiMd6B7w86Ev6Cg306L36L4Df6BxKa58B6fL56L6641B36BvGy6I8KrepMnMbM66I86I96L7w86Ev6Bv3064HT0ASx6CixSr32w86B46Ci30MSciS01Bn6CcGBhKBc7rxp32w9C2636D230Baw86Ba6B1307hxf32w9C2636Ia30bh641D56DsGCz6B8KCrvB8re3Biq63E66B8fG4Ko7mxk326B8Md6B8w86Ce6Bv30647nMl6B8wgw9C2636D2306Dp307pxn3Btw9C2636Ia30w76B86q30641Kf6D3GK96IbKK1HgAe6B8w9C2636D230HeAc6G5w76B86930HeAc6G6w76B86q30HgAe6B0w9C2636B030HeAc6Dtr73k6B0bgHgAe6D4r93Bu6G66DtvCa6IbKo7mxk326D4Md6D4w86Cf6I430KBe7BbxB8326D4MB0rm3tr73n6D4bhw9C2636G730bhw86Cf6L830HfAd6Dur83k6D46B0HtAr6G8Mmr73k6Dubg6G6w86Cf6L930vCv6DuKCnpBdH6A46jbhr73x6j6Dux83Bt6j6B0Kk7iMg6G56jw9C2636Ic30HmAk6IdMfbh6Duw86G56Ie307hxf3G9w76B86q306G864eiBg6Id6G8w86Ba6B130641Ca6BsGC4KBzHsAq6BsMlC263wfw86Bh6Bs306C4307yxw32w86Bs6D230Miwgw9C2636D2306Bs30e36Bs64156G7bhw76Bh6u30HMdAMa6IfxM432w86B46If30MLpiLd1d68M9w76Bh6u301Bs6B1GBm68KBf7yxw32w8C2636830Mi68wew8C26368306u307dMbw9C2636Cc30641Bf6CcGB9KB47nMlC263wfw86Ci6Cc306C4307dMbw9C2636Ga30641Bh6LaGBb6DvKB37gMe6Dvw9C2636Ds307dMbw9C2636D330e4C263641Bu6D5GBo6DvKBgvp6DvKi7gMe6Dvw9C2636Ds3064HiAg6HfMbw9C2636Ex30e36Hf641e6B0r93BubJybCp1Bl6GbGBf6EyKB7eB4GB16C568KseqMo6C5wjBc68w86Ey6B1306D53064641Bx6LbGBr6EyKBjeBgGBd6C56oKB3eB0My6C5wtBm6Ey6owfw86D66Lc306B1306D5306464w76Ci6u30HlAj6D6xe32w86B36Gc30i0e36B3647BIfMBIbGBI7KBI1H8A66B36BrHfAd6B4w86B36Do30HfAd6Baw86B46Ba30HfAd6Cbw86B36D130HYbAY86D7xY232w86Cb6D730iXn1Pe6CgGP86B7KP0HdAb69w76B76930HdAb6qw76B76q30HgAe6Csw9C2636Gd307cMaw86B76Fu30H7A56Dw80pKhH6A465bhr63x656qx83Bt65bBeKJoHBhABe6IgrB83brB137wc69r63765b631rj3tbmrd3kr73B565bgbibfHBtABq6IhrBk3brBd37wi69rc37r63e65bab631rp3tbmrj3krd3B5r63e65babgbibfHBtABq6IirBk3brBd37wi69rc37r63e65b6b631rp3tbmrj3krd3B5r63e65b6bgbibfHyAw6Ijrr3nrk3nr73d6Igblr73d6Ihbi6IipD9H7A56C6bhky3Bgr73x6C6bgrk3xre3e65r83k6C6bLd6q273z306C6KBo7BlMBiMB5rt3brm376Ijrf3kbDhr83tbBe6C6bJvw86Cs6Ge30w86Dw6C330HkAi6D8MdbEbw86Cs6Ge30vBb6D8KB3OB0rf3B5w86Dw6Bl30bgKh7fMd6D8w86Dw6C33064efMdfE5w86Dw6Fy30641Hv6BvGHp6CtKHhHfAd6Dxw86Ct6Bl30HgAe6Csw9C2636Gd30HgAe6Cjw9C2636Ik30vD2q63Bc6CjKCp7oxm326Cjxf32w9C2636Ik3080pBwH7A56C6bhrf3x6C6w86Cs6Bl30273z306C6Kv7txr32wk6CjMd6C6w86Cs6Ew30316C664HkAi6D8MdbEbw86Cs6Ge30vBq6D8KBiHkAi6GfMd6D8w86Ct6El30vurc3H96Gfq43tbaKc7ax8326Dx6Gf6464eeMc6Ct6Dx6Cj6Il64166GdfLejHv6Ct6Dx6CjKHgH6A46980H7A56ChbhpGdH6A465bhr73x656Dx263z3065KFlvFir73B565bgKF4HBhABe6ImrB83dwp6CjMir63t65baw86Ct6Ew3031rd3kr73B565bgb6HBiABf6InrB937wj6CjMc65w86Ct6Ew3031rk3tbDhrd3kr73B565bgb67BlxBi3E7wd69r7376Chb631ry3dr83n6Im6Inrk3tbmre3kr83B56Chbgbi79273z306Ch64ehMf696Chw86Ba6B9306Il647EUvkEUr3C8wfw86Br6Do306Cu30MEU3GETz6CyKETqH8A66B36BrHfAd6B4w86B36Do30HfAd6Bhw86B46Bh30HfAd6Baw86B46Ba30HfAd6Ciw86B46Ci30HfAd6Cbw86B36D130HfAd6Cew86Cb6Ce30HfAd6D7w86Cb6D730HfAd6D6w86B36Gc30HfAd6Ggw86D66Gg30HRvARs6CuxRm32w86B46Cu30MR7iQv1d68M9w76Bh6u301B86EzGB26o68KuesMqw9C2636F0306o68w9C2636B930641B86F1GB26o68KuesMqw9C2636Io306o68w9C2636B930641D06B1GCu6Ip6o68KCi7yxw32w8C2636830Mi68wew8C26368306u307ixg32w9C2636Gh306Ip7hxf32w9C2636Gi306o7dMbw9C2636Cc30641Bf6CcGB9KB47nMlC263wfw86Ci6Cc306C4307dMbw9C2636Ga30641Ba6LfGB46DyKx7gMe6Dyw9C2636Ds30edMbw9C2636D330641Bu6D5GBo6DyKBgvp6DyKi7gMe6Dyw9C2636Ds3064HiAg6IqMbw9C2636Ex30e36Iq641e6Bbr93BubDjbCp1e6D9r93BubDjbCp156F0ba156Iob61Em6GbMEgGEdKE8jB26oKvvtrd3Biq53E66ofG4K5e36GjK5e36Cv6GkeD0GCx6sKCqeCniCk1B86DaGB26C56o68KrepMn6s6C56o68wcM56o6Gk6Da30641B66DzGB06p6o68KqeoMm6s6p6o68wcM56o6Gk6Dz30646464w76Ci6u30HCnACk6IrxCe32w86B46Ir30MBziBn1Bd6ExGB7KB2HvAt6DbMoqb3Bcq63BcfGlw9C2636D330e36Db64156B0baw76Cu6u30HlAj6Isxe32w86B36Bw30i0HEwAEt6GmxEn32w86B46Gm30ME8iDw1B36EzGy6s6vKqeoMm6s6vwgw9C2636It306B930641B36F1Gy6s6vKqeoMm6s6vwgw9C2636Iu306B930641Bh6B1GBb6s6vKB27hxf32w9C2636Gn306s7hxf32w9C2636Go306v64w76Bh6u30HP5AP26C2xOw32w86Is6C230MOhGOeKO9HgAe6C2M9w76Gm6u307EjxEg32w86C26It30ME1iDp1Dm6GpGDg696jKD7HfAd6sw9C2636Gn30HeAc6B0w76s6B0307nMlC263696j6B0w86Gq6C4307fMd696jw76s6Iv307B1xz32w9C2636Gr30Mk6jr73e6j6B0w7696Cq3064w76C26u307EsxEp32w86C26Iu30MEaiDy1Dv6GpGDp696jKDgHfAd6sw9C2636Gn30HeAc6B0w76s6B030HrAp6IwMk6jr73e6j6B0w7696Cq307fMd696jw76s6Ix307nMlC263696j6B0w86Gq6C4307ixg32w9C2636Gr306Iw64w76C26u30jE2696j6B0KDpHfAd6vw9C2636Go30vBh6vKtH7A56Gs6v7ixg32w9C2636Go306CyKiHgAe6Gsw9C2636Gr30pBlH6A465bhr73x656B0263z3065Ku7sxq3Ffwc69r63e6j6531w76Gs65316Gqe36C264HlAj6Iyxe32w86B36Eg30i0HJ4AJ16F2xIv32w86Iy6F230iIg1Fz6EgGFt6B86B0KFiHeAc6Dtr73k6B0bgHtAr6Cdrm3t6Dtrf3B5w76B86q306DtHBdABa6IzrB43nrx3nrk3nr73d6Cdbmr73d6Cdblr73d6Cdbi6CdH7A56Gt80pB9H6A465bhr73x656Cdx73Bt65bgKh7fMd6Izw86Gt6C330HnAl6C7Mg6Gt6Cdw86Ba6B9307fMd6C7w86B86Dp30641Cb6J0GC56B8KBxHBbAB86CdrB23bwww76B86930rj37rd3tw76B86q30bab631bf7hxf3G9w76B86q306Cd64HSwASt6DcxSn32w86B46Dc30MS8iRw1B168Mxig166Bw6C2166C76F2wdw76Cu68306u301Jl6CcGJfKJa7nMlC263wfw86Cu6Cc306C430HeAc68w8C2636830HcAa6vw6686v30HeAc6Bww7686Bw30vCdrp3Biw9C2636Gh30w9C2636F030KhHfAd6E0w86Bw6Ez30KB0HfAd6E0w86Bw6F1307hxf32w9C2636G730bavEskB43Bgw9C2636Dd30ro3Biwgw9C2636Dd306J1306E0KB77B4MB1C263kd3Bg6vw66v6930wgw9C2636Dd306B130KC87BexBb32w9C2636Dd30Mw6BwC263kd3Bg6vw66v6930w86E06C4307pxn32wgw9C2636Dd306J1306E0641B36IcGy696jKq7oMm696jwgw9C2636Dd306Gp30641Ff6ExGF9KF4HmAk6C7wfw8C26368306C730vE8rp3Biw9C2636Gh30w9C2636F030KBx7yMww9C2636D230w9C2636B030w86C76Eg30HvAt6DbMoqb3Bcq63BcfGlw9C2636D330KBeHvAt6DbMoqb3Bcq63BcfGlw9C2636D3307fMd6Dbw86C76J030e36Db641e6B0r93BubDjbCpw76Cu6u30HDaAD76E1xD132w86B46E130MCmiCa1u6B1Gp6E2Ki7gMe6E2w9C2636Em30641Bb6BdGB56F3KyewMuC263wokh3C86F3w9C2636F3306Cg3064w76Bh6u30HlAj6J2xe32w86B36Cw30i0HKfAKc6J3xK632w86J26J430iJr1Dt6CgGDn6E2KDfHdAb6pw76E26p30HfAd6Bfw86E26Bf30vBz6BfKBiHBfABc6B7MB66pwB1Mu6BfwpMi86bJ5bJ6w86Ba6B9306Dp306Dp30K9H7A56B76pefMd6D7w86B76Bd30641Fs6BvGFm6J7KFeHjAh6pMd6J7w86D76Bv30HdAb6E3w66p6930vD7kB13Bgrf3Biw76E3bh31bJ5rf3Biw76E3ba31bJ6KByHxAv6BfMqMeb6bgw86E36Cq30w86Ba6B9307gMebhbgw86E36Ie307fxd3G9w66p6q30bl64H8A66Bf6CyesMqie146p6p166Bf6Bfw86E16B93064HN4AN16CvxMv32w86B46Cv30MMgiM41n68Mji8166Cw6J3w76Bh6u301G06DaGFu6s6C56o68KFg7qxo3268Mi68wew8C26368306u30HkAi6GuMd6o68w76s6Ez30HjAh6pMd6C5w86Gu6D530HeAc6F4w76Gu6830eCyMCviCi146p6p146o6o1b6vw76F46v30156Lg6s1d6Bww86F46Bw301d6C7w86F46C7301c6B0w76s6B0301c6F3w7686Cw30w86E16B930641Dg6DzGDa6s6p6o68KCx7qxo3268Mi68wew8C26368306u307uxs326pMm6pw7686Cw30w9C2636Gv30HB1Az6F5Muw66p6p30wkMd6o68w76s6F1306D530e36F5641Bq6GvGBk6p6CwKBavB7rd3Biq53E66pfG4KkeiMg6pC263w86Cw6Bv30K4e26p64w76Bh6u30HlAj6J8xe32w86B36F630i0HH6AH36J9xGx32w86J86J430iGi1Gf6GwGG96De6Bb6D96BfKFsvB7q63Bc6BfKv7txr326BfMkr83BubEbbiw86Ba6Er3064HBeABb6oMB66De6BfwyMrif1d6Bbr83e6Bb6D9w86Gg6B9306Lh30HBbAB86vMB3Mi6Bbwdw66o69306Cq30r73k6D9bgw86Ba6B9307lxj32w66o6q30r73k6BbbgeyMwik146o6o146v6v166Bf6Bfw86E16B93064HN8AN56GjxMz32w86B46Gj30MMkiM81t68Mpi8166F66J9wdw76Cv68306u301F96DaGF36s6C56De68KEo7qxo3268Mi68wew8C26368306u30HBaAB76CxMB16Dew76s6Bb30w76s6D930wew7686F6306Gw307lxj32w6686v30w76Cx6v30HB9AB66pMB1C2636s6C5w76Cx6o3068wfw86Cv6Da306C4307eMc6Cxw76p6Em30e26p641Fy6DzGFs6s6p6De68KFe7qxo3268Mi68wew8C26368306u307uxs326pMm6pw7686Cw30w9C2636Gv30HBjABg6CxMBa6Dew76s6Bb30w76s6D930w76p6Bf30wew7686F6306Gw307lxj32w6686v30w76Cx6v30HB9AB66F5MB0C2636s6pw76Cx6o3068wfw86Cv6Dz306C430e36F564w76Cv6u30647EBvMEBrGEBnKEBhH8A66B36BrHfAd6B4w86B36Do30HfAd6Dcw86B46Dc30HfAd6D6w86B36Gc30H6A46r80H7A56Gx80H7A56Ck80H7A56Cl80H7A56Cm80H7A56Cn80H7A56F780H7A56F880H7A56F980H7A56Fa807WxMWuGWrKWmH7A56Bj80pCpH6A465bhr73x65bFi263z3065KBxvBur73x65bDjKn7lxj32w76Bj6531r63d65baKu7sxq32w76Bj6531rd36r63d65babJxH7A56BobhH7A56C9bhpT0H6A465bhr73x65bFi263z3065KS8HBsABp6BprBj36rB536rr36re366C9r73d6C9bar73d6C9b6r83d6C9bBer73d6C9bg7B0xy326Bprr36rk36r7376Bpbir73b6BpbfbJw7gxe32w76r6Bo316Bp7hxf32w86Gx6Bp316BoHfAd6Diw86Bj6Bo31HfAd6Fgw86Bj6Di31HfAd6Fhw86Bj6Fg31HzAx6crt36rf3kw86Bj6Bp31bHer83k6BpbJa7yxw32w86Ck6Bo31ri3nr63d6cbmr6376cbi7yxw32w86Cl6Bo31ri3nr63d6cblr6376cbl7yxw32w86Cm6Bo31ri3nr63d6cbir6376cbm7gxe32w86Cn6Bo316cHBnABk6crBf36rB036rm36r83k6FhbLir83k6FgbLjr83k6DibHer83k6BobJa7yxw32w86F76Bp31ri3nr63d6cbmr6376cbi7yxw32w86F86Bp31ri3nr63d6cblr6376cbl7yxw32w86F96Bp31ri3nr63d6cbir6376cbm7gxe32w86Fa6Bp316cvD0q63Bc6BoKi7gxe326Box7326C9baKC57BbxB8326BorB0366Diwt6Bjwm6Bjwf6Bjr8366Fh6Di3131317pxn3Ff6C9wf6Bjw86Bj6C9313164HyAw6Jb8rbhbab6bgbiblbCpbEbbDjbJtbJuHCYcACY86DkxCY132w86D66Dk30MCXliCX81BBt6GaGBBmKBBgvBgkB53Bgw9C2636Gy30rp3Haw9C2636Jc30w9C2636Gi30K4e26464HuAs6oxo32w9C2636Jc30w9C2636Gi30HdAb6Jdw66o6930HkAi6Bbrd3Buw66o6q30bgHuAs6Fbxn32w9C2636Gy30r83e6BbbDhHkAi6Fcrd3kr73e6FbbabgHmAk6B6xf32w9C2636Je3080pNaH6A46wbhr73x6w6Fc263z306wKMivMfr73x6w6BbKo7mxk32w76B66w31w76Jd6w31KLdHjAh6cwd6B6r63t6wba31vJoqd3Bcr83B56w6BbKEy7qxo326cri3nr63d6cbir6376cbm7D0xCx326crCq3nrC73nrBc3nri3dwc6rr6376cbm31bmro3dwi6rrc3br6376cblbf31blro3dwi6rrc3br6376cbibf31biwc6rr63b6cbf317B0xy3Ff6crr3dwl6Jbre3nr83Bu6w6Bbbh31bmvE5kv3Bgr93Df6BbbDhrf3Bir83B56w6BbbgKD37D0xCx326crCq3nrC73nrBc3nri3dwc6rr6376cbm31bmro3dwi6rrc3br6376cblbf31blro3dwi6rrc3br6376cbibf31biwc6rr63b6cbf31647zxx32w76B66w31rk36we6B6r73t6w6Bb316cHmAk6Gzxf32w9C2636Jf3080pHqH7A56Cobhr83x6Co6Fc273z306CoKGvHeAc6wr83t6Fc6CovBer83B56CobgKfHdAb6cw76B66w31KlHjAh6cwd6B6r63t6wbg31vEvkl3C8r73x6Cobgr73Jk6wbgKi7gxe32w86Gz6Co316cKDl7DixDf32w86Gz6Co31rD036rCa36rBe36wj6F7wc6rr6376cbm3131wp6F8wi6rrc3br6376cblbf3131wp6F9wi6rrc3br6376cbibf3131wj6Fawc6rr63b6cbf3131641Br6IvGBl6B26jKBb7B8MB56B26jw9C2636Je306Ck6Cl6Cm6Cn6rw9C2636H030641Gc6IxGG66B26jKFwHjAh6cwd6B2r63e6jba317zxx32wd6B2r63e6jba31we6B2r73e6jbBe317mxk32we6B2r73e6jbBe316c7B9MB66B26jw9C2636Jf306F76F86F96Fa6Gxw9C2636H030HjAh6cwd6B2r63e6jba317zxx32wd6B2r63e6jba31we6B2r73e6jbBe317mxk32we6B2r73e6jbBe316c641BMi6H0GBMb6B26j6B66Ck6Cl6Cm6Cn6rKBLjHgAe6Fbw9C2636Gy30HrAp6Byrk36w76B26j31w76B6bh31HxAv6Bzrq36wd6B2r63e6jba31w76B6ba31HxAv6C0rq36wd6B2r63e6jb631w76B6b631HzAx6C1rs36we6B2r73e6jbBe31w86B6bBe31H6A46wbgpPjH7A56H1bar83x6H16Fb273z306H1KOoHD9AD66EcrD036rCg36rBv36rB436we6Ckr7376Bybm31wk6Clrd3br7376Bzblbf31wk6Cmrd3br7376C0bibf31we6Cnr73b6C1bf31wd6B6263z306w31HD9AD66EdrD036rCg36rBv36rB436we6Ckr7376Bzbm31wk6Clrd3br7376C0blbf31wk6Cmrd3br7376C1bibf31we6Cnr73b6Bybf31wd6B6263z306w31HD9AD66EerD036rCg36rBv36rB436we6Ckr7376C0bm31wk6Clrd3br7376C1blbf31wk6Cmrd3br7376Bybibf31we6Cnr73b6Bzbf31wd6B6263z306w31HD9AD66EfrD036rCg36rBv36rB436we6Ckr7376C1bm31wk6Clrd3br7376Byblbf31wk6Cmrd3br7376Bzbibf31we6Cnr73b6C0bf31wd6B6263z306w317ax8326By6Ec7ax8326Bz6Ed7ax8326C06Ee7ax8326C16EfHDnADk6EcrDe36rCu3nrCa3nrBe3nrj3dwd6rr7376Bybm31bmrp3dwj6rrd3br7376Bzblbf31blrp3dwj6rrd3br7376C0bibf31biwd6rr73b6C1bf31wd6B6263z306w31HDnADk6EdrDe36rCu3nrCa3nrBe3nrj3dwd6rr7376Bzbm31bmrp3dwj6rrd3br7376C0blbf31blrp3dwj6rrd3br7376C1bibf31biwd6rr73b6Bybf31wd6B6263z306w31HDnADk6EerDe36rCu3nrCa3nrBe3nrj3dwd6rr7376C0bm31bmrp3dwj6rrd3br7376C1blbf31blrp3dwj6rrd3br7376Bybibf31biwd6rr73b6Bzbf31wd6B6263z306w31HDnADk6EfrDe36rCu3nrCa3nrBe3nrj3dwd6rr7376C1bm31bmrp3dwj6rrd3br7376Byblbf31blrp3dwj6rrd3br7376Bzbibf31biwd6rr73b6C0bf31wd6B6263z306w317gxe32w76B26j316Ec7mxk32wd6B2r63e6jba316Ed7mxk32wd6B2r63e6jb6316Ee7nxl32we6B2r73e6jbBe316Ef641e6Bbr93BubFibCpw76Dc6u307txr32w86B36Dk30Md6Dkw86Dc6Gb30647GjxGg32w76y6Jg30GG26Eh6H2KFrHxAv6oMr6H2wmwfw86Br6D1306Ce306Bv30HxAv6vMr6H2wmwfw86Br6D1306Ce306Bv30HyAw6EhMr6Ehwmwfw86Br6D1306Ce306Bv30HCmACj6pMCewCbMC36Eh6oiBe1k6Bwwfw86Br6Bw306C2301k6C7wfw86Br6Eg306F230146v6vwfw86Br6Dk306Da306Bd30e26p64H7A56Bn807D4MD1fLkGCm6BxKCe7B8MB5rt3erf3ew86Bx6H330fLlw86Bx6H430w86Bn6C330vB0rg3Dfw86Bn6Bl30bDgKe7cMaw86Bn6H5306464w76y6H6307D4MD1fLmGCm6BxKCe7B8MB5rt3erf3ew86Bx6H330fBjw86Bx6H430w86Bn6C330vB0rg3Dfw86Bn6Bl30bDgKe7cMaw86Bn6H5306464w76y6H6307D4MD1fLnGCm6BxKCe7B8MB5rt3erf3ew86Bx6H330fHcw86Bx6H430w86Bn6C330vB0rg3Dfw86Bn6Bl30bDgKe7cMaw86Bn6H5306464w76y6H630HmAk6H7wfw86Jh6Cz306Ji307P8xP532wfw86Jh6Cz306Ji30GOjKOevObMjw76Bqba31w8FLo6Fk30KN0H8A66E4dJjHwAu6FdwpMjFLpwew76Bqba316Hy30ba31vKvr83Bi6FdfaKc7ax8326E4dFevK4r93Bi6FdfDgKc7ax8326E4dFeKJcpCeH6A465bhre3x65w86Bn6Bl30263z3065KBfvBcru3E9MjfHcwew76Bn65316El30q43tbaKc7ax8326E4dFe64vBjru3E9Mmq43tbawew76Bqba316Cq30fE8Kj7hxf3Btw76Bqba31fE864HtAr6cMnri3BuMaw86K16Lq30bJz6I77wxu3Btw76Bqba31rg3efLrM9w76c6Bd30HBdABa6cMB5bhblwzrs3eMbblw76c6Bd30Mbblw76c6Bd306Cq307BxxBu3Btw76Bqba31rBf3efLsMB7MB1ro3er83e6FdfLtMaw86Bn6Bd306cw76y6Jg306I9vs6E4KlejMhC2636Bqw86H76En3064KlejMhC2636Bqw86H76En30646478q63E86Bka0")

好,我看不懂,我看你当中的值可以吧!
【猿人学WEB题目专解】猿人学第18题,# 猿人学WEB题目专解,python,算法,爬虫
观察到传入的参数中有 CryptoJSAESCBCpkcs7 这些参数,所以我们只需要想办法找到 keyiv 还有要被加密的值就可以了,可是怎么加密呢?
根据 JavaScript 中的 CryptoJS 加密模型,可以推断出 CryptoJS.AES.encrypt 方法只有三个参数:【猿人学WEB题目专解】猿人学第18题,# 猿人学WEB题目专解,python,算法,爬虫

所以我们来 hook (我是因为已经知道 a、b、c 的值,所以直接打印转换后的,正常可以直接使用 debugger 查看他们的值):

first = true;
crypto_js = _[1][0].CryptoJS.AES.encrypt;
_[1][0].CryptoJS.AES.encrypt = function(a, b, c) {
    if (first) {
        first = !first;
        console.log(_[1][0].CryptoJS.enc.Utf8.stringify(a));
        console.log(_[1][0].CryptoJS.enc.Utf8.stringify(b));
        console.log(_[1][0].CryptoJS.enc.Utf8.stringify(c.iv));
        // debugger;
    }
    return crypto_js(a, b, c);
};

放开断点后的第一次输出,就是我们的相关参数:

【猿人学WEB题目专解】猿人学第18题,# 猿人学WEB题目专解,python,算法,爬虫

可以发现 keyiv 都是一样的,而且像是两个一样的字符串叠加,而我们要加密的文本先是 page 参数,然后竖线,然后一堆随机数,当中是字母,我们先把他们都当定值使用,进行一次 AES 解密:

import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad

a = '646503bf646503bf'
b = '2|225m259,225m258,225m257,225d257,225u257'
aes = AES.new(key=a.encode('utf-8'), mode=AES.MODE_CBC, iv=a.encode('utf-8'))
v = base64.b64encode(aes.encrypt(pad(b.encode('utf-8'), AES.block_size, style='pkcs7'))).decode('utf-8')
print(v)

我们来对比一下两边执行的结果:
【猿人学WEB题目专解】猿人学第18题,# 猿人学WEB题目专解,python,算法,爬虫
【猿人学WEB题目专解】猿人学第18题,# 猿人学WEB题目专解,python,算法,爬虫
Nice!这加密并没有任何魔改的地方。
我们看到参数中有个时间戳,然而加密中并没有,让我相信他们之间没有任何联系?
我不信,把这个短的加密值的一半变成10进制:
【猿人学WEB题目专解】猿人学第18题,# 猿人学WEB题目专解,python,算法,爬虫
世界上的很多事情就是这么巧,然后我们稍微试试要被加密的文本,发现他大部分都是长度填充,真正有意义的只有那个 u
也就是说,不管你写成 2|225m259,225m258,225m257,225d257,225u257 还是 2|_______,_______,_______,_______,___u___ 还是 2|u ,都可以正常请求!文章来源地址https://www.toymoban.com/news/detail-590291.html

解题源码

import os
import time
import base64
import requests
import jsonpath
from urllib import parse
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad

os.environ["EXECJS_RUNTIME"] = "Node"

headers = {
    'cookie': 'sessionid=j4ypr929ukbi8rcou79p57yylrnccr8i',
    'User-Agent': 'yuanrenxue.project'
}

value = 0
for index in range(1, 6):
    t = int(time.time())
    # a = f'{index}|225m259,225m258,225m257,225d257,225u257'
    # a = f'{index}|_______,_______,_______,_______,___u___'
    a = f'{index}|u'
    b = hex(t)[2:] * 2
    aes = AES.new(key=b.encode('utf-8'), mode=AES.MODE_CBC, iv=b.encode('utf-8'))
    v = base64.b64encode(aes.encrypt(pad(a.encode('utf-8'), AES.block_size, style='pkcs7'))).decode('utf-8')
    url = f'https://match.yuanrenxue.cn/match/18data?page={index}&t={t}&v={parse.quote(v)}'
    # value += sum(v['value'] for v in requests.get(url, headers=headers).json()['data'])
    value += sum(jsonpath.jsonpath(requests.get(url, headers=headers).json(), '$..value'))
print(value)

到了这里,关于【猿人学WEB题目专解】猿人学第18题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JS逆向实战16——猿人学第20题 新年挑战-wasm进阶

    本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! https://match.yuanrenxue.cn/match/20 首先进去网站,我们查看下接口 发现有两个值是改变的

    2024年02月08日
    浏览(66)
  • JS逆向实战15——猿人学第五题 动态cookie乱码增强

    本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! https://match.yuanrenxue.cn/match/5 首先 刚进入页面即显示了 说明次题就和cookie有关系。 然后

    2024年02月07日
    浏览(36)
  • js逆向第16例:猿人学第12题入门级js

    任务:抓取这5页的数字,计算加和并提交结果 既然是入门级,那肯定很简单了 控制台查看请求数据, m 值应该就是关键参数了 进入堆栈 马上定位到了 m 值 \\\"m\\\": btoa(\\\'yuanrenxue\\\' + window.page) 如下图:btoa就是base64编码,window.page就是页码

    2024年02月02日
    浏览(42)
  • Python爬虫猿人学逆向系列——第六题

    题目:采集全部5页的彩票数据,计算全部中奖的总金额(包含一、二、三等奖) 地址:https://match.yuanrenxue.cn/match/6 本题比较简单,只是容易踩坑。话不多说请看分析。 两个参数,一个m一个f,与cookie无关,但是这里会遇到第一个坑,在响应数据中。 可以发现只有三等奖的金

    2024年02月11日
    浏览(43)
  • 猿人学-Android端爬虫比赛开赛

    猿人学-Android逆向第一届比赛打响: 报名地址 :https://appmatch.yuanrenxue.com/ 赛事简介: 搞起来,报名地址: https://appmatch.yuanrenxue.com/

    2024年02月16日
    浏览(24)
  • JS逆向之猿人学爬虫第20题-wasm

    第20题被置顶到了第1页,题目难度 写的是中等 算法很简单,就一个标准的md5算法,主要是盐值不确定, 而盐值就在wasm里面,可以说难点就在于wasm分析 加密的就是sign,sign长度是32位,这个盲猜可能就是个md5 直接跟栈的request发包位置 进去之后可以清晰的看到sign生成位置

    2024年02月15日
    浏览(49)
  • JS逆向系列之猿人学爬虫第8题-验证码-图文点选

    本题的难点就在于验证码的识别,没啥js加密,只要识别对了携带坐标就给返回数据 回过头来看验证码 这里复杂的字体比较多,人看起来都有点费劲(感觉可能对红绿色盲朋友不太又好)#x

    2024年02月13日
    浏览(41)
  • JS逆向系列之猿人学爬虫第14题-备而后动-勿使有变

    题目难度标的是困难,主要难在js混淆部分。 初始抓包有无限debugger反调试,可以直接hook 函数构造器过掉无限debugger

    2024年02月13日
    浏览(37)
  • 【2023】某python语言程序设计跟学第四周内容

    如果判断成立,则执行 语法: 示例: 如果guess等于99,那么输入”猜对了“ 根据判断条件结果而选择不同向前路径的运行方式 语法: 示例: 如果输入的数字等于99,则输出猜对了,否则输出猜错了 紧凑形式:适用于简单的表达式的二分支结构 语法: 示例: 根据多个条件

    2024年02月02日
    浏览(52)
  • 【2023】某python语言程序设计跟学第七周内容

    文件是数据的抽象和集合 文件是存储在辅助存储器上的数据序列 文件是数据存储的一种形式 文件展示形态:文本文件和二进制文件 文本文件与二进制文件对比 文本文件和二进制文件只是文件的展示方式 本质上,所有文件都是二进制形式存储 形式上,所有文件采用两种方式

    2023年04月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包