From 19563dc7a0e30969f048cf4db2d80f3bad63cbd5 Mon Sep 17 00:00:00 2001 From: T00700 <119649139+T00700@users.noreply.github.com> Date: Mon, 30 Jan 2023 12:23:44 +0800 Subject: [PATCH] Delete TVBox_JS directory --- TVBox_JS/007影视.js | 7 - TVBox_JS/1080P.js | 7 - TVBox_JS/18av.js | 19 - TVBox_JS/360.js | 28 - TVBox_JS/360影视.js | 31 - TVBox_JS/555影视.js | 8 - TVBox_JS/555影视_2.js | 9 - TVBox_JS/88看球.js | 21 - TVBox_JS/88看球1.js | 21 - TVBox_JS/AnFuns.js | 8 - TVBox_JS/JRS看直播1.js | 22 - TVBox_JS/JS-1122.zip | Bin 240467 -> 0 bytes TVBox_JS/JS2-1128.zip | Bin 227395 -> 0 bytes TVBox_JS/JustLive.js | 50 - TVBox_JS/KUBO影视.js | 25 - TVBox_JS/LIBVIO.js | 8 - TVBox_JS/MXONE.js | 9 - TVBox_JS/Missav.js | 22 - TVBox_JS/Nike影视.js | 8 - TVBox_JS/RP影视.js | 16 - TVBox_JS/TV云播.js | 9 - TVBox_JS/alist.js | 270 -- TVBox_JS/banan.js | 19 - TVBox_JS/cokemv.js | 5 - TVBox_JS/czzy.js | 20 - TVBox_JS/ddys.js | 29 - TVBox_JS/douban.js | 168 - TVBox_JS/douban2.js | 34 - TVBox_JS/drT.js | 189 -- TVBox_JS/drpy.js | 34 - TVBox_JS/if101.js | 24 - TVBox_JS/iqiyi.js | 39 - TVBox_JS/kunyu77.js | 206 -- TVBox_JS/kunyu77_2.js | 206 -- TVBox_JS/kuyun77.js | 37 - TVBox_JS/l0l.js | 10 - TVBox_JS/lib/alist.min.js | 1 - TVBox_JS/lib/cheerio.min.js | 1 - TVBox_JS/lib/crypto-js.js | 6191 ----------------------------------- TVBox_JS/lib/drpy.js | 2115 ------------ TVBox_JS/lib/drpy.min.js | 1 - TVBox_JS/lib/drpy.ym.js | 4 - TVBox_JS/lib/drpy2.min.js | 1 - TVBox_JS/lib/util.js | 300 -- TVBox_JS/lib/yingmo.js | 1447 -------- TVBox_JS/lib/格式范例.txt | 1 - TVBox_JS/lib/模板.js | 274 -- TVBox_JS/qiumi1314.js | 91 - TVBox_JS/qiumizhibo.js | 22 - TVBox_JS/sougou.js | 33 - TVBox_JS/tengxun.js | 34 - TVBox_JS/tuxiaobei.js | 26 - TVBox_JS/tvbyunbo.js | 21 - TVBox_JS/tvfeng.js | 25 - TVBox_JS/vip影院.js | 6 - TVBox_JS/wmkk.js | 9 - TVBox_JS/xingchen.js | 8 - TVBox_JS/xinshijue.js | 18 - TVBox_JS/youku.js | 38 - TVBox_JS/ysgc.js | 4 - TVBox_JS/zhuijm.js | 6 - TVBox_JS/万能影视.js | 4 - TVBox_JS/两个BT.js | 26 - TVBox_JS/乐猪TV.js | 23 - TVBox_JS/人人影视.js | 11 - TVBox_JS/优酷.js | 38 - TVBox_JS/兔小贝.js | 26 - TVBox_JS/兔小贝_儿童.js | 62 - TVBox_JS/养端.js | 18 - TVBox_JS/凌云影视.js | 6 - TVBox_JS/剧白白.js | 7 - TVBox_JS/剧荒.js | 27 - TVBox_JS/剧迷.js | 11 - TVBox_JS/厂长资源.js | 24 - TVBox_JS/厂长资源1.js | 21 - TVBox_JS/听书网.js | 27 - TVBox_JS/吸瓜.js | 21 - TVBox_JS/喵喵.js | 22 - TVBox_JS/在线之家.js | 4 - TVBox_JS/夜空.js | 7 - TVBox_JS/大师兄影视.js | 7 - TVBox_JS/大米星球.js | 10 - TVBox_JS/天空影视.js | 9 - TVBox_JS/奇优影院.js | 13 - TVBox_JS/奇珍异兽.js | 39 - TVBox_JS/完美看看.js | 10 - TVBox_JS/小品网.js | 23 - TVBox_JS/小强迷.js | 12 - TVBox_JS/小猫咪.js | 5 - TVBox_JS/尘落影视.js | 23 - TVBox_JS/干饭影视.js | 27 - TVBox_JS/库马伊.js | 9 - TVBox_JS/影视工厂.js | 4 - TVBox_JS/快云影院.js | 24 - TVBox_JS/快看.js | 24 - TVBox_JS/抓饭体育.js | 29 - TVBox_JS/斗鱼直播.js | 29 - TVBox_JS/有声小说吧.js | 29 - TVBox_JS/朱古力.js | 17 - TVBox_JS/来看点播.js | 20 - TVBox_JS/模板.js | 158 - TVBox_JS/海盗听书.js | 45 - TVBox_JS/牛马TV.js | 9 - TVBox_JS/特狗影视.js | 10 - TVBox_JS/独播库.js | 14 - TVBox_JS/猫了个咪.js | 25 - TVBox_JS/玄天.js | 9 - TVBox_JS/玩偶姐姐.js | 18 - TVBox_JS/瓜皮TV.js | 5 - TVBox_JS/番茄影视.js | 6 - TVBox_JS/百忙无果.js | 34 - TVBox_JS/皮皮泡.js | 11 - TVBox_JS/看了么.js | 26 - TVBox_JS/看视界.js | 8 - TVBox_JS/真不卡.js | 8 - TVBox_JS/秋霞.js | 24 - TVBox_JS/胖虎影视.js | 7 - TVBox_JS/腾云驾雾.js | 34 - TVBox_JS/莫扎兔.js | 7 - TVBox_JS/菜狗.js | 32 - TVBox_JS/蓝光影院.js | 7 - TVBox_JS/蓝莓影视.js | 12 - TVBox_JS/蛋蛋赞.js | 24 - TVBox_JS/蜻蜓FM.js | 23 - TVBox_JS/豆瓣修复.js | 36 - TVBox_JS/追剧喵.js | 6 - TVBox_JS/追剧达人.js | 16 - TVBox_JS/酷云77.js | 36 - TVBox_JS/鸭奈飞.js | 6 - 129 files changed, 13699 deletions(-) delete mode 100644 TVBox_JS/007影视.js delete mode 100644 TVBox_JS/1080P.js delete mode 100644 TVBox_JS/18av.js delete mode 100644 TVBox_JS/360.js delete mode 100644 TVBox_JS/360影视.js delete mode 100644 TVBox_JS/555影视.js delete mode 100644 TVBox_JS/555影视_2.js delete mode 100644 TVBox_JS/88看球.js delete mode 100644 TVBox_JS/88看球1.js delete mode 100644 TVBox_JS/AnFuns.js delete mode 100644 TVBox_JS/JRS看直播1.js delete mode 100644 TVBox_JS/JS-1122.zip delete mode 100644 TVBox_JS/JS2-1128.zip delete mode 100644 TVBox_JS/JustLive.js delete mode 100644 TVBox_JS/KUBO影视.js delete mode 100644 TVBox_JS/LIBVIO.js delete mode 100644 TVBox_JS/MXONE.js delete mode 100644 TVBox_JS/Missav.js delete mode 100644 TVBox_JS/Nike影视.js delete mode 100644 TVBox_JS/RP影视.js delete mode 100644 TVBox_JS/TV云播.js delete mode 100644 TVBox_JS/alist.js delete mode 100644 TVBox_JS/banan.js delete mode 100644 TVBox_JS/cokemv.js delete mode 100644 TVBox_JS/czzy.js delete mode 100644 TVBox_JS/ddys.js delete mode 100644 TVBox_JS/douban.js delete mode 100644 TVBox_JS/douban2.js delete mode 100644 TVBox_JS/drT.js delete mode 100644 TVBox_JS/drpy.js delete mode 100644 TVBox_JS/if101.js delete mode 100644 TVBox_JS/iqiyi.js delete mode 100644 TVBox_JS/kunyu77.js delete mode 100644 TVBox_JS/kunyu77_2.js delete mode 100644 TVBox_JS/kuyun77.js delete mode 100644 TVBox_JS/l0l.js delete mode 100644 TVBox_JS/lib/alist.min.js delete mode 100644 TVBox_JS/lib/cheerio.min.js delete mode 100644 TVBox_JS/lib/crypto-js.js delete mode 100644 TVBox_JS/lib/drpy.js delete mode 100644 TVBox_JS/lib/drpy.min.js delete mode 100644 TVBox_JS/lib/drpy.ym.js delete mode 100644 TVBox_JS/lib/drpy2.min.js delete mode 100644 TVBox_JS/lib/util.js delete mode 100644 TVBox_JS/lib/yingmo.js delete mode 100644 TVBox_JS/lib/格式范例.txt delete mode 100644 TVBox_JS/lib/模板.js delete mode 100644 TVBox_JS/qiumi1314.js delete mode 100644 TVBox_JS/qiumizhibo.js delete mode 100644 TVBox_JS/sougou.js delete mode 100644 TVBox_JS/tengxun.js delete mode 100644 TVBox_JS/tuxiaobei.js delete mode 100644 TVBox_JS/tvbyunbo.js delete mode 100644 TVBox_JS/tvfeng.js delete mode 100644 TVBox_JS/vip影院.js delete mode 100644 TVBox_JS/wmkk.js delete mode 100644 TVBox_JS/xingchen.js delete mode 100644 TVBox_JS/xinshijue.js delete mode 100644 TVBox_JS/youku.js delete mode 100644 TVBox_JS/ysgc.js delete mode 100644 TVBox_JS/zhuijm.js delete mode 100644 TVBox_JS/万能影视.js delete mode 100644 TVBox_JS/两个BT.js delete mode 100644 TVBox_JS/乐猪TV.js delete mode 100644 TVBox_JS/人人影视.js delete mode 100644 TVBox_JS/优酷.js delete mode 100644 TVBox_JS/兔小贝.js delete mode 100644 TVBox_JS/兔小贝_儿童.js delete mode 100644 TVBox_JS/养端.js delete mode 100644 TVBox_JS/凌云影视.js delete mode 100644 TVBox_JS/剧白白.js delete mode 100644 TVBox_JS/剧荒.js delete mode 100644 TVBox_JS/剧迷.js delete mode 100644 TVBox_JS/厂长资源.js delete mode 100644 TVBox_JS/厂长资源1.js delete mode 100644 TVBox_JS/听书网.js delete mode 100644 TVBox_JS/吸瓜.js delete mode 100644 TVBox_JS/喵喵.js delete mode 100644 TVBox_JS/在线之家.js delete mode 100644 TVBox_JS/夜空.js delete mode 100644 TVBox_JS/大师兄影视.js delete mode 100644 TVBox_JS/大米星球.js delete mode 100644 TVBox_JS/天空影视.js delete mode 100644 TVBox_JS/奇优影院.js delete mode 100644 TVBox_JS/奇珍异兽.js delete mode 100644 TVBox_JS/完美看看.js delete mode 100644 TVBox_JS/小品网.js delete mode 100644 TVBox_JS/小强迷.js delete mode 100644 TVBox_JS/小猫咪.js delete mode 100644 TVBox_JS/尘落影视.js delete mode 100644 TVBox_JS/干饭影视.js delete mode 100644 TVBox_JS/库马伊.js delete mode 100644 TVBox_JS/影视工厂.js delete mode 100644 TVBox_JS/快云影院.js delete mode 100644 TVBox_JS/快看.js delete mode 100644 TVBox_JS/抓饭体育.js delete mode 100644 TVBox_JS/斗鱼直播.js delete mode 100644 TVBox_JS/有声小说吧.js delete mode 100644 TVBox_JS/朱古力.js delete mode 100644 TVBox_JS/来看点播.js delete mode 100644 TVBox_JS/模板.js delete mode 100644 TVBox_JS/海盗听书.js delete mode 100644 TVBox_JS/牛马TV.js delete mode 100644 TVBox_JS/特狗影视.js delete mode 100644 TVBox_JS/独播库.js delete mode 100644 TVBox_JS/猫了个咪.js delete mode 100644 TVBox_JS/玄天.js delete mode 100644 TVBox_JS/玩偶姐姐.js delete mode 100644 TVBox_JS/瓜皮TV.js delete mode 100644 TVBox_JS/番茄影视.js delete mode 100644 TVBox_JS/百忙无果.js delete mode 100644 TVBox_JS/皮皮泡.js delete mode 100644 TVBox_JS/看了么.js delete mode 100644 TVBox_JS/看视界.js delete mode 100644 TVBox_JS/真不卡.js delete mode 100644 TVBox_JS/秋霞.js delete mode 100644 TVBox_JS/胖虎影视.js delete mode 100644 TVBox_JS/腾云驾雾.js delete mode 100644 TVBox_JS/莫扎兔.js delete mode 100644 TVBox_JS/菜狗.js delete mode 100644 TVBox_JS/蓝光影院.js delete mode 100644 TVBox_JS/蓝莓影视.js delete mode 100644 TVBox_JS/蛋蛋赞.js delete mode 100644 TVBox_JS/蜻蜓FM.js delete mode 100644 TVBox_JS/豆瓣修复.js delete mode 100644 TVBox_JS/追剧喵.js delete mode 100644 TVBox_JS/追剧达人.js delete mode 100644 TVBox_JS/酷云77.js delete mode 100644 TVBox_JS/鸭奈飞.js diff --git a/TVBox_JS/007影视.js b/TVBox_JS/007影视.js deleted file mode 100644 index 2d3143c..0000000 --- a/TVBox_JS/007影视.js +++ /dev/null @@ -1,7 +0,0 @@ -muban.首图2.二级.tabs = '.nav-tabs.dpplay&&li'; -var rule = Object.assign(muban.首图2,{ - title:'007影视', - host:'https://www.007ts.me', - url:'/channel/fyclass-fypage.html', - searchUrl:'/search/**----------fypage---.html', -}); \ No newline at end of file diff --git a/TVBox_JS/1080P.js b/TVBox_JS/1080P.js deleted file mode 100644 index 8573254..0000000 --- a/TVBox_JS/1080P.js +++ /dev/null @@ -1,7 +0,0 @@ -var rule = Object.assign(muban.mxpro,{ -title:'1080P', -host:'https://1080p.tv', -url:'/vodshow/fyclass--------fypage---/', -searchUrl:'/vodsearch/**----------fypage---/', -class_parse:'.navbar-items li:gt(1):lt(7);a&&Text;a&&href;.*/(.*?)/', -}); diff --git a/TVBox_JS/18av.js b/TVBox_JS/18av.js deleted file mode 100644 index c69316c..0000000 --- a/TVBox_JS/18av.js +++ /dev/null @@ -1,19 +0,0 @@ -var rule = { - title:'18av', - host:'https://maa1812.com', - url:'/zh/fyclass/all/fypage.html', - headers:{ - 'User-Agent':'MOBILE_UA' - }, - timeout:5000, - class_name:'最近更新',//静态分类名称拼接 - class_url:'chinese_list',//静态分类标识拼接 - //class_parse:'ul.animenu__nav&&li;a&&Text;a&&href', - limit:5, - play_parse:true, - lazy:'', - 一级:'.posts div;.meta&&Text;img&&src;.top&&Text;a&&href', - 二级:'*', - -} - diff --git a/TVBox_JS/360.js b/TVBox_JS/360.js deleted file mode 100644 index 79c372d..0000000 --- a/TVBox_JS/360.js +++ /dev/null @@ -1,28 +0,0 @@ -var rule = { - title:'360影视', - host:'https://www.360kan.com', - homeUrl:'https://api.web.360kan.com/v1/rank?cat=2&size=9', - detailUrl:'https://api.web.360kan.com/v1/detail?cat=fyclass&id=fyid', - searchUrl:'https://api.so.360kan.com/index?force_v=1&kw=**&from=&pageno=fypage&v_ap=1&tab=all', - url:'https://api.web.360kan.com/v1/filter/list?catid=fyclass&rank=rankhot&cat=&year=&area=&act=&size=35&pageno=fypage&callback=', - headers:{ - 'User-Agent':'MOBILE_UA' - }, - timeout:5000, - class_name:'电视剧&电影&综艺&动漫', - class_url:'2&1&3&4', - limit:5, - multi:1, - searchable:2, - play_parse:true, - lazy:'js:input=input.split("?")[0];log(input);', - // 疑似t4专用的 - // lazy:'js:input={parse: 1, playUrl: "", jx: 1, url: input.split("?")[0]}', - // 手动调用解析请求json的url,此lazy不方便 - // lazy:'js:input="https://cache.json.icu/home/api?type=ys&uid=292796&key=fnoryABDEFJNPQV269&url="+input.split("?")[0];log(input);let html=JSON.parse(request(input));log(html);input=html.url||input', - 推荐:'json:data;title;cover;comment;cat+ent_id;description', - 一级:'json:data.movies;title;cover;pubdate;id;description', - 二级:'', - 二级:'js:let html=JSON.parse(fetch(input,fetch_params));let data=html.data;let tilte=data.title;let img=data.cdncover;let vod_type=data.moviecategory.join(",");let area=data.area.join(",");let director=data.director.join(",");let actor=data.actor.join(",");let content=data.description;let base_vod={vod_id:input,vod_name:tilte,type_name:vod_type,vod_actor:actor,vod_director:director,vod_content:content,vod_remarks:area,vod_pic:urljoin2(input,img)};let delta=200;let vod_play={};let sites=data.playlink_sites;sites.forEach(function(site){let playList="";let vodItems=[];if(data.allupinfo){let total=parseInt(data.allupinfo[site]);for(let j=1;j0){playList=vodItems.join("#")}if(playList.length<1){return}vod_play[site]=playList});let tabs=Object.keys(vod_play);let playUrls=[];for(let id in tabs){print("id:"+id);playUrls.push(vod_play[tabs[id]])}if(tabs.length>0){let vod_play_from=tabs.join("$$$");let vod_play_url=playUrls.join("$$$");base_vod.vod_play_from=vod_play_from;base_vod.vod_play_url=vod_play_url}VOD=base_vod;', - 搜索:'json:data.longData.rows;titleTxt||titlealias;cover;cat_name;cat_id+en_id;description', -} \ No newline at end of file diff --git a/TVBox_JS/360影视.js b/TVBox_JS/360影视.js deleted file mode 100644 index 6cc6cfa..0000000 --- a/TVBox_JS/360影视.js +++ /dev/null @@ -1,31 +0,0 @@ -var rule = { - title:'360影视', - host:'https://www.360kan.com', - homeUrl:'https://api.web.360kan.com/v1/rank?cat=2&size=9', - detailUrl:'https://api.web.360kan.com/v1/detail?cat=fyclass&id=fyid', - searchUrl:'https://api.so.360kan.com/index?force_v=1&kw=**&from=&pageno=fypage&v_ap=1&tab=all', - url:'https://api.web.360kan.com/v1/filter/list?catid=fyclass&rank=rankhot&cat=&year=&area=&act=&size=35&pageno=fypage&callback=', - headers:{ - 'User-Agent':'MOBILE_UA' - }, - timeout:5000, - class_name:'电视剧&电影&综艺&动漫', - class_url:'2&1&3&4', - limit:5, - multi:1, - searchable:2, - play_parse:true, - lazy:'js:input=input.split("?")[0];log(input);', - // 疑似t4专用的 - // lazy:'js:input={parse: 1, playUrl: "", jx: 1, url: input.split("?")[0]}', - // 手动调用解析请求json的url,此lazy不方便 - // lazy:'js:input="https://cache.json.icu/home/api?type=ys&uid=292796&key=fnoryABDEFJNPQV269&url="+input.split("?")[0];log(input);let html=JSON.parse(request(input));log(html);input=html.url||input', - 推荐:'json:data;title;cover;comment;cat+ent_id;description', - 一级:'json:data.movies;title;cover;pubdate;id;description', - // 二级:{is_json:1,"title":"data.title;data.moviecategory[0]+data.moviecategory[1]","img":"data.cdncover","desc":"data.area[0];data.director[0]","content":"data.description","tabs":"data.playlink_sites;data.playlinksdetail.#idv.quality","lists":"data.playlinksdetail.#idv.default_url"}, - // 二级:{is_json:1,"title":"data.title;data.moviecategory[0]+data.moviecategory[1]","img":"data.cdncover","desc":"data.area[0];data.director[0]","content":"data.description","tabs":"data.playlink_sites","lists":"data.playlinksdetail.#idv.default_url"}, - 二级:'js:let html=JSON.parse(fetch(input,fetch_params));let data=html.data;let tilte=data.title;let img=data.cdncover;let vod_type=data.moviecategory.join(",");let area=data.area.join(",");let director=data.director.join(",");let actor=data.actor.join(",");let content=data.description;base_vod={vod_id:input,vod_name:tilte,type_name:vod_type,vod_actor:actor,vod_director:director,vod_content:content,vod_remarks:area,vod_pic:urljoin2(input,img)};let delta=200;let vod_play={};let sites=data.playlink_sites;for(let i in sites){let site=sites[i];let playList="";let vodItems=[];if(data.allupinfo){let total=parseInt(data.allupinfo[site]);for(let j=1;j0){playList=vodItems.join("#")}if(playList.length<1){continue}vod_play[site]=playList}let tabs=Object.keys(vod_play);let playUrls=[];for(let id in tabs){playUrls.push(vod_play[tabs[id]])}if(tabs.length>0){vod_play_from=tabs.join("$$$");vod_play_url=playUrls.join("$$$");base_vod.vod_play_from=vod_play_from;base_vod.vod_play_url=vod_play_url}vod=base_vod;', - // 二级:'js:let html=JSON.parse(fetch(input,fetch_params));let data=html.data;let tilte=data.title;let img=data.cdncover;let vod_type=data.moviecategory.join(",");let area=data.area.join(",");let director=data.director.join(",");let actor=data.actor.join(",");let content=data.description;base_vod={vod_id:input,vod_name:tilte,type_name:vod_type,vod_actor:actor,vod_director:director,vod_content:content,vod_remarks:area,vod_pic:urljoin2(input,img)};let delta=200;let vod_play={};let sites=data.playlink_sites;for(let i in sites){let site=sites[i];let playList="";let vodItems=[];if(data.allupinfo){let total=parseInt(data.allupinfo[site]);for(let j=1;j0){playList=vodItems.join("#")}if(playList.length<1){continue}vod_play[site]=playList}let tabs=Object.keys(vod_play);let playUrls=[];for(let id in tabs){playUrls.push(vod_play[tabs[id]])}if(tabs.length>0){vod_play_from=tabs.join("$$$");vod_play_url=playUrls.join("$$$");base_vod.vod_play_from=vod_play_from;base_vod.vod_play_url=vod_play_url}vod=base_vod;', - // 搜索:'json:data.longData.rows;titleTxt;cover;cat_name;cat_id+en_id;description', - 搜索:'json:data.longData.rows;titleTxt||titlealias;cover;cat_name;cat_id+en_id;description', -} \ No newline at end of file diff --git a/TVBox_JS/555影视.js b/TVBox_JS/555影视.js deleted file mode 100644 index e637698..0000000 --- a/TVBox_JS/555影视.js +++ /dev/null @@ -1,8 +0,0 @@ -var rule = Object.assign(muban.mxpro,{ -title:'555影视', -host:'https://www.5dy6.cc', -headers:{//网站的请求头,完整支持所有的,常带ua和cookies - 'User-Agent':'MOBILE_UA', - "Cookie": "searchneed=ok" -}, -}); \ No newline at end of file diff --git a/TVBox_JS/555影视_2.js b/TVBox_JS/555影视_2.js deleted file mode 100644 index 186d740..0000000 --- a/TVBox_JS/555影视_2.js +++ /dev/null @@ -1,9 +0,0 @@ -var rule = Object.assign(muban.mxpro,{ -title:'555影视', -// host:'https://www.555dy.app', -host:'https://www.555yy2.com/', -headers:{//网站的请求头,完整支持所有的,常带ua和cookies - 'User-Agent':'Mozilla/5.0 (Linux; Android 11; M2104K10AC Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36', - "Cookie": "searchneed=ok" -}, -}); \ No newline at end of file diff --git a/TVBox_JS/88看球.js b/TVBox_JS/88看球.js deleted file mode 100644 index f84e0e2..0000000 --- a/TVBox_JS/88看球.js +++ /dev/null @@ -1,21 +0,0 @@ -var rule = { - title:'88看球', - host:'http://www.88kanqiu.cc', - url:'/match/fyclass/live', - searchUrl:'', - searchable:0, - quickSearch:0, - class_parse:'.nav-pills li;a&&Text;a&&href;/match/(\\d+)/live', - headers:{ - 'User-Agent':'PC_UA' - }, - timeout:5000, - play_parse:true, - lazy:'', - limit:6, - double:false, - 推荐:'*', - 一级:'.list-group .group-game-item;.d-none&&Text;img&&src;.btn&&Text;a&&href', - 二级:{title:'.game-info-container&&Text;.customer-navbar-nav li&&Text',img:'img&&src',desc:';;;div.team-name:eq(0)&&Text;div.team-name:eq(1)&&Text',content:'div.game-time&&Text',tabs:'',tab_text:'',lists:'.btn-group a',list_text:'a&&Text',list_url:'a&&href'}, - 搜索:'', -} diff --git a/TVBox_JS/88看球1.js b/TVBox_JS/88看球1.js deleted file mode 100644 index f84e0e2..0000000 --- a/TVBox_JS/88看球1.js +++ /dev/null @@ -1,21 +0,0 @@ -var rule = { - title:'88看球', - host:'http://www.88kanqiu.cc', - url:'/match/fyclass/live', - searchUrl:'', - searchable:0, - quickSearch:0, - class_parse:'.nav-pills li;a&&Text;a&&href;/match/(\\d+)/live', - headers:{ - 'User-Agent':'PC_UA' - }, - timeout:5000, - play_parse:true, - lazy:'', - limit:6, - double:false, - 推荐:'*', - 一级:'.list-group .group-game-item;.d-none&&Text;img&&src;.btn&&Text;a&&href', - 二级:{title:'.game-info-container&&Text;.customer-navbar-nav li&&Text',img:'img&&src',desc:';;;div.team-name:eq(0)&&Text;div.team-name:eq(1)&&Text',content:'div.game-time&&Text',tabs:'',tab_text:'',lists:'.btn-group a',list_text:'a&&Text',list_url:'a&&href'}, - 搜索:'', -} diff --git a/TVBox_JS/AnFuns.js b/TVBox_JS/AnFuns.js deleted file mode 100644 index 28d6f76..0000000 --- a/TVBox_JS/AnFuns.js +++ /dev/null @@ -1,8 +0,0 @@ -muban.海螺3.二级.desc = '.hl-text-conch&&Text'; -var rule = Object.assign(muban.海螺3,{ - title:'AnFuns动漫', - host:'https://www.anfuns.cc', - cate_exclude: '最新|排行', - url:'/type/fyclass-fypage.html', - searchUrl:'/search/page/fypage/wd/**.html', -}); \ No newline at end of file diff --git a/TVBox_JS/JRS看直播1.js b/TVBox_JS/JRS看直播1.js deleted file mode 100644 index 6dfed27..0000000 --- a/TVBox_JS/JRS看直播1.js +++ /dev/null @@ -1,22 +0,0 @@ -var rule = { - title:'JRS看直播', - host:'http://www.jrskan.net', - url:'/fyclass', - searchUrl:'', - searchable:0, - quickSearch:0, - class_name:'全部', - class_url:'/', - headers:{ - 'User-Agent':'MOBILE_UA' - }, - timeout:5000, - play_parse:true, - lazy:'', - limit:6, - double:false, - 推荐:'*', - 一级:'.row a;li div:gt(2):lt(6)&&Text;img&&src;.match-start-time&&Text;a&&href', - 二级:{title:'.live-title&&Text;.live-title&&Text',img:'img:eq(1)&&src',desc:';;;.live-left-team-sj&&Text;.live-right-team-sj&&Text',content:'.live-info&&Text',tabs:'',tab_text:'',lists:'#item-source a',list_text:'a&&Text',list_url:'a&&data-url'}, - 搜索:'', -} diff --git a/TVBox_JS/JS-1122.zip b/TVBox_JS/JS-1122.zip deleted file mode 100644 index 29d986f6292c9385c6a7df902956ea2ee066bb69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240467 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%0Du1^( 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%0D3!8?7L-i~x3h>E5&9&$5|>!q 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 Th=B?W{%e}3(|K(|1kn8-K~Q9~ diff --git a/TVBox_JS/JS2-1128.zip b/TVBox_JS/JS2-1128.zip deleted file mode 100644 index f371643c66f08cb040a4e8f2fbecff69066f6be4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227395 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 I#!J}$03eG6=l}o! diff --git a/TVBox_JS/JustLive.js b/TVBox_JS/JustLive.js deleted file mode 100644 index 8b242a0..0000000 --- a/TVBox_JS/JustLive.js +++ /dev/null @@ -1,50 +0,0 @@ -// 道长 drpy仓库 https://gitcode.net/qq_32394351/dr_py -// drpy安卓本地搭建说明 https://gitcode.net/qq_32394351/dr_py/-/blob/master/%E5%AE%89%E5%8D%93%E6%9C%AC%E5%9C%B0%E6%90%AD%E5%BB%BA%E8%AF%B4%E6%98%8E.md -// Pluto Player官方TG https://t.me/PlutoPlayer -// Pluto Player官方TG https://t.me/PlutoPlayerChannel - -var rule = { - title: 'JustLive', - host: 'http://live.yj1211.work', - homeUrl: '/api/live/getRecommend?page=1&size=20',//网站的首页链接,用于分类获取和推荐获取 - url: '/api/live/getRecommendByPlatformArea?platform=fyclass&area=fyfilter&page=fypage&size=20', //网站的分类页面链接 - class_name: '斗鱼&虎牙&哔哩&网易', - class_url: 'douyu&huya&bilibili&cc', - filterable: 1, - filter_url: '{{fl.area or "影音馆"}}', - filter_def:{ - douyu:{ - area:'一起看', - }, - huya:{ - area:'一起看', - }, - bilibili:{ - area:'影音馆', - }, - cc:{ - area:'星秀', - } - }, - filter: { - 'douyu': [{ 'key': 'area', 'name': '分区', 'value': [{ 'n': '一起看', 'v': '一起看' }, { 'n': '二次元', 'v': '二次元' }, { 'n': '颜值', 'v': '颜值' }, { 'n': '颜值(横屏)', 'v': '颜值(横屏)' }, { 'n': '音乐', 'v': '音乐' }, { 'n': '户外', 'v': '户外' }, { 'n': '美食', 'v': '美食' }, { 'n': '原创IP', 'v': '原创IP' }, { 'n': '互动交友', 'v': '互动交友' }, { 'n': '音遇恋人', 'v': '音遇恋人' }, { 'n': '舞蹈', 'v': '舞蹈' }, { 'n': '趣生活', 'v': '趣生活' }, { 'n': '心动FM', 'v': '心动FM' }, { 'n': '娱乐推荐', 'v': '娱乐推荐' }, { 'n': '校园', 'v': '校园' }, { 'n': '文化', 'v': '文化' }, { 'n': '企鹅直播', 'v': '企鹅直播' }, { 'n': '数码科技', 'v': '数码科技' }, { 'n': '社会人文', 'v': '社会人文' }, { 'n': '汽车', 'v': '汽车' }, { 'n': '科普', 'v': '科普' }, { 'n': '纪录片', 'v': '纪录片' }, { 'n': '斗鱼购物', 'v': '斗鱼购物' }, { 'n': '成年教育', 'v': '成年教育' }, { 'n': '交友', 'v': '交友' }, { 'n': '心动FM.', 'v': '心动FM.' }, { 'n': '一起玩', 'v': '一起玩' }, { 'n': '开黑车队', 'v': '开黑车队' }, { 'n': '点唱', 'v': '点唱' }, { 'n': 'CP聊天', 'v': 'CP聊天' }, { 'n': '语音交友', 'v': '语音交友' }, { 'n': '音乐之声', 'v': '音乐之声' }, { 'n': '连麦互动', 'v': '连麦互动' }, { 'n': '娱乐开黑', 'v': '娱乐开黑' }, { 'n': '星星点灯', 'v': '星星点灯' }, { 'n': '正能量', 'v': '正能量' }, { 'n': '赛车竞技', 'v': '赛车竞技' }, { 'n': '京斗云', 'v': '京斗云' }, { 'n': '英雄联盟', 'v': '英雄联盟' }, { 'n': '热门游戏', 'v': '热门游戏' }, { 'n': '穿越火线', 'v': '穿越火线' }, { 'n': 'CFHD', 'v': 'CFHD' }, { 'n': '使命召唤', 'v': '使命召唤' }, { 'n': 'DNF', 'v': 'DNF' }, { 'n': 'DOTA2', 'v': 'DOTA2' }, { 'n': '炉石传说', 'v': '炉石传说' }, { 'n': 'CS:GO', 'v': 'CS:GO' }, { 'n': 'VALORANT', 'v': 'VALORANT' }, { 'n': 'lol云顶之弈', 'v': 'lol云顶之弈' }, { 'n': '魔兽争霸', 'v': '魔兽争霸' }, { 'n': '魔兽怀旧服', 'v': '魔兽怀旧服' }, { 'n': '自走棋', 'v': '自走棋' }, { 'n': '传奇', 'v': '传奇' }, { 'n': '跑跑卡丁车', 'v': '跑跑卡丁车' }, { 'n': '网易游戏', 'v': '网易游戏' }, { 'n': '星际争霸', 'v': '星际争霸' }, { 'n': '格斗游戏', 'v': '格斗游戏' }, { 'n': '守望先锋归来', 'v': '守望先锋归来' }, { 'n': 'DOTA', 'v': 'DOTA' }, { 'n': '魔兽世界', 'v': '魔兽世界' }, { 'n': '剑网3', 'v': '剑网3' }, { 'n': '我的世界', 'v': '我的世界' }, { 'n': '超激斗梦境', 'v': '超激斗梦境' }, { 'n': '冒险岛', 'v': '冒险岛' }, { 'n': '三国杀', 'v': '三国杀' }, { 'n': '梦幻西游', 'v': '梦幻西游' }, { 'n': '天涯明月刀', 'v': '天涯明月刀' }, { 'n': '街头篮球', 'v': '街头篮球' }, { 'n': 'NBA2KOL2', 'v': 'NBA2KOL2' }, { 'n': 'QQ飞车端游', 'v': 'QQ飞车端游' }, { 'n': '战地之王', 'v': '战地之王' }, { 'n': '军事游戏', 'v': '军事游戏' }, { 'n': '棋牌娱乐', 'v': '棋牌娱乐' }, { 'n': 'FIFA ONLINE 4', 'v': 'FIFA ONLINE 4' }, { 'n': '热门网游', 'v': '热门网游' }, { 'n': '诛仙世界', 'v': '诛仙世界' }, { 'n': '千古风流', 'v': '千古风流' }, { 'n': 'APEX', 'v': 'APEX' }, { 'n': '流放之路POE', 'v': '流放之路POE' }, { 'n': '剑网3缘起', 'v': '剑网3缘起' }, { 'n': '逆水寒', 'v': '逆水寒' }, { 'n': '风暴英雄', 'v': '风暴英雄' }, { 'n': '逆战', 'v': '逆战' }, { 'n': '坦克世界', 'v': '坦克世界' }, { 'n': '战舰世界', 'v': '战舰世界' }, { 'n': '巫师之昆特牌', 'v': '巫师之昆特牌' }, { 'n': '反恐精英Online', 'v': '反恐精英Online' }, { 'n': '暗黑破坏神3', 'v': '暗黑破坏神3' }, { 'n': '梦三国2', 'v': '梦三国2' }, { 'n': '传奇世界', 'v': '传奇世界' }, { 'n': '方舟:生存进化', 'v': '方舟:生存进化' }, { 'n': '刀塔霸业', 'v': '刀塔霸业' }, { 'n': '神武4电脑版', 'v': '神武4电脑版' }, { 'n': '群雄逐鹿', 'v': '群雄逐鹿' }, { 'n': '堡垒之夜', 'v': '堡垒之夜' }, { 'n': '无限法则', 'v': '无限法则' }, { 'n': '问道电脑版', 'v': '问道电脑版' }, { 'n': '西山居游戏', 'v': '西山居游戏' }, { 'n': '最终幻想14', 'v': '最终幻想14' }, { 'n': '战意', 'v': '战意' }, { 'n': '剑灵', 'v': '剑灵' }, { 'n': '星际战甲', 'v': '星际战甲' }, { 'n': '龙之谷', 'v': '龙之谷' }, { 'n': '铁甲雄兵', 'v': '铁甲雄兵' }, { 'n': '古剑奇谭网络版', 'v': '古剑奇谭网络版' }, { 'n': '轩辕传奇', 'v': '轩辕传奇' }, { 'n': '神途', 'v': '神途' }, { 'n': '激战2', 'v': '激战2' }, { 'n': '高达文化区', 'v': '高达文化区' }] }], - 'huya': [{ 'key': 'area', 'name': '分区', 'value': [{ 'n': '一起看', 'v': '一起看' }, { 'n': '放映厅', 'v': '放映厅' }, { 'n': '星秀', 'v': '星秀' }, { 'n': '户外', 'v': '户外' }, { 'n': '二次元', 'v': '二次元' }, { 'n': '美食', 'v': '美食' }, { 'n': '颜值', 'v': '颜值' }, { 'n': '交友', 'v': '交友' }, { 'n': '体育', 'v': '体育' }, { 'n': '娱乐天地', 'v': '娱乐天地' }, { 'n': '吃喝玩乐', 'v': '吃喝玩乐' }, { 'n': '组队', 'v': '组队' }, { 'n': '原创', 'v': '原创' }, { 'n': '虎牙地方', 'v': '虎牙地方' }, { 'n': '虚拟偶像', 'v': '虚拟偶像' }, { 'n': '虎牙文化', 'v': '虎牙文化' }, { 'n': '趣分享', 'v': '趣分享' }, { 'n': '音乐', 'v': '音乐' }, { 'n': '派对', 'v': '派对' }, { 'n': '科技', 'v': '科技' }, { 'n': '直播购', 'v': '直播购' }, { 'n': '旅游', 'v': '旅游' }, { 'n': '英雄联盟', 'v': '英雄联盟' }, { 'n': '超击突破', 'v': '超击突破' }, { 'n': '守望先锋归来', 'v': '守望先锋归来' }, { 'n': 'lol云顶之弈', 'v': 'lol云顶之弈' }, { 'n': '穿越火线', 'v': '穿越火线' }, { 'n': '暴雪专区', 'v': '暴雪专区' }, { 'n': '地下城与勇士', 'v': '地下城与勇士' }, { 'n': '炉石传说', 'v': '炉石传说' }, { 'n': '魔兽世界', 'v': '魔兽世界' }, { 'n': 'DOTA2', 'v': 'DOTA2' }, { 'n': 'CS:GO', 'v': 'CS:GO' }, { 'n': 'DOTA1', 'v': 'DOTA1' }, { 'n': 'QQ飞车', 'v': 'QQ飞车' }, { 'n': '问道', 'v': '问道' }, { 'n': '魔兽争霸3', 'v': '魔兽争霸3' }, { 'n': '逆战', 'v': '逆战' }, { 'n': '梦三国', 'v': '梦三国' }, { 'n': '网游竞技', 'v': '网游竞技' }, { 'n': '射击综合游戏', 'v': '射击综合游戏' }, { 'n': '军事游戏', 'v': '军事游戏' }, { 'n': '坦克世界', 'v': '坦克世界' }, { 'n': '永恒之塔', 'v': '永恒之塔' }, { 'n': '剑灵', 'v': '剑灵' }, { 'n': '御龙在天', 'v': '御龙在天' }, { 'n': '传奇', 'v': '传奇' }, { 'n': '神武4电脑版', 'v': '神武4电脑版' }, { 'n': '起凡:群雄逐鹿', 'v': '起凡:群雄逐鹿' }, { 'n': '体育游戏', 'v': '体育游戏' }, { 'n': '传奇类游戏', 'v': '传奇类游戏' }, { 'n': '彩虹岛Online', 'v': '彩虹岛Online' }, { 'n': '诛仙3', 'v': '诛仙3' }, { 'n': '逆水寒', 'v': '逆水寒' }, { 'n': '炉石战棋', 'v': '炉石战棋' }, { 'n': 'CFHD', 'v': 'CFHD' }, { 'n': '冒险岛', 'v': '冒险岛' }, { 'n': '生死狙击2', 'v': '生死狙击2' }, { 'n': 'QQ三国', 'v': 'QQ三国' }, { 'n': '反恐精英Online', 'v': '反恐精英Online' }, { 'n': '龙之谷', 'v': '龙之谷' }, { 'n': '战舰世界', 'v': '战舰世界' }, { 'n': '枪神纪', 'v': '枪神纪' }, { 'n': '热血江湖', 'v': '热血江湖' }, { 'n': '九阴真经', 'v': '九阴真经' }, { 'n': '星际战甲', 'v': '星际战甲' }, { 'n': 'NBA2KOL系列', 'v': 'NBA2KOL系列' }, { 'n': '寻仙', 'v': '寻仙' }, { 'n': '铁甲雄兵', 'v': '铁甲雄兵' }, { 'n': '刀剑英雄', 'v': '刀剑英雄' }, { 'n': '荒野行动PC版', 'v': '荒野行动PC版' }, { 'n': 'FIFA Online系列', 'v': 'FIFA Online系列' }, { 'n': '暗黑破坏神', 'v': '暗黑破坏神' }, { 'n': '征途', 'v': '征途' }, { 'n': '斗战神', 'v': '斗战神' }, { 'n': '星际争霸', 'v': '星际争霸' }, { 'n': 'VALORANT', 'v': 'VALORANT' }, { 'n': '跑跑卡丁车', 'v': '跑跑卡丁车' }, { 'n': '天涯明月刀', 'v': '天涯明月刀' }, { 'n': 'QQ华夏', 'v': 'QQ华夏' }, { 'n': '剑网3', 'v': '剑网3' }, { 'n': '武林外传一世琴缘', 'v': '武林外传一世琴缘' }, { 'n': '反恐行动online', 'v': '反恐行动online' }, { 'n': '完美端游系列', 'v': '完美端游系列' }] }], - 'bilibili': [{ 'key': 'area', 'name': '分区', 'value': [{ 'n': '影音馆', 'v': '影音馆' }, { 'n': '视频唱见', 'v': '视频唱见' }, { 'n': '萌宅领域', 'v': '萌宅领域' }, { 'n': '视频聊天', 'v': '视频聊天' }, { 'n': '舞见', 'v': '舞见' }, { 'n': '情感', 'v': '情感' }, { 'n': '户外', 'v': '户外' }, { 'n': '日常', 'v': '日常' }, { 'n': '唱见电台', 'v': '唱见电台' }, { 'n': '聊天电台', 'v': '聊天电台' }, { 'n': '配音', 'v': '配音' }, { 'n': '虚拟主播', 'v': '虚拟主播' }, { 'n': '3D虚拟主播', 'v': '3D虚拟主播' }, { 'n': '生活分享', 'v': '生活分享' }, { 'n': '运动', 'v': '运动' }, { 'n': '搞笑', 'v': '搞笑' }, { 'n': '手工绘画', 'v': '手工绘画' }, { 'n': '萌宠', 'v': '萌宠' }, { 'n': '美食', 'v': '美食' }, { 'n': '时尚', 'v': '时尚' }, { 'n': '社科法律心理', 'v': '社科法律心理' }, { 'n': '人文历史', 'v': '人文历史' }, { 'n': '校园学习', 'v': '校园学习' }, { 'n': '职场·技能', 'v': '职场·技能' }, { 'n': ' 科技', 'v': ' 科技' }, { 'n': '科学科普', 'v': '科学科普' }, { 'n': '时政', 'v': '时政' }, { 'n': '购物', 'v': '购物' }, { 'n': '游戏赛事', 'v': '游戏赛事' }, { 'n': '体育赛事', 'v': '体育赛事' }, { 'n': '赛事综合', 'v': '赛事综合' }, { 'n': '英雄联盟', 'v': '英雄联盟' }, { 'n': 'DOTA2', 'v': 'DOTA2' }, { 'n': 'CS:GO', 'v': 'CS:GO' }, { 'n': 'APEX英雄', 'v': 'APEX英雄' }, { 'n': '永劫无间', 'v': '永劫无间' }, { 'n': '穿越火线', 'v': '穿越火线' }, { 'n': '守望先锋', 'v': '守望先锋' }, { 'n': '吃鸡行动', 'v': '吃鸡行动' }, { 'n': '逃离塔科夫', 'v': '逃离塔科夫' }, { 'n': '传奇', 'v': '传奇' }, { 'n': 'DNF', 'v': 'DNF' }, { 'n': '生死狙击2', 'v': '生死狙击2' }, { 'n': '洛奇英雄传', 'v': '洛奇英雄传' }, { 'n': '最终幻想14', 'v': '最终幻想14' }, { 'n': '星际战甲', 'v': '星际战甲' }, { 'n': '梦三国', 'v': '梦三国' }, { 'n': '英魂之刃', 'v': '英魂之刃' }, { 'n': '剑网3', 'v': '剑网3' }, { 'n': '铁甲雄兵', 'v': '铁甲雄兵' }, { 'n': '封印者', 'v': '封印者' }, { 'n': '新天龙八部', 'v': '新天龙八部' }, { 'n': '赛尔号', 'v': '赛尔号' }, { 'n': '造梦西游', 'v': '造梦西游' }, { 'n': '洛克王国', 'v': '洛克王国' }, { 'n': '问道', 'v': '问道' }, { 'n': '诛仙世界', 'v': '诛仙世界' }, { 'n': '大话西游', 'v': '大话西游' }, { 'n': '奇迹MU', 'v': '奇迹MU' }, { 'n': '永恒之塔', 'v': '永恒之塔' }, { 'n': 'QQ三国', 'v': 'QQ三国' }, { 'n': '人间地狱', 'v': '人间地狱' }, { 'n': 'VALORANT', 'v': 'VALORANT' }, { 'n': '彩虹岛', 'v': '彩虹岛' }, { 'n': '洛奇', 'v': '洛奇' }, { 'n': '跑跑卡丁车', 'v': '跑跑卡丁车' }, { 'n': '星际公民', 'v': '星际公民' }, { 'n': 'Squad战术小队', 'v': 'Squad战术小队' }, { 'n': '反恐精英Online', 'v': '反恐精英Online' }, { 'n': '风暴奇侠', 'v': '风暴奇侠' }, { 'n': '装甲战争', 'v': '装甲战争' }, { 'n': '失落的方舟', 'v': '失落的方舟' }, { 'n': '阿尔比恩', 'v': '阿尔比恩' }, { 'n': '猎杀对决', 'v': '猎杀对决' }, { 'n': 'CFHD', 'v': 'CFHD' }, { 'n': '骑士精神2', 'v': '骑士精神2' }, { 'n': '超击突破', 'v': '超击突破' }, { 'n': '武装突袭', 'v': '武装突袭' }, { 'n': '300英雄', 'v': '300英雄' }, { 'n': '炉石传说', 'v': '炉石传说' }, { 'n': '剑网3缘起', 'v': '剑网3缘起' }, { 'n': '街头篮球', 'v': '街头篮球' }, { 'n': '综合射击', 'v': '综合射击' }, { 'n': '剑灵', 'v': '剑灵' }, { 'n': '艾尔之光', 'v': '艾尔之光' }, { 'n': '黑色沙漠', 'v': '黑色沙漠' }, { 'n': '天涯明月刀', 'v': '天涯明月刀' }, { 'n': '超激斗梦境', 'v': '超激斗梦境' }, { 'n': '冒险岛', 'v': '冒险岛' }, { 'n': '逆战', 'v': '逆战' }, { 'n': '魔兽争霸3', 'v': '魔兽争霸3' }, { 'n': 'QQ飞车', 'v': 'QQ飞车' }, { 'n': '魔兽世界', 'v': '魔兽世界' }, { 'n': 'FIFA ONLINE 4', 'v': 'FIFA ONLINE 4' }, { 'n': 'NBA2KOL2', 'v': 'NBA2KOL2' }, { 'n': '使命召唤:战区', 'v': '使命召唤:战区' }, { 'n': 'VRChat', 'v': 'VRChat' }, { 'n': '坦克世界', 'v': '坦克世界' }, { 'n': '战舰世界', 'v': '战舰世界' }, { 'n': '战争雷霆', 'v': '战争雷霆' }, { 'n': '战意', 'v': '战意' }, { 'n': '风暴英雄', 'v': '风暴英雄' }, { 'n': '星际争霸2', 'v': '星际争霸2' }, { 'n': '刀塔自走棋', 'v': '刀塔自走棋' }, { 'n': '堡垒之夜', 'v': '堡垒之夜' }, { 'n': '枪神纪', 'v': '枪神纪' }, { 'n': '三国杀', 'v': '三国杀' }, { 'n': '龙之谷', 'v': '龙之谷' }, { 'n': '古剑奇谭OL', 'v': '古剑奇谭OL' }, { 'n': '幻想全明星', 'v': '幻想全明星' }, { 'n': '怀旧网游', 'v': '怀旧网游' }, { 'n': '新游前瞻', 'v': '新游前瞻' }, { 'n': '星战前夜:晨曦', 'v': '星战前夜:晨曦' }, { 'n': '梦幻西游端游', 'v': '梦幻西游端游' }, { 'n': '流放之路', 'v': '流放之路' }, { 'n': 'FPS沙盒', 'v': 'FPS沙盒' }, { 'n': '永恒轮回', 'v': '永恒轮回' }, { 'n': '激战2', 'v': '激战2' }, { 'n': '其他网游', 'v': '其他网游' }, { 'n': '王者荣耀', 'v': '王者荣耀' }, { 'n': '和平精英', 'v': '和平精英' }, { 'n': 'LOL手游', 'v': 'LOL手游' }, { 'n': '原神', 'v': '原神' }, { 'n': '第五人格', 'v': '第五人格' }, { 'n': '明日方舟', 'v': '明日方舟' }, { 'n': '哈利波特:魔法觉醒', 'v': '哈利波特:魔法觉醒' }, { 'n': '幻塔', 'v': '幻塔' }, { 'n': '金铲铲之战', 'v': '金铲铲之战' }, { 'n': 'APEX手游', 'v': 'APEX手游' }, { 'n': '深空之眼', 'v': '深空之眼' }, { 'n': '无期迷途', 'v': '无期迷途' }, { 'n': '光遇', 'v': '光遇' }, { 'n': '香肠派对', 'v': '香肠派对' }, { 'n': '猫之城', 'v': '猫之城' }, { 'n': '玛娜希斯回响', 'v': '玛娜希斯回响' }, { 'n': '使命召唤手游', 'v': '使命召唤手游' }, { 'n': '黑色沙漠手游', 'v': '黑色沙漠手游' }, { 'n': '崩坏3', 'v': '崩坏3' }, { 'n': '游戏王:决斗链接', 'v': '游戏王:决斗链接' }, { 'n': '游戏王', 'v': '游戏王' }, { 'n': '蛋仔派对', 'v': '蛋仔派对' }, { 'n': '阴阳师', 'v': '阴阳师' }, { 'n': '火影忍者手游', 'v': '火影忍者手游' }, { 'n': 'Fate/GO', 'v': 'Fate/GO' }, { 'n': '综合棋牌', 'v': '综合棋牌' }, { 'n': 'QQ飞车手游', 'v': 'QQ飞车手游' }, { 'n': '决战!平安京', 'v': '决战!平安京' }, { 'n': '狼人杀', 'v': '狼人杀' }, { 'n': '三国杀移动版', 'v': '三国杀移动版' }, { 'n': '碧蓝航线', 'v': '碧蓝航线' }, { 'n': '影之诗', 'v': '影之诗' }, { 'n': '明日之后', 'v': '明日之后' }, { 'n': '部落冲突:皇室战争', 'v': '部落冲突:皇室战争' }, { 'n': '奥比岛手游', 'v': '奥比岛手游' }, { 'n': '盾之勇者成名录:浪潮', 'v': '盾之勇者成名录:浪潮' }, { 'n': '雀姬', 'v': '雀姬' }, { 'n': '公主连结Re:Dive', 'v': '公主连结Re:Dive' }, { 'n': 'DNF手游', 'v': 'DNF手游' }, { 'n': 'FIFA足球世界', 'v': 'FIFA足球世界' }, { 'n': 'BanG Dream', 'v': 'BanG Dream' }, { 'n': '荒野乱斗', 'v': '荒野乱斗' }, { 'n': 'CF手游', 'v': 'CF手游' }, { 'n': '战双帕弥什', 'v': '战双帕弥什' }, { 'n': '天涯明月刀手游', 'v': '天涯明月刀手游' }, { 'n': '解密游戏', 'v': '解密游戏' }, { 'n': '恋爱养成游戏', 'v': '恋爱养成游戏' }, { 'n': '暗黑破坏神:不朽', 'v': '暗黑破坏神:不朽' }, { 'n': '暗区突围', 'v': '暗区突围' }, { 'n': '跑跑卡丁车手游', 'v': '跑跑卡丁车手游' }, { 'n': '非人学园', 'v': '非人学园' }, { 'n': '百闻牌', 'v': '百闻牌' }, { 'n': '猫和老鼠手游', 'v': '猫和老鼠手游' }, { 'n': '坎公骑冠剑', 'v': '坎公骑冠剑' }, { 'n': '忍者必须死3', 'v': '忍者必须死3' }, { 'n': '梦幻西游手游', 'v': '梦幻西游手游' }, { 'n': '航海王热血航线', 'v': '航海王热血航线' }, { 'n': '少女前线', 'v': '少女前线' }, { 'n': '300大作战', 'v': '300大作战' }, { 'n': '少女前线:云图计划', 'v': '少女前线:云图计划' }, { 'n': '漫威超级战争', 'v': '漫威超级战争' }, { 'n': '摩尔庄园手游', 'v': '摩尔庄园手游' }, { 'n': '宝可梦大集结', 'v': '宝可梦大集结' }, { 'n': '小动物之星', 'v': '小动物之星' }, { 'n': '天地劫:幽城再临', 'v': '天地劫:幽城再临' }, { 'n': '漫威对决', 'v': '漫威对决' }, { 'n': '东方归言录', 'v': '东方归言录' }, { 'n': '梦幻模拟战', 'v': '梦幻模拟战' }, { 'n': '时空猎人3', 'v': '时空猎人3' }, { 'n': '重返帝国', 'v': '重返帝国' }, { 'n': '其他手游', 'v': '其他手游' }, { 'n': '新游评测', 'v': '新游评测' }, { 'n': '主机游戏', 'v': '主机游戏' }, { 'n': '我的世界', 'v': '我的世界' }, { 'n': '独立游戏', 'v': '独立游戏' }, { 'n': '怀旧游戏', 'v': '怀旧游戏' }, { 'n': '弹幕互动玩法', 'v': '弹幕互动玩法' }, { 'n': '禁闭求生', 'v': '禁闭求生' }, { 'n': '斯普拉遁3', 'v': '斯普拉遁3' }, { 'n': '卧龙:苍天陨落', 'v': '卧龙:苍天陨落' }, { 'n': '恐怖游戏', 'v': '恐怖游戏' }, { 'n': '使命召唤19', 'v': '使命召唤19' }, { 'n': '异度神剑', 'v': '异度神剑' }, { 'n': '艾尔登法环', 'v': '艾尔登法环' }, { 'n': '聚会游戏', 'v': '聚会游戏' }, { 'n': '命运2', 'v': '命运2' }, { 'n': '沙石镇时光', 'v': '沙石镇时光' }, { 'n': 'Dread Hunger', 'v': 'Dread Hunger' }, { 'n': '红色警戒2', 'v': '红色警戒2' }, { 'n': '失落迷城:群星的诅咒', 'v': '失落迷城:群星的诅咒' }, { 'n': '策略游戏', 'v': '策略游戏' }, { 'n': '战地风云', 'v': '战地风云' }, { 'n': '幽灵线:东京', 'v': '幽灵线:东京' }, { 'n': '糖豆人', 'v': '糖豆人' }, { 'n': '消逝的光芒2', 'v': '消逝的光芒2' }, { 'n': '只狼', 'v': '只狼' }, { 'n': '怪物猎人', 'v': '怪物猎人' }, { 'n': '饥荒', 'v': '饥荒' }, { 'n': '精灵宝可梦', 'v': '精灵宝可梦' }, { 'n': 'FIFA23', 'v': 'FIFA23' }, { 'n': '暖雪', 'v': '暖雪' }, { 'n': '全面战争:战锤3', 'v': '全面战争:战锤3' }, { 'n': '彩虹六号:异种', 'v': '彩虹六号:异种' }, { 'n': '战神', 'v': '战神' }, { 'n': 'FORZA 极限竞速', 'v': 'FORZA 极限竞速' }, { 'n': 'NBA2K', 'v': 'NBA2K' }, { 'n': '帝国时代4', 'v': '帝国时代4' }, { 'n': '光环:无限', 'v': '光环:无限' }, { 'n': '孤岛惊魂6', 'v': '孤岛惊魂6' }, { 'n': '植物大战僵尸', 'v': '植物大战僵尸' }, { 'n': '仙剑奇侠传七', 'v': '仙剑奇侠传七' }, { 'n': '灵魂筹码', 'v': '灵魂筹码' }, { 'n': '格斗游戏', 'v': '格斗游戏' }, { 'n': '荒野大镖客2', 'v': '荒野大镖客2' }, { 'n': '重生细胞', 'v': '重生细胞' }, { 'n': '刺客信条', 'v': '刺客信条' }, { 'n': '恐鬼症', 'v': '恐鬼症' }, { 'n': '以撒', 'v': '以撒' }, { 'n': '双人成行', 'v': '双人成行' }, { 'n': '方舟', 'v': '方舟' }, { 'n': '仁王2', 'v': '仁王2' }, { 'n': '鬼泣5', 'v': '鬼泣5' }, { 'n': '枪火重生', 'v': '枪火重生' }, { 'n': '盗贼之海', 'v': '盗贼之海' }, { 'n': '胡闹厨房', 'v': '胡闹厨房' }, { 'n': '体育游戏', 'v': '体育游戏' }, { 'n': '恐惧之间', 'v': '恐惧之间' }, { 'n': '塞尔达', 'v': '塞尔达' }, { 'n': '马力欧制造2', 'v': '马力欧制造2' }, { 'n': '全境封锁2', 'v': '全境封锁2' }, { 'n': '骑马与砍杀', 'v': '骑马与砍杀' }, { 'n': '人类一败涂地', 'v': '人类一败涂地' }, { 'n': '鬼谷八荒', 'v': '鬼谷八荒' }, { 'n': '无主之地3', 'v': '无主之地3' }, { 'n': '辐射76', 'v': '辐射76' }, { 'n': '全面战争', 'v': '全面战争' }, { 'n': '亿万僵尸', 'v': '亿万僵尸' }, { 'n': '暗黑破坏神2', 'v': '暗黑破坏神2' }, { 'n': '文字游戏', 'v': '文字游戏' }, { 'n': '恋爱模拟游戏', 'v': '恋爱模拟游戏' }, { 'n': '泰拉瑞亚', 'v': '泰拉瑞亚' }, { 'n': '雨中冒险2', 'v': '雨中冒险2' }, { 'n': '游戏速通', 'v': '游戏速通' }, { 'n': '摔角城大乱斗', 'v': '摔角城大乱斗' }, { 'n': '勇敢的哈克', 'v': '勇敢的哈克' }, { 'n': ' 审判系列', 'v': ' 审判系列' }, { 'n': '太吾绘卷', 'v': '太吾绘卷' }, { 'n': '其他单机', 'v': '其他单机' }] }], - 'cc': [{ 'key': 'area', 'name': '分区', 'value': [{ 'n': '星秀', 'v': '星秀' }, { 'n': '二次元', 'v': '二次元' }, { 'n': '风华正茂', 'v': '风华正茂' }, { 'n': '正能量', 'v': '正能量' }, { 'n': '古风国色', 'v': '古风国色' }, { 'n': '巨好看', 'v': '巨好看' }, { 'n': '语音', 'v': '语音' }, { 'n': '梦幻西游手游', 'v': '梦幻西游手游' }, { 'n': '倩女幽魂手游', 'v': '倩女幽魂手游' }, { 'n': '第五人格', 'v': '第五人格' }, { 'n': '荒野行动', 'v': '荒野行动' }, { 'n': '大话西游手游', 'v': '大话西游手游' }, { 'n': '明日之后', 'v': '明日之后' }, { 'n': '阴阳师', 'v': '阴阳师' }, { 'n': '率土之滨', 'v': '率土之滨' }, { 'n': '决战!平安京', 'v': '决战!平安京' }, { 'n': '猫和老鼠', 'v': '猫和老鼠' }, { 'n': '暗黑破坏神:不朽', 'v': '暗黑破坏神:不朽' }, { 'n': '光·遇', 'v': '光·遇' }, { 'n': '天谕手游', 'v': '天谕手游' }, { 'n': '镇魔曲手游', 'v': '镇魔曲手游' }, { 'n': '宝可梦大探险', 'v': '宝可梦大探险' }, { 'n': '梦幻西游三维版', 'v': '梦幻西游三维版' }, { 'n': '综合手游', 'v': '综合手游' }, { 'n': '哈利波特:魔法觉醒', 'v': '哈利波特:魔法觉醒' }, { 'n': '神都夜行录', 'v': '神都夜行录' }, { 'n': '王牌竞速', 'v': '王牌竞速' }, { 'n': '星战前夜:无烬星河', 'v': '星战前夜:无烬星河' }, { 'n': '忘川风华录', 'v': '忘川风华录' }, { 'n': '漫威超级战争', 'v': '漫威超级战争' }, { 'n': '无尽的拉格朗日', 'v': '无尽的拉格朗日' }, { 'n': '大唐无双手游', 'v': '大唐无双手游' }, { 'n': '量子特攻', 'v': '量子特攻' }, { 'n': '机动都市阿尔法', 'v': '机动都市阿尔法' }, { 'n': '逆水寒手游', 'v': '逆水寒手游' }, { 'n': '非人学园', 'v': '非人学园' }, { 'n': '光明大陆', 'v': '光明大陆' }, { 'n': '梦幻西游网页版', 'v': '梦幻西游网页版' }, { 'n': '乱斗西游2', 'v': '乱斗西游2' }, { 'n': '《天下》手游', 'v': '《天下》手游' }, { 'n': '劲舞团', 'v': '劲舞团' }, { 'n': '三少爷的剑', 'v': '三少爷的剑' }, { 'n': '迷雾世界', 'v': '迷雾世界' }, { 'n': '终结战场', 'v': '终结战场' }, { 'n': '永远的7日之都', 'v': '永远的7日之都' }, { 'n': '狼人杀', 'v': '狼人杀' }, { 'n': '魂之轨迹', 'v': '魂之轨迹' }, { 'n': '三国如龙传', 'v': '三国如龙传' }, { 'n': '堡垒前线:破坏与创造', 'v': '堡垒前线:破坏与创造' }, { 'n': '战争怒吼', 'v': '战争怒吼' }, { 'n': '猎魂觉醒', 'v': '猎魂觉醒' }, { 'n': '终结战场PC版', 'v': '终结战场PC版' }, { 'n': '轩辕剑龙舞云山', 'v': '轩辕剑龙舞云山' }, { 'n': '实况:王者集结', 'v': '实况:王者集结' }, { 'n': '权力与纷争', 'v': '权力与纷争' }, { 'n': '花与剑', 'v': '花与剑' }, { 'n': '流星群侠传', 'v': '流星群侠传' }, { 'n': '游戏王:决斗链接', 'v': '游戏王:决斗链接' }, { 'n': '遇见逆水寒', 'v': '遇见逆水寒' }, { 'n': '阴阳师:百闻牌', 'v': '阴阳师:百闻牌' }, { 'n': '青璃', 'v': '青璃' }, { 'n': '阴阳师:妖怪屋', 'v': '阴阳师:妖怪屋' }, { 'n': '重装上阵', 'v': '重装上阵' }, { 'n': '猎手之王', 'v': '猎手之王' }, { 'n': '第九所', 'v': '第九所' }, { 'n': 'Badlanders', 'v': 'Badlanders' }, { 'n': '风云岛行动', 'v': '风云岛行动' }, { 'n': '一起优诺', 'v': '一起优诺' }, { 'n': '隐世录', 'v': '隐世录' }, { 'n': '洪荒文明', 'v': '洪荒文明' }, { 'n': '密特拉之星', 'v': '密特拉之星' }, { 'n': '阴阳师: 妖怪小班', 'v': '阴阳师: 妖怪小班' }, { 'n': '漫威对决', 'v': '漫威对决' }, { 'n': '月神的迷宫', 'v': '月神的迷宫' }, { 'n': '有杀气童话2', 'v': '有杀气童话2' }, { 'n': '零号任务', 'v': '零号任务' }, { 'n': '蛋仔派对', 'v': '蛋仔派对' }, { 'n': '绝对演绎', 'v': '绝对演绎' }, { 'n': '大航海之路', 'v': '大航海之路' }, { 'n': '大富翁9', 'v': '大富翁9' }, { 'n': '永恒文明', 'v': '永恒文明' }, { 'n': '新游中心', 'v': '新游中心' }, { 'n': '我的世界中国版', 'v': '我的世界中国版' }, { 'n': '梦幻西游电脑版', 'v': '梦幻西游电脑版' }, { 'n': '大话西游2经典版', 'v': '大话西游2经典版' }, { 'n': '永劫无间', 'v': '永劫无间' }, { 'n': '新倩女幽魂', 'v': '新倩女幽魂' }, { 'n': '荒野行动PC模拟器', 'v': '荒野行动PC模拟器' }, { 'n': '天下3', 'v': '天下3' }, { 'n': '一梦江湖', 'v': '一梦江湖' }, { 'n': '大话西游2免费版', 'v': '大话西游2免费版' }, { 'n': '逆水寒', 'v': '逆水寒' }, { 'n': '其他游戏', 'v': '其他游戏' }, { 'n': '超激斗梦境', 'v': '超激斗梦境' }, { 'n': '魔兽世界怀旧服', 'v': '魔兽世界怀旧服' }, { 'n': '镇魔曲', 'v': '镇魔曲' }, { 'n': 'FPS综合游戏', 'v': 'FPS综合游戏' }, { 'n': '绿茵信仰', 'v': '绿茵信仰' }, { 'n': '天谕', 'v': '天谕' }, { 'n': '魔兽世界', 'v': '魔兽世界' }, { 'n': '大唐无双零', 'v': '大唐无双零' }, { 'n': '武魂2', 'v': '武魂2' }, { 'n': '命运2', 'v': '命运2' }, { 'n': '暗黑破坏神', 'v': '暗黑破坏神' }, { 'n': '泰亚史诗', 'v': '泰亚史诗' }, { 'n': '泰亚史诗', 'v': '泰亚史诗' }, { 'n': '战意', 'v': '战意' }, { 'n': '易次元', 'v': '易次元' }, { 'n': '无主之地3', 'v': '无主之地3' }, { 'n': 'EVE Online', 'v': 'EVE Online' }, { 'n': '全面战争:竞技场', 'v': '全面战争:竞技场' }, { 'n': '暴雪游戏', 'v': '暴雪游戏' }, { 'n': '魔兽争霸', 'v': '魔兽争霸' }, { 'n': '大话女儿国', 'v': '大话女儿国' }] }] }, - detailUrl: '/index/liveRoom?platform=fyclass&roomId=fyid',//二级详情拼接链接(json格式用) - searchUrl: '/api/live/search?platform=all&keyWords=**&isLive=0', - searchable: 2, - quickSearch: 0, - headers: { - 'User-Agent': 'PC_UA' - }, - timeout: 5000, - play_parse: true, - lazy: '', - double: false, - limit: 6, - 推荐: '*', - 一级: 'json:data;roomName;roomPic;ownerName;roomId', - 二级: '*', - 搜索: '*', -} diff --git a/TVBox_JS/KUBO影视.js b/TVBox_JS/KUBO影视.js deleted file mode 100644 index fa644a1..0000000 --- a/TVBox_JS/KUBO影视.js +++ /dev/null @@ -1,25 +0,0 @@ -var rule = { - title:'KUBO影视', - host:'https://123kubo.tv', - // homeUrl:'/', - url:'/show/fyclass/page/fypage.html', - searchUrl:'/search/page/fypage/wd/**.html', - searchable:2,//是否启用全局搜索, - quickSearch:0,//是否启用快速搜索, - filterable:0,//是否启用分类筛选, - headers:{//网站的请求头,完整支持所有的,常带ua和cookies - 'User-Agent':'MOBILE_UA', - // "Cookie": "searchneed=ok" - }, - class_name:'电影&电视剧&综艺&动漫', - class_url:'1&2&3&4', - //class_parse:'.myui-panel-box&&ul&&li;a&&Text;a&&href;/v/(.*)/', - play_parse:true, - lazy:'', - limit:6, - 推荐:'ul.hl-vod-list;li;a&&title;.hl-item-thumb.hl-lazy&&data-original;.hl-pic-text&&Text;a&&href', - double:true, // 推荐内容是否双层定位 - 一级:'.hl-list-item;a&&title;.hl-item-thumb.hl-lazy&&data-original;.hl-pic-text&&Text;a&&href', - 二级:{"title":".hl-item-thumb.hl-lazy&&title;.hl-full-box&&ul li:eq(6)&&Text","img":".hl-item-thumb.hl-lazy&&data-original","desc":".hl-full-box&&ul&&li:eq(1)&&Text;.hl-full-box&&ul&&li:eq(2)&&Text;.hl-full-box&&ul&&li:eq(3)&&Text","content":".hl-col-xs-12.blurb&&Text","tabs":".hl-plays-from:eq(0) a","lists":".hl-plays-list:eq(#id) li"}, - 搜索:'.hl-item-div;a&&title;.hl-item-thumb&&data-original;.hl-lc-1&&Text;a&&href;.text-muted:eq(-1)&&Text', -} diff --git a/TVBox_JS/LIBVIO.js b/TVBox_JS/LIBVIO.js deleted file mode 100644 index bcd99f0..0000000 --- a/TVBox_JS/LIBVIO.js +++ /dev/null @@ -1,8 +0,0 @@ -var rule = Object.assign(muban.首图2,{ -title:'LIBVIO', -// host:'https://www.libvio.me', -host:'https://www.libvio.fun', -url:'/type/fyclass-fypage.html', -class_parse:'.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;/(\\d+).html', -searchUrl:'/search/**----------fypage---.html', -}); \ No newline at end of file diff --git a/TVBox_JS/MXONE.js b/TVBox_JS/MXONE.js deleted file mode 100644 index 99cf7c2..0000000 --- a/TVBox_JS/MXONE.js +++ /dev/null @@ -1,9 +0,0 @@ -var rule = Object.assign(muban.mxpro,{ - title:'MXONE', - host:'https://www.jpys.me', - url:'vodshow/fyclass--------fypage---.html', - searchUrl:'/vodsearch/**----------fypage---.html/', - class_name:'电影&电视剧&动漫&综艺', - class_url:'1&2&3&4', - class_parse:'', -}); \ No newline at end of file diff --git a/TVBox_JS/Missav.js b/TVBox_JS/Missav.js deleted file mode 100644 index 5ef9b5c..0000000 --- a/TVBox_JS/Missav.js +++ /dev/null @@ -1,22 +0,0 @@ -var rule = { - title:'Missav', - host:'https://missav.com', - searchUrl:'/cn/search/**', - url:'/cn/fyclass?page=fypage', - headers:{ - 'User-Agent':'MOBILE_UA' - }, - timeout:5000, - class_name:'最近更新&新作上市&无码流出&SIRO&LUXU&GANA&PRESTIGE&S-CUTE&ARA&FC2&麻豆传媒&本月热门',//静态分类名称拼接 - class_url:'new&release&uncensored-leak&siro&luxu&gana&maan&scute&ara&fc2&madou&monthly-hot',//静态分类标识拼接 - limit:5, - play_parse:true, - lazy:'', - 一级:'.grid.grid-cols-2 div&&a;.lozad.w-full&&alt;.lozad.w-full&&data-src;.absolute.bottom-1&&Text;a&&href', - 二级:'*', - 搜索:'.grid.grid-cols-2 div&&a;.lozad.w-full&&alt;.lozad.w-full&&data-src;.absolute.bottom-1&&Text;a&&href', - searchable:1,//是否启用全局搜索, - quickSearch:1,//是否启用快速搜索, - filterable:0,//是否启用分类筛选, -} - diff --git a/TVBox_JS/Nike影视.js b/TVBox_JS/Nike影视.js deleted file mode 100644 index fdf379e..0000000 --- a/TVBox_JS/Nike影视.js +++ /dev/null @@ -1,8 +0,0 @@ -var rule = Object.assign(muban.mxpro,{ -title:'Nike影视', -host:'https://www.ajeee.com', -url:'/show/fyclass/page/fypage.html', -class_name:'电影&电视剧&综艺&动漫', -class_url:'Movie&Tv&Variety&Cartoon', -class_parse:'', -}); \ No newline at end of file diff --git a/TVBox_JS/RP影视.js b/TVBox_JS/RP影视.js deleted file mode 100644 index c481f39..0000000 --- a/TVBox_JS/RP影视.js +++ /dev/null @@ -1,16 +0,0 @@ -var rule = { - title:'RP影视', - host:'https://mac.rp123.top', - url:'/vodshow/fyclass--hits------fypage---/', - searchUrl:'/vodsearch/-------------/?wd=**', - searchable:2,//是否启用全局搜索, - quickSearch:0,//是否启用快速搜索, - filterable:0,//是否启用分类筛选, - headers:{'User-Agent':'MOBILE_UA',}, - class_name:'电影&电视剧&综艺&动漫&纪录片&4K专区', - class_url:'1&2&3&4&35&40', - 推荐:'.module-poster-item;*;*;*;*', - 一级:'.module-poster-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href', - 二级:{"title":"h1&&Text;.module-info-tag-link a&&Text","img":".alignnone&&src","desc":";;;.module-info-items div:eq(4) a&&Text;.module-info-items div:eq(3) a&&Text","content":".show-desc&&Text","tabs":".module-tab-items-box span","lists":".module-play-list:eq(#id) a"}, - 搜索:'.module-card-item-poster;img&&alt;.lazyload&&data-original;.module-item-note&&Text;a&&href', -} \ No newline at end of file diff --git a/TVBox_JS/TV云播.js b/TVBox_JS/TV云播.js deleted file mode 100644 index dcd5b74..0000000 --- a/TVBox_JS/TV云播.js +++ /dev/null @@ -1,9 +0,0 @@ -muban.首图.二级.tabs = '.myui-panel__head.bottom-line h3'; -var rule = Object.assign(muban.首图,{ -title:'TV云播', -host:'http://www.tvyb03.com', -url:'/vod/type/id/fyclass/page/fypage.html', -class_parse:'.item.nav-list.clearfix li:gt(0):lt(5);a&&Text;a&&href;/(\\d+).html', -推荐:'.myui-panel_bd.clearfix;.myui-vodlist.clearfix&&li;a&&title;a&&data-original;.background-color&&Text;a&&href', - 一级:'.myui-vodlist li;a&&title;a&&data-original;.pic-tag-top&&Text;a&&href', -}); \ No newline at end of file diff --git a/TVBox_JS/alist.js b/TVBox_JS/alist.js deleted file mode 100644 index f124d80..0000000 --- a/TVBox_JS/alist.js +++ /dev/null @@ -1,270 +0,0 @@ -import _ from 'https://underscorejs.org/underscore-esm-min.js' -import { distance } from 'https://unpkg.com/fastest-levenshtein@1.0.16/esm/mod.js' - -/** - * alist js - * 配置设置 {"key":"Alist","name":"Alist","type":3,"api":"http://xxx.com/alist.js","searchable":0,"quickSearch":0,"filterable":0,"ext":"http://xxx.com/alist.json"} - * alist.json [{ - name:'名称', - server:'地址', - startPage:'/', //启动文件夹 - showAll: false , //是否显示全部文件,默认false只显示 视频和文件夹 - params:{ //对应文件夹参数 如设置对应文件夹的密码 - '/abc':{ password : '123' }, - '/abc/abc':{ password : '123' }, - } - }] - * 提示 想要加载文件夹里面全部视频到详情(看剧可以自动播放下一集支持历史记录) - * 需要改软件才能支持,,建议长按文件夹时添加判断 tag == folder 时跳转 DetailActivity - */ - -const http = function (url, options = {}) { - if(options.method =='POST' && options.data){ - options.body = JSON.stringify(options.data) - options.headers = Object.assign({'content-type':'application/json'}, options.headers) - } - const res = req(url, options); - res.json = () => res.content ? JSON.parse(res.content) : null; - res.text = () => res.content; - return res -}; -["get", "post"].forEach(method => { - http[method] = function (url, options = {}) { - return http(url, Object.assign(options, {method: method.toUpperCase()})); - } -}) - -const __drives = {} - -function get_drives_path(tid) { - const index = tid.indexOf('$'); - const name = tid.substring(0, index); - const path = tid.substring(index + 1) - return { drives: get_drives(name), path } -} - -function get_drives(name) { - const { settings, api, server } = __drives[name] - if (settings.v3 == null) { //获取 设置 - settings.v3 = false - const data = http.get(server + '/api/public/settings').json().data; - if (_.isArray(data)) { - settings.title = data.find(x => x.key == 'title')?.value; - settings.v3 = false; - settings.version = data.find(x => x.key == 'version')?.value; - settings.enableSearch = data.find(x => x.key == 'enable search')?.value == 'true'; - } else { - settings.title = data.title; - settings.v3 = true; - settings.version = data.version; - settings.enableSearch = false; //v3 没有找到 搜索配置 - } - //不同版本 接口不一样 - api.path = settings.v3 ? '/api/fs/list' : '/api/public/path'; - api.file = settings.v3 ? '/api/fs/get' : '/api/public/path'; - api.search = settings.v3 ? '/api/public/search' : '/api/public/search'; - } - return __drives[name] -} - -function init(ext) { - const data = http.get(ext).json(); - data.forEach(item => __drives[item.name] = { - name: item.name, - server: item.server.endsWith("/") ? url.substring(0, item.server.length() - 1) : item.server, - startPage: item.startPage || '/', //首页 - showAll: item.showAll === true, //默认只显示 视频和文件夹,如果想显示全部 showAll 设置true - params: item.params || {}, - _path_param: item.params ? _.sortBy(Object.keys(item.params), function(x) { return -x.length }) : [], - settings: {}, - api: {}, - getParams(path) { - const key = this._path_param.find(x => path.startsWith(x)) - return Object.assign({}, this.params[key], { path }) - }, - getPath(path) { - const res = http.post(this.server + this.api.path, { data: this.getParams(path) }).json() - return this.settings.v3 ? res.data.content : res.data.files - }, - getFile(path) { - const res = http.post(this.server + this.api.file, { data: this.getParams(path) }).json() - const data = this.settings.v3 ? res.data : res.data.files[0] - if (!this.settings.v3) data.raw_url = data.url //v2 的url和v3不一样 - return data - }, - isFolder(data) { return data.type == 1 }, - isVideo(data) { //判断是否是 视频文件 - return this.settings.v3 ? data.type == 2 : data.type == 3 - }, - is_subt(data) { - if (data.type == 1) return false - const ext = [".srt", ".ass", ".scc", ".stl", ".ttml"] - return ext.some(x => data.name.endsWith(x)) - }, - getPic(data) { - let pic = this.settings.v3 ? data.thumb : data.thumbnail; - return pic || (this.isFolder(data) ? "http://img1.3png.com/281e284a670865a71d91515866552b5f172b.png" : '') - } - }) -} - -function home(filter) { - let classes = Object.keys(__drives).map(key => ({ - type_id: `${key}$${__drives[key].startPage}`, - type_name: key, - type_flag: '1', - })) - return JSON.stringify({ 'class': classes }); -} - -function homeVod(params) { - return JSON.stringify({ 'list': [] }) -} - -function category(tid, pg, filter, extend) { - let { drives, path } = get_drives_path(tid) - const id = tid.endsWith('/') ? tid : tid + '/' - const list = drives.getPath(path) - let subList = [] - let vodFiles = [] - let allList = [] - list.forEach(item => { - if (drives.is_subt(item)) subList.push(item.name) - if (!drives.showAll && !drives.isFolder(item) && !drives.isVideo(item)) return //只显示视频文件和文件夹 - let remark = get_size(item.size) - const vod = { - 'vod_id': id + item.name + (drives.isFolder(item) ? '/' : ''), - 'vod_name': item.name.replaceAll("$", "").replaceAll("#", ""), - 'vod_pic': drives.getPic(item), - 'vod_tag': drives.isFolder(item) ? 'folder' : 'file', - 'vod_remarks': drives.isFolder(item) ? remark + ' 文件夹' : remark - } - if (drives.isVideo(item)) vodFiles.push(vod) - allList.push(vod) - }) - - if (vodFiles.length == 1 && subList.length > 0) { //只有一个视频 一个或者多个字幕 取相似度最高的 - let sub = subList.length == 1 ? subList[0] : _.chain(allList).sortBy(x => (x.includes('chs') ? 100 : 0) + levenshteinDistance(x, vodFiles[0].vod_name)).last().value() - vodFiles[0].vod_id += "@@@" + sub - //vodFiles[0].vod_remarks += " 有字幕" - } else { - vodFiles.forEach(item => { - const lh = 0 - let sub - subList.forEach(s => { - //编辑距离相似度 - const l = levenshteinDistance(s, item.vod_name) - if (l > 60 && l > lh) sub = s - }) - if (sub) { - item.vod_id += "@@@" + sub - //item.vod_remarks += " 有字幕" - } - }) - } - - return JSON.stringify({ - 'page': 1, - 'pagecount': 1, - 'limit': allList.length, - 'total': allList.length, - 'list': allList, - }); -} - -function detail(tid) { - let { drives, path } = get_drives_path(tid) - if (path.endsWith("/")) { //长按文件夹可以 加载里面全部视频到详情 - const content = category(tid, null, false, null) - const { list } = JSON.parse(content) - const vod_play_url = [] - list.forEach(x => { - if (x.vod_tag == 'file') vod_play_url.push(`${x.vod_name}$${x.vod_id.substring(x.vod_id.indexOf('$') + 1)}`) - }) - const pl = path.split("/"); - const vod_name = pl[pl.length - 2] || drives.name; - let vod = { - vod_id: tid, - vod_name: vod_name, - type_name: "文件夹", - vod_pic: "https://avatars.githubusercontent.com/u/97389433?s=200&v=4", - vod_content: tid, - vod_tag: 'folder', - vod_play_from: drives.name, - vod_play_url: vod_play_url.join('#'), - vod_remarks: drives.settings.title, - } - return JSON.stringify({ 'list': [vod] }) - } else { - let paths = path.split("@@@"); - let vod_name = paths[0].substring(paths[0].lastIndexOf("/") + 1) - let vod = { - vod_id: tid, - vod_name: vod_name, - type_name: "文件", - vod_pic: "https://avatars.githubusercontent.com/u/97389433?s=200&v=4", - vod_content: tid, - vod_play_from: drives.name, - vod_play_url: vod_name + "$" + path, - vod_remarks: drives.settings.title, - } - return JSON.stringify({ - 'list': [vod] - }); - } -} - -function play(flag, id, flags) { - const drives = get_drives(flag) - const urls = id.split("@@@") - const vod = { - 'parse': 0, - 'playUrl': '', - 'url': drives.getFile(urls[0]).raw_url - } - if (urls.length >= 2) { - const path = urls[0].substring(0, urls[0].lastIndexOf('/') + 1) - vod.subt = drives.getFile(path + urls[1]).raw_url - } - return JSON.stringify(vod) -} - -function search(wd, quick) { - return JSON.stringify({ - 'list': [] - }); -} - -function get_size(sz) { - if (sz <= 0) return ""; - let filesize = ""; - if (sz > 1024 * 1024 * 1024 * 1024.0) { - sz /= (1024 * 1024 * 1024 * 1024.0); - filesize = "TB"; - } else if (sz > 1024 * 1024 * 1024.0) { - sz /= (1024 * 1024 * 1024.0); - filesize = "GB"; - } else if (sz > 1024 * 1024.0) { - sz /= (1024 * 1024.0); - filesize = "MB"; - } else { - sz /= 1024.0; - filesize = "KB"; - } - return sz.toFixed(2) + filesize -} - -function levenshteinDistance(str1, str2) { - return 100 - 100 * distance(str1, str2) / Math.max(str1.length, str2.length) -} - -__JS_SPIDER__ = { - init: init, - home: home, - homeVod: homeVod, - category: category, - detail: detail, - play: play, - search: search -} - diff --git a/TVBox_JS/banan.js b/TVBox_JS/banan.js deleted file mode 100644 index d3befc6..0000000 --- a/TVBox_JS/banan.js +++ /dev/null @@ -1,19 +0,0 @@ -var rule = { - title:'banan', - host:'https://banan.tv', - url:'/vodtype/fyclass-fypage.html', - headers:{ - 'User-Agent':'MOBILE_UA' - }, - timeout:5000, - class_name:'探花&91大神&素人&国产&高清&FC2',//静态分类名称拼接 - class_url:'57&23&63&25&22&28',//静态分类标识拼接 - //class_parse:'ul.navbar-nav&&li:gt(1):lt(6);a&&Text;a&&href', - limit:5, - play_parse:true, - lazy:'', - 一级:'.img-box.cover-md&&a;img&&alt;img&&data-src;.grid_date&&Text;a&&href', - 二级:'*', - -} - diff --git a/TVBox_JS/cokemv.js b/TVBox_JS/cokemv.js deleted file mode 100644 index 1f4a3d2..0000000 --- a/TVBox_JS/cokemv.js +++ /dev/null @@ -1,5 +0,0 @@ -var rule = Object.assign(muban.mxpro,{ -title:'cokemv', -host:'https://cokemv.me', -class_parse:'.navbar-items li:gt(1):lt(7);a&&Text;a&&href;/(\\d+).html', -}); \ No newline at end of file diff --git a/TVBox_JS/czzy.js b/TVBox_JS/czzy.js deleted file mode 100644 index dff451e..0000000 --- a/TVBox_JS/czzy.js +++ /dev/null @@ -1,20 +0,0 @@ -var rule={ - title:'厂长资源', - host:'https://www.czspp.com', - url:'/fyclass/page/fypage', - searchUrl:'/xssearch?q=**&f=_all&p=fypage', - searchable:2,//是否启用全局搜索, - quickSearch:1,//是否启用快速搜索, - filterable:0,//是否启用分类筛选, - headers:{'User-Agent':'UC_UA', }, - play_parse:true, - lazy:'', - limit:6, - class_name:'豆瓣电影Top250&最新电影&电视剧&国产剧&美剧&韩剧&番剧&动漫', - class_url:'dbtop250&zuixindianying&dsj&gcj&meijutt&hanjutv&fanju&dm', - 推荐:'.bt_img;ul&&li;*;*;*;*', - double:true, - 一级:'.bt_img&&ul&&li;h3.dytit&&Text;img.lazy&&data-original;.jidi&&Text;a&&href', - 二级:{"title":"h1&&Text;.moviedteail_list li&&a&&Text","img":"div.dyimg img&&src","desc":".moviedteail_list li:eq(3) a&&Text;.moviedteail_list li:eq(2) a&&Text;.moviedteail_list li:eq(1) a&&Text;.moviedteail_list li:eq(7) a&&Text;.moviedteail_list li:eq(5) a&&Text","content":".yp_context&&Text","tabs":".mi_paly_box&&span","lists":".paly_list_btn:eq(#id) a"}, - 搜索:'.search_list&&ul&&li;*;*;*;*', -} \ No newline at end of file diff --git a/TVBox_JS/ddys.js b/TVBox_JS/ddys.js deleted file mode 100644 index 5d67d28..0000000 --- a/TVBox_JS/ddys.js +++ /dev/null @@ -1,29 +0,0 @@ -var rule={ - title:'ddys', - host:'https://ddys.tv', - // homeUrl:'/', - url:'/fyclass/page/fypage/', - searchUrl:'/?s=**&post_type=post', - searchable:2,//是否启用全局搜索, - quickSearch:0,//是否启用快速搜索, - filterable:0,//是否启用分类筛选, - headers:{//网站的请求头,完整支持所有的,常带ua和cookies - 'User-Agent':'MOBILE_UA', - // "Cookie": "searchneed=ok" - }, - // class_name:'电影&剧集&动画', - // class_url:'movie&airing&anime', - class_parse:'#primary-menu li.menu-item;a&&Text;a&&href;\.tv/(.*)', - cate_exclude:'站长|^其他$|关于|^电影$|^剧集$|^类型$', - play_parse:true, - lazy:'js:let purl=input.split("|")[0];let referer=input.split("|")[1];let zm=input.split("|")[2];print("purl:"+purl);print("referer:"+referer);print("zm:"+zm);let myua="okhttp/3.15";if(/ddrkey/.test(purl)){let ret=request(purl,{Referer:referer,withHeaders:true,"User-Agent":myua});log(ret);input=purl}else{let html=request(purl,{headers:{Referer:referer,"User-Agent":myua}});print(html);try{input=JSON.parse(html).url||{}}catch(e){input=purl}}', - limit:6, - //推荐:'.indexShowBox;ul&&li;a&&title;img&&data-src;.s1&&Text;a&&href', - double:true, // 推荐内容是否双层定位 - 一级:'.post-box-list&&article;a:eq(-1)&&Text;.post-box-image&&style;a:eq(0)&&Text;a:eq(-1)&&href', - 二级:{"title":".post-title&&Text;.cat-links&&Text","img":".doulist-item&&img&&data-cfsrc","desc":".published&&Text","content":".abstract&&Text","tabs":"js:TABS=['国内','海外(貌似不能播放)']", - lists:'js:log(TABS);let d=[];pdfh=jsp.pdfh;pdfa=jsp.pdfa;if(typeof play_url==="undefined"){var play_url=""}function getLists(html){let src=pdfh(html,".wp-playlist-script&&Html");src=JSON.parse(src).tracks;let list1=[];let list2=[];src.forEach(function(it){let src0=it.src0;let src1=it.src1;let src2=it.src2;let title=it.caption;let url1="https://ddys.tv/getvddr/video?id="+src1+"&dim=1080P+&type=mix";let url2="https://w.ddys.tv"+src0+"?ddrkey="+src2;let zm="https://ddys.tv/subddr/"+it.subsrc;list1.push({title:title,url:url1,desc:zm});list2.push({title:title,url:url2,desc:zm})});return{list1:list1,list2:list2}}var data=getLists(html);var list1=data.list1;var list2=data.list2;let nums=pdfa(html,"body&&.post-page-numbers");nums.forEach(function(it){let num=pdfh(it,"body&&Text");log(num);let nurl=input+num+"/";if(num==1){return}log(nurl);let html=request(nurl);let data=getLists(html);list1=list1.concat(data.list1);list2=list2.concat(data.list2)});list1=list1.map(function(item){return item.title+"$"+play_url+urlencode(item.url+"|"+input+"|"+item.desc)});list2=list2.map(function(item){return item.title+"$"+play_url+urlencode(item.url+"|"+input+"|"+item.desc)});LISTS=[list1,list2];', - }, - 搜索:'#main&&article;.post-title&&Text;;.published&&Text;a&&href', - 推荐:'*' -} \ No newline at end of file diff --git a/TVBox_JS/douban.js b/TVBox_JS/douban.js deleted file mode 100644 index 618c0d8..0000000 --- a/TVBox_JS/douban.js +++ /dev/null @@ -1,168 +0,0 @@ -import './uri.min.js'; - -/** - * 豆瓣索引 - * @antod - * - */ - -const key = 'douban'; -const api = 'https://frodo.douban.com/api/v2'; -const ua = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat'; -const apiKey = '0ac44ae016490db2204ce0a042db2916'; -const homeData = {"class":[{"type_id":"movie","type_name":"电影"},{"type_id":"tv","type_name":"电视剧"},{"type_id":"rank","type_name":"排行版"}],"filters":{"movie":[{"key":"类型","name":"类型","value":[{"n":"全部类型","v":""},{"n":"喜剧","v":"喜剧"},{"n":"爱情","v":"爱情"},{"n":"动作","v":"动作"},{"n":"科幻","v":"科幻"},{"n":"动画","v":"动画"},{"n":"悬疑","v":"悬疑"},{"n":"犯罪","v":"犯罪"},{"n":"惊悚","v":"惊悚"},{"n":"冒险","v":"冒险"},{"n":"音乐","v":"音乐"},{"n":"历史","v":"历史"},{"n":"奇幻","v":"奇幻"},{"n":"恐怖","v":"恐怖"},{"n":"战争","v":"战争"},{"n":"传记","v":"传记"},{"n":"歌舞","v":"歌舞"},{"n":"武侠","v":"武侠"},{"n":"情色","v":"情色"},{"n":"灾难","v":"灾难"},{"n":"西部","v":"西部"},{"n":"纪录片","v":"纪录片"},{"n":"短片","v":"短片"}]},{"key":"地区","name":"地区","value":[{"n":"全部地区","v":""},{"n":"华语","v":"华语"},{"n":"欧美","v":"欧美"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"中国大陆","v":"中国大陆"},{"n":"美国","v":"美国"},{"n":"中国香港","v":"中国香港"},{"n":"中国台湾","v":"中国台湾"},{"n":"英国","v":"英国"},{"n":"法国","v":"法国"},{"n":"德国","v":"德国"},{"n":"意大利","v":"意大利"},{"n":"西班牙","v":"西班牙"},{"n":"印度","v":"印度"},{"n":"泰国","v":"泰国"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"加拿大","v":"加拿大"},{"n":"澳大利亚","v":"澳大利亚"},{"n":"爱尔兰","v":"爱尔兰"},{"n":"瑞典","v":"瑞典"},{"n":"巴西","v":"巴西"},{"n":"丹麦","v":"丹麦"}]},{"key":"sort","name":"排序","value":[{"n":"近期热度","v":"T"},{"n":"首映时间","v":"R"},{"n":"高分优先","v":"S"}]},{"key":"年代","name":"年代","value":[{"n":"全部年代","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2010年代","v":"2010年代"},{"n":"2000年代","v":"2000年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"},{"n":"70年代","v":"70年代"},{"n":"60年代","v":"60年代"},{"n":"更早","v":"更早"}]}],"tv":[{"key":"类型","name":"类型","value":[{"n":"不限","v":""},{"n":"电视剧","v":"电视剧"},{"n":"综艺","v":"综艺"}]},{"key":"电视剧形式","name":"电视剧形式","value":[{"n":"不限","v":""},{"n":"喜剧","v":"喜剧"},{"n":"爱情","v":"爱情"},{"n":"悬疑","v":"悬疑"},{"n":"动画","v":"动画"},{"n":"武侠","v":"武侠"},{"n":"古装","v":"古装"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"科幻","v":"科幻"},{"n":"恐怖","v":"恐怖"},{"n":"历史","v":"历史"},{"n":"战争","v":"战争"},{"n":"动作","v":"动作"},{"n":"冒险","v":"冒险"},{"n":"传记","v":"传记"},{"n":"剧情","v":"剧情"},{"n":"奇幻","v":"奇幻"},{"n":"惊悚","v":"惊悚"},{"n":"灾难","v":"灾难"},{"n":"歌舞","v":"歌舞"},{"n":"音乐","v":"音乐"}]},{"key":"综艺形式","name":"综艺形式","value":[{"n":"不限","v":""},{"n":"真人秀","v":"真人秀"},{"n":"脱口秀","v":"脱口秀"},{"n":"音乐","v":"音乐"},{"n":"歌舞","v":"歌舞"}]},{"key":"地区","name":"地区","value":[{"n":"全部地区","v":""},{"n":"华语","v":"华语"},{"n":"欧美","v":"欧美"},{"n":"国外","v":"国外"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"中国大陆","v":"中国大陆"},{"n":"中国香港","v":"中国香港"},{"n":"美国","v":"美国"},{"n":"英国","v":"英国"},{"n":"泰国","v":"泰国"},{"n":"中国台湾","v":"中国台湾"},{"n":"意大利","v":"意大利"},{"n":"法国","v":"法国"},{"n":"德国","v":"德国"},{"n":"西班牙","v":"西班牙"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"瑞典","v":"瑞典"},{"n":"巴西","v":"巴西"},{"n":"丹麦","v":"丹麦"},{"n":"印度","v":"印度"},{"n":"加拿大","v":"加拿大"},{"n":"爱尔兰","v":"爱尔兰"},{"n":"澳大利亚","v":"澳大利亚"}]},{"key":"sort","name":"排序","value":[{"n":"近期热度","v":"T"},{"n":"首播时间","v":"R"},{"n":"高分优先","v":"S"}]},{"key":"年代","name":"年代","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2010年代","v":"2010年代"},{"n":"2000年代","v":"2000年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"},{"n":"70年代","v":"70年代"},{"n":"60年代","v":"60年代"},{"n":"更早","v":"更早"}]},{"key":"平台","name":"平台","value":[{"n":"全部","v":""},{"n":"腾讯视频","v":"腾讯视频"},{"n":"爱奇艺","v":"爱奇艺"},{"n":"优酷","v":"优酷"},{"n":"湖南卫视","v":"湖南卫视"},{"n":"Netflix","v":"Netflix"},{"n":"HBO","v":"HBO"},{"n":"BBC","v":"BBC"},{"n":"NHK","v":"NHK"},{"n":"CBS","v":"CBS"},{"n":"NBC","v":"NBC"},{"n":"tvN","v":"tvN"}]}],"rank":[{"key":"榜单","name":"榜单","value":[{"n":"实时热门电影","v":"movie_real_time_hotest"},{"n":"一周口碑电影榜","v":"movie_weekly_best"},{"n":"豆瓣电影Top250","v":"movie_top250"},{"n":"实时热门电视","v":"tv_real_time_hotest"},{"n":"华语口碑剧集榜","v":"tv_chinese_best_weekly"},{"n":"全球口碑剧集榜","v":"tv_global_best_weekly"},{"n":"国内口碑综艺榜","v":"show_chinese_best_weekly"},{"n":"国外口碑综艺榜","v":"show_global_best_weekly"}]}]}}; - -function request(path) { - const uri = new Uri(api + path); - // TODO - params - const header = { - 'User-Agent': ua, - 'Referer': 'https://servicewechat.com/wx2f9b06c1de1ccfca/84/page-frame.html' - }; - const res = req(uri.toString(), { - headers: header - }); - - const content = res.content; - return content; -} - -function init(ext) { -} - -function home(filter) { - if (filter) return JSON.stringify(homeData); - return JSON.stringify({ - 'class': homeData.class - }); -} - -function homeVod(params) { - try { - const url = '/subject_collection/show_hot/items?apiKey=' + apiKey + '&count=20&start=0'; - - let videos = []; - for (const vod of JSON.parse(request(url)).subject_collection_items) { - if (vod.type && (vod.type == 'tv' || vod.type == 'movie')) { - videos.push({ - 'vod_id': '/' + vod.type + '/' + vod.id, - 'vod_name': vod.title, - 'vod_pic': vod.pic.normal, - 'vod_remarks': vod.rating.value - }); - } - } - - return JSON.stringify({ - 'list': videos - }); - } catch (e) { - console.log(e); - } - return JSON.stringify({ - 'list': [] - }); -} - -function category(tid, pg, filter, extend) { - try { - let url = ''; - let data = {}; - let list = []; - const pageSize = 30; - - if (filter && extend) { - // TODO - filter - console.log(JSON.stringify(extend)); - } - - if (tid == 'movie' || tid == 'tv') { - url += '/' + tid + '/recommend?apiKey=' + apiKey - + '&tags=&sort=T&refresh=0&selected_categories=' + JSON.stringify(extend) - + '&count=' + pageSize + '&start=' + ((parseInt(pg) - 1) * pageSize); - - data = JSON.parse(request(url)); - list = data.items; - } else if (tid == 'rank') { - let type = 'show_hot'; - url += '/subject_collection/' + type + '/items?apiKey=' + apiKey - + '&count=' + pageSize + '&start=' + (parseInt(pg) - 1) * pageSize; - data = JSON.parse(request(url)); - list = data.subject_collection_items; - } - - // console.log(url); - - let videos = []; - for (const vod of list) { - if (vod.type && (vod.type == 'tv' || vod.type == 'movie')) { - videos.push({ - 'vod_id': '/' + vod.type + '/' + vod.id, - 'vod_name': vod.title, - 'vod_pic': vod.pic.normal, - 'vod_remarks': vod.rating.value - }); - } - } - - return JSON.stringify({ - 'page': parseInt(pg), - 'pagecount': parseInt(data.total / pageSize), - 'limit': pageSize, - 'total': data.total, - 'list': videos, - }); - } catch (e) { - console.log(e) - } - return '{}'; -} - -function detail(id) { - try { - const url = id + '?apiKey=' + apiKey; - const data = JSON.parse(request(url)); - - let directors = []; - data.directors.forEach((it) => {directors.push(it.name)}); - let actors = []; - data.actors.forEach((it) => {actors.push(it.name)}); - - let vod = { - 'vod_id': data.id, - 'vod_name': data.title, - 'vod_pic': data.pic.normal, - 'type_name': data.genres.join('/'), - 'vod_year': data.year, - 'vod_area': data.area, - 'vod_remarks': data.card_subtitle, - 'vod_actor': actors.join('/'), - 'vod_director': directors.join('/'), - 'vod_content': data.intro, - } - return JSON.stringify({ - 'list': [vod] - }); - } catch (e) { - console.log(e) - } - return '{}'; -} - -function play(flag, id, flags) { - return '{}'; -} - -function search(wd, quick) { - return '{}'; -} - -__JS_SPIDER__ = { - init: init, - home: home, - homeVod: homeVod, - category: category, - detail: detail, - play: play, - search: search -} diff --git a/TVBox_JS/douban2.js b/TVBox_JS/douban2.js deleted file mode 100644 index a77c46a..0000000 --- a/TVBox_JS/douban2.js +++ /dev/null @@ -1,34 +0,0 @@ -var rule = { - title:'drpy', - host:'https://frodo.douban.com', - homeUrl:'', - searchUrl:'', - searchable:1, - quickSearch:1, - filterable:1, - // 分类链接fypage参数支持1个()表达式 - url:'/?pg=fypage&class=fyclass&douban=', - filter_url:'fl={{fl}}', - headers:{ - "Host": "frodo.douban.com", - "Connection": "Keep-Alive", - "Referer": "https://servicewechat.com/wx2f9b06c1de1ccfca/84/page-frame.html", - "content-type": "application/json", - "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat" - }, - timeout:5000, - class_name:'热门电影&热播剧集&热播综艺&电影筛选&电视筛选&电影榜单&电视榜单&我的豆瓣', - class_url:'hot_gaia&tv_hot&show_hot&movie&tv&rank_list_movie&rank_list_tv&interests', - filter:{'interests': [{'key': 'status', 'name': '状态', 'value': [{'n': '想看', 'v': 'mark'}, {'n': '在看', 'v': 'doing'}, {'n': '看过', 'v': 'done'}]}, {'key': 'subtype_tag', 'name': '形式', 'value': [{'n': '全部', 'v': ''}, {'n': '电影', 'v': 'movie'}, {'n': '电视', 'v': 'tv'}]}, {'key': 'year_tag', 'name': '年代', 'value': [{'n': '全部', 'v': '全部'}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2010年代', 'v': '2010年代'}, {'n': '2000年代', 'v': '2000年代'}, {'n': '90年代', 'v': '90年代'}, {'n': '80年代', 'v': '80年代'}, {'n': '70年代', 'v': '70年代'}, {'n': '60年代', 'v': '60年代'}, {'n': '更早', 'v': '更早'}]}], 'hot_gaia': [{'key': 'sort', 'name': '排序', 'value': [{'n': '热度', 'v': 'recommend'}, {'n': '最新', 'v': 'time'}, {'n': '评分', 'v': 'rank'}]}, {'key': 'area', 'name': '地区', 'value': [{'n': '全部', 'v': '全部'}, {'n': '华语', 'v': '华语'}, {'n': '欧美', 'v': '欧美'}, {'n': '韩国', 'v': '韩国'}, {'n': '日本', 'v': '日本'}]}], 'tv_hot': [{'key': 'type', 'name': '分类', 'value': [{'n': '综合', 'v': 'tv_hot'}, {'n': '国产剧', 'v': 'tv_domestic'}, {'n': '欧美剧', 'v': 'tv_american'}, {'n': '日剧', 'v': 'tv_japanese'}, {'n': '韩剧', 'v': 'tv_korean'}, {'n': '动画', 'v': 'tv_animation'}]}], 'show_hot': [{'key': 'type', 'name': '分类', 'value': [{'n': '综合', 'v': 'show_hot'}, {'n': '国内', 'v': 'show_domestic'}, {'n': '国外', 'v': 'show_foreign'}]}], 'movie': [{'key': '类型', 'name': '类型', 'value': [{'n': '全部类型', 'v': ''}, {'n': '喜剧', 'v': '喜剧'}, {'n': '爱情', 'v': '爱情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '动画', 'v': '动画'}, {'n': '悬疑', 'v': '悬疑'}, {'n': '犯罪', 'v': '犯罪'}, {'n': '惊悚', 'v': '惊悚'}, {'n': '冒险', 'v': '冒险'}, {'n': '音乐', 'v': '音乐'}, {'n': '历史', 'v': '历史'}, {'n': '奇幻', 'v': '奇幻'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '战争', 'v': '战争'}, {'n': '传记', 'v': '传记'}, {'n': '歌舞', 'v': '歌舞'}, {'n': '武侠', 'v': '武侠'}, {'n': '情色', 'v': '情色'}, {'n': '灾难', 'v': '灾难'}, {'n': '西部', 'v': '西部'}, {'n': '纪录片', 'v': '纪录片'}, {'n': '短片', 'v': '短片'}]}, {'key': '地区', 'name': '地区', 'value': [{'n': '全部地区', 'v': ''}, {'n': '华语', 'v': '华语'}, {'n': '欧美', 'v': '欧美'}, {'n': '韩国', 'v': '韩国'}, {'n': '日本', 'v': '日本'}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '英国', 'v': '英国'}, {'n': '法国', 'v': '法国'}, {'n': '德国', 'v': '德国'}, {'n': '意大利', 'v': '意大利'}, {'n': '西班牙', 'v': '西班牙'}, {'n': '印度', 'v': '印度'}, {'n': '泰国', 'v': '泰国'}, {'n': '俄罗斯', 'v': '俄罗斯'}, {'n': '加拿大', 'v': '加拿大'}, {'n': '澳大利亚', 'v': '澳大利亚'}, {'n': '爱尔兰', 'v': '爱尔兰'}, {'n': '瑞典', 'v': '瑞典'}, {'n': '巴西', 'v': '巴西'}, {'n': '丹麦', 'v': '丹麦'}]}, {'key': 'sort', 'name': '排序', 'value': [{'n': '近期热度', 'v': 'T'}, {'n': '首映时间', 'v': 'R'}, {'n': '高分优先', 'v': 'S'}]}, {'key': '年代', 'name': '年代', 'value': [{'n': '全部年代', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2010年代', 'v': '2010年代'}, {'n': '2000年代', 'v': '2000年代'}, {'n': '90年代', 'v': '90年代'}, {'n': '80年代', 'v': '80年代'}, {'n': '70年代', 'v': '70年代'}, {'n': '60年代', 'v': '60年代'}, {'n': '更早', 'v': '更早'}]}], 'tv': [{'key': '类型', 'name': '类型', 'value': [{'n': '不限', 'v': ''}, {'n': '电视剧', 'v': '电视剧'}, {'n': '综艺', 'v': '综艺'}]}, {'key': '电视剧形式', 'name': '电视剧形式', 'value': [{'n': '不限', 'v': ''}, {'n': '喜剧', 'v': '喜剧'}, {'n': '爱情', 'v': '爱情'}, {'n': '悬疑', 'v': '悬疑'}, {'n': '动画', 'v': '动画'}, {'n': '武侠', 'v': '武侠'}, {'n': '古装', 'v': '古装'}, {'n': '家庭', 'v': '家庭'}, {'n': '犯罪', 'v': '犯罪'}, {'n': '科幻', 'v': '科幻'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '历史', 'v': '历史'}, {'n': '战争', 'v': '战争'}, {'n': '动作', 'v': '动作'}, {'n': '冒险', 'v': '冒险'}, {'n': '传记', 'v': '传记'}, {'n': '剧情', 'v': '剧情'}, {'n': '奇幻', 'v': '奇幻'}, {'n': '惊悚', 'v': '惊悚'}, {'n': '灾难', 'v': '灾难'}, {'n': '歌舞', 'v': '歌舞'}, {'n': '音乐', 'v': '音乐'}]}, {'key': '综艺形式', 'name': '综艺形式', 'value': [{'n': '不限', 'v': ''}, {'n': '真人秀', 'v': '真人秀'}, {'n': '脱口秀', 'v': '脱口秀'}, {'n': '音乐', 'v': '音乐'}, {'n': '歌舞', 'v': '歌舞'}]}, {'key': '地区', 'name': '地区', 'value': [{'n': '全部地区', 'v': ''}, {'n': '华语', 'v': '华语'}, {'n': '欧美', 'v': '欧美'}, {'n': '国外', 'v': '国外'}, {'n': '韩国', 'v': '韩国'}, {'n': '日本', 'v': '日本'}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '美国', 'v': '美国'}, {'n': '英国', 'v': '英国'}, {'n': '泰国', 'v': '泰国'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '意大利', 'v': '意大利'}, {'n': '法国', 'v': '法国'}, {'n': '德国', 'v': '德国'}, {'n': '西班牙', 'v': '西班牙'}, {'n': '俄罗斯', 'v': '俄罗斯'}, {'n': '瑞典', 'v': '瑞典'}, {'n': '巴西', 'v': '巴西'}, {'n': '丹麦', 'v': '丹麦'}, {'n': '印度', 'v': '印度'}, {'n': '加拿大', 'v': '加拿大'}, {'n': '爱尔兰', 'v': '爱尔兰'}, {'n': '澳大利亚', 'v': '澳大利亚'}]}, {'key': 'sort', 'name': '排序', 'value': [{'n': '近期热度', 'v': 'T'}, {'n': '首播时间', 'v': 'R'}, {'n': '高分优先', 'v': 'S'}]}, {'key': '年代', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2010年代', 'v': '2010年代'}, {'n': '2000年代', 'v': '2000年代'}, {'n': '90年代', 'v': '90年代'}, {'n': '80年代', 'v': '80年代'}, {'n': '70年代', 'v': '70年代'}, {'n': '60年代', 'v': '60年代'}, {'n': '更早', 'v': '更早'}]}, {'key': '平台', 'name': '平台', 'value': [{'n': '全部', 'v': ''}, {'n': '腾讯视频', 'v': '腾讯视频'}, {'n': '爱奇艺', 'v': '爱奇艺'}, {'n': '优酷', 'v': '优酷'}, {'n': '湖南卫视', 'v': '湖南卫视'}, {'n': 'Netflix', 'v': 'Netflix'}, {'n': 'HBO', 'v': 'HBO'}, {'n': 'BBC', 'v': 'BBC'}, {'n': 'NHK', 'v': 'NHK'}, {'n': 'CBS', 'v': 'CBS'}, {'n': 'NBC', 'v': 'NBC'}, {'n': 'tvN', 'v': 'tvN'}]}], 'rank_list_movie': [{'key': '榜单', 'name': '榜单', 'value': [{'n': '实时热门电影', 'v': 'movie_real_time_hotest'}, {'n': '一周口碑电影榜', 'v': 'movie_weekly_best'}, {'n': '豆瓣电影Top250', 'v': 'movie_top250'}]}], 'rank_list_tv': [{'key': '榜单', 'name': '榜单', 'value': [{'n': '实时热门电视', 'v': 'tv_real_time_hotest'}, {'n': '华语口碑剧集榜', 'v': 'tv_chinese_best_weekly'}, {'n': '全球口碑剧集榜', 'v': 'tv_global_best_weekly'}, {'n': '国内口碑综艺榜', 'v': 'show_chinese_best_weekly'}, {'n': '国外口碑综艺榜', 'v': 'show_global_best_weekly'}]}]}, - limit:20, - play_parse:false, - 推荐:'', - 推荐:'js:let d=[];let douban_api_host="https://frodo.douban.com/api/v2";let miniapp_apikey="0ac44ae016490db2204ce0a042db2916";const count=30;function miniapp_request(path,query){try{let url=douban_api_host+path;query.apikey=miniapp_apikey;fetch_params.headers=oheaders;url=buildUrl(url,query);let html=fetch(url,fetch_params);return JSON.parse(html)}catch(e){print("发生了错误:"+e.message);return{}}}function subject_real_time_hotest(){try{let res=miniapp_request("/subject_collection/subject_real_time_hotest/items",{});let lists=[];let arr=res.subject_collection_items||[];arr.forEach(function(item){if(item.type==="movie"||item.type==="tv"){let rating=item.rating?item.rating.value:"暂无评分";let honnor=(item.honor_infos||[]).map(function(it){return it.title}).join("|");lists.append({vod_id:"msearch:"+TYPE,vod_name:item.title||"",vod_pic:item.pic.normal,vod_remarks:rating+" "+honnor})}});return lists}catch(e){print("发生了错误:"+e.message);return[]}}VODS=subject_real_time_hotest();print(VODS);', - // 手动调用解析请求json的url,此lazy不方便 - lazy:'', - // 推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float', - 一级:'', - 一级:'js:let d=[];let douban=input.split("douban=")[1].split("&")[0];let douban_api_host="https://frodo.douban.com/api/v2";let miniapp_apikey="0ac44ae016490db2204ce0a042db2916";const count=30;function miniapp_request(path,query){try{let url=douban_api_host+path;query.apikey=miniapp_apikey;fetch_params.headers=oheaders;url=buildUrl(url,query);let html=fetch(url,fetch_params);return JSON.parse(html)}catch(e){print("发生了错误:"+e.message);return{}}}function cate_filter(d,douban){douban=douban||"";try{let res={};if(MY_CATE==="interests"){if(douban){let status=MY_FL.status||"mark";let subtype_tag=MY_FL.subtype_tag||"";let year_tag=MY_FL.year_tag||"全部";let path="/user/"+douban+"/interests";res=miniapp_request(path,{type:"movie",status:status,subtype_tag:subtype_tag,year_tag:year_tag,start:(MY_PAGE-1)*count,count:count})}else{return{}}}else if(MY_CATE==="hot_gaia"){let sort=MY_FL.sort||"recommend";let area=MY_FL.area||"全部";let path="/movie/"+MY_CATE;res=miniapp_request(path,{area:area,sort:sort,start:(MY_PAGE-1)*count,count:count})}else if(MY_CATE==="tv_hot"||MY_CATE==="show_hot"){let stype=MY_FL.type||MY_CATE;let path="/subject_collection/"+stype+"/items";res=miniapp_request(path,{start:(MY_PAGE-1)*count,count:count})}else if(MY_CATE.startsWith("rank_list")){let id=MY_CATE==="rank_list_movie"?"movie_real_time_hotest":"tv_real_time_hotest";id=MY_FL.榜单||id;let path="/subject_collection/"+id+"/items";res=miniapp_request(path,{start:(MY_PAGE-1)*count,count:count})}else{let path="/"+MY_CATE+"/recommend";let selected_categories;let tags;let sort;if(Object.keys(MY_FL).length>0){sort=MY_FL.sort||"T";tags=Object.values(MY_FL).join(",");if(MY_CATE==="movie"){selected_categories={"类型":MY_FL.类型||"","地区":MY_FL.地区||""}}else{selected_categories={"类型":MY_FL.类型||"","形式":MY_FL.类型?MY_FL.类型+"地区":"","地区":MY_FL.地区||""}}}else{sort="T";tags="";if(MY_CATE==="movie"){selected_categories={"类型":"","地区":""}}else{selected_categories={"类型":"","形式":"","地区":""}}}let params={tags:tags,sort:sort,refresh:0,selected_categories:stringify(selected_categories),start:(MY_PAGE-1)*count,count:count};res=miniapp_request(path,params)}let result={page:MY_PAGE,pagecount:Math.ceil(res.total/count),limit:count,total:res.total};let items=[];if(/^rank_list|tv_hot|show_hot/.test(MY_CATE)){items=res["subject_collection_items"]}else if(MY_CATE==="interests"){res["interests"].forEach(function(it){items.push(it.subject)})}else{items=res.items}let lists=[];items.forEach(function(item){if(item.type==="movie"||item.type==="tv"){let rating=item.rating?item.rating.value:"";let rat_str=rating||"暂无评分";let title=item.title;let honor=item.honor_infos||[];let honor_str=honor.map(function(it){return it.title}).join("|");let vod_obj={vod_name:title!=="未知电影"?title:"暂不支持展示",vod_pic:item.pic.normal,vod_remarks:rat_str+" "+honor_str};let vod_obj_d={url:item.type+"$"+item.id,title:title!=="未知电影"?title:"暂不支持展示",pic_url:item.pic.normal,desc:rat_str+" "+honor_str};lists.push(vod_obj);d.push(vod_obj_d)}});result.list=lists;return result}catch(e){print(e.message)}return{}}let res=cate_filter(d);setResult2(res);', - 二级:'', - 搜索:'', -} \ No newline at end of file diff --git a/TVBox_JS/drT.js b/TVBox_JS/drT.js deleted file mode 100644 index f71f602..0000000 --- a/TVBox_JS/drT.js +++ /dev/null @@ -1,189 +0,0 @@ -// drT.js -// 2022/09/30 write by hjdhnx -// Licensed under the MIT license. - -(function () { - "use strict"; - - var drT = { - name: "drT", - version: "1.0.0", - templateSettings: { - evaluate: /\{\{([\s\S]+?(\}?)+)\}\}/g, - interpolate: /\{\{([\s\S]+?)\}\}/g, // 变量渲染 - encode: /\{\{@([\s\S]+?)\}\}/g, // 变量自动url编码 - use: /\{\{#([\s\S]+?)\}\}/g, - useParams: /(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g, - define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g, - defineParams:/^\s*([\w$]+):([\s\S]+)/, - conditional: /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g, // ? if ?? else if ?? else - iterate: /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g, - varname: "fl", - strip: true, - append: true, - selfcontained: false, - doNotSkipEncoded: false - }, - template: undefined, //fn, compile template - compile: undefined, //fn, for express - log: true - }, _globals; - - drT.encodeHTMLSource = function(doNotSkipEncoded) { - var encodeHTMLRules = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'", "/": "/" }, - matchHTML = doNotSkipEncoded ? /[&<>"'\/]/g : /&(?!#?\w+;)|<|>|"|'|\//g; - return function(code) { - return code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : ""; - }; - }; - - _globals = (function(){ return this || (0,eval)("this"); }()); - - /* istanbul ignore else */ - if (typeof module !== "undefined" && module.exports) { - module.exports = drT; - } else if (typeof define === "function" && define.amd) { - define(function(){return drT;}); - } else { - _globals.drT = drT; - } - - var startend = { - append: { start: "'+(", end: ")+'", startencode: "'+encodeHTML(" }, - split: { start: "';out+=(", end: ");out+='", startencode: "';out+=encodeHTML(" } - }, skip = /$^/; - - function resolveDefs(c, block, def) { - return ((typeof block === "string") ? block : block.toString()) - .replace(c.define || skip, function(m, code, assign, value) { - if (code.indexOf("def.") === 0) { - code = code.substring(4); - } - if (!(code in def)) { - if (assign === ":") { - if (c.defineParams) value.replace(c.defineParams, function(m, param, v) { - def[code] = {arg: param, text: v}; - }); - if (!(code in def)) def[code]= value; - } else { - new Function("def", "def['"+code+"']=" + value)(def); - } - } - return ""; - }) - .replace(c.use || skip, function(m, code) { - if (c.useParams) code = code.replace(c.useParams, function(m, s, d, param) { - if (def[d] && def[d].arg && param) { - var rw = (d+":"+param).replace(/'|\\/g, "_"); - def.__exp = def.__exp || {}; - def.__exp[rw] = def[d].text.replace(new RegExp("(^|[^\\w$])" + def[d].arg + "([^\\w$])", "g"), "$1" + param + "$2"); - return s + "def.__exp['"+rw+"']"; - } - }); - var v = new Function("def", "return " + code)(def); - return v ? resolveDefs(c, v, def) : v; - }); - } - - function unescape(code) { - return code.replace(/\\('|\\)/g, "$1").replace(/[\r\t\n]/g, " "); - } - - drT.template = function(tmpl, c, def) { - c = c || drT.templateSettings; - var cse = c.append ? startend.append : startend.split, needhtmlencode, sid = 0, indv, - str = (c.use || c.define) ? resolveDefs(c, tmpl, def || {}) : tmpl; - - // console.log(str); - let beforeCode = ''; - if(str.match(c.interpolate || skip)){ - let inter_codes = str.match(c.interpolate || skip); - let inter_dict = {}; - inter_codes.forEach(item=>{ - item.replace(c.interpolate || skip,function (m,code) { - let varname = code.split('.')[0]; - if(!inter_dict.hasOwnProperty(varname)){ - let beginCode = `if(typeof(${varname})==='undefined'){${varname}={}}`; - inter_dict[varname] = beginCode; - }if(!inter_dict.hasOwnProperty(code)){ - let beginCode = `if(typeof(${code})==='undefined'){${code}=''};`; - inter_dict[code] = beginCode; - } - }); - }); - let beginCode = Object.values(inter_dict).join('\n'); - // console.log(beginCode); - beforeCode += beginCode; - } - str = beforeCode+("var out='" + (c.strip ? str.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g," ") - .replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g,""): str) - .replace(/'|\\/g, "\\$&") - .replace(c.encode || skip, function(m, code) { - needhtmlencode = true; - return cse.startencode + unescape(code) + cse.end; - }) - .replace(c.interpolate || skip, function(m, code) { - let varname = code.split('.')[0]; - // console.log(varname === code); - // console.log(`varname:${varname},code:${code}`); - if(varname === code){ - let res = cse.start + `JSON.stringify(${unescape(code)})` + cse.end; - // console.log(res); - return res - } - return cse.start + unescape(code) + cse.end; - }) - .replace(c.conditional || skip, function(m, elsecase, code) { - return elsecase ? - (code ? "';}else if(" + unescape(code) + "){out+='" : "';}else{out+='") : - (code ? "';if(" + unescape(code) + "){out+='" : "';}out+='"); - }) - .replace(c.iterate || skip, function(m, iterate, vname, iname) { - if (!iterate) return "';} } out+='"; - sid+=1; indv=iname || "i"+sid; iterate=unescape(iterate); - return "';var arr"+sid+"="+iterate+";if(arr"+sid+"){var "+vname+","+indv+"=-1,l"+sid+"=arr"+sid+".length-1;while("+indv+"0){let sort=MY_FL.sort||"T";let tags=Object.Values(MY_FL).join(",");if(MY_CATE==="movie"){selected_categories={"类型":MY_FL.类型||"","地区":MY_FL.地区||""}}else{selected_categories={"类型":MY_FL.类型||"","形式":MY_FL.类型?MY_FL.类型+"地区":"","地区":MY_FL.地区||""}}}else{let sort="T";let tags="";if(MY_CATE==="movie"){selected_categories={"类型":"","地区":""}}else{selected_categories={"类型":"","形式":"","地区":""}}}let params={tags:tags,sort:sort,refresh:0,selected_categories:stringify(selected_categories),start:(MY_PAGE-1)*count,count:count};let res=miniapp_request(path,params)}let result={page:MY_PAGE,pagecount:Math.ceil(res.total/count),limit:count,total:res.total};let items=[];if(/^rank_list|tv_hot|show_hot/.test(MY_CATE)){items=res["subject_collection_items"]}else if(MY_CATE==="interests"){res["interests"].forEach(function(it){items.push(it.subject)})}else{items=res.items}let lists=[];items.forEach(function(item){if(item.type==="movie"||item.type==="tv"){let rating=item.rating?item.rating.value:"";let rat_str=rating||"暂无评分";let title=item.title;let honor=item.honor_infos||[];let honor_str=honor.map(function(it){return it.title}).join("|");let vod_obj={vod_name:title!=="未知电影"?title:"暂不支持展示",vod_pic:item.pic.normal,vod_remarks:rat_str+" "+honor_str};let vod_obj_d={url:item.type+"$"+item.id,title:title!=="未知电影"?title:"暂不支持展示",pic_url:item.pic.normal,desc:rat_str+" "+honor_str};lists.push(vod_obj);d.push(vod_obj_d)}});result.list=lists;return result}catch(e){print(e.message)}return{}}let res=cate_filter(d);setResult2(res);', - 二级:'', - 搜索:'', -} \ No newline at end of file diff --git a/TVBox_JS/if101.js b/TVBox_JS/if101.js deleted file mode 100644 index 21bff1d..0000000 --- a/TVBox_JS/if101.js +++ /dev/null @@ -1,24 +0,0 @@ -var rule={ - title:'if101', - host:'https://www.oulevod.tv', - // homeUrl:'/', - url:'/index.php/vod/show/id/fyclass/page/fypage.html', - searchUrl:'/index.php/vod/search.html?wd=**', - searchable:2,//是否启用全局搜索, - quickSearch:0,//是否启用快速搜索, - filterable:0,//是否启用分类筛选, - headers:{//网站的请求头,完整支持所有的,常带ua和cookies - 'User-Agent':'MOBILE_UA', - // "Cookie": "searchneed=ok" - }, - class_parse:'.conch-nav&&ul&&li;a&&Text;a&&href;./(\\d+).html', - cate_exclude:'', - play_parse:true, - lazy:'', - limit:6, - 推荐:'body&&.hl-list-wrap;ul&&li;a&&title;.hl-lazy&&data-original;.hl-pic-text&&Text;a&&href', - double:true, // 推荐内容是否双层定位 - 一级:'.hl-vod-list&&li;a&&title;.hl-lazy&&data-original;.hl-pic-text&&Text;a&&href', - 二级:{"title":".hl-dc-title&&Text;.hl-col-xs-12&&em&&.hl-text-muted:eq(0)&&Text","img":".hl-lazy&&data-original","desc":".hl-col-xs-12&&em&&.hl-text-muted:eq(-2)&&Text;.hl-col-xs-12&&em&&.hl-text-muted:eq(1)&&Text;.hl-col-xs-12&&em&&.hl-text-muted:eq(2)&&Text","content":".hl-content-text&&Text","tabs":".hl-plays-wrap","lists":".hl-plays-list:eq(#id) li"}, - 搜索:'.hl-list-wrap&&ul&&li;h3&&Text;.hl-lazy&&data-original;.hl-item-title:eq(0)&&Text;a&&href', -} \ No newline at end of file diff --git a/TVBox_JS/iqiyi.js b/TVBox_JS/iqiyi.js deleted file mode 100644 index f59aa5a..0000000 --- a/TVBox_JS/iqiyi.js +++ /dev/null @@ -1,39 +0,0 @@ -var rule = { - title:'奇珍异兽', - host:'https://www.iqiyi.com', - homeUrl:'', - // detailUrl:'https://pcw-api.iqiyi.com/albums/album/avlistinfo?aid=fyid&size=2000&page=1', - detailUrl:'https://pcw-api.iqiyi.com/video/video/videoinfowithuser/fyid?agent_type=1&authcookie=&subkey=fyid&subscribe=1', - searchUrl:'https://search.video.iqiyi.com/o?if=html5&key=**&pageNum=fypage&pos=1&pageSize=24&site=iqiyi', - searchable:2, - multi:1, - filterable:1, - filter:{'1': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': 2022}, {'n': '2021', 'v': 2021}, {'n': '2020', 'v': 2020}, {'n': '2019', 'v': 2019}, {'n': '2018', 'v': 2018}, {'n': '2017', 'v': 2017}, {'n': '2016-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '华语', 'v': 1}, {'n': '香港地区', 'v': 28997}, {'n': '美国', 'v': 2}, {'n': '欧洲', 'v': 3}, {'n': '韩国', 'v': 4}, {'n': '日本', 'v': 308}, {'n': '泰国', 'v': 1115}, {'n': '印度', 'v': 28999}, {'n': '其它', 'v': 5}]}, {'key': '18001', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '喜剧', 'v': 8}, {'n': '爱情', 'v': 6}, {'n': '动作', 'v': 11}, {'n': '枪战', 'v': 131}, {'n': '犯罪', 'v': 291}, {'n': '惊悚', 'v': 128}, {'n': '恐怖', 'v': 10}, {'n': '悬疑', 'v': 289}, {'n': '动画', 'v': 12}, {'n': '家庭', 'v': 27356}, {'n': '奇幻', 'v': 1284}, {'n': '魔幻', 'v': 129}, {'n': '科幻', 'v': 9}, {'n': '战争', 'v': 7}, {'n': '青春', 'v': 130}]}, {'key': '27396', 'name': '规格', 'value': [{'n': '全部', 'v': ''}, {'n': '巨制', 'v': 27397}, {'n': '院线', 'v': 27815}, {'n': '独播', 'v': 30149}, {'n': '网络电影', 'v': 27401}]}], '2': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': 2022}, {'n': '2021', 'v': 2021}, {'n': '2020', 'v': 2020}, {'n': '2019', 'v': 2019}, {'n': '2018', 'v': 2018}, {'n': '2017', 'v': 2017}, {'n': '2016-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': 15}, {'n': '港剧', 'v': 16}, {'n': '韩剧', 'v': 17}, {'n': '美剧', 'v': 18}, {'n': '日剧', 'v': 309}, {'n': '泰剧', 'v': 1114}, {'n': '台湾地区', 'v': 1117}, {'n': '英剧', 'v': 28916}, {'n': '其它', 'v': 19}]}, {'key': '18003', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '自制', 'v': 11992}, {'n': '古装', 'v': 24}, {'n': '言情', 'v': 20}, {'n': '武侠', 'v': 23}, {'n': '偶像', 'v': 30}, {'n': '家庭', 'v': 1654}, {'n': '青春', 'v': 1653}, {'n': '都市', 'v': 24064}, {'n': '喜剧', 'v': 135}, {'n': '战争', 'v': 27916}, {'n': '军旅', 'v': 1655}, {'n': '谍战', 'v': 290}, {'n': '悬疑', 'v': 32}, {'n': '罪案', 'v': 149}, {'n': '穿越', 'v': 148}, {'n': '宫廷', 'v': 139}, {'n': '历史', 'v': 21}, {'n': '神话', 'v': 145}, {'n': '科幻', 'v': 34}, {'n': '年代', 'v': 27}, {'n': '农村', 'v': 29}, {'n': '商战', 'v': 140}, {'n': '剧情', 'v': 24063}, {'n': '奇幻', 'v': 27881}, {'n': '网剧', 'v': 24065}, {'n': '竖短片', 'v': 32839}]}], '3': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': 2022}, {'n': '2021', 'v': 2021}, {'n': '2020', 'v': 2020}, {'n': '2019', 'v': 2019}, {'n': '2018', 'v': 2018}, {'n': '2017', 'v': 2017}, {'n': '2016-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '国内', 'v': 20323}, {'n': '国外', 'v': 20324}]}, {'key': '18004', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '人文', 'v': 70}, {'n': '美食', 'v': 33908}, {'n': '医疗', 'v': 33924}, {'n': '自然', 'v': 33933}, {'n': '萌宠', 'v': 33945}, {'n': '财经', 'v': 33953}, {'n': '罪案', 'v': 33960}, {'n': '竞技', 'v': 33967}, {'n': '灾难', 'v': 33974}, {'n': '军事', 'v': 72}, {'n': '历史', 'v': 74}, {'n': '探险', 'v': 73}, {'n': '社会', 'v': 71}, {'n': '科技', 'v': 28119}, {'n': '旅游', 'v': 310}]}, {'key': '28467', 'name': '出品方', 'value': [{'n': '全部', 'v': ''}, {'n': 'BBC', 'v': 28468}, {'n': '美国历史频道', 'v': 28470}, {'n': '探索频道', 'v': 28471}, {'n': '央视记录', 'v': 28472}, {'n': '北京纪实频道', 'v': 28473}, {'n': '上海纪实频道', 'v': 28474}, {'n': '朗思文化', 'v': 28476}, {'n': 'CNEX', 'v': 28477}, {'n': '五星传奇', 'v': 28478}, {'n': 'IMG', 'v': 28479}, {'n': 'NHK', 'v': 28480}, {'n': '爱奇艺出品', 'v': 31283}, {'n': 'Netflix', 'v': 31286}]}, {'key': '29076', 'name': '片种', 'value': [{'n': '全部', 'v': ''}, {'n': '纪录电影', 'v': 29077}, {'n': '系列纪录片', 'v': 29078}, {'n': '网络纪录片', 'v': 29082}, {'n': '纪实栏目', 'v': 29083}]}, {'key': '31294', 'name': '时长', 'value': [{'n': '全部', 'v': ''}, {'n': '微纪录', 'v': 29079}, {'n': '长纪录', 'v': 29080}, {'n': '短纪录', 'v': 29081}]}], '4': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': 2022}, {'n': '2021', 'v': 2021}, {'n': '2020', 'v': 2020}, {'n': '2019', 'v': 2019}, {'n': '2018', 'v': 2018}, {'n': '2017', 'v': 2017}, {'n': '2016-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': 37}, {'n': '日本', 'v': 38}, {'n': '韩国', 'v': 1106}, {'n': '欧美', 'v': 30218}, {'n': '其它', 'v': 40}]}, {'key': '30219', 'name': '版本', 'value': [{'n': '全部', 'v': ''}, {'n': '动画', 'v': 30220}, {'n': '特摄', 'v': 30223}, {'n': '布袋戏', 'v': 30224}, {'n': '特别篇', 'v': 32782}, {'n': '动态漫画', 'v': 32783}, {'n': '动画电影', 'v': 32784}, {'n': '竖版视频', 'v': 32785}, {'n': '轻动画', 'v': 33482}, {'n': '短剧', 'v': 33483}]}, {'key': '30225', 'name': '风格', 'value': [{'n': '全部', 'v': ''}, {'n': '搞笑', 'v': 30230}, {'n': '热血', 'v': 30232}, {'n': '催泪', 'v': 30233}, {'n': '治愈', 'v': 30234}, {'n': '励志', 'v': 30237}, {'n': '机战', 'v': 30241}, {'n': '恋爱', 'v': 30243}, {'n': '科幻', 'v': 30245}, {'n': '奇幻', 'v': 30247}, {'n': '推理', 'v': 30248}, {'n': '校园', 'v': 30249}, {'n': '日常', 'v': 30252}, {'n': '历史', 'v': 30254}, {'n': '美食', 'v': 30255}, {'n': '职场', 'v': 30256}, {'n': '偶像', 'v': 30258}, {'n': '泡面', 'v': 30265}, {'n': '冒险', 'v': 30267}, {'n': '竞技', 'v': 30268}, {'n': '合家欢', 'v': 30270}, {'n': '武侠', 'v': 32792}, {'n': '玄幻', 'v': 32793}]}, {'key': '32795', 'name': '新类型', 'value': [{'n': '全部', 'v': ''}, {'n': '轻小说改编', 'v': 32796}, {'n': '漫画改编', 'v': 32797}, {'n': '游戏改编', 'v': 32798}, {'n': '原创', 'v': 32799}]}], '6': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': 2022}, {'n': '2021', 'v': 2021}, {'n': '2020', 'v': 2020}, {'n': '2019', 'v': 2019}, {'n': '2018', 'v': 2018}, {'n': '2017', 'v': 2017}, {'n': '2016-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': 151}, {'n': '港台', 'v': 152}, {'n': '韩国', 'v': 33306}, {'n': '欧美', 'v': 154}, {'n': '其它', 'v': 1113}]}, {'key': '18014', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '播报', 'v': 155}, {'n': '访谈', 'v': 156}, {'n': '游戏', 'v': 158}, {'n': '晚会', 'v': 292}, {'n': '曲艺', 'v': 293}, {'n': '脱口秀', 'v': 2118}, {'n': '真人秀', 'v': 2224}, {'n': '竞技', 'v': 30278}, {'n': '爱奇艺出品', 'v': 30279}, {'n': '竞演', 'v': 33860}]}, {'key': '33162', 'name': '题材', 'value': [{'n': '全部', 'v': ''}, {'n': '音乐', 'v': 33163}, {'n': '舞蹈', 'v': 33172}, {'n': '文化', 'v': 33173}, {'n': '美食', 'v': 33182}, {'n': '伦理', 'v': 33184}, {'n': '相亲', 'v': 33193}, {'n': '纪实', 'v': 33195}, {'n': '生活', 'v': 33196}, {'n': '亲子', 'v': 33197}, {'n': '少儿', 'v': 33198}, {'n': '财经', 'v': 33199}, {'n': '健康', 'v': 33200}, {'n': '时尚', 'v': 33203}, {'n': '旅游', 'v': 33205}, {'n': '教育', 'v': 33206}, {'n': '其它', 'v': 33220}, {'n': '爱情', 'v': 33316}, {'n': '搞笑', 'v': 33317}, {'n': '益智', 'v': 33318}, {'n': '职场', 'v': 33319}, {'n': '语言', 'v': 33530}, {'n': '辩论', 'v': 33531}, {'n': '演讲', 'v': 33843}]}], '5': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': 2022}, {'n': '2021', 'v': 2021}, {'n': '2020', 'v': 2020}, {'n': '2019', 'v': 2019}, {'n': '2018', 'v': 2018}, {'n': '2017', 'v': 2017}, {'n': '2016-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': 221}, {'n': '港台', 'v': 220}, {'n': '欧美', 'v': 219}, {'n': '日韩', 'v': 218}, {'n': '拉美', 'v': 217}, {'n': '亚洲地区', 'v': 216}, {'n': '非洲', 'v': 215}]}, {'key': '18009', 'name': '语种', 'value': [{'n': '全部', 'v': ''}, {'n': '普通话', 'v': 91}, {'n': '粤语', 'v': 92}, {'n': '闽南语', 'v': 93}, {'n': '英语', 'v': 94}, {'n': '日语', 'v': 95}, {'n': '韩语', 'v': 96}, {'n': '其它', 'v': 97}]}, {'key': '23554', 'name': '音乐类型', 'value': [{'n': '全部', 'v': ''}, {'n': '单曲MV', 'v': 23556}, {'n': '单曲现场', 'v': 23557}, {'n': '演唱会', 'v': 23558}, {'n': '新闻', 'v': 23559}, {'n': '访谈', 'v': 23560}, {'n': '音乐记录', 'v': 23561}, {'n': '音乐周边', 'v': 23562}, {'n': '音乐节目', 'v': 23563}, {'n': '影视原声', 'v': 23564}, {'n': '音乐短片', 'v': 23565}, {'n': '其他', 'v': 23566}]}], '16': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': 2022}, {'n': '2021', 'v': 2021}, {'n': '2020', 'v': 2020}, {'n': '2019', 'v': 2019}, {'n': '2018', 'v': 2018}, {'n': '2017', 'v': 2017}, {'n': '2016-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': '18061', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '喜剧', 'v': 1296}, {'n': '爱情', 'v': 1297}, {'n': '动作', 'v': 1298}, {'n': '奇幻', 'v': 1299}, {'n': '惊悚', 'v': 1300}, {'n': '悬疑', 'v': 1301}, {'n': '青春', 'v': 1302}]}]}, - // url:'https://pcw-api.iqiyi.com/search/recommend/list?channel_id=fyclass&data_type=1&is_purchase=&mode=24&page_id=fypage&ret_num=48&three_category_id=', - url:'https://pcw-api.iqiyi.com/search/recommend/list?channel_id=fyclass&data_type=1&page_id=fypage&ret_num=48', - filter_url:'is_purchase={{fl.is_purchase}}&mode={{fl.mode}}&three_category_id={{fl.three_category_id}}&market_release_date_level={{fl.year}}', - // url:'https://pcw-api.iqiyi.com/search/video/videolists?channel_id=fyclass&pageNum=fypage&pageSize=24&data_type=1&site=iqiyi', - headers:{ - 'User-Agent':'MOBILE_UA' - }, - timeout:5000, - class_name:'电影&电视剧&纪录片&动漫&综艺&音乐&网络电影', - class_url:'1&2&3&4&6&5&16', - limit:20, - // play_parse:true, - // 手动调用解析请求json的url,此lazy不方便 - // lazy:'js:input="https://cache.json.icu/home/api?type=ys&uid=292796&key=fnoryABDEFJNPQV269&url="+input.split("?")[0];log(input);let html=JSON.parse(request(input));log(html);input=html.url||input', - // 推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float', - // 一级:'json:.data.list;.name;.imageUrl;.latestOrder;.albumId', - 推荐:'', - // 推荐:'js:let d=[];fetch_params.headers["user-agent"]=PC_UA;pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;let html=fetch(HOST,fetch_params);let lists=pdfa(html,".qy-mod-li");lists.forEach(function(it){try{let title=pdfh(it,"p.sub&&title");let desc=pdfh(it,".qy-mod-label&&Text");let pic_url=pd(it,"img&&src");d.push({title:title,desc:desc,img:pic_url})}catch(e){}});res=setResult(d);', - 一级:'js:let d=[];if(MY_CATE==="16"){input=input.replace("channel_id=16","channel_id=1").split("three_category_id")[0];input+="three_category_id=27401"}else if(MY_CATE==="5"){input=input.replace("data_type=1","data_type=2")}let html=request(input);let json=JSON.parse(html);if(json.code==="A00003"){fetch_params.headers["user-agent"]=PC_UA;json=JSON.parse(fetch(input,fetch_params))}json.data.list.forEach(function(data){if(data.channelId===1){desc=data.hasOwnProperty("score")?data.score+"分\\t":""}else if(data.channelId===2||data.channelId===4){if(data.latestOrder===data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"集全"}else{if(data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"/"+data.videoCount+"集"}else{desc="更新至 "+data.latestOrder+"集"}}}else if(data.channelId===6){desc=data.period+"期"}else if(data.channelId===5){desc=data.focus}else{if(data.latestOrder){desc="更新至 第"+data.latestOrder+"期"}else if(data.period){desc=data.period}else{desc=data.focus}}url=MY_CATE+"$"+data.albumId;d.push({url:url,title:data.name,desc:desc,pic_url:data.imageUrl.replace(".jpg","_390_520.jpg?caplist=jpg,webp")})});setResult(d);', - // 一级:'js:let d=[];if(MY_CATE==="16"){input=input.replace("channel_id=16","channel_id=1").split("three_category_id")[0];input+="three_category_id=27401"}else if(MY_CATE==="5"){input=input.replace("data_type=1","data_type=2")}let html=fetch(input,fetch_params);let json=JSON.parse(html);if(json.code==="A00003"){fetch_params.headers["user-agent"]=PC_UA;json=JSON.parse(fetch(input,fetch_params))}json.data.list.forEach(function(data){if(data.channelId===1){desc=data.hasOwnProperty("score")?data.score+"分\\t":""}else if(data.channelId===2||data.channelId===4){if(data.latestOrder===data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"集全"}else{if(data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"/"+data.videoCount+"集"}else{desc="更新至 "+data.latestOrder+"集"}}}else if(data.channelId===6){desc=data.period+"期"}else if(data.channelId===5){desc=data.focus}else{if(data.latestOrder){desc="更新至 第"+data.latestOrder+"期"}else if(data.period){desc=data.period}else{desc=data.focus}}url=MY_CATE+"$"+data.albumId;d.push({url:url,title:data.name,desc:desc,pic_url:data.imageUrl.replace(".jpg","_390_520.jpg?caplist=jpg,webp")})});setResult(d);', - // 一级:'json:.data.list;.name;.imageUrl;.playUrl;.latestOrder', - // 二级:{is_json:1,"title":"data.title;data.moviecategory[0]+data.moviecategory[1]","img":"data.cdncover","desc":"data.area[0];data.director[0]","content":"data.description","tabs":"data.playlink_sites;data.playlinksdetail.#idv.quality","lists":"data.playlinksdetail.#idv.default_url"}, - // 二级:{is_json:1,"title":"data.name+data.subtitle;data.latestOrder","img":"data.imageUrl","desc":"data.categories;data.areas","content":"data.description","tabs":"data.name","lists":"data.playlinksdetail.#idv.default_url"}, - 二级:'', - 二级:'js:let d=[];let html=request(input);let json=JSON.parse(html).data;VOD={vod_id:"",vod_url:input,vod_name:"",type_name:"",vod_actor:"",vod_year:"",vod_director:"",vod_area:"",vod_content:"",vod_remarks:"",vod_pic:""};VOD.vod_name=json.name;try{if(json.latestOrder){VOD.vod_remarks="类型: "+(json.categories[0].name||"")+"\\t"+(json.categories[1].name||"")+"\\t"+(json.categories[2].name||"")+"\\t"+"评分:"+(json.score||"")+"\\n更新至:第"+json.latestOrder+"集(期)/共"+json.videoCount+"集(期)"}else{VOD.vod_remarks="类型: "+(json.categories[0].name||"")+"\\t"+(json.categories[1].name||"")+"\\t"+(json.categories[2].name||"")+"\\t"+"评分:"+(json.score||"")+json.period}}catch(e){VOD.vod_remarks=json.subtitle}VOD.vod_area=(json.focus||"")+"\\n资费:"+(json.payMark===1?"VIP":"免费")+"\\n地区:"+(json.areas||"");let vsize="579_772";try{vsize=json.imageSize[12]}catch(e){}VOD.vod_pic=json.imageUrl.replace(".jpg","_"+vsize+".jpg?caplist=jpg,webp");VOD.type_name=json.categories.map(function(it){return it.name}).join(",");if(json.people.main_charactor){let vod_actors=[];json.people.main_charactor.forEach(function(it){vod_actors.push(it.name)});VOD.vod_actor=vod_actors.join(",")}VOD.vod_content=json.description;let playlists=[];if(json.channelId===1||json.channelId===5){playlists=[{playUrl:json.playUrl,imageUrl:json.imageUrl,shortTitle:json.shortTitle,focus:json.focus,period:json.period}]}else{if(json.channelId===6){let qs=json.period.split("-")[0];let listUrl="https://pcw-api.iqiyi.com/album/source/svlistinfo?cid=6&sourceid="+json.albumId+"&timelist="+qs;let playData=JSON.parse(request(listUrl)).data[qs];playData.forEach(function(it){playlists.push({playUrl:it.playUrl,imageUrl:it.imageUrl,shortTitle:it.shortTitle,focus:it.focus,period:it.period})})}else{let listUrl="https://pcw-api.iqiyi.com/albums/album/avlistinfo?aid="+json.albumId+"&size=200&page=1";let data=JSON.parse(request(listUrl)).data;let total=data.total;playlists=data.epsodelist;if(total>200){for(let i=2;i200){for(let i=2;i= 0) - continue; - let contents = block.contents; - for (const content of contents) { - videos.push({ - 'vod_id': content.id, - 'vod_name': content.title, - 'vod_pic': content.videoCover, - 'vod_remarks': content.msg, - }) - } - } - return JSON.stringify({ - 'list': videos - }); -} - -function category(tid, pg, filter, extend) { - let data = JSON.parse(request(url + '/api.php/provide/searchFilter?type_id=' + tid + '&pagenum=' + pg + '&pagesize=24')).data; - let videos = [] - for (const vod of data.result) { - videos.push({ - 'vod_id': vod.id, - 'vod_name': vod.title, - 'vod_pic': vod.videoCover, - 'vod_remarks': vod.msg, - }); - } - return JSON.stringify({ - 'page': parseInt(data.page), - 'pagecount': data.pagesize, - 'limit': 24, - 'total': data.total, - 'list': videos, - }); -} - -function detail(id) { - let data = JSON.parse(request(url + '/api.php/provide/videoDetail?ids=' + id)).data; - let vod = { - 'vod_id': data.id, - 'vod_name': data.videoName, - 'vod_pic': data.videoCover, - 'type_name': data.subCategory, - 'vod_year': data.year, - 'vod_area': data.area, - 'vod_remarks': data.msg, - 'vod_actor': data.actor, - 'vod_director': data.director, - 'vod_content': data.brief.trim(), - } - let episodes = JSON.parse(request(url + '/api.php/provide/videoPlaylist?ids=' + id)).data.episodes; - let playlist = {}; - for (const episode of episodes) { - let playurls = episode.playurls; - for (const playurl of playurls) { - let from = playurl.playfrom; - if (!playlist.hasOwnProperty(from)) { - playlist[from] = [] - } - playlist[from].push(playurl.title.trim() + '$' + playurl.playurl); - } - } - vod.vod_play_from = _.keys(playlist).join('$$$'); - let urls = _.values(playlist) - let vod_play_url = [] - for (const urlist of urls) { - vod_play_url.push(urlist.join('#')) - } - vod.vod_play_url = vod_play_url.join('$$$') - return JSON.stringify({ - 'list': [vod] - }); -} - -function play(flag, id, flags) { - let data = JSON.parse(request(url + '/api.php/provide/parserUrl?url=' + id)).data; - let playHeader = data.playHeader; - let jxUrl = data.url; - let jxData = JSON.parse(request(jxUrl)); - if (flags.indexOf(flag) >= 0) { - return JSON.stringify({ - 'parse': 1, - 'jx': 1, - 'url': id - }); - } else { - return JSON.stringify({ - 'parse': 0, - 'url': id - }); - } -} - -function search(wd, quick) { - let data = JSON.parse(request(url + '/api.php/provide/searchVideo?searchName=' + wd)).data; - let videos = []; - for (const vod of data) { - videos.push({ - 'vod_id': vod.id, - 'vod_name': vod.videoName, - 'vod_pic': vod.videoCover, - 'vod_remarks': vod.msg, - }) - } - return JSON.stringify({ - 'list': videos - }); -} - -__JS_SPIDER__ = { - init: init, - home: home, - homeVod: homeVod, - category: category, - detail: detail, - play: play, - search: search -} \ No newline at end of file diff --git a/TVBox_JS/kunyu77_2.js b/TVBox_JS/kunyu77_2.js deleted file mode 100644 index 0eeab15..0000000 --- a/TVBox_JS/kunyu77_2.js +++ /dev/null @@ -1,206 +0,0 @@ -import { randomStr } from './lib/util.js'; -import './lib/dayjs.min.js' -import './lib/uri.min.js'; -import './lib/crypto-js.js' -import _ from './lib/underscore-esm-min.js' - -let key = 'kunyu77'; -let url = 'http://api.kunyu77.com'; -let agent = 'Dalvik/2.1.0 (Linux; U; Android 6.0; ZTE BA520 Build/MRA58K)'; -let deviceId = ''; -let timeOffset = 0; - -function request(reqUrl) { - let sj = dayjs().unix() - timeOffset; - let uri = new Uri(reqUrl); - uri.addQueryParam() - uri.addQueryParam('pcode', '010110004') - uri.addQueryParam('version', '2.0.4') - uri.addQueryParam('devid', deviceId) - uri.addQueryParam('package', 'com.sevenVideo.app.android') - uri.addQueryParam('sys', 'android') - uri.addQueryParam('sysver', '6.0') - uri.addQueryParam('brand', 'ZTE') - uri.addQueryParam('model', 'ZTE_BA520') - uri.addQueryParam('sj', sj); - let keys = []; - for (var i = 0; i < uri.queryPairs.length; i++) { - keys.push(uri.queryPairs[i][0]); - } - keys = _.sortBy(keys, function (name) { return name }) - let tkSrc = uri.path(); - for (let k of keys) { - tkSrc += uri.getQueryParamValue(k); - } - tkSrc += sj; - tkSrc += 'XSpeUFjJ'; - console.log(tkSrc); - let tk = CryptoJS.MD5(tkSrc).toString().toLowerCase(); - console.log(tk); - let header = { - 'user-agent': agent, - 't': sj, - 'TK': tk, - }; - let res = req(uri.toString(), { - headers: header - }); - - let serverTime = res.headers.Date; - let content = res.content; - let serverTimeS = dayjs(serverTime).unix(); - timeOffset = dayjs().unix() - serverTimeS; - // console.log(content); - return content; -} - -function init(ext) { - var device = local.get(key, 'device'); - if (device.length == 0) { - device = randomStr(32).toLowerCase(); - local.set(key, 'device', device); - } - deviceId = device; - console.log(dayjs().unix()); -} - -function home(filter) { - let data = JSON.parse(request(url + '/api.php/provide/filter')).data; - let classes = []; - for (const key in data) { - classes.push({ - 'type_id': key, - 'type_name': data[key][0].cat - }); - } - console.log(classes); - return JSON.stringify({ - 'class': classes - }); -} - -function homeVod(params) { - let data = JSON.parse(request(url + '/api.php/provide/homeBlock?type_id=0')).data; - let blocks = data.blocks; - let videos = []; - for (const block of blocks) { - let name = block.block_name; - if (name.indexOf('热播') >= 0) - continue; - let contents = block.contents; - for (const content of contents) { - videos.push({ - 'vod_id': content.id, - 'vod_name': content.title, - 'vod_pic': content.videoCover, - 'vod_remarks': content.msg, - }) - } - } - return JSON.stringify({ - 'list': videos - }); -} - -function category(tid, pg, filter, extend) { - let data = JSON.parse(request(url + '/api.php/provide/searchFilter?type_id=' + tid + '&pagenum=' + pg + '&pagesize=24')).data; - let videos = [] - for (const vod of data.result) { - videos.push({ - 'vod_id': vod.id, - 'vod_name': vod.title, - 'vod_pic': vod.videoCover, - 'vod_remarks': vod.msg, - }); - } - return JSON.stringify({ - 'page': parseInt(data.page), - 'pagecount': data.pagesize, - 'limit': 24, - 'total': data.total, - 'list': videos, - }); -} - -function detail(id) { - let data = JSON.parse(request(url + '/api.php/provide/videoDetail?ids=' + id)).data; - let vod = { - 'vod_id': data.id, - 'vod_name': data.videoName, - 'vod_pic': data.videoCover, - 'type_name': data.subCategory, - 'vod_year': data.year, - 'vod_area': data.area, - 'vod_remarks': data.msg, - 'vod_actor': data.actor, - 'vod_director': data.director, - 'vod_content': data.brief.trim(), - } - let episodes = JSON.parse(request(url + '/api.php/provide/videoPlaylist?ids=' + id)).data.episodes; - let playlist = {}; - for (const episode of episodes) { - let playurls = episode.playurls; - for (const playurl of playurls) { - let from = playurl.playfrom; - if (!playlist.hasOwnProperty(from)) { - playlist[from] = [] - } - playlist[from].push(playurl.title.trim() + '$' + playurl.playurl); - } - } - vod.vod_play_from = _.keys(playlist).join('$$$'); - let urls = _.values(playlist) - let vod_play_url = [] - for (const urlist of urls) { - vod_play_url.push(urlist.join('#')) - } - vod.vod_play_url = vod_play_url.join('$$$') - return JSON.stringify({ - 'list': [vod] - }); -} - -function play(flag, id, flags) { - let data = JSON.parse(request(url + '/api.php/provide/parserUrl?url=' + id)).data; - let playHeader = data.playHeader; - let jxUrl = data.url; - let jxData = JSON.parse(request(jxUrl)); - if (flags.indexOf(flag) >= 0) { - return JSON.stringify({ - 'parse': 1, - 'jx': 1, - 'url': id - }); - } else { - return JSON.stringify({ - 'parse': 0, - 'url': id - }); - } -} - -function search(wd, quick) { - let data = JSON.parse(request(url + '/api.php/provide/searchVideo?searchName=' + wd)).data; - let videos = []; - for (const vod of data) { - videos.push({ - 'vod_id': vod.id, - 'vod_name': vod.videoName, - 'vod_pic': vod.videoCover, - 'vod_remarks': vod.msg, - }) - } - return JSON.stringify({ - 'list': videos - }); -} - -__JS_SPIDER__ = { - init: init, - home: home, - homeVod: homeVod, - category: category, - detail: detail, - play: play, - search: search -} \ No newline at end of file diff --git a/TVBox_JS/kuyun77.js b/TVBox_JS/kuyun77.js deleted file mode 100644 index 0bd435b..0000000 --- a/TVBox_JS/kuyun77.js +++ /dev/null @@ -1,37 +0,0 @@ -var rule = { - title:'酷云77', - host:'http://api.kunyu77.com', - homeUrl:'/api.php/provide/homeBlock?type_id=0', - searchUrl:'/api.php/provide/searchVideo?searchName=**', - searchable:2, - quickSearch:0, - filterable:1, - multi:1, - // 分类链接fypage参数支持1个()表达式 - url:'/api.php/provide/searchFilter?type_id=fyclass&pagesize=24&pagenum=fypage', - detailUrl:'/api.php/provide/videoDetail?devid=453CA5D864457C7DB4D0EAA93DE96E66&package=com.sevenVideo.app.android&version=1.8.7&ids=fyid', - filter_url:'year={{fl.y}}&category={{fl.scat}}&area={{fl.a}}', - filter:{0: [{'key': 'y', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}], 1: [{'key': 'y', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}], 2: [{'key': 'y', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}], 3: [{'key': 'y', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}], 4: [{'key': 'y', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}]}, - headers:{ - "User-Agent":"okhttp/3.12.0" - }, - timeout:5000, - class_name:'全部&电影&电视剧&综艺&动漫', - class_url:'0&1&2&3&4', - limit:20, - play_parse:true, - play_json:0, - // 手动调用解析请求json的url,此lazy不方便 - // lazy:'js:input={parse:1,url:input};', - lazy:'', - lazy:'js:function GetPlayUrl(playUrl){let realPlay={parse:0,url:playUrl};if(/mgtv|sohu/.test(playUrl)){realPlay.headers={"User-Agent":"Mozilla/5.0"}}else if(/bili/.test(playUrl)){realPlay.headers={"User-Agent":"Mozilla/5.0",Referer:"https://www.bilibili.com"}}else if(/ixigua/.test(playUrl)){realPlay.headers={"User-Agent":"Mozilla/5.0",Referer:"https://www.ixigua.com"}}return realPlay}if(/\\.m3u8|\\.mp4/.test(input)){input={parse:0,url:input}}else{try{let url="http://api.kunyu77.com/api.php/provide/parserUrl?url="+input;let html=request(url);let urll=JSON.parse(html).data.url;let playhtml=request(urll);let playurl=JSON.parse(playhtml).url;input=GetPlayUrl(playurl)}catch(e){input={parse:1,jx:1,url:input}}}', - 推荐:'json:data.blocks;contents;title;videoCover;msg;id', - double:true, - // 一级:'json:data.filterData.listData;title;img;subTitle;videoLink;summary', - 一级:'', - 一级:'json:data.result;title;videoCover;msg;id', - 二级:'', - 二级:'js:var d=[];VOD={vod_id:input};try{let html=request(input);print(html);html=JSON.parse(html);let node=html.data;VOD={vod_id:node["id"],vod_name:node["videoName"],vod_pic:node["videoCover"],type_name:node["subCategory"],vod_year:node["year"],vod_area:node["area"],vod_remarks:node["msg"],vod_actor:node["actor"],vod_director:node["director"],vod_content:node["brief"].strip()};let tid=input.split("ids=")[1];let listUrl="http://api.kunyu77.com/api.php/provide/videoPlaylist?devid=453CA5D864457C7DB4D0EAA93DE96E66&package=com.sevenVideo.app.android&version=1.8.7&ids="+tid;html=request(listUrl);html=JSON.parse(html);let episodes=html.data.episodes;let playMap={};if(typeof play_url==="undefined"){var play_url=""}play_url=play_url.replace("&play_url=","&type=json&play_url=");episodes.forEach(function(ep){let playurls=ep["playurls"];playurls.forEach(function(playurl){let source=playurl["playfrom"];if(!playMap.hasOwnProperty(source)){playMap[source]=[]}playMap[source].append(playurl["title"].strip()+"$"+play_url+urlencode(playurl["playurl"]))})});let playFrom=[];let playList=[];Object.keys(playMap).forEach(function(key){playFrom.append(key);playList.append(playMap[key].join("#"))});let vod_play_from=playFrom.join("$$$");let vod_play_url=playList.join("$$$");VOD["vod_play_from"]=vod_play_from;VOD["vod_play_url"]=vod_play_url}catch(e){log("获取二级详情页发生错误:"+e.message)}', - 搜索:'', - 搜索:'json:data;videoName;videoCover;msg;id', -} \ No newline at end of file diff --git a/TVBox_JS/l0l.js b/TVBox_JS/l0l.js deleted file mode 100644 index d3c7809..0000000 --- a/TVBox_JS/l0l.js +++ /dev/null @@ -1,10 +0,0 @@ -muban.海螺2.二级.content = '.play-m-box&&Text'; -muban.海螺2.二级.desc = '.play-news&&Text'; -muban.海螺2.二级.img = ''; -var rule = Object.assign(muban.海螺2,{ - title:'l0l', - host:'https://www.l0l.tv', - class_parse:'.index-tag&&li;a&&.title&&Text;a&&href;.*/(.*?).html', - searchUrl:'/index.php/vod/search/page/fypage/wd/**.html', - 搜索:'.searchlilst&&li;a&&title;.lazy&&data-original;.list-remarks&&Text;a&&href', -}); \ No newline at end of file diff --git a/TVBox_JS/lib/alist.min.js b/TVBox_JS/lib/alist.min.js deleted file mode 100644 index 3e17316..0000000 --- a/TVBox_JS/lib/alist.min.js +++ /dev/null @@ -1 +0,0 @@ -import{distance}from"https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/mod.js";import{sortListByCN}from"https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/sortName.js";String.prototype.rstrip=function(chars){let regex=new RegExp(chars+"$");return this.replace(regex,"")};var showMode="single";var searchDriver="";var limit_search_show=200;var search_type="";var detail_order="name";const request_timeout=5e3;function print(any){any=any||"";if(typeof any=="object"&&Object.keys(any).length>0){try{any=JSON.stringify(any);console.log(any)}catch(e){console.log(typeof any+":"+any.length)}}else if(typeof any=="object"&&Object.keys(any).length<1){console.log("null object")}else{console.log(any)}}const http=function(url,options={}){if(options.method==="POST"&&options.data){options.body=JSON.stringify(options.data);options.headers=Object.assign({"content-type":"application/json"},options.headers)}options.timeout=request_timeout;try{const res=req(url,options);res.json=()=>res&&res.content?JSON.parse(res.content):null;res.text=()=>res&&res.content?res.content:"";return res}catch(e){return{json(){return null},text(){return""}}}};["get","post"].forEach(method=>{http[method]=function(url,options={}){return http(url,Object.assign(options,{method:method.toUpperCase()}))}});const __drives={};function isMedia(file){return/\.(dff|dsf|mp3|aac|wav|wma|cda|flac|m4a|mid|mka|mp2|mpa|mpc|ape|ofr|ogg|ra|wv|tta|ac3|dts|tak|webm|wmv|mpeg|mov|ram|swf|mp4|avi|rm|rmvb|flv|mpg|mkv|m3u8|ts|3gp|asf)$/.test(file.toLowerCase())}function get_drives_path(tid){const index=tid.indexOf("$");const name=tid.substring(0,index);const path=tid.substring(index+1);return{drives:get_drives(name),path:path}}function get_drives(name){const{settings,api,server}=__drives[name];if(settings.v3==null){settings.v3=false;const data=http.get(server+"/api/public/settings").json().data;if(Array.isArray(data)){settings.title=data.find(x=>x.key==="title")?.value;settings.v3=false;settings.version=data.find(x=>x.key==="version")?.value;settings.enableSearch=data.find(x=>x.key==="enable search")?.value==="true"}else{settings.title=data.title;settings.v3=true;settings.version=data.version;settings.enableSearch=false}api.path=settings.v3?"/api/fs/list":"/api/public/path";api.file=settings.v3?"/api/fs/get":"/api/public/path";api.search=settings.v3?"/api/public/search":"/api/public/search"}return __drives[name]}function init(ext){let alist_data=ext.split(";");let alist_data_url=alist_data[0];limit_search_show=alist_data.length>1?Number(alist_data[1])||limit_search_show:limit_search_show;search_type=alist_data.length>2?alist_data[2]:search_type;print(alist_data_url);const data=http.get(alist_data_url).json();let drives=[];if(Array.isArray(data)&&data.length>1&&data[0].hasOwnProperty("server")&&data[0].hasOwnProperty("name")){drives=data}else if(!Array.isArray(data)&&data.hasOwnProperty("drives")&&Array.isArray(data.drives)){drives=data.drives.filter(it=>it.type&&it.type==="alist"||!it.type)}print(drives);searchDriver=(drives.find(x=>x.search)||{}).name||"";if(!searchDriver&&drives.length>1){searchDriver=drives[0].name}print(searchDriver);drives.forEach(item=>{let _path_param=[];if(item.params){_path_param=Object.keys(item.params);_path_param.sort((a,b)=>a.length-b.length)}__drives[item.name]={name:item.name,server:item.server.endsWith("/")?item.server.rstrip("/"):item.server,startPage:item.startPage||"/",showAll:item.showAll===true,search:!!item.search,params:item.params||{},_path_param:_path_param,settings:{},api:{},getParams(path){const key=this._path_param.find(x=>path.startsWith(x));return Object.assign({},this.params[key],{path:path})},getPath(path){const res=http.post(this.server+this.api.path,{data:this.getParams(path)}).json();return this.settings.v3?res.data.content:res.data.files},getFile(path){let raw_url=this.server+"/d"+path;raw_url=encodeURI(raw_url);return{raw_url:raw_url}},isFolder(data){return data.type===1},isVideo(data){return this.settings.v3?data.type===2||data.type===0||data.type===3:data.type===3||data.type===0||data.type===4},is_subt(data){if(data.type===1){return false}const ext=/\.(srt|ass|scc|stl|ttml)$/;return ext.test(data.name)},getPic(data){let pic=this.settings.v3?data.thumb:data.thumbnail;return pic||(this.isFolder(data)?"http://img1.3png.com/281e284a670865a71d91515866552b5f172b.png":"")},getTime(data,isStandard){isStandard=isStandard||false;try{let tTime=data.updated_at||data.time_str||data.modified||"";let date="";if(tTime){tTime=tTime.split("T");date=tTime[0];if(isStandard){date=date.replace(/-/g,"/")}tTime=tTime[1].split(/Z|\./);date+=" "+tTime[0]}return date}catch(e){return""}}}});print("init执行完毕")}function home(filter){let classes=Object.keys(__drives).map(key=>({type_id:`${key}$${__drives[key].startPage}`,type_name:key,type_flag:"1"}));let filter_dict={};let filters=[{key:"order",name:"排序",value:[{n:"名称⬆️",v:"vod_name_asc"},{n:"名称⬇️",v:"vod_name_desc"},{n:"中英⬆️",v:"vod_cn_asc"},{n:"中英⬇️",v:"vod_cn_desc"},{n:"时间⬆️",v:"vod_time_asc"},{n:"时间⬇️",v:"vod_time_desc"},{n:"大小⬆️",v:"vod_size_asc"},{n:"大小⬇️",v:"vod_size_desc"},{n:"无",v:"none"}]},{key:"show",name:"播放展示",value:[{n:"单集",v:"single"},{n:"全集",v:"all"}]}];classes.forEach(it=>{filter_dict[it.type_id]=filters});print("----home----");print(classes);return JSON.stringify({class:classes,filters:filter_dict})}function homeVod(params){return JSON.stringify({list:[]})}function category(tid,pg,filter,extend){let orid=tid.replace(/#all#|#search#/g,"");let{drives,path}=get_drives_path(orid);const id=orid.endsWith("/")?orid:orid+"/";const list=drives.getPath(path);let subList=[];let vodFiles=[];let allList=[];let fl=filter?extend:{};if(fl.show){showMode=fl.show}list.forEach(item=>{if(drives.is_subt(item)){subList.push(item.name)}if(!drives.showAll&&!drives.isFolder(item)&&!drives.isVideo(item)){return}let vod_time=drives.getTime(item);let vod_size=get_size(item.size);let remark=vod_time.split(" ")[0].substr(3)+"\t"+vod_size;let vod_id=id+item.name+(drives.isFolder(item)?"/":"");if(showMode==="all"){vod_id+="#all#"}print(vod_id);const vod={vod_id:vod_id,vod_name:item.name.replaceAll("$","").replaceAll("#",""),vod_pic:drives.getPic(item),vod_time:vod_time,vod_size:item.size,vod_tag:drives.isFolder(item)?"folder":"file",vod_remarks:drives.isFolder(item)?remark+" 文件夹":remark};if(drives.isVideo(item)){vodFiles.push(vod)}allList.push(vod)});if(vodFiles.length===1&&subList.length>0){let sub;if(subList.length===1){sub=subList[0]}else{let subs=JSON.parse(JSON.stringify(subList));subs.sort((a,b)=>{let a_similar=(a.includes("chs")?100:0)+levenshteinDistance(a,vodFiles[0].vod_name);let b_similar=(b.includes("chs")?100:0)+levenshteinDistance(b,vodFiles[0].vod_name);if(a_similar>b_similar){return 1}else{return-1}});sub=subs.slice(-1)[0]}vodFiles[0].vod_id+="@@@"+sub;vodFiles[0].vod_remarks+="🏷️"}else{vodFiles.forEach(item=>{const lh=0;let sub;subList.forEach(s=>{const l=levenshteinDistance(s,item.vod_name);if(l>60&&l>lh){sub=s}});if(sub){item.vod_id+="@@@"+sub;item.vod_remarks+="🏷️"}})}if(fl.order){let key=fl.order.split("_").slice(0,-1).join("_");let order=fl.order.split("_").slice(-1)[0];print(`排序key:${key},排序order:${order}`);if(key.includes("name")){detail_order="name";allList=sortListByName(allList,key,order)}else if(key.includes("cn")){detail_order="cn";allList=sortListByCN(allList,"vod_name",order)}else if(key.includes("time")){detail_order="time";allList=sortListByTime(allList,key,order)}else if(key.includes("size")){detail_order="size";allList=sortListBySize(allList,key,order)}else if(fl.order.includes("none")){detail_order="none";print("不排序")}}else{if(detail_order!=="none"){allList=sortListByName(allList,"vod_name","asc")}}print("----category----"+`tid:${tid},detail_order:${detail_order},showMode:${showMode}`);return JSON.stringify({page:1,pagecount:1,limit:allList.length,total:allList.length,list:allList})}function getAll(otid,tid,drives,path){try{const content=category(tid,null,false,null);const isFile=isMedia(otid.replace(/#all#|#search#/g,"").split("@@@")[0]);const{list}=JSON.parse(content);let vod_play_url=[];list.forEach(x=>{if(x.vod_tag==="file"){let vid=x.vod_id.replace(/#all#|#search#/g,"");vod_play_url.push(`${x.vod_name}$${vid.substring(vid.indexOf("$")+1)}`)}});const pl=path.split("/").filter(it=>it);let vod_name=pl[pl.length-1]||drives.name;if(vod_name===drives.name){print(pl)}if(otid.includes("#search#")){vod_name+="[搜]"}let vod={vod_id:otid,vod_name:vod_name,type_name:"文件夹",vod_pic:"https://avatars.githubusercontent.com/u/97389433?s=120&v=4",vod_content:tid,vod_tag:"folder",vod_play_from:drives.name,vod_play_url:vod_play_url.join("#"),vod_remarks:drives.settings.title};print("----detail1----");print(vod);return JSON.stringify({list:[vod]})}catch(e){print(e.message);return JSON.stringify({list:[{}]})}}function detail(tid){let isSearch=tid.includes("#search#");let isAll=tid.includes("#all#");let otid=tid;tid=tid.replace(/#all#|#search#/g,"");let isFile=isMedia(tid.split("@@@")[0]);print(`isFile:${tid}?${isFile}`);let{drives,path}=get_drives_path(tid);print(`drives:${drives},path:${path}`);if(path.endsWith("/")){return getAll(otid,tid,drives,path)}else{if(isSearch&&!isFile){return getAll(otid,tid,drives,path)}else if(isAll){let new_tid;if(isFile){new_tid=tid.split("/").slice(0,-1).join("/")+"/"}else{new_tid=tid}print(`全集模式 tid:${tid}=>tid:${new_tid}`);let{drives,path}=get_drives_path(new_tid);return getAll(otid,new_tid,drives,path)}else if(isFile){let paths=path.split("@@@");let vod_name=paths[0].substring(paths[0].lastIndexOf("/")+1);let vod_title=vod_name;if(otid.includes("#search#")){vod_title+="[搜]"}let vod={vod_id:otid,vod_name:vod_title,type_name:"文件",vod_pic:"https://avatars.githubusercontent.com/u/97389433?s=120&v=4",vod_content:tid,vod_play_from:drives.name,vod_play_url:vod_name+"$"+path,vod_remarks:drives.settings.title};print("----detail2----");print(vod);return JSON.stringify({list:[vod]})}else{return JSON.stringify({list:[]})}}}function play(flag,id,flags){const drives=get_drives(flag);const urls=id.split("@@@");let vod={parse:0,playUrl:"",url:drives.getFile(urls[0]).raw_url};if(urls.length>=2){const path=urls[0].substring(0,urls[0].lastIndexOf("/")+1);vod.subt=drives.getFile(path+urls[1]).raw_url}print("----play----");print(vod);return JSON.stringify(vod)}function search(wd,quick){print(__drives);print("可搜索的alist驱动:"+searchDriver);if(!searchDriver||!wd){return JSON.stringify({list:[]})}else{let driver=__drives[searchDriver];wd=wd.split(" ").filter(it=>it.trim()).join("+");print(driver);let surl=driver.server+"/search?box="+wd+"&url=";if(search_type){surl+="&type="+search_type}print("搜索链接:"+surl);let html=http.get(surl).text();let lists=[];try{lists=pdfa(html,"div&&ul&&a")}catch(e){}print(`搜索结果数:${lists.length},搜索结果显示数量限制:${limit_search_show}`);let vods=[];let excludeReg=/\.(pdf|epub|mobi|txt|doc|lrc)$/;let cnt=0;lists.forEach(it=>{let vhref=pdfh(it,"a&&href");if(vhref){vhref=unescape(vhref)}if(excludeReg.test(vhref)){return}if(cnt1024*1024*1024*1024){sz/=1024*1024*1024*1024;filesize="TB"}else if(sz>1024*1024*1024){sz/=1024*1024*1024;filesize="GB"}else if(sz>1024*1024){sz/=1024*1024;filesize="MB"}else if(sz>1024){sz/=1024;filesize="KB"}else{filesize="B"}let sizeStr=sz.toFixed(2)+filesize,index=sizeStr.indexOf("."),dou=sizeStr.substr(index+1,2);if(dou==="00"){return sizeStr.substring(0,index)+sizeStr.substr(index+3,2)}else{return sizeStr}}function levenshteinDistance(str1,str2){return 100-100*distance(str1,str2)/Math.max(str1.length,str2.length)}function naturalSort(options){if(!options){options={}}return function(a,b){if(options.key){a=a[options.key];b=b[options.key]}var EQUAL=0;var GREATER=options.order==="desc"?-1:1;var SMALLER=-GREATER;var re=/(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi;var sre=/(^[ ]*|[ ]*$)/g;var dre=/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/;var hre=/^0x[0-9a-f]+$/i;var ore=/^0/;var normalize=function normalize(value){var string=""+value;return options.caseSensitive?string:string.toLowerCase()};var x=normalize(a).replace(sre,"")||"";var y=normalize(b).replace(sre,"")||"";var xN=x.replace(re,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0");var yN=y.replace(re,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0");if(!x&&!y)return EQUAL;if(!x&&y)return GREATER;if(x&&!y)return SMALLER;var xD=parseInt(x.match(hre))||xN.length!=1&&x.match(dre)&&Date.parse(x);var yD=parseInt(y.match(hre))||xD&&y.match(dre)&&Date.parse(y)||null;var oFxNcL,oFyNcL;if(yD){if(xDyD)return GREATER}for(var cLoc=0,numS=Math.max(xN.length,yN.length);cLocoFyNcL)return GREATER}return EQUAL}}const sortListByName=(vodList,key,order)=>{if(!key){return vodList}order=order||"asc";return vodList.sort(naturalSort({key:key,order:order,caseSensitive:true}))};const getTimeInt=timeStr=>{return new Date(timeStr).getTime()};const sortListByTime=(vodList,key,order)=>{if(!key){return vodList}let ASCarr=vodList.sort((a,b)=>{a=a[key];b=b[key];return getTimeInt(a)-getTimeInt(b)});if(order==="desc"){ASCarr.reverse()}return ASCarr};const sortListBySize=(vodList,key,order)=>{if(!key){return vodList}let ASCarr=vodList.sort((a,b)=>{a=a[key];b=b[key];return(Number(a)||0)-(Number(b)||0)});if(order==="desc"){ASCarr.reverse()}return ASCarr};export default{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search}; \ No newline at end of file diff --git a/TVBox_JS/lib/cheerio.min.js b/TVBox_JS/lib/cheerio.min.js deleted file mode 100644 index 7d6375e..0000000 --- a/TVBox_JS/lib/cheerio.min.js +++ /dev/null @@ -1 +0,0 @@ -var e,t=function(){return t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0?this.children[this.children.length-1]:null}get childNodes(){return this.children}set childNodes(e){this.children=e}}class g extends A{constructor(){super(...arguments),this.type=e.CDATA}get nodeType(){return 4}}class N extends A{constructor(){super(...arguments),this.type=e.Root}get nodeType(){return 9}}class C extends A{constructor(t,n,r=[],i=("script"===t?e.Script:"style"===t?e.Style:e.Tag)){super(r),this.name=t,this.attribs=n,this.type=i}get nodeType(){return 1}get tagName(){return this.name}set tagName(e){this.name=e}get attributes(){return Object.keys(this.attribs).map((e=>{var t,n;return{name:e,value:this.attribs[e],namespace:null===(t=this["x-attribsNamespace"])||void 0===t?void 0:t[e],prefix:null===(n=this["x-attribsPrefix"])||void 0===n?void 0:n[e]}}))}}function I(t){return(n=t).type===e.Tag||n.type===e.Script||n.type===e.Style;var n}function S(t){return t.type===e.CDATA}function b(t){return t.type===e.Text}function O(t){return t.type===e.Comment}function y(t){return t.type===e.Directive}function L(t){return t.type===e.Root}function k(e){return Object.prototype.hasOwnProperty.call(e,"children")}function v(e,t=!1){let n;if(b(e))n=new m(e.data);else if(O(e))n=new T(e.data);else if(I(e)){const r=t?D(e.children):[],i=new C(e.name,{...e.attribs},r);r.forEach((e=>e.parent=i)),null!=e.namespace&&(i.namespace=e.namespace),e["x-attribsNamespace"]&&(i["x-attribsNamespace"]={...e["x-attribsNamespace"]}),e["x-attribsPrefix"]&&(i["x-attribsPrefix"]={...e["x-attribsPrefix"]}),n=i}else if(S(e)){const r=t?D(e.children):[],i=new g(r);r.forEach((e=>e.parent=i)),n=i}else if(L(e)){const r=t?D(e.children):[],i=new N(r);r.forEach((e=>e.parent=i)),e["x-mode"]&&(i["x-mode"]=e["x-mode"]),n=i}else{if(!y(e))throw new Error(`Not implemented yet: ${e.type}`);{const t=new _(e.name,e.data);null!=e["x-name"]&&(t["x-name"]=e["x-name"],t["x-publicId"]=e["x-publicId"],t["x-systemId"]=e["x-systemId"]),n=t}}return n.startIndex=e.startIndex,n.endIndex=e.endIndex,null!=e.sourceCodeLocation&&(n.sourceCodeLocation=e.sourceCodeLocation),n}function D(e){const t=e.map((e=>v(e,!0)));for(let e=1;e$\x80-\uFFFF]/g,x=new Map([[34,"""],[38,"&"],[39,"'"],[60,"<"],[62,">"]]),w=null!=String.prototype.codePointAt?(e,t)=>e.codePointAt(t):(e,t)=>55296==(64512&e.charCodeAt(t))?1024*(e.charCodeAt(t)-55296)+e.charCodeAt(t+1)-56320+65536:e.charCodeAt(t);function B(e){let t,n="",r=0;for(;null!==(t=P.exec(e));){const i=t.index,s=e.charCodeAt(i),a=x.get(s);void 0!==a?(n+=e.substring(r,i)+a,r=i+1):(n+=`${e.substring(r,i)}&#x${w(e,i).toString(16)};`,r=P.lastIndex+=Number(55296==(64512&s)))}return n+e.substr(r)}function F(e,t){return function(n){let r,i=0,s="";for(;r=e.exec(n);)i!==r.index&&(s+=n.substring(i,r.index)),s+=t.get(r[0].charCodeAt(0)),i=r.index+1;return s+n.substring(i)}}const U=F(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),H=F(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]])),G=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map((e=>[e.toLowerCase(),e]))),Y=new Map(["definitionURL","attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map((e=>[e.toLowerCase(),e]))),q=new Set(["style","script","xmp","iframe","noembed","noframes","plaintext","noscript"]);function K(e){return e.replace(/"/g,""")}const j=new Set(["area","base","basefont","br","col","command","embed","frame","hr","img","input","isindex","keygen","link","meta","param","source","track","wbr"]);function V(e,t={}){const n="length"in e?e:[e];let r="";for(let e=0;e`;case c:return function(e){return`\x3c!--${e.data}--\x3e`}(e);case p:return function(e){return``}(e);case l:case h:case u:return function(e,t){var n;"foreign"===t.xmlMode&&(e.name=null!==(n=G.get(e.name))&&void 0!==n?n:e.name,e.parent&&Q.has(e.parent.name)&&(t={...t,xmlMode:!1}));!t.xmlMode&&X.has(e.name)&&(t={...t,xmlMode:"foreign"});let r=`<${e.name}`;const i=function(e,t){var n;if(!e)return;const r=!1===(null!==(n=t.encodeEntities)&&void 0!==n?n:t.decodeEntities)?K:t.xmlMode||"utf8"!==t.encodeEntities?B:U;return Object.keys(e).map((n=>{var i,s;const a=null!==(i=e[n])&&void 0!==i?i:"";return"foreign"===t.xmlMode&&(n=null!==(s=Y.get(n))&&void 0!==s?s:n),t.emptyAttrs||t.xmlMode||""!==a?`${n}="${r(a)}"`:n})).join(" ")}(e.attribs,t);i&&(r+=` ${i}`);0===e.children.length&&(t.xmlMode?!1!==t.selfClosingTags:t.selfClosingTags&&j.has(e.name))?(t.xmlMode||(r+=" "),r+="/>"):(r+=">",e.children.length>0&&(r+=V(e.children,t)),!t.xmlMode&&j.has(e.name)||(r+=``));return r}(e,t);case a:return function(e,t){var n;let r=e.data||"";!1===(null!==(n=t.encodeEntities)&&void 0!==n?n:t.decodeEntities)||!t.xmlMode&&e.parent&&q.has(e.parent.name)||(r=t.xmlMode||"utf8"!==t.encodeEntities?B(r):H(r));return r}(e,t)}}const Q=new Set(["mi","mo","mn","ms","mtext","annotation-xml","foreignObject","desc","title"]),X=new Set(["svg","math"]);function $(e,t){return V(e,t)}function z(e){return Array.isArray(e)?e.map(z).join(""):k(e)&&!O(e)?z(e.children):b(e)?e.data:""}function J(t){return Array.isArray(t)?t.map(J).join(""):k(t)&&(t.type===e.Tag||S(t))?J(t.children):b(t)?t.data:""}function Z(e){return k(e)?e.children:[]}function ee(e){return e.parent||null}function te(e){const t=ee(e);if(null!=t)return Z(t);const n=[e];let{prev:r,next:i}=e;for(;null!=r;)n.unshift(r),({prev:r}=r);for(;null!=i;)n.push(i),({next:i}=i);return n}function ne(e){let{next:t}=e;for(;null!==t&&!I(t);)({next:t}=t);return t}function re(e){let{prev:t}=e;for(;null!==t&&!I(t);)({prev:t}=t);return t}function ie(e){if(e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),e.parent){const t=e.parent.children;t.splice(t.lastIndexOf(e),1)}}function se(e,t,n=!0,r=1/0){return Array.isArray(t)||(t=[t]),ae(e,t,n,r)}function ae(e,t,n,r){const i=[];for(const s of t){if(e(s)&&(i.push(s),--r<=0))break;if(n&&k(s)&&s.children.length>0){const t=ae(e,s.children,n,r);if(i.push(...t),r-=t.length,r<=0)break}}return i}function oe(e,t,n=!0){let r=null;for(let i=0;i0&&(r=oe(e,s.children,!0)))}return r}const ce={tag_name:e=>"function"==typeof e?t=>I(t)&&e(t.name):"*"===e?I:t=>I(t)&&t.name===e,tag_type:e=>"function"==typeof e?t=>e(t.type):t=>t.type===e,tag_contains:e=>"function"==typeof e?t=>b(t)&&e(t.data):t=>b(t)&&t.data===e};function le(e,t){return"function"==typeof t?n=>I(n)&&t(n.attribs[e]):n=>I(n)&&n.attribs[e]===t}function he(e,t){return n=>e(n)||t(n)}function ue(e){const t=Object.keys(e).map((t=>{const n=e[t];return Object.prototype.hasOwnProperty.call(ce,t)?ce[t](n):le(t,n)}));return 0===t.length?null:t.reduce(he)}function pe(e,t,n=!0,r=1/0){return se(ce.tag_name(e),t,n,r)}var fe;function de(e,t){const n=[],r=[];if(e===t)return 0;let i=k(e)?e:e.parent;for(;i;)n.unshift(i),i=i.parent;for(i=k(t)?t:t.parent;i;)r.unshift(i),i=i.parent;const s=Math.min(n.length,r.length);let a=0;for(;ac.indexOf(h)?o===t?fe.FOLLOWING|fe.CONTAINED_BY:fe.FOLLOWING:o===e?fe.PRECEDING|fe.CONTAINS:fe.PRECEDING}function Ee(e){return(e=e.filter(((e,t,n)=>!n.includes(e,t+1)))).sort(((e,t)=>{const n=de(e,t);return n&fe.PRECEDING?-1:n&fe.FOLLOWING?1:0})),e}!function(e){e[e.DISCONNECTED=1]="DISCONNECTED",e[e.PRECEDING=2]="PRECEDING",e[e.FOLLOWING=4]="FOLLOWING",e[e.CONTAINS=8]="CONTAINS",e[e.CONTAINED_BY=16]="CONTAINED_BY"}(fe||(fe={}));const me=["url","type","lang"],Te=["fileSize","bitrate","framerate","samplingrate","channels","duration","height","width"];function _e(e){return pe("media:content",e).map((e=>{const{attribs:t}=e,n={medium:t.medium,isDefault:!!t.isDefault};for(const e of me)t[e]&&(n[e]=t[e]);for(const e of Te)t[e]&&(n[e]=parseInt(t[e],10));return t.expression&&(n.expression=t.expression),n}))}function Ae(e,t){return pe(e,t,!0,1)[0]}function ge(e,t,n=!1){return z(pe(e,t,n,1)).trim()}function Ne(e,t,n,r,i=!1){const s=ge(n,r,i);s&&(e[t]=s)}function Ce(e){return"rss"===e||"feed"===e||"rdf:RDF"===e}var Ie,Se=Object.freeze({__proto__:null,isTag:I,isCDATA:S,isText:b,isComment:O,isDocument:L,hasChildren:k,getOuterHTML:$,getInnerHTML:function(e,t){return k(e)?e.children.map((e=>$(e,t))).join(""):""},getText:function e(t){return Array.isArray(t)?t.map(e).join(""):I(t)?"br"===t.name?"\n":e(t.children):S(t)?e(t.children):b(t)?t.data:""},textContent:z,innerText:J,getChildren:Z,getParent:ee,getSiblings:te,getAttributeValue:function(e,t){var n;return null===(n=e.attribs)||void 0===n?void 0:n[t]},hasAttrib:function(e,t){return null!=e.attribs&&Object.prototype.hasOwnProperty.call(e.attribs,t)&&null!=e.attribs[t]},getName:function(e){return e.name},nextElementSibling:ne,prevElementSibling:re,removeElement:ie,replaceElement:function(e,t){const n=t.prev=e.prev;n&&(n.next=t);const r=t.next=e.next;r&&(r.prev=t);const i=t.parent=e.parent;if(i){const n=i.children;n[n.lastIndexOf(e)]=t,e.parent=null}},appendChild:function(e,t){if(ie(t),t.next=null,t.parent=e,e.children.push(t)>1){const n=e.children[e.children.length-2];n.next=t,t.prev=n}else t.prev=null},append:function(e,t){ie(t);const{parent:n}=e,r=e.next;if(t.next=r,t.prev=e,e.next=t,t.parent=n,r){if(r.prev=t,n){const e=n.children;e.splice(e.lastIndexOf(r),0,t)}}else n&&n.children.push(t)},prependChild:function(e,t){if(ie(t),t.parent=e,t.prev=null,1!==e.children.unshift(t)){const n=e.children[1];n.prev=t,t.next=n}else t.next=null},prepend:function(e,t){ie(t);const{parent:n}=e;if(n){const r=n.children;r.splice(r.indexOf(e),0,t)}e.prev&&(e.prev.next=t),t.parent=n,t.prev=e.prev,t.next=e,e.prev=t},filter:se,find:ae,findOneChild:function(e,t){return t.find(e)},findOne:oe,existsOne:function e(t,n){return n.some((n=>I(n)&&(t(n)||n.children.length>0&&e(t,n.children))))},findAll:function(e,t){var n;const r=[],i=t.filter(I);let s;for(;s=i.shift();){const t=null===(n=s.children)||void 0===n?void 0:n.filter(I);t&&t.length>0&&i.unshift(...t),e(s)&&r.push(s)}return r},testElement:function(e,t){const n=ue(e);return!n||n(t)},getElements:function(e,t,n,r=1/0){const i=ue(e);return i?se(i,t,n,r):[]},getElementById:function(e,t,n=!0){return Array.isArray(t)||(t=[t]),oe(le("id",e),t,n)},getElementsByTagName:pe,getElementsByTagType:function(e,t,n=!0,r=1/0){return se(ce.tag_type(e),t,n,r)},removeSubsets:function(e){let t=e.length;for(;--t>=0;){const n=e[t];if(t>0&&e.lastIndexOf(n,t-1)>=0)e.splice(t,1);else for(let r=n.parent;r;r=r.parent)if(e.includes(r)){e.splice(t,1);break}}return e},get DocumentPosition(){return fe},compareDocumentPosition:de,uniqueSort:Ee,getFeed:function(e){const t=Ae(Ce,e);return t?"feed"===t.name?function(e){var t;const n=e.children,r={type:"atom",items:pe("entry",n).map((e=>{var t;const{children:n}=e,r={media:_e(n)};Ne(r,"id","id",n),Ne(r,"title","title",n);const i=null===(t=Ae("link",n))||void 0===t?void 0:t.attribs.href;i&&(r.link=i);const s=ge("summary",n)||ge("content",n);s&&(r.description=s);const a=ge("updated",n);return a&&(r.pubDate=new Date(a)),r}))};Ne(r,"id","id",n),Ne(r,"title","title",n);const i=null===(t=Ae("link",n))||void 0===t?void 0:t.attribs.href;i&&(r.link=i);Ne(r,"description","subtitle",n);const s=ge("updated",n);s&&(r.updated=new Date(s));return Ne(r,"author","email",n,!0),r}(t):function(e){var t,n;const r=null!==(n=null===(t=Ae("channel",e.children))||void 0===t?void 0:t.children)&&void 0!==n?n:[],i={type:e.name.substr(0,3),id:"",items:pe("item",e.children).map((e=>{const{children:t}=e,n={media:_e(t)};Ne(n,"id","guid",t),Ne(n,"title","title",t),Ne(n,"link","link",t),Ne(n,"description","description",t);const r=ge("pubDate",t);return r&&(n.pubDate=new Date(r)),n}))};Ne(i,"title","title",r),Ne(i,"link","link",r),Ne(i,"description","description",r);const s=ge("lastBuildDate",r);s&&(i.updated=new Date(s));return Ne(i,"author","managingEditor",r,!0),i}(t):null}}),be="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function Oe(e){if(Object.keys)return Object.keys(e);var t=[];for(var n in e)t.push(n);return t}function ye(e,t){if(e.forEach)return e.forEach(t);for(var n=0;n1&&c.shift(),this._hasParentSelector=null;const l=this._trace(c,t,["$"],i,s,n).filter((function(e){return e&&!e.isParentSelector}));return l.length?o||1!==l.length||l[0].hasArrExpr?l.reduce(((e,t)=>{const n=this._getPreferredOutput(t);return a&&Array.isArray(n)?e=e.concat(n):e.push(n),e}),[]):this._getPreferredOutput(l[0]):o?[]:void 0},He.prototype._getPreferredOutput=function(e){const t=this.currResultType;switch(t){case"all":{const t=Array.isArray(e.path)?e.path:He.toPathArray(e.path);return e.pointer=He.toPointer(t),e.path="string"==typeof e.path?e.path:He.toPathString(e.path),e}case"value":case"parent":case"parentProperty":return e[t];case"path":return He.toPathString(e[t]);case"pointer":return He.toPointer(e.path);default:throw new TypeError("Unknown result type")}},He.prototype._handleCallback=function(e,t,n){if(t){const r=this._getPreferredOutput(e);e.path="string"==typeof e.path?e.path:He.toPathString(e.path),t(r,n,e)}},He.prototype._trace=function(e,t,n,r,i,s,a,o){let c;if(!e.length)return c={path:n,value:t,parent:r,parentProperty:i,hasArrExpr:a},this._handleCallback(c,s,"value"),c;const l=e[0],h=e.slice(1),u=[];function p(e){Array.isArray(e)?e.forEach((e=>{u.push(e)})):u.push(e)}if(("string"!=typeof l||o)&&t&&we.call(t,l))p(this._trace(h,t[l],Be(n,l),t,l,s,a));else if("*"===l)this._walk(t,(e=>{p(this._trace(h,t[e],Be(n,e),t,e,s,!0,!0))}));else if(".."===l)p(this._trace(h,t,n,r,i,s,a)),this._walk(t,(r=>{"object"==typeof t[r]&&p(this._trace(e.slice(),t[r],Be(n,r),t,r,s,!0))}));else{if("^"===l)return this._hasParentSelector=!0,{path:n.slice(0,-1),expr:h,isParentSelector:!0};if("~"===l)return c={path:Be(n,l),value:i,parent:r,parentProperty:null},this._handleCallback(c,s,"property"),c;if("$"===l)p(this._trace(h,t,n,null,null,s,a));else if(/^(-?\d*):(-?\d*):?(\d*)$/u.test(l))p(this._slice(l,h,t,n,r,i,s));else if(0===l.indexOf("?(")){if(this.currPreventEval)throw new Error("Eval [?(expr)] prevented in JSONPath expression.");const e=l.replace(/^\?\((.*?)\)$/u,"$1");this._walk(t,(a=>{this._eval(e,t[a],a,n,r,i)&&p(this._trace(h,t[a],Be(n,a),t,a,s,!0))}))}else if("("===l[0]){if(this.currPreventEval)throw new Error("Eval [(expr)] prevented in JSONPath expression.");p(this._trace(Fe(this._eval(l,t,n[n.length-1],n.slice(0,-1),r,i),h),t,n,r,i,s,a))}else if("@"===l[0]){let e=!1;const a=l.slice(1,-2);switch(a){case"scalar":t&&["object","function"].includes(typeof t)||(e=!0);break;case"boolean":case"string":case"undefined":case"function":typeof t===a&&(e=!0);break;case"integer":!Number.isFinite(t)||t%1||(e=!0);break;case"number":Number.isFinite(t)&&(e=!0);break;case"nonFinite":"number"!=typeof t||Number.isFinite(t)||(e=!0);break;case"object":t&&typeof t===a&&(e=!0);break;case"array":Array.isArray(t)&&(e=!0);break;case"other":e=this.currOtherTypeCallback(t,n,r,i);break;case"null":null===t&&(e=!0);break;default:throw new TypeError("Unknown value type "+a)}if(e)return c={path:n,value:t,parent:r,parentProperty:i},this._handleCallback(c,s,"value"),c}else if("`"===l[0]&&t&&we.call(t,l.slice(1))){const e=l.slice(1);p(this._trace(h,t[e],Be(n,e),t,e,s,a,!0))}else if(l.includes(",")){const e=l.split(",");for(const a of e)p(this._trace(Fe(a,h),t,n,r,i,s,!0))}else!o&&t&&we.call(t,l)&&p(this._trace(h,t[l],Be(n,l),t,l,s,a,!0))}if(this._hasParentSelector)for(let e=0;e{t(e)}))},He.prototype._slice=function(e,t,n,r,i,s,a){if(!Array.isArray(n))return;const o=n.length,c=e.split(":"),l=c[2]&&Number.parseInt(c[2])||1;let h=c[0]&&Number.parseInt(c[0])||0,u=c[1]&&Number.parseInt(c[1])||o;h=h<0?Math.max(0,h+o):Math.min(o,h),u=u<0?Math.max(0,u+o):Math.min(o,u);const p=[];for(let e=h;e{p.push(e)}))}return p},He.prototype._eval=function(e,t,n,r,i,s){this.currSandbox._$_parentProperty=s,this.currSandbox._$_parent=i,this.currSandbox._$_property=n,this.currSandbox._$_root=this.json,this.currSandbox._$_v=t;const a=e.includes("@path");a&&(this.currSandbox._$_path=He.toPathString(r.concat([n])));const o="script:"+e;if(!He.cache[o]){let t=e.replace(/@parentProperty/gu,"_$_parentProperty").replace(/@parent/gu,"_$_parent").replace(/@property/gu,"_$_property").replace(/@root/gu,"_$_root").replace(/@([.\s)[])/gu,"_$_v$1");a&&(t=t.replace(/@path/gu,"_$_path")),He.cache[o]=new this.vm.Script(t)}try{return He.cache[o].runInNewContext(this.currSandbox)}catch(t){throw new Error("jsonPath: "+t.message+": "+e)}},He.cache={},He.toPathString=function(e){const t=e,n=t.length;let r="$";for(let e=1;e":">"},i=/[&"'<>]/g,s=e.exports={};function a(e,t){return n.hasOwnProperty.call(e,t)}function o(e){return r[e]}function c(e,t,n){var r,i,s;if(e instanceof Error&&(e=(i=e).name+": "+i.message),Object.setPrototypeOf?(r=new Error(e),Object.setPrototypeOf(r,c.prototype)):(r=this,Object.defineProperty(r,"message",{enumerable:!1,writable:!0,value:e})),Object.defineProperty(r,"name",{value:"Template render error"}),Error.captureStackTrace&&Error.captureStackTrace(r,this.constructor),i){var a=Object.getOwnPropertyDescriptor(i,"stack");(s=a&&(a.get||function(){return a.value}))||(s=function(){return i.stack})}else{var o=new Error(e).stack;s=function(){return o}}return Object.defineProperty(r,"stack",{get:function(){return s.call(r)}}),Object.defineProperty(r,"cause",{value:i}),r.lineno=t,r.colno=n,r.firstUpdate=!0,r.Update=function(e){var t="("+(e||"unknown path")+")";return this.firstUpdate&&(this.lineno&&this.colno?t+=" [Line "+this.lineno+", Column "+this.colno+"]":this.lineno&&(t+=" [Line "+this.lineno+"]")),t+="\n ",this.firstUpdate&&(t+=" "),this.message=t+(this.message||""),this.firstUpdate=!1,this},r}function l(e){return"[object Function]"===n.toString.call(e)}function h(e){return"[object Array]"===n.toString.call(e)}function u(e){return"[object String]"===n.toString.call(e)}function p(e){return"[object Object]"===n.toString.call(e)}function f(e){var t=function(e){return e?"string"==typeof e?e.split("."):[e]:[]}(e);return function(e){for(var n=e,r=0;r1)for(var n=1;n0&&a.length>i){a.warned=!0;var o=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+t+" listeners added. Use emitter.setMaxListeners() to increase limit");o.name="MaxListenersExceededWarning",o.emitter=e,o.type=t,o.count=a.length,function(e){"function"==typeof console.warn?console.warn(e):console.log(e)}(o)}}else a=s[t]=n,++e._eventsCount;return e}function bt(e,t,n){var r=!1;function i(){e.removeListener(t,i),r||(r=!0,n.apply(e,arguments))}return i.listener=n,i}function Ot(e){var t=this._events;if(t){var n=t[e];if("function"==typeof n)return 1;if(n)return n.length}return 0}function yt(e,t){for(var n=new Array(t);t--;)n[t]=e[t];return n}function Lt(){var e;Tt.call(this),this.__emitError=(e=this,function(t){e.emit("error",t)})}function kt(){return new Lt}mt.prototype=Object.create(null),Tt.EventEmitter=Tt,Tt.usingDomains=!1,Tt.prototype.domain=void 0,Tt.prototype._events=void 0,Tt.prototype._maxListeners=void 0,Tt.defaultMaxListeners=10,Tt.init=function(){this.domain=null,Tt.usingDomains&&undefined.active,this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new mt,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},Tt.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this},Tt.prototype.getMaxListeners=function(){return _t(this)},Tt.prototype.emit=function(e){var t,n,r,i,s,a,o,c="error"===e;if(a=this._events)c=c&&null==a.error;else if(!c)return!1;if(o=this.domain,c){if(t=arguments[1],!o){if(t instanceof Error)throw t;var l=new Error('Uncaught, unspecified "error" event. ('+t+")");throw l.context=t,l}return t||(t=new Error('Uncaught, unspecified "error" event')),t.domainEmitter=this,t.domain=o,t.domainThrown=!1,o.emit("error",t),!1}if(!(n=a[e]))return!1;var h="function"==typeof n;switch(r=arguments.length){case 1:At(n,h,this);break;case 2:gt(n,h,this,arguments[1]);break;case 3:Nt(n,h,this,arguments[1],arguments[2]);break;case 4:Ct(n,h,this,arguments[1],arguments[2],arguments[3]);break;default:for(i=new Array(r-1),s=1;s0;)if(n[s]===t||n[s].listener&&n[s].listener===t){a=n[s].listener,i=s;break}if(i<0)return this;if(1===n.length){if(n[0]=void 0,0==--this._eventsCount)return this._events=new mt,this;delete r[e]}else!function(e,t){for(var n=t,r=n+1,i=e.length;r0?Reflect.ownKeys(this._events):[]},("function"==typeof Object.create?function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:function(e,t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e})(Lt,Tt),Lt.prototype.add=function(e){e.on("error",this.__emitError)},Lt.prototype.remove=function(e){e.removeListener("error",this.__emitError)},Lt.prototype.bind=function(e){var t=this.__emitError;return function(){var n=Array.prototype.slice.call(arguments);try{e.apply(null,n)}catch(e){t(e)}}},Lt.prototype.intercept=function(e){var t=this.__emitError;return function(n){if(n)t(n);else{var r=Array.prototype.slice.call(arguments,1);try{e.apply(null,r)}catch(n){t(n)}}}},Lt.prototype.run=function(e){var t=this.__emitError;try{e()}catch(e){t(e)}return this},Lt.prototype.dispose=function(){return this.removeAllListeners(),this},Lt.prototype.enter=Lt.prototype.exit=function(){return this};var vt,Dt={Domain:Lt,createDomain:kt,create:kt},Rt="function"==typeof setImmediate,Mt=Pt;function Pt(e){xt.length||(Ut(),wt=!0),xt[xt.length]=e}var xt=[],wt=!1,Bt=0;function Ft(){for(;Bt1024){for(var t=0,n=xt.length-Bt;t=!".indexOf(r)){this.forward();var o,c=["==","===","!=","!==","<=",">=","//","**"],l=r+this.current();switch(-1!==je.indexOf(c,l)&&(this.forward(),r=l,-1!==je.indexOf(c,l+this.current())&&(r=l+this.current(),this.forward())),r){case"(":o="left-paren";break;case")":o="right-paren";break;case"[":o="left-bracket";break;case"]":o="right-bracket";break;case"{":o="left-curly";break;case"}":o="right-curly";break;case",":o="comma";break;case":":o="colon";break;case"~":o="tilde";break;case"|":o="pipe";break;default:o="operator"}return Kt(o,r,t,n)}if((e=this._extractUntil(" \n\t\r ()[]{}%*-+~/#,:|.<>=!")).match(/^[-+]?[0-9]+$/))return"."===this.current()?(this.forward(),Kt("float",e+"."+this._extract("0123456789"),t,n)):Kt("int",e,t,n);if(e.match(/^(true|false)$/))return Kt("boolean",e,t,n);if("none"===e)return Kt("none",e,t,n);if("null"===e)return Kt("none",e,t,n);if(e)return Kt("symbol",e,t,n);throw new Error("Unexpected value while parsing: "+e)}var h,u=this.tags.BLOCK_START.charAt(0)+this.tags.VARIABLE_START.charAt(0)+this.tags.COMMENT_START.charAt(0)+this.tags.COMMENT_END.charAt(0);if(this.isFinished())return null;if((e=this._extractString(this.tags.BLOCK_START+"-"))||(e=this._extractString(this.tags.BLOCK_START)))return this.in_code=!0,Kt("block-start",e,t,n);if((e=this._extractString(this.tags.VARIABLE_START+"-"))||(e=this._extractString(this.tags.VARIABLE_START)))return this.in_code=!0,Kt("variable-start",e,t,n);e="";var p=!1;for(this._matches(this.tags.COMMENT_START)&&(p=!0,e=this._extractString(this.tags.COMMENT_START));null!==(h=this._extractUntil(u));){if(e+=h,(this._matches(this.tags.BLOCK_START)||this._matches(this.tags.VARIABLE_START)||this._matches(this.tags.COMMENT_START))&&!p){if(this.lstripBlocks&&this._matches(this.tags.BLOCK_START)&&this.colno>0&&this.colno<=e.length){var f=e.slice(-this.colno);if(/^\s+$/.test(f)&&!(e=e.slice(0,-this.colno)).length)return this.nextToken()}break}if(this._matches(this.tags.COMMENT_END)){if(!p)throw new Error("unexpected end of comment");e+=this._extractString(this.tags.COMMENT_END);break}e+=this.current(),this.forward()}if(null===h&&p)throw new Error("expected end of comment, got end of file");return Kt(p?"comment":"data",e,t,n)},t._parseString=function(e){this.forward();for(var t="";!this.isFinished()&&this.current()!==e;){var n=this.current();if("\\"===n){switch(this.forward(),this.current()){case"n":t+="\n";break;case"t":t+="\t";break;case"r":t+="\r";break;default:t+=this.current()}this.forward()}else t+=n,this.forward()}return this.forward(),t},t._matches=function(e){return this.index+e.length>this.len?null:this.str.slice(this.index,this.index+e.length)===e},t._extractString=function(e){return this._matches(e)?(this.forwardN(e.length),e):null},t._extractUntil=function(e){return this._extractMatching(!0,e||"")},t._extract=function(e){return this._extractMatching(!1,e)},t._extractMatching=function(e,t){if(this.isFinished())return null;var n=t.indexOf(this.current());if(e&&-1===n||!e&&-1!==n){var r=this.current();this.forward();for(var i=t.indexOf(this.current());(e&&-1===i||!e&&-1!==i)&&!this.isFinished();)r+=this.current(),this.forward(),i=t.indexOf(this.current());return r}return""},t._extractRegex=function(e){var t=this.currentStr().match(e);return t?(this.forwardN(t[0].length),t):null},t.isFinished=function(){return this.index>=this.len},t.forwardN=function(e){for(var t=0;t2?i-2:0),a=2;a0||!n)&&Et.stdout.write(" ".repeat(t));var s=i===r.length-1?"":"\n";Et.stdout.write(""+e+s)}))}var hr={Node:on,Root:hn,NodeList:ln,Value:cn,Literal:un,Symbol:pn,Group:fn,Array:dn,Pair:En,Dict:mn,Output:Un,Capture:Hn,TemplateData:Gn,If:_n,IfAsync:An,InlineIf:gn,For:Nn,AsyncEach:Cn,AsyncAll:In,Macro:Sn,Caller:bn,Import:On,FromImport:yn,FunCall:Ln,Filter:kn,FilterAsync:vn,KeywordArgs:Dn,Block:Rn,Super:Mn,Extends:Pn,Include:xn,Set:wn,Switch:Bn,Case:Fn,LookupVal:Tn,BinOp:qn,In:Kn,Is:jn,Or:Vn,And:Wn,Not:Qn,Add:Xn,Concat:$n,Sub:zn,Mul:Jn,Div:Zn,FloorDiv:er,Mod:tr,Pow:nr,Neg:rr,Pos:ir,Compare:sr,CompareOperand:ar,CallExtension:or,CallExtensionAsync:cr,printNodes:function e(t,n){if(n=n||0,lr(t.typename+": ",n),t instanceof ln)lr("\n"),t.children.forEach((function(t){e(t,n+2)}));else if(t instanceof or)lr(t.extName+"."+t.prop+"\n"),t.args&&e(t.args,n+2),t.contentArgs&&t.contentArgs.forEach((function(t){e(t,n+2)}));else{var r=[],i=null;t.iterFields((function(e,t){e instanceof on?r.push([t,e]):(i=i||{})[t]=e})),i?lr(JSON.stringify(i,null,2)+"\n",null,!0):lr("\n"),r.forEach((function(t){var r=t[0],i=t[1];lr("["+r+"] =>",n+2),e(i,n+4)}))}}};function ur(e,t){return ur=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},ur(e,t)}hr.Node,hr.Root,hr.NodeList,hr.Value,hr.Literal,hr.Group,hr.Pair,hr.Dict,hr.Output,hr.Capture,hr.TemplateData,hr.If,hr.IfAsync,hr.InlineIf,hr.For,hr.AsyncEach,hr.AsyncAll,hr.Macro,hr.Caller,hr.Import,hr.FromImport,hr.FunCall,hr.Filter,hr.FilterAsync,hr.KeywordArgs,hr.Block,hr.Super,hr.Extends,hr.Include,hr.Switch,hr.Case,hr.LookupVal,hr.BinOp,hr.In,hr.Is,hr.Or,hr.And,hr.Not,hr.Add,hr.Concat,hr.Sub,hr.Mul,hr.Div,hr.FloorDiv,hr.Mod,hr.Pow,hr.Neg,hr.Pos,hr.Compare,hr.CompareOperand,hr.CallExtension,hr.CallExtensionAsync,hr.printNodes;var pr=function(e){var t,n;function r(){return e.apply(this,arguments)||this}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,ur(t,n);var i=r.prototype;return i.init=function(e){this.tokens=e,this.peeked=null,this.breakOnBlocks=null,this.dropLeadingWhitespace=!1,this.extensions=[]},i.nextToken=function(e){var t;if(this.peeked){if(e||this.peeked.type!==Vt.TOKEN_WHITESPACE)return t=this.peeked,this.peeked=null,t;this.peeked=null}if(t=this.tokens.nextToken(),!e)for(;t&&t.type===Vt.TOKEN_WHITESPACE;)t=this.tokens.nextToken();return t},i.peekToken=function(){return this.peeked=this.peeked||this.nextToken(),this.peeked},i.pushToken=function(e){if(this.peeked)throw new Error("pushToken: can only push one token on between reads");this.peeked=e},i.error=function(e,t,n){if(void 0===t||void 0===n){var r=this.peekToken()||{};t=r.lineno,n=r.colno}return void 0!==t&&(t+=1),void 0!==n&&(n+=1),new je.TemplateError(e,t,n)},i.fail=function(e,t,n){throw this.error(e,t,n)},i.skip=function(e){var t=this.nextToken();return!(!t||t.type!==e)||(this.pushToken(t),!1)},i.expect=function(e){var t=this.nextToken();return t.type!==e&&this.fail("expected "+e+", got "+t.type,t.lineno,t.colno),t},i.skipValue=function(e,t){var n=this.nextToken();return!(!n||n.type!==e||n.value!==t)||(this.pushToken(n),!1)},i.skipSymbol=function(e){return this.skipValue(Vt.TOKEN_SYMBOL,e)},i.advanceAfterBlockEnd=function(e){var t;return e||((t=this.peekToken())||this.fail("unexpected end of file"),t.type!==Vt.TOKEN_SYMBOL&&this.fail("advanceAfterBlockEnd: expected symbol token or explicit name to be passed"),e=this.nextToken().value),(t=this.nextToken())&&t.type===Vt.TOKEN_BLOCK_END?"-"===t.value.charAt(0)&&(this.dropLeadingWhitespace=!0):this.fail("expected block end in "+e+" statement"),t},i.advanceAfterVariableEnd=function(){var e=this.nextToken();e&&e.type===Vt.TOKEN_VARIABLE_END?this.dropLeadingWhitespace="-"===e.value.charAt(e.value.length-this.tokens.tags.VARIABLE_END.length-1):(this.pushToken(e),this.fail("expected variable end"))},i.parseFor=function(){var e,t,n=this.peekToken();if(this.skipSymbol("for")?(e=new hr.For(n.lineno,n.colno),t="endfor"):this.skipSymbol("asyncEach")?(e=new hr.AsyncEach(n.lineno,n.colno),t="endeach"):this.skipSymbol("asyncAll")?(e=new hr.AsyncAll(n.lineno,n.colno),t="endall"):this.fail("parseFor: expected for{Async}",n.lineno,n.colno),e.name=this.parsePrimary(),e.name instanceof hr.Symbol||this.fail("parseFor: variable name expected for loop"),this.peekToken().type===Vt.TOKEN_COMMA){var r=e.name;for(e.name=new hr.Array(r.lineno,r.colno),e.name.addChild(r);this.skip(Vt.TOKEN_COMMA);){var i=this.parsePrimary();e.name.addChild(i)}}return this.skipSymbol("in")||this.fail('parseFor: expected "in" keyword for loop',n.lineno,n.colno),e.arr=this.parseExpression(),this.advanceAfterBlockEnd(n.value),e.body=this.parseUntilBlocks(t,"else"),this.skipSymbol("else")&&(this.advanceAfterBlockEnd("else"),e.else_=this.parseUntilBlocks(t)),this.advanceAfterBlockEnd(),e},i.parseMacro=function(){var e=this.peekToken();this.skipSymbol("macro")||this.fail("expected macro");var t=this.parsePrimary(!0),n=this.parseSignature(),r=new hr.Macro(e.lineno,e.colno,t,n);return this.advanceAfterBlockEnd(e.value),r.body=this.parseUntilBlocks("endmacro"),this.advanceAfterBlockEnd(),r},i.parseCall=function(){var e=this.peekToken();this.skipSymbol("call")||this.fail("expected call");var t=this.parseSignature(!0)||new hr.NodeList,n=this.parsePrimary();this.advanceAfterBlockEnd(e.value);var r=this.parseUntilBlocks("endcall");this.advanceAfterBlockEnd();var i=new hr.Symbol(e.lineno,e.colno,"caller"),s=new hr.Caller(e.lineno,e.colno,i,t,r),a=n.args.children;return a[a.length-1]instanceof hr.KeywordArgs||a.push(new hr.KeywordArgs),a[a.length-1].addChild(new hr.Pair(e.lineno,e.colno,i,s)),new hr.Output(e.lineno,e.colno,[n])},i.parseWithContext=function(){var e=this.peekToken(),t=null;return this.skipSymbol("with")?t=!0:this.skipSymbol("without")&&(t=!1),null!==t&&(this.skipSymbol("context")||this.fail("parseFrom: expected context after with/without",e.lineno,e.colno)),t},i.parseImport=function(){var e=this.peekToken();this.skipSymbol("import")||this.fail("parseImport: expected import",e.lineno,e.colno);var t=this.parseExpression();this.skipSymbol("as")||this.fail('parseImport: expected "as" keyword',e.lineno,e.colno);var n=this.parseExpression(),r=this.parseWithContext(),i=new hr.Import(e.lineno,e.colno,t,n,r);return this.advanceAfterBlockEnd(e.value),i},i.parseFrom=function(){var e=this.peekToken();this.skipSymbol("from")||this.fail("parseFrom: expected from");var t=this.parseExpression();this.skipSymbol("import")||this.fail("parseFrom: expected import",e.lineno,e.colno);for(var n,r=new hr.NodeList;;){var i=this.peekToken();if(i.type===Vt.TOKEN_BLOCK_END){r.children.length||this.fail("parseFrom: Expected at least one import name",e.lineno,e.colno),"-"===i.value.charAt(0)&&(this.dropLeadingWhitespace=!0),this.nextToken();break}r.children.length>0&&!this.skip(Vt.TOKEN_COMMA)&&this.fail("parseFrom: expected comma",e.lineno,e.colno);var s=this.parsePrimary();if("_"===s.value.charAt(0)&&this.fail("parseFrom: names starting with an underscore cannot be imported",s.lineno,s.colno),this.skipSymbol("as")){var a=this.parsePrimary();r.addChild(new hr.Pair(s.lineno,s.colno,s,a))}else r.addChild(s);n=this.parseWithContext()}return new hr.FromImport(e.lineno,e.colno,t,r,n)},i.parseBlock=function(){var e=this.peekToken();this.skipSymbol("block")||this.fail("parseBlock: expected block",e.lineno,e.colno);var t=new hr.Block(e.lineno,e.colno);t.name=this.parsePrimary(),t.name instanceof hr.Symbol||this.fail("parseBlock: variable name expected",e.lineno,e.colno),this.advanceAfterBlockEnd(e.value),t.body=this.parseUntilBlocks("endblock"),this.skipSymbol("endblock"),this.skipSymbol(t.name.value);var n=this.peekToken();return n||this.fail("parseBlock: expected endblock, got end of file"),this.advanceAfterBlockEnd(n.value),t},i.parseExtends=function(){var e="extends",t=this.peekToken();this.skipSymbol(e)||this.fail("parseTemplateRef: expected extends");var n=new hr.Extends(t.lineno,t.colno);return n.template=this.parseExpression(),this.advanceAfterBlockEnd(t.value),n},i.parseInclude=function(){var e="include",t=this.peekToken();this.skipSymbol(e)||this.fail("parseInclude: expected include");var n=new hr.Include(t.lineno,t.colno);return n.template=this.parseExpression(),this.skipSymbol("ignore")&&this.skipSymbol("missing")&&(n.ignoreMissing=!0),this.advanceAfterBlockEnd(t.value),n},i.parseIf=function(){var e,t=this.peekToken();this.skipSymbol("if")||this.skipSymbol("elif")||this.skipSymbol("elseif")?e=new hr.If(t.lineno,t.colno):this.skipSymbol("ifAsync")?e=new hr.IfAsync(t.lineno,t.colno):this.fail("parseIf: expected if, elif, or elseif",t.lineno,t.colno),e.cond=this.parseExpression(),this.advanceAfterBlockEnd(t.value),e.body=this.parseUntilBlocks("elif","elseif","else","endif");var n=this.peekToken();switch(n&&n.value){case"elseif":case"elif":e.else_=this.parseIf();break;case"else":this.advanceAfterBlockEnd(),e.else_=this.parseUntilBlocks("endif"),this.advanceAfterBlockEnd();break;case"endif":e.else_=null,this.advanceAfterBlockEnd();break;default:this.fail("parseIf: expected elif, else, or endif, got end of file")}return e},i.parseSet=function(){var e=this.peekToken();this.skipSymbol("set")||this.fail("parseSet: expected set",e.lineno,e.colno);for(var t,n=new hr.Set(e.lineno,e.colno,[]);(t=this.parsePrimary())&&(n.targets.push(t),this.skip(Vt.TOKEN_COMMA)););return this.skipValue(Vt.TOKEN_OPERATOR,"=")?(n.value=this.parseExpression(),this.advanceAfterBlockEnd(e.value)):this.skip(Vt.TOKEN_BLOCK_END)?(n.body=new hr.Capture(e.lineno,e.colno,this.parseUntilBlocks("endset")),n.value=null,this.advanceAfterBlockEnd()):this.fail("parseSet: expected = or block end in set tag",e.lineno,e.colno),n},i.parseSwitch=function(){var e="switch",t="endswitch",n="case",r="default",i=this.peekToken();this.skipSymbol(e)||this.skipSymbol(n)||this.skipSymbol(r)||this.fail('parseSwitch: expected "switch," "case" or "default"',i.lineno,i.colno);var s=this.parseExpression();this.advanceAfterBlockEnd(e),this.parseUntilBlocks(n,r,t);var a,o=this.peekToken(),c=[];do{this.skipSymbol(n);var l=this.parseExpression();this.advanceAfterBlockEnd(e);var h=this.parseUntilBlocks(n,r,t);c.push(new hr.Case(o.line,o.col,l,h)),o=this.peekToken()}while(o&&o.value===n);switch(o.value){case r:this.advanceAfterBlockEnd(),a=this.parseUntilBlocks(t),this.advanceAfterBlockEnd();break;case t:this.advanceAfterBlockEnd();break;default:this.fail('parseSwitch: expected "case," "default" or "endswitch," got EOF.')}return new hr.Switch(i.lineno,i.colno,s,c,a)},i.parseStatement=function(){var e=this.peekToken();if(e.type!==Vt.TOKEN_SYMBOL&&this.fail("tag name expected",e.lineno,e.colno),this.breakOnBlocks&&-1!==je.indexOf(this.breakOnBlocks,e.value))return null;switch(e.value){case"raw":return this.parseRaw();case"verbatim":return this.parseRaw("verbatim");case"if":case"ifAsync":return this.parseIf();case"for":case"asyncEach":case"asyncAll":return this.parseFor();case"block":return this.parseBlock();case"extends":return this.parseExtends();case"include":return this.parseInclude();case"set":return this.parseSet();case"macro":return this.parseMacro();case"call":return this.parseCall();case"import":return this.parseImport();case"from":return this.parseFrom();case"filter":return this.parseFilterStatement();case"switch":return this.parseSwitch();default:if(this.extensions.length)for(var t=0;t0;){var o=s[0],c=s[1],l=s[2];l===e?r+=1:l===t&&(r-=1),0===r?(i+=c,this.tokens.backN(o.length-c.length)):i+=o}return new hr.Output(a.lineno,a.colno,[new hr.TemplateData(a.lineno,a.colno,i)])},i.parsePostfix=function(e){for(var t,n=this.peekToken();n;){if(n.type===Vt.TOKEN_LEFT_PAREN)e=new hr.FunCall(n.lineno,n.colno,e,this.parseSignature());else if(n.type===Vt.TOKEN_LEFT_BRACKET)(t=this.parseAggregate()).children.length>1&&this.fail("invalid index"),e=new hr.LookupVal(n.lineno,n.colno,e,t.children[0]);else{if(n.type!==Vt.TOKEN_OPERATOR||"."!==n.value)break;this.nextToken();var r=this.nextToken();r.type!==Vt.TOKEN_SYMBOL&&this.fail("expected name as lookup value, got "+r.value,r.lineno,r.colno),t=new hr.Literal(r.lineno,r.colno,r.value),e=new hr.LookupVal(n.lineno,n.colno,e,t)}n=this.peekToken()}return e},i.parseExpression=function(){return this.parseInlineIf()},i.parseInlineIf=function(){var e=this.parseOr();if(this.skipSymbol("if")){var t=this.parseOr(),n=e;(e=new hr.InlineIf(e.lineno,e.colno)).body=n,e.cond=t,this.skipSymbol("else")?e.else_=this.parseOr():e.else_=null}return e},i.parseOr=function(){for(var e=this.parseAnd();this.skipSymbol("or");){var t=this.parseAnd();e=new hr.Or(e.lineno,e.colno,e,t)}return e},i.parseAnd=function(){for(var e=this.parseNot();this.skipSymbol("and");){var t=this.parseNot();e=new hr.And(e.lineno,e.colno,e,t)}return e},i.parseNot=function(){var e=this.peekToken();return this.skipSymbol("not")?new hr.Not(e.lineno,e.colno,this.parseNot()):this.parseIn()},i.parseIn=function(){for(var e=this.parseIs();;){var t=this.nextToken();if(!t)break;var n=t.type===Vt.TOKEN_SYMBOL&&"not"===t.value;if(n||this.pushToken(t),!this.skipSymbol("in")){n&&this.pushToken(t);break}var r=this.parseIs();e=new hr.In(e.lineno,e.colno,e,r),n&&(e=new hr.Not(e.lineno,e.colno,e))}return e},i.parseIs=function(){var e=this.parseCompare();if(this.skipSymbol("is")){var t=this.skipSymbol("not"),n=this.parseCompare();e=new hr.Is(e.lineno,e.colno,e,n),t&&(e=new hr.Not(e.lineno,e.colno,e))}return e},i.parseCompare=function(){for(var e=["==","===","!=","!==","<",">","<=",">="],t=this.parseConcat(),n=[];;){var r=this.nextToken();if(!r)break;if(-1===e.indexOf(r.value)){this.pushToken(r);break}n.push(new hr.CompareOperand(r.lineno,r.colno,this.parseConcat(),r.value))}return n.length?new hr.Compare(n[0].lineno,n[0].colno,t,n):t},i.parseConcat=function(){for(var e=this.parseAdd();this.skipValue(Vt.TOKEN_TILDE,"~");){var t=this.parseAdd();e=new hr.Concat(e.lineno,e.colno,e,t)}return e},i.parseAdd=function(){for(var e=this.parseSub();this.skipValue(Vt.TOKEN_OPERATOR,"+");){var t=this.parseSub();e=new hr.Add(e.lineno,e.colno,e,t)}return e},i.parseSub=function(){for(var e=this.parseMul();this.skipValue(Vt.TOKEN_OPERATOR,"-");){var t=this.parseMul();e=new hr.Sub(e.lineno,e.colno,e,t)}return e},i.parseMul=function(){for(var e=this.parseDiv();this.skipValue(Vt.TOKEN_OPERATOR,"*");){var t=this.parseDiv();e=new hr.Mul(e.lineno,e.colno,e,t)}return e},i.parseDiv=function(){for(var e=this.parseFloorDiv();this.skipValue(Vt.TOKEN_OPERATOR,"/");){var t=this.parseFloorDiv();e=new hr.Div(e.lineno,e.colno,e,t)}return e},i.parseFloorDiv=function(){for(var e=this.parseMod();this.skipValue(Vt.TOKEN_OPERATOR,"//");){var t=this.parseMod();e=new hr.FloorDiv(e.lineno,e.colno,e,t)}return e},i.parseMod=function(){for(var e=this.parsePow();this.skipValue(Vt.TOKEN_OPERATOR,"%");){var t=this.parsePow();e=new hr.Mod(e.lineno,e.colno,e,t)}return e},i.parsePow=function(){for(var e=this.parseUnary();this.skipValue(Vt.TOKEN_OPERATOR,"**");){var t=this.parseUnary();e=new hr.Pow(e.lineno,e.colno,e,t)}return e},i.parseUnary=function(e){var t,n=this.peekToken();return t=this.skipValue(Vt.TOKEN_OPERATOR,"-")?new hr.Neg(n.lineno,n.colno,this.parseUnary(!0)):this.skipValue(Vt.TOKEN_OPERATOR,"+")?new hr.Pos(n.lineno,n.colno,this.parseUnary(!0)):this.parsePrimary(),e||(t=this.parseFilter(t)),t},i.parsePrimary=function(e){var t,n=this.nextToken(),r=null;if(n?n.type===Vt.TOKEN_STRING?t=n.value:n.type===Vt.TOKEN_INT?t=parseInt(n.value,10):n.type===Vt.TOKEN_FLOAT?t=parseFloat(n.value):n.type===Vt.TOKEN_BOOLEAN?"true"===n.value?t=!0:"false"===n.value?t=!1:this.fail("invalid boolean: "+n.value,n.lineno,n.colno):n.type===Vt.TOKEN_NONE?t=null:n.type===Vt.TOKEN_REGEX&&(t=new RegExp(n.value.body,n.value.flags)):this.fail("expected expression, got end of file"),void 0!==t?r=new hr.Literal(n.lineno,n.colno,t):n.type===Vt.TOKEN_SYMBOL?r=new hr.Symbol(n.lineno,n.colno,n.value):(this.pushToken(n),r=this.parseAggregate()),e||(r=this.parsePostfix(r)),r)return r;throw this.error("unexpected token: "+n.value,n.lineno,n.colno)},i.parseFilterName=function(){for(var e=this.expect(Vt.TOKEN_SYMBOL),t=e.value;this.skipValue(Vt.TOKEN_OPERATOR,".");)t+="."+this.expect(Vt.TOKEN_SYMBOL).value;return new hr.Symbol(e.lineno,e.colno,t)},i.parseFilterArgs=function(e){return this.peekToken().type===Vt.TOKEN_LEFT_PAREN?this.parsePostfix(e).args.children:[]},i.parseFilter=function(e){for(;this.skip(Vt.TOKEN_PIPE);){var t=this.parseFilterName();e=new hr.Filter(t.lineno,t.colno,t,new hr.NodeList(t.lineno,t.colno,[e].concat(this.parseFilterArgs(e))))}return e},i.parseFilterStatement=function(){var e=this.peekToken();this.skipSymbol("filter")||this.fail("parseFilterStatement: expected filter");var t=this.parseFilterName(),n=this.parseFilterArgs(t);this.advanceAfterBlockEnd(e.value);var r=new hr.Capture(t.lineno,t.colno,this.parseUntilBlocks("endfilter"));this.advanceAfterBlockEnd();var i=new hr.Filter(t.lineno,t.colno,t,new hr.NodeList(t.lineno,t.colno,[r].concat(n)));return new hr.Output(t.lineno,t.colno,[i])},i.parseAggregate=function(){var e,t=this.nextToken();switch(t.type){case Vt.TOKEN_LEFT_PAREN:e=new hr.Group(t.lineno,t.colno);break;case Vt.TOKEN_LEFT_BRACKET:e=new hr.Array(t.lineno,t.colno);break;case Vt.TOKEN_LEFT_CURLY:e=new hr.Dict(t.lineno,t.colno);break;default:return null}for(;;){var n=this.peekToken().type;if(n===Vt.TOKEN_RIGHT_PAREN||n===Vt.TOKEN_RIGHT_BRACKET||n===Vt.TOKEN_RIGHT_CURLY){this.nextToken();break}if(e.children.length>0&&(this.skip(Vt.TOKEN_COMMA)||this.fail("parseAggregate: expected comma after expression",t.lineno,t.colno)),e instanceof hr.Dict){var r=this.parsePrimary();this.skip(Vt.TOKEN_COLON)||this.fail("parseAggregate: expected colon after dict key",t.lineno,t.colno);var i=this.parseExpression();e.addChild(new hr.Pair(r.lineno,r.colno,r,i))}else{var s=this.parseExpression();e.addChild(s)}}return e},i.parseSignature=function(e,t){var n=this.peekToken();if(!t&&n.type!==Vt.TOKEN_LEFT_PAREN){if(e)return null;this.fail("expected arguments",n.lineno,n.colno)}n.type===Vt.TOKEN_LEFT_PAREN&&(n=this.nextToken());for(var r=new hr.NodeList(n.lineno,n.colno),i=new hr.KeywordArgs(n.lineno,n.colno),s=!1;;){if(n=this.peekToken(),!t&&n.type===Vt.TOKEN_RIGHT_PAREN){this.nextToken();break}if(t&&n.type===Vt.TOKEN_BLOCK_END)break;if(s&&!this.skip(Vt.TOKEN_COMMA))this.fail("parseSignature: expected comma after expression",n.lineno,n.colno);else{var a=this.parseExpression();this.skipValue(Vt.TOKEN_OPERATOR,"=")?i.addChild(new hr.Pair(a.lineno,a.colno,a,this.parseExpression())):r.addChild(a)}s=!0}return i.children.length&&r.addChild(i),r},i.parseUntilBlocks=function(){for(var e=this.breakOnBlocks,t=arguments.length,n=new Array(t),r=0;re.length)a=i.slice(0,e.length),i.slice(a.length,o).forEach((function(e,n){n":">","<=":"<=",">=":">="},Pr=function(e){var t,n;function r(){return e.apply(this,arguments)||this}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,vr(t,n);var i=r.prototype;return i.init=function(e,t){this.templateName=e,this.codebuf=[],this.lastId=0,this.buffer=null,this.bufferStack=[],this._scopeClosers="",this.inBlock=!1,this.throwOnUndefined=t},i.fail=function(e,t,n){throw void 0!==t&&(t+=1),void 0!==n&&(n+=1),new Dr(e,t,n)},i._pushBuffer=function(){var e=this._tmpid();return this.bufferStack.push(this.buffer),this.buffer=e,this._emit("var "+this.buffer+' = "";'),e},i._popBuffer=function(){this.buffer=this.bufferStack.pop()},i._emit=function(e){this.codebuf.push(e)},i._emitLine=function(e){this._emit(e+"\n")},i._emitLines=function(){for(var e=this,t=arguments.length,n=new Array(t),r=0;r0&&i._emit(","),i.compile(e,t)})),r&&this._emit(r)},i._compileExpression=function(e,t){this.assertType(e,hr.Literal,hr.Symbol,hr.Group,hr.Array,hr.Dict,hr.FunCall,hr.Caller,hr.Filter,hr.LookupVal,hr.Compare,hr.InlineIf,hr.In,hr.Is,hr.And,hr.Or,hr.Not,hr.Add,hr.Concat,hr.Sub,hr.Mul,hr.Div,hr.FloorDiv,hr.Mod,hr.Pow,hr.Neg,hr.Pos,hr.Compare,hr.NodeList),this.compile(e,t)},i.assertType=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r0&&r._emit(","),e){r._emitLine("function(cb) {"),r._emitLine("if(!cb) { cb = function(err) { if(err) { throw err; }}}");var i=r._pushBuffer();r._withScopedSyntax((function(){r.compile(e,t),r._emitLine("cb(null, "+i+");")})),r._popBuffer(),r._emitLine("return "+i+";"),r._emitLine("}")}else r._emit("null")})),n){var o=this._tmpid();this._emitLine(", "+this._makeCallback(o)),this._emitLine(this.buffer+" += runtime.suppressValue("+o+", "+a+" && env.opts.autoescape);"),this._addScopeLevel()}else this._emit(")"),this._emit(", "+a+" && env.opts.autoescape);\n")},i.compileCallExtensionAsync=function(e,t){this.compileCallExtension(e,t,!0)},i.compileNodeList=function(e,t){this._compileChildren(e,t)},i.compileLiteral=function(e){if("string"==typeof e.value){var t=e.value.replace(/\\/g,"\\\\");t=(t=(t=(t=(t=t.replace(/"/g,'\\"')).replace(/\n/g,"\\n")).replace(/\r/g,"\\r")).replace(/\t/g,"\\t")).replace(/\u2028/g,"\\u2028"),this._emit('"'+t+'"')}else null===e.value?this._emit("null"):this._emit(e.value.toString())},i.compileSymbol=function(e,t){var n=e.value,r=t.lookup(n);r?this._emit(r):this._emit('runtime.contextOrFrameLookup(context, frame, "'+n+'")')},i.compileGroup=function(e,t){this._compileAggregate(e,t,"(",")")},i.compileArray=function(e,t){this._compileAggregate(e,t,"[","]")},i.compileDict=function(e,t){this._compileAggregate(e,t,"{","}")},i.compilePair=function(e,t){var n=e.key,r=e.value;n instanceof hr.Symbol?n=new hr.Literal(n.lineno,n.colno,n.value):n instanceof hr.Literal&&"string"==typeof n.value||this.fail("compilePair: Dict keys must be strings or names",n.lineno,n.colno),this.compile(n,t),this._emit(": "),this._compileExpression(r,t)},i.compileInlineIf=function(e,t){this._emit("("),this.compile(e.cond,t),this._emit("?"),this.compile(e.body,t),this._emit(":"),null!==e.else_?this.compile(e.else_,t):this._emit('""'),this._emit(")")},i.compileIn=function(e,t){this._emit("runtime.inOperator("),this.compile(e.left,t),this._emit(","),this.compile(e.right,t),this._emit(")")},i.compileIs=function(e,t){var n=e.right.name?e.right.name.value:e.right.value;this._emit('env.getTest("'+n+'").call(context, '),this.compile(e.left,t),e.right.args&&(this._emit(","),this.compile(e.right.args,t)),this._emit(") === true")},i._binOpEmitter=function(e,t,n){this.compile(e.left,t),this._emit(n),this.compile(e.right,t)},i.compileOr=function(e,t){return this._binOpEmitter(e,t," || ")},i.compileAnd=function(e,t){return this._binOpEmitter(e,t," && ")},i.compileAdd=function(e,t){return this._binOpEmitter(e,t," + ")},i.compileConcat=function(e,t){return this._binOpEmitter(e,t,' + "" + ')},i.compileSub=function(e,t){return this._binOpEmitter(e,t," - ")},i.compileMul=function(e,t){return this._binOpEmitter(e,t," * ")},i.compileDiv=function(e,t){return this._binOpEmitter(e,t," / ")},i.compileMod=function(e,t){return this._binOpEmitter(e,t," % ")},i.compileNot=function(e,t){this._emit("!"),this.compile(e.target,t)},i.compileFloorDiv=function(e,t){this._emit("Math.floor("),this.compile(e.left,t),this._emit(" / "),this.compile(e.right,t),this._emit(")")},i.compilePow=function(e,t){this._emit("Math.pow("),this.compile(e.left,t),this._emit(", "),this.compile(e.right,t),this._emit(")")},i.compileNeg=function(e,t){this._emit("-"),this.compile(e.target,t)},i.compilePos=function(e,t){this._emit("+"),this.compile(e.target,t)},i.compileCompare=function(e,t){var n=this;this.compile(e.expr,t),e.ops.forEach((function(e){n._emit(" "+Mr[e.type]+" "),n.compile(e.expr,t)}))},i.compileLookupVal=function(e,t){this._emit("runtime.memberLookup(("),this._compileExpression(e.target,t),this._emit("),"),this._compileExpression(e.val,t),this._emit(")")},i._getNodeName=function(e){switch(e.typename){case"Symbol":return e.value;case"FunCall":return"the return value of ("+this._getNodeName(e.name)+")";case"LookupVal":return this._getNodeName(e.target)+'["'+this._getNodeName(e.val)+'"]';case"Literal":return e.value.toString();default:return"--expression--"}},i.compileFunCall=function(e,t){this._emit("(lineno = "+e.lineno+", colno = "+e.colno+", "),this._emit("runtime.callWrap("),this._compileExpression(e.name,t),this._emit(', "'+this._getNodeName(e.name).replace(/"/g,'\\"')+'", context, '),this._compileAggregate(e.args,t,"[","])"),this._emit(")")},i.compileFilter=function(e,t){var n=e.name;this.assertType(n,hr.Symbol),this._emit('env.getFilter("'+n.value+'").call(context, '),this._compileAggregate(e.args,t),this._emit(")")},i.compileFilterAsync=function(e,t){var n=e.name,r=e.symbol.value;this.assertType(n,hr.Symbol),t.set(r,r),this._emit('env.getFilter("'+n.value+'").call(context, '),this._compileAggregate(e.args,t),this._emitLine(", "+this._makeCallback(r)),this._addScopeLevel()},i.compileKeywordArgs=function(e,t){this._emit("runtime.makeKeywordArgs("),this.compileDict(e,t),this._emit(")")},i.compileSet=function(e,t){var n=this,r=[];e.targets.forEach((function(e){var i=e.value,s=t.lookup(i);null==s&&(s=n._tmpid(),n._emitLine("var "+s+";")),r.push(s)})),e.value?(this._emit(r.join(" = ")+" = "),this._compileExpression(e.value,t),this._emitLine(";")):(this._emit(r.join(" = ")+" = "),this.compile(e.body,t),this._emitLine(";")),e.targets.forEach((function(e,t){var i=r[t],s=e.value;n._emitLine('frame.set("'+s+'", '+i+", true);"),n._emitLine("if(frame.topLevel) {"),n._emitLine('context.setVariable("'+s+'", '+i+");"),n._emitLine("}"),"_"!==s.charAt(0)&&(n._emitLine("if(frame.topLevel) {"),n._emitLine('context.addExport("'+s+'", '+i+");"),n._emitLine("}"))}))},i.compileSwitch=function(e,t){var n=this;this._emit("switch ("),this.compile(e.expr,t),this._emit(") {"),e.cases.forEach((function(e,r){n._emit("case "),n.compile(e.cond,t),n._emit(": "),n.compile(e.body,t),e.body.children.length&&n._emitLine("break;")})),e.default&&(this._emit("default:"),this.compile(e.default,t)),this._emit("}")},i.compileIf=function(e,t,n){var r=this;this._emit("if("),this._compileExpression(e.cond,t),this._emitLine(") {"),this._withScopedSyntax((function(){r.compile(e.body,t),n&&r._emit("cb()")})),e.else_?(this._emitLine("}\nelse {"),this._withScopedSyntax((function(){r.compile(e.else_,t),n&&r._emit("cb()")}))):n&&(this._emitLine("}\nelse {"),this._emit("cb()")),this._emitLine("}")},i.compileIfAsync=function(e,t){this._emit("(function(cb) {"),this.compileIf(e,t,!0),this._emit("})("+this._makeCallback()),this._addScopeLevel()},i._emitLoopBindings=function(e,t,n,r){var i=this;[{name:"index",val:n+" + 1"},{name:"index0",val:n},{name:"revindex",val:r+" - "+n},{name:"revindex0",val:r+" - "+n+" - 1"},{name:"first",val:n+" === 0"},{name:"last",val:n+" === "+r+" - 1"},{name:"length",val:r}].forEach((function(e){i._emitLine('frame.set("loop.'+e.name+'", '+e.val+");")}))},i.compileFor=function(e,t){var n=this,r=this._tmpid(),i=this._tmpid(),s=this._tmpid();if(t=t.push(),this._emitLine("frame = frame.push();"),this._emit("var "+s+" = "),this._compileExpression(e.arr,t),this._emitLine(";"),this._emit("if("+s+") {"),this._emitLine(s+" = runtime.fromIterator("+s+");"),e.name instanceof hr.Array){this._emitLine("var "+r+";"),this._emitLine("if(runtime.isArray("+s+")) {"),this._emitLine("var "+i+" = "+s+".length;"),this._emitLine("for("+r+"=0; "+r+" < "+s+".length; "+r+"++) {"),e.name.children.forEach((function(i,a){var o=n._tmpid();n._emitLine("var "+o+" = "+s+"["+r+"]["+a+"];"),n._emitLine('frame.set("'+i+'", '+s+"["+r+"]["+a+"]);"),t.set(e.name.children[a].value,o)})),this._emitLoopBindings(e,s,r,i),this._withScopedSyntax((function(){n.compile(e.body,t)})),this._emitLine("}"),this._emitLine("} else {");var a=e.name.children,o=a[0],c=a[1],l=this._tmpid(),h=this._tmpid();t.set(o.value,l),t.set(c.value,h),this._emitLine(r+" = -1;"),this._emitLine("var "+i+" = runtime.keys("+s+").length;"),this._emitLine("for(var "+l+" in "+s+") {"),this._emitLine(r+"++;"),this._emitLine("var "+h+" = "+s+"["+l+"];"),this._emitLine('frame.set("'+o.value+'", '+l+");"),this._emitLine('frame.set("'+c.value+'", '+h+");"),this._emitLoopBindings(e,s,r,i),this._withScopedSyntax((function(){n.compile(e.body,t)})),this._emitLine("}"),this._emitLine("}")}else{var u=this._tmpid();t.set(e.name.value,u),this._emitLine("var "+i+" = "+s+".length;"),this._emitLine("for(var "+r+"=0; "+r+" < "+s+".length; "+r+"++) {"),this._emitLine("var "+u+" = "+s+"["+r+"];"),this._emitLine('frame.set("'+e.name.value+'", '+u+");"),this._emitLoopBindings(e,s,r,i),this._withScopedSyntax((function(){n.compile(e.body,t)})),this._emitLine("}")}this._emitLine("}"),e.else_&&(this._emitLine("if (!"+i+") {"),this.compile(e.else_,t),this._emitLine("}")),this._emitLine("frame = frame.pop();")},i._compileAsyncLoop=function(e,t,n){var r=this,i=this._tmpid(),s=this._tmpid(),a=this._tmpid(),o=n?"asyncAll":"asyncEach";if(t=t.push(),this._emitLine("frame = frame.push();"),this._emit("var "+a+" = runtime.fromIterator("),this._compileExpression(e.arr,t),this._emitLine(");"),e.name instanceof hr.Array){var c=e.name.children.length;this._emit("runtime."+o+"("+a+", "+c+", function("),e.name.children.forEach((function(e){r._emit(e.value+",")})),this._emit(i+","+s+",next) {"),e.name.children.forEach((function(e){var n=e.value;t.set(n,n),r._emitLine('frame.set("'+n+'", '+n+");")}))}else{var l=e.name.value;this._emitLine("runtime."+o+"("+a+", 1, function("+l+", "+i+", "+s+",next) {"),this._emitLine('frame.set("'+l+'", '+l+");"),t.set(l,l)}this._emitLoopBindings(e,a,i,s),this._withScopedSyntax((function(){var s;n&&(s=r._pushBuffer()),r.compile(e.body,t),r._emitLine("next("+i+(s?","+s:"")+");"),n&&r._popBuffer()}));var h=this._tmpid();this._emitLine("}, "+this._makeCallback(h)),this._addScopeLevel(),n&&this._emitLine(this.buffer+" += "+h+";"),e.else_&&(this._emitLine("if (!"+a+".length) {"),this.compile(e.else_,t),this._emitLine("}")),this._emitLine("frame = frame.pop();")},i.compileAsyncEach=function(e,t){this._compileAsyncLoop(e,t)},i.compileAsyncAll=function(e,t){this._compileAsyncLoop(e,t,!0)},i._compileMacro=function(e,t){var n=this,r=[],i=null,s="macro_"+this._tmpid(),a=void 0!==t;e.args.children.forEach((function(t,s){s===e.args.children.length-1&&t instanceof hr.Dict?i=t:(n.assertType(t,hr.Symbol),r.push(t))}));var o,c=[].concat(r.map((function(e){return"l_"+e.value})),["kwargs"]),l=r.map((function(e){return'"'+e.value+'"'})),h=(i&&i.children||[]).map((function(e){return'"'+e.key.value+'"'}));o=a?t.push(!0):new Rr,this._emitLines("var "+s+" = runtime.makeMacro(","["+l.join(", ")+"], ","["+h.join(", ")+"], ","function ("+c.join(", ")+") {","var callerFrame = frame;","frame = "+(a?"frame.push(true);":"new runtime.Frame();"),"kwargs = kwargs || {};",'if (Object.prototype.hasOwnProperty.call(kwargs, "caller")) {','frame.set("caller", kwargs.caller); }'),r.forEach((function(e){n._emitLine('frame.set("'+e.value+'", l_'+e.value+");"),o.set(e.value,"l_"+e.value)})),i&&i.children.forEach((function(e){var t=e.key.value;n._emit('frame.set("'+t+'", '),n._emit('Object.prototype.hasOwnProperty.call(kwargs, "'+t+'")'),n._emit(' ? kwargs["'+t+'"] : '),n._compileExpression(e.value,o),n._emit(");")}));var u=this._pushBuffer();return this._withScopedSyntax((function(){n.compile(e.body,o)})),this._emitLine("frame = "+(a?"frame.pop();":"callerFrame;")),this._emitLine("return new runtime.SafeString("+u+");"),this._emitLine("});"),this._popBuffer(),s},i.compileMacro=function(e,t){var n=this._compileMacro(e),r=e.name.value;t.set(r,n),t.parent?this._emitLine('frame.set("'+r+'", '+n+");"):("_"!==e.name.value.charAt(0)&&this._emitLine('context.addExport("'+r+'");'),this._emitLine('context.setVariable("'+r+'", '+n+");"))},i.compileCaller=function(e,t){this._emit("(function (){");var n=this._compileMacro(e,t);this._emit("return "+n+";})()")},i._compileGetTemplate=function(e,t,n,r){var i=this._tmpid(),s=this._templateName(),a=this._makeCallback(i),o=n?"true":"false",c=r?"true":"false";return this._emit("env.getTemplate("),this._compileExpression(e.template,t),this._emitLine(", "+o+", "+s+", "+c+", "+a),i},i.compileImport=function(e,t){var n=e.target.value,r=this._compileGetTemplate(e,t,!1,!1);this._addScopeLevel(),this._emitLine(r+".getExported("+(e.withContext?"context.getVariables(), frame, ":"")+this._makeCallback(r)),this._addScopeLevel(),t.set(n,r),t.parent?this._emitLine('frame.set("'+n+'", '+r+");"):this._emitLine('context.setVariable("'+n+'", '+r+");")},i.compileFromImport=function(e,t){var n=this,r=this._compileGetTemplate(e,t,!1,!1);this._addScopeLevel(),this._emitLine(r+".getExported("+(e.withContext?"context.getVariables(), frame, ":"")+this._makeCallback(r)),this._addScopeLevel(),e.names.children.forEach((function(e){var i,s,a=n._tmpid();e instanceof hr.Pair?(i=e.key.value,s=e.value.value):s=i=e.value,n._emitLine("if(Object.prototype.hasOwnProperty.call("+r+', "'+i+'")) {'),n._emitLine("var "+a+" = "+r+"."+i+";"),n._emitLine("} else {"),n._emitLine("cb(new Error(\"cannot import '"+i+"'\")); return;"),n._emitLine("}"),t.set(s,a),t.parent?n._emitLine('frame.set("'+s+'", '+a+");"):n._emitLine('context.setVariable("'+s+'", '+a+");")}))},i.compileBlock=function(e){var t=this._tmpid();this.inBlock||this._emit('(parentTemplate ? function(e, c, f, r, cb) { cb(""); } : '),this._emit('context.getBlock("'+e.name.value+'")'),this.inBlock||this._emit(")"),this._emitLine("(env, context, frame, runtime, "+this._makeCallback(t)),this._emitLine(this.buffer+" += "+t+";"),this._addScopeLevel()},i.compileSuper=function(e,t){var n=e.blockName.value,r=e.symbol.value,i=this._makeCallback(r);this._emitLine('context.getSuper(env, "'+n+'", b_'+n+", frame, runtime, "+i),this._emitLine(r+" = runtime.markSafe("+r+");"),this._addScopeLevel(),t.set(r,r)},i.compileExtends=function(e,t){var n=this._tmpid(),r=this._compileGetTemplate(e,t,!0,!1);this._emitLine("parentTemplate = "+r),this._emitLine("for(var "+n+" in parentTemplate.blocks) {"),this._emitLine("context.addBlock("+n+", parentTemplate.blocks["+n+"]);"),this._emitLine("}"),this._addScopeLevel()},i.compileInclude=function(e,t){this._emitLine("var tasks = [];"),this._emitLine("tasks.push("),this._emitLine("function(callback) {");var n=this._compileGetTemplate(e,t,!1,e.ignoreMissing);this._emitLine("callback(null,"+n+");});"),this._emitLine("});");var r=this._tmpid();this._emitLine("tasks.push("),this._emitLine("function(template, callback){"),this._emitLine("template.render(context.getVariables(), frame, "+this._makeCallback(r)),this._emitLine("callback(null,"+r+");});"),this._emitLine("});"),this._emitLine("tasks.push("),this._emitLine("function(result, callback){"),this._emitLine(this.buffer+" += result;"),this._emitLine("callback(null);"),this._emitLine("});"),this._emitLine("env.waterfall(tasks, function(){"),this._addScopeLevel()},i.compileTemplateData=function(e,t){this.compileLiteral(e,t)},i.compileCapture=function(e,t){var n=this,r=this.buffer;this.buffer="output",this._emitLine("(function() {"),this._emitLine('var output = "";'),this._withScopedSyntax((function(){n.compile(e.body,t)})),this._emitLine("return output;"),this._emitLine("})()"),this.buffer=r},i.compileOutput=function(e,t){var n=this;e.children.forEach((function(r){r instanceof hr.TemplateData?r.value&&(n._emit(n.buffer+" += "),n.compileLiteral(r,t),n._emitLine(";")):(n._emit(n.buffer+" += runtime.suppressValue("),n.throwOnUndefined&&n._emit("runtime.ensureDefined("),n.compile(r,t),n.throwOnUndefined&&n._emit(","+e.lineno+","+e.colno+")"),n._emit(", env.opts.autoescape);\n"))}))},i.compileRoot=function(e,t){var n=this;t&&this.fail("compileRoot: root node can't have frame"),t=new Rr,this._emitFuncBegin(e,"root"),this._emitLine("var parentTemplate = null;"),this._compileChildren(e,t),this._emitLine("if(parentTemplate) {"),this._emitLine("parentTemplate.rootRenderFunc(env, context, frame, runtime, cb);"),this._emitLine("} else {"),this._emitLine("cb(null, "+this.buffer+");"),this._emitLine("}"),this._emitFuncEnd(!0),this.inBlock=!0;var r=[],i=e.findAll(hr.Block);i.forEach((function(e,t){var i=e.name.value;if(-1!==r.indexOf(i))throw new Error('Block "'+i+'" defined more than once.');r.push(i),n._emitFuncBegin(e,"b_"+i);var s=new Rr;n._emitLine("var frame = frame.push(true);"),n.compile(e.body,s),n._emitFuncEnd()})),this._emitLine("return {"),i.forEach((function(e,t){var r="b_"+e.name.value;n._emitLine(r+": "+r+",")})),this._emitLine("root: root\n};")},i.compile=function(e,t){var n=this["compile"+e.typename];n?n.call(this,e,t):this.fail("compile: Cannot compile node: "+e.typename,e.lineno,e.colno)},i.getCode=function(){return this.codebuf.join("")},r}(en.Obj),xr={compile:function(e,t,n,r,i){void 0===i&&(i={});var s=new Pr(r,i.throwOnUndefined),a=(n||[]).map((function(e){return e.preprocess})).filter((function(e){return!!e})).reduce((function(e,t){return t(e)}),e);return s.compile(Nr.transform(fr.parse(a,n,i),t,r)),s.getCode()},Compiler:Pr},wr=Ke((function(e){var t=e.exports={};function n(e,t){return null==e||!1===e?t:e}function r(e){return e!=e}function i(e){var t=(e=n(e,"")).toLowerCase();return kr.copySafeness(e,t.charAt(0).toUpperCase()+t.slice(1))}function s(e){if(je.isString(e))return e.split("");if(je.isObject(e))return je._entries(e||{}).map((function(e){return{key:e[0],value:e[1]}}));if(je.isArray(e))return e;throw new je.TemplateError("list filter: type not iterable")}function a(e){return function(t,n,r){void 0===n&&(n="truthy");var i=this,s=i.env.getTest(n);return je.toArray(t).filter((function(t){return s.call(i,t,r)===e}))}}function o(e){return kr.copySafeness(e,e.replace(/^\s*|\s*$/g,""))}t.abs=Math.abs,t.batch=function(e,t,n){var r,i=[],s=[];for(r=0;r=t)return e;var r=t-e.length,i=je.repeat(" ",r/2-r%2),s=je.repeat(" ",r/2);return kr.copySafeness(e,i+e+s)},t.default=function(e,t,n){return n?e||t:void 0!==e?e:t},t.dictsort=function(e,t,n){if(!je.isObject(e))throw new je.TemplateError("dictsort filter: val must be an object");var r,i=[];for(var s in e)i.push([s,e[s]]);if(void 0===n||"key"===n)r=0;else{if("value"!==n)throw new je.TemplateError("dictsort filter: You can only sort by either key or value");r=1}return i.sort((function(e,n){var i=e[r],s=n[r];return t||(je.isString(i)&&(i=i.toUpperCase()),je.isString(s)&&(s=s.toUpperCase())),i>s?1:i===s?0:-1})),i},t.dump=function(e,t){return JSON.stringify(e,null,t)},t.escape=function(e){return e instanceof kr.SafeString?e:(e=null==e?"":e,kr.markSafe(je.escape(e.toString())))},t.safe=function(e){return e instanceof kr.SafeString?e:(e=null==e?"":e,kr.markSafe(e.toString()))},t.first=function(e){return e[0]},t.forceescape=function(e){return e=null==e?"":e,kr.markSafe(je.escape(e.toString()))},t.groupby=function(e,t){return je.groupBy(e,t,this.env.opts.throwOnUndefined)},t.indent=function(e,t,r){if(""===(e=n(e,"")))return"";t=t||4;var i=e.split("\n"),s=je.repeat(" ",t),a=i.map((function(e,t){return 0!==t||r?""+s+e:e})).join("\n");return kr.copySafeness(e,a)},t.join=function(e,t,n){return t=t||"",n&&(e=je.map(e,(function(e){return e[n]}))),e.join(t)},t.last=function(e){return e[e.length-1]},t.length=function(e){var t=n(e,"");return void 0!==t?"function"==typeof Map&&t instanceof Map||"function"==typeof Set&&t instanceof Set?t.size:!je.isObject(t)||t instanceof kr.SafeString?t.length:je.keys(t).length:0},t.list=s,t.lower=function(e){return(e=n(e,"")).toLowerCase()},t.nl2br=function(e){return null==e?"":kr.copySafeness(e,e.replace(/\r\n|\n/g,"
\n"))},t.random=function(e){return e[Math.floor(Math.random()*e.length)]},t.reject=a(!1),t.rejectattr=function(e,t){return e.filter((function(e){return!e[t]}))},t.select=a(!0),t.selectattr=function(e,t){return e.filter((function(e){return!!e[t]}))},t.replace=function(e,t,n,r){var i=e;if(t instanceof RegExp)return e.replace(t,n);void 0===r&&(r=-1);var s="";if("number"==typeof t)t=""+t;else if("string"!=typeof t)return e;if("number"==typeof e&&(e=""+e),"string"!=typeof e&&!(e instanceof kr.SafeString))return e;if(""===t)return s=n+e.split("").join(n)+n,kr.copySafeness(e,s);var a=e.indexOf(t);if(0===r||-1===a)return e;for(var o=0,c=0;a>-1&&(-1===r||c=i&&h.push(n),s.push(h)}return s},t.sum=function(e,t,n){return void 0===n&&(n=0),t&&(e=je.map(e,(function(e){return e[t]}))),n+e.reduce((function(e,t){return e+t}),0)},t.sort=kr.makeMacro(["value","reverse","case_sensitive","attribute"],[],(function(e,t,n,r){var i=this,s=je.map(e,(function(e){return e})),a=je.getAttrGetter(r);return s.sort((function(e,s){var o=r?a(e):e,c=r?a(s):s;if(i.env.opts.throwOnUndefined&&r&&(void 0===o||void 0===c))throw new TypeError('sort: attribute "'+r+'" resolved to undefined');return!n&&je.isString(o)&&je.isString(c)&&(o=o.toLowerCase(),c=c.toLowerCase()),oc?t?-1:1:0})),s})),t.string=function(e){return kr.copySafeness(e,e)},t.striptags=function(e,t){var r=o((e=n(e,"")).replace(/<\/?([a-z][a-z0-9]*)\b[^>]*>|/gi,"")),i="";return i=t?r.replace(/^ +| +$/gm,"").replace(/ +/g," ").replace(/(\r\n)/g,"\n").replace(/\n\n\n+/g,"\n\n"):r.replace(/\s+/gi," "),kr.copySafeness(e,i)},t.title=function(e){var t=(e=n(e,"")).split(" ").map((function(e){return i(e)}));return kr.copySafeness(e,t.join(" "))},t.trim=o,t.truncate=function(e,t,r,i){var s=e;if(t=t||255,(e=n(e,"")).length<=t)return e;if(r)e=e.substring(0,t);else{var a=e.lastIndexOf(" ",t);-1===a&&(a=t),e=e.substring(0,a)}return e+=null!=i?i:"...",kr.copySafeness(s,e)},t.upper=function(e){return(e=n(e,"")).toUpperCase()},t.urlencode=function(e){var t=encodeURIComponent;return je.isString(e)?t(e):(je.isArray(e)?e:je._entries(e)).map((function(e){var n=e[0],r=e[1];return t(n)+"="+t(r)})).join("&")};var c=/^(?:\(|<|<)?(.*?)(?:\.|,|\)|\n|>)?$/,l=/^[\w.!#$%&'*+\-\/=?\^`{|}~]+@[a-z\d\-]+(\.[a-z\d\-]+)+$/i,h=/^https?:\/\/.*$/,u=/^www\./,p=/\.(?:org|net|com)(?:\:|\/|$)/;t.urlize=function(e,t,n){r(t)&&(t=1/0);var i=!0===n?' rel="nofollow"':"";return e.split(/(\s+)/).filter((function(e){return e&&e.length})).map((function(e){var n=e.match(c),r=n?n[1]:e,s=r.substr(0,t);return h.test(r)?'
"+s+"":u.test(r)?'"+s+"":l.test(r)?''+r+"":p.test(r)?'"+s+"":e})).join("")},t.wordcount=function(e){var t=(e=n(e,""))?e.match(/\w+/g):null;return t?t.length:null},t.float=function(e,t){var n=parseFloat(e);return r(n)?t:n};var f=kr.makeMacro(["value","default","base"],[],(function(e,t,n){void 0===n&&(n=10);var i=parseInt(e,n);return r(i)?t:i}));t.int=f,t.d=t.default,t.e=t.escape})),Br={};function Fr(e,t){for(var n=0,r=e.length-1;r>=0;r--){var i=e[r];"."===i?e.splice(r,1):".."===i?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n--;n)e.unshift("..");return e}var Ur=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,Hr=function(e){return Ur.exec(e).slice(1)};function Gr(){for(var e="",t=!1,n=arguments.length-1;n>=-1&&!t;n--){var r=n>=0?arguments[n]:"/";if("string"!=typeof r)throw new TypeError("Arguments to path.resolve must be strings");r&&(e=r+"/"+e,t="/"===r.charAt(0))}return(t?"/":"")+(e=Fr(jr(e.split("/"),(function(e){return!!e})),!t).join("/"))||"."}function Yr(e){var t=qr(e),n="/"===Vr(e,-1);return(e=Fr(jr(e.split("/"),(function(e){return!!e})),!t).join("/"))||t||(e="."),e&&n&&(e+="/"),(t?"/":"")+e}function qr(e){return"/"===e.charAt(0)}var Kr={extname:function(e){return Hr(e)[3]},basename:function(e,t){var n=Hr(e)[2];return t&&n.substr(-1*t.length)===t&&(n=n.substr(0,n.length-t.length)),n},dirname:function(e){var t=Hr(e),n=t[0],r=t[1];return n||r?(r&&(r=r.substr(0,r.length-1)),n+r):"."},sep:"/",delimiter:":",relative:function(e,t){function n(e){for(var t=0;t=0&&""===e[n];n--);return t>n?[]:e.slice(t,n-t+1)}e=Gr(e).substr(1),t=Gr(t).substr(1);for(var r=n(e.split("/")),i=n(t.split("/")),s=Math.min(r.length,i.length),a=s,o=0;o=t},t.greaterthan=function(e,t){return e>t},t.gt=t.greaterthan,t.le=function(e,t){return e<=t},t.lessthan=function(e,t){return e=e.length&&(t=0),this.current=e[t],this.current}}}ni.callable,ni.defined,ni.divisibleby,ni.escaped,ni.equalto,ni.eq,ni.sameas,ni.even,ni.falsy,ni.ge,ni.greaterthan,ni.gt,ni.le,ni.lessthan,ni.lt,ni.lower,ni.ne,ni.number,ni.odd,ni.string,ni.truthy,ni.undefined,ni.upper,ni.iterable,ni.mapping;var ii=function(){return{range:function(e,t,n){void 0===t?(t=e,e=0,n=1):n||(n=1);var r=[];if(n>0)for(var i=e;it;s+=n)r.push(s);return r},cycler:function(){return ri(Array.prototype.slice.call(arguments))},joiner:function(e){return function(e){e=e||",";var t=!0;return function(){var n=t?"":e;return t=!1,n}}(e)}}};function si(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,ai(e,t)}function ai(e,t){return ai=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},ai(e,t)}var oi=ti.FileSystemLoader,ci=ti.WebLoader,li=ti.PrecompiledLoader,hi=en.Obj,ui=en.EmitterObj,pi=kr.handleError,fi=kr.Frame;function di(e,t,n){Gt((function(){e(t,n)}))}var Ei={type:"code",obj:{root:function(e,t,n,r,i){try{i(null,"")}catch(e){i(pi(e,null,null))}}}},mi=function(e){function t(){return e.apply(this,arguments)||this}si(t,e);var n=t.prototype;return n.init=function(e,t){var n=this;t=this.opts=t||{},this.opts.dev=!!t.dev,this.opts.autoescape=null==t.autoescape||t.autoescape,this.opts.throwOnUndefined=!!t.throwOnUndefined,this.opts.trimBlocks=!!t.trimBlocks,this.opts.lstripBlocks=!!t.lstripBlocks,this.loaders=[],e?this.loaders=je.isArray(e)?e:[e]:oi?this.loaders=[new oi("views")]:ci&&(this.loaders=[new ci("/views")]),"undefined"!=typeof window&&window.jinja2Precompiled&&this.loaders.unshift(new li(window.jinja2Precompiled)),this._initLoaders(),this.globals=ii(),this.filters={},this.tests={},this.asyncFilters=[],this.extensions={},this.extensionsList=[],je._entries(wr).forEach((function(e){var t=e[0],r=e[1];return n.addFilter(t,r)})),je._entries(ni).forEach((function(e){var t=e[0],r=e[1];return n.addTest(t,r)}))},n._initLoaders=function(){var e=this;this.loaders.forEach((function(t){t.cache={},"function"==typeof t.on&&(t.on("update",(function(n,r){t.cache[n]=null,e.emit("update",n,r,t)})),t.on("load",(function(n,r){e.emit("load",n,r,t)})))}))},n.invalidateCache=function(){this.loaders.forEach((function(e){e.cache={}}))},n.addExtension=function(e,t){return t.__name=e,this.extensions[e]=t,this.extensionsList.push(t),this},n.removeExtension=function(e){var t=this.getExtension(e);t&&(this.extensionsList=je.without(this.extensionsList,t),delete this.extensions[e])},n.getExtension=function(e){return this.extensions[e]},n.hasExtension=function(e){return!!this.extensions[e]},n.addGlobal=function(e,t){return this.globals[e]=t,this},n.getGlobal=function(e){if(void 0===this.globals[e])throw new Error("global not found: "+e);return this.globals[e]},n.addFilter=function(e,t,n){var r=t;return n&&this.asyncFilters.push(e),this.filters[e]=r,this},n.getFilter=function(e){if(!this.filters[e])throw new Error("filter not found: "+e);return this.filters[e]},n.addTest=function(e,t){return this.tests[e]=t,this},n.getTest=function(e){if(!this.tests[e])throw new Error("test not found: "+e);return this.tests[e]},n.resolveTemplate=function(e,t,n){return!(!e.isRelative||!t)&&e.isRelative(n)&&e.resolve?e.resolve(t,n):n},n.getTemplate=function(e,t,n,r,i){var s,a=this,o=this,c=null;if(e&&e.raw&&(e=e.raw),je.isFunction(n)&&(i=n,n=null,t=t||!1),je.isFunction(t)&&(i=t,t=!1),e instanceof _i)c=e;else{if("string"!=typeof e)throw new Error("template names must be a string: "+e);for(var l=0;le.length-3)return!1;var n=e.charCodeAt(t+1);return(n>=Pi.LowerA&&n<=Pi.LowerZ||n>=Pi.UpperA&&n<=Pi.UpperZ||n===Pi.Exclamation)&&e.includes(">",t+2)}!function(e){e[e.LowerA=97]="LowerA",e[e.LowerZ=122]="LowerZ",e[e.UpperA=65]="UpperA",e[e.UpperZ=90]="UpperZ",e[e.Exclamation=33]="Exclamation"}(Pi||(Pi={}));var Hi=Object.prototype.hasOwnProperty,Gi=/\s+/,Yi={null:null,true:!0,false:!1},qi=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,Ki=/^{[^]*}$|^\[[^]*]$/;function ji(e,t,n){var r;if(e&&I(e))return null!==(r=e.attribs)&&void 0!==r||(e.attribs={}),t?Hi.call(e.attribs,t)?!n&&qi.test(t)?t:e.attribs[t]:"option"===e.name&&"value"===t?Li(e.children):"input"!==e.name||"radio"!==e.attribs.type&&"checkbox"!==e.attribs.type||"value"!==t?void 0:"on":e.attribs}function Vi(e,t,n){null===n?zi(e,t):e.attribs[t]="".concat(n)}function Wi(e,t,n){return t in e?e[t]:!n&&qi.test(t)?void 0!==ji(e,t,!1):ji(e,t,n)}function Qi(e,t,n,r){t in e?e[t]=n:Vi(e,t,!r&&qi.test(t)?n?"":null:"".concat(n))}function Xi(e,t,n){var r,i=e;null!==(r=i.data)&&void 0!==r||(i.data={}),"object"==typeof t?Object.assign(i.data,t):"string"==typeof t&&void 0!==n&&(i.data[t]=n)}function $i(e,t){var n,r,i,s;null==t?r=(n=Object.keys(e.attribs).filter((function(e){return e.startsWith("data-")}))).map((function(e){return e.slice("data-".length).replace(/[_.-](\w|$)/g,(function(e,t){return t.toUpperCase()}))})):(n=["data-"+(s=t,s.replace(/[A-Z]/g,"-$&").toLowerCase())],r=[t]);for(var a=0;a1?this:ji(this[0],e,this.options.xmlMode)},prop:function(e,t){var n,r=this;if("string"==typeof e&&void 0===t){var i=this[0];if(!i||!I(i))return;switch(e){case"style":var s=this.css(),a=Object.keys(s);return a.forEach((function(e,t){s[t]=e})),s.length=a.length,s;case"tagName":case"nodeName":return i.name.toUpperCase();case"href":case"src":var o=null===(n=i.attribs)||void 0===n?void 0:n[e];return"undefined"==typeof URL||("href"!==e||"a"!==i.tagName&&"link"!==i.name)&&("src"!==e||"img"!==i.tagName&&"iframe"!==i.tagName&&"audio"!==i.tagName&&"video"!==i.tagName&&"source"!==i.tagName)||void 0===o||!this.options.baseURI?o:new URL(o,this.options.baseURI).href;case"innerText":return J(i);case"textContent":return z(i);case"outerHTML":return this.clone().wrap("").parent().html();case"innerHTML":return this.html();default:return Wi(i,e,this.options.xmlMode)}}if("object"==typeof e||void 0!==t){if("function"==typeof t){if("object"==typeof e)throw new Error("Bad combination of arguments.");return Bi(this,(function(n,i){I(n)&&Qi(n,e,t.call(n,i,Wi(n,e,r.options.xmlMode)),r.options.xmlMode)}))}return Bi(this,(function(n){I(n)&&("object"==typeof e?Object.keys(e).forEach((function(t){var i=e[t];Qi(n,t,i,r.options.xmlMode)})):Qi(n,e,t,r.options.xmlMode))}))}},data:function(e,t){var n,r=this[0];if(r&&I(r)){var i=r;return null!==(n=i.data)&&void 0!==n||(i.data={}),e?"object"==typeof e||void 0!==t?(Bi(this,(function(n){I(n)&&("object"==typeof e?Xi(n,e):Xi(n,e,t))})),this):Hi.call(i.data,e)?i.data[e]:$i(i,e):$i(i)}},val:function(e){var t=0===arguments.length,n=this[0];if(!n||!I(n))return t?void 0:this;switch(n.name){case"textarea":return this.text(e);case"select":var r=this.find("option:selected");if(!t){if(null==this.attr("multiple")&&"object"==typeof e)return this;this.find("option").removeAttr("selected");for(var i="object"!=typeof e?[e]:e,s=0;s-1;){var i=r+e.length;if((0===r||Gi.test(n[r-1]))&&(i===n.length||Gi.test(n[i])))return!0}return!1}))},addClass:function e(t){if("function"==typeof t)return Bi(this,(function(n,r){if(I(n)){var i=n.attribs.class||"";e.call([n],t.call(n,r,i))}}));if(!t||"string"!=typeof t)return this;for(var n=t.split(Gi),r=this.length,i=0;i=0&&(t.splice(o,1),s=!0,a--)}s&&(e.attribs.class=t.join(" "))}}))},toggleClass:function e(t,n){if("function"==typeof t)return Bi(this,(function(r,i){I(r)&&e.call([r],t.call(r,i,r.attribs.class||"",n),n)}));if(!t||"string"!=typeof t)return this;for(var r=t.split(Gi),i=r.length,s="boolean"==typeof n?n?1:-1:0,a=this.length,o=0;o=0&&u<0?l.push(r[h]):s<=0&&u>=0&&l.splice(u,1)}c.attribs.class=l.join(" ")}}return this}});!function(e){e.Attribute="attribute",e.Pseudo="pseudo",e.PseudoElement="pseudo-element",e.Tag="tag",e.Universal="universal",e.Adjacent="adjacent",e.Child="child",e.Descendant="descendant",e.Parent="parent",e.Sibling="sibling",e.ColumnCombinator="column-combinator"}(Zi||(Zi={})),function(e){e.Any="any",e.Element="element",e.End="end",e.Equals="equals",e.Exists="exists",e.Hyphen="hyphen",e.Not="not",e.Start="start"}(es||(es={}));const ns=/^[^\\#]?(?:\\(?:[\da-f]{1,6}\s?|.)|[\w\-\u00b0-\uFFFF])+/,rs=/\\([\da-f]{1,6}\s?|(\s)|.)/gi,is=new Map([[126,es.Element],[94,es.Start],[36,es.End],[42,es.Any],[33,es.Not],[124,es.Hyphen]]),ss=new Set(["has","not","matches","is","where","host","host-context"]);function as(e){switch(e.type){case Zi.Adjacent:case Zi.Child:case Zi.Descendant:case Zi.Parent:case Zi.Sibling:case Zi.ColumnCombinator:return!0;default:return!1}}const os=new Set(["contains","icontains"]);function cs(e,t,n){const r=parseInt(t,16)-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)}function ls(e){return e.replace(rs,cs)}function hs(e){return 39===e||34===e}function us(e){return 32===e||9===e||10===e||12===e||13===e}function ps(e){const t=[],n=fs(t,`${e}`,0);if(n0&&n0&&as(r[r.length-1]))throw new Error("Did not expect successive traversals.")}function l(e){r.length>0&&r[r.length-1].type===Zi.Descendant?r[r.length-1].type=e:(c(),r.push({type:e}))}function h(e,t){r.push({type:Zi.Attribute,name:e,action:t,value:i(1),namespace:null,ignoreCase:"quirks"})}function u(){if(r.length&&r[r.length-1].type===Zi.Descendant&&r.pop(),0===r.length)throw new Error("Empty sub-selector");e.push(r)}if(s(0),t.length===n)return n;e:for(;n=0&&r>=1)):e.type===Zi.Pseudo&&(e.data?"has"===e.name||"contains"===e.name?r=0:Array.isArray(e.data)?(r=Math.min(...e.data.map((e=>Math.min(...e.map(gs))))),r<0&&(r=0)):r=2:r=3),r}const Ns=/[-[\]{}()*+?.,\\^$|#\s]/g;function Cs(e){return e.replace(Ns,"\\$&")}const Is=new Set(["accept","accept-charset","align","alink","axis","bgcolor","charset","checked","clear","codetype","color","compact","declare","defer","dir","direction","disabled","enctype","face","frame","hreflang","http-equiv","lang","language","link","media","method","multiple","nohref","noresize","noshade","nowrap","readonly","rel","rev","rules","scope","scrolling","selected","shape","target","text","type","valign","valuetype","vlink"]);function Ss(e,t){return"boolean"==typeof e.ignoreCase?e.ignoreCase:"quirks"===e.ignoreCase?!!t.quirksMode:!t.xmlMode&&Is.has(e.name)}const bs={equals(e,t,n){const{adapter:r}=n,{name:i}=t;let{value:s}=t;return Ss(t,n)?(s=s.toLowerCase(),t=>{const n=r.getAttributeValue(t,i);return null!=n&&n.length===s.length&&n.toLowerCase()===s&&e(t)}):t=>r.getAttributeValue(t,i)===s&&e(t)},hyphen(e,t,n){const{adapter:r}=n,{name:i}=t;let{value:s}=t;const a=s.length;return Ss(t,n)?(s=s.toLowerCase(),function(t){const n=r.getAttributeValue(t,i);return null!=n&&(n.length===a||"-"===n.charAt(a))&&n.substr(0,a).toLowerCase()===s&&e(t)}):function(t){const n=r.getAttributeValue(t,i);return null!=n&&(n.length===a||"-"===n.charAt(a))&&n.substr(0,a)===s&&e(t)}},element(e,t,n){const{adapter:r}=n,{name:i,value:s}=t;if(/\s/.test(s))return ds.falseFunc;const a=new RegExp(`(?:^|\\s)${Cs(s)}(?:$|\\s)`,Ss(t,n)?"i":"");return function(t){const n=r.getAttributeValue(t,i);return null!=n&&n.length>=s.length&&a.test(n)&&e(t)}},exists:(e,{name:t},{adapter:n})=>r=>n.hasAttrib(r,t)&&e(r),start(e,t,n){const{adapter:r}=n,{name:i}=t;let{value:s}=t;const a=s.length;return 0===a?ds.falseFunc:Ss(t,n)?(s=s.toLowerCase(),t=>{const n=r.getAttributeValue(t,i);return null!=n&&n.length>=a&&n.substr(0,a).toLowerCase()===s&&e(t)}):t=>{var n;return!!(null===(n=r.getAttributeValue(t,i))||void 0===n?void 0:n.startsWith(s))&&e(t)}},end(e,t,n){const{adapter:r}=n,{name:i}=t;let{value:s}=t;const a=-s.length;return 0===a?ds.falseFunc:Ss(t,n)?(s=s.toLowerCase(),t=>{var n;return(null===(n=r.getAttributeValue(t,i))||void 0===n?void 0:n.substr(a).toLowerCase())===s&&e(t)}):t=>{var n;return!!(null===(n=r.getAttributeValue(t,i))||void 0===n?void 0:n.endsWith(s))&&e(t)}},any(e,t,n){const{adapter:r}=n,{name:i,value:s}=t;if(""===s)return ds.falseFunc;if(Ss(t,n)){const t=new RegExp(Cs(s),"i");return function(n){const a=r.getAttributeValue(n,i);return null!=a&&a.length>=s.length&&t.test(a)&&e(n)}}return t=>{var n;return!!(null===(n=r.getAttributeValue(t,i))||void 0===n?void 0:n.includes(s))&&e(t)}},not(e,t,n){const{adapter:r}=n,{name:i}=t;let{value:s}=t;return""===s?t=>!!r.getAttributeValue(t,i)&&e(t):Ss(t,n)?(s=s.toLowerCase(),t=>{const n=r.getAttributeValue(t,i);return(null==n||n.length!==s.length||n.toLowerCase()!==s)&&e(t)}):t=>r.getAttributeValue(t,i)!==s&&e(t)}};var Os=Ke((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.parse=void 0;var n=new Set([9,10,12,13,32]),r="0".charCodeAt(0),i="9".charCodeAt(0);t.parse=function(e){if("even"===(e=e.trim().toLowerCase()))return[2,0];if("odd"===e)return[2,1];var t=0,s=0,a=c(),o=l();if(t=r&&e.charCodeAt(t)<=i;)s=10*s+(e.charCodeAt(t)-r),t++;return t===n?null:s}function h(){for(;t=n};var r=Math.abs(t),i=(n%r+r)%r;return t>1?function(e){return e>=n&&e%r===i}:function(e){return e<=n&&e%r===i}}}));qe(ys),ys.compile;var Ls=Os,ks=ys,vs=Ke((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.compile=t.parse=void 0,Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return Ls.parse}}),Object.defineProperty(t,"compile",{enumerable:!0,get:function(){return ks.compile}}),t.default=function(e){return(0,ks.compile)((0,Ls.parse)(e))}})),Ds=qe(vs);function Rs(e,t){return n=>{const r=t.getParent(n);return null!=r&&t.isTag(r)&&e(n)}}vs.compile,vs.parse;const Ms={contains:(e,t,{adapter:n})=>function(r){return e(r)&&n.getText(r).includes(t)},icontains(e,t,{adapter:n}){const r=t.toLowerCase();return function(t){return e(t)&&n.getText(t).toLowerCase().includes(r)}},"nth-child"(e,t,{adapter:n,equals:r}){const i=Ds(t);return i===ds.falseFunc?ds.falseFunc:i===ds.trueFunc?Rs(e,n):function(t){const s=n.getSiblings(t);let a=0;for(let e=0;e=0&&!r(t,s[e]);e--)n.isTag(s[e])&&a++;return i(a)&&e(t)}},"nth-of-type"(e,t,{adapter:n,equals:r}){const i=Ds(t);return i===ds.falseFunc?ds.falseFunc:i===ds.trueFunc?Rs(e,n):function(t){const s=n.getSiblings(t);let a=0;for(let e=0;e=0;e--){const i=s[e];if(r(t,i))break;n.isTag(i)&&n.getName(i)===n.getName(t)&&a++}return i(a)&&e(t)}},root:(e,t,{adapter:n})=>t=>{const r=n.getParent(t);return(null==r||!n.isTag(r))&&e(t)},scope(e,t,n,r){const{equals:i}=n;return r&&0!==r.length?1===r.length?t=>i(r[0],t)&&e(t):t=>r.includes(t)&&e(t):Ms.root(e,t,n)},hover:Ps("isHovered"),visited:Ps("isVisited"),active:Ps("isActive")};function Ps(e){return function(t,n,{adapter:r}){const i=r[e];return"function"!=typeof i?ds.falseFunc:function(e){return i(e)&&t(e)}}}const xs={empty:(e,{adapter:t})=>!t.getChildren(e).some((e=>t.isTag(e)||""!==t.getText(e))),"first-child"(e,{adapter:t,equals:n}){if(t.prevElementSibling)return null==t.prevElementSibling(e);const r=t.getSiblings(e).find((e=>t.isTag(e)));return null!=r&&n(e,r)},"last-child"(e,{adapter:t,equals:n}){const r=t.getSiblings(e);for(let i=r.length-1;i>=0;i--){if(n(e,r[i]))return!0;if(t.isTag(r[i]))break}return!1},"first-of-type"(e,{adapter:t,equals:n}){const r=t.getSiblings(e),i=t.getName(e);for(let s=0;s=0;s--){const a=r[s];if(n(e,a))return!0;if(t.isTag(a)&&t.getName(a)===i)break}return!1},"only-of-type"(e,{adapter:t,equals:n}){const r=t.getName(e);return t.getSiblings(e).every((i=>n(e,i)||!t.isTag(i)||t.getName(i)!==r))},"only-child":(e,{adapter:t,equals:n})=>t.getSiblings(e).every((r=>n(e,r)||!t.isTag(r)))};function ws(e,t,n,r){if(null===n){if(e.length>r)throw new Error(`Pseudo-class :${t} requires an argument`)}else if(e.length===r)throw new Error(`Pseudo-class :${t} doesn't have any arguments`)}const Bs={"any-link":":is(a, area, link)[href]",link:":any-link:not(:visited)",disabled:":is(\n :is(button, input, select, textarea, optgroup, option)[disabled],\n optgroup[disabled] > option,\n fieldset[disabled]:not(fieldset[disabled] legend:first-of-type *)\n )",enabled:":not(:disabled)",checked:":is(:is(input[type=radio], input[type=checkbox])[checked], option:selected)",required:":is(input, select, textarea)[required]",optional:":is(input, select, textarea):not([required])",selected:"option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)",checkbox:"[type=checkbox]",file:"[type=file]",password:"[type=password]",radio:"[type=radio]",reset:"[type=reset]",image:"[type=image]",submit:"[type=submit]",parent:":not(:empty)",header:":is(h1, h2, h3, h4, h5, h6)",button:":is(button, input[type=button])",input:":is(input, textarea, select, button)",text:"input:is(:not([type!='']), [type=text])"},Fs={};function Us(e,t){const n=t.getSiblings(e);if(n.length<=1)return[];const r=n.indexOf(e);return r<0||r===n.length-1?[]:n.slice(r+1).filter(t.isTag)}function Hs(e){return{xmlMode:!!e.xmlMode,lowerCaseAttributeNames:!!e.lowerCaseAttributeNames,lowerCaseTags:!!e.lowerCaseTags,quirksMode:!!e.quirksMode,cacheResults:!!e.cacheResults,pseudos:e.pseudos,adapter:e.adapter,equals:e.equals}}const Gs=(e,t,n,r,i)=>{const s=i(t,Hs(n),r);return s===ds.trueFunc?e:s===ds.falseFunc?ds.falseFunc:t=>s(t)&&e(t)},Ys={is:Gs,matches:Gs,where:Gs,not(e,t,n,r,i){const s=i(t,Hs(n),r);return s===ds.falseFunc?e:s===ds.trueFunc?ds.falseFunc:t=>!s(t)&&e(t)},has(e,t,n,r,i){const{adapter:s}=n,a=Hs(n);a.relativeSelector=!0;const o=t.some((e=>e.some(Ts)))?[Fs]:void 0,c=i(t,a,o);if(c===ds.falseFunc)return ds.falseFunc;const l=function(e,t){return e===ds.falseFunc?ds.falseFunc:n=>t.isTag(n)&&e(n)}(c,s);if(o&&c!==ds.trueFunc){const{shouldTestNextSiblings:t=!1}=c;return n=>{if(!e(n))return!1;o[0]=n;const r=s.getChildren(n),i=t?[...r,...Us(n,s)]:r;return s.existsOne(l,i)}}return t=>e(t)&&s.existsOne(l,s.getChildren(t))}};function qs(e,t){const n=t.getParent(e);return n&&t.isTag(n)?n:null}function Ks(e,t,n,r,i){const{adapter:s,equals:a}=n;switch(t.type){case Zi.PseudoElement:throw new Error("Pseudo-elements are not supported by css-select");case Zi.ColumnCombinator:throw new Error("Column combinators are not yet supported by css-select");case Zi.Attribute:if(null!=t.namespace)throw new Error("Namespaced attributes are not yet supported by css-select");return n.xmlMode&&!n.lowerCaseAttributeNames||(t.name=t.name.toLowerCase()),bs[t.action](e,t,n);case Zi.Pseudo:return function(e,t,n,r,i){var s;const{name:a,data:o}=t;if(Array.isArray(o)){if(!(a in Ys))throw new Error(`Unknown pseudo-class :${a}(${o})`);return Ys[a](e,o,n,r,i)}const c=null===(s=n.pseudos)||void 0===s?void 0:s[a],l="string"==typeof c?c:Bs[a];if("string"==typeof l){if(null!=o)throw new Error(`Pseudo ${a} doesn't have any arguments`);const t=ps(l);return Ys.is(e,t,n,r,i)}if("function"==typeof c)return ws(c,a,o,1),t=>c(t,o)&&e(t);if(a in Ms)return Ms[a](e,o,n,r);if(a in xs){const t=xs[a];return ws(t,a,o,2),r=>t(r,n,o)&&e(r)}throw new Error(`Unknown pseudo-class :${a}`)}(e,t,n,r,i);case Zi.Tag:{if(null!=t.namespace)throw new Error("Namespaced tag names are not yet supported by css-select");let{name:r}=t;return n.xmlMode&&!n.lowerCaseTags||(r=r.toLowerCase()),function(t){return s.getName(t)===r&&e(t)}}case Zi.Descendant:{if(!1===n.cacheResults||"undefined"==typeof WeakSet)return function(t){let n=t;for(;n=qs(n,s);)if(e(n))return!0;return!1};const t=new WeakSet;return function(n){let r=n;for(;r=qs(r,s);)if(!t.has(r)){if(s.isTag(r)&&e(r))return!0;t.add(r)}return!1}}case"_flexibleDescendant":return function(t){let n=t;do{if(e(n))return!0}while(n=qs(n,s));return!1};case Zi.Parent:return function(t){return s.getChildren(t).some((t=>s.isTag(t)&&e(t)))};case Zi.Child:return function(t){const n=s.getParent(t);return null!=n&&s.isTag(n)&&e(n)};case Zi.Sibling:return function(t){const n=s.getSiblings(t);for(let r=0;re.some(js))))}const Vs={type:Zi.Descendant},Ws={type:"_flexibleDescendant"},Qs={type:Zi.Pseudo,name:"scope",data:null};function Xs(e,t,n){var r;e.forEach(As),n=null!==(r=t.context)&&void 0!==r?r:n;const i=Array.isArray(n),s=n&&(Array.isArray(n)?n:[n]);if(!1!==t.relativeSelector)!function(e,{adapter:t},n){const r=!!(null==n?void 0:n.every((e=>{const n=t.isTag(e)&&t.getParent(e);return e===Fs||n&&t.isTag(n)})));for(const t of e){if(t.length>0&&Ts(t[0])&&t[0].type!==Zi.Descendant);else{if(!r||t.some(js))continue;t.unshift(Vs)}t.unshift(Qs)}}(e,t,s);else if(e.some((e=>e.length>0&&Ts(e[0]))))throw new Error("Relative selectors are not allowed when the `relativeSelector` option is disabled");let a=!1;const o=e.map((e=>{if(e.length>=2){const[t,n]=e;t.type!==Zi.Pseudo||"scope"!==t.name||(i&&n.type===Zi.Descendant?e[1]=Ws:n.type!==Zi.Adjacent&&n.type!==Zi.Sibling||(a=!0))}return function(e,t,n){var r;return e.reduce(((e,r)=>e===ds.falseFunc?ds.falseFunc:Ks(e,r,t,n,Xs)),null!==(r=t.rootFunc)&&void 0!==r?r:ds.trueFunc)}(e,t,s)})).reduce($s,ds.falseFunc);return o.shouldTestNextSiblings=a,o}function $s(e,t){return t===ds.falseFunc||e===ds.trueFunc?e:e===ds.falseFunc||t===ds.trueFunc?t:function(n){return e(n)||t(n)}}const zs=(e,t)=>e===t,Js={adapter:Se,equals:zs};const Zs=(ea=Xs,function(e,t,n){const r=function(e){var t,n,r,i;const s=null!=e?e:Js;return null!==(t=s.adapter)&&void 0!==t||(s.adapter=Se),null!==(n=s.equals)&&void 0!==n||(s.equals=null!==(i=null===(r=s.adapter)||void 0===r?void 0:r.equals)&&void 0!==i?i:zs),s}(t);return ea(e,r,n)});var ea;function ta(e,t,n=!1){return n&&(e=function(e,t){const n=Array.isArray(e)?e.slice(0):[e],r=n.length;for(let e=0;ee.some(ra))))}function ia(e){const t=[],n=[];for(const r of e)r.some(ra)?t.push(r):n.push(r);return[n,t]}const sa={type:Zi.Universal,namespace:null},aa={type:Zi.Pseudo,name:"scope",data:null};function oa(e,t,n={}){return ca([e],t,n)}function ca(e,t,n={}){if("function"==typeof t)return e.some(t);const[r,i]=ia(ps(t));return r.length>0&&e.some(Zs(r,n))||i.some((t=>ua(t,e,n).length>0))}function la(e,t,n={}){return ha(ps(e),t,n)}function ha(e,t,n){if(0===t.length)return[];const[r,i]=ia(e);let s;if(r.length){const e=Ea(t,r,n);if(0===i.length)return e;e.length&&(s=new Set(e))}for(let e=0;eI(e)&&!s.has(e))):t;if(0===a.length)break;const o=ua(r,t,n);if(o.length)if(s)o.forEach((e=>s.add(e)));else{if(e===i.length-1)return o;s=new Set(o)}}return void 0!==s?s.size===t.length?t:t.filter((e=>s.has(e))):[]}function ua(e,t,n){var r;if(e.some(as)){const i=null!==(r=n.root)&&void 0!==r?r:function(e){for(;e.parent;)e=e.parent;return e}(t[0]),s={...n,context:t,relativeSelector:!1};return e.push(aa),pa(i,e,s,!0,t.length)}return pa(t,e,n,!1,t.length)}function pa(e,t,n,r,i){const s=t.findIndex(ra),a=t.slice(0,s),o=t[s],c=t.length-1===s?i:1/0,l=function(e,t,n){const r=null!=t?parseInt(t,10):NaN;switch(e){case"first":return 1;case"nth":case"eq":return isFinite(r)?r>=0?r+1:1/0:0;case"lt":return isFinite(r)?r>=0?Math.min(r,n):1/0:0;case"gt":return isFinite(r)?1/0:0;case"odd":return 2*n;case"even":return 2*n-1;case"last":case"not":return 1/0}}(o.name,o.data,c);if(0===l)return[];const h=(0!==a.length||Array.isArray(e)?0===a.length?(Array.isArray(e)?e:[e]).filter(I):r||a.some(as)?fa(e,[a],n,l):Ea(e,[a],n):Z(e).filter(I)).slice(0,l);let u=function(e,t,n,r){const i="string"==typeof n?parseInt(n,10):NaN;switch(e){case"first":case"lt":return t;case"last":return t.length>0?[t[t.length-1]]:t;case"nth":case"eq":return isFinite(i)&&Math.abs(i)t%2==0));case"odd":return t.filter(((e,t)=>t%2==1));case"not":{const e=new Set(ha(n,t,r));return t.filter((t=>!e.has(t)))}}}(o.name,h,o.data,n);if(0===u.length||t.length===s+1)return u;const p=t.slice(s+1),f=p.some(as);if(f){if(as(p[0])){const{type:e}=p[0];e!==Zi.Sibling&&e!==Zi.Adjacent||(u=ta(u,Se,!0)),p.unshift(sa)}n={...n,relativeSelector:!1,rootFunc:e=>u.includes(e)}}else n.rootFunc&&n.rootFunc!==Es&&(n={...n,rootFunc:Es});return p.some(ra)?pa(u,p,n,!1,i):f?fa(u,[p],n,i):Ea(u,[p],n)}function fa(e,t,n,r){return da(e,Zs(t,n,e),r)}function da(e,t,n=1/0){return ae((e=>I(e)&&t(e)),ta(e,Se,t.shouldTestNextSiblings),!0,n)}function Ea(e,t,n){const r=(Array.isArray(e)?e:[e]).filter(I);if(0===r.length)return r;const i=Zs(t,n);return i===Es?r:r.filter(i)}var ma=function(e,t,n){if(n||2===arguments.length)for(var r,i=0,s=t.length;i1&&s.length>1?n.reduce((function(e,t){return t(e)}),s):s)}}}var Aa=_a((function(e,t){for(var n,r=[],i=0;ipa(t,e,n,!0,r)));return i.length&&a.push(fa(t,i,n,r)),0===a.length?[]:1===a.length?a[0]:Ee(a.reduce(((e,t)=>[...e,...t])))}(e,i,s))},parent:Ia,parents:Sa,parentsUntil:ba,closest:function(e){var t,n=[];if(!e)return this._make(n);var r={xmlMode:this.options.xmlMode,root:null===(t=this._root)||void 0===t?void 0:t[0]},i="string"==typeof e?function(t){return oa(t,e,r)}:Pa(e);return Bi(this,(function(e){for(;e&&I(e);){if(i(e,0)){n.includes(e)||n.push(e);break}e=e.parent}})),this._make(n)},next:Oa,nextAll:ya,nextUntil:La,prev:ka,prevAll:va,prevUntil:Da,siblings:Ra,children:Ma,contents:function(){var e=this.toArray().reduce((function(e,t){return k(t)?e.concat(t.children):e}),[]);return this._make(e)},each:function(e){for(var t=0,n=this.length;t0})},first:function(){return this.length>1?this._make(this[0]):this},last:function(){return this.length>0?this._make(this[this.length-1]):this},eq:function(e){var t;return 0===(e=+e)&&this.length<=1?this:(e<0&&(e=this.length+e),this._make(null!==(t=this[e])&&void 0!==t?t:[]))},get:function(e){return null==e?this.toArray():this[e<0?this.length+e:e]},toArray:function(){return Array.prototype.slice.call(this)},index:function(e){var t,n;return null==e?(t=this.parent().children(),n=this[0]):"string"==typeof e?(t=this._make(e),n=this[0]):(t=this,n=wi(e)?e[0]:e),Array.prototype.indexOf.call(t,n)},slice:function(e,t){return this._make(Array.prototype.slice.call(this,e,t))},end:function(){var e;return null!==(e=this.prevObject)&&void 0!==e?e:this._make([])},add:function(e,t){var n=this._make(e,t),r=Ee(ma(ma([],this.get(),!0),n.get(),!0));return this._make(r)},addBack:function(e){return this.prevObject?this.add(e?this.prevObject.filter(e):this.prevObject):this}});function Ba(e,t){var n=Array.isArray(e)?e:[e];t?t.children=n:t=null;for(var r=0;r=e.length?null:e[t+n],h=0;h-1&&(p.children.splice(f,1),i===p&&t>f&&o[0]--)}u.parent=i,u.prev&&(u.prev.next=null!==(s=u.next)&&void 0!==s?s:null),u.next&&(u.next.prev=null!==(a=u.prev)&&void 0!==a?a:null),u.prev=0===h?c:r[h-1],u.next=h===r.length-1?l:r[h+1]}return c&&(c.next=r[0]),l&&(l.prev=r[r.length-1]),e.splice.apply(e,o)}var Ga=Ua((function(e,t,n){Ha(t,t.length,0,e,n)})),Ya=Ua((function(e,t,n){Ha(t,0,0,e,n)}));function qa(e){return function(t){for(var n=this.length-1,r=this.parents().last(),i=0;i0&&void 0!==t&&(n[t]+=";".concat(o))}else n[t=s.slice(0,a).trim()]=s.slice(a+1).trim()}return n}(e.attribs.style);if("string"==typeof t)return n[t];if(Array.isArray(t)){var r={};return t.forEach((function(e){null!=n[e]&&(r[e]=n[e])})),r}return n}}var Xa=Object.freeze({__proto__:null,css:function(e,t){return null!=e&&null!=t||"object"==typeof e&&!Array.isArray(e)?Bi(this,(function(n,r){I(n)&&Wa(n,e,t,r)})):0!==this.length?Qa(this[0],e):void 0}}),$a=/%20/g,za=/\r?\n/g;var Ja=Object.freeze({__proto__:null,serialize:function(){var e=this.serializeArray().map((function(e){return"".concat(encodeURIComponent(e.name),"=").concat(encodeURIComponent(e.value))}));return e.join("&").replace($a,"+")},serializeArray:function(){var e=this;return this.map((function(t,n){var r=e._make(n);return I(n)&&"form"===n.name?r.find("input,select,textarea,keygen").toArray():r.filter("input,select,textarea,keygen").toArray()})).filter('[name!=""]:enabled:not(:submit, :button, :image, :reset, :file):matches([checked], :not(:checkbox, :radio))').map((function(t,n){var r,i=e._make(n),s=i.attr("name"),a=null!==(r=i.val())&&void 0!==r?r:"";return Array.isArray(a)?a.map((function(e){return{name:s,value:e.replace(za,"\r\n")}})):{name:s,value:a.replace(za,"\r\n")}})).toArray()}}),Za=function(e,t,n){if(this.length=0,this.options=n,this._root=t,e){for(var r=0;r=55296&&e<=57343}function po(e){return 32!==e&&10!==e&&13!==e&&9!==e&&12!==e&&e>=1&&e<=31||e>=127&&e<=159}function fo(e){return e>=64976&&e<=65007||ro.has(e)}var Eo;!function(e){e.controlCharacterInInputStream="control-character-in-input-stream",e.noncharacterInInputStream="noncharacter-in-input-stream",e.surrogateInInputStream="surrogate-in-input-stream",e.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",e.endTagWithAttributes="end-tag-with-attributes",e.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",e.unexpectedSolidusInTag="unexpected-solidus-in-tag",e.unexpectedNullCharacter="unexpected-null-character",e.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",e.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",e.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",e.missingEndTagName="missing-end-tag-name",e.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",e.unknownNamedCharacterReference="unknown-named-character-reference",e.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",e.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",e.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",e.eofBeforeTagName="eof-before-tag-name",e.eofInTag="eof-in-tag",e.missingAttributeValue="missing-attribute-value",e.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",e.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",e.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",e.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",e.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",e.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",e.missingDoctypePublicIdentifier="missing-doctype-public-identifier",e.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",e.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",e.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",e.cdataInHtmlContent="cdata-in-html-content",e.incorrectlyOpenedComment="incorrectly-opened-comment",e.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",e.eofInDoctype="eof-in-doctype",e.nestedComment="nested-comment",e.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",e.eofInComment="eof-in-comment",e.incorrectlyClosedComment="incorrectly-closed-comment",e.eofInCdata="eof-in-cdata",e.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",e.nullCharacterReference="null-character-reference",e.surrogateCharacterReference="surrogate-character-reference",e.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",e.controlCharacterReference="control-character-reference",e.noncharacterCharacterReference="noncharacter-character-reference",e.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",e.missingDoctypeName="missing-doctype-name",e.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",e.duplicateAttribute="duplicate-attribute",e.nonConformingDoctype="non-conforming-doctype",e.missingDoctype="missing-doctype",e.misplacedDoctype="misplaced-doctype",e.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",e.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",e.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",e.openElementsLeftAfterEof="open-elements-left-after-eof",e.abandonedHeadElementChild="abandoned-head-element-child",e.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",e.nestedNoscriptInHead="nested-noscript-in-head",e.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"}(Eo=Eo||(Eo={}));class mo{constructor(e){this.handler=e,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=65536,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+Number(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(e){const{line:t,col:n,offset:r}=this;return{code:e,startLine:t,endLine:t,startCol:n,endCol:n,startOffset:r,endOffset:r}}_err(e){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(e)))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(e){if(this.pos!==this.html.length-1){const t=this.html.charCodeAt(this.pos+1);if(function(e){return e>=56320&&e<=57343}(t))return this.pos++,this._addGap(),1024*(e-55296)+9216+t}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,io.EOF;return this._err(Eo.surrogateInInputStream),e}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}write(e,t){this.html.length>0?this.html+=e:this.html=e,this.endOfChunkHit=!1,this.lastChunkWritten=t}insertHtmlAtCurrentPos(e){this.html=this.html.substring(0,this.pos+1)+e+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(e,t){if(this.pos+e.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(t)return this.html.startsWith(e,this.pos);for(let t=0;t=this.html.length?(this.endOfChunkHit=!this.lastChunkWritten,io.EOF):this.html.charCodeAt(t)}advance(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,io.EOF;let e=this.html.charCodeAt(this.pos);if(e===io.CARRIAGE_RETURN)return this.isEol=!0,this.skipNextNewLine=!0,io.LINE_FEED;if(e===io.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine))return this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance();this.skipNextNewLine=!1,uo(e)&&(e=this._processSurrogate(e));return null===this.handler.onParseError||e>31&&e<127||e===io.LINE_FEED||e===io.CARRIAGE_RETURN||e>159&&e<64976||this._checkForProblematicCharacters(e),e}_checkForProblematicCharacters(e){po(e)?this._err(Eo.controlCharacterInInputStream):fo(e)&&this._err(Eo.noncharacterInInputStream)}retreat(e){for(this.pos-=e;this.pos=0;n--)if(e.attrs[n].name===t)return e.attrs[n].value;return null}!function(e){e[e.CHARACTER=0]="CHARACTER",e[e.NULL_CHARACTER=1]="NULL_CHARACTER",e[e.WHITESPACE_CHARACTER=2]="WHITESPACE_CHARACTER",e[e.START_TAG=3]="START_TAG",e[e.END_TAG=4]="END_TAG",e[e.COMMENT=5]="COMMENT",e[e.DOCTYPE=6]="DOCTYPE",e[e.EOF=7]="EOF",e[e.HIBERNATION=8]="HIBERNATION"}(To=To||(To={}));var Ao=Ke((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms„‹•˜¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map((function(e){return e.charCodeAt(0)})))}));qe(Ao);var go=Ke((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=new Uint16Array("Ȁaglq\tɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map((function(e){return e.charCodeAt(0)})))}));qe(go);var No=Ke((function(e,t){var n;Object.defineProperty(t,"__esModule",{value:!0}),t.replaceCodePoint=t.fromCodePoint=void 0;var r=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function i(e){var t;return e>=55296&&e<=57343||e>1114111?65533:null!==(t=r.get(e))&&void 0!==t?t:e}t.fromCodePoint=null!==(n=String.fromCodePoint)&&void 0!==n?n:function(e){var t="";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),t+=String.fromCharCode(e)},t.replaceCodePoint=i,t.default=function(e){return(0,t.fromCodePoint)(i(e))}}));qe(No),No.replaceCodePoint,No.fromCodePoint;var Co=Ao,Io=go,So=No,bo=Ke((function(e,t){var n=Ge&&Ge.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.decodeXML=t.decodeHTMLStrict=t.decodeHTML=t.determineBranch=t.BinTrieFlags=t.fromCodePoint=t.replaceCodePoint=t.decodeCodePoint=t.xmlDecodeTree=t.htmlDecodeTree=void 0;var r=n(Co);t.htmlDecodeTree=r.default;var i=n(Io);t.xmlDecodeTree=i.default;var s=n(So);t.decodeCodePoint=s.default;var a,o,c=So;function l(e){return function(t,n){for(var r="",i=0,c=0;(c=t.indexOf("&",c))>=0;)if(r+=t.slice(i,c),i=c,c+=1,t.charCodeAt(c)!==a.NUM){for(var l=0,u=1,p=0,f=e[p];c>14)-1))break;p+=E}}if(0!==l)r+=1===(E=(e[l]&o.VALUE_LENGTH)>>14)?String.fromCharCode(e[l]&~o.VALUE_LENGTH):2===E?String.fromCharCode(e[l+1]):String.fromCharCode(e[l+1],e[l+2]),i=c-u+1}else{var m=c+1,T=10,_=t.charCodeAt(m);(_|a.To_LOWER_BIT)===a.LOWER_X&&(T=16,c+=1,m+=1);do{_=t.charCodeAt(++c)}while(_>=a.ZERO&&_<=a.NINE||16===T&&(_|a.To_LOWER_BIT)>=a.LOWER_A&&(_|a.To_LOWER_BIT)<=a.LOWER_F);if(m!==c){var A=t.substring(m,c),g=parseInt(A,T);if(t.charCodeAt(c)===a.SEMI)c+=1;else if(n)continue;r+=(0,s.default)(g),i=c}}return r+t.slice(i)}}function h(e,t,n,r){var i=(t&o.BRANCH_LENGTH)>>7,s=t&o.JUMP_TABLE;if(0===i)return 0!==s&&r===s?n:-1;if(s){var a=r-s;return a<0||a>=i?-1:e[n+a]-1}for(var c=n,l=c+i-1;c<=l;){var h=c+l>>>1,u=e[h];if(ur))return e[h+i];l=h-1}}return-1}Object.defineProperty(t,"replaceCodePoint",{enumerable:!0,get:function(){return c.replaceCodePoint}}),Object.defineProperty(t,"fromCodePoint",{enumerable:!0,get:function(){return c.fromCodePoint}}),function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.To_LOWER_BIT=32]="To_LOWER_BIT"}(a||(a={})),function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE"}(o=t.BinTrieFlags||(t.BinTrieFlags={})),t.determineBranch=h;var u=l(r.default),p=l(i.default);t.decodeHTML=function(e){return u(e,!1)},t.decodeHTMLStrict=function(e){return u(e,!0)},t.decodeXML=function(e){return p(e,!0)}}));qe(bo),bo.decodeXML,bo.decodeHTMLStrict,bo.decodeHTML;var Oo=bo.determineBranch,yo=bo.BinTrieFlags,Lo=bo.fromCodePoint,ko=bo.replaceCodePoint;bo.decodeCodePoint;var vo,Do,Ro,Mo,Po,xo=bo.xmlDecodeTree,wo=bo.htmlDecodeTree;!function(e){e.HTML="http://www.w3.org/1999/xhtml",e.MATHML="http://www.w3.org/1998/Math/MathML",e.SVG="http://www.w3.org/2000/svg",e.XLINK="http://www.w3.org/1999/xlink",e.XML="http://www.w3.org/XML/1998/namespace",e.XMLNS="http://www.w3.org/2000/xmlns/"}(vo=vo||(vo={})),function(e){e.TYPE="type",e.ACTION="action",e.ENCODING="encoding",e.PROMPT="prompt",e.NAME="name",e.COLOR="color",e.FACE="face",e.SIZE="size"}(Do=Do||(Do={})),function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks"}(Ro=Ro||(Ro={})),function(e){e.A="a",e.ADDRESS="address",e.ANNOTATION_XML="annotation-xml",e.APPLET="applet",e.AREA="area",e.ARTICLE="article",e.ASIDE="aside",e.B="b",e.BASE="base",e.BASEFONT="basefont",e.BGSOUND="bgsound",e.BIG="big",e.BLOCKQUOTE="blockquote",e.BODY="body",e.BR="br",e.BUTTON="button",e.CAPTION="caption",e.CENTER="center",e.CODE="code",e.COL="col",e.COLGROUP="colgroup",e.DD="dd",e.DESC="desc",e.DETAILS="details",e.DIALOG="dialog",e.DIR="dir",e.DIV="div",e.DL="dl",e.DT="dt",e.EM="em",e.EMBED="embed",e.FIELDSET="fieldset",e.FIGCAPTION="figcaption",e.FIGURE="figure",e.FONT="font",e.FOOTER="footer",e.FOREIGN_OBJECT="foreignObject",e.FORM="form",e.FRAME="frame",e.FRAMESET="frameset",e.H1="h1",e.H2="h2",e.H3="h3",e.H4="h4",e.H5="h5",e.H6="h6",e.HEAD="head",e.HEADER="header",e.HGROUP="hgroup",e.HR="hr",e.HTML="html",e.I="i",e.IMG="img",e.IMAGE="image",e.INPUT="input",e.IFRAME="iframe",e.KEYGEN="keygen",e.LABEL="label",e.LI="li",e.LINK="link",e.LISTING="listing",e.MAIN="main",e.MALIGNMARK="malignmark",e.MARQUEE="marquee",e.MATH="math",e.MENU="menu",e.META="meta",e.MGLYPH="mglyph",e.MI="mi",e.MO="mo",e.MN="mn",e.MS="ms",e.MTEXT="mtext",e.NAV="nav",e.NOBR="nobr",e.NOFRAMES="noframes",e.NOEMBED="noembed",e.NOSCRIPT="noscript",e.OBJECT="object",e.OL="ol",e.OPTGROUP="optgroup",e.OPTION="option",e.P="p",e.PARAM="param",e.PLAINTEXT="plaintext",e.PRE="pre",e.RB="rb",e.RP="rp",e.RT="rt",e.RTC="rtc",e.RUBY="ruby",e.S="s",e.SCRIPT="script",e.SECTION="section",e.SELECT="select",e.SOURCE="source",e.SMALL="small",e.SPAN="span",e.STRIKE="strike",e.STRONG="strong",e.STYLE="style",e.SUB="sub",e.SUMMARY="summary",e.SUP="sup",e.TABLE="table",e.TBODY="tbody",e.TEMPLATE="template",e.TEXTAREA="textarea",e.TFOOT="tfoot",e.TD="td",e.TH="th",e.THEAD="thead",e.TITLE="title",e.TR="tr",e.TRACK="track",e.TT="tt",e.U="u",e.UL="ul",e.SVG="svg",e.VAR="var",e.WBR="wbr",e.XMP="xmp"}(Mo=Mo||(Mo={})),function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.A=1]="A",e[e.ADDRESS=2]="ADDRESS",e[e.ANNOTATION_XML=3]="ANNOTATION_XML",e[e.APPLET=4]="APPLET",e[e.AREA=5]="AREA",e[e.ARTICLE=6]="ARTICLE",e[e.ASIDE=7]="ASIDE",e[e.B=8]="B",e[e.BASE=9]="BASE",e[e.BASEFONT=10]="BASEFONT",e[e.BGSOUND=11]="BGSOUND",e[e.BIG=12]="BIG",e[e.BLOCKQUOTE=13]="BLOCKQUOTE",e[e.BODY=14]="BODY",e[e.BR=15]="BR",e[e.BUTTON=16]="BUTTON",e[e.CAPTION=17]="CAPTION",e[e.CENTER=18]="CENTER",e[e.CODE=19]="CODE",e[e.COL=20]="COL",e[e.COLGROUP=21]="COLGROUP",e[e.DD=22]="DD",e[e.DESC=23]="DESC",e[e.DETAILS=24]="DETAILS",e[e.DIALOG=25]="DIALOG",e[e.DIR=26]="DIR",e[e.DIV=27]="DIV",e[e.DL=28]="DL",e[e.DT=29]="DT",e[e.EM=30]="EM",e[e.EMBED=31]="EMBED",e[e.FIELDSET=32]="FIELDSET",e[e.FIGCAPTION=33]="FIGCAPTION",e[e.FIGURE=34]="FIGURE",e[e.FONT=35]="FONT",e[e.FOOTER=36]="FOOTER",e[e.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",e[e.FORM=38]="FORM",e[e.FRAME=39]="FRAME",e[e.FRAMESET=40]="FRAMESET",e[e.H1=41]="H1",e[e.H2=42]="H2",e[e.H3=43]="H3",e[e.H4=44]="H4",e[e.H5=45]="H5",e[e.H6=46]="H6",e[e.HEAD=47]="HEAD",e[e.HEADER=48]="HEADER",e[e.HGROUP=49]="HGROUP",e[e.HR=50]="HR",e[e.HTML=51]="HTML",e[e.I=52]="I",e[e.IMG=53]="IMG",e[e.IMAGE=54]="IMAGE",e[e.INPUT=55]="INPUT",e[e.IFRAME=56]="IFRAME",e[e.KEYGEN=57]="KEYGEN",e[e.LABEL=58]="LABEL",e[e.LI=59]="LI",e[e.LINK=60]="LINK",e[e.LISTING=61]="LISTING",e[e.MAIN=62]="MAIN",e[e.MALIGNMARK=63]="MALIGNMARK",e[e.MARQUEE=64]="MARQUEE",e[e.MATH=65]="MATH",e[e.MENU=66]="MENU",e[e.META=67]="META",e[e.MGLYPH=68]="MGLYPH",e[e.MI=69]="MI",e[e.MO=70]="MO",e[e.MN=71]="MN",e[e.MS=72]="MS",e[e.MTEXT=73]="MTEXT",e[e.NAV=74]="NAV",e[e.NOBR=75]="NOBR",e[e.NOFRAMES=76]="NOFRAMES",e[e.NOEMBED=77]="NOEMBED",e[e.NOSCRIPT=78]="NOSCRIPT",e[e.OBJECT=79]="OBJECT",e[e.OL=80]="OL",e[e.OPTGROUP=81]="OPTGROUP",e[e.OPTION=82]="OPTION",e[e.P=83]="P",e[e.PARAM=84]="PARAM",e[e.PLAINTEXT=85]="PLAINTEXT",e[e.PRE=86]="PRE",e[e.RB=87]="RB",e[e.RP=88]="RP",e[e.RT=89]="RT",e[e.RTC=90]="RTC",e[e.RUBY=91]="RUBY",e[e.S=92]="S",e[e.SCRIPT=93]="SCRIPT",e[e.SECTION=94]="SECTION",e[e.SELECT=95]="SELECT",e[e.SOURCE=96]="SOURCE",e[e.SMALL=97]="SMALL",e[e.SPAN=98]="SPAN",e[e.STRIKE=99]="STRIKE",e[e.STRONG=100]="STRONG",e[e.STYLE=101]="STYLE",e[e.SUB=102]="SUB",e[e.SUMMARY=103]="SUMMARY",e[e.SUP=104]="SUP",e[e.TABLE=105]="TABLE",e[e.TBODY=106]="TBODY",e[e.TEMPLATE=107]="TEMPLATE",e[e.TEXTAREA=108]="TEXTAREA",e[e.TFOOT=109]="TFOOT",e[e.TD=110]="TD",e[e.TH=111]="TH",e[e.THEAD=112]="THEAD",e[e.TITLE=113]="TITLE",e[e.TR=114]="TR",e[e.TRACK=115]="TRACK",e[e.TT=116]="TT",e[e.U=117]="U",e[e.UL=118]="UL",e[e.SVG=119]="SVG",e[e.VAR=120]="VAR",e[e.WBR=121]="WBR",e[e.XMP=122]="XMP"}(Po=Po||(Po={}));const Bo=new Map([[Mo.A,Po.A],[Mo.ADDRESS,Po.ADDRESS],[Mo.ANNOTATION_XML,Po.ANNOTATION_XML],[Mo.APPLET,Po.APPLET],[Mo.AREA,Po.AREA],[Mo.ARTICLE,Po.ARTICLE],[Mo.ASIDE,Po.ASIDE],[Mo.B,Po.B],[Mo.BASE,Po.BASE],[Mo.BASEFONT,Po.BASEFONT],[Mo.BGSOUND,Po.BGSOUND],[Mo.BIG,Po.BIG],[Mo.BLOCKQUOTE,Po.BLOCKQUOTE],[Mo.BODY,Po.BODY],[Mo.BR,Po.BR],[Mo.BUTTON,Po.BUTTON],[Mo.CAPTION,Po.CAPTION],[Mo.CENTER,Po.CENTER],[Mo.CODE,Po.CODE],[Mo.COL,Po.COL],[Mo.COLGROUP,Po.COLGROUP],[Mo.DD,Po.DD],[Mo.DESC,Po.DESC],[Mo.DETAILS,Po.DETAILS],[Mo.DIALOG,Po.DIALOG],[Mo.DIR,Po.DIR],[Mo.DIV,Po.DIV],[Mo.DL,Po.DL],[Mo.DT,Po.DT],[Mo.EM,Po.EM],[Mo.EMBED,Po.EMBED],[Mo.FIELDSET,Po.FIELDSET],[Mo.FIGCAPTION,Po.FIGCAPTION],[Mo.FIGURE,Po.FIGURE],[Mo.FONT,Po.FONT],[Mo.FOOTER,Po.FOOTER],[Mo.FOREIGN_OBJECT,Po.FOREIGN_OBJECT],[Mo.FORM,Po.FORM],[Mo.FRAME,Po.FRAME],[Mo.FRAMESET,Po.FRAMESET],[Mo.H1,Po.H1],[Mo.H2,Po.H2],[Mo.H3,Po.H3],[Mo.H4,Po.H4],[Mo.H5,Po.H5],[Mo.H6,Po.H6],[Mo.HEAD,Po.HEAD],[Mo.HEADER,Po.HEADER],[Mo.HGROUP,Po.HGROUP],[Mo.HR,Po.HR],[Mo.HTML,Po.HTML],[Mo.I,Po.I],[Mo.IMG,Po.IMG],[Mo.IMAGE,Po.IMAGE],[Mo.INPUT,Po.INPUT],[Mo.IFRAME,Po.IFRAME],[Mo.KEYGEN,Po.KEYGEN],[Mo.LABEL,Po.LABEL],[Mo.LI,Po.LI],[Mo.LINK,Po.LINK],[Mo.LISTING,Po.LISTING],[Mo.MAIN,Po.MAIN],[Mo.MALIGNMARK,Po.MALIGNMARK],[Mo.MARQUEE,Po.MARQUEE],[Mo.MATH,Po.MATH],[Mo.MENU,Po.MENU],[Mo.META,Po.META],[Mo.MGLYPH,Po.MGLYPH],[Mo.MI,Po.MI],[Mo.MO,Po.MO],[Mo.MN,Po.MN],[Mo.MS,Po.MS],[Mo.MTEXT,Po.MTEXT],[Mo.NAV,Po.NAV],[Mo.NOBR,Po.NOBR],[Mo.NOFRAMES,Po.NOFRAMES],[Mo.NOEMBED,Po.NOEMBED],[Mo.NOSCRIPT,Po.NOSCRIPT],[Mo.OBJECT,Po.OBJECT],[Mo.OL,Po.OL],[Mo.OPTGROUP,Po.OPTGROUP],[Mo.OPTION,Po.OPTION],[Mo.P,Po.P],[Mo.PARAM,Po.PARAM],[Mo.PLAINTEXT,Po.PLAINTEXT],[Mo.PRE,Po.PRE],[Mo.RB,Po.RB],[Mo.RP,Po.RP],[Mo.RT,Po.RT],[Mo.RTC,Po.RTC],[Mo.RUBY,Po.RUBY],[Mo.S,Po.S],[Mo.SCRIPT,Po.SCRIPT],[Mo.SECTION,Po.SECTION],[Mo.SELECT,Po.SELECT],[Mo.SOURCE,Po.SOURCE],[Mo.SMALL,Po.SMALL],[Mo.SPAN,Po.SPAN],[Mo.STRIKE,Po.STRIKE],[Mo.STRONG,Po.STRONG],[Mo.STYLE,Po.STYLE],[Mo.SUB,Po.SUB],[Mo.SUMMARY,Po.SUMMARY],[Mo.SUP,Po.SUP],[Mo.TABLE,Po.TABLE],[Mo.TBODY,Po.TBODY],[Mo.TEMPLATE,Po.TEMPLATE],[Mo.TEXTAREA,Po.TEXTAREA],[Mo.TFOOT,Po.TFOOT],[Mo.TD,Po.TD],[Mo.TH,Po.TH],[Mo.THEAD,Po.THEAD],[Mo.TITLE,Po.TITLE],[Mo.TR,Po.TR],[Mo.TRACK,Po.TRACK],[Mo.TT,Po.TT],[Mo.U,Po.U],[Mo.UL,Po.UL],[Mo.SVG,Po.SVG],[Mo.VAR,Po.VAR],[Mo.WBR,Po.WBR],[Mo.XMP,Po.XMP]]);function Fo(e){var t;return null!==(t=Bo.get(e))&&void 0!==t?t:Po.UNKNOWN}const Uo=Po,Ho={[vo.HTML]:new Set([Uo.ADDRESS,Uo.APPLET,Uo.AREA,Uo.ARTICLE,Uo.ASIDE,Uo.BASE,Uo.BASEFONT,Uo.BGSOUND,Uo.BLOCKQUOTE,Uo.BODY,Uo.BR,Uo.BUTTON,Uo.CAPTION,Uo.CENTER,Uo.COL,Uo.COLGROUP,Uo.DD,Uo.DETAILS,Uo.DIR,Uo.DIV,Uo.DL,Uo.DT,Uo.EMBED,Uo.FIELDSET,Uo.FIGCAPTION,Uo.FIGURE,Uo.FOOTER,Uo.FORM,Uo.FRAME,Uo.FRAMESET,Uo.H1,Uo.H2,Uo.H3,Uo.H4,Uo.H5,Uo.H6,Uo.HEAD,Uo.HEADER,Uo.HGROUP,Uo.HR,Uo.HTML,Uo.IFRAME,Uo.IMG,Uo.INPUT,Uo.LI,Uo.LINK,Uo.LISTING,Uo.MAIN,Uo.MARQUEE,Uo.MENU,Uo.META,Uo.NAV,Uo.NOEMBED,Uo.NOFRAMES,Uo.NOSCRIPT,Uo.OBJECT,Uo.OL,Uo.P,Uo.PARAM,Uo.PLAINTEXT,Uo.PRE,Uo.SCRIPT,Uo.SECTION,Uo.SELECT,Uo.SOURCE,Uo.STYLE,Uo.SUMMARY,Uo.TABLE,Uo.TBODY,Uo.TD,Uo.TEMPLATE,Uo.TEXTAREA,Uo.TFOOT,Uo.TH,Uo.THEAD,Uo.TITLE,Uo.TR,Uo.TRACK,Uo.UL,Uo.WBR,Uo.XMP]),[vo.MATHML]:new Set([Uo.MI,Uo.MO,Uo.MN,Uo.MS,Uo.MTEXT,Uo.ANNOTATION_XML]),[vo.SVG]:new Set([Uo.TITLE,Uo.FOREIGN_OBJECT,Uo.DESC]),[vo.XLINK]:new Set,[vo.XML]:new Set,[vo.XMLNS]:new Set};function Go(e){return e===Uo.H1||e===Uo.H2||e===Uo.H3||e===Uo.H4||e===Uo.H5||e===Uo.H6}const Yo=new Set([Mo.STYLE,Mo.SCRIPT,Mo.XMP,Mo.IFRAME,Mo.NOEMBED,Mo.NOFRAMES,Mo.PLAINTEXT]);const qo=new Map([[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);var Ko;!function(e){e[e.DATA=0]="DATA",e[e.RCDATA=1]="RCDATA",e[e.RAWTEXT=2]="RAWTEXT",e[e.SCRIPT_DATA=3]="SCRIPT_DATA",e[e.PLAINTEXT=4]="PLAINTEXT",e[e.TAG_OPEN=5]="TAG_OPEN",e[e.END_TAG_OPEN=6]="END_TAG_OPEN",e[e.TAG_NAME=7]="TAG_NAME",e[e.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",e[e.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",e[e.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",e[e.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",e[e.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",e[e.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",e[e.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",e[e.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",e[e.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",e[e.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",e[e.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",e[e.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",e[e.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",e[e.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",e[e.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",e[e.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",e[e.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",e[e.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",e[e.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",e[e.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",e[e.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",e[e.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",e[e.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",e[e.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",e[e.BOGUS_COMMENT=40]="BOGUS_COMMENT",e[e.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",e[e.COMMENT_START=42]="COMMENT_START",e[e.COMMENT_START_DASH=43]="COMMENT_START_DASH",e[e.COMMENT=44]="COMMENT",e[e.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",e[e.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",e[e.COMMENT_END_DASH=49]="COMMENT_END_DASH",e[e.COMMENT_END=50]="COMMENT_END",e[e.COMMENT_END_BANG=51]="COMMENT_END_BANG",e[e.DOCTYPE=52]="DOCTYPE",e[e.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",e[e.DOCTYPE_NAME=54]="DOCTYPE_NAME",e[e.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",e[e.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",e[e.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",e[e.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",e[e.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",e[e.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",e[e.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",e[e.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",e[e.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",e[e.CDATA_SECTION=68]="CDATA_SECTION",e[e.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",e[e.CDATA_SECTION_END=70]="CDATA_SECTION_END",e[e.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",e[e.NAMED_CHARACTER_REFERENCE=72]="NAMED_CHARACTER_REFERENCE",e[e.AMBIGUOUS_AMPERSAND=73]="AMBIGUOUS_AMPERSAND",e[e.NUMERIC_CHARACTER_REFERENCE=74]="NUMERIC_CHARACTER_REFERENCE",e[e.HEXADEMICAL_CHARACTER_REFERENCE_START=75]="HEXADEMICAL_CHARACTER_REFERENCE_START",e[e.HEXADEMICAL_CHARACTER_REFERENCE=76]="HEXADEMICAL_CHARACTER_REFERENCE",e[e.DECIMAL_CHARACTER_REFERENCE=77]="DECIMAL_CHARACTER_REFERENCE",e[e.NUMERIC_CHARACTER_REFERENCE_END=78]="NUMERIC_CHARACTER_REFERENCE_END"}(Ko||(Ko={}));const jo={DATA:Ko.DATA,RCDATA:Ko.RCDATA,RAWTEXT:Ko.RAWTEXT,SCRIPT_DATA:Ko.SCRIPT_DATA,PLAINTEXT:Ko.PLAINTEXT,CDATA_SECTION:Ko.CDATA_SECTION};function Vo(e){return e>=io.DIGIT_0&&e<=io.DIGIT_9}function Wo(e){return e>=io.LATIN_CAPITAL_A&&e<=io.LATIN_CAPITAL_Z}function Qo(e){return function(e){return e>=io.LATIN_SMALL_A&&e<=io.LATIN_SMALL_Z}(e)||Wo(e)}function Xo(e){return Qo(e)||Vo(e)}function $o(e){return e>=io.LATIN_CAPITAL_A&&e<=io.LATIN_CAPITAL_F}function zo(e){return e>=io.LATIN_SMALL_A&&e<=io.LATIN_SMALL_F}function Jo(e){return e+32}function Zo(e){return e===io.SPACE||e===io.LINE_FEED||e===io.TABULATION||e===io.FORM_FEED}function ec(e){return Zo(e)||e===io.SOLIDUS||e===io.GREATER_THAN_SIGN}class tc{constructor(e,t){this.options=e,this.handler=t,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=Ko.DATA,this.returnState=Ko.DATA,this.charRefCode=-1,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new mo(t),this.currentLocation=this.getCurrentLocation(-1)}_err(e){var t,n;null===(n=(t=this.handler).onParseError)||void 0===n||n.call(t,this.preprocessor.getError(e))}getCurrentLocation(e){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-e,startOffset:this.preprocessor.offset-e,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;const e=this._consume();this._ensureHibernation()||this._callState(e)}this.inLoop=!1}}pause(){this.paused=!0}resume(e){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,this.inLoop||(this._runParsingLoop(),this.paused||null==e||e())}write(e,t,n){this.active=!0,this.preprocessor.write(e,t),this._runParsingLoop(),this.paused||null==n||n()}insertHtmlAtCurrentPos(e){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(e),this._runParsingLoop()}_ensureHibernation(){return!!this.preprocessor.endOfChunkHit&&(this._unconsume(this.consumedAfterSnapshot),this.active=!1,!0)}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_unconsume(e){this.consumedAfterSnapshot-=e,this.preprocessor.retreat(e)}_reconsumeInState(e,t){this.state=e,this._callState(t)}_advanceBy(e){this.consumedAfterSnapshot+=e;for(let t=0;t0&&this._err(Eo.endTagWithAttributes),e.selfClosing&&this._err(Eo.endTagWithTrailingSolidus),this.handler.onEndTag(e)),this.preprocessor.dropParsedChunk()}emitCurrentComment(e){this.prepareToken(e),this.handler.onComment(e),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(e){this.prepareToken(e),this.handler.onDoctype(e),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(e){if(this.currentCharacterToken){switch(e&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=e.startLine,this.currentCharacterToken.location.endCol=e.startCol,this.currentCharacterToken.location.endOffset=e.startOffset),this.currentCharacterToken.type){case To.CHARACTER:this.handler.onCharacter(this.currentCharacterToken);break;case To.NULL_CHARACTER:this.handler.onNullCharacter(this.currentCharacterToken);break;case To.WHITESPACE_CHARACTER:this.handler.onWhitespaceCharacter(this.currentCharacterToken)}this.currentCharacterToken=null}}_emitEOFToken(){const e=this.getCurrentLocation(0);e&&(e.endLine=e.startLine,e.endCol=e.startCol,e.endOffset=e.startOffset),this._emitCurrentCharacterToken(e),this.handler.onEof({type:To.EOF,location:e}),this.active=!1}_appendCharToCurrentCharacterToken(e,t){if(this.currentCharacterToken){if(this.currentCharacterToken.type===e)return void(this.currentCharacterToken.chars+=t);this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk()}this._createCharacterToken(e,t)}_emitCodePoint(e){const t=Zo(e)?To.WHITESPACE_CHARACTER:e===io.NULL?To.NULL_CHARACTER:To.CHARACTER;this._appendCharToCurrentCharacterToken(t,String.fromCodePoint(e))}_emitChars(e){this._appendCharToCurrentCharacterToken(To.CHARACTER,e)}_matchNamedCharacterReference(e){let t=null,n=0,r=!1;for(let s=0,a=wo[0];s>=0&&(s=Oo(wo,a,s+1,e),!(s<0));e=this._consume()){n+=1,a=wo[s];const o=a&yo.VALUE_LENGTH;if(o){const a=(o>>14)-1;if(e!==io.SEMICOLON&&this._isCharacterReferenceInAttribute()&&((i=this.preprocessor.peek(1))===io.EQUALS_SIGN||Xo(i))?(t=[io.AMPERSAND],s+=a):(t=0===a?[wo[s]&~yo.VALUE_LENGTH]:1===a?[wo[++s]]:[wo[++s],wo[++s]],n=0,r=e!==io.SEMICOLON),0===a){this._consume();break}}}var i;return this._unconsume(n),r&&!this.preprocessor.endOfChunkHit&&this._err(Eo.missingSemicolonAfterCharacterReference),this._unconsume(1),t}_isCharacterReferenceInAttribute(){return this.returnState===Ko.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===Ko.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===Ko.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(e){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(e):this._emitCodePoint(e)}_callState(e){switch(this.state){case Ko.DATA:this._stateData(e);break;case Ko.RCDATA:this._stateRcdata(e);break;case Ko.RAWTEXT:this._stateRawtext(e);break;case Ko.SCRIPT_DATA:this._stateScriptData(e);break;case Ko.PLAINTEXT:this._statePlaintext(e);break;case Ko.TAG_OPEN:this._stateTagOpen(e);break;case Ko.END_TAG_OPEN:this._stateEndTagOpen(e);break;case Ko.TAG_NAME:this._stateTagName(e);break;case Ko.RCDATA_LESS_THAN_SIGN:this._stateRcdataLessThanSign(e);break;case Ko.RCDATA_END_TAG_OPEN:this._stateRcdataEndTagOpen(e);break;case Ko.RCDATA_END_TAG_NAME:this._stateRcdataEndTagName(e);break;case Ko.RAWTEXT_LESS_THAN_SIGN:this._stateRawtextLessThanSign(e);break;case Ko.RAWTEXT_END_TAG_OPEN:this._stateRawtextEndTagOpen(e);break;case Ko.RAWTEXT_END_TAG_NAME:this._stateRawtextEndTagName(e);break;case Ko.SCRIPT_DATA_LESS_THAN_SIGN:this._stateScriptDataLessThanSign(e);break;case Ko.SCRIPT_DATA_END_TAG_OPEN:this._stateScriptDataEndTagOpen(e);break;case Ko.SCRIPT_DATA_END_TAG_NAME:this._stateScriptDataEndTagName(e);break;case Ko.SCRIPT_DATA_ESCAPE_START:this._stateScriptDataEscapeStart(e);break;case Ko.SCRIPT_DATA_ESCAPE_START_DASH:this._stateScriptDataEscapeStartDash(e);break;case Ko.SCRIPT_DATA_ESCAPED:this._stateScriptDataEscaped(e);break;case Ko.SCRIPT_DATA_ESCAPED_DASH:this._stateScriptDataEscapedDash(e);break;case Ko.SCRIPT_DATA_ESCAPED_DASH_DASH:this._stateScriptDataEscapedDashDash(e);break;case Ko.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:this._stateScriptDataEscapedLessThanSign(e);break;case Ko.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:this._stateScriptDataEscapedEndTagOpen(e);break;case Ko.SCRIPT_DATA_ESCAPED_END_TAG_NAME:this._stateScriptDataEscapedEndTagName(e);break;case Ko.SCRIPT_DATA_DOUBLE_ESCAPE_START:this._stateScriptDataDoubleEscapeStart(e);break;case Ko.SCRIPT_DATA_DOUBLE_ESCAPED:this._stateScriptDataDoubleEscaped(e);break;case Ko.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:this._stateScriptDataDoubleEscapedDash(e);break;case Ko.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:this._stateScriptDataDoubleEscapedDashDash(e);break;case Ko.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:this._stateScriptDataDoubleEscapedLessThanSign(e);break;case Ko.SCRIPT_DATA_DOUBLE_ESCAPE_END:this._stateScriptDataDoubleEscapeEnd(e);break;case Ko.BEFORE_ATTRIBUTE_NAME:this._stateBeforeAttributeName(e);break;case Ko.ATTRIBUTE_NAME:this._stateAttributeName(e);break;case Ko.AFTER_ATTRIBUTE_NAME:this._stateAfterAttributeName(e);break;case Ko.BEFORE_ATTRIBUTE_VALUE:this._stateBeforeAttributeValue(e);break;case Ko.ATTRIBUTE_VALUE_DOUBLE_QUOTED:this._stateAttributeValueDoubleQuoted(e);break;case Ko.ATTRIBUTE_VALUE_SINGLE_QUOTED:this._stateAttributeValueSingleQuoted(e);break;case Ko.ATTRIBUTE_VALUE_UNQUOTED:this._stateAttributeValueUnquoted(e);break;case Ko.AFTER_ATTRIBUTE_VALUE_QUOTED:this._stateAfterAttributeValueQuoted(e);break;case Ko.SELF_CLOSING_START_TAG:this._stateSelfClosingStartTag(e);break;case Ko.BOGUS_COMMENT:this._stateBogusComment(e);break;case Ko.MARKUP_DECLARATION_OPEN:this._stateMarkupDeclarationOpen(e);break;case Ko.COMMENT_START:this._stateCommentStart(e);break;case Ko.COMMENT_START_DASH:this._stateCommentStartDash(e);break;case Ko.COMMENT:this._stateComment(e);break;case Ko.COMMENT_LESS_THAN_SIGN:this._stateCommentLessThanSign(e);break;case Ko.COMMENT_LESS_THAN_SIGN_BANG:this._stateCommentLessThanSignBang(e);break;case Ko.COMMENT_LESS_THAN_SIGN_BANG_DASH:this._stateCommentLessThanSignBangDash(e);break;case Ko.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:this._stateCommentLessThanSignBangDashDash(e);break;case Ko.COMMENT_END_DASH:this._stateCommentEndDash(e);break;case Ko.COMMENT_END:this._stateCommentEnd(e);break;case Ko.COMMENT_END_BANG:this._stateCommentEndBang(e);break;case Ko.DOCTYPE:this._stateDoctype(e);break;case Ko.BEFORE_DOCTYPE_NAME:this._stateBeforeDoctypeName(e);break;case Ko.DOCTYPE_NAME:this._stateDoctypeName(e);break;case Ko.AFTER_DOCTYPE_NAME:this._stateAfterDoctypeName(e);break;case Ko.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._stateAfterDoctypePublicKeyword(e);break;case Ko.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:this._stateBeforeDoctypePublicIdentifier(e);break;case Ko.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:this._stateDoctypePublicIdentifierDoubleQuoted(e);break;case Ko.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:this._stateDoctypePublicIdentifierSingleQuoted(e);break;case Ko.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:this._stateAfterDoctypePublicIdentifier(e);break;case Ko.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:this._stateBetweenDoctypePublicAndSystemIdentifiers(e);break;case Ko.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._stateAfterDoctypeSystemKeyword(e);break;case Ko.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:this._stateBeforeDoctypeSystemIdentifier(e);break;case Ko.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:this._stateDoctypeSystemIdentifierDoubleQuoted(e);break;case Ko.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:this._stateDoctypeSystemIdentifierSingleQuoted(e);break;case Ko.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:this._stateAfterDoctypeSystemIdentifier(e);break;case Ko.BOGUS_DOCTYPE:this._stateBogusDoctype(e);break;case Ko.CDATA_SECTION:this._stateCdataSection(e);break;case Ko.CDATA_SECTION_BRACKET:this._stateCdataSectionBracket(e);break;case Ko.CDATA_SECTION_END:this._stateCdataSectionEnd(e);break;case Ko.CHARACTER_REFERENCE:this._stateCharacterReference(e);break;case Ko.NAMED_CHARACTER_REFERENCE:this._stateNamedCharacterReference(e);break;case Ko.AMBIGUOUS_AMPERSAND:this._stateAmbiguousAmpersand(e);break;case Ko.NUMERIC_CHARACTER_REFERENCE:this._stateNumericCharacterReference(e);break;case Ko.HEXADEMICAL_CHARACTER_REFERENCE_START:this._stateHexademicalCharacterReferenceStart(e);break;case Ko.HEXADEMICAL_CHARACTER_REFERENCE:this._stateHexademicalCharacterReference(e);break;case Ko.DECIMAL_CHARACTER_REFERENCE:this._stateDecimalCharacterReference(e);break;case Ko.NUMERIC_CHARACTER_REFERENCE_END:this._stateNumericCharacterReferenceEnd(e);break;default:throw new Error("Unknown state")}}_stateData(e){switch(e){case io.LESS_THAN_SIGN:this.state=Ko.TAG_OPEN;break;case io.AMPERSAND:this.returnState=Ko.DATA,this.state=Ko.CHARACTER_REFERENCE;break;case io.NULL:this._err(Eo.unexpectedNullCharacter),this._emitCodePoint(e);break;case io.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateRcdata(e){switch(e){case io.AMPERSAND:this.returnState=Ko.RCDATA,this.state=Ko.CHARACTER_REFERENCE;break;case io.LESS_THAN_SIGN:this.state=Ko.RCDATA_LESS_THAN_SIGN;break;case io.NULL:this._err(Eo.unexpectedNullCharacter),this._emitChars("�");break;case io.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateRawtext(e){switch(e){case io.LESS_THAN_SIGN:this.state=Ko.RAWTEXT_LESS_THAN_SIGN;break;case io.NULL:this._err(Eo.unexpectedNullCharacter),this._emitChars("�");break;case io.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateScriptData(e){switch(e){case io.LESS_THAN_SIGN:this.state=Ko.SCRIPT_DATA_LESS_THAN_SIGN;break;case io.NULL:this._err(Eo.unexpectedNullCharacter),this._emitChars("�");break;case io.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_statePlaintext(e){switch(e){case io.NULL:this._err(Eo.unexpectedNullCharacter),this._emitChars("�");break;case io.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateTagOpen(e){if(Qo(e))this._createStartTagToken(),this.state=Ko.TAG_NAME,this._stateTagName(e);else switch(e){case io.EXCLAMATION_MARK:this.state=Ko.MARKUP_DECLARATION_OPEN;break;case io.SOLIDUS:this.state=Ko.END_TAG_OPEN;break;case io.QUESTION_MARK:this._err(Eo.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=Ko.BOGUS_COMMENT,this._stateBogusComment(e);break;case io.EOF:this._err(Eo.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break;default:this._err(Eo.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=Ko.DATA,this._stateData(e)}}_stateEndTagOpen(e){if(Qo(e))this._createEndTagToken(),this.state=Ko.TAG_NAME,this._stateTagName(e);else switch(e){case io.GREATER_THAN_SIGN:this._err(Eo.missingEndTagName),this.state=Ko.DATA;break;case io.EOF:this._err(Eo.eofBeforeTagName),this._emitChars("");break;case io.NULL:this._err(Eo.unexpectedNullCharacter),this.state=Ko.SCRIPT_DATA_ESCAPED,this._emitChars("�");break;case io.EOF:this._err(Eo.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default:this.state=Ko.SCRIPT_DATA_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataEscapedLessThanSign(e){e===io.SOLIDUS?this.state=Ko.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:Qo(e)?(this._emitChars("<"),this.state=Ko.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(e)):(this._emitChars("<"),this.state=Ko.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(e))}_stateScriptDataEscapedEndTagOpen(e){Qo(e)?(this.state=Ko.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(e)):(this._emitChars("");break;case io.NULL:this._err(Eo.unexpectedNullCharacter),this.state=Ko.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars("�");break;case io.EOF:this._err(Eo.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default:this.state=Ko.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataDoubleEscapedLessThanSign(e){e===io.SOLIDUS?(this.state=Ko.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=Ko.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(e))}_stateScriptDataDoubleEscapeEnd(e){if(this.preprocessor.startsWith(co,!1)&&ec(this.preprocessor.peek(co.length))){this._emitCodePoint(e);for(let e=0;e1114111)this._err(Eo.characterReferenceOutsideUnicodeRange),this.charRefCode=io.REPLACEMENT_CHARACTER;else if(uo(this.charRefCode))this._err(Eo.surrogateCharacterReference),this.charRefCode=io.REPLACEMENT_CHARACTER;else if(fo(this.charRefCode))this._err(Eo.noncharacterCharacterReference);else if(po(this.charRefCode)||this.charRefCode===io.CARRIAGE_RETURN){this._err(Eo.controlCharacterReference);const e=qo.get(this.charRefCode);void 0!==e&&(this.charRefCode=e)}this._flushCodePointConsumedAsCharacterReference(this.charRefCode),this._reconsumeInState(this.returnState,e)}}const nc=new Set([Po.DD,Po.DT,Po.LI,Po.OPTGROUP,Po.OPTION,Po.P,Po.RB,Po.RP,Po.RT,Po.RTC]),rc=new Set([...nc,Po.CAPTION,Po.COLGROUP,Po.TBODY,Po.TD,Po.TFOOT,Po.TH,Po.THEAD,Po.TR]),ic=new Map([[Po.APPLET,vo.HTML],[Po.CAPTION,vo.HTML],[Po.HTML,vo.HTML],[Po.MARQUEE,vo.HTML],[Po.OBJECT,vo.HTML],[Po.TABLE,vo.HTML],[Po.TD,vo.HTML],[Po.TEMPLATE,vo.HTML],[Po.TH,vo.HTML],[Po.ANNOTATION_XML,vo.MATHML],[Po.MI,vo.MATHML],[Po.MN,vo.MATHML],[Po.MO,vo.MATHML],[Po.MS,vo.MATHML],[Po.MTEXT,vo.MATHML],[Po.DESC,vo.SVG],[Po.FOREIGN_OBJECT,vo.SVG],[Po.TITLE,vo.SVG]]),sc=[Po.H1,Po.H2,Po.H3,Po.H4,Po.H5,Po.H6],ac=[Po.TR,Po.TEMPLATE,Po.HTML],oc=[Po.TBODY,Po.TFOOT,Po.THEAD,Po.TEMPLATE,Po.HTML],cc=[Po.TABLE,Po.TEMPLATE,Po.HTML],lc=[Po.TD,Po.TH];class hc{constructor(e,t,n){this.treeAdapter=t,this.handler=n,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=Po.UNKNOWN,this.current=e}get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}_indexOf(e){return this.items.lastIndexOf(e,this.stackTop)}_isInTemplate(){return this.currentTagId===Po.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===vo.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop]}push(e,t){this.stackTop++,this.items[this.stackTop]=e,this.current=e,this.tagIDs[this.stackTop]=t,this.currentTagId=t,this._isInTemplate()&&this.tmplCount++,this.handler.onItemPush(e,t,!0)}pop(){const e=this.current;this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(e,!0)}replace(e,t){const n=this._indexOf(e);this.items[n]=t,n===this.stackTop&&(this.current=t)}insertAfter(e,t,n){const r=this._indexOf(e)+1;this.items.splice(r,0,t),this.tagIDs.splice(r,0,n),this.stackTop++,r===this.stackTop&&this._updateCurrentElement(),this.handler.onItemPush(this.current,this.currentTagId,r===this.stackTop)}popUntilTagNamePopped(e){let t=this.stackTop+1;do{t=this.tagIDs.lastIndexOf(e,t-1)}while(t>0&&this.treeAdapter.getNamespaceURI(this.items[t])!==vo.HTML);this.shortenToLength(t<0?0:t)}shortenToLength(e){for(;this.stackTop>=e;){const t=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,this.stackTop=0;n--)if(e.includes(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===t)return n;return-1}clearBackTo(e,t){const n=this._indexOfTagNames(e,t);this.shortenToLength(n+1)}clearBackToTableContext(){this.clearBackTo(cc,vo.HTML)}clearBackToTableBodyContext(){this.clearBackTo(oc,vo.HTML)}clearBackToTableRowContext(){this.clearBackTo(ac,vo.HTML)}remove(e){const t=this._indexOf(e);t>=0&&(t===this.stackTop?this.pop():(this.items.splice(t,1),this.tagIDs.splice(t,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(e,!1)))}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===Po.BODY?this.items[1]:null}contains(e){return this._indexOf(e)>-1}getCommonAncestor(e){const t=this._indexOf(e)-1;return t>=0?this.items[t]:null}isRootHtmlElementCurrent(){return 0===this.stackTop&&this.tagIDs[0]===Po.HTML}hasInScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.tagIDs[t],r=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&r===vo.HTML)return!0;if(ic.get(n)===r)return!1}return!0}hasNumberedHeaderInScope(){for(let e=this.stackTop;e>=0;e--){const t=this.tagIDs[e],n=this.treeAdapter.getNamespaceURI(this.items[e]);if(Go(t)&&n===vo.HTML)return!0;if(ic.get(t)===n)return!1}return!0}hasInListItemScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.tagIDs[t],r=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&r===vo.HTML)return!0;if((n===Po.UL||n===Po.OL)&&r===vo.HTML||ic.get(n)===r)return!1}return!0}hasInButtonScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.tagIDs[t],r=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&r===vo.HTML)return!0;if(n===Po.BUTTON&&r===vo.HTML||ic.get(n)===r)return!1}return!0}hasInTableScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.tagIDs[t];if(this.treeAdapter.getNamespaceURI(this.items[t])===vo.HTML){if(n===e)return!0;if(n===Po.TABLE||n===Po.TEMPLATE||n===Po.HTML)return!1}}return!0}hasTableBodyContextInTableScope(){for(let e=this.stackTop;e>=0;e--){const t=this.tagIDs[e];if(this.treeAdapter.getNamespaceURI(this.items[e])===vo.HTML){if(t===Po.TBODY||t===Po.THEAD||t===Po.TFOOT)return!0;if(t===Po.TABLE||t===Po.HTML)return!1}}return!0}hasInSelectScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.tagIDs[t];if(this.treeAdapter.getNamespaceURI(this.items[t])===vo.HTML){if(n===e)return!0;if(n!==Po.OPTION&&n!==Po.OPTGROUP)return!1}}return!0}generateImpliedEndTags(){for(;nc.has(this.currentTagId);)this.pop()}generateImpliedEndTagsThoroughly(){for(;rc.has(this.currentTagId);)this.pop()}generateImpliedEndTagsWithExclusion(e){for(;this.currentTagId!==e&&rc.has(this.currentTagId);)this.pop()}}var uc;!function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element"}(uc=uc||(uc={}));const pc={type:uc.Marker};class fc{constructor(e){this.treeAdapter=e,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(e,t){const n=[],r=t.length,i=this.treeAdapter.getTagName(e),s=this.treeAdapter.getNamespaceURI(e);for(let e=0;e[e.name,e.value])));let i=0;for(let e=0;er.get(e.name)===e.value))&&(i+=1,i>=3&&this.entries.splice(t.idx,1))}}insertMarker(){this.entries.unshift(pc)}pushElement(e,t){this._ensureNoahArkCondition(e),this.entries.unshift({type:uc.Element,element:e,token:t})}insertElementAfterBookmark(e,t){const n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{type:uc.Element,element:e,token:t})}removeEntry(e){const t=this.entries.indexOf(e);t>=0&&this.entries.splice(t,1)}clearToLastMarker(){const e=this.entries.indexOf(pc);e>=0?this.entries.splice(0,e+1):this.entries.length=0}getElementEntryInScopeWithTagName(e){const t=this.entries.find((t=>t.type===uc.Marker||this.treeAdapter.getTagName(t.element)===e));return t&&t.type===uc.Element?t:null}getElementEntry(e){return this.entries.find((t=>t.type===uc.Element&&t.element===e))}}function dc(e){return{nodeName:"#text",value:e,parentNode:null}}const Ec={createDocument:()=>({nodeName:"#document",mode:Ro.NO_QUIRKS,childNodes:[]}),createDocumentFragment:()=>({nodeName:"#document-fragment",childNodes:[]}),createElement:(e,t,n)=>({nodeName:e,tagName:e,attrs:n,namespaceURI:t,childNodes:[],parentNode:null}),createCommentNode:e=>({nodeName:"#comment",data:e,parentNode:null}),appendChild(e,t){e.childNodes.push(t),t.parentNode=e},insertBefore(e,t,n){const r=e.childNodes.indexOf(n);e.childNodes.splice(r,0,t),t.parentNode=e},setTemplateContent(e,t){e.content=t},getTemplateContent:e=>e.content,setDocumentType(e,t,n,r){const i=e.childNodes.find((e=>"#documentType"===e.nodeName));if(i)i.name=t,i.publicId=n,i.systemId=r;else{const i={nodeName:"#documentType",name:t,publicId:n,systemId:r,parentNode:null};Ec.appendChild(e,i)}},setDocumentMode(e,t){e.mode=t},getDocumentMode:e=>e.mode,detachNode(e){if(e.parentNode){const t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null}},insertText(e,t){if(e.childNodes.length>0){const n=e.childNodes[e.childNodes.length-1];if(Ec.isTextNode(n))return void(n.value+=t)}Ec.appendChild(e,dc(t))},insertTextBefore(e,t,n){const r=e.childNodes[e.childNodes.indexOf(n)-1];r&&Ec.isTextNode(r)?r.value+=t:Ec.insertBefore(e,dc(t),n)},adoptAttributes(e,t){const n=new Set(e.attrs.map((e=>e.name)));for(let r=0;re.childNodes[0],getChildNodes:e=>e.childNodes,getParentNode:e=>e.parentNode,getAttrList:e=>e.attrs,getTagName:e=>e.tagName,getNamespaceURI:e=>e.namespaceURI,getTextNodeContent:e=>e.value,getCommentNodeContent:e=>e.data,getDocumentTypeNodeName:e=>e.name,getDocumentTypeNodePublicId:e=>e.publicId,getDocumentTypeNodeSystemId:e=>e.systemId,isTextNode:e=>"#text"===e.nodeName,isCommentNode:e=>"#comment"===e.nodeName,isDocumentTypeNode:e=>"#documentType"===e.nodeName,isElementNode:e=>Object.prototype.hasOwnProperty.call(e,"tagName"),setNodeSourceCodeLocation(e,t){e.sourceCodeLocation=t},getNodeSourceCodeLocation:e=>e.sourceCodeLocation,updateNodeSourceCodeLocation(e,t){e.sourceCodeLocation={...e.sourceCodeLocation,...t}}},mc=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],Tc=[...mc,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],_c=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),Ac=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],gc=[...Ac,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function Nc(e,t){return t.some((t=>e.startsWith(t)))}const Cc="text/html",Ic="application/xhtml+xml",Sc=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map((e=>[e.toLowerCase(),e]))),bc=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:vo.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:vo.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:vo.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:vo.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:vo.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:vo.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:vo.XLINK}],["xml:base",{prefix:"xml",name:"base",namespace:vo.XML}],["xml:lang",{prefix:"xml",name:"lang",namespace:vo.XML}],["xml:space",{prefix:"xml",name:"space",namespace:vo.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:vo.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:vo.XMLNS}]]),Oc=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map((e=>[e.toLowerCase(),e]))),yc=new Set([Po.B,Po.BIG,Po.BLOCKQUOTE,Po.BODY,Po.BR,Po.CENTER,Po.CODE,Po.DD,Po.DIV,Po.DL,Po.DT,Po.EM,Po.EMBED,Po.H1,Po.H2,Po.H3,Po.H4,Po.H5,Po.H6,Po.HEAD,Po.HR,Po.I,Po.IMG,Po.LI,Po.LISTING,Po.MENU,Po.META,Po.NOBR,Po.OL,Po.P,Po.PRE,Po.RUBY,Po.S,Po.SMALL,Po.SPAN,Po.STRONG,Po.STRIKE,Po.SUB,Po.SUP,Po.TABLE,Po.TT,Po.U,Po.UL,Po.VAR]);function Lc(e){for(let t=0;t0&&this._setContextModes(e,t)}onItemPop(e,t){var n,r;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(e,this.currentToken),null===(r=(n=this.treeAdapter).onItemPop)||void 0===r||r.call(n,e,this.openElements.current),t){let e,t;0===this.openElements.stackTop&&this.fragmentContext?(e=this.fragmentContext,t=this.fragmentContextID):({current:e,currentTagId:t}=this.openElements),this._setContextModes(e,t)}}_setContextModes(e,t){const n=e===this.document||this.treeAdapter.getNamespaceURI(e)===vo.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&!this._isIntegrationPoint(t,e)}_switchToTextParsing(e,t){this._insertElement(e,vo.HTML),this.tokenizer.state=t,this.originalInsertionMode=this.insertionMode,this.insertionMode=Rc.TEXT}switchToPlaintextParsing(){this.insertionMode=Rc.TEXT,this.originalInsertionMode=Rc.IN_BODY,this.tokenizer.state=jo.PLAINTEXT}_getAdjustedCurrentElement(){return 0===this.openElements.stackTop&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let e=this.fragmentContext;for(;e;){if(this.treeAdapter.getTagName(e)===Mo.FORM){this.formElement=e;break}e=this.treeAdapter.getParentNode(e)}}_initTokenizerForFragmentParsing(){if(this.fragmentContext&&this.treeAdapter.getNamespaceURI(this.fragmentContext)===vo.HTML)switch(this.fragmentContextID){case Po.TITLE:case Po.TEXTAREA:this.tokenizer.state=jo.RCDATA;break;case Po.STYLE:case Po.XMP:case Po.IFRAME:case Po.NOEMBED:case Po.NOFRAMES:case Po.NOSCRIPT:this.tokenizer.state=jo.RAWTEXT;break;case Po.SCRIPT:this.tokenizer.state=jo.SCRIPT_DATA;break;case Po.PLAINTEXT:this.tokenizer.state=jo.PLAINTEXT}}_setDocumentType(e){const t=e.name||"",n=e.publicId||"",r=e.systemId||"";if(this.treeAdapter.setDocumentType(this.document,t,n,r),e.location){const t=this.treeAdapter.getChildNodes(this.document).find((e=>this.treeAdapter.isDocumentTypeNode(e)));t&&this.treeAdapter.setNodeSourceCodeLocation(t,e.location)}}_attachElementToTree(e,t){if(this.options.sourceCodeLocationInfo){const n=t&&{...t,startTag:t};this.treeAdapter.setNodeSourceCodeLocation(e,n)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(e);else{const t=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(t,e)}}_appendElement(e,t){const n=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(n,e.location)}_insertElement(e,t){const n=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(n,e.location),this.openElements.push(n,e.tagID)}_insertFakeElement(e,t){const n=this.treeAdapter.createElement(e,vo.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,t)}_insertTemplate(e){const t=this.treeAdapter.createElement(e.tagName,vo.HTML,e.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(t,n),this._attachElementToTree(t,e.location),this.openElements.push(t,e.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null)}_insertFakeRootElement(){const e=this.treeAdapter.createElement(Mo.HTML,vo.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(e,null),this.treeAdapter.appendChild(this.openElements.current,e),this.openElements.push(e,Po.HTML)}_appendCommentNode(e,t){const n=this.treeAdapter.createCommentNode(e.data);this.treeAdapter.appendChild(t,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,e.location)}_insertCharacters(e){let t,n;if(this._shouldFosterParentOnInsertion()?(({parent:t,beforeElement:n}=this._findFosterParentingLocation()),n?this.treeAdapter.insertTextBefore(t,e.chars,n):this.treeAdapter.insertText(t,e.chars)):(t=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(t,e.chars)),!e.location)return;const r=this.treeAdapter.getChildNodes(t),i=n?r.lastIndexOf(n):r.length,s=r[i-1];if(this.treeAdapter.getNodeSourceCodeLocation(s)){const{endLine:t,endCol:n,endOffset:r}=e.location;this.treeAdapter.updateNodeSourceCodeLocation(s,{endLine:t,endCol:n,endOffset:r})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(s,e.location)}_adoptNodes(e,t){for(let n=this.treeAdapter.getFirstChild(e);n;n=this.treeAdapter.getFirstChild(e))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(t,n)}_setEndLocation(e,t){if(this.treeAdapter.getNodeSourceCodeLocation(e)&&t.location){const n=t.location,r=this.treeAdapter.getTagName(e),i=t.type===To.END_TAG&&r===t.tagName?{endTag:{...n},endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(e,i)}}shouldProcessStartTagTokenInForeignContent(e){if(!this.currentNotInHTML)return!1;let t,n;return 0===this.openElements.stackTop&&this.fragmentContext?(t=this.fragmentContext,n=this.fragmentContextID):({current:t,currentTagId:n}=this.openElements),(e.tagID!==Po.SVG||this.treeAdapter.getTagName(t)!==Mo.ANNOTATION_XML||this.treeAdapter.getNamespaceURI(t)!==vo.MATHML)&&(this.tokenizer.inForeignNode||(e.tagID===Po.MGLYPH||e.tagID===Po.MALIGNMARK)&&!this._isIntegrationPoint(n,t,vo.HTML))}_processToken(e){switch(e.type){case To.CHARACTER:this.onCharacter(e);break;case To.NULL_CHARACTER:this.onNullCharacter(e);break;case To.COMMENT:this.onComment(e);break;case To.DOCTYPE:this.onDoctype(e);break;case To.START_TAG:this._processStartTag(e);break;case To.END_TAG:this.onEndTag(e);break;case To.EOF:this.onEof(e);break;case To.WHITESPACE_CHARACTER:this.onWhitespaceCharacter(e)}}_isIntegrationPoint(e,t,n){return Dc(e,this.treeAdapter.getNamespaceURI(t),this.treeAdapter.getAttrList(t),n)}_reconstructActiveFormattingElements(){const e=this.activeFormattingElements.entries.length;if(e){const t=this.activeFormattingElements.entries.findIndex((e=>e.type===uc.Marker||this.openElements.contains(e.element)));for(let n=t<0?e-1:t-1;n>=0;n--){const e=this.activeFormattingElements.entries[n];this._insertElement(e.token,this.treeAdapter.getNamespaceURI(e.element)),e.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=Rc.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(Po.P),this.openElements.popUntilTagNamePopped(Po.P)}_resetInsertionMode(){for(let e=this.openElements.stackTop;e>=0;e--)switch(0===e&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[e]){case Po.TR:return void(this.insertionMode=Rc.IN_ROW);case Po.TBODY:case Po.THEAD:case Po.TFOOT:return void(this.insertionMode=Rc.IN_TABLE_BODY);case Po.CAPTION:return void(this.insertionMode=Rc.IN_CAPTION);case Po.COLGROUP:return void(this.insertionMode=Rc.IN_COLUMN_GROUP);case Po.TABLE:return void(this.insertionMode=Rc.IN_TABLE);case Po.BODY:return void(this.insertionMode=Rc.IN_BODY);case Po.FRAMESET:return void(this.insertionMode=Rc.IN_FRAMESET);case Po.SELECT:return void this._resetInsertionModeForSelect(e);case Po.TEMPLATE:return void(this.insertionMode=this.tmplInsertionModeStack[0]);case Po.HTML:return void(this.insertionMode=this.headElement?Rc.AFTER_HEAD:Rc.BEFORE_HEAD);case Po.TD:case Po.TH:if(e>0)return void(this.insertionMode=Rc.IN_CELL);break;case Po.HEAD:if(e>0)return void(this.insertionMode=Rc.IN_HEAD)}this.insertionMode=Rc.IN_BODY}_resetInsertionModeForSelect(e){if(e>0)for(let t=e-1;t>0;t--){const e=this.openElements.tagIDs[t];if(e===Po.TEMPLATE)break;if(e===Po.TABLE)return void(this.insertionMode=Rc.IN_SELECT_IN_TABLE)}this.insertionMode=Rc.IN_SELECT}_isElementCausesFosterParenting(e){return Pc.has(e)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let e=this.openElements.stackTop;e>=0;e--){const t=this.openElements.items[e];switch(this.openElements.tagIDs[e]){case Po.TEMPLATE:if(this.treeAdapter.getNamespaceURI(t)===vo.HTML)return{parent:this.treeAdapter.getTemplateContent(t),beforeElement:null};break;case Po.TABLE:{const n=this.treeAdapter.getParentNode(t);return n?{parent:n,beforeElement:t}:{parent:this.openElements.items[e-1],beforeElement:null}}}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(e){const t=this._findFosterParentingLocation();t.beforeElement?this.treeAdapter.insertBefore(t.parent,e,t.beforeElement):this.treeAdapter.appendChild(t.parent,e)}_isSpecialElement(e,t){const n=this.treeAdapter.getNamespaceURI(e);return Ho[n].has(t)}onCharacter(e){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode)!function(e,t){e._insertCharacters(t),e.framesetOk=!1}(this,e);else switch(this.insertionMode){case Rc.INITIAL:Vc(this,e);break;case Rc.BEFORE_HTML:Wc(this,e);break;case Rc.BEFORE_HEAD:Qc(this,e);break;case Rc.IN_HEAD:zc(this,e);break;case Rc.IN_HEAD_NO_SCRIPT:Jc(this,e);break;case Rc.AFTER_HEAD:Zc(this,e);break;case Rc.IN_BODY:case Rc.IN_CAPTION:case Rc.IN_CELL:case Rc.IN_TEMPLATE:nl(this,e);break;case Rc.TEXT:case Rc.IN_SELECT:case Rc.IN_SELECT_IN_TABLE:this._insertCharacters(e);break;case Rc.IN_TABLE:case Rc.IN_TABLE_BODY:case Rc.IN_ROW:ul(this,e);break;case Rc.IN_TABLE_TEXT:ml(this,e);break;case Rc.IN_COLUMN_GROUP:gl(this,e);break;case Rc.AFTER_BODY:kl(this,e);break;case Rc.AFTER_AFTER_BODY:vl(this,e)}}onNullCharacter(e){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode)!function(e,t){t.chars="�",e._insertCharacters(t)}(this,e);else switch(this.insertionMode){case Rc.INITIAL:Vc(this,e);break;case Rc.BEFORE_HTML:Wc(this,e);break;case Rc.BEFORE_HEAD:Qc(this,e);break;case Rc.IN_HEAD:zc(this,e);break;case Rc.IN_HEAD_NO_SCRIPT:Jc(this,e);break;case Rc.AFTER_HEAD:Zc(this,e);break;case Rc.TEXT:this._insertCharacters(e);break;case Rc.IN_TABLE:case Rc.IN_TABLE_BODY:case Rc.IN_ROW:ul(this,e);break;case Rc.IN_COLUMN_GROUP:gl(this,e);break;case Rc.AFTER_BODY:kl(this,e);break;case Rc.AFTER_AFTER_BODY:vl(this,e)}}onComment(e){if(this.skipNextNewLine=!1,this.currentNotInHTML)Kc(this,e);else switch(this.insertionMode){case Rc.INITIAL:case Rc.BEFORE_HTML:case Rc.BEFORE_HEAD:case Rc.IN_HEAD:case Rc.IN_HEAD_NO_SCRIPT:case Rc.AFTER_HEAD:case Rc.IN_BODY:case Rc.IN_TABLE:case Rc.IN_CAPTION:case Rc.IN_COLUMN_GROUP:case Rc.IN_TABLE_BODY:case Rc.IN_ROW:case Rc.IN_CELL:case Rc.IN_SELECT:case Rc.IN_SELECT_IN_TABLE:case Rc.IN_TEMPLATE:case Rc.IN_FRAMESET:case Rc.AFTER_FRAMESET:Kc(this,e);break;case Rc.IN_TABLE_TEXT:Tl(this,e);break;case Rc.AFTER_BODY:!function(e,t){e._appendCommentNode(t,e.openElements.items[0])}(this,e);break;case Rc.AFTER_AFTER_BODY:case Rc.AFTER_AFTER_FRAMESET:!function(e,t){e._appendCommentNode(t,e.document)}(this,e)}}onDoctype(e){switch(this.skipNextNewLine=!1,this.insertionMode){case Rc.INITIAL:!function(e,t){e._setDocumentType(t);const n=t.forceQuirks?Ro.QUIRKS:function(e){if("html"!==e.name)return Ro.QUIRKS;const{systemId:t}=e;if(t&&"http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"===t.toLowerCase())return Ro.QUIRKS;let{publicId:n}=e;if(null!==n){if(n=n.toLowerCase(),_c.has(n))return Ro.QUIRKS;let e=null===t?Tc:mc;if(Nc(n,e))return Ro.QUIRKS;if(e=null===t?Ac:gc,Nc(n,e))return Ro.LIMITED_QUIRKS}return Ro.NO_QUIRKS}(t);(function(e){return"html"===e.name&&null===e.publicId&&(null===e.systemId||"about:legacy-compat"===e.systemId)})(t)||e._err(t,Eo.nonConformingDoctype);e.treeAdapter.setDocumentMode(e.document,n),e.insertionMode=Rc.BEFORE_HTML}(this,e);break;case Rc.BEFORE_HEAD:case Rc.IN_HEAD:case Rc.IN_HEAD_NO_SCRIPT:case Rc.AFTER_HEAD:this._err(e,Eo.misplacedDoctype);break;case Rc.IN_TABLE_TEXT:Tl(this,e)}}onStartTag(e){this.skipNextNewLine=!1,this.currentToken=e,this._processStartTag(e),e.selfClosing&&!e.ackSelfClosing&&this._err(e,Eo.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(e){this.shouldProcessStartTagTokenInForeignContent(e)?function(e,t){if(function(e){const t=e.tagID;return t===Po.FONT&&e.attrs.some((({name:e})=>e===Do.COLOR||e===Do.SIZE||e===Do.FACE))||yc.has(t)}(t))Dl(e),e._startTagOutsideForeignContent(t);else{const n=e._getAdjustedCurrentElement(),r=e.treeAdapter.getNamespaceURI(n);r===vo.MATHML?Lc(t):r===vo.SVG&&(!function(e){const t=Oc.get(e.tagName);null!=t&&(e.tagName=t,e.tagID=Fo(e.tagName))}(t),kc(t)),vc(t),t.selfClosing?e._appendElement(t,r):e._insertElement(t,r),t.ackSelfClosing=!0}}(this,e):this._startTagOutsideForeignContent(e)}_startTagOutsideForeignContent(e){switch(this.insertionMode){case Rc.INITIAL:Vc(this,e);break;case Rc.BEFORE_HTML:!function(e,t){t.tagID===Po.HTML?(e._insertElement(t,vo.HTML),e.insertionMode=Rc.BEFORE_HEAD):Wc(e,t)}(this,e);break;case Rc.BEFORE_HEAD:!function(e,t){switch(t.tagID){case Po.HTML:ol(e,t);break;case Po.HEAD:e._insertElement(t,vo.HTML),e.headElement=e.openElements.current,e.insertionMode=Rc.IN_HEAD;break;default:Qc(e,t)}}(this,e);break;case Rc.IN_HEAD:Xc(this,e);break;case Rc.IN_HEAD_NO_SCRIPT:!function(e,t){switch(t.tagID){case Po.HTML:ol(e,t);break;case Po.BASEFONT:case Po.BGSOUND:case Po.HEAD:case Po.LINK:case Po.META:case Po.NOFRAMES:case Po.STYLE:Xc(e,t);break;case Po.NOSCRIPT:e._err(t,Eo.nestedNoscriptInHead);break;default:Jc(e,t)}}(this,e);break;case Rc.AFTER_HEAD:!function(e,t){switch(t.tagID){case Po.HTML:ol(e,t);break;case Po.BODY:e._insertElement(t,vo.HTML),e.framesetOk=!1,e.insertionMode=Rc.IN_BODY;break;case Po.FRAMESET:e._insertElement(t,vo.HTML),e.insertionMode=Rc.IN_FRAMESET;break;case Po.BASE:case Po.BASEFONT:case Po.BGSOUND:case Po.LINK:case Po.META:case Po.NOFRAMES:case Po.SCRIPT:case Po.STYLE:case Po.TEMPLATE:case Po.TITLE:e._err(t,Eo.abandonedHeadElementChild),e.openElements.push(e.headElement,Po.HEAD),Xc(e,t),e.openElements.remove(e.headElement);break;case Po.HEAD:e._err(t,Eo.misplacedStartTagForHeadElement);break;default:Zc(e,t)}}(this,e);break;case Rc.IN_BODY:ol(this,e);break;case Rc.IN_TABLE:pl(this,e);break;case Rc.IN_TABLE_TEXT:Tl(this,e);break;case Rc.IN_CAPTION:!function(e,t){const n=t.tagID;_l.has(n)?e.openElements.hasInTableScope(Po.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(Po.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=Rc.IN_TABLE,pl(e,t)):ol(e,t)}(this,e);break;case Rc.IN_COLUMN_GROUP:Al(this,e);break;case Rc.IN_TABLE_BODY:Nl(this,e);break;case Rc.IN_ROW:Il(this,e);break;case Rc.IN_CELL:!function(e,t){const n=t.tagID;_l.has(n)?(e.openElements.hasInTableScope(Po.TD)||e.openElements.hasInTableScope(Po.TH))&&(e._closeTableCell(),Il(e,t)):ol(e,t)}(this,e);break;case Rc.IN_SELECT:bl(this,e);break;case Rc.IN_SELECT_IN_TABLE:!function(e,t){const n=t.tagID;n===Po.CAPTION||n===Po.TABLE||n===Po.TBODY||n===Po.TFOOT||n===Po.THEAD||n===Po.TR||n===Po.TD||n===Po.TH?(e.openElements.popUntilTagNamePopped(Po.SELECT),e._resetInsertionMode(),e._processStartTag(t)):bl(e,t)}(this,e);break;case Rc.IN_TEMPLATE:!function(e,t){switch(t.tagID){case Po.BASE:case Po.BASEFONT:case Po.BGSOUND:case Po.LINK:case Po.META:case Po.NOFRAMES:case Po.SCRIPT:case Po.STYLE:case Po.TEMPLATE:case Po.TITLE:Xc(e,t);break;case Po.CAPTION:case Po.COLGROUP:case Po.TBODY:case Po.TFOOT:case Po.THEAD:e.tmplInsertionModeStack[0]=Rc.IN_TABLE,e.insertionMode=Rc.IN_TABLE,pl(e,t);break;case Po.COL:e.tmplInsertionModeStack[0]=Rc.IN_COLUMN_GROUP,e.insertionMode=Rc.IN_COLUMN_GROUP,Al(e,t);break;case Po.TR:e.tmplInsertionModeStack[0]=Rc.IN_TABLE_BODY,e.insertionMode=Rc.IN_TABLE_BODY,Nl(e,t);break;case Po.TD:case Po.TH:e.tmplInsertionModeStack[0]=Rc.IN_ROW,e.insertionMode=Rc.IN_ROW,Il(e,t);break;default:e.tmplInsertionModeStack[0]=Rc.IN_BODY,e.insertionMode=Rc.IN_BODY,ol(e,t)}}(this,e);break;case Rc.AFTER_BODY:!function(e,t){t.tagID===Po.HTML?ol(e,t):kl(e,t)}(this,e);break;case Rc.IN_FRAMESET:!function(e,t){switch(t.tagID){case Po.HTML:ol(e,t);break;case Po.FRAMESET:e._insertElement(t,vo.HTML);break;case Po.FRAME:e._appendElement(t,vo.HTML),t.ackSelfClosing=!0;break;case Po.NOFRAMES:Xc(e,t)}}(this,e);break;case Rc.AFTER_FRAMESET:!function(e,t){switch(t.tagID){case Po.HTML:ol(e,t);break;case Po.NOFRAMES:Xc(e,t)}}(this,e);break;case Rc.AFTER_AFTER_BODY:!function(e,t){t.tagID===Po.HTML?ol(e,t):vl(e,t)}(this,e);break;case Rc.AFTER_AFTER_FRAMESET:!function(e,t){switch(t.tagID){case Po.HTML:ol(e,t);break;case Po.NOFRAMES:Xc(e,t)}}(this,e)}}onEndTag(e){this.skipNextNewLine=!1,this.currentToken=e,this.currentNotInHTML?function(e,t){if(t.tagID===Po.P||t.tagID===Po.BR)return Dl(e),void e._endTagOutsideForeignContent(t);for(let n=e.openElements.stackTop;n>0;n--){const r=e.openElements.items[n];if(e.treeAdapter.getNamespaceURI(r)===vo.HTML){e._endTagOutsideForeignContent(t);break}const i=e.treeAdapter.getTagName(r);if(i.toLowerCase()===t.tagName){t.tagName=i,e.openElements.shortenToLength(n);break}}}(this,e):this._endTagOutsideForeignContent(e)}_endTagOutsideForeignContent(e){switch(this.insertionMode){case Rc.INITIAL:Vc(this,e);break;case Rc.BEFORE_HTML:!function(e,t){const n=t.tagID;n!==Po.HTML&&n!==Po.HEAD&&n!==Po.BODY&&n!==Po.BR||Wc(e,t)}(this,e);break;case Rc.BEFORE_HEAD:!function(e,t){const n=t.tagID;n===Po.HEAD||n===Po.BODY||n===Po.HTML||n===Po.BR?Qc(e,t):e._err(t,Eo.endTagWithoutMatchingOpenElement)}(this,e);break;case Rc.IN_HEAD:!function(e,t){switch(t.tagID){case Po.HEAD:e.openElements.pop(),e.insertionMode=Rc.AFTER_HEAD;break;case Po.BODY:case Po.BR:case Po.HTML:zc(e,t);break;case Po.TEMPLATE:$c(e,t);break;default:e._err(t,Eo.endTagWithoutMatchingOpenElement)}}(this,e);break;case Rc.IN_HEAD_NO_SCRIPT:!function(e,t){switch(t.tagID){case Po.NOSCRIPT:e.openElements.pop(),e.insertionMode=Rc.IN_HEAD;break;case Po.BR:Jc(e,t);break;default:e._err(t,Eo.endTagWithoutMatchingOpenElement)}}(this,e);break;case Rc.AFTER_HEAD:!function(e,t){switch(t.tagID){case Po.BODY:case Po.HTML:case Po.BR:Zc(e,t);break;case Po.TEMPLATE:$c(e,t);break;default:e._err(t,Eo.endTagWithoutMatchingOpenElement)}}(this,e);break;case Rc.IN_BODY:ll(this,e);break;case Rc.TEXT:!function(e,t){var n;t.tagID===Po.SCRIPT&&(null===(n=e.scriptHandler)||void 0===n||n.call(e,e.openElements.current));e.openElements.pop(),e.insertionMode=e.originalInsertionMode}(this,e);break;case Rc.IN_TABLE:fl(this,e);break;case Rc.IN_TABLE_TEXT:Tl(this,e);break;case Rc.IN_CAPTION:!function(e,t){const n=t.tagID;switch(n){case Po.CAPTION:case Po.TABLE:e.openElements.hasInTableScope(Po.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(Po.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=Rc.IN_TABLE,n===Po.TABLE&&fl(e,t));break;case Po.BODY:case Po.COL:case Po.COLGROUP:case Po.HTML:case Po.TBODY:case Po.TD:case Po.TFOOT:case Po.TH:case Po.THEAD:case Po.TR:break;default:ll(e,t)}}(this,e);break;case Rc.IN_COLUMN_GROUP:!function(e,t){switch(t.tagID){case Po.COLGROUP:e.openElements.currentTagId===Po.COLGROUP&&(e.openElements.pop(),e.insertionMode=Rc.IN_TABLE);break;case Po.TEMPLATE:$c(e,t);break;case Po.COL:break;default:gl(e,t)}}(this,e);break;case Rc.IN_TABLE_BODY:Cl(this,e);break;case Rc.IN_ROW:Sl(this,e);break;case Rc.IN_CELL:!function(e,t){const n=t.tagID;switch(n){case Po.TD:case Po.TH:e.openElements.hasInTableScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=Rc.IN_ROW);break;case Po.TABLE:case Po.TBODY:case Po.TFOOT:case Po.THEAD:case Po.TR:e.openElements.hasInTableScope(n)&&(e._closeTableCell(),Sl(e,t));break;case Po.BODY:case Po.CAPTION:case Po.COL:case Po.COLGROUP:case Po.HTML:break;default:ll(e,t)}}(this,e);break;case Rc.IN_SELECT:Ol(this,e);break;case Rc.IN_SELECT_IN_TABLE:!function(e,t){const n=t.tagID;n===Po.CAPTION||n===Po.TABLE||n===Po.TBODY||n===Po.TFOOT||n===Po.THEAD||n===Po.TR||n===Po.TD||n===Po.TH?e.openElements.hasInTableScope(n)&&(e.openElements.popUntilTagNamePopped(Po.SELECT),e._resetInsertionMode(),e.onEndTag(t)):Ol(e,t)}(this,e);break;case Rc.IN_TEMPLATE:!function(e,t){t.tagID===Po.TEMPLATE&&$c(e,t)}(this,e);break;case Rc.AFTER_BODY:Ll(this,e);break;case Rc.IN_FRAMESET:!function(e,t){t.tagID!==Po.FRAMESET||e.openElements.isRootHtmlElementCurrent()||(e.openElements.pop(),e.fragmentContext||e.openElements.currentTagId===Po.FRAMESET||(e.insertionMode=Rc.AFTER_FRAMESET))}(this,e);break;case Rc.AFTER_FRAMESET:!function(e,t){t.tagID===Po.HTML&&(e.insertionMode=Rc.AFTER_AFTER_FRAMESET)}(this,e);break;case Rc.AFTER_AFTER_BODY:vl(this,e)}}onEof(e){switch(this.insertionMode){case Rc.INITIAL:Vc(this,e);break;case Rc.BEFORE_HTML:Wc(this,e);break;case Rc.BEFORE_HEAD:Qc(this,e);break;case Rc.IN_HEAD:zc(this,e);break;case Rc.IN_HEAD_NO_SCRIPT:Jc(this,e);break;case Rc.AFTER_HEAD:Zc(this,e);break;case Rc.IN_BODY:case Rc.IN_TABLE:case Rc.IN_CAPTION:case Rc.IN_COLUMN_GROUP:case Rc.IN_TABLE_BODY:case Rc.IN_ROW:case Rc.IN_CELL:case Rc.IN_SELECT:case Rc.IN_SELECT_IN_TABLE:hl(this,e);break;case Rc.TEXT:!function(e,t){e._err(t,Eo.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t)}(this,e);break;case Rc.IN_TABLE_TEXT:Tl(this,e);break;case Rc.IN_TEMPLATE:yl(this,e);break;case Rc.AFTER_BODY:case Rc.IN_FRAMESET:case Rc.AFTER_FRAMESET:case Rc.AFTER_AFTER_BODY:case Rc.AFTER_AFTER_FRAMESET:jc(this,e)}}onWhitespaceCharacter(e){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,e.chars.charCodeAt(0)===io.LINE_FEED)){if(1===e.chars.length)return;e.chars=e.chars.substr(1)}if(this.tokenizer.inForeignNode)this._insertCharacters(e);else switch(this.insertionMode){case Rc.IN_HEAD:case Rc.IN_HEAD_NO_SCRIPT:case Rc.AFTER_HEAD:case Rc.TEXT:case Rc.IN_COLUMN_GROUP:case Rc.IN_SELECT:case Rc.IN_SELECT_IN_TABLE:case Rc.IN_FRAMESET:case Rc.AFTER_FRAMESET:this._insertCharacters(e);break;case Rc.IN_BODY:case Rc.IN_CAPTION:case Rc.IN_CELL:case Rc.IN_TEMPLATE:case Rc.AFTER_BODY:case Rc.AFTER_AFTER_BODY:case Rc.AFTER_AFTER_FRAMESET:tl(this,e);break;case Rc.IN_TABLE:case Rc.IN_TABLE_BODY:case Rc.IN_ROW:ul(this,e);break;case Rc.IN_TABLE_TEXT:El(this,e)}}}function Bc(e,t){let n=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return n?e.openElements.contains(n.element)?e.openElements.hasInScope(t.tagID)||(n=null):(e.activeFormattingElements.removeEntry(n),n=null):cl(e,t),n}function Fc(e,t){let n=null,r=e.openElements.stackTop;for(;r>=0;r--){const i=e.openElements.items[r];if(i===t.element)break;e._isSpecialElement(i,e.openElements.tagIDs[r])&&(n=i)}return n||(e.openElements.shortenToLength(r<0?0:r),e.activeFormattingElements.removeEntry(t)),n}function Uc(e,t,n){let r=t,i=e.openElements.getCommonAncestor(t);for(let s=0,a=i;a!==n;s++,a=i){i=e.openElements.getCommonAncestor(a);const n=e.activeFormattingElements.getElementEntry(a),o=n&&s>=3;!n||o?(o&&e.activeFormattingElements.removeEntry(n),e.openElements.remove(a)):(a=Hc(e,n),r===t&&(e.activeFormattingElements.bookmark=n),e.treeAdapter.detachNode(r),e.treeAdapter.appendChild(a,r),r=a)}return r}function Hc(e,t){const n=e.treeAdapter.getNamespaceURI(t.element),r=e.treeAdapter.createElement(t.token.tagName,n,t.token.attrs);return e.openElements.replace(t.element,r),t.element=r,r}function Gc(e,t,n){const r=Fo(e.treeAdapter.getTagName(t));if(e._isElementCausesFosterParenting(r))e._fosterParentElement(n);else{const i=e.treeAdapter.getNamespaceURI(t);r===Po.TEMPLATE&&i===vo.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,n)}}function Yc(e,t,n){const r=e.treeAdapter.getNamespaceURI(n.element),{token:i}=n,s=e.treeAdapter.createElement(i.tagName,r,i.attrs);e._adoptNodes(t,s),e.treeAdapter.appendChild(t,s),e.activeFormattingElements.insertElementAfterBookmark(s,i),e.activeFormattingElements.removeEntry(n),e.openElements.remove(n.element),e.openElements.insertAfter(t,s,i.tagID)}function qc(e,t){for(let n=0;n<8;n++){const n=Bc(e,t);if(!n)break;const r=Fc(e,n);if(!r)break;e.activeFormattingElements.bookmark=n;const i=Uc(e,r,n.element),s=e.openElements.getCommonAncestor(n.element);e.treeAdapter.detachNode(i),s&&Gc(e,s,i),Yc(e,r,n)}}function Kc(e,t){e._appendCommentNode(t,e.openElements.currentTmplContentOrNode)}function jc(e,t){if(e.stopped=!0,t.location){const n=e.fragmentContext?0:2;for(let r=e.openElements.stackTop;r>=n;r--)e._setEndLocation(e.openElements.items[r],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){const n=e.openElements.items[0],r=e.treeAdapter.getNodeSourceCodeLocation(n);if(r&&!r.endTag&&(e._setEndLocation(n,t),e.openElements.stackTop>=1)){const n=e.openElements.items[1],r=e.treeAdapter.getNodeSourceCodeLocation(n);r&&!r.endTag&&e._setEndLocation(n,t)}}}}function Vc(e,t){e._err(t,Eo.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,Ro.QUIRKS),e.insertionMode=Rc.BEFORE_HTML,e._processToken(t)}function Wc(e,t){e._insertFakeRootElement(),e.insertionMode=Rc.BEFORE_HEAD,e._processToken(t)}function Qc(e,t){e._insertFakeElement(Mo.HEAD,Po.HEAD),e.headElement=e.openElements.current,e.insertionMode=Rc.IN_HEAD,e._processToken(t)}function Xc(e,t){switch(t.tagID){case Po.HTML:ol(e,t);break;case Po.BASE:case Po.BASEFONT:case Po.BGSOUND:case Po.LINK:case Po.META:e._appendElement(t,vo.HTML),t.ackSelfClosing=!0;break;case Po.TITLE:e._switchToTextParsing(t,jo.RCDATA);break;case Po.NOSCRIPT:e.options.scriptingEnabled?e._switchToTextParsing(t,jo.RAWTEXT):(e._insertElement(t,vo.HTML),e.insertionMode=Rc.IN_HEAD_NO_SCRIPT);break;case Po.NOFRAMES:case Po.STYLE:e._switchToTextParsing(t,jo.RAWTEXT);break;case Po.SCRIPT:e._switchToTextParsing(t,jo.SCRIPT_DATA);break;case Po.TEMPLATE:e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=Rc.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(Rc.IN_TEMPLATE);break;case Po.HEAD:e._err(t,Eo.misplacedStartTagForHeadElement);break;default:zc(e,t)}}function $c(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==Po.TEMPLATE&&e._err(t,Eo.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(Po.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,Eo.endTagWithoutMatchingOpenElement)}function zc(e,t){e.openElements.pop(),e.insertionMode=Rc.AFTER_HEAD,e._processToken(t)}function Jc(e,t){const n=t.type===To.EOF?Eo.openElementsLeftAfterEof:Eo.disallowedContentInNoscriptInHead;e._err(t,n),e.openElements.pop(),e.insertionMode=Rc.IN_HEAD,e._processToken(t)}function Zc(e,t){e._insertFakeElement(Mo.BODY,Po.BODY),e.insertionMode=Rc.IN_BODY,el(e,t)}function el(e,t){switch(t.type){case To.CHARACTER:nl(e,t);break;case To.WHITESPACE_CHARACTER:tl(e,t);break;case To.COMMENT:Kc(e,t);break;case To.START_TAG:ol(e,t);break;case To.END_TAG:ll(e,t);break;case To.EOF:hl(e,t)}}function tl(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t)}function nl(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1}function rl(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,vo.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function il(e){const t=_o(e,Do.TYPE);return null!=t&&"hidden"===t.toLowerCase()}function sl(e,t){e._switchToTextParsing(t,jo.RAWTEXT)}function al(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,vo.HTML)}function ol(e,t){switch(t.tagID){case Po.I:case Po.S:case Po.B:case Po.U:case Po.EM:case Po.TT:case Po.BIG:case Po.CODE:case Po.FONT:case Po.SMALL:case Po.STRIKE:case Po.STRONG:!function(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,vo.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t);break;case Po.A:!function(e,t){const n=e.activeFormattingElements.getElementEntryInScopeWithTagName(Mo.A);n&&(qc(e,t),e.openElements.remove(n.element),e.activeFormattingElements.removeEntry(n)),e._reconstructActiveFormattingElements(),e._insertElement(t,vo.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t);break;case Po.H1:case Po.H2:case Po.H3:case Po.H4:case Po.H5:case Po.H6:!function(e,t){e.openElements.hasInButtonScope(Po.P)&&e._closePElement(),Go(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,vo.HTML)}(e,t);break;case Po.P:case Po.DL:case Po.OL:case Po.UL:case Po.DIV:case Po.DIR:case Po.NAV:case Po.MAIN:case Po.MENU:case Po.ASIDE:case Po.CENTER:case Po.FIGURE:case Po.FOOTER:case Po.HEADER:case Po.HGROUP:case Po.DIALOG:case Po.DETAILS:case Po.ADDRESS:case Po.ARTICLE:case Po.SECTION:case Po.SUMMARY:case Po.FIELDSET:case Po.BLOCKQUOTE:case Po.FIGCAPTION:!function(e,t){e.openElements.hasInButtonScope(Po.P)&&e._closePElement(),e._insertElement(t,vo.HTML)}(e,t);break;case Po.LI:case Po.DD:case Po.DT:!function(e,t){e.framesetOk=!1;const n=t.tagID;for(let t=e.openElements.stackTop;t>=0;t--){const r=e.openElements.tagIDs[t];if(n===Po.LI&&r===Po.LI||(n===Po.DD||n===Po.DT)&&(r===Po.DD||r===Po.DT)){e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r);break}if(r!==Po.ADDRESS&&r!==Po.DIV&&r!==Po.P&&e._isSpecialElement(e.openElements.items[t],r))break}e.openElements.hasInButtonScope(Po.P)&&e._closePElement(),e._insertElement(t,vo.HTML)}(e,t);break;case Po.BR:case Po.IMG:case Po.WBR:case Po.AREA:case Po.EMBED:case Po.KEYGEN:rl(e,t);break;case Po.HR:!function(e,t){e.openElements.hasInButtonScope(Po.P)&&e._closePElement(),e._appendElement(t,vo.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}(e,t);break;case Po.RB:case Po.RTC:!function(e,t){e.openElements.hasInScope(Po.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,vo.HTML)}(e,t);break;case Po.RT:case Po.RP:!function(e,t){e.openElements.hasInScope(Po.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(Po.RTC),e._insertElement(t,vo.HTML)}(e,t);break;case Po.PRE:case Po.LISTING:!function(e,t){e.openElements.hasInButtonScope(Po.P)&&e._closePElement(),e._insertElement(t,vo.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}(e,t);break;case Po.XMP:!function(e,t){e.openElements.hasInButtonScope(Po.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,jo.RAWTEXT)}(e,t);break;case Po.SVG:!function(e,t){e._reconstructActiveFormattingElements(),kc(t),vc(t),t.selfClosing?e._appendElement(t,vo.SVG):e._insertElement(t,vo.SVG),t.ackSelfClosing=!0}(e,t);break;case Po.HTML:!function(e,t){0===e.openElements.tmplCount&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs)}(e,t);break;case Po.BASE:case Po.LINK:case Po.META:case Po.STYLE:case Po.TITLE:case Po.SCRIPT:case Po.BGSOUND:case Po.BASEFONT:case Po.TEMPLATE:Xc(e,t);break;case Po.BODY:!function(e,t){const n=e.openElements.tryPeekProperlyNestedBodyElement();n&&0===e.openElements.tmplCount&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(n,t.attrs))}(e,t);break;case Po.FORM:!function(e,t){const n=e.openElements.tmplCount>0;e.formElement&&!n||(e.openElements.hasInButtonScope(Po.P)&&e._closePElement(),e._insertElement(t,vo.HTML),n||(e.formElement=e.openElements.current))}(e,t);break;case Po.NOBR:!function(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(Po.NOBR)&&(qc(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,vo.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t);break;case Po.MATH:!function(e,t){e._reconstructActiveFormattingElements(),Lc(t),vc(t),t.selfClosing?e._appendElement(t,vo.MATHML):e._insertElement(t,vo.MATHML),t.ackSelfClosing=!0}(e,t);break;case Po.TABLE:!function(e,t){e.treeAdapter.getDocumentMode(e.document)!==Ro.QUIRKS&&e.openElements.hasInButtonScope(Po.P)&&e._closePElement(),e._insertElement(t,vo.HTML),e.framesetOk=!1,e.insertionMode=Rc.IN_TABLE}(e,t);break;case Po.INPUT:!function(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,vo.HTML),il(t)||(e.framesetOk=!1),t.ackSelfClosing=!0}(e,t);break;case Po.PARAM:case Po.TRACK:case Po.SOURCE:!function(e,t){e._appendElement(t,vo.HTML),t.ackSelfClosing=!0}(e,t);break;case Po.IMAGE:!function(e,t){t.tagName=Mo.IMG,t.tagID=Po.IMG,rl(e,t)}(e,t);break;case Po.BUTTON:!function(e,t){e.openElements.hasInScope(Po.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(Po.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,vo.HTML),e.framesetOk=!1}(e,t);break;case Po.APPLET:case Po.OBJECT:case Po.MARQUEE:!function(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,vo.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}(e,t);break;case Po.IFRAME:!function(e,t){e.framesetOk=!1,e._switchToTextParsing(t,jo.RAWTEXT)}(e,t);break;case Po.SELECT:!function(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,vo.HTML),e.framesetOk=!1,e.insertionMode=e.insertionMode===Rc.IN_TABLE||e.insertionMode===Rc.IN_CAPTION||e.insertionMode===Rc.IN_TABLE_BODY||e.insertionMode===Rc.IN_ROW||e.insertionMode===Rc.IN_CELL?Rc.IN_SELECT_IN_TABLE:Rc.IN_SELECT}(e,t);break;case Po.OPTION:case Po.OPTGROUP:!function(e,t){e.openElements.currentTagId===Po.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,vo.HTML)}(e,t);break;case Po.NOEMBED:sl(e,t);break;case Po.FRAMESET:!function(e,t){const n=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&n&&(e.treeAdapter.detachNode(n),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,vo.HTML),e.insertionMode=Rc.IN_FRAMESET)}(e,t);break;case Po.TEXTAREA:!function(e,t){e._insertElement(t,vo.HTML),e.skipNextNewLine=!0,e.tokenizer.state=jo.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=Rc.TEXT}(e,t);break;case Po.NOSCRIPT:e.options.scriptingEnabled?sl(e,t):al(e,t);break;case Po.PLAINTEXT:!function(e,t){e.openElements.hasInButtonScope(Po.P)&&e._closePElement(),e._insertElement(t,vo.HTML),e.tokenizer.state=jo.PLAINTEXT}(e,t);break;case Po.COL:case Po.TH:case Po.TD:case Po.TR:case Po.HEAD:case Po.FRAME:case Po.TBODY:case Po.TFOOT:case Po.THEAD:case Po.CAPTION:case Po.COLGROUP:break;default:al(e,t)}}function cl(e,t){const n=t.tagName,r=t.tagID;for(let t=e.openElements.stackTop;t>0;t--){const i=e.openElements.items[t],s=e.openElements.tagIDs[t];if(r===s&&(r!==Po.UNKNOWN||e.treeAdapter.getTagName(i)===n)){e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.stackTop>=t&&e.openElements.shortenToLength(t);break}if(e._isSpecialElement(i,s))break}}function ll(e,t){switch(t.tagID){case Po.A:case Po.B:case Po.I:case Po.S:case Po.U:case Po.EM:case Po.TT:case Po.BIG:case Po.CODE:case Po.FONT:case Po.NOBR:case Po.SMALL:case Po.STRIKE:case Po.STRONG:qc(e,t);break;case Po.P:!function(e){e.openElements.hasInButtonScope(Po.P)||e._insertFakeElement(Mo.P,Po.P),e._closePElement()}(e);break;case Po.DL:case Po.UL:case Po.OL:case Po.DIR:case Po.DIV:case Po.NAV:case Po.PRE:case Po.MAIN:case Po.MENU:case Po.ASIDE:case Po.BUTTON:case Po.CENTER:case Po.FIGURE:case Po.FOOTER:case Po.HEADER:case Po.HGROUP:case Po.DIALOG:case Po.ADDRESS:case Po.ARTICLE:case Po.DETAILS:case Po.SECTION:case Po.SUMMARY:case Po.LISTING:case Po.FIELDSET:case Po.BLOCKQUOTE:case Po.FIGCAPTION:!function(e,t){const n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n))}(e,t);break;case Po.LI:!function(e){e.openElements.hasInListItemScope(Po.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(Po.LI),e.openElements.popUntilTagNamePopped(Po.LI))}(e);break;case Po.DD:case Po.DT:!function(e,t){const n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n))}(e,t);break;case Po.H1:case Po.H2:case Po.H3:case Po.H4:case Po.H5:case Po.H6:!function(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}(e);break;case Po.BR:!function(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(Mo.BR,Po.BR),e.openElements.pop(),e.framesetOk=!1}(e);break;case Po.BODY:!function(e,t){if(e.openElements.hasInScope(Po.BODY)&&(e.insertionMode=Rc.AFTER_BODY,e.options.sourceCodeLocationInfo)){const n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e._setEndLocation(n,t)}}(e,t);break;case Po.HTML:!function(e,t){e.openElements.hasInScope(Po.BODY)&&(e.insertionMode=Rc.AFTER_BODY,Ll(e,t))}(e,t);break;case Po.FORM:!function(e){const t=e.openElements.tmplCount>0,{formElement:n}=e;t||(e.formElement=null),(n||t)&&e.openElements.hasInScope(Po.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(Po.FORM):n&&e.openElements.remove(n))}(e);break;case Po.APPLET:case Po.OBJECT:case Po.MARQUEE:!function(e,t){const n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker())}(e,t);break;case Po.TEMPLATE:$c(e,t);break;default:cl(e,t)}}function hl(e,t){e.tmplInsertionModeStack.length>0?yl(e,t):jc(e,t)}function ul(e,t){if(Pc.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=Rc.IN_TABLE_TEXT,t.type){case To.CHARACTER:ml(e,t);break;case To.WHITESPACE_CHARACTER:El(e,t)}else dl(e,t)}function pl(e,t){switch(t.tagID){case Po.TD:case Po.TH:case Po.TR:!function(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(Mo.TBODY,Po.TBODY),e.insertionMode=Rc.IN_TABLE_BODY,Nl(e,t)}(e,t);break;case Po.STYLE:case Po.SCRIPT:case Po.TEMPLATE:Xc(e,t);break;case Po.COL:!function(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(Mo.COLGROUP,Po.COLGROUP),e.insertionMode=Rc.IN_COLUMN_GROUP,Al(e,t)}(e,t);break;case Po.FORM:!function(e,t){e.formElement||0!==e.openElements.tmplCount||(e._insertElement(t,vo.HTML),e.formElement=e.openElements.current,e.openElements.pop())}(e,t);break;case Po.TABLE:!function(e,t){e.openElements.hasInTableScope(Po.TABLE)&&(e.openElements.popUntilTagNamePopped(Po.TABLE),e._resetInsertionMode(),e._processStartTag(t))}(e,t);break;case Po.TBODY:case Po.TFOOT:case Po.THEAD:!function(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,vo.HTML),e.insertionMode=Rc.IN_TABLE_BODY}(e,t);break;case Po.INPUT:!function(e,t){il(t)?e._appendElement(t,vo.HTML):dl(e,t),t.ackSelfClosing=!0}(e,t);break;case Po.CAPTION:!function(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,vo.HTML),e.insertionMode=Rc.IN_CAPTION}(e,t);break;case Po.COLGROUP:!function(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,vo.HTML),e.insertionMode=Rc.IN_COLUMN_GROUP}(e,t);break;default:dl(e,t)}}function fl(e,t){switch(t.tagID){case Po.TABLE:e.openElements.hasInTableScope(Po.TABLE)&&(e.openElements.popUntilTagNamePopped(Po.TABLE),e._resetInsertionMode());break;case Po.TEMPLATE:$c(e,t);break;case Po.BODY:case Po.CAPTION:case Po.COL:case Po.COLGROUP:case Po.HTML:case Po.TBODY:case Po.TD:case Po.TFOOT:case Po.TH:case Po.THEAD:case Po.TR:break;default:dl(e,t)}}function dl(e,t){const n=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,el(e,t),e.fosterParentingEnabled=n}function El(e,t){e.pendingCharacterTokens.push(t)}function ml(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=!0}function Tl(e,t){let n=0;if(e.hasNonWhitespacePendingCharacterToken)for(;n0&&e.openElements.currentTagId===Po.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===Po.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===Po.OPTGROUP&&e.openElements.pop();break;case Po.OPTION:e.openElements.currentTagId===Po.OPTION&&e.openElements.pop();break;case Po.SELECT:e.openElements.hasInSelectScope(Po.SELECT)&&(e.openElements.popUntilTagNamePopped(Po.SELECT),e._resetInsertionMode());break;case Po.TEMPLATE:$c(e,t)}}function yl(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(Po.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):jc(e,t)}function Ll(e,t){var n;if(t.tagID===Po.HTML){if(e.fragmentContext||(e.insertionMode=Rc.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===Po.HTML){e._setEndLocation(e.openElements.items[0],t);const r=e.openElements.items[1];r&&!(null===(n=e.treeAdapter.getNodeSourceCodeLocation(r))||void 0===n?void 0:n.endTag)&&e._setEndLocation(r,t)}}else kl(e,t)}function kl(e,t){e.insertionMode=Rc.IN_BODY,el(e,t)}function vl(e,t){e.insertionMode=Rc.IN_BODY,el(e,t)}function Dl(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==vo.HTML&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop()}var Rl=Ke((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.escapeText=t.escapeAttribute=t.escapeUTF8=t.escape=t.encodeXML=t.getCodePoint=t.xmlReplacer=void 0,t.xmlReplacer=/["&'<>$\x80-\uFFFF]/g;var n=new Map([[34,"""],[38,"&"],[39,"'"],[60,"<"],[62,">"]]);function r(e){for(var r,i="",s=0;null!==(r=t.xmlReplacer.exec(e));){var a=r.index,o=e.charCodeAt(a),c=n.get(o);void 0!==c?(i+=e.substring(s,a)+c,s=a+1):(i+="".concat(e.substring(s,a),"&#x").concat((0,t.getCodePoint)(e,a).toString(16),";"),s=t.xmlReplacer.lastIndex+=Number(55296==(64512&o)))}return i+e.substr(s)}function i(e,t){return function(n){for(var r,i=0,s="";r=e.exec(n);)i!==r.index&&(s+=n.substring(i,r.index)),s+=t.get(r[0].charCodeAt(0)),i=r.index+1;return s+n.substring(i)}}t.getCodePoint=null!=String.prototype.codePointAt?function(e,t){return e.codePointAt(t)}:function(e,t){return 55296==(64512&e.charCodeAt(t))?1024*(e.charCodeAt(t)-55296)+e.charCodeAt(t+1)-56320+65536:e.charCodeAt(t)},t.encodeXML=r,t.escape=r,t.escapeUTF8=i(/[&<>'"]/g,n),t.escapeAttribute=i(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),t.escapeText=i(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]]))}));qe(Rl);var Ml=Rl.escapeText,Pl=Rl.escapeAttribute;Rl.escapeUTF8,Rl.escape,Rl.encodeXML,Rl.getCodePoint,Rl.xmlReplacer;const xl=new Set([Mo.AREA,Mo.BASE,Mo.BASEFONT,Mo.BGSOUND,Mo.BR,Mo.COL,Mo.EMBED,Mo.FRAME,Mo.HR,Mo.IMG,Mo.INPUT,Mo.KEYGEN,Mo.LINK,Mo.META,Mo.PARAM,Mo.SOURCE,Mo.TRACK,Mo.WBR]);const wl={treeAdapter:Ec,scriptingEnabled:!0};function Bl(e,t){return Fl(e,{...wl,...t})}function Fl(e,t){return t.treeAdapter.isElementNode(e)?function(e,t){const n=t.treeAdapter.getTagName(e);return`<${n}${function(e,{treeAdapter:t}){let n="";for(const r of t.getAttrList(e)){if(n+=" ",r.namespace)switch(r.namespace){case vo.XML:n+=`xml:${r.name}`;break;case vo.XMLNS:"xmlns"!==r.name&&(n+="xmlns:"),n+=r.name;break;case vo.XLINK:n+=`xlink:${r.name}`;break;default:n+=`${r.prefix}:${r.name}`}else n+=r.name;n+=`="${Pl(r.value)}"`}return n}(e,t)}>${function(e,t){return t.treeAdapter.isElementNode(e)&&t.treeAdapter.getNamespaceURI(e)===vo.HTML&&xl.has(t.treeAdapter.getTagName(e))}(e,t)?"":`${function(e,t){let n="";const r=t.treeAdapter.isElementNode(e)&&t.treeAdapter.getTagName(e)===Mo.TEMPLATE&&t.treeAdapter.getNamespaceURI(e)===vo.HTML?t.treeAdapter.getTemplateContent(e):e,i=t.treeAdapter.getChildNodes(r);if(i)for(const e of i)n+=Fl(e,t);return n}(e,t)}`}`}(e,t):t.treeAdapter.isTextNode(e)?function(e,t){const{treeAdapter:n}=t,r=n.getTextNodeContent(e),i=n.getParentNode(e),s=i&&n.isElementNode(i)&&n.getTagName(i);return s&&n.getNamespaceURI(i)===vo.HTML&&(a=s,o=t.scriptingEnabled,Yo.has(a)||o&&a===Mo.NOSCRIPT)?r:Ml(r);var a,o}(e,t):t.treeAdapter.isCommentNode(e)?function(e,{treeAdapter:t}){return`\x3c!--${t.getCommentNodeContent(e)}--\x3e`}(e,t):t.treeAdapter.isDocumentTypeNode(e)?function(e,{treeAdapter:t}){return``}(e,t):""}function Ul(e){return new m(e)}function Hl(e){const t=e.includes('"')?"'":'"';return t+e+t}const Gl={isCommentNode:O,isElementNode:I,isTextNode:b,createDocument(){const e=new N([]);return e["x-mode"]=Ro.NO_QUIRKS,e},createDocumentFragment:()=>new N([]),createElement(e,t,n){const r=Object.create(null),i=Object.create(null),s=Object.create(null);for(let e=0;enew T(e),appendChild(e,t){const n=e.children[e.children.length-1];n&&(n.next=t,t.prev=n),e.children.push(t),t.parent=e},insertBefore(e,t,n){const r=e.children.indexOf(n),{prev:i}=n;i&&(i.next=t,t.prev=i),n.prev=t,t.next=n,e.children.splice(r,0,t),t.parent=e},setTemplateContent(e,t){Gl.appendChild(e,t)},getTemplateContent:e=>e.children[0],setDocumentType(e,t,n,r){const i=function(e,t,n){let r="!DOCTYPE ";return e&&(r+=e),t?r+=` PUBLIC ${Hl(t)}`:n&&(r+=" SYSTEM"),n&&(r+=` ${Hl(n)}`),r}(t,n,r);let s=e.children.find((e=>y(e)&&"!doctype"===e.name));s?s.data=null!=i?i:null:(s=new _("!doctype",i),Gl.appendChild(e,s)),s["x-name"]=null!=t?t:void 0,s["x-publicId"]=null!=n?n:void 0,s["x-systemId"]=null!=r?r:void 0},setDocumentMode(e,t){e["x-mode"]=t},getDocumentMode:e=>e["x-mode"],detachNode(e){if(e.parent){const t=e.parent.children.indexOf(e),{prev:n,next:r}=e;e.prev=null,e.next=null,n&&(n.next=r),r&&(r.prev=n),e.parent.children.splice(t,1),e.parent=null}},insertText(e,t){const n=e.children[e.children.length-1];n&&b(n)?n.data+=t:Gl.appendChild(e,Ul(t))},insertTextBefore(e,t,n){const r=e.children[e.children.indexOf(n)-1];r&&b(r)?r.data+=t:Gl.insertBefore(e,Ul(t),n)},adoptAttributes(e,t){for(let n=0;ne.children[0],getChildNodes:e=>e.children,getParentNode:e=>e.parent,getAttrList:e=>e.attributes,getTagName:e=>e.name,getNamespaceURI:e=>e.namespace,getTextNodeContent:e=>e.data,getCommentNodeContent:e=>e.data,getDocumentTypeNodeName(e){var t;return null!==(t=e["x-name"])&&void 0!==t?t:""},getDocumentTypeNodePublicId(e){var t;return null!==(t=e["x-publicId"])&&void 0!==t?t:""},getDocumentTypeNodeSystemId(e){var t;return null!==(t=e["x-systemId"])&&void 0!==t?t:""},isDocumentTypeNode:e=>y(e)&&"!doctype"===e.name,setNodeSourceCodeLocation(e,t){t&&(e.startIndex=t.startOffset,e.endIndex=t.endOffset),e.sourceCodeLocation=t},getNodeSourceCodeLocation:e=>e.sourceCodeLocation,updateNodeSourceCodeLocation(e,t){null!=t.endOffset&&(e.endIndex=t.endOffset),e.sourceCodeLocation={...e.sourceCodeLocation,...t}}};var Yl=function(e,t,n){if(n||2===arguments.length)for(var r,i=0,s=t.length;i=Kl.Zero&&e<=Kl.Nine}!function(e){e[e.Tab=9]="Tab",e[e.NewLine=10]="NewLine",e[e.FormFeed=12]="FormFeed",e[e.CarriageReturn=13]="CarriageReturn",e[e.Space=32]="Space",e[e.ExclamationMark=33]="ExclamationMark",e[e.Num=35]="Num",e[e.Amp=38]="Amp",e[e.SingleQuote=39]="SingleQuote",e[e.DoubleQuote=34]="DoubleQuote",e[e.Dash=45]="Dash",e[e.Slash=47]="Slash",e[e.Zero=48]="Zero",e[e.Nine=57]="Nine",e[e.Semi=59]="Semi",e[e.Lt=60]="Lt",e[e.Eq=61]="Eq",e[e.Gt=62]="Gt",e[e.Questionmark=63]="Questionmark",e[e.UpperA=65]="UpperA",e[e.LowerA=97]="LowerA",e[e.UpperF=70]="UpperF",e[e.LowerF=102]="LowerF",e[e.UpperZ=90]="UpperZ",e[e.LowerZ=122]="LowerZ",e[e.LowerX=120]="LowerX",e[e.OpeningSquareBracket=91]="OpeningSquareBracket"}(Kl||(Kl={})),function(e){e[e.Text=1]="Text",e[e.BeforeTagName=2]="BeforeTagName",e[e.InTagName=3]="InTagName",e[e.InSelfClosingTag=4]="InSelfClosingTag",e[e.BeforeClosingTagName=5]="BeforeClosingTagName",e[e.InClosingTagName=6]="InClosingTagName",e[e.AfterClosingTagName=7]="AfterClosingTagName",e[e.BeforeAttributeName=8]="BeforeAttributeName",e[e.InAttributeName=9]="InAttributeName",e[e.AfterAttributeName=10]="AfterAttributeName",e[e.BeforeAttributeValue=11]="BeforeAttributeValue",e[e.InAttributeValueDq=12]="InAttributeValueDq",e[e.InAttributeValueSq=13]="InAttributeValueSq",e[e.InAttributeValueNq=14]="InAttributeValueNq",e[e.BeforeDeclaration=15]="BeforeDeclaration",e[e.InDeclaration=16]="InDeclaration",e[e.InProcessingInstruction=17]="InProcessingInstruction",e[e.BeforeComment=18]="BeforeComment",e[e.CDATASequence=19]="CDATASequence",e[e.InSpecialComment=20]="InSpecialComment",e[e.InCommentLike=21]="InCommentLike",e[e.BeforeSpecialS=22]="BeforeSpecialS",e[e.SpecialStartSequence=23]="SpecialStartSequence",e[e.InSpecialTag=24]="InSpecialTag",e[e.BeforeEntity=25]="BeforeEntity",e[e.BeforeNumericEntity=26]="BeforeNumericEntity",e[e.InNamedEntity=27]="InNamedEntity",e[e.InNumericEntity=28]="InNumericEntity",e[e.InHexEntity=29]="InHexEntity"}(jl||(jl={})),function(e){e[e.NoValue=0]="NoValue",e[e.Unquoted=1]="Unquoted",e[e.Single=2]="Single",e[e.Double=3]="Double"}(Vl||(Vl={}));const zl={Cdata:new Uint8Array([67,68,65,84,65,91]),CdataEnd:new Uint8Array([93,93,62]),CommentEnd:new Uint8Array([45,45,62]),ScriptEnd:new Uint8Array([60,47,115,99,114,105,112,116]),StyleEnd:new Uint8Array([60,47,115,116,121,108,101]),TitleEnd:new Uint8Array([60,47,116,105,116,108,101])};class Jl{constructor({xmlMode:e=!1,decodeEntities:t=!0},n){this.cbs=n,this.state=jl.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=jl.Text,this.isSpecial=!1,this.running=!0,this.offset=0,this.sequenceIndex=0,this.trieIndex=0,this.trieCurrent=0,this.entityResult=0,this.entityExcess=0,this.xmlMode=e,this.decodeEntities=t,this.entityTrie=e?xo:wo}reset(){this.state=jl.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=jl.Text,this.currentSequence=void 0,this.running=!0,this.offset=0}write(e){this.offset+=this.buffer.length,this.buffer=e,this.parse()}end(){this.running&&this.finish()}pause(){this.running=!1}resume(){this.running=!0,this.indexthis.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=jl.BeforeTagName,this.sectionStart=this.index):this.decodeEntities&&e===Kl.Amp&&(this.state=jl.BeforeEntity)}stateSpecialStartSequence(e){const t=this.sequenceIndex===this.currentSequence.length;if(t?Xl(e):(32|e)===this.currentSequence[this.sequenceIndex]){if(!t)return void this.sequenceIndex++}else this.isSpecial=!1;this.sequenceIndex=0,this.state=jl.InTagName,this.stateInTagName(e)}stateInSpecialTag(e){if(this.sequenceIndex===this.currentSequence.length){if(e===Kl.Gt||Ql(e)){const t=this.index-this.currentSequence.length;if(this.sectionStart=Kl.LowerA&&e<=Kl.LowerZ||e>=Kl.UpperA&&e<=Kl.UpperZ}(e)}startSpecial(e,t){this.isSpecial=!0,this.currentSequence=e,this.sequenceIndex=t,this.state=jl.SpecialStartSequence}stateBeforeTagName(e){if(e===Kl.ExclamationMark)this.state=jl.BeforeDeclaration,this.sectionStart=this.index+1;else if(e===Kl.Questionmark)this.state=jl.InProcessingInstruction,this.sectionStart=this.index+1;else if(this.isTagStartChar(e)){const t=32|e;this.sectionStart=this.index,this.xmlMode||t!==zl.TitleEnd[2]?this.state=this.xmlMode||t!==zl.ScriptEnd[2]?jl.InTagName:jl.BeforeSpecialS:this.startSpecial(zl.TitleEnd,3)}else e===Kl.Slash?this.state=jl.BeforeClosingTagName:(this.state=jl.Text,this.stateText(e))}stateInTagName(e){Xl(e)&&(this.cbs.onopentagname(this.sectionStart,this.index),this.sectionStart=-1,this.state=jl.BeforeAttributeName,this.stateBeforeAttributeName(e))}stateBeforeClosingTagName(e){Ql(e)||(e===Kl.Gt?this.state=jl.Text:(this.state=this.isTagStartChar(e)?jl.InClosingTagName:jl.InSpecialComment,this.sectionStart=this.index))}stateInClosingTagName(e){(e===Kl.Gt||Ql(e))&&(this.cbs.onclosetag(this.sectionStart,this.index),this.sectionStart=-1,this.state=jl.AfterClosingTagName,this.stateAfterClosingTagName(e))}stateAfterClosingTagName(e){(e===Kl.Gt||this.fastForwardTo(Kl.Gt))&&(this.state=jl.Text,this.sectionStart=this.index+1)}stateBeforeAttributeName(e){e===Kl.Gt?(this.cbs.onopentagend(this.index),this.isSpecial?(this.state=jl.InSpecialTag,this.sequenceIndex=0):this.state=jl.Text,this.baseState=this.state,this.sectionStart=this.index+1):e===Kl.Slash?this.state=jl.InSelfClosingTag:Ql(e)||(this.state=jl.InAttributeName,this.sectionStart=this.index)}stateInSelfClosingTag(e){e===Kl.Gt?(this.cbs.onselfclosingtag(this.index),this.state=jl.Text,this.baseState=jl.Text,this.sectionStart=this.index+1,this.isSpecial=!1):Ql(e)||(this.state=jl.BeforeAttributeName,this.stateBeforeAttributeName(e))}stateInAttributeName(e){(e===Kl.Eq||Xl(e))&&(this.cbs.onattribname(this.sectionStart,this.index),this.sectionStart=-1,this.state=jl.AfterAttributeName,this.stateAfterAttributeName(e))}stateAfterAttributeName(e){e===Kl.Eq?this.state=jl.BeforeAttributeValue:e===Kl.Slash||e===Kl.Gt?(this.cbs.onattribend(Vl.NoValue,this.index),this.state=jl.BeforeAttributeName,this.stateBeforeAttributeName(e)):Ql(e)||(this.cbs.onattribend(Vl.NoValue,this.index),this.state=jl.InAttributeName,this.sectionStart=this.index)}stateBeforeAttributeValue(e){e===Kl.DoubleQuote?(this.state=jl.InAttributeValueDq,this.sectionStart=this.index+1):e===Kl.SingleQuote?(this.state=jl.InAttributeValueSq,this.sectionStart=this.index+1):Ql(e)||(this.sectionStart=this.index,this.state=jl.InAttributeValueNq,this.stateInAttributeValueNoQuotes(e))}handleInAttributeValue(e,t){e===t||!this.decodeEntities&&this.fastForwardTo(t)?(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(t===Kl.DoubleQuote?Vl.Double:Vl.Single,this.index),this.state=jl.BeforeAttributeName):this.decodeEntities&&e===Kl.Amp&&(this.baseState=this.state,this.state=jl.BeforeEntity)}stateInAttributeValueDoubleQuotes(e){this.handleInAttributeValue(e,Kl.DoubleQuote)}stateInAttributeValueSingleQuotes(e){this.handleInAttributeValue(e,Kl.SingleQuote)}stateInAttributeValueNoQuotes(e){Ql(e)||e===Kl.Gt?(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(Vl.Unquoted,this.index),this.state=jl.BeforeAttributeName,this.stateBeforeAttributeName(e)):this.decodeEntities&&e===Kl.Amp&&(this.baseState=this.state,this.state=jl.BeforeEntity)}stateBeforeDeclaration(e){e===Kl.OpeningSquareBracket?(this.state=jl.CDATASequence,this.sequenceIndex=0):this.state=e===Kl.Dash?jl.BeforeComment:jl.InDeclaration}stateInDeclaration(e){(e===Kl.Gt||this.fastForwardTo(Kl.Gt))&&(this.cbs.ondeclaration(this.sectionStart,this.index),this.state=jl.Text,this.sectionStart=this.index+1)}stateInProcessingInstruction(e){(e===Kl.Gt||this.fastForwardTo(Kl.Gt))&&(this.cbs.onprocessinginstruction(this.sectionStart,this.index),this.state=jl.Text,this.sectionStart=this.index+1)}stateBeforeComment(e){e===Kl.Dash?(this.state=jl.InCommentLike,this.currentSequence=zl.CommentEnd,this.sequenceIndex=2,this.sectionStart=this.index+1):this.state=jl.InDeclaration}stateInSpecialComment(e){(e===Kl.Gt||this.fastForwardTo(Kl.Gt))&&(this.cbs.oncomment(this.sectionStart,this.index,0),this.state=jl.Text,this.sectionStart=this.index+1)}stateBeforeSpecialS(e){const t=32|e;t===zl.ScriptEnd[3]?this.startSpecial(zl.ScriptEnd,4):t===zl.StyleEnd[3]?this.startSpecial(zl.StyleEnd,4):(this.state=jl.InTagName,this.stateInTagName(e))}stateBeforeEntity(e){this.entityExcess=1,this.entityResult=0,e===Kl.Num?this.state=jl.BeforeNumericEntity:e===Kl.Amp||(this.trieIndex=0,this.trieCurrent=this.entityTrie[0],this.state=jl.InNamedEntity,this.stateInNamedEntity(e))}stateInNamedEntity(e){if(this.entityExcess+=1,this.trieIndex=Oo(this.entityTrie,this.trieCurrent,this.trieIndex+1,e),this.trieIndex<0)return this.emitNamedEntity(),void this.index--;this.trieCurrent=this.entityTrie[this.trieIndex];const t=this.trieCurrent&yo.VALUE_LENGTH;if(t){const n=(t>>14)-1;if(this.allowLegacyEntity()||e===Kl.Semi){const e=this.index-this.entityExcess+1;e>this.sectionStart&&this.emitPartial(this.sectionStart,e),this.entityResult=this.trieIndex,this.trieIndex+=n,this.entityExcess=0,this.sectionStart=this.index+1,0===n&&this.emitNamedEntity()}else this.trieIndex+=n}}emitNamedEntity(){if(this.state=this.baseState,0===this.entityResult)return;switch((this.entityTrie[this.entityResult]&yo.VALUE_LENGTH)>>14){case 1:this.emitCodePoint(this.entityTrie[this.entityResult]&~yo.VALUE_LENGTH);break;case 2:this.emitCodePoint(this.entityTrie[this.entityResult+1]);break;case 3:this.emitCodePoint(this.entityTrie[this.entityResult+1]),this.emitCodePoint(this.entityTrie[this.entityResult+2])}}stateBeforeNumericEntity(e){(32|e)===Kl.LowerX?(this.entityExcess++,this.state=jl.InHexEntity):(this.state=jl.InNumericEntity,this.stateInNumericEntity(e))}emitNumericEntity(e){const t=this.index-this.entityExcess-1;t+2+Number(this.state===jl.InHexEntity)!==this.index&&(t>this.sectionStart&&this.emitPartial(this.sectionStart,t),this.sectionStart=this.index+Number(e),this.emitCodePoint(ko(this.entityResult))),this.state=this.baseState}stateInNumericEntity(e){e===Kl.Semi?this.emitNumericEntity(!0):$l(e)?(this.entityResult=10*this.entityResult+(e-Kl.Zero),this.entityExcess++):(this.allowLegacyEntity()?this.emitNumericEntity(!1):this.state=this.baseState,this.index--)}stateInHexEntity(e){e===Kl.Semi?this.emitNumericEntity(!0):$l(e)?(this.entityResult=16*this.entityResult+(e-Kl.Zero),this.entityExcess++):!function(e){return e>=Kl.UpperA&&e<=Kl.UpperF||e>=Kl.LowerA&&e<=Kl.LowerF}(e)?(this.allowLegacyEntity()?this.emitNumericEntity(!1):this.state=this.baseState,this.index--):(this.entityResult=16*this.entityResult+((32|e)-Kl.LowerA+10),this.entityExcess++)}allowLegacyEntity(){return!this.xmlMode&&(this.baseState===jl.Text||this.baseState===jl.InSpecialTag)}cleanup(){this.running&&this.sectionStart!==this.index&&(this.state===jl.Text||this.state===jl.InSpecialTag&&0===this.sequenceIndex?(this.cbs.ontext(this.sectionStart,this.index),this.sectionStart=this.index):this.state!==jl.InAttributeValueDq&&this.state!==jl.InAttributeValueSq&&this.state!==jl.InAttributeValueNq||(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=this.index))}shouldContinue(){return this.index0&&s.has(this.stack[this.stack.length-1]);){const e=this.stack.pop();null===(n=(t=this.cbs).onclosetag)||void 0===n||n.call(t,e,!0)}this.isVoidElement(e)||(this.stack.push(e),ah.has(e)?this.foreignContext.push(!0):oh.has(e)&&this.foreignContext.push(!1)),null===(i=(r=this.cbs).onopentagname)||void 0===i||i.call(r,e),this.cbs.onopentag&&(this.attribs={})}endOpenTag(e){var t,n;this.startIndex=this.openTagStart,this.attribs&&(null===(n=(t=this.cbs).onopentag)||void 0===n||n.call(t,this.tagname,this.attribs,e),this.attribs=null),this.cbs.onclosetag&&this.isVoidElement(this.tagname)&&this.cbs.onclosetag(this.tagname,!0),this.tagname=""}onopentagend(e){this.endIndex=e,this.endOpenTag(!1),this.startIndex=e+1}onclosetag(e,t){var n,r,i,s,a,o;this.endIndex=t;let c=this.getSlice(e,t);if(this.lowerCaseTagNames&&(c=c.toLowerCase()),(ah.has(c)||oh.has(c))&&this.foreignContext.pop(),this.isVoidElement(c))this.options.xmlMode||"br"!==c||(null===(r=(n=this.cbs).onopentagname)||void 0===r||r.call(n,"br"),null===(s=(i=this.cbs).onopentag)||void 0===s||s.call(i,"br",{},!0),null===(o=(a=this.cbs).onclosetag)||void 0===o||o.call(a,"br",!1));else{const e=this.stack.lastIndexOf(c);if(-1!==e)if(this.cbs.onclosetag){let t=this.stack.length-e;for(;t--;)this.cbs.onclosetag(this.stack.pop(),0!==t)}else this.stack.length=e;else this.options.xmlMode||"p"!==c||(this.emitOpenTag("p"),this.closeCurrentTag(!0))}this.startIndex=t+1}onselfclosingtag(e){this.endIndex=e,this.options.xmlMode||this.options.recognizeSelfClosing||this.foreignContext[this.foreignContext.length-1]?(this.closeCurrentTag(!1),this.startIndex=e+1):this.onopentagend(e)}closeCurrentTag(e){var t,n;const r=this.tagname;this.endOpenTag(e),this.stack[this.stack.length-1]===r&&(null===(n=(t=this.cbs).onclosetag)||void 0===n||n.call(t,r,!e),this.stack.pop())}onattribname(e,t){this.startIndex=e;const n=this.getSlice(e,t);this.attribname=this.lowerCaseAttributeNames?n.toLowerCase():n}onattribdata(e,t){this.attribvalue+=this.getSlice(e,t)}onattribentity(e){this.attribvalue+=Lo(e)}onattribend(e,t){var n,r;this.endIndex=t,null===(r=(n=this.cbs).onattribute)||void 0===r||r.call(n,this.attribname,this.attribvalue,e===Vl.Double?'"':e===Vl.Single?"'":e===Vl.NoValue?void 0:null),this.attribs&&!Object.prototype.hasOwnProperty.call(this.attribs,this.attribname)&&(this.attribs[this.attribname]=this.attribvalue),this.attribvalue=""}getInstructionName(e){const t=e.search(ch);let n=t<0?e:e.substr(0,t);return this.lowerCaseTagNames&&(n=n.toLowerCase()),n}ondeclaration(e,t){this.endIndex=t;const n=this.getSlice(e,t);if(this.cbs.onprocessinginstruction){const e=this.getInstructionName(n);this.cbs.onprocessinginstruction(`!${e}`,`!${n}`)}this.startIndex=t+1}onprocessinginstruction(e,t){this.endIndex=t;const n=this.getSlice(e,t);if(this.cbs.onprocessinginstruction){const e=this.getInstructionName(n);this.cbs.onprocessinginstruction(`?${e}`,`?${n}`)}this.startIndex=t+1}oncomment(e,t,n){var r,i,s,a;this.endIndex=t,null===(i=(r=this.cbs).oncomment)||void 0===i||i.call(r,this.getSlice(e,t-n)),null===(a=(s=this.cbs).oncommentend)||void 0===a||a.call(s),this.startIndex=t+1}oncdata(e,t,n){var r,i,s,a,o,c,l,h,u,p;this.endIndex=t;const f=this.getSlice(e,t-n);this.options.xmlMode||this.options.recognizeCDATA?(null===(i=(r=this.cbs).oncdatastart)||void 0===i||i.call(r),null===(a=(s=this.cbs).ontext)||void 0===a||a.call(s,f),null===(c=(o=this.cbs).oncdataend)||void 0===c||c.call(o)):(null===(h=(l=this.cbs).oncomment)||void 0===h||h.call(l,`[CDATA[${f}]]`),null===(p=(u=this.cbs).oncommentend)||void 0===p||p.call(u)),this.startIndex=t+1}onend(){var e,t;if(this.cbs.onclosetag){this.endIndex=this.startIndex;for(let e=this.stack.length;e>0;this.cbs.onclosetag(this.stack[--e],!0));}null===(t=(e=this.cbs).onend)||void 0===t||t.call(e)}reset(){var e,t,n,r;null===(t=(e=this.cbs).onreset)||void 0===t||t.call(e),this.tokenizer.reset(),this.tagname="",this.attribname="",this.attribs=null,this.stack.length=0,this.startIndex=0,this.endIndex=0,null===(r=(n=this.cbs).onparserinit)||void 0===r||r.call(n,this),this.buffers.length=0,this.bufferOffset=0,this.writeIndex=0,this.ended=!1}parseComplete(e){this.reset(),this.end(e)}getSlice(e,t){for(;e-this.bufferOffset>=this.buffers[0].length;)this.shiftBuffer();let n=this.buffers[0].slice(e-this.bufferOffset,t-this.bufferOffset);for(;t-this.bufferOffset>this.buffers[0].length;)this.shiftBuffer(),n+=this.buffers[0].slice(0,t-this.bufferOffset);return n}shiftBuffer(){this.bufferOffset+=this.buffers[0].length,this.writeIndex--,this.buffers.shift()}write(e){var t,n;this.ended?null===(n=(t=this.cbs).onerror)||void 0===n||n.call(t,new Error(".write() after done!")):(this.buffers.push(e),this.tokenizer.running&&(this.tokenizer.write(e),this.writeIndex++))}end(e){var t,n;this.ended?null===(n=(t=this.cbs).onerror)||void 0===n||n.call(t,Error(".end() after done!")):(e&&this.write(e),this.ended=!0,this.tokenizer.end())}pause(){this.tokenizer.pause()}resume(){for(this.tokenizer.resume();this.tokenizer.running&&this.writeIndex>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else { - // Copy one word at a time - for (var j = 0; j < thatSigBytes; j += 4) { - thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2]; - } - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - for (var i = 0; i < nBytes; i += 4) { - words.push(cryptoSecureRandomInt()); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - var processedWords; - - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var X32WordArray = C_lib.WordArray; - - /** - * x64 namespace. - */ - var C_x64 = C.x64 = {}; - - /** - * A 64-bit word. - */ - var X64Word = C_x64.Word = Base.extend({ - /** - * Initializes a newly created 64-bit word. - * - * @param {number} high The high 32 bits. - * @param {number} low The low 32 bits. - * - * @example - * - * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); - */ - init: function (high, low) { - this.high = high; - this.low = low; - } - - /** - * Bitwise NOTs this word. - * - * @return {X64Word} A new x64-Word object after negating. - * - * @example - * - * var negated = x64Word.not(); - */ - // not: function () { - // var high = ~this.high; - // var low = ~this.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ANDs this word with the passed word. - * - * @param {X64Word} word The x64-Word to AND with this word. - * - * @return {X64Word} A new x64-Word object after ANDing. - * - * @example - * - * var anded = x64Word.and(anotherX64Word); - */ - // and: function (word) { - // var high = this.high & word.high; - // var low = this.low & word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to OR with this word. - * - * @return {X64Word} A new x64-Word object after ORing. - * - * @example - * - * var ored = x64Word.or(anotherX64Word); - */ - // or: function (word) { - // var high = this.high | word.high; - // var low = this.low | word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise XORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to XOR with this word. - * - * @return {X64Word} A new x64-Word object after XORing. - * - * @example - * - * var xored = x64Word.xor(anotherX64Word); - */ - // xor: function (word) { - // var high = this.high ^ word.high; - // var low = this.low ^ word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the left. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftL(25); - */ - // shiftL: function (n) { - // if (n < 32) { - // var high = (this.high << n) | (this.low >>> (32 - n)); - // var low = this.low << n; - // } else { - // var high = this.low << (n - 32); - // var low = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the right. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftR(7); - */ - // shiftR: function (n) { - // if (n < 32) { - // var low = (this.low >>> n) | (this.high << (32 - n)); - // var high = this.high >>> n; - // } else { - // var low = this.high >>> (n - 32); - // var high = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Rotates this word n bits to the left. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotL(25); - */ - // rotL: function (n) { - // return this.shiftL(n).or(this.shiftR(64 - n)); - // }, - - /** - * Rotates this word n bits to the right. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotR(7); - */ - // rotR: function (n) { - // return this.shiftR(n).or(this.shiftL(64 - n)); - // }, - - /** - * Adds this word with the passed word. - * - * @param {X64Word} word The x64-Word to add with this word. - * - * @return {X64Word} A new x64-Word object after adding. - * - * @example - * - * var added = x64Word.add(anotherX64Word); - */ - // add: function (word) { - // var low = (this.low + word.low) | 0; - // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; - // var high = (this.high + word.high + carry) | 0; - - // return X64Word.create(high, low); - // } - }); - - /** - * An array of 64-bit words. - * - * @property {Array} words The array of CryptoJS.x64.Word objects. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var X64WordArray = C_x64.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.x64.WordArray.create(); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ]); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ], 10); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; - } - }, - - /** - * Converts this 64-bit word array to a 32-bit word array. - * - * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. - * - * @example - * - * var x32WordArray = x64WordArray.toX32(); - */ - toX32: function () { - // Shortcuts - var x64Words = this.words; - var x64WordsLength = x64Words.length; - - // Convert - var x32Words = []; - for (var i = 0; i < x64WordsLength; i++) { - var x64Word = x64Words[i]; - x32Words.push(x64Word.high); - x32Words.push(x64Word.low); - } - - return X32WordArray.create(x32Words, this.sigBytes); - }, - - /** - * Creates a copy of this word array. - * - * @return {X64WordArray} The clone. - * - * @example - * - * var clone = x64WordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - - // Clone "words" array - var words = clone.words = this.words.slice(0); - - // Clone each X64Word object - var wordsLength = words.length; - for (var i = 0; i < wordsLength; i++) { - words[i] = words[i].clone(); - } - - return clone; - } - }); - }()); - - - (function () { - // Check if typed arrays are supported - if (typeof ArrayBuffer != 'function') { - return; - } - - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - - // Reference original init - var superInit = WordArray.init; - - // Augment WordArray.init to handle typed arrays - var subInit = WordArray.init = function (typedArray) { - // Convert buffers to uint8 - if (typedArray instanceof ArrayBuffer) { - typedArray = new Uint8Array(typedArray); - } - - // Convert other array views to uint8 - if ( - typedArray instanceof Int8Array || - (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || - typedArray instanceof Int16Array || - typedArray instanceof Uint16Array || - typedArray instanceof Int32Array || - typedArray instanceof Uint32Array || - typedArray instanceof Float32Array || - typedArray instanceof Float64Array - ) { - typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - - // Handle Uint8Array - if (typedArray instanceof Uint8Array) { - // Shortcut - var typedArrayByteLength = typedArray.byteLength; - - // Extract bytes - var words = []; - for (var i = 0; i < typedArrayByteLength; i++) { - words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); - } - - // Initialize this word array - superInit.call(this, words, typedArrayByteLength); - } else { - // Else call normal init - superInit.apply(this, arguments); - } - }; - - subInit.prototype = WordArray; - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * UTF-16 BE encoding strategy. - */ - var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { - /** - * Converts a word array to a UTF-16 BE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 BE string. - * - * @static - * - * @example - * - * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 BE string to a word array. - * - * @param {string} utf16Str The UTF-16 BE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - /** - * UTF-16 LE encoding strategy. - */ - C_enc.Utf16LE = { - /** - * Converts a word array to a UTF-16 LE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 LE string. - * - * @static - * - * @example - * - * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 LE string to a word array. - * - * @param {string} utf16Str The UTF-16 LE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - function swapEndian(word) { - return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); - } - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - var reverseMap = this._reverseMap; - - if (!reverseMap) { - reverseMap = this._reverseMap = []; - for (var j = 0; j < map.length; j++) { - reverseMap[map.charCodeAt(j)] = j; - } - } - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex !== -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - return parseLoop(base64Str, base64StrLength, reverseMap); - - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - - function parseLoop(base64Str, base64StrLength, reverseMap) { - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); - var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); - var bitsCombined = bits1 | bits2; - words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - return WordArray.create(words, nBytes); - } - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64url encoding strategy. - */ - var Base64url = C_enc.Base64url = { - /** - * Converts a word array to a Base64url string. - * - * @param {WordArray} wordArray The word array. - * - * @param {boolean} urlSafe Whether to use url safe - * - * @return {string} The Base64url string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64url.stringify(wordArray); - */ - stringify: function (wordArray, urlSafe=true) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = urlSafe ? this._safe_map : this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64url string to a word array. - * - * @param {string} base64Str The Base64url string. - * - * @param {boolean} urlSafe Whether to use url safe - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64url.parse(base64String); - */ - parse: function (base64Str, urlSafe=true) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = urlSafe ? this._safe_map : this._map; - var reverseMap = this._reverseMap; - - if (!reverseMap) { - reverseMap = this._reverseMap = []; - for (var j = 0; j < map.length; j++) { - reverseMap[map.charCodeAt(j)] = j; - } - } - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex !== -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - return parseLoop(base64Str, base64StrLength, reverseMap); - - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', - _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_', - }; - - function parseLoop(base64Str, base64StrLength, reverseMap) { - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); - var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); - var bitsCombined = bits1 | bits2; - words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - return WordArray.create(words, nBytes); - } - }()); - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working varialbes - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Initialization and round constants tables - var H = []; - var K = []; - - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } - - return true; - } - - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } - - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); - - nPrime++; - } - - n++; - } - }()); - - // Reusable object - var W = []; - - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; - - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); - - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); - - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } - - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); - - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); - - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - - /** - * SHA-224 hash algorithm. - */ - var SHA224 = C_algo.SHA224 = SHA256.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 - ]); - }, - - _doFinalize: function () { - var hash = SHA256._doFinalize.call(this); - - hash.sigBytes -= 4; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA224('message'); - * var hash = CryptoJS.SHA224(wordArray); - */ - C.SHA224 = SHA256._createHelper(SHA224); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA224(message, key); - */ - C.HmacSHA224 = SHA256._createHmacHelper(SHA224); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - - function X64Word_create() { - return X64Word.create.apply(X64Word, arguments); - } - - // Constants - var K = [ - X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), - X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), - X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), - X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), - X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), - X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), - X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), - X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), - X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), - X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), - X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), - X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), - X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), - X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), - X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), - X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), - X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), - X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), - X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), - X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), - X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), - X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), - X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), - X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), - X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), - X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), - X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), - X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), - X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), - X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), - X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), - X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), - X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), - X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), - X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), - X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), - X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), - X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), - X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), - X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) - ]; - - // Reusable objects - var W = []; - (function () { - for (var i = 0; i < 80; i++) { - W[i] = X64Word_create(); - } - }()); - - /** - * SHA-512 hash algorithm. - */ - var SHA512 = C_algo.SHA512 = Hasher.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), - new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), - new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), - new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var H = this._hash.words; - - var H0 = H[0]; - var H1 = H[1]; - var H2 = H[2]; - var H3 = H[3]; - var H4 = H[4]; - var H5 = H[5]; - var H6 = H[6]; - var H7 = H[7]; - - var H0h = H0.high; - var H0l = H0.low; - var H1h = H1.high; - var H1l = H1.low; - var H2h = H2.high; - var H2l = H2.low; - var H3h = H3.high; - var H3l = H3.low; - var H4h = H4.high; - var H4l = H4.low; - var H5h = H5.high; - var H5l = H5.low; - var H6h = H6.high; - var H6l = H6.low; - var H7h = H7.high; - var H7l = H7.low; - - // Working variables - var ah = H0h; - var al = H0l; - var bh = H1h; - var bl = H1l; - var ch = H2h; - var cl = H2l; - var dh = H3h; - var dl = H3l; - var eh = H4h; - var el = H4l; - var fh = H5h; - var fl = H5l; - var gh = H6h; - var gl = H6l; - var hh = H7h; - var hl = H7l; - - // Rounds - for (var i = 0; i < 80; i++) { - var Wil; - var Wih; - - // Shortcut - var Wi = W[i]; - - // Extend message - if (i < 16) { - Wih = Wi.high = M[offset + i * 2] | 0; - Wil = Wi.low = M[offset + i * 2 + 1] | 0; - } else { - // Gamma0 - var gamma0x = W[i - 15]; - var gamma0xh = gamma0x.high; - var gamma0xl = gamma0x.low; - var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); - var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); - - // Gamma1 - var gamma1x = W[i - 2]; - var gamma1xh = gamma1x.high; - var gamma1xl = gamma1x.low; - var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); - var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[i - 7]; - var Wi7h = Wi7.high; - var Wi7l = Wi7.low; - - var Wi16 = W[i - 16]; - var Wi16h = Wi16.high; - var Wi16l = Wi16.low; - - Wil = gamma0l + Wi7l; - Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); - Wil = Wil + gamma1l; - Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); - Wil = Wil + Wi16l; - Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); - - Wi.high = Wih; - Wi.low = Wil; - } - - var chh = (eh & fh) ^ (~eh & gh); - var chl = (el & fl) ^ (~el & gl); - var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); - var majl = (al & bl) ^ (al & cl) ^ (bl & cl); - - var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); - var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); - var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); - var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); - - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[i]; - var Kih = Ki.high; - var Kil = Ki.low; - - var t1l = hl + sigma1l; - var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); - var t1l = t1l + chl; - var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); - var t1l = t1l + Kil; - var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); - var t1l = t1l + Wil; - var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); - - // t2 = sigma0 + maj - var t2l = sigma0l + majl; - var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); - - // Update working variables - hh = gh; - hl = gl; - gh = fh; - gl = fl; - fh = eh; - fl = el; - el = (dl + t1l) | 0; - eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; - dh = ch; - dl = cl; - ch = bh; - cl = bl; - bh = ah; - bl = al; - al = (t1l + t2l) | 0; - ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; - } - - // Intermediate hash value - H0l = H0.low = (H0l + al); - H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); - H1l = H1.low = (H1l + bl); - H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); - H2l = H2.low = (H2l + cl); - H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); - H3l = H3.low = (H3l + dl); - H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); - H4l = H4.low = (H4l + el); - H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); - H5l = H5.low = (H5l + fl); - H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); - H6l = H6.low = (H6l + gl); - H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); - H7l = H7.low = (H7l + hl); - H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Convert hash to 32-bit word array before returning - var hash = this._hash.toX32(); - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - }, - - blockSize: 1024/32 - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA512('message'); - * var hash = CryptoJS.SHA512(wordArray); - */ - C.SHA512 = Hasher._createHelper(SHA512); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA512(message, key); - */ - C.HmacSHA512 = Hasher._createHmacHelper(SHA512); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - var SHA512 = C_algo.SHA512; - - /** - * SHA-384 hash algorithm. - */ - var SHA384 = C_algo.SHA384 = SHA512.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), - new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), - new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), - new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) - ]); - }, - - _doFinalize: function () { - var hash = SHA512._doFinalize.call(this); - - hash.sigBytes -= 16; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA384('message'); - * var hash = CryptoJS.SHA384(wordArray); - */ - C.SHA384 = SHA512._createHelper(SHA384); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA384(message, key); - */ - C.HmacSHA384 = SHA512._createHmacHelper(SHA384); - }()); - - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var C_algo = C.algo; - - // Constants tables - var RHO_OFFSETS = []; - var PI_INDEXES = []; - var ROUND_CONSTANTS = []; - - // Compute Constants - (function () { - // Compute rho offset constants - var x = 1, y = 0; - for (var t = 0; t < 24; t++) { - RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; - - var newX = y % 5; - var newY = (2 * x + 3 * y) % 5; - x = newX; - y = newY; - } - - // Compute pi index constants - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; - } - } - - // Compute round constants - var LFSR = 0x01; - for (var i = 0; i < 24; i++) { - var roundConstantMsw = 0; - var roundConstantLsw = 0; - - for (var j = 0; j < 7; j++) { - if (LFSR & 0x01) { - var bitPosition = (1 << j) - 1; - if (bitPosition < 32) { - roundConstantLsw ^= 1 << bitPosition; - } else /* if (bitPosition >= 32) */ { - roundConstantMsw ^= 1 << (bitPosition - 32); - } - } - - // Compute next LFSR - if (LFSR & 0x80) { - // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 - LFSR = (LFSR << 1) ^ 0x71; - } else { - LFSR <<= 1; - } - } - - ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); - } - }()); - - // Reusable objects for temporary values - var T = []; - (function () { - for (var i = 0; i < 25; i++) { - T[i] = X64Word.create(); - } - }()); - - /** - * SHA-3 hash algorithm. - */ - var SHA3 = C_algo.SHA3 = Hasher.extend({ - /** - * Configuration options. - * - * @property {number} outputLength - * The desired number of bits in the output hash. - * Only values permitted are: 224, 256, 384, 512. - * Default: 512 - */ - cfg: Hasher.cfg.extend({ - outputLength: 512 - }), - - _doReset: function () { - var state = this._state = [] - for (var i = 0; i < 25; i++) { - state[i] = new X64Word.init(); - } - - this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var state = this._state; - var nBlockSizeLanes = this.blockSize / 2; - - // Absorb - for (var i = 0; i < nBlockSizeLanes; i++) { - // Shortcuts - var M2i = M[offset + 2 * i]; - var M2i1 = M[offset + 2 * i + 1]; - - // Swap endian - M2i = ( - (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | - (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) - ); - M2i1 = ( - (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | - (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) - ); - - // Absorb message into state - var lane = state[i]; - lane.high ^= M2i1; - lane.low ^= M2i; - } - - // Rounds - for (var round = 0; round < 24; round++) { - // Theta - for (var x = 0; x < 5; x++) { - // Mix column lanes - var tMsw = 0, tLsw = 0; - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - tMsw ^= lane.high; - tLsw ^= lane.low; - } - - // Temporary values - var Tx = T[x]; - Tx.high = tMsw; - Tx.low = tLsw; - } - for (var x = 0; x < 5; x++) { - // Shortcuts - var Tx4 = T[(x + 4) % 5]; - var Tx1 = T[(x + 1) % 5]; - var Tx1Msw = Tx1.high; - var Tx1Lsw = Tx1.low; - - // Mix surrounding columns - var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); - var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - lane.high ^= tMsw; - lane.low ^= tLsw; - } - } - - // Rho Pi - for (var laneIndex = 1; laneIndex < 25; laneIndex++) { - var tMsw; - var tLsw; - - // Shortcuts - var lane = state[laneIndex]; - var laneMsw = lane.high; - var laneLsw = lane.low; - var rhoOffset = RHO_OFFSETS[laneIndex]; - - // Rotate lanes - if (rhoOffset < 32) { - tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); - tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); - } else /* if (rhoOffset >= 32) */ { - tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); - tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); - } - - // Transpose lanes - var TPiLane = T[PI_INDEXES[laneIndex]]; - TPiLane.high = tMsw; - TPiLane.low = tLsw; - } - - // Rho pi at x = y = 0 - var T0 = T[0]; - var state0 = state[0]; - T0.high = state0.high; - T0.low = state0.low; - - // Chi - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - // Shortcuts - var laneIndex = x + 5 * y; - var lane = state[laneIndex]; - var TLane = T[laneIndex]; - var Tx1Lane = T[((x + 1) % 5) + 5 * y]; - var Tx2Lane = T[((x + 2) % 5) + 5 * y]; - - // Mix rows - lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); - lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); - } - } - - // Iota - var lane = state[0]; - var roundConstant = ROUND_CONSTANTS[round]; - lane.high ^= roundConstant.high; - lane.low ^= roundConstant.low; - } - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - var blockSizeBits = this.blockSize * 32; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); - dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var state = this._state; - var outputLengthBytes = this.cfg.outputLength / 8; - var outputLengthLanes = outputLengthBytes / 8; - - // Squeeze - var hashWords = []; - for (var i = 0; i < outputLengthLanes; i++) { - // Shortcuts - var lane = state[i]; - var laneMsw = lane.high; - var laneLsw = lane.low; - - // Swap endian - laneMsw = ( - (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | - (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) - ); - laneLsw = ( - (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | - (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) - ); - - // Squeeze state to retrieve hash - hashWords.push(laneLsw); - hashWords.push(laneMsw); - } - - // Return final computed hash - return new WordArray.init(hashWords, outputLengthBytes); - }, - - clone: function () { - var clone = Hasher.clone.call(this); - - var state = clone._state = this._state.slice(0); - for (var i = 0; i < 25; i++) { - state[i] = state[i].clone(); - } - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA3('message'); - * var hash = CryptoJS.SHA3(wordArray); - */ - C.SHA3 = Hasher._createHelper(SHA3); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA3(message, key); - */ - C.HmacSHA3 = Hasher._createHmacHelper(SHA3); - }(Math)); - - - /** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var _zl = WordArray.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]); - var _zr = WordArray.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]); - var _sl = WordArray.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 ]); - var _sr = WordArray.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 ]); - - var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); - var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); - - /** - * RIPEMD160 hash algorithm. - */ - var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ - _doReset: function () { - this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); - }, - - _doProcessBlock: function (M, offset) { - - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - // Shortcut - var H = this._hash.words; - var hl = _hl.words; - var hr = _hr.words; - var zl = _zl.words; - var zr = _zr.words; - var sl = _sl.words; - var sr = _sr.words; - - // Working variables - var al, bl, cl, dl, el; - var ar, br, cr, dr, er; - - ar = al = H[0]; - br = bl = H[1]; - cr = cl = H[2]; - dr = dl = H[3]; - er = el = H[4]; - // Computation - var t; - for (var i = 0; i < 80; i += 1) { - t = (al + M[offset+zl[i]])|0; - if (i<16){ - t += f1(bl,cl,dl) + hl[0]; - } else if (i<32) { - t += f2(bl,cl,dl) + hl[1]; - } else if (i<48) { - t += f3(bl,cl,dl) + hl[2]; - } else if (i<64) { - t += f4(bl,cl,dl) + hl[3]; - } else {// if (i<80) { - t += f5(bl,cl,dl) + hl[4]; - } - t = t|0; - t = rotl(t,sl[i]); - t = (t+el)|0; - al = el; - el = dl; - dl = rotl(cl, 10); - cl = bl; - bl = t; - - t = (ar + M[offset+zr[i]])|0; - if (i<16){ - t += f5(br,cr,dr) + hr[0]; - } else if (i<32) { - t += f4(br,cr,dr) + hr[1]; - } else if (i<48) { - t += f3(br,cr,dr) + hr[2]; - } else if (i<64) { - t += f2(br,cr,dr) + hr[3]; - } else {// if (i<80) { - t += f1(br,cr,dr) + hr[4]; - } - t = t|0; - t = rotl(t,sr[i]) ; - t = (t+er)|0; - ar = er; - er = dr; - dr = rotl(cr, 10); - cr = br; - br = t; - } - // Intermediate hash value - t = (H[1] + cl + dr)|0; - H[1] = (H[2] + dl + er)|0; - H[2] = (H[3] + el + ar)|0; - H[3] = (H[4] + al + br)|0; - H[4] = (H[0] + bl + cr)|0; - H[0] = t; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ); - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 5; i++) { - // Shortcut - var H_i = H[i]; - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - - function f1(x, y, z) { - return ((x) ^ (y) ^ (z)); - - } - - function f2(x, y, z) { - return (((x)&(y)) | ((~x)&(z))); - } - - function f3(x, y, z) { - return (((x) | (~(y))) ^ (z)); - } - - function f4(x, y, z) { - return (((x) & (z)) | ((y)&(~(z)))); - } - - function f5(x, y, z) { - return ((x) ^ ((y) |(~(z)))); - - } - - function rotl(x,n) { - return (x<>>(32-n)); - } - - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.RIPEMD160('message'); - * var hash = CryptoJS.RIPEMD160(wordArray); - */ - C.RIPEMD160 = Hasher._createHelper(RIPEMD160); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacRIPEMD160(message, key); - */ - C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA1 = C_algo.SHA1; - var HMAC = C_algo.HMAC; - - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA1 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA1, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); - - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); - - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; - - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); - - // Shortcut - var intermediateWords = intermediate.words; - - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } - - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - var block; - - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - var block; - - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - var modeCreator; - - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - modeCreator = mode.createDecryptor; - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - - if (this._mode && this._mode.__creator == modeCreator) { - this._mode.init(this, iv && iv.words); - } else { - this._mode = modeCreator.call(mode, this, iv && iv.words); - this._mode.__creator = modeCreator; - } - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - var finalProcessedBlocks; - - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - var wordArray; - - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - var salt; - - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - - /** - * Cipher Feedback block mode. - */ - CryptoJS.mode.CFB = (function () { - var CFB = CryptoJS.lib.BlockCipherMode.extend(); - - CFB.Encryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - CFB.Decryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { - var keystream; - - // Shortcut - var iv = this._iv; - - // Generate keystream - if (iv) { - keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - keystream = this._prevBlock; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - - return CFB; - }()); - - - /** - * Counter block mode. - */ - CryptoJS.mode.CTR = (function () { - var CTR = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = CTR.Encryptor = CTR.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Increment counter - counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTR.Decryptor = Encryptor; - - return CTR; - }()); - - - /** @preserve - * Counter block mode compatible with Dr Brian Gladman fileenc.c - * derived from CryptoJS.mode.CTR - * Jan Hruby jhruby.web@gmail.com - */ - CryptoJS.mode.CTRGladman = (function () { - var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); - - function incWord(word) - { - if (((word >> 24) & 0xff) === 0xff) { //overflow - var b1 = (word >> 16)&0xff; - var b2 = (word >> 8)&0xff; - var b3 = word & 0xff; - - if (b1 === 0xff) // overflow b1 - { - b1 = 0; - if (b2 === 0xff) - { - b2 = 0; - if (b3 === 0xff) - { - b3 = 0; - } - else - { - ++b3; - } - } - else - { - ++b2; - } - } - else - { - ++b1; - } - - word = 0; - word += (b1 << 16); - word += (b2 << 8); - word += b3; - } - else - { - word += (0x01 << 24); - } - return word; - } - - function incCounter(counter) - { - if ((counter[0] = incWord(counter[0])) === 0) - { - // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 - counter[1] = incWord(counter[1]); - } - return counter; - } - - var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - - incCounter(counter); - - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTRGladman.Decryptor = Encryptor; - - return CTRGladman; - }()); - - - - - /** - * Output Feedback block mode. - */ - CryptoJS.mode.OFB = (function () { - var OFB = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = OFB.Encryptor = OFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var keystream = this._keystream; - - // Generate keystream - if (iv) { - keystream = this._keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - OFB.Decryptor = Encryptor; - - return OFB; - }()); - - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - /** - * ANSI X.923 padding strategy. - */ - CryptoJS.pad.AnsiX923 = { - pad: function (data, blockSize) { - // Shortcuts - var dataSigBytes = data.sigBytes; - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; - - // Compute last byte position - var lastBytePos = dataSigBytes + nPaddingBytes - 1; - - // Pad - data.clamp(); - data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); - data.sigBytes += nPaddingBytes; - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - /** - * ISO 10126 padding strategy. - */ - CryptoJS.pad.Iso10126 = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Pad - data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). - concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - /** - * ISO/IEC 9797-1 Padding Method 2. - */ - CryptoJS.pad.Iso97971 = { - pad: function (data, blockSize) { - // Add 0x80 byte - data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); - - // Zero pad the rest - CryptoJS.pad.ZeroPadding.pad(data, blockSize); - }, - - unpad: function (data) { - // Remove zero padding - CryptoJS.pad.ZeroPadding.unpad(data); - - // Remove one more byte -- the 0x80 byte - data.sigBytes--; - } - }; - - - /** - * Zero padding strategy. - */ - CryptoJS.pad.ZeroPadding = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Pad - data.clamp(); - data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); - }, - - unpad: function (data) { - // Shortcut - var dataWords = data.words; - - // Unpad - var i = data.sigBytes - 1; - for (var i = data.sigBytes - 1; i >= 0; i--) { - if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { - data.sigBytes = i + 1; - break; - } - } - } - }; - - - /** - * A noop padding strategy. - */ - CryptoJS.pad.NoPadding = { - pad: function () { - }, - - unpad: function () { - } - }; - - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var CipherParams = C_lib.CipherParams; - var C_enc = C.enc; - var Hex = C_enc.Hex; - var C_format = C.format; - - var HexFormatter = C_format.Hex = { - /** - * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The hexadecimally encoded string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.format.Hex.stringify(cipherParams); - */ - stringify: function (cipherParams) { - return cipherParams.ciphertext.toString(Hex); - }, - - /** - * Converts a hexadecimally encoded ciphertext string to a cipher params object. - * - * @param {string} input The hexadecimally encoded string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.Hex.parse(hexString); - */ - parse: function (input) { - var ciphertext = Hex.parse(input); - return CipherParams.create({ ciphertext: ciphertext }); - } - }; - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - var t; - - // Skip reset of nRounds has been set before and key did not change - if (this._nRounds && this._keyPriorReset === this._key) { - return; - } - - // Shortcuts - var key = this._keyPriorReset = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6; - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Permuted Choice 1 constants - var PC1 = [ - 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 - ]; - - // Permuted Choice 2 constants - var PC2 = [ - 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 - ]; - - // Cumulative bit shift constants - var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; - - // SBOXes and round permutation constants - var SBOX_P = [ - { - 0x0: 0x808200, - 0x10000000: 0x8000, - 0x20000000: 0x808002, - 0x30000000: 0x2, - 0x40000000: 0x200, - 0x50000000: 0x808202, - 0x60000000: 0x800202, - 0x70000000: 0x800000, - 0x80000000: 0x202, - 0x90000000: 0x800200, - 0xa0000000: 0x8200, - 0xb0000000: 0x808000, - 0xc0000000: 0x8002, - 0xd0000000: 0x800002, - 0xe0000000: 0x0, - 0xf0000000: 0x8202, - 0x8000000: 0x0, - 0x18000000: 0x808202, - 0x28000000: 0x8202, - 0x38000000: 0x8000, - 0x48000000: 0x808200, - 0x58000000: 0x200, - 0x68000000: 0x808002, - 0x78000000: 0x2, - 0x88000000: 0x800200, - 0x98000000: 0x8200, - 0xa8000000: 0x808000, - 0xb8000000: 0x800202, - 0xc8000000: 0x800002, - 0xd8000000: 0x8002, - 0xe8000000: 0x202, - 0xf8000000: 0x800000, - 0x1: 0x8000, - 0x10000001: 0x2, - 0x20000001: 0x808200, - 0x30000001: 0x800000, - 0x40000001: 0x808002, - 0x50000001: 0x8200, - 0x60000001: 0x200, - 0x70000001: 0x800202, - 0x80000001: 0x808202, - 0x90000001: 0x808000, - 0xa0000001: 0x800002, - 0xb0000001: 0x8202, - 0xc0000001: 0x202, - 0xd0000001: 0x800200, - 0xe0000001: 0x8002, - 0xf0000001: 0x0, - 0x8000001: 0x808202, - 0x18000001: 0x808000, - 0x28000001: 0x800000, - 0x38000001: 0x200, - 0x48000001: 0x8000, - 0x58000001: 0x800002, - 0x68000001: 0x2, - 0x78000001: 0x8202, - 0x88000001: 0x8002, - 0x98000001: 0x800202, - 0xa8000001: 0x202, - 0xb8000001: 0x808200, - 0xc8000001: 0x800200, - 0xd8000001: 0x0, - 0xe8000001: 0x8200, - 0xf8000001: 0x808002 - }, - { - 0x0: 0x40084010, - 0x1000000: 0x4000, - 0x2000000: 0x80000, - 0x3000000: 0x40080010, - 0x4000000: 0x40000010, - 0x5000000: 0x40084000, - 0x6000000: 0x40004000, - 0x7000000: 0x10, - 0x8000000: 0x84000, - 0x9000000: 0x40004010, - 0xa000000: 0x40000000, - 0xb000000: 0x84010, - 0xc000000: 0x80010, - 0xd000000: 0x0, - 0xe000000: 0x4010, - 0xf000000: 0x40080000, - 0x800000: 0x40004000, - 0x1800000: 0x84010, - 0x2800000: 0x10, - 0x3800000: 0x40004010, - 0x4800000: 0x40084010, - 0x5800000: 0x40000000, - 0x6800000: 0x80000, - 0x7800000: 0x40080010, - 0x8800000: 0x80010, - 0x9800000: 0x0, - 0xa800000: 0x4000, - 0xb800000: 0x40080000, - 0xc800000: 0x40000010, - 0xd800000: 0x84000, - 0xe800000: 0x40084000, - 0xf800000: 0x4010, - 0x10000000: 0x0, - 0x11000000: 0x40080010, - 0x12000000: 0x40004010, - 0x13000000: 0x40084000, - 0x14000000: 0x40080000, - 0x15000000: 0x10, - 0x16000000: 0x84010, - 0x17000000: 0x4000, - 0x18000000: 0x4010, - 0x19000000: 0x80000, - 0x1a000000: 0x80010, - 0x1b000000: 0x40000010, - 0x1c000000: 0x84000, - 0x1d000000: 0x40004000, - 0x1e000000: 0x40000000, - 0x1f000000: 0x40084010, - 0x10800000: 0x84010, - 0x11800000: 0x80000, - 0x12800000: 0x40080000, - 0x13800000: 0x4000, - 0x14800000: 0x40004000, - 0x15800000: 0x40084010, - 0x16800000: 0x10, - 0x17800000: 0x40000000, - 0x18800000: 0x40084000, - 0x19800000: 0x40000010, - 0x1a800000: 0x40004010, - 0x1b800000: 0x80010, - 0x1c800000: 0x0, - 0x1d800000: 0x4010, - 0x1e800000: 0x40080010, - 0x1f800000: 0x84000 - }, - { - 0x0: 0x104, - 0x100000: 0x0, - 0x200000: 0x4000100, - 0x300000: 0x10104, - 0x400000: 0x10004, - 0x500000: 0x4000004, - 0x600000: 0x4010104, - 0x700000: 0x4010000, - 0x800000: 0x4000000, - 0x900000: 0x4010100, - 0xa00000: 0x10100, - 0xb00000: 0x4010004, - 0xc00000: 0x4000104, - 0xd00000: 0x10000, - 0xe00000: 0x4, - 0xf00000: 0x100, - 0x80000: 0x4010100, - 0x180000: 0x4010004, - 0x280000: 0x0, - 0x380000: 0x4000100, - 0x480000: 0x4000004, - 0x580000: 0x10000, - 0x680000: 0x10004, - 0x780000: 0x104, - 0x880000: 0x4, - 0x980000: 0x100, - 0xa80000: 0x4010000, - 0xb80000: 0x10104, - 0xc80000: 0x10100, - 0xd80000: 0x4000104, - 0xe80000: 0x4010104, - 0xf80000: 0x4000000, - 0x1000000: 0x4010100, - 0x1100000: 0x10004, - 0x1200000: 0x10000, - 0x1300000: 0x4000100, - 0x1400000: 0x100, - 0x1500000: 0x4010104, - 0x1600000: 0x4000004, - 0x1700000: 0x0, - 0x1800000: 0x4000104, - 0x1900000: 0x4000000, - 0x1a00000: 0x4, - 0x1b00000: 0x10100, - 0x1c00000: 0x4010000, - 0x1d00000: 0x104, - 0x1e00000: 0x10104, - 0x1f00000: 0x4010004, - 0x1080000: 0x4000000, - 0x1180000: 0x104, - 0x1280000: 0x4010100, - 0x1380000: 0x0, - 0x1480000: 0x10004, - 0x1580000: 0x4000100, - 0x1680000: 0x100, - 0x1780000: 0x4010004, - 0x1880000: 0x10000, - 0x1980000: 0x4010104, - 0x1a80000: 0x10104, - 0x1b80000: 0x4000004, - 0x1c80000: 0x4000104, - 0x1d80000: 0x4010000, - 0x1e80000: 0x4, - 0x1f80000: 0x10100 - }, - { - 0x0: 0x80401000, - 0x10000: 0x80001040, - 0x20000: 0x401040, - 0x30000: 0x80400000, - 0x40000: 0x0, - 0x50000: 0x401000, - 0x60000: 0x80000040, - 0x70000: 0x400040, - 0x80000: 0x80000000, - 0x90000: 0x400000, - 0xa0000: 0x40, - 0xb0000: 0x80001000, - 0xc0000: 0x80400040, - 0xd0000: 0x1040, - 0xe0000: 0x1000, - 0xf0000: 0x80401040, - 0x8000: 0x80001040, - 0x18000: 0x40, - 0x28000: 0x80400040, - 0x38000: 0x80001000, - 0x48000: 0x401000, - 0x58000: 0x80401040, - 0x68000: 0x0, - 0x78000: 0x80400000, - 0x88000: 0x1000, - 0x98000: 0x80401000, - 0xa8000: 0x400000, - 0xb8000: 0x1040, - 0xc8000: 0x80000000, - 0xd8000: 0x400040, - 0xe8000: 0x401040, - 0xf8000: 0x80000040, - 0x100000: 0x400040, - 0x110000: 0x401000, - 0x120000: 0x80000040, - 0x130000: 0x0, - 0x140000: 0x1040, - 0x150000: 0x80400040, - 0x160000: 0x80401000, - 0x170000: 0x80001040, - 0x180000: 0x80401040, - 0x190000: 0x80000000, - 0x1a0000: 0x80400000, - 0x1b0000: 0x401040, - 0x1c0000: 0x80001000, - 0x1d0000: 0x400000, - 0x1e0000: 0x40, - 0x1f0000: 0x1000, - 0x108000: 0x80400000, - 0x118000: 0x80401040, - 0x128000: 0x0, - 0x138000: 0x401000, - 0x148000: 0x400040, - 0x158000: 0x80000000, - 0x168000: 0x80001040, - 0x178000: 0x40, - 0x188000: 0x80000040, - 0x198000: 0x1000, - 0x1a8000: 0x80001000, - 0x1b8000: 0x80400040, - 0x1c8000: 0x1040, - 0x1d8000: 0x80401000, - 0x1e8000: 0x400000, - 0x1f8000: 0x401040 - }, - { - 0x0: 0x80, - 0x1000: 0x1040000, - 0x2000: 0x40000, - 0x3000: 0x20000000, - 0x4000: 0x20040080, - 0x5000: 0x1000080, - 0x6000: 0x21000080, - 0x7000: 0x40080, - 0x8000: 0x1000000, - 0x9000: 0x20040000, - 0xa000: 0x20000080, - 0xb000: 0x21040080, - 0xc000: 0x21040000, - 0xd000: 0x0, - 0xe000: 0x1040080, - 0xf000: 0x21000000, - 0x800: 0x1040080, - 0x1800: 0x21000080, - 0x2800: 0x80, - 0x3800: 0x1040000, - 0x4800: 0x40000, - 0x5800: 0x20040080, - 0x6800: 0x21040000, - 0x7800: 0x20000000, - 0x8800: 0x20040000, - 0x9800: 0x0, - 0xa800: 0x21040080, - 0xb800: 0x1000080, - 0xc800: 0x20000080, - 0xd800: 0x21000000, - 0xe800: 0x1000000, - 0xf800: 0x40080, - 0x10000: 0x40000, - 0x11000: 0x80, - 0x12000: 0x20000000, - 0x13000: 0x21000080, - 0x14000: 0x1000080, - 0x15000: 0x21040000, - 0x16000: 0x20040080, - 0x17000: 0x1000000, - 0x18000: 0x21040080, - 0x19000: 0x21000000, - 0x1a000: 0x1040000, - 0x1b000: 0x20040000, - 0x1c000: 0x40080, - 0x1d000: 0x20000080, - 0x1e000: 0x0, - 0x1f000: 0x1040080, - 0x10800: 0x21000080, - 0x11800: 0x1000000, - 0x12800: 0x1040000, - 0x13800: 0x20040080, - 0x14800: 0x20000000, - 0x15800: 0x1040080, - 0x16800: 0x80, - 0x17800: 0x21040000, - 0x18800: 0x40080, - 0x19800: 0x21040080, - 0x1a800: 0x0, - 0x1b800: 0x21000000, - 0x1c800: 0x1000080, - 0x1d800: 0x40000, - 0x1e800: 0x20040000, - 0x1f800: 0x20000080 - }, - { - 0x0: 0x10000008, - 0x100: 0x2000, - 0x200: 0x10200000, - 0x300: 0x10202008, - 0x400: 0x10002000, - 0x500: 0x200000, - 0x600: 0x200008, - 0x700: 0x10000000, - 0x800: 0x0, - 0x900: 0x10002008, - 0xa00: 0x202000, - 0xb00: 0x8, - 0xc00: 0x10200008, - 0xd00: 0x202008, - 0xe00: 0x2008, - 0xf00: 0x10202000, - 0x80: 0x10200000, - 0x180: 0x10202008, - 0x280: 0x8, - 0x380: 0x200000, - 0x480: 0x202008, - 0x580: 0x10000008, - 0x680: 0x10002000, - 0x780: 0x2008, - 0x880: 0x200008, - 0x980: 0x2000, - 0xa80: 0x10002008, - 0xb80: 0x10200008, - 0xc80: 0x0, - 0xd80: 0x10202000, - 0xe80: 0x202000, - 0xf80: 0x10000000, - 0x1000: 0x10002000, - 0x1100: 0x10200008, - 0x1200: 0x10202008, - 0x1300: 0x2008, - 0x1400: 0x200000, - 0x1500: 0x10000000, - 0x1600: 0x10000008, - 0x1700: 0x202000, - 0x1800: 0x202008, - 0x1900: 0x0, - 0x1a00: 0x8, - 0x1b00: 0x10200000, - 0x1c00: 0x2000, - 0x1d00: 0x10002008, - 0x1e00: 0x10202000, - 0x1f00: 0x200008, - 0x1080: 0x8, - 0x1180: 0x202000, - 0x1280: 0x200000, - 0x1380: 0x10000008, - 0x1480: 0x10002000, - 0x1580: 0x2008, - 0x1680: 0x10202008, - 0x1780: 0x10200000, - 0x1880: 0x10202000, - 0x1980: 0x10200008, - 0x1a80: 0x2000, - 0x1b80: 0x202008, - 0x1c80: 0x200008, - 0x1d80: 0x0, - 0x1e80: 0x10000000, - 0x1f80: 0x10002008 - }, - { - 0x0: 0x100000, - 0x10: 0x2000401, - 0x20: 0x400, - 0x30: 0x100401, - 0x40: 0x2100401, - 0x50: 0x0, - 0x60: 0x1, - 0x70: 0x2100001, - 0x80: 0x2000400, - 0x90: 0x100001, - 0xa0: 0x2000001, - 0xb0: 0x2100400, - 0xc0: 0x2100000, - 0xd0: 0x401, - 0xe0: 0x100400, - 0xf0: 0x2000000, - 0x8: 0x2100001, - 0x18: 0x0, - 0x28: 0x2000401, - 0x38: 0x2100400, - 0x48: 0x100000, - 0x58: 0x2000001, - 0x68: 0x2000000, - 0x78: 0x401, - 0x88: 0x100401, - 0x98: 0x2000400, - 0xa8: 0x2100000, - 0xb8: 0x100001, - 0xc8: 0x400, - 0xd8: 0x2100401, - 0xe8: 0x1, - 0xf8: 0x100400, - 0x100: 0x2000000, - 0x110: 0x100000, - 0x120: 0x2000401, - 0x130: 0x2100001, - 0x140: 0x100001, - 0x150: 0x2000400, - 0x160: 0x2100400, - 0x170: 0x100401, - 0x180: 0x401, - 0x190: 0x2100401, - 0x1a0: 0x100400, - 0x1b0: 0x1, - 0x1c0: 0x0, - 0x1d0: 0x2100000, - 0x1e0: 0x2000001, - 0x1f0: 0x400, - 0x108: 0x100400, - 0x118: 0x2000401, - 0x128: 0x2100001, - 0x138: 0x1, - 0x148: 0x2000000, - 0x158: 0x100000, - 0x168: 0x401, - 0x178: 0x2100400, - 0x188: 0x2000001, - 0x198: 0x2100000, - 0x1a8: 0x0, - 0x1b8: 0x2100401, - 0x1c8: 0x100401, - 0x1d8: 0x400, - 0x1e8: 0x2000400, - 0x1f8: 0x100001 - }, - { - 0x0: 0x8000820, - 0x1: 0x20000, - 0x2: 0x8000000, - 0x3: 0x20, - 0x4: 0x20020, - 0x5: 0x8020820, - 0x6: 0x8020800, - 0x7: 0x800, - 0x8: 0x8020000, - 0x9: 0x8000800, - 0xa: 0x20800, - 0xb: 0x8020020, - 0xc: 0x820, - 0xd: 0x0, - 0xe: 0x8000020, - 0xf: 0x20820, - 0x80000000: 0x800, - 0x80000001: 0x8020820, - 0x80000002: 0x8000820, - 0x80000003: 0x8000000, - 0x80000004: 0x8020000, - 0x80000005: 0x20800, - 0x80000006: 0x20820, - 0x80000007: 0x20, - 0x80000008: 0x8000020, - 0x80000009: 0x820, - 0x8000000a: 0x20020, - 0x8000000b: 0x8020800, - 0x8000000c: 0x0, - 0x8000000d: 0x8020020, - 0x8000000e: 0x8000800, - 0x8000000f: 0x20000, - 0x10: 0x20820, - 0x11: 0x8020800, - 0x12: 0x20, - 0x13: 0x800, - 0x14: 0x8000800, - 0x15: 0x8000020, - 0x16: 0x8020020, - 0x17: 0x20000, - 0x18: 0x0, - 0x19: 0x20020, - 0x1a: 0x8020000, - 0x1b: 0x8000820, - 0x1c: 0x8020820, - 0x1d: 0x20800, - 0x1e: 0x820, - 0x1f: 0x8000000, - 0x80000010: 0x20000, - 0x80000011: 0x800, - 0x80000012: 0x8020020, - 0x80000013: 0x20820, - 0x80000014: 0x20, - 0x80000015: 0x8020000, - 0x80000016: 0x8000000, - 0x80000017: 0x8000820, - 0x80000018: 0x8020820, - 0x80000019: 0x8000020, - 0x8000001a: 0x8000800, - 0x8000001b: 0x0, - 0x8000001c: 0x20800, - 0x8000001d: 0x820, - 0x8000001e: 0x20020, - 0x8000001f: 0x8020800 - } - ]; - - // Masks that select the SBOX input - var SBOX_MASK = [ - 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, - 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f - ]; - - /** - * DES block cipher algorithm. - */ - var DES = C_algo.DES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Select 56 bits according to PC1 - var keyBits = []; - for (var i = 0; i < 56; i++) { - var keyBitPos = PC1[i] - 1; - keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; - } - - // Assemble 16 subkeys - var subKeys = this._subKeys = []; - for (var nSubKey = 0; nSubKey < 16; nSubKey++) { - // Create subkey - var subKey = subKeys[nSubKey] = []; - - // Shortcut - var bitShift = BIT_SHIFTS[nSubKey]; - - // Select 48 bits according to PC2 - for (var i = 0; i < 24; i++) { - // Select from the left 28 key bits - subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); - - // Select from the right 28 key bits - subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); - } - - // Since each subkey is applied to an expanded 32-bit input, - // the subkey can be broken into 8 values scaled to 32-bits, - // which allows the key to be used without expansion - subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); - for (var i = 1; i < 7; i++) { - subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); - } - subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); - } - - // Compute inverse subkeys - var invSubKeys = this._invSubKeys = []; - for (var i = 0; i < 16; i++) { - invSubKeys[i] = subKeys[15 - i]; - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._subKeys); - }, - - decryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._invSubKeys); - }, - - _doCryptBlock: function (M, offset, subKeys) { - // Get input - this._lBlock = M[offset]; - this._rBlock = M[offset + 1]; - - // Initial permutation - exchangeLR.call(this, 4, 0x0f0f0f0f); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeRL.call(this, 2, 0x33333333); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeLR.call(this, 1, 0x55555555); - - // Rounds - for (var round = 0; round < 16; round++) { - // Shortcuts - var subKey = subKeys[round]; - var lBlock = this._lBlock; - var rBlock = this._rBlock; - - // Feistel function - var f = 0; - for (var i = 0; i < 8; i++) { - f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; - } - this._lBlock = rBlock; - this._rBlock = lBlock ^ f; - } - - // Undo swap from last round - var t = this._lBlock; - this._lBlock = this._rBlock; - this._rBlock = t; - - // Final permutation - exchangeLR.call(this, 1, 0x55555555); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeRL.call(this, 2, 0x33333333); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeLR.call(this, 4, 0x0f0f0f0f); - - // Set output - M[offset] = this._lBlock; - M[offset + 1] = this._rBlock; - }, - - keySize: 64/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - // Swap bits across the left and right words - function exchangeLR(offset, mask) { - var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; - this._rBlock ^= t; - this._lBlock ^= t << offset; - } - - function exchangeRL(offset, mask) { - var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; - this._lBlock ^= t; - this._rBlock ^= t << offset; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); - */ - C.DES = BlockCipher._createHelper(DES); - - /** - * Triple-DES block cipher algorithm. - */ - var TripleDES = C_algo.TripleDES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - // Make sure the key length is valid (64, 128 or >= 192 bit) - if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) { - throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.'); - } - - // Extend the key according to the keying options defined in 3DES standard - var key1 = keyWords.slice(0, 2); - var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4); - var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6); - - // Create DES instances - this._des1 = DES.createEncryptor(WordArray.create(key1)); - this._des2 = DES.createEncryptor(WordArray.create(key2)); - this._des3 = DES.createEncryptor(WordArray.create(key3)); - }, - - encryptBlock: function (M, offset) { - this._des1.encryptBlock(M, offset); - this._des2.decryptBlock(M, offset); - this._des3.encryptBlock(M, offset); - }, - - decryptBlock: function (M, offset) { - this._des3.decryptBlock(M, offset); - this._des2.encryptBlock(M, offset); - this._des1.decryptBlock(M, offset); - }, - - keySize: 192/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); - */ - C.TripleDES = BlockCipher._createHelper(TripleDES); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - /** - * RC4 stream cipher algorithm. - */ - var RC4 = C_algo.RC4 = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySigBytes = key.sigBytes; - - // Init sbox - var S = this._S = []; - for (var i = 0; i < 256; i++) { - S[i] = i; - } - - // Key setup - for (var i = 0, j = 0; i < 256; i++) { - var keyByteIndex = i % keySigBytes; - var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; - - j = (j + S[i] + keyByte) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - } - - // Counters - this._i = this._j = 0; - }, - - _doProcessBlock: function (M, offset) { - M[offset] ^= generateKeystreamWord.call(this); - }, - - keySize: 256/32, - - ivSize: 0 - }); - - function generateKeystreamWord() { - // Shortcuts - var S = this._S; - var i = this._i; - var j = this._j; - - // Generate keystream word - var keystreamWord = 0; - for (var n = 0; n < 4; n++) { - i = (i + 1) % 256; - j = (j + S[i]) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - - keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); - } - - // Update counters - this._i = i; - this._j = j; - - return keystreamWord; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); - */ - C.RC4 = StreamCipher._createHelper(RC4); - - /** - * Modified RC4 stream cipher algorithm. - */ - var RC4Drop = C_algo.RC4Drop = RC4.extend({ - /** - * Configuration options. - * - * @property {number} drop The number of keystream words to drop. Default 192 - */ - cfg: RC4.cfg.extend({ - drop: 192 - }), - - _doReset: function () { - RC4._doReset.call(this); - - // Drop - for (var i = this.cfg.drop; i > 0; i--) { - generateKeystreamWord.call(this); - } - } - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); - */ - C.RC4Drop = StreamCipher._createHelper(RC4Drop); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm - */ - var Rabbit = C_algo.Rabbit = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Swap endian - for (var i = 0; i < 4; i++) { - K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | - (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); - } - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); - */ - C.Rabbit = StreamCipher._createHelper(Rabbit); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm. - * - * This is a legacy version that neglected to convert the key to little-endian. - * This error doesn't affect the cipher's security, - * but it does affect its compatibility with other implementations. - */ - var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); - */ - C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); - }()); - - - return CryptoJS; - -})); \ No newline at end of file diff --git a/TVBox_JS/lib/drpy.js b/TVBox_JS/lib/drpy.js deleted file mode 100644 index cad2791..0000000 --- a/TVBox_JS/lib/drpy.js +++ /dev/null @@ -1,2115 +0,0 @@ -// import 'https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/es6py.js'; -// import {是否正版,urlDeal,setResult,setResult2,setHomeResult,maoss,urlencode} from 'http://192.168.10.103:5705/libs/es6py.js'; -// import 'http://192.168.1.124:5705/libs/es6py.js'; -import cheerio from 'https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/cheerio.min.js'; -// import cheerio from 'http://192.168.10.103:5705/libs/cheerio.min.js'; -import 'https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/crypto-js.js'; -import 'https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/drT.js'; -// import 'http://192.168.10.103:5705/libs/drT.js'; -// import muban from 'https://gitcode.net/qq_32394351/dr_py/-/raw/master/js/模板.js'; -// import muban from 'http://192.168.10.103:5705/admin/view/模板.js'; - -// const key = 'drpy_zbk'; -// eval(req('http://192.168.1.124:5705/libs/es6py.js').content); -function init_test(){ - // console.log(typeof(CryptoJS)); - console.log("init_test_start"); - console.log("当前版本号:"+VERSION); - console.log(RKEY); - console.log(JSON.stringify(rule)); - // console.log('123456的md5值是:'+md5('123456')); - // let aa = base64Encode('编码测试一下') - // log(aa); - // let bb = base64Decode(aa); - // log('bb:'+bb); - // clearItem(RULE_CK); - // console.log(JSON.stringify(rule)); - // console.log(request('https://www.baidu.com',{withHeaders:true})); - // console.log(request('https://www.baidu.com/favicon.ico',{toBase64:true})); - // require('http://192.168.10.99:5705/txt/pluto/drT.js'); - // console.log(typeof(drT)); - // console.log(drT.renderText('{{fl.cate}},hi, {{fl}}哈哈.{{fl}}',{sort: 1,cate:'movie'},'fl')); - console.log("init_test_end"); -} - -let rule = {}; -const VERSION = '3.9.16'; -/** 已知问题记录 - * 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 (有能力解决的话尽量解决下,支持对象直接渲染字符串转义,如果加了|safe就不转义)[影魔牛逼,最新的文件发现这问题已经解决了] - * Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 (这个大毛病需要重点排除一下) - * 2.import es6py.js但是里面的函数没有被装载进来.比如drpy规则报错setResult2 is undefiend(合并文件了可以不管了) - * 3.无法重复导入cheerio(怎么解决drpy和parseTag里都需要导入cheerio的问题) 无法在副文件导入cheerio (现在是全部放在drpy一个文件里了,凑合解决?) - * 4.有个错误不知道哪儿来的 executeScript: com.quickjs.JSObject$Undefined cannot be cast to java.lang.String 在 点击选集播放打印init_test_end后面打印(貌似不影响使用) - * 5.需要实现 stringify 函数,比起JSON.stringify函数,它会原封不动保留中文不会编码unicode - * 6.base64Encode,base64Decode,md5函数还没有实现 (抄影魔代码实现了) - * 7.eval(getCryptoJS());还没有实现 (可以空实现了,以后遇到能忽略) - * done: jsp:{pdfa,pdfh,pd},json:{pdfa,pdfh,pd},jq:{pdfa,pdfh,pd} - * * 电脑看日志调试 - adb tcpip 5555 - adb connect 192.168.10.192 - adb devices -l - adb logcat -c - adb logcat | grep -i QuickJS - * **/ - - -/*** 以下是内置变量和解析方法 **/ -const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 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'; // 源cookie的key值 -// const KEY = typeof(key)!=='undefined'&&key?key:'drpy_' + (rule.title || rule.host); // 源的唯一标识 -const CATE_EXCLUDE = '首页|留言|APP|下载|资讯|新闻|动态'; -const TAB_EXCLUDE = '猜你|喜欢|APP|下载|剧情|热播'; -const OCR_RETRY = 3;//ocr验证重试次数 -// const OCR_API = 'http://dm.mudery.com:10000';//ocr在线识别接口 -// const OCR_API = 'http://192.168.3.239:5705/parse/ocr';//ocr在线识别接口 -// const OCR_API = 'http://cms.nokia.press/parse/ocr';//ocr在线识别接口 -const OCR_API = 'http://cms.nokia.press:5706/parse/ocr';//ocr在线识别接口 -if(typeof(MY_URL)==='undefined'){ - var MY_URL; // 全局注入变量,pd函数需要 -} -var RKEY; // 源的唯一标识 -var fetch; -var print; -var log; -var rule_fetch_params; -var fetch_params; // 每个位置单独的 -var oheaders; -// var play_url; // 二级详情页注入变量,为了适配js模式0 (不在这里定义了,直接二级里定义了个空字符串) -var _pdfh; -var _pdfa; -var _pd; -// const DOM_CHECK_ATTR = ['url', 'src', 'href', 'data-original', 'data-src']; -const DOM_CHECK_ATTR = /(url|src|href|-original|-src|-play|-url)$/; -const SELECT_REGEX = /:eq|:lt|:gt|#/g; -const SELECT_REGEX_A = /:eq|:lt|:gt/g; - -/** -es6py扩展 - */ -if (typeof Object.assign != 'function') { - Object.assign = function () { - var target = arguments[0]; - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var 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) {//this是空或者未定义,抛出错误 - throw new TypeError('"this" is null or not defined'); - } - - var o = Object(this);//将this转变成对象 - var len = o.length >>> 0;//无符号右移0位,获取对象length属性,如果未定义就会变成0 - - if (len === 0) {//length为0直接返回false未找到目标值 - 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) {//如果某一位置与寻找目标相等,返回true,找到了 - return true; - } - k++; - } - return false;//未找到,返回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.prototype.myValues=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; -} -if (typeof Object.prototype.values != 'function') { - Object.prototype.values=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; - } -} -if (typeof Array.prototype.join != 'function') { - Array.prototype.join = function (emoji) { - // emoji = 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; - }; -} - -String.prototype.rstrip = function (chars) { - let regex = new RegExp(chars + "$"); - return this.replace(regex, ""); -}; - -Array.prototype.append = Array.prototype.push; -String.prototype.strip = String.prototype.trim; -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 = []; - // print(d); - 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) { - // print(a); - // print(word); - var Encrypted = CryptoJS.AES.encrypt(word, a, { - iv: t, - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.Pkcs7 - }); - return Encrypted.ciphertext.toString(); - } - }; - } - return {}; -} - -// 千万不要用for in 推荐 forEach (for in 会打乱顺序) -//猫函数 -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); - } - // print(html); - 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); - // log("iv:"+iv); - // log(html); - // print(key); - // print(iv); - eval(html.match(/var config = {[\s\S]*?}/)[0] + ''); - // config.url = config.url.replace(/,/g,''); - // print(config.url); - if (!config.url.startsWith('http')) { - //config.url = decodeURIComponent(AES(config.url, key, iv)); - 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 base64Encode(text){ - return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text)); - // return text -} - -function base64Decode(text){ - return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(text)); - // return text -} - -function md5(text) { - return CryptoJS.MD5(text).toString(); -} - -function getCryptoJS(){ - // return request('https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/crypto-hiker.js'); - return 'console.log("CryptoJS已装载");' -} - -let VODS = [];// 一级或者搜索需要的数据列表 -let VOD = {};// 二级的单个数据 -let TABS = [];// 二级的自定义线路列表 如: TABS=['道长在线','道长在线2'] -let LISTS = [];// 二级的自定义选集播放列表 如: LISTS=[['第1集$http://1.mp4','第2集$http://2.mp4'],['第3集$http://1.mp4','第4集$http://2.mp4']] -globalThis.encodeUrl = urlencode; -globalThis.urlencode = urlencode; - - - -/** - * url拼接 - * @param fromPath 初始当前页面url - * @param nowPath 相对当前页面url - * @returns {*} - */ -function urljoin(fromPath, nowPath) { - fromPath = fromPath||''; - nowPath = nowPath||''; - return joinUrl(fromPath, nowPath); - // try { - // // import Uri from './uri.min.js'; - // // var Uri = require('./uri.min.js'); - // // eval(request('https://cdn.bootcdn.net/ajax/libs/URI.js/1.19.11/URI.min.js')); - // // let new_uri = URI(nowPath, fromPath); - - // let new_uri = Uri(nowPath, fromPath); - // new_uri = new_uri.toString(); - // // console.log(new_uri); - // // return fromPath + nowPath - // return new_uri - // } - // catch (e) { - // console.log('urljoin发生错误:'+e.message); - // if(nowPath.startsWith('http')){ - // return nowPath - // }if(nowPath.startsWith('/')){ - // return getHome(fromPath)+nowPath - // } - // return fromPath+nowPath - // } -} -var urljoin2 = urljoin; - -// 内置 pdfh,pdfa,pd -const defaultParser = { - pdfh:pdfh, - pdfa:pdfa, - pd(html,parse,uri){ - let ret = this.pdfh(html,parse); - if(typeof(uri)==='undefined'||!uri){ - uri = ''; - } - if(DOM_CHECK_ATTR.test(parse)){ - if(/http/.test(ret)){ - ret = ret.substr(ret.indexOf('http')); - }else{ - ret = urljoin(MY_URL,ret) - } - } - return ret - }, -}; - - -/** - * pdfh原版优化,能取style属性里的图片链接 - * @param html 源码 - * @param parse 解析表达式 - * @returns {string|*} - */ -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]; - }catch (e) {} - } - return result -} - -/** - * pdfa原版优化,可以转换jq的html对象 - * @param html - * @param parse - * @returns {*} - */ -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); -} - -/** - * pd原版方法重写-增加自动urljoin - * @param html - * @param parse - * @param uri - * @returns {*} - */ -function pd2(html,parse,uri){ - let ret = pdfh2(html,parse); - if(typeof(uri)==='undefined'||!uri){ - uri = ''; - } - if(DOM_CHECK_ATTR.test(parse)){ - if(/http/.test(ret)){ - ret = ret.substr(ret.indexOf('http')); - }else{ - ret = urljoin(MY_URL,ret) - } - } - // MY_URL = getItem('MY_URL',MY_URL); - // console.log(`规则${RKEY}打印MY_URL:${MY_URL},uri:${uri}`); - return ret -} - -const parseTags = { - jsp:{ - pdfh:pdfh2, - pdfa:pdfa2, - pd:pd2, - }, - json:{ - pdfh(html, parse) { - if (!parse || !parse.trim()){ - return ''; - } - if (typeof(html) === 'string'){ - // print('jsonpath:pdfh字符串转dict'); - 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'){ - // print('jsonpath:pdfa字符串转dict'); - 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, base_url) { - if (!parse || !parse.trim()) { - return '' - } - let eleFind = typeof html === 'object'; - let option = undefined; - if (eleFind && parse.startsWith('body&&')) { - parse = parse.substr(6); - if (parse.indexOf('&&') < 0) { - option = parse.trim(); - parse = '*=*'; - } - } - if (parse.indexOf('&&') > -1) { - let sp = parse.split('&&'); - option = sp[sp.length - 1]; - sp.splice(sp.length - 1); - if (sp.length > 1) { - for (let i in sp) { - //Javascript自定义Array.prototype干扰for-in循环 - if(sp.hasOwnProperty(i)){ - if (!SELECT_REGEX.test(sp[i])) { - sp[i] = sp[i] + ':eq(0)'; - } - } - } - } else { - if (!SELECT_REGEX.test(sp[0])) { - sp[0] = sp[0] + ':eq(0)'; - } - } - parse = sp.join(' '); - } - let result = ''; - const $ = eleFind ? html.rr : cheerio.load(html); - let ret = eleFind ? ((parse === '*=*' || $(html.ele).is(parse)) ? html.ele : $(html.ele).find(parse)) : $(parse); - if (option) { - if (option === 'Text') { - result = $(ret).text(); - } - else if (option === 'Html') { - result = $(ret).html(); - } - else { - result = $(ret).attr(option); - if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){ - try { - result = result.match(/url\((.*?)\)/)[1]; - }catch (e) {} - } - } - if (result && base_url && DOM_CHECK_ATTR.test(option)) { - if (/http/.test(result)) { - result = result.substr(result.indexOf('http')); - } else { - result = urljoin(base_url, result) - } - } - } else { - result = $(ret).toString(); - } - return result; - }, - pdfa(html, parse) { - if (!parse || !parse.trim()) { - print('!parse'); - return []; - } - let eleFind = typeof html === 'object'; - // print('parse前:'+parse); - if (parse.indexOf('&&') > -1) { - let sp = parse.split('&&'); - for (let i in sp) { - if(sp.hasOwnProperty(i)){ - if (!SELECT_REGEX_A.test(sp[i]) && i < sp.length - 1) { - if(sp[i]!=='body'){ - // sp[i] = sp[i] + ':eq(0)'; - sp[i] = sp[i] + ':first'; - } - } - } - } - parse = sp.join(' '); - } - // print('parse后:'+parse); - const $ = eleFind ? html.rr : cheerio.load(html); - let ret = eleFind ? ($(html.ele).is(parse) ? html.ele : $(html.ele).find(parse)) : $(parse); - let result = []; - // print('outerHTML:'); - // print($(ret[0]).prop("outerHTML")); - if (ret) { - ret.each(function (idx, ele) { - result.push({ rr: $, ele: ele }); - // result.push({ rr: $, ele: $(ele).prop("outerHTML")}); // 性能贼差 - }); - } - return result; - }, - pd(html,parse,uri){ - return parseTags.jq.pdfh(html, parse, MY_URL); - }, - }, - getParse(p0){//非js开头的情况自动获取解析标签 - 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; - -/*** 后台需要实现的java方法并注入到js中 ***/ - -/** - * 读取本地文件->应用程序目录 - * @param filePath - * @returns {string} - */ -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 -} - -/** - * 处理返回的json数据 - * @param html - * @returns {*} - */ -function dealJson(html) { - try { - // html = html.match(/[\w|\W|\s|\S]*?(\{[\w|\W|\s|\S]*\})/).group[1]; - 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) {} - // console.log(typeof(html)); - return html; -} - -/** - * 验证码识别逻辑,需要java实现(js没有bytes类型,无法调用后端的传递图片二进制获取验证码文本的接口) - * @type {{api: string, classification: (function(*=): string)}} - */ -var OcrApi={ - api:OCR_API, - classification:function (img){ // img是byte类型,这里不方便搞啊 - let code = ''; - try { - let html = request(this.api,{data:{img:img},headers:{'User-Agent':PC_UA},'method':'POST'},true); - html = JSON.parse(html); - code = html.url||''; - }catch (e) {} - return code - } -}; -/** - * 验证码识别,暂未实现 - * @param url 验证码图片链接 - * @returns {string} 验证成功后的cookie - */ -function verifyCode(url){ - let cnt = 0; - let host = getHome(url); - let cookie = ''; - while (cnt < OCR_RETRY){ - try{ - // let obj = {headers:headers,timeout:timeout}; - 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){ - // print(json); - let setCk = Object.keys(json).find(it=>it.toLowerCase()==='set-cookie'); - // cookie = json['set-cookie']?json['set-cookie'].split(';')[0]:''; - cookie = setCk?json[setCk].split(';')[0]:''; - } - // console.log(hhtml); - console.log('cookie:'+cookie); - let img = json.body; - // console.log(img); - 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,'User-Agent':MOBILE_UA},'method':'POST'}); - // console.log(html); - html = JSON.parse(html); - if(html.msg === 'ok'){ - console.log(`第${cnt+1}次验证码提交成功`); - return cookie // 需要返回cookie - }else if(html.msg!=='ok'&&cnt+1>=OCR_RETRY){ - cookie = ''; // 需要清空返回cookie - } - }catch (e) { - console.log(`第${cnt+1}次验证码提交失败:${e.message}`); - if(cnt+1>=OCR_RETRY){ - cookie = ''; - } - } - cnt+=1 - } - return cookie -} - -/** - * 存在数据库配置表里, key字段对应值value,没有就新增,有就更新,调用此方法会清除key对应的内存缓存 - * @param k 键 - * @param v 值 - */ -function setItem(k,v){ - local.set(RKEY,k,v); - console.log(`规则${RKEY}设置${k} => ${v}`) -} - -/** - * 获取数据库配置表对应的key字段的value,没有这个key就返回value默认传参.需要有缓存,第一次获取后会存在内存里 - * @param k 键 - * @param v 值 - * @returns {*} - */ -function getItem(k,v){ - return local.get(RKEY,k) || v; -} - -/** - * 删除数据库key对应的一条数据,并清除此key对应的内存缓存 - * @param k - */ -function clearItem(k){ - local.delete(RKEY,k); -} - -/*** js自封装的方法 ***/ - -/** - * 获取链接的host(带http协议的完整链接) - * @param url 任意一个正常完整的Url,自动提取根 - * @returns {string} - */ -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 -} - -/** - * get参数编译链接,类似python params字典自动拼接 - * @param url 访问链接 - * @param obj 参数字典 - * @returns {*} - */ -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 -} - -/** - * 远程依赖执行函数 - * @param url 远程js地址 - */ -function require(url){ - eval(request(url)); -} -/** - * 海阔网页请求函数完整封装 - * @param url 请求链接 - * @param obj 请求对象 {headers:{},method:'',timeout:5000,body:'',withHeaders:false} - * @param ocr_flag 标识此flag是用于请求ocr识别的,自动过滤content-type指定编码 - * @returns {string|string|DocumentFragment|*} - */ -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); - } - 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(!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["Content-Type"] = 'text/html; charset='+rule.encoding; - } - } - if(typeof(obj.body)!='undefined'&&obj.body&&typeof (obj.body)==='string'){ - let data = {}; - obj.body.split('&').forEach(it=>{ - data[it.split('=')[0]] = it.split('=')[1] - }); - obj.data = data; - delete obj.body - }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){ // 返回base64,用于请求图片 - obj.buffer = 2; - delete obj.toBase64 - } - console.log(JSON.stringify(obj.headers)); - // console.log('request:'+url+' obj:'+JSON.stringify(obj)); - console.log('request:'+url); - let res = req(url, obj); - let html = res.content||''; - // console.log(html); - if(obj.withHeaders){ - let htmlWithHeaders = res.headers; - htmlWithHeaders.body = html; - return JSON.stringify(htmlWithHeaders); - }else{ - return html - } -} - -/** - * 快捷post请求 - * @param url 地址 - * @param obj 对象 - * @returns {string|DocumentFragment|*} - */ -function post(url,obj){ - obj.method = 'POST'; - return request(url,obj); -} - -fetch = request; -print = function (data){ - data = data||''; - if(typeof(data)!=='string'){ - try { - data = JSON.stringify(data); - }catch (e) { - console.log('print:'+e.message) - } - } - if(typeof(data)!=='string'){ - console.log(typeof(data)+':'+data.length); - }else{ - console.log(data); - } -} -log = print; -/** - * 检查宝塔验证并自动跳过获取正确源码 - * @param html 之前获取的html - * @param url 之前的来源url - * @param obj 来源obj - * @returns {string|DocumentFragment|*} - */ -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 -} - -/** - * 带一次宝塔验证的源码获取 - * @param url 请求链接 - * @param obj 请求参数 - * @returns {string|DocumentFragment} - */ -function getCode(url,obj){ - let html = request(url,obj); - html = checkHtml(html,url,obj); - return html -} - -/** - * 源rule专用的请求方法,自动注入cookie - * @param url 请求链接 - * @returns {string|DocumentFragment} - */ -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')){ - obj.headers['Cookie'] = cookie; - }else if(!obj.headers){ - obj.headers = {Cookie:cookie}; - } - } - let html = getCode(url,obj); - return html -} - -/** - * 首页分类解析,筛选暂未实现 - * @param homeObj 首页传参对象 - * @returns {string} - */ -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) { - let p = homeObj.class_parse.split(';'); - let _ps = parseTags.getParse(p[0]); - _pdfa = _ps.pdfa; - _pdfh = _ps.pdfh; - _pd = _ps.pd; - MY_URL = rule.url; - if (p.length >= 3) { // 可以不写正则 - try { - let html = getHtml(homeObj.MY_URL); - if (html) { - homeHtmlCache = html; - let list = _pdfa(html, p[0]); - 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 = pdfh(it, p[2]); - let url = _pd(it, p[2]); - if (p.length > 3 && p[3]) { - 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); - -} - -/** - * 推荐和搜索单字段继承一级 - * @param p 推荐或搜索的解析分割;列表 - * @param pn 自身列表序号 - * @param pp 一级解析分割;列表 - * @param ppn 继承一级序号 - * @returns {*} - */ -function getPP(p, pn, pp, ppn){ - let ps = p[pn] === '*' && pp.length > ppn ?pp[ppn]:p[pn] - return ps -} - -/** - * 首页推荐列表解析 - * @param homeVodObj - * @returns {string} - */ -function homeVodParse(homeVodObj){ - fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); - let d = []; - MY_URL = homeVodObj.homeUrl; - // setItem('MY_URL',MY_URL); - 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.一级.split(';'); - if(p.startsWith('js:')){ - const TYPE = 'home'; - var input = MY_URL; - const 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:)/,''); - // print(p[0]); - let html = homeHtmlCache || getHtml(MY_URL); - homeHtmlCache = undefined; - if(is_json){ - // print('是json,开始处理'); - html = dealJson(html); - } - try { - console.log('double:' + homeVodObj.double); - if (homeVodObj.double) { - let items = _pdfa(html, p0); - // console.log(items.length); - for (let item of items) { - // console.log(p[1]); - let items2 = _pdfa(item, p[1]); - // console.log(items2.length); - for (let item2 of items2) { - try { - let p2 = getPP(p,2,pp,1); - let title = _pdfh(item2, p2); - let img = ''; - try { - let p3 = getPP(p,3,pp,2); - img = _pd(item2, p3); - } catch (e) {} - let desc = ''; - try { - let p4 = getPP(p,4,pp,3); - desc = _pdfh(item2, p4); - }catch (e) {} - let p5 = getPP(p,5,pp,4); - 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]){ - let p6 = getPP(p,6,pp,5); - 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 - }; - // print(vod); - d.push(vod); - } catch (e) { - console.log('首页列表处理发生错误:'+e.message); - } - - } - - - } - - - } else { - let items = _pdfa(html, p0); - for (let item of items) { - try { - let p1 = getPP(p,1,pp,1); - let title = _pdfh(item, p1); - let img = ''; - try { - let p2 = getPP(p,2,pp,2); - img = _pd(item, p2, MY_URL); - } catch (e) {} - let desc = ''; - try { - let p3 = getPP(p,3,pp,3); - desc = _pdfh(item, p3); - }catch (e) {} - let p4 = getPP(p,4,pp,4); - 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]){ - let p5 = getPP(p,5,pp,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) { - - } - - } - - } - - } catch (e) { - - } - } - let t2 = (new Date()).getTime(); - console.log('加载首页推荐耗时:'+(t2-t1)+'毫秒'); - // console.log(JSON.stringify(d)); - if(rule.图片来源){ - d.forEach(it=>{ - if(it.vod_pic&&it.vod_pic.startsWith('http')){ - it.vod_pic = it.vod_pic + rule.图片来源; - } - }); - } - return JSON.stringify({ - list:d - }) -} - -/** - * 一级分类页数据解析 - * @param cateObj - * @returns {string} - */ -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).replaceAll('fypage', cateObj.pg); - let url = cateObj.url.replaceAll('fyclass', cateObj.tid); - 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); - } - // console.log('filter:'+cateObj.filter); - 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'){ - // 引用传递转值传递,避免污染self变量 - 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}); - // console.log('jinjia2执行后的new_url类型为:'+typeof(new_url)); - if(/object Object/.test(new_url)){ - new_url = drT.renderText(url,fl); - } - url = new_url; - } - if(/fypage/.test(url)){ - if(url.includes('(')&&url.includes(')')){ - let url_rep = url.match(/.*?\((.*)\)/)[1]; - // console.log(url_rep); - let cnt_page = url_rep.replaceAll('fypage', cateObj.pg); - // console.log(cnt_page); - let cnt_pg = eval(cnt_page); - // console.log(cnt_pg); - url = url.replaceAll(url_rep,cnt_pg).replaceAll('(','').replaceAll(')',''); - }else{ - url = url.replaceAll('fypage',cateObj.pg); - } - } - 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]; - } - MY_URL = url; - // setItem('MY_URL',MY_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.图片来源){ - d.forEach(it=>{ - if(it.vod_pic&&it.vod_pic.startsWith('http')){ - it.vod_pic = it.vod_pic + rule.图片来源; - } - }); - } - // print(d); - return d.length<1?'{}':JSON.stringify({ - 'page': parseInt(cateObj.pg), - 'pagecount': 999, - 'limit': 20, - 'total': 999, - 'list': d, - }); -} - -/** - * 搜索列表数据解析 - * @param searchObj - * @returns {string} - */ -function searchParse(searchObj) { - fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); - let d = []; - if(!searchObj.searchUrl){ - return '{}' - } - let p = searchObj.搜索==='*'&&rule.一级 ? rule.一级 : searchObj.搜索; - if(!p||typeof(p)!=='string'){ - return '{}' - } - p = p.trim(); - let pp = rule.一级.split(';'); - let url = searchObj.searchUrl.replaceAll('**', searchObj.wd).replaceAll('fypage', searchObj.pg); - MY_URL = url; - console.log(MY_URL); - // log(searchObj.搜索); - // setItem('MY_URL',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:)/,''); - // print('1381 p0:'+p0); - try { - let html = getHtml(MY_URL); - if (html) { - if(/系统安全验证|输入验证码/.test(html)){ - let cookie = verifyCode(MY_URL); - if(cookie){ - console.log(`本次成功过验证,cookie:${cookie}`); - setItem(RULE_CK,cookie); - }else{ - console.log(`本次自动过搜索验证失败,cookie:${cookie}`); - } - // obj.headers['Cookie'] = cookie; - html = getHtml(MY_URL); - } - if(!html.includes(searchObj.wd)){ - console.log('搜索结果源码未包含关键字,疑似搜索失败,正为您打印结果源码'); - console.log(html); - } - if(is_json){ - // console.log(html); - html = dealJson(html); - } - console.log(JSON.stringify(html)); - console.log(html); - let list = _pdfa(html, p0); - // print(list.length); - // print(list); - list.forEach(it => { - 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 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]){ - let p5 = getPP(p,5,pp,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.图片来源){ - d.forEach(it=>{ - if(it.vod_pic&&it.vod_pic.startsWith('http')){ - it.vod_pic = it.vod_pic + rule.图片来源; - } - }); - } - // print(d); - return JSON.stringify({ - 'page': parseInt(searchObj.pg), - 'pagecount': 10, - 'limit': 20, - 'total': 100, - 'list': d, - }); -} - -/** - * 二级详情页数据解析 - * @param detailObj - * @returns {string} - */ -function detailParse(detailObj){ - 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.二级==='*'){ - // vod_id = orId.split('@@')[0]; // 千万不能分割 - let extra = orId.split('@@'); - vod_name = extra.length>1?extra[1]:vod_name; - vod_pic = extra.length>2?extra[2]:vod_pic; - } - // print(vod_pic); - let vod = { - vod_id: vod_id, //"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; - console.log(MY_URL); - // setItem('MY_URL',MY_URL); - 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'){ - if(!html){ - html = getHtml(MY_URL); - } - let _impJQP = true; - let _ps; - if(p.is_json){ - _ps = parseTags.json; - html = dealJson(html); - _impJQP = false; - }else if(p.is_jsp){ - _ps = parseTags.jsp; - }else if(p.is_jq){ - _ps = parseTags.jq; - }else{ - _ps = parseTags.jq; - } - if (_impJQP) { - let c$ = cheerio.load(html); - html = { rr: c$, ele: c$('html')[0] } - } - _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]).replaceAll('\n', ' ').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 (_impJQP) { - let c$ = cheerio.load(html); - html = { rr: c$, ele: c$('html')[0] } - } - } - -// console.log(2); - if(p.tabs){ - if(p.tabs.startsWith('js:')){ - print('开始执行tabs代码:'+p.tabs); - if(html&&typeof (html)!=='string'){ - try { // 假装是jq的对象拿来转换一下字符串,try为了防止json的情况报错 - html = html.rr(html.ele).toString(); - }catch (e) {} - } - var input = MY_URL; - eval(p.tabs.replace('js:','')); - playFrom = TABS; - }else{ - let p_tab = p.tabs.split(';')[0]; - // console.log(p_tab); - let vHeader = _pdfa(html, p_tab); - console.log(vHeader.length); - let tab_text = p.tab_text||'body&&Text'; - // print('tab_text:'+tab_text); - for(let v of vHeader){ - let v_title = _pdfh(v,tab_text).trim(); - console.log(v_title); - if(tab_exclude&& (new RegExp(tab_exclude)).test(v_title)){ - continue; - } - playFrom.push(v_title); - } - } - console.log(JSON.stringify(playFrom)); - }else{ - playFrom = ['道长在线'] - } - vod.vod_play_from = playFrom.join(vod_play_from); - -// console.log(3); - let vod_play_url = '$$$'; - let vod_tab_list = []; - if(p.lists){ - if(p.lists.startsWith('js:')){ - print('开始执行lists代码:'+p.lists); - try { - if(html&&typeof (html)!=='string'){ - // 假装是jq的对象拿来转换一下字符串,try为了防止json的情况报错 - try { - html = html.rr(html.ele).toString(); - }catch (e) {} - } - var input = MY_URL; - var play_url = ''; - eval(p.lists.replace('js:','')); - for(let i in LISTS){ - if(LISTS.hasOwnProperty(i)){ - // print(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'; - // print('list_text:'+list_text); - // print('list_url:'+list_url); - // print('list_parse:'+p.lists); - let is_tab_js = p.tabs.trim().startsWith('js:'); - for(let i=0;i 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); - console.log(p1); - // console.log(html); - let vodList = []; - try { - vodList = _pdfa(html, p1); - console.log('len(vodList):'+vodList.length); - }catch (e) { - // console.log(e.message); - } - let new_vod_list = []; - // print('tab_ext:'+tab_ext); - let tabName = tab_ext?_pdfh(html, tab_ext):tab_name; - console.log(tabName); - // console.log('cheerio解析Text'); - vodList.forEach(it=>{ - // 请注意,这里要固定pdfh解析body&&Text,不需要下划线,没写错 - // new_vod_list.push(pdfh(it,'body&&Text')+'$'+_pd(it,'a&&href',MY_URL)); - // new_vod_list.push(cheerio.load(it).text()+'$'+_pd(it,'a&&href',MY_URL)); - // new_vod_list.push(_pdfh(it, list_text).trim() + '$' + _pd(it, list_url, MY_URL)); - new_vod_list.push(_pdfh(it, list_text).trim() + '$' + _pd(it, list_url, MY_URL)); - }); - 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.图片来源 && vod.vod_pic && vod.vod_pic.startsWith('http')){ - vod.vod_pic = vod.vod_pic + rule.图片来源; - } - if(!vod.vod_id){ - vod.vod_id = vod_id; - } - // print(vod); - return JSON.stringify({ - list: [vod] - }) -} - -/** - * 判断是否需要解析 - * @param url - * @returns {number|number} - */ -function tellIsJx(url){ - try { - let is_vip = !/\.(m3u8|mp4|m4a)$/.test(url.split('?')[0]) && 是否正版(url); - return is_vip?1:0 - }catch (e) { - return 1 - } -} -/** - * 选集播放点击事件解析 - * @param playObj - * @returns {string} - */ -function playParse(playObj){ - fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); - MY_URL = playObj.url; - if(!/http/.test(MY_URL)){ - try { - MY_URL = base64Decode(MY_URL); - }catch (e) {} - } - MY_URL = decodeURIComponent(MY_URL); - var input = MY_URL;//注入给免嗅js - let common_play = { - parse:1, - url:input, - // url:urlencode(input), - 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.replace('js:','').trim(); - print('开始执行js免嗅=>'+lazy_code); - eval(lazy_code); - lazy_play = typeof(input) === 'object'?input:{ - parse:1, - jx:tellIsJx(input), - url:input - }; - }catch (e) { - print('js免嗅错误:'+e.message); - lazy_play = common_play; - } - }else{ - lazy_play = common_play; - } - // print('play_json:'+typeof(rule.play_json)); - // console.log(Array.isArray(rule.play_json)); - if(Array.isArray(rule.play_json) && rule.play_json.length >0){ // 数组情况判断长度大于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; - // print('开始合并:'); - // print(base_json); - lazy_play = Object.assign(lazy_play,base_json); - break; - } - } - } - }else if(rule.play_json && !Array.isArray(rule.play_json)){ // 其他情况 非[] 判断true/false - let base_json = { - jx:1, - parse:1, - }; - lazy_play = Object.assign(lazy_play,base_json); - }else if(!rule.play_json){ // 不解析传0 - 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); -} - -/** - * js源预处理特定返回对象中的函数 - * @param ext - */ - function init(ext) { - console.log('init'); - try { - // make shared jsContext happy muban不能import,不然会造成换源继承后变量被篡改 - if (typeof (globalThis.mubanJs) === 'undefined') { - let mubanJs = request('https://gitcode.net/qq_32394351/dr_py/-/raw/master/js/模板.js', { 'User-Agent': MOBILE_UA }); - mubanJs = mubanJs.replace('export default', '(function() {return muban;}()) // export default'); - // console.log(mubanJs); - globalThis.mubanJs = mubanJs; - } - let muban = eval(globalThis.mubanJs); - if (typeof ext == 'object'){ - rule = ext; - } else if (typeof ext == 'string') { - if (ext.startsWith('http')) { - let js = request(ext,{'method':'GET'}); - if (js){ - eval(js.replace('var rule', 'rule')); - } - } - } else { - eval(ext.replace('var rule', 'rule')); - } - if (rule.模板 && muban.hasOwnProperty(rule.模板)) { - print('继承模板:'+rule.模板); - rule = Object.assign(muban[rule.模板], 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.host = (rule.host||'').rstrip('/'); - 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.detailUrl = rule.host&&rule.detailUrl?urljoin(rule.host,rule.detailUrl):rule.detailUrl; - 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; - } - rule.searchUrl = rule.host && rule.searchUrl ? urljoin(rule.host,rule.searchUrl) : rule.searchUrl; - - rule.timeout = rule.timeout||5000; - rule.encoding = rule.编码||rule.encoding||'utf-8'; - rule.图片来源 = rule.图片来源||''; - rule.play_json = rule.hasOwnProperty('play_json')?rule.play_json:[]; - 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); - } - } - } - }catch (e) { - console.log('处理headers发生错误:'+e.message); - } - } - // print(rule.headers); - rule_fetch_params = {'headers': rule.headers||false, 'timeout': rule.timeout, 'encoding': rule.encoding}; - oheaders = rule.headers||{}; - RKEY = typeof(key)!=='undefined'&&key?key:'drpy_' + (rule.title || rule.host); - init_test(); - }catch (e) { - console.log('init_test发生错误:'+e.message); - } -} - -let homeHtmlCache = undefined; - -/** - * js源获取首页分类和筛选特定返回对象中的函数 - * @param filter 筛选条件字典对象 - * @returns {string} - */ -function home(filter) { - console.log("home"); - let homeObj = { - filter:rule.filter||false, - MY_URL: rule.homeUrl, - class_name: rule.class_name || '', - class_url: rule.class_url || '', - class_parse: rule.class_parse || '', - cate_exclude: rule.cate_exclude, - }; - return homeParse(homeObj); -} - -/** - * js源获取首页推荐数据列表特定返回对象中的函数 - * @param params - * @returns {string} - */ -function homeVod(params) { - console.log("homeVod"); - let homeVodObj = { - 推荐:rule.推荐, - double:rule.double, - homeUrl:rule.homeUrl, - detailUrl:rule.detailUrl - }; - return homeVodParse(homeVodObj) - // return "{}"; -} - -/** - * js源获取分类页一级数据列表特定返回对象中的函数 - * @param tid 分类id - * @param pg 页数 - * @param filter 当前选中的筛选条件 - * @param extend 扩展 - * @returns {string} - */ -function category(tid, pg, filter, extend) { - let cateObj = { - url: rule.url, - 一级: rule.一级, - tid: tid, - pg: parseInt(pg), - filter: filter, - extend: extend - }; - // console.log(JSON.stringify(extend)); - return categoryParse(cateObj) -} - -/** - * js源获取二级详情页数据特定返回对象中的函数 - * @param vod_url 一级列表中的vod_id或者是带分类的自拼接 vod_id 如 fyclass$vod_id - * @returns {string} - */ -function detail(vod_url) { - let orId = vod_url; - let fyclass = ''; - 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.二级, - detailUrl:detailUrl, - fyclass:fyclass, - tab_exclude:rule.tab_exclude, - } - return detailParse(detailObj) -} - -/** - * js源选集按钮播放点击事件特定返回对象中的函数 - * @param flag 线路名 - * @param id 播放按钮的链接 - * @param flags 全局配置的flags是否需要解析的标识列表 - * @returns {string} - */ -function play(flag, id, flags) { - let playObj = { - url:id, - flag:flag, - flags:flags - } - return playParse(playObj); -} - -/** - * js源搜索返回的数据列表特定返回对象中的函数 - * @param wd 搜索关键字 - * @param quick 是否来自快速搜索 - * @returns {string} - */ -function search(wd, quick) { - let searchObj = { - searchUrl: rule.searchUrl, - 搜索: rule.搜索, - wd: wd, - //pg: pg, - pg: 1, - quick: quick, - }; - // console.log(JSON.stringify(searchObj)); - return searchParse(searchObj) -} - -function DRPY(){//导出函数 - return { - init: init, - home: home, - homeVod: homeVod, - category: category, - detail: detail, - play: play, - search: search, - } -} - -// 导出函数对象 -export default { - init: init, - home: home, - homeVod: homeVod, - category: category, - detail: detail, - play: play, - search: search, - DRPY:DRPY -} diff --git a/TVBox_JS/lib/drpy.min.js b/TVBox_JS/lib/drpy.min.js deleted file mode 100644 index 9c20237..0000000 --- a/TVBox_JS/lib/drpy.min.js +++ /dev/null @@ -1 +0,0 @@ -import cheerio from"assets://js/lib/cheerio.min.js";import"assets://js/lib/crypto-js.js";function init_test(){console.log("init_test_start");console.log("当前版本号:"+VERSION);console.log(RKEY);console.log(JSON.stringify(rule));console.log("init_test_end")}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 VERSION="drpy1 3.9.25beta1 20221126";const MOBILE_UA="Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 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="猜你|喜欢|APP|下载|剧情|热播";const OCR_RETRY=3;const OCR_API="http://cms.nokia.press:5706/parse/ocr";if(typeof MY_URL==="undefined"){var MY_URL}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)$/;const SELECT_REGEX=/:eq|:lt|:gt|#/g;const SELECT_REGEX_A=/:eq|:lt|:gt/g;if(typeof Object.assign!="function"){Object.assign=function(){var target=arguments[0];for(var i=1;ithis.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=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=[];globalThis.encodeUrl=urlencode;globalThis.urlencode=urlencode;function urljoin(fromPath,nowPath){fromPath=fromPath||"";nowPath=nowPath||"";return joinUrl(fromPath,nowPath)}var urljoin2=urljoin;const defaultParser={pdfh:pdfh,pdfa:pdfa,pd(html,parse,uri){let ret=this.pdfh(html,parse);if(typeof uri==="undefined"||!uri){uri=""}if(DOM_CHECK_ATTR.test(parse)){if(/http/.test(ret)){ret=ret.substr(ret.indexOf("http"))}else{ret=urljoin(MY_URL,ret)}}return ret}};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]}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)){if(/http/.test(ret)){ret=ret.substr(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,base_url){if(!parse||!parse.trim()){return""}let eleFind=typeof html==="object";let option=undefined;if(eleFind&&parse.startsWith("body&&")){parse=parse.substr(6);if(parse.indexOf("&&")<0){option=parse.trim();parse="*=*"}}if(parse.indexOf("&&")>-1){let sp=parse.split("&&");option=sp[sp.length-1];sp.splice(sp.length-1);if(sp.length>1){for(let i in sp){if(sp.hasOwnProperty(i)){if(!SELECT_REGEX.test(sp[i])){sp[i]=sp[i]+":eq(0)"}}}}else{if(!SELECT_REGEX.test(sp[0])){sp[0]=sp[0]+":eq(0)"}}parse=sp.join(" ")}let result="";const $=eleFind?html.rr:cheerio.load(html);let ret=eleFind?parse==="*=*"||$(html.ele).is(parse)?html.ele:$(html.ele).find(parse):$(parse);if(option){if(option==="Text"){result=$(ret).text()}else if(option==="Html"){result=$(ret).html()}else{result=$(ret).attr(option);if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){try{result=result.match(/url\((.*?)\)/)[1]}catch(e){}}}if(result&&base_url&&DOM_CHECK_ATTR.test(option)){if(/http/.test(result)){result=result.substr(result.indexOf("http"))}else{result=urljoin(base_url,result)}}}else{result=$(ret).toString()}return result},pdfa(html,parse){if(!parse||!parse.trim()){print("!parse");return[]}let eleFind=typeof html==="object";if(parse.indexOf("&&")>-1){let sp=parse.split("&&");for(let i in sp){if(sp.hasOwnProperty(i)){if(!SELECT_REGEX_A.test(sp[i])&&iit.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,"User-Agent":MOBILE_UA},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 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(!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}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.method="POST";return request(url,obj)}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")){obj.headers["Cookie"]=cookie}else if(!obj.headers){obj.headers={Cookie:cookie}}}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=3){try{let html=getHtml(homeObj.MY_URL);if(html){homeHtmlCache=html;let list=_pdfa(html,p[0]);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]){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.一级.split(";");if(p.startsWith("js:")){const TYPE="home";var input=MY_URL;const 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){}}}}catch(e){}}let t2=(new Date).getTime();console.log("加载首页推荐耗时:"+(t2-t1)+"毫秒");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(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)}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});if(/object Object/.test(new_url)){new_url=drT.renderText(url,fl)}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)}}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]}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.图片来源){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 d.length<1?"{}":JSON.stringify({page:parseInt(cateObj.pg),pagecount:999,limit:20,total:999,list:d})}function searchParse(searchObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];if(!searchObj.searchUrl){return"{}"}let p=searchObj.搜索==="*"&&rule.一级?rule.一级:searchObj.搜索;if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级.split(";");let url=searchObj.searchUrl.replaceAll("**",searchObj.wd).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}`);html=post(rurl,{body: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="{}"}html=post(rurl,{body:params})}else{html=getHtml(MY_URL)}if(html){if(/系统安全验证|输入验证码/.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.图片来源){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(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 _impJQP=false;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}if(_ps===parseTags.jq){_impJQP=true}if(_impJQP){let ttt1=(new Date).getTime();let c$=cheerio.load(html);html={rr:c$,ele:c$("html")[0]};print(`二级${MY_URL}仅cheerio.load源码耗时:${(new Date).getTime()-ttt1}毫秒`)}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(_impJQP){let c$=cheerio.load(html);html={rr:c$,ele:c$("html")[0]}}}if(p.tabs){if(p.tabs.startsWith("js:")){print("开始执行tabs代码:"+p.tabs);if(html&&_impJQP&&typeof html!=="string"){try{html=html.rr(html.ele).toString()}catch(e){}}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();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{if(html&&_impJQP&&typeof html!=="string"){try{html=html.rr(html.ele).toString()}catch(e){}}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 is_tab_js=p.tabs.trim().startsWith("js:");for(let i=0;i1&&!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 vodList=[];try{vodList=_pdfa(html,p1);console.log("len(vodList):"+vodList.length)}catch(e){}let new_vod_list=[];let tabName=tab_ext?_pdfh(html,tab_ext):tab_name;console.log(tabName);let tt1=(new Date).getTime();vodList.forEach((it,idex)=>{new_vod_list.push(_pdfh(it,list_text).trim()+"$"+_pd(it,list_url,MY_URL))});if(vodList.length>0){new_vod_list=forceOrder(new_vod_list,"",x=>x.split("$")[0]);console.log(`drpy影响性能代码共计列表数循环次数:${vodList.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.图片来源&&vod.vod_pic&&vod.vod_pic.startsWith("http")){vod.vod_pic=vod.vod_pic+rule.图片来源}if(!vod.vod_id){vod.vod_id=vod_id}let t2=(new Date).getTime();console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);return JSON.stringify({list:[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;if(!/http/.test(MY_URL)){try{MY_URL=base64Decode(MY_URL)}catch(e){}}MY_URL=decodeURIComponent(MY_URL);var input=MY_URL;let common_play={parse:1,url:input,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.replace("js:","").trim();print("开始执行js免嗅=>"+lazy_code);eval(lazy_code);lazy_play=typeof input==="object"?input:{parse: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 init(ext){console.log("init");try{if(typeof globalThis.mubanJs==="undefined"){let mubanJs=request("https://gitcode.net/qq_32394351/dr_py/-/raw/master/js/模板.js",{"User-Agent":MOBILE_UA});mubanJs=mubanJs.replace("export default","(function() {return muban;}()) // export default");globalThis.mubanJs=mubanJs}let muban=eval(globalThis.mubanJs);if(typeof ext=="object"){rule=ext}else if(typeof ext=="string"){if(ext.startsWith("http")){let js=request(ext,{method:"GET"});if(js){eval(js.replace("var rule","rule"))}}else{eval(ext.replace("var rule","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.host=(rule.host||"").rstrip("/");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.detailUrl=rule.host&&rule.detailUrl?urljoin(rule.host,rule.detailUrl):rule.detailUrl;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}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.图片来源=rule.图片来源||"";rule.play_json=rule.hasOwnProperty("play_json")?rule.play_json:[];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)}}}}catch(e){console.log("处理headers发生错误:"+e.message)}}rule_fetch_params={headers:rule.headers||false,timeout:rule.timeout,encoding:rule.encoding};oheaders=rule.headers||{};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){console.log("home");let homeObj={filter:rule.filter||false,MY_URL:rule.homeUrl,class_name:rule.class_name||"",class_url:rule.class_url||"",class_parse:rule.class_parse||"",cate_exclude:rule.cate_exclude};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="";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.二级,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){let searchObj={searchUrl:rule.searchUrl,"搜索":rule.搜索,wd:wd,pg:1,quick:quick};return searchParse(searchObj)}function DRPY(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search}}export default{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,DRPY:DRPY}; \ No newline at end of file diff --git a/TVBox_JS/lib/drpy.ym.js b/TVBox_JS/lib/drpy.ym.js deleted file mode 100644 index 1b36709..0000000 --- a/TVBox_JS/lib/drpy.ym.js +++ /dev/null @@ -1,4 +0,0 @@ -import './util.ym.js' -import dr from './drpy.min.js' - -__JS_SPIDER__ = dr.DRPY() \ No newline at end of file diff --git a/TVBox_JS/lib/drpy2.min.js b/TVBox_JS/lib/drpy2.min.js deleted file mode 100644 index 1b83eed..0000000 --- a/TVBox_JS/lib/drpy2.min.js +++ /dev/null @@ -1 +0,0 @@ -import cheerio from"assets://js/lib/cheerio.min.js";import"assets://js/lib/crypto-js.js";import 模板 from"./模板.js";function init_test(){console.log("init_test_start");console.log("当前版本号:"+VERSION);console.log(RKEY);console.log(JSON.stringify(rule));console.log("init_test_end")}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 VERSION="drpy2 3.9.27 20221129";const MOBILE_UA="Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 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="猜你|喜欢|APP|下载|剧情|热播";const OCR_RETRY=3;const OCR_API="http://cms.nokia.press:5706/parse/ocr";if(typeof MY_URL==="undefined"){var MY_URL}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)$/;const NOADD_INDEX=/:eq|:lt|:gt|:first|:last|^body$|^#/;const URLJOIN_ATTR=/(url|src|href|-original|-src|-play|-url)$/;const SELECT_REGEX=/:eq|:lt|:gt|#/g;const SELECT_REGEX_A=/:eq|:lt|:gt/g;if(typeof Object.assign!="function"){Object.assign=function(){var target=arguments[0];for(var i=1;ithis.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=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=[];globalThis.encodeUrl=urlencode;globalThis.urlencode=urlencode;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]}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)){if(/http/.test(ret)){ret=ret.substr(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{let html=request(this.api,{data:{img:img},headers:{"User-Agent":PC_UA},method:"POST"},true);html=JSON.parse(html);code=html.url||""}catch(e){}return code}};function verifyCode(url){let cnt=0;let host=getHome(url);let cookie="";while(cntit.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,"User-Agent":MOBILE_UA},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 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(!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}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.method="POST";return request(url,obj)}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")){obj.headers["Cookie"]=cookie}else if(!obj.headers){obj.headers={Cookie:cookie}}}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=3){try{let html=getHtml(homeObj.MY_URL);if(html){homeHtmlCache=html;let list=_pdfa(html,p[0]);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]){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.一级.split(";");if(p.startsWith("js:")){const TYPE="home";var input=MY_URL;const 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.图片来源){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(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)}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});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)}}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]}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.图片来源){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 d.length<1?"{}":JSON.stringify({page:parseInt(cateObj.pg),pagecount:999,limit:20,total:999,list:d})}function searchParse(searchObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];if(!searchObj.searchUrl){return"{}"}let p=searchObj.搜索==="*"&&rule.一级?rule.一级:searchObj.搜索;if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级.split(";");let url=searchObj.searchUrl.replaceAll("**",searchObj.wd).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}`);html=post(rurl,{body: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="{}"}html=post(rurl,{body:params})}else{html=getHtml(MY_URL)}if(html){if(/系统安全验证|输入验证码/.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.图片来源){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(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();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 is_tab_js=p.tabs.trim().startsWith("js:");for(let i=0;i1&&!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 vodList=[];try{vodList=_pdfa(html,p1);console.log("len(vodList):"+vodList.length)}catch(e){}let new_vod_list=[];let tabName=tab_ext?_pdfh(html,tab_ext):tab_name;console.log(tabName);let tt1=(new Date).getTime();vodList.forEach((it,idex)=>{new_vod_list.push(_pdfh(it,list_text).trim()+"$"+_pd(it,list_url,MY_URL))});if(vodList.length>0){new_vod_list=forceOrder(new_vod_list,"",x=>x.split("$")[0]);console.log(`drpy影响性能代码共计列表数循环次数:${vodList.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.图片来源&&vod.vod_pic&&vod.vod_pic.startsWith("http")){vod.vod_pic=vod.vod_pic+rule.图片来源}if(!vod.vod_id){vod.vod_id=vod_id}let t2=(new Date).getTime();console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);return JSON.stringify({list:[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;if(!/http/.test(MY_URL)){try{MY_URL=base64Decode(MY_URL)}catch(e){}}MY_URL=decodeURIComponent(MY_URL);var input=MY_URL;let common_play={parse:1,url:input,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.replace("js:","").trim();print("开始执行js免嗅=>"+lazy_code);eval(lazy_code);lazy_play=typeof input==="object"?input:{parse: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 init(ext){console.log("init");try{let muban=模板.getMubans();if(typeof ext=="object"){rule=ext}else if(typeof ext=="string"){if(ext.startsWith("http")){let js=request(ext,{method:"GET"});if(js){eval(js.replace("var rule","rule"))}}else{eval(ext.replace("var rule","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.host=(rule.host||"").rstrip("/");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.detailUrl=rule.host&&rule.detailUrl?urljoin(rule.host,rule.detailUrl):rule.detailUrl;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}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.图片来源=rule.图片来源||"";rule.play_json=rule.hasOwnProperty("play_json")?rule.play_json:[];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)}}}}catch(e){console.log("处理headers发生错误:"+e.message)}}rule_fetch_params={headers:rule.headers||false,timeout:rule.timeout,encoding:rule.encoding};oheaders=rule.headers||{};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){console.log("home");let homeObj={filter:rule.filter||false,MY_URL:rule.homeUrl,class_name:rule.class_name||"",class_url:rule.class_url||"",class_parse:rule.class_parse||"",cate_exclude:rule.cate_exclude};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="";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.二级,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){let searchObj={searchUrl:rule.searchUrl,"搜索":rule.搜索,wd:wd,pg:1,quick:quick};return searchParse(searchObj)}function DRPY(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search}}export default{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,DRPY:DRPY}; \ No newline at end of file diff --git a/TVBox_JS/lib/util.js b/TVBox_JS/lib/util.js deleted file mode 100644 index fdfc808..0000000 --- a/TVBox_JS/lib/util.js +++ /dev/null @@ -1,300 +0,0 @@ -import 'assets://js/lib/uri.min.js' -import cheerio from 'assets://js/lib/cheerio.min.js'; -import 'assets://js/lib/crypto-js.js' -import 'assets://js/lib/dayjs.min.js' -import _ from 'assets://js/lib/underscore-esm-min.js' - -var charStr = 'abacdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789'; -export function randIndex(min, max, i) { - let index = Math.floor(Math.random() * (max - min + 1) + min), - numStart = charStr.length - 10; - if (i == 0 && index >= numStart) { - index = randIndex(min, max, i); - } - return index; -} - -export function randomStr(len) { - let min = 0, max = charStr.length - 1, _str = ''; - len = len || 15; - for (var i = 0, index; i < len; i++) { - index = randIndex(min, max, i); - _str += charStr[index]; - } - return _str; -} -if (typeof Object.assign != 'function') { - Object.assign = function () { - var target = arguments[0]; - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var 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) {//this是空或者未定义,抛出错误 - throw new TypeError('"this" is null or not defined'); - } - - var o = Object(this);//将this转变成对象 - var len = o.length >>> 0;//无符号右移0位,获取对象length属性,如果未定义就会变成0 - - if (len === 0) {//length为0直接返回false未找到目标值 - 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) {//如果某一位置与寻找目标相等,返回true,找到了 - return true; - } - k++; - } - return false;//未找到,返回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.prototype.myValues = 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; -} -if (typeof Object.prototype.values != 'function') { - Object.prototype.values = 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; - } -} -if (typeof Array.prototype.join != 'function') { - Array.prototype.join = function (emoji) { - // emoji = 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; - }; -} - -String.prototype.rstrip = function (chars) { - let regex = new RegExp(chars + "$"); - return this.replace(regex, ""); -}; - -Array.prototype.append = Array.prototype.push; -String.prototype.strip = String.prototype.trim; - -export 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); -} - -export function urlDeal(vipUrl) { - if (!vipUrl) { - return '' - } - if (!是否正版(vipUrl)) { - return vipUrl - } - if (!/miguvideo/.test(vipUrl)) { - vipUrl = vipUrl.split('#')[0].split('?')[0]; - } - return vipUrl -} - -export 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, '+'); -} - -export function base64Encode(text) { - return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text)); -} - -export function base64Decode(text) { - return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(text)); -} - -export function urljoin(base, url) { - base = base || ''; - url = url || ''; - let baseU = new Uri(base.trim().rstrip('/')); - url = url.trim().rstrip('/'); - let u = undefined; - if (url.startsWith('http://') || url.startsWith('https://')) { - u = new Uri(url); - } else if (url.startsWith('://')) { - u = new Uri(baseU.protocol() + url); - } else if (url.startsWith('//')) { - u = new Uri(baseU.protocol() + ':' + url); - } else { - u = new Uri(baseU.protocol() + '://' + baseU.host() + (baseU.port() ? ':' + baseU.port() : '') + '/' + url); - } - if ((!u.path() || u.path().trim().length === 0) && baseU.path()) - u.path(baseU.path()); - if (!u.query() && baseU.query()) - u.query(baseU.query()); - return u.toString(); -} - -export function md5(src) { - return CryptoJS.MD5(src).toString(); -} - -const DOM_CHECK_ATTR = /(url|src|href|data-original|data-src)$/; -const SELECT_REGEX = /:eq|:lt|:gt|#/g; -const SELECT_REGEX_A = /:eq|:lt|:gt/g; - -export function pdfh(html, parse, base_url) { - if (!parse || !parse.trim()) { - return '' - } - let eleFind = typeof html === 'object'; - let option = undefined; - if (eleFind && parse.startsWith('body&&')) { - parse = parse.substr(6); - if (parse.indexOf('&&') < 0) { - option = parse.trim(); - parse = '*=*'; - } - } - if (parse.indexOf('&&') > -1) { - let sp = parse.split('&&'); - option = sp[sp.length - 1]; - sp.splice(sp.length - 1); - if (sp.length > 1) { - for (let i in sp) { - if (!SELECT_REGEX.test(sp[i])) { - sp[i] = sp[i] + ':eq(0)'; - } - } - } else { - if (!SELECT_REGEX.test(sp[0])) { - sp[0] = sp[0] + ':eq(0)'; - } - } - parse = sp.join(' '); - } - let result = ''; - const $ = eleFind ? html.rr : cheerio.load(html); - let ret = eleFind ? (parse === '*=*' ? html.ele : $(html.ele).find(parse)) : $(parse); - if (option) { - if (option === 'Text') { - result = $(ret).text(); - } - else if (option === 'Html') { - result = $(ret).html(); - } - else { - result = $(ret).attr(option); - } - if (result && base_url && DOM_CHECK_ATTR.test(option)) { - if (/http/.test(result)) { - result = result.substr(result.indexOf('http')); - } else { - result = urljoin(base_url, result) - } - } - } else { - result = $(ret).toString(); - } - return result; -} - -export function pdfa(html, parse) { - if (!parse || !parse.trim()) { - return []; - } - let eleFind = typeof html === 'object'; - if (parse.indexOf('&&') > -1) { - let sp = parse.split('&&'); - for (let i in sp) { - if (!SELECT_REGEX_A.test(sp[i]) && i < sp.length - 1) { - sp[i] = sp[i] + ':eq(0)'; - } - } - parse = sp.join(' '); - } - const $ = eleFind ? html.rr : cheerio.load(html); - let ret = eleFind ? $(html.ele).find(parse) : $(parse); - let result = []; - if (ret) { - ret.each(function (idx, ele) { - result.push({ rr: $, ele: ele }); - }); - } - return result; -} - -globalThis.randIndex = randIndex; -globalThis.randomStr = randomStr; -globalThis.urljoin = urljoin; -globalThis.joinUrl = urljoin; -globalThis.urljoin2 = urljoin; -globalThis.是否正版 = 是否正版; -globalThis.urlDeal = urlDeal; -globalThis.urlencode = urlencode; -globalThis.encodeUrl = urlencode; -globalThis.base64Encode = base64Encode; -globalThis.base64Decode = base64Decode; -globalThis.pdfa = pdfa; -globalThis.pdfh = pdfh; -globalThis.md5 = md5; \ No newline at end of file diff --git a/TVBox_JS/lib/yingmo.js b/TVBox_JS/lib/yingmo.js deleted file mode 100644 index 11790d7..0000000 --- a/TVBox_JS/lib/yingmo.js +++ /dev/null @@ -1,1447 +0,0 @@ -import './util.js'; -import cheerio from 'assets://js/lib/cheerio.min.js'; -import 'assets://js/lib/crypto-js.js' -// import muban from 'https://gitcode.net/qq_32394351/dr_py/-/raw/master/js/模板.js'; - -// const key = 'drpy_zbk'; -// eval(req('http://192.168.1.124:5705/libs/es6py.js').content); -function init_test() { - console.log("init_test_start"); - console.log(RKEY); - console.log(JSON.stringify(rule)); - // clearItem(RULE_CK); - // console.log(JSON.stringify(rule)); - // let aa = base64Encode('编码测试一下') - // log(aa); - // let bb = base64Decode(aa); - // log('bb:' + bb); - // console.log(request('https://www.baidu.com',{withHeaders:true})); - // console.log(request('https://www.baidu.com/favicon.ico', { toBase64: true })); - // require('http://192.168.10.99:5705/txt/pluto/drT.js'); - // console.log(typeof(drT)); - // console.log(drT.renderText('{{fl.cate}},hi, {{fl}}哈哈.{{fl}}',{sort: 1,cate:'movie'},'fl')); - console.log("init_test_end"); -} - -let rule = {}; -/** 已知问题记录 - * 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 - * Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 - * 2.import es6py.js但是里面的函数没有被装载进来.比如drpy规则报错setResult2 is undefiend - * 3.无法重复导入cheerio(怎么解决drpy和parseTag里都需要导入cheerio的问题) 无法在副文件导入cheerio (现在是全部放在drpy一个文件里了,凑合解决?) - * 4.有个错误不知道哪儿来的 executeScript: com.quickjs.JSObject$Undefined cannot be cast to java.lang.String 在 点击选集播放打印init_test_end后面打印 - * 5.需要实现 stringify 函数,比起JSON.stringify函数,它会原封不动保留中文不会编码unicode - * todo: jsp:{pdfa,pdfh,pd},json:{pdfa,pdfh,pd},jq:{pdfa,pdfh,pd} - * * 电脑看日志调试 - adb tcpip 5555 - adb connect 192.168.10.192 - adb devices -l - adb logcat -c - adb logcat | grep -i QuickJS - * **/ - - -/*** 以下是内置变量和解析方法 **/ -const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 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'; // 源cookie的key值 -// const KEY = typeof(key)!=='undefined'&&key?key:'drpy_' + (rule.title || rule.host); // 源的唯一标识 -const CATE_EXCLUDE = '首页|留言|APP|下载|资讯|新闻|动态'; -const TAB_EXCLUDE = '猜你|喜欢|APP|下载|剧情|热播'; -const OCR_RETRY = 3;//ocr验证重试次数 -// const OCR_API = 'http://dm.mudery.com:10000';//ocr在线识别接口 -// const OCR_API = 'http://192.168.3.239:5705/parse/ocr';//ocr在线识别接口 -const OCR_API = 'http://cms.nokia.press/parse/ocr';//ocr在线识别接口 -if (typeof (MY_URL) === 'undefined') { - var MY_URL; // 全局注入变量,pd函数需要 -} -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', 'data-original', 'data-src']; -const DOM_CHECK_ATTR = /(url|src|href|data-original|data-src)$/; -const SELECT_REGEX = /:eq|:lt|:gt|#/g; -const SELECT_REGEX_A = /:eq|:lt|:gt/g; - -function setResult(d) { - if (!Array.isArray(d)) { - return [] - } - VODS = []; - // print(d); - 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) { - // print(a); - // print(word); - var Encrypted = CryptoJS.AES.encrypt(word, a, { - iv: t, - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.Pkcs7 - }); - return Encrypted.ciphertext.toString(); - } - }; - } - return {}; -} - -// 千万不要用for in 推荐 forEach (for in 会打乱顺序) -//猫函数 -function maoss(jxurl, ref, key) { - 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); - } - // print(html); - 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); - // log("iv:"+iv); - // log(html); - // print(key); - // print(iv); - eval(html.match(/var config = {[\s\S]*?}/)[0] + ''); - // config.url = config.url.replace(/,/g,''); - // print(config.url); - if (!config.url.startsWith('http')) { - //config.url = decodeURIComponent(AES(config.url, key, iv)); - config.url = CryptoJS.AES.decrypt(config.url, key, { - iv: iv, - padding: CryptoJS.pad.Pkcs7 - }).toString(CryptoJS.enc.Utf8) - } - return config.url; - } catch (e) { - return ''; - } -} - -let VODS = [];// 一级或者搜索需要的数据列表 -let VOD = {};// 二级的单个数据 - -/** - * 重写pd方法-增加自动urljoin(没法重写,改个名继续骗) - * @param html - * @param parse - * @param uri - * @returns {*} - */ -function pD(html, parse, uri) { - let ret = pdfh(html, parse); - if (typeof (uri) === 'undefined' || !uri) { - uri = ''; - } - if (DOM_CHECK_ATTR.test(parse)) { - if (/http/.test(ret)) { - ret = ret.substr(ret.indexOf('http')); - } else { - ret = urljoin(MY_URL, ret) - } - } - // MY_URL = getItem('MY_URL',MY_URL); - // console.log(`规则${RKEY}打印MY_URL:${MY_URL},uri:${uri}`); - return ret -} - -const parseTags = { - jsp: { - pdfh: pdfh, - pdfa: pdfa, - pd: pD, - }, - 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: pdfh, - pdfa: pdfa, - pd(html, parse, uri) { - return parseTags.jq.pdfh(html, parse, MY_URL); - }, - }, - getParse(p0) {//非js开头的情况自动获取解析标签 - 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; - -/*** 后台需要实现的java方法并注入到js中 ***/ - -/** - * 读取本地文件->应用程序目录 - * @param filePath - * @returns {string} - */ -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 -} - -/** - * 处理返回的json数据 - * @param html - * @returns {*} - */ -function dealJson(html) { - try { - return html.match(/[\w|\W|\s|\S]*?(\{[\w|\W|\s|\S]*\})/).group[1]; - } catch (e) { - } - try { - html = JSON.parse(html); - } catch (e) { } - // console.log(typeof(html)); - return html; -} - -/** - * 验证码识别逻辑,需要java实现(js没有bytes类型,无法调用后端的传递图片二进制获取验证码文本的接口) - * @type {{api: string, classification: (function(*=): string)}} - */ -var OcrApi = { - api: OCR_API, - classification: function (img) { // img是byte类型,这里不方便搞啊 - let code = ''; - try { - let html = request(this.api, { data: { img: img }, headers: { 'User-Agent': PC_UA }, 'method': 'POST' }); - html = JSON.parse(html); - code = html.url || ''; - } catch (e) { } - return code - } -}; -/** - * 验证码识别,暂未实现 - * @param url 验证码图片链接 - * @returns {string} 验证成功后的cookie - */ -function verifyCode(url) { - let cnt = 0; - let host = getHome(url); - let cookie = ''; - while (cnt < OCR_RETRY) { - try { - // let obj = {headers:headers,timeout:timeout}; - let yzm_url = `${host}/index.php/verify/index.html`; - console.log(`验证码链接:${yzm_url}`); - let hhtml = request(yzm_url, { withHeaders: true, toBase64: true }); - let json = JSON.parse(hhtml); - if (!cookie) { - cookie = json['set-cookie'] ? json['set-cookie'].split(';')[0] : ''; - } - // console.log(hhtml); - console.log('cookie:' + cookie); - let img = json.body; - // console.log(img); - 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, 'User-Agent': MOBILE_UA }, 'method': 'POST' }); - // console.log(html); - html = JSON.parse(html); - if (html.msg === 'ok') { - console.log(`第${cnt + 1}次验证码提交成功`); - return cookie // 需要返回cookie - } else if (html.msg !== 'ok' && cnt + 1 >= OCR_RETRY) { - cookie = ''; // 需要清空返回cookie - } - } catch (e) { - console.log(`第${cnt + 1}次验证码提交失败:${e.message}`); - if (cnt + 1 >= OCR_RETRY) { - cookie = ''; - } - } - cnt += 1 - } - return cookie -} - -/** - * 存在数据库配置表里, key字段对应值value,没有就新增,有就更新,调用此方法会清除key对应的内存缓存 - * @param k 键 - * @param v 值 - */ -function setItem(k, v) { - local.set(RKEY, k, v); - console.log(`规则${RKEY}设置${k} => ${v}`) -} - -/** - * 获取数据库配置表对应的key字段的value,没有这个key就返回value默认传参.需要有缓存,第一次获取后会存在内存里 - * @param k 键 - * @param v 值 - * @returns {*} - */ -function getItem(k, v) { - return local.get(RKEY, k) || v; -} - -/** - * 删除数据库key对应的一条数据,并清除此key对应的内存缓存 - * @param k - */ -function clearItem(k) { - local.delete(RKEY, k); -} - -/*** js自封装的方法 ***/ - -/** - * 获取链接的host(带http协议的完整链接) - * @param url 任意一个正常完整的Url,自动提取根 - * @returns {string} - */ -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 -} - -/** - * get参数编译链接,类似python params字典自动拼接 - * @param url 访问链接 - * @param obj 参数字典 - * @returns {*} - */ -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 -} - -/** - * 远程依赖执行函数 - * @param url 远程js地址 - */ -function require(url) { - eval(request(url)); -} -/** - * 海阔网页请求函数完整封装 - * @param url 请求链接 - * @param obj 请求对象 {headers:{},method:'',timeout:5000,body:'',withHeaders:false} - * @returns {string|string|DocumentFragment|*} - */ -function request(url, obj) { - 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); - } - 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 (!keys.includes('referer')) { - headers['Referer'] = getHome(url); - } - obj.headers = headers; - } - console.log(JSON.stringify(obj.headers)); - if (typeof (obj.headers.body) != 'undefined' && obj.headers.body && typeof (obj.headers.body) === 'string') { - let data = {}; - obj.headers.body.split('&').forEach(it => { - data[it.split('=')[0]] = it.split('=')[1] - }); - obj.data = data; - delete obj.headers.body - } - if (!url) { - return obj.withHeaders ? '{}' : '' - } - if (obj.toBase64) { // 返回base64,用于请求图片 - obj.buffer = 2; - delete obj.toBase64 - } - console.log('request:' + url); - let res = req(url, obj); - let html = res.content || ''; - // console.log(html); - if (obj.withHeaders) { - let htmlWithHeaders = res.headers; - htmlWithHeaders.body = html; - return JSON.stringify(htmlWithHeaders); - } else { - return html - } -} - -fetch = request; -print = function (data) { - data = data || ''; - if (typeof (data) !== 'string') { - try { - data = JSON.stringify(data); - } catch (e) { - console.log('print:' + e.message) - } - } - console.log(data); -} -log = console.log; -/** - * 检查宝塔验证并自动跳过获取正确源码 - * @param html 之前获取的html - * @param url 之前的来源url - * @param obj 来源obj - * @returns {string|DocumentFragment|*} - */ -function checkHtml(html, url, obj) { - if (/\?btwaf=/.test(html)) { - let btwaf = html.match(/btwaf(.*?)"/)[1]; - url = url.split('#')[0] + '?btwaf' + btwaf; - html = request(url, obj); - } - return html -} - -/** - * 带一次宝塔验证的源码获取 - * @param url 请求链接 - * @param obj 请求参数 - * @returns {string|DocumentFragment} - */ -function getCode(url, obj) { - let html = request(url, obj); - html = checkHtml(html, url, obj); - return html -} - -/** - * 源rule专用的请求方法,自动注入cookie - * @param url 请求链接 - * @returns {string|DocumentFragment} - */ -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')) { - obj.headers['Cookie'] = cookie; - } else if (!obj.headers) { - obj.headers = { Cookie: cookie }; - } - } - let html = getCode(url, obj); - return html -} - -/** - * 首页分类解析,筛选暂未实现 - * @param homeObj 首页传参对象 - * @returns {string} - */ -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) { - let p = homeObj.class_parse.split(';'); - if (p.length >= 4) { - try { - let html = getHtml(homeObj.MY_URL); - if (html) { - homeHtmlCache = html; - let list = pdfa(html, p[0]); - 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 = pdfh(it, p[2]); - if (p[3]) { - 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); - -} - -/** - * 首页推荐列表解析 - * @param homeVodObj - * @returns {string} - */ -function homeVodParse(homeVodObj) { - fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); - let d = []; - MY_URL = homeVodObj.homeUrl; - // setItem('MY_URL',MY_URL); - console.log(MY_URL); - let p = homeVodObj.推荐; - if (!p || typeof (p) !== 'string') { - return '{}' - } - p = p.trim(); - if (p.startsWith('js:')) { - const TYPE = 'home'; - var input = MY_URL; - const 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 _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:)/, ''); - // print(p[0]); - 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, p[0]); - // console.log(items.length); - for (let item of items) { - // console.log(p[1]); - let items2 = _pdfa(item, p[1]); - // console.log(items2.length); - for (let item2 of items2) { - try { - let title = _pdfh(item2, p[2]); - let img = ''; - try { - img = _pd(item2, p[3]) - } catch (e) { - } - let desc = _pdfh(item2, p[4]); - let links = []; - for (let p5 of p[5].split('+')) { - let link = !homeVodObj.detailUrl ? _pd(item2, p5, MY_URL) : _pdfh(item2, p5); - links.push(link); - } - let vod = { - vod_name: title, - vod_pic: img, - vod_remarks: desc, - vod_id: links.join('$') - }; - // print(vod); - d.push(vod); - } catch (e) { - console.log('首页列表处理发生错误:' + e.message); - } - - } - } - } else { - let items = _pdfa(html, p[0]); - for (let item of items) { - try { - let title = _pdfh(item, p[1]); - let img = ''; - try { - img = _pd(item, p[2], MY_URL); - } catch (e) { - - } - let desc = _pdfh(item, p[3]); - let links = []; - for (let p5 of p[4].split('+')) { - let link = !homeVodObj.detailUrl ? _pd(item, p5, MY_URL) : _pdfh(item, p5); - links.push(link); - } - let vod = { - vod_name: title, - vod_pic: img, - vod_remarks: desc, - vod_id: links.join('$') - }; - d.push(vod); - - } catch (e) { - - } - - } - - } - - } catch (e) { - - } - } - // console.log(JSON.stringify(d)); - return JSON.stringify({ - list: d - }) -} - -/** - * 一级分类页数据解析 - * @param cateObj - * @returns {string} - */ -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).replaceAll('fypage', cateObj.pg); - let url = cateObj.url.replaceAll('fyclass', cateObj.tid); - 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); - } - // console.log('filter:'+cateObj.filter); - let fl = cateObj.filter ? cateObj.extend : {}; - let new_url; - new_url = cheerio.jinja2(url, { fl: fl }); - // if (/object Object/.test(new_url)) { - // new_url = drT.renderText(url, fl); - // } - url = new_url; - } - if (/fypage/.test(url)) { - if (url.includes('(') && url.includes(')')) { - let url_rep = url.match(/.*?\((.*)\)/)[1]; - // console.log(url_rep); - let cnt_page = url_rep.replaceAll('fypage', cateObj.pg); - // console.log(cnt_page); - let cnt_pg = eval(cnt_page); - // console.log(cnt_pg); - url = url.replaceAll(url_rep, cnt_pg).replaceAll('(', '').replaceAll(')', ''); - } else { - url = url.replaceAll('fypage', cateObj.pg); - } - } - if (cateObj.pg === 1 && url.includes('[') && url.includes(']')) { - url = url.split('[')[1].split(']')[0]; - } - MY_URL = url; - // setItem('MY_URL',MY_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; - d.push({ - 'vod_id': vod_id, - 'vod_name': _pdfh(it, p[1]).replace(/\n|\t/g, '').trim(), - 'vod_pic': _pd(it, p[2], MY_URL), - 'vod_remarks': _pdfh(it, p[3]).replace(/\n|\t/g, '').trim(), - }); - }); - } - } catch (e) { - console.log(e.message); - } - } - // print(d); - return d.length < 1 ? '{}' : JSON.stringify({ - 'page': parseInt(cateObj.pg), - 'pagecount': 999, - 'limit': 20, - 'total': 999, - 'list': d, - }); -} - -/** - * 搜索列表数据解析 - * @param searchObj - * @returns {string} - */ -function searchParse(searchObj) { - fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); - let d = []; - if (!searchObj.searchUrl) { - return '{}' - } - let p = searchObj.搜索 === '*' && rule.一级 ? rule.一级 : searchObj.搜索; - if (!p || typeof (p) !== 'string') { - return '{}' - } - p = p.trim(); - let url = searchObj.searchUrl.replaceAll('**', searchObj.wd).replaceAll('fypage', searchObj.pg); - MY_URL = url; - console.log(MY_URL); - // setItem('MY_URL',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 _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 (/系统安全验证|输入验证码/.test(html)) { - let cookie = verifyCode(MY_URL); - if (cookie) { - console.log(`本次成功过验证,cookie:${cookie}`); - setItem(RULE_CK, cookie); - } else { - console.log(`本次自动过搜索验证失败,cookie:${cookie}`); - } - // obj.headers['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, 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 ob = { - 'vod_id': link, - 'vod_name': _pdfh(it, p[1]).replace(/\n|\t/g, '').trim(), - 'vod_pic': _pd(it, p[2], MY_URL), - 'vod_remarks': _pdfh(it, p[3]).replace(/\n|\t/g, '').trim(), - }; - if (p.length > 5 && p[5]) { - ob.vod_content = _pdfh(it, p[5]); - } - d.push(ob); - }); - - } - } catch (e) { - return '{}' - } - - } - return JSON.stringify({ - 'page': parseInt(searchObj.pg), - 'pagecount': 10, - 'limit': 20, - 'total': 100, - 'list': d, - }); -} - -/** - * 二级详情页数据解析 - * @param detailObj - * @returns {string} - */ -function detailParse(detailObj) { - fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); - let vod = { - vod_id: detailObj.orId, //"id", - vod_name: "片名", - 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; - console.log(MY_URL); - // setItem('MY_URL',MY_URL); - if (p === '*') { - vod.vod_play_from = '道长在线'; - vod.vod_remarks = detailUrl; - vod.vod_actor = '没有二级,只有一级链接直接嗅探播放'; - vod.vod_content = MY_URL; - vod.vod_play_url = '嗅探播放$' + MY_URL; - } else if (typeof (p) === 'string' && p.trim().startsWith('js:')) { - const TYPE = 'detail'; - var input = MY_URL; - eval(p.trim().replace('js:', '')); - vod = VOD; - console.log(JSON.stringify(vod)); - } else if (p && typeof (p) === 'object') { - if (!html) { - html = getHtml(MY_URL); - } - let _impJQP = true; - let _ps; - if (p.is_json) { - _ps = parseTags.json; - html = dealJson(html); - _impJQP = false; - } else if (p.is_jsp) { - _ps = parseTags.jsp; - } else if (p.is_jq) { - _ps = parseTags.jq; - } else { - _ps = parseTags.jq; - } - if (_impJQP) { - let c$ = cheerio.load(html); - html = { rr: c$, ele: c$('html')[0] } - } - _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]).replaceAll('\n', ' ').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:')) { - html = eval(p.重定向.replace('js:', '')); - if (_impJQP) { - let c$ = cheerio.load(html); - html = { rr: c$, ele: c$('html')[0] } - } - } - - // console.log(2); - if (p.tabs) { - let p_tab = p.tabs.split(';')[0]; - console.log(p_tab); - let vHeader = _pdfa(html, p_tab); - - console.log(vHeader.length); - for (let v of vHeader) { - let v_title = _pdfh(v, 'body&&Text'); - console.log(v_title); - if (tab_exclude && (new RegExp(tab_exclude)).test(v_title)) { - continue; - } - playFrom.push(v_title); - } - console.log(JSON.stringify(playFrom)); - } else { - playFrom = ['道长在线'] - } - vod.vod_play_from = playFrom.join(vod_play_from); - - // console.log(3); - let vod_play_url = '$$$'; - let vod_tab_list = []; - if (p.lists) { - for (let i = 0; i < playFrom.length; i++) { - let tab_name = playFrom[i]; - let tab_ext = p.tabs.split(';').length > 1 ? 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); - console.log(p1); - // console.log(html); - let vodList = []; - try { - vodList = _pdfa(html, p1); - console.log('len(vodList):' + vodList.length); - } catch (e) { - // console.log(e.message); - } - let new_vod_list = []; - let tabName = tab_ext ? _pdfh(html, tab_ext) : tab_name; - console.log(tabName); - // console.log('cheerio解析Text'); - vodList.forEach(it => { - // 请注意,这里要固定pdfh解析body&&Text,不需要下划线,没写错 - // new_vod_list.push(pdfh(it,'body&&Text')+'$'+_pd(it,'a&&href',MY_URL)); - // new_vod_list.push(cheerio.load(it).text() + '$' + _pd(it, 'a&&href', MY_URL)); - new_vod_list.push(_pdfh(it, 'body&&Text') + '$' + _pd(it, 'a&&href', MY_URL)); - }); - let vlist = new_vod_list.join('#'); - vod_tab_list.push(vlist); - } - } - vod.vod_play_url = vod_tab_list.join(vod_play_url); - } - // print(vod); - return JSON.stringify({ - list: [vod] - }) -} - -/** - * 选集播放点击事件解析 - * @param playObj - * @returns {string} - */ -function playParse(playObj) { - fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); - MY_URL = playObj.url; - if (!/http/.test(MY_URL)) { - try { - MY_URL = base64Decode(MY_URL); - } catch (e) { } - } - MY_URL = decodeURIComponent(MY_URL); - var input = MY_URL;//注入给免嗅js - let common_play = { - parse: 1, - url: 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.replace('js:', '').trim(); - print('开始执行js免嗅=>' + lazy_code); - eval(lazy_code); - lazy_play = typeof (input) === 'object' ? input : { - parse: 1, - jx: 1, - url: input - }; - } catch (e) { - print('js免嗅错误:' + e.message); - lazy_play = common_play; - } - } else { - lazy_play = common_play; - } - console.log(JSON.stringify(lazy_play)); - return JSON.stringify(lazy_play); -} - -/** - * js源预处理特定返回对象中的函数 - * @param ext - */ -function init(ext) { - console.log('init'); - try { - // make shared jsContext happy - if (typeof (globalThis.mubanJs) === 'undefined') { - let mubanJs = request('https://gitcode.net/qq_32394351/dr_py/-/raw/master/js/模板.js', { 'User-Agent': MOBILE_UA }); - mubanJs = mubanJs.replace('export default', '(function() {return muban;}()) // export default'); - globalThis.mubanJs = mubanJs; - } - let muban = eval(globalThis.mubanJs); - if (typeof ext == 'object') { - rule = ext; - if (rule.template) { - rule = Object.assign(muban[rule.template], rule); - } - } else if (typeof ext == 'string') { - if (ext.startsWith('http')) { - let js = request(ext, { 'method': 'GET' }); - if (js) { - eval(js.replace('var rule', 'rule')); - } - } - } else { - eval(ext.replace('var rule', '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.host = (rule.host || '').rstrip('/'); - 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.detailUrl = rule.host && rule.detailUrl ? urljoin(rule.host, rule.detailUrl) : rule.detailUrl; - 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; - } - rule.searchUrl = rule.host && rule.searchUrl ? urljoin(rule.host, rule.searchUrl) : rule.searchUrl; - - rule.timeout = rule.timeout || 5000; - rule.encoding = rule.编码 || rule.encoding || 'utf-8'; - 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); - } - } - } - } catch (e) { - console.log('处理headers发生错误:' + e.message); - } - } - // print(rule.headers); - rule_fetch_params = { 'headers': rule.headers || false, 'timeout': rule.timeout, 'encoding': rule.encoding }; - oheaders = rule.headers || {}; - RKEY = typeof (key) !== 'undefined' && key ? key : 'drpy_' + (rule.title || rule.host); - init_test(); - } catch (e) { - console.log('init_test发生错误:' + e.message); - } -} - -let homeHtmlCache = undefined; - -/** - * js源获取首页分类和筛选特定返回对象中的函数 - * @param filter 筛选条件字典对象 - * @returns {string} - */ -function home(filter) { - console.log("home"); - let homeObj = { - filter: rule.filter || false, - MY_URL: rule.homeUrl, - class_name: rule.class_name || '', - class_url: rule.class_url || '', - class_parse: rule.class_parse || '', - cate_exclude: rule.cate_exclude, - }; - return homeParse(homeObj); -} - -/** - * js源获取首页推荐数据列表特定返回对象中的函数 - * @param params - * @returns {string} - */ -function homeVod(params) { - let homeVodObj = { - 推荐: rule.推荐, - double: rule.double, - homeUrl: rule.homeUrl, - detailUrl: rule.detailUrl - }; - return homeVodParse(homeVodObj) - // return "{}"; -} - -/** - * js源获取分类页一级数据列表特定返回对象中的函数 - * @param tid 分类id - * @param pg 页数 - * @param filter 当前选中的筛选条件 - * @param extend 扩展 - * @returns {string} - */ -function category(tid, pg, filter, extend) { - let cateObj = { - url: rule.url, - 一级: rule.一级, - tid: tid, - pg: parseInt(pg), - filter: filter, - extend: extend - }; - // console.log(JSON.stringify(extend)); - return categoryParse(cateObj) -} - -/** - * js源获取二级详情页数据特定返回对象中的函数 - * @param vod_url 一级列表中的vod_id或者是带分类的自拼接 vod_id 如 fyclass$vod_id - * @returns {string} - */ -function detail(vod_url) { - let orId = vod_url; - let fyclass = ''; - if (vod_url.indexOf('$') > -1) { - let tmp = vod_url.split('$'); - fyclass = tmp[0]; - vod_url = tmp[1]; - } - let detailUrl = vod_url; - 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.二级, - detailUrl: detailUrl, - fyclass: fyclass, - tab_exclude: rule.tab_exclude, - } - return detailParse(detailObj) -} - -/** - * js源选集按钮播放点击事件特定返回对象中的函数 - * @param flag 线路名 - * @param id 播放按钮的链接 - * @param flags 全局配置的flags是否需要解析的标识列表 - * @returns {string} - */ -function play(flag, id, flags) { - let playObj = { - url: id, - flag: flag, - flags: flags - } - return playParse(playObj); -} - -/** - * js源搜索返回的数据列表特定返回对象中的函数 - * @param wd 搜索关键字 - * @param quick 是否来自快速搜索 - * @returns {string} - */ -function search(wd, quick) { - let searchObj = { - searchUrl: rule.searchUrl, - 搜索: rule.搜索, - wd: wd, - //pg: pg, - pg: 1, - quick: quick, - }; - // console.log(JSON.stringify(searchObj)); - return searchParse(searchObj) -} - -function DRPY() {//导出函数 - return { - init: init, - home: home, - homeVod: homeVod, - category: category, - detail: detail, - play: play, - search: search, - } -} - - -let pd = pD; - -// 导出函数对象 -__JS_SPIDER__ = { - init: init, - home: home, - homeVod: homeVod, - category: category, - detail: detail, - play: play, - search: search, - DRPY: DRPY -} diff --git a/TVBox_JS/lib/格式范例.txt b/TVBox_JS/lib/格式范例.txt deleted file mode 100644 index 5d32f1b..0000000 --- a/TVBox_JS/lib/格式范例.txt +++ /dev/null @@ -1 +0,0 @@ -{"key":"drpy_js_douban","name":"影视┃豆瓣推荐","type":3,"searchable":1,"quickSearch":1,"filterable":1,"api":"./yingmo.js","ext":"./douban.js"}, \ No newline at end of file diff --git a/TVBox_JS/lib/模板.js b/TVBox_JS/lib/模板.js deleted file mode 100644 index 2635a63..0000000 --- a/TVBox_JS/lib/模板.js +++ /dev/null @@ -1,274 +0,0 @@ -if (typeof Object.assign != 'function') { - Object.assign = function () { - var target = arguments[0]; - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - return target; -}; -} -function getMubans() { - var mubanDict = { // 模板字典 - 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(2):lt(8);a&&Text;a&&href;/(\\d+).html', - play_parse: true, - lazy: '', - limit: 6, - 推荐: '.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href', - double: true, // 推荐内容是否双层定位 - 一级: 'body a.module-poster-item.module-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href', - 二级: { - "title": "h1&&Text;.module-info-tag&&Text", - "img": ".lazyload&&data-original", - "desc": ".module-info-item:eq(1)&&Text;.module-info-item:eq(2)&&Text;.module-info-item:eq(3)&&Text", - "content": ".module-info-introduction&&Text", - "tabs": ".module-tab-item", - "lists": ".module-play-list:eq(#id) a" - }, - 搜索: '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: '', - limit: 6, - 推荐: '.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href', - double: true, // 推荐内容是否双层定位 - 一级: '.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(0)&&Text;.video-info-items:eq(1)&&Text;.video-info-items:eq(2)&&Text;.video-info-items:eq(3)&&Text", - "content": ".vod_content&&Text", - "tabs": ".module-tab-item", - "lists": ".module-player-list:eq(#id)&&.scroll-content&&a" - }, - 搜索: '.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(5);a&&Text;a&&href;/(\\d+).html', - play_parse: true, - lazy: '', - limit: 6, - 推荐: 'ul.myui-vodlist.clearfix;li;a&&title;a&&data-original;.pic-text&&Text;a&&href', - double: true, // 推荐内容是否双层定位 - 一级: '.myui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href', - 二级: { - "title": ".myui-content__detail .title&&Text;.myui-content__detail p:eq(-2)&&Text", - "img": ".myui-content__thumb .lazyload&&data-original", - "desc": ".myui-content__detail p:eq(0)&&Text;.myui-content__detail p:eq(1)&&Text;.myui-content__detail p:eq(2)&&Text", - "content": ".content&&Text", - "tabs": ".nav-tabs:eq(0) li", - "lists": ".myui-content__list:eq(#id) li" - }, - 搜索: '#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&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;/(\\d+).html', - class_parse: '.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;.*/(.*?).html', - play_parse: true, - lazy: '', - limit: 6, - 推荐: 'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href', - double: true, // 推荐内容是否双层定位 - 一级: '.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)&&Text", - "img": ".stui-content__thumb .lazyload&&data-original", - "desc": ".stui-content__detail p:eq(0)&&Text;.stui-content__detail p:eq(1)&&Text;.stui-content__detail p:eq(2)&&Text", - "content": ".detail&&Text", - "tabs": ".stui-vodlist__head h3", - "lists": ".stui-content__playlist:eq(#id) li" - }, - 搜索: 'ul.stui-vodlist__media:eq(0) li,ul.stui-vodlist:eq(0) li,#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text', - 搜索1: 'ul.stui-vodlist&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text', - 搜索2: 'ul.stui-vodlist__media&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text', - }, - 默认: { - title: '', - host: '', - url: '/vodshow/fyclass--------fypage---.html', - searchUrl: '/vodsearch/-------------.html?wd=**', - searchable: 2,//是否启用全局搜索, - quickSearch: 0,//是否启用快速搜索, - filterable: 0,//是否启用分类筛选, - headers: { - 'User-Agent': 'MOBILE_UA', - }, - play_parse: true, - lazy: '', - limit: 6, - double: true, // 推荐内容是否双层定位 - }, - 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.fed-part-eone:gt(0):lt(5);a&&Text;a&&href;.*/(.*?).html', - class_parse: '.fed-pops-navbar&&ul.fed-part-rows&&a;a&&Text;a&&href;.*/(.*?).html', - play_parse: true, - lazy: '', - limit: 6, - 推荐: 'ul.fed-list-info.fed-part-rows;li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href', - double: true, // 推荐内容是否双层定位 - 一级: '.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: '', - 推荐: '.hl-vod-list;li;a&&title;a&&data-original;.remarks&&Text;a&&href', - double: true, - 一级: '.hl-vod-list&&.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href', - 二级: { - "title": ".hl-infos-title&&Text;.hl-text-conch&&Text", - "img": ".hl-lazy&&data-original", - "desc": ".hl-infos-content&&.hl-text-conch&&Text", - "content": ".hl-content-text&&Text", - "tabs": ".hl-tabs&&a", - "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: '', - 推荐: '.list-a.size;li;a&&title;.lazy&&data-original;.bt&&Text;a&&href', - double: true, - 一级: '.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: '', - limit: 6, - 推荐: '.indexShowBox;ul&&li;a&&title;img&&data-src;.s1&&Text;a&&href', - double: true, // 推荐内容是否双层定位 - 一级: '.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', - } - - }; - 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/TVBox_JS/qiumi1314.js b/TVBox_JS/qiumi1314.js deleted file mode 100644 index 0484616..0000000 --- a/TVBox_JS/qiumi1314.js +++ /dev/null @@ -1,91 +0,0 @@ -{ - "author": "dj", - "ua": "", - //"homeUrl": "http://qiumi1314.com/", - "homeUrl": "http://jrkankan.com/", - //"homeUrl": "http://jrkan365.com/", - - "cateManual": { - "DJ看": "1" - }, - - // 首页推荐视频的节点 - "homeVodNode": "//ul[@data-stype='zqlq']", - // 首页推荐视频的名称 - //"homeVodName": "/li[@class='lab_events']/span/text()", - "homeVodName": "concat(/li[@class='lab_time']/text(),'-',/li[@class='lab_events']/span/text())", - // 首页推荐视频的id - "homeVodId": "/li[@class='lab_channel']/a[1]/@href", - // 二次处理正则 - "homeVodIdR": "http://play.sportsteam365.com/play/steam(\\d+).html", - //"cateVodIdR": "\\S+/(\\d+).html", - // 首页推荐视频的图片 - "homeVodImg": "/li[@class='lab_team_home']/span/img/@src", - // 首页推荐视频的简介 - "homeVodMark": "concat(//li[@class='lab_team_home']/strong/text(),'-',//li[@class='lab_team_away']/strong/text(),'-dj')", - "home": "dj", - // 分类页地址 {cateId} 分类id {catePg} 当前页 - "cateUrl": "http://www.jrskan.com/", - // 同上面的homeVod字段 分类列表中的视频信息 - "cateVodNode": "//ul[@data-stype='zqlq']", - //"cateVodName": "/li[@class='lab_events']/span/text()", - "cateVodName": "concat(/li[@class='lab_time']/text(),'-',/li[@class='lab_events']/span/text(),'dj')", - "cateVodId": "/li[@class='lab_channel']/a[1]/@href", - "cateVodIdR": "http://play.sportsteam365.com/play/steam(\\d+).html", - //"cateVodIdR": "\\S+/(\\d+).html", - "cateVodImg": "/li[@class='lab_team_home']/span/img/@src", - "cateVodMark": "concat(//li[@class='lab_team_home']/strong/text(),'-',//li[@class='lab_team_away']/strong/text())", - //"cateVodMark": "{vid}", - "cate": "dj", - // 详情页地址 用于获取详情页信息 及 播放列表和地址 - //"dtUrl": "{vid}", - "dtUrl": "http://play.sportsteam333.com/play/steam{vid}.html", - // 详情节点 - "dtNode": "//ul[@data-stype='zqlq']", - // 视频名 - "dtName": "/li[1]/span/text()", - // 视频图片 - "dtImg": "/li[3]/span/img/@src", - // 视频分类 - "dtCate": "/li[1]/span/text()", - //演员 - "dtActor": "/li[1]/span/text()", - // 导演 - "dtDirector": "concat('xxx -','Never underestimate the heart of a champion! ')", - "dtDirectorR": "", - // 视频简介 - "dtDesc": "concat(/li[3]/strong/text(),'-',/li[5]/strong/text(),'-dj')", - - // 播放源节点 - "dtFromNode": "//div[@class='sub_channel']/a/strong", - // 播放源名称 - "dtFromName": "concat('dj-',/text())", - "dtFromNameR": "", - // 播放列表节点 - "dtUrlNode": "//div[@class='sub_channel']", - // 播放地址节点 - "dtUrlSubNode": "/a", - "dtUrlSub": "/ff", - // 播放地址 - "dtUrlId": "@data-play", - "dtUrlIdR": "/play/(\\S+)", - //"dtUrlIdR": "\\S+/(\\d+)&id2=", - // 剧集名称 - "dtUrlName": "/strong/text()", - "dtUrlNameR": "", - - //播放页面的地址 {playUrl} 对应上面 dtUrlId 获取到的地址 - "playUrl":"http://play.sportsteam333.com/play/{playUrl}#ff", - //"playUrl":"http://play.sportsteam666.com/play/{playUrl}", - //"playUrl": "http://play.sportsteam365.com/play/{playUrl}", - //"playUa": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36", - //"playUa": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36", - - "searchUrl": "http://www.jrskan.com?key={wd}", - "scVodNode": "//div[@class='play_xg']/li", - "scVodName": "//div[@class='name']/a/@title", - "scVodId": "//div[@class='name']/a/@href", - "scVodIdR": "/play/(\\d+).html", - "scVodImg": "//div[@class='pic']/a/img/@src", - "scVodMark": "" -} diff --git a/TVBox_JS/qiumizhibo.js b/TVBox_JS/qiumizhibo.js deleted file mode 100644 index 0f73404..0000000 --- a/TVBox_JS/qiumizhibo.js +++ /dev/null @@ -1,22 +0,0 @@ -var rule = { - title:'310直播', - host:'http://www.310.tv', - url:'/?s=0&t=1&a=fyclass&g=fypage', - searchUrl:'', - searchable:0, - quickSearch:0, - class_name:'热门&足球&篮球', - class_url:'0&1&2', - headers:{ - 'User-Agent':'MOBILE_UA' - }, - timeout:5000, - play_parse:false, - lazy:'', - limit:6, - double:false, - 推荐:'*', - 一级:'.list_content a;.jiabifeng&&p:lt(5)&&Text;.feleimg img&&src;a&&t-nzf-o;a&&href', - 二级:'*', - 搜索:'', -} \ No newline at end of file diff --git a/TVBox_JS/sougou.js b/TVBox_JS/sougou.js deleted file mode 100644 index 468e3a1..0000000 --- a/TVBox_JS/sougou.js +++ /dev/null @@ -1,33 +0,0 @@ -var rule = { - title:'菜狗', - host:'https://waptv.sogou.com', - homeUrl:'', - searchUrl:'https://v.sogou.com/v?query=**&typemask=6&p=&dp=&dr=&_asf=v.sogou.com&enter=1&ie=utf8', - searchable:2, - quickSearch:0, - filterable:1, - multi:1, - // 分类链接fypage参数支持1个()表达式 - url:'/napi/video/classlist?abtest=0&iploc=CN1304&spver=&listTab=fyclass&filter=&start=((fypage-1)*15)&len=15&fr=filter', - filter_url:'style={{fl.style}}&zone={{fl.zone}}&year={{fl.year}}&fee={{fl.fee}}&order={{fl.order}}', - headers:{ - 'User-Agent':'PC_UA' - }, - timeout:5000, - class_name:'电视剧&电影&动漫&综艺&纪录片', - class_url:'teleplay&film&cartoon&tvshow&documentary', - filter:{'teleplay': [{'key': 'style', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '爱情', 'v': '爱情'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '都市', 'v': '都市'}, {'n': '悬疑', 'v': '悬疑'}, {'n': '古装', 'v': '古装'}, {'n': '偶像', 'v': '偶像'}, {'n': '犯罪', 'v': '犯罪'}, {'n': '历史', 'v': '历史'}, {'n': '战争', 'v': '战争'}, {'n': '武侠', 'v': '武侠'}, {'n': '警匪', 'v': '警匪'}, {'n': '科幻', 'v': '科幻'}, {'n': '奇幻', 'v': '奇幻'}, {'n': '谍战', 'v': '谍战'}, {'n': '农村', 'v': '农村'}, {'n': '其他', 'v': '其他'}]}, {'key': 'zone', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': '内地'}, {'n': '香港', 'v': '香港'}, {'n': '台湾', 'v': '台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '泰国', 'v': '泰国'}, {'n': '日本', 'v': '日本'}, {'n': '美国', 'v': '美国'}, {'n': '英国', 'v': '英国'}, {'n': '新加坡', 'v': '新加坡'}, {'n': '其他', 'v': '其他'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2014', 'v': '2014'}, {'n': '更早', 'v': '更早'}]}, {'key': 'fee', 'name': '资源', 'value': [{'n': '全部', 'v': ''}, {'n': '正片', 'v': '正片'}, {'n': '免费正片', 'v': '免费正片'}, {'n': '付费正片', 'v': '付费正片'}]}, {'key': 'order', 'name': '排序', 'value': [{'n': '全部', 'v': ''}, {'n': '最新', 'v': '最新'}, {'n': '好评', 'v': '好评'}]}], 'film': [{'key': 'style', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '喜剧', 'v': '喜剧'}, {'n': '爱情', 'v': '爱情'}, {'n': '动作', 'v': '动作'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '科幻', 'v': '科幻'}, {'n': '惊悚', 'v': '惊悚'}, {'n': '犯罪', 'v': '犯罪'}, {'n': '奇幻', 'v': '奇幻'}, {'n': '战争', 'v': '战争'}, {'n': '悬疑', 'v': '悬疑'}, {'n': '动画', 'v': '动画'}, {'n': '文艺', 'v': '文艺'}, {'n': '传记', 'v': '传记'}, {'n': '歌舞', 'v': '歌舞'}, {'n': '古装', 'v': '古装'}, {'n': '警匪', 'v': '警匪'}, {'n': '其他', 'v': '其他'}]}, {'key': 'zone', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': '内地'}, {'n': '香港', 'v': '香港'}, {'n': '台湾', 'v': '台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '泰国', 'v': '泰国'}, {'n': '日本', 'v': '日本'}, {'n': '美国', 'v': '美国'}, {'n': '英国', 'v': '英国'}, {'n': '新加坡', 'v': '新加坡'}, {'n': '其他', 'v': '其他'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2014', 'v': '2014'}, {'n': '更早', 'v': '更早'}]}, {'key': 'fee', 'name': '资源', 'value': [{'n': '全部', 'v': ''}, {'n': '正片', 'v': '正片'}, {'n': '免费正片', 'v': '免费正片'}, {'n': '付费正片', 'v': '付费正片'}]}, {'key': 'order', 'name': '排序', 'value': [{'n': '全部', 'v': ''}, {'n': '最新', 'v': '最新'}, {'n': '好评', 'v': '好评'}]}], 'cartoon': [{'key': 'style', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '搞笑', 'v': '搞笑'}, {'n': '热血', 'v': '热血'}, {'n': '冒险', 'v': '冒险'}, {'n': '美少女', 'v': '美少女'}, {'n': '科幻', 'v': '科幻'}, {'n': '校园', 'v': '校园'}, {'n': '恋爱', 'v': '恋爱'}, {'n': '神魔', 'v': '神魔'}, {'n': '机战', 'v': '机战'}, {'n': '益智', 'v': '益智'}, {'n': '亲子', 'v': '亲子'}, {'n': '励志', 'v': '励志'}, {'n': '童话', 'v': '童话'}, {'n': '青春', 'v': '青春'}, {'n': '原创', 'v': '原创'}, {'n': '动作', 'v': '动作'}, {'n': '耽美', 'v': '耽美'}, {'n': '魔幻', 'v': '魔幻'}, {'n': '其他', 'v': '其他'}]}, {'key': 'zone', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '日本', 'v': '日本'}, {'n': '欧美', 'v': '欧美'}, {'n': '国产', 'v': '国产'}, {'n': '其他', 'v': '其他'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2014', 'v': '2014'}, {'n': '更早', 'v': '更早'}]}, {'key': 'fee', 'name': '资源', 'value': [{'n': '全部', 'v': ''}, {'n': '正片', 'v': '正片'}, {'n': '免费正片', 'v': '免费正片'}, {'n': '付费正片', 'v': '付费正片'}]}, {'key': 'order', 'name': '排序', 'value': [{'n': '全部', 'v': ''}, {'n': '最新', 'v': '最新'}, {'n': '好评', 'v': '好评'}]}], 'tvshow': [{'key': 'style', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '真人秀', 'v': '真人秀'}, {'n': '生活', 'v': '生活'}, {'n': '搞笑', 'v': '搞笑'}, {'n': '访谈', 'v': '访谈'}, {'n': '时尚', 'v': '时尚'}, {'n': '音乐', 'v': '音乐'}, {'n': '选秀', 'v': '选秀'}, {'n': '美食', 'v': '美食'}, {'n': '游戏', 'v': '游戏'}, {'n': '纪实', 'v': '纪实'}, {'n': '旅游', 'v': '旅游'}, {'n': '情感', 'v': '情感'}, {'n': '恶搞', 'v': '恶搞'}, {'n': '吐槽', 'v': '吐槽'}, {'n': '原创', 'v': '原创'}, {'n': '歌舞', 'v': '歌舞'}, {'n': '播报', 'v': '播报'}, {'n': '曲艺', 'v': '曲艺'}, {'n': '科教', 'v': '科教'}, {'n': '其他', 'v': '其他'}]}, {'key': 'zone', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': '内地'}, {'n': '台湾', 'v': '台湾'}, {'n': '日韩', 'v': '日韩'}, {'n': '欧美', 'v': '欧美'}, {'n': '其他', 'v': '其他'}]}, {'key': 'emcee', 'name': '明星', 'value': [{'n': '全部', 'v': ''}, {'n': '何炅', 'v': '何炅'}, {'n': '撒贝宁', 'v': '撒贝宁'}, {'n': '王筱磊', 'v': '王筱磊'}, {'n': '张绍刚', 'v': '张绍刚'}, {'n': '鲁健', 'v': '鲁健'}, {'n': '王世林', 'v': '王世林'}, {'n': '倪萍', 'v': '倪萍'}, {'n': '汪涵', 'v': '汪涵'}, {'n': '舒冬', 'v': '舒冬'}, {'n': '齐思钧', 'v': '齐思钧'}, {'n': '白岩松', 'v': '白岩松'}, {'n': '曲洪禹', 'v': '曲洪禹'}, {'n': '康辉', 'v': '康辉'}, {'n': '章亭', 'v': '章亭'}, {'n': '刘洪悦', 'v': '刘洪悦'}, {'n': '尼格买提', 'v': '尼格买提'}, {'n': '钱枫', 'v': '钱枫'}, {'n': '刘婧', 'v': '刘婧'}, {'n': '赵川', 'v': '赵川'}, {'n': '谢娜', 'v': '谢娜'}]}, {'key': 'order', 'name': '排序', 'value': [{'n': '全部', 'v': ''}, {'n': '最新', 'v': '最新'}, {'n': '好评', 'v': '好评'}]}], 'documentary': [{'key': 'style', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '历史', 'v': '历史'}, {'n': '自然', 'v': '自然'}, {'n': '动物', 'v': '动物'}, {'n': '社会', 'v': '社会'}, {'n': '传记', 'v': '传记'}, {'n': '人文', 'v': '人文'}, {'n': '文化', 'v': '文化'}, {'n': '军事', 'v': '军事'}, {'n': '科技', 'v': '科技'}, {'n': '人物', 'v': '人物'}, {'n': '探索', 'v': '探索'}, {'n': '美食', 'v': '美食'}, {'n': '旅行', 'v': '旅行'}, {'n': '探险', 'v': '探险'}, {'n': '其他', 'v': '其他'}]}, {'key': 'zone', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': '内地'}, {'n': '香港', 'v': '香港'}, {'n': '台湾', 'v': '台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '泰国', 'v': '泰国'}, {'n': '日本', 'v': '日本'}, {'n': '美国', 'v': '美国'}, {'n': '英国', 'v': '英国'}, {'n': '新加坡', 'v': '新加坡'}, {'n': '其他', 'v': '其他'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2014', 'v': '2014'}, {'n': '更早', 'v': '更早'}]}, {'key': 'fee', 'name': '资源', 'value': [{'n': '全部', 'v': ''}, {'n': '正片', 'v': '正片'}, {'n': '免费正片', 'v': '免费正片'}, {'n': '付费正片', 'v': '付费正片'}]}, {'key': 'order', 'name': '排序', 'value': [{'n': '全部', 'v': ''}, {'n': '最新', 'v': '最新'}, {'n': '好评', 'v': '好评'}]}]}, - limit:20, - play_parse:true, - play_json:1, - // 手动调用解析请求json的url,此lazy不方便 - lazy:'', - lazy:'js:print(input);fetch_params.headers["User-Agent"]=MOBILE_UA;print(fetch_params);let html=request(input);let rurl=html.match(/window\\.open\\(\'(.*?)\',/)[1];rurl=urlDeal(rurl);input={parse:1,jx:1,url:rurl};', - // 推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float', - 一级:'js:let d=[];let html=request(input);html=JSON.parse(html);let list=html.listData.results;list.forEach(function(it){let desc1=it.ipad_play_for_list.finish_episode?it.ipad_play_for_list.episode===it.ipad_play_for_list.finish_episode?"全集"+it.ipad_play_for_list.finish_episode:"连载"+it.ipad_play_for_list.episode+"/"+it.ipad_play_for_list.finish_episode:"";let desc2=it.score?"评分:"+it.score:"";let desc3=it.date?"更至:"+it.date:"";d.push({title:it.name,img:it.v_picurl,url:"https://v.sogou.com"+it.url.replace("teleplay","series").replace("cartoon","series"),desc:desc1||desc2||desc3})});setResult(d);', - 二级:'', - 二级:'js:VOD={};let html=request(input);function adhead(url){let hd="https://v.sogou.com";if(!url.startsWith(hd)){url=hd+url}return urlencode(url)}try{let json=JSON.parse(html.match(/INITIAL_STATE.*?({.*});/)[1]).detail.itemData;let key=json.dockey;let name=json.name;let zone=json.zone;let score=json.score?json.score:"暂无";let style=json.style;let emcee=json.emcee?"主持:"+json.emcee:json.name;let director=json.director?"导演:"+json.director:name;director=director.replace(/;/g,"\\t");let starring=json.starring?"演员:"+json.starring:"声优:"+json.shengyou;starring=starring.replace(/.*undefined/,"").replace(/;/g,"\\t");let update=json.update_wordstr?json.update_wordstr:"";let tv_station=json.tv_station?json.tv_station:zone;let introduction=json.introduction;let shengyou=json.shengyou;let shows=json.play_from_open_index;let plays=json.play.item_list;if(shows){VOD.vod_name=name;VOD.vod_area=emcee+","+tv_station;VOD.vod_director=director;VOD.vod_actor=starring;VOD.vod_pic=jsp.pd(html,"#thumb_img&&img&&src");VOD.vod_remarks=style+" 评分:"+score+","+update;VOD.vod_content=introduction}else{VOD.vod_name=name;VOD.vod_director=director;VOD.vod_actor=starring;VOD.vod_pic=jsp.pd(html,"#thumb_img&&img&&src");VOD.vod_content=introduction}let tp="&type=json";try{let tabs=[];let lists=[];plays.forEach(function(it){lists.push(it.info);let tbn=it.sitename[0]||it.site.replace(".com","");tbn=tbn.split("").join(" ");tabs.push(tbn)});VOD.vod_play_from=tabs.join("$$$");let vod_lists=[];print("play_url1:"+play_url);play_url=play_url.replace("&play_url=","&type=json&play_url=");print("play_url2:"+play_url);lists.forEach(function(item,idex){if(item||shows){if(item&&Array.isArray(item)&&item.length>1){let tmp=item.slice(1).map(function(its){return its.index+"$"+play_url+base64Encode(adhead(its.url))});vod_lists.push(tmp.join("#"))}if(shows){let arr=[];let tmp=[];let zy=shows.item_list[idex];zy.date.forEach(function(date){let day=date.day;for(let j=0;j=10?day[j][0]:"0"+day[j][0];let Tdate=date.year+date.month+dayy;arr.push(Tdate)}});for(let k=0;k0?img[0]:""}}catch(e){print("发生了错误:"+e.message)}', - // 二级:'js:var vod={vod_id:input};let html=request(input);function adhead(url){let hd="https://v.sogou.com";if(!url.startsWith(hd)){url=hd+url}return url}try{let json=JSON.parse(html.match(/INITIAL_STATE.*?({.*});/)[1]).detail.itemData;let key=json.dockey;let name=json.name;let zone=json.zone;let score=json.score?json.score:"暂无";let style=json.style;let emcee=json.emcee?"主持:"+json.emcee:json.name;let director=json.director?"导演:"+json.director:name;director=director.replace(/;/g,"\\t");let starring=json.starring?"演员:"+json.starring:"声优:"+json.shengyou;starring=starring.replace(/.*undefined/,"").replace(/;/g,"\\t");let update=json.update_wordstr?json.update_wordstr:"";let tv_station=json.tv_station?json.tv_station:zone;let introduction=json.introduction;let shengyou=json.shengyou;let shows=json.play_from_open_index;let plays=json.play.item_list;if(shows){vod.vod_name=name;vod.vod_area=emcee+","+tv_station;vod.vod_director=director;vod.vod_actor=starring;vod.vod_pic=jsp.pd(html,"#thumb_img&&img&&src");vod.vod_remarks=style+" 评分:"+score+","+update;vod.vod_content=introduction}else{vod.vod_name=name;vod.vod_director=director;vod.vod_actor=starring;vod.vod_pic=jsp.pd(html,"#thumb_img&&img&&src");vod.vod_content=introduction}let tp="&type=json";try{let tabs=[];let lists=[];plays.forEach(function(it){lists.push(it.info);let tbn=it.sitename[0]||it.site.replace(".com","");tbn=tbn.split("").join(" ");tabs.push(tbn)});vod.vod_play_from=tabs.join("$$$");vod_lists=[];play_url=play_url.replace("&play_url=","&type=json&play_url=");lists.forEach(function(item,idex){if(item||shows){if(item&&Array.isArray(item)&&item.length>1){let tmp=item.slice(1).map(function(its){return its.index+"$"+play_url+base64Encode(adhead(its.url))});vod_lists.push(tmp.join("#"))}if(shows){let arr=[];let tmp=[];let zy=shows.item_list[idex];zy.date.forEach(function(date){let day=date.day;for(let j=0;j=10?day[j][0]:"0"+day[j][0];let Tdate=date.year+date.month+dayy;arr.push(Tdate)}});for(let k=0;k0?img[0]:""}}catch(e){}', - 搜索:'', - 搜索:'js:let d=[];let html=request(input);let jsonA=JSON.parse(html.match(/INITIAL_STATE.*?({.*});/)[1]);print(jsonA);jsonA=jsonA.result.longVideo.results;jsonA.forEach(function(it){let name=it.name;let introduction=it.introduction;let pic=it.v_picurl;let url=it.tiny_url;let zone=it.zone;let score=it.score||"暂无";let style=it.style;if(it.play.item_list){let r={};r.title=name.replace(//,"").replace(//,"");r.url="https://v.sogou.com"+url;r.desc=it.list_category.join(",");r.content=introduction;r.pic_url=pic;d.push(r)}});setResult(d);', -} \ No newline at end of file diff --git a/TVBox_JS/tengxun.js b/TVBox_JS/tengxun.js deleted file mode 100644 index f53b58c..0000000 --- a/TVBox_JS/tengxun.js +++ /dev/null @@ -1,34 +0,0 @@ -var rule = { - title:'腾云驾雾', - host:'https://v.%71%71.com', - // homeUrl:'/channel/choice?listpage=1&channel=choice&sort=18&_all=1', - homeUrl:'/x/bu/pagesheet/list?_all=1&append=1&channel=choice&listpage=1&offset=0&pagesize=21&iarea=-1&sort=18', - detailUrl:'https://node.video.%71%71.com/x/api/float_vinfo2?cid=fyid', - searchUrl:'https://node.video.%71%71.com/x/api/msearch?keyWord=**', - searchable:2, - filterable:1, - multi:1, - // url:'/channel/fyclass?listpage=fypage&channel=fyclass&sort=18&_all=1', - url:'/x/bu/pagesheet/list?_all=1&append=1&channel=fyclass&listpage=1&offset=((fypage-1)*21)&pagesize=21&iarea=-1', - filter_url:'sort={{fl.sort or 18}}&year={{fl.year}}&pay={{fl.pay}}', - filter:{'choice': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}]}], 'tv': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}]}], 'movie': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}]}], 'variety': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}]}], 'cartoon': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}]}], 'child': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}]}], 'doco': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}]}]}, - headers:{ - 'User-Agent':'PC_UA' - }, - timeout:5000, - // class_parse:'.site_channel a;a&&Text;a&&href;channel/(.*)', - cate_exclude:'会员|游戏|全部', - class_name:'精选&电视剧&电影&综艺&动漫&少儿&纪录片', - class_url:'choice&tv&movie&variety&cartoon&child&doco', - limit:20, - // play_parse:true, - // 手动调用解析请求json的url,此lazy不方便 - lazy:'js:input="https://cache.json.icu/home/api?type=ys&uid=292796&key=fnoryABDEFJNPQV269&url="+input.split("?")[0];log(input);let html=JSON.parse(request(input));log(html);input=html.url||input', - 推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float', - 一级:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float', - // 二级:{is_json:1,"title":"data.title;data.moviecategory[0]+data.moviecategory[1]","img":"data.cdncover","desc":"data.area[0];data.director[0]","content":"data.description","tabs":"data.playlink_sites;data.playlinksdetail.#idv.quality","lists":"data.playlinksdetail.#idv.default_url"}, - // 二级:{is_json:1,"title":"data.title;data.moviecategory[0]+data.moviecategory[1]","img":"data.cdncover","desc":"data.area[0];data.director[0]","content":"data.description","tabs":"data.playlink_sites","lists":"data.playlinksdetail.#idv.default_url"}, - 二级:'', - 二级:'js:VOD={};let d=[];let video_list=[];let video_lists=[];let list=[];let QZOutputJson;let html=fetch(input,fetch_params);let sourceId=/get_playsource/.test(input)?input.match(/id=(\\d*?)&/)[1]:input.split("cid=")[1];let cid=sourceId;let detailUrl="https://v.%71%71.com/detail/m/"+cid+".html";log("详情页:"+detailUrl);var pdfh=jsp.pdfh;var pd=jsp.pd;try{let json=JSON.parse(html);VOD={vod_url:input,vod_name:json.c.title,type_name:json.typ.join(","),vod_actor:json.nam.join(","),vod_year:json.c.year,vod_content:json.c.description,vod_remarks:json.rec,vod_pic:urljoin2(input,json.c.pic)}}catch(e){log("解析片名海报等基础信息发生错误:"+e.message)}if(/get_playsource/.test(input)){eval(html);let indexList=QZOutputJson.PlaylistItem.indexList;indexList.forEach(function(it){let dataUrl="https://s.video.qq.com/get_playsource?id="+sourceId+"&plat=2&type=4&data_type=3&range="+it+"&video_type=10&plname=qq&otype=json";eval(fetch(dataUrl,fetch_params));let vdata=QZOutputJson.PlaylistItem.videoPlayList;vdata.forEach(function(item){d.push({title:item.title,pic_url:item.pic,desc:item.episode_number+"\\t\\t\\t播放量:"+item.thirdLine,url:item.playUrl})});video_lists=video_lists.concat(vdata)})}else{let json=JSON.parse(html);video_lists=json.c.video_ids;let url="https://v.qq.com/x/cover/"+sourceId+".html";if(json.c.type===10){let dataUrl="https://s.video.qq.com/get_playsource?id="+json.c.column_id+"&plat=2&type=2&data_type=3&video_type=8&plname=qq&otype=json";let o_html=fetch(dataUrl,fetch_params);eval(o_html);video_lists=[];let indexList=QZOutputJson.PlaylistItem.indexList;indexList.forEach(function(it){let dataUrl="https://s.video.qq.com/get_playsource?id="+json.c.column_id+"&plat=2&type=4&data_type=3&range="+it+"&video_type=10&plname=qq&otype=json";eval(fetch(dataUrl,fetch_params));let vdata=QZOutputJson.PlaylistItem.videoPlayList;vdata.forEach(function(item){d.push({title:item.title,pic_url:item.pic,desc:item.episode_number+"\\t\\t\\t播放量:"+item.thirdLine,url:item.playUrl})});video_lists=video_lists.concat(vdata)})}else if(video_lists.length===1){d.push({title:"在线播放",url:url})}else if(video_lists.length>1){for(let i=0;i扮演"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "最多播放", "v": "2"}, {"n": "最好评", "v": "3"}, {"n": "最新上线", "v": "1"}]}]}, - headers:{ - 'User-Agent':'PC_UA' - }, - timeout:5000, - class_name:'电视剧&电影&综艺&动漫&少儿&纪录片&文化&亲子&教育&搞笑&生活&体育&音乐&游戏', - class_url:'电视剧&电影&综艺&动漫&少儿&纪录片&文化&亲子&教育&搞笑&生活&体育&音乐&游戏', - limit:20, - play_parse:true, - // 手动调用解析请求json的url,此lazy不方便 - // lazy:'js:print(input);fetch_params.headers["user-agent"]=MOBILE_UA;let html=request(input);let rurl=html.match(/window\\.open\\(\'(.*?)\',/)[1];rurl=urlDeal(rurl);input={parse:1,url:rurl};', - lazy:'js:input={parse:1,jx:1,url:input};', - // 推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float', - // 一级:'json:data.filterData.listData;title;img;subTitle;videoLink;summary', - 一级:'', - 一级:'js:let d=[];MY_FL.type=MY_CATE;let fl=stringify(MY_FL);fl=encodeUrl(fl);input=input.split("{")[0]+fl;if(MY_PAGE>1){let old_session=getItem("yk_session_"+MY_CATE,"{}");if(MY_PAGE===2){input=input.replace("optionRefresh=1","session="+encodeUrl(old_session))}else{input=input.replace("optionRefresh=1","session="+encodeUrl(old_session))}}let html=fetch(input,fetch_params);try{html=JSON.parse(html);let lists=html.data.filterData.listData;let session=html.data.filterData.session;session=stringify(session);if(session!==getItem("yk_session_"+MY_CATE,"{}")){setItem("yk_session_"+MY_CATE,session)}lists.forEach(function(it){let vid;if(it.videoLink.includes("id_")){vid=it.videoLink.split("id_")[1].split(".html")[0]}else{vid="msearch:"}d.push({title:it.title,img:it.img,desc:it.summary,url:"https://search.youku.com/api/search?appScene=show_episode&showIds="+vid,content:it.subTitle})})}catch(e){log("一级列表解析发生错误:"+e.message)}setResult(d);', - 二级:'', - 二级:'js:var d=[];VOD={};let html=request(input);let json=JSON.parse(html);if(/keyword/.test(input)){input="https://search.youku.com/api/search?appScene=show_episode&showIds="+json.pageComponentList[0].commonData.showId;json=JSON.parse(fetch(MY_URL,fetch_params))}let video_lists=json.serisesList;var name=json.sourceName;if(/优酷/.test(name)&&video_lists.length>0){let ourl="https://v.youku.com/v_show/id_"+video_lists[0].videoId+".html";let _img=video_lists[0].thumbUrl;let html=fetch(ourl,{headers:{Referer:"https://v.youku.com/","User-Agent":PC_UA}});let json=/__INITIAL_DATA__/.test(html)?html.split("window.__INITIAL_DATA__ =")[1].split(";")[0]:"{}";if(json==="{}"){log("触发了优酷人机验证");VOD.vod_remarks=ourl;VOD.vod_pic=_img;VOD.vod_name=video_lists[0].title.replace(/(\\d+)/g,"");VOD.vod_content="触发了优酷人机验证,本次未获取详情,但不影响播放("+ourl+")"}else{try{json=JSON.parse(json);let data=json.data.data;let data_extra=data.data.extra;let img=data_extra.showImgV;let model=json.data.model;let m=model.detail.data.nodes[0].nodes[0].nodes[0].data;let _type=m.showGenre;let _desc=m.updateInfo||m.subtitle;let JJ=m.desc;let _title=m.introTitle;VOD.vod_pic=img;VOD.vod_name=_title;VOD.vod_type=_type;VOD.vod_remarks=_desc;VOD.vod_content=JJ}catch(e){log("海报渲染发生错误:"+e.message);print(json);VOD.vod_remarks=name}}}if(!/优酷/.test(name)){VOD.vod_content="非自家播放源,暂无视频简介及海报";VOD.vod_remarks=name}function adhead(url){return urlencode(url)}play_url=play_url.replace("&play_url=","&type=json&play_url=");video_lists.forEach(function(it){let url="https://v.youku.com/v_show/id_"+it.videoId+".html";if(it.thumbUrl){d.push({desc:it.showVideoStage?it.showVideoStage.replace("期","集"):it.displayName,pic_url:it.thumbUrl,title:it.title,url:play_url+adhead(url)})}else if(name!=="优酷"){d.push({title:it.displayName?it.displayName:it.title,url:play_url+adhead(it.url)})}});VOD.vod_play_from=name;VOD.vod_play_url=d.map(function(it){return it.title+"$"+it.url}).join("#");', - 搜索:'', - 搜索:'js:var d=[];let html=request(input);let json=JSON.parse(html);json.pageComponentList.forEach(function(it){if(it.hasOwnProperty("commonData")){it=it.commonData;d.push({title:it.titleDTO.displayName,img:it.posterDTO.vThumbUrl,desc:it.stripeBottom,content:it.updateNotice+" "+it.feature,url:"https://search.youku.com/api/search?appScene=show_episode&showIds="+it.showId+"&appCaller=h5"})}});setResult(d);', -} \ No newline at end of file diff --git a/TVBox_JS/ysgc.js b/TVBox_JS/ysgc.js deleted file mode 100644 index 70cc7cd..0000000 --- a/TVBox_JS/ysgc.js +++ /dev/null @@ -1,4 +0,0 @@ -var rule = Object.assign(muban.首图,{ -title:'影视工厂', -host:'https://www.ysgc.cc', -}); \ No newline at end of file diff --git a/TVBox_JS/zhuijm.js b/TVBox_JS/zhuijm.js deleted file mode 100644 index 9a6f989..0000000 --- a/TVBox_JS/zhuijm.js +++ /dev/null @@ -1,6 +0,0 @@ -// muban.海螺2.二级.content = '.hl-infos-content&&Text'; -var rule = Object.assign(muban.海螺2,{ - title:'追剧喵', - host:'https://zjmiao.com', - 搜索:'.search-list;a&&Text;.lazy&&data-original;.deployment&&Text;a&&href', -}); \ No newline at end of file diff --git a/TVBox_JS/万能影视.js b/TVBox_JS/万能影视.js deleted file mode 100644 index 4edf0f5..0000000 --- a/TVBox_JS/万能影视.js +++ /dev/null @@ -1,4 +0,0 @@ -var rule = Object.assign(muban.首图,{ -title:'万能影视', -host:'https://wnvod.net', -}); \ No newline at end of file diff --git a/TVBox_JS/两个BT.js b/TVBox_JS/两个BT.js deleted file mode 100644 index 0c1d98b..0000000 --- a/TVBox_JS/两个BT.js +++ /dev/null @@ -1,26 +0,0 @@ -var rule = { - title:'两个BT', - host:'https://www.bttwoo.com', - // homeUrl:'/', - url:'/fyclass/page/fypage', - searchUrl:'/xssearch?q=**', - searchable:0, - quickSearch:0, - headers:{ - 'User-Agent':'UC_UA' - }, - timeout:5000, - class_name:'最新电影&国产剧&美剧&日韩剧',//静态分类名称拼接 - class_url:'new-movie&zgjun&meiju&jpsrtv',//静态分类标识拼接 - class_parse:'', - play_parse:true, - lazy:'', - limit:5, - 推荐:'.leibox;li;.lazy&&alt;.thumb.lazy&&data-original;.jidi span&&Text;a&&href', - double:true, // 推荐内容是否双层定位 - 一级:'.bt_img li;.lazy&&alt;.thumb.lazy&&data-original;.jidi span&&Text;a&&href', - - 二级:{"title":".moviedteail_tt h1&&Text","img":".dyimg.fl img&&src","desc":".cr3.starLink&&Text","content":".yp_context&&Text","tabs":".ypxingq_t:eq(1) span","lists":".paly_list_btn:eq(#id) a"}, - 搜索:'*', - -} diff --git a/TVBox_JS/乐猪TV.js b/TVBox_JS/乐猪TV.js deleted file mode 100644 index 3b1b978..0000000 --- a/TVBox_JS/乐猪TV.js +++ /dev/null @@ -1,23 +0,0 @@ -var rule = { - title:'乐猪TV', - host:'http://www.lezhutv.com', - // homeUrl:'/', - url:'/type/fyclass-fypage.html', - searchUrl:'/s/**/fypage.html', - searchable:0, - quickSearch:0, - headers:{ - 'User-Agent':'UC_UA' - }, - timeout:5000, - class_parse:'div.nav a;a&&Text;a&&href;/(\\d.+).html', - play_parse:true, - lazy:'', - limit:5, - 推荐:'.movie-list-body;.movie-list-item;.movie-title&&Text;.movie-post-lazyload&&data-original;.movie-rating&&Text;a&&href', - double:true, // 推荐内容是否双层定位 - 一级:'ul.tbox_m2 li;a&&title;a&&data-original;span&&Text;a&&href', - 二级:{"title":".data h4&&Text","img":".item-lazy&&data-original","desc":".cr3.starLink&&Text","content":".tbox_js&&Text","tabs":".tbox_t&&h3","lists":".list_block.show:eq(#id) li"}, - 搜索:'.vod-search-list;.movie-title&&Text;.Lazy&&data-original;.getop&&Text;a&&href;.getop:eq(-1)&&Text', - -} diff --git a/TVBox_JS/人人影视.js b/TVBox_JS/人人影视.js deleted file mode 100644 index 44be409..0000000 --- a/TVBox_JS/人人影视.js +++ /dev/null @@ -1,11 +0,0 @@ -muban.首图2.二级.tabs = '.stui-pannel__head h3'; -var rule = Object.assign(muban.首图2,{ - title:'人人影视', - host:'https://www.rttks.com', - url:'/rrtop/fyclass/page/fypage.html', - searchUrl:'/rrso**/page/fypage.html', - class_parse:'.stui-header__menu li;a&&Text;a&&href;.*/(.*?).html', - // cate_exclude:'解说', - play_parse:true, - lazy:'', -}); \ No newline at end of file diff --git a/TVBox_JS/优酷.js b/TVBox_JS/优酷.js deleted file mode 100644 index d06fb68..0000000 --- a/TVBox_JS/优酷.js +++ /dev/null @@ -1,38 +0,0 @@ -var rule = { - title:'优酷', - host:'https://www.%79%6f%75%6b%75.com', - homeUrl:'', - searchUrl:'https://search.%79%6f%75%6b%75.com/api/search?pg=fypage&keyword=**', - searchable:2, - quickSearch:0, - filterable:1, - multi:1, - // 分类链接fypage参数支持1个()表达式 - url:'/category/data?optionRefresh=1&pageNo=fypage¶ms=fyfilter', - // url:'/category/data?pageNo=fypage¶ms=fyfilter', - // filter_url:'&u=fyarea&s=fyyear={{fl.order}}', - // filter_url:'{{fl|safe}}', - filter_url:'{{fl}}', - // filter_url:'{{fl}}', - // filter_url:'{{fl}}', - filter:{"电视剧": [{"key": "main_area", "name": "全部地区", "value": [{"n": "全部地区", "v": ""}, {"n": "内地剧", "v": "中国内地"}, {"n": "港剧", "v": "中国香港"}, {"n": "台剧", "v": "中国台湾"}, {"n": "韩剧", "v": "韩国"}, {"n": "美剧", "v": "美国"}, {"n": "英剧", "v": "英国"}, {"n": "日剧", "v": "日本"}, {"n": "泰剧", "v": "泰国"}]}, {"key": "tags", "name": "全部类型", "value": [{"n": "全部类型", "v": ""}, {"n": "青春", "v": "青春"}, {"n": "古装", "v": "古装"}, {"n": "爱情", "v": "爱情"}, {"n": "都市", "v": "都市"}, {"n": "喜剧", "v": "喜剧,搞笑"}, {"n": "战争", "v": "战争"}, {"n": "军旅", "v": "军旅"}, {"n": "谍战", "v": "谍战"}, {"n": "偶像", "v": "偶像"}, {"n": "警匪", "v": "警匪"}, {"n": "冒险", "v": "冒险"}, {"n": "穿越", "v": "穿越"}, {"n": "仙侠", "v": "仙侠"}, {"n": "武侠", "v": "武侠"}, {"n": "悬疑", "v": "悬疑"}, {"n": "罪案", "v": "罪案"}, {"n": "家庭", "v": "家庭"}, {"n": "历史", "v": "历史"}, {"n": "年代", "v": "年代"}, {"n": "农村", "v": "农村"}]}, {"key": "year", "name": "全部年份", "value": [{"n": "全部年份", "v": ""}, {"n": "2022", "v": "2022"}, {"n": "2021", "v": "2021"}, {"n": "2020", "v": "2020"}, {"n": "2019", "v": "2019"}, {"n": "2018", "v": "2018"}, {"n": "2017", "v": "2017"}, {"n": "2016", "v": "2016"}, {"n": "2015", "v": "2015"}, {"n": "2014-2011", "v": "2011-2014"}, {"n": "更早", "v": "-2010"}]}, {"key": "status", "name": "全部规格", "value": [{"n": "全部规格", "v": ""}, {"n": "全网独播", "v": "1"}, {"n": "优酷自制", "v": "2"}, {"n": "已完结", "v": "3"}, {"n": "即将上线", "v": "4"}, {"n": "短剧", "v": "5"}]}, {"key": "pay_type", "name": "付费类型", "value": [{"n": "付费类型", "v": ""}, {"n": "免费", "v": "0"}, {"n": "VIP", "v": "2"}, {"n": "付费", "v": "1"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "热度最高", "v": "7"}, {"n": "最新上线", "v": "1"}, {"n": "最好评", "v": "3"}, {"n": "最多播放", "v": "2"}]}], "电影": [{"key": "main_area", "name": "全部地区", "value": [{"n": "全部地区", "v": ""}, {"n": "内地", "v": "中国内地"}, {"n": "中国香港", "v": "中国香港"}, {"n": "中国台湾", "v": "中国台湾"}, {"n": "美国", "v": "美国"}, {"n": "印度", "v": "印度"}, {"n": "日韩", "v": "韩国,日本"}, {"n": "泰国", "v": "泰国"}, {"n": "欧洲", "v": "欧洲"}]}, {"key": "tags", "name": "全部类型", "value": [{"n": "全部类型", "v": ""}, {"n": "喜剧", "v": "喜剧,搞笑"}, {"n": "动作", "v": "动作"}, {"n": "怪兽", "v": "怪兽"}, {"n": "战争", "v": "战争"}, {"n": "爱情", "v": "爱情"}, {"n": "悬疑", "v": "悬疑"}, {"n": "武侠", "v": "武侠"}, {"n": "奇幻", "v": "奇幻"}, {"n": "科幻", "v": "科幻"}, {"n": "冒险", "v": "冒险"}, {"n": "警匪", "v": "警匪"}, {"n": "动画", "v": "动画"}, {"n": "惊悚", "v": "惊悚"}, {"n": "犯罪", "v": "犯罪"}, {"n": "恐怖", "v": "恐怖"}, {"n": "剧情", "v": "剧情"}, {"n": "历史", "v": "历史"}, {"n": "纪录片", "v": "纪录片"}, {"n": "传记", "v": "传记"}, {"n": "歌舞", "v": "歌舞"}, {"n": "短片", "v": "短片"}, {"n": "其他", "v": "其他"}]}, {"key": "source", "name": "全部规格", "value": [{"n": "全部规格", "v": ""}, {"n": "院线", "v": "1"}, {"n": "网络电影", "v": "0"}, {"n": "独播", "v": "2"}, {"n": "高清修复", "v": "3"}, {"n": "1080P", "v": "4"}]}, {"key": "year", "name": "全部年份", "value": [{"n": "全部年份", "v": ""}, {"n": "2022", "v": "2022"}, {"n": "2021", "v": "2021"}, {"n": "2020", "v": "2020"}, {"n": "2019", "v": "2019"}, {"n": "2018", "v": "2018"}, {"n": "2017", "v": "2017"}, {"n": "2016", "v": "2016"}, {"n": "2015", "v": "2015"}, {"n": "2014-2010", "v": "2010-2014"}, {"n": "2009-2000", "v": "2000-2009"}, {"n": "90年代", "v": "1990-1999"}, {"n": "80年代", "v": "1980-1989"}, {"n": "70年代", "v": "1970-1979"}, {"n": "更早", "v": "-1969"}]}, {"key": "pay_type", "name": "付费类型", "value": [{"n": "付费类型", "v": ""}, {"n": "免费", "v": "0"}, {"n": "会员", "v": "2"}, {"n": "点播", "v": "1"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "热度最高", "v": "7"}, {"n": "最多播放", "v": "2"}, {"n": "最新上线", "v": "1"}, {"n": "最好评", "v": "3"}]}, {"key": "tag_label_name", "name": "为你推荐", "value": [{"n": "为你推荐", "v": ""}, {"n": "高分必看", "v": "高分必看"}, {"n": "卖座电影", "v": "卖座电影"}, {"n": "小说改编", "v": "小说改编"}, {"n": "铁血硬汉", "v": "铁血硬汉"}, {"n": "视效大片", "v": "视效大片"}, {"n": "漫画改编", "v": "漫画改编"}, {"n": "绝地求生", "v": "绝地求生"}, {"n": "真人真事改编", "v": "真人真事改编"}, {"n": "范伟", "v": "范伟"}, {"n": "火爆枪战", "v": "火爆枪战"}, {"n": "影史经典", "v": "影史经典"}, {"n": "拯救世界", "v": "拯救世界"}, {"n": "万茜", "v": "万茜"}, {"n": "马思纯", "v": "马思纯"}, {"n": "王俊凯", "v": "王俊凯"}, {"n": "豪华阵容", "v": "豪华阵容"}, {"n": "李玉", "v": "李玉"}, {"n": "无厘头喜剧", "v": "无厘头喜剧"}, {"n": "超能力", "v": "超能力"}, {"n": "欢喜搭档", "v": "欢喜搭档"}]}], "综艺": [{"key": "main_area", "name": "全部地区", "value": [{"n": "全部地区", "v": ""}, {"n": "内地", "v": "中国内地"}, {"n": "中国台湾", "v": "中国台湾"}, {"n": "美国", "v": "美国"}, {"n": "英国", "v": "英国"}]}, {"key": "tags", "name": "全部类型", "value": [{"n": "全部类型", "v": ""}, {"n": "偶像", "v": "偶像"}, {"n": "舞蹈", "v": "舞蹈"}, {"n": "音乐", "v": "音乐"}, {"n": "情感", "v": "情感"}, {"n": "喜剧", "v": "喜剧,搞笑"}, {"n": "体育", "v": "体育"}, {"n": "游戏", "v": "游戏"}, {"n": "相声", "v": "相声"}, {"n": "婚恋", "v": "婚恋"}, {"n": "时尚", "v": "时尚"}, {"n": "晚会", "v": "晚会"}, {"n": "明星访谈", "v": "明星访谈"}, {"n": "亲子", "v": "亲子"}, {"n": "生活", "v": "生活"}, {"n": "文化", "v": "文化"}, {"n": "美食", "v": "美食"}, {"n": "旅游", "v": "旅游"}, {"n": "益智", "v": "益智"}]}, {"key": "year", "name": "全部年份", "value": [{"n": "全部年份", "v": ""}, {"n": "2022", "v": "2022"}, {"n": "2021", "v": "2021"}, {"n": "2020", "v": "2020"}, {"n": "2019", "v": "2019"}, {"n": "2018", "v": "2018"}, {"n": "2017", "v": "2017"}, {"n": "2016", "v": "2016"}, {"n": "2015", "v": "2015"}, {"n": "2014-2011", "v": "2011-2014"}, {"n": "更早", "v": "-2010"}]}, {"key": "status", "name": "全部规格", "value": [{"n": "全部规格", "v": ""}, {"n": "优酷自制", "v": "2"}, {"n": "优酷独播", "v": "1"}, {"n": "电视综艺", "v": "6"}, {"n": "已完结", "v": "3"}, {"n": "即将上线", "v": "4"}]}, {"key": "pay_type", "name": "付费类型", "value": [{"n": "付费类型", "v": ""}, {"n": "免费", "v": "0"}, {"n": "VIP", "v": "2"}, {"n": "付费", "v": "1"}]}, {"key": "sort", "name": "热度最高", "value": [{"n": "热度最高", "v": ""}, {"n": "最新更新", "v": "8"}, {"n": "最近开播", "v": "9"}, {"n": "最多评论", "v": "4"}]}, {"key": "tag_label_name", "name": "为你推荐", "value": [{"n": "为你推荐", "v": ""}, {"n": "舞台竞演", "v": "舞台竞演"}, {"n": "刘雨昕", "v": "刘雨昕"}, {"n": "王一博", "v": "王一博"}, {"n": "韩庚", "v": "韩庚"}, {"n": "李承铉", "v": "李承铉"}, {"n": "户外竞技", "v": "户外竞技"}, {"n": "浙江卫视", "v": "浙江卫视"}, {"n": "东方卫视", "v": "东方卫视"}, {"n": "岳云鹏", "v": "岳云鹏"}, {"n": "王迅", "v": "王迅"}, {"n": "杨迪", "v": "杨迪"}, {"n": "杨超越", "v": "杨超越"}, {"n": "黄明昊", "v": "黄明昊"}, {"n": "郭京飞", "v": "郭京飞"}, {"n": "欧阳娜娜", "v": "欧阳娜娜"}, {"n": "德云社", "v": "德云社"}, {"n": "郑恺", "v": "郑恺"}, {"n": "华少", "v": "华少"}, {"n": "郭德纲", "v": "郭德纲"}, {"n": "贾玲", "v": "贾玲"}]}], "动漫": [{"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "最多播放", "v": "2"}, {"n": "最好评", "v": "3"}, {"n": "最新上线", "v": "1"}]}, {"key": "main_area", "name": "全部地区", "value": [{"n": "全部地区", "v": ""}, {"n": "内地", "v": "中国内地"}, {"n": "日本", "v": "日本"}, {"n": "美国", "v": "美国"}, {"n": "中国台湾", "v": "中国台湾"}, {"n": "其他", "v": "其他"}]}, {"key": "tags", "name": "全部类型", "value": [{"n": "全部类型", "v": ""}, {"n": "热血", "v": "热血,战斗"}, {"n": "励志", "v": "励志"}, {"n": "玄幻", "v": "玄幻"}, {"n": "古风", "v": "历史,古风"}, {"n": "恋爱", "v": "恋爱"}, {"n": "青春", "v": "青春"}, {"n": "校园", "v": "校园"}, {"n": "运动", "v": "社团,运动"}, {"n": "科幻", "v": "科幻"}, {"n": "冒险", "v": "冒险"}, {"n": "魔法", "v": "魔法"}, {"n": "日常", "v": "日常"}, {"n": "治愈", "v": "治愈"}, {"n": "机战", "v": "机战"}, {"n": "推理", "v": "推理"}, {"n": "都市", "v": "都市"}, {"n": "小说改", "v": "小说改编"}, {"n": "游戏改", "v": "游戏改编"}, {"n": "漫画改", "v": "漫画改编"}, {"n": "动态漫", "v": "动态漫画"}, {"n": "特摄", "v": "特摄"}, {"n": "布袋戏", "v": "布袋戏"}]}, {"key": "completed", "name": "连载情况", "value": [{"n": "连载情况", "v": ""}, {"n": "更新中", "v": "0"}, {"n": "已完结", "v": "1"}]}, {"key": "pay_type", "name": "付费类型", "value": [{"n": "付费类型", "v": ""}, {"n": "免费", "v": "0"}, {"n": "会员", "v": "2"}]}, {"key": "year", "name": "全部年份", "value": [{"n": "全部年份", "v": ""}, {"n": "2022", "v": "2022"}, {"n": "2021", "v": "2021"}, {"n": "2020", "v": "2020"}, {"n": "2019", "v": "2019"}, {"n": "2018", "v": "2018"}, {"n": "2017", "v": "2017"}, {"n": "2016", "v": "2016"}, {"n": "2015", "v": "2015"}, {"n": "2014", "v": "2014"}, {"n": "2013", "v": "2013"}, {"n": "2012", "v": "2012"}, {"n": "2011", "v": "2011"}, {"n": "00年代", "v": "2000-2010"}, {"n": "更早", "v": "-1999"}]}, {"key": "tag_label_name", "name": "为你推荐", "value": [{"n": "为你推荐", "v": ""}, {"n": "3D动画", "v": "3D动画"}, {"n": "搞笑日常", "v": "搞笑日常"}, {"n": "大男主", "v": "大男主"}, {"n": "高燃", "v": "高燃"}, {"n": "萌系", "v": "萌系"}, {"n": "修真", "v": "修真"}, {"n": "怀旧", "v": "怀旧"}, {"n": "超级英雄", "v": "超级英雄"}, {"n": "水树奈奈", "v": "水树奈奈"}, {"n": "张杰", "v": "张杰"}, {"n": "石田彰", "v": "石田彰"}, {"n": "守护地球", "v": "守护地球"}, {"n": "圆谷", "v": "圆谷"}, {"n": "山新", "v": "山新"}, {"n": "复仇", "v": "复仇"}, {"n": "废柴逆袭", "v": "废柴逆袭"}, {"n": "侦探", "v": "侦探"}, {"n": "无厘头", "v": "无厘头"}, {"n": "青山刚昌", "v": "青山刚昌"}, {"n": "悬疑", "v": "悬疑"}]}], "少儿": [{"key": "main_area", "name": "全部地区", "value": [{"n": "全部地区", "v": ""}, {"n": "中国", "v": "中国,香港,台湾"}, {"n": "美国", "v": "美国"}, {"n": "英国", "v": "英国"}, {"n": "其他国家", "v": "其他"}]}, {"key": "show_label_type", "name": "全部类型", "value": [{"n": "全部类型", "v": ""}, {"n": "动画", "v": "动画"}, {"n": "儿歌", "v": "儿歌"}, {"n": "玩具", "v": "玩具"}, {"n": "动画电影", "v": "电影"}, {"n": "绘本故事", "v": "绘本故事"}, {"n": "真人", "v": "真人"}, {"n": "少儿综艺", "v": "少儿综艺"}, {"n": "亲子", "v": "亲子"}, {"n": "探索纪实", "v": "探索纪实"}, {"n": "音频", "v": "音频"}]}, {"key": "child_tags", "name": "全部分类", "value": [{"n": "全部分类", "v": ""}, {"n": "益智", "v": "益智"}, {"n": "冒险", "v": "冒险"}, {"n": "幽默", "v": "幽默"}, {"n": "机甲", "v": "机甲"}, {"n": "公主魔法", "v": "公主,魔法"}, {"n": "交通工具", "v": "交通工具"}, {"n": "恐龙", "v": "恐龙"}, {"n": "动物", "v": "动物"}, {"n": "励志", "v": "励志"}, {"n": "友情", "v": "友情"}, {"n": "战斗", "v": "战斗"}, {"n": "校园", "v": "校园"}, {"n": "正义", "v": "正义"}, {"n": "热血", "v": "热血"}, {"n": "科幻", "v": "科幻"}, {"n": "童话", "v": "童话"}, {"n": "运动", "v": "运动"}, {"n": "专注力", "v": "专注力"}, {"n": "创造力", "v": "创造力"}, {"n": "想象力", "v": "想象力"}, {"n": "科普", "v": "科普"}, {"n": "情商", "v": "情商"}, {"n": "思维逻辑", "v": "思维逻辑"}, {"n": "兴趣培养", "v": "兴趣培养"}, {"n": "语文", "v": "语文"}, {"n": "英语", "v": "英语"}, {"n": "数学", "v": "数学"}, {"n": "课程辅导", "v": "课程辅导"}]}, {"key": "age", "name": "全部年龄", "value": [{"n": "全部年龄", "v": ""}, {"n": "0-2岁", "v": "0-2"}, {"n": "3-4岁", "v": "3-4"}, {"n": "5-6岁", "v": "5-6"}, {"n": "7岁以上", "v": "7-"}]}, {"key": "pay_type", "name": "付费类型", "value": [{"n": "付费类型", "v": ""}, {"n": "免费", "v": "0"}, {"n": "付费", "v": "1"}, {"n": "VIP", "v": "2"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "最新上线", "v": "1"}, {"n": "最多播放", "v": "2"}, {"n": "最多评论", "v": "4"}, {"n": "最多收藏", "v": "5"}]}], "纪录片": [{"key": "tags", "name": "全部类型", "value": [{"n": "全部类型", "v": ""}, {"n": "美食", "v": "美食"}, {"n": "自然", "v": "自然"}, {"n": "历史", "v": "历史"}, {"n": "探险", "v": "探险"}, {"n": "军事", "v": "军事"}, {"n": "人物", "v": "人物"}, {"n": "宇宙", "v": "宇宙"}, {"n": "刑侦", "v": "刑侦"}, {"n": "社会", "v": "社会"}, {"n": "科技", "v": "科技"}, {"n": "旅游", "v": "旅游"}]}, {"key": "company", "name": "全部出品", "value": [{"n": "全部出品", "v": ""}, {"n": "BBC", "v": "bbc,british"}, {"n": "央视", "v": "央视,中央电视台,cctv,中国广播电影电视节目交易中心"}, {"n": "国家地理", "v": "国家地理"}, {"n": "Love Nature", "v": "love nature"}, {"n": "LGI", "v": "looking"}, {"n": "A&E", "v": "ae"}, {"n": "OTF", "v": "fence"}]}, {"key": "year", "name": "全部年份", "value": [{"n": "全部年份", "v": ""}, {"n": "2022", "v": "2022"}, {"n": "2021", "v": "2021"}, {"n": "2020", "v": "2020"}, {"n": "2019", "v": "2019"}, {"n": "2018", "v": "2018"}, {"n": "2017", "v": "2017"}, {"n": "2016", "v": "2016"}, {"n": "2015", "v": "2015"}, {"n": "2014-2011", "v": "2011-2014"}, {"n": "更早", "v": "-2010"}]}, {"key": "pay_type", "name": "付费类型", "value": [{"n": "付费类型", "v": ""}, {"n": "免费", "v": "0"}, {"n": "会员", "v": "2"}]}, {"key": "sort", "name": "热度最高", "value": [{"n": "热度最高", "v": ""}, {"n": "综合排序", "v": "0"}, {"n": "最新上线", "v": "1"}, {"n": "最好评", "v": "3"}, {"n": "最多收藏", "v": "5"}]}], "文化": [{"key": "tags", "name": "全部类型", "value": [{"n": "全部类型", "v": ""}, {"n": "谈话", "v": "谈话"}, {"n": "脱口秀", "v": "脱口秀"}, {"n": "访谈", "v": "访谈"}, {"n": "讲座论坛", "v": "讲座论坛"}, {"n": "戏曲曲艺", "v": "戏曲,曲艺"}, {"n": "舞台剧", "v": "舞台剧"}, {"n": "文学", "v": "文学"}, {"n": "国学", "v": "国学"}, {"n": "艺术", "v": "艺术"}, {"n": "培训课程", "v": "培训课程"}, {"n": "有声书", "v": "有声书"}]}, {"key": "people", "name": "文化大咖", "value": [{"n": "文化大咖", "v": ""}, {"n": "窦文涛", "v": "窦文涛"}, {"n": "马未都", "v": "马未都"}, {"n": "白岩松", "v": "白岩松"}, {"n": "梅毅", "v": "梅毅"}, {"n": "陈鲁豫", "v": "陈鲁豫"}, {"n": "樊登", "v": "樊登"}, {"n": "罗振宇", "v": "罗振宇"}, {"n": "蒋方舟", "v": "蒋方舟"}, {"n": "其他", "v": "其他"}]}, {"key": "year", "name": "全部年份", "value": [{"n": "全部年份", "v": ""}, {"n": "2022", "v": "2022"}, {"n": "2021", "v": "2021"}, {"n": "2020", "v": "2020"}, {"n": "2019", "v": "2019"}, {"n": "2018", "v": "2018"}, {"n": "2017", "v": "2017"}, {"n": "2016", "v": "2016"}, {"n": "2015", "v": "2015"}, {"n": "2014-2011", "v": "2011-2014"}, {"n": "更早", "v": "-2010"}]}, {"key": "pay_type", "name": "付费类型", "value": [{"n": "付费类型", "v": ""}, {"n": "免费", "v": "0"}, {"n": "会员", "v": "2"}]}, {"key": "sort", "name": "热度最高", "value": [{"n": "热度最高", "v": ""}, {"n": "综合排序", "v": "0"}, {"n": "最新上线", "v": "1"}, {"n": "最好评", "v": "3"}, {"n": "最多收藏", "v": "5"}]}], "亲子": [{"key": "qinzi_genre", "name": "全部类型", "value": [{"n": "全部类型", "v": ""}, {"n": "孕产", "v": "孕产"}, {"n": "育儿知识", "v": "育儿知识,育儿达人,育儿专家,爸爸育儿,隔代育儿,育儿明星"}, {"n": "好物种草", "v": "母婴用品,测评,母婴用品种草"}, {"n": "美食", "v": "儿童美食,辅食,孕期饮食"}, {"n": "手工DIY", "v": "手工diy"}, {"n": "教育观念", "v": "教育观念"}, {"n": "亲子综艺", "v": "亲子综艺"}, {"n": "亲子互动", "v": "亲子旅游,亲子游戏,亲子阅读,玩具,早教,启蒙"}, {"n": "萌娃", "v": "萌娃"}, {"n": "搞笑", "v": "搞笑"}, {"n": "美妆", "v": "美妆"}]}, {"key": "pregnancy_stage", "name": "全部阶段", "value": [{"n": "全部阶段", "v": ""}, {"n": "备孕", "v": "备孕"}, {"n": "孕早期", "v": "孕早"}, {"n": "孕中期", "v": "孕中"}, {"n": "孕晚期", "v": "孕晚"}]}, {"key": "show_label_baby_age", "name": "全部分龄", "value": [{"n": "全部分龄", "v": ""}, {"n": "0-1岁", "v": "0-1"}, {"n": "1-3岁", "v": "1-3"}, {"n": "3-6岁", "v": "3-6"}, {"n": "6岁+", "v": "6-"}]}, {"key": "pay_type", "name": "全部", "value": [{"n": "全部", "v": ""}, {"n": "免费", "v": "0"}, {"n": "会员免费", "v": "2"}]}, {"key": "sort", "name": "热度最高", "value": [{"n": "热度最高", "v": ""}, {"n": "综合排序", "v": "0"}, {"n": "最新上线", "v": "1"}, {"n": "最多播放", "v": "2"}, {"n": "最多评论", "v": "3"}, {"n": "最多收藏", "v": "5"}]}], "教育": [{"key": "tags", "name": "全部类型", "value": [{"n": "全部类型", "v": ""}, {"n": "公开课", "v": "公开课"}, {"n": "名人名嘴", "v": "名人名嘴"}, {"n": "文化", "v": "文化"}, {"n": "艺术", "v": "艺术"}, {"n": "伦理社会", "v": "伦理社会"}, {"n": "理工", "v": "理工"}, {"n": "历史", "v": "历史"}, {"n": "心理学", "v": "心理学"}, {"n": "经济", "v": "经济"}, {"n": "管理学", "v": "管理学"}, {"n": "外语", "v": "外语"}, {"n": "法律", "v": "法律"}, {"n": "计算机", "v": "计算机"}, {"n": "哲学", "v": "哲学"}, {"n": "职业培训", "v": "职业培训"}, {"n": "家庭教育", "v": "家庭教育"}]}, {"key": "company", "name": "全部出品", "value": [{"n": "全部出品", "v": ""}, {"n": "TED", "v": "ted"}, {"n": "耶鲁大学", "v": "耶鲁大学"}, {"n": "哈佛大学", "v": "哈佛大学"}, {"n": "斯坦福大学", "v": "斯坦福大学"}, {"n": "麻省理工学院", "v": "麻省理工学院"}]}, {"key": "pay_type", "name": "全部节目", "value": [{"n": "全部节目", "v": ""}, {"n": "免费", "v": "0"}, {"n": "付费", "v": "1"}, {"n": "VIP", "v": "2"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "最多播放", "v": "2"}, {"n": "最多收藏", "v": "5"}, {"n": "最好评", "v": "3"}, {"n": "最新上线", "v": "1"}]}], "搞笑": [{"key": "division", "name": "全部专区", "value": [{"n": "全部专区", "v": ""}, {"n": "1080P", "v": "3"}, {"n": "独播", "v": "6"}, {"n": "免费", "v": "5"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "最多播放", "v": "2"}, {"n": "最好评", "v": "3"}, {"n": "最新上线", "v": "1"}]}], "生活": [{"key": "division", "name": "全部专区", "value": [{"n": "全部专区", "v": ""}, {"n": "1080P", "v": "3"}, {"n": "独播", "v": "6"}, {"n": "VIP", "v": "4"}, {"n": "免费", "v": "5"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "最多播放", "v": "2"}, {"n": "最好评", "v": "3"}, {"n": "最新上线", "v": "1"}]}], "体育": [{"key": "division", "name": "全部专区", "value": [{"n": "全部专区", "v": ""}, {"n": "1080P", "v": "3"}, {"n": "独播", "v": "6"}, {"n": "VIP", "v": "4"}, {"n": "免费", "v": "5"}]}, {"key": "tags", "name": "全部类型", "value": [{"n": "全部类型", "v": ""}, {"n": "篮球", "v": "篮球"}, {"n": "足球", "v": "足球"}, {"n": "台球", "v": "台球"}, {"n": "CBA", "v": "CBA"}, {"n": "钓鱼", "v": "钓鱼"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "最多播放", "v": "2"}, {"n": "最好评", "v": "3"}, {"n": "最新上线", "v": "1"}]}], "音乐": [{"key": "division", "name": "全部专区", "value": [{"n": "全部专区", "v": ""}, {"n": "1080P", "v": "3"}, {"n": "独播", "v": "6"}, {"n": "免费", "v": "5"}]}, {"key": "main_area", "name": "全部地区", "value": [{"n": "全部地区", "v": ""}, {"n": "中国", "v": "中国"}, {"n": "中国台湾", "v": "中国台湾"}, {"n": "中国香港", "v": "中国香港"}, {"n": "美国", "v": "美国"}, {"n": "其他", "v": "其他"}]}, {"key": "music_show_type", "name": "全部类型", "value": [{"n": "全部类型", "v": ""}, {"n": "演唱会", "v": "演唱会"}, {"n": "live现场", "v": "live现场"}, {"n": "颁奖典礼", "v": "颁奖典礼"}, {"n": "舞蹈", "v": "舞蹈"}, {"n": "影视原声", "v": "影视原声"}, {"n": "音乐达人", "v": "音乐达人"}, {"n": "音乐教学", "v": "音乐教学"}, {"n": "音乐纪录片", "v": "音乐纪录片"}, {"n": "音乐mv", "v": "音乐mv"}, {"n": "音乐自制", "v": "音乐自制"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "最多播放", "v": "2"}, {"n": "最好评", "v": "3"}, {"n": "最新上线", "v": "1"}]}], "游戏": [{"key": "division", "name": "全部专区", "value": [{"n": "全部专区", "v": ""}, {"n": "1080P", "v": "3"}, {"n": "独播", "v": "6"}, {"n": "VIP", "v": "4"}, {"n": "免费", "v": "5"}]}, {"key": "game_brand", "name": "全部节目", "value": [{"n": "全部节目", "v": ""}, {"n": "王者荣耀", "v": "王者荣耀"}, {"n": "和平精英", "v": "和平精英"}, {"n": "绝地求生", "v": "绝地求生"}, {"n": "迷你世界", "v": "迷你世界"}, {"n": "我的世界", "v": "我的世界"}, {"n": "植物大战僵尸", "v": "植物大战僵尸"}, {"n": "方舟生存进化", "v": "方舟生存进化"}, {"n": "第五人格", "v": "第五人格"}, {"n": "猫和老鼠", "v": "猫和老鼠"}, {"n": "香肠派对", "v": "香肠派对"}, {"n": "穿越火线", "v": "穿越火线"}, {"n": "英雄联盟", "v": "英雄联盟"}]}, {"key": "tags", "name": "全部类型", "value": [{"n": "全部类型", "v": ""}, {"n": "资讯", "v": "资讯"}, {"n": "解说", "v": "解说"}, {"n": "主播", "v": "主播"}, {"n": "沙盒", "v": "沙盒"}, {"n": "益智", "v": "益智"}, {"n": "生存", "v": "生存"}, {"n": "电子竞技", "v": "电子竞技"}, {"n": "单机主机", "v": "单机主机"}, {"n": "真人秀", "v": "真人秀"}, {"n": "动画", "v": "动画"}, {"n": "盘点", "v": "盘点"}, {"n": "游戏文化", "v": "游戏文化"}, {"n": "游戏节目", "v": "游戏节目"}, {"n": "评测", "v": "评测"}, {"n": "射击", "v": "射击"}, {"n": "策略", "v": "策略"}, {"n": "冒险", "v": "冒险"}, {"n": "即时战略", "v": "即时战略"}, {"n": "卡牌", "v": "卡牌"}, {"n": "角色扮演", "v": "角色>扮演"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "最多播放", "v": "2"}, {"n": "最好评", "v": "3"}, {"n": "最新上线", "v": "1"}]}]}, - headers:{ - 'User-Agent':'PC_UA' - }, - timeout:5000, - class_name:'电视剧&电影&综艺&动漫&少儿&纪录片&文化&亲子&教育&搞笑&生活&体育&音乐&游戏', - class_url:'电视剧&电影&综艺&动漫&少儿&纪录片&文化&亲子&教育&搞笑&生活&体育&音乐&游戏', - limit:20, - play_parse:true, - // 手动调用解析请求json的url,此lazy不方便 - // lazy:'js:print(input);fetch_params.headers["user-agent"]=MOBILE_UA;let html=request(input);let rurl=html.match(/window\\.open\\(\'(.*?)\',/)[1];rurl=urlDeal(rurl);input={parse:1,url:rurl};', - lazy:'js:input={parse:1,jx:1,url:input};', - // 推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float', - // 一级:'json:data.filterData.listData;title;img;subTitle;videoLink;summary', - 一级:'', - 一级:'js:let d=[];MY_FL.type=MY_CATE;let fl=stringify(MY_FL);fl=encodeUrl(fl);input=input.split("{")[0]+fl;if(MY_PAGE>1){let old_session=getItem("yk_session_"+MY_CATE,"{}");if(MY_PAGE===2){input=input.replace("optionRefresh=1","session="+encodeUrl(old_session))}else{input=input.replace("optionRefresh=1","session="+encodeUrl(old_session))}}let html=fetch(input,fetch_params);try{html=JSON.parse(html);let lists=html.data.filterData.listData;let session=html.data.filterData.session;session=stringify(session);if(session!==getItem("yk_session_"+MY_CATE,"{}")){setItem("yk_session_"+MY_CATE,session)}lists.forEach(function(it){let vid;if(it.videoLink.includes("id_")){vid=it.videoLink.split("id_")[1].split(".html")[0]}else{vid="msearch:"}d.push({title:it.title,img:it.img,desc:it.summary,url:"https://search.youku.com/api/search?appScene=show_episode&showIds="+vid,content:it.subTitle})})}catch(e){log("一级列表解析发生错误:"+e.message)}setResult(d);', - 二级:'', - 二级:'js:var d=[];VOD={vod_id:input};let html=request(input);let json=JSON.parse(html);if(/keyword/.test(input)){input="https://search.youku.com/api/search?appScene=show_episode&showIds="+json.pageComponentList[0].commonData.showId;json=JSON.parse(fetch(MY_URL,fetch_params))}let video_lists=json.serisesList;var name=json.sourceName;if(/优酷/.test(name)&&video_lists.length>0){let ourl="https://v.youku.com/v_show/id_"+video_lists[0].videoId+".html";let _img=video_lists[0].thumbUrl;let html=fetch(ourl,{headers:{Referer:"https://v.youku.com/","User-Agent":PC_UA}});let json=/__INITIAL_DATA__/.test(html)?html.split("window.__INITIAL_DATA__ =")[1].split(";")[0]:"{}";if(json==="{}"){log("触发了优酷人机验证");VOD.vod_remarks=ourl;VOD.vod_pic=_img;VOD.vod_name=video_lists[0].title.replace(/(\\d+)/g,"");VOD.vod_content="触发了优酷人机验证,本次未获取详情,但不影响播放("+ourl+")"}else{try{json=JSON.parse(json);let data=json.data.data;let data_extra=data.data.extra;let img=data_extra.showImgV;let model=json.data.model;let m=model.detail.data.nodes[0].nodes[0].nodes[0].data;let _type=m.showGenre;let _desc=m.updateInfo||m.subtitle;let JJ=m.desc;let _title=m.introTitle;VOD.vod_pic=img;VOD.vod_name=_title;VOD.vod_type=_type;VOD.vod_remarks=_desc;VOD.vod_content=JJ}catch(e){log("海报渲染发生错误:"+e.message);print(json);VOD.vod_remarks=name}}}if(!/优酷/.test(name)){VOD.vod_content="非自家播放源,暂无视频简介及海报";VOD.vod_remarks=name}function adhead(url){return urlencode(url)}if(typeof play_url==="undefined"){var play_url=""}play_url=play_url.replace("&play_url=","&type=json&play_url=");video_lists.forEach(function(it){let url="https://v.youku.com/v_show/id_"+it.videoId+".html";if(it.thumbUrl){d.push({desc:it.showVideoStage?it.showVideoStage.replace("期","集"):it.displayName,pic_url:it.thumbUrl,title:it.title,url:play_url+adhead(url)})}else if(name!=="优酷"){d.push({title:it.displayName?it.displayName:it.title,url:play_url+adhead(it.url)})}});VOD.vod_play_from=name;VOD.vod_play_url=d.map(function(it){return it.title+"$"+it.url}).join("#");', - 搜索:'', - 搜索:'js:var d=[];let html=request(input);let json=JSON.parse(html);json.pageComponentList.forEach(function(it){if(it.hasOwnProperty("commonData")){it=it.commonData;d.push({title:it.titleDTO.displayName,img:it.posterDTO.vThumbUrl,desc:it.stripeBottom,content:it.updateNotice+" "+it.feature,url:"https://search.youku.com/api/search?appScene=show_episode&showIds="+it.showId+"&appCaller=h5"})}});setResult(d);', -} \ No newline at end of file diff --git a/TVBox_JS/兔小贝.js b/TVBox_JS/兔小贝.js deleted file mode 100644 index 905d963..0000000 --- a/TVBox_JS/兔小贝.js +++ /dev/null @@ -1,26 +0,0 @@ -var rule = { - title:'兔小贝', - host:'https://www.tuxiaobei.com', - homeUrl:'', - url:'/list/mip-data?typeId=fyclass&page=fypage&callback=', - detailUrl:'/play/fyid', - searchUrl:'/search/index?key=**', - searchable:2, - headers:{ - 'User-Agent':'MOBILE_UA' - }, - timeout:5000, - class_url:'2&3&4&25', - class_name:'儿歌&故事&国学&启蒙', - //class_name:'#page-viewport&&ul&&li;.text&&Text;a&&href;/(.*)', - cate_exclude:'应用', - 推荐:'.pic-list.list-box;.items;.text&&Text;mip-img&&src;.all&&Text;a&&href', - double:true, - limit:5, - play_parse:true, - lazy:'js:fetch_params.headers["user-agent"] = IOS_UA;let html=fetch(input,fetch_params);let src = jsp.pdfh(html,"body&&#videoWrap&&video-src");input=src;', - // 一级:'json:data.items;name;image;collect_num;category_id+video_id', - 一级:'json:data.items;name;image;duration_string;video_id', - 二级:'*', - 搜索:'.list-con&&.items;.text&&Text;mip-img&&src;.time&&Text;a&&href', -} \ No newline at end of file diff --git a/TVBox_JS/兔小贝_儿童.js b/TVBox_JS/兔小贝_儿童.js deleted file mode 100644 index bbd337d..0000000 --- a/TVBox_JS/兔小贝_儿童.js +++ /dev/null @@ -1,62 +0,0 @@ -import './dayjs.min.js' -import './uri.min.js'; -import './crypto-js.js' - -let rule = { - title:'兔小贝', - host:'https://www.tuxiaobei.com', - homeUrl:'', - url:'/list/mip-data?typeId=fyclass&page=fypage&callback=', - detailUrl:'/play/fyid', - searchUrl:'/search/index?key=**', - searchable:2, - headers:{ - 'User-Agent':'MOBILE_UA' - }, - timeout:5000, - class_url:'2&3&4&25', - class_name:'儿歌&故事&国学&启蒙', - //class_name:'#page-viewport&&ul&&li;.text&&Text;a&&href;/(.*)', - cate_exclude:'应用', - 推荐:'.pic-list.list-box;.items;.text&&Text;mip-img&&src;.all&&Text;a&&href', - double:true, - limit:5, - play_parse:true, - lazy:'js:fetch_params.headers["user-agent"] = IOS_UA;let html=fetch(input,fetch_params);let src = jsp.pdfh(html,"body&&#videoWrap&&video-src");input=src;', - // 一级:'json:data.items;name;image;collect_num;category_id+video_id', - 一级:'json:data.items;name;image;duration_string;video_id', - 二级:'*', - 搜索:'.list-con&&.items;.text&&Text;mip-img&&src;.time&&Text;a&&href', -} - -function init(ext) { -} - -function home(filter) { - ... 算了 -} - -function homeVod(params) { -} - -function category(tid, pg, filter, extend) { -} - -function detail(id) { -} - -function play(flag, id, flags) { -} - -function search(wd, quick) { -} - -export default { - init: init, - home: home, - homeVod: homeVod, - category: category, - detail: detail, - play: play, - search: search -} \ No newline at end of file diff --git a/TVBox_JS/养端.js b/TVBox_JS/养端.js deleted file mode 100644 index 0ac167f..0000000 --- a/TVBox_JS/养端.js +++ /dev/null @@ -1,18 +0,0 @@ -var rule = { - title:'养端', - host:'https://aaq48.com:33666', - homeUrl:'/home/index.html', - url:'/home/vodlist/38/fyclass-fypage.html', - headers:{ - 'User-Agent':'MOBILE_UA' - }, - searchable:0, - quickSearch:0, - timeout:5000, - class_parse:'.menu&&dl&ⅆa&&Text;a&&href;.*/(.*?)-', - limit:5, - play_parse:true, - lazy:'', - 一级:'.channel-list&&dl;h3&&Text;img&&data-original;font&&Text;a&&href', - 二级:'*', -} \ No newline at end of file diff --git a/TVBox_JS/凌云影视.js b/TVBox_JS/凌云影视.js deleted file mode 100644 index 21a6139..0000000 --- a/TVBox_JS/凌云影视.js +++ /dev/null @@ -1,6 +0,0 @@ -var rule = Object.assign(muban.短视,{ - title:'凌云影视', - host:'https://www.lingyun.in', -url:'/channel/fyclass-fypage.html', -searchUrl:'/search.html?wd=**', -}); \ No newline at end of file diff --git a/TVBox_JS/剧白白.js b/TVBox_JS/剧白白.js deleted file mode 100644 index 3ffef4f..0000000 --- a/TVBox_JS/剧白白.js +++ /dev/null @@ -1,7 +0,0 @@ -var rule = Object.assign(muban.首图2,{ -title:'剧白白', -host:'https://jubaibai.cc', -url:'/vodshow/id/fyclass/page/fypage.html', -searchUrl:'/vodsearch**/page/fypage.html', -class_parse:'.stui-header__menu li:gt(0):lt(6);a&&Text;a&&href;/(.*?).html', -}); \ No newline at end of file diff --git a/TVBox_JS/剧荒.js b/TVBox_JS/剧荒.js deleted file mode 100644 index 7272b82..0000000 --- a/TVBox_JS/剧荒.js +++ /dev/null @@ -1,27 +0,0 @@ -var rule = { - title:'剧荒', - host:'https://www.juhuang.tv', - // homeUrl:'/', - url:'/type/fyclass_type_fypage.html', - searchUrl:'/s/**/fypage.html', - searchable:1, - quickSearch:1, - headers:{ - 'User-Agent':'UC_UA' - }, - timeout:5000, - class_name:'电视剧&电影&综艺&动漫',//静态分类名称拼接 - class_url:'2&1&3&4',//静态分类标识拼接 - //class_parse:'.drop-content-items li:gt(0):lt(7);.grid-item-name&&Text;a&&href', - play_parse:true, - lazy:'', - limit:5, - 推荐:'#movie-list-body;.movie-list-item;a&&title;.lazyloaded&&data-src;.module-item-text&&Text;a&&href', - double:true, // 推荐内容是否双层定位 - - 一级:'.module-item-pic&&a;a&&title;img&&data-src;.module-item-text&&Text;a&&href', - - - 二级:{"title":"h1.movie-title&&Text;.data:eq(1)&&Text","img":".poster img&&src","desc":".cr3.starLink&&Text","content":".detailsTxt&&Text","tabs":".play_source_tab a","lists":".content_playlist:eq(#id) a"}, - 搜索:'.vod-search-list;.movie-title&&Text;.Lazy&&data-original;.getop&&Text;a&&href;.getop:eq(-1)&&Text', -} \ No newline at end of file diff --git a/TVBox_JS/剧迷.js b/TVBox_JS/剧迷.js deleted file mode 100644 index e9e219b..0000000 --- a/TVBox_JS/剧迷.js +++ /dev/null @@ -1,11 +0,0 @@ -muban.首图.二级.tabs = '.myui-panel__head.bottom-line h3'; -var rule = Object.assign(muban.首图,{ -title:'剧迷', -host:'https://gmtv1.xyz', -url:'/genre/fyclass---fypage.html', -searchUrl:'/search/-------------.html?wd=*&submit=', -class_name:'电视剧&电影&综艺&动漫',//静态分类名称拼接 -class_url:'2&1&3&4',//静态分类标识拼接 -class_parse:'', -一级:'.myui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href', -}); diff --git a/TVBox_JS/厂长资源.js b/TVBox_JS/厂长资源.js deleted file mode 100644 index 5e1de58..0000000 --- a/TVBox_JS/厂长资源.js +++ /dev/null @@ -1,24 +0,0 @@ -var rule={ - title:'厂长资源', - host:'https://www.czspp.com', - url:'/fyclass/page/fypage', - searchUrl:'/xssearch?q=**&f=_all&p=fypage', - searchable:2,//是否启用全局搜索, - quickSearch:0,//是否启用快速搜索, - filterable:0,//是否启用分类筛选, - headers:{ - 'User-Agent':'UC_UA', - }, - // class_parse:'.fed-pops-navbar&&ul.fed-part-rows&&a.fed-part-eone:gt(0):lt(5);a&&Text;a&&href;.*/(.*?).html', - //class_parse:'.top_nav&&ul li:gt(0):lt(25);a&&Text;a&&href;.*/(.*?).html', - class_name:'dbtop250&最新电影&电视剧&国产剧&美剧&韩剧&番剧&动漫', - class_url:'dbtop250&zuixindianying&dsj&gcj&meijutt&hanjutv&fanju&dm', - play_parse:true, - lazy:'', - limit:6, - 推荐:'.bt_img&&ul&&li;h3&&Text;img&&data-original;.jidi&&Text;a&&href', - double:true, // 推荐内容是否双层定位 - 一级:'.bt_img&&ul&&li;h3&&Text;img&&data-original;.jidi&&Text;a&&href', - 二级:{"title":"h1&&Text;.moviedteail_list li:eq(0)&&Text","img":".dyimg.fl .vodlist_thumb&&data-original","desc":".content_detail.content_min.fl li:eq(0)&&Text;.content_detail.content_min.fl li:eq(2)&&Text;.content_detail.content_min.fl li:eq(3)&&Text","content":".yp_context","tabs":".ypxingq_t;span","lists":".paly_list_btn:eq(#id) a"}, - 搜索:'.bt_img&&ul&&li;h3&&Text;img&&data-original;.jidi&&Text;a&&href', -} diff --git a/TVBox_JS/厂长资源1.js b/TVBox_JS/厂长资源1.js deleted file mode 100644 index 0cf196d..0000000 --- a/TVBox_JS/厂长资源1.js +++ /dev/null @@ -1,21 +0,0 @@ -var rule={ - title:'厂长资源', - host:'https://www.c-zzy.com', - //host:'WWW.CZZY.TV', - url:'/fyclass/page/fypage', - searchUrl:'/xssearch?q=**&f=_all&p=fypage', - searchable:2,//是否启用全局搜索, - quickSearch:1,//是否启用快速搜索, - filterable:0,//是否启用分类筛选, - headers:{'User-Agent':'UC_UA', }, - play_parse:true, - lazy:'', - limit:6, - class_name:'豆瓣电影Top250&最新电影&电视剧&国产剧&美剧&韩剧&番剧&动漫', - class_url:'dbtop250&zuixindianying&dsj&gcj&meijutt&hanjutv&fanju&dm', - 推荐:'.bt_img;ul&&li;*;*;*;*', - double:true, - 一级:'.bt_img&&ul&&li;h3.dytit&&Text;img.lazy&&data-original;.jidi&&Text;a&&href', - 二级:{"title":"h1&&Text;.moviedteail_list li&&a&&Text","img":"div.dyimg img&&src","desc":".moviedteail_list li:eq(3) a&&Text;.moviedteail_list li:eq(2) a&&Text;.moviedteail_list li:eq(1) a&&Text;.moviedteail_list li:eq(7) a&&Text;.moviedteail_list li:eq(5) a&&Text","content":".yp_context&&Text","tabs":".mi_paly_box&&span","lists":".paly_list_btn:eq(#id) a"}, - 搜索:'.search_list&&ul&&li;*;*;*;*', -} diff --git a/TVBox_JS/听书网.js b/TVBox_JS/听书网.js deleted file mode 100644 index 05d1a00..0000000 --- a/TVBox_JS/听书网.js +++ /dev/null @@ -1,27 +0,0 @@ -var rule = { - title:'听书网', - host:'https://www.tingbook.cc', - // url:'/book/fyclass_fypage.html', - url:'/book/fyclass-fypage.html', - searchUrl:'/search.php?page=fypage&searchword=**&searchtype=-1', - searchable:2, - quickSearch:0, - headers:{ - 'User-Agent':'MOBILE_UA' - }, - timeout:5000, - // class_name:'玄幻&武侠&都市&言情&科幻&推理&恐怖&惊悚&历史&军事&网游&官商&评书&相声&文学&儿童&穿越&娱乐&笑话&戏曲&其它&百家讲坛', - // class_url:'1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&28&29&30&31&32&33', - class_parse:'.nav li;a&&Text;a&&href;/book/(\\d+).html', - play_parse:true, - lazy:'', - limit:6, - double:true, - // 推荐:'.row2;ul&&li;.f-bold&&Text;.img-box&&img;.f-gray&&Text;a&&href', - 推荐:'.row2;ul&&li;.f-bold&&Text;.img-box img&&src;.f-gray&&Text;a&&href', - // 一级:'.row3&&li;.f-bold&&Text;img-box&&img;.f-gray&&Text;a&&href', - 一级:'.row3&&li;.f-bold&&Text;.img-box img&&src;.f-gray&&Text;a&&href', - // 二级:{title:'h2&&Text',img:'.img-box&&img',desc:'section&&p:eq(1)&&Text',content:'section&&p:eq(2)&&Text',tabs:'#yuedu&&h2',lists:'#yuedu:eq(#id)&&ul&&li'}, - 二级:{title:'h2&&Text',img:'.img-box img&&src',desc:'section&&p:eq(1)&&Text',content:'section&&p:eq(2)&&Text',tabs:'#yuedu&&h2',lists:'#yuedu:eq(#id)&&ul&&li'}, - 搜索:'*', -} \ No newline at end of file diff --git a/TVBox_JS/吸瓜.js b/TVBox_JS/吸瓜.js deleted file mode 100644 index fe30606..0000000 --- a/TVBox_JS/吸瓜.js +++ /dev/null @@ -1,21 +0,0 @@ -var rule = { - title:'吸瓜', - host:'https://xgsp.tv', - // homeUrl:'', - url:'/list/?fyclass-fypage.html', - headers:{ - 'User-Agent':'MOBILE_UA' - }, - searchable:0, - quickSearch:0, - timeout:5000, - class_parse:'.wap-roll&&li;a&&Text;a&&href;(\\d+).html', - cate_exclude:'独家', - limit:5, - play_parse:true, - lazy:'js:let html=request(input);let a=html.match(/var now="(.*?)"/)[1];input=a', - 推荐:'ul.row.row-space7.row-m-space7.tx-column-5.tx-column-m-2;li;a&&title;img&&src;.ico-right&&Text;a&&href', - double:true, - 一级:'.tx-column-m-2.mb20&&li;h2&&Text;img&&src;.ico-right&&Text;a&&href', - 二级:'*', -} \ No newline at end of file diff --git a/TVBox_JS/喵喵.js b/TVBox_JS/喵喵.js deleted file mode 100644 index c049ba8..0000000 --- a/TVBox_JS/喵喵.js +++ /dev/null @@ -1,22 +0,0 @@ -var rule = { - title:'喵喵', - host:'https://www.2345ka.com', - // homeUrl:'/', - url:'/t/fyclass/fypage.html', - searchUrl:'/s/**/fypage.html', - searchable:2, - quickSearch:0, - headers:{ - 'User-Agent':'UC_UA' - }, - timeout:5000, - class_parse:'.bm-item-list a:gt(0):lt(7);a&&Text;a&&href;/(\\d+).html', - play_parse:true, - lazy:'', - limit:5, - 推荐:'.movie-list-body;.movie-list-item;.movie-title&&Text;.movie-post-lazyload&&data-original;.movie-rating&&Text;a&&href', - double:true, // 推荐内容是否双层定位 - 一级:'.movie-list-body .movie-list-item;.movie-title&&Text;.Lazy&&data-original;.movie-rating&&Text;a&&href', - 二级:{"title":"h1.movie-title&&Text;.data:eq(1)&&Text","img":".poster img&&src","desc":".cr3.starLink&&Text","content":".detailsTxt&&Text","tabs":".play_source_tab a","lists":".content_playlist:eq(#id) a"}, - 搜索:'.vod-search-list;.movie-title&&Text;.Lazy&&data-original;.getop&&Text;a&&href;.getop:eq(-1)&&Text', -} \ No newline at end of file diff --git a/TVBox_JS/在线之家.js b/TVBox_JS/在线之家.js deleted file mode 100644 index 231e21d..0000000 --- a/TVBox_JS/在线之家.js +++ /dev/null @@ -1,4 +0,0 @@ -var rule = Object.assign(muban.首图2,{ -title:'在线之家', -host:'https://zxzj.vip', -}); \ No newline at end of file diff --git a/TVBox_JS/夜空.js b/TVBox_JS/夜空.js deleted file mode 100644 index 155b26c..0000000 --- a/TVBox_JS/夜空.js +++ /dev/null @@ -1,7 +0,0 @@ -var rule = Object.assign(muban.mxpro,{ -title:'夜空', -host:'https://www.yekong.cc', -url:'/pianku-fyclass--------fypage---/', -searchUrl:'/search-**----------fypage---/', -class_parse:'.navbar-items li:gt(1):lt(7);a&&Text;a&&href;.*v/(.*?)/', -}); \ No newline at end of file diff --git a/TVBox_JS/大师兄影视.js b/TVBox_JS/大师兄影视.js deleted file mode 100644 index b35a7c4..0000000 --- a/TVBox_JS/大师兄影视.js +++ /dev/null @@ -1,7 +0,0 @@ -var rule = Object.assign(muban.mxpro,{ -title:'大师兄影视.', -host:'https://dsxys.com', -url:'/vodshow/fyclass--------fypage---.html', -searchUrl:'/search-**----------fypage---/', -class_parse:'.navbar-items.swiper-wrapper li;a&&title;a&&href;/(\\d+).html', -}); diff --git a/TVBox_JS/大米星球.js b/TVBox_JS/大米星球.js deleted file mode 100644 index 773ceef..0000000 --- a/TVBox_JS/大米星球.js +++ /dev/null @@ -1,10 +0,0 @@ -muban.mxpro.二级.img = '.lazyload&&src'; -var rule = Object.assign(muban.mxpro,{ -title:'大米星球', -host:'https://www.dmxq.fun', -url:'/vodshow/fyclass--------fypage---/pjax/YES.html', -searchUrl:'/vodsearch/**----------fypage---/pjax/NO.html', -class_parse:'li.swiper-slide.navbar-item;span&&Text;a&&href;/(\\d+).html', - 一级:'a.module-poster-item.module-item;a&&title;.lazyload&&src;.module-item-note&&Text;a&&href', - 推荐:'.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&src;.module-item-note&&Text;a&&href', -}); \ No newline at end of file diff --git a/TVBox_JS/天空影视.js b/TVBox_JS/天空影视.js deleted file mode 100644 index e000e8e..0000000 --- a/TVBox_JS/天空影视.js +++ /dev/null @@ -1,9 +0,0 @@ -var rule = Object.assign(muban.首图,{ -title:'天空影视', -host:'https://www.tkys6.com', -url:'/vodshow/id/fyclass/page/fypage.html', -searchUrl:'/search/-------------.html?wd=*&submit=', -//class_name:'电视剧&电影&综艺&动漫&blbl',//静态分类名称拼接 -//class_url:'2&1&3&4&29',//静态分类标识拼接 -class_parse:'.myui-header__menu li.hidden-sm:gt(0):lt(8);a&&Text;a&&href;/(\\d+).html', -}); diff --git a/TVBox_JS/奇优影院.js b/TVBox_JS/奇优影院.js deleted file mode 100644 index 208b6b0..0000000 --- a/TVBox_JS/奇优影院.js +++ /dev/null @@ -1,13 +0,0 @@ -muban.首图2.二级.title = '.stui-content__detail&&h1&&Text;.stui-content__detail&&p:eq(0)&&Text'; -muban.首图2.二级.tabs = '.stui-pannel__head a'; -muban.首图2.二级.lists = '.stui-content__playlist:eq(#id) li'; -muban.首图2.二级.desc = '.stui-content__detail&&p:eq(1)&&Text;.stui-content__detail&&p:eq(2)&&Text;.stui-content__detail&&p:eq(3)&&Text'; -muban.首图2.二级.content = '.stui-pannel_bd:eq(1)&&Text'; -var rule = Object.assign(muban.首图2,{ - title:'奇优影院', - host:'http://1e6e.com', - url:'/list/fyclass_fypage.html', - searchUrl:'/search.php;**', - 搜索:'js:let url=input.split(";")[0];let d=[];let body={searchword:input.split(";")[1]};fetch_params.body=body;let html=post(url,fetch_params);let pdfa=jsp.pdfa;let pdfh=jsp.pdfh;let pd=jsp.pd;let lists=pdfa(html,"ul.stui-vodlist__media&&li");lists.forEach(function(it){d.push({title:pdfh(it,".title&&Text"),url:pd(it,"a&&href"),desc:pdfh(html,".pic-text&&Text"),pic_url:pd(html,".lazyload&&data-original")})});setResult(d);', -//搜索:'li.stui-vodlist__item;a&&title;a&&data-original;.pic-text&&Text;a&&href' -}); \ No newline at end of file diff --git a/TVBox_JS/奇珍异兽.js b/TVBox_JS/奇珍异兽.js deleted file mode 100644 index f59aa5a..0000000 --- a/TVBox_JS/奇珍异兽.js +++ /dev/null @@ -1,39 +0,0 @@ -var rule = { - title:'奇珍异兽', - host:'https://www.iqiyi.com', - homeUrl:'', - // detailUrl:'https://pcw-api.iqiyi.com/albums/album/avlistinfo?aid=fyid&size=2000&page=1', - detailUrl:'https://pcw-api.iqiyi.com/video/video/videoinfowithuser/fyid?agent_type=1&authcookie=&subkey=fyid&subscribe=1', - searchUrl:'https://search.video.iqiyi.com/o?if=html5&key=**&pageNum=fypage&pos=1&pageSize=24&site=iqiyi', - searchable:2, - multi:1, - filterable:1, - filter:{'1': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': 2022}, {'n': '2021', 'v': 2021}, {'n': '2020', 'v': 2020}, {'n': '2019', 'v': 2019}, {'n': '2018', 'v': 2018}, {'n': '2017', 'v': 2017}, {'n': '2016-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '华语', 'v': 1}, {'n': '香港地区', 'v': 28997}, {'n': '美国', 'v': 2}, {'n': '欧洲', 'v': 3}, {'n': '韩国', 'v': 4}, {'n': '日本', 'v': 308}, {'n': '泰国', 'v': 1115}, {'n': '印度', 'v': 28999}, {'n': '其它', 'v': 5}]}, {'key': '18001', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '喜剧', 'v': 8}, {'n': '爱情', 'v': 6}, {'n': '动作', 'v': 11}, {'n': '枪战', 'v': 131}, {'n': '犯罪', 'v': 291}, {'n': '惊悚', 'v': 128}, {'n': '恐怖', 'v': 10}, {'n': '悬疑', 'v': 289}, {'n': '动画', 'v': 12}, {'n': '家庭', 'v': 27356}, {'n': '奇幻', 'v': 1284}, {'n': '魔幻', 'v': 129}, {'n': '科幻', 'v': 9}, {'n': '战争', 'v': 7}, {'n': '青春', 'v': 130}]}, {'key': '27396', 'name': '规格', 'value': [{'n': '全部', 'v': ''}, {'n': '巨制', 'v': 27397}, {'n': '院线', 'v': 27815}, {'n': '独播', 'v': 30149}, {'n': '网络电影', 'v': 27401}]}], '2': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': 2022}, {'n': '2021', 'v': 2021}, {'n': '2020', 'v': 2020}, {'n': '2019', 'v': 2019}, {'n': '2018', 'v': 2018}, {'n': '2017', 'v': 2017}, {'n': '2016-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': 15}, {'n': '港剧', 'v': 16}, {'n': '韩剧', 'v': 17}, {'n': '美剧', 'v': 18}, {'n': '日剧', 'v': 309}, {'n': '泰剧', 'v': 1114}, {'n': '台湾地区', 'v': 1117}, {'n': '英剧', 'v': 28916}, {'n': '其它', 'v': 19}]}, {'key': '18003', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '自制', 'v': 11992}, {'n': '古装', 'v': 24}, {'n': '言情', 'v': 20}, {'n': '武侠', 'v': 23}, {'n': '偶像', 'v': 30}, {'n': '家庭', 'v': 1654}, {'n': '青春', 'v': 1653}, {'n': '都市', 'v': 24064}, {'n': '喜剧', 'v': 135}, {'n': '战争', 'v': 27916}, {'n': '军旅', 'v': 1655}, {'n': '谍战', 'v': 290}, {'n': '悬疑', 'v': 32}, {'n': '罪案', 'v': 149}, {'n': '穿越', 'v': 148}, {'n': '宫廷', 'v': 139}, {'n': '历史', 'v': 21}, {'n': '神话', 'v': 145}, {'n': '科幻', 'v': 34}, {'n': '年代', 'v': 27}, {'n': '农村', 'v': 29}, {'n': '商战', 'v': 140}, {'n': '剧情', 'v': 24063}, {'n': '奇幻', 'v': 27881}, {'n': '网剧', 'v': 24065}, {'n': '竖短片', 'v': 32839}]}], '3': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': 2022}, {'n': '2021', 'v': 2021}, {'n': '2020', 'v': 2020}, {'n': '2019', 'v': 2019}, {'n': '2018', 'v': 2018}, {'n': '2017', 'v': 2017}, {'n': '2016-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '国内', 'v': 20323}, {'n': '国外', 'v': 20324}]}, {'key': '18004', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '人文', 'v': 70}, {'n': '美食', 'v': 33908}, {'n': '医疗', 'v': 33924}, {'n': '自然', 'v': 33933}, {'n': '萌宠', 'v': 33945}, {'n': '财经', 'v': 33953}, {'n': '罪案', 'v': 33960}, {'n': '竞技', 'v': 33967}, {'n': '灾难', 'v': 33974}, {'n': '军事', 'v': 72}, {'n': '历史', 'v': 74}, {'n': '探险', 'v': 73}, {'n': '社会', 'v': 71}, {'n': '科技', 'v': 28119}, {'n': '旅游', 'v': 310}]}, {'key': '28467', 'name': '出品方', 'value': [{'n': '全部', 'v': ''}, {'n': 'BBC', 'v': 28468}, {'n': '美国历史频道', 'v': 28470}, {'n': '探索频道', 'v': 28471}, {'n': '央视记录', 'v': 28472}, {'n': '北京纪实频道', 'v': 28473}, {'n': '上海纪实频道', 'v': 28474}, {'n': '朗思文化', 'v': 28476}, {'n': 'CNEX', 'v': 28477}, {'n': '五星传奇', 'v': 28478}, {'n': 'IMG', 'v': 28479}, {'n': 'NHK', 'v': 28480}, {'n': '爱奇艺出品', 'v': 31283}, {'n': 'Netflix', 'v': 31286}]}, {'key': '29076', 'name': '片种', 'value': [{'n': '全部', 'v': ''}, {'n': '纪录电影', 'v': 29077}, {'n': '系列纪录片', 'v': 29078}, {'n': '网络纪录片', 'v': 29082}, {'n': '纪实栏目', 'v': 29083}]}, {'key': '31294', 'name': '时长', 'value': [{'n': '全部', 'v': ''}, {'n': '微纪录', 'v': 29079}, {'n': '长纪录', 'v': 29080}, {'n': '短纪录', 'v': 29081}]}], '4': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': 2022}, {'n': '2021', 'v': 2021}, {'n': '2020', 'v': 2020}, {'n': '2019', 'v': 2019}, {'n': '2018', 'v': 2018}, {'n': '2017', 'v': 2017}, {'n': '2016-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': 37}, {'n': '日本', 'v': 38}, {'n': '韩国', 'v': 1106}, {'n': '欧美', 'v': 30218}, {'n': '其它', 'v': 40}]}, {'key': '30219', 'name': '版本', 'value': [{'n': '全部', 'v': ''}, {'n': '动画', 'v': 30220}, {'n': '特摄', 'v': 30223}, {'n': '布袋戏', 'v': 30224}, {'n': '特别篇', 'v': 32782}, {'n': '动态漫画', 'v': 32783}, {'n': '动画电影', 'v': 32784}, {'n': '竖版视频', 'v': 32785}, {'n': '轻动画', 'v': 33482}, {'n': '短剧', 'v': 33483}]}, {'key': '30225', 'name': '风格', 'value': [{'n': '全部', 'v': ''}, {'n': '搞笑', 'v': 30230}, {'n': '热血', 'v': 30232}, {'n': '催泪', 'v': 30233}, {'n': '治愈', 'v': 30234}, {'n': '励志', 'v': 30237}, {'n': '机战', 'v': 30241}, {'n': '恋爱', 'v': 30243}, {'n': '科幻', 'v': 30245}, {'n': '奇幻', 'v': 30247}, {'n': '推理', 'v': 30248}, {'n': '校园', 'v': 30249}, {'n': '日常', 'v': 30252}, {'n': '历史', 'v': 30254}, {'n': '美食', 'v': 30255}, {'n': '职场', 'v': 30256}, {'n': '偶像', 'v': 30258}, {'n': '泡面', 'v': 30265}, {'n': '冒险', 'v': 30267}, {'n': '竞技', 'v': 30268}, {'n': '合家欢', 'v': 30270}, {'n': '武侠', 'v': 32792}, {'n': '玄幻', 'v': 32793}]}, {'key': '32795', 'name': '新类型', 'value': [{'n': '全部', 'v': ''}, {'n': '轻小说改编', 'v': 32796}, {'n': '漫画改编', 'v': 32797}, {'n': '游戏改编', 'v': 32798}, {'n': '原创', 'v': 32799}]}], '6': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': 2022}, {'n': '2021', 'v': 2021}, {'n': '2020', 'v': 2020}, {'n': '2019', 'v': 2019}, {'n': '2018', 'v': 2018}, {'n': '2017', 'v': 2017}, {'n': '2016-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': 151}, {'n': '港台', 'v': 152}, {'n': '韩国', 'v': 33306}, {'n': '欧美', 'v': 154}, {'n': '其它', 'v': 1113}]}, {'key': '18014', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '播报', 'v': 155}, {'n': '访谈', 'v': 156}, {'n': '游戏', 'v': 158}, {'n': '晚会', 'v': 292}, {'n': '曲艺', 'v': 293}, {'n': '脱口秀', 'v': 2118}, {'n': '真人秀', 'v': 2224}, {'n': '竞技', 'v': 30278}, {'n': '爱奇艺出品', 'v': 30279}, {'n': '竞演', 'v': 33860}]}, {'key': '33162', 'name': '题材', 'value': [{'n': '全部', 'v': ''}, {'n': '音乐', 'v': 33163}, {'n': '舞蹈', 'v': 33172}, {'n': '文化', 'v': 33173}, {'n': '美食', 'v': 33182}, {'n': '伦理', 'v': 33184}, {'n': '相亲', 'v': 33193}, {'n': '纪实', 'v': 33195}, {'n': '生活', 'v': 33196}, {'n': '亲子', 'v': 33197}, {'n': '少儿', 'v': 33198}, {'n': '财经', 'v': 33199}, {'n': '健康', 'v': 33200}, {'n': '时尚', 'v': 33203}, {'n': '旅游', 'v': 33205}, {'n': '教育', 'v': 33206}, {'n': '其它', 'v': 33220}, {'n': '爱情', 'v': 33316}, {'n': '搞笑', 'v': 33317}, {'n': '益智', 'v': 33318}, {'n': '职场', 'v': 33319}, {'n': '语言', 'v': 33530}, {'n': '辩论', 'v': 33531}, {'n': '演讲', 'v': 33843}]}], '5': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': 2022}, {'n': '2021', 'v': 2021}, {'n': '2020', 'v': 2020}, {'n': '2019', 'v': 2019}, {'n': '2018', 'v': 2018}, {'n': '2017', 'v': 2017}, {'n': '2016-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': 221}, {'n': '港台', 'v': 220}, {'n': '欧美', 'v': 219}, {'n': '日韩', 'v': 218}, {'n': '拉美', 'v': 217}, {'n': '亚洲地区', 'v': 216}, {'n': '非洲', 'v': 215}]}, {'key': '18009', 'name': '语种', 'value': [{'n': '全部', 'v': ''}, {'n': '普通话', 'v': 91}, {'n': '粤语', 'v': 92}, {'n': '闽南语', 'v': 93}, {'n': '英语', 'v': 94}, {'n': '日语', 'v': 95}, {'n': '韩语', 'v': 96}, {'n': '其它', 'v': 97}]}, {'key': '23554', 'name': '音乐类型', 'value': [{'n': '全部', 'v': ''}, {'n': '单曲MV', 'v': 23556}, {'n': '单曲现场', 'v': 23557}, {'n': '演唱会', 'v': 23558}, {'n': '新闻', 'v': 23559}, {'n': '访谈', 'v': 23560}, {'n': '音乐记录', 'v': 23561}, {'n': '音乐周边', 'v': 23562}, {'n': '音乐节目', 'v': 23563}, {'n': '影视原声', 'v': 23564}, {'n': '音乐短片', 'v': 23565}, {'n': '其他', 'v': 23566}]}], '16': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': 2022}, {'n': '2021', 'v': 2021}, {'n': '2020', 'v': 2020}, {'n': '2019', 'v': 2019}, {'n': '2018', 'v': 2018}, {'n': '2017', 'v': 2017}, {'n': '2016-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': '18061', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '喜剧', 'v': 1296}, {'n': '爱情', 'v': 1297}, {'n': '动作', 'v': 1298}, {'n': '奇幻', 'v': 1299}, {'n': '惊悚', 'v': 1300}, {'n': '悬疑', 'v': 1301}, {'n': '青春', 'v': 1302}]}]}, - // url:'https://pcw-api.iqiyi.com/search/recommend/list?channel_id=fyclass&data_type=1&is_purchase=&mode=24&page_id=fypage&ret_num=48&three_category_id=', - url:'https://pcw-api.iqiyi.com/search/recommend/list?channel_id=fyclass&data_type=1&page_id=fypage&ret_num=48', - filter_url:'is_purchase={{fl.is_purchase}}&mode={{fl.mode}}&three_category_id={{fl.three_category_id}}&market_release_date_level={{fl.year}}', - // url:'https://pcw-api.iqiyi.com/search/video/videolists?channel_id=fyclass&pageNum=fypage&pageSize=24&data_type=1&site=iqiyi', - headers:{ - 'User-Agent':'MOBILE_UA' - }, - timeout:5000, - class_name:'电影&电视剧&纪录片&动漫&综艺&音乐&网络电影', - class_url:'1&2&3&4&6&5&16', - limit:20, - // play_parse:true, - // 手动调用解析请求json的url,此lazy不方便 - // lazy:'js:input="https://cache.json.icu/home/api?type=ys&uid=292796&key=fnoryABDEFJNPQV269&url="+input.split("?")[0];log(input);let html=JSON.parse(request(input));log(html);input=html.url||input', - // 推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float', - // 一级:'json:.data.list;.name;.imageUrl;.latestOrder;.albumId', - 推荐:'', - // 推荐:'js:let d=[];fetch_params.headers["user-agent"]=PC_UA;pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;let html=fetch(HOST,fetch_params);let lists=pdfa(html,".qy-mod-li");lists.forEach(function(it){try{let title=pdfh(it,"p.sub&&title");let desc=pdfh(it,".qy-mod-label&&Text");let pic_url=pd(it,"img&&src");d.push({title:title,desc:desc,img:pic_url})}catch(e){}});res=setResult(d);', - 一级:'js:let d=[];if(MY_CATE==="16"){input=input.replace("channel_id=16","channel_id=1").split("three_category_id")[0];input+="three_category_id=27401"}else if(MY_CATE==="5"){input=input.replace("data_type=1","data_type=2")}let html=request(input);let json=JSON.parse(html);if(json.code==="A00003"){fetch_params.headers["user-agent"]=PC_UA;json=JSON.parse(fetch(input,fetch_params))}json.data.list.forEach(function(data){if(data.channelId===1){desc=data.hasOwnProperty("score")?data.score+"分\\t":""}else if(data.channelId===2||data.channelId===4){if(data.latestOrder===data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"集全"}else{if(data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"/"+data.videoCount+"集"}else{desc="更新至 "+data.latestOrder+"集"}}}else if(data.channelId===6){desc=data.period+"期"}else if(data.channelId===5){desc=data.focus}else{if(data.latestOrder){desc="更新至 第"+data.latestOrder+"期"}else if(data.period){desc=data.period}else{desc=data.focus}}url=MY_CATE+"$"+data.albumId;d.push({url:url,title:data.name,desc:desc,pic_url:data.imageUrl.replace(".jpg","_390_520.jpg?caplist=jpg,webp")})});setResult(d);', - // 一级:'js:let d=[];if(MY_CATE==="16"){input=input.replace("channel_id=16","channel_id=1").split("three_category_id")[0];input+="three_category_id=27401"}else if(MY_CATE==="5"){input=input.replace("data_type=1","data_type=2")}let html=fetch(input,fetch_params);let json=JSON.parse(html);if(json.code==="A00003"){fetch_params.headers["user-agent"]=PC_UA;json=JSON.parse(fetch(input,fetch_params))}json.data.list.forEach(function(data){if(data.channelId===1){desc=data.hasOwnProperty("score")?data.score+"分\\t":""}else if(data.channelId===2||data.channelId===4){if(data.latestOrder===data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"集全"}else{if(data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"/"+data.videoCount+"集"}else{desc="更新至 "+data.latestOrder+"集"}}}else if(data.channelId===6){desc=data.period+"期"}else if(data.channelId===5){desc=data.focus}else{if(data.latestOrder){desc="更新至 第"+data.latestOrder+"期"}else if(data.period){desc=data.period}else{desc=data.focus}}url=MY_CATE+"$"+data.albumId;d.push({url:url,title:data.name,desc:desc,pic_url:data.imageUrl.replace(".jpg","_390_520.jpg?caplist=jpg,webp")})});setResult(d);', - // 一级:'json:.data.list;.name;.imageUrl;.playUrl;.latestOrder', - // 二级:{is_json:1,"title":"data.title;data.moviecategory[0]+data.moviecategory[1]","img":"data.cdncover","desc":"data.area[0];data.director[0]","content":"data.description","tabs":"data.playlink_sites;data.playlinksdetail.#idv.quality","lists":"data.playlinksdetail.#idv.default_url"}, - // 二级:{is_json:1,"title":"data.name+data.subtitle;data.latestOrder","img":"data.imageUrl","desc":"data.categories;data.areas","content":"data.description","tabs":"data.name","lists":"data.playlinksdetail.#idv.default_url"}, - 二级:'', - 二级:'js:let d=[];let html=request(input);let json=JSON.parse(html).data;VOD={vod_id:"",vod_url:input,vod_name:"",type_name:"",vod_actor:"",vod_year:"",vod_director:"",vod_area:"",vod_content:"",vod_remarks:"",vod_pic:""};VOD.vod_name=json.name;try{if(json.latestOrder){VOD.vod_remarks="类型: "+(json.categories[0].name||"")+"\\t"+(json.categories[1].name||"")+"\\t"+(json.categories[2].name||"")+"\\t"+"评分:"+(json.score||"")+"\\n更新至:第"+json.latestOrder+"集(期)/共"+json.videoCount+"集(期)"}else{VOD.vod_remarks="类型: "+(json.categories[0].name||"")+"\\t"+(json.categories[1].name||"")+"\\t"+(json.categories[2].name||"")+"\\t"+"评分:"+(json.score||"")+json.period}}catch(e){VOD.vod_remarks=json.subtitle}VOD.vod_area=(json.focus||"")+"\\n资费:"+(json.payMark===1?"VIP":"免费")+"\\n地区:"+(json.areas||"");let vsize="579_772";try{vsize=json.imageSize[12]}catch(e){}VOD.vod_pic=json.imageUrl.replace(".jpg","_"+vsize+".jpg?caplist=jpg,webp");VOD.type_name=json.categories.map(function(it){return it.name}).join(",");if(json.people.main_charactor){let vod_actors=[];json.people.main_charactor.forEach(function(it){vod_actors.push(it.name)});VOD.vod_actor=vod_actors.join(",")}VOD.vod_content=json.description;let playlists=[];if(json.channelId===1||json.channelId===5){playlists=[{playUrl:json.playUrl,imageUrl:json.imageUrl,shortTitle:json.shortTitle,focus:json.focus,period:json.period}]}else{if(json.channelId===6){let qs=json.period.split("-")[0];let listUrl="https://pcw-api.iqiyi.com/album/source/svlistinfo?cid=6&sourceid="+json.albumId+"&timelist="+qs;let playData=JSON.parse(request(listUrl)).data[qs];playData.forEach(function(it){playlists.push({playUrl:it.playUrl,imageUrl:it.imageUrl,shortTitle:it.shortTitle,focus:it.focus,period:it.period})})}else{let listUrl="https://pcw-api.iqiyi.com/albums/album/avlistinfo?aid="+json.albumId+"&size=200&page=1";let data=JSON.parse(request(listUrl)).data;let total=data.total;playlists=data.epsodelist;if(total>200){for(let i=2;i200){for(let i=2;i10){real_url="https://player.buyaotou.xyz/?url="+url;d.saveParse(input,real_url);input=real_url}}catch(e){print("网络请求发生错误:"+e.message)}}', - lazy:'js:cacheUrl=getParse(input);if(cacheUrl){input=cacheUrl}else{try{let html=fetch(input,fetch_params);let ret=html.match(/var player_(.*?)=(.*?)10){real_url="https://player.buyaotou.xyz/?url="+url;saveParse(input,real_url);input=real_url}}catch(e){print("网络请求发生错误:"+e.message)}}', - limit:5, - 推荐:'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;;a&&href', - double:true, // 推荐内容是否双层定位 - 一级:'body .stui-vodlist__box;a&&title;.lazyload&&data-original;;a&&href', - 二级:{"title":"h1.title&&Text;.stui-content__detail p:eq(1)&&Text","img":".lazyload&&data-original","desc":".stui-content__detail p:eq(-3)&&Text;.stui-content__detail p:eq(-2)&&Text","content":".stui-content__detail p.detail&&Text","tabs":".stui-pannel__head ul li","lists":".stui-content__playlist:eq(#id) li"}, - // 搜索:'body .module-item;.module-card-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href;.module-info-item-content&&Text', -} \ No newline at end of file diff --git a/TVBox_JS/库马伊.js b/TVBox_JS/库马伊.js deleted file mode 100644 index 147ddd3..0000000 --- a/TVBox_JS/库马伊.js +++ /dev/null @@ -1,9 +0,0 @@ -var rule = Object.assign(muban.首图2,{ -title:'库马伊', -host:'http://www.kmy5.com', -url:'/tv/fyclass-fypage.html', -searchUrl:'/search/**----------fypage---.html', -class_parse:'.stui-header__menu li:gt(0):lt(5);a&&Text;a&&href;.*/(.*?).html', -搜索:'li.stui-vodlist__item;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href', -二级:{"title":".stui-content__detail .title&&Text;.stui-content__detail p:eq(-2)&&Text","img":".stui-content__thumb .lazyload&&data-original","desc":".stui-content__detail p:eq(0)&&Text;.stui-content__detail p:eq(1)&&Text;.stui-content__detail p:eq(2)&&Text","content":".stui-content__desc&&Text","tabs":".stui-pannel__head h3","lists":".stui-content__playlist:eq(#id) li"}, -}); diff --git a/TVBox_JS/影视工厂.js b/TVBox_JS/影视工厂.js deleted file mode 100644 index 70cc7cd..0000000 --- a/TVBox_JS/影视工厂.js +++ /dev/null @@ -1,4 +0,0 @@ -var rule = Object.assign(muban.首图,{ -title:'影视工厂', -host:'https://www.ysgc.cc', -}); \ No newline at end of file diff --git a/TVBox_JS/快云影院.js b/TVBox_JS/快云影院.js deleted file mode 100644 index 8f479c8..0000000 --- a/TVBox_JS/快云影院.js +++ /dev/null @@ -1,24 +0,0 @@ -var rule = { - title:'快云', - host:'https://kuaiyunyy.com', - // homeUrl:'/', - url:'/index.php/vod/show/id/fyclass/page/fypage.html', - //searchUrl:'/vodsearch/**----------fypage---.html', - searchable:0,//是否启用全局搜索, - quickSearch:0,//是否启用快速搜索, - filterable:0,//是否启用分类筛选, - headers:{//网站的请求头,完整支持所有的,常带ua和cookies - 'User-Agent':'MOBILE_UA', - // "Cookie": "searchneed=ok" - }, - class_parse:'.nav-menu-items&&li;a&&title;a&&href;/(\\d+).html', - cate_exclude:'直播|足球', - play_parse:true, - lazy:'', - limit:8, - 推荐:'.module-items;.module-item-cover&&.module-item-pic;a&&title;.lazyloaded&&data-src;.item-text&&Text;a&&href', - double:true, // 推荐内容是否双层定位 - 一级:'.module-list&&.module-item-pic;a&&title;.lazyloaded&&data-src;.module-item-text&&Text;a&&href', - 二级:{"title":"h1.page-title&&Text;.video-info-aux&&Text","img":".lazyload&&data-src","content":".content.vod_content&&Text","tabs":".module-tab-item.tab-item","lists":".module-blocklist.scroll-box:eq(#id) a"}, - -} diff --git a/TVBox_JS/快看.js b/TVBox_JS/快看.js deleted file mode 100644 index fcd778e..0000000 --- a/TVBox_JS/快看.js +++ /dev/null @@ -1,24 +0,0 @@ -var rule={ - title:'快看', - host:'https://www.kuaikanys.net', - // homeUrl:'/', - url:'/s/fyclass/page/fypage.html', - searchUrl:'/vodsearch/-------------.html?wd=**&submit=', - searchable:2,//是否启用全局搜索, - quickSearch:1,//是否启用快速搜索, - filterable:0,//是否启用分类筛选, - headers:{//网站的请求头,完整支持所有的,常带ua和cookies - 'User-Agent':'MOBILE_UA', - // "Cookie": "searchneed=ok" - }, - class_name:'电影&连续剧&综艺&动漫&动作片&喜剧片&爱情片&科幻片&言情片&恐怖片&剧情片&战争片&国产剧&港台剧&日韩剧&欧美剧&其他剧', - class_url:'dianying&lianxuju&zongyi&dongman&dongzuopian&xijupian&aiqingpian&kehuanpian&yanqingpian&kongbupian&juqingpian&zhanzhengpian&guochanju&gangtaiju&rihanju&oumeiju&qitaju', - play_parse:true, - lazy:'', - limit:6, - 推荐:'.show;ul&&li;a&&title;img&&src;.person&&Text;a&&href', - double:true, // 推荐内容是否双层定位 - 一级:'.show&&li;a&&title;img&&src;.person&&Text;a&&href', - 二级:{"title":"h1&&Text;.info&&ul&&p&&Text","img":"img&&src","desc":".info&&ul&&p:eq(-2)&&Text;.info&&ul&&p:eq(-1)&&Text;.info&&ul&&p:eq(0)&&Text;.info&&ul&&p:eq(1)&&Text;.info&&ul&&p:eq(2)&&Text;.info&&ul&&p:eq(3)&&Text","content":".text&&Text","tabs":".play&&span","lists":".playlist&&ul:eq(#id) li"}, - 搜索:'.show&&li;a&&title;img&&src;drpy&&Text;a&&href', -} \ No newline at end of file diff --git a/TVBox_JS/抓饭体育.js b/TVBox_JS/抓饭体育.js deleted file mode 100644 index ea8785b..0000000 --- a/TVBox_JS/抓饭体育.js +++ /dev/null @@ -1,29 +0,0 @@ -// 道长 drpy仓库 https://gitcode.net/qq_32394351/dr_py -// drpy安卓本地搭建说明 https://gitcode.net/qq_32394351/dr_py/-/blob/master/%E5%AE%89%E5%8D%93%E6%9C%AC%E5%9C%B0%E6%90%AD%E5%BB%BA%E8%AF%B4%E6%98%8E.md -// Pluto Player官方TG https://t.me/PlutoPlayer -// Pluto Player官方TG https://t.me/PlutoPlayerChannel - -var rule = { - title:'抓饭体育', - host:'https://www.zhuafan.tech', - url:'/sports-home/category/fyclass', - class_name:'全部&足球&篮球&羽乒&台球&棒球&户外&搏击&综合&棋盘&电竞&网球&排球&聊天&原声', - class_url:'all&Football&Basketball&Badminton&Billiards&Baseball&Outdoors&Wrestling&Others&Boardgame&Popular&Tennis&Volleyball&Chat&Acoustic', - homeUrl:'/sports-home/category/all',//网站的首页链接,用于分类获取和推荐获取 - detailUrl:'https://m.zhuafan.tech/fyid',//二级详情拼接链接(json格式用) - searchUrl:'/live-search/search/query/data?keyword=**&page=fypage&num=&searchType=all&uid=null&from=pc', - searchable:2, - quickSearch:0, - headers:{ - 'User-Agent':'PC_UA' - }, - limit:6, - timeout:5000, - play_parse:true, - lazy:'', - double:false, - 推荐:'*', - 一级:'json:data;cname;imageUrl;uname;id', - 二级:'*', - 搜索:'json:cObj.cList;*;*;*;_id', -} \ No newline at end of file diff --git a/TVBox_JS/斗鱼直播.js b/TVBox_JS/斗鱼直播.js deleted file mode 100644 index 745a312..0000000 --- a/TVBox_JS/斗鱼直播.js +++ /dev/null @@ -1,29 +0,0 @@ -// 道长 drpy仓库 https://gitcode.net/qq_32394351/dr_py -// drpy安卓本地搭建说明 https://gitcode.net/qq_32394351/dr_py/-/blob/master/%E5%AE%89%E5%8D%93%E6%9C%AC%E5%9C%B0%E6%90%AD%E5%BB%BA%E8%AF%B4%E6%98%8E.md -// Pluto Player官方TG https://t.me/PlutoPlayer -// Pluto Player官方TG https://t.me/PlutoPlayerChannel - -var rule = { - title:'斗鱼直播', - host:'https://www.douyu.com', - homeUrl:'/japi/weblist/apinc/recLabelList?',//网站的首页链接,用于分类获取和推荐获取 - url:'/gapi/rkc/directory/mixList/fyclass/fypage', - class_name:'一起看&网游竞技&单机热游&手游休闲&娱乐天地&科技文化&语音互动&语音直播&正能量&颜值&音乐&舞蹈&二次元&户外&美食&互动交友&趣生活&数码科技&文化&科普&社会人文&汽车&纪录片&斗鱼购物&交友&电台&一起玩&音乐之声&正能量&英雄联盟&热门游戏&DOTA2&穿越火线&CFHD&DNF&炉石传说&CS:GO&逆战&lol云顶之弈&魔兽争霸&魔兽怀旧服&网易游戏&守望先锋&DOTA&魔兽世界&天涯明月刀&三国杀&主机游戏&永劫无间&生死狙击2&迷失ARK&艾尔登法环&逃离塔科夫&V Rising&海上狼人杀&怀旧游戏&王者荣耀&和平精英&火影忍者&LOL手游&金铲铲之战&重返帝国&COD手游&哈利波特:魔法觉醒&CF手游&欢乐斗地主&原神&天刀手游&棋牌娱乐&欢乐麻将&新游中心&QQ飞车&阴阳师&热门手游', - class_url:'2_208&1_1&1_15&1_9&1_2&1_11&1_20&1_18&1_13&2_201&2_175&2_1008&2_174&2_124&2_194&2_1555&2_1097&2_134&2_195&2_204&2_1162&2_136&2_514&2_1203&2_1221&2_1556&2_1575&2_910&2_250&2_1&2_270&2_3&2_33&2_1997&2_40&2_2&2_6&2_46&2_917&2_55&2_1055&2_3567&2_148&2_217&2_5&2_59&2_14&2_19&2_1227&2_1781&2_3528&2_3406&2_1024&2_3684&2_3556&2_26&2_181&2_350&2_196&2_1920&2_2556&2_2915&2_767&2_1192&2_178&2_416&2_1223&2_911&2_113&2_451&2_229&2_331&2_240&2_30', - detailUrl:'/fyid',//二级详情拼接链接(json格式用) - searchUrl:'/japi/search/api/searchShow?kw=**&page=fypage&pageSize=20', - searchable:2, - quickSearch:0, - headers:{ - 'User-Agent':'PC_UA' - }, - timeout:5000, - limit:8, - play_parse:true, - lazy:'', - double:true, - 推荐:'json:data.list;room;*;cover;*;*', - 一级:'json:data.rl;rn;rs16;nn;rid', - 二级:'*', - 搜索:'json:data.relateShow;roomName;roomSrc;nickName;*', -} \ No newline at end of file diff --git a/TVBox_JS/有声小说吧.js b/TVBox_JS/有声小说吧.js deleted file mode 100644 index c8bdabe..0000000 --- a/TVBox_JS/有声小说吧.js +++ /dev/null @@ -1,29 +0,0 @@ -var rule = { - title:'有声小说吧', - 编码:'gb18030', - host:'http://m.ysxs8.vip', - url:'/downlist/fyclass_fypage.html', - searchUrl:'/search.asp?page=fypage&searchword=**&searchtype=-1', - searchable:2, - quickSearch:0, - headers:{ - 'User-Agent':'MOBILE_UA' - }, - timeout:5000, - class_name:'网络玄幻&恐怖悬疑&传统武侠&都市言情&官场刑侦&历史军事&探险盗墓&职场商战&明朝那些事儿&评书下载&相声戏曲&人物传记&广播剧&百家讲坛&外语读物&有声文学&儿童读物&管理营销', - class_url:'r52&r17&r12&r13&r14&r15&r45&r81&r36&r3&r7&r16&r18&r32&r35&r41&r4&r6', - play_parse:true, - lazy:'', - limit:6, - double:true, - 推荐:'.list-ul;a;.list-name&&Text;img&&data-original;.module-slide-author&&Text;a&&href', - 一级:'.book-ol&&li;h4&&Text;img&&data-original;.book-submeta&&Text;a&&href', - 二级:{title:'h2&&Text',img:'.bookimg&&img&&data-original',desc:'.book-rand-a:eq(0)&&Text;.book-rand-a:eq(1)&&Text;.book-rand-a:eq(2)&&Text;.book-rand-a:eq(3)&&Text',content:'.book_intro&&Text', - tabs:'.list-contitle&&h3', - lists:'', - lists:'js:pd=jsp.pd;let url=pd(html,".bookbutton&&a&&href");log(url);html=request(url);let v=pd(html,".booksite&&script&&Html");var document={};var VideoListJson;VideoListJson=eval(v.split("VideoListJson=")[1].split(",urlinfo")[0]);log(typeof VideoListJson);let list1=VideoListJson[0][1];LISTS=[list1];log(LISTS);', - // 有声小说有防盗链,我服了(上面的列表数据正常拿到了,没法播放) - lists:'#playlist:eq(#id)&&ul&&li', - }, - 搜索:'*', -} diff --git a/TVBox_JS/朱古力.js b/TVBox_JS/朱古力.js deleted file mode 100644 index a9a1ffb..0000000 --- a/TVBox_JS/朱古力.js +++ /dev/null @@ -1,17 +0,0 @@ -var rule = { - title:'朱古力', - host:'https://pigav.com', - url:'/fyclass/page/fypage', - headers:{ - 'User-Agent':'MOBILE_UA' - }, - timeout:5000, - class_name:'最新&熱門&每日&精選',//静态分类名称拼接 - class_url:'最新av線上看&熱門av線上看&每日av線上看線上看&精選av線上看',//静态分类标识拼接 - limit:5, - play_parse:true, - lazy:'', - 一级:'.l-post div&&a;a&&title;span&&data-bgsrc;.absolute.bottom-1&&Text;a&&href', - 二级:'*', -} - diff --git a/TVBox_JS/来看点播.js b/TVBox_JS/来看点播.js deleted file mode 100644 index 8e85fc8..0000000 --- a/TVBox_JS/来看点播.js +++ /dev/null @@ -1,20 +0,0 @@ -var rule={ -title:'来看点播', -host:'https://www.lkvod.cc', -url:'/show/fyclass--hits------fypage---.html', -searchUrl:'/search/**----------fypage---.html', -searchable:2, -quickSearch:0, -filterable:0, -headers:{'User-Agent':'MOBILE_UA', }, -class_name:'电影&电视剧&综艺&动漫', -class_url:'1&2&3&4', -play_parse:true, -lazy:'', -limit:6, -推荐:'.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-caption.right&&Text;a&&href', -double:true, // 推荐内容是否双层定位 -一级:'.module-items .module-item;a&&title;img&&data-src;.module-item-caption.right&&Text;a&&href', -二级:{"title":"h1&&Text;.video-info-aux&&div&&a:eq(0)&&Text","img":".module-item-pic&&img&&data-src","desc":";.video-info-aux&&a:eq(1)&&Text;.video-info-aux&&a:eq(2)&&Text;.video-info-items:eq(1) a&&Text;.video-info-items:eq(0) a&&Text","content":".sqjj_a&&Text","tabs":".module-tab-content&& span","lists":".module-player-list:eq(#id)&&.scroll-content&&a"}, -搜索:'.module-items .module-item;a&&title;img&&data-src;.module-item-caption.right&&Text;a&&href', -} diff --git a/TVBox_JS/模板.js b/TVBox_JS/模板.js deleted file mode 100644 index 747bee0..0000000 --- a/TVBox_JS/模板.js +++ /dev/null @@ -1,158 +0,0 @@ -if (typeof Object.assign != 'function') { - Object.assign = function () { - var target = arguments[0]; - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - return target; -}; -} - -var mubanDict = { // 模板字典 - 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(2):lt(8);a&&Text;a&&href;/(\\d+).html', - play_parse:true, - lazy:'', - limit:6, - 推荐:'.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href', - double:true, // 推荐内容是否双层定位 - 一级:'body a.module-poster-item.module-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href', - 二级:{"title":"h1&&Text;.module-info-tag&&Text","img":".lazyload&&data-original","desc":".module-info-item:eq(1)&&Text;.module-info-item:eq(2)&&Text;.module-info-item:eq(3)&&Text","content":".module-info-introduction&&Text","tabs":".module-tab-item","lists":".module-play-list:eq(#id) a"}, - 搜索:'body .module-item;.module-card-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href;.module-info-item-content&&Text', -}, -首图:{ - 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(5);a&&Text;a&&href;/(\\d+).html', - play_parse:true, - lazy:'', - limit:6, - 推荐:'ul.myui-vodlist.clearfix;li;a&&title;a&&data-original;.pic-text&&Text;a&&href', - double:true, // 推荐内容是否双层定位 - 一级:'.myui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href', - 二级:{"title":".myui-content__detail .title&&Text;.myui-content__detail p:eq(-2)&&Text","img":".myui-content__thumb .lazyload&&data-original","desc":".myui-content__detail p:eq(0)&&Text;.myui-content__detail p:eq(1)&&Text;.myui-content__detail p:eq(2)&&Text","content":".content&&Text","tabs":".nav-tabs:eq(0) li","lists":".myui-content__list:eq(#id) li"}, - 搜索:'#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&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;/(\\d+).html', - class_parse:'.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;.*/(.*?).html', - play_parse:true, - lazy:'', - limit:6, - 推荐:'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href', - double:true, // 推荐内容是否双层定位 - 一级:'.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)&&Text","img":".stui-content__thumb .lazyload&&data-original","desc":".stui-content__detail p:eq(0)&&Text;.stui-content__detail p:eq(1)&&Text;.stui-content__detail p:eq(2)&&Text","content":".detail&&Text","tabs":".stui-vodlist__head h3","lists":".stui-content__playlist:eq(#id) li"}, - 搜索:'ul.stui-vodlist__media:eq(0) li,ul.stui-vodlist:eq(0) li,#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text', - 搜索1:'ul.stui-vodlist&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text', - 搜索2:'ul.stui-vodlist__media&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text', -}, -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.fed-part-eone:gt(0):lt(5);a&&Text;a&&href;.*/(.*?).html', - class_parse:'.fed-pops-navbar&&ul.fed-part-rows&&a;a&&Text;a&&href;.*/(.*?).html', - play_parse:true, - lazy:'', - limit:6, - 推荐:'ul.fed-list-info.fed-part-rows;li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href', - double:true, // 推荐内容是否双层定位 - 一级:'.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:'', - 推荐:'.hl-vod-list;li;a&&title;a&&data-original;.remarks&&Text;a&&href', - double:true, - 一级:'.hl-vod-list&&.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href', - 二级:{"title":".hl-infos-title&&Text;.hl-text-conch&&Text","img":".hl-lazy&&data-original","desc":".hl-infos-content&&.hl-text-conch&&Text","content":".hl-content-text&&Text","tabs":".hl-tabs&&a","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:'', - 推荐:'.list-a.size;li;a&&title;.lazy&&data-original;.bt&&Text;a&&href', - double:true, - 一级:'.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,//是否启用分类筛选, -}, - - -}; -var muban = JSON.parse(JSON.stringify(mubanDict)); -export default muban; \ No newline at end of file diff --git a/TVBox_JS/海盗听书.js b/TVBox_JS/海盗听书.js deleted file mode 100644 index 9fc7e36..0000000 --- a/TVBox_JS/海盗听书.js +++ /dev/null @@ -1,45 +0,0 @@ -// 道长 drpy仓库 https://gitcode.net/qq_32394351/dr_py -// 道长 drpy安卓本地搭建说明 https://gitcode.net/qq_32394351/dr_py/-/blob/master/%E5%AE%89%E5%8D%93%E6%9C%AC%E5%9C%B0%E6%90%AD%E5%BB%BA%E8%AF%B4%E6%98%8E.md -// 道长 drpy写源 模板规则说明 https://gitcode.net/supertlo/dr_py#%E6%A8%A1%E6%9D%BF%E8%A7%84%E5%88%99%E8%AF%B4%E6%98%8E -// 道长 drpy写源 套模模版 https://gitcode.net/qq_32394351/dr_py/-/raw/master/js/%E6%A8%A1%E6%9D%BF.js -// 道长 drpy写源 影片教程 http://101.34.67.237:5244/%E6%95%99%E8%82%B2/drpy -// 道长 drpy写源 影片教程(m3u8切片) https://freedrpy.run.goorm.io/txt/jc/playlist.m3u8 -// 海阔下载 https://haikuo.lanzoui.com/u/GoldRiver -// Pluto Player官方TG https://t.me/PlutoPlayer -// Pluto Player官方TG https://t.me/PlutoPlayerChannel - -// Pluto: 嗅探播放 完全正常 -// 俊老的殼 或 PythonBox: 請在rules新增底下設定,确保能嗅探较多的源 -// "rules":[ -// 海盗听书(drpy) -// {"host":"www.tingxiaoshuo.cc","rule":["baidupcs.com","/file/"]}, -// {"host":"www.tingxiaoshuo.cc","rule":["365ting.com"]}, -// {"host":"www.tingxiaoshuo.cc","rule":["tingshijie.com"]}, -// {"host":"www.tingxiaoshuo.cc","rule":["xmcdn.com"]}, -// {"host":"www.tingxiaoshuo.cc","rule":["vb.wting.info","token="]} -// ], - -var rule = { - title:'海盗听书', - host:'https://www.tingxiaoshuo.cc', - homeUrl:'/category/6/3.html', - url:'/category/6/fyclass.html?page=fypage', - searchUrl:'/pc/index/search.html?keyword=**&page=fypage', - searchable:2, - quickSearch:0, - headers:{ - 'User-Agent':'PC_UA' - }, - timeout:5000, - class_name:'新书&更新&人气', - class_url:'1&2&3', - play_parse:true, - play_json:0, - lazy:"let bookId=input.match(/play\\/(.*?)\\//)[1];let chapterId=input.match(/.*\\/(.*?)\\.html/)[1];let url='https://app.tingxiaoshuo.cc/listen/apptingchina/AppGetChapterUrl2022?uid=09e0bbefd378830f9615a98f239aceab&chapterId='+chapterId+'&bookId='+bookId;let res=request(url,{headers:{'User-Agent':PC_UA}});res=JSON.parse(res);input=res.src;log(input);", - limit:6, - double:true, - 推荐:'*', - 一级:'.list-works li;a&&title;img&&src;.list-book-cs span:eq(0)&&Text;a&&href', - 二级:{title:'h1&&Text;.book-info dd:eq(1)&&Text',img:'.book-img img&&src',desc:';;.book-info dd:gt(3):lt(6)&&Text;.book-info dd:eq(3)&&Text;.book-info dd:eq(2)&&Text',content:'.div-b&&Text',tabs:'.playlist-top&&h2',lists:'#playlist:eq(#id) li'}, - 搜索:'*', -} diff --git a/TVBox_JS/牛马TV.js b/TVBox_JS/牛马TV.js deleted file mode 100644 index 2af463e..0000000 --- a/TVBox_JS/牛马TV.js +++ /dev/null @@ -1,9 +0,0 @@ -muban.首图2.二级.tabs = '.stui-pannel__head h3'; -muban.首图2.二级.content = '.stui-content__desc&&Text'; -var rule = Object.assign(muban.首图2,{ - title:'牛马TV', - host:'https://www.niumatv.cc', - url:'/type/fyclass-fypage.html', - searchUrl:'/vodsearch**/page/fypage.html', - class_parse:'.stui-header__menu&&li;a&&Text;a&&href;.*/(.*?).html', -}); \ No newline at end of file diff --git a/TVBox_JS/特狗影视.js b/TVBox_JS/特狗影视.js deleted file mode 100644 index b9b6828..0000000 --- a/TVBox_JS/特狗影视.js +++ /dev/null @@ -1,10 +0,0 @@ -var rule = Object.assign(muban.首图,{ -title:'特狗', -host:'https://www.tegouys.com', -url:'/vodshow/id/fyclass/page/fypage.html', -searchUrl:'/search/-------------.html?wd=*&submit=', -//class_name:'电视剧&电影&综艺&动漫',//静态分类名称拼接 -//class_url:'2&1&3&4',//静态分类标识拼接 -class_parse:'.myui-header__menu li.hidden-sm:gt(0):lt(5);a&&Text;a&&href;/(\\d+).html', - -}); diff --git a/TVBox_JS/独播库.js b/TVBox_JS/独播库.js deleted file mode 100644 index ee3d548..0000000 --- a/TVBox_JS/独播库.js +++ /dev/null @@ -1,14 +0,0 @@ -//已知问题:除了pluto player无法正常嗅探,其他壳都可以正常嗅探播放(js mode 0 or 1 都OK) -//其他壳播放遇到嗅探的问题时,试着把"解析"改回"🌐Ⓤ",然后就可以快乐的看片了! -//{"name":"🌐Ⓤ","type":0,"url":"","header":{"User-Agent":"Mozilla/5.0"}}, - -var rule = Object.assign(muban.首图,{ - title:'独播库', - host:'https://u.duboku.io', - class_parse:'.nav-list li;a&&Text;a&&href;.*/(.*?).html', - lazy:'js:let html=fetch(input, fetch_params);var player=JSON.parse(html.match(/var player_(.*?)=(.*?)0?json.data.list[0].url:json.data.series[0].url;if(!/^http/.test(ourl)){ourl=host+ourl}fetch_params.headers["User-Agent"]=MOBILE_UA;html=request(ourl);if(html.includes("window.location =")){print("开始获取ourl");ourl=pdfh(html,"meta[http-equiv=refresh]&&content").split("url=")[1];print("获取到ourl:"+ourl);html=request(ourl)}try{let details=pdfh(html,".m-details&&Html").replace(/h1>/,"h6>").replace(/div/g,"br");let actor="",director="",time="";if(/播出时间/.test(details)){actor=pdfh(html,"p:eq(5)&&Text").substr(0,25);director=pdfh(html,"p:eq(4)&&Text");time=pdfh(html,"p:eq(3)&&Text")}else{actor=pdfh(html,"p:eq(4)&&Text").substr(0,25);director=pdfh(html,"p:eq(3)&&Text");time="已完结"}let _img=pd(html,".video-img&&img&&src");let JJ=pdfh(html,".desc&&Text").split("简介:")[1];let _desc=time;VOD.vod_name=pdfh(html,".vt-txt&&Text");VOD.type_name=pdfh(html,"p:eq(0)&&Text").substr(0,6);VOD.vod_area=pdfh(html,"p:eq(1)&&Text");VOD.vod_actor=actor;VOD.vod_director=director;VOD.vod_remarks=_desc;VOD.vod_pic=_img;VOD.vod_content=JJ}catch(e){log("获取影片信息发生错误:"+e.message)}function getRjpg(imgUrl,xs){xs=xs||3;let picSize=/jpg_/.test(imgUrl)?imgUrl.split("jpg_")[1].split(".")[0]:false;let rjpg=false;if(picSize){let a=parseInt(picSize.split("x")[0])*xs;let b=parseInt(picSize.split("x")[1])*xs;rjpg=a+"x"+b+".jpg"}let img=/jpg_/.test(imgUrl)&&rjpg?imgUrl.replace(imgUrl.split("jpg_")[1],rjpg):imgUrl;return img}if(json.data.total===1&&json.data.list.length===1){let data=json.data.list[0];let url="https://www.mgtv.com"+data.url;d.push({title:data.t4,desc:data.t2,pic_url:getRjpg(data.img),url:url})}else if(json.data.list.length>1){for(let i=1;i<=json.data.total_page;i++){if(i>1){json=JSON.parse(fetch(input.replace("page=1","page="+i),{}))}json.data.list.forEach(function(data){let url="https://www.mgtv.com"+data.url;if(data.isIntact=="1"){d.push({title:data.t4,desc:data.t2,pic_url:getRjpg(data.img),url:url})}})}}else{print(input+"暂无片源")}VOD.vod_play_from="mgtv";VOD.vod_play_url=d.map(function(it){return it.title+"$"+it.url}).join("#");setResult(d);', - 搜索:'', - 搜索:'js:fetch_params.headers.Referer="https://www.mgtv.com";fetch_params.headers["User-Agent"]=UA;let d=[];let html=request(input);let json=JSON.parse(html);json.data.contents.forEach(function(data){if(data.data.sourceList||data.data.yearList){let list=data.data.sourceList?data.data.sourceList:data.data.yearList[0].sourceList;let desc="";list.forEach(function(it){desc+=it.name+"\\t"});if(list[0].source==="imgo"){let img=data.data.pic?data.data.pic:data.data.yearList[0].pic;d.push({title:data.data.title?data.data.title:data.data.yearList[0].title,img:img,content:data.data.story?data.data.story:data.data.yearList[0].story,desc:data.data.playTime,url:list[0].vid})}}});setResult(d);', -} \ No newline at end of file diff --git a/TVBox_JS/皮皮泡.js b/TVBox_JS/皮皮泡.js deleted file mode 100644 index f393ea5..0000000 --- a/TVBox_JS/皮皮泡.js +++ /dev/null @@ -1,11 +0,0 @@ -muban.首图2.二级.tabs = '.stui-pannel__head.bottom-line.active.clearfix h3'; -var rule = Object.assign(muban.首图2,{ -title:'皮皮泡', -host:'https://www.pipipao.com', -url:'/vodshow/id/fyclass/page/fypage.html', -searchUrl:'/vodsearch**/page/fypage.html', -class_name:'电视剧&电影&综艺&动漫&纪录片',//静态分类名称拼接 -class_url:'dianshiju&dianying&zongyi&dongman&jilupian',//静态分类标识拼接 -class_parse:' ', -搜索:'ul.stui-vodlist__media&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text', -}); \ No newline at end of file diff --git a/TVBox_JS/看了么.js b/TVBox_JS/看了么.js deleted file mode 100644 index eefa2a6..0000000 --- a/TVBox_JS/看了么.js +++ /dev/null @@ -1,26 +0,0 @@ -var rule = { - title:'看了么', - host:'https://www.ksksl.com', - // homeUrl:'/', - url:'/show/fyclass/page/fypage.html', - searchUrl:'/ch.html?wd=**', - searchable:1, - quickSearch:1, - headers:{ - 'User-Agent':'UC_UA' - }, - timeout:5000, - class_name:'电影&电视剧&动漫&综艺&纪录片',//静态分类名称拼接 - class_url:'dy&tv&dm&zy&jl',//静态分类标识拼接 - play_parse:true, - lazy:'', - limit:5, - 推荐:'.dx-top;li;a&&title;a&&data-original;.vod_remarks&&Text;a&&href', - double:true, // 推荐内容是否双层定位 - - 一级:'ul.dx-list li;a&&title;a&&data-original;.vod_remarks&&Text;a&&href', - - 二级:{"title":".obj-info h1&&Text;","img":"img:eq(2)&&src","desc":".video-info.d-none.d-sm-block&&Text","content":".vod_content&&Text","tabs":".play-title h2","lists":".play_li.fn-clear:eq(#id) a"}, - - 搜索:'.movie-list-body;.movie-list-item;.movie-title&&Text;.movie-post-lazyload&&data-original;.vod_remarks&&Text;a&&href', -} \ No newline at end of file diff --git a/TVBox_JS/看视界.js b/TVBox_JS/看视界.js deleted file mode 100644 index e77b120..0000000 --- a/TVBox_JS/看视界.js +++ /dev/null @@ -1,8 +0,0 @@ -var rule = Object.assign(muban.mxpro,{ -title:'看视界', -host:'https://www.1080kan.cc', -url:'/show/fyclass--------fypage---.html', -searchUrl:'/search/**----------fypage---.html', -searchable:2, -class_parse:'.navbar-items li:gt(1):lt(6);a&&Text;a&&href;.*/(.*?).html', -}); \ No newline at end of file diff --git a/TVBox_JS/真不卡.js b/TVBox_JS/真不卡.js deleted file mode 100644 index b013d09..0000000 --- a/TVBox_JS/真不卡.js +++ /dev/null @@ -1,8 +0,0 @@ -muban.首图2.二级.tabs = '.stui-pannel__head.bottom-line.active.clearfix h3'; -var rule = Object.assign(muban.首图2,{ -title:'真不卡', -host:'https://www.zbkk.net', -url:'/vodshow/fyclass--------fypage---.html', -class_parse:'.stui-header__menu .dropdown li:gt(0):lt(5);a&&Text;a&&href;.*/(.*?).html', -// searchUrl:'/vodsearch/**----------fypage---.html', -}); \ No newline at end of file diff --git a/TVBox_JS/秋霞.js b/TVBox_JS/秋霞.js deleted file mode 100644 index 2acd96c..0000000 --- a/TVBox_JS/秋霞.js +++ /dev/null @@ -1,24 +0,0 @@ -var rule = { -title:'秋霞', -host:'https://www.7xiady.cc', -url:'/index.php/type/fyclass-fypage/', -//class_parse:'.stui-header__menu&&ul&&li;a&&Text;a&&href;/type/(.*?)/', -searchUrl:'/search/**----------fypage---.html', - searchable:2,//是否启用全局搜索, - quickSearch:0,//是否启用快速搜索, - filterable:0,//是否启用分类筛选, - headers:{ - 'User-Agent':'UC_UA', - // "Cookie": "" - }, - class_name:'电影&连续剧&综艺&动漫', - class_url:'dianying&lianxuju&zongyi&dongman', - // class_parse:'.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;.*/(.*?).html', - play_parse:true, - lazy:'', - limit:6, - 推荐:'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href', - double:true, // 推荐内容是否双层定位 - 一级:'.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)&&Text","img":".stui-content__thumb .lazyload&&data-original","desc":".stui-content__detail p:eq(0)&&Text;.stui-content__detail p:eq(1)&&Text;.stui-content__detail p:eq(2)&&Text","content":".stui-content__desc&&Text","tabs":".stui-pannel__head.bottom-line.active.clearfix h3","lists":".stui-content__playlist:eq(#id) li"}, - 搜索:'ul.stui-vodlist&&li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href'} \ No newline at end of file diff --git a/TVBox_JS/胖虎影视.js b/TVBox_JS/胖虎影视.js deleted file mode 100644 index 7f65b10..0000000 --- a/TVBox_JS/胖虎影视.js +++ /dev/null @@ -1,7 +0,0 @@ -var rule = Object.assign(muban.mxpro,{ -title:'胖虎影视.', -host:'http://panghuys.com', -url:'/vodshow/fyclass/page/fypage.html', -searchUrl:'/search-**----------fypage---/', -class_parse:'.navbar-items li:gt(1):lt(7);a&&Text;a&&href;/(\\d+).html', -}); diff --git a/TVBox_JS/腾云驾雾.js b/TVBox_JS/腾云驾雾.js deleted file mode 100644 index 088d74d..0000000 --- a/TVBox_JS/腾云驾雾.js +++ /dev/null @@ -1,34 +0,0 @@ -var rule = { - title:'腾云驾雾', - host:'https://v.%71%71.com', - // homeUrl:'/channel/choice?listpage=1&channel=choice&sort=18&_all=1', - homeUrl:'/x/bu/pagesheet/list?_all=1&append=1&channel=choice&listpage=1&offset=0&pagesize=21&iarea=-1&sort=18', - detailUrl:'https://node.video.%71%71.com/x/api/float_vinfo2?cid=fyid', - searchUrl:'https://node.video.%71%71.com/x/api/msearch?keyWord=**', - searchable:2, - filterable:1, - multi:1, - // url:'/channel/fyclass?listpage=fypage&channel=fyclass&sort=18&_all=1', - url:'/x/bu/pagesheet/list?_all=1&append=1&channel=fyclass&listpage=1&offset=((fypage-1)*21)&pagesize=21&iarea=-1', - filter_url:'sort={{fl.sort or 18}}&year={{fl.year}}&pay={{fl.pay}}', - filter:{'choice': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}]}], 'tv': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}]}], 'movie': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}]}], 'variety': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}]}], 'cartoon': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}]}], 'child': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}]}], 'doco': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}]}]}, - headers:{ - 'User-Agent':'PC_UA' - }, - timeout:5000, - // class_parse:'.site_channel a;a&&Text;a&&href;channel/(.*)', - cate_exclude:'会员|游戏|全部', - class_name:'精选&电视剧&电影&综艺&动漫&少儿&纪录片', - class_url:'choice&tv&movie&variety&cartoon&child&doco', - limit:20, - // play_parse:true, - // 手动调用解析请求json的url,此lazy不方便 - lazy:'js:input="https://cache.json.icu/home/api?type=ys&uid=292796&key=fnoryABDEFJNPQV269&url="+input.split("?")[0];log(input);let html=JSON.parse(request(input));log(html);input=html.url||input', - 推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float', - 一级:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float', - // 二级:{is_json:1,"title":"data.title;data.moviecategory[0]+data.moviecategory[1]","img":"data.cdncover","desc":"data.area[0];data.director[0]","content":"data.description","tabs":"data.playlink_sites;data.playlinksdetail.#idv.quality","lists":"data.playlinksdetail.#idv.default_url"}, - // 二级:{is_json:1,"title":"data.title;data.moviecategory[0]+data.moviecategory[1]","img":"data.cdncover","desc":"data.area[0];data.director[0]","content":"data.description","tabs":"data.playlink_sites","lists":"data.playlinksdetail.#idv.default_url"}, - 二级:'', - 二级:'js:VOD={};let d=[];let video_list=[];let video_lists=[];let list=[];let QZOutputJson;let html=fetch(input,fetch_params);let sourceId=/get_playsource/.test(input)?input.match(/id=(\\d*?)&/)[1]:input.split("cid=")[1];let cid=sourceId;let detailUrl="https://v.%71%71.com/detail/m/"+cid+".html";log("详情页:"+detailUrl);var pdfh=jsp.pdfh;var pd=jsp.pd;try{let json=JSON.parse(html);VOD={vod_id:json.c.vid,vod_url:input,vod_name:json.c.title,type_name:json.typ.join(","),vod_actor:json.nam.join(","),vod_year:json.c.year,vod_content:json.c.description,vod_remarks:json.rec,vod_pic:urljoin2(input,json.c.pic)}}catch(e){log("解析片名海报等基础信息发生错误:"+e.message)}if(/get_playsource/.test(input)){eval(html);let indexList=QZOutputJson.PlaylistItem.indexList;indexList.forEach(function(it){let dataUrl="https://s.video.qq.com/get_playsource?id="+sourceId+"&plat=2&type=4&data_type=3&range="+it+"&video_type=10&plname=qq&otype=json";eval(fetch(dataUrl,fetch_params));let vdata=QZOutputJson.PlaylistItem.videoPlayList;vdata.forEach(function(item){d.push({title:item.title,pic_url:item.pic,desc:item.episode_number+"\\t\\t\\t播放量:"+item.thirdLine,url:item.playUrl})});video_lists=video_lists.concat(vdata)})}else{let json=JSON.parse(html);video_lists=json.c.video_ids;let url="https://v.qq.com/x/cover/"+sourceId+".html";if(json.c.type===10){let dataUrl="https://s.video.qq.com/get_playsource?id="+json.c.column_id+"&plat=2&type=2&data_type=3&video_type=8&plname=qq&otype=json";let o_html=fetch(dataUrl,fetch_params);eval(o_html);video_lists=[];let indexList=QZOutputJson.PlaylistItem.indexList;indexList.forEach(function(it){let dataUrl="https://s.video.qq.com/get_playsource?id="+json.c.column_id+"&plat=2&type=4&data_type=3&range="+it+"&video_type=10&plname=qq&otype=json";eval(fetch(dataUrl,fetch_params));let vdata=QZOutputJson.PlaylistItem.videoPlayList;vdata.forEach(function(item){d.push({title:item.title,pic_url:item.pic,desc:item.episode_number+"\\t\\t\\t播放量:"+item.thirdLine,url:item.playUrl})});video_lists=video_lists.concat(vdata)})}else if(video_lists.length===1){d.push({title:"在线播放",url:url})}else if(video_lists.length>1){for(let i=0;i1){let tmp=item.slice(1).map(function(its){return its.index+"$"+play_url+base64Encode(adhead(its.url))});vod_lists.push(tmp.join("#"))}if(shows){let arr=[];let tmp=[];let zy=shows.item_list[idex];zy.date.forEach(function(date){let day=date.day;for(let j=0;j=10?day[j][0]:"0"+day[j][0];let Tdate=date.year+date.month+dayy;arr.push(Tdate)}});for(let k=0;k0?img[0]:""}}catch(e){print("发生了错误:"+e.message)}', - // 二级:'js:var vod={vod_id:input};let html=request(input);function adhead(url){let hd="https://v.sogou.com";if(!url.startsWith(hd)){url=hd+url}return url}try{let json=JSON.parse(html.match(/INITIAL_STATE.*?({.*});/)[1]).detail.itemData;let key=json.dockey;let name=json.name;let zone=json.zone;let score=json.score?json.score:"暂无";let style=json.style;let emcee=json.emcee?"主持:"+json.emcee:json.name;let director=json.director?"导演:"+json.director:name;director=director.replace(/;/g,"\\t");let starring=json.starring?"演员:"+json.starring:"声优:"+json.shengyou;starring=starring.replace(/.*undefined/,"").replace(/;/g,"\\t");let update=json.update_wordstr?json.update_wordstr:"";let tv_station=json.tv_station?json.tv_station:zone;let introduction=json.introduction;let shengyou=json.shengyou;let shows=json.play_from_open_index;let plays=json.play.item_list;if(shows){vod.vod_name=name;vod.vod_area=emcee+","+tv_station;vod.vod_director=director;vod.vod_actor=starring;vod.vod_pic=jsp.pd(html,"#thumb_img&&img&&src");vod.vod_remarks=style+" 评分:"+score+","+update;vod.vod_content=introduction}else{vod.vod_name=name;vod.vod_director=director;vod.vod_actor=starring;vod.vod_pic=jsp.pd(html,"#thumb_img&&img&&src");vod.vod_content=introduction}let tp="&type=json";try{let tabs=[];let lists=[];plays.forEach(function(it){lists.push(it.info);let tbn=it.sitename[0]||it.site.replace(".com","");tbn=tbn.split("").join(" ");tabs.push(tbn)});vod.vod_play_from=tabs.join("$$$");vod_lists=[];play_url=play_url.replace("&play_url=","&type=json&play_url=");lists.forEach(function(item,idex){if(item||shows){if(item&&Array.isArray(item)&&item.length>1){let tmp=item.slice(1).map(function(its){return its.index+"$"+play_url+base64Encode(adhead(its.url))});vod_lists.push(tmp.join("#"))}if(shows){let arr=[];let tmp=[];let zy=shows.item_list[idex];zy.date.forEach(function(date){let day=date.day;for(let j=0;j=10?day[j][0]:"0"+day[j][0];let Tdate=date.year+date.month+dayy;arr.push(Tdate)}});for(let k=0;k0?img[0]:""}}catch(e){}', - 搜索:'', - 搜索:'js:let d=[];let html=request(input);let jsonA=JSON.parse(html.match(/INITIAL_STATE.*?({.*});/)[1]);print(jsonA);jsonA=jsonA.result.longVideo.results;jsonA.forEach(function(it){let name=it.name;let introduction=it.introduction;let pic=it.v_picurl;let url=it.tiny_url;let zone=it.zone;let score=it.score||"暂无";let style=it.style;if(it.play.item_list){let r={};r.title=name.replace(//,"").replace(//,"");r.url="https://v.sogou.com"+url;r.desc=it.list_category.join(",");r.content=introduction;r.pic_url=pic;d.push(r)}});setResult(d);', -} \ No newline at end of file diff --git a/TVBox_JS/蓝光影院.js b/TVBox_JS/蓝光影院.js deleted file mode 100644 index 43dff7d..0000000 --- a/TVBox_JS/蓝光影院.js +++ /dev/null @@ -1,7 +0,0 @@ -var rule = Object.assign(muban.mxpro,{ -title:'蓝光影院', -host:'https://lgyy.cc', -url:'/vodshow/fyclass--------fypage---.html', -searchUrl:'/vodsearch/**-------------.html', -class_parse:'.navbar-items li:gt(1):lt(6);a&&Text;a&&href;.*/(.*?).html', -}); \ No newline at end of file diff --git a/TVBox_JS/蓝莓影视.js b/TVBox_JS/蓝莓影视.js deleted file mode 100644 index ec9c6c2..0000000 --- a/TVBox_JS/蓝莓影视.js +++ /dev/null @@ -1,12 +0,0 @@ -var rule = Object.assign(muban.mxpro,{ -title:'蓝莓影视', -host:'https://lanmeiguojiang.com', -// url:'/show/fyclass--------fypage---.html', -// url:'/show/fyclass-{{fl.地区}}-{{fl.排序}}-{{fl.剧情}}-{{fl.语言}}-{{fl.字母}}---fypage--{{fl.年份}}.html', -url:'/show/fyclass-fyfilter', -filter_url:'{{fl.地区}}-{{fl.排序}}-{{fl.剧情}}-{{fl.语言}}-{{fl.字母}}---fypage---{{fl.年份}}.html', -filter:{'20': [{'key': '剧情', 'name': '剧情', 'value': [{'n': '全部', 'v': ''}, {'n': '喜剧', 'v': '%E5%96%9C%E5%89%A7'}, {'n': '爱情', 'v': '%E7%88%B1%E6%83%85'}, {'n': '恐怖', 'v': '%E6%81%90%E6%80%96'}, {'n': '动作', 'v': '%E5%8A%A8%E4%BD%9C'}, {'n': '科幻', 'v': '%E7%A7%91%E5%B9%BB'}, {'n': '剧情', 'v': '%E5%89%A7%E6%83%85'}, {'n': '战争', 'v': '%E6%88%98%E4%BA%89'}, {'n': '警匪', 'v': '%E8%AD%A6%E5%8C%AA'}, {'n': '犯罪', 'v': '%E7%8A%AF%E7%BD%AA'}, {'n': '动画', 'v': '%E5%8A%A8%E7%94%BB'}, {'n': '奇幻', 'v': '%E5%A5%87%E5%B9%BB'}, {'n': '武侠', 'v': '%E6%AD%A6%E4%BE%A0'}, {'n': '冒险', 'v': '%E5%86%92%E9%99%A9'}, {'n': '枪战', 'v': '%E6%9E%AA%E6%88%98'}, {'n': '恐怖', 'v': '%E6%81%90%E6%80%96'}, {'n': '悬疑', 'v': '%E6%82%AC%E7%96%91'}, {'n': '惊悚', 'v': '%E6%83%8A%E6%82%9A'}, {'n': '经典', 'v': '%E7%BB%8F%E5%85%B8'}, {'n': '青春', 'v': '%E9%9D%92%E6%98%A5'}, {'n': '文艺', 'v': '%E6%96%87%E8%89%BA'}, {'n': '微电影', 'v': '%E5%BE%AE%E7%94%B5%E5%BD%B1'}, {'n': '古装', 'v': '%E5%8F%A4%E8%A3%85'}, {'n': '历史', 'v': '%E5%8E%86%E5%8F%B2'}, {'n': '运动', 'v': '%E8%BF%90%E5%8A%A8'}, {'n': '农村', 'v': '%E5%86%9C%E6%9D%91'}, {'n': '儿童', 'v': '%E5%84%BF%E7%AB%A5'}, {'n': '网络电影', 'v': '%E7%BD%91%E7%BB%9C%E7%94%B5%E5%BD%B1'}]}, {'key': '地区', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '大陆', 'v': '%E5%A4%A7%E9%99%86'}, {'n': '香港', 'v': '%E9%A6%99%E6%B8%AF'}, {'n': '台湾', 'v': '%E5%8F%B0%E6%B9%BE'}, {'n': '美国', 'v': '%E7%BE%8E%E5%9B%BD'}, {'n': '法国', 'v': '%E6%B3%95%E5%9B%BD'}, {'n': '英国', 'v': '%E8%8B%B1%E5%9B%BD'}, {'n': '日本', 'v': '%E6%97%A5%E6%9C%AC'}, {'n': '韩国', 'v': '%E9%9F%A9%E5%9B%BD'}, {'n': '德国', 'v': '%E5%BE%B7%E5%9B%BD'}, {'n': '泰国', 'v': '%E6%B3%B0%E5%9B%BD'}, {'n': '印度', 'v': '%E5%8D%B0%E5%BA%A6'}, {'n': '意大利', 'v': '%E6%84%8F%E5%A4%A7%E5%88%A9'}, {'n': '西班牙', 'v': '%E8%A5%BF%E7%8F%AD%E7%89%99'}, {'n': '加拿大', 'v': '%E5%8A%A0%E6%8B%BF%E5%A4%A7'}, {'n': '其他', 'v': '%E5%85%B6%E4%BB%96'}]}, {'key': '语言', 'name': '语言', 'value': [{'n': '全部', 'v': ''}, {'n': '国语', 'v': '%E5%9B%BD%E8%AF%AD'}, {'n': '英语', 'v': '%E8%8B%B1%E8%AF%AD'}, {'n': '粤语', 'v': '%E7%B2%A4%E8%AF%AD'}, {'n': '闽南语', 'v': '%E9%97%BD%E5%8D%97%E8%AF%AD'}, {'n': '韩语', 'v': '%E9%9F%A9%E8%AF%AD'}, {'n': '日语', 'v': '%E6%97%A5%E8%AF%AD'}, {'n': '法语', 'v': '%E6%B3%95%E8%AF%AD'}, {'n': '德语', 'v': '%E5%BE%B7%E8%AF%AD'}, {'n': '其它', 'v': '%E5%85%B6%E5%AE%83'}]}, {'key': '年份', 'name': '年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2014', 'v': '2014'}, {'n': '2013', 'v': '2013'}, {'n': '2012', 'v': '2012'}, {'n': '2011', 'v': '2011'}, {'n': '2010', 'v': '2010'}]}, {'key': '字母', 'name': '字母', 'value': [{'n': '字母', 'v': ''}, {'n': 'A', 'v': 'A'}, {'n': 'B', 'v': 'B'}, {'n': 'C', 'v': 'C'}, {'n': 'D', 'v': 'D'}, {'n': 'E', 'v': 'E'}, {'n': 'F', 'v': 'F'}, {'n': 'G', 'v': 'G'}, {'n': 'H', 'v': 'H'}, {'n': 'I', 'v': 'I'}, {'n': 'J', 'v': 'J'}, {'n': 'K', 'v': 'K'}, {'n': 'L', 'v': 'L'}, {'n': 'M', 'v': 'M'}, {'n': 'N', 'v': 'N'}, {'n': 'O', 'v': 'O'}, {'n': 'P', 'v': 'P'}, {'n': 'Q', 'v': 'Q'}, {'n': 'R', 'v': 'R'}, {'n': 'S', 'v': 'S'}, {'n': 'T', 'v': 'T'}, {'n': 'U', 'v': 'U'}, {'n': 'V', 'v': 'V'}, {'n': 'W', 'v': 'W'}, {'n': 'X', 'v': 'X'}, {'n': 'Y', 'v': 'Y'}, {'n': 'Z', 'v': 'Z'}, {'n': '0-9', 'v': '09'}]}, {'key': '排序', 'name': '排序', 'value': [{'n': '时间排序', 'v': 'time'}, {'n': '人气排序', 'v': 'hits'}, {'n': '评分排序', 'v': 'score'}]}], '1': [{'key': '类型', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '动作片', 'v': ''}, {'n': '喜剧片', 'v': ''}, {'n': '爱情片', 'v': ''}, {'n': '科幻片', 'v': ''}, {'n': '恐怖片', 'v': ''}, {'n': '剧情片', 'v': ''}, {'n': '战争片', 'v': ''}]}, {'key': '剧情', 'name': '剧情', 'value': [{'n': '全部', 'v': ''}, {'n': '喜剧', 'v': '%E5%96%9C%E5%89%A7'}, {'n': '爱情', 'v': '%E7%88%B1%E6%83%85'}, {'n': '恐怖', 'v': '%E6%81%90%E6%80%96'}, {'n': '动作', 'v': '%E5%8A%A8%E4%BD%9C'}, {'n': '科幻', 'v': '%E7%A7%91%E5%B9%BB'}, {'n': '剧情', 'v': '%E5%89%A7%E6%83%85'}, {'n': '战争', 'v': '%E6%88%98%E4%BA%89'}, {'n': '警匪', 'v': '%E8%AD%A6%E5%8C%AA'}, {'n': '犯罪', 'v': '%E7%8A%AF%E7%BD%AA'}, {'n': '动画', 'v': '%E5%8A%A8%E7%94%BB'}, {'n': '奇幻', 'v': '%E5%A5%87%E5%B9%BB'}, {'n': '武侠', 'v': '%E6%AD%A6%E4%BE%A0'}, {'n': '冒险', 'v': '%E5%86%92%E9%99%A9'}, {'n': '枪战', 'v': '%E6%9E%AA%E6%88%98'}, {'n': '恐怖', 'v': '%E6%81%90%E6%80%96'}, {'n': '悬疑', 'v': '%E6%82%AC%E7%96%91'}, {'n': '惊悚', 'v': '%E6%83%8A%E6%82%9A'}, {'n': '经典', 'v': '%E7%BB%8F%E5%85%B8'}, {'n': '青春', 'v': '%E9%9D%92%E6%98%A5'}, {'n': '文艺', 'v': '%E6%96%87%E8%89%BA'}, {'n': '微电影', 'v': '%E5%BE%AE%E7%94%B5%E5%BD%B1'}, {'n': '古装', 'v': '%E5%8F%A4%E8%A3%85'}, {'n': '历史', 'v': '%E5%8E%86%E5%8F%B2'}, {'n': '运动', 'v': '%E8%BF%90%E5%8A%A8'}, {'n': '农村', 'v': '%E5%86%9C%E6%9D%91'}, {'n': '儿童', 'v': '%E5%84%BF%E7%AB%A5'}, {'n': '网络电影', 'v': '%E7%BD%91%E7%BB%9C%E7%94%B5%E5%BD%B1'}]}, {'key': '地区', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '大陆', 'v': '%E5%A4%A7%E9%99%86'}, {'n': '香港', 'v': '%E9%A6%99%E6%B8%AF'}, {'n': '台湾', 'v': '%E5%8F%B0%E6%B9%BE'}, {'n': '美国', 'v': '%E7%BE%8E%E5%9B%BD'}, {'n': '法国', 'v': '%E6%B3%95%E5%9B%BD'}, {'n': '英国', 'v': '%E8%8B%B1%E5%9B%BD'}, {'n': '日本', 'v': '%E6%97%A5%E6%9C%AC'}, {'n': '韩国', 'v': '%E9%9F%A9%E5%9B%BD'}, {'n': '德国', 'v': '%E5%BE%B7%E5%9B%BD'}, {'n': '泰国', 'v': '%E6%B3%B0%E5%9B%BD'}, {'n': '印度', 'v': '%E5%8D%B0%E5%BA%A6'}, {'n': '意大利', 'v': '%E6%84%8F%E5%A4%A7%E5%88%A9'}, {'n': '西班牙', 'v': '%E8%A5%BF%E7%8F%AD%E7%89%99'}, {'n': '加拿大', 'v': '%E5%8A%A0%E6%8B%BF%E5%A4%A7'}, {'n': '其他', 'v': '%E5%85%B6%E4%BB%96'}]}, {'key': '语言', 'name': '语言', 'value': [{'n': '全部', 'v': ''}, {'n': '国语', 'v': '%E5%9B%BD%E8%AF%AD'}, {'n': '英语', 'v': '%E8%8B%B1%E8%AF%AD'}, {'n': '粤语', 'v': '%E7%B2%A4%E8%AF%AD'}, {'n': '闽南语', 'v': '%E9%97%BD%E5%8D%97%E8%AF%AD'}, {'n': '韩语', 'v': '%E9%9F%A9%E8%AF%AD'}, {'n': '日语', 'v': '%E6%97%A5%E8%AF%AD'}, {'n': '法语', 'v': '%E6%B3%95%E8%AF%AD'}, {'n': '德语', 'v': '%E5%BE%B7%E8%AF%AD'}, {'n': '其它', 'v': '%E5%85%B6%E5%AE%83'}]}, {'key': '年份', 'name': '年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2014', 'v': '2014'}, {'n': '2013', 'v': '2013'}, {'n': '2012', 'v': '2012'}, {'n': '2011', 'v': '2011'}, {'n': '2010', 'v': '2010'}]}, {'key': '字母', 'name': '字母', 'value': [{'n': '字母', 'v': ''}, {'n': 'A', 'v': 'A'}, {'n': 'B', 'v': 'B'}, {'n': 'C', 'v': 'C'}, {'n': 'D', 'v': 'D'}, {'n': 'E', 'v': 'E'}, {'n': 'F', 'v': 'F'}, {'n': 'G', 'v': 'G'}, {'n': 'H', 'v': 'H'}, {'n': 'I', 'v': 'I'}, {'n': 'J', 'v': 'J'}, {'n': 'K', 'v': 'K'}, {'n': 'L', 'v': 'L'}, {'n': 'M', 'v': 'M'}, {'n': 'N', 'v': 'N'}, {'n': 'O', 'v': 'O'}, {'n': 'P', 'v': 'P'}, {'n': 'Q', 'v': 'Q'}, {'n': 'R', 'v': 'R'}, {'n': 'S', 'v': 'S'}, {'n': 'T', 'v': 'T'}, {'n': 'U', 'v': 'U'}, {'n': 'V', 'v': 'V'}, {'n': 'W', 'v': 'W'}, {'n': 'X', 'v': 'X'}, {'n': 'Y', 'v': 'Y'}, {'n': 'Z', 'v': 'Z'}, {'n': '0-9', 'v': '09'}]}, {'key': '排序', 'name': '排序', 'value': [{'n': '时间排序', 'v': 'time'}, {'n': '人气排序', 'v': 'hits'}, {'n': '评分排序', 'v': 'score'}]}], '2': [{'key': '类型', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '国产剧', 'v': ''}, {'n': '港台剧', 'v': ''}]}, {'key': '剧情', 'name': '剧情', 'value': [{'n': '全部', 'v': ''}, {'n': '警匪', 'v': '%E8%AD%A6%E5%8C%AA'}, {'n': '都市', 'v': '%E9%83%BD%E5%B8%82'}, {'n': '古装', 'v': '%E5%8F%A4%E8%A3%85'}, {'n': '战争', 'v': '%E6%88%98%E4%BA%89'}, {'n': '青春偶像', 'v': '%E9%9D%92%E6%98%A5%E5%81%B6%E5%83%8F'}, {'n': '喜剧', 'v': '%E5%96%9C%E5%89%A7'}, {'n': '家庭', 'v': '%E5%AE%B6%E5%BA%AD'}, {'n': '犯罪', 'v': '%E7%8A%AF%E7%BD%AA'}, {'n': '动作', 'v': '%E5%8A%A8%E4%BD%9C'}, {'n': '奇幻', 'v': '%E5%A5%87%E5%B9%BB'}, {'n': '剧情', 'v': '%E5%89%A7%E6%83%85'}, {'n': '历史', 'v': '%E5%8E%86%E5%8F%B2'}, {'n': '经典', 'v': '%E7%BB%8F%E5%85%B8'}, {'n': '乡村', 'v': '%E4%B9%A1%E6%9D%91'}, {'n': '情景', 'v': '%E6%83%85%E6%99%AF'}, {'n': '商战', 'v': '%E5%95%86%E6%88%98'}, {'n': '网剧', 'v': '%E7%BD%91%E5%89%A7'}, {'n': '其他', 'v': '%E5%85%B6%E4%BB%96'}]}, {'key': '地区', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': '%E5%86%85%E5%9C%B0'}, {'n': '韩国', 'v': '%E9%9F%A9%E5%9B%BD'}, {'n': '香港', 'v': '%E9%A6%99%E6%B8%AF'}, {'n': '台湾', 'v': '%E5%8F%B0%E6%B9%BE'}, {'n': '日本', 'v': '%E6%97%A5%E6%9C%AC'}, {'n': '美国', 'v': '%E7%BE%8E%E5%9B%BD'}, {'n': '泰国', 'v': '%E6%B3%B0%E5%9B%BD'}, {'n': '英国', 'v': '%E8%8B%B1%E5%9B%BD'}, {'n': '新加坡', 'v': '%E6%96%B0%E5%8A%A0%E5%9D%A1'}, {'n': '其他', 'v': '%E5%85%B6%E4%BB%96'}]}, {'key': '语言', 'name': '语言', 'value': [{'n': '全部', 'v': ''}, {'n': '国语', 'v': '%E5%9B%BD%E8%AF%AD'}, {'n': '英语', 'v': '%E8%8B%B1%E8%AF%AD'}, {'n': '粤语', 'v': '%E7%B2%A4%E8%AF%AD'}, {'n': '闽南语', 'v': '%E9%97%BD%E5%8D%97%E8%AF%AD'}, {'n': '韩语', 'v': '%E9%9F%A9%E8%AF%AD'}, {'n': '日语', 'v': '%E6%97%A5%E8%AF%AD'}, {'n': '其它', 'v': '%E5%85%B6%E5%AE%83'}]}, {'key': '年份', 'name': '年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2014', 'v': '2014'}, {'n': '2013', 'v': '2013'}, {'n': '2012', 'v': '2012'}, {'n': '2011', 'v': '2011'}, {'n': '2010', 'v': '2010'}]}, {'key': '字母', 'name': '字母', 'value': [{'n': '字母', 'v': ''}, {'n': 'A', 'v': 'A'}, {'n': 'B', 'v': 'B'}, {'n': 'C', 'v': 'C'}, {'n': 'D', 'v': 'D'}, {'n': 'E', 'v': 'E'}, {'n': 'F', 'v': 'F'}, {'n': 'G', 'v': 'G'}, {'n': 'H', 'v': 'H'}, {'n': 'I', 'v': 'I'}, {'n': 'J', 'v': 'J'}, {'n': 'K', 'v': 'K'}, {'n': 'L', 'v': 'L'}, {'n': 'M', 'v': 'M'}, {'n': 'N', 'v': 'N'}, {'n': 'O', 'v': 'O'}, {'n': 'P', 'v': 'P'}, {'n': 'Q', 'v': 'Q'}, {'n': 'R', 'v': 'R'}, {'n': 'S', 'v': 'S'}, {'n': 'T', 'v': 'T'}, {'n': 'U', 'v': 'U'}, {'n': 'V', 'v': 'V'}, {'n': 'W', 'v': 'W'}, {'n': 'X', 'v': 'X'}, {'n': 'Y', 'v': 'Y'}, {'n': 'Z', 'v': 'Z'}, {'n': '0-9', 'v': '09'}]}, {'key': '排序', 'name': '排序', 'value': [{'n': '时间排序', 'v': 'time'}, {'n': '人气排序', 'v': 'hits'}, {'n': '评分排序', 'v': 'score'}]}], '3': [{'key': '剧情', 'name': '剧情', 'value': [{'n': '全部', 'v': ''}, {'n': '选秀', 'v': '%E9%80%89%E7%A7%80'}, {'n': '情感', 'v': '%E6%83%85%E6%84%9F'}, {'n': '访谈', 'v': '%E8%AE%BF%E8%B0%88'}, {'n': '播报', 'v': '%E6%92%AD%E6%8A%A5'}, {'n': '旅游', 'v': '%E6%97%85%E6%B8%B8'}, {'n': '音乐', 'v': '%E9%9F%B3%E4%B9%90'}, {'n': '美食', 'v': '%E7%BE%8E%E9%A3%9F'}, {'n': '纪实', 'v': '%E7%BA%AA%E5%AE%9E'}, {'n': '曲艺', 'v': '%E6%9B%B2%E8%89%BA'}, {'n': '生活', 'v': '%E7%94%9F%E6%B4%BB'}, {'n': '游戏互动', 'v': '%E6%B8%B8%E6%88%8F%E4%BA%92%E5%8A%A8'}, {'n': '财经', 'v': '%E8%B4%A2%E7%BB%8F'}, {'n': '求职', 'v': '%E6%B1%82%E8%81%8C'}]}, {'key': '地区', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': '%E5%86%85%E5%9C%B0'}, {'n': '港台', 'v': '%E6%B8%AF%E5%8F%B0'}, {'n': '日韩', 'v': '%E6%97%A5%E9%9F%A9'}, {'n': '欧美', 'v': '%E6%AC%A7%E7%BE%8E'}]}, {'key': '语言', 'name': '语言', 'value': [{'n': '全部', 'v': ''}, {'n': '国语', 'v': '%E5%9B%BD%E8%AF%AD'}, {'n': '英语', 'v': '%E8%8B%B1%E8%AF%AD'}, {'n': '粤语', 'v': '%E7%B2%A4%E8%AF%AD'}, {'n': '闽南语', 'v': '%E9%97%BD%E5%8D%97%E8%AF%AD'}, {'n': '韩语', 'v': '%E9%9F%A9%E8%AF%AD'}, {'n': '日语', 'v': '%E6%97%A5%E8%AF%AD'}, {'n': '其它', 'v': '%E5%85%B6%E5%AE%83'}]}, {'key': '年份', 'name': '年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2014', 'v': '2014'}, {'n': '2013', 'v': '2013'}, {'n': '2012', 'v': '2012'}, {'n': '2011', 'v': '2011'}, {'n': '2010', 'v': '2010'}]}, {'key': '字母', 'name': '字母', 'value': [{'n': '字母', 'v': ''}, {'n': 'A', 'v': 'A'}, {'n': 'B', 'v': 'B'}, {'n': 'C', 'v': 'C'}, {'n': 'D', 'v': 'D'}, {'n': 'E', 'v': 'E'}, {'n': 'F', 'v': 'F'}, {'n': 'G', 'v': 'G'}, {'n': 'H', 'v': 'H'}, {'n': 'I', 'v': 'I'}, {'n': 'J', 'v': 'J'}, {'n': 'K', 'v': 'K'}, {'n': 'L', 'v': 'L'}, {'n': 'M', 'v': 'M'}, {'n': 'N', 'v': 'N'}, {'n': 'O', 'v': 'O'}, {'n': 'P', 'v': 'P'}, {'n': 'Q', 'v': 'Q'}, {'n': 'R', 'v': 'R'}, {'n': 'S', 'v': 'S'}, {'n': 'T', 'v': 'T'}, {'n': 'U', 'v': 'U'}, {'n': 'V', 'v': 'V'}, {'n': 'W', 'v': 'W'}, {'n': 'X', 'v': 'X'}, {'n': 'Y', 'v': 'Y'}, {'n': 'Z', 'v': 'Z'}, {'n': '0-9', 'v': '09'}]}, {'key': '排序', 'name': '排序', 'value': [{'n': '时间排序', 'v': 'time'}, {'n': '人气排序', 'v': 'hits'}, {'n': '评分排序', 'v': 'score'}]}], '4': [{'key': '剧情', 'name': '剧情', 'value': [{'n': '全部', 'v': ''}, {'n': '情感', 'v': '%E6%83%85%E6%84%9F'}, {'n': '科幻', 'v': '%E7%A7%91%E5%B9%BB'}, {'n': '热血', 'v': '%E7%83%AD%E8%A1%80'}, {'n': '推理', 'v': '%E6%8E%A8%E7%90%86'}, {'n': '搞笑', 'v': '%E6%90%9E%E7%AC%91'}, {'n': '冒险', 'v': '%E5%86%92%E9%99%A9'}, {'n': '萝莉', 'v': '%E8%90%9D%E8%8E%89'}, {'n': '校园', 'v': '%E6%A0%A1%E5%9B%AD'}, {'n': '动作', 'v': '%E5%8A%A8%E4%BD%9C'}, {'n': '机战', 'v': '%E6%9C%BA%E6%88%98'}, {'n': '运动', 'v': '%E8%BF%90%E5%8A%A8'}, {'n': '战争', 'v': '%E6%88%98%E4%BA%89'}, {'n': '少年', 'v': '%E5%B0%91%E5%B9%B4'}, {'n': '少女', 'v': '%E5%B0%91%E5%A5%B3'}, {'n': '社会', 'v': '%E7%A4%BE%E4%BC%9A'}, {'n': '原创', 'v': '%E5%8E%9F%E5%88%9B'}, {'n': '亲子', 'v': '%E4%BA%B2%E5%AD%90'}, {'n': '益智', 'v': '%E7%9B%8A%E6%99%BA'}, {'n': '励志', 'v': '%E5%8A%B1%E5%BF%97'}, {'n': '其他', 'v': '%E5%85%B6%E4%BB%96'}]}, {'key': '地区', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '国产', 'v': '%E5%9B%BD%E4%BA%A7'}, {'n': '日本', 'v': '%E6%97%A5%E6%9C%AC'}, {'n': '欧美', 'v': '%E6%AC%A7%E7%BE%8E'}, {'n': '其他', 'v': '%E5%85%B6%E4%BB%96'}]}, {'key': '语言', 'name': '语言', 'value': [{'n': '全部', 'v': ''}, {'n': '国语', 'v': '%E5%9B%BD%E8%AF%AD'}, {'n': '英语', 'v': '%E8%8B%B1%E8%AF%AD'}, {'n': '粤语', 'v': '%E7%B2%A4%E8%AF%AD'}, {'n': '闽南语', 'v': '%E9%97%BD%E5%8D%97%E8%AF%AD'}, {'n': '韩语', 'v': '%E9%9F%A9%E8%AF%AD'}, {'n': '日语', 'v': '%E6%97%A5%E8%AF%AD'}, {'n': '其它', 'v': '%E5%85%B6%E5%AE%83'}]}, {'key': '年份', 'name': '年份', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2014', 'v': '2014'}, {'n': '2013', 'v': '2013'}, {'n': '2012', 'v': '2012'}, {'n': '2011', 'v': '2011'}, {'n': '2010', 'v': '2010'}]}, {'key': '字母', 'name': '字母', 'value': [{'n': '字母', 'v': ''}, {'n': 'A', 'v': 'A'}, {'n': 'B', 'v': 'B'}, {'n': 'C', 'v': 'C'}, {'n': 'D', 'v': 'D'}, {'n': 'E', 'v': 'E'}, {'n': 'F', 'v': 'F'}, {'n': 'G', 'v': 'G'}, {'n': 'H', 'v': 'H'}, {'n': 'I', 'v': 'I'}, {'n': 'J', 'v': 'J'}, {'n': 'K', 'v': 'K'}, {'n': 'L', 'v': 'L'}, {'n': 'M', 'v': 'M'}, {'n': 'N', 'v': 'N'}, {'n': 'O', 'v': 'O'}, {'n': 'P', 'v': 'P'}, {'n': 'Q', 'v': 'Q'}, {'n': 'R', 'v': 'R'}, {'n': 'S', 'v': 'S'}, {'n': 'T', 'v': 'T'}, {'n': 'U', 'v': 'U'}, {'n': 'V', 'v': 'V'}, {'n': 'W', 'v': 'W'}, {'n': 'X', 'v': 'X'}, {'n': 'Y', 'v': 'Y'}, {'n': 'Z', 'v': 'Z'}, {'n': '0-9', 'v': '09'}]}, {'key': '排序', 'name': '排序', 'value': [{'n': '时间排序', 'v': 'time'}, {'n': '人气排序', 'v': 'hits'}, {'n': '评分排序', 'v': 'score'}]}], '23': [{'key': '字母', 'name': '字母', 'value': [{'n': '字母', 'v': ''}, {'n': 'A', 'v': 'A'}, {'n': 'B', 'v': 'B'}, {'n': 'C', 'v': 'C'}, {'n': 'D', 'v': 'D'}, {'n': 'E', 'v': 'E'}, {'n': 'F', 'v': 'F'}, {'n': 'G', 'v': 'G'}, {'n': 'H', 'v': 'H'}, {'n': 'I', 'v': 'I'}, {'n': 'J', 'v': 'J'}, {'n': 'K', 'v': 'K'}, {'n': 'L', 'v': 'L'}, {'n': 'M', 'v': 'M'}, {'n': 'N', 'v': 'N'}, {'n': 'O', 'v': 'O'}, {'n': 'P', 'v': 'P'}, {'n': 'Q', 'v': 'Q'}, {'n': 'R', 'v': 'R'}, {'n': 'S', 'v': 'S'}, {'n': 'T', 'v': 'T'}, {'n': 'U', 'v': 'U'}, {'n': 'V', 'v': 'V'}, {'n': 'W', 'v': 'W'}, {'n': 'X', 'v': 'X'}, {'n': 'Y', 'v': 'Y'}, {'n': 'Z', 'v': 'Z'}, {'n': '0-9', 'v': '09'}]}, {'key': '排序', 'name': '排序', 'value': [{'n': '时间排序', 'v': 'time'}, {'n': '人气排序', 'v': 'hits'}, {'n': '评分排序', 'v': 'score'}]}]}, -searchUrl:'/search/**-fypage.html', -class_parse:'.navbar-items li:gt(1):lt(8);a&&Text;a&&href;/(\\d+).html', -lazy:'js:var MY_HOME="http://lanmeiguojiang.com:5244/d/%E8%93%9D%E8%8E%93%E4%BA%91%E7%9B%98";let html=fetch(input,fetch_params);var player=JSON.parse(html.match(/r player_.*?=(.*?)0){sort=MY_FL.sort||"T";tags=Object.values(MY_FL).join(",");if(MY_CATE==="movie"){selected_categories={"类型":MY_FL.类型||"","地区":MY_FL.地区||""}}else{selected_categories={"类型":MY_FL.类型||"","形式":MY_FL.类型?MY_FL.类型+"地区":"","地区":MY_FL.地区||""}}}else{sort="T";tags="";if(MY_CATE==="movie"){selected_categories={"类型":"","地区":""}}else{selected_categories={"类型":"","形式":"","地区":""}}}let params={tags:tags,sort:sort,refresh:0,selected_categories:stringify(selected_categories),start:(MY_PAGE-1)*count,count:count};res=miniapp_request(path,params)}let result={page:MY_PAGE,pagecount:Math.ceil(res.total/count),limit:count,total:res.total};let items=[];if(/^rank_list|tv_hot|show_hot/.test(MY_CATE)){items=res["subject_collection_items"]}else if(MY_CATE==="interests"){res["interests"].forEach(function(it){items.push(it.subject)})}else{items=res.items}let lists=[];items.forEach(function(item){if(item.type==="movie"||item.type==="tv"){let rating=item.rating?item.rating.value:"";let rat_str=rating||"暂无评分";let title=item.title;let honor=item.honor_infos||[];let honor_str=honor.map(function(it){return it.title}).join("|");let vod_obj={vod_name:title!=="未知电影"?title:"暂不支持展示",vod_pic:item.pic.normal,vod_remarks:rat_str+" "+honor_str};let vod_obj_d={url:item.type+"$"+item.id,title:title!=="未知电影"?title:"暂不支持展示",pic_url:item.pic.normal,desc:rat_str+" "+honor_str};lists.push(vod_obj);d.push(vod_obj_d)}});result.list=lists;return result}catch(e){print(e.message)}return{}}let res=cate_filter(d);setResult2(res);', - 二级:'', - 搜索:'', -} \ No newline at end of file diff --git a/TVBox_JS/追剧喵.js b/TVBox_JS/追剧喵.js deleted file mode 100644 index 9a6f989..0000000 --- a/TVBox_JS/追剧喵.js +++ /dev/null @@ -1,6 +0,0 @@ -// muban.海螺2.二级.content = '.hl-infos-content&&Text'; -var rule = Object.assign(muban.海螺2,{ - title:'追剧喵', - host:'https://zjmiao.com', - 搜索:'.search-list;a&&Text;.lazy&&data-original;.deployment&&Text;a&&href', -}); \ No newline at end of file diff --git a/TVBox_JS/追剧达人.js b/TVBox_JS/追剧达人.js deleted file mode 100644 index 3f97c71..0000000 --- a/TVBox_JS/追剧达人.js +++ /dev/null @@ -1,16 +0,0 @@ -var rule={ -title:'追剧达人', -host:'http://zjdr.tv', -url:'/vodshow/id/fyclass/page/fypage.html', -searchUrl:'/vod/search/page/fypage/wd/**.html', -searchable:2, -quickSearch:1, -filterable:0, -headers:{'User-Agent':'MOBILE_UA', }, -class_name:'电影&电视剧&综艺&动漫', -class_url:'1&2&3&4', -推荐:'.module-main;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href', -一级:'.module-poster-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href', -二级:{"title":"h1&&Text;.module-info-items div:eq(5) p&&Text","img":".lazyload&&data-original","desc":";;;.module-info-items div:eq(4) a&&Text;.module-info-items div:eq(3) a&&Text","content":".show-desc&&Text","tabs":".module-tab-items-box div","lists":".module-play-list:eq(#id) a"}, -搜索:'.module-poster-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href', -} \ No newline at end of file diff --git a/TVBox_JS/酷云77.js b/TVBox_JS/酷云77.js deleted file mode 100644 index 2ffb5b5..0000000 --- a/TVBox_JS/酷云77.js +++ /dev/null @@ -1,36 +0,0 @@ -var rule = { - title:'酷云77', - host:'http://api.kunyu77.com', - homeUrl:'/api.php/provide/homeBlock?type_id=0', - searchUrl:'/api.php/provide/searchVideo?searchName=**', - searchable:2, - quickSearch:0, - filterable:1, - multi:1, - // 分类链接fypage参数支持1个()表达式 - url:'/api.php/provide/searchFilter?type_id=fyclass&pagesize=24&pagenum=fypage', - detailUrl:'/api.php/provide/videoDetail?devid=453CA5D864457C7DB4D0EAA93DE96E66&package=com.sevenVideo.app.android&version=1.8.7&ids=fyid', - filter_url:'year={{fl.y}}&category={{fl.scat}}&area={{fl.a}}', - filter:{0: [{'key': 'y', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}], 1: [{'key': 'y', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}], 2: [{'key': 'y', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}], 3: [{'key': 'y', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}], 4: [{'key': 'y', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}]}, - headers:{ - "User-Agent": "Dalvik/2.1.0" - }, - timeout:5000, - class_name:'全部&电影&电视剧&综艺&动漫', - class_url:'0&1&2&3&4', - limit:20, - play_parse:true, - // 手动调用解析请求json的url,此lazy不方便 - // lazy:'js:input={parse:1,url:input};', - lazy:'', - lazy:'js:function GetPlayUrl(playUrl){let realPlay={parse:0,url:playUrl};if(/mgtv|sohu/.test(playUrl)){realPlay.headers={"User-Agent":"Mozilla/5.0"}}else if(/bili/.test(playUrl)){realPlay.headers={"User-Agent":"Mozilla/5.0",Referer:"https://www.bilibili.com"}}else if(/ixigua/.test(playUrl)){realPlay.headers={"User-Agent":"Mozilla/5.0",Referer:"https://www.ixigua.com"}}return realPlay}if(/\\.m3u8|\\.mp4/.test(input)){input={parse:0,url:input}}else{try{let url="http://api.kunyu77.com/api.php/provide/parserUrl?url="+input;let html=request(url);let urll=JSON.parse(html).data.url;let playhtml=request(urll);let playurl=JSON.parse(playhtml).url;input=GetPlayUrl(playurl)}catch(e){input={parse:1,jx:1,url:input}}}', - 推荐:'json:data.blocks;contents;title;videoCover;msg;id', - double:true, - // 一级:'json:data.filterData.listData;title;img;subTitle;videoLink;summary', - 一级:'', - 一级:'json:data.result;title;videoCover;msg;id', - 二级:'', - 二级:'js:var d=[];VOD={vod_id:input};try{let html=request(input);print(html);html=JSON.parse(html);let node=html.data;VOD={vod_id:node["id"],vod_name:node["videoName"],vod_pic:node["videoCover"],type_name:node["subCategory"],vod_year:node["year"],vod_area:node["area"],vod_remarks:node["msg"],vod_actor:node["actor"],vod_director:node["director"],vod_content:node["brief"].strip()};let tid=input.split("ids=")[1];let listUrl="http://api.kunyu77.com/api.php/provide/videoPlaylist?devid=453CA5D864457C7DB4D0EAA93DE96E66&package=com.sevenVideo.app.android&version=1.8.7&ids="+tid;html=request(listUrl);html=JSON.parse(html);let episodes=html.data.episodes;let playMap={};if(typeof play_url==="undefined"){var play_url=""}play_url=play_url.replace("&play_url=","&type=json&play_url=");episodes.forEach(function(ep){let playurls=ep["playurls"];playurls.forEach(function(playurl){let source=playurl["playfrom"];if(!playMap.hasOwnProperty(source)){playMap[source]=[]}playMap[source].append(playurl["title"].strip()+"$"+play_url+urlencode(playurl["playurl"]))})});let playFrom=[];let playList=[];Object.keys(playMap).forEach(function(key){playFrom.append(key);playList.append(playMap[key].join("#"))});let vod_play_from=playFrom.join("$$$");let vod_play_url=playList.join("$$$");VOD["vod_play_from"]=vod_play_from;VOD["vod_play_url"]=vod_play_url}catch(e){log("获取二级详情页发生错误:"+e.message)}', - 搜索:'', - 搜索:'json:data;videoName;videoCover;msg;id', -} \ No newline at end of file diff --git a/TVBox_JS/鸭奈飞.js b/TVBox_JS/鸭奈飞.js deleted file mode 100644 index 0c5390e..0000000 --- a/TVBox_JS/鸭奈飞.js +++ /dev/null @@ -1,6 +0,0 @@ -var rule = Object.assign(muban.mxpro,{ -title:'鸭奈飞', -host:'https://yanetflix.com', -url:'/vodshow/fyclass--------fypage---.html', -class_parse:'.navbar-items li:gt(1):lt(6);a&&Text;a&&href;.*/(.*?).html', -}); \ No newline at end of file

( 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