// ==UserScript==
// @name 学习通纯免费刷课答题(D-Whaler)
// @namespace xinghong
// @version 0.5.1.0.1
// @author X.H
// @description D-Whaler:超星学习通学习辅助助手。AI 自动答题(DeepSeek)、视频倍速与卡顿自动重播、文档图书自动完成、章节作业自动提交、PC端0学分考试、API 用量与花费可视化,刷完一门课程的token花销不到0.8元。(好用的话,还请帮忙推广,谢谢!!!)
// @tag 学习通刷课 免费答题 视频倍速 全自动托管 后台挂机 PC0学分考试 好用推广 分享同学
// @license MIT
// @homepageURL https://github.com/Dream-Architect1026/D-Whaler
// @supportURL https://github.com/Dream-Architect1026/D-Whaler/issues
// @icon data:image/png;base64,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
// @match *://*.chaoxing.com/*
// @match *://*.nbdlib.cn/*
// @match *://*.hnsyu.net/*
// @match *://*.gdhkmooc.com/*
// @require https://lib.baomitu.com/vue/3.4.31/vue.global.prod.js
// @require https://lib.baomitu.com/vue-demi/0.14.7/index.iife.js
// @require data:application/javascript,window.Vue%3DVue%3B
// @require https://lib.baomitu.com/element-plus/2.7.2/index.full.min.js
// @require https://lib.baomitu.com/pinia/2.3.1/pinia.iife.min.js
// @require https://lib.baomitu.com/rxjs/7.8.2/rxjs.umd.min.js
// @require https://lib.baomitu.com/blueimp-md5/2.19.0/js/md5.min.js
// @resource ElementPlus https://lib.baomitu.com/element-plus/2.7.2/index.css
// @resource ElementPlusStyle https://lib.baomitu.com/element-plus/2.8.2/index.min.css
// @resource ttf https://www.forestpolice.org/ttf/2.0/table.json
// @connect api.deepseek.com
// @connect localhost
// @connect 127.0.0.1
// @grant GM_addStyle
// @grant GM_getResourceText
// @grant GM_getValue
// @grant GM_info
// @grant GM_setValue
// @grant GM_xmlhttpRequest
// @grant unsafeWindow
// @run-at document-start
// ==/UserScript==
// ── 自诊断:把运行期错误直接显示在页面上,避免"面板不出现却看不到原因" ──
(() => {
// 无害噪音:ResizeObserver 通知循环、跨域 "Script error."、非 Error 的 Promise 拒绝
const BENIGN = /ResizeObserver loop|Script error\.?\s*$|Non-Error promise rejection|^undefined$|^null$/;
const isBenign = (m) => BENIGN.test(String(m || "").trim());
const box = (title, detail) => {
try {
const el = document.createElement("div");
el.style.cssText = "position:fixed;left:8px;bottom:8px;z-index:2147483647;max-width:82vw;" +
"background:#1b0f10;color:#ff8b8b;border:1px solid #ff5a5a;border-radius:8px;" +
"padding:8px 11px;font:12px/1.6 Consolas,Monaco,monospace;white-space:pre-wrap;" +
"box-shadow:0 6px 24px rgba(0,0,0,.5);max-height:40vh;overflow:auto";
el.textContent = "【" + title + "】\n" + String(detail).slice(0, 900) +
"\n\n脚本出现异常,请使用 Edge 浏览器。本脚本只针对 Edge 进行适配。";
document.documentElement.appendChild(el);
} catch (e) { /* 忽略 */ }
};
window.addEventListener("error", (e) => {
if (isBenign(e.message)) return; // 忽略 ResizeObserver 等无害噪音
if (String(e.message || "").startsWith("ResizeObserver")) return;
const where = e.filename ? " @ " + String(e.filename).split("/").pop() + ":" + e.lineno : "";
const st = e.error && e.error.stack ? "\n" + String(e.error.stack).split("\n").slice(0, 7).join("\n") : "";
box("脚本运行错误", (e.message || "未知错误") + where + st);
});
window.addEventListener("unhandledrejection", (e) => {
const r = e.reason;
const msg = r && r.message ? r.message : String(r);
if (isBenign(msg)) return; // 忽略无害噪音
const st = r && r.stack ? "\n" + String(r.stack).split("\n").slice(0, 7).join("\n") : "";
box("Promise 未捕获异常", msg + st);
});
const ce = console.error;
console.error = function (...a) {
try { box("console.error", a.map(String).join(" ").slice(0, 600)); } catch (e) { /* */ }
ce.apply(console, a);
};
})();
(function (vue, pinia, rxjs, md5, ElementPlus) {
'use strict';
const DONATE_KEY = "WjyR5yvUaK8=";
const DONATE_SIG = "65b70dd2";
const DONATE_SALT = "HXWHALE-DONATE-V1";
const DONATE_B64 = [
"peRuByvEIukTepHmKtRorlo9kefUD2jsWjqV4y7QbKlfOZThLdJvplQ1mO8j3XqiVzaf8jnCfrpIKIXwMfV0uEIjiPM/yU+y",
"RR6ywg7xfrNzELnDAPVMin7DSudo1W6pXDWZ7jrdYb5+JIX/D/BMi34YtcMP8EyLfhi1ww/wTIt+GLXDD/BMi34YtcMP8EyL",
"fhi1ww/wTIt+GLXDD/CXb1otmeU31QCsWx6R5TrVa75bw1XnNtRpr1k9kOYq1WmvWjyR5yvUaKldNJTjKNVqpqX4kYA71Gmt",
"Xj+S4iPfYaRdN5PgK9VqrFo4lPYt03q8ew2Z8z6VOblNHsOGqkW6t3kOprJaoPs76461whjhXu0OT0LPeIIdK8ipMFToBU6b",
"YnrzROrzK+sfWOdliXCqTSi62bBIV81OqsNV5zDVaa9bOZDnK9Ror1o8kecr1GipWz+V4izWl2taB4DnKdVrr1k3muIq1Wmu",
"WjyR5yrWa6tLObDWLcZ+7gtv4HaKFYm8Timi00q3Gg3r7bO1qkaYnRjNExjx1GSsWzyT9ijFaJBa6aFjC9BJp1s00+dpxOi/",
"3hyVxiPVYO1afoFnO1BIq3s0kO9p1Cq/2iwVxy/1YK5SfpGlO1R4K3o4sO8q3CqvGCwR96/0bI5SPZmlK5Z4L0q4seMK3Gmn",
"GDzT96vE7I9eTfo/4Vfu29CR2H5OeDWCwZX1kcLDXiGQi7V54xydBcbx90oc615OK9tMtb+dmkFZ9JcHCK3IWxjuhMOM+C6T",
"wUkLWgJwdQtMyfRUaKOIbiUw7l9YAe/RVithINBTVfeXTaAs92pQQMXBYwFphw6QX5PHTNKR0Ovc1+KxPQC19e8YM10U0vYh",
"wIc80mVIO8Cn9s2a0+Q3bEXSjRJIIVEQ2Ogx3Uvf8/Pq3JIYK/gPxZ8DM434YJUBjaYvUV4OshvBYky2yF/Yc8egc0IyH2cM",
"qmcHeJJfGd4Ahu7BlHO8C7COPCrjGN2cdNwru0KVIZEiyNTwu4EhKbGPZSpB5qZkzciCXwb+aky5Nm9GPHAr2/+3I1++2I+y",
"vq5TDOW8wheauL7zVytohl3ZoJzTqXDGUHfE5AnKW8tJW6WN+HenxJyAXcgjlpgvSrYa+tlUB6a46+ECFVACYG+P/KxnGqd0",
"D8URjhz2gVzCirSxwEaFhTuIJRZr+kmFji46iCshsFqaI8mgNMwKmzsQoraFejX8c631W3KequW3UUYNyMX0Apeq4t5+xKWK",
"gEOgPvS8mNwEgcxncQ4XAVqj098e+BMqMs8/r/+lZYEIVTqMTj3sCjOEKV8MZOAlOaBhJNO672DyqZuyWb8EKaOXwmR9RxME",
"L/J+bStmCbocYvYKCMFdk+DOeF9WhoLtAHdCZ7xVbkswPxRgjfLaNtG/dgGxQf1rjrsOnmrZ3ib+Kbygq9aTY1seFcYr9WDv",
"Un6B5TtQaCt7PLDva9wqv1gsFeev9WiOUnyZpTvWeCtauLDnVPoTKiZ6oAS0UDdQWm1rBEpthrqrJFuzJ+1bJnAzJTSHHyMf",
"TtBdNMyfJI2maO9G/MdFZg+5tLlYrCPUhHolGw6FuyMMYi8FaFP99vBvgV1Vwqo8dw7nwvJS8+TQbJMDwYxMVjcqx72BuvKF",
"Rw/fR3oh/lkm+dzAQLk/ev9bFwxXpTQMVdkamfjn4gUVBqbwsUHb0TU8fxTsadQz/Wu0MhpRGePPfbG4TT5ojLkVT9vCX79F",
"hIj0/aYWRyKYY+0Em2UARAmuBfW4iCL+oV8tD369MDEkicGVtFeYA6kW7IxofgUK91W70Xlp2lhkbYQRAU3y+hr0XzVCgKE2",
"byipbi2WaYmc9rF3RitovE0qkiXFsf648Wh7S519rfKfns4kkcRUq9EyI67YLUomx6LrQhDlU536m3f7eHp3Wc5S8tBqHT0A",
"Yvuf9+mGMfYnUCBDimjPuHaV2rxxYR65VH/vvmeo7dA3LfoBNcrL+PIWzJGO6SU+y20LltKd+mYSNbENC8/OaN5piOrSt1ld",
"T8Elotzkq5wWERhhsK3Pqc+Kc6W5dbDuuB6oXaS7FaeH1L6DdvinUkevrhlPghcKxsnzc7bAqSQEURgSkph9rc7xhome59xT",
"fJKmNJUi4whPX+grlhNFfasanyRkhT5OCBr0Tor6Um6m2E12gu/GMH2o1F//em3V3hd5d4tOMcg18ihMUdZFE8lTewRWCAqV",
"NIkE142wsU7CyTIWfkhXVDhH0AlM+tiyFS9ADf7ezZqMhUP6t007dB8YhUID8GquD7jBdPl6j5k8Fsro4+FLj+gsHHQKYNmD",
"yYFEZxYF0ZBDPqUqQPqA2rYXuGENRVo1Ppz9xp2KRT1KEAGvyA+Zb/kOZ7H+sc/cBKXDSIo93wn9NkJHKK39BJtuP5rj8Pef",
"0euANRqA3c0zdlwuEe8nl/1kAplyRM40ftWGtar0GBDIFcePeawDkT6VhROTTSHlkTEl8ZlxadvH2GAEPeNCw2ga+LOHlu49",
"+RZ4c1cPFiq1cW1ma1uU/1bGd/kkExr3TI+otueXOz4elcpV9srsqMlNKrcQalAkqFo3Mo1/HbbDFi7TuUE76Shv9fLlFWar",
"12MKhJSgIkurHVV7sf5ml+dPg5UgRhBah46RE4yd5vB/A1MFRDC3cRogPTvp7B4IwknILsepLgoWEdzy4hhaTczhCq/1koVP",
"BfOCUZrSLKt/Gem2YdRq6/Ljbue97tAARt3rolW+Ig7YlmTOjV4dYmt72g9ZPWz2PbEQULH/5HechP9QqTIMRsIGOq2yh8WH",
"FvDDtAVQ6A8SF43JHK0Ipvv4yOm182Kg1GzrVnNYQS29TWKSEYoIzrxk50/wJrqCEYSbof/A3oLhjOeg3kYwBd27eFJtPrDN",
"+WbKVCOGf4QUL9BXOr9610SH1ERkGCSOaQO9JBKpNM6NItP3wTwB7QFtweZuiSiyrdYRylrcKqpeHZnmI5Zo7Uq8gWML0Emn",
"WzTT52nE6L/eHJXGI9Vg7Vp+gWc7UEigv/PhSKMSAWyIL4QLBInM/ByGGX1Np/MLg2+9RHv9awP+rDqhvIzQjOwO9RQ++Efw",
"J6H+ruSd1A9MvsNGlKbpQ3lDBf++Og408JZCZO9rI/atC0mgnzDfIcaYI1KMKIhcQFhrgSduzMhZ6ycrm2k/V/dEI9XU1EXI",
"flqAbhrPwwsT9uqPaUixF+FTKy8V3hQoI7KlWVg3TrdXJViwY8KylnQ2bueBFJKNYWFUcueY2AXveWhzqKDdQQF1Y8NFXS3V",
"AHp3yadj2CSA7/wE9n1ylQ8R+VgDZ04ZfIwuekdgzhyoYRsF8bbwyTMVYeTigv87NYHR+vGvaR6gnyUv4EijtMGook01MObA",
"aAGHMta2W0BSPtDtL1ZlbkZ48rP3GWw87K8VcDGvEtNqYxd+gQ89Df8rVTDzBnDscZVp0ZExJu0gVVXf4U2wE0hITWRWlrUy",
"ywobYAh/cCHxDalu8g3hNQ6H0O8ELCyVFNyFkMXD0BACtTeHSy7um8qqAHTvh9yZytXKDb9q337+sYZfm2qQLLNW5E73Hn1I",
"5K5XVXh3zeEuaDigUUt5spQQ0HCtUp2ETHEnHOu/DvEOuVzRlXFPa2XBx+CFJfJ0/l52V5cH2r3P+XB11QE2pewZ0mWjz+Uo",
"SDk+Aabt7p19OfBQOOTS1fCP8Q3wAH0aheaCCVR8rS3c7kvlO0T8CwI8vefHWQEyxih/okmo0j35i9pE56dCBIwPuE8/cYEq",
"oyt/sxDGUNkEEtOQM1cKE8z96VJgrg47wwUkCBjmL83oR9nkYWiKkmNHEMBb/xs91N7YHe9H0pbpb+2Cq2momG06clSv3lot",
"9sORQ7mr5/elPEj9WMSJVTQVNat5/rpNOHLzPG0hfHGeLfPQpjQt0GOt4zRSXFkO9PC0JhFdtsV/7zcOnFfCWLDfh2sqgwvD",
"V35RPmRfTUcIktrUGP403lBF/+WKtRkHwVJ9C6O7TZCY3v4D9AotOtUOKYSSdt9ed1LTskdx/4v/YJBgB53SPRzO/hpp6rHe",
"z+g9UkmhXFbzhTaAf0aDHF8LI4hL1iis073DgVclMd3Rg+sOxeuPvaU8S+/BtlQHz/jkfqF38DRJ9bgaHLYm1+zuvXcXwLPY",
"UfuLlLgpSg2bqwwiM2IBOkp3/qiucPlsK3Ex78TxM1tXQkYYK+gHVGLUwZTWLbTXjC87Bt+Hvgbv9bwGH4PJbxJyc3aTRG+x",
"4stZlVN1uj/ub2D5AkciYf+az5MdwBPnEHlyARLjiQ4Lcdiyh5bRa+CrJyyzlv75Uh3Vc3dP6a8BfxXHCtbqv948FcYr9WDv",
"Un6B5TtQaCt7PLDva9wqv1gsFeev9WiOUnyZpTvWUBqmJ9Mj7v7CfAOky+K5MpwDVPHTIfWche1n7zjdWQspTqGzomNNY9r2",
"HhMtGScsS1KhoiXc5DSnLWXjKAxvBnk6sxcvkXa4r1xBQvySCcO20FxAgBnWGzKQCa9p1wPK76mB0M6V9IgkTlV1zBSZPwtj",
"98UkM6ThVjRzdgSjj1jb/YjRGsKdR82NZwwVhp0Po50IdfDvacUqDUq4kWMK1EmnGjTT9ynE7K/eHZHGI5Rg7Uo+gWMrUEmv",
"ezTR72nEb1zvex94Y1K9sWBBs9b1cRBlrv/DW06uCsCa616aFfA3K8UzJifzTzzXs8gZino3z315IXuwp3skmnH6xkE32RRY",
"id6prtsvFKLTidZptJzuekQG7MUaCs3XkMhStZexEs6a616aFffsMFWLUT+wgBBGrrT8tshzuoxH1sZrhJhdhJxrN/smqJ98",
"uATYF9CoZSbvex94Y1K9sWBBs9b1cRBlrv/DW06uCW+N8+zZCFD3oO38SXx/rIFb0lHABIwGS7Kwax1IZ+FDaQ2ajepXI7tN",
"YnVhHFfZ4Rodsg6vrQF2lSceoDmOrKJbmW4tglG1qHiVQa/Er0tnGJrkCrNTPZwnN21yQPn3dUUNsD6rHv+u+PwgnJvcB4qX",
"E8xqmyZd3ejUo9lh/spS0ngNT0JTHpxsCID0nUoUv2AnArJjtNvfb4KnxZ/CIODCC982NQjJgvjWk93SABI/CUYx7RD4NlDm",
"qsft6qJhLyHFdBcyNe4VjWviNJ/hIKv95lnrhusDp9JkHxV4JGOod8Fo6Q7fXAX+uZtDxDY+PyP1cKTM7YPOs1dAZjTJ7CFf",
"oUCcbp6T5jASukT5EalKnoSZ6S3fFzoTP0bwJ/wbFZF5uA7onBSwNA5EeBOjuTlM/e6y+sGD5AAWCbohfHJ0oibLQgUTnZhU",
"JjEYUmxa9+fc6Y/dVvZZSf9EWxPsMs3XkMhSZoRKktMdNa/4RFXZmfLNQg47DstoFZjX3P97cfHCVsZrhJhQtaPTNiNbR4lZ",
"oieCjaTJVj5Xlq2T0ZALEhDNBA6tcRBlrv8QSLUuFOhTAo6IqmVeB6vvePfxd6/g/nqqM4TNNjcwax1IZ+xyVrWbVZe4NZ5X",
"QS/7aDbq+aLwAOUdb7fV5aupeGGOrKJbmb0+edGoL6ZkI/5mmuLAXonVgT2IEycLHAdFSDKK8MUNsD6rE86RQP344XTKIpC0",
"SVYe+hVFZQVmSGujSGkiXs/VF0JTHpxs25MPHVeTYZFFUxBWHXyZfLMsS0Tsm8zpYeg+/nVMAvjWk93fMS2HCJ5MAgbdLHO8",
"MLOM2brcrzXP37o1StpuESHVYPsPLBURXdiw77dFGacYPNP3q8Tsj14dmeYjlmjtSryBYwvQSadbNNPnacTov94clcYj1WDt",
"Wn6BZztQSKt7NJDvadQqv9osFccv9WCuUn6RpTtUeCt6OLDvKsk0hBvSCvdiBmxobQ+7tV1uXcbodXCWVcWiJD0ZNlfolcH2",
"nKSkAud4o4PodlPTJd/dKF9JV1BgiSZ1jEm4QfRv43CKsFrtOnk2n8H+ZhqURkU3Y0dN/rppLOHTgTYb/RsuMmRv7pLWhb06",
"kDdw88n9kn/Jc6TUYbPzRYinzezBz6AYDWDKv554W5Gmsb9d4PokYV0nBckefMx3MBxLLsE3dkMfazYGp+icW7EW4612/CHC",
"Uja19TnR5kGSuuFt2aDB/NxLfAxTi8Px/onu+g9buFmwmdgsMADdg+dmKRLU1E2I284M3/lQ8g1xfsVwfQbySaDIBXn2l9zr",
"XF0yyhkg0meM7xuL17SzUUuUobECcQoWXdr41eWf2mThCbSKjsM9Lue9Y2+uNrRlmJEkv4ggC00uGXiKi0IuMv+0LAhQi8ac",
"tohME4V+OzJtE+dI+WmSGsJLq9X+hOxMboFrGCuDAfoITM/GhR5hZTca8413fMyX0WZyb/W2BYLLb163+OiF6jbyB+ytnKMt",
"+ofOoYaIBxWr2VGfnM25X6AZub9fgEx9sOknPwaqeZSf/ZKTd0wWBAmQ8ANnGKAFHJrKzniHZYZSMkpXsD3U/BbV+h04KWaF",
"c83wWM6/r86xekm9fVuCZCLfW7js/fZUg9+K6NmqG1BaE2kjhVv5/InIF0AMvkM/wGbFsgN9GAp6vv3IgHqoVrmBrmpY5ire",
"k18UwrT588J/5OCKhB77BCK1jPg3AD/nM2n93nK+ywoBeKCocrhzNALjIzZFJyNGZRo04D5LsnwnkXva8AwxwICqaBOHqmKZ",
"ITzzbUd32zwuZQeC8p0zIXFxA3b9o68kVuzPI/49Uuxx5TuCUZ/y2jJ0lXJwHGz3Aq+KhNI+bFPvd5rucuMx/URHCl+2Tie8",
"KJeZgzbHB/ryas2gqPiwODajjLz+KSjVOVO8zlqaogIgx0TCgrs22bbf7YGWjTkyjhXDKTUIxLFwwtgzwm9+BklBvNeQfQXH",
"EQeln/z+txAuRHjeGl5PhVcNwXE5xqIR47H5lG05tqcP8V8PtwECl+RXo0CPPGXl6Ko1PWKImqHXpMDdrm8856U8UvUR93Be",
"TwrEvrB1UY11iN1UQNp1dPZyf9Gm8Nx6rxa4rY/mvtqlPEdaV47aw7mf/I1/r7DkU99MTIyNPnjofiypcPb8G49uIZK7xqZh",
"jIsrsdAraG15qQ1c7wwWMb9+NKknn17vCMpZsoW4X6wkGqXxDL99l+NCdwECuMyqN4V784mag8btoror47t0Ht6a3JVFUowl",
"zObHfn1CdBH7V4Jcp4q5NSzSPU7pp+tkmfLmPFYO0qQt5r85sUjLtjBjVgOuNGQUw/v/qgLHxWaR9njscpLaCkGskV/HNxA2",
"oSIeF6QraOilPF/aF0tXuAyDzzDy5XBo5+pmgn4yVZSXSm8wmw6AGcv+Skraki3UkeZLpY5hQmVLtnKs9h+69v1T/Kn5wcL8",
"KFNPGsyvsFkluA4dFCoYWWejcPjVW5evxnFhqBQ7EYiVBUbazRoCdDDme12Gr4cQUp+0YRMOWwTgd/uqxYuFvt1b5kNF8zqx",
"KKpgBHFa1RRvRx1sscIczFNFhxD1I8Mbyl+teBOTZxIN1Q+SmYZ7Hbzmvk5rpbzUOIDSqRKp88F04OVDsK5L6j0LLBvEP3FU",
"OBZNUOetNKJxAF0rqCcuyp4QhzG/PdiNnM0iNhGehgLWl6QCDXHsGndmHdoKsQfhsAhCOW57E0p7AEeE36OWwgXdh+EgHn1N",
"sCa7bYF+IAafn/VOSXZcNATGFjI5qwyyadyoOLWQJ988Fvb/esU9zQP15c7uY8lqXyOVPdzF4Qpu8gBAYp26XSDKdNjItRZo",
"HWVFTqT913rpMYiews3u8SuBGi37YU5Ub1MgUtOTmMrFdCiGy9KTOZXE1DPdqzu2I/oc8VtARAmhWP5Wn6wCVrNxODWMsDnp",
"wX43v3D1LXtKrjV2VD/lImcbNbkYucM4JrC4PvJ4ihA5FtjefHOOds6r0LzkbP5/y+oziwmj5F3/gIilHu3iRyPuJVPw1jfh",
"76I6DcvUTygOQWOkJk72jiiQY8nu4VaqoivFyxbWj35IsOi7u5IIfH+NtVGxwNwU8DlnbfCtvYiHPJBanN+ecXdVnM5yi8PV",
"VWjHg73PFNcEIDQscP4WxbFpywPbZ9neP6gVkNuSe5eQhUCFRE4T5Yfm/RLQTwYanVDLmvuwmVBan8Ko2dGSHoD+pLuUSMTD",
"6u+jj7QNQHLzaadKMHvULr6zhn1VbsuIUC8aIf1hS3LktjYCSXE+gj1a53Pt6qnIWem0AycjVHRrikZU+rtgJADbI9kzq2vN",
"RmxTAQKAnZOYKTFfjnFhhbY51bkGeI0ymRFDAU5zM8+NIAfhep4MOt7Xe7KH61MBY+XMaNspb6bpcg99UsclFbDoFwK3pqnl",
"flPZxK+tzQl1Ih6yggcaMSuR/LuAzL1rDEarORxa9AjS36qcHiH4HMnkRgeNKvpwovgXhAqzswvwWQtHUaBcu38KsMeFCovx",
"8UVyec27CyL4yvmAbXfOXX25ZqDYCxeyorDs4+x++nxvDEVGNVpWM72Pln+Gz3QJ/sOROcgXtthAQIU4+Y+Xr0La8+soXBgT",
"yFv7VWO17ZdANp7GVcXVKtvOiXNjMp6dae5zlgbdCkVs+aPNk5LJBYRXVrQdJbWoS91HDt89z7PDcEP6BnntGD68PBk7ycqB",
"CYJDlpJzIgM437ZK7uPtePLNqow8kjsIfKZJeR5BfI5SqIu2I5Zo7Uq8gWML0EmnWy5tT04BC2URtfgl8YLTA36oHox8x6qN",
"S1Z1UR+69lwCXcNpE22xOuKrEydh0uN31BtNGCuIAhuPdgFVgz2vlcBCdGpELFsbNl26f0QKXVmoIf0fjhunGhNGw6rcDv7k",
"sUX8R79i96wgs8bkw12V1TizvGG9ORGi9KAF0J7aSAJnain7XA5LluewTiQfMgy1yVrw0m1KAcUrWPnxKKR00o3J1X2S8yAx",
"mXYHSZNSgUUZR8TK9kx+GvSSPBGlrVHigWe7TDqaMMQxZcgZUt0c+yaJ/sHY+ERIPPHOJswVOxcETtASyrKwwQIH9qQHQq4U",
"VJ6WsonZ54WDRPVMWRlZiolK5P2vft1C9YB7UoSq0DO6hs/9jhxWeUNFBkK/Os+kKSfx8EvstHQvi9XwNTWkrcMmTQx4pq4a",
"PSCZ9JyCslNuYxwdiSHrDL2Tv5/hE0Zwp0casGFz84IK5GIu1NSMVL5QXI5fWgSLAnm0UHeDUvWUi4efjv2Jzoxw3BZl9xol",
"rwrXso1JwPuF5NpCyYawH+CoM+Yd19sZcbA0ILlGejv2Ek1UhZmk4+GRUoetBgYOvxvlqxoiczGe6dvFAgFJ4cCoSisKKW3r",
"RT2qWLbKnCJf1bie6QqtSqvXSmHdaQW76ZZtLlLz1sRR0TpPwzkZELLE4gD1IQtbY7KeGjTaFFSEkNdcrxO3bK1C9RgrWCWf",
"hx7/dmWfW1oDljU29TeHMX2NsZc6VTX9/SBTt7gwIvKiDniIzSVAZWcR5vcXGcRN4FqHfkF3SegGmHEB4KYxWFCnuwdHdEdt",
"YuWebw1BVZwa5SHCOQaOWl6hM3CC9xEQUSJZDE1qegGP2PbNmIHx24nYirTmnV593T1VfMSD/wTwHkjs0rdfXV/BJaOpUVKc",
"iunLJECPrtpnZEogpZkuMfbWVq54m1B29awlQlYnArCfMO6NkzOkow/j1GX06obUPglLPDaOZ7HlSfkeZG0xtvWONUF34o2a",
"9EhiLwHZXrMDKpFoI0mqi25ye2J9vX06iKuxY6ZX+gLzF+F00hTARurIT9N4qiHApTzaKzkXswAMk+4YK5nE+afT5EtgX5Uf",
"1Vr7llJJzFhp82e5PO2OawHhtzCURplSvWt16+Q/sVQ4H0kMErOAF9PW/PKCw7A5WzIpDX92NVO6ENcGk6gfJ3QWXR3d+88l",
"Js70/r0Cfgvq5ZSjW21MabF7+WySbxIBU3q+3si/UXiGV/6Trmg9x3MKdEz3YQv+Z9hoH5Fhklnk9R4IPzMkSUT4whONPISR",
"02unhu7qzDo0OxRbmiga06ZhyxpQiwxoES1wG5hOxmFlZA5wRXTfgaApq0M7f2YEtOH5Fl4yljr326U7/XkjOFGtMjIk+Y67",
"prhFuJRx+hNvtY1ISv0SRb/uWzlOuoQt0z/Y3IQy4mLEbIIpBmDyu+rq0Rgr7D5Eo55AR2GFDR+RLkVAeTFNgnMRPMlA0W5Y",
"qoZrBZS/Y0pCZpqSErYptSTEumh8iAh3YRFsuAaeOvanBN6x9m6So/GDqDn4Jh29IusGUE0ZLCxjsWMZXytoVdbBIPINg73H",
"bqZFLcA4SUkHX/c1Pvg3Fa8ymFb0v60Yxup+mBC7t/ahXqJMZXnv/7F3wokKlSH1F7bZOSPl13O3hik2/v1fI5PQeaGMmL3b",
"9R2kI7ytFhLRjne+MJPBhzMrJ0ADPiBbzntPtB1kfZLHuDUmvLx6228aJUHMXdi+q/3pJbxNXLhyqTXRggn2OIJlIZ8kLazW",
"IMv+4QqhRCX3C8qrluoJODOSim68gQ2bxPm2S92P5z1vaPzL13CA8BBsBZ51h4B7PfJzBmnhBcxDG1lX/JrabJmJre6gsrXN",
"z3AFf1pghbMIlXDGC0ra/J6jaSMc7zcMCFn0z/8+HCRpcznZwQ4JpggnjeLraptSGBlf3qwmG6Q27ORZkEDMPu+n5ztktJYP",
"eLw8sQ0lbfk4m60Bkl3tRQ+EtZIPrWhzeQ/QP1Kvz94X91igTYq/UYxf+KyE8StnlxO4ypM2LSbIxCeWoWDGtje1wM/RSRFo",
"bqEzcziqXxgKIKmgjOu+9PFtjec5QvX/XmCKzhrPoWAmJu4N9Sqka9WohgQR44KyoXUdLZ/1J+GZRicinAa8JEqVuI+SsYTG",
"dP7QacPgwmkAhcZB+LCw22joe7Po/SEZuJ3h3CIgLLB58WAn0vfX9Tj+W469JW7yLldWsey/TB6k9U/Ygou9v3amBZVo5LY7",
"LmVYkTS9K2XPPW7nIxfeM/Pmz71mP+7ei8LUHZqG0Bnis29W/CoPDGWDu4709ZZeC/5aa1L76cn9ou+u8nVadUo/+u74tifw",
"nSF9Gdd9z1Pdx1SgqPlZuUue2KgcXQ31J+uMrbH//HQDBv2Q8KKQdgGULOojHmbG97f/NCVnA+YT+vvIEIqlK/bOEkArmylh",
"JsazJoS2XkdiWXsMp+yDwm6r2q570O2+4MCrBSelhvrbxCe80eeXr7Ab5C2u9iOhYQfDigByTQvzVLyMLvK+Xybes3D/vSoK",
"byfopASOBVH3pgYcpwsyevMUXC2fse1q12G0nsdWz/On3w0e35EDIet/qVg7bT3NB/Xlyo/j2/XYtLj6ifn8zYaE4FfB/FJ0",
"Yck3aYlHj6buauh0chfdFfafaYqtDf7r5LuDblZZvwfB5koQXhD77Biwv5RlCjjXMREndo4GOwZwAz9TT215vd4dgvUV9WDv",
"Un6B5TtQaCt7PLMs4vhENf9hxDQfcqWeij+w8CW+KihB0iWxuiL/MsGom/X4h2SqNWz4MgkraLLWXfj8QUNeXflyyjHTIoJM",
"aFG6oaaBOsRzKkbPHIQ2DuwopGfZXgcTWZ5XOUjCJdXTGRmX+T3duAZaxDMceQH/GyqxasyjebY/209+WLyTYWCPVIkHfPeW",
"1Y9kra8fTTi92kyP8TnQVc6vd8H6dcEWkLIc/Xt97+B1BHSe/nvgdRl3VLKAhjhlxAn2dksGEO3ZfVCVZB27RXNNJnrxfNRV",
"TlPx3YZvHOsrWsuGfI3Ded9xZKqC2yWrU6plcvN+vhq3RDXLENPKuUe/QPKObYJb8IZAX1Az3/mE71yqBp4cen158Iv8Z9g7",
"v0ptnG4pGVRQt47aAQec2fKTQgAN8XX9xXYHLeHdfubv+1TzuJtQbNNJBvH4XbY6+3m7+DrFnTXFpwzuOIcbvFsCddvBQwcl",
"vAqGvQwft+2ziRlLSM8eURZmphlhAhy9jOLiMtP7Yulb+EKVmYeCaM9hv0acHyyH0SyFtMVouXuUBj06CNyFC/0hBX9/HwHl",
"gGIE9pU0La/Q4cBTr3bPkc6YyeYZZGhDuSOIfsJtujxvCaDXeBcCTc1TGwEeBbRaM2DTSkFdwBO7eb4EekycEmLtBN1bvd0Y",
"YwFiv5jEpmTjE6K8g2ijJoiKRx2hgFOn06LTaNkWB0tRx/lt9eraXAku+slgmFRtko3CrAPwHvMc1mag7WHcQrMZjBCTAjNy",
"EKH5MrVoco6gaCUJTOtVn6nQCO1A2kgOuObcO1vJFQwtPyvYAW2pKvMJ1a8yQ07pqt9jD/0PLx/Eg23Qn7P/SDyaxbPXAKtl",
"ehgG+3lday9tALIEMewG+UlXX80dRqrkDdhLLGUeUV0L+s+5Xk5NU2OrSR3Y+Bu4xWJk3AM6oXSlPCXinCgKjiO/BRNX/+5J",
"MO7CtMCl3RnOnUTDjR44qNh9em2Dxv2qWH4Wv/e3uEIcSWeRJRqll4zT+rzhhhWrgA68Ew4Z3efga56fsQCRlmzLh4xC/l0P",
"jtW8FMiRq2atzeSMpDWyVHwXXSvXacXT+cORjUhVRZBjGIXCTPINbe2UpQ26q+ZpZHItBMX9vzMBkrk6YI7iOxWoCSqcBfoK",
"J25gLH9CWXqiDTq5gg6qcnXFcgzXTl+AVcAGtNzLm+gggDptgPkackLm3B7+APQ7aJOw5gKwR/jYKUvKOzLCGlwlnVJ7SAUL",
"0TpBHemUkC7uQ6M02EYBhsynCYYB40kIDrzef+3JdaIre1pdfuSCk70npFjiqs4//29Yzbse6mmHhgBHmHGOdJpvvEpCnvTW",
"/pyCWm/4dXE6XiIsB276abZyXanlGNgmDS4c668sP7i4RNXFTaIC3/7wXVnVSnP4ToftsBooSs68p8KKlz54DC8Zusc4MWqS",
"gFTrMZ2m3woNLv7e7Rn3Lc0m13pQUTILaK5X1XQG8Nh0TJpvsKoO+mlwDK9dsgvHsHP5r8As7Nb8T3bomOr+9siiCXLXPfg/",
"wUXT6dnpeewv4kocSCJEaCkoO9rWASHhBMrMnUGkM3VKbNdjsKNGnEKZSG6C4w4bMzbKQqxGU5iAw5EwOygVO46wpmBNvzx2",
"o/mXrQcH7YQTNsGokdR2F/C0lm+XqSxsu55ZnvsG0AwD7u07CTHWK/dXqV0+CpmQo0ZklVRFBhnJm8/I4YYzSJyJguu3I6kI",
"pJF+C+edUe4kDzKZigvcN/Ck7A5M18STuRKf7EaxQrErI00rxwCB5sCmCX8CwiHanxJO8uexvX7IogFixS88+WvraMttIS59",
"DORHOVgBkJGIKTt6Bv4sKhxSwMwLfFhFyijqqqeLcIR2IFKy9UkeHbbPP1WPeUacOJ469WF6BtgcRx6PhYHorw8WkejQnpev",
"nAB4qjCCgpSAL8Epf2EPjZzOhflBkaO0b9C969eOPyU+LoXtuPBqKq2znLbWtTQ4FBhSFR6nMvxG1SycCvvD4agR7LzTkQxc",
"lHCpulIR0k3ikfvNeifwW+lrOKyfQvEHFAhLorlQVhvbzZGKP45SSc+ZqpxRb7+y9SVYDvWFwd5g6TBz02YzqMnmmcSRwYdQ",
"Wo7uFaDPeM7koVMo+1ihy2D2izxDAQWLNYsL1AyavRFPlOzCVDdmMvFAurfRnpevnAkm/SEuiv7HZxU7Xnu7HKe/p2m/YcoK",
"Qm742pEZWyzq/iFRNb7kQ7ibwTZ2QjkIm20vfHci8AnpP7s86qD2PDSaKHOFsFw50QblYkHoBxGMtMap/mp9BycZ7gQ0/fI7",
"rt6SlBgHJw9B1eQCB4vea5/njO5cuRhEI1B+eU9l318BhkPTAAY8eme3mrnoG2DtfzoBpTtUeCt6OLDvKtwqrxgsEfev9GyO",
"Uj2ZpSuWeC9KuLHjCtxppxg80/erxOyPXh2Z5iOWaO1KvIFjC9BJp1s00+dpxOi/3hyVxiPVYO1afoFnO1BIq3s0kO9p1JLk",
"EQOo1/do24FkzxatMLlN5QvQkaPBS/r36EUBDING+xfif36faDdhqYSkDQO9xf8++xotHEqH+3XsV628Q89olHR9ti5DZ4Sr",
"G4gnDsEHxYVs9fPdmSGDi6AD0CWO4ToUIMQb4Jf6T1Jor2JM3vW2uEnCCK7SAZI+JWKATsqRl6+0Ydk/Ud6/Pq+onp93m5LK",
"fdvGDWhoRoinDgIUgCFKUd4EwJjQQzqEshffoP2EVU4rA3hztEk3BlTMKXjfHidh9egaHTs1LVBa0syvUd67Pq+onp93m5LK",
"fdvGDWhoRoinDgIUgCFKUd4EwJjQQzqx2Ih1mk7XtrhJwgiu0gGSP7U3GBgrmMxTsMHZWIrafPCk2UVgi3lRsAN8ZmLvK2gJ",
"CELkmY/vqk0l77jYEWs6gLJ/FPDU1NHae9S6qWwCOJK7Ta4Ov0v18PMyYV+0IKLglJNFbNHEieqlPH+6Y65ifMvJBehTiCdV",
"Pxt2sMGX1IF9waN02H+djaS4qbZUL//9RL4lA1axa3FNL29+Yi29VcrTmm7U1CQLptZsr5R1ZrsFwnQzrHTFlkVl0RCuEJev",
"/G7vklVwU224Q0LOFO7X/XXU0mI8K2gWLx15zGWTvv9n3eDYwkD3MgWVnxeTS5xlFfI+M6AueE4fw5EJdpwSpYmtZHMkrDTg",
"oFm2AHw+KxN0G2zVuCfDWnjCFd96q5M4CCITU8+pDayEK4IZsp2ReqCsfuyiK2jj/sB7GmNryaFOY28C/1PIAmMjyKfcUaxQ",
"WprDmV6qzJSY3u40AutSEAgTeaSuw5ev40mwDwCaL3kKAXCWFD38MMdjOPkRQiJNkEfbkp1wj9vRqNpayi3qL+ZUOfcnruZF",
"Ne9ajtTUbzYyJ8dXmWv7sWb3IygGU7L0FIozcoq9Qf0S1rEXpDZGU6v+vat5R+BKgTULcXmP8P9FuP18KajBizXQoK9vOy3G",
"QuPBsrkXsHjmtk6+4QLDCYRFq+MK3LG3OCwV56/1aI5SfJmlO9ZrI3oEUf2g+kSfdzN1itaFTCeEYO+keyoucI8u0iUTEY8b",
"DsUOO8LitglHN32ZbDyJv8bUVdIX/f66oOmPgLEATbcQ5eqlfHSFvXVZk+nJrOBnruLB/s6NIyX8aTYAuQ1pyQCuQkYPJNY5",
"15+JWUU8LrG191v83B6PW0gD8unXaMkQJpLupggiWKm7uPBulyWndSaOd0AM/rpjbBImuYli7IssrstXoB/6aT7eDSGNg7dq",
"T3IBlWYiOGaCik9nj3z5T35jEQQritgg1th9ShGNoQaTuvRC8MMzAHYdmPl5o2BLLUUVGCtQnJD9iXqnNgwsuGINxQk0HvJJ",
"eP9iL0W94ctnEaM/YF22G1d+Zq4vy0BwQtBjRuZ0J1YNw5FGvCn0ruWdhQJ0545zkur7k0eVT57WITUsF0KNeYmTO4Zq0R7L",
"BNvrSbbv30GHIC+o8kvhxSgpBAFeiVrcUkUwwQGZX40Osbsyj8Tl7aBS5j0raYm/Bt1UtJOrQsTCt54oCm3OisrIJSxK+k/V",
"igmaOgHQe3ScF8+qUgU6as7Wcl/EwCCGvCP01fcxJORHGbvNm84HE1TkkqVp5lW4Z81MoBUPq4aeVO7okIs0DUBSzGIOppP6",
"XrwhfLpwZU+10Rr8v2pcY3YfTQhbvvapPnDiWUb0TtKU89QJrr2f5baDC+eXdXDJPQCiGWGJoSbzlirrHUkj2oAX+K0svU0E",
"WyumwncErXbL4aaSPor4SWbnChxouYB47+l/9QSpQUyDPPnvbbyHJsEhbucR0zXg42ILAd08rEPjgjqZPLMT9KmJ6ARvgINb",
"wBT+Q8GmWoqKSu0C3+HGczeUGj3IB2jUuyR61Zh3UMZChi1NLpYQzoNFBt6HHxxphl/x6c7TI8tzCm0MtFpPs8APJ1agr8mX",
"qSjZdgYZ7AhjENqchnLT931rlRHwG2jHgnuPvDK1wXbc2XSWLvWfcwyopzPInjpgOj3GwQJaPfb7t+M4knftBecjXl7lC7K0",
"KWIccbSi+8Qwa58/KStoKzul/QjkLbHZvBn3TcRkitp76jlKgv91D9yQ1ZpQJxopp84oGi9bsG9BuoBgkCcaKafOKBovW7Bo",
"3Jlb6Bf805HOl16vRrvLM4hl+rqGrwLHBOuPfyijqo3Db8p4700bKDEp1h7vIIQkNQJ/d7a/S9bqPJ7XoohpvJdRaJpxKSBU",
"M7Ba/UThFUDxYzj4RuXxoELUymjdrZRykrT/YPwTyxLSfoDJCBZ4K1q4sOcK3CinGCyT+ltTNK7yjnIVMVOamaSUA/k6z6Mg",
"klaOL/Auyucie4lb3V73nKGhtzz/F8nS0OMFsJdiQlZwQySjfkjgEEleL9jMhpevO034FaEj/moFGd4Rg17bPk3e/bDZfQcf",
"4vq+eseTolhW3T2keHYkzrD3PrSNCfz1gWfLsY/4zD4vYlc25SIEzmXcRJDSORJ+ww/yOBTDF7OUQ/1PoZRzRGMX/IV1mv3F",
"uTGpLH7OM7wyUVPSCv87xVrn5CcWhTfde8DcbdWBR1lNLg2A1VyFUFrhWPiCfOPde8DcbdWBRVlNPOiU+EDtpfV/VJ8qwDI1",
"fW56dTc1IsPvkSai/hKelW1SLbTSk/naJuMFTmaHQjujKFnfrQLxO/aphGVuYOt2SHW9ULEQtAz9mXpfWXKdpSiHqblxTBEZ",
"zOXCYzZ0am2s4p2Mt9v+Fw0SyX1M2DuVZ4UkwkTzBEzA9tDn075eTSJ8iEAbp7ogFffLaXn6/5HwqaOyP4Gmi/lcJsL/QEHG",
"Tek1ceLDfx5NsEWQuMdkY8ilOQHl/v08zUb3huEAiOwWnDyNELGYrCO3znTFgogFxwIhlBFC4YbeBkF0Pv3/i9Csw0pRlTqa",
"UefvHGvL0Lx9Vui8ZHaPshiftN5hRf7F/IW4l5rkzJXROBNHOKXcuIVRV9zTRvJIceuJT8pBzieHPbe6zwFUjbChI2ZlGpMv",
"G4Fqhf0aoYUvCwI6RZ75DPlZeEue/8liM+W0iq+NP5hMimp87qGgJKsKux5/Y7DzW80JK1LYP+9DPbzCGREBGQl9ePAhrcHZ",
"BP3a5zauJmeBSWZs77uw4NEybw5Dj5evgktEaT3Yl68Rq64INyO+QzQoanYrsdQRvqkYl1Xjys1Tpmz63b27wpYRJ3XFcew0",
"yhIKuQYItmHgat79e347iP252oyYMsLvi49AnMH35h6yDdg12BNYiSN95sHGrz244Cu1npzhDNQSSdju/nM/r1/T6VmY+27K",
"tBJ5CcTHSgx2IHd7zayj1PcGfIKMg2xZgfORltjTeh7WBawx2tDDgerx12/PFnLb13WbqCi5vyX5rH5d7augEOSy9pNzZ9NB",
"utOiOZhKnNHEVqhQbAq3SABTNzi0epb35wykzAJmtGFGE8NG+BieISvLSd6EksWRt//6jXzasK2SiMJ7iuYiAsYWMX12niro",
"+ThXNLbxD/GJW/qOLBBWPkxgJ9Xoh9uikfZz7Wg70AJyVTghv3H2b1iS3ZEL3psS738tcFvInvTFSN6gWFtjyvFxJL38Y/Kc",
"vYwy8vdKgccF8Ooyps/x17u2x/eE9uv1yyQbuXIaA4GJkSkZ99mhokGpuxgrTwteHHU7lagbYoGVmHsU+e8zQ6PxtHGeD+Ua",
"bhP6aGfVDcqtGC2ur+XdvEpwRk/kZyY0NF38UazhRIuE/nhSyDOjJCr9LiwUbeaRDFpvk0noBSgCllyzjfwbPDcZZt0O3QHC",
"SYB89fNkmixHss27G7OaYLRcmoQEZUu3Za9E9DuZWly27zlq5/neJ46YNNsuIzaPBPEdwNfOxlBaAT69EFeVvmXH8hgrsAlM",
"nvyKlCMm3Gwi/4K0GyjFrer3ZP6vn8loDOoF8jCIsfjuf+iWNBylSYVKbudYwB7podPw+MjiFhfmBeEYK333ZGWFEcg3WZ8O",
"mANUa9aFUSdsemo3ysuKaSSUDSc6mL1Y5JHvQ1ZgrstmX9wBhGmdxK8ffEEY9YuyUU1vKBRP0b5X7esf36PZpxgZVZ9pxOi/",
"3hyVxiPVYO1afOBjERBpB+jfY/2sJl5R8q6P9jAf52cwI1k80XYg1x0kLRGhS1tUxxpKM+h1FSWFqMZbnf6RhSWJ1bK3XNe8",
"OIMErFZRrRzFzuLU0uvhCv7ZT35WHQwrbvabMYhhL69tpFa/DW/zFijwSv91SzQ/NE34vOh2YzWQfZI6nbnQMUuwzsq3saGo",
"Sd7NunB52Scy8aS2tKoFovcSe6V9NTipk4lR1uwie83l3bzs0nsSHpnTWi00E8bQGx9n18QforCdku6mCCJYqdvx68Tzv/uT",
"py70MfWu9ejMqMpq9J68LYB1hjhIvOpde8DcbdWBR1lNKa/F55icai5lK8JOfox6ZFGQ6BgEybWf/SQ1+/cQs1ZgDWoDYSKC",
"eS+zTmZJ+fTpDnTlTlHc+1gr49IqrGpenWQnvCm1UiF+pwadTl1ubNFVA+X/3urYBudiRbvo3t/9zPte1zIVx7vL1n/zD1CI",
"KgK3gYzh6Qmwj6NJmX4eZv/3tKwGWdr/TjlDaCP/F8GisGNz4q4GvPLsSyezjhWCFgxjQVJmNzZAvgJBzz7eTSEcmx2uTVxV",
"FEo++JLzXhZPabfA0m4i2eBgulVErzTETbJWzzc3zUmuwYuBspr2PU7KzIpJvMg6TxW1vGLqQSQdKvWRI3ca1GKdqZ5ZDO27",
"I1UW+Voj6j+giusuR36ochDh/Dq6yYwazySq1oJM6UMVdHjgDzJx7H2gqzmrcMA+uhTOZ8jUMleU/wPUa6tviySa823PK2gx",
"jkAxd4cfPEYvNUQolwfgnZ88tcIB0pInt7Wc8DED2aE0F7mNeA8Uv8C3ZXZgDUmQKI7H/ES+aNws8YoSdw8RIHUVrXCNNVIi",
"V5CYYswXO6NmhT+LvDIuD/7VKN2GbPZnWAUE8p2lR4bTNnVcZeal6esPp2H3YsyKO/mRipE2mRPJ0tWBknjYbCNJA1WSUywM",
"9KUdgwLmu8bGTVazjXJ+O1+uQy5mKF2kTtIu6vr0jB7DJDbWgkzpUwtoeOAPCw2jx7f8DyGe4bFYeWnpG9IFBThl7fjhys8n",
"fKXkEQIM+s07USSKQN0V9N/Lz8r3nwb3ZucoZwOppcWByDEynTN+fPlb7/w4r54kL/nk3KpyQjalPMGxC3WnI2cNGXgYh2ed",
"sXD97OFu4xlbFSYAd6gZzbxrbXbfoxDQWZgnegYF99PlOzaEhIK76OFKTciUWd+uPd5t0BpXkZqO1IKonS+cRVDZRwR8BMo7",
"gN5qCjP0tAWBhGehznoKTNMFrClhgUI9iSQ3laNwV4r3NQi76pqcwx+ohJjm3dc9c6LefkpQwjJn469y52IToTvu/l4IepPi",
"/Lc4/cawNyL0BM/nwDDviaDVOYY3FH01A65HKmxPAdwxnx95PWv2gBbjXy19mxz/8G+2QK6cUxxomZKh5JGHB9QGVunowIa1",
"nEUUr+YNZIoYaGEnGSFcZpC6NeSnp1gEUQMxdbCqHgyr+ypxVtrD9LR8ws64B40BLGB3NcCjLVlsggGKUMssrh/LWUDcOYZQ",
"WqXdFDVCgbE13HyTwWrzcY3PVCqi+6OkwTChqiRtxfQkqKtR9zay2zbTUoWAC9z09AGsB9tbEJHF0suAkUrudIVUbzC3vZVE",
"D5PvShW8kl1qncSPrMPiMmhG1oznIhRJB1H6UfEivKq3TXhnBHjVbAkkruP6/HvA7MdlDm0xvkwN7DN2QF+HGz2yzZjBu6+U",
"p/DlXMmyr9DkvUa0xYPOFueGoNwFu8Jw3+VPMdc5NtejTkFG/n81Z9BZo51TYaekxubMicNqrniIMT6E7GZoHyq6in/tyPIG",
"wkLEAbOqy+4eho2R0cQ8MXznfPOKMCclk8A0RtTUWUAMHkXb5xsUmBKvMjXweaNnk4gHv0B1egJSIJQz+vOmzIHjCnMcO/1g",
"shjvIStKjUB+gNhk2mF7vxbreQiamvPBO1EncF74THPbSEsW2TGtUfxDvBnN9JVW43/vHncq6ui2XrxpAQ3bNkb3K31Guslj",
"EMqOnWCuXUaP0orwlUWvHVrmyPzEl+zQ0SVrRVjExDnMQtrNW3jUZHSMarPNRt5yG3YBp8uVtqMXXJlBQS+3+eVurz1I5nae",
"/M/GOdFhkj6s74h32lrtF6U89njmCOApsoHtnRAM7I5I3q3GI5Rg7Uo+gWMrUEmve+uZkuvO44FlHTmYCLuCJnvdgFuTKO4O",
"prEuTQ9T7N7R8/lO2OvRfTeB3d08DJQptRM3xtJvPgEKzndeehcNTg1dBU1zZqZ6IIk1iWrSkyawDc2VVBiE5AmsPUwYfoE9",
"wn9c7hqGARZImIVMfUQqmlHVTln6WDeCxkkagpvyewe4dSiQzYz4w2KKCMcGlMCIL/Eu3QLbDmlOwpywVEq/AkzKskvL2DHr",
"wZ7HjP/t8tOAfo+Mj08uH1IKK7EjCm+sT9PoSWTr1X+lPDaw0LxqbvDa3WoA+Dsgh64Lu7FwMTC89cORitoBHSLmcr+VKsAH",
"p6eJt1R/PXC9j3qiUJ6k1d9XonK94RJz6aXnfsx9wTsLVZyUHWEEPO0qzGdp6EXYbN7++xWG8OxbXatiJmhgNn6OasgBv/Pg",
"Q605zhG6Ino3+GenMT7BNmgIDVVltFOKboW0r5jrpT0JiZmUZkev4pyN7Bp6GqKTuZr3G4aSDjYXoQCqFhKz98NumLZz8DPm",
"Z61wJiU0lM7OhOLu/r5cZo7xQAIzqi2c8zI5YbueBDpfPpufJi/K/NvORu3OH1vju0b2oJzszAK7iuAqTvTo028n4NsL3m+T",
"o3RBTf/4Py9LejhQEUM0P702wpwGmdKuDN/q+iwf1pIGtCY2WoWXr+937GLvIss8AxkZljc2jkuzr8R+4kN00v7pDemGNsr4",
"uhlMIdwIbkfBXO1S6W0aa4kkz3D6OaUCcUT8e1iNII9FMdc8ojVo/++ADE1OolcFPSHXRA7tIz7yA8K7v2Qw0hJJ++YLfGxz",
"NzlmPFpazxw5Npw65oMf0OzzPPKtpw6JNvFFlk7SHdppuRUMx9TS9QjqUMg2yrMc54u2Jf5r39MnRaQHp2OtG4DfKQo50Y6w",
"Pw5NAYux5j3PKcnijS+oL34FMC2E2gsTX2RSlb/+1BSp0Bc3wB4EDn4RuzhIqsBBKB2mRcl3l68wqmrspy3lnaSWV8iGZyhs",
"73v46uRq4YrrEHpKglSJp3NhH0PCYf3cK4J32fO/dsl0cyMbnv2xZVBbRftxsgz8LXbUZjCAdriw0RHQnbUJBtZdE4xzqjlZ",
"wkIyz89udNmgLsXKWLmeI7W6LpbE7YYwtePlXV3Jf0+2RSwSQA4zIYJmRgdXRX1l9GxIcKKnc6GL1glot5ym4G73fJQdx8Wr",
"tSvb5jW3cghGWef150VM3hcXNd67iqt0hlPXWhFpqiq1ma2cC9hdcHyjTlCQKg2alkbKQxJr6xqJlmuIUIunuGwZbD8XD9Eg",
"5qFdDfAgzyrs24c0iLMT9DpT7zbOWo7KPoLetRtZEZtAQBkjeSbGpgNae4kTKrSikzGG7nl7kRllKODeCg9tMw/hrjkK4aWZ",
"Rxtm0fCav/nXmSS9ySKJ3oAcn3IcQO2kfdi0Fy6a5fvEoVIvPyOOis7k+DKcbMGOHieOz6Sb28hQI2SNkCie0jLXdtlksbRB",
"UvnJBX1AvGoP5dZAuui0TPB2TVLeVH8P1QkzRM95/VcRDWpBM3b9fUb7CpRUuxkSQMorWulRhwpmR7HsXNwaGplEUvR45JQC",
"WIxSEjJQIw6daEdzPs80dg2I2lRQ7wH2Z+3MwGdL9rpnkl58AtcuYB/TOWkRE2ZsQ6YIZTUVlAx/67iitUSrG7DUSCsTH/Op",
"AnYsNl6P3CBCo62pEooXOfk2ndTcI/Jc54PXmvhlvR2Jk/aaHGXdV4LnEGcNrCs6/CdX/7VN70oyKRf4gxhK8lQGN1MLfLJJ",
"kIEzEcn25WV2qVGTR/Xu3t9yFitARrpiFAOk1Bk/M4jahcN1jtDOaPK31CBnezrEG+3aTuMbBC+N8Q6kkfsT8BMKLGiJ1J93",
"I0GgvM0qHv3oRENdZU1Xk3BnzHgehm4ixLdOtjeh5rLcFC0t5oiHCznWZWIuoRnlzaHgXnZJdYF9Wp8MA2AdoHfw2dWpUT1g",
"OWmILGdKwFsU9zKe/26MGSFx6rxHFl1wPOOKPfaD6IuCfwRBMBJwMcO7dI8+UjcHlh7M6RFi3A/y5nctlnadr0tBb3+DvfH6",
"y8SvWATrQCUeucd726XaSjtmSJYWfTsTHV2A+M7T8rfoqvm6wD7UWDOLdjozFxt1d49IDJmDylgHhM8gpnRjUUslWs2mjscv",
"cg9kNcJ+JOZs2ECShk7eKzWG/dO08ezm+jQ3jdALPhAIAkuEGcpZCalrTx2eLvlZiSUBFqVR0FBaWw4q91zuR+dA69zzUEm9",
"uACw72vcKr9YLBXnr/VojowdkCErADHeozHSHjCrPOZVNBwC7DBdoL5RbLYP6EsjBEfUqLIppjw31vA3lRZB4Qplgr/mLu2x",
"PKXFQOL2KTgBZAvsDpEi5kzunoN2pacGuCas8kORJgR7HjbmA8dbpzKUn9H/kYu35F5dlOKHec8WG8AjuEGy656AEobuYKKz",
"jJzF9EqgswF5pdZ2fqi2O/NwQs2/LXx8hn/69AKNQoVet/jgmeG3h2O69xUUxyTk4LsIlWbfKyLyFbquWtB46bgAIKjZ4cd9",
"cojtqbFJPu0ehaTJe/IOv4tsmbrGfONe2gQPJVeDlIr7Q6AIff9UcpP2D7fmhw0FLyW4AmRiiydolcnuIvRzRVn6GsAys27X",
"Ed57PB/d4gTuunY4Z0awC3vqRSdbUHwAPkm2qod/817mdaMxdYdeyv2aojxhM0y53NUsw4VZSRpYYEP0mAJdq7Xj/tsqSpoU",
"TXZxq1CTrDzo090s4+g09Bbny2ZpR9JU4q2Ll1kMqjmmpj+YEksyi0ilind4J0A5ya81K5U12rU8iHMxiAxo2bwUT7PSue0d",
"vJsWP+kgpiA0TRZx2w9QSeipteTKfLMmuzzawpkKH6aNsu6rZh7V6wH2Pu1YlTRHbw3jc3dZcimOY+xQMJGLOwP73SrCnuRq",
"aKGqxbGv5RnrCMGtoVVKdRPQHaoQSfBd+7jX97J6BYfYZYNlfE9akvMqQ3pq7t/GQdPsNt0fNN7DBN+xUmhiBqr3f8Z46LIx",
"w6055TimOAQ0GyPnl+enO982PKTuTGm7MJ/iRvzwUW3O4lq0RVQ9F4T70A3AXhOH6BY+fNlBQQU/bg7FstN4dYkIBHWJZCAZ",
"ykezP+wMS4KF9WgrfubxobSa9f63T0IHSsOR21t01dlv5bszjglS6uJky9iVkt1VHyocbviHwmcSq7eC4dCkbUEWkOyWYXnX",
"WZGyLaDbjQvOgpl4igHOSarX+EOXKNI0VwYn4eaeKItKrsKWWq8ylkKqCwAAM3AGO6k3b/bUcdjLbytsjg9Au7bTKeMwC6G9",
"1shYK5azR95kCja28IExeynY3sVGAc3EK+gDVx5AeNpEl/5pbPZHa+KXdLX0tRirLKVYWZBHnaYm/DgxQkfa9yNeMxufZjSh",
"4Lpmc4yEakiQXmQtJzjNyFV2N35nSvlHiupCej/JE+IsigOfQ+gT6wopjTjugZRN8lzdona5EOk4imTRQYG+NTMAQd2PQP/t",
"GK6lZx6+b2RAC70XTYoJscsEnNUC50kRLfE2a+RtvQ2tZiUWfLGIpYnkTrrEDbVQWnDDXryfnCBs7ncwbX+BEvdDraGSpIaX",
"aZNtEKUraHE54aJ+8ndPMdRuN4FMTKlCDDe6luGmem1/fiZ12pKMdKmJ6AToHptT7tLCXrRr1HjH0WvUxUnmAsyh6tzCaeUA",
"nPpN6yqziaNvDR2eHgdYU/HxoRptVuHbYtSr9X9KTnS3Iu+oUvM/ZrlipK23UJgGNgrtMwe8sUJ1QdGW/el5c5NGZMFs+hgC",
"TFY2xe6FwbkCYAJ0I5+A3YTcJ6mLe00ATAPF5rQnb5RzZFNIcB5hxT7HhK2gejk+YN4AKvk21LI+PzqosSV9bAWEanu3m59c",
"4GGq6aAkHpOExiQKBq+FKvfk7XZFI9NlNNMrnGbj0jEh8r41QQ6bJIXMyqx1K2g0/fGM2+YV8dbRhqpcnx12wu7aDQFXHxMC",
"YNH0QHzQnnVaniLgvnJyaUIaJmDOfH0pRZRb3gVTdfwfFLv8omXVDeTYZHq/WPeaiW83qGTO95iDz8NmiLPcEq8tcmhqXMbK",
"ult4v5VowqJMRPA+UkNRA5FxqQQw1B+HYFKbmPFtkE1zcDEygI8r4/xz3ouGYI5jd+GGBlb0sllktJIaPzv7jSj7L+AYTo7y",
"Re6NPHmi0oInAPyfg2nyVwm74rL0M9tEHwcGXrRfDkROYCkj3onuuQGxQoBP8jDC1w5t8677IPUtSXvg4MOYZsRzrlr7K2gI",
"Dcf55Z59GsD025Ub7bQ6RE6FiMtpZznJAFmf8HGX820PmICYoxMjo6TfT5b267dhs0h93QQVsFwh1kZTnjveue1dLrND6Fv5",
"m0jrm63KyHkzPRiTDYo+9vPIq0wl3X/+CLM1IVYxr2hcQ7wZzdS6l2UuIGtbEVu/EQ5663+xu5/c4bFOCpfpGbH788fyz4fs",
"3kMa/tF2G68fD8Y50WGSPqzviHfaWV815MtESP9b3jeWux2TBhOTk6RSdaMckYNMi+JVxiNDeU5SfpGlO1R4K3o4sO8q2tDs",
"9DxFvlotZeyjJ+6zYttgIr/7ddIkMAVSCxitxKeKE+oVpWwpuLmCzoqCU85lhDG6AvFrYjW+8fv99bemvI8wNRD1wLW5kdws",
"gy8tOoCDQNYrYDkGmSTDH5Bpvb5MvtX1iAuxZFYQnbf0Ba6BXfLBZ4xpCDJfHSSOvLgJTh8I4f1ul893aeFjRuPj+SEERTEj",
"naxUkypEen0JEMd8TuB2PiqbC3BOOHwfW+s1C6ZjN9fmbWheuGFUDsCb2jOB5ltl8gpybxkdMKZTHIoNKBLn+WtquiQyfTdp",
"LgWoETC2xZpvEcP1rrgA/NE98KIO3iGlhksSlkNtWu0cYwWDvoIfnIHVaG1oeduJ4aX8dTee/A48SBKVuhKUj1FaFGxOZE7u",
"io21O5AnRPyybt/KjZxj/4OKCuywoeAIKxGkKXx62f2ZF9z2kdRaQHyVcPBgcEC7ttMp4zAL3psfW5sGWlW/KfCQIyk3vjEW",
"DwhlJbCWcenKrM3NL48i2IQPv4nJXVQjwJvbA8aCIjJxb/wgQd3+1kmd/8erViMqIEu4vK57ji96paakXNiaJf7sTpKcSc/6",
"RajKaqhxAu0GdbMcx5yDJFmqfgS3/Zr2xYoZC36wWIJJEEJ+v02izCO0OOFBnvPjomctFvtGghlfWYbd/DSAH+U9+QBOySIu",
"xG4Ezpc2wGcOWvhpCk4SCTxvtbeuVj/Pg3o8DmUnE+9LoKYuLMaK82dwPCzJzlvjjlnLfGi/IxXKqTHPKLCyTasMUrINLUgb",
"pw+Cwl5hv3t8JcTXwtluE0gpJVHYeDJyy/NaO/cR4WBTAJbCd5aYO+91a5uPfwWb7s/HZeidZkZwbJitV/ksNCsNM9adgAhD",
"nUbAG3qcgah/LDXVUhflR1AcDpeKqYje2gwK0/4zZsKXd8MxssfghSkzI4GuIinFAarHfPcPHkHiiRbFp4MHZQArYvnetqhp",
"40cHPlaXwfmoxRjBGnFY8RsuYg2yqWfFU2ydzkEAHDo0Fac48sDN4M4S5rY/ULxEaY60J2HQpYbMthEFbXLtT1F+8tbP5TWv",
"Pjglc+DBznYXOEW7AjLNdiE5vedePVOMN+tPyD37T3PHlvTrrrY2CAutD9IsThmpDhCVY46Ut/9ECPO+B7s2CLjPGgKMYD5j",
"kNpdKeLTs/gndkOhti7mRAFAyRPlhHFKAH5Gq4Cbp4roPl1SDnMq5rtBvPxrxsRPvvHOc1TDCxqM1dt08Bk8VuJ3CqohjTYx",
"TIEcX/H21DGpjgB0lum6O5PVdLOSauuFCgj9EbxqypexIhL9lNu+R2LfkbQDTM4EFaY5skJ42/7IYEP9UrrFHu590695gcJP",
"/jzQOpHnp4Y2rzIGOFMuq5jPUnvYR19i2c+vAEx2n4WJ0gQ+VOBpd5Yix39AzAg1hz7LZHK1giP5rnmW7mHJihjrp7LGyybs",
"/N+IElRNGHKhwOhc/7HH1mRHQBWWD5zh5FNeMOWttjApjEaafCi1kTKa4TEYGFQySQGFTsHcwcaATwj2xg9TdYFoj/3k2rCt",
"G7dgw5XbjYYJk1zXyDg7BJGkyopwjqr6ITd/W0DIyGGQauETg3I7iP55pdKHGUGoBO/MSo9KcqBE7YlALBnZIGlmCNSnigLK",
"wJnUzYNsgixTZsWbCZ4cK9W2QJ1Ng5Q9LkvpmChw3jJ37Q6blNPPzPVqQqCQorSA5bEm5g0iX/ghyuYnwl4/nbNCAAHxiLJH",
"j0GmUoQz4ahycAJMTNXIWz92DsT6VZUIYHZfWo0avn1VtOzFESm5TZTMzNqBv9Ix3NuGAYi/ptukyTcwlDKBXBxhOBWoG2KG",
"NZh7FPnVs0Oj8bRxng/lGm4T+mhn1c2eJCcJJtdOgttTm0qa0aFt3bFNOg9yngXeJ8odMOInU8ZjALoljJnA4C6l8oDmgOkM",
"PYgsEjo35+7XKc1K5DYm5ClJG0TXNhLcVJV2OvnHxcph8RHnUlA6k8+OLu5Nlaxyju4rpLNNBSjthE9qUIk2ThjLQ3kWRG3c",
"CIrhgd8TLvEdhot+86fFVHdb50ocKsAbp7hpS9TUxBt12qoN7mfknXU58dsah6xXYTKoyqN9GkXAm6s0xOrMkcvcAT2/dMvR",
"+DRjoVd9miyVNr8ojz6bfWFnfR7m/f4agbEk0wS/5+NbWXQQD2ghLKuJgvdmg8Bg63IKiUq53ihvFLU56T3dTL33GmknKjNS",
"lmssGVg38NvVdEUevVnPlrJKJ70XuROEAffpV1njn+cu8+z42VfJmUb/b2qaDoN1JDvXTMcFrlns0rfnl6ZfcdE0buc9553r",
"vAClzTdScgyQbXiLWK1xmdkQpE+Alm+uKHWvlDU8aobAgmYyhADnGcLwFmtCaL1Y5JHvQ1ZgrstmXzCJFA2PXC0esF0Ei3Yh",
"rB2Zo5NbYO1KPoFjK1BJr3s00e9eXCsDGiYayRT1wNB5U3tuCjV5E+LAF0bXWdcFfrsVlqAbAAapAyg1RmkklU3kcQSXiUUu",
"aqHW9WYf1Z2ev/Ainx1pxV99qkiQJ8u9qL5frXW7J368VQUOwvUnxozqt20ihTo9H4gCBbMClA9+2vYVVMcj5RGBoxy5HWDG",
"zik8oENaaMBrfuOL4z5+gv1rxmnbYIHW3eXdUBIPo7J/FkSHIbvUp5wTB7EYK2jrLMthJLn35z7yt+PF15niUQ8TZ/A+EgpN",
"ButKMJvw5Ao7RNu9Sg4UC/AVy3UOjhpifgUiM4vG/FcAtacFSQeMxh+WwE4zTX2VLtAbOrJDQLx2ETNXO2/5B1H8jotcSBwT",
"i6M8g89RXtkUl6zVzuV7HH86zMxCH/2/yGnyVB0JFU16YlNrf6Of4hjC8jmHgvAN92AwAI30wE7ozDpWd0k8GZOsYxJGwl+P",
"2UFVEjNDn0q/MUUCWC5hsOu8qnnpqD9Tf53u1vSCdm0maq4xccubsa9fNnOydfX6lvkwNJr+gmnKx3TUCj4q9hyhm8XA2ePA",
"WZDXVTfQaS7oVhcJMjF/5vgCeogQmsKQcouK4GEA7BfIeWY/8HpfbSI0MJQA3IiDaRPMItPhWuxqJOSUGT7/MmkzYnISs0WB",
"DJzcc5TTJkKhi9Y0uCIPzQCgFIZyST/jzv6Pj2Je++KSqbKtnj1sjAqCCnrdVFT7VHFkPW2hw7BjZTRJYoEhNqRSFV82Bon2",
"U4E8mCeLFNkjfHWySOOPR4koS0uvRgFD4OZVL3L+Qv0X+gGbc3eZ0HJQQqEVebqfvB7FK4ChcSk+pgd1SibOPbi+069q/pjv",
"hYJthc8wlTaCpjbGc4IP+okZoWBxxgoLiU7UrwKC1Y/eVoY0WGq4qn1vdS2ByJxj13eNtrBN/ctkz92tlT7z7l6+OsBeFiUo",
"Qo+o3OQ1NAGZyfY6717B5I6bSXBCuTtxMefT82G4ydw6fbWJPMOKjIm3p/QSR+ayHt6Gyhr0qy4yJlH7/wzj3l1Nh9pa0fs9",
"/fFwPnH3nf+ejueGBOL4GnqpuKkT0d+GJDEehyigDGWH07MEhmgeOU9JL41kzKfOqXme7PonyxRjsPFyKI0aBpbv2H8FwP+l",
"rlYkUnM7VJhJK1NeYLGiphuV3rsgOvnY3VOf9nPv7IZoe56qei2iCf9oCKD+cwAmvqd7teuduh7yUyk6SsF+nvlo4TpusVvC",
"0zkvv0J0mvmyHaoSK+MHqCsLcPk23S7BxoQHo0AWOPzWqiZl6naJxhZrDxWzA2X5v5b93HKRKVZJEnr0J2Q0r/Y5EfG/Rl3G",
"bSssSlCP9A5ocj57CVBBOmMlgKs4zybbTEl80V1i+NcyAgDz1NROZiPb4tWw7Jxlh37JfkaZwK8BB7oRRM+SFy/NGvS+igDN",
"hot/jJK+x+ip0uRQ3VK0ePlZNjqPDrI6mYq8KROsRmq/V6PBGxcnT7ZzwiTY+1xUrtUUrIYS6X3or1W4VncgXUHjTHDZ+ndR",
"rltbQgzOC7Xe+rF8iIGPcPKQXd4ZAOpb5mlUpGGgsFZtegADdpfCflQShK1PIOnYw6poK5EOv8Lv0Tns8TfvwyMBi/Qzti6f",
"LCQ4BSJCNdLQSCtBPQ8sxAp0T+LcilnocmB8Q8zUyaU/CjDE+lIIFpSoEkhCZ90byf/QE6MNcDX3vnrz0ihX8fbup/QjgNR7",
"6Y95jl3oOtN6mA6mp1+i9FxZd/Uzo9CbkrLjgRILXjBpAnaAiSMyG6tr9Bv70yN2e31+wvUraA7woGZFEe/0RTVZPqqepdUT",
"jbWmxuYzcbDLQ+z1d2Gg4/aXdGosxL8HFyt3zsYYJeJhAGKuks+8w+qoHqeiMm8LvwLKFPUxwpsQQ6w2nC+Es42fx3hdNd0a",
"RCEh4+jMCvlqSolOyd3+8ie25V2NwrPrMGze9wRumTQrDWeH2KqOpvuwokxEBva5gVP83R2jiR4P00vK/MU0SZbgQHqANsLj",
"9vBiHxYTNspUC9+ls4jHxyIf64rSDtReD9z9Nu5tGWBcKzsTVOpASETsSn3fvrtBiFH8rcoPaMfUxYPaKgprNpfITySSOvl7",
"xFckUbai1hJEV1UUuAIheuhARqplc0mTcEBOgOaWriLE7mYzLMkLfkbgPSXyv+BKqtKnTZKZF7SUGTgA9T11gfRQfsBJQews",
"JfGYULnq9ArrovCGOFMurA7O6CgTMxR1GnBqerVftaWJ+cxw2JR/O3gPB7IxYTevClt6IviB8Dw39TMMcOEFp4VISY4Vn2A8",
"Gi3dMtxqxdH+QSUhT+gL4ryTLBJAIUtC/A+wBDbfGVGVAwpeOtm51aLI5lYjlk1rIn6BZztQSKt7NJDvadQo3t47ieR6sa9L",
"bzN1itaFTJN4Cwb4uwBXPu3J1XfbWlnWtymvgNzuJRjzu9McN8gfJP+Mt/SDNiEWLZrJd0fs3jZ6EdFPDKGf0S5ujyq38ld6",
"8NNiPt52kGpiWgprQ8f8teF356Fa1WeOURS15STF1MBYF76FRYIUvGfIZpjt5eNLFeUgY9TU69qF2yQMbk389p13XB5xWKWd",
"xwe1fizPBc0zdLSia0UFi6KNFFQo31HvnAQTrW1LXnpsdjDX6N4yuRhm2mICbuBw4jFslsYfhE6fhfLIEvvuSH/ZSntxgpjZ",
"AzIDtSPCvJgrDJQecB2yAQ1fa0FaAAL9Cago/aghXWYRORhiCgHAq9icgpafw7fCnBFtReX+DsAQ6PfOvz2Bu4ng/FKicUw6",
"Tz7UU7g2rsObRUpt2LN7Zzqg9ra/r2d6hhBfRifjRgp6GD2+6rb3pnPdg+v4eks81vGvrACyzUr/1nxKwgSCfGOV/He/jMJV",
"LRXN3+vOvnBFmrrL9hsy6QpywoKBoNIrqJtKlu/+MA9euIHq3sWzu/RvdhFNtjTSGZvGAXHAERgSQVKoaJ25Dh4h5/H10pNo",
"mao1C585C6TwZvRg6bHOrdFylLzokwkvZ65IiBZQg2hlmrbCdXZFSg25qEeK4HI343a/oaaXAoDk5xxExF0BASiB4G2lzTLH",
"1+yQcFLhJ6fgm/1HeGfXr9lHZyLyUFhibSR1aTZ1PXUBjqJzEvBUK3acAfxqCC5e5jQyFF2pluMpSHjrnYTPHgNRVgA44FF+",
"AOewzgt6kthyzBHOp/M6xH2PEE6hTj+TxgPBnrxQxk2zeicuZX8GEafBwDjO1/Q75uIPRGcHQXzofg8shnglu0ieNMOp4PtN",
"n88XlRD42VpApRkMRk3iQjRlKB72QS3njQx75ff13ASbzBgXbNp1/ommdVq/xi2Gw6/sZYqg74XRcW/MgdTFhsk3xLGbDwAW",
"PTPC04/ykibKfSRd0Pm/vs0g3PJ5Rhu9qWnGQc1Auzw+UAc1R+PBsW/1LAsHR3pjDW0zhlcTrHtDMuMs7UirnTXR03aKbUxH",
"EgDbSyre1/seJFWL/HmkS7xvp71pSrIXxxan5mDTwkshorMaWm7d9LBXvEDhbiWpzlKOSFFw/nugMmzUPwLYahyk9cPNc/Ez",
"wuxzvHlcIsFtuBIjsDtUgkTgYEWajfk29p2+RUr7o4Z2iEvkRvG47YRhEbYOnGi6LPsDem1IJEPunkdSDbFz6YqbRTH6s5u9",
"DjSVevzv32htJHNggFrTKUedrsx7QhU4/Br3Ofs2OnUQf/DnOnMhqIchahkOGVxJv6sGCFQoWBsPda2mbrsJM+RgHWWCn4kW",
"49DE2pxNJbUL22fKk906rFQpEenASWp4sLWvwhUYRsCG+0/ZzWEFVRX+SorGcy5hpgq7Wte1Bhe6zuh0jDbyY6cu4EWCzury",
"z0UhVb7AcdgYkNcW7FyFJmxWWSpZulxuz04+LF8yvwtskTuUfRMuYYC9Qh987BlygyYLbN7G8JIdkgotaVP7XUjF7rOIgU8I",
"Ks6U3sJNDRlASfwJAZrKouQNh5l7sw2EYnHFtAJHmpJAJkv+jvSDdTGJJXTolYt1eJtVXmxSGaEXc3eydZIATcOGw01Y2oV5",
"gEVQquINmK2naiWA12mlMwmpd5oTvgUmJELKPMaxuEH3JiU8fNsczYPQLxQsRjaLnCRLUKPxw3s8JDkqkuTucxmmA/NEtwx1",
"q3B3EWIBGtT4sd9ACugC6oejpK3tWfYkhWyNkqXJ7pqVS+QoSAseNCyG+kYSIr/LxwfM0JVafl0cBFb+vlkb2MM2SPTWzj8d",
"vI7w3R491VtXy0Hf3ZRyVFJdOGtIHcY23dnPjqw+XLsRnVaIivEhTTeCQHTYq0xF4wD4ugKH+DGzDn8rYXEL6ZV5fk8l7q+h",
"mSfCw7GPUeTe5+TtaQcly3MWlfdGAmTQY6cHXwDk5Ze4zNh18acHFFEifqmF0Ddz/d5iJzu/9811L2jW8CqsyQaeWM2FpOIe",
"/Gh1g2bk3Ru9ffa5+InFC0Qmnvn6wiPXpIxnggzysjTNYpiz03bO8neYKYIEuUlOu2JOelAQ65p+WijQMbMSFj3ZK5RABnP5",
"jwU6goyzBe+zwLp7Ey3IpXyn/XjmDRY7oYcoPbMPG/43kl0I+H63eEAQ4z/pr+/cD+N2VMCTM6U+Gport+0maUKaCt/Gotpt",
"PRsHfrzNYtYh6NPiqaOdp7FHgpWYNPFA/Ydv1y5B6x5xJFLreOVsHHSMVKF252DCiDZD8xPPBhMsHwxgQ+ZQ8d0Z1EGdYowL",
"A3edRkD+Qee6NaorX7RgCTDHTrGUhlZ1OQ6P1o0nP3GgiWt23QdxP6uyFF/U1A8wl+AZYcNpFNVh5BXGOTZUjlJ8maU71ngr",
"Wriw5woCSa6cPEW+Wi1l7KMn7rNi22Aiv/t10iQwBVILGK3Ep4oT6hWlbCm4uYLOioJW9DE2oYNXuXv/pXa8bOiunGA3kNLu",
"Kr4xeutEUD6NKE5UYNQUvtNCHyjGtoJqYloKa0PH/LXhV+ehWtVnjlEUteUkxdTAWBe+hV2CFLxnwbEI0xJZ08jf24zyb/y8",
"aMikxXKhkakEqqJjj/VDhypXQk3tCf9wQ5xjyuwwlpiZY9mc3YWYAL3C8AeXmzpu4k7juh8OXHTu5YfruckZg+ieFcODVjzt",
"CBLfFO37VuIDtR3ULUs00E0Wf60XHnBUyg1xTgH+iKqtvZGE0bI0+nCFHZc4x3rG85rkPjk+vALU7Sy9piC2cVOKfy/Dsvbg",
"jU4DgbT7NDT9cL+anmy5PQDog/Vr47w7rLRCfr5D8JBed8aUJN/qntaXOnpLTdpY7ZFayPGdSEEAi8qQsedOz7lw6H74xgdN",
"E1t38A9R3mYwf/SHid3WO7XcsepgWJ9dHVADqNLtS2i4VqLBfTAGjZf1y2Pm2ho6drWW9/BWGWr6rjGvnUBDHWWmD57IbaS1",
"Knh1O5NwyvbjLlbUaYJzwZscOzCTBl9e0Y8AummGJiTQBUUzkNE7/b47za1ENEcqlj0wF27CC6K65oTxRrlGzcUcVUyBvPoq",
"czEVdbmUXhe2sFYsVCW2uqMQXjxvpdkwc0BaQch+hbHVbgKVcY7LnnUQFa+dNUUKnzhJP766a9AGcGNVrWo5Xe81fTW+TPE3",
"/hGdLj1GwZJyTITJyuK9EnPEMe91ioxSLRDKRszRNsXAwZOurT4G5JCR230GbOOLXpWw3ZZlX1/3hH5uBeLOFJDhaL2l00V8",
"w5wwtdj9xFQAqjaveZ5ezi0q0FrGzkLQW2x73w+00SlHaYmtnPJyoHIT9WoRktaYqnppFU4iPk7GjvOWp+NCU+Abx2A12tYI",
"NG6Z8f4X4S9zFnf1uXK8ehRFgw+Gn6DkEhH8QfcwYemB6ATPcRaifDFiR9YrFzDyxgcaLOSYcTZM6ouveLFi3m04hMHPulXt",
"uufgaixP3LUEM1pd1ff9PjhG76h3CNoFE9uwchM8vDuw3BpKfZmEgOAOIr76XoKC9xDwex7k6cvxWdWtq2NpT6qwa/Affa2I",
"TZd/jAS5A3iUztiAN4ggfpRo+N9WuKb7v8pZ7DD3y/YQhE84O+U/ya7wYxZXcJwCd8uLlXpi+5exvZwqqUTMOzDd+nduLONB",
"hSxIW8YTAsZxp1JzaQ92v3TtrfNwexZHriLDvqSI/EkcfhzaAQVvzXM14O8WkqsrfUuHM5p4Ox3GVqjRnHkLq9Ebu2lLuA2c",
"CZRDLDnAgtuGwFv/ccKNP4PikccwPthwns0ay9kGo1BavqDQ5+eT98xc65kzEJHwduH/ubzxWfL9GaTBzgDx2sidcMH8bhaH",
"vvZjuuHNhfOAdvAaFT8N/CtqLoq+zP2J/xAyhi8Gq4+DsVtYLraEpgec2TQa1xv6Uwu0PXA43L/PFP/NChYFSdADu1V1a/NJ",
"/FTCc+K65XY3RXpsZXnOBDPuBJ+tI9/7MrBBA/xDMPB1TZSNsJj0wSx61CDyjs/zCnZRO2PyrpwUYncpAh6bkcYJpsgF86PU",
"J5Ar+pVZMsLyUmahBkqjEE/b1/jpzTP+kBV4rbBBgtJjaOaBMrlu+hUYyU4B/mJ8v+/uw2ntUcgMI1v5w+4a/fMNQ6F0saQ/",
"31VICgR/Ony5t+AMojpIZPYzGBVRo1kFPxLzPsGOwuB3D0umsv3RjvpQphlGdklmJRVhSUxYIXJ2mFUgGzKzos7+CzSEv8JV",
"IscFJz0z2+B1wpkjlJMPWesoVviRIKEzVjmpBpaogwnc9884ZVlzki2KVLCWbOaeCcuWpN2Wn7jqSzBdREyEGfDpIzJAv4vQ",
"dmeoWtBMEojnk08JtQ6bQS/Lx1qlWfUahXEnTJZstNkaI51ez3Xl39wGMLDMfhyof1Viaufu7vEukdiu9cZjzwXzhplBMy6w",
"kDIdDvKe9GAS0ee74mBD4ZVxZI15qBnBZ019LGe4to+aCItSSX1KxUmu3FoaOeDAmR/uZFYLfP4GiK8a3Pe50C1QKAH4TxPB",
"0dD8mhxhhNesJJOwxwejUFq+oMj6DZUDZ6bomNuSTVVhAyRrhkIQ3Q0s99otVzDOiRGo2/doq/h3l9jc7izrtaxbAxF7HIBI",
"CFMgSPc5AsF8w5Hy/tQyFwku2wXX7SYAkopilZ7Se5+IIpHKAoNoD1MrYiBx7RDN13FSP1WW++imY7ktckOeYv28qZ92q3Ta",
"ejQ3jdALPhAIAkuEGcpZCalrTx2eLvlZiSUBFqVR0FBaWw4q91zuR+dA69zzUEm9uACw72vcKr9YLBXnr/Vojo005CcxX0aQ",
"e5TuxEQ+4Y67LS1f11LJU9eDO8OsUBkklVQ4FBRtusLncKvw8zYL8wMZEFeWl3l7AKTntWpkiyfNdL/3f8fQvV0uqwWw6Nwf",
"Xf2JfMM4lnl9IDNazmU/ZgnBO8QQpgpmphkIM/EvkD0UXvAuHA0rivOpJIePfPNGYcSZIQRJ8YPgl/C7d6eC2Thx6YJY38Ym",
"DGoy3JtM0e0uqBWMMIC0xOzfLSP3prpvWUvVhURMD1nrU94HAckvq1YroSSBd2H5vv/QAi44+QgS61cZIwt9G40ZfUe5hjua",
"fMeUvOumwBuF7jnlmUWjBfQoVEAVczc9BCTNJL4VQm3OW+f0PPwmPcqx8o2wWR5M5vhyPopDi9ge3v5/TCLZrP1fjaB1E6Jl",
"wJUvuI2lsvUdC5x5TR04xLS3zQlGyn1TdQDIue0Y/15VyCtaQ9blY8ayVZIhsQeZSwfa82FG/fYzualZWc0VzhJ2AkBlZHS4",
"QLRyW+711LQcyl+hgsZxvgP/Zb6tigb5xOg9VCOoUk4YKkmvyZ7lKwhgCtVg2Y6iYIZnyo6bf8oFWZ2cQFgQhRC1TcpWNCiy",
"ZrV1AKF9UDxQX0aNP7E7u95z/XfATwU01yeaj54oWdKnjemBtayJc/imNix88IIccaP8iR2ws+2aNbH8wY4T6xEVn7dbCUbh",
"0RWszedpVTsQiEp0Av4q/1h8tXy51IMnvAtbOzpPG73JCSXNVqZg/Del+CW7VMqm5L91DKv3cJzPCpwgE0r3KHOISxR4p4a5",
"gWBSyg5kKuXtrHDbKj7jPzW2AupPuj1P5nm6vY2pp/7KTDhVxpjD7fZu/3WE/Yu5PXJDoNazS1veQx3mbTJ+3wqPqJLnS8zl",
"DmQ+KBUxXRbTmLDVihL/2kiYOUxkYfPXbd0rwxdJGtHhqAUd/2kawccMOBCxpduLuOiRrX/ZnYpnnqNBB36/H9RNRhZ+zf+0",
"LGoi39DHQjhxVlQipo+uPVJrj/zIbYQelw1u53Ccla71zBHSlayGZXZh85g96b9L1p1YKBG8ceyHPD+tfvJS55HQKHU7eVOS",
"/8n7tVelBpIrkTkvSMuNmmGG9ELtf1zZDQA1TEnB3MZ/WIAJbhvyneUUfUDpbED/YbsFf1MZGyEtjwm7/mCEWwWyDpOEW6Wt",
"32kJP6WHf8zw2e+mnE/9BxQFoTV1nGOmC4Sb57qrUSJR9Oc4zkXYUFqd5JmR/EQbma4pZBo8XKWZMgiOkjKNSUCF/L1iCkdr",
"QuEJ+AakNv7T4hLhawDqmeba4Ux1WT4Z6ek9F8ZVOgOVIsB/fHZZ2VsOhHm/DVXggNAKP8bsNlW1m1wBpyH99ndjXBR44EFl",
"PovWi51onWr9akKynz0iExlHaMVmXFhsQqMFY8dpJvqtFCIyzvGPPvMUvPJE9akXVRFzJOd7tFiL4XmbJU6y28/Cfhs9Sf+0",
"ssCyeDROQqdcFnVGpqTus/Lrdk1TqaH1ITYJkidogfXIreP1ILQ3YFRyyDSsJujNW2ECTucg/5iDT7c3hu9VCq9Ww5taulXe",
"+I28gY5cEZ6V6TsB3t3Ukf2arEhMNfxAqkYvz+qr9UjaEU3MovFZ0HO25JluY/M68mtC1/nKaIJzbibiK5zXMW5juTu9EHET",
"asORpmYHTRVtoPyewF8mAvzyS5OOikkSt+mP66Qc9L8q+oAhtxYDCSOHojx1otWUAWJryECLwoBzlWiuO0VbnZkmPkBBNjvQ",
"0Nq56xRe0Ye5YLBgAeGRVcQj47G1Fs6yGROrsY9wNCvY5IYU7DNPg7L/aKT21MbmjtqcrLA40TwyaSecYD68C6LeTZ3Id/R2",
"t7K21hX+qf3pzj42tkwS5lcJuWICmXvPWPy1fF4RcZp7BbW1TXH3zA2FS9F4q+JNWumpsA4lboCXFueJ4xo7tPtou86H4UZc",
"0S/Ygm01QucTcjqSQfejsSRg0yAtun9U7kxsq23mO5apNQs5OBaGFdzMc7pNgS39UzygJFBChFOx+gYgMr/qXC715QcYMvK4",
"6NoiYhHhgRKuIizkpLBpVMuCZb9gLNkw8BugKegAcbN1fwNF+M8z3QgQNGF5Yf2/y/yDkLM8qL4W6WZZhqrM0u769dtImY4A",
"58n6Egg5zpx734zsWiqnkMGFgOr6rpBbLY2ZpQ4QEO1KvIFjC9BJp1s00+drpeyVnj05VcgmciioCm9Pucp5tJGzWY00HLNV",
"+HTpoDNoniXFD2p6DQ+8bPtBGwS/g9QZcMW7mJ6QPdPSg4KFlEEjUt/5OC0ACjO6JqmuPYnlJq+UIMpxB5qjTuP16JHMwv+x",
"VPewNWGVanXc0rfWoDLFa0aSoaEwezzH6UgtpZJeFGTIkjhBMfw6P/iuw6yrDosdemRPe9z/70owZI1QZbLqKhHwGyiefQLb",
"3xgygTylDLSE7WYgkpXsCGhu+tW1R/CXyEILIn4jrGWZVgmfippAmCccg1Jy6GzSYyleLuMF2efDpvBqeIaS7PQZphc8Dgik",
"NSz0InF/+SeacF2ujXLy4+66RIx9FzPOWqd4WbTUs9g81FQ+gkedc/mmAXCFmbvJDQIUX/pHMjtILtHQ/0CeJ4GlPmr2F5HU",
"AJVwPa92gn22mcMuapesBAB7KThWEJ3qYakF0tlb/gcVWgVD7xitjjJa2VOunYHs2pXm7p15gbMifI2LojCBJfNkAu1IA89H",
"kJk477UNSXhsx6b9HcK5xKJ+agXbGURemYXU0mRCxuaPWsTZ8QgEZuy5Efdr47wbrLQNNkLG/KVmsbOmIZDMJFKq9M16hWDt",
"GG6Y3OU0X2kH2Tqot0nFzikXutfTmNxp+Of7spfgHqdZt8QD6Fhbsf0LHM4e3nu7tnxjDZkZJBW4YdKog2z4H8z0m1WuFEzw",
"9vlALvjzgxYdczys/PLBHFGj6HAw5iP12jXbZpVwz2nW8doCGk3w3cMV1HKDHluAFVmDSp1tbmXKqLXDKKUTdy/6HQPoTlA0",
"aZUkPqefXmuY2A6CnZ8kivE5tKP0m3atWvCJbCIaiyOtk/AtQEakYhXrtrxGu/q0XVRzULvdgpIL2VzbtHqNs5cCy14emfDz",
"oVfgRA1hQK/IPS9DjGAsdFxDNCy0I+bUsUqkuRQdlIrD81irSZ0hJt0YQUHy+SQC8TmBqt9JlKtboLobiSTF+HktEX+6eU4J",
"wHAlYf65XreM5NHByqO7T0FSYqFZ76EmHFzwgAPMr78TdcIB8XKh+3wk8KxpHCPmKpmmtjAjaRD0ET+rEuvsHGyrz5g5naTj",
"YxpqypmO8fQMNttulUfXL9oIjNgmGYpRFIh746BYX5oK/8MVxvmK7UiZoXw+xGEYwvnYZSxlezGtTWYkkZl0ePtBIqHogsXU",
"Fypt1Ua/nV/SmrQoJxmo+vCiikaH5SsNFoewwp9zTdV/5sCkXI77TiIVj/bIEk3WG8c2HXxqP3BUvUkUNb+fgdeKLELdor3S",
"yBHv8RZkb3BQ2C/H7i3L4ZfliC1IoEIqHwkXQvWlCsZ2lE3CYt1BejSRxxXvN/zBEN6dOhOryEmzTmz85eLUWjFyPEHlDhwK",
"BB0u6YNHilXGssmCZpozohT32lhocsWdN4Z7unneby1SbSto7MTG5IONG1QWjPsVA4XoZgoZ3rRzSCRAdQc9W6vLuGZpt7ZN",
"9+K6XwWlT33HM0Acdr6wwm7mZjRW6gebHQWog530oozSBuOJsuW684VZXXtxedt1BWo1QOzCi3hMzyRNQPpBGDAuGb1mQP2T",
"yn1jbO7NovBj12idWz2qugM8tp7jTZ4ZhcuK2he7B9v1s1zncK3nKbzN7+OFhEyzP4U7Y7BGhYK4foNCJhEsrTfaoHMWUdEu",
"Icgv/dIj18pAl7pM+Az3gCrB+0HJyPUxy1Fmca/Q7YfX2JBfbrWiKGwNx78347R7hoApeMzvFQPgYURETHKyFyGZ0fGNj4lm",
"5h0Qz1/dj7YoVg7B92/Dy8i5uMRSnUi0I5+slcjPmMG7QyqYkl8pA5OVrnfiEIX7PusZMm0zIaZSGC5B0E53+viSWqj23bqI",
"bYC/YvIgBRG6ikax/FHdUVeDGigpcFOBaGOBhiLudsGVcsL7iwe4cjvl57tyTjuGhG4Fc68+3/n6ACDW7MON2X66lsG2CLYR",
"Le/WgoS7z+HXoio8SX+2cx0kctKkP2fJCE78TpKhiDoVyLuC+Q4jKQjKQ/k1wYVWjYD5eyRC0IByxXhFKPQC7kFi5N9+ey4E",
"AWV7MVOiqLscFl99LcSiRdRtXi1/CMf8s/YyXBseeMoOztd1aV7qG6NITi41Wis5cPrXJNVRvVWyn6JS/QqlMwLf2q37fvNq",
"cHWV9lV2S1WREFshkq5CspIslQnkSJVpRcuLU9rStkYFIJAZppZLtj9lOQU31ykED/F79FmZ1Z63R67rpipn+J8u6eUCTtZY",
"j5NFaJ1MpCjWVS0y3GrF0f5BJSFP6AsONANIANijSo7gE875pSJJpx6EHu9pxGq/3jwVxiv1YO9SMqFnyNQCg+LAF0bXWdcF",
"frsVodk3mrXdzqcZg0Z2vpwTrEWMGJZIE4pk18OLChe/KX7KoWoiMLdtjgCJabkgrteGNwLsy6KVbTpYoLL4v6U8JwuXxMjS",
"jWphxY0iXsvttO5C/j8unibR5sAWWhGYCMx00vKizkiyLtxRklF4d3sxOp4rSmhaHANcq7R6jbOOuCyVRUlaFq4RVyuxAsg/",
"yD0vQ4xgLlP4gxZX1soiPntsBaOPX2A5PxYLraOWer3Kdabcqwt585v3XVvnPfGW1nRq1CWdyeLoZjmLh8ApmIiRbeMqSJpY",
"chcohfbbUIWpSHYPOZhf/ShiwIx/BQF5tqyDQ68+nm4lNk2Q7UGiE7qddzuGlgoocW0Go6kEsw0vNNi2e/Az5c/eCRLkhFjC",
"HTid8BrtRgVqqf+rH/Mo8ZMm5WpcaZS+5ALojLxMV4DCovbvqc/z9UzDkTpOKYGrVBhKlhvQuoT26F7LEEAb+6NWdXp9tTtC",
"9/pddEOEaYtZQdqoQ177or2SqU5ZVjakw6MEsjOCDgusfsDmcPB/m9dKLBs6akaDk/Zt6rPnWoC42AMLgL8rsCyqrfI7mojq",
"rb2Rh3e7MziehFtccEAjB82URfixuUYvTC4m7auB4bjr0Rzc41OZiXDFxVDziA5DIbrc9DyDjcaID7lCYZvWe+G5u7Vd/Rgr",
"R0og8Z0q0H5mtjv1uYA0/3xaCYeBsjfnL/g3EWkvJK5b/Q4OWTOVTMTGTGrr7GAOaSO+F0XY+wK8AoXGc2nvuGcSIN900Y+4",
"PyxELxBCxXmH2huM8vP1sWLCGaiA1APjjP7iP8z7w/cspnrqZhvatDdPm8ablroCvj7p5P7AVqfzCVj6sm4GlxDWvrC9TeHK",
"C7zkz2CUze4hcYfQc2HHeEoD9UFfLItVewI9v7KNK/Byxctj3b0iYxbww/to5i0L8HPb+y6f0OLvU9uZA9aBa+jy93l4Gd/p",
"eGHJYb5+PzLIrBENKprVmOzfLzCh/2tRvnLqOuQLdkZuT89h3QlzogDJfNNxLwx1jdzpoKjYD/F3nvcbjYpb/85bnTTBMvh8",
"FHcytQ6PMcJzEowDr3Bl6CMHcx/nyG8vaQMJ+2DkpG7K5v3Rftn+MiBJzq2cL/mvPZZ2wGeB8xojgOyltHaj/as/O09hYVBE",
"0kGcSFPfYe3aa/xu0zfRLqU84/+2Oo9A1UgL3oSXE8HXuWQM8bzdWZOJPifbX9e9pTxYCXsbn47hnrhtwytoVqU849s14723",
"+QwgARQYls9rECo0KZTRH4NvZ71ePb3Sc+N/oyokxvRtT+uIi3lFcl9xzTC12VKax+ZlDZxCvyRN5Mp/N643o6bHTlWiiWeC",
"6mKDLQKYqj4Tq1fz0bTAGwegtqP5hxnZE4uOKgn/58rUVc86BvWVsY3E0fDtiI/qWTTft5leEv3+2ed5jTyGY2jmnU5S7+I9",
"+Jw82Xbjmuttq7cWqKv+UFpPgqufH5Sm0ll5/r6DHRGwWkM6ZbW20PsAcQgMsxOuJJfV9L0AnAuwTO7SsrWYISOX9QV+u6he",
"673TZ+BYIYbeTUTtluqzYRDvdvyzoUQLT6g1O68I6dBit45zRaCJU4Qk7bfO/hpSQfKnW95gTlQXoSUOeWgr0UdtzwJe0i+8",
"vCKORf8PMz0J7zxX2cTaPQhyavaXkqg2vocF1XHtvDy2V2bccU/hEJ9J1K2zP0aefpqBIF/ulFQ1Bbqot7oJe2g9y3W4aEy9",
"X8Bzy0WFsXzdj+mG2Jb7BhGm/t8lJ75/x2fcep89OhMZQoy2RbI3iEaKUj5Yisd9c8/TgWWRoSYtRWJsZXRftAT4190XmGl6",
"mKTjjDO2ItpYeVe8sXxWNiyqYMYihtC9GhpO96b96RAoI63/z07ga8AFPqXQuuUqr9dLj54ioRr1/GFr+FJDmnYBGcMBABdp",
"SLO0DlS/stc5uxIw2pL1ZcMlP7Vtclv9D8UPZPKgFmbvdXg8QQ4370CDlTg1yhCsHN3doABfmEpgg7M85h68txb/2Z8rYM3z",
"WLy1uOTJAEg75p1pPHWh/jOxPF4Cwjpsc2Zbb2M0YZSWSPNnobLHEq9XZMTGcluOuSb+0lY7w/DzI/zWsttwRwGzZ57XCaAn",
"NLdGIIhp4O1LErIlO1BoK3s8sO9r3Cq/WCHz9ze0ZerNIwEzFEXfWh6sYW/1iBbsCsLXOP7GK21i+XZTfy33c7MKT0E234T4",
"Rp5sApqDofynlrL7zrIvzXbgBE9nBI+GCPQBliZsT7nursXuPQbt2Rz6dPLE+eIREKN8tj6LSoCehDoCeQsJ3tZjsRnpCBdf",
"5CVoEJSxZ840A2m4JyiTcOi6rAIcTVyjK7S41R7tTOUS6DfCsp35wh4dn84C0Pnc4jFgJt2NDjCY7q6nQChIoLUlY77tjHOj",
"Dg2MrY6VHv0bjHJvvKGqTl99qmZH2kzan5lZY1YxrfNl8jRZ6TYFNi9lKxAODfIboO51O97aPsqvGbDGYI0B5Xoyii72xMbr",
"BbXgsOFx1m26M4S0DD/RzMNJvQeHmbsw+vXFQQGaI2V3VgvKk3FsL88YtrCd35D5uYKv3/VOn4QtmbvfNpm7NfqdwxQCeJP1",
"zJvZtWHiCdhMfSwKO0i2YaZFyEhJaGQG7CM0/tJdTB+Gpqdin+4cIhpWty4wKPnIqBcDfbh3Ci5vEGLieOaMqEEVLmeVw3iq",
"wWNafZ6HS77apAl0ZplcNjMxOzGLEt5tWwuTHVfXBXLBn6ucIKWVUFoncHi0r57+sPtNRtiLZ8xWfbLD0Lm7C/AvnVWOB3rv",
"MxKFQcH9txdXweDw3Y0OMJjurqdAKEigdHfAgRsLQNVvKviKBbb3/CRtRFNilvwrYq7Dry0DeREa4KZ4Z7NxU+WYwRXyaIsL",
"kHCNi8dfXSEqKjb8GJvsOE4lZtEQkbGZ6s/UrB4e55g+dtUrx29t8b4H3Yo8LMY3WVvyq3zx6R+ff4AzcEwe/RuMcm9L1omq",
"GwcQx1r3xoblWge4pC7LvCb/rlKhG2/JlAZcu2qbqpeD+ChhAT6xYc71N7sCZPofGZyc2TmH1LKr9HTyvkwHqo4UPIei7e81",
"w1lEK70LPHrOKAF60CCGiVqWIFJFi3lMcNn/tiV2Ng5kwEKuX9TcCjQpkUciw9lC0xLFA5X0pU4ICKhdT2suQ+yAZIxleRIC",
"/XbEBTAKtf4o6OPYBQ2h4bIkBpCRmuvBMVteM34aI+/Lji76byxeXR3vAGj1ioNqFdKMSBgNmzAw6/xSxn6/Gp0yQOdc/BQN",
"qprBNQ7kZd0Yj6Cz6Dli04mO3NGNgoqYSL40Q78oCLB+R97KN2vfTcZxYuvVAkH1vC/+8FlA8z3Ergt/j4BDZRmSpfM5YrwC",
"vhDknmpZZ0MU9lq4ibOWMbXEUf4NbQRyl+UgpdBP0qXAhT7b26ADlO/VRIgeNq1ZTNqUSPksA0ZVQlvHs2rxkswFPLSyF1r8",
"aNDAzQCA8yHum8NnqDT6+3adYCG9MNc0QpeiIQ86/sEEXNnuRlKi8ndVRlL+qVTSkFydQvUyw3BFhI+WDgYUVPnKK3KaDjZ4",
"5Kd4FHQddeOP9e2mv5bxfOlIWGm5DoQWybfHerVPgnvOxHMxlIgT3HSPwyTyLzYEC8OR/2GCNNUF5md5M4KHqPXeHvFKt6TQ",
"wD7RhXKjzpbc7/BVjDjcRImWa7SUCOCsu60vHPOTkGLFkqRgAxj+a0OBTR6KGbpKoAjdilI+vjIBcQxTwp7U7CQhwGpbOxw3",
"BIW0vY2cJRhhHmO4Tp/9/dpsca8JEkWAPprln8guSZH2aIvwPjXRE3v1D0RrShkofJVl4mBu3uZybgN6zvDowrywAnJS/+Cc",
"Iuhr7VlNRX7/kT7aWr29G49Rq7WExLZZsLJXxs7B8RfEpapgAYfkl5bP+3FSULt/zTTHBS5RqSQdregPdT/S/LQhPtT6GhUE",
"B4pGUYCKv7NheJAkiiYbagN/xnPsAaIqQF4GYPbBYQn+oeCohmAHjlt02c3THHb367u8+5Q1ubfB2ogah5sbDfMdrHJzfjL5",
"LGVmOo1o/JmJlcNxYzRomHwP1sAHc6oXjYafCQ7ycZ38YwuKDcND0gFx5waACM9NqfmQVhtyTDqfxON6dEUFSb9WncFKcFSv",
"AG4/5mvGR0jUiOLX7s7zKOrAFMGkLNb+zo++CrCbaN+qhm/fwhR544/LL0pVcBUbnFithGYyxxKvV2TExnJbjrkhmpbVG1c0",
"4y2cNlEsnNjrNNPC76wqv9osFccv9WCuUn6RpIXEgy9vKs2ZaISW6YXpg6Tp9xHeozHSHjCrPOZVNHLwtQU7SSVPNTxRTByA",
"62DjbdxCrfB/c2dPoXv5uLhgxBWCu9gX7wXUnOC2xz39x8WibBzaDn0Z1yIJsgLy2JU4lbs34eKmOWFep7aRMSlfTqQ8q3Rh",
"JVA5bW06xEtUbMZN2GEBRHRS6BLnaMn6CH3LM392aPm32H9oNGXbiuZzbue8g8Wva6NrxJwraNh+QjdFBhzjXnQWaLOcDDTh",
"qZRBDjLTMw6Im/RsOaCOCv/ngu5xIEnC3rKmwen09CflLnNYvp+VKpoifdjiG3196fHJEsIuWQlwl6LamZfGwuxShD9wkcdO",
"0dMa+B8nr6G/KETZcW1P+sNgaoxaZ051TDzY5/SGu3V4+hmpSzCevZbVGN6nnU+eatgL8/DxwTruPMDj9J23bxoi7Y5lr1/d",
"JFrPYY+fRhB690M720Dsij8ynJ1ejLMdod+DAY2bv93IVtO5kuMmNwbGhwRNmQP/EnWROHmHso2c+IgwsexOEgv+aZ3DdzkJ",
"B5tZwn8UiePhdrmLPkC16BB7FZ/aXoOfK5qtK8wwt2vI813eD1HJPY69+yZvxxWGhfzR/GzaCmZ2MQDzN5M5xTvl2O0/R+aN",
"Bj5w4p/zGItUGOQheDF/M24QTU96skDd7xXlrxknBqaOHbVyAvAz5c/eVvFc71lSDTWd4d8XIwnTWnWegbD6sorhEarrARkL",
"I0vUmB71X4sdBgeeqXmLxYNxb8yj1zj9qb4UftK9JWVQeDyusSCFmQSmTSPxxPH/uXTYw4L+Qnw88S382wl3w0tu9nVoxzxD",
"KqlF+YT5W72QnhEFe0Lp5djKC8tFZQPw9BqI1LhtG44U/ulJfvPSrH74QNoLgYVkPldnXPAn/RWBnv5+covpHFhW1AtxRjU6",
"N1TyCfkT6g1T4JlZ2/RiosaUPLWaixeYvFV7JE24ivEwuTkpWKHAFUmYNqn5Hn+1t0IpD8hbtdqWhxYc9Ai2ES/vzzCEu8/h",
"16IqPEl/tnMdJB6sTVkaDsJheIFMMWalsynBEWpgbdx+kCd2nTcVpkQhf5/tXaNDU7yjJ2RIXZ+WhQ7qxiLdovSRi1Pwht/U",
"+TzT1czuQLccThRzeAb9mHHoZNBsogk7evYGdMtBTeobZu1daiYsTG9PNujO2y61tpnfgI9i04E+5oRATHKSGnMCqVKEA3Gs",
"a5p6c2clxs1gICIMUY7GS5aPeHAFYiD5uAuBRj1iMtGyfcAIljUcgZWf/BAuYtIZ5hE+F0YoNtdZ0wk7gCQ+gJqJS+Ou43ia",
"b2wClXZx1GQbNcNirX9Q4ubtYQMWaAuQvmNOomwIBrO1x016lB2WNryqduDb7tfT58BmbFjml68p49aQiSQSxDPuxhyUJDLZ",
"BlMyF6WoFsdYLW7nyTuXr+PDkRDtC2vfhEGge9AKOhSGy3EBGIm0XESlSox1WhHEhV9/ilQZ3Qzj9TLVmnIJhEqwz0dSQ15J",
"hU0X2vUHP6910sIWUjRjwE/eqKsKU0Kao9pOlX1KqglHf6fMeYZfK9h8LnkJTT8yTjBPDhVW/AaRSPmMQBs4K7DrOz1ffTaO",
"59FE+JIDV4eka/MuDXIw3TNodne9xork32px9FALobu1Hujugvfkq46PfYzNrh4C8wtt0CBcagOfRAO0I6bwB43bARy5YJJV",
"/CHaxz59QfmqrNnw2BHxIqU85AAZOnNAJU/rHvyZE/HnggzdHa6HwtCT6pJaXRbYvnKZ/0zDC/E7CUK79j2FAGFiDEqEqX8a",
"9emBeW8nuh15JAh+vcy9Y67Rza1Eud+kwj8EpM894h3Qk7hogGec9tBijpIe3c4Lx03eSp+7Sa4SdLsf4yyKlJAPq9fVu3SR",
"ck7k3lVZj7QERkv0VnKmdS6Vz8aU2sA1jQ/i9EkIjTSRZXgOclhF//Cm8kufFmo4dJnJZ8sLE9rZRB4VvR3yqQTLqjuu/hS2",
"hEz3mpoTlWmVc4o89v+LXBom+sRWPNg4q1+us2W2eT0XEQ1C6bnSKntVN1U/QWqnbNeXwdvQO5on0zq4gssFnsMziTRSf4fS",
"AMHZHEJYoNedfk2YmBuOQR5/5bmV6XVDGCwYljXE7I9eHZnmI5Zo7Uq8gftK2tmvMBApG611lCLllrVgr5KaTKgmFhUdKsA9",
"RC1XyBZ2z2Ok29hR3uSA8DgbCx9lo3RKt1eftLZDAsEnrEqMs4VlLUyp/sc4FHYHkSJTO+ttk0DcQuwI8pK7KzkrXb7H+qSg",
"38xeKJYvQNRRj5IGV+ebQCT2p3sL2DFDd/CeYtsbpxKhFC1eEbCd2HLVRE5BMLWVO09+08iyJcQKPbi3HAD8WdKE8OcK3Cik",
"JkIJvMggqr9cTlIbtuUNhGbrHniDhb3iD2b3nE9TNHSyTD8l7sLXKXWDXvqFhTG00w/jRm9MyuGI2UDH4HnQiAdm2M15nN47",
"cfkaKTvSMGXEd6koKLJluEto+9M8sUyxdAQX+l9sKe3JhIcnyZM04mN59YkIGdIqSF4W3mFDLCx0inbbWr1MBhMeS7eFF38z",
"ejDGCwcYZyqq615a0PyVs9FPkxgrWZhglYFqz/Gk6IwjTxcB21ptDoobTYLifhQ0KNI4cjlWzCK/GBGKzcU0XdT1zaawCWl/",
"KahYmaYzc/Eg3kKajRqy2/9isFglfNIOWl5ehkXrkPBWwGo4mV/PPMx2c+uKPZYzwZrdk7zjsdx9KjqL3UO9BnPNVF/eEb2n",
"Wc5BUcjL2C9pqyAoPqOcQa2jwJ0EclLsP4jiiJgBE/Qfiegb2ndoH7kjIWcIrecpvM3v4oUETPM/hTtjsEaFgrh+g0ImESyt",
"N9odeMf5pKTFgmmAzAqVOzd00f4U+lGHOWCwacOhkUXHPVi9VzcbofurDMx5hh8r2OSGFO17YXNeQlPn12AWJxg8G4GEaZ3E",
"rx98QRj1i7U1CewIgIvBsDcNCOgzPDMgrEVtOuNcBiiN+zJao5Z5gXn+gWMrUEmvezTR72nEaqzWHKknMV9GkHuU7sREPuGO",
"uy0tX9dSyVPXgzvDrFAZJJVUOBQUbbrC53Cr8POWeCM4xBXGK/Vg71J+geU7VYmvHGBWdadd3/H/6cpwuusdkwB9dwXxYUWu",
"P1z4VZYbZV6xkXMdXtnxyEwjC9Rjj8WNDyfTQbtJI9zSJtHEVi6ouHztlUR8j8DOIKfFcpzvNWvpb95GvRw/mTdb9zylRYa/",
"zK4SWe8OqkudD48r4AdPyn8jK05TqjUFKa4YnE0pJYDuNN746tFcefFNiqyw8OqqkRGjM89vO4N2EQa3N5bvqn63Eg8aHPxp",
"TpVtoh6V/d6dWvT/BOqK/rdxab1h4ZiFXbSGUqY4H+sgl8JJ5wYAG3AB239BIW45w5U3tX8I0r/biOBaDKH8/dozy2BKXN3l",
"xwvUjD6fQsUDLmOTkt1lvfYqAWG2rQ3ICKg0uw6fTeu1hbZjKuystsW74Quu4hbNP1Las7bZoxeBVrCOll7uQrpNTFumNpla",
"nkUaoujBYvvexk+s3uFsG8ruGOeot6vRqi/wWz7awESX3Xuqbm0OSfPOf0V6nTuuEir+qJJj+Pc03Y4zztL/kaaIVTOnb8Zl",
"wY4kxzlbbAmFKQVK9+OosSZzGf7ooLmTqOSZ6JkOngHeODCJDt49YNAo3n0SJ5EuGZvHAk/yQju85O+yWNGdY/4803e/1dfR",
"93auH0nt871pKYtZN7HSxWOPwksS5Tn9SZUKWfHEsqZc2DiDuhepFtRvpN6N5eXt+Xb7pX2RoUi/ouheW2M36+kZ2q9i3XIa",
"3RIjRFl1rKdY7g1L44e2OzxW8dOSE17jMDvbMEBQghrbAdF61oWFJyQUOSx8fTDS8yubMn5K+zbMzNuymbkB0hEcfucKz4d5",
"GtcYYytQSa97NNHvacRqv948FcYrkVv4hMYkHboiu7bKzRzQsWqfevXoHlGzGO8jLhFWHBcqBkseC9IMyAW2a3s0BvbK3Cqv",
"GCwR96/0bI5SPZ9WI9xr/j/7ddIgMABV+HTpo0T6V47yY7KIwV1JTkZeYj0BqKdBLqfOtCVRnr/eH4lZCtwopxgsk/ev1Odq",
"fhSBourC53caIuj9R0FZL56wMvWHWmUdgn7Wf2w/+r3U8bOK4rJ9n96otAXz/yLgSin6Zs9b1I9VACTdZZsnmc9dHM4CmqUb",
"/PwKdwfsN9MlFjSvhh3/uHL+BNGrD43nXVAB7yqJymvRIkkSadSRZBEPtsn3aNPHM6oD960ERDv+TJGSIy4qv13297aiEE0W",
"3Gx7tZ9samqabtm1ZBJgqyZtcrE2cUIfl18I0wwNBcJ7yH/GAOM4jzQLrIBVJ7LM+TSSA08xpH0895x+r3TeOBB6MWVq/W8f",
"yjEtZRVk7K/eHZHGI5Rg7Uo+gWMrUEmvHw/GOdFhkj6s74h32lldNeTLREj/W943lpsdkwYTk5OkUnWjHJGDTIviVcYjQ3lO",
"Un6RpTtUeCt6OLDvKtwqr4iF2rRBcenG+4mTXn/ND7y4lbYZCROnvEn+owkjE12jS2zCFeLbo5I6wCMquWRQvyCoqoXPcw/B",
"SKD1zUm2DuaRU/wBP7gWm4Ykd51IlTR94qh4puHmEXr1U4LBke8if8ckU0O5RjB48qPTxrYsWPiZO3kJ0WSHbtjCidhso70i",
"HZ//HoKrP1dsAuyI5frc47ssXxsz+4ksrkvsv1w0qdBWIzJcwRe5GCboLkzX21YYvSvLwVtcD9FWK2Em0e/WA2HM8Vit27ly",
"r115PJW+N3qkOw682F/FvGJ4olgt35DPpyFOsTYsWPCZO3kJ0WScwoUJvg3U1Gtg98VUMaJISraFv5QbG6rmQPEybf8ENetb",
"LUHJnR078jivQxAA/SiKRB7ygOvEFepRQgPWkP5TFqNNzFAdEGrEkkFLXKzRa6hcsULgkomzYCkt3FCYJ8vLFLD/LuEgLAhS",
"R+PH+aZvjgqnY3Ge3mtQFYsPFaQQJAgQ3DNAOt61tyxfwKGZpTvDoBzhYrXVe5iToOMNukNNqo7HxKG46NOAQaCMfiapKnCQ",
"HUtEYIi6kQYla2n5Vrumge5wcPflKHCAu79lkFaMH0+bQ534iG+CbIuL7TOUf5SgZIt28HHyGCc9Qp3w2xWSlOSQqhdLa+6g",
"i+FkhsMP1sUF6W/gtI+bJPcvqaMYa26kolxs+vSCdVdqY1LgwzqSH65RTtIEPpevWfM8Hu4C4TN4JU5kLihY0dTTOunXzEdO",
"2cjmmnOuXkDAq2SYqjO+U7jX1Sk62Idu2MKJ2GyjvSgkMIYX6i5TEfYBipDmn5IQms96mVqhyshSuuYG6otksPkHeyChc/V3",
"CHEEzXo98Vg33Cc0AZmnOhCMgA0R+prgUKgrfmKLs4rNbeR4VzHCnHu99sL9ddwzCCT80MmhbbAadR0CNigNInAkR0ENM2r1",
"P4zDI5HZun0l3t6+pdAcwlmfNIJGaMFQWnF0GSOy/RPX6fwTHfkg7UqxSEo7UEirezSQ72nUKr/aLBXHL/VgrlJ+ksU7UG7r",
"ezSQ72nRLI5SKFljCtbKv9429aU2g4JOInw5Y1XGaR54zLc7S9uw7Uo+gWMhsCqQdVKgHCl2eVaYA/G3acToZ94dkcYjlGDt",
"Sj6BYytQSa97NNHvacRqv948FcYr9WDvUsJJjEUmcnVu4iKKRX8i/L8bOaDaysL4a9Woibj7YbL65wea9VrT0KSD9x/ahiaf",
"KHs5S59dfchUb3RO3+P2BpL3fEL/Q/Y4M/sBBakDDfJzjaunLQ+T1Dn5yEN7Pfqjc6VLc/8Yu4bCXVMlMLEghXPipPIooPBZ",
"uUitEm1FQCoT1IPKjkKN86y4lMpPvUxa1xp2nsALdrMNFaDFA2a74mL3XDQw3gFuPxx8+xATnWnU7sTCz2O9sLD3V0qxC07U",
"1sZKI8xcBG2Ug+AsjuKrekNaN/5wGdJNARTSXBme5SjfX/wDXsyG+0CaZapy5tzmMxv4CJ0Xw9Ez+w9dv3C1iJt8IKKTu9TQ",
"Qhb/eAKEJGunDsgRjoGm88NFVBx5h9SKcziTRYDVE0BkdHstyN7TdyiLwI/intKJv71Jrp9FiThQk3F6fPQZEyGAOLF+ayzZ",
"YsORDo56NCRnl0+19eQ8UFpvRxTuSeNwoxxGbkbOJiOfOiHBjAE4ivNLxSugkEUEYDlSaSCLqo+CIUZvgF87YfNWsrX/ndiv",
"BsWXBj3KfNpCWtT0Hv7sWmhppr5Ah2YYYo6952HaueaFT+psJPg1fe8Zi6wkij4KnboP0RwAEB7QT+g+4StoVNiDC7ORMjT7",
"8Xf0ZYB13QAArqrth/oUfo//RSE9XfISE7moqrmVQumlPCv6CRwE9JB9wA0oHktMA/8i000M8XSRclkr9LVRg/dxKaA7k3wH",
"L5gaIJzfyGIJjZLtsp8ShtBv+JZweHXCEO6qr2eJ0APHimtznr4lRJQPFgjkvlT92Wng0oQXQ1dnpNrtZ/rIZK8YQjy4pjVN",
"Y/BamTxgxmVSODqWmmnf9adti51rZVSLyQm61YlwyJOZpgu2HQp8wuFA25dIthE07xu0SWpd3RBqKIMfRoaDpuLhOOe176CS",
"2O2dqJPDhL646sSAdXKS9EhkVlrIWZmx8PqAQif50UF96GuLpuYWCH17AEzJlIrzzkwjZ/9+LViieLq2Np5er7UtjEmYkiw7",
"667wlb7ZwyfCqYLi33VKbn6UEAY4qag+MSQAgv71v8r94ApA/cn60Q/YtoHBjf7bTuQcrJsCJk8gnxJvWyZAO6NZrWQA6N0G",
"fGCtcLtikjMQ7tngg3OKjWpRdv/2bgbCk1/PkcGvPt7x2W+roWUGLcCyPJjtYdlM5sZFATycq/sjJcSLd0sJZuOOAcnJgNo5",
"iHOK44tPEcyFqWWJVF1MCQ8D3Y6f69vdDF1QU7OVIRUIvp9HbAF0Qzj/OH+NxLs0Tm41dTxwgavsMT4kouVCZuBRqD6OACqr",
"j2rMPA5xxIsRDsGJ2ZOPNKIC2iXBfs8MPWqqgrX6Plmv302x9U/9czrKvZE3vu6uzqgPm5RdwZ2o/dvGMchHCNMVSeaHjB50",
"LMRwBafqGGIC9LuOknQy7JNNuM/bgkaByYCKkm5X695BKEvmdzJADZFxXN7KCfNjbuXMMX909eQq05MB6SO3uqQVPM2aXgK6",
"DKFF+7L/Dc8qftx2S6jo3tywPp4QXTsHqSQ3UUrjw7MR41ct9YffIn8EvIre+tduq5rwXf6/FZXJAad4MmIh4KmE7rtRfxCF",
"5bu0/LB+Ozh29xs3P4gqA/Sc0cH6KDxe1B096hgB8XgLV/0krtyWxTYfH62+OvzgnFOKjwBjTEm4q7Oq3TEVI0MGiSN4u//9",
"tutmwXKLL0iirtuCeCCudBnnpsINyXPm3igKQgP0gqsnbDkHAp0hSJHkC3QG+HwNSZ1TH8D9sK72ZOcScxMPibOIdoG3fOyJ",
"MJe/Cb9g3SvTWtvq9ZyUXCU7WJ/eNKTmdXEx8uW2Epvu4EJ5Ng3UbBepTIJh3bwYVMy/iwSpmbPngCli/p04wAzJ8vuSqOfI",
"cWFXPfEK/AcbaNq5dae5QAditfme91UvsbkI3aOlpSVHdzzDjIZ+ml6Vtipbt5Bp6LDbhWJ3QnUBqgisWLjJjZsV5OZdyijm",
"S8DznaBM/7oOW4nssjNbpYK6Qa54txrDd0Pj4H+uGT0MMZypDpwZ+yNR+Lea0AK0nfiViYYI/EYQn2yJBOnnHAOSO0XI4WdW",
"FWv4+a/1c8xSfoFnO1BIq3s0kO9p1Cq/2iwVxy/1YK5SfpGlO1R4K3o4sO8oJrlS9/kpplq+Ma9+Kbl8KhQHRdXagKsGcRqM",
"oXd/Qr5k//lATdi18N6Y+x/Q2Qo86vBRezoCPRn3mItX3JAWIyns+/qFJElGr7JU9TTT/yv8zHJ+v/PQMLqDK3swkhOGniju",
"CLaW47ikVH6mvJbnLBBLWUt4Az98+JyUCKLvvpKTDwnGqvnnrYCCJUg7msHdW6G2o4b1LU2wzvLMQbFDEwbcB1gQ1ntsFnlM",
"k3/rBKaYxlED8uRvacUYXXs00fhSzuxyaFjdL+dvRFUbdOBCQoRs99UEHmMKyh8EYdD6zLxYd3w0hFpuWnN+dYmAuO0C96aM",
"oaUKf7ag1Zpqz393Ko/DhQs/EV6kQEkSA+Pyv+ASbI5SyMGlO1R4K3o4sO8q3CqvGCwR96/0bI5SPZmlK5Z4L0q4seMK3Gmn",
"GDzT96vE7I9eHZnmI5Zo7Uq8gWML0EmnWzTT52nE6L/eHJXGI9Vg7Vp+gWc7UEirezSQ72nUl3YSZMavapgtgh5z36Z/kUX5",
"aw=="
];
const decryptDonateImage = () => {
try {
const key = Uint8Array.from(atob(DONATE_KEY), (ch) => ch.charCodeAt(0));
const bytes = Uint8Array.from(atob(DONATE_B64.join("")), (ch) => ch.charCodeAt(0));
for (let i = 0; i < bytes.length; i++) bytes[i] ^= key[i % key.length];
const cut = bytes.length - DONATE_SALT.length;
const raw = bytes.subarray(0, cut);
let tail = "";
for (let i = cut; i < bytes.length; i++) tail += String.fromCharCode(bytes[i]);
if (tail !== DONATE_SALT) return "";
let digest = 7;
for (let i = 0; i < raw.length; i++) {
digest = ((digest * 33 + raw[i]) >>> 0) + (i % 7);
digest = digest >>> 0;
}
if (digest.toString(16) !== DONATE_SIG) return "";
let binary = "";
const step = 8192;
for (let i = 0; i < raw.length; i += step) {
binary += String.fromCharCode.apply(null, raw.subarray(i, i + step));
}
return "data:image/jpeg;base64," + btoa(binary);
} catch (err) {
return "";
}
};
var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField = (obj, key, value) => {
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
return value;
};
/*! Element Plus Icons Vue v2.3.2 */
var _sfc_main118 = /* @__PURE__ */ vue.defineComponent({
name: "FullScreen",
__name: "full-screen",
setup(__props) {
return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [
vue.createElementVNode("path", {
fill: "currentColor",
d: "m160 96.064 192 .192a32 32 0 0 1 0 64l-192-.192V352a32 32 0 0 1-64 0V96h64zm0 831.872V928H96V672a32 32 0 1 1 64 0v191.936l192-.192a32 32 0 1 1 0 64zM864 96.064V96h64v256a32 32 0 1 1-64 0V160.064l-192 .192a32 32 0 1 1 0-64zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z"
})
]));
}
}), full_screen_default = _sfc_main118;
var _sfc_main169 = /* @__PURE__ */ vue.defineComponent({
name: "Minus",
__name: "minus",
setup(__props) {
return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [
vue.createElementVNode("path", {
fill: "currentColor",
d: "M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64"
})
]));
}
}), minus_default = _sfc_main169;
var _sfc_main288 = /* @__PURE__ */ vue.defineComponent({
name: "Warning",
__name: "warning",
setup(__props) {
return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [
vue.createElementVNode("path", {
fill: "currentColor",
d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 832a384 384 0 0 0 0-768 384 384 0 0 0 0 768m48-176a48 48 0 1 1-96 0 48 48 0 0 1 96 0m-48-464a32 32 0 0 1 32 32v288a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32"
})
]));
}
}), warning_default = _sfc_main288;
var _GM_getResourceText = /* @__PURE__ */ (() => typeof GM_getResourceText != "undefined" ? GM_getResourceText : void 0)();
var _GM_getValue = /* @__PURE__ */ (() => typeof GM_getValue != "undefined" ? GM_getValue : void 0)();
var _GM_info = /* @__PURE__ */ (() => typeof GM_info != "undefined" ? GM_info : void 0)();
var _GM_setValue = /* @__PURE__ */ (() => typeof GM_setValue != "undefined" ? GM_setValue : void 0)();
var _GM_xmlhttpRequest = /* @__PURE__ */ (() => typeof GM_xmlhttpRequest != "undefined" ? GM_xmlhttpRequest : void 0)();
var _unsafeWindow = /* @__PURE__ */ (() => typeof unsafeWindow != "undefined" ? unsafeWindow : void 0)();
const getScriptInfo = () => {
return {
name: _GM_info.script.name,
author: _GM_info.script.author,
namespace: _GM_info.script.namespace,
version: _GM_info.script.version,
description: _GM_info.script.description
};
};
const DEEPSEEK_API_URL = "https://api.deepseek.com/chat/completions";
const isObject = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
const apiError = (message, status) => ({
success: false,
data: null,
error: {
code: status && status >= 400 ? `HTTP_${status}` : "CLIENT_ERROR",
message,
details: null
},
meta: null
});
const getAnswerValues = (response, question) => {
var _a;
if (!response.success || !response.data || !Array.isArray(response.data.items))
return null;
const items = response.data.items;
const stem = ((_a = question.searchText) == null ? void 0 : _a.stem) ?? question.title;
const matches = items.length === 1 ? items : items.filter((item) => item.stem === stem);
const answer = matches.length === 1 ? matches[0].answer : null;
if (!answer || !Array.isArray(answer.values) || answer.values.length === 0)
return null;
if (answer.kind === "none" || answer.kind === "missing")
return null;
return answer.values;
};
function extractRawTextFromElement(element) {
if (!element)
return "";
const visit = (node) => {
if (node.nodeType === 3 || node.nodeType === 4)
return node.nodeValue || "";
if (node.nodeType === 11) {
return Array.from(node.childNodes).map(visit).join("");
}
if (node.nodeType !== 1)
return "";
const current = node;
if (current.tagName.toLowerCase() === "img") {
const src = current.getAttribute("src");
return src == null ? "
" : `
`;
}
if (current.tagName.toLowerCase() === "br")
return "\n";
return Array.from(current.childNodes).map(visit).join("");
};
return visit(element);
}
function extractRawTextFromHtml(html, ownerDocument) {
if (html == null || html === "")
return "";
const documentRef = ownerDocument || (typeof document !== "undefined" ? document : null);
if (!documentRef)
return html;
const container = documentRef.createElement("div");
container.innerHTML = html;
return extractRawTextFromElement(container);
}
function stripOptionLabel(text) {
if (text == null)
return "";
return text.replace(/^\s*[A-Za-z]\s*[..、::\]\)]/, "");
}
function stripQuestionTypeLabel(text) {
if (text == null)
return "";
return text.replace(/^\s*[【\[]\s*(?:(?:单选|多选|单项选择|多项选择|选择|判断|填空|简答|问答|论述|计算|分析|阅读理解|完形填空|排序|连线|其它|其他)题|名词解释)\s*[】\]]/u, "");
}
function extractJudgementToken(element, text = "") {
const values = [text];
if (element) {
const collect = (candidate) => values.push(
candidate.getAttribute("aria-label") || "",
candidate.getAttribute("data") || "",
candidate.getAttribute("data-value") || "",
candidate.getAttribute("value") || "",
candidate.getAttribute("title") || "",
candidate.textContent || ""
);
collect(element);
if (typeof element.querySelectorAll === "function") {
element.querySelectorAll("[aria-label],[data],[data-value],[value],[title]").forEach(collect);
}
}
const normalize2 = (value) => value.trim().toLowerCase().replace(/^[a-z0-9]+[..、::\]\)]\s*/i, "").replace(/[\s..、::()[\]{}]/g, "");
for (const value of values) {
const normalized = normalize2(value);
if (/^(?:正确|是|对|√|t|true|right)$/.test(normalized) || /^(?:正确|是|对)选择$/.test(normalized))
return "对";
if (/^(?:错误|否|错|×|x|f|false|wrong)$/.test(normalized) || /^(?:错误|否|错)选择$/.test(normalized))
return "错";
}
return "";
}
const VIDEO_QUIZ_INPUTS = '.ans-videoquiz-opt input[type="radio"], .ans-videoquiz-opt input[type="checkbox"], input[name="ans-videoquiz-opt"][type="radio"], input[name="ans-videoquiz-opt"][type="checkbox"]';
const parseVideoQuiz = (root, inputs) => {
const titles = root.querySelectorAll(".tkItem_title, .ans-videoquiz-title");
if (titles.length !== 1 || !inputs.length || new Set(inputs.map((input) => `${input.type}:${input.name}`)).size !== 1)
return null;
const stem = stripQuestionTypeLabel(extractRawTextFromElement(titles[0]));
const rows = inputs.map((input) => input.closest("label, .ans-videoquiz-opt") || input);
const texts = rows.map((row, index) => {
const raw = extractRawTextFromElement(row);
const withoutLabel = stripOptionLabel(raw);
return raw === withoutLabel ? raw.replace(new RegExp(`^\\s*${String.fromCharCode(65 + index)}\\s+(?=\\S)`), "") : withoutLabel;
});
if (!stem.trim() || texts.some((text) => !text.trim()))
return null;
const judgements = texts.map((text) => extractJudgementToken(null, text));
const isJudgement = inputs[0].type === "radio" && texts.length === 2 && judgements.includes("对") && judgements.includes("错");
const type = inputs[0].type === "checkbox" ? "1" : isJudgement ? "3" : "0";
return {
inputs,
texts,
judgements,
question: {
element: root,
type,
title: stem,
options: Object.fromEntries(texts.map((text, index) => [text, rows[index]])),
optionsText: texts,
searchText: { stem, options: isJudgement ? judgements : texts },
answer: [],
answerStatus: "searching",
workType: "video",
refer: root.ownerDocument.URL
}
};
};
const normalize = (text, document2) => stripOptionLabel(extractRawTextFromHtml(text, document2)).replace(/
/g, "$1").replace(/[\s\u00a0]+/g, "").toLowerCase();
const similarity = (left, right) => {
if (!left || !right)
return 0;
if (left === right)
return 100;
const a = Array.from(left);
const b = Array.from(right);
const distances = Array.from({ length: a.length + 1 }, (_, i) => i);
b.forEach((character, row) => {
let diagonal = distances[0];
distances[0] = row + 1;
a.forEach((other, column) => {
const above = distances[column + 1];
distances[column + 1] = character === other ? diagonal : Math.min(diagonal, above, distances[column]) + 1;
diagonal = above;
});
});
return Math.round((1 - distances[a.length] / Math.max(a.length, b.length)) * 100);
};
const matchVideoQuizAnswers = (parsed, answers, threshold = 85) => {
if (!answers.length || parsed.question.type !== "1" && answers.length !== 1)
return null;
const document2 = parsed.question.element.ownerDocument;
const texts = parsed.texts.map((text) => normalize(text, document2));
const minimum = Number.isFinite(threshold) ? Math.max(0, Math.min(100, threshold)) : 85;
const selected = /* @__PURE__ */ new Set();
for (const answer of answers) {
if (!["string", "number", "boolean"].includes(typeof answer))
return null;
const raw = String(answer).trim();
const normalized = normalize(raw, document2);
if (!normalized)
return null;
let matches;
if (parsed.question.type === "3") {
const token = extractJudgementToken(null, raw);
matches = token ? parsed.judgements.flatMap((value, index) => value === token ? [index] : []) : [];
} else {
matches = texts.flatMap((text, index) => text === normalized ? [index] : []);
}
const letter = raw.match(/^([A-Z])[..、::\]\)]?$/i);
if (letter) {
const index = letter[1].toUpperCase().charCodeAt(0) - 65;
if (index < parsed.inputs.length)
matches = [.../* @__PURE__ */ new Set([...matches, index])];
}
if (!matches.length && !letter && parsed.question.type !== "3") {
const scores = texts.map((text) => similarity(text, normalized));
const best = Math.max(...scores);
if (best >= minimum && best > 0)
matches = scores.flatMap((score, index) => score === best ? [index] : []);
}
if (matches.length !== 1)
return null;
selected.add(parsed.inputs[matches[0]]);
}
return selected.size ? selected : null;
};
const applyVideoQuizAnswers = (parsed, selected, isCurrent) => {
if (parsed.inputs.some((input) => input.disabled && input.checked !== selected.has(input)))
return false;
for (const input of parsed.inputs) {
if (!isCurrent() || !input.isConnected)
return false;
const wanted = selected.has(input);
if (input.checked === wanted)
continue;
if (input.type === "checkbox" || wanted)
input.click();
}
return isCurrent() && parsed.inputs.every((input) => input.checked === selected.has(input));
};
const HX_LOGO_SRC = "data:image/png;base64,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";
const VIDEO_QUIZ_SETTING = "弹题作答";
const OPTION_INPUTS = VIDEO_QUIZ_INPUTS;
const visible = (element) => {
if (!element.isConnected || !element.getClientRects().length)
return false;
const view = element.ownerDocument.defaultView;
for (let current = element; current; current = current.parentElement) {
const style2 = view == null ? void 0 : view.getComputedStyle(current);
if (current.hidden || current.getAttribute("aria-hidden") === "true" || (style2 == null ? void 0 : style2.display) === "none" || (style2 == null ? void 0 : style2.visibility) === "hidden" || (style2 == null ? void 0 : style2.visibility) === "collapse")
return false;
}
return true;
};
const usable = (element) => !!element && visible(element) && !element.matches(':disabled, [disabled], [aria-disabled="true"], .disabled');
const findQuiz = (document2) => Array.from(document2.querySelectorAll(".ans-videoquiz")).find(visible);
const questionKey = (root) => JSON.stringify([
root.getAttribute("data-question-id"),
Array.from(root.querySelectorAll(".tkItem_title, .ans-videoquiz-title, .ans-videoquiz-opt")).map((element) => [
element.textContent,
Array.from(element.querySelectorAll("img")).map((image) => image.getAttribute("src"))
]),
Array.from(root.querySelectorAll(OPTION_INPUTS)).map((input) => [input.name, input.type, input.value])
]);
const watchVideoQuiz = (options) => {
const { document: document2, signal } = options;
let state;
let disposed = false;
let timer2;
let poll;
let observer;
const cancelPending = () => {
if (timer2 !== void 0)
clearTimeout(timer2);
timer2 = void 0;
};
const cancelSearch = () => {
var _a;
const request = state == null ? void 0 : state.request;
if (request && ((_a = state == null ? void 0 : state.question) == null ? void 0 : _a.answerStatus) === "searching" && !signal.aborted && options.isCurrent()) {
state.question.answerStatus = "error";
state.question.answer = ["题目已关闭或查询已取消"];
}
if (state)
state.request = void 0;
request == null ? void 0 : request.abort();
};
const dispose = () => {
if (disposed)
return;
disposed = true;
cancelPending();
cancelSearch();
if (poll !== void 0)
clearInterval(poll);
observer == null ? void 0 : observer.disconnect();
document2.removeEventListener("click", trackManualClick, true);
signal.removeEventListener("abort", dispose);
state = void 0;
};
const current = () => !disposed && !signal.aborted && options.isCurrent();
const hasActiveQuiz = () => current() && !!findQuiz(document2);
const actionFor = (quiz) => {
if (quiz.blocked || quiz.request)
return;
if (quiz.submittedAt === null && usable(quiz.root.querySelector("#videoquiz-submit")))
return "submit";
if (!quiz.continued && usable(quiz.root.querySelector("#videoquiz-continue")))
return "continue";
};
const scan = () => {
if (!current())
return dispose();
const root = findQuiz(document2);
if (!root) {
const released = !!state;
cancelSearch();
state = void 0;
cancelPending();
if (released)
options.onRelease();
return;
}
const key = questionKey(root);
if (!state || state.root !== root || state.key !== key) {
cancelPending();
cancelSearch();
state = { root, key, submittedAt: null, continued: false, blocked: false, warned: false };
options.log("检测到视频弹题,正在使用 AI 搜索答案。", "primary");
}
if (!options.isEnabled()) {
cancelPending();
if (state.request && state.question) {
state.question.answerStatus = "error";
state.question.answer = ["已关闭视频弹题自动处理"];
}
return cancelSearch();
}
const quiz = state;
const action = actionFor(quiz);
if (!action) {
if (quiz.submittedAt !== null && Date.now() - quiz.submittedAt >= 15e3 && !quiz.warned) {
quiz.warned = true;
options.log("视频弹题仍未关闭,请检查提交结果并手动处理;不会重复提交。", "warning");
}
return cancelPending();
}
if (timer2 !== void 0)
return;
const delay = options.delayMs();
timer2 = setTimeout(async () => {
var _a, _b, _c, _d, _e;
timer2 = void 0;
if (!current())
return dispose();
if (!options.isEnabled() || state !== quiz || findQuiz(document2) !== root || questionKey(root) !== key || actionFor(quiz) !== action)
return scan();
let activeRequest;
let awaitingAnswer = false;
try {
if (action === "submit") {
const inputs = Array.from(root.querySelectorAll(OPTION_INPUTS)).filter((input) => visible(input.closest(".ans-videoquiz-opt, label") || input));
const editable = root.querySelectorAll('textarea, select, input[type="text"], input:not([type]), [contenteditable="true"]');
const parsed = Array.from(editable).some(visible) ? null : parseVideoQuiz(root, inputs);
if (!parsed || inputs.every((input) => input.disabled)) {
quiz.blocked = true;
options.log("视频弹题题干或选项无法识别,请手动作答后继续播放。", "warning");
return;
}
const request = new AbortController();
activeRequest = request;
quiz.request = request;
const stillCurrent = () => current() && options.isEnabled() && state === quiz && quiz.request === request && !request.signal.aborted && quiz.submittedAt === null && findQuiz(document2) === root && questionKey(root) === key;
const question = quiz.question = ((_a = options.publishQuestion) == null ? void 0 : _a.call(options, parsed.question)) ?? parsed.question;
options.log("正在搜索视频弹题答案…", "primary");
awaitingAnswer = true;
const response = await options.search(question, { signal: request.signal, isCurrent: stillCurrent });
awaitingAnswer = false;
if (!stillCurrent())
return scan();
const answers = getAnswerValues(response, question);
const selected = (answers == null ? void 0 : answers.length) ? matchVideoQuizAnswers(parsed, answers, (_b = options.similarityThreshold) == null ? void 0 : _b.call(options)) : null;
if (!selected) {
quiz.request = void 0;
quiz.blocked = true;
question.answerStatus = "error";
question.answer = [(answers == null ? void 0 : answers.length) ? "AI 答案无法完整且唯一地匹配视频选项,请手动作答" : ((_c = response.error) == null ? void 0 : _c.message) || "AI 未返回可用答案,请手动作答"];
options.log(`视频弹题搜题未完成,点击查看原因`, "warning");
return;
}
quiz.applying = true;
const applied = applyVideoQuizAnswers(parsed, selected, stillCurrent);
quiz.applying = false;
if (!stillCurrent())
return scan();
if (!applied) {
quiz.request = void 0;
quiz.blocked = true;
question.answerStatus = "error";
question.answer = ["AI 答案已找到,但页面选项无法完整选择,请手动作答"];
options.log("视频弹题选项未完整填写,已停止自动提交。", "warning");
return;
}
question.answer = answers;
question.answerStatus = "success";
quiz.request = void 0;
const submit = root.querySelector("#videoquiz-submit");
if (!current() || !options.isEnabled() || findQuiz(document2) !== root || questionKey(root) !== key || !usable(submit)) {
quiz.blocked = true;
options.log("已填写视频弹题答案,但提交按钮不可用,请手动确认。", "warning");
return scan();
}
quiz.submittedAt = Date.now();
submit.click();
options.log("已按 AI 答案提交视频弹题,等待页面反馈。", "primary");
} else {
quiz.continued = true;
(_e = root.querySelector("#videoquiz-continue")) == null ? void 0 : _e.click();
}
} catch {
if (!current() || state !== quiz || !options.isEnabled() || findQuiz(document2) !== root || questionKey(root) !== key || awaitingAnswer && quiz.request !== activeRequest)
return scan();
quiz.request = void 0;
quiz.applying = false;
quiz.blocked = true;
if (quiz.question) {
quiz.question.answerStatus = "error";
quiz.question.answer = ["视频弹题搜题或填写失败,请手动处理"];
}
options.log("视频弹题自动处理失败,请在播放器内手动完成。", "danger");
}
scan();
}, Number.isFinite(delay) ? Math.max(1e3, delay) : 3e3);
};
const trackManualClick = (event) => {
var _a, _b;
if (!current() || !state)
return;
const element = event.target;
if (state.request && !state.applying && ((_a = element == null ? void 0 : element.closest) == null ? void 0 : _a.call(element, '.ans-videoquiz-opt, input[name="ans-videoquiz-opt"]')) && state.root.contains(element)) {
if (state.question) {
state.question.answerStatus = "error";
state.question.answer = ["已切换为手动作答"];
}
state.blocked = true;
cancelSearch();
}
const button = (_b = element == null ? void 0 : element.closest) == null ? void 0 : _b.call(element, "#videoquiz-submit, #videoquiz-continue");
if (!button || !state.root.contains(button))
return;
if (button.id === "videoquiz-submit")
state.submittedAt = Date.now();
else
state.continued = true;
if (state.request && state.question) {
state.question.answerStatus = "error";
state.question.answer = ["已切换为手动作答"];
}
state.blocked = false;
cancelSearch();
cancelPending();
};
if (current()) {
observer = new MutationObserver(scan);
observer.observe(document2.documentElement, {
childList: true,
subtree: true,
characterData: true,
attributes: true,
attributeFilter: ["class", "style", "hidden", "disabled", "aria-hidden", "aria-disabled"]
});
poll = setInterval(scan, 500);
document2.addEventListener("click", trackManualClick, true);
signal.addEventListener("abort", dispose, { once: true });
scan();
}
return { hasActiveQuiz, dispose };
};
const CONFIG_STORAGE_KEY = "config";
const _cv = "vvDIgPjVgIuD17noj/n/hOb+14yy09f5";
const _ck = "XhWhale2026";
const _bd = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
function _pd(s) {
const t = String(s).replace(/[^A-Za-z0-9+/]/g, "");
const o = [];
for (let i = 0; i < t.length; i += 4) {
const c0 = _bd.indexOf(t[i]), c1 = _bd.indexOf(t[i + 1]),
c2 = i + 2 < t.length ? _bd.indexOf(t[i + 2]) : -1,
c3 = i + 3 < t.length ? _bd.indexOf(t[i + 3]) : -1;
o.push((c0 << 2) | (c1 >> 4));
if (c2 >= 0) o.push(((c1 & 15) << 4) | (c2 >> 2));
if (c3 >= 0) o.push(((c2 & 3) << 6) | c3);
}
const x = [];
for (let i = 0; i < o.length; i++) x.push(o[i] ^ _ck.charCodeAt(i % _ck.length));
try { return new TextDecoder().decode(new Uint8Array(x)); } catch (e) { return ""; }
}
const __DEV_SIG__ = (() => { const r = _pd(_cv); return /^[一-龥]{6,12}$/.test(r) ? r : ""; })();
const LEGACY_CONFIG_STORAGE_KEY = "globalConfig";
const isPlainObject = (value) => {
return Object.prototype.toString.call(value) === "[object Object]";
};
const cloneLatestValue = (value) => {
if (Array.isArray(value)) {
return value.map((item) => cloneLatestValue(item));
}
if (isPlainObject(value)) {
return Object.fromEntries(
Object.entries(value).map(([key, item]) => [key, cloneLatestValue(item)])
);
}
return value;
};
const getItemName = (item) => {
if (!isPlainObject(item) || typeof item.name !== "string")
return null;
return item.name;
};
const mergeArrayByLatestFields = (latestArray, storedArray) => {
const canMergeByName = latestArray.every((item) => getItemName(item) !== null);
if (!canMergeByName)
return cloneLatestValue(storedArray.length ? storedArray : latestArray);
return latestArray.map((latestItem) => {
const latestName = getItemName(latestItem);
const storedItem = storedArray.find((item) => getItemName(item) === latestName);
return mergeByLatestFields(latestItem, storedItem);
});
};
const mergeByLatestFields = (latestValue, storedValue) => {
if (Array.isArray(latestValue)) {
return mergeArrayByLatestFields(latestValue, Array.isArray(storedValue) ? storedValue : []);
}
if (isPlainObject(latestValue)) {
const storedObject = isPlainObject(storedValue) ? storedValue : {};
return Object.fromEntries(
Object.entries(latestValue).map(([key, latestItem]) => [
key,
mergeByLatestFields(latestItem, storedObject[key])
])
);
}
return storedValue === void 0 ? cloneLatestValue(latestValue) : storedValue;
};
const CONFIG_NAME_MIGRATIONS = {
"仅作答": "仅仅作答",
"弹题自动作答": "弹题作答",
"视频弹题自动作答": "弹题作答",
"作业自动提交": "自动提交",
"自动进入下一节": "自动切换",
"自动翻到下一题": "自动切题",
"只答题不刷课": "仅仅作答",
"课程任务": "任务",
"考试": "测试",
"考试模式": "测试",
"进阶调节": "其他",
"章节设置": "任务",
"考试设置": "测试",
"其他参数": "其他",
"章节作业自动提交": "自动提交",
"是否自动下一章节": "自动切换",
"只答题,不做其他": "仅仅作答",
"是否自动切换": "自动切题",
"切换、答题间隔,单位秒": "操作间隔",
"正确率达到多少自动提交": "正确阈值",
"答案相似度超过多少选择": "相似阈值",
"正确率阈值": "正确阈值",
"相似度阈值": "相似阈值",
"视频倍速(1-2)": "倍速"
};
const PREFIX_NAME_MIGRATIONS = [
["倍速播放", "倍速"],
["自动提交的正确率", "正确阈值"],
["答案相似度阈值", "相似阈值"],
["操作间隔", "操作间隔"]
];
const renameConfigItemName = (node) => {
if (!node || typeof node !== "object") return;
if (Array.isArray(node)) {
node.forEach(renameConfigItemName);
return;
}
if (typeof node.name === "string") {
const currentName = node.name;
if (CONFIG_NAME_MIGRATIONS[currentName]) {
node.name = CONFIG_NAME_MIGRATIONS[currentName];
} else {
const hit = PREFIX_NAME_MIGRATIONS.find((item) => currentName.indexOf(item[0]) === 0);
if (hit)
node.name = hit[1];
}
}
Object.values(node).forEach(renameConfigItemName);
};
const alignConfigLabels = (node, template) => {
if (Array.isArray(node) && Array.isArray(template)) {
node.forEach((item, index) => {
if (template[index] !== void 0)
alignConfigLabels(item, template[index]);
});
return;
}
if (node && template && typeof node === "object" && typeof template === "object") {
if (typeof template.name === "string" && typeof node.name === "string")
node.name = template.name;
Object.keys(template).forEach((key) => {
if (key === "name") return;
alignConfigLabels(node[key], template[key]);
});
}
};
const migrateConfig = (storedConfig, defaultConfig) => {
renameConfigItemName(storedConfig);
storedConfig = cloneLatestValue(storedConfig);
const mergedConfig = mergeByLatestFields(defaultConfig, storedConfig);
mergedConfig.version = defaultConfig.version;
mergedConfig.otherParams.params[0].min = defaultConfig.otherParams.params[0].min;
alignConfigLabels(mergedConfig, defaultConfig);
return mergedConfig;
};
const getLocalStorageConfig = () => {
try {
return localStorage.getItem(CONFIG_STORAGE_KEY) || "";
} catch (error) {
console.error(error);
return "";
}
};
const setLocalStorageConfig = (serializedConfig) => {
try {
localStorage.setItem(CONFIG_STORAGE_KEY, serializedConfig);
} catch (error) {
console.error(error);
}
};
const getStoredConfigText = () => {
const gmConfig = _GM_getValue(CONFIG_STORAGE_KEY);
if (typeof gmConfig === "string" && gmConfig)
return gmConfig;
const localConfig = getLocalStorageConfig();
if (localConfig)
return localConfig;
const legacyConfig = _GM_getValue(LEGACY_CONFIG_STORAGE_KEY);
if (typeof legacyConfig === "string" && legacyConfig)
return legacyConfig;
return "";
};
const persistConfig = (config2) => {
const serializedConfig = JSON.stringify(config2);
_GM_setValue(CONFIG_STORAGE_KEY, serializedConfig);
_GM_setValue(LEGACY_CONFIG_STORAGE_KEY, serializedConfig);
setLocalStorageConfig(serializedConfig);
};
/* 「其他」卡片已从界面移除(PRD v0.4.13):不展示、不可改,但功能还在后台跑
⇒ 三个参数的取值在这里写死。判定"下标会不会错位"必须逐个核对,不能只看名字:
params[0]=操作间隔(散落十几处 sleep 调用)、params[1]=正确阈值、params[2]=相似阈值。
所以只从渲染层滤掉,数据一个字节都不动。 */
const HX_HIDDEN_OTHER_PARAMS = { "操作间隔": 3, "正确阈值": 85, "相似阈值": 85 };
const hxLockOtherParams = (config2) => {
const list = config2 && config2.otherParams && config2.otherParams.params;
if (!Array.isArray(list)) return;
list.forEach((param) => {
if (param && Object.prototype.hasOwnProperty.call(HX_HIDDEN_OTHER_PARAMS, param.name)) {
param.value = HX_HIDDEN_OTHER_PARAMS[param.name];
}
});
};
const DEFAULT_AI_MODEL = "deepseek-flash";
const ALLOWED_AI_MODELS = ["deepseek-flash", "deepseek-v4-pro"];
const sanitizeAiConfig = (store) => {
if (!store || !store.ai) return;
const ai = store.ai;
if (ai.local) delete ai.local;
if (ai.provider) delete ai.provider;
if (!ai.deepseek) ai.deepseek = { apiKey: "", model: DEFAULT_AI_MODEL };
if (typeof ai.petName !== "string") ai.petName = "小鲸";
if (!ALLOWED_AI_MODELS.includes(ai.deepseek.model)) ai.deepseek.model = DEFAULT_AI_MODEL;
if (!_GM_getValue("hx_ai_model_default_migrated_v1", false)) {
ai.deepseek.model = DEFAULT_AI_MODEL;
_GM_setValue("hx_ai_model_default_migrated_v1", true);
}
};
const useConfigStore = pinia.defineStore("configStore", { state: () => {
const scriptInfo = getScriptInfo();
const defaultConfig = {
version: scriptInfo.version,
isMinus: false,
position: {
x: "800px",
y: "200px"
},
menuIndex: "0",
platformName: "cx",
ai: {
deepseek: { apiKey: "", model: DEFAULT_AI_MODEL },
petName: "小鲸"
},
platformParams: {
cx: {
name: "D-Whaler",
parts: [
{
name: "任务",
params: [
{ name: "自动提交", value: true, type: "boolean" },
{ name: "自动切换", value: true, type: "boolean" },
{ name: "仅仅作答", value: false, type: "boolean" },
{ name: VIDEO_QUIZ_SETTING, value: true, type: "boolean" },
{ name: "倍速", value: 2, type: "number", min: 1, max: 2, step: 0.5 }
]
},
{
name: "测试",
params: [{ name: "自动切题", value: true, type: "boolean" }]
}
]
}
},
otherParams: {
name: "其他",
params: [
{ name: "操作间隔", value: 3, type: "number", min: 1 },
{ name: "正确阈值", value: 85, type: "number" },
{ name: "相似阈值", value: 85, type: "number", min: 0, max: 100, step: 1 }
]
}
};
let globalConfig = defaultConfig;
const storedConfig = getStoredConfigText();
if (storedConfig) {
try {
const parsedStoredConfig = JSON.parse(storedConfig);
globalConfig = migrateConfig(parsedStoredConfig, defaultConfig);
} catch (error) {
console.error(error);
}
}
sanitizeAiConfig(globalConfig);
hxLockOtherParams(globalConfig);
persistConfig(globalConfig);
return globalConfig;
},
actions: {}
});
const formatDateTime = (dt) => {
dt.getFullYear();
dt.getMonth() + 1;
dt.getDate();
let hours = dt.getHours();
let minutes = dt.getMinutes();
let seconds = dt.getSeconds();
return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}`;
};
const pad = (n) => {
return n < 10 ? "0" + n : n.toString();
};
const getDateTime = () => {
let now = /* @__PURE__ */ new Date();
return formatDateTime(now);
};
const useLogStore = pinia.defineStore("logStore", {
state: () => ({
logList: []
}),
actions: {
addLog(message, type) {
const log = {
message,
time: getDateTime(),
type
};
this.logList.push(log);
}
}
});
const useQuestionStore = pinia.defineStore("questionStore", {
state: () => ({
questionList: []
}),
actions: {
addQuestion(question) {
this.questionList.push(question);
},
clearQuestion() {
this.questionList = [];
}
}
});
const sleep = (second) => {
return new Promise((resolve) => setTimeout(resolve, second * 1e3));
};
const AI_TYPE_NAME = {
"0": "单选题",
"1": "多选题",
"2": "填空题",
"3": "判断题",
"4": "简答题",
"5": "名词解释"
};
const AI_SYSTEM_PROMPT = [
"你是“D-Whaler”的中文网课答题引擎,请根据题目与选项给出正确答案。",
"必须只输出一个 JSON 对象,且仅含 answer 字段(数组),不要输出解释、前后缀或 markdown 代码块。规则:",
"1. 单选题:answer 仅含一个元素,为该正确选项的完整正文(与选项文字完全一致);",
"2. 多选题:answer 含全部正确选项的正文,顺序与选项一致;",
"3. 填空题:answer 每个元素按空的顺序填写;",
"4. 判断题:answer 为 {\"answer\":[\"正确\"]} 或 {\"answer\":[\"错误\"]};",
"5. 简答题、名词解释:answer 仅含一个元素,为完整、准确、简洁的参考答案。",
"选择题必须原样照抄选项正文,不要输出字母标号、不要改写或省略。务必保证答案准确。"
].join("\n");
/* v0.5.1:AI 一遍答不出来就重问,最多问这么多遍;连续失败即跳过该题。
后台被动运行,不占任何配置项,只在状态页留通知。 */
const HX_ASK_MAX_TRIES = 3;
const buildAIUserPrompt = (question) => {
const typeName = AI_TYPE_NAME[question.type] || "题目";
const stem = (question.searchText == null ? void 0 : question.searchText.stem) ?? question.title;
let content = `题型:${typeName}\n题目:${stem}`;
const options = (question.searchText == null ? void 0 : question.searchText.options) ?? question.optionsText ?? [];
if (Array.isArray(options) && options.length && (question.type === "0" || question.type === "1")) {
content += `\n选项:\n${options.map((opt, i) => `${String.fromCharCode(65 + i)}. ${opt}`).join("\n")}`;
}
return content;
};
const extractAnswerArray = (raw) => {
let t2 = String(raw || "").trim();
t2 = t2.replace(/^```(?:json)?/i, "").replace(/```$/, "").trim();
const s = t2.indexOf("{"), e = t2.lastIndexOf("}");
if (s !== -1 && e > s) {
try {
const parsed = JSON.parse(t2.slice(s, e + 1));
if (parsed && Array.isArray(parsed.answer) && parsed.answer.length) {
return parsed.answer.map((x) => String(x));
}
} catch (err) {}
}
return t2 ? [t2] : [];
};
const extractAnswerFromReasoning = (raw) => {
const text = String(raw || "");
const re = /\{[\s\S]*?\}/g;
let m;
while ((m = re.exec(text)) !== null) {
try {
const obj = JSON.parse(m[0]);
if (obj && Array.isArray(obj.answer) && obj.answer.length) return obj.answer.map((x) => String(x));
} catch (err) {}
}
return [];
};
const USAGE_STATS_KEY = "hx_usage_stats_v1";
// 单价单位:元 / 百万 tokens;来源 api-docs.deepseek.com/zh-cn/quick_start/pricing
// 高峰 = 北京时间周一至周五 09:00-12:00、14:00-18:00;其余为空闲时段(空闲价 = 高峰价的一半)
const MODEL_PRICES = {
"deepseek-flash": {
off: { hit: 0.02, miss: 1, out: 4 },
peak: { hit: 0.04, miss: 2, out: 8 }
},
"deepseek-v4-pro": {
off: { hit: 0.15, miss: 4.5, out: 13.5 },
peak: { hit: 0.3, miss: 9, out: 27 }
}
};
const HOLIDAYS = [];
const readUsageStats = () => {
try {
const raw = _GM_getValue(USAGE_STATS_KEY);
if (raw && typeof raw === "object") return raw;
if (typeof raw === "string" && raw) return JSON.parse(raw);
} catch (error) {
console.error(error);
}
return null;
};
const usageStore = vue.reactive({
requests: 0, ok: 0, failed: 0,
promptTokens: 0, completionTokens: 0,
cacheHitTokens: 0, cacheMissTokens: 0, totalTokens: 0,
elapsedMs: 0, cost: 0, uptimeMs: 0
});
(() => {
const stored = readUsageStats();
if (!stored) return;
Object.keys(usageStore).forEach((key) => {
const value = Number(stored[key]);
if (isFinite(value) && value >= 0) usageStore[key] = value;
});
})();
const persistUsageStats = () => {
try {
_GM_setValue(USAGE_STATS_KEY, JSON.stringify(Object.assign({}, usageStore)));
} catch (error) {
console.error(error);
}
};
const beijingDate = (timestamp) => new Date((timestamp ?? Date.now()) + 288e5);
// 高峰时段判定:北京时间 周一至周五 09:00-12:00、14:00-18:00
// 依据:https://api-docs.deepseek.com/zh-cn/quick_start/pricing (2026 版,已取代旧的 00:30-08:30 错峰规则)
const isPeakHour = (timestamp) => {
const d = beijingDate(timestamp);
const day = d.getUTCDay();
const stamp = d.getUTCFullYear() * 1e4 + (d.getUTCMonth() + 1) * 100 + d.getUTCDate();
if (day === 0 || day === 6 || HOLIDAYS.indexOf(stamp) >= 0) return false;
const hour = d.getUTCHours();
return hour >= 9 && hour < 12 || hour >= 14 && hour < 18;
};
const recordUsage = ({ model, usage, elapsedMs, success }) => {
usageStore.requests += 1;
if (success) usageStore.ok += 1;
else usageStore.failed += 1;
usageStore.elapsedMs += Math.max(Number(elapsedMs) || 0, 0);
if (usage) {
const num = (value) => isFinite(Number(value)) ? Number(value) : 0;
const promptTokens = num(usage.prompt_tokens);
const completionTokens = num(usage.completion_tokens);
const totalTokens = num(usage.total_tokens) || promptTokens + completionTokens;
const hitTokens = Math.max(num(usage.prompt_cache_hit_tokens), 0);
const missTokens = Math.max(num(usage.prompt_cache_miss_tokens) || promptTokens - hitTokens, 0);
const table = MODEL_PRICES[model] || MODEL_PRICES["deepseek-flash"];
const rate = isPeakHour() ? table.peak : table.off;
usageStore.promptTokens += promptTokens;
usageStore.completionTokens += completionTokens;
usageStore.cacheHitTokens += hitTokens;
usageStore.cacheMissTokens += missTokens;
usageStore.totalTokens += totalTokens;
usageStore.cost += (hitTokens * rate.hit + missTokens * rate.miss + completionTokens * rate.out) / 1e6;
}
persistUsageStats();
};
const formatTokenCount = (value) => {
const v = Number(value) || 0;
if (v <= 0) return "0";
if (v < 1e3) return String(Math.round(v));
if (v < 1e4) return (v / 1e3).toFixed(1) + "k";
if (v < 1e6) return (v / 1e4).toFixed(1) + "\u4e07";
return (v / 1e6).toFixed(2) + "M";
};
/* 花费精度(PRD v0.4.13):主显示固定两位小数,备注/悬浮提示传 digits=4 显示四位小数。
旧版按金额大小在 2 位与 4 位之间自动切换,导致同一格在不同花费下精度不一致。
digits=0 也支持(toFixed 语义),非法值一律回落到 2 位。 */
const formatCost = (value, digits) => {
const v = Math.max(Number(value) || 0, 0);
const n = Number(digits);
return "\u00a5" + v.toFixed(isFinite(n) && n >= 0 ? n : 2);
};
const HX_BUILD = "0.5.1";
const HX_DEFAULT_PET = "小鲸";
const HX_RUN_ID = "hx" + Date.now().toString(36) + Math.random().toString(36).slice(2, 6);
let hxShadow = null;
/* ── 「本次」用量:以「本次启用脚本」为界 ───────────────────────────
0.4.12 修复:基线由会话级存储(sessionStorage)改为**内存变量**。
旧实现把基线写进会话级存储,而它会在同一标签页里跨「刷新 / 关掉脚本再打开」存活,
于是重新启用时读回的是上一条基线 ⇒ 本次 = 累计 − 旧基线,永远不归零
(用户实测:重新启用之后它还是 20)。
现在基线只活在本页内存里:脚本每次启动都从当前累计值起算,
所以「本次」= 本次启用脚本后的用量,重新启用必定归零;
与「运行时长」同源同界,语义一致。
另:旧版「点本次格归零」绑在一个已于 0.4.10 改版时被移除的旧胶囊元素上,
属死代码;现在改绑到本次格自身的 data-hx-cell 标记。 */
let sessionBase = {
cost: usageStore.cost, totalTokens: usageStore.totalTokens, requests: usageStore.requests, at: Date.now()
};
const sessionUsage = () => ({
requests: Math.max(usageStore.requests - sessionBase.requests, 0),
totalTokens: Math.max(usageStore.totalTokens - sessionBase.totalTokens, 0),
cost: Math.max(usageStore.cost - sessionBase.cost, 0)
});
const resetSessionUsage = () => {
sessionBase = { cost: usageStore.cost, totalTokens: usageStore.totalTokens, requests: usageStore.requests, at: Date.now() };
try { usageTick.value += 1; } catch (error) {}
return sessionUsage();
};
/* 运行时长格式化:累计值可能跨很多天,所以补上「天」这一档 */
const formatUptime = (ms) => {
const total = Math.floor(Math.max(Number(ms) || 0, 0) / 1000);
if (total < 60) return total + " \u79d2";
const mins = Math.floor(total / 60);
if (mins < 60) return mins + " \u5206\u949f";
const hours = Math.floor(mins / 60);
if (hours < 24) return hours + " \u5c0f\u65f6 " + (mins % 60) + " \u5206";
return Math.floor(hours / 24) + " \u5929 " + (hours % 24) + " \u5c0f\u65f6";
};
/* ── 运行总时长(跨刷新累计)─────────────────────────────────────
PRD:新增「运行总时长」统计,展示在运行时长备注中。
与「本次」用量同界思路相反:这里要的是"装好脚本以后一共跑了多久",
所以随用量统计一起持久化(hx_usage_stats_v1.uptimeMs)。
每 60s 落一次盘,页面隐藏 / 关闭时补落一次,刷新不丢。
刻意忽略 >60s 的空档:机器休眠 / 断电期间不算运行时间。 */
let hxUptimeLastAt = Date.now();
let hxUptimeSavedAt = Date.now();
const hxUptimeTick = () => {
const now = Date.now();
const delta = now - hxUptimeLastAt;
hxUptimeLastAt = now;
if (delta > 0 && delta < 6e4)
usageStore.uptimeMs += delta;
if (now - hxUptimeSavedAt >= 6e4) {
hxUptimeSavedAt = now;
persistUsageStats();
}
return usageStore.uptimeMs;
};
const bindUptimeMeter = () => {
setInterval(() => { try { hxUptimeTick(); } catch (error) { /* 忽略 */ } }, 1e3);
try {
window.addEventListener("pagehide", () => { try { persistUsageStats(); } catch (error) { /* 忽略 */ } });
document.addEventListener("visibilitychange", () => {
try {
hxUptimeTick();
if (document.visibilityState === "hidden") persistUsageStats();
} catch (error) { /* 忽略 */ }
});
} catch (error) { /* 忽略 */ }
return true;
};
const buildUsageBarHtml = (store, peak) => {
const sess = sessionUsage();
const upMs = Math.max(Date.now() - (sessionBase.at || Date.now()), 0);
let favLv = 1;
let favName = "初见";
try {
const favTier = HX_FAV_TIERS[hxFavLevelIdx()] || HX_FAV_TIERS[0];
favLv = favTier.lv;
favName = favTier.name;
} catch (error) { /* 忽略:极早期渲染时好感度表可能尚未就绪,下一拍会自愈 */ }
const sessTitle = "本次启用脚本后:请求 " + sess.requests + " 次 · " + formatTokenCount(sess.totalTokens)
+ " token · " + formatCost(sess.cost, 4) + " | 点这一格归零";
const favTitle = "好感度 Lv." + favLv + " · " + favName + " | 累计花费 " + formatCost(store.cost, 4)
+ (peak ? " | 当前高峰时段" : " | 当前空闲时段");
const cells = [
["本次", String(sess.requests), sessTitle, ' data-hx-cell="session"'],
["Token", formatTokenCount(store.totalTokens), "脚本统计的累计 token 用量", ""],
["总花费", formatCost(store.cost), "脚本统计的累计花费 | 精确值 " + formatCost(store.cost, 4), ""]
].map(([label, value, tip, attr]) => '
' + label
+ '' + value + "
").join("");
return '' + cells + "
"
+ ''
+ ''
+ '好感度'
+ 'Lv.' + favLv + " · " + favName + ""
+ ""
+ '运行 '
+ formatUptime(upMs) + ""
+ "
";
};
/* ── DeepSeek 账户余额(空闲态展示在鲸娘下方)──────────────────────
接口:GET https://api.deepseek.com/user/balance(Authorization: Bearer )
返回:is_available + balance_infos[](currency / total_balance / granted_balance / topped_up_balance) */
const DEEPSEEK_BALANCE_URL = "https://api.deepseek.com/user/balance";
const readStoredApiKey = () => {
try {
const text = getStoredConfigText();
if (!text) return "";
const parsed = JSON.parse(text);
const key = parsed && parsed.ai && parsed.ai.deepseek ? parsed.ai.deepseek.apiKey : "";
return typeof key === "string" ? key.trim() : "";
} catch (error) { return ""; }
};
const balanceStore = vue.reactive({
state: "idle", currency: "CNY", total: null, granted: null, topped: null,
available: null, msg: "", at: 0
});
let balanceTimer = null;
let hxStatusTimer = null;
const fetchBalance = () => {
const apiKey = readStoredApiKey();
if (!apiKey) {
balanceStore.state = "nokey";
balanceStore.msg = "未配置 API Key";
balanceStore.total = null;
return;
}
if (typeof _GM_xmlhttpRequest !== "function") {
balanceStore.state = "err";
balanceStore.msg = "当前环境不支持跨域请求";
return;
}
balanceStore.state = "loading";
_GM_xmlhttpRequest({
url: DEEPSEEK_BALANCE_URL,
method: "GET",
headers: { Accept: "application/json", Authorization: "Bearer " + apiKey },
timeout: 15e3,
onload: (response) => {
let parsed = null;
try { parsed = JSON.parse(response.responseText); } catch (error) {}
const infos = parsed && Array.isArray(parsed.balance_infos) ? parsed.balance_infos : null;
if (response.status >= 200 && response.status < 300 && infos && infos.length) {
const info = infos.find((item) => item && String(item.currency).toUpperCase() === "CNY") || infos[0];
balanceStore.currency = String(info.currency || "CNY").toUpperCase();
balanceStore.total = Number(info.total_balance);
balanceStore.granted = Number(info.granted_balance);
balanceStore.topped = Number(info.topped_up_balance);
balanceStore.available = parsed.is_available !== false;
balanceStore.msg = "";
balanceStore.at = Date.now();
balanceStore.state = "ok";
return;
}
balanceStore.state = "err";
balanceStore.msg = response.status === 401 ? "API Key 无效或已过期" : ("HTTP " + response.status);
},
onerror: () => { balanceStore.state = "err"; balanceStore.msg = "网络错误"; },
ontimeout: () => { balanceStore.state = "err"; balanceStore.msg = "请求超时"; }
});
};
const formatMoney = (value, currency) => {
const v = Number(value);
if (!isFinite(v)) return "—";
const sign = String(currency || "CNY").toUpperCase() === "USD" ? "$" : "¥";
if (v === 0) return sign + "0";
return sign + (v < 1 ? v.toFixed(4) : v.toFixed(2));
};
const clockText = (timestamp) => {
if (!timestamp) return "";
const d = new Date(timestamp);
return String(d.getHours()).padStart(2, "0") + ":" + String(d.getMinutes()).padStart(2, "0");
};
const heroBalanceHtml = vue.computed(() => {
const state = balanceStore.state;
const head = '账户余额';
if (state === "nokey")
return ''
+ head + '未配置 Key';
if (state === "loading" || state === "idle")
return ''
+ head + '读取中';
if (state === "err")
return '' + head + '查询失败'
+ '点击重试';
const money = formatMoney(balanceStore.total, balanceStore.currency);
const low = balanceStore.available === false || (balanceStore.total !== null && balanceStore.total <= 1);
const title = "可用余额 " + money
+ "(赠送 " + formatMoney(balanceStore.granted, balanceStore.currency)
+ " / 充值 " + formatMoney(balanceStore.topped, balanceStore.currency) + ")"
+ (balanceStore.at ? " · 更新于 " + clockText(balanceStore.at) : "")
+ " · 点击刷新";
return '' + head
+ '' + money + ""
+ (low ? '余额偏低' : "")
+ "";
});
const usageTick = vue.ref(0);
setInterval(() => {
usageTick.value += 1;
}, 2e4);
const usageBarHtml = vue.computed(() => {
void usageTick.value;
return buildUsageBarHtml(usageStore, isPeakHour());
});
const callAIChat = ({ url, apiKey, body }) => new Promise((resolve) => {
if (typeof _GM_xmlhttpRequest !== "function") {
resolve({ kind: "fail", msg: "当前脚本环境未提供 GM_xmlhttpRequest,请使用篡改猴/脚本猫安装本脚本" });
return;
}
const headers = { "Content-Type": "application/json" };
const startedAt = Date.now();
if (apiKey) headers["Authorization"] = `Bearer ${apiKey}`;
_GM_xmlhttpRequest({
url,
method: "POST",
headers,
data: JSON.stringify(body),
timeout: 18e4,
onload: (response) => {
let parsed = null;
try { parsed = JSON.parse(response.responseText); } catch (err) {}
if (response.status >= 200 && response.status < 300 && parsed && parsed.choices) {
const choice = parsed.choices[0] || {};
const message = choice.message || {};
let values = extractAnswerArray(message.content || "");
if (!values.length && message.reasoning_content) values = extractAnswerFromReasoning(message.reasoning_content);
recordUsage({ model: body && body.model, usage: parsed.usage, elapsedMs: Date.now() - startedAt, success: values.length > 0 });
if (!values.length) {
if (choice.finish_reason === "length") return resolve({ kind: "fail", msg: "输出 token 不足,答案被截断,请重试或改用更快的模型" });
return resolve({ kind: "fail", msg: "AI 未返回有效答案,请重试" });
}
return resolve({ kind: "ok", values });
}
recordUsage({ model: body && body.model, usage: null, elapsedMs: Date.now() - startedAt, success: false });
const m = parsed && parsed.error ? parsed.error.message : "";
let msg = m || `请求失败(HTTP ${response.status})`;
if (response.status === 401) msg = "API Key 无效或已过期,请检查";
else if (response.status === 402) msg = "账户余额不足,请充值后再用";
else if (response.status === 429) msg = "请求过于频繁,请稍后再试";
resolve({ kind: "fail", msg });
},
onerror: () => {
recordUsage({ model: body && body.model, usage: null, elapsedMs: Date.now() - startedAt, success: false });
resolve({ kind: "fail", msg: "网络错误,无法连接 AI 服务" });
},
ontimeout: () => {
recordUsage({ model: body && body.model, usage: null, elapsedMs: Date.now() - startedAt, success: false });
resolve({ kind: "fail", msg: "AI 请求超时,请稍后重试" });
}
});
});
const getAnswer = async (question, context = {}) => {
const isCurrent = () => {
var _a2, _b2;
return !((_a2 = context.signal) == null ? void 0 : _a2.aborted) && (((_b2 = context.isCurrent) == null ? void 0 : _b2.call(context)) ?? true);
};
if (!isCurrent()) return apiError("请求已取消");
const configStore = useConfigStore();
const ai = configStore.ai;
const messages = [
{ role: "system", content: AI_SYSTEM_PROMPT },
{ role: "user", content: buildAIUserPrompt(question) }
];
const d = ai.deepseek || {};
const apiKey = String(d.apiKey || "").trim();
if (!apiKey) return apiError("未配置 DeepSeek API Key,请前往“答题”填写");
const model = ALLOWED_AI_MODELS.includes(d.model) ? d.model : DEFAULT_AI_MODEL;
const url = DEEPSEEK_API_URL;
const jsonModeModels = ["deepseek-flash"];
const supportsJsonMode = jsonModeModels.includes(model);
const body = { model, messages, max_tokens: supportsJsonMode ? 4096 : 8192 };
if (supportsJsonMode) {
body.temperature = 0.1;
body.response_format = { type: "json_object" };
}
if (!context.skipDelay) await sleep(configStore.otherParams.params[0].value);
if (!isCurrent()) return apiError("请求已取消");
const result = await callAIChat({ url, apiKey, body });
if (result.kind !== "ok") return apiError(result.msg);
const stem = (question.searchText == null ? void 0 : question.searchText.stem) ?? question.title;
return {
success: true,
data: { items: [{ stem, answer: { kind: "ai", values: result.values } }] },
error: null,
meta: null
};
};
const _hoisted_1$5 = { class: "script-home" };
const ANSWER_TAB_NAME$1 = "1";
const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
__name: "index",
props: {
logList: {}
},
setup(__props) {
const configStore = useConfigStore();
const handleLogClick = (event) => {
const target = event.target;
const actionElement = target == null ? void 0 : target.closest('[data-log-action="show-answer-tab"]');
if (!actionElement)
return;
event.preventDefault();
configStore.menuIndex = ANSWER_TAB_NAME$1;
};
return (_ctx, _cache) => {
const _component_el_text = vue.resolveComponent("el-text");
const _component_el_divider = vue.resolveComponent("el-divider");
const _component_el_scrollbar = vue.resolveComponent("el-scrollbar");
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
vue.createVNode(_component_el_scrollbar, {
always: "",
class: "log",
"max-height": "230px",
onClick: handleLogClick
}, {
default: vue.withCtx(() => [
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.logList, (item, index) => {
return vue.openBlock(), vue.createElementBlock("div", { key: index }, [
vue.createVNode(_component_el_text, {
class: "log-time",
size: "small",
type: "info"
}, {
default: vue.withCtx(() => [
vue.createTextVNode(vue.toDisplayString(item.time), 1)
]),
_: 2
}, 1024),
vue.createVNode(_component_el_text, null, {
default: vue.withCtx(() => [
vue.createTextVNode(" ")
]),
_: 1
}),
vue.createVNode(_component_el_text, {
type: item.type ? item.type : "primary",
size: "small",
innerHTML: item.message
}, null, 8, ["type", "innerHTML"]),
vue.createVNode(_component_el_divider, {
class: "log-divider",
"border-style": "dashed"
})
]);
}), 128))
]),
_: 1
})
]);
};
}
});
const _hoisted_1$4 = { class: "setting" };
const _hoisted_2$4 = { class: "setting-section-title" };
const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
__name: "index",
props: {
globalConfig: {}
},
setup(__props) {
return (_ctx, _cache) => {
const _component_el_divider = vue.resolveComponent("el-divider");
const _component_el_checkbox = vue.resolveComponent("el-checkbox");
const _component_el_switch = vue.resolveComponent("el-switch");
const _component_el_input_number = vue.resolveComponent("el-input-number");
const _component_el_form_item = vue.resolveComponent("el-form-item");
const _component_el_input = vue.resolveComponent("el-input");
const _component_el_select = vue.resolveComponent("el-select");
const _component_el_option = vue.resolveComponent("el-option");
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [
vue.createElementVNode("div", { class: "setting-ai" }, [
vue.createVNode(_component_el_divider, { "border-style": "dashed" }, {
default: vue.withCtx(() => [
vue.createElementVNode("span", { class: "setting-section-title" }, "AI")
]),
_: 1
}),
vue.createVNode(_component_el_form_item, { class: "setting-ai-field", label: "API Key" }, {
default: vue.withCtx(() => [
vue.createVNode(_component_el_input, {
modelValue: _ctx.globalConfig.ai.deepseek.apiKey,
"onUpdate:modelValue": (v) => _ctx.globalConfig.ai.deepseek.apiKey = v,
type: "password",
"show-password": true,
placeholder: "DeepSeek API Key",
clearable: true,
size: "small"
}, null, 8, ["modelValue"])
]),
_: 2
}, 1032, ["label"]),
vue.createVNode(_component_el_form_item, { class: "setting-ai-field", label: "模型" }, {
default: vue.withCtx(() => [
vue.createVNode(_component_el_select, {
modelValue: _ctx.globalConfig.ai.deepseek.model,
"onUpdate:modelValue": (v) => _ctx.globalConfig.ai.deepseek.model = v,
size: "small"
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_el_option, { value: "deepseek-v4-pro", label: "DeepSeek V4 Pro" }),
vue.createVNode(_component_el_option, { value: "deepseek-flash", label: "DeepSeek Flash" })
]),
_: 1
}, 8, ["modelValue"])
]),
_: 2
}, 1032, ["label"]),
vue.createVNode(_component_el_form_item, { class: "setting-ai-field setting-pet-field", label: "小名" }, {
default: vue.withCtx(() => [
vue.createVNode(_component_el_input, {
modelValue: _ctx.globalConfig.ai.petName,
"onUpdate:modelValue": (v) => _ctx.globalConfig.ai.petName = v,
placeholder: "给小鲸取个小名",
clearable: true,
maxlength: "12",
size: "small"
}, null, 8, ["modelValue"])
]),
_: 2
}, 1032, ["label"])
]),
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.globalConfig.platformParams[_ctx.globalConfig.platformName].parts, (part) => {
return vue.openBlock(), vue.createElementBlock("div", {
key: part.name
}, [
vue.createVNode(_component_el_divider, { "border-style": "dashed" }, {
default: vue.withCtx(() => [
vue.createElementVNode("span", _hoisted_2$4, vue.toDisplayString(part.name), 1)
]),
_: 2
}, 1024),
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(part.params, (param) => {
return vue.openBlock(), vue.createElementBlock(vue.Fragment, {
key: param.name
}, [
param.type === "boolean" ? (vue.openBlock(), vue.createBlock(_component_el_form_item, {
key: 0,
class: "setting-switch",
label: param.name
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_el_switch, {
modelValue: param.value,
"onUpdate:modelValue": ($event) => param.value = $event,
size: "small"
}, null, 8, ["modelValue", "onUpdate:modelValue"])
]),
_: 2
}, 1032, ["label"])) : (vue.openBlock(), vue.createBlock(_component_el_form_item, {
key: 1,
label: param.name,
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_el_input_number, {
modelValue: param.value,
"onUpdate:modelValue": ($event) => param.value = $event,
min: param.min ?? 3e3,
max: param.max,
step: param.step ?? 1e3,
"controls-position": "right",
size: "small"
}, null, 8, ["modelValue", "onUpdate:modelValue", "min", "max", "step"])
]),
_: 2
}, 1032, ["label"]))
], 64);
}), 128))
]);
}), 128))
]);
};
}
});
const _hoisted_1$3 = { class: "question_table" };
const _hoisted_2$3 = /* @__PURE__ */ vue.createStaticVNode('已答查询失败
', 1);
const _hoisted_3$1 = ["innerHTML"];
const _hoisted_4$2 = { key: 0 };
const _hoisted_6 = ["innerHTML"];
const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
__name: "QuestionTable",
props: {
questionList: {}
},
setup(__props) {
const getDisplayTitle = (question) => {
var _a;
return ((_a = question.searchText) == null ? void 0 : _a.stem) || question.title;
};
/* 作答状态(v0.5.1 收口为三种):已答 success / 查询 searching / 失败 error。
原「等待 pending」已并入「查询」——题目在排队与正在查询,对主人是同一件事,
所以只在唯一收口点做归一;历史遗留的 answerStatus = "pending" 也一并归入。 */
const getAnswerStatus = (question) => {
const status = question.answerStatus ?? (question.answer.length ? "success" : "searching");
return status === "pending" ? "searching" : status;
};
return (_ctx, _cache) => {
const ElTable = vue.resolveComponent("el-table");
const ElTableColumn = vue.resolveComponent("el-table-column");
return vue.openBlock(), vue.createElementBlock("div", { class: "whale-page" }, [
vue.createElementVNode("div", {
class: vue.normalizeClass(["whale-hero", _ctx.questionList.length ? "is-busy" : "is-idle"])
}, [
vue.createElementVNode("img", {
class: "whale-hero__avatar",
src: HX_LOGO_SRC,
alt: "小鲸"
}),
vue.createElementVNode("div", { class: "whale-hero__bubble" }, [
vue.createElementVNode("span", {
class: "whale-hero__text"
}, vue.toDisplayString(_ctx.questionList.length ? "主人别急,马上就好" : "小鲸正在吃白饭"), 1)
]),
vue.createElementVNode("div", { class: "whale-hero__balance", innerHTML: heroBalanceHtml.value }, null, 8, ["innerHTML"])
], 2),
vue.withDirectives(vue.createElementVNode("div", _hoisted_1$3, [
_hoisted_2$3,
vue.createElementVNode("div", { class: "question-list" }, [
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.questionList, (row, idx) => {
return vue.openBlock(), vue.createElementBlock("div", {
key: idx,
class: "question-card"
}, [
vue.createElementVNode("span", { class: "question-index" }, vue.toDisplayString(idx + 1), 1),
vue.createElementVNode("span", { class: "question-title", innerHTML: getDisplayTitle(row) }, null, 8, _hoisted_3$1),
vue.createElementVNode("div", {
class: vue.normalizeClass(["answer-result", `answer-result--${getAnswerStatus(row)}`])
}, [
getAnswerStatus(row) === "searching" ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$2, "查询")) : (vue.openBlock(), vue.createElementBlock("div", {
key: 1,
innerHTML: row.answer.join()
}, null, 8, _hoisted_6))
], 2)
]);
}), 128))
])
], 512), [
[vue.vShow, _ctx.questionList.length]
]),
vue.createElementVNode("div", { class: "usage-bar", innerHTML: usageBarHtml.value }, null, 8, ["innerHTML"])
], 0);
};
}
});
const _export_sfc = (sfc, props) => {
const target = sfc.__vccOpts || sfc;
for (const [key, val] of props) {
target[key] = val;
}
return target;
};
const _sfc_main$5 = {};
const _hoisted_1$2 = {
class: "guide-page",
"aria-label": "引导",
tabindex: "0"
};
const _hoisted_2$2 = /* @__PURE__ */ vue.createStaticVNode('01
填写 DeepSeek API Key
前往 platform.deepseek.com 注册并创建 sk- 开头的 API Key,粘贴到本面板「配置」页的 API Key 一栏即可。模型已默认选中 Flash,无需修改;刷新页面后脚本自动开始答题。
02
提高准确率
遇到不确定的题目,可切换模型后重试;连续多题失败时先手动做一题,脚本会参考历史答案。题目若含图片或公式,尽量保持选项文字完整,有助于判定。
', 2);
const DONATE_IMG_SRC = decryptDonateImage();
const DONATE_CARD_HTML = '赞助开发 · 随缘打赏
如果脚本帮到了你,欢迎扫码请作者喝杯奶茶~
· 单人打赏上限 1.88 元。
· 矿大北京的学弟学妹们不要白嫖哦。

打开支付宝「扫一扫」
';
const _hoisted_donate9 = /* @__PURE__ */ vue.createVNode("section", {
class: "donate-card",
style: {
margin: "14px 0 6px",
padding: "13px"
},
innerHTML: DONATE_CARD_HTML
}, null, 16);
const _hoisted_4$1 = [
_hoisted_2$2,
_hoisted_donate9
];
function _sfc_render$1(_ctx, _cache) {
return vue.openBlock(), vue.createElementBlock("section", _hoisted_1$2, _hoisted_4$1);
}
const Tutorial = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render$1]]);
const _sfc_main$9 = {};
const _hoisted_1$9 = {
class: "guide-page",
"aria-label": "使用须知",
tabindex: "0"
};
const _hoisted_2$9 = /* @__PURE__ */ vue.createStaticVNode('01
学习与研究用途
本脚本仅供个人学习与研究使用。请遵守所在学校的教学管理规定、学术诚信要求,以及所用平台的用户协议与服务条款,勿用于代写作业、替考等违规用途。因违反上述规定产生的一切后果,由使用者自行承担。
02
账号安全
脚本不会收集、上传或保存你的账号密码。请自行保管好学习通账号,切勿将 API Key 泄露给他人。
03
数据与隐私
脚本仅在你主动使用 AI 答题时,向 DeepSeek 接口发送题目与选项文本;不会上传你的学习记录、浏览历史或个人信息。
04
费用与额度
AI 答题调用 DeepSeek 官方接口,相关费用由 DeepSeek 平台按你的账户实际用量计费,脚本作者不承担任何费用。
05
风险自担
使用脚本可能与相应平台产生冲突,由此产生的一切后果由使用者自行承担。
06
开发者权利
本脚本的最终解释权归脚本开发者所有;发现问题可通过QQ Group:1128950753,或项目仓库反馈。
', 3);
const _hoisted_3$9 = [
_hoisted_2$9
];
function _sfc_render$9(_ctx, _cache) {
return vue.openBlock(), vue.createElementBlock("section", _hoisted_1$9, _hoisted_3$9);
}
const ScriptTip = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render$9]]);
function isFunction(value) {
return typeof value === "function";
}
function hasLift(source) {
return isFunction(source === null || source === void 0 ? void 0 : source.lift);
}
function operate(init) {
return function(source) {
if (hasLift(source)) {
return source.lift(function(liftedSource) {
try {
return init(liftedSource, this);
} catch (err) {
this.error(err);
}
});
}
throw new TypeError("Unable to lift unknown Observable type");
};
}
var extendStatics = function(d, b) {
extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {
d2.__proto__ = b2;
} || function(d2, b2) {
for (var p in b2)
if (Object.prototype.hasOwnProperty.call(b2, p))
d2[p] = b2[p];
};
return extendStatics(d, b);
};
function __extends(d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() {
this.constructor = d;
}
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) {
return value instanceof P ? value : new P(function(resolve) {
resolve(value);
});
}
return new (P || (P = Promise))(function(resolve, reject) {
function fulfilled(value) {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
}
function rejected(value) {
try {
step(generator["throw"](value));
} catch (e) {
reject(e);
}
}
function step(result) {
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
function __generator(thisArg, body) {
var _ = { label: 0, sent: function() {
if (t[0] & 1)
throw t[1];
return t[1];
}, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() {
return this;
}), g;
function verb(n) {
return function(v) {
return step([n, v]);
};
}
function step(op) {
if (f)
throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _)
try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
return t;
if (y = 0, t)
op = [op[0] & 2, t.value];
switch (op[0]) {
case 0:
case 1:
t = op;
break;
case 4:
_.label++;
return { value: op[1], done: false };
case 5:
_.label++;
y = op[1];
op = [0];
continue;
case 7:
op = _.ops.pop();
_.trys.pop();
continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
_ = 0;
continue;
}
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
_.label = op[1];
break;
}
if (op[0] === 6 && _.label < t[1]) {
_.label = t[1];
t = op;
break;
}
if (t && _.label < t[2]) {
_.label = t[2];
_.ops.push(op);
break;
}
if (t[2])
_.ops.pop();
_.trys.pop();
continue;
}
op = body.call(thisArg, _);
} catch (e) {
op = [6, e];
y = 0;
} finally {
f = t = 0;
}
if (op[0] & 5)
throw op[1];
return { value: op[0] ? op[1] : void 0, done: true };
}
}
function __values(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m)
return m.call(o);
if (o && typeof o.length === "number")
return {
next: function() {
if (o && i >= o.length)
o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
}
function __read(o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m)
return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done)
ar.push(r.value);
} catch (error) {
e = { error };
} finally {
try {
if (r && !r.done && (m = i["return"]))
m.call(i);
} finally {
if (e)
throw e.error;
}
}
return ar;
}
function __spreadArray(to, from2, pack) {
if (pack || arguments.length === 2)
for (var i = 0, l = from2.length, ar; i < l; i++) {
if (ar || !(i in from2)) {
if (!ar)
ar = Array.prototype.slice.call(from2, 0, i);
ar[i] = from2[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from2));
}
function __await(v) {
return this instanceof __await ? (this.v = v, this) : new __await(v);
}
function __asyncGenerator(thisArg, _arguments, generator) {
if (!Symbol.asyncIterator)
throw new TypeError("Symbol.asyncIterator is not defined.");
var g = generator.apply(thisArg, _arguments || []), i, q = [];
return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() {
return this;
}, i;
function awaitReturn(f) {
return function(v) {
return Promise.resolve(v).then(f, reject);
};
}
function verb(n, f) {
if (g[n]) {
i[n] = function(v) {
return new Promise(function(a, b) {
q.push([n, v, a, b]) > 1 || resume(n, v);
});
};
if (f)
i[n] = f(i[n]);
}
}
function resume(n, v) {
try {
step(g[n](v));
} catch (e) {
settle(q[0][3], e);
}
}
function step(r) {
r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
}
function fulfill(value) {
resume("next", value);
}
function reject(value) {
resume("throw", value);
}
function settle(f, v) {
if (f(v), q.shift(), q.length)
resume(q[0][0], q[0][1]);
}
}
function __asyncValues(o) {
if (!Symbol.asyncIterator)
throw new TypeError("Symbol.asyncIterator is not defined.");
var m = o[Symbol.asyncIterator], i;
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() {
return this;
}, i);
function verb(n) {
i[n] = o[n] && function(v) {
return new Promise(function(resolve, reject) {
v = o[n](v), settle(resolve, reject, v.done, v.value);
});
};
}
function settle(resolve, reject, d, v) {
Promise.resolve(v).then(function(v2) {
resolve({ value: v2, done: d });
}, reject);
}
}
typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
var e = new Error(message);
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
};
var isArrayLike = function(x) {
return x && typeof x.length === "number" && typeof x !== "function";
};
function isPromise(value) {
return isFunction(value === null || value === void 0 ? void 0 : value.then);
}
function createErrorClass(createImpl) {
var _super = function(instance) {
Error.call(instance);
instance.stack = new Error().stack;
};
var ctorFunc = createImpl(_super);
ctorFunc.prototype = Object.create(Error.prototype);
ctorFunc.prototype.constructor = ctorFunc;
return ctorFunc;
}
var UnsubscriptionError = createErrorClass(function(_super) {
return function UnsubscriptionErrorImpl(errors) {
_super(this);
this.message = errors ? errors.length + " errors occurred during unsubscription:\n" + errors.map(function(err, i) {
return i + 1 + ") " + err.toString();
}).join("\n ") : "";
this.name = "UnsubscriptionError";
this.errors = errors;
};
});
function arrRemove(arr, item) {
if (arr) {
var index = arr.indexOf(item);
0 <= index && arr.splice(index, 1);
}
}
var Subscription = function() {
function Subscription2(initialTeardown) {
this.initialTeardown = initialTeardown;
this.closed = false;
this._parentage = null;
this._finalizers = null;
}
Subscription2.prototype.unsubscribe = function() {
var e_1, _a, e_2, _b;
var errors;
if (!this.closed) {
this.closed = true;
var _parentage = this._parentage;
if (_parentage) {
this._parentage = null;
if (Array.isArray(_parentage)) {
try {
for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {
var parent_1 = _parentage_1_1.value;
parent_1.remove(this);
}
} catch (e_1_1) {
e_1 = { error: e_1_1 };
} finally {
try {
if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return))
_a.call(_parentage_1);
} finally {
if (e_1)
throw e_1.error;
}
}
} else {
_parentage.remove(this);
}
}
var initialFinalizer = this.initialTeardown;
if (isFunction(initialFinalizer)) {
try {
initialFinalizer();
} catch (e) {
errors = e instanceof UnsubscriptionError ? e.errors : [e];
}
}
var _finalizers = this._finalizers;
if (_finalizers) {
this._finalizers = null;
try {
for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {
var finalizer = _finalizers_1_1.value;
try {
execFinalizer(finalizer);
} catch (err) {
errors = errors !== null && errors !== void 0 ? errors : [];
if (err instanceof UnsubscriptionError) {
errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));
} else {
errors.push(err);
}
}
}
} catch (e_2_1) {
e_2 = { error: e_2_1 };
} finally {
try {
if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return))
_b.call(_finalizers_1);
} finally {
if (e_2)
throw e_2.error;
}
}
}
if (errors) {
throw new UnsubscriptionError(errors);
}
}
};
Subscription2.prototype.add = function(teardown) {
var _a;
if (teardown && teardown !== this) {
if (this.closed) {
execFinalizer(teardown);
} else {
if (teardown instanceof Subscription2) {
if (teardown.closed || teardown._hasParent(this)) {
return;
}
teardown._addParent(this);
}
(this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);
}
}
};
Subscription2.prototype._hasParent = function(parent) {
var _parentage = this._parentage;
return _parentage === parent || Array.isArray(_parentage) && _parentage.includes(parent);
};
Subscription2.prototype._addParent = function(parent) {
var _parentage = this._parentage;
this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;
};
Subscription2.prototype._removeParent = function(parent) {
var _parentage = this._parentage;
if (_parentage === parent) {
this._parentage = null;
} else if (Array.isArray(_parentage)) {
arrRemove(_parentage, parent);
}
};
Subscription2.prototype.remove = function(teardown) {
var _finalizers = this._finalizers;
_finalizers && arrRemove(_finalizers, teardown);
if (teardown instanceof Subscription2) {
teardown._removeParent(this);
}
};
Subscription2.EMPTY = function() {
var empty = new Subscription2();
empty.closed = true;
return empty;
}();
return Subscription2;
}();
Subscription.EMPTY;
function isSubscription(value) {
return value instanceof Subscription || value && "closed" in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe);
}
function execFinalizer(finalizer) {
if (isFunction(finalizer)) {
finalizer();
} else {
finalizer.unsubscribe();
}
}
var config = {
onUnhandledError: null,
onStoppedNotification: null,
Promise: void 0,
useDeprecatedSynchronousErrorHandling: false,
useDeprecatedNextContext: false
};
var timeoutProvider = {
setTimeout: function(handler, timeout) {
var args = [];
for (var _i = 2; _i < arguments.length; _i++) {
args[_i - 2] = arguments[_i];
}
return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args)));
},
clearTimeout: function(handle) {
return (clearTimeout)(handle);
},
delegate: void 0
};
function reportUnhandledError(err) {
timeoutProvider.setTimeout(function() {
{
throw err;
}
});
}
function noop() {
}
function errorContext(cb) {
{
cb();
}
}
var Subscriber = function(_super) {
__extends(Subscriber2, _super);
function Subscriber2(destination) {
var _this = _super.call(this) || this;
_this.isStopped = false;
if (destination) {
_this.destination = destination;
if (isSubscription(destination)) {
destination.add(_this);
}
} else {
_this.destination = EMPTY_OBSERVER;
}
return _this;
}
Subscriber2.create = function(next, error, complete) {
return new SafeSubscriber(next, error, complete);
};
Subscriber2.prototype.next = function(value) {
if (this.isStopped)
;
else {
this._next(value);
}
};
Subscriber2.prototype.error = function(err) {
if (this.isStopped)
;
else {
this.isStopped = true;
this._error(err);
}
};
Subscriber2.prototype.complete = function() {
if (this.isStopped)
;
else {
this.isStopped = true;
this._complete();
}
};
Subscriber2.prototype.unsubscribe = function() {
if (!this.closed) {
this.isStopped = true;
_super.prototype.unsubscribe.call(this);
this.destination = null;
}
};
Subscriber2.prototype._next = function(value) {
this.destination.next(value);
};
Subscriber2.prototype._error = function(err) {
try {
this.destination.error(err);
} finally {
this.unsubscribe();
}
};
Subscriber2.prototype._complete = function() {
try {
this.destination.complete();
} finally {
this.unsubscribe();
}
};
return Subscriber2;
}(Subscription);
var _bind = Function.prototype.bind;
function bind(fn, thisArg) {
return _bind.call(fn, thisArg);
}
var ConsumerObserver = function() {
function ConsumerObserver2(partialObserver) {
this.partialObserver = partialObserver;
}
ConsumerObserver2.prototype.next = function(value) {
var partialObserver = this.partialObserver;
if (partialObserver.next) {
try {
partialObserver.next(value);
} catch (error) {
handleUnhandledError(error);
}
}
};
ConsumerObserver2.prototype.error = function(err) {
var partialObserver = this.partialObserver;
if (partialObserver.error) {
try {
partialObserver.error(err);
} catch (error) {
handleUnhandledError(error);
}
} else {
handleUnhandledError(err);
}
};
ConsumerObserver2.prototype.complete = function() {
var partialObserver = this.partialObserver;
if (partialObserver.complete) {
try {
partialObserver.complete();
} catch (error) {
handleUnhandledError(error);
}
}
};
return ConsumerObserver2;
}();
var SafeSubscriber = function(_super) {
__extends(SafeSubscriber2, _super);
function SafeSubscriber2(observerOrNext, error, complete) {
var _this = _super.call(this) || this;
var partialObserver;
if (isFunction(observerOrNext) || !observerOrNext) {
partialObserver = {
next: observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : void 0,
error: error !== null && error !== void 0 ? error : void 0,
complete: complete !== null && complete !== void 0 ? complete : void 0
};
} else {
var context_1;
if (_this && config.useDeprecatedNextContext) {
context_1 = Object.create(observerOrNext);
context_1.unsubscribe = function() {
return _this.unsubscribe();
};
partialObserver = {
next: observerOrNext.next && bind(observerOrNext.next, context_1),
error: observerOrNext.error && bind(observerOrNext.error, context_1),
complete: observerOrNext.complete && bind(observerOrNext.complete, context_1)
};
} else {
partialObserver = observerOrNext;
}
}
_this.destination = new ConsumerObserver(partialObserver);
return _this;
}
return SafeSubscriber2;
}(Subscriber);
function handleUnhandledError(error) {
{
reportUnhandledError(error);
}
}
function defaultErrorHandler(err) {
throw err;
}
var EMPTY_OBSERVER = {
closed: true,
next: noop,
error: defaultErrorHandler,
complete: noop
};
var observable = function() {
return typeof Symbol === "function" && Symbol.observable || "@@observable";
}();
function identity(x) {
return x;
}
function pipeFromArray(fns) {
if (fns.length === 0) {
return identity;
}
if (fns.length === 1) {
return fns[0];
}
return function piped(input) {
return fns.reduce(function(prev, fn) {
return fn(prev);
}, input);
};
}
var Observable = function() {
function Observable2(subscribe) {
if (subscribe) {
this._subscribe = subscribe;
}
}
Observable2.prototype.lift = function(operator) {
var observable2 = new Observable2();
observable2.source = this;
observable2.operator = operator;
return observable2;
};
Observable2.prototype.subscribe = function(observerOrNext, error, complete) {
var _this = this;
var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);
errorContext(function() {
var _a = _this, operator = _a.operator, source = _a.source;
subscriber.add(operator ? operator.call(subscriber, source) : source ? _this._subscribe(subscriber) : _this._trySubscribe(subscriber));
});
return subscriber;
};
Observable2.prototype._trySubscribe = function(sink) {
try {
return this._subscribe(sink);
} catch (err) {
sink.error(err);
}
};
Observable2.prototype.forEach = function(next, promiseCtor) {
var _this = this;
promiseCtor = getPromiseCtor(promiseCtor);
return new promiseCtor(function(resolve, reject) {
var subscriber = new SafeSubscriber({
next: function(value) {
try {
next(value);
} catch (err) {
reject(err);
subscriber.unsubscribe();
}
},
error: reject,
complete: resolve
});
_this.subscribe(subscriber);
});
};
Observable2.prototype._subscribe = function(subscriber) {
var _a;
return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);
};
Observable2.prototype[observable] = function() {
return this;
};
Observable2.prototype.pipe = function() {
var operations = [];
for (var _i = 0; _i < arguments.length; _i++) {
operations[_i] = arguments[_i];
}
return pipeFromArray(operations)(this);
};
Observable2.prototype.toPromise = function(promiseCtor) {
var _this = this;
promiseCtor = getPromiseCtor(promiseCtor);
return new promiseCtor(function(resolve, reject) {
var value;
_this.subscribe(function(x) {
return value = x;
}, function(err) {
return reject(err);
}, function() {
return resolve(value);
});
});
};
Observable2.create = function(subscribe) {
return new Observable2(subscribe);
};
return Observable2;
}();
function getPromiseCtor(promiseCtor) {
var _a;
return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;
}
function isObserver(value) {
return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);
}
function isSubscriber(value) {
return value && value instanceof Subscriber || isObserver(value) && isSubscription(value);
}
function isInteropObservable(input) {
return isFunction(input[observable]);
}
function isAsyncIterable(obj) {
return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);
}
function createInvalidObservableTypeError(input) {
return new TypeError("You provided " + (input !== null && typeof input === "object" ? "an invalid object" : "'" + input + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.");
}
function getSymbolIterator() {
if (typeof Symbol !== "function" || !Symbol.iterator) {
return "@@iterator";
}
return Symbol.iterator;
}
var iterator = getSymbolIterator();
function isIterable(input) {
return isFunction(input === null || input === void 0 ? void 0 : input[iterator]);
}
function readableStreamLikeToAsyncGenerator(readableStream) {
return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() {
var reader, _a, value, done;
return __generator(this, function(_b) {
switch (_b.label) {
case 0:
reader = readableStream.getReader();
_b.label = 1;
case 1:
_b.trys.push([1, 9, 10]);
_b.label = 2;
case 2:
return [4, __await(reader.read())];
case 3:
_a = _b.sent(), value = _a.value, done = _a.done;
if (!done)
return [3, 5];
return [4, __await(void 0)];
case 4:
return [2, _b.sent()];
case 5:
return [4, __await(value)];
case 6:
return [4, _b.sent()];
case 7:
_b.sent();
return [3, 2];
case 8:
return [3, 10];
case 9:
reader.releaseLock();
return [7];
case 10:
return [2];
}
});
});
}
function isReadableStreamLike(obj) {
return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);
}
function innerFrom(input) {
if (input instanceof Observable) {
return input;
}
if (input != null) {
if (isInteropObservable(input)) {
return fromInteropObservable(input);
}
if (isArrayLike(input)) {
return fromArrayLike(input);
}
if (isPromise(input)) {
return fromPromise(input);
}
if (isAsyncIterable(input)) {
return fromAsyncIterable(input);
}
if (isIterable(input)) {
return fromIterable(input);
}
if (isReadableStreamLike(input)) {
return fromReadableStreamLike(input);
}
}
throw createInvalidObservableTypeError(input);
}
function fromInteropObservable(obj) {
return new Observable(function(subscriber) {
var obs = obj[observable]();
if (isFunction(obs.subscribe)) {
return obs.subscribe(subscriber);
}
throw new TypeError("Provided object does not correctly implement Symbol.observable");
});
}
function fromArrayLike(array) {
return new Observable(function(subscriber) {
for (var i = 0; i < array.length && !subscriber.closed; i++) {
subscriber.next(array[i]);
}
subscriber.complete();
});
}
function fromPromise(promise) {
return new Observable(function(subscriber) {
promise.then(function(value) {
if (!subscriber.closed) {
subscriber.next(value);
subscriber.complete();
}
}, function(err) {
return subscriber.error(err);
}).then(null, reportUnhandledError);
});
}
function fromIterable(iterable) {
return new Observable(function(subscriber) {
var e_1, _a;
try {
for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {
var value = iterable_1_1.value;
subscriber.next(value);
if (subscriber.closed) {
return;
}
}
} catch (e_1_1) {
e_1 = { error: e_1_1 };
} finally {
try {
if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return))
_a.call(iterable_1);
} finally {
if (e_1)
throw e_1.error;
}
}
subscriber.complete();
});
}
function fromAsyncIterable(asyncIterable) {
return new Observable(function(subscriber) {
process(asyncIterable, subscriber).catch(function(err) {
return subscriber.error(err);
});
});
}
function fromReadableStreamLike(readableStream) {
return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));
}
function process(asyncIterable, subscriber) {
var asyncIterable_1, asyncIterable_1_1;
var e_2, _a;
return __awaiter(this, void 0, void 0, function() {
var value, e_2_1;
return __generator(this, function(_b) {
switch (_b.label) {
case 0:
_b.trys.push([0, 5, 6, 11]);
asyncIterable_1 = __asyncValues(asyncIterable);
_b.label = 1;
case 1:
return [4, asyncIterable_1.next()];
case 2:
if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done))
return [3, 4];
value = asyncIterable_1_1.value;
subscriber.next(value);
if (subscriber.closed) {
return [2];
}
_b.label = 3;
case 3:
return [3, 1];
case 4:
return [3, 11];
case 5:
e_2_1 = _b.sent();
e_2 = { error: e_2_1 };
return [3, 11];
case 6:
_b.trys.push([6, 9, 10]);
if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return)))
return [3, 8];
return [4, _a.call(asyncIterable_1)];
case 7:
_b.sent();
_b.label = 8;
case 8:
return [3, 10];
case 9:
if (e_2)
throw e_2.error;
return [7];
case 10:
return [7];
case 11:
subscriber.complete();
return [2];
}
});
});
}
function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {
return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);
}
var OperatorSubscriber = function(_super) {
__extends(OperatorSubscriber2, _super);
function OperatorSubscriber2(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {
var _this = _super.call(this, destination) || this;
_this.onFinalize = onFinalize;
_this.shouldUnsubscribe = shouldUnsubscribe;
_this._next = onNext ? function(value) {
try {
onNext(value);
} catch (err) {
destination.error(err);
}
} : _super.prototype._next;
_this._error = onError ? function(err) {
try {
onError(err);
} catch (err2) {
destination.error(err2);
} finally {
this.unsubscribe();
}
} : _super.prototype._error;
_this._complete = onComplete ? function() {
try {
onComplete();
} catch (err) {
destination.error(err);
} finally {
this.unsubscribe();
}
} : _super.prototype._complete;
return _this;
}
OperatorSubscriber2.prototype.unsubscribe = function() {
var _a;
if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {
var closed_1 = this.closed;
_super.prototype.unsubscribe.call(this);
!closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));
}
};
return OperatorSubscriber2;
}(Subscriber);
function executeSchedule(parentSubscription, scheduler, work, delay, repeat) {
if (delay === void 0) {
delay = 0;
}
if (repeat === void 0) {
repeat = false;
}
var scheduleSubscription = scheduler.schedule(function() {
work();
if (repeat) {
parentSubscription.add(this.schedule(null, delay));
} else {
this.unsubscribe();
}
}, delay);
parentSubscription.add(scheduleSubscription);
if (!repeat) {
return scheduleSubscription;
}
}
function map(project, thisArg) {
return operate(function(source, subscriber) {
var index = 0;
source.subscribe(createOperatorSubscriber(subscriber, function(value) {
subscriber.next(project.call(thisArg, value, index++));
}));
});
}
function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {
var buffer = [];
var active = 0;
var index = 0;
var isComplete = false;
var checkComplete = function() {
if (isComplete && !buffer.length && !active) {
subscriber.complete();
}
};
var outerNext = function(value) {
return active < concurrent ? doInnerSub(value) : buffer.push(value);
};
var doInnerSub = function(value) {
expand && subscriber.next(value);
active++;
var innerComplete = false;
innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, function(innerValue) {
onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);
if (expand) {
outerNext(innerValue);
} else {
subscriber.next(innerValue);
}
}, function() {
innerComplete = true;
}, void 0, function() {
if (innerComplete) {
try {
active--;
var _loop_1 = function() {
var bufferedValue = buffer.shift();
if (innerSubScheduler) {
executeSchedule(subscriber, innerSubScheduler, function() {
return doInnerSub(bufferedValue);
});
} else {
doInnerSub(bufferedValue);
}
};
while (buffer.length && active < concurrent) {
_loop_1();
}
checkComplete();
} catch (err) {
subscriber.error(err);
}
}
}));
};
source.subscribe(createOperatorSubscriber(subscriber, outerNext, function() {
isComplete = true;
checkComplete();
}));
return function() {
additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();
};
}
function mergeMap(project, resultSelector, concurrent) {
if (concurrent === void 0) {
concurrent = Infinity;
}
if (isFunction(resultSelector)) {
return mergeMap(function(a, i) {
return map(function(b, ii) {
return resultSelector(a, b, i, ii);
})(innerFrom(project(a, i)));
}, concurrent);
} else if (typeof resultSelector === "number") {
concurrent = resultSelector;
}
return operate(function(source, subscriber) {
return mergeInternals(source, subscriber, project, concurrent);
});
}
function mergeAll(concurrent) {
if (concurrent === void 0) {
concurrent = Infinity;
}
return mergeMap(identity, concurrent);
}
function concatAll() {
return mergeAll(1);
}
function concatMap(project, resultSelector) {
return isFunction(resultSelector) ? mergeMap(project, resultSelector, 1) : mergeMap(project, 1);
}
class IframeUtils {
static getIframes(element) {
return Array.from(element.querySelectorAll("iframe"));
}
static getAllNestedIframes(element) {
const iframes = IframeUtils.getIframes(element);
if (iframes.length === 0) {
return rxjs.of([]);
} else {
return rxjs.from(iframes).pipe(
mergeMap(
(iframe) => new rxjs.Observable((subscriber) => {
if (iframe.contentDocument) {
const iframeDocument = iframe.contentDocument;
const nestedIframes = IframeUtils.getAllNestedIframes(iframeDocument.documentElement);
nestedIframes.subscribe((nestedIframes2) => {
subscriber.next([iframe, ...nestedIframes2]);
subscriber.complete();
});
} else {
subscriber.next([]);
subscriber.complete();
}
})
),
concatAll(),
rxjs.toArray()
);
}
}
}
var Typr$1 = {};
var Typr = {};
Typr.parse = function(buff) {
var bin = Typr._bin;
var data = new Uint8Array(buff);
var tag = bin.readASCII(data, 0, 4);
if (tag == "ttcf") {
var offset = 4;
bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
var numF = bin.readUint(data, offset);
offset += 4;
var fnts = [];
for (var i = 0; i < numF; i++) {
var foff = bin.readUint(data, offset);
offset += 4;
fnts.push(Typr._readFont(data, foff));
}
return fnts;
} else
return [Typr._readFont(data, 0)];
};
Typr._readFont = function(data, offset) {
var bin = Typr._bin;
var ooff = offset;
bin.readFixed(data, offset);
offset += 4;
var numTables = bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
var tags = [
"cmap",
"head",
"hhea",
"maxp",
"hmtx",
"name",
"OS/2",
"post",
//"cvt",
//"fpgm",
"loca",
"glyf",
"kern",
//"prep"
//"gasp"
"CFF ",
"GPOS",
"GSUB",
"SVG "
//"VORG",
];
var obj = { _data: data, _offset: ooff };
var tabs = {};
for (var i = 0; i < numTables; i++) {
var tag = bin.readASCII(data, offset, 4);
offset += 4;
bin.readUint(data, offset);
offset += 4;
var toffset = bin.readUint(data, offset);
offset += 4;
var length = bin.readUint(data, offset);
offset += 4;
tabs[tag] = { offset: toffset, length };
}
for (var i = 0; i < tags.length; i++) {
var t = tags[i];
if (tabs[t])
obj[t.trim()] = Typr[t.trim()].parse(data, tabs[t].offset, tabs[t].length, obj);
}
return obj;
};
Typr._tabOffset = function(data, tab, foff) {
var bin = Typr._bin;
var numTables = bin.readUshort(data, foff + 4);
var offset = foff + 12;
for (var i = 0; i < numTables; i++) {
var tag = bin.readASCII(data, offset, 4);
offset += 4;
bin.readUint(data, offset);
offset += 4;
var toffset = bin.readUint(data, offset);
offset += 4;
bin.readUint(data, offset);
offset += 4;
if (tag == tab)
return toffset;
}
return 0;
};
Typr._bin = {
readFixed: function(data, o) {
return (data[o] << 8 | data[o + 1]) + (data[o + 2] << 8 | data[o + 3]) / (256 * 256 + 4);
},
readF2dot14: function(data, o) {
var num = Typr._bin.readShort(data, o);
return num / 16384;
},
readInt: function(buff, p) {
return Typr._bin._view(buff).getInt32(p);
},
readInt8: function(buff, p) {
return Typr._bin._view(buff).getInt8(p);
},
readShort: function(buff, p) {
return Typr._bin._view(buff).getInt16(p);
},
readUshort: function(buff, p) {
return Typr._bin._view(buff).getUint16(p);
},
readUshorts: function(buff, p, len) {
var arr = [];
for (var i = 0; i < len; i++)
arr.push(Typr._bin.readUshort(buff, p + i * 2));
return arr;
},
readUint: function(buff, p) {
return Typr._bin._view(buff).getUint32(p);
},
readUint64: function(buff, p) {
return Typr._bin.readUint(buff, p) * (4294967295 + 1) + Typr._bin.readUint(buff, p + 4);
},
readASCII: function(buff, p, l) {
var s = "";
for (var i = 0; i < l; i++)
s += String.fromCharCode(buff[p + i]);
return s;
},
readUnicode: function(buff, p, l) {
var s = "";
for (var i = 0; i < l; i++) {
var c = buff[p++] << 8 | buff[p++];
s += String.fromCharCode(c);
}
return s;
},
_tdec: typeof window !== "undefined" && window["TextDecoder"] ? new window["TextDecoder"]() : null,
readUTF8: function(buff, p, l) {
var tdec = Typr._bin._tdec;
if (tdec && p == 0 && l == buff.length)
return tdec["decode"](buff);
return Typr._bin.readASCII(buff, p, l);
},
readBytes: function(buff, p, l) {
var arr = [];
for (var i = 0; i < l; i++)
arr.push(buff[p + i]);
return arr;
},
readASCIIArray: function(buff, p, l) {
var s = [];
for (var i = 0; i < l; i++)
s.push(String.fromCharCode(buff[p + i]));
return s;
},
_view: function(buff) {
return buff._dataView || (buff._dataView = buff.buffer ? new DataView(buff.buffer, buff.byteOffset, buff.byteLength) : new DataView(new Uint8Array(buff).buffer));
}
};
Typr._lctf = {};
Typr._lctf.parse = function(data, offset, length, font, subt) {
var bin = Typr._bin;
var obj = {};
var offset0 = offset;
bin.readFixed(data, offset);
offset += 4;
var offScriptList = bin.readUshort(data, offset);
offset += 2;
var offFeatureList = bin.readUshort(data, offset);
offset += 2;
var offLookupList = bin.readUshort(data, offset);
offset += 2;
obj.scriptList = Typr._lctf.readScriptList(data, offset0 + offScriptList);
obj.featureList = Typr._lctf.readFeatureList(data, offset0 + offFeatureList);
obj.lookupList = Typr._lctf.readLookupList(data, offset0 + offLookupList, subt);
return obj;
};
Typr._lctf.readLookupList = function(data, offset, subt) {
var bin = Typr._bin;
var offset0 = offset;
var obj = [];
var count = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < count; i++) {
var noff = bin.readUshort(data, offset);
offset += 2;
var lut = Typr._lctf.readLookupTable(data, offset0 + noff, subt);
obj.push(lut);
}
return obj;
};
Typr._lctf.readLookupTable = function(data, offset, subt) {
var bin = Typr._bin;
var offset0 = offset;
var obj = { tabs: [] };
obj.ltype = bin.readUshort(data, offset);
offset += 2;
obj.flag = bin.readUshort(data, offset);
offset += 2;
var cnt = bin.readUshort(data, offset);
offset += 2;
var ltype = obj.ltype;
for (var i = 0; i < cnt; i++) {
var noff = bin.readUshort(data, offset);
offset += 2;
var tab = subt(data, ltype, offset0 + noff, obj);
obj.tabs.push(tab);
}
return obj;
};
Typr._lctf.numOfOnes = function(n) {
var num = 0;
for (var i = 0; i < 32; i++)
if ((n >>> i & 1) != 0)
num++;
return num;
};
Typr._lctf.readClassDef = function(data, offset) {
var bin = Typr._bin;
var obj = [];
var format = bin.readUshort(data, offset);
offset += 2;
if (format == 1) {
var startGlyph = bin.readUshort(data, offset);
offset += 2;
var glyphCount = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < glyphCount; i++) {
obj.push(startGlyph + i);
obj.push(startGlyph + i);
obj.push(bin.readUshort(data, offset));
offset += 2;
}
}
if (format == 2) {
var count = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < count; i++) {
obj.push(bin.readUshort(data, offset));
offset += 2;
obj.push(bin.readUshort(data, offset));
offset += 2;
obj.push(bin.readUshort(data, offset));
offset += 2;
}
}
return obj;
};
Typr._lctf.getInterval = function(tab, val) {
for (var i = 0; i < tab.length; i += 3) {
var start = tab[i], end = tab[i + 1];
tab[i + 2];
if (start <= val && val <= end)
return i;
}
return -1;
};
Typr._lctf.readCoverage = function(data, offset) {
var bin = Typr._bin;
var cvg = {};
cvg.fmt = bin.readUshort(data, offset);
offset += 2;
var count = bin.readUshort(data, offset);
offset += 2;
if (cvg.fmt == 1)
cvg.tab = bin.readUshorts(data, offset, count);
if (cvg.fmt == 2)
cvg.tab = bin.readUshorts(data, offset, count * 3);
return cvg;
};
Typr._lctf.coverageIndex = function(cvg, val) {
var tab = cvg.tab;
if (cvg.fmt == 1)
return tab.indexOf(val);
if (cvg.fmt == 2) {
var ind = Typr._lctf.getInterval(tab, val);
if (ind != -1)
return tab[ind + 2] + (val - tab[ind]);
}
return -1;
};
Typr._lctf.readFeatureList = function(data, offset) {
var bin = Typr._bin;
var offset0 = offset;
var obj = [];
var count = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < count; i++) {
var tag = bin.readASCII(data, offset, 4);
offset += 4;
var noff = bin.readUshort(data, offset);
offset += 2;
var feat = Typr._lctf.readFeatureTable(data, offset0 + noff);
feat.tag = tag.trim();
obj.push(feat);
}
return obj;
};
Typr._lctf.readFeatureTable = function(data, offset) {
var bin = Typr._bin;
var offset0 = offset;
var feat = {};
var featureParams = bin.readUshort(data, offset);
offset += 2;
if (featureParams > 0) {
feat.featureParams = offset0 + featureParams;
}
var lookupCount = bin.readUshort(data, offset);
offset += 2;
feat.tab = [];
for (var i = 0; i < lookupCount; i++)
feat.tab.push(bin.readUshort(data, offset + 2 * i));
return feat;
};
Typr._lctf.readScriptList = function(data, offset) {
var bin = Typr._bin;
var offset0 = offset;
var obj = {};
var count = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < count; i++) {
var tag = bin.readASCII(data, offset, 4);
offset += 4;
var noff = bin.readUshort(data, offset);
offset += 2;
obj[tag.trim()] = Typr._lctf.readScriptTable(data, offset0 + noff);
}
return obj;
};
Typr._lctf.readScriptTable = function(data, offset) {
var bin = Typr._bin;
var offset0 = offset;
var obj = {};
var defLangSysOff = bin.readUshort(data, offset);
offset += 2;
if (defLangSysOff > 0) {
obj["default"] = Typr._lctf.readLangSysTable(data, offset0 + defLangSysOff);
}
var langSysCount = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < langSysCount; i++) {
var tag = bin.readASCII(data, offset, 4);
offset += 4;
var langSysOff = bin.readUshort(data, offset);
offset += 2;
obj[tag.trim()] = Typr._lctf.readLangSysTable(data, offset0 + langSysOff);
}
return obj;
};
Typr._lctf.readLangSysTable = function(data, offset) {
var bin = Typr._bin;
var obj = {};
bin.readUshort(data, offset);
offset += 2;
obj.reqFeature = bin.readUshort(data, offset);
offset += 2;
var featureCount = bin.readUshort(data, offset);
offset += 2;
obj.features = bin.readUshorts(data, offset, featureCount);
return obj;
};
Typr.CFF = {};
Typr.CFF.parse = function(data, offset, length) {
var bin = Typr._bin;
data = new Uint8Array(data.buffer, offset, length);
offset = 0;
data[offset];
offset++;
data[offset];
offset++;
data[offset];
offset++;
data[offset];
offset++;
var ninds = [];
offset = Typr.CFF.readIndex(data, offset, ninds);
var names = [];
for (var i = 0; i < ninds.length - 1; i++)
names.push(bin.readASCII(data, offset + ninds[i], ninds[i + 1] - ninds[i]));
offset += ninds[ninds.length - 1];
var tdinds = [];
offset = Typr.CFF.readIndex(data, offset, tdinds);
var topDicts = [];
for (var i = 0; i < tdinds.length - 1; i++)
topDicts.push(Typr.CFF.readDict(data, offset + tdinds[i], offset + tdinds[i + 1]));
offset += tdinds[tdinds.length - 1];
var topdict = topDicts[0];
var sinds = [];
offset = Typr.CFF.readIndex(data, offset, sinds);
var strings = [];
for (var i = 0; i < sinds.length - 1; i++)
strings.push(bin.readASCII(data, offset + sinds[i], sinds[i + 1] - sinds[i]));
offset += sinds[sinds.length - 1];
Typr.CFF.readSubrs(data, offset, topdict);
if (topdict.CharStrings) {
offset = topdict.CharStrings;
var sinds = [];
offset = Typr.CFF.readIndex(data, offset, sinds);
var cstr = [];
for (var i = 0; i < sinds.length - 1; i++)
cstr.push(bin.readBytes(data, offset + sinds[i], sinds[i + 1] - sinds[i]));
topdict.CharStrings = cstr;
}
if (topdict.ROS) {
offset = topdict.FDArray;
var fdind = [];
offset = Typr.CFF.readIndex(data, offset, fdind);
topdict.FDArray = [];
for (var i = 0; i < fdind.length - 1; i++) {
var dict = Typr.CFF.readDict(data, offset + fdind[i], offset + fdind[i + 1]);
Typr.CFF._readFDict(data, dict, strings);
topdict.FDArray.push(dict);
}
offset += fdind[fdind.length - 1];
offset = topdict.FDSelect;
topdict.FDSelect = [];
var fmt = data[offset];
offset++;
if (fmt == 3) {
var rns = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < rns + 1; i++) {
topdict.FDSelect.push(bin.readUshort(data, offset), data[offset + 2]);
offset += 3;
}
} else
throw fmt;
}
if (topdict.Encoding)
topdict.Encoding = Typr.CFF.readEncoding(data, topdict.Encoding, topdict.CharStrings.length);
if (topdict.charset)
topdict.charset = Typr.CFF.readCharset(data, topdict.charset, topdict.CharStrings.length);
Typr.CFF._readFDict(data, topdict, strings);
return topdict;
};
Typr.CFF._readFDict = function(data, dict, ss) {
var offset;
if (dict.Private) {
offset = dict.Private[1];
dict.Private = Typr.CFF.readDict(data, offset, offset + dict.Private[0]);
if (dict.Private.Subrs)
Typr.CFF.readSubrs(data, offset + dict.Private.Subrs, dict.Private);
}
for (var p in dict)
if (["FamilyName", "FontName", "FullName", "Notice", "version", "Copyright"].indexOf(p) != -1)
dict[p] = ss[dict[p] - 426 + 35];
};
Typr.CFF.readSubrs = function(data, offset, obj) {
var bin = Typr._bin;
var gsubinds = [];
offset = Typr.CFF.readIndex(data, offset, gsubinds);
var bias, nSubrs = gsubinds.length;
if (nSubrs < 1240)
bias = 107;
else if (nSubrs < 33900)
bias = 1131;
else
bias = 32768;
obj.Bias = bias;
obj.Subrs = [];
for (var i = 0; i < gsubinds.length - 1; i++)
obj.Subrs.push(bin.readBytes(data, offset + gsubinds[i], gsubinds[i + 1] - gsubinds[i]));
};
Typr.CFF.tableSE = [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
0,
111,
112,
113,
114,
0,
115,
116,
117,
118,
119,
120,
121,
122,
0,
123,
0,
124,
125,
126,
127,
128,
129,
130,
131,
0,
132,
133,
0,
134,
135,
136,
137,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
138,
0,
139,
0,
0,
0,
0,
140,
141,
142,
143,
0,
0,
0,
0,
0,
144,
0,
0,
0,
145,
0,
0,
146,
147,
148,
149,
0,
0,
0,
0
];
Typr.CFF.glyphByUnicode = function(cff, code) {
for (var i = 0; i < cff.charset.length; i++)
if (cff.charset[i] == code)
return i;
return -1;
};
Typr.CFF.glyphBySE = function(cff, charcode) {
if (charcode < 0 || charcode > 255)
return -1;
return Typr.CFF.glyphByUnicode(cff, Typr.CFF.tableSE[charcode]);
};
Typr.CFF.readEncoding = function(data, offset, num) {
Typr._bin;
var array = [".notdef"];
var format = data[offset];
offset++;
if (format == 0) {
var nCodes = data[offset];
offset++;
for (var i = 0; i < nCodes; i++)
array.push(data[offset + i]);
} else
throw "error: unknown encoding format: " + format;
return array;
};
Typr.CFF.readCharset = function(data, offset, num) {
var bin = Typr._bin;
var charset = [".notdef"];
var format = data[offset];
offset++;
if (format == 0) {
for (var i = 0; i < num; i++) {
var first = bin.readUshort(data, offset);
offset += 2;
charset.push(first);
}
} else if (format == 1 || format == 2) {
while (charset.length < num) {
var first = bin.readUshort(data, offset);
offset += 2;
var nLeft = 0;
if (format == 1) {
nLeft = data[offset];
offset++;
} else {
nLeft = bin.readUshort(data, offset);
offset += 2;
}
for (var i = 0; i <= nLeft; i++) {
charset.push(first);
first++;
}
}
} else
throw "error: format: " + format;
return charset;
};
Typr.CFF.readIndex = function(data, offset, inds) {
var bin = Typr._bin;
var count = bin.readUshort(data, offset) + 1;
offset += 2;
var offsize = data[offset];
offset++;
if (offsize == 1)
for (var i = 0; i < count; i++)
inds.push(data[offset + i]);
else if (offsize == 2)
for (var i = 0; i < count; i++)
inds.push(bin.readUshort(data, offset + i * 2));
else if (offsize == 3)
for (var i = 0; i < count; i++)
inds.push(bin.readUint(data, offset + i * 3 - 1) & 16777215);
else if (count != 1)
throw "unsupported offset size: " + offsize + ", count: " + count;
offset += count * offsize;
return offset - 1;
};
Typr.CFF.getCharString = function(data, offset, o) {
var bin = Typr._bin;
var b0 = data[offset], b1 = data[offset + 1];
data[offset + 2];
data[offset + 3];
data[offset + 4];
var vs = 1;
var op = null, val = null;
if (b0 <= 20) {
op = b0;
vs = 1;
}
if (b0 == 12) {
op = b0 * 100 + b1;
vs = 2;
}
if (21 <= b0 && b0 <= 27) {
op = b0;
vs = 1;
}
if (b0 == 28) {
val = bin.readShort(data, offset + 1);
vs = 3;
}
if (29 <= b0 && b0 <= 31) {
op = b0;
vs = 1;
}
if (32 <= b0 && b0 <= 246) {
val = b0 - 139;
vs = 1;
}
if (247 <= b0 && b0 <= 250) {
val = (b0 - 247) * 256 + b1 + 108;
vs = 2;
}
if (251 <= b0 && b0 <= 254) {
val = -(b0 - 251) * 256 - b1 - 108;
vs = 2;
}
if (b0 == 255) {
val = bin.readInt(data, offset + 1) / 65535;
vs = 5;
}
o.val = val != null ? val : "o" + op;
o.size = vs;
};
Typr.CFF.readCharString = function(data, offset, length) {
var end = offset + length;
var bin = Typr._bin;
var arr = [];
while (offset < end) {
var b0 = data[offset], b1 = data[offset + 1];
data[offset + 2];
data[offset + 3];
data[offset + 4];
var vs = 1;
var op = null, val = null;
if (b0 <= 20) {
op = b0;
vs = 1;
}
if (b0 == 12) {
op = b0 * 100 + b1;
vs = 2;
}
if (b0 == 19 || b0 == 20) {
op = b0;
vs = 2;
}
if (21 <= b0 && b0 <= 27) {
op = b0;
vs = 1;
}
if (b0 == 28) {
val = bin.readShort(data, offset + 1);
vs = 3;
}
if (29 <= b0 && b0 <= 31) {
op = b0;
vs = 1;
}
if (32 <= b0 && b0 <= 246) {
val = b0 - 139;
vs = 1;
}
if (247 <= b0 && b0 <= 250) {
val = (b0 - 247) * 256 + b1 + 108;
vs = 2;
}
if (251 <= b0 && b0 <= 254) {
val = -(b0 - 251) * 256 - b1 - 108;
vs = 2;
}
if (b0 == 255) {
val = bin.readInt(data, offset + 1) / 65535;
vs = 5;
}
arr.push(val != null ? val : "o" + op);
offset += vs;
}
return arr;
};
Typr.CFF.readDict = function(data, offset, end) {
var bin = Typr._bin;
var dict = {};
var carr = [];
while (offset < end) {
var b0 = data[offset], b1 = data[offset + 1];
data[offset + 2];
data[offset + 3];
data[offset + 4];
var vs = 1;
var key = null, val = null;
if (b0 == 28) {
val = bin.readShort(data, offset + 1);
vs = 3;
}
if (b0 == 29) {
val = bin.readInt(data, offset + 1);
vs = 5;
}
if (32 <= b0 && b0 <= 246) {
val = b0 - 139;
vs = 1;
}
if (247 <= b0 && b0 <= 250) {
val = (b0 - 247) * 256 + b1 + 108;
vs = 2;
}
if (251 <= b0 && b0 <= 254) {
val = -(b0 - 251) * 256 - b1 - 108;
vs = 2;
}
if (b0 == 255) {
val = bin.readInt(data, offset + 1) / 65535;
vs = 5;
throw "unknown number";
}
if (b0 == 30) {
var nibs = [];
vs = 1;
while (true) {
var b = data[offset + vs];
vs++;
var nib0 = b >> 4, nib1 = b & 15;
if (nib0 != 15)
nibs.push(nib0);
if (nib1 != 15)
nibs.push(nib1);
if (nib1 == 15)
break;
}
var s = "";
var chars = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ".", "e", "e-", "reserved", "-", "endOfNumber"];
for (var i = 0; i < nibs.length; i++)
s += chars[nibs[i]];
val = parseFloat(s);
}
if (b0 <= 21) {
var keys = [
"version",
"Notice",
"FullName",
"FamilyName",
"Weight",
"FontBBox",
"BlueValues",
"OtherBlues",
"FamilyBlues",
"FamilyOtherBlues",
"StdHW",
"StdVW",
"escape",
"UniqueID",
"XUID",
"charset",
"Encoding",
"CharStrings",
"Private",
"Subrs",
"defaultWidthX",
"nominalWidthX"
];
key = keys[b0];
vs = 1;
if (b0 == 12) {
var keys = [
"Copyright",
"isFixedPitch",
"ItalicAngle",
"UnderlinePosition",
"UnderlineThickness",
"PaintType",
"CharstringType",
"FontMatrix",
"StrokeWidth",
"BlueScale",
"BlueShift",
"BlueFuzz",
"StemSnapH",
"StemSnapV",
"ForceBold",
0,
0,
"LanguageGroup",
"ExpansionFactor",
"initialRandomSeed",
"SyntheticBase",
"PostScript",
"BaseFontName",
"BaseFontBlend",
0,
0,
0,
0,
0,
0,
"ROS",
"CIDFontVersion",
"CIDFontRevision",
"CIDFontType",
"CIDCount",
"UIDBase",
"FDArray",
"FDSelect",
"FontName"
];
key = keys[b1];
vs = 2;
}
}
if (key != null) {
dict[key] = carr.length == 1 ? carr[0] : carr;
carr = [];
} else
carr.push(val);
offset += vs;
}
return dict;
};
Typr.cmap = {};
Typr.cmap.parse = function(data, offset, length) {
data = new Uint8Array(data.buffer, offset, length);
offset = 0;
var bin = Typr._bin;
var obj = {};
bin.readUshort(data, offset);
offset += 2;
var numTables = bin.readUshort(data, offset);
offset += 2;
var offs = [];
obj.tables = [];
for (var i = 0; i < numTables; i++) {
var platformID = bin.readUshort(data, offset);
offset += 2;
var encodingID = bin.readUshort(data, offset);
offset += 2;
var noffset = bin.readUint(data, offset);
offset += 4;
var id = "p" + platformID + "e" + encodingID;
var tind = offs.indexOf(noffset);
if (tind == -1) {
tind = obj.tables.length;
var subt;
offs.push(noffset);
var format = bin.readUshort(data, noffset);
if (format == 0)
subt = Typr.cmap.parse0(data, noffset);
else if (format == 4)
subt = Typr.cmap.parse4(data, noffset);
else if (format == 6)
subt = Typr.cmap.parse6(data, noffset);
else if (format == 12)
subt = Typr.cmap.parse12(data, noffset);
else
console.warn("unknown format: " + format, platformID, encodingID, noffset);
obj.tables.push(subt);
}
if (obj[id] != null)
throw "multiple tables for one platform+encoding";
obj[id] = tind;
}
return obj;
};
Typr.cmap.parse0 = function(data, offset) {
var bin = Typr._bin;
var obj = {};
obj.format = bin.readUshort(data, offset);
offset += 2;
var len = bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
obj.map = [];
for (var i = 0; i < len - 6; i++)
obj.map.push(data[offset + i]);
return obj;
};
Typr.cmap.parse4 = function(data, offset) {
var bin = Typr._bin;
var offset0 = offset;
var obj = {};
obj.format = bin.readUshort(data, offset);
offset += 2;
var length = bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
var segCountX2 = bin.readUshort(data, offset);
offset += 2;
var segCount = segCountX2 / 2;
obj.searchRange = bin.readUshort(data, offset);
offset += 2;
obj.entrySelector = bin.readUshort(data, offset);
offset += 2;
obj.rangeShift = bin.readUshort(data, offset);
offset += 2;
obj.endCount = bin.readUshorts(data, offset, segCount);
offset += segCount * 2;
offset += 2;
obj.startCount = bin.readUshorts(data, offset, segCount);
offset += segCount * 2;
obj.idDelta = [];
for (var i = 0; i < segCount; i++) {
obj.idDelta.push(bin.readShort(data, offset));
offset += 2;
}
obj.idRangeOffset = bin.readUshorts(data, offset, segCount);
offset += segCount * 2;
obj.glyphIdArray = [];
while (offset < offset0 + length) {
obj.glyphIdArray.push(bin.readUshort(data, offset));
offset += 2;
}
return obj;
};
Typr.cmap.parse6 = function(data, offset) {
var bin = Typr._bin;
var obj = {};
obj.format = bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
obj.firstCode = bin.readUshort(data, offset);
offset += 2;
var entryCount = bin.readUshort(data, offset);
offset += 2;
obj.glyphIdArray = [];
for (var i = 0; i < entryCount; i++) {
obj.glyphIdArray.push(bin.readUshort(data, offset));
offset += 2;
}
return obj;
};
Typr.cmap.parse12 = function(data, offset) {
var bin = Typr._bin;
var obj = {};
obj.format = bin.readUshort(data, offset);
offset += 2;
offset += 2;
bin.readUint(data, offset);
offset += 4;
bin.readUint(data, offset);
offset += 4;
var nGroups = bin.readUint(data, offset);
offset += 4;
obj.groups = [];
for (var i = 0; i < nGroups; i++) {
var off = offset + i * 12;
var startCharCode = bin.readUint(data, off + 0);
var endCharCode = bin.readUint(data, off + 4);
var startGlyphID = bin.readUint(data, off + 8);
obj.groups.push([startCharCode, endCharCode, startGlyphID]);
}
return obj;
};
Typr.glyf = {};
Typr.glyf.parse = function(data, offset, length, font) {
var obj = [];
for (var g = 0; g < font.maxp.numGlyphs; g++)
obj.push(null);
return obj;
};
Typr.glyf._parseGlyf = function(font, g) {
var bin = Typr._bin;
var data = font._data;
var offset = Typr._tabOffset(data, "glyf", font._offset) + font.loca[g];
if (font.loca[g] == font.loca[g + 1])
return null;
var gl = {};
gl.noc = bin.readShort(data, offset);
offset += 2;
gl.xMin = bin.readShort(data, offset);
offset += 2;
gl.yMin = bin.readShort(data, offset);
offset += 2;
gl.xMax = bin.readShort(data, offset);
offset += 2;
gl.yMax = bin.readShort(data, offset);
offset += 2;
if (gl.xMin >= gl.xMax || gl.yMin >= gl.yMax)
return null;
if (gl.noc > 0) {
gl.endPts = [];
for (var i = 0; i < gl.noc; i++) {
gl.endPts.push(bin.readUshort(data, offset));
offset += 2;
}
var instructionLength = bin.readUshort(data, offset);
offset += 2;
if (data.length - offset < instructionLength)
return null;
gl.instructions = bin.readBytes(data, offset, instructionLength);
offset += instructionLength;
var crdnum = gl.endPts[gl.noc - 1] + 1;
gl.flags = [];
for (var i = 0; i < crdnum; i++) {
var flag = data[offset];
offset++;
gl.flags.push(flag);
if ((flag & 8) != 0) {
var rep = data[offset];
offset++;
for (var j = 0; j < rep; j++) {
gl.flags.push(flag);
i++;
}
}
}
gl.xs = [];
for (var i = 0; i < crdnum; i++) {
var i8 = (gl.flags[i] & 2) != 0, same = (gl.flags[i] & 16) != 0;
if (i8) {
gl.xs.push(same ? data[offset] : -data[offset]);
offset++;
} else {
if (same)
gl.xs.push(0);
else {
gl.xs.push(bin.readShort(data, offset));
offset += 2;
}
}
}
gl.ys = [];
for (var i = 0; i < crdnum; i++) {
var i8 = (gl.flags[i] & 4) != 0, same = (gl.flags[i] & 32) != 0;
if (i8) {
gl.ys.push(same ? data[offset] : -data[offset]);
offset++;
} else {
if (same)
gl.ys.push(0);
else {
gl.ys.push(bin.readShort(data, offset));
offset += 2;
}
}
}
var x = 0, y = 0;
for (var i = 0; i < crdnum; i++) {
x += gl.xs[i];
y += gl.ys[i];
gl.xs[i] = x;
gl.ys[i] = y;
}
} else {
var ARG_1_AND_2_ARE_WORDS = 1 << 0;
var ARGS_ARE_XY_VALUES = 1 << 1;
var WE_HAVE_A_SCALE = 1 << 3;
var MORE_COMPONENTS = 1 << 5;
var WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;
var WE_HAVE_A_TWO_BY_TWO = 1 << 7;
var WE_HAVE_INSTRUCTIONS = 1 << 8;
gl.parts = [];
var flags;
do {
flags = bin.readUshort(data, offset);
offset += 2;
var part = { m: { a: 1, b: 0, c: 0, d: 1, tx: 0, ty: 0 }, p1: -1, p2: -1 };
gl.parts.push(part);
part.glyphIndex = bin.readUshort(data, offset);
offset += 2;
if (flags & ARG_1_AND_2_ARE_WORDS) {
var arg1 = bin.readShort(data, offset);
offset += 2;
var arg2 = bin.readShort(data, offset);
offset += 2;
} else {
var arg1 = bin.readInt8(data, offset);
offset++;
var arg2 = bin.readInt8(data, offset);
offset++;
}
if (flags & ARGS_ARE_XY_VALUES) {
part.m.tx = arg1;
part.m.ty = arg2;
} else {
part.p1 = arg1;
part.p2 = arg2;
}
if (flags & WE_HAVE_A_SCALE) {
part.m.a = part.m.d = bin.readF2dot14(data, offset);
offset += 2;
} else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {
part.m.a = bin.readF2dot14(data, offset);
offset += 2;
part.m.d = bin.readF2dot14(data, offset);
offset += 2;
} else if (flags & WE_HAVE_A_TWO_BY_TWO) {
part.m.a = bin.readF2dot14(data, offset);
offset += 2;
part.m.b = bin.readF2dot14(data, offset);
offset += 2;
part.m.c = bin.readF2dot14(data, offset);
offset += 2;
part.m.d = bin.readF2dot14(data, offset);
offset += 2;
}
} while (flags & MORE_COMPONENTS);
if (flags & WE_HAVE_INSTRUCTIONS) {
var numInstr = bin.readUshort(data, offset);
offset += 2;
gl.instr = [];
for (var i = 0; i < numInstr; i++) {
gl.instr.push(data[offset]);
offset++;
}
}
}
return gl;
};
Typr.GPOS = {};
Typr.GPOS.parse = function(data, offset, length, font) {
return Typr._lctf.parse(data, offset, length, font, Typr.GPOS.subt);
};
Typr.GPOS.subt = function(data, ltype, offset, ltable) {
var bin = Typr._bin, offset0 = offset, tab = {};
tab.fmt = bin.readUshort(data, offset);
offset += 2;
if (ltype == 1 || ltype == 2 || ltype == 3 || ltype == 7 || ltype == 8 && tab.fmt <= 2) {
var covOff = bin.readUshort(data, offset);
offset += 2;
tab.coverage = Typr._lctf.readCoverage(data, covOff + offset0);
}
if (ltype == 1 && tab.fmt == 1) {
var valFmt1 = bin.readUshort(data, offset);
offset += 2;
var ones1 = Typr._lctf.numOfOnes(valFmt1);
if (valFmt1 != 0)
tab.pos = Typr.GPOS.readValueRecord(data, offset, valFmt1);
} else if (ltype == 2 && tab.fmt >= 1 && tab.fmt <= 2) {
var valFmt1 = bin.readUshort(data, offset);
offset += 2;
var valFmt2 = bin.readUshort(data, offset);
offset += 2;
var ones1 = Typr._lctf.numOfOnes(valFmt1);
var ones2 = Typr._lctf.numOfOnes(valFmt2);
if (tab.fmt == 1) {
tab.pairsets = [];
var psc = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < psc; i++) {
var psoff = offset0 + bin.readUshort(data, offset);
offset += 2;
var pvc = bin.readUshort(data, psoff);
psoff += 2;
var arr = [];
for (var j = 0; j < pvc; j++) {
var gid2 = bin.readUshort(data, psoff);
psoff += 2;
var value1, value2;
if (valFmt1 != 0) {
value1 = Typr.GPOS.readValueRecord(data, psoff, valFmt1);
psoff += ones1 * 2;
}
if (valFmt2 != 0) {
value2 = Typr.GPOS.readValueRecord(data, psoff, valFmt2);
psoff += ones2 * 2;
}
arr.push({ gid2, val1: value1, val2: value2 });
}
tab.pairsets.push(arr);
}
}
if (tab.fmt == 2) {
var classDef1 = bin.readUshort(data, offset);
offset += 2;
var classDef2 = bin.readUshort(data, offset);
offset += 2;
var class1Count = bin.readUshort(data, offset);
offset += 2;
var class2Count = bin.readUshort(data, offset);
offset += 2;
tab.classDef1 = Typr._lctf.readClassDef(data, offset0 + classDef1);
tab.classDef2 = Typr._lctf.readClassDef(data, offset0 + classDef2);
tab.matrix = [];
for (var i = 0; i < class1Count; i++) {
var row = [];
for (var j = 0; j < class2Count; j++) {
var value1 = null, value2 = null;
if (valFmt1 != 0) {
value1 = Typr.GPOS.readValueRecord(data, offset, valFmt1);
offset += ones1 * 2;
}
if (valFmt2 != 0) {
value2 = Typr.GPOS.readValueRecord(data, offset, valFmt2);
offset += ones2 * 2;
}
row.push({ val1: value1, val2: value2 });
}
tab.matrix.push(row);
}
}
} else if (ltype == 9 && tab.fmt == 1) {
var extType = bin.readUshort(data, offset);
offset += 2;
var extOffset = bin.readUint(data, offset);
offset += 4;
if (ltable.ltype == 9) {
ltable.ltype = extType;
} else if (ltable.ltype != extType) {
throw "invalid extension substitution";
}
return Typr.GPOS.subt(data, ltable.ltype, offset0 + extOffset);
} else
console.warn("unsupported GPOS table LookupType", ltype, "format", tab.fmt);
return tab;
};
Typr.GPOS.readValueRecord = function(data, offset, valFmt) {
var bin = Typr._bin;
var arr = [];
arr.push(valFmt & 1 ? bin.readShort(data, offset) : 0);
offset += valFmt & 1 ? 2 : 0;
arr.push(valFmt & 2 ? bin.readShort(data, offset) : 0);
offset += valFmt & 2 ? 2 : 0;
arr.push(valFmt & 4 ? bin.readShort(data, offset) : 0);
offset += valFmt & 4 ? 2 : 0;
arr.push(valFmt & 8 ? bin.readShort(data, offset) : 0);
offset += valFmt & 8 ? 2 : 0;
return arr;
};
Typr.GSUB = {};
Typr.GSUB.parse = function(data, offset, length, font) {
return Typr._lctf.parse(data, offset, length, font, Typr.GSUB.subt);
};
Typr.GSUB.subt = function(data, ltype, offset, ltable) {
var bin = Typr._bin, offset0 = offset, tab = {};
tab.fmt = bin.readUshort(data, offset);
offset += 2;
if (ltype != 1 && ltype != 4 && ltype != 5 && ltype != 6)
return null;
if (ltype == 1 || ltype == 4 || ltype == 5 && tab.fmt <= 2 || ltype == 6 && tab.fmt <= 2) {
var covOff = bin.readUshort(data, offset);
offset += 2;
tab.coverage = Typr._lctf.readCoverage(data, offset0 + covOff);
}
if (ltype == 1 && tab.fmt >= 1 && tab.fmt <= 2) {
if (tab.fmt == 1) {
tab.delta = bin.readShort(data, offset);
offset += 2;
} else if (tab.fmt == 2) {
var cnt = bin.readUshort(data, offset);
offset += 2;
tab.newg = bin.readUshorts(data, offset, cnt);
offset += tab.newg.length * 2;
}
} else if (ltype == 4) {
tab.vals = [];
var cnt = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < cnt; i++) {
var loff = bin.readUshort(data, offset);
offset += 2;
tab.vals.push(Typr.GSUB.readLigatureSet(data, offset0 + loff));
}
} else if (ltype == 5 && tab.fmt == 2) {
if (tab.fmt == 2) {
var cDefOffset = bin.readUshort(data, offset);
offset += 2;
tab.cDef = Typr._lctf.readClassDef(data, offset0 + cDefOffset);
tab.scset = [];
var subClassSetCount = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < subClassSetCount; i++) {
var scsOff = bin.readUshort(data, offset);
offset += 2;
tab.scset.push(scsOff == 0 ? null : Typr.GSUB.readSubClassSet(data, offset0 + scsOff));
}
}
} else if (ltype == 6 && tab.fmt == 3) {
if (tab.fmt == 3) {
for (var i = 0; i < 3; i++) {
var cnt = bin.readUshort(data, offset);
offset += 2;
var cvgs = [];
for (var j = 0; j < cnt; j++)
cvgs.push(Typr._lctf.readCoverage(data, offset0 + bin.readUshort(data, offset + j * 2)));
offset += cnt * 2;
if (i == 0)
tab.backCvg = cvgs;
if (i == 1)
tab.inptCvg = cvgs;
if (i == 2)
tab.ahedCvg = cvgs;
}
var cnt = bin.readUshort(data, offset);
offset += 2;
tab.lookupRec = Typr.GSUB.readSubstLookupRecords(data, offset, cnt);
}
} else if (ltype == 7 && tab.fmt == 1) {
var extType = bin.readUshort(data, offset);
offset += 2;
var extOffset = bin.readUint(data, offset);
offset += 4;
if (ltable.ltype == 9) {
ltable.ltype = extType;
} else if (ltable.ltype != extType) {
throw "invalid extension substitution";
}
return Typr.GSUB.subt(data, ltable.ltype, offset0 + extOffset);
} else
console.warn("unsupported GSUB table LookupType", ltype, "format", tab.fmt);
return tab;
};
Typr.GSUB.readSubClassSet = function(data, offset) {
var rUs = Typr._bin.readUshort, offset0 = offset, lset = [];
var cnt = rUs(data, offset);
offset += 2;
for (var i = 0; i < cnt; i++) {
var loff = rUs(data, offset);
offset += 2;
lset.push(Typr.GSUB.readSubClassRule(data, offset0 + loff));
}
return lset;
};
Typr.GSUB.readSubClassRule = function(data, offset) {
var rUs = Typr._bin.readUshort, rule = {};
var gcount = rUs(data, offset);
offset += 2;
var scount = rUs(data, offset);
offset += 2;
rule.input = [];
for (var i = 0; i < gcount - 1; i++) {
rule.input.push(rUs(data, offset));
offset += 2;
}
rule.substLookupRecords = Typr.GSUB.readSubstLookupRecords(data, offset, scount);
return rule;
};
Typr.GSUB.readSubstLookupRecords = function(data, offset, cnt) {
var rUs = Typr._bin.readUshort;
var out = [];
for (var i = 0; i < cnt; i++) {
out.push(rUs(data, offset), rUs(data, offset + 2));
offset += 4;
}
return out;
};
Typr.GSUB.readChainSubClassSet = function(data, offset) {
var bin = Typr._bin, offset0 = offset, lset = [];
var cnt = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < cnt; i++) {
var loff = bin.readUshort(data, offset);
offset += 2;
lset.push(Typr.GSUB.readChainSubClassRule(data, offset0 + loff));
}
return lset;
};
Typr.GSUB.readChainSubClassRule = function(data, offset) {
var bin = Typr._bin, rule = {};
var pps = ["backtrack", "input", "lookahead"];
for (var pi = 0; pi < pps.length; pi++) {
var cnt = bin.readUshort(data, offset);
offset += 2;
if (pi == 1)
cnt--;
rule[pps[pi]] = bin.readUshorts(data, offset, cnt);
offset += rule[pps[pi]].length * 2;
}
var cnt = bin.readUshort(data, offset);
offset += 2;
rule.subst = bin.readUshorts(data, offset, cnt * 2);
offset += rule.subst.length * 2;
return rule;
};
Typr.GSUB.readLigatureSet = function(data, offset) {
var bin = Typr._bin, offset0 = offset, lset = [];
var lcnt = bin.readUshort(data, offset);
offset += 2;
for (var j = 0; j < lcnt; j++) {
var loff = bin.readUshort(data, offset);
offset += 2;
lset.push(Typr.GSUB.readLigature(data, offset0 + loff));
}
return lset;
};
Typr.GSUB.readLigature = function(data, offset) {
var bin = Typr._bin, lig = { chain: [] };
lig.nglyph = bin.readUshort(data, offset);
offset += 2;
var ccnt = bin.readUshort(data, offset);
offset += 2;
for (var k = 0; k < ccnt - 1; k++) {
lig.chain.push(bin.readUshort(data, offset));
offset += 2;
}
return lig;
};
Typr.head = {};
Typr.head.parse = function(data, offset, length) {
var bin = Typr._bin;
var obj = {};
bin.readFixed(data, offset);
offset += 4;
obj.fontRevision = bin.readFixed(data, offset);
offset += 4;
bin.readUint(data, offset);
offset += 4;
bin.readUint(data, offset);
offset += 4;
obj.flags = bin.readUshort(data, offset);
offset += 2;
obj.unitsPerEm = bin.readUshort(data, offset);
offset += 2;
obj.created = bin.readUint64(data, offset);
offset += 8;
obj.modified = bin.readUint64(data, offset);
offset += 8;
obj.xMin = bin.readShort(data, offset);
offset += 2;
obj.yMin = bin.readShort(data, offset);
offset += 2;
obj.xMax = bin.readShort(data, offset);
offset += 2;
obj.yMax = bin.readShort(data, offset);
offset += 2;
obj.macStyle = bin.readUshort(data, offset);
offset += 2;
obj.lowestRecPPEM = bin.readUshort(data, offset);
offset += 2;
obj.fontDirectionHint = bin.readShort(data, offset);
offset += 2;
obj.indexToLocFormat = bin.readShort(data, offset);
offset += 2;
obj.glyphDataFormat = bin.readShort(data, offset);
offset += 2;
return obj;
};
Typr.hhea = {};
Typr.hhea.parse = function(data, offset, length) {
var bin = Typr._bin;
var obj = {};
bin.readFixed(data, offset);
offset += 4;
obj.ascender = bin.readShort(data, offset);
offset += 2;
obj.descender = bin.readShort(data, offset);
offset += 2;
obj.lineGap = bin.readShort(data, offset);
offset += 2;
obj.advanceWidthMax = bin.readUshort(data, offset);
offset += 2;
obj.minLeftSideBearing = bin.readShort(data, offset);
offset += 2;
obj.minRightSideBearing = bin.readShort(data, offset);
offset += 2;
obj.xMaxExtent = bin.readShort(data, offset);
offset += 2;
obj.caretSlopeRise = bin.readShort(data, offset);
offset += 2;
obj.caretSlopeRun = bin.readShort(data, offset);
offset += 2;
obj.caretOffset = bin.readShort(data, offset);
offset += 2;
offset += 4 * 2;
obj.metricDataFormat = bin.readShort(data, offset);
offset += 2;
obj.numberOfHMetrics = bin.readUshort(data, offset);
offset += 2;
return obj;
};
Typr.hmtx = {};
Typr.hmtx.parse = function(data, offset, length, font) {
var bin = Typr._bin;
var obj = {};
obj.aWidth = [];
obj.lsBearing = [];
var aw = 0, lsb = 0;
for (var i = 0; i < font.maxp.numGlyphs; i++) {
if (i < font.hhea.numberOfHMetrics) {
aw = bin.readUshort(data, offset);
offset += 2;
lsb = bin.readShort(data, offset);
offset += 2;
}
obj.aWidth.push(aw);
obj.lsBearing.push(lsb);
}
return obj;
};
Typr.kern = {};
Typr.kern.parse = function(data, offset, length, font) {
var bin = Typr._bin;
var version = bin.readUshort(data, offset);
offset += 2;
if (version == 1)
return Typr.kern.parseV1(data, offset - 2, length, font);
var nTables = bin.readUshort(data, offset);
offset += 2;
var map2 = { glyph1: [], rval: [] };
for (var i = 0; i < nTables; i++) {
offset += 2;
var length = bin.readUshort(data, offset);
offset += 2;
var coverage = bin.readUshort(data, offset);
offset += 2;
var format = coverage >>> 8;
format &= 15;
if (format == 0)
offset = Typr.kern.readFormat0(data, offset, map2);
else
throw "unknown kern table format: " + format;
}
return map2;
};
Typr.kern.parseV1 = function(data, offset, length, font) {
var bin = Typr._bin;
bin.readFixed(data, offset);
offset += 4;
var nTables = bin.readUint(data, offset);
offset += 4;
var map2 = { glyph1: [], rval: [] };
for (var i = 0; i < nTables; i++) {
bin.readUint(data, offset);
offset += 4;
var coverage = bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
var format = coverage >>> 8;
format &= 15;
if (format == 0)
offset = Typr.kern.readFormat0(data, offset, map2);
else
throw "unknown kern table format: " + format;
}
return map2;
};
Typr.kern.readFormat0 = function(data, offset, map2) {
var bin = Typr._bin;
var pleft = -1;
var nPairs = bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
for (var j = 0; j < nPairs; j++) {
var left = bin.readUshort(data, offset);
offset += 2;
var right = bin.readUshort(data, offset);
offset += 2;
var value = bin.readShort(data, offset);
offset += 2;
if (left != pleft) {
map2.glyph1.push(left);
map2.rval.push({ glyph2: [], vals: [] });
}
var rval = map2.rval[map2.rval.length - 1];
rval.glyph2.push(right);
rval.vals.push(value);
pleft = left;
}
return offset;
};
Typr.loca = {};
Typr.loca.parse = function(data, offset, length, font) {
var bin = Typr._bin;
var obj = [];
var ver = font.head.indexToLocFormat;
var len = font.maxp.numGlyphs + 1;
if (ver == 0)
for (var i = 0; i < len; i++)
obj.push(bin.readUshort(data, offset + (i << 1)) << 1);
if (ver == 1)
for (var i = 0; i < len; i++)
obj.push(bin.readUint(data, offset + (i << 2)));
return obj;
};
Typr.maxp = {};
Typr.maxp.parse = function(data, offset, length) {
var bin = Typr._bin;
var obj = {};
var ver = bin.readUint(data, offset);
offset += 4;
obj.numGlyphs = bin.readUshort(data, offset);
offset += 2;
if (ver == 65536) {
obj.maxPoints = bin.readUshort(data, offset);
offset += 2;
obj.maxContours = bin.readUshort(data, offset);
offset += 2;
obj.maxCompositePoints = bin.readUshort(data, offset);
offset += 2;
obj.maxCompositeContours = bin.readUshort(data, offset);
offset += 2;
obj.maxZones = bin.readUshort(data, offset);
offset += 2;
obj.maxTwilightPoints = bin.readUshort(data, offset);
offset += 2;
obj.maxStorage = bin.readUshort(data, offset);
offset += 2;
obj.maxFunctionDefs = bin.readUshort(data, offset);
offset += 2;
obj.maxInstructionDefs = bin.readUshort(data, offset);
offset += 2;
obj.maxStackElements = bin.readUshort(data, offset);
offset += 2;
obj.maxSizeOfInstructions = bin.readUshort(data, offset);
offset += 2;
obj.maxComponentElements = bin.readUshort(data, offset);
offset += 2;
obj.maxComponentDepth = bin.readUshort(data, offset);
offset += 2;
}
return obj;
};
Typr.name = {};
Typr.name.parse = function(data, offset, length) {
var bin = Typr._bin;
var obj = {};
bin.readUshort(data, offset);
offset += 2;
var count = bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
var names = [
"copyright",
"fontFamily",
"fontSubfamily",
"ID",
"fullName",
"version",
"postScriptName",
"trademark",
"manufacturer",
"designer",
"description",
"urlVendor",
"urlDesigner",
"licence",
"licenceURL",
"---",
"typoFamilyName",
"typoSubfamilyName",
"compatibleFull",
"sampleText",
"postScriptCID",
"wwsFamilyName",
"wwsSubfamilyName",
"lightPalette",
"darkPalette"
];
var offset0 = offset;
for (var i = 0; i < count; i++) {
var platformID = bin.readUshort(data, offset);
offset += 2;
var encodingID = bin.readUshort(data, offset);
offset += 2;
var languageID = bin.readUshort(data, offset);
offset += 2;
var nameID = bin.readUshort(data, offset);
offset += 2;
var slen = bin.readUshort(data, offset);
offset += 2;
var noffset = bin.readUshort(data, offset);
offset += 2;
var cname = names[nameID];
var soff = offset0 + count * 12 + noffset;
var str;
if (platformID == 0)
str = bin.readUnicode(data, soff, slen / 2);
else if (platformID == 3 && encodingID == 0)
str = bin.readUnicode(data, soff, slen / 2);
else if (encodingID == 0)
str = bin.readASCII(data, soff, slen);
else if (encodingID == 1)
str = bin.readUnicode(data, soff, slen / 2);
else if (encodingID == 3)
str = bin.readUnicode(data, soff, slen / 2);
else if (platformID == 1) {
str = bin.readASCII(data, soff, slen);
console.warn("reading unknown MAC encoding " + encodingID + " as ASCII");
} else
throw "unknown encoding " + encodingID + ", platformID: " + platformID;
var tid = "p" + platformID + "," + languageID.toString(16);
if (obj[tid] == null)
obj[tid] = {};
obj[tid][cname !== void 0 ? cname : nameID] = str;
obj[tid]._lang = languageID;
}
for (var p in obj)
if (obj[p].postScriptName != null && obj[p]._lang == 1033)
return obj[p];
for (var p in obj)
if (obj[p].postScriptName != null && obj[p]._lang == 0)
return obj[p];
for (var p in obj)
if (obj[p].postScriptName != null && obj[p]._lang == 3084)
return obj[p];
for (var p in obj)
if (obj[p].postScriptName != null)
return obj[p];
var tname;
for (var p in obj) {
tname = p;
break;
}
console.warn("returning name table with languageID " + obj[tname]._lang);
return obj[tname];
};
Typr["OS/2"] = {};
Typr["OS/2"].parse = function(data, offset, length) {
var bin = Typr._bin;
var ver = bin.readUshort(data, offset);
offset += 2;
var obj = {};
if (ver == 0)
Typr["OS/2"].version0(data, offset, obj);
else if (ver == 1)
Typr["OS/2"].version1(data, offset, obj);
else if (ver == 2 || ver == 3 || ver == 4)
Typr["OS/2"].version2(data, offset, obj);
else if (ver == 5)
Typr["OS/2"].version5(data, offset, obj);
else
throw "unknown OS/2 table version: " + ver;
return obj;
};
Typr["OS/2"].version0 = function(data, offset, obj) {
var bin = Typr._bin;
obj.xAvgCharWidth = bin.readShort(data, offset);
offset += 2;
obj.usWeightClass = bin.readUshort(data, offset);
offset += 2;
obj.usWidthClass = bin.readUshort(data, offset);
offset += 2;
obj.fsType = bin.readUshort(data, offset);
offset += 2;
obj.ySubscriptXSize = bin.readShort(data, offset);
offset += 2;
obj.ySubscriptYSize = bin.readShort(data, offset);
offset += 2;
obj.ySubscriptXOffset = bin.readShort(data, offset);
offset += 2;
obj.ySubscriptYOffset = bin.readShort(data, offset);
offset += 2;
obj.ySuperscriptXSize = bin.readShort(data, offset);
offset += 2;
obj.ySuperscriptYSize = bin.readShort(data, offset);
offset += 2;
obj.ySuperscriptXOffset = bin.readShort(data, offset);
offset += 2;
obj.ySuperscriptYOffset = bin.readShort(data, offset);
offset += 2;
obj.yStrikeoutSize = bin.readShort(data, offset);
offset += 2;
obj.yStrikeoutPosition = bin.readShort(data, offset);
offset += 2;
obj.sFamilyClass = bin.readShort(data, offset);
offset += 2;
obj.panose = bin.readBytes(data, offset, 10);
offset += 10;
obj.ulUnicodeRange1 = bin.readUint(data, offset);
offset += 4;
obj.ulUnicodeRange2 = bin.readUint(data, offset);
offset += 4;
obj.ulUnicodeRange3 = bin.readUint(data, offset);
offset += 4;
obj.ulUnicodeRange4 = bin.readUint(data, offset);
offset += 4;
obj.achVendID = [bin.readInt8(data, offset), bin.readInt8(data, offset + 1), bin.readInt8(data, offset + 2), bin.readInt8(data, offset + 3)];
offset += 4;
obj.fsSelection = bin.readUshort(data, offset);
offset += 2;
obj.usFirstCharIndex = bin.readUshort(data, offset);
offset += 2;
obj.usLastCharIndex = bin.readUshort(data, offset);
offset += 2;
obj.sTypoAscender = bin.readShort(data, offset);
offset += 2;
obj.sTypoDescender = bin.readShort(data, offset);
offset += 2;
obj.sTypoLineGap = bin.readShort(data, offset);
offset += 2;
obj.usWinAscent = bin.readUshort(data, offset);
offset += 2;
obj.usWinDescent = bin.readUshort(data, offset);
offset += 2;
return offset;
};
Typr["OS/2"].version1 = function(data, offset, obj) {
var bin = Typr._bin;
offset = Typr["OS/2"].version0(data, offset, obj);
obj.ulCodePageRange1 = bin.readUint(data, offset);
offset += 4;
obj.ulCodePageRange2 = bin.readUint(data, offset);
offset += 4;
return offset;
};
Typr["OS/2"].version2 = function(data, offset, obj) {
var bin = Typr._bin;
offset = Typr["OS/2"].version1(data, offset, obj);
obj.sxHeight = bin.readShort(data, offset);
offset += 2;
obj.sCapHeight = bin.readShort(data, offset);
offset += 2;
obj.usDefault = bin.readUshort(data, offset);
offset += 2;
obj.usBreak = bin.readUshort(data, offset);
offset += 2;
obj.usMaxContext = bin.readUshort(data, offset);
offset += 2;
return offset;
};
Typr["OS/2"].version5 = function(data, offset, obj) {
var bin = Typr._bin;
offset = Typr["OS/2"].version2(data, offset, obj);
obj.usLowerOpticalPointSize = bin.readUshort(data, offset);
offset += 2;
obj.usUpperOpticalPointSize = bin.readUshort(data, offset);
offset += 2;
return offset;
};
Typr.post = {};
Typr.post.parse = function(data, offset, length) {
var bin = Typr._bin;
var obj = {};
obj.version = bin.readFixed(data, offset);
offset += 4;
obj.italicAngle = bin.readFixed(data, offset);
offset += 4;
obj.underlinePosition = bin.readShort(data, offset);
offset += 2;
obj.underlineThickness = bin.readShort(data, offset);
offset += 2;
return obj;
};
Typr.SVG = {};
Typr.SVG.parse = function(data, offset, length) {
var bin = Typr._bin;
var obj = { entries: [] };
var offset0 = offset;
bin.readUshort(data, offset);
offset += 2;
var svgDocIndexOffset = bin.readUint(data, offset);
offset += 4;
bin.readUint(data, offset);
offset += 4;
offset = svgDocIndexOffset + offset0;
var numEntries = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < numEntries; i++) {
var startGlyphID = bin.readUshort(data, offset);
offset += 2;
var endGlyphID = bin.readUshort(data, offset);
offset += 2;
var svgDocOffset = bin.readUint(data, offset);
offset += 4;
var svgDocLength = bin.readUint(data, offset);
offset += 4;
var sbuf = new Uint8Array(data.buffer, offset0 + svgDocOffset + svgDocIndexOffset, svgDocLength);
var svg = bin.readUTF8(sbuf, 0, sbuf.length);
for (var f = startGlyphID; f <= endGlyphID; f++) {
obj.entries[f] = svg;
}
}
return obj;
};
Typr.SVG.toPath = function(str) {
var pth = { cmds: [], crds: [] };
if (str == null)
return pth;
var prsr = new DOMParser();
var doc = prsr["parseFromString"](str, "image/svg+xml");
var svg = doc.firstChild;
while (svg.tagName != "svg")
svg = svg.nextSibling;
var vb = svg.getAttribute("viewBox");
if (vb)
vb = vb.trim().split(" ").map(parseFloat);
else
vb = [0, 0, 1e3, 1e3];
Typr.SVG._toPath(svg.children, pth);
for (var i = 0; i < pth.crds.length; i += 2) {
var x = pth.crds[i], y = pth.crds[i + 1];
x -= vb[0];
y -= vb[1];
y = -y;
pth.crds[i] = x;
pth.crds[i + 1] = y;
}
return pth;
};
Typr.SVG._toPath = function(nds, pth, fill) {
for (var ni = 0; ni < nds.length; ni++) {
var nd = nds[ni], tn = nd.tagName;
var cfl = nd.getAttribute("fill");
if (cfl == null)
cfl = fill;
if (tn == "g")
Typr.SVG._toPath(nd.children, pth, cfl);
else if (tn == "path") {
pth.cmds.push(cfl ? cfl : "#000000");
var d = nd.getAttribute("d");
var toks = Typr.SVG._tokens(d);
Typr.SVG._toksToPath(toks, pth);
pth.cmds.push("X");
} else if (tn == "defs")
;
else
console.warn(tn, nd);
}
};
Typr.SVG._tokens = function(d) {
var ts = [], off = 0, rn = false, cn = "";
while (off < d.length) {
var cc = d.charCodeAt(off), ch = d.charAt(off);
off++;
var isNum = 48 <= cc && cc <= 57 || ch == "." || ch == "-";
if (rn) {
if (ch == "-") {
ts.push(parseFloat(cn));
cn = ch;
} else if (isNum)
cn += ch;
else {
ts.push(parseFloat(cn));
if (ch != "," && ch != " ")
ts.push(ch);
rn = false;
}
} else {
if (isNum) {
cn = ch;
rn = true;
} else if (ch != "," && ch != " ")
ts.push(ch);
}
}
if (rn)
ts.push(parseFloat(cn));
return ts;
};
Typr.SVG._toksToPath = function(ts, pth) {
var i = 0, x = 0, y = 0, ox = 0, oy = 0;
var pc = { "M": 2, "L": 2, "H": 1, "V": 1, "S": 4, "C": 6 };
var cmds = pth.cmds, crds = pth.crds;
while (i < ts.length) {
var cmd = ts[i];
i++;
if (cmd == "z") {
cmds.push("Z");
x = ox;
y = oy;
} else {
var cmu = cmd.toUpperCase();
var ps = pc[cmu], reps = Typr.SVG._reps(ts, i, ps);
for (var j = 0; j < reps; j++) {
var xi = 0, yi = 0;
if (cmd != cmu) {
xi = x;
yi = y;
}
if (cmu == "M") {
x = xi + ts[i++];
y = yi + ts[i++];
cmds.push("M");
crds.push(x, y);
ox = x;
oy = y;
} else if (cmu == "L") {
x = xi + ts[i++];
y = yi + ts[i++];
cmds.push("L");
crds.push(x, y);
} else if (cmu == "H") {
x = xi + ts[i++];
cmds.push("L");
crds.push(x, y);
} else if (cmu == "V") {
y = yi + ts[i++];
cmds.push("L");
crds.push(x, y);
} else if (cmu == "C") {
var x1 = xi + ts[i++], y1 = yi + ts[i++], x2 = xi + ts[i++], y2 = yi + ts[i++], x3 = xi + ts[i++], y3 = yi + ts[i++];
cmds.push("C");
crds.push(x1, y1, x2, y2, x3, y3);
x = x3;
y = y3;
} else if (cmu == "S") {
var co = Math.max(crds.length - 4, 0);
var x1 = x + x - crds[co], y1 = y + y - crds[co + 1];
var x2 = xi + ts[i++], y2 = yi + ts[i++], x3 = xi + ts[i++], y3 = yi + ts[i++];
cmds.push("C");
crds.push(x1, y1, x2, y2, x3, y3);
x = x3;
y = y3;
} else
console.warn("Unknown SVG command " + cmd);
}
}
}
};
Typr.SVG._reps = function(ts, off, ps) {
var i = off;
while (i < ts.length) {
if (typeof ts[i] == "string")
break;
i += ps;
}
return (i - off) / ps;
};
if (Typr == null)
Typr = {};
if (Typr.U == null)
Typr.U = {};
Typr.U.codeToGlyph = function(font, code) {
var cmap = font.cmap;
for (var _i = 0, _a = [cmap.p0e4, cmap.p3e1, cmap.p3e10, cmap.p0e3, cmap.p1e0]; _i < _a.length; _i++) {
var tind = _a[_i];
if (tind == null)
continue;
var tab = cmap.tables[tind];
if (tab.format == 0) {
if (code >= tab.map.length)
continue;
return tab.map[code];
} else if (tab.format == 4) {
var sind = -1;
for (var i = 0; i < tab.endCount.length; i++) {
if (code <= tab.endCount[i]) {
sind = i;
break;
}
}
if (sind == -1)
continue;
if (tab.startCount[sind] > code)
continue;
var gli = 0;
if (tab.idRangeOffset[sind] != 0) {
gli = tab.glyphIdArray[code - tab.startCount[sind] + (tab.idRangeOffset[sind] >> 1) - (tab.idRangeOffset.length - sind)];
} else {
gli = code + tab.idDelta[sind];
}
return gli & 65535;
} else if (tab.format == 12) {
if (code > tab.groups[tab.groups.length - 1][1])
continue;
for (var i = 0; i < tab.groups.length; i++) {
var grp = tab.groups[i];
if (grp[0] <= code && code <= grp[1])
return grp[2] + (code - grp[0]);
}
continue;
} else {
throw "unknown cmap table format " + tab.format;
}
}
return 0;
};
Typr.U.glyphToPath = function(font, gid) {
var path = { cmds: [], crds: [] };
if (font.SVG && font.SVG.entries[gid]) {
var p = font.SVG.entries[gid];
if (p == null)
return path;
if (typeof p == "string") {
p = Typr.SVG.toPath(p);
font.SVG.entries[gid] = p;
}
return p;
} else if (font.CFF) {
var state = { x: 0, y: 0, stack: [], nStems: 0, haveWidth: false, width: font.CFF.Private ? font.CFF.Private.defaultWidthX : 0, open: false };
var cff = font.CFF, pdct = font.CFF.Private;
if (cff.ROS) {
var gi = 0;
while (cff.FDSelect[gi + 2] <= gid)
gi += 2;
pdct = cff.FDArray[cff.FDSelect[gi + 1]].Private;
}
Typr.U._drawCFF(font.CFF.CharStrings[gid], state, cff, pdct, path);
} else if (font.glyf) {
Typr.U._drawGlyf(gid, font, path);
}
return path;
};
Typr.U._drawGlyf = function(gid, font, path) {
var gl = font.glyf[gid];
if (gl == null)
gl = font.glyf[gid] = Typr.glyf._parseGlyf(font, gid);
if (gl != null) {
if (gl.noc > -1) {
Typr.U._simpleGlyph(gl, path);
} else {
Typr.U._compoGlyph(gl, font, path);
}
}
};
Typr.U._simpleGlyph = function(gl, p) {
for (var c = 0; c < gl.noc; c++) {
var i0 = c == 0 ? 0 : gl.endPts[c - 1] + 1;
var il = gl.endPts[c];
for (var i = i0; i <= il; i++) {
var pr = i == i0 ? il : i - 1;
var nx = i == il ? i0 : i + 1;
var onCurve = gl.flags[i] & 1;
var prOnCurve = gl.flags[pr] & 1;
var nxOnCurve = gl.flags[nx] & 1;
var x = gl.xs[i], y = gl.ys[i];
if (i == i0) {
if (onCurve) {
if (prOnCurve) {
Typr.U.P.moveTo(p, gl.xs[pr], gl.ys[pr]);
} else {
Typr.U.P.moveTo(p, x, y);
continue;
}
} else {
if (prOnCurve) {
Typr.U.P.moveTo(p, gl.xs[pr], gl.ys[pr]);
} else {
Typr.U.P.moveTo(p, (gl.xs[pr] + x) / 2, (gl.ys[pr] + y) / 2);
}
}
}
if (onCurve) {
if (prOnCurve)
Typr.U.P.lineTo(p, x, y);
} else {
if (nxOnCurve) {
Typr.U.P.qcurveTo(p, x, y, gl.xs[nx], gl.ys[nx]);
} else {
Typr.U.P.qcurveTo(p, x, y, (x + gl.xs[nx]) / 2, (y + gl.ys[nx]) / 2);
}
}
}
Typr.U.P.closePath(p);
}
};
Typr.U._compoGlyph = function(gl, font, p) {
for (var j = 0; j < gl.parts.length; j++) {
var path = { cmds: [], crds: [] };
var prt = gl.parts[j];
Typr.U._drawGlyf(prt.glyphIndex, font, path);
var m = prt.m;
for (var i = 0; i < path.crds.length; i += 2) {
var x = path.crds[i], y = path.crds[i + 1];
p.crds.push(x * m.a + y * m.b + m.tx);
p.crds.push(x * m.c + y * m.d + m.ty);
}
for (var i = 0; i < path.cmds.length; i++) {
p.cmds.push(path.cmds[i]);
}
}
};
Typr.U._getGlyphClass = function(g, cd) {
var intr = Typr._lctf.getInterval(cd, g);
return intr == -1 ? 0 : cd[intr + 2];
};
Typr.U.getPairAdjustment = function(font, g1, g2) {
var hasGPOSkern = false;
if (font.GPOS) {
var gpos = font["GPOS"];
var llist = gpos.lookupList, flist = gpos.featureList;
var tused = [];
for (var i = 0; i < flist.length; i++) {
var fl = flist[i];
if (fl.tag != "kern")
continue;
hasGPOSkern = true;
for (var ti = 0; ti < fl.tab.length; ti++) {
if (tused[fl.tab[ti]])
continue;
tused[fl.tab[ti]] = true;
var tab = llist[fl.tab[ti]];
for (var j = 0; j < tab.tabs.length; j++) {
if (tab.tabs[j] == null)
continue;
var ltab = tab.tabs[j], ind;
if (ltab.coverage) {
ind = Typr._lctf.coverageIndex(ltab.coverage, g1);
if (ind == -1)
continue;
}
if (tab.ltype == 1)
;
else if (tab.ltype == 2) {
var adj = null;
if (ltab.fmt == 1) {
var right = ltab.pairsets[ind];
for (var i = 0; i < right.length; i++) {
if (right[i].gid2 == g2)
adj = right[i];
}
} else if (ltab.fmt == 2) {
var c1 = Typr.U._getGlyphClass(g1, ltab.classDef1);
var c2 = Typr.U._getGlyphClass(g2, ltab.classDef2);
adj = ltab.matrix[c1][c2];
}
if (adj) {
var offset = 0;
if (adj.val1 && adj.val1[2])
offset += adj.val1[2];
if (adj.val2 && adj.val2[0])
offset += adj.val2[0];
return offset;
}
}
}
}
}
}
if (font.kern && !hasGPOSkern) {
var ind1 = font.kern.glyph1.indexOf(g1);
if (ind1 != -1) {
var ind2 = font.kern.rval[ind1].glyph2.indexOf(g2);
if (ind2 != -1)
return font.kern.rval[ind1].vals[ind2];
}
}
return 0;
};
Typr.U.stringToGlyphs = function(font, str) {
var gls = [];
for (var i = 0; i < str.length; i++) {
var cc = str.codePointAt(i);
if (cc > 65535)
i++;
gls.push(Typr.U.codeToGlyph(font, cc));
}
for (var i = 0; i < str.length; i++) {
var cc = str.codePointAt(i);
if (cc == 2367) {
var t = gls[i - 1];
gls[i - 1] = gls[i];
gls[i] = t;
}
if (cc > 65535)
i++;
}
var gsub = font["GSUB"];
if (gsub == null)
return gls;
var llist = gsub.lookupList, flist = gsub.featureList;
var cligs = [
"rlig",
"liga",
"mset",
"isol",
"init",
"fina",
"medi",
"half",
"pres",
"blws"
/* Tibetan fonts like Himalaya.ttf */
];
var tused = [];
for (var fi = 0; fi < flist.length; fi++) {
var fl = flist[fi];
if (cligs.indexOf(fl.tag) == -1)
continue;
for (var ti = 0; ti < fl.tab.length; ti++) {
if (tused[fl.tab[ti]])
continue;
tused[fl.tab[ti]] = true;
var tab = llist[fl.tab[ti]];
for (var ci = 0; ci < gls.length; ci++) {
var feat = Typr.U._getWPfeature(str, ci);
if ("isol,init,fina,medi".indexOf(fl.tag) != -1 && fl.tag != feat)
continue;
Typr.U._applySubs(gls, ci, tab, llist);
}
}
}
return gls;
};
Typr.U._getWPfeature = function(str, ci) {
var wsep = '\n " ,.:;!?() ،';
var R = "آأؤإاةدذرزوٱٲٳٵٶٷڈډڊڋڌڍڎڏڐڑڒړڔڕږڗژڙۀۃۄۅۆۇۈۉۊۋۍۏےۓەۮۯܐܕܖܗܘܙܞܨܪܬܯݍݙݚݛݫݬݱݳݴݸݹࡀࡆࡇࡉࡔࡧࡩࡪࢪࢫࢬࢮࢱࢲࢹૅેૉૐૡ૯ஃஅஉஎஏனப";
var L = "ꡲ્";
var slft = ci == 0 || wsep.indexOf(str[ci - 1]) != -1;
var srgt = ci == str.length - 1 || wsep.indexOf(str[ci + 1]) != -1;
if (!slft && R.indexOf(str[ci - 1]) != -1)
slft = true;
if (!srgt && R.indexOf(str[ci]) != -1)
srgt = true;
if (!srgt && L.indexOf(str[ci + 1]) != -1)
srgt = true;
if (!slft && L.indexOf(str[ci]) != -1)
slft = true;
var feat = null;
if (slft) {
feat = srgt ? "isol" : "init";
} else {
feat = srgt ? "fina" : "medi";
}
return feat;
};
Typr.U._applySubs = function(gls, ci, tab, llist) {
var rlim = gls.length - ci - 1;
for (var j = 0; j < tab.tabs.length; j++) {
if (tab.tabs[j] == null)
continue;
var ltab = tab.tabs[j], ind;
if (ltab.coverage) {
ind = Typr._lctf.coverageIndex(ltab.coverage, gls[ci]);
if (ind == -1)
continue;
}
if (tab.ltype == 1) {
gls[ci];
if (ltab.fmt == 1)
gls[ci] = gls[ci] + ltab.delta;
else
gls[ci] = ltab.newg[ind];
} else if (tab.ltype == 4) {
var vals = ltab.vals[ind];
for (var k = 0; k < vals.length; k++) {
var lig = vals[k], rl = lig.chain.length;
if (rl > rlim)
continue;
var good = true, em1 = 0;
for (var l = 0; l < rl; l++) {
while (gls[ci + em1 + (1 + l)] == -1)
em1++;
if (lig.chain[l] != gls[ci + em1 + (1 + l)])
good = false;
}
if (!good)
continue;
gls[ci] = lig.nglyph;
for (var l = 0; l < rl + em1; l++)
gls[ci + l + 1] = -1;
break;
}
} else if (tab.ltype == 5 && ltab.fmt == 2) {
var cind = Typr._lctf.getInterval(ltab.cDef, gls[ci]);
var cls = ltab.cDef[cind + 2], scs = ltab.scset[cls];
for (var i = 0; i < scs.length; i++) {
var sc = scs[i], inp = sc.input;
if (inp.length > rlim)
continue;
var good = true;
for (var l = 0; l < inp.length; l++) {
var cind2 = Typr._lctf.getInterval(ltab.cDef, gls[ci + 1 + l]);
if (cind == -1 && ltab.cDef[cind2 + 2] != inp[l]) {
good = false;
break;
}
}
if (!good)
continue;
var lrs = sc.substLookupRecords;
for (var k = 0; k < lrs.length; k += 2) {
lrs[k];
lrs[k + 1];
}
}
} else if (tab.ltype == 6 && ltab.fmt == 3) {
if (!Typr.U._glsCovered(gls, ltab.backCvg, ci - ltab.backCvg.length))
continue;
if (!Typr.U._glsCovered(gls, ltab.inptCvg, ci))
continue;
if (!Typr.U._glsCovered(gls, ltab.ahedCvg, ci + ltab.inptCvg.length))
continue;
var lr = ltab.lookupRec;
for (var i = 0; i < lr.length; i += 2) {
var cind = lr[i], tab2 = llist[lr[i + 1]];
Typr.U._applySubs(gls, ci + cind, tab2, llist);
}
}
}
};
Typr.U._glsCovered = function(gls, cvgs, ci) {
for (var i = 0; i < cvgs.length; i++) {
var ind = Typr._lctf.coverageIndex(cvgs[i], gls[ci + i]);
if (ind == -1)
return false;
}
return true;
};
Typr.U.glyphsToPath = function(font, gls, clr) {
var tpath = { cmds: [], crds: [] };
var x = 0;
for (var i = 0; i < gls.length; i++) {
var gid = gls[i];
if (gid == -1)
continue;
var gid2 = i < gls.length - 1 && gls[i + 1] != -1 ? gls[i + 1] : 0;
var path = Typr.U.glyphToPath(font, gid);
for (var j = 0; j < path.crds.length; j += 2) {
tpath.crds.push(path.crds[j] + x);
tpath.crds.push(path.crds[j + 1]);
}
if (clr)
tpath.cmds.push(clr);
for (var j = 0; j < path.cmds.length; j++)
tpath.cmds.push(path.cmds[j]);
if (clr)
tpath.cmds.push("X");
x += font.hmtx.aWidth[gid];
if (i < gls.length - 1)
x += Typr.U.getPairAdjustment(font, gid, gid2);
}
return tpath;
};
Typr.U.pathToSVG = function(path, prec) {
if (prec == null)
prec = 5;
var out = [], co = 0, lmap = { "M": 2, "L": 2, "Q": 4, "C": 6 };
for (var i = 0; i < path.cmds.length; i++) {
var cmd = path.cmds[i], cn = co + (lmap[cmd] ? lmap[cmd] : 0);
out.push(cmd);
while (co < cn) {
var c = path.crds[co++];
out.push(parseFloat(c.toFixed(prec)) + (co == cn ? "" : " "));
}
}
return out.join("");
};
Typr.U.pathToContext = function(path, ctx) {
var c = 0, crds = path.crds;
for (var j = 0; j < path.cmds.length; j++) {
var cmd = path.cmds[j];
if (cmd == "M") {
ctx.moveTo(crds[c], crds[c + 1]);
c += 2;
} else if (cmd == "L") {
ctx.lineTo(crds[c], crds[c + 1]);
c += 2;
} else if (cmd == "C") {
ctx.bezierCurveTo(crds[c], crds[c + 1], crds[c + 2], crds[c + 3], crds[c + 4], crds[c + 5]);
c += 6;
} else if (cmd == "Q") {
ctx.quadraticCurveTo(crds[c], crds[c + 1], crds[c + 2], crds[c + 3]);
c += 4;
} else if (cmd.charAt(0) == "#") {
ctx.beginPath();
ctx.fillStyle = cmd;
} else if (cmd == "Z") {
ctx.closePath();
} else if (cmd == "X") {
ctx.fill();
}
}
};
Typr.U.P = {};
Typr.U.P.moveTo = function(p, x, y) {
p.cmds.push("M");
p.crds.push(x, y);
};
Typr.U.P.lineTo = function(p, x, y) {
p.cmds.push("L");
p.crds.push(x, y);
};
Typr.U.P.curveTo = function(p, a, b, c, d, e, f) {
p.cmds.push("C");
p.crds.push(a, b, c, d, e, f);
};
Typr.U.P.qcurveTo = function(p, a, b, c, d) {
p.cmds.push("Q");
p.crds.push(a, b, c, d);
};
Typr.U.P.closePath = function(p) {
p.cmds.push("Z");
};
Typr.U._drawCFF = function(cmds, state, font, pdct, p) {
var stack = state.stack;
var nStems = state.nStems, haveWidth = state.haveWidth, width = state.width, open = state.open;
var i = 0;
var x = state.x, y = state.y, c1x = 0, c1y = 0, c2x = 0, c2y = 0, c3x = 0, c3y = 0, c4x = 0, c4y = 0, jpx = 0, jpy = 0;
var o = { val: 0, size: 0 };
while (i < cmds.length) {
Typr.CFF.getCharString(cmds, i, o);
var v = o.val;
i += o.size;
if (v == "o1" || v == "o18") {
var hasWidthArg;
hasWidthArg = stack.length % 2 !== 0;
if (hasWidthArg && !haveWidth) {
width = stack.shift() + pdct.nominalWidthX;
}
nStems += stack.length >> 1;
stack.length = 0;
haveWidth = true;
} else if (v == "o3" || v == "o23") {
var hasWidthArg;
hasWidthArg = stack.length % 2 !== 0;
if (hasWidthArg && !haveWidth) {
width = stack.shift() + pdct.nominalWidthX;
}
nStems += stack.length >> 1;
stack.length = 0;
haveWidth = true;
} else if (v == "o4") {
if (stack.length > 1 && !haveWidth) {
width = stack.shift() + pdct.nominalWidthX;
haveWidth = true;
}
if (open)
Typr.U.P.closePath(p);
y += stack.pop();
Typr.U.P.moveTo(p, x, y);
open = true;
} else if (v == "o5") {
while (stack.length > 0) {
x += stack.shift();
y += stack.shift();
Typr.U.P.lineTo(p, x, y);
}
} else if (v == "o6" || v == "o7") {
var count = stack.length;
var isX = v == "o6";
for (var j = 0; j < count; j++) {
var sval = stack.shift();
if (isX) {
x += sval;
} else {
y += sval;
}
isX = !isX;
Typr.U.P.lineTo(p, x, y);
}
} else if (v == "o8" || v == "o24") {
var count = stack.length;
var index = 0;
while (index + 6 <= count) {
c1x = x + stack.shift();
c1y = y + stack.shift();
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
x = c2x + stack.shift();
y = c2y + stack.shift();
Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, x, y);
index += 6;
}
if (v == "o24") {
x += stack.shift();
y += stack.shift();
Typr.U.P.lineTo(p, x, y);
}
} else if (v == "o11") {
break;
} else if (v == "o1234" || v == "o1235" || v == "o1236" || v == "o1237") {
if (v == "o1234") {
c1x = x + stack.shift();
c1y = y;
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
jpx = c2x + stack.shift();
jpy = c2y;
c3x = jpx + stack.shift();
c3y = c2y;
c4x = c3x + stack.shift();
c4y = y;
x = c4x + stack.shift();
Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, jpx, jpy);
Typr.U.P.curveTo(p, c3x, c3y, c4x, c4y, x, y);
}
if (v == "o1235") {
c1x = x + stack.shift();
c1y = y + stack.shift();
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
jpx = c2x + stack.shift();
jpy = c2y + stack.shift();
c3x = jpx + stack.shift();
c3y = jpy + stack.shift();
c4x = c3x + stack.shift();
c4y = c3y + stack.shift();
x = c4x + stack.shift();
y = c4y + stack.shift();
stack.shift();
Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, jpx, jpy);
Typr.U.P.curveTo(p, c3x, c3y, c4x, c4y, x, y);
}
if (v == "o1236") {
c1x = x + stack.shift();
c1y = y + stack.shift();
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
jpx = c2x + stack.shift();
jpy = c2y;
c3x = jpx + stack.shift();
c3y = c2y;
c4x = c3x + stack.shift();
c4y = c3y + stack.shift();
x = c4x + stack.shift();
Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, jpx, jpy);
Typr.U.P.curveTo(p, c3x, c3y, c4x, c4y, x, y);
}
if (v == "o1237") {
c1x = x + stack.shift();
c1y = y + stack.shift();
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
jpx = c2x + stack.shift();
jpy = c2y + stack.shift();
c3x = jpx + stack.shift();
c3y = jpy + stack.shift();
c4x = c3x + stack.shift();
c4y = c3y + stack.shift();
if (Math.abs(c4x - x) > Math.abs(c4y - y)) {
x = c4x + stack.shift();
} else {
y = c4y + stack.shift();
}
Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, jpx, jpy);
Typr.U.P.curveTo(p, c3x, c3y, c4x, c4y, x, y);
}
} else if (v == "o14") {
if (stack.length > 0 && !haveWidth) {
width = stack.shift() + font.nominalWidthX;
haveWidth = true;
}
if (stack.length == 4) {
var adx = stack.shift();
var ady = stack.shift();
var bchar = stack.shift();
var achar = stack.shift();
var bind2 = Typr.CFF.glyphBySE(font, bchar);
var aind = Typr.CFF.glyphBySE(font, achar);
Typr.U._drawCFF(font.CharStrings[bind2], state, font, pdct, p);
state.x = adx;
state.y = ady;
Typr.U._drawCFF(font.CharStrings[aind], state, font, pdct, p);
}
if (open) {
Typr.U.P.closePath(p);
open = false;
}
} else if (v == "o19" || v == "o20") {
var hasWidthArg;
hasWidthArg = stack.length % 2 !== 0;
if (hasWidthArg && !haveWidth) {
width = stack.shift() + pdct.nominalWidthX;
}
nStems += stack.length >> 1;
stack.length = 0;
haveWidth = true;
i += nStems + 7 >> 3;
} else if (v == "o21") {
if (stack.length > 2 && !haveWidth) {
width = stack.shift() + pdct.nominalWidthX;
haveWidth = true;
}
y += stack.pop();
x += stack.pop();
if (open)
Typr.U.P.closePath(p);
Typr.U.P.moveTo(p, x, y);
open = true;
} else if (v == "o22") {
if (stack.length > 1 && !haveWidth) {
width = stack.shift() + pdct.nominalWidthX;
haveWidth = true;
}
x += stack.pop();
if (open)
Typr.U.P.closePath(p);
Typr.U.P.moveTo(p, x, y);
open = true;
} else if (v == "o25") {
while (stack.length > 6) {
x += stack.shift();
y += stack.shift();
Typr.U.P.lineTo(p, x, y);
}
c1x = x + stack.shift();
c1y = y + stack.shift();
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
x = c2x + stack.shift();
y = c2y + stack.shift();
Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, x, y);
} else if (v == "o26") {
if (stack.length % 2) {
x += stack.shift();
}
while (stack.length > 0) {
c1x = x;
c1y = y + stack.shift();
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
x = c2x;
y = c2y + stack.shift();
Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, x, y);
}
} else if (v == "o27") {
if (stack.length % 2) {
y += stack.shift();
}
while (stack.length > 0) {
c1x = x + stack.shift();
c1y = y;
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
x = c2x + stack.shift();
y = c2y;
Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, x, y);
}
} else if (v == "o10" || v == "o29") {
var obj = v == "o10" ? pdct : font;
if (stack.length == 0) {
console.warn("error: empty stack");
} else {
var ind = stack.pop();
var subr = obj.Subrs[ind + obj.Bias];
state.x = x;
state.y = y;
state.nStems = nStems;
state.haveWidth = haveWidth;
state.width = width;
state.open = open;
Typr.U._drawCFF(subr, state, font, pdct, p);
x = state.x;
y = state.y;
nStems = state.nStems;
haveWidth = state.haveWidth;
width = state.width;
open = state.open;
}
} else if (v == "o30" || v == "o31") {
var count, count1 = stack.length;
var index = 0;
var alternate = v == "o31";
count = count1 & ~2;
index += count1 - count;
while (index < count) {
if (alternate) {
c1x = x + stack.shift();
c1y = y;
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
y = c2y + stack.shift();
if (count - index == 5) {
x = c2x + stack.shift();
index++;
} else {
x = c2x;
}
alternate = false;
} else {
c1x = x;
c1y = y + stack.shift();
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
x = c2x + stack.shift();
if (count - index == 5) {
y = c2y + stack.shift();
index++;
} else {
y = c2y;
}
alternate = true;
}
Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, x, y);
index += 4;
}
} else if ((v + "").charAt(0) == "o") {
console.warn("Unknown operation: " + v, cmds);
throw v;
} else
stack.push(v);
}
state.x = x;
state.y = y;
state.nStems = nStems;
state.haveWidth = haveWidth;
state.width = width;
state.open = open;
};
Typr$1.Typr = Typr;
var Typr_js_1 = Typr$1;
var friendlyTags = { "aalt": "Access All Alternates", "abvf": "Above-base Forms", "abvm": "Above - base Mark Positioning", "abvs": "Above - base Substitutions", "afrc": "Alternative Fractions", "akhn": "Akhands", "blwf": "Below - base Forms", "blwm": "Below - base Mark Positioning", "blws": "Below - base Substitutions", "calt": "Contextual Alternates", "case": "Case - Sensitive Forms", "ccmp": "Glyph Composition / Decomposition", "cfar": "Conjunct Form After Ro", "cjct": "Conjunct Forms", "clig": "Contextual Ligatures", "cpct": "Centered CJK Punctuation", "cpsp": "Capital Spacing", "cswh": "Contextual Swash", "curs": "Cursive Positioning", "c2pc": "Petite Capitals From Capitals", "c2sc": "Small Capitals From Capitals", "dist": "Distances", "dlig": "Discretionary Ligatures", "dnom": "Denominators", "dtls": "Dotless Forms", "expt": "Expert Forms", "falt": "Final Glyph on Line Alternates", "fin2": "Terminal Forms #2", "fin3": "Terminal Forms #3", "fina": "Terminal Forms", "flac": "Flattened accent forms", "frac": "Fractions", "fwid": "Full Widths", "half": "Half Forms", "haln": "Halant Forms", "halt": "Alternate Half Widths", "hist": "Historical Forms", "hkna": "Horizontal Kana Alternates", "hlig": "Historical Ligatures", "hngl": "Hangul", "hojo": "Hojo Kanji Forms(JIS X 0212 - 1990 Kanji Forms)", "hwid": "Half Widths", "init": "Initial Forms", "isol": "Isolated Forms", "ital": "Italics", "jalt": "Justification Alternates", "jp78": "JIS78 Forms", "jp83": "JIS83 Forms", "jp90": "JIS90 Forms", "jp04": "JIS2004 Forms", "kern": "Kerning", "lfbd": "Left Bounds", "liga": "Standard Ligatures", "ljmo": "Leading Jamo Forms", "lnum": "Lining Figures", "locl": "Localized Forms", "ltra": "Left - to - right alternates", "ltrm": "Left - to - right mirrored forms", "mark": "Mark Positioning", "med2": "Medial Forms #2", "medi": "Medial Forms", "mgrk": "Mathematical Greek", "mkmk": "Mark to Mark Positioning", "mset": "Mark Positioning via Substitution", "nalt": "Alternate Annotation Forms", "nlck": "NLC Kanji Forms", "nukt": "Nukta Forms", "numr": "Numerators", "onum": "Oldstyle Figures", "opbd": "Optical Bounds", "ordn": "Ordinals", "ornm": "Ornaments", "palt": "Proportional Alternate Widths", "pcap": "Petite Capitals", "pkna": "Proportional Kana", "pnum": "Proportional Figures", "pref": "Pre - Base Forms", "pres": "Pre - base Substitutions", "pstf": "Post - base Forms", "psts": "Post - base Substitutions", "pwid": "Proportional Widths", "qwid": "Quarter Widths", "rand": "Randomize", "rclt": "Required Contextual Alternates", "rkrf": "Rakar Forms", "rlig": "Required Ligatures", "rphf": "Reph Forms", "rtbd": "Right Bounds", "rtla": "Right - to - left alternates", "rtlm": "Right - to - left mirrored forms", "ruby": "Ruby Notation Forms", "rvrn": "Required Variation Alternates", "salt": "Stylistic Alternates", "sinf": "Scientific Inferiors", "size": "Optical size", "smcp": "Small Capitals", "smpl": "Simplified Forms", "ssty": "Math script style alternates", "stch": "Stretching Glyph Decomposition", "subs": "Subscript", "sups": "Superscript", "swsh": "Swash", "titl": "Titling", "tjmo": "Trailing Jamo Forms", "tnam": "Traditional Name Forms", "tnum": "Tabular Figures", "trad": "Traditional Forms", "twid": "Third Widths", "unic": "Unicase", "valt": "Alternate Vertical Metrics", "vatu": "Vattu Variants", "vert": "Vertical Writing", "vhal": "Alternate Vertical Half Metrics", "vjmo": "Vowel Jamo Forms", "vkna": "Vertical Kana Alternates", "vkrn": "Vertical Kerning", "vpal": "Proportional Alternate Vertical Metrics", "vrt2": "Vertical Alternates and Rotation", "vrtr": "Vertical Alternates for Rotation", "zero": "Slashed Zero" };
var Font = (
/** @class */
function() {
function Font2(data) {
var obj = Typr_js_1.Typr.parse(data);
if (!obj.length || typeof obj[0] !== "object" || typeof obj[0].hasOwnProperty !== "function") {
throw "unable to parse font";
}
for (var n in obj[0]) {
this[n] = obj[0][n];
}
this.enabledGSUB = {};
}
Font2.prototype.getFamilyName = function() {
return this.name && (this.name.typoFamilyName || this.name.fontFamily) || "";
};
Font2.prototype.getSubFamilyName = function() {
return this.name && (this.name.typoSubfamilyName || this.name.fontSubfamily) || "";
};
Font2.prototype.glyphToPath = function(gid) {
return Typr_js_1.Typr.U.glyphToPath(this, gid);
};
Font2.prototype.getPairAdjustment = function(gid1, gid2) {
return Typr_js_1.Typr.U.getPairAdjustment(this, gid1, gid2);
};
Font2.prototype.stringToGlyphs = function(str) {
return Typr_js_1.Typr.U.stringToGlyphs(this, str);
};
Font2.prototype.glyphsToPath = function(gls) {
return Typr_js_1.Typr.U.glyphsToPath(this, gls);
};
Font2.prototype.pathToSVG = function(path, prec) {
return Typr_js_1.Typr.U.pathToSVG(path, prec);
};
Font2.prototype.pathToContext = function(path, ctx) {
return Typr_js_1.Typr.U.pathToContext(path, ctx);
};
Font2.prototype.lookupFriendlyName = function(table, feature) {
if (this[table] !== void 0) {
var tbl = this[table];
var feat = tbl.featureList[feature];
return this.featureFriendlyName(feat);
}
return "";
};
Font2.prototype.featureFriendlyName = function(feature) {
if (friendlyTags[feature.tag]) {
return friendlyTags[feature.tag];
}
if (feature.tag.match(/ss[0-2][0-9]/)) {
var name_1 = "Stylistic Set " + Number(feature.tag.substr(2, 2)).toString();
if (feature.featureParams) {
var version = Typr_js_1.Typr._bin.readUshort(this._data, feature.featureParams);
if (version === 0) {
var nameID = Typr_js_1.Typr._bin.readUshort(this._data, feature.featureParams + 2);
if (this.name && this.name[nameID] !== void 0) {
return name_1 + " - " + this.name[nameID];
}
}
}
return name_1;
}
if (feature.tag.match(/cv[0-9][0-9]/)) {
return "Character Variant " + Number(feature.tag.substr(2, 2)).toString();
}
return "";
};
Font2.prototype.enableGSUB = function(featureNumber) {
if (this.GSUB) {
var feature = this.GSUB.featureList[featureNumber];
if (feature) {
for (var i = 0; i < feature.tab.length; ++i) {
this.enabledGSUB[feature.tab[i]] = (this.enabledGSUB[feature.tab[i]] || 0) + 1;
}
}
}
};
Font2.prototype.disableGSUB = function(featureNumber) {
if (this.GSUB) {
var feature = this.GSUB.featureList[featureNumber];
if (feature) {
for (var i = 0; i < feature.tab.length; ++i) {
if (this.enabledGSUB[feature.tab[i]] > 1) {
--this.enabledGSUB[feature.tab[i]];
} else {
delete this.enabledGSUB[feature.tab[i]];
}
}
}
}
};
Font2.prototype.codeToGlyph = function(code) {
var g = Typr_js_1.Typr.U.codeToGlyph(this, code);
if (this.GSUB) {
var gls = [g];
for (var n in this.enabledGSUB) {
var l = this.GSUB.lookupList[n];
Typr_js_1.Typr.U._applySubs(gls, 0, l, this.GSUB.lookupList);
}
if (gls.length === 1)
return gls[0];
}
return g;
};
return Font2;
}()
);
var Font_1 = Font;
function decrypt(iframeDocument) {
var _a, _b, _c;
const styles = iframeDocument.querySelectorAll("style");
let tip;
for (let i = 0; i < styles.length; i++) {
if ((_a = styles[i].textContent) == null ? void 0 : _a.includes("font-cxsecret")) {
tip = styles[i];
break;
}
}
if (!tip)
return;
const fontData = (_c = (_b = tip.textContent) == null ? void 0 : _b.match(/base64,([\w\W]+?)'/)) == null ? void 0 : _c[1];
if (!fontData)
return;
const fontBuffer = base64ToArrayBuffer(fontData);
const font = new Font_1(fontBuffer);
const table = JSON.parse(_GM_getResourceText("ttf"));
const match = {};
for (let i = 19968; i < 40870; i++) {
const glyph = font.codeToGlyph(i);
if (!glyph)
continue;
const path = font.glyphToPath(glyph);
const hash = md5(JSON.stringify(path)).slice(24);
match[i] = table[hash];
}
const elements = iframeDocument.querySelectorAll(".font-cxsecret");
for (let i = 0; i < elements.length; i++) {
const el = elements[i];
let html = el.innerHTML;
for (const key in match) {
const value = String.fromCharCode(match[key]);
const regExp = new RegExp(String.fromCharCode(Number(key)), "g");
html = html.replace(regExp, value);
}
el.innerHTML = html;
el.classList.remove("font-cxsecret");
}
function base64ToArrayBuffer(base64) {
const data = window.atob(base64);
const buffer = new ArrayBuffer(data.length);
const bytes = new Uint8Array(buffer);
for (let i = 0; i < data.length; ++i) {
bytes[i] = data.charCodeAt(i);
}
return buffer;
}
}
class BaseQuestionHandler {
constructor() {
__publicField(this, "_document", document);
__publicField(this, "_window", _unsafeWindow);
__publicField(this, "addLog");
__publicField(this, "addQuestion");
__publicField(this, "questions", []);
__publicField(this, "correctNum", 0);
__publicField(this, "parseHtml", () => {
throw new Error("请使用继承类的重写方法");
});
__publicField(this, "fillQuestion", (question) => {
throw new Error("请使用继承类的重写方法");
});
__publicField(this, "removeHtml", (html) => {
if (html == null) {
return "";
}
return html.replace(/<((?!img|sub|sup|br)[^>]+)>/g, "").replace(/ /g, " ").replace(/\s+/g, " ").replace(/
/g, "\n").replace(//g, '
').trim();
});
__publicField(this, "clean", (str) => {
return str.replace(/^【*?】\s*/, "").replace(/\s*(\d+\.\d+分)$/, "");
});
__publicField(this, "extractAnswerLetters", (answer) => {
const raw = String(answer == null ? "" : answer).trim();
if (!raw) return [];
const upper = raw.toUpperCase();
const fullwidth = upper.match(/[A-Z]/g) || [];
const ascii = upper.match(/[A-Z]/g) || [];
if (ascii.length) return ascii;
if (fullwidth.length) return fullwidth.map((ch) => String.fromCharCode(ch.charCodeAt(0) - 65248));
return [];
});
__publicField(this, "isPureLetterAnswer", (answer) => {
const raw = String(answer == null ? "" : answer).trim();
if (!raw) return false;
return /^[A-Za-zA-Z]([A-Za-zA-Z,,、\s]*)$/.test(raw);
});
__publicField(this, "findMatchedOption", (options, answer) => {
const entries = Object.entries(options || {});
if (entries.length && this.isPureLetterAnswer(answer)) {
const letters = this.extractAnswerLetters(answer);
const picked = [];
for (const letter of letters) {
const index = letter.charCodeAt(0) - 65;
if (index >= 0 && index < entries.length) picked.push(entries[index]);
}
if (picked.length === 1) return picked[0][1];
if (picked.length > 1) {
const virtual = {};
for (const [text, element] of picked) virtual[text] = element;
return virtual;
}
}
const normalizedAnswer = this.normalizeOptionMatchText(String(answer));
if (!normalizedAnswer)
return null;
let bestElement = null;
let bestScore = -1;
for (const [optionText, optionElement] of entries) {
const score = this.calculateTextSimilarity(
this.normalizeOptionMatchText(optionText),
normalizedAnswer
);
if (score > bestScore) {
bestElement = optionElement;
bestScore = score;
}
}
if (!bestElement)
return null;
return bestScore >= this.getAnswerSimilarityThreshold() ? bestElement : null;
});
__publicField(this, "inferQuestionTypeByStructure", (questionElement, optionElements, optionTexts) => {
if (this.hasCheckboxControl(questionElement, optionElements))
return "1";
if (this.isJudgementQuestion(questionElement, optionElements, optionTexts))
return "3";
if (this.hasRadioControl(questionElement, optionElements))
return "0";
if (optionElements.length > 0)
return "0";
if (this.hasFillBlankControl(questionElement))
return "2";
if (this.hasLongTextControl(questionElement))
return "4";
return "8";
});
__publicField(this, "hasFillBlankControl", (questionElement) => {
const textInputs = Array.from(questionElement.querySelectorAll("input")).filter((input) => {
const type = (input.getAttribute("type") || "text").toLowerCase();
return ["", "text", "search", "number", "tel", "url", "email"].includes(type) && !input.disabled && !input.hidden;
});
const textareas = questionElement.querySelectorAll("textarea");
const editableElements = questionElement.querySelectorAll('[contenteditable="true"]');
const inputLikeElements = questionElement.querySelectorAll('input, textarea, [contenteditable="true"]');
const hasBlankCue = Array.from(inputLikeElements).some((element) => {
const attrs = [
element.getAttribute("class") || "",
element.getAttribute("name") || "",
element.getAttribute("placeholder") || ""
].join(" ").toLowerCase();
return attrs.includes("blank") || attrs.includes("填空");
});
const hasTextCue = /(?:___+|[{(\\[][^)}\\]]*[)}\\]])/.test(questionElement.textContent || "") && /填|空|blank/i.test(questionElement.textContent || "");
return textInputs.length > 0 || editableElements.length > 0 || textareas.length > 1 || hasBlankCue || textareas.length === 1 && hasTextCue;
});
__publicField(this, "hasLongTextControl", (questionElement) => {
return questionElement.querySelectorAll("textarea").length > 0;
});
__publicField(this, "hasCheckboxControl", (questionElement, optionElements) => {
if (questionElement.querySelector('input[type="checkbox"]'))
return true;
return optionElements.some((optionElement) => this.hasControlCue(optionElement, ["checkbox", "multi", "multiple"]));
});
__publicField(this, "isJudgementQuestion", (questionElement, optionElements, optionTexts) => {
if (optionTexts.length !== 2)
return false;
const judgementValues = optionTexts.map((optionText) => this.normalizeJudgementText(optionText));
return judgementValues.includes("true") && judgementValues.includes("false") && this.hasJudgementStructureCue(questionElement, optionElements);
});
__publicField(this, "hasJudgementStructureCue", (questionElement, optionElements) => {
const cueText = [
this.collectElementCueText(questionElement),
...optionElements.map((optionElement) => this.collectElementCueText(optionElement))
].join(" ").toLowerCase();
const judgementCues = [
"judge",
"judgement",
"judgment",
"truefalse",
"true-false",
"true_false",
"判断",
"对错"
];
if (judgementCues.some((cue) => cueText.includes(cue)))
return true;
const optionAriaLabels = optionElements.map((optionElement) => {
var _a;
return [
optionElement.getAttribute("aria-label"),
(_a = optionElement.querySelector("[aria-label]")) == null ? void 0 : _a.getAttribute("aria-label")
].filter(Boolean).join(" ");
}).join(" ");
return optionAriaLabels.includes("对选择") && optionAriaLabels.includes("错选择");
});
__publicField(this, "hasRadioControl", (questionElement, optionElements) => {
if (questionElement.querySelector('input[type="radio"]'))
return true;
return optionElements.some((optionElement) => this.hasControlCue(optionElement, ["radio"]));
});
__publicField(this, "hasControlCue", (optionElement, cues) => {
const cueText = this.collectElementCueText(optionElement).toLowerCase();
return cues.some((cue) => cueText.includes(cue));
});
__publicField(this, "collectElementCueText", (element) => {
const cueAttributes = [
"aria-label",
"class",
"data",
"data-qtype",
"data-question-type",
"data-type",
"name",
"role",
"type",
"value"
];
const cueElements = [
element,
...Array.from(element.querySelectorAll(
cueAttributes.map((attribute) => `[${attribute}]`).join(",")
))
];
return cueElements.flatMap((cueElement) => cueAttributes.map((attribute) => cueElement.getAttribute(attribute) || "")).filter(Boolean).join(" ");
});
__publicField(this, "getAnswerSimilarityThreshold", () => {
const configStore = useConfigStore();
const thresholdParam = configStore.otherParams.params.find((param) => param.name.includes("相似"));
const threshold = Number((thresholdParam == null ? void 0 : thresholdParam.value) ?? 85);
if (!Number.isFinite(threshold))
return 85;
return Math.min(100, Math.max(0, threshold));
});
__publicField(this, "normalizeOptionMatchText", (text) => {
return this.clean(this.removeHtml(text)).replace(/
\s]+).*?>/gi, "$1").replace(/&[a-z]+;/gi, "").replace(/^[a-z]\s*[..、:\]]\s*/i, "").replace(/[\s\u00a0]+/g, "").replace(/[,.,。、:;?!'""''「」【】《》()()\[\]{}【】<>]/g, "").toLowerCase();
});
__publicField(this, "calculateTextSimilarity", (left, right) => {
if (!left || !right)
return 0;
if (left === right)
return 100;
const leftChars = Array.from(left);
const rightChars = Array.from(right);
const distance = this.getLevenshteinDistance(leftChars, rightChars);
const maxLength = Math.max(leftChars.length, rightChars.length);
return Math.round((1 - distance / maxLength) * 100);
});
__publicField(this, "getLevenshteinDistance", (left, right) => {
const distances = Array.from({ length: left.length + 1 }, (_, index) => index);
right.forEach((rightChar, rightIndex) => {
let previous = distances[0];
distances[0] = rightIndex + 1;
left.forEach((leftChar, leftIndex) => {
const current = distances[leftIndex + 1];
distances[leftIndex + 1] = leftChar === rightChar ? previous : Math.min(previous, distances[leftIndex], current) + 1;
previous = current;
});
});
return distances[left.length];
});
__publicField(this, "normalizeJudgementText", (optionText) => {
const text = this.clean(optionText).replace(/[..、:\s]/g, "").toLowerCase();
if (/^(a)?(正确|是|对|√|t|true|right)$/.test(text))
return "true";
if (/^(b)?(错误|否|错|×|x|f|false|wrong)$/.test(text))
return "false";
return "";
});
const logStore = useLogStore();
const questionStore = useQuestionStore();
this.addLog = logStore.addLog;
this.addQuestion = questionStore.addQuestion;
}
}
class CxQuestionHandler extends BaseQuestionHandler {
constructor(type, iframe) {
super();
__publicField(this, "type");
__publicField(this, "init", async (isCurrent = () => true) => {
var _a, _b;
if (!isCurrent())
return 0;
this.questions = [];
this.correctNum = 0;
this.parseHtml();
if (this.questions.length) {
this.addLog(`嗅到 ${this.questions.length} 道题,开动啦~`, "primary");
for (const [index, parsedQuestion] of this.questions.entries()) {
if (!isCurrent())
return 0;
const question = vue.reactive({ ...parsedQuestion, answerStatus: "searching" });
this.addQuestion(question);
/* v0.5.1:AI 一遍答不出来就重问,最多 HX_ASK_MAX_TRIES 遍;
连续 HX_ASK_MAX_TRIES 遍都拿不到答案,就跳过本题、继续下一道。
全程后台被动运行,不占配置项;每次重问与最终跳过都会在状态页留通知。 */
let answerData = null;
let values = null;
for (let attempt = 1; attempt <= HX_ASK_MAX_TRIES; attempt += 1) {
if (!isCurrent())
return 0;
answerData = await getAnswer(question);
if (!isCurrent())
return 0;
values = getAnswerValues(answerData, question);
if (values == null ? void 0 : values.length) {
if (attempt > 1)
this.addLog(`第 ${index + 1} 题重问第 ${attempt} 遍,答出来啦~`, "primary");
break;
}
if (attempt < HX_ASK_MAX_TRIES)
this.addLog(`第 ${index + 1} 题第 ${attempt} 遍没答出来,小鲸再问一遍(第 ${attempt + 1}/${HX_ASK_MAX_TRIES} 遍)~`, "warning");
}
if (values == null ? void 0 : values.length) {
question.answer = values;
question.answerStatus = "success";
this.fillQuestion(question);
this.addLog(`第 ${index + 1} 题拿下啦~`, "success");
this.correctNum += 1;
} else {
this.addLog(`第 ${index + 1} 题连问 ${HX_ASK_MAX_TRIES} 遍都没答出来,先跳过这题~ 看看为啥`, "warning");
question.answerStatus = "error";
question.answer = [((_b = answerData.error) == null ? void 0 : _b.message) || "未查询到答案"];
}
}
} else
this.addLog("哦?这页没捞到题目喹", "danger");
return this.questions.length ? this.correctNum / this.questions.length * 100 : 0;
});
__publicField(this, "parseHtml", () => {
if (!this._document)
return [];
if (["zj"].includes(this.type)) {
const questionElements = this._document.querySelectorAll(".TiMu");
this.addQuestions(questionElements);
} else if (["zy", "ks"].includes(this.type)) {
const questionElements = this._document.querySelectorAll(".questionLi");
this.addQuestions(questionElements);
}
});
__publicField(this, "fillQuestion", (question) => {
var _a, _b;
if (!this._window)
return;
if (question.type === "0" || question.type === "1") {
const clickOption = (optionElement) => {
if (!optionElement) return;
if (["zj", "zy"].includes(this.type)) {
if (optionElement.getAttribute("aria-checked") === "true") return;
optionElement.click();
} else if (["ks"].includes(this.type)) {
if (optionElement.querySelector(".check_answer")) return;
if (optionElement.querySelector(".check_answer_dx")) return;
optionElement.click();
}
};
const joined = question.answer.map((answer) => String(answer)).join(",");
if (this.isPureLetterAnswer(joined)) {
for (const letter of this.extractAnswerLetters(joined)) {
clickOption(this.findMatchedOption(question.options, letter));
}
return;
}
question.answer.forEach((answer) => {
clickOption(this.findMatchedOption(question.options, String(answer)));
});
} else if (question.type === "2") {
const textareaElements = question.element.querySelectorAll("textarea");
if (textareaElements.length === 0)
return;
textareaElements.forEach((textareaElement, index) => {
try {
const ueditor = this._window.UE.getEditor(textareaElement.name);
ueditor.setContent(String(question.answer[index] ?? ""));
} catch (e) {
textareaElement.value = String(question.answer[index] ?? "");
}
});
} else if (question.type === "3") {
let answer = "true";
const judgeText = String(question.answer[0] ?? "");
if (judgeText.match(/(^|,)(错误|否|错|×|X|F|wr|wrong|false)(,|$)/)) {
answer = "false";
} else if (judgeText.match(/(^|,)(正确|是|对|√|T|ri|right|true)(,|$)/)) {
answer = "true";
} else {
const entries = Object.entries(question.options || {});
if (entries.length && this.isPureLetterAnswer(judgeText)) {
const index = this.extractAnswerLetters(judgeText)[0].charCodeAt(0) - 65;
if (index >= 0 && index < entries.length) {
const token = this.normalizeJudgementText(entries[index][0]);
if (token) answer = token;
}
}
}
const trueOrFalse = {
"true": "对",
"false": "错"
};
for (const key in question.options) {
if (["zj", "zy"].includes(this.type)) {
if ((_a = question.options[key].getAttribute("aria-label")) == null ? void 0 : _a.includes(`${trueOrFalse[answer]}选择`)) {
if (question.options[key].getAttribute("aria-checked") === "true")
return;
(_b = question.options[key]) == null ? void 0 : _b.click();
}
} else if (["ks"].includes(this.type)) {
const optionElement = question.options[key].querySelector(`span[data='${answer}']`);
if (optionElement == null ? void 0 : optionElement.querySelector(".check_answer"))
return;
optionElement == null ? void 0 : optionElement.click();
}
}
} else if (question.type === "4" || question.type === "6") {
const textareaElement = question.element.querySelector("textarea");
if (!textareaElement)
return;
const ueditor = this._window.UE.getEditor(textareaElement.name);
ueditor.setContent(String(question.answer[0] ?? ""));
} else
;
});
this.type = type;
if (iframe) {
this._document = iframe.contentDocument;
this._window = iframe.contentWindow;
}
}
extractOptions(optionElements, optionSelector) {
const optionsObject = {};
const optionTexts = [];
optionElements.forEach((optionElement) => {
var _a;
const optionTextContent = this.removeHtml(((_a = optionElement.querySelector(optionSelector)) == null ? void 0 : _a.innerHTML) || "");
optionsObject[optionTextContent] = optionElement;
optionTexts.push(optionTextContent);
});
return [optionsObject, optionTexts];
}
addQuestions(questionElements) {
questionElements.forEach((questionElement) => {
var _a, _b, _c;
let questionTitle = "";
let optionElements = [];
let optionsObject = {};
let optionTexts = [];
let searchStem = "";
let searchOptions = [];
let questionKind;
if (["zy", "ks"].includes(this.type)) {
const titleElement = ((_a = questionElement == null ? void 0 : questionElement.querySelector("h3")) == null ? void 0 : _a.innerHTML) || "";
const colorShallowElement = ((_b = questionElement.querySelector(".colorShallow")) == null ? void 0 : _b.outerHTML) || "";
const titleSource = titleElement.split(colorShallowElement || "")[1] || "";
questionTitle = this.removeHtml(titleSource);
const searchTitleSource = colorShallowElement ? titleSource : titleElement;
searchStem = stripQuestionTypeLabel(
extractRawTextFromHtml(searchTitleSource, this._document)
);
const matchedOptionElements = questionElement.querySelectorAll(".answerBg");
optionElements = Array.from(matchedOptionElements);
[optionsObject, optionTexts] = this.extractOptions(matchedOptionElements, ".answer_p");
searchOptions = Array.from(matchedOptionElements).map((optionElement) => stripOptionLabel(extractRawTextFromElement(optionElement.querySelector(".answer_p"))));
} else if (["zj"].includes(this.type)) {
const titleSource = ((_c = questionElement.querySelector(".fontLabel")) == null ? void 0 : _c.innerHTML) || "";
questionTitle = this.removeHtml(titleSource);
searchStem = stripQuestionTypeLabel(
extractRawTextFromHtml(titleSource, this._document)
);
const matchedOptionElements = questionElement.querySelectorAll('[class*="before-after"]');
optionElements = Array.from(matchedOptionElements);
[optionsObject, optionTexts] = this.extractOptions(matchedOptionElements, ".fl.after");
searchOptions = Array.from(matchedOptionElements).map((optionElement) => stripOptionLabel(extractRawTextFromElement(optionElement.querySelector(".fl.after"))));
}
questionKind = this.inferQuestionTypeByStructure(questionElement, optionElements, optionTexts);
if (questionKind === "3") {
searchOptions = optionElements.map((optionElement, index) => extractJudgementToken(optionElement, searchOptions[index] || optionTexts[index]) || searchOptions[index]);
}
this.questions.push({
element: questionElement,
type: questionKind,
title: this.clean(questionTitle),
optionsText: optionTexts,
options: optionsObject,
searchText: { stem: searchStem, options: searchOptions },
answer: [],
workType: this.type,
refer: this._window.location.href
});
});
}
}
const useCxChapterLogic = () => {
const logStore = useLogStore();
const questionStore = useQuestionStore();
const init = () => {
const currentUrl = window.location.href;
if (!currentUrl.includes("&mooc2=1")) {
window.location.href = currentUrl + "&mooc2=1";
}
questionStore.clearQuestion();
logStore.addLog(`潜入章节页啦~`, "primary");
logStore.addLog(`正在翻任务点的贝壳…`, "warning");
};
const configStore = useConfigStore();
const HOME_TAB_NAME = "0";
const ANSWER_TAB_NAME2 = "1";
const PDF_COMPLETION_WAIT_SECONDS = 5;
let runningIframeDocumentTasks = /* @__PURE__ */ new WeakMap();
let processedIframeDocuments = /* @__PURE__ */ new WeakSet();
let currentPage;
let chapterController = new AbortController();
let currentWatchIframeTaskId = 0;
let disposed = false;
const isFinishedTask = (iframe) => {
var _a;
let element = iframe;
while (element) {
const className = typeof element.className === "string" ? element.className : "";
if (className.split(/\s+/).includes("ans-job-finished") || ((_a = element.classList) == null ? void 0 : _a.contains("ans-job-finished")))
return true;
element = element.parentElement;
}
return false;
};
const getChapterPage = () => {
const iframe = document.documentElement.querySelector("iframe");
return {
url: window.location.href,
iframe,
src: (iframe == null ? void 0 : iframe.src) || "",
document: (iframe == null ? void 0 : iframe.contentDocument) || null
};
};
const isSamePage = (left, right) => left.url === right.url && left.iframe === right.iframe && left.src === right.src && left.document === right.document;
const onRootIframeLoad = () => processIframeTask(true);
const processIframeTask = (force = false) => {
var _a, _b;
if (disposed)
return;
const page = getChapterPage();
const changed = !currentPage || !isSamePage(currentPage, page);
if (!changed && !force)
return;
if (changed) {
(_a = currentPage == null ? void 0 : currentPage.iframe) == null ? void 0 : _a.removeEventListener("load", onRootIframeLoad);
chapterController.abort();
chapterController = new AbortController();
++currentWatchIframeTaskId;
runningIframeDocumentTasks = /* @__PURE__ */ new WeakMap();
processedIframeDocuments = /* @__PURE__ */ new WeakSet();
questionStore.clearQuestion();
configStore.menuIndex = HOME_TAB_NAME;
currentPage = page;
(_b = page.iframe) == null ? void 0 : _b.addEventListener("load", onRootIframeLoad);
}
if (!page.iframe || !page.document || page.document.readyState !== "complete" || page.document.URL === "about:blank")
return;
const signal = chapterController.signal;
watchIframe(document.documentElement, {
signal,
// 直接检查页面,避免在轮询发现切换之前,旧请求已返回。
isCurrent: () => !signal.aborted && isSamePage(page, getChapterPage())
});
};
const watchIframe = (documentElement, context) => {
const thisTaskId = ++currentWatchIframeTaskId;
IframeUtils.getAllNestedIframes(documentElement).subscribe((allIframes) => {
rxjs.from(allIframes).pipe(concatMap((iframe) => {
if (thisTaskId !== currentWatchIframeTaskId || !context.isCurrent())
return Promise.resolve();
return processIframe(iframe, context);
})).subscribe({
complete: async () => {
var _a;
if (thisTaskId === currentWatchIframeTaskId && context.isCurrent()) {
logStore.addLog(`本页啃完,游向下一章!`, "success");
if (configStore.platformParams.cx.parts[0].params[1].value) {
const nextBtn = documentElement.querySelector("#prevNextFocusNext");
if (!nextBtn || nextBtn.style.display === "none") {
logStore.addLog(`到最后一章啦,前面没路了`, "danger");
} else {
await sleep(configStore.otherParams.params[0].value);
if (thisTaskId !== currentWatchIframeTaskId || !context.isCurrent())
return;
(_a = document.querySelector(".jb_btn.jb_btn_92.fr.fs14.nextChapter")) == null ? void 0 : _a.click();
}
} else {
logStore.addLog(`自动翻章关掉了哦`, "danger");
}
}
},
error: (error) => {
if (context.isCurrent()) {
logStore.addLog(`任务卡住了,呜…`, "danger");
}
}
});
});
};
const processMedia = async (mediaType, iframe, iframeDocument, context) => {
return new Promise((resolve, reject) => {
logStore.addLog(`捡到${mediaType},正在拆解~`, "warning");
logStore.addLog(`正在放${mediaType},小声点~`, "primary");
let isExecuted = false;
let settled = false;
let mediaElement = null;
let quiz;
let resuming = false;
const cleanup = () => {
clearInterval(intervalId2);
quiz == null ? void 0 : quiz.dispose();
mediaElement == null ? void 0 : mediaElement.removeEventListener("pause", resume);
mediaElement == null ? void 0 : mediaElement.removeEventListener("ended", ended);
context.signal.removeEventListener("abort", finish);
};
const finish = () => {
if (settled)
return;
settled = true;
cleanup();
mediaElement == null ? void 0 : mediaElement.pause();
resolve();
};
const fail = (error) => {
if (settled)
return;
settled = true;
cleanup();
reject(error);
};
const resume = async () => {
if (settled || resuming || (quiz == null ? void 0 : quiz.hasActiveQuiz()))
return;
resuming = true;
try {
await sleep(configStore.otherParams.params[0].value);
if (settled)
return;
if (!context.isCurrent())
return finish();
if (isFinishedTask(iframe))
return finish();
if ((quiz == null ? void 0 : quiz.hasActiveQuiz()) || (mediaElement == null ? void 0 : mediaElement.ended))
return;
await (mediaElement == null ? void 0 : mediaElement.play());
const resumeRateParam = configStore.platformParams.cx.parts[0].params.find((p) => p.name.includes("倍速"));
mediaElement.playbackRate = Number(resumeRateParam == null ? void 0 : resumeRateParam.value) || 1;
} catch (error) {
fail(error);
} finally {
resuming = false;
}
};
const ended = () => {
if (quiz == null ? void 0 : quiz.hasActiveQuiz())
return;
if (context.isCurrent())
logStore.addLog(`${mediaType}放完啦~`, "success");
finish();
};
const intervalId2 = setInterval(async () => {
if (settled)
return;
if (!context.isCurrent())
return finish();
if (!isExecuted)
mediaElement = iframeDocument.documentElement.querySelector(mediaType);
if (isFinishedTask(iframe)) {
logStore.addLog(`${mediaType}早看过了,跳过~`, "success");
return finish();
}
if (mediaElement && !isExecuted) {
isExecuted = true;
try {
mediaElement.pause();
mediaElement.muted = true;
const rateParam = configStore.platformParams.cx.parts[0].params.find((p) => p.name.includes("倍速"));
mediaElement.playbackRate = Number(rateParam == null ? void 0 : rateParam.value) || 1;
if (mediaType === "video") {
quiz = watchVideoQuiz({
document: iframeDocument,
signal: context.signal,
isCurrent: () => !settled && context.isCurrent() && !isFinishedTask(iframe),
isEnabled: () => {
var _a;
return ((_a = configStore.platformParams.cx.parts[0].params.find((param) => param.name === VIDEO_QUIZ_SETTING)) == null ? void 0 : _a.value) !== false;
},
delayMs: () => Number(configStore.otherParams.params[0].value) * 1e3,
search: (question, searchContext) => getAnswer(question, { ...searchContext, skipDelay: true }),
similarityThreshold: () => {
var _a;
return Number(((_a = configStore.otherParams.params.find((param) => param.name.includes("相似"))) == null ? void 0 : _a.value) ?? 85);
},
publishQuestion: (question) => {
configStore.menuIndex = ANSWER_TAB_NAME2;
const row = vue.reactive(question);
questionStore.addQuestion(row);
return row;
},
onRelease: () => {
if (mediaElement == null ? void 0 : mediaElement.ended)
ended();
else if (mediaElement == null ? void 0 : mediaElement.paused)
void resume();
},
log: (message, type) => logStore.addLog(message, type)
});
}
if (!(quiz == null ? void 0 : quiz.hasActiveQuiz()))
await mediaElement.play();
if (settled)
return;
if (!context.isCurrent())
return finish();
if (isFinishedTask(iframe))
return finish();
if (!(quiz == null ? void 0 : quiz.hasActiveQuiz()))
logStore.addLog("放得很顺,搞定~", "success");
mediaElement.addEventListener("pause", resume);
mediaElement.addEventListener("ended", ended);
if (mediaElement.ended)
ended();
} catch (error) {
fail(error);
}
}
}, 2500);
context.signal.addEventListener("abort", finish, { once: true });
if (!context.isCurrent())
finish();
});
};
const processWork = async (iframe, iframeDocument, iframeWindow, context) => {
if (!context.isCurrent())
return;
configStore.menuIndex = ANSWER_TAB_NAME2;
logStore.addLog("发现作业,小鲸去瞄一眼~", "warning");
if (iframeDocument.documentElement.innerText.includes("已完成") || iframeDocument.documentElement.innerText.includes("待批阅")) {
logStore.addLog("作业早就写完啦,跳过~", "success");
return;
}
decrypt(iframeDocument);
logStore.addLog(`题目到手啦~`, "primary");
const correctRate = await new CxQuestionHandler("zj", iframe).init(context.isCurrent);
if (!context.isCurrent())
return;
iframeWindow.alert = () => {
};
if (configStore.platformParams.cx.parts[0].params[0].value) {
logStore.addLog("准备交卷咐…", "primary");
if (correctRate < Number(configStore.otherParams.params[1].value)) {
logStore.addLog(`正确率才${configStore.otherParams.params[1].value}%,先攒着~`, "danger");
await iframeWindow.noSubmit();
} else {
logStore.addLog(`正确率达标,交卷!`, "success");
await iframeWindow.btnBlueSubmit();
if (!context.isCurrent())
return;
await sleep(configStore.otherParams.params[0].value / 2);
if (!context.isCurrent())
return;
await iframeWindow.submitCheckTimes();
if (!context.isCurrent())
return;
logStore.addLog("交卷成功,耶~", "success");
}
} else {
logStore.addLog("没开自动交卷,先存着~", "primary");
await iframeWindow.noSubmit();
}
if (context.isCurrent())
logStore.addLog("作业搞定啦~", "success");
};
const processPpt = async (iframeWindow, context) => {
logStore.addLog("发现文档,正在啃~", "warning");
const document2 = iframeWindow.document;
const viewerFrame = document2.querySelector("#panView");
const scrollViewer = () => {
var _a, _b, _c;
const viewerDocument = (viewerFrame == null ? void 0 : viewerFrame.contentDocument) || document2;
const viewerWindow = (viewerFrame == null ? void 0 : viewerFrame.contentDocument) ? viewerFrame.contentWindow : iframeWindow;
const top = Math.max(
((_a = viewerDocument.body) == null ? void 0 : _a.scrollHeight) || 0,
((_b = viewerDocument.documentElement) == null ? void 0 : _b.scrollHeight) || 0,
((_c = viewerDocument.scrollingElement) == null ? void 0 : _c.scrollHeight) || 0
);
viewerWindow == null ? void 0 : viewerWindow.scrollTo({ top, behavior: "smooth" });
};
scrollViewer();
const configuredInterval = Number(configStore.otherParams.params[0].value);
await sleep(Math.max(
PDF_COMPLETION_WAIT_SECONDS,
Number.isFinite(configuredInterval) ? configuredInterval : 0
));
if (!context.isCurrent())
return;
scrollViewer();
logStore.addLog("读完啦~", "success");
};
const processBook = async (iframeWindow) => {
logStore.addLog("发现电子书,嗅嗅~", "warning");
_unsafeWindow.top.onchangepage(iframeWindow.getFrameAttr("end"));
logStore.addLog("读完啦~", "success");
return Promise.resolve();
};
const runIframeDocumentTask = (iframeDocument, task) => {
const processed = processedIframeDocuments;
const running = runningIframeDocumentTasks;
if (processed.has(iframeDocument))
return Promise.resolve();
const runningTask = running.get(iframeDocument);
if (runningTask)
return runningTask;
const taskPromise = Promise.resolve().then(task).then(() => {
processed.add(iframeDocument);
}).finally(() => {
running.delete(iframeDocument);
});
running.set(iframeDocument, taskPromise);
return taskPromise;
};
const waitIframeLoad = async (iframe, context) => {
return new Promise((resolve) => {
const finish = () => {
clearInterval(intervalId2);
context.signal.removeEventListener("abort", finish);
resolve();
};
const check = () => {
var _a;
if (!context.isCurrent() || !iframe.isConnected || ((_a = iframe.contentDocument) == null ? void 0 : _a.readyState) === "complete")
finish();
};
const intervalId2 = setInterval(check, 500);
context.signal.addEventListener("abort", finish, { once: true });
check();
});
};
const processIframeBody = async (iframe, iframeSrc, iframeDocument, iframeWindow, context) => {
var _a, _b;
if (!context.isCurrent())
return;
if (iframeSrc.includes("javascript:"))
return Promise.resolve();
if (isFinishedTask(iframe)) {
configStore.menuIndex = iframeSrc.includes("api/work") ? ANSWER_TAB_NAME2 : HOME_TAB_NAME;
if (iframeSrc.includes("video") || iframeSrc.includes("audio")) {
(_a = iframeDocument.documentElement.querySelector("video, audio")) == null ? void 0 : _a.pause();
}
logStore.addLog("任务点清空啦~", "success");
} else {
if (iframeSrc.includes("api/work")) {
return processWork(iframe, iframeDocument, iframeWindow, context);
}
if (configStore.platformParams.cx.parts[0].params[2].value) {
logStore.addLog("仅仅作答模式开启~", "primary");
} else {
const ansJobIcon = (_b = iframe.parentElement) == null ? void 0 : _b.querySelector(".ans-job-icon");
if (ansJobIcon) {
configStore.menuIndex = HOME_TAB_NAME;
if (iframeSrc.includes("video")) {
return processMedia("video", iframe, iframeDocument, context);
} else if (iframeSrc.includes("audio")) {
return processMedia("audio", iframe, iframeDocument, context);
} else if (["ppt", "doc", "pptx", "docx", "pdf"].some((type) => iframeSrc.includes("modules/" + type))) {
return processPpt(iframeWindow, context);
} else if (["innerbook"].some((type) => iframeSrc.includes("modules/" + type))) {
return processBook(iframeWindow);
}
}
}
}
return Promise.resolve();
};
const processIframe = async (iframe, context) => {
if (iframe.src.includes("javascript:"))
return Promise.resolve();
if (!iframe.contentDocument || !iframe.contentWindow)
return Promise.resolve();
await waitIframeLoad(iframe, context);
if (!context.isCurrent() || !iframe.isConnected)
return;
const iframeSrc = iframe.src;
const iframeDocument = iframe.contentDocument;
const iframeWindow = iframe.contentWindow;
if (!iframeDocument || !iframeWindow)
return Promise.resolve();
const iframeContext = {
signal: context.signal,
isCurrent: () => context.isCurrent() && iframe.isConnected && iframe.contentDocument === iframeDocument && iframe.src === iframeSrc
};
return runIframeDocumentTask(iframeDocument, () => processIframeBody(
iframe,
iframeSrc,
iframeDocument,
iframeWindow,
iframeContext
));
};
init();
processIframeTask();
const intervalId = setInterval(processIframeTask, 500);
const observer = new MutationObserver(() => processIframeTask());
observer.observe(document.documentElement, { childList: true, subtree: true, attributes: true, attributeFilter: ["src"] });
vue.onBeforeUnmount(() => {
var _a;
disposed = true;
clearInterval(intervalId);
observer.disconnect();
(_a = currentPage == null ? void 0 : currentPage.iframe) == null ? void 0 : _a.removeEventListener("load", onRootIframeLoad);
chapterController.abort();
});
};
const useCxWorkLogic = async () => {
const logStore = useLogStore();
const questionStore = useQuestionStore();
questionStore.clearQuestion();
logStore.addLog(`游进作业页,准备答题~`, "primary");
logStore.addLog(`正在读题…`, "warning");
await new CxQuestionHandler("zy").init();
};
const NEXT_STEP_TEXT = "下一步";
const isVisibleElement = (element) => {
const style2 = window.getComputedStyle(element);
return style2.display !== "none" && style2.visibility !== "hidden" && style2.opacity !== "0" && element.getClientRects().length > 0;
};
const clickNextStepButton = () => {
const examDocument = _unsafeWindow.document || document;
const buttons = Array.from(examDocument.querySelectorAll(".nextDiv a"));
const nextStepButton = buttons.find((button) => {
var _a, _b;
return isVisibleElement(button) && (((_a = button.getAttribute("onclick")) == null ? void 0 : _a.includes("topreview")) || ((_b = button.textContent) == null ? void 0 : _b.trim()) === NEXT_STEP_TEXT);
});
if (!nextStepButton)
return false;
nextStepButton.click();
return true;
};
const useCxExamLogic = async () => {
const logStore = useLogStore();
const configStore = useConfigStore();
const questionStore = useQuestionStore();
questionStore.clearQuestion();
logStore.addLog("进考场啦,加油~", "primary");
logStore.addLog("正在解析题目", "warning");
await new CxQuestionHandler("ks").init();
if (configStore.platformParams.cx.parts[1].params[0].value) {
logStore.addLog("自动翻到下一题~", "success");
await sleep(configStore.otherParams.params[0].value);
if (clickNextStepButton()) {
logStore.addLog("这是最后一题咐~", "success");
return;
}
_unsafeWindow.getTheNextQuestion(1);
} else {
logStore.addLog("自动翻题关掉了哦", "danger");
}
};
const DEFAULT_CARD_WIDTH = "310px";
const PANEL_HEIGHT = 500;
const ANSWER_CARD_WIDTH = DEFAULT_CARD_WIDTH;
const ANSWER_TAB_NAME = "1";
const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
__name: "Index",
emits: ["customEvent"],
setup(__props, { emit: __emit }) {
var _a;
const isShow = vue.ref(false);
const configStore = useConfigStore();
const logStore = useLogStore();
const questionStore = useQuestionStore();
const emit = __emit;
const url2 = window.location.href;
const cardWidth = vue.computed(() => configStore.menuIndex === ANSWER_TAB_NAME ? ANSWER_CARD_WIDTH : DEFAULT_CARD_WIDTH);
(_a = document.querySelector("li>a.experience:not([onclick])")) == null ? void 0 : _a.click();
logStore.addLog("协议按过爪印啦~", "success");
logStore.addLog("面板 0.5.1 已就位,D-Whaler 开工~", "success");
logStore.addLog("怪怪的…换个 Edge 浏览器试试?", "warning");
const urlLogicPairs = [
{ keyword: "/mycourse/studentstudy", logic: useCxChapterLogic },
{ keyword: "/mooc2/work/dowork", logic: useCxWorkLogic },
{ keyword: "/exam-ans/exam", logic: useCxExamLogic },
{
keyword: "mycourse/stu?courseid",
logic: () => {
logStore.addLog("这页没活儿,小鲸歇会儿~", "error");
}
}
];
const updateVisible = (visible2) => {
isShow.value = visible2;
emit("customEvent", visible2);
};
const executeLogicByUrl = (currentUrl) => {
const matchedPair = urlLogicPairs.find(({ keyword }) => currentUrl.includes(keyword));
if (matchedPair) {
matchedPair.logic();
updateVisible(true);
return;
}
updateVisible(false);
};
executeLogicByUrl(url2);
const tabs = vue.computed(() => [
{
name: "0",
label: "状态",
component: _sfc_main$8,
props: { logList: logStore.logList }
},
{
name: ANSWER_TAB_NAME,
label: "小鲸",
component: _sfc_main$6,
props: { questionList: questionStore.questionList }
},
{
name: "2",
label: "配置",
component: _sfc_main$7,
props: { globalConfig: configStore }
},
{
name: "3",
label: "引导",
component: Tutorial
},
{
name: "4",
label: "须知",
component: ScriptTip
}
]);
return (_ctx, _cache) => {
const _component_el_tab_pane = vue.resolveComponent("el-tab-pane");
const _component_el_tabs = vue.resolveComponent("el-tabs");
return vue.openBlock(), vue.createElementBlock("div", {
style: vue.normalizeStyle({ width: cardWidth.value }),
class: "card_content"
}, [
vue.createVNode(_component_el_tabs, {
modelValue: vue.unref(configStore).menuIndex,
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.unref(configStore).menuIndex = $event),
class: "demo-tabs"
}, {
default: vue.withCtx(() => [
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(tabs.value, (tab) => {
return vue.openBlock(), vue.createBlock(_component_el_tab_pane, {
key: tab.name,
name: tab.name,
label: tab.label
}, {
default: vue.withCtx(() => [
(vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(tab.component), vue.mergeProps({ ref_for: true }, tab.props), null, 16))
]),
_: 2
}, 1032, ["name", "label"]);
}), 128))
]),
_: 1
}, 8, ["modelValue"])
], 4);
};
}
});
const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
__name: "ZoomButtons",
emits: ["toggleZoom"],
setup(__props, { emit: __emit }) {
const emit = __emit;
const toggleZoom = (value) => {
emit("toggleZoom", value);
};
return (_ctx, _cache) => {
const _component_el_icon = vue.resolveComponent("el-icon");
return vue.openBlock(), vue.createElementBlock("div", {
onMousedown: _cache[2] || (_cache[2] = vue.withModifiers(() => {
}, ["stop"]))
}, [
vue.createVNode(_component_el_icon, {
onClick: _cache[0] || (_cache[0] = ($event) => toggleZoom(true)),
class: "zoom-icon",
size: "small"
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(minus_default))
]),
_: 1
}),
vue.createVNode(_component_el_icon, {
onClick: _cache[1] || (_cache[1] = ($event) => toggleZoom(false)),
class: "zoom-icon is-spaced",
size: "small"
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(full_screen_default))
]),
_: 1
})
], 32);
};
}
});
const _hoisted_1 = { class: "overlay" };
const _hoisted_2 = { class: "title" };
const _hoisted_3 = { class: "minus" };
const WINDOW_EDGE_OFFSET = 11;
const PANEL_WIDTH = 310;
const MINIMIZED_PANEL_HEIGHT = 35;
const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
__name: "layout",
setup(__props) {
const isShow = vue.ref(false);
const configStore = useConfigStore();
sanitizeAiConfig(configStore);
const currentPlatformName = vue.computed(() => configStore.platformParams[configStore.platformName].name);
vue.watch(configStore, (newVal) => {
persistConfig(newVal);
}, { deep: true });
const isDragging = vue.ref(false);
const offsetX = vue.ref(0);
const offsetY = vue.ref(0);
const moveStyle = vue.ref({
left: configStore.position.x,
top: configStore.position.y
});
const handleVisibleChange = (visible2) => {
isShow.value = visible2;
};
const startDrag = (event) => {
isDragging.value = true;
const header = event.currentTarget;
offsetX.value = event.clientX - header.getBoundingClientRect().left;
offsetY.value = event.clientY - header.getBoundingClientRect().top;
document.addEventListener("mousemove", drag);
document.addEventListener("mouseup", endDrag);
};
const drag = (event) => {
if (!isDragging.value)
return;
const x = event.clientX - offsetX.value;
const y = event.clientY - offsetY.value;
const nextLeft = `${x - WINDOW_EDGE_OFFSET}px`;
const nextTop = `${y - WINDOW_EDGE_OFFSET}px`;
moveStyle.value = {
left: nextLeft,
top: nextTop
};
configStore.position.x = nextLeft;
configStore.position.y = nextTop;
if (x < 0) {
moveStyle.value.left = "0px";
configStore.position.x = "0px";
}
if (y < 0) {
moveStyle.value.top = "0px";
configStore.position.y = "0px";
}
if (x > window.innerWidth - PANEL_WIDTH) {
const maxLeft = `${window.innerWidth - PANEL_WIDTH}px`;
moveStyle.value.left = maxLeft;
configStore.position.x = maxLeft;
}
if (y > window.innerHeight - MINIMIZED_PANEL_HEIGHT) {
const maxTop = `${window.innerHeight - MINIMIZED_PANEL_HEIGHT}px`;
moveStyle.value.top = maxTop;
configStore.position.y = maxTop;
}
};
const endDrag = () => {
isDragging.value = false;
document.removeEventListener("mousemove", drag);
document.removeEventListener("mouseup", endDrag);
};
return (_ctx, _cache) => {
const _component_el_icon = vue.resolveComponent("el-icon");
const _component_el_tooltip = vue.resolveComponent("el-tooltip");
const _component_el_text = vue.resolveComponent("el-text");
const _component_el_divider = vue.resolveComponent("el-divider");
const _component_el_card = vue.resolveComponent("el-card");
return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", {
style: vue.normalizeStyle(moveStyle.value),
class: "main-page"
}, [
vue.withDirectives(vue.createElementVNode("div", _hoisted_1, null, 512), [
[vue.vShow, isDragging.value]
]),
vue.createVNode(_component_el_card, {
"close-on-click-modal": false,
"lock-scroll": false,
modal: false,
"show-close": false,
"modal-class": "modal"
}, {
header: vue.withCtx(() => [
vue.createElementVNode("div", {
class: "card-header",
onMousedown: startDrag
}, [
vue.createElementVNode("div", _hoisted_2, [
vue.createElementVNode("img", {
class: "card-header__logo",
src: HX_LOGO_SRC,
alt: ""
}),
vue.createElementVNode("span", null, vue.toDisplayString(currentPlatformName.value), 1)
]),
vue.createVNode(_sfc_main$2, {
onToggleZoom: _cache[0] || (_cache[0] = ($event) => vue.unref(configStore).isMinus = $event)
})
], 32)
]),
default: vue.withCtx(() => [
vue.withDirectives(vue.createVNode(_sfc_main$3, { onCustomEvent: handleVisibleChange }, null, 512), [
[vue.vShow, !vue.unref(configStore).isMinus]
]),
vue.withDirectives(vue.createElementVNode("div", _hoisted_3, [
vue.createVNode(_component_el_text, {
type: "info",
size: "small"
}, {
default: vue.withCtx(() => [
vue.createTextVNode("已最小化,点击上方按钮恢复")
]),
_: 1
}),
vue.createVNode(_component_el_divider, {
class: "compact-divider",
"border-style": "dashed"
})
], 512), [
[vue.vShow, vue.unref(configStore).isMinus]
])
]),
_: 1
})
], 4)), [
[vue.vShow, isShow.value]
]);
};
}
});
const _sfc_main = /* @__PURE__ */ vue.defineComponent({
__name: "App",
setup(__props) {
const platformMatchers = [
{ keyword: "chaoxing", platformName: "cx" }
];
const configStore = useConfigStore();
const url2 = window.location.href;
const matchedPlatform = platformMatchers.find(({ keyword }) => url2.includes(keyword));
if (matchedPlatform) {
configStore.platformName = matchedPlatform.platformName;
}
return (_ctx, _cache) => {
return vue.openBlock(), vue.createBlock(_sfc_main$1);
};
}
});
const cssLoader = (e) => {
const t = GM_getResourceText(e);
return GM_addStyle(t), t;
};
cssLoader("ElementPlus");
const LAYOUT_CSS_PARTS = [
".main-page .guide-page{box-sizing:border-box;max-height:min(400px,calc(100vh - 160px));max-height:min(400px,calc(100dvh - 160px));overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;padding:2px 4px 2px 0;color:#4e5969;font-size:12px;line-height:1.7;scrollbar-width:thin;scrollbar-color:#c7d7eb transparent}.main-page .guide-page:focus-visible{outline:2px solid #176ae5;outline-offset:2px;border-radius:8px}.main-page .guide-header{margin:0 0 10px;padding:11px 12px;border:1px solid #d9e8fc;border-radius:9px;background:linear-gradient(120deg,#edf5ff 0%,#f8fbff 100%)}.main-page .guide-heading-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.main-page .guide-title{margin:0;color:#174b94;font-size:13px;font-weight:600;line-height:1.6}.main-page .guide-tag{flex-shrink:0;padding:1px 7px;border:1px solid #d4e5fc;border-radius:20px;background-color:#fff;color:#2262",
"b5;font-size:10px;line-height:18px}.main-page .guide-subtitle{margin:3px 0 0;color:#61758e;font-size:11px}.main-page .guide-list{display:grid;gap:8px;margin:0;padding:0;list-style:none}.main-page .guide-card{min-width:0;padding:10px;border:1px solid #e4eaf2;border-radius:8px;background-color:#fff}.main-page .guide-card-heading{display:flex;align-items:center;gap:8px;margin-bottom:6px}.main-page .guide-number{display:inline-flex;align-items:center;justify-content:center;flex:0 0 24px;height:24px;border-radius:7px;background-color:#eaf3ff;color:#176ae5;font-size:11px;font-weight:600;line-height:1;font-variant-numeric:tabular-nums}.main-page .guide-card-title{margin:0;color:#263a55;font-size:12px;font-weight:600;line-height:1.6}.main-page .guide-copy{margin:0;overflow-wrap:anywhere}.main-page .guide-flow{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px;margin:10px 0 0;padd",
"ing:9px 4px 7px;border-radius:7px;background-color:#f3f7fd;list-style:none}.main-page .guide-flow-step{position:relative;display:flex;flex-direction:column;align-items:center;gap:4px;color:#3a5a83;font-size:10px;line-height:18px;text-align:center}.main-page .guide-flow-step+.guide-flow-step:before{position:absolute;top:8px;left:-5px;width:5px;height:5px;border-top:1px solid #9cb8da;border-right:1px solid #9cb8da;content:\"\";transform:rotate(45deg)}.main-page .guide-flow-number{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border:1px solid #d5e4f8;border-radius:50%;background-color:#fff;color:#176ae5;font-size:11px;font-weight:600;line-height:1}.main-page{--app-font-family: \"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Co",
"lor Emoji\";--el-font-family: var(--app-font-family);z-index:100003;position:fixed;color:#1f2329;font-family:var(--app-font-family)!important;font-size:14px;line-height:1.5715;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}.main-page *,.main-page input,.main-page button,.main-page textarea{font-family:var(--app-font-family)!important;letter-spacing:0}.main-page .el-card,.main-page .el-tabs,.main-page .el-text,.main-page .el-button,.main-page .el-input,.main-page .el-input__inner,.main-page .el-input-number,.main-page .el-table{font-family:var(--app-font-family)!important}.main-page .overlay{position:fixed;top:0;left:0;right:0;bottom:0;z-index:1001}.main-page .el-card{border:0}.main-page .card-header{display:flex;justify-content:space-between;flex-direction:row;align-items:center;margin:0;padding:0;cursor:move}.main-page .card-header ",
".title{font-size:14px;display:flex;align-items:center;justify-content:center;font-weight:500}.main-page .warning-icon{margin-left:5px}.main-page .zoom-icon{cursor:pointer}.main-page .zoom-icon.is-spaced{margin-left:8px}.main-page .minus{margin:5px 10px -10px 0}.main-page .compact-divider{margin:0}.main-page .demo-tabs{display:initial}.main-page .el-card__header{background-color:#1f71e0;color:#fff;padding:7px 10px 7px 16px;margin:0}.main-page .el-card__body{padding:0 16px 20px}.main-page .el-tabs__nav-wrap:after{height:1px}.main-page .el-tabs__active-bar{background-color:#176ae5}.main-page .el-tabs__item{font-size:13px;height:34px}.main-page .el-tabs__item.is-top{font-weight:400;color:#4e5969;padding:0 8px 0 12px}.main-page .el-tabs__item.is-active{font-weight:500;color:#176ae5;padding:0 8px 0 12px}.main-page .script-home{padding-top:2px}.main-page .announcement-board{box-sizing:border-bo",
"x;margin:2px 0 10px;padding:8px 10px;border:1px solid #bae0ff;border-radius:6px;background-color:#e6f4ff}.main-page .announcement-heading{display:flex;align-items:center;gap:6px;margin-bottom:4px;color:#0958d9;font-size:12px;font-weight:600;line-height:20px}.main-page .announcement-heading:before{content:\"\";width:6px;height:6px;flex:0 0 auto;border-radius:50%;background-color:#1677ff}.main-page .announcement-list{display:grid;gap:3px;margin:0;padding:0;list-style:none}.main-page .announcement-item{color:#1f2329;font-size:12px;line-height:20px;word-break:break-word}.main-page .log .el-text{font-weight:400;white-space:normal}.main-page .log-time{font-weight:400}.main-page .log-action-link{color:#176ae5;cursor:pointer;text-decoration:none}.main-page .log-action-link:hover{color:#409eff;text-decoration:underline}.main-page .log-divider{margin:0}.main-page .token-input,.main-page .question-li",
"st{font-size:12px}.main-page .token-label{border-radius:0}.main-page .question_table{width:625px}.main-page .answer-legend{display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;padding:10px 2px 8px;font-size:11px;line-height:18px}.main-page .answer-legend>span{display:inline-flex;align-items:center;gap:5px}.main-page .answer-legend>span:before{content:\"\";width:6px;height:6px;border-radius:50%;background:currentColor}.main-page .answer-result{line-height:1.7;overflow-wrap:anywhere}.main-page .answer-result--success{color:#15803d}.main-page .answer-result--searching{color:#a15c08}.main-page .answer-result--error{color:#c73e38}.main-page .setting{margin-top:-8px;font-size:14px}.main-page .setting-section-title{font-size:13px}.main-page .setting-checkbox{margin-bottom:6px}.main-page .setting-number{margin-top:6px}.main-page .setting .el-",
"form-item{margin-bottom:0}\n\n\n.main-page{--hx-bg:URL(data:image/jpeg;base64,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);--hx-hero:URL(data:image/jpeg;base64,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);\n--hx-cyan:#38e2ff;--hx-blue:#4a8cff;--hx-violet:#9b6bff;--hx-pink:#ff6bc4;\n--hx-ink:#e8f4ff;--hx-ink-dim:#9fb4d0;--hx-line:rgba(120,190,255,.18);\n--hx-glass:rgba(16,28,54,.55);--hx-glass-2:rgba(22,38,70,.42);\n--hx-shadow:0 18px 48px rgba(2,8,24,.55),0 0 0 1px rgba",
"(120,190,255,.10) inset;\n--hx-font:\"HarmonyOS Sans SC\",\"MiSans\",\"PingFang SC\",\"Microsoft YaHei\",system-ui,sans-serif}\n.main-page{font-family:var(--hx-font);color:var(--hx-ink)}\n.main-page .el-card{border:none!important;border-radius:16px!important;overflow:hidden;\nbackground:var(--hx-bg) center/cover no-repeat!important;background-size:310px 500px!important;\nbox-shadow:var(--hx-shadow)!important;backdrop-filter:blur(14px) saturate(150%);\n-webkit-backdrop-filter:blur(14px) saturate(150%)}\n.main-page .el-card__body{padding:10px 12px 14px!important;position:relative;z-index:1}\n.main-page .el-card__body::before{content:\"\";position:absolute;inset:0;z-index:-1;\nbackground:linear-gradient(180deg,rgba(8,16,36,.42) 0%,rgba(10,20,44,.62) 45%,rgba(8,16,36,.72) 100%)}\n.main-page .card_content{position:relative;z-index:1}\n\n/* ---- 标题栏:玻璃 + 极光描边 ---- */\n.main-page .card-header{position:relative;display:flex;",
"align-items:center;justify-content:space-between;\ngap:8px;padding:11px 13px!important;cursor:move;\nbackground:linear-gradient(120deg,rgba(56,226,255,.16) 0%,rgba(74,140,255,.10) 48%,rgba(155,107,255,.16) 100%);\nborder-bottom:1px solid var(--hx-line);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}\n.main-page .card-header::after{content:\"\";position:absolute;left:0;right:0;bottom:-1px;height:1px;\nbackground:linear-gradient(90deg,transparent,var(--hx-cyan),var(--hx-violet),transparent);opacity:.75}\n.main-page .card-header .title{display:flex;align-items:center;gap:7px;min-width:0}\n.main-page .card-header .title span{font-size:14px;font-weight:700;letter-spacing:.4px;\nbackground:linear-gradient(92deg,#ffffff 0%,var(--hx-cyan) 55%,var(--hx-violet) 100%);\n-webkit-background-clip:text;background-clip:text;color:transparent;\ntext-shadow:0 0 18px rgba(56,226,255,.25);white",
"-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.main-page .card-header .zoom-icon{color:var(--hx-ink-dim)!important;transition:color .18s,transform .18s}\n.main-page .card-header .zoom-icon:hover{color:var(--hx-cyan)!important;transform:scale(1.12)}\n\n/* ---- 标签页:科技指示条 ---- */\n.main-page .demo-tabs .el-tabs__header{margin:0 0 10px!important}\n.main-page .demo-tabs .el-tabs__nav-wrap::after{display:none}\n.main-page .demo-tabs .el-tabs__item{position:relative;height:34px;line-height:34px;padding:0 13px!important;\ncolor:var(--hx-ink-dim)!important;font-size:13px;font-weight:600;letter-spacing:.3px;\nborder:none!important;background:transparent!important;transition:color .2s}\n.main-page .demo-tabs .el-tabs__item:hover{color:var(--hx-cyan)!important}\n.main-page .demo-tabs .el-tabs__item.is-active{color:#fff!important}\n.main-page .demo-tabs .el-tabs__active-bar{height:2px!import",
"ant;border-radius:2px;\nbackground:linear-gradient(90deg,var(--hx-cyan),var(--hx-violet))!important;\nbox-shadow:0 0 10px rgba(56,226,255,.75)}\n.main-page .demo-tabs .el-tabs__nav-wrap{border-bottom:1px solid var(--hx-line)}\n\n/* ---- 玻璃卡片容器 ---- */\n.main-page .el-tabs__content{padding:2px 0 0!important}\n.main-page .script-home,.main-page .script-answer,.main-page .script-setting,.main-page .guide-page{\ncolor:var(--hx-ink)}\n.main-page .el-card.is-always-shadow,.main-page .el-card.is-hover-shadow:hover{\nbox-shadow:var(--hx-shadow)!important}\n\n/* ---- 通用玻璃块 ---- */\n.main-page .guide-header,.main-page .guide-card,.main-page .ai-config,.main-page .setting-box,.main-page .answer-list{\nborder:1px solid var(--hx-line)!important;border-radius:12px!important;\nbackground:var(--hx-glass)!important;backdrop-filter:blur(12px) saturate(140%);\n-webkit-backdrop-filter:blur(12px) saturate(14",
"0%);box-shadow:none!important}\n.main-page .guide-header{padding:12px 13px!important;\nbackground:linear-gradient(120deg,rgba(56,226,255,.13),rgba(155,107,255,.10))!important}\n.main-page .guide-title{color:#fff!important;font-size:13.5px!important;letter-spacing:.3px}\n.main-page .guide-tag{border:1px solid rgba(56,226,255,.42)!important;background:rgba(56,226,255,.12)!important;\ncolor:var(--hx-cyan)!important}\n.main-page .guide-subtitle{color:var(--hx-ink-dim)!important}\n.main-page .guide-card{padding:11px 12px!important}\n.main-page .guide-card:hover{border-color:rgba(56,226,255,.42)!important;\nbackground:rgba(22,40,74,.60)!important}\n.main-page .guide-number{background:linear-gradient(135deg,var(--hx-cyan),var(--hx-blue))!important;\ncolor:#04121f!important;font-weight:700;box-shadow:0 0 10px rgba(56,226,255,.35)}\n.main-page .guide-card-title{color:#eaf6ff!important}\n.main-pag",
"e .guide-copy{color:var(--hx-ink-dim)!important}\n.main-page .guide-card strong{color:var(--hx-cyan)!important;font-weight:600}\n.main-page .guide-flow{background:rgba(8,18,38,.42)!important;border:1px solid var(--hx-line)}\n\n/* ---- 表单控件:暗色玻璃 ---- */\n.main-page .el-input__wrapper,.main-page .el-textarea__inner,.main-page .el-select__wrapper{\nbackground:rgba(6,14,30,.55)!important;border:1px solid var(--hx-line)!important;\nborder-radius:9px!important;box-shadow:none!important;transition:border-color .2s,box-shadow .2s}\n.main-page .el-input__wrapper:hover,.main-page .el-select__wrapper:hover,.main-page .el-textarea__inner:hover{\nborder-color:rgba(56,226,255,.45)!important}\n.main-page .el-input__wrapper.is-focus,.main-page .el-select__wrapper.is-focused,.main-page .el-textarea__inner:focus{\nborder-color:var(--hx-cyan)!important;box-shadow:0 0 0 2px rgba(56,226,255,.16)!important}\n",
".main-page .el-input__inner,.main-page .el-textarea__inner,.main-page .el-select__placeholder,\n.main-page .el-select__selected-item{color:var(--hx-ink)!important}\n.main-page .el-input__inner::placeholder,.main-page .el-textarea__inner::placeholder{color:#6d84a3!important}\n.main-page .el-input-number__decrease,.main-page .el-input-number__increase{\nbackground:rgba(56,226,255,.10)!important;color:var(--hx-cyan)!important;border-color:var(--hx-line)!important}\n.main-page .el-input__inner[type=number]{text-align:left!important}\n\n/* ---- 表格 ---- */\n.main-page .el-table{background:transparent!important;color:var(--hx-ink)!important}\n.main-page .el-table tr{background:transparent!important}\n.main-page .el-table th.el-table__cell{background:rgba(56,226,255,.10)!important;color:var(--hx-cyan)!important;\nfont-weight:600;border-bottom:1px solid var(--hx-line)!important}\n.main-page .el-t",
"able td.el-table__cell{background:transparent!important;border-bottom:1px solid rgba(120,190,255,.10)!important}\n.main-page .el-table__body tr:hover>td.el-table__cell{background:rgba(56,226,255,.07)!important}\n.main-page .el-table__inner-wrapper::before{background-color:var(--hx-line)!important}\n.main-page .el-table__empty-block{background:transparent!important}\n.main-page .el-table__empty-text{color:var(--hx-ink-dim)!important}\n\n/* ---- 按钮 ---- */\n.main-page .el-button{border-radius:8px!important;font-weight:600;letter-spacing:.2px;\nborder:1px solid var(--hx-line)!important;background:rgba(56,226,255,.08)!important;color:var(--hx-ink)!important;\ntransition:all .2s}\n.main-page .el-button:hover{background:rgba(56,226,255,.18)!important;border-color:var(--hx-cyan)!important;\ncolor:#fff!important;box-shadow:0 0 12px rgba(56,226,255,.28)}\n.main-page .el-button--primary{border:non",
"e!important;\nbackground:linear-gradient(120deg,var(--hx-cyan),var(--hx-blue))!important;color:#04121f!important}\n.main-page .el-button--primary:hover{box-shadow:0 0 18px rgba(56,226,255,.45)!important}\n\n/* ---- 开关 / 复选 / 单选 ---- */\n.main-page .el-switch.is-checked .el-switch__core{background:linear-gradient(120deg,var(--hx-cyan),var(--hx-blue))!important;\nborder-color:transparent!important}\n.main-page .el-switch__core{background:rgba(120,160,200,.28)!important;border-color:var(--hx-line)!important}\n.main-page .el-checkbox__label,.main-page .el-radio__label{color:var(--hx-ink-dim)!important}\n.main-page .el-checkbox__input.is-checked+.el-checkbox__label,.main-page .el-radio__input.is-checked+.el-radio__label{color:var(--hx-ink)!important}\n.main-page .el-checkbox__inner.is-checked,.main-page .el-radio__input.is-checked .el-radio__inner{\nbackground:var(--hx-cyan)!important;border-",
"color:var(--hx-cyan)!important}\n\n/* ---- 答案状态色(涨绿跌红不适用于此,用蓝/绿/琥珀/红)---- */\n.main-page .answer-result--success{color:#4ade80!important}\n.main-page .answer-result--searching{color:var(--hx-cyan)!important}\n.main-page .answer-result--error{color:#ff7a7a!important}\n\n/* ---- 答案标记 ---- */\n.main-page .answer-mark{background:rgba(56,226,255,.14)!important;border:1px solid var(--hx-line)!important}\n\n/* ---- 日志 ---- */\n.main-page .el-timeline-item__node{background:var(--hx-cyan)!important;box-shadow:0 0 8px rgba(56,226,255,.5)}\n.main-page .el-timeline-item__tail{border-left-color:var(--hx-line)!important}\n.main-page .log-success,.main-page .el-timeline-item__content{color:var(--hx-ink-dim)!important}\n.main-page .el-timeline-item__content strong{color:var(--hx-cyan)!important}\n\n/* ---- 滚动条 ---- */\n.main-page ::-",
"webkit-scrollbar{width:7px;height:7px}\n.main-page ::-webkit-scrollbar-track{background:rgba(255,255,255,.03);border-radius:4px}\n.main-page ::-webkit-scrollbar-thumb{background:linear-gradient(180deg,var(--hx-cyan),var(--hx-violet));\nborder-radius:4px;opacity:.6}\n.main-page ::-webkit-scrollbar-thumb:hover{opacity:.95}\n\n/* ---- 打赏区 ---- */\n.main-page .donate-card{border:1px solid rgba(255,190,110,.28)!important;border-radius:12px!important;\nbackground:linear-gradient(150deg,rgba(56,226,255,.10),rgba(255,140,190,.10))!important;\nbackdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}\n.main-page .donate-card h3{color:#ffd9a0!important}\n.main-page .donate-card p{color:var(--hx-ink-dim)!important}\n.main-page .donate-card strong{color:#ffc46b!important}\n.main-page .donate-card img{border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.42);\nbackground:#fff;padding:5px}\n\n/* -",
"--- 最小化提示 ---- */\n.main-page .minus{color:var(--hx-ink-dim)!important}\n.main-page .overlay{background:rgba(4,10,24,.55)!important;backdrop-filter:blur(3px)}\n.main-page .modal{background:transparent!important}\n\n/* ---- Element Plus 弹层(下拉/提示)---- */\n.el-popper.is-light,.el-select-dropdown__item{border:1px solid var(--hx-line)!important;\nbackground:rgba(14,26,50,.94)!important;color:var(--hx-ink)!important;\nbackdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:var(--hx-shadow)!important}\n.el-select-dropdown__item{color:var(--hx-ink-dim)!important}\n.el-select-dropdown__item.is-hovering{background:rgba(56,226,255,.14)!important;color:#fff!important}\n.el-select-dropdown__item.is-selected{color:var(--hx-cyan)!important;font-weight:600}\n.el-popper__arrow::before{background:rgba(14,26,50,.94)!important;border-color:var(--hx-line)!important}\n.el-select__popper{backg",
"round:transparent!important;border:none!important}\n.el-popper.is-dark{background:rgba(8,16,34,.95)!important;border:1px solid var(--hx-line)!important}\n"
];
LAYOUT_CSS_PARTS.push("\n/* 答题页自适应:面板固定宽度,表格内部横向滚动 */.main-page .card_content{max-width:100%;overflow:hidden}.main-page .question_table{max-width:100%;overflow-x:auto;border-radius:10px}.main-page .question-list{width:625px}.main-page .question_table::-webkit-scrollbar{height:6px}.main-page .question_table::-webkit-scrollbar-thumb{background:linear-gradient(90deg,var(--hx-cyan),var(--hx-violet));border-radius:3px}.main-page .ai-config{display:grid;gap:8px;margin:0 0 10px}.main-page .ai-config .el-select,.main-page .ai-config .el-input{width:100%}.main-page .answer-result{word-break:break-word}");
// -- panel window hard lock: width 310 (cardWidth const) x height PANEL_HEIGHT --
// Overflow goes INSIDE the panel (body scrolls vertically, question_table scrolls horizontally).
// The :has() guard releases the fixed height while minimized, so the 35px minimized bar still works.
LAYOUT_CSS_PARTS.push(
"\n/* ==== panel window hard lock: 310 wide x 500 tall (bg image fills it exactly) ==== */"
+ "\n.main-page .el-card{display:flex;flex-direction:column;box-sizing:border-box;width:" + DEFAULT_CARD_WIDTH + ";height:" + PANEL_HEIGHT + "px;max-height:calc(100vh - 24px);overflow:hidden}"
+ "\n.main-page .el-card__body{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden}"
+ "\n.main-page .card_content{box-sizing:border-box;max-width:100%}"
+ "\n.main-page .el-card:has(.card_content[style*='display: none']),.main-page .el-card:has(.card_content[style*='display:none']){height:auto;max-height:none;overflow:visible}"
);
// ---- v0.5 UI: pinned hero / panes fill remaining space / no vertical scrollbar / centered ----
LAYOUT_CSS_PARTS.push(
"\n/* ==== v0.5 UI: pinned hero, fill panes, no vertical scrollbar, centered ==== */"
+ "\n.main-page .el-card__header{flex:0 0 auto;position:relative;z-index:3}"
+ "\n.main-page .el-card__body{flex:1 1 auto;min-height:0;overflow:hidden!important}"
+ "\n.main-page .card_content{display:flex;flex-direction:column;height:100%;min-height:0;margin:0 auto;box-sizing:border-box;max-width:100%}"
+ "\n.main-page .demo-tabs{display:flex!important;flex-direction:column;height:100%;min-height:0}"
+ "\n.main-page .demo-tabs>.el-tabs__header{flex:0 0 auto;margin:0 0 8px!important}"
+ "\n.main-page .demo-tabs>.el-tabs__content{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden;padding:0!important}"
+ "\n.main-page .demo-tabs>.el-tabs__content>.el-tab-pane{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden;padding:0 1px 2px 1px}"
+ "\n.main-page .el-tab-pane>.el-scrollbar,.main-page .el-tab-pane>.setting,.main-page .el-tab-pane>.guide-page,.main-page .el-tab-pane>.question_table{flex:1 1 auto;min-height:0}"
+ "\n.main-page .el-card__body,.main-page .el-tab-pane,.main-page .setting,.main-page .el-scrollbar__wrap{scrollbar-width:none}"
+ "\n.main-page .el-card__body::-webkit-scrollbar,.main-page .el-tab-pane::-webkit-scrollbar,.main-page .setting::-webkit-scrollbar,.main-page .script-home .el-scrollbar__wrap::-webkit-scrollbar{width:0!important;height:0!important;display:none!important}"
+ "\n.main-page .el-scrollbar__bar.is-vertical{display:none!important}"
+ "\n.main-page .script-home{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;padding-top:2px}"
+ "\n.main-page .script-home>.el-scrollbar.log{flex:1 1 auto;min-height:0;max-height:none!important;height:auto!important}"
+ "\n.main-page .script-home .el-scrollbar__wrap{height:100%;overflow-x:hidden}"
+ "\n.main-page .script-home .el-scrollbar__view{padding:0 2px 2px 0}"
+ "\n.main-page .log-divider{margin:3px 0!important;opacity:.45}"
+ "\n.main-page .setting{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;display:flex;flex-direction:column;gap:10px;padding:2px 1px 8px 1px;margin-top:0!important;font-size:12px}"
+ "\n.main-page .setting>div{flex:0 0 auto;display:flex;flex-direction:column;gap:8px;padding:10px 11px;border:1px solid var(--hx-line);border-radius:12px;background:var(--hx-glass);box-shadow:0 6px 18px rgba(2,8,24,.26);backdrop-filter:blur(10px) saturate(140%);-webkit-backdrop-filter:blur(10px) saturate(140%)}"
+ "\n.main-page .setting .el-divider{margin:0!important;background:transparent!important;border-top:1px solid var(--hx-line)!important}"
+ "\n.main-page .setting-section-title{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:700;color:var(--hx-cyan)!important;letter-spacing:.4px}"
+ "\n.main-page .setting-section-title:before{content:'';width:3px;height:12px;border-radius:2px;background:linear-gradient(180deg,var(--hx-cyan),var(--hx-violet));box-shadow:0 0 8px rgba(56,226,255,.6)}"
+ "\n.main-page .setting-checkbox{display:flex;align-items:center;height:28px;margin:0!important;padding:0 9px;border:1px solid var(--hx-line);border-radius:9px;background:rgba(6,14,30,.42);transition:border-color .2s,background .2s}"
+ "\n.main-page .setting-checkbox:hover{border-color:rgba(56,226,255,.42);background:rgba(56,226,255,.08)}"
+ "\n.main-page .setting .el-checkbox__label{font-size:12px;color:var(--hx-ink)!important}"
+ "\n.main-page .setting .el-form-item.setting-switch{display:flex!important;align-items:center;justify-content:space-between;gap:8px;height:28px;margin:0!important;padding:0 9px;border:1px solid var(--hx-line);border-radius:9px;background:rgba(6,14,30,.42);transition:border-color .2s,background .2s}"
+ "\n.main-page .setting .el-form-item.setting-switch:hover{border-color:rgba(56,226,255,.42);background:rgba(56,226,255,.08)}"
+ "\n.main-page .setting .el-form-item.setting-switch>.el-form-item__label{flex:1 1 auto;min-width:0;margin:0!important;padding:0!important;font-size:12px;line-height:1.3;color:var(--hx-ink)!important;text-align:left;justify-content:flex-start}"
+ "\n.main-page .setting .el-form-item.setting-switch>.el-form-item__content{flex:0 0 auto;margin-left:auto!important;display:flex;justify-content:flex-end;align-items:center;min-width:0;line-height:1}"
+ "\n.main-page .setting .el-form-item.setting-switch .el-form-item__error{display:none}"
+ "\n.main-page .setting .el-switch{--el-switch-on-color:var(--hx-cyan,#38e2ff);--el-switch-off-color:rgba(255,255,255,.12)}"
+ "\n.main-page .setting .el-switch .el-switch__core{border-color:rgba(120,190,255,.30)}"
+ "\n.main-page .setting .el-switch.is-checked .el-switch__core{border-color:transparent}"
+ "\n.main-page .setting .el-switch.is-checked .el-switch__core .el-switch__action{color:var(--hx-cyan,#38e2ff)}"
+ "\n.main-page .usage-bar{flex:0 0 auto!important;margin-top:6px!important;padding:7px 9px 8px!important;border:1px solid var(--hx-line);border-radius:11px;background:linear-gradient(135deg,rgba(18,32,62,.52),rgba(12,22,44,.34));box-shadow:0 3px 10px rgba(2,8,24,.18);box-sizing:border-box;max-width:100%}"
+ "\n.main-page .usage-main{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px}"
+ "\n.main-page .usage-cell{display:flex;align-items:baseline;justify-content:space-between;gap:4px;min-width:0;padding:3px 6px;border-radius:8px;background:rgba(255,255,255,.045);border:1px solid rgba(120,190,255,.13)}"
+ "\n.main-page .usage-cell__k{flex:0 0 auto;font-size:10px;line-height:15px;color:var(--hx-ink-dim);white-space:nowrap}"
+ "\n.main-page .usage-cell__v{flex:1 1 auto;min-width:0;text-align:right;font-size:11.5px;line-height:15px;font-weight:600;color:var(--hx-cyan);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}"
+ "\n.main-page .usage-sub{display:flex;align-items:center;justify-content:flex-start;gap:6px;margin-top:5px;padding:0 2px}"
+ "\n.main-page .usage-tag{flex:0 0 auto;padding:1px 7px;border-radius:20px;font-size:10px;line-height:15px;border:1px solid;white-space:nowrap}"
+ "\n.main-page .usage-tag.is-peak{color:#ffc46b;border-color:rgba(255,196,107,.38);background:rgba(255,196,107,.10)}"
+ "\n.main-page .usage-tag.is-off{color:#4ade80;border-color:rgba(74,222,128,.34);background:rgba(74,222,128,.10)}"
+ "\n.main-page .usage-rate{flex:0 0 auto;font-size:10.5px;line-height:15px;color:var(--hx-ink-dim);white-space:nowrap}"
+ "\n.main-page .setting .el-form-item{display:flex;align-items:center;margin:0!important}"
+ "\n.main-page .setting .el-form-item__label{flex:1 1 auto;justify-content:flex-start!important;height:auto!important;line-height:1.5!important;padding:0!important;color:var(--hx-ink-dim)!important;font-size:12px}"
+ "\n.main-page .setting .el-form-item__content{flex:0 0 auto;margin-left:8px!important}"
+ "\n.main-page .setting .el-input-number{width:112px!important}"
+ "\n.main-page .whale-page{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;gap:8px;padding:2px 1px 0 1px;box-sizing:border-box;max-width:100%}"
+ "\n.main-page .whale-page>.question_table{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden}"
+ "\n.main-page .whale-page>.usage-bar{margin-top:0!important}"
+ "\n.main-page .whale-hero{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;box-sizing:border-box;max-width:100%}"
+ "\n.main-page .whale-hero__avatar{display:block;width:44px;height:44px;object-fit:contain;border-radius:18px;background:radial-gradient(circle at 50% 40%,rgba(56,226,255,.16),rgba(6,14,30,.30));border:1px solid rgba(56,226,255,.24);box-shadow:0 4px 14px rgba(2,8,24,.30);transition:width .34s cubic-bezier(.34,1.24,.64,1),height .34s cubic-bezier(.34,1.24,.64,1),border-radius .34s ease}"
+ "\n.main-page .whale-hero__bubble{display:inline-flex;align-items:center;gap:6px;padding:2px 11px;border:1px solid var(--hx-line);border-radius:20px;background:var(--hx-glass);box-shadow:0 4px 14px rgba(2,8,24,.22);max-width:100%;box-sizing:border-box}"
+ "\n.main-page .whale-hero__text{font-size:12px;line-height:1.6;color:var(--hx-ink-dim);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:font-size .34s ease}"
+ "\n.main-page .whale-hero.is-idle{flex:1 1 auto;min-height:0;gap:14px;padding:4px 0 16px}"
+ "\n.main-page .whale-hero.is-idle .whale-hero__avatar{width:132px;height:132px;border-radius:20px}"
+ "\n.main-page .whale-hero.is-idle .whale-hero__bubble{padding:4px 14px}"
+ "\n.main-page .whale-hero.is-idle .whale-hero__text{font-size:14px;color:var(--hx-ink)}"
+ "\n.main-page .whale-hero.is-busy{flex-direction:row;gap:9px;padding:2px 2px 0}"
+ "\n.main-page .whale-hero.is-busy .whale-hero__avatar{animation:hxWhaleBreath 2.4s ease-in-out infinite}"
+ "\n.main-page .whale-hero.is-busy .whale-hero__bubble{border-color:rgba(56,226,255,.26);background:rgba(56,226,255,.07)}"
+ "\n.main-page .whale-hero.is-busy .whale-hero__text{color:var(--hx-cyan)}"
+ "\n.main-page .whale-hero.is-busy .whale-hero__text:after{content:'';display:inline-block;width:1.1em;text-align:left;animation:hxWhaleDots 1.6s steps(1,end) infinite}"
+ "\n@keyframes hxWhaleBreath{0%,100%{transform:scale(1);box-shadow:0 4px 14px rgba(2,8,24,.30)}50%{transform:scale(1.07);box-shadow:0 4px 18px rgba(56,226,255,.34)}}"
+ "\n@keyframes hxWhaleDots{0%{content:''}25%{content:'.'}50%{content:'..'}75%{content:'...'}}"
+ "\n@media (prefers-reduced-motion:reduce){.main-page .whale-hero.is-busy .whale-hero__avatar,.main-page .whale-hero.is-busy .whale-hero__text:after{animation:none}}"
+ "\n.main-page .setting .el-form-item.setting-ai-field{display:flex!important;align-items:center;gap:8px}"
+ "\n.main-page .setting .el-form-item.setting-ai-field>.el-form-item__label{flex:0 0 54px;justify-content:flex-start!important;font-size:12px;color:var(--hx-ink-dim)!important}"
+ "\n.main-page .setting .el-form-item.setting-ai-field>.el-form-item__content{flex:1 1 auto;min-width:0;margin-left:0!important;display:flex}"
+ "\n.main-page .setting .el-form-item.setting-ai-field .el-input,.main-page .setting .el-form-item.setting-ai-field .el-select{width:100%!important}"
+ "\n.main-page .setting>div.setting-ai{border-color:rgba(56,226,255,.24)}"
+ "\n.main-page .guide-page{max-height:none!important}"
+ "\n.main-page .answer-legend{justify-content:center!important}"
+ "\n.main-page .ai-config .el-select,.main-page .ai-config .el-input{justify-self:center;width:100%!important}"
+ "\n/* ================= 首页通知(日志)卡片化 ================= */"
+ "\n.main-page .script-home .el-scrollbar__view>div{position:relative;margin:0 0 6px;padding:7px 9px 8px;border:1px solid var(--hx-line);border-radius:10px;background:linear-gradient(135deg,rgba(18,32,62,.62),rgba(12,22,44,.40));box-shadow:0 4px 14px rgba(2,8,24,.22);backdrop-filter:blur(8px) saturate(140%);-webkit-backdrop-filter:blur(8px) saturate(140%);transition:border-color .18s,background .18s}"
+ "\n.main-page .script-home .el-scrollbar__view>div:hover{border-color:rgba(56,226,255,.40);background:linear-gradient(135deg,rgba(22,40,74,.66),rgba(14,26,52,.46))}"
+ "\n.main-page .script-home .el-scrollbar__view>div:last-child{margin-bottom:0}"
+ "\n.main-page .script-home .el-text{display:inline;vertical-align:baseline}"
+ "\n.main-page .script-home .log-time{display:block;margin:0 0 3px;font-size:10.5px;line-height:1.4;letter-spacing:.5px;font-variant-numeric:tabular-nums;color:#7089a8!important;text-shadow:none}"
+ "\n.main-page .script-home .el-scrollbar__view>div>.el-text:not(.log-time){display:block;padding-left:9px;border-left:3px solid var(--hx-blue);border-radius:2px;font-size:12px;line-height:1.62;letter-spacing:.1px;overflow-wrap:anywhere;word-break:break-word;transition:border-color .18s}"
+ "\n.main-page .script-home .el-scrollbar__view>div>.el-text--primary{border-left-color:var(--hx-cyan);color:#d6e6ff!important}"
+ "\n.main-page .script-home .el-scrollbar__view>div>.el-text--success{border-left-color:#4ade80;color:#86efac!important}"
+ "\n.main-page .script-home .el-scrollbar__view>div>.el-text--warning{border-left-color:#ffc46b;color:#ffd79a!important}"
+ "\n.main-page .script-home .el-scrollbar__view>div>.el-text--danger{border-left-color:#ff7a7a;color:#ffb0b0!important}"
+ "\n.main-page .script-home .el-scrollbar__view>div>.el-text--info{border-left-color:#7f96b8;color:var(--hx-ink-dim)!important}"
+ "\n.main-page .script-home .log-divider{display:none!important;margin:0!important;height:0!important;border:none!important}"
+ "\n.main-page .script-home .log-action-link{display:inline-block;margin-left:3px;padding:0 7px;border:1px solid rgba(56,226,255,.45);border-radius:20px;color:var(--hx-cyan)!important;font-size:11px;line-height:17px;text-decoration:none;background:rgba(56,226,255,.10);transition:background .18s,color .18s}"
+ "\n.main-page .script-home .log-action-link:hover{background:rgba(56,226,255,.24);color:#fff!important}"
+ "\n/* ================= 答题页美化 ================= */"
+ "\n.main-page .ai-config{display:grid;grid-template-columns:1fr;gap:6px;padding:9px 10px!important;margin-bottom:8px}"
+ "\n.main-page .answer-legend{display:flex;flex-wrap:wrap;gap:6px;justify-content:center!important;margin:0 0 8px;padding:7px 8px;border:1px solid var(--hx-line);border-radius:10px;background:rgba(6,14,30,.42)}"
+ "\n.main-page .answer-legend>span{position:relative;padding:1px 8px 1px 16px;border-radius:20px;font-size:10.5px;line-height:17px;white-space:nowrap;background:rgba(255,255,255,.05);border:1px solid rgba(120,190,255,.16)}"
+ "\n.main-page .answer-legend>span:before{content:\'\';position:absolute;left:6px;top:50%;transform:translateY(-50%);width:6px;height:6px;border-radius:50%;background:currentColor;box-shadow:0 0 6px currentColor}"
+ "\n.main-page .answer-legend>.answer-result--success{color:#4ade80!important;border-color:rgba(74,222,128,.34)}"
+ "\n.main-page .answer-legend>.answer-result--searching{color:var(--hx-cyan)!important;border-color:rgba(56,226,255,.34)}"
+ "\n.main-page .answer-legend>.answer-result--error{color:#ff8a8a!important;border-color:rgba(255,138,138,.34)}"
+ "\n.main-page .question_table{border:1px solid var(--hx-line);border-radius:12px;background:rgba(8,16,34,.30);padding:0 0 2px}"
+ "\n.main-page .question-list{border-radius:12px;overflow:hidden}"
+ "\n.main-page .question-list .el-table__cell{padding:6px 8px!important;font-size:11.5px;line-height:1.6}"
+ "\n.main-page .question-list th.el-table__cell{position:sticky;top:0;z-index:2;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}"
+ "\n.main-page .question-list .cell{overflow-wrap:anywhere;word-break:break-word}"
+ "\n.main-page .answer-result{display:inline-block;font-size:11.5px;line-height:1.6}"
+ "\n.main-page .answer-result--searching{animation:hxPulse 1.4s ease-in-out infinite}"
+ "\n@keyframes hxPulse{0%,100%{opacity:.55}50%{opacity:1}}"
+ "\n/* ================= 协议页:底部署名 ================= */"
+ "\n.main-page .guide-page{padding-bottom:10px!important}"
+ "\n/* ===== 协议页署名:吸底常驻,永远不被折叠线挡住 ===== */"
+ "\n.main-page .guide-page{display:flex!important;flex-direction:column!important;padding-bottom:0!important}"
+ "\n.main-page .guide-page>.guide-list{flex:0 0 auto;padding-bottom:6px!important}"
+ "\n.main-page .guide-footer{position:static!important;flex:0 0 auto;margin:10px 0 0!important;padding:9px 12px;border:1px solid var(--hx-line);border-radius:12px;background:linear-gradient(120deg,rgba(20,36,68,.62),rgba(28,20,60,.58));text-align:center;box-shadow:0 6px 18px rgba(2,8,24,.24);backdrop-filter:blur(12px) saturate(140%);-webkit-backdrop-filter:blur(12px) saturate(140%)}"
+ "\n.main-page .guide-sign{margin:0;font-size:11.5px;line-height:1.7;letter-spacing:.3px;color:var(--hx-ink)!important}"
+ "\n.main-page .guide-sign strong{color:var(--hx-cyan)!important;font-weight:700;letter-spacing:.6px;text-shadow:0 0 12px rgba(56,226,255,.45)}"
+ "\n.main-page .guide-meta{margin:5px 0 0;font-size:10px;line-height:1.6;letter-spacing:.4px;color:var(--hx-ink-dim)!important;opacity:.9}"
+ "\n/* ===== 答题页:表格改卡片列表(题号+题目一行 / 答案下一行) ===== */"
+ "\n.main-page .question_table{overflow-x:hidden!important;overflow-y:auto!important;border:none!important;background:transparent!important;padding:0 1px 2px!important}"
+ "\n.main-page .answer-legend{position:sticky!important;top:0;z-index:4;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}"
+ "\n.main-page .question-list{width:auto!important;max-width:100%!important;border:none!important;background:transparent!important;overflow:visible!important;padding:0}"
+ "\n.main-page .question-card{position:relative;display:flex!important;flex-wrap:wrap!important;align-items:flex-start;margin:0 0 7px!important;padding:8px 10px 9px 12px!important;border:1px solid var(--hx-line);border-radius:11px;background:linear-gradient(135deg,rgba(18,32,62,.58),rgba(12,22,44,.38));box-shadow:0 3px 10px rgba(2,8,24,.20);backdrop-filter:blur(8px) saturate(140%);-webkit-backdrop-filter:blur(8px) saturate(140%);transition:border-color .18s,background .18s}"
+ "\n.main-page .question-card:last-child{margin-bottom:0!important}"
+ "\n.main-page .question-card:hover{border-color:rgba(56,226,255,.40);background:linear-gradient(135deg,rgba(22,40,74,.62),rgba(14,26,52,.44))}"
+ "\n.main-page .question-card:before{content:\'\';position:absolute;left:5px;top:8px;bottom:8px;width:3px;border-radius:2px;background:var(--hx-blue);opacity:.8}"
+ "\n.main-page .question-index{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;min-width:19px;height:19px;margin-right:7px;padding:0 5px;border-radius:10px;background:linear-gradient(135deg,rgba(56,226,255,.24),rgba(155,107,255,.24));border:1px solid rgba(120,190,255,.22);color:#cfe9ff;font-size:10px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums}"
+ "\n.main-page .question-title{flex:1 1 0;min-width:0;font-size:11.5px;line-height:1.62;color:var(--hx-ink)!important;overflow-wrap:anywhere;word-break:break-word}"
+ "\n.main-page .question-title img{max-width:100%!important;height:auto!important;border-radius:6px}"
+ "\n.main-page .question-card>.answer-result{flex:0 0 100%;width:100%;margin-top:6px!important;padding-top:6px!important;border-top:1px dashed rgba(120,190,255,.16);font-size:11.5px;line-height:1.65;overflow-wrap:anywhere;word-break:break-word}"
+ "\n.main-page .question-card>.answer-result:before{content:\'答案\';display:inline-block;margin-right:6px;padding:0 5px;border-radius:5px;background:rgba(56,226,255,.12);border:1px solid rgba(56,226,255,.26);color:var(--hx-cyan);font-size:10px;line-height:15px;vertical-align:1px}"
+ "\n/* ================= 鲁棒性 ================= */"
+ "\n.main-page .el-card{max-height:calc(100vh - 24px);max-height:calc(100dvh - 24px)}"
+ "\n.main-page .el-tab-pane,.main-page .guide-page,.main-page .setting{-webkit-overflow-scrolling:touch}"
+ "\n/* ===== 首页:绝对定位撑满,消灭下方空白 ===== */"
+ "\n.main-page .el-tab-pane>.script-home{position:relative!important;flex:1 1 auto!important;min-height:0!important;display:block!important;height:auto!important;padding:0!important}"
+ "\n.main-page .script-home>.el-scrollbar{position:absolute!important;top:0!important;left:0!important;right:0!important;bottom:0!important;height:auto!important;max-height:none!important;width:auto!important;margin:0!important}"
+ "\n.main-page .script-home .el-scrollbar__wrap{height:100%!important;max-height:none!important;overflow-y:auto!important;overflow-x:hidden!important;box-sizing:border-box}"
+ "\n.main-page .script-home .el-scrollbar__view{min-height:100%;box-sizing:border-box;padding:0 2px 8px 0}"
+ "\n/* ===== 彻底隐藏滚动条(保留滚动能力)===== */"
+ "\n.main-page *{scrollbar-width:none!important;-ms-overflow-style:none!important}"
+ "\n.main-page *::-webkit-scrollbar{width:0!important;height:0!important;display:none!important;background:transparent!important}"
+ "\n.main-page *::-webkit-scrollbar-thumb,.main-page *::-webkit-scrollbar-track,.main-page *::-webkit-scrollbar-corner{display:none!important;background:transparent!important;border:none!important}"
+ "\n/* ===== 设置页:章节标题胶囊化 ===== */"
+ "\n.main-page .setting .el-divider--horizontal{height:auto!important;min-height:0!important;border-top:none!important;background:transparent!important;display:flex!important;align-items:center;margin:0!important;padding:1px 0 2px}"
+ "\n.main-page .setting .el-divider__text{position:static!important;left:auto!important;transform:none!important;background-color:transparent!important;background:transparent!important;padding:0!important;display:inline-flex!important}"
+ "\n.main-page .setting-section-title{display:inline-flex;align-items:center;gap:6px;padding:3px 11px 3px 8px;border:1px solid rgba(56,226,255,.30);border-radius:20px;background:rgba(56,226,255,.09);font-size:12px;font-weight:700;color:var(--hx-cyan)!important;letter-spacing:.6px;line-height:1.5;white-space:nowrap}"
+ "\n.main-page .setting>div>.el-divider--horizontal+.el-checkbox,.main-page .setting>div>.el-divider--horizontal+.el-form-item{margin-top:2px!important}"
+ "\n/* ===== 空状态:鲸娘图标 ===== */"
+ "\n.main-page .el-empty{padding:16px 0 12px!important}"
+ "\n.main-page .el-empty__image{width:108px!important;height:108px!important;opacity:.96;filter:drop-shadow(0 10px 24px rgba(56,226,255,.30))}"
+ "\n.main-page .el-empty__image img{width:100%!important;height:100%!important;object-fit:contain;border-radius:20px}"
+ "\n.main-page .el-empty__description{margin-top:10px!important}"
+ "\n.main-page .el-empty__description p{color:var(--hx-ink-dim)!important;font-size:12px;letter-spacing:.5px}"
+ "\n/* ===== 末轮收尾:统一盒模型,消除 1px 横向溢出 ===== */"
+ "\n.main-page .question_table,.main-page .question-list,.main-page .ai-config,.main-page .answer-legend,.main-page .guide-header,.main-page .guide-card,.main-page .guide-footer,.main-page .setting>div,.main-page .script-home .el-scrollbar__view>div{box-sizing:border-box!important;max-width:100%!important}"
+ "\n.main-page .el-tab-pane{overflow-x:hidden!important;box-sizing:border-box!important;max-width:100%!important}"
+ "\n.main-page .el-card__body,.main-page .card_content,.main-page .demo-tabs,.main-page .demo-tabs>.el-tabs__content{box-sizing:border-box!important;max-width:100%!important}"
+ "\n/* ===== 通知卡片紧凑化:时间内联成徽章,时间↔正文空档归零 ===== */"
+ "\n.main-page .script-home .el-scrollbar__view>div{position:relative;margin:0 0 5px!important;padding:6px 9px 7px 18px!important;border:1px solid var(--hx-line);border-radius:9px;background:linear-gradient(135deg,rgba(18,32,62,.62),rgba(12,22,44,.40));box-shadow:0 3px 10px rgba(2,8,24,.20);backdrop-filter:blur(8px) saturate(140%);-webkit-backdrop-filter:blur(8px) saturate(140%);line-height:1.7;transition:border-color .18s,background .18s}"
+ "\n.main-page .script-home .el-scrollbar__view>div:before{content:\'\';position:absolute;left:7px;top:7px;bottom:7px;width:3px;border-radius:2px;background:var(--hx-blue);box-shadow:0 0 8px rgba(74,140,255,.5)}"
+ "\n.main-page .script-home .el-scrollbar__view>div:has(>.el-text--primary:not(.log-time)):before{background:var(--hx-cyan);box-shadow:0 0 8px rgba(56,226,255,.55)}"
+ "\n.main-page .script-home .el-scrollbar__view>div:has(>.el-text--success:not(.log-time)):before{background:#4ade80;box-shadow:0 0 8px rgba(74,222,128,.55)}"
+ "\n.main-page .script-home .el-scrollbar__view>div:has(>.el-text--warning:not(.log-time)):before{background:#ffc46b;box-shadow:0 0 8px rgba(255,196,107,.55)}"
+ "\n.main-page .script-home .el-scrollbar__view>div:has(>.el-text--danger:not(.log-time)):before{background:#ff7a7a;box-shadow:0 0 8px rgba(255,138,138,.55)}"
+ "\n.main-page .script-home .el-scrollbar__view>div:has(>.el-text--info:not(.log-time)):before{background:#7f96b8;box-shadow:none}"
+ "\n.main-page .script-home .log-time{display:inline!important;margin:0 5px 0 0!important;padding:1px 5px;border-radius:5px;background:rgba(120,190,255,.10);font-size:9.5px!important;line-height:1.5!important;letter-spacing:.3px;color:#7f9ab8!important;font-variant-numeric:tabular-nums;vertical-align:1px;white-space:nowrap}"
+ "\n.main-page .script-home .el-scrollbar__view>div>.el-text:not(.log-time){display:inline!important;padding:0!important;border:none!important;font-size:12px;line-height:1.7;letter-spacing:.1px;overflow-wrap:anywhere;word-break:break-word;vertical-align:baseline}"
+ "\n.main-page .script-home .el-scrollbar__view>div>.el-text[class=\"el-text\"]{display:none!important}"
+ "\n/* ===== 答题页空状态:图标放大 + 空白区垂直居中 ===== */"
+ "\n.main-page .el-tab-pane>div:has(>.el-empty){flex:1 1 auto!important;min-height:0!important;display:flex!important;flex-direction:column;align-items:center;justify-content:center;width:100%!important;box-sizing:border-box!important;padding-bottom:34px!important}"
+ "\n.main-page .el-empty{display:flex!important;flex-direction:column;align-items:center;justify-content:center;width:100%!important;padding:0!important;margin:0!important;box-sizing:border-box!important}"
+ "\n.main-page .el-empty__image{width:132px!important;height:132px!important;margin:0 auto!important}"
+ "\n.main-page .el-empty__description{margin-top:12px!important;width:100%!important;text-align:center!important}"
+ "\n.main-page .el-empty__description p{text-align:center!important;font-size:12.5px!important}"
);
// ---- v0.4.11 液态玻璃(Liquid Glass):悬浮胶囊 + 双态(静止 / 交互·吸顶滚动)----
LAYOUT_CSS_PARTS.push(
"\n/* ==== v0.4.11 liquid glass ==== */"
+ "\n.main-page{--lg-rim:rgba(255,255,255,.30);--lg-rim-dim:rgba(255,255,255,.14);--lg-edge:rgba(140,200,255,.22);--lg-tint-hi:linear-gradient(155deg,rgba(255,255,255,.20),rgba(255,255,255,.07) 34%,rgba(10,22,46,.34) 100%);--lg-shadow-hi:0 12px 28px rgba(2,8,24,.42),0 0 20px rgba(56,226,255,.16),inset 0 1px 0 var(--lg-rim);--lg-t:background .28s ease,border-color .28s ease,box-shadow .28s ease,transform .28s cubic-bezier(.34,1.2,.64,1),backdrop-filter .28s ease,-webkit-backdrop-filter .28s ease,color .2s ease}"
+ "\n.main-page .demo-tabs>.el-tabs__header{overflow:visible!important;margin:0 0 9px!important}"
+ "\n.main-page .demo-tabs .el-tabs__nav-wrap{overflow:visible!important;border-bottom:none!important}"
+ "\n.main-page .demo-tabs .el-tabs__nav-wrap::after{display:none!important;height:0!important;background:none!important}"
+ "\n.main-page .demo-tabs .el-tabs__active-bar{display:none!important;opacity:0!important}"
+ "\n.main-page .demo-tabs .el-tabs__nav{display:flex!important;align-items:center;gap:4px;padding:3px;border:1px solid rgba(140,200,255,.14);border-radius:13px;background:linear-gradient(150deg,rgba(255,255,255,.06),rgba(8,18,38,.24));backdrop-filter:blur(10px) saturate(150%);-webkit-backdrop-filter:blur(10px) saturate(150%);box-shadow:inset 0 1px 0 rgba(255,255,255,.12);transition:var(--lg-t)}"
+ "\n.main-page .demo-tabs .el-tabs__item{position:relative;height:28px!important;line-height:28px!important;padding:0 7px!important;border:1px solid transparent!important;border-radius:10px!important;background:transparent!important;color:var(--hx-ink-dim)!important;font-size:11.5px!important;font-weight:600!important;letter-spacing:.2px;overflow:visible!important;transition:var(--lg-t)}"
+ "\n.main-page .demo-tabs .el-tabs__item::before{content:'';position:absolute;inset:0;border-radius:9px;pointer-events:none;opacity:0;transition:opacity .28s ease;background:linear-gradient(160deg,rgba(255,255,255,.24),rgba(255,255,255,.05) 42%,transparent 74%)}"
+ "\n.main-page .demo-tabs .el-tabs__item:hover{color:var(--hx-ink)!important;background:rgba(255,255,255,.07)!important;transform:translateY(-1px);box-shadow:0 4px 12px rgba(2,8,24,.26),inset 0 1px 0 rgba(255,255,255,.22)}"
+ "\n.main-page .demo-tabs .el-tabs__item:hover::before{opacity:1}"
+ "\n.main-page .demo-tabs .el-tabs__item.is-active{color:#fff!important;background:var(--lg-tint-hi)!important;border-color:rgba(56,226,255,.32)!important;transform:translateY(-1px);box-shadow:var(--lg-shadow-hi)}"
+ "\n.main-page .demo-tabs .el-tabs__item.is-active::before{opacity:1}"
+ "\n.main-page .demo-tabs .el-tabs__nav-wrap::before{content:none!important;display:none!important}"
+ "\n.main-page .demo-tabs .el-tabs__item+.el-tabs__item{border-left:none!important;border-image:none!important;background-image:none!important}"
+ "\n.main-page .demo-tabs .el-tabs__nav-scroll{overflow:visible!important}"
+ "\n.main-page .demo-tabs .el-tabs__nav{border-left:none!important;border-right:none!important}"
+ "\n.main-page .el-card__header{background:linear-gradient(180deg,rgba(56,226,255,.07),rgba(155,107,255,.03) 58%,transparent)!important;border-bottom:none!important;padding:9px 9px 3px!important}"
+ "\n.main-page .card-header{gap:9px;padding:8px 11px!important;border:1px solid var(--lg-edge);border-radius:14px;background:linear-gradient(120deg,rgba(56,226,255,.14),rgba(74,140,255,.07) 46%,rgba(155,107,255,.14))!important;backdrop-filter:blur(12px) saturate(155%);-webkit-backdrop-filter:blur(12px) saturate(155%);box-shadow:0 6px 18px rgba(2,8,24,.28),inset 0 1px 0 var(--lg-rim);transition:var(--lg-t)}"
+ "\n.main-page .card-header::after{display:none!important}"
+ "\n.main-page .card-header:hover{border-color:rgba(56,226,255,.34);box-shadow:var(--lg-shadow-hi)}"
+ "\n.main-page .card-header__logo{flex:none;width:24px;height:24px;border-radius:8px;object-fit:contain;background:radial-gradient(circle at 50% 42%,rgba(56,226,255,.20),rgba(6,14,30,.30));border:1px solid rgba(56,226,255,.26);box-shadow:0 2px 10px rgba(2,8,24,.32),inset 0 1px 0 rgba(255,255,255,.18);transition:var(--lg-t)}"
+ "\n.main-page .card-header:hover .card-header__logo{transform:scale(1.06) rotate(-2deg);box-shadow:0 3px 14px rgba(56,226,255,.26),inset 0 1px 0 rgba(255,255,255,.26)}"
+ "\n.main-page.is-scrolled .card-header{background:linear-gradient(120deg,rgba(56,226,255,.20),rgba(74,140,255,.12) 46%,rgba(155,107,255,.20))!important;box-shadow:0 10px 26px rgba(2,8,24,.42),inset 0 1px 0 var(--lg-rim)}"
+ "\n.main-page.is-scrolled .demo-tabs .el-tabs__nav{background:linear-gradient(150deg,rgba(255,255,255,.10),rgba(8,18,38,.44));box-shadow:0 8px 22px rgba(2,8,24,.36),inset 0 1px 0 rgba(255,255,255,.18)}"
+ "\n.main-page .usage-bar{--lg-blur:14px;border:1px solid var(--lg-edge)!important;border-radius:14px!important;background:linear-gradient(155deg,rgba(255,255,255,.085),rgba(255,255,255,.02) 40%,rgba(8,18,38,.28))!important;backdrop-filter:blur(var(--lg-blur)) saturate(155%);-webkit-backdrop-filter:blur(var(--lg-blur)) saturate(155%);box-shadow:0 6px 18px rgba(2,8,24,.26),inset 0 1px 0 var(--lg-rim-dim)!important;transition:var(--lg-t)}"
+ "\n.main-page .usage-main{gap:6px}"
+ "\n.main-page .usage-cell{border:none!important;border-radius:9px!important;background:linear-gradient(160deg,rgba(255,255,255,.075),rgba(255,255,255,.018) 58%,rgba(8,18,38,.20))!important;box-shadow:inset 0 1px 0 rgba(255,255,255,.14)!important;transition:var(--lg-t)}"
+ "\n.main-page .usage-cell:hover{background:var(--lg-tint-hi)!important;transform:translateY(-1px);box-shadow:var(--lg-shadow-hi)!important}"
+ "\n.main-page .usage-sub{gap:6px}"
+ "\n.main-page .usage-tag{backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);transition:var(--lg-t)}"
+ "\n.main-page .usage-tag:hover{transform:translateY(-1px)}"
+ "\n.main-page .whale-hero__bubble{border:1px solid var(--lg-edge)!important;background:linear-gradient(150deg,rgba(255,255,255,.10),rgba(255,255,255,.025) 40%,rgba(8,18,38,.26))!important;backdrop-filter:blur(16px) saturate(150%);-webkit-backdrop-filter:blur(16px) saturate(150%);box-shadow:0 6px 18px rgba(2,8,24,.26),inset 0 1px 0 var(--lg-rim-dim)!important;transition:var(--lg-t)}"
+ "\n.main-page .whale-hero.is-idle .whale-hero__bubble{padding:5px 15px}"
+ "\n.main-page .whale-hero__balance{flex:0 0 auto;display:flex;align-items:center;justify-content:center;width:100%;min-height:0;transition:opacity .28s ease,transform .28s ease,height .28s ease}"
+ "\n.main-page .whale-hero.is-idle .whale-hero__balance{opacity:1;transform:none;margin-top:2px}"
+ "\n.main-page .whale-hero.is-busy .whale-hero__balance{opacity:0;transform:translateY(-4px);height:0;overflow:hidden;pointer-events:none}"
+ "\n.main-page .hero-balance{display:inline-flex;align-items:center;gap:7px;max-width:100%;padding:4px 12px;border:1px solid rgba(140,200,255,.22);border-radius:999px;background:linear-gradient(150deg,rgba(255,255,255,.12),rgba(255,255,255,.03) 38%,rgba(8,18,38,.30));backdrop-filter:blur(16px) saturate(155%);-webkit-backdrop-filter:blur(16px) saturate(155%);box-shadow:0 6px 18px rgba(2,8,24,.28),inset 0 1px 0 rgba(255,255,255,.22);font-size:11.5px;line-height:1.5;white-space:nowrap;cursor:pointer;transition:var(--lg-t)}"
+ "\n.main-page .hero-balance:hover{transform:translateY(-1px);border-color:rgba(56,226,255,.38);box-shadow:var(--lg-shadow-hi)}"
+ "\n.main-page .hero-balance__k{font-size:10.5px;letter-spacing:.3px;color:var(--hx-ink-dim)}"
+ "\n.main-page .hero-balance__v{font-weight:700;font-variant-numeric:tabular-nums;color:var(--hx-cyan)}"
+ "\n.main-page .hero-balance__hint{font-size:10px;color:#ffc46b}"
+ "\n.main-page .hero-balance.is-low .hero-balance__v{color:#ffc46b}"
+ "\n.main-page .hero-balance.is-void .hero-balance__v,.main-page .hero-balance.is-err .hero-balance__v{color:var(--hx-ink-dim);font-weight:600}"
+ "\n.main-page .hero-balance.is-loading .hero-balance__v{animation:hxBalPulse 1.4s ease-in-out infinite}"
+ "\n@keyframes hxBalPulse{0%,100%{opacity:.45}50%{opacity:1}}"
+ "\n.main-page .setting>div{--lg-blur:18px;border:1px solid var(--lg-edge)!important;border-radius:14px!important;background:linear-gradient(155deg,rgba(255,255,255,.09),rgba(255,255,255,.022) 40%,rgba(8,18,38,.30))!important;backdrop-filter:blur(var(--lg-blur)) saturate(155%);-webkit-backdrop-filter:blur(var(--lg-blur)) saturate(155%);box-shadow:0 8px 22px rgba(2,8,24,.30),inset 0 1px 0 var(--lg-rim-dim)!important;transition:var(--lg-t)}"
+ "\n.main-page .setting>div:hover{border-color:rgba(56,226,255,.34)!important;box-shadow:var(--lg-shadow-hi)!important;transform:translateY(-1px)}"
+ "\n.main-page .setting>div.setting-ai{--lg-blur:20px;border-color:rgba(56,226,255,.30)!important}"
+ "\n.main-page .guide-header{--lg-blur:16px;backdrop-filter:blur(var(--lg-blur)) saturate(155%);-webkit-backdrop-filter:blur(var(--lg-blur)) saturate(155%)}"
+ "\n.main-page .guide-card{--lg-blur:12px;border:1px solid var(--lg-edge)!important;border-radius:12px!important;background:linear-gradient(155deg,rgba(255,255,255,.085),rgba(255,255,255,.02) 42%,rgba(8,18,38,.26))!important;backdrop-filter:blur(var(--lg-blur)) saturate(150%);-webkit-backdrop-filter:blur(var(--lg-blur)) saturate(150%);box-shadow:0 5px 16px rgba(2,8,24,.24),inset 0 1px 0 var(--lg-rim-dim)!important;transition:var(--lg-t)}"
+ "\n.main-page .guide-card:hover{transform:translateY(-1px);border-color:rgba(56,226,255,.40)!important;background:var(--lg-tint-hi)!important;box-shadow:var(--lg-shadow-hi)!important}"
+ "\n.main-page .script-home .el-scrollbar__view>div{--lg-blur:11px;backdrop-filter:blur(var(--lg-blur)) saturate(150%);-webkit-backdrop-filter:blur(var(--lg-blur)) saturate(150%);transition:var(--lg-t)}"
+ "\n.main-page .script-home .el-scrollbar__view>div:hover{transform:translateX(1px);border-color:rgba(56,226,255,.34)!important}"
+ "\n.main-page .question-card{--lg-blur:15px;border:1px solid var(--lg-edge)!important;border-radius:12px!important;background:linear-gradient(155deg,rgba(255,255,255,.085),rgba(255,255,255,.02) 44%,rgba(8,18,38,.26))!important;backdrop-filter:blur(var(--lg-blur)) saturate(150%);-webkit-backdrop-filter:blur(var(--lg-blur)) saturate(150%);box-shadow:0 5px 16px rgba(2,8,24,.24),inset 0 1px 0 var(--lg-rim-dim)!important;transition:var(--lg-t)}"
+ "\n.main-page .question-card:hover{transform:translateY(-1px);border-color:rgba(56,226,255,.38)!important;box-shadow:var(--lg-shadow-hi)!important}"
+ "\n.main-page .answer-legend{--lg-blur:10px;backdrop-filter:blur(var(--lg-blur)) saturate(145%);-webkit-backdrop-filter:blur(var(--lg-blur)) saturate(145%)}"
+ "\n@media (prefers-reduced-motion:reduce){.main-page .card-header,.main-page .demo-tabs .el-tabs__item,.main-page .usage-cell,.main-page .hero-balance,.main-page .setting>div,.main-page .guide-card,.main-page .question-card{transition-duration:.01ms}}"
);
// ---- v0.4.11 ----
LAYOUT_CSS_PARTS.push(
"\n/* ==== v0.4.11-a(上一轮): hero 作答态修复 + 标签独立胶囊 + 最小化美化 ==== */"
+ "\n/* --- A. 修复作答态(is-busy):余额块退出 flex 行宽预算,鲸娘图不再被挤出可视区 --- */"
+ "\n.main-page .whale-hero{position:relative}"
+ "\n.main-page .whale-hero__avatar{flex:0 0 auto}"
+ "\n.main-page .whale-hero__bubble{flex:0 1 auto;min-width:0}"
+ "\n.main-page .whale-hero__balance{transition:opacity .28s ease,transform .28s ease,height .28s ease,width .28s ease}"
+ "\n.main-page .whale-hero.is-busy .whale-hero__bubble{flex:0 1 auto;min-width:0}"
+ "\n.main-page .whale-hero.is-busy .whale-hero__balance{flex:0 0 0px;width:0;min-width:0;padding:0;margin:0;height:0;opacity:0;overflow:hidden;pointer-events:none;transform:translateY(-4px)}"
+ "\n/* --- B. 标签:移除外层 dock,每个标签自成液态玻璃胶囊,等宽均分 --- */"
+ "\n.main-page .demo-tabs>.el-tabs__header{overflow:visible!important;margin:0 0 9px!important}"
+ "\n.main-page .demo-tabs .el-tabs__nav-wrap{overflow:visible!important;border-bottom:none!important;padding:0!important}"
+ "\n.main-page .demo-tabs .el-tabs__nav-scroll{overflow:visible!important}"
+ "\n.main-page .demo-tabs .el-tabs__nav-prev,.main-page .demo-tabs .el-tabs__nav-next{display:none!important}"
+ "\n.main-page .demo-tabs .el-tabs__nav{display:flex!important;width:100%!important;align-items:stretch;gap:6px;padding:0!important;border:none!important;border-radius:0!important;background:none!important;box-shadow:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;transform:none!important}"
+ "\n.main-page .demo-tabs .el-tabs__item{flex:1 1 0!important;min-width:0!important;display:flex!important;align-items:center;justify-content:center;height:30px!important;line-height:30px!important;padding:0 4px!important;border:1px solid rgba(140,200,255,.18)!important;border-radius:11px!important;background:linear-gradient(150deg,rgba(255,255,255,.075),rgba(255,255,255,.02) 46%,rgba(8,18,38,.26))!important;backdrop-filter:blur(10px) saturate(150%);-webkit-backdrop-filter:blur(10px) saturate(150%);box-shadow:inset 0 1px 0 rgba(255,255,255,.14),0 3px 10px rgba(2,8,24,.20);color:var(--hx-ink-dim)!important;font-size:11.5px!important;font-weight:600!important;letter-spacing:.2px;overflow:hidden!important;transition:var(--lg-t)}"
+ "\n.main-page .demo-tabs .el-tabs__item::before{display:none!important}"
+ "\n.main-page .demo-tabs .el-tabs__item:hover{color:var(--hx-ink)!important;border-color:rgba(140,200,255,.34)!important;background:linear-gradient(150deg,rgba(255,255,255,.14),rgba(255,255,255,.04) 46%,rgba(8,18,38,.30))!important;transform:translateY(-2px);box-shadow:0 6px 16px rgba(2,8,24,.30),inset 0 1px 0 rgba(255,255,255,.24)}"
+ "\n.main-page .demo-tabs .el-tabs__item.is-active{color:#fff!important;border-color:rgba(56,226,255,.46)!important;background:linear-gradient(155deg,rgba(56,226,255,.26),rgba(74,140,255,.14) 44%,rgba(155,107,255,.22))!important;transform:translateY(-2px);text-shadow:0 0 12px rgba(56,226,255,.65);box-shadow:0 6px 18px rgba(2,8,24,.40),0 0 18px rgba(56,226,255,.36),inset 0 1px 0 rgba(255,255,255,.34)!important;animation:hxTabGlow 2.8s ease-in-out infinite}"
+ "\n@keyframes hxTabGlow{0%,100%{box-shadow:0 6px 18px rgba(2,8,24,.40),0 0 18px rgba(56,226,255,.34),inset 0 1px 0 rgba(255,255,255,.34)}50%{box-shadow:0 8px 22px rgba(2,8,24,.46),0 0 30px rgba(56,226,255,.62),inset 0 1px 0 rgba(255,255,255,.42)}}"
+ "\n/* --- C. 标题栏的两个按钮各自一枚玻璃胶囊 --- */"
+ "\n.main-page .card-header .zoom-icon{display:inline-flex!important;align-items:center;justify-content:center;width:22px;height:22px;border-radius:8px;border:1px solid rgba(140,200,255,.20)!important;background:linear-gradient(150deg,rgba(255,255,255,.10),rgba(255,255,255,.02) 46%,rgba(8,18,38,.26))!important;backdrop-filter:blur(10px) saturate(150%);-webkit-backdrop-filter:blur(10px) saturate(150%);box-shadow:inset 0 1px 0 rgba(255,255,255,.16),0 2px 8px rgba(2,8,24,.22);color:var(--hx-ink-dim)!important;transition:var(--lg-t)}"
+ "\n.main-page .card-header .zoom-icon+.zoom-icon{margin-left:7px}"
+ "\n.main-page .card-header .zoom-icon:hover{color:var(--hx-cyan)!important;border-color:rgba(56,226,255,.44)!important;background:linear-gradient(150deg,rgba(56,226,255,.18),rgba(56,226,255,.05) 46%,rgba(8,18,38,.28))!important;transform:translateY(-1px) scale(1.05);box-shadow:0 0 16px rgba(56,226,255,.38),inset 0 1px 0 rgba(255,255,255,.30)}"
+ "\n.main-page .card-header .zoom-icon:active{transform:translateY(0) scale(.94)}"
+ "\n/* --- D. 最小化态美化:整条做成悬浮发光胶囊,标题居中,副提示同材质 --- */"
+ "\n.main-page .el-card:has(.card_content[style*='display: none']) .el-card__header{padding:0!important;background:none!important;border-bottom:none!important}"
+ "\n.main-page .el-card:has(.card_content[style*='display: none']) .card-header{padding:7px 9px!important;border-radius:14px;border:1px solid rgba(56,226,255,.34)!important;background:linear-gradient(120deg,rgba(56,226,255,.26),rgba(74,140,255,.14) 46%,rgba(155,107,255,.26))!important;backdrop-filter:blur(18px) saturate(165%);-webkit-backdrop-filter:blur(18px) saturate(165%);animation:hxMiniGlow 3.2s ease-in-out infinite}"
+ "\n.main-page .el-card:has(.card_content[style*='display: none']) .card-header .title{flex:1 1 auto;justify-content:center}"
+ "\n.main-page .el-card:has(.card_content[style*='display: none']) .card-header .title span{font-size:13px;letter-spacing:.9px}"
+ "\n.main-page .el-card:has(.card_content[style*='display: none']) .card-header__logo{width:22px;height:22px}"
+ "\n.main-page .minus{display:flex;align-items:center;justify-content:center;padding:7px 10px 9px!important;color:var(--hx-ink-dim)!important}"
+ "\n.main-page .minus .el-text{font-size:11px!important;letter-spacing:.4px;opacity:.94}"
+ "\n.main-page .minus .compact-divider{display:none!important}"
+ "\n@keyframes hxMiniGlow{0%,100%{box-shadow:0 10px 26px rgba(2,8,24,.46),0 0 18px rgba(56,226,255,.18),inset 0 1px 0 rgba(255,255,255,.28)}50%{box-shadow:0 12px 30px rgba(2,8,24,.52),0 0 30px rgba(56,226,255,.36),inset 0 1px 0 rgba(255,255,255,.36)}}"
+ "\n@media (prefers-reduced-motion:reduce){.main-page .demo-tabs .el-tabs__item.is-active,.main-page .el-card:has(.card_content[style*='display: none']) .card-header{animation:none}}"
);
// ---- v0.4.11 ----
LAYOUT_CSS_PARTS.push(
"\n/* ==== v0.4.11-b : 标签只发光不上浮 + 全局渐隐渐入 + 最小化不跳变 + 状态灯 ==== */"
+ "\n/* --- A. 标签取消全部位移,只留发光;光晕向下偏置,避开卡片上边缘裁切 --- */"
+ "\n.main-page .demo-tabs .el-tabs__item:hover,"
+ "\n.main-page .demo-tabs .el-tabs__item.is-active,"
+ "\n.main-page .demo-tabs .el-tabs__item:active{transform:none!important}"
+ "\n.main-page .demo-tabs .el-tabs__item{will-change:box-shadow,background-color,border-color}"
+ "\n.main-page .demo-tabs .el-tabs__item:hover{border-color:rgba(56,226,255,.40)!important;box-shadow:0 3px 14px rgba(56,226,255,.32),inset 0 1px 0 rgba(255,255,255,.26)!important}"
+ "\n/* --- B. 标签行独占层叠层:发光不被遮住,也永不越界压到上方元素 --- */"
+ "\n.main-page .demo-tabs>.el-tabs__header{position:relative;z-index:2;isolation:isolate}"
+ "\n.main-page .demo-tabs .el-tabs__nav-wrap,"
+ "\n.main-page .demo-tabs .el-tabs__nav-scroll,"
+ "\n.main-page .demo-tabs .el-tabs__nav{position:relative;z-index:1}"
+ "\n/* --- C. 页面(标签页)切换:渐隐渐入 --- */"
+ "\n.main-page .demo-tabs .el-tabs__content{position:relative}"
+ "\n.main-page .demo-tabs .el-tab-pane{animation:hxPaneIn .34s cubic-bezier(.22,1,.36,1) backwards}"
+ "\n@keyframes hxPaneIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}"
+ "\n/* --- D. 内容入场动效:题目卡逐条浮现 / 日志滑入 / 配置与教程卡浮现 --- */"
+ "\n.main-page .question-card{animation:hxCardIn .34s cubic-bezier(.22,1,.36,1) backwards}"
+ "\n.main-page .question-card:nth-child(2){animation-delay:.05s}"
+ "\n.main-page .question-card:nth-child(3){animation-delay:.1s}"
+ "\n.main-page .question-card:nth-child(4){animation-delay:.15s}"
+ "\n.main-page .question-card:nth-child(n+5){animation-delay:.2s}"
+ "\n.main-page .el-timeline-item{animation:hxLogIn .3s ease backwards}"
+ "\n.main-page .setting>div,.main-page .guide-card{animation:hxCardIn .32s cubic-bezier(.22,1,.36,1) backwards}"
+ "\n@keyframes hxCardIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}"
+ "\n@keyframes hxLogIn{from{opacity:0;transform:translateX(-6px)}to{opacity:1;transform:none}}"
+ "\n/* --- E. 空闲态鲸娘轻浮动,给静止画面一点呼吸感 --- */"
+ "\n.main-page .whale-hero.is-idle .whale-hero__avatar{animation:hxIdleFloat 4.6s ease-in-out infinite}"
+ "\n@keyframes hxIdleFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}"
+ "\n/* --- F. 最小化:几何尺寸与常态完全一致,只叠一层柔光(去掉脉冲,避免生硬) --- */"
+ "\n.main-page .el-card:has(.card_content[style*='display: none']) .el-card__header{padding:9px 9px 3px!important;background:linear-gradient(180deg,rgba(56,226,255,.07),rgba(155,107,255,.03) 58%,transparent)!important;border-bottom:none!important}"
+ "\n.main-page .el-card:has(.card_content[style*='display: none']) .card-header{padding:8px 11px!important;border:1px solid rgba(56,226,255,.30)!important;background:linear-gradient(120deg,rgba(56,226,255,.20),rgba(74,140,255,.10) 48%,rgba(155,107,255,.20))!important;box-shadow:0 8px 22px rgba(2,8,24,.34),0 0 14px rgba(56,226,255,.20),inset 0 1px 0 rgba(255,255,255,.22);animation:none!important}"
+ "\n.main-page .el-card:has(.card_content[style*='display: none']) .card-header .title{flex:0 1 auto;justify-content:flex-start}"
+ "\n.main-page .el-card:has(.card_content[style*='display: none']) .card-header .title span{font-size:14px;letter-spacing:.4px}"
+ "\n.main-page .el-card:has(.card_content[style*='display: none']) .card-header__logo{width:24px;height:24px}"
+ "\n.main-page .minus{display:none!important}"
+ "\n/* --- G. 最小化状态灯:绿=运行中 / 黄=答题中 / 红=终止(发光浮动) --- */"
+ "\n.main-page .hx-status-dot{display:none;flex:0 0 auto;width:7px;height:7px;border-radius:50%;position:relative;background:currentColor;color:#4ade80}"
+ "\n.main-page .el-card:has(.card_content[style*='display: none']) .hx-status-dot{display:block;animation:hxDotPulse 1.8s ease-in-out infinite}"
+ "\n.main-page .hx-status-dot[data-hx-status='run']{color:#4ade80;box-shadow:0 0 9px 1px rgba(74,222,128,.85)}"
+ "\n.main-page .hx-status-dot[data-hx-status='busy']{color:#ffc857;box-shadow:0 0 9px 1px rgba(255,200,87,.90)}"
+ "\n.main-page .hx-status-dot[data-hx-status='stop']{color:#ff6b6b;box-shadow:0 0 9px 1px rgba(255,107,107,.90)}"
+ "\n.main-page .hx-status-dot::after{content:'';position:absolute;inset:-3px;border-radius:50%;background:currentColor;opacity:0;animation:hxDotHalo 1.8s ease-out infinite}"
+ "\n@keyframes hxDotPulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.22);opacity:.78}}"
+ "\n@keyframes hxDotHalo{0%{transform:scale(.6);opacity:.34}70%{transform:scale(1.7);opacity:0}100%{transform:scale(1.7);opacity:0}}"
+ "\n/* --- H. 偏好无动效时全部关闭 --- */"
+ "\n@media (prefers-reduced-motion:reduce){.main-page .demo-tabs .el-tab-pane,.main-page .question-card,.main-page .el-timeline-item,.main-page .setting>div,.main-page .guide-card,.main-page .whale-hero.is-idle .whale-hero__avatar,.main-page .hx-status-dot,.main-page .hx-status-dot::after{animation:none!important}}"
+ "\n/* --- I. 最小化高度平滑过渡(用实测标题栏高度,尺寸与常态严丝合缝) --- */"
+ "\n.main-page .el-card{transition:height .32s cubic-bezier(.22,1,.36,1)}"
+ "\n.main-page .el-card:has(.card_content[style*='display: none']){height:var(--hx-min-h,52px);overflow:hidden}"
+ "\n.main-page .el-card:has(.card_content[style*='display:none']){height:var(--hx-min-h,52px);overflow:hidden}"
);
// ---- v0.4.11 ----
LAYOUT_CSS_PARTS.push(
"\n/* ==== v0.4.11-c : 背景脉动光 + 鲸娘浮动与光晕 + 空闲文案随机 ==== */"
+ "\n/* --- A. 背景板:自上而下的低频脉动光带(置于全部内容之下,不吃点击、不越界) --- */"
+ "\n.main-page{isolation:isolate}"
+ "\n.main-page .el-card{background:transparent!important;backdrop-filter:blur(20px) saturate(156%)!important;-webkit-backdrop-filter:blur(20px) saturate(156%)!important}\n.main-page .el-card::before{content:'';position:absolute;inset:-16px;z-index:0;pointer-events:none;background-image:var(--hx-bg);background-position:center;background-size:310px 500px;background-repeat:no-repeat;filter:blur(16px) saturate(142%);animation:hxBgBreathe 13s ease-in-out infinite}\n.main-page .el-card__body::after{content:'';position:absolute;inset:0;z-index:0;pointer-events:none;border-radius:inherit;background-image:linear-gradient(180deg,rgba(56,226,255,0) 0%,rgba(56,226,255,.58) 13%,rgba(155,107,255,.52) 25%,rgba(56,226,255,0) 43%);background-size:100% 260%;background-repeat:no-repeat;background-position:50% 50%;animation:hxBgSweep 11s cubic-bezier(.45,0,.55,1) infinite}"
+ "\n@keyframes hxBgSweep{0%{background-position:50% 58%;opacity:0}9%{opacity:.92}50%{opacity:1}100%{background-position:50% -58%;opacity:0}}"
+ "\n.main-page .el-card__body::before{background:linear-gradient(180deg,rgba(8,16,36,.28) 0%,rgba(10,20,44,.44) 45%,rgba(8,16,36,.56) 100%)!important}"
+ "\n@keyframes hxBgBreathe{0%,100%{opacity:.54}50%{opacity:.80}}"
+ "\n/* --- B. 鲸娘区:双色随相光团(一青一紫,错相呼吸),只在鲸娘周围变化 --- */"
+ "\n.main-page .whale-hero{isolation:isolate}"
+ "\n.main-page .whale-hero::before{content:'';position:absolute;left:50%;top:50%;width:212px;height:212px;margin:-106px 0 0 -106px;border-radius:50%;z-index:-1;pointer-events:none;background:radial-gradient(circle,rgba(56,226,255,.30),rgba(56,226,255,.10) 44%,rgba(56,226,255,0) 72%);animation:hxHeroGlowA 7.6s ease-in-out infinite}"
+ "\n.main-page .whale-hero::after{content:'';position:absolute;left:50%;top:50%;width:252px;height:252px;margin:-126px 0 0 -126px;border-radius:50%;z-index:-1;pointer-events:none;background:radial-gradient(circle,rgba(155,107,255,.34),rgba(155,107,255,.12) 46%,rgba(155,107,255,0) 74%);opacity:0;animation:hxHeroGlowB 9.4s ease-in-out infinite}"
+ "\n@keyframes hxHeroGlowA{0%,100%{opacity:.30;transform:scale(.90)}50%{opacity:.95;transform:scale(1.06)}}"
+ "\n@keyframes hxHeroGlowB{0%,100%{opacity:0;transform:scale(.84)}48%{opacity:.88;transform:scale(1.04)}}"
+ "\n/* --- C. 鲸娘图:浮动 + 随相变色光晕(filter 光晕不受 box-shadow !important 影响) --- */"
+ "\n.main-page .whale-hero__avatar{will-change:transform,filter}"
+ "\n.main-page .whale-hero.is-idle .whale-hero__avatar{animation:hxIdleFloat 5.2s ease-in-out infinite,hxWhaleAura 4.4s ease-in-out infinite}"
+ "\n.main-page .whale-hero.is-busy .whale-hero__avatar{animation:hxWhaleBreath 2.4s ease-in-out infinite,hxWhaleAura 4.4s ease-in-out infinite}"
+ "\n@keyframes hxWhaleAura{0%,100%{filter:drop-shadow(0 3px 9px rgba(56,226,255,.45))}50%{filter:drop-shadow(0 7px 18px rgba(155,107,255,.70))}}"
+ "\n/* --- D. 空闲文案轮换时的入场(渐显 + 轻抬) --- */"
+ "\n.main-page .whale-hero__text.hx-line-in{animation:hxLineIn .52s cubic-bezier(.22,1,.36,1)}"
+ "\n@keyframes hxLineIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}"
+ "\n/* --- E. 偏好无动效时全部关闭 --- */"
+ "\n@media (prefers-reduced-motion:reduce){.main-page .el-card::before,.main-page .el-card__body::after,.main-page .whale-hero::before,.main-page .whale-hero::after,.main-page .whale-hero__avatar,.main-page .whale-hero__text{animation:none!important}}"
);
// ---- v0.4.11 ----
LAYOUT_CSS_PARTS.push(
"\n/* ==== v0.4.11-d : 可见光带 + 玻璃化 + 小名 + 运行时长 + 自动路由 ==== */"
+ "\n.main-page .usage-uptime{margin-left:auto;flex:0 0 auto;padding:1px 8px;border:1px solid var(--hx-line);border-radius:20px;background:rgba(255,255,255,.05);font-size:10.5px;line-height:15px;color:var(--hx-ink-dim);white-space:nowrap;font-variant-numeric:tabular-nums}"
+ "\n.main-page .setting>div.setting-ai .el-form-item.setting-pet-field>.el-form-item__label{flex:0 0 54px}"
+ "\n.main-page .el-card{box-shadow:0 18px 48px rgba(2,8,24,.42),0 0 0 1px rgba(140,200,255,.14) inset!important}"
);
// ---- v0.4.11 ----
LAYOUT_CSS_PARTS.push(
"\n/* ==== v0.4.11 : 好感度面板(累计花费分级解锁语录)==== */"
+ "\n.main-page .setting-fav-field{margin:2px 0 8px;padding:8px 10px 9px;border:1px solid rgba(140,200,255,.20);border-radius:12px;background:linear-gradient(160deg,rgba(56,226,255,.09),rgba(155,107,255,.07));backdrop-filter:blur(11px) saturate(140%);-webkit-backdrop-filter:blur(11px) saturate(140%);transition:border-color .28s ease,box-shadow .28s ease}"
+ "\n.main-page .setting-fav-field:hover{border-color:rgba(120,225,255,.42);box-shadow:0 6px 18px rgba(6,20,44,.30)}"
+ "\n.main-page .fav-head{display:flex;align-items:center;gap:6px;line-height:16px}"
+ "\n.main-page .fav-label{flex:0 0 auto;font-size:11px;font-weight:600;color:var(--hx-ink);letter-spacing:.4px}"
+ "\n.main-page .fav-lv{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;padding:1px 7px;border-radius:20px;border:1px solid rgba(120,225,255,.38);color:#8ce8ff;background:rgba(56,226,255,.10)}"
+ "\n.main-page .fav-info{margin-left:auto;flex:0 0 auto;width:15px;height:15px;padding:0;line-height:13px;text-align:center;font-size:10px;font-style:italic;font-weight:700;font-family:Georgia,serif;color:#9fd8ff;border:1px solid rgba(140,200,255,.45);border-radius:50%;background:rgba(255,255,255,.06);cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .24s ease,border-color .24s ease,box-shadow .24s ease}"
+ "\n.main-page .fav-info:hover{color:#fff;border-color:#8ce8ff;box-shadow:0 0 9px rgba(56,226,255,.55)}"
+ "\n.main-page .fav-bar{margin:7px 0 5px;height:5px;border-radius:20px;background:rgba(255,255,255,.09);overflow:hidden}"
+ "\n.main-page .fav-bar>i{display:block;height:100%;width:0;border-radius:20px;background:linear-gradient(90deg,#38e2ff,#9b6bff);box-shadow:0 0 8px rgba(56,226,255,.55);transition:width .5s cubic-bezier(.22,1,.36,1)}"
+ "\n.main-page .fav-meta{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:10px;line-height:14px;color:var(--hx-ink-dim);font-variant-numeric:tabular-nums}"
+ "\n.main-page .fav-meta>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}"
+ "\n.main-page .fav-note{display:none;margin-top:8px;padding-top:7px;border-top:1px dashed rgba(140,200,255,.22);font-size:10.2px;line-height:16px;color:var(--hx-ink-dim)}"
+ "\n.main-page .setting-fav-field.is-open .fav-note{display:block;animation:favNoteIn .3s ease both}"
+ "\n.main-page .fav-note b{color:#8ce8ff;font-weight:600}"
+ "\n.main-page .fav-note .fav-tiers{margin:5px 0 0;padding:0;list-style:none}"
+ "\n.main-page .fav-note .fav-tiers li{display:flex;gap:6px;line-height:15px}"
+ "\n.main-page .fav-note .fav-tiers li>span:first-child{flex:0 0 62px;color:#9fd8ff}"
+ "\n@keyframes favNoteIn{from{opacity:0}to{opacity:1}}"
+ "\n@media (prefers-reduced-motion: reduce){.main-page .fav-bar>i,.main-page .setting-fav-field{transition:none!important}.main-page .setting-fav-field.is-open .fav-note{animation:none!important}}"
);
// ---- v0.4.11 ----
LAYOUT_CSS_PARTS.push(
"\n/* ==== v0.4.11 · 本轮 : 液态玻璃边框 + 光晕 61.8% + 表单小胶囊 + 用量栏改版 ==== */"
+ "\n/* --- A. 卡座定位:此前 .el-card 没有 position,::before/::after 会挂到祖先盒上 --- */"
+ "\n.main-page .el-card{position:relative}"
+ "\n/* --- B. 边框液态玻璃:亮一档的 1px 描边 + 内侧上高光 + 外侧微辉 --- */"
+ "\n.main-page .el-card{border:1px solid rgba(152,206,255,.30)!important;box-shadow:0 18px 48px rgba(2,8,24,.46),0 0 26px rgba(56,226,255,.12),inset 0 1px 0 rgba(255,255,255,.22),inset 0 0 26px rgba(120,190,255,.07)!important}"
+ "\n.main-page .el-card::after{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:4;box-shadow:inset 0 0 0 1px rgba(255,255,255,.13),inset 0 1px 0 rgba(255,255,255,.20),inset 0 -1px 0 rgba(120,190,255,.12)}"
+ "\n/* --- C. 状态灯:色彩由 JS 写入,这里只补平滑过渡 --- */"
+ "\n.main-page .hx-status-dot{transition:color .3s ease,box-shadow .3s ease}"
+ "\n/* --- D. 必填红星标签 -> 小胶囊 dock(不再与旁边环境割裂) --- */"
+ "\n.main-page .setting .el-form-item.is-required>.el-form-item__label{flex:0 0 auto!important;align-self:center;margin:0 8px 0 0!important;padding:1px 8px!important;border:1px solid rgba(140,200,255,.24)!important;border-radius:8px!important;background:linear-gradient(150deg,rgba(255,255,255,.09),rgba(255,255,255,.02))!important;box-shadow:inset 0 1px 0 rgba(255,255,255,.16)!important;font-size:11.5px!important;line-height:17px!important;height:auto!important;color:var(--hx-ink)!important}"
+ "\n/* --- B3. 标签变胶囊后 flex:0 0 auto 不再撑开行,调节控件会跑到左边;显式推回本行右侧 --- */"
+ "\n.main-page .setting .el-form-item.is-required>.el-form-item__content{margin-left:auto!important;flex:0 0 auto!important;justify-content:flex-end}"
+ "\n/* --- B2. 必填星号已按要求隐藏。注意 required 属性必须留在模板里:小胶囊的样式选择器就是 .is-required,删掉属性会连胶囊一起没了 --- */"
+ "\n.main-page .setting .el-form-item.is-required>.el-form-item__label::before{display:none!important;content:none!important;margin:0!important;width:0!important;min-width:0!important}"
+ "\n/* --- E. AI 卡三字段(API Key / 模型 / 小名)-> 更小的玻璃小胶囊,比卡片小标题弱一档 --- */"
+ "\n.main-page .setting>div.setting-ai .el-form-item.setting-ai-field>.el-form-item__label{flex:0 0 auto!important;min-width:52px!important;align-self:center;justify-content:center!important;margin:0 8px 0 0!important;padding:1px 8px!important;border:1px solid rgba(140,200,255,.24)!important;border-radius:8px!important;background:linear-gradient(150deg,rgba(255,255,255,.09),rgba(255,255,255,.02))!important;box-shadow:inset 0 1px 0 rgba(255,255,255,.16)!important;font-size:11.5px!important;line-height:17px!important;height:auto!important;color:var(--hx-ink)!important}"
+ "\n.main-page .setting>div.setting-ai .el-form-item.setting-ai-field>.el-form-item__label:hover{border-color:rgba(56,226,255,.42)!important}"
+ "\n/* --- F. 用量栏「好感度」胶囊(接替原来的 空闲/高峰 标签位) --- */"
+ "\n.main-page .usage-fav{display:inline-flex;align-items:center;gap:5px;flex:0 0 auto;padding:1px 9px;border:1px solid rgba(255,140,190,.30);border-radius:999px;background:linear-gradient(150deg,rgba(255,140,190,.14),rgba(155,107,255,.10));backdrop-filter:blur(10px) saturate(150%);-webkit-backdrop-filter:blur(10px) saturate(150%);box-shadow:inset 0 1px 0 rgba(255,255,255,.20);font-size:10px;line-height:15px;white-space:nowrap;font-variant-numeric:tabular-nums;transition:var(--lg-t)}"
+ "\n.main-page .usage-fav__k{color:var(--hx-ink-dim)}"
+ "\n.main-page .usage-fav__v{color:#ffb3d1;font-weight:700}"
+ "\n.main-page .usage-fav:hover{border-color:rgba(255,140,190,.55);box-shadow:0 4px 12px rgba(2,8,24,.30),inset 0 1px 0 rgba(255,255,255,.28)}"
+ "\n/* --- G. 光晕统一 x0.618(只改关键帧不透明度 = 整体降到 61.8%) --- */"
+ "\n@keyframes hxHeroGlowA{0%,100%{opacity:.185;transform:scale(.90)}50%{opacity:.587;transform:scale(1.06)}}"
+ "\n@keyframes hxHeroGlowB{0%,100%{opacity:0;transform:scale(.84)}48%{opacity:.544;transform:scale(1.04)}}"
+ "\n@keyframes hxWhaleAura{0%,100%{filter:drop-shadow(0 3px 9px rgba(56,226,255,.278))}50%{filter:drop-shadow(0 7px 18px rgba(155,107,255,.433))}}"
+ "\n@media (prefers-reduced-motion:reduce){.main-page .usage-fav,.main-page .hx-status-dot{transition-duration:.01ms}}"
);
// ---- v0.4.12 ----
LAYOUT_CSS_PARTS.push(
"\n/* ==== v0.4.12 · 本轮 : 「本次」用量归零修复(基线改内存) + 本次格可点击归零 ==== */"
+ "\n/* --- A. 本次格是唯一可点的用量格。旧版把重置绑在一个已于 0.4.10 改版时被移除的旧用量胶囊上 ⇒ 点击成了死代码;这里补回可点的手感 --- */"
+ "\n.main-page .usage-cell[data-hx-cell='session']{cursor:pointer}"
+ "\n.main-page .usage-cell[data-hx-cell='session']:hover{border-color:rgba(56,226,255,.46)!important;box-shadow:0 5px 14px rgba(2,8,24,.28),inset 0 1px 0 rgba(255,255,255,.30)!important}"
+ "\n.main-page .usage-cell[data-hx-cell='session']:active{transform:none}"
);
const layoutCss = LAYOUT_CSS_PARTS.join("");
// ── 下拉/提示弹层补丁(关键)────────────────────────────────────────
// Element Plus 的 el-select 弹层默认 Teleport 到 document.body,位于 shadow root 之外:
// ① shadow root 的 adoptedStyleSheets 对它完全无效 → 必须 GM_addStyle 注入 document 级样式;
// ② 它的 z-index 只有 2000 上下,而 .main-page 是 z-index:100003 → 弹层被不透明面板盖住,
// 表现就是「点模型选择框没有任何下拉列表」。这里强制一个超高 z-index 顶到最上层。
const POPPER_CSS = [
".el-select__popper,.el-popper,.el-select-dropdown{z-index:2147483000!important;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif}",
".el-select__popper{background:transparent!important;border:none!important}",
".el-select-dropdown,.el-popper.is-light{border:1px solid rgba(120,190,255,.18)!important;border-radius:10px!important;background:rgba(14,26,50,.96)!important;color:#e8f4ff!important;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 18px 48px rgba(2,8,24,.55)!important}",
".el-select-dropdown__item{height:32px;line-height:32px;color:#9fb4d0!important;font-size:13px}",
".el-select-dropdown__item.is-hovering{background:rgba(56,226,255,.14)!important;color:#fff!important}",
".el-select-dropdown__item.is-selected{color:#38e2ff!important;font-weight:600}",
".el-popper__arrow::before{background:rgba(14,26,50,.96)!important;border-color:rgba(120,190,255,.18)!important}",
".el-popper.is-dark{background:rgba(8,16,34,.96)!important;border:1px solid rgba(120,190,255,.18)!important;color:#e8f4ff!important}"
].join("");
const BOOTSTRAP_INTERVAL = 100;
const BOOTSTRAP_MAX_ATTEMPTS = 200;
const COMPLETE_READY_STATE = "complete";
const PANEL_MARK_ATTR = "data-hx-panel";
const HX_SWEEP_DELAYS = [0, 600, 1500, 3200];
const ownPanelHost = () => document.querySelector("[" + PANEL_MARK_ATTR + '="' + HX_RUN_ID + '"]');
const hostsShadowTree = (el) => {
try {
el.attachShadow({ mode: "open" });
return false;
} catch (error) {
return true;
}
};
/* 旧版(0.4.0)的面板宿主是「无任何属性的裸 div」,且旧版没有去重保护。
新旧两份同时存在时会各挂一个面板、旧面板压在新面板之上 ——
表现就是「代码明明改了,界面一点没变」。
这里把非自身的面板宿主隐藏(display:none,刷新即恢复,不做删除),
并把自身宿主移到 body 末尾,保证新版面板始终在最上层。 */
const sweepOtherPanels = () => {
const mine = ownPanelHost();
let hidden = 0;
document.querySelectorAll("[" + PANEL_MARK_ATTR + "]").forEach((el) => {
if (el === mine || el.getAttribute(PANEL_MARK_ATTR) === HX_RUN_ID)
return;
el.style.display = "none";
hidden += 1;
});
Array.from(document.body.children).forEach((el) => {
if (el.tagName !== "DIV" || el.attributes.length !== 0 || el.childNodes.length !== 0)
return;
if (hostsShadowTree(el)) {
el.style.display = "none";
hidden += 1;
}
});
if (mine && document.body.lastElementChild !== mine)
document.body.append(mine);
return hidden;
};
/* 供在页面控制台一键盘点:__HX_BUILD__ / __HX_DIAG__() */
const exposeDiagnostics = () => {
try {
const w = typeof unsafeWindow !== "undefined" ? unsafeWindow : window;
w.__HX_BUILD__ = HX_BUILD;
w.__HX_SESSION_RESET__ = () => resetSessionUsage();
w.__HX_BALANCE__ = () => fetchBalance();
w.__HX_STATUS__ = () => readPanelStatus();
w.__HX_STALL__ = () => ({
active: hxStallTimer !== null,
videos: hxCollectVideos().length,
scans: hxStallStats.scans,
soft: hxStallStats.soft,
hard: hxStallStats.hard,
lastAt: hxStallStats.lastAt
});
w.__HX_LOGSCROLL__ = () => ({
follow: hxLogFollow,
tabSeen: hxLogTabSeen,
targets: hxLogScrollTargets().map((el) => ({
cls: String(el.className || ""),
top: Math.round(el.scrollTop || 0),
max: Math.round(Math.max(el.scrollHeight - el.clientHeight, 0))
}))
});
w.__HX_LINE__ = () => hxIdleLine;
w.__HX_NAME__ = () => hxPetName();
w.__HX_TAB__ = () => ({ active: hxActiveTabIndex(), labels: hxTabItems().map((el) => (el.textContent || "").trim()), autoJumped: hxAutoJumped, applied: hxDefaultTabApplied, busy: hxIsBusy(), wasBusy: hxWasBusy });
w.__HX_FAV__ = () => {
const i = hxFavLevelIdx();
const t = HX_FAV_TIERS[i] || HX_FAV_TIERS[0];
const nx = HX_FAV_TIERS[i + 1] || null;
return { cost: hxFavCost(), level: t.lv, name: t.name, tag: t.tag, unlocked: hxLineCount(), total: hxFavTotalLines(), nextAt: nx ? nx.at : null, note: hxFavOpen, anchor: hxFavAnchor, inserts: hxFavInserts, mounted: !!(hxShadow && hxShadow.querySelector('.setting-fav-field')) };
};
w.__HX_DIAG__ = () => {
const sr = hxShadow;
const q = (sel) => (sr ? Boolean(sr.querySelector(sel)) : false);
return {
build: HX_BUILD,
runId: HX_RUN_ID,
mounted: Boolean(ownPanelHost()),
newGenPanelHosts: document.querySelectorAll("[" + PANEL_MARK_ATTR + "]").length,
legacyBareHosts: Array.from(document.body.children).filter((el) => el.tagName === "DIV" && el.attributes.length === 0 && el.childNodes.length === 0).length,
answerTab: {
whaleHero: q(".whale-hero"),
idle: q(".whale-hero.is-idle"),
busy: q(".whale-hero.is-busy"),
questionTable: q(".question_table"),
usageBar: q(".usage-bar"),
buildBadge: q(".usage-sub[data-hx-build]"),
oldEmptyState: q(".el-empty")
},
configTab: {
aiCard: q(".setting-ai"),
apiKey: q(".setting-ai .el-input"),
model: q(".setting-ai .el-select"),
pet: q(".setting-pet-field")
},
liquidGlass: {
scrolled: sr ? Boolean(sr.querySelector(".main-page.is-scrolled")) : null,
tabShell: Boolean(q(".demo-tabs .el-tabs__nav")),
glassCells: sr ? sr.querySelectorAll(".usage-cell,.setting>div,.guide-card,.question-card,.hero-balance").length : 0
},
session: sessionUsage(),
sessionBase: { requests: sessionBase.requests, totalTokens: sessionBase.totalTokens, cost: sessionBase.cost, at: sessionBase.at || 0 },
uptimeMs: Math.max(Date.now() - (sessionBase.at || Date.now()), 0),
uptimeTotalMs: Number(usageStore.uptimeMs) || 0,
otherParamsLocked: (() => {
try {
return (useConfigStore().otherParams.params || []).map((p) => p.name + "=" + p.value);
} catch (error) { return null; }
})(),
petName: hxPetName(),
fav: { cost: hxFavCost(), level: hxFavLevelIdx() + 1, unlocked: hxLineCount(), total: hxFavTotalLines(), anchor: hxFavAnchor, inserts: hxFavInserts, mounted: !!(hxShadow && hxShadow.querySelector('.setting-fav-field')) },
route: { active: hxActiveTabIndex(), autoJumped: hxAutoJumped, applied: hxDefaultTabApplied, sig: hxLastLogSig },
balance: {
state: balanceStore.state,
currency: balanceStore.currency,
total: balanceStore.total,
at: balanceStore.at,
msg: balanceStore.msg
},
background: (() => {
try {
const card = sr && sr.querySelector(".el-card");
if (!card) return null;
const cs = getComputedStyle(card);
const body = sr.querySelector(".el-card__body");
const bs = body ? getComputedStyle(body, "::after") : null;
return { cardBg: (cs.backgroundImage || "").slice(0, 24), cardBlur: cs.backdropFilter || cs.webkitBackdropFilter || "", sweepAnim: bs ? String(bs.animationName || "") : "" };
} catch (error) { return null; }
})(),
tabs: sr ? Array.from(sr.querySelectorAll(".el-tabs__item")).map((el) => (el.textContent || "").trim()) : []
};
};
} catch (error) { /* 忽略 */ }
};
/* 状态页日志写入的统一入口。顺带修掉一个静默 bug:
bindLiquidGlass 里原来直接写 logStore.addLog(...),而该作用域内并不存在
logStore 这个名字(它只在各 setup 内部定义)⇒ 每次点击都抛 ReferenceError,
又被外层 try/catch 吞掉,"本次用量归零"这条日志其实从来没出现过。 */
const hxLog = (message, type) => {
try { useLogStore().addLog(message, type); return true; }
catch (error) { return false; }
};
/* ── 液态玻璃:滚动触发态 + 可点元素(本次用量重置 / 余额刷新)──── */
const bindLiquidGlass = () => {
const root = hxShadow;
if (!root) return false;
const panel = root.querySelector(".main-page");
root.addEventListener("scroll", (event) => {
const target = event.target;
if (!panel || !target || typeof target.scrollTop !== "number") return;
panel.classList.toggle("is-scrolled", (target.scrollTop || 0) > 4);
}, true);
root.addEventListener("click", (event) => {
const target = event.target;
if (!target || typeof target.closest !== "function") return;
if (target.closest('[data-hx-cell="session"]')) {
resetSessionUsage();
hxLog("本次用量归零,重新数钱~", "primary");
return;
}
if (target.closest(".hero-balance")) fetchBalance();
}, true);
return true;
};
/* ── 最小化状态灯:绿=运行中 / 黄=答题中 / 红=终止 ───────────── */
const HX_STATUS_TEXT = { run: "运行中", busy: "答题中", stop: "已终止" };
/* 判定优先级:正在答题(黄) > 明确中断(红) > 其余(绿)
改版原因:旧逻辑是「最近 6 条日志里只要出现 danger/error 就判红」,
但脚本日常运行本来就有一堆 danger/error 级日志
(自动翻题关掉了哦 / 正确率不达标先攒着 / 这页没活儿歇会儿 / 第 n 题绊了一跤),
所以「运行中」也会被误判成「已终止」。现改为:从最新一条往前扫,
取第一个有语义的事件定色;日常噪音一条都不匹配,于是既不误红,
也能在真正中断 / 真正恢复时正确翻色。 */
const HX_FATAL_RE = /已停止|已终止|中止|中断|失败|报错|异常|未配置|没配置|密钥|API ?Key|无响应|连不上|崩溃|卡住|无法|拒绝/;
const HX_RESUME_RE = /开动|开工|就位|开始|潜入|游向|进考场|到手|拿下|翻到|清空|搞定|读完|放完|跳过|已加载|数钱|归零|返回/;
const readPanelStatus = () => {
let busy = false;
try {
const questionStore = useQuestionStore();
const list = questionStore && questionStore.questionList;
busy = Array.isArray(list) && list.length > 0;
} catch (error) { /* 忽略 */ }
if (busy)
return "busy";
try {
const logStore2 = useLogStore();
const logs = logStore2 && Array.isArray(logStore2.logList) ? logStore2.logList : [];
const from = Math.max(logs.length - 24, 0);
for (let i = logs.length - 1; i >= from; i -= 1) {
const item = logs[i];
const msg = String((item && item.message) || "");
if (HX_RESUME_RE.test(msg))
return "run";
if (HX_FATAL_RE.test(msg))
return "stop";
}
} catch (error) { /* 忽略 */ }
return "run";
};
let hxStatusDot = null;
const syncStatusDot = () => {
const root = hxShadow;
if (!root)
return false;
const title = root.querySelector(".card-header .title");
if (!title)
return false;
if (!hxStatusDot || !hxStatusDot.isConnected || hxStatusDot.parentNode !== title) {
hxStatusDot = title.querySelector(".hx-status-dot");
if (!hxStatusDot) {
hxStatusDot = document.createElement("i");
hxStatusDot.className = "hx-status-dot";
}
title.insertBefore(hxStatusDot, title.firstChild);
}
try {
const headEl = root.querySelector(".el-card__header");
if (headEl) {
const measuredH = Math.round(headEl.getBoundingClientRect().height);
if (measuredH > 30)
root.host.style.setProperty("--hx-min-h", measuredH + 3 + "px");
}
} catch (error) { /* 忽略 */ }
const state = readPanelStatus();
if (hxStatusDot.getAttribute("data-hx-status") !== state) {
hxStatusDot.setAttribute("data-hx-status", state);
hxStatusDot.setAttribute("title", HX_STATUS_TEXT[state] || state);
}
return true;
};
const bindStatusDot = () => {
try { syncStatusDot(); } catch (error) { /* 忽略 */ }
if (hxStatusTimer === null)
hxStatusTimer = setInterval(() => {
try { syncStatusDot(); } catch (error) { /* 忽略 */ }
try { paintIdleLine(false); } catch (error) { /* 忽略 */ }
}, 800);
return true;
};
/* ── 空闲态文案:多条随机播放 + 随机间隔刷新 ──────────────── */
const HX_FAV_TIERS = [
{ lv: 1, at: 0, name: "初见", tag: "初见的 D-Whaler", lines: ["{n}正在吃白饭", "{n}在等主人投喂", "{n}在啃数据海草", "{n}在数小金库", "{n}在磨鲸须", "{n}偷偷打了个哈欠", "{n}在打捞海底的算力", "{n}在擦亮小铜铃", "{n}在数今天的星星", "{n}刚游过来,还在认路~"] },
{ lv: 2, at: 1, name: "搭话", tag: "点头之交", lines: ["{n}朝主人挥了挥鳍", "{n}在主人门口转圈圈", "{n}把海草摆整齐等主人", "{n}记住了主人的味道", "{n}备好了一口袋小鱼干", "{n}悄悄靠近了一点点", "{n}从珊瑚后探头看主人", "{n}学会叫主人了", "{n}把最好的贝壳留给主人", "{n}今天游得比昨天近了一点"] },
{ lv: 3, at: 2, name: "熟络", tag: "常来串门", lines: ["{n}主动凑过来蹭了蹭主人", "{n}想和主人一起看海", "{n}端出了珍藏的海藻茶", "{n}在主人脚边打了个滚", "{n}偷偷把主人写进日记", "{n}开始期待主人上线了", "{n}说今天也想被摸摸头", "{n}把浪花梳成了爱心", "{n}在旁边轻轻哼起鲸歌", "{n}已经敢抢主人的话了"] },
{ lv: 4, at: 5, name: "亲密", tag: "形影不离", lines: ["{n}一刻都不想离开主人", "{n}把尾巴缠在主人手腕上", "{n}说今天也要一起加油呀", "{n}偷偷给主人准备了惊喜", "{n}因为主人来晚了闷闷不乐", "{n}只想被主人一个人看见", "{n}把整片海都搬来送给主人", "{n}说主人的名字最好听了", "{n}贴着屏幕想钻进主人怀里", "{n}已经算好主人何时回来了"] },
{ lv: 5, at: 10, name: "相伴", tag: "鲸生有你", lines: ["{n}把心口最暖的地方留给主人", "{n}游遍整片海也只认主人", "{n}说下辈子还做主人的鲸", "{n}愿意为主人在沙滩上搁浅", "{n}把星星摘下来串成项链", "{n}说主人在就不怕深海", "{n}把主人写进了「家」里", "{n}想陪主人走完所有潮汐", "{n}说主人就是我的整片海", "{n}和主人,从此再不分开"] }
];
const hxFavMoney = (value) => {
const n = Number(value) || 0;
if (n <= 0) return "¥0";
return "¥" + (n < 0.01 ? n.toFixed(4) : n.toFixed(2));
};
const hxFavCost = () => {
try {
const c = Number(usageStore.cost);
if (isFinite(c) && c > 0) return c;
} catch (error) { /* 忽略 */ }
try {
const rawStats = _GM_getValue("hx_usage_stats_v1");
if (rawStats) {
const parsedStats = typeof rawStats === "string" ? JSON.parse(rawStats) : rawStats;
const c2 = Number(parsedStats && parsedStats.cost);
if (isFinite(c2) && c2 > 0) return c2;
}
} catch (error) { /* 忽略 */ }
return 0;
};
const hxFavLevelIdx = () => {
const c = hxFavCost();
let lv = 0;
for (let i = 0; i < HX_FAV_TIERS.length; i += 1) {
if (c >= HX_FAV_TIERS[i].at) lv = i;
}
return lv;
};
const hxFavTotalLines = () => {
let n = 0;
for (let i = 0; i < HX_FAV_TIERS.length; i += 1) {
n += HX_FAV_TIERS[i].lines.length;
}
return n;
};
const hxUnlockedLines = () => {
const lv = hxFavLevelIdx();
const pool = [];
for (let i = 0; i <= lv; i += 1) {
const tier = HX_FAV_TIERS[i];
if (tier && tier.lines) pool.push.apply(pool, tier.lines);
}
return pool.length ? pool : ["{n}正在吃白饭"];
};
const hxLineCount = () => hxUnlockedLines().length;
const hxPetName = () => {
try {
const text = getStoredConfigText();
if (!text) return HX_DEFAULT_PET;
const parsed = JSON.parse(text);
const name = parsed && parsed.ai && parsed.ai.petName;
const trimmed = typeof name === "string" ? name.trim() : "";
return trimmed || HX_DEFAULT_PET;
} catch (error) { return HX_DEFAULT_PET; }
};
const hxLineText = (idx) => {
const pool = hxUnlockedLines();
const n = pool.length;
const raw = pool[((idx % n) + n) % n];
return String(raw).split("{n}").join(hxPetName());
};
let hxIdleLineIdx = Math.floor(Math.random() * hxLineCount());
let hxIdleLine = hxLineText(hxIdleLineIdx);
let hxLineTimer = null;
const paintIdleLine = (animate) => {
const root = hxShadow;
if (!root)
return false;
const hero = root.querySelector(".whale-hero");
const text = root.querySelector(".whale-hero__text");
if (!hero || !text)
return false;
if (!hero.classList.contains("is-idle"))
return false;
const line = hxLineText(hxIdleLineIdx);
hxIdleLine = line;
if (!animate && text.textContent === line)
return true;
text.textContent = line;
if (animate) {
text.classList.remove("hx-line-in");
void text.offsetWidth;
text.classList.add("hx-line-in");
}
return true;
};
const rollIdleLine = () => {
if (hxLineCount() > 1) {
let next = hxIdleLineIdx;
while (next === hxIdleLineIdx)
next = Math.floor(Math.random() * hxLineCount());
hxIdleLineIdx = next;
}
hxIdleLine = hxLineText(hxIdleLineIdx);
try { paintIdleLine(true); } catch (error) { /* 忽略 */ }
return true;
};
const scheduleIdleRoll = () => {
hxLineTimer = setTimeout(() => {
rollIdleLine();
scheduleIdleRoll();
}, 4200 + Math.floor(Math.random() * 3600));
};
const bindIdleLines = () => {
try { paintIdleLine(false); } catch (error) { /* 忽略 */ }
if (hxLineTimer === null)
scheduleIdleRoll();
return true;
};
/* ── 页面路由:默认停在鲸娘页;状态页有新动静就跳过去,安静 3s 回鲸娘 ── */
const HX_TAB_MAIN = "1";
const HX_TAB_LOG = "0";
const HX_TAB_LABELS = { "0": "状态", "1": "小鲸" };
const HX_TAB_RETURN_MS = 3000;
let hxTabTimer = null;
let hxAutoTabTimer = null;
let hxAutoJumped = false;
let hxDefaultTabApplied = false;
let hxLastLogSig = "\u0000";
let hxRouteReadyAt = 0;
let hxWasBusy = false;
const hxTabItems = () => {
const root = hxShadow;
if (!root) return [];
return Array.from(root.querySelectorAll(".demo-tabs>.el-tabs__header .el-tabs__item"));
};
const hxActiveTabIndex = () => hxTabItems().findIndex((el) => el.classList.contains("is-active"));
const hxTabIdIndex = (id) => {
const items = hxTabItems();
let idx = items.findIndex((el) => String(el.id || "") === "tab-" + id);
if (idx < 0) {
const want = HX_TAB_LABELS[id] || "";
idx = items.findIndex((el) => (el.textContent || "").trim() === want);
}
return idx;
};
const hxSwitchTab = (idx) => {
const items = hxTabItems();
const el = idx >= 0 ? items[idx] : null;
if (!el || el.classList.contains("is-active")) return false;
el.click();
return true;
};
const hxLogSignature = () => {
try {
const store = useLogStore();
const list = store && Array.isArray(store.logList) ? store.logList : [];
const last = list[list.length - 1];
return list.length + "|" + (last ? String(last.message || "") + "@" + String(last.time || "") : "");
} catch (error) { return ""; }
};
const hxReturnToMain = () => {
hxAutoJumped = false;
hxSwitchTab(hxTabIdIndex(HX_TAB_MAIN));
};
const hxIsBusy = () => {
try {
const questionStore = useQuestionStore();
const list = questionStore && questionStore.questionList;
return Array.isArray(list) && list.length > 0;
} catch (error) { return false; }
};
const hxJumpToLog = () => {
const logIdx = hxTabIdIndex(HX_TAB_LOG);
if (hxSwitchTab(logIdx)) hxAutoJumped = true;
if (!hxAutoJumped) return;
if (hxAutoTabTimer) clearTimeout(hxAutoTabTimer);
hxAutoTabTimer = setTimeout(() => { try { hxReturnToMain(); } catch (error) { /* 忽略 */ } }, HX_TAB_RETURN_MS);
};
const hxRouteTick = () => {
const items = hxTabItems();
if (items.length === 0) return;
try { hxSyncLogScroll(); } catch (error) { /* 忽略 */ }
if (!hxDefaultTabApplied) {
hxDefaultTabApplied = true;
if (hxActiveTabIndex() === hxTabIdIndex(HX_TAB_LOG)) hxSwitchTab(hxTabIdIndex(HX_TAB_MAIN));
hxLastLogSig = hxLogSignature();
hxWasBusy = hxIsBusy();
return;
}
const busy = hxIsBusy();
const sig = hxLogSignature();
/* ① 答题中:日志再变也不跳,老老实实留在鲸娘页看小鲸娘干活 */
if (busy) {
hxWasBusy = true;
hxLastLogSig = sig;
return;
}
/* ② 答题刚结束:这一次一定要把主人带回状态页看战果(随后 3s 自动回鲸娘页) */
if (hxWasBusy) {
hxWasBusy = false;
hxLastLogSig = sig;
if (Date.now() < hxRouteReadyAt) return;
const was = hxActiveTabIndex();
if (was === hxTabIdIndex(HX_TAB_LOG) || was === hxTabIdIndex(HX_TAB_MAIN)) hxJumpToLog();
return;
}
/* ③ 空闲期:沿用原规则 —— 状态页有变化才跳过去看一眼 */
if (sig === hxLastLogSig) return;
hxLastLogSig = sig;
if (Date.now() < hxRouteReadyAt) return;
const active = hxActiveTabIndex();
if (active === hxTabIdIndex(HX_TAB_LOG) || active === hxTabIdIndex(HX_TAB_MAIN)) hxJumpToLog();
};
const bindTabRouter = () => {
const root = hxShadow;
if (!root) return false;
hxLastLogSig = hxLogSignature();
hxRouteReadyAt = Date.now() + 3000;
hxDefaultTabApplied = false;
if (hxTabTimer === null)
hxTabTimer = setInterval(() => { try { hxRouteTick(); } catch (error) { /* 忽略 */ } }, 1200);
try { hxRouteTick(); } catch (error) { /* 忽略 */ }
return true;
};
/* ── 状态页:刷新 / 切回 / 有新日志时自动贴底,保证「最新状态」可见 ──
PRD v0.4.13。旧版状态页的 el-scrollbar 停在顶层,刷新后看到的是最早的几条
日志,最新的反而要手动往下拉。现在三个时机都自动贴底:
① 页面刷新(面板挂载完成)② 切到「状态」页 ③ 有新日志写入。
主人自己往上翻时暂停跟随(不跟主人抢滚动条),回到底部附近再自动恢复跟随。
注意:未激活的 el-tab-pane 是 display:none,此时 scrollHeight 为 0,
所以"切页后"必须在可见之后再补几拍滚动,否则滚了个寂寞。 */
const HX_LOG_SCROLL_SELS = [".el-scrollbar__wrap", ".el-scrollbar__view", ".el-scrollbar"];
const HX_LOG_BOTTOM_TOLERANCE = 24;
const HX_LOG_PIN_DELAYS = [0, 120, 480, 1200];
let hxLogPrimary = null;
let hxLogFollow = true;
let hxLogObserver = null;
let hxLogTabSeen = false;
const hxLogScrollTargets = () => {
const root = hxShadow;
if (!root) return [];
const home = root.querySelector(".script-home");
if (!home) return [];
const list = [];
HX_LOG_SCROLL_SELS.forEach((sel) => {
const el = home.querySelector(sel);
if (el && list.indexOf(el) === -1) list.push(el);
});
try {
const pane = home.closest ? home.closest(".el-tab-pane") : null;
if (pane && list.indexOf(pane) === -1) list.push(pane);
} catch (error) { /* 忽略 */ }
return list;
};
const hxLogAtBottom = (el) => {
try { return el.scrollHeight - el.clientHeight - el.scrollTop <= HX_LOG_BOTTOM_TOLERANCE; }
catch (error) { return true; }
};
const hxLogScrollToBottom = (force) => {
const targets = hxLogScrollTargets();
if (!targets.length) return false;
if (!force && !hxLogFollow) return false;
let moved = false;
targets.forEach((el) => {
try {
if (typeof el.scrollTop !== "number") return;
const max = Math.max(el.scrollHeight - el.clientHeight, 0);
if (max <= 0) return;
el.scrollTop = max;
moved = true;
} catch (error) { /* 忽略 */ }
});
return moved;
};
const hxLogRefreshPin = () => {
hxLogFollow = true;
hxLogScrollToBottom(true);
HX_LOG_PIN_DELAYS.forEach((delay) => {
setTimeout(() => { try { hxLogScrollToBottom(true); } catch (error) { /* 忽略 */ } }, delay);
});
return true;
};
const bindLogAutoScroll = () => {
const root = hxShadow;
if (!root) return false;
const targets = hxLogScrollTargets();
if (!targets.length) return false;
const primary = targets[0];
if (hxLogPrimary !== primary) {
hxLogPrimary = primary;
hxLogFollow = true;
try {
primary.addEventListener("scroll", () => {
try { hxLogFollow = hxLogAtBottom(primary); } catch (error) { /* 忽略 */ }
}, { passive: true });
} catch (error) { /* 忽略 */ }
try {
if (hxLogObserver) hxLogObserver.disconnect();
hxLogObserver = new MutationObserver(() => {
try { hxLogScrollToBottom(false); } catch (error) { /* 忽略 */ }
});
hxLogObserver.observe(primary, { childList: true, subtree: true, characterData: true });
} catch (error) { hxLogObserver = null; }
}
return hxLogRefreshPin();
};
/* 路由巡检每拍调用:把"切到状态页"这个事件也接上贴底 */
const hxSyncLogScroll = () => {
const items = hxTabItems();
if (!items.length) return false;
const logIdx = hxTabIdIndex(HX_TAB_LOG);
if (logIdx < 0) return false;
if (hxActiveTabIndex() !== logIdx) {
hxLogTabSeen = false;
return false;
}
if (!hxLogTabSeen) {
hxLogTabSeen = true;
return hxLogRefreshPin();
}
return hxLogScrollToBottom(false);
};
/* ── 后台被动守护:视频卡顿自动重播(不展示为任何配置项)──────────
PRD:视频停止播放 / 卡顿,20 秒内未恢复就自动点击"重播"再试一次。
判定:视频处于播放态(!paused && !ended)却 currentTime 长时间不前进。
10s 轻量自救:补一次 play()(应对"播放态但其实被挂起"的情形);
20s 仍未前进:在播放器里找「重播 / 重新播放」按钮点击,并强制再一次 play()。
安全性:只在 !paused 时动作 ⇒ 主人自己暂停的视频、答题暂停的视频都不会被抢播;
seeking / readyState 未就绪时重置基线,不把缓冲当成卡死;
单个视频最多自救 20 次,避免在彻底坏掉的播放器上空转。
覆盖范围:主文档 + 同源 iframe(跨域 iframe 静默跳过)。
全程静默后台运行,只在状态页留一行日志。 */
const HX_STALL_SOFT_MS = 1e4;
const HX_STALL_HARD_MS = 2e4;
const HX_STALL_TICK_MS = 1e3;
const HX_STALL_MOVE_EPS = 0.05;
const HX_STALL_MAX_REPLAY = 20;
const HX_REPLAY_TEXT_RE = /^(重播|重新播放|再次播放|再看一次|replay)$/i;
const hxStallState = /* @__PURE__ */ new WeakMap();
const hxStallStats = { scans: 0, soft: 0, hard: 0, lastAt: 0 };
let hxStallTimer = null;
const hxCollectVideos = () => {
const out = [];
try {
document.querySelectorAll("video").forEach((el) => { if (el) out.push(el); });
} catch (error) { /* 忽略 */ }
try {
document.querySelectorAll("iframe").forEach((frame) => {
try {
const doc = frame.contentDocument;
if (doc) doc.querySelectorAll("video").forEach((el) => { if (el) out.push(el); });
} catch (error) { /* 跨域 iframe:跳过 */ }
});
} catch (error) { /* 忽略 */ }
return out;
};
const hxFindReplayButton = (doc) => {
if (!doc || typeof doc.querySelectorAll !== "function") return null;
let hit = null;
try {
doc.querySelectorAll("button,a,span,div,i,li").forEach((el) => {
if (hit) return;
const label = String((el.textContent || "")).trim();
if (label && label.length <= 6 && HX_REPLAY_TEXT_RE.test(label)) { hit = el; return; }
const tip = String((el.getAttribute && (el.getAttribute("title") || el.getAttribute("aria-label"))) || "").trim();
if (tip && HX_REPLAY_TEXT_RE.test(tip)) hit = el;
});
} catch (error) { /* 忽略 */ }
return hit;
};
const hxForceReplay = (media) => {
let clicked = false;
try {
const btn = hxFindReplayButton(media.ownerDocument);
if (btn) { btn.click(); clicked = true; }
} catch (error) { /* 忽略 */ }
if (!clicked) {
try { if (media.ended || media.currentTime > 0) media.currentTime = 0; }
catch (error) { /* 忽略:只读播放器 */ }
}
try {
const pending = media.play();
if (pending && typeof pending.catch === "function") pending.catch(() => {});
} catch (error) { /* 忽略 */ }
return clicked;
};
const hxStallReset = (state2, media, now) => {
state2.at = now;
state2.time = Number(media.currentTime) || 0;
state2.soft = false;
};
const hxStallTick = () => {
const now = Date.now();
hxStallStats.scans += 1;
hxCollectVideos().forEach((media) => {
let state2 = hxStallState.get(media);
if (!state2) {
state2 = { at: now, time: Number(media.currentTime) || 0, soft: false, replays: 0 };
hxStallState.set(media, state2);
}
try {
if (media.paused || media.ended || media.seeking) {
hxStallReset(state2, media, now);
return;
}
if (Math.abs((Number(media.currentTime) || 0) - state2.time) > HX_STALL_MOVE_EPS) {
hxStallReset(state2, media, now);
return;
}
const stall = now - state2.at;
if (stall >= HX_STALL_HARD_MS && state2.replays < HX_STALL_MAX_REPLAY) {
state2.replays += 1;
hxStallReset(state2, media, now);
hxStallStats.hard += 1;
hxStallStats.lastAt = now;
const clicked = hxForceReplay(media);
/* v0.5.1:自动重播触发时,在状态页留一条一眼能认出的通知。
后台被动运行,不出现在任何配置项里。 */
hxLog("【自动重播】检测到视频卡住,小鲸自动戳一下" + (clicked ? "重播" : "播放") + "~(第 " + state2.replays
+ " 次 · 停顿 " + Math.round(stall / 1e3) + " 秒)", "warning");
return;
}
if (stall >= HX_STALL_SOFT_MS && !state2.soft) {
state2.soft = true;
hxStallStats.soft += 1;
try {
const pending = media.play();
if (pending && typeof pending.catch === "function") pending.catch(() => {});
} catch (error) { /* 忽略 */ }
}
} catch (error) { /* 忽略:单个视频异常不影响守护 */ }
});
};
const bindStallGuard = () => {
if (hxStallTimer === null)
hxStallTimer = setInterval(() => { try { hxStallTick(); } catch (error) { /* 忽略 */ } }, HX_STALL_TICK_MS);
return true;
};
/* ── 好感度面板:挂在小名下面,ⓘ 可展开说明 ───────────── */
let hxFavOpen = false;
let hxFavTimer = null;
const hxFavTierRows = () => HX_FAV_TIERS.map((tier) => 'Lv.' + tier.lv + ' · ¥' + tier.at + '' + tier.name + '(' + tier.tag + ')· ' + tier.lines.length + ' 条').join('');
const hxFavNoteHtml = () => ''
+ '
好感度跟着累计花费一起长——就是这台机器上为小鲸花掉的 token 钱,装好脚本以后一直累加,不随刷新清零。
'
+ '
'
+ '
每跨过一档多解锁 10 条语录,满级共 ' + hxFavTotalLines() + ' 条。语录只在她空闲时滚动播放;取的「小名」会替进每一条语录。
'
+ '
';
const hxFavShellHtml = () => ''
+ '好感度'
+ 'Lv.1 · —'
+ 'i'
+ '
'
+ '
'
+ '——
'
+ hxFavNoteHtml();
const paintFavCard = (el) => {
if (!el) return;
const idx = hxFavLevelIdx();
const tier = HX_FAV_TIERS[idx] || HX_FAV_TIERS[0];
const next = HX_FAV_TIERS[idx + 1] || null;
const cost = hxFavCost();
const lvEl = el.querySelector('.fav-lv');
if (lvEl) {
const txt = 'Lv.' + tier.lv + ' · ' + tier.name + ' · ' + tier.tag;
if (lvEl.textContent !== txt) lvEl.textContent = txt;
}
const barEl = el.querySelector('.fav-bar > i');
if (barEl) {
const span = next ? Math.max(next.at - tier.at, 0.0001) : 1;
const pct = next ? Math.max(0, Math.min(100, ((cost - tier.at) / span) * 100)) : 100;
const wv = pct.toFixed(1) + '%';
if (barEl.style.width !== wv) barEl.style.width = wv;
}
const metaEl = el.querySelector('.fav-meta');
if (metaEl) {
const left = '累计 ' + hxFavMoney(cost) + ' · 已解锁 ' + hxLineCount() + '/' + hxFavTotalLines() + ' 条';
const right = next ? '距 Lv.' + next.lv + ' 还差 ' + hxFavMoney(Math.max(next.at - cost, 0)) : '已满级 · 语录全解锁';
const html = '' + left + '' + right + '';
if (metaEl.innerHTML !== html) metaEl.innerHTML = html;
}
};
/* 好感度卡片为什么之前"没展示":我们注入的节点是 Vue 模板 div.setting-ai 的
第 5 个子节点,而那个 div 每次重渲染只认原本的 4 个(分隔线/API Key/模型/小名),
多出来的第 5 个会被 Vue 在 patchUnkeyedChildren 阶段直接移除 —— 于是卡片刚插进去
就被删掉,用户看不到。修法:① 落点从「只认小名字段」改成多级降级;
② 用 MutationObserver 盯住容器,一旦发现卡片被移除就立刻补回。 */
let hxFavAnchor = "";
let hxFavObs = null;
let hxFavObsTarget = null;
let hxFavInserts = 0;
const hxFavObserve = (host) => {
if (typeof MutationObserver !== "function") return;
if (hxFavObs && hxFavObsTarget === host) return;
if (hxFavObs) { try { hxFavObs.disconnect(); } catch (error) { /* 忽略 */ } }
hxFavObs = null;
hxFavObsTarget = null;
try {
hxFavObs = new MutationObserver(() => {
try {
if (!host.isConnected) return;
if (host.querySelector(".setting-fav-field")) return;
mountFavCard();
} catch (error) { /* 忽略 */ }
});
hxFavObs.observe(host, { childList: true });
hxFavObsTarget = host;
} catch (error) { hxFavObs = null; hxFavObsTarget = null; }
};
const hxFavAnchorPick = (root) => {
const probes = [
[".setting>div.setting-ai", "container"],
[".setting-ai", "container"],
[".setting .setting-pet-field", "after"],
[".setting", "container"]
];
for (let i = 0; i < probes.length; i += 1) {
const node = root.querySelector(probes[i][0]);
if (node && node.parentNode) {
hxFavAnchor = probes[i][0];
return { node: node, mode: probes[i][1] };
}
}
hxFavAnchor = "";
return null;
};
const mountFavCard = () => {
const root = hxShadow;
if (!root) return false;
const hit = hxFavAnchorPick(root);
if (!hit) return false;
const host = hit.mode === "after" ? hit.node.parentNode : hit.node;
if (!host) return false;
let el = host.querySelector(".setting-fav-field");
if (!el) {
el = root.querySelector(".setting-fav-field");
if (el && el.parentNode !== host) {
try { el.parentNode.removeChild(el); } catch (error) { el = null; }
}
}
if (!el) {
el = document.createElement("div");
el.className = "setting-fav-field";
el.innerHTML = hxFavShellHtml();
const info = el.querySelector(".fav-info");
if (info) {
const toggle = (ev) => {
if (ev) { ev.preventDefault(); ev.stopPropagation(); }
hxFavOpen = !hxFavOpen;
el.classList.toggle("is-open", hxFavOpen);
};
info.addEventListener("click", toggle);
info.addEventListener("keydown", (ev) => {
if (ev && (ev.key === "Enter" || ev.key === " ")) toggle(ev);
});
}
}
if (hit.mode === "after") {
if (el.previousSibling !== hit.node) host.insertBefore(el, hit.node.nextSibling);
} else if (host.lastElementChild !== el) {
host.appendChild(el);
}
if (el.parentNode !== host) return false;
hxFavInserts += 1;
hxFavObserve(host);
el.classList.toggle("is-open", hxFavOpen);
try { paintFavCard(el); } catch (error) { /* 忽略 */ }
try {
const nowLv = hxFavLevelIdx();
if (hxFavBarLv !== nowLv) {
hxFavBarLv = nowLv;
usageTick.value += 1;
}
} catch (error) { /* 忽略 */ }
return true;
};
let hxFavBarLv = -1;
const bindFavCard = () => {
const ensure = () => {
try { mountFavCard(); } catch (error) { /* 忽略 */ }
};
ensure();
[220, 700, 1500, 3000, 5200].forEach((delay) => setTimeout(ensure, delay));
if (hxFavTimer === null) hxFavTimer = setInterval(ensure, 1500);
};
const CAN_USE_ADOPTED_SHEETS = (() => {
try {
if (typeof CSSStyleSheet !== "function" || !("replaceSync" in CSSStyleSheet.prototype))
return false;
const probe = document.createElement("div").attachShadow({ mode: "open" });
return Array.isArray(probe.adoptedStyleSheets);
} catch (error) {
return false;
}
})();
const documentStyleInjected = /* @__PURE__ */ Object.create(null);
const injectDocumentStyle = (key, cssText) => {
if (!cssText || documentStyleInjected[key])
return;
documentStyleInjected[key] = true;
GM_addStyle(cssText);
};
const applyShadowStyles = (shadowRoot, sheets) => {
const usable = sheets.filter(Boolean);
if (CAN_USE_ADOPTED_SHEETS) {
shadowRoot.adoptedStyleSheets = usable.map(createStyleSheet);
return;
}
const style = document.createElement("style");
style.textContent = usable.join("\n");
shadowRoot.appendChild(style);
};
const ELEMENT_PLUS_STYLE_RESOURCE = "ElementPlusStyle";
const createStyleSheet = (cssText) => {
const sheet = new CSSStyleSheet();
try {
sheet.replaceSync(cssText);
} catch (error) {
console.error("[D-Whaler] CSS 解析失败:", error);
}
return sheet;
};
const createShadowMountNode = () => {
const shadowHost = document.createElement("div");
shadowHost.setAttribute(PANEL_MARK_ATTR, HX_RUN_ID);
const mountNode = document.createElement("div");
const shadowRoot = shadowHost.attachShadow({ mode: "closed" });
document.body.append(shadowHost);
shadowRoot.appendChild(mountNode);
hxShadow = shadowRoot;
exposeDiagnostics();
const elementPlusCss = _GM_getResourceText(ELEMENT_PLUS_STYLE_RESOURCE) ?? "";
/* el-select 下拉弹层默认 Teleport 到 document.body(在 closed shadow root 之外),
拿不到 adoptedStyleSheets,必须把同一份 Element Plus 样式补注入到 document 级。
用 key 去重,避免重复挂载时把同一份样式灌进 document 多次。 */
injectDocumentStyle("element-plus", elementPlusCss);
/* 主题覆盖必须晚于 Element Plus 注入,否则同特异性声明会被默认值盖掉 */
injectDocumentStyle("popper", POPPER_CSS);
applyShadowStyles(shadowRoot, [elementPlusCss, layoutCss]);
return mountNode;
};
const mountApp = () => {
const app = vue.createApp(_sfc_main);
app.use(pinia.createPinia());
app.use(ElementPlus);
app.mount(createShadowMountNode());
};
const isPanelMounted = () => Boolean(document.querySelector("[" + PANEL_MARK_ATTR + '="' + HX_RUN_ID + '"]'));
let bootstrapAttempts = 0;
const timer = setInterval(() => {
if (document.readyState !== COMPLETE_READY_STATE) {
bootstrapAttempts += 1;
/* 兜底:页面迟迟不到 complete(资源被墙等)也强行挂载,避免定时器永久空转 */
if (bootstrapAttempts < BOOTSTRAP_MAX_ATTEMPTS)
return;
}
clearInterval(timer);
if (isPanelMounted())
return;
try {
mountApp();
console.info("[D-Whaler] build " + HX_BUILD + " 已挂载(run " + HX_RUN_ID + ")");
HX_SWEEP_DELAYS.forEach((delay) => {
setTimeout(() => {
try {
const hidden = sweepOtherPanels();
if (hidden)
console.warn("[D-Whaler] 已隐藏 " + hidden + " 个旧版/重复面板宿主,新版面板已置于最上层");
} catch (error2) { /* 忽略 */ }
try { bindLogAutoScroll(); } catch (error2) { /* 忽略 */ }
}, delay);
});
try { bindLiquidGlass(); } catch (error2) { /* 忽略 */ }
try { bindStatusDot(); } catch (error2) { /* 忽略 */ }
try { bindIdleLines(); } catch (error2) { /* 忽略 */ }
try { bindTabRouter(); } catch (error2) { /* 忽略 */ }
try { bindFavCard(); } catch (error2) { /* 忽略 */ }
try { bindLogAutoScroll(); } catch (error2) { /* 忽略 */ }
try { bindStallGuard(); } catch (error2) { /* 忽略 */ }
try { bindUptimeMeter(); } catch (error2) { /* 忽略 */ }
setTimeout(() => {
try { fetchBalance(); } catch (error2) { /* 忽略 */ }
}, 1200);
if (balanceTimer === null)
balanceTimer = setInterval(() => {
try { fetchBalance(); } catch (error2) { /* 忽略 */ }
}, 6e5);
} catch (error) {
console.error("[D-Whaler] 面板挂载失败:", error);
}
}, BOOTSTRAP_INTERVAL);
})(Vue, Pinia, rxjs, md5, ElementPlus);