Greasy Fork is available in English.

超星学习通|继续教育|学银在线|图片题|考试|后台自动挂机|视频文档|章节测验|不占网

【免挂机】【99%正确率】支持闯关模式🚩考试📃视频📺直播▶️章节测试📝文档📚作业📔单页面静音运行,可最小化挂机->不占网速,放心追剧<-对接千万级题库,题目覆盖率99%,题目答案实时收录,轻松拿高分

// ==UserScript==
// @name        超星学习通|继续教育|学银在线|图片题|考试|后台自动挂机|视频文档|章节测验|不占网
// @description        【免挂机】【99%正确率】支持闯关模式🚩考试📃视频📺直播▶️章节测试📝文档📚作业📔单页面静音运行,可最小化挂机->不占网速,放心追剧<-对接千万级题库,题目覆盖率99%,题目答案实时收录,轻松拿高分
// @antifeature payment
// @namespace    caoxingxuexixitong
// @version      1.0.1
// @author       caoxingxuexixitong
// @run-at       document-end
// @storageName  caoxingxuexixitong
// @match        *://*/*
// @require      https://registry.npmmirror.com/jquery/3.7.0/files/dist/jquery.min.js
// @require      https://cdn.bootcdn.net/ajax/libs/jquery.qrcode/1.0/jquery.qrcode.min.js
// @grant        unsafeWindow
// @grant        GM_xmlhttpRequest
// @grant        GM_setValue
// @grant        GM_getValue
//👇请将脚本提示的代码填入下面空白中,一行一个,按Ctrl+S保存👇




//👆请将脚本提示的代码填入上面空白中,一行一个,按Ctrl+S保存👆
// @connect      mooc1.chaoxing.com
// @connect      mooc1-1.chaoxing.com
// @connect      mooc1-2.chaoxing.com
// @connect      mooc1-api.chaoxing.com
// @connect      stat2-ans.chaoxing.com
// @connect      passport2.chaoxing.com
// @connect      zhibo.chaoxing.com
// @connect      49.235.155.5
// @connect      mooc1.hnust.edu.cn
// @connect      stat2-ans.hnust.edu.cn
// @connect      passport2.hnust.edu.cn
// @connect      zhibo.hnust.edu.cn
// @connect      mooc1.hnsyu.net
// @connect      stat2-ans.hnsyu.net
// @connect      passport2.hnsyu.net
// @connect      zhibo.hnsyu.net
// @connect      mooc1.gdhkmooc.com
// @connect      stat2-ans.gdhkmooc.com
// @connect      passport2.gdhkmooc.com
// @connect      zhibo.gdhkmooc.com
// @connect      mooc1.zut.edu.cn
// @connect      stat2-ans.zut.edu.cn
// @connect      passport2.zut.edu.cn
// @connect      zhibo.zut.edu.cn
// @connect      mooc1.wljx.hfut.edu.cn
// @connect      stat2-ans.wljx.hfut.edu.cn
// @connect      passport2.wljx.hfut.edu.cn
// @connect      zhibo.wljx.hfut.edu.cn
// @connect      mooc1.hncj.edu.cn
// @connect      stat2-ans.hncj.edu.cn
// @connect      passport2.hncj.edu.cn
// @connect      zhibo.hncj.edu.cn
// @connect      mooc1.qutjxjy.cn
// @connect      stat2-ans.qutjxjy.cn
// @connect      passport2.qutjxjy.cn
// @connect      zhibo.qutjxjy.cn
// @connect      mooc1.jxjyzx.xust.edu.cn
// @connect      stat2-ans.jxjyzx.xust.edu.cn
// @connect      passport2.jxjyzx.xust.edu.cn
// @connect      zhibo.jxjyzx.xust.edu.cn
// @connect      mooc1.xueyinonline.com
// @connect      stat2-ans.xueyinonline.com
// @connect      passport2.xueyinonline.com
// @connect      zhibo.xueyinonline.com
// @connect      mooc1.cqrspx.cn
// @connect      stat2-ans.cqrspx.cn
// @connect      passport2.cqrspx.cn
// @connect      zhibo.cqrspx.cn
// @connect      mooc1.ynny.cn
// @connect      stat2-ans.ynny.cn
// @connect      passport2.ynny.cn
// @connect      zhibo.ynny.cn
// @connect      mooc1.cugbonline.cn
// @connect      stat2-ans.cugbonline.cn
// @connect      passport2.cugbonline.cn
// @connect      zhibo.cugbonline.cn
// @connect      mooc1.xust.edu.cn
// @connect      stat2-ans.xust.edu.cn
// @connect      passport2.xust.edu.cn
// @connect      zhibo.xust.edu.cn
// @connect      mooc1.xynu.edu.cn
// @connect      stat2-ans.xynu.edu.cn
// @connect      passport2.xynu.edu.cn
// @connect      zhibo.xynu.edu.cn
// @connect      api.axetk.cn
// @connect      api.tk.icu
// @connect      127.0.0.1
// @license      MIT
// @compatible firefox
// @compatible chrome
// @compatible edge
// ==/UserScript==
(() => {
	var e = {
			331: () => {
				! function() {
					let e = 10,
						t = null,
						n = [],
						a = [],
						r = [],
						l = 0;
					const o = "0",
						i = "127.0.0.1",
						s = "6503";
					let d, c = "",
						u = navigator.browserLanguage || navigator.language,
						p = unsafeWindow,
						m = p.location.href,
						g = p.document,
						f = GM_info.script.version.replaceAll(".", ""),
						h = Object.fromEntries(new URLSearchParams(p.location.search)),
						b = p.location.protocol + "//",
						v = e => `; ${document.cookie}`.split(`; ${e}=`)
						.pop()
						.split(";")
						.shift(),
						y = e => {
							let t = h.clazzid || h.classid || h.classId || h.classId,
								n = h.courseid || h.courseId,
								a = h.cpi || "",
								r = g.title.replace("-首页", "");
							p.location.href = e + "/shenchanranV2Cx?classid=" + t + "&courseid=" + n + "&cpi=" + a + "&coursename=" + r
						},
						A = v("UID") || v("_uid"),
						k = (e = 32) => {
							let t = "abcdef1234567890",
								n = "";
							for (let a = 0; a < e; a++) n += t.charAt(Math.floor(16 * Math.random()));
							if (["", !1, null, void 0, NaN, -1].includes(n)) {
								n = "";
								for (let a = 0; a < e; a++) n += t[Math.floor(16 * Math.random())]
							}
							return n
						},
						x = function(e, t) {
							return 1 == arguments.length ? (t = e + 1, e > 1 && (e -= 1)) : 0 == arguments.length && (e = 4, t = 6), 1e3 * parseInt(Math.random() * (t - e + 1) + e, 10)
						},
						w = e => new Promise(((t, n) => {
							setTimeout(t, e)
						})),
						T = [
							["http://api.axetk.cn/api/?act=", "http://tiku.axetk.cn/"],
							["http://api.tk.icu/api/?act=", "http://tiku.tk.icu/"]
						],
						I = e => {
							let t = e.match(/(<img([^>]*)>)/gi);
							if (t)
								for (let n = 0, a = t.length; n < a; n++) {
									let a, r = t[n].match(/http[s]?:\/\/(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+/);
									r && (a = r[0].replace(/http[s]?:\/\//, ""), e = e.replaceAll(t[n], a))
								}
							return e
						},
						M = e => I(e)
						.replaceAll('"', "*")
						.replaceAll("javascript:void(0);", "")
						.replaceAll("&nbsp;", "")
						.replaceAll(",", ",")
						.replaceAll("。", ".")
						.replaceAll(":", ":")
						.replaceAll(";", ";")
						.replaceAll("?", "?")
						.replaceAll("(", "(")
						.replaceAll(")", ")")
						.replaceAll("“", "*")
						.replaceAll("”", "*")
						.replaceAll("’", "*")
						.replaceAll("‘", "*")
						.replaceAll("'", "*")
						.replaceAll("!", "!")
						.replaceAll("-", " ")
						.replace(/(<([^>]+)>)/gi, "")
						.replace(/^\s+/gi, "")
						.replace(/\s+$/gi, ""),
						Y = e => new Promise(((t, n) => {
							null == e.method && (e.method = "get"), null == e.timeout && (e.timeout = 1e4), e.onload = function(e) {
								if (e.responseText.includes("<title>用户登录</title>")) return alert("登录状态失效,请重新登陆超星"), void(p.location.href = b + p.location.host.replace(/mooc(.*?)\./gi, "passport2.") + "/login?fid=&newversion=true&refer=" + encodeURIComponent(p.location.href));
								t(e)
							}, e.onerror = function(n) {
								let a = e.url.match(/^http(s)?:\/\/(.*?)\//)[0].replace(/^http(s)?:\/\//, "")
									.replace("/", "");
								("object" == typeof n && n.error.includes("Refused to connect to") || "string" == typeof n && n.includes("permission")) && (p.logs.addLog('<br><font color="red">刚刚有一个跨域请求发送失败</font><br>👇请编辑脚本代码,将下方蓝色代码填入脚本指定空白中👇<br><h4><font color="blue">// @connect      ' + a + "</font></h4>👆请编辑脚本代码,将上面蓝色代码填入脚本指定空白中👆<br>别忘了保存并刷新页面哦"), p.wait = !0);
								try {
									p.logs.addLog("请求错误", "red")
								} catch (n) {}
								if (!m.includes("chaoxing.com")) {
									let e = h.clazzid || h.classid || h.classId || h.classId,
										t = h.courseid || h.courseId;
									confirm("检测到您使用的是学校定制学习通,可能会出现使用问题\n可以尝试切换到学习通官方页面(需要重新登陆),是否切换?") && (p.location.href = "http://passport2.chaoxing.com/login?refer=http%3A%2F%2Fmooc1.chaoxing.com%2Fvisit%2Fstucoursemiddle%3Fcourseid%3D" + t + "%26clazzid%3D" + e + "%26vc%3D1%26ismooc2%3D1%26v%3D2%26r%3D1&newversion=true&_blank=0")
								}
								console.log(n), t(!1)
							}, e.ontimeout = function() {
								t(!1)
							}, GM_xmlhttpRequest(e)
						})),
						L = () => {
							n.wrapper.forEach((function(e) {
								$(e)
									.map((function(e, t) {
										"yes" != $(t)
											.attr("data-md5-value") && (a.push(t), r.push(t), $(t)
												.attr("data-md5-key", l), $(t)
												.attr("data-md5-value", "yes"), l++)
									}))
							}));
							let t = r.splice(0, e),
								o = [];
							t.forEach((function(e, t) {
									let n = {};
									n.href = $(e)
										.find("a:first")
										.attr("href"), n.md5 = $(e)
										.attr("data-md5-key"), o.push(n)
								})), o.length > 0 && (async (e, t, n) => new Promise(((a, r) => {
									GM_xmlhttpRequest({
										method: "POST",
										url: e,
										data: t,
										headers: n,
										responseType: "json",
										onload: e => {
											a(e.response || e.responseText)
										},
										onerror: e => {
											r(e)
										}
									})
								})))(`${n.api}/api.php?act=list`, JSON.stringify({
									data: o,
									type: n.page
								}), {})
								.then((e => {
									0 == e.code && e.data.map((function(e) {
										e.recove_url && $(a[e.md5])
											.find("a")
											.bind("click", (function(t) {
												t.preventDefault(), z(e.recove_url)
											}))
									}))
								}))
						},
						z = e => {
							var t = null;
							document.getElementById("redirect_form") ? (t = document.getElementById("redirect_form"))
								.action = n.jumpUrl + encodeURIComponent(e) : ((t = document.createElement("form"))
									.action = n.jumpUrl + encodeURIComponent(e), t.target = "_blank", t.method = "POST", t.setAttribute("id", "redirect_form"), document.body.appendChild(t)), t.submit(), t.action = "", t.parentNode.removeChild(t)
						},
						X = e => new Promise(((t, n) => {
							e.method || (e.method = "get"), e.timeout = 5e3, e.ontimeout = e.onerror = function() {
								t(!1)
							}, e.onload = function(e) {
								try {
									t(JSON.parse(e.responseText))
								} catch (e) {
									console.log(e), t(!1)
								}
							}, GM_xmlhttpRequest(e)
						})),
						N = (e, t) => {
							try {
								p.left = e, GM_setValue("tkLeft", e), g.getElementById("ugyvciuu")
									.value = e, g.getElementById("payButton")
									.setAttribute("href", c + "login.html?token=" + t + "#pay"), g.getElementById("bindQQ")
									.setAttribute("href", c + "api/bind/?token=" + t)
							} catch (e) {
								console.log(e)
							}
						},
						P = (e, t, n = !1) => {
							let a = e + "checkLeft&token=" + t;
							n && (a += "&c=t");
							try {
								X({
										url: a
									})
									.then((function(e) {
										N(e.left, t), e.hasInfo && p.logs.addLog(e.msg, "orange")
									}))
							} catch (e) {
								console.log(e)
							}
						};
					if (d = ["zh-TW", "zh-HK"].includes(u) ? ["個待完成任務點", "已完成"] : ["en-US"].includes(u) ? ["pending task point", "Completed"] : ["个待完成任务点", "已完成"], m.includes("/mycourse/stu?")) {
						let j = p.jQuery || p.$,
							B = '\n            <div class="popDiv course-pop">\n                <div class="popHead">\n                    <a class="popClose fr" href="javascript:;">\n                        <img src="/mooc2-ans/images/popClose.png" class="closecoursepop" style="display: none;">\n                    </a>\n                    <p class="fl fs18 colorDeep">超星学习通九九助手</p>\n                </div>\n                <div class="het60"></div>\n                <div class="course-content-dialog">\n                    <ul class="course-details" tabindex="3" style="overflow: auto visible; outline: none;">\n                        <li>\n                            <div class="right-box">\n                                <div class="text-box">\n                                    <p class="text1">该课程支持刷课,请选择您要刷的内容</p>\n                                </div>\n                            </div>\n                        </li>\n                    </ul>\n                    <div style="height: 70px;"></div>\n                    <div class="bottom-div" style="">\n                        <div class="start-study" style="margin-right:20px;" id="dosk">刷课程</div>\n                        <div class="start-study" style="margin-right:20px;" id="doHomework">刷作业</div>\n                        <div class="start-study" style="margin-right:20px;" id="doExam">刷考试</div>\n                        <div class="start-study" id="canclesk">取消</div>\n                    </div>\n                </div>\n            </div>';
						setTimeout((() => {
							j(".coursenoticepop")
								.empty(), j(".coursenoticepop")
								.html(B), j("#dosk")
								.click((function() {
									y(p.ServerHost.mooc1Domain.replace("https://", "http://"))
								})), j("#doHomework")
								.click((function() {
									g.getElementsByClassName("zy")[0].click(), j(".closecoursepop")
										.hide(), j(".coursenoticepop")
										.hide()
								})), j("#doExam")
								.click((function() {
									g.getElementsByClassName("ks")[0].click(), j(".closecoursepop")
										.hide(), j(".coursenoticepop")
										.hide()
								})), j("#canclesk")
								.click((() => {
									j(".closecoursepop")
										.hide(), j(".coursenoticepop")
										.hide()
								})), j(".closecoursepop")
								.show(), j(".coursenoticepop")
								.show()
						}), 1e3)
					} else if (m.includes("mycourse/studentcourse?") && p.top == p) setTimeout((() => {
						GM_getValue("directToWork", !1) ? (GM_setValue("directToWork", !1), g.querySelector("i.workTip")
							.previousElementSibling.click()) : confirm("【超星学习通九九助手】\n点击确定进入刷课程页面\n【如要刷考试请点取消并手动进入指定考试】") && y("http://" + p.location.host)
					}), 1e3);
					else if (m.includes("shenchanranCx") && !m.includes("passport2")) y("http://" + p.location.host);
					else if (m.includes("shenchanranV2Cx") && !m.includes("passport2")) {
						p.wait = !1, f && "" != f && null != f || alert("请关闭其他同类型脚本,否则此脚本无法正常运行");
						try {
							p.checkConcurrency.push(6)
						} catch {
							p.checkConcurrency = [6]
						}
						if (1 != p.checkConcurrency.length && parseInt("1" + f) <= GM_getValue("nowVersion", 0)) return void alert("请勿多开脚本,请检查您开启的脚本数量");
						GM_setValue("nowVersion", String(parseInt("1" + f))), g.getElementsByTagName("body")[0].innerHTML = '加载中。。。<br><br>如遇脚本异常,请尝试<a href="https://greasyfork.org/zh-CN/scripts/469522">点我更新脚本</a>&ensp;|&ensp;<a href="https://scriptcat.org/zh-CN/script-show-page/1127">点我更新脚本</a>';
						let S = !1,
							Z = 1,
							H = 85,
							W = function(e) {
								return new Promise(((t, n) => {
									e.onload = function() {
										t()
									}
								}))
							};
						async function F() {
							for (let e = 0, t = T.length; e < t; e++) {
								let t = T[e][0],
									n = await X({
										url: t + "status&ran=" + String(Date.now()) + "&version=" + f
									});
								if (n) {
									if ("t" == n.status) {
										S = t, c = T[e][1];
										break
									}
									if ("f" == n.status) return void alert("服务器暂停服务,请耐心等待恢复");
									if ("s" == n.status) return void(g.body.innerHTML = n.data)
								}
							}
							if (!S) return void alert("所有服务器均不可用,请稍后刷新重试或尝试更换网络\n中国移动宽带/校园网建议更换网络");
							g.getElementsByTagName("html")[0].innerHTML = '\n<!DOCTYPE html>\n<html lang="zh">\n<head>\n    <meta charset="UTF-8" />\n    <meta name="viewport" content="width=device-width, initial-scale=1.0" />\n    <title>超星刷课工具</title>\n    \x3c!-- boot4 --\x3e\n    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.0.0/css/bootstrap.min.css" />\n    <link rel="stylesheet" href="https://lib.sinaapp.com/js/bootstrap/4.0.0/css/bootstrap.min.css" />\n    <link href="https://i.mooc.chaoxing.com/layui/css/modules/layer/default/layer.css" rel="stylesheet" />\n    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css" />\n</head>\n<style>\n    @font-face {\n        font-family: "阿里妈妈方圆体 VF Regular";\n        src: url("//at.alicdn.com/wf/webfont/bb6sz9d6E2UG/zkh0i2ziCDKY.woff2") format("woff2"),\n            url("//at.alicdn.com/wf/webfont/bb6sz9d6E2UG/tJ8Zk24AFUoT.woff") format("woff");\n        font-display: swap;\n    }\n    #courseName {\n        font-weight: 900;\n        font-family: "阿里妈妈方圆体 VF Regular";\n        color: #409eff;\n        animation: bounce;\n        animation-duration: 2s;\n    }\n    .tit-margin {\n        margin: 15px 0px;\n    }\n    #courseName:hover {\n        color: #306fae;\n        animation: shakeX;\n        animation-duration: 2s;\n        cursor: pointer;\n        transition: .2s;\n    }\n    .title-weight {\n        font-weight: bold;\n    }\n    .btn {\n        border-radius: 11px;\n    }\n    .btn-outline-success:hover {\n        background-color: #b9dfa6;\n    }\n    .btn-outline-primary:hover {\n        background-color: #409eff;\n    }\n    .card {\n        border-radius: 4px;\n        background-color: #FFF;\n        overflow: hidden;\n        transition: .3s;\n    }\n    .card:hover {\n        transform: translateY(-1%);\n        box-shadow: 1px 1px 10px 2px #CCC;\n    }\n    .start {\n        margin-left: 11px;\n    }\n</style>\n<body>\n    <div class="container-fluid">\n        <div class="row tit-margin">\n            <div class="col-12 text-center text-monospace">\n                <h1 id="courseName">课程名</h1>\n            </div>\n        </div>\n        <div class="row justify-content-center">\n            <div class="col-6">\n                <div class="card" style="margin-top: 10px">\n                    <div class="card-body">\n                        <div>\n                            <div class="title-weight" style="padding: 0; font-size: 20px; float: left;">\n                                任务设置:\n                                <a id="doVideo" class="btn btn-light">视频任务</a>\n                                &#160;|&#160;\n                                <a id="doWork" class="btn btn-light">章节测试</a>\n                                &#160;|&#160;\n                                <a id="doDocument" class="btn btn-light">文档任务</a>\n                                &#160;|&#160;\n                                <a id="doNoMission" class="btn btn-light">非任务点</a>\n                            </div>\n                            <br /><br /><br />\n                            <div class="title-weight" style="padding: 0; font-size: 20px; float: left">\n                                章节测试:<a id="autoSubmit" class="btn btn-light">自动提交</a>\n                                &nbsp;&nbsp;总开关:<a id="start" class="btn btn-success">点我启动</a>\n                                &#160;|&#160;<a id=\'start_new\' class="btn btn-outline-danger">闯关模式</a>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n                <div class="card" style="margin-top: 10px">\n                    <div class="card-body">\n                        <h5 class="card-title title-weight">脚本配置</h5>\n                        <form style="margin-top: 25px;">\n                            <div class="form-row">\n                                <div class="form-group col-md-6">\n                                    <label for="exampleInputEmail1">题库Token</label>\n                                    <div class="form-inline">\n                                        <input type="text" class="form-control" id="tokenInput" \n                                            value="" />&ensp;\n                                        <a class="btn btn-outline-primary" id="bindQQ" target="_blank">绑定QQ</a>\n                                    </div>\n                                    <small class="form-text text-muted">您需要填写题库token才能连接题库答题</small>\n                                </div>\n                                <div class="form-group col-md-6">\n                                    <label for="exampleInputPassword1">剩余次数</label>\n                                    <div class="form-inline">\n                                        <input type="number" class="form-control" id="ugyvciuu" readonly="readonly"\n                                            value="9999" />&ensp;\n                                        <a class="btn btn-outline-primary" id="payButton" target="_blank">充值</a>\n                                    </div>\n                                    <small class="form-text text-muted">查题成功一次扣除1次数</small>\n                                </div>\n                            </div>\n                            <div class="form-row">\n                                <div class="form-group col-md-6">\n                                    <label for="exampleInputPassword1">视频倍速</label>\n                                    <input type="number" class="form-control" id="beisuInput" />\n                                    <small class="form-text text-muted">倍速大于1倍会被清空进度</small>\n                                </div>\n                                <div class="form-group col-md-6">\n                                    <label for="exampleInputPassword1">正确率</label>\n                                    <input type="number" class="form-control" id="vgqtlv" />\n                                    <small class="form-text text-muted">正确率必须在0-100之间</small>\n                                </div>\n                            </div>\n                            <a class="btn btn-outline-primary" id="saveConfig">保存</a>\n                            <small class="form-text text-muted">保存后会实时生效</small>\n                        </form>\n                    </div>\n                </div>\n            </div>\n            <div class="col-6">\n                <div class="card" style="margin-top: 10px">\n                    <div class="card-body">\n                        <h5 class="card-title title-weight">任务</h5>\n                        <div class="panel-heading">\n                            任务数量&#8194;:&#8194;共有\n                            <span id="totalNum">-</span>任务,剩余<span id="leftNum">-</span>任务\n                        </div>\n                    </div>\n                </div>\n                <div class="card" style="margin-top: 10px">\n                    <div class="card-body">\n                        <h5 class="card-title title-weight">当前任务进度</h5>\n                        <div class="panel-heading">\n                            <div class="progress">\n                                <div class="progress-bar progress-bar-info" id="jdbar" style="width: 0%; min-width: 1.5em;">0%\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n                <div class="card" style="margin-top: 10px">\n                    <div class="card-body">\n                        <h5 class="card-title title-weight">任务日志</h5>\n                        <div id="result" style="overflow: auto; line-height: 30px">\n                            <div id="log">\n                                <span style="color: red">[00:00:00]如果此提示不消失,说明页面出现了错误,请反馈</span>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div class="col-6">\n                <div class="card" style="margin-top: 10px">\n                    <div class="card-body" >\n                        <iframe id="frame_content" srcdoc="" frameborder="0" scrolling="auto"\n                            style="width: 100%;height: auto;"></iframe>\n                    </div>\n                </div>\n            </div>\n            <iframe style="width:0;height:0" src="https://log.axetk.cn/api/"></iframe>\n        </div>\n    </div>\n    <div id="detail" style="display: none"></div>\n</body>\n</html>', await w(100);
							let e = p.localStorage.getItem("shenchanranToken") || GM_getValue("shenchanranToken", "66666666666666666666666666666666");
							!["66666666666666666666666666666666", "", null, void 0, !1].includes(e) && /^[0-9a-z]{32}$/gi.test(e) || (e = k(), GM_setValue("shenchanranToken", e)), p.localStorage.setItem("shenchanranToken", e), P(S, e, !0), p.logs = {
								logArry: [],
								addLog: function(e, t = "black") {
									this.logArry.length >= 10 && this.logArry.splice(0, 1);
									let n = new Date,
										a = (Array(2)
											.join(0) + n.getHours())
										.slice(-2),
										r = (Array(2)
											.join(0) + n.getMinutes())
										.slice(-2),
										l = (Array(2)
											.join(0) + n.getSeconds())
										.slice(-2),
										o = g.getElementById("log"),
										i = "";
									this.logArry.push("<span style='color: " + t + "'>[" + a + ":" + r + ":" + l + "] " + e + "</span>");
									for (let e = 0, t = this.logArry.length; e < t; e++) i += this.logArry[e] + "<br>";
									g.getElementById("log")
										.innerHTML = i, o.scrollTop = o.scrollHeight
								}
							}, p.chuangguan = !1;
							let t = () => {
								setTimeout((() => {
									(p.localStorage.getItem("shenchanranToken") || GM_getValue("shenchanranToken", !1)) && P(S, e), t()
								}), 3e4)
							};
							t(), p.logs.addLog("脚本初始化成功", "green"), g.getElementById("courseName")
								.innerHTML = decodeURIComponent(h.coursename);
							let n = g.createElement("script"),
								a = g.createElement("script"),
								r = g.createElement("script"),
								l = g.createElement("script"),
								o = g.head;
							n.src = b + "i.mooc.chaoxing.com/layui/layui.js", a.src = b + "mobilelearn.chaoxing.com/xinfanya/js/jquery.min.js", r.src = b + "i.mooc.chaoxing.com/layui/lay/modules/layer.js", l.src = b + "sharewh1.xuexi365.com/res/plugin/forword/js/md5.js", p.logs.addLog("组件加载中"), o.appendChild(n), await w(100), p.layui, o.appendChild(a), await w(100), p.jquery, o.appendChild(r), await w(100), p.layer, o.appendChild(l), await w(100), p.hex_md5, await w(500), p.logs.addLog("加载成功", "green"), p.layer.alert("<center><p>倍速刷视频会导致学习进度被清空</p><p>同账号多开脚本学习会导致学习进度被清空<p><p>脚本问题反馈群:<b>921846225</b></p></center>");
							let i = g.getElementById("doVideo"),
								s = g.getElementById("doDocument"),
								d = g.getElementById("doWork"),
								u = g.getElementById("autoSubmit"),
								m = g.getElementById("saveConfig"),
								v = g.getElementById("start"),
								y = g.getElementById("start_new"),
								A = g.getElementById("doNoMission");
							i.onclick = function() {
									if (p.chuangguan) return void p.logs.addLog("闯关模式下禁止操作", "red");
									let e = i.getAttribute("class")
										.includes("light");
									GM_setValue("doVideo", e && (i.setAttribute("class", "btn btn-primary"), p.logs.addLog("将会处理视频任务", "green"), !0) || (i.setAttribute("class", "btn btn-light"), p.logs.addLog("将不会处理视频任务", "red"), !1))
								}, s.onclick = function() {
									if (p.chuangguan) return void p.logs.addLog("闯关模式下禁止操作", "red");
									let e = s.getAttribute("class")
										.includes("light");
									GM_setValue("doDocument", e && (s.setAttribute("class", "btn btn-primary"), p.logs.addLog("将会处理文档任务", "green"), !0) || (s.setAttribute("class", "btn btn-light"), p.logs.addLog("将不会处理文档任务", "red"), !1))
								}, d.onclick = function() {
									if (p.chuangguan && GM_getValue("doWork", !1)) return void p.logs.addLog("闯关模式下禁止操作", "red");
									let e = d.getAttribute("class")
										.includes("light");
									GM_setValue("doWork", e && (d.setAttribute("class", "btn btn-primary"), p.logs.addLog("将会处理章节测试任务", "green"), !0) || (d.setAttribute("class", "btn btn-light"), p.logs.addLog("将不会处理章节测试任务", "red"), !1))
								}, u.onclick = function() {
									if (p.chuangguan) return void p.logs.addLog("闯关模式下禁止操作", "red");
									let e = u.getAttribute("class")
										.includes("light");
									GM_setValue("autoSubmit", e && (u.setAttribute("class", "btn btn-primary"), p.logs.addLog("正确率超过" + H + "%的章节测试将会自动提交", "green"), !0) || (u.setAttribute("class", "btn btn-light"), p.logs.addLog("章节测试将不会自动提交", "red"), !1))
								}, A.onclick = function() {
									if (p.chuangguan) return void p.logs.addLog("闯关模式下禁止操作", "red");
									let e = A.getAttribute("class")
										.includes("light");
									GM_setValue("doNoMission", e && (A.setAttribute("class", "btn btn-primary"), p.logs.addLog("将会作答非任务点的章节测试(需刷新页面)", "green"), !0) || (A.setAttribute("class", "btn btn-light"), p.logs.addLog("将不会作答非任务点", "red"), !1))
								}, m.onclick = function() {
									let t = g.getElementById("tokenInput")
										.value,
										n = g.getElementById("beisuInput")
										.value,
										a = g.getElementById("vgqtlv")
										.value;
									/^[0-9a-z]{32}$/gi.test(t) ? n < .5 || n > 32 ? p.layer.alert("倍速必须在0.5-32之间") : a < 0 || a > 100 ? p.layer.alert("正确率必须在0-100之间") : (Z = n, H = a, GM_getValue("tkLeft", 0) > 0 && e != t ? p.layer.alert("您的题库剩余次数不为0,请注意保存原token<br>丢失后请自行前往微信或支付宝查询付款记录<br>原token:" + e) : p.layer.alert("配置保存成功,已实时生效"), e = t, GM_setValue("shenchanranToken", e), p.localStorage.setItem("shenchanranToken", e), P(S, e, !0)) : (p.layer.alert("token格式不符"), g.getElementById("tokenInput")
										.value = e)
								}, v.onclick = function() {
									v.setAttribute("class", "btn btn-light"), v.innerHTML = y.innerHTML = "任务已启动", v.onclick = y.onclick = () => {
										p.layer.alert("如需停止任务,请刷新页面")
									}, v.id = y.id = "abaaba", O(), p.logs.addLog("开始查询任务")
								}, y.onclick = function() {
									p.layer.alert("闯关模式将自动开启所有任务类型<br>建议调低答题正确率<br>遇到无法作答的题型与任务点将会自动终止"), GM_setValue("doVideo", !0), GM_setValue("doDocument", !0), GM_setValue("doWork", !0), p.logs.addLog("视频、文档、章节测试任务已开启,如需重置,请刷新页面", "green"), y.setAttribute("class", "btn btn-light"), y.innerHTML = v.innerHTML = "闯关任务已启动", v.onclick = y.onclick = () => {
										p.layer.alert("如需停止任务,请刷新页面")
									}, v.id = y.id = "abaaba", O(), p.chuangguan = !0, p.logs.addLog("开始查询任务")
								}, i.setAttribute("class", ["btn btn-light", "btn btn-primary"][GM_getValue("doVideo", 1) + 0]), s.setAttribute("class", ["btn btn-light", "btn btn-primary"][GM_getValue("doDocument", 1) + 0]), d.setAttribute("class", ["btn btn-light", "btn btn-primary"][GM_getValue("doWork", 1) + 0]), u.setAttribute("class", ["btn btn-light", "btn btn-primary"][GM_getValue("autoSubmit", 1) + 0]), A.setAttribute("class", ["btn btn-light", "btn btn-primary"][GM_getValue("doNoMission", 0) + 0]), g.getElementById("tokenInput")
								.value = e, g.getElementById("beisuInput")
								.value = Z, g.getElementById("vgqtlv")
								.value = H
						}
						async function O() {
							for (; p.wait;) await w(500);
							const e = "2024-0126-1922",
								t = h.clazzid || h.classid || h.classId || h.classId,
								n = h.courseid || h.courseId,
								a = h.cpi,
								r = p.logs,
								l = b + p.location.host,
								c = v("fid") || "666",
								u = new Audio("data:audio/ogg;base64,T2dnUwACAAAAAAAAAABwRPFFAAAAAGFtEqwBHgF2b3JiaXMAAAAAAUAfAAAAAAAAUHgAAAAAAACZAU9nZ1MAAAAAAAAAAAAAcETxRQEAAAA7J4IBDP8F////////////tQN2b3JiaXMvAAAAWGlwaC5PcmcgbGliVm9yYmlzIEkgMjAxNDAxMjIgKFR1cnBha8OkcsOkamlpbikGAAAAJQAAAEVOQ09ERVI9U291bmQgU3R1ZGlvLCBsaWJWb3JiaXMgMS4zLjEbAAAAQUxCVU0gQVJUSVNUPUFkdmVudHVyZSBMYW5kFAAAAEFMQlVNPUFkdmVudHVyZSBMYW5kIQAAAEVOQ09ESU5HIEFQUExJQ0FUSU9OPVNvdW5kIFN0dWRpbxUAAABBUlRJU1Q9QWR2ZW50dXJlIExhbmQjAAAAVElUTEU9RW1wdHkgTG9vcCBGb3IgSlMgUGVyZm9ybWFuY2UBBXZvcmJpcxJCQ1YBAAABAAxSFCElGVNKYwiVUlIpBR1jUFtHHWPUOUYhZBBTiEkZpXtPKpVYSsgRUlgpRR1TTFNJlVKWKUUdYxRTSCFT1jFloXMUS4ZJCSVsTa50FkvomWOWMUYdY85aSp1j1jFFHWNSUkmhcxg6ZiVkFDpGxehifDA6laJCKL7H3lLpLYWKW4q91xpT6y2EGEtpwQhhc+211dxKasUYY4wxxsXiUyiC0JBVAAABAABABAFCQ1YBAAoAAMJQDEVRgNCQVQBABgCAABRFcRTHcRxHkiTLAkJDVgEAQAAAAgAAKI7hKJIjSZJkWZZlWZameZaouaov+64u667t6roOhIasBADIAAAYhiGH3knMkFOQSSYpVcw5CKH1DjnlFGTSUsaYYoxRzpBTDDEFMYbQKYUQ1E45pQwiCENInWTOIEs96OBi5zgQGrIiAIgCAACMQYwhxpBzDEoGIXKOScggRM45KZ2UTEoorbSWSQktldYi55yUTkompbQWUsuklNZCKwUAAAQ4AAAEWAiFhqwIAKIAABCDkFJIKcSUYk4xh5RSjinHkFLMOcWYcowx6CBUzDHIHIRIKcUYc0455iBkDCrmHIQMMgEAAAEOAAABFkKhISsCgDgBAIMkaZqlaaJoaZooeqaoqqIoqqrleabpmaaqeqKpqqaquq6pqq5seZ5peqaoqp4pqqqpqq5rqqrriqpqy6ar2rbpqrbsyrJuu7Ks256qyrapurJuqq5tu7Js664s27rkearqmabreqbpuqrr2rLqurLtmabriqor26bryrLryratyrKua6bpuqKr2q6purLtyq5tu7Ks+6br6rbqyrquyrLu27au+7KtC7vourauyq6uq7Ks67It67Zs20LJ81TVM03X9UzTdVXXtW3VdW1bM03XNV1XlkXVdWXVlXVddWVb90zTdU1XlWXTVWVZlWXddmVXl0XXtW1Vln1ddWVfl23d92VZ133TdXVblWXbV2VZ92Vd94VZt33dU1VbN11X103X1X1b131htm3fF11X11XZ1oVVlnXf1n1lmHWdMLqurqu27OuqLOu+ruvGMOu6MKy6bfyurQvDq+vGseu+rty+j2rbvvDqtjG8um4cu7Abv+37xrGpqm2brqvrpivrumzrvm/runGMrqvrqiz7uurKvm/ruvDrvi8Mo+vquirLurDasq/Lui4Mu64bw2rbwu7aunDMsi4Mt+8rx68LQ9W2heHVdaOr28ZvC8PSN3a+AACAAQcAgAATykChISsCgDgBAAYhCBVjECrGIIQQUgohpFQxBiFjDkrGHJQQSkkhlNIqxiBkjknIHJMQSmiplNBKKKWlUEpLoZTWUmotptRaDKG0FEpprZTSWmopttRSbBVjEDLnpGSOSSiltFZKaSlzTErGoKQOQiqlpNJKSa1lzknJoKPSOUippNJSSam1UEproZTWSkqxpdJKba3FGkppLaTSWkmptdRSba21WiPGIGSMQcmck1JKSamU0lrmnJQOOiqZg5JKKamVklKsmJPSQSglg4xKSaW1kkoroZTWSkqxhVJaa63VmFJLNZSSWkmpxVBKa621GlMrNYVQUgultBZKaa21VmtqLbZQQmuhpBZLKjG1FmNtrcUYSmmtpBJbKanFFluNrbVYU0s1lpJibK3V2EotOdZaa0ot1tJSjK21mFtMucVYaw0ltBZKaa2U0lpKrcXWWq2hlNZKKrGVklpsrdXYWow1lNJiKSm1kEpsrbVYW2w1ppZibLHVWFKLMcZYc0u11ZRai621WEsrNcYYa2415VIAAMCAAwBAgAlloNCQlQBAFAAAYAxjjEFoFHLMOSmNUs45JyVzDkIIKWXOQQghpc45CKW01DkHoZSUQikppRRbKCWl1losAACgwAEAIMAGTYnFAQoNWQkARAEAIMYoxRiExiClGIPQGKMUYxAqpRhzDkKlFGPOQcgYc85BKRljzkEnJYQQQimlhBBCKKWUAgAAChwAAAJs0JRYHKDQkBUBQBQAAGAMYgwxhiB0UjopEYRMSielkRJaCylllkqKJcbMWomtxNhICa2F1jJrJcbSYkatxFhiKgAA7MABAOzAQig0ZCUAkAcAQBijFGPOOWcQYsw5CCE0CDHmHIQQKsaccw5CCBVjzjkHIYTOOecghBBC55xzEEIIoYMQQgillNJBCCGEUkrpIIQQQimldBBCCKGUUgoAACpwAAAIsFFkc4KRoEJDVgIAeQAAgDFKOSclpUYpxiCkFFujFGMQUmqtYgxCSq3FWDEGIaXWYuwgpNRajLV2EFJqLcZaQ0qtxVhrziGl1mKsNdfUWoy15tx7ai3GWnPOuQAA3AUHALADG0U2JxgJKjRkJQCQBwBAIKQUY4w5h5RijDHnnENKMcaYc84pxhhzzjnnFGOMOeecc4wx55xzzjnGmHPOOeecc84556CDkDnnnHPQQeicc845CCF0zjnnHIQQCgAAKnAAAAiwUWRzgpGgQkNWAgDhAACAMZRSSimllFJKqKOUUkoppZRSAiGllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimVUkoppZRSSimllFJKKaUAIN8KBwD/BxtnWEk6KxwNLjRkJQAQDgAAGMMYhIw5JyWlhjEIpXROSkklNYxBKKVzElJKKYPQWmqlpNJSShmElGILIZWUWgqltFZrKam1lFIoKcUaS0qppdYy5ySkklpLrbaYOQelpNZaaq3FEEJKsbXWUmuxdVJSSa211lptLaSUWmstxtZibCWlllprqcXWWkyptRZbSy3G1mJLrcXYYosxxhoLAOBucACASLBxhpWks8LR4EJDVgIAIQEABDJKOeecgxBCCCFSijHnoIMQQgghREox5pyDEEIIIYSMMecghBBCCKGUkDHmHIQQQgghhFI65yCEUEoJpZRSSucchBBCCKWUUkoJIYQQQiillFJKKSGEEEoppZRSSiklhBBCKKWUUkoppYQQQiillFJKKaWUEEIopZRSSimllBJC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"),
								m = p.jQuery || p.$,
								y = e => {
									try {
										let t = g.getElementById("jdbar");
										e = e > 100 ? 100 : e, t.setAttribute("style", "width: " + e + "%; min-width: 2em;"), t.innerHTML = e + "%"
									} catch {}
								};
							if (!t || !n) return void alert("参数不全,请重新进入此页面");
							u.loop = !0, p.audioPlayer = u, g.addEventListener("visibilitychange", (function() {
								var e = 0;
								if (g.hidden) {
									u.play();
									var t = setInterval((function() {
										e ? (g.title = "🙈挂机中", e = 0) : (g.title = "🙉挂机中", e = 1), g.hidden || (clearInterval(t), g.title = "超星刷课工具")
									}), 1300)
								} else u.pause()
							})), p.need = !1;
							let T = [],
								L = 0,
								z = l + "/mycourse/studentstudycourselist?courseId=" + n + "&clazzid=" + t + "&mooc2=1",
								P = await Y({
									url: z
								}),
								F = (e, t, n, a, r, l, o, i, s, d) => {
									let c = "3",
										u = [];
									for (let m = 0;
										"3" == c; m += Math.round(60 * l)) {
										m >= r && (m = r, c = "4");
										let l = `[${e}][${t}][${n}][${a}][${1e3*m}][d_yHJ!$pdA~5][${1e3*r}][0_${r}]`,
											g = "/" + o + "?clazzId=" + e + "&playingTime=" + m + "&duration=" + r + "&clipTime=0_" + r + "&objectId=" + a + "&otherInfo=" + i + "&jobid=" + n + "&userid=" + t + "&isdrag=" + c + "&view=pc&enc=" + p.hex_md5(l) + "&rt=" + s + "&dtype=" + d + "&_t=" + Date.now();
										u.push([g, c])
									}
									return u
								};
							g.getElementById("detail")
								.innerHTML = P.responseText, await w(1e3);
							let G = g.getElementsByClassName("posCatalog_select");
							for (let e = 0, t = G.length; e < t; e++)(p.chuangguan && !G[e].innerHTML.includes(d[1]) || G[e].innerHTML.includes(d[0])) && T.push(G[e].id.replace("cur", ""));
							if (GM_getValue("doNoMission", !1)) {
								let e = l.replace("mooc1.", "stat2-ans.")
									.replace("mooc.", "stat2-ans.") + "/stat2/chapter-exam/s/tests/data?clazzid=" + t + "&courseid=" + n + "&ut=s&page=1&pageSize=200",
									a = await Y({
										url: e
									});
								try {
									let e = JSON.parse(a.responseText)
										.data.results;
									for (let t = 0; t < e.length; t++) {
										let n = e[t];
										n.isNonJob && 4 != n.statusStr && T.push(n.chapterId + "")
									}
								} catch (e) {
									console.log(e)
								}
								T = Array.from(new Set(T))
							}
							if (L = T.length, g.getElementById("totalNum")
								.innerHTML = g.getElementById("leftNum")
								.innerHTML = L, L < 1) return void r.addLog("该课程无可用任务点,请检查,或尝试重新登录(请勿在隐私/无痕页面运行)");
							r.addLog("共有" + L + "个任务点"), p.chuangguan && r.addLog("闯关模式每个章节等待时间可能会稍长,请耐心等待", "orange"), L++;
							let j = function*() {
								for (let e = 0, t = T.length; e < t; e++) L--, g.getElementById("leftNum")
									.innerHTML = L, yield T[e]
							}();
							e: for (;;) {
								let d = j.next();
								if (d.done) {
									r.addLog("所有任务已完成(如果您的课程并没有完成,请检查是否为闯关任务点,如果是,请刷新页面并点击“闯关模式”按钮进行刷课)"), p.need && (r.addLog("将进行第二次循环"), O());
									break
								}
								let u = d.value,
									h = 0;
								try {
									(new Date)
									.getHours() < 6 && !p.told && (p.told = !0, p.layer.alert("夜间学习会导致学习进度被清空"))
								} catch (e) {
									console.log(e)
								}
								for (p.chuangguan && await Y({
									url: `/mooc-ans/mycourse/studentstudyAjax?courseId=${n}&clazzid=${t}&chapterId=${u}`
								});;) try {
									for (; p.wait;) await w(500);
									await w(x(1, 4));
									let d = "/knowledge/cards?clazzid=" + t + "&courseid=" + n + "&knowledgeid=" + u + "&num=" + h + "&ut=s&cpi=" + a + "&v=20160407-1",
										v = l + "/mycourse/studentstudy?chapterId=" + u + "&courseId=" + n + "&clazzid=" + t + "&cpi=" + a + "&enc=" + k() + "&mooc2=1&openc=" + k();
									if (cardResult = await Y({
										headers: {
											Referer: v
										},
										url: d
									}), h++, !cardResult) continue e;
									if (cardResult.responseText.includes("mArg = $mArg;")) {
										await w(1);
										continue e
									}
									let T = cardResult.responseText.match(/mArg\s*=\s*(.+);\s*}\s*catch\(e\)/);
									if (!T) {
										r.addLog("无法获取章节内容,章节可能未开放", "red");
										continue e
									}
									let L = T[0].replace(/mArg\s*=\s*/, "")
										.replace(/;\s*}\s*catch\(e\)/, ""),
										z = JSON.parse(L),
										P = z.defaults.reportUrl;
									for (let a = 0, l = z.attachments.length; a < l; a++) try {
										for (; p.wait;) await w(500);
										let l, d, h = z.attachments[a];
										if (!h.job) {
											if ("workid" != h.type || !GM_getValue("doNoMission", !1)) continue;
											console.log("有非任务点")
										}
										try {
											"insertbook" == h.property.module && (h.type = "book", h.property.name = h.property.bookname)
										} catch (e) {}
										t: switch (h.type) {
											case "video":
												if (!GM_getValue("doVideo", !0)) {
													r.addLog("跳过任务:" + h.property.name, "red");
													break
												}
												let a = "/ananas/status/" + h.property.objectid + "?k=" + c + "&flag=normal&_dc=" + String(Math.round(new Date)),
													v = await Y({
														headers: {
															Referer: b + p.location.host + "/ananas/modules/video/index.html?v=" + e
														},
														url: a
													});
												if (!v) {
													r.addLog("获取视频信息失败,跳过此任务:" + h.property.name, "red");
													break t
												}
												r.addLog("开始刷视频:" + h.property.name);
												let k = String(parseInt(x(1e3, 9999))),
													T = JSON.parse(v.responseText),
													L = F(t, A, h.jobid, T.objectid, T.duration, Z, T.dtoken, h.otherInfo, h.property.rt || "0.9", h.property.module.includes("audio") ? "Audio" : "Video"),
													z = 0,
													O = 0,
													G = Math.round(T.duration / 60);
												if (!T.duration) {
													r.addLog("获取视频信息失败,跳过此任务:" + h.property.name, "red");
													break t
												}
												if ("1" == o) {
													let e = {
														uid: A,
														name: h.property.name,
														jobId: h.jobid,
														list: []
													};
													for (let t = 0, n = L.length; t < n; t++) {
														let n = P + L[t][0];
														e.list.push(n)
													}
													if ("1" == (await X({
															url: "http://" + i + ":" + s + "/add",
															method: "post",
															data: JSON.stringify(e),
															headers: {
																"Content-Type": "application/json"
															}
														}))
														.status) {
														r.addLog("已提交后台任务:" + h.property.name, "blue");
														break t
													}
													r.addLog("后台服务连接失败,请检查是否启动" + h.property.name, "blue")
												}
												y(0), l = 0, d = setInterval((function() {
													l += 10, y(Math.round(l / G * Z / .6))
												}), 1e4), g.cookie = "videojs_id=" + k + ";path=/";
												for (let t = 0, n = L.length; t < n; t++) {
													for (; p.wait;) await w(500);
													let n = L[t][0],
														a = L[t][1],
														l = P + n;
													if (watchResult = await Y({
														headers: {
															Referer: b + p.location.host + "/ananas/modules/video/index.html?v=" + e,
															"Sec-Fetch-Site": "same-origin"
														},
														url: l
													}), watchResult)
														if ("200" == watchResult.status) {
															if (JSON.parse(watchResult.responseText)
																.isPassed) {
																r.addLog("视频任务完成:" + h.property.name, "green"), clearInterval(d);
																break t
															}
															if ("4" == a) {
																r.addLog("视频已观看完毕,但视频任务未完成:" + h.property.name, "red"), clearInterval(d);
																break t
															}
															Z > 1 && r.addLog("开启倍速会被清空进度,当前倍速为" + String(Z) + "倍", "red"), r.addLog("视频已观看" + String(O * Z) + "分钟,剩余大约" + String(Math.round(G / Z - O)) + "分钟"), O++;
															try {
																if (!p.timeTold) {
																	let e = new Date,
																		t = e.getFullYear() + "d" + e.getMonth() + "d" + e.getDate(),
																		n = GM_getValue("timelong", {});
																	n.$uid = void 0, null == n["u" + A] || n["u" + A].today != t ? n["u" + A] = {
																		time: 0,
																		today: t
																	} : n["u" + A].time++, GM_setValue("timelong", n), n["u" + A].time / 60 >= 18 && (p.layer.alert("您今日学习时间过长,继续学习会清除进度"), p.timeTold = !0)
																}
															} catch (e) {
																console.log(e)
															}
															await w(6e4)
														} else {
															if (z > 2) {
																r.addLog("上传视频进度失败超过三次,跳过此任务:" + h.property.name, "red"), clearInterval(d);
																break t
															}
															z++, r.addLog("超星返回错误信息,将再次重试" + String(3 - z) + "次", "red"), await w(3e3)
														}
													else {
														if (z > 2) {
															r.addLog("上传视频进度失败超过三次,跳过此任务:" + h.property.name, "red"), clearInterval(d);
															break t
														}
														z++, r.addLog("上传视频进度失败,将再次重试" + String(3 - z) + "次", "red"), await w(3e3)
													}
												}
											case "document":
												if (!GM_getValue("doDocument", !0)) {
													r.addLog("跳过任务:" + h.property.name, "red");
													break
												}
												r.addLog("开始文档任务:" + h.property.name), await w(5e3);
												let j = await Y({
													url: "/ananas/job/document?jobid=" + h.jobid + "&knowledgeid=" + u + "&courseid=" + n + "&clazzid=" + t + "&jtoken=" + h.jtoken
												});
												if (!j) {
													r.addLog("阅读文档失败:" + h.property.name, "red");
													break
												}
												try {
													if (JSON.parse(j.responseText)
														.status) {
														r.addLog("文档任务完成:" + h.property.name, "green");
														break
													}
													r.addLog("文档任务失败:" + h.property.name, "red");
													break
												} catch (e) {
													r.addLog("解析文档内容失败:" + h.property.name, "red");
													break
												}
											case "workid":
												if (!GM_getValue("doWork", !0)) {
													r.addLog("跳过任务:" + h.property.title, "red");
													break
												}
												let B, E, U, V;
												try {
													B = h.jobid.replace("work-", "")
												} catch {}
												if (!B) {
													GM_getValue("doNoMission", !1) && (U = !0);
													try {
														B = h.property.workid
													} catch {}
												}
												if (!B) try {
													B = h.property._jobid.replace("work-", "")
												} catch {}
												try {
													E = h.jobid
												} catch {}
												if (!E) try {
													E = h.property._jobid
												} catch {}
												if (!E) try {
													E = "work-" + h.property.workid
												} catch {}
												V = U ? "/mooc-ans/work/phone/work?workId=" + B + "&courseId=" + n + "&clazzId=" + t + "&knowledgeId=" + u + "&jobId=&enc=" + h.enc : "/work/phone/work?workId=" + B + "&courseId=" + n + "&clazzId=" + t + "&knowledgeId=" + u + "&jobId=" + E + "&enc=" + h.enc;
												let q = await Y({
													url: V
												});
												if (!q.finalUrl.includes("doHomeWork?")) {
													m("#workPanel")
														.hide(), console.log("跳过已答测试");
													break
												}
												if (!q || 200 != q.status || !q.responseText.includes("<title>章节</title>")) {
													r.addLog("获取章节测试失败:" + h.property.title, "red"), m("#workPanel")
														.hide();
													break
												}
												let J = g.getElementById("frame_content");
												m("#workPanel")
													.show(), J.setAttribute("srcdoc", q.responseText.replaceAll(/alert\(/gi, "console.log(")
														.replaceAll(/confirm\((.*?)\)/gi, "true")), await W(J);
												let Q = g.getElementById("frame_content")
													.contentDocument,
													K = g.getElementById("frame_content")
													.contentWindow,
													R = Q.getElementById("oldWorkId") || Q.getElementById("workLibraryId");
												if (!R) {
													r.addLog("获取章节测试错误:" + h.property.title, "red"), m("#workPanel")
														.hide();
													break
												}
												let C = [],
													D = Q.getElementsByClassName("Py-mian1"),
													_ = D.length,
													$ = 0,
													ee = 0,
													te = R.value,
													ne = Q.getElementsByClassName("clearfix"),
													ae = Q.getElementsByTagName("li"),
													re = [],
													le = Q.getElementsByClassName("answerInput");
												if (!D.length) {
													r.addLog("无题:" + h.property.title, "red"), m("#workPanel")
														.hide();
													break
												}
												for (let e = 0, t = ne.length; e < t; e++) try {
													ne[e].setAttribute("class", "clearfix")
												} catch (e) {
													console.log(e)
												}
												for (let e = 0, t = ae.length; e < t; e++) try {
													ae[e].getAttribute("id-param") && re.push(ae[e])
												} catch (e) {
													console.log(e)
												}
												for (let e = 0, t = le.length; e < t; e++) try {
													le[e].value = ""
												} catch (e) {
													console.log(e)
												}
												for (let e = 0; e < _; e++) try {
													let t = D[e],
														n = t.getElementsByTagName("input"),
														a = "0",
														r = t.getElementsByClassName("Py-m1-title fs16")[0].innerHTML;
													r = I(r)
														.replace(/(<([^>]+)>)/gi, "")
														.replace(/[0-9]{1,3}.\[(.*?)\]/gi, "")
														.replaceAll("\n", "")
														.replace(/^\s+/gi, "")
														.replace(/\s+$/gi, "");
													for (let e = 0, t = n.length; e < t; e++) try {
														if (n[e].getAttribute("name")
															.indexOf("answer") >= 0) {
															a = n[e].getAttribute("name")
																.replace("type", "");
															break
														}
													} catch (e) {
														console.log(e);
														continue
													}
													if ("0" == a || "" == r) continue;
													if (typeE = t.getElementsByTagName("input"), null == typeE || typeE == []) continue;
													let l = "fuckme";
													for (let e = 0, t = typeE.length; e < t; e++)
														if (typeE[e].id == "answertype" + a.replace("answer", "")
															.replace("check", "")) {
															l = typeE[e].value;
															break
														} if (["0", "1", "3"].indexOf(l) < 0) continue;
													type = {
														0: "单选题",
														1: "多选题",
														3: "判断题"
													} [l];
													let o = {
														length: 0
													};
													if (["单选题", "多选题"].indexOf(type) >= 0) {
														let e = t.getElementsByClassName("answerList")[0].getElementsByTagName("li");
														for (let t = 0, n = e.length; t < n; t++) {
															let n = e[t],
																a = M(n.innerHTML.replace(/(^\s*)|(\s*$)/g, "")),
																r = a.slice(1)
																.replace(/(^\s*)|(\s*$)/g, ""),
																l = a.slice(0, 1);
															if ("" == r) break;
															o[r] = l, o.length++
														}
														if (e.length != o.length) continue
													} else o = {
														对: "A",
														错: "B"
													};
													C.push({
														question: r,
														type,
														questionid: a,
														options: o
													}), $++
												} catch (e) {
													console.log(e)
												}
												if (!$) {
													r.addLog("该章节测试无可用题目:" + h.property.title, "red"), m("#workPanel")
														.hide();
													break
												}
												r.addLog("开始做章节测试:" + h.property.title);
												for (let e = 0, t = C.length; e < t; e++) try {
													!e || await w(x(2, 4));
													let t = C[e],
														a = t.question,
														l = t.type,
														o = t.options,
														i = t.questionid,
														s = !1,
														d = await X({
															url: S + "query&tm=" + encodeURIComponent(a.replace(/(^\s*)|(\s*$)/g, "")) + "&type=" + {
																单选题: "0",
																多选题: "1",
																判断题: "3"
															} [l] + "&wid=" + te + "&courseid=" + n + "&version=" + f + "&token=" + (p.localStorage.getItem("shenchanranToken") || GM_getValue("shenchanranToken", "66"))
														});
													if (!d) {
														r.addLog("未找到答案:" + a);
														continue
													}
													try {
														if (N(d.left, p.localStorage.getItem("shenchanranToken") || GM_getValue("shenchanranToken", "66")), 1 != d.code) {
															if (d.msg) {
																r.addLog("题库错误:" + d.msg, "red");
																continue
															}
														} else d.data && (s = d.data);
														d.left < 1 && (g.getElementById("doWork")
															.setAttribute("class", "btn btn-light"), p.logs.addLog("将不会处理章节测试任务", "red"), GM_setValue("doWork", !1))
													} catch (e) {
														console.log(e)
													}
													if (!s) {
														r.addLog("无答案:" + a);
														continue
													}
													let c = M(s);
													"判断题" == l && (c = c.replaceAll(/\s|\n/g, ""), "true正确是对√Tri".includes(c) ? c = "对" : "false错误否错×Fwr".includes(c) && (c = "错")), r.addLog(a + ":" + c);
													let u = !1;
													for (let e in o)
														if ("length" != e && (e = M(e), e.includes(c) || c.includes(e)))
															for (let t = 0, n = re.length; t < n; t++) {
																let n = re[t];
																n.getAttribute("id-param") == i.replace("answer", "")
																	.replace("s", "") && n.getElementsByTagName("em") && n.getElementsByTagName("em")[0].innerHTML == o[e] && (n.setAttribute("class", "clearfix cur"), "判断题" == l ? Q.getElementById(i)
																		.value = {
																			A: "true",
																			B: "false"
																		} [o[e]] : "单选题" == l ? Q.getElementById(i)
																		.value = o[e] : Q.getElementsByName(i)[0].value += o[e], u = !0)
															}
													u && ee++
												} catch (e) {
													console.log(e)
												}
												let oe = ee / _ * 100;
												oe >= H && GM_getValue("autoSubmit", 1) ? (r.addLog("正确率达标,自动提交"), K.toadd(), K.submitAction()) : oe > 0 ? (r.addLog(["未设置自动提交", "正确率不达标:" + String(Math.floor(oe)) + "分"][GM_getValue("autoSubmit", 1) + 0] + ",自动保存"), K.noSubmit()) : r.addLog("一道题都没查出来,跳过"), m("#workPanel")
													.hide(), await w(x(2, 4));
												break;
											case "book":
												if (!GM_getValue("doDocument", !0)) {
													r.addLog("跳过任务:" + h.property.name, "red");
													break
												}
												r.addLog("开始图书任务:" + h.property.name), await w(5e3);
												let ie = await Y({
													url: "/ananas/job?jobid=" + h.jobid + "&knowledgeid=" + u + "&courseid=" + n + "&clazzid=" + t + "&jtoken=" + h.jtoken
												});
												if (!ie) {
													r.addLog("阅读图书失败:" + h.property.name, "red");
													break
												}
												try {
													if (JSON.parse(ie.responseText)
														.status) {
														r.addLog("图书任务完成:" + h.property.name, "green");
														break
													}
													r.addLog("图书任务失败:" + h.property.name, "red");
													break
												} catch (e) {
													r.addLog("解析图书内容失败:" + h.property.name, "red");
													break
												}
											case "hyperlink":
												if (!GM_getValue("doDocument", !0)) {
													r.addLog("跳过任务:" + h.property.title, "red");
													break
												}
												r.addLog("开始链接任务:" + h.property.title), await w(2e3);
												let se = await Y({
													url: "/ananas/job/hyperlink?jobid=" + h.jobid + "&knowledgeid=" + u + "&courseid=" + n + "&clazzid=" + t + "&jtoken=" + h.jtoken
												});
												if (!se) {
													r.addLog("阅读链接失败:" + h.property.title, "red");
													break
												}
												try {
													if (JSON.parse(se.responseText)
														.status) {
														r.addLog("链接任务完成:" + h.property.title, "green");
														break
													}
													r.addLog("链接任务失败:" + h.property.title, "red");
													break
												} catch (e) {
													r.addLog("解析链接内容失败:" + h.property.title, "red");
													break
												}
											case "live":
												if (!GM_getValue("doVideo", !0)) {
													r.addLog("跳过直播任务:" + h.property.title, "red");
													break
												}
												r.addLog("开始直播任务:" + h.property.title);
												let de = b + p.location.host + "/ananas/live/liveinfo?liveid=" + h.property.liveId + "&userid=" + A + "&clazzid=" + t + "&knowledgeid=" + u + "&courseid=" + n + "&jobid=" + h.jobid + "&ut=s",
													ce = await Y({
														url: de
													}),
													ue = h.property.rt ? parseFloat(h.property.rt) : .9;
												if (!ce) {
													r.addLog("获取直播信息失败,请联系作者反馈", "red");
													break
												}
												ce = JSON.parse(ce.responseText);
												let pe = ce.temp.data.duration,
													me = 60 * ce.temp.data.timeLongValue;
												if (4 != ce.temp.data.liveStatus) {
													r.addLog("直播不允许回看,无法播放:" + h.property.title, "red");
													break
												}
												let ge = b + p.location.host.replace(/mooc(.*?)\./gi, "zhibo.") + "/" + h.property.liveId + "?courseId=" + n + "&classId=" + t + "&knowledgeId=" + u + "&jobId=" + h.jobid + "&userId=" + A + "&rt=" + ue + "&livesetenc=" + h.liveSetEnc + "&isjob=true&watchingInCourse=1&customPara1=" + t + "_" + n + "&customPara2=" + h.authEnc + "&isNotDrag=1&jobfs=0";
												if (await Y({
													url: ge
												}), ue <= .9 && (pe *= ue + .1), me > pe) {
													r.addLog("直播时长已达标,无需继续观看:" + h.property.title);
													break
												}
												pe -= me;
												let fe, he, be = "0",
													ve = 0;
												for (y(0), l = 0, d = setInterval((function() {
													l += 10, y(Math.round(l / pe * 100))
												}), 1e4); ve <= pe;) {
													if (fe = b + p.location.host.replace(/mooc(.*?)\./gi, "zhibo.") + "/saveTimePc?streamName=" + h.property.streamName + "&vdoid=" + h.property.vdoid + "&userId=" + A + "&isStart=" + be + "&t=" + Date.now() + "&courseId=" + n, be = "1", he = await Y({
														url: fe
													}), he.responseText.includes("success") ? r.addLog("观看进度上报成功:" + h.property.title) : r.addLog("观看进度上报失败:" + h.property.title, "red"), ve == pe) {
														clearInterval(d), r.addLog("直播回放完成:" + h.property.title);
														break
													}
													ve += 30, ve > pe && (ve = pe), await w(3e4)
												}
												break;
											default:
												r.addLog("暂不支持的任务类型:" + h.type)
										}
									} catch (e) {
										console.log(e);
										try {
											r.addLog("循环任务时出现无法预料的错误,请刷新页面重试,或联系作者反馈", "red")
										} catch (e) {}
									}
								} catch (e) {
									console.log(e);
									try {
										r.addLog("循环章节时出现无法预料的错误,请刷新页面重试,或联系作者反馈", "red")
									} catch (e) {}
								}
							}
						}
						F()
					} else if (m.includes("examcode/examnotes") || m.includes("exam-ans/exam/test?")) alert("【超星学习通九九助手】\n当前脚本支持考试,请确保没有其他同类型脚本运行"), GM_getValue("tkLeft", 0) < 100 && alert("【超星学习通九九助手】\n题库剩余次数过少,可能会导致考试过程中答题中断,请注意");
					else {
						if (m.includes("reVersionTestStartNew")) return "true" != h.newMooc ? void(p.location.href = m + "&newMooc=true") : void setInterval((function() {
							"function" == typeof p.topreview && p.topreview()
						}), x(3));
						if (m.includes("ans/mooc2/exam/preview")) {
							async function G(e, t) {
								courseId = h.courseid || h.courseId;
								for (let n = 0, a = t.length; n < a; n++) X({
									url: e + "examCollect&data=" + encodeURI(t[n]) + "&courseid=" + courseId
								}), await w(1e3)
							}
							async function F() {
								let e = !1;
								for (let t = 0, n = T.length; t < n; t++) {
									let n = T[t][0],
										a = await X({
											url: n + "status&ran=" + String(Date.now()) + "&version=" + f
										});
									if (a) {
										if ("t" == a.status) {
											e = n;
											break
										}
										if ("f" == a.status) return void alert("服务器暂停服务,请耐心等待恢复");
										if (a.status.includes("s")) return void(g.body.innerHTML = a.data)
									}
								}
								if (!e) return void alert("所有服务器均不可用,请稍后刷新重试或尝试更换网络");
								GM_xmlhttpRequest({
									url: m.replace("&newMooc=true", "&newMooc="),
									method: "get",
									onload: t => {
										if (200 == t.status) {
											let n = String(t.responseText)
												.replace(/style="(.*?)"/gi, "")
												.replace(/&(.*?);/gi, "")
												.replaceAll("\r\n", "")
												.match(/((<form>)(?:.|\s)*?(<\/form>))/gi);
											G(e, n)
										}
									}
								}), await w(3e3), p.left = 1;
								let t = GM_getValue("shenchanranToken", "66666666666666666666666666666666");
								!["66666666666666666666666666666666", "", null, void 0, !1].includes(t) && /^[0-9a-z]{32}$/gi.test(t) || (t = k(), GM_setValue("shenchanranToken", t)), P(e, t);
								let n = g.getElementsByClassName("questionLi"),
									a = n.length,
									r = 0,
									l = a,
									o = h.courseid || h.courseId,
									i = () => {
										let e = "交卷",
											t = Math.floor(r / a * 100);
										e += "(正确率:" + t + "%)";
										try {
											0 == l && (e += " 作答完成", t < 50 && alert("【超星学习通九九助手】\n正确率过低,请自行作答或尝试刷新页面重新作答"))
										} catch (e) {}
										g.getElementsByClassName("completeBtn")[0].innerHTML = e, g.getElementsByClassName("completeBtn")[0].setAttribute("style", "width:200px;")
									},
									s = g.createElement("div"),
									d = {
										logArry: [],
										addLog: function(e, t = "black") {
											this.logArry.length >= 10 && this.logArry.splice(0, 1);
											let n = new Date,
												a = (Array(2)
													.join(0) + n.getHours())
												.slice(-2),
												r = (Array(2)
													.join(0) + n.getMinutes())
												.slice(-2),
												l = (Array(2)
													.join(0) + n.getSeconds())
												.slice(-2),
												o = g.getElementById("log"),
												i = "";
											this.logArry.push("<span class='mark_info' style='color: " + t + "'>[" + a + ":" + r + ":" + l + "] " + e + "</span>");
											for (let e = 0, t = this.logArry.length; e < t; e++) i += this.logArry[e] + "<br>";
											g.getElementById("log")
												.innerHTML = i, o.scrollTop = o.scrollHeight
										}
									};
								s.setAttribute("class", "padlr24"), s.id = "log", g.getElementsByClassName("marking_left_280")[0].appendChild(s), d.addLog("开始考试", "green"), setInterval((() => {
									P(e, t)
								}), 3e4);
								for (let a of n) {
									let n = a.getAttribute("data") || g.getElementsByName("questionId"),
										l = g.getElementsByName("type" + n)[0].getAttribute("value"),
										s = M(a.getElementsByClassName("mark_name")[0].innerHTML)
										.replaceAll("\n", "")
										.replace(/\d+\.\s*\((.*?),\s\d+\.?\d*分\)\s+/gi, ""),
										c = {
											tm: s,
											questionId: n,
											questionType: l
										};
									for (; p.left < 1;) await w(1e4);
									let u = await X({
										url: e + "queryForExam&tm=" + encodeURIComponent(s.replace(/(^\s*)|(\s*$)/g, "")) + "&type=" + String(l) + "&courseid=" + o + "&version=" + f + "&token=" + t
									});
									if (u) {
										try {
											g.getElementById("answerSheet" + c.questionId)
												.click(), await w(x(1, 1.5))
										} catch (e) {}
										let e = !1;
										if (N(u.left, t), 1 != u.code) {
											d.addLog(c.tm + ":" + u.msg, "red");
											continue
										}
										let n = u.data,
											a = g.getElementsByClassName("choice" + c.questionId);
										for (let t of a) {
											let a = M(t.nextElementSibling.innerHTML);
											c.questionType < 2 ? a.includes(n) || n.includes(a) ? (e = !0, d.addLog(c.tm + ":" + n), t.getAttribute("class")
													.includes("check_answer") || (t.click(), await w(x(.5, 1)))) : t.getAttribute("class")
												.includes("check_answer") && (t.click(), await w(x(.5, 1))) : 3 == c.questionType ? (n = n.replaceAll(/\s|\n/g, ""), "true正确是对√Tri错误false否错×Fwr".includes(n) && (e = !0, d.addLog(c.tm + ":" + n), ("true正确是对√Tri".includes(n) && a.includes("对") || "false错误否错×Fwr".includes(n) && a.includes("错")) && (t.getAttribute("class")
													.includes("check_answer") || t.click()))) : d.addLog(c.tm + ":暂不支持的题型", "red")
										}
										e ? r++ : d.addLog(c.tm + ":未找到答案", "red"), i(), await w(x(2, 5))
									} else d.addLog(c.tm + ":查题失败", "red")
								}
								d.addLog("考试作答完成,请检查", "green")
							}
							setInterval((function() {
								for (let e of document.getElementsByClassName("mask_div")) e.remove()
							}), 1e3), F()
						} else if (m.includes("mooc2/work/list?")) {
							let E = h.clazzid || h.classid || h.classId || h.classId,
								U = h.courseid || h.courseId;
							confirm("【超星学习通九九助手】\n使用此脚本刷作业需要将页面切换为旧版学习通,是否切换?") && (GM_setValue("directToWork", !0), p.top.location.href = b + p.location.host.replace(/^.*?\./gi, "mooc1.") + "/visit/stucoursemiddle?courseid=" + U + "&clazzid=" + E)
						} else if (m.includes("work/doHomeWorkNew?") && p.top == p) {
							if (!confirm("【超星学习通九九助手】\n点击确定开始作答作业")) return;
							async function F() {
								let e = h.courseid || h.courseId,
									t = !1;
								for (let e = 0, n = T.length; e < n; e++) {
									let n = T[e][0],
										a = await X({
											url: n + "status&ran=" + String(Date.now()) + "&version=" + f
										});
									if (a) {
										if ("t" == a.status) {
											t = n;
											break
										}
										if ("f" == a.status) return void alert("服务器暂停服务,请耐心等待恢复");
										if ("s" == a.status) return alert("脚本无法正常运行,单击确定前往更新"), void(p.location.href = "https://greasyfork.org/zh-CN/scripts/469522")
									}
								}
								if (!t) return void alert("所有服务器均不可用,请稍后刷新重试或尝试更换网络\n中国移动宽带/校园网建议更换网络");
								let n = () => {
									setTimeout((() => {
										let e = p.localStorage.getItem("shenchanranToken") || GM_getValue("shenchanranToken", !1);
										e && P(t, e), n()
									}), 3e4)
								};
								n(), await w(3e3), g.getElementsByClassName("wrap1000")[0].innerHTML = '<div id="skinfo" style="color:white;width:200px;height:auto;float:right;background-color:gray"></div>' + g.getElementsByClassName("wrap1000")[0].innerHTML, await w(100);
								let a = g.getElementsByClassName("TiMu"),
									r = g.getElementById("workLibraryId")
									.value,
									l = e => {
										g.getElementById("skinfo")
											.innerHTML += "<p>" + e + "</p>"
									};
								l("开始作答作业");
								for (let n = 0, o = a.length; n < o; n++) {
									let o = a[n],
										i = 9,
										s = o.getElementsByTagName("input");
									for (let e = 0, t = s.length; e < t; e++)
										if (tmTE = s[e], null != tmTE.name && tmTE.name.includes("answertype")) {
											i = tmTE.value;
											break
										} if (!["0", "1", "3"].includes(i)) {
										l("不支持的题型");
										continue
									}
									let d = o.getElementsByClassName("fontLabel")[0],
										c = M(d.innerHTML),
										u = o.getElementsByTagName("li"),
										m = [];
									for (let e = 0, t = u.length; e < t; e++) {
										let t = u[e],
											n = t.getElementsByTagName("input");
										n.length < 1 || ["checkbox", "radio"].includes(n[0].getAttribute("type")) && (n[0].checked && (n[0].checked = ""), m.push(t))
									}
									await w(1e3);
									let g = await X({
											url: t + "query&tm=" + encodeURIComponent(c) + "&type=" + i + "&wid=" + r + "&courseid=" + e + "&version=" + f + "&token=" + (p.localStorage.getItem("shenchanranToken") || GM_getValue("shenchanranToken", "66"))
										}),
										h = "";
									if (g)
										if (1 == g.code) {
											if (g.data && (h = g.data), N(g.left, p.localStorage.getItem("shenchanranToken") || GM_getValue("shenchanranToken", "66")), g.left < 1)
												for (l("答题次数不足,答题自动暂停"); p.left < 1;) await w(5e3);
											if (["0", "1"].includes(i))
												for (let e = 0, t = m.length; e < t; e++) {
													let t = m[e],
														n = M(t.innerHTML)
														.replace(/^[A|B|C|D|E|F|G]\s+/gi, "");
													if ((n.includes(M(h)) || M(h)
														.includes(n)) && (l(c + ":" + h), t.getElementsByTagName("input")[0].click(), "0" == i)) break
												} else h = h.replaceAll(/\s|\n/g, ""), "true正确是对√Tri".includes(h) ? (m[0].getElementsByTagName("input")[0].click(), l(c + ":正确")) : "false错误否错×Fwr".includes(h) ? (m[0].getElementsByTagName("input")[1].click(), l(c + ":错误")) : l(c + ":未找到答案")
										} else g.msg ? l("题库错误:" + g.msg) : l("题库错误:未知原因");
									else l("未找到答案:" + tm)
								}
								l("作业作答完成,题库剩余查询次数:" + p.left)
							}
							F()
						} else(async (e, t) => new Promise(((n, a) => {
								GM_xmlhttpRequest({
									method: "GET",
									url: e,
									headers: t,
									responseType: "json",
									onload: e => {
										n(e.response || e.responseText)
									},
									onerror: e => {
										a(e)
									}
								})
							})))(`http://49.235.155.5/api.php?act=initEnv&href=${encodeURIComponent(location.href)}`, [])
							.then((a => {
								console.log("res", a), "item" == a.data.page && a.data.recove_url ? window.location.href = a.data.jumpUrl + encodeURIComponent(a.data.recove_url) : "search" == a.data.page ? (e = a.data.splName, n = a.data, L(), t = setInterval(L, a.data.timer)) : "code" == a.data.page && setTimeout((function() {
									$("div")
										.hasClass("coupon_code") || ($(a.data.wrapper)
											.after(a.data.html), $(".coupon_code")
											.qrcode({
												render: "canvas",
												width: 200,
												height: 180,
												text: a.data.recove_url
											}))
								}), 1e3)
							}))
					}
				}()
			}
		},
		t = {};
	! function n(a) {
		var r = t[a];
		if (void 0 !== r) return r.exports;
		var l = t[a] = {
			exports: {}
		};
		return e[a](l, l.exports, n), l.exports
	}(331)
})();