diff --git a/南风/api.json b/南风/api.json
index 97ea4e3..4d94d88 100644
--- a/南风/api.json
+++ b/南风/api.json
@@ -84,25 +84,6 @@
"filterable": 1,
"ext": "7lj763gg402i7942463j9j9jh8579590k3hjii5gi4i73l2k5l"
},
- {
- "key": "狂风",
- "name": "🌪狂风",
- "type": 3,
- "api": "csp_Qiji",
- "playerType": 2,
- "ext": "7lj763gg402i7942522l99jhh90ljii5g1l09i13i39g2l6i514l56l1li1k5107159113h6945h8g91351kgkijl5l315g8l3656756kjk698gi689125k773lg5k6hl2l3i1g3gk5l1g5l8g5h06018gkh1l7559h9lk6j26hkk694g29k309h3i070l3i3197"
- },
- {
- "key": "橘子",
- "name": "🍊橘子",
- "type": 3,
- "api": "csp_Qiji",
- "playerType": 2,
- "searchable": 1,
- "quickSearch": 1,
- "filterable": 1,
- "ext": "7lj763gg402i79425h3l90jgh14i9ijik6h8i75lj8i73l2l4k6g48lhgl2k4j3j2kik7l83gj54h687390196j0lkgg21l1i3552i7ij087ijj9258721g03lll"
- },
{
"key": "驿站",
"name": "🚗驿站",
diff --git a/小米/api.json b/小米/api.json
index 26bb6e3..fe6b2d3 100644
--- a/小米/api.json
+++ b/小米/api.json
@@ -4,7 +4,7 @@
"sites": [
{
"key": "豆豆",
- "name": "🌈热播┃项目链接>:https://link3.cc/lovemm",
+ "name": "🌈热播┃网盘线路晚高峰不卡!项目链接>:https://link3.cc/lovemm",
"type": 3,
"quickSearch": 0,
"filterable": 0,
@@ -127,6 +127,13 @@
"searchable": 0,
"ext": ""
},
+ {
+ "key": "csp_Living",
+ "name": "🎮聚合┃直播",
+ "type": 3,
+ "api": "csp_Living",
+ "ext": "https://lemonlive-api-1.deno.dev"
+ },
{
"key": "88看球",
"name": "🏀看球┃直播",
@@ -167,13 +174,6 @@
"host": "https://cms99api.ystva.com"
}
},
- {
- "key": "聚搜2",
- "name": "🚗JUSOU┃1080P",
- "type": 3,
- "api": "./api/AppToV5.py",
- "ext": "http://118.89.203.120:8365/"
- },
{
"key": "巧技2",
"name": "💢聚搜┃1080P✨",
@@ -185,39 +185,9 @@
"jar": "./jars/巧技2.jar",
"ext": "7lj763gg402i7942412h849jg1558j9jl8g19213il86316k465719lik158491h179312h4934183ig2l05g9"
},
- {
- "key": "爆炸",
- "name": "🎴爆炸┃1080P",
- "type": 3,
- "api": "csp_AppGetV2",
- "changeable": "1",
- "quickSearch": 0,
- "filterable": 1,
- "ext": "pghUv+IPbIqGFEhny2nIStK3kvYuQF1lj98M0YXLH7Vmu8vVscTp5N3ez4yblkrSfdCHlm4BW9GfqxpmOugdHzmaIMUcG6iFE2QkGiogg/EkrBoFyqPlXfgqCnwvnkLTwIm6HlAJq81hOBdm8KYMAenzS1FXuj3q8/Rbai4OcSMAWvA2Wl8uB576gCLKVN0lFUFcvAYefFSkfhF9f0iyDuG/LBv87IIBNwyVB/MgWEuUwwoBhSfvjS09Mc9Ic7G4yBz6TguFIQ5Xqa2xQBGjFYb4nDoygkIbt3a7bQGmktJxEHdOhhm8nYvhDe9+/8HB7EJgHSlT5hnLoCgqcFHLqn+oof8StNPQo8Pjjik3L4VEfTfCYWaN7ZFWASzTkPIr"
- },
- {
- "key": "橘子",
- "name": "🎴JUZI┃1080P",
- "type": 3,
- "api": "csp_AppGetV2",
- "changeable": "1",
- "quickSearch": 0,
- "filterable": 1,
- "ext": "FNc7O3Sq/hxz7uCzbccPTwmKS9QhqbhDC5J/tBK99TWfK0aEwzyajhrUANmtu0o/w36kBG8LM77XaSazDF+/gYPfNaL4qTRYwqUKxL4cr84pssT9H168H7YT0HD1jUpcBYXSFfirex66s9O56hHTJCavdCBPyAY+K1jwYeoEEhGWSCLhW+JJBxU7rItkKh2VHMg4vh/A7M+5ydA1fIuNP8T5JR3+475o6yUWkUH7nv/8uqjmZKhq70mQZTaMPiVaBqG+SL9NKYo5Yk4vpsUBErE2uzducc78nK0PT5ShRhLv6POBMNNZZN+/O0MFX+83BqCWsbHMNipM5zOIja/xr2x14WPH7BDlUqkw9w105US6oRwZ8jtdS0cvn5u4BT9W14rSUBAMy36xrjYR3f1OUkmlIvz6sC8OAagD/CRSwFYrh9zbMvw5V2ntYK+wDdiIq6HTkXG/86MN6lYEHkEAC4sYoxBpS5KaPlDFoOo5ED4="
- },
- {
- "key": "爱营",
- "name": "🎴AIYIN┃1080P",
- "type": 3,
- "api": "csp_AppGetV2",
- "changeable": "1",
- "quickSearch": 0,
- "filterable": 1,
- "ext": "N/01JeZBCBEQ0wOXNuAI/kwsk5p8MqEDFtLQfMnVixAS3aeDEPdCV317OImxNn6T3Hb5VmwFLOhgFAQJ+is4HZ3ndDCtqOfPVULszPg13PiW+RHbzH5TtSdAiFfw0D1dLa7TDpTcFxuXv5MJI8925dg51pBjkSqNZt8Jz0nbRDK8eQSoCbsw2I93ke+olS9cVWkurB8mwxms5nD8AqSV4eHdYOwwU2q4ln6jV8KEyhnOHxJEjNLT8hk0SFdgLqRwqbqyl6kSqmTlPX681FYZnBN19r49ojprcBeFmLUB3Rn0LrpWzz0zIeycV8N00oXiCh5kd2caQMyUPPWdyfQbKwV6V+6dQAKtSNoTpxRNGqTimifZEJFGizQMko6AQpQpW0FHr7B3gLmmiknNMWJe/gcG7lhWSAiIGzxVnzBhCmSlOKB3sq/tAQSBrPNWKpSNFx5prQHKpStELIHAnqdNUS31u0xrGq9ejUdadgR9pxO6QcCHk0Ln0tnUA69uiJ9q1udCFx8+5i+c320rpMKGnA=="
- },
{
"key": "QD4K",
- "name": "🐷猪猪┃影视",
+ "name": "🐷猪猪┃1080P",
"type": 3,
"searchable": 1,
"quickSearch": 0,
@@ -229,6 +199,16 @@
"apisignkey": "lvdoutv-1.0.0"
}
},
+ {
+ "key": "爱营",
+ "name": "🎴爱影┃1080P",
+ "type": 3,
+ "api": "csp_AppGetV2",
+ "changeable": "1",
+ "quickSearch": 0,
+ "filterable": 1,
+ "ext": "pghUv+IPbIqGFEhny2nISuI5KzOEA1E0lc1jMsyog/OYwSADcPIna2eOlbOHVLkxfaciWdUITQtbDmt+qom9EMJRiVaiwwN4fq/9mc2DAAgugdkhTXND+52hgm3ggj65qar4TjeNrCTAD/U6Er0wTLydN68QCGnUP+Az4vpxMIKNJutdzRf+Z5rYQtKX8IglZ92N7G1shuFGXBEngnUmpPhCqPzJHH3gm+Q/sNjl2Camb0qGi8XDNhl4cGORH0dvvpkHLhEzZ+1+/9LwxcTPrLUUJLtYVjCfcGT/jJT24JXrJfVWm+WngZXr8IjU/Apk0ZoHUAmte8/dLlplNyNafu3Tb3FgGkrRS0eVyWUB3d8="
+ },
{
"key": "顾我",
"name": "🎴顾我┃1080P",
@@ -237,7 +217,7 @@
"changeable": "1",
"quickSearch": 0,
"filterable": 1,
- "ext": "FNc7O3Sq/hxz7uCzbccPTwmKS9QhqbhDC5J/tBK99TXBAOG5IeeHo7xSXryC0vBoO5B1l2XmjJKdkeCZu5v1UxCZcIXe/1cmcBYcHAk746JE1FosonleIPqUFKByjhLwUU1doZS06jAVhSjz7X90y5GWmFqHmqD7ArxYzUSMQxyKerhNQ2ZWaJ2ka4jFMRPVVDQrBge5CgBGsw/HTb/+Q12qdcSTymLUN/cfwoUZ4uqBcSPbxSIrB4znIU2PcCtnX14vLtsWp1u/cbGV+kP8486YY8kGEs2qq+T34UaXBZf9Kk1t0Qt6yrj57yptwkeJXa2gK176ebs/D71tmX2ErBjije7pqwpRtEmeAmBWxohh9kLrGdh97ODRSzyNYE93Ai7nbGoskd/2r1Uu5NLCEqCIBBhH1qI6Jl/jWIVcngIDBm5KoTPs1ZxNWEqnOyP8nf8FuHZkRp/o26HL5LXb17UOkCmecqDKg3vjcnBKPNg="
+ "ext": "N/01JeZBCBEQ0wOXNuAI/kwsk5p8MqEDFtLQfMnVixDNodW6h3yknJ0O47HN+ySzcqHSPQtTeHgAvnMVMolGPqTNRfEJ/8Ig5H0hTsHFjNFIfIj6CZ3MehTe7ks7NBA9mkCsDFeQI7u6Fapavayh76Kn9daiTSr08UO1N+PNA3Nwz0nVRPNP7X/2+t7BC6YAArHVuO75i4MCgmh+b7O3JRvsgQiH6DhYzb+nWPjyLhUjTBKtCCTAyJY5L+b3nxdZCBROsMaWBDl7ZKgI9+1OQRRvjXJsuM95dvSGbkjYeMRw9qTwOnuog2JiDxtdYYCzXs3hPlDuOBvOnV9kLm455GYR/47kZIGTKIhm6e+eP72visnIQN7vtrmlxLKDvTvoKF+EsSRau+9N2o1ZV84mlDU0Lrh+caSZHfMdbWIkjkzYT6Dc3CIxrYlzEicxgWhk/zwpwGjcYAf/6SF/iGvP+s8aGbHMVb01IDRKcdAh1fY="
},
{
"key": "仓鼠",
@@ -271,17 +251,17 @@
},
{
"key": "JINPAI",
- "name": "🍥JINPIA┃1080P",
+ "name": "🍥金牌┃1080P",
"type": 3,
"api": "csp_AppGetV2",
"changeable": "1",
"quickSearch": 0,
"filterable": 1,
- "ext": "N/01JeZBCBEQ0wOXNuAI/kwsk5p8MqEDFtLQfMnVixDB3xui1lDymx4fnoCgxm59NbdMM2FDEd1LoNOCZvedKAplW6Go0JtGfzXnn65Pg1kPIthOoYoQWgY/lKhQKzzcLQKb1ezm1qhhKR/lEhfm+EbojsfeaAOeOaSCVPPzSkVw2DmHMhYv+yWi9ExOHyfuXX1csfF6G/UWPw12lFNeElpZMAUAQG2LEcbRadEvVmNm3YDM07Dn4F8Fcvsnb08MRb3GO2sEZSdjqf85kk1tVNb5zdfho1F01S/Cvzp4Lz+TE9ttJdTPredSWbGdEqE6nSkfEYZvFEnCD8bleLRdOPik/WqX5gPv+gSRakGrrGx7FwM3Ase0Bd8sy6ZfJqfs8IllB1ckfC0POuFEmprDW4ERNmIFJHsZcS128w9xhNUrtuPnocdErRw7+shj+W3Hc4pGqZpprTTxaXp9zA+HcGj/qeNIOXt32yoDOnpy9SOHNSvD4Joue4EcTCkqnJoC"
+ "ext": "N/01JeZBCBEQ0wOXNuAI/kwsk5p8MqEDFtLQfMnVixDB3xui1lDymx4fnoCgxm59NbdMM2FDEd1LoNOCZvedKAplW6Go0JtGfzXnn65Pg1kPIthOoYoQWgY/lKhQKzzcLQKb1ezm1qhhKR/lEhfm+EbojsfeaAOeOaSCVPPzSkVw2DmHMhYv+yWi9ExOHyfuXX1csfF6G/UWPw12lFNeElpZMAUAQG2LEcbRadEvVmNm3YDM07Dn4F8Fcvsnb08MRb3GO2sEZSdjqf85kk1tVNb5zdfho1F01S/Cvzp4Lz84cQdryYTNnZCggLd9vL5TzLkGb3USPOKaq2v4jzsIlGKXcyRYbIDf/vcihcS2/VvRXNBBU782kwniaIiq+4rEN3u8hlLic89wNWeBa60vQgYvjsfM7t1zsospH+7CcEEliFOlYdCrMcW2NGR9Gjj/"
},
{
"key": "荐片",
- "name": "🧲JIANPIAN┃磁力",
+ "name": "🧲荐片┃磁力",
"quickSearch": 0,
"changeable": "0",
"searchable": 1,
@@ -293,15 +273,28 @@
},
"ext": "https://ev2089.zxbwv.com"
},
+ {
+ "key": "csp_duanju",
+ "name": "🔥短剧┃影视",
+ "type": 3,
+ "api": "csp_DuanJu"
+ },
{
"key": "csp_SaoHuo",
- "name": "🔥HUOHUO┃影视",
+ "name": "🔥火火┃影视",
"type": 3,
"api": "csp_SaoHuo"
},
+ {
+ "key": "csp_Wwys",
+ "name": "🔥农民┃影视",
+ "type": 3,
+ "api": "csp_Wwys",
+ "ext": "https://vip.wwgz.cn:5200"
+ },
{
"key": "csp_LiteApple",
- "name": "🍎APPLE┃影视💯",
+ "name": "🍎苹果┃影视💯",
"type": 3,
"searchable": 1,
"quickSearch": 0,
@@ -309,7 +302,7 @@
},
{
"key": "csp_Gz360",
- "name": "🍉GUAZI┃影视",
+ "name": "🍉瓜子┃影视",
"type": 3,
"searchable": 1,
"quickSearch": 0,
@@ -317,7 +310,7 @@
},
{
"key": "csp_Jpys",
- "name": "🥇JINPAI┃影视",
+ "name": "🥇金牌┃影视",
"type": 3,
"searchable": 1,
"quickSearch": 0,
@@ -325,22 +318,12 @@
},
{
"key": "csp_MiSou",
- "name": "🔍MISOU┃盘搜",
+ "name": "🔍米搜┃盘搜",
"type": 3,
"searchable": 1,
"quickSearch": 0,
"api": "csp_MiSou"
},
- {
- "key": "剧和短剧",
- "name": "🪗聚合┃短剧",
- "type": 3,
- "searchable": 1,
- "quickSearch": 1,
- "filterable": 1,
- "changeable": 1,
- "api": "./api/%E8%81%9A%E5%90%88%E7%9F%AD%E5%89%A7.js"
- },
{
"key": "csp_TingBook",
"name": "📕有声┃听书",
diff --git a/小米/api/%E8%81%9A%E5%90%88%E7%9F%AD%E5%89%A7.js b/小米/api/%E8%81%9A%E5%90%88%E7%9F%AD%E5%89%A7.js
deleted file mode 100644
index c287c2f..0000000
--- a/小米/api/%E8%81%9A%E5%90%88%E7%9F%AD%E5%89%A7.js
+++ /dev/null
@@ -1,427 +0,0 @@
-const aggConfig = {
- headers: {
- default: { 'User-Agent': 'okhttp/3.12.11', 'content-type': 'application/json; charset=utf-8' },
- niuniu: { 'Cache-Control': 'no-cache', 'Content-Type': 'application/json;charset=UTF-8', 'User-Agent': 'okhttp/4.12.0' }
- },
- platform: {
- 百度: { host: 'https://api.jkyai.top', url1: '/API/bddjss.php?name=fyclass&page=fypage', url2: '/API/bddjss.php?id=fyid', search: '/API/bddjss.php?name=**&page=fypage' },
- 甜圈: { host: 'https://mov.cenguigui.cn', url1: '/duanju/api.php?classname', url2: '/duanju/api.php?book_id', search: '/duanju/api.php?name' },
- 锦鲤: { host: 'https://api.jinlidj.com', search: '/api/search', url2: '/api/detail' },
- 番茄: { host: 'https://reading.snssdk.com', url1: '/reading/bookapi/bookmall/cell/change/v', url2: 'https://fqgo.52dns.cc/catalog', search: 'https://fqgo.52dns.cc/search' },
- 星芽: { host: 'https://app.whjzjx.cn', url1: '/cloud/v2/theater/home_page?theater_class_id', url2: '/v2/theater_parent/detail', search: '/v3/search', loginUrl: 'https://u.shytkjgs.com/user/v1/account/login' },
- 西饭: { host: 'https://xifan-api-cn.youlishipin.com', url1: '/xifan/drama/portalPage', url2: '/xifan/drama/getDuanjuInfo', search: '/xifan/search/getSearchList' },
- 围观: { host: 'https://api.drama.9ddm.com', url1: '/drama/home/shortVideoTags', url2: '/drama/home/shortVideoDetail', search: '/drama/home/search' },
- 碎片: { host: 'https://free-api.bighotwind.cc', url1: '/papaya/papaya-api/theater/tags', url2: '/papaya/papaya-api/videos/info', search: '/papaya/papaya-api/videos/page' }
- },
- platformList: [
- { name: '甜圈短剧', id: '甜圈' }, { name: '锦鲤短剧', id: '锦鲤' }, { name: '番茄短剧', id: '番茄' },
- { name: '星芽短剧', id: '星芽' }, { name: '西饭短剧', id: '西饭' }, { name: '百度短剧', id: '百度' },
- { name: '围观短剧', id: '围观' }, { name: '碎片剧场', id: '碎片' }
- ],
- search: { limit: 30, timeout: 6000 }
-};
-
-const ruleFilterDef = {
- 百度: { area: '逆袭' }, 甜圈: { area: '推荐榜' }, 锦鲤: { area: '' }, 番茄: { area: 'videoseries_hot' },
- 星芽: { area: '1' }, 西饭: { area: '' }, 围观: { area: '' }, 碎片: { area: '' }
-};
-
-let xingyaToken = '';
-let suipianToken = '';
-
-function getRandomItem(arr) { return arr[Math.floor(Math.random() * arr.length)]; }
-
-function guid() {
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
- const r = Math.random() * 16 | 0;
- return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
- });
-}
-
-function base64Decode(str) {
- const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
- let output = '';
- str = str.replace(/=+$/, '');
- for (let i = 0; i < str.length; i += 4) {
- const [e1, e2, e3, e4] = [str[i], str[i + 1], str[i + 2], str[i + 3]].map(c => chars.indexOf(c));
- const chr1 = (e1 << 2) | (e2 >> 4);
- const chr2 = ((e2 & 15) << 4) | (e3 >> 2);
- const chr3 = ((e3 & 3) << 6) | e4;
- output += String.fromCharCode(chr1);
- if (e3 !== -1) output += String.fromCharCode(chr2);
- if (e4 !== -1) output += String.fromCharCode(chr3);
- }
- return output;
-}
-
-function safeParse(res) {
- if (!res) return null;
- if (typeof res === 'string') return JSON.parse(res);
- if (typeof res === 'object') {
- const content = res.content || res.body || (typeof res.data === 'string' ? res.data : null);
- return content ? JSON.parse(content) : res;
- }
- return null;
-}
-
-function getHeaders(platId) {
- if (platId === '星芽' && xingyaToken) return { ...aggConfig.headers.default, authorization: xingyaToken };
- if (platId === '碎片' && suipianToken) return { ...aggConfig.headers.default, Authorization: suipianToken };
- return aggConfig.headers.default;
-}
-
-async function init() {
- try {
- const res = await req(aggConfig.platform.星芽.loginUrl, {
- method: 'POST',
- headers: { 'User-Agent': 'okhttp/4.10.0', platform: '1', 'Content-Type': 'application/json' },
- body: JSON.stringify({ device: '24250683a3bdb3f118dff25ba4b1cba1a' })
- });
- const data = safeParse(res);
- xingyaToken = data?.data?.token || data?.token || '';
- } catch (e) { /* ignore */ }
- return true;
-}
-
-async function ensureSuipianToken() {
- if (suipianToken) return;
- try {
- const openId = guid();
- const res = await req('https://free-api.bighotwind.cc/papaya/papaya-api/oauth2/uuid', {
- method: 'POST',
- headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify({ openId })
- });
- const data = safeParse(res);
- suipianToken = data?.data?.token || '';
- } catch (e) { suipianToken = ''; }
-}
-
-async function home() {
- return JSON.stringify({ class: aggConfig.platformList.map(p => ({ type_name: p.name, type_id: p.id })) });
-}
-async function homeVod() { return await recommend(); }
-
-async function recommend() {
- const randomPlat = getRandomItem(aggConfig.platformList);
- const platId = randomPlat.id;
- const area = ruleFilterDef[platId]?.area || '';
- const videos = await fetchList(platId, area, 1, 10);
- return JSON.stringify({ list: videos.slice(0, 10) });
-}
-
-// Category & Search common fetch
-async function fetchList(platId, area, page, pageSize = 24) {
- const plat = aggConfig.platform[platId];
- if (!plat) return [];
-
- if (platId === '星芽' && !xingyaToken) await init();
- if (platId === '碎片') await ensureSuipianToken();
-
- try {
- let data = [];
- const headers = getHeaders(platId);
- const host = plat.host;
-
- switch (platId) {
- case '百度': {
- const res = await req(`${host}${plat.url1.replace('fyclass', area).replace('fypage', page)}`, { headers });
- const d = safeParse(res)?.data || [];
- data = d.map(i => ({ vod_id: `百度@${i.id}`, vod_name: i.title, vod_pic: i.cover, vod_remarks: `更新至${i.totalChapterNum}集` }));
- break;
- }
- case '甜圈': {
- const res = await req(`${host}${plat.url1}=${area}&offset=${page}`, { headers });
- const d = safeParse(res)?.data || [];
- data = d.map(i => ({ vod_id: `甜圈@${i.book_id}`, vod_name: i.title, vod_pic: i.cover, vod_remarks: i.copyright || '' }));
- break;
- }
- case '锦鲤': {
- const res = await req(`${host}${plat.search}`, { method: 'POST', body: JSON.stringify({ page, limit: pageSize, type_id: area, keyword: '' }) });
- const d = safeParse(res)?.data?.list || [];
- data = d.map(i => ({ vod_id: `锦鲤@${i.vod_id}`, vod_name: i.vod_name, vod_pic: i.vod_pic, vod_remarks: `${i.vod_total}集` }));
- break;
- }
- case '番茄': {
- const sessionId = new Date().toISOString().slice(0, 16).replace(/-|T:/g, '');
- const url = `${host}${plat.url1}?change_type=0&selected_items=${area}&tab_type=8&cell_id=6952850996422770718&version_tag=video_feed_refactor&device_id=1423244030195267&aid=1967&app_name=novelapp&ssmix=a&session_id=${sessionId}${page > 1 ? `&offset=${(page - 1) * 12}` : ''}`;
- const res = await req(url, { headers });
- const d = safeParse(res);
- const items = d?.data?.cell_view?.cell_data || (Array.isArray(d?.data) ? d.data : []);
- data = items.map(i => {
- const v = i.video_data?.[0] || i;
- return { vod_id: `番茄@${v.series_id || v.book_id || ''}`, vod_name: v.title, vod_pic: v.cover || v.horiz_cover, vod_remarks: v.sub_title || '' };
- });
- break;
- }
- case '星芽': {
- const res = await req(`${host}${plat.url1}=${area}&type=1&class2_ids=0&page_num=${page}&page_size=${pageSize}`, { headers });
- const d = safeParse(res)?.data?.list || [];
- data = d.map(i => ({ vod_id: `星芽@${host}${plat.url2}?theater_parent_id=${i.theater.id}`, vod_name: i.theater.title, vod_pic: i.theater.cover_url, vod_remarks: `${i.theater.total}集` }));
- break;
- }
- case '西饭': {
- const [typeId] = area.split('@');
- const url = `${host}${plat.url1}?reqType=aggregationPage&offset=${(page - 1) * 30}&categoryId=${typeId}`;
- const res = await req(url, { headers });
- const elements = safeParse(res)?.result?.elements || [];
- elements.forEach(s => (s.contents || []).forEach(v => {
- const d = v.duanjuVo;
- data.push({ vod_id: `西饭@${d.duanjuId}#${d.source}`, vod_name: d.title, vod_pic: d.coverImageUrl, vod_remarks: `${d.total}集` });
- }));
- break;
- }
- case '围观': {
- const res = await req(`${host}${plat.search}`, {
- method: 'POST', headers,
- body: JSON.stringify({ audience: "全部受众", page, pageSize, searchWord: "", subject: "全部主题" })
- });
- const d = safeParse(res)?.data || [];
- data = d.map(i => ({ vod_id: `围观@${i.oneId}`, vod_name: i.title, vod_pic: i.vertPoster, vod_remarks: `集数:${i.episodeCount} 播放:${i.viewCount}` }));
- break;
- }
- case '碎片': {
- const res = await req(`${host}${plat.search}?type=5&tagId=&pageNum=${page}&pageSize=${pageSize}`, { headers });
- const d = safeParse(res)?.list || [];
- data = d.map(i => {
- const id = `${i.itemId}@${i.videoCode}`;
- const pic = `https://speed.hiknz.com/papaya/papaya-file/files/download/${i.imageKey}/${i.imageName}`;
- return { vod_id: `碎片@${id}`, vod_name: i.title, vod_pic: pic, vod_remarks: `集数:${i.episodesMax} 播放:${i.hitShowNum}` };
- });
- break;
- }
- }
- return data;
- } catch { return []; }
-}
-
-async function category(tid, pg, filter, extend) {
- const page = parseInt(pg) || 1;
- const area = filter?.area || ruleFilterDef[tid]?.area || '';
- const videos = await fetchList(tid, area, page);
- return JSON.stringify({
- list: videos,
- page,
- pagecount: page + 1,
- limit: videos.length,
- total: videos.length * (page + 1)
- });
-}
-
-async function detail(id) {
- const [platId, ...rest] = id.split('@');
- const did = rest.join('@');
- const plat = aggConfig.platform[platId];
- if (!plat) return JSON.stringify({ list: [{ vod_id: id, vod_name: '平台不支持', vod_play_url: '' }] });
-
- if (platId === '星芽' && !xingyaToken) await init();
- if (platId === '碎片') await ensureSuipianToken();
-
- try {
- let vod = { vod_id: id, vod_name: '未知', vod_pic: '', vod_remarks: '', vod_content: '', vod_play_from: '', vod_play_url: '' };
- const headers = getHeaders(platId);
-
- switch (platId) {
- case '百度': {
- const res = safeParse(await req(`${plat.host}${plat.url2.replace('fyid', did)}`, { headers }));
- if (res) vod = { ...vod, vod_name: res.title, vod_pic: res.data?.[0]?.cover, vod_remarks: `更新至:${res.total || 0}集`, vod_play_from: '百度短剧', vod_play_url: (res.data || []).map(i => `${i.title}$${i.video_id}`).join('#') };
- break;
- }
- case '甜圈': {
- const res = safeParse(await req(`${plat.host}${plat.url2}=${did}`, { headers }));
- if (res) vod = { ...vod, vod_name: res.book_name || res.title, vod_pic: res.book_pic || res.cover, vod_remarks: `更新时间:${res.time}`, vod_content: res.desc, vod_play_from: '甜圈短剧', vod_play_url: (res.data || []).map(i => `${i.title || '第1集'}$${i.video_id || i.id}`).join('#') };
- break;
- }
- case '锦鲤': {
- const res = safeParse(await req(`${plat.host}${plat.url2}/${did}`, { headers }));
- if (res?.data) {
- const list = res.data;
- const urls = list.player ? Object.keys(list.player).map(k => `${k}$${list.player[k]}`) : [];
- vod = { ...vod, vod_name: list.vod_name, vod_pic: list.vod_pic, vod_remarks: list.vod_remarks, vod_play_from: '锦鲤短剧', vod_play_url: urls.join('#') };
- }
- break;
- }
- case '番茄': {
- const res = safeParse(await req(`${plat.url2}?book_id=${did}`, { headers }));
- if (res?.data) {
- const b = res.data.book_info;
- const u = (res.data.item_data_list || []).map(i => `${i.title}$${i.item_id}`).join('#');
- vod = { ...vod, vod_name: b.book_name, vod_pic: b.thumb_url, vod_remarks: `更新至${res.data.item_data_list?.length}集`, vod_play_from: '番茄短剧', vod_play_url: u };
- }
- break;
- }
- case '星芽': {
- const res = safeParse(await req(did, { headers }));
- if (res?.data) {
- const d = res.data;
- const u = (d.theaters || []).map(i => `${i.num}$${i.son_video_url}`).join('#');
- vod = { ...vod, vod_name: d.title, vod_pic: d.cover_url, vod_remarks: d.desc_tags + '', vod_play_from: '星芽短剧', vod_play_url: u };
- }
- break;
- }
- case '西饭': {
- const [duanjuId, source] = did.split('#');
- const url = `${plat.host}${plat.url2}?duanjuId=${duanjuId}&source=${source}`;
- const res = safeParse(await req(url, { headers }));
- if (res?.result) {
- const d = res.result;
- const u = (d.episodeList || []).map(e => `${e.index}$${e.playUrl}`).join('#');
- vod = { ...vod, vod_name: d.title, vod_pic: d.coverImageUrl, vod_remarks: d.updateStatus === 'over' ? `${d.total}集 已完结` : `更新${d.total}集`, vod_play_from: '西饭短剧', vod_play_url: u };
- }
- break;
- }
- case '围观': {
- const res = safeParse(await req(`${plat.host}${plat.url2}?oneId=${did}&page=1&pageSize=1000`, { headers }));
- if (res?.data?.length) {
- const d = res.data;
- vod = { ...vod, vod_name: d[0].title, vod_pic: d[0].vertPoster, vod_remarks: `共${d.length}集`, vod_play_from: '围观短剧', vod_play_url: d.map(e => `${e.title}第${e.playOrder}集$${e.playSetting}`).join('#') };
- }
- break;
- }
- case '碎片': {
- const [itemId, videoCode] = did.split('@');
- const res = safeParse(await req(`${plat.host}${plat.url2}?videoCode=${videoCode}&itemId=${itemId}`, { headers }));
- if (res) {
- const d = res.data || res;
- const pic = `https://speed.hiknz.com/papaya/papaya-file/files/download/${d.imageKey}/${d.imageName}`;
- const u = (d.episodesList || []).map(e => {
- const best = e.resolutionList?.sort((a, b) => b.resolution - a.resolution)[0];
- return best ? `第${e.episodes}集$https://speed.hiknz.com/papaya/papaya-file/files/download/${best.fileKey}/${best.fileName}` : null;
- }).filter(Boolean).join('#');
- vod = { ...vod, vod_name: d.title, vod_pic: pic, vod_remarks: `共${d.episodesMax || 0}集`, vod_play_from: '碎片剧场', vod_play_url: u };
- }
- break;
- }
- }
- return JSON.stringify({ list: [vod] });
- } catch {
- return JSON.stringify({ list: [{ vod_id: id, vod_name: '加载失败', vod_play_url: '' }] });
- }
-}
-
-async function play(flag, id) {
- const input = id;
- const defaultRes = () => JSON.stringify({ parse: 0, url: input });
-
- if (/百度/.test(flag)) {
- const res = safeParse(await req(`https://api.jkyai.top/API/bddjss.php?video_id=${input}`));
- if (res?.data?.qualities) {
- const order = ["1080p", "sc", "sd"];
- const qMap = { "1080p": "蓝光", "sc": "超清", "sd": "标清" };
- const urls = [];
- order.forEach(k => {
- const q = res.data.qualities.find(x => x.quality === k);
- if (q) urls.push(qMap[k], q.download_url);
- });
- return JSON.stringify({ parse: 0, url: urls });
- }
- }
-
- if (/甜圈/.test(flag)) {
- return JSON.stringify({ parse: 0, url: `https://mov.cenguigui.cn/duanju/api.php?video_id=${input}&type=mp4` });
- }
-
- if (/锦鲤/.test(flag)) {
- try {
- const html = await req(`${input}&auto=1`, { headers: { referer: 'https://www.jinlidj.com/' } });
- const str = typeof html === 'string' ? html : html.content || html.body || '{}';
- const match = str.match(/let data\s*=\s*({[^;]*});/);
- if (match) {
- const data = JSON.parse(match[1]);
- if (data.url) return JSON.stringify({ parse: 0, url: data.url });
- }
- } catch {}
- }
-
- if (/番茄/.test(flag)) {
- try {
- const res = safeParse(await req(`https://fqgo.52dns.cc/video?item_ids=${input}`));
- if (res?.data?.[input]?.video_model) {
- const model = JSON.parse(res.data[input].video_model);
- const mainUrl = model?.video_list?.video_1?.main_url;
- if (mainUrl) return JSON.stringify({ parse: 0, url: base64Decode(mainUrl) });
- }
- } catch { /* ignore */ }
- }
-
- if (/围观/.test(flag)) {
- try {
- const ps = typeof input === 'string' ? JSON.parse(input) : input;
- const urls = [];
- if (ps?.super) urls.push("超清", ps.super);
- if (ps?.high) urls.push("高清", ps.high);
- if (ps?.normal) urls.push("流畅", ps.normal);
- return JSON.stringify({ parse: 0, url: urls });
- } catch { return defaultRes(); }
- }
-
- return defaultRes();
-}
-
-async function search(wd, quick, pg) {
- const page = parseInt(pg) || 1;
- const timeout = aggConfig.search.timeout;
- const limit = aggConfig.search.limit;
-
- const promises = aggConfig.platformList.map(async p => {
- const plat = aggConfig.platform[p.id];
- try {
- if (p.id === '星芽' && !xingyaToken) await init();
- if (p.id === '碎片') await ensureSuipianToken();
-
- let res, data;
- const headers = getHeaders(p.id);
- const host = plat.host;
-
- switch (p.id) {
- case '百度':
- res = await req(`${host}${plat.search.replace('**', encodeURIComponent(wd)).replace('fypage', page)}`, { headers, timeout });
- data = (safeParse(res)?.data || []).map(i => ({ vod_id: `百度@${i.id}`, vod_name: i.title, vod_pic: i.cover, vod_remarks: `百度短剧|更新至${i.totalChapterNum}集` }));
- break;
- case '甜圈':
- res = await req(`${host}${plat.search}=${encodeURIComponent(wd)}&offset=${page}`, { headers, timeout });
- data = (safeParse(res)?.data || []).map(i => ({ vod_id: `甜圈@${i.book_id}`, vod_name: i.title, vod_pic: i.cover, vod_remarks: `甜圈短剧|${i.copyright}` }));
- break;
- case '锦鲤':
- res = await req(host + plat.search, { method: 'POST', body: JSON.stringify({ page, limit, keyword: wd }), timeout });
- data = (safeParse(res)?.data?.list || []).map(i => ({ vod_id: `锦鲤@${i.vod_id}`, vod_name: i.vod_name, vod_pic: i.vod_pic, vod_remarks: `锦鲤短剧|${i.vod_total}集` }));
- break;
- case '番茄':
- res = await req(`${plat.search}?keyword=${encodeURIComponent(wd)}&page=${page}`, { headers, timeout });
- data = (safeParse(res)?.data || []).map(i => ({ vod_id: `番茄@${i.series_id}`, vod_name: i.title, vod_pic: i.cover, vod_remarks: `番茄短剧|${i.sub_title}` }));
- break;
- case '星芽':
- res = await req(host + plat.search, { method: 'POST', headers, body: JSON.stringify({ text: wd }), timeout });
- data = (safeParse(res)?.data?.theater?.search_data || []).map(i => ({ vod_id: `星芽@${host}${plat.url2}?theater_parent_id=${i.id}`, vod_name: i.title, vod_pic: i.cover_url, vod_remarks: `星芽短剧|${i.total}集 播放:${i.play_amount_str}` }));
- break;
- case '碎片':
- res = await req(`${host}${plat.search}?type=5&tagId=&pageNum=${page}&pageSize=${limit}&title=${encodeURIComponent(wd)}`, { headers, timeout });
- data = (safeParse(res)?.list || []).map(i => {
- const id = `${i.itemId}@${i.videoCode}`;
- const pic = `https://speed.hiknz.com/papaya/papaya-file/files/download/${i.imageKey}/${i.imageName}`;
- return { vod_id: `碎片@${id}`, vod_name: i.title, vod_pic: pic, vod_remarks: `碎片剧场|集数:${i.episodesMax} 播放:${i.hitShowNum}` };
- });
- break;
- default:
- return [];
- }
- return data.filter(v => v.vod_name?.toLowerCase().includes(wd.toLowerCase()));
- } catch { return []; }
- });
-
- const results = (await Promise.allSettled(promises))
- .filter(r => r.status === 'fulfilled')
- .flatMap(r => r.value || []);
-
- return JSON.stringify({
- list: results,
- page,
- pagecount: page + 1,
- limit: results.length,
- total: results.length * (page + 1)
- });
-}
-
-export function __jsEvalReturn() {
- return { init, home, homeVod, category, detail, play, proxy: null, search };
-}
\ No newline at end of file
diff --git a/小米/api/AppToV5.py b/小米/api/AppToV5.py
deleted file mode 100644
index 1971ad1..0000000
--- a/小米/api/AppToV5.py
+++ /dev/null
@@ -1,225 +0,0 @@
-import sys, uuid, json
-from base.spider import Spider
-sys.path.append('..')
-
-class Spider(Spider):
- local_uuid = ''
- config = ''
- parsing_config = []
- token = ''
- headers = {
- 'User-Agent': "Dart/2.19 (dart:io)",
- 'Accept-Encoding': "gzip",
- 'appto-local-uuid': local_uuid,
- 'token': ''
- }
- line_order = []
- block_keywords = []
-
- def init(self, extend=""):
- try:
- self.token = ''
- if extend.startswith('{') and extend.endswith('}'):
- ext_dict = json.loads(extend.strip())
- self.host = ext_dict.get('host', '').strip()
- self.token = ext_dict.get('token', '').strip()
- line_order_input = ext_dict.get('line_order', '')
-
- line_order_str = ','.join(line_order_input) if isinstance(line_order_input, list) else str(line_order_input).strip()
-
- if '@' in line_order_str:
- order_part, block_part = line_order_str.split('@', 1)
- self.line_order = list({kw.strip().lower() for kw in order_part.split(',') if kw.strip()})
- self.block_keywords = list({kw.strip().lower() for kw in block_part.split(',') if kw.strip()})
- else:
- self.line_order = list({kw.strip().lower() for kw in line_order_str.split(',') if kw.strip()})
- self.block_keywords = []
- else:
- self.host = extend.strip()
- self.line_order = []
- self.block_keywords = []
-
- if not self.host.startswith('http'):
- return {}
- self.local_uuid = str(uuid.uuid4())
- self.headers['appto-local-uuid'] = self.local_uuid
- self.headers['token'] = self.token
- response = self.fetch(f'{self.host}/apptov5/v1/config/get?p=android&__platform=android', headers=self.headers).json()
- config = response['data']
- self.config = config
- parsing_conf = config['get_parsing']['lists']
- parsing_config = {}
- for i in parsing_conf:
- if len(i['config']) != 0:
- label = []
- for j in i['config']:
- if j['type'] == 'json':
- label.append(j['label'])
- parsing_config.update({i['key']: label})
- self.parsing_config = parsing_config
- except Exception as e:
- print(f'初始化异常:{e}')
- return {}
-
- def detailContent(self, ids):
- response = self.fetch(f"{self.host}/apptov5/v1/vod/getVod?id={ids[0]}", headers=self.headers).json()
- data3 = response['data']
- videos = []
- vod_play_url = ''
- vod_play_from = ''
-
- vod_play_list = data3['vod_play_list']
-
- if self.block_keywords:
- filtered_list = []
- for play_item in vod_play_list:
- show_val = play_item['player_info'].get('show', '').strip().lower()
- if not any(kw in show_val for kw in self.block_keywords):
- filtered_list.append(play_item)
- vod_play_list = filtered_list
-
- if self.line_order:
- def get_priority(play_item):
- show_val = play_item['player_info'].get('show', '').strip().lower()
- for idx, kw in enumerate(self.line_order):
- if kw in show_val:
- return idx
- return float('inf')
-
- vod_play_list = sorted(vod_play_list, key=get_priority, reverse=False)
-
- for i in vod_play_list:
- play_url = ''
- line_name = i['player_info'].get('show', '未知线路')
- from_value = i['player_info'].get('from', '')
- display_name = f"{line_name}({from_value})" if from_value else line_name
-
- for j in i['urls']:
- play_url += f"{j['name']}${i['player_info']['from']}@{j['url']}#"
- vod_play_from += display_name + '$$$'
- vod_play_url += play_url.rstrip('#') + '$$$'
-
- vod_play_url = vod_play_url.rstrip('$$$')
- vod_play_from = vod_play_from.rstrip('$$$')
- videos.append({
- 'vod_id': data3.get('vod_id'),
- 'vod_name': data3.get('vod_name'),
- 'vod_content': data3.get('vod_content', ''),
- 'vod_remarks': data3.get('vod_remarks'),
- 'vod_director': data3.get('vod_director'),
- 'vod_actor': data3.get('vod_actor'),
- 'vod_year': data3.get('vod_year'),
- 'vod_area': data3.get('vod_area'),
- 'vod_play_from': vod_play_from,
- 'vod_play_url': vod_play_url
- })
- return {'list': videos}
-
- def searchContent(self, key, quick, pg='1'):
- url = f"{self.host}/apptov5/v1/search/lists?wd={key}&page={pg}&type=&__platform=android"
- response = self.fetch(url, headers=self.headers).json()
- data = response['data']['data']
- for i in data:
- if i.get('vod_pic', '').startswith('mac://'):
- i['vod_pic'] = i['vod_pic'].replace('mac://', 'http://', 1)
- return {'list': data, 'page': pg, 'total': response['data']['total']}
-
- def playerContent(self, flag, id, vipflags):
- default_ua = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'
- parsing_config = self.parsing_config
- parts = id.split('@')
- if len(parts) != 2:
- return {'parse': 0, 'url': id, 'header': {'User-Agent': default_ua}}
- playfrom, rawurl = parts
- label_list = parsing_config.get(playfrom)
- if not label_list:
- return {'parse': 0, 'url': rawurl, 'header': {'User-Agent': default_ua}}
- result = {'parse': 1, 'url': rawurl, 'header': {'User-Agent': default_ua}}
- for label in label_list:
- payload = {
- 'play_url': rawurl,
- 'label': label,
- 'key': playfrom
- }
- try:
- response = self.post(
- f"{self.host}/apptov5/v1/parsing/proxy?__platform=android",
- data=payload,
- headers=self.headers
- ).json()
- except Exception as e:
- print(f"请求异常: {e}")
- continue
- if not isinstance(response, dict):
- continue
- if response.get('code') == 422:
- continue
- data = response.get('data')
- if not isinstance(data, dict):
- continue
- url = data.get('url')
- if not url:
- continue
- ua = data.get('UA') or data.get('UserAgent') or default_ua
- result = {
- 'parse': 0,
- 'url': url,
- 'header': {'User-Agent': ua}
- }
- break
- return result
-
- def homeContent(self, filter):
- config = self.config
- if not config:
- return {}
- home_cate = config['get_home_cate']
- classes = []
- for i in home_cate:
- if isinstance(i.get('extend', []), dict):
- classes.append({'type_id': i['cate'], 'type_name': i['title']})
- return {'class': classes}
-
- def homeVideoContent(self):
- response = self.fetch(f'{self.host}/apptov5/v1/home/data?id=1&mold=1&__platform=android', headers=self.headers).json()
- data = response['data']
- vod_list = []
- for i in data['sections']:
- for j in i['items']:
- vod_pic = j.get('vod_pic', '')
- if vod_pic.startswith('mac://'):
- vod_pic = vod_pic.replace('mac://', 'http://', 1)
- vod_list.append({
- "vod_id": j.get('vod_id'),
- "vod_name": j.get('vod_name'),
- "vod_pic": vod_pic,
- "vod_remarks": j.get('vod_remarks')
- })
- return {'list': vod_list}
-
- def categoryContent(self, tid, pg, filter, extend):
- response = self.fetch(
- f"{self.host}/apptov5/v1/vod/lists?area={extend.get('area','')}&lang={extend.get('lang','')}&year={extend.get('year','')}&order={extend.get('sort','time')}&type_id={tid}&type_name=&page={pg}&pageSize=21&__platform=android",
- headers=self.headers
- ).json()
- data = response['data']
- data2 = data['data']
- for i in data['data']:
- if i.get('vod_pic','').startswith('mac://'):
- i['vod_pic'] = i['vod_pic'].replace('mac://', 'http://', 1)
- return {'list': data2, 'page': pg, 'total': data['total']}
-
- def getName(self):
- pass
-
- def isVideoFormat(self, url):
- pass
-
- def manualVideoCheck(self):
- pass
-
- def destroy(self):
- pass
-
- def localProxy(self, param):
- pass
diff --git a/小米/spider.jar b/小米/spider.jar
index 8b41402..35ab3a9 100644
Binary files a/小米/spider.jar and b/小米/spider.jar differ
diff --git a/摸鱼儿/api.json b/摸鱼儿/api.json
index 365f4ba..db88a3d 100644
--- a/摸鱼儿/api.json
+++ b/摸鱼儿/api.json
@@ -1,7 +1,7 @@
{
"spider": "./spider.jar",
"logo": "https://open.wya6.com/d/down/2026/logo.gif",
- "wallpaper": "http://127.0.0.1:9978/proxy?do=wallpaper",
+ "wallpaper": "http://127.0.0.1:5266/wallpaper",
"sites": [
{
"key": "Douban",
@@ -107,6 +107,14 @@
"api": "csp_AppFox",
"ext": "p+FPtr6fYIfomOnA4N4Sl0dFvFqJvfkho3Yem3nNyo6peH9nVFr0wIIfo96V7voEHGrq+0mvfYjwri/nkrWITQ=="
},
+ {
+ "key": "看呗",
+ "name": "看呗|APP",
+ "type": 3,
+ "searchable": 1,
+ "api": "csp_AppGet",
+ "ext": "bB1iyOjtXWh234iOsqOpQ65mKOL2sRd+RcTIk0cmjrD8688Xw5ArmjN9zmaBcFgVgymXypm6lVMfsF9YOHbdKm0QT6K8/+z1B6YhKTatmFsNRMAw995p8MscOfu0wUGg"
+ },
{
"key": "jumeng",
"name": "剧梦|APP",
@@ -146,7 +154,7 @@
"changeable": "1",
"quickSearch": 0,
"filterable": 1,
- "ext": "sCnv2gwYzALZxDcfyX62oSKxLlLfPpOEf+mKvMQvSpMDoEavlzj4ib+jrumGW1Thrn8REq84SGVeJzq6F/vNAQbZlJ0rkT2djKJq4bTW1XFoW302XV0p+ZSEqBozzdjbdOxaZv+zZWCbSmIlsvXQU5cnwEBCx4/vTVK7uRAHKMytMSWmTqvFCAsCim4kXYme"
+ "ext": "sCnv2gwYzALZxDcfyX62oRPMT83Bt3Q5r5Q6ZwZ7Qq7ZfJZDdC8XcpJTArOjxs1hHGrH7JX/hlcGzED0RCFI/s5GJg5ZWPlTtK+GsArjWDyxNkvAnyr0ju34UuSCxQLD322RSid4K96h74Nx/SiPlH1VjrRyIHMEIfDj/wTAjZGrqJ89zsewId3PXJEpHlqc7ewAudH5J9EGzdit7AYOug=="
},
{
"key": "Guwo",
@@ -435,7 +443,7 @@
},
{
"key": "ReBoYingShi",
- "name": "雪映|影视",
+ "name": "热播|影视",
"type": 3,
"api": "csp_ReBoYingShi",
"searchable": 1,
@@ -443,7 +451,7 @@
},
{
"key": "DianYingYunJi",
- "name": "河清|影视",
+ "name": "云集|影视",
"type": 3,
"api": "csp_DianYingYunJi",
"searchable": 1,
@@ -474,7 +482,7 @@
},
{
"key": "Hema",
- "name": "河马|影视",
+ "name": "河马|短剧",
"type": 3,
"api": "csp_Hema",
"searchable": 1,
@@ -508,6 +516,14 @@
"quickSearch": 1,
"filterable": 1
},
+ {
+ "key": "番薯动漫",
+ "name": "番薯丨动漫",
+ "type": 3,
+ "quickSearch": 1,
+ "api": "csp_AppGet",
+ "ext": "N5u2FS3i/elUFAoSVYBzne8+r0r/kX1E+KdfHQ6FVY6/wHmWZoFfjCv2f3YfjfSbJm0/trORuqYE1PzwW9Z2IT6SnMHG1Beaes3+9Ad9p9Dy7MPFARRTA33haDFOP4SZtpBkd4utjKPyprZNVKMxvA=="
+ },
{
"key": "mifun",
"name": "米饭|动漫",
@@ -636,6 +652,13 @@
]
}
},
+ {
+ "key": "TuneFree",
+ "name": "自由|音乐",
+ "type": 3,
+ "api": "csp_TuneFree",
+ "searchable": 1
+ },
{
"key": "Music24bit",
"name": "无损|音乐",
@@ -653,13 +676,6 @@
]
}
},
- {
- "key": "TuneFree",
- "name": "自由|音乐",
- "type": 3,
- "api": "csp_TuneFree",
- "searchable": 1
- },
{
"key": "Kanqiu",
"name": "看球|体育",
diff --git a/摸鱼儿/spider.jar b/摸鱼儿/spider.jar
index 2631a2a..37f4ff3 100644
Binary files a/摸鱼儿/spider.jar and b/摸鱼儿/spider.jar differ
diff --git a/欧歌/api.json b/欧歌/api.json
index 6f2fbc2..82811a9 100644
--- a/欧歌/api.json
+++ b/欧歌/api.json
@@ -13,14 +13,14 @@
"sites": [
{
"key": "豆瓣2",
- "name": "📢网络收集勿演示贩卖!严谨用于任何商业用途!",
+ "name": "📢免费仅限测试用,请勿演示贩卖购买,谨防上当受骗!",
"type": 3,
"api": "csp_Douban",
"searchable": 0
},
{
"key": "豆瓣1",
- "name": "📢公告❤更新01.14❤",
+ "name": "📢公告❤更新01.19❤",
"type": 3,
"api": "csp_Notice",
"searchable": 1,
@@ -64,7 +64,7 @@
],
"url_key": "wogg1",
"threadinfo": {
- "chunksize": 261,
+ "chunksize": 217,
"threads": 16
}
}
@@ -86,7 +86,7 @@
],
"url_key": "woog2",
"threadinfo": {
- "chunksize": 243,
+ "chunksize": 288,
"threads": 16
}
}
@@ -108,12 +108,6 @@
]
}
},
- {
- "key": "荐片",
- "name": "💡荐片|影视",
- "api": "csp_JianPian",
- "type": 3
- },
{
"key": "热播影视",
"name": "💡热播|影视",
@@ -127,15 +121,301 @@
}
},
{
- "key": "浪酷影视",
- "name": "💡浪酷|影视",
+ "key": "农民影视",
+ "name": "💡农民|影视",
+ "type": 3,
+ "api": "csp_Wwys",
+ "ext": "https://vip.wwgz.cn:5200"
+ },
+ {
+ "key": "荐片",
+ "name": "💡荐片|影视",
+ "api": "csp_JianPian",
+ "type": 3
+ },
+ {
+ "key": "小猪",
+ "name": "👑小猪丨弹幕",
"type": 3,
- "api": "csp_AppRJ",
- "searchable": 1,
"quickSearch": 1,
- "filterable": 0,
+ "api": "csp_AppQi",
"ext": {
- "url": "http://v.lkuys.cn"
+ "url": "",
+ "site": "https://tiantangyoulu.oss-cn-beijing.aliyuncs.com/tengxunyun.txt",
+ "dataKey": "seb5tq9mykp2w9ry",
+ "dataIv": "seb5tq9mykp2w9ry",
+ "deviceId": "",
+ "version": "",
+ "ua": "okhttp/3.10.0"
+ }
+ },
+ {
+ "key": "鲸鱼",
+ "name": "👑鲸鱼丨弹幕",
+ "type": 3,
+ "quickSearch": 1,
+ "api": "csp_AppQi",
+ "ext": {
+ "site": "https://jingyu4k-1312635929.cos.ap-nanjing.myqcloud.com/1.json",
+ "dataKey": "AAdgrdghjfgswerA",
+ "dataIv": "AAdgrdghjfgswerA"
+ }
+ },
+ {
+ "key": "数字",
+ "name": "👑数字丨弹幕",
+ "type": 3,
+ "quickSearch": 1,
+ "api": "csp_AppGet",
+ "ext": {
+ "url": "http://app1-0-0.87333.cc",
+ "dataKey": "VwsHxkCViDXEExWa",
+ "dataIv": "VwsHxkCViDXEExWa"
+ }
+ },
+ {
+ "key": "八天",
+ "name": "👑八天丨弹幕",
+ "type": 3,
+ "quickSearch": 1,
+ "api": "csp_AppGet",
+ "ext": {
+ "url": "https://dy.8ttv.cn",
+ "site": "",
+ "dataKey": "1111111111111111",
+ "dataIv": "1111111111111111",
+ "deviceId": "",
+ "version": "",
+ "ua": ""
+ }
+ },
+ {
+ "key": "茉莉",
+ "name": "👑茉莉|弹幕",
+ "type": 3,
+ "searchable": 1,
+ "api": "csp_AppGet",
+ "ext": {
+ "site": "https://gitee.com/wmmoliill/wimg/raw/master/img/bk/9.txt",
+ "dataKey": "88689667dce61725",
+ "dataIv": "88689667dce61725"
+ }
+ },
+ {
+ "key": "驿站",
+ "name": "👑驿站|弹幕",
+ "type": 3,
+ "quickSearch": 1,
+ "api": "csp_AppGet",
+ "ext": {
+ "site": "https://dyyztvappapigoodgx.68.gy:12689/ciwk28vu38io8/apiurl.txt",
+ "dataKey": "dyyztvapiappyyds",
+ "dataIv": "dyyztvapiappyyds"
+ }
+ },
+ {
+ "key": "火锅",
+ "name": "👑火锅|弹幕",
+ "type": 3,
+ "quickSearch": 1,
+ "api": "csp_AppGet",
+ "ext": {
+ "url": "https://ios.hgyx.vip",
+ "dataKey": "062dec75d039980e",
+ "dataIv": "062dec75d039980e",
+ "ua": "Dart/3.5 (dart:io)"
+ }
+ },
+ {
+ "key": "粉象世界",
+ "name": "👑粉象|弹幕",
+ "type": 3,
+ "changeable": 0,
+ "api": "csp_AppFox",
+ "ext": {
+ "host": "http://121.40.131.51:2556/host.json",
+ "ver": 2
+ }
+ },
+ {
+ "key": "小猫",
+ "name": "👑小猫┃影视",
+ "type": 3,
+ "searchable": 1,
+ "changeable": 1,
+ "api": "csp_AppGet",
+ "ext": {
+ "site": "http://xywlkj.oss-cn-beijing.aliyuncs.com/wp-content/uploads/2024/12/1.txt",
+ "dataKey": "xmyxmyxywlkjxywl",
+ "dataIv": "xmyxmyxywlkjxywl"
+ }
+ },
+ {
+ "key": "木瓜",
+ "name": "👑木瓜┃影视",
+ "type": 3,
+ "changeable": 0,
+ "api": "csp_AppFox",
+ "ext": {
+ "host": "http://www.yezitv.top/dtym.json",
+ "ver": 2
+ }
+ },
+ {
+ "key": "麒麟",
+ "name": "👑麒麟┃影视",
+ "type": 3,
+ "changeable": 0,
+ "api": "csp_AppFox",
+ "ext": {
+ "host": "https://qh.70qh.top",
+ "ver": 2
+ }
+ },
+ {
+ "key": "粉象",
+ "name": "👑粉象┃影视",
+ "type": 3,
+ "changeable": 0,
+ "api": "csp_AppFox",
+ "ext": {
+ "host": "http://121.40.131.51:2556/host.json",
+ "ver": 2
+ }
+ },
+ {
+ "key": "仓鼠",
+ "name": "👑仓鼠|影视",
+ "type": 3,
+ "quickSearch": 1,
+ "api": "csp_AppQi",
+ "ext": {
+ "url": "https://hk440cms.cs4k.top",
+ "dataKey": "fL7sY4zN4kB3pG4p",
+ "dataIv": "fL7sY4zN4kB3pG4p",
+ "init": "initV122",
+ "ua": "okhttp/3.10.0"
+ }
+ },
+ {
+ "key": "影视",
+ "name": "👑影视┃影视",
+ "type": 3,
+ "searchable": 1,
+ "changeable": 1,
+ "api": "csp_AppGet",
+ "ext": {
+ "host": "https://jingyu4k-1312635929.cos.ap-nanjing.myqcloud.com/1.json",
+ "datakey": "AAdgrdghjfgswerA",
+ "api": 2
+ }
+ },
+ {
+ "key": "奇奇",
+ "name": "👑奇奇|弹幕",
+ "type": 3,
+ "api": "csp_AppQi",
+ "ext": {
+ "site": "https://yun-1316442804.cos.ap-guangzhou.myqcloud.com/a.txt",
+ "dataKey": "123456789abcdefg",
+ "dataIv": "123456789abcdefg"
+ }
+ },
+ {
+ "key": "方圆",
+ "name": "👑方圆|弹幕",
+ "type": 3,
+ "searchable": 1,
+ "api": "csp_AppGet",
+ "ext": {
+ "url": "https://fyys1.fytd.top",
+ "dataKey": "0ef6fc92a64b4ee7",
+ "dataIv": "0ef6fc92a64b4ee7"
+ }
+ },
+ {
+ "key": "看呗",
+ "name": "👑看呗|弹幕",
+ "type": 3,
+ "searchable": 1,
+ "api": "csp_AppGet",
+ "ext": {
+ "url": "http://www.winter1.fun",
+ "dataKey": "abcdefghigklmn11",
+ "dataIv": "abcdefghigklmn11"
+ }
+ },
+ {
+ "key": "小猫影视",
+ "name": "👑小猫|弹幕",
+ "type": 3,
+ "searchable": 1,
+ "api": "csp_AppGet",
+ "ext": {
+ "site": "http://xywlkj.oss-cn-beijing.aliyuncs.com/wp-content/uploads/2024/12/1.txt",
+ "dataKey": "xmyxmyxywlkjxywl",
+ "dataIv": "xmyxmyxywlkjxywl"
+ }
+ },
+ {
+ "key": "气球",
+ "name": "👑气球|弹幕",
+ "type": 3,
+ "api": "csp_AppGet",
+ "ext": {
+ "url": "https://vv.229d.cn",
+ "dataKey": "8888888888888888",
+ "dataIv": "8888888888888888"
+ }
+ },
+ {
+ "key": "随看",
+ "name": "👑随看|弹幕",
+ "type": 3,
+ "api": "csp_AppGet",
+ "ext": {
+ "url": "https://suikan.tpmbt.cn",
+ "dataKey": "pHQsm6wjYaCuSPEz",
+ "dataIv": "pHQsm6wjYaCuSPEz"
+ }
+ },
+ {
+ "key": "白鸽",
+ "name": "👑白鸽|弹幕",
+ "type": 3,
+ "searchable": 1,
+ "changeable": 1,
+ "api": "csp_AppGet",
+ "ext": {
+ "url": "https://cy.baige.asia",
+ "dataKey": "599D0FE5178642FD",
+ "dataIv": "599D0FE5178642FD"
+ }
+ },
+ {
+ "key": "剧梦",
+ "name": "👑剧梦|弹幕",
+ "type": 3,
+ "searchable": 1,
+ "changeable": 1,
+ "api": "csp_AppGet",
+ "ext": {
+ "url": "https://www.jumengwu.com",
+ "dataKey": "1f0a873caf2550a5",
+ "dataIv": "1f0a873caf2550a5"
+ }
+ },
+ {
+ "key": "魔方",
+ "name": "👑魔方|弹幕",
+ "type": 3,
+ "searchable": 1,
+ "changeable": 1,
+ "api": "csp_AppGet",
+ "ext": {
+ "site": "https://snysw.xyz/mf4kzs327.txt",
+ "dataKey": "1234567887654321",
+ "dataIv": "1234567887654321"
}
},
{
@@ -165,12 +445,6 @@
"quickSearch": 1,
"filterable": 1
},
- {
- "key": "三六零",
- "name": "💡三六|视频",
- "type": 3,
- "api": "csp_SP360"
- },
{
"key": "奇优影视",
"name": "💡奇优|影视",
@@ -218,259 +492,6 @@
"jar": "./jars/柠檬.jar",
"ext": "7lj763gg402i7942503g839jg74h8h88highi40799jh6i6k454419l0l5184k0g549h0kg2i01i838i2h42g891lgg1"
},
- {
- "key": "聚搜",
- "name": "🐢聚搜┃影视",
- "type": 3,
- "api": "./api/072e7d2e5c69f201f0bf58ee5ec55b2b.py",
- "ext": "http://101.35.85.16:5555"
- },
- {
- "key": "巧技2",
- "name": "🔍搜艘┃影视",
- "type": 3,
- "searchable": 1,
- "quickSearch": 1,
- "api": "csp_qiao2",
- "playerType": 2,
- "jar": "./jars/巧技2.jar",
- "ext": "7lj763gg402i7942412h849jg1558j9jl8g19213il86316k465719lik158491h179312h4934183ig2l05g9"
- },
- {
- "key": "顾我",
- "name": "👑顾我|弹幕",
- "type": 3,
- "api": "csp_AppQi",
- "changeable": "1",
- "quickSearch": 0,
- "filterable": 1,
- "ext": {
- "site": "https://guwozj-1319364746.cos.ap-guangzhou.myqcloud.com/guwo.txt",
- "dataKey": "ca94b06ca3c7d80e",
- "dataIv": "ca94b06ca3c7d80e",
- "ua": "okhttp/3.10.0"
- }
- },
- {
- "key": "云云",
- "name": "👑云云丨弹幕",
- "type": 3,
- "quickSearch": 1,
- "api": "csp_AppQi",
- "ext": {
- "site": "https://staraugust123456.oss-cn-hangzhou.aliyuncs.com/2.txt",
- "dataKey": "staraugust123456",
- "dataIv": "staraugust123456",
- "version": "120"
- }
- },
- {
- "key": "小猪",
- "name": "👑小猪丨弹幕",
- "type": 3,
- "quickSearch": 1,
- "api": "csp_AppQi",
- "ext": {
- "url": "",
- "site": "https://tiantangyoulu.oss-cn-beijing.aliyuncs.com/tengxunyun.txt",
- "dataKey": "seb5tq9mykp2w9ry",
- "dataIv": "seb5tq9mykp2w9ry",
- "deviceId": "",
- "version": "",
- "ua": "okhttp/3.10.0"
- }
- },
- {
- "key": "金牌2",
- "name": "👑金牌丨弹幕",
- "type": 3,
- "searchable": 1,
- "changeable": 1,
- "api": "csp_AppQi",
- "ext": {
- "site": "https://dtqj1.gg1080.com:443/dtjp.txt",
- "dataKey": "kecbio48dsq131ed",
- "dataIv": "kecbio48dsq131ed"
- }
- },
- {
- "key": "布雷",
- "name": "👑布雷丨弹幕",
- "type": 3,
- "quickSearch": 1,
- "api": "csp_AppQi",
- "ext": {
- "site": "https://ceshi307386.oss-cn-beijing.aliyuncs.com/blurl.txt",
- "dataKey": "5f2b7ed203a3a581",
- "dataIv": "5f2b7ed203a3a581",
- "version": "120"
- }
- },
- {
- "key": "仓鼠",
- "name": "👑仓鼠丨弹幕",
- "type": 3,
- "quickSearch": 1,
- "api": "csp_AppQi",
- "ext": {
- "site": "https://ceshi307386.oss-cn-beijing.aliyuncs.com/ceshi430.txt",
- "dataKey": "7sKhdca8HXGuyZ4x",
- "dataIv": "7sKhdca8HXGuyZ4x",
- "version": "120"
- }
- },
- {
- "key": "鲸鱼",
- "name": "👑鲸鱼丨弹幕",
- "type": 3,
- "quickSearch": 1,
- "api": "csp_AppQi",
- "ext": {
- "site": "https://jingyu4k-1312635929.cos.ap-nanjing.myqcloud.com/1.json",
- "dataKey": "AAdgrdghjfgswerA",
- "dataIv": "AAdgrdghjfgswerA"
- }
- },
- {
- "key": "数字",
- "name": "👑数字丨弹幕",
- "type": 3,
- "quickSearch": 1,
- "api": "csp_AppGet",
- "ext": {
- "url": "http://app1-0-0.87333.cc",
- "dataKey": "VwsHxkCViDXEExWa",
- "dataIv": "VwsHxkCViDXEExWa"
- }
- },
- {
- "key": "丫丫",
- "name": "👑丫丫|弹幕",
- "type": 3,
- "quickSearch": 1,
- "api": "csp_AppGet",
- "ext": {
- "url": "http://tv.yy-fun.cc",
- "dataKey": "qkxnwkfjwpcnwycl",
- "dataIv": "qkxnwkfjwpcnwycl",
- "deviceId": "",
- "version": ""
- }
- },
- {
- "key": "八天",
- "name": "👑八天丨弹幕",
- "type": 3,
- "quickSearch": 1,
- "api": "csp_AppGet",
- "ext": {
- "url": "https://dy.8ttv.cn",
- "site": "",
- "dataKey": "1111111111111111",
- "dataIv": "1111111111111111",
- "deviceId": "",
- "version": "",
- "ua": ""
- }
- },
- {
- "key": "茉莉",
- "name": "👑茉莉|弹幕",
- "type": 3,
- "searchable": 1,
- "api": "csp_AppGet",
- "ext": {
- "site": "https://gitee.com/wmmoliill/wimg/raw/master/img/bk/9.txt",
- "dataKey": "88689667dce61725",
- "dataIv": "88689667dce61725"
- }
- },
- {
- "key": "旗星",
- "name": "👑旗星|弹幕",
- "type": 3,
- "quickSearch": 1,
- "api": "csp_AppGet",
- "ext": {
- "url": "http://ys.qist.top",
- "dataKey": "2SWSPFxugBLPPOKo",
- "dataIv": "2SWSPFxugBLPPOKo",
- "version": "120"
- }
- },
- {
- "key": "驿站",
- "name": "👑驿站|弹幕",
- "type": 3,
- "quickSearch": 1,
- "api": "csp_AppGet",
- "ext": {
- "site": "https://dyyztvappapigoodgx.68.gy:12689/ciwk28vu38io8/apiurl.txt",
- "dataKey": "dyyztvapiappyyds",
- "dataIv": "dyyztvapiappyyds"
- }
- },
- {
- "key": "火锅",
- "name": "👑火锅|弹幕",
- "type": 3,
- "quickSearch": 1,
- "api": "csp_AppGet",
- "ext": {
- "url": "https://ios.hgyx.vip",
- "dataKey": "062dec75d039980e",
- "dataIv": "062dec75d039980e",
- "ua": "Dart/3.5 (dart:io)"
- }
- },
- {
- "key": "粉象世界",
- "name": "👑粉象|弹幕",
- "type": 3,
- "changeable": 0,
- "api": "csp_AppFox",
- "ext": {
- "host": "http://121.40.131.51:2556/host.json",
- "ver": 2
- }
- },
- {
- "key": "老丫",
- "name": "👑老雅┃影视",
- "type": 3,
- "searchable": 1,
- "quickSearch": 1,
- "filterable": 1,
- "changeable": 1,
- "api": "./api/c971b46d3dedf50d9cb99ae963206db6.js",
- "ext": {
- "host": "https://app2512.ystva.com"
- }
- },
- {
- "key": "小猫",
- "name": "👑小猫┃影视",
- "type": 3,
- "searchable": 1,
- "changeable": 1,
- "api": "csp_AppGet",
- "ext": {
- "site": "http://xywlkj.oss-cn-beijing.aliyuncs.com/wp-content/uploads/2024/12/1.txt",
- "dataKey": "xmyxmyxywlkjxywl",
- "dataIv": "xmyxmyxywlkjxywl"
- }
- },
- {
- "key": "花柳",
- "name": "👑花柳┃影视",
- "type": 3,
- "changeable": 0,
- "api": "csp_AppFox",
- "ext": {
- "host": "http://nico.oiio.fun",
- "ver": 2
- }
- },
{
"key": "cat_荐片app",
"name": "🥇荐片|备用",
@@ -1475,7 +1496,25 @@
"quickSearch": 1,
"filterable": 1,
"changeable": 1,
- "api": "https://xvt68j53fh.coze.site/api/proxy/browse?u=aHR0cHM6Ly9ieTEuNDMwNTIwLnh5ei93Yi9kb3duLnBocC85M2UwZGVjZWZlM2EyYWQ4OTQ5YzVmZTM4OWQ2Y2FiMi5qcw%3D%3D&mode=browse"
+ "api": "./api/93e0decefe3a2ad8949c5fe389d6cab2.js"
+ },
+ {
+ "key": "采集之王",
+ "name": "🐢采集|合集",
+ "type": 3,
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/采集之王.js?type=url¶ms=https://cdn.jsdmirror.com/gh/ouhaibo1980/tvbox@main/json/采集静态.json$1$1"
+ },
+ {
+ "key": "巧技2",
+ "name": "🔍搜艘┃影视",
+ "type": 3,
+ "searchable": 1,
+ "quickSearch": 1,
+ "api": "csp_qiao2",
+ "playerType": 2,
+ "jar": "./jars/巧技2.jar",
+ "ext": "7lj763gg402i7942412h849jg1558j9jl8g19213il86316k465719lik158491h179312h4934183ig2l05g9"
},
{
"key": "push_agent",
@@ -1519,7 +1558,7 @@
{
"name": "失败手动换",
"type": "1",
- "url": "https://by1.nxog.eu.org/jx.php?ou=74&mz=0&url=",
+ "url": "https://by1.nxog.eu.org/jx.php?ou=77&mz=0&url=",
"ext": {
"header": {
"user-agent": "Mozilla/5.0(Linux;Android13;V2049ABuild/TP1A.220624.014;wv)AppleWebKit/537.36(KHTML,likeGecko)Version/4.0Chrome/116.0.0.0MobileSafari/537.36"
@@ -1529,17 +1568,17 @@
{
"name": "-关注-",
"type": 1,
- "url": "https://by1.nxog.eu.org/jx.php?ou=74&mz=1&url="
+ "url": "https://by1.nxog.eu.org/jx.php?ou=77&mz=1&url="
},
{
"name": "-装歌API-",
"type": 1,
- "url": "https://by1.nxog.eu.org/jx.php?ou=74&mz=2&url="
+ "url": "https://by1.nxog.eu.org/jx.php?ou=77&mz=2&url="
},
{
"name": "-公众号-",
"type": 1,
- "url": "https://by1.nxog.eu.org/jx.php?ou=74&mz=3&url="
+ "url": "https://by1.nxog.eu.org/jx.php?ou=77&mz=3&url="
},
{
"name": "装歌APP",
diff --git a/欧歌/api/072e7d2e5c69f201f0bf58ee5ec55b2b.py b/欧歌/api/072e7d2e5c69f201f0bf58ee5ec55b2b.py
deleted file mode 100644
index 76a95d4..0000000
--- a/欧歌/api/072e7d2e5c69f201f0bf58ee5ec55b2b.py
+++ /dev/null
@@ -1,187 +0,0 @@
-# -*- coding: utf-8 -*-
-# 本资源来源于互联网公开渠道,仅可用于个人学习及爬虫技术交流。
-# 严禁将其用于任何商业用途,下载后请于 24 小时内删除,搜索结果均来自源站,本人不承担任何责任。
-"""
-{
- "key": "xxx",
- "name": "xxx",
- "type": 3,
- "api": "./ApptoV5无加密.py",
- "ext": "http://domain.com"
-}
-"""
-
-import re,sys,uuid
-from base.spider import Spider
-sys.path.append('..')
-
-class Spider(Spider):
- host,config,local_uuid,parsing_config = '','','',[]
- headers = {
- 'User-Agent': "Dart/2.19 (dart:io)",
- 'Accept-Encoding': "gzip",
- 'appto-local-uuid': local_uuid
- }
-
- def init(self, extend=''):
- try:
- host = extend.strip()
- if not host.startswith('http'):
- return {}
- if not re.match(r'^https?://[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(:\d+)?/?$', host):
- host_=self.fetch(host).json()
- self.host = host_['domain']
- else:
- self.host = host
- self.local_uuid = str(uuid.uuid4())
- response = self.fetch(f'{self.host}/apptov5/v1/config/get?p=android&__platform=android', headers=self.headers).json()
- config = response['data']
- self.config = config
- parsing_conf = config['get_parsing']['lists']
- parsing_config = {}
- for i in parsing_conf:
- if len(i['config']) != 0:
- label = []
- for j in i['config']:
- if j['type'] == 'json':
- label.append(j['label'])
- parsing_config.update({i['key']:label})
- self.parsing_config = parsing_config
- return None
- except Exception as e:
- print(f'初始化异常:{e}')
- return {}
-
- def detailContent(self, ids):
- response = self.fetch(f"{self.host}/apptov5/v1/vod/getVod?id={ids[0]}",headers=self.headers).json()
- data3 = response['data']
- videos = []
- vod_play_url = ''
- vod_play_from = ''
- for i in data3['vod_play_list']:
- play_url = ''
- for j in i['urls']:
- play_url += f"{j['name']}${i['player_info']['from']}@{j['url']}#"
- vod_play_from += i['player_info']['show'] + '$$$'
- vod_play_url += play_url.rstrip('#') + '$$$'
- vod_play_url = vod_play_url.rstrip('$$$')
- vod_play_from = vod_play_from.rstrip('$$$')
- videos.append({
- 'vod_id': data3.get('vod_id'),
- 'vod_name': data3.get('vod_name'),
- 'vod_content': data3.get('vod_content'),
- 'vod_remarks': data3.get('vod_remarks'),
- 'vod_director': data3.get('vod_director'),
- 'vod_actor': data3.get('vod_actor'),
- 'vod_year': data3.get('vod_year'),
- 'vod_area': data3.get('vod_area'),
- 'vod_play_from': vod_play_from,
- 'vod_play_url': vod_play_url
- })
- return {'list': videos}
-
- def searchContent(self, key, quick, pg='1'):
- url = f"{self.host}/apptov5/v1/search/lists?wd={key}&page={pg}&type=&__platform=android"
- response = self.fetch(url, headers=self.headers).json()
- data = response['data']['data']
- for i in data:
- if i.get('vod_pic').startswith('mac://'):
- i['vod_pic'] = i['vod_pic'].replace('mac://', 'http://', 1)
- return {'list': data, 'page': pg, 'total': response['data']['total']}
-
- def playerContent(self, flag, id, vipflags):
- default_ua = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'
- parsing_config = self.parsing_config
- parts = id.split('@')
- if len(parts) != 2:
- return {'parse': 0, 'url': id, 'header': {'User-Agent': default_ua}}
- playfrom, rawurl = parts
- label_list = parsing_config.get(playfrom)
- if not label_list:
- return {'parse': 0, 'url': rawurl, 'header': {'User-Agent': default_ua}}
- result = {'parse': 1, 'url': rawurl, 'header': {'User-Agent': default_ua}}
- for label in label_list:
- payload = {
- 'play_url': rawurl,
- 'label': label,
- 'key': playfrom
- }
- try:
- response = self.post(
- f"{self.host}/apptov5/v1/parsing/proxy?__platform=android",
- data=payload,
- headers=self.headers
- ).json()
- except Exception as e:
- print(f"请求异常: {e}")
- continue
- if not isinstance(response, dict):
- continue
- if response.get('code') == 422:
- continue
- data = response.get('data')
- if not isinstance(data, dict):
- continue
- url = data.get('url')
- if not url:
- continue
- ua = data.get('UA') or data.get('UserAgent') or default_ua
- result = {
- 'parse': 0,
- 'url': url,
- 'header': {'User-Agent': ua}
- }
- break
- return result
-
- def homeContent(self, filter):
- config = self.config
- if not config:
- return {}
- home_cate = config['get_home_cate']
- classes = []
- for i in home_cate:
- if isinstance(i.get('extend', []),dict):
- classes.append({'type_id': i['cate'], 'type_name': i['title']})
- return {'class': classes}
-
- def homeVideoContent(self):
- response = self.fetch(f'{self.host}/apptov5/v1/home/data?id=1&mold=1&__platform=android',headers=self.headers).json()
- data = response['data']
- vod_list = []
- for i in data['sections']:
- for j in i['items']:
- vod_pic = j.get('vod_pic')
- if vod_pic.startswith('mac://'):
- vod_pic = vod_pic.replace('mac://', 'http://', 1)
- vod_list.append({
- "vod_id": j.get('vod_id'),
- "vod_name": j.get('vod_name'),
- "vod_pic": vod_pic,
- "vod_remarks": j.get('vod_remarks')
- })
- return {'list': vod_list}
-
- def categoryContent(self, tid, pg, filter, extend):
- response = self.fetch(f"{self.host}/apptov5/v1/vod/lists?area={extend.get('area','')}&lang={extend.get('lang','')}&year={extend.get('year','')}&order={extend.get('sort','time')}&type_id={tid}&type_name=&page={pg}&pageSize=21&__platform=android", headers=self.headers).json()
- data = response['data']
- data2 = data['data']
- for i in data['data']:
- if i.get('vod_pic','').startswith('mac://'):
- i['vod_pic'] = i['vod_pic'].replace('mac://', 'http://', 1)
- return {'list': data2, 'page': pg, 'total': data['total']}
-
- def getName(self):
- pass
-
- def isVideoFormat(self, url):
- pass
-
- def manualVideoCheck(self):
- pass
-
- def destroy(self):
- pass
-
- def localProxy(self, param):
- pass
\ No newline at end of file
diff --git a/欧歌/api/93e0decefe3a2ad8949c5fe389d6cab2.js b/欧歌/api/93e0decefe3a2ad8949c5fe389d6cab2.js
new file mode 100644
index 0000000..1cf0827
--- /dev/null
+++ b/欧歌/api/93e0decefe3a2ad8949c5fe389d6cab2.js
@@ -0,0 +1,475 @@
+import 'assets://js/lib/crypto-js.js';
+const UA = 'Mozilla/5.0 (Linux; Android 9; V2196A Build/PQ3A.190705.08211809; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/91.0.4472.114 Mobile Safari/537.36;webank/h5face;webank/1.0;netType:NETWORK_WIFI;appVersion:416;packageName:com.jp3.xg3';
+const aggConfig = {
+ keys: 'd3dGiJc651gSQ8w1',
+ charMap: {
+ '+': 'P', '/': 'X', '0': 'M', '1': 'U', '2': 'l', '3': 'E', '4': 'r', '5': 'Y', '6': 'W', '7': 'b', '8': 'd', '9': 'J',
+ 'A': '9', 'B': 's', 'C': 'a', 'D': 'I', 'E': '0', 'F': 'o', 'G': 'y', 'H': '_', 'I': 'H', 'J': 'G', 'K': 'i', 'L': 't',
+ 'M': 'g', 'N': 'N', 'O': 'A', 'P': '8', 'Q': 'F', 'R': 'k', 'S': '3', 'T': 'h', 'U': 'f', 'V': 'R', 'W': 'q', 'X': 'C',
+ 'Y': '4', 'Z': 'p', 'a': 'm', 'b': 'B', 'c': 'O', 'd': 'u', 'e': 'c', 'f': '6', 'g': 'K', 'h': 'x', 'i': '5', 'j': 'T',
+ 'k': '-', 'l': '2', 'm': 'z', 'n': 'S', 'o': 'Z', 'p': '1', 'q': 'V', 'r': 'v', 's': 'j', 't': 'Q', 'u': '7', 'v': 'D',
+ 'w': 'w', 'x': 'n', 'y': 'L', 'z': 'e'
+ },
+ headers: {
+ default: { 'User-Agent': 'okhttp/3.12.11', 'content-type': 'application/json; charset=utf-8' }
+ },
+ platform: {
+ 百度: { host: 'https://api.jkyai.top', url1: '/API/bddjss.php?name=fyclass&page=fypage', url2: '/API/bddjss.php?id=fyid', search: '/API/bddjss.php?name=**&page=fypage' },
+ 锦鲤: { host: 'https://api.jinlidj.com', search: '/api/search', url2: '/api/detail' },
+ 番茄: { host: 'https://reading.snssdk.com', url1: '/reading/bookapi/bookmall/cell/change/v', url2: 'https://fqgo.52dns.cc/catalog', search: 'https://fqgo.52dns.cc/search' },
+ 星芽: { host: 'https://app.whjzjx.cn', url1: '/cloud/v2/theater/home_page?theater_class_id', url2: '/v2/theater_parent/detail', search: '/v3/search', loginUrl: 'https://u.shytkjgs.com/user/v1/account/login' },
+ 西饭: { host: 'https://xifan-api-cn.youlishipin.com', url1: '/xifan/drama/portalPage', url2: '/xifan/drama/getDuanjuInfo', search: '/xifan/search/getSearchList' },
+ 软鸭: { host: 'https://api.xingzhige.com', url1: '/API/playlet', search: '/API/playlet' },
+ 七猫: { host: 'https://api-store.qmplaylet.com', url1: '/api/v1/playlet/index', url2: 'https://api-read.qmplaylet.com/player/api/v1/playlet/info', search: '/api/v1/playlet/search' },
+ 围观: { host: 'https://api.drama.9ddm.com', url1: '/drama/home/shortVideoTags', url2: '/drama/home/shortVideoDetail', search: '/drama/home/search' },
+ 甜圈: { host: 'https://mov.cenguigui.cn', url1: '/duanju/api.php?classname', url2: '/duanju/api.php?book_id', search: '/duanju/api.php?name' }
+ },
+ platformList: [
+ { name: '甜圈短剧', id: '甜圈' }, { name: '七猫短剧', id: '七猫' }, { name: '锦鲤短剧', id: '锦鲤' },
+ { name: '番茄短剧', id: '番茄' }, { name: '星芽短剧', id: '星芽' }, { name: '西饭短剧', id: '西饭' },
+ { name: '软鸭短剧', id: '软鸭' }, { name: '百度短剧', id: '百度' }, { name: '围观短剧', id: '围观' }
+ ],
+ search: { limit: 30, timeout: 6000 }
+};
+
+const ruleFilterDef = {
+ 百度: { area: '逆袭' },
+ 锦鲤: { area: '' },
+ 番茄: { area: 'videoseries_hot' },
+ 星芽: { area: '1' },
+ 西饭: { area: '' },
+ 软鸭: { area: '战神' },
+ 七猫: { area: '0' },
+ 围观: { area: '' },
+ 甜圈: { area: '推荐榜' }
+};
+
+const filterOptionsB64 = "eyLnlJzlnIgiOlt7ImtleSI6ImFyZWEiLCJuYW1lIjoi5Ymn5oOFIiwidmFsdWUiOlt7Im4iOiLlhajpg6giLCJ2IjoiIn0seyJuIjoi5o6o6I2Q5qacIiwidiI6IuaOqOiNkOamnCJ9LHsibiI6IueDreaSreamnCIsInYiOiLng63mkq3mppwifSx7Im4iOiLmlrDkuabmppwiLCJ2Ijoi5paw5Lmm5qacIn0seyJuIjoi5a6M57uT5qacIiwidiI6IuWujOe7k+amnCJ9LHsibiI6Iui/nui9veamnCIsInYiOiLov57ovb3mppwifSx7Im4iOiLlhY3otLnmppwiLCJ2Ijoi5YWN6LS55qacIn0seyJuIjoi5paw5YmnIiwidiI6IuaWsOWJpyJ9LHsibiI6IumAhuiirSIsInYiOiLpgIbooq0ifSx7Im4iOiLpnLjmgLsiLCJ2Ijoi6Zy45oC7In0seyJuIjoi546w5Luj6KiA5oOFIiwidiI6IueOsOS7o+iogOaDhSJ9LHsibiI6IuaJk+iEuOiZkOa4oyIsInYiOiLmiZPohLjomZDmuKMifSx7Im4iOiLosarpl6jmganmgKgiLCJ2Ijoi6LGq6Zeo5oGp5oCoIn0seyJuIjoi56We6LGqIiwidiI6IuelnuixqiJ9LHsibiI6IumprOeUsiIsInYiOiLpqaznlLIifSx7Im4iOiLpg73luILml6XluLgiLCJ2Ijoi6YO95biC5pel5bi4In0seyJuIjoi5oiY56We5b2S5p2lIiwidiI6IuaImOelnuW9kuadpSJ9LHsibiI6IuWwj+S6uueJqSIsInYiOiLlsI/kurrniakifSx7Im4iOiLlpbPmgKfmiJDplb8iLCJ2Ijoi5aWz5oCn5oiQ6ZW/In0seyJuIjoi5aSn5aWz5Li7IiwidiI6IuWkp+Wls+S4uyJ9LHsibiI6Iuepv+i2iiIsInYiOiLnqb/otooifSx7Im4iOiLpg73luILkv67ku5kiLCJ2Ijoi6YO95biC5L+u5LuZIn0seyJuIjoi5by66ICF5Zue5b2SIiwidiI6IuW8uuiAheWbnuW9kiJ9LHsibiI6IuS6suaDhSIsInYiOiLkurLmg4UifSx7Im4iOiLlj6Too4UiLCJ2Ijoi5Y+k6KOFIn0seyJuIjoi6YeN55SfIiwidiI6IumHjeeUnyJ9LHsibiI6IumXquWpmiIsInYiOiLpl6rlqZoifSx7Im4iOiLotZjlqb/pgIbooq0iLCJ2Ijoi6LWY5am/6YCG6KKtIn0seyJuIjoi6JmQ5oGLIiwidiI6IuiZkOaBiyJ9LHsibiI6Iui/veWmuyIsInYiOiLov73lprsifSx7Im4iOiLlpKnkuIvml6DmlYwiLCJ2Ijoi5aSp5LiL5peg5pWMIn0seyJuIjoi5a625bqt5Lym55CGIiwidiI6IuWutuW6reS8pueQhiJ9LHsibiI6IuiQjOWunSIsInYiOiLokIzlrp0ifSx7Im4iOiLlj6Tpo47mnYPosIsiLCJ2Ijoi5Y+k6aOO5p2D6LCLIn0seyJuIjoi6IGM5Zy6IiwidiI6IuiBjOWcuiJ9LHsibiI6IuWlh+W5u+iEkea0niIsInYiOiLlpYflubvohJHmtJ4ifSx7Im4iOiLlvILog70iLCJ2Ijoi5byC6IO9In0seyJuIjoi5peg5pWM56We5Yy7IiwidiI6IuaXoOaVjOelnuWMuyJ9LHsibiI6IuWPpOmjjuiogOaDhSIsInYiOiLlj6Tpo47oqIDmg4UifSx7Im4iOiLkvKDmib/op4nphpIiLCJ2Ijoi5Lyg5om/6KeJ6YaSIn0seyJuIjoi546w6KiA55Sc5a6gIiwidiI6IueOsOiogOeUnOWuoCJ9LHsibiI6IuWlh+W5u+eIseaDhSIsInYiOiLlpYflubvniLHmg4UifSx7Im4iOiLkuaHmnZEiLCJ2Ijoi5Lmh5p2RIn0seyJuIjoi5Y6G5Y+y5Y+k5LujIiwidiI6IuWOhuWPsuWPpOS7oyJ9LHsibiI6IueOi+WmgyIsInYiOiLnjovlpoMifSx7Im4iOiLpq5jmiYvkuIvlsbEiLCJ2Ijoi6auY5omL5LiL5bGxIn0seyJuIjoi5aix5LmQ5ZyIIiwidiI6IuWoseS5kOWciCJ9XX1dLCLplKbpsqQiOlt7ImtleSI6ImFyZWEiLCJuYW1lIjoi5YiG57G7IiwidmFsdWUiOlt7Im4iOiLlhajpg6giLCJ2IjoiIn0seyJuIjoi5oOF5oSf5YWz57O7IiwidiI6IjEifSx7Im4iOiLmiJDplb/pgIbooq0iLCJ2IjoiMiJ9LHsibiI6IuWlh+W5u+W8guiDvSIsInYiOiIzIn0seyJuIjoi5oiY5paX54Ot6KGAIiwidiI6IjQifSx7Im4iOiLkvKbnkIbnjrDlrp4iLCJ2IjoiNSJ9LHsibiI6IuaXtuepuuepv+i2iiIsInYiOiI2In0seyJuIjoi5p2D6LCL6Lqr5Lu9IiwidiI6IjcifV19XSwi55Wq6IyEIjpbeyJrZXkiOiJhcmVhIiwibmFtZSI6IuWIhuexuyIsInZhbHVlIjpbeyJuIjoi54Ot5YmnIiwidiI6InZpZGVvc2VyaWVzX2hvdCJ9LHsibiI6IuaWsOWJpyIsInYiOiJmaXJzdG9ubGluZXRpbWVfbmV3In0seyJuIjoi6YCG6KKtIiwidiI6ImNhdGVfNzM5In0seyJuIjoi5oC76KOBIiwidiI6ImNhdGVfMjkifSx7Im4iOiLnjrDoqIAiLCJ2IjoiY2F0ZV8zIn0seyJuIjoi5omT6IS4IiwidiI6ImNhdGVfMTA1MSJ9LHsibiI6IumprOeUsiIsInYiOiJjYXRlXzI2NiJ9LHsibiI6IuixqumXqCIsInYiOiJjYXRlXzEwNTMifSx7Im4iOiLpg73luIIiLCJ2IjoiY2F0ZV8yNjEifSx7Im4iOiLnpZ7osaoiLCJ2IjoiY2F0ZV8yMCJ9XX1dLCLmmJ/oir0iOlt7ImtleSI6ImFyZWEiLCJuYW1lIjoi5YiG57G7IiwidmFsdWUiOlt7Im4iOiLliaflnLoiLCJ2IjoiMSJ9LHsibiI6IueDreaSreWJpyIsInYiOiIyIn0seyJuIjoi5Lya5ZGY5LiT5LqrIiwidiI6IjgifSx7Im4iOiLmmJ/pgInlpb3liaciLCJ2IjoiNyJ9LHsibiI6IuaWsOWJpyIsInYiOiIzIn0seyJuIjoi6Ziz5YWJ5Ymn5Zy6IiwidiI6IjUifV19XSwi6KW/6aWtIjpbeyJrZXkiOiJhcmVhIiwibmFtZSI6IuWIhuexuyIsInZhbHVlIjpbeyJuIjoi5YWo6YOoIiwidiI6IiJ9LHsibiI6IumDveW4giIsInYiOiI2OEDpg73luIIifSx7Im4iOiLpnZLmmKUiLCJ2IjoiNjhA6Z2S5pilIn0seyJuIjoi546w5Luj6KiA5oOFIiwidiI6IjgxQOeOsOS7o+iogOaDhSJ9LHsibiI6IuixqumXqCIsInYiOiI4MUDosarpl6gifSx7Im4iOiLlpKflpbPkuLsiLCJ2IjoiODBA5aSn5aWz5Li7In0seyJuIjoi6YCG6KKtIiwidiI6Ijc5QOmAhuiirSJ9LHsibiI6IuaJk+iEuOiZkOa4oyIsInYiOiI3OUDmiZPohLjomZDmuKMifSx7Im4iOiLnqb/otooiLCJ2IjoiODFA56m/6LaKIn1dfV0sIui9r+m4rSI6W3sia2V5IjoiYXJlYSIsIm5hbWUiOiLliIbnsbsiLCJ2YWx1ZSI6W3sibiI6IuWFqOmDqCIsInYiOiIifSx7Im4iOiLmiJjnpZ4iLCJ2Ijoi5oiY56WeIn0seyJuIjoi6YCG6KKtIiwidiI6IumAhuiirSJ9LHsibiI6IumcuOaAuyIsInYiOiLpnLjmgLsifSx7Im4iOiLnpZ7osaoiLCJ2Ijoi56We6LGqIn0seyJuIjoi6YO95biCIiwidiI6IumDveW4giJ9LHsibiI6IueOhOW5uyIsInYiOiLnjoTlubsifSx7Im4iOiLoqIDmg4UiLCJ2Ijoi6KiA5oOFIn1dfV0sIuS4g+eMqyI6W3sia2V5IjoiYXJlYSIsIm5hbWUiOiLliIbnsbsiLCJ2YWx1ZSI6W3sibiI6IuWFqOmDqCIsInYiOiIifSx7Im4iOiLmjqjojZAiLCJ2IjoiMCJ9LHsibiI6IuaWsOWJpyIsInYiOiItMSJ9LHsibiI6IumDveW4guaDheaEnyIsInYiOiIxMjczIn0seyJuIjoi5Y+k6KOFIiwidiI6IjEyNzIifSx7Im4iOiLpg73luIIiLCJ2IjoiNTcxIn0seyJuIjoi546E5bm75LuZ5L6gIiwidiI6IjEyODYifSx7Im4iOiLlpYflubsiLCJ2IjoiNTcwIn0seyJuIjoi5Lmh5p2RIiwidiI6IjU5MCJ9LHsibiI6IuawkeWbvSIsInYiOiI1NzMifSx7Im4iOiLlubTku6MiLCJ2IjoiNTcyIn0seyJuIjoi6Z2S5pil5qCh5ZutIiwidiI6IjEyODgifSx7Im4iOiLmrabkvqAiLCJ2IjoiMzcxIn0seyJuIjoi56eR5bm7IiwidiI6IjU5NCJ9LHsibiI6Iuacq+S4liIsInYiOiI1NTYifSx7Im4iOiLkuozmrKHlhYMiLCJ2IjoiMTI4OSJ9LHsibiI6IumAhuiirSIsInYiOiI0MDAifSx7Im4iOiLnqb/otooiLCJ2IjoiMzczIn0seyJuIjoi5aSN5LuHIiwidiI6Ijc5NSJ9LHsibiI6Iuezu+e7nyIsInYiOiI3ODcifSx7Im4iOiLmnYPosIsiLCJ2IjoiNzkwIn0seyJuIjoi6YeN55SfIiwidiI6Ijc4NCJ9LHsibiI6IuWls+aAp+aIkOmVvyIsInYiOiIxMjk0In0seyJuIjoi5omT6IS46JmQ5rijIiwidiI6IjcxNiJ9LHsibiI6IumXquWpmiIsInYiOiI0ODAifSx7Im4iOiLlvLrogIXlm57lvZIiLCJ2IjoiNDAyIn0seyJuIjoi6L+95aa754Gr6JGs5Zy6IiwidiI6IjcxNSJ9LHsibiI6IuWutuW6rSIsInYiOiI2NzAifSx7Im4iOiLpqaznlLIiLCJ2IjoiNTU4In0seyJuIjoi6IGM5Zy6IiwidiI6IjcyNCJ9LHsibiI6IuWuq+aWlyIsInYiOiIzNDMifSx7Im4iOiLpq5jmiYvkuIvlsbEiLCJ2IjoiMTI5OSJ9LHsibiI6IuWoseS5kOaYjuaYnyIsInYiOiIxMjk1In0seyJuIjoi5byC6IO9IiwidiI6IjcyNyJ9LHsibiI6IuWuheaWlyIsInYiOiIzNDIifSx7Im4iOiLmm7/ouqsiLCJ2IjoiNzEyIn0seyJuIjoi56m/5LmmIiwidiI6IjMzOCJ9LHsibiI6IuWVhuaImCIsInYiOiI3MjMifSx7Im4iOiLnp43nlLDnu4/llYYiLCJ2IjoiMTI5MSJ9LHsibiI6IuS8pueQhiIsInYiOiIxMjkzIn0seyJuIjoi56S+5Lya6K+d6aKYIiwidiI6IjEyOTAifSx7Im4iOiLoh7Tlr4wiLCJ2IjoiNDkyIn0seyJuIjoi5YG35ZCs5b+D5aOwIiwidiI6IjEyNTgifSx7Im4iOiLohJHmtJ4iLCJ2IjoiNTI2In0seyJuIjoi6LGq6Zeo5oC76KOBIiwidiI6IjYyNCJ9LHsibiI6IuiQjOWunSIsInYiOiIzNTYifSx7Im4iOiLmiJjnpZ4iLCJ2IjoiNTI3In0seyJuIjoi55yf5YGH5Y2D6YeRIiwidiI6IjgxMiJ9LHsibiI6Iui1mOWpvyIsInYiOiIzNiJ9LHsibiI6IuelnuWMuyIsInYiOiIxMjY5In0seyJuIjoi56We6LGqIiwidiI6IjM3In0seyJuIjoi5bCP5Lq654mpIiwidiI6IjEyOTYifSx7Im4iOiLlm6LlrqAiLCJ2IjoiNTQ1In0seyJuIjoi5qyi5Zac5Yak5a62IiwidiI6IjQ2NCJ9LHsibiI6IuWls+W4nSIsInYiOiI2MTcifSx7Im4iOiLpk7blj5EiLCJ2IjoiMTI5NyJ9LHsibiI6IuWFteeOiyIsInYiOiIyOCJ9LHsibiI6IuiZkOaBiyIsInYiOiIxNiJ9LHsibiI6IueUnOWuoCIsInYiOiIyMSJ9LHsibiI6IuaCrOeWkSIsInYiOiIyNyJ9LHsibiI6IuaQnueskSIsInYiOiI3OTMifSx7Im4iOiLngbXlvIIiLCJ2IjoiMTI4NyJ9XX1dLCLnmb7luqYiOlt7ImtleSI6ImFyZWEiLCJuYW1lIjoi5YiG57G7IiwidmFsdWUiOlt7Im4iOiLpgIbooq0iLCJ2Ijoi6YCG6KKtIn0seyJuIjoi5oiY56WeIiwidiI6IuaImOelniJ9LHsibiI6IumDveW4giIsInYiOiLpg73luIIifSx7Im4iOiLnqb/otooiLCJ2Ijoi56m/6LaKIn0seyJuIjoi6YeN55SfIiwidiI6IumHjeeUnyJ9LHsibiI6IuWPpOijhSIsInYiOiLlj6Too4UifSx7Im4iOiLoqIDmg4UiLCJ2Ijoi6KiA5oOFIn0seyJuIjoi6JmQ5oGLIiwidiI6IuiZkOaBiyJ9LHsibiI6IueUnOWuoCIsInYiOiLnlJzlrqAifSx7Im4iOiLnpZ7ljLsiLCJ2Ijoi56We5Yy7In0seyJuIjoi6JCM5a6dIiwidiI6IuiQjOWunSJ9XX1dfQ==";
+
+let xingya_headers = {};
+function base64Encode(text) {
+ return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text));
+}
+function base64Decode(text) {
+ return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(text));
+}
+async function request(url, options = {}) {
+ const { method = 'GET', headers = {}, body, timeout = 5000 } = options;
+ const isPost = method.toUpperCase() === 'POST';
+ let requestBody = body && typeof body === 'object' ? JSON.stringify(body) : body;
+ if (typeof req !== 'undefined') {
+ return (await req(url, {
+ method,
+ headers: { ...aggConfig.headers.default, ...headers },
+ body: isPost ? requestBody : null,
+ timeout
+ })).content;
+ }
+}
+async function md5(str) {
+ return CryptoJS.MD5(str).toString(CryptoJS.enc.Hex).toLowerCase();
+}
+function guid() {
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
+ const r = Math.random() * 16 | 0;
+ return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
+ });
+}
+function getFilterOptions() {
+ try {
+ return JSON.parse(base64Decode(filterOptionsB64));
+ } catch (e) {
+ console.error('filterOptions 解码失败', e);
+ return {};
+ }
+}
+async function getQmParamsAndSign() {
+ const sessionId = Date.now().toString();
+ const data = {
+ "static_score": "0.8",
+ "uuid": "00000000-7fc7-08dc-0000-000000000000",
+ "device-id": "20250220125449b9b8cac84c2dd3d035c9052a2572f7dd0122edde3cc42a70",
+ "sourceuid": "aa7de295aad621a6",
+ "refresh-type": "0",
+ "model": "22021211RC",
+ "client-id": "aa7de295aad621a6",
+ "brand": "Redmi",
+ "sys-ver": "12",
+ "phone-level": "H",
+ "wlb-uid": "aa7de295aad621a6",
+ "session-id": sessionId
+ };
+ const jsonStr = JSON.stringify(data);
+ const base64Str = base64Encode(unescape(encodeURIComponent(jsonStr)));
+ let qmParams = '';
+ for (const c of base64Str) {
+ qmParams += aggConfig.charMap[c] || c;
+ }
+ const paramsStr = `AUTHORIZATION=app-version=10001application-id=com.duoduo.readchannel=unknownis-white=net-env=5platform=androidqm-params=${qmParams}reg=${aggConfig.keys}`;
+ const sign = await md5(paramsStr);
+ return { qmParams, sign };
+}
+async function getHeaderX() {
+ const { qmParams, sign } = await getQmParamsAndSign();
+ return {
+ 'net-env': '5',
+ 'reg': '',
+ 'channel': 'unknown',
+ 'is-white': '',
+ 'platform': 'android',
+ 'application-id': 'com.duoduo.read',
+ 'authorization': '',
+ 'app-version': '10001',
+ 'user-agent': 'webviewversion/0',
+ 'qm-params': qmParams,
+ 'sign': sign
+ };
+}
+async function init(cfg) {
+ try {
+ const res = JSON.parse(await request(aggConfig.platform.星芽.loginUrl, {
+ method: 'POST',
+ headers: { 'User-Agent': 'okhttp/4.10.0', platform: '1', 'Content-Type': 'application/json' },
+ body: JSON.stringify({ device: '24250683a3bdb3f118dff25ba4b1cba1a' })
+ }));
+ const token = res?.data?.token || res?.token;
+ xingya_headers = token ? { ...aggConfig.headers.default, authorization: token } : aggConfig.headers.default;
+ } catch (e) {
+ xingya_headers = aggConfig.headers.default;
+ }
+ return true;
+}
+async function getXingyaHeaders() {
+ return xingya_headers.authorization ? xingya_headers : aggConfig.headers.default;
+}
+async function home(filter) {
+ const classes = aggConfig.platformList.map(p => ({ type_name: p.name, type_id: p.id }));
+ const filters = {};
+ const filterOptions = getFilterOptions();
+ aggConfig.platformList.forEach(item => {
+ const platformId = item.id;
+ if (filterOptions[platformId]) {
+ filters[platformId] = filterOptions[platformId];
+ }
+ });
+ return JSON.stringify({ class: classes, filters });
+}
+async function homeVod() { return await recommend(); }
+async function recommend() {
+ const randomPlat = aggConfig.platformList[Math.floor(Math.random() * aggConfig.platformList.length)];
+ const platId = randomPlat.id;
+ const area = ruleFilterDef[platId]?.area || '';
+ const videos = await category(platId, 1, false, { area });
+ const list = JSON.parse(videos).list.slice(0, 10).map(v => ({ ...v, vod_content: `${randomPlat.name} | ${v.vod_remarks}` }));
+ return JSON.stringify({ list });
+}
+async function category(tid, pg, filter, extend) {
+ const plat = aggConfig.platform[tid];
+ const area = (extend?.area !== undefined ? extend.area : ruleFilterDef[tid]?.area) || '';
+ const page = parseInt(pg) || 1;
+ const videos = [];
+ if (!plat) return JSON.stringify({ list: videos, page, pagecount: 1, limit: 0, total: 0 });
+ try {
+ if (tid === '七猫') {
+ const sign = await md5(`operation=1playlet_privacy=1tag_id=${area}${aggConfig.keys}`);
+ const url = `${plat.host}${plat.url1}?tag_id=${area}&playlet_privacy=1&operation=1&sign=${sign}`;
+ const res = JSON.parse(await request(url, { headers: { ...await getHeaderX(), ...aggConfig.headers.default } }));
+ (res?.data?.list || []).forEach(i => videos.push({
+ vod_id: `七猫@${encodeURIComponent(i.playlet_id)}`,
+ vod_name: i.title,
+ vod_pic: i.image_link,
+ vod_remarks: `${i.total_episode_num}集`
+ }));
+ } else if (tid === '百度') {
+ const url = `${plat.host}${plat.url1.replace('fyclass', area).replace('fypage', page)}`;
+ const res = JSON.parse(await request(url));
+ if (res?.data) videos.push(...res.data.map(i => ({
+ vod_id: `百度@${i.id}`, vod_name: i.title, vod_pic: i.cover, vod_remarks: `更新至${i.totalChapterNum}集`
+ })));
+ } else if (tid === '锦鲤') {
+ const res = JSON.parse(await request(plat.host + plat.search, { method: 'POST', body: JSON.stringify({ page, limit: 24, type_id: area, keyword: '' }) }));
+ if (res?.data?.list) videos.push(...res.data.list.map(i => ({
+ vod_id: `锦鲤@${i.vod_id}`, vod_name: i.vod_name, vod_pic: i.vod_pic, vod_remarks: `${i.vod_total}集`
+ })));
+ } else if (tid === '番茄') {
+ const sessionId = new Date().toISOString().slice(0, 16).replace(/-|T:/g, '');
+ let url = `${plat.host}${plat.url1}?change_type=0&selected_items=${area}&tab_type=8&cell_id=6952850996422770718&version_tag=video_feed_refactor&device_id=1423244030195267&aid=1967&app_name=novelapp&ssmix=a&session_id=${sessionId}`;
+ if (page > 1) url += `&offset=${(page - 1) * 12}`;
+ const res = JSON.parse(await request(url));
+ const items = res?.data?.cell_view?.cell_data || (Array.isArray(res?.data) ? res.data : []);
+ items.forEach(i => {
+ const v = i.video_data?.[0] || i;
+ videos.push({ vod_id: `番茄@${v.series_id || v.book_id || ''}`, vod_name: v.title, vod_pic: v.cover || v.horiz_cover, vod_remarks: v.sub_title || '' });
+ });
+ } else if (tid === '星芽') {
+ const headers = await getXingyaHeaders();
+ const url = `${plat.host}${plat.url1}=${area}&type=1&class2_ids=0&page_num=${page}&page_size=24`;
+ const res = JSON.parse(await request(url, { headers }));
+ if (res?.data?.list) videos.push(...res.data.list.map(i => ({
+ vod_id: `星芽@${plat.host}${plat.url2}?theater_parent_id=${i.theater.id}`,
+ vod_name: i.theater.title, vod_pic: i.theater.cover_url, vod_remarks: `${i.theater.total}集`
+ })));
+ } else if (tid === '西饭') {
+ const [typeId, typeName] = area.split('@');
+ const ts = Math.floor(Date.now() / 1000);
+ const url = `${plat.host}${plat.url1}?reqType=aggregationPage&offset=${(page - 1) * 30}&categoryId=${typeId}&quickEngineVersion=-1&scene=&categoryNames=${encodeURIComponent(typeName || '')}&categoryVersion=1&density=1.5&pageID=page_theater&version=2001001&androidVersionCode=28&requestId=${ts}aa498144140ef297&appId=drama&teenMode=false&userBaseMode=false&session=eyJpbmZvIjp7InVpZCI6IiIsInJ0IjoiMTc0MDY1ODI5NCIsInVuIjoiT1BHXzFlZGQ5OTZhNjQ3ZTQ1MjU4Nzc1MTE2YzFkNzViN2QwIiwiZnQiOiIxNzQwNjU4Mjk0In19&feedssession=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dHlwIjowLCJidWlkIjoxNjMzOTY4MTI2MTQ4NjQxNTM2LCJhdWQiOiJkcmFtYSIsInZlciI6MiwicmF0IjoxNzQwNjU4Mjk0LCJ1bm0iOiJPUEdfMWVkZDk5NmE2NDdlNDUyNTg3NzUxMTZjMWQ3NWI3ZDAiLCJpZCI6IjNiMzViZmYzYWE0OTgxNDQxNDBlZjI5N2JkMDY5NGNhIiwiZXhwIjoxNzQxMjYzMDk0LCJkYyI6Imd6cXkifQ.JS3QY6ER0P2cQSxAE_OGKSMIWNAMsYUZ3mJTnEpf-Rc`;
+ const res = JSON.parse(await request(url, { headers: aggConfig.headers.default }));
+ const elements = res?.result?.elements || [];
+ elements.forEach(s => (s.contents || []).forEach(v => {
+ const d = v.duanjuVo;
+ if (d) {
+ videos.push({ vod_id: `西饭@${d.duanjuId}#${d.source}`, vod_name: d.title, vod_pic: d.coverImageUrl, vod_remarks: `${d.total}集` });
+ }
+ }));
+ } else if (tid === '软鸭') {
+ const url = `${plat.host}${plat.url1}/?keyword=${encodeURIComponent(area)}&page=${page}`;
+ const res = JSON.parse(await request(url));
+ if (res?.data) videos.push(...res.data.map(i => {
+ const purl = `${i.title}@${i.cover}@${i.author}@${i.type}@${i.desc}@${i.book_id}`;
+ return { vod_id: `软鸭@${encodeURIComponent(purl)}`, vod_name: i.title, vod_pic: i.cover, vod_remarks: i.type };
+ }));
+ } else if (tid === '围观') {
+ const res = JSON.parse(await request(`${plat.host}${plat.search}`, {
+ method: 'POST', body: JSON.stringify({ audience: "全部受众", page, pageSize: 30, searchWord: "", subject: "全部主题" })
+ }));
+ if (res?.data) videos.push(...res.data.map(i => ({
+ vod_id: `围观@${i.oneId}`, vod_name: i.title, vod_pic: i.vertPoster, vod_remarks: `集数:${i.episodeCount} 播放:${i.viewCount}`
+ })));
+ } else if (tid === '甜圈') {
+ const url = `${plat.host}${plat.url1}=${encodeURIComponent(area)}&offset=${page}`;
+ const res = JSON.parse(await request(url));
+ if (res?.data) {
+ videos.push(...res.data.map(i => ({
+ vod_id: `甜圈@${i.book_id}`,
+ vod_name: i.title,
+ vod_pic: i.cover,
+ vod_remarks: `${i.sub_title || ''}`
+ })));
+ }
+ }
+ } catch (e) { }
+ return JSON.stringify({ list: videos, page, pagecount: page + 1, limit: videos.length, total: videos.length * (page + 1) });
+}
+async function detail(id) {
+ const [platId, ...rest] = id.split('@');
+ const did = rest.join('@');
+ const plat = aggConfig.platform[platId];
+ if (!plat) return JSON.stringify({ list: [{ vod_id: id, vod_name: '平台不支持', vod_play_url: '' }] });
+ let vod = { vod_id: id, vod_name: '未知', vod_pic: '', vod_remarks: '', vod_content: '', vod_play_from: '', vod_play_url: '' };
+ try {
+ if (platId === '七猫') {
+ const didDecoded = decodeURIComponent(did);
+ const sign = await md5(`playlet_id=${didDecoded}${aggConfig.keys}`);
+ const url = `${plat.url2}?playlet_id=${didDecoded}&sign=${sign}`;
+ const res = JSON.parse(await request(url, { headers: { ...await getHeaderX(), ...aggConfig.headers.default } }));
+ if (res?.data) {
+ const d = res.data;
+ vod = {
+ ...vod,
+ vod_name: d.title,
+ vod_pic: d.image_link,
+ vod_remarks: `${d.total_episode_num}集`,
+ vod_content: d.intro,
+ vod_play_from: '七猫短剧',
+ vod_play_url: (d.play_list || []).map(i => `${i.sort}$${i.video_url}`).join('#')
+ };
+ }
+ } else if (platId === '百度') {
+ const res = JSON.parse(await request(`${plat.host}${plat.url2.replace('fyid', did)}`));
+ if (res) vod = { ...vod, vod_name: res.title, vod_pic: res.data?.[0]?.cover, vod_remarks: `更新至:${res.total || 0}集`, vod_play_from: '百度短剧', vod_play_url: (res.data || []).map(i => `${i.title}$${i.video_id}`).join('#') };
+ } else if (platId === '锦鲤') {
+ const res = JSON.parse(await request(`${plat.host}${plat.url2}/${did}`));
+ if (res?.data) {
+ const list = res.data;
+ const urls = list.player ? Object.keys(list.player).map(k => `${k}$${list.player[k]}`) : [];
+ vod = { ...vod, vod_name: list.vod_name, vod_pic: list.vod_pic, vod_remarks: list.vod_remarks, vod_play_from: '锦鲤短剧', vod_play_url: urls.join('#') };
+ }
+ } else if (platId === '番茄') {
+ const res = JSON.parse(await request(`${plat.url2}?book_id=${did}`));
+ if (res?.data) {
+ const b = res.data.book_info;
+ const u = (res.data.item_data_list || []).map(i => `${i.title}$${i.item_id}`).join('#');
+ vod = { ...vod, vod_name: b.book_name, vod_pic: b.thumb_url, vod_remarks: `更新至${res.data.item_data_list?.length}集`, vod_play_from: '番茄短剧', vod_play_url: u };
+ }
+ } else if (platId === '星芽') {
+ const headers = await getXingyaHeaders();
+ const res = JSON.parse(await request(did, { headers }));
+ if (res?.data) {
+ const d = res.data;
+ const u = (d.theaters || []).map(i => `${i.num}$${i.son_video_url}`).join('#');
+ vod = { ...vod, vod_name: d.title, vod_pic: d.cover_url, vod_remarks: d.desc_tags + '', vod_play_from: '星芽短剧', vod_play_url: u };
+ }
+ } else if (platId === '西饭') {
+ const [duanjuId, source] = did.split('#');
+ const url = `${plat.host}${plat.url2}?duanjuId=${duanjuId}&source=${source}`;
+ const res = JSON.parse(await request(url));
+ if (res?.result) {
+ const d = res.result;
+ const u = (d.episodeList || []).map(e => `${e.index}$${e.playUrl}`).join('#');
+ vod = { ...vod, vod_name: d.title, vod_pic: d.coverImageUrl, vod_remarks: d.updateStatus === 'over' ? `${d.total}集 已完结` : `更新${d.total}集`, vod_play_from: '西饭短剧', vod_play_url: u };
+ }
+ } else if (platId === '甜圈') {
+ const url = `${plat.host}${plat.url2}=${did}`;
+ const res = JSON.parse(await request(url));
+ if (res) {
+ const u = (res.data || []).map(item => `${item.title}$${item.video_id}`).join('#');
+ vod = { ...vod, vod_name: res.book_name, vod_pic: res.book_pic, vod_remarks: `${res.duration || ''}`, vod_content: res.desc || '', vod_play_from: '甜圈短剧', vod_play_url: u };
+ }
+ } else if (platId === '软鸭') {
+ const didDecoded = decodeURIComponent(did);
+ const [title, img, author, type, desc, book_id] = didDecoded.split('@');
+ const detailUrl = `${plat.host}${plat.url1}/?book_id=${book_id || did.split('@')[5]}`;
+ const res = JSON.parse(await request(detailUrl, { headers: aggConfig.headers.default }));
+ const u = (res.data?.video_list || []).map(e => `${e.title}$${e.video_id}`).join('#');
+ vod = { ...vod, vod_name: title, vod_pic: img, vod_remarks: type, vod_content: desc, vod_play_from: '软鸭短剧', vod_play_url: u };
+ } else if (platId === '围观') {
+ const res = JSON.parse(await request(`${plat.host}${plat.url2}?oneId=${did}&page=1&pageSize=1000`));
+ if (res?.data?.length) {
+ const d = res.data;
+ vod = { ...vod, vod_name: d[0].title, vod_pic: d[0].vertPoster, vod_remarks: `共${d.length}集`, vod_play_from: '围观短剧', vod_play_url: d.map(e => `${e.title}第${e.playOrder}集$${e.playSetting}`).join('#') };
+ }
+ }
+
+ } catch (e) { vod.vod_name = '加载失败'; }
+ return JSON.stringify({ list: [vod] });
+}
+async function play(flag, id) {
+ if (/七猫/.test(flag)) {
+ return JSON.stringify({ parse: 0, url: id });
+ }
+ if (/百度/.test(flag)) {
+ const res = JSON.parse(await request(`https://api.jkyai.top/API/bddjss.php?video_id=${id}`));
+ if (res?.data?.qualities) {
+ const order = ["1080p", "sc", "sd"];
+ const qMap = { "1080p": "蓝光", "sc": "超清", "sd": "标清" };
+ const urls = [];
+ order.forEach(k => {
+ const q = res.data.qualities.find(x => x.quality === k);
+ if (q) urls.push(qMap[k], q.download_url);
+ });
+ return JSON.stringify({ parse: 0, url: urls });
+ }
+ }
+ if (/甜圈/.test(flag)) {
+ return JSON.stringify({ parse: 0, url: `https://mov.cenguigui.cn/duanju/api.php?video_id=${id}&type=mp4` });
+ }
+ if (/锦鲤/.test(flag)) {
+ try {
+ const html = await request(`${id}&auto=1`, { headers: { referer: 'https://www.jinlidj.com/' } });
+ const match = html.match(/let data\s*=\s*({[^;]*});/);
+ if (match) {
+ const data = JSON.parse(match[1]);
+ if (data.url) return JSON.stringify({ parse: 0, url: data.url });
+ }
+ } catch {}
+ }
+ if (/番茄/.test(flag)) {
+ try {
+ const res = JSON.parse(await request(`https://fqgo.52dns.cc/video?item_ids=${id}`));
+ if (res?.data?.[id]?.video_model) {
+ const model = JSON.parse(res.data[id].video_model);
+ const mainUrl = model?.video_list?.video_1?.main_url;
+ if (mainUrl) return JSON.stringify({ parse: 0, url: base64Decode(mainUrl) });
+ }
+ } catch {}
+ }
+ if (/软鸭/.test(flag)) {
+ const response = await request(`${aggConfig.platform.软鸭.host}/API/playlet/?video_id=${id}&quality=1080p`, { headers: aggConfig.headers.default });
+ const res = JSON.parse(response);
+ return JSON.stringify({ parse: 0, url: res.data?.video?.url || '' });
+ }
+ if (/围观/.test(flag)) {
+ try {
+ const ps = typeof id === 'string' ? JSON.parse(id) : id;
+ const urls = [];
+ if (ps?.super) urls.push("超清", ps.super);
+ if (ps?.high) urls.push("高清", ps.high);
+ if (ps?.normal) urls.push("流畅", ps.normal);
+ return JSON.stringify({ parse: 0, url: urls });
+ } catch { return JSON.stringify({ parse: 0, url: id }); }
+ }
+ return JSON.stringify({ parse: 0, url: id });
+}
+async function search(wd, quick, pg) {
+ const page = parseInt(pg) || 1;
+ const videos = [];
+ try {
+ const sign = await md5(`operation=2playlet_privacy=1search_word=${wd}${aggConfig.keys}`);
+ const url = `${aggConfig.platform.七猫.host}${aggConfig.platform.七猫.search}?search_word=${encodeURIComponent(wd)}&playlet_privacy=1&operation=2&sign=${sign}`;
+ const res = JSON.parse(await request(url, {
+ headers: { ...await getHeaderX(), ...aggConfig.headers.default },
+ timeout: aggConfig.search.timeout
+ }));
+ (res?.data?.list || []).forEach(i => {
+ if (i.title.toLowerCase().includes(wd.toLowerCase())) {
+ videos.push({
+ vod_id: `七猫@${encodeURIComponent(i.playlet_id)}`,
+ vod_name: i.title,
+ vod_pic: i.image_link,
+ vod_remarks: `七猫短剧|${i.total_episode_num}集`
+ });
+ }
+ });
+ } catch {}
+ const platforms = ['百度', '锦鲤', '番茄', '星芽', '西饭', '软鸭', '围观', '甜圈'];
+ for (const tid of platforms) {
+ const plat = aggConfig.platform[tid];
+ try {
+ let res, data;
+ if (tid === '百度') {
+ res = await request(`${plat.host}${plat.search.replace('**', encodeURIComponent(wd)).replace('fypage', page)}`);
+ data = (JSON.parse(res)?.data || []).map(i => ({ vod_id: `百度@${i.id}`, vod_name: i.title, vod_pic: i.cover, vod_remarks: `百度短剧|更新至${i.totalChapterNum}集` }));
+ } else if (tid === '锦鲤') {
+ res = await request(plat.host + plat.search, { method: 'POST', body: JSON.stringify({ page, limit: 30, keyword: wd }) });
+ data = (JSON.parse(res)?.data?.list || []).map(i => ({ vod_id: `锦鲤@${i.vod_id}`, vod_name: i.vod_name, vod_pic: i.vod_pic, vod_remarks: `锦鲤短剧|${i.vod_total}集` }));
+ } else if (tid === '番茄') {
+ res = await request(`${plat.search}?keyword=${encodeURIComponent(wd)}&page=${page}`);
+ data = (JSON.parse(res)?.data || []).map(i => ({ vod_id: `番茄@${i.series_id}`, vod_name: i.title, vod_pic: i.cover, vod_remarks: `番茄短剧|${i.sub_title}` }));
+ } else if (tid === '星芽') {
+ const headers = await getXingyaHeaders();
+ res = await request(plat.host + plat.search, { method: 'POST', headers, body: JSON.stringify({ text: wd }) });
+ data = (JSON.parse(res)?.data?.theater?.search_data || []).map(i => ({ vod_id: `星芽@${plat.host}${plat.url2}?theater_parent_id=${i.id}`, vod_name: i.title, vod_pic: i.cover_url, vod_remarks: `星芽短剧|${i.total}集 播放:${i.play_amount_str}` }));
+ } else if (tid === '西饭') {
+ const ts = Math.floor(Date.now() / 1000);
+ const url = `${plat.host}${plat.search}?reqType=search&offset=${(page - 1) * 30}&keyword=${encodeURIComponent(wd)}&quickEngineVersion=-1&scene=`;
+ res = await request(url);
+ data = (JSON.parse(res)?.result?.elements || []).map(vod => {
+ const dj = vod.duanjuVo || {};
+ return { vod_id: `西饭@${dj.duanjuId}#${dj.source}`, vod_name: dj.title, vod_pic: dj.coverImageUrl, vod_remarks: `西饭短剧|${dj.total}集` };
+ });
+ } else if (tid === '软鸭') {
+ res = await request(`${plat.host}${plat.search}/?keyword=${encodeURIComponent(wd)}&page=${page}`);
+ data = (JSON.parse(res)?.data || []).map(i => {
+ const purl = `${i.title}@${i.cover}@${i.author}@${i.type}@${i.desc}@${i.book_id}`;
+ return { vod_id: `软鸭@${encodeURIComponent(purl)}`, vod_name: i.title, vod_pic: i.cover, vod_remarks: `软鸭短剧|${i.type}` };
+ });
+ } else if (tid === '围观') {
+ res = await request(`${plat.host}${plat.search}`, {
+ method: 'POST',
+ body: JSON.stringify({ audience: "", page, pageSize: 30, searchWord: wd, subject: "" })
+ });
+ data = (JSON.parse(res)?.data || []).map(i => ({ vod_id: `围观@${i.oneId}`, vod_name: i.title, vod_pic: i.vertPoster, vod_remarks: `围观短剧|集数:${i.episodeCount} 播放:${i.viewCount}` }));
+ } else if (tid === '甜圈') {
+ const url = `${plat.host}${plat.search}=${encodeURIComponent(wd)}&offset=${page}`;
+ res = await request(url);
+ data = (JSON.parse(res)?.data || []).map(i => ({
+ vod_id: `甜圈@${i.book_id}`,
+ vod_name: i.title,
+ vod_pic: i.cover,
+ vod_remarks: `甜圈短剧|${i.sub_title || '无简介'}`
+ }));
+ }
+ if (data) videos.push(...data.filter(v => v.vod_name?.toLowerCase().includes(wd.toLowerCase())));
+ } catch {}
+ }
+ return JSON.stringify({
+ list: videos,
+ page,
+ pagecount: page + 1,
+ limit: videos.length,
+ total: videos.length * (page + 1)
+ });
+}
+export function __jsEvalReturn() {
+ return { init, home, homeVod, category, detail, play, proxy: null, search };
+}
diff --git a/欧歌/api/c971b46d3dedf50d9cb99ae963206db6.js b/欧歌/api/c971b46d3dedf50d9cb99ae963206db6.js
deleted file mode 100644
index 5b62127..0000000
--- a/欧歌/api/c971b46d3dedf50d9cb99ae963206db6.js
+++ /dev/null
@@ -1,663 +0,0 @@
-/*小心儿悠悠
-配置说明:
-{
- "host": "https://xxx", // 必填,站点地址
- "ver": 1, // 可选,API版本:1或2,默认1
- "cms": "", // 可选,CMS地址
- "from": "", // 可选,搜索来源
- "category": 1, // 可选,分类模式:0-无分类 1-普通 2-搜索
- "timeout": 5, // 可选,超时时间(秒),默认5
- "custom_first": 0, // 可选,自定义解析优先:0-否 1-是
- "source_order": ["线路A", "线路B"], // 可选,线路排序
-
- // UA配置//可选,特殊站点需要自定义
- "ua": {
- "host": "UA字符串", // 主机检测UA
- "config": "UA字符串", // 配置获取UA
- "home": "UA字符串", // 首页UA
- "category": "UA字符串", // 分类页UA
- "search": "UA字符串", // 搜索页UA
- "parse": "UA字符串", // 解析UA
- "player": "UA字符串" // 播放UA
- },
-
- // 解析配置
- "parse": {
- "线路名": "解析地址或parse:前缀"
- }
-}
-
-使用示例:
-{
- "host": "https://xxx",
- "ver": 1,
- "source_order": ["超清", "高清", "标清"],
- "ua": {
- "home": "Mozilla/5.0...",
- "player": "Mozilla/5.0..."
- },
- "parse": {
- "超清": "https://jx.xxx/?url=",
- "高清": "parse:https://parse.xxx.com/"
- }
-}
-*/
-
-import { Crypto, _ } from 'assets://js/lib/cat.js';
-
-const MOBILE_UA = "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36";
-const TV_UA = "Dalvik/2.1.0 (Linux; U; Android 9; Pixel Build/PI)";
-var def_header = {'User-Agent': TV_UA};
-var cachedPlayUrls = {};
-var HOST;
-
-var foxConfig = {
- host: '',
- headers: {'User-Agent': TV_UA},
- timeout: 5000,
- ver: 1,
- uas: {},
- parses: {},
- custom_parses: {},
- froms: '',
- detail: [],
- custom_first: 0,
- category: 1,
- cms: '',
- sourceOrder: []
-};
-
-var recommendCache = {
- data: [],
- timestamp: 0,
- cacheTime: 30 * 60 * 1000
-};
-
-function decodeBase64(str) {
- try {
- return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(str));
- } catch (e) {
- return str;
- }
-}
-
-function request(reqUrl, header, data, method) {
- try {
- let optObj = {
- headers: header || foxConfig.headers,
- method: method || 'get',
- timeout: foxConfig.timeout,
- };
- if (method === 'post') {
- optObj.data = data || {};
- optObj.postType = 'form';
- }
- let res = req(reqUrl, optObj);
- return res.content;
- } catch (e) {
- throw new Error('请求失败: ' + reqUrl);
- }
-}
-
-function getdata(url, data, method) {
- try {
- url = /^http/.test(url) ? url : `${HOST}${url}`;
- let res = request(url, foxConfig.headers, data, method);
- return JSON.parse(res);
- } catch (e) {
- return {};
- }
-}
-
-function sortSources(play_from, play_urls) {
- if (!foxConfig.sourceOrder || foxConfig.sourceOrder.length === 0) {
- return { play_from, play_urls };
- }
-
- let sourceMap = new Map();
- for (let i = 0; i < play_from.length; i++) {
- if (i < play_urls.length) {
- sourceMap.set(play_from[i], {
- originalName: play_from[i],
- url: play_urls[i],
- index: i
- });
- }
- }
-
- let sorted_play_from = [];
- let sorted_play_urls = [];
-
- for (let sourceName of foxConfig.sourceOrder) {
- for (let [key, source] of sourceMap) {
- if (key.includes(sourceName)) {
- sorted_play_from.push(source.originalName);
- sorted_play_urls.push(source.url);
- sourceMap.delete(key);
- break;
- }
- }
- }
-
- for (let [key, source] of sourceMap) {
- sorted_play_from.push(source.originalName);
- sorted_play_urls.push(source.url);
- }
-
- return {
- play_from: sorted_play_from,
- play_urls: sorted_play_urls
- };
-}
-
-async function getRecommendVideos() {
- try {
- const now = Date.now();
- if (recommendCache.data.length > 0 && now - recommendCache.timestamp < recommendCache.cacheTime) {
- return recommendCache.data;
- }
-
- let headers = Object.assign({}, foxConfig.headers);
- let recommend_ua = foxConfig.uas.home || foxConfig.uas.homeVideo;
- if (recommend_ua) headers['User-Agent'] = recommend_ua;
-
- let videos = [];
- let res = request(HOST + '/api.php/Appfox/vodList?sort=热门&page=1&limit=12', headers);
- let response = JSON.parse(res);
-
- if (response.data && response.data.list) {
- videos = response.data.list.slice(0, 12);
- } else if (response.data && response.data.recommend_list) {
- videos = response.data.recommend_list.slice(0, 12);
- } else if (Array.isArray(response.data)) {
- videos = response.data.slice(0, 12);
- }
-
- if (videos.length > 0) {
- recommendCache.data = videos;
- recommendCache.timestamp = now;
- }
-
- return videos;
- } catch (e) {
- return [];
- }
-}
-
-async function init(cfg) {
- try {
- if (!cfg.ext) throw new Error('配置参数为空');
-
- let extValue = cfg.ext;
-
- if (typeof extValue === 'string') {
- try {
- extValue = decodeBase64(extValue);
- } catch (e) {}
-
- try {
- extValue = JSON.parse(extValue);
- } catch (e) {
- if (extValue.startsWith('http')) {
- extValue = {host: extValue};
- } else {
- throw new Error('配置格式错误');
- }
- }
- }
-
- let host = extValue.host || '';
- if (!host) throw new Error('主机地址为空');
-
- if (!host.match(/^https?:\/\/[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(:\d+)?(\/)?$/)) {
- let headers = Object.assign({}, foxConfig.headers);
- let custom_ua = foxConfig.uas.host;
- if (custom_ua) headers['User-Agent'] = custom_ua;
-
- let res = request(host, headers);
- let result = JSON.parse(res);
- host = result.apiDomain;
- }
-
- foxConfig.host = host.replace(/\/+$/, '');
- HOST = foxConfig.host;
-
- foxConfig.ver = extValue.ver === 2 ? 2 : 1;
- foxConfig.cms = extValue.cms || '';
- foxConfig.froms = extValue.from || '';
- foxConfig.custom_parses = extValue.parse || {};
- foxConfig.custom_first = extValue.custom_first || 0;
- foxConfig.category = extValue.category || 1;
- foxConfig.timeout = (extValue.timeout || 5) * 1000;
- foxConfig.sourceOrder = extValue.source_order || [];
-
- let ua = extValue.ua;
- if (ua) {
- if (typeof ua === 'string') {
- foxConfig.headers['User-Agent'] = ua;
- } else if (typeof ua === 'object') {
- foxConfig.uas = {
- host: ua.host,
- config: ua.config,
- home: ua.home,
- category: ua.category,
- search: ua.search,
- parse: ua.parse,
- player: ua.player || 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'
- };
- }
- }
-
- if (foxConfig.cms) {
- let cms = foxConfig.cms.replace(/\/+$/, '');
- if (cms.match(/^https?:\/\/.*\/vod/)) {
- cms += cms.includes('?') ? '&' : '?';
- foxConfig.cms = cms;
- }
- }
-
- } catch (e) {
- throw new Error('初始化失败: ' + e.message);
- }
-}
-
-async function home(filter) {
- try {
- if (!HOST || foxConfig.category === 0) return '{"class":[]}';
-
- let headers = Object.assign({}, foxConfig.headers);
- let custom_ua = foxConfig.uas.home;
- if (custom_ua) headers['User-Agent'] = custom_ua;
-
- if (foxConfig.cms && foxConfig.category !== 2) {
- let class_url = foxConfig.cms.replace(/&ac=videolist|ac=videolist&|ac=videolist|ac=detail/g, '');
- if (!class_url.includes('ac=')) class_url += 'ac=list';
-
- let classRes = request(class_url, headers);
- let classes = JSON.parse(classRes).class;
-
- let recommendVideos = await getRecommendVideos();
- let dataRes = request(foxConfig.cms.replace(/&$/, ''), headers);
- let data = JSON.parse(dataRes);
- data.class = classes;
-
- if (recommendVideos.length > 0) {
- data.recommend = recommendVideos;
- }
-
- return JSON.stringify(data);
- } else {
- let res = request(HOST + '/api.php/Appfox/init', headers);
- let response = JSON.parse(res);
- let classes = [];
- for (let i of response.data.type_list) {
- classes.push({type_id: i.type_id, type_name: i.type_name});
- }
-
- let recommendVideos = await getRecommendVideos();
- let result = {class: classes};
-
- if (recommendVideos.length > 0) {
- result.recommend = recommendVideos;
- }
-
- return JSON.stringify(result);
- }
- } catch (e) {
- return '{"class":[]}';
- }
-}
-
-async function homeVod() {
- try {
- if (!HOST || foxConfig.category === 0) return '{"list":[]}';
-
- if (foxConfig.cms && foxConfig.category !== 2) {
- let headers = Object.assign({}, foxConfig.headers);
- let custom_ua = foxConfig.uas.homeVideo || foxConfig.uas.home;
- if (custom_ua) headers['User-Agent'] = custom_ua;
-
- let res = request(foxConfig.cms.replace(/&$/, ''), headers);
- let data = JSON.parse(res);
-
- if (!data.list || data.list.length === 0) {
- let recommendVideos = await getRecommendVideos();
- if (recommendVideos.length > 0) {
- data.list = recommendVideos;
- }
- }
-
- if (foxConfig.category === 2 && data.list) {
- for (let i of data.list) {
- i.vod_id = 'msearch:' + i.vod_id;
- }
- }
- return JSON.stringify(data);
- }
-
- let headers = Object.assign({}, foxConfig.headers);
- let custom_ua = foxConfig.uas.homeVideo || foxConfig.uas.home;
- if (custom_ua) headers['User-Agent'] = custom_ua;
-
- let path = foxConfig.ver === 2 ? 'nav' : 'index';
- let res = request(HOST + '/api.php/Appfox/' + path, headers);
- let response = JSON.parse(res);
- let videos = [];
-
- if (foxConfig.ver === 2) {
- let navigationId = '';
- for (let i of response.data) {
- if (i.navigationId) {
- navigationId = i.navigationId;
- break;
- }
- }
- if (navigationId) {
- let navRes = request(HOST + '/api.php/Appfox/nav_video?id=' + navigationId, headers);
- let navData = JSON.parse(navRes);
- for (let item of navData.data) {
- if (item.videos) {
- videos = videos.concat(item.videos);
- }
- }
- }
- } else {
- for (let item of response.data) {
- if (item.banner) videos = videos.concat(item.banner);
- if (item.categories) {
- for (let cat of item.categories) {
- if (cat.videos) videos = videos.concat(cat.videos);
- }
- }
- }
- }
-
- if (videos.length === 0) {
- videos = await getRecommendVideos();
- }
-
- if (foxConfig.category === 2) {
- for (let i of videos) {
- i.vod_id = 'msearch:' + i.vod_id;
- }
- }
- return JSON.stringify({list: videos.slice(0, 20)});
- } catch (e) {
- try {
- let recommendVideos = await getRecommendVideos();
- return JSON.stringify({list: recommendVideos});
- } catch (e2) {
- return '{"list":[]}';
- }
- }
-}
-
-async function category(tid, pg, filter, extend) {
- try {
- if (!HOST) return '{"list":[]}';
-
- pg = parseInt(pg) || 1;
- let headers = Object.assign({}, foxConfig.headers);
- let category_ua = foxConfig.uas.category;
- if (category_ua) headers['User-Agent'] = category_ua;
-
- if (foxConfig.cms && foxConfig.category !== 2) {
- let res = request(foxConfig.cms + 'pg=' + pg + '&t=' + tid, headers);
- let data = JSON.parse(res);
- if (foxConfig.category === 2 && data.list) {
- for (let i of data.list) {
- i.vod_id = 'msearch:' + i.vod_id;
- }
- }
- return JSON.stringify(data);
- } else {
- let res = request(HOST + '/api.php/Appfox/vodList?type_id=' + tid + '&page=' + pg, headers);
- let response = JSON.parse(res);
- let videos = response.data?.list || response.data?.recommend_list || [];
- let data = {list: videos};
- if (foxConfig.category === 2) {
- for (let i of data.list) {
- i.vod_id = 'msearch:' + i.vod_id;
- }
- }
- return JSON.stringify(data);
- }
- } catch (e) {
- return '{"list":[]}';
- }
-}
-
-async function search(wd, quick, pg) {
- try {
- if (!HOST) return '{"list":[]}';
-
- pg = parseInt(pg) || 1;
- let headers = Object.assign({}, foxConfig.headers);
- let search_ua = foxConfig.uas.search;
- if (search_ua) headers['User-Agent'] = search_ua;
-
- if (foxConfig.cms) {
- let cms = foxConfig.cms.split('?')[0] + '?';
- let res = request(cms + 'ac=detail&wd=' + encodeURIComponent(wd), headers);
- let response = JSON.parse(res);
- foxConfig.detail = response.list || [];
- return JSON.stringify(response);
- } else {
- let path = HOST + '/api.php/Appfox/vod?ac=detail&wd=' + encodeURIComponent(wd);
- if (foxConfig.froms) path += '&from=' + foxConfig.froms;
- let res = request(path, headers);
- let response = JSON.parse(res);
- foxConfig.detail = response.list || [];
- return JSON.stringify(response);
- }
- } catch (e) {
- return '{"list":[]}';
- }
-}
-
-async function detail(id) {
- try {
- let headers = Object.assign({}, foxConfig.headers);
- let detail_ua = foxConfig.uas.detail || foxConfig.uas.search;
- if (detail_ua) headers['User-Agent'] = detail_ua;
-
- let video = null;
- for (let i of foxConfig.detail) {
- if (String(i.vod_id) === String(id)) {
- video = Object.assign({}, i);
- break;
- }
- }
-
- if (!video) {
- if (foxConfig.cms) {
- let cms = foxConfig.cms.split('?')[0] + '?';
- let res = request(cms + 'ac=detail&ids=' + id, headers);
- let response = JSON.parse(res);
- video = response.list?.[0] || null;
- } else {
- let res = request(HOST + '/api.php/Appfox/vod?ac=detail&ids=' + id, headers);
- let response = JSON.parse(res);
- video = response.list?.[0] || null;
- }
- }
-
- if (!video) return '{"list":[]}';
-
- let play_from = video.vod_play_from ? video.vod_play_from.split('$$$') : [];
- let play_urls = video.vod_play_url ? video.vod_play_url.split('$$$') : [];
-
- let sortedSources = sortSources(play_from, play_urls);
- play_from = sortedSources.play_from;
- play_urls = sortedSources.play_urls;
-
- try {
- let config_headers = Object.assign({}, foxConfig.headers);
- let custom_ua = foxConfig.uas.config;
- if (custom_ua) config_headers['User-Agent'] = custom_ua;
-
- let res = request(HOST + '/api.php/Appfox/config', config_headers);
- let config_response = JSON.parse(res);
- let player_list = config_response.data?.playerList || [];
- let jiexi_data_list = config_response.data?.jiexiDataList || [];
-
- let player_map = {};
- for (let player of player_list) {
- player_map[player.playerCode] = player;
- }
-
- let processed_play_urls = [];
- for (let idx = 0; idx < play_from.length; idx++) {
- let play_code = play_from[idx];
- if (player_map[play_code]) {
- let player_info = player_map[play_code];
- if (player_info.playerCode !== player_info.playerName) {
- play_from[idx] = player_info.playerName + '\u2005(' + play_code + ')';
- }
- }
- if (idx < play_urls.length) {
- let urls = play_urls[idx].split('#');
- let processed_urls = [];
- for (let url of urls) {
- let parts = url.split('$');
- if (parts.length >= 2) {
- parts[1] = play_code + '@' + parts[1];
- processed_urls.push(parts.join('$'));
- } else {
- processed_urls.push(url);
- }
- }
- processed_play_urls.push(processed_urls.join('#'));
- }
- }
-
- video.vod_play_from = play_from.join('$$$');
- video.vod_play_url = processed_play_urls.join('$$$');
-
- foxConfig.parses = {};
- for (let p of jiexi_data_list) {
- if (p.url && p.url.startsWith('http')) {
- foxConfig.parses[p.playerCode] = p.url;
- }
- }
- } catch (e) {
- }
-
- return JSON.stringify({list: [video]});
- } catch (e) {
- return '{"list":[]}';
- }
-}
-
-async function play(flag, id, flags) {
- try {
- let parts = id.split('@', 2);
- if (parts.length < 2) {
- throw new Error('ID格式错误');
- }
- let play_from = parts[0];
- let raw_url = parts[1];
-
- let jx = 0, parse = 0, parsed = 0;
- let headers = Object.assign({}, foxConfig.headers);
- let parse_ua = foxConfig.uas.parse;
- if (parse_ua) headers['User-Agent'] = parse_ua;
-
- let player_ua = foxConfig.uas.player || MOBILE_UA;
- let url = raw_url;
-
- let parses_main = [];
- if (foxConfig.custom_first === 1) {
- parses_main.push(foxConfig.custom_parses);
- parses_main.push(foxConfig.parses);
- } else {
- parses_main.push(foxConfig.parses);
- parses_main.push(foxConfig.custom_parses);
- }
-
- outer: for (let parses2 of parses_main) {
- if (!parsed && !url.match(/https?:\/\/.*\.(m3u8|mp4|flv|mkv)/)) {
- for (let key in parses2) {
- if (!play_from.includes(key)) continue;
-
- let parsers = parses2[key];
- if (Array.isArray(parsers)) {
- for (let parser of parsers) {
- if (parser && parser.startsWith('parse:')) {
- url = parser.split('parse:')[1] + raw_url;
- jx = 0;
- parse = 1;
- break outer;
- }
- if (parser && parser.startsWith('http')) {
- try {
- let res = request(parser + raw_url, headers);
- let response = JSON.parse(res);
- if (response.url && response.url.startsWith('http')) {
- url = response.url;
- parsed = 1;
- break outer;
- }
- } catch (e) {
- continue;
- }
- }
- }
- } else {
- if (parsers && parsers.startsWith('parse:')) {
- url = parsers.split('parse:')[1] + raw_url;
- jx = 0;
- parse = 1;
- break outer;
- }
- if (parsers && parsers.startsWith('http')) {
- try {
- let res = request(parsers + raw_url, headers);
- let response = JSON.parse(res);
- if (response.url && response.url.startsWith('http')) {
- url = response.url;
- parsed = 1;
- break outer;
- }
- } catch (e) {
- continue;
- }
- }
- }
- if (parsed || parse) break;
- }
- }
- if (parsed || parse) break;
- }
-
- if (!(url.match(/https?:\/\/.*\.(m3u8|mp4|flv|mkv)/) || parsed === 1)) {
- jx = 1;
- }
-
- return JSON.stringify({
- jx: jx,
- parse: parse,
- url: url,
- header: {'User-Agent': player_ua}
- });
- } catch (e) {
- return JSON.stringify({
- jx: 0,
- parse: 0,
- url: id,
- header: {}
- });
- }
-}
-
-export function __jsEvalReturn() {
- return {
- init: init,
- home: home,
- homeVod: homeVod,
- category: category,
- search: search,
- detail: detail,
- play: play
- };
-}
\ No newline at end of file
diff --git a/欧歌/api/drpy2.min.js b/欧歌/api/drpy2.min.js
new file mode 100644
index 0000000..464f33c
--- /dev/null
+++ b/欧歌/api/drpy2.min.js
@@ -0,0 +1,3108 @@
+import cheerio from "assets://js/lib/cheerio.min.js";
+import "assets://js/lib/crypto-js.js";
+import "./jsencrypt.js";
+import "./node-rsa.js";
+import "./pako.min.js";
+import 模板 from "./模板.js";
+import {
+ gbkTool
+} from "./gbk.js";
+import "./json5.js";
+import "./jinja.js";
+const _jinja2 = cheerio.jinja2;
+cheerio.jinja2 = function(template, obj) {
+ try {
+ return jinja.render(template, obj)
+ } catch (e) {
+ console.log("新的jinja2库渲染失败,换回原始cheerio:" + e.message);
+ return _jinja2(template, obj)
+ }
+};
+let vercode = typeof pdfl === "function" ? "drpy2.1" : "drpy2";
+const VERSION = vercode + " 3.9.51beta6 20241126";
+const UpdateInfo = [{
+ date: "20241126",
+ title: "drpy更新,优化去广告算法",
+ version: "3.9.51beta6 20241126",
+ msg: `
+ 1. 更新龙头大佬提供的去广告算法
+ `
+}, {
+ date: "20241104",
+ title: "drpy更新,增加新特性",
+ version: "3.9.51beta5 20241104",
+ msg: `
+ 1. rule增加 搜索验证标识 属性,可以不定义,默认为 '系统安全验证|请输入验证码'
+ 2. rule增加 searchNoPage 属性,可以不定义,如果定义 1 将关闭该源的搜索翻页功能,超过1页直接返回空
+ `
+}];
+
+function getUpdateInfo() {
+ return UpdateInfo.map(_o => {
+ _o.msg = _o.msg.trim().split("\n").map(_it => _it.trim()).join("\n");
+ return _o
+ })
+}
+
+function init_test() {
+ console.log("init_test_start");
+ console.log("当前版本号:" + VERSION);
+ console.log("本地代理地址:" + getProxyUrl());
+ console.log(RKEY);
+ console.log(JSON.stringify(rule));
+ console.log("init_test_end")
+}
+
+function ocr_demo_test() {
+ let img_base64 = `iVBORw0KGgoAAAANSUhEUgAAAIAAAAAoBAMAAADEX+97AAAAG1BMVEXz+/4thQTa7N6QwIFFkyNeokKozqDB3b93sWHFR+MEAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABN0lEQVRIie2TQU+DQBCFt9vScvQpxR4xrcSjJCZ67JDGXsX+AdR4B3vpsSYm/m2HXaRLmuySepR3Gdidb/btDAjRq5dT96eCMlfBuzi1QLZUoZy2yz5sOvI+9iomaPEZ6nWnEtxqIyiM1RcAy44GNDhBXUjot/VVNweV1ah68FqWRyjKIOqAcyYF6rGcmpYnHzGt3fycNoMw0d3/THFu7hFSJ/8OXO6iTM8/KSg09obAzIHLO250LgQ0txOZSfgrV4Exdw98uGycJ0ErAeExZGhOmFHV9zHO6qVSj0MpLq7xZON56o++MjlsEgfVhbQWWME+xQX7J4V6zfi9A1Ly9rP1BvEXp+BbVJ/M77n+wfOIDVp51pZ4iBxvmj9AGrtvry6emwfKnVkW+ZRKd5ZNMvob36vXP9YPDmQki8QiCFAAAAAASUVORK5CYII=`;
+ OcrApi.api = OCR_API;
+ let code = OcrApi.classification(img_base64);
+ log("测试验证码图片的ocr识别结果为:" + code)
+}
+
+function rsa_demo_test() {
+ let t1 = (new Date).getTime();
+ let pkcs1_public = `
+-----BEGIN RSA PUBLIC KEY-----
+MEgCQQCrI0pQ/ERRpJ3Ou190XJedFq846nDYP52rOtXyDxlFK5D3p6JJu2RwsKwy
+lsQ9xY0xYPpRZUZKMEeR7e9gmRNLAgMBAAE=
+-----END RSA PUBLIC KEY-----
+`.trim();
+ let pkcs1_public_pem = `
+MEgCQQCrI0pQ/ERRpJ3Ou190XJedFq846nDYP52rOtXyDxlFK5D3p6JJu2RwsKwy
+lsQ9xY0xYPpRZUZKMEeR7e9gmRNLAgMBAAE=
+`.trim();
+ let pkcs8_public = `
+-----BEGIN PUBLIC KEY-----
+MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKsjSlD8RFGknc67X3Rcl50WrzjqcNg/
+nas61fIPGUUrkPenokm7ZHCwrDKWxD3FjTFg+lFlRkowR5Ht72CZE0sCAwEAAQ==
+-----END PUBLIC KEY-----`.trim();
+ let pkcs8_public_pem = `
+MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKsjSlD8RFGknc67X3Rcl50WrzjqcNg/
+nas61fIPGUUrkPenokm7ZHCwrDKWxD3FjTFg+lFlRkowR5Ht72CZE0sCAwEAAQ==
+`.trim();
+ let pkcs1_private = `
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOAIBAAJBAKsjSlD8RFGknc67X3Rcl50WrzjqcNg/nas61fIPGUUrkPenokm7
+ZHCwrDKWxD3FjTFg+lFlRkowR5Ht72CZE0sCAwEAAQI/b6OV1z65UokQaMvSeRXt
+0Yv6wiYtduQI9qpq5nzy/ytaqsbBfClNTi/HifKPKxlRouWFkc518EQI8LBxoarJ
+AiEA4DaONMplV8PQNa3TKn2F+SDEvLOCjdL0kHKdN90Ti28CIQDDZnTBaHgZwZbA
+hS7Bbf5yvwjWMhO6Y7l04/Qm7R+35QIgPuQuqXIoUSD080mp1N5WyRW++atksIF+
+5lGv9e6GP/MCICnj8y/rl6Pd7tXDN6zcSeqLrfdNsREKhB3dKOCXgW9JAiAFYtFS
+EJNBXVRTK42SNsZ2hJ/9xLwOwnH2epT8Q43s3Q==
+-----END RSA PRIVATE KEY-----
+`.trim();
+ let pkcs8_private = `
+-----BEGIN PRIVATE KEY-----
+MIIBUgIBADANBgkqhkiG9w0BAQEFAASCATwwggE4AgEAAkEAqyNKUPxEUaSdzrtf
+dFyXnRavOOpw2D+dqzrV8g8ZRSuQ96eiSbtkcLCsMpbEPcWNMWD6UWVGSjBHke3v
+YJkTSwIDAQABAj9vo5XXPrlSiRBoy9J5Fe3Ri/rCJi125Aj2qmrmfPL/K1qqxsF8
+KU1OL8eJ8o8rGVGi5YWRznXwRAjwsHGhqskCIQDgNo40ymVXw9A1rdMqfYX5IMS8
+s4KN0vSQcp033ROLbwIhAMNmdMFoeBnBlsCFLsFt/nK/CNYyE7pjuXTj9CbtH7fl
+AiA+5C6pcihRIPTzSanU3lbJFb75q2SwgX7mUa/17oY/8wIgKePzL+uXo93u1cM3
+rNxJ6out902xEQqEHd0o4JeBb0kCIAVi0VIQk0FdVFMrjZI2xnaEn/3EvA7CcfZ6
+lPxDjezd
+-----END PRIVATE KEY-----
+`.trim();
+ let data = `
+NodeRsa
+这是node-rsa 现在修改集成在drpy里使用`.trim();
+ let encryptedWithPublic = NODERSA.encryptRSAWithPublicKey(data, pkcs1_public, {
+ outputEncoding: "base64",
+ options: {
+ environment: "browser",
+ encryptionScheme: "pkcs1_oaep"
+ }
+ });
+ console.log("公钥加密");
+ console.log(encryptedWithPublic);
+ let decryptedWithPrivate = NODERSA.decryptRSAWithPrivateKey(encryptedWithPublic, pkcs1_private, {
+ options: {
+ environment: "browser",
+ encryptionScheme: "pkcs1_oaep"
+ }
+ });
+ console.log("私钥解密");
+ console.log(decryptedWithPrivate);
+ let pkcs1_sha256_sign = NODERSA.sign("1", pkcs1_private, {
+ outputEncoding: "base64",
+ options: {
+ environment: "browser",
+ encryptionScheme: "pkcs1",
+ signingScheme: "pkcs1-sha256"
+ }
+ });
+ console.log("pkcs1_sha256_sign");
+ console.log(pkcs1_sha256_sign);
+ let pkcs1_sha256_sign_verify = NODERSA.verify("1", "Oulx2QrgeipKYBtqEDqFb2s/+ndk2cGQxO4CkhU7iBM1vyNmmvqubpsmeoUuN3waGrYZLknSEdwBkfv0tUMpFQ==", pkcs1_private, {
+ options: {
+ environment: "browser",
+ encryptionScheme: "pkcs1",
+ signingScheme: "pkcs1-sha256"
+ }
+ });
+ console.log("pkcs1_sha256_sign_verify");
+ console.log(pkcs1_sha256_sign_verify);
+ let pkcs1_oaep_sha256 = NODERSA.encryptRSAWithPublicKey(data, `-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA5KOq1gRNyllLNWKQy8sGpZE3Q1ULLSmzZw+eaAhj9lvqn7IsT1du
+SYn08FfoOA2qMwtz+1O2l1mgzNoSVCyVpVabnTG+C9XKeZXAnJHd8aYA7l7Sxhdm
+kte+iymYZ0ZBPzijo8938iugtVvqi9UgDmnY3u/NlQDqiL5BGqSxSTd/Sgmy3zD8
+PYzEa3wD9vehQ5fZZ45vKIq8GNVh2Z8+IGO85FF1OsN7+b2yGJa/FmDDNn0+HP+m
+PfI+kYBqEVpo0Ztbc3UdxgFwGC8O1n8AQyriwHnSOtIiuBH62J/7qyC/3LEAApRb
+Dd9YszqzmODjQUddZKHmvc638VW+azc0EwIDAQAB
+-----END RSA PUBLIC KEY-----
+`, {
+ outputEncoding: "base64",
+ options: {
+ environment: "browser",
+ encryptionScheme: {
+ scheme: "pkcs1_oaep",
+ hash: "sha256"
+ }
+ }
+ });
+ console.log("pkcs1_oaep_sha256");
+ console.log(pkcs1_oaep_sha256);
+ decryptedWithPrivate = NODERSA.decryptRSAWithPrivateKey("kSZesAAyYh2hdsQnYMdGqb6gKAzTauBKouvBzWcc4+F8RvGd0nwO6mVkUMVilPgUuNxjEauHayHiY8gI3Py45UI3+km0rSGyHrS6dHiHgCkMejXHieglYzAB0IxX3Jkm4z/66bdB/D+GFy0oct5fGCMI1UHPjEAYOsazJDa8lBFNbjiWFeb/qiZtIx3vGM7KYPAZzyRf/zPbbQ8zy9xOmRuOl5nnIxgo0Okp3KO/RIPO4GZOSBA8f2lx1UtNwwrXAMpcNavtoqHVcjJ/9lcotXYQFrn5b299pSIRf2gVm8ZJ31SK6Z8cc14nKtvgnmsgClDzIXJ1o1RcDK+knVAySg==", `-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEA5KOq1gRNyllLNWKQy8sGpZE3Q1ULLSmzZw+eaAhj9lvqn7Is
+T1duSYn08FfoOA2qMwtz+1O2l1mgzNoSVCyVpVabnTG+C9XKeZXAnJHd8aYA7l7S
+xhdmkte+iymYZ0ZBPzijo8938iugtVvqi9UgDmnY3u/NlQDqiL5BGqSxSTd/Sgmy
+3zD8PYzEa3wD9vehQ5fZZ45vKIq8GNVh2Z8+IGO85FF1OsN7+b2yGJa/FmDDNn0+
+HP+mPfI+kYBqEVpo0Ztbc3UdxgFwGC8O1n8AQyriwHnSOtIiuBH62J/7qyC/3LEA
+ApRbDd9YszqzmODjQUddZKHmvc638VW+azc0EwIDAQABAoIBADZ/QGgUzInvsLp/
+zO2WbfYm39o/uhNAvk9RbLt1TIZbMFhyOpeKynHi3Swwd9xsfWX/U9zS/lGi/m31
+iKrhmaW4OA1G3vqpMcK7TBbFufYwUEaA+ZJX344euH8pIfdzyneMQ4z3Far2dS7l
+QsmjuilVV2kEFadveXewiYoVOWCu00w6bN8wy2SIHlQn+kIL6HQhWz12iKKflIKu
+eGRdzLHsKmBt6WbY1Wuhx7HU0fAKdlBDPxCHNlI+kybUYE9o5C2vJiaVM5wqJBgZ
+8Dz8kt1QbLJ910JoLXkLVQ8uC8NJKQwFtqQjTGPnEq0+wbgz6Ij599rKZkwW/xq9
+l6KoUiECgYEA6Ah42tVdkNW047f03xVYXFH96RgorHRS36mR8Y+ONUq1fwKidovC
+WjwVujt4OPf3l1W6iyn/F6cu/bsmvPrSc3HTN0B1V31QK4OjgetxQ2PSbTldH02J
+NPzkt+v+cPxXpx/P5mgt7Weefw5txU547KubGrHUV5rBKFtIx9pj16MCgYEA/EF0
+o19+D24DZAPwlDS5VbEd7FStnwY4oQ5PqbuNOSbSJLMWU0AqzXcRokp8UTyCZ0X3
+ATkS1REq97kShCuR+npTR6a6DlY7sdpPI1SMLNajgB2tkx0EOzX+PfNIbHUd4jpJ
+I0ZMAHv/OOtkzQHDaeTWBTrzsWm6/nTiykfduNECgYEA46AMD4HpPECqKAs66e5i
+tI6q7JSKskObWVdcmQEfnSAhVOwcvPb2Ptda6UuV8S0xcwDi88rLOUUFUFzc79+P
+vTkY38cYVi/VChsluDpk7ptqv0PbGu5Rf+3n4pZdEjI7OvR2W64wAAn67uIUxc7p
+yiO/ET0K9rYWb6S9jXGtKMkCgYEA2kPAqoO7zZoBMQ7/oR0lp/HC1HRIbiqx4RlC
+8Lgpb+QZPEwA6zPAVVvLVENi4d+bbcRp/xLlKpraNNJcJSSWAMbLPFoU7sbKjA87
+HnTPfRSTEA2d3Ibk3F7Rh8TzS3Ti0JZiJjVzGZAwu41iAMifzwaD8K6boUy80eNN
+QH2CaaECgYBUsLYvC/MiYg3w+LGOONuQongoVUXjGqnw2bjVa9RK7lwRdXPUqJ51
+MpVO98IkoLvGSI/0sGNP3GKNhC+eMGjJAVwFyEuOn+JsmMv9Y9uStIVi5tIHIhKw
+m7mp8il0kaftHdSxTbspG3tZ2fjIiFIZkLEOmRpd7ogWumgOajzUdA==
+-----END RSA PRIVATE KEY-----`, {
+ options: {
+ environment: "browser",
+ encryptionScheme: "pkcs1_oaep"
+ }
+ });
+ console.log("decryptedWithPrivate");
+ console.log(decryptedWithPrivate);
+ (() => {
+ let key = new NODERSA.NodeRSA({
+ b: 1024
+ });
+ key.setOptions({
+ encryptionScheme: "pkcs1"
+ });
+ let text = `你好drpy node-ras`;
+ let encrypted = key.encrypt(text, "base64");
+ console.log("encrypted: ", encrypted);
+ const decrypted = key.decrypt(encrypted, "utf8");
+ console.log("decrypted: ", decrypted)
+ })();
+ let t2 = (new Date).getTime();
+ console.log("rsa_demo_test 测试耗时:" + (t2 - t1) + "毫秒")
+}
+
+function pre() {
+ if (typeof rule.预处理 === "string" && rule.预处理 && rule.预处理.trim()) {
+ let code = rule.预处理.trim();
+ console.log("执行预处理代码:" + code);
+ if (code.startsWith("js:")) {
+ code = code.replace("js:", "")
+ }
+ try {
+ eval(code)
+ } catch (e) {
+ console.log(`预处理执行失败:${e.message}`)
+ }
+ }
+}
+let rule = {};
+const MOBILE_UA = "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36";
+const PC_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36";
+const UA = "Mozilla/5.0";
+const UC_UA = "Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36";
+const IOS_UA = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1";
+const RULE_CK = "cookie";
+const CATE_EXCLUDE = "首页|留言|APP|下载|资讯|新闻|动态";
+const TAB_EXCLUDE = "猜你|喜欢|下载|剧情|榜|评论";
+const OCR_RETRY = 3;
+const OCR_API = "https://api.nn.ci/ocr/b64/text";
+if (typeof MY_URL === "undefined") {
+ var MY_URL
+}
+var HOST;
+var RKEY;
+var fetch;
+var print;
+var log;
+var rule_fetch_params;
+var fetch_params;
+var oheaders;
+var _pdfh;
+var _pdfa;
+var _pd;
+const DOM_CHECK_ATTR = /(url|src|href|-original|-src|-play|-url|style)$/;
+const SPECIAL_URL = /^(ftp|magnet|thunder|ws):/;
+const NOADD_INDEX = /:eq|:lt|:gt|:first|:last|^body$|^#/;
+const URLJOIN_ATTR = /(url|src|href|-original|-src|-play|-url|style)$|^(data-|url-|src-)/;
+const SELECT_REGEX = /:eq|:lt|:gt|#/g;
+const SELECT_REGEX_A = /:eq|:lt|:gt/g;
+const $js = {
+ toString(func) {
+ let strfun = func.toString();
+ return strfun.replace(/^\(\)(\s+)?=>(\s+)?\{/, "js:").replace(/\}$/, "")
+ }
+};
+
+function window_b64() {
+ let b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ let base64DecodeChars = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1);
+
+ function btoa(str) {
+ var out, i, len;
+ var c1, c2, c3;
+ len = str.length;
+ i = 0;
+ out = "";
+ while (i < len) {
+ c1 = str.charCodeAt(i++) & 255;
+ if (i == len) {
+ out += b64map.charAt(c1 >> 2);
+ out += b64map.charAt((c1 & 3) << 4);
+ out += "==";
+ break
+ }
+ c2 = str.charCodeAt(i++);
+ if (i == len) {
+ out += b64map.charAt(c1 >> 2);
+ out += b64map.charAt((c1 & 3) << 4 | (c2 & 240) >> 4);
+ out += b64map.charAt((c2 & 15) << 2);
+ out += "=";
+ break
+ }
+ c3 = str.charCodeAt(i++);
+ out += b64map.charAt(c1 >> 2);
+ out += b64map.charAt((c1 & 3) << 4 | (c2 & 240) >> 4);
+ out += b64map.charAt((c2 & 15) << 2 | (c3 & 192) >> 6);
+ out += b64map.charAt(c3 & 63)
+ }
+ return out
+ }
+
+ function atob(str) {
+ var c1, c2, c3, c4;
+ var i, len, out;
+ len = str.length;
+ i = 0;
+ out = "";
+ while (i < len) {
+ do {
+ c1 = base64DecodeChars[str.charCodeAt(i++) & 255]
+ } while (i < len && c1 == -1);
+ if (c1 == -1) break;
+ do {
+ c2 = base64DecodeChars[str.charCodeAt(i++) & 255]
+ } while (i < len && c2 == -1);
+ if (c2 == -1) break;
+ out += String.fromCharCode(c1 << 2 | (c2 & 48) >> 4);
+ do {
+ c3 = str.charCodeAt(i++) & 255;
+ if (c3 == 61) return out;
+ c3 = base64DecodeChars[c3]
+ } while (i < len && c3 == -1);
+ if (c3 == -1) break;
+ out += String.fromCharCode((c2 & 15) << 4 | (c3 & 60) >> 2);
+ do {
+ c4 = str.charCodeAt(i++) & 255;
+ if (c4 == 61) return out;
+ c4 = base64DecodeChars[c4]
+ } while (i < len && c4 == -1);
+ if (c4 == -1) break;
+ out += String.fromCharCode((c3 & 3) << 6 | c4)
+ }
+ return out
+ }
+ return {
+ atob: atob,
+ btoa: btoa
+ }
+}
+if (typeof atob !== "function" || typeof btoa !== "function") {
+ var {
+ atob,
+ btoa
+ } = window_b64()
+}
+if (typeof Object.assign !== "function") {
+ Object.assign = function() {
+ let target = arguments[0];
+ for (let i = 1; i < arguments.length; i++) {
+ let source = arguments[i];
+ for (let key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key]
+ }
+ }
+ }
+ return target
+ }
+}
+if (!String.prototype.includes) {
+ String.prototype.includes = function(search, start) {
+ if (typeof start !== "number") {
+ start = 0
+ }
+ if (start + search.length > this.length) {
+ return false
+ } else {
+ return this.indexOf(search, start) !== -1
+ }
+ }
+}
+if (!Array.prototype.includes) {
+ Object.defineProperty(Array.prototype, "includes", {
+ value: function(searchElement, fromIndex) {
+ if (this == null) {
+ throw new TypeError('"this" is null or not defined')
+ }
+ var o = Object(this);
+ var len = o.length >>> 0;
+ if (len === 0) {
+ return false
+ }
+ var n = fromIndex | 0;
+ var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
+ while (k < len) {
+ if (o[k] === searchElement) {
+ return true
+ }
+ k++
+ }
+ return false
+ },
+ enumerable: false
+ })
+}
+if (typeof String.prototype.startsWith !== "function") {
+ String.prototype.startsWith = function(prefix) {
+ return this.slice(0, prefix.length) === prefix
+ }
+}
+if (typeof String.prototype.endsWith !== "function") {
+ String.prototype.endsWith = function(suffix) {
+ return this.indexOf(suffix, this.length - suffix.length) !== -1
+ }
+}
+Object.defineProperty(Object.prototype, "myValues", {
+ value: function(obj) {
+ if (obj == null) {
+ throw new TypeError("Cannot convert undefined or null to object")
+ }
+ var res = [];
+ for (var k in obj) {
+ if (obj.hasOwnProperty(k)) {
+ res.push(obj[k])
+ }
+ }
+ return res
+ },
+ enumerable: false
+});
+if (typeof Object.prototype.values !== "function") {
+ Object.defineProperty(Object.prototype, "values", {
+ value: function(obj) {
+ if (obj == null) {
+ throw new TypeError("Cannot convert undefined or null to object")
+ }
+ var res = [];
+ for (var k in obj) {
+ if (obj.hasOwnProperty(k)) {
+ res.push(obj[k])
+ }
+ }
+ return res
+ },
+ enumerable: false
+ })
+}
+if (typeof Array.prototype.join !== "function") {
+ Object.defineProperty(Array.prototype, "join", {
+ value: function(emoji) {
+ emoji = emoji || "";
+ let self = this;
+ let str = "";
+ let i = 0;
+ if (!Array.isArray(self)) {
+ throw String(self) + "is not Array"
+ }
+ if (self.length === 0) {
+ return ""
+ }
+ if (self.length === 1) {
+ return String(self[0])
+ }
+ i = 1;
+ str = this[0];
+ for (; i < self.length; i++) {
+ str += String(emoji) + String(self[i])
+ }
+ return str
+ },
+ enumerable: false
+ })
+}
+if (typeof Array.prototype.toReversed !== "function") {
+ Object.defineProperty(Array.prototype, "toReversed", {
+ value: function() {
+ const clonedList = this.slice();
+ const reversedList = clonedList.reverse();
+ return reversedList
+ },
+ enumerable: false
+ })
+}
+Object.defineProperty(Array.prototype, "append", {
+ value: Array.prototype.push,
+ enumerable: false
+});
+Object.defineProperty(String.prototype, "strip", {
+ value: String.prototype.trim,
+ enumerable: false
+});
+Object.defineProperty(String.prototype, "rstrip", {
+ value: function(chars) {
+ let regex = new RegExp(chars + "$");
+ return this.replace(regex, "")
+ },
+ enumerable: false
+});
+
+function 是否正版(vipUrl) {
+ let flag = new RegExp("qq.com|iqiyi.com|youku.com|mgtv.com|bilibili.com|sohu.com|ixigua.com|pptv.com|miguvideo.com|le.com|1905.com|fun.tv");
+ return flag.test(vipUrl)
+}
+
+function urlDeal(vipUrl) {
+ if (!vipUrl) {
+ return ""
+ }
+ if (!是否正版(vipUrl)) {
+ return vipUrl
+ }
+ if (!/miguvideo/.test(vipUrl)) {
+ vipUrl = vipUrl.split("#")[0].split("?")[0]
+ }
+ return vipUrl
+}
+
+function setResult(d) {
+ if (!Array.isArray(d)) {
+ return []
+ }
+ VODS = [];
+ d.forEach(function(it) {
+ let obj = {
+ vod_id: it.url || "",
+ vod_name: it.title || "",
+ vod_remarks: it.desc || "",
+ vod_content: it.content || "",
+ vod_pic: it.pic_url || it.img || ""
+ };
+ let keys = Object.keys(it);
+ if (keys.includes("tname")) {
+ obj.type_name = it.tname || ""
+ }
+ if (keys.includes("tid")) {
+ obj.type_id = it.tid || ""
+ }
+ if (keys.includes("year")) {
+ obj.vod_year = it.year || ""
+ }
+ if (keys.includes("actor")) {
+ obj.vod_actor = it.actor || ""
+ }
+ if (keys.includes("director")) {
+ obj.vod_director = it.director || ""
+ }
+ if (keys.includes("area")) {
+ obj.vod_area = it.area || ""
+ }
+ VODS.push(obj)
+ });
+ return VODS
+}
+
+function setResult2(res) {
+ VODS = res.list || [];
+ return VODS
+}
+
+function setHomeResult(res) {
+ if (!res || typeof res !== "object") {
+ return []
+ }
+ return setResult(res.list)
+}
+
+function rc(js) {
+ if (js === "maomi_aes.js") {
+ var a = CryptoJS.enc.Utf8.parse("625222f9149e961d");
+ var t = CryptoJS.enc.Utf8.parse("5efdtf6060e2o330");
+ return {
+ De: function(word) {
+ word = CryptoJS.enc.Hex.parse(word);
+ return CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(word), a, {
+ iv: t,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.Pkcs7
+ }).toString(CryptoJS.enc.Utf8)
+ },
+ En: function(word) {
+ var Encrypted = CryptoJS.AES.encrypt(word, a, {
+ iv: t,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.Pkcs7
+ });
+ return Encrypted.ciphertext.toString()
+ }
+ }
+ }
+ return {}
+}
+
+function maoss(jxurl, ref, key) {
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ eval(getCryptoJS());
+ try {
+ var getVideoInfo = function(text) {
+ return CryptoJS.AES.decrypt(text, key, {
+ iv: iv,
+ padding: CryptoJS.pad.Pkcs7
+ }).toString(CryptoJS.enc.Utf8)
+ };
+ var token_key = key == undefined ? "dvyYRQlnPRCMdQSe" : key;
+ if (ref) {
+ var html = request(jxurl, {
+ headers: {
+ Referer: ref
+ }
+ })
+ } else {
+ var html = request(jxurl)
+ }
+ if (html.indexOf("&btwaf=") != -1) {
+ html = request(jxurl + "&btwaf" + html.match(/&btwaf(.*?)"/)[1], {
+ headers: {
+ Referer: ref
+ }
+ })
+ }
+ var token_iv = html.split('_token = "')[1].split('"')[0];
+ var key = CryptoJS.enc.Utf8.parse(token_key);
+ var iv = CryptoJS.enc.Utf8.parse(token_iv);
+ eval(html.match(/var config = {[\s\S]*?}/)[0] + "");
+ if (!config.url.startsWith("http")) {
+ config.url = CryptoJS.AES.decrypt(config.url, key, {
+ iv: iv,
+ padding: CryptoJS.pad.Pkcs7
+ }).toString(CryptoJS.enc.Utf8)
+ }
+ return config.url
+ } catch (e) {
+ return ""
+ }
+}
+
+function urlencode(str) {
+ str = (str + "").toString();
+ return encodeURIComponent(str).replace(/!/g, "%21").replace(/'/g, "%27").replace(/\(/g, "%28").replace(/\)/g, "%29").replace(/\*/g, "%2A").replace(/%20/g, "+")
+}
+
+function encodeUrl(str) {
+ if (typeof encodeURI == "function") {
+ return encodeURI(str)
+ } else {
+ str = (str + "").toString();
+ return encodeURIComponent(str).replace(/%2F/g, "/").replace(/%3F/g, "?").replace(/%3A/g, ":").replace(/%40/g, "@").replace(/%3D/g, "=").replace(/%3A/g, ":").replace(/%2C/g, ",").replace(/%2B/g, "+").replace(/%24/g, "$")
+ }
+}
+
+function base64Encode(text) {
+ return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text))
+}
+
+function base64Decode(text) {
+ return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(text))
+}
+
+function md5(text) {
+ return CryptoJS.MD5(text).toString()
+}
+
+function uint8ArrayToBase64(uint8Array) {
+ let binaryString = String.fromCharCode.apply(null, Array.from(uint8Array));
+ return btoa(binaryString)
+}
+
+function Utf8ArrayToStr(array) {
+ var out, i, len, c;
+ var char2, char3;
+ out = "";
+ len = array.length;
+ i = 0;
+ while (i < len) {
+ c = array[i++];
+ switch (c >> 4) {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ out += String.fromCharCode(c);
+ break;
+ case 12:
+ case 13:
+ char2 = array[i++];
+ out += String.fromCharCode((c & 31) << 6 | char2 & 63);
+ break;
+ case 14:
+ char2 = array[i++];
+ char3 = array[i++];
+ out += String.fromCharCode((c & 15) << 12 | (char2 & 63) << 6 | (char3 & 63) << 0);
+ break
+ }
+ }
+ return out
+}
+
+function gzip(str) {
+ let arr = pako.gzip(str, {});
+ return uint8ArrayToBase64(arr)
+}
+
+function ungzip(b64Data) {
+ let strData = atob(b64Data);
+ const charData = strData.split("").map(function(x) {
+ return x.charCodeAt(0)
+ });
+ const binData = new Uint8Array(charData);
+ const data = pako.inflate(binData);
+ return Utf8ArrayToStr(data)
+}
+
+function encodeStr(input, encoding) {
+ encoding = encoding || "gbk";
+ if (encoding.startsWith("gb")) {
+ const strTool = gbkTool();
+ input = strTool.encode(input)
+ }
+ return input
+}
+
+function decodeStr(input, encoding) {
+ encoding = encoding || "gbk";
+ if (encoding.startsWith("gb")) {
+ const strTool = gbkTool();
+ input = strTool.decode(input)
+ }
+ return input
+}
+
+function getCryptoJS() {
+ return 'console.log("CryptoJS已装载");'
+}
+const RSA = {
+ decode: function(data, key, option) {
+ option = option || {};
+ if (typeof JSEncrypt === "function") {
+ let chunkSize = option.chunkSize || 117;
+ let privateKey = this.getPrivateKey(key);
+ const decryptor = new JSEncrypt;
+ decryptor.setPrivateKey(privateKey);
+ let uncrypted = "";
+ uncrypted = decryptor.decryptUnicodeLong(data);
+ return uncrypted
+ } else {
+ return false
+ }
+ },
+ encode: function(data, key, option) {
+ option = option || {};
+ if (typeof JSEncrypt === "function") {
+ let chunkSize = option.chunkSize || 117;
+ let publicKey = this.getPublicKey(key);
+ const encryptor = new JSEncrypt;
+ encryptor.setPublicKey(publicKey);
+ let encrypted = "";
+ encrypted = encryptor.encryptUnicodeLong(data);
+ return encrypted
+ } else {
+ return false
+ }
+ },
+ fixKey(key, prefix, endfix) {
+ if (!key.includes(prefix)) {
+ key = prefix + key
+ }
+ if (!key.includes(endfix)) {
+ key += endfix
+ }
+ return key
+ },
+ getPrivateKey(key) {
+ let prefix = "-----BEGIN RSA PRIVATE KEY-----";
+ let endfix = "-----END RSA PRIVATE KEY-----";
+ return this.fixKey(key, prefix, endfix)
+ },
+ getPublicKey(key) {
+ let prefix = "-----BEGIN PUBLIC KEY-----";
+ let endfix = "-----END PUBLIC KEY-----";
+ return this.fixKey(key, prefix, endfix)
+ }
+};
+
+function getProxyUrl() {
+ if (typeof getProxy === "function") {
+ return getProxy(true)
+ } else {
+ return "http://127.0.0.1:9978/proxy?do=js"
+ }
+}
+
+function fixAdM3u8(m3u8_text, m3u8_url, ad_remove) {
+ if (!m3u8_text && !m3u8_url || !m3u8_text && m3u8_url && !m3u8_url.startsWith("http")) {
+ return ""
+ }
+ if (!m3u8_text) {
+ log("m3u8_url:" + m3u8_url);
+ m3u8_text = request(m3u8_url)
+ }
+ log("len(m3u8_text):" + m3u8_text.length);
+ if (!ad_remove) {
+ return m3u8_text
+ }
+ if (ad_remove.startsWith("reg:")) {
+ ad_remove = ad_remove.slice(4)
+ } else if (ad_remove.startsWith("js:")) {
+ ad_remove = ad_remove.slice(3)
+ }
+ let m3u8_start = m3u8_text.slice(0, m3u8_text.indexOf("#EXTINF")).trim();
+ let m3u8_body = m3u8_text.slice(m3u8_text.indexOf("#EXTINF"), m3u8_text.indexOf("#EXT-X-ENDLIST")).trim();
+ let m3u8_end = m3u8_text.slice(m3u8_text.indexOf("#EXT-X-ENDLIST")).trim();
+ let murls = [];
+ let m3_body_list = m3u8_body.split("\n");
+ let m3_len = m3_body_list.length;
+ let i = 0;
+ while (i < m3_len) {
+ let mi = m3_body_list[i];
+ let mi_1 = m3_body_list[i + 1];
+ if (mi.startsWith("#EXTINF")) {
+ murls.push([mi, mi_1].join("&"));
+ i += 2
+ } else if (mi.startsWith("#EXT-X-DISCONTINUITY")) {
+ let mi_2 = m3_body_list[i + 2];
+ murls.push([mi, mi_1, mi_2].join("&"));
+ i += 3
+ } else {
+ break
+ }
+ }
+ let new_m3u8_body = [];
+ for (let murl of murls) {
+ if (ad_remove && new RegExp(ad_remove).test(murl)) {} else {
+ let murl_list = murl.split("&");
+ if (!murl_list[murl_list.length - 1].startsWith("http") && m3u8_url.startsWith("http")) {
+ murl_list[murl_list.length - 1] = urljoin(m3u8_url, murl_list[murl_list.length - 1])
+ }
+ murl_list.forEach(it => {
+ new_m3u8_body.push(it)
+ })
+ }
+ }
+ new_m3u8_body = new_m3u8_body.join("\n").trim();
+ m3u8_text = [m3u8_start, new_m3u8_body, m3u8_end].join("\n").trim();
+ return m3u8_text
+}
+
+function fixAdM3u8Ai(m3u8_url, headers) {
+ let ts = (new Date).getTime();
+ let option = headers ? {
+ headers: headers
+ } : {};
+
+ function b(s1, s2) {
+ let i = 0;
+ while (i < s1.length) {
+ if (s1[i] !== s2[i]) {
+ break
+ }
+ i++
+ }
+ return i
+ }
+
+ function reverseString(str) {
+ return str.split("").reverse().join("")
+ }
+ let m3u8 = request(m3u8_url, option);
+ m3u8 = m3u8.trim().split("\n").map(it => it.startsWith("#") ? it : urljoin(m3u8_url, it)).join("\n");
+ m3u8 = m3u8.replace(/\n\n/gi, "\n");
+ let last_url = m3u8.split("\n").slice(-1)[0];
+ if (last_url.length < 5) {
+ last_url = m3u8.split("\n").slice(-2)[0]
+ }
+ if (last_url.includes(".m3u8") && last_url !== m3u8_url) {
+ m3u8_url = urljoin2(m3u8_url, last_url);
+ log("嵌套的m3u8_url:" + m3u8_url);
+ m3u8 = request(m3u8_url, option)
+ }
+ let s = m3u8.trim().split("\n").filter(it => it.trim()).join("\n");
+ let ss = s.split("\n");
+ if (m3u8_url.indexOf("ffzy") > 0) {
+ let j = 0,
+ k1 = 0,
+ m = 0,
+ n = 0,
+ t = 0;
+ let s2 = "";
+ for (let i = 0; i < ss.length; i++) {
+ let s = ss[i];
+ let s1 = "";
+ if (s.startsWith("#EXTINF")) {
+ s1 = s.slice(8);
+ n++;
+ if (n == 1) k1 = i;
+ if (s2.indexOf(s1) == -1) {
+ s2 = s2 + s1;
+ m++
+ }
+ t = t + parseFloat(s1);
+ i++;
+ s = ss[i]
+ }
+ if (s.startsWith("#EXT-X-DISCONTINUITY")) {
+ if (n == 5) {
+ log("n:" + n);
+ log("m:" + m);
+ for (let j = k1; j < k1 + n * 2; j++) {
+ log(ss[j])
+ }
+ log("广告位置:" + k1);
+ log("数据条数:" + n);
+ log("数据种类:" + m);
+ log("广告时间:" + t.toFixed(5));
+ ss.splice(k1, 2 * n + 1);
+ i = i - 2 * n + 1
+ }
+ t = 0;
+ m = 0;
+ n = 0;
+ s2 = ""
+ }
+ }
+ }
+ let firststr = "";
+ let maxl = 0;
+ let kk = 0;
+ let kkk1 = 1;
+ let kkk2 = 0;
+ let secondstr = "";
+ for (let i = 0; i < ss.length; i++) {
+ let s = ss[i];
+ if (!s.startsWith("#")) {
+ if (kk == 0) firststr = s;
+ if (kk > 0) {
+ if (maxl > b(firststr, s) + 1) {
+ if (secondstr.length < 5) secondstr = s;
+ kkk2++
+ } else {
+ maxl = b(firststr, s);
+ kkk1++
+ }
+ }
+ kk++;
+ if (kk >= 30) break
+ }
+ }
+ if (kkk2 > kkk1) firststr = secondstr;
+ let firststrlen = firststr.length;
+ let ml = Math.round(ss.length / 2).toString().length;
+ let maxc = 0;
+ let laststr = ss.toReversed().find(x => {
+ if (!x.startsWith("#")) {
+ let k = b(reverseString(firststr), reverseString(x));
+ maxl = b(firststr, x);
+ maxc++;
+ if (firststrlen - maxl <= ml + k || maxc > 10) {
+ return true
+ }
+ }
+ return false
+ });
+ log("最后一条切片:" + laststr);
+ let ad_urls = [];
+ for (let i = 0; i < ss.length; i++) {
+ let s = ss[i];
+ if (!s.startsWith("#")) {
+ if (b(firststr, s) < maxl) {
+ ad_urls.push(s);
+ ss.splice(i - 1, 2);
+ i = i - 2
+ } else {
+ ss[i] = urljoin(m3u8_url, s)
+ }
+ } else {
+ ss[i] = s.replace(/URI=\"(.*)\"/, 'URI="' + urljoin(m3u8_url, "$1") + '"')
+ }
+ }
+ log("处理的m3u8地址:" + m3u8_url);
+ log("----广告地址----");
+ log(ad_urls);
+ m3u8 = ss.join("\n");
+ log("处理耗时:" + ((new Date).getTime() - ts).toString());
+ log(m3u8);
+ return m3u8
+}
+
+function forceOrder(lists, key, option) {
+ let start = Math.floor(lists.length / 2);
+ let end = Math.min(lists.length - 1, start + 1);
+ if (start >= end) {
+ return lists
+ }
+ let first = lists[start];
+ let second = lists[end];
+ if (key) {
+ try {
+ first = first[key];
+ second = second[key]
+ } catch (e) {}
+ }
+ if (option && typeof option === "function") {
+ try {
+ first = option(first);
+ second = option(second)
+ } catch (e) {}
+ }
+ first += "";
+ second += "";
+ if (first.match(/(\d+)/) && second.match(/(\d+)/)) {
+ let num1 = Number(first.match(/(\d+)/)[1]);
+ let num2 = Number(second.match(/(\d+)/)[1]);
+ if (num1 > num2) {
+ lists.reverse()
+ }
+ }
+ return lists
+}
+let VODS = [];
+let VOD = {};
+let TABS = [];
+let LISTS = [];
+
+function getQuery(url) {
+ try {
+ if (url.indexOf("?") > -1) {
+ url = url.slice(url.indexOf("?") + 1)
+ }
+ let arr = url.split("#")[0].split("&");
+ const resObj = {};
+ arr.forEach(item => {
+ let arr1 = item.split("=");
+ let key = arr1[0];
+ let value = arr1.slice(1).join("=");
+ resObj[key] = value
+ });
+ return resObj
+ } catch (err) {
+ log(`getQuery发生错误:${e.message}`);
+ return {}
+ }
+}
+
+function urljoin(fromPath, nowPath) {
+ fromPath = fromPath || "";
+ nowPath = nowPath || "";
+ return joinUrl(fromPath, nowPath)
+}
+var urljoin2 = urljoin;
+const defaultParser = {
+ pdfh: pdfh,
+ pdfa: pdfa,
+ pd: pd
+};
+
+function pdfh2(html, parse) {
+ let html2 = html;
+ try {
+ if (typeof html !== "string") {
+ html2 = html.rr(html.ele).toString()
+ }
+ } catch (e) {
+ print(`html对象转文本发生了错误:${e.message}`)
+ }
+ let result = defaultParser.pdfh(html2, parse);
+ let option = parse.includes("&&") ? parse.split("&&").slice(-1)[0] : parse.split(" ").slice(-1)[0];
+ if (/style/.test(option.toLowerCase()) && /url\(/.test(result)) {
+ try {
+ result = result.match(/url\((.*?)\)/)[1];
+ result = result.replace(/^['|"](.*)['|"]$/, "$1")
+ } catch (e) {}
+ }
+ return result
+}
+
+function pdfa2(html, parse) {
+ let html2 = html;
+ try {
+ if (typeof html !== "string") {
+ html2 = html.rr(html.ele).toString()
+ }
+ } catch (e) {
+ print(`html对象转文本发生了错误:${e.message}`)
+ }
+ return defaultParser.pdfa(html2, parse)
+}
+
+function pd2(html, parse, uri) {
+ let ret = pdfh2(html, parse);
+ if (typeof uri === "undefined" || !uri) {
+ uri = ""
+ }
+ if (DOM_CHECK_ATTR.test(parse) && !SPECIAL_URL.test(ret)) {
+ if (/http/.test(ret)) {
+ ret = ret.slice(ret.indexOf("http"))
+ } else {
+ ret = urljoin(MY_URL, ret)
+ }
+ }
+ return ret
+}
+const parseTags = {
+ jsp: {
+ pdfh: pdfh2,
+ pdfa: pdfa2,
+ pd: pd2
+ },
+ json: {
+ pdfh(html, parse) {
+ if (!parse || !parse.trim()) {
+ return ""
+ }
+ if (typeof html === "string") {
+ html = JSON.parse(html)
+ }
+ parse = parse.trim();
+ if (!parse.startsWith("$.")) {
+ parse = "$." + parse
+ }
+ parse = parse.split("||");
+ for (let ps of parse) {
+ let ret = cheerio.jp(ps, html);
+ if (Array.isArray(ret)) {
+ ret = ret[0] || ""
+ } else {
+ ret = ret || ""
+ }
+ if (ret && typeof ret !== "string") {
+ ret = ret.toString()
+ }
+ if (ret) {
+ return ret
+ }
+ }
+ return ""
+ },
+ pdfa(html, parse) {
+ if (!parse || !parse.trim()) {
+ return ""
+ }
+ if (typeof html === "string") {
+ html = JSON.parse(html)
+ }
+ parse = parse.trim();
+ if (!parse.startsWith("$.")) {
+ parse = "$." + parse
+ }
+ let ret = cheerio.jp(parse, html);
+ if (Array.isArray(ret) && Array.isArray(ret[0]) && ret.length === 1) {
+ return ret[0] || []
+ }
+ return ret || []
+ },
+ pd(html, parse) {
+ let ret = parseTags.json.pdfh(html, parse);
+ if (ret) {
+ return urljoin(MY_URL, ret)
+ }
+ return ret
+ }
+ },
+ jq: {
+ pdfh(html, parse) {
+ if (!html || !parse || !parse.trim()) {
+ return ""
+ }
+ parse = parse.trim();
+ let result = defaultParser.pdfh(html, parse);
+ return result
+ },
+ pdfa(html, parse) {
+ if (!html || !parse || !parse.trim()) {
+ return []
+ }
+ parse = parse.trim();
+ let result = defaultParser.pdfa(html, parse);
+ print(`pdfa解析${parse}=>${result.length}`);
+ return result
+ },
+ pd(html, parse, base_url) {
+ if (!html || !parse || !parse.trim()) {
+ return ""
+ }
+ parse = parse.trim();
+ base_url = base_url || MY_URL;
+ return defaultParser.pd(html, parse, base_url)
+ }
+ },
+ getParse(p0) {
+ if (p0.startsWith("jsp:")) {
+ return this.jsp
+ } else if (p0.startsWith("json:")) {
+ return this.json
+ } else if (p0.startsWith("jq:")) {
+ return this.jq
+ } else {
+ return this.jq
+ }
+ }
+};
+const stringify = JSON.stringify;
+const jsp = parseTags.jsp;
+const jq = parseTags.jq;
+
+function readFile(filePath) {
+ filePath = filePath || "./uri.min.js";
+ var fd = os.open(filePath);
+ var buffer = new ArrayBuffer(1024);
+ var len = os.read(fd, buffer, 0, 1024);
+ console.log(len);
+ let text = String.fromCharCode.apply(null, new Uint8Array(buffer));
+ console.log(text);
+ return text
+}
+
+function dealJson(html) {
+ try {
+ html = html.trim();
+ if (!(html.startsWith("{") && html.endsWith("}") || html.startsWith("[") && html.endsWith("]"))) {
+ html = "{" + html.match(/.*?\{(.*)\}/m)[1] + "}"
+ }
+ } catch (e) {}
+ try {
+ html = JSON.parse(html)
+ } catch (e) {}
+ return html
+}
+var OcrApi = {
+ api: OCR_API,
+ classification: function(img) {
+ let code = "";
+ try {
+ log("通过drpy_ocr验证码接口过验证...");
+ let html = "";
+ if (this.api.endsWith("drpy/text")) {
+ html = request(this.api, {
+ data: {
+ img: img
+ },
+ headers: {
+ "User-Agent": PC_UA
+ },
+ method: "POST"
+ }, true)
+ } else {
+ html = post(this.api, {
+ body: img
+ })
+ }
+ code = html || ""
+ } catch (e) {
+ log(`OCR识别验证码发生错误:${e.message}`)
+ }
+ return code
+ }
+};
+
+function verifyCode(url) {
+ let cnt = 0;
+ let host = getHome(url);
+ let cookie = "";
+ while (cnt < OCR_RETRY) {
+ try {
+ let yzm_url = `${host}/index.php/verify/index.html`;
+ console.log(`验证码链接:${yzm_url}`);
+ let hhtml = request(yzm_url, {
+ withHeaders: true,
+ toBase64: true
+ }, true);
+ let json = JSON.parse(hhtml);
+ if (!cookie) {
+ let setCk = Object.keys(json).find(it => it.toLowerCase() === "set-cookie");
+ cookie = setCk ? json[setCk].split(";")[0] : ""
+ }
+ console.log("cookie:" + cookie);
+ let img = json.body;
+ let code = OcrApi.classification(img);
+ console.log(`第${cnt+1}次验证码识别结果:${code}`);
+ let submit_url = `${host}/index.php/ajax/verify_check?type=search&verify=${code}`;
+ console.log(submit_url);
+ let html = request(submit_url, {
+ headers: {
+ Cookie: cookie
+ },
+ method: "POST"
+ });
+ html = JSON.parse(html);
+ if (html.msg === "ok") {
+ console.log(`第${cnt+1}次验证码提交成功`);
+ return cookie
+ } else if (html.msg !== "ok" && cnt + 1 >= OCR_RETRY) {
+ cookie = ""
+ }
+ } catch (e) {
+ console.log(`第${cnt+1}次验证码提交失败:${e.message}`);
+ if (cnt + 1 >= OCR_RETRY) {
+ cookie = ""
+ }
+ }
+ cnt += 1
+ }
+ return cookie
+}
+
+function setItem(k, v) {
+ local.set(RKEY, k, v);
+ console.log(`规则${RKEY}设置${k} => ${v}`)
+}
+
+function getItem(k, v) {
+ return local.get(RKEY, k) || v
+}
+
+function clearItem(k) {
+ local.delete(RKEY, k)
+}
+
+function getHome(url) {
+ if (!url) {
+ return ""
+ }
+ let tmp = url.split("//");
+ url = tmp[0] + "//" + tmp[1].split("/")[0];
+ try {
+ url = decodeURIComponent(url)
+ } catch (e) {}
+ return url
+}
+
+function buildUrl(url, obj) {
+ obj = obj || {};
+ if (url.indexOf("?") < 0) {
+ url += "?"
+ }
+ let param_list = [];
+ let keys = Object.keys(obj);
+ keys.forEach(it => {
+ param_list.push(it + "=" + obj[it])
+ });
+ let prs = param_list.join("&");
+ if (keys.length > 0 && !url.endsWith("?")) {
+ url += "&"
+ }
+ url += prs;
+ return url
+}
+
+function $require(url) {
+ eval(request(url))
+}
+
+function keysToLowerCase(obj) {
+ return Object.keys(obj).reduce((result, key) => {
+ const newKey = key.toLowerCase();
+ result[newKey] = obj[key];
+ return result
+ }, {})
+}
+
+function parseQueryString(query) {
+ const params = {};
+ query.split("&").forEach(function(part) {
+ const regex = /^(.*?)=(.*)/;
+ const match = part.match(regex);
+ if (match) {
+ const key = decodeURIComponent(match[1]);
+ const value = decodeURIComponent(match[2]);
+ params[key] = value
+ }
+ });
+ return params
+}
+
+function encodeIfContainsSpecialChars(value) {
+ const specialChars = ":/?#[]@!$'()*+,;=%";
+ if (specialChars.split("").some(char => value.includes(char))) {
+ return encodeURIComponent(value)
+ }
+ return value
+}
+
+function objectToQueryString(obj) {
+ const encoded = [];
+ for (let key in obj) {
+ if (obj.hasOwnProperty(key)) {
+ encoded.push(encodeURIComponent(key) + "=" + encodeIfContainsSpecialChars(obj[key]))
+ }
+ }
+ return encoded.join("&")
+}
+
+function request(url, obj, ocr_flag) {
+ ocr_flag = ocr_flag || false;
+ if (typeof obj === "undefined" || !obj || obj === {}) {
+ if (!fetch_params || !fetch_params.headers) {
+ let headers = {
+ "User-Agent": MOBILE_UA
+ };
+ if (rule.headers) {
+ Object.assign(headers, rule.headers)
+ }
+ if (!fetch_params) {
+ fetch_params = {}
+ }
+ fetch_params.headers = headers
+ }
+ if (!fetch_params.headers.Referer) {
+ fetch_params.headers.Referer = getHome(url)
+ }
+ obj = fetch_params
+ } else {
+ let headers = obj.headers || {};
+ let keys = Object.keys(headers).map(it => it.toLowerCase());
+ if (!keys.includes("user-agent")) {
+ headers["User-Agent"] = MOBILE_UA;
+ if (typeof fetch_params === "object" && fetch_params && fetch_params.headers) {
+ let fetch_headers = keysToLowerCase(fetch_params.headers);
+ if (fetch_headers["user-agent"]) {
+ headers["User-Agent"] = fetch_headers["user-agent"]
+ }
+ }
+ }
+ if (!keys.includes("referer")) {
+ headers["Referer"] = getHome(url)
+ }
+ obj.headers = headers
+ }
+ if (rule.encoding && rule.encoding !== "utf-8" && !ocr_flag) {
+ if (!obj.headers.hasOwnProperty("Content-Type") && !obj.headers.hasOwnProperty("content-type")) {
+ obj.headers["Content-Type"] = "text/html; charset=" + rule.encoding
+ }
+ }
+ if (typeof obj.body != "undefined" && obj.body && typeof obj.body === "string") {
+ if (!obj.headers.hasOwnProperty("Content-Type") && !obj.headers.hasOwnProperty("content-type")) {
+ obj.headers["Content-Type"] = "application/x-www-form-urlencoded; charset=" + rule.encoding
+ }
+ } else if (typeof obj.body != "undefined" && obj.body && typeof obj.body === "object") {
+ obj.data = obj.body;
+ delete obj.body
+ }
+ if (!url) {
+ return obj.withHeaders ? "{}" : ""
+ }
+ if (obj.toBase64) {
+ obj.buffer = 2;
+ delete obj.toBase64
+ }
+ if (obj.redirect === false) {
+ obj.redirect = 0
+ }
+ if (obj.headers.hasOwnProperty("Content-Type") || obj.headers.hasOwnProperty("content-type")) {
+ let _contentType = obj.headers["Content-Type"] || obj.headers["content-type"] || "";
+ if (_contentType.includes("application/x-www-form-urlencoded")) {
+ log("custom body is application/x-www-form-urlencoded");
+ if (typeof obj.body == "string") {
+ let temp_obj = parseQueryString(obj.body);
+ console.log(JSON.stringify(temp_obj))
+ }
+ }
+ }
+ console.log(JSON.stringify(obj.headers));
+ console.log("request:" + url + `|method:${obj.method||"GET"}|body:${obj.body||""}`);
+ let res = req(url, obj);
+ let html = res.content || "";
+ if (obj.withHeaders) {
+ let htmlWithHeaders = res.headers;
+ htmlWithHeaders.body = html;
+ return JSON.stringify(htmlWithHeaders)
+ } else {
+ return html
+ }
+}
+
+function post(url, obj) {
+ obj = obj || {};
+ obj.method = "POST";
+ return request(url, obj)
+}
+
+function reqCookie(url, obj, all_cookie) {
+ obj = obj || {};
+ obj.withHeaders = true;
+ all_cookie = all_cookie || false;
+ let html = request(url, obj);
+ let json = JSON.parse(html);
+ let setCk = Object.keys(json).find(it => it.toLowerCase() === "set-cookie");
+ let cookie = setCk ? json[setCk] : "";
+ if (Array.isArray(cookie)) {
+ cookie = cookie.join(";")
+ }
+ if (!all_cookie) {
+ cookie = cookie.split(";")[0]
+ }
+ html = json.body;
+ return {
+ cookie: cookie,
+ html: html
+ }
+}
+fetch = request;
+print = function(data) {
+ data = data || "";
+ if (typeof data == "object" && Object.keys(data).length > 0) {
+ try {
+ data = JSON.stringify(data);
+ console.log(data)
+ } catch (e) {
+ console.log(typeof data + ":" + data.length);
+ return
+ }
+ } else if (typeof data == "object" && Object.keys(data).length < 1) {
+ console.log("null object")
+ } else {
+ console.log(data)
+ }
+};
+log = print;
+
+function checkHtml(html, url, obj) {
+ if (/\?btwaf=/.test(html)) {
+ let btwaf = html.match(/btwaf(.*?)"/)[1];
+ url = url.split("#")[0] + "?btwaf" + btwaf;
+ print("宝塔验证访问链接:" + url);
+ html = request(url, obj)
+ }
+ return html
+}
+
+function getCode(url, obj) {
+ let html = request(url, obj);
+ html = checkHtml(html, url, obj);
+ return html
+}
+
+function getHtml(url) {
+ let obj = {};
+ if (rule.headers) {
+ obj.headers = rule.headers
+ }
+ let cookie = getItem(RULE_CK, "");
+ if (cookie) {
+ if (obj.headers && !Object.keys(obj.headers).map(it => it.toLowerCase()).includes("cookie")) {
+ log("历史无cookie,新增过验证后的cookie");
+ obj.headers["Cookie"] = cookie
+ } else if (obj.headers && obj.headers.cookie && obj.headers.cookie !== cookie) {
+ obj.headers["Cookie"] = cookie;
+ log("历史有小写过期的cookie,更新过验证后的cookie")
+ } else if (obj.headers && obj.headers.Cookie && obj.headers.Cookie !== cookie) {
+ obj.headers["Cookie"] = cookie;
+ log("历史有大写过期的cookie,更新过验证后的cookie")
+ } else if (!obj.headers) {
+ obj.headers = {
+ Cookie: cookie
+ };
+ log("历史无headers,更新过验证后的含cookie的headers")
+ }
+ }
+ let html = getCode(url, obj);
+ return html
+}
+
+function homeParse(homeObj) {
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let classes = [];
+ if (homeObj.class_name && homeObj.class_url) {
+ let names = homeObj.class_name.split("&");
+ let urls = homeObj.class_url.split("&");
+ let cnt = Math.min(names.length, urls.length);
+ for (let i = 0; i < cnt; i++) {
+ classes.push({
+ type_id: urls[i],
+ type_name: names[i]
+ })
+ }
+ }
+ if (homeObj.class_parse) {
+ if (homeObj.class_parse.startsWith("js:")) {
+ var input = homeObj.MY_URL;
+ try {
+ eval(homeObj.class_parse.replace("js:", ""));
+ if (Array.isArray(input)) {
+ classes = input
+ }
+ } catch (e) {
+ log(`通过js动态获取分类发生了错误:${e.message}`)
+ }
+ } else {
+ let p = homeObj.class_parse.split(";");
+ let p0 = p[0];
+ let _ps = parseTags.getParse(p0);
+ let is_json = p0.startsWith("json:");
+ _pdfa = _ps.pdfa;
+ _pdfh = _ps.pdfh;
+ _pd = _ps.pd;
+ MY_URL = rule.url;
+ if (is_json) {
+ try {
+ let cms_cate_url = homeObj.MY_URL.replace("ac=detail", "ac=list");
+ let html = homeObj.home_html || getHtml(cms_cate_url);
+ if (html) {
+ if (cms_cate_url === homeObj.MY_URL) {
+ homeHtmlCache = html
+ }
+ let list = _pdfa(html, p0.replace("json:", ""));
+ if (list && list.length > 0) {
+ classes = list
+ }
+ }
+ } catch (e) {
+ console.log(e.message)
+ }
+ } else if (p.length >= 3 && !is_json) {
+ try {
+ let html = homeObj.home_html || getHtml(homeObj.MY_URL);
+ if (html) {
+ homeHtmlCache = html;
+ let list = _pdfa(html, p0);
+ if (list && list.length > 0) {
+ list.forEach((it, idex) => {
+ try {
+ let name = _pdfh(it, p[1]);
+ if (homeObj.cate_exclude && new RegExp(homeObj.cate_exclude).test(name)) {
+ return
+ }
+ let url = _pd(it, p[2]);
+ if (p.length > 3 && p[3] && !homeObj.home_html) {
+ let exp = new RegExp(p[3]);
+ url = url.match(exp)[1]
+ }
+ classes.push({
+ type_id: url.trim(),
+ type_name: name.trim()
+ })
+ } catch (e) {
+ console.log(`分类列表定位第${idex}个元素正常报错:${e.message}`)
+ }
+ })
+ }
+ }
+ } catch (e) {
+ console.log(e.message)
+ }
+ }
+ }
+ }
+ classes = classes.filter(it => !homeObj.cate_exclude || !new RegExp(homeObj.cate_exclude).test(it.type_name));
+ let resp = {
+ class: classes
+ };
+ if (homeObj.filter) {
+ resp.filters = homeObj.filter
+ }
+ console.log(JSON.stringify(resp));
+ return JSON.stringify(resp)
+}
+
+function getPP(p, pn, pp, ppn) {
+ try {
+ let ps = p[pn] === "*" && pp.length > ppn ? pp[ppn] : p[pn];
+ return ps
+ } catch (e) {
+ return ""
+ }
+}
+
+function homeVodParse(homeVodObj) {
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let d = [];
+ MY_URL = homeVodObj.homeUrl;
+ console.log(MY_URL);
+ let t1 = (new Date).getTime();
+ let p = homeVodObj.推荐;
+ print("p:" + p);
+ if (p === "*" && rule.一级) {
+ p = rule.一级;
+ homeVodObj.double = false
+ }
+ if (!p || typeof p !== "string") {
+ return "{}"
+ }
+ p = p.trim();
+ let pp = rule.一级 ? rule.一级.split(";") : [];
+ if (p.startsWith("js:")) {
+ const TYPE = "home";
+ var input = MY_URL;
+ HOST = rule.host;
+ eval(p.replace("js:", ""));
+ d = VODS
+ } else {
+ p = p.split(";");
+ if (!homeVodObj.double && p.length < 5) {
+ return "{}"
+ } else if (homeVodObj.double && p.length < 6) {
+ return "{}"
+ }
+ let p0 = getPP(p, 0, pp, 0);
+ let _ps = parseTags.getParse(p0);
+ _pdfa = _ps.pdfa;
+ _pdfh = _ps.pdfh;
+ _pd = _ps.pd;
+ let is_json = p0.startsWith("json:");
+ p0 = p0.replace(/^(jsp:|json:|jq:)/, "");
+ let html = homeHtmlCache || getHtml(MY_URL);
+ homeHtmlCache = undefined;
+ if (is_json) {
+ html = dealJson(html)
+ }
+ try {
+ console.log("double:" + homeVodObj.double);
+ if (homeVodObj.double) {
+ let items = _pdfa(html, p0);
+ let p1 = getPP(p, 1, pp, 0);
+ let p2 = getPP(p, 2, pp, 1);
+ let p3 = getPP(p, 3, pp, 2);
+ let p4 = getPP(p, 4, pp, 3);
+ let p5 = getPP(p, 5, pp, 4);
+ let p6 = getPP(p, 6, pp, 5);
+ for (let item of items) {
+ let items2 = _pdfa(item, p1);
+ for (let item2 of items2) {
+ try {
+ let title = _pdfh(item2, p2);
+ let img = "";
+ try {
+ img = _pd(item2, p3)
+ } catch (e) {}
+ let desc = "";
+ try {
+ desc = _pdfh(item2, p4)
+ } catch (e) {}
+ let links = [];
+ for (let _p5 of p5.split("+")) {
+ let link = !homeVodObj.detailUrl ? _pd(item2, _p5, MY_URL) : _pdfh(item2, _p5);
+ links.push(link)
+ }
+ let content;
+ if (p.length > 6 && p[6]) {
+ content = _pdfh(item2, p6)
+ } else {
+ content = ""
+ }
+ let vid = links.join("$");
+ if (rule.二级 === "*") {
+ vid = vid + "@@" + title + "@@" + img
+ }
+ let vod = {
+ vod_name: title,
+ vod_pic: img,
+ vod_remarks: desc,
+ vod_content: content,
+ vod_id: vid
+ };
+ d.push(vod)
+ } catch (e) {
+ console.log(`首页列表双层定位处理发生错误:${e.message}`)
+ }
+ }
+ }
+ } else {
+ let items = _pdfa(html, p0);
+ let p1 = getPP(p, 1, pp, 1);
+ let p2 = getPP(p, 2, pp, 2);
+ let p3 = getPP(p, 3, pp, 3);
+ let p4 = getPP(p, 4, pp, 4);
+ let p5 = getPP(p, 5, pp, 5);
+ for (let item of items) {
+ try {
+ let title = _pdfh(item, p1);
+ let img = "";
+ try {
+ img = _pd(item, p2, MY_URL)
+ } catch (e) {}
+ let desc = "";
+ try {
+ desc = _pdfh(item, p3)
+ } catch (e) {}
+ let links = [];
+ for (let _p5 of p4.split("+")) {
+ let link = !homeVodObj.detailUrl ? _pd(item, _p5, MY_URL) : _pdfh(item, _p5);
+ links.push(link)
+ }
+ let content;
+ if (p.length > 5 && p[5]) {
+ content = _pdfh(item, p5)
+ } else {
+ content = ""
+ }
+ let vid = links.join("$");
+ if (rule.二级 === "*") {
+ vid = vid + "@@" + title + "@@" + img
+ }
+ let vod = {
+ vod_name: title,
+ vod_pic: img,
+ vod_remarks: desc,
+ vod_content: content,
+ vod_id: vid
+ };
+ d.push(vod)
+ } catch (e) {
+ console.log(`首页列表单层定位处理发生错误:${e.message}`)
+ }
+ }
+ }
+ } catch (e) {}
+ }
+ let t2 = (new Date).getTime();
+ console.log("加载首页推荐耗时:" + (t2 - t1) + "毫秒");
+ if (rule.图片替换) {
+ if (rule.图片替换.startsWith("js:")) {
+ d.forEach(it => {
+ try {
+ var input = it.vod_pic;
+ eval(rule.图片替换.trim().replace("js:", ""));
+ it.vod_pic = input
+ } catch (e) {
+ log(`图片:${it.vod_pic}替换错误:${e.message}`)
+ }
+ })
+ } else if (rule.图片替换.includes("=>")) {
+ let replace_from = rule.图片替换.split("=>")[0];
+ let replace_to = rule.图片替换.split("=>")[1];
+ d.forEach(it => {
+ if (it.vod_pic && it.vod_pic.startsWith("http")) {
+ it.vod_pic = it.vod_pic.replace(replace_from, replace_to)
+ }
+ })
+ }
+ }
+ if (rule.图片来源) {
+ d.forEach(it => {
+ if (it.vod_pic && it.vod_pic.startsWith("http")) {
+ it.vod_pic = it.vod_pic + rule.图片来源
+ }
+ })
+ }
+ if (d.length > 0) {
+ print(d.slice(0, 2))
+ }
+ return JSON.stringify({
+ list: d
+ })
+}
+
+function categoryParse(cateObj) {
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let p = cateObj.一级;
+ if (!p || typeof p !== "string") {
+ return "{}"
+ }
+ let d = [];
+ let url = cateObj.url.replaceAll("fyclass", cateObj.tid);
+ if (cateObj.pg === 1 && url.includes("[") && url.includes("]")) {
+ url = url.split("[")[1].split("]")[0]
+ } else if (cateObj.pg > 1 && url.includes("[") && url.includes("]")) {
+ url = url.split("[")[0]
+ }
+ if (rule.filter_url) {
+ if (!/fyfilter/.test(url)) {
+ if (!url.endsWith("&") && !rule.filter_url.startsWith("&")) {
+ url += "&"
+ }
+ url += rule.filter_url
+ } else {
+ url = url.replace("fyfilter", rule.filter_url)
+ }
+ url = url.replaceAll("fyclass", cateObj.tid);
+ let fl = cateObj.filter ? cateObj.extend : {};
+ if (rule.filter_def && typeof rule.filter_def === "object") {
+ try {
+ if (Object.keys(rule.filter_def).length > 0 && rule.filter_def.hasOwnProperty(cateObj.tid)) {
+ let self_fl_def = rule.filter_def[cateObj.tid];
+ if (self_fl_def && typeof self_fl_def === "object") {
+ let fl_def = JSON.parse(JSON.stringify(self_fl_def));
+ fl = Object.assign(fl_def, fl)
+ }
+ }
+ } catch (e) {
+ print(`合并不同分类对应的默认筛选出错:${e.message}`)
+ }
+ }
+ let new_url;
+ new_url = cheerio.jinja2(url, {
+ fl: fl,
+ fyclass: cateObj.tid
+ });
+ url = new_url
+ }
+ if (/fypage/.test(url)) {
+ if (url.includes("(") && url.includes(")")) {
+ let url_rep = url.match(/.*?\((.*)\)/)[1];
+ let cnt_page = url_rep.replaceAll("fypage", cateObj.pg);
+ let cnt_pg = eval(cnt_page);
+ url = url.replaceAll(url_rep, cnt_pg).replaceAll("(", "").replaceAll(")", "")
+ } else {
+ url = url.replaceAll("fypage", cateObj.pg)
+ }
+ }
+ MY_URL = url;
+ console.log(MY_URL);
+ p = p.trim();
+ const MY_CATE = cateObj.tid;
+ if (p.startsWith("js:")) {
+ var MY_FL = cateObj.extend;
+ const TYPE = "cate";
+ var input = MY_URL;
+ const MY_PAGE = cateObj.pg;
+ var desc = "";
+ eval(p.trim().replace("js:", ""));
+ d = VODS
+ } else {
+ p = p.split(";");
+ if (p.length < 5) {
+ return "{}"
+ }
+ let _ps = parseTags.getParse(p[0]);
+ _pdfa = _ps.pdfa;
+ _pdfh = _ps.pdfh;
+ _pd = _ps.pd;
+ let is_json = p[0].startsWith("json:");
+ p[0] = p[0].replace(/^(jsp:|json:|jq:)/, "");
+ try {
+ let html = getHtml(MY_URL);
+ if (html) {
+ if (is_json) {
+ html = dealJson(html)
+ }
+ let list = _pdfa(html, p[0]);
+ list.forEach(it => {
+ let links = p[4].split("+").map(p4 => {
+ return !rule.detailUrl ? _pd(it, p4, MY_URL) : _pdfh(it, p4)
+ });
+ let link = links.join("$");
+ let vod_id = rule.detailUrl ? MY_CATE + "$" + link : link;
+ let vod_name = _pdfh(it, p[1]).replace(/\n|\t/g, "").trim();
+ let vod_pic = _pd(it, p[2], MY_URL);
+ if (rule.二级 === "*") {
+ vod_id = vod_id + "@@" + vod_name + "@@" + vod_pic
+ }
+ d.push({
+ vod_id: vod_id,
+ vod_name: vod_name,
+ vod_pic: vod_pic,
+ vod_remarks: _pdfh(it, p[3]).replace(/\n|\t/g, "").trim()
+ })
+ })
+ }
+ } catch (e) {
+ console.log(e.message)
+ }
+ }
+ if (rule.图片替换) {
+ if (rule.图片替换.startsWith("js:")) {
+ d.forEach(it => {
+ try {
+ var input = it.vod_pic;
+ eval(rule.图片替换.trim().replace("js:", ""));
+ it.vod_pic = input
+ } catch (e) {
+ log(`图片:${it.vod_pic}替换错误:${e.message}`)
+ }
+ })
+ } else if (rule.图片替换.includes("=>")) {
+ let replace_from = rule.图片替换.split("=>")[0];
+ let replace_to = rule.图片替换.split("=>")[1];
+ d.forEach(it => {
+ if (it.vod_pic && it.vod_pic.startsWith("http")) {
+ it.vod_pic = it.vod_pic.replace(replace_from, replace_to)
+ }
+ })
+ }
+ }
+ if (rule.图片来源) {
+ d.forEach(it => {
+ if (it.vod_pic && it.vod_pic.startsWith("http")) {
+ it.vod_pic = it.vod_pic + rule.图片来源
+ }
+ })
+ }
+ if (d.length > 0) {
+ print(d.slice(0, 2))
+ }
+ let pagecount = 0;
+ if (rule.pagecount && typeof rule.pagecount === "object" && rule.pagecount.hasOwnProperty(MY_CATE)) {
+ print(`MY_CATE:${MY_CATE},pagecount:${JSON.stringify(rule.pagecount)}`);
+ pagecount = parseInt(rule.pagecount[MY_CATE])
+ }
+ let nodata = {
+ list: [{
+ vod_name: "无数据,防无限请求",
+ vod_id: "no_data",
+ vod_remarks: "不要点,会崩的",
+ vod_pic: "https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg"
+ }],
+ total: 1,
+ pagecount: 1,
+ page: 1,
+ limit: 1
+ };
+ let vod = d.length < 1 ? JSON.stringify(nodata) : JSON.stringify({
+ page: parseInt(cateObj.pg),
+ pagecount: pagecount || 999,
+ limit: 20,
+ total: 999,
+ list: d
+ });
+ return vod
+}
+
+function searchParse(searchObj) {
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let d = [];
+ if (!searchObj.searchUrl) {
+ return "{}"
+ }
+ if (rule.searchNoPage && Number(searchObj.pg) > 1) {
+ return "{}"
+ }
+ let p = searchObj.搜索 === "*" && rule.一级 ? rule.一级 : searchObj.搜索;
+ if (!p || typeof p !== "string") {
+ return "{}"
+ }
+ p = p.trim();
+ let pp = rule.一级 ? rule.一级.split(";") : [];
+ let url = searchObj.searchUrl.replaceAll("**", searchObj.wd);
+ if (searchObj.pg === 1 && url.includes("[") && url.includes("]") && !url.includes("#")) {
+ url = url.split("[")[1].split("]")[0]
+ } else if (searchObj.pg > 1 && url.includes("[") && url.includes("]") && !url.includes("#")) {
+ url = url.split("[")[0]
+ }
+ if (/fypage/.test(url)) {
+ if (url.includes("(") && url.includes(")")) {
+ let url_rep = url.match(/.*?\((.*)\)/)[1];
+ let cnt_page = url_rep.replaceAll("fypage", searchObj.pg);
+ let cnt_pg = eval(cnt_page);
+ url = url.replaceAll(url_rep, cnt_pg).replaceAll("(", "").replaceAll(")", "")
+ } else {
+ url = url.replaceAll("fypage", searchObj.pg)
+ }
+ }
+ MY_URL = url;
+ console.log(MY_URL);
+ if (p.startsWith("js:")) {
+ const TYPE = "search";
+ const MY_PAGE = searchObj.pg;
+ const KEY = searchObj.wd;
+ var input = MY_URL;
+ var detailUrl = rule.detailUrl || "";
+ eval(p.trim().replace("js:", ""));
+ d = VODS
+ } else {
+ p = p.split(";");
+ if (p.length < 5) {
+ return "{}"
+ }
+ let p0 = getPP(p, 0, pp, 0);
+ let _ps = parseTags.getParse(p0);
+ _pdfa = _ps.pdfa;
+ _pdfh = _ps.pdfh;
+ _pd = _ps.pd;
+ let is_json = p0.startsWith("json:");
+ p0 = p0.replace(/^(jsp:|json:|jq:)/, "");
+ try {
+ let req_method = MY_URL.split(";").length > 1 ? MY_URL.split(";")[1].toLowerCase() : "get";
+ let html;
+ if (req_method === "post") {
+ let rurls = MY_URL.split(";")[0].split("#");
+ let rurl = rurls[0];
+ let params = rurls.length > 1 ? rurls[1] : "";
+ print(`post=》rurl:${rurl},params:${params}`);
+ let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let postData = {
+ body: params
+ };
+ Object.assign(_fetch_params, postData);
+ html = post(rurl, _fetch_params)
+ } else if (req_method === "postjson") {
+ let rurls = MY_URL.split(";")[0].split("#");
+ let rurl = rurls[0];
+ let params = rurls.length > 1 ? rurls[1] : "";
+ print(`postjson-》rurl:${rurl},params:${params}`);
+ try {
+ params = JSON.parse(params)
+ } catch (e) {
+ params = "{}"
+ }
+ let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let postData = {
+ body: params
+ };
+ Object.assign(_fetch_params, postData);
+ html = post(rurl, _fetch_params)
+ } else {
+ html = getHtml(MY_URL)
+ }
+ if (html) {
+ let search_tag = rule.搜索验证标识 || "系统安全验证|输入验证码";
+ if (new RegExp(search_tag).test(html)) {
+ let cookie = verifyCode(MY_URL);
+ if (cookie) {
+ console.log(`本次成功过验证,cookie:${cookie}`);
+ setItem(RULE_CK, cookie)
+ } else {
+ console.log(`本次自动过搜索验证失败,cookie:${cookie}`)
+ }
+ html = getHtml(MY_URL)
+ }
+ if (!html.includes(searchObj.wd)) {
+ console.log("搜索结果源码未包含关键字,疑似搜索失败,正为您打印结果源码");
+ console.log(html)
+ }
+ if (is_json) {
+ html = dealJson(html)
+ }
+ let list = _pdfa(html, p0);
+ let p1 = getPP(p, 1, pp, 1);
+ let p2 = getPP(p, 2, pp, 2);
+ let p3 = getPP(p, 3, pp, 3);
+ let p4 = getPP(p, 4, pp, 4);
+ let p5 = getPP(p, 5, pp, 5);
+ list.forEach(it => {
+ let links = p4.split("+").map(_p4 => {
+ return !rule.detailUrl ? _pd(it, _p4, MY_URL) : _pdfh(it, _p4)
+ });
+ let link = links.join("$");
+ let content;
+ if (p.length > 5 && p[5]) {
+ content = _pdfh(it, p5)
+ } else {
+ content = ""
+ }
+ let vod_id = link;
+ let vod_name = _pdfh(it, p1).replace(/\n|\t/g, "").trim();
+ let vod_pic = _pd(it, p2, MY_URL);
+ if (rule.二级 === "*") {
+ vod_id = vod_id + "@@" + vod_name + "@@" + vod_pic
+ }
+ let ob = {
+ vod_id: vod_id,
+ vod_name: vod_name,
+ vod_pic: vod_pic,
+ vod_remarks: _pdfh(it, p3).replace(/\n|\t/g, "").trim(),
+ vod_content: content.replace(/\n|\t/g, "").trim()
+ };
+ d.push(ob)
+ })
+ }
+ } catch (e) {
+ print(`搜索发生错误:${e.message}`);
+ return "{}"
+ }
+ }
+ if (rule.图片替换) {
+ if (rule.图片替换.startsWith("js:")) {
+ d.forEach(it => {
+ try {
+ var input = it.vod_pic;
+ eval(rule.图片替换.trim().replace("js:", ""));
+ it.vod_pic = input
+ } catch (e) {
+ log(`图片:${it.vod_pic}替换错误:${e.message}`)
+ }
+ })
+ } else if (rule.图片替换.includes("=>")) {
+ let replace_from = rule.图片替换.split("=>")[0];
+ let replace_to = rule.图片替换.split("=>")[1];
+ d.forEach(it => {
+ if (it.vod_pic && it.vod_pic.startsWith("http")) {
+ it.vod_pic = it.vod_pic.replace(replace_from, replace_to)
+ }
+ })
+ }
+ }
+ if (rule.图片来源) {
+ d.forEach(it => {
+ if (it.vod_pic && it.vod_pic.startsWith("http")) {
+ it.vod_pic = it.vod_pic + rule.图片来源
+ }
+ })
+ }
+ return JSON.stringify({
+ page: parseInt(searchObj.pg),
+ pagecount: 10,
+ limit: 20,
+ total: 100,
+ list: d
+ })
+}
+
+function detailParse(detailObj) {
+ let t1 = (new Date).getTime();
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let orId = detailObj.orId;
+ let vod_name = "片名";
+ let vod_pic = "";
+ let vod_id = orId;
+ if (rule.二级 === "*") {
+ let extra = orId.split("@@");
+ vod_name = extra.length > 1 ? extra[1] : vod_name;
+ vod_pic = extra.length > 2 ? extra[2] : vod_pic
+ }
+ let vod = {
+ vod_id: vod_id,
+ vod_name: vod_name,
+ vod_pic: vod_pic,
+ type_name: "类型",
+ vod_year: "年份",
+ vod_area: "地区",
+ vod_remarks: "更新信息",
+ vod_actor: "主演",
+ vod_director: "导演",
+ vod_content: "简介"
+ };
+ let p = detailObj.二级;
+ let url = detailObj.url;
+ let detailUrl = detailObj.detailUrl;
+ let fyclass = detailObj.fyclass;
+ let tab_exclude = detailObj.tab_exclude;
+ let html = detailObj.html || "";
+ MY_URL = url;
+ if (detailObj.二级访问前) {
+ try {
+ print(`尝试在二级访问前执行代码:${detailObj.二级访问前}`);
+ eval(detailObj.二级访问前.trim().replace("js:", ""))
+ } catch (e) {
+ print(`二级访问前执行代码出现错误:${e.message}`)
+ }
+ }
+ if (p === "*") {
+ vod.vod_play_from = "在线播放";
+ vod.vod_remarks = detailUrl;
+ vod.vod_actor = "没有二级,只有一级链接直接嗅探播放";
+ vod.vod_content = MY_URL;
+ vod.vod_play_url = "嗅探播放$" + MY_URL.split("@@")[0]
+ } else if (typeof p === "string" && p.trim().startsWith("js:")) {
+ const TYPE = "detail";
+ var input = MY_URL;
+ var play_url = "";
+ eval(p.trim().replace("js:", ""));
+ vod = VOD;
+ console.log(JSON.stringify(vod))
+ } else if (p && typeof p === "object") {
+ let tt1 = (new Date).getTime();
+ if (!html) {
+ html = getHtml(MY_URL)
+ }
+ print(`二级${MY_URL}仅获取源码耗时:${(new Date).getTime()-tt1}毫秒`);
+ let _ps;
+ if (p.is_json) {
+ print("二级是json");
+ _ps = parseTags.json;
+ html = dealJson(html)
+ } else if (p.is_jsp) {
+ print("二级是jsp");
+ _ps = parseTags.jsp
+ } else if (p.is_jq) {
+ print("二级是jq");
+ _ps = parseTags.jq
+ } else {
+ print("二级默认jq");
+ _ps = parseTags.jq
+ }
+ let tt2 = (new Date).getTime();
+ print(`二级${MY_URL}获取并装载源码耗时:${tt2-tt1}毫秒`);
+ _pdfa = _ps.pdfa;
+ _pdfh = _ps.pdfh;
+ _pd = _ps.pd;
+ if (p.title) {
+ let p1 = p.title.split(";");
+ vod.vod_name = _pdfh(html, p1[0]).replace(/\n|\t/g, "").trim();
+ let type_name = p1.length > 1 ? _pdfh(html, p1[1]).replace(/\n|\t/g, "").replace(/ /g, "").trim() : "";
+ vod.type_name = type_name || vod.type_name
+ }
+ if (p.desc) {
+ try {
+ let p1 = p.desc.split(";");
+ vod.vod_remarks = _pdfh(html, p1[0]).replace(/\n|\t/g, "").trim();
+ vod.vod_year = p1.length > 1 ? _pdfh(html, p1[1]).replace(/\n|\t/g, "").trim() : "";
+ vod.vod_area = p1.length > 2 ? _pdfh(html, p1[2]).replace(/\n|\t/g, "").trim() : "";
+ vod.vod_actor = p1.length > 3 ? _pdfh(html, p1[3]).replace(/\n|\t/g, "").trim() : "";
+ vod.vod_director = p1.length > 4 ? _pdfh(html, p1[4]).replace(/\n|\t/g, "").trim() : ""
+ } catch (e) {}
+ }
+ if (p.content) {
+ try {
+ let p1 = p.content.split(";");
+ vod.vod_content = _pdfh(html, p1[0]).replace(/\n|\t/g, "").trim()
+ } catch (e) {}
+ }
+ if (p.img) {
+ try {
+ let p1 = p.img.split(";");
+ vod.vod_pic = _pd(html, p1[0], MY_URL)
+ } catch (e) {}
+ }
+ let vod_play_from = "$$$";
+ let playFrom = [];
+ if (p.重定向 && p.重定向.startsWith("js:")) {
+ print("开始执行重定向代码:" + p.重定向);
+ html = eval(p.重定向.replace("js:", ""))
+ }
+ if (p.tabs) {
+ if (p.tabs.startsWith("js:")) {
+ print("开始执行tabs代码:" + p.tabs);
+ var input = MY_URL;
+ eval(p.tabs.replace("js:", ""));
+ playFrom = TABS
+ } else {
+ let p_tab = p.tabs.split(";")[0];
+ let vHeader = _pdfa(html, p_tab);
+ console.log(vHeader.length);
+ let tab_text = p.tab_text || "body&&Text";
+ let new_map = {};
+ for (let v of vHeader) {
+ let v_title = _pdfh(v, tab_text).trim();
+ if (!v_title) {
+ v_title = "线路空"
+ }
+ console.log(v_title);
+ if (tab_exclude && new RegExp(tab_exclude).test(v_title)) {
+ continue
+ }
+ if (!new_map.hasOwnProperty(v_title)) {
+ new_map[v_title] = 1
+ } else {
+ new_map[v_title] += 1
+ }
+ if (new_map[v_title] > 1) {
+ v_title += Number(new_map[v_title] - 1)
+ }
+ playFrom.push(v_title)
+ }
+ }
+ console.log(JSON.stringify(playFrom))
+ } else {
+ playFrom = ["在线播放"]
+ }
+ vod.vod_play_from = playFrom.join(vod_play_from);
+ let vod_play_url = "$$$";
+ let vod_tab_list = [];
+ if (p.lists) {
+ if (p.lists.startsWith("js:")) {
+ print("开始执行lists代码:" + p.lists);
+ try {
+ var input = MY_URL;
+ var play_url = "";
+ eval(p.lists.replace("js:", ""));
+ for (let i in LISTS) {
+ if (LISTS.hasOwnProperty(i)) {
+ try {
+ LISTS[i] = LISTS[i].map(it => it.split("$").slice(0, 2).join("$"))
+ } catch (e) {
+ print(`格式化LISTS发生错误:${e.message}`)
+ }
+ }
+ }
+ vod_play_url = LISTS.map(it => it.join("#")).join(vod_play_url)
+ } catch (e) {
+ print(`js执行lists: 发生错误:${e.message}`)
+ }
+ } else {
+ let list_text = p.list_text || "body&&Text";
+ let list_url = p.list_url || "a&&href";
+ let list_url_prefix = p.list_url_prefix || "";
+ let is_tab_js = p.tabs.trim().startsWith("js:");
+ for (let i = 0; i < playFrom.length; i++) {
+ let tab_name = playFrom[i];
+ let tab_ext = p.tabs.split(";").length > 1 && !is_tab_js ? p.tabs.split(";")[1] : "";
+ let p1 = p.lists.replaceAll("#idv", tab_name).replaceAll("#id", i);
+ tab_ext = tab_ext.replaceAll("#idv", tab_name).replaceAll("#id", i);
+ let tabName = tab_ext ? _pdfh(html, tab_ext) : tab_name;
+ console.log(tabName);
+ let new_vod_list = [];
+ let tt1 = (new Date).getTime();
+ if (typeof pdfl === "function") {
+ new_vod_list = pdfl(html, p1, list_text, list_url, MY_URL);
+ if (list_url_prefix) {
+ new_vod_list = new_vod_list.map(it => it.split("$")[0] + "$" + list_url_prefix + it.split("$").slice(1).join("$"))
+ }
+ } else {
+ let vodList = [];
+ try {
+ vodList = _pdfa(html, p1);
+ console.log("len(vodList):" + vodList.length)
+ } catch (e) {}
+ for (let i = 0; i < vodList.length; i++) {
+ let it = vodList[i];
+ new_vod_list.push(_pdfh(it, list_text).trim() + "$" + list_url_prefix + _pd(it, list_url, MY_URL))
+ }
+ }
+ if (new_vod_list.length > 0) {
+ new_vod_list = forceOrder(new_vod_list, "", x => x.split("$")[0]);
+ console.log(`drpy影响性能代码共计列表数循环次数:${new_vod_list.length},耗时:${(new Date).getTime()-tt1}毫秒`)
+ }
+ let vlist = new_vod_list.join("#");
+ vod_tab_list.push(vlist)
+ }
+ vod_play_url = vod_tab_list.join(vod_play_url)
+ }
+ }
+ vod.vod_play_url = vod_play_url
+ }
+ if (rule.图片替换 && rule.图片替换.includes("=>")) {
+ let replace_from = rule.图片替换.split("=>")[0];
+ let replace_to = rule.图片替换.split("=>")[1];
+ vod.vod_pic = vod.vod_pic.replace(replace_from, replace_to)
+ }
+ if (rule.图片来源 && vod.vod_pic && vod.vod_pic.startsWith("http")) {
+ vod.vod_pic = vod.vod_pic + rule.图片来源
+ }
+ if (!vod.vod_id || vod_id.includes("$") && vod.vod_id !== vod_id) {
+ vod.vod_id = vod_id
+ }
+ let t2 = (new Date).getTime();
+ console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);
+ try {
+ vod = vodDeal(vod)
+ } catch (e) {
+ console.log(`vodDeal发生错误:${e.message}`)
+ }
+ return JSON.stringify({
+ list: [vod]
+ })
+}
+
+function get_tab_index(vod) {
+ let obj = {};
+ vod.vod_play_from.split("$$$").forEach((it, index) => {
+ obj[it] = index
+ });
+ return obj
+}
+
+function vodDeal(vod) {
+ let vod_play_from = vod.vod_play_from.split("$$$");
+ let vod_play_url = vod.vod_play_url.split("$$$");
+ let tab_removed_list = vod_play_from;
+ let tab_ordered_list = vod_play_from;
+ let tab_renamed_list = vod_play_from;
+ let tab_list = vod_play_from;
+ let play_ordered_list = vod_play_url;
+ if (rule.tab_remove && rule.tab_remove.length > 0 || rule.tab_order && rule.tab_order.length > 0) {
+ let tab_index_dict = get_tab_index(vod);
+ if (rule.tab_remove && rule.tab_remove.length > 0) {
+ tab_removed_list = vod_play_from.filter(it => !rule.tab_remove.includes(it));
+ tab_list = tab_removed_list
+ }
+ if (rule.tab_order && rule.tab_order.length > 0) {
+ let tab_order = rule.tab_order;
+ tab_ordered_list = tab_removed_list.sort((a, b) => {
+ return (tab_order.indexOf(a) === -1 ? 9999 : tab_order.indexOf(a)) - (tab_order.indexOf(b) === -1 ? 9999 : tab_order.indexOf(b))
+ });
+ tab_list = tab_ordered_list
+ }
+ play_ordered_list = tab_list.map(it => vod_play_url[tab_index_dict[it]])
+ }
+ if (rule.tab_rename && typeof rule.tab_rename === "object" & Object.keys(rule.tab_rename).length > 0) {
+ tab_renamed_list = tab_list.map(it => rule.tab_rename[it] || it);
+ tab_list = tab_renamed_list
+ }
+ vod.vod_play_from = tab_list.join("$$$");
+ vod.vod_play_url = play_ordered_list.join("$$$");
+ return vod
+}
+
+function tellIsJx(url) {
+ try {
+ let is_vip = !/\.(m3u8|mp4|m4a)$/.test(url.split("?")[0]) && 是否正版(url);
+ return is_vip ? 1 : 0
+ } catch (e) {
+ return 1
+ }
+}
+
+function playParse(playObj) {
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ MY_URL = playObj.url;
+ var MY_FLAG = playObj.flag;
+ if (!/http/.test(MY_URL)) {
+ try {
+ MY_URL = base64Decode(MY_URL)
+ } catch (e) {}
+ }
+ MY_URL = decodeURIComponent(MY_URL);
+ var input = MY_URL;
+ var flag = MY_FLAG;
+ let common_play = {
+ parse: SPECIAL_URL.test(input) || /^(push:)/.test(input) ? 0 : 1,
+ url: input,
+ flag: flag,
+ jx: tellIsJx(input)
+ };
+ let lazy_play;
+ if (!rule.play_parse || !rule.lazy) {
+ lazy_play = common_play
+ } else if (rule.play_parse && rule.lazy && typeof rule.lazy === "string") {
+ try {
+ let lazy_code = rule.lazy.trim();
+ if (lazy_code.startsWith("js:")) {
+ lazy_code = lazy_code.replace("js:", "").trim()
+ }
+ print("开始执行js免嗅=>" + lazy_code);
+ eval(lazy_code);
+ lazy_play = typeof input === "object" ? input : {
+ parse: SPECIAL_URL.test(input) || /^(push:)/.test(input) ? 0 : 1,
+ jx: tellIsJx(input),
+ url: input
+ }
+ } catch (e) {
+ print(`js免嗅错误:${e.message}`);
+ lazy_play = common_play
+ }
+ } else {
+ lazy_play = common_play
+ }
+ if (Array.isArray(rule.play_json) && rule.play_json.length > 0) {
+ let web_url = lazy_play.url;
+ for (let pjson of rule.play_json) {
+ if (pjson.re && (pjson.re === "*" || web_url.match(new RegExp(pjson.re)))) {
+ if (pjson.json && typeof pjson.json === "object") {
+ let base_json = pjson.json;
+ lazy_play = Object.assign(lazy_play, base_json);
+ break
+ }
+ }
+ }
+ } else if (rule.play_json && !Array.isArray(rule.play_json)) {
+ let base_json = {
+ jx: 1,
+ parse: 1
+ };
+ lazy_play = Object.assign(lazy_play, base_json)
+ } else if (!rule.play_json) {
+ let base_json = {
+ jx: 0,
+ parse: 1
+ };
+ lazy_play = Object.assign(lazy_play, base_json)
+ }
+ console.log(JSON.stringify(lazy_play));
+ return JSON.stringify(lazy_play)
+}
+
+function proxyParse(proxyObj) {
+ var input = proxyObj.params;
+ if (proxyObj.proxy_rule) {
+ log("准备执行本地代理规则:\n" + proxyObj.proxy_rule);
+ try {
+ eval(proxyObj.proxy_rule);
+ if (input && input !== proxyObj.params && Array.isArray(input) && input.length >= 3) {
+ return input
+ } else {
+ return [404, "text/plain", "Not Found"]
+ }
+ } catch (e) {
+ return [500, "text/plain", "代理规则错误:" + e.message]
+ }
+ } else {
+ return [404, "text/plain", "Not Found"]
+ }
+}
+
+function isVideoParse(isVideoObj) {
+ var input = isVideoObj.url;
+ if (!isVideoObj.t) {
+ let re_matcher = new RegExp(isVideoObj.isVideo, "i");
+ return re_matcher.test(input)
+ } else {
+ try {
+ eval(isVideoObj.isVideo);
+ if (typeof input === "boolean") {
+ return input
+ } else {
+ return false
+ }
+ } catch (e) {
+ log(`执行嗅探规则发生错误:${e.message}`);
+ return false
+ }
+ }
+}
+
+function getOriginalJs(js_code) {
+ let current_match = /var rule|[\u4E00-\u9FA5]+|function|let |var |const |\(|\)|"|'/;
+ if (current_match.test(js_code)) {
+ return js_code
+ }
+ let rsa_private_key = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCqin/jUpqM6+fgYP/oMqj9zcdHMM0mEZXLeTyixIJWP53lzJV2N2E3OP6BBpUmq2O1a9aLnTIbADBaTulTNiOnVGoNG58umBnupnbmmF8iARbDp2mTzdMMeEgLdrfXS6Y3VvazKYALP8EhEQykQVarexR78vRq7ltY3quXx7cgI0ROfZz5Sw3UOLQJ+VoWmwIxu9AMEZLVzFDQN93hzuzs3tNyHK6xspBGB7zGbwCg+TKi0JeqPDrXxYUpAz1cQ/MO+Da0WgvkXnvrry8NQROHejdLVOAslgr6vYthH9bKbsGyNY3H+P12kcxo9RAcVveONnZbcMyxjtF5dWblaernAgMBAAECggEAGdEHlSEPFmAr5PKqKrtoi6tYDHXdyHKHC5tZy4YV+Pp+a6gxxAiUJejx1hRqBcWSPYeKne35BM9dgn5JofgjI5SKzVsuGL6bxl3ayAOu+xXRHWM9f0t8NHoM5fdd0zC3g88dX3fb01geY2QSVtcxSJpEOpNH3twgZe6naT2pgiq1S4okpkpldJPo5GYWGKMCHSLnKGyhwS76gF8bTPLoay9Jxk70uv6BDUMlA4ICENjmsYtd3oirWwLwYMEJbSFMlyJvB7hjOjR/4RpT4FPnlSsIpuRtkCYXD4jdhxGlvpXREw97UF2wwnEUnfgiZJ2FT/MWmvGGoaV/CfboLsLZuQKBgQDTNZdJrs8dbijynHZuuRwvXvwC03GDpEJO6c1tbZ1s9wjRyOZjBbQFRjDgFeWs9/T1aNBLUrgsQL9c9nzgUziXjr1Nmu52I0Mwxi13Km/q3mT+aQfdgNdu6ojsI5apQQHnN/9yMhF6sNHg63YOpH+b+1bGRCtr1XubuLlumKKscwKBgQDOtQ2lQjMtwsqJmyiyRLiUOChtvQ5XI7B2mhKCGi8kZ+WEAbNQcmThPesVzW+puER6D4Ar4hgsh9gCeuTaOzbRfZ+RLn3Aksu2WJEzfs6UrGvm6DU1INn0z/tPYRAwPX7sxoZZGxqML/z+/yQdf2DREoPdClcDa2Lmf1KpHdB+vQKBgBXFCVHz7a8n4pqXG/HvrIMJdEpKRwH9lUQS/zSPPtGzaLpOzchZFyQQBwuh1imM6Te+VPHeldMh3VeUpGxux39/m+160adlnRBS7O7CdgSsZZZ/dusS06HAFNraFDZf1/VgJTk9BeYygX+AZYu+0tReBKSs9BjKSVJUqPBIVUQXAoGBAJcZ7J6oVMcXxHxwqoAeEhtvLcaCU9BJK36XQ/5M67ceJ72mjJC6/plUbNukMAMNyyi62gO6I9exearecRpB/OGIhjNXm99Ar59dAM9228X8gGfryLFMkWcO/fNZzb6lxXmJ6b2LPY3KqpMwqRLTAU/zy+ax30eFoWdDHYa4X6e1AoGAfa8asVGOJ8GL9dlWufEeFkDEDKO9ww5GdnpN+wqLwePWqeJhWCHad7bge6SnlylJp5aZXl1+YaBTtOskC4Whq9TP2J+dNIgxsaF5EFZQJr8Xv+lY9lu0CruYOh9nTNF9x3nubxJgaSid/7yRPfAGnsJRiknB5bsrCvgsFQFjJVs=";
+ let decode_content = "";
+
+ function aes_decrypt(data) {
+ let key = CryptoJS.enc.Hex.parse("686A64686E780A0A0A0A0A0A0A0A0A0A");
+ let iv = CryptoJS.enc.Hex.parse("647A797964730A0A0A0A0A0A0A0A0A0A");
+ let encrypted = CryptoJS.AES.decrypt({
+ ciphertext: CryptoJS.enc.Base64.parse(data)
+ }, key, {
+ iv: iv,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.Pkcs7
+ }).toString(CryptoJS.enc.Utf8);
+ return encrypted
+ }
+ let error_log = false;
+
+ function logger(text) {
+ if (error_log) {
+ log(text)
+ }
+ }
+ let decode_funcs = [text => {
+ try {
+ return ungzip(text)
+ } catch (e) {
+ logger("非gzip加密");
+ return ""
+ }
+ }, text => {
+ try {
+ return base64Decode(text)
+ } catch (e) {
+ logger("非b64加密");
+ return ""
+ }
+ }, text => {
+ try {
+ return aes_decrypt(text)
+ } catch (e) {
+ logger("非aes加密");
+ return ""
+ }
+ }, text => {
+ try {
+ return RSA.decode(text, rsa_private_key, null)
+ } catch (e) {
+ logger("非rsa加密");
+ return ""
+ }
+ }];
+ let func_index = 0;
+ while (!current_match.test(decode_content)) {
+ decode_content = decode_funcs[func_index](js_code);
+ func_index++;
+ if (func_index >= decode_funcs.length) {
+ break
+ }
+ }
+ return decode_content
+}
+
+function runMain(main_func_code, arg) {
+ let mainFunc = function() {
+ return ""
+ };
+ try {
+ eval(main_func_code + "\nmainFunc=main;");
+ return mainFunc(arg)
+ } catch (e) {
+ log(`执行main_funct发生了错误:${e.message}`);
+ return ""
+ }
+}
+
+function init(ext) {
+ console.log("init");
+ rule = {};
+ rule_fetch_params = {};
+ fetch_params = null;
+ try {
+ let muban = 模板.getMubans();
+ if (typeof ext == "object") {
+ rule = ext
+ } else if (typeof ext == "string") {
+ let is_file = ext.startsWith("file://");
+ if (ext.startsWith("http") || is_file) {
+ let query = getQuery(ext);
+ if (is_file) {
+ ext = ext.split("?")[0]
+ }
+ let js = request(ext, {
+ method: "GET"
+ });
+ if (js) {
+ js = getOriginalJs(js);
+ eval("(function(){" + js.replace("var rule", "rule") + "})()")
+ }
+ if (query.type === "url" && query.params) {
+ if (is_file && /^http/.test(query.params)) {
+ rule.params = query.params
+ } else {
+ rule.params = urljoin(ext, query.params)
+ }
+ } else if (query.params) {
+ rule.params = query.params
+ }
+ } else {
+ ext = getOriginalJs(ext);
+ eval("(function(){" + ext.replace("var rule", "rule") + "})()")
+ }
+ } else {
+ console.log(`规则加载失败,不支持的规则类型:${typeof ext}`);
+ return
+ }
+ rule.host = (rule.host || "").rstrip("/");
+ HOST = rule.host;
+ if (rule.hostJs) {
+ console.log(`检测到hostJs,准备执行...`);
+ try {
+ eval(rule.hostJs);
+ rule.host = HOST.rstrip("/")
+ } catch (e) {
+ console.log(`执行${rule.hostJs}获取host发生错误:${e.message}`)
+ }
+ }
+ if (rule["模板"] === "自动") {
+ try {
+ let host_headers = rule["headers"] || {};
+ let host_html = getCode(HOST, {
+ headers: host_headers
+ });
+ let match_muban = "";
+ let muban_keys = Object.keys(muban).filter(it => !/默认|短视2|采集1/.test(it));
+ for (let muban_key of muban_keys) {
+ try {
+ let host_data = JSON.parse(home({}, host_html, muban[muban_key].class_parse));
+ if (host_data.class && host_data.class.length > 0) {
+ match_muban = muban_key;
+ console.log(`自动匹配模板:【${muban_key}】`);
+ break
+ }
+ } catch (e) {
+ console.log(`自动匹配模板:【${muban_key}】错误:${e.message}`)
+ }
+ }
+ if (match_muban) {
+ muban["自动"] = muban[match_muban];
+ if (rule["模板修改"] && rule["模板修改"].startsWith("js:")) {
+ eval(rule["模板修改"].replace("js:", "").trim())
+ }
+ } else {
+ delete rule["模板"]
+ }
+ } catch (e) {
+ delete rule["模板"]
+ }
+ }
+ if (rule.模板 && muban.hasOwnProperty(rule.模板)) {
+ print("继承模板:" + rule.模板);
+ rule = Object.assign(muban[rule.模板], rule)
+ }
+ let rule_cate_excludes = (rule.cate_exclude || "").split("|").filter(it => it.trim());
+ let rule_tab_excludes = (rule.tab_exclude || "").split("|").filter(it => it.trim());
+ rule_cate_excludes = rule_cate_excludes.concat(CATE_EXCLUDE.split("|").filter(it => it.trim()));
+ rule_tab_excludes = rule_tab_excludes.concat(TAB_EXCLUDE.split("|").filter(it => it.trim()));
+ rule.cate_exclude = rule_cate_excludes.join("|");
+ rule.tab_exclude = rule_tab_excludes.join("|");
+ rule.类型 = rule.类型 || "影视";
+ rule.url = rule.url || "";
+ rule.double = rule.double || false;
+ rule.homeUrl = rule.homeUrl || "";
+ rule.detailUrl = rule.detailUrl || "";
+ rule.searchUrl = rule.searchUrl || "";
+ rule.homeUrl = rule.host && rule.homeUrl ? urljoin(rule.host, rule.homeUrl) : rule.homeUrl || rule.host;
+ rule.homeUrl = cheerio.jinja2(rule.homeUrl, {
+ rule: rule
+ });
+ rule.detailUrl = rule.host && rule.detailUrl ? urljoin(rule.host, rule.detailUrl) : rule.detailUrl;
+ rule.二级访问前 = rule.二级访问前 || "";
+ if (rule.url.includes("[") && rule.url.includes("]")) {
+ let u1 = rule.url.split("[")[0];
+ let u2 = rule.url.split("[")[1].split("]")[0];
+ rule.url = rule.host && rule.url ? urljoin(rule.host, u1) + "[" + urljoin(rule.host, u2) + "]" : rule.url
+ } else {
+ rule.url = rule.host && rule.url ? urljoin(rule.host, rule.url) : rule.url
+ }
+ if (rule.searchUrl.includes("[") && rule.searchUrl.includes("]") && !rule.searchUrl.includes("#")) {
+ let u1 = rule.searchUrl.split("[")[0];
+ let u2 = rule.searchUrl.split("[")[1].split("]")[0];
+ rule.searchUrl = rule.host && rule.searchUrl ? urljoin(rule.host, u1) + "[" + urljoin(rule.host, u2) + "]" : rule.searchUrl
+ } else {
+ rule.searchUrl = rule.host && rule.searchUrl ? urljoin(rule.host, rule.searchUrl) : rule.searchUrl
+ }
+ rule.timeout = rule.timeout || 5e3;
+ rule.encoding = rule.编码 || rule.encoding || "utf-8";
+ rule.search_encoding = rule.搜索编码 || rule.search_encoding || "";
+ rule.图片来源 = rule.图片来源 || "";
+ rule.图片替换 = rule.图片替换 || "";
+ rule.play_json = rule.hasOwnProperty("play_json") ? rule.play_json : [];
+ rule.pagecount = rule.hasOwnProperty("pagecount") ? rule.pagecount : {};
+ rule.proxy_rule = rule.hasOwnProperty("proxy_rule") ? rule.proxy_rule : "";
+ if (!rule.hasOwnProperty("sniffer")) {
+ rule.sniffer = false
+ }
+ rule.sniffer = rule.hasOwnProperty("sniffer") ? rule.sniffer : "";
+ rule.sniffer = !!(rule.sniffer && rule.sniffer !== "0" && rule.sniffer !== "false");
+ rule.isVideo = rule.hasOwnProperty("isVideo") ? rule.isVideo : "";
+ if (rule.sniffer && !rule.isVideo) {
+ rule.isVideo = "http((?!http).){12,}?\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)\\?.*|http((?!http).){12,}\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)|http((?!http).)*?video/tos*|http((?!http).)*?obj/tos*"
+ }
+ rule.tab_remove = rule.hasOwnProperty("tab_remove") ? rule.tab_remove : [];
+ rule.tab_order = rule.hasOwnProperty("tab_order") ? rule.tab_order : [];
+ rule.tab_rename = rule.hasOwnProperty("tab_rename") ? rule.tab_rename : {};
+ if (rule.headers && typeof rule.headers === "object") {
+ try {
+ let header_keys = Object.keys(rule.headers);
+ for (let k of header_keys) {
+ if (k.toLowerCase() === "user-agent") {
+ let v = rule.headers[k];
+ console.log(v);
+ if (["MOBILE_UA", "PC_UA", "UC_UA", "IOS_UA", "UA"].includes(v)) {
+ rule.headers[k] = eval(v)
+ }
+ } else if (k.toLowerCase() === "cookie") {
+ let v = rule.headers[k];
+ if (v && v.startsWith("http")) {
+ console.log(v);
+ try {
+ v = fetch(v);
+ console.log(v);
+ rule.headers[k] = v
+ } catch (e) {
+ console.log(`从${v}获取cookie发生错误:${e.message}`)
+ }
+ }
+ }
+ }
+ } catch (e) {
+ console.log(`处理headers发生错误:${e.message}`)
+ }
+ } else {
+ rule.headers = {}
+ }
+ oheaders = deepCopy(rule.headers);
+ rule_fetch_params = {
+ headers: rule.headers,
+ timeout: rule.timeout,
+ encoding: rule.encoding
+ };
+ RKEY = typeof key !== "undefined" && key ? key : "drpy_" + (rule.title || rule.host);
+ pre();
+ init_test()
+ } catch (e) {
+ console.log(`init_test发生错误:${e.message}`)
+ }
+}
+let homeHtmlCache = undefined;
+
+function home(filter, home_html, class_parse) {
+ console.log("home");
+ home_html = home_html || "";
+ class_parse = class_parse || "";
+ if (typeof rule.filter === "string" && rule.filter.trim().length > 0) {
+ try {
+ let filter_json = ungzip(rule.filter.trim());
+ rule.filter = JSON.parse(filter_json)
+ } catch (e) {
+ rule.filter = {}
+ }
+ }
+ let homeObj = {
+ filter: rule.filter || false,
+ MY_URL: rule.homeUrl,
+ class_name: rule.class_name || "",
+ class_url: rule.class_url || "",
+ class_parse: class_parse || rule.class_parse || "",
+ cate_exclude: rule.cate_exclude,
+ home_html: home_html
+ };
+ return homeParse(homeObj)
+}
+
+function homeVod(params) {
+ console.log("homeVod");
+ let homeVodObj = {
+ "推荐": rule.推荐,
+ double: rule.double,
+ homeUrl: rule.homeUrl,
+ detailUrl: rule.detailUrl
+ };
+ return homeVodParse(homeVodObj)
+}
+
+function category(tid, pg, filter, extend) {
+ let cateObj = {
+ url: rule.url,
+ "一级": rule.一级,
+ tid: tid,
+ pg: parseInt(pg),
+ filter: filter,
+ extend: extend
+ };
+ return categoryParse(cateObj)
+}
+
+function detail(vod_url) {
+ let orId = vod_url;
+ let fyclass = "";
+ log("orId:" + orId);
+ if (vod_url.indexOf("$") > -1) {
+ let tmp = vod_url.split("$");
+ fyclass = tmp[0];
+ vod_url = tmp[1]
+ }
+ let detailUrl = vod_url.split("@@")[0];
+ let url;
+ if (!detailUrl.startsWith("http") && !detailUrl.includes("/")) {
+ url = rule.detailUrl.replaceAll("fyid", detailUrl).replaceAll("fyclass", fyclass)
+ } else if (detailUrl.includes("/")) {
+ url = urljoin(rule.homeUrl, detailUrl)
+ } else {
+ url = detailUrl
+ }
+ let detailObj = {
+ orId: orId,
+ url: url,
+ "二级": rule.二级,
+ "二级访问前": rule.二级访问前,
+ detailUrl: detailUrl,
+ fyclass: fyclass,
+ tab_exclude: rule.tab_exclude
+ };
+ return detailParse(detailObj)
+}
+
+function play(flag, id, flags) {
+ let playObj = {
+ url: id,
+ flag: flag,
+ flags: flags
+ };
+ return playParse(playObj)
+}
+
+function search(wd, quick, pg) {
+ if (rule.search_encoding) {
+ if (rule.search_encoding.toLowerCase() !== "utf-8") {
+ wd = encodeStr(wd, rule.search_encoding)
+ }
+ } else if (rule.encoding && rule.encoding.toLowerCase() !== "utf-8") {
+ wd = encodeStr(wd, rule.encoding)
+ }
+ let searchObj = {
+ searchUrl: rule.searchUrl,
+ "搜索": rule.搜索,
+ wd: wd,
+ pg: pg || 1,
+ quick: quick
+ };
+ return searchParse(searchObj)
+}
+
+function proxy(params) {
+ if (rule.proxy_rule && rule.proxy_rule.trim()) {
+ rule.proxy_rule = rule.proxy_rule.trim()
+ }
+ if (rule.proxy_rule.startsWith("js:")) {
+ rule.proxy_rule = rule.proxy_rule.replace("js:", "")
+ }
+ let proxyObj = {
+ params: params,
+ proxy_rule: rule.proxy_rule
+ };
+ return proxyParse(proxyObj)
+}
+
+function sniffer() {
+ let enable_sniffer = rule.sniffer || false;
+ if (enable_sniffer) {
+ log("开始执行辅助嗅探代理规则...")
+ }
+ return enable_sniffer
+}
+
+function isVideo(url) {
+ let t = 0;
+ let is_video;
+ if (rule.isVideo && rule.isVideo.trim()) {
+ is_video = rule.isVideo.trim()
+ }
+ if (is_video.startsWith("js:")) {
+ is_video = is_video.replace("js:", "");
+ t = 1
+ }
+ let isVideoObj = {
+ url: url,
+ isVideo: is_video,
+ t: t
+ };
+ let result = isVideoParse(isVideoObj);
+ if (result) {
+ log("成功执行辅助嗅探规则并检测到视频地址:\n" + rule.isVideo)
+ }
+ return result
+}
+
+function getRule(key) {
+ return key ? rule[key] || "" : rule
+}
+
+function deepCopy(_obj) {
+ return JSON.parse(JSON.stringify(_obj))
+}
+
+function matchesAll(str, pattern, flatten) {
+ if (!pattern.global) {
+ pattern = new RegExp(pattern.source, "g" + (pattern.ignoreCase ? "i" : "") + (pattern.multiline ? "m" : ""))
+ }
+ var matches = [];
+ var match;
+ while ((match = pattern.exec(str)) !== null) {
+ matches.push(match)
+ }
+ return flatten ? matches.flat() : matches
+}
+
+function stringUtils() {
+ Object.defineProperties(String.prototype, {
+ replaceX: {
+ value: function(regex, replacement) {
+ let matches = matchesAll(this, regex, true);
+ if (matches && matches.length > 1) {
+ const hasCaptureGroup = /\$\d/.test(replacement);
+ if (hasCaptureGroup) {
+ return this.replace(regex, m => m.replace(regex, replacement))
+ } else {
+ return this.replace(regex, (m, p1) => m.replace(p1, replacement))
+ }
+ }
+ return this.replace(regex, replacement)
+ },
+ configurable: true,
+ enumerable: false,
+ writable: true
+ },
+ parseX: {
+ get: function() {
+ try {
+ return JSON.parse(this)
+ } catch (e) {
+ console.log(e.message);
+ return this.startsWith("[") ? [] : {}
+ }
+ },
+ configurable: true,
+ enumerable: false
+ }
+ })
+}
+
+function cut(text, start, end, method, All) {
+ let result = "";
+ let c = (t, s, e) => {
+ let result = "";
+ let rs = [];
+ let results = [];
+ try {
+ let lr = new RegExp(String.raw`${s}`.toString());
+ let rr = new RegExp(String.raw`${e}`.toString());
+ const segments = t.split(lr);
+ if (segments.length < 2) return "";
+ let cutSegments = segments.slice(1).map(segment => {
+ let splitSegment = segment.split(rr);
+ return splitSegment.length < 2 ? undefined : splitSegment[0] + e
+ }).filter(f => f);
+ if (All) {
+ return `[${cutSegments.join(",")}]`
+ } else {
+ return cutSegments[0]
+ }
+ } catch (e) {
+ console.log(`Error cutting text:${e.message}`)
+ }
+ return result
+ };
+ result = c(text, start, end);
+ stringUtils();
+ if (method && typeof method === "function") {
+ result = method(result)
+ }
+ return result
+}
+
+function DRPY() {
+ return {
+ runMain: runMain,
+ getRule: getRule,
+ init: init,
+ home: home,
+ homeVod: homeVod,
+ category: category,
+ detail: detail,
+ play: play,
+ search: search,
+ proxy: proxy,
+ sniffer: sniffer,
+ isVideo: isVideo,
+ fixAdM3u8Ai: fixAdM3u8Ai
+ }
+}
+export default {
+ runMain: runMain,
+ getRule: getRule,
+ init: init,
+ home: home,
+ homeVod: homeVod,
+ category: category,
+ detail: detail,
+ play: play,
+ search: search,
+ proxy: proxy,
+ sniffer: sniffer,
+ isVideo: isVideo,
+ fixAdM3u8Ai: fixAdM3u8Ai,
+ DRPY: DRPY
+};
\ No newline at end of file
diff --git a/欧歌/api/jinja.js b/欧歌/api/jinja.js
new file mode 100644
index 0000000..67928a0
--- /dev/null
+++ b/欧歌/api/jinja.js
@@ -0,0 +1,607 @@
+/*!
+ * Jinja Templating for JavaScript v0.1.8
+ * https://github.com/sstur/jinja-js
+ *
+ * This is a slimmed-down Jinja2 implementation [http://jinja.pocoo.org/]
+ *
+ * In the interest of simplicity, it deviates from Jinja2 as follows:
+ * - Line statements, cycle, super, macro tags and block nesting are not implemented
+ * - auto escapes html by default (the filter is "html" not "e")
+ * - Only "html" and "safe" filters are built in
+ * - Filters are not valid in expressions; `foo|length > 1` is not valid
+ * - Expression Tests (`if num is odd`) not implemented (`is` translates to `==` and `isnot` to `!=`)
+ *
+ * Notes:
+ * - if property is not found, but method '_get' exists, it will be called with the property name (and cached)
+ * - `{% for n in obj %}` iterates the object's keys; get the value with `{% for n in obj %}{{ obj[n] }}{% endfor %}`
+ * - subscript notation `a[0]` takes literals or simple variables but not `a[item.key]`
+ * - `.2` is not a valid number literal; use `0.2`
+ *
+ */
+/*global require, exports, module, define */
+
+(function(global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.jinja = {}));
+})(this, (function(jinja) {
+ "use strict";
+ var STRINGS = /'(\\.|[^'])*'|"(\\.|[^"'"])*"/g;
+ var IDENTS_AND_NUMS = /([$_a-z][$\w]*)|([+-]?\d+(\.\d+)?)/g;
+ var NUMBER = /^[+-]?\d+(\.\d+)?$/;
+ //non-primitive literals (array and object literals)
+ var NON_PRIMITIVES = /\[[@#~](,[@#~])*\]|\[\]|\{([@i]:[@#~])(,[@i]:[@#~])*\}|\{\}/g;
+ //bare identifiers such as variables and in object literals: {foo: 'value'}
+ var IDENTIFIERS = /[$_a-z][$\w]*/ig;
+ var VARIABLES = /i(\.i|\[[@#i]\])*/g;
+ var ACCESSOR = /(\.i|\[[@#i]\])/g;
+ var OPERATORS = /(===?|!==?|>=?|<=?|&&|\|\||[+\-\*\/%])/g;
+ //extended (english) operators
+ var EOPS = /(^|[^$\w])(and|or|not|is|isnot)([^$\w]|$)/g;
+ var LEADING_SPACE = /^\s+/;
+ var TRAILING_SPACE = /\s+$/;
+
+ var START_TOKEN = /\{\{\{|\{\{|\{%|\{#/;
+ var TAGS = {
+ '{{{': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}\}/,
+ '{{': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}/,
+ '{%': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?%\}/,
+ '{#': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?#\}/
+ };
+
+ var delimeters = {
+ '{%': 'directive',
+ '{{': 'output',
+ '{#': 'comment'
+ };
+
+ var operators = {
+ and: '&&',
+ or: '||',
+ not: '!',
+ is: '==',
+ isnot: '!='
+ };
+
+ var constants = {
+ 'true': true,
+ 'false': false,
+ 'null': null
+ };
+
+ function Parser() {
+ this.nest = [];
+ this.compiled = [];
+ this.childBlocks = 0;
+ this.parentBlocks = 0;
+ this.isSilent = false;
+ }
+
+ Parser.prototype.push = function(line) {
+ if (!this.isSilent) {
+ this.compiled.push(line);
+ }
+ };
+
+ Parser.prototype.parse = function(src) {
+ this.tokenize(src);
+ return this.compiled;
+ };
+
+ Parser.prototype.tokenize = function(src) {
+ var lastEnd = 0,
+ parser = this,
+ trimLeading = false;
+ matchAll(src, START_TOKEN, function(open, index, src) {
+ //here we match the rest of the src against a regex for this tag
+ var match = src.slice(index + open.length).match(TAGS[open]);
+ match = (match ? match[0] : '');
+ //here we sub out strings so we don't get false matches
+ var simplified = match.replace(STRINGS, '@');
+ //if we don't have a close tag or there is a nested open tag
+ if (!match || ~simplified.indexOf(open)) {
+ return index + 1;
+ }
+ var inner = match.slice(0, 0 - open.length);
+ //check for white-space collapse syntax
+ if (inner.charAt(0) === '-') var wsCollapseLeft = true;
+ if (inner.slice(-1) === '-') var wsCollapseRight = true;
+ inner = inner.replace(/^-|-$/g, '').trim();
+ //if we're in raw mode and we are not looking at an "endraw" tag, move along
+ if (parser.rawMode && (open + inner) !== '{%endraw') {
+ return index + 1;
+ }
+ var text = src.slice(lastEnd, index);
+ lastEnd = index + open.length + match.length;
+ if (trimLeading) text = trimLeft(text);
+ if (wsCollapseLeft) text = trimRight(text);
+ if (wsCollapseRight) trimLeading = true;
+ if (open === '{{{') {
+ //liquid-style: make {{{x}}} => {{x|safe}}
+ open = '{{';
+ inner += '|safe';
+ }
+ parser.textHandler(text);
+ parser.tokenHandler(open, inner);
+ });
+ var text = src.slice(lastEnd);
+ if (trimLeading) text = trimLeft(text);
+ this.textHandler(text);
+ };
+
+ Parser.prototype.textHandler = function(text) {
+ this.push('write(' + JSON.stringify(text) + ');');
+ };
+
+ Parser.prototype.tokenHandler = function(open, inner) {
+ var type = delimeters[open];
+ if (type === 'directive') {
+ this.compileTag(inner);
+ } else if (type === 'output') {
+ var extracted = this.extractEnt(inner, STRINGS, '@');
+ //replace || operators with ~
+ extracted.src = extracted.src.replace(/\|\|/g, '~').split('|');
+ //put back || operators
+ extracted.src = extracted.src.map(function(part) {
+ return part.split('~').join('||');
+ });
+ var parts = this.injectEnt(extracted, '@');
+ if (parts.length > 1) {
+ var filters = parts.slice(1).map(this.parseFilter.bind(this));
+ this.push('filter(' + this.parseExpr(parts[0]) + ',' + filters.join(',') + ');');
+ } else {
+ this.push('filter(' + this.parseExpr(parts[0]) + ');');
+ }
+ }
+ };
+
+ Parser.prototype.compileTag = function(str) {
+ var directive = str.split(' ')[0];
+ var handler = tagHandlers[directive];
+ if (!handler) {
+ throw new Error('Invalid tag: ' + str);
+ }
+ handler.call(this, str.slice(directive.length).trim());
+ };
+
+ Parser.prototype.parseFilter = function(src) {
+ src = src.trim();
+ var match = src.match(/[:(]/);
+ var i = match ? match.index : -1;
+ if (i < 0) return JSON.stringify([src]);
+ var name = src.slice(0, i);
+ var args = src.charAt(i) === ':' ? src.slice(i + 1) : src.slice(i + 1, -1);
+ args = this.parseExpr(args, {
+ terms: true
+ });
+ return '[' + JSON.stringify(name) + ',' + args + ']';
+ };
+
+ Parser.prototype.extractEnt = function(src, regex, placeholder) {
+ var subs = [],
+ isFunc = typeof placeholder == 'function';
+ src = src.replace(regex, function(str) {
+ var replacement = isFunc ? placeholder(str) : placeholder;
+ if (replacement) {
+ subs.push(str);
+ return replacement;
+ }
+ return str;
+ });
+ return {
+ src: src,
+ subs: subs
+ };
+ };
+
+ Parser.prototype.injectEnt = function(extracted, placeholder) {
+ var src = extracted.src,
+ subs = extracted.subs,
+ isArr = Array.isArray(src);
+ var arr = (isArr) ? src : [src];
+ var re = new RegExp('[' + placeholder + ']', 'g'),
+ i = 0;
+ arr.forEach(function(src, index) {
+ arr[index] = src.replace(re, function() {
+ return subs[i++];
+ });
+ });
+ return isArr ? arr : arr[0];
+ };
+
+ //replace complex literals without mistaking subscript notation with array literals
+ Parser.prototype.replaceComplex = function(s) {
+ var parsed = this.extractEnt(s, /i(\.i|\[[@#i]\])+/g, 'v');
+ parsed.src = parsed.src.replace(NON_PRIMITIVES, '~');
+ return this.injectEnt(parsed, 'v');
+ };
+
+ //parse expression containing literals (including objects/arrays) and variables (including dot and subscript notation)
+ //valid expressions: `a + 1 > b.c or c == null`, `a and b[1] != c`, `(a < b) or (c < d and e)`, 'a || [1]`
+ Parser.prototype.parseExpr = function(src, opts) {
+ opts = opts || {};
+ //extract string literals -> @
+ var parsed1 = this.extractEnt(src, STRINGS, '@');
+ //note: this will catch {not: 1} and a.is; could we replace temporarily and then check adjacent chars?
+ parsed1.src = parsed1.src.replace(EOPS, function(s, before, op, after) {
+ return (op in operators) ? before + operators[op] + after : s;
+ });
+ //sub out non-string literals (numbers/true/false/null) -> #
+ // the distinction is necessary because @ can be object identifiers, # cannot
+ var parsed2 = this.extractEnt(parsed1.src, IDENTS_AND_NUMS, function(s) {
+ return (s in constants || NUMBER.test(s)) ? '#' : null;
+ });
+ //sub out object/variable identifiers -> i
+ var parsed3 = this.extractEnt(parsed2.src, IDENTIFIERS, 'i');
+ //remove white-space
+ parsed3.src = parsed3.src.replace(/\s+/g, '');
+
+ //the rest of this is simply to boil the expression down and check validity
+ var simplified = parsed3.src;
+ //sub out complex literals (objects/arrays) -> ~
+ // the distinction is necessary because @ and # can be subscripts but ~ cannot
+ while (simplified !== (simplified = this.replaceComplex(simplified)));
+ //now @ represents strings, # represents other primitives and ~ represents non-primitives
+ //replace complex variables (those with dot/subscript accessors) -> v
+ while (simplified !== (simplified = simplified.replace(/i(\.i|\[[@#i]\])+/, 'v')));
+ //empty subscript or complex variables in subscript, are not permitted
+ simplified = simplified.replace(/[iv]\[v?\]/g, 'x');
+ //sub in "i" for @ and # and ~ and v (now "i" represents all literals, variables and identifiers)
+ simplified = simplified.replace(/[@#~v]/g, 'i');
+ //sub out operators
+ simplified = simplified.replace(OPERATORS, '%');
+ //allow 'not' unary operator
+ simplified = simplified.replace(/!+[i]/g, 'i');
+ var terms = opts.terms ? simplified.split(',') : [simplified];
+ terms.forEach(function(term) {
+ //simplify logical grouping
+ while (term !== (term = term.replace(/\(i(%i)*\)/g, 'i')));
+ if (!term.match(/^i(%i)*/)) {
+ throw new Error('Invalid expression: ' + src + " " + term);
+ }
+ });
+ parsed3.src = parsed3.src.replace(VARIABLES, this.parseVar.bind(this));
+ parsed2.src = this.injectEnt(parsed3, 'i');
+ parsed1.src = this.injectEnt(parsed2, '#');
+ return this.injectEnt(parsed1, '@');
+ };
+
+ Parser.prototype.parseVar = function(src) {
+ var args = Array.prototype.slice.call(arguments);
+ var str = args.pop(),
+ index = args.pop();
+ //quote bare object identifiers (might be a reserved word like {while: 1})
+ if (src === 'i' && str.charAt(index + 1) === ':') {
+ return '"i"';
+ }
+ var parts = ['"i"'];
+ src.replace(ACCESSOR, function(part) {
+ if (part === '.i') {
+ parts.push('"i"');
+ } else if (part === '[i]') {
+ parts.push('get("i")');
+ } else {
+ parts.push(part.slice(1, -1));
+ }
+ });
+ return 'get(' + parts.join(',') + ')';
+ };
+
+ //escapes a name to be used as a javascript identifier
+ Parser.prototype.escName = function(str) {
+ return str.replace(/\W/g, function(s) {
+ return '$' + s.charCodeAt(0).toString(16);
+ });
+ };
+
+ Parser.prototype.parseQuoted = function(str) {
+ if (str.charAt(0) === "'") {
+ str = str.slice(1, -1).replace(/\\.|"/, function(s) {
+ if (s === "\\'") return "'";
+ return s.charAt(0) === '\\' ? s : ('\\' + s);
+ });
+ str = '"' + str + '"';
+ }
+ //todo: try/catch or deal with invalid characters (linebreaks, control characters)
+ return JSON.parse(str);
+ };
+
+
+ //the context 'this' inside tagHandlers is the parser instance
+ var tagHandlers = {
+ 'if': function(expr) {
+ this.push('if (' + this.parseExpr(expr) + ') {');
+ this.nest.unshift('if');
+ },
+ 'else': function() {
+ if (this.nest[0] === 'for') {
+ this.push('}, function() {');
+ } else {
+ this.push('} else {');
+ }
+ },
+ 'elseif': function(expr) {
+ this.push('} else if (' + this.parseExpr(expr) + ') {');
+ },
+ 'endif': function() {
+ this.nest.shift();
+ this.push('}');
+ },
+ 'for': function(str) {
+ var i = str.indexOf(' in ');
+ var name = str.slice(0, i).trim();
+ var expr = str.slice(i + 4).trim();
+ this.push('each(' + this.parseExpr(expr) + ',' + JSON.stringify(name) + ',function() {');
+ this.nest.unshift('for');
+ },
+ 'endfor': function() {
+ this.nest.shift();
+ this.push('});');
+ },
+ 'raw': function() {
+ this.rawMode = true;
+ },
+ 'endraw': function() {
+ this.rawMode = false;
+ },
+ 'set': function(stmt) {
+ var i = stmt.indexOf('=');
+ var name = stmt.slice(0, i).trim();
+ var expr = stmt.slice(i + 1).trim();
+ this.push('set(' + JSON.stringify(name) + ',' + this.parseExpr(expr) + ');');
+ },
+ 'block': function(name) {
+ if (this.isParent) {
+ ++this.parentBlocks;
+ var blockName = 'block_' + (this.escName(name) || this.parentBlocks);
+ this.push('block(typeof ' + blockName + ' == "function" ? ' + blockName + ' : function() {');
+ } else if (this.hasParent) {
+ this.isSilent = false;
+ ++this.childBlocks;
+ blockName = 'block_' + (this.escName(name) || this.childBlocks);
+ this.push('function ' + blockName + '() {');
+ }
+ this.nest.unshift('block');
+ },
+ 'endblock': function() {
+ this.nest.shift();
+ if (this.isParent) {
+ this.push('});');
+ } else if (this.hasParent) {
+ this.push('}');
+ this.isSilent = true;
+ }
+ },
+ 'extends': function(name) {
+ name = this.parseQuoted(name);
+ var parentSrc = this.readTemplateFile(name);
+ this.isParent = true;
+ this.tokenize(parentSrc);
+ this.isParent = false;
+ this.hasParent = true;
+ //silence output until we enter a child block
+ this.isSilent = true;
+ },
+ 'include': function(name) {
+ name = this.parseQuoted(name);
+ var incSrc = this.readTemplateFile(name);
+ this.isInclude = true;
+ this.tokenize(incSrc);
+ this.isInclude = false;
+ }
+ };
+
+ //liquid style
+ tagHandlers.assign = tagHandlers.set;
+ //python/django style
+ tagHandlers.elif = tagHandlers.elseif;
+
+ var getRuntime = function runtime(data, opts) {
+ var defaults = {
+ autoEscape: 'toJson'
+ };
+ var _toString = Object.prototype.toString;
+ var _hasOwnProperty = Object.prototype.hasOwnProperty;
+ var getKeys = Object.keys || function(obj) {
+ var keys = [];
+ for (var n in obj)
+ if (_hasOwnProperty.call(obj, n)) keys.push(n);
+ return keys;
+ };
+ var isArray = Array.isArray || function(obj) {
+ return _toString.call(obj) === '[object Array]';
+ };
+ var create = Object.create || function(obj) {
+ function F() {}
+
+ F.prototype = obj;
+ return new F();
+ };
+ var toString = function(val) {
+ if (val == null) return '';
+ return (typeof val.toString == 'function') ? val.toString() : _toString.call(val);
+ };
+ var extend = function(dest, src) {
+ var keys = getKeys(src);
+ for (var i = 0, len = keys.length; i < len; i++) {
+ var key = keys[i];
+ dest[key] = src[key];
+ }
+ return dest;
+ };
+ //get a value, lexically, starting in current context; a.b -> get("a","b")
+ var get = function() {
+ var val, n = arguments[0],
+ c = stack.length;
+ while (c--) {
+ val = stack[c][n];
+ if (typeof val != 'undefined') break;
+ }
+ for (var i = 1, len = arguments.length; i < len; i++) {
+ if (val == null) continue;
+ n = arguments[i];
+ val = (_hasOwnProperty.call(val, n)) ? val[n] : (typeof val._get == 'function' ? (val[n] = val._get(n)) : null);
+ }
+ return (val == null) ? '' : val;
+ };
+ var set = function(n, val) {
+ stack[stack.length - 1][n] = val;
+ };
+ var push = function(ctx) {
+ stack.push(ctx || {});
+ };
+ var pop = function() {
+ stack.pop();
+ };
+ var write = function(str) {
+ output.push(str);
+ };
+ var filter = function(val) {
+ for (var i = 1, len = arguments.length; i < len; i++) {
+ var arr = arguments[i],
+ name = arr[0],
+ filter = filters[name];
+ if (filter) {
+ arr[0] = val;
+ //now arr looks like [val, arg1, arg2]
+ val = filter.apply(data, arr);
+ } else {
+ throw new Error('Invalid filter: ' + name);
+ }
+ }
+ if (opts.autoEscape && name !== opts.autoEscape && name !== 'safe') {
+ //auto escape if not explicitly safe or already escaped
+ val = filters[opts.autoEscape].call(data, val);
+ }
+ output.push(val);
+ };
+ var each = function(obj, loopvar, fn1, fn2) {
+ if (obj == null) return;
+ var arr = isArray(obj) ? obj : getKeys(obj),
+ len = arr.length;
+ var ctx = {
+ loop: {
+ length: len,
+ first: arr[0],
+ last: arr[len - 1]
+ }
+ };
+ push(ctx);
+ for (var i = 0; i < len; i++) {
+ extend(ctx.loop, {
+ index: i + 1,
+ index0: i
+ });
+ fn1(ctx[loopvar] = arr[i]);
+ }
+ if (len === 0 && fn2) fn2();
+ pop();
+ };
+ var block = function(fn) {
+ push();
+ fn();
+ pop();
+ };
+ var render = function() {
+ return output.join('');
+ };
+ data = data || {};
+ opts = extend(defaults, opts || {});
+ var filters = extend({
+ html: function(val) {
+ return toString(val)
+ .split('&').join('&')
+ .split('<').join('<')
+ .split('>').join('>')
+ .split('"').join('"');
+ },
+ safe: function(val) {
+ return val;
+ },
+ toJson: function(val) {
+ if (typeof val === 'object') {
+ return JSON.stringify(val);
+ }
+ return toString(val);
+ }
+ }, opts.filters || {});
+ var stack = [create(data || {})],
+ output = [];
+ return {
+ get: get,
+ set: set,
+ push: push,
+ pop: pop,
+ write: write,
+ filter: filter,
+ each: each,
+ block: block,
+ render: render
+ };
+ };
+
+ var runtime;
+
+ jinja.compile = function(markup, opts) {
+ opts = opts || {};
+ var parser = new Parser();
+ parser.readTemplateFile = this.readTemplateFile;
+ var code = [];
+ code.push('function render($) {');
+ code.push('var get = $.get, set = $.set, push = $.push, pop = $.pop, write = $.write, filter = $.filter, each = $.each, block = $.block;');
+ code.push.apply(code, parser.parse(markup));
+ code.push('return $.render();');
+ code.push('}');
+ code = code.join('\n');
+ if (opts.runtime === false) {
+ var fn = new Function('data', 'options', 'return (' + code + ')(runtime(data, options))');
+ } else {
+ runtime = runtime || (runtime = getRuntime.toString());
+ fn = new Function('data', 'options', 'return (' + code + ')((' + runtime + ')(data, options))');
+ }
+ return {
+ render: fn
+ };
+ };
+
+ jinja.render = function(markup, data, opts) {
+ var tmpl = jinja.compile(markup);
+ return tmpl.render(data, opts);
+ };
+
+ jinja.templateFiles = [];
+
+ jinja.readTemplateFile = function(name) {
+ var templateFiles = this.templateFiles || [];
+ var templateFile = templateFiles[name];
+ if (templateFile == null) {
+ throw new Error('Template file not found: ' + name);
+ }
+ return templateFile;
+ };
+
+
+ /*!
+ * Helpers
+ */
+
+ function trimLeft(str) {
+ return str.replace(LEADING_SPACE, '');
+ }
+
+ function trimRight(str) {
+ return str.replace(TRAILING_SPACE, '');
+ }
+
+ function matchAll(str, reg, fn) {
+ //copy as global
+ reg = new RegExp(reg.source, 'g' + (reg.ignoreCase ? 'i' : '') + (reg.multiline ? 'm' : ''));
+ var match;
+ while ((match = reg.exec(str))) {
+ var result = fn(match[0], match.index, str);
+ if (typeof result == 'number') {
+ reg.lastIndex = result;
+ }
+ }
+ }
+}));
\ No newline at end of file
diff --git a/欧歌/api/jsencrypt.js b/欧歌/api/jsencrypt.js
new file mode 100644
index 0000000..8deca5f
--- /dev/null
+++ b/欧歌/api/jsencrypt.js
@@ -0,0 +1,360 @@
+/*
+ * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+(function webpackUniversalModuleDefinition(root, factory) {
+ if (typeof exports === 'object' && typeof module === 'object') {
+ // CommonJS
+ module.exports = exports = factory();
+ } else if (typeof define === 'function' && define.amd) {
+ // AMD
+ define([], factory);
+ } else {
+ // Global (browser)
+ globalThis.JSEncrypt = factory();
+ }
+})(this, () => {
+ return /******/ (() => { // webpackBootstrap
+ /******/
+ var __webpack_modules__ = ({
+
+ /***/
+ "./lib/JSEncrypt.js":
+ /*!**************************!*\
+ !*** ./lib/JSEncrypt.js ***!
+ \**************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncrypt\": () => (/* binding */ JSEncrypt)\n/* harmony export */ });\n/* harmony import */ var _lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/jsbn/base64 */ \"./lib/lib/jsbn/base64.js\");\n/* harmony import */ var _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./JSEncryptRSAKey */ \"./lib/JSEncryptRSAKey.js\");\n/* provided dependency */ var process = __webpack_require__(/*! process/browser */ \"./node_modules/process/browser.js\");\nvar _a;\n\n\nvar version = typeof process !== 'undefined'\n ? (_a = process.env) === null || _a === void 0 ? void 0 : \"3.3.2\"\n : undefined;\n/**\n *\n * @param {Object} [options = {}] - An object to customize JSEncrypt behaviour\n * possible parameters are:\n * - default_key_size {number} default: 1024 the key size in bit\n * - default_public_exponent {string} default: '010001' the hexadecimal representation of the public exponent\n * - log {boolean} default: false whether log warn/error or not\n * @constructor\n */\nvar JSEncrypt = /** @class */ (function () {\n function JSEncrypt(options) {\n if (options === void 0) { options = {}; }\n options = options || {};\n this.default_key_size = options.default_key_size\n ? parseInt(options.default_key_size, 10)\n : 1024;\n this.default_public_exponent = options.default_public_exponent || \"010001\"; // 65537 default openssl public exponent for rsa key type\n this.log = options.log || false;\n // The private and public key.\n this.key = null;\n }\n /**\n * Method to set the rsa key parameter (one method is enough to set both the public\n * and the private key, since the private key contains the public key paramenters)\n * Log a warning if logs are enabled\n * @param {Object|string} key the pem encoded string or an object (with or without header/footer)\n * @public\n */\n JSEncrypt.prototype.setKey = function (key) {\n if (this.log && this.key) {\n console.warn(\"A key was already set, overriding existing.\");\n }\n this.key = new _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__.JSEncryptRSAKey(key);\n };\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n JSEncrypt.prototype.setPrivateKey = function (privkey) {\n // Create the key.\n this.setKey(privkey);\n };\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n JSEncrypt.prototype.setPublicKey = function (pubkey) {\n // Sets the public key.\n this.setKey(pubkey);\n };\n /**\n * Proxy method for RSAKey object's decrypt, decrypt the string using the private\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str base64 encoded crypted string to decrypt\n * @return {string} the decrypted string\n * @public\n */\n JSEncrypt.prototype.decrypt = function (str) {\n // Return the decrypted string.\n try {\n return this.getKey().decrypt((0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.b64tohex)(str));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's encrypt, encrypt the string using the public\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str the string to encrypt\n * @return {string} the encrypted string encoded in base64\n * @public\n */\n JSEncrypt.prototype.encrypt = function (str) {\n // Return the encrypted string.\n try {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getKey().encrypt(str));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's sign.\n * @param {string} str the string to sign\n * @param {function} digestMethod hash method\n * @param {string} digestName the name of the hash algorithm\n * @return {string} the signature encoded in base64\n * @public\n */\n JSEncrypt.prototype.sign = function (str, digestMethod, digestName) {\n // return the RSA signature of 'str' in 'hex' format.\n try {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getKey().sign(str, digestMethod, digestName));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's verify.\n * @param {string} str the string to verify\n * @param {string} signature the signature encoded in base64 to compare the string to\n * @param {function} digestMethod hash method\n * @return {boolean} whether the data and signature match\n * @public\n */\n JSEncrypt.prototype.verify = function (str, signature, digestMethod) {\n // Return the decrypted 'digest' of the signature.\n try {\n return this.getKey().verify(str, (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.b64tohex)(signature), digestMethod);\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Getter for the current JSEncryptRSAKey object. If it doesn't exists a new object\n * will be created and returned\n * @param {callback} [cb] the callback to be called if we want the key to be generated\n * in an async fashion\n * @returns {JSEncryptRSAKey} the JSEncryptRSAKey object\n * @public\n */\n JSEncrypt.prototype.getKey = function (cb) {\n // Only create new if it does not exist.\n if (!this.key) {\n // Get a new private key.\n this.key = new _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__.JSEncryptRSAKey();\n if (cb && {}.toString.call(cb) === \"[object Function]\") {\n this.key.generateAsync(this.default_key_size, this.default_public_exponent, cb);\n return;\n }\n // Generate the key.\n this.key.generate(this.default_key_size, this.default_public_exponent);\n }\n return this.key;\n };\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITH header and footer\n * @public\n */\n JSEncrypt.prototype.getPrivateKey = function () {\n // Return the private representation of this key.\n return this.getKey().getPrivateKey();\n };\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITHOUT header and footer\n * @public\n */\n JSEncrypt.prototype.getPrivateKeyB64 = function () {\n // Return the private representation of this key.\n return this.getKey().getPrivateBaseKeyB64();\n };\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITH header and footer\n * @public\n */\n JSEncrypt.prototype.getPublicKey = function () {\n // Return the private representation of this key.\n return this.getKey().getPublicKey();\n };\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITHOUT header and footer\n * @public\n */\n JSEncrypt.prototype.getPublicKeyB64 = function () {\n // Return the private representation of this key.\n return this.getKey().getPublicBaseKeyB64();\n };\nvar b64map=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";var b64pad=\"=\";var base64DecodeChars=new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,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,-1,-1,-1,-1,-1,-1,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,-1,-1,-1,-1,-1);function btoa(str){var out,i,len;var c1,c2,c3;len=str.length;i=0;out=\"\";while(i>2);out+=b64map.charAt((c1&3)<<4);out+=\"==\";break}c2=str.charCodeAt(i++);if(i==len){out+=b64map.charAt(c1>>2);out+=b64map.charAt((c1&3)<<4|(c2&240)>>4);out+=b64map.charAt((c2&15)<<2);out+=\"=\";break}c3=str.charCodeAt(i++);out+=b64map.charAt(c1>>2);out+=b64map.charAt((c1&3)<<4|(c2&240)>>4);out+=b64map.charAt((c2&15)<<2|(c3&192)>>6);out+=b64map.charAt(c3&63)}return out}function atob(str){var c1,c2,c3,c4;var i,len,out;len=str.length;i=0;out=\"\";while(i>4);do{c3=str.charCodeAt(i++)&255;if(c3==61)return out;c3=base64DecodeChars[c3]}while(i>2);do{c4=str.charCodeAt(i++)&255;if(c4==61)return out;c4=base64DecodeChars[c4]}while(i>6)+b64map.charAt(c&63)}if(i+1==h.length){c=parseInt(h.substring(i,i+1),16);ret+=b64map.charAt(c<<2)}else if(i+2==h.length){c=parseInt(h.substring(i,i+2),16);ret+=b64map.charAt(c>>2)+b64map.charAt((c&3)<<4)}while((ret.length&3)>0)ret+=b64pad;return ret}function hexToBytes(hex){for(var bytes=[],c=0;c>>4).toString(16));hex.push((bytes[i]&15).toString(16))}return hex.join(\"\")}function b64tohex(str){for(var i=0,bin=atob(str.replace(/[ \\r\\n]+$/,\"\")),hex=[];i>3};JSEncrypt.prototype.decryptUnicodeLong=function(string){var k=this.getKey();var maxLength=(k.n.bitLength()+7>>3)*2;try{var hexString=b64tohex(string);var decryptedString=\"\";var rexStr=\".{1,\"+maxLength+\"}\";var rex=new RegExp(rexStr,\"g\");var subStrArray=hexString.match(rex);if(subStrArray){subStrArray.forEach(function(entry){decryptedString+=k.decrypt(entry)});return decryptedString}}catch(ex){console.log(\"加密错误:\"+ex.message);return false}};JSEncrypt.prototype.encryptUnicodeLong=function(string){var k=this.getKey();var maxLength=(k.n.bitLength()+7>>3)-11;try{var subStr=\"\",encryptedString=\"\";var subStart=0,subEnd=0;var bitLen=0,tmpPoint=0;for(var i=0,len=string.length;imaxLength){subStr=string.substring(subStart,subEnd);encryptedString+=k.encrypt(subStr);subStart=subEnd;bitLen=bitLen-tmpPoint}else{subEnd=i;tmpPoint=bitLen}}subStr=string.substring(subStart,len);encryptedString+=k.encrypt(subStr);return hex2b64(encryptedString)}catch(ex){console.log(\"解密错误:\"+ex.message);return false}}; JSEncrypt.version = version;\n return JSEncrypt;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/JSEncrypt.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/JSEncryptRSAKey.js":
+ /*!********************************!*\
+ !*** ./lib/JSEncryptRSAKey.js ***!
+ \********************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncryptRSAKey\": () => (/* binding */ JSEncryptRSAKey)\n/* harmony export */ });\n/* harmony import */ var _lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/jsbn/base64 */ \"./lib/lib/jsbn/base64.js\");\n/* harmony import */ var _lib_asn1js_hex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/asn1js/hex */ \"./lib/lib/asn1js/hex.js\");\n/* harmony import */ var _lib_asn1js_base64__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/asn1js/base64 */ \"./lib/lib/asn1js/base64.js\");\n/* harmony import */ var _lib_asn1js_asn1__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/asn1js/asn1 */ \"./lib/lib/asn1js/asn1.js\");\n/* harmony import */ var _lib_jsbn_rsa__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/jsbn/rsa */ \"./lib/lib/jsbn/rsa.js\");\n/* harmony import */ var _lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/jsbn/jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/jsrsasign/asn1-1.0 */ \"./lib/lib/jsrsasign/asn1-1.0.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n/**\n * Create a new JSEncryptRSAKey that extends Tom Wu's RSA key object.\n * This object is just a decorator for parsing the key parameter\n * @param {string|Object} key - The key in string format, or an object containing\n * the parameters needed to build a RSAKey object.\n * @constructor\n */\nvar JSEncryptRSAKey = /** @class */ (function (_super) {\n __extends(JSEncryptRSAKey, _super);\n function JSEncryptRSAKey(key) {\n var _this = _super.call(this) || this;\n // Call the super constructor.\n // RSAKey.call(this);\n // If a key key was provided.\n if (key) {\n // If this is a string...\n if (typeof key === \"string\") {\n _this.parseKey(key);\n }\n else if (JSEncryptRSAKey.hasPrivateKeyProperty(key) ||\n JSEncryptRSAKey.hasPublicKeyProperty(key)) {\n // Set the values for the key.\n _this.parsePropertiesFrom(key);\n }\n }\n return _this;\n }\n /**\n * Method to parse a pem encoded string containing both a public or private key.\n * The method will translate the pem encoded string in a der encoded string and\n * will parse private key and public key parameters. This method accepts public key\n * in the rsaencryption pkcs #1 format (oid: 1.2.840.113549.1.1.1).\n *\n * @todo Check how many rsa formats use the same format of pkcs #1.\n *\n * The format is defined as:\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * it's possible to examine the structure of the keys obtained from openssl using\n * an asn.1 dumper as the one used here to parse the components: http://lapo.it/asn1js/\n * @argument {string} pem the pem encoded string, can include the BEGIN/END header/footer\n * @private\n */\n JSEncryptRSAKey.prototype.parseKey = function (pem) {\n try {\n var modulus = 0;\n var public_exponent = 0;\n var reHex = /^\\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\\s*)+$/;\n var der = reHex.test(pem) ? _lib_asn1js_hex__WEBPACK_IMPORTED_MODULE_1__.Hex.decode(pem) : _lib_asn1js_base64__WEBPACK_IMPORTED_MODULE_2__.Base64.unarmor(pem);\n var asn1 = _lib_asn1js_asn1__WEBPACK_IMPORTED_MODULE_3__.ASN1.decode(der);\n // Fixes a bug with OpenSSL 1.0+ private keys\n if (asn1.sub.length === 3) {\n asn1 = asn1.sub[2].sub[0];\n }\n if (asn1.sub.length === 9) {\n // Parse the private key.\n modulus = asn1.sub[1].getHexStringValue(); // bigint\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = asn1.sub[2].getHexStringValue(); // int\n this.e = parseInt(public_exponent, 16);\n var private_exponent = asn1.sub[3].getHexStringValue(); // bigint\n this.d = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(private_exponent, 16);\n var prime1 = asn1.sub[4].getHexStringValue(); // bigint\n this.p = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(prime1, 16);\n var prime2 = asn1.sub[5].getHexStringValue(); // bigint\n this.q = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(prime2, 16);\n var exponent1 = asn1.sub[6].getHexStringValue(); // bigint\n this.dmp1 = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(exponent1, 16);\n var exponent2 = asn1.sub[7].getHexStringValue(); // bigint\n this.dmq1 = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(exponent2, 16);\n var coefficient = asn1.sub[8].getHexStringValue(); // bigint\n this.coeff = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(coefficient, 16);\n }\n else if (asn1.sub.length === 2) {\n if (asn1.sub[0].sub) {\n // Parse ASN.1 SubjectPublicKeyInfo type as defined by X.509\n var bit_string = asn1.sub[1];\n var sequence = bit_string.sub[0];\n modulus = sequence.sub[0].getHexStringValue();\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = sequence.sub[1].getHexStringValue();\n this.e = parseInt(public_exponent, 16);\n }\n else {\n // Parse ASN.1 RSAPublicKey type as defined by PKCS #1\n modulus = asn1.sub[0].getHexStringValue();\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = asn1.sub[1].getHexStringValue();\n this.e = parseInt(public_exponent, 16);\n }\n }\n else {\n return false;\n }\n return true;\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Translate rsa parameters in a hex encoded string representing the rsa key.\n *\n * The translation follow the ASN.1 notation :\n * RSAPrivateKey ::= SEQUENCE {\n * version Version,\n * modulus INTEGER, -- n\n * publicExponent INTEGER, -- e\n * privateExponent INTEGER, -- d\n * prime1 INTEGER, -- p\n * prime2 INTEGER, -- q\n * exponent1 INTEGER, -- d mod (p1)\n * exponent2 INTEGER, -- d mod (q-1)\n * coefficient INTEGER, -- (inverse of q) mod p\n * }\n * @returns {string} DER Encoded String representing the rsa private key\n * @private\n */\n JSEncryptRSAKey.prototype.getPrivateBaseKey = function () {\n var options = {\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: 0 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.n }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: this.e }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.d }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.p }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.q }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.dmp1 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.dmq1 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.coeff }),\n ],\n };\n var seq = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence(options);\n return seq.getEncodedHex();\n };\n /**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPrivateBaseKeyB64 = function () {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getPrivateBaseKey());\n };\n /**\n * Translate rsa parameters in a hex encoded string representing the rsa public key.\n * The representation follow the ASN.1 notation :\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * @returns {string} DER Encoded String representing the rsa public key\n * @private\n */\n JSEncryptRSAKey.prototype.getPublicBaseKey = function () {\n var first_sequence = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERObjectIdentifier({ oid: \"1.2.840.113549.1.1.1\" }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERNull(),\n ],\n });\n var second_sequence = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.n }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: this.e }),\n ],\n });\n var bit_string = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERBitString({\n hex: \"00\" + second_sequence.getEncodedHex(),\n });\n var seq = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [first_sequence, bit_string],\n });\n return seq.getEncodedHex();\n };\n /**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPublicBaseKeyB64 = function () {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getPublicBaseKey());\n };\n /**\n * wrap the string in block of width chars. The default value for rsa keys is 64\n * characters.\n * @param {string} str the pem encoded string without header and footer\n * @param {Number} [width=64] - the length the string has to be wrapped at\n * @returns {string}\n * @private\n */\n JSEncryptRSAKey.wordwrap = function (str, width) {\n width = width || 64;\n if (!str) {\n return str;\n }\n var regex = \"(.{1,\" + width + \"})( +|$\\n?)|(.{1,\" + width + \"})\";\n return str.match(RegExp(regex, \"g\")).join(\"\\n\");\n };\n /**\n * Retrieve the pem encoded private key\n * @returns {string} the pem encoded private key with header/footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPrivateKey = function () {\n var key = \"-----BEGIN RSA PRIVATE KEY-----\\n\";\n key += JSEncryptRSAKey.wordwrap(this.getPrivateBaseKeyB64()) + \"\\n\";\n key += \"-----END RSA PRIVATE KEY-----\";\n return key;\n };\n /**\n * Retrieve the pem encoded public key\n * @returns {string} the pem encoded public key with header/footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPublicKey = function () {\n var key = \"-----BEGIN PUBLIC KEY-----\\n\";\n key += JSEncryptRSAKey.wordwrap(this.getPublicBaseKeyB64()) + \"\\n\";\n key += \"-----END PUBLIC KEY-----\";\n return key;\n };\n /**\n * Check if the object contains the necessary parameters to populate the rsa modulus\n * and public exponent parameters.\n * @param {Object} [obj={}] - An object that may contain the two public key\n * parameters\n * @returns {boolean} true if the object contains both the modulus and the public exponent\n * properties (n and e)\n * @todo check for types of n and e. N should be a parseable bigInt object, E should\n * be a parseable integer number\n * @private\n */\n JSEncryptRSAKey.hasPublicKeyProperty = function (obj) {\n obj = obj || {};\n return obj.hasOwnProperty(\"n\") && obj.hasOwnProperty(\"e\");\n };\n /**\n * Check if the object contains ALL the parameters of an RSA key.\n * @param {Object} [obj={}] - An object that may contain nine rsa key\n * parameters\n * @returns {boolean} true if the object contains all the parameters needed\n * @todo check for types of the parameters all the parameters but the public exponent\n * should be parseable bigint objects, the public exponent should be a parseable integer number\n * @private\n */\n JSEncryptRSAKey.hasPrivateKeyProperty = function (obj) {\n obj = obj || {};\n return (obj.hasOwnProperty(\"n\") &&\n obj.hasOwnProperty(\"e\") &&\n obj.hasOwnProperty(\"d\") &&\n obj.hasOwnProperty(\"p\") &&\n obj.hasOwnProperty(\"q\") &&\n obj.hasOwnProperty(\"dmp1\") &&\n obj.hasOwnProperty(\"dmq1\") &&\n obj.hasOwnProperty(\"coeff\"));\n };\n /**\n * Parse the properties of obj in the current rsa object. Obj should AT LEAST\n * include the modulus and public exponent (n, e) parameters.\n * @param {Object} obj - the object containing rsa parameters\n * @private\n */\n JSEncryptRSAKey.prototype.parsePropertiesFrom = function (obj) {\n this.n = obj.n;\n this.e = obj.e;\n if (obj.hasOwnProperty(\"d\")) {\n this.d = obj.d;\n this.p = obj.p;\n this.q = obj.q;\n this.dmp1 = obj.dmp1;\n this.dmq1 = obj.dmq1;\n this.coeff = obj.coeff;\n }\n };\n return JSEncryptRSAKey;\n}(_lib_jsbn_rsa__WEBPACK_IMPORTED_MODULE_4__.RSAKey));\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/JSEncryptRSAKey.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/index.js":
+ /*!**********************!*\
+ !*** ./lib/index.js ***!
+ \**********************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncrypt\": () => (/* reexport safe */ _JSEncrypt__WEBPACK_IMPORTED_MODULE_0__.JSEncrypt),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _JSEncrypt__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./JSEncrypt */ \"./lib/JSEncrypt.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_JSEncrypt__WEBPACK_IMPORTED_MODULE_0__.JSEncrypt);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/index.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/asn1js/asn1.js":
+ /*!********************************!*\
+ !*** ./lib/lib/asn1js/asn1.js ***!
+ \********************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ASN1\": () => (/* binding */ ASN1),\n/* harmony export */ \"ASN1Tag\": () => (/* binding */ ASN1Tag),\n/* harmony export */ \"Stream\": () => (/* binding */ Stream)\n/* harmony export */ });\n/* harmony import */ var _int10__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./int10 */ \"./lib/lib/asn1js/int10.js\");\n// ASN.1 JavaScript decoder\n// Copyright (c) 2008-2014 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\n/*global oids */\n\nvar ellipsis = \"\\u2026\";\nvar reTimeS = /^(\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/;\nvar reTimeL = /^(\\d\\d\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/;\nfunction stringCut(str, len) {\n if (str.length > len) {\n str = str.substring(0, len) + ellipsis;\n }\n return str;\n}\nvar Stream = /** @class */ (function () {\n function Stream(enc, pos) {\n this.hexDigits = \"0123456789ABCDEF\";\n if (enc instanceof Stream) {\n this.enc = enc.enc;\n this.pos = enc.pos;\n }\n else {\n // enc should be an array or a binary string\n this.enc = enc;\n this.pos = pos;\n }\n }\n Stream.prototype.get = function (pos) {\n if (pos === undefined) {\n pos = this.pos++;\n }\n if (pos >= this.enc.length) {\n throw new Error(\"Requesting byte offset \".concat(pos, \" on a stream of length \").concat(this.enc.length));\n }\n return (\"string\" === typeof this.enc) ? this.enc.charCodeAt(pos) : this.enc[pos];\n };\n Stream.prototype.hexByte = function (b) {\n return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF);\n };\n Stream.prototype.hexDump = function (start, end, raw) {\n var s = \"\";\n for (var i = start; i < end; ++i) {\n s += this.hexByte(this.get(i));\n if (raw !== true) {\n switch (i & 0xF) {\n case 0x7:\n s += \" \";\n break;\n case 0xF:\n s += \"\\n\";\n break;\n default:\n s += \" \";\n }\n }\n }\n return s;\n };\n Stream.prototype.isASCII = function (start, end) {\n for (var i = start; i < end; ++i) {\n var c = this.get(i);\n if (c < 32 || c > 176) {\n return false;\n }\n }\n return true;\n };\n Stream.prototype.parseStringISO = function (start, end) {\n var s = \"\";\n for (var i = start; i < end; ++i) {\n s += String.fromCharCode(this.get(i));\n }\n return s;\n };\n Stream.prototype.parseStringUTF = function (start, end) {\n var s = \"\";\n for (var i = start; i < end;) {\n var c = this.get(i++);\n if (c < 128) {\n s += String.fromCharCode(c);\n }\n else if ((c > 191) && (c < 224)) {\n s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F));\n }\n else {\n s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F));\n }\n }\n return s;\n };\n Stream.prototype.parseStringBMP = function (start, end) {\n var str = \"\";\n var hi;\n var lo;\n for (var i = start; i < end;) {\n hi = this.get(i++);\n lo = this.get(i++);\n str += String.fromCharCode((hi << 8) | lo);\n }\n return str;\n };\n Stream.prototype.parseTime = function (start, end, shortYear) {\n var s = this.parseStringISO(start, end);\n var m = (shortYear ? reTimeS : reTimeL).exec(s);\n if (!m) {\n return \"Unrecognized time: \" + s;\n }\n if (shortYear) {\n // to avoid querying the timer, use the fixed range [1970, 2069]\n // it will conform with ITU X.400 [-10, +40] sliding window until 2030\n m[1] = +m[1];\n m[1] += (+m[1] < 70) ? 2000 : 1900;\n }\n s = m[1] + \"-\" + m[2] + \"-\" + m[3] + \" \" + m[4];\n if (m[5]) {\n s += \":\" + m[5];\n if (m[6]) {\n s += \":\" + m[6];\n if (m[7]) {\n s += \".\" + m[7];\n }\n }\n }\n if (m[8]) {\n s += \" UTC\";\n if (m[8] != \"Z\") {\n s += m[8];\n if (m[9]) {\n s += \":\" + m[9];\n }\n }\n }\n return s;\n };\n Stream.prototype.parseInteger = function (start, end) {\n var v = this.get(start);\n var neg = (v > 127);\n var pad = neg ? 255 : 0;\n var len;\n var s = \"\";\n // skip unuseful bits (not allowed in DER)\n while (v == pad && ++start < end) {\n v = this.get(start);\n }\n len = end - start;\n if (len === 0) {\n return neg ? -1 : 0;\n }\n // show bit length of huge integers\n if (len > 4) {\n s = v;\n len <<= 3;\n while (((+s ^ pad) & 0x80) == 0) {\n s = +s << 1;\n --len;\n }\n s = \"(\" + len + \" bit)\\n\";\n }\n // decode the integer\n if (neg) {\n v = v - 256;\n }\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10(v);\n for (var i = start + 1; i < end; ++i) {\n n.mulAdd(256, this.get(i));\n }\n return s + n.toString();\n };\n Stream.prototype.parseBitString = function (start, end, maxLength) {\n var unusedBit = this.get(start);\n var lenBit = ((end - start - 1) << 3) - unusedBit;\n var intro = \"(\" + lenBit + \" bit)\\n\";\n var s = \"\";\n for (var i = start + 1; i < end; ++i) {\n var b = this.get(i);\n var skip = (i == end - 1) ? unusedBit : 0;\n for (var j = 7; j >= skip; --j) {\n s += (b >> j) & 1 ? \"1\" : \"0\";\n }\n if (s.length > maxLength) {\n return intro + stringCut(s, maxLength);\n }\n }\n return intro + s;\n };\n Stream.prototype.parseOctetString = function (start, end, maxLength) {\n if (this.isASCII(start, end)) {\n return stringCut(this.parseStringISO(start, end), maxLength);\n }\n var len = end - start;\n var s = \"(\" + len + \" byte)\\n\";\n maxLength /= 2; // we work in bytes\n if (len > maxLength) {\n end = start + maxLength;\n }\n for (var i = start; i < end; ++i) {\n s += this.hexByte(this.get(i));\n }\n if (len > maxLength) {\n s += ellipsis;\n }\n return s;\n };\n Stream.prototype.parseOID = function (start, end, maxLength) {\n var s = \"\";\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n var bits = 0;\n for (var i = start; i < end; ++i) {\n var v = this.get(i);\n n.mulAdd(128, v & 0x7F);\n bits += 7;\n if (!(v & 0x80)) { // finished\n if (s === \"\") {\n n = n.simplify();\n if (n instanceof _int10__WEBPACK_IMPORTED_MODULE_0__.Int10) {\n n.sub(80);\n s = \"2.\" + n.toString();\n }\n else {\n var m = n < 80 ? n < 40 ? 0 : 1 : 2;\n s = m + \".\" + (n - m * 40);\n }\n }\n else {\n s += \".\" + n.toString();\n }\n if (s.length > maxLength) {\n return stringCut(s, maxLength);\n }\n n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n bits = 0;\n }\n }\n if (bits > 0) {\n s += \".incomplete\";\n }\n return s;\n };\n return Stream;\n}());\n\nvar ASN1 = /** @class */ (function () {\n function ASN1(stream, header, length, tag, sub) {\n if (!(tag instanceof ASN1Tag)) {\n throw new Error(\"Invalid tag value.\");\n }\n this.stream = stream;\n this.header = header;\n this.length = length;\n this.tag = tag;\n this.sub = sub;\n }\n ASN1.prototype.typeName = function () {\n switch (this.tag.tagClass) {\n case 0: // universal\n switch (this.tag.tagNumber) {\n case 0x00:\n return \"EOC\";\n case 0x01:\n return \"BOOLEAN\";\n case 0x02:\n return \"INTEGER\";\n case 0x03:\n return \"BIT_STRING\";\n case 0x04:\n return \"OCTET_STRING\";\n case 0x05:\n return \"NULL\";\n case 0x06:\n return \"OBJECT_IDENTIFIER\";\n case 0x07:\n return \"ObjectDescriptor\";\n case 0x08:\n return \"EXTERNAL\";\n case 0x09:\n return \"REAL\";\n case 0x0A:\n return \"ENUMERATED\";\n case 0x0B:\n return \"EMBEDDED_PDV\";\n case 0x0C:\n return \"UTF8String\";\n case 0x10:\n return \"SEQUENCE\";\n case 0x11:\n return \"SET\";\n case 0x12:\n return \"NumericString\";\n case 0x13:\n return \"PrintableString\"; // ASCII subset\n case 0x14:\n return \"TeletexString\"; // aka T61String\n case 0x15:\n return \"VideotexString\";\n case 0x16:\n return \"IA5String\"; // ASCII\n case 0x17:\n return \"UTCTime\";\n case 0x18:\n return \"GeneralizedTime\";\n case 0x19:\n return \"GraphicString\";\n case 0x1A:\n return \"VisibleString\"; // ASCII subset\n case 0x1B:\n return \"GeneralString\";\n case 0x1C:\n return \"UniversalString\";\n case 0x1E:\n return \"BMPString\";\n }\n return \"Universal_\" + this.tag.tagNumber.toString();\n case 1:\n return \"Application_\" + this.tag.tagNumber.toString();\n case 2:\n return \"[\" + this.tag.tagNumber.toString() + \"]\"; // Context\n case 3:\n return \"Private_\" + this.tag.tagNumber.toString();\n }\n };\n ASN1.prototype.content = function (maxLength) {\n if (this.tag === undefined) {\n return null;\n }\n if (maxLength === undefined) {\n maxLength = Infinity;\n }\n var content = this.posContent();\n var len = Math.abs(this.length);\n if (!this.tag.isUniversal()) {\n if (this.sub !== null) {\n return \"(\" + this.sub.length + \" elem)\";\n }\n return this.stream.parseOctetString(content, content + len, maxLength);\n }\n switch (this.tag.tagNumber) {\n case 0x01: // BOOLEAN\n return (this.stream.get(content) === 0) ? \"false\" : \"true\";\n case 0x02: // INTEGER\n return this.stream.parseInteger(content, content + len);\n case 0x03: // BIT_STRING\n return this.sub ? \"(\" + this.sub.length + \" elem)\" :\n this.stream.parseBitString(content, content + len, maxLength);\n case 0x04: // OCTET_STRING\n return this.sub ? \"(\" + this.sub.length + \" elem)\" :\n this.stream.parseOctetString(content, content + len, maxLength);\n // case 0x05: // NULL\n case 0x06: // OBJECT_IDENTIFIER\n return this.stream.parseOID(content, content + len, maxLength);\n // case 0x07: // ObjectDescriptor\n // case 0x08: // EXTERNAL\n // case 0x09: // REAL\n // case 0x0A: // ENUMERATED\n // case 0x0B: // EMBEDDED_PDV\n case 0x10: // SEQUENCE\n case 0x11: // SET\n if (this.sub !== null) {\n return \"(\" + this.sub.length + \" elem)\";\n }\n else {\n return \"(no elem)\";\n }\n case 0x0C: // UTF8String\n return stringCut(this.stream.parseStringUTF(content, content + len), maxLength);\n case 0x12: // NumericString\n case 0x13: // PrintableString\n case 0x14: // TeletexString\n case 0x15: // VideotexString\n case 0x16: // IA5String\n // case 0x19: // GraphicString\n case 0x1A: // VisibleString\n // case 0x1B: // GeneralString\n // case 0x1C: // UniversalString\n return stringCut(this.stream.parseStringISO(content, content + len), maxLength);\n case 0x1E: // BMPString\n return stringCut(this.stream.parseStringBMP(content, content + len), maxLength);\n case 0x17: // UTCTime\n case 0x18: // GeneralizedTime\n return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17));\n }\n return null;\n };\n ASN1.prototype.toString = function () {\n return this.typeName() + \"@\" + this.stream.pos + \"[header:\" + this.header + \",length:\" + this.length + \",sub:\" + ((this.sub === null) ? \"null\" : this.sub.length) + \"]\";\n };\n ASN1.prototype.toPrettyString = function (indent) {\n if (indent === undefined) {\n indent = \"\";\n }\n var s = indent + this.typeName() + \" @\" + this.stream.pos;\n if (this.length >= 0) {\n s += \"+\";\n }\n s += this.length;\n if (this.tag.tagConstructed) {\n s += \" (constructed)\";\n }\n else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) {\n s += \" (encapsulates)\";\n }\n s += \"\\n\";\n if (this.sub !== null) {\n indent += \" \";\n for (var i = 0, max = this.sub.length; i < max; ++i) {\n s += this.sub[i].toPrettyString(indent);\n }\n }\n return s;\n };\n ASN1.prototype.posStart = function () {\n return this.stream.pos;\n };\n ASN1.prototype.posContent = function () {\n return this.stream.pos + this.header;\n };\n ASN1.prototype.posEnd = function () {\n return this.stream.pos + this.header + Math.abs(this.length);\n };\n ASN1.prototype.toHexString = function () {\n return this.stream.hexDump(this.posStart(), this.posEnd(), true);\n };\n ASN1.decodeLength = function (stream) {\n var buf = stream.get();\n var len = buf & 0x7F;\n if (len == buf) {\n return len;\n }\n // no reason to use Int10, as it would be a huge buffer anyways\n if (len > 6) {\n throw new Error(\"Length over 48 bits not supported at position \" + (stream.pos - 1));\n }\n if (len === 0) {\n return null;\n } // undefined\n buf = 0;\n for (var i = 0; i < len; ++i) {\n buf = (buf * 256) + stream.get();\n }\n return buf;\n };\n /**\n * Retrieve the hexadecimal value (as a string) of the current ASN.1 element\n * @returns {string}\n * @public\n */\n ASN1.prototype.getHexStringValue = function () {\n var hexString = this.toHexString();\n var offset = this.header * 2;\n var length = this.length * 2;\n return hexString.substr(offset, length);\n };\n ASN1.decode = function (str) {\n var stream;\n if (!(str instanceof Stream)) {\n stream = new Stream(str, 0);\n }\n else {\n stream = str;\n }\n var streamStart = new Stream(stream);\n var tag = new ASN1Tag(stream);\n var len = ASN1.decodeLength(stream);\n var start = stream.pos;\n var header = start - streamStart.pos;\n var sub = null;\n var getSub = function () {\n var ret = [];\n if (len !== null) {\n // definite length\n var end = start + len;\n while (stream.pos < end) {\n ret[ret.length] = ASN1.decode(stream);\n }\n if (stream.pos != end) {\n throw new Error(\"Content size is not correct for container starting at offset \" + start);\n }\n }\n else {\n // undefined length\n try {\n for (;;) {\n var s = ASN1.decode(stream);\n if (s.tag.isEOC()) {\n break;\n }\n ret[ret.length] = s;\n }\n len = start - stream.pos; // undefined lengths are represented as negative values\n }\n catch (e) {\n throw new Error(\"Exception while decoding undefined length content: \" + e);\n }\n }\n return ret;\n };\n if (tag.tagConstructed) {\n // must have valid content\n sub = getSub();\n }\n else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) {\n // sometimes BitString and OctetString are used to encapsulate ASN.1\n try {\n if (tag.tagNumber == 0x03) {\n if (stream.get() != 0) {\n throw new Error(\"BIT STRINGs with unused bits cannot encapsulate.\");\n }\n }\n sub = getSub();\n for (var i = 0; i < sub.length; ++i) {\n if (sub[i].tag.isEOC()) {\n throw new Error(\"EOC is not supposed to be actual content.\");\n }\n }\n }\n catch (e) {\n // but silently ignore when they don't\n sub = null;\n }\n }\n if (sub === null) {\n if (len === null) {\n throw new Error(\"We can't skip over an invalid tag with undefined length at offset \" + start);\n }\n stream.pos = start + Math.abs(len);\n }\n return new ASN1(streamStart, header, len, tag, sub);\n };\n return ASN1;\n}());\n\nvar ASN1Tag = /** @class */ (function () {\n function ASN1Tag(stream) {\n var buf = stream.get();\n this.tagClass = buf >> 6;\n this.tagConstructed = ((buf & 0x20) !== 0);\n this.tagNumber = buf & 0x1F;\n if (this.tagNumber == 0x1F) { // long tag\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n do {\n buf = stream.get();\n n.mulAdd(128, buf & 0x7F);\n } while (buf & 0x80);\n this.tagNumber = n.simplify();\n }\n }\n ASN1Tag.prototype.isUniversal = function () {\n return this.tagClass === 0x00;\n };\n ASN1Tag.prototype.isEOC = function () {\n return this.tagClass === 0x00 && this.tagNumber === 0x00;\n };\n return ASN1Tag;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/asn1.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/asn1js/base64.js":
+ /*!**********************************!*\
+ !*** ./lib/lib/asn1js/base64.js ***!
+ \**********************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Base64\": () => (/* binding */ Base64)\n/* harmony export */ });\n// Base64 JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar decoder;\nvar Base64 = {\n decode: function (a) {\n var i;\n if (decoder === undefined) {\n var b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n var ignore = \"= \\f\\n\\r\\t\\u00A0\\u2028\\u2029\";\n decoder = Object.create(null);\n for (i = 0; i < 64; ++i) {\n decoder[b64.charAt(i)] = i;\n }\n decoder['-'] = 62; //+\n decoder['_'] = 63; //-\n for (i = 0; i < ignore.length; ++i) {\n decoder[ignore.charAt(i)] = -1;\n }\n }\n var out = [];\n var bits = 0;\n var char_count = 0;\n for (i = 0; i < a.length; ++i) {\n var c = a.charAt(i);\n if (c == \"=\") {\n break;\n }\n c = decoder[c];\n if (c == -1) {\n continue;\n }\n if (c === undefined) {\n throw new Error(\"Illegal character at offset \" + i);\n }\n bits |= c;\n if (++char_count >= 4) {\n out[out.length] = (bits >> 16);\n out[out.length] = (bits >> 8) & 0xFF;\n out[out.length] = bits & 0xFF;\n bits = 0;\n char_count = 0;\n }\n else {\n bits <<= 6;\n }\n }\n switch (char_count) {\n case 1:\n throw new Error(\"Base64 encoding incomplete: at least 2 bits missing\");\n case 2:\n out[out.length] = (bits >> 10);\n break;\n case 3:\n out[out.length] = (bits >> 16);\n out[out.length] = (bits >> 8) & 0xFF;\n break;\n }\n return out;\n },\n re: /-----BEGIN [^-]+-----([A-Za-z0-9+\\/=\\s]+)-----END [^-]+-----|begin-base64[^\\n]+\\n([A-Za-z0-9+\\/=\\s]+)====/,\n unarmor: function (a) {\n var m = Base64.re.exec(a);\n if (m) {\n if (m[1]) {\n a = m[1];\n }\n else if (m[2]) {\n a = m[2];\n }\n else {\n throw new Error(\"RegExp out of sync\");\n }\n }\n return Base64.decode(a);\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/base64.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/asn1js/hex.js":
+ /*!*******************************!*\
+ !*** ./lib/lib/asn1js/hex.js ***!
+ \*******************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Hex\": () => (/* binding */ Hex)\n/* harmony export */ });\n// Hex JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar decoder;\nvar Hex = {\n decode: function (a) {\n var i;\n if (decoder === undefined) {\n var hex = \"0123456789ABCDEF\";\n var ignore = \" \\f\\n\\r\\t\\u00A0\\u2028\\u2029\";\n decoder = {};\n for (i = 0; i < 16; ++i) {\n decoder[hex.charAt(i)] = i;\n }\n hex = hex.toLowerCase();\n for (i = 10; i < 16; ++i) {\n decoder[hex.charAt(i)] = i;\n }\n for (i = 0; i < ignore.length; ++i) {\n decoder[ignore.charAt(i)] = -1;\n }\n }\n var out = [];\n var bits = 0;\n var char_count = 0;\n for (i = 0; i < a.length; ++i) {\n var c = a.charAt(i);\n if (c == \"=\") {\n break;\n }\n c = decoder[c];\n if (c == -1) {\n continue;\n }\n if (c === undefined) {\n throw new Error(\"Illegal character at offset \" + i);\n }\n bits |= c;\n if (++char_count >= 2) {\n out[out.length] = bits;\n bits = 0;\n char_count = 0;\n }\n else {\n bits <<= 4;\n }\n }\n if (char_count) {\n throw new Error(\"Hex encoding incomplete: 4 bits missing\");\n }\n return out;\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/hex.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/asn1js/int10.js":
+ /*!*********************************!*\
+ !*** ./lib/lib/asn1js/int10.js ***!
+ \*********************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Int10\": () => (/* binding */ Int10)\n/* harmony export */ });\n// Big integer base-10 printing library\n// Copyright (c) 2014 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar max = 10000000000000; // biggest integer that can still fit 2^53 when multiplied by 256\nvar Int10 = /** @class */ (function () {\n function Int10(value) {\n this.buf = [+value || 0];\n }\n Int10.prototype.mulAdd = function (m, c) {\n // assert(m <= 256)\n var b = this.buf;\n var l = b.length;\n var i;\n var t;\n for (i = 0; i < l; ++i) {\n t = b[i] * m + c;\n if (t < max) {\n c = 0;\n }\n else {\n c = 0 | (t / max);\n t -= c * max;\n }\n b[i] = t;\n }\n if (c > 0) {\n b[i] = c;\n }\n };\n Int10.prototype.sub = function (c) {\n // assert(m <= 256)\n var b = this.buf;\n var l = b.length;\n var i;\n var t;\n for (i = 0; i < l; ++i) {\n t = b[i] - c;\n if (t < 0) {\n t += max;\n c = 1;\n }\n else {\n c = 0;\n }\n b[i] = t;\n }\n while (b[b.length - 1] === 0) {\n b.pop();\n }\n };\n Int10.prototype.toString = function (base) {\n if ((base || 10) != 10) {\n throw new Error(\"only base 10 is supported\");\n }\n var b = this.buf;\n var s = b[b.length - 1].toString();\n for (var i = b.length - 2; i >= 0; --i) {\n s += (max + b[i]).toString().substring(1);\n }\n return s;\n };\n Int10.prototype.valueOf = function () {\n var b = this.buf;\n var v = 0;\n for (var i = b.length - 1; i >= 0; --i) {\n v = v * max + b[i];\n }\n return v;\n };\n Int10.prototype.simplify = function () {\n var b = this.buf;\n return (b.length == 1) ? b[0] : this;\n };\n return Int10;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/int10.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/jsbn/base64.js":
+ /*!********************************!*\
+ !*** ./lib/lib/jsbn/base64.js ***!
+ \********************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"b64toBA\": () => (/* binding */ b64toBA),\n/* harmony export */ \"b64tohex\": () => (/* binding */ b64tohex),\n/* harmony export */ \"hex2b64\": () => (/* binding */ hex2b64)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./lib/lib/jsbn/util.js\");\n\nvar b64map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar b64pad = \"=\";\nfunction hex2b64(h) {\n var i;\n var c;\n var ret = \"\";\n for (i = 0; i + 3 <= h.length; i += 3) {\n c = parseInt(h.substring(i, i + 3), 16);\n ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63);\n }\n if (i + 1 == h.length) {\n c = parseInt(h.substring(i, i + 1), 16);\n ret += b64map.charAt(c << 2);\n }\n else if (i + 2 == h.length) {\n c = parseInt(h.substring(i, i + 2), 16);\n ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);\n }\n while ((ret.length & 3) > 0) {\n ret += b64pad;\n }\n return ret;\n}\n// convert a base64 string to hex\nfunction b64tohex(s) {\n var ret = \"\";\n var i;\n var k = 0; // b64 state, 0-3\n var slop = 0;\n for (i = 0; i < s.length; ++i) {\n if (s.charAt(i) == b64pad) {\n break;\n }\n var v = b64map.indexOf(s.charAt(i));\n if (v < 0) {\n continue;\n }\n if (k == 0) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v >> 2);\n slop = v & 3;\n k = 1;\n }\n else if (k == 1) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)((slop << 2) | (v >> 4));\n slop = v & 0xf;\n k = 2;\n }\n else if (k == 2) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(slop);\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v >> 2);\n slop = v & 3;\n k = 3;\n }\n else {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)((slop << 2) | (v >> 4));\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v & 0xf);\n k = 0;\n }\n }\n if (k == 1) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(slop << 2);\n }\n return ret;\n}\n// convert a base64 string to a byte/number array\nfunction b64toBA(s) {\n // piggyback on b64tohex for now, optimize later\n var h = b64tohex(s);\n var i;\n var a = [];\n for (i = 0; 2 * i < h.length; ++i) {\n a[i] = parseInt(h.substring(2 * i, 2 * i + 2), 16);\n }\n return a;\n}\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/base64.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/jsbn/jsbn.js":
+ /*!******************************!*\
+ !*** ./lib/lib/jsbn/jsbn.js ***!
+ \******************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BigInteger\": () => (/* binding */ BigInteger),\n/* harmony export */ \"intAt\": () => (/* binding */ intAt),\n/* harmony export */ \"nbi\": () => (/* binding */ nbi),\n/* harmony export */ \"nbits\": () => (/* binding */ nbits),\n/* harmony export */ \"nbv\": () => (/* binding */ nbv),\n/* harmony export */ \"parseBigInt\": () => (/* binding */ parseBigInt)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./lib/lib/jsbn/util.js\");\n// Copyright (c) 2005 Tom Wu\n// All Rights Reserved.\n// See \"LICENSE\" for details.\n// Basic JavaScript BN library - subset useful for RSA encryption.\n\n// Bits per digit\nvar dbits;\n// JavaScript engine analysis\nvar canary = 0xdeadbeefcafe;\nvar j_lm = ((canary & 0xffffff) == 0xefcafe);\n//#region\nvar lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997];\nvar lplim = (1 << 26) / lowprimes[lowprimes.length - 1];\n//#endregion\n// (public) Constructor\nvar BigInteger = /** @class */ (function () {\n function BigInteger(a, b, c) {\n if (a != null) {\n if (\"number\" == typeof a) {\n this.fromNumber(a, b, c);\n }\n else if (b == null && \"string\" != typeof a) {\n this.fromString(a, 256);\n }\n else {\n this.fromString(a, b);\n }\n }\n }\n //#region PUBLIC\n // BigInteger.prototype.toString = bnToString;\n // (public) return string representation in given radix\n BigInteger.prototype.toString = function (b) {\n if (this.s < 0) {\n return \"-\" + this.negate().toString(b);\n }\n var k;\n if (b == 16) {\n k = 4;\n }\n else if (b == 8) {\n k = 3;\n }\n else if (b == 2) {\n k = 1;\n }\n else if (b == 32) {\n k = 5;\n }\n else if (b == 4) {\n k = 2;\n }\n else {\n return this.toRadix(b);\n }\n var km = (1 << k) - 1;\n var d;\n var m = false;\n var r = \"\";\n var i = this.t;\n var p = this.DB - (i * this.DB) % k;\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) > 0) {\n m = true;\n r = (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(d);\n }\n while (i >= 0) {\n if (p < k) {\n d = (this[i] & ((1 << p) - 1)) << (k - p);\n d |= this[--i] >> (p += this.DB - k);\n }\n else {\n d = (this[i] >> (p -= k)) & km;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if (d > 0) {\n m = true;\n }\n if (m) {\n r += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(d);\n }\n }\n }\n return m ? r : \"0\";\n };\n // BigInteger.prototype.negate = bnNegate;\n // (public) -this\n BigInteger.prototype.negate = function () {\n var r = nbi();\n BigInteger.ZERO.subTo(this, r);\n return r;\n };\n // BigInteger.prototype.abs = bnAbs;\n // (public) |this|\n BigInteger.prototype.abs = function () {\n return (this.s < 0) ? this.negate() : this;\n };\n // BigInteger.prototype.compareTo = bnCompareTo;\n // (public) return + if this > a, - if this < a, 0 if equal\n BigInteger.prototype.compareTo = function (a) {\n var r = this.s - a.s;\n if (r != 0) {\n return r;\n }\n var i = this.t;\n r = i - a.t;\n if (r != 0) {\n return (this.s < 0) ? -r : r;\n }\n while (--i >= 0) {\n if ((r = this[i] - a[i]) != 0) {\n return r;\n }\n }\n return 0;\n };\n // BigInteger.prototype.bitLength = bnBitLength;\n // (public) return the number of bits in \"this\"\n BigInteger.prototype.bitLength = function () {\n if (this.t <= 0) {\n return 0;\n }\n return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));\n };\n // BigInteger.prototype.mod = bnMod;\n // (public) this mod a\n BigInteger.prototype.mod = function (a) {\n var r = nbi();\n this.abs().divRemTo(a, null, r);\n if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {\n a.subTo(r, r);\n }\n return r;\n };\n // BigInteger.prototype.modPowInt = bnModPowInt;\n // (public) this^e % m, 0 <= e < 2^32\n BigInteger.prototype.modPowInt = function (e, m) {\n var z;\n if (e < 256 || m.isEven()) {\n z = new Classic(m);\n }\n else {\n z = new Montgomery(m);\n }\n return this.exp(e, z);\n };\n // BigInteger.prototype.clone = bnClone;\n // (public)\n BigInteger.prototype.clone = function () {\n var r = nbi();\n this.copyTo(r);\n return r;\n };\n // BigInteger.prototype.intValue = bnIntValue;\n // (public) return value as integer\n BigInteger.prototype.intValue = function () {\n if (this.s < 0) {\n if (this.t == 1) {\n return this[0] - this.DV;\n }\n else if (this.t == 0) {\n return -1;\n }\n }\n else if (this.t == 1) {\n return this[0];\n }\n else if (this.t == 0) {\n return 0;\n }\n // assumes 16 < DB < 32\n return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0];\n };\n // BigInteger.prototype.byteValue = bnByteValue;\n // (public) return value as byte\n BigInteger.prototype.byteValue = function () {\n return (this.t == 0) ? this.s : (this[0] << 24) >> 24;\n };\n // BigInteger.prototype.shortValue = bnShortValue;\n // (public) return value as short (assumes DB>=16)\n BigInteger.prototype.shortValue = function () {\n return (this.t == 0) ? this.s : (this[0] << 16) >> 16;\n };\n // BigInteger.prototype.signum = bnSigNum;\n // (public) 0 if this == 0, 1 if this > 0\n BigInteger.prototype.signum = function () {\n if (this.s < 0) {\n return -1;\n }\n else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) {\n return 0;\n }\n else {\n return 1;\n }\n };\n // BigInteger.prototype.toByteArray = bnToByteArray;\n // (public) convert to bigendian byte array\n BigInteger.prototype.toByteArray = function () {\n var i = this.t;\n var r = [];\n r[0] = this.s;\n var p = this.DB - (i * this.DB) % 8;\n var d;\n var k = 0;\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) {\n r[k++] = d | (this.s << (this.DB - p));\n }\n while (i >= 0) {\n if (p < 8) {\n d = (this[i] & ((1 << p) - 1)) << (8 - p);\n d |= this[--i] >> (p += this.DB - 8);\n }\n else {\n d = (this[i] >> (p -= 8)) & 0xff;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if ((d & 0x80) != 0) {\n d |= -256;\n }\n if (k == 0 && (this.s & 0x80) != (d & 0x80)) {\n ++k;\n }\n if (k > 0 || d != this.s) {\n r[k++] = d;\n }\n }\n }\n return r;\n };\n // BigInteger.prototype.equals = bnEquals;\n BigInteger.prototype.equals = function (a) {\n return (this.compareTo(a) == 0);\n };\n // BigInteger.prototype.min = bnMin;\n BigInteger.prototype.min = function (a) {\n return (this.compareTo(a) < 0) ? this : a;\n };\n // BigInteger.prototype.max = bnMax;\n BigInteger.prototype.max = function (a) {\n return (this.compareTo(a) > 0) ? this : a;\n };\n // BigInteger.prototype.and = bnAnd;\n BigInteger.prototype.and = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_and, r);\n return r;\n };\n // BigInteger.prototype.or = bnOr;\n BigInteger.prototype.or = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_or, r);\n return r;\n };\n // BigInteger.prototype.xor = bnXor;\n BigInteger.prototype.xor = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_xor, r);\n return r;\n };\n // BigInteger.prototype.andNot = bnAndNot;\n BigInteger.prototype.andNot = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_andnot, r);\n return r;\n };\n // BigInteger.prototype.not = bnNot;\n // (public) ~this\n BigInteger.prototype.not = function () {\n var r = nbi();\n for (var i = 0; i < this.t; ++i) {\n r[i] = this.DM & ~this[i];\n }\n r.t = this.t;\n r.s = ~this.s;\n return r;\n };\n // BigInteger.prototype.shiftLeft = bnShiftLeft;\n // (public) this << n\n BigInteger.prototype.shiftLeft = function (n) {\n var r = nbi();\n if (n < 0) {\n this.rShiftTo(-n, r);\n }\n else {\n this.lShiftTo(n, r);\n }\n return r;\n };\n // BigInteger.prototype.shiftRight = bnShiftRight;\n // (public) this >> n\n BigInteger.prototype.shiftRight = function (n) {\n var r = nbi();\n if (n < 0) {\n this.lShiftTo(-n, r);\n }\n else {\n this.rShiftTo(n, r);\n }\n return r;\n };\n // BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\n // (public) returns index of lowest 1-bit (or -1 if none)\n BigInteger.prototype.getLowestSetBit = function () {\n for (var i = 0; i < this.t; ++i) {\n if (this[i] != 0) {\n return i * this.DB + (0,_util__WEBPACK_IMPORTED_MODULE_0__.lbit)(this[i]);\n }\n }\n if (this.s < 0) {\n return this.t * this.DB;\n }\n return -1;\n };\n // BigInteger.prototype.bitCount = bnBitCount;\n // (public) return number of set bits\n BigInteger.prototype.bitCount = function () {\n var r = 0;\n var x = this.s & this.DM;\n for (var i = 0; i < this.t; ++i) {\n r += (0,_util__WEBPACK_IMPORTED_MODULE_0__.cbit)(this[i] ^ x);\n }\n return r;\n };\n // BigInteger.prototype.testBit = bnTestBit;\n // (public) true iff nth bit is set\n BigInteger.prototype.testBit = function (n) {\n var j = Math.floor(n / this.DB);\n if (j >= this.t) {\n return (this.s != 0);\n }\n return ((this[j] & (1 << (n % this.DB))) != 0);\n };\n // BigInteger.prototype.setBit = bnSetBit;\n // (public) this | (1< 1) {\n var g2 = nbi();\n z.sqrTo(g[1], g2);\n while (n <= km) {\n g[n] = nbi();\n z.mulTo(g2, g[n - 2], g[n]);\n n += 2;\n }\n }\n var j = e.t - 1;\n var w;\n var is1 = true;\n var r2 = nbi();\n var t;\n i = nbits(e[j]) - 1;\n while (j >= 0) {\n if (i >= k1) {\n w = (e[j] >> (i - k1)) & km;\n }\n else {\n w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i);\n if (j > 0) {\n w |= e[j - 1] >> (this.DB + i - k1);\n }\n }\n n = k;\n while ((w & 1) == 0) {\n w >>= 1;\n --n;\n }\n if ((i -= n) < 0) {\n i += this.DB;\n --j;\n }\n if (is1) { // ret == 1, don't bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n }\n else {\n while (n > 1) {\n z.sqrTo(r, r2);\n z.sqrTo(r2, r);\n n -= 2;\n }\n if (n > 0) {\n z.sqrTo(r, r2);\n }\n else {\n t = r;\n r = r2;\n r2 = t;\n }\n z.mulTo(r2, g[w], r);\n }\n while (j >= 0 && (e[j] & (1 << i)) == 0) {\n z.sqrTo(r, r2);\n t = r;\n r = r2;\n r2 = t;\n if (--i < 0) {\n i = this.DB - 1;\n --j;\n }\n }\n }\n return z.revert(r);\n };\n // BigInteger.prototype.modInverse = bnModInverse;\n // (public) 1/this % m (HAC 14.61)\n BigInteger.prototype.modInverse = function (m) {\n var ac = m.isEven();\n if ((this.isEven() && ac) || m.signum() == 0) {\n return BigInteger.ZERO;\n }\n var u = m.clone();\n var v = this.clone();\n var a = nbv(1);\n var b = nbv(0);\n var c = nbv(0);\n var d = nbv(1);\n while (u.signum() != 0) {\n while (u.isEven()) {\n u.rShiftTo(1, u);\n if (ac) {\n if (!a.isEven() || !b.isEven()) {\n a.addTo(this, a);\n b.subTo(m, b);\n }\n a.rShiftTo(1, a);\n }\n else if (!b.isEven()) {\n b.subTo(m, b);\n }\n b.rShiftTo(1, b);\n }\n while (v.isEven()) {\n v.rShiftTo(1, v);\n if (ac) {\n if (!c.isEven() || !d.isEven()) {\n c.addTo(this, c);\n d.subTo(m, d);\n }\n c.rShiftTo(1, c);\n }\n else if (!d.isEven()) {\n d.subTo(m, d);\n }\n d.rShiftTo(1, d);\n }\n if (u.compareTo(v) >= 0) {\n u.subTo(v, u);\n if (ac) {\n a.subTo(c, a);\n }\n b.subTo(d, b);\n }\n else {\n v.subTo(u, v);\n if (ac) {\n c.subTo(a, c);\n }\n d.subTo(b, d);\n }\n }\n if (v.compareTo(BigInteger.ONE) != 0) {\n return BigInteger.ZERO;\n }\n if (d.compareTo(m) >= 0) {\n return d.subtract(m);\n }\n if (d.signum() < 0) {\n d.addTo(m, d);\n }\n else {\n return d;\n }\n if (d.signum() < 0) {\n return d.add(m);\n }\n else {\n return d;\n }\n };\n // BigInteger.prototype.pow = bnPow;\n // (public) this^e\n BigInteger.prototype.pow = function (e) {\n return this.exp(e, new NullExp());\n };\n // BigInteger.prototype.gcd = bnGCD;\n // (public) gcd(this,a) (HAC 14.54)\n BigInteger.prototype.gcd = function (a) {\n var x = (this.s < 0) ? this.negate() : this.clone();\n var y = (a.s < 0) ? a.negate() : a.clone();\n if (x.compareTo(y) < 0) {\n var t = x;\n x = y;\n y = t;\n }\n var i = x.getLowestSetBit();\n var g = y.getLowestSetBit();\n if (g < 0) {\n return x;\n }\n if (i < g) {\n g = i;\n }\n if (g > 0) {\n x.rShiftTo(g, x);\n y.rShiftTo(g, y);\n }\n while (x.signum() > 0) {\n if ((i = x.getLowestSetBit()) > 0) {\n x.rShiftTo(i, x);\n }\n if ((i = y.getLowestSetBit()) > 0) {\n y.rShiftTo(i, y);\n }\n if (x.compareTo(y) >= 0) {\n x.subTo(y, x);\n x.rShiftTo(1, x);\n }\n else {\n y.subTo(x, y);\n y.rShiftTo(1, y);\n }\n }\n if (g > 0) {\n y.lShiftTo(g, y);\n }\n return y;\n };\n // BigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n // (public) test primality with certainty >= 1-.5^t\n BigInteger.prototype.isProbablePrime = function (t) {\n var i;\n var x = this.abs();\n if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {\n for (i = 0; i < lowprimes.length; ++i) {\n if (x[0] == lowprimes[i]) {\n return true;\n }\n }\n return false;\n }\n if (x.isEven()) {\n return false;\n }\n i = 1;\n while (i < lowprimes.length) {\n var m = lowprimes[i];\n var j = i + 1;\n while (j < lowprimes.length && m < lplim) {\n m *= lowprimes[j++];\n }\n m = x.modInt(m);\n while (i < j) {\n if (m % lowprimes[i++] == 0) {\n return false;\n }\n }\n }\n return x.millerRabin(t);\n };\n //#endregion PUBLIC\n //#region PROTECTED\n // BigInteger.prototype.copyTo = bnpCopyTo;\n // (protected) copy this to r\n BigInteger.prototype.copyTo = function (r) {\n for (var i = this.t - 1; i >= 0; --i) {\n r[i] = this[i];\n }\n r.t = this.t;\n r.s = this.s;\n };\n // BigInteger.prototype.fromInt = bnpFromInt;\n // (protected) set from integer value x, -DV <= x < DV\n BigInteger.prototype.fromInt = function (x) {\n this.t = 1;\n this.s = (x < 0) ? -1 : 0;\n if (x > 0) {\n this[0] = x;\n }\n else if (x < -1) {\n this[0] = x + this.DV;\n }\n else {\n this.t = 0;\n }\n };\n // BigInteger.prototype.fromString = bnpFromString;\n // (protected) set from string and radix\n BigInteger.prototype.fromString = function (s, b) {\n var k;\n if (b == 16) {\n k = 4;\n }\n else if (b == 8) {\n k = 3;\n }\n else if (b == 256) {\n k = 8;\n /* byte array */\n }\n else if (b == 2) {\n k = 1;\n }\n else if (b == 32) {\n k = 5;\n }\n else if (b == 4) {\n k = 2;\n }\n else {\n this.fromRadix(s, b);\n return;\n }\n this.t = 0;\n this.s = 0;\n var i = s.length;\n var mi = false;\n var sh = 0;\n while (--i >= 0) {\n var x = (k == 8) ? (+s[i]) & 0xff : intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\") {\n mi = true;\n }\n continue;\n }\n mi = false;\n if (sh == 0) {\n this[this.t++] = x;\n }\n else if (sh + k > this.DB) {\n this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh;\n this[this.t++] = (x >> (this.DB - sh));\n }\n else {\n this[this.t - 1] |= x << sh;\n }\n sh += k;\n if (sh >= this.DB) {\n sh -= this.DB;\n }\n }\n if (k == 8 && ((+s[0]) & 0x80) != 0) {\n this.s = -1;\n if (sh > 0) {\n this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh;\n }\n }\n this.clamp();\n if (mi) {\n BigInteger.ZERO.subTo(this, this);\n }\n };\n // BigInteger.prototype.clamp = bnpClamp;\n // (protected) clamp off excess high words\n BigInteger.prototype.clamp = function () {\n var c = this.s & this.DM;\n while (this.t > 0 && this[this.t - 1] == c) {\n --this.t;\n }\n };\n // BigInteger.prototype.dlShiftTo = bnpDLShiftTo;\n // (protected) r = this << n*DB\n BigInteger.prototype.dlShiftTo = function (n, r) {\n var i;\n for (i = this.t - 1; i >= 0; --i) {\n r[i + n] = this[i];\n }\n for (i = n - 1; i >= 0; --i) {\n r[i] = 0;\n }\n r.t = this.t + n;\n r.s = this.s;\n };\n // BigInteger.prototype.drShiftTo = bnpDRShiftTo;\n // (protected) r = this >> n*DB\n BigInteger.prototype.drShiftTo = function (n, r) {\n for (var i = n; i < this.t; ++i) {\n r[i - n] = this[i];\n }\n r.t = Math.max(this.t - n, 0);\n r.s = this.s;\n };\n // BigInteger.prototype.lShiftTo = bnpLShiftTo;\n // (protected) r = this << n\n BigInteger.prototype.lShiftTo = function (n, r) {\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << cbs) - 1;\n var ds = Math.floor(n / this.DB);\n var c = (this.s << bs) & this.DM;\n for (var i = this.t - 1; i >= 0; --i) {\n r[i + ds + 1] = (this[i] >> cbs) | c;\n c = (this[i] & bm) << bs;\n }\n for (var i = ds - 1; i >= 0; --i) {\n r[i] = 0;\n }\n r[ds] = c;\n r.t = this.t + ds + 1;\n r.s = this.s;\n r.clamp();\n };\n // BigInteger.prototype.rShiftTo = bnpRShiftTo;\n // (protected) r = this >> n\n BigInteger.prototype.rShiftTo = function (n, r) {\n r.s = this.s;\n var ds = Math.floor(n / this.DB);\n if (ds >= this.t) {\n r.t = 0;\n return;\n }\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << bs) - 1;\n r[0] = this[ds] >> bs;\n for (var i = ds + 1; i < this.t; ++i) {\n r[i - ds - 1] |= (this[i] & bm) << cbs;\n r[i - ds] = this[i] >> bs;\n }\n if (bs > 0) {\n r[this.t - ds - 1] |= (this.s & bm) << cbs;\n }\n r.t = this.t - ds;\n r.clamp();\n };\n // BigInteger.prototype.subTo = bnpSubTo;\n // (protected) r = this - a\n BigInteger.prototype.subTo = function (a, r) {\n var i = 0;\n var c = 0;\n var m = Math.min(a.t, this.t);\n while (i < m) {\n c += this[i] - a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n if (a.t < this.t) {\n c -= a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while (i < a.t) {\n c -= a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c -= a.s;\n }\n r.s = (c < 0) ? -1 : 0;\n if (c < -1) {\n r[i++] = this.DV + c;\n }\n else if (c > 0) {\n r[i++] = c;\n }\n r.t = i;\n r.clamp();\n };\n // BigInteger.prototype.multiplyTo = bnpMultiplyTo;\n // (protected) r = this * a, r != this,a (HAC 14.12)\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyTo = function (a, r) {\n var x = this.abs();\n var y = a.abs();\n var i = x.t;\n r.t = i + y.t;\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = 0; i < y.t; ++i) {\n r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\n }\n r.s = 0;\n r.clamp();\n if (this.s != a.s) {\n BigInteger.ZERO.subTo(r, r);\n }\n };\n // BigInteger.prototype.squareTo = bnpSquareTo;\n // (protected) r = this^2, r != this (HAC 14.16)\n BigInteger.prototype.squareTo = function (r) {\n var x = this.abs();\n var i = r.t = 2 * x.t;\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = 0; i < x.t - 1; ++i) {\n var c = x.am(i, x[i], r, 2 * i, 0, 1);\n if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {\n r[i + x.t] -= x.DV;\n r[i + x.t + 1] = 1;\n }\n }\n if (r.t > 0) {\n r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);\n }\n r.s = 0;\n r.clamp();\n };\n // BigInteger.prototype.divRemTo = bnpDivRemTo;\n // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n // r != q, this != m. q or r may be null.\n BigInteger.prototype.divRemTo = function (m, q, r) {\n var pm = m.abs();\n if (pm.t <= 0) {\n return;\n }\n var pt = this.abs();\n if (pt.t < pm.t) {\n if (q != null) {\n q.fromInt(0);\n }\n if (r != null) {\n this.copyTo(r);\n }\n return;\n }\n if (r == null) {\n r = nbi();\n }\n var y = nbi();\n var ts = this.s;\n var ms = m.s;\n var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus\n if (nsh > 0) {\n pm.lShiftTo(nsh, y);\n pt.lShiftTo(nsh, r);\n }\n else {\n pm.copyTo(y);\n pt.copyTo(r);\n }\n var ys = y.t;\n var y0 = y[ys - 1];\n if (y0 == 0) {\n return;\n }\n var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0);\n var d1 = this.FV / yt;\n var d2 = (1 << this.F1) / yt;\n var e = 1 << this.F2;\n var i = r.t;\n var j = i - ys;\n var t = (q == null) ? nbi() : q;\n y.dlShiftTo(j, t);\n if (r.compareTo(t) >= 0) {\n r[r.t++] = 1;\n r.subTo(t, r);\n }\n BigInteger.ONE.dlShiftTo(ys, t);\n t.subTo(y, y); // \"negative\" y so we can replace sub with am later\n while (y.t < ys) {\n y[y.t++] = 0;\n }\n while (--j >= 0) {\n // Estimate quotient digit\n var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);\n if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out\n y.dlShiftTo(j, t);\n r.subTo(t, r);\n while (r[i] < --qd) {\n r.subTo(t, r);\n }\n }\n }\n if (q != null) {\n r.drShiftTo(ys, q);\n if (ts != ms) {\n BigInteger.ZERO.subTo(q, q);\n }\n }\n r.t = ys;\n r.clamp();\n if (nsh > 0) {\n r.rShiftTo(nsh, r);\n } // Denormalize remainder\n if (ts < 0) {\n BigInteger.ZERO.subTo(r, r);\n }\n };\n // BigInteger.prototype.invDigit = bnpInvDigit;\n // (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n // justification:\n // xy == 1 (mod m)\n // xy = 1+km\n // xy(2-xy) = (1+km)(1-km)\n // x[y(2-xy)] = 1-k^2m^2\n // x[y(2-xy)] == 1 (mod m^2)\n // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n // JS multiply \"overflows\" differently from C/C++, so care is needed here.\n BigInteger.prototype.invDigit = function () {\n if (this.t < 1) {\n return 0;\n }\n var x = this[0];\n if ((x & 1) == 0) {\n return 0;\n }\n var y = x & 3; // y == 1/x mod 2^2\n y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4\n y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8\n y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n return (y > 0) ? this.DV - y : -y;\n };\n // BigInteger.prototype.isEven = bnpIsEven;\n // (protected) true iff this is even\n BigInteger.prototype.isEven = function () {\n return ((this.t > 0) ? (this[0] & 1) : this.s) == 0;\n };\n // BigInteger.prototype.exp = bnpExp;\n // (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\n BigInteger.prototype.exp = function (e, z) {\n if (e > 0xffffffff || e < 1) {\n return BigInteger.ONE;\n }\n var r = nbi();\n var r2 = nbi();\n var g = z.convert(this);\n var i = nbits(e) - 1;\n g.copyTo(r);\n while (--i >= 0) {\n z.sqrTo(r, r2);\n if ((e & (1 << i)) > 0) {\n z.mulTo(r2, g, r);\n }\n else {\n var t = r;\n r = r2;\n r2 = t;\n }\n }\n return z.revert(r);\n };\n // BigInteger.prototype.chunkSize = bnpChunkSize;\n // (protected) return x s.t. r^x < DV\n BigInteger.prototype.chunkSize = function (r) {\n return Math.floor(Math.LN2 * this.DB / Math.log(r));\n };\n // BigInteger.prototype.toRadix = bnpToRadix;\n // (protected) convert to radix string\n BigInteger.prototype.toRadix = function (b) {\n if (b == null) {\n b = 10;\n }\n if (this.signum() == 0 || b < 2 || b > 36) {\n return \"0\";\n }\n var cs = this.chunkSize(b);\n var a = Math.pow(b, cs);\n var d = nbv(a);\n var y = nbi();\n var z = nbi();\n var r = \"\";\n this.divRemTo(d, y, z);\n while (y.signum() > 0) {\n r = (a + z.intValue()).toString(b).substr(1) + r;\n y.divRemTo(d, y, z);\n }\n return z.intValue().toString(b) + r;\n };\n // BigInteger.prototype.fromRadix = bnpFromRadix;\n // (protected) convert from radix string\n BigInteger.prototype.fromRadix = function (s, b) {\n this.fromInt(0);\n if (b == null) {\n b = 10;\n }\n var cs = this.chunkSize(b);\n var d = Math.pow(b, cs);\n var mi = false;\n var j = 0;\n var w = 0;\n for (var i = 0; i < s.length; ++i) {\n var x = intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\" && this.signum() == 0) {\n mi = true;\n }\n continue;\n }\n w = b * w + x;\n if (++j >= cs) {\n this.dMultiply(d);\n this.dAddOffset(w, 0);\n j = 0;\n w = 0;\n }\n }\n if (j > 0) {\n this.dMultiply(Math.pow(b, j));\n this.dAddOffset(w, 0);\n }\n if (mi) {\n BigInteger.ZERO.subTo(this, this);\n }\n };\n // BigInteger.prototype.fromNumber = bnpFromNumber;\n // (protected) alternate constructor\n BigInteger.prototype.fromNumber = function (a, b, c) {\n if (\"number\" == typeof b) {\n // new BigInteger(int,int,RNG)\n if (a < 2) {\n this.fromInt(1);\n }\n else {\n this.fromNumber(a, c);\n if (!this.testBit(a - 1)) {\n // force MSB set\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), _util__WEBPACK_IMPORTED_MODULE_0__.op_or, this);\n }\n if (this.isEven()) {\n this.dAddOffset(1, 0);\n } // force odd\n while (!this.isProbablePrime(b)) {\n this.dAddOffset(2, 0);\n if (this.bitLength() > a) {\n this.subTo(BigInteger.ONE.shiftLeft(a - 1), this);\n }\n }\n }\n }\n else {\n // new BigInteger(int,RNG)\n var x = [];\n var t = a & 7;\n x.length = (a >> 3) + 1;\n b.nextBytes(x);\n if (t > 0) {\n x[0] &= ((1 << t) - 1);\n }\n else {\n x[0] = 0;\n }\n this.fromString(x, 256);\n }\n };\n // BigInteger.prototype.bitwiseTo = bnpBitwiseTo;\n // (protected) r = this op a (bitwise)\n BigInteger.prototype.bitwiseTo = function (a, op, r) {\n var i;\n var f;\n var m = Math.min(a.t, this.t);\n for (i = 0; i < m; ++i) {\n r[i] = op(this[i], a[i]);\n }\n if (a.t < this.t) {\n f = a.s & this.DM;\n for (i = m; i < this.t; ++i) {\n r[i] = op(this[i], f);\n }\n r.t = this.t;\n }\n else {\n f = this.s & this.DM;\n for (i = m; i < a.t; ++i) {\n r[i] = op(f, a[i]);\n }\n r.t = a.t;\n }\n r.s = op(this.s, a.s);\n r.clamp();\n };\n // BigInteger.prototype.changeBit = bnpChangeBit;\n // (protected) this op (1<>= this.DB;\n }\n if (a.t < this.t) {\n c += a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while (i < a.t) {\n c += a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += a.s;\n }\n r.s = (c < 0) ? -1 : 0;\n if (c > 0) {\n r[i++] = c;\n }\n else if (c < -1) {\n r[i++] = this.DV + c;\n }\n r.t = i;\n r.clamp();\n };\n // BigInteger.prototype.dMultiply = bnpDMultiply;\n // (protected) this *= n, this >= 0, 1 < n < DV\n BigInteger.prototype.dMultiply = function (n) {\n this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);\n ++this.t;\n this.clamp();\n };\n // BigInteger.prototype.dAddOffset = bnpDAddOffset;\n // (protected) this += n << w words, this >= 0\n BigInteger.prototype.dAddOffset = function (n, w) {\n if (n == 0) {\n return;\n }\n while (this.t <= w) {\n this[this.t++] = 0;\n }\n this[w] += n;\n while (this[w] >= this.DV) {\n this[w] -= this.DV;\n if (++w >= this.t) {\n this[this.t++] = 0;\n }\n ++this[w];\n }\n };\n // BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\n // (protected) r = lower n words of \"this * a\", a.t <= n\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyLowerTo = function (a, n, r) {\n var i = Math.min(this.t + a.t, n);\n r.s = 0; // assumes a,this >= 0\n r.t = i;\n while (i > 0) {\n r[--i] = 0;\n }\n for (var j = r.t - this.t; i < j; ++i) {\n r[i + this.t] = this.am(0, a[i], r, i, 0, this.t);\n }\n for (var j = Math.min(a.t, n); i < j; ++i) {\n this.am(0, a[i], r, i, 0, n - i);\n }\n r.clamp();\n };\n // BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\n // (protected) r = \"this * a\" without lower n words, n > 0\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyUpperTo = function (a, n, r) {\n --n;\n var i = r.t = this.t + a.t - n;\n r.s = 0; // assumes a,this >= 0\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = Math.max(n - this.t, 0); i < a.t; ++i) {\n r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n);\n }\n r.clamp();\n r.drShiftTo(1, r);\n };\n // BigInteger.prototype.modInt = bnpModInt;\n // (protected) this % n, n < 2^26\n BigInteger.prototype.modInt = function (n) {\n if (n <= 0) {\n return 0;\n }\n var d = this.DV % n;\n var r = (this.s < 0) ? n - 1 : 0;\n if (this.t > 0) {\n if (d == 0) {\n r = this[0] % n;\n }\n else {\n for (var i = this.t - 1; i >= 0; --i) {\n r = (d * r + this[i]) % n;\n }\n }\n }\n return r;\n };\n // BigInteger.prototype.millerRabin = bnpMillerRabin;\n // (protected) true if probably prime (HAC 4.24, Miller-Rabin)\n BigInteger.prototype.millerRabin = function (t) {\n var n1 = this.subtract(BigInteger.ONE);\n var k = n1.getLowestSetBit();\n if (k <= 0) {\n return false;\n }\n var r = n1.shiftRight(k);\n t = (t + 1) >> 1;\n if (t > lowprimes.length) {\n t = lowprimes.length;\n }\n var a = nbi();\n for (var i = 0; i < t; ++i) {\n // Pick bases at random, instead of starting at 2\n a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);\n var y = a.modPow(r, this);\n if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\n var j = 1;\n while (j++ < k && y.compareTo(n1) != 0) {\n y = y.modPowInt(2, this);\n if (y.compareTo(BigInteger.ONE) == 0) {\n return false;\n }\n }\n if (y.compareTo(n1) != 0) {\n return false;\n }\n }\n }\n return true;\n };\n // BigInteger.prototype.square = bnSquare;\n // (public) this^2\n BigInteger.prototype.square = function () {\n var r = nbi();\n this.squareTo(r);\n return r;\n };\n //#region ASYNC\n // Public API method\n BigInteger.prototype.gcda = function (a, callback) {\n var x = (this.s < 0) ? this.negate() : this.clone();\n var y = (a.s < 0) ? a.negate() : a.clone();\n if (x.compareTo(y) < 0) {\n var t = x;\n x = y;\n y = t;\n }\n var i = x.getLowestSetBit();\n var g = y.getLowestSetBit();\n if (g < 0) {\n callback(x);\n return;\n }\n if (i < g) {\n g = i;\n }\n if (g > 0) {\n x.rShiftTo(g, x);\n y.rShiftTo(g, y);\n }\n // Workhorse of the algorithm, gets called 200 - 800 times per 512 bit keygen.\n var gcda1 = function () {\n if ((i = x.getLowestSetBit()) > 0) {\n x.rShiftTo(i, x);\n }\n if ((i = y.getLowestSetBit()) > 0) {\n y.rShiftTo(i, y);\n }\n if (x.compareTo(y) >= 0) {\n x.subTo(y, x);\n x.rShiftTo(1, x);\n }\n else {\n y.subTo(x, y);\n y.rShiftTo(1, y);\n }\n if (!(x.signum() > 0)) {\n if (g > 0) {\n y.lShiftTo(g, y);\n }\n setTimeout(function () { callback(y); }, 0); // escape\n }\n else {\n setTimeout(gcda1, 0);\n }\n };\n setTimeout(gcda1, 10);\n };\n // (protected) alternate constructor\n BigInteger.prototype.fromNumberAsync = function (a, b, c, callback) {\n if (\"number\" == typeof b) {\n if (a < 2) {\n this.fromInt(1);\n }\n else {\n this.fromNumber(a, c);\n if (!this.testBit(a - 1)) {\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), _util__WEBPACK_IMPORTED_MODULE_0__.op_or, this);\n }\n if (this.isEven()) {\n this.dAddOffset(1, 0);\n }\n var bnp_1 = this;\n var bnpfn1_1 = function () {\n bnp_1.dAddOffset(2, 0);\n if (bnp_1.bitLength() > a) {\n bnp_1.subTo(BigInteger.ONE.shiftLeft(a - 1), bnp_1);\n }\n if (bnp_1.isProbablePrime(b)) {\n setTimeout(function () { callback(); }, 0); // escape\n }\n else {\n setTimeout(bnpfn1_1, 0);\n }\n };\n setTimeout(bnpfn1_1, 0);\n }\n }\n else {\n var x = [];\n var t = a & 7;\n x.length = (a >> 3) + 1;\n b.nextBytes(x);\n if (t > 0) {\n x[0] &= ((1 << t) - 1);\n }\n else {\n x[0] = 0;\n }\n this.fromString(x, 256);\n }\n };\n return BigInteger;\n}());\n\n//#region REDUCERS\n//#region NullExp\nvar NullExp = /** @class */ (function () {\n function NullExp() {\n }\n // NullExp.prototype.convert = nNop;\n NullExp.prototype.convert = function (x) {\n return x;\n };\n // NullExp.prototype.revert = nNop;\n NullExp.prototype.revert = function (x) {\n return x;\n };\n // NullExp.prototype.mulTo = nMulTo;\n NullExp.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n };\n // NullExp.prototype.sqrTo = nSqrTo;\n NullExp.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n };\n return NullExp;\n}());\n// Modular reduction using \"classic\" algorithm\nvar Classic = /** @class */ (function () {\n function Classic(m) {\n this.m = m;\n }\n // Classic.prototype.convert = cConvert;\n Classic.prototype.convert = function (x) {\n if (x.s < 0 || x.compareTo(this.m) >= 0) {\n return x.mod(this.m);\n }\n else {\n return x;\n }\n };\n // Classic.prototype.revert = cRevert;\n Classic.prototype.revert = function (x) {\n return x;\n };\n // Classic.prototype.reduce = cReduce;\n Classic.prototype.reduce = function (x) {\n x.divRemTo(this.m, null, x);\n };\n // Classic.prototype.mulTo = cMulTo;\n Classic.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Classic.prototype.sqrTo = cSqrTo;\n Classic.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Classic;\n}());\n//#endregion\n//#region Montgomery\n// Montgomery reduction\nvar Montgomery = /** @class */ (function () {\n function Montgomery(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp & 0x7fff;\n this.mph = this.mp >> 15;\n this.um = (1 << (m.DB - 15)) - 1;\n this.mt2 = 2 * m.t;\n }\n // Montgomery.prototype.convert = montConvert;\n // xR mod m\n Montgomery.prototype.convert = function (x) {\n var r = nbi();\n x.abs().dlShiftTo(this.m.t, r);\n r.divRemTo(this.m, null, r);\n if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {\n this.m.subTo(r, r);\n }\n return r;\n };\n // Montgomery.prototype.revert = montRevert;\n // x/R mod m\n Montgomery.prototype.revert = function (x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n };\n // Montgomery.prototype.reduce = montReduce;\n // x = x/R mod m (HAC 14.32)\n Montgomery.prototype.reduce = function (x) {\n while (x.t <= this.mt2) {\n // pad x so am has enough room later\n x[x.t++] = 0;\n }\n for (var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x[i]*mp mod DV\n var j = x[i] & 0x7fff;\n var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM;\n // use am to combine the multiply-shift-add into one call\n j = i + this.m.t;\n x[j] += this.m.am(0, u0, x, i, 0, this.m.t);\n // propagate carry\n while (x[j] >= x.DV) {\n x[j] -= x.DV;\n x[++j]++;\n }\n }\n x.clamp();\n x.drShiftTo(this.m.t, x);\n if (x.compareTo(this.m) >= 0) {\n x.subTo(this.m, x);\n }\n };\n // Montgomery.prototype.mulTo = montMulTo;\n // r = \"xy/R mod m\"; x,y != r\n Montgomery.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Montgomery.prototype.sqrTo = montSqrTo;\n // r = \"x^2/R mod m\"; x != r\n Montgomery.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Montgomery;\n}());\n//#endregion Montgomery\n//#region Barrett\n// Barrett modular reduction\nvar Barrett = /** @class */ (function () {\n function Barrett(m) {\n this.m = m;\n // setup Barrett\n this.r2 = nbi();\n this.q3 = nbi();\n BigInteger.ONE.dlShiftTo(2 * m.t, this.r2);\n this.mu = this.r2.divide(m);\n }\n // Barrett.prototype.convert = barrettConvert;\n Barrett.prototype.convert = function (x) {\n if (x.s < 0 || x.t > 2 * this.m.t) {\n return x.mod(this.m);\n }\n else if (x.compareTo(this.m) < 0) {\n return x;\n }\n else {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n }\n };\n // Barrett.prototype.revert = barrettRevert;\n Barrett.prototype.revert = function (x) {\n return x;\n };\n // Barrett.prototype.reduce = barrettReduce;\n // x = x mod m (HAC 14.42)\n Barrett.prototype.reduce = function (x) {\n x.drShiftTo(this.m.t - 1, this.r2);\n if (x.t > this.m.t + 1) {\n x.t = this.m.t + 1;\n x.clamp();\n }\n this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);\n this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);\n while (x.compareTo(this.r2) < 0) {\n x.dAddOffset(1, this.m.t + 1);\n }\n x.subTo(this.r2, x);\n while (x.compareTo(this.m) >= 0) {\n x.subTo(this.m, x);\n }\n };\n // Barrett.prototype.mulTo = barrettMulTo;\n // r = x*y mod m; x,y != r\n Barrett.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Barrett.prototype.sqrTo = barrettSqrTo;\n // r = x^2 mod m; x != r\n Barrett.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Barrett;\n}());\n//#endregion\n//#endregion REDUCERS\n// return new, unset BigInteger\nfunction nbi() { return new BigInteger(null); }\nfunction parseBigInt(str, r) {\n return new BigInteger(str, r);\n}\n// am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\nvar inBrowser = typeof navigator !== \"undefined\";\nif (inBrowser && j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\n // am2 avoids a big mult-and-extract completely.\n // Max digit bits should be <= 30 because we do bitwise ops\n // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\n BigInteger.prototype.am = function am2(i, x, w, j, c, n) {\n var xl = x & 0x7fff;\n var xh = x >> 15;\n while (--n >= 0) {\n var l = this[i] & 0x7fff;\n var h = this[i++] >> 15;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);\n c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);\n w[j++] = l & 0x3fffffff;\n }\n return c;\n };\n dbits = 30;\n}\nelse if (inBrowser && j_lm && (navigator.appName != \"Netscape\")) {\n // am1: use a single mult and divide to get the high bits,\n // max digit bits should be 26 because\n // max internal value = 2*dvalue^2-2*dvalue (< 2^53)\n BigInteger.prototype.am = function am1(i, x, w, j, c, n) {\n while (--n >= 0) {\n var v = x * this[i++] + w[j] + c;\n c = Math.floor(v / 0x4000000);\n w[j++] = v & 0x3ffffff;\n }\n return c;\n };\n dbits = 26;\n}\nelse { // Mozilla/Netscape seems to prefer am3\n // Alternately, set max digit bits to 28 since some\n // browsers slow down when dealing with 32-bit numbers.\n BigInteger.prototype.am = function am3(i, x, w, j, c, n) {\n var xl = x & 0x3fff;\n var xh = x >> 14;\n while (--n >= 0) {\n var l = this[i] & 0x3fff;\n var h = this[i++] >> 14;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;\n c = (l >> 28) + (m >> 14) + xh * h;\n w[j++] = l & 0xfffffff;\n }\n return c;\n };\n dbits = 28;\n}\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = ((1 << dbits) - 1);\nBigInteger.prototype.DV = (1 << dbits);\nvar BI_FP = 52;\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\nBigInteger.prototype.F1 = BI_FP - dbits;\nBigInteger.prototype.F2 = 2 * dbits - BI_FP;\n// Digit conversions\nvar BI_RC = [];\nvar rr;\nvar vv;\nrr = \"0\".charCodeAt(0);\nfor (vv = 0; vv <= 9; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"a\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"A\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nfunction intAt(s, i) {\n var c = BI_RC[s.charCodeAt(i)];\n return (c == null) ? -1 : c;\n}\n// return bigint initialized to value\nfunction nbv(i) {\n var r = nbi();\n r.fromInt(i);\n return r;\n}\n// returns bit length of the integer x\nfunction nbits(x) {\n var r = 1;\n var t;\n if ((t = x >>> 16) != 0) {\n x = t;\n r += 16;\n }\n if ((t = x >> 8) != 0) {\n x = t;\n r += 8;\n }\n if ((t = x >> 4) != 0) {\n x = t;\n r += 4;\n }\n if ((t = x >> 2) != 0) {\n x = t;\n r += 2;\n }\n if ((t = x >> 1) != 0) {\n x = t;\n r += 1;\n }\n return r;\n}\n// \"constants\"\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/jsbn.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/jsbn/prng4.js":
+ /*!*******************************!*\
+ !*** ./lib/lib/jsbn/prng4.js ***!
+ \*******************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Arcfour\": () => (/* binding */ Arcfour),\n/* harmony export */ \"prng_newstate\": () => (/* binding */ prng_newstate),\n/* harmony export */ \"rng_psize\": () => (/* binding */ rng_psize)\n/* harmony export */ });\n// prng4.js - uses Arcfour as a PRNG\nvar Arcfour = /** @class */ (function () {\n function Arcfour() {\n this.i = 0;\n this.j = 0;\n this.S = [];\n }\n // Arcfour.prototype.init = ARC4init;\n // Initialize arcfour context from key, an array of ints, each from [0..255]\n Arcfour.prototype.init = function (key) {\n var i;\n var j;\n var t;\n for (i = 0; i < 256; ++i) {\n this.S[i] = i;\n }\n j = 0;\n for (i = 0; i < 256; ++i) {\n j = (j + this.S[i] + key[i % key.length]) & 255;\n t = this.S[i];\n this.S[i] = this.S[j];\n this.S[j] = t;\n }\n this.i = 0;\n this.j = 0;\n };\n // Arcfour.prototype.next = ARC4next;\n Arcfour.prototype.next = function () {\n var t;\n this.i = (this.i + 1) & 255;\n this.j = (this.j + this.S[this.i]) & 255;\n t = this.S[this.i];\n this.S[this.i] = this.S[this.j];\n this.S[this.j] = t;\n return this.S[(t + this.S[this.i]) & 255];\n };\n return Arcfour;\n}());\n\n// Plug in your RNG constructor here\nfunction prng_newstate() {\n return new Arcfour();\n}\n// Pool size must be a multiple of 4 and greater than 32.\n// An array of bytes the size of the pool will be passed to init()\nvar rng_psize = 256;\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/prng4.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/jsbn/rng.js":
+ /*!*****************************!*\
+ !*** ./lib/lib/jsbn/rng.js ***!
+ \*****************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SecureRandom\": () => (/* binding */ SecureRandom)\n/* harmony export */ });\n/* harmony import */ var _prng4__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./prng4 */ \"./lib/lib/jsbn/prng4.js\");\n// Random number generator - requires a PRNG backend, e.g. prng4.js\n\nvar rng_state;\nvar rng_pool = null;\nvar rng_pptr;\n// Initialize the pool with junk if needed.\nif (rng_pool == null) {\n rng_pool = [];\n rng_pptr = 0;\n var t = void 0;\n if (typeof window !== 'undefined' && window.crypto && window.crypto.getRandomValues) {\n // Extract entropy (2048 bits) from RNG if available\n var z = new Uint32Array(256);\n window.crypto.getRandomValues(z);\n for (t = 0; t < z.length; ++t) {\n rng_pool[rng_pptr++] = z[t] & 255;\n }\n }\n // Use mouse events for entropy, if we do not have enough entropy by the time\n // we need it, entropy will be generated by Math.random.\n var count = 0;\n var onMouseMoveListener_1 = function (ev) {\n count = count || 0;\n if (count >= 256 || rng_pptr >= _prng4__WEBPACK_IMPORTED_MODULE_0__.rng_psize) {\n if (window.removeEventListener) {\n window.removeEventListener(\"mousemove\", onMouseMoveListener_1, false);\n }\n else if (window.detachEvent) {\n window.detachEvent(\"onmousemove\", onMouseMoveListener_1);\n }\n return;\n }\n try {\n var mouseCoordinates = ev.x + ev.y;\n rng_pool[rng_pptr++] = mouseCoordinates & 255;\n count += 1;\n }\n catch (e) {\n // Sometimes Firefox will deny permission to access event properties for some reason. Ignore.\n }\n };\n if (typeof window !== 'undefined') {\n if (window.addEventListener) {\n window.addEventListener(\"mousemove\", onMouseMoveListener_1, false);\n }\n else if (window.attachEvent) {\n window.attachEvent(\"onmousemove\", onMouseMoveListener_1);\n }\n }\n}\nfunction rng_get_byte() {\n if (rng_state == null) {\n rng_state = (0,_prng4__WEBPACK_IMPORTED_MODULE_0__.prng_newstate)();\n // At this point, we may not have collected enough entropy. If not, fall back to Math.random\n while (rng_pptr < _prng4__WEBPACK_IMPORTED_MODULE_0__.rng_psize) {\n var random = Math.floor(65536 * Math.random());\n rng_pool[rng_pptr++] = random & 255;\n }\n rng_state.init(rng_pool);\n for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) {\n rng_pool[rng_pptr] = 0;\n }\n rng_pptr = 0;\n }\n // TODO: allow reseeding after first request\n return rng_state.next();\n}\nvar SecureRandom = /** @class */ (function () {\n function SecureRandom() {\n }\n SecureRandom.prototype.nextBytes = function (ba) {\n for (var i = 0; i < ba.length; ++i) {\n ba[i] = rng_get_byte();\n }\n };\n return SecureRandom;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/rng.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/jsbn/rsa.js":
+ /*!*****************************!*\
+ !*** ./lib/lib/jsbn/rsa.js ***!
+ \*****************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"RSAKey\": () => (/* binding */ RSAKey)\n/* harmony export */ });\n/* harmony import */ var _jsbn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _rng__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rng */ \"./lib/lib/jsbn/rng.js\");\n// Depends on jsbn.js and rng.js\n// Version 1.1: support utf-8 encoding in pkcs1pad2\n// convert a (hex) string to a bignum object\n\n\n// function linebrk(s,n) {\n// var ret = \"\";\n// var i = 0;\n// while(i + n < s.length) {\n// ret += s.substring(i,i+n) + \"\\n\";\n// i += n;\n// }\n// return ret + s.substring(i,s.length);\n// }\n// function byte2Hex(b) {\n// if(b < 0x10)\n// return \"0\" + b.toString(16);\n// else\n// return b.toString(16);\n// }\nfunction pkcs1pad1(s, n) {\n if (n < s.length + 22) {\n console.error(\"Message too long for RSA\");\n return null;\n }\n var len = n - s.length - 6;\n var filler = \"\";\n for (var f = 0; f < len; f += 2) {\n filler += \"ff\";\n }\n var m = \"0001\" + filler + \"00\" + s;\n return (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(m, 16);\n}\n// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint\nfunction pkcs1pad2(s, n) {\n if (n < s.length + 11) { // TODO: fix for utf-8\n console.error(\"Message too long for RSA\");\n return null;\n }\n var ba = [];\n var i = s.length - 1;\n while (i >= 0 && n > 0) {\n var c = s.charCodeAt(i--);\n if (c < 128) { // encode using utf-8\n ba[--n] = c;\n }\n else if ((c > 127) && (c < 2048)) {\n ba[--n] = (c & 63) | 128;\n ba[--n] = (c >> 6) | 192;\n }\n else {\n ba[--n] = (c & 63) | 128;\n ba[--n] = ((c >> 6) & 63) | 128;\n ba[--n] = (c >> 12) | 224;\n }\n }\n ba[--n] = 0;\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var x = [];\n while (n > 2) { // random non-zero pad\n x[0] = 0;\n while (x[0] == 0) {\n rng.nextBytes(x);\n }\n ba[--n] = x[0];\n }\n ba[--n] = 2;\n ba[--n] = 0;\n return new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(ba);\n}\n// \"empty\" RSA key constructor\nvar RSAKey = /** @class */ (function () {\n function RSAKey() {\n this.n = null;\n this.e = 0;\n this.d = null;\n this.p = null;\n this.q = null;\n this.dmp1 = null;\n this.dmq1 = null;\n this.coeff = null;\n }\n //#region PROTECTED\n // protected\n // RSAKey.prototype.doPublic = RSADoPublic;\n // Perform raw public operation on \"x\": return x^e (mod n)\n RSAKey.prototype.doPublic = function (x) {\n return x.modPowInt(this.e, this.n);\n };\n // RSAKey.prototype.doPrivate = RSADoPrivate;\n // Perform raw private operation on \"x\": return x^d (mod n)\n RSAKey.prototype.doPrivate = function (x) {\n if (this.p == null || this.q == null) {\n return x.modPow(this.d, this.n);\n }\n // TODO: re-calculate any missing CRT params\n var xp = x.mod(this.p).modPow(this.dmp1, this.p);\n var xq = x.mod(this.q).modPow(this.dmq1, this.q);\n while (xp.compareTo(xq) < 0) {\n xp = xp.add(this.p);\n }\n return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);\n };\n //#endregion PROTECTED\n //#region PUBLIC\n // RSAKey.prototype.setPublic = RSASetPublic;\n // Set the public key fields N and e from hex strings\n RSAKey.prototype.setPublic = function (N, E) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n }\n else {\n console.error(\"Invalid RSA public key\");\n }\n };\n // RSAKey.prototype.encrypt = RSAEncrypt;\n // Return the PKCS#1 RSA encryption of \"text\" as an even-length hex string\n RSAKey.prototype.encrypt = function (text) {\n var maxLength = (this.n.bitLength() + 7) >> 3;\n var m = pkcs1pad2(text, maxLength);\n if (m == null) {\n return null;\n }\n var c = this.doPublic(m);\n if (c == null) {\n return null;\n }\n var h = c.toString(16);\n var length = h.length;\n // fix zero before result\n for (var i = 0; i < maxLength * 2 - length; i++) {\n h = \"0\" + h;\n }\n return h;\n };\n // RSAKey.prototype.setPrivate = RSASetPrivate;\n // Set the private key fields N, e, and d from hex strings\n RSAKey.prototype.setPrivate = function (N, E, D) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n this.d = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(D, 16);\n }\n else {\n console.error(\"Invalid RSA private key\");\n }\n };\n // RSAKey.prototype.setPrivateEx = RSASetPrivateEx;\n // Set the private key fields N, e, d and CRT params from hex strings\n RSAKey.prototype.setPrivateEx = function (N, E, D, P, Q, DP, DQ, C) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n this.d = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(D, 16);\n this.p = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(P, 16);\n this.q = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(Q, 16);\n this.dmp1 = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(DP, 16);\n this.dmq1 = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(DQ, 16);\n this.coeff = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(C, 16);\n }\n else {\n console.error(\"Invalid RSA private key\");\n }\n };\n // RSAKey.prototype.generate = RSAGenerate;\n // Generate a new random private key B bits long, using public expt E\n RSAKey.prototype.generate = function (B, E) {\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var qs = B >> 1;\n this.e = parseInt(E, 16);\n var ee = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(E, 16);\n for (;;) {\n for (;;) {\n this.p = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(B - qs, 1, rng);\n if (this.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) {\n break;\n }\n }\n for (;;) {\n this.q = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(qs, 1, rng);\n if (this.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) {\n break;\n }\n }\n if (this.p.compareTo(this.q) <= 0) {\n var t = this.p;\n this.p = this.q;\n this.q = t;\n }\n var p1 = this.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var q1 = this.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var phi = p1.multiply(q1);\n if (phi.gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0) {\n this.n = this.p.multiply(this.q);\n this.d = ee.modInverse(phi);\n this.dmp1 = this.d.mod(p1);\n this.dmq1 = this.d.mod(q1);\n this.coeff = this.q.modInverse(this.p);\n break;\n }\n }\n };\n // RSAKey.prototype.decrypt = RSADecrypt;\n // Return the PKCS#1 RSA decryption of \"ctext\".\n // \"ctext\" is an even-length hex string and the output is a plain string.\n RSAKey.prototype.decrypt = function (ctext) {\n var c = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(ctext, 16);\n var m = this.doPrivate(c);\n if (m == null) {\n return null;\n }\n return pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3);\n };\n // Generate a new random private key B bits long, using public expt E\n RSAKey.prototype.generateAsync = function (B, E, callback) {\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var qs = B >> 1;\n this.e = parseInt(E, 16);\n var ee = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(E, 16);\n var rsa = this;\n // These functions have non-descript names because they were originally for(;;) loops.\n // I don't know about cryptography to give them better names than loop1-4.\n var loop1 = function () {\n var loop4 = function () {\n if (rsa.p.compareTo(rsa.q) <= 0) {\n var t = rsa.p;\n rsa.p = rsa.q;\n rsa.q = t;\n }\n var p1 = rsa.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var q1 = rsa.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var phi = p1.multiply(q1);\n if (phi.gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0) {\n rsa.n = rsa.p.multiply(rsa.q);\n rsa.d = ee.modInverse(phi);\n rsa.dmp1 = rsa.d.mod(p1);\n rsa.dmq1 = rsa.d.mod(q1);\n rsa.coeff = rsa.q.modInverse(rsa.p);\n setTimeout(function () { callback(); }, 0); // escape\n }\n else {\n setTimeout(loop1, 0);\n }\n };\n var loop3 = function () {\n rsa.q = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.nbi)();\n rsa.q.fromNumberAsync(qs, 1, rng, function () {\n rsa.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcda(ee, function (r) {\n if (r.compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && rsa.q.isProbablePrime(10)) {\n setTimeout(loop4, 0);\n }\n else {\n setTimeout(loop3, 0);\n }\n });\n });\n };\n var loop2 = function () {\n rsa.p = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.nbi)();\n rsa.p.fromNumberAsync(B - qs, 1, rng, function () {\n rsa.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcda(ee, function (r) {\n if (r.compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && rsa.p.isProbablePrime(10)) {\n setTimeout(loop3, 0);\n }\n else {\n setTimeout(loop2, 0);\n }\n });\n });\n };\n setTimeout(loop2, 0);\n };\n setTimeout(loop1, 0);\n };\n RSAKey.prototype.sign = function (text, digestMethod, digestName) {\n var header = getDigestHeader(digestName);\n var digest = header + digestMethod(text).toString();\n var m = pkcs1pad1(digest, this.n.bitLength() / 4);\n if (m == null) {\n return null;\n }\n var c = this.doPrivate(m);\n if (c == null) {\n return null;\n }\n var h = c.toString(16);\n if ((h.length & 1) == 0) {\n return h;\n }\n else {\n return \"0\" + h;\n }\n };\n RSAKey.prototype.verify = function (text, signature, digestMethod) {\n var c = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(signature, 16);\n var m = this.doPublic(c);\n if (m == null) {\n return null;\n }\n var unpadded = m.toString(16).replace(/^1f+00/, \"\");\n var digest = removeDigestHeader(unpadded);\n return digest == digestMethod(text).toString();\n };\n return RSAKey;\n}());\n\n// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext\nfunction pkcs1unpad2(d, n) {\n var b = d.toByteArray();\n var i = 0;\n while (i < b.length && b[i] == 0) {\n ++i;\n }\n if (b.length - i != n - 1 || b[i] != 2) {\n return null;\n }\n ++i;\n while (b[i] != 0) {\n if (++i >= b.length) {\n return null;\n }\n }\n var ret = \"\";\n while (++i < b.length) {\n var c = b[i] & 255;\n if (c < 128) { // utf-8 decode\n ret += String.fromCharCode(c);\n }\n else if ((c > 191) && (c < 224)) {\n ret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63));\n ++i;\n }\n else {\n ret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63));\n i += 2;\n }\n }\n return ret;\n}\n// https://tools.ietf.org/html/rfc3447#page-43\nvar DIGEST_HEADERS = {\n md2: \"3020300c06082a864886f70d020205000410\",\n md5: \"3020300c06082a864886f70d020505000410\",\n sha1: \"3021300906052b0e03021a05000414\",\n sha224: \"302d300d06096086480165030402040500041c\",\n sha256: \"3031300d060960864801650304020105000420\",\n sha384: \"3041300d060960864801650304020205000430\",\n sha512: \"3051300d060960864801650304020305000440\",\n ripemd160: \"3021300906052b2403020105000414\"\n};\nfunction getDigestHeader(name) {\n return DIGEST_HEADERS[name] || \"\";\n}\nfunction removeDigestHeader(str) {\n for (var name_1 in DIGEST_HEADERS) {\n if (DIGEST_HEADERS.hasOwnProperty(name_1)) {\n var header = DIGEST_HEADERS[name_1];\n var len = header.length;\n if (str.substr(0, len) == header) {\n return str.substr(len);\n }\n }\n }\n return str;\n}\n// Return the PKCS#1 RSA encryption of \"text\" as a Base64-encoded string\n// function RSAEncryptB64(text) {\n// var h = this.encrypt(text);\n// if(h) return hex2b64(h); else return null;\n// }\n// public\n// RSAKey.prototype.encrypt_b64 = RSAEncryptB64;\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/rsa.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/jsbn/util.js":
+ /*!******************************!*\
+ !*** ./lib/lib/jsbn/util.js ***!
+ \******************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"cbit\": () => (/* binding */ cbit),\n/* harmony export */ \"int2char\": () => (/* binding */ int2char),\n/* harmony export */ \"lbit\": () => (/* binding */ lbit),\n/* harmony export */ \"op_and\": () => (/* binding */ op_and),\n/* harmony export */ \"op_andnot\": () => (/* binding */ op_andnot),\n/* harmony export */ \"op_or\": () => (/* binding */ op_or),\n/* harmony export */ \"op_xor\": () => (/* binding */ op_xor)\n/* harmony export */ });\nvar BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nfunction int2char(n) {\n return BI_RM.charAt(n);\n}\n//#region BIT_OPERATIONS\n// (public) this & a\nfunction op_and(x, y) {\n return x & y;\n}\n// (public) this | a\nfunction op_or(x, y) {\n return x | y;\n}\n// (public) this ^ a\nfunction op_xor(x, y) {\n return x ^ y;\n}\n// (public) this & ~a\nfunction op_andnot(x, y) {\n return x & ~y;\n}\n// return index of lowest 1-bit in x, x < 2^31\nfunction lbit(x) {\n if (x == 0) {\n return -1;\n }\n var r = 0;\n if ((x & 0xffff) == 0) {\n x >>= 16;\n r += 16;\n }\n if ((x & 0xff) == 0) {\n x >>= 8;\n r += 8;\n }\n if ((x & 0xf) == 0) {\n x >>= 4;\n r += 4;\n }\n if ((x & 3) == 0) {\n x >>= 2;\n r += 2;\n }\n if ((x & 1) == 0) {\n ++r;\n }\n return r;\n}\n// return number of 1 bits in x\nfunction cbit(x) {\n var r = 0;\n while (x != 0) {\n x &= x - 1;\n ++r;\n }\n return r;\n}\n//#endregion BIT_OPERATIONS\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/util.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/jsrsasign/asn1-1.0.js":
+ /*!***************************************!*\
+ !*** ./lib/lib/jsrsasign/asn1-1.0.js ***!
+ \***************************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"KJUR\": () => (/* binding */ KJUR)\n/* harmony export */ });\n/* harmony import */ var _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../jsbn/jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _yahoo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./yahoo */ \"./lib/lib/jsrsasign/yahoo.js\");\n/* asn1-1.0.13.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license\n */\n/*\n * asn1.js - ASN.1 DER encoder classes\n *\n * Copyright (c) 2013-2017 Kenji Urushima (kenji.urushima@gmail.com)\n *\n * This software is licensed under the terms of the MIT License.\n * https://kjur.github.io/jsrsasign/license\n *\n * The above copyright and license notice shall be\n * included in all copies or substantial portions of the Software.\n */\n\n\n/**\n * @fileOverview\n * @name asn1-1.0.js\n * @author Kenji Urushima kenji.urushima@gmail.com\n * @version asn1 1.0.13 (2017-Jun-02)\n * @since jsrsasign 2.1\n * @license MIT License\n */\n/**\n * kjur's class library name space\n * \n * This name space provides following name spaces:\n *
\n * - {@link KJUR.asn1} - ASN.1 primitive hexadecimal encoder
\n * - {@link KJUR.asn1.x509} - ASN.1 structure for X.509 certificate and CRL
\n * - {@link KJUR.crypto} - Java Cryptographic Extension(JCE) style MessageDigest/Signature\n * class and utilities
\n *
\n *
\n * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2.\n * @name KJUR\n * @namespace kjur's class library name space\n */\nvar KJUR = {};\n/**\n * kjur's ASN.1 class library name space\n * \n * This is ITU-T X.690 ASN.1 DER encoder class library and\n * class structure and methods is very similar to\n * org.bouncycastle.asn1 package of\n * well known BouncyCaslte Cryptography Library.\n *
PROVIDING ASN.1 PRIMITIVES
\n * Here are ASN.1 DER primitive classes.\n * \n * - 0x01 {@link KJUR.asn1.DERBoolean}
\n * - 0x02 {@link KJUR.asn1.DERInteger}
\n * - 0x03 {@link KJUR.asn1.DERBitString}
\n * - 0x04 {@link KJUR.asn1.DEROctetString}
\n * - 0x05 {@link KJUR.asn1.DERNull}
\n * - 0x06 {@link KJUR.asn1.DERObjectIdentifier}
\n * - 0x0a {@link KJUR.asn1.DEREnumerated}
\n * - 0x0c {@link KJUR.asn1.DERUTF8String}
\n * - 0x12 {@link KJUR.asn1.DERNumericString}
\n * - 0x13 {@link KJUR.asn1.DERPrintableString}
\n * - 0x14 {@link KJUR.asn1.DERTeletexString}
\n * - 0x16 {@link KJUR.asn1.DERIA5String}
\n * - 0x17 {@link KJUR.asn1.DERUTCTime}
\n * - 0x18 {@link KJUR.asn1.DERGeneralizedTime}
\n * - 0x30 {@link KJUR.asn1.DERSequence}
\n * - 0x31 {@link KJUR.asn1.DERSet}
\n *
\n * OTHER ASN.1 CLASSES
\n * \n * - {@link KJUR.asn1.ASN1Object}
\n * - {@link KJUR.asn1.DERAbstractString}
\n * - {@link KJUR.asn1.DERAbstractTime}
\n * - {@link KJUR.asn1.DERAbstractStructured}
\n * - {@link KJUR.asn1.DERTaggedObject}
\n *
\n * SUB NAME SPACES
\n * \n * - {@link KJUR.asn1.cades} - CAdES long term signature format
\n * - {@link KJUR.asn1.cms} - Cryptographic Message Syntax
\n * - {@link KJUR.asn1.csr} - Certificate Signing Request (CSR/PKCS#10)
\n * - {@link KJUR.asn1.tsp} - RFC 3161 Timestamping Protocol Format
\n * - {@link KJUR.asn1.x509} - RFC 5280 X.509 certificate and CRL
\n *
\n * \n * NOTE: Please ignore method summary and document of this namespace.\n * This caused by a bug of jsdoc2.\n * @name KJUR.asn1\n * @namespace\n */\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1)\n KJUR.asn1 = {};\n/**\n * ASN1 utilities class\n * @name KJUR.asn1.ASN1Util\n * @class ASN1 utilities class\n * @since asn1 1.0.2\n */\nKJUR.asn1.ASN1Util = new function () {\n this.integerToByteHex = function (i) {\n var h = i.toString(16);\n if ((h.length % 2) == 1)\n h = '0' + h;\n return h;\n };\n this.bigIntToMinTwosComplementsHex = function (bigIntegerValue) {\n var h = bigIntegerValue.toString(16);\n if (h.substr(0, 1) != '-') {\n if (h.length % 2 == 1) {\n h = '0' + h;\n }\n else {\n if (!h.match(/^[0-7]/)) {\n h = '00' + h;\n }\n }\n }\n else {\n var hPos = h.substr(1);\n var xorLen = hPos.length;\n if (xorLen % 2 == 1) {\n xorLen += 1;\n }\n else {\n if (!h.match(/^[0-7]/)) {\n xorLen += 2;\n }\n }\n var hMask = '';\n for (var i = 0; i < xorLen; i++) {\n hMask += 'f';\n }\n var biMask = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(hMask, 16);\n var biNeg = biMask.xor(bigIntegerValue).add(_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n h = biNeg.toString(16).replace(/^-/, '');\n }\n return h;\n };\n /**\n * get PEM string from hexadecimal data and header string\n * @name getPEMStringFromHex\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} dataHex hexadecimal string of PEM body\n * @param {String} pemHeader PEM header string (ex. 'RSA PRIVATE KEY')\n * @return {String} PEM formatted string of input data\n * @description\n * This method converts a hexadecimal string to a PEM string with\n * a specified header. Its line break will be CRLF(\"\\r\\n\").\n * @example\n * var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex('616161', 'RSA PRIVATE KEY');\n * // value of pem will be:\n * -----BEGIN PRIVATE KEY-----\n * YWFh\n * -----END PRIVATE KEY-----\n */\n this.getPEMStringFromHex = function (dataHex, pemHeader) {\n return hextopem(dataHex, pemHeader);\n };\n /**\n * generate ASN1Object specifed by JSON parameters\n * @name newObject\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {Array} param JSON parameter to generate ASN1Object\n * @return {KJUR.asn1.ASN1Object} generated object\n * @since asn1 1.0.3\n * @description\n * generate any ASN1Object specified by JSON param\n * including ASN.1 primitive or structured.\n * Generally 'param' can be described as follows:\n * \n * {TYPE-OF-ASNOBJ: ASN1OBJ-PARAMETER}\n *
\n * 'TYPE-OF-ASN1OBJ' can be one of following symbols:\n * \n * - 'bool' - DERBoolean
\n * - 'int' - DERInteger
\n * - 'bitstr' - DERBitString
\n * - 'octstr' - DEROctetString
\n * - 'null' - DERNull
\n * - 'oid' - DERObjectIdentifier
\n * - 'enum' - DEREnumerated
\n * - 'utf8str' - DERUTF8String
\n * - 'numstr' - DERNumericString
\n * - 'prnstr' - DERPrintableString
\n * - 'telstr' - DERTeletexString
\n * - 'ia5str' - DERIA5String
\n * - 'utctime' - DERUTCTime
\n * - 'gentime' - DERGeneralizedTime
\n * - 'seq' - DERSequence
\n * - 'set' - DERSet
\n * - 'tag' - DERTaggedObject
\n *
\n * @example\n * newObject({'prnstr': 'aaa'});\n * newObject({'seq': [{'int': 3}, {'prnstr': 'aaa'}]})\n * // ASN.1 Tagged Object\n * newObject({'tag': {'tag': 'a1',\n * 'explicit': true,\n * 'obj': {'seq': [{'int': 3}, {'prnstr': 'aaa'}]}}});\n * // more simple representation of ASN.1 Tagged Object\n * newObject({'tag': ['a1',\n * true,\n * {'seq': [\n * {'int': 3},\n * {'prnstr': 'aaa'}]}\n * ]});\n */\n this.newObject = function (param) {\n var _KJUR = KJUR, _KJUR_asn1 = _KJUR.asn1, _DERBoolean = _KJUR_asn1.DERBoolean, _DERInteger = _KJUR_asn1.DERInteger, _DERBitString = _KJUR_asn1.DERBitString, _DEROctetString = _KJUR_asn1.DEROctetString, _DERNull = _KJUR_asn1.DERNull, _DERObjectIdentifier = _KJUR_asn1.DERObjectIdentifier, _DEREnumerated = _KJUR_asn1.DEREnumerated, _DERUTF8String = _KJUR_asn1.DERUTF8String, _DERNumericString = _KJUR_asn1.DERNumericString, _DERPrintableString = _KJUR_asn1.DERPrintableString, _DERTeletexString = _KJUR_asn1.DERTeletexString, _DERIA5String = _KJUR_asn1.DERIA5String, _DERUTCTime = _KJUR_asn1.DERUTCTime, _DERGeneralizedTime = _KJUR_asn1.DERGeneralizedTime, _DERSequence = _KJUR_asn1.DERSequence, _DERSet = _KJUR_asn1.DERSet, _DERTaggedObject = _KJUR_asn1.DERTaggedObject, _newObject = _KJUR_asn1.ASN1Util.newObject;\n var keys = Object.keys(param);\n if (keys.length != 1)\n throw \"key of param shall be only one.\";\n var key = keys[0];\n if (\":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:\".indexOf(\":\" + key + \":\") == -1)\n throw \"undefined key: \" + key;\n if (key == \"bool\")\n return new _DERBoolean(param[key]);\n if (key == \"int\")\n return new _DERInteger(param[key]);\n if (key == \"bitstr\")\n return new _DERBitString(param[key]);\n if (key == \"octstr\")\n return new _DEROctetString(param[key]);\n if (key == \"null\")\n return new _DERNull(param[key]);\n if (key == \"oid\")\n return new _DERObjectIdentifier(param[key]);\n if (key == \"enum\")\n return new _DEREnumerated(param[key]);\n if (key == \"utf8str\")\n return new _DERUTF8String(param[key]);\n if (key == \"numstr\")\n return new _DERNumericString(param[key]);\n if (key == \"prnstr\")\n return new _DERPrintableString(param[key]);\n if (key == \"telstr\")\n return new _DERTeletexString(param[key]);\n if (key == \"ia5str\")\n return new _DERIA5String(param[key]);\n if (key == \"utctime\")\n return new _DERUTCTime(param[key]);\n if (key == \"gentime\")\n return new _DERGeneralizedTime(param[key]);\n if (key == \"seq\") {\n var paramList = param[key];\n var a = [];\n for (var i = 0; i < paramList.length; i++) {\n var asn1Obj = _newObject(paramList[i]);\n a.push(asn1Obj);\n }\n return new _DERSequence({ 'array': a });\n }\n if (key == \"set\") {\n var paramList = param[key];\n var a = [];\n for (var i = 0; i < paramList.length; i++) {\n var asn1Obj = _newObject(paramList[i]);\n a.push(asn1Obj);\n }\n return new _DERSet({ 'array': a });\n }\n if (key == \"tag\") {\n var tagParam = param[key];\n if (Object.prototype.toString.call(tagParam) === '[object Array]' &&\n tagParam.length == 3) {\n var obj = _newObject(tagParam[2]);\n return new _DERTaggedObject({ tag: tagParam[0],\n explicit: tagParam[1],\n obj: obj });\n }\n else {\n var newParam = {};\n if (tagParam.explicit !== undefined)\n newParam.explicit = tagParam.explicit;\n if (tagParam.tag !== undefined)\n newParam.tag = tagParam.tag;\n if (tagParam.obj === undefined)\n throw \"obj shall be specified for 'tag'.\";\n newParam.obj = _newObject(tagParam.obj);\n return new _DERTaggedObject(newParam);\n }\n }\n };\n /**\n * get encoded hexadecimal string of ASN1Object specifed by JSON parameters\n * @name jsonToASN1HEX\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {Array} param JSON parameter to generate ASN1Object\n * @return hexadecimal string of ASN1Object\n * @since asn1 1.0.4\n * @description\n * As for ASN.1 object representation of JSON object,\n * please see {@link newObject}.\n * @example\n * jsonToASN1HEX({'prnstr': 'aaa'});\n */\n this.jsonToASN1HEX = function (param) {\n var asn1Obj = this.newObject(param);\n return asn1Obj.getEncodedHex();\n };\n};\n/**\n * get dot noted oid number string from hexadecimal value of OID\n * @name oidHexToInt\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} hex hexadecimal value of object identifier\n * @return {String} dot noted string of object identifier\n * @since jsrsasign 4.8.3 asn1 1.0.7\n * @description\n * This static method converts from hexadecimal string representation of\n * ASN.1 value of object identifier to oid number string.\n * @example\n * KJUR.asn1.ASN1Util.oidHexToInt('550406') → \"2.5.4.6\"\n */\nKJUR.asn1.ASN1Util.oidHexToInt = function (hex) {\n var s = \"\";\n var i01 = parseInt(hex.substr(0, 2), 16);\n var i0 = Math.floor(i01 / 40);\n var i1 = i01 % 40;\n var s = i0 + \".\" + i1;\n var binbuf = \"\";\n for (var i = 2; i < hex.length; i += 2) {\n var value = parseInt(hex.substr(i, 2), 16);\n var bin = (\"00000000\" + value.toString(2)).slice(-8);\n binbuf = binbuf + bin.substr(1, 7);\n if (bin.substr(0, 1) == \"0\") {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(binbuf, 2);\n s = s + \".\" + bi.toString(10);\n binbuf = \"\";\n }\n }\n ;\n return s;\n};\n/**\n * get hexadecimal value of object identifier from dot noted oid value\n * @name oidIntToHex\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} oidString dot noted string of object identifier\n * @return {String} hexadecimal value of object identifier\n * @since jsrsasign 4.8.3 asn1 1.0.7\n * @description\n * This static method converts from object identifier value string.\n * to hexadecimal string representation of it.\n * @example\n * KJUR.asn1.ASN1Util.oidIntToHex(\"2.5.4.6\") → \"550406\"\n */\nKJUR.asn1.ASN1Util.oidIntToHex = function (oidString) {\n var itox = function (i) {\n var h = i.toString(16);\n if (h.length == 1)\n h = '0' + h;\n return h;\n };\n var roidtox = function (roid) {\n var h = '';\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(roid, 10);\n var b = bi.toString(2);\n var padLen = 7 - b.length % 7;\n if (padLen == 7)\n padLen = 0;\n var bPad = '';\n for (var i = 0; i < padLen; i++)\n bPad += '0';\n b = bPad + b;\n for (var i = 0; i < b.length - 1; i += 7) {\n var b8 = b.substr(i, 7);\n if (i != b.length - 7)\n b8 = '1' + b8;\n h += itox(parseInt(b8, 2));\n }\n return h;\n };\n if (!oidString.match(/^[0-9.]+$/)) {\n throw \"malformed oid string: \" + oidString;\n }\n var h = '';\n var a = oidString.split('.');\n var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\n h += itox(i0);\n a.splice(0, 2);\n for (var i = 0; i < a.length; i++) {\n h += roidtox(a[i]);\n }\n return h;\n};\n// ********************************************************************\n// Abstract ASN.1 Classes\n// ********************************************************************\n// ********************************************************************\n/**\n * base class for ASN.1 DER encoder object\n * @name KJUR.asn1.ASN1Object\n * @class base class for ASN.1 DER encoder object\n * @property {Boolean} isModified flag whether internal data was changed\n * @property {String} hTLV hexadecimal string of ASN.1 TLV\n * @property {String} hT hexadecimal string of ASN.1 TLV tag(T)\n * @property {String} hL hexadecimal string of ASN.1 TLV length(L)\n * @property {String} hV hexadecimal string of ASN.1 TLV value(V)\n * @description\n */\nKJUR.asn1.ASN1Object = function () {\n var isModified = true;\n var hTLV = null;\n var hT = '00';\n var hL = '00';\n var hV = '';\n /**\n * get hexadecimal ASN.1 TLV length(L) bytes from TLV value(V)\n * @name getLengthHexFromValue\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV length(L)\n */\n this.getLengthHexFromValue = function () {\n if (typeof this.hV == \"undefined\" || this.hV == null) {\n throw \"this.hV is null or undefined.\";\n }\n if (this.hV.length % 2 == 1) {\n throw \"value hex must be even length: n=\" + hV.length + \",v=\" + this.hV;\n }\n var n = this.hV.length / 2;\n var hN = n.toString(16);\n if (hN.length % 2 == 1) {\n hN = \"0\" + hN;\n }\n if (n < 128) {\n return hN;\n }\n else {\n var hNlen = hN.length / 2;\n if (hNlen > 15) {\n throw \"ASN.1 length too long to represent by 8x: n = \" + n.toString(16);\n }\n var head = 128 + hNlen;\n return head.toString(16) + hN;\n }\n };\n /**\n * get hexadecimal string of ASN.1 TLV bytes\n * @name getEncodedHex\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV\n */\n this.getEncodedHex = function () {\n if (this.hTLV == null || this.isModified) {\n this.hV = this.getFreshValueHex();\n this.hL = this.getLengthHexFromValue();\n this.hTLV = this.hT + this.hL + this.hV;\n this.isModified = false;\n //alert(\"first time: \" + this.hTLV);\n }\n return this.hTLV;\n };\n /**\n * get hexadecimal string of ASN.1 TLV value(V) bytes\n * @name getValueHex\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV value(V) bytes\n */\n this.getValueHex = function () {\n this.getEncodedHex();\n return this.hV;\n };\n this.getFreshValueHex = function () {\n return '';\n };\n};\n// == BEGIN DERAbstractString ================================================\n/**\n * base class for ASN.1 DER string classes\n * @name KJUR.asn1.DERAbstractString\n * @class base class for ASN.1 DER string classes\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @property {String} s internal string of value\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - str - specify initial ASN.1 value(V) by a string
\n * - hex - specify initial ASN.1 value(V) by a hexadecimal string
\n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERAbstractString = function (params) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var s = null;\n var hV = null;\n /**\n * get string value of this string object\n * @name getString\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @return {String} string value of this string object\n */\n this.getString = function () {\n return this.s;\n };\n /**\n * set value by a string\n * @name setString\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @param {String} newS value by a string to set\n */\n this.setString = function (newS) {\n this.hTLV = null;\n this.isModified = true;\n this.s = newS;\n this.hV = stohex(this.s);\n };\n /**\n * set value by a hexadecimal string\n * @name setStringHex\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @param {String} newHexString value by a hexadecimal string to set\n */\n this.setStringHex = function (newHexString) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params == \"string\") {\n this.setString(params);\n }\n else if (typeof params['str'] != \"undefined\") {\n this.setString(params['str']);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setStringHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object);\n// == END DERAbstractString ================================================\n// == BEGIN DERAbstractTime ==================================================\n/**\n * base class for ASN.1 DER Generalized/UTCTime class\n * @name KJUR.asn1.DERAbstractTime\n * @class base class for ASN.1 DER Generalized/UTCTime class\n * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERAbstractTime = function (params) {\n KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);\n var s = null;\n var date = null;\n // --- PRIVATE METHODS --------------------\n this.localDateToUTC = function (d) {\n utc = d.getTime() + (d.getTimezoneOffset() * 60000);\n var utcDate = new Date(utc);\n return utcDate;\n };\n /*\n * format date string by Data object\n * @name formatDate\n * @memberOf KJUR.asn1.AbstractTime;\n * @param {Date} dateObject\n * @param {string} type 'utc' or 'gen'\n * @param {boolean} withMillis flag for with millisections or not\n * @description\n * 'withMillis' flag is supported from asn1 1.0.6.\n */\n this.formatDate = function (dateObject, type, withMillis) {\n var pad = this.zeroPadding;\n var d = this.localDateToUTC(dateObject);\n var year = String(d.getFullYear());\n if (type == 'utc')\n year = year.substr(2, 2);\n var month = pad(String(d.getMonth() + 1), 2);\n var day = pad(String(d.getDate()), 2);\n var hour = pad(String(d.getHours()), 2);\n var min = pad(String(d.getMinutes()), 2);\n var sec = pad(String(d.getSeconds()), 2);\n var s = year + month + day + hour + min + sec;\n if (withMillis === true) {\n var millis = d.getMilliseconds();\n if (millis != 0) {\n var sMillis = pad(String(millis), 3);\n sMillis = sMillis.replace(/[0]+$/, \"\");\n s = s + \".\" + sMillis;\n }\n }\n return s + \"Z\";\n };\n this.zeroPadding = function (s, len) {\n if (s.length >= len)\n return s;\n return new Array(len - s.length + 1).join('0') + s;\n };\n // --- PUBLIC METHODS --------------------\n /**\n * get string value of this string object\n * @name getString\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @return {String} string value of this time object\n */\n this.getString = function () {\n return this.s;\n };\n /**\n * set value by a string\n * @name setString\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @param {String} newS value by a string to set such like \"130430235959Z\"\n */\n this.setString = function (newS) {\n this.hTLV = null;\n this.isModified = true;\n this.s = newS;\n this.hV = stohex(newS);\n };\n /**\n * set value by a Date object\n * @name setByDateValue\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @param {Integer} year year of date (ex. 2013)\n * @param {Integer} month month of date between 1 and 12 (ex. 12)\n * @param {Integer} day day of month\n * @param {Integer} hour hours of date\n * @param {Integer} min minutes of date\n * @param {Integer} sec seconds of date\n */\n this.setByDateValue = function (year, month, day, hour, min, sec) {\n var dateObject = new Date(Date.UTC(year, month - 1, day, hour, min, sec, 0));\n this.setByDate(dateObject);\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object);\n// == END DERAbstractTime ==================================================\n// == BEGIN DERAbstractStructured ============================================\n/**\n * base class for ASN.1 DER structured class\n * @name KJUR.asn1.DERAbstractStructured\n * @class base class for ASN.1 DER structured class\n * @property {Array} asn1Array internal array of ASN1Object\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERAbstractStructured = function (params) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var asn1Array = null;\n /**\n * set value by array of ASN1Object\n * @name setByASN1ObjectArray\n * @memberOf KJUR.asn1.DERAbstractStructured#\n * @function\n * @param {array} asn1ObjectArray array of ASN1Object to set\n */\n this.setByASN1ObjectArray = function (asn1ObjectArray) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array = asn1ObjectArray;\n };\n /**\n * append an ASN1Object to internal array\n * @name appendASN1Object\n * @memberOf KJUR.asn1.DERAbstractStructured#\n * @function\n * @param {ASN1Object} asn1Object to add\n */\n this.appendASN1Object = function (asn1Object) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array.push(asn1Object);\n };\n this.asn1Array = new Array();\n if (typeof params != \"undefined\") {\n if (typeof params['array'] != \"undefined\") {\n this.asn1Array = params['array'];\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object);\n// ********************************************************************\n// ASN.1 Object Classes\n// ********************************************************************\n// ********************************************************************\n/**\n * class for ASN.1 DER Boolean\n * @name KJUR.asn1.DERBoolean\n * @class class for ASN.1 DER Boolean\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERBoolean = function () {\n KJUR.asn1.DERBoolean.superclass.constructor.call(this);\n this.hT = \"01\";\n this.hTLV = \"0101ff\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER Integer\n * @name KJUR.asn1.DERInteger\n * @class class for ASN.1 DER Integer\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - int - specify initial ASN.1 value(V) by integer value
\n * - bigint - specify initial ASN.1 value(V) by BigInteger object
\n * - hex - specify initial ASN.1 value(V) by a hexadecimal string
\n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERInteger = function (params) {\n KJUR.asn1.DERInteger.superclass.constructor.call(this);\n this.hT = \"02\";\n /**\n * set value by Tom Wu's BigInteger object\n * @name setByBigInteger\n * @memberOf KJUR.asn1.DERInteger#\n * @function\n * @param {BigInteger} bigIntegerValue to set\n */\n this.setByBigInteger = function (bigIntegerValue) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\n };\n /**\n * set value by integer value\n * @name setByInteger\n * @memberOf KJUR.asn1.DERInteger\n * @function\n * @param {Integer} integer value to set\n */\n this.setByInteger = function (intValue) {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(String(intValue), 10);\n this.setByBigInteger(bi);\n };\n /**\n * set value by integer value\n * @name setValueHex\n * @memberOf KJUR.asn1.DERInteger#\n * @function\n * @param {String} hexadecimal string of integer value\n * @description\n *
\n * NOTE: Value shall be represented by minimum octet length of\n * two's complement representation.\n * @example\n * new KJUR.asn1.DERInteger(123);\n * new KJUR.asn1.DERInteger({'int': 123});\n * new KJUR.asn1.DERInteger({'hex': '1fad'});\n */\n this.setValueHex = function (newHexString) {\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['bigint'] != \"undefined\") {\n this.setByBigInteger(params['bigint']);\n }\n else if (typeof params['int'] != \"undefined\") {\n this.setByInteger(params['int']);\n }\n else if (typeof params == \"number\") {\n this.setByInteger(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setValueHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER encoded BitString primitive\n * @name KJUR.asn1.DERBitString\n * @class class for ASN.1 DER encoded BitString primitive\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - bin - specify binary string (ex. '10111')
\n * - array - specify array of boolean (ex. [true,false,true,true])
\n * - hex - specify hexadecimal string of ASN.1 value(V) including unused bits
\n * - obj - specify {@link KJUR.asn1.ASN1Util.newObject}\n * argument for \"BitString encapsulates\" structure.
\n *
\n * NOTE1: 'params' can be omitted.
\n * NOTE2: 'obj' parameter have been supported since\n * asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).
\n * @example\n * // default constructor\n * o = new KJUR.asn1.DERBitString();\n * // initialize with binary string\n * o = new KJUR.asn1.DERBitString({bin: \"1011\"});\n * // initialize with boolean array\n * o = new KJUR.asn1.DERBitString({array: [true,false,true,true]});\n * // initialize with hexadecimal string (04 is unused bits)\n * o = new KJUR.asn1.DEROctetString({hex: \"04bac0\"});\n * // initialize with ASN1Util.newObject argument for encapsulated\n * o = new KJUR.asn1.DERBitString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});\n * // above generates a ASN.1 data like this:\n * // BIT STRING, encapsulates {\n * // SEQUENCE {\n * // INTEGER 3\n * // PrintableString 'aaa'\n * // }\n * // }\n */\nKJUR.asn1.DERBitString = function (params) {\n if (params !== undefined && typeof params.obj !== \"undefined\") {\n var o = KJUR.asn1.ASN1Util.newObject(params.obj);\n params.hex = \"00\" + o.getEncodedHex();\n }\n KJUR.asn1.DERBitString.superclass.constructor.call(this);\n this.hT = \"03\";\n /**\n * set ASN.1 value(V) by a hexadecimal string including unused bits\n * @name setHexValueIncludingUnusedBits\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {String} newHexStringIncludingUnusedBits\n */\n this.setHexValueIncludingUnusedBits = function (newHexStringIncludingUnusedBits) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = newHexStringIncludingUnusedBits;\n };\n /**\n * set ASN.1 value(V) by unused bit and hexadecimal string of value\n * @name setUnusedBitsAndHexValue\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {Integer} unusedBits\n * @param {String} hValue\n */\n this.setUnusedBitsAndHexValue = function (unusedBits, hValue) {\n if (unusedBits < 0 || 7 < unusedBits) {\n throw \"unused bits shall be from 0 to 7: u = \" + unusedBits;\n }\n var hUnusedBits = \"0\" + unusedBits;\n this.hTLV = null;\n this.isModified = true;\n this.hV = hUnusedBits + hValue;\n };\n /**\n * set ASN.1 DER BitString by binary string
\n * @name setByBinaryString\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {String} binaryString binary value string (i.e. '10111')\n * @description\n * Its unused bits will be calculated automatically by length of\n * 'binaryValue'.
\n * NOTE: Trailing zeros '0' will be ignored.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.setByBooleanArray(\"01011\");\n */\n this.setByBinaryString = function (binaryString) {\n binaryString = binaryString.replace(/0+$/, '');\n var unusedBits = 8 - binaryString.length % 8;\n if (unusedBits == 8)\n unusedBits = 0;\n for (var i = 0; i <= unusedBits; i++) {\n binaryString += '0';\n }\n var h = '';\n for (var i = 0; i < binaryString.length - 1; i += 8) {\n var b = binaryString.substr(i, 8);\n var x = parseInt(b, 2).toString(16);\n if (x.length == 1)\n x = '0' + x;\n h += x;\n }\n this.hTLV = null;\n this.isModified = true;\n this.hV = '0' + unusedBits + h;\n };\n /**\n * set ASN.1 TLV value(V) by an array of boolean
\n * @name setByBooleanArray\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {array} booleanArray array of boolean (ex. [true, false, true])\n * @description\n * NOTE: Trailing falses will be ignored in the ASN.1 DER Object.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.setByBooleanArray([false, true, false, true, true]);\n */\n this.setByBooleanArray = function (booleanArray) {\n var s = '';\n for (var i = 0; i < booleanArray.length; i++) {\n if (booleanArray[i] == true) {\n s += '1';\n }\n else {\n s += '0';\n }\n }\n this.setByBinaryString(s);\n };\n /**\n * generate an array of falses with specified length
\n * @name newFalseArray\n * @memberOf KJUR.asn1.DERBitString\n * @function\n * @param {Integer} nLength length of array to generate\n * @return {array} array of boolean falses\n * @description\n * This static method may be useful to initialize boolean array.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.newFalseArray(3) → [false, false, false]\n */\n this.newFalseArray = function (nLength) {\n var a = new Array(nLength);\n for (var i = 0; i < nLength; i++) {\n a[i] = false;\n }\n return a;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params == \"string\" && params.toLowerCase().match(/^[0-9a-f]+$/)) {\n this.setHexValueIncludingUnusedBits(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setHexValueIncludingUnusedBits(params['hex']);\n }\n else if (typeof params['bin'] != \"undefined\") {\n this.setByBinaryString(params['bin']);\n }\n else if (typeof params['array'] != \"undefined\") {\n this.setByBooleanArray(params['array']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER OctetString
\n * @name KJUR.asn1.DEROctetString\n * @class class for ASN.1 DER OctetString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * This class provides ASN.1 OctetString simple type.
\n * Supported \"params\" attributes are:\n * \n * - str - to set a string as a value
\n * - hex - to set a hexadecimal string as a value
\n * - obj - to set a encapsulated ASN.1 value by JSON object\n * which is defined in {@link KJUR.asn1.ASN1Util.newObject}
\n *
\n * NOTE: A parameter 'obj' have been supported\n * for \"OCTET STRING, encapsulates\" structure.\n * since asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).\n * @see KJUR.asn1.DERAbstractString - superclass\n * @example\n * // default constructor\n * o = new KJUR.asn1.DEROctetString();\n * // initialize with string\n * o = new KJUR.asn1.DEROctetString({str: \"aaa\"});\n * // initialize with hexadecimal string\n * o = new KJUR.asn1.DEROctetString({hex: \"616161\"});\n * // initialize with ASN1Util.newObject argument\n * o = new KJUR.asn1.DEROctetString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});\n * // above generates a ASN.1 data like this:\n * // OCTET STRING, encapsulates {\n * // SEQUENCE {\n * // INTEGER 3\n * // PrintableString 'aaa'\n * // }\n * // }\n */\nKJUR.asn1.DEROctetString = function (params) {\n if (params !== undefined && typeof params.obj !== \"undefined\") {\n var o = KJUR.asn1.ASN1Util.newObject(params.obj);\n params.hex = o.getEncodedHex();\n }\n KJUR.asn1.DEROctetString.superclass.constructor.call(this, params);\n this.hT = \"04\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER Null\n * @name KJUR.asn1.DERNull\n * @class class for ASN.1 DER Null\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERNull = function () {\n KJUR.asn1.DERNull.superclass.constructor.call(this);\n this.hT = \"05\";\n this.hTLV = \"0500\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER ObjectIdentifier\n * @name KJUR.asn1.DERObjectIdentifier\n * @class class for ASN.1 DER ObjectIdentifier\n * @param {Array} params associative array of parameters (ex. {'oid': '2.5.4.5'})\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - oid - specify initial ASN.1 value(V) by a oid string (ex. 2.5.4.13)
\n * - hex - specify initial ASN.1 value(V) by a hexadecimal string
\n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERObjectIdentifier = function (params) {\n var itox = function (i) {\n var h = i.toString(16);\n if (h.length == 1)\n h = '0' + h;\n return h;\n };\n var roidtox = function (roid) {\n var h = '';\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(roid, 10);\n var b = bi.toString(2);\n var padLen = 7 - b.length % 7;\n if (padLen == 7)\n padLen = 0;\n var bPad = '';\n for (var i = 0; i < padLen; i++)\n bPad += '0';\n b = bPad + b;\n for (var i = 0; i < b.length - 1; i += 7) {\n var b8 = b.substr(i, 7);\n if (i != b.length - 7)\n b8 = '1' + b8;\n h += itox(parseInt(b8, 2));\n }\n return h;\n };\n KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);\n this.hT = \"06\";\n /**\n * set value by a hexadecimal string\n * @name setValueHex\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} newHexString hexadecimal value of OID bytes\n */\n this.setValueHex = function (newHexString) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = newHexString;\n };\n /**\n * set value by a OID string
\n * @name setValueOidString\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} oidString OID string (ex. 2.5.4.13)\n * @example\n * o = new KJUR.asn1.DERObjectIdentifier();\n * o.setValueOidString(\"2.5.4.13\");\n */\n this.setValueOidString = function (oidString) {\n if (!oidString.match(/^[0-9.]+$/)) {\n throw \"malformed oid string: \" + oidString;\n }\n var h = '';\n var a = oidString.split('.');\n var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\n h += itox(i0);\n a.splice(0, 2);\n for (var i = 0; i < a.length; i++) {\n h += roidtox(a[i]);\n }\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = h;\n };\n /**\n * set value by a OID name\n * @name setValueName\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} oidName OID name (ex. 'serverAuth')\n * @since 1.0.1\n * @description\n * OID name shall be defined in 'KJUR.asn1.x509.OID.name2oidList'.\n * Otherwise raise error.\n * @example\n * o = new KJUR.asn1.DERObjectIdentifier();\n * o.setValueName(\"serverAuth\");\n */\n this.setValueName = function (oidName) {\n var oid = KJUR.asn1.x509.OID.name2oid(oidName);\n if (oid !== '') {\n this.setValueOidString(oid);\n }\n else {\n throw \"DERObjectIdentifier oidName undefined: \" + oidName;\n }\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (params !== undefined) {\n if (typeof params === \"string\") {\n if (params.match(/^[0-2].[0-9.]+$/)) {\n this.setValueOidString(params);\n }\n else {\n this.setValueName(params);\n }\n }\n else if (params.oid !== undefined) {\n this.setValueOidString(params.oid);\n }\n else if (params.hex !== undefined) {\n this.setValueHex(params.hex);\n }\n else if (params.name !== undefined) {\n this.setValueName(params.name);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER Enumerated\n * @name KJUR.asn1.DEREnumerated\n * @class class for ASN.1 DER Enumerated\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - int - specify initial ASN.1 value(V) by integer value
\n * - hex - specify initial ASN.1 value(V) by a hexadecimal string
\n *
\n * NOTE: 'params' can be omitted.\n * @example\n * new KJUR.asn1.DEREnumerated(123);\n * new KJUR.asn1.DEREnumerated({int: 123});\n * new KJUR.asn1.DEREnumerated({hex: '1fad'});\n */\nKJUR.asn1.DEREnumerated = function (params) {\n KJUR.asn1.DEREnumerated.superclass.constructor.call(this);\n this.hT = \"0a\";\n /**\n * set value by Tom Wu's BigInteger object\n * @name setByBigInteger\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {BigInteger} bigIntegerValue to set\n */\n this.setByBigInteger = function (bigIntegerValue) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\n };\n /**\n * set value by integer value\n * @name setByInteger\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {Integer} integer value to set\n */\n this.setByInteger = function (intValue) {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(String(intValue), 10);\n this.setByBigInteger(bi);\n };\n /**\n * set value by integer value\n * @name setValueHex\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {String} hexadecimal string of integer value\n * @description\n *
\n * NOTE: Value shall be represented by minimum octet length of\n * two's complement representation.\n */\n this.setValueHex = function (newHexString) {\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['int'] != \"undefined\") {\n this.setByInteger(params['int']);\n }\n else if (typeof params == \"number\") {\n this.setByInteger(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setValueHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER UTF8String\n * @name KJUR.asn1.DERUTF8String\n * @class class for ASN.1 DER UTF8String\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERUTF8String = function (params) {\n KJUR.asn1.DERUTF8String.superclass.constructor.call(this, params);\n this.hT = \"0c\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER NumericString\n * @name KJUR.asn1.DERNumericString\n * @class class for ASN.1 DER NumericString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERNumericString = function (params) {\n KJUR.asn1.DERNumericString.superclass.constructor.call(this, params);\n this.hT = \"12\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER PrintableString\n * @name KJUR.asn1.DERPrintableString\n * @class class for ASN.1 DER PrintableString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERPrintableString = function (params) {\n KJUR.asn1.DERPrintableString.superclass.constructor.call(this, params);\n this.hT = \"13\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER TeletexString\n * @name KJUR.asn1.DERTeletexString\n * @class class for ASN.1 DER TeletexString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERTeletexString = function (params) {\n KJUR.asn1.DERTeletexString.superclass.constructor.call(this, params);\n this.hT = \"14\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER IA5String\n * @name KJUR.asn1.DERIA5String\n * @class class for ASN.1 DER IA5String\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERIA5String = function (params) {\n KJUR.asn1.DERIA5String.superclass.constructor.call(this, params);\n this.hT = \"16\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER UTCTime\n * @name KJUR.asn1.DERUTCTime\n * @class class for ASN.1 DER UTCTime\n * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})\n * @extends KJUR.asn1.DERAbstractTime\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - str - specify initial ASN.1 value(V) by a string (ex.'130430235959Z')
\n * - hex - specify initial ASN.1 value(V) by a hexadecimal string
\n * - date - specify Date object.
\n *
\n * NOTE: 'params' can be omitted.\n * EXAMPLES
\n * @example\n * d1 = new KJUR.asn1.DERUTCTime();\n * d1.setString('130430125959Z');\n *\n * d2 = new KJUR.asn1.DERUTCTime({'str': '130430125959Z'});\n * d3 = new KJUR.asn1.DERUTCTime({'date': new Date(Date.UTC(2015, 0, 31, 0, 0, 0, 0))});\n * d4 = new KJUR.asn1.DERUTCTime('130430125959Z');\n */\nKJUR.asn1.DERUTCTime = function (params) {\n KJUR.asn1.DERUTCTime.superclass.constructor.call(this, params);\n this.hT = \"17\";\n /**\n * set value by a Date object
\n * @name setByDate\n * @memberOf KJUR.asn1.DERUTCTime#\n * @function\n * @param {Date} dateObject Date object to set ASN.1 value(V)\n * @example\n * o = new KJUR.asn1.DERUTCTime();\n * o.setByDate(new Date(\"2016/12/31\"));\n */\n this.setByDate = function (dateObject) {\n this.hTLV = null;\n this.isModified = true;\n this.date = dateObject;\n this.s = this.formatDate(this.date, 'utc');\n this.hV = stohex(this.s);\n };\n this.getFreshValueHex = function () {\n if (typeof this.date == \"undefined\" && typeof this.s == \"undefined\") {\n this.date = new Date();\n this.s = this.formatDate(this.date, 'utc');\n this.hV = stohex(this.s);\n }\n return this.hV;\n };\n if (params !== undefined) {\n if (params.str !== undefined) {\n this.setString(params.str);\n }\n else if (typeof params == \"string\" && params.match(/^[0-9]{12}Z$/)) {\n this.setString(params);\n }\n else if (params.hex !== undefined) {\n this.setStringHex(params.hex);\n }\n else if (params.date !== undefined) {\n this.setByDate(params.date);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime);\n// ********************************************************************\n/**\n * class for ASN.1 DER GeneralizedTime\n * @name KJUR.asn1.DERGeneralizedTime\n * @class class for ASN.1 DER GeneralizedTime\n * @param {Array} params associative array of parameters (ex. {'str': '20130430235959Z'})\n * @property {Boolean} withMillis flag to show milliseconds or not\n * @extends KJUR.asn1.DERAbstractTime\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - str - specify initial ASN.1 value(V) by a string (ex.'20130430235959Z')
\n * - hex - specify initial ASN.1 value(V) by a hexadecimal string
\n * - date - specify Date object.
\n * - millis - specify flag to show milliseconds (from 1.0.6)
\n *
\n * NOTE1: 'params' can be omitted.\n * NOTE2: 'withMillis' property is supported from asn1 1.0.6.\n */\nKJUR.asn1.DERGeneralizedTime = function (params) {\n KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, params);\n this.hT = \"18\";\n this.withMillis = false;\n /**\n * set value by a Date object\n * @name setByDate\n * @memberOf KJUR.asn1.DERGeneralizedTime#\n * @function\n * @param {Date} dateObject Date object to set ASN.1 value(V)\n * @example\n * When you specify UTC time, use 'Date.UTC' method like this:
\n * o1 = new DERUTCTime();\n * o1.setByDate(date);\n *\n * date = new Date(Date.UTC(2015, 0, 31, 23, 59, 59, 0)); #2015JAN31 23:59:59\n */\n this.setByDate = function (dateObject) {\n this.hTLV = null;\n this.isModified = true;\n this.date = dateObject;\n this.s = this.formatDate(this.date, 'gen', this.withMillis);\n this.hV = stohex(this.s);\n };\n this.getFreshValueHex = function () {\n if (this.date === undefined && this.s === undefined) {\n this.date = new Date();\n this.s = this.formatDate(this.date, 'gen', this.withMillis);\n this.hV = stohex(this.s);\n }\n return this.hV;\n };\n if (params !== undefined) {\n if (params.str !== undefined) {\n this.setString(params.str);\n }\n else if (typeof params == \"string\" && params.match(/^[0-9]{14}Z$/)) {\n this.setString(params);\n }\n else if (params.hex !== undefined) {\n this.setStringHex(params.hex);\n }\n else if (params.date !== undefined) {\n this.setByDate(params.date);\n }\n if (params.millis === true) {\n this.withMillis = true;\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime);\n// ********************************************************************\n/**\n * class for ASN.1 DER Sequence\n * @name KJUR.asn1.DERSequence\n * @class class for ASN.1 DER Sequence\n * @extends KJUR.asn1.DERAbstractStructured\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - array - specify array of ASN1Object to set elements of content
\n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERSequence = function (params) {\n KJUR.asn1.DERSequence.superclass.constructor.call(this, params);\n this.hT = \"30\";\n this.getFreshValueHex = function () {\n var h = '';\n for (var i = 0; i < this.asn1Array.length; i++) {\n var asn1Obj = this.asn1Array[i];\n h += asn1Obj.getEncodedHex();\n }\n this.hV = h;\n return this.hV;\n };\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured);\n// ********************************************************************\n/**\n * class for ASN.1 DER Set\n * @name KJUR.asn1.DERSet\n * @class class for ASN.1 DER Set\n * @extends KJUR.asn1.DERAbstractStructured\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - array - specify array of ASN1Object to set elements of content
\n * - sortflag - flag for sort (default: true). ASN.1 BER is not sorted in 'SET OF'.
\n *
\n * NOTE1: 'params' can be omitted.
\n * NOTE2: sortflag is supported since 1.0.5.\n */\nKJUR.asn1.DERSet = function (params) {\n KJUR.asn1.DERSet.superclass.constructor.call(this, params);\n this.hT = \"31\";\n this.sortFlag = true; // item shall be sorted only in ASN.1 DER\n this.getFreshValueHex = function () {\n var a = new Array();\n for (var i = 0; i < this.asn1Array.length; i++) {\n var asn1Obj = this.asn1Array[i];\n a.push(asn1Obj.getEncodedHex());\n }\n if (this.sortFlag == true)\n a.sort();\n this.hV = a.join('');\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params.sortflag != \"undefined\" &&\n params.sortflag == false)\n this.sortFlag = false;\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured);\n// ********************************************************************\n/**\n * class for ASN.1 DER TaggedObject\n * @name KJUR.asn1.DERTaggedObject\n * @class class for ASN.1 DER TaggedObject\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * Parameter 'tagNoNex' is ASN.1 tag(T) value for this object.\n * For example, if you find '[1]' tag in a ASN.1 dump,\n * 'tagNoHex' will be 'a1'.\n *
\n * As for optional argument 'params' for constructor, you can specify *ANY* of\n * following properties:\n * \n * - explicit - specify true if this is explicit tag otherwise false\n * (default is 'true').
\n * - tag - specify tag (default is 'a0' which means [0])
\n * - obj - specify ASN1Object which is tagged
\n *
\n * @example\n * d1 = new KJUR.asn1.DERUTF8String({'str':'a'});\n * d2 = new KJUR.asn1.DERTaggedObject({'obj': d1});\n * hex = d2.getEncodedHex();\n */\nKJUR.asn1.DERTaggedObject = function (params) {\n KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);\n this.hT = \"a0\";\n this.hV = '';\n this.isExplicit = true;\n this.asn1Object = null;\n /**\n * set value by an ASN1Object\n * @name setString\n * @memberOf KJUR.asn1.DERTaggedObject#\n * @function\n * @param {Boolean} isExplicitFlag flag for explicit/implicit tag\n * @param {Integer} tagNoHex hexadecimal string of ASN.1 tag\n * @param {ASN1Object} asn1Object ASN.1 to encapsulate\n */\n this.setASN1Object = function (isExplicitFlag, tagNoHex, asn1Object) {\n this.hT = tagNoHex;\n this.isExplicit = isExplicitFlag;\n this.asn1Object = asn1Object;\n if (this.isExplicit) {\n this.hV = this.asn1Object.getEncodedHex();\n this.hTLV = null;\n this.isModified = true;\n }\n else {\n this.hV = null;\n this.hTLV = asn1Object.getEncodedHex();\n this.hTLV = this.hTLV.replace(/^../, tagNoHex);\n this.isModified = false;\n }\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['tag'] != \"undefined\") {\n this.hT = params['tag'];\n }\n if (typeof params['explicit'] != \"undefined\") {\n this.isExplicit = params['explicit'];\n }\n if (typeof params['obj'] != \"undefined\") {\n this.asn1Object = params['obj'];\n this.setASN1Object(this.isExplicit, this.hT, this.asn1Object);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsrsasign/asn1-1.0.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/jsrsasign/yahoo.js":
+ /*!************************************!*\
+ !*** ./lib/lib/jsrsasign/yahoo.js ***!
+ \************************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"YAHOO\": () => (/* binding */ YAHOO)\n/* harmony export */ });\n/*!\nCopyright (c) 2011, Yahoo! Inc. All rights reserved.\nCode licensed under the BSD License:\nhttp://developer.yahoo.com/yui/license.html\nversion: 2.9.0\n*/\nvar YAHOO = {};\nYAHOO.lang = {\n /**\n * Utility to set up the prototype, constructor and superclass properties to\n * support an inheritance strategy that can chain constructors and methods.\n * Static members will not be inherited.\n *\n * @method extend\n * @static\n * @param {Function} subc the object to modify\n * @param {Function} superc the object to inherit\n * @param {Object} overrides additional properties/methods to add to the\n * subclass prototype. These will override the\n * matching items obtained from the superclass\n * if present.\n */\n extend: function (subc, superc, overrides) {\n if (!superc || !subc) {\n throw new Error(\"YAHOO.lang.extend failed, please check that \" +\n \"all dependencies are included.\");\n }\n var F = function () { };\n F.prototype = superc.prototype;\n subc.prototype = new F();\n subc.prototype.constructor = subc;\n subc.superclass = superc.prototype;\n if (superc.prototype.constructor == Object.prototype.constructor) {\n superc.prototype.constructor = superc;\n }\n if (overrides) {\n var i;\n for (i in overrides) {\n subc.prototype[i] = overrides[i];\n }\n /*\n * IE will not enumerate native functions in a derived object even if the\n * function was overridden. This is a workaround for specific functions\n * we care about on the Object prototype.\n * @property _IEEnumFix\n * @param {Function} r the object to receive the augmentation\n * @param {Function} s the object that supplies the properties to augment\n * @static\n * @private\n */\n var _IEEnumFix = function () { }, ADD = [\"toString\", \"valueOf\"];\n try {\n if (/MSIE/.test(navigator.userAgent)) {\n _IEEnumFix = function (r, s) {\n for (i = 0; i < ADD.length; i = i + 1) {\n var fname = ADD[i], f = s[fname];\n if (typeof f === 'function' && f != Object.prototype[fname]) {\n r[fname] = f;\n }\n }\n };\n }\n }\n catch (ex) { }\n ;\n _IEEnumFix(subc.prototype, overrides);\n }\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsrsasign/yahoo.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./node_modules/process/browser.js":
+ /*!*****************************************!*\
+ !*** ./node_modules/process/browser.js ***!
+ \*****************************************/
+ /***/
+ ((module) => {
+
+ eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n//# sourceURL=webpack://JSEncrypt/./node_modules/process/browser.js?");
+
+ /***/
+ })
+
+ /******/
+ });
+ /************************************************************************/
+ /******/ // The module cache
+ /******/
+ var __webpack_module_cache__ = {};
+ /******/
+ /******/ // The require function
+ /******/
+ function __webpack_require__(moduleId) {
+ /******/ // Check if module is in cache
+ /******/
+ var cachedModule = __webpack_module_cache__[moduleId];
+ /******/
+ if (cachedModule !== undefined) {
+ /******/
+ return cachedModule.exports;
+ /******/
+ }
+ /******/ // Create a new module (and put it into the cache)
+ /******/
+ var module = __webpack_module_cache__[moduleId] = {
+ /******/ // no module.id needed
+ /******/ // no module.loaded needed
+ /******/
+ exports: {}
+ /******/
+ };
+ /******/
+ /******/ // Execute the module function
+ /******/
+ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
+ /******/
+ /******/ // Return the exports of the module
+ /******/
+ return module.exports;
+ /******/
+ }
+ /******/
+ /************************************************************************/
+ /******/
+ /* webpack/runtime/define property getters */
+ /******/
+ (() => {
+ /******/ // define getter functions for harmony exports
+ /******/
+ __webpack_require__.d = (exports, definition) => {
+ /******/
+ for (var key in definition) {
+ /******/
+ if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+ /******/
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: definition[key]
+ });
+ /******/
+ }
+ /******/
+ }
+ /******/
+ };
+ /******/
+ })();
+ /******/
+ /******/
+ /* webpack/runtime/hasOwnProperty shorthand */
+ /******/
+ (() => {
+ /******/
+ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+ /******/
+ })();
+ /******/
+ /******/
+ /* webpack/runtime/make namespace object */
+ /******/
+ (() => {
+ /******/ // define __esModule on exports
+ /******/
+ __webpack_require__.r = (exports) => {
+ /******/
+ if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+ /******/
+ Object.defineProperty(exports, Symbol.toStringTag, {
+ value: 'Module'
+ });
+ /******/
+ }
+ /******/
+ Object.defineProperty(exports, '__esModule', {
+ value: true
+ });
+ /******/
+ };
+ /******/
+ })();
+ /******/
+ /************************************************************************/
+ /******/
+ /******/ // startup
+ /******/ // Load entry module and return exports
+ /******/ // This entry module can't be inlined because the eval devtool is used.
+ /******/
+ var __webpack_exports__ = __webpack_require__("./lib/index.js");
+ /******/
+ __webpack_exports__ = __webpack_exports__["default"];
+ /******/
+ /******/
+ return __webpack_exports__;
+ /******/
+ })();
+});
\ No newline at end of file
diff --git a/欧歌/api/json5.js b/欧歌/api/json5.js
new file mode 100644
index 0000000..7949f11
--- /dev/null
+++ b/欧歌/api/json5.js
@@ -0,0 +1,1809 @@
+(function(global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.JSON5 = factory());
+}(this, (function() {
+ 'use strict';
+
+ function createCommonjsModule(fn, module) {
+ return module = {
+ exports: {}
+ }, fn(module, module.exports), module.exports;
+ }
+
+ var _global = createCommonjsModule(function(module) {
+ // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+ var global = module.exports = typeof window != 'undefined' && window.Math == Math ?
+ window : typeof self != 'undefined' && self.Math == Math ? self
+ // eslint-disable-next-line no-new-func
+ :
+ Function('return this')();
+ if (typeof __g == 'number') {
+ __g = global;
+ } // eslint-disable-line no-undef
+ });
+
+ var _core = createCommonjsModule(function(module) {
+ var core = module.exports = {
+ version: '2.6.5'
+ };
+ if (typeof __e == 'number') {
+ __e = core;
+ } // eslint-disable-line no-undef
+ });
+ var _core_1 = _core.version;
+
+ var _isObject = function(it) {
+ return typeof it === 'object' ? it !== null : typeof it === 'function';
+ };
+
+ var _anObject = function(it) {
+ if (!_isObject(it)) {
+ throw TypeError(it + ' is not an object!');
+ }
+ return it;
+ };
+
+ var _fails = function(exec) {
+ try {
+ return !!exec();
+ } catch (e) {
+ return true;
+ }
+ };
+
+ // Thank's IE8 for his funny defineProperty
+ var _descriptors = !_fails(function() {
+ return Object.defineProperty({}, 'a', {
+ get: function() {
+ return 7;
+ }
+ }).a != 7;
+ });
+
+ var document = _global.document;
+ // typeof document.createElement is 'object' in old IE
+ var is = _isObject(document) && _isObject(document.createElement);
+ var _domCreate = function(it) {
+ return is ? document.createElement(it) : {};
+ };
+
+ var _ie8DomDefine = !_descriptors && !_fails(function() {
+ return Object.defineProperty(_domCreate('div'), 'a', {
+ get: function() {
+ return 7;
+ }
+ }).a != 7;
+ });
+
+ // 7.1.1 ToPrimitive(input [, PreferredType])
+
+ // instead of the ES6 spec version, we didn't implement @@toPrimitive case
+ // and the second argument - flag - preferred type is a string
+ var _toPrimitive = function(it, S) {
+ if (!_isObject(it)) {
+ return it;
+ }
+ var fn, val;
+ if (S && typeof(fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) {
+ return val;
+ }
+ if (typeof(fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) {
+ return val;
+ }
+ if (!S && typeof(fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) {
+ return val;
+ }
+ throw TypeError("Can't convert object to primitive value");
+ };
+
+ var dP = Object.defineProperty;
+
+ var f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {
+ _anObject(O);
+ P = _toPrimitive(P, true);
+ _anObject(Attributes);
+ if (_ie8DomDefine) {
+ try {
+ return dP(O, P, Attributes);
+ } catch (e) {
+ /* empty */ }
+ }
+ if ('get' in Attributes || 'set' in Attributes) {
+ throw TypeError('Accessors not supported!');
+ }
+ if ('value' in Attributes) {
+ O[P] = Attributes.value;
+ }
+ return O;
+ };
+
+ var _objectDp = {
+ f: f
+ };
+
+ var _propertyDesc = function(bitmap, value) {
+ return {
+ enumerable: !(bitmap & 1),
+ configurable: !(bitmap & 2),
+ writable: !(bitmap & 4),
+ value: value
+ };
+ };
+
+ var _hide = _descriptors ? function(object, key, value) {
+ return _objectDp.f(object, key, _propertyDesc(1, value));
+ } : function(object, key, value) {
+ object[key] = value;
+ return object;
+ };
+
+ var hasOwnProperty = {}.hasOwnProperty;
+ var _has = function(it, key) {
+ return hasOwnProperty.call(it, key);
+ };
+
+ var id = 0;
+ var px = Math.random();
+ var _uid = function(key) {
+ return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
+ };
+
+ var _library = false;
+
+ var _shared = createCommonjsModule(function(module) {
+ var SHARED = '__core-js_shared__';
+ var store = _global[SHARED] || (_global[SHARED] = {});
+
+ (module.exports = function(key, value) {
+ return store[key] || (store[key] = value !== undefined ? value : {});
+ })('versions', []).push({
+ version: _core.version,
+ mode: _library ? 'pure' : 'global',
+ copyright: '© 2019 Denis Pushkarev (zloirock.ru)'
+ });
+ });
+
+ var _functionToString = _shared('native-function-to-string', Function.toString);
+
+ var _redefine = createCommonjsModule(function(module) {
+ var SRC = _uid('src');
+
+ var TO_STRING = 'toString';
+ var TPL = ('' + _functionToString).split(TO_STRING);
+
+ _core.inspectSource = function(it) {
+ return _functionToString.call(it);
+ };
+
+ (module.exports = function(O, key, val, safe) {
+ var isFunction = typeof val == 'function';
+ if (isFunction) {
+ _has(val, 'name') || _hide(val, 'name', key);
+ }
+ if (O[key] === val) {
+ return;
+ }
+ if (isFunction) {
+ _has(val, SRC) || _hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
+ }
+ if (O === _global) {
+ O[key] = val;
+ } else if (!safe) {
+ delete O[key];
+ _hide(O, key, val);
+ } else if (O[key]) {
+ O[key] = val;
+ } else {
+ _hide(O, key, val);
+ }
+ // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
+ })(Function.prototype, TO_STRING, function toString() {
+ return typeof this == 'function' && this[SRC] || _functionToString.call(this);
+ });
+ });
+
+ var _aFunction = function(it) {
+ if (typeof it != 'function') {
+ throw TypeError(it + ' is not a function!');
+ }
+ return it;
+ };
+
+ // optional / simple context binding
+
+ var _ctx = function(fn, that, length) {
+ _aFunction(fn);
+ if (that === undefined) {
+ return fn;
+ }
+ switch (length) {
+ case 1:
+ return function(a) {
+ return fn.call(that, a);
+ };
+ case 2:
+ return function(a, b) {
+ return fn.call(that, a, b);
+ };
+ case 3:
+ return function(a, b, c) {
+ return fn.call(that, a, b, c);
+ };
+ }
+ return function( /* ...args */ ) {
+ return fn.apply(that, arguments);
+ };
+ };
+
+ var PROTOTYPE = 'prototype';
+
+ var $export = function(type, name, source) {
+ var IS_FORCED = type & $export.F;
+ var IS_GLOBAL = type & $export.G;
+ var IS_STATIC = type & $export.S;
+ var IS_PROTO = type & $export.P;
+ var IS_BIND = type & $export.B;
+ var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE];
+ var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});
+ var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});
+ var key, own, out, exp;
+ if (IS_GLOBAL) {
+ source = name;
+ }
+ for (key in source) {
+ // contains in native
+ own = !IS_FORCED && target && target[key] !== undefined;
+ // export native or passed
+ out = (own ? target : source)[key];
+ // bind timers to global for call from export context
+ exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out;
+ // extend global
+ if (target) {
+ _redefine(target, key, out, type & $export.U);
+ }
+ // export
+ if (exports[key] != out) {
+ _hide(exports, key, exp);
+ }
+ if (IS_PROTO && expProto[key] != out) {
+ expProto[key] = out;
+ }
+ }
+ };
+ _global.core = _core;
+ // type bitmap
+ $export.F = 1; // forced
+ $export.G = 2; // global
+ $export.S = 4; // static
+ $export.P = 8; // proto
+ $export.B = 16; // bind
+ $export.W = 32; // wrap
+ $export.U = 64; // safe
+ $export.R = 128; // real proto method for `library`
+ var _export = $export;
+
+ // 7.1.4 ToInteger
+ var ceil = Math.ceil;
+ var floor = Math.floor;
+ var _toInteger = function(it) {
+ return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
+ };
+
+ // 7.2.1 RequireObjectCoercible(argument)
+ var _defined = function(it) {
+ if (it == undefined) {
+ throw TypeError("Can't call method on " + it);
+ }
+ return it;
+ };
+
+ // true -> String#at
+ // false -> String#codePointAt
+ var _stringAt = function(TO_STRING) {
+ return function(that, pos) {
+ var s = String(_defined(that));
+ var i = _toInteger(pos);
+ var l = s.length;
+ var a, b;
+ if (i < 0 || i >= l) {
+ return TO_STRING ? '' : undefined;
+ }
+ a = s.charCodeAt(i);
+ return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff ?
+ TO_STRING ? s.charAt(i) : a :
+ TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
+ };
+ };
+
+ var $at = _stringAt(false);
+ _export(_export.P, 'String', {
+ // 21.1.3.3 String.prototype.codePointAt(pos)
+ codePointAt: function codePointAt(pos) {
+ return $at(this, pos);
+ }
+ });
+
+ var codePointAt = _core.String.codePointAt;
+
+ var max = Math.max;
+ var min = Math.min;
+ var _toAbsoluteIndex = function(index, length) {
+ index = _toInteger(index);
+ return index < 0 ? max(index + length, 0) : min(index, length);
+ };
+
+ var fromCharCode = String.fromCharCode;
+ var $fromCodePoint = String.fromCodePoint;
+
+ // length should be 1, old FF problem
+ _export(_export.S + _export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {
+ // 21.1.2.2 String.fromCodePoint(...codePoints)
+ fromCodePoint: function fromCodePoint(x) {
+ var arguments$1 = arguments;
+ // eslint-disable-line no-unused-vars
+ var res = [];
+ var aLen = arguments.length;
+ var i = 0;
+ var code;
+ while (aLen > i) {
+ code = +arguments$1[i++];
+ if (_toAbsoluteIndex(code, 0x10ffff) !== code) {
+ throw RangeError(code + ' is not a valid code point');
+ }
+ res.push(code < 0x10000 ?
+ fromCharCode(code) :
+ fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)
+ );
+ }
+ return res.join('');
+ }
+ });
+
+ var fromCodePoint = _core.String.fromCodePoint;
+
+ // This is a generated file. Do not edit.
+ var Space_Separator = /[\u1680\u2000-\u200A\u202F\u205F\u3000]/;
+ var ID_Start = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/;
+ var ID_Continue = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/;
+
+ var unicode = {
+ Space_Separator: Space_Separator,
+ ID_Start: ID_Start,
+ ID_Continue: ID_Continue
+ };
+
+ var util = {
+ isSpaceSeparator: function isSpaceSeparator(c) {
+ return typeof c === 'string' && unicode.Space_Separator.test(c)
+ },
+
+ isIdStartChar: function isIdStartChar(c) {
+ return typeof c === 'string' && (
+ (c >= 'a' && c <= 'z') ||
+ (c >= 'A' && c <= 'Z') ||
+ (c === '$') || (c === '_') ||
+ unicode.ID_Start.test(c)
+ )
+ },
+
+ isIdContinueChar: function isIdContinueChar(c) {
+ return typeof c === 'string' && (
+ (c >= 'a' && c <= 'z') ||
+ (c >= 'A' && c <= 'Z') ||
+ (c >= '0' && c <= '9') ||
+ (c === '$') || (c === '_') ||
+ (c === '\u200C') || (c === '\u200D') ||
+ unicode.ID_Continue.test(c)
+ )
+ },
+
+ isDigit: function isDigit(c) {
+ return typeof c === 'string' && /[0-9]/.test(c)
+ },
+
+ isHexDigit: function isHexDigit(c) {
+ return typeof c === 'string' && /[0-9A-Fa-f]/.test(c)
+ },
+ };
+
+ var source;
+ var parseState;
+ var stack;
+ var pos;
+ var line;
+ var column;
+ var token;
+ var key;
+ var root;
+
+ var parse = function parse(text, reviver) {
+ source = String(text);
+ parseState = 'start';
+ stack = [];
+ pos = 0;
+ line = 1;
+ column = 0;
+ token = undefined;
+ key = undefined;
+ root = undefined;
+
+ do {
+ token = lex();
+
+ // This code is unreachable.
+ // if (!parseStates[parseState]) {
+ // throw invalidParseState()
+ // }
+
+ parseStates[parseState]();
+ } while (token.type !== 'eof')
+
+ if (typeof reviver === 'function') {
+ return internalize({
+ '': root
+ }, '', reviver)
+ }
+
+ return root
+ };
+
+ function internalize(holder, name, reviver) {
+ var value = holder[name];
+ if (value != null && typeof value === 'object') {
+ if (Array.isArray(value)) {
+ for (var i = 0; i < value.length; i++) {
+ var key = String(i);
+ var replacement = internalize(value, key, reviver);
+ if (replacement === undefined) {
+ delete value[key];
+ } else {
+ Object.defineProperty(value, key, {
+ value: replacement,
+ writable: true,
+ enumerable: true,
+ configurable: true,
+ });
+ }
+ }
+ } else {
+ for (var key$1 in value) {
+ var replacement$1 = internalize(value, key$1, reviver);
+ if (replacement$1 === undefined) {
+ delete value[key$1];
+ } else {
+ Object.defineProperty(value, key$1, {
+ value: replacement$1,
+ writable: true,
+ enumerable: true,
+ configurable: true,
+ });
+ }
+ }
+ }
+ }
+
+ return reviver.call(holder, name, value)
+ }
+
+ var lexState;
+ var buffer;
+ var doubleQuote;
+ var sign;
+ var c;
+
+ function lex() {
+ lexState = 'default';
+ buffer = '';
+ doubleQuote = false;
+ sign = 1;
+
+ for (;;) {
+ c = peek();
+
+ // This code is unreachable.
+ // if (!lexStates[lexState]) {
+ // throw invalidLexState(lexState)
+ // }
+
+ var token = lexStates[lexState]();
+ if (token) {
+ return token
+ }
+ }
+ }
+
+ function peek() {
+ if (source[pos]) {
+ return String.fromCodePoint(source.codePointAt(pos))
+ }
+ }
+
+ function read() {
+ var c = peek();
+
+ if (c === '\n') {
+ line++;
+ column = 0;
+ } else if (c) {
+ column += c.length;
+ } else {
+ column++;
+ }
+
+ if (c) {
+ pos += c.length;
+ }
+
+ return c
+ }
+
+ var lexStates = {
+ default: function default$1() {
+ switch (c) {
+ case '\t':
+ case '\v':
+ case '\f':
+ case ' ':
+ case '\u00A0':
+ case '\uFEFF':
+ case '\n':
+ case '\r':
+ case '\u2028':
+ case '\u2029':
+ read();
+ return
+
+ case '/':
+ read();
+ lexState = 'comment';
+ return
+
+ case undefined:
+ read();
+ return newToken('eof')
+ }
+
+ if (util.isSpaceSeparator(c)) {
+ read();
+ return
+ }
+
+ // This code is unreachable.
+ // if (!lexStates[parseState]) {
+ // throw invalidLexState(parseState)
+ // }
+
+ return lexStates[parseState]()
+ },
+
+ comment: function comment() {
+ switch (c) {
+ case '*':
+ read();
+ lexState = 'multiLineComment';
+ return
+
+ case '/':
+ read();
+ lexState = 'singleLineComment';
+ return
+ }
+
+ throw invalidChar(read())
+ },
+
+ multiLineComment: function multiLineComment() {
+ switch (c) {
+ case '*':
+ read();
+ lexState = 'multiLineCommentAsterisk';
+ return
+
+ case undefined:
+ throw invalidChar(read())
+ }
+
+ read();
+ },
+
+ multiLineCommentAsterisk: function multiLineCommentAsterisk() {
+ switch (c) {
+ case '*':
+ read();
+ return
+
+ case '/':
+ read();
+ lexState = 'default';
+ return
+
+ case undefined:
+ throw invalidChar(read())
+ }
+
+ read();
+ lexState = 'multiLineComment';
+ },
+
+ singleLineComment: function singleLineComment() {
+ switch (c) {
+ case '\n':
+ case '\r':
+ case '\u2028':
+ case '\u2029':
+ read();
+ lexState = 'default';
+ return
+
+ case undefined:
+ read();
+ return newToken('eof')
+ }
+
+ read();
+ },
+
+ value: function value() {
+ switch (c) {
+ case '{':
+ case '[':
+ return newToken('punctuator', read())
+
+ case 'n':
+ read();
+ literal('ull');
+ return newToken('null', null)
+
+ case 't':
+ read();
+ literal('rue');
+ return newToken('boolean', true)
+
+ case 'f':
+ read();
+ literal('alse');
+ return newToken('boolean', false)
+
+ case '-':
+ case '+':
+ if (read() === '-') {
+ sign = -1;
+ }
+
+ lexState = 'sign';
+ return
+
+ case '.':
+ buffer = read();
+ lexState = 'decimalPointLeading';
+ return
+
+ case '0':
+ buffer = read();
+ lexState = 'zero';
+ return
+
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ buffer = read();
+ lexState = 'decimalInteger';
+ return
+
+ case 'I':
+ read();
+ literal('nfinity');
+ return newToken('numeric', Infinity)
+
+ case 'N':
+ read();
+ literal('aN');
+ return newToken('numeric', NaN)
+
+ case '"':
+ case "'":
+ doubleQuote = (read() === '"');
+ buffer = '';
+ lexState = 'string';
+ return
+ }
+
+ throw invalidChar(read())
+ },
+
+ identifierNameStartEscape: function identifierNameStartEscape() {
+ if (c !== 'u') {
+ throw invalidChar(read())
+ }
+
+ read();
+ var u = unicodeEscape();
+ switch (u) {
+ case '$':
+ case '_':
+ break
+
+ default:
+ if (!util.isIdStartChar(u)) {
+ throw invalidIdentifier()
+ }
+
+ break
+ }
+
+ buffer += u;
+ lexState = 'identifierName';
+ },
+
+ identifierName: function identifierName() {
+ switch (c) {
+ case '$':
+ case '_':
+ case '\u200C':
+ case '\u200D':
+ buffer += read();
+ return
+
+ case '\\':
+ read();
+ lexState = 'identifierNameEscape';
+ return
+ }
+
+ if (util.isIdContinueChar(c)) {
+ buffer += read();
+ return
+ }
+
+ return newToken('identifier', buffer)
+ },
+
+ identifierNameEscape: function identifierNameEscape() {
+ if (c !== 'u') {
+ throw invalidChar(read())
+ }
+
+ read();
+ var u = unicodeEscape();
+ switch (u) {
+ case '$':
+ case '_':
+ case '\u200C':
+ case '\u200D':
+ break
+
+ default:
+ if (!util.isIdContinueChar(u)) {
+ throw invalidIdentifier()
+ }
+
+ break
+ }
+
+ buffer += u;
+ lexState = 'identifierName';
+ },
+
+ sign: function sign$1() {
+ switch (c) {
+ case '.':
+ buffer = read();
+ lexState = 'decimalPointLeading';
+ return
+
+ case '0':
+ buffer = read();
+ lexState = 'zero';
+ return
+
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ buffer = read();
+ lexState = 'decimalInteger';
+ return
+
+ case 'I':
+ read();
+ literal('nfinity');
+ return newToken('numeric', sign * Infinity)
+
+ case 'N':
+ read();
+ literal('aN');
+ return newToken('numeric', NaN)
+ }
+
+ throw invalidChar(read())
+ },
+
+ zero: function zero() {
+ switch (c) {
+ case '.':
+ buffer += read();
+ lexState = 'decimalPoint';
+ return
+
+ case 'e':
+ case 'E':
+ buffer += read();
+ lexState = 'decimalExponent';
+ return
+
+ case 'x':
+ case 'X':
+ buffer += read();
+ lexState = 'hexadecimal';
+ return
+ }
+
+ return newToken('numeric', sign * 0)
+ },
+
+ decimalInteger: function decimalInteger() {
+ switch (c) {
+ case '.':
+ buffer += read();
+ lexState = 'decimalPoint';
+ return
+
+ case 'e':
+ case 'E':
+ buffer += read();
+ lexState = 'decimalExponent';
+ return
+ }
+
+ if (util.isDigit(c)) {
+ buffer += read();
+ return
+ }
+
+ return newToken('numeric', sign * Number(buffer))
+ },
+
+ decimalPointLeading: function decimalPointLeading() {
+ if (util.isDigit(c)) {
+ buffer += read();
+ lexState = 'decimalFraction';
+ return
+ }
+
+ throw invalidChar(read())
+ },
+
+ decimalPoint: function decimalPoint() {
+ switch (c) {
+ case 'e':
+ case 'E':
+ buffer += read();
+ lexState = 'decimalExponent';
+ return
+ }
+
+ if (util.isDigit(c)) {
+ buffer += read();
+ lexState = 'decimalFraction';
+ return
+ }
+
+ return newToken('numeric', sign * Number(buffer))
+ },
+
+ decimalFraction: function decimalFraction() {
+ switch (c) {
+ case 'e':
+ case 'E':
+ buffer += read();
+ lexState = 'decimalExponent';
+ return
+ }
+
+ if (util.isDigit(c)) {
+ buffer += read();
+ return
+ }
+
+ return newToken('numeric', sign * Number(buffer))
+ },
+
+ decimalExponent: function decimalExponent() {
+ switch (c) {
+ case '+':
+ case '-':
+ buffer += read();
+ lexState = 'decimalExponentSign';
+ return
+ }
+
+ if (util.isDigit(c)) {
+ buffer += read();
+ lexState = 'decimalExponentInteger';
+ return
+ }
+
+ throw invalidChar(read())
+ },
+
+ decimalExponentSign: function decimalExponentSign() {
+ if (util.isDigit(c)) {
+ buffer += read();
+ lexState = 'decimalExponentInteger';
+ return
+ }
+
+ throw invalidChar(read())
+ },
+
+ decimalExponentInteger: function decimalExponentInteger() {
+ if (util.isDigit(c)) {
+ buffer += read();
+ return
+ }
+
+ return newToken('numeric', sign * Number(buffer))
+ },
+
+ hexadecimal: function hexadecimal() {
+ if (util.isHexDigit(c)) {
+ buffer += read();
+ lexState = 'hexadecimalInteger';
+ return
+ }
+
+ throw invalidChar(read())
+ },
+
+ hexadecimalInteger: function hexadecimalInteger() {
+ if (util.isHexDigit(c)) {
+ buffer += read();
+ return
+ }
+
+ return newToken('numeric', sign * Number(buffer))
+ },
+
+ string: function string() {
+ switch (c) {
+ case '\\':
+ read();
+ buffer += escape();
+ return
+
+ case '"':
+ if (doubleQuote) {
+ read();
+ return newToken('string', buffer)
+ }
+
+ buffer += read();
+ return
+
+ case "'":
+ if (!doubleQuote) {
+ read();
+ return newToken('string', buffer)
+ }
+
+ buffer += read();
+ return
+
+ case '\n':
+ case '\r':
+ throw invalidChar(read())
+
+ case '\u2028':
+ case '\u2029':
+ separatorChar(c);
+ break
+
+ case undefined:
+ throw invalidChar(read())
+ }
+
+ buffer += read();
+ },
+
+ start: function start() {
+ switch (c) {
+ case '{':
+ case '[':
+ return newToken('punctuator', read())
+
+ // This code is unreachable since the default lexState handles eof.
+ // case undefined:
+ // return newToken('eof')
+ }
+
+ lexState = 'value';
+ },
+
+ beforePropertyName: function beforePropertyName() {
+ switch (c) {
+ case '$':
+ case '_':
+ buffer = read();
+ lexState = 'identifierName';
+ return
+
+ case '\\':
+ read();
+ lexState = 'identifierNameStartEscape';
+ return
+
+ case '}':
+ return newToken('punctuator', read())
+
+ case '"':
+ case "'":
+ doubleQuote = (read() === '"');
+ lexState = 'string';
+ return
+ }
+
+ if (util.isIdStartChar(c)) {
+ buffer += read();
+ lexState = 'identifierName';
+ return
+ }
+
+ throw invalidChar(read())
+ },
+
+ afterPropertyName: function afterPropertyName() {
+ if (c === ':') {
+ return newToken('punctuator', read())
+ }
+
+ throw invalidChar(read())
+ },
+
+ beforePropertyValue: function beforePropertyValue() {
+ lexState = 'value';
+ },
+
+ afterPropertyValue: function afterPropertyValue() {
+ switch (c) {
+ case ',':
+ case '}':
+ return newToken('punctuator', read())
+ }
+
+ throw invalidChar(read())
+ },
+
+ beforeArrayValue: function beforeArrayValue() {
+ if (c === ']') {
+ return newToken('punctuator', read())
+ }
+
+ lexState = 'value';
+ },
+
+ afterArrayValue: function afterArrayValue() {
+ switch (c) {
+ case ',':
+ case ']':
+ return newToken('punctuator', read())
+ }
+
+ throw invalidChar(read())
+ },
+
+ end: function end() {
+ // This code is unreachable since it's handled by the default lexState.
+ // if (c === undefined) {
+ // read()
+ // return newToken('eof')
+ // }
+
+ throw invalidChar(read())
+ },
+ };
+
+ function newToken(type, value) {
+ return {
+ type: type,
+ value: value,
+ line: line,
+ column: column,
+ }
+ }
+
+ function literal(s) {
+ for (var i = 0, list = s; i < list.length; i += 1) {
+ var c = list[i];
+
+ var p = peek();
+
+ if (p !== c) {
+ throw invalidChar(read())
+ }
+
+ read();
+ }
+ }
+
+ function escape() {
+ var c = peek();
+ switch (c) {
+ case 'b':
+ read();
+ return '\b'
+
+ case 'f':
+ read();
+ return '\f'
+
+ case 'n':
+ read();
+ return '\n'
+
+ case 'r':
+ read();
+ return '\r'
+
+ case 't':
+ read();
+ return '\t'
+
+ case 'v':
+ read();
+ return '\v'
+
+ case '0':
+ read();
+ if (util.isDigit(peek())) {
+ throw invalidChar(read())
+ }
+
+ return '\0'
+
+ case 'x':
+ read();
+ return hexEscape()
+
+ case 'u':
+ read();
+ return unicodeEscape()
+
+ case '\n':
+ case '\u2028':
+ case '\u2029':
+ read();
+ return ''
+
+ case '\r':
+ read();
+ if (peek() === '\n') {
+ read();
+ }
+
+ return ''
+
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ throw invalidChar(read())
+
+ case undefined:
+ throw invalidChar(read())
+ }
+
+ return read()
+ }
+
+ function hexEscape() {
+ var buffer = '';
+ var c = peek();
+
+ if (!util.isHexDigit(c)) {
+ throw invalidChar(read())
+ }
+
+ buffer += read();
+
+ c = peek();
+ if (!util.isHexDigit(c)) {
+ throw invalidChar(read())
+ }
+
+ buffer += read();
+
+ return String.fromCodePoint(parseInt(buffer, 16))
+ }
+
+ function unicodeEscape() {
+ var buffer = '';
+ var count = 4;
+
+ while (count-- > 0) {
+ var c = peek();
+ if (!util.isHexDigit(c)) {
+ throw invalidChar(read())
+ }
+
+ buffer += read();
+ }
+
+ return String.fromCodePoint(parseInt(buffer, 16))
+ }
+
+ var parseStates = {
+ start: function start() {
+ if (token.type === 'eof') {
+ throw invalidEOF()
+ }
+
+ push();
+ },
+
+ beforePropertyName: function beforePropertyName() {
+ switch (token.type) {
+ case 'identifier':
+ case 'string':
+ key = token.value;
+ parseState = 'afterPropertyName';
+ return
+
+ case 'punctuator':
+ // This code is unreachable since it's handled by the lexState.
+ // if (token.value !== '}') {
+ // throw invalidToken()
+ // }
+
+ pop();
+ return
+
+ case 'eof':
+ throw invalidEOF()
+ }
+
+ // This code is unreachable since it's handled by the lexState.
+ // throw invalidToken()
+ },
+
+ afterPropertyName: function afterPropertyName() {
+ // This code is unreachable since it's handled by the lexState.
+ // if (token.type !== 'punctuator' || token.value !== ':') {
+ // throw invalidToken()
+ // }
+
+ if (token.type === 'eof') {
+ throw invalidEOF()
+ }
+
+ parseState = 'beforePropertyValue';
+ },
+
+ beforePropertyValue: function beforePropertyValue() {
+ if (token.type === 'eof') {
+ throw invalidEOF()
+ }
+
+ push();
+ },
+
+ beforeArrayValue: function beforeArrayValue() {
+ if (token.type === 'eof') {
+ throw invalidEOF()
+ }
+
+ if (token.type === 'punctuator' && token.value === ']') {
+ pop();
+ return
+ }
+
+ push();
+ },
+
+ afterPropertyValue: function afterPropertyValue() {
+ // This code is unreachable since it's handled by the lexState.
+ // if (token.type !== 'punctuator') {
+ // throw invalidToken()
+ // }
+
+ if (token.type === 'eof') {
+ throw invalidEOF()
+ }
+
+ switch (token.value) {
+ case ',':
+ parseState = 'beforePropertyName';
+ return
+
+ case '}':
+ pop();
+ }
+
+ // This code is unreachable since it's handled by the lexState.
+ // throw invalidToken()
+ },
+
+ afterArrayValue: function afterArrayValue() {
+ // This code is unreachable since it's handled by the lexState.
+ // if (token.type !== 'punctuator') {
+ // throw invalidToken()
+ // }
+
+ if (token.type === 'eof') {
+ throw invalidEOF()
+ }
+
+ switch (token.value) {
+ case ',':
+ parseState = 'beforeArrayValue';
+ return
+
+ case ']':
+ pop();
+ }
+
+ // This code is unreachable since it's handled by the lexState.
+ // throw invalidToken()
+ },
+
+ end: function end() {
+ // This code is unreachable since it's handled by the lexState.
+ // if (token.type !== 'eof') {
+ // throw invalidToken()
+ // }
+ },
+ };
+
+ function push() {
+ var value;
+
+ switch (token.type) {
+ case 'punctuator':
+ switch (token.value) {
+ case '{':
+ value = {};
+ break
+
+ case '[':
+ value = [];
+ break
+ }
+
+ break
+
+ case 'null':
+ case 'boolean':
+ case 'numeric':
+ case 'string':
+ value = token.value;
+ break
+
+ // This code is unreachable.
+ // default:
+ // throw invalidToken()
+ }
+
+ if (root === undefined) {
+ root = value;
+ } else {
+ var parent = stack[stack.length - 1];
+ if (Array.isArray(parent)) {
+ parent.push(value);
+ } else {
+ Object.defineProperty(parent, key, {
+ value: value,
+ writable: true,
+ enumerable: true,
+ configurable: true,
+ });
+ }
+ }
+
+ if (value !== null && typeof value === 'object') {
+ stack.push(value);
+
+ if (Array.isArray(value)) {
+ parseState = 'beforeArrayValue';
+ } else {
+ parseState = 'beforePropertyName';
+ }
+ } else {
+ var current = stack[stack.length - 1];
+ if (current == null) {
+ parseState = 'end';
+ } else if (Array.isArray(current)) {
+ parseState = 'afterArrayValue';
+ } else {
+ parseState = 'afterPropertyValue';
+ }
+ }
+ }
+
+ function pop() {
+ stack.pop();
+
+ var current = stack[stack.length - 1];
+ if (current == null) {
+ parseState = 'end';
+ } else if (Array.isArray(current)) {
+ parseState = 'afterArrayValue';
+ } else {
+ parseState = 'afterPropertyValue';
+ }
+ }
+
+ // This code is unreachable.
+ // function invalidParseState () {
+ // return new Error(`JSON5: invalid parse state '${parseState}'`)
+ // }
+
+ // This code is unreachable.
+ // function invalidLexState (state) {
+ // return new Error(`JSON5: invalid lex state '${state}'`)
+ // }
+
+ function invalidChar(c) {
+ if (c === undefined) {
+ return syntaxError(("JSON5: invalid end of input at " + line + ":" + column))
+ }
+
+ return syntaxError(("JSON5: invalid character '" + (formatChar(c)) + "' at " + line + ":" + column))
+ }
+
+ function invalidEOF() {
+ return syntaxError(("JSON5: invalid end of input at " + line + ":" + column))
+ }
+
+ // This code is unreachable.
+ // function invalidToken () {
+ // if (token.type === 'eof') {
+ // return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)
+ // }
+
+ // const c = String.fromCodePoint(token.value.codePointAt(0))
+ // return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)
+ // }
+
+ function invalidIdentifier() {
+ column -= 5;
+ return syntaxError(("JSON5: invalid identifier character at " + line + ":" + column))
+ }
+
+ function separatorChar(c) {
+ console.warn(("JSON5: '" + (formatChar(c)) + "' in strings is not valid ECMAScript; consider escaping"));
+ }
+
+ function formatChar(c) {
+ var replacements = {
+ "'": "\\'",
+ '"': '\\"',
+ '\\': '\\\\',
+ '\b': '\\b',
+ '\f': '\\f',
+ '\n': '\\n',
+ '\r': '\\r',
+ '\t': '\\t',
+ '\v': '\\v',
+ '\0': '\\0',
+ '\u2028': '\\u2028',
+ '\u2029': '\\u2029',
+ };
+
+ if (replacements[c]) {
+ return replacements[c]
+ }
+
+ if (c < ' ') {
+ var hexString = c.charCodeAt(0).toString(16);
+ return '\\x' + ('00' + hexString).substring(hexString.length)
+ }
+
+ return c
+ }
+
+ function syntaxError(message) {
+ var err = new SyntaxError(message);
+ err.lineNumber = line;
+ err.columnNumber = column;
+ return err
+ }
+
+ var stringify = function stringify(value, replacer, space) {
+ var stack = [];
+ var indent = '';
+ var propertyList;
+ var replacerFunc;
+ var gap = '';
+ var quote;
+
+ if (
+ replacer != null &&
+ typeof replacer === 'object' &&
+ !Array.isArray(replacer)
+ ) {
+ space = replacer.space;
+ quote = replacer.quote;
+ replacer = replacer.replacer;
+ }
+
+ if (typeof replacer === 'function') {
+ replacerFunc = replacer;
+ } else if (Array.isArray(replacer)) {
+ propertyList = [];
+ for (var i = 0, list = replacer; i < list.length; i += 1) {
+ var v = list[i];
+
+ var item = (void 0);
+
+ if (typeof v === 'string') {
+ item = v;
+ } else if (
+ typeof v === 'number' ||
+ v instanceof String ||
+ v instanceof Number
+ ) {
+ item = String(v);
+ }
+
+ if (item !== undefined && propertyList.indexOf(item) < 0) {
+ propertyList.push(item);
+ }
+ }
+ }
+
+ if (space instanceof Number) {
+ space = Number(space);
+ } else if (space instanceof String) {
+ space = String(space);
+ }
+
+ if (typeof space === 'number') {
+ if (space > 0) {
+ space = Math.min(10, Math.floor(space));
+ gap = ' '.substr(0, space);
+ }
+ } else if (typeof space === 'string') {
+ gap = space.substr(0, 10);
+ }
+
+ return serializeProperty('', {
+ '': value
+ })
+
+ function serializeProperty(key, holder) {
+ var value = holder[key];
+ if (value != null) {
+ if (typeof value.toJSON5 === 'function') {
+ value = value.toJSON5(key);
+ } else if (typeof value.toJSON === 'function') {
+ value = value.toJSON(key);
+ }
+ }
+
+ if (replacerFunc) {
+ value = replacerFunc.call(holder, key, value);
+ }
+
+ if (value instanceof Number) {
+ value = Number(value);
+ } else if (value instanceof String) {
+ value = String(value);
+ } else if (value instanceof Boolean) {
+ value = value.valueOf();
+ }
+
+ switch (value) {
+ case null:
+ return 'null'
+ case true:
+ return 'true'
+ case false:
+ return 'false'
+ }
+
+ if (typeof value === 'string') {
+ return quoteString(value, false)
+ }
+
+ if (typeof value === 'number') {
+ return String(value)
+ }
+
+ if (typeof value === 'object') {
+ return Array.isArray(value) ? serializeArray(value) : serializeObject(value)
+ }
+
+ return undefined
+ }
+
+ function quoteString(value) {
+ var quotes = {
+ "'": 0.1,
+ '"': 0.2,
+ };
+
+ var replacements = {
+ "'": "\\'",
+ '"': '\\"',
+ '\\': '\\\\',
+ '\b': '\\b',
+ '\f': '\\f',
+ '\n': '\\n',
+ '\r': '\\r',
+ '\t': '\\t',
+ '\v': '\\v',
+ '\0': '\\0',
+ '\u2028': '\\u2028',
+ '\u2029': '\\u2029',
+ };
+
+ var product = '';
+
+ for (var i = 0; i < value.length; i++) {
+ var c = value[i];
+ switch (c) {
+ case "'":
+ case '"':
+ quotes[c]++;
+ product += c;
+ continue
+
+ case '\0':
+ if (util.isDigit(value[i + 1])) {
+ product += '\\x00';
+ continue
+ }
+ }
+
+ if (replacements[c]) {
+ product += replacements[c];
+ continue
+ }
+
+ if (c < ' ') {
+ var hexString = c.charCodeAt(0).toString(16);
+ product += '\\x' + ('00' + hexString).substring(hexString.length);
+ continue
+ }
+
+ product += c;
+ }
+
+ var quoteChar = quote || Object.keys(quotes).reduce(function(a, b) {
+ return (quotes[a] < quotes[b]) ? a : b;
+ });
+
+ product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar]);
+
+ return quoteChar + product + quoteChar
+ }
+
+ function serializeObject(value) {
+ if (stack.indexOf(value) >= 0) {
+ throw TypeError('Converting circular structure to JSON5')
+ }
+
+ stack.push(value);
+
+ var stepback = indent;
+ indent = indent + gap;
+
+ var keys = propertyList || Object.keys(value);
+ var partial = [];
+ for (var i = 0, list = keys; i < list.length; i += 1) {
+ var key = list[i];
+
+ var propertyString = serializeProperty(key, value);
+ if (propertyString !== undefined) {
+ var member = serializeKey(key) + ':';
+ if (gap !== '') {
+ member += ' ';
+ }
+ member += propertyString;
+ partial.push(member);
+ }
+ }
+
+ var final;
+ if (partial.length === 0) {
+ final = '{}';
+ } else {
+ var properties;
+ if (gap === '') {
+ properties = partial.join(',');
+ final = '{' + properties + '}';
+ } else {
+ var separator = ',\n' + indent;
+ properties = partial.join(separator);
+ final = '{\n' + indent + properties + ',\n' + stepback + '}';
+ }
+ }
+
+ stack.pop();
+ indent = stepback;
+ return final
+ }
+
+ function serializeKey(key) {
+ if (key.length === 0) {
+ return quoteString(key, true)
+ }
+
+ var firstChar = String.fromCodePoint(key.codePointAt(0));
+ if (!util.isIdStartChar(firstChar)) {
+ return quoteString(key, true)
+ }
+
+ for (var i = firstChar.length; i < key.length; i++) {
+ if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) {
+ return quoteString(key, true)
+ }
+ }
+
+ return key
+ }
+
+ function serializeArray(value) {
+ if (stack.indexOf(value) >= 0) {
+ throw TypeError('Converting circular structure to JSON5')
+ }
+
+ stack.push(value);
+
+ var stepback = indent;
+ indent = indent + gap;
+
+ var partial = [];
+ for (var i = 0; i < value.length; i++) {
+ var propertyString = serializeProperty(String(i), value);
+ partial.push((propertyString !== undefined) ? propertyString : 'null');
+ }
+
+ var final;
+ if (partial.length === 0) {
+ final = '[]';
+ } else {
+ if (gap === '') {
+ var properties = partial.join(',');
+ final = '[' + properties + ']';
+ } else {
+ var separator = ',\n' + indent;
+ var properties$1 = partial.join(separator);
+ final = '[\n' + indent + properties$1 + ',\n' + stepback + ']';
+ }
+ }
+
+ stack.pop();
+ indent = stepback;
+ return final
+ }
+ };
+
+ var JSON5 = {
+ parse: parse,
+ stringify: stringify,
+ };
+
+ var lib = JSON5;
+
+ var es5 = lib;
+
+ return es5;
+
+})));
\ No newline at end of file
diff --git a/欧歌/api/node-rsa.js b/欧歌/api/node-rsa.js
new file mode 100644
index 0000000..fab092b
--- /dev/null
+++ b/欧歌/api/node-rsa.js
@@ -0,0 +1,5858 @@
+/*! For license information please see node-rsa.bundle.js.LICENSE.txt */ ! function(t, e) {
+ "object" == typeof exports && "object" == typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define([], e) : "object" == typeof exports ? exports.NODERSA = e() : t.NODERSA = e()
+}(globalThis, (() => (() => {
+ var t = {
+ 6395: t => {
+ t.exports = {
+ newInvalidAsn1Error: function(t) {
+ var e = new Error;
+ return e.name = "InvalidAsn1Error", e.message = t || "", e
+ }
+ }
+ },
+ 5670: (t, e, r) => {
+ var n = r(6395),
+ i = r(6299),
+ o = r(3319),
+ s = r(1431);
+ for (var a in t.exports = {
+ Reader: o,
+ Writer: s
+ }, i) i.hasOwnProperty(a) && (t.exports[a] = i[a]);
+ for (var f in n) n.hasOwnProperty(f) && (t.exports[f] = n[f])
+ },
+ 3319: (t, e, r) => {
+ var n = r(4529),
+ i = r(4774).Buffer,
+ o = r(6299),
+ s = r(6395).newInvalidAsn1Error;
+
+ function a(t) {
+ if (!t || !i.isBuffer(t)) throw new TypeError("data must be a node Buffer");
+ this._buf = t, this._size = t.length, this._len = 0, this._offset = 0
+ }
+ Object.defineProperty(a.prototype, "length", {
+ enumerable: !0,
+ get: function() {
+ return this._len
+ }
+ }), Object.defineProperty(a.prototype, "offset", {
+ enumerable: !0,
+ get: function() {
+ return this._offset
+ }
+ }), Object.defineProperty(a.prototype, "remain", {
+ get: function() {
+ return this._size - this._offset
+ }
+ }), Object.defineProperty(a.prototype, "buffer", {
+ get: function() {
+ return this._buf.slice(this._offset)
+ }
+ }), a.prototype.readByte = function(t) {
+ if (this._size - this._offset < 1) return null;
+ var e = 255 & this._buf[this._offset];
+ return t || (this._offset += 1), e
+ }, a.prototype.peek = function() {
+ return this.readByte(!0)
+ }, a.prototype.readLength = function(t) {
+ if (void 0 === t && (t = this._offset), t >= this._size) return null;
+ var e = 255 & this._buf[t++];
+ if (null === e) return null;
+ if (128 & ~e) this._len = e;
+ else {
+ if (0 == (e &= 127)) throw s("Indefinite length not supported");
+ if (e > 4) throw s("encoding too long");
+ if (this._size - t < e) return null;
+ this._len = 0;
+ for (var r = 0; r < e; r++) this._len = (this._len << 8) + (255 & this._buf[t++])
+ }
+ return t
+ }, a.prototype.readSequence = function(t) {
+ var e = this.peek();
+ if (null === e) return null;
+ if (void 0 !== t && t !== e) throw s("Expected 0x" + t.toString(16) + ": got 0x" + e.toString(16));
+ var r = this.readLength(this._offset + 1);
+ return null === r ? null : (this._offset = r, e)
+ }, a.prototype.readInt = function() {
+ return this._readTag(o.Integer)
+ }, a.prototype.readBoolean = function() {
+ return 0 !== this._readTag(o.Boolean)
+ }, a.prototype.readEnumeration = function() {
+ return this._readTag(o.Enumeration)
+ }, a.prototype.readString = function(t, e) {
+ t || (t = o.OctetString);
+ var r = this.peek();
+ if (null === r) return null;
+ if (r !== t) throw s("Expected 0x" + t.toString(16) + ": got 0x" + r.toString(16));
+ var n = this.readLength(this._offset + 1);
+ if (null === n) return null;
+ if (this.length > this._size - n) return null;
+ if (this._offset = n, 0 === this.length) return e ? i.alloc(0) : "";
+ var a = this._buf.slice(this._offset, this._offset + this.length);
+ return this._offset += this.length, e ? a : a.toString("utf8")
+ }, a.prototype.readOID = function(t) {
+ t || (t = o.OID);
+ var e = this.readString(t, !0);
+ if (null === e) return null;
+ for (var r = [], n = 0, i = 0; i < e.length; i++) {
+ var s = 255 & e[i];
+ n <<= 7, n += 127 & s, 128 & s || (r.push(n), n = 0)
+ }
+ return n = r.shift(), r.unshift(n % 40), r.unshift(n / 40 | 0), r.join(".")
+ }, a.prototype._readTag = function(t) {
+ n.ok(void 0 !== t);
+ var e = this.peek();
+ if (null === e) return null;
+ if (e !== t) throw s("Expected 0x" + t.toString(16) + ": got 0x" + e.toString(16));
+ var r = this.readLength(this._offset + 1);
+ if (null === r) return null;
+ if (this.length > 4) throw s("Integer too long: " + this.length);
+ if (this.length > this._size - r) return null;
+ this._offset = r;
+ for (var i = this._buf[this._offset], o = 0, a = 0; a < this.length; a++) o <<= 8, o |= 255 & this._buf[this._offset++];
+ return 128 & ~i || 4 === a || (o -= 1 << 8 * a), 0 | o
+ }, t.exports = a
+ },
+ 6299: t => {
+ t.exports = {
+ EOC: 0,
+ Boolean: 1,
+ Integer: 2,
+ BitString: 3,
+ OctetString: 4,
+ Null: 5,
+ OID: 6,
+ ObjectDescriptor: 7,
+ External: 8,
+ Real: 9,
+ Enumeration: 10,
+ PDV: 11,
+ Utf8String: 12,
+ RelativeOID: 13,
+ Sequence: 16,
+ Set: 17,
+ NumericString: 18,
+ PrintableString: 19,
+ T61String: 20,
+ VideotexString: 21,
+ IA5String: 22,
+ UTCTime: 23,
+ GeneralizedTime: 24,
+ GraphicString: 25,
+ VisibleString: 26,
+ GeneralString: 28,
+ UniversalString: 29,
+ CharacterString: 30,
+ BMPString: 31,
+ Constructor: 32,
+ Context: 128
+ }
+ },
+ 1431: (t, e, r) => {
+ var n = r(4529),
+ i = r(4774).Buffer,
+ o = r(6299),
+ s = r(6395).newInvalidAsn1Error,
+ a = {
+ size: 1024,
+ growthFactor: 8
+ };
+
+ function f(t) {
+ var e, r;
+ e = a, r = t || {}, n.ok(e), n.equal(typeof e, "object"), n.ok(r), n.equal(typeof r, "object"), Object.getOwnPropertyNames(e).forEach((function(t) {
+ if (!r[t]) {
+ var n = Object.getOwnPropertyDescriptor(e, t);
+ Object.defineProperty(r, t, n)
+ }
+ })), t = r, this._buf = i.alloc(t.size || 1024), this._size = this._buf.length, this._offset = 0, this._options = t, this._seq = []
+ }
+ Object.defineProperty(f.prototype, "buffer", {
+ get: function() {
+ if (this._seq.length) throw s(this._seq.length + " unended sequence(s)");
+ return this._buf.slice(0, this._offset)
+ }
+ }), f.prototype.writeByte = function(t) {
+ if ("number" != typeof t) throw new TypeError("argument must be a Number");
+ this._ensure(1), this._buf[this._offset++] = t
+ }, f.prototype.writeInt = function(t, e) {
+ if ("number" != typeof t) throw new TypeError("argument must be a Number");
+ "number" != typeof e && (e = o.Integer);
+ for (var r = 4;
+ (!(4286578688 & t) || -8388608 == (4286578688 & t)) && r > 1;) r--, t <<= 8;
+ if (r > 4) throw s("BER ints cannot be > 0xffffffff");
+ for (this._ensure(2 + r), this._buf[this._offset++] = e, this._buf[this._offset++] = r; r-- > 0;) this._buf[this._offset++] = (4278190080 & t) >>> 24, t <<= 8
+ }, f.prototype.writeNull = function() {
+ this.writeByte(o.Null), this.writeByte(0)
+ }, f.prototype.writeEnumeration = function(t, e) {
+ if ("number" != typeof t) throw new TypeError("argument must be a Number");
+ return "number" != typeof e && (e = o.Enumeration), this.writeInt(t, e)
+ }, f.prototype.writeBoolean = function(t, e) {
+ if ("boolean" != typeof t) throw new TypeError("argument must be a Boolean");
+ "number" != typeof e && (e = o.Boolean), this._ensure(3), this._buf[this._offset++] = e, this._buf[this._offset++] = 1, this._buf[this._offset++] = t ? 255 : 0
+ }, f.prototype.writeString = function(t, e) {
+ if ("string" != typeof t) throw new TypeError("argument must be a string (was: " + typeof t + ")");
+ "number" != typeof e && (e = o.OctetString);
+ var r = i.byteLength(t);
+ this.writeByte(e), this.writeLength(r), r && (this._ensure(r), this._buf.write(t, this._offset), this._offset += r)
+ }, f.prototype.writeBuffer = function(t, e) {
+ if ("number" != typeof e) throw new TypeError("tag must be a number");
+ if (!i.isBuffer(t)) throw new TypeError("argument must be a buffer");
+ this.writeByte(e), this.writeLength(t.length), this._ensure(t.length), t.copy(this._buf, this._offset, 0, t.length), this._offset += t.length
+ }, f.prototype.writeStringArray = function(t) {
+ if (!t instanceof Array) throw new TypeError("argument must be an Array[String]");
+ var e = this;
+ t.forEach((function(t) {
+ e.writeString(t)
+ }))
+ }, f.prototype.writeOID = function(t, e) {
+ if ("string" != typeof t) throw new TypeError("argument must be a string");
+ if ("number" != typeof e && (e = o.OID), !/^([0-9]+\.){3,}[0-9]+$/.test(t)) throw new Error("argument is not a valid OID string");
+ var r = t.split("."),
+ n = [];
+ n.push(40 * parseInt(r[0], 10) + parseInt(r[1], 10)), r.slice(2).forEach((function(t) {
+ ! function(t, e) {
+ e < 128 ? t.push(e) : e < 16384 ? (t.push(e >>> 7 | 128), t.push(127 & e)) : e < 2097152 ? (t.push(e >>> 14 | 128), t.push(e >>> 7 & 255 | 128), t.push(127 & e)) : e < 268435456 ? (t.push(e >>> 21 | 128), t.push(e >>> 14 & 255 | 128), t.push(e >>> 7 & 255 | 128), t.push(127 & e)) : (t.push(e >>> 28 & 255 | 128), t.push(e >>> 21 & 255 | 128), t.push(e >>> 14 & 255 | 128), t.push(e >>> 7 & 255 | 128), t.push(127 & e))
+ }(n, parseInt(t, 10))
+ }));
+ var i = this;
+ this._ensure(2 + n.length), this.writeByte(e), this.writeLength(n.length), n.forEach((function(t) {
+ i.writeByte(t)
+ }))
+ }, f.prototype.writeLength = function(t) {
+ if ("number" != typeof t) throw new TypeError("argument must be a Number");
+ if (this._ensure(4), t <= 127) this._buf[this._offset++] = t;
+ else if (t <= 255) this._buf[this._offset++] = 129, this._buf[this._offset++] = t;
+ else if (t <= 65535) this._buf[this._offset++] = 130, this._buf[this._offset++] = t >> 8, this._buf[this._offset++] = t;
+ else {
+ if (!(t <= 16777215)) throw s("Length too long (> 4 bytes)");
+ this._buf[this._offset++] = 131, this._buf[this._offset++] = t >> 16, this._buf[this._offset++] = t >> 8, this._buf[this._offset++] = t
+ }
+ }, f.prototype.startSequence = function(t) {
+ "number" != typeof t && (t = o.Sequence | o.Constructor), this.writeByte(t), this._seq.push(this._offset), this._ensure(3), this._offset += 3
+ }, f.prototype.endSequence = function() {
+ var t = this._seq.pop(),
+ e = t + 3,
+ r = this._offset - e;
+ if (r <= 127) this._shift(e, r, -2), this._buf[t] = r;
+ else if (r <= 255) this._shift(e, r, -1), this._buf[t] = 129, this._buf[t + 1] = r;
+ else if (r <= 65535) this._buf[t] = 130, this._buf[t + 1] = r >> 8, this._buf[t + 2] = r;
+ else {
+ if (!(r <= 16777215)) throw s("Sequence too long");
+ this._shift(e, r, 1), this._buf[t] = 131, this._buf[t + 1] = r >> 16, this._buf[t + 2] = r >> 8, this._buf[t + 3] = r
+ }
+ }, f.prototype._shift = function(t, e, r) {
+ n.ok(void 0 !== t), n.ok(void 0 !== e), n.ok(r), this._buf.copy(this._buf, t + r, t, t + e), this._offset += r
+ }, f.prototype._ensure = function(t) {
+ if (n.ok(t), this._size - this._offset < t) {
+ var e = this._size * this._options.growthFactor;
+ e - this._offset < t && (e += t);
+ var r = i.alloc(e);
+ this._buf.copy(r, 0, 0, this._offset), this._buf = r, this._size = e
+ }
+ }, t.exports = f
+ },
+ 3100: (t, e, r) => {
+ var n = r(5670);
+ t.exports = {
+ Ber: n,
+ BerReader: n.Reader,
+ BerWriter: n.Writer
+ }
+ },
+ 4529: (t, e, r) => {
+ "use strict";
+ var n = r(1514)();
+
+ function i(t, e) {
+ if (t === e) return 0;
+ for (var r = t.length, n = e.length, i = 0, o = Math.min(r, n); i < o; ++i)
+ if (t[i] !== e[i]) {
+ r = t[i], n = e[i];
+ break
+ } return r < n ? -1 : n < r ? 1 : 0
+ }
+
+ function o(t) {
+ return r.g.Buffer && "function" == typeof r.g.Buffer.isBuffer ? r.g.Buffer.isBuffer(t) : !(null == t || !t._isBuffer)
+ }
+ var s = r(4591),
+ a = Object.prototype.hasOwnProperty,
+ f = Array.prototype.slice,
+ u = "foo" === function() {}.name;
+
+ function c(t) {
+ return Object.prototype.toString.call(t)
+ }
+
+ function h(t) {
+ return !o(t) && "function" == typeof r.g.ArrayBuffer && ("function" == typeof ArrayBuffer.isView ? ArrayBuffer.isView(t) : !!t && (t instanceof DataView || !!(t.buffer && t.buffer instanceof ArrayBuffer)))
+ }
+ var p = t.exports = m,
+ l = /\s*function\s+([^\(\s]*)\s*/;
+
+ function y(t) {
+ if (s.isFunction(t)) {
+ if (u) return t.name;
+ var e = t.toString().match(l);
+ return e && e[1]
+ }
+ }
+
+ function g(t, e) {
+ return "string" == typeof t ? t.length < e ? t : t.slice(0, e) : t
+ }
+
+ function d(t) {
+ if (u || !s.isFunction(t)) return s.inspect(t);
+ var e = y(t);
+ return "[Function" + (e ? ": " + e : "") + "]"
+ }
+
+ function v(t, e, r, n, i) {
+ throw new p.AssertionError({
+ message: r,
+ actual: t,
+ expected: e,
+ operator: n,
+ stackStartFunction: i
+ })
+ }
+
+ function m(t, e) {
+ t || v(t, !0, e, "==", p.ok)
+ }
+
+ function S(t, e, r, n) {
+ if (t === e) return !0;
+ if (o(t) && o(e)) return 0 === i(t, e);
+ if (s.isDate(t) && s.isDate(e)) return t.getTime() === e.getTime();
+ if (s.isRegExp(t) && s.isRegExp(e)) return t.source === e.source && t.global === e.global && t.multiline === e.multiline && t.lastIndex === e.lastIndex && t.ignoreCase === e.ignoreCase;
+ if (null !== t && "object" == typeof t || null !== e && "object" == typeof e) {
+ if (h(t) && h(e) && c(t) === c(e) && !(t instanceof Float32Array || t instanceof Float64Array)) return 0 === i(new Uint8Array(t.buffer), new Uint8Array(e.buffer));
+ if (o(t) !== o(e)) return !1;
+ var a = (n = n || {
+ actual: [],
+ expected: []
+ }).actual.indexOf(t);
+ return -1 !== a && a === n.expected.indexOf(e) || (n.actual.push(t), n.expected.push(e), function(t, e, r, n) {
+ if (null == t || null == e) return !1;
+ if (s.isPrimitive(t) || s.isPrimitive(e)) return t === e;
+ if (r && Object.getPrototypeOf(t) !== Object.getPrototypeOf(e)) return !1;
+ var i = _(t),
+ o = _(e);
+ if (i && !o || !i && o) return !1;
+ if (i) return S(t = f.call(t), e = f.call(e), r);
+ var a, u, c = w(t),
+ h = w(e);
+ if (c.length !== h.length) return !1;
+ for (c.sort(), h.sort(), u = c.length - 1; u >= 0; u--)
+ if (c[u] !== h[u]) return !1;
+ for (u = c.length - 1; u >= 0; u--)
+ if (!S(t[a = c[u]], e[a], r, n)) return !1;
+ return !0
+ }(t, e, r, n))
+ }
+ return r ? t === e : t == e
+ }
+
+ function _(t) {
+ return "[object Arguments]" == Object.prototype.toString.call(t)
+ }
+
+ function b(t, e) {
+ if (!t || !e) return !1;
+ if ("[object RegExp]" == Object.prototype.toString.call(e)) return e.test(t);
+ try {
+ if (t instanceof e) return !0
+ } catch (t) {}
+ return !Error.isPrototypeOf(e) && !0 === e.call({}, t)
+ }
+
+ function E(t, e, r, n) {
+ var i;
+ if ("function" != typeof e) throw new TypeError('"block" argument must be a function');
+ "string" == typeof r && (n = r, r = null), i = function(t) {
+ var e;
+ try {
+ t()
+ } catch (t) {
+ e = t
+ }
+ return e
+ }(e), n = (r && r.name ? " (" + r.name + ")." : ".") + (n ? " " + n : "."), t && !i && v(i, r, "Missing expected exception" + n);
+ var o = "string" == typeof n,
+ a = !t && i && !r;
+ if ((!t && s.isError(i) && o && b(i, r) || a) && v(i, r, "Got unwanted exception" + n), t && i && r && !b(i, r) || !t && i) throw i
+ }
+ p.AssertionError = function(t) {
+ this.name = "AssertionError", this.actual = t.actual, this.expected = t.expected, this.operator = t.operator, t.message ? (this.message = t.message, this.generatedMessage = !1) : (this.message = g(d(this.actual), 128) + " " + this.operator + " " + g(d(this.expected), 128), this.generatedMessage = !0);
+ var e = t.stackStartFunction || v;
+ if (Error.captureStackTrace) Error.captureStackTrace(this, e);
+ else {
+ var r = new Error;
+ if (r.stack) {
+ var n = r.stack,
+ i = y(e),
+ o = n.indexOf("\n" + i);
+ if (o >= 0) {
+ var s = n.indexOf("\n", o + 1);
+ n = n.substring(s + 1)
+ }
+ this.stack = n
+ }
+ }
+ }, s.inherits(p.AssertionError, Error), p.fail = v, p.ok = m, p.equal = function(t, e, r) {
+ t != e && v(t, e, r, "==", p.equal)
+ }, p.notEqual = function(t, e, r) {
+ t == e && v(t, e, r, "!=", p.notEqual)
+ }, p.deepEqual = function(t, e, r) {
+ S(t, e, !1) || v(t, e, r, "deepEqual", p.deepEqual)
+ }, p.deepStrictEqual = function(t, e, r) {
+ S(t, e, !0) || v(t, e, r, "deepStrictEqual", p.deepStrictEqual)
+ }, p.notDeepEqual = function(t, e, r) {
+ S(t, e, !1) && v(t, e, r, "notDeepEqual", p.notDeepEqual)
+ }, p.notDeepStrictEqual = function t(e, r, n) {
+ S(e, r, !0) && v(e, r, n, "notDeepStrictEqual", t)
+ }, p.strictEqual = function(t, e, r) {
+ t !== e && v(t, e, r, "===", p.strictEqual)
+ }, p.notStrictEqual = function(t, e, r) {
+ t === e && v(t, e, r, "!==", p.notStrictEqual)
+ }, p.throws = function(t, e, r) {
+ E(!0, t, e, r)
+ }, p.doesNotThrow = function(t, e, r) {
+ E(!1, t, e, r)
+ }, p.ifError = function(t) {
+ if (t) throw t
+ }, p.strict = n((function t(e, r) {
+ e || v(e, !0, r, "==", t)
+ }), p, {
+ equal: p.strictEqual,
+ deepEqual: p.deepStrictEqual,
+ notEqual: p.notStrictEqual,
+ notDeepEqual: p.notDeepStrictEqual
+ }), p.strict.strict = p.strict;
+ var w = Object.keys || function(t) {
+ var e = [];
+ for (var r in t) a.call(t, r) && e.push(r);
+ return e
+ }
+ },
+ 6100: t => {
+ "function" == typeof Object.create ? t.exports = function(t, e) {
+ t.super_ = e, t.prototype = Object.create(e.prototype, {
+ constructor: {
+ value: t,
+ enumerable: !1,
+ writable: !0,
+ configurable: !0
+ }
+ })
+ } : t.exports = function(t, e) {
+ t.super_ = e;
+ var r = function() {};
+ r.prototype = e.prototype, t.prototype = new r, t.prototype.constructor = t
+ }
+ },
+ 3845: t => {
+ t.exports = function(t) {
+ return t && "object" == typeof t && "function" == typeof t.copy && "function" == typeof t.fill && "function" == typeof t.readUInt8
+ }
+ },
+ 4591: (t, e, r) => {
+ var n = r(5606),
+ i = /%[sdj%]/g;
+ e.format = function(t) {
+ if (!v(t)) {
+ for (var e = [], r = 0; r < arguments.length; r++) e.push(a(arguments[r]));
+ return e.join(" ")
+ }
+ r = 1;
+ for (var n = arguments, o = n.length, s = String(t).replace(i, (function(t) {
+ if ("%%" === t) return "%";
+ if (r >= o) return t;
+ switch (t) {
+ case "%s":
+ return String(n[r++]);
+ case "%d":
+ return Number(n[r++]);
+ case "%j":
+ try {
+ return JSON.stringify(n[r++])
+ } catch (t) {
+ return "[Circular]"
+ }
+ default:
+ return t
+ }
+ })), f = n[r]; r < o; f = n[++r]) g(f) || !_(f) ? s += " " + f : s += " " + a(f);
+ return s
+ }, e.deprecate = function(t, i) {
+ if (m(r.g.process)) return function() {
+ return e.deprecate(t, i).apply(this, arguments)
+ };
+ if (!0 === n.noDeprecation) return t;
+ var o = !1;
+ return function() {
+ if (!o) {
+ if (n.throwDeprecation) throw new Error(i);
+ n.traceDeprecation ? console.trace(i) : console.error(i), o = !0
+ }
+ return t.apply(this, arguments)
+ }
+ };
+ var o, s = {};
+
+ function a(t, r) {
+ var n = {
+ seen: [],
+ stylize: u
+ };
+ return arguments.length >= 3 && (n.depth = arguments[2]), arguments.length >= 4 && (n.colors = arguments[3]), y(r) ? n.showHidden = r : r && e._extend(n, r), m(n.showHidden) && (n.showHidden = !1), m(n.depth) && (n.depth = 2), m(n.colors) && (n.colors = !1), m(n.customInspect) && (n.customInspect = !0), n.colors && (n.stylize = f), c(n, t, n.depth)
+ }
+
+ function f(t, e) {
+ var r = a.styles[e];
+ return r ? "[" + a.colors[r][0] + "m" + t + "[" + a.colors[r][1] + "m" : t
+ }
+
+ function u(t, e) {
+ return t
+ }
+
+ function c(t, r, n) {
+ if (t.customInspect && r && w(r.inspect) && r.inspect !== e.inspect && (!r.constructor || r.constructor.prototype !== r)) {
+ var i = r.inspect(n, t);
+ return v(i) || (i = c(t, i, n)), i
+ }
+ var o = function(t, e) {
+ if (m(e)) return t.stylize("undefined", "undefined");
+ if (v(e)) {
+ var r = "'" + JSON.stringify(e).replace(/^"|"$/g, "").replace(/'/g, "\\'").replace(/\\"/g, '"') + "'";
+ return t.stylize(r, "string")
+ }
+ return d(e) ? t.stylize("" + e, "number") : y(e) ? t.stylize("" + e, "boolean") : g(e) ? t.stylize("null", "null") : void 0
+ }(t, r);
+ if (o) return o;
+ var s = Object.keys(r),
+ a = function(t) {
+ var e = {};
+ return t.forEach((function(t, r) {
+ e[t] = !0
+ })), e
+ }(s);
+ if (t.showHidden && (s = Object.getOwnPropertyNames(r)), E(r) && (s.indexOf("message") >= 0 || s.indexOf("description") >= 0)) return h(r);
+ if (0 === s.length) {
+ if (w(r)) {
+ var f = r.name ? ": " + r.name : "";
+ return t.stylize("[Function" + f + "]", "special")
+ }
+ if (S(r)) return t.stylize(RegExp.prototype.toString.call(r), "regexp");
+ if (b(r)) return t.stylize(Date.prototype.toString.call(r), "date");
+ if (E(r)) return h(r)
+ }
+ var u, _ = "",
+ O = !1,
+ B = ["{", "}"];
+ return l(r) && (O = !0, B = ["[", "]"]), w(r) && (_ = " [Function" + (r.name ? ": " + r.name : "") + "]"), S(r) && (_ = " " + RegExp.prototype.toString.call(r)), b(r) && (_ = " " + Date.prototype.toUTCString.call(r)), E(r) && (_ = " " + h(r)), 0 !== s.length || O && 0 != r.length ? n < 0 ? S(r) ? t.stylize(RegExp.prototype.toString.call(r), "regexp") : t.stylize("[Object]", "special") : (t.seen.push(r), u = O ? function(t, e, r, n, i) {
+ for (var o = [], s = 0, a = e.length; s < a; ++s) x(e, String(s)) ? o.push(p(t, e, r, n, String(s), !0)) : o.push("");
+ return i.forEach((function(i) {
+ i.match(/^\d+$/) || o.push(p(t, e, r, n, i, !0))
+ })), o
+ }(t, r, n, a, s) : s.map((function(e) {
+ return p(t, r, n, a, e, O)
+ })), t.seen.pop(), function(t, e, r) {
+ return t.reduce((function(t, e) {
+ return e.indexOf("\n"), t + e.replace(/\u001b\[\d\d?m/g, "").length + 1
+ }), 0) > 60 ? r[0] + ("" === e ? "" : e + "\n ") + " " + t.join(",\n ") + " " + r[1] : r[0] + e + " " + t.join(", ") + " " + r[1]
+ }(u, _, B)) : B[0] + _ + B[1]
+ }
+
+ function h(t) {
+ return "[" + Error.prototype.toString.call(t) + "]"
+ }
+
+ function p(t, e, r, n, i, o) {
+ var s, a, f;
+ if ((f = Object.getOwnPropertyDescriptor(e, i) || {
+ value: e[i]
+ }).get ? a = f.set ? t.stylize("[Getter/Setter]", "special") : t.stylize("[Getter]", "special") : f.set && (a = t.stylize("[Setter]", "special")), x(n, i) || (s = "[" + i + "]"), a || (t.seen.indexOf(f.value) < 0 ? (a = g(r) ? c(t, f.value, null) : c(t, f.value, r - 1)).indexOf("\n") > -1 && (a = o ? a.split("\n").map((function(t) {
+ return " " + t
+ })).join("\n").substr(2) : "\n" + a.split("\n").map((function(t) {
+ return " " + t
+ })).join("\n")) : a = t.stylize("[Circular]", "special")), m(s)) {
+ if (o && i.match(/^\d+$/)) return a;
+ (s = JSON.stringify("" + i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/) ? (s = s.substr(1, s.length - 2), s = t.stylize(s, "name")) : (s = s.replace(/'/g, "\\'").replace(/\\"/g, '"').replace(/(^"|"$)/g, "'"), s = t.stylize(s, "string"))
+ }
+ return s + ": " + a
+ }
+
+ function l(t) {
+ return Array.isArray(t)
+ }
+
+ function y(t) {
+ return "boolean" == typeof t
+ }
+
+ function g(t) {
+ return null === t
+ }
+
+ function d(t) {
+ return "number" == typeof t
+ }
+
+ function v(t) {
+ return "string" == typeof t
+ }
+
+ function m(t) {
+ return void 0 === t
+ }
+
+ function S(t) {
+ return _(t) && "[object RegExp]" === O(t)
+ }
+
+ function _(t) {
+ return "object" == typeof t && null !== t
+ }
+
+ function b(t) {
+ return _(t) && "[object Date]" === O(t)
+ }
+
+ function E(t) {
+ return _(t) && ("[object Error]" === O(t) || t instanceof Error)
+ }
+
+ function w(t) {
+ return "function" == typeof t
+ }
+
+ function O(t) {
+ return Object.prototype.toString.call(t)
+ }
+
+ function B(t) {
+ return t < 10 ? "0" + t.toString(10) : t.toString(10)
+ }
+ e.debuglog = function(t) {
+ if (m(o) && (o = n.env.NODE_DEBUG || ""), t = t.toUpperCase(), !s[t])
+ if (new RegExp("\\b" + t + "\\b", "i").test(o)) {
+ var r = n.pid;
+ s[t] = function() {
+ var n = e.format.apply(e, arguments);
+ console.error("%s %d: %s", t, r, n)
+ }
+ } else s[t] = function() {};
+ return s[t]
+ }, e.inspect = a, a.colors = {
+ bold: [1, 22],
+ italic: [3, 23],
+ underline: [4, 24],
+ inverse: [7, 27],
+ white: [37, 39],
+ grey: [90, 39],
+ black: [30, 39],
+ blue: [34, 39],
+ cyan: [36, 39],
+ green: [32, 39],
+ magenta: [35, 39],
+ red: [31, 39],
+ yellow: [33, 39]
+ }, a.styles = {
+ special: "cyan",
+ number: "yellow",
+ boolean: "yellow",
+ undefined: "grey",
+ null: "bold",
+ string: "green",
+ date: "magenta",
+ regexp: "red"
+ }, e.isArray = l, e.isBoolean = y, e.isNull = g, e.isNullOrUndefined = function(t) {
+ return null == t
+ }, e.isNumber = d, e.isString = v, e.isSymbol = function(t) {
+ return "symbol" == typeof t
+ }, e.isUndefined = m, e.isRegExp = S, e.isObject = _, e.isDate = b, e.isError = E, e.isFunction = w, e.isPrimitive = function(t) {
+ return null === t || "boolean" == typeof t || "number" == typeof t || "string" == typeof t || "symbol" == typeof t || void 0 === t
+ }, e.isBuffer = r(3845);
+ var A = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
+
+ function x(t, e) {
+ return Object.prototype.hasOwnProperty.call(t, e)
+ }
+ e.log = function() {
+ var t, r;
+ console.log("%s - %s", (r = [B((t = new Date).getHours()), B(t.getMinutes()), B(t.getSeconds())].join(":"), [t.getDate(), A[t.getMonth()], r].join(" ")), e.format.apply(e, arguments))
+ }, e.inherits = r(6100), e._extend = function(t, e) {
+ if (!e || !_(e)) return t;
+ for (var r = Object.keys(e), n = r.length; n--;) t[r[n]] = e[r[n]];
+ return t
+ }
+ },
+ 7526: (t, e) => {
+ "use strict";
+ e.byteLength = function(t) {
+ var e = a(t),
+ r = e[0],
+ n = e[1];
+ return 3 * (r + n) / 4 - n
+ }, e.toByteArray = function(t) {
+ var e, r, o = a(t),
+ s = o[0],
+ f = o[1],
+ u = new i(function(t, e, r) {
+ return 3 * (e + r) / 4 - r
+ }(0, s, f)),
+ c = 0,
+ h = f > 0 ? s - 4 : s;
+ for (r = 0; r < h; r += 4) e = n[t.charCodeAt(r)] << 18 | n[t.charCodeAt(r + 1)] << 12 | n[t.charCodeAt(r + 2)] << 6 | n[t.charCodeAt(r + 3)], u[c++] = e >> 16 & 255, u[c++] = e >> 8 & 255, u[c++] = 255 & e;
+ return 2 === f && (e = n[t.charCodeAt(r)] << 2 | n[t.charCodeAt(r + 1)] >> 4, u[c++] = 255 & e), 1 === f && (e = n[t.charCodeAt(r)] << 10 | n[t.charCodeAt(r + 1)] << 4 | n[t.charCodeAt(r + 2)] >> 2, u[c++] = e >> 8 & 255, u[c++] = 255 & e), u
+ }, e.fromByteArray = function(t) {
+ for (var e, n = t.length, i = n % 3, o = [], s = 16383, a = 0, u = n - i; a < u; a += s) o.push(f(t, a, a + s > u ? u : a + s));
+ return 1 === i ? (e = t[n - 1], o.push(r[e >> 2] + r[e << 4 & 63] + "==")) : 2 === i && (e = (t[n - 2] << 8) + t[n - 1], o.push(r[e >> 10] + r[e >> 4 & 63] + r[e << 2 & 63] + "=")), o.join("")
+ };
+ for (var r = [], n = [], i = "undefined" != typeof Uint8Array ? Uint8Array : Array, o = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", s = 0; s < 64; ++s) r[s] = o[s], n[o.charCodeAt(s)] = s;
+
+ function a(t) {
+ var e = t.length;
+ if (e % 4 > 0) throw new Error("Invalid string. Length must be a multiple of 4");
+ var r = t.indexOf("=");
+ return -1 === r && (r = e), [r, r === e ? 0 : 4 - r % 4]
+ }
+
+ function f(t, e, n) {
+ for (var i, o, s = [], a = e; a < n; a += 3) i = (t[a] << 16 & 16711680) + (t[a + 1] << 8 & 65280) + (255 & t[a + 2]), s.push(r[(o = i) >> 18 & 63] + r[o >> 12 & 63] + r[o >> 6 & 63] + r[63 & o]);
+ return s.join("")
+ }
+ n["-".charCodeAt(0)] = 62, n["_".charCodeAt(0)] = 63
+ },
+ 8287: (t, e, r) => {
+ "use strict";
+ var n = r(7526),
+ i = r(251);
+ e.Buffer = a, e.SlowBuffer = function(t) {
+ return +t != t && (t = 0), a.alloc(+t)
+ }, e.INSPECT_MAX_BYTES = 50;
+ var o = 2147483647;
+
+ function s(t) {
+ if (t > o) throw new RangeError('The value "' + t + '" is invalid for option "size"');
+ var e = new Uint8Array(t);
+ return e.__proto__ = a.prototype, e
+ }
+
+ function a(t, e, r) {
+ if ("number" == typeof t) {
+ if ("string" == typeof e) throw new TypeError('The "string" argument must be of type string. Received type number');
+ return c(t)
+ }
+ return f(t, e, r)
+ }
+
+ function f(t, e, r) {
+ if ("string" == typeof t) return function(t, e) {
+ if ("string" == typeof e && "" !== e || (e = "utf8"), !a.isEncoding(e)) throw new TypeError("Unknown encoding: " + e);
+ var r = 0 | l(t, e),
+ n = s(r),
+ i = n.write(t, e);
+ return i !== r && (n = n.slice(0, i)), n
+ }(t, e);
+ if (ArrayBuffer.isView(t)) return h(t);
+ if (null == t) throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof t);
+ if (H(t, ArrayBuffer) || t && H(t.buffer, ArrayBuffer)) return function(t, e, r) {
+ if (e < 0 || t.byteLength < e) throw new RangeError('"offset" is outside of buffer bounds');
+ if (t.byteLength < e + (r || 0)) throw new RangeError('"length" is outside of buffer bounds');
+ var n;
+ return (n = void 0 === e && void 0 === r ? new Uint8Array(t) : void 0 === r ? new Uint8Array(t, e) : new Uint8Array(t, e, r)).__proto__ = a.prototype, n
+ }(t, e, r);
+ if ("number" == typeof t) throw new TypeError('The "value" argument must not be of type number. Received type number');
+ var n = t.valueOf && t.valueOf();
+ if (null != n && n !== t) return a.from(n, e, r);
+ var i = function(t) {
+ if (a.isBuffer(t)) {
+ var e = 0 | p(t.length),
+ r = s(e);
+ return 0 === r.length || t.copy(r, 0, 0, e), r
+ }
+ return void 0 !== t.length ? "number" != typeof t.length || F(t.length) ? s(0) : h(t) : "Buffer" === t.type && Array.isArray(t.data) ? h(t.data) : void 0
+ }(t);
+ if (i) return i;
+ if ("undefined" != typeof Symbol && null != Symbol.toPrimitive && "function" == typeof t[Symbol.toPrimitive]) return a.from(t[Symbol.toPrimitive]("string"), e, r);
+ throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof t)
+ }
+
+ function u(t) {
+ if ("number" != typeof t) throw new TypeError('"size" argument must be of type number');
+ if (t < 0) throw new RangeError('The value "' + t + '" is invalid for option "size"')
+ }
+
+ function c(t) {
+ return u(t), s(t < 0 ? 0 : 0 | p(t))
+ }
+
+ function h(t) {
+ for (var e = t.length < 0 ? 0 : 0 | p(t.length), r = s(e), n = 0; n < e; n += 1) r[n] = 255 & t[n];
+ return r
+ }
+
+ function p(t) {
+ if (t >= o) throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + o.toString(16) + " bytes");
+ return 0 | t
+ }
+
+ function l(t, e) {
+ if (a.isBuffer(t)) return t.length;
+ if (ArrayBuffer.isView(t) || H(t, ArrayBuffer)) return t.byteLength;
+ if ("string" != typeof t) throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type ' + typeof t);
+ var r = t.length,
+ n = arguments.length > 2 && !0 === arguments[2];
+ if (!n && 0 === r) return 0;
+ for (var i = !1;;) switch (e) {
+ case "ascii":
+ case "latin1":
+ case "binary":
+ return r;
+ case "utf8":
+ case "utf-8":
+ return U(t).length;
+ case "ucs2":
+ case "ucs-2":
+ case "utf16le":
+ case "utf-16le":
+ return 2 * r;
+ case "hex":
+ return r >>> 1;
+ case "base64":
+ return M(t).length;
+ default:
+ if (i) return n ? -1 : U(t).length;
+ e = ("" + e).toLowerCase(), i = !0
+ }
+ }
+
+ function y(t, e, r) {
+ var n = !1;
+ if ((void 0 === e || e < 0) && (e = 0), e > this.length) return "";
+ if ((void 0 === r || r > this.length) && (r = this.length), r <= 0) return "";
+ if ((r >>>= 0) <= (e >>>= 0)) return "";
+ for (t || (t = "utf8");;) switch (t) {
+ case "hex":
+ return T(this, e, r);
+ case "utf8":
+ case "utf-8":
+ return B(this, e, r);
+ case "ascii":
+ return x(this, e, r);
+ case "latin1":
+ case "binary":
+ return P(this, e, r);
+ case "base64":
+ return O(this, e, r);
+ case "ucs2":
+ case "ucs-2":
+ case "utf16le":
+ case "utf-16le":
+ return I(this, e, r);
+ default:
+ if (n) throw new TypeError("Unknown encoding: " + t);
+ t = (t + "").toLowerCase(), n = !0
+ }
+ }
+
+ function g(t, e, r) {
+ var n = t[e];
+ t[e] = t[r], t[r] = n
+ }
+
+ function d(t, e, r, n, i) {
+ if (0 === t.length) return -1;
+ if ("string" == typeof r ? (n = r, r = 0) : r > 2147483647 ? r = 2147483647 : r < -2147483648 && (r = -2147483648), F(r = +r) && (r = i ? 0 : t.length - 1), r < 0 && (r = t.length + r), r >= t.length) {
+ if (i) return -1;
+ r = t.length - 1
+ } else if (r < 0) {
+ if (!i) return -1;
+ r = 0
+ }
+ if ("string" == typeof e && (e = a.from(e, n)), a.isBuffer(e)) return 0 === e.length ? -1 : v(t, e, r, n, i);
+ if ("number" == typeof e) return e &= 255, "function" == typeof Uint8Array.prototype.indexOf ? i ? Uint8Array.prototype.indexOf.call(t, e, r) : Uint8Array.prototype.lastIndexOf.call(t, e, r) : v(t, [e], r, n, i);
+ throw new TypeError("val must be string, number or Buffer")
+ }
+
+ function v(t, e, r, n, i) {
+ var o, s = 1,
+ a = t.length,
+ f = e.length;
+ if (void 0 !== n && ("ucs2" === (n = String(n).toLowerCase()) || "ucs-2" === n || "utf16le" === n || "utf-16le" === n)) {
+ if (t.length < 2 || e.length < 2) return -1;
+ s = 2, a /= 2, f /= 2, r /= 2
+ }
+
+ function u(t, e) {
+ return 1 === s ? t[e] : t.readUInt16BE(e * s)
+ }
+ if (i) {
+ var c = -1;
+ for (o = r; o < a; o++)
+ if (u(t, o) === u(e, -1 === c ? 0 : o - c)) {
+ if (-1 === c && (c = o), o - c + 1 === f) return c * s
+ } else - 1 !== c && (o -= o - c), c = -1
+ } else
+ for (r + f > a && (r = a - f), o = r; o >= 0; o--) {
+ for (var h = !0, p = 0; p < f; p++)
+ if (u(t, o + p) !== u(e, p)) {
+ h = !1;
+ break
+ } if (h) return o
+ }
+ return -1
+ }
+
+ function m(t, e, r, n) {
+ r = Number(r) || 0;
+ var i = t.length - r;
+ n ? (n = Number(n)) > i && (n = i) : n = i;
+ var o = e.length;
+ n > o / 2 && (n = o / 2);
+ for (var s = 0; s < n; ++s) {
+ var a = parseInt(e.substr(2 * s, 2), 16);
+ if (F(a)) return s;
+ t[r + s] = a
+ }
+ return s
+ }
+
+ function S(t, e, r, n) {
+ return j(U(e, t.length - r), t, r, n)
+ }
+
+ function _(t, e, r, n) {
+ return j(function(t) {
+ for (var e = [], r = 0; r < t.length; ++r) e.push(255 & t.charCodeAt(r));
+ return e
+ }(e), t, r, n)
+ }
+
+ function b(t, e, r, n) {
+ return _(t, e, r, n)
+ }
+
+ function E(t, e, r, n) {
+ return j(M(e), t, r, n)
+ }
+
+ function w(t, e, r, n) {
+ return j(function(t, e) {
+ for (var r, n, i, o = [], s = 0; s < t.length && !((e -= 2) < 0); ++s) n = (r = t.charCodeAt(s)) >> 8, i = r % 256, o.push(i), o.push(n);
+ return o
+ }(e, t.length - r), t, r, n)
+ }
+
+ function O(t, e, r) {
+ return 0 === e && r === t.length ? n.fromByteArray(t) : n.fromByteArray(t.slice(e, r))
+ }
+
+ function B(t, e, r) {
+ r = Math.min(t.length, r);
+ for (var n = [], i = e; i < r;) {
+ var o, s, a, f, u = t[i],
+ c = null,
+ h = u > 239 ? 4 : u > 223 ? 3 : u > 191 ? 2 : 1;
+ if (i + h <= r) switch (h) {
+ case 1:
+ u < 128 && (c = u);
+ break;
+ case 2:
+ 128 == (192 & (o = t[i + 1])) && (f = (31 & u) << 6 | 63 & o) > 127 && (c = f);
+ break;
+ case 3:
+ o = t[i + 1], s = t[i + 2], 128 == (192 & o) && 128 == (192 & s) && (f = (15 & u) << 12 | (63 & o) << 6 | 63 & s) > 2047 && (f < 55296 || f > 57343) && (c = f);
+ break;
+ case 4:
+ o = t[i + 1], s = t[i + 2], a = t[i + 3], 128 == (192 & o) && 128 == (192 & s) && 128 == (192 & a) && (f = (15 & u) << 18 | (63 & o) << 12 | (63 & s) << 6 | 63 & a) > 65535 && f < 1114112 && (c = f)
+ }
+ null === c ? (c = 65533, h = 1) : c > 65535 && (c -= 65536, n.push(c >>> 10 & 1023 | 55296), c = 56320 | 1023 & c), n.push(c), i += h
+ }
+ return function(t) {
+ var e = t.length;
+ if (e <= A) return String.fromCharCode.apply(String, t);
+ for (var r = "", n = 0; n < e;) r += String.fromCharCode.apply(String, t.slice(n, n += A));
+ return r
+ }(n)
+ }
+ e.kMaxLength = o, a.TYPED_ARRAY_SUPPORT = function() {
+ try {
+ var t = new Uint8Array(1);
+ return t.__proto__ = {
+ __proto__: Uint8Array.prototype,
+ foo: function() {
+ return 42
+ }
+ }, 42 === t.foo()
+ } catch (t) {
+ return !1
+ }
+ }(), a.TYPED_ARRAY_SUPPORT || "undefined" == typeof console || "function" != typeof console.error || console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."), Object.defineProperty(a.prototype, "parent", {
+ enumerable: !0,
+ get: function() {
+ if (a.isBuffer(this)) return this.buffer
+ }
+ }), Object.defineProperty(a.prototype, "offset", {
+ enumerable: !0,
+ get: function() {
+ if (a.isBuffer(this)) return this.byteOffset
+ }
+ }), "undefined" != typeof Symbol && null != Symbol.species && a[Symbol.species] === a && Object.defineProperty(a, Symbol.species, {
+ value: null,
+ configurable: !0,
+ enumerable: !1,
+ writable: !1
+ }), a.poolSize = 8192, a.from = function(t, e, r) {
+ return f(t, e, r)
+ }, a.prototype.__proto__ = Uint8Array.prototype, a.__proto__ = Uint8Array, a.alloc = function(t, e, r) {
+ return function(t, e, r) {
+ return u(t), t <= 0 ? s(t) : void 0 !== e ? "string" == typeof r ? s(t).fill(e, r) : s(t).fill(e) : s(t)
+ }(t, e, r)
+ }, a.allocUnsafe = function(t) {
+ return c(t)
+ }, a.allocUnsafeSlow = function(t) {
+ return c(t)
+ }, a.isBuffer = function(t) {
+ return null != t && !0 === t._isBuffer && t !== a.prototype
+ }, a.compare = function(t, e) {
+ if (H(t, Uint8Array) && (t = a.from(t, t.offset, t.byteLength)), H(e, Uint8Array) && (e = a.from(e, e.offset, e.byteLength)), !a.isBuffer(t) || !a.isBuffer(e)) throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');
+ if (t === e) return 0;
+ for (var r = t.length, n = e.length, i = 0, o = Math.min(r, n); i < o; ++i)
+ if (t[i] !== e[i]) {
+ r = t[i], n = e[i];
+ break
+ } return r < n ? -1 : n < r ? 1 : 0
+ }, a.isEncoding = function(t) {
+ switch (String(t).toLowerCase()) {
+ case "hex":
+ case "utf8":
+ case "utf-8":
+ case "ascii":
+ case "latin1":
+ case "binary":
+ case "base64":
+ case "ucs2":
+ case "ucs-2":
+ case "utf16le":
+ case "utf-16le":
+ return !0;
+ default:
+ return !1
+ }
+ }, a.concat = function(t, e) {
+ if (!Array.isArray(t)) throw new TypeError('"list" argument must be an Array of Buffers');
+ if (0 === t.length) return a.alloc(0);
+ var r;
+ if (void 0 === e)
+ for (e = 0, r = 0; r < t.length; ++r) e += t[r].length;
+ var n = a.allocUnsafe(e),
+ i = 0;
+ for (r = 0; r < t.length; ++r) {
+ var o = t[r];
+ if (H(o, Uint8Array) && (o = a.from(o)), !a.isBuffer(o)) throw new TypeError('"list" argument must be an Array of Buffers');
+ o.copy(n, i), i += o.length
+ }
+ return n
+ }, a.byteLength = l, a.prototype._isBuffer = !0, a.prototype.swap16 = function() {
+ var t = this.length;
+ if (t % 2 != 0) throw new RangeError("Buffer size must be a multiple of 16-bits");
+ for (var e = 0; e < t; e += 2) g(this, e, e + 1);
+ return this
+ }, a.prototype.swap32 = function() {
+ var t = this.length;
+ if (t % 4 != 0) throw new RangeError("Buffer size must be a multiple of 32-bits");
+ for (var e = 0; e < t; e += 4) g(this, e, e + 3), g(this, e + 1, e + 2);
+ return this
+ }, a.prototype.swap64 = function() {
+ var t = this.length;
+ if (t % 8 != 0) throw new RangeError("Buffer size must be a multiple of 64-bits");
+ for (var e = 0; e < t; e += 8) g(this, e, e + 7), g(this, e + 1, e + 6), g(this, e + 2, e + 5), g(this, e + 3, e + 4);
+ return this
+ }, a.prototype.toString = function() {
+ var t = this.length;
+ return 0 === t ? "" : 0 === arguments.length ? B(this, 0, t) : y.apply(this, arguments)
+ }, a.prototype.toLocaleString = a.prototype.toString, a.prototype.equals = function(t) {
+ if (!a.isBuffer(t)) throw new TypeError("Argument must be a Buffer");
+ return this === t || 0 === a.compare(this, t)
+ }, a.prototype.inspect = function() {
+ var t = "",
+ r = e.INSPECT_MAX_BYTES;
+ return t = this.toString("hex", 0, r).replace(/(.{2})/g, "$1 ").trim(), this.length > r && (t += " ... "), ""
+ }, a.prototype.compare = function(t, e, r, n, i) {
+ if (H(t, Uint8Array) && (t = a.from(t, t.offset, t.byteLength)), !a.isBuffer(t)) throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type ' + typeof t);
+ if (void 0 === e && (e = 0), void 0 === r && (r = t ? t.length : 0), void 0 === n && (n = 0), void 0 === i && (i = this.length), e < 0 || r > t.length || n < 0 || i > this.length) throw new RangeError("out of range index");
+ if (n >= i && e >= r) return 0;
+ if (n >= i) return -1;
+ if (e >= r) return 1;
+ if (this === t) return 0;
+ for (var o = (i >>>= 0) - (n >>>= 0), s = (r >>>= 0) - (e >>>= 0), f = Math.min(o, s), u = this.slice(n, i), c = t.slice(e, r), h = 0; h < f; ++h)
+ if (u[h] !== c[h]) {
+ o = u[h], s = c[h];
+ break
+ } return o < s ? -1 : s < o ? 1 : 0
+ }, a.prototype.includes = function(t, e, r) {
+ return -1 !== this.indexOf(t, e, r)
+ }, a.prototype.indexOf = function(t, e, r) {
+ return d(this, t, e, r, !0)
+ }, a.prototype.lastIndexOf = function(t, e, r) {
+ return d(this, t, e, r, !1)
+ }, a.prototype.write = function(t, e, r, n) {
+ if (void 0 === e) n = "utf8", r = this.length, e = 0;
+ else if (void 0 === r && "string" == typeof e) n = e, r = this.length, e = 0;
+ else {
+ if (!isFinite(e)) throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");
+ e >>>= 0, isFinite(r) ? (r >>>= 0, void 0 === n && (n = "utf8")) : (n = r, r = void 0)
+ }
+ var i = this.length - e;
+ if ((void 0 === r || r > i) && (r = i), t.length > 0 && (r < 0 || e < 0) || e > this.length) throw new RangeError("Attempt to write outside buffer bounds");
+ n || (n = "utf8");
+ for (var o = !1;;) switch (n) {
+ case "hex":
+ return m(this, t, e, r);
+ case "utf8":
+ case "utf-8":
+ return S(this, t, e, r);
+ case "ascii":
+ return _(this, t, e, r);
+ case "latin1":
+ case "binary":
+ return b(this, t, e, r);
+ case "base64":
+ return E(this, t, e, r);
+ case "ucs2":
+ case "ucs-2":
+ case "utf16le":
+ case "utf-16le":
+ return w(this, t, e, r);
+ default:
+ if (o) throw new TypeError("Unknown encoding: " + n);
+ n = ("" + n).toLowerCase(), o = !0
+ }
+ }, a.prototype.toJSON = function() {
+ return {
+ type: "Buffer",
+ data: Array.prototype.slice.call(this._arr || this, 0)
+ }
+ };
+ var A = 4096;
+
+ function x(t, e, r) {
+ var n = "";
+ r = Math.min(t.length, r);
+ for (var i = e; i < r; ++i) n += String.fromCharCode(127 & t[i]);
+ return n
+ }
+
+ function P(t, e, r) {
+ var n = "";
+ r = Math.min(t.length, r);
+ for (var i = e; i < r; ++i) n += String.fromCharCode(t[i]);
+ return n
+ }
+
+ function T(t, e, r) {
+ var n, i = t.length;
+ (!e || e < 0) && (e = 0), (!r || r < 0 || r > i) && (r = i);
+ for (var o = "", s = e; s < r; ++s) o += (n = t[s]) < 16 ? "0" + n.toString(16) : n.toString(16);
+ return o
+ }
+
+ function I(t, e, r) {
+ for (var n = t.slice(e, r), i = "", o = 0; o < n.length; o += 2) i += String.fromCharCode(n[o] + 256 * n[o + 1]);
+ return i
+ }
+
+ function k(t, e, r) {
+ if (t % 1 != 0 || t < 0) throw new RangeError("offset is not uint");
+ if (t + e > r) throw new RangeError("Trying to access beyond buffer length")
+ }
+
+ function D(t, e, r, n, i, o) {
+ if (!a.isBuffer(t)) throw new TypeError('"buffer" argument must be a Buffer instance');
+ if (e > i || e < o) throw new RangeError('"value" argument is out of bounds');
+ if (r + n > t.length) throw new RangeError("Index out of range")
+ }
+
+ function R(t, e, r, n, i, o) {
+ if (r + n > t.length) throw new RangeError("Index out of range");
+ if (r < 0) throw new RangeError("Index out of range")
+ }
+
+ function N(t, e, r, n, o) {
+ return e = +e, r >>>= 0, o || R(t, 0, r, 4), i.write(t, e, r, n, 23, 4), r + 4
+ }
+
+ function L(t, e, r, n, o) {
+ return e = +e, r >>>= 0, o || R(t, 0, r, 8), i.write(t, e, r, n, 52, 8), r + 8
+ }
+ a.prototype.slice = function(t, e) {
+ var r = this.length;
+ (t = ~~t) < 0 ? (t += r) < 0 && (t = 0) : t > r && (t = r), (e = void 0 === e ? r : ~~e) < 0 ? (e += r) < 0 && (e = 0) : e > r && (e = r), e < t && (e = t);
+ var n = this.subarray(t, e);
+ return n.__proto__ = a.prototype, n
+ }, a.prototype.readUIntLE = function(t, e, r) {
+ t >>>= 0, e >>>= 0, r || k(t, e, this.length);
+ for (var n = this[t], i = 1, o = 0; ++o < e && (i *= 256);) n += this[t + o] * i;
+ return n
+ }, a.prototype.readUIntBE = function(t, e, r) {
+ t >>>= 0, e >>>= 0, r || k(t, e, this.length);
+ for (var n = this[t + --e], i = 1; e > 0 && (i *= 256);) n += this[t + --e] * i;
+ return n
+ }, a.prototype.readUInt8 = function(t, e) {
+ return t >>>= 0, e || k(t, 1, this.length), this[t]
+ }, a.prototype.readUInt16LE = function(t, e) {
+ return t >>>= 0, e || k(t, 2, this.length), this[t] | this[t + 1] << 8
+ }, a.prototype.readUInt16BE = function(t, e) {
+ return t >>>= 0, e || k(t, 2, this.length), this[t] << 8 | this[t + 1]
+ }, a.prototype.readUInt32LE = function(t, e) {
+ return t >>>= 0, e || k(t, 4, this.length), (this[t] | this[t + 1] << 8 | this[t + 2] << 16) + 16777216 * this[t + 3]
+ }, a.prototype.readUInt32BE = function(t, e) {
+ return t >>>= 0, e || k(t, 4, this.length), 16777216 * this[t] + (this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3])
+ }, a.prototype.readIntLE = function(t, e, r) {
+ t >>>= 0, e >>>= 0, r || k(t, e, this.length);
+ for (var n = this[t], i = 1, o = 0; ++o < e && (i *= 256);) n += this[t + o] * i;
+ return n >= (i *= 128) && (n -= Math.pow(2, 8 * e)), n
+ }, a.prototype.readIntBE = function(t, e, r) {
+ t >>>= 0, e >>>= 0, r || k(t, e, this.length);
+ for (var n = e, i = 1, o = this[t + --n]; n > 0 && (i *= 256);) o += this[t + --n] * i;
+ return o >= (i *= 128) && (o -= Math.pow(2, 8 * e)), o
+ }, a.prototype.readInt8 = function(t, e) {
+ return t >>>= 0, e || k(t, 1, this.length), 128 & this[t] ? -1 * (255 - this[t] + 1) : this[t]
+ }, a.prototype.readInt16LE = function(t, e) {
+ t >>>= 0, e || k(t, 2, this.length);
+ var r = this[t] | this[t + 1] << 8;
+ return 32768 & r ? 4294901760 | r : r
+ }, a.prototype.readInt16BE = function(t, e) {
+ t >>>= 0, e || k(t, 2, this.length);
+ var r = this[t + 1] | this[t] << 8;
+ return 32768 & r ? 4294901760 | r : r
+ }, a.prototype.readInt32LE = function(t, e) {
+ return t >>>= 0, e || k(t, 4, this.length), this[t] | this[t + 1] << 8 | this[t + 2] << 16 | this[t + 3] << 24
+ }, a.prototype.readInt32BE = function(t, e) {
+ return t >>>= 0, e || k(t, 4, this.length), this[t] << 24 | this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3]
+ }, a.prototype.readFloatLE = function(t, e) {
+ return t >>>= 0, e || k(t, 4, this.length), i.read(this, t, !0, 23, 4)
+ }, a.prototype.readFloatBE = function(t, e) {
+ return t >>>= 0, e || k(t, 4, this.length), i.read(this, t, !1, 23, 4)
+ }, a.prototype.readDoubleLE = function(t, e) {
+ return t >>>= 0, e || k(t, 8, this.length), i.read(this, t, !0, 52, 8)
+ }, a.prototype.readDoubleBE = function(t, e) {
+ return t >>>= 0, e || k(t, 8, this.length), i.read(this, t, !1, 52, 8)
+ }, a.prototype.writeUIntLE = function(t, e, r, n) {
+ t = +t, e >>>= 0, r >>>= 0, n || D(this, t, e, r, Math.pow(2, 8 * r) - 1, 0);
+ var i = 1,
+ o = 0;
+ for (this[e] = 255 & t; ++o < r && (i *= 256);) this[e + o] = t / i & 255;
+ return e + r
+ }, a.prototype.writeUIntBE = function(t, e, r, n) {
+ t = +t, e >>>= 0, r >>>= 0, n || D(this, t, e, r, Math.pow(2, 8 * r) - 1, 0);
+ var i = r - 1,
+ o = 1;
+ for (this[e + i] = 255 & t; --i >= 0 && (o *= 256);) this[e + i] = t / o & 255;
+ return e + r
+ }, a.prototype.writeUInt8 = function(t, e, r) {
+ return t = +t, e >>>= 0, r || D(this, t, e, 1, 255, 0), this[e] = 255 & t, e + 1
+ }, a.prototype.writeUInt16LE = function(t, e, r) {
+ return t = +t, e >>>= 0, r || D(this, t, e, 2, 65535, 0), this[e] = 255 & t, this[e + 1] = t >>> 8, e + 2
+ }, a.prototype.writeUInt16BE = function(t, e, r) {
+ return t = +t, e >>>= 0, r || D(this, t, e, 2, 65535, 0), this[e] = t >>> 8, this[e + 1] = 255 & t, e + 2
+ }, a.prototype.writeUInt32LE = function(t, e, r) {
+ return t = +t, e >>>= 0, r || D(this, t, e, 4, 4294967295, 0), this[e + 3] = t >>> 24, this[e + 2] = t >>> 16, this[e + 1] = t >>> 8, this[e] = 255 & t, e + 4
+ }, a.prototype.writeUInt32BE = function(t, e, r) {
+ return t = +t, e >>>= 0, r || D(this, t, e, 4, 4294967295, 0), this[e] = t >>> 24, this[e + 1] = t >>> 16, this[e + 2] = t >>> 8, this[e + 3] = 255 & t, e + 4
+ }, a.prototype.writeIntLE = function(t, e, r, n) {
+ if (t = +t, e >>>= 0, !n) {
+ var i = Math.pow(2, 8 * r - 1);
+ D(this, t, e, r, i - 1, -i)
+ }
+ var o = 0,
+ s = 1,
+ a = 0;
+ for (this[e] = 255 & t; ++o < r && (s *= 256);) t < 0 && 0 === a && 0 !== this[e + o - 1] && (a = 1), this[e + o] = (t / s | 0) - a & 255;
+ return e + r
+ }, a.prototype.writeIntBE = function(t, e, r, n) {
+ if (t = +t, e >>>= 0, !n) {
+ var i = Math.pow(2, 8 * r - 1);
+ D(this, t, e, r, i - 1, -i)
+ }
+ var o = r - 1,
+ s = 1,
+ a = 0;
+ for (this[e + o] = 255 & t; --o >= 0 && (s *= 256);) t < 0 && 0 === a && 0 !== this[e + o + 1] && (a = 1), this[e + o] = (t / s | 0) - a & 255;
+ return e + r
+ }, a.prototype.writeInt8 = function(t, e, r) {
+ return t = +t, e >>>= 0, r || D(this, t, e, 1, 127, -128), t < 0 && (t = 255 + t + 1), this[e] = 255 & t, e + 1
+ }, a.prototype.writeInt16LE = function(t, e, r) {
+ return t = +t, e >>>= 0, r || D(this, t, e, 2, 32767, -32768), this[e] = 255 & t, this[e + 1] = t >>> 8, e + 2
+ }, a.prototype.writeInt16BE = function(t, e, r) {
+ return t = +t, e >>>= 0, r || D(this, t, e, 2, 32767, -32768), this[e] = t >>> 8, this[e + 1] = 255 & t, e + 2
+ }, a.prototype.writeInt32LE = function(t, e, r) {
+ return t = +t, e >>>= 0, r || D(this, t, e, 4, 2147483647, -2147483648), this[e] = 255 & t, this[e + 1] = t >>> 8, this[e + 2] = t >>> 16, this[e + 3] = t >>> 24, e + 4
+ }, a.prototype.writeInt32BE = function(t, e, r) {
+ return t = +t, e >>>= 0, r || D(this, t, e, 4, 2147483647, -2147483648), t < 0 && (t = 4294967295 + t + 1), this[e] = t >>> 24, this[e + 1] = t >>> 16, this[e + 2] = t >>> 8, this[e + 3] = 255 & t, e + 4
+ }, a.prototype.writeFloatLE = function(t, e, r) {
+ return N(this, t, e, !0, r)
+ }, a.prototype.writeFloatBE = function(t, e, r) {
+ return N(this, t, e, !1, r)
+ }, a.prototype.writeDoubleLE = function(t, e, r) {
+ return L(this, t, e, !0, r)
+ }, a.prototype.writeDoubleBE = function(t, e, r) {
+ return L(this, t, e, !1, r)
+ }, a.prototype.copy = function(t, e, r, n) {
+ if (!a.isBuffer(t)) throw new TypeError("argument should be a Buffer");
+ if (r || (r = 0), n || 0 === n || (n = this.length), e >= t.length && (e = t.length), e || (e = 0), n > 0 && n < r && (n = r), n === r) return 0;
+ if (0 === t.length || 0 === this.length) return 0;
+ if (e < 0) throw new RangeError("targetStart out of bounds");
+ if (r < 0 || r >= this.length) throw new RangeError("Index out of range");
+ if (n < 0) throw new RangeError("sourceEnd out of bounds");
+ n > this.length && (n = this.length), t.length - e < n - r && (n = t.length - e + r);
+ var i = n - r;
+ if (this === t && "function" == typeof Uint8Array.prototype.copyWithin) this.copyWithin(e, r, n);
+ else if (this === t && r < e && e < n)
+ for (var o = i - 1; o >= 0; --o) t[o + e] = this[o + r];
+ else Uint8Array.prototype.set.call(t, this.subarray(r, n), e);
+ return i
+ }, a.prototype.fill = function(t, e, r, n) {
+ if ("string" == typeof t) {
+ if ("string" == typeof e ? (n = e, e = 0, r = this.length) : "string" == typeof r && (n = r, r = this.length), void 0 !== n && "string" != typeof n) throw new TypeError("encoding must be a string");
+ if ("string" == typeof n && !a.isEncoding(n)) throw new TypeError("Unknown encoding: " + n);
+ if (1 === t.length) {
+ var i = t.charCodeAt(0);
+ ("utf8" === n && i < 128 || "latin1" === n) && (t = i)
+ }
+ } else "number" == typeof t && (t &= 255);
+ if (e < 0 || this.length < e || this.length < r) throw new RangeError("Out of range index");
+ if (r <= e) return this;
+ var o;
+ if (e >>>= 0, r = void 0 === r ? this.length : r >>> 0, t || (t = 0), "number" == typeof t)
+ for (o = e; o < r; ++o) this[o] = t;
+ else {
+ var s = a.isBuffer(t) ? t : a.from(t, n),
+ f = s.length;
+ if (0 === f) throw new TypeError('The value "' + t + '" is invalid for argument "value"');
+ for (o = 0; o < r - e; ++o) this[o + e] = s[o % f]
+ }
+ return this
+ };
+ var C = /[^+/0-9A-Za-z-_]/g;
+
+ function U(t, e) {
+ var r;
+ e = e || 1 / 0;
+ for (var n = t.length, i = null, o = [], s = 0; s < n; ++s) {
+ if ((r = t.charCodeAt(s)) > 55295 && r < 57344) {
+ if (!i) {
+ if (r > 56319) {
+ (e -= 3) > -1 && o.push(239, 191, 189);
+ continue
+ }
+ if (s + 1 === n) {
+ (e -= 3) > -1 && o.push(239, 191, 189);
+ continue
+ }
+ i = r;
+ continue
+ }
+ if (r < 56320) {
+ (e -= 3) > -1 && o.push(239, 191, 189), i = r;
+ continue
+ }
+ r = 65536 + (i - 55296 << 10 | r - 56320)
+ } else i && (e -= 3) > -1 && o.push(239, 191, 189);
+ if (i = null, r < 128) {
+ if ((e -= 1) < 0) break;
+ o.push(r)
+ } else if (r < 2048) {
+ if ((e -= 2) < 0) break;
+ o.push(r >> 6 | 192, 63 & r | 128)
+ } else if (r < 65536) {
+ if ((e -= 3) < 0) break;
+ o.push(r >> 12 | 224, r >> 6 & 63 | 128, 63 & r | 128)
+ } else {
+ if (!(r < 1114112)) throw new Error("Invalid code point");
+ if ((e -= 4) < 0) break;
+ o.push(r >> 18 | 240, r >> 12 & 63 | 128, r >> 6 & 63 | 128, 63 & r | 128)
+ }
+ }
+ return o
+ }
+
+ function M(t) {
+ return n.toByteArray(function(t) {
+ if ((t = (t = t.split("=")[0]).trim().replace(C, "")).length < 2) return "";
+ for (; t.length % 4 != 0;) t += "=";
+ return t
+ }(t))
+ }
+
+ function j(t, e, r, n) {
+ for (var i = 0; i < n && !(i + r >= e.length || i >= t.length); ++i) e[i + r] = t[i];
+ return i
+ }
+
+ function H(t, e) {
+ return t instanceof e || null != t && null != t.constructor && null != t.constructor.name && t.constructor.name === e.name
+ }
+
+ function F(t) {
+ return t != t
+ }
+ },
+ 8075: (t, e, r) => {
+ "use strict";
+ var n = r(453),
+ i = r(487),
+ o = i(n("String.prototype.indexOf"));
+ t.exports = function(t, e) {
+ var r = n(t, !!e);
+ return "function" == typeof r && o(t, ".prototype.") > -1 ? i(r) : r
+ }
+ },
+ 487: (t, e, r) => {
+ "use strict";
+ var n = r(6743),
+ i = r(453),
+ o = r(6897),
+ s = r(9675),
+ a = i("%Function.prototype.apply%"),
+ f = i("%Function.prototype.call%"),
+ u = i("%Reflect.apply%", !0) || n.call(f, a),
+ c = r(655),
+ h = i("%Math.max%");
+ t.exports = function(t) {
+ if ("function" != typeof t) throw new s("a function is required");
+ var e = u(n, f, arguments);
+ return o(e, 1 + h(0, t.length - (arguments.length - 1)), !0)
+ };
+ var p = function() {
+ return u(n, a, arguments)
+ };
+ c ? c(t.exports, "apply", {
+ value: p
+ }) : t.exports.apply = p
+ },
+ 955: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), r(754), r(4636), r(9506), r(7165), function() {
+ var t = n,
+ e = t.lib.BlockCipher,
+ r = t.algo,
+ i = [],
+ o = [],
+ s = [],
+ a = [],
+ f = [],
+ u = [],
+ c = [],
+ h = [],
+ p = [],
+ l = [];
+ ! function() {
+ for (var t = [], e = 0; e < 256; e++) t[e] = e < 128 ? e << 1 : e << 1 ^ 283;
+ var r = 0,
+ n = 0;
+ for (e = 0; e < 256; e++) {
+ var y = n ^ n << 1 ^ n << 2 ^ n << 3 ^ n << 4;
+ y = y >>> 8 ^ 255 & y ^ 99, i[r] = y, o[y] = r;
+ var g = t[r],
+ d = t[g],
+ v = t[d],
+ m = 257 * t[y] ^ 16843008 * y;
+ s[r] = m << 24 | m >>> 8, a[r] = m << 16 | m >>> 16, f[r] = m << 8 | m >>> 24, u[r] = m, m = 16843009 * v ^ 65537 * d ^ 257 * g ^ 16843008 * r, c[y] = m << 24 | m >>> 8, h[y] = m << 16 | m >>> 16, p[y] = m << 8 | m >>> 24, l[y] = m, r ? (r = g ^ t[t[t[v ^ g]]], n ^= t[t[n]]) : r = n = 1
+ }
+ }();
+ var y = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54],
+ g = r.AES = e.extend({
+ _doReset: function() {
+ if (!this._nRounds || this._keyPriorReset !== this._key) {
+ for (var t = this._keyPriorReset = this._key, e = t.words, r = t.sigBytes / 4, n = 4 * ((this._nRounds = r + 6) + 1), o = this._keySchedule = [], s = 0; s < n; s++)
+ if (s < r) o[s] = e[s];
+ else {
+ var a = o[s - 1];
+ s % r ? r > 6 && s % r == 4 && (a = i[a >>> 24] << 24 | i[a >>> 16 & 255] << 16 | i[a >>> 8 & 255] << 8 | i[255 & a]) : (a = i[(a = a << 8 | a >>> 24) >>> 24] << 24 | i[a >>> 16 & 255] << 16 | i[a >>> 8 & 255] << 8 | i[255 & a], a ^= y[s / r | 0] << 24), o[s] = o[s - r] ^ a
+ } for (var f = this._invKeySchedule = [], u = 0; u < n; u++) s = n - u, a = u % 4 ? o[s] : o[s - 4], f[u] = u < 4 || s <= 4 ? a : c[i[a >>> 24]] ^ h[i[a >>> 16 & 255]] ^ p[i[a >>> 8 & 255]] ^ l[i[255 & a]]
+ }
+ },
+ encryptBlock: function(t, e) {
+ this._doCryptBlock(t, e, this._keySchedule, s, a, f, u, i)
+ },
+ decryptBlock: function(t, e) {
+ var r = t[e + 1];
+ t[e + 1] = t[e + 3], t[e + 3] = r, this._doCryptBlock(t, e, this._invKeySchedule, c, h, p, l, o), r = t[e + 1], t[e + 1] = t[e + 3], t[e + 3] = r
+ },
+ _doCryptBlock: function(t, e, r, n, i, o, s, a) {
+ for (var f = this._nRounds, u = t[e] ^ r[0], c = t[e + 1] ^ r[1], h = t[e + 2] ^ r[2], p = t[e + 3] ^ r[3], l = 4, y = 1; y < f; y++) {
+ var g = n[u >>> 24] ^ i[c >>> 16 & 255] ^ o[h >>> 8 & 255] ^ s[255 & p] ^ r[l++],
+ d = n[c >>> 24] ^ i[h >>> 16 & 255] ^ o[p >>> 8 & 255] ^ s[255 & u] ^ r[l++],
+ v = n[h >>> 24] ^ i[p >>> 16 & 255] ^ o[u >>> 8 & 255] ^ s[255 & c] ^ r[l++],
+ m = n[p >>> 24] ^ i[u >>> 16 & 255] ^ o[c >>> 8 & 255] ^ s[255 & h] ^ r[l++];
+ u = g, c = d, h = v, p = m
+ }
+ g = (a[u >>> 24] << 24 | a[c >>> 16 & 255] << 16 | a[h >>> 8 & 255] << 8 | a[255 & p]) ^ r[l++], d = (a[c >>> 24] << 24 | a[h >>> 16 & 255] << 16 | a[p >>> 8 & 255] << 8 | a[255 & u]) ^ r[l++], v = (a[h >>> 24] << 24 | a[p >>> 16 & 255] << 16 | a[u >>> 8 & 255] << 8 | a[255 & c]) ^ r[l++], m = (a[p >>> 24] << 24 | a[u >>> 16 & 255] << 16 | a[c >>> 8 & 255] << 8 | a[255 & h]) ^ r[l++], t[e] = g, t[e + 1] = d, t[e + 2] = v, t[e + 3] = m
+ },
+ keySize: 8
+ });
+ t.AES = e._createHelper(g)
+ }(), n.AES)
+ },
+ 7165: function(t, e, r) {
+ var n, i, o, s, a, f, u, c, h, p, l, y, g, d, v, m, S, _, b;
+ t.exports = (n = r(9021), r(9506), void(n.lib.Cipher || (i = n, o = i.lib, s = o.Base, a = o.WordArray, f = o.BufferedBlockAlgorithm, u = i.enc, u.Utf8, c = u.Base64, h = i.algo.EvpKDF, p = o.Cipher = f.extend({
+ cfg: s.extend(),
+ createEncryptor: function(t, e) {
+ return this.create(this._ENC_XFORM_MODE, t, e)
+ },
+ createDecryptor: function(t, e) {
+ return this.create(this._DEC_XFORM_MODE, t, e)
+ },
+ init: function(t, e, r) {
+ this.cfg = this.cfg.extend(r), this._xformMode = t, this._key = e, this.reset()
+ },
+ reset: function() {
+ f.reset.call(this), this._doReset()
+ },
+ process: function(t) {
+ return this._append(t), this._process()
+ },
+ finalize: function(t) {
+ return t && this._append(t), this._doFinalize()
+ },
+ keySize: 4,
+ ivSize: 4,
+ _ENC_XFORM_MODE: 1,
+ _DEC_XFORM_MODE: 2,
+ _createHelper: function() {
+ function t(t) {
+ return "string" == typeof t ? b : S
+ }
+ return function(e) {
+ return {
+ encrypt: function(r, n, i) {
+ return t(n).encrypt(e, r, n, i)
+ },
+ decrypt: function(r, n, i) {
+ return t(n).decrypt(e, r, n, i)
+ }
+ }
+ }
+ }()
+ }), o.StreamCipher = p.extend({
+ _doFinalize: function() {
+ return this._process(!0)
+ },
+ blockSize: 1
+ }), l = i.mode = {}, y = o.BlockCipherMode = s.extend({
+ createEncryptor: function(t, e) {
+ return this.Encryptor.create(t, e)
+ },
+ createDecryptor: function(t, e) {
+ return this.Decryptor.create(t, e)
+ },
+ init: function(t, e) {
+ this._cipher = t, this._iv = e
+ }
+ }), g = l.CBC = function() {
+ var t = y.extend();
+
+ function e(t, e, r) {
+ var n = this._iv;
+ if (n) {
+ var i = n;
+ this._iv = void 0
+ } else i = this._prevBlock;
+ for (var o = 0; o < r; o++) t[e + o] ^= i[o]
+ }
+ return t.Encryptor = t.extend({
+ processBlock: function(t, r) {
+ var n = this._cipher,
+ i = n.blockSize;
+ e.call(this, t, r, i), n.encryptBlock(t, r), this._prevBlock = t.slice(r, r + i)
+ }
+ }), t.Decryptor = t.extend({
+ processBlock: function(t, r) {
+ var n = this._cipher,
+ i = n.blockSize,
+ o = t.slice(r, r + i);
+ n.decryptBlock(t, r), e.call(this, t, r, i), this._prevBlock = o
+ }
+ }), t
+ }(), d = (i.pad = {}).Pkcs7 = {
+ pad: function(t, e) {
+ for (var r = 4 * e, n = r - t.sigBytes % r, i = n << 24 | n << 16 | n << 8 | n, o = [], s = 0; s < n; s += 4) o.push(i);
+ var f = a.create(o, n);
+ t.concat(f)
+ },
+ unpad: function(t) {
+ var e = 255 & t.words[t.sigBytes - 1 >>> 2];
+ t.sigBytes -= e
+ }
+ }, o.BlockCipher = p.extend({
+ cfg: p.cfg.extend({
+ mode: g,
+ padding: d
+ }),
+ reset: function() {
+ p.reset.call(this);
+ var t = this.cfg,
+ e = t.iv,
+ r = t.mode;
+ if (this._xformMode == this._ENC_XFORM_MODE) var n = r.createEncryptor;
+ else n = r.createDecryptor, this._minBufferSize = 1;
+ this._mode && this._mode.__creator == n ? this._mode.init(this, e && e.words) : (this._mode = n.call(r, this, e && e.words), this._mode.__creator = n)
+ },
+ _doProcessBlock: function(t, e) {
+ this._mode.processBlock(t, e)
+ },
+ _doFinalize: function() {
+ var t = this.cfg.padding;
+ if (this._xformMode == this._ENC_XFORM_MODE) {
+ t.pad(this._data, this.blockSize);
+ var e = this._process(!0)
+ } else e = this._process(!0), t.unpad(e);
+ return e
+ },
+ blockSize: 4
+ }), v = o.CipherParams = s.extend({
+ init: function(t) {
+ this.mixIn(t)
+ },
+ toString: function(t) {
+ return (t || this.formatter).stringify(this)
+ }
+ }), m = (i.format = {}).OpenSSL = {
+ stringify: function(t) {
+ var e = t.ciphertext,
+ r = t.salt;
+ if (r) var n = a.create([1398893684, 1701076831]).concat(r).concat(e);
+ else n = e;
+ return n.toString(c)
+ },
+ parse: function(t) {
+ var e = c.parse(t),
+ r = e.words;
+ if (1398893684 == r[0] && 1701076831 == r[1]) {
+ var n = a.create(r.slice(2, 4));
+ r.splice(0, 4), e.sigBytes -= 16
+ }
+ return v.create({
+ ciphertext: e,
+ salt: n
+ })
+ }
+ }, S = o.SerializableCipher = s.extend({
+ cfg: s.extend({
+ format: m
+ }),
+ encrypt: function(t, e, r, n) {
+ n = this.cfg.extend(n);
+ var i = t.createEncryptor(r, n),
+ o = i.finalize(e),
+ s = i.cfg;
+ return v.create({
+ ciphertext: o,
+ key: r,
+ iv: s.iv,
+ algorithm: t,
+ mode: s.mode,
+ padding: s.padding,
+ blockSize: t.blockSize,
+ formatter: n.format
+ })
+ },
+ decrypt: function(t, e, r, n) {
+ return n = this.cfg.extend(n), e = this._parse(e, n.format), t.createDecryptor(r, n).finalize(e.ciphertext)
+ },
+ _parse: function(t, e) {
+ return "string" == typeof t ? e.parse(t, this) : t
+ }
+ }), _ = (i.kdf = {}).OpenSSL = {
+ execute: function(t, e, r, n) {
+ n || (n = a.random(8));
+ var i = h.create({
+ keySize: e + r
+ }).compute(t, n),
+ o = a.create(i.words.slice(e), 4 * r);
+ return i.sigBytes = 4 * e, v.create({
+ key: i,
+ iv: o,
+ salt: n
+ })
+ }
+ }, b = o.PasswordBasedCipher = S.extend({
+ cfg: S.cfg.extend({
+ kdf: _
+ }),
+ encrypt: function(t, e, r, n) {
+ var i = (n = this.cfg.extend(n)).kdf.execute(r, t.keySize, t.ivSize);
+ n.iv = i.iv;
+ var o = S.encrypt.call(this, t, e, i.key, n);
+ return o.mixIn(i), o
+ },
+ decrypt: function(t, e, r, n) {
+ n = this.cfg.extend(n), e = this._parse(e, n.format);
+ var i = n.kdf.execute(r, t.keySize, t.ivSize, e.salt);
+ return n.iv = i.iv, S.decrypt.call(this, t, e, i.key, n)
+ }
+ }))))
+ },
+ 9021: function(t, e) {
+ var r;
+ t.exports = (r = r || function(t, e) {
+ var r = Object.create || function() {
+ function t() {}
+ return function(e) {
+ var r;
+ return t.prototype = e, r = new t, t.prototype = null, r
+ }
+ }(),
+ n = {},
+ i = n.lib = {},
+ o = i.Base = {
+ extend: function(t) {
+ var e = r(this);
+ return t && e.mixIn(t), e.hasOwnProperty("init") && this.init !== e.init || (e.init = function() {
+ e.$super.init.apply(this, arguments)
+ }), e.init.prototype = e, e.$super = this, e
+ },
+ create: function() {
+ var t = this.extend();
+ return t.init.apply(t, arguments), t
+ },
+ init: function() {},
+ mixIn: function(t) {
+ for (var e in t) t.hasOwnProperty(e) && (this[e] = t[e]);
+ t.hasOwnProperty("toString") && (this.toString = t.toString)
+ },
+ clone: function() {
+ return this.init.prototype.extend(this)
+ }
+ },
+ s = i.WordArray = o.extend({
+ init: function(t, e) {
+ t = this.words = t || [], this.sigBytes = null != e ? e : 4 * t.length
+ },
+ toString: function(t) {
+ return (t || f).stringify(this)
+ },
+ concat: function(t) {
+ var e = this.words,
+ r = t.words,
+ n = this.sigBytes,
+ i = t.sigBytes;
+ if (this.clamp(), n % 4)
+ for (var o = 0; o < i; o++) {
+ var s = r[o >>> 2] >>> 24 - o % 4 * 8 & 255;
+ e[n + o >>> 2] |= s << 24 - (n + o) % 4 * 8
+ } else
+ for (o = 0; o < i; o += 4) e[n + o >>> 2] = r[o >>> 2];
+ return this.sigBytes += i, this
+ },
+ clamp: function() {
+ var e = this.words,
+ r = this.sigBytes;
+ e[r >>> 2] &= 4294967295 << 32 - r % 4 * 8, e.length = t.ceil(r / 4)
+ },
+ clone: function() {
+ var t = o.clone.call(this);
+ return t.words = this.words.slice(0), t
+ },
+ random: function(e) {
+ for (var r, n = [], i = function(e) {
+ var r = 987654321,
+ n = 4294967295;
+ return function() {
+ var i = ((r = 36969 * (65535 & r) + (r >> 16) & n) << 16) + (e = 18e3 * (65535 & e) + (e >> 16) & n) & n;
+ return i /= 4294967296, (i += .5) * (t.random() > .5 ? 1 : -1)
+ }
+ }, o = 0; o < e; o += 4) {
+ var a = i(4294967296 * (r || t.random()));
+ r = 987654071 * a(), n.push(4294967296 * a() | 0)
+ }
+ return new s.init(n, e)
+ }
+ }),
+ a = n.enc = {},
+ f = a.Hex = {
+ stringify: function(t) {
+ for (var e = t.words, r = t.sigBytes, n = [], i = 0; i < r; i++) {
+ var o = e[i >>> 2] >>> 24 - i % 4 * 8 & 255;
+ n.push((o >>> 4).toString(16)), n.push((15 & o).toString(16))
+ }
+ return n.join("")
+ },
+ parse: function(t) {
+ for (var e = t.length, r = [], n = 0; n < e; n += 2) r[n >>> 3] |= parseInt(t.substr(n, 2), 16) << 24 - n % 8 * 4;
+ return new s.init(r, e / 2)
+ }
+ },
+ u = a.Latin1 = {
+ stringify: function(t) {
+ for (var e = t.words, r = t.sigBytes, n = [], i = 0; i < r; i++) {
+ var o = e[i >>> 2] >>> 24 - i % 4 * 8 & 255;
+ n.push(String.fromCharCode(o))
+ }
+ return n.join("")
+ },
+ parse: function(t) {
+ for (var e = t.length, r = [], n = 0; n < e; n++) r[n >>> 2] |= (255 & t.charCodeAt(n)) << 24 - n % 4 * 8;
+ return new s.init(r, e)
+ }
+ },
+ c = a.Utf8 = {
+ stringify: function(t) {
+ try {
+ return decodeURIComponent(escape(u.stringify(t)))
+ } catch (t) {
+ throw new Error("Malformed UTF-8 data")
+ }
+ },
+ parse: function(t) {
+ return u.parse(unescape(encodeURIComponent(t)))
+ }
+ },
+ h = i.BufferedBlockAlgorithm = o.extend({
+ reset: function() {
+ this._data = new s.init, this._nDataBytes = 0
+ },
+ _append: function(t) {
+ "string" == typeof t && (t = c.parse(t)), this._data.concat(t), this._nDataBytes += t.sigBytes
+ },
+ _process: function(e) {
+ var r = this._data,
+ n = r.words,
+ i = r.sigBytes,
+ o = this.blockSize,
+ a = i / (4 * o),
+ f = (a = e ? t.ceil(a) : t.max((0 | a) - this._minBufferSize, 0)) * o,
+ u = t.min(4 * f, i);
+ if (f) {
+ for (var c = 0; c < f; c += o) this._doProcessBlock(n, c);
+ var h = n.splice(0, f);
+ r.sigBytes -= u
+ }
+ return new s.init(h, u)
+ },
+ clone: function() {
+ var t = o.clone.call(this);
+ return t._data = this._data.clone(), t
+ },
+ _minBufferSize: 0
+ }),
+ p = (i.Hasher = h.extend({
+ cfg: o.extend(),
+ init: function(t) {
+ this.cfg = this.cfg.extend(t), this.reset()
+ },
+ reset: function() {
+ h.reset.call(this), this._doReset()
+ },
+ update: function(t) {
+ return this._append(t), this._process(), this
+ },
+ finalize: function(t) {
+ return t && this._append(t), this._doFinalize()
+ },
+ blockSize: 16,
+ _createHelper: function(t) {
+ return function(e, r) {
+ return new t.init(r).finalize(e)
+ }
+ },
+ _createHmacHelper: function(t) {
+ return function(e, r) {
+ return new p.HMAC.init(t, r).finalize(e)
+ }
+ }
+ }), n.algo = {});
+ return n
+ }(Math), r)
+ },
+ 754: function(t, e, r) {
+ var n, i, o;
+ t.exports = (n = r(9021), o = (i = n).lib.WordArray, i.enc.Base64 = {
+ stringify: function(t) {
+ var e = t.words,
+ r = t.sigBytes,
+ n = this._map;
+ t.clamp();
+ for (var i = [], o = 0; o < r; o += 3)
+ for (var s = (e[o >>> 2] >>> 24 - o % 4 * 8 & 255) << 16 | (e[o + 1 >>> 2] >>> 24 - (o + 1) % 4 * 8 & 255) << 8 | e[o + 2 >>> 2] >>> 24 - (o + 2) % 4 * 8 & 255, a = 0; a < 4 && o + .75 * a < r; a++) i.push(n.charAt(s >>> 6 * (3 - a) & 63));
+ var f = n.charAt(64);
+ if (f)
+ for (; i.length % 4;) i.push(f);
+ return i.join("")
+ },
+ parse: function(t) {
+ var e = t.length,
+ r = this._map,
+ n = this._reverseMap;
+ if (!n) {
+ n = this._reverseMap = [];
+ for (var i = 0; i < r.length; i++) n[r.charCodeAt(i)] = i
+ }
+ var s = r.charAt(64);
+ if (s) {
+ var a = t.indexOf(s); - 1 !== a && (e = a)
+ }
+ return function(t, e, r) {
+ for (var n = [], i = 0, s = 0; s < e; s++)
+ if (s % 4) {
+ var a = r[t.charCodeAt(s - 1)] << s % 4 * 2,
+ f = r[t.charCodeAt(s)] >>> 6 - s % 4 * 2;
+ n[i >>> 2] |= (a | f) << 24 - i % 4 * 8, i++
+ } return o.create(n, i)
+ }(t, e, n)
+ },
+ _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
+ }, n.enc.Base64)
+ },
+ 5503: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), function() {
+ var t = n,
+ e = t.lib.WordArray,
+ r = t.enc;
+
+ function i(t) {
+ return t << 8 & 4278255360 | t >>> 8 & 16711935
+ }
+ r.Utf16 = r.Utf16BE = {
+ stringify: function(t) {
+ for (var e = t.words, r = t.sigBytes, n = [], i = 0; i < r; i += 2) {
+ var o = e[i >>> 2] >>> 16 - i % 4 * 8 & 65535;
+ n.push(String.fromCharCode(o))
+ }
+ return n.join("")
+ },
+ parse: function(t) {
+ for (var r = t.length, n = [], i = 0; i < r; i++) n[i >>> 1] |= t.charCodeAt(i) << 16 - i % 2 * 16;
+ return e.create(n, 2 * r)
+ }
+ }, r.Utf16LE = {
+ stringify: function(t) {
+ for (var e = t.words, r = t.sigBytes, n = [], o = 0; o < r; o += 2) {
+ var s = i(e[o >>> 2] >>> 16 - o % 4 * 8 & 65535);
+ n.push(String.fromCharCode(s))
+ }
+ return n.join("")
+ },
+ parse: function(t) {
+ for (var r = t.length, n = [], o = 0; o < r; o++) n[o >>> 1] |= i(t.charCodeAt(o) << 16 - o % 2 * 16);
+ return e.create(n, 2 * r)
+ }
+ }
+ }(), n.enc.Utf16)
+ },
+ 9506: function(t, e, r) {
+ var n, i, o, s, a, f, u, c;
+ t.exports = (c = r(9021), r(5471), r(1025), o = (i = (n = c).lib).Base, s = i.WordArray, f = (a = n.algo).MD5, u = a.EvpKDF = o.extend({
+ cfg: o.extend({
+ keySize: 4,
+ hasher: f,
+ iterations: 1
+ }),
+ init: function(t) {
+ this.cfg = this.cfg.extend(t)
+ },
+ compute: function(t, e) {
+ for (var r = this.cfg, n = r.hasher.create(), i = s.create(), o = i.words, a = r.keySize, f = r.iterations; o.length < a;) {
+ u && n.update(u);
+ var u = n.update(t).finalize(e);
+ n.reset();
+ for (var c = 1; c < f; c++) u = n.finalize(u), n.reset();
+ i.concat(u)
+ }
+ return i.sigBytes = 4 * a, i
+ }
+ }), n.EvpKDF = function(t, e, r) {
+ return u.create(r).compute(t, e)
+ }, c.EvpKDF)
+ },
+ 25: function(t, e, r) {
+ var n, i, o, s;
+ t.exports = (s = r(9021), r(7165), i = (n = s).lib.CipherParams, o = n.enc.Hex, n.format.Hex = {
+ stringify: function(t) {
+ return t.ciphertext.toString(o)
+ },
+ parse: function(t) {
+ var e = o.parse(t);
+ return i.create({
+ ciphertext: e
+ })
+ }
+ }, s.format.Hex)
+ },
+ 1025: function(t, e, r) {
+ var n, i, o;
+ t.exports = (i = (n = r(9021)).lib.Base, o = n.enc.Utf8, void(n.algo.HMAC = i.extend({
+ init: function(t, e) {
+ t = this._hasher = new t.init, "string" == typeof e && (e = o.parse(e));
+ var r = t.blockSize,
+ n = 4 * r;
+ e.sigBytes > n && (e = t.finalize(e)), e.clamp();
+ for (var i = this._oKey = e.clone(), s = this._iKey = e.clone(), a = i.words, f = s.words, u = 0; u < r; u++) a[u] ^= 1549556828, f[u] ^= 909522486;
+ i.sigBytes = s.sigBytes = n, this.reset()
+ },
+ reset: function() {
+ var t = this._hasher;
+ t.reset(), t.update(this._iKey)
+ },
+ update: function(t) {
+ return this._hasher.update(t), this
+ },
+ finalize: function(t) {
+ var e = this._hasher,
+ r = e.finalize(t);
+ return e.reset(), e.finalize(this._oKey.clone().concat(r))
+ }
+ })))
+ },
+ 1396: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), r(3240), r(6440), r(5503), r(754), r(4636), r(5471), r(3009), r(6308), r(1380), r(9557), r(5953), r(8056), r(1025), r(19), r(9506), r(7165), r(2169), r(6939), r(6372), r(3797), r(8454), r(2073), r(4905), r(482), r(2155), r(8124), r(25), r(955), r(7628), r(7193), r(6298), r(2696), n)
+ },
+ 6440: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), function() {
+ if ("function" == typeof ArrayBuffer) {
+ var t = n.lib.WordArray,
+ e = t.init,
+ r = t.init = function(t) {
+ if (t instanceof ArrayBuffer && (t = new Uint8Array(t)), (t instanceof Int8Array || "undefined" != typeof Uint8ClampedArray && t instanceof Uint8ClampedArray || t instanceof Int16Array || t instanceof Uint16Array || t instanceof Int32Array || t instanceof Uint32Array || t instanceof Float32Array || t instanceof Float64Array) && (t = new Uint8Array(t.buffer, t.byteOffset, t.byteLength)), t instanceof Uint8Array) {
+ for (var r = t.byteLength, n = [], i = 0; i < r; i++) n[i >>> 2] |= t[i] << 24 - i % 4 * 8;
+ e.call(this, n, r)
+ } else e.apply(this, arguments)
+ };
+ r.prototype = t
+ }
+ }(), n.lib.WordArray)
+ },
+ 4636: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), function(t) {
+ var e = n,
+ r = e.lib,
+ i = r.WordArray,
+ o = r.Hasher,
+ s = e.algo,
+ a = [];
+ ! function() {
+ for (var e = 0; e < 64; e++) a[e] = 4294967296 * t.abs(t.sin(e + 1)) | 0
+ }();
+ var f = s.MD5 = o.extend({
+ _doReset: function() {
+ this._hash = new i.init([1732584193, 4023233417, 2562383102, 271733878])
+ },
+ _doProcessBlock: function(t, e) {
+ for (var r = 0; r < 16; r++) {
+ var n = e + r,
+ i = t[n];
+ t[n] = 16711935 & (i << 8 | i >>> 24) | 4278255360 & (i << 24 | i >>> 8)
+ }
+ var o = this._hash.words,
+ s = t[e + 0],
+ f = t[e + 1],
+ l = t[e + 2],
+ y = t[e + 3],
+ g = t[e + 4],
+ d = t[e + 5],
+ v = t[e + 6],
+ m = t[e + 7],
+ S = t[e + 8],
+ _ = t[e + 9],
+ b = t[e + 10],
+ E = t[e + 11],
+ w = t[e + 12],
+ O = t[e + 13],
+ B = t[e + 14],
+ A = t[e + 15],
+ x = o[0],
+ P = o[1],
+ T = o[2],
+ I = o[3];
+ x = u(x, P, T, I, s, 7, a[0]), I = u(I, x, P, T, f, 12, a[1]), T = u(T, I, x, P, l, 17, a[2]), P = u(P, T, I, x, y, 22, a[3]), x = u(x, P, T, I, g, 7, a[4]), I = u(I, x, P, T, d, 12, a[5]), T = u(T, I, x, P, v, 17, a[6]), P = u(P, T, I, x, m, 22, a[7]), x = u(x, P, T, I, S, 7, a[8]), I = u(I, x, P, T, _, 12, a[9]), T = u(T, I, x, P, b, 17, a[10]), P = u(P, T, I, x, E, 22, a[11]), x = u(x, P, T, I, w, 7, a[12]), I = u(I, x, P, T, O, 12, a[13]), T = u(T, I, x, P, B, 17, a[14]), x = c(x, P = u(P, T, I, x, A, 22, a[15]), T, I, f, 5, a[16]), I = c(I, x, P, T, v, 9, a[17]), T = c(T, I, x, P, E, 14, a[18]), P = c(P, T, I, x, s, 20, a[19]), x = c(x, P, T, I, d, 5, a[20]), I = c(I, x, P, T, b, 9, a[21]), T = c(T, I, x, P, A, 14, a[22]), P = c(P, T, I, x, g, 20, a[23]), x = c(x, P, T, I, _, 5, a[24]), I = c(I, x, P, T, B, 9, a[25]), T = c(T, I, x, P, y, 14, a[26]), P = c(P, T, I, x, S, 20, a[27]), x = c(x, P, T, I, O, 5, a[28]), I = c(I, x, P, T, l, 9, a[29]), T = c(T, I, x, P, m, 14, a[30]), x = h(x, P = c(P, T, I, x, w, 20, a[31]), T, I, d, 4, a[32]), I = h(I, x, P, T, S, 11, a[33]), T = h(T, I, x, P, E, 16, a[34]), P = h(P, T, I, x, B, 23, a[35]), x = h(x, P, T, I, f, 4, a[36]), I = h(I, x, P, T, g, 11, a[37]), T = h(T, I, x, P, m, 16, a[38]), P = h(P, T, I, x, b, 23, a[39]), x = h(x, P, T, I, O, 4, a[40]), I = h(I, x, P, T, s, 11, a[41]), T = h(T, I, x, P, y, 16, a[42]), P = h(P, T, I, x, v, 23, a[43]), x = h(x, P, T, I, _, 4, a[44]), I = h(I, x, P, T, w, 11, a[45]), T = h(T, I, x, P, A, 16, a[46]), x = p(x, P = h(P, T, I, x, l, 23, a[47]), T, I, s, 6, a[48]), I = p(I, x, P, T, m, 10, a[49]), T = p(T, I, x, P, B, 15, a[50]), P = p(P, T, I, x, d, 21, a[51]), x = p(x, P, T, I, w, 6, a[52]), I = p(I, x, P, T, y, 10, a[53]), T = p(T, I, x, P, b, 15, a[54]), P = p(P, T, I, x, f, 21, a[55]), x = p(x, P, T, I, S, 6, a[56]), I = p(I, x, P, T, A, 10, a[57]), T = p(T, I, x, P, v, 15, a[58]), P = p(P, T, I, x, O, 21, a[59]), x = p(x, P, T, I, g, 6, a[60]), I = p(I, x, P, T, E, 10, a[61]), T = p(T, I, x, P, l, 15, a[62]), P = p(P, T, I, x, _, 21, a[63]), o[0] = o[0] + x | 0, o[1] = o[1] + P | 0, o[2] = o[2] + T | 0, o[3] = o[3] + I | 0
+ },
+ _doFinalize: function() {
+ var e = this._data,
+ r = e.words,
+ n = 8 * this._nDataBytes,
+ i = 8 * e.sigBytes;
+ r[i >>> 5] |= 128 << 24 - i % 32;
+ var o = t.floor(n / 4294967296),
+ s = n;
+ r[15 + (i + 64 >>> 9 << 4)] = 16711935 & (o << 8 | o >>> 24) | 4278255360 & (o << 24 | o >>> 8), r[14 + (i + 64 >>> 9 << 4)] = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8), e.sigBytes = 4 * (r.length + 1), this._process();
+ for (var a = this._hash, f = a.words, u = 0; u < 4; u++) {
+ var c = f[u];
+ f[u] = 16711935 & (c << 8 | c >>> 24) | 4278255360 & (c << 24 | c >>> 8)
+ }
+ return a
+ },
+ clone: function() {
+ var t = o.clone.call(this);
+ return t._hash = this._hash.clone(), t
+ }
+ });
+
+ function u(t, e, r, n, i, o, s) {
+ var a = t + (e & r | ~e & n) + i + s;
+ return (a << o | a >>> 32 - o) + e
+ }
+
+ function c(t, e, r, n, i, o, s) {
+ var a = t + (e & n | r & ~n) + i + s;
+ return (a << o | a >>> 32 - o) + e
+ }
+
+ function h(t, e, r, n, i, o, s) {
+ var a = t + (e ^ r ^ n) + i + s;
+ return (a << o | a >>> 32 - o) + e
+ }
+
+ function p(t, e, r, n, i, o, s) {
+ var a = t + (r ^ (e | ~n)) + i + s;
+ return (a << o | a >>> 32 - o) + e
+ }
+ e.MD5 = o._createHelper(f), e.HmacMD5 = o._createHmacHelper(f)
+ }(Math), n.MD5)
+ },
+ 2169: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), r(7165), n.mode.CFB = function() {
+ var t = n.lib.BlockCipherMode.extend();
+
+ function e(t, e, r, n) {
+ var i = this._iv;
+ if (i) {
+ var o = i.slice(0);
+ this._iv = void 0
+ } else o = this._prevBlock;
+ n.encryptBlock(o, 0);
+ for (var s = 0; s < r; s++) t[e + s] ^= o[s]
+ }
+ return t.Encryptor = t.extend({
+ processBlock: function(t, r) {
+ var n = this._cipher,
+ i = n.blockSize;
+ e.call(this, t, r, i, n), this._prevBlock = t.slice(r, r + i)
+ }
+ }), t.Decryptor = t.extend({
+ processBlock: function(t, r) {
+ var n = this._cipher,
+ i = n.blockSize,
+ o = t.slice(r, r + i);
+ e.call(this, t, r, i, n), this._prevBlock = o
+ }
+ }), t
+ }(), n.mode.CFB)
+ },
+ 6372: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), r(7165), n.mode.CTRGladman = function() {
+ var t = n.lib.BlockCipherMode.extend();
+
+ function e(t) {
+ if (255 & ~(t >> 24)) t += 1 << 24;
+ else {
+ var e = t >> 16 & 255,
+ r = t >> 8 & 255,
+ n = 255 & t;
+ 255 === e ? (e = 0, 255 === r ? (r = 0, 255 === n ? n = 0 : ++n) : ++r) : ++e, t = 0, t += e << 16, t += r << 8, t += n
+ }
+ return t
+ }
+ var r = t.Encryptor = t.extend({
+ processBlock: function(t, r) {
+ var n = this._cipher,
+ i = n.blockSize,
+ o = this._iv,
+ s = this._counter;
+ o && (s = this._counter = o.slice(0), this._iv = void 0),
+ function(t) {
+ 0 === (t[0] = e(t[0])) && (t[1] = e(t[1]))
+ }(s);
+ var a = s.slice(0);
+ n.encryptBlock(a, 0);
+ for (var f = 0; f < i; f++) t[r + f] ^= a[f]
+ }
+ });
+ return t.Decryptor = r, t
+ }(), n.mode.CTRGladman)
+ },
+ 6939: function(t, e, r) {
+ var n, i, o;
+ t.exports = (o = r(9021), r(7165), o.mode.CTR = (i = (n = o.lib.BlockCipherMode.extend()).Encryptor = n.extend({
+ processBlock: function(t, e) {
+ var r = this._cipher,
+ n = r.blockSize,
+ i = this._iv,
+ o = this._counter;
+ i && (o = this._counter = i.slice(0), this._iv = void 0);
+ var s = o.slice(0);
+ r.encryptBlock(s, 0), o[n - 1] = o[n - 1] + 1 | 0;
+ for (var a = 0; a < n; a++) t[e + a] ^= s[a]
+ }
+ }), n.Decryptor = i, n), o.mode.CTR)
+ },
+ 8454: function(t, e, r) {
+ var n, i;
+ t.exports = (i = r(9021), r(7165), i.mode.ECB = ((n = i.lib.BlockCipherMode.extend()).Encryptor = n.extend({
+ processBlock: function(t, e) {
+ this._cipher.encryptBlock(t, e)
+ }
+ }), n.Decryptor = n.extend({
+ processBlock: function(t, e) {
+ this._cipher.decryptBlock(t, e)
+ }
+ }), n), i.mode.ECB)
+ },
+ 3797: function(t, e, r) {
+ var n, i, o;
+ t.exports = (o = r(9021), r(7165), o.mode.OFB = (i = (n = o.lib.BlockCipherMode.extend()).Encryptor = n.extend({
+ processBlock: function(t, e) {
+ var r = this._cipher,
+ n = r.blockSize,
+ i = this._iv,
+ o = this._keystream;
+ i && (o = this._keystream = i.slice(0), this._iv = void 0), r.encryptBlock(o, 0);
+ for (var s = 0; s < n; s++) t[e + s] ^= o[s]
+ }
+ }), n.Decryptor = i, n), o.mode.OFB)
+ },
+ 2073: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), r(7165), n.pad.AnsiX923 = {
+ pad: function(t, e) {
+ var r = t.sigBytes,
+ n = 4 * e,
+ i = n - r % n,
+ o = r + i - 1;
+ t.clamp(), t.words[o >>> 2] |= i << 24 - o % 4 * 8, t.sigBytes += i
+ },
+ unpad: function(t) {
+ var e = 255 & t.words[t.sigBytes - 1 >>> 2];
+ t.sigBytes -= e
+ }
+ }, n.pad.Ansix923)
+ },
+ 4905: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), r(7165), n.pad.Iso10126 = {
+ pad: function(t, e) {
+ var r = 4 * e,
+ i = r - t.sigBytes % r;
+ t.concat(n.lib.WordArray.random(i - 1)).concat(n.lib.WordArray.create([i << 24], 1))
+ },
+ unpad: function(t) {
+ var e = 255 & t.words[t.sigBytes - 1 >>> 2];
+ t.sigBytes -= e
+ }
+ }, n.pad.Iso10126)
+ },
+ 482: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), r(7165), n.pad.Iso97971 = {
+ pad: function(t, e) {
+ t.concat(n.lib.WordArray.create([2147483648], 1)), n.pad.ZeroPadding.pad(t, e)
+ },
+ unpad: function(t) {
+ n.pad.ZeroPadding.unpad(t), t.sigBytes--
+ }
+ }, n.pad.Iso97971)
+ },
+ 8124: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), r(7165), n.pad.NoPadding = {
+ pad: function() {},
+ unpad: function() {}
+ }, n.pad.NoPadding)
+ },
+ 2155: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), r(7165), n.pad.ZeroPadding = {
+ pad: function(t, e) {
+ var r = 4 * e;
+ t.clamp(), t.sigBytes += r - (t.sigBytes % r || r)
+ },
+ unpad: function(t) {
+ for (var e = t.words, r = t.sigBytes - 1; !(e[r >>> 2] >>> 24 - r % 4 * 8 & 255);) r--;
+ t.sigBytes = r + 1
+ }
+ }, n.pad.ZeroPadding)
+ },
+ 19: function(t, e, r) {
+ var n, i, o, s, a, f, u, c, h;
+ t.exports = (h = r(9021), r(5471), r(1025), o = (i = (n = h).lib).Base, s = i.WordArray, f = (a = n.algo).SHA1, u = a.HMAC, c = a.PBKDF2 = o.extend({
+ cfg: o.extend({
+ keySize: 4,
+ hasher: f,
+ iterations: 1
+ }),
+ init: function(t) {
+ this.cfg = this.cfg.extend(t)
+ },
+ compute: function(t, e) {
+ for (var r = this.cfg, n = u.create(r.hasher, t), i = s.create(), o = s.create([1]), a = i.words, f = o.words, c = r.keySize, h = r.iterations; a.length < c;) {
+ var p = n.update(e).finalize(o);
+ n.reset();
+ for (var l = p.words, y = l.length, g = p, d = 1; d < h; d++) {
+ g = n.finalize(g), n.reset();
+ for (var v = g.words, m = 0; m < y; m++) l[m] ^= v[m]
+ }
+ i.concat(p), f[0]++
+ }
+ return i.sigBytes = 4 * c, i
+ }
+ }), n.PBKDF2 = function(t, e, r) {
+ return c.create(r).compute(t, e)
+ }, h.PBKDF2)
+ },
+ 2696: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), r(754), r(4636), r(9506), r(7165), function() {
+ var t = n,
+ e = t.lib.StreamCipher,
+ r = t.algo,
+ i = [],
+ o = [],
+ s = [],
+ a = r.RabbitLegacy = e.extend({
+ _doReset: function() {
+ var t = this._key.words,
+ e = this.cfg.iv,
+ r = this._X = [t[0], t[3] << 16 | t[2] >>> 16, t[1], t[0] << 16 | t[3] >>> 16, t[2], t[1] << 16 | t[0] >>> 16, t[3], t[2] << 16 | t[1] >>> 16],
+ n = this._C = [t[2] << 16 | t[2] >>> 16, 4294901760 & t[0] | 65535 & t[1], t[3] << 16 | t[3] >>> 16, 4294901760 & t[1] | 65535 & t[2], t[0] << 16 | t[0] >>> 16, 4294901760 & t[2] | 65535 & t[3], t[1] << 16 | t[1] >>> 16, 4294901760 & t[3] | 65535 & t[0]];
+ this._b = 0;
+ for (var i = 0; i < 4; i++) f.call(this);
+ for (i = 0; i < 8; i++) n[i] ^= r[i + 4 & 7];
+ if (e) {
+ var o = e.words,
+ s = o[0],
+ a = o[1],
+ u = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8),
+ c = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8),
+ h = u >>> 16 | 4294901760 & c,
+ p = c << 16 | 65535 & u;
+ for (n[0] ^= u, n[1] ^= h, n[2] ^= c, n[3] ^= p, n[4] ^= u, n[5] ^= h, n[6] ^= c, n[7] ^= p, i = 0; i < 4; i++) f.call(this)
+ }
+ },
+ _doProcessBlock: function(t, e) {
+ var r = this._X;
+ f.call(this), i[0] = r[0] ^ r[5] >>> 16 ^ r[3] << 16, i[1] = r[2] ^ r[7] >>> 16 ^ r[5] << 16, i[2] = r[4] ^ r[1] >>> 16 ^ r[7] << 16, i[3] = r[6] ^ r[3] >>> 16 ^ r[1] << 16;
+ for (var n = 0; n < 4; n++) i[n] = 16711935 & (i[n] << 8 | i[n] >>> 24) | 4278255360 & (i[n] << 24 | i[n] >>> 8), t[e + n] ^= i[n]
+ },
+ blockSize: 4,
+ ivSize: 2
+ });
+
+ function f() {
+ for (var t = this._X, e = this._C, r = 0; r < 8; r++) o[r] = e[r];
+ for (e[0] = e[0] + 1295307597 + this._b | 0, e[1] = e[1] + 3545052371 + (e[0] >>> 0 < o[0] >>> 0 ? 1 : 0) | 0, e[2] = e[2] + 886263092 + (e[1] >>> 0 < o[1] >>> 0 ? 1 : 0) | 0, e[3] = e[3] + 1295307597 + (e[2] >>> 0 < o[2] >>> 0 ? 1 : 0) | 0, e[4] = e[4] + 3545052371 + (e[3] >>> 0 < o[3] >>> 0 ? 1 : 0) | 0, e[5] = e[5] + 886263092 + (e[4] >>> 0 < o[4] >>> 0 ? 1 : 0) | 0, e[6] = e[6] + 1295307597 + (e[5] >>> 0 < o[5] >>> 0 ? 1 : 0) | 0, e[7] = e[7] + 3545052371 + (e[6] >>> 0 < o[6] >>> 0 ? 1 : 0) | 0, this._b = e[7] >>> 0 < o[7] >>> 0 ? 1 : 0, r = 0; r < 8; r++) {
+ var n = t[r] + e[r],
+ i = 65535 & n,
+ a = n >>> 16,
+ f = ((i * i >>> 17) + i * a >>> 15) + a * a,
+ u = ((4294901760 & n) * n | 0) + ((65535 & n) * n | 0);
+ s[r] = f ^ u
+ }
+ t[0] = s[0] + (s[7] << 16 | s[7] >>> 16) + (s[6] << 16 | s[6] >>> 16) | 0, t[1] = s[1] + (s[0] << 8 | s[0] >>> 24) + s[7] | 0, t[2] = s[2] + (s[1] << 16 | s[1] >>> 16) + (s[0] << 16 | s[0] >>> 16) | 0, t[3] = s[3] + (s[2] << 8 | s[2] >>> 24) + s[1] | 0, t[4] = s[4] + (s[3] << 16 | s[3] >>> 16) + (s[2] << 16 | s[2] >>> 16) | 0, t[5] = s[5] + (s[4] << 8 | s[4] >>> 24) + s[3] | 0, t[6] = s[6] + (s[5] << 16 | s[5] >>> 16) + (s[4] << 16 | s[4] >>> 16) | 0, t[7] = s[7] + (s[6] << 8 | s[6] >>> 24) + s[5] | 0
+ }
+ t.RabbitLegacy = e._createHelper(a)
+ }(), n.RabbitLegacy)
+ },
+ 6298: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), r(754), r(4636), r(9506), r(7165), function() {
+ var t = n,
+ e = t.lib.StreamCipher,
+ r = t.algo,
+ i = [],
+ o = [],
+ s = [],
+ a = r.Rabbit = e.extend({
+ _doReset: function() {
+ for (var t = this._key.words, e = this.cfg.iv, r = 0; r < 4; r++) t[r] = 16711935 & (t[r] << 8 | t[r] >>> 24) | 4278255360 & (t[r] << 24 | t[r] >>> 8);
+ var n = this._X = [t[0], t[3] << 16 | t[2] >>> 16, t[1], t[0] << 16 | t[3] >>> 16, t[2], t[1] << 16 | t[0] >>> 16, t[3], t[2] << 16 | t[1] >>> 16],
+ i = this._C = [t[2] << 16 | t[2] >>> 16, 4294901760 & t[0] | 65535 & t[1], t[3] << 16 | t[3] >>> 16, 4294901760 & t[1] | 65535 & t[2], t[0] << 16 | t[0] >>> 16, 4294901760 & t[2] | 65535 & t[3], t[1] << 16 | t[1] >>> 16, 4294901760 & t[3] | 65535 & t[0]];
+ for (this._b = 0, r = 0; r < 4; r++) f.call(this);
+ for (r = 0; r < 8; r++) i[r] ^= n[r + 4 & 7];
+ if (e) {
+ var o = e.words,
+ s = o[0],
+ a = o[1],
+ u = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8),
+ c = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8),
+ h = u >>> 16 | 4294901760 & c,
+ p = c << 16 | 65535 & u;
+ for (i[0] ^= u, i[1] ^= h, i[2] ^= c, i[3] ^= p, i[4] ^= u, i[5] ^= h, i[6] ^= c, i[7] ^= p, r = 0; r < 4; r++) f.call(this)
+ }
+ },
+ _doProcessBlock: function(t, e) {
+ var r = this._X;
+ f.call(this), i[0] = r[0] ^ r[5] >>> 16 ^ r[3] << 16, i[1] = r[2] ^ r[7] >>> 16 ^ r[5] << 16, i[2] = r[4] ^ r[1] >>> 16 ^ r[7] << 16, i[3] = r[6] ^ r[3] >>> 16 ^ r[1] << 16;
+ for (var n = 0; n < 4; n++) i[n] = 16711935 & (i[n] << 8 | i[n] >>> 24) | 4278255360 & (i[n] << 24 | i[n] >>> 8), t[e + n] ^= i[n]
+ },
+ blockSize: 4,
+ ivSize: 2
+ });
+
+ function f() {
+ for (var t = this._X, e = this._C, r = 0; r < 8; r++) o[r] = e[r];
+ for (e[0] = e[0] + 1295307597 + this._b | 0, e[1] = e[1] + 3545052371 + (e[0] >>> 0 < o[0] >>> 0 ? 1 : 0) | 0, e[2] = e[2] + 886263092 + (e[1] >>> 0 < o[1] >>> 0 ? 1 : 0) | 0, e[3] = e[3] + 1295307597 + (e[2] >>> 0 < o[2] >>> 0 ? 1 : 0) | 0, e[4] = e[4] + 3545052371 + (e[3] >>> 0 < o[3] >>> 0 ? 1 : 0) | 0, e[5] = e[5] + 886263092 + (e[4] >>> 0 < o[4] >>> 0 ? 1 : 0) | 0, e[6] = e[6] + 1295307597 + (e[5] >>> 0 < o[5] >>> 0 ? 1 : 0) | 0, e[7] = e[7] + 3545052371 + (e[6] >>> 0 < o[6] >>> 0 ? 1 : 0) | 0, this._b = e[7] >>> 0 < o[7] >>> 0 ? 1 : 0, r = 0; r < 8; r++) {
+ var n = t[r] + e[r],
+ i = 65535 & n,
+ a = n >>> 16,
+ f = ((i * i >>> 17) + i * a >>> 15) + a * a,
+ u = ((4294901760 & n) * n | 0) + ((65535 & n) * n | 0);
+ s[r] = f ^ u
+ }
+ t[0] = s[0] + (s[7] << 16 | s[7] >>> 16) + (s[6] << 16 | s[6] >>> 16) | 0, t[1] = s[1] + (s[0] << 8 | s[0] >>> 24) + s[7] | 0, t[2] = s[2] + (s[1] << 16 | s[1] >>> 16) + (s[0] << 16 | s[0] >>> 16) | 0, t[3] = s[3] + (s[2] << 8 | s[2] >>> 24) + s[1] | 0, t[4] = s[4] + (s[3] << 16 | s[3] >>> 16) + (s[2] << 16 | s[2] >>> 16) | 0, t[5] = s[5] + (s[4] << 8 | s[4] >>> 24) + s[3] | 0, t[6] = s[6] + (s[5] << 16 | s[5] >>> 16) + (s[4] << 16 | s[4] >>> 16) | 0, t[7] = s[7] + (s[6] << 8 | s[6] >>> 24) + s[5] | 0
+ }
+ t.Rabbit = e._createHelper(a)
+ }(), n.Rabbit)
+ },
+ 7193: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), r(754), r(4636), r(9506), r(7165), function() {
+ var t = n,
+ e = t.lib.StreamCipher,
+ r = t.algo,
+ i = r.RC4 = e.extend({
+ _doReset: function() {
+ for (var t = this._key, e = t.words, r = t.sigBytes, n = this._S = [], i = 0; i < 256; i++) n[i] = i;
+ i = 0;
+ for (var o = 0; i < 256; i++) {
+ var s = i % r,
+ a = e[s >>> 2] >>> 24 - s % 4 * 8 & 255;
+ o = (o + n[i] + a) % 256;
+ var f = n[i];
+ n[i] = n[o], n[o] = f
+ }
+ this._i = this._j = 0
+ },
+ _doProcessBlock: function(t, e) {
+ t[e] ^= o.call(this)
+ },
+ keySize: 8,
+ ivSize: 0
+ });
+
+ function o() {
+ for (var t = this._S, e = this._i, r = this._j, n = 0, i = 0; i < 4; i++) {
+ r = (r + t[e = (e + 1) % 256]) % 256;
+ var o = t[e];
+ t[e] = t[r], t[r] = o, n |= t[(t[e] + t[r]) % 256] << 24 - 8 * i
+ }
+ return this._i = e, this._j = r, n
+ }
+ t.RC4 = e._createHelper(i);
+ var s = r.RC4Drop = i.extend({
+ cfg: i.cfg.extend({
+ drop: 192
+ }),
+ _doReset: function() {
+ i._doReset.call(this);
+ for (var t = this.cfg.drop; t > 0; t--) o.call(this)
+ }
+ });
+ t.RC4Drop = e._createHelper(s)
+ }(), n.RC4)
+ },
+ 8056: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), function(t) {
+ var e = n,
+ r = e.lib,
+ i = r.WordArray,
+ o = r.Hasher,
+ s = e.algo,
+ a = i.create([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]),
+ f = i.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]),
+ u = i.create([11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]),
+ c = i.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]),
+ h = i.create([0, 1518500249, 1859775393, 2400959708, 2840853838]),
+ p = i.create([1352829926, 1548603684, 1836072691, 2053994217, 0]),
+ l = s.RIPEMD160 = o.extend({
+ _doReset: function() {
+ this._hash = i.create([1732584193, 4023233417, 2562383102, 271733878, 3285377520])
+ },
+ _doProcessBlock: function(t, e) {
+ for (var r = 0; r < 16; r++) {
+ var n = e + r,
+ i = t[n];
+ t[n] = 16711935 & (i << 8 | i >>> 24) | 4278255360 & (i << 24 | i >>> 8)
+ }
+ var o, s, l, _, b, E, w, O, B, A, x, P = this._hash.words,
+ T = h.words,
+ I = p.words,
+ k = a.words,
+ D = f.words,
+ R = u.words,
+ N = c.words;
+ for (E = o = P[0], w = s = P[1], O = l = P[2], B = _ = P[3], A = b = P[4], r = 0; r < 80; r += 1) x = o + t[e + k[r]] | 0, x += r < 16 ? y(s, l, _) + T[0] : r < 32 ? g(s, l, _) + T[1] : r < 48 ? d(s, l, _) + T[2] : r < 64 ? v(s, l, _) + T[3] : m(s, l, _) + T[4], x = (x = S(x |= 0, R[r])) + b | 0, o = b, b = _, _ = S(l, 10), l = s, s = x, x = E + t[e + D[r]] | 0, x += r < 16 ? m(w, O, B) + I[0] : r < 32 ? v(w, O, B) + I[1] : r < 48 ? d(w, O, B) + I[2] : r < 64 ? g(w, O, B) + I[3] : y(w, O, B) + I[4], x = (x = S(x |= 0, N[r])) + A | 0, E = A, A = B, B = S(O, 10), O = w, w = x;
+ x = P[1] + l + B | 0, P[1] = P[2] + _ + A | 0, P[2] = P[3] + b + E | 0, P[3] = P[4] + o + w | 0, P[4] = P[0] + s + O | 0, P[0] = x
+ },
+ _doFinalize: function() {
+ var t = this._data,
+ e = t.words,
+ r = 8 * this._nDataBytes,
+ n = 8 * t.sigBytes;
+ e[n >>> 5] |= 128 << 24 - n % 32, e[14 + (n + 64 >>> 9 << 4)] = 16711935 & (r << 8 | r >>> 24) | 4278255360 & (r << 24 | r >>> 8), t.sigBytes = 4 * (e.length + 1), this._process();
+ for (var i = this._hash, o = i.words, s = 0; s < 5; s++) {
+ var a = o[s];
+ o[s] = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8)
+ }
+ return i
+ },
+ clone: function() {
+ var t = o.clone.call(this);
+ return t._hash = this._hash.clone(), t
+ }
+ });
+
+ function y(t, e, r) {
+ return t ^ e ^ r
+ }
+
+ function g(t, e, r) {
+ return t & e | ~t & r
+ }
+
+ function d(t, e, r) {
+ return (t | ~e) ^ r
+ }
+
+ function v(t, e, r) {
+ return t & r | e & ~r
+ }
+
+ function m(t, e, r) {
+ return t ^ (e | ~r)
+ }
+
+ function S(t, e) {
+ return t << e | t >>> 32 - e
+ }
+ e.RIPEMD160 = o._createHelper(l), e.HmacRIPEMD160 = o._createHmacHelper(l)
+ }(Math), n.RIPEMD160)
+ },
+ 5471: function(t, e, r) {
+ var n, i, o, s, a, f, u, c;
+ t.exports = (i = (n = c = r(9021)).lib, o = i.WordArray, s = i.Hasher, a = n.algo, f = [], u = a.SHA1 = s.extend({
+ _doReset: function() {
+ this._hash = new o.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520])
+ },
+ _doProcessBlock: function(t, e) {
+ for (var r = this._hash.words, n = r[0], i = r[1], o = r[2], s = r[3], a = r[4], u = 0; u < 80; u++) {
+ if (u < 16) f[u] = 0 | t[e + u];
+ else {
+ var c = f[u - 3] ^ f[u - 8] ^ f[u - 14] ^ f[u - 16];
+ f[u] = c << 1 | c >>> 31
+ }
+ var h = (n << 5 | n >>> 27) + a + f[u];
+ h += u < 20 ? 1518500249 + (i & o | ~i & s) : u < 40 ? 1859775393 + (i ^ o ^ s) : u < 60 ? (i & o | i & s | o & s) - 1894007588 : (i ^ o ^ s) - 899497514, a = s, s = o, o = i << 30 | i >>> 2, i = n, n = h
+ }
+ r[0] = r[0] + n | 0, r[1] = r[1] + i | 0, r[2] = r[2] + o | 0, r[3] = r[3] + s | 0, r[4] = r[4] + a | 0
+ },
+ _doFinalize: function() {
+ var t = this._data,
+ e = t.words,
+ r = 8 * this._nDataBytes,
+ n = 8 * t.sigBytes;
+ return e[n >>> 5] |= 128 << 24 - n % 32, e[14 + (n + 64 >>> 9 << 4)] = Math.floor(r / 4294967296), e[15 + (n + 64 >>> 9 << 4)] = r, t.sigBytes = 4 * e.length, this._process(), this._hash
+ },
+ clone: function() {
+ var t = s.clone.call(this);
+ return t._hash = this._hash.clone(), t
+ }
+ }), n.SHA1 = s._createHelper(u), n.HmacSHA1 = s._createHmacHelper(u), c.SHA1)
+ },
+ 6308: function(t, e, r) {
+ var n, i, o, s, a, f;
+ t.exports = (f = r(9021), r(3009), i = (n = f).lib.WordArray, o = n.algo, s = o.SHA256, a = o.SHA224 = s.extend({
+ _doReset: function() {
+ this._hash = new i.init([3238371032, 914150663, 812702999, 4144912697, 4290775857, 1750603025, 1694076839, 3204075428])
+ },
+ _doFinalize: function() {
+ var t = s._doFinalize.call(this);
+ return t.sigBytes -= 4, t
+ }
+ }), n.SHA224 = s._createHelper(a), n.HmacSHA224 = s._createHmacHelper(a), f.SHA224)
+ },
+ 3009: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), function(t) {
+ var e = n,
+ r = e.lib,
+ i = r.WordArray,
+ o = r.Hasher,
+ s = e.algo,
+ a = [],
+ f = [];
+ ! function() {
+ function e(e) {
+ for (var r = t.sqrt(e), n = 2; n <= r; n++)
+ if (!(e % n)) return !1;
+ return !0
+ }
+
+ function r(t) {
+ return 4294967296 * (t - (0 | t)) | 0
+ }
+ for (var n = 2, i = 0; i < 64;) e(n) && (i < 8 && (a[i] = r(t.pow(n, .5))), f[i] = r(t.pow(n, 1 / 3)), i++), n++
+ }();
+ var u = [],
+ c = s.SHA256 = o.extend({
+ _doReset: function() {
+ this._hash = new i.init(a.slice(0))
+ },
+ _doProcessBlock: function(t, e) {
+ for (var r = this._hash.words, n = r[0], i = r[1], o = r[2], s = r[3], a = r[4], c = r[5], h = r[6], p = r[7], l = 0; l < 64; l++) {
+ if (l < 16) u[l] = 0 | t[e + l];
+ else {
+ var y = u[l - 15],
+ g = (y << 25 | y >>> 7) ^ (y << 14 | y >>> 18) ^ y >>> 3,
+ d = u[l - 2],
+ v = (d << 15 | d >>> 17) ^ (d << 13 | d >>> 19) ^ d >>> 10;
+ u[l] = g + u[l - 7] + v + u[l - 16]
+ }
+ var m = n & i ^ n & o ^ i & o,
+ S = (n << 30 | n >>> 2) ^ (n << 19 | n >>> 13) ^ (n << 10 | n >>> 22),
+ _ = p + ((a << 26 | a >>> 6) ^ (a << 21 | a >>> 11) ^ (a << 7 | a >>> 25)) + (a & c ^ ~a & h) + f[l] + u[l];
+ p = h, h = c, c = a, a = s + _ | 0, s = o, o = i, i = n, n = _ + (S + m) | 0
+ }
+ r[0] = r[0] + n | 0, r[1] = r[1] + i | 0, r[2] = r[2] + o | 0, r[3] = r[3] + s | 0, r[4] = r[4] + a | 0, r[5] = r[5] + c | 0, r[6] = r[6] + h | 0, r[7] = r[7] + p | 0
+ },
+ _doFinalize: function() {
+ var e = this._data,
+ r = e.words,
+ n = 8 * this._nDataBytes,
+ i = 8 * e.sigBytes;
+ return r[i >>> 5] |= 128 << 24 - i % 32, r[14 + (i + 64 >>> 9 << 4)] = t.floor(n / 4294967296), r[15 + (i + 64 >>> 9 << 4)] = n, e.sigBytes = 4 * r.length, this._process(), this._hash
+ },
+ clone: function() {
+ var t = o.clone.call(this);
+ return t._hash = this._hash.clone(), t
+ }
+ });
+ e.SHA256 = o._createHelper(c), e.HmacSHA256 = o._createHmacHelper(c)
+ }(Math), n.SHA256)
+ },
+ 5953: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), r(3240), function(t) {
+ var e = n,
+ r = e.lib,
+ i = r.WordArray,
+ o = r.Hasher,
+ s = e.x64.Word,
+ a = e.algo,
+ f = [],
+ u = [],
+ c = [];
+ ! function() {
+ for (var t = 1, e = 0, r = 0; r < 24; r++) {
+ f[t + 5 * e] = (r + 1) * (r + 2) / 2 % 64;
+ var n = (2 * t + 3 * e) % 5;
+ t = e % 5, e = n
+ }
+ for (t = 0; t < 5; t++)
+ for (e = 0; e < 5; e++) u[t + 5 * e] = e + (2 * t + 3 * e) % 5 * 5;
+ for (var i = 1, o = 0; o < 24; o++) {
+ for (var a = 0, h = 0, p = 0; p < 7; p++) {
+ if (1 & i) {
+ var l = (1 << p) - 1;
+ l < 32 ? h ^= 1 << l : a ^= 1 << l - 32
+ }
+ 128 & i ? i = i << 1 ^ 113 : i <<= 1
+ }
+ c[o] = s.create(a, h)
+ }
+ }();
+ var h = [];
+ ! function() {
+ for (var t = 0; t < 25; t++) h[t] = s.create()
+ }();
+ var p = a.SHA3 = o.extend({
+ cfg: o.cfg.extend({
+ outputLength: 512
+ }),
+ _doReset: function() {
+ for (var t = this._state = [], e = 0; e < 25; e++) t[e] = new s.init;
+ this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32
+ },
+ _doProcessBlock: function(t, e) {
+ for (var r = this._state, n = this.blockSize / 2, i = 0; i < n; i++) {
+ var o = t[e + 2 * i],
+ s = t[e + 2 * i + 1];
+ o = 16711935 & (o << 8 | o >>> 24) | 4278255360 & (o << 24 | o >>> 8), s = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8), (P = r[i]).high ^= s, P.low ^= o
+ }
+ for (var a = 0; a < 24; a++) {
+ for (var p = 0; p < 5; p++) {
+ for (var l = 0, y = 0, g = 0; g < 5; g++) l ^= (P = r[p + 5 * g]).high, y ^= P.low;
+ var d = h[p];
+ d.high = l, d.low = y
+ }
+ for (p = 0; p < 5; p++) {
+ var v = h[(p + 4) % 5],
+ m = h[(p + 1) % 5],
+ S = m.high,
+ _ = m.low;
+ for (l = v.high ^ (S << 1 | _ >>> 31), y = v.low ^ (_ << 1 | S >>> 31), g = 0; g < 5; g++)(P = r[p + 5 * g]).high ^= l, P.low ^= y
+ }
+ for (var b = 1; b < 25; b++) {
+ var E = (P = r[b]).high,
+ w = P.low,
+ O = f[b];
+ O < 32 ? (l = E << O | w >>> 32 - O, y = w << O | E >>> 32 - O) : (l = w << O - 32 | E >>> 64 - O, y = E << O - 32 | w >>> 64 - O);
+ var B = h[u[b]];
+ B.high = l, B.low = y
+ }
+ var A = h[0],
+ x = r[0];
+ for (A.high = x.high, A.low = x.low, p = 0; p < 5; p++)
+ for (g = 0; g < 5; g++) {
+ var P = r[b = p + 5 * g],
+ T = h[b],
+ I = h[(p + 1) % 5 + 5 * g],
+ k = h[(p + 2) % 5 + 5 * g];
+ P.high = T.high ^ ~I.high & k.high, P.low = T.low ^ ~I.low & k.low
+ }
+ P = r[0];
+ var D = c[a];
+ P.high ^= D.high, P.low ^= D.low
+ }
+ },
+ _doFinalize: function() {
+ var e = this._data,
+ r = e.words,
+ n = (this._nDataBytes, 8 * e.sigBytes),
+ o = 32 * this.blockSize;
+ r[n >>> 5] |= 1 << 24 - n % 32, r[(t.ceil((n + 1) / o) * o >>> 5) - 1] |= 128, e.sigBytes = 4 * r.length, this._process();
+ for (var s = this._state, a = this.cfg.outputLength / 8, f = a / 8, u = [], c = 0; c < f; c++) {
+ var h = s[c],
+ p = h.high,
+ l = h.low;
+ p = 16711935 & (p << 8 | p >>> 24) | 4278255360 & (p << 24 | p >>> 8), l = 16711935 & (l << 8 | l >>> 24) | 4278255360 & (l << 24 | l >>> 8), u.push(l), u.push(p)
+ }
+ return new i.init(u, a)
+ },
+ clone: function() {
+ for (var t = o.clone.call(this), e = t._state = this._state.slice(0), r = 0; r < 25; r++) e[r] = e[r].clone();
+ return t
+ }
+ });
+ e.SHA3 = o._createHelper(p), e.HmacSHA3 = o._createHmacHelper(p)
+ }(Math), n.SHA3)
+ },
+ 9557: function(t, e, r) {
+ var n, i, o, s, a, f, u, c;
+ t.exports = (c = r(9021), r(3240), r(1380), i = (n = c).x64, o = i.Word, s = i.WordArray, a = n.algo, f = a.SHA512, u = a.SHA384 = f.extend({
+ _doReset: function() {
+ this._hash = new s.init([new o.init(3418070365, 3238371032), new o.init(1654270250, 914150663), new o.init(2438529370, 812702999), new o.init(355462360, 4144912697), new o.init(1731405415, 4290775857), new o.init(2394180231, 1750603025), new o.init(3675008525, 1694076839), new o.init(1203062813, 3204075428)])
+ },
+ _doFinalize: function() {
+ var t = f._doFinalize.call(this);
+ return t.sigBytes -= 16, t
+ }
+ }), n.SHA384 = f._createHelper(u), n.HmacSHA384 = f._createHmacHelper(u), c.SHA384)
+ },
+ 1380: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), r(3240), function() {
+ var t = n,
+ e = t.lib.Hasher,
+ r = t.x64,
+ i = r.Word,
+ o = r.WordArray,
+ s = t.algo;
+
+ function a() {
+ return i.create.apply(i, arguments)
+ }
+ var f = [a(1116352408, 3609767458), a(1899447441, 602891725), a(3049323471, 3964484399), a(3921009573, 2173295548), a(961987163, 4081628472), a(1508970993, 3053834265), a(2453635748, 2937671579), a(2870763221, 3664609560), a(3624381080, 2734883394), a(310598401, 1164996542), a(607225278, 1323610764), a(1426881987, 3590304994), a(1925078388, 4068182383), a(2162078206, 991336113), a(2614888103, 633803317), a(3248222580, 3479774868), a(3835390401, 2666613458), a(4022224774, 944711139), a(264347078, 2341262773), a(604807628, 2007800933), a(770255983, 1495990901), a(1249150122, 1856431235), a(1555081692, 3175218132), a(1996064986, 2198950837), a(2554220882, 3999719339), a(2821834349, 766784016), a(2952996808, 2566594879), a(3210313671, 3203337956), a(3336571891, 1034457026), a(3584528711, 2466948901), a(113926993, 3758326383), a(338241895, 168717936), a(666307205, 1188179964), a(773529912, 1546045734), a(1294757372, 1522805485), a(1396182291, 2643833823), a(1695183700, 2343527390), a(1986661051, 1014477480), a(2177026350, 1206759142), a(2456956037, 344077627), a(2730485921, 1290863460), a(2820302411, 3158454273), a(3259730800, 3505952657), a(3345764771, 106217008), a(3516065817, 3606008344), a(3600352804, 1432725776), a(4094571909, 1467031594), a(275423344, 851169720), a(430227734, 3100823752), a(506948616, 1363258195), a(659060556, 3750685593), a(883997877, 3785050280), a(958139571, 3318307427), a(1322822218, 3812723403), a(1537002063, 2003034995), a(1747873779, 3602036899), a(1955562222, 1575990012), a(2024104815, 1125592928), a(2227730452, 2716904306), a(2361852424, 442776044), a(2428436474, 593698344), a(2756734187, 3733110249), a(3204031479, 2999351573), a(3329325298, 3815920427), a(3391569614, 3928383900), a(3515267271, 566280711), a(3940187606, 3454069534), a(4118630271, 4000239992), a(116418474, 1914138554), a(174292421, 2731055270), a(289380356, 3203993006), a(460393269, 320620315), a(685471733, 587496836), a(852142971, 1086792851), a(1017036298, 365543100), a(1126000580, 2618297676), a(1288033470, 3409855158), a(1501505948, 4234509866), a(1607167915, 987167468), a(1816402316, 1246189591)],
+ u = [];
+ ! function() {
+ for (var t = 0; t < 80; t++) u[t] = a()
+ }();
+ var c = s.SHA512 = e.extend({
+ _doReset: function() {
+ this._hash = new o.init([new i.init(1779033703, 4089235720), new i.init(3144134277, 2227873595), new i.init(1013904242, 4271175723), new i.init(2773480762, 1595750129), new i.init(1359893119, 2917565137), new i.init(2600822924, 725511199), new i.init(528734635, 4215389547), new i.init(1541459225, 327033209)])
+ },
+ _doProcessBlock: function(t, e) {
+ for (var r = this._hash.words, n = r[0], i = r[1], o = r[2], s = r[3], a = r[4], c = r[5], h = r[6], p = r[7], l = n.high, y = n.low, g = i.high, d = i.low, v = o.high, m = o.low, S = s.high, _ = s.low, b = a.high, E = a.low, w = c.high, O = c.low, B = h.high, A = h.low, x = p.high, P = p.low, T = l, I = y, k = g, D = d, R = v, N = m, L = S, C = _, U = b, M = E, j = w, H = O, F = B, z = A, G = x, q = P, $ = 0; $ < 80; $++) {
+ var K = u[$];
+ if ($ < 16) var W = K.high = 0 | t[e + 2 * $],
+ V = K.low = 0 | t[e + 2 * $ + 1];
+ else {
+ var Y = u[$ - 15],
+ X = Y.high,
+ Z = Y.low,
+ J = (X >>> 1 | Z << 31) ^ (X >>> 8 | Z << 24) ^ X >>> 7,
+ Q = (Z >>> 1 | X << 31) ^ (Z >>> 8 | X << 24) ^ (Z >>> 7 | X << 25),
+ tt = u[$ - 2],
+ et = tt.high,
+ rt = tt.low,
+ nt = (et >>> 19 | rt << 13) ^ (et << 3 | rt >>> 29) ^ et >>> 6,
+ it = (rt >>> 19 | et << 13) ^ (rt << 3 | et >>> 29) ^ (rt >>> 6 | et << 26),
+ ot = u[$ - 7],
+ st = ot.high,
+ at = ot.low,
+ ft = u[$ - 16],
+ ut = ft.high,
+ ct = ft.low;
+ W = (W = (W = J + st + ((V = Q + at) >>> 0 < Q >>> 0 ? 1 : 0)) + nt + ((V += it) >>> 0 < it >>> 0 ? 1 : 0)) + ut + ((V += ct) >>> 0 < ct >>> 0 ? 1 : 0), K.high = W, K.low = V
+ }
+ var ht, pt = U & j ^ ~U & F,
+ lt = M & H ^ ~M & z,
+ yt = T & k ^ T & R ^ k & R,
+ gt = I & D ^ I & N ^ D & N,
+ dt = (T >>> 28 | I << 4) ^ (T << 30 | I >>> 2) ^ (T << 25 | I >>> 7),
+ vt = (I >>> 28 | T << 4) ^ (I << 30 | T >>> 2) ^ (I << 25 | T >>> 7),
+ mt = (U >>> 14 | M << 18) ^ (U >>> 18 | M << 14) ^ (U << 23 | M >>> 9),
+ St = (M >>> 14 | U << 18) ^ (M >>> 18 | U << 14) ^ (M << 23 | U >>> 9),
+ _t = f[$],
+ bt = _t.high,
+ Et = _t.low,
+ wt = G + mt + ((ht = q + St) >>> 0 < q >>> 0 ? 1 : 0),
+ Ot = vt + gt;
+ G = F, q = z, F = j, z = H, j = U, H = M, U = L + (wt = (wt = (wt = wt + pt + ((ht += lt) >>> 0 < lt >>> 0 ? 1 : 0)) + bt + ((ht += Et) >>> 0 < Et >>> 0 ? 1 : 0)) + W + ((ht += V) >>> 0 < V >>> 0 ? 1 : 0)) + ((M = C + ht | 0) >>> 0 < C >>> 0 ? 1 : 0) | 0, L = R, C = N, R = k, N = D, k = T, D = I, T = wt + (dt + yt + (Ot >>> 0 < vt >>> 0 ? 1 : 0)) + ((I = ht + Ot | 0) >>> 0 < ht >>> 0 ? 1 : 0) | 0
+ }
+ y = n.low = y + I, n.high = l + T + (y >>> 0 < I >>> 0 ? 1 : 0), d = i.low = d + D, i.high = g + k + (d >>> 0 < D >>> 0 ? 1 : 0), m = o.low = m + N, o.high = v + R + (m >>> 0 < N >>> 0 ? 1 : 0), _ = s.low = _ + C, s.high = S + L + (_ >>> 0 < C >>> 0 ? 1 : 0), E = a.low = E + M, a.high = b + U + (E >>> 0 < M >>> 0 ? 1 : 0), O = c.low = O + H, c.high = w + j + (O >>> 0 < H >>> 0 ? 1 : 0), A = h.low = A + z, h.high = B + F + (A >>> 0 < z >>> 0 ? 1 : 0), P = p.low = P + q, p.high = x + G + (P >>> 0 < q >>> 0 ? 1 : 0)
+ },
+ _doFinalize: function() {
+ var t = this._data,
+ e = t.words,
+ r = 8 * this._nDataBytes,
+ n = 8 * t.sigBytes;
+ return e[n >>> 5] |= 128 << 24 - n % 32, e[30 + (n + 128 >>> 10 << 5)] = Math.floor(r / 4294967296), e[31 + (n + 128 >>> 10 << 5)] = r, t.sigBytes = 4 * e.length, this._process(), this._hash.toX32()
+ },
+ clone: function() {
+ var t = e.clone.call(this);
+ return t._hash = this._hash.clone(), t
+ },
+ blockSize: 32
+ });
+ t.SHA512 = e._createHelper(c), t.HmacSHA512 = e._createHmacHelper(c)
+ }(), n.SHA512)
+ },
+ 7628: function(t, e, r) {
+ var n;
+ t.exports = (n = r(9021), r(754), r(4636), r(9506), r(7165), function() {
+ var t = n,
+ e = t.lib,
+ r = e.WordArray,
+ i = e.BlockCipher,
+ o = t.algo,
+ s = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4],
+ a = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32],
+ f = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28],
+ u = [{
+ 0: 8421888,
+ 268435456: 32768,
+ 536870912: 8421378,
+ 805306368: 2,
+ 1073741824: 512,
+ 1342177280: 8421890,
+ 1610612736: 8389122,
+ 1879048192: 8388608,
+ 2147483648: 514,
+ 2415919104: 8389120,
+ 2684354560: 33280,
+ 2952790016: 8421376,
+ 3221225472: 32770,
+ 3489660928: 8388610,
+ 3758096384: 0,
+ 4026531840: 33282,
+ 134217728: 0,
+ 402653184: 8421890,
+ 671088640: 33282,
+ 939524096: 32768,
+ 1207959552: 8421888,
+ 1476395008: 512,
+ 1744830464: 8421378,
+ 2013265920: 2,
+ 2281701376: 8389120,
+ 2550136832: 33280,
+ 2818572288: 8421376,
+ 3087007744: 8389122,
+ 3355443200: 8388610,
+ 3623878656: 32770,
+ 3892314112: 514,
+ 4160749568: 8388608,
+ 1: 32768,
+ 268435457: 2,
+ 536870913: 8421888,
+ 805306369: 8388608,
+ 1073741825: 8421378,
+ 1342177281: 33280,
+ 1610612737: 512,
+ 1879048193: 8389122,
+ 2147483649: 8421890,
+ 2415919105: 8421376,
+ 2684354561: 8388610,
+ 2952790017: 33282,
+ 3221225473: 514,
+ 3489660929: 8389120,
+ 3758096385: 32770,
+ 4026531841: 0,
+ 134217729: 8421890,
+ 402653185: 8421376,
+ 671088641: 8388608,
+ 939524097: 512,
+ 1207959553: 32768,
+ 1476395009: 8388610,
+ 1744830465: 2,
+ 2013265921: 33282,
+ 2281701377: 32770,
+ 2550136833: 8389122,
+ 2818572289: 514,
+ 3087007745: 8421888,
+ 3355443201: 8389120,
+ 3623878657: 0,
+ 3892314113: 33280,
+ 4160749569: 8421378
+ }, {
+ 0: 1074282512,
+ 16777216: 16384,
+ 33554432: 524288,
+ 50331648: 1074266128,
+ 67108864: 1073741840,
+ 83886080: 1074282496,
+ 100663296: 1073758208,
+ 117440512: 16,
+ 134217728: 540672,
+ 150994944: 1073758224,
+ 167772160: 1073741824,
+ 184549376: 540688,
+ 201326592: 524304,
+ 218103808: 0,
+ 234881024: 16400,
+ 251658240: 1074266112,
+ 8388608: 1073758208,
+ 25165824: 540688,
+ 41943040: 16,
+ 58720256: 1073758224,
+ 75497472: 1074282512,
+ 92274688: 1073741824,
+ 109051904: 524288,
+ 125829120: 1074266128,
+ 142606336: 524304,
+ 159383552: 0,
+ 176160768: 16384,
+ 192937984: 1074266112,
+ 209715200: 1073741840,
+ 226492416: 540672,
+ 243269632: 1074282496,
+ 260046848: 16400,
+ 268435456: 0,
+ 285212672: 1074266128,
+ 301989888: 1073758224,
+ 318767104: 1074282496,
+ 335544320: 1074266112,
+ 352321536: 16,
+ 369098752: 540688,
+ 385875968: 16384,
+ 402653184: 16400,
+ 419430400: 524288,
+ 436207616: 524304,
+ 452984832: 1073741840,
+ 469762048: 540672,
+ 486539264: 1073758208,
+ 503316480: 1073741824,
+ 520093696: 1074282512,
+ 276824064: 540688,
+ 293601280: 524288,
+ 310378496: 1074266112,
+ 327155712: 16384,
+ 343932928: 1073758208,
+ 360710144: 1074282512,
+ 377487360: 16,
+ 394264576: 1073741824,
+ 411041792: 1074282496,
+ 427819008: 1073741840,
+ 444596224: 1073758224,
+ 461373440: 524304,
+ 478150656: 0,
+ 494927872: 16400,
+ 511705088: 1074266128,
+ 528482304: 540672
+ }, {
+ 0: 260,
+ 1048576: 0,
+ 2097152: 67109120,
+ 3145728: 65796,
+ 4194304: 65540,
+ 5242880: 67108868,
+ 6291456: 67174660,
+ 7340032: 67174400,
+ 8388608: 67108864,
+ 9437184: 67174656,
+ 10485760: 65792,
+ 11534336: 67174404,
+ 12582912: 67109124,
+ 13631488: 65536,
+ 14680064: 4,
+ 15728640: 256,
+ 524288: 67174656,
+ 1572864: 67174404,
+ 2621440: 0,
+ 3670016: 67109120,
+ 4718592: 67108868,
+ 5767168: 65536,
+ 6815744: 65540,
+ 7864320: 260,
+ 8912896: 4,
+ 9961472: 256,
+ 11010048: 67174400,
+ 12058624: 65796,
+ 13107200: 65792,
+ 14155776: 67109124,
+ 15204352: 67174660,
+ 16252928: 67108864,
+ 16777216: 67174656,
+ 17825792: 65540,
+ 18874368: 65536,
+ 19922944: 67109120,
+ 20971520: 256,
+ 22020096: 67174660,
+ 23068672: 67108868,
+ 24117248: 0,
+ 25165824: 67109124,
+ 26214400: 67108864,
+ 27262976: 4,
+ 28311552: 65792,
+ 29360128: 67174400,
+ 30408704: 260,
+ 31457280: 65796,
+ 32505856: 67174404,
+ 17301504: 67108864,
+ 18350080: 260,
+ 19398656: 67174656,
+ 20447232: 0,
+ 21495808: 65540,
+ 22544384: 67109120,
+ 23592960: 256,
+ 24641536: 67174404,
+ 25690112: 65536,
+ 26738688: 67174660,
+ 27787264: 65796,
+ 28835840: 67108868,
+ 29884416: 67109124,
+ 30932992: 67174400,
+ 31981568: 4,
+ 33030144: 65792
+ }, {
+ 0: 2151682048,
+ 65536: 2147487808,
+ 131072: 4198464,
+ 196608: 2151677952,
+ 262144: 0,
+ 327680: 4198400,
+ 393216: 2147483712,
+ 458752: 4194368,
+ 524288: 2147483648,
+ 589824: 4194304,
+ 655360: 64,
+ 720896: 2147487744,
+ 786432: 2151678016,
+ 851968: 4160,
+ 917504: 4096,
+ 983040: 2151682112,
+ 32768: 2147487808,
+ 98304: 64,
+ 163840: 2151678016,
+ 229376: 2147487744,
+ 294912: 4198400,
+ 360448: 2151682112,
+ 425984: 0,
+ 491520: 2151677952,
+ 557056: 4096,
+ 622592: 2151682048,
+ 688128: 4194304,
+ 753664: 4160,
+ 819200: 2147483648,
+ 884736: 4194368,
+ 950272: 4198464,
+ 1015808: 2147483712,
+ 1048576: 4194368,
+ 1114112: 4198400,
+ 1179648: 2147483712,
+ 1245184: 0,
+ 1310720: 4160,
+ 1376256: 2151678016,
+ 1441792: 2151682048,
+ 1507328: 2147487808,
+ 1572864: 2151682112,
+ 1638400: 2147483648,
+ 1703936: 2151677952,
+ 1769472: 4198464,
+ 1835008: 2147487744,
+ 1900544: 4194304,
+ 1966080: 64,
+ 2031616: 4096,
+ 1081344: 2151677952,
+ 1146880: 2151682112,
+ 1212416: 0,
+ 1277952: 4198400,
+ 1343488: 4194368,
+ 1409024: 2147483648,
+ 1474560: 2147487808,
+ 1540096: 64,
+ 1605632: 2147483712,
+ 1671168: 4096,
+ 1736704: 2147487744,
+ 1802240: 2151678016,
+ 1867776: 4160,
+ 1933312: 2151682048,
+ 1998848: 4194304,
+ 2064384: 4198464
+ }, {
+ 0: 128,
+ 4096: 17039360,
+ 8192: 262144,
+ 12288: 536870912,
+ 16384: 537133184,
+ 20480: 16777344,
+ 24576: 553648256,
+ 28672: 262272,
+ 32768: 16777216,
+ 36864: 537133056,
+ 40960: 536871040,
+ 45056: 553910400,
+ 49152: 553910272,
+ 53248: 0,
+ 57344: 17039488,
+ 61440: 553648128,
+ 2048: 17039488,
+ 6144: 553648256,
+ 10240: 128,
+ 14336: 17039360,
+ 18432: 262144,
+ 22528: 537133184,
+ 26624: 553910272,
+ 30720: 536870912,
+ 34816: 537133056,
+ 38912: 0,
+ 43008: 553910400,
+ 47104: 16777344,
+ 51200: 536871040,
+ 55296: 553648128,
+ 59392: 16777216,
+ 63488: 262272,
+ 65536: 262144,
+ 69632: 128,
+ 73728: 536870912,
+ 77824: 553648256,
+ 81920: 16777344,
+ 86016: 553910272,
+ 90112: 537133184,
+ 94208: 16777216,
+ 98304: 553910400,
+ 102400: 553648128,
+ 106496: 17039360,
+ 110592: 537133056,
+ 114688: 262272,
+ 118784: 536871040,
+ 122880: 0,
+ 126976: 17039488,
+ 67584: 553648256,
+ 71680: 16777216,
+ 75776: 17039360,
+ 79872: 537133184,
+ 83968: 536870912,
+ 88064: 17039488,
+ 92160: 128,
+ 96256: 553910272,
+ 100352: 262272,
+ 104448: 553910400,
+ 108544: 0,
+ 112640: 553648128,
+ 116736: 16777344,
+ 120832: 262144,
+ 124928: 537133056,
+ 129024: 536871040
+ }, {
+ 0: 268435464,
+ 256: 8192,
+ 512: 270532608,
+ 768: 270540808,
+ 1024: 268443648,
+ 1280: 2097152,
+ 1536: 2097160,
+ 1792: 268435456,
+ 2048: 0,
+ 2304: 268443656,
+ 2560: 2105344,
+ 2816: 8,
+ 3072: 270532616,
+ 3328: 2105352,
+ 3584: 8200,
+ 3840: 270540800,
+ 128: 270532608,
+ 384: 270540808,
+ 640: 8,
+ 896: 2097152,
+ 1152: 2105352,
+ 1408: 268435464,
+ 1664: 268443648,
+ 1920: 8200,
+ 2176: 2097160,
+ 2432: 8192,
+ 2688: 268443656,
+ 2944: 270532616,
+ 3200: 0,
+ 3456: 270540800,
+ 3712: 2105344,
+ 3968: 268435456,
+ 4096: 268443648,
+ 4352: 270532616,
+ 4608: 270540808,
+ 4864: 8200,
+ 5120: 2097152,
+ 5376: 268435456,
+ 5632: 268435464,
+ 5888: 2105344,
+ 6144: 2105352,
+ 6400: 0,
+ 6656: 8,
+ 6912: 270532608,
+ 7168: 8192,
+ 7424: 268443656,
+ 7680: 270540800,
+ 7936: 2097160,
+ 4224: 8,
+ 4480: 2105344,
+ 4736: 2097152,
+ 4992: 268435464,
+ 5248: 268443648,
+ 5504: 8200,
+ 5760: 270540808,
+ 6016: 270532608,
+ 6272: 270540800,
+ 6528: 270532616,
+ 6784: 8192,
+ 7040: 2105352,
+ 7296: 2097160,
+ 7552: 0,
+ 7808: 268435456,
+ 8064: 268443656
+ }, {
+ 0: 1048576,
+ 16: 33555457,
+ 32: 1024,
+ 48: 1049601,
+ 64: 34604033,
+ 80: 0,
+ 96: 1,
+ 112: 34603009,
+ 128: 33555456,
+ 144: 1048577,
+ 160: 33554433,
+ 176: 34604032,
+ 192: 34603008,
+ 208: 1025,
+ 224: 1049600,
+ 240: 33554432,
+ 8: 34603009,
+ 24: 0,
+ 40: 33555457,
+ 56: 34604032,
+ 72: 1048576,
+ 88: 33554433,
+ 104: 33554432,
+ 120: 1025,
+ 136: 1049601,
+ 152: 33555456,
+ 168: 34603008,
+ 184: 1048577,
+ 200: 1024,
+ 216: 34604033,
+ 232: 1,
+ 248: 1049600,
+ 256: 33554432,
+ 272: 1048576,
+ 288: 33555457,
+ 304: 34603009,
+ 320: 1048577,
+ 336: 33555456,
+ 352: 34604032,
+ 368: 1049601,
+ 384: 1025,
+ 400: 34604033,
+ 416: 1049600,
+ 432: 1,
+ 448: 0,
+ 464: 34603008,
+ 480: 33554433,
+ 496: 1024,
+ 264: 1049600,
+ 280: 33555457,
+ 296: 34603009,
+ 312: 1,
+ 328: 33554432,
+ 344: 1048576,
+ 360: 1025,
+ 376: 34604032,
+ 392: 33554433,
+ 408: 34603008,
+ 424: 0,
+ 440: 34604033,
+ 456: 1049601,
+ 472: 1024,
+ 488: 33555456,
+ 504: 1048577
+ }, {
+ 0: 134219808,
+ 1: 131072,
+ 2: 134217728,
+ 3: 32,
+ 4: 131104,
+ 5: 134350880,
+ 6: 134350848,
+ 7: 2048,
+ 8: 134348800,
+ 9: 134219776,
+ 10: 133120,
+ 11: 134348832,
+ 12: 2080,
+ 13: 0,
+ 14: 134217760,
+ 15: 133152,
+ 2147483648: 2048,
+ 2147483649: 134350880,
+ 2147483650: 134219808,
+ 2147483651: 134217728,
+ 2147483652: 134348800,
+ 2147483653: 133120,
+ 2147483654: 133152,
+ 2147483655: 32,
+ 2147483656: 134217760,
+ 2147483657: 2080,
+ 2147483658: 131104,
+ 2147483659: 134350848,
+ 2147483660: 0,
+ 2147483661: 134348832,
+ 2147483662: 134219776,
+ 2147483663: 131072,
+ 16: 133152,
+ 17: 134350848,
+ 18: 32,
+ 19: 2048,
+ 20: 134219776,
+ 21: 134217760,
+ 22: 134348832,
+ 23: 131072,
+ 24: 0,
+ 25: 131104,
+ 26: 134348800,
+ 27: 134219808,
+ 28: 134350880,
+ 29: 133120,
+ 30: 2080,
+ 31: 134217728,
+ 2147483664: 131072,
+ 2147483665: 2048,
+ 2147483666: 134348832,
+ 2147483667: 133152,
+ 2147483668: 32,
+ 2147483669: 134348800,
+ 2147483670: 134217728,
+ 2147483671: 134219808,
+ 2147483672: 134350880,
+ 2147483673: 134217760,
+ 2147483674: 134219776,
+ 2147483675: 0,
+ 2147483676: 133120,
+ 2147483677: 2080,
+ 2147483678: 131104,
+ 2147483679: 134350848
+ }],
+ c = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679],
+ h = o.DES = i.extend({
+ _doReset: function() {
+ for (var t = this._key.words, e = [], r = 0; r < 56; r++) {
+ var n = s[r] - 1;
+ e[r] = t[n >>> 5] >>> 31 - n % 32 & 1
+ }
+ for (var i = this._subKeys = [], o = 0; o < 16; o++) {
+ var u = i[o] = [],
+ c = f[o];
+ for (r = 0; r < 24; r++) u[r / 6 | 0] |= e[(a[r] - 1 + c) % 28] << 31 - r % 6, u[4 + (r / 6 | 0)] |= e[28 + (a[r + 24] - 1 + c) % 28] << 31 - r % 6;
+ for (u[0] = u[0] << 1 | u[0] >>> 31, r = 1; r < 7; r++) u[r] = u[r] >>> 4 * (r - 1) + 3;
+ u[7] = u[7] << 5 | u[7] >>> 27
+ }
+ var h = this._invSubKeys = [];
+ for (r = 0; r < 16; r++) h[r] = i[15 - r]
+ },
+ encryptBlock: function(t, e) {
+ this._doCryptBlock(t, e, this._subKeys)
+ },
+ decryptBlock: function(t, e) {
+ this._doCryptBlock(t, e, this._invSubKeys)
+ },
+ _doCryptBlock: function(t, e, r) {
+ this._lBlock = t[e], this._rBlock = t[e + 1], p.call(this, 4, 252645135), p.call(this, 16, 65535), l.call(this, 2, 858993459), l.call(this, 8, 16711935), p.call(this, 1, 1431655765);
+ for (var n = 0; n < 16; n++) {
+ for (var i = r[n], o = this._lBlock, s = this._rBlock, a = 0, f = 0; f < 8; f++) a |= u[f][((s ^ i[f]) & c[f]) >>> 0];
+ this._lBlock = s, this._rBlock = o ^ a
+ }
+ var h = this._lBlock;
+ this._lBlock = this._rBlock, this._rBlock = h, p.call(this, 1, 1431655765), l.call(this, 8, 16711935), l.call(this, 2, 858993459), p.call(this, 16, 65535), p.call(this, 4, 252645135), t[e] = this._lBlock, t[e + 1] = this._rBlock
+ },
+ keySize: 2,
+ ivSize: 2,
+ blockSize: 2
+ });
+
+ function p(t, e) {
+ var r = (this._lBlock >>> t ^ this._rBlock) & e;
+ this._rBlock ^= r, this._lBlock ^= r << t
+ }
+
+ function l(t, e) {
+ var r = (this._rBlock >>> t ^ this._lBlock) & e;
+ this._lBlock ^= r, this._rBlock ^= r << t
+ }
+ t.DES = i._createHelper(h);
+ var y = o.TripleDES = i.extend({
+ _doReset: function() {
+ var t = this._key.words;
+ this._des1 = h.createEncryptor(r.create(t.slice(0, 2))), this._des2 = h.createEncryptor(r.create(t.slice(2, 4))), this._des3 = h.createEncryptor(r.create(t.slice(4, 6)))
+ },
+ encryptBlock: function(t, e) {
+ this._des1.encryptBlock(t, e), this._des2.decryptBlock(t, e), this._des3.encryptBlock(t, e)
+ },
+ decryptBlock: function(t, e) {
+ this._des3.decryptBlock(t, e), this._des2.encryptBlock(t, e), this._des1.decryptBlock(t, e)
+ },
+ keySize: 6,
+ ivSize: 2,
+ blockSize: 2
+ });
+ t.TripleDES = i._createHelper(y)
+ }(), n.TripleDES)
+ },
+ 3240: function(t, e, r) {
+ var n, i, o, s, a, f;
+ t.exports = (n = r(9021), o = (i = n).lib, s = o.Base, a = o.WordArray, (f = i.x64 = {}).Word = s.extend({
+ init: function(t, e) {
+ this.high = t, this.low = e
+ }
+ }), f.WordArray = s.extend({
+ init: function(t, e) {
+ t = this.words = t || [], this.sigBytes = null != e ? e : 8 * t.length
+ },
+ toX32: function() {
+ for (var t = this.words, e = t.length, r = [], n = 0; n < e; n++) {
+ var i = t[n];
+ r.push(i.high), r.push(i.low)
+ }
+ return a.create(r, this.sigBytes)
+ },
+ clone: function() {
+ for (var t = s.clone.call(this), e = t.words = this.words.slice(0), r = e.length, n = 0; n < r; n++) e[n] = e[n].clone();
+ return t
+ }
+ }), n)
+ },
+ 41: (t, e, r) => {
+ "use strict";
+ var n = r(655),
+ i = r(8068),
+ o = r(9675),
+ s = r(5795);
+ t.exports = function(t, e, r) {
+ if (!t || "object" != typeof t && "function" != typeof t) throw new o("`obj` must be an object or a function`");
+ if ("string" != typeof e && "symbol" != typeof e) throw new o("`property` must be a string or a symbol`");
+ if (arguments.length > 3 && "boolean" != typeof arguments[3] && null !== arguments[3]) throw new o("`nonEnumerable`, if provided, must be a boolean or null");
+ if (arguments.length > 4 && "boolean" != typeof arguments[4] && null !== arguments[4]) throw new o("`nonWritable`, if provided, must be a boolean or null");
+ if (arguments.length > 5 && "boolean" != typeof arguments[5] && null !== arguments[5]) throw new o("`nonConfigurable`, if provided, must be a boolean or null");
+ if (arguments.length > 6 && "boolean" != typeof arguments[6]) throw new o("`loose`, if provided, must be a boolean");
+ var a = arguments.length > 3 ? arguments[3] : null,
+ f = arguments.length > 4 ? arguments[4] : null,
+ u = arguments.length > 5 ? arguments[5] : null,
+ c = arguments.length > 6 && arguments[6],
+ h = !!s && s(t, e);
+ if (n) n(t, e, {
+ configurable: null === u && h ? h.configurable : !u,
+ enumerable: null === a && h ? h.enumerable : !a,
+ value: r,
+ writable: null === f && h ? h.writable : !f
+ });
+ else {
+ if (!c && (a || f || u)) throw new i("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");
+ t[e] = r
+ }
+ }
+ },
+ 655: (t, e, r) => {
+ "use strict";
+ var n = r(453)("%Object.defineProperty%", !0) || !1;
+ if (n) try {
+ n({}, "a", {
+ value: 1
+ })
+ } catch (t) {
+ n = !1
+ }
+ t.exports = n
+ },
+ 1237: t => {
+ "use strict";
+ t.exports = EvalError
+ },
+ 9383: t => {
+ "use strict";
+ t.exports = Error
+ },
+ 9290: t => {
+ "use strict";
+ t.exports = RangeError
+ },
+ 9538: t => {
+ "use strict";
+ t.exports = ReferenceError
+ },
+ 8068: t => {
+ "use strict";
+ t.exports = SyntaxError
+ },
+ 9675: t => {
+ "use strict";
+ t.exports = TypeError
+ },
+ 5345: t => {
+ "use strict";
+ t.exports = URIError
+ },
+ 9353: t => {
+ "use strict";
+ var e = Object.prototype.toString,
+ r = Math.max,
+ n = function(t, e) {
+ for (var r = [], n = 0; n < t.length; n += 1) r[n] = t[n];
+ for (var i = 0; i < e.length; i += 1) r[i + t.length] = e[i];
+ return r
+ };
+ t.exports = function(t) {
+ var i = this;
+ if ("function" != typeof i || "[object Function]" !== e.apply(i)) throw new TypeError("Function.prototype.bind called on incompatible " + i);
+ for (var o, s = function(t, e) {
+ for (var r = [], n = 1, i = 0; n < t.length; n += 1, i += 1) r[i] = t[n];
+ return r
+ }(arguments), a = r(0, i.length - s.length), f = [], u = 0; u < a; u++) f[u] = "$" + u;
+ if (o = Function("binder", "return function (" + function(t, e) {
+ for (var r = "", n = 0; n < t.length; n += 1) r += t[n], n + 1 < t.length && (r += ",");
+ return r
+ }(f) + "){ return binder.apply(this,arguments); }")((function() {
+ if (this instanceof o) {
+ var e = i.apply(this, n(s, arguments));
+ return Object(e) === e ? e : this
+ }
+ return i.apply(t, n(s, arguments))
+ })), i.prototype) {
+ var c = function() {};
+ c.prototype = i.prototype, o.prototype = new c, c.prototype = null
+ }
+ return o
+ }
+ },
+ 6743: (t, e, r) => {
+ "use strict";
+ var n = r(9353);
+ t.exports = Function.prototype.bind || n
+ },
+ 453: (t, e, r) => {
+ "use strict";
+ var n, i = r(9383),
+ o = r(1237),
+ s = r(9290),
+ a = r(9538),
+ f = r(8068),
+ u = r(9675),
+ c = r(5345),
+ h = Function,
+ p = function(t) {
+ try {
+ return h('"use strict"; return (' + t + ").constructor;")()
+ } catch (t) {}
+ },
+ l = Object.getOwnPropertyDescriptor;
+ if (l) try {
+ l({}, "")
+ } catch (t) {
+ l = null
+ }
+ var y = function() {
+ throw new u
+ },
+ g = l ? function() {
+ try {
+ return y
+ } catch (t) {
+ try {
+ return l(arguments, "callee").get
+ } catch (t) {
+ return y
+ }
+ }
+ }() : y,
+ d = r(4039)(),
+ v = r(24)(),
+ m = Object.getPrototypeOf || (v ? function(t) {
+ return t.__proto__
+ } : null),
+ S = {},
+ _ = "undefined" != typeof Uint8Array && m ? m(Uint8Array) : n,
+ b = {
+ __proto__: null,
+ "%AggregateError%": "undefined" == typeof AggregateError ? n : AggregateError,
+ "%Array%": Array,
+ "%ArrayBuffer%": "undefined" == typeof ArrayBuffer ? n : ArrayBuffer,
+ "%ArrayIteratorPrototype%": d && m ? m([][Symbol.iterator]()) : n,
+ "%AsyncFromSyncIteratorPrototype%": n,
+ "%AsyncFunction%": S,
+ "%AsyncGenerator%": S,
+ "%AsyncGeneratorFunction%": S,
+ "%AsyncIteratorPrototype%": S,
+ "%Atomics%": "undefined" == typeof Atomics ? n : Atomics,
+ "%BigInt%": "undefined" == typeof BigInt ? n : BigInt,
+ "%BigInt64Array%": "undefined" == typeof BigInt64Array ? n : BigInt64Array,
+ "%BigUint64Array%": "undefined" == typeof BigUint64Array ? n : BigUint64Array,
+ "%Boolean%": Boolean,
+ "%DataView%": "undefined" == typeof DataView ? n : DataView,
+ "%Date%": Date,
+ "%decodeURI%": decodeURI,
+ "%decodeURIComponent%": decodeURIComponent,
+ "%encodeURI%": encodeURI,
+ "%encodeURIComponent%": encodeURIComponent,
+ "%Error%": i,
+ "%eval%": eval,
+ "%EvalError%": o,
+ "%Float32Array%": "undefined" == typeof Float32Array ? n : Float32Array,
+ "%Float64Array%": "undefined" == typeof Float64Array ? n : Float64Array,
+ "%FinalizationRegistry%": "undefined" == typeof FinalizationRegistry ? n : FinalizationRegistry,
+ "%Function%": h,
+ "%GeneratorFunction%": S,
+ "%Int8Array%": "undefined" == typeof Int8Array ? n : Int8Array,
+ "%Int16Array%": "undefined" == typeof Int16Array ? n : Int16Array,
+ "%Int32Array%": "undefined" == typeof Int32Array ? n : Int32Array,
+ "%isFinite%": isFinite,
+ "%isNaN%": isNaN,
+ "%IteratorPrototype%": d && m ? m(m([][Symbol.iterator]())) : n,
+ "%JSON%": "object" == typeof JSON ? JSON : n,
+ "%Map%": "undefined" == typeof Map ? n : Map,
+ "%MapIteratorPrototype%": "undefined" != typeof Map && d && m ? m((new Map)[Symbol.iterator]()) : n,
+ "%Math%": Math,
+ "%Number%": Number,
+ "%Object%": Object,
+ "%parseFloat%": parseFloat,
+ "%parseInt%": parseInt,
+ "%Promise%": "undefined" == typeof Promise ? n : Promise,
+ "%Proxy%": "undefined" == typeof Proxy ? n : Proxy,
+ "%RangeError%": s,
+ "%ReferenceError%": a,
+ "%Reflect%": "undefined" == typeof Reflect ? n : Reflect,
+ "%RegExp%": RegExp,
+ "%Set%": "undefined" == typeof Set ? n : Set,
+ "%SetIteratorPrototype%": "undefined" != typeof Set && d && m ? m((new Set)[Symbol.iterator]()) : n,
+ "%SharedArrayBuffer%": "undefined" == typeof SharedArrayBuffer ? n : SharedArrayBuffer,
+ "%String%": String,
+ "%StringIteratorPrototype%": d && m ? m("" [Symbol.iterator]()) : n,
+ "%Symbol%": d ? Symbol : n,
+ "%SyntaxError%": f,
+ "%ThrowTypeError%": g,
+ "%TypedArray%": _,
+ "%TypeError%": u,
+ "%Uint8Array%": "undefined" == typeof Uint8Array ? n : Uint8Array,
+ "%Uint8ClampedArray%": "undefined" == typeof Uint8ClampedArray ? n : Uint8ClampedArray,
+ "%Uint16Array%": "undefined" == typeof Uint16Array ? n : Uint16Array,
+ "%Uint32Array%": "undefined" == typeof Uint32Array ? n : Uint32Array,
+ "%URIError%": c,
+ "%WeakMap%": "undefined" == typeof WeakMap ? n : WeakMap,
+ "%WeakRef%": "undefined" == typeof WeakRef ? n : WeakRef,
+ "%WeakSet%": "undefined" == typeof WeakSet ? n : WeakSet
+ };
+ if (m) try {
+ null.error
+ } catch (t) {
+ var E = m(m(t));
+ b["%Error.prototype%"] = E
+ }
+ var w = function t(e) {
+ var r;
+ if ("%AsyncFunction%" === e) r = p("async function () {}");
+ else if ("%GeneratorFunction%" === e) r = p("function* () {}");
+ else if ("%AsyncGeneratorFunction%" === e) r = p("async function* () {}");
+ else if ("%AsyncGenerator%" === e) {
+ var n = t("%AsyncGeneratorFunction%");
+ n && (r = n.prototype)
+ } else if ("%AsyncIteratorPrototype%" === e) {
+ var i = t("%AsyncGenerator%");
+ i && m && (r = m(i.prototype))
+ }
+ return b[e] = r, r
+ },
+ O = {
+ __proto__: null,
+ "%ArrayBufferPrototype%": ["ArrayBuffer", "prototype"],
+ "%ArrayPrototype%": ["Array", "prototype"],
+ "%ArrayProto_entries%": ["Array", "prototype", "entries"],
+ "%ArrayProto_forEach%": ["Array", "prototype", "forEach"],
+ "%ArrayProto_keys%": ["Array", "prototype", "keys"],
+ "%ArrayProto_values%": ["Array", "prototype", "values"],
+ "%AsyncFunctionPrototype%": ["AsyncFunction", "prototype"],
+ "%AsyncGenerator%": ["AsyncGeneratorFunction", "prototype"],
+ "%AsyncGeneratorPrototype%": ["AsyncGeneratorFunction", "prototype", "prototype"],
+ "%BooleanPrototype%": ["Boolean", "prototype"],
+ "%DataViewPrototype%": ["DataView", "prototype"],
+ "%DatePrototype%": ["Date", "prototype"],
+ "%ErrorPrototype%": ["Error", "prototype"],
+ "%EvalErrorPrototype%": ["EvalError", "prototype"],
+ "%Float32ArrayPrototype%": ["Float32Array", "prototype"],
+ "%Float64ArrayPrototype%": ["Float64Array", "prototype"],
+ "%FunctionPrototype%": ["Function", "prototype"],
+ "%Generator%": ["GeneratorFunction", "prototype"],
+ "%GeneratorPrototype%": ["GeneratorFunction", "prototype", "prototype"],
+ "%Int8ArrayPrototype%": ["Int8Array", "prototype"],
+ "%Int16ArrayPrototype%": ["Int16Array", "prototype"],
+ "%Int32ArrayPrototype%": ["Int32Array", "prototype"],
+ "%JSONParse%": ["JSON", "parse"],
+ "%JSONStringify%": ["JSON", "stringify"],
+ "%MapPrototype%": ["Map", "prototype"],
+ "%NumberPrototype%": ["Number", "prototype"],
+ "%ObjectPrototype%": ["Object", "prototype"],
+ "%ObjProto_toString%": ["Object", "prototype", "toString"],
+ "%ObjProto_valueOf%": ["Object", "prototype", "valueOf"],
+ "%PromisePrototype%": ["Promise", "prototype"],
+ "%PromiseProto_then%": ["Promise", "prototype", "then"],
+ "%Promise_all%": ["Promise", "all"],
+ "%Promise_reject%": ["Promise", "reject"],
+ "%Promise_resolve%": ["Promise", "resolve"],
+ "%RangeErrorPrototype%": ["RangeError", "prototype"],
+ "%ReferenceErrorPrototype%": ["ReferenceError", "prototype"],
+ "%RegExpPrototype%": ["RegExp", "prototype"],
+ "%SetPrototype%": ["Set", "prototype"],
+ "%SharedArrayBufferPrototype%": ["SharedArrayBuffer", "prototype"],
+ "%StringPrototype%": ["String", "prototype"],
+ "%SymbolPrototype%": ["Symbol", "prototype"],
+ "%SyntaxErrorPrototype%": ["SyntaxError", "prototype"],
+ "%TypedArrayPrototype%": ["TypedArray", "prototype"],
+ "%TypeErrorPrototype%": ["TypeError", "prototype"],
+ "%Uint8ArrayPrototype%": ["Uint8Array", "prototype"],
+ "%Uint8ClampedArrayPrototype%": ["Uint8ClampedArray", "prototype"],
+ "%Uint16ArrayPrototype%": ["Uint16Array", "prototype"],
+ "%Uint32ArrayPrototype%": ["Uint32Array", "prototype"],
+ "%URIErrorPrototype%": ["URIError", "prototype"],
+ "%WeakMapPrototype%": ["WeakMap", "prototype"],
+ "%WeakSetPrototype%": ["WeakSet", "prototype"]
+ },
+ B = r(6743),
+ A = r(9957),
+ x = B.call(Function.call, Array.prototype.concat),
+ P = B.call(Function.apply, Array.prototype.splice),
+ T = B.call(Function.call, String.prototype.replace),
+ I = B.call(Function.call, String.prototype.slice),
+ k = B.call(Function.call, RegExp.prototype.exec),
+ D = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,
+ R = /\\(\\)?/g,
+ N = function(t, e) {
+ var r, n = t;
+ if (A(O, n) && (n = "%" + (r = O[n])[0] + "%"), A(b, n)) {
+ var i = b[n];
+ if (i === S && (i = w(n)), void 0 === i && !e) throw new u("intrinsic " + t + " exists, but is not available. Please file an issue!");
+ return {
+ alias: r,
+ name: n,
+ value: i
+ }
+ }
+ throw new f("intrinsic " + t + " does not exist!")
+ };
+ t.exports = function(t, e) {
+ if ("string" != typeof t || 0 === t.length) throw new u("intrinsic name must be a non-empty string");
+ if (arguments.length > 1 && "boolean" != typeof e) throw new u('"allowMissing" argument must be a boolean');
+ if (null === k(/^%?[^%]*%?$/, t)) throw new f("`%` may not be present anywhere but at the beginning and end of the intrinsic name");
+ var r = function(t) {
+ var e = I(t, 0, 1),
+ r = I(t, -1);
+ if ("%" === e && "%" !== r) throw new f("invalid intrinsic syntax, expected closing `%`");
+ if ("%" === r && "%" !== e) throw new f("invalid intrinsic syntax, expected opening `%`");
+ var n = [];
+ return T(t, D, (function(t, e, r, i) {
+ n[n.length] = r ? T(i, R, "$1") : e || t
+ })), n
+ }(t),
+ n = r.length > 0 ? r[0] : "",
+ i = N("%" + n + "%", e),
+ o = i.name,
+ s = i.value,
+ a = !1,
+ c = i.alias;
+ c && (n = c[0], P(r, x([0, 1], c)));
+ for (var h = 1, p = !0; h < r.length; h += 1) {
+ var y = r[h],
+ g = I(y, 0, 1),
+ d = I(y, -1);
+ if (('"' === g || "'" === g || "`" === g || '"' === d || "'" === d || "`" === d) && g !== d) throw new f("property names with quotes must have matching quotes");
+ if ("constructor" !== y && p || (a = !0), A(b, o = "%" + (n += "." + y) + "%")) s = b[o];
+ else if (null != s) {
+ if (!(y in s)) {
+ if (!e) throw new u("base intrinsic for " + t + " exists, but the property is not available.");
+ return
+ }
+ if (l && h + 1 >= r.length) {
+ var v = l(s, y);
+ s = (p = !!v) && "get" in v && !("originalValue" in v.get) ? v.get : s[y]
+ } else p = A(s, y), s = s[y];
+ p && !a && (b[o] = s)
+ }
+ }
+ return s
+ }
+ },
+ 5795: (t, e, r) => {
+ "use strict";
+ var n = r(453)("%Object.getOwnPropertyDescriptor%", !0);
+ if (n) try {
+ n([], "length")
+ } catch (t) {
+ n = null
+ }
+ t.exports = n
+ },
+ 592: (t, e, r) => {
+ "use strict";
+ var n = r(655),
+ i = function() {
+ return !!n
+ };
+ i.hasArrayLengthDefineBug = function() {
+ if (!n) return null;
+ try {
+ return 1 !== n([], "length", {
+ value: 1
+ }).length
+ } catch (t) {
+ return !0
+ }
+ }, t.exports = i
+ },
+ 24: t => {
+ "use strict";
+ var e = {
+ __proto__: null,
+ foo: {}
+ },
+ r = Object;
+ t.exports = function() {
+ return {
+ __proto__: e
+ }.foo === e.foo && !(e instanceof r)
+ }
+ },
+ 4039: (t, e, r) => {
+ "use strict";
+ var n = "undefined" != typeof Symbol && Symbol,
+ i = r(1333);
+ t.exports = function() {
+ return "function" == typeof n && "function" == typeof Symbol && "symbol" == typeof n("foo") && "symbol" == typeof Symbol("bar") && i()
+ }
+ },
+ 1333: t => {
+ "use strict";
+ t.exports = function() {
+ if ("function" != typeof Symbol || "function" != typeof Object.getOwnPropertySymbols) return !1;
+ if ("symbol" == typeof Symbol.iterator) return !0;
+ var t = {},
+ e = Symbol("test"),
+ r = Object(e);
+ if ("string" == typeof e) return !1;
+ if ("[object Symbol]" !== Object.prototype.toString.call(e)) return !1;
+ if ("[object Symbol]" !== Object.prototype.toString.call(r)) return !1;
+ for (e in t[e] = 42, t) return !1;
+ if ("function" == typeof Object.keys && 0 !== Object.keys(t).length) return !1;
+ if ("function" == typeof Object.getOwnPropertyNames && 0 !== Object.getOwnPropertyNames(t).length) return !1;
+ var n = Object.getOwnPropertySymbols(t);
+ if (1 !== n.length || n[0] !== e) return !1;
+ if (!Object.prototype.propertyIsEnumerable.call(t, e)) return !1;
+ if ("function" == typeof Object.getOwnPropertyDescriptor) {
+ var i = Object.getOwnPropertyDescriptor(t, e);
+ if (42 !== i.value || !0 !== i.enumerable) return !1
+ }
+ return !0
+ }
+ },
+ 9957: (t, e, r) => {
+ "use strict";
+ var n = Function.prototype.call,
+ i = Object.prototype.hasOwnProperty,
+ o = r(6743);
+ t.exports = o.call(n, i)
+ },
+ 251: (t, e) => {
+ e.read = function(t, e, r, n, i) {
+ var o, s, a = 8 * i - n - 1,
+ f = (1 << a) - 1,
+ u = f >> 1,
+ c = -7,
+ h = r ? i - 1 : 0,
+ p = r ? -1 : 1,
+ l = t[e + h];
+ for (h += p, o = l & (1 << -c) - 1, l >>= -c, c += a; c > 0; o = 256 * o + t[e + h], h += p, c -= 8);
+ for (s = o & (1 << -c) - 1, o >>= -c, c += n; c > 0; s = 256 * s + t[e + h], h += p, c -= 8);
+ if (0 === o) o = 1 - u;
+ else {
+ if (o === f) return s ? NaN : 1 / 0 * (l ? -1 : 1);
+ s += Math.pow(2, n), o -= u
+ }
+ return (l ? -1 : 1) * s * Math.pow(2, o - n)
+ }, e.write = function(t, e, r, n, i, o) {
+ var s, a, f, u = 8 * o - i - 1,
+ c = (1 << u) - 1,
+ h = c >> 1,
+ p = 23 === i ? Math.pow(2, -24) - Math.pow(2, -77) : 0,
+ l = n ? 0 : o - 1,
+ y = n ? 1 : -1,
+ g = e < 0 || 0 === e && 1 / e < 0 ? 1 : 0;
+ for (e = Math.abs(e), isNaN(e) || e === 1 / 0 ? (a = isNaN(e) ? 1 : 0, s = c) : (s = Math.floor(Math.log(e) / Math.LN2), e * (f = Math.pow(2, -s)) < 1 && (s--, f *= 2), (e += s + h >= 1 ? p / f : p * Math.pow(2, 1 - h)) * f >= 2 && (s++, f /= 2), s + h >= c ? (a = 0, s = c) : s + h >= 1 ? (a = (e * f - 1) * Math.pow(2, i), s += h) : (a = e * Math.pow(2, h - 1) * Math.pow(2, i), s = 0)); i >= 8; t[r + l] = 255 & a, l += y, a /= 256, i -= 8);
+ for (s = s << i | a, u += i; u > 0; t[r + l] = 255 & s, l += y, s /= 256, u -= 8);
+ t[r + l - y] |= 128 * g
+ }
+ },
+ 3229: (t, e, r) => {
+ var n = r(8287).Buffer,
+ i = r(7449),
+ o = r(5682),
+ s = (r(3200), r(3100).Ber, r(8226)._),
+ a = r(8226),
+ f = r(1768),
+ u = r(7460);
+ void 0 === i.RSA_NO_PADDING && (i.RSA_NO_PADDING = 3), t.exports = function() {
+ var t = {
+ node10: ["md4", "md5", "ripemd160", "sha1", "sha224", "sha256", "sha384", "sha512"],
+ node: ["md4", "md5", "ripemd160", "sha1", "sha224", "sha256", "sha384", "sha512"],
+ iojs: ["md4", "md5", "ripemd160", "sha1", "sha224", "sha256", "sha384", "sha512"],
+ browser: ["md5", "ripemd160", "sha1", "sha256", "sha512"]
+ },
+ e = "pkcs1_oaep",
+ r = "pkcs1",
+ i = {
+ private: "pkcs1-private-pem",
+ "private-der": "pkcs1-private-der",
+ public: "pkcs8-public-pem",
+ "public-der": "pkcs8-public-der"
+ };
+
+ function c(t, i, f) {
+ if (!(this instanceof c)) return new c(t, i, f);
+ s.isObject(i) && (f = i, i = void 0), this.$options = {
+ signingScheme: r,
+ signingSchemeOptions: {
+ hash: "sha256",
+ saltLength: null
+ },
+ encryptionScheme: e,
+ encryptionSchemeOptions: {
+ hash: "sha1",
+ label: null
+ },
+ environment: a.detectEnvironment(),
+ rsaUtils: this
+ }, this.keyPair = new o.Key, this.$cache = {}, n.isBuffer(t) || s.isString(t) ? this.importKey(t, i) : s.isObject(t) && this.generateKeyPair(t.b, t.e), this.setOptions(f)
+ }
+ return c.prototype.setOptions = function(n) {
+ if ((n = n || {}).environment && (this.$options.environment = n.environment), n.signingScheme) {
+ if (s.isString(n.signingScheme)) {
+ var i = n.signingScheme.toLowerCase().split("-");
+ 1 == i.length ? t.node.indexOf(i[0]) > -1 ? (this.$options.signingSchemeOptions = {
+ hash: i[0]
+ }, this.$options.signingScheme = r) : (this.$options.signingScheme = i[0], this.$options.signingSchemeOptions = {
+ hash: null
+ }) : (this.$options.signingSchemeOptions = {
+ hash: i[1]
+ }, this.$options.signingScheme = i[0])
+ } else s.isObject(n.signingScheme) && (this.$options.signingScheme = n.signingScheme.scheme || r, this.$options.signingSchemeOptions = s.omit(n.signingScheme, "scheme"));
+ if (!f.isSignature(this.$options.signingScheme)) throw Error("Unsupported signing scheme");
+ if (this.$options.signingSchemeOptions.hash && -1 === t[this.$options.environment].indexOf(this.$options.signingSchemeOptions.hash)) throw Error("Unsupported hashing algorithm for " + this.$options.environment + " environment")
+ }
+ if (n.encryptionScheme) {
+ if (s.isString(n.encryptionScheme) ? (this.$options.encryptionScheme = n.encryptionScheme.toLowerCase(), this.$options.encryptionSchemeOptions = {}) : s.isObject(n.encryptionScheme) && (this.$options.encryptionScheme = n.encryptionScheme.scheme || e, this.$options.encryptionSchemeOptions = s.omit(n.encryptionScheme, "scheme")), !f.isEncryption(this.$options.encryptionScheme)) throw Error("Unsupported encryption scheme");
+ if (this.$options.encryptionSchemeOptions.hash && -1 === t[this.$options.environment].indexOf(this.$options.encryptionSchemeOptions.hash)) throw Error("Unsupported hashing algorithm for " + this.$options.environment + " environment")
+ }
+ this.keyPair.setOptions(this.$options)
+ }, c.prototype.generateKeyPair = function(t, e) {
+ if (e = e || 65537, (t = t || 2048) % 8 != 0) throw Error("Key size must be a multiple of 8.");
+ return this.keyPair.generate(t, e.toString(16)), this.$cache = {}, this
+ }, c.prototype.importKey = function(t, e) {
+ if (!t) throw Error("Empty key given");
+ if (e && (e = i[e] || e), !u.detectAndImport(this.keyPair, t, e) && void 0 === e) throw Error("Key format must be specified");
+ return this.$cache = {}, this
+ }, c.prototype.exportKey = function(t) {
+ return t = i[t = t || "private"] || t, this.$cache[t] || (this.$cache[t] = u.detectAndExport(this.keyPair, t)), this.$cache[t]
+ }, c.prototype.isPrivate = function() {
+ return this.keyPair.isPrivate()
+ }, c.prototype.isPublic = function(t) {
+ return this.keyPair.isPublic(t)
+ }, c.prototype.isEmpty = function(t) {
+ return !(this.keyPair.n || this.keyPair.e || this.keyPair.d)
+ }, c.prototype.encrypt = function(t, e, r) {
+ return this.$$encryptKey(!1, t, e, r)
+ }, c.prototype.decrypt = function(t, e) {
+ return this.$$decryptKey(!1, t, e)
+ }, c.prototype.encryptPrivate = function(t, e, r) {
+ return this.$$encryptKey(!0, t, e, r)
+ }, c.prototype.decryptPublic = function(t, e) {
+ return this.$$decryptKey(!0, t, e)
+ }, c.prototype.$$encryptKey = function(t, e, r, n) {
+ try {
+ var i = this.keyPair.encrypt(this.$getDataForEncrypt(e, n), t);
+ return "buffer" != r && r ? i.toString(r) : i
+ } catch (t) {
+ throw Error("Error during encryption. Original error: " + t)
+ }
+ }, c.prototype.$$decryptKey = function(t, e, r) {
+ try {
+ e = s.isString(e) ? n.from(e, "base64") : e;
+ var i = this.keyPair.decrypt(e, t);
+ if (null === i) throw Error("Key decrypt method returns null.");
+ return this.$getDecryptedData(i, r)
+ } catch (t) {
+ throw Error("Error during decryption (probably incorrect key). Original error: " + t)
+ }
+ }, c.prototype.sign = function(t, e, r) {
+ if (!this.isPrivate()) throw Error("This is not private key");
+ var n = this.keyPair.sign(this.$getDataForEncrypt(t, r));
+ return e && "buffer" != e && (n = n.toString(e)), n
+ }, c.prototype.verify = function(t, e, r, n) {
+ if (!this.isPublic()) throw Error("This is not public key");
+ return n = n && "buffer" != n ? n : null, this.keyPair.verify(this.$getDataForEncrypt(t, r), e, n)
+ }, c.prototype.getKeySize = function() {
+ return this.keyPair.keySize
+ }, c.prototype.getMaxMessageSize = function() {
+ return this.keyPair.maxMessageLength
+ }, c.prototype.$getDataForEncrypt = function(t, e) {
+ if (s.isString(t) || s.isNumber(t)) return n.from("" + t, e || "utf8");
+ if (n.isBuffer(t)) return t;
+ if (s.isObject(t)) return n.from(JSON.stringify(t));
+ throw Error("Unexpected data type")
+ }, c.prototype.$getDecryptedData = function(t, e) {
+ return "buffer" == (e = e || "buffer") ? t : "json" == e ? JSON.parse(t.toString()) : t.toString(e)
+ }, c
+ }()
+ },
+ 4538: (t, e, r) => {
+ var n = r(3200);
+ t.exports = {
+ getEngine: function(t, e) {
+ var i = r(7469);
+ return "node" === e.environment && "function" == typeof n.publicEncrypt && "function" == typeof n.privateDecrypt && (i = "function" == typeof n.privateEncrypt && "function" == typeof n.publicDecrypt ? r(2418) : r(1957)), i(t, e)
+ }
+ }
+ },
+ 2418: (t, e, r) => {
+ var n = r(3200),
+ i = r(7449),
+ o = r(1768);
+ t.exports = function(t, e) {
+ var r = o.pkcs1.makeScheme(t, e);
+ return {
+ encrypt: function(t, o) {
+ var s;
+ if (o) return s = i.RSA_PKCS1_PADDING, e.encryptionSchemeOptions && e.encryptionSchemeOptions.padding && (s = e.encryptionSchemeOptions.padding), n.privateEncrypt({
+ key: e.rsaUtils.exportKey("private"),
+ padding: s
+ }, t);
+ s = i.RSA_PKCS1_OAEP_PADDING, "pkcs1" === e.encryptionScheme && (s = i.RSA_PKCS1_PADDING), e.encryptionSchemeOptions && e.encryptionSchemeOptions.padding && (s = e.encryptionSchemeOptions.padding);
+ var a = t;
+ return s === i.RSA_NO_PADDING && (a = r.pkcs0pad(t)), n.publicEncrypt({
+ key: e.rsaUtils.exportKey("public"),
+ padding: s
+ }, a)
+ },
+ decrypt: function(t, o) {
+ var s;
+ if (o) return s = i.RSA_PKCS1_PADDING, e.encryptionSchemeOptions && e.encryptionSchemeOptions.padding && (s = e.encryptionSchemeOptions.padding), n.publicDecrypt({
+ key: e.rsaUtils.exportKey("public"),
+ padding: s
+ }, t);
+ s = i.RSA_PKCS1_OAEP_PADDING, "pkcs1" === e.encryptionScheme && (s = i.RSA_PKCS1_PADDING), e.encryptionSchemeOptions && e.encryptionSchemeOptions.padding && (s = e.encryptionSchemeOptions.padding);
+ var a = n.privateDecrypt({
+ key: e.rsaUtils.exportKey("private"),
+ padding: s
+ }, t);
+ return s === i.RSA_NO_PADDING ? r.pkcs0unpad(a) : a
+ }
+ }
+ }
+ },
+ 7469: (t, e, r) => {
+ var n = r(1973),
+ i = r(1768);
+ t.exports = function(t, e) {
+ var r = i.pkcs1.makeScheme(t, e);
+ return {
+ encrypt: function(e, i) {
+ var o, s;
+ return i ? (o = new n(r.encPad(e, {
+ type: 1
+ })), s = t.$doPrivate(o)) : (o = new n(t.encryptionScheme.encPad(e)), s = t.$doPublic(o)), s.toBuffer(t.encryptedDataLength)
+ },
+ decrypt: function(e, i) {
+ var o, s = new n(e);
+ return i ? (o = t.$doPublic(s), r.encUnPad(o.toBuffer(t.encryptedDataLength), {
+ type: 1
+ })) : (o = t.$doPrivate(s), t.encryptionScheme.encUnPad(o.toBuffer(t.encryptedDataLength)))
+ }
+ }
+ }
+ },
+ 1957: (t, e, r) => {
+ var n = r(3200),
+ i = r(7449),
+ o = r(1768);
+ t.exports = function(t, e) {
+ var s = r(7469)(t, e),
+ a = o.pkcs1.makeScheme(t, e);
+ return {
+ encrypt: function(t, r) {
+ if (r) return s.encrypt(t, r);
+ var o = i.RSA_PKCS1_OAEP_PADDING;
+ "pkcs1" === e.encryptionScheme && (o = i.RSA_PKCS1_PADDING), e.encryptionSchemeOptions && e.encryptionSchemeOptions.padding && (o = e.encryptionSchemeOptions.padding);
+ var f = t;
+ return o === i.RSA_NO_PADDING && (f = a.pkcs0pad(t)), n.publicEncrypt({
+ key: e.rsaUtils.exportKey("public"),
+ padding: o
+ }, f)
+ },
+ decrypt: function(t, r) {
+ if (r) return s.decrypt(t, r);
+ var o = i.RSA_PKCS1_OAEP_PADDING;
+ "pkcs1" === e.encryptionScheme && (o = i.RSA_PKCS1_PADDING), e.encryptionSchemeOptions && e.encryptionSchemeOptions.padding && (o = e.encryptionSchemeOptions.padding);
+ var f = n.privateDecrypt({
+ key: e.rsaUtils.exportKey("private"),
+ padding: o
+ }, t);
+ return o === i.RSA_NO_PADDING ? a.pkcs0unpad(f) : f
+ }
+ }
+ }
+ },
+ 3374: (t, e, r) => {
+ r(8226)._, r(8226), t.exports = {
+ privateExport: function(t, e) {
+ return {
+ n: t.n.toBuffer(),
+ e: t.e,
+ d: t.d.toBuffer(),
+ p: t.p.toBuffer(),
+ q: t.q.toBuffer(),
+ dmp1: t.dmp1.toBuffer(),
+ dmq1: t.dmq1.toBuffer(),
+ coeff: t.coeff.toBuffer()
+ }
+ },
+ privateImport: function(t, e, r) {
+ if (!(e.n && e.e && e.d && e.p && e.q && e.dmp1 && e.dmq1 && e.coeff)) throw Error("Invalid key data");
+ t.setPrivate(e.n, e.e, e.d, e.p, e.q, e.dmp1, e.dmq1, e.coeff)
+ },
+ publicExport: function(t, e) {
+ return {
+ n: t.n.toBuffer(),
+ e: t.e
+ }
+ },
+ publicImport: function(t, e, r) {
+ if (!e.n || !e.e) throw Error("Invalid key data");
+ t.setPublic(e.n, e.e)
+ },
+ autoImport: function(e, r) {
+ return !(!r.n || !r.e || (r.d && r.p && r.q && r.dmp1 && r.dmq1 && r.coeff ? (t.exports.privateImport(e, r), 0) : (t.exports.publicImport(e, r), 0)))
+ }
+ }
+ },
+ 7460: (t, e, r) => {
+ function n(t) {
+ t = t.split("-");
+ for (var e = "private", r = {
+ type: "default"
+ }, n = 1; n < t.length; n++)
+ if (t[n]) switch (t[n]) {
+ case "public":
+ case "private":
+ e = t[n];
+ break;
+ case "pem":
+ case "der":
+ r.type = t[n]
+ }
+ return {
+ scheme: t[0],
+ keyType: e,
+ keyOpt: r
+ }
+ }
+ r(8226)._, t.exports = {
+ pkcs1: r(6566),
+ pkcs8: r(8573),
+ components: r(3374),
+ openssh: r(3194),
+ isPrivateExport: function(e) {
+ return t.exports[e] && "function" == typeof t.exports[e].privateExport
+ },
+ isPrivateImport: function(e) {
+ return t.exports[e] && "function" == typeof t.exports[e].privateImport
+ },
+ isPublicExport: function(e) {
+ return t.exports[e] && "function" == typeof t.exports[e].publicExport
+ },
+ isPublicImport: function(e) {
+ return t.exports[e] && "function" == typeof t.exports[e].publicImport
+ },
+ detectAndImport: function(e, r, i) {
+ if (void 0 === i) {
+ for (var o in t.exports)
+ if ("function" == typeof t.exports[o].autoImport && t.exports[o].autoImport(e, r)) return !0
+ } else if (i) {
+ var s = n(i);
+ if (!t.exports[s.scheme]) throw Error("Unsupported key format");
+ "private" === s.keyType ? t.exports[s.scheme].privateImport(e, r, s.keyOpt) : t.exports[s.scheme].publicImport(e, r, s.keyOpt)
+ }
+ return !1
+ },
+ detectAndExport: function(e, r) {
+ if (r) {
+ var i = n(r);
+ if (t.exports[i.scheme]) {
+ if ("private" === i.keyType) {
+ if (!e.isPrivate()) throw Error("This is not private key");
+ return t.exports[i.scheme].privateExport(e, i.keyOpt)
+ }
+ if (!e.isPublic()) throw Error("This is not public key");
+ return t.exports[i.scheme].publicExport(e, i.keyOpt)
+ }
+ throw Error("Unsupported key format")
+ }
+ }
+ }
+ },
+ 3194: (t, e, r) => {
+ var n = r(8287).Buffer,
+ i = r(8226)._,
+ o = r(8226),
+ s = r(1973);
+ const a = "-----BEGIN OPENSSH PRIVATE KEY-----",
+ f = "-----END OPENSSH PRIVATE KEY-----";
+
+ function u(t) {
+ const e = t.buf.readInt32BE(t.off);
+ t.off += 4;
+ const r = t.buf.slice(t.off, t.off + e);
+ return t.off += e, r
+ }
+
+ function c(t, e) {
+ t.buf.writeInt32BE(e.byteLength, t.off), t.off += 4, t.off += e.copy(t.buf, t.off)
+ }
+ t.exports = {
+ privateExport: function(t, e) {
+ const r = t.n.toBuffer();
+ let i = n.alloc(4);
+ for (i.writeUInt32BE(t.e, 0); 0 === i[0];) i = i.slice(1);
+ const s = t.d.toBuffer(),
+ u = t.coeff.toBuffer(),
+ h = t.p.toBuffer(),
+ p = t.q.toBuffer();
+ let l;
+ l = void 0 !== t.sshcomment ? n.from(t.sshcomment) : n.from([]);
+ const y = 15 + i.byteLength + 4 + r.byteLength,
+ g = 23 + r.byteLength + 4 + i.byteLength + 4 + s.byteLength + 4 + u.byteLength + 4 + h.byteLength + 4 + p.byteLength + 4 + l.byteLength;
+ let d = 43 + y + 4 + g;
+ d += 8 * Math.ceil(g / 8) - g;
+ const v = n.alloc(d),
+ m = {
+ buf: v,
+ off: 0
+ };
+ v.write("openssh-key-v1", "utf8"), v.writeUInt8(0, 14), m.off += 15, c(m, n.from("none")), c(m, n.from("none")), c(m, n.from("")), m.off = m.buf.writeUInt32BE(1, m.off), m.off = m.buf.writeUInt32BE(y, m.off), c(m, n.from("ssh-rsa")), c(m, i), c(m, r), m.off = m.buf.writeUInt32BE(d - 47 - y, m.off), m.off += 8, c(m, n.from("ssh-rsa")), c(m, r), c(m, i), c(m, s), c(m, u), c(m, h), c(m, p), c(m, l);
+ let S = 1;
+ for (; m.off < d;) m.off = m.buf.writeUInt8(S++, m.off);
+ return "der" === e.type ? m.buf : a + "\n" + o.linebrk(v.toString("base64"), 70) + "\n" + f + "\n"
+ },
+ privateImport: function(t, e, r) {
+ var c;
+ if ("der" !== (r = r || {}).type) {
+ if (n.isBuffer(e) && (e = e.toString("utf8")), !i.isString(e)) throw Error("Unsupported key format");
+ var h = o.trimSurroundingText(e, a, f).replace(/\s+|\n\r|\n|\r$/gm, "");
+ c = n.from(h, "base64")
+ } else {
+ if (!n.isBuffer(e)) throw Error("Unsupported key format");
+ c = e
+ }
+ const p = {
+ buf: c,
+ off: 0
+ };
+ if ("openssh-key-v1" !== c.slice(0, 14).toString("ascii")) throw "Invalid file format.";
+ if (p.off += 15, "none" !== u(p).toString("ascii")) throw Error("Unsupported key type");
+ if ("none" !== u(p).toString("ascii")) throw Error("Unsupported key type");
+ if ("" !== u(p).toString("ascii")) throw Error("Unsupported key type");
+ if (p.off += 4, p.off += 4, "ssh-rsa" !== u(p).toString("ascii")) throw Error("Unsupported key type");
+ if (u(p), u(p), p.off += 12, "ssh-rsa" !== u(p).toString("ascii")) throw Error("Unsupported key type");
+ const l = u(p),
+ y = u(p),
+ g = u(p),
+ d = u(p),
+ v = u(p),
+ m = u(p),
+ S = new s(g),
+ _ = new s(m),
+ b = new s(v),
+ E = S.mod(b.subtract(s.ONE)),
+ w = S.mod(_.subtract(s.ONE));
+ t.setPrivate(l, y, g, v, m, E.toBuffer(), w.toBuffer(), d), t.sshcomment = u(p).toString("ascii")
+ },
+ publicExport: function(t, e) {
+ let r = n.alloc(4);
+ for (r.writeUInt32BE(t.e, 0); 0 === r[0];) r = r.slice(1);
+ const i = t.n.toBuffer(),
+ o = n.alloc(r.byteLength + 4 + i.byteLength + 4 + 7 + 4),
+ s = {
+ buf: o,
+ off: 0
+ };
+ c(s, n.from("ssh-rsa")), c(s, r), c(s, i);
+ let a = t.sshcomment || "";
+ return "der" === e.type ? s.buf : "ssh-rsa " + o.toString("base64") + " " + a + "\n"
+ },
+ publicImport: function(t, e, r) {
+ var o;
+ if ("der" !== (r = r || {}).type) {
+ if (n.isBuffer(e) && (e = e.toString("utf8")), !i.isString(e)) throw Error("Unsupported key format");
+ {
+ if ("ssh-rsa " !== e.substring(0, 8)) throw Error("Unsupported key format");
+ let r = e.indexOf(" ", 8); - 1 === r ? r = e.length : t.sshcomment = e.substring(r + 1).replace(/\s+|\n\r|\n|\r$/gm, "");
+ const i = e.substring(8, r).replace(/\s+|\n\r|\n|\r$/gm, "");
+ o = n.from(i, "base64")
+ }
+ } else {
+ if (!n.isBuffer(e)) throw Error("Unsupported key format");
+ o = e
+ }
+ const s = {
+ buf: o,
+ off: 0
+ },
+ a = u(s).toString("ascii");
+ if ("ssh-rsa" !== a) throw Error("Invalid key type: " + a);
+ const f = u(s),
+ c = u(s);
+ t.setPublic(c, f)
+ },
+ autoImport: function(e, r) {
+ return /^[\S\s]*-----BEGIN OPENSSH PRIVATE KEY-----\s*(?=(([A-Za-z0-9+/=]+\s*)+))\1-----END OPENSSH PRIVATE KEY-----[\S\s]*$/g.test(r) ? (t.exports.privateImport(e, r), !0) : !!/^[\S\s]*ssh-rsa \s*(?=(([A-Za-z0-9+/=]+\s*)+))\1[\S\s]*$/g.test(r) && (t.exports.publicImport(e, r), !0)
+ }
+ }
+ },
+ 6566: (t, e, r) => {
+ var n = r(8287).Buffer,
+ i = r(3100).Ber,
+ o = r(8226)._,
+ s = r(8226);
+ const a = "-----BEGIN RSA PRIVATE KEY-----",
+ f = "-----END RSA PRIVATE KEY-----",
+ u = "-----BEGIN RSA PUBLIC KEY-----",
+ c = "-----END RSA PUBLIC KEY-----";
+ t.exports = {
+ privateExport: function(t, e) {
+ e = e || {};
+ var r = t.n.toBuffer(),
+ n = t.d.toBuffer(),
+ o = t.p.toBuffer(),
+ u = t.q.toBuffer(),
+ c = t.dmp1.toBuffer(),
+ h = t.dmq1.toBuffer(),
+ p = t.coeff.toBuffer(),
+ l = r.length + n.length + o.length + u.length + c.length + h.length + p.length + 512,
+ y = new i.Writer({
+ size: l
+ });
+ return y.startSequence(), y.writeInt(0), y.writeBuffer(r, 2), y.writeInt(t.e), y.writeBuffer(n, 2), y.writeBuffer(o, 2), y.writeBuffer(u, 2), y.writeBuffer(c, 2), y.writeBuffer(h, 2), y.writeBuffer(p, 2), y.endSequence(), "der" === e.type ? y.buffer : a + "\n" + s.linebrk(y.buffer.toString("base64"), 64) + "\n" + f
+ },
+ privateImport: function(t, e, r) {
+ var u;
+ if ("der" !== (r = r || {}).type) {
+ if (n.isBuffer(e) && (e = e.toString("utf8")), !o.isString(e)) throw Error("Unsupported key format");
+ var c = s.trimSurroundingText(e, a, f).replace(/\s+|\n\r|\n|\r$/gm, "");
+ u = n.from(c, "base64")
+ } else {
+ if (!n.isBuffer(e)) throw Error("Unsupported key format");
+ u = e
+ }
+ var h = new i.Reader(u);
+ h.readSequence(), h.readString(2, !0), t.setPrivate(h.readString(2, !0), h.readString(2, !0), h.readString(2, !0), h.readString(2, !0), h.readString(2, !0), h.readString(2, !0), h.readString(2, !0), h.readString(2, !0))
+ },
+ publicExport: function(t, e) {
+ e = e || {};
+ var r = t.n.toBuffer(),
+ n = r.length + 512,
+ o = new i.Writer({
+ size: n
+ });
+ return o.startSequence(), o.writeBuffer(r, 2), o.writeInt(t.e), o.endSequence(), "der" === e.type ? o.buffer : u + "\n" + s.linebrk(o.buffer.toString("base64"), 64) + "\n" + c
+ },
+ publicImport: function(t, e, r) {
+ var a;
+ if ("der" !== (r = r || {}).type) {
+ if (n.isBuffer(e) && (e = e.toString("utf8")), o.isString(e)) {
+ var f = s.trimSurroundingText(e, u, c).replace(/\s+|\n\r|\n|\r$/gm, "");
+ a = n.from(f, "base64")
+ }
+ } else {
+ if (!n.isBuffer(e)) throw Error("Unsupported key format");
+ a = e
+ }
+ var h = new i.Reader(a);
+ h.readSequence(), t.setPublic(h.readString(2, !0), h.readString(2, !0))
+ },
+ autoImport: function(e, r) {
+ return /^[\S\s]*-----BEGIN RSA PRIVATE KEY-----\s*(?=(([A-Za-z0-9+/=]+\s*)+))\1-----END RSA PRIVATE KEY-----[\S\s]*$/g.test(r) ? (t.exports.privateImport(e, r), !0) : !!/^[\S\s]*-----BEGIN RSA PUBLIC KEY-----\s*(?=(([A-Za-z0-9+/=]+\s*)+))\1-----END RSA PUBLIC KEY-----[\S\s]*$/g.test(r) && (t.exports.publicImport(e, r), !0)
+ }
+ }
+ },
+ 8573: (t, e, r) => {
+ var n = r(8287).Buffer,
+ i = r(3100).Ber,
+ o = r(8226)._,
+ s = "1.2.840.113549.1.1.1",
+ a = r(8226);
+ const f = "-----BEGIN PRIVATE KEY-----",
+ u = "-----END PRIVATE KEY-----",
+ c = "-----BEGIN PUBLIC KEY-----",
+ h = "-----END PUBLIC KEY-----";
+ t.exports = {
+ privateExport: function(t, e) {
+ e = e || {};
+ var r = t.n.toBuffer(),
+ n = t.d.toBuffer(),
+ o = t.p.toBuffer(),
+ c = t.q.toBuffer(),
+ h = t.dmp1.toBuffer(),
+ p = t.dmq1.toBuffer(),
+ l = t.coeff.toBuffer(),
+ y = r.length + n.length + o.length + c.length + h.length + p.length + l.length + 512,
+ g = new i.Writer({
+ size: y
+ });
+ g.startSequence(), g.writeInt(0), g.writeBuffer(r, 2), g.writeInt(t.e), g.writeBuffer(n, 2), g.writeBuffer(o, 2), g.writeBuffer(c, 2), g.writeBuffer(h, 2), g.writeBuffer(p, 2), g.writeBuffer(l, 2), g.endSequence();
+ var d = new i.Writer({
+ size: y
+ });
+ return d.startSequence(), d.writeInt(0), d.startSequence(), d.writeOID(s), d.writeNull(), d.endSequence(), d.writeBuffer(g.buffer, 4), d.endSequence(), "der" === e.type ? d.buffer : f + "\n" + a.linebrk(d.buffer.toString("base64"), 64) + "\n" + u
+ },
+ privateImport: function(t, e, r) {
+ var c;
+ if ("der" !== (r = r || {}).type) {
+ if (n.isBuffer(e) && (e = e.toString("utf8")), !o.isString(e)) throw Error("Unsupported key format");
+ var h = a.trimSurroundingText(e, f, u).replace("-----END PRIVATE KEY-----", "").replace(/\s+|\n\r|\n|\r$/gm, "");
+ c = n.from(h, "base64")
+ } else {
+ if (!n.isBuffer(e)) throw Error("Unsupported key format");
+ c = e
+ }
+ var p = new i.Reader(c);
+ if (p.readSequence(), p.readInt(0), new i.Reader(p.readString(48, !0)).readOID(6, !0) !== s) throw Error("Invalid Public key format");
+ var l = new i.Reader(p.readString(4, !0));
+ l.readSequence(), l.readString(2, !0), t.setPrivate(l.readString(2, !0), l.readString(2, !0), l.readString(2, !0), l.readString(2, !0), l.readString(2, !0), l.readString(2, !0), l.readString(2, !0), l.readString(2, !0))
+ },
+ publicExport: function(t, e) {
+ e = e || {};
+ var r = t.n.toBuffer(),
+ n = r.length + 512,
+ o = new i.Writer({
+ size: n
+ });
+ o.writeByte(0), o.startSequence(), o.writeBuffer(r, 2), o.writeInt(t.e), o.endSequence();
+ var f = new i.Writer({
+ size: n
+ });
+ return f.startSequence(), f.startSequence(), f.writeOID(s), f.writeNull(), f.endSequence(), f.writeBuffer(o.buffer, 3), f.endSequence(), "der" === e.type ? f.buffer : c + "\n" + a.linebrk(f.buffer.toString("base64"), 64) + "\n" + h
+ },
+ publicImport: function(t, e, r) {
+ var f;
+ if ("der" !== (r = r || {}).type) {
+ if (n.isBuffer(e) && (e = e.toString("utf8")), o.isString(e)) {
+ var u = a.trimSurroundingText(e, c, h).replace(/\s+|\n\r|\n|\r$/gm, "");
+ f = n.from(u, "base64")
+ }
+ } else {
+ if (!n.isBuffer(e)) throw Error("Unsupported key format");
+ f = e
+ }
+ var p = new i.Reader(f);
+ if (p.readSequence(), new i.Reader(p.readString(48, !0)).readOID(6, !0) !== s) throw Error("Invalid Public key format");
+ var l = new i.Reader(p.readString(3, !0));
+ l.readByte(), l.readSequence(), t.setPublic(l.readString(2, !0), l.readString(2, !0))
+ },
+ autoImport: function(e, r) {
+ return /^[\S\s]*-----BEGIN PRIVATE KEY-----\s*(?=(([A-Za-z0-9+/=]+\s*)+))\1-----END PRIVATE KEY-----[\S\s]*$/g.test(r) ? (t.exports.privateImport(e, r), !0) : !!/^[\S\s]*-----BEGIN PUBLIC KEY-----\s*(?=(([A-Za-z0-9+/=]+\s*)+))\1-----END PUBLIC KEY-----[\S\s]*$/g.test(r) && (t.exports.publicImport(e, r), !0)
+ }
+ }
+ },
+ 1973: (t, e, r) => {
+ var n = r(8287).Buffer,
+ i = r(3200),
+ o = r(8226)._;
+
+ function s(t, e) {
+ null != t && ("number" == typeof t ? this.fromNumber(t, e) : n.isBuffer(t) ? this.fromBuffer(t) : null == e && "string" != typeof t ? this.fromByteArray(t) : this.fromString(t, e))
+ }
+
+ function a() {
+ return new s(null)
+ }
+ s.prototype.am = function(t, e, r, n, i, o) {
+ for (var s = 16383 & e, a = e >> 14; --o >= 0;) {
+ var f = 16383 & this[t],
+ u = this[t++] >> 14,
+ c = a * f + u * s;
+ i = ((f = s * f + ((16383 & c) << 14) + r[n] + i) >> 28) + (c >> 14) + a * u, r[n++] = 268435455 & f
+ }
+ return i
+ }, s.prototype.DB = 28, s.prototype.DM = 268435455, s.prototype.DV = 1 << 28, s.prototype.FV = Math.pow(2, 52), s.prototype.F1 = 24, s.prototype.F2 = 4;
+ var f, u, c = new Array;
+ for (f = "0".charCodeAt(0), u = 0; u <= 9; ++u) c[f++] = u;
+ for (f = "a".charCodeAt(0), u = 10; u < 36; ++u) c[f++] = u;
+ for (f = "A".charCodeAt(0), u = 10; u < 36; ++u) c[f++] = u;
+
+ function h(t) {
+ return "0123456789abcdefghijklmnopqrstuvwxyz".charAt(t)
+ }
+
+ function p(t, e) {
+ var r = c[t.charCodeAt(e)];
+ return null == r ? -1 : r
+ }
+
+ function l(t) {
+ var e = a();
+ return e.fromInt(t), e
+ }
+
+ function y(t) {
+ var e, r = 1;
+ return 0 != (e = t >>> 16) && (t = e, r += 16), 0 != (e = t >> 8) && (t = e, r += 8), 0 != (e = t >> 4) && (t = e, r += 4), 0 != (e = t >> 2) && (t = e, r += 2), 0 != (e = t >> 1) && (t = e, r += 1), r
+ }
+
+ function g(t) {
+ this.m = t
+ }
+
+ function d(t) {
+ this.m = t, this.mp = t.invDigit(), this.mpl = 32767 & this.mp, this.mph = this.mp >> 15, this.um = (1 << t.DB - 15) - 1, this.mt2 = 2 * t.t
+ }
+
+ function v(t, e) {
+ return t & e
+ }
+
+ function m(t, e) {
+ return t | e
+ }
+
+ function S(t, e) {
+ return t ^ e
+ }
+
+ function _(t, e) {
+ return t & ~e
+ }
+
+ function b(t) {
+ if (0 === t) return -1;
+ var e = 0;
+ return 65535 & t || (t >>= 16, e += 16), 255 & t || (t >>= 8, e += 8), 15 & t || (t >>= 4, e += 4), 3 & t || (t >>= 2, e += 2), 1 & t || ++e, e
+ }
+
+ function E(t) {
+ for (var e = 0; 0 != t;) t &= t - 1, ++e;
+ return e
+ }
+
+ function w() {}
+
+ function O(t) {
+ return t
+ }
+
+ function B(t) {
+ this.r2 = a(), this.q3 = a(), s.ONE.dlShiftTo(2 * t.t, this.r2), this.mu = this.r2.divide(t), this.m = t
+ }
+ g.prototype.convert = function(t) {
+ return t.s < 0 || t.compareTo(this.m) >= 0 ? t.mod(this.m) : t
+ }, g.prototype.revert = function(t) {
+ return t
+ }, g.prototype.reduce = function(t) {
+ t.divRemTo(this.m, null, t)
+ }, g.prototype.mulTo = function(t, e, r) {
+ t.multiplyTo(e, r), this.reduce(r)
+ }, g.prototype.sqrTo = function(t, e) {
+ t.squareTo(e), this.reduce(e)
+ }, d.prototype.convert = function(t) {
+ var e = a();
+ return t.abs().dlShiftTo(this.m.t, e), e.divRemTo(this.m, null, e), t.s < 0 && e.compareTo(s.ZERO) > 0 && this.m.subTo(e, e), e
+ }, d.prototype.revert = function(t) {
+ var e = a();
+ return t.copyTo(e), this.reduce(e), e
+ }, d.prototype.reduce = function(t) {
+ for (; t.t <= this.mt2;) t[t.t++] = 0;
+ for (var e = 0; e < this.m.t; ++e) {
+ var r = 32767 & t[e],
+ n = r * this.mpl + ((r * this.mph + (t[e] >> 15) * this.mpl & this.um) << 15) & t.DM;
+ for (t[r = e + this.m.t] += this.m.am(0, n, t, e, 0, this.m.t); t[r] >= t.DV;) t[r] -= t.DV, t[++r]++
+ }
+ t.clamp(), t.drShiftTo(this.m.t, t), t.compareTo(this.m) >= 0 && t.subTo(this.m, t)
+ }, d.prototype.mulTo = function(t, e, r) {
+ t.multiplyTo(e, r), this.reduce(r)
+ }, d.prototype.sqrTo = function(t, e) {
+ t.squareTo(e), this.reduce(e)
+ }, w.prototype.convert = O, w.prototype.revert = O, w.prototype.mulTo = function(t, e, r) {
+ t.multiplyTo(e, r)
+ }, w.prototype.sqrTo = function(t, e) {
+ t.squareTo(e)
+ }, B.prototype.convert = function(t) {
+ if (t.s < 0 || t.t > 2 * this.m.t) return t.mod(this.m);
+ if (t.compareTo(this.m) < 0) return t;
+ var e = a();
+ return t.copyTo(e), this.reduce(e), e
+ }, B.prototype.revert = function(t) {
+ return t
+ }, B.prototype.reduce = function(t) {
+ for (t.drShiftTo(this.m.t - 1, this.r2), t.t > this.m.t + 1 && (t.t = this.m.t + 1, t.clamp()), this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3), this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); t.compareTo(this.r2) < 0;) t.dAddOffset(1, this.m.t + 1);
+ for (t.subTo(this.r2, t); t.compareTo(this.m) >= 0;) t.subTo(this.m, t)
+ }, B.prototype.mulTo = function(t, e, r) {
+ t.multiplyTo(e, r), this.reduce(r)
+ }, B.prototype.sqrTo = function(t, e) {
+ t.squareTo(e), this.reduce(e)
+ };
+ var A = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997],
+ x = (1 << 26) / A[A.length - 1];
+ s.prototype.copyTo = function(t) {
+ for (var e = this.t - 1; e >= 0; --e) t[e] = this[e];
+ t.t = this.t, t.s = this.s
+ }, s.prototype.fromInt = function(t) {
+ this.t = 1, this.s = t < 0 ? -1 : 0, t > 0 ? this[0] = t : t < -1 ? this[0] = t + DV : this.t = 0
+ }, s.prototype.fromString = function(t, e, r) {
+ var n;
+ switch (e) {
+ case 2:
+ n = 1;
+ break;
+ case 4:
+ n = 2;
+ break;
+ case 8:
+ n = 3;
+ break;
+ case 16:
+ n = 4;
+ break;
+ case 32:
+ n = 5;
+ break;
+ case 256:
+ n = 8;
+ break;
+ default:
+ return void this.fromRadix(t, e)
+ }
+ this.t = 0, this.s = 0;
+ for (var i = t.length, o = !1, a = 0; --i >= 0;) {
+ var f = 8 == n ? 255 & t[i] : p(t, i);
+ f < 0 ? "-" == t.charAt(i) && (o = !0) : (o = !1, 0 === a ? this[this.t++] = f : a + n > this.DB ? (this[this.t - 1] |= (f & (1 << this.DB - a) - 1) << a, this[this.t++] = f >> this.DB - a) : this[this.t - 1] |= f << a, (a += n) >= this.DB && (a -= this.DB))
+ }!r && 8 == n && 128 & t[0] && (this.s = -1, a > 0 && (this[this.t - 1] |= (1 << this.DB - a) - 1 << a)), this.clamp(), o && s.ZERO.subTo(this, this)
+ }, s.prototype.fromByteArray = function(t, e) {
+ this.fromString(t, 256, e)
+ }, s.prototype.fromBuffer = function(t) {
+ this.fromString(t, 256, !0)
+ }, s.prototype.clamp = function() {
+ for (var t = this.s & this.DM; this.t > 0 && this[this.t - 1] == t;) --this.t
+ }, s.prototype.dlShiftTo = function(t, e) {
+ var r;
+ for (r = this.t - 1; r >= 0; --r) e[r + t] = this[r];
+ for (r = t - 1; r >= 0; --r) e[r] = 0;
+ e.t = this.t + t, e.s = this.s
+ }, s.prototype.drShiftTo = function(t, e) {
+ for (var r = t; r < this.t; ++r) e[r - t] = this[r];
+ e.t = Math.max(this.t - t, 0), e.s = this.s
+ }, s.prototype.lShiftTo = function(t, e) {
+ var r, n = t % this.DB,
+ i = this.DB - n,
+ o = (1 << i) - 1,
+ s = Math.floor(t / this.DB),
+ a = this.s << n & this.DM;
+ for (r = this.t - 1; r >= 0; --r) e[r + s + 1] = this[r] >> i | a, a = (this[r] & o) << n;
+ for (r = s - 1; r >= 0; --r) e[r] = 0;
+ e[s] = a, e.t = this.t + s + 1, e.s = this.s, e.clamp()
+ }, s.prototype.rShiftTo = function(t, e) {
+ e.s = this.s;
+ var r = Math.floor(t / this.DB);
+ if (r >= this.t) e.t = 0;
+ else {
+ var n = t % this.DB,
+ i = this.DB - n,
+ o = (1 << n) - 1;
+ e[0] = this[r] >> n;
+ for (var s = r + 1; s < this.t; ++s) e[s - r - 1] |= (this[s] & o) << i, e[s - r] = this[s] >> n;
+ n > 0 && (e[this.t - r - 1] |= (this.s & o) << i), e.t = this.t - r, e.clamp()
+ }
+ }, s.prototype.subTo = function(t, e) {
+ for (var r = 0, n = 0, i = Math.min(t.t, this.t); r < i;) n += this[r] - t[r], e[r++] = n & this.DM, n >>= this.DB;
+ if (t.t < this.t) {
+ for (n -= t.s; r < this.t;) n += this[r], e[r++] = n & this.DM, n >>= this.DB;
+ n += this.s
+ } else {
+ for (n += this.s; r < t.t;) n -= t[r], e[r++] = n & this.DM, n >>= this.DB;
+ n -= t.s
+ }
+ e.s = n < 0 ? -1 : 0, n < -1 ? e[r++] = this.DV + n : n > 0 && (e[r++] = n), e.t = r, e.clamp()
+ }, s.prototype.multiplyTo = function(t, e) {
+ var r = this.abs(),
+ n = t.abs(),
+ i = r.t;
+ for (e.t = i + n.t; --i >= 0;) e[i] = 0;
+ for (i = 0; i < n.t; ++i) e[i + r.t] = r.am(0, n[i], e, i, 0, r.t);
+ e.s = 0, e.clamp(), this.s != t.s && s.ZERO.subTo(e, e)
+ }, s.prototype.squareTo = function(t) {
+ for (var e = this.abs(), r = t.t = 2 * e.t; --r >= 0;) t[r] = 0;
+ for (r = 0; r < e.t - 1; ++r) {
+ var n = e.am(r, e[r], t, 2 * r, 0, 1);
+ (t[r + e.t] += e.am(r + 1, 2 * e[r], t, 2 * r + 1, n, e.t - r - 1)) >= e.DV && (t[r + e.t] -= e.DV, t[r + e.t + 1] = 1)
+ }
+ t.t > 0 && (t[t.t - 1] += e.am(r, e[r], t, 2 * r, 0, 1)), t.s = 0, t.clamp()
+ }, s.prototype.divRemTo = function(t, e, r) {
+ var n = t.abs();
+ if (!(n.t <= 0)) {
+ var i = this.abs();
+ if (i.t < n.t) return null != e && e.fromInt(0), void(null != r && this.copyTo(r));
+ null == r && (r = a());
+ var o = a(),
+ f = this.s,
+ u = t.s,
+ c = this.DB - y(n[n.t - 1]);
+ c > 0 ? (n.lShiftTo(c, o), i.lShiftTo(c, r)) : (n.copyTo(o), i.copyTo(r));
+ var h = o.t,
+ p = o[h - 1];
+ if (0 !== p) {
+ var l = p * (1 << this.F1) + (h > 1 ? o[h - 2] >> this.F2 : 0),
+ g = this.FV / l,
+ d = (1 << this.F1) / l,
+ v = 1 << this.F2,
+ m = r.t,
+ S = m - h,
+ _ = null == e ? a() : e;
+ for (o.dlShiftTo(S, _), r.compareTo(_) >= 0 && (r[r.t++] = 1, r.subTo(_, r)), s.ONE.dlShiftTo(h, _), _.subTo(o, o); o.t < h;) o[o.t++] = 0;
+ for (; --S >= 0;) {
+ var b = r[--m] == p ? this.DM : Math.floor(r[m] * g + (r[m - 1] + v) * d);
+ if ((r[m] += o.am(0, b, r, S, 0, h)) < b)
+ for (o.dlShiftTo(S, _), r.subTo(_, r); r[m] < --b;) r.subTo(_, r)
+ }
+ null != e && (r.drShiftTo(h, e), f != u && s.ZERO.subTo(e, e)), r.t = h, r.clamp(), c > 0 && r.rShiftTo(c, r), f < 0 && s.ZERO.subTo(r, r)
+ }
+ }
+ }, s.prototype.invDigit = function() {
+ if (this.t < 1) return 0;
+ var t = this[0];
+ if (!(1 & t)) return 0;
+ var e = 3 & t;
+ return (e = (e = (e = (e = e * (2 - (15 & t) * e) & 15) * (2 - (255 & t) * e) & 255) * (2 - ((65535 & t) * e & 65535)) & 65535) * (2 - t * e % this.DV) % this.DV) > 0 ? this.DV - e : -e
+ }, s.prototype.isEven = function() {
+ return 0 === (this.t > 0 ? 1 & this[0] : this.s)
+ }, s.prototype.exp = function(t, e) {
+ if (t > 4294967295 || t < 1) return s.ONE;
+ var r = a(),
+ n = a(),
+ i = e.convert(this),
+ o = y(t) - 1;
+ for (i.copyTo(r); --o >= 0;)
+ if (e.sqrTo(r, n), (t & 1 << o) > 0) e.mulTo(n, i, r);
+ else {
+ var f = r;
+ r = n, n = f
+ } return e.revert(r)
+ }, s.prototype.chunkSize = function(t) {
+ return Math.floor(Math.LN2 * this.DB / Math.log(t))
+ }, s.prototype.toRadix = function(t) {
+ if (null == t && (t = 10), 0 === this.signum() || t < 2 || t > 36) return "0";
+ var e = this.chunkSize(t),
+ r = Math.pow(t, e),
+ n = l(r),
+ i = a(),
+ o = a(),
+ s = "";
+ for (this.divRemTo(n, i, o); i.signum() > 0;) s = (r + o.intValue()).toString(t).substr(1) + s, i.divRemTo(n, i, o);
+ return o.intValue().toString(t) + s
+ }, s.prototype.fromRadix = function(t, e) {
+ this.fromInt(0), null == e && (e = 10);
+ for (var r = this.chunkSize(e), n = Math.pow(e, r), i = !1, o = 0, a = 0, f = 0; f < t.length; ++f) {
+ var u = p(t, f);
+ u < 0 ? "-" == t.charAt(f) && 0 === this.signum() && (i = !0) : (a = e * a + u, ++o >= r && (this.dMultiply(n), this.dAddOffset(a, 0), o = 0, a = 0))
+ }
+ o > 0 && (this.dMultiply(Math.pow(e, o)), this.dAddOffset(a, 0)), i && s.ZERO.subTo(this, this)
+ }, s.prototype.fromNumber = function(t, e) {
+ if ("number" == typeof e)
+ if (t < 2) this.fromInt(1);
+ else
+ for (this.fromNumber(t), this.testBit(t - 1) || this.bitwiseTo(s.ONE.shiftLeft(t - 1), m, this), this.isEven() && this.dAddOffset(1, 0); !this.isProbablePrime(e);) this.dAddOffset(2, 0), this.bitLength() > t && this.subTo(s.ONE.shiftLeft(t - 1), this);
+ else {
+ var r = i.randomBytes(1 + (t >> 3)),
+ n = 7 & t;
+ n > 0 ? r[0] &= (1 << n) - 1 : r[0] = 0, this.fromByteArray(r)
+ }
+ }, s.prototype.bitwiseTo = function(t, e, r) {
+ var n, i, o = Math.min(t.t, this.t);
+ for (n = 0; n < o; ++n) r[n] = e(this[n], t[n]);
+ if (t.t < this.t) {
+ for (i = t.s & this.DM, n = o; n < this.t; ++n) r[n] = e(this[n], i);
+ r.t = this.t
+ } else {
+ for (i = this.s & this.DM, n = o; n < t.t; ++n) r[n] = e(i, t[n]);
+ r.t = t.t
+ }
+ r.s = e(this.s, t.s), r.clamp()
+ }, s.prototype.changeBit = function(t, e) {
+ var r = s.ONE.shiftLeft(t);
+ return this.bitwiseTo(r, e, r), r
+ }, s.prototype.addTo = function(t, e) {
+ for (var r = 0, n = 0, i = Math.min(t.t, this.t); r < i;) n += this[r] + t[r], e[r++] = n & this.DM, n >>= this.DB;
+ if (t.t < this.t) {
+ for (n += t.s; r < this.t;) n += this[r], e[r++] = n & this.DM, n >>= this.DB;
+ n += this.s
+ } else {
+ for (n += this.s; r < t.t;) n += t[r], e[r++] = n & this.DM, n >>= this.DB;
+ n += t.s
+ }
+ e.s = n < 0 ? -1 : 0, n > 0 ? e[r++] = n : n < -1 && (e[r++] = this.DV + n), e.t = r, e.clamp()
+ }, s.prototype.dMultiply = function(t) {
+ this[this.t] = this.am(0, t - 1, this, 0, 0, this.t), ++this.t, this.clamp()
+ }, s.prototype.dAddOffset = function(t, e) {
+ if (0 !== t) {
+ for (; this.t <= e;) this[this.t++] = 0;
+ for (this[e] += t; this[e] >= this.DV;) this[e] -= this.DV, ++e >= this.t && (this[this.t++] = 0), ++this[e]
+ }
+ }, s.prototype.multiplyLowerTo = function(t, e, r) {
+ var n, i = Math.min(this.t + t.t, e);
+ for (r.s = 0, r.t = i; i > 0;) r[--i] = 0;
+ for (n = r.t - this.t; i < n; ++i) r[i + this.t] = this.am(0, t[i], r, i, 0, this.t);
+ for (n = Math.min(t.t, e); i < n; ++i) this.am(0, t[i], r, i, 0, e - i);
+ r.clamp()
+ }, s.prototype.multiplyUpperTo = function(t, e, r) {
+ --e;
+ var n = r.t = this.t + t.t - e;
+ for (r.s = 0; --n >= 0;) r[n] = 0;
+ for (n = Math.max(e - this.t, 0); n < t.t; ++n) r[this.t + n - e] = this.am(e - n, t[n], r, 0, 0, this.t + n - e);
+ r.clamp(), r.drShiftTo(1, r)
+ }, s.prototype.modInt = function(t) {
+ if (t <= 0) return 0;
+ var e = this.DV % t,
+ r = this.s < 0 ? t - 1 : 0;
+ if (this.t > 0)
+ if (0 === e) r = this[0] % t;
+ else
+ for (var n = this.t - 1; n >= 0; --n) r = (e * r + this[n]) % t;
+ return r
+ }, s.prototype.millerRabin = function(t) {
+ var e = this.subtract(s.ONE),
+ r = e.getLowestSetBit();
+ if (r <= 0) return !1;
+ var n = e.shiftRight(r);
+ (t = t + 1 >> 1) > A.length && (t = A.length);
+ for (var i = a(), o = 0; o < t; ++o) {
+ i.fromInt(A[Math.floor(Math.random() * A.length)]);
+ var f = i.modPow(n, this);
+ if (0 != f.compareTo(s.ONE) && 0 != f.compareTo(e)) {
+ for (var u = 1; u++ < r && 0 != f.compareTo(e);)
+ if (0 === (f = f.modPowInt(2, this)).compareTo(s.ONE)) return !1;
+ if (0 != f.compareTo(e)) return !1
+ }
+ }
+ return !0
+ }, s.prototype.toString = function(t) {
+ if (this.s < 0) return "-" + this.negate().toString(t);
+ var e;
+ if (16 == t) e = 4;
+ else if (8 == t) e = 3;
+ else if (2 == t) e = 1;
+ else if (32 == t) e = 5;
+ else {
+ if (4 != t) return this.toRadix(t);
+ e = 2
+ }
+ var r, n = (1 << e) - 1,
+ i = !1,
+ o = "",
+ s = this.t,
+ a = this.DB - s * this.DB % e;
+ if (s-- > 0)
+ for (a < this.DB && (r = this[s] >> a) > 0 && (i = !0, o = h(r)); s >= 0;) a < e ? (r = (this[s] & (1 << a) - 1) << e - a, r |= this[--s] >> (a += this.DB - e)) : (r = this[s] >> (a -= e) & n, a <= 0 && (a += this.DB, --s)), r > 0 && (i = !0), i && (o += h(r));
+ return i ? o : "0"
+ }, s.prototype.negate = function() {
+ var t = a();
+ return s.ZERO.subTo(this, t), t
+ }, s.prototype.abs = function() {
+ return this.s < 0 ? this.negate() : this
+ }, s.prototype.compareTo = function(t) {
+ var e = this.s - t.s;
+ if (0 != e) return e;
+ var r = this.t;
+ if (0 != (e = r - t.t)) return this.s < 0 ? -e : e;
+ for (; --r >= 0;)
+ if (0 != (e = this[r] - t[r])) return e;
+ return 0
+ }, s.prototype.bitLength = function() {
+ return this.t <= 0 ? 0 : this.DB * (this.t - 1) + y(this[this.t - 1] ^ this.s & this.DM)
+ }, s.prototype.mod = function(t) {
+ var e = a();
+ return this.abs().divRemTo(t, null, e), this.s < 0 && e.compareTo(s.ZERO) > 0 && t.subTo(e, e), e
+ }, s.prototype.modPowInt = function(t, e) {
+ var r;
+ return r = t < 256 || e.isEven() ? new g(e) : new d(e), this.exp(t, r)
+ }, s.prototype.clone = function() {
+ var t = a();
+ return this.copyTo(t), t
+ }, s.prototype.intValue = function() {
+ if (this.s < 0) {
+ if (1 == this.t) return this[0] - this.DV;
+ if (0 === this.t) return -1
+ } else {
+ if (1 == this.t) return this[0];
+ if (0 === this.t) return 0
+ }
+ return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0]
+ }, s.prototype.byteValue = function() {
+ return 0 == this.t ? this.s : this[0] << 24 >> 24
+ }, s.prototype.shortValue = function() {
+ return 0 == this.t ? this.s : this[0] << 16 >> 16
+ }, s.prototype.signum = function() {
+ return this.s < 0 ? -1 : this.t <= 0 || 1 == this.t && this[0] <= 0 ? 0 : 1
+ }, s.prototype.toByteArray = function() {
+ var t = this.t,
+ e = new Array;
+ e[0] = this.s;
+ var r, n = this.DB - t * this.DB % 8,
+ i = 0;
+ if (t-- > 0)
+ for (n < this.DB && (r = this[t] >> n) != (this.s & this.DM) >> n && (e[i++] = r | this.s << this.DB - n); t >= 0;) n < 8 ? (r = (this[t] & (1 << n) - 1) << 8 - n, r |= this[--t] >> (n += this.DB - 8)) : (r = this[t] >> (n -= 8) & 255, n <= 0 && (n += this.DB, --t)), 128 & r && (r |= -256), 0 === i && (128 & this.s) != (128 & r) && ++i, (i > 0 || r != this.s) && (e[i++] = r);
+ return e
+ }, s.prototype.toBuffer = function(t) {
+ var e = n.from(this.toByteArray());
+ if (!0 === t && 0 === e[0]) e = e.slice(1);
+ else if (o.isNumber(t)) {
+ if (e.length > t) {
+ for (var r = 0; r < e.length - t; r++)
+ if (0 !== e[r]) return null;
+ return e.slice(e.length - t)
+ }
+ if (e.length < t) {
+ var i = n.alloc(t);
+ return i.fill(0, 0, t - e.length), e.copy(i, t - e.length), i
+ }
+ }
+ return e
+ }, s.prototype.equals = function(t) {
+ return 0 == this.compareTo(t)
+ }, s.prototype.min = function(t) {
+ return this.compareTo(t) < 0 ? this : t
+ }, s.prototype.max = function(t) {
+ return this.compareTo(t) > 0 ? this : t
+ }, s.prototype.and = function(t) {
+ var e = a();
+ return this.bitwiseTo(t, v, e), e
+ }, s.prototype.or = function(t) {
+ var e = a();
+ return this.bitwiseTo(t, m, e), e
+ }, s.prototype.xor = function(t) {
+ var e = a();
+ return this.bitwiseTo(t, S, e), e
+ }, s.prototype.andNot = function(t) {
+ var e = a();
+ return this.bitwiseTo(t, _, e), e
+ }, s.prototype.not = function() {
+ for (var t = a(), e = 0; e < this.t; ++e) t[e] = this.DM & ~this[e];
+ return t.t = this.t, t.s = ~this.s, t
+ }, s.prototype.shiftLeft = function(t) {
+ var e = a();
+ return t < 0 ? this.rShiftTo(-t, e) : this.lShiftTo(t, e), e
+ }, s.prototype.shiftRight = function(t) {
+ var e = a();
+ return t < 0 ? this.lShiftTo(-t, e) : this.rShiftTo(t, e), e
+ }, s.prototype.getLowestSetBit = function() {
+ for (var t = 0; t < this.t; ++t)
+ if (0 != this[t]) return t * this.DB + b(this[t]);
+ return this.s < 0 ? this.t * this.DB : -1
+ }, s.prototype.bitCount = function() {
+ for (var t = 0, e = this.s & this.DM, r = 0; r < this.t; ++r) t += E(this[r] ^ e);
+ return t
+ }, s.prototype.testBit = function(t) {
+ var e = Math.floor(t / this.DB);
+ return e >= this.t ? 0 != this.s : !!(this[e] & 1 << t % this.DB)
+ }, s.prototype.setBit = function(t) {
+ return this.changeBit(t, m)
+ }, s.prototype.clearBit = function(t) {
+ return this.changeBit(t, _)
+ }, s.prototype.flipBit = function(t) {
+ return this.changeBit(t, S)
+ }, s.prototype.add = function(t) {
+ var e = a();
+ return this.addTo(t, e), e
+ }, s.prototype.subtract = function(t) {
+ var e = a();
+ return this.subTo(t, e), e
+ }, s.prototype.multiply = function(t) {
+ var e = a();
+ return this.multiplyTo(t, e), e
+ }, s.prototype.divide = function(t) {
+ var e = a();
+ return this.divRemTo(t, e, null), e
+ }, s.prototype.remainder = function(t) {
+ var e = a();
+ return this.divRemTo(t, null, e), e
+ }, s.prototype.divideAndRemainder = function(t) {
+ var e = a(),
+ r = a();
+ return this.divRemTo(t, e, r), new Array(e, r)
+ }, s.prototype.modPow = function(t, e) {
+ var r, n, i = t.bitLength(),
+ o = l(1);
+ if (i <= 0) return o;
+ r = i < 18 ? 1 : i < 48 ? 3 : i < 144 ? 4 : i < 768 ? 5 : 6, n = i < 8 ? new g(e) : e.isEven() ? new B(e) : new d(e);
+ var s = new Array,
+ f = 3,
+ u = r - 1,
+ c = (1 << r) - 1;
+ if (s[1] = n.convert(this), r > 1) {
+ var h = a();
+ for (n.sqrTo(s[1], h); f <= c;) s[f] = a(), n.mulTo(h, s[f - 2], s[f]), f += 2
+ }
+ var p, v, m = t.t - 1,
+ S = !0,
+ _ = a();
+ for (i = y(t[m]) - 1; m >= 0;) {
+ for (i >= u ? p = t[m] >> i - u & c : (p = (t[m] & (1 << i + 1) - 1) << u - i, m > 0 && (p |= t[m - 1] >> this.DB + i - u)), f = r; !(1 & p);) p >>= 1, --f;
+ if ((i -= f) < 0 && (i += this.DB, --m), S) s[p].copyTo(o), S = !1;
+ else {
+ for (; f > 1;) n.sqrTo(o, _), n.sqrTo(_, o), f -= 2;
+ f > 0 ? n.sqrTo(o, _) : (v = o, o = _, _ = v), n.mulTo(_, s[p], o)
+ }
+ for (; m >= 0 && !(t[m] & 1 << i);) n.sqrTo(o, _), v = o, o = _, _ = v, --i < 0 && (i = this.DB - 1, --m)
+ }
+ return n.revert(o)
+ }, s.prototype.modInverse = function(t) {
+ var e = t.isEven();
+ if (this.isEven() && e || 0 === t.signum()) return s.ZERO;
+ for (var r = t.clone(), n = this.clone(), i = l(1), o = l(0), a = l(0), f = l(1); 0 != r.signum();) {
+ for (; r.isEven();) r.rShiftTo(1, r), e ? (i.isEven() && o.isEven() || (i.addTo(this, i), o.subTo(t, o)), i.rShiftTo(1, i)) : o.isEven() || o.subTo(t, o), o.rShiftTo(1, o);
+ for (; n.isEven();) n.rShiftTo(1, n), e ? (a.isEven() && f.isEven() || (a.addTo(this, a), f.subTo(t, f)), a.rShiftTo(1, a)) : f.isEven() || f.subTo(t, f), f.rShiftTo(1, f);
+ r.compareTo(n) >= 0 ? (r.subTo(n, r), e && i.subTo(a, i), o.subTo(f, o)) : (n.subTo(r, n), e && a.subTo(i, a), f.subTo(o, f))
+ }
+ return 0 != n.compareTo(s.ONE) ? s.ZERO : f.compareTo(t) >= 0 ? f.subtract(t) : f.signum() < 0 ? (f.addTo(t, f), f.signum() < 0 ? f.add(t) : f) : f
+ }, s.prototype.pow = function(t) {
+ return this.exp(t, new w)
+ }, s.prototype.gcd = function(t) {
+ var e = this.s < 0 ? this.negate() : this.clone(),
+ r = t.s < 0 ? t.negate() : t.clone();
+ if (e.compareTo(r) < 0) {
+ var n = e;
+ e = r, r = n
+ }
+ var i = e.getLowestSetBit(),
+ o = r.getLowestSetBit();
+ if (o < 0) return e;
+ for (i < o && (o = i), o > 0 && (e.rShiftTo(o, e), r.rShiftTo(o, r)); e.signum() > 0;)(i = e.getLowestSetBit()) > 0 && e.rShiftTo(i, e), (i = r.getLowestSetBit()) > 0 && r.rShiftTo(i, r), e.compareTo(r) >= 0 ? (e.subTo(r, e), e.rShiftTo(1, e)) : (r.subTo(e, r), r.rShiftTo(1, r));
+ return o > 0 && r.lShiftTo(o, r), r
+ }, s.prototype.isProbablePrime = function(t) {
+ var e, r = this.abs();
+ if (1 == r.t && r[0] <= A[A.length - 1]) {
+ for (e = 0; e < A.length; ++e)
+ if (r[0] == A[e]) return !0;
+ return !1
+ }
+ if (r.isEven()) return !1;
+ for (e = 1; e < A.length;) {
+ for (var n = A[e], i = e + 1; i < A.length && n < x;) n *= A[i++];
+ for (n = r.modInt(n); e < i;)
+ if (n % A[e++] == 0) return !1
+ }
+ return r.millerRabin(t)
+ }, s.int2char = h, s.ZERO = l(0), s.ONE = l(1), s.prototype.square = function() {
+ var t = a();
+ return this.squareTo(t), t
+ }, t.exports = s
+ },
+ 5682: (t, e, r) => {
+ var n = r(8287).Buffer,
+ i = r(8226)._,
+ o = (r(3200), r(1973)),
+ s = r(8226),
+ a = r(1768),
+ f = r(4538);
+ e.BigInteger = o, t.exports.Key = function() {
+ function t() {
+ this.n = null, this.e = 0, this.d = null, this.p = null, this.q = null, this.dmp1 = null, this.dmq1 = null, this.coeff = null
+ }
+ return t.prototype.setOptions = function(t) {
+ var e = a[t.signingScheme],
+ r = a[t.encryptionScheme];
+ e === r ? this.signingScheme = this.encryptionScheme = r.makeScheme(this, t) : (this.encryptionScheme = r.makeScheme(this, t), this.signingScheme = e.makeScheme(this, t)), this.encryptEngine = f.getEngine(this, t)
+ }, t.prototype.generate = function(t, e) {
+ var r = t >> 1;
+ this.e = parseInt(e, 16);
+ for (var n = new o(e, 16);;) {
+ for (; this.p = new o(t - r, 1), 0 !== this.p.subtract(o.ONE).gcd(n).compareTo(o.ONE) || !this.p.isProbablePrime(10););
+ for (; this.q = new o(r, 1), 0 !== this.q.subtract(o.ONE).gcd(n).compareTo(o.ONE) || !this.q.isProbablePrime(10););
+ if (this.p.compareTo(this.q) <= 0) {
+ var i = this.p;
+ this.p = this.q, this.q = i
+ }
+ var s = this.p.subtract(o.ONE),
+ a = this.q.subtract(o.ONE),
+ f = s.multiply(a);
+ if (0 === f.gcd(n).compareTo(o.ONE)) {
+ if (this.n = this.p.multiply(this.q), this.n.bitLength() < t) continue;
+ this.d = n.modInverse(f), this.dmp1 = this.d.mod(s), this.dmq1 = this.d.mod(a), this.coeff = this.q.modInverse(this.p);
+ break
+ }
+ }
+ this.$$recalculateCache()
+ }, t.prototype.setPrivate = function(t, e, r, n, a, f, u, c) {
+ if (!(t && e && r && t.length > 0 && (i.isNumber(e) || e.length > 0) && r.length > 0)) throw Error("Invalid RSA private key");
+ this.n = new o(t), this.e = i.isNumber(e) ? e : s.get32IntFromBuffer(e, 0), this.d = new o(r), n && a && f && u && c && (this.p = new o(n), this.q = new o(a), this.dmp1 = new o(f), this.dmq1 = new o(u), this.coeff = new o(c)), this.$$recalculateCache()
+ }, t.prototype.setPublic = function(t, e) {
+ if (!(t && e && t.length > 0 && (i.isNumber(e) || e.length > 0))) throw Error("Invalid RSA public key");
+ this.n = new o(t), this.e = i.isNumber(e) ? e : s.get32IntFromBuffer(e, 0), this.$$recalculateCache()
+ }, t.prototype.$doPrivate = function(t) {
+ if (this.p || this.q) return t.modPow(this.d, this.n);
+ for (var e = t.mod(this.p).modPow(this.dmp1, this.p), r = t.mod(this.q).modPow(this.dmq1, this.q); e.compareTo(r) < 0;) e = e.add(this.p);
+ return e.subtract(r).multiply(this.coeff).mod(this.p).multiply(this.q).add(r)
+ }, t.prototype.$doPublic = function(t) {
+ return t.modPowInt(this.e, this.n)
+ }, t.prototype.encrypt = function(t, e) {
+ var r = [],
+ i = [],
+ o = t.length,
+ s = Math.ceil(o / this.maxMessageLength) || 1,
+ a = Math.ceil(o / s || 1);
+ if (1 == s) r.push(t);
+ else
+ for (var f = 0; f < s; f++) r.push(t.slice(f * a, (f + 1) * a));
+ for (var u = 0; u < r.length; u++) i.push(this.encryptEngine.encrypt(r[u], e));
+ return n.concat(i)
+ }, t.prototype.decrypt = function(t, e) {
+ if (t.length % this.encryptedDataLength > 0) throw Error("Incorrect data or key");
+ for (var r = [], i = 0, o = 0, s = t.length / this.encryptedDataLength, a = 0; a < s; a++) o = (i = a * this.encryptedDataLength) + this.encryptedDataLength, r.push(this.encryptEngine.decrypt(t.slice(i, Math.min(o, t.length)), e));
+ return n.concat(r)
+ }, t.prototype.sign = function(t) {
+ return this.signingScheme.sign.apply(this.signingScheme, arguments)
+ }, t.prototype.verify = function(t, e, r) {
+ return this.signingScheme.verify.apply(this.signingScheme, arguments)
+ }, t.prototype.isPrivate = function() {
+ return !!(this.n && this.e && this.d)
+ }, t.prototype.isPublic = function(t) {
+ return this.n && this.e && !(t && this.d) || !1
+ }, Object.defineProperty(t.prototype, "keySize", {
+ get: function() {
+ return this.cache.keyBitLength
+ }
+ }), Object.defineProperty(t.prototype, "encryptedDataLength", {
+ get: function() {
+ return this.cache.keyByteLength
+ }
+ }), Object.defineProperty(t.prototype, "maxMessageLength", {
+ get: function() {
+ return this.encryptionScheme.maxMessageLength()
+ }
+ }), t.prototype.$$recalculateCache = function() {
+ this.cache = this.cache || {}, this.cache.keyBitLength = this.n.bitLength(), this.cache.keyByteLength = this.cache.keyBitLength + 6 >> 3
+ }, t
+ }()
+ },
+ 2487: (t, e, r) => {
+ var n = r(8287).Buffer,
+ i = (r(1973), r(3200));
+ t.exports = {
+ isEncryption: !0,
+ isSignature: !1
+ }, t.exports.digestLength = {
+ md4: 16,
+ md5: 16,
+ ripemd160: 20,
+ rmd160: 20,
+ sha1: 20,
+ sha224: 28,
+ sha256: 32,
+ sha384: 48,
+ sha512: 64
+ };
+ var o = "sha1";
+ t.exports.eme_oaep_mgf1 = function(e, r, s) {
+ s = s || o;
+ for (var a = t.exports.digestLength[s], f = Math.ceil(r / a), u = n.alloc(a * f), c = n.alloc(4), h = 0; h < f; ++h) {
+ var p = i.createHash(s);
+ p.update(e), c.writeUInt32BE(h, 0), p.update(c), p.digest().copy(u, h * a)
+ }
+ return u.slice(0, r)
+ }, t.exports.makeScheme = function(e, r) {
+ function s(t, e) {
+ this.key = t, this.options = e
+ }
+ return s.prototype.maxMessageLength = function() {
+ return this.key.encryptedDataLength - 2 * t.exports.digestLength[this.options.encryptionSchemeOptions.hash || o] - 2
+ }, s.prototype.encPad = function(e) {
+ var r = this.options.encryptionSchemeOptions.hash || o,
+ s = this.options.encryptionSchemeOptions.mgf || t.exports.eme_oaep_mgf1,
+ a = this.options.encryptionSchemeOptions.label || n.alloc(0),
+ f = this.key.encryptedDataLength,
+ u = t.exports.digestLength[r];
+ if (e.length > f - 2 * u - 2) throw new Error("Message is too long to encode into an encoded message with a length of " + f + " bytes, increaseemLen to fix this error (minimum value for given parameters and options: " + (f - 2 * u - 2) + ")");
+ var c = i.createHash(r);
+ c.update(a), c = c.digest();
+ var h = n.alloc(f - e.length - 2 * u - 1);
+ h.fill(0), h[h.length - 1] = 1;
+ for (var p = n.concat([c, h, e]), l = i.randomBytes(u), y = s(l, p.length, r), g = 0; g < p.length; g++) p[g] ^= y[g];
+ for (y = s(p, u, r), g = 0; g < l.length; g++) l[g] ^= y[g];
+ var d = n.alloc(1 + l.length + p.length);
+ return d[0] = 0, l.copy(d, 1), p.copy(d, 1 + l.length), d
+ }, s.prototype.encUnPad = function(e) {
+ var r = this.options.encryptionSchemeOptions.hash || o,
+ s = this.options.encryptionSchemeOptions.mgf || t.exports.eme_oaep_mgf1,
+ a = this.options.encryptionSchemeOptions.label || n.alloc(0),
+ f = t.exports.digestLength[r];
+ if (e.length < 2 * f + 2) throw new Error("Error decoding message, the supplied message is not long enough to be a valid OAEP encoded message");
+ for (var u = e.slice(1, f + 1), c = e.slice(1 + f), h = s(c, f, r), p = 0; p < u.length; p++) u[p] ^= h[p];
+ for (h = s(u, c.length, r), p = 0; p < c.length; p++) c[p] ^= h[p];
+ var l = i.createHash(r);
+ if (l.update(a), l = l.digest(), c.slice(0, f).toString("hex") != l.toString("hex")) throw new Error("Error decoding message, the lHash calculated from the label provided and the lHash in the encrypted data do not match.");
+ for (p = f; 0 === c[p++] && p < c.length;);
+ if (1 != c[p - 1]) throw new Error("Error decoding message, there is no padding message separator byte");
+ return c.slice(p)
+ }, new s(e, r)
+ }
+ },
+ 8290: (t, e, r) => {
+ var n = r(8287).Buffer,
+ i = r(1973),
+ o = r(3200),
+ s = r(7449),
+ a = {
+ md2: n.from("3020300c06082a864886f70d020205000410", "hex"),
+ md5: n.from("3020300c06082a864886f70d020505000410", "hex"),
+ sha1: n.from("3021300906052b0e03021a05000414", "hex"),
+ sha224: n.from("302d300d06096086480165030402040500041c", "hex"),
+ sha256: n.from("3031300d060960864801650304020105000420", "hex"),
+ sha384: n.from("3041300d060960864801650304020205000430", "hex"),
+ sha512: n.from("3051300d060960864801650304020305000440", "hex"),
+ ripemd160: n.from("3021300906052b2403020105000414", "hex"),
+ rmd160: n.from("3021300906052b2403020105000414", "hex")
+ },
+ f = {
+ ripemd160: "rmd160"
+ },
+ u = "sha256";
+ t.exports = {
+ isEncryption: !0,
+ isSignature: !0
+ }, t.exports.makeScheme = function(t, e) {
+ function r(t, e) {
+ this.key = t, this.options = e
+ }
+ return r.prototype.maxMessageLength = function() {
+ return this.options.encryptionSchemeOptions && this.options.encryptionSchemeOptions.padding == s.RSA_NO_PADDING ? this.key.encryptedDataLength : this.key.encryptedDataLength - 11
+ }, r.prototype.encPad = function(t, e) {
+ var r;
+ if (e = e || {}, t.length > this.key.maxMessageLength) throw new Error("Message too long for RSA (n=" + this.key.encryptedDataLength + ", l=" + t.length + ")");
+ if (this.options.encryptionSchemeOptions && this.options.encryptionSchemeOptions.padding == s.RSA_NO_PADDING) return (r = n.alloc(this.key.maxMessageLength - t.length)).fill(0), n.concat([r, t]);
+ if (1 === e.type) return (r = n.alloc(this.key.encryptedDataLength - t.length - 1)).fill(255, 0, r.length - 1), r[0] = 1, r[r.length - 1] = 0, n.concat([r, t]);
+ (r = n.alloc(this.key.encryptedDataLength - t.length))[0] = 0, r[1] = 2;
+ for (var i = o.randomBytes(r.length - 3), a = 0; a < i.length; a++) {
+ for (var f = i[a]; 0 === f;) f = o.randomBytes(1)[0];
+ r[a + 2] = f
+ }
+ return r[r.length - 1] = 0, n.concat([r, t])
+ }, r.prototype.encUnPad = function(t, e) {
+ e = e || {};
+ var r = 0;
+ if (this.options.encryptionSchemeOptions && this.options.encryptionSchemeOptions.padding == s.RSA_NO_PADDING) return "function" == typeof t.lastIndexOf ? t.slice(t.lastIndexOf("\0") + 1, t.length) : t.slice(String.prototype.lastIndexOf.call(t, "\0") + 1, t.length);
+ if (t.length < 4) return null;
+ if (1 === e.type) {
+ if (0 !== t[0] || 1 !== t[1]) return null;
+ for (r = 3; 0 !== t[r];)
+ if (255 != t[r] || ++r >= t.length) return null
+ } else {
+ if (0 !== t[0] || 2 !== t[1]) return null;
+ for (r = 3; 0 !== t[r];)
+ if (++r >= t.length) return null
+ }
+ return t.slice(r + 1, t.length)
+ }, r.prototype.sign = function(t) {
+ var e = this.options.signingSchemeOptions.hash || u;
+ if ("browser" === this.options.environment) {
+ e = f[e] || e;
+ var r = o.createHash(e);
+ r.update(t);
+ var n = this.pkcs1pad(r.digest(), e);
+ return this.key.$doPrivate(new i(n)).toBuffer(this.key.encryptedDataLength)
+ }
+ var s = o.createSign("RSA-" + e.toUpperCase());
+ return s.update(t), s.sign(this.options.rsaUtils.exportKey("private"))
+ }, r.prototype.verify = function(t, e, r) {
+ if (this.options.encryptionSchemeOptions && this.options.encryptionSchemeOptions.padding == s.RSA_NO_PADDING) return !1;
+ var a = this.options.signingSchemeOptions.hash || u;
+ if ("browser" === this.options.environment) {
+ a = f[a] || a, r && (e = n.from(e, r));
+ var c = o.createHash(a);
+ c.update(t);
+ var h = this.pkcs1pad(c.digest(), a);
+ return this.key.$doPublic(new i(e)).toBuffer().toString("hex") == h.toString("hex")
+ }
+ var p = o.createVerify("RSA-" + a.toUpperCase());
+ return p.update(t), p.verify(this.options.rsaUtils.exportKey("public"), e, r)
+ }, r.prototype.pkcs0pad = function(t) {
+ var e = n.alloc(this.key.maxMessageLength - t.length);
+ return e.fill(0), n.concat([e, t])
+ }, r.prototype.pkcs0unpad = function(t) {
+ return "function" == typeof t.lastIndexOf ? t.slice(t.lastIndexOf("\0") + 1, t.length) : t.slice(String.prototype.lastIndexOf.call(t, "\0") + 1, t.length)
+ }, r.prototype.pkcs1pad = function(t, e) {
+ var r = a[e];
+ if (!r) throw Error("Unsupported hash algorithm");
+ var i = n.concat([r, t]);
+ if (i.length + 10 > this.key.encryptedDataLength) throw Error("Key is too short for signing algorithm (" + e + ")");
+ var o = n.alloc(this.key.encryptedDataLength - i.length - 1);
+ return o.fill(255, 0, o.length - 1), o[0] = 1, o[o.length - 1] = 0, n.concat([o, i])
+ }, new r(t, e)
+ }
+ },
+ 4414: (t, e, r) => {
+ var n = r(8287).Buffer,
+ i = r(1973),
+ o = r(3200);
+ t.exports = {
+ isEncryption: !1,
+ isSignature: !0
+ };
+ var s = "sha1";
+ t.exports.makeScheme = function(t, e) {
+ var a = r(1768).pkcs1_oaep;
+
+ function f(t, e) {
+ this.key = t, this.options = e
+ }
+ return f.prototype.sign = function(t) {
+ var e = o.createHash(this.options.signingSchemeOptions.hash || s);
+ e.update(t);
+ var r = this.emsa_pss_encode(e.digest(), this.key.keySize - 1);
+ return this.key.$doPrivate(new i(r)).toBuffer(this.key.encryptedDataLength)
+ }, f.prototype.verify = function(t, e, r) {
+ r && (e = n.from(e, r)), e = new i(e);
+ var a = Math.ceil((this.key.keySize - 1) / 8),
+ f = this.key.$doPublic(e).toBuffer(a),
+ u = o.createHash(this.options.signingSchemeOptions.hash || s);
+ return u.update(t), this.emsa_pss_verify(u.digest(), f, this.key.keySize - 1)
+ }, f.prototype.emsa_pss_encode = function(t, e) {
+ var r = this.options.signingSchemeOptions.hash || s,
+ i = this.options.signingSchemeOptions.mgf || a.eme_oaep_mgf1,
+ f = this.options.signingSchemeOptions.saltLength || 20,
+ u = a.digestLength[r],
+ c = Math.ceil(e / 8);
+ if (c < u + f + 2) throw new Error("Output length passed to emBits(" + e + ") is too small for the options specified(" + r + ", " + f + "). To fix this issue increase the value of emBits. (minimum size: " + (8 * u + 8 * f + 9) + ")");
+ var h = o.randomBytes(f),
+ p = n.alloc(8 + u + f);
+ p.fill(0, 0, 8), t.copy(p, 8), h.copy(p, 8 + t.length);
+ var l = o.createHash(r);
+ l.update(p), l = l.digest();
+ var y = n.alloc(c - h.length - u - 2);
+ y.fill(0);
+ var g = n.alloc(y.length + 1 + h.length);
+ y.copy(g), g[y.length] = 1, h.copy(g, y.length + 1);
+ for (var d = i(l, g.length, r), v = n.alloc(g.length), m = 0; m < d.length; m++) v[m] = g[m] ^ d[m];
+ var S = 8 * c - e,
+ _ = 255 ^ 255 >> 8 - S << 8 - S;
+ v[0] = v[0] & _;
+ var b = n.alloc(v.length + l.length + 1);
+ return v.copy(b, 0), l.copy(b, v.length), b[b.length - 1] = 188, b
+ }, f.prototype.emsa_pss_verify = function(t, e, r) {
+ var i = this.options.signingSchemeOptions.hash || s,
+ f = this.options.signingSchemeOptions.mgf || a.eme_oaep_mgf1,
+ u = this.options.signingSchemeOptions.saltLength || 20,
+ c = a.digestLength[i],
+ h = Math.ceil(r / 8);
+ if (h < c + u + 2 || 188 != e[e.length - 1]) return !1;
+ var p = n.alloc(h - c - 1);
+ e.copy(p, 0, 0, h - c - 1);
+ for (var l = 0, y = 0, g = 8 * h - r; y < g; y++) l |= 1 << 7 - y;
+ if (p[0] & l) return !1;
+ var d = e.slice(h - c - 1, h - 1),
+ v = f(d, p.length, i);
+ for (y = 0; y < p.length; y++) p[y] ^= v[y];
+ for (l = 255 ^ 255 >> 8 - (g = 8 * h - r) << 8 - g, p[0] = p[0] & l, y = 0; 0 === p[y] && y < p.length; y++);
+ if (1 != p[y]) return !1;
+ var m = p.slice(p.length - u),
+ S = n.alloc(8 + c + u);
+ S.fill(0, 0, 8), t.copy(S, 8), m.copy(S, 8 + t.length);
+ var _ = o.createHash(i);
+ return _.update(S), _ = _.digest(), d.toString("hex") === _.toString("hex")
+ }, new f(t, e)
+ }
+ },
+ 1768: (t, e, r) => {
+ t.exports = {
+ pkcs1: r(8290),
+ pkcs1_oaep: r(2487),
+ pss: r(4414),
+ isEncryption: function(e) {
+ return t.exports[e] && t.exports[e].isEncryption
+ },
+ isSignature: function(e) {
+ return t.exports[e] && t.exports[e].isSignature
+ }
+ }
+ },
+ 8226: (t, e, r) => {
+ var n = r(5606);
+ r(3200), t.exports.linebrk = function(t, e) {
+ for (var r = "", n = 0; n + e < t.length;) r += t.substring(n, n + e) + "\n", n += e;
+ return r + t.substring(n, t.length)
+ }, t.exports.detectEnvironment = function() {
+ return "browser";
+ "undefined" == typeof window || !window || n && "node" === n.title ? "node" : "browser"
+ }, t.exports.get32IntFromBuffer = function(t, e) {
+ var r;
+ if (e = e || 0, (r = t.length - e) > 0) {
+ if (r >= 4) return t.readUIntBE(e, r);
+ for (var n = 0, i = e + r, o = 0; i > e; i--, o += 2) n += t[i - 1] * Math.pow(16, o);
+ return n
+ }
+ return NaN
+ }, t.exports._ = {
+ isObject: function(t) {
+ var e = typeof t;
+ return !!t && ("object" == e || "function" == e)
+ },
+ isString: function(t) {
+ return "string" == typeof t || t instanceof String
+ },
+ isNumber: function(t) {
+ return "number" == typeof t || !isNaN(parseFloat(t)) && isFinite(t)
+ },
+ omit: function(t, e) {
+ var r = {};
+ for (var n in t) t.hasOwnProperty(n) && n !== e && (r[n] = t[n]);
+ return r
+ }
+ }, t.exports.trimSurroundingText = function(t, e, r) {
+ var n = 0,
+ i = t.length,
+ o = t.indexOf(e);
+ o >= 0 && (n = o + e.length);
+ var s = t.indexOf(r, o);
+ return s >= 0 && (i = s), t.substring(n, i)
+ }
+ },
+ 8875: (t, e, r) => {
+ "use strict";
+ var n;
+ if (!Object.keys) {
+ var i = Object.prototype.hasOwnProperty,
+ o = Object.prototype.toString,
+ s = r(1093),
+ a = Object.prototype.propertyIsEnumerable,
+ f = !a.call({
+ toString: null
+ }, "toString"),
+ u = a.call((function() {}), "prototype"),
+ c = ["toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor"],
+ h = function(t) {
+ var e = t.constructor;
+ return e && e.prototype === t
+ },
+ p = {
+ $applicationCache: !0,
+ $console: !0,
+ $external: !0,
+ $frame: !0,
+ $frameElement: !0,
+ $frames: !0,
+ $innerHeight: !0,
+ $innerWidth: !0,
+ $onmozfullscreenchange: !0,
+ $onmozfullscreenerror: !0,
+ $outerHeight: !0,
+ $outerWidth: !0,
+ $pageXOffset: !0,
+ $pageYOffset: !0,
+ $parent: !0,
+ $scrollLeft: !0,
+ $scrollTop: !0,
+ $scrollX: !0,
+ $scrollY: !0,
+ $self: !0,
+ $webkitIndexedDB: !0,
+ $webkitStorageInfo: !0,
+ $window: !0
+ },
+ l = function() {
+ if ("undefined" == typeof window) return !1;
+ for (var t in window) try {
+ if (!p["$" + t] && i.call(window, t) && null !== window[t] && "object" == typeof window[t]) try {
+ h(window[t])
+ } catch (t) {
+ return !0
+ }
+ } catch (t) {
+ return !0
+ }
+ return !1
+ }();
+ n = function(t) {
+ var e = null !== t && "object" == typeof t,
+ r = "[object Function]" === o.call(t),
+ n = s(t),
+ a = e && "[object String]" === o.call(t),
+ p = [];
+ if (!e && !r && !n) throw new TypeError("Object.keys called on a non-object");
+ var y = u && r;
+ if (a && t.length > 0 && !i.call(t, 0))
+ for (var g = 0; g < t.length; ++g) p.push(String(g));
+ if (n && t.length > 0)
+ for (var d = 0; d < t.length; ++d) p.push(String(d));
+ else
+ for (var v in t) y && "prototype" === v || !i.call(t, v) || p.push(String(v));
+ if (f)
+ for (var m = function(t) {
+ if ("undefined" == typeof window || !l) return h(t);
+ try {
+ return h(t)
+ } catch (t) {
+ return !1
+ }
+ }(t), S = 0; S < c.length; ++S) m && "constructor" === c[S] || !i.call(t, c[S]) || p.push(c[S]);
+ return p
+ }
+ }
+ t.exports = n
+ },
+ 1189: (t, e, r) => {
+ "use strict";
+ var n = Array.prototype.slice,
+ i = r(1093),
+ o = Object.keys,
+ s = o ? function(t) {
+ return o(t)
+ } : r(8875),
+ a = Object.keys;
+ s.shim = function() {
+ if (Object.keys) {
+ var t = function() {
+ var t = Object.keys(arguments);
+ return t && t.length === arguments.length
+ }(1, 2);
+ t || (Object.keys = function(t) {
+ return i(t) ? a(n.call(t)) : a(t)
+ })
+ } else Object.keys = s;
+ return Object.keys || s
+ }, t.exports = s
+ },
+ 1093: t => {
+ "use strict";
+ var e = Object.prototype.toString;
+ t.exports = function(t) {
+ var r = e.call(t),
+ n = "[object Arguments]" === r;
+ return n || (n = "[object Array]" !== r && null !== t && "object" == typeof t && "number" == typeof t.length && t.length >= 0 && "[object Function]" === e.call(t.callee)), n
+ }
+ },
+ 8403: (t, e, r) => {
+ "use strict";
+ var n = r(1189),
+ i = r(1333)(),
+ o = r(8075),
+ s = Object,
+ a = o("Array.prototype.push"),
+ f = o("Object.prototype.propertyIsEnumerable"),
+ u = i ? Object.getOwnPropertySymbols : null;
+ t.exports = function(t, e) {
+ if (null == t) throw new TypeError("target must be an object");
+ var r = s(t);
+ if (1 === arguments.length) return r;
+ for (var o = 1; o < arguments.length; ++o) {
+ var c = s(arguments[o]),
+ h = n(c),
+ p = i && (Object.getOwnPropertySymbols || u);
+ if (p)
+ for (var l = p(c), y = 0; y < l.length; ++y) {
+ var g = l[y];
+ f(c, g) && a(h, g)
+ }
+ for (var d = 0; d < h.length; ++d) {
+ var v = h[d];
+ if (f(c, v)) {
+ var m = c[v];
+ r[v] = m
+ }
+ }
+ }
+ return r
+ }
+ },
+ 1514: (t, e, r) => {
+ "use strict";
+ var n = r(8403);
+ t.exports = function() {
+ return Object.assign ? function() {
+ if (!Object.assign) return !1;
+ for (var t = "abcdefghijklmnopqrst", e = t.split(""), r = {}, n = 0; n < e.length; ++n) r[e[n]] = e[n];
+ var i = Object.assign({}, r),
+ o = "";
+ for (var s in i) o += s;
+ return t !== o
+ }() || function() {
+ if (!Object.assign || !Object.preventExtensions) return !1;
+ var t = Object.preventExtensions({
+ 1: 2
+ });
+ try {
+ Object.assign(t, "xy")
+ } catch (e) {
+ return "y" === t[1]
+ }
+ return !1
+ }() ? n : Object.assign : n
+ }
+ },
+ 5606: t => {
+ var e, r, n = t.exports = {};
+
+ function i() {
+ throw new Error("setTimeout has not been defined")
+ }
+
+ function o() {
+ throw new Error("clearTimeout has not been defined")
+ }
+
+ function s(t) {
+ if (e === setTimeout) return setTimeout(t, 0);
+ if ((e === i || !e) && setTimeout) return e = setTimeout, setTimeout(t, 0);
+ try {
+ return e(t, 0)
+ } catch (r) {
+ try {
+ return e.call(null, t, 0)
+ } catch (r) {
+ return e.call(this, t, 0)
+ }
+ }
+ }! function() {
+ try {
+ e = "function" == typeof setTimeout ? setTimeout : i
+ } catch (t) {
+ e = i
+ }
+ try {
+ r = "function" == typeof clearTimeout ? clearTimeout : o
+ } catch (t) {
+ r = o
+ }
+ }();
+ var a, f = [],
+ u = !1,
+ c = -1;
+
+ function h() {
+ u && a && (u = !1, a.length ? f = a.concat(f) : c = -1, f.length && p())
+ }
+
+ function p() {
+ if (!u) {
+ var t = s(h);
+ u = !0;
+ for (var e = f.length; e;) {
+ for (a = f, f = []; ++c < e;) a && a[c].run();
+ c = -1, e = f.length
+ }
+ a = null, u = !1,
+ function(t) {
+ if (r === clearTimeout) return clearTimeout(t);
+ if ((r === o || !r) && clearTimeout) return r = clearTimeout, clearTimeout(t);
+ try {
+ return r(t)
+ } catch (e) {
+ try {
+ return r.call(null, t)
+ } catch (e) {
+ return r.call(this, t)
+ }
+ }
+ }(t)
+ }
+ }
+
+ function l(t, e) {
+ this.fun = t, this.array = e
+ }
+
+ function y() {}
+ n.nextTick = function(t) {
+ var e = new Array(arguments.length - 1);
+ if (arguments.length > 1)
+ for (var r = 1; r < arguments.length; r++) e[r - 1] = arguments[r];
+ f.push(new l(t, e)), 1 !== f.length || u || s(p)
+ }, l.prototype.run = function() {
+ this.fun.apply(null, this.array)
+ }, n.title = "browser", n.browser = !0, n.env = {}, n.argv = [], n.version = "", n.versions = {}, n.on = y, n.addListener = y, n.once = y, n.off = y, n.removeListener = y, n.removeAllListeners = y, n.emit = y, n.prependListener = y, n.prependOnceListener = y, n.listeners = function(t) {
+ return []
+ }, n.binding = function(t) {
+ throw new Error("process.binding is not supported")
+ }, n.cwd = function() {
+ return "/"
+ }, n.chdir = function(t) {
+ throw new Error("process.chdir is not supported")
+ }, n.umask = function() {
+ return 0
+ }
+ },
+ 4774: (t, e, r) => {
+ "use strict";
+ var n, i = r(5606),
+ o = r(8287),
+ s = o.Buffer,
+ a = {};
+ for (n in o) o.hasOwnProperty(n) && "SlowBuffer" !== n && "Buffer" !== n && (a[n] = o[n]);
+ var f = a.Buffer = {};
+ for (n in s) s.hasOwnProperty(n) && "allocUnsafe" !== n && "allocUnsafeSlow" !== n && (f[n] = s[n]);
+ if (a.Buffer.prototype = s.prototype, f.from && f.from !== Uint8Array.from || (f.from = function(t, e, r) {
+ if ("number" == typeof t) throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof t);
+ if (t && void 0 === t.length) throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof t);
+ return s(t, e, r)
+ }), f.alloc || (f.alloc = function(t, e, r) {
+ if ("number" != typeof t) throw new TypeError('The "size" argument must be of type number. Received type ' + typeof t);
+ if (t < 0 || t >= 2 * (1 << 30)) throw new RangeError('The value "' + t + '" is invalid for option "size"');
+ var n = s(t);
+ return e && 0 !== e.length ? "string" == typeof r ? n.fill(e, r) : n.fill(e) : n.fill(0), n
+ }), !a.kStringMaxLength) try {
+ a.kStringMaxLength = i.binding("buffer").kStringMaxLength
+ } catch (t) {}
+ a.constants || (a.constants = {
+ MAX_LENGTH: a.kMaxLength
+ }, a.kStringMaxLength && (a.constants.MAX_STRING_LENGTH = a.kStringMaxLength)), t.exports = a
+ },
+ 6897: (t, e, r) => {
+ "use strict";
+ var n = r(453),
+ i = r(41),
+ o = r(592)(),
+ s = r(5795),
+ a = r(9675),
+ f = n("%Math.floor%");
+ t.exports = function(t, e) {
+ if ("function" != typeof t) throw new a("`fn` is not a function");
+ if ("number" != typeof e || e < 0 || e > 4294967295 || f(e) !== e) throw new a("`length` must be a positive 32-bit integer");
+ var r = arguments.length > 2 && !!arguments[2],
+ n = !0,
+ u = !0;
+ if ("length" in t && s) {
+ var c = s(t, "length");
+ c && !c.configurable && (n = !1), c && !c.writable && (u = !1)
+ }
+ return (n || u || !r) && (o ? i(t, "length", e, !0, !0) : i(t, "length", e)), t
+ }
+ },
+ 3200: (t, e, r) => {
+ var n = r(8287).Buffer,
+ i = r(1396),
+ o = {
+ randomBytes: function(t) {
+ for (var e = [], r = 0; r < t; r++) e.push(Math.floor(256 * Math.random()));
+ return n.from(e)
+ },
+ createHash(t) {
+ let e = n.from([]);
+ return {
+ update: function(t) {
+ return e = n.concat([e, t]), this
+ },
+ digest: function() {
+ let r = i[t.toUpperCase()](i.lib.WordArray.create(new Uint8Array(e))).toString();
+ return n.from(r, "hex")
+ }
+ }
+ }
+ };
+ t.exports = o
+ },
+ 7033: (t, e, r) => {
+ var n = r(8287).Buffer;
+ const i = r(3229);
+ let o = {
+ outputEncoding: "",
+ PublicFormat: "pkcs1-public",
+ PrivateFormat: "pkcs1-private",
+ options: {
+ environment: "browser",
+ encryptionScheme: "pkcs1"
+ }
+ };
+ t.exports = {
+ NodeRSA: i,
+ encryptRSAWithPublicKey: function(t, e, r = {}) {
+ return r = Object.assign({}, o, r), new i(e, r.PublicFormat, r.options).encrypt(t, r.outEncoding || "base64")
+ },
+ encryptRSAWithPrivateKey: function(t, e, r = {}) {
+ return r = Object.assign({}, o, r), new i(e, r.PrivateFormat, r.options).encryptPrivate(t, r.outputEncoding || "base64")
+ },
+ decryptRSAWithPublicKey: function(t, e, r = {}) {
+ return r = Object.assign({}, o, r), new i(e, r.PublicEncoding, r.options).decryptPublic(t, r.outEncoding || "utf8")
+ },
+ decryptRSAWithPrivateKey: function(t, e, r = {}) {
+ return r = Object.assign({}, o, r), new i(e, r.PrivateEncoding, r.options).decrypt(t, r.outEncoding || "utf8")
+ },
+ sign: function(t, e, r = {}) {
+ return r = Object.assign({}, o, r), new i(e, r.PrivateEncoding, r.options).sign(t, r.outEncoding || "base64")
+ },
+ verify: function(t, e, r, s = {}) {
+ return "string" == typeof e && e.match(/^([0-9a-fA-F]{2})*$/) ? e = n.from(e, "hex") : "string" == typeof e && (e = n.from(e, "base64")), s = Object.assign({}, o, s), new i(r, s.PublicEncoding, s.options).verify(t, e)
+ }
+ }
+ },
+ 7449: t => {
+ "use strict";
+ t.exports = JSON.parse('{"O_RDONLY":0,"O_WRONLY":1,"O_RDWR":2,"S_IFMT":61440,"S_IFREG":32768,"S_IFDIR":16384,"S_IFCHR":8192,"S_IFBLK":24576,"S_IFIFO":4096,"S_IFLNK":40960,"S_IFSOCK":49152,"O_CREAT":512,"O_EXCL":2048,"O_NOCTTY":131072,"O_TRUNC":1024,"O_APPEND":8,"O_DIRECTORY":1048576,"O_NOFOLLOW":256,"O_SYNC":128,"O_SYMLINK":2097152,"O_NONBLOCK":4,"S_IRWXU":448,"S_IRUSR":256,"S_IWUSR":128,"S_IXUSR":64,"S_IRWXG":56,"S_IRGRP":32,"S_IWGRP":16,"S_IXGRP":8,"S_IRWXO":7,"S_IROTH":4,"S_IWOTH":2,"S_IXOTH":1,"E2BIG":7,"EACCES":13,"EADDRINUSE":48,"EADDRNOTAVAIL":49,"EAFNOSUPPORT":47,"EAGAIN":35,"EALREADY":37,"EBADF":9,"EBADMSG":94,"EBUSY":16,"ECANCELED":89,"ECHILD":10,"ECONNABORTED":53,"ECONNREFUSED":61,"ECONNRESET":54,"EDEADLK":11,"EDESTADDRREQ":39,"EDOM":33,"EDQUOT":69,"EEXIST":17,"EFAULT":14,"EFBIG":27,"EHOSTUNREACH":65,"EIDRM":90,"EILSEQ":92,"EINPROGRESS":36,"EINTR":4,"EINVAL":22,"EIO":5,"EISCONN":56,"EISDIR":21,"ELOOP":62,"EMFILE":24,"EMLINK":31,"EMSGSIZE":40,"EMULTIHOP":95,"ENAMETOOLONG":63,"ENETDOWN":50,"ENETRESET":52,"ENETUNREACH":51,"ENFILE":23,"ENOBUFS":55,"ENODATA":96,"ENODEV":19,"ENOENT":2,"ENOEXEC":8,"ENOLCK":77,"ENOLINK":97,"ENOMEM":12,"ENOMSG":91,"ENOPROTOOPT":42,"ENOSPC":28,"ENOSR":98,"ENOSTR":99,"ENOSYS":78,"ENOTCONN":57,"ENOTDIR":20,"ENOTEMPTY":66,"ENOTSOCK":38,"ENOTSUP":45,"ENOTTY":25,"ENXIO":6,"EOPNOTSUPP":102,"EOVERFLOW":84,"EPERM":1,"EPIPE":32,"EPROTO":100,"EPROTONOSUPPORT":43,"EPROTOTYPE":41,"ERANGE":34,"EROFS":30,"ESPIPE":29,"ESRCH":3,"ESTALE":70,"ETIME":101,"ETIMEDOUT":60,"ETXTBSY":26,"EWOULDBLOCK":35,"EXDEV":18,"SIGHUP":1,"SIGINT":2,"SIGQUIT":3,"SIGILL":4,"SIGTRAP":5,"SIGABRT":6,"SIGIOT":6,"SIGBUS":10,"SIGFPE":8,"SIGKILL":9,"SIGUSR1":30,"SIGSEGV":11,"SIGUSR2":31,"SIGPIPE":13,"SIGALRM":14,"SIGTERM":15,"SIGCHLD":20,"SIGCONT":19,"SIGSTOP":17,"SIGTSTP":18,"SIGTTIN":21,"SIGTTOU":22,"SIGURG":16,"SIGXCPU":24,"SIGXFSZ":25,"SIGVTALRM":26,"SIGPROF":27,"SIGWINCH":28,"SIGIO":23,"SIGSYS":12,"SSL_OP_ALL":2147486719,"SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION":262144,"SSL_OP_CIPHER_SERVER_PREFERENCE":4194304,"SSL_OP_CISCO_ANYCONNECT":32768,"SSL_OP_COOKIE_EXCHANGE":8192,"SSL_OP_CRYPTOPRO_TLSEXT_BUG":2147483648,"SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS":2048,"SSL_OP_EPHEMERAL_RSA":0,"SSL_OP_LEGACY_SERVER_CONNECT":4,"SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER":32,"SSL_OP_MICROSOFT_SESS_ID_BUG":1,"SSL_OP_MSIE_SSLV2_RSA_PADDING":0,"SSL_OP_NETSCAPE_CA_DN_BUG":536870912,"SSL_OP_NETSCAPE_CHALLENGE_BUG":2,"SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG":1073741824,"SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG":8,"SSL_OP_NO_COMPRESSION":131072,"SSL_OP_NO_QUERY_MTU":4096,"SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION":65536,"SSL_OP_NO_SSLv2":16777216,"SSL_OP_NO_SSLv3":33554432,"SSL_OP_NO_TICKET":16384,"SSL_OP_NO_TLSv1":67108864,"SSL_OP_NO_TLSv1_1":268435456,"SSL_OP_NO_TLSv1_2":134217728,"SSL_OP_PKCS1_CHECK_1":0,"SSL_OP_PKCS1_CHECK_2":0,"SSL_OP_SINGLE_DH_USE":1048576,"SSL_OP_SINGLE_ECDH_USE":524288,"SSL_OP_SSLEAY_080_CLIENT_DH_BUG":128,"SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG":0,"SSL_OP_TLS_BLOCK_PADDING_BUG":512,"SSL_OP_TLS_D5_BUG":256,"SSL_OP_TLS_ROLLBACK_BUG":8388608,"ENGINE_METHOD_DSA":2,"ENGINE_METHOD_DH":4,"ENGINE_METHOD_RAND":8,"ENGINE_METHOD_ECDH":16,"ENGINE_METHOD_ECDSA":32,"ENGINE_METHOD_CIPHERS":64,"ENGINE_METHOD_DIGESTS":128,"ENGINE_METHOD_STORE":256,"ENGINE_METHOD_PKEY_METHS":512,"ENGINE_METHOD_PKEY_ASN1_METHS":1024,"ENGINE_METHOD_ALL":65535,"ENGINE_METHOD_NONE":0,"DH_CHECK_P_NOT_SAFE_PRIME":2,"DH_CHECK_P_NOT_PRIME":1,"DH_UNABLE_TO_CHECK_GENERATOR":4,"DH_NOT_SUITABLE_GENERATOR":8,"NPN_ENABLED":1,"RSA_PKCS1_PADDING":1,"RSA_SSLV23_PADDING":2,"RSA_NO_PADDING":3,"RSA_PKCS1_OAEP_PADDING":4,"RSA_X931_PADDING":5,"RSA_PKCS1_PSS_PADDING":6,"POINT_CONVERSION_COMPRESSED":2,"POINT_CONVERSION_UNCOMPRESSED":4,"POINT_CONVERSION_HYBRID":6,"F_OK":0,"R_OK":4,"W_OK":2,"X_OK":1,"UV_UDP_REUSEADDR":4}')
+ }
+ },
+ e = {};
+
+ function r(n) {
+ var i = e[n];
+ if (void 0 !== i) return i.exports;
+ var o = e[n] = {
+ exports: {}
+ };
+ return t[n].call(o.exports, o, o.exports, r), o.exports
+ }
+ return r.g = function() {
+ if ("object" == typeof globalThis) return globalThis;
+ try {
+ return this || new Function("return this")()
+ } catch (t) {
+ if ("object" == typeof window) return window
+ }
+ }(), r(7033)
+})()));
\ No newline at end of file
diff --git a/欧歌/api/pako.min.js b/欧歌/api/pako.min.js
new file mode 100644
index 0000000..09522f2
--- /dev/null
+++ b/欧歌/api/pako.min.js
@@ -0,0 +1,1439 @@
+/*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */ ! function(t, e) {
+ "object" == typeof exports && "undefined" != typeof module ? e(exports) : "function" == typeof define && define.amd ? define(["exports"], e) : e((t = "undefined" != typeof globalThis ? globalThis : t || self).pako = {})
+}(this, (function(t) {
+ "use strict";
+
+ function e(t) {
+ let e = t.length;
+ for (; --e >= 0;) t[e] = 0
+ }
+ const a = 256,
+ i = 286,
+ n = 30,
+ s = 15,
+ r = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0]),
+ o = new Uint8Array([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13]),
+ l = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7]),
+ h = new Uint8Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]),
+ d = new Array(576);
+ e(d);
+ const _ = new Array(60);
+ e(_);
+ const f = new Array(512);
+ e(f);
+ const c = new Array(256);
+ e(c);
+ const u = new Array(29);
+ e(u);
+ const w = new Array(n);
+
+ function m(t, e, a, i, n) {
+ this.static_tree = t, this.extra_bits = e, this.extra_base = a, this.elems = i, this.max_length = n, this.has_stree = t && t.length
+ }
+ let b, g, p;
+
+ function k(t, e) {
+ this.dyn_tree = t, this.max_code = 0, this.stat_desc = e
+ }
+ e(w);
+ const v = t => t < 256 ? f[t] : f[256 + (t >>> 7)],
+ y = (t, e) => {
+ t.pending_buf[t.pending++] = 255 & e, t.pending_buf[t.pending++] = e >>> 8 & 255
+ },
+ x = (t, e, a) => {
+ t.bi_valid > 16 - a ? (t.bi_buf |= e << t.bi_valid & 65535, y(t, t.bi_buf), t.bi_buf = e >> 16 - t.bi_valid, t.bi_valid += a - 16) : (t.bi_buf |= e << t.bi_valid & 65535, t.bi_valid += a)
+ },
+ z = (t, e, a) => {
+ x(t, a[2 * e], a[2 * e + 1])
+ },
+ A = (t, e) => {
+ let a = 0;
+ do {
+ a |= 1 & t, t >>>= 1, a <<= 1
+ } while (--e > 0);
+ return a >>> 1
+ },
+ E = (t, e, a) => {
+ const i = new Array(16);
+ let n, r, o = 0;
+ for (n = 1; n <= s; n++) o = o + a[n - 1] << 1, i[n] = o;
+ for (r = 0; r <= e; r++) {
+ let e = t[2 * r + 1];
+ 0 !== e && (t[2 * r] = A(i[e]++, e))
+ }
+ },
+ R = t => {
+ let e;
+ for (e = 0; e < i; e++) t.dyn_ltree[2 * e] = 0;
+ for (e = 0; e < n; e++) t.dyn_dtree[2 * e] = 0;
+ for (e = 0; e < 19; e++) t.bl_tree[2 * e] = 0;
+ t.dyn_ltree[512] = 1, t.opt_len = t.static_len = 0, t.sym_next = t.matches = 0
+ },
+ Z = t => {
+ t.bi_valid > 8 ? y(t, t.bi_buf) : t.bi_valid > 0 && (t.pending_buf[t.pending++] = t.bi_buf), t.bi_buf = 0, t.bi_valid = 0
+ },
+ U = (t, e, a, i) => {
+ const n = 2 * e,
+ s = 2 * a;
+ return t[n] < t[s] || t[n] === t[s] && i[e] <= i[a]
+ },
+ S = (t, e, a) => {
+ const i = t.heap[a];
+ let n = a << 1;
+ for (; n <= t.heap_len && (n < t.heap_len && U(e, t.heap[n + 1], t.heap[n], t.depth) && n++, !U(e, i, t.heap[n], t.depth));) t.heap[a] = t.heap[n], a = n, n <<= 1;
+ t.heap[a] = i
+ },
+ D = (t, e, i) => {
+ let n, s, l, h, d = 0;
+ if (0 !== t.sym_next)
+ do {
+ n = 255 & t.pending_buf[t.sym_buf + d++], n += (255 & t.pending_buf[t.sym_buf + d++]) << 8, s = t.pending_buf[t.sym_buf + d++], 0 === n ? z(t, s, e) : (l = c[s], z(t, l + a + 1, e), h = r[l], 0 !== h && (s -= u[l], x(t, s, h)), n--, l = v(n), z(t, l, i), h = o[l], 0 !== h && (n -= w[l], x(t, n, h)))
+ } while (d < t.sym_next);
+ z(t, 256, e)
+ },
+ T = (t, e) => {
+ const a = e.dyn_tree,
+ i = e.stat_desc.static_tree,
+ n = e.stat_desc.has_stree,
+ r = e.stat_desc.elems;
+ let o, l, h, d = -1;
+ for (t.heap_len = 0, t.heap_max = 573, o = 0; o < r; o++) 0 !== a[2 * o] ? (t.heap[++t.heap_len] = d = o, t.depth[o] = 0) : a[2 * o + 1] = 0;
+ for (; t.heap_len < 2;) h = t.heap[++t.heap_len] = d < 2 ? ++d : 0, a[2 * h] = 1, t.depth[h] = 0, t.opt_len--, n && (t.static_len -= i[2 * h + 1]);
+ for (e.max_code = d, o = t.heap_len >> 1; o >= 1; o--) S(t, a, o);
+ h = r;
+ do {
+ o = t.heap[1], t.heap[1] = t.heap[t.heap_len--], S(t, a, 1), l = t.heap[1], t.heap[--t.heap_max] = o, t.heap[--t.heap_max] = l, a[2 * h] = a[2 * o] + a[2 * l], t.depth[h] = (t.depth[o] >= t.depth[l] ? t.depth[o] : t.depth[l]) + 1, a[2 * o + 1] = a[2 * l + 1] = h, t.heap[1] = h++, S(t, a, 1)
+ } while (t.heap_len >= 2);
+ t.heap[--t.heap_max] = t.heap[1], ((t, e) => {
+ const a = e.dyn_tree,
+ i = e.max_code,
+ n = e.stat_desc.static_tree,
+ r = e.stat_desc.has_stree,
+ o = e.stat_desc.extra_bits,
+ l = e.stat_desc.extra_base,
+ h = e.stat_desc.max_length;
+ let d, _, f, c, u, w, m = 0;
+ for (c = 0; c <= s; c++) t.bl_count[c] = 0;
+ for (a[2 * t.heap[t.heap_max] + 1] = 0, d = t.heap_max + 1; d < 573; d++) _ = t.heap[d], c = a[2 * a[2 * _ + 1] + 1] + 1, c > h && (c = h, m++), a[2 * _ + 1] = c, _ > i || (t.bl_count[c]++, u = 0, _ >= l && (u = o[_ - l]), w = a[2 * _], t.opt_len += w * (c + u), r && (t.static_len += w * (n[2 * _ + 1] + u)));
+ if (0 !== m) {
+ do {
+ for (c = h - 1; 0 === t.bl_count[c];) c--;
+ t.bl_count[c]--, t.bl_count[c + 1] += 2, t.bl_count[h]--, m -= 2
+ } while (m > 0);
+ for (c = h; 0 !== c; c--)
+ for (_ = t.bl_count[c]; 0 !== _;) f = t.heap[--d], f > i || (a[2 * f + 1] !== c && (t.opt_len += (c - a[2 * f + 1]) * a[2 * f], a[2 * f + 1] = c), _--)
+ }
+ })(t, e), E(a, d, t.bl_count)
+ },
+ O = (t, e, a) => {
+ let i, n, s = -1,
+ r = e[1],
+ o = 0,
+ l = 7,
+ h = 4;
+ for (0 === r && (l = 138, h = 3), e[2 * (a + 1) + 1] = 65535, i = 0; i <= a; i++) n = r, r = e[2 * (i + 1) + 1], ++o < l && n === r || (o < h ? t.bl_tree[2 * n] += o : 0 !== n ? (n !== s && t.bl_tree[2 * n]++, t.bl_tree[32]++) : o <= 10 ? t.bl_tree[34]++ : t.bl_tree[36]++, o = 0, s = n, 0 === r ? (l = 138, h = 3) : n === r ? (l = 6, h = 3) : (l = 7, h = 4))
+ },
+ I = (t, e, a) => {
+ let i, n, s = -1,
+ r = e[1],
+ o = 0,
+ l = 7,
+ h = 4;
+ for (0 === r && (l = 138, h = 3), i = 0; i <= a; i++)
+ if (n = r, r = e[2 * (i + 1) + 1], !(++o < l && n === r)) {
+ if (o < h)
+ do {
+ z(t, n, t.bl_tree)
+ } while (0 != --o);
+ else 0 !== n ? (n !== s && (z(t, n, t.bl_tree), o--), z(t, 16, t.bl_tree), x(t, o - 3, 2)) : o <= 10 ? (z(t, 17, t.bl_tree), x(t, o - 3, 3)) : (z(t, 18, t.bl_tree), x(t, o - 11, 7));
+ o = 0, s = n, 0 === r ? (l = 138, h = 3) : n === r ? (l = 6, h = 3) : (l = 7, h = 4)
+ }
+ };
+ let F = !1;
+ const L = (t, e, a, i) => {
+ x(t, 0 + (i ? 1 : 0), 3), Z(t), y(t, a), y(t, ~a), a && t.pending_buf.set(t.window.subarray(e, e + a), t.pending), t.pending += a
+ };
+ var N = (t, e, i, n) => {
+ let s, r, o = 0;
+ t.level > 0 ? (2 === t.strm.data_type && (t.strm.data_type = (t => {
+ let e, i = 4093624447;
+ for (e = 0; e <= 31; e++, i >>>= 1)
+ if (1 & i && 0 !== t.dyn_ltree[2 * e]) return 0;
+ if (0 !== t.dyn_ltree[18] || 0 !== t.dyn_ltree[20] || 0 !== t.dyn_ltree[26]) return 1;
+ for (e = 32; e < a; e++)
+ if (0 !== t.dyn_ltree[2 * e]) return 1;
+ return 0
+ })(t)), T(t, t.l_desc), T(t, t.d_desc), o = (t => {
+ let e;
+ for (O(t, t.dyn_ltree, t.l_desc.max_code), O(t, t.dyn_dtree, t.d_desc.max_code), T(t, t.bl_desc), e = 18; e >= 3 && 0 === t.bl_tree[2 * h[e] + 1]; e--);
+ return t.opt_len += 3 * (e + 1) + 5 + 5 + 4, e
+ })(t), s = t.opt_len + 3 + 7 >>> 3, r = t.static_len + 3 + 7 >>> 3, r <= s && (s = r)) : s = r = i + 5, i + 4 <= s && -1 !== e ? L(t, e, i, n) : 4 === t.strategy || r === s ? (x(t, 2 + (n ? 1 : 0), 3), D(t, d, _)) : (x(t, 4 + (n ? 1 : 0), 3), ((t, e, a, i) => {
+ let n;
+ for (x(t, e - 257, 5), x(t, a - 1, 5), x(t, i - 4, 4), n = 0; n < i; n++) x(t, t.bl_tree[2 * h[n] + 1], 3);
+ I(t, t.dyn_ltree, e - 1), I(t, t.dyn_dtree, a - 1)
+ })(t, t.l_desc.max_code + 1, t.d_desc.max_code + 1, o + 1), D(t, t.dyn_ltree, t.dyn_dtree)), R(t), n && Z(t)
+ },
+ B = {
+ _tr_init: t => {
+ F || ((() => {
+ let t, e, a, h, k;
+ const v = new Array(16);
+ for (a = 0, h = 0; h < 28; h++)
+ for (u[h] = a, t = 0; t < 1 << r[h]; t++) c[a++] = h;
+ for (c[a - 1] = h, k = 0, h = 0; h < 16; h++)
+ for (w[h] = k, t = 0; t < 1 << o[h]; t++) f[k++] = h;
+ for (k >>= 7; h < n; h++)
+ for (w[h] = k << 7, t = 0; t < 1 << o[h] - 7; t++) f[256 + k++] = h;
+ for (e = 0; e <= s; e++) v[e] = 0;
+ for (t = 0; t <= 143;) d[2 * t + 1] = 8, t++, v[8]++;
+ for (; t <= 255;) d[2 * t + 1] = 9, t++, v[9]++;
+ for (; t <= 279;) d[2 * t + 1] = 7, t++, v[7]++;
+ for (; t <= 287;) d[2 * t + 1] = 8, t++, v[8]++;
+ for (E(d, 287, v), t = 0; t < n; t++) _[2 * t + 1] = 5, _[2 * t] = A(t, 5);
+ b = new m(d, r, 257, i, s), g = new m(_, o, 0, n, s), p = new m(new Array(0), l, 0, 19, 7)
+ })(), F = !0), t.l_desc = new k(t.dyn_ltree, b), t.d_desc = new k(t.dyn_dtree, g), t.bl_desc = new k(t.bl_tree, p), t.bi_buf = 0, t.bi_valid = 0, R(t)
+ },
+ _tr_stored_block: L,
+ _tr_flush_block: N,
+ _tr_tally: (t, e, i) => (t.pending_buf[t.sym_buf + t.sym_next++] = e, t.pending_buf[t.sym_buf + t.sym_next++] = e >> 8, t.pending_buf[t.sym_buf + t.sym_next++] = i, 0 === e ? t.dyn_ltree[2 * i]++ : (t.matches++, e--, t.dyn_ltree[2 * (c[i] + a + 1)]++, t.dyn_dtree[2 * v(e)]++), t.sym_next === t.sym_end),
+ _tr_align: t => {
+ x(t, 2, 3), z(t, 256, d), (t => {
+ 16 === t.bi_valid ? (y(t, t.bi_buf), t.bi_buf = 0, t.bi_valid = 0) : t.bi_valid >= 8 && (t.pending_buf[t.pending++] = 255 & t.bi_buf, t.bi_buf >>= 8, t.bi_valid -= 8)
+ })(t)
+ }
+ };
+ var C = (t, e, a, i) => {
+ let n = 65535 & t | 0,
+ s = t >>> 16 & 65535 | 0,
+ r = 0;
+ for (; 0 !== a;) {
+ r = a > 2e3 ? 2e3 : a, a -= r;
+ do {
+ n = n + e[i++] | 0, s = s + n | 0
+ } while (--r);
+ n %= 65521, s %= 65521
+ }
+ return n | s << 16 | 0
+ };
+ const M = new Uint32Array((() => {
+ let t, e = [];
+ for (var a = 0; a < 256; a++) {
+ t = a;
+ for (var i = 0; i < 8; i++) t = 1 & t ? 3988292384 ^ t >>> 1 : t >>> 1;
+ e[a] = t
+ }
+ return e
+ })());
+ var H = (t, e, a, i) => {
+ const n = M,
+ s = i + a;
+ t ^= -1;
+ for (let a = i; a < s; a++) t = t >>> 8 ^ n[255 & (t ^ e[a])];
+ return -1 ^ t
+ },
+ j = {
+ 2: "need dictionary",
+ 1: "stream end",
+ 0: "",
+ "-1": "file error",
+ "-2": "stream error",
+ "-3": "data error",
+ "-4": "insufficient memory",
+ "-5": "buffer error",
+ "-6": "incompatible version"
+ },
+ K = {
+ Z_NO_FLUSH: 0,
+ Z_PARTIAL_FLUSH: 1,
+ Z_SYNC_FLUSH: 2,
+ Z_FULL_FLUSH: 3,
+ Z_FINISH: 4,
+ Z_BLOCK: 5,
+ Z_TREES: 6,
+ Z_OK: 0,
+ Z_STREAM_END: 1,
+ Z_NEED_DICT: 2,
+ Z_ERRNO: -1,
+ Z_STREAM_ERROR: -2,
+ Z_DATA_ERROR: -3,
+ Z_MEM_ERROR: -4,
+ Z_BUF_ERROR: -5,
+ Z_NO_COMPRESSION: 0,
+ Z_BEST_SPEED: 1,
+ Z_BEST_COMPRESSION: 9,
+ Z_DEFAULT_COMPRESSION: -1,
+ Z_FILTERED: 1,
+ Z_HUFFMAN_ONLY: 2,
+ Z_RLE: 3,
+ Z_FIXED: 4,
+ Z_DEFAULT_STRATEGY: 0,
+ Z_BINARY: 0,
+ Z_TEXT: 1,
+ Z_UNKNOWN: 2,
+ Z_DEFLATED: 8
+ };
+ const {
+ _tr_init: P,
+ _tr_stored_block: Y,
+ _tr_flush_block: G,
+ _tr_tally: X,
+ _tr_align: W
+ } = B, {
+ Z_NO_FLUSH: q,
+ Z_PARTIAL_FLUSH: J,
+ Z_FULL_FLUSH: Q,
+ Z_FINISH: V,
+ Z_BLOCK: $,
+ Z_OK: tt,
+ Z_STREAM_END: et,
+ Z_STREAM_ERROR: at,
+ Z_DATA_ERROR: it,
+ Z_BUF_ERROR: nt,
+ Z_DEFAULT_COMPRESSION: st,
+ Z_FILTERED: rt,
+ Z_HUFFMAN_ONLY: ot,
+ Z_RLE: lt,
+ Z_FIXED: ht,
+ Z_DEFAULT_STRATEGY: dt,
+ Z_UNKNOWN: _t,
+ Z_DEFLATED: ft
+ } = K, ct = 258, ut = 262, wt = 42, mt = 113, bt = 666, gt = (t, e) => (t.msg = j[e], e), pt = t => 2 * t - (t > 4 ? 9 : 0), kt = t => {
+ let e = t.length;
+ for (; --e >= 0;) t[e] = 0
+ }, vt = t => {
+ let e, a, i, n = t.w_size;
+ e = t.hash_size, i = e;
+ do {
+ a = t.head[--i], t.head[i] = a >= n ? a - n : 0
+ } while (--e);
+ e = n, i = e;
+ do {
+ a = t.prev[--i], t.prev[i] = a >= n ? a - n : 0
+ } while (--e)
+ };
+ let yt = (t, e, a) => (e << t.hash_shift ^ a) & t.hash_mask;
+ const xt = t => {
+ const e = t.state;
+ let a = e.pending;
+ a > t.avail_out && (a = t.avail_out), 0 !== a && (t.output.set(e.pending_buf.subarray(e.pending_out, e.pending_out + a), t.next_out), t.next_out += a, e.pending_out += a, t.total_out += a, t.avail_out -= a, e.pending -= a, 0 === e.pending && (e.pending_out = 0))
+ },
+ zt = (t, e) => {
+ G(t, t.block_start >= 0 ? t.block_start : -1, t.strstart - t.block_start, e), t.block_start = t.strstart, xt(t.strm)
+ },
+ At = (t, e) => {
+ t.pending_buf[t.pending++] = e
+ },
+ Et = (t, e) => {
+ t.pending_buf[t.pending++] = e >>> 8 & 255, t.pending_buf[t.pending++] = 255 & e
+ },
+ Rt = (t, e, a, i) => {
+ let n = t.avail_in;
+ return n > i && (n = i), 0 === n ? 0 : (t.avail_in -= n, e.set(t.input.subarray(t.next_in, t.next_in + n), a), 1 === t.state.wrap ? t.adler = C(t.adler, e, n, a) : 2 === t.state.wrap && (t.adler = H(t.adler, e, n, a)), t.next_in += n, t.total_in += n, n)
+ },
+ Zt = (t, e) => {
+ let a, i, n = t.max_chain_length,
+ s = t.strstart,
+ r = t.prev_length,
+ o = t.nice_match;
+ const l = t.strstart > t.w_size - ut ? t.strstart - (t.w_size - ut) : 0,
+ h = t.window,
+ d = t.w_mask,
+ _ = t.prev,
+ f = t.strstart + ct;
+ let c = h[s + r - 1],
+ u = h[s + r];
+ t.prev_length >= t.good_match && (n >>= 2), o > t.lookahead && (o = t.lookahead);
+ do {
+ if (a = e, h[a + r] === u && h[a + r - 1] === c && h[a] === h[s] && h[++a] === h[s + 1]) {
+ s += 2, a++;
+ do {} while (h[++s] === h[++a] && h[++s] === h[++a] && h[++s] === h[++a] && h[++s] === h[++a] && h[++s] === h[++a] && h[++s] === h[++a] && h[++s] === h[++a] && h[++s] === h[++a] && s < f);
+ if (i = ct - (f - s), s = f - ct, i > r) {
+ if (t.match_start = e, r = i, i >= o) break;
+ c = h[s + r - 1], u = h[s + r]
+ }
+ }
+ } while ((e = _[e & d]) > l && 0 != --n);
+ return r <= t.lookahead ? r : t.lookahead
+ },
+ Ut = t => {
+ const e = t.w_size;
+ let a, i, n;
+ do {
+ if (i = t.window_size - t.lookahead - t.strstart, t.strstart >= e + (e - ut) && (t.window.set(t.window.subarray(e, e + e - i), 0), t.match_start -= e, t.strstart -= e, t.block_start -= e, t.insert > t.strstart && (t.insert = t.strstart), vt(t), i += e), 0 === t.strm.avail_in) break;
+ if (a = Rt(t.strm, t.window, t.strstart + t.lookahead, i), t.lookahead += a, t.lookahead + t.insert >= 3)
+ for (n = t.strstart - t.insert, t.ins_h = t.window[n], t.ins_h = yt(t, t.ins_h, t.window[n + 1]); t.insert && (t.ins_h = yt(t, t.ins_h, t.window[n + 3 - 1]), t.prev[n & t.w_mask] = t.head[t.ins_h], t.head[t.ins_h] = n, n++, t.insert--, !(t.lookahead + t.insert < 3)););
+ } while (t.lookahead < ut && 0 !== t.strm.avail_in)
+ },
+ St = (t, e) => {
+ let a, i, n, s = t.pending_buf_size - 5 > t.w_size ? t.w_size : t.pending_buf_size - 5,
+ r = 0,
+ o = t.strm.avail_in;
+ do {
+ if (a = 65535, n = t.bi_valid + 42 >> 3, t.strm.avail_out < n) break;
+ if (n = t.strm.avail_out - n, i = t.strstart - t.block_start, a > i + t.strm.avail_in && (a = i + t.strm.avail_in), a > n && (a = n), a < s && (0 === a && e !== V || e === q || a !== i + t.strm.avail_in)) break;
+ r = e === V && a === i + t.strm.avail_in ? 1 : 0, Y(t, 0, 0, r), t.pending_buf[t.pending - 4] = a, t.pending_buf[t.pending - 3] = a >> 8, t.pending_buf[t.pending - 2] = ~a, t.pending_buf[t.pending - 1] = ~a >> 8, xt(t.strm), i && (i > a && (i = a), t.strm.output.set(t.window.subarray(t.block_start, t.block_start + i), t.strm.next_out), t.strm.next_out += i, t.strm.avail_out -= i, t.strm.total_out += i, t.block_start += i, a -= i), a && (Rt(t.strm, t.strm.output, t.strm.next_out, a), t.strm.next_out += a, t.strm.avail_out -= a, t.strm.total_out += a)
+ } while (0 === r);
+ return o -= t.strm.avail_in, o && (o >= t.w_size ? (t.matches = 2, t.window.set(t.strm.input.subarray(t.strm.next_in - t.w_size, t.strm.next_in), 0), t.strstart = t.w_size, t.insert = t.strstart) : (t.window_size - t.strstart <= o && (t.strstart -= t.w_size, t.window.set(t.window.subarray(t.w_size, t.w_size + t.strstart), 0), t.matches < 2 && t.matches++, t.insert > t.strstart && (t.insert = t.strstart)), t.window.set(t.strm.input.subarray(t.strm.next_in - o, t.strm.next_in), t.strstart), t.strstart += o, t.insert += o > t.w_size - t.insert ? t.w_size - t.insert : o), t.block_start = t.strstart), t.high_water < t.strstart && (t.high_water = t.strstart), r ? 4 : e !== q && e !== V && 0 === t.strm.avail_in && t.strstart === t.block_start ? 2 : (n = t.window_size - t.strstart, t.strm.avail_in > n && t.block_start >= t.w_size && (t.block_start -= t.w_size, t.strstart -= t.w_size, t.window.set(t.window.subarray(t.w_size, t.w_size + t.strstart), 0), t.matches < 2 && t.matches++, n += t.w_size, t.insert > t.strstart && (t.insert = t.strstart)), n > t.strm.avail_in && (n = t.strm.avail_in), n && (Rt(t.strm, t.window, t.strstart, n), t.strstart += n, t.insert += n > t.w_size - t.insert ? t.w_size - t.insert : n), t.high_water < t.strstart && (t.high_water = t.strstart), n = t.bi_valid + 42 >> 3, n = t.pending_buf_size - n > 65535 ? 65535 : t.pending_buf_size - n, s = n > t.w_size ? t.w_size : n, i = t.strstart - t.block_start, (i >= s || (i || e === V) && e !== q && 0 === t.strm.avail_in && i <= n) && (a = i > n ? n : i, r = e === V && 0 === t.strm.avail_in && a === i ? 1 : 0, Y(t, t.block_start, a, r), t.block_start += a, xt(t.strm)), r ? 3 : 1)
+ },
+ Dt = (t, e) => {
+ let a, i;
+ for (;;) {
+ if (t.lookahead < ut) {
+ if (Ut(t), t.lookahead < ut && e === q) return 1;
+ if (0 === t.lookahead) break
+ }
+ if (a = 0, t.lookahead >= 3 && (t.ins_h = yt(t, t.ins_h, t.window[t.strstart + 3 - 1]), a = t.prev[t.strstart & t.w_mask] = t.head[t.ins_h], t.head[t.ins_h] = t.strstart), 0 !== a && t.strstart - a <= t.w_size - ut && (t.match_length = Zt(t, a)), t.match_length >= 3)
+ if (i = X(t, t.strstart - t.match_start, t.match_length - 3), t.lookahead -= t.match_length, t.match_length <= t.max_lazy_match && t.lookahead >= 3) {
+ t.match_length--;
+ do {
+ t.strstart++, t.ins_h = yt(t, t.ins_h, t.window[t.strstart + 3 - 1]), a = t.prev[t.strstart & t.w_mask] = t.head[t.ins_h], t.head[t.ins_h] = t.strstart
+ } while (0 != --t.match_length);
+ t.strstart++
+ } else t.strstart += t.match_length, t.match_length = 0, t.ins_h = t.window[t.strstart], t.ins_h = yt(t, t.ins_h, t.window[t.strstart + 1]);
+ else i = X(t, 0, t.window[t.strstart]), t.lookahead--, t.strstart++;
+ if (i && (zt(t, !1), 0 === t.strm.avail_out)) return 1
+ }
+ return t.insert = t.strstart < 2 ? t.strstart : 2, e === V ? (zt(t, !0), 0 === t.strm.avail_out ? 3 : 4) : t.sym_next && (zt(t, !1), 0 === t.strm.avail_out) ? 1 : 2
+ },
+ Tt = (t, e) => {
+ let a, i, n;
+ for (;;) {
+ if (t.lookahead < ut) {
+ if (Ut(t), t.lookahead < ut && e === q) return 1;
+ if (0 === t.lookahead) break
+ }
+ if (a = 0, t.lookahead >= 3 && (t.ins_h = yt(t, t.ins_h, t.window[t.strstart + 3 - 1]), a = t.prev[t.strstart & t.w_mask] = t.head[t.ins_h], t.head[t.ins_h] = t.strstart), t.prev_length = t.match_length, t.prev_match = t.match_start, t.match_length = 2, 0 !== a && t.prev_length < t.max_lazy_match && t.strstart - a <= t.w_size - ut && (t.match_length = Zt(t, a), t.match_length <= 5 && (t.strategy === rt || 3 === t.match_length && t.strstart - t.match_start > 4096) && (t.match_length = 2)), t.prev_length >= 3 && t.match_length <= t.prev_length) {
+ n = t.strstart + t.lookahead - 3, i = X(t, t.strstart - 1 - t.prev_match, t.prev_length - 3), t.lookahead -= t.prev_length - 1, t.prev_length -= 2;
+ do {
+ ++t.strstart <= n && (t.ins_h = yt(t, t.ins_h, t.window[t.strstart + 3 - 1]), a = t.prev[t.strstart & t.w_mask] = t.head[t.ins_h], t.head[t.ins_h] = t.strstart)
+ } while (0 != --t.prev_length);
+ if (t.match_available = 0, t.match_length = 2, t.strstart++, i && (zt(t, !1), 0 === t.strm.avail_out)) return 1
+ } else if (t.match_available) {
+ if (i = X(t, 0, t.window[t.strstart - 1]), i && zt(t, !1), t.strstart++, t.lookahead--, 0 === t.strm.avail_out) return 1
+ } else t.match_available = 1, t.strstart++, t.lookahead--
+ }
+ return t.match_available && (i = X(t, 0, t.window[t.strstart - 1]), t.match_available = 0), t.insert = t.strstart < 2 ? t.strstart : 2, e === V ? (zt(t, !0), 0 === t.strm.avail_out ? 3 : 4) : t.sym_next && (zt(t, !1), 0 === t.strm.avail_out) ? 1 : 2
+ };
+
+ function Ot(t, e, a, i, n) {
+ this.good_length = t, this.max_lazy = e, this.nice_length = a, this.max_chain = i, this.func = n
+ }
+ const It = [new Ot(0, 0, 0, 0, St), new Ot(4, 4, 8, 4, Dt), new Ot(4, 5, 16, 8, Dt), new Ot(4, 6, 32, 32, Dt), new Ot(4, 4, 16, 16, Tt), new Ot(8, 16, 32, 32, Tt), new Ot(8, 16, 128, 128, Tt), new Ot(8, 32, 128, 256, Tt), new Ot(32, 128, 258, 1024, Tt), new Ot(32, 258, 258, 4096, Tt)];
+
+ function Ft() {
+ this.strm = null, this.status = 0, this.pending_buf = null, this.pending_buf_size = 0, this.pending_out = 0, this.pending = 0, this.wrap = 0, this.gzhead = null, this.gzindex = 0, this.method = ft, this.last_flush = -1, this.w_size = 0, this.w_bits = 0, this.w_mask = 0, this.window = null, this.window_size = 0, this.prev = null, this.head = null, this.ins_h = 0, this.hash_size = 0, this.hash_bits = 0, this.hash_mask = 0, this.hash_shift = 0, this.block_start = 0, this.match_length = 0, this.prev_match = 0, this.match_available = 0, this.strstart = 0, this.match_start = 0, this.lookahead = 0, this.prev_length = 0, this.max_chain_length = 0, this.max_lazy_match = 0, this.level = 0, this.strategy = 0, this.good_match = 0, this.nice_match = 0, this.dyn_ltree = new Uint16Array(1146), this.dyn_dtree = new Uint16Array(122), this.bl_tree = new Uint16Array(78), kt(this.dyn_ltree), kt(this.dyn_dtree), kt(this.bl_tree), this.l_desc = null, this.d_desc = null, this.bl_desc = null, this.bl_count = new Uint16Array(16), this.heap = new Uint16Array(573), kt(this.heap), this.heap_len = 0, this.heap_max = 0, this.depth = new Uint16Array(573), kt(this.depth), this.sym_buf = 0, this.lit_bufsize = 0, this.sym_next = 0, this.sym_end = 0, this.opt_len = 0, this.static_len = 0, this.matches = 0, this.insert = 0, this.bi_buf = 0, this.bi_valid = 0
+ }
+ const Lt = t => {
+ if (!t) return 1;
+ const e = t.state;
+ return !e || e.strm !== t || e.status !== wt && 57 !== e.status && 69 !== e.status && 73 !== e.status && 91 !== e.status && 103 !== e.status && e.status !== mt && e.status !== bt ? 1 : 0
+ },
+ Nt = t => {
+ if (Lt(t)) return gt(t, at);
+ t.total_in = t.total_out = 0, t.data_type = _t;
+ const e = t.state;
+ return e.pending = 0, e.pending_out = 0, e.wrap < 0 && (e.wrap = -e.wrap), e.status = 2 === e.wrap ? 57 : e.wrap ? wt : mt, t.adler = 2 === e.wrap ? 0 : 1, e.last_flush = -2, P(e), tt
+ },
+ Bt = t => {
+ const e = Nt(t);
+ var a;
+ return e === tt && ((a = t.state).window_size = 2 * a.w_size, kt(a.head), a.max_lazy_match = It[a.level].max_lazy, a.good_match = It[a.level].good_length, a.nice_match = It[a.level].nice_length, a.max_chain_length = It[a.level].max_chain, a.strstart = 0, a.block_start = 0, a.lookahead = 0, a.insert = 0, a.match_length = a.prev_length = 2, a.match_available = 0, a.ins_h = 0), e
+ },
+ Ct = (t, e, a, i, n, s) => {
+ if (!t) return at;
+ let r = 1;
+ if (e === st && (e = 6), i < 0 ? (r = 0, i = -i) : i > 15 && (r = 2, i -= 16), n < 1 || n > 9 || a !== ft || i < 8 || i > 15 || e < 0 || e > 9 || s < 0 || s > ht || 8 === i && 1 !== r) return gt(t, at);
+ 8 === i && (i = 9);
+ const o = new Ft;
+ return t.state = o, o.strm = t, o.status = wt, o.wrap = r, o.gzhead = null, o.w_bits = i, o.w_size = 1 << o.w_bits, o.w_mask = o.w_size - 1, o.hash_bits = n + 7, o.hash_size = 1 << o.hash_bits, o.hash_mask = o.hash_size - 1, o.hash_shift = ~~((o.hash_bits + 3 - 1) / 3), o.window = new Uint8Array(2 * o.w_size), o.head = new Uint16Array(o.hash_size), o.prev = new Uint16Array(o.w_size), o.lit_bufsize = 1 << n + 6, o.pending_buf_size = 4 * o.lit_bufsize, o.pending_buf = new Uint8Array(o.pending_buf_size), o.sym_buf = o.lit_bufsize, o.sym_end = 3 * (o.lit_bufsize - 1), o.level = e, o.strategy = s, o.method = a, Bt(t)
+ };
+ var Mt = {
+ deflateInit: (t, e) => Ct(t, e, ft, 15, 8, dt),
+ deflateInit2: Ct,
+ deflateReset: Bt,
+ deflateResetKeep: Nt,
+ deflateSetHeader: (t, e) => Lt(t) || 2 !== t.state.wrap ? at : (t.state.gzhead = e, tt),
+ deflate: (t, e) => {
+ if (Lt(t) || e > $ || e < 0) return t ? gt(t, at) : at;
+ const a = t.state;
+ if (!t.output || 0 !== t.avail_in && !t.input || a.status === bt && e !== V) return gt(t, 0 === t.avail_out ? nt : at);
+ const i = a.last_flush;
+ if (a.last_flush = e, 0 !== a.pending) {
+ if (xt(t), 0 === t.avail_out) return a.last_flush = -1, tt
+ } else if (0 === t.avail_in && pt(e) <= pt(i) && e !== V) return gt(t, nt);
+ if (a.status === bt && 0 !== t.avail_in) return gt(t, nt);
+ if (a.status === wt && 0 === a.wrap && (a.status = mt), a.status === wt) {
+ let e = ft + (a.w_bits - 8 << 4) << 8,
+ i = -1;
+ if (i = a.strategy >= ot || a.level < 2 ? 0 : a.level < 6 ? 1 : 6 === a.level ? 2 : 3, e |= i << 6, 0 !== a.strstart && (e |= 32), e += 31 - e % 31, Et(a, e), 0 !== a.strstart && (Et(a, t.adler >>> 16), Et(a, 65535 & t.adler)), t.adler = 1, a.status = mt, xt(t), 0 !== a.pending) return a.last_flush = -1, tt
+ }
+ if (57 === a.status)
+ if (t.adler = 0, At(a, 31), At(a, 139), At(a, 8), a.gzhead) At(a, (a.gzhead.text ? 1 : 0) + (a.gzhead.hcrc ? 2 : 0) + (a.gzhead.extra ? 4 : 0) + (a.gzhead.name ? 8 : 0) + (a.gzhead.comment ? 16 : 0)), At(a, 255 & a.gzhead.time), At(a, a.gzhead.time >> 8 & 255), At(a, a.gzhead.time >> 16 & 255), At(a, a.gzhead.time >> 24 & 255), At(a, 9 === a.level ? 2 : a.strategy >= ot || a.level < 2 ? 4 : 0), At(a, 255 & a.gzhead.os), a.gzhead.extra && a.gzhead.extra.length && (At(a, 255 & a.gzhead.extra.length), At(a, a.gzhead.extra.length >> 8 & 255)), a.gzhead.hcrc && (t.adler = H(t.adler, a.pending_buf, a.pending, 0)), a.gzindex = 0, a.status = 69;
+ else if (At(a, 0), At(a, 0), At(a, 0), At(a, 0), At(a, 0), At(a, 9 === a.level ? 2 : a.strategy >= ot || a.level < 2 ? 4 : 0), At(a, 3), a.status = mt, xt(t), 0 !== a.pending) return a.last_flush = -1, tt;
+ if (69 === a.status) {
+ if (a.gzhead.extra) {
+ let e = a.pending,
+ i = (65535 & a.gzhead.extra.length) - a.gzindex;
+ for (; a.pending + i > a.pending_buf_size;) {
+ let n = a.pending_buf_size - a.pending;
+ if (a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex, a.gzindex + n), a.pending), a.pending = a.pending_buf_size, a.gzhead.hcrc && a.pending > e && (t.adler = H(t.adler, a.pending_buf, a.pending - e, e)), a.gzindex += n, xt(t), 0 !== a.pending) return a.last_flush = -1, tt;
+ e = 0, i -= n
+ }
+ let n = new Uint8Array(a.gzhead.extra);
+ a.pending_buf.set(n.subarray(a.gzindex, a.gzindex + i), a.pending), a.pending += i, a.gzhead.hcrc && a.pending > e && (t.adler = H(t.adler, a.pending_buf, a.pending - e, e)), a.gzindex = 0
+ }
+ a.status = 73
+ }
+ if (73 === a.status) {
+ if (a.gzhead.name) {
+ let e, i = a.pending;
+ do {
+ if (a.pending === a.pending_buf_size) {
+ if (a.gzhead.hcrc && a.pending > i && (t.adler = H(t.adler, a.pending_buf, a.pending - i, i)), xt(t), 0 !== a.pending) return a.last_flush = -1, tt;
+ i = 0
+ }
+ e = a.gzindex < a.gzhead.name.length ? 255 & a.gzhead.name.charCodeAt(a.gzindex++) : 0, At(a, e)
+ } while (0 !== e);
+ a.gzhead.hcrc && a.pending > i && (t.adler = H(t.adler, a.pending_buf, a.pending - i, i)), a.gzindex = 0
+ }
+ a.status = 91
+ }
+ if (91 === a.status) {
+ if (a.gzhead.comment) {
+ let e, i = a.pending;
+ do {
+ if (a.pending === a.pending_buf_size) {
+ if (a.gzhead.hcrc && a.pending > i && (t.adler = H(t.adler, a.pending_buf, a.pending - i, i)), xt(t), 0 !== a.pending) return a.last_flush = -1, tt;
+ i = 0
+ }
+ e = a.gzindex < a.gzhead.comment.length ? 255 & a.gzhead.comment.charCodeAt(a.gzindex++) : 0, At(a, e)
+ } while (0 !== e);
+ a.gzhead.hcrc && a.pending > i && (t.adler = H(t.adler, a.pending_buf, a.pending - i, i))
+ }
+ a.status = 103
+ }
+ if (103 === a.status) {
+ if (a.gzhead.hcrc) {
+ if (a.pending + 2 > a.pending_buf_size && (xt(t), 0 !== a.pending)) return a.last_flush = -1, tt;
+ At(a, 255 & t.adler), At(a, t.adler >> 8 & 255), t.adler = 0
+ }
+ if (a.status = mt, xt(t), 0 !== a.pending) return a.last_flush = -1, tt
+ }
+ if (0 !== t.avail_in || 0 !== a.lookahead || e !== q && a.status !== bt) {
+ let i = 0 === a.level ? St(a, e) : a.strategy === ot ? ((t, e) => {
+ let a;
+ for (;;) {
+ if (0 === t.lookahead && (Ut(t), 0 === t.lookahead)) {
+ if (e === q) return 1;
+ break
+ }
+ if (t.match_length = 0, a = X(t, 0, t.window[t.strstart]), t.lookahead--, t.strstart++, a && (zt(t, !1), 0 === t.strm.avail_out)) return 1
+ }
+ return t.insert = 0, e === V ? (zt(t, !0), 0 === t.strm.avail_out ? 3 : 4) : t.sym_next && (zt(t, !1), 0 === t.strm.avail_out) ? 1 : 2
+ })(a, e) : a.strategy === lt ? ((t, e) => {
+ let a, i, n, s;
+ const r = t.window;
+ for (;;) {
+ if (t.lookahead <= ct) {
+ if (Ut(t), t.lookahead <= ct && e === q) return 1;
+ if (0 === t.lookahead) break
+ }
+ if (t.match_length = 0, t.lookahead >= 3 && t.strstart > 0 && (n = t.strstart - 1, i = r[n], i === r[++n] && i === r[++n] && i === r[++n])) {
+ s = t.strstart + ct;
+ do {} while (i === r[++n] && i === r[++n] && i === r[++n] && i === r[++n] && i === r[++n] && i === r[++n] && i === r[++n] && i === r[++n] && n < s);
+ t.match_length = ct - (s - n), t.match_length > t.lookahead && (t.match_length = t.lookahead)
+ }
+ if (t.match_length >= 3 ? (a = X(t, 1, t.match_length - 3), t.lookahead -= t.match_length, t.strstart += t.match_length, t.match_length = 0) : (a = X(t, 0, t.window[t.strstart]), t.lookahead--, t.strstart++), a && (zt(t, !1), 0 === t.strm.avail_out)) return 1
+ }
+ return t.insert = 0, e === V ? (zt(t, !0), 0 === t.strm.avail_out ? 3 : 4) : t.sym_next && (zt(t, !1), 0 === t.strm.avail_out) ? 1 : 2
+ })(a, e) : It[a.level].func(a, e);
+ if (3 !== i && 4 !== i || (a.status = bt), 1 === i || 3 === i) return 0 === t.avail_out && (a.last_flush = -1), tt;
+ if (2 === i && (e === J ? W(a) : e !== $ && (Y(a, 0, 0, !1), e === Q && (kt(a.head), 0 === a.lookahead && (a.strstart = 0, a.block_start = 0, a.insert = 0))), xt(t), 0 === t.avail_out)) return a.last_flush = -1, tt
+ }
+ return e !== V ? tt : a.wrap <= 0 ? et : (2 === a.wrap ? (At(a, 255 & t.adler), At(a, t.adler >> 8 & 255), At(a, t.adler >> 16 & 255), At(a, t.adler >> 24 & 255), At(a, 255 & t.total_in), At(a, t.total_in >> 8 & 255), At(a, t.total_in >> 16 & 255), At(a, t.total_in >> 24 & 255)) : (Et(a, t.adler >>> 16), Et(a, 65535 & t.adler)), xt(t), a.wrap > 0 && (a.wrap = -a.wrap), 0 !== a.pending ? tt : et)
+ },
+ deflateEnd: t => {
+ if (Lt(t)) return at;
+ const e = t.state.status;
+ return t.state = null, e === mt ? gt(t, it) : tt
+ },
+ deflateSetDictionary: (t, e) => {
+ let a = e.length;
+ if (Lt(t)) return at;
+ const i = t.state,
+ n = i.wrap;
+ if (2 === n || 1 === n && i.status !== wt || i.lookahead) return at;
+ if (1 === n && (t.adler = C(t.adler, e, a, 0)), i.wrap = 0, a >= i.w_size) {
+ 0 === n && (kt(i.head), i.strstart = 0, i.block_start = 0, i.insert = 0);
+ let t = new Uint8Array(i.w_size);
+ t.set(e.subarray(a - i.w_size, a), 0), e = t, a = i.w_size
+ }
+ const s = t.avail_in,
+ r = t.next_in,
+ o = t.input;
+ for (t.avail_in = a, t.next_in = 0, t.input = e, Ut(i); i.lookahead >= 3;) {
+ let t = i.strstart,
+ e = i.lookahead - 2;
+ do {
+ i.ins_h = yt(i, i.ins_h, i.window[t + 3 - 1]), i.prev[t & i.w_mask] = i.head[i.ins_h], i.head[i.ins_h] = t, t++
+ } while (--e);
+ i.strstart = t, i.lookahead = 2, Ut(i)
+ }
+ return i.strstart += i.lookahead, i.block_start = i.strstart, i.insert = i.lookahead, i.lookahead = 0, i.match_length = i.prev_length = 2, i.match_available = 0, t.next_in = r, t.input = o, t.avail_in = s, i.wrap = n, tt
+ },
+ deflateInfo: "pako deflate (from Nodeca project)"
+ };
+ const Ht = (t, e) => Object.prototype.hasOwnProperty.call(t, e);
+ var jt = function(t) {
+ const e = Array.prototype.slice.call(arguments, 1);
+ for (; e.length;) {
+ const a = e.shift();
+ if (a) {
+ if ("object" != typeof a) throw new TypeError(a + "must be non-object");
+ for (const e in a) Ht(a, e) && (t[e] = a[e])
+ }
+ }
+ return t
+ },
+ Kt = t => {
+ let e = 0;
+ for (let a = 0, i = t.length; a < i; a++) e += t[a].length;
+ const a = new Uint8Array(e);
+ for (let e = 0, i = 0, n = t.length; e < n; e++) {
+ let n = t[e];
+ a.set(n, i), i += n.length
+ }
+ return a
+ };
+ let Pt = !0;
+ try {
+ String.fromCharCode.apply(null, new Uint8Array(1))
+ } catch (t) {
+ Pt = !1
+ }
+ const Yt = new Uint8Array(256);
+ for (let t = 0; t < 256; t++) Yt[t] = t >= 252 ? 6 : t >= 248 ? 5 : t >= 240 ? 4 : t >= 224 ? 3 : t >= 192 ? 2 : 1;
+ Yt[254] = Yt[254] = 1;
+ var Gt = t => {
+ if ("function" == typeof TextEncoder && TextEncoder.prototype.encode) return (new TextEncoder).encode(t);
+ let e, a, i, n, s, r = t.length,
+ o = 0;
+ for (n = 0; n < r; n++) a = t.charCodeAt(n), 55296 == (64512 & a) && n + 1 < r && (i = t.charCodeAt(n + 1), 56320 == (64512 & i) && (a = 65536 + (a - 55296 << 10) + (i - 56320), n++)), o += a < 128 ? 1 : a < 2048 ? 2 : a < 65536 ? 3 : 4;
+ for (e = new Uint8Array(o), s = 0, n = 0; s < o; n++) a = t.charCodeAt(n), 55296 == (64512 & a) && n + 1 < r && (i = t.charCodeAt(n + 1), 56320 == (64512 & i) && (a = 65536 + (a - 55296 << 10) + (i - 56320), n++)), a < 128 ? e[s++] = a : a < 2048 ? (e[s++] = 192 | a >>> 6, e[s++] = 128 | 63 & a) : a < 65536 ? (e[s++] = 224 | a >>> 12, e[s++] = 128 | a >>> 6 & 63, e[s++] = 128 | 63 & a) : (e[s++] = 240 | a >>> 18, e[s++] = 128 | a >>> 12 & 63, e[s++] = 128 | a >>> 6 & 63, e[s++] = 128 | 63 & a);
+ return e
+ },
+ Xt = (t, e) => {
+ const a = e || t.length;
+ if ("function" == typeof TextDecoder && TextDecoder.prototype.decode) return (new TextDecoder).decode(t.subarray(0, e));
+ let i, n;
+ const s = new Array(2 * a);
+ for (n = 0, i = 0; i < a;) {
+ let e = t[i++];
+ if (e < 128) {
+ s[n++] = e;
+ continue
+ }
+ let r = Yt[e];
+ if (r > 4) s[n++] = 65533, i += r - 1;
+ else {
+ for (e &= 2 === r ? 31 : 3 === r ? 15 : 7; r > 1 && i < a;) e = e << 6 | 63 & t[i++], r--;
+ r > 1 ? s[n++] = 65533 : e < 65536 ? s[n++] = e : (e -= 65536, s[n++] = 55296 | e >> 10 & 1023, s[n++] = 56320 | 1023 & e)
+ }
+ }
+ return ((t, e) => {
+ if (e < 65534 && t.subarray && Pt) return String.fromCharCode.apply(null, t.length === e ? t : t.subarray(0, e));
+ let a = "";
+ for (let i = 0; i < e; i++) a += String.fromCharCode(t[i]);
+ return a
+ })(s, n)
+ },
+ Wt = (t, e) => {
+ (e = e || t.length) > t.length && (e = t.length);
+ let a = e - 1;
+ for (; a >= 0 && 128 == (192 & t[a]);) a--;
+ return a < 0 || 0 === a ? e : a + Yt[t[a]] > e ? a : e
+ };
+ var qt = function() {
+ this.input = null, this.next_in = 0, this.avail_in = 0, this.total_in = 0, this.output = null, this.next_out = 0, this.avail_out = 0, this.total_out = 0, this.msg = "", this.state = null, this.data_type = 2, this.adler = 0
+ };
+ const Jt = Object.prototype.toString,
+ {
+ Z_NO_FLUSH: Qt,
+ Z_SYNC_FLUSH: Vt,
+ Z_FULL_FLUSH: $t,
+ Z_FINISH: te,
+ Z_OK: ee,
+ Z_STREAM_END: ae,
+ Z_DEFAULT_COMPRESSION: ie,
+ Z_DEFAULT_STRATEGY: ne,
+ Z_DEFLATED: se
+ } = K;
+
+ function re(t) {
+ this.options = jt({
+ level: ie,
+ method: se,
+ chunkSize: 16384,
+ windowBits: 15,
+ memLevel: 8,
+ strategy: ne
+ }, t || {});
+ let e = this.options;
+ e.raw && e.windowBits > 0 ? e.windowBits = -e.windowBits : e.gzip && e.windowBits > 0 && e.windowBits < 16 && (e.windowBits += 16), this.err = 0, this.msg = "", this.ended = !1, this.chunks = [], this.strm = new qt, this.strm.avail_out = 0;
+ let a = Mt.deflateInit2(this.strm, e.level, e.method, e.windowBits, e.memLevel, e.strategy);
+ if (a !== ee) throw new Error(j[a]);
+ if (e.header && Mt.deflateSetHeader(this.strm, e.header), e.dictionary) {
+ let t;
+ if (t = "string" == typeof e.dictionary ? Gt(e.dictionary) : "[object ArrayBuffer]" === Jt.call(e.dictionary) ? new Uint8Array(e.dictionary) : e.dictionary, a = Mt.deflateSetDictionary(this.strm, t), a !== ee) throw new Error(j[a]);
+ this._dict_set = !0
+ }
+ }
+
+ function oe(t, e) {
+ const a = new re(e);
+ if (a.push(t, !0), a.err) throw a.msg || j[a.err];
+ return a.result
+ }
+ re.prototype.push = function(t, e) {
+ const a = this.strm,
+ i = this.options.chunkSize;
+ let n, s;
+ if (this.ended) return !1;
+ for (s = e === ~~e ? e : !0 === e ? te : Qt, "string" == typeof t ? a.input = Gt(t) : "[object ArrayBuffer]" === Jt.call(t) ? a.input = new Uint8Array(t) : a.input = t, a.next_in = 0, a.avail_in = a.input.length;;)
+ if (0 === a.avail_out && (a.output = new Uint8Array(i), a.next_out = 0, a.avail_out = i), (s === Vt || s === $t) && a.avail_out <= 6) this.onData(a.output.subarray(0, a.next_out)), a.avail_out = 0;
+ else {
+ if (n = Mt.deflate(a, s), n === ae) return a.next_out > 0 && this.onData(a.output.subarray(0, a.next_out)), n = Mt.deflateEnd(this.strm), this.onEnd(n), this.ended = !0, n === ee;
+ if (0 !== a.avail_out) {
+ if (s > 0 && a.next_out > 0) this.onData(a.output.subarray(0, a.next_out)), a.avail_out = 0;
+ else if (0 === a.avail_in) break
+ } else this.onData(a.output)
+ } return !0
+ }, re.prototype.onData = function(t) {
+ this.chunks.push(t)
+ }, re.prototype.onEnd = function(t) {
+ t === ee && (this.result = Kt(this.chunks)), this.chunks = [], this.err = t, this.msg = this.strm.msg
+ };
+ var le = {
+ Deflate: re,
+ deflate: oe,
+ deflateRaw: function(t, e) {
+ return (e = e || {}).raw = !0, oe(t, e)
+ },
+ gzip: function(t, e) {
+ return (e = e || {}).gzip = !0, oe(t, e)
+ },
+ constants: K
+ };
+ const he = 16209;
+ var de = function(t, e) {
+ let a, i, n, s, r, o, l, h, d, _, f, c, u, w, m, b, g, p, k, v, y, x, z, A;
+ const E = t.state;
+ a = t.next_in, z = t.input, i = a + (t.avail_in - 5), n = t.next_out, A = t.output, s = n - (e - t.avail_out), r = n + (t.avail_out - 257), o = E.dmax, l = E.wsize, h = E.whave, d = E.wnext, _ = E.window, f = E.hold, c = E.bits, u = E.lencode, w = E.distcode, m = (1 << E.lenbits) - 1, b = (1 << E.distbits) - 1;
+ t: do {
+ c < 15 && (f += z[a++] << c, c += 8, f += z[a++] << c, c += 8), g = u[f & m];
+ e: for (;;) {
+ if (p = g >>> 24, f >>>= p, c -= p, p = g >>> 16 & 255, 0 === p) A[n++] = 65535 & g;
+ else {
+ if (!(16 & p)) {
+ if (0 == (64 & p)) {
+ g = u[(65535 & g) + (f & (1 << p) - 1)];
+ continue e
+ }
+ if (32 & p) {
+ E.mode = 16191;
+ break t
+ }
+ t.msg = "invalid literal/length code", E.mode = he;
+ break t
+ }
+ k = 65535 & g, p &= 15, p && (c < p && (f += z[a++] << c, c += 8), k += f & (1 << p) - 1, f >>>= p, c -= p), c < 15 && (f += z[a++] << c, c += 8, f += z[a++] << c, c += 8), g = w[f & b];
+ a: for (;;) {
+ if (p = g >>> 24, f >>>= p, c -= p, p = g >>> 16 & 255, !(16 & p)) {
+ if (0 == (64 & p)) {
+ g = w[(65535 & g) + (f & (1 << p) - 1)];
+ continue a
+ }
+ t.msg = "invalid distance code", E.mode = he;
+ break t
+ }
+ if (v = 65535 & g, p &= 15, c < p && (f += z[a++] << c, c += 8, c < p && (f += z[a++] << c, c += 8)), v += f & (1 << p) - 1, v > o) {
+ t.msg = "invalid distance too far back", E.mode = he;
+ break t
+ }
+ if (f >>>= p, c -= p, p = n - s, v > p) {
+ if (p = v - p, p > h && E.sane) {
+ t.msg = "invalid distance too far back", E.mode = he;
+ break t
+ }
+ if (y = 0, x = _, 0 === d) {
+ if (y += l - p, p < k) {
+ k -= p;
+ do {
+ A[n++] = _[y++]
+ } while (--p);
+ y = n - v, x = A
+ }
+ } else if (d < p) {
+ if (y += l + d - p, p -= d, p < k) {
+ k -= p;
+ do {
+ A[n++] = _[y++]
+ } while (--p);
+ if (y = 0, d < k) {
+ p = d, k -= p;
+ do {
+ A[n++] = _[y++]
+ } while (--p);
+ y = n - v, x = A
+ }
+ }
+ } else if (y += d - p, p < k) {
+ k -= p;
+ do {
+ A[n++] = _[y++]
+ } while (--p);
+ y = n - v, x = A
+ }
+ for (; k > 2;) A[n++] = x[y++], A[n++] = x[y++], A[n++] = x[y++], k -= 3;
+ k && (A[n++] = x[y++], k > 1 && (A[n++] = x[y++]))
+ } else {
+ y = n - v;
+ do {
+ A[n++] = A[y++], A[n++] = A[y++], A[n++] = A[y++], k -= 3
+ } while (k > 2);
+ k && (A[n++] = A[y++], k > 1 && (A[n++] = A[y++]))
+ }
+ break
+ }
+ }
+ break
+ }
+ } while (a < i && n < r);
+ k = c >> 3, a -= k, c -= k << 3, f &= (1 << c) - 1, t.next_in = a, t.next_out = n, t.avail_in = a < i ? i - a + 5 : 5 - (a - i), t.avail_out = n < r ? r - n + 257 : 257 - (n - r), E.hold = f, E.bits = c
+ };
+ const _e = 15,
+ fe = new Uint16Array([3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0]),
+ ce = new Uint8Array([16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78]),
+ ue = new Uint16Array([1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0]),
+ we = new Uint8Array([16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64]);
+ var me = (t, e, a, i, n, s, r, o) => {
+ const l = o.bits;
+ let h, d, _, f, c, u, w = 0,
+ m = 0,
+ b = 0,
+ g = 0,
+ p = 0,
+ k = 0,
+ v = 0,
+ y = 0,
+ x = 0,
+ z = 0,
+ A = null;
+ const E = new Uint16Array(16),
+ R = new Uint16Array(16);
+ let Z, U, S, D = null;
+ for (w = 0; w <= _e; w++) E[w] = 0;
+ for (m = 0; m < i; m++) E[e[a + m]]++;
+ for (p = l, g = _e; g >= 1 && 0 === E[g]; g--);
+ if (p > g && (p = g), 0 === g) return n[s++] = 20971520, n[s++] = 20971520, o.bits = 1, 0;
+ for (b = 1; b < g && 0 === E[b]; b++);
+ for (p < b && (p = b), y = 1, w = 1; w <= _e; w++)
+ if (y <<= 1, y -= E[w], y < 0) return -1;
+ if (y > 0 && (0 === t || 1 !== g)) return -1;
+ for (R[1] = 0, w = 1; w < _e; w++) R[w + 1] = R[w] + E[w];
+ for (m = 0; m < i; m++) 0 !== e[a + m] && (r[R[e[a + m]]++] = m);
+ if (0 === t ? (A = D = r, u = 20) : 1 === t ? (A = fe, D = ce, u = 257) : (A = ue, D = we, u = 0), z = 0, m = 0, w = b, c = s, k = p, v = 0, _ = -1, x = 1 << p, f = x - 1, 1 === t && x > 852 || 2 === t && x > 592) return 1;
+ for (;;) {
+ Z = w - v, r[m] + 1 < u ? (U = 0, S = r[m]) : r[m] >= u ? (U = D[r[m] - u], S = A[r[m] - u]) : (U = 96, S = 0), h = 1 << w - v, d = 1 << k, b = d;
+ do {
+ d -= h, n[c + (z >> v) + d] = Z << 24 | U << 16 | S | 0
+ } while (0 !== d);
+ for (h = 1 << w - 1; z & h;) h >>= 1;
+ if (0 !== h ? (z &= h - 1, z += h) : z = 0, m++, 0 == --E[w]) {
+ if (w === g) break;
+ w = e[a + r[m]]
+ }
+ if (w > p && (z & f) !== _) {
+ for (0 === v && (v = p), c += b, k = w - v, y = 1 << k; k + v < g && (y -= E[k + v], !(y <= 0));) k++, y <<= 1;
+ if (x += 1 << k, 1 === t && x > 852 || 2 === t && x > 592) return 1;
+ _ = z & f, n[_] = p << 24 | k << 16 | c - s | 0
+ }
+ }
+ return 0 !== z && (n[c + z] = w - v << 24 | 64 << 16 | 0), o.bits = p, 0
+ };
+ const {
+ Z_FINISH: be,
+ Z_BLOCK: ge,
+ Z_TREES: pe,
+ Z_OK: ke,
+ Z_STREAM_END: ve,
+ Z_NEED_DICT: ye,
+ Z_STREAM_ERROR: xe,
+ Z_DATA_ERROR: ze,
+ Z_MEM_ERROR: Ae,
+ Z_BUF_ERROR: Ee,
+ Z_DEFLATED: Re
+ } = K, Ze = 16180, Ue = 16190, Se = 16191, De = 16192, Te = 16194, Oe = 16199, Ie = 16200, Fe = 16206, Le = 16209, Ne = t => (t >>> 24 & 255) + (t >>> 8 & 65280) + ((65280 & t) << 8) + ((255 & t) << 24);
+
+ function Be() {
+ this.strm = null, this.mode = 0, this.last = !1, this.wrap = 0, this.havedict = !1, this.flags = 0, this.dmax = 0, this.check = 0, this.total = 0, this.head = null, this.wbits = 0, this.wsize = 0, this.whave = 0, this.wnext = 0, this.window = null, this.hold = 0, this.bits = 0, this.length = 0, this.offset = 0, this.extra = 0, this.lencode = null, this.distcode = null, this.lenbits = 0, this.distbits = 0, this.ncode = 0, this.nlen = 0, this.ndist = 0, this.have = 0, this.next = null, this.lens = new Uint16Array(320), this.work = new Uint16Array(288), this.lendyn = null, this.distdyn = null, this.sane = 0, this.back = 0, this.was = 0
+ }
+ const Ce = t => {
+ if (!t) return 1;
+ const e = t.state;
+ return !e || e.strm !== t || e.mode < Ze || e.mode > 16211 ? 1 : 0
+ },
+ Me = t => {
+ if (Ce(t)) return xe;
+ const e = t.state;
+ return t.total_in = t.total_out = e.total = 0, t.msg = "", e.wrap && (t.adler = 1 & e.wrap), e.mode = Ze, e.last = 0, e.havedict = 0, e.flags = -1, e.dmax = 32768, e.head = null, e.hold = 0, e.bits = 0, e.lencode = e.lendyn = new Int32Array(852), e.distcode = e.distdyn = new Int32Array(592), e.sane = 1, e.back = -1, ke
+ },
+ He = t => {
+ if (Ce(t)) return xe;
+ const e = t.state;
+ return e.wsize = 0, e.whave = 0, e.wnext = 0, Me(t)
+ },
+ je = (t, e) => {
+ let a;
+ if (Ce(t)) return xe;
+ const i = t.state;
+ return e < 0 ? (a = 0, e = -e) : (a = 5 + (e >> 4), e < 48 && (e &= 15)), e && (e < 8 || e > 15) ? xe : (null !== i.window && i.wbits !== e && (i.window = null), i.wrap = a, i.wbits = e, He(t))
+ },
+ Ke = (t, e) => {
+ if (!t) return xe;
+ const a = new Be;
+ t.state = a, a.strm = t, a.window = null, a.mode = Ze;
+ const i = je(t, e);
+ return i !== ke && (t.state = null), i
+ };
+ let Pe, Ye, Ge = !0;
+ const Xe = t => {
+ if (Ge) {
+ Pe = new Int32Array(512), Ye = new Int32Array(32);
+ let e = 0;
+ for (; e < 144;) t.lens[e++] = 8;
+ for (; e < 256;) t.lens[e++] = 9;
+ for (; e < 280;) t.lens[e++] = 7;
+ for (; e < 288;) t.lens[e++] = 8;
+ for (me(1, t.lens, 0, 288, Pe, 0, t.work, {
+ bits: 9
+ }), e = 0; e < 32;) t.lens[e++] = 5;
+ me(2, t.lens, 0, 32, Ye, 0, t.work, {
+ bits: 5
+ }), Ge = !1
+ }
+ t.lencode = Pe, t.lenbits = 9, t.distcode = Ye, t.distbits = 5
+ },
+ We = (t, e, a, i) => {
+ let n;
+ const s = t.state;
+ return null === s.window && (s.wsize = 1 << s.wbits, s.wnext = 0, s.whave = 0, s.window = new Uint8Array(s.wsize)), i >= s.wsize ? (s.window.set(e.subarray(a - s.wsize, a), 0), s.wnext = 0, s.whave = s.wsize) : (n = s.wsize - s.wnext, n > i && (n = i), s.window.set(e.subarray(a - i, a - i + n), s.wnext), (i -= n) ? (s.window.set(e.subarray(a - i, a), 0), s.wnext = i, s.whave = s.wsize) : (s.wnext += n, s.wnext === s.wsize && (s.wnext = 0), s.whave < s.wsize && (s.whave += n))), 0
+ };
+ var qe = {
+ inflateReset: He,
+ inflateReset2: je,
+ inflateResetKeep: Me,
+ inflateInit: t => Ke(t, 15),
+ inflateInit2: Ke,
+ inflate: (t, e) => {
+ let a, i, n, s, r, o, l, h, d, _, f, c, u, w, m, b, g, p, k, v, y, x, z = 0;
+ const A = new Uint8Array(4);
+ let E, R;
+ const Z = new Uint8Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
+ if (Ce(t) || !t.output || !t.input && 0 !== t.avail_in) return xe;
+ a = t.state, a.mode === Se && (a.mode = De), r = t.next_out, n = t.output, l = t.avail_out, s = t.next_in, i = t.input, o = t.avail_in, h = a.hold, d = a.bits, _ = o, f = l, x = ke;
+ t: for (;;) switch (a.mode) {
+ case Ze:
+ if (0 === a.wrap) {
+ a.mode = De;
+ break
+ }
+ for (; d < 16;) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ if (2 & a.wrap && 35615 === h) {
+ 0 === a.wbits && (a.wbits = 15), a.check = 0, A[0] = 255 & h, A[1] = h >>> 8 & 255, a.check = H(a.check, A, 2, 0), h = 0, d = 0, a.mode = 16181;
+ break
+ }
+ if (a.head && (a.head.done = !1), !(1 & a.wrap) || (((255 & h) << 8) + (h >> 8)) % 31) {
+ t.msg = "incorrect header check", a.mode = Le;
+ break
+ }
+ if ((15 & h) !== Re) {
+ t.msg = "unknown compression method", a.mode = Le;
+ break
+ }
+ if (h >>>= 4, d -= 4, y = 8 + (15 & h), 0 === a.wbits && (a.wbits = y), y > 15 || y > a.wbits) {
+ t.msg = "invalid window size", a.mode = Le;
+ break
+ }
+ a.dmax = 1 << a.wbits, a.flags = 0, t.adler = a.check = 1, a.mode = 512 & h ? 16189 : Se, h = 0, d = 0;
+ break;
+ case 16181:
+ for (; d < 16;) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ if (a.flags = h, (255 & a.flags) !== Re) {
+ t.msg = "unknown compression method", a.mode = Le;
+ break
+ }
+ if (57344 & a.flags) {
+ t.msg = "unknown header flags set", a.mode = Le;
+ break
+ }
+ a.head && (a.head.text = h >> 8 & 1), 512 & a.flags && 4 & a.wrap && (A[0] = 255 & h, A[1] = h >>> 8 & 255, a.check = H(a.check, A, 2, 0)), h = 0, d = 0, a.mode = 16182;
+ case 16182:
+ for (; d < 32;) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ a.head && (a.head.time = h), 512 & a.flags && 4 & a.wrap && (A[0] = 255 & h, A[1] = h >>> 8 & 255, A[2] = h >>> 16 & 255, A[3] = h >>> 24 & 255, a.check = H(a.check, A, 4, 0)), h = 0, d = 0, a.mode = 16183;
+ case 16183:
+ for (; d < 16;) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ a.head && (a.head.xflags = 255 & h, a.head.os = h >> 8), 512 & a.flags && 4 & a.wrap && (A[0] = 255 & h, A[1] = h >>> 8 & 255, a.check = H(a.check, A, 2, 0)), h = 0, d = 0, a.mode = 16184;
+ case 16184:
+ if (1024 & a.flags) {
+ for (; d < 16;) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ a.length = h, a.head && (a.head.extra_len = h), 512 & a.flags && 4 & a.wrap && (A[0] = 255 & h, A[1] = h >>> 8 & 255, a.check = H(a.check, A, 2, 0)), h = 0, d = 0
+ } else a.head && (a.head.extra = null);
+ a.mode = 16185;
+ case 16185:
+ if (1024 & a.flags && (c = a.length, c > o && (c = o), c && (a.head && (y = a.head.extra_len - a.length, a.head.extra || (a.head.extra = new Uint8Array(a.head.extra_len)), a.head.extra.set(i.subarray(s, s + c), y)), 512 & a.flags && 4 & a.wrap && (a.check = H(a.check, i, c, s)), o -= c, s += c, a.length -= c), a.length)) break t;
+ a.length = 0, a.mode = 16186;
+ case 16186:
+ if (2048 & a.flags) {
+ if (0 === o) break t;
+ c = 0;
+ do {
+ y = i[s + c++], a.head && y && a.length < 65536 && (a.head.name += String.fromCharCode(y))
+ } while (y && c < o);
+ if (512 & a.flags && 4 & a.wrap && (a.check = H(a.check, i, c, s)), o -= c, s += c, y) break t
+ } else a.head && (a.head.name = null);
+ a.length = 0, a.mode = 16187;
+ case 16187:
+ if (4096 & a.flags) {
+ if (0 === o) break t;
+ c = 0;
+ do {
+ y = i[s + c++], a.head && y && a.length < 65536 && (a.head.comment += String.fromCharCode(y))
+ } while (y && c < o);
+ if (512 & a.flags && 4 & a.wrap && (a.check = H(a.check, i, c, s)), o -= c, s += c, y) break t
+ } else a.head && (a.head.comment = null);
+ a.mode = 16188;
+ case 16188:
+ if (512 & a.flags) {
+ for (; d < 16;) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ if (4 & a.wrap && h !== (65535 & a.check)) {
+ t.msg = "header crc mismatch", a.mode = Le;
+ break
+ }
+ h = 0, d = 0
+ }
+ a.head && (a.head.hcrc = a.flags >> 9 & 1, a.head.done = !0), t.adler = a.check = 0, a.mode = Se;
+ break;
+ case 16189:
+ for (; d < 32;) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ t.adler = a.check = Ne(h), h = 0, d = 0, a.mode = Ue;
+ case Ue:
+ if (0 === a.havedict) return t.next_out = r, t.avail_out = l, t.next_in = s, t.avail_in = o, a.hold = h, a.bits = d, ye;
+ t.adler = a.check = 1, a.mode = Se;
+ case Se:
+ if (e === ge || e === pe) break t;
+ case De:
+ if (a.last) {
+ h >>>= 7 & d, d -= 7 & d, a.mode = Fe;
+ break
+ }
+ for (; d < 3;) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ switch (a.last = 1 & h, h >>>= 1, d -= 1, 3 & h) {
+ case 0:
+ a.mode = 16193;
+ break;
+ case 1:
+ if (Xe(a), a.mode = Oe, e === pe) {
+ h >>>= 2, d -= 2;
+ break t
+ }
+ break;
+ case 2:
+ a.mode = 16196;
+ break;
+ case 3:
+ t.msg = "invalid block type", a.mode = Le
+ }
+ h >>>= 2, d -= 2;
+ break;
+ case 16193:
+ for (h >>>= 7 & d, d -= 7 & d; d < 32;) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ if ((65535 & h) != (h >>> 16 ^ 65535)) {
+ t.msg = "invalid stored block lengths", a.mode = Le;
+ break
+ }
+ if (a.length = 65535 & h, h = 0, d = 0, a.mode = Te, e === pe) break t;
+ case Te:
+ a.mode = 16195;
+ case 16195:
+ if (c = a.length, c) {
+ if (c > o && (c = o), c > l && (c = l), 0 === c) break t;
+ n.set(i.subarray(s, s + c), r), o -= c, s += c, l -= c, r += c, a.length -= c;
+ break
+ }
+ a.mode = Se;
+ break;
+ case 16196:
+ for (; d < 14;) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ if (a.nlen = 257 + (31 & h), h >>>= 5, d -= 5, a.ndist = 1 + (31 & h), h >>>= 5, d -= 5, a.ncode = 4 + (15 & h), h >>>= 4, d -= 4, a.nlen > 286 || a.ndist > 30) {
+ t.msg = "too many length or distance symbols", a.mode = Le;
+ break
+ }
+ a.have = 0, a.mode = 16197;
+ case 16197:
+ for (; a.have < a.ncode;) {
+ for (; d < 3;) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ a.lens[Z[a.have++]] = 7 & h, h >>>= 3, d -= 3
+ }
+ for (; a.have < 19;) a.lens[Z[a.have++]] = 0;
+ if (a.lencode = a.lendyn, a.lenbits = 7, E = {
+ bits: a.lenbits
+ }, x = me(0, a.lens, 0, 19, a.lencode, 0, a.work, E), a.lenbits = E.bits, x) {
+ t.msg = "invalid code lengths set", a.mode = Le;
+ break
+ }
+ a.have = 0, a.mode = 16198;
+ case 16198:
+ for (; a.have < a.nlen + a.ndist;) {
+ for (; z = a.lencode[h & (1 << a.lenbits) - 1], m = z >>> 24, b = z >>> 16 & 255, g = 65535 & z, !(m <= d);) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ if (g < 16) h >>>= m, d -= m, a.lens[a.have++] = g;
+ else {
+ if (16 === g) {
+ for (R = m + 2; d < R;) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ if (h >>>= m, d -= m, 0 === a.have) {
+ t.msg = "invalid bit length repeat", a.mode = Le;
+ break
+ }
+ y = a.lens[a.have - 1], c = 3 + (3 & h), h >>>= 2, d -= 2
+ } else if (17 === g) {
+ for (R = m + 3; d < R;) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ h >>>= m, d -= m, y = 0, c = 3 + (7 & h), h >>>= 3, d -= 3
+ } else {
+ for (R = m + 7; d < R;) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ h >>>= m, d -= m, y = 0, c = 11 + (127 & h), h >>>= 7, d -= 7
+ }
+ if (a.have + c > a.nlen + a.ndist) {
+ t.msg = "invalid bit length repeat", a.mode = Le;
+ break
+ }
+ for (; c--;) a.lens[a.have++] = y
+ }
+ }
+ if (a.mode === Le) break;
+ if (0 === a.lens[256]) {
+ t.msg = "invalid code -- missing end-of-block", a.mode = Le;
+ break
+ }
+ if (a.lenbits = 9, E = {
+ bits: a.lenbits
+ }, x = me(1, a.lens, 0, a.nlen, a.lencode, 0, a.work, E), a.lenbits = E.bits, x) {
+ t.msg = "invalid literal/lengths set", a.mode = Le;
+ break
+ }
+ if (a.distbits = 6, a.distcode = a.distdyn, E = {
+ bits: a.distbits
+ }, x = me(2, a.lens, a.nlen, a.ndist, a.distcode, 0, a.work, E), a.distbits = E.bits, x) {
+ t.msg = "invalid distances set", a.mode = Le;
+ break
+ }
+ if (a.mode = Oe, e === pe) break t;
+ case Oe:
+ a.mode = Ie;
+ case Ie:
+ if (o >= 6 && l >= 258) {
+ t.next_out = r, t.avail_out = l, t.next_in = s, t.avail_in = o, a.hold = h, a.bits = d, de(t, f), r = t.next_out, n = t.output, l = t.avail_out, s = t.next_in, i = t.input, o = t.avail_in, h = a.hold, d = a.bits, a.mode === Se && (a.back = -1);
+ break
+ }
+ for (a.back = 0; z = a.lencode[h & (1 << a.lenbits) - 1], m = z >>> 24, b = z >>> 16 & 255, g = 65535 & z, !(m <= d);) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ if (b && 0 == (240 & b)) {
+ for (p = m, k = b, v = g; z = a.lencode[v + ((h & (1 << p + k) - 1) >> p)], m = z >>> 24, b = z >>> 16 & 255, g = 65535 & z, !(p + m <= d);) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ h >>>= p, d -= p, a.back += p
+ }
+ if (h >>>= m, d -= m, a.back += m, a.length = g, 0 === b) {
+ a.mode = 16205;
+ break
+ }
+ if (32 & b) {
+ a.back = -1, a.mode = Se;
+ break
+ }
+ if (64 & b) {
+ t.msg = "invalid literal/length code", a.mode = Le;
+ break
+ }
+ a.extra = 15 & b, a.mode = 16201;
+ case 16201:
+ if (a.extra) {
+ for (R = a.extra; d < R;) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ a.length += h & (1 << a.extra) - 1, h >>>= a.extra, d -= a.extra, a.back += a.extra
+ }
+ a.was = a.length, a.mode = 16202;
+ case 16202:
+ for (; z = a.distcode[h & (1 << a.distbits) - 1], m = z >>> 24, b = z >>> 16 & 255, g = 65535 & z, !(m <= d);) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ if (0 == (240 & b)) {
+ for (p = m, k = b, v = g; z = a.distcode[v + ((h & (1 << p + k) - 1) >> p)], m = z >>> 24, b = z >>> 16 & 255, g = 65535 & z, !(p + m <= d);) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ h >>>= p, d -= p, a.back += p
+ }
+ if (h >>>= m, d -= m, a.back += m, 64 & b) {
+ t.msg = "invalid distance code", a.mode = Le;
+ break
+ }
+ a.offset = g, a.extra = 15 & b, a.mode = 16203;
+ case 16203:
+ if (a.extra) {
+ for (R = a.extra; d < R;) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ a.offset += h & (1 << a.extra) - 1, h >>>= a.extra, d -= a.extra, a.back += a.extra
+ }
+ if (a.offset > a.dmax) {
+ t.msg = "invalid distance too far back", a.mode = Le;
+ break
+ }
+ a.mode = 16204;
+ case 16204:
+ if (0 === l) break t;
+ if (c = f - l, a.offset > c) {
+ if (c = a.offset - c, c > a.whave && a.sane) {
+ t.msg = "invalid distance too far back", a.mode = Le;
+ break
+ }
+ c > a.wnext ? (c -= a.wnext, u = a.wsize - c) : u = a.wnext - c, c > a.length && (c = a.length), w = a.window
+ } else w = n, u = r - a.offset, c = a.length;
+ c > l && (c = l), l -= c, a.length -= c;
+ do {
+ n[r++] = w[u++]
+ } while (--c);
+ 0 === a.length && (a.mode = Ie);
+ break;
+ case 16205:
+ if (0 === l) break t;
+ n[r++] = a.length, l--, a.mode = Ie;
+ break;
+ case Fe:
+ if (a.wrap) {
+ for (; d < 32;) {
+ if (0 === o) break t;
+ o--, h |= i[s++] << d, d += 8
+ }
+ if (f -= l, t.total_out += f, a.total += f, 4 & a.wrap && f && (t.adler = a.check = a.flags ? H(a.check, n, f, r - f) : C(a.check, n, f, r - f)), f = l, 4 & a.wrap && (a.flags ? h : Ne(h)) !== a.check) {
+ t.msg = "incorrect data check", a.mode = Le;
+ break
+ }
+ h = 0, d = 0
+ }
+ a.mode = 16207;
+ case 16207:
+ if (a.wrap && a.flags) {
+ for (; d < 32;) {
+ if (0 === o) break t;
+ o--, h += i[s++] << d, d += 8
+ }
+ if (4 & a.wrap && h !== (4294967295 & a.total)) {
+ t.msg = "incorrect length check", a.mode = Le;
+ break
+ }
+ h = 0, d = 0
+ }
+ a.mode = 16208;
+ case 16208:
+ x = ve;
+ break t;
+ case Le:
+ x = ze;
+ break t;
+ case 16210:
+ return Ae;
+ default:
+ return xe
+ }
+ return t.next_out = r, t.avail_out = l, t.next_in = s, t.avail_in = o, a.hold = h, a.bits = d, (a.wsize || f !== t.avail_out && a.mode < Le && (a.mode < Fe || e !== be)) && We(t, t.output, t.next_out, f - t.avail_out), _ -= t.avail_in, f -= t.avail_out, t.total_in += _, t.total_out += f, a.total += f, 4 & a.wrap && f && (t.adler = a.check = a.flags ? H(a.check, n, f, t.next_out - f) : C(a.check, n, f, t.next_out - f)), t.data_type = a.bits + (a.last ? 64 : 0) + (a.mode === Se ? 128 : 0) + (a.mode === Oe || a.mode === Te ? 256 : 0), (0 === _ && 0 === f || e === be) && x === ke && (x = Ee), x
+ },
+ inflateEnd: t => {
+ if (Ce(t)) return xe;
+ let e = t.state;
+ return e.window && (e.window = null), t.state = null, ke
+ },
+ inflateGetHeader: (t, e) => {
+ if (Ce(t)) return xe;
+ const a = t.state;
+ return 0 == (2 & a.wrap) ? xe : (a.head = e, e.done = !1, ke)
+ },
+ inflateSetDictionary: (t, e) => {
+ const a = e.length;
+ let i, n, s;
+ return Ce(t) ? xe : (i = t.state, 0 !== i.wrap && i.mode !== Ue ? xe : i.mode === Ue && (n = 1, n = C(n, e, a, 0), n !== i.check) ? ze : (s = We(t, e, a, a), s ? (i.mode = 16210, Ae) : (i.havedict = 1, ke)))
+ },
+ inflateInfo: "pako inflate (from Nodeca project)"
+ };
+ var Je = function() {
+ this.text = 0, this.time = 0, this.xflags = 0, this.os = 0, this.extra = null, this.extra_len = 0, this.name = "", this.comment = "", this.hcrc = 0, this.done = !1
+ };
+ const Qe = Object.prototype.toString,
+ {
+ Z_NO_FLUSH: Ve,
+ Z_FINISH: $e,
+ Z_OK: ta,
+ Z_STREAM_END: ea,
+ Z_NEED_DICT: aa,
+ Z_STREAM_ERROR: ia,
+ Z_DATA_ERROR: na,
+ Z_MEM_ERROR: sa
+ } = K;
+
+ function ra(t) {
+ this.options = jt({
+ chunkSize: 65536,
+ windowBits: 15,
+ to: ""
+ }, t || {});
+ const e = this.options;
+ e.raw && e.windowBits >= 0 && e.windowBits < 16 && (e.windowBits = -e.windowBits, 0 === e.windowBits && (e.windowBits = -15)), !(e.windowBits >= 0 && e.windowBits < 16) || t && t.windowBits || (e.windowBits += 32), e.windowBits > 15 && e.windowBits < 48 && 0 == (15 & e.windowBits) && (e.windowBits |= 15), this.err = 0, this.msg = "", this.ended = !1, this.chunks = [], this.strm = new qt, this.strm.avail_out = 0;
+ let a = qe.inflateInit2(this.strm, e.windowBits);
+ if (a !== ta) throw new Error(j[a]);
+ if (this.header = new Je, qe.inflateGetHeader(this.strm, this.header), e.dictionary && ("string" == typeof e.dictionary ? e.dictionary = Gt(e.dictionary) : "[object ArrayBuffer]" === Qe.call(e.dictionary) && (e.dictionary = new Uint8Array(e.dictionary)), e.raw && (a = qe.inflateSetDictionary(this.strm, e.dictionary), a !== ta))) throw new Error(j[a])
+ }
+
+ function oa(t, e) {
+ const a = new ra(e);
+ if (a.push(t), a.err) throw a.msg || j[a.err];
+ return a.result
+ }
+ ra.prototype.push = function(t, e) {
+ const a = this.strm,
+ i = this.options.chunkSize,
+ n = this.options.dictionary;
+ let s, r, o;
+ if (this.ended) return !1;
+ for (r = e === ~~e ? e : !0 === e ? $e : Ve, "[object ArrayBuffer]" === Qe.call(t) ? a.input = new Uint8Array(t) : a.input = t, a.next_in = 0, a.avail_in = a.input.length;;) {
+ for (0 === a.avail_out && (a.output = new Uint8Array(i), a.next_out = 0, a.avail_out = i), s = qe.inflate(a, r), s === aa && n && (s = qe.inflateSetDictionary(a, n), s === ta ? s = qe.inflate(a, r) : s === na && (s = aa)); a.avail_in > 0 && s === ea && a.state.wrap > 0 && 0 !== t[a.next_in];) qe.inflateReset(a), s = qe.inflate(a, r);
+ switch (s) {
+ case ia:
+ case na:
+ case aa:
+ case sa:
+ return this.onEnd(s), this.ended = !0, !1
+ }
+ if (o = a.avail_out, a.next_out && (0 === a.avail_out || s === ea))
+ if ("string" === this.options.to) {
+ let t = Wt(a.output, a.next_out),
+ e = a.next_out - t,
+ n = Xt(a.output, t);
+ a.next_out = e, a.avail_out = i - e, e && a.output.set(a.output.subarray(t, t + e), 0), this.onData(n)
+ } else this.onData(a.output.length === a.next_out ? a.output : a.output.subarray(0, a.next_out));
+ if (s !== ta || 0 !== o) {
+ if (s === ea) return s = qe.inflateEnd(this.strm), this.onEnd(s), this.ended = !0, !0;
+ if (0 === a.avail_in) break
+ }
+ }
+ return !0
+ }, ra.prototype.onData = function(t) {
+ this.chunks.push(t)
+ }, ra.prototype.onEnd = function(t) {
+ t === ta && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = Kt(this.chunks)), this.chunks = [], this.err = t, this.msg = this.strm.msg
+ };
+ var la = {
+ Inflate: ra,
+ inflate: oa,
+ inflateRaw: function(t, e) {
+ return (e = e || {}).raw = !0, oa(t, e)
+ },
+ ungzip: oa,
+ constants: K
+ };
+ const {
+ Deflate: ha,
+ deflate: da,
+ deflateRaw: _a,
+ gzip: fa
+ } = le, {
+ Inflate: ca,
+ inflate: ua,
+ inflateRaw: wa,
+ ungzip: ma
+ } = la;
+ var ba = ha,
+ ga = da,
+ pa = _a,
+ ka = fa,
+ va = ca,
+ ya = ua,
+ xa = wa,
+ za = ma,
+ Aa = K,
+ Ea = {
+ Deflate: ba,
+ deflate: ga,
+ deflateRaw: pa,
+ gzip: ka,
+ Inflate: va,
+ inflate: ya,
+ inflateRaw: xa,
+ ungzip: za,
+ constants: Aa
+ };
+ t.Deflate = ba, t.Inflate = va, t.constants = Aa, t.default = Ea, t.deflate = ga, t.deflateRaw = pa, t.gzip = ka, t.inflate = ya, t.inflateRaw = xa, t.ungzip = za, Object.defineProperty(t, "__esModule", {
+ value: !0
+ })
+}));
\ No newline at end of file
diff --git a/欧歌/api/模板.js b/欧歌/api/模板.js
new file mode 100644
index 0000000..6da4cc5
--- /dev/null
+++ b/欧歌/api/模板.js
@@ -0,0 +1,429 @@
+if (typeof Object.assign !== 'function') {
+ Object.assign = function() {
+ let target = arguments[0];
+ for (let i = 1; i < arguments.length; i++) {
+ let source = arguments[i];
+ for (let key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+ return target;
+ };
+}
+
+// 通用免嗅探播放
+let common_lazy = `js:
+ let html = request(input);
+ let hconf = html.match(/r player_.*?=(.*?))[1];
+ let json = JSON5.parse(hconf);
+ let url = json.url;
+ if (json.encrypt == '1') {
+ url = unescape(url);
+ } else if (json.encrypt == '2') {
+ url = unescape(base64Decode(url));
+ }
+ if (/\\.(m3u8|mp4|m4a|mp3)/.test(url)) {
+ input = {
+ parse: 0,
+ jx: 0,
+ url: url,
+ };
+ } else {
+ input = url && url.startsWith('http') && tellIsJx(url) ? {parse:0,jx:1,url:url}:input;
+ }`;
+// 默认嗅探播放
+
+let def_lazy = `js:
+ input = { parse: 1, url: input, js: '' };`;
+// 采集站播放
+
+let cj_lazy = `js:
+ if (/\\.(m3u8|mp4)/.test(input)) {
+ input = { parse: 0, url: input };
+ } else {
+ if (rule.parse_url.startsWith('json:')) {
+ let purl = rule.parse_url.replace('json:', '') + input;
+ let html = request(purl);
+ let json = JSON.parse(html);
+ if (json.url) {
+ input = { parse: 0, url: json.url };
+ }
+ } else {
+ input = rule.parse_url + input;
+ }
+ }`;
+
+function getMubans() {
+ const mubanDict = { // 模板字典
+ mx: {
+ title: '',
+ host: '',
+ url: '/vodshow/fyclass--------fypage---/',
+ searchUrl: '/vodsearch/**----------fypage---/',
+ class_parse: '.top_nav li;a&&Text;a&&href;.*/(.*?)/',
+ searchable: 2,
+ quickSearch: 0,
+ filterable: 0,
+ headers: {
+ 'User-Agent': 'MOBILE_UA',
+ },
+ play_parse: true,
+ lazy: common_lazy,
+ limit: 6,
+ double: true,
+ 推荐: '.cbox_list;*;*;*;*;*',
+ 一级: 'ul.vodlist li;a&&title;a&&data-original;.pic_text&&Text;a&&href',
+ 二级: {
+ title: 'h2&&Text;.content_detail:eq(1)&&li&&a:eq(2)&&Text',
+ img: '.vodlist_thumb&&data-original',
+ desc: '.content_detail:eq(1)&&li:eq(1)&&Text;.content_detail:eq(1)&&li&&a&&Text;.content_detail:eq(1)&&li&&a:eq(1)&&Text;.content_detail:eq(1)&&li:eq(2)&&Text;.content_detail:eq(1)&&li:eq(3)&&Text',
+ content: '.content_desc&&span&&Text',
+ tabs: '.play_source_tab&&a',
+ lists: '.content_playlist:eq(#id) li',
+ },
+ 搜索: '*',
+ },
+ mxpro: {
+ title: '',
+ host: '', // homeUrl:'/',
+ url: '/vodshow/fyclass--------fypage---.html',
+ searchUrl: '/vodsearch/**----------fypage---.html',
+ searchable: 2, //是否启用全局搜索,
+ quickSearch: 0, //是否启用快速搜索,
+ filterable: 0, //是否启用分类筛选,
+ headers: { //网站的请求头,完整支持所有的,常带ua和cookies
+ 'User-Agent': 'MOBILE_UA', // "Cookie": "searchneed=ok"
+ },
+ class_parse: '.navbar-items li:gt(0):lt(10);a&&Text;a&&href;/(\\d+)',
+ play_parse: true,
+ lazy: common_lazy,
+ limit: 6,
+ double: true, // 推荐内容是否双层定位
+ 推荐: '.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
+ 一级: 'body a.module-poster-item.module-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href',
+ 二级: {
+ title: 'h1&&Text;.module-info-tag-link:eq(-1)&&Text',
+ img: '.lazyload&&data-original||data-src||src',
+ desc: '.module-info-item:eq(-2)&&Text;.module-info-tag-link&&Text;.module-info-tag-link:eq(1)&&Text;.module-info-item:eq(2)&&Text;.module-info-item:eq(1)&&Text',
+ content: '.module-info-introduction&&Text',
+ tabs: '.module-tab-item',
+ lists: '.module-play-list:eq(#id) a',
+ tab_text: 'div--small&&Text',
+ },
+ 搜索: 'body .module-item;.module-card-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href;.module-info-item-content&&Text',
+ },
+ mxone5: {
+ title: '',
+ host: '',
+ url: '/show/fyclass--------fypage---.html',
+ searchUrl: '/search/**----------fypage---.html',
+ searchable: 2, //是否启用全局搜索,
+ quickSearch: 0, //是否启用快速搜索,
+ filterable: 0, //是否启用分类筛选,
+ class_parse: '.nav-menu-items&&li;a&&Text;a&&href;.*/(.*?)\.html',
+ play_parse: true,
+ lazy: common_lazy,
+ limit: 6,
+ double: true, // 推荐内容是否双层定位
+ 推荐: '.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
+ 一级: '.module-items .module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
+ 二级: {
+ title: 'h1&&Text;.tag-link&&Text',
+ img: '.module-item-pic&&img&&data-src',
+ desc: '.video-info-items:eq(3)&&Text;.tag-link:eq(2)&&Text;.tag-link:eq(1)&&Text;.video-info-items:eq(1)&&Text;.video-info-items:eq(0)&&Text',
+ content: '.vod_content&&Text',
+ tabs: '.module-tab-item',
+ lists: '.module-player-list:eq(#id)&&.scroll-content&&a',
+ tab_text: 'div--small&&Text',
+ },
+ 搜索: '.module-items .module-search-item;a&&title;img&&data-src;.video-serial&&Text;a&&href',
+ },
+ 首图: {
+ title: '',
+ host: '',
+ url: '/vodshow/fyclass--------fypage---/',
+ searchUrl: '/vodsearch/**----------fypage---.html',
+ searchable: 2, //是否启用全局搜索,
+ quickSearch: 0, //是否启用快速搜索,
+ filterable: 0, //是否启用分类筛选,
+ headers: { //网站的请求头,完整支持所有的,常带ua和cookies
+ 'User-Agent': 'MOBILE_UA', // "Cookie": "searchneed=ok"
+ },
+ class_parse: '.myui-header__menu li.hidden-sm:gt(0):lt(7);a&&Text;a&&href;/(\\d+).html',
+ play_parse: true,
+ lazy: common_lazy,
+ limit: 6,
+ double: true, // 推荐内容是否双层定位
+ 推荐: 'ul.myui-vodlist.clearfix;li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
+ 一级: '.myui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
+ 二级: {
+ title: '.myui-content__detail .title--span&&Text;.myui-content__detail p.data:eq(3)&&Text',
+ img: '.myui-content__thumb .lazyload&&data-original',
+ desc: '.myui-content__detail p.otherbox&&Text;.year&&Text;.myui-content__detail p.data:eq(4)&&Text;.myui-content__detail p.data:eq(2)&&Text;.myui-content__detail p.data:eq(0)&&Text',
+ content: '.content&&Text',
+ tabs: '.myui-panel__head&&li',
+ // tabs: '.nav-tabs&&li',
+ lists: '.myui-content__list:eq(#id) li',
+ },
+ 搜索: '#searchList li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href;.detail&&Text',
+ },
+ 首图2: {
+ title: '',
+ host: '',
+ url: '/list/fyclass-fypage.html',
+ searchUrl: '/vodsearch/**----------fypage---.html',
+ searchable: 2, //是否启用全局搜索,
+ quickSearch: 0, //是否启用快速搜索,
+ filterable: 0, //是否启用分类筛选,
+ headers: {
+ 'User-Agent': 'UC_UA', // "Cookie": ""
+ },
+ class_parse: '.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;.*/(.*?).html',
+ play_parse: true,
+ lazy: common_lazy,
+ limit: 6,
+ double: true, // 推荐内容是否双层定位
+ 推荐: 'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href',
+ 一级: '.stui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
+ 二级: {
+ title: '.stui-content__detail .title&&Text;.stui-content__detail&&p:eq(-2)&&a&&Text',
+ title1: '.stui-content__detail .title&&Text;.stui-content__detail&&p&&Text',
+ img: '.stui-content__thumb .lazyload&&data-original',
+ desc: '.stui-content__detail p&&Text;.stui-content__detail&&p:eq(-2)&&a:eq(2)&&Text;.stui-content__detail&&p:eq(-2)&&a:eq(1)&&Text;.stui-content__detail p:eq(2)&&Text;.stui-content__detail p:eq(1)&&Text',
+ desc1: '.stui-content__detail p:eq(4)&&Text;;;.stui-content__detail p:eq(1)&&Text',
+ content: '.detail&&Text',
+ tabs: '.stui-pannel__head h3',
+ tabs1: '.stui-vodlist__head h3',
+ lists: '.stui-content__playlist:eq(#id) li',
+ },
+ 搜索: 'ul.stui-vodlist__media,ul.stui-vodlist,#searchList li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href;.detail&&Text',
+ },
+ 默认: {
+ title: '',
+ host: '',
+ url: '',
+ searchUrl: '',
+ searchable: 2,
+ quickSearch: 0,
+ filterable: 0,
+ filter: '',
+ filter_url: '',
+ filter_def: {},
+ headers: {
+ 'User-Agent': 'MOBILE_UA',
+ },
+ timeout: 5000,
+ class_parse: '#side-menu li;a&&Text;a&&href;/(.*?)\.html',
+ cate_exclude: '',
+ play_parse: true,
+ lazy: def_lazy,
+ double: true,
+ 推荐: '列表1;列表2;标题;图片;描述;链接;详情',
+ 一级: '列表;标题;图片;描述;链接;详情',
+ 二级: {
+ title: 'vod_name;vod_type',
+ img: '图片链接',
+ desc: '主要信息;年代;地区;演员;导演',
+ content: '简介',
+ tabs: '',
+ lists: 'xx:eq(#id)&&a',
+ tab_text: 'body&&Text',
+ list_text: 'body&&Text',
+ list_url: 'a&&href',
+ },
+ 搜索: '列表;标题;图片;描述;链接;详情',
+ },
+ vfed: {
+ title: '',
+ host: '',
+ url: '/index.php/vod/show/id/fyclass/page/fypage.html',
+ searchUrl: '/index.php/vod/search/page/fypage/wd/**.html',
+ searchable: 2, //是否启用全局搜索,
+ quickSearch: 0, //是否启用快速搜索,
+ filterable: 0, //是否启用分类筛选,
+ headers: {
+ 'User-Agent': 'UC_UA',
+ },
+ class_parse: '.fed-pops-navbar&&ul.fed-part-rows&&a;a&&Text;a&&href;.*/(.*?).html',
+ play_parse: true,
+ lazy: common_lazy,
+ limit: 6,
+ double: true, // 推荐内容是否双层定位
+ 推荐: 'ul.fed-list-info.fed-part-rows;li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
+ 一级: '.fed-list-info&&li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
+ 二级: {
+ title: 'h1.fed-part-eone&&Text;.fed-deta-content&&.fed-part-rows&&li&&Text',
+ img: '.fed-list-info&&a&&data-original',
+ desc: '.fed-deta-content&&.fed-part-rows&&li:eq(1)&&Text;.fed-deta-content&&.fed-part-rows&&li:eq(2)&&Text;.fed-deta-content&&.fed-part-rows&&li:eq(3)&&Text',
+ content: '.fed-part-esan&&Text',
+ tabs: '.fed-drop-boxs&&.fed-part-rows&&li',
+ lists: '.fed-play-item:eq(#id)&&ul:eq(1)&&li',
+ },
+ 搜索: '.fed-deta-info;h1&&Text;.lazyload&&data-original;.fed-list-remarks&&Text;a&&href;.fed-deta-content&&Text',
+ },
+ 海螺3: {
+ title: '',
+ host: '',
+ searchUrl: '/v_search/**----------fypage---.html',
+ url: '/vod_____show/fyclass--------fypage---.html',
+ headers: {
+ 'User-Agent': 'MOBILE_UA',
+ },
+ timeout: 5000,
+ class_parse: 'body&&.hl-nav li:gt(0);a&&Text;a&&href;.*/(.*?).html',
+ cate_exclude: '明星|专题|最新|排行',
+ limit: 40,
+ play_parse: true,
+ lazy: common_lazy,
+ double: true,
+ 推荐: '.hl-vod-list;li;a&&title;a&&data-original;.remarks&&Text;a&&href',
+ 一级: '.hl-vod-list&&.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
+ 二级: {
+ title: '.hl-dc-title&&Text;.hl-dc-content&&li:eq(6)&&Text',
+ img: '.hl-lazy&&data-original',
+ desc: '.hl-dc-content&&li:eq(10)&&Text;.hl-dc-content&&li:eq(4)&&Text;.hl-dc-content&&li:eq(5)&&Text;.hl-dc-content&&li:eq(2)&&Text;.hl-dc-content&&li:eq(3)&&Text',
+ content: '.hl-content-text&&Text',
+ tabs: '.hl-tabs&&a',
+ tab_text: 'a--span&&Text',
+ lists: '.hl-plays-list:eq(#id)&&li',
+ },
+ 搜索: '.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
+ searchable: 2, //是否启用全局搜索,
+ quickSearch: 0, //是否启用快速搜索,
+ filterable: 0, //是否启用分类筛选,
+ },
+ 海螺2: {
+ title: '',
+ host: '',
+ searchUrl: '/index.php/vod/search/page/fypage/wd/**/',
+ url: '/index.php/vod/show/id/fyclass/page/fypage/',
+ headers: {
+ 'User-Agent': 'MOBILE_UA',
+ },
+ timeout: 5000,
+ class_parse: '#nav-bar li;a&&Text;a&&href;id/(.*?)/',
+ limit: 40,
+ play_parse: true,
+ lazy: common_lazy,
+ double: true,
+ 推荐: '.list-a.size;li;a&&title;.lazy&&data-original;.bt&&Text;a&&href',
+ 一级: '.list-a&&li;a&&title;.lazy&&data-original;.list-remarks&&Text;a&&href',
+ 二级: {
+ title: 'h2&&Text;.deployment&&Text',
+ img: '.lazy&&data-original',
+ desc: '.deployment&&Text',
+ content: '.ec-show&&Text',
+ tabs: '#tag&&a',
+ lists: '.play_list_box:eq(#id)&&li',
+ },
+ 搜索: '.search-list;a&&title;.lazy&&data-original;.deployment&&Text;a&&href',
+ searchable: 2, //是否启用全局搜索,
+ quickSearch: 0, //是否启用快速搜索,
+ filterable: 0, //是否启用分类筛选,
+ },
+ 短视: {
+ title: '',
+ host: '', // homeUrl:'/',
+ url: '/channel/fyclass-fypage.html',
+ searchUrl: '/search.html?wd=**',
+ searchable: 2, //是否启用全局搜索,
+ quickSearch: 0, //是否启用快速搜索,
+ filterable: 0, //是否启用分类筛选,
+ headers: { //网站的请求头,完整支持所有的,常带ua和cookies
+ 'User-Agent': 'MOBILE_UA', // "Cookie": "searchneed=ok"
+ },
+ class_parse: '.menu_bottom ul li;a&&Text;a&&href;.*/(.*?).html',
+ cate_exclude: '解析|动态',
+ play_parse: true,
+ lazy: common_lazy,
+ limit: 6,
+ double: true, // 推荐内容是否双层定位
+ 推荐: '.indexShowBox;ul&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
+ 一级: '.pic-list&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
+ 二级: {
+ title: 'h1&&Text;.content-rt&&p:eq(0)&&Text',
+ img: '.img&&img&&data-src',
+ desc: '.content-rt&&p:eq(1)&&Text;.content-rt&&p:eq(2)&&Text;.content-rt&&p:eq(3)&&Text;.content-rt&&p:eq(4)&&Text;.content-rt&&p:eq(5)&&Text',
+ content: '.zkjj_a&&Text',
+ tabs: '.py-tabs&&option',
+ lists: '.player:eq(#id) li',
+ },
+ 搜索: '.sr_lists&&ul&&li;h3&&Text;img&&data-src;.int&&p:eq(0)&&Text;a&&href',
+ },
+ 短视2: {
+ title: '',
+ host: '',
+ class_name: '电影&电视剧&综艺&动漫',
+ class_url: '1&2&3&4',
+ searchUrl: '/index.php/ajax/suggest?mid=1&wd=**&limit=50',
+ searchable: 2,
+ quickSearch: 0,
+ headers: {
+ 'User-Agent': 'MOBILE_UA'
+ },
+ url: '/index.php/api/vod#type=fyclass&page=fypage',
+ filterable: 0, //是否启用分类筛选,
+ filter_url: '',
+ filter: {},
+ filter_def: {},
+ detailUrl: '/index.php/vod/detail/id/fyid.html',
+ play_parse: true,
+ lazy: common_lazy,
+ limit: 6,
+ 推荐: '.list-vod.flex .public-list-box;a&&title;.lazy&&data-original;.public-list-prb&&Text;a&&href',
+ 一级: 'js:let body=input.split("#")[1];let t=Math.round(new Date/1e3).toString();let key=md5("DS"+t+"DCC147D11943AF75");let url=input.split("#")[0];body=body+"&time="+t+"&key="+key;print(body);fetch_params.body=body;let html=post(url,fetch_params);let data=JSON.parse(html);VODS=data.list.map(function(it){it.vod_pic=urljoin2(input.split("/i")[0],it.vod_pic);return it});',
+ 二级: {
+ title: '.slide-info-title&&Text;.slide-info:eq(2)--strong&&Text',
+ img: '.detail-pic&&data-original',
+ desc: '.slide-info-remarks&&Text;.slide-info-remarks:eq(1)&&Text;.slide-info-remarks:eq(2)&&Text;.slide-info:eq(1)--strong&&Text;.info-parameter&&ul&&li:eq(3)&&Text',
+ content: '#height_limit&&Text',
+ tabs: '.anthology.wow.fadeInUp.animated&&.swiper-wrapper&&a',
+ tab_text: 'a--span&&Text',
+ lists: '.anthology-list-box:eq(#id) li',
+ },
+ 搜索: 'json:list;name;pic;;id',
+ },
+ 采集1: {
+ title: '',
+ host: '',
+ homeTid: '13',
+ homeUrl: '/api.php/provide/vod/?ac=detail&t={{rule.homeTid}}',
+ detailUrl: '/api.php/provide/vod/?ac=detail&ids=fyid',
+ searchUrl: '/api.php/provide/vod/?wd=**&pg=fypage',
+ url: '/api.php/provide/vod/?ac=detail&pg=fypage&t=fyclass',
+ headers: {
+ 'User-Agent': 'MOBILE_UA'
+ },
+ timeout: 5000, // class_name: '电影&电视剧&综艺&动漫',
+ // class_url: '1&2&3&4',
+ // class_parse:'js:let html=request(input);input=JSON.parse(html).class;',
+ class_parse: 'json:class;',
+ limit: 20,
+ multi: 1,
+ searchable: 2, //是否启用全局搜索,
+ quickSearch: 1, //是否启用快速搜索,
+ filterable: 0, //是否启用分类筛选,
+ play_parse: true,
+ parse_url: '',
+ lazy: cj_lazy,
+ 推荐: '*',
+ 一级: 'json:list;vod_name;vod_pic;vod_remarks;vod_id;vod_play_from',
+ 二级: `js:
+ let html=request(input);
+ html=JSON.parse(html);
+ let data=html.list;
+ VOD=data[0];`,
+ 搜索: '*',
+ },
+ };
+ return JSON.parse(JSON.stringify(mubanDict));
+}
+
+var mubanDict = getMubans();
+var muban = getMubans();
+export default {
+ muban,
+ getMubans
+};
\ No newline at end of file
diff --git a/欧歌/js/采集之王.js b/欧歌/js/采集之王.js
new file mode 100644
index 0000000..3bc5d96
--- /dev/null
+++ b/欧歌/js/采集之王.js
@@ -0,0 +1,378 @@
+globalThis.getRandomItem = function(items) {
+ return items[Math.random() * items.length | 0];
+}
+var rule = {
+ title: '采集之王[合]',
+ author: '道长',
+ version: '20240706 beta17',
+ update_info: ``.trim(),
+ host: '',
+ homeTid: '',
+ homeUrl: '/api.php/provide/vod/?ac=detail&t={{rule.homeTid}}',
+ detailUrl: '/api.php/provide/vod/?ac=detail&ids=fyid',
+ searchUrl: '/api.php/provide/vod/?wd=**&pg=#TruePage##page=fypage',
+ classUrl: '/api.php/provide/vod/',
+ url: '/api.php/provide/vod/?ac=detail&pg=fypage&t=fyfilter',
+ filter_url: '{{fl.类型}}',
+ headers: {
+ 'User-Agent': 'MOBILE_UA'
+ },
+ timeout: 5000,
+ limit: 20,
+ search_limit: 10,
+ searchable: 1,
+ quickSearch: 0,
+ filterable: 1,
+ play_parse: true,
+ parse_url: '',
+ search_match: false,
+ search_pic: true,
+ 预处理: $js.toString(() => {
+ function getClasses(item) {
+ let classes = [];
+ if (item.class_name && item.class_url) {
+ if (!/&|电影|电视剧|综艺|动漫[\u4E00-\u9FA5]+/.test(item.class_name)) {
+ try {
+ item.class_name = ungzip(item.class_name)
+ } catch (e) {
+ log(`不识别的class_name导致gzip解码失败:${e}`)
+ return classes
+ }
+ }
+ let names = item.class_name.split('&');
+ let urls = item.class_url.split('&');
+ let cnt = Math.min(names.length, urls.length);
+ for (let i = 0; i < cnt; i++) {
+ classes.push({
+ 'type_id': urls[i],
+ 'type_name': names[i]
+ });
+ }
+ }
+ return classes
+ }
+ if (typeof(batchFetch) === 'function') {
+ rule.search_limit = 16;
+ log('当前程序支持批量请求[batchFetch],搜索限制已设置为16');
+ }
+ let _url = rule.params;
+ log(`传入参数:${_url}`);
+ if (_url && typeof(_url) === 'string' && /^(http|file)/.test(_url)) {
+ if (_url.includes('$')) {
+ let _url_params = _url.split('$');
+ _url = _url_params[0];
+ rule.search_match = !!(_url_params[1]);
+ if (_url_params.length > 2) {
+ rule.search_pic = !!(_url_params[2]);
+ }
+ }
+ let html = request(_url);
+ let json = JSON.parse(html);
+ let _classes = [];
+ rule.filter = {};
+ rule.filter_def = {};
+ json.forEach(it => {
+ let _obj = {
+ type_name: it.name,
+ type_id: it.url,
+ parse_url: it.parse_url || '',
+ searchable: it.searchable !== 0,
+ api: it.api || '',
+ cate_exclude: it.cate_exclude || '',
+ cate_excludes: it.cate_excludes || [],
+ };
+ _classes.push(_obj);
+ try {
+ let json1 = [];
+ if (it.class_name && it.class_url) {
+ json1 = getClasses(it);
+ } else {
+ json1 = JSON.parse(request(urljoin(_obj.type_id, _obj.api || rule.classUrl))).class;
+ }
+ if (_obj.cate_excludes && Array.isArray(_obj.cate_excludes) && _obj.cate_excludes.length > 0) {
+ json1 = json1.filter(cl => !_obj.cate_excludes.includes(cl.type_name));
+ } else if (_obj.cate_exclude) {
+ json1 = json1.filter(cl => !new RegExp(_obj.cate_exclude, 'i').test(cl.type_name));
+ }
+ rule.filter[_obj.type_id] = [{
+ "key": "类型",
+ "name": "类型",
+ "value": json1.map(i => {
+ return {
+ "n": i.type_name,
+ 'v': i.type_id
+ }
+ })
+ }];
+ if (json1.length > 0) {
+ rule.filter_def[it.url] = {
+ "类型": json1[0].type_id
+ };
+ }
+ } catch (e) {
+ rule.filter[it.url] = [{
+ "key": "类型",
+ "name": "类型",
+ "value": [{
+ "n": "全部",
+ "v": ""
+ }]
+ }];
+ }
+ });
+ rule.classes = _classes;
+ }
+ }),
+ class_parse: $js.toString(() => {
+ input = rule.classes;
+ }),
+ 推荐: $js.toString(() => {
+ VODS = [];
+ if (rule.classes) {
+ let randomClass = getRandomItem(rule.classes);
+ let _url = urljoin(randomClass.type_id, input);
+ if (randomClass.api) {
+ _url = _url.replace('/api.php/provide/vod/', randomClass.api)
+ }
+ try {
+ let html = request(_url, {
+ timeout: rule.timeout
+ });
+ let json = JSON.parse(html);
+ VODS = json.list;
+ VODS.forEach(it => {
+ it.vod_id = randomClass.type_id + '$' + it.vod_id;
+ it.vod_remarks = it.vod_remarks + '|' + randomClass.type_name;
+ });
+ } catch (e) {}
+ }
+ }),
+ 一级: $js.toString(() => {
+ VODS = [];
+ if (rule.classes) {
+ let _url = urljoin(MY_CATE, input);
+ let current_vod = rule.classes.find(item => item.type_id === MY_CATE);
+ if (current_vod && current_vod.api) {
+ _url = _url.replace('/api.php/provide/vod/', current_vod.api)
+ }
+ let html = request(_url);
+ let json = JSON.parse(html);
+ VODS = json.list;
+ VODS.forEach(it => {
+ it.vod_id = MY_CATE + '$' + it.vod_id
+ });
+ }
+ }),
+ 二级: $js.toString(() => {
+ VOD = {};
+ if (orId === 'update_info') {
+ VOD = {
+ vod_content: rule.update_info.trim(),
+ vod_name: '更新日志',
+ type_name: '更新日志',
+ vod_pic: 'https://resource-cdn.tuxiaobei.com/video/FtWhs2mewX_7nEuE51_k6zvg6awl.png',
+ vod_remarks: `版本:${rule.version}`,
+ vod_play_from: '道长在线',
+ vod_play_url: '随机小视频$http://api.yujn.cn/api/zzxjj.php',
+ };
+ } else {
+ if (rule.classes) {
+ let _url = urljoin(fyclass, input);
+ let current_vod = rule.classes.find(item => item.type_id === fyclass);
+ if (current_vod && current_vod.api) {
+ _url = _url.replace('/api.php/provide/vod/', current_vod.api)
+ }
+ let html = request(_url);
+ let json = JSON.parse(html);
+ let data = json.list;
+ VOD = data[0];
+ if (current_vod && current_vod.type_name) {
+ VOD.vod_play_from = VOD.vod_play_from.split('$$$').map(it => current_vod.type_name + '|' + it).join('$$$')
+ }
+ }
+ }
+ }),
+ 搜索: $js.toString(() => {
+ VODS = [];
+ if (rule.classes) {
+ let canSearch = rule.classes.filter(it => it.searchable);
+ let page = Number(MY_PAGE);
+ page = (MY_PAGE - 1) % Math.ceil(canSearch.length / rule.search_limit) + 1;
+ let truePage = Math.ceil(MY_PAGE / Math.ceil(canSearch.length / rule.search_limit));
+ if (rule.search_limit) {
+ let start = (page - 1) * rule.search_limit;
+ let end = page * rule.search_limit;
+ let t1 = new Date().getTime();
+ let searchMode = typeof(batchFetch) === 'function' ? '批量' : '单个';
+ log('start:' + start);
+ log('end:' + end);
+ log('搜索模式:' + searchMode);
+ log('精准搜索:' + rule.search_match);
+ log('强制获取图片:' + rule.search_pic);
+ if (start < canSearch.length) {
+ let search_classes = canSearch.slice(start, end);
+ let urls = [];
+ search_classes.forEach(it => {
+ let _url = urljoin(it.type_id, input);
+ if (it.api) {
+ _url = _url.replace('/api.php/provide/vod/', it.api)
+ }
+ _url = _url.replace("#TruePage#", "" + truePage);
+ urls.push(_url);
+ });
+ let results_list = [];
+ let results = [];
+ if (typeof(batchFetch) === 'function') {
+ let reqUrls = urls.map(it => {
+ return {
+ url: it,
+ options: {
+ timeout: rule.timeout
+ }
+ }
+ });
+ let rets = batchFetch(reqUrls);
+ let detailUrls = [];
+ let detailUrlCount = 0;
+ rets.forEach((ret, idx) => {
+ let it = search_classes[idx];
+ if (ret) {
+ try {
+ let json = JSON.parse(ret);
+ let data = json.list;
+ data.forEach(i => {
+ i.site_name = it.type_name;
+ i.vod_id = it.type_id + '$' + i.vod_id;
+ i.vod_remarks = i.vod_remarks + '|' + it.type_name;
+ });
+ if (rule.search_match) {
+ data = data.filter(item => item.vod_name && (new RegExp(KEY, 'i')).test(item.vod_name))
+ }
+ if (data.length > 0) {
+ if (rule.search_pic && !data[0].vod_pic) {
+ log(`当前搜索站点【${it.type_name}】没图片,尝试访问二级去获取图片`);
+ let detailUrl = urls[idx].split('wd=')[0] + 'ac=detail&ids=' + data.map(k => k.vod_id.split('$')[1]).join(',');
+ detailUrls.push(detailUrl);
+ results_list.push({
+ data: data,
+ has_pic: false,
+ detailUrlCount: detailUrlCount
+ });
+ detailUrlCount++;
+ } else {
+ results_list.push({
+ data: data,
+ has_pic: true
+ });
+ }
+ }
+ } catch (e) {
+ log(`请求:${it.type_id}发生错误:${e.message}`)
+ }
+ }
+ });
+ let reqUrls2 = detailUrls.map(it => {
+ return {
+ url: it,
+ options: {
+ timeout: rule.timeout
+ }
+ }
+ });
+ let rets2 = reqUrls2.length > 0 ? batchFetch(reqUrls2) : [];
+ for (let k = 0; k < results_list.length; k++) {
+ let result_data = results_list[k].data;
+ if (!results_list[k].has_pic) {
+ try {
+ let detailJson = JSON.parse(rets2[results_list[k].detailUrlCount]);
+ log('二级数据列表元素数:' + detailJson.list.length);
+ result_data.forEach((d, _seq) => {
+ let detailVodPic = detailJson.list.find(vod => vod.vod_id.toString() === d.vod_id.split('$')[1]);
+ if (detailVodPic) {
+ Object.assign(d, {
+ vod_pic: detailVodPic.vod_pic
+ });
+ }
+ });
+ } catch (e) {
+ log(`强制获取网站${result_data[0].site_name}的搜索图片失败:${e.message}`);
+ }
+ }
+ results = results.concat(result_data);
+ }
+ } else {
+ urls.forEach((_url, idx) => {
+ let it = search_classes[idx];
+ try {
+ let html = request(_url);
+ let json = JSON.parse(html);
+ let data = json.list;
+ data.forEach(i => {
+ i.vod_id = it.type_id + '$' + i.vod_id;
+ i.vod_remarks = i.vod_remarks + '|' + it.type_name;
+ });
+ if (rule.search_match) {
+ data = data.filter(item => item.vod_name && (new RegExp(KEY, 'i')).test(item.vod_name))
+ }
+ if (data.length > 0) {
+ if (rule.search_pic && !data[0].vod_pic) {
+ log(`当前搜索站点【${it.type_name}】没图片,尝试访问二级去获取图片`);
+ let detailUrl = urls[idx].split('wd=')[0] + 'ac=detail&ids=' + data.map(k => k.vod_id.split('$')[1]).join(',');
+ try {
+ let detailJson = JSON.parse(request(detailUrl));
+ log('二级数据列表元素数:' + detailJson.list.length);
+ data.forEach((d, _seq) => {
+ let detailVodPic = detailJson.list.find(vod => vod.vod_id.toString() === d.vod_id.split('$')[1]);
+ if (detailVodPic) {
+ Object.assign(d, {
+ vod_pic: detailVodPic.vod_pic
+ });
+ }
+ });
+ } catch (e) {
+ log(`强制获取网站${it.type_id}的搜索图片失败:${e.message}`);
+ }
+ }
+ results = results.concat(data);
+ }
+ results = results.concat(data);
+ } catch (e) {
+ log(`请求:${it.type_id}发生错误:${e.message}`)
+ }
+ });
+ }
+ VODS = results;
+ let t2 = new Date().getTime();
+ log(`${searchMode}搜索:${urls.length}个站耗时:${(Number(t2) - Number(t1))}ms`)
+ }
+ }
+ }
+ }),
+ lazy: $js.toString(() => {
+ let parse_url = '';
+ if (flag && flag.includes('|')) {
+ let type_name = flag.split('|')[0];
+ let current_vod = rule.classes.find(item => item.type_name === type_name);
+ if (current_vod && current_vod.parse_url) {
+ parse_url = current_vod.parse_url
+ }
+ }
+ if (/\.(m3u8|mp4)/.test(input)) {
+ input = {
+ parse: 0,
+ url: input
+ }
+ } else {
+ if (parse_url.startsWith('json:')) {
+ let purl = parse_url.replace('json:', '') + input;
+ let html = request(purl);
+ input = {
+ parse: 0,
+ url: JSON.parse(html).url
+ }
+ } else {
+ input = parse_url + input;
+ }
+ }
+ }),
+}
\ No newline at end of file
diff --git a/欧歌/json/养生堂.json b/欧歌/json/养生堂.json
index 222640e..4519779 100644
--- a/欧歌/json/养生堂.json
+++ b/欧歌/json/养生堂.json
@@ -9,4 +9,9 @@
"链接前缀": "https://app.api.btime.com/video/play?callback=jQuery36009651202523243325_1747927554988&id=",
// "线路标题": "&& n);
+ let n = {};
+ let c_tmp2 = [];
+ c_tmp.forEach(function(tmp, index) {
+ if (index < 3) {
+ n[tmp.split('=')[0]] = tmp.split('=')[1]
+ } else {
+ c_tmp2.push(tmp)
+ }
+ });
+ let tmp2 = c_tmp2.join('&');
+ n[tmp2.split('=')[0]] = tmp2.split('=')[1];
+ let fm = decodeURIComponent(n.fm).split('&')[0];
+ let u = base64Decode(fm);
+ let p = u.split('_')[0];
+ let f = new Date().getTime() + '0000';
+ let ll = n.wsTime;
+ let t = '0';
+ let h = [p, t, s, f, ll].join('_');
+ let m = md5(h);
+ return (i + '?wsSecret=' + m + '&wsTime=' + ll + '&u=' + t + '&seqid=' + f + '&' + c_tmp2.pop()).replace('hls', 'flv').replace('m3u8', 'flv')
+ }
+ let purl = JSON.parse(request('https://mp.huya.com/cache.php?m=Live&do=profileRoom&roomid=' + rid)).data.stream.flv.multiLine[0].url;
+ input = {
+ jx: 0,
+ url: getRealUrl(purl),
+ parse: 0,
+ header: JSON.stringify({
+ 'user-agent': 'Mozilla/5.0'
+ })
+ }
+ `,
+ 推荐:`js:
+ let d = [];
+ let jo = JSON.parse(request(input)).data.datas;
+ jo.forEach(it => {
+ d.push({
+ url: it.profileRoom,
+ title: it.introduction,
+ img: it.screenshot,
+ desc: '👁' + it.totalCount + ' 🆙' + it.nick,
+ })
+ });
+ setResult(d);
+ `,
+ 一级:`js:
+ let d = [];
+ let jo = JSON.parse(request(input)).data.datas;
+ jo.forEach(it => {
+ d.push({
+ url: it.profileRoom,
+ title: it.introduction,
+ img: it.screenshot,
+ desc: '👁' + it.totalCount + ' 🆙' + it.nick,
+ })
+ });
+ setResult(d);
+ `,
+ 二级:'*',
+ 搜索:'json:response.3.docs;game_roomName;game_screenshot;game_nick;room_id',
+}
\ No newline at end of file
diff --git a/香雅情/js/金牌影视.js b/香雅情/js/金牌影视.js
new file mode 100644
index 0000000..05e7ca1
--- /dev/null
+++ b/香雅情/js/金牌影视.js
@@ -0,0 +1,112 @@
+var rule = {
+ title: '金牌影院',
+ host: 'https://m.sunnafh.com',
+ url: '/api/mw-movie/anonymous/video/list?pageNum=fypage&pageSize=30&sort=1&sortBy=1&type1=fyclass',
+ searchUrl: '/api/mw-movie/anonymous/video/searchByWordPageable?keyword=**&pageNum=fypage&pageSize=12&type=false',
+ headers: {
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
+ },
+ searchable: 2,
+ quickSearch: 0,
+ filterable: 0,
+ class_name: '电影&电视剧&综艺&动漫',
+ class_url: '1&2&3&4',
+ limit: 6,
+ double: false,
+ play_parse:true,
+ lazy:`js:
+ let pid = input.split('/')[5];
+ let nid = input.split('/')[7];
+ const t = new Date().getTime();
+ eval(getCryptoJS);
+ let signkey = 'clientType=1&id='+pid+'&nid='+nid+'&key=cb808529bae6b6be45ecfab29a4889bc&t='+t;
+ const key = CryptoJS.SHA1(CryptoJS.MD5(signkey).toString()).toString();
+ let json_data = JSON.parse(request('https://m.sunnafh.com/api/mw-movie/anonymous/v2/video/episode/url?clientType=1&id='+pid+'&nid='+nid,{headers: {
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
+ 'deviceid': '63ffad23-a598-4f96-85d7-7bf5f3e4a0a2',
+ 'sign': key,
+ 't': t
+ }}));
+ let link = json_data.data.list[0].url;
+ if(/\\.(m3u8|mp4)/.test(link)){input={jx:0,parse:0,url:link}}else{input={jx:0,parse:1,url:link}}
+ `,
+ 一级: `js:
+ let d = [];
+ let url = '';
+ let t = new Date().getTime();
+ eval(getCryptoJS);
+ let signkey = 'pageNum='+MY_PAGE+'&pageSize=30&sort=1&sortBy=1&type1='+MY_CATE+'&key=cb808529bae6b6be45ecfab29a4889bc&t='+t;
+ let key = CryptoJS.SHA1(CryptoJS.MD5(signkey).toString()).toString();
+ let list = JSON.parse(request(input,{headers:{
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
+ 'Accept': 'application/json, text/plain, */*',
+ 'deviceId': '63ffad23-a598-4f96-85d7-7bf5f3e4a0a2',
+ 'sign': key,
+ 't': t
+ }})).data.list;
+ list.forEach((it)=>{
+ d.push({
+ title: it.vodName,
+ desc:it.vodRemarks,
+ img:it.vodPic,
+ url:'http'+it.vodId
+ })
+ });
+ setResult(d);
+ `,
+ 二级: `js:
+ let kid=input.split('http')[1];
+ let t = new Date().getTime();
+ eval(getCryptoJS);
+ let signkey = 'id='+kid+'&key=cb808529bae6b6be45ecfab29a4889bc&t='+t;
+ let key = CryptoJS.SHA1(CryptoJS.MD5(signkey).toString()).toString();
+ let kjson = JSON.parse(request('https://m.sunnafh.com/api/mw-movie/anonymous/video/detail?id='+kid,{headers:{
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
+ 'Accept': 'application/json, text/plain, */*',
+ 'deviceId': '63ffad23-a598-4f96-85d7-7bf5f3e4a0a2',
+ 'sign': key,
+ 't': t
+ }})).data;
+ let kurls = kjson.episodeList.map(function(it) => {
+ return it.name + "$" + "https://m.sunnafh.com/vod/play/"+kid+"/sid/"+it.nid
+ }).join('#');
+ VOD = {
+ vod_id: kid,
+ vod_name: kjson.vodName,
+ vod_pic: kjson.vodPic,
+ type_name: kjson.vodClass,
+ vod_remarks: kjson.vodRemarks,
+ vod_year: kjson.vodYear,
+ vod_area: kjson.vodArea,
+ vod_lang: kjson.vodLang,
+ vod_director: kjson.vodDirector,
+ vod_actor: kjson.vodActor,
+ vod_content: kjson.vodContent,
+ vod_play_from: '金牌线路',
+ vod_play_url: kurls
+ }`,
+ 搜索: `js:
+ let t = new Date().getTime();
+ eval(getCryptoJS);
+ let pg = MY_PAGE;
+ let signkey = 'keyword='+KEY+'&pageNum='+pg+'&pageSize=12&type=false&key=cb808529bae6b6be45ecfab29a4889bc&t='+t;
+ let key = CryptoJS.SHA1(CryptoJS.MD5(signkey).toString()).toString();
+ let html = JSON.parse(request(input,{headers: {
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
+ 'deviceid': '63ffad23-a598-4f96-85d7-7bf5f3e4a0a2',
+ 'sign': key,
+ 't': t
+ }}));
+ let data = html.data.list;
+ let d = [];
+ data.forEach(it=>{
+ d.push({
+ title: it.vodName,
+ desc:it.vodVersion,
+ img:it.vodPic,
+ url:'http'+it.vodId
+ })
+ });
+ setResult(d)
+ `,
+}
\ No newline at end of file
diff --git a/香雅情/json/age动漫.json b/香雅情/json/age动漫.json
new file mode 100644
index 0000000..ce009d0
--- /dev/null
+++ b/香雅情/json/age动漫.json
@@ -0,0 +1,87 @@
+{
+ "规则名": "age动漫",
+ "规则作者": "",
+ "请求头参数": "User-Agent$电脑",
+ "网页编码格式": "UTF-8",
+ "图片是否需要代理": "0",
+ "是否开启获取首页数据": "1",
+ "首页推荐链接": "https://www.agedm.io",
+ "首页列表数组规则": "body&&.video_list_box",
+ "首页片单列表数组规则": ".video_item",
+ "首页片单是否Jsoup写法": "1",
+ "首页片单标题": ".video_item-title&&Text",
+ "首页片单链接": "a&&href[替换:http://=>https://]",
+ "首页片单图片": ".lazyload&&data-original",
+ "首页片单副标题": ".video_item--info&&Text",
+ "首页片单链接加前缀": "",
+ "首页片单链接加后缀": "",
+ "分类起始页码": "1",
+ "分类链接": "https://www.agedm.io/catalog/{cateId}-all-all-all-all-time-{catePg}",
+ "分类名称": "全部&TV&剧场版&OVA",
+ "分类名称替换词": "all&TV&剧场版&OVA",
+ "筛选数据": {},
+ //"筛选数据": "ext",
+ //{cateId}
+ "筛选子分类名称": "",
+ "筛选子分类替换词": "",
+ //{class}
+ "筛选类型名称": "",
+ "筛选类型替换词": "*",
+ //{area}
+ "筛选地区名称": "",
+ "筛选地区替换词": "*",
+ //{year}
+ "筛选年份名称": "",
+ "筛选年份替换词": "*",
+ //{lang}
+ "筛选语言名称": "",
+ "筛选语言替换词": "*",
+ //{by}
+ "筛选排序名称": "时间&人气&评分",
+ "筛选排序替换词": "time&hits&score",
+ "分类截取模式": "1",
+ "分类列表数组规则": "#cata_video_list&&.cata_video_item",
+ "分类片单是否Jsoup写法": "1",
+ "分类片单标题": "a&&title",
+ "分类片单链接": "a&&href[替换:http://=>https://]",
+ "分类片单图片": ".lazyload&&data-original",
+ "分类片单副标题": ".video_play_status&&Text",
+ "分类片单链接加前缀": "",
+ "分类片单链接加后缀": "",
+ "搜索请求头参数": "User-Agent$电脑",
+ "搜索链接": "https://www.agedm.io/search?query={wd}&page={SearchPg}",
+ "POST请求数据": "",
+ "搜索截取模式": "1",
+ "搜索列表数组规则": "#cata_video_list&&.cata_video_item",
+ "搜索片单是否Jsoup写法": "1",
+ "搜索片单图片": ".lazyload&&data-original",
+ "搜索片单标题": "a&&title",
+ "搜索片单链接": "a&&href[替换:http://=>https://]",
+ "搜索片单副标题": ".video_play_status&&Text",
+ "搜索片单链接加前缀": "",
+ "搜索片单链接加后缀": "",
+ "链接是否直接播放": "0",
+ "直接播放链接加前缀": "",
+ "直接播放链接加后缀": "",
+ "直接播放直链视频请求头": "",
+ "详情是否Jsoup写法": "1",
+ "类型详情": "",
+ "年代详情": "",
+ "地区详情": "",
+ "演员详情": "",
+ "简介详情": ".video_detail_desc&&Text",
+ "线路列表数组规则": ".video_detail_playlist_wrapper&&.nav-item",
+ "线路标题": "Text",
+ "播放列表数组规则": ".video_detail_playlist_wrapper&&.video_detail_episode",
+ "选集列表数组规则": "li",
+ "选集标题链接是否Jsoup写法": "1",
+ "选集标题": "a&&Text",
+ "选集链接": "a&&href",
+ "是否反转选集序列": "0",
+ "选集链接加前缀": "https://www.agedm.io",
+ "选集链接加后缀": "",
+ "分析MacPlayer": "0",
+ "是否开启手动嗅探": "1",
+ "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
+ "手动嗅探视频链接过滤词": ".html#=http"
+}
\ No newline at end of file
diff --git a/香雅情/json/低端影视.json b/香雅情/json/低端影视.json
new file mode 100644
index 0000000..8f46e33
--- /dev/null
+++ b/香雅情/json/低端影视.json
@@ -0,0 +1,81 @@
+{
+ "规则名": "低端影视",
+ "规则作者": "",
+ "请求头参数": "手机",
+ "网页编码格式": "UTF-8",
+ "图片是否需要代理": "0",
+ "是否开启获取首页数据": "1",
+ "首页推荐链接": "https://www.ddys.run",
+ "首页列表数组规则": "body&&.stui-vodlist:has(h4)",
+ "首页片单列表数组规则": "li",
+ "首页片单是否Jsoup写法": "1",
+ "分类起始页码": "1",
+ "分类链接": "https://www.ddys.run/list/{cateId}--------{catePg}---.html[firstPg=https://www.ddys.run/category/{cateId}.html]",
+ "分类名称": "电影&电视剧&动漫",
+ "分类名称替换词": "dianying&juji&dongman",
+ "筛选数据": {},
+ //"筛选数据": "ext",
+ //{cateId}
+ "筛选子分类名称": "",
+ "筛选子分类替换词": "",
+ //{class}
+ "筛选类型名称": "",
+ "筛选类型替换词": "*",
+ //{area}
+ "筛选地区名称": "",
+ "筛选地区替换词": "*",
+ //{year}
+ "筛选年份名称": "",
+ "筛选年份替换词": "*",
+ //{lang}
+ "筛选语言名称": "",
+ "筛选语言替换词": "*",
+ //{by}
+ "筛选排序名称": "时间&人气&评分",
+ "筛选排序替换词": "time&hits&score",
+ "分类截取模式": "1",
+ "分类列表数组规则": ".stui-vodlist&&li",
+ "分类片单是否Jsoup写法": "1",
+ "分类片单标题": "h4&&a&&Text",
+ "分类片单链接": "h4&&a&&href",
+ "分类片单图片": ".lazyload&&data-original",
+ "分类片单副标题": ".pic-text&&Text",
+ "分类片单链接加前缀": "https://www.ddys.run",
+ "分类片单链接加后缀": "",
+ "搜索请求头参数": "User-Agent$手机",
+ "搜索链接": "https://www.ddys.run/search/{wd}----------{SearchPg}---.html",
+ "POST请求数据": "searchword={wd}",
+ "搜索截取模式": "1",
+ "搜索列表数组规则": ".stui-vodlist&&li",
+ "搜索片单是否Jsoup写法": "1",
+ "搜索片单图片": ".lazyload&&data-original",
+ "搜索片单标题": "h4&&a&&Text",
+ "搜索片单链接": "h4&&a&&href",
+ "搜索片单副标题": ".pic-text&&Text",
+ "搜索片单链接加前缀": "https://www.ddys.run",
+ "搜索片单链接加后缀": "",
+ "链接是否直接播放": "0",
+ "直接播放链接加前缀": "",
+ "直接播放链接加后缀": "",
+ "直接播放直链视频请求头": "",
+ "详情是否Jsoup写法": "0",
+ "类型详情": "类型:&&",
+ "年代详情": "年份:&&",
+ "地区详情": "地区:&&",
+ "演员详情": "主演:&&",
+ "简介详情": "简介:&&",
+ "线路列表数组规则": "",
+ "线路标题": "",
+ "播放列表数组规则": "body&&.stui-content__playlist",
+ "选集列表数组规则": "li",
+ "选集标题链接是否Jsoup写法": "1",
+ "选集标题": "a&&Text",
+ "选集链接": "a&&href",
+ "是否反转选集序列": "0",
+ "选集链接加前缀": "https://www.ddys.run",
+ "选集链接加后缀": "",
+ "分析MacPlayer": "0",
+ "是否开启手动嗅探": "0",
+ "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
+ "手动嗅探视频链接过滤词": ".html#=http"
+}
\ No newline at end of file
diff --git a/香雅情/json/农民影视.json b/香雅情/json/农民影视.json
index e69de29..97da670 100644
--- a/香雅情/json/农民影视.json
+++ b/香雅情/json/农民影视.json
@@ -0,0 +1,72 @@
+{
+ "规则名": "农民影视",
+ "规则作者": "香雅情",
+ "请求头参数": "User-Agent$手机#accept$text/html#Referer$https://vip.wwgz.cn:5200",
+ "网页编码格式": "UTF-8",
+ "图片是否需要代理": "0",
+ "是否开启获取首页数据": "1",
+ "首页推荐链接": "https://vip.wwgz.cn:5200",
+ "首页列表数组规则": "body&&.globalPicList",
+ "首页片单列表数组规则": "li:has(img)",
+ "首页片单是否Jsoup写法": "1",
+ "首页片单标题": ".sTit&&Text",
+ "首页片单链接": "a&&href",
+ "首页片单图片": "img&&data-echo||data-src||src",
+ "首页片单副标题": ".sBottom&&Text",
+ "首页片单链接加前缀": "https://vip.wwgz.cn:5200",
+ "首页片单链接加后缀": "",
+ "分类起始页码": "1",
+ "分类链接": "https://vip.wwgz.cn:5200/vod-list-id-{cateId}-pg-{catePg}-order--by-{by}-class--year-{year}-letter--area-{area}-lang-.html",
+ "分类名称": "电影&电视剧&综艺&动漫&短剧",
+ "分类名称替换词": "1&2&3&4&26",
+ "筛选数据": "ext",
+ "筛选子分类名称": "动作片&喜剧片&爱情片&科幻片&恐怖片&剧情片&战争片&惊悚片&奇幻片||国产剧&港台泰&日韩剧&欧美剧||空||动漫剧&动漫片",
+ "筛选子分类替换词": "5&6&7&8&9&10&11&16&17||12&13&14&15||空||18&19",
+ "筛选地区名称": "大陆&香港&台湾&美国&韩国&日本&泰国&新加坡&马来西亚&印度&英国&法国&加拿大&西班牙&俄罗斯&其它",
+ "筛选地区替换词": "*",
+ "分类截取模式": "1",
+ "分类列表数组规则": ".globalPicList&&li",
+ "分类片单是否Jsoup写法": "1",
+ "分类片单标题": ".sTit&&Text",
+ "分类片单链接": "a&&href",
+ "分类片单图片": "img&&data-echo||data-src||src",
+ "分类片单副标题": ".sBottom&&Text",
+ "分类片单链接加前缀": "https://vip.wwgz.cn:5200",
+ "分类片单链接加后缀": "",
+ "搜索请求头参数": "User-Agent$手机#Referer$https://vip.wwgz.cn:5200",
+ "search_url": "https://vip.wwgz.cn:5200/index.php?m=vod-search;post",
+ "sea_PtBody": "wd={wd}",
+ "search_mode": "1",
+ "sea_arr_rule": "#data_list&&li",
+ "sea_is_jsoup": "1",
+ "sea_pic": ".lazyload&&data-src",
+ "sea_title": ".sTit&&Text",
+ "sea_url": "a&&href",
+ "搜索片单副标题": ".sDes,-1&&Text",
+ "搜索片单链接加前缀": "https://vip.wwgz.cn:5200",
+ "搜索片单链接加后缀": "",
+ "链接是否直接播放": "0",
+ "直接播放链接加前缀": "https://live.52sf.ga/huya/",
+ "直接播放链接加后缀": "#isVideo=true#",
+ "直接播放直链视频请求头": "authority$ku.peizq.online#Referer$https://play.peizq.online",
+ "详情是否Jsoup写法": "1",
+ "类型详情": ".type-title&&Text",
+ "年代详情": "body&&span:contains(年代:)&&Text!年代:",
+ "地区详情": "",
+ "演员详情": "body&&.sDes:contains(主演:)&&Text!主演:",
+ "简介详情": ".detail-con&&p&&Text!简介:",
+ "线路列表数组规则": "#leftTabBox&&ul&&li",
+ "线路标题": "Text[替换:默认=>农民专线]",
+ "播放列表数组规则": "#leftTabBox&&.numList",
+ "选集列表数组规则": "li",
+ "选集标题链接是否Jsoup写法": "1",
+ "选集标题": "a&&Text",
+ "选集链接": "a&&href",
+ "是否反转选集序列": "1",
+ "选集链接加前缀": "https://vip.wwgz.cn:5200",
+ "选集链接加后缀": "",
+ "分析MacPlayer": "0",
+ "是否开启手动嗅探": "1",
+ "手动嗅探视频链接关键词": ".mp4#.m3u8#item/video#video_mp4#video/tos",
+ "手动嗅探视频链接过滤词": ".html#=http"
+}
\ No newline at end of file
diff --git a/香雅情/json/剧圈圈.json b/香雅情/json/剧圈圈.json
new file mode 100644
index 0000000..a5a6bbc
--- /dev/null
+++ b/香雅情/json/剧圈圈.json
@@ -0,0 +1,82 @@
+{
+ "规则名": "剧圈圈",
+ "规则作者": "香雅情",
+ "OCR_API":"https://api.nn.ci/ocr/b64/text",
+ "请求头参数": "MOBILE_UA",
+ "网页编码格式": "UTF-8",
+ "图片是否需要代理": "否",
+ "是否开启获取首页数据": "1",
+ "首页推荐链接": "https://www.jqqzx.me",
+ "首页列表数组规则": "body&&.module-main.tab-list.active",
+ "首页片单列表数组规则": ".module-item",
+ "首页片单是否Jsoup写法": "1",
+ "分类起始页码": "1",
+ "分类链接": "https://www.jqqzx.me/vodshow/id/{cateId}/page/{catePg}.html",
+ "分类名称": "电影&电视剧&综艺&动漫&纪录片&爽剧",
+ "分类名称替换词": "dianying&juji&zongyi&dongman&jilupian&shuangju",
+ "筛选数据": {},
+ //"筛选数据": "ext",
+ //{cateId}
+ "筛选子分类名称": "",
+ "筛选子分类替换词": "",
+ //{class}
+ "筛选类型名称": "",
+ "筛选类型替换词": "*",
+ //{area}
+ "筛选地区名称": "",
+ "筛选地区替换词": "*",
+ //{year}
+ "筛选年份名称": "",
+ "筛选年份替换词": "*",
+ //{lang}
+ "筛选语言名称": "",
+ "筛选语言替换词": "*",
+ //{by}
+ "筛选排序名称": "时间&人气&评分",
+ "筛选排序替换词": "time&hits&score",
+ "分类截取模式": "1",
+ "分类列表数组规则": ".module-items&&.module-item",
+ "分类片单是否Jsoup写法": "是",
+ "分类片单标题": ".module-poster-item-title&&Text",
+ "分类片单链接": "a&&href",
+ "分类片单图片": ".lazyload&&data-original",
+ "分类片单副标题": ".module-item-note&&Text",
+ "分类片单链接加前缀": "https://www.jqqzx.me",
+ "分类片单链接加后缀": "",
+ "搜索请求头参数": "User-Agent$MOBILE_UA",
+ "搜索链接": "https://www.jqqzx.me/vodsearch{wd}/page/{SearchPg}.html",
+ "POST请求数据": "",
+ "搜索截取模式": "1",
+ "搜索列表数组规则": ".module-items&&.module-item",
+ "搜索片单是否Jsoup写法": "是",
+ "搜索片单图片": ".lazyload&&data-original",
+ "搜索片单标题": ".module-card-item-title&&Text",
+ "搜索片单链接": "a&&href",
+ "搜索片单副标题": ".module-item-note&&Text",
+ "搜索片单链接加前缀": "https://www.jqqzx.me",
+ "搜索片单链接加后缀": "",
+ "链接是否直接播放": "否",
+ "直接播放链接加前缀": "",
+ "直接播放链接加后缀": "",
+ "直接播放直链视频请求头": "",
+ "详情是否Jsoup写法": "是",
+ "类型详情": "",
+ "年代详情": ".module-info-content&&.module-info-item,3&&Text",
+ "地区详情": "",
+ "演员详情": ".module-info-content&&.module-info-item,2&&Text",
+ "简介详情": ".module-info-content&&.module-info-item&&Text",
+ "线路列表数组规则": ".module-tab-items-box&&.module-tab-item",
+ "线路标题": "Text",
+ "播放列表数组规则": "body&&.module-play-list-content",
+ "选集列表数组规则": "a",
+ "选集标题链接是否Jsoup写法": "是",
+ "选集标题": "a&&Text",
+ "选集链接": "a&&href",
+ "是否反转选集序列": "否",
+ "选集链接加前缀": "https://www.jqqzx.me",
+ "选集链接加后缀": "",
+ "分析MacPlayer": "否",
+ "是否开启手动嗅探": "否",
+ "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
+ "手动嗅探视频链接过滤词": ".html#=http"
+}
\ No newline at end of file
diff --git a/香雅情/json/好影快看.json b/香雅情/json/好影快看.json
new file mode 100644
index 0000000..a3942de
--- /dev/null
+++ b/香雅情/json/好影快看.json
@@ -0,0 +1,82 @@
+{
+ "规则名": "好影快看",
+ "规则作者": "香雅情",
+ //"OCR_API":"https://api.nn.ci/ocr/b64/text",
+ "请求头参数": "MOBILE_UA",
+ "网页编码格式": "UTF-8",
+ "图片是否需要代理": "否",
+ "是否开启获取首页数据": "1",
+ "首页推荐链接": "https://www.hitv.app",
+ "首页列表数组规则": "body&&.module-main.tab-list.active",
+ "首页片单列表数组规则": ".module-item",
+ "首页片单是否Jsoup写法": "1",
+ "分类起始页码": "1",
+ "分类链接": "https://www.hitv.app/show/{cateId}--------{catePg}---.html",
+ "分类名称": "电影&电视剧&综艺&动漫&儿童",
+ "分类名称替换词": "1&2&3&4&58",
+ "筛选数据": {},
+ //"筛选数据": "ext",
+ //{cateId}
+ "筛选子分类名称": "",
+ "筛选子分类替换词": "",
+ //{class}
+ "筛选类型名称": "",
+ "筛选类型替换词": "*",
+ //{area}
+ "筛选地区名称": "",
+ "筛选地区替换词": "*",
+ //{year}
+ "筛选年份名称": "",
+ "筛选年份替换词": "*",
+ //{lang}
+ "筛选语言名称": "",
+ "筛选语言替换词": "*",
+ //{by}
+ "筛选排序名称": "时间&人气&评分",
+ "筛选排序替换词": "time&hits&score",
+ "分类截取模式": "1",
+ "分类列表数组规则": "body&&.module-item",
+ "分类片单是否Jsoup写法": "是",
+ "分类片单标题": ".module-poster-item-title&&Text",
+ "分类片单链接": "a&&href",
+ "分类片单图片": ".lazyload&&src",
+ "分类片单副标题": ".module-item-note&&Text",
+ "分类片单链接加前缀": "https://www.hitv.app",
+ "分类片单链接加后缀": "",
+ "搜索请求头参数": "User-Agent$MOBILE_UA",
+ "搜索链接": "https://www.hitv.app/search/{wd}----------{SearchPg}---.html",
+ "POST请求数据": "",
+ "搜索截取模式": "1",
+ "搜索列表数组规则": ".module-items&&.module-item",
+ "搜索片单是否Jsoup写法": "是",
+ "搜索片单图片": ".lazyload&&src",
+ "搜索片单标题": ".module-card-item-title&&Text",
+ "搜索片单链接": "a&&href",
+ "搜索片单副标题": ".module-item-note&&Text",
+ "搜索片单链接加前缀": "https://www.hitv.app",
+ "搜索片单链接加后缀": "",
+ "链接是否直接播放": "否",
+ "直接播放链接加前缀": "",
+ "直接播放链接加后缀": "",
+ "直接播放直链视频请求头": "",
+ "详情是否Jsoup写法": "是",
+ "类型详情": "",
+ "年代详情": "",
+ "地区详情": "",
+ "演员详情": ".module-info-content&&.module-info-item,3&&Text",
+ "简介详情": ".show-desc&&Text",
+ "线路列表数组规则": ".module-tab-items-box&&.module-tab-item",
+ "线路标题": "Text",
+ "播放列表数组规则": "body&&.module-play-list-content",
+ "选集列表数组规则": "a",
+ "选集标题链接是否Jsoup写法": "是",
+ "选集标题": "a&&Text",
+ "选集链接": "a&&href",
+ "是否反转选集序列": "否",
+ "选集链接加前缀": "https://www.hitv.app",
+ "选集链接加后缀": "",
+ "分析MacPlayer": "否",
+ "是否开启手动嗅探": "否",
+ "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
+ "手动嗅探视频链接过滤词": ".html#=http"
+}
\ No newline at end of file
diff --git a/香雅情/json/斗鱼直播.json b/香雅情/json/斗鱼直播.json
new file mode 100644
index 0000000..34126ba
--- /dev/null
+++ b/香雅情/json/斗鱼直播.json
@@ -0,0 +1,43 @@
+{
+ "规则名": "斗鱼直播",
+ "规则作者": "香雅情",
+ "请求头参数": "手机",
+ "网页编码格式": "UTF-8",
+ "图片是否需要代理": "0",
+ "是否开启获取首页数据": "0",
+ "分类起始页码": "1",
+ "分类链接": "https://m.douyu.com/api/room/list?page={catePg}&type={cateId}",
+ "分类名称": "网游竞技&单机热游&手游休闲&娱乐天地&颜值&科技文化&语音互动&语音直播&正能量&赛车竞技&京斗云",
+ "分类名称替换词": "LOL&TVgame&wzry&ecy&yz&wh&paidui&yyjy&znl&eracing&jdy",
+ "筛选数据": "ext",
+ "筛选子分类名称": "英雄联盟&热门游戏&穿越火线&超击突破&CFHD&使命召唤&DNF&DOTA2&炉石传说&CS:GO&无畏契约&lol云顶之弈&魔兽争霸&魔兽怀旧服&自走棋&传奇&跑跑卡丁车&网易游戏&星际争霸&格斗游戏&守望先锋归来&DOTA&魔兽世界&剑网3&魔域&我的世界&超激斗梦境&冒险岛&三国杀&梦幻西游&天涯明月刀&街头篮球&NBA2KOL2&QQ飞车端游&战地之王&军事游戏&棋牌娱乐&FIFA ONLINE 4&热门网游&诛仙世界&千古风流&APEX&流放之路POE&剑网3缘起&逆水寒&风暴英雄&逆战&坦克世界&战舰世界&巫师之昆特牌&反恐精英Online&暗黑破坏神&梦三国2&传奇世界&方舟:生存进化&刀塔霸业&神武4电脑版&群雄逐鹿&堡垒之夜&无限法则&问道电脑版&西山居游戏&最终幻想14&战意&剑灵&星际战甲&龙之谷&铁甲雄兵&古剑奇谭网络版&轩辕传奇&神途&激战2&高达文化区&忍者村大战2&RPG网游专区&诛仙3&Artifact&斗鱼游戏&笑傲江湖OL&冒险岛2&无尽战区&生死狙击&斗战神&永恒之塔&竞速游戏&九阴真经&我的起源&FPS综合网游&劲舞团&天下&刀锋铁骑&火箭联盟&泡泡堂&武侠乂&音乐游戏&百变球球&游戏装机&新倩女幽魂&创世战车&天谕&征途2&QQ炫舞&泰亚史诗&大唐无双&枪火游侠&海战世界&秘境对决&兽人必须死&怪物猎人ol&火源&生存竞技&手工星球&艾兰岛&腾讯游戏&星战前夜:晨曦&热血传奇怀旧版&仙侠世界2&Anarea&枪火重生&彩虹岛&御龙在天&英魂之刃&自由篮球&洛奇英雄传&洛奇&封印者&奇奥英雄传&合金弹头&新英雄年代&星尘传说&盛趣游戏&九阴真经2&沙盒游戏&体育网游&我的世界:地下城&恐鬼症&领地人生&梦塔防&重生边缘&大话西游2&猎人&虎豹骑&传奇之梦&伏魔传&梦想世界3电脑版&海之乐章2&新风火之旅&鬼谷无双&猎龙战记&不败传说&天子剑&热血江湖online&血杀英雄&千年3&逍遥情缘&天空之城&快乐西游&诺亚传说&鹿鼎记&新桃花源记&疾风之刃电脑版&武魂2电脑版&奇迹世界sun&地城之光&新丝路&剑侠世界2电脑版&斩魂&大唐2&幻想神域电脑版&蜀山:初章&狼人对决网游&武林群侠传&飘流幻境&卡拉彼丘&破天一剑&剑雨江湖&四国军棋&命运方舟&新大话西游3&装甲战争&释厄英雄&隆冬&暴雪游戏综合&Battlebit&HypeSquad&长尾4部虚拟分区&幕后高手&燕云十六声&THE FINALS&不良土壤&篮球高手&NBA2K Online&塔瑞斯世界&再战Online&跑跑卡丁车:漂移&传奇永恒&ARC Raiders&传奇归来&权力的游戏 凛冬将至页游&异星前哨&The Front&欺骗公司&全境封锁2||主机游戏&刺客信条:英灵殿&马里奥制造&逃离塔科夫&命运2&墲人之境&Evil Dead&恐怖游戏&荒野大镖客&九劫曲&灵魂筹码&骑马与砍杀&只狼&饥荒&全境封锁&怀旧游戏&战地风云&隐形守护者&ATLAS&进击的巨人&NBA2K&八方旅人&血污:夜之仪式&人类一败涂地&挺进地牢&环世界&古墓丽影&波西亚时光&鬼泣&往日不再&仙剑奇侠传&神秘海域&塞尔达系列&僵尸世界大战&足球游戏&橙光&莎木&圣歌&了不起的修仙模拟器&女神异闻录&斯普拉遁&超级马里奥&三国志系列&星际公民&最终幻想&中土世界:战争之影&流放者柯南&行尸走肉&深海迷航&三国群英传&腐烂国度&无主之地&层层恐惧&圣女战旗&瘟疫传说:无罪&哆啦A梦:牧场物语&鬼哭邦&幽灵行动:断点&不屈者柯南&风之旅人&辐射&太吾绘卷&SCUM&正当防卫&以撒的结合&文明&仁王&缺氧&全面吃鸡模拟器&古剑奇谭&宝可梦:剑/盾&魔法破碎&JUMP大乱斗&皇牌空战&体育游戏&海岛大亨&NBA 2K 欢乐竞技场2&碧海黑帆&最后生还者2&装机模拟器&侏罗纪世界:进化&植物大战僵尸:花园战争系列&蜘蛛侠&战争机器5&战国无双&勇者斗恶龙:建造者2&遗迹:灰烬重生&血源&羞辱系列&星之卡比&侠客风云传&旺达与巨像&吞食孔明传&突变元年:伊甸园之路&死亡搁浅&双点医院&守墓人&忍者龙剑传&模拟人生&迷雾侦探&龙腾世纪&猎天使魔女&狂野星球之旅&空洞骑士&狙击精英&救赎之路&精灵宝可梦Let's Go!&驾驶俱乐部&极限竞速&极品飞车&胡闹厨房&河洛群侠传&归于沉寂&光之子&疯狂的麦克斯&地铁:离去&沉没之城&尘埃系列&超凡双生&飙酷车神&鬼泣5&孢子&暗黑地牢&Rime&生死狙击2&Inside&三国战纪&怀旧FC&讨鬼传&经典单机&奇异小队&英雄无敌&索尼克系列&暗黑血统&街机游戏&合金装备&红色警戒&星球大战系列&纪元:变异&镜之边缘&无双大蛇&海贼王系列&波斯王子&灵魂之火&Hob&祖先:人类史诗&勿忘我&寂静之人&海贼无双&黑道圣徒系列&鬼屋魔影:启蒙&我还活着&巨神狩猎&三合会之战&女巫&大将军:罗马&人类黎明&漫展模拟器&电竞传奇&爱丽丝:庇护&深渊狂猎&古惑狼三部曲&掠食&重装机兵XENO&暗夜长梦&火焰纹章系列&神鬼寓言&物质世界&星露谷物语&质量效应&沙石镇时光&英雄传说&刀剑神域&博德之门&通灵塔&火炬之光&噬血代码&恶灵附身&上古卷轴&战场女武神&无畏&命运之手&神舞幻想&消失的星球&赛博朋克2077&碧蓝幻想&中国式家长&勇者斗恶龙&幻想三国志&堕落之王&生化变种&精灵宝可梦系列&魔界战记&最后的守护者&尼尔:机械纪元&伊苏&迸发&审判之眼:死神的遗言&天国:拯救&地牢围攻&幻&克苏鲁的呼唤&奇异人生&黑暗影集:棉兰幽灵&蔚蓝&对马岛之魂&少数幸运儿&与狼同行&无人深空&乐高世界&超能队长&内心朋友&Deracine&风来之国&EVOTINCTION&看火人&F1系列&超级房车赛系列&壁中精灵>赛车7&赛车计划 系列&极速骑行&超级机器人大战&幽浮系列&信长之野望&超级食肉男孩&这是我的战争&太空战舰:战术行动&杀戮尖塔&冰汽时代&帝国时代&十字军之王&精英:危险&马克思佩恩&量子破碎&死亡空间&光明记忆&海贼王:寻秘世界&非常英雄&旁观者&凯瑟琳Full Body&噬神者&鬼武者重制版&叛乱:沙漠风暴&王国之心&除暴战警&幽林怪谈&任天堂明星大乱斗特别版&杀手&雷霆一击&狂怒&德军总部&Control&骷髅骑士&疯狂之月&耀西的手工世界&三位一体&ToolsUp!&新樱花大战&赏金奇兵&华沙&宅男的人间冒险&黑暗献祭&失落余烬&斩服少女:异布&精灵与萤火意志&2020东京奥运&世界汽车拉力锦标赛&十三机兵防卫圈&沙雕鹿模拟器&奇异世界:灵魂风暴&MUGEN&作业疯了&足球经理&战争附言&雨中冒险&亿万僵尸&疑案追声&一起玩农场&舞力全开&武装突袭&我的朋友佩德罗&时光之帽&王国与城堡&天空之山&逃脱者&石油大亨&生化奇兵&神界:原罪&荣耀战魂&全面战争模拟器&欧洲卡车模拟器&末日方舟&美国逃亡者&漫漫长夜&恐惧狼群&极限巅峰&永恒轮回&孤岛危机&孤岛惊魂&福尔摩斯&浮岛物语&都市:天际线&地球陨落&盗贼之海&餐瘾地城&raft&Dayz&60秒&俄罗斯钓鱼&黑暗逃生&猎人:荒野的召唤&失落城堡&恐怖黎明&传送门骑士&死亡细胞&茶杯头&地痞街区&漫威终极联盟&看门狗&真三国无双&纪元1800&耀西的毛线世界&节奏地牢&围攻&百战天虫&心灵杀手&战斗砖块剧场&泰拉瑞亚&斩妖行&未转变者&异星工厂&群星&求生意志OL&消逝的光芒&UFC&传送门&底特律:变人&恶魔城&方根书简&废品机械师&光环&归家异途&过山车之星&毁灭战士&火影忍者:究极忍者风暴&几何冲刺&监狱建筑师&军团要塞&坎巴拉太空计划&恋爱模拟器&料理模拟器&流浪汉模拟器&龙珠:超宇宙&马里奥赛车&模拟城市&模拟农场&模拟山羊&魔能&欧陆风云&奇妙探险队&乞丐模拟器&小偷模拟器&桌游模拟器&逆转裁判&俄罗斯方块99&史莱姆牧场&请出示证件&超越光速&传说之下&深岩银河&赛博朋克酒保行动&植物大战僵尸&城堡毁灭者&武装原型&游戏开发者&半条命&去月球&蝙蝠侠&Refunct&未上锁的房间&失忆症&艾迪芬奇的记忆&勇敢的心&影子战术:将军之刃&逃出生天&异界锁链&动物园之星&天外世界&最后的绿洲&VRChat&大富翁&路易鬼屋&马里奥和索尼克在东京奥运会&牧场物语&斩妖Raksasi&军团&反恐精英&扣押&英雄连&黑客网络&太阳帝国的原罪:反叛&星界边境&红色至日&杀戮空间&又一个僵尸塔防&点击英雄&王国:经典&表层指挥&进化&黑手党&节奏光剑&龙珠斗士Z&死亡岛&暴战机甲兵&魔方世界&勇气默示录&永劫无间&龙与地下城:黑暗联盟&破败王者&9-5&速度与激情&新世界&人类&解忧咖啡店&幻影异闻录&龙珠Z&初音未来:歌姬计划&嗜血边缘&圣剑传说&复仇者联盟&废土3&部落与弯刀&一拳超人:无名英雄&Raji:远古传奇&我的英雄学院:唯我正义&铁血战士:狩猎场&幽灵行者&地心深处&洛克人&侍道&森林&kenshi&哈迪斯&伤害世界&极乐迪斯科&一字不落>FO&非常普通的鹿&缉私警察&只只大冒险&音灵&寄居隅怪奇事件簿&一起开火车!&霓虹深渊&莫塔守山人&夜勤人&传说法师&矿坑之下&龙崖&主机其他游戏&无尽世界&城市帝国&微软飞行模拟&卡片猎人&要塞:十字军东征&不义联盟&天命奇御&地狱之刃&红色派系&战场兄弟&SUPERHOT&火影忍者博人传&铁路帝国&杰克盒子的派对游戏包&真人快打&海军行动&BeamNG赛车&绿色地狱&火柴人战斗&地铁:归来&撕裂&星球基地&尤卡莱莉大冒险&二战装甲战车&钢铁苍穹&破坏领主&洪潮之焰&细胞分裂&工作模拟器&乐高漫威超级英雄&岛&北境之地&油管主播的生活&进击!要塞!&地狱潜者&钓鱼星球&行会&乐高侏罗纪世界&攻城英雄&厕所穿越记&创造世界&地下城&地狱已满&房产达人&废土2&军团战争&狂热火车&罗马之子&爬行世界&叛变:沙漠风暴&人间地狱&贪婪地牢&王国:两位君主&王牌英雄&无冬之夜&吸血鬼:避世血族&远星物语&战术小队&战争行为&这是警察&终极定制夜&万智对决&月影之塔&机甲战魔&temtem&ECO&薄暮传说&堡垒:火焰之炼&宝箱点击&弹丸论破&渎神&翻滚石块&疯狂运输&荒岛求生&皇家美食&基佬大乱斗&家园&僵尸毁灭工程&晶体管&雷神之锤&零时代&美国陆军&迷雾生存&骑士与商人&桥梁建造者&深海&神话时代&神力科莎&神探杰克&泰坦之旅&逃离扎特沃&陷阵之志&悬崖帝国&野兽传奇&遗忘国度之闲置冠军&音乐战机&英雄萨姆&越野巨轮&赃物与巫术&脏弹&职业自行车队经理&撞车嘉年华&碧蓝航线&传颂之物&绝体绝命都市&食人鲨&腐化2029&僵尸部队&吉拉夫与安妮卡&赛马大亨&广播&钢铁危机&地狱时刻&胡闹搬家&方根胶片&小镇英雄&公主计划&妖精的尾巴&玛拉的夏天&少林九武猴&Skul英雄杀手&坦克维修模拟&绝望监牢&无尽宇宙&恐怖的世界&石质碎片&瑞秋福斯特自杀之谜&装甲军团&太空海盗和僵尸&女巫来了&超级兔子人&夜间城邦&手部模拟器&超级鸡马&健身环大冒险&汽车调试项目&不予播出&炼金工房系列&灾厄逆刃&人行道&星空精灵&宝石:霜之怒&骰子地下城&铁锤守卫:英雄传&魔域地牢&漫漫长路&卡片地下城&超时空方舟&在森林深处&超载地牢&爱丽丝与巨人&符文工房&妙连千军&猎人竞技场:传奇&高能小队&风暴岛&丸霸无双&超可靠快递&SKYHILL: 黑雾&逃出地牢&彼岸晴空&彼岸花&咬紧牙关&迷走深空:碎舰师&生死大乱斗&黑色空岛&钻头派对&疯狂世界&守夜人:长夜&组装车间&毁灭全人类&海绵宝宝:争霸比基尼海滩&云城朋克&炽热的帆:海盗之战&明天会有救援&游击队1941&逆行竞技场&崩解&北方之魂&腐败&岛屿生存者&残存之人&再编译&梦幻模拟战 I&&II&无间冥寺&先驱者&遵命,陛下&量子联盟&永生之境:吸血鬼战争&咒语破碎&V4跨界战&九霄缳神记&退休模拟器&安妮:最后的希望&末日地带:与世隔绝&世界游戏大全51&神奇101&疾速追杀Hex&广东之路&危险驾驶&少女地狱的毒公主&深海争霸&伊甸之路&凤凰点&盟军敢死队&浪人传说&地牢守护者&主机视频&传奇生物&冬日计划&几何竞技场&龙魂&灭火先锋&汽车交易模拟器&全面坦克模拟器&我来自江湖&亦春秋&异星探险家&异形:隔离&至暗之光&超级巴基球&侠隐阁&怒之铁拳4&魔法尖塔&美国卡车模拟&泰坦陨落&捣蛋大作战&觅长生&揍击派对&国王的恩赐&海底大猎杀&黑荆棘角斗场&紫塞秋风&浴血黑帮:傀儡师&恶果之地&轩辕剑柒&尸变纪元&瓦解&空穴山谷&防僵尸基地&堕落圣杯&觉醒&寻找埃文&致命游民复仇者&四海兄弟&末日求生&布莱尔女巫&北方城镇&创世理想乡&绝境北方&生存日记&山海旅人&恐龙化石猎人&超级动物大逃杀&完美的一天&梦幻引擎:游牧城市&不思议的皇冠&上行战场&幸福工厂&废品大亨&开拓者:正义之怒&武士零&冰与火之舞&恶魔之魂&地平线&PROJECT ATHIA&迷途猫&Returnal&麻布仔大冒险&小小大星球&柯娜:精神之桥&幽灵线:东京&JETT:遥远彼岸&众神陨落&Solar Ash&BUGSNAX&The Waylanders&生化危机4重制版&Pragmata&暴雨&怪物火车&雷曼&瑞奇与叮当&桥梁建造师&再见火山高校&宇航员的娱乐室&小恶魔附体&米德加德部落&宇宙机器人&死亡循环&海岛故事&欺诈之地&避风港&裂缝破坏者&INMOST&占领火星&永恒空间&Grounded&星际漫游者&水晶传说&士兵突击&无限空间&未知海岸&Griefhelm&直到尽头&钢铁收割&末日准备狂&要塞:军阀之战&逝者摆渡人&支柱&层层梦境&侠盗猎马人&最老的灵魂&Superliminal&滑板鸟&超猎都市&疯狂连杀&黑色之书&解放者&钢铁誓言&花园故事&遥不可及&恶魔之书&最后的法术&怪物舞会&黑色起源&信仰:邪恶三相&滑雪胜地大亨&荒野之地&展翅翱翔&弹出地牢&神笔狗良&变形记&螃蟹大战&梅林之手&30XX&Exo One&Omno&Röki&Undungeon&当过去就在眼前&地狱使者&火星地平线&马科超人&世纪之石&未绑定:世界分离&异宇星还&Foregone&泡泡糖忍战&Windbound&代号13&古惑狼4&火车模拟世界&火星求生&上古之环&为了国王&小小梦魇&伊森卡特的消失&糖豆人&The Cycle&螃蟹之王&和班尼特福迪一起攻克难关&实况力量棒球2020&托尼霍克职业滑板&巫火&赤痕:月之诅咒2&纸片马里奥&足球小将:新秀崛起&阿玛拉王国:惩罚&城堡风暴&盗贼遗产&渡神纪&迷雾之夏&成人脑力锻炼&热力纳斯卡&苏打地牢&星际拓荒&修道院:破碎瓷器&冒险之旅:十字军东征&冠军冲刺&赛道狂飙&工人物语&海商王&非一般职场&永进&侠道游歌&沉浮&行界:重构&不当英雄&一方灵田&模拟狩猎&Aeolis Tournament&英灵神殿&红怪&部落:原始建造者&迷雾征程&庄园主&动物派对&Olija&致命躯壳&终结降临&虚空列车&影子武士&Creaks&废墟的旗帜&节奏医生&终点咖啡馆&痞子英雄&风之王国&轻木模型飞行模拟器&为了人民&随动回旋镖&燃烧吧,蜘蛛&北极光&恐龙公园&星际反叛军&愤怒的面具&垃圾场模拟器&辐射谷物语&星际小队&暗影火炬城&影子工厂&中国城市建设者&死亡之夜&亡灵军团&神佑释放&阿尔比恩&洞窟探险&中世纪王朝&WWE 2K竞技场&四海旅人&怪兽远征&Uragun&二次灭绝&罪恶帝国&皮克敏&烈火战马&墨心&天穗之咲稻姬&空战猎鹰&快到碗里来&我的公司996&戴森球计划&烟火&鬼谷八荒&回门&Muse Dash&天神镇物语&无尽旅图&战魂铭人&ALTF4&极限竞速:地平线4&恐惧之间&DmC:鬼泣&超级马里奥:奥德赛&超级马里奥3D世界&恶灵附身2&疯狂游戏大亨2&孤岛惊魂6&怪物猎人&归家异途2&鬼泣2&鬼泣3&鬼泣4&黑神话:悟空&呼吸边缘&环形帝国2&求生之路&仁王2&忍者龙剑传:大师合集&三国群英传8&三国志14&杀手3&双人成行&逃生2&甜蜜之家&王国之心3&小小梦魇2&宇宙大拍扁&重生旅人&循环英雄&生化入侵&神界:原罪2&氰化欢乐秀-末日通行证&魔法气泡-特趣思2&漆弹大作战2&丧尸围城2&神秘海域4&要塞:群雄割据&星际乐土太空基地&不是地下城&邪恶天才2:统治世界&疯狂轮子&草图&洛夫洛特爵士&Scrapnaut&Everhood&遥远:导演剪辑版&最后的克劳迪亚&锋芒录&失乐园&血根&忘却的尤克特拉希尔&装甲战线&战斗周期&珊瑚岛&石器争霸&租房达人&路易吉洋楼3&寂静岭:暴雨&狙击手:幽灵战士契约2&全面战争&丧尸围城1&寂静岭2&巫魔人&农场经理&瓦塔姆&I Wanna Maker&尼尔:伪装者&异界之上&浣熊通缉犯&The Signifier&石碑&英科迪亚&无路之旅&夜深人静&破碎&斯盖尔之女&Taur&Obye me&走过至暗时刻&审判者&超级寄生虫&蒸汽地牢:禁闭&南瓜杰克&三教&112接线员&工匠镇&瑞利达&泡沫冬景&侍道外传:刀神&复体&曼岛TT赛事:边缘竞速2&战争机器:战术小队&侠之道&海绵宝宝:比奇堡的冒险&分离&奇妙探险队2&爱上火车&刺客信条:奥德赛&丧尸围城4&神秘海域2:纵横四海&神秘海域3:德雷克的诡计&星球大战:前线&终极神秘古域:混沌洞穴&尸变纪元2&Moonray&神田川Jet Girls&玩命关头:十字路口&灵魂旅人&古树旋律:重生&面容&车祸现场模拟器&破门而入2:北方特遣队&破门而入&俄罗斯方块效应:连接&过山车大亨3:完全版&模拟大爷&SD高达G世纪:起源&绿林侠盗:亡命之徒与传奇&东方计划:不可思议的幻想乡&地球黎明&劳拉GO&Fate/EXTELLA&临终:重生试炼&生生不息&虚拟现实乐园&夏日课堂&妖精剑士F&最终幻想世界&苍翼默示录:神观之梦&荒神&晚班&光环战争&子弹风暴&异域镇魂曲&生命线&暗黑迷途&没有人知道的大冒险&巡警&冥河:黑暗碎片&极限脱出:九人游戏&耻辱之日&菲丽丝工作室:不可思议之旅的炼金术&狙击精英4&三国志13:威力加强版&热血物语:地下世界&史诗战争模拟器&银河护卫队&讨鬼传2&上古卷轴:传奇&闪乱神乐:少女们的选择&幽灵行动:荒野&白色情人节&美国职业摔角联盟2K17&荒野八人组&无夜之国&誓死坚守&苏菲的炼金工房&喷射侠&隐藏的人&叙利亚战争&武器店物语&罪恶少女:诱惑&小三角大英雄&狂战传说&双截龙4&七:远去的日子&地下蚁国&九张羊皮纸&戎马丹心汉匈决战&咒语力量3&小兵大战&维京人 人中之狼&你好邻居&大神:绝景版&寻找天堂&画中世界&桥梁工程师传送门&现代战争&SCP:秘密实验室&纷争终结者&魔界村:重制版&绯红结系&罪恶装备:STRIVE&铁翼少女&涅克罗蒙达:赏金猎人&骑士精神2&辽阔旷野&脊柱&Rune Knights&最后的咒语&红至日2:幸存者&真女神转生3&堕落军团&边境&当火车鸣笛三秒&军团1944&速降王者&地球灭亡前60秒&工业崛起&征服的荣耀:围城&前往中世纪&Arid&环形帝国&伊始之地&二之国2:亡灵之国&二之国:白色圣灰的女王&进击的巨人2&航海日记2&枪血黑手党2&隐龙传:影踪&高等动物&魔域之书&诸神灰烬:救赎&精灵鼠传说&和平世界&自由人:游击战争&战国无双5&泰拉科技&宇宙主义&永恒终焉&死亡教堂&灵魂能力6&基因特工&不要喂食猴子&9—5&迷宫大侦探&古剑奇谭3&日落过载&幻影深渊&不可思议之梦蝶&迷城重生&史诗战斗幻想5&钢铁之鼠&剑士&GRIS&古剑奇谭:永夜&核爆RPG&永恒边缘&旁观者2&Below&彩虹坠入&嗜血印&荒无人烟&哥特舰队:阿玛达2&伊苏9&兽人必须死3&上古之魂&狙击精英VR&遗忘之城&大逆转裁判:编年史&Last Stop&解除绑定:世界分离&边界之外&异种&十字回镖&从军&二人世界&石炉&上帝之城:监狱帝国&狂热运输2&机甲战士5&再见狂野之心&DJMAX致敬&分手装修&PICO PARK&光明记忆:无限&死亡之门&神明在上&中世纪王国战争&澳洲国际网球2&白门&创世纪:阿尔法一号&秘馆疑踪&侠盗公司&英雄传说:创之轨迹&战地系列&塞尔达传说:天空之剑HD&国王的恩赐2&密闭之城2&尘埃异变&赞助者&他们在这里&旅行游记&玉言离光&夜书&脑航员2&异形:火力小队精英&12分钟&九十六号公路&FORECLOSED&重塑火星&你画我猜&RiMS Racing&地牢迷途&Soul Delivery&黑书&哀歌&故障朋克&喋血复仇&武林志2&破晓传说&雷能思之门&星位继承者&米德加尔的部落&城镇叠叠乐&恶魔反击战&山河伏妖录&终极拉扯&诈欺娇娃&蛛丝诡迹&听风者也&荒神2&战匠杜沃&血猎&死寂&人生重开模拟器&钢铁之尾&鬼灭之刃 火之神血风谭&漫威银河护卫队&剑侠图&审判之逝&帝国神话&实况救援大作战&蔚蓝色法则&蓝色反射:帝&艾尔登法环&黑相集:灰冥界&零~濡鸦之巫女~&美国式家长&互动派对&艾玛和泰迪熊:影子历险记&宝可梦:晶灿钻石/明亮珍珠&极限国度&邪恶冥刻&盒裂变&银河破裂者&部落幸存者&偶像大师:星耀季节&极限竞速:地平线5&翼星求生&时间加载器&成长物语:永恒树之歌&世纪:灰烬纪元&琉隐&塞伯利亚之谜:世界之前&酒馆带师&使命召唤系列&弃海:波弟大冒险&黑暗时代:背水一战&天命奇御二&光环:无限&卡牌之声:龙之岛&侏罗纪世界:进化2&蓝精灵:毒叶大作战&廖添丁:绝代凶贼之末日&莱恩的岛&笼中窥梦&那由多的轨迹:改&符文工厂4&雷霆一号&真三国无双8:帝国&英雄传说:零之轨迹 改&Propnight&垃圾水手&网吧模拟器&诡野西部&The Anacrusis&远征军:罗马&要战便战&宝可梦传说:阿尔宙斯&浩劫前夕&秘馆疑踪2&文字游戏&地平线 西之绝境&消逝的光芒2&无主之地3&战神:诸神黄昏&幽闭深渊&师父&恶月十三&昭和米国物语&小缇娜的奇幻之地&海上狼人杀&吸血鬼幸存者&侠乂行:浪迹天涯&巴比伦陨落&最终幻想:起源&HordeCore&乐高星球大战:天行者传奇&头等舱危机&星之卡比 探索发现&神州志:西游&瘟疫列车&FORSPOKEN&双子星:盛气凌人&风暴奇侠&Code B.R.E.A.K.&地心护核者&Indies’ Lies&霍格沃茨之遗&三伏&太荒初境&赏金游戏&奥丁:神叛&午夜猎魂&隐世神剑传&ABRISS&生死轮回&微光之镜&沙丘:香料战争&骑士陨落大冒险&塔猎手&铸时匠&特里贡:太空故事&卢默特:赤灵主宰编年史& 高尔夫大乱斗&暴走枪姬&孤山难越&维隆系统&宇宙汉堡王&Deck of Ashes&筑梦颂&开普勒斯&双点校园&潜行者2:切尔诺贝利之心&神都不良探&黄泉之路&春逝百年抄&哥谭骑士&星空&隐秘的角落&江湖客栈&蜡笔小新:我与博士的暑假&盐与献祭&吸血鬼:避世血族 绝唱&雪凤山&采石场惊魂&时空勇士&灵魂骇客2&火焰纹章无双:风花雪月&数码宝贝 绝境求生&神领编年史&2089:边境&夜莺&Ilysia&Project Q&哥布林弹球&蛇之守望者&Pummel Party&Holomento&合金重组&MIR4&我们永远在这里&创世灰烬&代号锦衣卫&碳酸危机&重装前哨&失心疯&女鬼桥:开魂路&地狱仆从&太阁立志传5 DX&Overprime&森林之子&星际海盗&生死抉择:血霾&杜蒙&雪居之地&千爵史诗&阿凡达:潘多拉边境&超逼真的攻城模拟器 &弈仙牌&Pwnk&夜族崛起&忍者神龟:施莱德的复仇&漫威SNAP&伏魔录&魔力宝贝&黎明前20分钟&弹幕互动玩法&逃离塔科夫:竞技场&木卫四协议&马里奥足球:战斗联盟&仙剑客栈2&罗马复兴&风暴之门&迷失&荒野的召唤:垂钓者&游戏王:大师决斗&修仙立志传&起飞吧!兔兔&咩咩启示录&记忆边境&冲就完事模拟器&足球,但大乱斗&幽灵观察者&SD高达:激斗同盟&房地产大亨&都广丹青录&伊格利亚战记&大江湖之苍龙与白鸟&尼罗河勇士2&暗邪西部&再刷一把&Dinkum&摔角城大乱斗&海岛之魂&Rooted&雅戈泰探险&同舟共济&PlateUp&萤火突击&弗兰基的复仇&天地归虚&冬日幸存者&沙丘:觉醒&无处不在&堕落之主&战国王朝&High on Life&匹诺曹的谎言&破月勇者&Park Beyond&逃生:试炼&战锤40K:暗潮&最远的边陲&萌宠大赢家 &钢铁崛起&Isonzo&蔑视&瘟疫传说:安魂曲&索尼克 未知边境&最后生还者 重制版&狂野泊车&友尽高尔夫&漂泊牧歌&刺客信条:代号JADE&红霞岛&塞尔达传说:王国之泪&霸剑霄云录&破碎线&卧龙:苍天陨落& 卡库远古封印&原子之心&霓虹入侵者&尘封大陆&Brotato&油尽航行&黄金魁犬&巴特拉:家在何方&餐车大亨&飞越13号房&时灵:星辰愚者&暴君的游戏&超能机器人&Warhaven&宝可梦:朱/紫&第一后裔&埃维尔村&奥雷萨之下&面具古墓&铳墓G.O.R.E.&黑相集:心中魔&Kingshunt&漫威暗夜之子&奇怪的RPG&百面千相&Evercore Heroes&东方:平野孤鸿&灵魂石幸存者&像素哥3&冰封之焰&神之天平&魔骑少女&伊克西翁&英勇无厌&万智牌:竞技场&主机一起看&兜仙&风帆纪元&社交互动游戏&矮人通天塔&轮回修仙路&海岸桃源:文明之种&咕喵怪物&Divine Knockout&无限暖暖&巫师系列&药剂工艺:炼金模拟器&四灵棋境&Dark and Darker&虚实万象&自杀小队:杀死正义联盟&江湖十一&方舟2&寂静村的孩子们&XDefiant&神奇躲避球&刺客信条:幻景&未尽行夜&天外武林&Warlander&盗日求生&Hi-Fi Rush&神笔谈兵&狂野之心&心渊梦境&Scars Above&寄梦远方&通神榜&中国式相亲2&Pacific Drive&恐怖录像带&白之旅&收获日3&浮生箓2:九九行歌&错误游戏&大航海时代:起源&法外枭雄:滚石城&莱莎的炼金工房&最终幻想16&街头霸王&ONI:鬼族武者立志传&Tchia&大侠立志传&零 ~月蚀的假面~&最后纪元&魔戒:咕噜&乌鸦之境&狼人嫌疑:神秘大厦&遇见造物主&铁拳8&网络奇兵&恐龙浩劫&护焰者&Prison Life 2&Innchanted&Lightyear Frontier&世界大战:西方战线&幻兽帕鲁&炸鸡派对&为了吾王2&Life by You&迷失之刃&迪士尼无限飞车&妖怪手表4强化之章&终极钓鱼模拟器&乱:失落之岛&战争之人2&深入后室&Eresys&德雷克的胜算&硬核机甲&巴别号漫游指南&叛军兴起&Pax Dei&钢铁指挥官&梦想屋:游戏&恐龙重生&摇滚之神&求生岛:不老泉传说&宠物旅馆&Teravit&坏兽联盟&荆棘:山丘之王||王者荣耀&LOL手游&和平精英&暗区突围&幻塔&火影忍者&COD手游&哈利波特:魔法觉醒&lol电竞经理&DNF手游&金铲铲之战&天刀手游&原神&航海王热血航线&万国觉醒&鸿图之下&欢乐麻将&王者模拟战&中国象棋&天谕手游&巅峰坦克&新游中心&热门手游&APEX手游&梦幻手游&QQ飞车&第五人格&欢乐斗地主&荒野乱斗&阴阳师&狼人杀&JJ斗地主&梦幻新诛仙&街霸对决&人类跌落梦境&机动都市阿尔法&一人之下&多多自走棋&崩坏3&风云岛行动&云游戏&跑跑手游&率土之滨&灌篮高手&皇室战争&王牌战士&战歌竞技场&忍者必须死3&神武4手游&梦幻模拟战&实况足球&剑与远征&航海王:燃烧意志&百闻牌&球球大作战&英雄杀&魔域口袋版&梦幻三维版&口袋新旅程&剑网3:指尖江湖&部落冲突&剑与家园&新笑傲江湖&猫和老鼠&猎人手游&明日之后&影之诗&决战平安京&决斗之城&魂斗罗归来&贪吃蛇大作战&圣斗士星矢&问道手游&魔力宝贝手游&最强NBA&旅行青蛙&热血街篮&手游推广&魔灵召唤&香肠派对&街头篮球手游&迷你世界&荒野行动&战双帕弥什&大话西游2口袋版&FIFA足球世界&街篮&一起来捉妖&明日方舟&自由幻想手游&火影忍者OL&一梦江湖&王牌战争:文明重启&完美世界手游&拳皇98OL&重装上阵&梦塔防手游&赛尔号&猎魂觉醒&仙境传说&流星群侠传&特色手游&逃跑吧少年&弹弹堂&石器时代&狂野飙车9:竞速传奇&RPG手游&天天酷跑&英魂之刃口袋版&拉结尔&倩女幽魂手游&决斗之城2&战争与文明&街球艺术&传奇手游&欢乐升级&雀魂&二次元手游&天龙八部online&征途2手游&万王之王3D&武林外传&我叫MT4&时空召唤&方舟手游&我的勇者&手机帝国&4399游戏&侍魂&潮人篮球&元气骑士&红警OL手游&狐妖小红娘手游&植物大战僵尸手游&战就战&俄罗斯方块环游记&二战风云2&食物语&龙之谷手游&塞尔之光&龙珠最强之战&虚荣&创造与魔法&境界-死神激斗&奇迹觉醒&光遇&游戏王:决斗链接&巅峰战舰&失落城堡手游&绝世战魂&雷霆游戏&寻仙&吾爱斗地主&天天象棋&王国纪元&非人学园&梦幻诛仙&召唤与合成&不思议迷宫&家庭教师&雪鹰领主&贪婪洞窟2&龙族幻想&奇葩战斗家&妖精的尾巴:魔导少年&剑网3指尖对弈&逆转回合&剑侠情缘2:剑歌行&异化之地&拳皇命运&三国杀移动版&罗布乐思&第二银河&足球手游&月圆之夜&蜀门&节奏大师&王牌战争&权力的游戏 凛冬将至&QQ炫舞手游&野蛮人大作战&全民枪战2&秦时明月世界&量子特攻&天龙八部&坦克大决战&花与剑&独立手游&青春篮球&终结者2审判日&一起优诺&神都夜行录&飞机大战2&阿瑞斯病毒&一起来飞车&麻将来了&风之大陆&金属对决&轩辕剑龙舞云山&微乐棋牌&辐射:避难所Online&遇见逆水寒&街篮2&战塔英雄&赛尔号手游&极光计划&不良人3&镇魔曲手游&绿茵之巅&音舞手游&激斗火柴人&堡垒前线:破坏与创造&传奇世界手游&魂武者&疯狂动物城:赛车嘉年华&猎手之王&武侠乂手游&英雄爱三国&永恒纪元&犬夜叉:奈落之战&孤岛先锋&传送门骑士手游&乱世王者&数码宝贝:相遇&仙剑4&光荣使命&长安幻世绘&篮球手游&元素地牢&帕斯卡契约&我是谜&闹闹天宫&原始守卫战&废土行动&鬼泣-巅峰之战&射击类手游&权力与纷争&轮回诀&海岛纪元&热血足球&命运歌姬&绿色征途&云梦四时歌&救赎之地&口袋对决&王牌御史&城堡抢翻天&银翼计划&光明大陆&项羽传&暗黑破坏神:不朽&鹿鼎记手游&妖神记&伊洛纳&银汉游戏&新神魔大陆&公主连结Re:Dive&三国志战略版&摩尔庄园&失落王冠&口袋觉醒&契约轮回&天地劫:幽城再临&阴阳师:妖怪屋&螺旋风暴&Disorder&妖怪名单之前世今生&黑潮之上&凹凸世界&云上城之歌&荣誉指挥官&天龙八部手游&战舰猎手&大秦帝国之帝国烽烟&五子棋&围棋&咔叽探险队&梦想新大陆&三国志幻想大陆:国创加强版&造梦无双&全球行动&放学别跑&两座城池&征服与霸业&新射雕群侠传&伊甸之战&诛仙手游&妄想山海&烽火之争&黎明觉醒:生机&星光创造营&梦幻花园&最强蜗牛&魔渊之刃&江南百景图&龙之谷2手游&不朽之旅&装甲前线&高能手办团&庆余年&我的侠客&曙光英雄&解神者&真三国无双霸&大话西游手游&血族&影之刃3&口袋进化&少年三国志:零&蘑菇战争2&开心消消乐&镖人&战争怒吼&战三国:八阵奇谋&幻书启世录&忘川风华录&新剑侠情缘手游&星耀对决&地城邂逅:记忆憧憬&旧日传说&小动物之星&超凡先锋&重生细胞&一念逍遥&像素危城&坦克世界闪击战&时空中的绘旅人&汉家江湖&约战:精灵再临&魂器学院&海岛奇兵&钢铁力量2&阴阳师:妖怪小班&浮生为卿歌&仙剑奇侠传九野&魔域手游&大唐无双手游&泰拉瑞亚手游&永不言弃&永不言弃2&牌乐门&永远的7日之都&坦克连&边境之旅&地铁跑酷&提灯与地下城&极无双&灵魂潮汐&坦克无敌&恶果之地手游&战舰世界闪击战&辐射:避难所&漫威:超级争霸战&耀光传奇&小森生活&艾彼&南瓜先生2九龙城寨&狂暴之翼&天使纪元&三十六计&西游女儿国&山海镜花&女神联盟2&少年西游记&少年三国志&少年三国志2&不可思议乐队&钢琴师&横扫千军&节奏大爆炸&喵斯快跑&去月球手游&深渊地平线&双子&说剑&小美斗地主&全明星激斗&全民奇迹2&原始传奇&地下城堡2:黑暗觉醒&进化之地&梦想世界3手游&有杀气童话2&辉煌传奇&蓝天传奇&铁血传奇&完美传奇&阳光传奇&浴血传奇&梓轩传奇&巨像骑士团&冒险与深渊&摸金校尉之九幽将军&螺旋圆舞曲&字母人&古今江湖&精灵之境&伊甸园的骄傲&镇魂街:武神躯&斗罗大陆:斗神再临&斗罗大陆:武魂觉醒&斗罗大陆2绝世唐门&英雄棋士团&骰子猎人&古代战争&梦幻家园&濡沫江湖&螺旋英雄谭&贪婪洞窟&匠木&冒险与挖矿&战神觉醒&九州仙剑传H5&荣耀大天使&暗黑大天使&古剑奇闻录H5&热血战歌&蓝月传奇&七战&神将屠龙&战龙归来&凡人修仙传挂机版H5&山河图志&谁是首富H5&武动苍穹&神魔传说&大城主&丛林猎人H5&攻城掠地&英雄这边请H5&大皇帝&我的帝国H5&盗墓笔记&朝歌封神录&人偶馆绮幻夜&长生劫&跨越星弧&拳魂觉醒&末日沙城&五行师&地下城堡&阿卡迪亚&剑与轮回&魔王与神锤&王牌高校&天天打波利&混沌起源&鬼语迷城&仙灵觉醒&大天使之剑&黄金裁决&谜方&战斗少女跑酷&宝可梦大探险&僵尸榨汁机&全战天下&数码宝贝:新世纪&嘻嘻棋牌&绝世仙王&一刀传世&斗罗大陆&一千克拉女王&破雪刃&坎公骑冠剑&刀剑乱舞ONLINE&JJ象棋&动物餐厅&天姬变&剑玲珑&奇迹之剑&王者修仙&御剑修仙&火线精英&小小突击队&造梦西游OL&皇帝成长计划2&热血神剑&领主战争&偶像请就位&魔力契约&我们的星球&比特大爆炸&胡桃日记&奥奇传说手游&云端问仙&三国志贾诩传&战斗吧龙魂&奇门之上&学园偶像季:群星闪耀&剑开仙门&晴明传&猫猫咖啡屋&花亦山心之月&恶魔秘境&月神的迷宫&光影链接&少女的王座&机甲爱丽丝&半盏复古行&星之彼端&此生无白&猫之宿约者&狼人对决&露西她所期望的一切&未来之役手游&最终幻想:勇气启示录 幻影战争&第八秩序&贝比岛&葫芦娃兄弟&复苏的魔女&王者射击&造梦西游4&造梦西游外传&战神遗迹&漫威超级战争&零号任务&小小村长&以太之光&豪杰成长计划&轩辕剑:剑之源&龙珠觉醒&同步音律&热血合击&比特小队&还有这种操作&逆水寒手游&流言侦探&战舰联盟&黑暗与光明&黑暗料理王&另一个伊甸:超越时空的猫&末剑&少女前线&野蛮时代&遇见&霓虹深渊:无限&绯红之境&如果一生只有三十岁&女神星球&想不想修真&阳春艺曲&胡莱三国3&灵魂宝戒&暴走英雄坛&奥拉星&诸神皇冠&姬斗无双&托拉姆物语&妙奇星球&不休的乌拉拉&先游云游戏&万象物语手游&机动战姬:聚变&聊斋搜灵录&球场风云&魔法洞穴2&绿茵信仰&星空时代&烟雨江湖&糖果缤纷乐&放置军团&千纹时空&网红奶茶店&远方的故事&白鸟游乐园&超脱力医院&我爱弹射&蜀山掌门&追妖记&球球联盟&誓灵&江湖悠悠&王牌竞速&文明与征服&聚爆&隐藏的家伙&神角技巧&碧蓝航线手游&爆炒江湖&300大作战&2047&机动战队大作战&活下去&四叶草剧场&宝可梦大集结&无极仙途&元素方尖&汉末霸业&EVE星战前夜:无烬星河&下一站江湖Ⅰ&光与夜之恋&弹力果冻&七雄纷争&放置江湖&火力苏打(T3)&植物大战僵尸2&魔神英雄传&球球英雄&刀剑神域黑衣剑士:王牌&苍之骑士团2&悠长假期&云裳羽衣&桃源记&四季物语&百分之一&无悔华夏&猫之城&墨斗&圣斗士星矢:正义传说&未定事件簿&雏蜂:深渊天使&ProjectGAIA&崩坏学园2&斗罗大陆:魂师对决&寻宝物语&映月城与电子姬&古墓丽影传说:迷踪&漫威对决&奶牛镇的小时光&放置与召唤&乱世曹操传&道友请留步&城堡传说大乱斗&一剑断念-像素仙侠&我是航海家&交叉次元&暮光起源&军团战棋英雄时代&天御乾坤&仙弈传说&代号:弥弥尔&索尼克在2020东京奥运会&繁荣美食市场物语&喵星人简史&姬魔恋战纪&食之契约&闪烁之光&牧羊人之心&老农种树&三国演义:吞噬无界&重建家园&合金机兵&群雄时代&苍蓝境界&斯特恩大陆&大明侠客令&通感纪元&航海奇闻&赛尔特大陆&不休战队&偶像梦幻祭2&卡卡保皇&灵猫传&荒野日记:孤岛&还有这种操作2&绝对演绎&剑侠世界3&召唤与合成2&攻城天下&上古王冠&纯白和弦&方舟之旅&异界事务所&萌宠大战僵尸&像素时代&仙侠第一放置&无尽的拉格朗日&弓箭手大作战&策马三国志&神行少女&挨饿荒野&武林英雄传&文明大爆炸&饥饿鲨:世界&造物梦工厂&诺亚之心&闪耀暖暖&无双萌将&战鼓英雄&超级精灵手表&青鸾繁华录&樱都学园&物种起源&剑之荣耀&刀剑乱舞-ONLINE-&人形觉醒&模拟城市:我是市长&九州三国志&重返帝国&太古仙尊&长安幻想&火炬之光:无限&策略军团&富豪闯三国&猫头鹰和灯塔&终结战场&绯石之心&魔天记&萌将风云&王者争雄&雷电傲气雄鹰&魔戒战争&捍卫星球&早安少女&不休江湖&拂晓&拂晓的拾荒团&江山:烽火连城&三国连环战&放开那三国3&古镜记&古剑奇谭木语人&料理次元&苍蓝誓约&火影忍者:忍者新世代&战火与荣耀&末日远征&战棋三国2&滚动的天空&战场英雄物语&新斗罗大陆&一起来飞车2&登山赛车&小小航海士外传&征程三国&我一点都不可口&荒野乱斗(腾讯版)&小小勇者&萌侠挂机&小冰冰传奇&三国战纪2手游&艾丽莎的国度&我的战舰&最终王冠&我是大东家&幸存者危城&我欲封天山海战&盛唐烟雨&余烬风暴&猫旅馆物语&暗魔领主&冒险公社手游&欧陆战争5:帝国&古荒遗迹&纪念碑谷2&大航海探险物语&末日来袭&我在7年后等着你&航海日记&一拳超人:最强之男&王国保卫战4&半世界之旅&妖怪手帐&迷失立方&奥特曼宇宙英雄&新三国杀&奶块&策魂三国&奥特曼系列OL&欢喜斗地主&洪荒文明&决战羽毛球&街头足球&浅塘&同人圣三国蜀汉传&心灵战争&零之战线&冒险王3OL&超级幻影猫2&无尽寒冬&末剑二&河图寻仙记&王的骑士&火影忍者:巅峰对决&元气骑士新作&冒险王2&梦间集&塔防之光&极略三国&我做夫人那些年&小小五千年&牌武者&牌师&被尘封的故事&火柴人联盟2&荒野日记&三国志吕布传&萝莉养成计划&非常普通的鹿手游&战箭天下&实况球会经理&全职猎手&超级改造家&斗斗堂&代号MA&DEEMO(古树旋律)&创意蛋糕店&时空猎人&美美小店&狗狗呼叫喵星&三国终极觉醒&策马守天关&骑士纷争&星际逆战&钓鱼大对决&沧月战纪&羽毛球高高手&了凡录&掌门太忙&LoveLive! 学园偶像祭&隐世录&黑色沙漠手游&魔力宝贝:旅人&玄中记&大家饿餐厅&修真江湖&出发吧冒险家&一拳超人正义执行&画境长恨歌&小花仙&盾之勇者成名录:浪潮&领主传奇&幻兽爱合成&魔力宝贝归来&完美世界:诸神之战&荣耀新三国&终末阵线:伊诺贝塔&巅峰极速&蛋仔派对&新盗墓笔记&轩辕传奇手游&萤火突击国际服&冰原守卫者&冒险小分队&崩坏:星穹铁道&无序次元&卧龙吟2&爆裂魔女&地下城堡3:魂之诗&乱世逐鹿&武林闲侠&淘米游戏&伊甸启示录&黑暗与光明手游&关于我转生变成史莱姆这档事&异能都市&叫我大掌柜&暖雪&玛娜希斯回响&永劫无间手游&无期迷途&逆光潜入&深空之眼&幻想神话志&CF手游&新天龙八部手游&无神之界&时空猎人3&保卫萝卜4&尘白禁区&明日方舟:终末地&龙之国物语&传奇天下&末日家园R计划&最佳球会&原始征途&奥特曼:集结&进化之地2&魂&全民大灌篮&航海王:梦想指针&枪火重生手游&派对之星&火影三国志&网易其它组&萌宠大侦探之迷雾岛&三国战纪手游&染·钟楼谜团&绝区零&魔兽弧光大作战&全民泡泡超人&重返CODM&综合手游&IP游戏&部落与弯刀手游&鸣潮&棋牌游戏&逗斗火柴人&战争公约&奥比岛:梦想国度&九灵神域&龙之谷世界&TapTap新游&永恒轮回:无限&劲舞团手游&神陵武装&黎明之海&环形战争&伊瑟·重启日&浮岛冒险Forager&队长小翼:王牌对决&铃兰之剑&出发吧麦芬&野蛮人大作战2&晶核&大野逐龙&星火编辑器&竹马胭脂铺&全面憨憨战争模拟器&最佳11人-冠军球会&空之要塞:启航&极无双2&鲤 重制版&我叫MT:归来&冰汽时代手游&射雕&王者万象棋&代号破晓&赛尔计划&羊了个羊&列王之剑&小小蚁国&跃迁旅人&SLG综合&战火与永恒&代号:伙伴&天使之战&海岛连萌&全明星街球派对&合金弹头:觉醒&弹弹堂大冒险&三国诛将录&劲乐幻想&白荆回廊&战地无疆&三国志战棋版&一拳超人:世界&鹅鸭杀手游&忍者龟:归来&太空行动&天龙八部2:飞龙战天&王者传奇&女神异闻录:夜幕魅影&彼界&墨武侠&代号:UH&动物王者||二次元&一起看&颜值(横屏)&音乐&户外&美食&原创IP&心动派对&音遇恋人&舞蹈&趣生活&心动FM&娱乐推荐&校园&营收内用&武汉纺织大学&武汉体育学院&湖北大学&华中农业大学&上海财经大学&华中师范大学&武汉工程大学&湖北经济学院&武昌理工学院&汉口学院&武汉软件工程职业学院&湖北美术学院&武汉生物工程学院&武昌首义学院&武汉铁路职业技术学院&江汉大学&武汉大学&华中科技大学&河北经贸大学&北京体育大学&北京城市学院&中南民族大学&西安电子科技大学&东北大学&大连海事大学&中国地质大学(武汉)&华东交通大学&西南交通大学&南京大学&上海大学&长沙理工大学&湖南交通职业技术学院&文华学院&成龙影视传媒学院&荆门职业学院&桂林电子科技大学&青岛农业大学&郑州科技学院&南华大学&河北科技大学&山东工艺美术学院&北京航空航天大学&广西理工职业技术学院&北京服装学院&湖北工业大学&新疆科技学院&新疆师范大学&新疆天山职业技术大学&新疆农业大学&昌吉学院&新疆工程学院&新疆理工学院&石河子大学&新疆交通职业技术学院&新疆体育职业技术学院&新疆财经大学&新疆医科大学&新疆大学&河南大学&齐鲁工业大学&青岛科技大学&黄河水利职业技术学院&河南开封科技传媒学院&安徽工程大学&青岛大学&山东交通学院&湖南工程学院&山西工程技术学院&西安文理学院&广东工业大学&华侨大学&湖北工业大学工程技术学院&浙江树人大学&兵团新兴职业技术学院&四川传媒学院&武汉工程大学邮电与信息工程学院&重庆邮电大学&云南大学&四川电影电视学院&重庆理工大学&重庆移通学院&四川天府新区信息职业学院&宁波大学&江西财经大学&四川音乐学院&无锡城市职业技术学院&超管推荐||颜值||文化&企鹅直播&数码科技&社会人文&汽车&科普&纪录片&斗鱼购物&成年教育||派对&心动FM.&一起玩&开黑车队&点唱&CP聊天&交友||语音交友&音乐之声&连麦互动&娱乐开黑||星星点灯&正能量||赛车竞技||京斗云",
+ "筛选子分类替换词": "LOL&rmyx&CF&SuperPeople&CFHD&COD&DNF&DOTA2&How&CSGO&VALORANT&ydzhy&mszb&wowclassic&dota2rpg&cq&Popkart&wyyx&SC&FTG&Overwatch&DOTA&WOW&JX3&EudemonsOnline&MC&cjdmj&mxd&sanguosha&MHXYOL&tianya&jtlq&NBA2KOL2&qqfcdy&AVA&jsyx&qipai&FOL4&rmwy&zxsj&qgflpc&APEX&PathofExile&JW3YQ&nsh&HOTS&NZ&TKSJ&wfws&wszktp&CS&DIABLO&msg2&cqsj&fzscjh&DotaUnderlords&swdnb&qxzl&blzy&roe&wddnb&Seasun&FF14&WYZY&BladeSoul&Warframe&DragonNest&tjxb&gjqtwlb&XYCQ&shentu&GuildWars2&gdyxq&rzcdz2&rpgwyzq&zhuxian3&Artifact&DYYX&xajhol&MXD2&WJZQ&BattleTeams&dzs&AION&jingsu&JYZJ&wdqy&FPSOL&jwt&tianxai&dftq&hjlm&ppt&wxy&MG&BBQQ&youxizhuangji&ONLINE&cszc&tianyu&zhengtu2&qqxw&tyss&dtws&qhyx&hzsj&mjdj&srbxs&MHol&hy&scjj&sgxq&ald&TencentGame&EVE&rxcqhjsgb&xxsj2&Anarea&qhcs&CHD&YLZT&YHZR&ZYLQ&LQYXZ&LQ&FYZ&QAYXZ&HJDT&XYXSD&XCCS&SQYX&JYZJ2&SHYX&TYWY&MD&KGZ&LDRS&TDOTK&CSBYOL&dhxy2&lr&hbq&cqzm&fmz&mxsjpc3&hzyz2&xfhzl&ggws&llzj&bbcs&tianzijian&rxjhol&xsxy&qn3&xyqy&tkzc&klxy&nycs&ldj&xthyj&jfzr1&wh2pc&qjsjsun&dczg&xsl1&jxsj2pc&zhpc&dt2pc&hxsypc&ssczpc&lrdjpc&wlqxzpc&plhjpc&klbq&ptyj&jyjh&sgjq&LostArk&xy3&zjzz&SEYX&longvinter&g_bliz&BBR&HypeSquad&cw4bxnfq&VEILEDEXPERTS&WHEREWINDSMEET&THEFINALS&Dysterra&lqgs&NBA2KOL&Tarisland&zzonline&KartRiderDrift&EternalLegend&ARCR&TheReturnofLegend&GOTPC&AlienMarauder&TheFront&DeceiveInc&TheDivision2||TVgame&AC&Mario&EFT&MY2&wu&EvilDead&Horror&hydbk&jjq&lhcm&MountAndBlade&ZL&DontStarve&qjfs&classic&BF&yxshz&ATLAS&AoT&NBA2K&OT&Blood&Human&Enter&RimWorld&gmly&bxysg&DMC&WRBZ&PAL&Uncharted&TLoZ&WWZ&zq&cg&Shenmue&sg&ACS&P5&Splatoon&SMO&Sangokushi&StarCitizen&FF&MiddleEarth&Conan&TWD&Subnautica&SANGO&SoD2&Bor&LoF&Banner&Innocence&Doraemon&GKB&Ghost&bqzkn&Journey&fs&twhj&Scum&zdfw&Isaac&CVI&NIOH&ONI&TAB&GuJian3&PSS&SpellBreak&JUMPDLD&hpkz&tyyx&hddh&nba2khljjc2&klhdt&TLOU2&PCBS&JWE&PvsZ&Spide&Gears&ZGWS&DQB2&Rem&BB&Dish&Kirby&ToW&SotC&ETwK&MYZ&DS&TPH&GK&NG&Sims&TotNS&DA&Bayonetta&JttSP&HKS&SE&SSfR&PLsGo&DriveClub&jxjs&jpfc&Overcooked&TBoD&FtS&COL&MadMax&ME&TSC&DiRT&BTS&Crew&DevilMayCry5&Spore&DD&Rime&ssjjtwo&Inside&sgzj&edwcy&Toukiden&jddj&StrangeBrigade&HoMM&Sonic&Darksiders&jjyx&MetalGear&hsjj&StarWars&ANNO&MsE&WO&OnePiece&PfP&lhzh&Hob&Ancestors&Remw&QuietMan&OPPW&SR&AitD&Alive&PftG&TW&Noita&Rome&DawnMan&ConSim&ESL&Alice&LxL&CBNST&Prey&MMX&Int&FireEmblem&Fable&Outward&Stardew&Effect&SSZSG&Heroes&SAO&BG&Ziggurat&Torchlight&CodeVein&TheEvilWithin&TES&VC&Dauntless&HoF&FoD&LostSphear&Cyberpunk&GF&CP&DQ&HXSGZ&LotF&Biomutant&Pokemon&Disgaea&TLG&NieR&Ys&Surge&JE&KingdomCome&DS3&Phantom&CoC&LiS&TDP&Celeste&GoT&WHF&TWAU&NMS&LEGOW&CapSp&TIF&Deracine&Eastward&EVOTINCTION&Firewatch&F1&RD&Genie>&PC&Ride&SRW&XCOM2&KOEINOBU&SuperMeatBoy&TWoM&SHT&sljt&Frostpunk&AoEIV&CKII&ED&MP&QB&swkj&Bright&OPWS&UH&Beholder&CFB&GE3&Onimusha&Insurgency&KH&Crackdown3&BladedFury&SSBS&Hitman&Mordhau&Rage&Wf&Control&Med&Moons&YCW&Trine&ToolsUp&Sakura&Desp&WARSAW&Otaku&Dark&Ember&KLK&Ori&2020Olympic&WRC&Aegis&DEEEER&Soulstorm&mugen&HomeWork&Football&Post&RoR&Billions&Unheard&Farm&JustDance&ArmA&Pedro&AHT&Kingdoms&Skyhill&Escapists&Oil&BioShock&Divinity&Honor&TABS&Truck&Delivery&Fugitive&mmcy&Wolves&STEEP&Survival&Crysis&FarCry&Holmes&Forager&Skylines&Earth&hdzh&Dungeon&raft&DayZ&60S&RF&DECEIT&theHunter&LC&GD&PK&DC&Cuphead&SoR&MUA&kmg&DW&Anno1800&Yww&CotN&Besiege&Worms&AlanWake&BT&Terraria&EE&Unturned&Factorio&Stellaris&WTLOL&DL&UFC&Portal&Detroit&Castlevania&RL&SpM&Halo&HB&gsczx&Doom&Naruto&JHCC&PA&TF&Kerbal&LoveSim&CookingSim&BumSim&DBX&MarioKart&SimCity&SimFarm&GoatSim&Magicka&EU&TCE&HoboToughLife&ThiefSimulator&TabletopSimulator&AceA&T99&slmmc&QCSZJ&FTL&Undertale&DRGD&CBA&PvZ&CC&BroForce&GGM&HL&Moon&Batman&Refunct&Room&Amnesia&Edith&VH&Shadow&AWO&YJSL&PlanetZoo&TWSJ&LO&VRChat&RichMan&LM&MST&SOSRIMT&Raksasi&Leg&fkjy&DISTRAINT&yxl&Hacknet&SOASER&Starbound&TRS&KF2&YAZD&CH&Kingdom&BCZH&ES2&Mafia&BS&DFZ&swn&BAT&CW&BD2&NB&DDDA&RK&NTF&FFC&NW&HUMANKIND&CT&IR&DBZ&MIKU&BE&THS&MA&Wasteland&BLYWD&OPM&Raji&HERO&PH&Ghostrunner&DRG&mega&Samurai&Forest&kenshi&Hades&Hurtworld&JLDSK&YZBL>FO&fcptdl&jsjc&biped&INVAXION&jjygqsjb&Unrailed&NA&Morta&Moonlighter&Wizard&UnderMine&longya&OG&WJSJ&UE&MFS&CPLR&SHC&BYLM&TMQY&DYZR&RFG&ZCXD&CJR&NTB&TLDG&TJPP&MKKE&HJXD&BNG&GH&SF&METRO&REND&PB&YL&WWPC&ISI&WLOM&TFINF&TCSCB&JS&LMSH&TISLE&BJZD&ygzbdsh&JJYS&DYQZ&CDXQ&hh3&lgzljsj&gcyx&cscyj&czsj&dxc&DYYM&FCDR&ftxl&jtzz&krhc&lmzz&pxsj&FBSM&RJDY&tldl&wglwjz&WPYX&WDZY&xxgbsxz&yxwy&Squad&zzxw&zjsjc&ZJDZY&WZDJ&LUNA&DXM&temtem&ECO&bmcs&FWF&RG&dwlp&dushen&FGSK&FKYS&hdqs&HJMS&jldld&JY&jshmgc&JTG&QL&GZ&mgljsyc&mwsc&KM&qljzz&Depth&SHSD&SLKS&stjk&TTZL&AZ&XZZZ&xydg&YSCQ&YWGD&AUDIOS&SSHD&YYJL&SAS&DirtyBomb&zyzxcdjl&zcjnh&AL&CSZW&ZZT&SRS&Corr&Zom4&GAA&WP&OnAir>WJ&Hellpoint&MO&FGJP<H&BP&FT&Mara&9M&Skul&TMS&JWJL&Neov&WOH&SP&RQFST&ZJJT&SPAZ&Witch&Bunny&Rat&HS&UCH&RFA&CARP&NFB&LJGF&ZE&TP&AST&GCFW&SZDXC&TCSW&MYDL&ALWD&CMD&CA&DITF&CZDL&LATG&FWGF&MLQJ&HAL&GNXD&IoD&Wanba&TRDS&SKYHILLHW&EtG&PAQK&Oth&YJYG&MZSK&BeatMe&HSKN&DMR&Psy&VTLN&ZZCJ&DAH&hmbb&Cl&BSPBR&HWCT&Par&Ret&Dis&North&CarFb&Sur&TWR&Rec&MH&CotDG&Outriders&YYG&LZLM&IRVW&Spe&V4&JXHSJ&TX&ANNIE&Endzone&CHG51&TW101&JSZS&RTGD&WXJS&DGZ&ST&Eden&XKD&COMM&TOR&DLSHZ&zjsp&cqsw&drjh&GA&longhun&Embr&CTS&TTS&WLZJH&YCQ&Astroneer&yxgl&zazg&SBT&XYG&nztq&mfjt&ATS&Titanfall&dddzz&MCS&zjpd&KB2&FAGF&BA&zsqf&PBM&egzd&XYS&DA2&Di&DH&Zhelter&TG&Waking&Evan&Danger&shxd&STA&Blair&bfcz&Craftopia&BN&SJ&TR&DFH&SAR&APD&DENC&bsydhg&TA&xfgc&FPDH&KTZ&WSL&FAI&DSR&Horizon&Path&Stray&Returnal&SABA&LBP&Kena>O&JETT&GodFall&Ash&BUGSNAX&Way&ResidentEvil&Prag&BY&GWHC&Rayman&RCL&PB2&GVH&ASP&LDI&TOF&ABRM&SWXH&TIS&Grift&Haven&THERIF&INMOST&OMTG&EVERSPACE&Grounded&Starmancer&Cris&Soldat2&ASFTU&Shores&Griefhelm&UTE&IH&MRP&Stronghold&Spiritfarer&Backbone&Dreamscaper&Rustler&Eldest&Superliminal&SkateBIRD&clds&ULTRAKILL&BlackBook&Liberated&TIO&GardenStory&OORTR&HELLCARD&TLS&MPMC&Genesis&FAITH&SSRT&WTNL&WINGSPAN&Popup&Chicory&Metamorphosis&FightCrab&THOM&30XX&ExoOne&Omno&Roki&Undungeon&WTPWA&Hellbound&MarsH&Mako&ROAMB&UWA&EFAS&Foregone&Ninjala&Wind&Sub&ghl&TSW&Smars&ER&FTK&XXMM&TVOEC&FallGuys&Cycle&KOF&GOIWBF&EBPPY&THPS&wuhuo&BROTN&PMTOK&CTRONC&KOARER&Cas&TVV&Gods&mwzx&NLDL&NH&Soda&xjth&RBP&pqtc&GJCJ&SDKB&GRWY&Port&FYBZC&EF&SOW&chenfu&WENT&RH&IL&Hunting&Aeolis&Valheim&CARRION&Tribe&Blight&Manor&Animals&Olija&Shell&TRUE&Voidtrain&ShadowW&Creaks&Banners&Rhythm&Necro&RHROT&Windy&Balsa&FTP&Fu&KIWF&NL&Park&xjfpj&MOF&ljcmnq&Atomi&xjxd&FIST&IF&CCC&NOTD&wljt&BU&Albion&Spel&zsjwc&WWE2Kjjc&AFATE&Monst&Uragun&SEEX&Sin&pikmin&LHZZ&MOXIN&Sakuna&Falconeer&NBUP&WDGS&DSP&Firework&GGBH&WBH&MuseDash&tszwy&Carto&ZHMR&ALTF4&FH4&Fearsurrounds&DmCDevilMayCry&SuperMarioOdyssey&SuperMario3DWorld&TheEvilWithin2&MadGamesTycoon2&FarCry6&MonsterHunterRise&HomeBehind2&DevilMayCry2&DevilMayCry3&DevilMayCry4&BlackMythWuKong&Breathedge&CIRCLEEMPIRES&Left4Dead&Nioh2&NINJAGAIDEN&TheThreeKingdoms8&THREEKINGDOMSXIV&Hitman3&ittakestwo&Outlast2&HomeSweetHome&KingdomHeartsIII&LittleNightmares2&BigBia&Revita&LoopHero&Biochemical&DivinityOS2&CyanideHappiness&PuyoPuyoletris2&splatoon2&DeadRising2&Uncharted4&StrongholdWarlords&SpacebaseStartopia&DungeonNoDungeon&EvilGenius2&CrazyWheels&MAQUETTE&SirLovelot&Scrapnaut&Everhood&Faraway&LastCloudia&Fengmanglu&ParadiseLost&Bloodroots&ExplorerYggdrasil&Armoredfront&Combatcycle&CoralIsland&STONEARENA&TheTenants&LuigisMansion3&SilentHillDownpour&SniperContracts2&TotalWarWARHAMMER&DeadRising1&SilentHill2&TheSlormancer&FarmManager&Wattam&IWannaMaker&NieRReplicant&NigateTale&WantedRacoon&TheSignifier&Stela&ENCODYA&ThePathless&AtDeadOfNight&TheShattering&MaidofSker&Taur&Obyeme&ThroughDarkest&ADJUDICATOR&HyperParasite&VaporumLockdown&PumpkinJack&The3rdBuilding&112Operator&Tinkertown&Relicta&ChristmasTina&KATANAKAMI&TheComplex&TTIsleofMan2&GearsTactics&PathOfWuxia&BattleforBikini&Disintegration&CuriousExpedition2&LastRun&Odyssey&DeadRising4&AmongThieves&DrakesDeception&Battlefront&UltimateADOM&DeadAge2&Moonray&Kandagawa&FASTFURIOUS&SpiritFarerlhlr&DEEMOReborn&Visage&Accident&DoorKickers2&DoorKickers&TetrisEffect&RollerCoaster3&JustDieAlready&SDGundamG&Hood&TouHou&EarthsDawn&LaraCroftGO&FateEXTELLA&DYINGReborn&LifeGoesOn&VRWorlds&SummerLesson&FairyFencerF&WorldofFF&CentralFiction&Aragami&LateShift&HaloWars&Bulletstorm&Planescape&Lifeline&2Dark&AnotherAdventure&BeatCop&Styx&ZeroEscape&DayofInfamy&AtelierFiris&SniperElite4&Sangokushi13&RiverCityRansom&BattleSimulator&Guardians&Toukiden2&ScrollsLegends&SenranKagura&GhostReconWildland&WhiteDay&WWE2K&TheWildEight&NightsofAzure&UntilWeDie&AtelierSophie&Splasher&HiddenFolks&SyrianWarfare&WeaponShopFantasy&CriminalGirls&LittleTriangle&TalesofBerseria&DoubleDragon4&TheDaysLongGone&Undergrowth&NineParchments&GloriaSinica&Spellforce3&Warpips&VikingsWofM&Helloneighbor&okamihd&findparadise&Gorogoa&bridgecons&ModernCombat&scpsl&Troubleshooter&GhostnGoblins&SCARLETNEXUS&GuiltyGear&WingDarkness&NHiredGun&Chivalry2&OpenCountry&BackBonejz&RuneKnights&TheLastSpell&TheRed2&ShinMegami3&RisetoGlory&Boundary&trainthree&BATTALION1944&Descenders&Meteor60&RiseIndustry&SIEGE&GoMedieval&Arid&CircleEmpiresH&TerraNil&NinoKuniII&NinoKuni&AttackonTitan2&hhrj2&GunsGore2&HiddenDragon&Higheranimals&Bookofdevil&AshofGods&GhostTale&riseofagonroa&Freeman&SWarriors5&TerraTech&TheUniversim&ResonanceofFate&DeathCathedral&SoulCalibur6&G2Fighter&NotFeedMonkeys&NinetoFive&LabyrinthCity&GuJianqitan3&SunsetOverdrive&PhantomAbyss&IncredibleMandy&RebornCity&BattleFantasy5&SteelRats&KenshiJS&GRIS&gujianyongye&ATOMRPG&EdgeEternity&Beholder2&Below&IrisFall&BloodySpell&DESOLATE&Battlefleet2&Ys9&OrcsDie3&EldestSouls&SniperEliteVR&ForgotCity&TheGreatAce&LastStop&UnboundWorlds&OutofLine&Quarantine&BoomerangX&jointhearmy&WorldforTwo&Stonehearth&CityofGod&TransportFever2&MechWarrior5&SayonaraWild&DJMAXRESPECT&ToolUP&PICOPARK&Brightmemory&DeathsDoor&godsabove&MedievalWars&AOTennis2&TheWhiteDoor&AlphaOne&HeavenDust&RogueCompany&HajimariNOKiseki&Battlefiel&SkywardSword&KingsBounty2&AirtightCity2&GRIME&Patron&Theyarehere&BookofTravels&TALEOFJADE&NightBook&Psychonauts2&FireteamElite&TwelveMinutes&Road96&FORECLOSED&ReshapingMars&DrawGuess&RiMSRacing&NeverReturn&SoulDelivery&theblackbook&Lamentum&Glitchpunk&Back4Blood&Wushu2&TalesofArise&LEMNISGATE&AstriaAscending&TribesofMidgard&Townscaper&Demoncounterattack&ShanHeFuYaoLu&FlingtotheFinish&TheBigconline&Keyword&Listentothewind&Aragami2&Dwerve&Bloodhunt&DeathlyStillness&LifeRestart&TailsofIron&KimtesunoYaiba&GuardiansGalaxy&JianXiaTu&Lostjudgment&mythofempires&RescueParty&BlueProtocol&BLUEREFLECTION&ELDENRING&DARKPICTURESHOUSE&MaidenofBlackWater&GROWINGUP&INTERACTIVEPARTY&TANDEMATALEOFSHADO&BrilliantDiamond&RidersRepublic&Inscryption&BreakingBox&TheRiftbreaker&SettlementSurvival&IdolmasterStarlit&ForzaHorizon5&IICARUS&TimeLoader&GrowSongofEvertree&CenturyAgeofAshes&LiuYin&SyberiaWorldBefore&TavernMaster&CALLOFDUTYCOD&ProntyFishyAdventu&AgeofDarknessFinal&FateSeekerII&HaloInfinite&VoiceOfCards&JurassicWorld&SmurfsMission&LegendofTianding&LensIsland&Moncage&TheLegendofNayutaB&RuneFactory4&ThunderTierOne&ShinSangokumusou8E&TheLegendofHeroesZ&Propnight&TrashSailors&InternetCS&WeirdWest&TheAnacrusis&ExpeditionsRome&DiplomacyNotOption&PokemonArceus&TheDayBefore&HeavenDust2&WordGame&ForbiddenWest&DyingLight2&Borderlands3&GodofWarRagnarok&HiddenDeep&SIFU&Undecember&SHOWAAMERICANSTORY&TinyTina&DreadHunger&VampireSurvivors&XIAYIXING&BabylonFall&STRANGEROFPARADISE&HordeCore&LEGOStarWars&FirstClassTrouble&TheForgottenLand&DivinityChronicles&PandemicTrain&FORSPOKEN&YoungSouls&TheCycleFrontier&CodeBREAK&CoreKeeper&IndiesLies&HogwartsLegacy&SANFU&TalesofWild&BountyGame&ODINValhallaRising&MidnightGhostHunt&Shenjianzhuan&ABRISS&Loopmancer&GlimmerinMirror&DuneSpiceWars&Knightfall&IceSitruuna&Clocker&TrigonSpaceStory&Lumote&GolfGang&WildcatGunMachine&Insurmountable&VELONE&GodlikeBurger&DeckofAshes&Dorfromantik&Keplerth&TwoPointCampus&HeartofChernobyl&ShenDuBuLiangTan&TrektoYomi&TheCentennialCase&GothamKnights&Starfield&YinMiDeJiaoLuo&TheJianghu&CrayonXiaoxin&SaltandSacrifice&Vampire&SecretOpera&TheQuarry&LIVEALIVE&soulhackers2&FireEmblemWarriors&DigimonSurvive&DioFieldChronicle&2089borderscape&Nightingale&Ilysia&ProjectQ&Peglin&TheSerpentRogue&PummelParty&Holomento&MetalMind&MIR4&WeWereHereF&AshesofCreation&dhjjw&sodacrisis&Outpost&MADiSON&TheBridgeCurse&Hellslave&TaikouRisshiden&Overprime&SonsOfTheForest&Marauders&Decision&Dolmen&Wildfrost&CardShark&Avatar&WarfareSimulator&yixianpai&Pwnk&VRising&NinjaTurtles&MarvelSnap&SoulDossier&CrossGate&20MinutesTillDawn&DMHDXY&ARENA&CallistoProtocol&MarioStrikers&NewPalHotel2&RomanRenaissance&StormGate&mishi&theangler&MasterDuel&XXLZZ&QFBTT&CultoftheLamb&Thymesia&PowerWash&GutsAndGoals&GhostWatchers&BATTLEALLIANC&tycoon&DGDQL&Eagarlnia&djhzclybn&NileWarriors2&EvilWest&PlayAgain&Dinkum&Rumbleverse&SpiritofIsland&Rooted&ExpeditionAgartha&ShipofFools&PlateUp&LostLight&RoboRevengeSquad&Tiandiguixu&WinterSurvival&DuneAwakening&Everywhere&LordsofFallen&SengokuDynasty&HighonLife&LiesofP&Moonbreaker&ParkBeyond&TheOutlastTrials&40KDarktide&FarthestFrontier&BloomingBusiness&Steelrising&Isonzo&Scorn&Requiem&SonicFrontiers&LastofUs&YouSuckatParking&GWYF&WanderingVillage&ACJADE&REDFALL&TEARSKINGDOM&BJXYL&Shatterline&Wolong&KAKU&AtomicHeart&FromSpace&ATLASFALLEN&Brotato&FueledUp&SundayGold&Batora&FoodTruckSimulator&BREAKOUT&shiling&DespotGame&Bibots&Warhaven&ScarletandViolet&TheFirstDescendant&Eville&BeneathOresa&MianJuGuMu&GUNGRAVEGORE&TheDevilinMe&Kingshunt&MarvelMidnightSuns&WeirdRPG&THEPERCEIVER&EvercoreHeroes&MomentinEast&SoulstoneSurvivors&McPixel3&FrozenFlame&ASTLIBRARevision&TheKnightWitch&IXION&BraveryandGreed&TheGatheringArena&zjyqk&douxian&ffjy&SJHDYX&DwarvenSkykeep&lhxxl&Kainga&GoonyaMonster&DivineKnockout&wxnn&TheWitcher&potioncraft&Spiritle&DarkandDarker&Pragmata&KTJL&Jianghu11&ARK2&ChildrenSilentown&XDefiant&OddBallers&ACMirage&WJYX&TravelerofWuxia&Warlander&LevelZero&HiFiRush&Inkulinati&WildHearts&Afterimage&ScarsAbove&Season&TaoistofLegend&CrazyforLove&PacificDrive&AnthologyofFear&Blanc&PAYDAY&FloatingLife&404GAMERESET&UnchartedWaters&CrimeBoss&AtelierRyza3&FinalFantasyXVI&StreetFighter&GUIZU&Tchia&HerosAdventure&FATALFRAME&LastEpoch&Gollum&Ravenbound&MysteryMansion&MeetYourMaker&TEKKEN8&SystemShock&Exoprimal&FlameKeeper&PrisonLife&Innchanted&LightyearFrontier&TheGreatWar&Palworld&ScreamingChicken&ForTheKing&LifebyYou&StrayBlade&SpeedStorm&YokaiWatch&FishingSimulator&Lostlands&MenofWar&InsidetheBackrooms&Eresys&DrakesOdds&HARDCORE&BBHMYZN&PJXQ&PaxDei>ZHG&MXW&KLCS&GodofRock&QSD&PetHotels&Teravit&HSLM&TheMountainKing||wzry&LOLM&hpjy&aqtw&ht&hyrz&smzhsy&HarryPotter&EGAME&mdnf&JGAME&tdsy&yuanshen&HHWRXHX&wgjx&htzx&HLMJ&wzrpg&ZGXQ&tysy&DFTK&xyzx&phone&APEXM&mhxy&qqfcsy&dwrg&hlddz&hyld&yys&LRS&jj&mhxzx&jbdj&rlybtdsjb&jddsaef&yrzx&zzq&bhxl&fydxd&cloudgame&PPKDCSY&stzb&glgs&hszz&wpzs&ChessRush&rzbxs3&sw3&mhmnz&skzq&jyyz&hhwrsyz&BWP&qqdzz&yxs&mykdb&MHXX3D&KDXLC&jw3zjjh&blct&jyjy&xxajh&mhls&lrlr&mrzh&yzs&jzpaj&JDZC&DLHGL&tcsdzz&sdsxs&wd&mlbbsy&zqnba&LXQW&rxjl&rmsy&mlzh&xcpd&jtlqsy&MNSJ&hyxd&zspms&dhxy2kdb&fifazqsj&jl&yiqilaizhuoyao&mrfz&zyhx&huoyingrenzheOL&ymjh&wmcq&wmsjsy&kof98&zzsz&mtfsy&srh&lhjx&xjcs&liuxinghudiejian&tssy&tpbsn&TTT&sqsd&kybc9&rpgsy&ttkp&yh&lje&qnyhsy&jdzc2&zzywm&jqys&cqsy&hlsj&Majsoul&ecysy&tianlongbabuonline&zt2sy&wwzw3D&wlwz&MT4&skzh&FZ&wdyz&sjdg&4399yx&shnycs&crlq&yuanqiqishi&hjolsy&hyxhn&ZWDZJS&zjz&elsfkhyj&ezfy2&swy&lzgsy&sezg&lzzqzz&xurong&ccymf&jjssjd&qjjx&skygy&yxwjdlj&dfzj&slcbsy&jszh<yx&xunxian&waddz&ttxq&wgjy&frxy&mhzx&zhyhc&bsymg&jtjs&xylz&tldk2&lzhx&qpzdj&YJDWB&jwszjdy&nzhh&jianxiaqingyuan&yhzd&qhmy&SGSSY&Roblox&dieryinhe&zqsy&yyzy&sm&jzds&wpzz&qldyxbdjz&QQxwSY&ymrdzz&qmqz2&qsmysj&lztg&TLBB&tkdjz&hyj&dlsy&qclq&zjz2spr&yqyn&sdyxl&fjdz2&arlsbd&yqlfc&mjll&fzdl&jsdj&xyjlwys&WLQP&fsbnsonline&yjnsh&jl2&ztyx&srhsy&jgjh&blr3&zmq&lyzd&ywsy&jdhcr&BLQX&cqsjsy&hwz&fkdwcscjnh&lszw&wxysy&yxasg&yhjy&qycnlzz&gdxf&csmqs&lswz&smbbxy&xjqxz4&grsm&cahsh&lqsy&ysdl&pskqy&wsm&nntg&ysswz&ftxd&gqdfzz&qtsy&qlyfz&lhj&HAIDAOJIYUAN&rxzq&mygj&lszt&ymssg&jszd&kddj&wpys&cbqft&yyjh&gmdl&xyz&diabloimmortal&ldjsy&ysj&yln&yhyx&xsmdl&gzlj&sgzzlb&mezy&slwg&kdjx&qylh&tdj&yysygw&lxfb&Disorder&ygmdzqsjs&hczs&atsj&ysczg&ryzhg&tlbbsy&zjls&dqdgzdgfy&wzq&wq&kjtxd&mxxdl&sgzhxdl&zmws&qqxd&FXBP&LZCC&zfyby&XSDQXZ&ydzz&zxsy&wxsh&fhzz&lmjx&xgczy&mhhy&zqwn&MYZREN&JNBJT&lzg2sy&bxzl&zjqx&GNSBT&QYN&wdxk&sgyx&jsz&zsgwsb&dhxysy&XZ&YZR3&kdjh&SNSGZ0&mgzz2&kxxxl&BR&zznh&zsg&hsqsl&wcfhl&xjxqysy&xydj&dcxhjycj&jrcs&xdwzx&cfxf&csxb&ynxy&xswc&SJZ&skhlr&HJJH&yzjlzl&hqxy&hdqb>ll2&bgyry&fswqg&xjqxzjy&mysy&dtwssy&tlrysy&ybyq&ybyq2&plm&yyd7rzd&tkl&bjzl&dtpk&tdydxc&JWS&LHCX&TKWD&egzdsy&zjsjsjz&fsbns&mwcjzbz&ygcq&xssh&ab&ngxs2&kbzy&tsjy&sslj&xyneg&shjh&nslm2&snxyj&snsgz&snsgz2&bksyyd&gqs&hsqj&jzdbz&mskp&qyq&sydpx&sz&shuojian&xmddz&QMXJD&qmqj2&yuanshichuanqi&dxcb2&jhzd&mxsj3&YSQTH2&hhcq<cq&txcq&wmcq1&ygcq1&yxcq&zxcq&jxqst&mxysy&mjxwzjyjj&lxywq&zmr&gjjh&jlzj&ydydja&zhjwsq&dldldszl&dldlwhjx&dldl2jstm&yxqst&tzlr&gdzz&mhjy&rmjh&lxyxt&tldk&jm&mxywk&zsjx&jzxjzh5&rydts&ahdts&gjqwlh5&rxzg&lycq&qz&sjtl&zlgl&frxxzgjbh5&shtz&sssfh5&wdcq&smcs&dcz&cllrh5&gcld&yxzbqh5&dhd&wddgh5&dmbj&cgfsl&rogqhy&csj&kyxh&qhjx&mrsc&wxs&dxcb&akdy&jylh&mwysq&wpgx&ttdbl&hdqy&gymc&xljx&dtszj&hjcj&mf&zdsnpk&bkmdrx&jszzj&qztx&smbbxsj&xxqp&jsxw&ydcs&dldl&yqklnw&pxr&kgqgj&djlwol&jjxq&dwct&tjb&jll&qjzj&wzxx&yjxx&hxjy&xxtjd&zmxyol&hdczjh2&rxsj&lzzz&oxqjw&mlqy&weplanet&btdbz&htrj&aqcssy&ydwx2y&sgzjxz&zdblh&qmzs&xyoxj_qxsy&jkxm&qmz&mmkfw&hysxzy&emmj&ysdmg&gylj&sndwz&jjals&bzfgx&xzbd&cswb&mzsyz&lrdj&lxtsxwdyq&PUBGNS&hyzz&dbzx&bbd&hlwxd&fsdmv&wzsj1&zmxy4&zmxywz&zsyj&MarvelSuperWar&LHRW&xxcz&ytzg&hjczjh&xyjjzy&lzjx&tbyl&rxhj&btxd&hzzzcz&NSHM&lyzt&zjlm&haygm&hallw&lygyd&mj&snqx&ymsd&yj&nhsywx&fhzj&rgyszyess&nsxq&xbxxz&ycyq&hlsg3&lhbj&bzyxt&alx&zswg&jdws&tlmwy&mqxq&bqdwll&Gamer&wxwy1&jdzjjb&lzsll&qcfy&mfdx2&lyxy&xksd&yyjhsy&tgbfl&fzjt&qwsk&whncd&yfdgs&bnyly&ctlyy&wats&sszm&zyj&qqlm&slsy&jhyy&WPJS&wmyzf&jubao&ycdjh&SJJQ&blhxsy&bcjh&300dzz&2047&jdzddzz&hxq&sycjc&PokemonUNITE&wjxt&ysfj&hmby&evexzqywjxh&xyzjh&gyyzl&tlgd&qxfz&fzjh&T3&zwdzjs2&msyxz&qqyx&djsyhyjs&czqst2&ycjq&ycyy&tyj&sjwy&bfzy&whrhx&mzc&modou&sdsxszyz&wdsjp&cfsyts&projectgaia&bhxy2&dldlhsdj&xbwy&yycydzj&gmlycsmz&mwdj&nnzdxsg&fzyzh&lsccz&dyqlb&cbcsdld&yjdnxsxx&wshhj&jccy&mgqy&jtzqyxsd&tyqk&xycs&dhmme&snkz2020daydh&frmsscwy&mxrjs&jmlzj&szqy&syzg&myrzx&lnzs&sgyytswj&cjjy&hjjb&qxsd&cljj&stedl&dmxkl&tgjy&hhqw&setdl&bxzd&oxmhj2&kkbh&lmz&hyrjgd&hyzzcz&jdyy&jxsj3&zhyhc2&gctx&sgwg&cbhx&fzzl&yjsws&mcdzjs&xssd&xxdyfz&wjdlglr&gjsdzz&cmsgz&sxsn&aehy&wlyxc&wmdbz&jessj&zwmgc&nyzx&synn&wsmj&zgyx&cjjlsb&qlfhl&ydxy&wzqy&jzry&djlwonline&rxjx&mncswssc&jzsgz&cfdg&tgxz&cahx&hjzgwx&cljt&fhcsg&mtyhdt&zjzc&fszx&mtj&mjfy&wzzx&ldaqxy&mjzz&hwxq&zasn&bxjh&fx&fxdsht&jsfhlc&sglhz&fknsg3&gjj&gjqtmyr&llcy&clsy&hyrzrzxsd&zhyry&mryz&zqsg2&gddtk&zcyxwy&xdldl&yqlfc2&dssc&xxhhswc&zcsg&wyddbkk&hyldtxb&xxyz&mxgj&xbbcq&sgzj2&alsdgd&wdzj&zzwg&wsddj&xczwc&wyftshz&styy&yjfb&mlgwy&amlz&mxgs&olzz5dg&ghyj&jnbg2&dhhtxwy&mrlx&wz7nhdzn&hhrj&yqcrzqzn&wgbwz4&bsjzl&ygsz&mslf&atmyzyx&xsgs&nk&chsg&atmxlol&HXDDZ&hhwm&jzymq&jtzq&qt&trssgshc&xlzz&lzzx&mxw3ol&cjhym2&wjhd&mj2&htxxj&wdqs&hyrzdfdj&yqqsxz&mxw2&mjj&tfzg&jlsg&wzfrnxn&xxwqn&pwz&ps&bcfdgs&hcrlm2&hyrj&sgzlbc&llycjh&fcptdlsy&zjtx&skqhjl&qzls&cjgzj&ddt&dhma&demmogsxl&cydgd&sklr&mmxd&gghjmx&sgzjjx&cmstg&qsfz&xjnz&dyddj&cyzj&ymqggs&lfl&zmtm&lovelivexyoxj&ysl&hesmsy&mlbblr&xzj&dject&xzjh&cfbmxj&yqcrzyzx&hjchg&xhx&dzyzcmllc&lzcq&hsahc&mlbbgl&zszz&ryxsg&zmzxynbt&dfjs&dzpd&xdmbj&XYCQSY&yhtj&byswz&mxxfd&bhxqtd&wxcy&wly2&blmn&dxcb3hzs&lszl&wlxx&tmyx&ydqsl&haygmsy&gywzsbcslmzds&ynds&jwdzg&warmsnow&mnxshx&Naraka&wqmt&ngqr&skzy&hxshz&CFSY&xtlbbsy&wszj&sklr3&bwlb4&cbjq&mrfzzmd&TOD&CQTX&mrjy&TotalFootball&yszt&atmjj&jhzd2&h&qmdgl&hhwmxzz&GunfireReborn&FlashParty&g_hysg&g_wyqt&mcdztzmwd&sgzjsy&BOTC&jql&warcraftrumble&QMPPCR&RECODM&zhsy&ipyx&blywdsy&cm&QPYX&ddhcr&warconvention&abdmxgd&jlsy&lzgsj&taptapxy&g_yhlhwx&AUDITION&slwz&lmzh&hxzz&yscqr&fdmxforager&dzxywpdj&llzjwzhpdsj&cfbmf&ymrdzz2&jhcoa&dyzl&xhbjq&zmyzp&qmhhzzmnq&zj11rgjqh&kzysqh&jws2&lczb&wjmtgl&FrostpunkSLG&ZERO&wzwxq&dhpx&srjh&Yanglegeyang&lwzj&xxyg&SpaceLeaperCocoon&SLG&Infinitykingdom&DHGB&tszz&IslandAliance&hoopheroes&MetalSlug&g_ddtdmx&sgzjl&g_jyhx&BJHL&zdwj&g_sgzzqb&yqcrsj&GooseDuck&rzggl&SuperSus&tlbb2flzt&wzcq&P5X&g_bj&mwx&DHUH&ZOOBA||ecy&yqk&XX&music&HW&ms&ip&xdpd&yinyu&dance&QSH&dtxs&yltj&xy&ysny&WHFZ&WHTYXY&HBDX&HAU&SUFE&CCNU&WIT&HBUE&WUT&HU&WVCSE&HAFA&WUB&WSU&WRVCT&JU&WHU&HUST&HEUET&BSU&BCU&SCMZU&XDU&NEU&DMU&CUGWH&ECJU&SJU&NU&SU&CUST&HCP&WHC&JCMAMC&JMZYXY&GYET&QAU&ZKY&USC&HEBUST&SDADA&BUAA&GXLG&BIFT&HBUT&XUST&XJNU&TSZYU&XJAU&CJXY&XGY&XLG&SHZU&XJCP&XJTYZYJSXY&XJUFE&XJMU&XJU&HENU&QLU&QUST&YRCTI&HUMC&AHPU&QU&SDJTXY&HIE&SXIT&XAWL&GHUT&HQU&HUTETC&ZSU&BTXX&SUMC&WITPT&CUPT&YNU&SCFTC&CQUT&CUMC&TIVC&NBU&JUFE&SCCM&WCCVT&g_cgtj||yz||wh&qezb&smkj&shrw&car&kepu&jlp&DYGW&jiaoyu||paidui&DIANT&yiqiwan&KHCD&Sing&cpdd&sweettalk||yyjy&yyzs&lianmaihudong&ylkh||xxdd&znl||eracing||jdy",
+ "分类截取模式": "0",
+ "分类列表数组规则": "data.list",
+ "分类片单是否Jsoup写法": "1",
+ "分类片单标题": "roomName",
+ "分类片单链接": "rid",
+ "分类片单图片": "roomSrc",
+ "分类片单副标题": "nickname",
+ "分类片单链接加前缀": "http://huanqiuzhibo.cn/manifest/douyu.php?id=",
+ "分类片单链接加后缀": "#IILL线路$https://live.iill.top/douyu/'input'",
+ "搜索请求头参数": "User-Agent$手机",
+ "搜索链接": "https://m.douyu.com/api/search/liveRoom;post",
+ "POST请求数据": {"sk":"{wd}","offset":0,"limit":20,"did":"bf1f5579c0b2f6066af0bee200051531"},
+ "搜索截取模式": "0",
+ "搜索列表数组规则": "data.list",
+ "搜索片单是否Jsoup写法": "1",
+ "搜索片单图片": "roomSrc",
+ "搜索片单标题": "roomName",
+ "搜索片单链接": "roomId",
+ "搜索片单副标题": "nickname",
+ "搜索片单链接加前缀": "http://huanqiuzhibo.cn/manifest/douyu.php?id=",
+ "搜索片单链接加后缀": "#IILL线路$https://live.iill.top/douyu/'input'",
+ "链接是否直接播放": "1",
+ "直接播放链接加前缀": "",
+ "直接播放链接加后缀": "",
+ "直接播放直链视频请求头": "User-Agent$MXPlayer/1.86.0",
+ "是否开启手动嗅探": "1",
+ "手动嗅探视频链接关键词": "/douyu#yiandrive",
+ "手动嗅探视频链接过滤词": ".html#=http"
+}
\ No newline at end of file
diff --git a/香雅情/json/来看点播.json b/香雅情/json/来看点播.json
new file mode 100644
index 0000000..e4c55c6
--- /dev/null
+++ b/香雅情/json/来看点播.json
@@ -0,0 +1,86 @@
+{
+ "规则名": "来看点播",
+ "规则作者": "",
+ "请求头参数": "User-Agent$PC_UA#accept$text/html",
+ "网页编码格式": "UTF-8",
+ "图片是否需要代理": "0",
+ "是否开启获取首页数据": "1",
+ "首页推荐链接": "https://lkvod.org",
+ "首页列表数组规则": "body&&.fadeInUp:has(.gen-movie-img)",
+ "首页片单列表数组规则": ".public-list-box",
+ "首页片单是否Jsoup写法": "1",
+ "首页片单标题": "a&&title",
+ "首页片单链接": "a&&href",
+ "首页片单图片": ".lazy&&data-src",
+ "首页片单副标题": ".public-list-subtitle&&Text",
+ "首页片单链接加前缀": "https://lkvod.org",
+ "首页片单链接加后缀": "",
+ "分类起始页码": "1",
+ "分类链接": "https://lkvod.org/show/{cateId}--------{catePg}---.html",
+ "分类名称": "电影&剧集&综艺&动漫",
+ "分类名称替换词": "1&2&3&4",
+ "筛选数据": "ext",
+ //{cateId}
+ "筛选子分类名称": "",
+ "筛选子分类替换词": "",
+ //{class}
+ "筛选类型名称": "",
+ "筛选类型替换词": "*",
+ //{area}
+ "筛选地区名称": "",
+ "筛选地区替换词": "*",
+ //{year}
+ "筛选年份名称": "",
+ "筛选年份替换词": "*",
+ //{lang}
+ "筛选语言名称": "",
+ "筛选语言替换词": "*",
+ //{by}
+ "筛选排序名称": "最新&最热&评分",
+ "筛选排序替换词": "time&hits&score",
+ "分类截取模式": "1",
+ "分类列表数组规则": ".fadeInUp:has(.gen-movie-img)&&.public-list-box",
+ "分类片单是否Jsoup写法": "1",
+ "分类片单标题": "a&&title",
+ "分类片单链接": "a&&href",
+ "分类片单图片": ".lazy&&data-src",
+ "分类片单副标题": ".public-list-subtitle&&Text",
+ "分类片单链接加前缀": "https://lkvod.org",
+ "分类片单链接加后缀": "",
+ "搜索请求头参数": "User-Agent$PC_UA#accept$text/html",
+ "搜索链接": "https://lkvod.org/index.php/ajax/suggest?mid=1&wd={wd}&limit=10",
+ "POST请求数据": "wd={wd}",
+ "搜索截取模式": "0",
+ "搜索列表数组规则": "list",
+ "搜索片单是否Jsoup写法": "1",
+ "搜索片单图片": "pic",
+ "搜索片单标题": "name",
+ "搜索片单链接": "id",
+ "搜索片单副标题": "",
+ "搜索片单链接加前缀": "https://lkvod.org/voddetail/",
+ "搜索片单链接加后缀": ".html",
+ "链接是否直接播放": "0",
+ "直接播放链接加前缀": "",
+ "直接播放链接加后缀": "#isVideo=true#",
+ "直接播放直链视频请求头": "",
+ "详情是否Jsoup写法": "1",
+ "类型详情": "",
+ "年代详情": "",
+ "地区详情": "",
+ "演员详情": ".detail-info&&.slide-info,3&&Text!演员 :",
+ "简介详情": "#height_limit&&Text",
+ "线路列表数组规则": ".anthology-tab&&a",
+ "线路标题": "Text[排序:玉米]",
+ "播放列表数组规则": "body&&.anthology-list-play",
+ "选集列表数组规则": "li",
+ "选集标题链接是否Jsoup写法": "1",
+ "选集标题": "a&&Text",
+ "选集链接": "a&&href",
+ "是否反转选集序列": "0",
+ "选集链接加前缀": "https://lkvod.org",
+ "选集链接加后缀": "",
+ "分析MacPlayer": "0",
+ "是否开启手动嗅探": "1",
+ "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#obj/tos#video/tos#mime_type=video_mp4#x-oss-signature=",
+ "手动嗅探视频链接过滤词": ".html#=http#=https"
+}
\ No newline at end of file
diff --git a/香雅情/json/樱花动漫.json b/香雅情/json/樱花动漫.json
index c84af24..0812bfd 100644
--- a/香雅情/json/樱花动漫.json
+++ b/香雅情/json/樱花动漫.json
@@ -4,7 +4,7 @@
"请求头参数": "User-Agent$MOBILE_UA#Referer$WebView",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
- "是否开启获取首页数据": "0",
+ "是否开启获取首页数据": "1",
"首页推荐链接": "http://www.yinghuadm.cn",
"首页列表数组规则": "body&&.module-main.tab-list.active",
"首页片单列表数组规则": ".module-item",
diff --git a/香雅情/json/爱看影视.json b/香雅情/json/爱看影视.json
new file mode 100644
index 0000000..745cd03
--- /dev/null
+++ b/香雅情/json/爱看影视.json
@@ -0,0 +1,86 @@
+{
+ "规则名": "爱看影视",
+ "规则作者": "",
+ "请求头参数": "User-Agent$PC_UA#Referer$https://www.akysw.pro#accept$text/html",
+ "网页编码格式": "UTF-8",
+ "图片是否需要代理": "0",
+ "是否开启获取首页数据": "1",
+ "首页推荐链接": "https://www.akysw.pro",
+ "首页列表数组规则": "body&&.fadeInUp:has(.gen-movie-img)",
+ "首页片单列表数组规则": ".public-list-box",
+ "首页片单是否Jsoup写法": "1",
+ "首页片单标题": "a&&title",
+ "首页片单链接": "a&&href",
+ "首页片单图片": ".lazy&&data-src",
+ "首页片单副标题": ".public-list-prb&&Text",
+ "首页片单链接加前缀": "https://www.akysw.pro",
+ "首页片单链接加后缀": "",
+ "分类起始页码": "1",
+ "分类链接": "https://www.akysw.pro/index.php/api/vod?type={cateId}&class=&area=&lang=&version=&state=&letter=&page={catePg}&time=时间戳&key=md5(DS时间戳DCC147D11943AF75);post",
+ "分类名称": "电影&剧集&综艺&动漫&短剧",
+ "分类名称替换词": "1&2&3&4&20",
+ "筛选数据": "ext",
+ //{cateId}
+ "筛选子分类名称": "",
+ "筛选子分类替换词": "",
+ //{class}
+ "筛选类型名称": "",
+ "筛选类型替换词": "*",
+ //{area}
+ "筛选地区名称": "",
+ "筛选地区替换词": "*",
+ //{year}
+ "筛选年份名称": "",
+ "筛选年份替换词": "*",
+ //{lang}
+ "筛选语言名称": "",
+ "筛选语言替换词": "*",
+ //{by}
+ "筛选排序名称": "最新&最热&评分",
+ "筛选排序替换词": "time&hits&score",
+ "分类截取模式": "0",
+ "分类列表数组规则": "list",
+ "分类片单是否Jsoup写法": "1",
+ "分类片单标题": "vod_name",
+ "分类片单链接": "vod_id",
+ "分类片单图片": "vod_pic",
+ "分类片单副标题": "vod_remarks",
+ "分类片单链接加前缀": "https://www.akysw.pro/voddetail/",
+ "分类片单链接加后缀": ".html",
+ "搜索请求头参数": "User-Agent$PC_UA#accept$text/html",
+ "搜索链接": "https://www.akysw.pro/index.php/ajax/suggest?mid=1&wd={wd}&limit=10",
+ "POST请求数据": "wd={wd}",
+ "搜索截取模式": "0",
+ "搜索列表数组规则": "list",
+ "搜索片单是否Jsoup写法": "1",
+ "搜索片单图片": "pic",
+ "搜索片单标题": "name",
+ "搜索片单链接": "id",
+ "搜索片单副标题": "",
+ "搜索片单链接加前缀": "https://www.akysw.pro/voddetail/",
+ "搜索片单链接加后缀": ".html",
+ "链接是否直接播放": "0",
+ "直接播放链接加前缀": "",
+ "直接播放链接加后缀": "#isVideo=true#",
+ "直接播放直链视频请求头": "",
+ "详情是否Jsoup写法": "1",
+ "类型详情": "",
+ "年代详情": "",
+ "地区详情": "",
+ "演员详情": ".detail-info&&.slide-info,2&&Text!演员:",
+ "简介详情": "#height_limit&&Text",
+ "线路列表数组规则": ".anthology-tab&&a",
+ "线路标题": "Text",
+ "播放列表数组规则": "body&&.anthology-list-play",
+ "选集列表数组规则": "li",
+ "选集标题链接是否Jsoup写法": "1",
+ "选集标题": "a&&Text",
+ "选集链接": "a&&href",
+ "是否反转选集序列": "0",
+ "选集链接加前缀": "https://www.akysw.pro",
+ "选集链接加后缀": "",
+ "分析MacPlayer": "0",
+ "是否开启手动嗅探": "0",
+ "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#obj/tos",
+ "手动嗅探视频链接过滤词": ".html#=http#=https"
+}
\ No newline at end of file
diff --git a/香雅情/json/爱看电影.json b/香雅情/json/爱看电影.json
new file mode 100644
index 0000000..38405f1
--- /dev/null
+++ b/香雅情/json/爱看电影.json
@@ -0,0 +1,81 @@
+{
+ "规则名": "爱看电影",
+ "规则作者": "https://ikandyy.vip/",
+ "请求头参数": "User-Agent$MOBILE_UA#Referer$WebView",
+ "网页编码格式": "UTF-8",
+ "图片是否需要代理": "0",
+ "是否开启获取首页数据": "1",
+ "首页推荐链接": "https://www.ikandyy.com",
+ "首页列表数组规则": "body&&.module-main.tab-list.active",
+ "首页片单列表数组规则": ".module-item",
+ "首页片单是否Jsoup写法": "1",
+ "分类起始页码": "1",
+ "分类链接": "https://www.ikandyy.com/vodshow/{cateId}--------{catePg}---.html",
+ "分类名称": "电影&电视剧&综艺&动漫",
+ "分类名称替换词": "1&2&3&4",
+ "筛选数据": {},
+ //"筛选数据": "ext",
+ //{cateId}
+ "筛选子分类名称": "",
+ "筛选子分类替换词": "",
+ //{class}
+ "筛选类型名称": "",
+ "筛选类型替换词": "*",
+ //{area}
+ "筛选地区名称": "",
+ "筛选地区替换词": "*",
+ //{year}
+ "筛选年份名称": "",
+ "筛选年份替换词": "*",
+ //{lang}
+ "筛选语言名称": "",
+ "筛选语言替换词": "*",
+ //{by}
+ "筛选排序名称": "时间&人气&评分",
+ "筛选排序替换词": "time&hits&score",
+ "分类截取模式": "1",
+ "分类列表数组规则": "body&&.module-item",
+ "分类片单是否Jsoup写法": "1",
+ "分类片单标题": "a&&title",
+ "分类片单链接": "a&&href",
+ "分类片单图片": ".lazyload&&data-original",
+ "分类片单副标题": ".module-item-note&&Text",
+ "分类片单链接加前缀": "https://www.ikandyy.com",
+ "分类片单链接加后缀": "",
+ "搜索请求头参数": "User-Agent$MOBILE_UA",
+ "搜索链接": "https://www.ikandyy.com/vodsearch/{wd}----------{SearchPg}---.html",
+ "POST请求数据": "",
+ "搜索截取模式": "1",
+ "搜索列表数组规则": "body&&.module-item",
+ "搜索片单是否Jsoup写法": "1",
+ "搜索片单图片": ".lazyload&&data-original",
+ "搜索片单标题": ".module-card-item-title&&Text",
+ "搜索片单链接": "a&&href",
+ "搜索片单副标题": ".module-item-note&&Text",
+ "搜索片单链接加前缀": "https://www.ikandyy.com",
+ "搜索片单链接加后缀": "",
+ "链接是否直接播放": "0",
+ "直接播放链接加前缀": "",
+ "直接播放链接加后缀": "#isVideo=true#",
+ "直接播放直链视频请求头": "",
+ "详情是否Jsoup写法": "0",
+ "类型详情": "",
+ "年代详情": "",
+ "地区详情": "",
+ "演员详情": "主演:&&",
+ "简介详情": "introduction\">&&",
+ "线路列表数组规则": "#y-playList&&.module-tab-item",
+ "线路标题": "Text",
+ "播放列表数组规则": "body&&.module-play-list-content",
+ "选集列表数组规则": "a",
+ "选集标题链接是否Jsoup写法": "1",
+ "选集标题": "a&&Text",
+ "选集链接": "a&&href",
+ "是否反转选集序列": "0",
+ "选集链接加前缀": "https://www.ikandyy.com",
+ "选集链接加后缀": "",
+ "分析MacPlayer": "0",
+ "是否开启手动嗅探": "0",
+ "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
+ "手动嗅探视频链接过滤词": ".html#=http"
+}
\ No newline at end of file
diff --git a/香雅情/json/番茶动漫.json b/香雅情/json/番茶动漫.json
new file mode 100644
index 0000000..1242a59
--- /dev/null
+++ b/香雅情/json/番茶动漫.json
@@ -0,0 +1,86 @@
+{
+ "规则名": "番茶动漫",
+ "规则作者": "",
+ "请求头参数": "User-Agent$MOBILE_UA#Referer$https://www.fanchawu.cc#accept$text/html",
+ "网页编码格式": "UTF-8",
+ "图片是否需要代理": "0",
+ "是否开启获取首页数据": "1",
+ "首页推荐链接": "https://www.fanchawu.cc",
+ "首页列表数组规则": "body&&.fadeInUp:has(.gen-movie-img)",
+ "首页片单列表数组规则": ".public-list-box",
+ "首页片单是否Jsoup写法": "1",
+ "首页片单标题": "a&&title",
+ "首页片单链接": "a&&href!.html",
+ "首页片单图片": ".lazy&&data-src",
+ "首页片单副标题": ".public-list-prb&&Text",
+ "首页片单链接加前缀": "https://www.fanchawu.cc",
+ "首页片单链接加后缀": "",
+ "分类起始页码": "1",
+ "分类链接": "https://www.fanchawu.cc/index.php/api/vod?type={cateId}&class=&area=&lang=&version=&state=&letter=&page={catePg}&time=时间戳&key=md5(DS时间戳DCC147D11943AF75);post",
+ "分类名称": "TV&剧场&美漫&海外剧",
+ "分类名称替换词": "1&3&4&20",
+ "筛选数据": "ext",
+ //{cateId}
+ "筛选子分类名称": "",
+ "筛选子分类替换词": "",
+ //{class}
+ "筛选类型名称": "",
+ "筛选类型替换词": "*",
+ //{area}
+ "筛选地区名称": "",
+ "筛选地区替换词": "*",
+ //{year}
+ "筛选年份名称": "",
+ "筛选年份替换词": "*",
+ //{lang}
+ "筛选语言名称": "",
+ "筛选语言替换词": "*",
+ //{by}
+ "筛选排序名称": "最新&最热&评分",
+ "筛选排序替换词": "time&hits&score",
+ "分类截取模式": "0",
+ "分类列表数组规则": "list",
+ "分类片单是否Jsoup写法": "1",
+ "分类片单标题": "vod_name",
+ "分类片单链接": "vod_id",
+ "分类片单图片": "vod_pic",
+ "分类片单副标题": "vod_remarks",
+ "分类片单链接加前缀": "https://www.fanchawu.cc/voddetail/",
+ "分类片单链接加后缀": ".html",
+ "搜索请求头参数": "User-Agent$MOBILE_UA#accept$text/html",
+ "搜索链接": "https://www.fanchawu.cc/vodsearch/-------------.html?wd={wd}",
+ "POST请求数据": "wd={wd}",
+ "搜索截取模式": "1",
+ "搜索列表数组规则": "body&&.public-list-box",
+ "搜索片单是否Jsoup写法": "1",
+ "搜索片单图片": "img&&data-src",
+ "搜索片单标题": "a&&title",
+ "搜索片单链接": "a&&href",
+ "搜索片单副标题": ".public-list-prb&&Text",
+ "搜索片单链接加前缀": "https://www.fanchawu.cc",
+ "搜索片单链接加后缀": "",
+ "链接是否直接播放": "0",
+ "直接播放链接加前缀": "",
+ "直接播放链接加后缀": "#isVideo=true#",
+ "直接播放直链视频请求头": "",
+ "详情是否Jsoup写法": "1",
+ "类型详情": "",
+ "年代详情": "",
+ "地区详情": "",
+ "演员详情": ".detail-info&&.slide-info,2&&Text!演员:",
+ "简介详情": "#height_limit&&Text",
+ "线路列表数组规则": ".anthology-tab&&a",
+ "线路标题": "Text",
+ "播放列表数组规则": "body&&.anthology-list-play",
+ "选集列表数组规则": "li",
+ "选集标题链接是否Jsoup写法": "1",
+ "选集标题": "a&&Text",
+ "选集链接": "a&&href",
+ "是否反转选集序列": "0",
+ "选集链接加前缀": "https://www.fanchawu.cc",
+ "选集链接加后缀": "",
+ "分析MacPlayer": "0",
+ "是否开启手动嗅探": "1",
+ "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos#obj/tos#com/tos-cn",
+ "手动嗅探视频链接过滤词": ".html#=http#=https"
+}
\ No newline at end of file
diff --git a/香雅情/json/看影网.json b/香雅情/json/看影网.json
new file mode 100644
index 0000000..b8eb05d
--- /dev/null
+++ b/香雅情/json/看影网.json
@@ -0,0 +1,81 @@
+{
+ "规则名": "看影网",
+ "规则作者": "",
+ "请求头参数": "手机",
+ "网页编码格式": "UTF-8",
+ "图片是否需要代理": "0",
+ "是否开启获取首页数据": "1",
+ "首页推荐链接": "https://www.kanyingv.com",
+ "首页列表数组规则": "body&&.myui-vodlist",
+ "首页片单列表数组规则": "li",
+ "首页片单是否Jsoup写法": "1",
+ "分类起始页码": "1",
+ "分类链接": "https://www.kanyingv.com/so/{cateId}/-{by}------{catePg}---/",
+ "分类名称": "电影&电视剧&综艺&动漫",
+ "分类名称替换词": "movie&tv&variety&anime",
+ "筛选数据": {},
+ //"筛选数据": "ext",
+ //{cateId}
+ "筛选子分类名称": "",
+ "筛选子分类替换词": "",
+ //{class}
+ "筛选类型名称": "",
+ "筛选类型替换词": "*",
+ //{area}
+ "筛选地区名称": "",
+ "筛选地区替换词": "*",
+ //{year}
+ "筛选年份名称": "",
+ "筛选年份替换词": "*",
+ //{lang}
+ "筛选语言名称": "",
+ "筛选语言替换词": "*",
+ //{by}
+ "筛选排序名称": "时间&人气&评分",
+ "筛选排序替换词": "time&hits&score",
+ "分类截取模式": "1",
+ "分类列表数组规则": ".myui-vodlist&&li",
+ "分类片单是否Jsoup写法": "1",
+ "分类片单标题": "h4&&a&&Text",
+ "分类片单链接": "h4&&a&&href",
+ "分类片单图片": ".lazyload||.myui-vodlist__thumb&&style||data-original",
+ "分类片单副标题": ".pic-text&&Text",
+ "分类片单链接加前缀": "https://www.kanyingv.com",
+ "分类片单链接加后缀": "",
+ "搜索请求头参数": "User-Agent$手机",
+ "搜索链接": "https://www.kanyingv.com/search/{wd}----------{SearchPg}---/",
+ "POST请求数据": "",
+ "搜索截取模式": "1",
+ "搜索列表数组规则": ".myui-vodlist__media&&li",
+ "搜索片单是否Jsoup写法": "1",
+ "搜索片单图片": ".lazyload&&data-original",
+ "搜索片单标题": "h4&&a&&Text",
+ "搜索片单链接": "h4&&a&&href",
+ "搜索片单副标题": ".pic-text&&Text",
+ "搜索片单链接加前缀": "https://www.kanyingv.com",
+ "搜索片单链接加后缀": "",
+ "链接是否直接播放": "0",
+ "直接播放链接加前缀": "https://live.52sf.ga/huya/",
+ "直接播放链接加后缀": "#isVideo=true#",
+ "直接播放直链视频请求头": "authority$ku.peizq.online#Referer$https://play.peizq.online",
+ "详情是否Jsoup写法": "1",
+ "类型详情": "",
+ "年代详情": "",
+ "地区详情": "",
+ "演员详情": "",
+ "简介详情": ".content&&Text",
+ "线路列表数组规则": "body&&a[href^=#playlist]",
+ "线路标题": "Text",
+ "播放列表数组规则": "body&&.myui-content__list",
+ "选集列表数组规则": "li",
+ "选集标题链接是否Jsoup写法": "1",
+ "选集标题": "a&&Text",
+ "选集链接": "a&&href",
+ "是否反转选集序列": "0",
+ "选集链接加前缀": "https://www.kanyingv.com",
+ "选集链接加后缀": "",
+ "分析MacPlayer": "0",
+ "是否开启手动嗅探": "0",
+ "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
+ "手动嗅探视频链接过滤词": ".html#=http"
+}
\ No newline at end of file
diff --git a/香雅情/json/短剧五五.json b/香雅情/json/短剧五五.json
new file mode 100644
index 0000000..5e8cfdf
--- /dev/null
+++ b/香雅情/json/短剧五五.json
@@ -0,0 +1,87 @@
+{
+ "规则名": "短剧五五",
+ "规则作者": "",
+ "请求头参数": "手机",
+ "网页编码格式": "UTF-8",
+ "图片是否需要代理": "0",
+ "是否开启获取首页数据": "1",
+ "首页推荐链接": "https://www.duanju55.com",
+ "首页列表数组规则": "body&&.FeaturedList_featuredBox",
+ "首页片单列表数组规则": ".FeaturedList_featuredItem",
+ "首页片单是否Jsoup写法": "1",
+ "首页片单标题": ".FeaturedList_bookName&&Text",
+ "首页片单链接": ".FeaturedList_bookName&&href",
+ "首页片单图片": ".image_imageItem&&src",
+ "首页片单副标题": ".FeaturedList_lastChapter&&Text",
+ "首页片单链接加前缀": "https://www.duanju55.com",
+ "首页片单链接加后缀": "",
+ "分类起始页码": "1",
+ "分类链接": "https://www.duanju55.com/index.php/vod/show/{class}id/{cateId}/page/{catePg}.html",
+ "分类名称": "全部",
+ "分类名称替换词": "1",
+ //"筛选数据": {},
+ "筛选数据": "ext",
+ //{cateId}
+ "筛选子分类名称": "",
+ "筛选子分类替换词": "",
+ //{class}
+ "筛选类型名称": "都市&赘婿&战神&古代&言情&历史&脑洞&玄幻&搞笑&喜剧&萌宝&神豪&奇幻&脑洞&强者&回归&甜宠&豪门&恩怨&复仇&神医&马甲&亲情&人物&无敌&重生&闪婚&职场&商战&穿越&年代&权谋&高手&下山&悬疑&家国&虐恋&古装&时空&之旅&仙侠&欢喜&冤家&传承&觉醒&情感&逆袭&家庭",
+ "筛选类型替换词": "class/都市/&class/赘婿/&class/战神/&class/古代/&class/言情/&class/历史/&class/脑洞/&class/玄幻/&class/搞笑/&class/喜剧/&class/萌宝/&class/神豪/&class/奇幻/&class/脑洞/&class/强者/&class/回归/&class/甜宠/&class/豪门/&class/恩怨/&class/复仇/&class/神医/&class/马甲/&class/亲情/&class/人物/&class/无敌/&class/重生/&class/闪婚/&class/职场/&class/商战/&class/穿越/&class/年代/&class/权谋/&class/高手/&class/下山/&class/悬疑/&class/家国/&class/虐恋/&class/古装/&class/时空/&class/之旅/&class/仙侠/&class/欢喜/&class/冤家/&class/传承/&class/觉醒/&class/情感/&class/逆袭/&class/家庭/",
+ //{area}
+ "筛选地区名称": "",
+ "筛选地区替换词": "*",
+ //{year}
+ "筛选年份名称": "",
+ "筛选年份替换词": "*",
+ //{lang}
+ "筛选语言名称": "",
+ "筛选语言替换词": "*",
+ //{by}
+ "筛选排序名称": "时间&人气&评分",
+ "筛选排序替换词": "time&hits&score",
+ "分类截取模式": "1",
+ "分类列表数组规则": ".BrowseList_listBox&&.BrowseList_listItem",
+ "分类片单是否Jsoup写法": "1",
+ "分类片单标题": ".BrowseList_bookName&&Text",
+ "分类片单链接": ".BrowseList_bookViewCount&&href",
+ "分类片单图片": ".image_imageItem&&src",
+ "分类片单副标题": ".BrowseList_lastChapter&&Text",
+ "分类片单链接加前缀": "https://www.duanju55.com",
+ "分类片单链接加后缀": "",
+ "搜索请求头参数": "User-Agent$手机",
+ "搜索链接": "https://www.duanju55.com/index.php/vod/search/page/1/wd/{wd}.html",
+ "POST请求数据": "searchword={wd}",
+ "搜索截取模式": "1",
+ "搜索列表数组规则": ".search_searchList&&.MTagBookList_tagBookItem",
+ "搜索片单是否Jsoup写法": "1",
+ "搜索片单图片": ".image_imageItem&&src",
+ "搜索片单标题": ".MTagBookList_bookName&&Text",
+ "搜索片单链接": ".MTagBookList_intro&&href",
+ "搜索片单副标题": ".image_imageItem&&alt",
+ "搜索片单链接加前缀": "https://www.duanju55.com",
+ "搜索片单链接加后缀": "",
+ "链接是否直接播放": "0",
+ "直接播放链接加前缀": "",
+ "直接播放链接加后缀": "",
+ "直接播放直链视频请求头": "",
+ "详情是否Jsoup写法": "0",
+ "类型详情": "",
+ "年代详情": "",
+ "地区详情": "",
+ "演员详情": "",
+ "简介详情": "",
+ "线路列表数组规则": "",
+ "线路标题": "",
+ "播放列表数组规则": "body&&.CatalogList_swiperBox",
+ "选集列表数组规则": "a",
+ "选集标题链接是否Jsoup写法": "1",
+ "选集标题": "a&&Text",
+ "选集链接": "a&&href",
+ "是否反转选集序列": "0",
+ "选集链接加前缀": "https://www.duanju55.com",
+ "选集链接加后缀": "",
+ "分析MacPlayer": "0",
+ "是否开启手动嗅探": "0",
+ "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
+ "手动嗅探视频链接过滤词": ".html#=http"
+}
\ No newline at end of file
diff --git a/香雅情/json/虎牙直播.json b/香雅情/json/虎牙直播.json
new file mode 100644
index 0000000..a781974
--- /dev/null
+++ b/香雅情/json/虎牙直播.json
@@ -0,0 +1,53 @@
+{
+ "规则名": "虎牙直播",
+ "规则作者": "香雅情",
+ "请求头参数": "手机",
+ "网页编码格式": "UTF-8",
+ "图片是否需要代理": "0",
+ "是否开启获取首页数据": "1",
+ "首页推荐链接": "clan://XYQTVBox/虎牙主播.html",
+ "首页列表数组规则": "body&&.list",
+ "首页片单列表数组规则": "a",
+ "首页片单是否Jsoup写法": "1",
+ "首页片单标题": "a&&Text",
+ "首页片单链接": "a&&href",
+ "首页片单图片": "a&&data-original",
+ "首页片单副标题": "a&&desc",
+ "首页片单链接加前缀": "https://lunbo.freetv.top/huya/",
+ "首页片单链接加后缀": "#GD线路$https://www.goodiptv.club/huya/'input'",
+ "分类起始页码": "1",
+ "分类链接": "https://live.cdn.huya.com/liveHttpUI/getLiveList?iGid={cateId}&iPageNo={catePg}&iPageSize=120",
+ "分类名称": "热门&网游&单机&娱乐&手游",
+ "分类名称替换词": "2336&1&7771&1663&3203",
+ "筛选数据": "ext",
+ "筛选子分类名称": "王者荣耀&云梦之星&绝地求生&英雄联盟&星秀&吃喝玩乐&主机游戏&和平精英&穿越火线&颜值&二次元&地下城与勇士&暴雪专区&一起看&我的世界||英雄联盟&lol云顶之弈&守望先锋归来&超击突破&穿越火线&地下城与勇士&炉石传说&魔兽世界&DOTA2&CS:GO&CFHD&DOTA1&QQ飞车&问道&魔兽争霸3&逆战&梦三国&坦克世界&起凡:群雄逐鹿&神武4电脑版&堡垒之夜&英魂之刃&网游竞技&暴雪专区&射击综合游戏&军事游戏&无畏契约&逆水寒&剑灵&冒险岛&永恒之塔&诛仙3&彩虹岛Online&热血江湖&传奇&炉石战棋&龙之谷&传奇类游戏&御龙在天&QQ三国&寻仙&天谕&剑网3&枪神纪&反恐精英Online&体育游戏&星际争霸&武林外传一世琴缘&战舰世界&生死狙击2&千年3&星际战甲&铁甲雄兵&斗战神&荒野行动PC版&暗黑破坏神&九阴真经&QQ华夏&天涯明月刀&丝路传说2&大唐无双零&QQ自由幻想&战争雷霆&使命召唤:战区&NBA2KOL系列&跑跑卡丁车&命运方舟&征途&梦想世界3&刀剑英雄&激战2&新倩女幽魂&诛仙世界&流放之路&FIFA Online系列&真·三国无双OL&神泣&轩辕传奇&天翼决&大话西游2&战地之王&造梦西游OL&生死狙击&完美世界:诸神之战&QQ仙侠传&战意&反恐行动online&蜀山:初章&希望OL&完美端游系列&天下&命运2&征途2&创世战车&全球使命3&天命西游&洛奇英雄传&剑侠世界&赛尔号&泡泡堂&蜀门&劲舞团&QQ幻想&古剑奇谭OL&QQ炫舞&新飞飞(FlyFF)&新剑侠情缘&热血江湖2&天堂&装甲战争&疾风之刃&起凡游戏三国争霸&征程&FIFA Online4&极光世界 弑神传&坦克大战&QQ幻想世界&使命召唤:现代战争&奇迹世界2&鹿鼎记&QQ音速&梦幻诛仙2&诺亚传说&飞龙在天传奇&天书奇谈&成吉思汗3&全球使命&街头篮球&权力的游戏 凛冬将至 页游&新挑战&星辰变&火线精英&自在西游&黑色沙漠&起凡:群雄逐鹿HD&斗破苍穹&赤壁&刀剑2&远征Online梦想版&Project Zomboid&奇迹:传奇&逍遥江湖零&黄易群侠传2&释厄英雄&反恐精英&炫舞时代&魔侠传&神魔大陆&EVE Online&无尽战区&全面战争:竞技场&千古风流&万王之王3&冰原之战&冒险岛2&云端王国&北地物语2&梦幻龙族II&数码精灵Online&倚天Ⅱ&神话&三国&九天神话&名将三国&阿克拉什:传承&最强军团&忍者村大战2&夺宝传世&300英雄&风云龙战天下&成吉思汗怀旧版&领地人生&笑傲江湖&上古世纪&劲乐团&蜀山剑侠传&上古封神&人类必须反击&热血轩辕OL&超激斗梦境&极品飞车Online&独孤求败&威尼斯崛起&蜀山神话&圣境传说&永久基地&火瀑&圣斗士星矢ol&无限法则&仙侠世界2&坠星大陆&霸刀群侠传online&闪烁之光&龙麒&画皮世界&黎明之光&神佑&创世联盟&泰亚史诗&使命召唤:黑色行动4&御天降魔传||战神:诸神黄昏&Dread Hunger&天天吃鸡&永劫无间&主机游戏&我的世界&方舟&单机热游&互动点播&怀旧游戏&逃离塔科夫&Apex英雄&部落:上升&卧龙:苍天陨落&俄罗斯钓鱼4&怪物猎人物语&怪物猎人:崛起&骑马与砍杀系列&死亡之夜&SCUM&饥荒&艾尔登法环&荒野大镖客2&恐惧之间&使命召唤系列&星球大战系列&怪物猎人世界&森林之子&互动剧游&恐鬼症&欧洲卡车模拟&极限竞速:地平线&DayZ独立版&战地5&阿尔比恩&盗贼之海&幽灵线:东京&纸人&育碧游戏&港诡实录&漫漫长夜&三国志&只狼:影逝二度&黑与白2&其他单机&Among Us&Dark and Darker&仙剑奇侠传七&罗布乐思&归家异途&霍格沃茨之遗&仁王2&岛&帝国神话&双人成行&灵魂筹码&九霄缳神记&都市:天际线&甜蜜之家&流放者柯南&鬼谷八荒&海底大作战&帝国时代4&深岩银河:下潜&猎人:荒野的召唤&大侠立志传&英灵神殿&Stray&洛克王国&石油骚动&消逝的光芒2&非对称派对游戏&真三国无双&魔法门之英雄无敌系列&海贼王 寻秘世界&音乐游戏&任天堂专区&扫雷&全面战争:三国&战术小队&文明6&全境封锁&流星蝴蝶剑&WWE 2K&哈迪斯&刺客信条&看门狗:军团&对马岛之魂&渡神记&全面战争&精灵与萤火意志&层层恐惧&伤害世界&拾荒者&英雄连&奥奇传说&缺氧&逃生者2&美丽水世界&机械迷城&沙石镇时光&禁闭求生&帝国时代系列&宝可梦:剑盾&武装突袭&十三月&糖豆人:终极淘汰赛&幽灵行动:荒野&战锤40K:暗潮&海贼王:热血燃烧&胡闹厨房&精灵宝可梦Let's Go&紫塞秋风&雨血前传:蜃楼&小骨:英雄杀手&最终幻想7:重制版&四海兄弟&FIFA足球&奥拉星&生化3:抵抗计划&戴森球计划&足球小将&新世界&环世界&无人深空&星露谷物语&游戏王&三国群英传8&实况足球系列&神秘海域4&塞尔达传说:荒野之息&路易鬼屋3&摔跤城大乱斗&恐怖黎明&罗马复兴&马里奥专区&人间地狱&冰汽时代&刺客信条:英灵殿&漫威蜘蛛侠&弈仙牌&中土世界系列&奥日与黑暗森林&恶魔之魂&小缇娜的奇幻之地&Biped&攻城掠地&人类一败涂地&斩妖行&Steamcraft&Cube&割绳子&黑山:起源&闪克&街机游戏&桥梁建造师&马里奥赛车8&纪元1800&黎明之星&剑勇传奇:忍者龙剑传Z&太荒初境&复仇者联盟&死亡搁浅&FIFA 23&模拟农场&模拟人生4&细胞分裂&极品飞车22:不羁&超级战壕大战&鬼武者3&最终幻想:起源&霓虹深渊&最终幻想系列&女神异闻录&瑞奇与叮当&轩辕剑外传:云之遥&草根传奇&泰坦陨落&SCP 173&龙歌&立方体&为了吾皇||星秀&户外&一起看&二次元&虚拟偶像&旅游&娱乐天地&放映厅&交友&组队&吃喝玩乐&颜值&原创&虎牙地方&体育&虎牙文化&趣分享&美食&科技&音乐&派对&直播购||和平精英&云梦之星&王者荣耀&黎明觉醒:生机&英雄联盟手游&金铲铲之战&原神&CF手游&三国志战棋版&综合手游&新游广场&QQ飞车手游&火影忍者手游&欢乐麻将&中国象棋&三国杀&天天狼人&欢乐斗地主&暗区突围&问道手游&部落冲突&皇室战争&忍者必须死3&手游休闲&MMORPG&战争冲突&动作游戏&棋牌桌游&王者模拟战&天龙八部手游&二次元手游&虎牙领主争霸&一起玩&明日之后&狼人杀手游&COD手游&暗黑破坏神:不朽&幻塔&神武4手游&第五人格&天涯明月刀手游&御龙在天手游&三国志战略版&球球大作战&狼人杀&蛋仔派对&多乐棋牌&崩坏3&天天象棋&英雄杀&DNF手游&诛仙手游&热血江湖手游&完美世界手游&妄想山海&新笑傲江湖&崩坏:星穹铁道&指尖四川麻将&迷你世界&斗罗大陆:魂师对决&狼人杀官方&万国觉醒&天龙八部2:飞龙战天&云上城之歌&奇迹MU:觉醒&JJ棋牌&奶块&斗破苍穹手游&最强NBA&极无双2&武侠乂手游&新剑侠情缘手游&创造与魔法&逆水寒手游&阴阳师&多多自走棋&倩女幽魂手游&跑跑卡丁车手游&巅峰战舰&征途2手游&率土之滨&英雄联盟电竞经理&流星群侠传&英魂之刃口袋版&重返帝国&SKY光遇&永恒纪元:戒&剑侠世界3&征途手游&绝世仙王&青云诀2&一梦江湖&精灵盛典:黎明&红警OL&海岛奇兵&剑灵:革命&九灵神域&混沌起源&梦幻诛仙手游&天天酷跑&龙武手游&王牌战争:文明重启&时空猎人3&太古神王2&寻仙手游&天天吃鸡手机版&FIFA足球世界&方舟手游&弹弹堂手游&长安幻想&航海王:燃烧意志&风云&庆余年手游&魔力宝贝&口袋觉醒&三国战纪2&影之刃3&新斗罗大陆&仙境传说RO&北凉悍刀行&单机手游&无神之界&军棋&猎魂觉醒&灌篮高手正版授权手游&王牌竞速&行界&鸿图之下&三国战纪&斗罗大陆&新盗墓笔记&荒野乱斗&荣耀大天使&梦幻新诛仙&航海王热血航线&雀魂麻将&明日方舟&坦克世界闪击战&永劫无间手游&龙之谷2手游&轩辕传奇手游&合金弹头:觉醒&超凡先锋&机动都市阿尔法&不良人3&决战平安京&剑侠世界2手游&逃跑吧!少年&荒野行动&香肠派对&植物大战僵尸&哈利波特:魔法觉醒&剑网3:指尖江湖&火影忍者OL&天谕手游&拳皇命运&QQ炫舞手游&风云岛行动&Lost Light(萤火突击国际服)&一念逍遥&蚁族崛起&QQ华夏手游&仙魔决&绝世战魂&镇魂街:天生为王&梦幻模拟战&游戏王:决斗链接&原始征途&全民枪战2&魂斗罗:归来&我叫MT4&巅峰极速&武林外传手游&龙之谷世界&斗罗大陆-斗神再临&黑色沙漠手游&时空召唤&魔力宝贝:旅人&决斗之城&少年三国志2&掼蛋&阴阳师:百闻牌&冰火创世纪&元气骑士&龙珠觉醒&黎明之光手游&远征&绿色征途&天堂2:血盟&火炬之光:无限&梦三国手游&绝区零&腾讯桌球&虎牙吃鸡&自由之战2&重生细胞&忘川风华录&蛇蛇争霸&欢乐升级&球球英雄&我的起源&一拳超人:最强之男&太空行动&绿茵信仰&无期迷途&漫威超级战争&逍遥情缘&仙战&龙族幻想&新游推荐&荣耀新三国&摩尔庄园&天堂 W&斗罗大陆:武魂觉醒&斗破仙途&魔渊之刃&刀塔传奇&幻世九歌&深空之眼&未来之役&剑与家园&一剑斩仙&剑网1:归来&镇魂街:武神躯&虎牙球球&米加小镇&警匪杀&龙之国物语&黑暗与光明手游&小小蚁国&饭狼&零号任务&星球:重启&魂武者&一人之下&龙与家园&重写三国志&提灯与地下城&贪吃蛇大作战&战双:帕弥什&星露谷物语手游&圣斗士星矢(腾讯)&斗罗大陆2:绝世唐门&忍者龟:归来&刺客同盟&神雕侠侣手游&武动乾坤&魔龙世界&洪荒&三国志:幻想大陆&全民斩仙&小小军团&猎龙计划&新轩辕剑&圣斗士星矢:正义传说&龙族血统&航海王激战&微信小游戏&枪火重生手游&三十六计&口袋妖怪重制&三界争锋&口袋妖怪 VS&蜀山奇缘&不良人2&弹弹堂大冒险&泰拉瑞亚手游&QQ游戏大厅&另一个伊甸: 超越时空的猫&斗斗堂&狩猎时刻&刀剑契约&仙剑Q传&口袋对决&乱世王者&全民奇迹2&航海王强者之路&牧羊人之心&口袋决斗&少年三国志&秦时明月2&一拳超人正义执行&大话西游手游&风暴魔域&混沌与秩序之英雄战歌&文明与征服&君临天下(手游)&天使纪元&航海王:启航&剑侠情缘手游&太极熊猫3:猎龙&九州天空城3D&诺亚之心&星途&永不言弃3:世界&全民精灵&我的恐龙&放开那三国3&一刀流&侍魂OL&火影世界3D&坎公骑冠剑&APEX手游&神将三国&保卫萝卜3&无尽的拉格朗日&战舰猎手&极无双&奇迹:最强者&热血英雄&大唐仙灵之灵武奇缘&猫之城&光明冒险&实况足球&数码宝贝:新世纪&非人学园&傲世西游&饥荒:新家&密室逃脱&真三国无双霸&传奇天下&失落城堡手游&火影忍者:巅峰对决&传奇生物&猫和老鼠",
+ "筛选子分类替换词": "2336&9521&2793&1&1663&100044&100032&3203&4&2168&2633&2&100043&2135&1732||1&5485&2174&7467&4&2&393&8&7&862&6079&6&9&107&4615&135&489&802&1612&3227&100117&1830&100023&100043&100141&100133&5937&2952&897&2243&446&1646&683&387&983&5751&15&2060&675&1090&734&1899&900&496&1918&100135&5&1661&1947&6091&878&627&2765&591&3185&1123&1009&1878&1219&1026&1584&1862&624&5911&3959&162&3058&2715&486&915&406&1579&7749&427&100079&324&2531&159&779&2975&618&6815&2471&7217&2291&2599&861&7761&1161&3034&1597&2942&677&2741&2953&1086&432&903&2755&440&4711&2420&2419&1892&2440&1582&586&386&1966&2276&334&11&678&3683&514&4359&2897&5713&766&45&1085&488&190&77&2225&641&939&206&7945&583&553&2550&7907&1877&5423&590&179&1867&142&1319&3917&133&42&7677&863&3353&55&296&1292&2318&5901&7155&1057&925&2350&1003&1204&1524&594&959&299&1053&1153&6741&1142&534&2369&772&1132&84&640&2282&288&1046&2469&217&1824&997&385&5691&2563&365&1200&216&822&447&399&1652&3189&2723&1337&91&7455&2814&337&41&2090&2713&2977&4429&676||7771&7601&2793&6219&100032&1732&1997&100002&5907&100125&3493&5011&1318&7859&5495&7101&6479&4783&6129&4245&74&5801&4319&6679&100137&554&3519&7943&6919&6205&475&2634&1125&4371&8115&3641&7669&5257&100139&5853&2303&2270&4505&38&3069&6163&7905&6509&5771&2949&7881&5795&3019&6821&6737&4059&5941&2201&6739&2772&6571&3101&4835&3647&2906&7993&6609&7745&2864&2585&7581&6101&1599&2096&5097&2761&100087&2349&3004&2360&2650&2342&426&2796&6153&1962&6155&6039&6231&3521&5895&2288&2337&6851&232&2848&2884&3015&2365&1834&7687&6065&708&5715&465&7823&6083&2794&3016&2473&4217&4375&6045&98&6565&5809&5995&1888&2846&5931&6523&6103&7239&4865&2566&2443&412&6425&2596&2486&2924&5719&7773&3435&2430&2120&5429&5725&6149&4249&7871&1807&1946&6151&7647&5307&1737&3289&6105&5243&51&896&37&111&5999&3275&5947&5235&40&1498&7685&6121&5695&7789&2344&6607&270&7885&175&61&7653&5743&2454&3981&2455&157&230&1446&1083&14&289&2965||1663&2165&2135&2633&6055&6791&100022&6245&4079&5367&100044&2168&6861&5123&2356&4089&5883&2752&2408&3793&7785&7759||3203&9521&2336&6131&6203&7185&5489&2413&7937&100029&100052&2928&2429&1751&1671&1669&2774&1749&7209&2477&1797&2439&4041&100004&100273&7449&100197&100036&5699&2852&100091&7529&6613&3483&100049&4769&6385&6437&3135&3115&5115&2568&5619&2411&2785&6909&6209&2639&4997&2688&4921&2647&2817&4237&6007&5669&7349&7215&2683&6745&3679&6159&7929&5977&3116&3841&2775&4337&2988&7825&4929&6259&2931&7725&2598&5133&2503&2620&2502&2811&2691&7177&3927&2760&6955&3719&2646&7183&2556&6619&6009&3082&6123&4413&2624&4545&7719&5985&2672&1715&5219&5479&6411&6649&2979&4341&3873&4035&2857&6727&3943&3061&6939&2891&5953&6049&6251&6657&2675&7781&2777&6767&2561&3071&5399&6463&8109&6027&6047&6119&7093&4613&6477&5975&6181&7107&4925&4977&7579&2736&2927&6931&6507&5411&5891&3064&3150&4137&3084&3639&485&5835&3885&3901&5925&3379&2991&4695&6859&6419&7019&3743&1674&7501&6557&3481&4451&7713&3027&2824&4087&6979&3331&7797&6631&7287&2551&7573&2868&6125&6225&5019&7889&4287&3087&2649&7837&4227&2609&6399&2615&7711&2444&7465&2830&6561&6415&2680&3925&7027&5365&4629&7893&7017&7127&6881&6247&1673&4649&3160&6943&5981&7291&6381&1739&5837&1694&7199&6877&6831&2838&6843&7361&7069&7451&7269&7191&7675&6635&7803&2957&6787&7681&4317&3847&6863&7795&6547&2584&4133&4471&2521&6581&7913&3745&1781&3829&2807&1755&6029&1685&2671&3827&4421&6923&3749&2867&3459&7631&4195&2625&1670&2744&1794&2655&7849&7059&7213&6667&7133&6543&3705&1672&4761&2930&6233&6299&3881&4995&2627&1784&6951&2626&4759&2511&7071&1987&3439&2648&2621&2778&3329&6405&3549&3757&1688&3143&6291&1667&2707&1759&6641&7037&6621&1677&6809&2875&2702&3215&1764&5425&6497&7899&3741&6793&4045&1679&6491&1719&6071&6927&5403&6439&7005&2758",
+ "分类截取模式": "0",
+ "分类列表数组规则": "vList",
+ "分类片单是否Jsoup写法": "1",
+ "分类片单标题": "sIntroduction",
+ "分类片单链接": "lProfileRoom",
+ "分类片单图片": "sScreenshot",
+ "分类片单副标题": "sNick",
+ "分类片单链接加前缀": "https://lunbo.freetv.top/huya/",
+ "分类片单链接加后缀": "#GD线路$https://www.goodiptv.club/huya/'input'",
+ "搜索请求头参数": "User-Agent$手机",
+ "搜索链接": "https://search.cdn.huya.com/?m=Search&do=getSearchContent&plt=m&q={wd}&uid=0&app=11&v=4&typ=-5&start=0@&rows=40",
+ "POST请求数据": "",
+ "搜索截取模式": "0",
+ "搜索列表数组规则": "response.3.docs",
+ "搜索片单是否Jsoup写法": "1",
+ "搜索片单图片": "game_screenshot",
+ "搜索片单标题": "game_nick",
+ "搜索片单链接": "room_id",
+ "搜索片单副标题": "gameName",
+ "搜索片单链接加前缀": "https://lunbo.freetv.top/huya/",
+ "搜索片单链接加后缀": "#GD线路$https://www.goodiptv.club/huya/'input'",
+ "链接是否直接播放": "1",
+ "直接播放链接加前缀": "",
+ "直接播放链接加后缀": "",
+ "直接播放直链视频请求头": "User-Agent$MXPlayer/1.86.0",
+ "是否开启手动嗅探": "1",
+ "手动嗅探视频链接关键词": "/huya",
+ "手动嗅探视频链接过滤词": ".html#=http"
+}
\ No newline at end of file
diff --git a/香雅情/json/骚火电影VIP.json b/香雅情/json/骚火电影VIP.json
new file mode 100644
index 0000000..c450a7f
--- /dev/null
+++ b/香雅情/json/骚火电影VIP.json
@@ -0,0 +1,81 @@
+{
+ "规则名": "骚火电影VIP",
+ "规则作者": "",
+ "请求头参数": "User-Agent$MOBILE_UA#accept-language$zh-CN,zh;q=0.8",
+ "网页编码格式": "UTF-8",
+ "图片是否需要代理": "0",
+ "是否开启获取首页数据": "0",
+ "首页推荐链接": "https://saohuo.tv/",
+ "首页列表数组规则": "body&&.v_list",
+ "首页片单列表数组规则": "li",
+ "首页片单是否Jsoup写法": "1",
+ "分类起始页码": "1",
+ "分类链接": "https://saohuo.tv/list/{cateId}-{catePg}.html[firstPage=https://saohuo.tv/list/{cateId}.html]",
+ "分类名称": "电影&电视剧&动漫",
+ "分类名称替换词": "1&2&13",
+ "筛选数据": {},
+ //"筛选数据": "ext",
+ //{cateId}
+ "筛选子分类名称": "",
+ "筛选子分类替换词": "",
+ //{class}
+ "筛选类型名称": "",
+ "筛选类型替换词": "*",
+ //{area}
+ "筛选地区名称": "",
+ "筛选地区替换词": "*",
+ //{year}
+ "筛选年份名称": "",
+ "筛选年份替换词": "*",
+ //{lang}
+ "筛选语言名称": "",
+ "筛选语言替换词": "*",
+ //{by}
+ "筛选排序名称": "时间&人气&评分",
+ "筛选排序替换词": "time&hits&score",
+ "分类截取模式": "1",
+ "分类列表数组规则": ".v_list&&li",
+ "分类片单是否Jsoup写法": "1",
+ "分类片单标题": "a&&title",
+ "分类片单链接": "a&&href",
+ "分类片单图片": "img&&data-original",
+ "分类片单副标题": ".v_note&&Text",
+ "分类片单链接加前缀": "https://saohuo.tv",
+ "分类片单链接加后缀": "",
+ "搜索请求头参数": "User-Agent$手机#Accept$text/html#accept-language$zh-CN,zh;q=0.8",
+ "搜索链接": "https://saohuo.tv/s-{wd}---------{SearchPg}.html",
+ "POST请求数据": "",
+ "搜索截取模式": "1",
+ "搜索列表数组规则": ".v_list&&li",
+ "搜索片单是否Jsoup写法": "1",
+ "搜索片单图片": "img&&data-original",
+ "搜索片单标题": "a&&title",
+ "搜索片单链接": "a&&href",
+ "搜索片单副标题": ".v_note&&Text",
+ "搜索片单链接加前缀": "https://saohuo.tv",
+ "搜索片单链接加后缀": "",
+ "链接是否直接播放": "0",
+ "直接播放链接加前缀": "",
+ "直接播放链接加后缀": "",
+ "直接播放直链视频请求头": "",
+ "详情是否Jsoup写法": "1",
+ "类型详情": "",
+ "年代详情": "",
+ "地区详情": "",
+ "演员详情": "",
+ "简介详情": ".p_txt&&Text",
+ "线路列表数组规则": ".from_list&&li",
+ "线路标题": "Text",
+ "播放列表数组规则": ".play_list&&li",
+ "选集列表数组规则": "a",
+ "选集标题链接是否Jsoup写法": "1",
+ "选集标题": "a&&Text",
+ "选集链接": "a&&href",
+ "是否反转选集序列": "1",
+ "选集链接加前缀": "https://saohuo.tv",
+ "选集链接加后缀": "",
+ "分析MacPlayer": "0",
+ "是否开启手动嗅探": "0",
+ "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
+ "手动嗅探视频链接过滤词": ".html#=http"
+}
\ No newline at end of file
diff --git a/香雅情/lives/Tianmu.txt b/香雅情/lives/Tianmu.txt
index 9070654..24448c5 100644
--- a/香雅情/lives/Tianmu.txt
+++ b/香雅情/lives/Tianmu.txt
@@ -1,84 +1,86 @@
# IPv4 Streams
AMC电影,http://61.221.215.25:8800/hls/43/index.m3u8
CCTV1,http://58.57.40.22:9901/tsfile/live/0001_1.m3u8
-CCTV1,http://23.237.228.134/live5/CCTV1.m3u8
+CCTV1,http://112.46.85.60:8009/hls/501/index.m3u8
CCTV1,http://120.238.94.10:9901/tsfile/live/1018_1.m3u8
CCTV1,http://183.11.239.36:808/hls/19/index.m3u8
CCTV1,http://61.136.172.236:9901/tsfile/live/0001_1.m3u8
CCTV10,http://58.57.40.22:9901/tsfile/live/1010_1.m3u8
-CCTV10,http://27.41.245.32:801/hls/10/index.m3u8
+CCTV10,http://23.237.228.134/live5/CCTV10.m3u8
CCTV10,http://120.238.94.10:9901/tsfile/live/1028_1.m3u8
-CCTV10,http://183.11.239.36:808/hls/28/index.m3u8
-CCTV10,http://120.211.62.180:8000/hls/10/index.m3u8
+CCTV10,http://27.41.245.32:801/hls/10/index.m3u8
+CCTV10,http://61.136.172.236:9901/tsfile/live/0010_1.m3u8
CCTV11,http://58.57.40.22:9901/tsfile/live/1011_1.m3u8
CCTV11,http://69.30.246.194/live/cctv11.m3u8
CCTV11,http://120.238.94.10:9901/tsfile/live/1029_1.m3u8
CCTV11,http://120.211.62.180:8000/hls/11/index.m3u8
CCTV11,http://61.136.172.236:9901/tsfile/live/0011_1.m3u8
CCTV12,http://58.57.40.22:9901/tsfile/live/1012_1.m3u8
+CCTV12,http://23.237.228.134/live3/CCTV12.m3u8
CCTV12,http://69.30.246.194/live/cctv12.m3u8
-CCTV12,http://120.238.94.10:9901/tsfile/live/1030_1.m3u8
CCTV12,http://112.46.85.60:8009/hls/507/index.m3u8
-CCTV12,http://183.11.239.36:808/hls/30/index.m3u8
+CCTV12,http://120.238.94.10:9901/tsfile/live/1030_1.m3u8
CCTV13,http://58.57.40.22:9901/tsfile/live/1013_1.m3u8
+CCTV13,http://1.24.39.180:9003/hls/13/index.m3u8
CCTV13,http://183.11.239.36:808/hls/31/index.m3u8
CCTV13,http://120.211.62.180:8000/hls/13/index.m3u8
-CCTV13,http://8.138.7.223/【公众号:榴芒电视】/cctv13.m3u8
CCTV14,http://58.57.40.22:9901/tsfile/live/1014_1.m3u8
+CCTV14,http://23.237.228.134/live3/CCTV14.m3u8
CCTV14,http://69.30.246.194/live/cctv14.m3u8
CCTV14,http://27.41.245.32:801/hls/14/index.m3u8
CCTV14,http://120.211.62.180:8000/hls/14/index.m3u8
-CCTV14,http://61.136.172.236:9901/tsfile/live/0014_1.m3u8
CCTV15,http://58.57.40.22:9901/tsfile/live/1015_1.m3u8
+CCTV15,http://23.237.228.134/live3/CCTV15.m3u8
CCTV15,http://69.30.246.194/live/cctv15.m3u8
-CCTV15,http://183.11.239.36:808/hls/102/index.m3u8
+CCTV15,http://120.211.62.180:8000/hls/15/index.m3u8
CCTV16,http://69.30.246.194/live/cctv16.m3u8
CCTV16,http://39.152.103.17:8089/tsfile/live/1015_1.m3u8
CCTV16,http://183.11.239.36:808/hls/169/index.m3u8
CCTV17,http://58.57.40.22:9901/tsfile/live/0019_1.m3u8
+CCTV17,http://23.237.228.134/live3/CCTV17.m3u8
CCTV17,http://120.238.94.10:9901/tsfile/live/1048_1.m3u8
-CCTV17,http://120.211.62.180:8000/hls/17/index.m3u8
CCTV17,http://183.11.239.36:808/hls/35/index.m3u8
-CCTV17,http://120.76.248.139/live/bfgd/4200000204.m3u8
+CCTV17,http://120.211.62.180:8000/hls/17/index.m3u8
CCTV2,http://58.57.40.22:9901/tsfile/live/1001_1.m3u8
CCTV2,http://23.237.228.134/live5/CCTV2.m3u8
-CCTV2,http://218.17.33.178:53290/tsfile/live/1002_1.m3u8
CCTV2,http://27.41.245.32:801/hls/2/index.m3u8
+CCTV2,http://120.238.94.10:9901/tsfile/live/1019_1.m3u8
CCTV2,http://112.123.206.32:808/hls/2/index.m3u8
CCTV3,http://58.57.40.22:9901/tsfile/live/1002_1.m3u8
CCTV3,http://23.237.228.134/live5/CCTV3.m3u8
-CCTV3,http://120.238.94.10:9901/tsfile/live/1020_1.m3u8
+CCTV3,http://39.152.103.17:8089/tsfile/live/1002_1.m3u8
CCTV3,http://112.46.85.60:8009/hls/3/index.m3u8
+CCTV3,http://183.11.239.36:808/hls/91/index.m3u8
CCTV4,http://58.57.40.22:9901/tsfile/live/1003_1.m3u8
CCTV4,http://120.238.94.10:9901/tsfile/live/1021_1.m3u8
CCTV4,http://221.226.51.220:50081/newlive/live/hls/4/live.m3u8
CCTV5,http://58.57.40.22:9901/tsfile/live/1004_1.m3u8
-CCTV5,http://23.237.228.134/live5/CCTV5p.m3u8
CCTV5,http://23.237.228.134/live5/CCTV5.m3u8
-CCTV5,http://120.238.94.10:9901/tsfile/live/1022_1.m3u8
+CCTV5,http://23.237.228.134/live5/CCTV5p.m3u8
+CCTV5,http://27.41.245.32:801/hls/5/index.m3u8
CCTV5,http://183.11.239.36:808/hls/93/index.m3u8
CCTV5,http://38.75.136.137:98/gslb/dsdqpub/cctv5p.m3u8?auth=testpub
CCTV5+,http://120.238.94.10:9901/tsfile/live/1023_1.m3u8
-CCTV5+,http://120.211.62.180:8000/hls/18/index.m3u8
CCTV5+,http://61.136.172.236:9901/tsfile/live/0016_1.m3u8
+CCTV5+,http://120.211.62.180:8000/hls/18/index.m3u8
CCTV5+,http://58.57.40.22:9901/tsfile/live/1005_1.m3u8
-CCTV5+,http://222.169.85.8:9901/tsfile/live/0116_1.m3u8
CCTV5+,http://120.76.248.139/live/bfgd/4200000246.m3u8
CCTV6,http://58.57.40.22:9901/tsfile/live/1006_1.m3u8
CCTV6,http://27.41.245.32:801/hls/6/index.m3u8
-CCTV6,http://183.11.239.36:808/hls/94/index.m3u8
-CCTV6,http://182.150.23.74:808/hls/6/index.m3u8
CCTV6,http://61.136.172.236:9901/tsfile/live/0006_1.m3u8
+CCTV6,http://183.11.239.36:808/hls/94/index.m3u8
+CCTV6,http://120.76.248.139/live/bfgd/4200000065.m3u8
CCTV7,http://58.57.40.22:9901/tsfile/live/1007_1.m3u8
CCTV7,http://23.237.228.134/live5/CCTV7.m3u8
CCTV7,http://27.41.245.32:801/hls/7/index.m3u8
CCTV7,http://120.238.94.10:9901/tsfile/live/1025_1.m3u8
CCTV8,http://58.57.40.22:9901/tsfile/live/1008_1.m3u8
CCTV8,http://120.238.94.10:9901/tsfile/live/1026_1.m3u8
+CCTV8,http://27.41.245.32:801/hls/8/index.m3u8
CCTV8,http://183.11.239.36:808/hls/96/index.m3u8
CCTV9,http://58.57.40.22:9901/tsfile/live/1009_1.m3u8
+CCTV9,http://23.237.228.134/live5/CCTV9.m3u8
CCTV9,http://27.41.245.32:801/hls/9/index.m3u8
-CCTV9,http://112.46.85.60:8009/hls/509/index.m3u8
CCTV9,http://120.238.94.10:9901/tsfile/live/1027_1.m3u8
CCTV世界地理,http://111.61.236.247:9081/hls/62/index.m3u8
CCTV世界地理,http://38.75.136.137:98/gslb/dsdqpub/sjdl.m3u8?auth=testpub
@@ -92,12 +94,12 @@ CCTV第一剧场,http://61.184.46.85:9901/tsfile/live/1021_1.m3u8?key=txiptv&pla
CCTV风云足球,http://27.41.245.32:801/hls/906/index.m3u8
CCTV风云足球,http://38.75.136.137:98/gslb/dsdqpub/fyzq.m3u8?auth=testpub
CCTV风云足球,http://111.61.236.247:9081/hls/58/index.m3u8
-CHC动作电影,http://183.237.95.108:9901/tsfile/live/1006_1.m3u8?key=txiptv&playlive=0&authid=0
+CHC动作电影,http://61.184.46.85:9901/tsfile/live/1024_1.m3u8?key=txiptv&playlive=1&authid=0
CHC动作电影,http://38.75.136.137:98/gslb/dsdqpub/chcdz.m3u8?auth=testpub
+CHC家庭影院,http://61.184.46.85:9901/tsfile/live/1023_1.m3u8?key=txiptv&playlive=1&authid=0
CHC家庭影院,http://38.75.136.137:98/gslb/dsdqpub/chcjt.m3u8?auth=testpub
CHC电影,http://183.237.95.108:9901/tsfile/live/1008_1.m3u8?key=txiptv&playlive=0&authid=0
IPTV经典电影,http://43.138.0.72:35455/yy/1382754187
-万州三峡移民,http://123.146.162.24:8017/c2F0hmi/1000/live.m3u8
万州三峡移民,http://123.146.162.24:8017/c2F0hmi/1000/live.m3u8?zzhongqd
万州综合,http://123.146.162.24:8017/iTXwrGs/800/live.m3u8?zzhongqd
万荣综合,http://60.222.246.220:19433/hls1.m3u8
@@ -106,13 +108,13 @@ IPTV经典电影,http://43.138.0.72:35455/yy/1382754187
东南卫视,http://23.237.228.134/live8/gansu.m3u8
东南卫视,http://36.32.174.67:60080/newlive/live/hls/33/live.m3u8
东南卫视,http://61.136.172.236:9901/tsfile/live/0137_1.m3u8
-东南卫视,http://120.76.248.139/live/bfgd/4200000483.m3u8
-东方卫视,http://223.105.252.8/PLTV/4/224/3221228150/index.m3u8
东方卫视,http://58.57.40.22:9901/tsfile/live/1030_1.m3u8
东方卫视,http://23.237.228.134/live6/dongnan.m3u8
东方卫视,http://69.30.246.194/live/dfws.m3u8
+东方卫视,http://36.32.174.67:60080/newlive/live/hls/24/live.m3u8
中华小当家,http://61.221.215.25:8800/hls/40/index.m3u8
中华特产,http://120.76.248.139/live/bfgd/4200000158.m3u8
+乐至综合,http://175.155.106.72:89/live1/live1.m3u8
乐至综合,http://175.155.106.72:89/live1/live1.m3u8?zsicd
乐至综合,http://175.155.106.72:89/live1/live1.m3u8?zsicd;http://rmlive.lzxrmtzx.com/live1/live1.m3u8?zsicd
云南卫视,http://58.57.40.22:9901/tsfile/live/1047_1.m3u8
@@ -134,20 +136,23 @@ IPTV经典电影,http://43.138.0.72:35455/yy/1382754187
兵团八师石河子新闻综合,http://124.88.144.73:1935/live/xwzh/playlist.m3u8?zxinjd
兵团卫视,http://183.11.239.36:808/hls/7/index.m3u8
兵团卫视,http://120.76.248.139/live/bfgd/4200000124.m3u8
-内蒙古卫视,http://23.237.228.134/live8/neimenggu.m3u8
+兵团卫视,http://218.13.170.98:9901/tsfile/live/0115_1.m3u8
内蒙古卫视,http://120.76.248.139/live/bfgd/4200000110.m3u8
+内蒙古卫视,http://23.237.228.134/live8/neimenggu.m3u8
内蒙古卫视,http://60.16.0.216:5757/hls/41/index.m3u8
内蒙古卫视,http://183.11.239.36:808/hls/60/index.m3u8
内蒙古卫视,http://111.61.236.247:9081/hls/48/index.m3u8
农林卫视,http://120.76.248.139/live/bfgd/4200000122.m3u8
农林卫视,http://8.138.7.223/【公众号:榴芒电视】/农林卫视.m3u8
北京卡酷少儿,http://58.57.40.22:9901/tsfile/live/1060_1.m3u8
-北京卫视,http://223.105.252.8/PLTV/4/224/3221228115/index.m3u8
+北京卡酷少儿,http://218.13.170.98:9901/tsfile/live/1021_1.m3u8
北京卫视,http://58.57.40.22:9901/tsfile/live/1032_1.m3u8
北京卫视,http://183.11.239.36:808/hls/41/index.m3u8
-北京卫视,http://124.116.183.146:9901/tsfile/live/0122_1.m3u8
+北京卫视,http://120.211.62.180:8000/hls/35/index.m3u8
+北京卫视,http://120.76.248.139/live/bfgd/4200000083.m3u8
厦门卫视,http://38.75.136.137:98/gslb/dsdqpub/xmws.m3u8?auth=testpub
厦门卫视,http://183.11.239.36:808/hls/17/index.m3u8
+厦门卫视,http://125.42.151.45:9901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0
合肥新闻,http://112.27.235.94:8000/hls/18/index.m3u8
吉林卫视,http://58.57.40.22:9901/tsfile/live/1050_1.m3u8
吉林卫视,http://23.237.228.134/live8/jilin.m3u8
@@ -159,17 +164,16 @@ IPTV经典电影,http://43.138.0.72:35455/yy/1382754187
四川卫视,http://58.57.40.22:9901/tsfile/live/1046_1.m3u8
四川卫视,http://39.152.103.17:8089/tsfile/live/1044_1.m3u8
四川卫视,http://120.238.94.10:9901/tsfile/live/1058_1.m3u8
+四川科教,http://182.150.115.21:8030/pcgacg/pcgacg_0.m3u8
四海钓鱼,http://120.76.248.139/live/bfgd/4200000229.m3u8
大湾区卫视,http://222.128.55.152:9080/live/dwq.m3u8
大湾区卫视,http://183.11.239.36:808/hls/132/index.m3u8
天津卫视,http://58.57.40.22:9901/tsfile/live/1034_1.m3u8
天津卫视,http://23.237.228.134/live8/tianjing.m3u8
-天津卫视,http://222.169.85.8:9901/tsfile/live/0135_1.m3u8
天津卫视,http://112.46.85.60:8009/hls/44/index.m3u8
+天津卫视,http://111.61.236.247:9081/hls/29/index.m3u8
天津卫视,http://111.221.137.234:44330/tsfile/live/0132_1.m3u8?key=txiptv&playlive=0&authid=0
天津卫视,http://153.0.171.163:9901/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0
-奎屯哈萨克语,http://218.84.12.186:8002/hls/main/playlist.m3u8
-奎屯哈萨克语,http://218.84.12.186:8002/hls/main/playlist.m3u8?zxinjd
奎屯汉语,http://218.84.12.186:8001/hls/main/playlist.m3u8?zxinjd
宁夏卫视,http://58.57.40.22:9901/tsfile/live/1054_1.m3u8
宁夏卫视,http://120.238.94.10:9901/tsfile/live/1076_1.m3u8
@@ -177,79 +181,79 @@ IPTV经典电影,http://43.138.0.72:35455/yy/1382754187
宁夏卫视,http://111.61.236.247:9081/hls/51/index.m3u8
安徽卫视,http://58.57.40.22:9901/tsfile/live/1033_1.m3u8
安徽卫视,http://23.237.228.134/live8/anhui.m3u8
+安徽卫视,http://222.214.208.34:59901/tsfile/live/0130_1.m3u8
安徽卫视,http://183.11.239.36:808/hls/40/index.m3u8
-安徽卫视,http://61.136.172.236:9901/tsfile/live/0130_1.m3u8
安徽影视,http://112.27.235.94:8000/hls/24/index.m3u8
安徽综艺体育,http://112.27.235.94:8000/hls/25/index.m3u8
-山东体育,http://61.156.228.12:8154/tsfile/live/1006_1.m3u8
山东体育,http://58.57.40.22:9901/tsfile/live/1020_1.m3u8
+山东体育,http://61.156.228.12:8154/tsfile/live/1006_1.m3u8
山东体育,http://123.130.84.106:8154/tsfile/live/1006_1.m3u8
山东农科,http://58.57.40.22:9901/tsfile/live/1022_1.m3u8
-山东卫视,http://183.11.239.36:808/hls/43/index.m3u8
+山东卫视,http://36.32.174.67:60080/newlive/live/hls/42/live.m3u8
山东卫视,http://120.211.62.180:8000/hls/38/index.m3u8
-山东卫视,http://61.136.172.236:9901/tsfile/live/0131_1.m3u8
-山东卫视,http://182.150.23.74:808/hls/23/index.m3u8
+山东卫视,http://120.76.248.139/live/bfgd/4200000099.m3u8
山东卫视,http://61.156.228.12:8154/tsfile/live/0131_1.m3u8
山东文旅,http://58.57.40.22:9901/tsfile/live/1023_1.m3u8
-山东文旅,http://221.2.148.205:8154/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0
山东生活,http://58.57.40.22:9901/tsfile/live/1018_1.m3u8
山东综艺,http://58.57.40.22:9901/tsfile/live/1021_1.m3u8
山东齐鲁,http://61.156.228.12:8154/tsfile/live/1001_1.m3u8
-山西卫视,http://119.39.9.8:9901/tsfile/live/0118_1.m3u8
+山东齐鲁,http://123.130.84.106:8154/tsfile/live/1001_1.m3u8
山西卫视,http://23.237.228.134/live8/shanxi.m3u8
山西卫视,http://60.16.0.216:5757/hls/39/index.m3u8
+山西卫视,http://119.39.9.8:9901/tsfile/live/0118_1.m3u8
山西卫视,http://38.75.136.137:98/gslb/dsdqpub/sxwshd.m3u8?auth=testpub
巴音郭楞州,http://58.57.40.22:9901/tsfile/live/1024_1.m3u8
广东体育,http://120.238.94.10:9901/tsfile/live/1012_1.m3u8
广东体育,http://183.11.239.36:808/hls/2/index.m3u8
+广东体育,http://218.13.170.98:9901/tsfile/live/0019_1.m3u8
广东体育,http://74.91.26.218:82/live/gdty.m3u8
广东体育,http://116.77.33.98:44330/tsfile/live/1004_1.m3u8?key=txiptv&playlive=0&authid=0
-广东卫视,http://223.105.252.8/PLTV/4/224/3221227445/index.m3u8
广东卫视,http://58.57.40.22:9901/tsfile/live/1039_1.m3u8
广东卫视,http://23.237.228.134/live6/guangdong.m3u8
-广东卫视,http://222.169.85.8:9901/tsfile/live/0125_1.m3u8
+广东卫视,http://120.238.94.10:9901/tsfile/live/1008_1.m3u8
+广东卫视,http://183.11.239.36:808/hls/80/index.m3u8
+广东新闻,http://116.77.33.98:44330/tsfile/live/1006_1.m3u8?key=txiptv&playlive=0&authid=0
广东民生,http://183.11.239.36:808/hls/18/index.m3u8
广东珠江,http://120.238.94.10:9901/tsfile/live/1009_1.m3u8
广东珠江,http://183.11.239.36:808/hls/83/index.m3u8
广州竞赛,http://8.138.7.223/tv/gzjs.m3u8
广西卫视,http://58.57.40.22:9901/tsfile/live/1049_1.m3u8
-广西卫视,http://23.237.228.134/live6/guangxi.m3u8
广西卫视,http://23.237.228.134/live6/guizhou.m3u8
+广西卫视,http://23.237.228.134/live6/guangxi.m3u8
广西卫视,http://60.16.0.216:5757/hls/45/index.m3u8
广西国际,http://38.75.136.137:98/gslb/dsdqpub/gxgj.m3u8?auth=testpub
广西新闻,http://38.75.136.137:98/gslb/dsdqpub/gxxw.m3u8?auth=testpub
延边卫视,http://120.76.248.139/live/bfgd/4200000117.m3u8
新疆卫视,http://58.57.40.22:9901/tsfile/live/1055_1.m3u8
-新疆卫视,http://221.2.148.205:8154/tsfile/live/0110_1.m3u8
-新疆卫视,http://183.11.239.36:808/hls/65/index.m3u8
新疆卫视,http://120.76.248.139/live/bfgd/4200000150.m3u8
新疆卫视,http://61.156.228.12:8154/tsfile/live/0110_1.m3u8
+新疆卫视,http://221.2.148.205:8154/tsfile/live/0110_1.m3u8
+新疆卫视,http://38.75.136.137:98/gslb/dsdqpub/xjws.m3u8?auth=testpub
新疆卫视,http://222.169.85.8:9901/tsfile/live/0110_1.m3u8
新疆卫视,http://36.32.174.67:60080/newlive/live/hls/47/live.m3u8
新视觉,http://120.76.248.139/live/bfgd/4200000249.m3u8
朝阳新闻综合,http://120.76.248.139/live/bfgd/4200000282.m3u8
-江津新闻综合,http://222.179.155.21:1935/ch1.m3u8?zzhongqd
+欢笑剧场,http://38.75.136.137:98/gslb/dsdqpub/hxjchd.m3u8?auth=testpub
江苏卫视,http://58.57.40.22:9901/tsfile/live/1031_1.m3u8
江苏卫视,http://69.30.246.194/live/jsws.m3u8
江苏卫视,http://27.41.245.32:801/hls/42/index.m3u8
-江苏卫视,http://60.16.0.216:5757/hls/24/index.m3u8
江苏卫视,http://112.46.85.60:8009/hls/33/index.m3u8
+江苏卫视,http://60.16.0.216:5757/hls/24/index.m3u8
江西卫视,http://58.57.40.22:9901/tsfile/live/1043_1.m3u8
江西卫视,http://23.237.228.134/live8/jiangxi.m3u8
江西卫视,http://36.32.174.67:60080/newlive/live/hls/22/live.m3u8
-江西卫视,http://183.11.239.36:808/hls/44/index.m3u8
江西卫视,http://120.76.248.139/live/bfgd/4200000098.m3u8
+江西卫视,http://36.32.174.67:60080/newlive/live/hls/31/live.m3u8
河北卫视,http://58.57.40.22:9901/tsfile/live/1044_1.m3u8
河北卫视,http://23.237.228.134/live8/hebei.m3u8
河北卫视,http://36.32.174.67:60080/newlive/live/hls/36/live.m3u8
河北卫视,http://111.61.236.247:9081/hls/17/index.m3u8
河南卫视,http://58.57.40.22:9901/tsfile/live/1048_1.m3u8
-河南卫视,http://23.237.228.134/live6/henan.m3u8
河南卫视,http://120.238.94.10:9901/tsfile/live/1068_1.m3u8
河南卫视,http://120.211.62.180:8000/hls/40/index.m3u8
河南卫视,http://183.222.242.31:8088/hls/35/index.m3u8
+河南卫视,http://61.136.172.236:9901/tsfile/live/0139_1.m3u8
浙江卫视,http://58.57.40.22:9901/tsfile/live/1029_1.m3u8
-浙江卫视,http://23.237.228.134/live6/zhejiang.m3u8
浙江卫视,http://69.30.246.194/live/zjws.m3u8
海南卫视,http://58.57.40.22:9901/tsfile/live/1000_1.m3u8
海南卫视,http://120.76.248.139/live/bfgd/4200000473.m3u8
@@ -263,7 +267,7 @@ IPTV经典电影,http://43.138.0.72:35455/yy/1382754187
深圳卫视,http://58.57.40.22:9901/tsfile/live/1036_1.m3u8
深圳卫视,http://23.237.228.134/live6/shenzhen.m3u8
深圳卫视,http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8
-深圳卫视,http://113.26.202.52:1299/tsfile/live/0126_1.m3u8
+深圳卫视,http://111.61.236.247:9081/hls/38/index.m3u8
深圳卫视,http://183.11.239.36:808/hls/45/index.m3u8
深圳卫视,http://222.214.208.34:59901/tsfile/live/0126_1.m3u8
深圳卫视,http://111.221.137.234:44330/tsfile/live/1013_1.m3u8?key=txiptv&playlive=0&authid=0
@@ -272,9 +276,9 @@ IPTV经典电影,http://43.138.0.72:35455/yy/1382754187
湖北卫视,http://23.237.228.134/live6/hubei.m3u8
湖北卫视,http://120.238.94.10:9901/tsfile/live/1055_1.m3u8
湖北卫视,http://60.16.0.216:5757/hls/33/index.m3u8
-湖北卫视,http://183.11.239.36:808/hls/46/index.m3u8
-湖南卫视,http://23.237.228.134/live6/hunan.m3u8
+湖北经视,http://61.184.46.85:9901/tsfile/live/0019_1.m3u8?key=txiptv&playlive=1&authid=0
湖南卫视,http://58.57.40.22:9901/tsfile/live/1028_1.m3u8
+湖南卫视,http://23.237.228.134/live6/hunan.m3u8
湖南卫视,http://69.30.246.194/live/hnws.m3u8
玛纳斯综合,http://218.84.127.245:1026/hls/main1/playlist.m3u8
玛纳斯综合,http://218.84.127.245:1026/hls/main1/playlist.m3u8?zxinjd
@@ -306,7 +310,7 @@ IPTV经典电影,http://43.138.0.72:35455/yy/1382754187
辽宁卫视,http://23.237.228.134/live8/liaoning.m3u8
辽宁卫视,http://39.152.103.17:8089/tsfile/live/1024_1.m3u8
辽宁卫视,http://60.16.0.216:5757/hls/32/index.m3u8
-辽宁卫视,http://183.11.239.36:808/hls/47/index.m3u8
+辽宁卫视,http://120.211.62.180:8000/hls/37/index.m3u8
辽宁影视剧,http://120.76.248.139/live/bfgd/4200000070.m3u8
辽宁教育青少,http://120.76.248.139/live/bfgd/4200000075.m3u8
辽宁生活,http://120.76.248.139/live/bfgd/4200000073.m3u8
@@ -317,36 +321,33 @@ IPTV经典电影,http://43.138.0.72:35455/yy/1382754187
鄂托克旗电视台,http://110.19.181.138:10080/hls/F509Rh7GR/F509Rh7GR_live.m3u8?zneimd
重庆卫视,http://23.237.228.134/live6/chongqing.m3u8
重庆卫视,http://36.32.174.67:60080/newlive/live/hls/34/live.m3u8
-重庆卫视,http://222.169.85.8:9901/tsfile/live/0142_1.m3u8
重庆卫视,http://60.16.0.216:5757/hls/36/index.m3u8
+重庆卫视,http://111.61.236.247:9081/hls/41/index.m3u8
重庆新闻,http://38.75.136.137:98/gslb/dsdqpub/cqxw.m3u8?auth=testpub
-重庆汽摩,http://222.179.155.21:1935/ch1.m3u8
重庆汽摩,http://183.230.184.51:65500/tntv1.m3u8
+重庆汽摩,http://183.64.181.25:40023/rongchang01.m3u8
+重庆汽摩,http://123.146.162.24:8017/iTXwrGs/800/live.m3u8
+重庆汽摩,http://123.146.162.24:8017/c2F0hmi/1000/live.m3u8
重庆汽摩,http://120.76.248.139/live/bfgd/4200000168.m3u8
-重庆汽摩,http://183.230.184.51:65500/tntv1.m3u8?zzhongqd
-重庆汽摩,http://222.179.155.21:1935/ch1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
金鹰卡通,http://58.57.40.22:9901/tsfile/live/1059_1.m3u8
-金鹰卡通,http://1.197.250.30:9901/tsfile/live/1020_1.m3u8?key=txiptv&playlive=1&authid=0
-金鹰卡通,http://113.57.93.165:9900/tsfile/live/1000_1.m3u8?key=txiptv&playlive=1&authid=0
-金鹰卡通,http://101.66.195.28:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=0&authid=0
金鹰卡通,http://124.228.160.14:9901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0
+金鹰卡通,http://221.13.235.214:9901/tsfile/live/1010_1.m3u8?key=txiptv&playlive=1&authid=0
+金鹰卡通,http://101.66.195.31:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=0&authid=0
+金鹰卡通,http://101.66.198.64:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=0&authid=0
金鹰纪实,http://58.57.40.22:9901/tsfile/live/1070_1.m3u8
铜梁综合,http://183.64.174.171:40123/ch1.m3u8
铜梁综合,http://183.64.174.171:40123/ch1.m3u8?zzhongqd
陕西卫视,http://23.237.228.134/live6/sichuan.m3u8
-陕西卫视,http://222.169.85.8:9901/tsfile/live/0136_1.m3u8
-陕西卫视,http://61.156.228.12:8154/tsfile/live/0136_1.m3u8
陕西卫视,http://117.36.76.86:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0
-陕西卫视,http://222.169.85.8:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0
陕西新闻咨询,http://112.46.105.20:8009/hls/18/index.m3u8
陕西秦腔,http://112.46.105.20:8009/hls/22/index.m3u8
陕西都市青春,http://112.46.105.20:8009/hls/19/index.m3u8
陕西银龄,http://112.46.105.20:8009/hls/20/index.m3u8
青海卫视,http://58.57.40.22:9901/tsfile/live/1057_1.m3u8
-青海卫视,http://23.237.228.134/live8/shandong.m3u8
青海卫视,http://23.237.228.134/live8/qinghai.m3u8
青海卫视,http://120.238.94.10:9901/tsfile/live/1073_1.m3u8
青海卫视,http://120.76.248.139/live/bfgd/4200000111.m3u8
+青海卫视,http://111.61.236.247:9081/hls/49/index.m3u8
靖天戏剧,http://220.135.64.124:5050/li-4gtv-4gtv058/index.m3u8?proxy=true
靖天戏剧,http://220.135.64.124:5050/4gtv-4gtv058/index.m3u8?proxy=true
靖天映画,http://220.135.64.124:5050/4gtv-4gtv055/index.m3u8?proxy=true
@@ -358,9 +359,8 @@ IPTV经典电影,http://43.138.0.72:35455/yy/1382754187
黎城综合,http://111.53.96.67:8081/live/1/index.m3u8
黎城综合,http://111.53.96.67:8081/live/1/index.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
黑龙江卫视,http://58.57.40.22:9901/tsfile/live/1040_1.m3u8
-黑龙江卫视,http://23.237.228.134/live6/heilongjiang.m3u8
-黑龙江卫视,http://183.11.239.36:808/hls/48/index.m3u8
黑龙江卫视,http://61.136.172.236:9901/tsfile/live/0143_1.m3u8
黑龙江卫视,http://120.76.248.139/live/bfgd/4200000095.m3u8
+黑龙江卫视,http://61.156.228.12:8154/tsfile/live/0143_1.m3u8
# IPv6 Streams